annotate test-data/references/15-phylo_structure.html @ 0:76c750c5f0d1 draft default tip

planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
author frogs
date Thu, 25 Oct 2018 05:01:13 -0400
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
1 <!DOCTYPE html>
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
2
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
3 <html xmlns="http://www.w3.org/1999/xhtml">
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
4
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
5 <head>
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
6
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
7 <meta charset="utf-8" />
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
8 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
9 <meta name="generator" content="pandoc" />
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
10
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
11
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
12
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
13
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
14 <title></title>
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
15
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
16 <script src="data:application/x-javascript;base64,LyohIGpRdWVyeSB2MS4xMS4zIHwgKGMpIDIwMDUsIDIwMTUgalF1ZXJ5IEZvdW5kYXRpb24sIEluYy4gfCBqcXVlcnkub3JnL2xpY2Vuc2UgKi8KIWZ1bmN0aW9uKGEsYil7Im9iamVjdCI9PXR5cGVvZiBtb2R1bGUmJiJvYmplY3QiPT10eXBlb2YgbW9kdWxlLmV4cG9ydHM/bW9kdWxlLmV4cG9ydHM9YS5kb2N1bWVudD9iKGEsITApOmZ1bmN0aW9uKGEpe2lmKCFhLmRvY3VtZW50KXRocm93IG5ldyBFcnJvcigialF1ZXJ5IHJlcXVpcmVzIGEgd2luZG93IHdpdGggYSBkb2N1bWVudCIpO3JldHVybiBiKGEpfTpiKGEpfSgidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6dGhpcyxmdW5jdGlvbihhLGIpe3ZhciBjPVtdLGQ9Yy5zbGljZSxlPWMuY29uY2F0LGY9Yy5wdXNoLGc9Yy5pbmRleE9mLGg9e30saT1oLnRvU3RyaW5nLGo9aC5oYXNPd25Qcm9wZXJ0eSxrPXt9LGw9IjEuMTEuMyIsbT1mdW5jdGlvbihhLGIpe3JldHVybiBuZXcgbS5mbi5pbml0KGEsYil9LG49L15bXHNcdUZFRkZceEEwXSt8W1xzXHVGRUZGXHhBMF0rJC9nLG89L14tbXMtLyxwPS8tKFtcZGEtel0pL2dpLHE9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYi50b1VwcGVyQ2FzZSgpfTttLmZuPW0ucHJvdG90eXBlPXtqcXVlcnk6bCxjb25zdHJ1Y3RvcjptLHNlbGVjdG9yOiIiLGxlbmd0aDowLHRvQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gZC5jYWxsKHRoaXMpfSxnZXQ6ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGwhPWE/MD5hP3RoaXNbYSt0aGlzLmxlbmd0aF06dGhpc1thXTpkLmNhbGwodGhpcyl9LHB1c2hTdGFjazpmdW5jdGlvbihhKXt2YXIgYj1tLm1lcmdlKHRoaXMuY29uc3RydWN0b3IoKSxhKTtyZXR1cm4gYi5wcmV2T2JqZWN0PXRoaXMsYi5jb250ZXh0PXRoaXMuY29udGV4dCxifSxlYWNoOmZ1bmN0aW9uKGEsYil7cmV0dXJuIG0uZWFjaCh0aGlzLGEsYil9LG1hcDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2sobS5tYXAodGhpcyxmdW5jdGlvbihiLGMpe3JldHVybiBhLmNhbGwoYixjLGIpfSkpfSxzbGljZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnB1c2hTdGFjayhkLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9LGZpcnN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXEoMCl9LGxhc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lcSgtMSl9LGVxOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMubGVuZ3RoLGM9K2ErKDA+YT9iOjApO3JldHVybiB0aGlzLnB1c2hTdGFjayhjPj0wJiZiPmM/W3RoaXNbY11dOltdKX0sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJldk9iamVjdHx8dGhpcy5jb25zdHJ1Y3RvcihudWxsKX0scHVzaDpmLHNvcnQ6Yy5zb3J0LHNwbGljZTpjLnNwbGljZX0sbS5leHRlbmQ9bS5mbi5leHRlbmQ9ZnVuY3Rpb24oKXt2YXIgYSxiLGMsZCxlLGYsZz1hcmd1bWVudHNbMF18fHt9LGg9MSxpPWFyZ3VtZW50cy5sZW5ndGgsaj0hMTtmb3IoImJvb2xlYW4iPT10eXBlb2YgZyYmKGo9ZyxnPWFyZ3VtZW50c1toXXx8e30saCsrKSwib2JqZWN0Ij09dHlwZW9mIGd8fG0uaXNGdW5jdGlvbihnKXx8KGc9e30pLGg9PT1pJiYoZz10aGlzLGgtLSk7aT5oO2grKylpZihudWxsIT0oZT1hcmd1bWVudHNbaF0pKWZvcihkIGluIGUpYT1nW2RdLGM9ZVtkXSxnIT09YyYmKGomJmMmJihtLmlzUGxhaW5PYmplY3QoYyl8fChiPW0uaXNBcnJheShjKSkpPyhiPyhiPSExLGY9YSYmbS5pc0FycmF5KGEpP2E6W10pOmY9YSYmbS5pc1BsYWluT2JqZWN0KGEpP2E6e30sZ1tkXT1tLmV4dGVuZChqLGYsYykpOnZvaWQgMCE9PWMmJihnW2RdPWMpKTtyZXR1cm4gZ30sbS5leHRlbmQoe2V4cGFuZG86ImpRdWVyeSIrKGwrTWF0aC5yYW5kb20oKSkucmVwbGFjZSgvXEQvZywiIiksaXNSZWFkeTohMCxlcnJvcjpmdW5jdGlvbihhKXt0aHJvdyBuZXcgRXJyb3IoYSl9LG5vb3A6ZnVuY3Rpb24oKXt9LGlzRnVuY3Rpb246ZnVuY3Rpb24oYSl7cmV0dXJuImZ1bmN0aW9uIj09PW0udHlwZShhKX0saXNBcnJheTpBcnJheS5pc0FycmF5fHxmdW5jdGlvbihhKXtyZXR1cm4iYXJyYXkiPT09bS50eXBlKGEpfSxpc1dpbmRvdzpmdW5jdGlvbihhKXtyZXR1cm4gbnVsbCE9YSYmYT09YS53aW5kb3d9LGlzTnVtZXJpYzpmdW5jdGlvbihhKXtyZXR1cm4hbS5pc0FycmF5KGEpJiZhLXBhcnNlRmxvYXQoYSkrMT49MH0saXNFbXB0eU9iamVjdDpmdW5jdGlvbihhKXt2YXIgYjtmb3IoYiBpbiBhKXJldHVybiExO3JldHVybiEwfSxpc1BsYWluT2JqZWN0OmZ1bmN0aW9uKGEpe3ZhciBiO2lmKCFhfHwib2JqZWN0IiE9PW0udHlwZShhKXx8YS5ub2RlVHlwZXx8bS5pc1dpbmRvdyhhKSlyZXR1cm4hMTt0cnl7aWYoYS5jb25zdHJ1Y3RvciYmIWouY2FsbChhLCJjb25zdHJ1Y3RvciIpJiYhai5jYWxsKGEuY29uc3RydWN0b3IucHJvdG90eXBlLCJpc1Byb3RvdHlwZU9mIikpcmV0dXJuITF9Y2F0Y2goYyl7cmV0dXJuITF9aWYoay5vd25MYXN0KWZvcihiIGluIGEpcmV0dXJuIGouY2FsbChhLGIpO2ZvcihiIGluIGEpO3JldHVybiB2b2lkIDA9PT1ifHxqLmNhbGwoYSxiKX0sdHlwZTpmdW5jdGlvbihhKXtyZXR1cm4gbnVsbD09YT9hKyIiOiJvYmplY3QiPT10eXBlb2YgYXx8ImZ1bmN0aW9uIj09dHlwZW9mIGE/aFtpLmNhbGwoYSldfHwib2JqZWN0Ijp0eXBlb2YgYX0sZ2xvYmFsRXZhbDpmdW5jdGlvbihiKXtiJiZtLnRyaW0oYikmJihhLmV4ZWNTY3JpcHR8fGZ1bmN0aW9uKGIpe2EuZXZhbC5jYWxsKGEsYil9KShiKX0sY2FtZWxDYXNlOmZ1bmN0aW9uKGEpe3JldHVybiBhLnJlcGxhY2UobywibXMtIikucmVwbGFjZShwLHEpfSxub2RlTmFtZTpmdW5jdGlvbihhLGIpe3JldHVybiBhLm5vZGVOYW1lJiZhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1iLnRvTG93ZXJDYXNlKCl9LGVhY2g6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGU9MCxmPWEubGVuZ3RoLGc9cihhKTtpZihjKXtpZihnKXtmb3IoO2Y+ZTtlKyspaWYoZD1iLmFwcGx5KGFbZV0sYyksZD09PSExKWJyZWFrfWVsc2UgZm9yKGUgaW4gYSlpZihkPWIuYXBwbHkoYVtlXSxjKSxkPT09ITEpYnJlYWt9ZWxzZSBpZihnKXtmb3IoO2Y+ZTtlKyspaWYoZD1iLmNhbGwoYVtlXSxlLGFbZV0pLGQ9PT0hMSlicmVha31lbHNlIGZvcihlIGluIGEpaWYoZD1iLmNhbGwoYVtlXSxlLGFbZV0pLGQ9PT0hMSlicmVhaztyZXR1cm4gYX0sdHJpbTpmdW5jdGlvbihhKXtyZXR1cm4gbnVsbD09YT8iIjooYSsiIikucmVwbGFjZShuLCIiKX0sbWFrZUFycmF5OmZ1bmN0aW9uKGEsYil7dmFyIGM9Ynx8W107cmV0dXJuIG51bGwhPWEmJihyKE9iamVjdChhKSk/bS5tZXJnZShjLCJzdHJpbmciPT10eXBlb2YgYT9bYV06YSk6Zi5jYWxsKGMsYSkpLGN9LGluQXJyYXk6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkO2lmKGIpe2lmKGcpcmV0dXJuIGcuY2FsbChiLGEsYyk7Zm9yKGQ9Yi5sZW5ndGgsYz1jPzA+Yz9NYXRoLm1heCgwLGQrYyk6YzowO2Q+YztjKyspaWYoYyBpbiBiJiZiW2NdPT09YSlyZXR1cm4gY31yZXR1cm4tMX0sbWVyZ2U6ZnVuY3Rpb24oYSxiKXt2YXIgYz0rYi5sZW5ndGgsZD0wLGU9YS5sZW5ndGg7d2hpbGUoYz5kKWFbZSsrXT1iW2QrK107aWYoYyE9PWMpd2hpbGUodm9pZCAwIT09YltkXSlhW2UrK109YltkKytdO3JldHVybiBhLmxlbmd0aD1lLGF9LGdyZXA6ZnVuY3Rpb24oYSxiLGMpe2Zvcih2YXIgZCxlPVtdLGY9MCxnPWEubGVuZ3RoLGg9IWM7Zz5mO2YrKylkPSFiKGFbZl0sZiksZCE9PWgmJmUucHVzaChhW2ZdKTtyZXR1cm4gZX0sbWFwOmZ1bmN0aW9uKGEsYixjKXt2YXIgZCxmPTAsZz1hLmxlbmd0aCxoPXIoYSksaT1bXTtpZihoKWZvcig7Zz5mO2YrKylkPWIoYVtmXSxmLGMpLG51bGwhPWQmJmkucHVzaChkKTtlbHNlIGZvcihmIGluIGEpZD1iKGFbZl0sZixjKSxudWxsIT1kJiZpLnB1c2goZCk7cmV0dXJuIGUuYXBwbHkoW10saSl9LGd1aWQ6MSxwcm94eTpmdW5jdGlvbihhLGIpe3ZhciBjLGUsZjtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGImJihmPWFbYl0sYj1hLGE9ZiksbS5pc0Z1bmN0aW9uKGEpPyhjPWQuY2FsbChhcmd1bWVudHMsMiksZT1mdW5jdGlvbigpe3JldHVybiBhLmFwcGx5KGJ8fHRoaXMsYy5jb25jYXQoZC5jYWxsKGFyZ3VtZW50cykpKX0sZS5ndWlkPWEuZ3VpZD1hLmd1aWR8fG0uZ3VpZCsrLGUpOnZvaWQgMH0sbm93OmZ1bmN0aW9uKCl7cmV0dXJuK25ldyBEYXRlfSxzdXBwb3J0Omt9KSxtLmVhY2goIkJvb2xlYW4gTnVtYmVyIFN0cmluZyBGdW5jdGlvbiBBcnJheSBEYXRlIFJlZ0V4cCBPYmplY3QgRXJyb3IiLnNwbGl0KCIgIiksZnVuY3Rpb24oYSxiKXtoWyJbb2JqZWN0ICIrYisiXSJdPWIudG9Mb3dlckNhc2UoKX0pO2Z1bmN0aW9uIHIoYSl7dmFyIGI9Imxlbmd0aCJpbiBhJiZhLmxlbmd0aCxjPW0udHlwZShhKTtyZXR1cm4iZnVuY3Rpb24iPT09Y3x8bS5pc1dpbmRvdyhhKT8hMToxPT09YS5ub2RlVHlwZSYmYj8hMDoiYXJyYXkiPT09Y3x8MD09PWJ8fCJudW1iZXIiPT10eXBlb2YgYiYmYj4wJiZiLTEgaW4gYX12YXIgcz1mdW5jdGlvbihhKXt2YXIgYixjLGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHAscSxyLHMsdCx1PSJzaXp6bGUiKzEqbmV3IERhdGUsdj1hLmRvY3VtZW50LHc9MCx4PTAseT1oYSgpLHo9aGEoKSxBPWhhKCksQj1mdW5jdGlvbihhLGIpe3JldHVybiBhPT09YiYmKGw9ITApLDB9LEM9MTw8MzEsRD17fS5oYXNPd25Qcm9wZXJ0eSxFPVtdLEY9RS5wb3AsRz1FLnB1c2gsSD1FLnB1c2gsST1FLnNsaWNlLEo9ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9MCxkPWEubGVuZ3RoO2Q+YztjKyspaWYoYVtjXT09PWIpcmV0dXJuIGM7cmV0dXJuLTF9LEs9ImNoZWNrZWR8c2VsZWN0ZWR8YXN5bmN8YXV0b2ZvY3VzfGF1dG9wbGF5fGNvbnRyb2xzfGRlZmVyfGRpc2FibGVkfGhpZGRlbnxpc21hcHxsb29wfG11bHRpcGxlfG9wZW58cmVhZG9ubHl8cmVxdWlyZWR8c2NvcGVkIixMPSJbXFx4MjBcXHRcXHJcXG5cXGZdIixNPSIoPzpcXFxcLnxbXFx3LV18W15cXHgwMC1cXHhhMF0pKyIsTj1NLnJlcGxhY2UoInciLCJ3IyIpLE89IlxcWyIrTCsiKigiK00rIikoPzoiK0wrIiooWypeJHwhfl0/PSkiK0wrIiooPzonKCg/OlxcXFwufFteXFxcXCddKSopJ3xcIigoPzpcXFxcLnxbXlxcXFxcIl0pKilcInwoIitOKyIpKXwpIitMKyIqXFxdIixQPSI6KCIrTSsiKSg/OlxcKCgoJygoPzpcXFxcLnxbXlxcXFwnXSkqKSd8XCIoKD86XFxcXC58W15cXFxcXCJdKSopXCIpfCgoPzpcXFxcLnxbXlxcXFwoKVtcXF1dfCIrTysiKSopfC4qKVxcKXwpIixRPW5ldyBSZWdFeHAoTCsiKyIsImciKSxSPW5ldyBSZWdFeHAoIl4iK0wrIit8KCg/Ol58W15cXFxcXSkoPzpcXFxcLikqKSIrTCsiKyQiLCJnIiksUz1uZXcgUmVnRXhwKCJeIitMKyIqLCIrTCsiKiIpLFQ9bmV3IFJlZ0V4cCgiXiIrTCsiKihbPit+XXwiK0wrIikiK0wrIioiKSxVPW5ldyBSZWdFeHAoIj0iK0wrIiooW15cXF0nXCJdKj8pIitMKyIqXFxdIiwiZyIpLFY9bmV3IFJlZ0V4cChQKSxXPW5ldyBSZWdFeHAoIl4iK04rIiQiKSxYPXtJRDpuZXcgUmVnRXhwKCJeIygiK00rIikiKSxDTEFTUzpuZXcgUmVnRXhwKCJeXFwuKCIrTSsiKSIpLFRBRzpuZXcgUmVnRXhwKCJeKCIrTS5yZXBsYWNlKCJ3IiwidyoiKSsiKSIpLEFUVFI6bmV3IFJlZ0V4cCgiXiIrTyksUFNFVURPOm5ldyBSZWdFeHAoIl4iK1ApLENISUxEOm5ldyBSZWdFeHAoIl46KG9ubHl8Zmlyc3R8bGFzdHxudGh8bnRoLWxhc3QpLShjaGlsZHxvZi10eXBlKSg/OlxcKCIrTCsiKihldmVufG9kZHwoKFsrLV18KShcXGQqKW58KSIrTCsiKig/OihbKy1dfCkiK0wrIiooXFxkKyl8KSkiK0wrIipcXCl8KSIsImkiKSxib29sOm5ldyBSZWdFeHAoIl4oPzoiK0srIikkIiwiaSIpLG5lZWRzQ29udGV4dDpuZXcgUmVnRXhwKCJeIitMKyIqWz4rfl18OihldmVufG9kZHxlcXxndHxsdHxudGh8Zmlyc3R8bGFzdCkoPzpcXCgiK0wrIiooKD86LVxcZCk/XFxkKikiK0wrIipcXCl8KSg/PVteLV18JCkiLCJpIil9LFk9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSxaPS9eaFxkJC9pLCQ9L15bXntdK1x7XHMqXFtuYXRpdmUgXHcvLF89L14oPzojKFtcdy1dKyl8KFx3Kyl8XC4oW1x3LV0rKSkkLyxhYT0vWyt+XS8sYmE9Lyd8XFwvZyxjYT1uZXcgUmVnRXhwKCJcXFxcKFtcXGRhLWZdezEsNn0iK0wrIj98KCIrTCsiKXwuKSIsImlnIiksZGE9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPSIweCIrYi02NTUzNjtyZXR1cm4gZCE9PWR8fGM/YjowPmQ/U3RyaW5nLmZyb21DaGFyQ29kZShkKzY1NTM2KTpTdHJpbmcuZnJvbUNoYXJDb2RlKGQ+PjEwfDU1Mjk2LDEwMjMmZHw1NjMyMCl9LGVhPWZ1bmN0aW9uKCl7bSgpfTt0cnl7SC5hcHBseShFPUkuY2FsbCh2LmNoaWxkTm9kZXMpLHYuY2hpbGROb2RlcyksRVt2LmNoaWxkTm9kZXMubGVuZ3RoXS5ub2RlVHlwZX1jYXRjaChmYSl7SD17YXBwbHk6RS5sZW5ndGg/ZnVuY3Rpb24oYSxiKXtHLmFwcGx5KGEsSS5jYWxsKGIpKX06ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLmxlbmd0aCxkPTA7d2hpbGUoYVtjKytdPWJbZCsrXSk7YS5sZW5ndGg9Yy0xfX19ZnVuY3Rpb24gZ2EoYSxiLGQsZSl7dmFyIGYsaCxqLGssbCxvLHIscyx3LHg7aWYoKGI/Yi5vd25lckRvY3VtZW50fHxiOnYpIT09biYmbShiKSxiPWJ8fG4sZD1kfHxbXSxrPWIubm9kZVR5cGUsInN0cmluZyIhPXR5cGVvZiBhfHwhYXx8MSE9PWsmJjkhPT1rJiYxMSE9PWspcmV0dXJuIGQ7aWYoIWUmJnApe2lmKDExIT09ayYmKGY9Xy5leGVjKGEpKSlpZihqPWZbMV0pe2lmKDk9PT1rKXtpZihoPWIuZ2V0RWxlbWVudEJ5SWQoaiksIWh8fCFoLnBhcmVudE5vZGUpcmV0dXJuIGQ7aWYoaC5pZD09PWopcmV0dXJuIGQucHVzaChoKSxkfWVsc2UgaWYoYi5vd25lckRvY3VtZW50JiYoaD1iLm93bmVyRG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaikpJiZ0KGIsaCkmJmguaWQ9PT1qKXJldHVybiBkLnB1c2goaCksZH1lbHNle2lmKGZbMl0pcmV0dXJuIEguYXBwbHkoZCxiLmdldEVsZW1lbnRzQnlUYWdOYW1lKGEpKSxkO2lmKChqPWZbM10pJiZjLmdldEVsZW1lbnRzQnlDbGFzc05hbWUpcmV0dXJuIEguYXBwbHkoZCxiLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoaikpLGR9aWYoYy5xc2EmJighcXx8IXEudGVzdChhKSkpe2lmKHM9cj11LHc9Yix4PTEhPT1rJiZhLDE9PT1rJiYib2JqZWN0IiE9PWIubm9kZU5hbWUudG9Mb3dlckNhc2UoKSl7bz1nKGEpLChyPWIuZ2V0QXR0cmlidXRlKCJpZCIpKT9zPXIucmVwbGFjZShiYSwiXFwkJiIpOmIuc2V0QXR0cmlidXRlKCJpZCIscykscz0iW2lkPSciK3MrIiddICIsbD1vLmxlbmd0aDt3aGlsZShsLS0pb1tsXT1zK3JhKG9bbF0pO3c9YWEudGVzdChhKSYmcGEoYi5wYXJlbnROb2RlKXx8Yix4PW8uam9pbigiLCIpfWlmKHgpdHJ5e3JldHVybiBILmFwcGx5KGQsdy5xdWVyeVNlbGVjdG9yQWxsKHgpKSxkfWNhdGNoKHkpe31maW5hbGx5e3J8fGIucmVtb3ZlQXR0cmlidXRlKCJpZCIpfX19cmV0dXJuIGkoYS5yZXBsYWNlKFIsIiQxIiksYixkLGUpfWZ1bmN0aW9uIGhhKCl7dmFyIGE9W107ZnVuY3Rpb24gYihjLGUpe3JldHVybiBhLnB1c2goYysiICIpPmQuY2FjaGVMZW5ndGgmJmRlbGV0ZSBiW2Euc2hpZnQoKV0sYltjKyIgIl09ZX1yZXR1cm4gYn1mdW5jdGlvbiBpYShhKXtyZXR1cm4gYVt1XT0hMCxhfWZ1bmN0aW9uIGphKGEpe3ZhciBiPW4uY3JlYXRlRWxlbWVudCgiZGl2Iik7dHJ5e3JldHVybiEhYShiKX1jYXRjaChjKXtyZXR1cm4hMX1maW5hbGx5e2IucGFyZW50Tm9kZSYmYi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGIpLGI9bnVsbH19ZnVuY3Rpb24ga2EoYSxiKXt2YXIgYz1hLnNwbGl0KCJ8IiksZT1hLmxlbmd0aDt3aGlsZShlLS0pZC5hdHRySGFuZGxlW2NbZV1dPWJ9ZnVuY3Rpb24gbGEoYSxiKXt2YXIgYz1iJiZhLGQ9YyYmMT09PWEubm9kZVR5cGUmJjE9PT1iLm5vZGVUeXBlJiYofmIuc291cmNlSW5kZXh8fEMpLSh+YS5zb3VyY2VJbmRleHx8Qyk7aWYoZClyZXR1cm4gZDtpZihjKXdoaWxlKGM9Yy5uZXh0U2libGluZylpZihjPT09YilyZXR1cm4tMTtyZXR1cm4gYT8xOi0xfWZ1bmN0aW9uIG1hKGEpe3JldHVybiBmdW5jdGlvbihiKXt2YXIgYz1iLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PWMmJmIudHlwZT09PWF9fWZ1bmN0aW9uIG5hKGEpe3JldHVybiBmdW5jdGlvbihiKXt2YXIgYz1iLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuKCJpbnB1dCI9PT1jfHwiYnV0dG9uIj09PWMpJiZiLnR5cGU9PT1hfX1mdW5jdGlvbiBvYShhKXtyZXR1cm4gaWEoZnVuY3Rpb24oYil7cmV0dXJuIGI9K2IsaWEoZnVuY3Rpb24oYyxkKXt2YXIgZSxmPWEoW10sYy5sZW5ndGgsYiksZz1mLmxlbmd0aDt3aGlsZShnLS0pY1tlPWZbZ11dJiYoY1tlXT0hKGRbZV09Y1tlXSkpfSl9KX1mdW5jdGlvbiBwYShhKXtyZXR1cm4gYSYmInVuZGVmaW5lZCIhPXR5cGVvZiBhLmdldEVsZW1lbnRzQnlUYWdOYW1lJiZhfWM9Z2Euc3VwcG9ydD17fSxmPWdhLmlzWE1MPWZ1bmN0aW9uKGEpe3ZhciBiPWEmJihhLm93bmVyRG9jdW1lbnR8fGEpLmRvY3VtZW50RWxlbWVudDtyZXR1cm4gYj8iSFRNTCIhPT1iLm5vZGVOYW1lOiExfSxtPWdhLnNldERvY3VtZW50PWZ1bmN0aW9uKGEpe3ZhciBiLGUsZz1hP2Eub3duZXJEb2N1bWVudHx8YTp2O3JldHVybiBnIT09biYmOT09PWcubm9kZVR5cGUmJmcuZG9jdW1lbnRFbGVtZW50PyhuPWcsbz1nLmRvY3VtZW50RWxlbWVudCxlPWcuZGVmYXVsdFZpZXcsZSYmZSE9PWUudG9wJiYoZS5hZGRFdmVudExpc3RlbmVyP2UuYWRkRXZlbnRMaXN0ZW5lcigidW5sb2FkIixlYSwhMSk6ZS5hdHRhY2hFdmVudCYmZS5hdHRhY2hFdmVudCgib251bmxvYWQiLGVhKSkscD0hZihnKSxjLmF0dHJpYnV0ZXM9amEoZnVuY3Rpb24oYSl7cmV0dXJuIGEuY2xhc3NOYW1lPSJpIiwhYS5nZXRBdHRyaWJ1dGUoImNsYXNzTmFtZSIpfSksYy5nZXRFbGVtZW50c0J5VGFnTmFtZT1qYShmdW5jdGlvbihhKXtyZXR1cm4gYS5hcHBlbmRDaGlsZChnLmNyZWF0ZUNvbW1lbnQoIiIpKSwhYS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpLmxlbmd0aH0pLGMuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZT0kLnRlc3QoZy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKSxjLmdldEJ5SWQ9amEoZnVuY3Rpb24oYSl7cmV0dXJuIG8uYXBwZW5kQ2hpbGQoYSkuaWQ9dSwhZy5nZXRFbGVtZW50c0J5TmFtZXx8IWcuZ2V0RWxlbWVudHNCeU5hbWUodSkubGVuZ3RofSksYy5nZXRCeUlkPyhkLmZpbmQuSUQ9ZnVuY3Rpb24oYSxiKXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIGIuZ2V0RWxlbWVudEJ5SWQmJnApe3ZhciBjPWIuZ2V0RWxlbWVudEJ5SWQoYSk7cmV0dXJuIGMmJmMucGFyZW50Tm9kZT9bY106W119fSxkLmZpbHRlci5JRD1mdW5jdGlvbihhKXt2YXIgYj1hLnJlcGxhY2UoY2EsZGEpO3JldHVybiBmdW5jdGlvbihhKXtyZXR1cm4gYS5nZXRBdHRyaWJ1dGUoImlkIik9PT1ifX0pOihkZWxldGUgZC5maW5kLklELGQuZmlsdGVyLklEPWZ1bmN0aW9uKGEpe3ZhciBiPWEucmVwbGFjZShjYSxkYSk7cmV0dXJuIGZ1bmN0aW9uKGEpe3ZhciBjPSJ1bmRlZmluZWQiIT10eXBlb2YgYS5nZXRBdHRyaWJ1dGVOb2RlJiZhLmdldEF0dHJpYnV0ZU5vZGUoImlkIik7cmV0dXJuIGMmJmMudmFsdWU9PT1ifX0pLGQuZmluZC5UQUc9Yy5nZXRFbGVtZW50c0J5VGFnTmFtZT9mdW5jdGlvbihhLGIpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgYi5nZXRFbGVtZW50c0J5VGFnTmFtZT9iLmdldEVsZW1lbnRzQnlUYWdOYW1lKGEpOmMucXNhP2IucXVlcnlTZWxlY3RvckFsbChhKTp2b2lkIDB9OmZ1bmN0aW9uKGEsYil7dmFyIGMsZD1bXSxlPTAsZj1iLmdldEVsZW1lbnRzQnlUYWdOYW1lKGEpO2lmKCIqIj09PWEpe3doaWxlKGM9ZltlKytdKTE9PT1jLm5vZGVUeXBlJiZkLnB1c2goYyk7cmV0dXJuIGR9cmV0dXJuIGZ9LGQuZmluZC5DTEFTUz1jLmdldEVsZW1lbnRzQnlDbGFzc05hbWUmJmZ1bmN0aW9uKGEsYil7cmV0dXJuIHA/Yi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGEpOnZvaWQgMH0scj1bXSxxPVtdLChjLnFzYT0kLnRlc3QoZy5xdWVyeVNlbGVjdG9yQWxsKSkmJihqYShmdW5jdGlvbihhKXtvLmFwcGVuZENoaWxkKGEpLmlubmVySFRNTD0iPGEgaWQ9JyIrdSsiJz48L2E+PHNlbGVjdCBpZD0nIit1KyItXGZdJyBtc2FsbG93Y2FwdHVyZT0nJz48b3B0aW9uIHNlbGVjdGVkPScnPjwvb3B0aW9uPjwvc2VsZWN0PiIsYS5xdWVyeVNlbGVjdG9yQWxsKCJbbXNhbGxvd2NhcHR1cmVePScnXSIpLmxlbmd0aCYmcS5wdXNoKCJbKl4kXT0iK0wrIiooPzonJ3xcIlwiKSIpLGEucXVlcnlTZWxlY3RvckFsbCgiW3NlbGVjdGVkXSIpLmxlbmd0aHx8cS5wdXNoKCJcXFsiK0wrIiooPzp2YWx1ZXwiK0srIikiKSxhLnF1ZXJ5U2VsZWN0b3JBbGwoIltpZH49Iit1KyItXSIpLmxlbmd0aHx8cS5wdXNoKCJ+PSIpLGEucXVlcnlTZWxlY3RvckFsbCgiOmNoZWNrZWQiKS5sZW5ndGh8fHEucHVzaCgiOmNoZWNrZWQiKSxhLnF1ZXJ5U2VsZWN0b3JBbGwoImEjIit1KyIrKiIpLmxlbmd0aHx8cS5wdXNoKCIuIy4rWyt+XSIpfSksamEoZnVuY3Rpb24oYSl7dmFyIGI9Zy5jcmVhdGVFbGVtZW50KCJpbnB1dCIpO2Iuc2V0QXR0cmlidXRlKCJ0eXBlIiwiaGlkZGVuIiksYS5hcHBlbmRDaGlsZChiKS5zZXRBdHRyaWJ1dGUoIm5hbWUiLCJEIiksYS5xdWVyeVNlbGVjdG9yQWxsKCJbbmFtZT1kXSIpLmxlbmd0aCYmcS5wdXNoKCJuYW1lIitMKyIqWypeJHwhfl0/PSIpLGEucXVlcnlTZWxlY3RvckFsbCgiOmVuYWJsZWQiKS5sZW5ndGh8fHEucHVzaCgiOmVuYWJsZWQiLCI6ZGlzYWJsZWQiKSxhLnF1ZXJ5U2VsZWN0b3JBbGwoIiosOngiKSxxLnB1c2goIiwuKjoiKX0pKSwoYy5tYXRjaGVzU2VsZWN0b3I9JC50ZXN0KHM9by5tYXRjaGVzfHxvLndlYmtpdE1hdGNoZXNTZWxlY3Rvcnx8by5tb3pNYXRjaGVzU2VsZWN0b3J8fG8ub01hdGNoZXNTZWxlY3Rvcnx8by5tc01hdGNoZXNTZWxlY3RvcikpJiZqYShmdW5jdGlvbihhKXtjLmRpc2Nvbm5lY3RlZE1hdGNoPXMuY2FsbChhLCJkaXYiKSxzLmNhbGwoYSwiW3MhPScnXTp4Iiksci5wdXNoKCIhPSIsUCl9KSxxPXEubGVuZ3RoJiZuZXcgUmVnRXhwKHEuam9pbigifCIpKSxyPXIubGVuZ3RoJiZuZXcgUmVnRXhwKHIuam9pbigifCIpKSxiPSQudGVzdChvLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKSx0PWJ8fCQudGVzdChvLmNvbnRhaW5zKT9mdW5jdGlvbihhLGIpe3ZhciBjPTk9PT1hLm5vZGVUeXBlP2EuZG9jdW1lbnRFbGVtZW50OmEsZD1iJiZiLnBhcmVudE5vZGU7cmV0dXJuIGE9PT1kfHwhKCFkfHwxIT09ZC5ub2RlVHlwZXx8IShjLmNvbnRhaW5zP2MuY29udGFpbnMoZCk6YS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiYmMTYmYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihkKSkpfTpmdW5jdGlvbihhLGIpe2lmKGIpd2hpbGUoYj1iLnBhcmVudE5vZGUpaWYoYj09PWEpcmV0dXJuITA7cmV0dXJuITF9LEI9Yj9mdW5jdGlvbihhLGIpe2lmKGE9PT1iKXJldHVybiBsPSEwLDA7dmFyIGQ9IWEuY29tcGFyZURvY3VtZW50UG9zaXRpb24tIWIuY29tcGFyZURvY3VtZW50UG9zaXRpb247cmV0dXJuIGQ/ZDooZD0oYS5vd25lckRvY3VtZW50fHxhKT09PShiLm93bmVyRG9jdW1lbnR8fGIpP2EuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYik6MSwxJmR8fCFjLnNvcnREZXRhY2hlZCYmYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihhKT09PWQ/YT09PWd8fGEub3duZXJEb2N1bWVudD09PXYmJnQodixhKT8tMTpiPT09Z3x8Yi5vd25lckRvY3VtZW50PT09diYmdCh2LGIpPzE6az9KKGssYSktSihrLGIpOjA6NCZkPy0xOjEpfTpmdW5jdGlvbihhLGIpe2lmKGE9PT1iKXJldHVybiBsPSEwLDA7dmFyIGMsZD0wLGU9YS5wYXJlbnROb2RlLGY9Yi5wYXJlbnROb2RlLGg9W2FdLGk9W2JdO2lmKCFlfHwhZilyZXR1cm4gYT09PWc/LTE6Yj09PWc/MTplPy0xOmY/MTprP0ooayxhKS1KKGssYik6MDtpZihlPT09ZilyZXR1cm4gbGEoYSxiKTtjPWE7d2hpbGUoYz1jLnBhcmVudE5vZGUpaC51bnNoaWZ0KGMpO2M9Yjt3aGlsZShjPWMucGFyZW50Tm9kZSlpLnVuc2hpZnQoYyk7d2hpbGUoaFtkXT09PWlbZF0pZCsrO3JldHVybiBkP2xhKGhbZF0saVtkXSk6aFtkXT09PXY/LTE6aVtkXT09PXY/MTowfSxnKTpufSxnYS5tYXRjaGVzPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGdhKGEsbnVsbCxudWxsLGIpfSxnYS5tYXRjaGVzU2VsZWN0b3I9ZnVuY3Rpb24oYSxiKXtpZigoYS5vd25lckRvY3VtZW50fHxhKSE9PW4mJm0oYSksYj1iLnJlcGxhY2UoVSwiPSckMSddIiksISghYy5tYXRjaGVzU2VsZWN0b3J8fCFwfHxyJiZyLnRlc3QoYil8fHEmJnEudGVzdChiKSkpdHJ5e3ZhciBkPXMuY2FsbChhLGIpO2lmKGR8fGMuZGlzY29ubmVjdGVkTWF0Y2h8fGEuZG9jdW1lbnQmJjExIT09YS5kb2N1bWVudC5ub2RlVHlwZSlyZXR1cm4gZH1jYXRjaChlKXt9cmV0dXJuIGdhKGIsbixudWxsLFthXSkubGVuZ3RoPjB9LGdhLmNvbnRhaW5zPWZ1bmN0aW9uKGEsYil7cmV0dXJuKGEub3duZXJEb2N1bWVudHx8YSkhPT1uJiZtKGEpLHQoYSxiKX0sZ2EuYXR0cj1mdW5jdGlvbihhLGIpeyhhLm93bmVyRG9jdW1lbnR8fGEpIT09biYmbShhKTt2YXIgZT1kLmF0dHJIYW5kbGVbYi50b0xvd2VyQ2FzZSgpXSxmPWUmJkQuY2FsbChkLmF0dHJIYW5kbGUsYi50b0xvd2VyQ2FzZSgpKT9lKGEsYiwhcCk6dm9pZCAwO3JldHVybiB2b2lkIDAhPT1mP2Y6Yy5hdHRyaWJ1dGVzfHwhcD9hLmdldEF0dHJpYnV0ZShiKTooZj1hLmdldEF0dHJpYnV0ZU5vZGUoYikpJiZmLnNwZWNpZmllZD9mLnZhbHVlOm51bGx9LGdhLmVycm9yPWZ1bmN0aW9uKGEpe3Rocm93IG5ldyBFcnJvcigiU3ludGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lvbjogIithKX0sZ2EudW5pcXVlU29ydD1mdW5jdGlvbihhKXt2YXIgYixkPVtdLGU9MCxmPTA7aWYobD0hYy5kZXRlY3REdXBsaWNhdGVzLGs9IWMuc29ydFN0YWJsZSYmYS5zbGljZSgwKSxhLnNvcnQoQiksbCl7d2hpbGUoYj1hW2YrK10pYj09PWFbZl0mJihlPWQucHVzaChmKSk7d2hpbGUoZS0tKWEuc3BsaWNlKGRbZV0sMSl9cmV0dXJuIGs9bnVsbCxhfSxlPWdhLmdldFRleHQ9ZnVuY3Rpb24oYSl7dmFyIGIsYz0iIixkPTAsZj1hLm5vZGVUeXBlO2lmKGYpe2lmKDE9PT1mfHw5PT09Znx8MTE9PT1mKXtpZigic3RyaW5nIj09dHlwZW9mIGEudGV4dENvbnRlbnQpcmV0dXJuIGEudGV4dENvbnRlbnQ7Zm9yKGE9YS5maXJzdENoaWxkO2E7YT1hLm5leHRTaWJsaW5nKWMrPWUoYSl9ZWxzZSBpZigzPT09Znx8ND09PWYpcmV0dXJuIGEubm9kZVZhbHVlfWVsc2Ugd2hpbGUoYj1hW2QrK10pYys9ZShiKTtyZXR1cm4gY30sZD1nYS5zZWxlY3RvcnM9e2NhY2hlTGVuZ3RoOjUwLGNyZWF0ZVBzZXVkbzppYSxtYXRjaDpYLGF0dHJIYW5kbGU6e30sZmluZDp7fSxyZWxhdGl2ZTp7Ij4iOntkaXI6InBhcmVudE5vZGUiLGZpcnN0OiEwfSwiICI6e2RpcjoicGFyZW50Tm9kZSJ9LCIrIjp7ZGlyOiJwcmV2aW91c1NpYmxpbmciLGZpcnN0OiEwfSwifiI6e2RpcjoicHJldmlvdXNTaWJsaW5nIn19LHByZUZpbHRlcjp7QVRUUjpmdW5jdGlvbihhKXtyZXR1cm4gYVsxXT1hWzFdLnJlcGxhY2UoY2EsZGEpLGFbM109KGFbM118fGFbNF18fGFbNV18fCIiKS5yZXBsYWNlKGNhLGRhKSwifj0iPT09YVsyXSYmKGFbM109IiAiK2FbM10rIiAiKSxhLnNsaWNlKDAsNCl9LENISUxEOmZ1bmN0aW9uKGEpe3JldHVybiBhWzFdPWFbMV0udG9Mb3dlckNhc2UoKSwibnRoIj09PWFbMV0uc2xpY2UoMCwzKT8oYVszXXx8Z2EuZXJyb3IoYVswXSksYVs0XT0rKGFbNF0/YVs1XSsoYVs2XXx8MSk6MiooImV2ZW4iPT09YVszXXx8Im9kZCI9PT1hWzNdKSksYVs1XT0rKGFbN10rYVs4XXx8Im9kZCI9PT1hWzNdKSk6YVszXSYmZ2EuZXJyb3IoYVswXSksYX0sUFNFVURPOmZ1bmN0aW9uKGEpe3ZhciBiLGM9IWFbNl0mJmFbMl07cmV0dXJuIFguQ0hJTEQudGVzdChhWzBdKT9udWxsOihhWzNdP2FbMl09YVs0XXx8YVs1XXx8IiI6YyYmVi50ZXN0KGMpJiYoYj1nKGMsITApKSYmKGI9Yy5pbmRleE9mKCIpIixjLmxlbmd0aC1iKS1jLmxlbmd0aCkmJihhWzBdPWFbMF0uc2xpY2UoMCxiKSxhWzJdPWMuc2xpY2UoMCxiKSksYS5zbGljZSgwLDMpKX19LGZpbHRlcjp7VEFHOmZ1bmN0aW9uKGEpe3ZhciBiPWEucmVwbGFjZShjYSxkYSkudG9Mb3dlckNhc2UoKTtyZXR1cm4iKiI9PT1hP2Z1bmN0aW9uKCl7cmV0dXJuITB9OmZ1bmN0aW9uKGEpe3JldHVybiBhLm5vZGVOYW1lJiZhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1ifX0sQ0xBU1M6ZnVuY3Rpb24oYSl7dmFyIGI9eVthKyIgIl07cmV0dXJuIGJ8fChiPW5ldyBSZWdFeHAoIihefCIrTCsiKSIrYSsiKCIrTCsifCQpIikpJiZ5KGEsZnVuY3Rpb24oYSl7cmV0dXJuIGIudGVzdCgic3RyaW5nIj09dHlwZW9mIGEuY2xhc3NOYW1lJiZhLmNsYXNzTmFtZXx8InVuZGVmaW5lZCIhPXR5cGVvZiBhLmdldEF0dHJpYnV0ZSYmYS5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiKX0pfSxBVFRSOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gZnVuY3Rpb24oZCl7dmFyIGU9Z2EuYXR0cihkLGEpO3JldHVybiBudWxsPT1lPyIhPSI9PT1iOmI/KGUrPSIiLCI9Ij09PWI/ZT09PWM6IiE9Ij09PWI/ZSE9PWM6Il49Ij09PWI/YyYmMD09PWUuaW5kZXhPZihjKToiKj0iPT09Yj9jJiZlLmluZGV4T2YoYyk+LTE6IiQ9Ij09PWI/YyYmZS5zbGljZSgtYy5sZW5ndGgpPT09Yzoifj0iPT09Yj8oIiAiK2UucmVwbGFjZShRLCIgIikrIiAiKS5pbmRleE9mKGMpPi0xOiJ8PSI9PT1iP2U9PT1jfHxlLnNsaWNlKDAsYy5sZW5ndGgrMSk9PT1jKyItIjohMSk6ITB9fSxDSElMRDpmdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmPSJudGgiIT09YS5zbGljZSgwLDMpLGc9Imxhc3QiIT09YS5zbGljZSgtNCksaD0ib2YtdHlwZSI9PT1iO3JldHVybiAxPT09ZCYmMD09PWU/ZnVuY3Rpb24oYSl7cmV0dXJuISFhLnBhcmVudE5vZGV9OmZ1bmN0aW9uKGIsYyxpKXt2YXIgaixrLGwsbSxuLG8scD1mIT09Zz8ibmV4dFNpYmxpbmciOiJwcmV2aW91c1NpYmxpbmciLHE9Yi5wYXJlbnROb2RlLHI9aCYmYi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLHM9IWkmJiFoO2lmKHEpe2lmKGYpe3doaWxlKHApe2w9Yjt3aGlsZShsPWxbcF0paWYoaD9sLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1yOjE9PT1sLm5vZGVUeXBlKXJldHVybiExO289cD0ib25seSI9PT1hJiYhbyYmIm5leHRTaWJsaW5nIn1yZXR1cm4hMH1pZihvPVtnP3EuZmlyc3RDaGlsZDpxLmxhc3RDaGlsZF0sZyYmcyl7az1xW3VdfHwocVt1XT17fSksaj1rW2FdfHxbXSxuPWpbMF09PT13JiZqWzFdLG09alswXT09PXcmJmpbMl0sbD1uJiZxLmNoaWxkTm9kZXNbbl07d2hpbGUobD0rK24mJmwmJmxbcF18fChtPW49MCl8fG8ucG9wKCkpaWYoMT09PWwubm9kZVR5cGUmJisrbSYmbD09PWIpe2tbYV09W3csbixtXTticmVha319ZWxzZSBpZihzJiYoaj0oYlt1XXx8KGJbdV09e30pKVthXSkmJmpbMF09PT13KW09alsxXTtlbHNlIHdoaWxlKGw9KytuJiZsJiZsW3BdfHwobT1uPTApfHxvLnBvcCgpKWlmKChoP2wubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PXI6MT09PWwubm9kZVR5cGUpJiYrK20mJihzJiYoKGxbdV18fChsW3VdPXt9KSlbYV09W3csbV0pLGw9PT1iKSlicmVhaztyZXR1cm4gbS09ZSxtPT09ZHx8bSVkPT09MCYmbS9kPj0wfX19LFBTRVVETzpmdW5jdGlvbihhLGIpe3ZhciBjLGU9ZC5wc2V1ZG9zW2FdfHxkLnNldEZpbHRlcnNbYS50b0xvd2VyQ2FzZSgpXXx8Z2EuZXJyb3IoInVuc3VwcG9ydGVkIHBzZXVkbzogIithKTtyZXR1cm4gZVt1XT9lKGIpOmUubGVuZ3RoPjE/KGM9W2EsYSwiIixiXSxkLnNldEZpbHRlcnMuaGFzT3duUHJvcGVydHkoYS50b0xvd2VyQ2FzZSgpKT9pYShmdW5jdGlvbihhLGMpe3ZhciBkLGY9ZShhLGIpLGc9Zi5sZW5ndGg7d2hpbGUoZy0tKWQ9SihhLGZbZ10pLGFbZF09IShjW2RdPWZbZ10pfSk6ZnVuY3Rpb24oYSl7cmV0dXJuIGUoYSwwLGMpfSk6ZX19LHBzZXVkb3M6e25vdDppYShmdW5jdGlvbihhKXt2YXIgYj1bXSxjPVtdLGQ9aChhLnJlcGxhY2UoUiwiJDEiKSk7cmV0dXJuIGRbdV0/aWEoZnVuY3Rpb24oYSxiLGMsZSl7dmFyIGYsZz1kKGEsbnVsbCxlLFtdKSxoPWEubGVuZ3RoO3doaWxlKGgtLSkoZj1nW2hdKSYmKGFbaF09IShiW2hdPWYpKX0pOmZ1bmN0aW9uKGEsZSxmKXtyZXR1cm4gYlswXT1hLGQoYixudWxsLGYsYyksYlswXT1udWxsLCFjLnBvcCgpfX0pLGhhczppYShmdW5jdGlvbihhKXtyZXR1cm4gZnVuY3Rpb24oYil7cmV0dXJuIGdhKGEsYikubGVuZ3RoPjB9fSksY29udGFpbnM6aWEoZnVuY3Rpb24oYSl7cmV0dXJuIGE9YS5yZXBsYWNlKGNhLGRhKSxmdW5jdGlvbihiKXtyZXR1cm4oYi50ZXh0Q29udGVudHx8Yi5pbm5lclRleHR8fGUoYikpLmluZGV4T2YoYSk+LTF9fSksbGFuZzppYShmdW5jdGlvbihhKXtyZXR1cm4gVy50ZXN0KGF8fCIiKXx8Z2EuZXJyb3IoInVuc3VwcG9ydGVkIGxhbmc6ICIrYSksYT1hLnJlcGxhY2UoY2EsZGEpLnRvTG93ZXJDYXNlKCksZnVuY3Rpb24oYil7dmFyIGM7ZG8gaWYoYz1wP2IubGFuZzpiLmdldEF0dHJpYnV0ZSgieG1sOmxhbmciKXx8Yi5nZXRBdHRyaWJ1dGUoImxhbmciKSlyZXR1cm4gYz1jLnRvTG93ZXJDYXNlKCksYz09PWF8fDA9PT1jLmluZGV4T2YoYSsiLSIpO3doaWxlKChiPWIucGFyZW50Tm9kZSkmJjE9PT1iLm5vZGVUeXBlKTtyZXR1cm4hMX19KSx0YXJnZXQ6ZnVuY3Rpb24oYil7dmFyIGM9YS5sb2NhdGlvbiYmYS5sb2NhdGlvbi5oYXNoO3JldHVybiBjJiZjLnNsaWNlKDEpPT09Yi5pZH0scm9vdDpmdW5jdGlvbihhKXtyZXR1cm4gYT09PW99LGZvY3VzOmZ1bmN0aW9uKGEpe3JldHVybiBhPT09bi5hY3RpdmVFbGVtZW50JiYoIW4uaGFzRm9jdXN8fG4uaGFzRm9jdXMoKSkmJiEhKGEudHlwZXx8YS5ocmVmfHx+YS50YWJJbmRleCl9LGVuYWJsZWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuZGlzYWJsZWQ9PT0hMX0sZGlzYWJsZWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuZGlzYWJsZWQ9PT0hMH0sY2hlY2tlZDpmdW5jdGlvbihhKXt2YXIgYj1hLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PWImJiEhYS5jaGVja2VkfHwib3B0aW9uIj09PWImJiEhYS5zZWxlY3RlZH0sc2VsZWN0ZWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEucGFyZW50Tm9kZSYmYS5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXgsYS5zZWxlY3RlZD09PSEwfSxlbXB0eTpmdW5jdGlvbihhKXtmb3IoYT1hLmZpcnN0Q2hpbGQ7YTthPWEubmV4dFNpYmxpbmcpaWYoYS5ub2RlVHlwZTw2KXJldHVybiExO3JldHVybiEwfSxwYXJlbnQ6ZnVuY3Rpb24oYSl7cmV0dXJuIWQucHNldWRvcy5lbXB0eShhKX0saGVhZGVyOmZ1bmN0aW9uKGEpe3JldHVybiBaLnRlc3QoYS5ub2RlTmFtZSl9LGlucHV0OmZ1bmN0aW9uKGEpe3JldHVybiBZLnRlc3QoYS5ub2RlTmFtZSl9LGJ1dHRvbjpmdW5jdGlvbihhKXt2YXIgYj1hLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PWImJiJidXR0b24iPT09YS50eXBlfHwiYnV0dG9uIj09PWJ9LHRleHQ6ZnVuY3Rpb24oYSl7dmFyIGI7cmV0dXJuImlucHV0Ij09PWEubm9kZU5hbWUudG9Mb3dlckNhc2UoKSYmInRleHQiPT09YS50eXBlJiYobnVsbD09KGI9YS5nZXRBdHRyaWJ1dGUoInR5cGUiKSl8fCJ0ZXh0Ij09PWIudG9Mb3dlckNhc2UoKSl9LGZpcnN0Om9hKGZ1bmN0aW9uKCl7cmV0dXJuWzBdfSksbGFzdDpvYShmdW5jdGlvbihhLGIpe3JldHVybltiLTFdfSksZXE6b2EoZnVuY3Rpb24oYSxiLGMpe3JldHVyblswPmM/YytiOmNdfSksZXZlbjpvYShmdW5jdGlvbihhLGIpe2Zvcih2YXIgYz0wO2I+YztjKz0yKWEucHVzaChjKTtyZXR1cm4gYX0pLG9kZDpvYShmdW5jdGlvbihhLGIpe2Zvcih2YXIgYz0xO2I+YztjKz0yKWEucHVzaChjKTtyZXR1cm4gYX0pLGx0Om9hKGZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGQ9MD5jP2MrYjpjOy0tZD49MDspYS5wdXNoKGQpO3JldHVybiBhfSksZ3Q6b2EoZnVuY3Rpb24oYSxiLGMpe2Zvcih2YXIgZD0wPmM/YytiOmM7KytkPGI7KWEucHVzaChkKTtyZXR1cm4gYX0pfX0sZC5wc2V1ZG9zLm50aD1kLnBzZXVkb3MuZXE7Zm9yKGIgaW57cmFkaW86ITAsY2hlY2tib3g6ITAsZmlsZTohMCxwYXNzd29yZDohMCxpbWFnZTohMH0pZC5wc2V1ZG9zW2JdPW1hKGIpO2ZvcihiIGlue3N1Ym1pdDohMCxyZXNldDohMH0pZC5wc2V1ZG9zW2JdPW5hKGIpO2Z1bmN0aW9uIHFhKCl7fXFhLnByb3RvdHlwZT1kLmZpbHRlcnM9ZC5wc2V1ZG9zLGQuc2V0RmlsdGVycz1uZXcgcWEsZz1nYS50b2tlbml6ZT1mdW5jdGlvbihhLGIpe3ZhciBjLGUsZixnLGgsaSxqLGs9elthKyIgIl07aWYoaylyZXR1cm4gYj8wOmsuc2xpY2UoMCk7aD1hLGk9W10saj1kLnByZUZpbHRlcjt3aGlsZShoKXsoIWN8fChlPVMuZXhlYyhoKSkpJiYoZSYmKGg9aC5zbGljZShlWzBdLmxlbmd0aCl8fGgpLGkucHVzaChmPVtdKSksYz0hMSwoZT1ULmV4ZWMoaCkpJiYoYz1lLnNoaWZ0KCksZi5wdXNoKHt2YWx1ZTpjLHR5cGU6ZVswXS5yZXBsYWNlKFIsIiAiKX0pLGg9aC5zbGljZShjLmxlbmd0aCkpO2ZvcihnIGluIGQuZmlsdGVyKSEoZT1YW2ddLmV4ZWMoaCkpfHxqW2ddJiYhKGU9altnXShlKSl8fChjPWUuc2hpZnQoKSxmLnB1c2goe3ZhbHVlOmMsdHlwZTpnLG1hdGNoZXM6ZX0pLGg9aC5zbGljZShjLmxlbmd0aCkpO2lmKCFjKWJyZWFrfXJldHVybiBiP2gubGVuZ3RoOmg/Z2EuZXJyb3IoYSk6eihhLGkpLnNsaWNlKDApfTtmdW5jdGlvbiByYShhKXtmb3IodmFyIGI9MCxjPWEubGVuZ3RoLGQ9IiI7Yz5iO2IrKylkKz1hW2JdLnZhbHVlO3JldHVybiBkfWZ1bmN0aW9uIHNhKGEsYixjKXt2YXIgZD1iLmRpcixlPWMmJiJwYXJlbnROb2RlIj09PWQsZj14Kys7cmV0dXJuIGIuZmlyc3Q/ZnVuY3Rpb24oYixjLGYpe3doaWxlKGI9YltkXSlpZigxPT09Yi5ub2RlVHlwZXx8ZSlyZXR1cm4gYShiLGMsZil9OmZ1bmN0aW9uKGIsYyxnKXt2YXIgaCxpLGo9W3csZl07aWYoZyl7d2hpbGUoYj1iW2RdKWlmKCgxPT09Yi5ub2RlVHlwZXx8ZSkmJmEoYixjLGcpKXJldHVybiEwfWVsc2Ugd2hpbGUoYj1iW2RdKWlmKDE9PT1iLm5vZGVUeXBlfHxlKXtpZihpPWJbdV18fChiW3VdPXt9KSwoaD1pW2RdKSYmaFswXT09PXcmJmhbMV09PT1mKXJldHVybiBqWzJdPWhbMl07aWYoaVtkXT1qLGpbMl09YShiLGMsZykpcmV0dXJuITB9fX1mdW5jdGlvbiB0YShhKXtyZXR1cm4gYS5sZW5ndGg+MT9mdW5jdGlvbihiLGMsZCl7dmFyIGU9YS5sZW5ndGg7d2hpbGUoZS0tKWlmKCFhW2VdKGIsYyxkKSlyZXR1cm4hMTtyZXR1cm4hMH06YVswXX1mdW5jdGlvbiB1YShhLGIsYyl7Zm9yKHZhciBkPTAsZT1iLmxlbmd0aDtlPmQ7ZCsrKWdhKGEsYltkXSxjKTtyZXR1cm4gY31mdW5jdGlvbiB2YShhLGIsYyxkLGUpe2Zvcih2YXIgZixnPVtdLGg9MCxpPWEubGVuZ3RoLGo9bnVsbCE9YjtpPmg7aCsrKShmPWFbaF0pJiYoIWN8fGMoZixkLGUpKSYmKGcucHVzaChmKSxqJiZiLnB1c2goaCkpO3JldHVybiBnfWZ1bmN0aW9uIHdhKGEsYixjLGQsZSxmKXtyZXR1cm4gZCYmIWRbdV0mJihkPXdhKGQpKSxlJiYhZVt1XSYmKGU9d2EoZSxmKSksaWEoZnVuY3Rpb24oZixnLGgsaSl7dmFyIGosayxsLG09W10sbj1bXSxvPWcubGVuZ3RoLHA9Znx8dWEoYnx8IioiLGgubm9kZVR5cGU/W2hdOmgsW10pLHE9IWF8fCFmJiZiP3A6dmEocCxtLGEsaCxpKSxyPWM/ZXx8KGY/YTpvfHxkKT9bXTpnOnE7aWYoYyYmYyhxLHIsaCxpKSxkKXtqPXZhKHIsbiksZChqLFtdLGgsaSksaz1qLmxlbmd0aDt3aGlsZShrLS0pKGw9altrXSkmJihyW25ba11dPSEocVtuW2tdXT1sKSl9aWYoZil7aWYoZXx8YSl7aWYoZSl7aj1bXSxrPXIubGVuZ3RoO3doaWxlKGstLSkobD1yW2tdKSYmai5wdXNoKHFba109bCk7ZShudWxsLHI9W10saixpKX1rPXIubGVuZ3RoO3doaWxlKGstLSkobD1yW2tdKSYmKGo9ZT9KKGYsbCk6bVtrXSk+LTEmJihmW2pdPSEoZ1tqXT1sKSl9fWVsc2Ugcj12YShyPT09Zz9yLnNwbGljZShvLHIubGVuZ3RoKTpyKSxlP2UobnVsbCxnLHIsaSk6SC5hcHBseShnLHIpfSl9ZnVuY3Rpb24geGEoYSl7Zm9yKHZhciBiLGMsZSxmPWEubGVuZ3RoLGc9ZC5yZWxhdGl2ZVthWzBdLnR5cGVdLGg9Z3x8ZC5yZWxhdGl2ZVsiICJdLGk9Zz8xOjAsaz1zYShmdW5jdGlvbihhKXtyZXR1cm4gYT09PWJ9LGgsITApLGw9c2EoZnVuY3Rpb24oYSl7cmV0dXJuIEooYixhKT4tMX0saCwhMCksbT1bZnVuY3Rpb24oYSxjLGQpe3ZhciBlPSFnJiYoZHx8YyE9PWopfHwoKGI9Yykubm9kZVR5cGU/ayhhLGMsZCk6bChhLGMsZCkpO3JldHVybiBiPW51bGwsZX1dO2Y+aTtpKyspaWYoYz1kLnJlbGF0aXZlW2FbaV0udHlwZV0pbT1bc2EodGEobSksYyldO2Vsc2V7aWYoYz1kLmZpbHRlclthW2ldLnR5cGVdLmFwcGx5KG51bGwsYVtpXS5tYXRjaGVzKSxjW3VdKXtmb3IoZT0rK2k7Zj5lO2UrKylpZihkLnJlbGF0aXZlW2FbZV0udHlwZV0pYnJlYWs7cmV0dXJuIHdhKGk+MSYmdGEobSksaT4xJiZyYShhLnNsaWNlKDAsaS0xKS5jb25jYXQoe3ZhbHVlOiIgIj09PWFbaS0yXS50eXBlPyIqIjoiIn0pKS5yZXBsYWNlKFIsIiQxIiksYyxlPmkmJnhhKGEuc2xpY2UoaSxlKSksZj5lJiZ4YShhPWEuc2xpY2UoZSkpLGY+ZSYmcmEoYSkpfW0ucHVzaChjKX1yZXR1cm4gdGEobSl9ZnVuY3Rpb24geWEoYSxiKXt2YXIgYz1iLmxlbmd0aD4wLGU9YS5sZW5ndGg+MCxmPWZ1bmN0aW9uKGYsZyxoLGksayl7dmFyIGwsbSxvLHA9MCxxPSIwIixyPWYmJltdLHM9W10sdD1qLHU9Znx8ZSYmZC5maW5kLlRBRygiKiIsayksdj13Kz1udWxsPT10PzE6TWF0aC5yYW5kb20oKXx8LjEseD11Lmxlbmd0aDtmb3IoayYmKGo9ZyE9PW4mJmcpO3EhPT14JiZudWxsIT0obD11W3FdKTtxKyspe2lmKGUmJmwpe209MDt3aGlsZShvPWFbbSsrXSlpZihvKGwsZyxoKSl7aS5wdXNoKGwpO2JyZWFrfWsmJih3PXYpfWMmJigobD0hbyYmbCkmJnAtLSxmJiZyLnB1c2gobCkpfWlmKHArPXEsYyYmcSE9PXApe209MDt3aGlsZShvPWJbbSsrXSlvKHIscyxnLGgpO2lmKGYpe2lmKHA+MCl3aGlsZShxLS0pcltxXXx8c1txXXx8KHNbcV09Ri5jYWxsKGkpKTtzPXZhKHMpfUguYXBwbHkoaSxzKSxrJiYhZiYmcy5sZW5ndGg+MCYmcCtiLmxlbmd0aD4xJiZnYS51bmlxdWVTb3J0KGkpfXJldHVybiBrJiYodz12LGo9dCkscn07cmV0dXJuIGM/aWEoZik6Zn1yZXR1cm4gaD1nYS5jb21waWxlPWZ1bmN0aW9uKGEsYil7dmFyIGMsZD1bXSxlPVtdLGY9QVthKyIgIl07aWYoIWYpe2J8fChiPWcoYSkpLGM9Yi5sZW5ndGg7d2hpbGUoYy0tKWY9eGEoYltjXSksZlt1XT9kLnB1c2goZik6ZS5wdXNoKGYpO2Y9QShhLHlhKGUsZCkpLGYuc2VsZWN0b3I9YX1yZXR1cm4gZn0saT1nYS5zZWxlY3Q9ZnVuY3Rpb24oYSxiLGUsZil7dmFyIGksaixrLGwsbSxuPSJmdW5jdGlvbiI9PXR5cGVvZiBhJiZhLG89IWYmJmcoYT1uLnNlbGVjdG9yfHxhKTtpZihlPWV8fFtdLDE9PT1vLmxlbmd0aCl7aWYoaj1vWzBdPW9bMF0uc2xpY2UoMCksai5sZW5ndGg+MiYmIklEIj09PShrPWpbMF0pLnR5cGUmJmMuZ2V0QnlJZCYmOT09PWIubm9kZVR5cGUmJnAmJmQucmVsYXRpdmVbalsxXS50eXBlXSl7aWYoYj0oZC5maW5kLklEKGsubWF0Y2hlc1swXS5yZXBsYWNlKGNhLGRhKSxiKXx8W10pWzBdLCFiKXJldHVybiBlO24mJihiPWIucGFyZW50Tm9kZSksYT1hLnNsaWNlKGouc2hpZnQoKS52YWx1ZS5sZW5ndGgpfWk9WC5uZWVkc0NvbnRleHQudGVzdChhKT8wOmoubGVuZ3RoO3doaWxlKGktLSl7aWYoaz1qW2ldLGQucmVsYXRpdmVbbD1rLnR5cGVdKWJyZWFrO2lmKChtPWQuZmluZFtsXSkmJihmPW0oay5tYXRjaGVzWzBdLnJlcGxhY2UoY2EsZGEpLGFhLnRlc3QoalswXS50eXBlKSYmcGEoYi5wYXJlbnROb2RlKXx8YikpKXtpZihqLnNwbGljZShpLDEpLGE9Zi5sZW5ndGgmJnJhKGopLCFhKXJldHVybiBILmFwcGx5KGUsZiksZTticmVha319fXJldHVybihufHxoKGEsbykpKGYsYiwhcCxlLGFhLnRlc3QoYSkmJnBhKGIucGFyZW50Tm9kZSl8fGIpLGV9LGMuc29ydFN0YWJsZT11LnNwbGl0KCIiKS5zb3J0KEIpLmpvaW4oIiIpPT09dSxjLmRldGVjdER1cGxpY2F0ZXM9ISFsLG0oKSxjLnNvcnREZXRhY2hlZD1qYShmdW5jdGlvbihhKXtyZXR1cm4gMSZhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKG4uY3JlYXRlRWxlbWVudCgiZGl2IikpfSksamEoZnVuY3Rpb24oYSl7cmV0dXJuIGEuaW5uZXJIVE1MPSI8YSBocmVmPScjJz48L2E+IiwiIyI9PT1hLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJocmVmIil9KXx8a2EoInR5cGV8aHJlZnxoZWlnaHR8d2lkdGgiLGZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYz92b2lkIDA6YS5nZXRBdHRyaWJ1dGUoYiwidHlwZSI9PT1iLnRvTG93ZXJDYXNlKCk/MToyKX0pLGMuYXR0cmlidXRlcyYmamEoZnVuY3Rpb24oYSl7cmV0dXJuIGEuaW5uZXJIVE1MPSI8aW5wdXQvPiIsYS5maXJzdENoaWxkLnNldEF0dHJpYnV0ZSgidmFsdWUiLCIiKSwiIj09PWEuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoInZhbHVlIil9KXx8a2EoInZhbHVlIixmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGN8fCJpbnB1dCIhPT1hLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk/dm9pZCAwOmEuZGVmYXVsdFZhbHVlfSksamEoZnVuY3Rpb24oYSl7cmV0dXJuIG51bGw9PWEuZ2V0QXR0cmlidXRlKCJkaXNhYmxlZCIpfSl8fGthKEssZnVuY3Rpb24oYSxiLGMpe3ZhciBkO3JldHVybiBjP3ZvaWQgMDphW2JdPT09ITA/Yi50b0xvd2VyQ2FzZSgpOihkPWEuZ2V0QXR0cmlidXRlTm9kZShiKSkmJmQuc3BlY2lmaWVkP2QudmFsdWU6bnVsbH0pLGdhfShhKTttLmZpbmQ9cyxtLmV4cHI9cy5zZWxlY3RvcnMsbS5leHByWyI6Il09bS5leHByLnBzZXVkb3MsbS51bmlxdWU9cy51bmlxdWVTb3J0LG0udGV4dD1zLmdldFRleHQsbS5pc1hNTERvYz1zLmlzWE1MLG0uY29udGFpbnM9cy5jb250YWluczt2YXIgdD1tLmV4cHIubWF0Y2gubmVlZHNDb250ZXh0LHU9L148KFx3KylccypcLz8+KD86PFwvXDE+fCkkLyx2PS9eLlteOiNcW1wuLF0qJC87ZnVuY3Rpb24gdyhhLGIsYyl7aWYobS5pc0Z1bmN0aW9uKGIpKXJldHVybiBtLmdyZXAoYSxmdW5jdGlvbihhLGQpe3JldHVybiEhYi5jYWxsKGEsZCxhKSE9PWN9KTtpZihiLm5vZGVUeXBlKXJldHVybiBtLmdyZXAoYSxmdW5jdGlvbihhKXtyZXR1cm4gYT09PWIhPT1jfSk7aWYoInN0cmluZyI9PXR5cGVvZiBiKXtpZih2LnRlc3QoYikpcmV0dXJuIG0uZmlsdGVyKGIsYSxjKTtiPW0uZmlsdGVyKGIsYSl9cmV0dXJuIG0uZ3JlcChhLGZ1bmN0aW9uKGEpe3JldHVybiBtLmluQXJyYXkoYSxiKT49MCE9PWN9KX1tLmZpbHRlcj1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9YlswXTtyZXR1cm4gYyYmKGE9Ijpub3QoIithKyIpIiksMT09PWIubGVuZ3RoJiYxPT09ZC5ub2RlVHlwZT9tLmZpbmQubWF0Y2hlc1NlbGVjdG9yKGQsYSk/W2RdOltdOm0uZmluZC5tYXRjaGVzKGEsbS5ncmVwKGIsZnVuY3Rpb24oYSl7cmV0dXJuIDE9PT1hLm5vZGVUeXBlfSkpfSxtLmZuLmV4dGVuZCh7ZmluZDpmdW5jdGlvbihhKXt2YXIgYixjPVtdLGQ9dGhpcyxlPWQubGVuZ3RoO2lmKCJzdHJpbmciIT10eXBlb2YgYSlyZXR1cm4gdGhpcy5wdXNoU3RhY2sobShhKS5maWx0ZXIoZnVuY3Rpb24oKXtmb3IoYj0wO2U+YjtiKyspaWYobS5jb250YWlucyhkW2JdLHRoaXMpKXJldHVybiEwfSkpO2ZvcihiPTA7ZT5iO2IrKyltLmZpbmQoYSxkW2JdLGMpO3JldHVybiBjPXRoaXMucHVzaFN0YWNrKGU+MT9tLnVuaXF1ZShjKTpjKSxjLnNlbGVjdG9yPXRoaXMuc2VsZWN0b3I/dGhpcy5zZWxlY3RvcisiICIrYTphLGN9LGZpbHRlcjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2sodyh0aGlzLGF8fFtdLCExKSl9LG5vdDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2sodyh0aGlzLGF8fFtdLCEwKSl9LGlzOmZ1bmN0aW9uKGEpe3JldHVybiEhdyh0aGlzLCJzdHJpbmciPT10eXBlb2YgYSYmdC50ZXN0KGEpP20oYSk6YXx8W10sITEpLmxlbmd0aH19KTt2YXIgeCx5PWEuZG9jdW1lbnQsej0vXig/OlxzKig8W1x3XFddKz4pW14+XSp8IyhbXHctXSopKSQvLEE9bS5mbi5pbml0PWZ1bmN0aW9uKGEsYil7dmFyIGMsZDtpZighYSlyZXR1cm4gdGhpcztpZigic3RyaW5nIj09dHlwZW9mIGEpe2lmKGM9IjwiPT09YS5jaGFyQXQoMCkmJiI+Ij09PWEuY2hhckF0KGEubGVuZ3RoLTEpJiZhLmxlbmd0aD49Mz9bbnVsbCxhLG51bGxdOnouZXhlYyhhKSwhY3x8IWNbMV0mJmIpcmV0dXJuIWJ8fGIuanF1ZXJ5PyhifHx4KS5maW5kKGEpOnRoaXMuY29uc3RydWN0b3IoYikuZmluZChhKTtpZihjWzFdKXtpZihiPWIgaW5zdGFuY2VvZiBtP2JbMF06YixtLm1lcmdlKHRoaXMsbS5wYXJzZUhUTUwoY1sxXSxiJiZiLm5vZGVUeXBlP2Iub3duZXJEb2N1bWVudHx8Yjp5LCEwKSksdS50ZXN0KGNbMV0pJiZtLmlzUGxhaW5PYmplY3QoYikpZm9yKGMgaW4gYiltLmlzRnVuY3Rpb24odGhpc1tjXSk/dGhpc1tjXShiW2NdKTp0aGlzLmF0dHIoYyxiW2NdKTtyZXR1cm4gdGhpc31pZihkPXkuZ2V0RWxlbWVudEJ5SWQoY1syXSksZCYmZC5wYXJlbnROb2RlKXtpZihkLmlkIT09Y1syXSlyZXR1cm4geC5maW5kKGEpO3RoaXMubGVuZ3RoPTEsdGhpc1swXT1kfXJldHVybiB0aGlzLmNvbnRleHQ9eSx0aGlzLnNlbGVjdG9yPWEsdGhpc31yZXR1cm4gYS5ub2RlVHlwZT8odGhpcy5jb250ZXh0PXRoaXNbMF09YSx0aGlzLmxlbmd0aD0xLHRoaXMpOm0uaXNGdW5jdGlvbihhKT8idW5kZWZpbmVkIiE9dHlwZW9mIHgucmVhZHk/eC5yZWFkeShhKTphKG0pOih2b2lkIDAhPT1hLnNlbGVjdG9yJiYodGhpcy5zZWxlY3Rvcj1hLnNlbGVjdG9yLHRoaXMuY29udGV4dD1hLmNvbnRleHQpLG0ubWFrZUFycmF5KGEsdGhpcykpfTtBLnByb3RvdHlwZT1tLmZuLHg9bSh5KTt2YXIgQj0vXig/OnBhcmVudHN8cHJldig/OlVudGlsfEFsbCkpLyxDPXtjaGlsZHJlbjohMCxjb250ZW50czohMCxuZXh0OiEwLHByZXY6ITB9O20uZXh0ZW5kKHtkaXI6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPVtdLGU9YVtiXTt3aGlsZShlJiY5IT09ZS5ub2RlVHlwZSYmKHZvaWQgMD09PWN8fDEhPT1lLm5vZGVUeXBlfHwhbShlKS5pcyhjKSkpMT09PWUubm9kZVR5cGUmJmQucHVzaChlKSxlPWVbYl07cmV0dXJuIGR9LHNpYmxpbmc6ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9W107YTthPWEubmV4dFNpYmxpbmcpMT09PWEubm9kZVR5cGUmJmEhPT1iJiZjLnB1c2goYSk7cmV0dXJuIGN9fSksbS5mbi5leHRlbmQoe2hhczpmdW5jdGlvbihhKXt2YXIgYixjPW0oYSx0aGlzKSxkPWMubGVuZ3RoO3JldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbigpe2ZvcihiPTA7ZD5iO2IrKylpZihtLmNvbnRhaW5zKHRoaXMsY1tiXSkpcmV0dXJuITB9KX0sY2xvc2VzdDpmdW5jdGlvbihhLGIpe2Zvcih2YXIgYyxkPTAsZT10aGlzLmxlbmd0aCxmPVtdLGc9dC50ZXN0KGEpfHwic3RyaW5nIiE9dHlwZW9mIGE/bShhLGJ8fHRoaXMuY29udGV4dCk6MDtlPmQ7ZCsrKWZvcihjPXRoaXNbZF07YyYmYyE9PWI7Yz1jLnBhcmVudE5vZGUpaWYoYy5ub2RlVHlwZTwxMSYmKGc/Zy5pbmRleChjKT4tMToxPT09Yy5ub2RlVHlwZSYmbS5maW5kLm1hdGNoZXNTZWxlY3RvcihjLGEpKSl7Zi5wdXNoKGMpO2JyZWFrfXJldHVybiB0aGlzLnB1c2hTdGFjayhmLmxlbmd0aD4xP20udW5pcXVlKGYpOmYpfSxpbmRleDpmdW5jdGlvbihhKXtyZXR1cm4gYT8ic3RyaW5nIj09dHlwZW9mIGE/bS5pbkFycmF5KHRoaXNbMF0sbShhKSk6bS5pbkFycmF5KGEuanF1ZXJ5P2FbMF06YSx0aGlzKTp0aGlzWzBdJiZ0aGlzWzBdLnBhcmVudE5vZGU/dGhpcy5maXJzdCgpLnByZXZBbGwoKS5sZW5ndGg6LTF9LGFkZDpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLnB1c2hTdGFjayhtLnVuaXF1ZShtLm1lcmdlKHRoaXMuZ2V0KCksbShhLGIpKSkpfSxhZGRCYWNrOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmFkZChudWxsPT1hP3RoaXMucHJldk9iamVjdDp0aGlzLnByZXZPYmplY3QuZmlsdGVyKGEpKX19KTtmdW5jdGlvbiBEKGEsYil7ZG8gYT1hW2JdO3doaWxlKGEmJjEhPT1hLm5vZGVUeXBlKTtyZXR1cm4gYX1tLmVhY2goe3BhcmVudDpmdW5jdGlvbihhKXt2YXIgYj1hLnBhcmVudE5vZGU7cmV0dXJuIGImJjExIT09Yi5ub2RlVHlwZT9iOm51bGx9LHBhcmVudHM6ZnVuY3Rpb24oYSl7cmV0dXJuIG0uZGlyKGEsInBhcmVudE5vZGUiKX0scGFyZW50c1VudGlsOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gbS5kaXIoYSwicGFyZW50Tm9kZSIsYyl9LG5leHQ6ZnVuY3Rpb24oYSl7cmV0dXJuIEQoYSwibmV4dFNpYmxpbmciKX0scHJldjpmdW5jdGlvbihhKXtyZXR1cm4gRChhLCJwcmV2aW91c1NpYmxpbmciKX0sbmV4dEFsbDpmdW5jdGlvbihhKXtyZXR1cm4gbS5kaXIoYSwibmV4dFNpYmxpbmciKX0scHJldkFsbDpmdW5jdGlvbihhKXtyZXR1cm4gbS5kaXIoYSwicHJldmlvdXNTaWJsaW5nIil9LG5leHRVbnRpbDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIG0uZGlyKGEsIm5leHRTaWJsaW5nIixjKX0scHJldlVudGlsOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gbS5kaXIoYSwicHJldmlvdXNTaWJsaW5nIixjKX0sc2libGluZ3M6ZnVuY3Rpb24oYSl7cmV0dXJuIG0uc2libGluZygoYS5wYXJlbnROb2RlfHx7fSkuZmlyc3RDaGlsZCxhKX0sY2hpbGRyZW46ZnVuY3Rpb24oYSl7cmV0dXJuIG0uc2libGluZyhhLmZpcnN0Q2hpbGQpfSxjb250ZW50czpmdW5jdGlvbihhKXtyZXR1cm4gbS5ub2RlTmFtZShhLCJpZnJhbWUiKT9hLmNvbnRlbnREb2N1bWVudHx8YS5jb250ZW50V2luZG93LmRvY3VtZW50Om0ubWVyZ2UoW10sYS5jaGlsZE5vZGVzKX19LGZ1bmN0aW9uKGEsYil7bS5mblthXT1mdW5jdGlvbihjLGQpe3ZhciBlPW0ubWFwKHRoaXMsYixjKTtyZXR1cm4iVW50aWwiIT09YS5zbGljZSgtNSkmJihkPWMpLGQmJiJzdHJpbmciPT10eXBlb2YgZCYmKGU9bS5maWx0ZXIoZCxlKSksdGhpcy5sZW5ndGg+MSYmKENbYV18fChlPW0udW5pcXVlKGUpKSxCLnRlc3QoYSkmJihlPWUucmV2ZXJzZSgpKSksdGhpcy5wdXNoU3RhY2soZSl9fSk7dmFyIEU9L1xTKy9nLEY9e307ZnVuY3Rpb24gRyhhKXt2YXIgYj1GW2FdPXt9O3JldHVybiBtLmVhY2goYS5tYXRjaChFKXx8W10sZnVuY3Rpb24oYSxjKXtiW2NdPSEwfSksYn1tLkNhbGxiYWNrcz1mdW5jdGlvbihhKXthPSJzdHJpbmciPT10eXBlb2YgYT9GW2FdfHxHKGEpOm0uZXh0ZW5kKHt9LGEpO3ZhciBiLGMsZCxlLGYsZyxoPVtdLGk9IWEub25jZSYmW10saj1mdW5jdGlvbihsKXtmb3IoYz1hLm1lbW9yeSYmbCxkPSEwLGY9Z3x8MCxnPTAsZT1oLmxlbmd0aCxiPSEwO2gmJmU+ZjtmKyspaWYoaFtmXS5hcHBseShsWzBdLGxbMV0pPT09ITEmJmEuc3RvcE9uRmFsc2Upe2M9ITE7YnJlYWt9Yj0hMSxoJiYoaT9pLmxlbmd0aCYmaihpLnNoaWZ0KCkpOmM/aD1bXTprLmRpc2FibGUoKSl9LGs9e2FkZDpmdW5jdGlvbigpe2lmKGgpe3ZhciBkPWgubGVuZ3RoOyFmdW5jdGlvbiBmKGIpe20uZWFjaChiLGZ1bmN0aW9uKGIsYyl7dmFyIGQ9bS50eXBlKGMpOyJmdW5jdGlvbiI9PT1kP2EudW5pcXVlJiZrLmhhcyhjKXx8aC5wdXNoKGMpOmMmJmMubGVuZ3RoJiYic3RyaW5nIiE9PWQmJmYoYyl9KX0oYXJndW1lbnRzKSxiP2U9aC5sZW5ndGg6YyYmKGc9ZCxqKGMpKX1yZXR1cm4gdGhpc30scmVtb3ZlOmZ1bmN0aW9uKCl7cmV0dXJuIGgmJm0uZWFjaChhcmd1bWVudHMsZnVuY3Rpb24oYSxjKXt2YXIgZDt3aGlsZSgoZD1tLmluQXJyYXkoYyxoLGQpKT4tMSloLnNwbGljZShkLDEpLGImJihlPj1kJiZlLS0sZj49ZCYmZi0tKX0pLHRoaXN9LGhhczpmdW5jdGlvbihhKXtyZXR1cm4gYT9tLmluQXJyYXkoYSxoKT4tMTohKCFofHwhaC5sZW5ndGgpfSxlbXB0eTpmdW5jdGlvbigpe3JldHVybiBoPVtdLGU9MCx0aGlzfSxkaXNhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIGg9aT1jPXZvaWQgMCx0aGlzfSxkaXNhYmxlZDpmdW5jdGlvbigpe3JldHVybiFofSxsb2NrOmZ1bmN0aW9uKCl7cmV0dXJuIGk9dm9pZCAwLGN8fGsuZGlzYWJsZSgpLHRoaXN9LGxvY2tlZDpmdW5jdGlvbigpe3JldHVybiFpfSxmaXJlV2l0aDpmdW5jdGlvbihhLGMpe3JldHVybiFofHxkJiYhaXx8KGM9Y3x8W10sYz1bYSxjLnNsaWNlP2Muc2xpY2UoKTpjXSxiP2kucHVzaChjKTpqKGMpKSx0aGlzfSxmaXJlOmZ1bmN0aW9uKCl7cmV0dXJuIGsuZmlyZVdpdGgodGhpcyxhcmd1bWVudHMpLHRoaXN9LGZpcmVkOmZ1bmN0aW9uKCl7cmV0dXJuISFkfX07cmV0dXJuIGt9LG0uZXh0ZW5kKHtEZWZlcnJlZDpmdW5jdGlvbihhKXt2YXIgYj1bWyJyZXNvbHZlIiwiZG9uZSIsbS5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksInJlc29sdmVkIl0sWyJyZWplY3QiLCJmYWlsIixtLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSwicmVqZWN0ZWQiXSxbIm5vdGlmeSIsInByb2dyZXNzIixtLkNhbGxiYWNrcygibWVtb3J5IildXSxjPSJwZW5kaW5nIixkPXtzdGF0ZTpmdW5jdGlvbigpe3JldHVybiBjfSxhbHdheXM6ZnVuY3Rpb24oKXtyZXR1cm4gZS5kb25lKGFyZ3VtZW50cykuZmFpbChhcmd1bWVudHMpLHRoaXN9LHRoZW46ZnVuY3Rpb24oKXt2YXIgYT1hcmd1bWVudHM7cmV0dXJuIG0uRGVmZXJyZWQoZnVuY3Rpb24oYyl7bS5lYWNoKGIsZnVuY3Rpb24oYixmKXt2YXIgZz1tLmlzRnVuY3Rpb24oYVtiXSkmJmFbYl07ZVtmWzFdXShmdW5jdGlvbigpe3ZhciBhPWcmJmcuYXBwbHkodGhpcyxhcmd1bWVudHMpO2EmJm0uaXNGdW5jdGlvbihhLnByb21pc2UpP2EucHJvbWlzZSgpLmRvbmUoYy5yZXNvbHZlKS5mYWlsKGMucmVqZWN0KS5wcm9ncmVzcyhjLm5vdGlmeSk6Y1tmWzBdKyJXaXRoIl0odGhpcz09PWQ/Yy5wcm9taXNlKCk6dGhpcyxnP1thXTphcmd1bWVudHMpfSl9KSxhPW51bGx9KS5wcm9taXNlKCl9LHByb21pc2U6ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGwhPWE/bS5leHRlbmQoYSxkKTpkfX0sZT17fTtyZXR1cm4gZC5waXBlPWQudGhlbixtLmVhY2goYixmdW5jdGlvbihhLGYpe3ZhciBnPWZbMl0saD1mWzNdO2RbZlsxXV09Zy5hZGQsaCYmZy5hZGQoZnVuY3Rpb24oKXtjPWh9LGJbMV5hXVsyXS5kaXNhYmxlLGJbMl1bMl0ubG9jayksZVtmWzBdXT1mdW5jdGlvbigpe3JldHVybiBlW2ZbMF0rIldpdGgiXSh0aGlzPT09ZT9kOnRoaXMsYXJndW1lbnRzKSx0aGlzfSxlW2ZbMF0rIldpdGgiXT1nLmZpcmVXaXRofSksZC5wcm9taXNlKGUpLGEmJmEuY2FsbChlLGUpLGV9LHdoZW46ZnVuY3Rpb24oYSl7dmFyIGI9MCxjPWQuY2FsbChhcmd1bWVudHMpLGU9Yy5sZW5ndGgsZj0xIT09ZXx8YSYmbS5pc0Z1bmN0aW9uKGEucHJvbWlzZSk/ZTowLGc9MT09PWY/YTptLkRlZmVycmVkKCksaD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGZ1bmN0aW9uKGUpe2JbYV09dGhpcyxjW2FdPWFyZ3VtZW50cy5sZW5ndGg+MT9kLmNhbGwoYXJndW1lbnRzKTplLGM9PT1pP2cubm90aWZ5V2l0aChiLGMpOi0tZnx8Zy5yZXNvbHZlV2l0aChiLGMpfX0saSxqLGs7aWYoZT4xKWZvcihpPW5ldyBBcnJheShlKSxqPW5ldyBBcnJheShlKSxrPW5ldyBBcnJheShlKTtlPmI7YisrKWNbYl0mJm0uaXNGdW5jdGlvbihjW2JdLnByb21pc2UpP2NbYl0ucHJvbWlzZSgpLmRvbmUoaChiLGssYykpLmZhaWwoZy5yZWplY3QpLnByb2dyZXNzKGgoYixqLGkpKTotLWY7cmV0dXJuIGZ8fGcucmVzb2x2ZVdpdGgoayxjKSxnLnByb21pc2UoKX19KTt2YXIgSDttLmZuLnJlYWR5PWZ1bmN0aW9uKGEpe3JldHVybiBtLnJlYWR5LnByb21pc2UoKS5kb25lKGEpLHRoaXN9LG0uZXh0ZW5kKHtpc1JlYWR5OiExLHJlYWR5V2FpdDoxLGhvbGRSZWFkeTpmdW5jdGlvbihhKXthP20ucmVhZHlXYWl0Kys6bS5yZWFkeSghMCl9LHJlYWR5OmZ1bmN0aW9uKGEpe2lmKGE9PT0hMD8hLS1tLnJlYWR5V2FpdDohbS5pc1JlYWR5KXtpZigheS5ib2R5KXJldHVybiBzZXRUaW1lb3V0KG0ucmVhZHkpO20uaXNSZWFkeT0hMCxhIT09ITAmJi0tbS5yZWFkeVdhaXQ+MHx8KEgucmVzb2x2ZVdpdGgoeSxbbV0pLG0uZm4udHJpZ2dlckhhbmRsZXImJihtKHkpLnRyaWdnZXJIYW5kbGVyKCJyZWFkeSIpLG0oeSkub2ZmKCJyZWFkeSIpKSl9fX0pO2Z1bmN0aW9uIEkoKXt5LmFkZEV2ZW50TGlzdGVuZXI/KHkucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsSiwhMSksYS5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIixKLCExKSk6KHkuZGV0YWNoRXZlbnQoIm9ucmVhZHlzdGF0ZWNoYW5nZSIsSiksYS5kZXRhY2hFdmVudCgib25sb2FkIixKKSl9ZnVuY3Rpb24gSigpeyh5LmFkZEV2ZW50TGlzdGVuZXJ8fCJsb2FkIj09PWV2ZW50LnR5cGV8fCJjb21wbGV0ZSI9PT15LnJlYWR5U3RhdGUpJiYoSSgpLG0ucmVhZHkoKSl9bS5yZWFkeS5wcm9taXNlPWZ1bmN0aW9uKGIpe2lmKCFIKWlmKEg9bS5EZWZlcnJlZCgpLCJjb21wbGV0ZSI9PT15LnJlYWR5U3RhdGUpc2V0VGltZW91dChtLnJlYWR5KTtlbHNlIGlmKHkuYWRkRXZlbnRMaXN0ZW5lcil5LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLEosITEpLGEuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsSiwhMSk7ZWxzZXt5LmF0dGFjaEV2ZW50KCJvbnJlYWR5c3RhdGVjaGFuZ2UiLEopLGEuYXR0YWNoRXZlbnQoIm9ubG9hZCIsSik7dmFyIGM9ITE7dHJ5e2M9bnVsbD09YS5mcmFtZUVsZW1lbnQmJnkuZG9jdW1lbnRFbGVtZW50fWNhdGNoKGQpe31jJiZjLmRvU2Nyb2xsJiYhZnVuY3Rpb24gZSgpe2lmKCFtLmlzUmVhZHkpe3RyeXtjLmRvU2Nyb2xsKCJsZWZ0Iil9Y2F0Y2goYSl7cmV0dXJuIHNldFRpbWVvdXQoZSw1MCl9SSgpLG0ucmVhZHkoKX19KCl9cmV0dXJuIEgucHJvbWlzZShiKX07dmFyIEs9InVuZGVmaW5lZCIsTDtmb3IoTCBpbiBtKGspKWJyZWFrO2sub3duTGFzdD0iMCIhPT1MLGsuaW5saW5lQmxvY2tOZWVkc0xheW91dD0hMSxtKGZ1bmN0aW9uKCl7dmFyIGEsYixjLGQ7Yz15LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5IilbMF0sYyYmYy5zdHlsZSYmKGI9eS5jcmVhdGVFbGVtZW50KCJkaXYiKSxkPXkuY3JlYXRlRWxlbWVudCgiZGl2IiksZC5zdHlsZS5jc3NUZXh0PSJwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXI6MDt3aWR0aDowO2hlaWdodDowO3RvcDowO2xlZnQ6LTk5OTlweCIsYy5hcHBlbmRDaGlsZChkKS5hcHBlbmRDaGlsZChiKSx0eXBlb2YgYi5zdHlsZS56b29tIT09SyYmKGIuc3R5bGUuY3NzVGV4dD0iZGlzcGxheTppbmxpbmU7bWFyZ2luOjA7Ym9yZGVyOjA7cGFkZGluZzoxcHg7d2lkdGg6MXB4O3pvb206MSIsay5pbmxpbmVCbG9ja05lZWRzTGF5b3V0PWE9Mz09PWIub2Zmc2V0V2lkdGgsYSYmKGMuc3R5bGUuem9vbT0xKSksYy5yZW1vdmVDaGlsZChkKSl9KSxmdW5jdGlvbigpe3ZhciBhPXkuY3JlYXRlRWxlbWVudCgiZGl2Iik7aWYobnVsbD09ay5kZWxldGVFeHBhbmRvKXtrLmRlbGV0ZUV4cGFuZG89ITA7dHJ5e2RlbGV0ZSBhLnRlc3R9Y2F0Y2goYil7ay5kZWxldGVFeHBhbmRvPSExfX1hPW51bGx9KCksbS5hY2NlcHREYXRhPWZ1bmN0aW9uKGEpe3ZhciBiPW0ubm9EYXRhWyhhLm5vZGVOYW1lKyIgIikudG9Mb3dlckNhc2UoKV0sYz0rYS5ub2RlVHlwZXx8MTtyZXR1cm4gMSE9PWMmJjkhPT1jPyExOiFifHxiIT09ITAmJmEuZ2V0QXR0cmlidXRlKCJjbGFzc2lkIik9PT1ifTt2YXIgTT0vXig/Olx7W1x3XFddKlx9fFxbW1x3XFddKlxdKSQvLE49LyhbQS1aXSkvZztmdW5jdGlvbiBPKGEsYixjKXtpZih2b2lkIDA9PT1jJiYxPT09YS5ub2RlVHlwZSl7dmFyIGQ9ImRhdGEtIitiLnJlcGxhY2UoTiwiLSQxIikudG9Mb3dlckNhc2UoKTtpZihjPWEuZ2V0QXR0cmlidXRlKGQpLCJzdHJpbmciPT10eXBlb2YgYyl7dHJ5e2M9InRydWUiPT09Yz8hMDoiZmFsc2UiPT09Yz8hMToibnVsbCI9PT1jP251bGw6K2MrIiI9PT1jPytjOk0udGVzdChjKT9tLnBhcnNlSlNPTihjKTpjfWNhdGNoKGUpe31tLmRhdGEoYSxiLGMpfWVsc2UgYz12b2lkIDB9cmV0dXJuIGN9ZnVuY3Rpb24gUChhKXt2YXIgYjtmb3IoYiBpbiBhKWlmKCgiZGF0YSIhPT1ifHwhbS5pc0VtcHR5T2JqZWN0KGFbYl0pKSYmInRvSlNPTiIhPT1iKXJldHVybiExOwoKcmV0dXJuITB9ZnVuY3Rpb24gUShhLGIsZCxlKXtpZihtLmFjY2VwdERhdGEoYSkpe3ZhciBmLGcsaD1tLmV4cGFuZG8saT1hLm5vZGVUeXBlLGo9aT9tLmNhY2hlOmEsaz1pP2FbaF06YVtoXSYmaDtpZihrJiZqW2tdJiYoZXx8altrXS5kYXRhKXx8dm9pZCAwIT09ZHx8InN0cmluZyIhPXR5cGVvZiBiKXJldHVybiBrfHwoaz1pP2FbaF09Yy5wb3AoKXx8bS5ndWlkKys6aCksaltrXXx8KGpba109aT97fTp7dG9KU09OOm0ubm9vcH0pLCgib2JqZWN0Ij09dHlwZW9mIGJ8fCJmdW5jdGlvbiI9PXR5cGVvZiBiKSYmKGU/altrXT1tLmV4dGVuZChqW2tdLGIpOmpba10uZGF0YT1tLmV4dGVuZChqW2tdLmRhdGEsYikpLGc9altrXSxlfHwoZy5kYXRhfHwoZy5kYXRhPXt9KSxnPWcuZGF0YSksdm9pZCAwIT09ZCYmKGdbbS5jYW1lbENhc2UoYildPWQpLCJzdHJpbmciPT10eXBlb2YgYj8oZj1nW2JdLG51bGw9PWYmJihmPWdbbS5jYW1lbENhc2UoYildKSk6Zj1nLGZ9fWZ1bmN0aW9uIFIoYSxiLGMpe2lmKG0uYWNjZXB0RGF0YShhKSl7dmFyIGQsZSxmPWEubm9kZVR5cGUsZz1mP20uY2FjaGU6YSxoPWY/YVttLmV4cGFuZG9dOm0uZXhwYW5kbztpZihnW2hdKXtpZihiJiYoZD1jP2dbaF06Z1toXS5kYXRhKSl7bS5pc0FycmF5KGIpP2I9Yi5jb25jYXQobS5tYXAoYixtLmNhbWVsQ2FzZSkpOmIgaW4gZD9iPVtiXTooYj1tLmNhbWVsQ2FzZShiKSxiPWIgaW4gZD9bYl06Yi5zcGxpdCgiICIpKSxlPWIubGVuZ3RoO3doaWxlKGUtLSlkZWxldGUgZFtiW2VdXTtpZihjPyFQKGQpOiFtLmlzRW1wdHlPYmplY3QoZCkpcmV0dXJufShjfHwoZGVsZXRlIGdbaF0uZGF0YSxQKGdbaF0pKSkmJihmP20uY2xlYW5EYXRhKFthXSwhMCk6ay5kZWxldGVFeHBhbmRvfHxnIT1nLndpbmRvdz9kZWxldGUgZ1toXTpnW2hdPW51bGwpfX19bS5leHRlbmQoe2NhY2hlOnt9LG5vRGF0YTp7ImFwcGxldCAiOiEwLCJlbWJlZCAiOiEwLCJvYmplY3QgIjoiY2xzaWQ6RDI3Q0RCNkUtQUU2RC0xMWNmLTk2QjgtNDQ0NTUzNTQwMDAwIn0saGFzRGF0YTpmdW5jdGlvbihhKXtyZXR1cm4gYT1hLm5vZGVUeXBlP20uY2FjaGVbYVttLmV4cGFuZG9dXTphW20uZXhwYW5kb10sISFhJiYhUChhKX0sZGF0YTpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIFEoYSxiLGMpfSxyZW1vdmVEYXRhOmZ1bmN0aW9uKGEsYil7cmV0dXJuIFIoYSxiKX0sX2RhdGE6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBRKGEsYixjLCEwKX0sX3JlbW92ZURhdGE6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gUihhLGIsITApfX0pLG0uZm4uZXh0ZW5kKHtkYXRhOmZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlLGY9dGhpc1swXSxnPWYmJmYuYXR0cmlidXRlcztpZih2b2lkIDA9PT1hKXtpZih0aGlzLmxlbmd0aCYmKGU9bS5kYXRhKGYpLDE9PT1mLm5vZGVUeXBlJiYhbS5fZGF0YShmLCJwYXJzZWRBdHRycyIpKSl7Yz1nLmxlbmd0aDt3aGlsZShjLS0pZ1tjXSYmKGQ9Z1tjXS5uYW1lLDA9PT1kLmluZGV4T2YoImRhdGEtIikmJihkPW0uY2FtZWxDYXNlKGQuc2xpY2UoNSkpLE8oZixkLGVbZF0pKSk7bS5fZGF0YShmLCJwYXJzZWRBdHRycyIsITApfXJldHVybiBlfXJldHVybiJvYmplY3QiPT10eXBlb2YgYT90aGlzLmVhY2goZnVuY3Rpb24oKXttLmRhdGEodGhpcyxhKX0pOmFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goZnVuY3Rpb24oKXttLmRhdGEodGhpcyxhLGIpfSk6Zj9PKGYsYSxtLmRhdGEoZixhKSk6dm9pZCAwfSxyZW1vdmVEYXRhOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXttLnJlbW92ZURhdGEodGhpcyxhKX0pfX0pLG0uZXh0ZW5kKHtxdWV1ZTpmdW5jdGlvbihhLGIsYyl7dmFyIGQ7cmV0dXJuIGE/KGI9KGJ8fCJmeCIpKyJxdWV1ZSIsZD1tLl9kYXRhKGEsYiksYyYmKCFkfHxtLmlzQXJyYXkoYyk/ZD1tLl9kYXRhKGEsYixtLm1ha2VBcnJheShjKSk6ZC5wdXNoKGMpKSxkfHxbXSk6dm9pZCAwfSxkZXF1ZXVlOmZ1bmN0aW9uKGEsYil7Yj1ifHwiZngiO3ZhciBjPW0ucXVldWUoYSxiKSxkPWMubGVuZ3RoLGU9Yy5zaGlmdCgpLGY9bS5fcXVldWVIb29rcyhhLGIpLGc9ZnVuY3Rpb24oKXttLmRlcXVldWUoYSxiKX07ImlucHJvZ3Jlc3MiPT09ZSYmKGU9Yy5zaGlmdCgpLGQtLSksZSYmKCJmeCI9PT1iJiZjLnVuc2hpZnQoImlucHJvZ3Jlc3MiKSxkZWxldGUgZi5zdG9wLGUuY2FsbChhLGcsZikpLCFkJiZmJiZmLmVtcHR5LmZpcmUoKX0sX3F1ZXVlSG9va3M6ZnVuY3Rpb24oYSxiKXt2YXIgYz1iKyJxdWV1ZUhvb2tzIjtyZXR1cm4gbS5fZGF0YShhLGMpfHxtLl9kYXRhKGEsYyx7ZW1wdHk6bS5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IikuYWRkKGZ1bmN0aW9uKCl7bS5fcmVtb3ZlRGF0YShhLGIrInF1ZXVlIiksbS5fcmVtb3ZlRGF0YShhLGMpfSl9KX19KSxtLmZuLmV4dGVuZCh7cXVldWU6ZnVuY3Rpb24oYSxiKXt2YXIgYz0yO3JldHVybiJzdHJpbmciIT10eXBlb2YgYSYmKGI9YSxhPSJmeCIsYy0tKSxhcmd1bWVudHMubGVuZ3RoPGM/bS5xdWV1ZSh0aGlzWzBdLGEpOnZvaWQgMD09PWI/dGhpczp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYz1tLnF1ZXVlKHRoaXMsYSxiKTttLl9xdWV1ZUhvb2tzKHRoaXMsYSksImZ4Ij09PWEmJiJpbnByb2dyZXNzIiE9PWNbMF0mJm0uZGVxdWV1ZSh0aGlzLGEpfSl9LGRlcXVldWU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe20uZGVxdWV1ZSh0aGlzLGEpfSl9LGNsZWFyUXVldWU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucXVldWUoYXx8ImZ4IixbXSl9LHByb21pc2U6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkPTEsZT1tLkRlZmVycmVkKCksZj10aGlzLGc9dGhpcy5sZW5ndGgsaD1mdW5jdGlvbigpey0tZHx8ZS5yZXNvbHZlV2l0aChmLFtmXSl9OyJzdHJpbmciIT10eXBlb2YgYSYmKGI9YSxhPXZvaWQgMCksYT1hfHwiZngiO3doaWxlKGctLSljPW0uX2RhdGEoZltnXSxhKyJxdWV1ZUhvb2tzIiksYyYmYy5lbXB0eSYmKGQrKyxjLmVtcHR5LmFkZChoKSk7cmV0dXJuIGgoKSxlLnByb21pc2UoYil9fSk7dmFyIFM9L1srLV0/KD86XGQqXC58KVxkKyg/OltlRV1bKy1dP1xkK3wpLy5zb3VyY2UsVD1bIlRvcCIsIlJpZ2h0IiwiQm90dG9tIiwiTGVmdCJdLFU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYT1ifHxhLCJub25lIj09PW0uY3NzKGEsImRpc3BsYXkiKXx8IW0uY29udGFpbnMoYS5vd25lckRvY3VtZW50LGEpfSxWPW0uYWNjZXNzPWZ1bmN0aW9uKGEsYixjLGQsZSxmLGcpe3ZhciBoPTAsaT1hLmxlbmd0aCxqPW51bGw9PWM7aWYoIm9iamVjdCI9PT1tLnR5cGUoYykpe2U9ITA7Zm9yKGggaW4gYyltLmFjY2VzcyhhLGIsaCxjW2hdLCEwLGYsZyl9ZWxzZSBpZih2b2lkIDAhPT1kJiYoZT0hMCxtLmlzRnVuY3Rpb24oZCl8fChnPSEwKSxqJiYoZz8oYi5jYWxsKGEsZCksYj1udWxsKTooaj1iLGI9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBqLmNhbGwobShhKSxjKX0pKSxiKSlmb3IoO2k+aDtoKyspYihhW2hdLGMsZz9kOmQuY2FsbChhW2hdLGgsYihhW2hdLGMpKSk7cmV0dXJuIGU/YTpqP2IuY2FsbChhKTppP2IoYVswXSxjKTpmfSxXPS9eKD86Y2hlY2tib3h8cmFkaW8pJC9pOyFmdW5jdGlvbigpe3ZhciBhPXkuY3JlYXRlRWxlbWVudCgiaW5wdXQiKSxiPXkuY3JlYXRlRWxlbWVudCgiZGl2IiksYz15LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtpZihiLmlubmVySFRNTD0iICA8bGluay8+PHRhYmxlPjwvdGFibGU+PGEgaHJlZj0nL2EnPmE8L2E+PGlucHV0IHR5cGU9J2NoZWNrYm94Jy8+IixrLmxlYWRpbmdXaGl0ZXNwYWNlPTM9PT1iLmZpcnN0Q2hpbGQubm9kZVR5cGUsay50Ym9keT0hYi5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGJvZHkiKS5sZW5ndGgsay5odG1sU2VyaWFsaXplPSEhYi5nZXRFbGVtZW50c0J5VGFnTmFtZSgibGluayIpLmxlbmd0aCxrLmh0bWw1Q2xvbmU9Ijw6bmF2PjwvOm5hdj4iIT09eS5jcmVhdGVFbGVtZW50KCJuYXYiKS5jbG9uZU5vZGUoITApLm91dGVySFRNTCxhLnR5cGU9ImNoZWNrYm94IixhLmNoZWNrZWQ9ITAsYy5hcHBlbmRDaGlsZChhKSxrLmFwcGVuZENoZWNrZWQ9YS5jaGVja2VkLGIuaW5uZXJIVE1MPSI8dGV4dGFyZWE+eDwvdGV4dGFyZWE+IixrLm5vQ2xvbmVDaGVja2VkPSEhYi5jbG9uZU5vZGUoITApLmxhc3RDaGlsZC5kZWZhdWx0VmFsdWUsYy5hcHBlbmRDaGlsZChiKSxiLmlubmVySFRNTD0iPGlucHV0IHR5cGU9J3JhZGlvJyBjaGVja2VkPSdjaGVja2VkJyBuYW1lPSd0Jy8+IixrLmNoZWNrQ2xvbmU9Yi5jbG9uZU5vZGUoITApLmNsb25lTm9kZSghMCkubGFzdENoaWxkLmNoZWNrZWQsay5ub0Nsb25lRXZlbnQ9ITAsYi5hdHRhY2hFdmVudCYmKGIuYXR0YWNoRXZlbnQoIm9uY2xpY2siLGZ1bmN0aW9uKCl7ay5ub0Nsb25lRXZlbnQ9ITF9KSxiLmNsb25lTm9kZSghMCkuY2xpY2soKSksbnVsbD09ay5kZWxldGVFeHBhbmRvKXtrLmRlbGV0ZUV4cGFuZG89ITA7dHJ5e2RlbGV0ZSBiLnRlc3R9Y2F0Y2goZCl7ay5kZWxldGVFeHBhbmRvPSExfX19KCksZnVuY3Rpb24oKXt2YXIgYixjLGQ9eS5jcmVhdGVFbGVtZW50KCJkaXYiKTtmb3IoYiBpbntzdWJtaXQ6ITAsY2hhbmdlOiEwLGZvY3VzaW46ITB9KWM9Im9uIitiLChrW2IrIkJ1YmJsZXMiXT1jIGluIGEpfHwoZC5zZXRBdHRyaWJ1dGUoYywidCIpLGtbYisiQnViYmxlcyJdPWQuYXR0cmlidXRlc1tjXS5leHBhbmRvPT09ITEpO2Q9bnVsbH0oKTt2YXIgWD0vXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYSkkL2ksWT0vXmtleS8sWj0vXig/Om1vdXNlfHBvaW50ZXJ8Y29udGV4dG1lbnUpfGNsaWNrLywkPS9eKD86Zm9jdXNpbmZvY3VzfGZvY3Vzb3V0Ymx1cikkLyxfPS9eKFteLl0qKSg/OlwuKC4rKXwpJC87ZnVuY3Rpb24gYWEoKXtyZXR1cm4hMH1mdW5jdGlvbiBiYSgpe3JldHVybiExfWZ1bmN0aW9uIGNhKCl7dHJ5e3JldHVybiB5LmFjdGl2ZUVsZW1lbnR9Y2F0Y2goYSl7fX1tLmV2ZW50PXtnbG9iYWw6e30sYWRkOmZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGYsZyxoLGksaixrLGwsbixvLHAscSxyPW0uX2RhdGEoYSk7aWYocil7Yy5oYW5kbGVyJiYoaT1jLGM9aS5oYW5kbGVyLGU9aS5zZWxlY3RvciksYy5ndWlkfHwoYy5ndWlkPW0uZ3VpZCsrKSwoZz1yLmV2ZW50cyl8fChnPXIuZXZlbnRzPXt9KSwoaz1yLmhhbmRsZSl8fChrPXIuaGFuZGxlPWZ1bmN0aW9uKGEpe3JldHVybiB0eXBlb2YgbT09PUt8fGEmJm0uZXZlbnQudHJpZ2dlcmVkPT09YS50eXBlP3ZvaWQgMDptLmV2ZW50LmRpc3BhdGNoLmFwcGx5KGsuZWxlbSxhcmd1bWVudHMpfSxrLmVsZW09YSksYj0oYnx8IiIpLm1hdGNoKEUpfHxbIiJdLGg9Yi5sZW5ndGg7d2hpbGUoaC0tKWY9Xy5leGVjKGJbaF0pfHxbXSxvPXE9ZlsxXSxwPShmWzJdfHwiIikuc3BsaXQoIi4iKS5zb3J0KCksbyYmKGo9bS5ldmVudC5zcGVjaWFsW29dfHx7fSxvPShlP2ouZGVsZWdhdGVUeXBlOmouYmluZFR5cGUpfHxvLGo9bS5ldmVudC5zcGVjaWFsW29dfHx7fSxsPW0uZXh0ZW5kKHt0eXBlOm8sb3JpZ1R5cGU6cSxkYXRhOmQsaGFuZGxlcjpjLGd1aWQ6Yy5ndWlkLHNlbGVjdG9yOmUsbmVlZHNDb250ZXh0OmUmJm0uZXhwci5tYXRjaC5uZWVkc0NvbnRleHQudGVzdChlKSxuYW1lc3BhY2U6cC5qb2luKCIuIil9LGkpLChuPWdbb10pfHwobj1nW29dPVtdLG4uZGVsZWdhdGVDb3VudD0wLGouc2V0dXAmJmouc2V0dXAuY2FsbChhLGQscCxrKSE9PSExfHwoYS5hZGRFdmVudExpc3RlbmVyP2EuYWRkRXZlbnRMaXN0ZW5lcihvLGssITEpOmEuYXR0YWNoRXZlbnQmJmEuYXR0YWNoRXZlbnQoIm9uIitvLGspKSksai5hZGQmJihqLmFkZC5jYWxsKGEsbCksbC5oYW5kbGVyLmd1aWR8fChsLmhhbmRsZXIuZ3VpZD1jLmd1aWQpKSxlP24uc3BsaWNlKG4uZGVsZWdhdGVDb3VudCsrLDAsbCk6bi5wdXNoKGwpLG0uZXZlbnQuZ2xvYmFsW29dPSEwKTthPW51bGx9fSxyZW1vdmU6ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZixnLGgsaSxqLGssbCxuLG8scCxxLHI9bS5oYXNEYXRhKGEpJiZtLl9kYXRhKGEpO2lmKHImJihrPXIuZXZlbnRzKSl7Yj0oYnx8IiIpLm1hdGNoKEUpfHxbIiJdLGo9Yi5sZW5ndGg7d2hpbGUoai0tKWlmKGg9Xy5leGVjKGJbal0pfHxbXSxvPXE9aFsxXSxwPShoWzJdfHwiIikuc3BsaXQoIi4iKS5zb3J0KCksbyl7bD1tLmV2ZW50LnNwZWNpYWxbb118fHt9LG89KGQ/bC5kZWxlZ2F0ZVR5cGU6bC5iaW5kVHlwZSl8fG8sbj1rW29dfHxbXSxoPWhbMl0mJm5ldyBSZWdFeHAoIihefFxcLikiK3Auam9pbigiXFwuKD86LipcXC58KSIpKyIoXFwufCQpIiksaT1mPW4ubGVuZ3RoO3doaWxlKGYtLSlnPW5bZl0sIWUmJnEhPT1nLm9yaWdUeXBlfHxjJiZjLmd1aWQhPT1nLmd1aWR8fGgmJiFoLnRlc3QoZy5uYW1lc3BhY2UpfHxkJiZkIT09Zy5zZWxlY3RvciYmKCIqKiIhPT1kfHwhZy5zZWxlY3Rvcil8fChuLnNwbGljZShmLDEpLGcuc2VsZWN0b3ImJm4uZGVsZWdhdGVDb3VudC0tLGwucmVtb3ZlJiZsLnJlbW92ZS5jYWxsKGEsZykpO2kmJiFuLmxlbmd0aCYmKGwudGVhcmRvd24mJmwudGVhcmRvd24uY2FsbChhLHAsci5oYW5kbGUpIT09ITF8fG0ucmVtb3ZlRXZlbnQoYSxvLHIuaGFuZGxlKSxkZWxldGUga1tvXSl9ZWxzZSBmb3IobyBpbiBrKW0uZXZlbnQucmVtb3ZlKGEsbytiW2pdLGMsZCwhMCk7bS5pc0VtcHR5T2JqZWN0KGspJiYoZGVsZXRlIHIuaGFuZGxlLG0uX3JlbW92ZURhdGEoYSwiZXZlbnRzIikpfX0sdHJpZ2dlcjpmdW5jdGlvbihiLGMsZCxlKXt2YXIgZixnLGgsaSxrLGwsbixvPVtkfHx5XSxwPWouY2FsbChiLCJ0eXBlIik/Yi50eXBlOmIscT1qLmNhbGwoYiwibmFtZXNwYWNlIik/Yi5uYW1lc3BhY2Uuc3BsaXQoIi4iKTpbXTtpZihoPWw9ZD1kfHx5LDMhPT1kLm5vZGVUeXBlJiY4IT09ZC5ub2RlVHlwZSYmISQudGVzdChwK20uZXZlbnQudHJpZ2dlcmVkKSYmKHAuaW5kZXhPZigiLiIpPj0wJiYocT1wLnNwbGl0KCIuIikscD1xLnNoaWZ0KCkscS5zb3J0KCkpLGc9cC5pbmRleE9mKCI6Iik8MCYmIm9uIitwLGI9YlttLmV4cGFuZG9dP2I6bmV3IG0uRXZlbnQocCwib2JqZWN0Ij09dHlwZW9mIGImJmIpLGIuaXNUcmlnZ2VyPWU/MjozLGIubmFtZXNwYWNlPXEuam9pbigiLiIpLGIubmFtZXNwYWNlX3JlPWIubmFtZXNwYWNlP25ldyBSZWdFeHAoIihefFxcLikiK3Euam9pbigiXFwuKD86LipcXC58KSIpKyIoXFwufCQpIik6bnVsbCxiLnJlc3VsdD12b2lkIDAsYi50YXJnZXR8fChiLnRhcmdldD1kKSxjPW51bGw9PWM/W2JdOm0ubWFrZUFycmF5KGMsW2JdKSxrPW0uZXZlbnQuc3BlY2lhbFtwXXx8e30sZXx8IWsudHJpZ2dlcnx8ay50cmlnZ2VyLmFwcGx5KGQsYykhPT0hMSkpe2lmKCFlJiYhay5ub0J1YmJsZSYmIW0uaXNXaW5kb3coZCkpe2ZvcihpPWsuZGVsZWdhdGVUeXBlfHxwLCQudGVzdChpK3ApfHwoaD1oLnBhcmVudE5vZGUpO2g7aD1oLnBhcmVudE5vZGUpby5wdXNoKGgpLGw9aDtsPT09KGQub3duZXJEb2N1bWVudHx8eSkmJm8ucHVzaChsLmRlZmF1bHRWaWV3fHxsLnBhcmVudFdpbmRvd3x8YSl9bj0wO3doaWxlKChoPW9bbisrXSkmJiFiLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpYi50eXBlPW4+MT9pOmsuYmluZFR5cGV8fHAsZj0obS5fZGF0YShoLCJldmVudHMiKXx8e30pW2IudHlwZV0mJm0uX2RhdGEoaCwiaGFuZGxlIiksZiYmZi5hcHBseShoLGMpLGY9ZyYmaFtnXSxmJiZmLmFwcGx5JiZtLmFjY2VwdERhdGEoaCkmJihiLnJlc3VsdD1mLmFwcGx5KGgsYyksYi5yZXN1bHQ9PT0hMSYmYi5wcmV2ZW50RGVmYXVsdCgpKTtpZihiLnR5cGU9cCwhZSYmIWIuaXNEZWZhdWx0UHJldmVudGVkKCkmJighay5fZGVmYXVsdHx8ay5fZGVmYXVsdC5hcHBseShvLnBvcCgpLGMpPT09ITEpJiZtLmFjY2VwdERhdGEoZCkmJmcmJmRbcF0mJiFtLmlzV2luZG93KGQpKXtsPWRbZ10sbCYmKGRbZ109bnVsbCksbS5ldmVudC50cmlnZ2VyZWQ9cDt0cnl7ZFtwXSgpfWNhdGNoKHIpe31tLmV2ZW50LnRyaWdnZXJlZD12b2lkIDAsbCYmKGRbZ109bCl9cmV0dXJuIGIucmVzdWx0fX0sZGlzcGF0Y2g6ZnVuY3Rpb24oYSl7YT1tLmV2ZW50LmZpeChhKTt2YXIgYixjLGUsZixnLGg9W10saT1kLmNhbGwoYXJndW1lbnRzKSxqPShtLl9kYXRhKHRoaXMsImV2ZW50cyIpfHx7fSlbYS50eXBlXXx8W10saz1tLmV2ZW50LnNwZWNpYWxbYS50eXBlXXx8e307aWYoaVswXT1hLGEuZGVsZWdhdGVUYXJnZXQ9dGhpcywhay5wcmVEaXNwYXRjaHx8ay5wcmVEaXNwYXRjaC5jYWxsKHRoaXMsYSkhPT0hMSl7aD1tLmV2ZW50LmhhbmRsZXJzLmNhbGwodGhpcyxhLGopLGI9MDt3aGlsZSgoZj1oW2IrK10pJiYhYS5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKXthLmN1cnJlbnRUYXJnZXQ9Zi5lbGVtLGc9MDt3aGlsZSgoZT1mLmhhbmRsZXJzW2crK10pJiYhYS5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpKSghYS5uYW1lc3BhY2VfcmV8fGEubmFtZXNwYWNlX3JlLnRlc3QoZS5uYW1lc3BhY2UpKSYmKGEuaGFuZGxlT2JqPWUsYS5kYXRhPWUuZGF0YSxjPSgobS5ldmVudC5zcGVjaWFsW2Uub3JpZ1R5cGVdfHx7fSkuaGFuZGxlfHxlLmhhbmRsZXIpLmFwcGx5KGYuZWxlbSxpKSx2b2lkIDAhPT1jJiYoYS5yZXN1bHQ9Yyk9PT0hMSYmKGEucHJldmVudERlZmF1bHQoKSxhLnN0b3BQcm9wYWdhdGlvbigpKSl9cmV0dXJuIGsucG9zdERpc3BhdGNoJiZrLnBvc3REaXNwYXRjaC5jYWxsKHRoaXMsYSksYS5yZXN1bHR9fSxoYW5kbGVyczpmdW5jdGlvbihhLGIpe3ZhciBjLGQsZSxmLGc9W10saD1iLmRlbGVnYXRlQ291bnQsaT1hLnRhcmdldDtpZihoJiZpLm5vZGVUeXBlJiYoIWEuYnV0dG9ufHwiY2xpY2siIT09YS50eXBlKSlmb3IoO2khPXRoaXM7aT1pLnBhcmVudE5vZGV8fHRoaXMpaWYoMT09PWkubm9kZVR5cGUmJihpLmRpc2FibGVkIT09ITB8fCJjbGljayIhPT1hLnR5cGUpKXtmb3IoZT1bXSxmPTA7aD5mO2YrKylkPWJbZl0sYz1kLnNlbGVjdG9yKyIgIix2b2lkIDA9PT1lW2NdJiYoZVtjXT1kLm5lZWRzQ29udGV4dD9tKGMsdGhpcykuaW5kZXgoaSk+PTA6bS5maW5kKGMsdGhpcyxudWxsLFtpXSkubGVuZ3RoKSxlW2NdJiZlLnB1c2goZCk7ZS5sZW5ndGgmJmcucHVzaCh7ZWxlbTppLGhhbmRsZXJzOmV9KX1yZXR1cm4gaDxiLmxlbmd0aCYmZy5wdXNoKHtlbGVtOnRoaXMsaGFuZGxlcnM6Yi5zbGljZShoKX0pLGd9LGZpeDpmdW5jdGlvbihhKXtpZihhW20uZXhwYW5kb10pcmV0dXJuIGE7dmFyIGIsYyxkLGU9YS50eXBlLGY9YSxnPXRoaXMuZml4SG9va3NbZV07Z3x8KHRoaXMuZml4SG9va3NbZV09Zz1aLnRlc3QoZSk/dGhpcy5tb3VzZUhvb2tzOlkudGVzdChlKT90aGlzLmtleUhvb2tzOnt9KSxkPWcucHJvcHM/dGhpcy5wcm9wcy5jb25jYXQoZy5wcm9wcyk6dGhpcy5wcm9wcyxhPW5ldyBtLkV2ZW50KGYpLGI9ZC5sZW5ndGg7d2hpbGUoYi0tKWM9ZFtiXSxhW2NdPWZbY107cmV0dXJuIGEudGFyZ2V0fHwoYS50YXJnZXQ9Zi5zcmNFbGVtZW50fHx5KSwzPT09YS50YXJnZXQubm9kZVR5cGUmJihhLnRhcmdldD1hLnRhcmdldC5wYXJlbnROb2RlKSxhLm1ldGFLZXk9ISFhLm1ldGFLZXksZy5maWx0ZXI/Zy5maWx0ZXIoYSxmKTphfSxwcm9wczoiYWx0S2V5IGJ1YmJsZXMgY2FuY2VsYWJsZSBjdHJsS2V5IGN1cnJlbnRUYXJnZXQgZXZlbnRQaGFzZSBtZXRhS2V5IHJlbGF0ZWRUYXJnZXQgc2hpZnRLZXkgdGFyZ2V0IHRpbWVTdGFtcCB2aWV3IHdoaWNoIi5zcGxpdCgiICIpLGZpeEhvb2tzOnt9LGtleUhvb2tzOntwcm9wczoiY2hhciBjaGFyQ29kZSBrZXkga2V5Q29kZSIuc3BsaXQoIiAiKSxmaWx0ZXI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbnVsbD09YS53aGljaCYmKGEud2hpY2g9bnVsbCE9Yi5jaGFyQ29kZT9iLmNoYXJDb2RlOmIua2V5Q29kZSksYX19LG1vdXNlSG9va3M6e3Byb3BzOiJidXR0b24gYnV0dG9ucyBjbGllbnRYIGNsaWVudFkgZnJvbUVsZW1lbnQgb2Zmc2V0WCBvZmZzZXRZIHBhZ2VYIHBhZ2VZIHNjcmVlblggc2NyZWVuWSB0b0VsZW1lbnQiLnNwbGl0KCIgIiksZmlsdGVyOmZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlLGY9Yi5idXR0b24sZz1iLmZyb21FbGVtZW50O3JldHVybiBudWxsPT1hLnBhZ2VYJiZudWxsIT1iLmNsaWVudFgmJihkPWEudGFyZ2V0Lm93bmVyRG9jdW1lbnR8fHksZT1kLmRvY3VtZW50RWxlbWVudCxjPWQuYm9keSxhLnBhZ2VYPWIuY2xpZW50WCsoZSYmZS5zY3JvbGxMZWZ0fHxjJiZjLnNjcm9sbExlZnR8fDApLShlJiZlLmNsaWVudExlZnR8fGMmJmMuY2xpZW50TGVmdHx8MCksYS5wYWdlWT1iLmNsaWVudFkrKGUmJmUuc2Nyb2xsVG9wfHxjJiZjLnNjcm9sbFRvcHx8MCktKGUmJmUuY2xpZW50VG9wfHxjJiZjLmNsaWVudFRvcHx8MCkpLCFhLnJlbGF0ZWRUYXJnZXQmJmcmJihhLnJlbGF0ZWRUYXJnZXQ9Zz09PWEudGFyZ2V0P2IudG9FbGVtZW50OmcpLGEud2hpY2h8fHZvaWQgMD09PWZ8fChhLndoaWNoPTEmZj8xOjImZj8zOjQmZj8yOjApLGF9fSxzcGVjaWFsOntsb2FkOntub0J1YmJsZTohMH0sZm9jdXM6e3RyaWdnZXI6ZnVuY3Rpb24oKXtpZih0aGlzIT09Y2EoKSYmdGhpcy5mb2N1cyl0cnl7cmV0dXJuIHRoaXMuZm9jdXMoKSwhMX1jYXRjaChhKXt9fSxkZWxlZ2F0ZVR5cGU6ImZvY3VzaW4ifSxibHVyOnt0cmlnZ2VyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXM9PT1jYSgpJiZ0aGlzLmJsdXI/KHRoaXMuYmx1cigpLCExKTp2b2lkIDB9LGRlbGVnYXRlVHlwZToiZm9jdXNvdXQifSxjbGljazp7dHJpZ2dlcjpmdW5jdGlvbigpe3JldHVybiBtLm5vZGVOYW1lKHRoaXMsImlucHV0IikmJiJjaGVja2JveCI9PT10aGlzLnR5cGUmJnRoaXMuY2xpY2s/KHRoaXMuY2xpY2soKSwhMSk6dm9pZCAwfSxfZGVmYXVsdDpmdW5jdGlvbihhKXtyZXR1cm4gbS5ub2RlTmFtZShhLnRhcmdldCwiYSIpfX0sYmVmb3JldW5sb2FkOntwb3N0RGlzcGF0Y2g6ZnVuY3Rpb24oYSl7dm9pZCAwIT09YS5yZXN1bHQmJmEub3JpZ2luYWxFdmVudCYmKGEub3JpZ2luYWxFdmVudC5yZXR1cm5WYWx1ZT1hLnJlc3VsdCl9fX0sc2ltdWxhdGU6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9bS5leHRlbmQobmV3IG0uRXZlbnQsYyx7dHlwZTphLGlzU2ltdWxhdGVkOiEwLG9yaWdpbmFsRXZlbnQ6e319KTtkP20uZXZlbnQudHJpZ2dlcihlLG51bGwsYik6bS5ldmVudC5kaXNwYXRjaC5jYWxsKGIsZSksZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSYmYy5wcmV2ZW50RGVmYXVsdCgpfX0sbS5yZW1vdmVFdmVudD15LnJlbW92ZUV2ZW50TGlzdGVuZXI/ZnVuY3Rpb24oYSxiLGMpe2EucmVtb3ZlRXZlbnRMaXN0ZW5lciYmYS5yZW1vdmVFdmVudExpc3RlbmVyKGIsYywhMSl9OmZ1bmN0aW9uKGEsYixjKXt2YXIgZD0ib24iK2I7YS5kZXRhY2hFdmVudCYmKHR5cGVvZiBhW2RdPT09SyYmKGFbZF09bnVsbCksYS5kZXRhY2hFdmVudChkLGMpKX0sbS5FdmVudD1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgbS5FdmVudD8oYSYmYS50eXBlPyh0aGlzLm9yaWdpbmFsRXZlbnQ9YSx0aGlzLnR5cGU9YS50eXBlLHRoaXMuaXNEZWZhdWx0UHJldmVudGVkPWEuZGVmYXVsdFByZXZlbnRlZHx8dm9pZCAwPT09YS5kZWZhdWx0UHJldmVudGVkJiZhLnJldHVyblZhbHVlPT09ITE/YWE6YmEpOnRoaXMudHlwZT1hLGImJm0uZXh0ZW5kKHRoaXMsYiksdGhpcy50aW1lU3RhbXA9YSYmYS50aW1lU3RhbXB8fG0ubm93KCksdm9pZCh0aGlzW20uZXhwYW5kb109ITApKTpuZXcgbS5FdmVudChhLGIpfSxtLkV2ZW50LnByb3RvdHlwZT17aXNEZWZhdWx0UHJldmVudGVkOmJhLGlzUHJvcGFnYXRpb25TdG9wcGVkOmJhLGlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOmJhLHByZXZlbnREZWZhdWx0OmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vcmlnaW5hbEV2ZW50O3RoaXMuaXNEZWZhdWx0UHJldmVudGVkPWFhLGEmJihhLnByZXZlbnREZWZhdWx0P2EucHJldmVudERlZmF1bHQoKTphLnJldHVyblZhbHVlPSExKX0sc3RvcFByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vcmlnaW5hbEV2ZW50O3RoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQ9YWEsYSYmKGEuc3RvcFByb3BhZ2F0aW9uJiZhLnN0b3BQcm9wYWdhdGlvbigpLGEuY2FuY2VsQnViYmxlPSEwKX0sc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vcmlnaW5hbEV2ZW50O3RoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ9YWEsYSYmYS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24mJmEuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCksdGhpcy5zdG9wUHJvcGFnYXRpb24oKX19LG0uZWFjaCh7bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCIscG9pbnRlcmVudGVyOiJwb2ludGVyb3ZlciIscG9pbnRlcmxlYXZlOiJwb2ludGVyb3V0In0sZnVuY3Rpb24oYSxiKXttLmV2ZW50LnNwZWNpYWxbYV09e2RlbGVnYXRlVHlwZTpiLGJpbmRUeXBlOmIsaGFuZGxlOmZ1bmN0aW9uKGEpe3ZhciBjLGQ9dGhpcyxlPWEucmVsYXRlZFRhcmdldCxmPWEuaGFuZGxlT2JqO3JldHVybighZXx8ZSE9PWQmJiFtLmNvbnRhaW5zKGQsZSkpJiYoYS50eXBlPWYub3JpZ1R5cGUsYz1mLmhhbmRsZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpLGEudHlwZT1iKSxjfX19KSxrLnN1Ym1pdEJ1YmJsZXN8fChtLmV2ZW50LnNwZWNpYWwuc3VibWl0PXtzZXR1cDpmdW5jdGlvbigpe3JldHVybiBtLm5vZGVOYW1lKHRoaXMsImZvcm0iKT8hMTp2b2lkIG0uZXZlbnQuYWRkKHRoaXMsImNsaWNrLl9zdWJtaXQga2V5cHJlc3MuX3N1Ym1pdCIsZnVuY3Rpb24oYSl7dmFyIGI9YS50YXJnZXQsYz1tLm5vZGVOYW1lKGIsImlucHV0Iil8fG0ubm9kZU5hbWUoYiwiYnV0dG9uIik/Yi5mb3JtOnZvaWQgMDtjJiYhbS5fZGF0YShjLCJzdWJtaXRCdWJibGVzIikmJihtLmV2ZW50LmFkZChjLCJzdWJtaXQuX3N1Ym1pdCIsZnVuY3Rpb24oYSl7YS5fc3VibWl0X2J1YmJsZT0hMH0pLG0uX2RhdGEoYywic3VibWl0QnViYmxlcyIsITApKX0pfSxwb3N0RGlzcGF0Y2g6ZnVuY3Rpb24oYSl7YS5fc3VibWl0X2J1YmJsZSYmKGRlbGV0ZSBhLl9zdWJtaXRfYnViYmxlLHRoaXMucGFyZW50Tm9kZSYmIWEuaXNUcmlnZ2VyJiZtLmV2ZW50LnNpbXVsYXRlKCJzdWJtaXQiLHRoaXMucGFyZW50Tm9kZSxhLCEwKSl9LHRlYXJkb3duOmZ1bmN0aW9uKCl7cmV0dXJuIG0ubm9kZU5hbWUodGhpcywiZm9ybSIpPyExOnZvaWQgbS5ldmVudC5yZW1vdmUodGhpcywiLl9zdWJtaXQiKX19KSxrLmNoYW5nZUJ1YmJsZXN8fChtLmV2ZW50LnNwZWNpYWwuY2hhbmdlPXtzZXR1cDpmdW5jdGlvbigpe3JldHVybiBYLnRlc3QodGhpcy5ub2RlTmFtZSk/KCgiY2hlY2tib3giPT09dGhpcy50eXBlfHwicmFkaW8iPT09dGhpcy50eXBlKSYmKG0uZXZlbnQuYWRkKHRoaXMsInByb3BlcnR5Y2hhbmdlLl9jaGFuZ2UiLGZ1bmN0aW9uKGEpeyJjaGVja2VkIj09PWEub3JpZ2luYWxFdmVudC5wcm9wZXJ0eU5hbWUmJih0aGlzLl9qdXN0X2NoYW5nZWQ9ITApfSksbS5ldmVudC5hZGQodGhpcywiY2xpY2suX2NoYW5nZSIsZnVuY3Rpb24oYSl7dGhpcy5fanVzdF9jaGFuZ2VkJiYhYS5pc1RyaWdnZXImJih0aGlzLl9qdXN0X2NoYW5nZWQ9ITEpLG0uZXZlbnQuc2ltdWxhdGUoImNoYW5nZSIsdGhpcyxhLCEwKX0pKSwhMSk6dm9pZCBtLmV2ZW50LmFkZCh0aGlzLCJiZWZvcmVhY3RpdmF0ZS5fY2hhbmdlIixmdW5jdGlvbihhKXt2YXIgYj1hLnRhcmdldDtYLnRlc3QoYi5ub2RlTmFtZSkmJiFtLl9kYXRhKGIsImNoYW5nZUJ1YmJsZXMiKSYmKG0uZXZlbnQuYWRkKGIsImNoYW5nZS5fY2hhbmdlIixmdW5jdGlvbihhKXshdGhpcy5wYXJlbnROb2RlfHxhLmlzU2ltdWxhdGVkfHxhLmlzVHJpZ2dlcnx8bS5ldmVudC5zaW11bGF0ZSgiY2hhbmdlIix0aGlzLnBhcmVudE5vZGUsYSwhMCl9KSxtLl9kYXRhKGIsImNoYW5nZUJ1YmJsZXMiLCEwKSl9KX0saGFuZGxlOmZ1bmN0aW9uKGEpe3ZhciBiPWEudGFyZ2V0O3JldHVybiB0aGlzIT09Ynx8YS5pc1NpbXVsYXRlZHx8YS5pc1RyaWdnZXJ8fCJyYWRpbyIhPT1iLnR5cGUmJiJjaGVja2JveCIhPT1iLnR5cGU/YS5oYW5kbGVPYmouaGFuZGxlci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6dm9pZCAwfSx0ZWFyZG93bjpmdW5jdGlvbigpe3JldHVybiBtLmV2ZW50LnJlbW92ZSh0aGlzLCIuX2NoYW5nZSIpLCFYLnRlc3QodGhpcy5ub2RlTmFtZSl9fSksay5mb2N1c2luQnViYmxlc3x8bS5lYWNoKHtmb2N1czoiZm9jdXNpbiIsYmx1cjoiZm9jdXNvdXQifSxmdW5jdGlvbihhLGIpe3ZhciBjPWZ1bmN0aW9uKGEpe20uZXZlbnQuc2ltdWxhdGUoYixhLnRhcmdldCxtLmV2ZW50LmZpeChhKSwhMCl9O20uZXZlbnQuc3BlY2lhbFtiXT17c2V0dXA6ZnVuY3Rpb24oKXt2YXIgZD10aGlzLm93bmVyRG9jdW1lbnR8fHRoaXMsZT1tLl9kYXRhKGQsYik7ZXx8ZC5hZGRFdmVudExpc3RlbmVyKGEsYywhMCksbS5fZGF0YShkLGIsKGV8fDApKzEpfSx0ZWFyZG93bjpmdW5jdGlvbigpe3ZhciBkPXRoaXMub3duZXJEb2N1bWVudHx8dGhpcyxlPW0uX2RhdGEoZCxiKS0xO2U/bS5fZGF0YShkLGIsZSk6KGQucmVtb3ZlRXZlbnRMaXN0ZW5lcihhLGMsITApLG0uX3JlbW92ZURhdGEoZCxiKSl9fX0pLG0uZm4uZXh0ZW5kKHtvbjpmdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmLGc7aWYoIm9iamVjdCI9PXR5cGVvZiBhKXsic3RyaW5nIiE9dHlwZW9mIGImJihjPWN8fGIsYj12b2lkIDApO2ZvcihmIGluIGEpdGhpcy5vbihmLGIsYyxhW2ZdLGUpO3JldHVybiB0aGlzfWlmKG51bGw9PWMmJm51bGw9PWQ/KGQ9YixjPWI9dm9pZCAwKTpudWxsPT1kJiYoInN0cmluZyI9PXR5cGVvZiBiPyhkPWMsYz12b2lkIDApOihkPWMsYz1iLGI9dm9pZCAwKSksZD09PSExKWQ9YmE7ZWxzZSBpZighZClyZXR1cm4gdGhpcztyZXR1cm4gMT09PWUmJihnPWQsZD1mdW5jdGlvbihhKXtyZXR1cm4gbSgpLm9mZihhKSxnLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sZC5ndWlkPWcuZ3VpZHx8KGcuZ3VpZD1tLmd1aWQrKykpLHRoaXMuZWFjaChmdW5jdGlvbigpe20uZXZlbnQuYWRkKHRoaXMsYSxkLGMsYil9KX0sb25lOmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiB0aGlzLm9uKGEsYixjLGQsMSl9LG9mZjpmdW5jdGlvbihhLGIsYyl7dmFyIGQsZTtpZihhJiZhLnByZXZlbnREZWZhdWx0JiZhLmhhbmRsZU9iailyZXR1cm4gZD1hLmhhbmRsZU9iaixtKGEuZGVsZWdhdGVUYXJnZXQpLm9mZihkLm5hbWVzcGFjZT9kLm9yaWdUeXBlKyIuIitkLm5hbWVzcGFjZTpkLm9yaWdUeXBlLGQuc2VsZWN0b3IsZC5oYW5kbGVyKSx0aGlzO2lmKCJvYmplY3QiPT10eXBlb2YgYSl7Zm9yKGUgaW4gYSl0aGlzLm9mZihlLGIsYVtlXSk7cmV0dXJuIHRoaXN9cmV0dXJuKGI9PT0hMXx8ImZ1bmN0aW9uIj09dHlwZW9mIGIpJiYoYz1iLGI9dm9pZCAwKSxjPT09ITEmJihjPWJhKSx0aGlzLmVhY2goZnVuY3Rpb24oKXttLmV2ZW50LnJlbW92ZSh0aGlzLGEsYyxiKX0pfSx0cmlnZ2VyOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe20uZXZlbnQudHJpZ2dlcihhLGIsdGhpcyl9KX0sdHJpZ2dlckhhbmRsZXI6ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzWzBdO3JldHVybiBjP20uZXZlbnQudHJpZ2dlcihhLGIsYywhMCk6dm9pZCAwfX0pO2Z1bmN0aW9uIGRhKGEpe3ZhciBiPWVhLnNwbGl0KCJ8IiksYz1hLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtpZihjLmNyZWF0ZUVsZW1lbnQpd2hpbGUoYi5sZW5ndGgpYy5jcmVhdGVFbGVtZW50KGIucG9wKCkpO3JldHVybiBjfXZhciBlYT0iYWJicnxhcnRpY2xlfGFzaWRlfGF1ZGlvfGJkaXxjYW52YXN8ZGF0YXxkYXRhbGlzdHxkZXRhaWxzfGZpZ2NhcHRpb258ZmlndXJlfGZvb3RlcnxoZWFkZXJ8aGdyb3VwfG1hcmt8bWV0ZXJ8bmF2fG91dHB1dHxwcm9ncmVzc3xzZWN0aW9ufHN1bW1hcnl8dGltZXx2aWRlbyIsZmE9LyBqUXVlcnlcZCs9Iig/Om51bGx8XGQrKSIvZyxnYT1uZXcgUmVnRXhwKCI8KD86IitlYSsiKVtcXHMvPl0iLCJpIiksaGE9L15ccysvLGlhPS88KD8hYXJlYXxicnxjb2x8ZW1iZWR8aHJ8aW1nfGlucHV0fGxpbmt8bWV0YXxwYXJhbSkoKFtcdzpdKylbXj5dKilcLz4vZ2ksamE9LzwoW1x3Ol0rKS8sa2E9Lzx0Ym9keS9pLGxhPS88fCYjP1x3KzsvLG1hPS88KD86c2NyaXB0fHN0eWxlfGxpbmspL2ksbmE9L2NoZWNrZWRccyooPzpbXj1dfD1ccyouY2hlY2tlZC4pL2ksb2E9L14kfFwvKD86amF2YXxlY21hKXNjcmlwdC9pLHBhPS9edHJ1ZVwvKC4qKS8scWE9L15ccyo8ISg/OlxbQ0RBVEFcW3wtLSl8KD86XF1cXXwtLSk+XHMqJC9nLHJhPXtvcHRpb246WzEsIjxzZWxlY3QgbXVsdGlwbGU9J211bHRpcGxlJz4iLCI8L3NlbGVjdD4iXSxsZWdlbmQ6WzEsIjxmaWVsZHNldD4iLCI8L2ZpZWxkc2V0PiJdLGFyZWE6WzEsIjxtYXA+IiwiPC9tYXA+Il0scGFyYW06WzEsIjxvYmplY3Q+IiwiPC9vYmplY3Q+Il0sdGhlYWQ6WzEsIjx0YWJsZT4iLCI8L3RhYmxlPiJdLHRyOlsyLCI8dGFibGU+PHRib2R5PiIsIjwvdGJvZHk+PC90YWJsZT4iXSxjb2w6WzIsIjx0YWJsZT48dGJvZHk+PC90Ym9keT48Y29sZ3JvdXA+IiwiPC9jb2xncm91cD48L3RhYmxlPiJdLHRkOlszLCI8dGFibGU+PHRib2R5Pjx0cj4iLCI8L3RyPjwvdGJvZHk+PC90YWJsZT4iXSxfZGVmYXVsdDprLmh0bWxTZXJpYWxpemU/WzAsIiIsIiJdOlsxLCJYPGRpdj4iLCI8L2Rpdj4iXX0sc2E9ZGEoeSksdGE9c2EuYXBwZW5kQ2hpbGQoeS5jcmVhdGVFbGVtZW50KCJkaXYiKSk7cmEub3B0Z3JvdXA9cmEub3B0aW9uLHJhLnRib2R5PXJhLnRmb290PXJhLmNvbGdyb3VwPXJhLmNhcHRpb249cmEudGhlYWQscmEudGg9cmEudGQ7ZnVuY3Rpb24gdWEoYSxiKXt2YXIgYyxkLGU9MCxmPXR5cGVvZiBhLmdldEVsZW1lbnRzQnlUYWdOYW1lIT09Sz9hLmdldEVsZW1lbnRzQnlUYWdOYW1lKGJ8fCIqIik6dHlwZW9mIGEucXVlcnlTZWxlY3RvckFsbCE9PUs/YS5xdWVyeVNlbGVjdG9yQWxsKGJ8fCIqIik6dm9pZCAwO2lmKCFmKWZvcihmPVtdLGM9YS5jaGlsZE5vZGVzfHxhO251bGwhPShkPWNbZV0pO2UrKykhYnx8bS5ub2RlTmFtZShkLGIpP2YucHVzaChkKTptLm1lcmdlKGYsdWEoZCxiKSk7cmV0dXJuIHZvaWQgMD09PWJ8fGImJm0ubm9kZU5hbWUoYSxiKT9tLm1lcmdlKFthXSxmKTpmfWZ1bmN0aW9uIHZhKGEpe1cudGVzdChhLnR5cGUpJiYoYS5kZWZhdWx0Q2hlY2tlZD1hLmNoZWNrZWQpfWZ1bmN0aW9uIHdhKGEsYil7cmV0dXJuIG0ubm9kZU5hbWUoYSwidGFibGUiKSYmbS5ub2RlTmFtZSgxMSE9PWIubm9kZVR5cGU/YjpiLmZpcnN0Q2hpbGQsInRyIik/YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGJvZHkiKVswXXx8YS5hcHBlbmRDaGlsZChhLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGJvZHkiKSk6YX1mdW5jdGlvbiB4YShhKXtyZXR1cm4gYS50eXBlPShudWxsIT09bS5maW5kLmF0dHIoYSwidHlwZSIpKSsiLyIrYS50eXBlLGF9ZnVuY3Rpb24geWEoYSl7dmFyIGI9cGEuZXhlYyhhLnR5cGUpO3JldHVybiBiP2EudHlwZT1iWzFdOmEucmVtb3ZlQXR0cmlidXRlKCJ0eXBlIiksYX1mdW5jdGlvbiB6YShhLGIpe2Zvcih2YXIgYyxkPTA7bnVsbCE9KGM9YVtkXSk7ZCsrKW0uX2RhdGEoYywiZ2xvYmFsRXZhbCIsIWJ8fG0uX2RhdGEoYltkXSwiZ2xvYmFsRXZhbCIpKX1mdW5jdGlvbiBBYShhLGIpe2lmKDE9PT1iLm5vZGVUeXBlJiZtLmhhc0RhdGEoYSkpe3ZhciBjLGQsZSxmPW0uX2RhdGEoYSksZz1tLl9kYXRhKGIsZiksaD1mLmV2ZW50cztpZihoKXtkZWxldGUgZy5oYW5kbGUsZy5ldmVudHM9e307Zm9yKGMgaW4gaClmb3IoZD0wLGU9aFtjXS5sZW5ndGg7ZT5kO2QrKyltLmV2ZW50LmFkZChiLGMsaFtjXVtkXSl9Zy5kYXRhJiYoZy5kYXRhPW0uZXh0ZW5kKHt9LGcuZGF0YSkpfX1mdW5jdGlvbiBCYShhLGIpe3ZhciBjLGQsZTtpZigxPT09Yi5ub2RlVHlwZSl7aWYoYz1iLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksIWsubm9DbG9uZUV2ZW50JiZiW20uZXhwYW5kb10pe2U9bS5fZGF0YShiKTtmb3IoZCBpbiBlLmV2ZW50cyltLnJlbW92ZUV2ZW50KGIsZCxlLmhhbmRsZSk7Yi5yZW1vdmVBdHRyaWJ1dGUobS5leHBhbmRvKX0ic2NyaXB0Ij09PWMmJmIudGV4dCE9PWEudGV4dD8oeGEoYikudGV4dD1hLnRleHQseWEoYikpOiJvYmplY3QiPT09Yz8oYi5wYXJlbnROb2RlJiYoYi5vdXRlckhUTUw9YS5vdXRlckhUTUwpLGsuaHRtbDVDbG9uZSYmYS5pbm5lckhUTUwmJiFtLnRyaW0oYi5pbm5lckhUTUwpJiYoYi5pbm5lckhUTUw9YS5pbm5lckhUTUwpKToiaW5wdXQiPT09YyYmVy50ZXN0KGEudHlwZSk/KGIuZGVmYXVsdENoZWNrZWQ9Yi5jaGVja2VkPWEuY2hlY2tlZCxiLnZhbHVlIT09YS52YWx1ZSYmKGIudmFsdWU9YS52YWx1ZSkpOiJvcHRpb24iPT09Yz9iLmRlZmF1bHRTZWxlY3RlZD1iLnNlbGVjdGVkPWEuZGVmYXVsdFNlbGVjdGVkOigiaW5wdXQiPT09Y3x8InRleHRhcmVhIj09PWMpJiYoYi5kZWZhdWx0VmFsdWU9YS5kZWZhdWx0VmFsdWUpfX1tLmV4dGVuZCh7Y2xvbmU6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGUsZixnLGgsaT1tLmNvbnRhaW5zKGEub3duZXJEb2N1bWVudCxhKTtpZihrLmh0bWw1Q2xvbmV8fG0uaXNYTUxEb2MoYSl8fCFnYS50ZXN0KCI8IithLm5vZGVOYW1lKyI+Iik/Zj1hLmNsb25lTm9kZSghMCk6KHRhLmlubmVySFRNTD1hLm91dGVySFRNTCx0YS5yZW1vdmVDaGlsZChmPXRhLmZpcnN0Q2hpbGQpKSwhKGsubm9DbG9uZUV2ZW50JiZrLm5vQ2xvbmVDaGVja2VkfHwxIT09YS5ub2RlVHlwZSYmMTEhPT1hLm5vZGVUeXBlfHxtLmlzWE1MRG9jKGEpKSlmb3IoZD11YShmKSxoPXVhKGEpLGc9MDtudWxsIT0oZT1oW2ddKTsrK2cpZFtnXSYmQmEoZSxkW2ddKTtpZihiKWlmKGMpZm9yKGg9aHx8dWEoYSksZD1kfHx1YShmKSxnPTA7bnVsbCE9KGU9aFtnXSk7ZysrKUFhKGUsZFtnXSk7ZWxzZSBBYShhLGYpO3JldHVybiBkPXVhKGYsInNjcmlwdCIpLGQubGVuZ3RoPjAmJnphKGQsIWkmJnVhKGEsInNjcmlwdCIpKSxkPWg9ZT1udWxsLGZ9LGJ1aWxkRnJhZ21lbnQ6ZnVuY3Rpb24oYSxiLGMsZCl7Zm9yKHZhciBlLGYsZyxoLGksaixsLG49YS5sZW5ndGgsbz1kYShiKSxwPVtdLHE9MDtuPnE7cSsrKWlmKGY9YVtxXSxmfHwwPT09ZilpZigib2JqZWN0Ij09PW0udHlwZShmKSltLm1lcmdlKHAsZi5ub2RlVHlwZT9bZl06Zik7ZWxzZSBpZihsYS50ZXN0KGYpKXtoPWh8fG8uYXBwZW5kQ2hpbGQoYi5jcmVhdGVFbGVtZW50KCJkaXYiKSksaT0oamEuZXhlYyhmKXx8WyIiLCIiXSlbMV0udG9Mb3dlckNhc2UoKSxsPXJhW2ldfHxyYS5fZGVmYXVsdCxoLmlubmVySFRNTD1sWzFdK2YucmVwbGFjZShpYSwiPCQxPjwvJDI+IikrbFsyXSxlPWxbMF07d2hpbGUoZS0tKWg9aC5sYXN0Q2hpbGQ7aWYoIWsubGVhZGluZ1doaXRlc3BhY2UmJmhhLnRlc3QoZikmJnAucHVzaChiLmNyZWF0ZVRleHROb2RlKGhhLmV4ZWMoZilbMF0pKSwhay50Ym9keSl7Zj0idGFibGUiIT09aXx8a2EudGVzdChmKT8iPHRhYmxlPiIhPT1sWzFdfHxrYS50ZXN0KGYpPzA6aDpoLmZpcnN0Q2hpbGQsZT1mJiZmLmNoaWxkTm9kZXMubGVuZ3RoO3doaWxlKGUtLSltLm5vZGVOYW1lKGo9Zi5jaGlsZE5vZGVzW2VdLCJ0Ym9keSIpJiYhai5jaGlsZE5vZGVzLmxlbmd0aCYmZi5yZW1vdmVDaGlsZChqKX1tLm1lcmdlKHAsaC5jaGlsZE5vZGVzKSxoLnRleHRDb250ZW50PSIiO3doaWxlKGguZmlyc3RDaGlsZCloLnJlbW92ZUNoaWxkKGguZmlyc3RDaGlsZCk7aD1vLmxhc3RDaGlsZH1lbHNlIHAucHVzaChiLmNyZWF0ZVRleHROb2RlKGYpKTtoJiZvLnJlbW92ZUNoaWxkKGgpLGsuYXBwZW5kQ2hlY2tlZHx8bS5ncmVwKHVhKHAsImlucHV0IiksdmEpLHE9MDt3aGlsZShmPXBbcSsrXSlpZigoIWR8fC0xPT09bS5pbkFycmF5KGYsZCkpJiYoZz1tLmNvbnRhaW5zKGYub3duZXJEb2N1bWVudCxmKSxoPXVhKG8uYXBwZW5kQ2hpbGQoZiksInNjcmlwdCIpLGcmJnphKGgpLGMpKXtlPTA7d2hpbGUoZj1oW2UrK10pb2EudGVzdChmLnR5cGV8fCIiKSYmYy5wdXNoKGYpfXJldHVybiBoPW51bGwsb30sY2xlYW5EYXRhOmZ1bmN0aW9uKGEsYil7Zm9yKHZhciBkLGUsZixnLGg9MCxpPW0uZXhwYW5kbyxqPW0uY2FjaGUsbD1rLmRlbGV0ZUV4cGFuZG8sbj1tLmV2ZW50LnNwZWNpYWw7bnVsbCE9KGQ9YVtoXSk7aCsrKWlmKChifHxtLmFjY2VwdERhdGEoZCkpJiYoZj1kW2ldLGc9ZiYmaltmXSkpe2lmKGcuZXZlbnRzKWZvcihlIGluIGcuZXZlbnRzKW5bZV0/bS5ldmVudC5yZW1vdmUoZCxlKTptLnJlbW92ZUV2ZW50KGQsZSxnLmhhbmRsZSk7altmXSYmKGRlbGV0ZSBqW2ZdLGw/ZGVsZXRlIGRbaV06dHlwZW9mIGQucmVtb3ZlQXR0cmlidXRlIT09Sz9kLnJlbW92ZUF0dHJpYnV0ZShpKTpkW2ldPW51bGwsYy5wdXNoKGYpKX19fSksbS5mbi5leHRlbmQoe3RleHQ6ZnVuY3Rpb24oYSl7cmV0dXJuIFYodGhpcyxmdW5jdGlvbihhKXtyZXR1cm4gdm9pZCAwPT09YT9tLnRleHQodGhpcyk6dGhpcy5lbXB0eSgpLmFwcGVuZCgodGhpc1swXSYmdGhpc1swXS5vd25lckRvY3VtZW50fHx5KS5jcmVhdGVUZXh0Tm9kZShhKSl9LG51bGwsYSxhcmd1bWVudHMubGVuZ3RoKX0sYXBwZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLGZ1bmN0aW9uKGEpe2lmKDE9PT10aGlzLm5vZGVUeXBlfHwxMT09PXRoaXMubm9kZVR5cGV8fDk9PT10aGlzLm5vZGVUeXBlKXt2YXIgYj13YSh0aGlzLGEpO2IuYXBwZW5kQ2hpbGQoYSl9fSl9LHByZXBlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsZnVuY3Rpb24oYSl7aWYoMT09PXRoaXMubm9kZVR5cGV8fDExPT09dGhpcy5ub2RlVHlwZXx8OT09PXRoaXMubm9kZVR5cGUpe3ZhciBiPXdhKHRoaXMsYSk7Yi5pbnNlcnRCZWZvcmUoYSxiLmZpcnN0Q2hpbGQpfX0pfSxiZWZvcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsZnVuY3Rpb24oYSl7dGhpcy5wYXJlbnROb2RlJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsdGhpcyl9KX0sYWZ0ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsZnVuY3Rpb24oYSl7dGhpcy5wYXJlbnROb2RlJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsdGhpcy5uZXh0U2libGluZyl9KX0scmVtb3ZlOmZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjLGQ9YT9tLmZpbHRlcihhLHRoaXMpOnRoaXMsZT0wO251bGwhPShjPWRbZV0pO2UrKylifHwxIT09Yy5ub2RlVHlwZXx8bS5jbGVhbkRhdGEodWEoYykpLGMucGFyZW50Tm9kZSYmKGImJm0uY29udGFpbnMoYy5vd25lckRvY3VtZW50LGMpJiZ6YSh1YShjLCJzY3JpcHQiKSksYy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGMpKTtyZXR1cm4gdGhpc30sZW1wdHk6ZnVuY3Rpb24oKXtmb3IodmFyIGEsYj0wO251bGwhPShhPXRoaXNbYl0pO2IrKyl7MT09PWEubm9kZVR5cGUmJm0uY2xlYW5EYXRhKHVhKGEsITEpKTt3aGlsZShhLmZpcnN0Q2hpbGQpYS5yZW1vdmVDaGlsZChhLmZpcnN0Q2hpbGQpO2Eub3B0aW9ucyYmbS5ub2RlTmFtZShhLCJzZWxlY3QiKSYmKGEub3B0aW9ucy5sZW5ndGg9MCl9cmV0dXJuIHRoaXN9LGNsb25lOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGE9bnVsbD09YT8hMTphLGI9bnVsbD09Yj9hOmIsdGhpcy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gbS5jbG9uZSh0aGlzLGEsYil9KX0saHRtbDpmdW5jdGlvbihhKXtyZXR1cm4gVih0aGlzLGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXNbMF18fHt9LGM9MCxkPXRoaXMubGVuZ3RoO2lmKHZvaWQgMD09PWEpcmV0dXJuIDE9PT1iLm5vZGVUeXBlP2IuaW5uZXJIVE1MLnJlcGxhY2UoZmEsIiIpOnZvaWQgMDtpZighKCJzdHJpbmciIT10eXBlb2YgYXx8bWEudGVzdChhKXx8IWsuaHRtbFNlcmlhbGl6ZSYmZ2EudGVzdChhKXx8IWsubGVhZGluZ1doaXRlc3BhY2UmJmhhLnRlc3QoYSl8fHJhWyhqYS5leGVjKGEpfHxbIiIsIiJdKVsxXS50b0xvd2VyQ2FzZSgpXSkpe2E9YS5yZXBsYWNlKGlhLCI8JDE+PC8kMj4iKTt0cnl7Zm9yKDtkPmM7YysrKWI9dGhpc1tjXXx8e30sMT09PWIubm9kZVR5cGUmJihtLmNsZWFuRGF0YSh1YShiLCExKSksYi5pbm5lckhUTUw9YSk7Yj0wfWNhdGNoKGUpe319YiYmdGhpcy5lbXB0eSgpLmFwcGVuZChhKX0sbnVsbCxhLGFyZ3VtZW50cy5sZW5ndGgpfSxyZXBsYWNlV2l0aDpmdW5jdGlvbigpe3ZhciBhPWFyZ3VtZW50c1swXTtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsZnVuY3Rpb24oYil7YT10aGlzLnBhcmVudE5vZGUsbS5jbGVhbkRhdGEodWEodGhpcykpLGEmJmEucmVwbGFjZUNoaWxkKGIsdGhpcyl9KSxhJiYoYS5sZW5ndGh8fGEubm9kZVR5cGUpP3RoaXM6dGhpcy5yZW1vdmUoKX0sZGV0YWNoOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnJlbW92ZShhLCEwKX0sZG9tTWFuaXA6ZnVuY3Rpb24oYSxiKXthPWUuYXBwbHkoW10sYSk7dmFyIGMsZCxmLGcsaCxpLGo9MCxsPXRoaXMubGVuZ3RoLG49dGhpcyxvPWwtMSxwPWFbMF0scT1tLmlzRnVuY3Rpb24ocCk7aWYocXx8bD4xJiYic3RyaW5nIj09dHlwZW9mIHAmJiFrLmNoZWNrQ2xvbmUmJm5hLnRlc3QocCkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihjKXt2YXIgZD1uLmVxKGMpO3EmJihhWzBdPXAuY2FsbCh0aGlzLGMsZC5odG1sKCkpKSxkLmRvbU1hbmlwKGEsYil9KTtpZihsJiYoaT1tLmJ1aWxkRnJhZ21lbnQoYSx0aGlzWzBdLm93bmVyRG9jdW1lbnQsITEsdGhpcyksYz1pLmZpcnN0Q2hpbGQsMT09PWkuY2hpbGROb2Rlcy5sZW5ndGgmJihpPWMpLGMpKXtmb3IoZz1tLm1hcCh1YShpLCJzY3JpcHQiKSx4YSksZj1nLmxlbmd0aDtsPmo7aisrKWQ9aSxqIT09byYmKGQ9bS5jbG9uZShkLCEwLCEwKSxmJiZtLm1lcmdlKGcsdWEoZCwic2NyaXB0IikpKSxiLmNhbGwodGhpc1tqXSxkLGopO2lmKGYpZm9yKGg9Z1tnLmxlbmd0aC0xXS5vd25lckRvY3VtZW50LG0ubWFwKGcseWEpLGo9MDtmPmo7aisrKWQ9Z1tqXSxvYS50ZXN0KGQudHlwZXx8IiIpJiYhbS5fZGF0YShkLCJnbG9iYWxFdmFsIikmJm0uY29udGFpbnMoaCxkKSYmKGQuc3JjP20uX2V2YWxVcmwmJm0uX2V2YWxVcmwoZC5zcmMpOm0uZ2xvYmFsRXZhbCgoZC50ZXh0fHxkLnRleHRDb250ZW50fHxkLmlubmVySFRNTHx8IiIpLnJlcGxhY2UocWEsIiIpKSk7aT1jPW51bGx9cmV0dXJuIHRoaXN9fSksbS5lYWNoKHthcHBlbmRUbzoiYXBwZW5kIixwcmVwZW5kVG86InByZXBlbmQiLGluc2VydEJlZm9yZToiYmVmb3JlIixpbnNlcnRBZnRlcjoiYWZ0ZXIiLHJlcGxhY2VBbGw6InJlcGxhY2VXaXRoIn0sZnVuY3Rpb24oYSxiKXttLmZuW2FdPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYyxkPTAsZT1bXSxnPW0oYSksaD1nLmxlbmd0aC0xO2g+PWQ7ZCsrKWM9ZD09PWg/dGhpczp0aGlzLmNsb25lKCEwKSxtKGdbZF0pW2JdKGMpLGYuYXBwbHkoZSxjLmdldCgpKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2soZSl9fSk7dmFyIENhLERhPXt9O2Z1bmN0aW9uIEVhKGIsYyl7dmFyIGQsZT1tKGMuY3JlYXRlRWxlbWVudChiKSkuYXBwZW5kVG8oYy5ib2R5KSxmPWEuZ2V0RGVmYXVsdENvbXB1dGVkU3R5bGUmJihkPWEuZ2V0RGVmYXVsdENvbXB1dGVkU3R5bGUoZVswXSkpP2QuZGlzcGxheTptLmNzcyhlWzBdLCJkaXNwbGF5Iik7cmV0dXJuIGUuZGV0YWNoKCksZn1mdW5jdGlvbiBGYShhKXt2YXIgYj15LGM9RGFbYV07cmV0dXJuIGN8fChjPUVhKGEsYiksIm5vbmUiIT09YyYmY3x8KENhPShDYXx8bSgiPGlmcmFtZSBmcmFtZWJvcmRlcj0nMCcgd2lkdGg9JzAnIGhlaWdodD0nMCcvPiIpKS5hcHBlbmRUbyhiLmRvY3VtZW50RWxlbWVudCksYj0oQ2FbMF0uY29udGVudFdpbmRvd3x8Q2FbMF0uY29udGVudERvY3VtZW50KS5kb2N1bWVudCxiLndyaXRlKCksYi5jbG9zZSgpLGM9RWEoYSxiKSxDYS5kZXRhY2goKSksRGFbYV09YyksY30hZnVuY3Rpb24oKXt2YXIgYTtrLnNocmlua1dyYXBCbG9ja3M9ZnVuY3Rpb24oKXtpZihudWxsIT1hKXJldHVybiBhO2E9ITE7dmFyIGIsYyxkO3JldHVybiBjPXkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXSxjJiZjLnN0eWxlPyhiPXkuY3JlYXRlRWxlbWVudCgiZGl2IiksZD15LmNyZWF0ZUVsZW1lbnQoImRpdiIpLGQuc3R5bGUuY3NzVGV4dD0icG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyOjA7d2lkdGg6MDtoZWlnaHQ6MDt0b3A6MDtsZWZ0Oi05OTk5cHgiLGMuYXBwZW5kQ2hpbGQoZCkuYXBwZW5kQ2hpbGQoYiksdHlwZW9mIGIuc3R5bGUuem9vbSE9PUsmJihiLnN0eWxlLmNzc1RleHQ9Ii13ZWJraXQtYm94LXNpemluZzpjb250ZW50LWJveDstbW96LWJveC1zaXppbmc6Y29udGVudC1ib3g7Ym94LXNpemluZzpjb250ZW50LWJveDtkaXNwbGF5OmJsb2NrO21hcmdpbjowO2JvcmRlcjowO3BhZGRpbmc6MXB4O3dpZHRoOjFweDt6b29tOjEiLGIuYXBwZW5kQ2hpbGQoeS5jcmVhdGVFbGVtZW50KCJkaXYiKSkuc3R5bGUud2lkdGg9IjVweCIsYT0zIT09Yi5vZmZzZXRXaWR0aCksYy5yZW1vdmVDaGlsZChkKSxhKTp2b2lkIDB9fSgpO3ZhciBHYT0vXm1hcmdpbi8sSGE9bmV3IFJlZ0V4cCgiXigiK1MrIikoPyFweClbYS16JV0rJCIsImkiKSxJYSxKYSxLYT0vXih0b3B8cmlnaHR8Ym90dG9tfGxlZnQpJC87YS5nZXRDb21wdXRlZFN0eWxlPyhJYT1mdW5jdGlvbihiKXtyZXR1cm4gYi5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3Lm9wZW5lcj9iLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShiLG51bGwpOmEuZ2V0Q29tcHV0ZWRTdHlsZShiLG51bGwpfSxKYT1mdW5jdGlvbihhLGIsYyl7dmFyIGQsZSxmLGcsaD1hLnN0eWxlO3JldHVybiBjPWN8fElhKGEpLGc9Yz9jLmdldFByb3BlcnR5VmFsdWUoYil8fGNbYl06dm9pZCAwLGMmJigiIiE9PWd8fG0uY29udGFpbnMoYS5vd25lckRvY3VtZW50LGEpfHwoZz1tLnN0eWxlKGEsYikpLEhhLnRlc3QoZykmJkdhLnRlc3QoYikmJihkPWgud2lkdGgsZT1oLm1pbldpZHRoLGY9aC5tYXhXaWR0aCxoLm1pbldpZHRoPWgubWF4V2lkdGg9aC53aWR0aD1nLGc9Yy53aWR0aCxoLndpZHRoPWQsaC5taW5XaWR0aD1lLGgubWF4V2lkdGg9ZikpLHZvaWQgMD09PWc/ZzpnKyIifSk6eS5kb2N1bWVudEVsZW1lbnQuY3VycmVudFN0eWxlJiYoSWE9ZnVuY3Rpb24oYSl7cmV0dXJuIGEuY3VycmVudFN0eWxlfSxKYT1mdW5jdGlvbihhLGIsYyl7dmFyIGQsZSxmLGcsaD1hLnN0eWxlO3JldHVybiBjPWN8fElhKGEpLGc9Yz9jW2JdOnZvaWQgMCxudWxsPT1nJiZoJiZoW2JdJiYoZz1oW2JdKSxIYS50ZXN0KGcpJiYhS2EudGVzdChiKSYmKGQ9aC5sZWZ0LGU9YS5ydW50aW1lU3R5bGUsZj1lJiZlLmxlZnQsZiYmKGUubGVmdD1hLmN1cnJlbnRTdHlsZS5sZWZ0KSxoLmxlZnQ9ImZvbnRTaXplIj09PWI/IjFlbSI6ZyxnPWgucGl4ZWxMZWZ0KyJweCIsaC5sZWZ0PWQsZiYmKGUubGVmdD1mKSksdm9pZCAwPT09Zz9nOmcrIiJ8fCJhdXRvIn0pO2Z1bmN0aW9uIExhKGEsYil7cmV0dXJue2dldDpmdW5jdGlvbigpe3ZhciBjPWEoKTtpZihudWxsIT1jKXJldHVybiBjP3ZvaWQgZGVsZXRlIHRoaXMuZ2V0Oih0aGlzLmdldD1iKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fX0hZnVuY3Rpb24oKXt2YXIgYixjLGQsZSxmLGcsaDtpZihiPXkuY3JlYXRlRWxlbWVudCgiZGl2IiksYi5pbm5lckhUTUw9IiAgPGxpbmsvPjx0YWJsZT48L3RhYmxlPjxhIGhyZWY9Jy9hJz5hPC9hPjxpbnB1dCB0eXBlPSdjaGVja2JveCcvPiIsZD1iLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJhIilbMF0sYz1kJiZkLnN0eWxlKXtjLmNzc1RleHQ9ImZsb2F0OmxlZnQ7b3BhY2l0eTouNSIsay5vcGFjaXR5PSIwLjUiPT09Yy5vcGFjaXR5LGsuY3NzRmxvYXQ9ISFjLmNzc0Zsb2F0LGIuc3R5bGUuYmFja2dyb3VuZENsaXA9ImNvbnRlbnQtYm94IixiLmNsb25lTm9kZSghMCkuc3R5bGUuYmFja2dyb3VuZENsaXA9IiIsay5jbGVhckNsb25lU3R5bGU9ImNvbnRlbnQtYm94Ij09PWIuc3R5bGUuYmFja2dyb3VuZENsaXAsay5ib3hTaXppbmc9IiI9PT1jLmJveFNpemluZ3x8IiI9PT1jLk1vekJveFNpemluZ3x8IiI9PT1jLldlYmtpdEJveFNpemluZyxtLmV4dGVuZChrLHtyZWxpYWJsZUhpZGRlbk9mZnNldHM6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09ZyYmaSgpLGd9LGJveFNpemluZ1JlbGlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PWYmJmkoKSxmfSxwaXhlbFBvc2l0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PWUmJmkoKSxlfSxyZWxpYWJsZU1hcmdpblJpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PWgmJmkoKSxofX0pO2Z1bmN0aW9uIGkoKXt2YXIgYixjLGQsaTtjPXkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXSxjJiZjLnN0eWxlJiYoYj15LmNyZWF0ZUVsZW1lbnQoImRpdiIpLGQ9eS5jcmVhdGVFbGVtZW50KCJkaXYiKSxkLnN0eWxlLmNzc1RleHQ9InBvc2l0aW9uOmFic29sdXRlO2JvcmRlcjowO3dpZHRoOjA7aGVpZ2h0OjA7dG9wOjA7bGVmdDotOTk5OXB4IixjLmFwcGVuZENoaWxkKGQpLmFwcGVuZENoaWxkKGIpLGIuc3R5bGUuY3NzVGV4dD0iLXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7LW1vei1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6YmxvY2s7bWFyZ2luLXRvcDoxJTt0b3A6MSU7Ym9yZGVyOjFweDtwYWRkaW5nOjFweDt3aWR0aDo0cHg7cG9zaXRpb246YWJzb2x1dGUiLGU9Zj0hMSxoPSEwLGEuZ2V0Q29tcHV0ZWRTdHlsZSYmKGU9IjElIiE9PShhLmdldENvbXB1dGVkU3R5bGUoYixudWxsKXx8e30pLnRvcCxmPSI0cHgiPT09KGEuZ2V0Q29tcHV0ZWRTdHlsZShiLG51bGwpfHx7d2lkdGg6IjRweCJ9KS53aWR0aCxpPWIuYXBwZW5kQ2hpbGQoeS5jcmVhdGVFbGVtZW50KCJkaXYiKSksaS5zdHlsZS5jc3NUZXh0PWIuc3R5bGUuY3NzVGV4dD0iLXdlYmtpdC1ib3gtc2l6aW5nOmNvbnRlbnQtYm94Oy1tb3otYm94LXNpemluZzpjb250ZW50LWJveDtib3gtc2l6aW5nOmNvbnRlbnQtYm94O2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjA7Ym9yZGVyOjA7cGFkZGluZzowIixpLnN0eWxlLm1hcmdpblJpZ2h0PWkuc3R5bGUud2lkdGg9IjAiLGIuc3R5bGUud2lkdGg9IjFweCIsaD0hcGFyc2VGbG9hdCgoYS5nZXRDb21wdXRlZFN0eWxlKGksbnVsbCl8fHt9KS5tYXJnaW5SaWdodCksYi5yZW1vdmVDaGlsZChpKSksYi5pbm5lckhUTUw9Ijx0YWJsZT48dHI+PHRkPjwvdGQ+PHRkPnQ8L3RkPjwvdHI+PC90YWJsZT4iLGk9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGQiKSxpWzBdLnN0eWxlLmNzc1RleHQ9Im1hcmdpbjowO2JvcmRlcjowO3BhZGRpbmc6MDtkaXNwbGF5Om5vbmUiLGc9MD09PWlbMF0ub2Zmc2V0SGVpZ2h0LGcmJihpWzBdLnN0eWxlLmRpc3BsYXk9IiIsaVsxXS5zdHlsZS5kaXNwbGF5PSJub25lIixnPTA9PT1pWzBdLm9mZnNldEhlaWdodCksYy5yZW1vdmVDaGlsZChkKSl9fX0oKSxtLnN3YXA9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGUsZixnPXt9O2ZvcihmIGluIGIpZ1tmXT1hLnN0eWxlW2ZdLGEuc3R5bGVbZl09YltmXTtlPWMuYXBwbHkoYSxkfHxbXSk7Zm9yKGYgaW4gYilhLnN0eWxlW2ZdPWdbZl07cmV0dXJuIGV9O3ZhciBNYT0vYWxwaGFcKFteKV0qXCkvaSxOYT0vb3BhY2l0eVxzKj1ccyooW14pXSopLyxPYT0vXihub25lfHRhYmxlKD8hLWNbZWFdKS4rKS8sUGE9bmV3IFJlZ0V4cCgiXigiK1MrIikoLiopJCIsImkiKSxRYT1uZXcgUmVnRXhwKCJeKFsrLV0pPSgiK1MrIikiLCJpIiksUmE9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdmlzaWJpbGl0eToiaGlkZGVuIixkaXNwbGF5OiJibG9jayJ9LFNhPXtsZXR0ZXJTcGFjaW5nOiIwIixmb250V2VpZ2h0OiI0MDAifSxUYT1bIldlYmtpdCIsIk8iLCJNb3oiLCJtcyJdO2Z1bmN0aW9uIFVhKGEsYil7aWYoYiBpbiBhKXJldHVybiBiO3ZhciBjPWIuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrYi5zbGljZSgxKSxkPWIsZT1UYS5sZW5ndGg7d2hpbGUoZS0tKWlmKGI9VGFbZV0rYyxiIGluIGEpcmV0dXJuIGI7cmV0dXJuIGR9ZnVuY3Rpb24gVmEoYSxiKXtmb3IodmFyIGMsZCxlLGY9W10sZz0wLGg9YS5sZW5ndGg7aD5nO2crKylkPWFbZ10sZC5zdHlsZSYmKGZbZ109bS5fZGF0YShkLCJvbGRkaXNwbGF5IiksYz1kLnN0eWxlLmRpc3BsYXksYj8oZltnXXx8Im5vbmUiIT09Y3x8KGQuc3R5bGUuZGlzcGxheT0iIiksIiI9PT1kLnN0eWxlLmRpc3BsYXkmJlUoZCkmJihmW2ddPW0uX2RhdGEoZCwib2xkZGlzcGxheSIsRmEoZC5ub2RlTmFtZSkpKSk6KGU9VShkKSwoYyYmIm5vbmUiIT09Y3x8IWUpJiZtLl9kYXRhKGQsIm9sZGRpc3BsYXkiLGU/YzptLmNzcyhkLCJkaXNwbGF5IikpKSk7Zm9yKGc9MDtoPmc7ZysrKWQ9YVtnXSxkLnN0eWxlJiYoYiYmIm5vbmUiIT09ZC5zdHlsZS5kaXNwbGF5JiYiIiE9PWQuc3R5bGUuZGlzcGxheXx8KGQuc3R5bGUuZGlzcGxheT1iP2ZbZ118fCIiOiJub25lIikpO3JldHVybiBhfWZ1bmN0aW9uIFdhKGEsYixjKXt2YXIgZD1QYS5leGVjKGIpO3JldHVybiBkP01hdGgubWF4KDAsZFsxXS0oY3x8MCkpKyhkWzJdfHwicHgiKTpifWZ1bmN0aW9uIFhhKGEsYixjLGQsZSl7Zm9yKHZhciBmPWM9PT0oZD8iYm9yZGVyIjoiY29udGVudCIpPzQ6IndpZHRoIj09PWI/MTowLGc9MDs0PmY7Zis9MikibWFyZ2luIj09PWMmJihnKz1tLmNzcyhhLGMrVFtmXSwhMCxlKSksZD8oImNvbnRlbnQiPT09YyYmKGctPW0uY3NzKGEsInBhZGRpbmciK1RbZl0sITAsZSkpLCJtYXJnaW4iIT09YyYmKGctPW0uY3NzKGEsImJvcmRlciIrVFtmXSsiV2lkdGgiLCEwLGUpKSk6KGcrPW0uY3NzKGEsInBhZGRpbmciK1RbZl0sITAsZSksInBhZGRpbmciIT09YyYmKGcrPW0uY3NzKGEsImJvcmRlciIrVFtmXSsiV2lkdGgiLCEwLGUpKSk7cmV0dXJuIGd9ZnVuY3Rpb24gWWEoYSxiLGMpe3ZhciBkPSEwLGU9IndpZHRoIj09PWI/YS5vZmZzZXRXaWR0aDphLm9mZnNldEhlaWdodCxmPUlhKGEpLGc9ay5ib3hTaXppbmcmJiJib3JkZXItYm94Ij09PW0uY3NzKGEsImJveFNpemluZyIsITEsZik7aWYoMD49ZXx8bnVsbD09ZSl7aWYoZT1KYShhLGIsZiksKDA+ZXx8bnVsbD09ZSkmJihlPWEuc3R5bGVbYl0pLEhhLnRlc3QoZSkpcmV0dXJuIGU7ZD1nJiYoay5ib3hTaXppbmdSZWxpYWJsZSgpfHxlPT09YS5zdHlsZVtiXSksZT1wYXJzZUZsb2F0KGUpfHwwfXJldHVybiBlK1hhKGEsYixjfHwoZz8iYm9yZGVyIjoiY29udGVudCIpLGQsZikrInB4In1tLmV4dGVuZCh7Y3NzSG9va3M6e29wYWNpdHk6e2dldDpmdW5jdGlvbihhLGIpe2lmKGIpe3ZhciBjPUphKGEsIm9wYWNpdHkiKTtyZXR1cm4iIj09PWM/IjEiOmN9fX19LGNzc051bWJlcjp7Y29sdW1uQ291bnQ6ITAsZmlsbE9wYWNpdHk6ITAsZmxleEdyb3c6ITAsZmxleFNocmluazohMCxmb250V2VpZ2h0OiEwLGxpbmVIZWlnaHQ6ITAsb3BhY2l0eTohMCxvcmRlcjohMCxvcnBoYW5zOiEwLHdpZG93czohMCx6SW5kZXg6ITAsem9vbTohMH0sY3NzUHJvcHM6eyJmbG9hdCI6ay5jc3NGbG9hdD8iY3NzRmxvYXQiOiJzdHlsZUZsb2F0In0sc3R5bGU6ZnVuY3Rpb24oYSxiLGMsZCl7aWYoYSYmMyE9PWEubm9kZVR5cGUmJjghPT1hLm5vZGVUeXBlJiZhLnN0eWxlKXt2YXIgZSxmLGcsaD1tLmNhbWVsQ2FzZShiKSxpPWEuc3R5bGU7aWYoYj1tLmNzc1Byb3BzW2hdfHwobS5jc3NQcm9wc1toXT1VYShpLGgpKSxnPW0uY3NzSG9va3NbYl18fG0uY3NzSG9va3NbaF0sdm9pZCAwPT09YylyZXR1cm4gZyYmImdldCJpbiBnJiZ2b2lkIDAhPT0oZT1nLmdldChhLCExLGQpKT9lOmlbYl07aWYoZj10eXBlb2YgYywic3RyaW5nIj09PWYmJihlPVFhLmV4ZWMoYykpJiYoYz0oZVsxXSsxKSplWzJdK3BhcnNlRmxvYXQobS5jc3MoYSxiKSksZj0ibnVtYmVyIiksbnVsbCE9YyYmYz09PWMmJigibnVtYmVyIiE9PWZ8fG0uY3NzTnVtYmVyW2hdfHwoYys9InB4Iiksay5jbGVhckNsb25lU3R5bGV8fCIiIT09Y3x8MCE9PWIuaW5kZXhPZigiYmFja2dyb3VuZCIpfHwoaVtiXT0iaW5oZXJpdCIpLCEoZyYmInNldCJpbiBnJiZ2b2lkIDA9PT0oYz1nLnNldChhLGMsZCkpKSkpdHJ5e2lbYl09Y31jYXRjaChqKXt9fX0sY3NzOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlLGYsZyxoPW0uY2FtZWxDYXNlKGIpO3JldHVybiBiPW0uY3NzUHJvcHNbaF18fChtLmNzc1Byb3BzW2hdPVVhKGEuc3R5bGUsaCkpLGc9bS5jc3NIb29rc1tiXXx8bS5jc3NIb29rc1toXSxnJiYiZ2V0ImluIGcmJihmPWcuZ2V0KGEsITAsYykpLHZvaWQgMD09PWYmJihmPUphKGEsYixkKSksIm5vcm1hbCI9PT1mJiZiIGluIFNhJiYoZj1TYVtiXSksIiI9PT1jfHxjPyhlPXBhcnNlRmxvYXQoZiksYz09PSEwfHxtLmlzTnVtZXJpYyhlKT9lfHwwOmYpOmZ9fSksbS5lYWNoKFsiaGVpZ2h0Iiwid2lkdGgiXSxmdW5jdGlvbihhLGIpe20uY3NzSG9va3NbYl09e2dldDpmdW5jdGlvbihhLGMsZCl7cmV0dXJuIGM/T2EudGVzdChtLmNzcyhhLCJkaXNwbGF5IikpJiYwPT09YS5vZmZzZXRXaWR0aD9tLnN3YXAoYSxSYSxmdW5jdGlvbigpe3JldHVybiBZYShhLGIsZCl9KTpZYShhLGIsZCk6dm9pZCAwfSxzZXQ6ZnVuY3Rpb24oYSxjLGQpe3ZhciBlPWQmJklhKGEpO3JldHVybiBXYShhLGMsZD9YYShhLGIsZCxrLmJveFNpemluZyYmImJvcmRlci1ib3giPT09bS5jc3MoYSwiYm94U2l6aW5nIiwhMSxlKSxlKTowKX19fSksay5vcGFjaXR5fHwobS5jc3NIb29rcy5vcGFjaXR5PXtnZXQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gTmEudGVzdCgoYiYmYS5jdXJyZW50U3R5bGU/YS5jdXJyZW50U3R5bGUuZmlsdGVyOmEuc3R5bGUuZmlsdGVyKXx8IiIpPy4wMSpwYXJzZUZsb2F0KFJlZ0V4cC4kMSkrIiI6Yj8iMSI6IiJ9LHNldDpmdW5jdGlvbihhLGIpe3ZhciBjPWEuc3R5bGUsZD1hLmN1cnJlbnRTdHlsZSxlPW0uaXNOdW1lcmljKGIpPyJhbHBoYShvcGFjaXR5PSIrMTAwKmIrIikiOiIiLGY9ZCYmZC5maWx0ZXJ8fGMuZmlsdGVyfHwiIjtjLnpvb209MSwoYj49MXx8IiI9PT1iKSYmIiI9PT1tLnRyaW0oZi5yZXBsYWNlKE1hLCIiKSkmJmMucmVtb3ZlQXR0cmlidXRlJiYoYy5yZW1vdmVBdHRyaWJ1dGUoImZpbHRlciIpLCIiPT09Ynx8ZCYmIWQuZmlsdGVyKXx8KGMuZmlsdGVyPU1hLnRlc3QoZik/Zi5yZXBsYWNlKE1hLGUpOmYrIiAiK2UpfX0pLG0uY3NzSG9va3MubWFyZ2luUmlnaHQ9TGEoay5yZWxpYWJsZU1hcmdpblJpZ2h0LGZ1bmN0aW9uKGEsYil7cmV0dXJuIGI/bS5zd2FwKGEse2Rpc3BsYXk6ImlubGluZS1ibG9jayJ9LEphLFthLCJtYXJnaW5SaWdodCJdKTp2b2lkIDB9KSxtLmVhY2goe21hcmdpbjoiIixwYWRkaW5nOiIiLGJvcmRlcjoiV2lkdGgifSxmdW5jdGlvbihhLGIpe20uY3NzSG9va3NbYStiXT17ZXhwYW5kOmZ1bmN0aW9uKGMpe2Zvcih2YXIgZD0wLGU9e30sZj0ic3RyaW5nIj09dHlwZW9mIGM/Yy5zcGxpdCgiICIpOltjXTs0PmQ7ZCsrKWVbYStUW2RdK2JdPWZbZF18fGZbZC0yXXx8ZlswXTtyZXR1cm4gZX19LEdhLnRlc3QoYSl8fChtLmNzc0hvb2tzW2ErYl0uc2V0PVdhKX0pLG0uZm4uZXh0ZW5kKHtjc3M6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gVih0aGlzLGZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGY9e30sZz0wO2lmKG0uaXNBcnJheShiKSl7Zm9yKGQ9SWEoYSksZT1iLmxlbmd0aDtlPmc7ZysrKWZbYltnXV09bS5jc3MoYSxiW2ddLCExLGQpO3JldHVybiBmfXJldHVybiB2b2lkIDAhPT1jP20uc3R5bGUoYSxiLGMpOm0uY3NzKGEsYil9LGEsYixhcmd1bWVudHMubGVuZ3RoPjEpfSxzaG93OmZ1bmN0aW9uKCl7cmV0dXJuIFZhKHRoaXMsITApfSxoaWRlOmZ1bmN0aW9uKCl7cmV0dXJuIFZhKHRoaXMpfSx0b2dnbGU6ZnVuY3Rpb24oYSl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgYT9hP3RoaXMuc2hvdygpOnRoaXMuaGlkZSgpOnRoaXMuZWFjaChmdW5jdGlvbigpe1UodGhpcyk/bSh0aGlzKS5zaG93KCk6bSh0aGlzKS5oaWRlKCl9KX19KTtmdW5jdGlvbiBaYShhLGIsYyxkLGUpewpyZXR1cm4gbmV3IFphLnByb3RvdHlwZS5pbml0KGEsYixjLGQsZSl9bS5Ud2Vlbj1aYSxaYS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlphLGluaXQ6ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe3RoaXMuZWxlbT1hLHRoaXMucHJvcD1jLHRoaXMuZWFzaW5nPWV8fCJzd2luZyIsdGhpcy5vcHRpb25zPWIsdGhpcy5zdGFydD10aGlzLm5vdz10aGlzLmN1cigpLHRoaXMuZW5kPWQsdGhpcy51bml0PWZ8fChtLmNzc051bWJlcltjXT8iIjoicHgiKX0sY3VyOmZ1bmN0aW9uKCl7dmFyIGE9WmEucHJvcEhvb2tzW3RoaXMucHJvcF07cmV0dXJuIGEmJmEuZ2V0P2EuZ2V0KHRoaXMpOlphLnByb3BIb29rcy5fZGVmYXVsdC5nZXQodGhpcyl9LHJ1bjpmdW5jdGlvbihhKXt2YXIgYixjPVphLnByb3BIb29rc1t0aGlzLnByb3BdO3JldHVybiB0aGlzLm9wdGlvbnMuZHVyYXRpb24/dGhpcy5wb3M9Yj1tLmVhc2luZ1t0aGlzLmVhc2luZ10oYSx0aGlzLm9wdGlvbnMuZHVyYXRpb24qYSwwLDEsdGhpcy5vcHRpb25zLmR1cmF0aW9uKTp0aGlzLnBvcz1iPWEsdGhpcy5ub3c9KHRoaXMuZW5kLXRoaXMuc3RhcnQpKmIrdGhpcy5zdGFydCx0aGlzLm9wdGlvbnMuc3RlcCYmdGhpcy5vcHRpb25zLnN0ZXAuY2FsbCh0aGlzLmVsZW0sdGhpcy5ub3csdGhpcyksYyYmYy5zZXQ/Yy5zZXQodGhpcyk6WmEucHJvcEhvb2tzLl9kZWZhdWx0LnNldCh0aGlzKSx0aGlzfX0sWmEucHJvdG90eXBlLmluaXQucHJvdG90eXBlPVphLnByb3RvdHlwZSxaYS5wcm9wSG9va3M9e19kZWZhdWx0OntnZXQ6ZnVuY3Rpb24oYSl7dmFyIGI7cmV0dXJuIG51bGw9PWEuZWxlbVthLnByb3BdfHxhLmVsZW0uc3R5bGUmJm51bGwhPWEuZWxlbS5zdHlsZVthLnByb3BdPyhiPW0uY3NzKGEuZWxlbSxhLnByb3AsIiIpLGImJiJhdXRvIiE9PWI/YjowKTphLmVsZW1bYS5wcm9wXX0sc2V0OmZ1bmN0aW9uKGEpe20uZnguc3RlcFthLnByb3BdP20uZnguc3RlcFthLnByb3BdKGEpOmEuZWxlbS5zdHlsZSYmKG51bGwhPWEuZWxlbS5zdHlsZVttLmNzc1Byb3BzW2EucHJvcF1dfHxtLmNzc0hvb2tzW2EucHJvcF0pP20uc3R5bGUoYS5lbGVtLGEucHJvcCxhLm5vdythLnVuaXQpOmEuZWxlbVthLnByb3BdPWEubm93fX19LFphLnByb3BIb29rcy5zY3JvbGxUb3A9WmEucHJvcEhvb2tzLnNjcm9sbExlZnQ9e3NldDpmdW5jdGlvbihhKXthLmVsZW0ubm9kZVR5cGUmJmEuZWxlbS5wYXJlbnROb2RlJiYoYS5lbGVtW2EucHJvcF09YS5ub3cpfX0sbS5lYXNpbmc9e2xpbmVhcjpmdW5jdGlvbihhKXtyZXR1cm4gYX0sc3dpbmc6ZnVuY3Rpb24oYSl7cmV0dXJuLjUtTWF0aC5jb3MoYSpNYXRoLlBJKS8yfX0sbS5meD1aYS5wcm90b3R5cGUuaW5pdCxtLmZ4LnN0ZXA9e307dmFyICRhLF9hLGFiPS9eKD86dG9nZ2xlfHNob3d8aGlkZSkkLyxiYj1uZXcgUmVnRXhwKCJeKD86KFsrLV0pPXwpKCIrUysiKShbYS16JV0qKSQiLCJpIiksY2I9L3F1ZXVlSG9va3MkLyxkYj1baWJdLGViPXsiKiI6W2Z1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5jcmVhdGVUd2VlbihhLGIpLGQ9Yy5jdXIoKSxlPWJiLmV4ZWMoYiksZj1lJiZlWzNdfHwobS5jc3NOdW1iZXJbYV0/IiI6InB4IiksZz0obS5jc3NOdW1iZXJbYV18fCJweCIhPT1mJiYrZCkmJmJiLmV4ZWMobS5jc3MoYy5lbGVtLGEpKSxoPTEsaT0yMDtpZihnJiZnWzNdIT09Zil7Zj1mfHxnWzNdLGU9ZXx8W10sZz0rZHx8MTtkbyBoPWh8fCIuNSIsZy89aCxtLnN0eWxlKGMuZWxlbSxhLGcrZik7d2hpbGUoaCE9PShoPWMuY3VyKCkvZCkmJjEhPT1oJiYtLWkpfXJldHVybiBlJiYoZz1jLnN0YXJ0PStnfHwrZHx8MCxjLnVuaXQ9ZixjLmVuZD1lWzFdP2crKGVbMV0rMSkqZVsyXTorZVsyXSksY31dfTtmdW5jdGlvbiBmYigpe3JldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7JGE9dm9pZCAwfSksJGE9bS5ub3coKX1mdW5jdGlvbiBnYihhLGIpe3ZhciBjLGQ9e2hlaWdodDphfSxlPTA7Zm9yKGI9Yj8xOjA7ND5lO2UrPTItYiljPVRbZV0sZFsibWFyZ2luIitjXT1kWyJwYWRkaW5nIitjXT1hO3JldHVybiBiJiYoZC5vcGFjaXR5PWQud2lkdGg9YSksZH1mdW5jdGlvbiBoYihhLGIsYyl7Zm9yKHZhciBkLGU9KGViW2JdfHxbXSkuY29uY2F0KGViWyIqIl0pLGY9MCxnPWUubGVuZ3RoO2c+ZjtmKyspaWYoZD1lW2ZdLmNhbGwoYyxiLGEpKXJldHVybiBkfWZ1bmN0aW9uIGliKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixsLG49dGhpcyxvPXt9LHA9YS5zdHlsZSxxPWEubm9kZVR5cGUmJlUoYSkscj1tLl9kYXRhKGEsImZ4c2hvdyIpO2MucXVldWV8fChoPW0uX3F1ZXVlSG9va3MoYSwiZngiKSxudWxsPT1oLnVucXVldWVkJiYoaC51bnF1ZXVlZD0wLGk9aC5lbXB0eS5maXJlLGguZW1wdHkuZmlyZT1mdW5jdGlvbigpe2gudW5xdWV1ZWR8fGkoKX0pLGgudW5xdWV1ZWQrKyxuLmFsd2F5cyhmdW5jdGlvbigpe24uYWx3YXlzKGZ1bmN0aW9uKCl7aC51bnF1ZXVlZC0tLG0ucXVldWUoYSwiZngiKS5sZW5ndGh8fGguZW1wdHkuZmlyZSgpfSl9KSksMT09PWEubm9kZVR5cGUmJigiaGVpZ2h0ImluIGJ8fCJ3aWR0aCJpbiBiKSYmKGMub3ZlcmZsb3c9W3Aub3ZlcmZsb3cscC5vdmVyZmxvd1gscC5vdmVyZmxvd1ldLGo9bS5jc3MoYSwiZGlzcGxheSIpLGw9Im5vbmUiPT09aj9tLl9kYXRhKGEsIm9sZGRpc3BsYXkiKXx8RmEoYS5ub2RlTmFtZSk6aiwiaW5saW5lIj09PWwmJiJub25lIj09PW0uY3NzKGEsImZsb2F0IikmJihrLmlubGluZUJsb2NrTmVlZHNMYXlvdXQmJiJpbmxpbmUiIT09RmEoYS5ub2RlTmFtZSk/cC56b29tPTE6cC5kaXNwbGF5PSJpbmxpbmUtYmxvY2siKSksYy5vdmVyZmxvdyYmKHAub3ZlcmZsb3c9ImhpZGRlbiIsay5zaHJpbmtXcmFwQmxvY2tzKCl8fG4uYWx3YXlzKGZ1bmN0aW9uKCl7cC5vdmVyZmxvdz1jLm92ZXJmbG93WzBdLHAub3ZlcmZsb3dYPWMub3ZlcmZsb3dbMV0scC5vdmVyZmxvd1k9Yy5vdmVyZmxvd1syXX0pKTtmb3IoZCBpbiBiKWlmKGU9YltkXSxhYi5leGVjKGUpKXtpZihkZWxldGUgYltkXSxmPWZ8fCJ0b2dnbGUiPT09ZSxlPT09KHE/ImhpZGUiOiJzaG93Iikpe2lmKCJzaG93IiE9PWV8fCFyfHx2b2lkIDA9PT1yW2RdKWNvbnRpbnVlO3E9ITB9b1tkXT1yJiZyW2RdfHxtLnN0eWxlKGEsZCl9ZWxzZSBqPXZvaWQgMDtpZihtLmlzRW1wdHlPYmplY3QobykpImlubGluZSI9PT0oIm5vbmUiPT09aj9GYShhLm5vZGVOYW1lKTpqKSYmKHAuZGlzcGxheT1qKTtlbHNle3I/ImhpZGRlbiJpbiByJiYocT1yLmhpZGRlbik6cj1tLl9kYXRhKGEsImZ4c2hvdyIse30pLGYmJihyLmhpZGRlbj0hcSkscT9tKGEpLnNob3coKTpuLmRvbmUoZnVuY3Rpb24oKXttKGEpLmhpZGUoKX0pLG4uZG9uZShmdW5jdGlvbigpe3ZhciBiO20uX3JlbW92ZURhdGEoYSwiZnhzaG93Iik7Zm9yKGIgaW4gbyltLnN0eWxlKGEsYixvW2JdKX0pO2ZvcihkIGluIG8pZz1oYihxP3JbZF06MCxkLG4pLGQgaW4gcnx8KHJbZF09Zy5zdGFydCxxJiYoZy5lbmQ9Zy5zdGFydCxnLnN0YXJ0PSJ3aWR0aCI9PT1kfHwiaGVpZ2h0Ij09PWQ/MTowKSl9fWZ1bmN0aW9uIGpiKGEsYil7dmFyIGMsZCxlLGYsZztmb3IoYyBpbiBhKWlmKGQ9bS5jYW1lbENhc2UoYyksZT1iW2RdLGY9YVtjXSxtLmlzQXJyYXkoZikmJihlPWZbMV0sZj1hW2NdPWZbMF0pLGMhPT1kJiYoYVtkXT1mLGRlbGV0ZSBhW2NdKSxnPW0uY3NzSG9va3NbZF0sZyYmImV4cGFuZCJpbiBnKXtmPWcuZXhwYW5kKGYpLGRlbGV0ZSBhW2RdO2ZvcihjIGluIGYpYyBpbiBhfHwoYVtjXT1mW2NdLGJbY109ZSl9ZWxzZSBiW2RdPWV9ZnVuY3Rpb24ga2IoYSxiLGMpe3ZhciBkLGUsZj0wLGc9ZGIubGVuZ3RoLGg9bS5EZWZlcnJlZCgpLmFsd2F5cyhmdW5jdGlvbigpe2RlbGV0ZSBpLmVsZW19KSxpPWZ1bmN0aW9uKCl7aWYoZSlyZXR1cm4hMTtmb3IodmFyIGI9JGF8fGZiKCksYz1NYXRoLm1heCgwLGouc3RhcnRUaW1lK2ouZHVyYXRpb24tYiksZD1jL2ouZHVyYXRpb258fDAsZj0xLWQsZz0wLGk9ai50d2VlbnMubGVuZ3RoO2k+ZztnKyspai50d2VlbnNbZ10ucnVuKGYpO3JldHVybiBoLm5vdGlmeVdpdGgoYSxbaixmLGNdKSwxPmYmJmk/YzooaC5yZXNvbHZlV2l0aChhLFtqXSksITEpfSxqPWgucHJvbWlzZSh7ZWxlbTphLHByb3BzOm0uZXh0ZW5kKHt9LGIpLG9wdHM6bS5leHRlbmQoITAse3NwZWNpYWxFYXNpbmc6e319LGMpLG9yaWdpbmFsUHJvcGVydGllczpiLG9yaWdpbmFsT3B0aW9uczpjLHN0YXJ0VGltZTokYXx8ZmIoKSxkdXJhdGlvbjpjLmR1cmF0aW9uLHR3ZWVuczpbXSxjcmVhdGVUd2VlbjpmdW5jdGlvbihiLGMpe3ZhciBkPW0uVHdlZW4oYSxqLm9wdHMsYixjLGoub3B0cy5zcGVjaWFsRWFzaW5nW2JdfHxqLm9wdHMuZWFzaW5nKTtyZXR1cm4gai50d2VlbnMucHVzaChkKSxkfSxzdG9wOmZ1bmN0aW9uKGIpe3ZhciBjPTAsZD1iP2oudHdlZW5zLmxlbmd0aDowO2lmKGUpcmV0dXJuIHRoaXM7Zm9yKGU9ITA7ZD5jO2MrKylqLnR3ZWVuc1tjXS5ydW4oMSk7cmV0dXJuIGI/aC5yZXNvbHZlV2l0aChhLFtqLGJdKTpoLnJlamVjdFdpdGgoYSxbaixiXSksdGhpc319KSxrPWoucHJvcHM7Zm9yKGpiKGssai5vcHRzLnNwZWNpYWxFYXNpbmcpO2c+ZjtmKyspaWYoZD1kYltmXS5jYWxsKGosYSxrLGoub3B0cykpcmV0dXJuIGQ7cmV0dXJuIG0ubWFwKGssaGIsaiksbS5pc0Z1bmN0aW9uKGoub3B0cy5zdGFydCkmJmoub3B0cy5zdGFydC5jYWxsKGEsaiksbS5meC50aW1lcihtLmV4dGVuZChpLHtlbGVtOmEsYW5pbTpqLHF1ZXVlOmoub3B0cy5xdWV1ZX0pKSxqLnByb2dyZXNzKGoub3B0cy5wcm9ncmVzcykuZG9uZShqLm9wdHMuZG9uZSxqLm9wdHMuY29tcGxldGUpLmZhaWwoai5vcHRzLmZhaWwpLmFsd2F5cyhqLm9wdHMuYWx3YXlzKX1tLkFuaW1hdGlvbj1tLmV4dGVuZChrYix7dHdlZW5lcjpmdW5jdGlvbihhLGIpe20uaXNGdW5jdGlvbihhKT8oYj1hLGE9WyIqIl0pOmE9YS5zcGxpdCgiICIpO2Zvcih2YXIgYyxkPTAsZT1hLmxlbmd0aDtlPmQ7ZCsrKWM9YVtkXSxlYltjXT1lYltjXXx8W10sZWJbY10udW5zaGlmdChiKX0scHJlZmlsdGVyOmZ1bmN0aW9uKGEsYil7Yj9kYi51bnNoaWZ0KGEpOmRiLnB1c2goYSl9fSksbS5zcGVlZD1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9YSYmIm9iamVjdCI9PXR5cGVvZiBhP20uZXh0ZW5kKHt9LGEpOntjb21wbGV0ZTpjfHwhYyYmYnx8bS5pc0Z1bmN0aW9uKGEpJiZhLGR1cmF0aW9uOmEsZWFzaW5nOmMmJmJ8fGImJiFtLmlzRnVuY3Rpb24oYikmJmJ9O3JldHVybiBkLmR1cmF0aW9uPW0uZngub2ZmPzA6Im51bWJlciI9PXR5cGVvZiBkLmR1cmF0aW9uP2QuZHVyYXRpb246ZC5kdXJhdGlvbiBpbiBtLmZ4LnNwZWVkcz9tLmZ4LnNwZWVkc1tkLmR1cmF0aW9uXTptLmZ4LnNwZWVkcy5fZGVmYXVsdCwobnVsbD09ZC5xdWV1ZXx8ZC5xdWV1ZT09PSEwKSYmKGQucXVldWU9ImZ4IiksZC5vbGQ9ZC5jb21wbGV0ZSxkLmNvbXBsZXRlPWZ1bmN0aW9uKCl7bS5pc0Z1bmN0aW9uKGQub2xkKSYmZC5vbGQuY2FsbCh0aGlzKSxkLnF1ZXVlJiZtLmRlcXVldWUodGhpcyxkLnF1ZXVlKX0sZH0sbS5mbi5leHRlbmQoe2ZhZGVUbzpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gdGhpcy5maWx0ZXIoVSkuY3NzKCJvcGFjaXR5IiwwKS5zaG93KCkuZW5kKCkuYW5pbWF0ZSh7b3BhY2l0eTpifSxhLGMsZCl9LGFuaW1hdGU6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9bS5pc0VtcHR5T2JqZWN0KGEpLGY9bS5zcGVlZChiLGMsZCksZz1mdW5jdGlvbigpe3ZhciBiPWtiKHRoaXMsbS5leHRlbmQoe30sYSksZik7KGV8fG0uX2RhdGEodGhpcywiZmluaXNoIikpJiZiLnN0b3AoITApfTtyZXR1cm4gZy5maW5pc2g9ZyxlfHxmLnF1ZXVlPT09ITE/dGhpcy5lYWNoKGcpOnRoaXMucXVldWUoZi5xdWV1ZSxnKX0sc3RvcDpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9ZnVuY3Rpb24oYSl7dmFyIGI9YS5zdG9wO2RlbGV0ZSBhLnN0b3AsYihjKX07cmV0dXJuInN0cmluZyIhPXR5cGVvZiBhJiYoYz1iLGI9YSxhPXZvaWQgMCksYiYmYSE9PSExJiZ0aGlzLnF1ZXVlKGF8fCJmeCIsW10pLHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBiPSEwLGU9bnVsbCE9YSYmYSsicXVldWVIb29rcyIsZj1tLnRpbWVycyxnPW0uX2RhdGEodGhpcyk7aWYoZSlnW2VdJiZnW2VdLnN0b3AmJmQoZ1tlXSk7ZWxzZSBmb3IoZSBpbiBnKWdbZV0mJmdbZV0uc3RvcCYmY2IudGVzdChlKSYmZChnW2VdKTtmb3IoZT1mLmxlbmd0aDtlLS07KWZbZV0uZWxlbSE9PXRoaXN8fG51bGwhPWEmJmZbZV0ucXVldWUhPT1hfHwoZltlXS5hbmltLnN0b3AoYyksYj0hMSxmLnNwbGljZShlLDEpKTsoYnx8IWMpJiZtLmRlcXVldWUodGhpcyxhKX0pfSxmaW5pc2g6ZnVuY3Rpb24oYSl7cmV0dXJuIGEhPT0hMSYmKGE9YXx8ImZ4IiksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGIsYz1tLl9kYXRhKHRoaXMpLGQ9Y1thKyJxdWV1ZSJdLGU9Y1thKyJxdWV1ZUhvb2tzIl0sZj1tLnRpbWVycyxnPWQ/ZC5sZW5ndGg6MDtmb3IoYy5maW5pc2g9ITAsbS5xdWV1ZSh0aGlzLGEsW10pLGUmJmUuc3RvcCYmZS5zdG9wLmNhbGwodGhpcywhMCksYj1mLmxlbmd0aDtiLS07KWZbYl0uZWxlbT09PXRoaXMmJmZbYl0ucXVldWU9PT1hJiYoZltiXS5hbmltLnN0b3AoITApLGYuc3BsaWNlKGIsMSkpO2ZvcihiPTA7Zz5iO2IrKylkW2JdJiZkW2JdLmZpbmlzaCYmZFtiXS5maW5pc2guY2FsbCh0aGlzKTtkZWxldGUgYy5maW5pc2h9KX19KSxtLmVhY2goWyJ0b2dnbGUiLCJzaG93IiwiaGlkZSJdLGZ1bmN0aW9uKGEsYil7dmFyIGM9bS5mbltiXTttLmZuW2JdPWZ1bmN0aW9uKGEsZCxlKXtyZXR1cm4gbnVsbD09YXx8ImJvb2xlYW4iPT10eXBlb2YgYT9jLmFwcGx5KHRoaXMsYXJndW1lbnRzKTp0aGlzLmFuaW1hdGUoZ2IoYiwhMCksYSxkLGUpfX0pLG0uZWFjaCh7c2xpZGVEb3duOmdiKCJzaG93Iiksc2xpZGVVcDpnYigiaGlkZSIpLHNsaWRlVG9nZ2xlOmdiKCJ0b2dnbGUiKSxmYWRlSW46e29wYWNpdHk6InNob3cifSxmYWRlT3V0OntvcGFjaXR5OiJoaWRlIn0sZmFkZVRvZ2dsZTp7b3BhY2l0eToidG9nZ2xlIn19LGZ1bmN0aW9uKGEsYil7bS5mblthXT1mdW5jdGlvbihhLGMsZCl7cmV0dXJuIHRoaXMuYW5pbWF0ZShiLGEsYyxkKX19KSxtLnRpbWVycz1bXSxtLmZ4LnRpY2s9ZnVuY3Rpb24oKXt2YXIgYSxiPW0udGltZXJzLGM9MDtmb3IoJGE9bS5ub3coKTtjPGIubGVuZ3RoO2MrKylhPWJbY10sYSgpfHxiW2NdIT09YXx8Yi5zcGxpY2UoYy0tLDEpO2IubGVuZ3RofHxtLmZ4LnN0b3AoKSwkYT12b2lkIDB9LG0uZngudGltZXI9ZnVuY3Rpb24oYSl7bS50aW1lcnMucHVzaChhKSxhKCk/bS5meC5zdGFydCgpOm0udGltZXJzLnBvcCgpfSxtLmZ4LmludGVydmFsPTEzLG0uZnguc3RhcnQ9ZnVuY3Rpb24oKXtfYXx8KF9hPXNldEludGVydmFsKG0uZngudGljayxtLmZ4LmludGVydmFsKSl9LG0uZnguc3RvcD1mdW5jdGlvbigpe2NsZWFySW50ZXJ2YWwoX2EpLF9hPW51bGx9LG0uZnguc3BlZWRzPXtzbG93OjYwMCxmYXN0OjIwMCxfZGVmYXVsdDo0MDB9LG0uZm4uZGVsYXk9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYT1tLmZ4P20uZnguc3BlZWRzW2FdfHxhOmEsYj1ifHwiZngiLHRoaXMucXVldWUoYixmdW5jdGlvbihiLGMpe3ZhciBkPXNldFRpbWVvdXQoYixhKTtjLnN0b3A9ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQoZCl9fSl9LGZ1bmN0aW9uKCl7dmFyIGEsYixjLGQsZTtiPXkuY3JlYXRlRWxlbWVudCgiZGl2IiksYi5zZXRBdHRyaWJ1dGUoImNsYXNzTmFtZSIsInQiKSxiLmlubmVySFRNTD0iICA8bGluay8+PHRhYmxlPjwvdGFibGU+PGEgaHJlZj0nL2EnPmE8L2E+PGlucHV0IHR5cGU9J2NoZWNrYm94Jy8+IixkPWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImEiKVswXSxjPXkuY3JlYXRlRWxlbWVudCgic2VsZWN0IiksZT1jLmFwcGVuZENoaWxkKHkuY3JlYXRlRWxlbWVudCgib3B0aW9uIikpLGE9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKVswXSxkLnN0eWxlLmNzc1RleHQ9InRvcDoxcHgiLGsuZ2V0U2V0QXR0cmlidXRlPSJ0IiE9PWIuY2xhc3NOYW1lLGsuc3R5bGU9L3RvcC8udGVzdChkLmdldEF0dHJpYnV0ZSgic3R5bGUiKSksay5ocmVmTm9ybWFsaXplZD0iL2EiPT09ZC5nZXRBdHRyaWJ1dGUoImhyZWYiKSxrLmNoZWNrT249ISFhLnZhbHVlLGsub3B0U2VsZWN0ZWQ9ZS5zZWxlY3RlZCxrLmVuY3R5cGU9ISF5LmNyZWF0ZUVsZW1lbnQoImZvcm0iKS5lbmN0eXBlLGMuZGlzYWJsZWQ9ITAsay5vcHREaXNhYmxlZD0hZS5kaXNhYmxlZCxhPXkuY3JlYXRlRWxlbWVudCgiaW5wdXQiKSxhLnNldEF0dHJpYnV0ZSgidmFsdWUiLCIiKSxrLmlucHV0PSIiPT09YS5nZXRBdHRyaWJ1dGUoInZhbHVlIiksYS52YWx1ZT0idCIsYS5zZXRBdHRyaWJ1dGUoInR5cGUiLCJyYWRpbyIpLGsucmFkaW9WYWx1ZT0idCI9PT1hLnZhbHVlfSgpO3ZhciBsYj0vXHIvZzttLmZuLmV4dGVuZCh7dmFsOmZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlPXRoaXNbMF07e2lmKGFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGQ9bS5pc0Z1bmN0aW9uKGEpLHRoaXMuZWFjaChmdW5jdGlvbihjKXt2YXIgZTsxPT09dGhpcy5ub2RlVHlwZSYmKGU9ZD9hLmNhbGwodGhpcyxjLG0odGhpcykudmFsKCkpOmEsbnVsbD09ZT9lPSIiOiJudW1iZXIiPT10eXBlb2YgZT9lKz0iIjptLmlzQXJyYXkoZSkmJihlPW0ubWFwKGUsZnVuY3Rpb24oYSl7cmV0dXJuIG51bGw9PWE/IiI6YSsiIn0pKSxiPW0udmFsSG9va3NbdGhpcy50eXBlXXx8bS52YWxIb29rc1t0aGlzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldLGImJiJzZXQiaW4gYiYmdm9pZCAwIT09Yi5zZXQodGhpcyxlLCJ2YWx1ZSIpfHwodGhpcy52YWx1ZT1lKSl9KTtpZihlKXJldHVybiBiPW0udmFsSG9va3NbZS50eXBlXXx8bS52YWxIb29rc1tlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldLGImJiJnZXQiaW4gYiYmdm9pZCAwIT09KGM9Yi5nZXQoZSwidmFsdWUiKSk/YzooYz1lLnZhbHVlLCJzdHJpbmciPT10eXBlb2YgYz9jLnJlcGxhY2UobGIsIiIpOm51bGw9PWM/IiI6Yyl9fX0pLG0uZXh0ZW5kKHt2YWxIb29rczp7b3B0aW9uOntnZXQ6ZnVuY3Rpb24oYSl7dmFyIGI9bS5maW5kLmF0dHIoYSwidmFsdWUiKTtyZXR1cm4gbnVsbCE9Yj9iOm0udHJpbShtLnRleHQoYSkpfX0sc2VsZWN0OntnZXQ6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiLGMsZD1hLm9wdGlvbnMsZT1hLnNlbGVjdGVkSW5kZXgsZj0ic2VsZWN0LW9uZSI9PT1hLnR5cGV8fDA+ZSxnPWY/bnVsbDpbXSxoPWY/ZSsxOmQubGVuZ3RoLGk9MD5lP2g6Zj9lOjA7aD5pO2krKylpZihjPWRbaV0sISghYy5zZWxlY3RlZCYmaSE9PWV8fChrLm9wdERpc2FibGVkP2MuZGlzYWJsZWQ6bnVsbCE9PWMuZ2V0QXR0cmlidXRlKCJkaXNhYmxlZCIpKXx8Yy5wYXJlbnROb2RlLmRpc2FibGVkJiZtLm5vZGVOYW1lKGMucGFyZW50Tm9kZSwib3B0Z3JvdXAiKSkpe2lmKGI9bShjKS52YWwoKSxmKXJldHVybiBiO2cucHVzaChiKX1yZXR1cm4gZ30sc2V0OmZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlPWEub3B0aW9ucyxmPW0ubWFrZUFycmF5KGIpLGc9ZS5sZW5ndGg7d2hpbGUoZy0tKWlmKGQ9ZVtnXSxtLmluQXJyYXkobS52YWxIb29rcy5vcHRpb24uZ2V0KGQpLGYpPj0wKXRyeXtkLnNlbGVjdGVkPWM9ITB9Y2F0Y2goaCl7ZC5zY3JvbGxIZWlnaHR9ZWxzZSBkLnNlbGVjdGVkPSExO3JldHVybiBjfHwoYS5zZWxlY3RlZEluZGV4PS0xKSxlfX19fSksbS5lYWNoKFsicmFkaW8iLCJjaGVja2JveCJdLGZ1bmN0aW9uKCl7bS52YWxIb29rc1t0aGlzXT17c2V0OmZ1bmN0aW9uKGEsYil7cmV0dXJuIG0uaXNBcnJheShiKT9hLmNoZWNrZWQ9bS5pbkFycmF5KG0oYSkudmFsKCksYik+PTA6dm9pZCAwfX0say5jaGVja09ufHwobS52YWxIb29rc1t0aGlzXS5nZXQ9ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGw9PT1hLmdldEF0dHJpYnV0ZSgidmFsdWUiKT8ib24iOmEudmFsdWV9KX0pO3ZhciBtYixuYixvYj1tLmV4cHIuYXR0ckhhbmRsZSxwYj0vXig/OmNoZWNrZWR8c2VsZWN0ZWQpJC9pLHFiPWsuZ2V0U2V0QXR0cmlidXRlLHJiPWsuaW5wdXQ7bS5mbi5leHRlbmQoe2F0dHI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gVih0aGlzLG0uYXR0cixhLGIsYXJndW1lbnRzLmxlbmd0aD4xKX0scmVtb3ZlQXR0cjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7bS5yZW1vdmVBdHRyKHRoaXMsYSl9KX19KSxtLmV4dGVuZCh7YXR0cjpmdW5jdGlvbihhLGIsYyl7dmFyIGQsZSxmPWEubm9kZVR5cGU7aWYoYSYmMyE9PWYmJjghPT1mJiYyIT09ZilyZXR1cm4gdHlwZW9mIGEuZ2V0QXR0cmlidXRlPT09Sz9tLnByb3AoYSxiLGMpOigxPT09ZiYmbS5pc1hNTERvYyhhKXx8KGI9Yi50b0xvd2VyQ2FzZSgpLGQ9bS5hdHRySG9va3NbYl18fChtLmV4cHIubWF0Y2guYm9vbC50ZXN0KGIpP25iOm1iKSksdm9pZCAwPT09Yz9kJiYiZ2V0ImluIGQmJm51bGwhPT0oZT1kLmdldChhLGIpKT9lOihlPW0uZmluZC5hdHRyKGEsYiksbnVsbD09ZT92b2lkIDA6ZSk6bnVsbCE9PWM/ZCYmInNldCJpbiBkJiZ2b2lkIDAhPT0oZT1kLnNldChhLGMsYikpP2U6KGEuc2V0QXR0cmlidXRlKGIsYysiIiksYyk6dm9pZCBtLnJlbW92ZUF0dHIoYSxiKSl9LHJlbW92ZUF0dHI6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGU9MCxmPWImJmIubWF0Y2goRSk7aWYoZiYmMT09PWEubm9kZVR5cGUpd2hpbGUoYz1mW2UrK10pZD1tLnByb3BGaXhbY118fGMsbS5leHByLm1hdGNoLmJvb2wudGVzdChjKT9yYiYmcWJ8fCFwYi50ZXN0KGMpP2FbZF09ITE6YVttLmNhbWVsQ2FzZSgiZGVmYXVsdC0iK2MpXT1hW2RdPSExOm0uYXR0cihhLGMsIiIpLGEucmVtb3ZlQXR0cmlidXRlKHFiP2M6ZCl9LGF0dHJIb29rczp7dHlwZTp7c2V0OmZ1bmN0aW9uKGEsYil7aWYoIWsucmFkaW9WYWx1ZSYmInJhZGlvIj09PWImJm0ubm9kZU5hbWUoYSwiaW5wdXQiKSl7dmFyIGM9YS52YWx1ZTtyZXR1cm4gYS5zZXRBdHRyaWJ1dGUoInR5cGUiLGIpLGMmJihhLnZhbHVlPWMpLGJ9fX19fSksbmI9e3NldDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGI9PT0hMT9tLnJlbW92ZUF0dHIoYSxjKTpyYiYmcWJ8fCFwYi50ZXN0KGMpP2Euc2V0QXR0cmlidXRlKCFxYiYmbS5wcm9wRml4W2NdfHxjLGMpOmFbbS5jYW1lbENhc2UoImRlZmF1bHQtIitjKV09YVtjXT0hMCxjfX0sbS5lYWNoKG0uZXhwci5tYXRjaC5ib29sLnNvdXJjZS5tYXRjaCgvXHcrL2cpLGZ1bmN0aW9uKGEsYil7dmFyIGM9b2JbYl18fG0uZmluZC5hdHRyO29iW2JdPXJiJiZxYnx8IXBiLnRlc3QoYik/ZnVuY3Rpb24oYSxiLGQpe3ZhciBlLGY7cmV0dXJuIGR8fChmPW9iW2JdLG9iW2JdPWUsZT1udWxsIT1jKGEsYixkKT9iLnRvTG93ZXJDYXNlKCk6bnVsbCxvYltiXT1mKSxlfTpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGM/dm9pZCAwOmFbbS5jYW1lbENhc2UoImRlZmF1bHQtIitiKV0/Yi50b0xvd2VyQ2FzZSgpOm51bGx9fSkscmImJnFifHwobS5hdHRySG9va3MudmFsdWU9e3NldDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIG0ubm9kZU5hbWUoYSwiaW5wdXQiKT92b2lkKGEuZGVmYXVsdFZhbHVlPWIpOm1iJiZtYi5zZXQoYSxiLGMpfX0pLHFifHwobWI9e3NldDpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9YS5nZXRBdHRyaWJ1dGVOb2RlKGMpO3JldHVybiBkfHxhLnNldEF0dHJpYnV0ZU5vZGUoZD1hLm93bmVyRG9jdW1lbnQuY3JlYXRlQXR0cmlidXRlKGMpKSxkLnZhbHVlPWIrPSIiLCJ2YWx1ZSI9PT1jfHxiPT09YS5nZXRBdHRyaWJ1dGUoYyk/Yjp2b2lkIDB9fSxvYi5pZD1vYi5uYW1lPW9iLmNvb3Jkcz1mdW5jdGlvbihhLGIsYyl7dmFyIGQ7cmV0dXJuIGM/dm9pZCAwOihkPWEuZ2V0QXR0cmlidXRlTm9kZShiKSkmJiIiIT09ZC52YWx1ZT9kLnZhbHVlOm51bGx9LG0udmFsSG9va3MuYnV0dG9uPXtnZXQ6ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLmdldEF0dHJpYnV0ZU5vZGUoYik7cmV0dXJuIGMmJmMuc3BlY2lmaWVkP2MudmFsdWU6dm9pZCAwfSxzZXQ6bWIuc2V0fSxtLmF0dHJIb29rcy5jb250ZW50ZWRpdGFibGU9e3NldDpmdW5jdGlvbihhLGIsYyl7bWIuc2V0KGEsIiI9PT1iPyExOmIsYyl9fSxtLmVhY2goWyJ3aWR0aCIsImhlaWdodCJdLGZ1bmN0aW9uKGEsYil7bS5hdHRySG9va3NbYl09e3NldDpmdW5jdGlvbihhLGMpe3JldHVybiIiPT09Yz8oYS5zZXRBdHRyaWJ1dGUoYiwiYXV0byIpLGMpOnZvaWQgMH19fSkpLGsuc3R5bGV8fChtLmF0dHJIb29rcy5zdHlsZT17Z2V0OmZ1bmN0aW9uKGEpe3JldHVybiBhLnN0eWxlLmNzc1RleHR8fHZvaWQgMH0sc2V0OmZ1bmN0aW9uKGEsYil7cmV0dXJuIGEuc3R5bGUuY3NzVGV4dD1iKyIifX0pO3ZhciBzYj0vXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b258b2JqZWN0KSQvaSx0Yj0vXig/OmF8YXJlYSkkL2k7bS5mbi5leHRlbmQoe3Byb3A6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gVih0aGlzLG0ucHJvcCxhLGIsYXJndW1lbnRzLmxlbmd0aD4xKX0scmVtb3ZlUHJvcDpmdW5jdGlvbihhKXtyZXR1cm4gYT1tLnByb3BGaXhbYV18fGEsdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dHJ5e3RoaXNbYV09dm9pZCAwLGRlbGV0ZSB0aGlzW2FdfWNhdGNoKGIpe319KX19KSxtLmV4dGVuZCh7cHJvcEZpeDp7ImZvciI6Imh0bWxGb3IiLCJjbGFzcyI6ImNsYXNzTmFtZSJ9LHByb3A6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGUsZixnPWEubm9kZVR5cGU7aWYoYSYmMyE9PWcmJjghPT1nJiYyIT09ZylyZXR1cm4gZj0xIT09Z3x8IW0uaXNYTUxEb2MoYSksZiYmKGI9bS5wcm9wRml4W2JdfHxiLGU9bS5wcm9wSG9va3NbYl0pLHZvaWQgMCE9PWM/ZSYmInNldCJpbiBlJiZ2b2lkIDAhPT0oZD1lLnNldChhLGMsYikpP2Q6YVtiXT1jOmUmJiJnZXQiaW4gZSYmbnVsbCE9PShkPWUuZ2V0KGEsYikpP2Q6YVtiXX0scHJvcEhvb2tzOnt0YWJJbmRleDp7Z2V0OmZ1bmN0aW9uKGEpe3ZhciBiPW0uZmluZC5hdHRyKGEsInRhYmluZGV4Iik7cmV0dXJuIGI/cGFyc2VJbnQoYiwxMCk6c2IudGVzdChhLm5vZGVOYW1lKXx8dGIudGVzdChhLm5vZGVOYW1lKSYmYS5ocmVmPzA6LTF9fX19KSxrLmhyZWZOb3JtYWxpemVkfHxtLmVhY2goWyJocmVmIiwic3JjIl0sZnVuY3Rpb24oYSxiKXttLnByb3BIb29rc1tiXT17Z2V0OmZ1bmN0aW9uKGEpe3JldHVybiBhLmdldEF0dHJpYnV0ZShiLDQpfX19KSxrLm9wdFNlbGVjdGVkfHwobS5wcm9wSG9va3Muc2VsZWN0ZWQ9e2dldDpmdW5jdGlvbihhKXt2YXIgYj1hLnBhcmVudE5vZGU7cmV0dXJuIGImJihiLnNlbGVjdGVkSW5kZXgsYi5wYXJlbnROb2RlJiZiLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCksbnVsbH19KSxtLmVhY2goWyJ0YWJJbmRleCIsInJlYWRPbmx5IiwibWF4TGVuZ3RoIiwiY2VsbFNwYWNpbmciLCJjZWxsUGFkZGluZyIsInJvd1NwYW4iLCJjb2xTcGFuIiwidXNlTWFwIiwiZnJhbWVCb3JkZXIiLCJjb250ZW50RWRpdGFibGUiXSxmdW5jdGlvbigpe20ucHJvcEZpeFt0aGlzLnRvTG93ZXJDYXNlKCldPXRoaXN9KSxrLmVuY3R5cGV8fChtLnByb3BGaXguZW5jdHlwZT0iZW5jb2RpbmciKTt2YXIgdWI9L1tcdFxyXG5cZl0vZzttLmZuLmV4dGVuZCh7YWRkQ2xhc3M6ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGUsZixnLGg9MCxpPXRoaXMubGVuZ3RoLGo9InN0cmluZyI9PXR5cGVvZiBhJiZhO2lmKG0uaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe20odGhpcykuYWRkQ2xhc3MoYS5jYWxsKHRoaXMsYix0aGlzLmNsYXNzTmFtZSkpfSk7aWYoailmb3IoYj0oYXx8IiIpLm1hdGNoKEUpfHxbXTtpPmg7aCsrKWlmKGM9dGhpc1toXSxkPTE9PT1jLm5vZGVUeXBlJiYoYy5jbGFzc05hbWU/KCIgIitjLmNsYXNzTmFtZSsiICIpLnJlcGxhY2UodWIsIiAiKToiICIpKXtmPTA7d2hpbGUoZT1iW2YrK10pZC5pbmRleE9mKCIgIitlKyIgIik8MCYmKGQrPWUrIiAiKTtnPW0udHJpbShkKSxjLmNsYXNzTmFtZSE9PWcmJihjLmNsYXNzTmFtZT1nKX1yZXR1cm4gdGhpc30scmVtb3ZlQ2xhc3M6ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGUsZixnLGg9MCxpPXRoaXMubGVuZ3RoLGo9MD09PWFyZ3VtZW50cy5sZW5ndGh8fCJzdHJpbmciPT10eXBlb2YgYSYmYTtpZihtLmlzRnVuY3Rpb24oYSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXttKHRoaXMpLnJlbW92ZUNsYXNzKGEuY2FsbCh0aGlzLGIsdGhpcy5jbGFzc05hbWUpKX0pO2lmKGopZm9yKGI9KGF8fCIiKS5tYXRjaChFKXx8W107aT5oO2grKylpZihjPXRoaXNbaF0sZD0xPT09Yy5ub2RlVHlwZSYmKGMuY2xhc3NOYW1lPygiICIrYy5jbGFzc05hbWUrIiAiKS5yZXBsYWNlKHViLCIgIik6IiIpKXtmPTA7d2hpbGUoZT1iW2YrK10pd2hpbGUoZC5pbmRleE9mKCIgIitlKyIgIik+PTApZD1kLnJlcGxhY2UoIiAiK2UrIiAiLCIgIik7Zz1hP20udHJpbShkKToiIixjLmNsYXNzTmFtZSE9PWcmJihjLmNsYXNzTmFtZT1nKX1yZXR1cm4gdGhpc30sdG9nZ2xlQ2xhc3M6ZnVuY3Rpb24oYSxiKXt2YXIgYz10eXBlb2YgYTtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiBiJiYic3RyaW5nIj09PWM/Yj90aGlzLmFkZENsYXNzKGEpOnRoaXMucmVtb3ZlQ2xhc3MoYSk6dGhpcy5lYWNoKG0uaXNGdW5jdGlvbihhKT9mdW5jdGlvbihjKXttKHRoaXMpLnRvZ2dsZUNsYXNzKGEuY2FsbCh0aGlzLGMsdGhpcy5jbGFzc05hbWUsYiksYil9OmZ1bmN0aW9uKCl7aWYoInN0cmluZyI9PT1jKXt2YXIgYixkPTAsZT1tKHRoaXMpLGY9YS5tYXRjaChFKXx8W107d2hpbGUoYj1mW2QrK10pZS5oYXNDbGFzcyhiKT9lLnJlbW92ZUNsYXNzKGIpOmUuYWRkQ2xhc3MoYil9ZWxzZShjPT09S3x8ImJvb2xlYW4iPT09YykmJih0aGlzLmNsYXNzTmFtZSYmbS5fZGF0YSh0aGlzLCJfX2NsYXNzTmFtZV9fIix0aGlzLmNsYXNzTmFtZSksdGhpcy5jbGFzc05hbWU9dGhpcy5jbGFzc05hbWV8fGE9PT0hMT8iIjptLl9kYXRhKHRoaXMsIl9fY2xhc3NOYW1lX18iKXx8IiIpfSl9LGhhc0NsYXNzOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj0iICIrYSsiICIsYz0wLGQ9dGhpcy5sZW5ndGg7ZD5jO2MrKylpZigxPT09dGhpc1tjXS5ub2RlVHlwZSYmKCIgIit0aGlzW2NdLmNsYXNzTmFtZSsiICIpLnJlcGxhY2UodWIsIiAiKS5pbmRleE9mKGIpPj0wKXJldHVybiEwO3JldHVybiExfX0pLG0uZWFjaCgiYmx1ciBmb2N1cyBmb2N1c2luIGZvY3Vzb3V0IGxvYWQgcmVzaXplIHNjcm9sbCB1bmxvYWQgY2xpY2sgZGJsY2xpY2sgbW91c2Vkb3duIG1vdXNldXAgbW91c2Vtb3ZlIG1vdXNlb3ZlciBtb3VzZW91dCBtb3VzZWVudGVyIG1vdXNlbGVhdmUgY2hhbmdlIHNlbGVjdCBzdWJtaXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBlcnJvciBjb250ZXh0bWVudSIuc3BsaXQoIiAiKSxmdW5jdGlvbihhLGIpe20uZm5bYl09ZnVuY3Rpb24oYSxjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4wP3RoaXMub24oYixudWxsLGEsYyk6dGhpcy50cmlnZ2VyKGIpfX0pLG0uZm4uZXh0ZW5kKHtob3ZlcjpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLm1vdXNlZW50ZXIoYSkubW91c2VsZWF2ZShifHxhKX0sYmluZDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMub24oYSxudWxsLGIsYyl9LHVuYmluZDpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLm9mZihhLG51bGwsYil9LGRlbGVnYXRlOmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiB0aGlzLm9uKGIsYSxjLGQpfSx1bmRlbGVnYXRlOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/dGhpcy5vZmYoYSwiKioiKTp0aGlzLm9mZihiLGF8fCIqKiIsYyl9fSk7dmFyIHZiPW0ubm93KCksd2I9L1w/Lyx4Yj0vKCwpfChcW3x7KXwofXxdKXwiKD86W14iXFxcclxuXXxcXFsiXFxcL2JmbnJ0XXxcXHVbXGRhLWZBLUZdezR9KSoiXHMqOj98dHJ1ZXxmYWxzZXxudWxsfC0/KD8hMFxkKVxkKyg/OlwuXGQrfCkoPzpbZUVdWystXT9cZCt8KS9nO20ucGFyc2VKU09OPWZ1bmN0aW9uKGIpe2lmKGEuSlNPTiYmYS5KU09OLnBhcnNlKXJldHVybiBhLkpTT04ucGFyc2UoYisiIik7dmFyIGMsZD1udWxsLGU9bS50cmltKGIrIiIpO3JldHVybiBlJiYhbS50cmltKGUucmVwbGFjZSh4YixmdW5jdGlvbihhLGIsZSxmKXtyZXR1cm4gYyYmYiYmKGQ9MCksMD09PWQ/YTooYz1lfHxiLGQrPSFmLSFlLCIiKX0pKT9GdW5jdGlvbigicmV0dXJuICIrZSkoKTptLmVycm9yKCJJbnZhbGlkIEpTT046ICIrYil9LG0ucGFyc2VYTUw9ZnVuY3Rpb24oYil7dmFyIGMsZDtpZighYnx8InN0cmluZyIhPXR5cGVvZiBiKXJldHVybiBudWxsO3RyeXthLkRPTVBhcnNlcj8oZD1uZXcgRE9NUGFyc2VyLGM9ZC5wYXJzZUZyb21TdHJpbmcoYiwidGV4dC94bWwiKSk6KGM9bmV3IEFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxET00iKSxjLmFzeW5jPSJmYWxzZSIsYy5sb2FkWE1MKGIpKX1jYXRjaChlKXtjPXZvaWQgMH1yZXR1cm4gYyYmYy5kb2N1bWVudEVsZW1lbnQmJiFjLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJwYXJzZXJlcnJvciIpLmxlbmd0aHx8bS5lcnJvcigiSW52YWxpZCBYTUw6ICIrYiksY307dmFyIHliLHpiLEFiPS8jLiokLyxCYj0vKFs/Jl0pXz1bXiZdKi8sQ2I9L14oLio/KTpbIFx0XSooW15cclxuXSopXHI/JC9nbSxEYj0vXig/OmFib3V0fGFwcHxhcHAtc3RvcmFnZXwuKy1leHRlbnNpb258ZmlsZXxyZXN8d2lkZ2V0KTokLyxFYj0vXig/OkdFVHxIRUFEKSQvLEZiPS9eXC9cLy8sR2I9L14oW1x3ListXSs6KSg/OlwvXC8oPzpbXlwvPyNdKkB8KShbXlwvPyM6XSopKD86OihcZCspfCl8KS8sSGI9e30sSWI9e30sSmI9IiovIi5jb25jYXQoIioiKTt0cnl7emI9bG9jYXRpb24uaHJlZn1jYXRjaChLYil7emI9eS5jcmVhdGVFbGVtZW50KCJhIiksemIuaHJlZj0iIix6Yj16Yi5ocmVmfXliPUdiLmV4ZWMoemIudG9Mb3dlckNhc2UoKSl8fFtdO2Z1bmN0aW9uIExiKGEpe3JldHVybiBmdW5jdGlvbihiLGMpeyJzdHJpbmciIT10eXBlb2YgYiYmKGM9YixiPSIqIik7dmFyIGQsZT0wLGY9Yi50b0xvd2VyQ2FzZSgpLm1hdGNoKEUpfHxbXTtpZihtLmlzRnVuY3Rpb24oYykpd2hpbGUoZD1mW2UrK10pIisiPT09ZC5jaGFyQXQoMCk/KGQ9ZC5zbGljZSgxKXx8IioiLChhW2RdPWFbZF18fFtdKS51bnNoaWZ0KGMpKTooYVtkXT1hW2RdfHxbXSkucHVzaChjKX19ZnVuY3Rpb24gTWIoYSxiLGMsZCl7dmFyIGU9e30sZj1hPT09SWI7ZnVuY3Rpb24gZyhoKXt2YXIgaTtyZXR1cm4gZVtoXT0hMCxtLmVhY2goYVtoXXx8W10sZnVuY3Rpb24oYSxoKXt2YXIgaj1oKGIsYyxkKTtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGp8fGZ8fGVbal0/Zj8hKGk9aik6dm9pZCAwOihiLmRhdGFUeXBlcy51bnNoaWZ0KGopLGcoaiksITEpfSksaX1yZXR1cm4gZyhiLmRhdGFUeXBlc1swXSl8fCFlWyIqIl0mJmcoIioiKX1mdW5jdGlvbiBOYihhLGIpe3ZhciBjLGQsZT1tLmFqYXhTZXR0aW5ncy5mbGF0T3B0aW9uc3x8e307Zm9yKGQgaW4gYil2b2lkIDAhPT1iW2RdJiYoKGVbZF0/YTpjfHwoYz17fSkpW2RdPWJbZF0pO3JldHVybiBjJiZtLmV4dGVuZCghMCxhLGMpLGF9ZnVuY3Rpb24gT2IoYSxiLGMpe3ZhciBkLGUsZixnLGg9YS5jb250ZW50cyxpPWEuZGF0YVR5cGVzO3doaWxlKCIqIj09PWlbMF0paS5zaGlmdCgpLHZvaWQgMD09PWUmJihlPWEubWltZVR5cGV8fGIuZ2V0UmVzcG9uc2VIZWFkZXIoIkNvbnRlbnQtVHlwZSIpKTtpZihlKWZvcihnIGluIGgpaWYoaFtnXSYmaFtnXS50ZXN0KGUpKXtpLnVuc2hpZnQoZyk7YnJlYWt9aWYoaVswXWluIGMpZj1pWzBdO2Vsc2V7Zm9yKGcgaW4gYyl7aWYoIWlbMF18fGEuY29udmVydGVyc1tnKyIgIitpWzBdXSl7Zj1nO2JyZWFrfWR8fChkPWcpfWY9Znx8ZH1yZXR1cm4gZj8oZiE9PWlbMF0mJmkudW5zaGlmdChmKSxjW2ZdKTp2b2lkIDB9ZnVuY3Rpb24gUGIoYSxiLGMsZCl7dmFyIGUsZixnLGgsaSxqPXt9LGs9YS5kYXRhVHlwZXMuc2xpY2UoKTtpZihrWzFdKWZvcihnIGluIGEuY29udmVydGVycylqW2cudG9Mb3dlckNhc2UoKV09YS5jb252ZXJ0ZXJzW2ddO2Y9ay5zaGlmdCgpO3doaWxlKGYpaWYoYS5yZXNwb25zZUZpZWxkc1tmXSYmKGNbYS5yZXNwb25zZUZpZWxkc1tmXV09YiksIWkmJmQmJmEuZGF0YUZpbHRlciYmKGI9YS5kYXRhRmlsdGVyKGIsYS5kYXRhVHlwZSkpLGk9ZixmPWsuc2hpZnQoKSlpZigiKiI9PT1mKWY9aTtlbHNlIGlmKCIqIiE9PWkmJmkhPT1mKXtpZihnPWpbaSsiICIrZl18fGpbIiogIitmXSwhZylmb3IoZSBpbiBqKWlmKGg9ZS5zcGxpdCgiICIpLGhbMV09PT1mJiYoZz1qW2krIiAiK2hbMF1dfHxqWyIqICIraFswXV0pKXtnPT09ITA/Zz1qW2VdOmpbZV0hPT0hMCYmKGY9aFswXSxrLnVuc2hpZnQoaFsxXSkpO2JyZWFrfWlmKGchPT0hMClpZihnJiZhWyJ0aHJvd3MiXSliPWcoYik7ZWxzZSB0cnl7Yj1nKGIpfWNhdGNoKGwpe3JldHVybntzdGF0ZToicGFyc2VyZXJyb3IiLGVycm9yOmc/bDoiTm8gY29udmVyc2lvbiBmcm9tICIraSsiIHRvICIrZn19fXJldHVybntzdGF0ZToic3VjY2VzcyIsZGF0YTpifX1tLmV4dGVuZCh7YWN0aXZlOjAsbGFzdE1vZGlmaWVkOnt9LGV0YWc6e30sYWpheFNldHRpbmdzOnt1cmw6emIsdHlwZToiR0VUIixpc0xvY2FsOkRiLnRlc3QoeWJbMV0pLGdsb2JhbDohMCxwcm9jZXNzRGF0YTohMCxhc3luYzohMCxjb250ZW50VHlwZToiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04IixhY2NlcHRzOnsiKiI6SmIsdGV4dDoidGV4dC9wbGFpbiIsaHRtbDoidGV4dC9odG1sIix4bWw6ImFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWwiLGpzb246ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvamF2YXNjcmlwdCJ9LGNvbnRlbnRzOnt4bWw6L3htbC8saHRtbDovaHRtbC8sanNvbjovanNvbi99LHJlc3BvbnNlRmllbGRzOnt4bWw6InJlc3BvbnNlWE1MIix0ZXh0OiJyZXNwb25zZVRleHQiLGpzb246InJlc3BvbnNlSlNPTiJ9LGNvbnZlcnRlcnM6eyIqIHRleHQiOlN0cmluZywidGV4dCBodG1sIjohMCwidGV4dCBqc29uIjptLnBhcnNlSlNPTiwidGV4dCB4bWwiOm0ucGFyc2VYTUx9LGZsYXRPcHRpb25zOnt1cmw6ITAsY29udGV4dDohMH19LGFqYXhTZXR1cDpmdW5jdGlvbihhLGIpe3JldHVybiBiP05iKE5iKGEsbS5hamF4U2V0dGluZ3MpLGIpOk5iKG0uYWpheFNldHRpbmdzLGEpfSxhamF4UHJlZmlsdGVyOkxiKEhiKSxhamF4VHJhbnNwb3J0OkxiKEliKSxhamF4OmZ1bmN0aW9uKGEsYil7Im9iamVjdCI9PXR5cGVvZiBhJiYoYj1hLGE9dm9pZCAwKSxiPWJ8fHt9O3ZhciBjLGQsZSxmLGcsaCxpLGosaz1tLmFqYXhTZXR1cCh7fSxiKSxsPWsuY29udGV4dHx8ayxuPWsuY29udGV4dCYmKGwubm9kZVR5cGV8fGwuanF1ZXJ5KT9tKGwpOm0uZXZlbnQsbz1tLkRlZmVycmVkKCkscD1tLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSxxPWsuc3RhdHVzQ29kZXx8e30scj17fSxzPXt9LHQ9MCx1PSJjYW5jZWxlZCIsdj17cmVhZHlTdGF0ZTowLGdldFJlc3BvbnNlSGVhZGVyOmZ1bmN0aW9uKGEpe3ZhciBiO2lmKDI9PT10KXtpZighail7aj17fTt3aGlsZShiPUNiLmV4ZWMoZikpaltiWzFdLnRvTG93ZXJDYXNlKCldPWJbMl19Yj1qW2EudG9Mb3dlckNhc2UoKV19cmV0dXJuIG51bGw9PWI/bnVsbDpifSxnZXRBbGxSZXNwb25zZUhlYWRlcnM6ZnVuY3Rpb24oKXtyZXR1cm4gMj09PXQ/ZjpudWxsfSxzZXRSZXF1ZXN0SGVhZGVyOmZ1bmN0aW9uKGEsYil7dmFyIGM9YS50b0xvd2VyQ2FzZSgpO3JldHVybiB0fHwoYT1zW2NdPXNbY118fGEsclthXT1iKSx0aGlzfSxvdmVycmlkZU1pbWVUeXBlOmZ1bmN0aW9uKGEpe3JldHVybiB0fHwoay5taW1lVHlwZT1hKSx0aGlzfSxzdGF0dXNDb2RlOmZ1bmN0aW9uKGEpe3ZhciBiO2lmKGEpaWYoMj50KWZvcihiIGluIGEpcVtiXT1bcVtiXSxhW2JdXTtlbHNlIHYuYWx3YXlzKGFbdi5zdGF0dXNdKTtyZXR1cm4gdGhpc30sYWJvcnQ6ZnVuY3Rpb24oYSl7dmFyIGI9YXx8dTtyZXR1cm4gaSYmaS5hYm9ydChiKSx4KDAsYiksdGhpc319O2lmKG8ucHJvbWlzZSh2KS5jb21wbGV0ZT1wLmFkZCx2LnN1Y2Nlc3M9di5kb25lLHYuZXJyb3I9di5mYWlsLGsudXJsPSgoYXx8ay51cmx8fHpiKSsiIikucmVwbGFjZShBYiwiIikucmVwbGFjZShGYix5YlsxXSsiLy8iKSxrLnR5cGU9Yi5tZXRob2R8fGIudHlwZXx8ay5tZXRob2R8fGsudHlwZSxrLmRhdGFUeXBlcz1tLnRyaW0oay5kYXRhVHlwZXx8IioiKS50b0xvd2VyQ2FzZSgpLm1hdGNoKEUpfHxbIiJdLG51bGw9PWsuY3Jvc3NEb21haW4mJihjPUdiLmV4ZWMoay51cmwudG9Mb3dlckNhc2UoKSksay5jcm9zc0RvbWFpbj0hKCFjfHxjWzFdPT09eWJbMV0mJmNbMl09PT15YlsyXSYmKGNbM118fCgiaHR0cDoiPT09Y1sxXT8iODAiOiI0NDMiKSk9PT0oeWJbM118fCgiaHR0cDoiPT09eWJbMV0/IjgwIjoiNDQzIikpKSksay5kYXRhJiZrLnByb2Nlc3NEYXRhJiYic3RyaW5nIiE9dHlwZW9mIGsuZGF0YSYmKGsuZGF0YT1tLnBhcmFtKGsuZGF0YSxrLnRyYWRpdGlvbmFsKSksTWIoSGIsayxiLHYpLDI9PT10KXJldHVybiB2O2g9bS5ldmVudCYmay5nbG9iYWwsaCYmMD09PW0uYWN0aXZlKysmJm0uZXZlbnQudHJpZ2dlcigiYWpheFN0YXJ0Iiksay50eXBlPWsudHlwZS50b1VwcGVyQ2FzZSgpLGsuaGFzQ29udGVudD0hRWIudGVzdChrLnR5cGUpLGU9ay51cmwsay5oYXNDb250ZW50fHwoay5kYXRhJiYoZT1rLnVybCs9KHdiLnRlc3QoZSk/IiYiOiI/Iikray5kYXRhLGRlbGV0ZSBrLmRhdGEpLGsuY2FjaGU9PT0hMSYmKGsudXJsPUJiLnRlc3QoZSk/ZS5yZXBsYWNlKEJiLCIkMV89Iit2YisrKTplKyh3Yi50ZXN0KGUpPyImIjoiPyIpKyJfPSIrdmIrKykpLGsuaWZNb2RpZmllZCYmKG0ubGFzdE1vZGlmaWVkW2VdJiZ2LnNldFJlcXVlc3RIZWFkZXIoIklmLU1vZGlmaWVkLVNpbmNlIixtLmxhc3RNb2RpZmllZFtlXSksbS5ldGFnW2VdJiZ2LnNldFJlcXVlc3RIZWFkZXIoIklmLU5vbmUtTWF0Y2giLG0uZXRhZ1tlXSkpLChrLmRhdGEmJmsuaGFzQ29udGVudCYmay5jb250ZW50VHlwZSE9PSExfHxiLmNvbnRlbnRUeXBlKSYmdi5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLGsuY29udGVudFR5cGUpLHYuc2V0UmVxdWVzdEhlYWRlcigiQWNjZXB0IixrLmRhdGFUeXBlc1swXSYmay5hY2NlcHRzW2suZGF0YVR5cGVzWzBdXT9rLmFjY2VwdHNbay5kYXRhVHlwZXNbMF1dKygiKiIhPT1rLmRhdGFUeXBlc1swXT8iLCAiK0piKyI7IHE9MC4wMSI6IiIpOmsuYWNjZXB0c1siKiJdKTtmb3IoZCBpbiBrLmhlYWRlcnMpdi5zZXRSZXF1ZXN0SGVhZGVyKGQsay5oZWFkZXJzW2RdKTtpZihrLmJlZm9yZVNlbmQmJihrLmJlZm9yZVNlbmQuY2FsbChsLHYsayk9PT0hMXx8Mj09PXQpKXJldHVybiB2LmFib3J0KCk7dT0iYWJvcnQiO2ZvcihkIGlue3N1Y2Nlc3M6MSxlcnJvcjoxLGNvbXBsZXRlOjF9KXZbZF0oa1tkXSk7aWYoaT1NYihJYixrLGIsdikpe3YucmVhZHlTdGF0ZT0xLGgmJm4udHJpZ2dlcigiYWpheFNlbmQiLFt2LGtdKSxrLmFzeW5jJiZrLnRpbWVvdXQ+MCYmKGc9c2V0VGltZW91dChmdW5jdGlvbigpe3YuYWJvcnQoInRpbWVvdXQiKX0say50aW1lb3V0KSk7dHJ5e3Q9MSxpLnNlbmQocix4KX1jYXRjaCh3KXtpZighKDI+dCkpdGhyb3cgdzt4KC0xLHcpfX1lbHNlIHgoLTEsIk5vIFRyYW5zcG9ydCIpO2Z1bmN0aW9uIHgoYSxiLGMsZCl7dmFyIGoscixzLHUsdyx4PWI7MiE9PXQmJih0PTIsZyYmY2xlYXJUaW1lb3V0KGcpLGk9dm9pZCAwLGY9ZHx8IiIsdi5yZWFkeVN0YXRlPWE+MD80OjAsaj1hPj0yMDAmJjMwMD5hfHwzMDQ9PT1hLGMmJih1PU9iKGssdixjKSksdT1QYihrLHUsdixqKSxqPyhrLmlmTW9kaWZpZWQmJih3PXYuZ2V0UmVzcG9uc2VIZWFkZXIoIkxhc3QtTW9kaWZpZWQiKSx3JiYobS5sYXN0TW9kaWZpZWRbZV09dyksdz12LmdldFJlc3BvbnNlSGVhZGVyKCJldGFnIiksdyYmKG0uZXRhZ1tlXT13KSksMjA0PT09YXx8IkhFQUQiPT09ay50eXBlP3g9Im5vY29udGVudCI6MzA0PT09YT94PSJub3Rtb2RpZmllZCI6KHg9dS5zdGF0ZSxyPXUuZGF0YSxzPXUuZXJyb3Isaj0hcykpOihzPXgsKGF8fCF4KSYmKHg9ImVycm9yIiwwPmEmJihhPTApKSksdi5zdGF0dXM9YSx2LnN0YXR1c1RleHQ9KGJ8fHgpKyIiLGo/by5yZXNvbHZlV2l0aChsLFtyLHgsdl0pOm8ucmVqZWN0V2l0aChsLFt2LHgsc10pLHYuc3RhdHVzQ29kZShxKSxxPXZvaWQgMCxoJiZuLnRyaWdnZXIoaj8iYWpheFN1Y2Nlc3MiOiJhamF4RXJyb3IiLFt2LGssaj9yOnNdKSxwLmZpcmVXaXRoKGwsW3YseF0pLGgmJihuLnRyaWdnZXIoImFqYXhDb21wbGV0ZSIsW3Ysa10pLC0tbS5hY3RpdmV8fG0uZXZlbnQudHJpZ2dlcigiYWpheFN0b3AiKSkpfXJldHVybiB2fSxnZXRKU09OOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gbS5nZXQoYSxiLGMsImpzb24iKX0sZ2V0U2NyaXB0OmZ1bmN0aW9uKGEsYil7cmV0dXJuIG0uZ2V0KGEsdm9pZCAwLGIsInNjcmlwdCIpfX0pLG0uZWFjaChbImdldCIsInBvc3QiXSxmdW5jdGlvbihhLGIpe21bYl09ZnVuY3Rpb24oYSxjLGQsZSl7cmV0dXJuIG0uaXNGdW5jdGlvbihjKSYmKGU9ZXx8ZCxkPWMsYz12b2lkIDApLG0uYWpheCh7dXJsOmEsdHlwZTpiLGRhdGFUeXBlOmUsZGF0YTpjLHN1Y2Nlc3M6ZH0pfX0pLG0uX2V2YWxVcmw9ZnVuY3Rpb24oYSl7cmV0dXJuIG0uYWpheCh7dXJsOmEsdHlwZToiR0VUIixkYXRhVHlwZToic2NyaXB0Iixhc3luYzohMSxnbG9iYWw6ITEsInRocm93cyI6ITB9KX0sbS5mbi5leHRlbmQoe3dyYXBBbGw6ZnVuY3Rpb24oYSl7aWYobS5pc0Z1bmN0aW9uKGEpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYil7bSh0aGlzKS53cmFwQWxsKGEuY2FsbCh0aGlzLGIpKX0pO2lmKHRoaXNbMF0pe3ZhciBiPW0oYSx0aGlzWzBdLm93bmVyRG9jdW1lbnQpLmVxKDApLmNsb25lKCEwKTt0aGlzWzBdLnBhcmVudE5vZGUmJmIuaW5zZXJ0QmVmb3JlKHRoaXNbMF0pLGIubWFwKGZ1bmN0aW9uKCl7dmFyIGE9dGhpczt3aGlsZShhLmZpcnN0Q2hpbGQmJjE9PT1hLmZpcnN0Q2hpbGQubm9kZVR5cGUpYT1hLmZpcnN0Q2hpbGQ7cmV0dXJuIGF9KS5hcHBlbmQodGhpcyl9cmV0dXJuIHRoaXN9LHdyYXBJbm5lcjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5lYWNoKG0uaXNGdW5jdGlvbihhKT9mdW5jdGlvbihiKXttKHRoaXMpLndyYXBJbm5lcihhLmNhbGwodGhpcyxiKSl9OmZ1bmN0aW9uKCl7dmFyIGI9bSh0aGlzKSxjPWIuY29udGVudHMoKTtjLmxlbmd0aD9jLndyYXBBbGwoYSk6Yi5hcHBlbmQoYSl9KX0sd3JhcDpmdW5jdGlvbihhKXt2YXIgYj1tLmlzRnVuY3Rpb24oYSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihjKXttKHRoaXMpLndyYXBBbGwoYj9hLmNhbGwodGhpcyxjKTphKX0pfSx1bndyYXA6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJlbnQoKS5lYWNoKGZ1bmN0aW9uKCl7bS5ub2RlTmFtZSh0aGlzLCJib2R5Iil8fG0odGhpcykucmVwbGFjZVdpdGgodGhpcy5jaGlsZE5vZGVzKX0pLmVuZCgpfX0pLG0uZXhwci5maWx0ZXJzLmhpZGRlbj1mdW5jdGlvbihhKXtyZXR1cm4gYS5vZmZzZXRXaWR0aDw9MCYmYS5vZmZzZXRIZWlnaHQ8PTB8fCFrLnJlbGlhYmxlSGlkZGVuT2Zmc2V0cygpJiYibm9uZSI9PT0oYS5zdHlsZSYmYS5zdHlsZS5kaXNwbGF5fHxtLmNzcyhhLCJkaXNwbGF5IikpfSxtLmV4cHIuZmlsdGVycy52aXNpYmxlPWZ1bmN0aW9uKGEpe3JldHVybiFtLmV4cHIuZmlsdGVycy5oaWRkZW4oYSl9O3ZhciBRYj0vJTIwL2csUmI9L1xbXF0kLyxTYj0vXHI/XG4vZyxUYj0vXig/OnN1Ym1pdHxidXR0b258aW1hZ2V8cmVzZXR8ZmlsZSkkL2ksVWI9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8a2V5Z2VuKS9pO2Z1bmN0aW9uIFZiKGEsYixjLGQpe3ZhciBlO2lmKG0uaXNBcnJheShiKSltLmVhY2goYixmdW5jdGlvbihiLGUpe2N8fFJiLnRlc3QoYSk/ZChhLGUpOlZiKGErIlsiKygib2JqZWN0Ij09dHlwZW9mIGU/YjoiIikrIl0iLGUsYyxkKX0pO2Vsc2UgaWYoY3x8Im9iamVjdCIhPT1tLnR5cGUoYikpZChhLGIpO2Vsc2UgZm9yKGUgaW4gYilWYihhKyJbIitlKyJdIixiW2VdLGMsZCl9bS5wYXJhbT1mdW5jdGlvbihhLGIpe3ZhciBjLGQ9W10sZT1mdW5jdGlvbihhLGIpe2I9bS5pc0Z1bmN0aW9uKGIpP2IoKTpudWxsPT1iPyIiOmIsZFtkLmxlbmd0aF09ZW5jb2RlVVJJQ29tcG9uZW50KGEpKyI9IitlbmNvZGVVUklDb21wb25lbnQoYil9O2lmKHZvaWQgMD09PWImJihiPW0uYWpheFNldHRpbmdzJiZtLmFqYXhTZXR0aW5ncy50cmFkaXRpb25hbCksbS5pc0FycmF5KGEpfHxhLmpxdWVyeSYmIW0uaXNQbGFpbk9iamVjdChhKSltLmVhY2goYSxmdW5jdGlvbigpe2UodGhpcy5uYW1lLHRoaXMudmFsdWUpfSk7ZWxzZSBmb3IoYyBpbiBhKVZiKGMsYVtjXSxiLGUpO3JldHVybiBkLmpvaW4oIiYiKS5yZXBsYWNlKFFiLCIrIil9LG0uZm4uZXh0ZW5kKHtzZXJpYWxpemU6ZnVuY3Rpb24oKXtyZXR1cm4gbS5wYXJhbSh0aGlzLnNlcmlhbGl6ZUFycmF5KCkpfSxzZXJpYWxpemVBcnJheTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe3ZhciBhPW0ucHJvcCh0aGlzLCJlbGVtZW50cyIpO3JldHVybiBhP20ubWFrZUFycmF5KGEpOnRoaXN9KS5maWx0ZXIoZnVuY3Rpb24oKXt2YXIgYT10aGlzLnR5cGU7cmV0dXJuIHRoaXMubmFtZSYmIW0odGhpcykuaXMoIjpkaXNhYmxlZCIpJiZVYi50ZXN0KHRoaXMubm9kZU5hbWUpJiYhVGIudGVzdChhKSYmKHRoaXMuY2hlY2tlZHx8IVcudGVzdChhKSl9KS5tYXAoZnVuY3Rpb24oYSxiKXt2YXIgYz1tKHRoaXMpLnZhbCgpO3JldHVybiBudWxsPT1jP251bGw6bS5pc0FycmF5KGMpP20ubWFwKGMsZnVuY3Rpb24oYSl7cmV0dXJue25hbWU6Yi5uYW1lLHZhbHVlOmEucmVwbGFjZShTYiwiXHJcbiIpfX0pOntuYW1lOmIubmFtZSx2YWx1ZTpjLnJlcGxhY2UoU2IsIlxyXG4iKX19KS5nZXQoKX19KSxtLmFqYXhTZXR0aW5ncy54aHI9dm9pZCAwIT09YS5BY3RpdmVYT2JqZWN0P2Z1bmN0aW9uKCl7cmV0dXJuIXRoaXMuaXNMb2NhbCYmL14oZ2V0fHBvc3R8aGVhZHxwdXR8ZGVsZXRlfG9wdGlvbnMpJC9pLnRlc3QodGhpcy50eXBlKSYmWmIoKXx8JGIoKX06WmI7dmFyIFdiPTAsWGI9e30sWWI9bS5hamF4U2V0dGluZ3MueGhyKCk7YS5hdHRhY2hFdmVudCYmYS5hdHRhY2hFdmVudCgib251bmxvYWQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhIGluIFhiKVhiW2FdKHZvaWQgMCwhMCl9KSxrLmNvcnM9ISFZYiYmIndpdGhDcmVkZW50aWFscyJpbiBZYixZYj1rLmFqYXg9ISFZYixZYiYmbS5hamF4VHJhbnNwb3J0KGZ1bmN0aW9uKGEpe2lmKCFhLmNyb3NzRG9tYWlufHxrLmNvcnMpe3ZhciBiO3JldHVybntzZW5kOmZ1bmN0aW9uKGMsZCl7dmFyIGUsZj1hLnhocigpLGc9KytXYjtpZihmLm9wZW4oYS50eXBlLGEudXJsLGEuYXN5bmMsYS51c2VybmFtZSxhLnBhc3N3b3JkKSxhLnhockZpZWxkcylmb3IoZSBpbiBhLnhockZpZWxkcylmW2VdPWEueGhyRmllbGRzW2VdO2EubWltZVR5cGUmJmYub3ZlcnJpZGVNaW1lVHlwZSYmZi5vdmVycmlkZU1pbWVUeXBlKGEubWltZVR5cGUpLGEuY3Jvc3NEb21haW58fGNbIlgtUmVxdWVzdGVkLVdpdGgiXXx8KGNbIlgtUmVxdWVzdGVkLVdpdGgiXT0iWE1MSHR0cFJlcXVlc3QiKTtmb3IoZSBpbiBjKXZvaWQgMCE9PWNbZV0mJmYuc2V0UmVxdWVzdEhlYWRlcihlLGNbZV0rIiIpO2Yuc2VuZChhLmhhc0NvbnRlbnQmJmEuZGF0YXx8bnVsbCksYj1mdW5jdGlvbihjLGUpe3ZhciBoLGksajtpZihiJiYoZXx8ND09PWYucmVhZHlTdGF0ZSkpaWYoZGVsZXRlIFhiW2ddLGI9dm9pZCAwLGYub25yZWFkeXN0YXRlY2hhbmdlPW0ubm9vcCxlKTQhPT1mLnJlYWR5U3RhdGUmJmYuYWJvcnQoKTtlbHNle2o9e30saD1mLnN0YXR1cywic3RyaW5nIj09dHlwZW9mIGYucmVzcG9uc2VUZXh0JiYoai50ZXh0PWYucmVzcG9uc2VUZXh0KTt0cnl7aT1mLnN0YXR1c1RleHR9Y2F0Y2goayl7aT0iIn1ofHwhYS5pc0xvY2FsfHxhLmNyb3NzRG9tYWluPzEyMjM9PT1oJiYoaD0yMDQpOmg9ai50ZXh0PzIwMDo0MDR9aiYmZChoLGksaixmLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKX0sYS5hc3luYz80PT09Zi5yZWFkeVN0YXRlP3NldFRpbWVvdXQoYik6Zi5vbnJlYWR5c3RhdGVjaGFuZ2U9WGJbZ109YjpiKCl9LGFib3J0OmZ1bmN0aW9uKCl7YiYmYih2b2lkIDAsITApfX19fSk7ZnVuY3Rpb24gWmIoKXt0cnl7cmV0dXJuIG5ldyBhLlhNTEh0dHBSZXF1ZXN0fWNhdGNoKGIpe319ZnVuY3Rpb24gJGIoKXt0cnl7cmV0dXJuIG5ldyBhLkFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxIVFRQIil9Y2F0Y2goYil7fX1tLmFqYXhTZXR1cCh7YWNjZXB0czp7c2NyaXB0OiJ0ZXh0L2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2VjbWFzY3JpcHQsIGFwcGxpY2F0aW9uL3gtZWNtYXNjcmlwdCJ9LGNvbnRlbnRzOntzY3JpcHQ6Lyg/OmphdmF8ZWNtYSlzY3JpcHQvfSxjb252ZXJ0ZXJzOnsidGV4dCBzY3JpcHQiOmZ1bmN0aW9uKGEpe3JldHVybiBtLmdsb2JhbEV2YWwoYSksYX19fSksbS5hamF4UHJlZmlsdGVyKCJzY3JpcHQiLGZ1bmN0aW9uKGEpe3ZvaWQgMD09PWEuY2FjaGUmJihhLmNhY2hlPSExKSxhLmNyb3NzRG9tYWluJiYoYS50eXBlPSJHRVQiLGEuZ2xvYmFsPSExKX0pLG0uYWpheFRyYW5zcG9ydCgic2NyaXB0IixmdW5jdGlvbihhKXtpZihhLmNyb3NzRG9tYWluKXt2YXIgYixjPXkuaGVhZHx8bSgiaGVhZCIpWzBdfHx5LmRvY3VtZW50RWxlbWVudDtyZXR1cm57c2VuZDpmdW5jdGlvbihkLGUpe2I9eS5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKSxiLmFzeW5jPSEwLGEuc2NyaXB0Q2hhcnNldCYmKGIuY2hhcnNldD1hLnNjcmlwdENoYXJzZXQpLGIuc3JjPWEudXJsLGIub25sb2FkPWIub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKGEsYyl7KGN8fCFiLnJlYWR5U3RhdGV8fC9sb2FkZWR8Y29tcGxldGUvLnRlc3QoYi5yZWFkeVN0YXRlKSkmJihiLm9ubG9hZD1iLm9ucmVhZHlzdGF0ZWNoYW5nZT1udWxsLGIucGFyZW50Tm9kZSYmYi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGIpLGI9bnVsbCxjfHxlKDIwMCwic3VjY2VzcyIpKX0sYy5pbnNlcnRCZWZvcmUoYixjLmZpcnN0Q2hpbGQpfSxhYm9ydDpmdW5jdGlvbigpe2ImJmIub25sb2FkKHZvaWQgMCwhMCl9fX19KTt2YXIgX2I9W10sYWM9Lyg9KVw/KD89JnwkKXxcP1w/LzttLmFqYXhTZXR1cCh7anNvbnA6ImNhbGxiYWNrIixqc29ucENhbGxiYWNrOmZ1bmN0aW9uKCl7dmFyIGE9X2IucG9wKCl8fG0uZXhwYW5kbysiXyIrdmIrKztyZXR1cm4gdGhpc1thXT0hMCxhfX0pLG0uYWpheFByZWZpbHRlcigianNvbiBqc29ucCIsZnVuY3Rpb24oYixjLGQpe3ZhciBlLGYsZyxoPWIuanNvbnAhPT0hMSYmKGFjLnRlc3QoYi51cmwpPyJ1cmwiOiJzdHJpbmciPT10eXBlb2YgYi5kYXRhJiYhKGIuY29udGVudFR5cGV8fCIiKS5pbmRleE9mKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKSYmYWMudGVzdChiLmRhdGEpJiYiZGF0YSIpO3JldHVybiBofHwianNvbnAiPT09Yi5kYXRhVHlwZXNbMF0/KGU9Yi5qc29ucENhbGxiYWNrPW0uaXNGdW5jdGlvbihiLmpzb25wQ2FsbGJhY2spP2IuanNvbnBDYWxsYmFjaygpOmIuanNvbnBDYWxsYmFjayxoP2JbaF09YltoXS5yZXBsYWNlKGFjLCIkMSIrZSk6Yi5qc29ucCE9PSExJiYoYi51cmwrPSh3Yi50ZXN0KGIudXJsKT8iJiI6Ij8iKStiLmpzb25wKyI9IitlKSxiLmNvbnZlcnRlcnNbInNjcmlwdCBqc29uIl09ZnVuY3Rpb24oKXtyZXR1cm4gZ3x8bS5lcnJvcihlKyIgd2FzIG5vdCBjYWxsZWQiKSxnWzBdfSxiLmRhdGFUeXBlc1swXT0ianNvbiIsZj1hW2VdLGFbZV09ZnVuY3Rpb24oKXtnPWFyZ3VtZW50c30sZC5hbHdheXMoZnVuY3Rpb24oKXthW2VdPWYsYltlXSYmKGIuanNvbnBDYWxsYmFjaz1jLmpzb25wQ2FsbGJhY2ssX2IucHVzaChlKSksZyYmbS5pc0Z1bmN0aW9uKGYpJiZmKGdbMF0pLGc9Zj12b2lkIDB9KSwic2NyaXB0Iik6dm9pZCAwfSksbS5wYXJzZUhUTUw9ZnVuY3Rpb24oYSxiLGMpe2lmKCFhfHwic3RyaW5nIiE9dHlwZW9mIGEpcmV0dXJuIG51bGw7ImJvb2xlYW4iPT10eXBlb2YgYiYmKGM9YixiPSExKSxiPWJ8fHk7dmFyIGQ9dS5leGVjKGEpLGU9IWMmJltdO3JldHVybiBkP1tiLmNyZWF0ZUVsZW1lbnQoZFsxXSldOihkPW0uYnVpbGRGcmFnbWVudChbYV0sYixlKSxlJiZlLmxlbmd0aCYmbShlKS5yZW1vdmUoKSxtLm1lcmdlKFtdLGQuY2hpbGROb2RlcykpfTt2YXIgYmM9bS5mbi5sb2FkO20uZm4ubG9hZD1mdW5jdGlvbihhLGIsYyl7aWYoInN0cmluZyIhPXR5cGVvZiBhJiZiYylyZXR1cm4gYmMuYXBwbHkodGhpcyxhcmd1bWVudHMpO3ZhciBkLGUsZixnPXRoaXMsaD1hLmluZGV4T2YoIiAiKTtyZXR1cm4gaD49MCYmKGQ9bS50cmltKGEuc2xpY2UoaCxhLmxlbmd0aCkpLGE9YS5zbGljZSgwLGgpKSxtLmlzRnVuY3Rpb24oYik/KGM9YixiPXZvaWQgMCk6YiYmIm9iamVjdCI9PXR5cGVvZiBiJiYoZj0iUE9TVCIpLGcubGVuZ3RoPjAmJm0uYWpheCh7dXJsOmEsdHlwZTpmLGRhdGFUeXBlOiJodG1sIixkYXRhOmJ9KS5kb25lKGZ1bmN0aW9uKGEpe2U9YXJndW1lbnRzLGcuaHRtbChkP20oIjxkaXY+IikuYXBwZW5kKG0ucGFyc2VIVE1MKGEpKS5maW5kKGQpOmEpfSkuY29tcGxldGUoYyYmZnVuY3Rpb24oYSxiKXtnLmVhY2goYyxlfHxbYS5yZXNwb25zZVRleHQsYixhXSl9KSx0aGlzfSxtLmVhY2goWyJhamF4U3RhcnQiLCJhamF4U3RvcCIsImFqYXhDb21wbGV0ZSIsImFqYXhFcnJvciIsImFqYXhTdWNjZXNzIiwiYWpheFNlbmQiXSxmdW5jdGlvbihhLGIpe20uZm5bYl09ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMub24oYixhKX19KSxtLmV4cHIuZmlsdGVycy5hbmltYXRlZD1mdW5jdGlvbihhKXtyZXR1cm4gbS5ncmVwKG0udGltZXJzLGZ1bmN0aW9uKGIpe3JldHVybiBhPT09Yi5lbGVtfSkubGVuZ3RofTt2YXIgY2M9YS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7ZnVuY3Rpb24gZGMoYSl7cmV0dXJuIG0uaXNXaW5kb3coYSk/YTo5PT09YS5ub2RlVHlwZT9hLmRlZmF1bHRWaWV3fHxhLnBhcmVudFdpbmRvdzohMX1tLm9mZnNldD17c2V0T2Zmc2V0OmZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrPW0uY3NzKGEsInBvc2l0aW9uIiksbD1tKGEpLG49e307InN0YXRpYyI9PT1rJiYoYS5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiKSxoPWwub2Zmc2V0KCksZj1tLmNzcyhhLCJ0b3AiKSxpPW0uY3NzKGEsImxlZnQiKSxqPSgiYWJzb2x1dGUiPT09a3x8ImZpeGVkIj09PWspJiZtLmluQXJyYXkoImF1dG8iLFtmLGldKT4tMSxqPyhkPWwucG9zaXRpb24oKSxnPWQudG9wLGU9ZC5sZWZ0KTooZz1wYXJzZUZsb2F0KGYpfHwwLGU9cGFyc2VGbG9hdChpKXx8MCksbS5pc0Z1bmN0aW9uKGIpJiYoYj1iLmNhbGwoYSxjLGgpKSxudWxsIT1iLnRvcCYmKG4udG9wPWIudG9wLWgudG9wK2cpLG51bGwhPWIubGVmdCYmKG4ubGVmdD1iLmxlZnQtaC5sZWZ0K2UpLCJ1c2luZyJpbiBiP2IudXNpbmcuY2FsbChhLG4pOmwuY3NzKG4pfX0sbS5mbi5leHRlbmQoe29mZnNldDpmdW5jdGlvbihhKXtpZihhcmd1bWVudHMubGVuZ3RoKXJldHVybiB2b2lkIDA9PT1hP3RoaXM6dGhpcy5lYWNoKGZ1bmN0aW9uKGIpe20ub2Zmc2V0LnNldE9mZnNldCh0aGlzLGEsYil9KTt2YXIgYixjLGQ9e3RvcDowLGxlZnQ6MH0sZT10aGlzWzBdLGY9ZSYmZS5vd25lckRvY3VtZW50O2lmKGYpcmV0dXJuIGI9Zi5kb2N1bWVudEVsZW1lbnQsbS5jb250YWlucyhiLGUpPyh0eXBlb2YgZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QhPT1LJiYoZD1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKSxjPWRjKGYpLHt0b3A6ZC50b3ArKGMucGFnZVlPZmZzZXR8fGIuc2Nyb2xsVG9wKS0oYi5jbGllbnRUb3B8fDApLGxlZnQ6ZC5sZWZ0KyhjLnBhZ2VYT2Zmc2V0fHxiLnNjcm9sbExlZnQpLShiLmNsaWVudExlZnR8fDApfSk6ZH0scG9zaXRpb246ZnVuY3Rpb24oKXtpZih0aGlzWzBdKXt2YXIgYSxiLGM9e3RvcDowLGxlZnQ6MH0sZD10aGlzWzBdO3JldHVybiJmaXhlZCI9PT1tLmNzcyhkLCJwb3NpdGlvbiIpP2I9ZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTooYT10aGlzLm9mZnNldFBhcmVudCgpLGI9dGhpcy5vZmZzZXQoKSxtLm5vZGVOYW1lKGFbMF0sImh0bWwiKXx8KGM9YS5vZmZzZXQoKSksYy50b3ArPW0uY3NzKGFbMF0sImJvcmRlclRvcFdpZHRoIiwhMCksYy5sZWZ0Kz1tLmNzcyhhWzBdLCJib3JkZXJMZWZ0V2lkdGgiLCEwKSkse3RvcDpiLnRvcC1jLnRvcC1tLmNzcyhkLCJtYXJnaW5Ub3AiLCEwKSxsZWZ0OmIubGVmdC1jLmxlZnQtbS5jc3MoZCwibWFyZ2luTGVmdCIsITApfX19LG9mZnNldFBhcmVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe3ZhciBhPXRoaXMub2Zmc2V0UGFyZW50fHxjYzt3aGlsZShhJiYhbS5ub2RlTmFtZShhLCJodG1sIikmJiJzdGF0aWMiPT09bS5jc3MoYSwicG9zaXRpb24iKSlhPWEub2Zmc2V0UGFyZW50O3JldHVybiBhfHxjY30pfX0pLG0uZWFjaCh7c2Nyb2xsTGVmdDoicGFnZVhPZmZzZXQiLHNjcm9sbFRvcDoicGFnZVlPZmZzZXQifSxmdW5jdGlvbihhLGIpe3ZhciBjPS9ZLy50ZXN0KGIpO20uZm5bYV09ZnVuY3Rpb24oZCl7cmV0dXJuIFYodGhpcyxmdW5jdGlvbihhLGQsZSl7dmFyIGY9ZGMoYSk7cmV0dXJuIHZvaWQgMD09PWU/Zj9iIGluIGY/ZltiXTpmLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFtkXTphW2RdOnZvaWQoZj9mLnNjcm9sbFRvKGM/bShmKS5zY3JvbGxMZWZ0KCk6ZSxjP2U6bShmKS5zY3JvbGxUb3AoKSk6YVtkXT1lKX0sYSxkLGFyZ3VtZW50cy5sZW5ndGgsbnVsbCl9fSksbS5lYWNoKFsidG9wIiwibGVmdCJdLGZ1bmN0aW9uKGEsYil7bS5jc3NIb29rc1tiXT1MYShrLnBpeGVsUG9zaXRpb24sZnVuY3Rpb24oYSxjKXtyZXR1cm4gYz8oYz1KYShhLGIpLEhhLnRlc3QoYyk/bShhKS5wb3NpdGlvbigpW2JdKyJweCI6Yyk6dm9pZCAwfSl9KSxtLmVhY2goe0hlaWdodDoiaGVpZ2h0IixXaWR0aDoid2lkdGgifSxmdW5jdGlvbihhLGIpe20uZWFjaCh7cGFkZGluZzoiaW5uZXIiK2EsY29udGVudDpiLCIiOiJvdXRlciIrYX0sZnVuY3Rpb24oYyxkKXttLmZuW2RdPWZ1bmN0aW9uKGQsZSl7dmFyIGY9YXJndW1lbnRzLmxlbmd0aCYmKGN8fCJib29sZWFuIiE9dHlwZW9mIGQpLGc9Y3x8KGQ9PT0hMHx8ZT09PSEwPyJtYXJnaW4iOiJib3JkZXIiKTtyZXR1cm4gVih0aGlzLGZ1bmN0aW9uKGIsYyxkKXt2YXIgZTtyZXR1cm4gbS5pc1dpbmRvdyhiKT9iLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFsiY2xpZW50IithXTo5PT09Yi5ub2RlVHlwZT8oZT1iLmRvY3VtZW50RWxlbWVudCxNYXRoLm1heChiLmJvZHlbInNjcm9sbCIrYV0sZVsic2Nyb2xsIithXSxiLmJvZHlbIm9mZnNldCIrYV0sZVsib2Zmc2V0IithXSxlWyJjbGllbnQiK2FdKSk6dm9pZCAwPT09ZD9tLmNzcyhiLGMsZyk6bS5zdHlsZShiLGMsZCxnKX0sYixmP2Q6dm9pZCAwLGYsbnVsbCl9fSl9KSxtLmZuLnNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZW5ndGh9LG0uZm4uYW5kU2VsZj1tLmZuLmFkZEJhY2ssImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZCYmZGVmaW5lKCJqcXVlcnkiLFtdLGZ1bmN0aW9uKCl7cmV0dXJuIG19KTt2YXIgZWM9YS5qUXVlcnksZmM9YS4kO3JldHVybiBtLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oYil7cmV0dXJuIGEuJD09PW0mJihhLiQ9ZmMpLGImJmEualF1ZXJ5PT09bSYmKGEualF1ZXJ5PWVjKSxtfSx0eXBlb2YgYj09PUsmJihhLmpRdWVyeT1hLiQ9bSksbX0pOwo="></script>
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
17 <meta name="viewport" content="width=device-width, initial-scale=1" />
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
18 <link href="data:text/css;charset=utf-8,html%7Bfont%2Dfamily%3Asans%2Dserif%3B%2Dwebkit%2Dtext%2Dsize%2Dadjust%3A100%25%3B%2Dms%2Dtext%2Dsize%2Dadjust%3A100%25%7Dbody%7Bmargin%3A0%7Darticle%2Caside%2Cdetails%2Cfigcaption%2Cfigure%2Cfooter%2Cheader%2Chgroup%2Cmain%2Cmenu%2Cnav%2Csection%2Csummary%7Bdisplay%3Ablock%7Daudio%2Ccanvas%2Cprogress%2Cvideo%7Bdisplay%3Ainline%2Dblock%3Bvertical%2Dalign%3Abaseline%7Daudio%3Anot%28%5Bcontrols%5D%29%7Bdisplay%3Anone%3Bheight%3A0%7D%5Bhidden%5D%2Ctemplate%7Bdisplay%3Anone%7Da%7Bbackground%2Dcolor%3Atransparent%7Da%3Aactive%2Ca%3Ahover%7Boutline%3A0%7Dabbr%5Btitle%5D%7Bborder%2Dbottom%3A1px%20dotted%7Db%2Cstrong%7Bfont%2Dweight%3A700%7Ddfn%7Bfont%2Dstyle%3Aitalic%7Dh1%7Bmargin%3A%2E67em%200%3Bfont%2Dsize%3A2em%7Dmark%7Bcolor%3A%23000%3Bbackground%3A%23ff0%7Dsmall%7Bfont%2Dsize%3A80%25%7Dsub%2Csup%7Bposition%3Arelative%3Bfont%2Dsize%3A75%25%3Bline%2Dheight%3A0%3Bvertical%2Dalign%3Abaseline%7Dsup%7Btop%3A%2D%2E5em%7Dsub%7Bbottom%3A%2D%2E25em%7Dimg%7Bborder%3A0%7Dsvg%3Anot%28%3Aroot%29%7Boverflow%3Ahidden%7Dfigure%7Bmargin%3A1em%2040px%7Dhr%7Bheight%3A0%3B%2Dwebkit%2Dbox%2Dsizing%3Acontent%2Dbox%3B%2Dmoz%2Dbox%2Dsizing%3Acontent%2Dbox%3Bbox%2Dsizing%3Acontent%2Dbox%7Dpre%7Boverflow%3Aauto%7Dcode%2Ckbd%2Cpre%2Csamp%7Bfont%2Dfamily%3Amonospace%2Cmonospace%3Bfont%2Dsize%3A1em%7Dbutton%2Cinput%2Coptgroup%2Cselect%2Ctextarea%7Bmargin%3A0%3Bfont%3Ainherit%3Bcolor%3Ainherit%7Dbutton%7Boverflow%3Avisible%7Dbutton%2Cselect%7Btext%2Dtransform%3Anone%7Dbutton%2Chtml%20input%5Btype%3Dbutton%5D%2Cinput%5Btype%3Dreset%5D%2Cinput%5Btype%3Dsubmit%5D%7B%2Dwebkit%2Dappearance%3Abutton%3Bcursor%3Apointer%7Dbutton%5Bdisabled%5D%2Chtml%20input%5Bdisabled%5D%7Bcursor%3Adefault%7Dbutton%3A%3A%2Dmoz%2Dfocus%2Dinner%2Cinput%3A%3A%2Dmoz%2Dfocus%2Dinner%7Bpadding%3A0%3Bborder%3A0%7Dinput%7Bline%2Dheight%3Anormal%7Dinput%5Btype%3Dcheckbox%5D%2Cinput%5Btype%3Dradio%5D%7B%2Dwebkit%2Dbox%2Dsizing%3Aborder%2Dbox%3B%2Dmoz%2Dbox%2Dsizing%3Aborder%2Dbox%3Bbox%2Dsizing%3Aborder%2Dbox%3Bpadding%3A0%7Dinput%5Btype%3Dnumber%5D%3A%3A%2Dwebkit%2Dinner%2Dspin%2Dbutton%2Cinput%5Btype%3Dnumber%5D%3A%3A%2Dwebkit%2Douter%2Dspin%2Dbutton%7Bheight%3Aauto%7Dinput%5Btype%3Dsearch%5D%7B%2Dwebkit%2Dbox%2Dsizing%3Acontent%2Dbox%3B%2Dmoz%2Dbox%2Dsizing%3Acontent%2Dbox%3Bbox%2Dsizing%3Acontent%2Dbox%3B%2Dwebkit%2Dappearance%3Atextfield%7Dinput%5Btype%3Dsearch%5D%3A%3A%2Dwebkit%2Dsearch%2Dcancel%2Dbutton%2Cinput%5Btype%3Dsearch%5D%3A%3A%2Dwebkit%2Dsearch%2Ddecoration%7B%2Dwebkit%2Dappearance%3Anone%7Dfieldset%7Bpadding%3A%2E35em%20%2E625em%20%2E75em%3Bmargin%3A0%202px%3Bborder%3A1px%20solid%20silver%7Dlegend%7Bpadding%3A0%3Bborder%3A0%7Dtextarea%7Boverflow%3Aauto%7Doptgroup%7Bfont%2Dweight%3A700%7Dtable%7Bborder%2Dspacing%3A0%3Bborder%2Dcollapse%3Acollapse%7Dtd%2Cth%7Bpadding%3A0%7D%40media%20print%7B%2A%2C%3Aafter%2C%3Abefore%7Bcolor%3A%23000%21important%3Btext%2Dshadow%3Anone%21important%3Bbackground%3A0%200%21important%3B%2Dwebkit%2Dbox%2Dshadow%3Anone%21important%3Bbox%2Dshadow%3Anone%21important%7Da%2Ca%3Avisited%7Btext%2Ddecoration%3Aunderline%7Da%5Bhref%5D%3Aafter%7Bcontent%3A%22%20%28%22%20attr%28href%29%20%22%29%22%7Dabbr%5Btitle%5D%3Aafter%7Bcontent%3A%22%20%28%22%20attr%28title%29%20%22%29%22%7Da%5Bhref%5E%3D%22javascript%3A%22%5D%3Aafter%2Ca%5Bhref%5E%3D%22%23%22%5D%3Aafter%7Bcontent%3A%22%22%7Dblockquote%2Cpre%7Bborder%3A1px%20solid%20%23999%3Bpage%2Dbreak%2Dinside%3Aavoid%7Dthead%7Bdisplay%3Atable%2Dheader%2Dgroup%7Dimg%2Ctr%7Bpage%2Dbreak%2Dinside%3Aavoid%7Dimg%7Bmax%2Dwidth%3A100%25%21important%7Dh2%2Ch3%2Cp%7Borphans%3A3%3Bwidows%3A3%7Dh2%2Ch3%7Bpage%2Dbreak%2Dafter%3Aavoid%7D%2Enavbar%7Bdisplay%3Anone%7D%2Ebtn%3E%2Ecaret%2C%2Edropup%3E%2Ebtn%3E%2Ecaret%7Bborder%2Dtop%2Dcolor%3A%23000%21important%7D%2Elabel%7Bborder%3A1px%20solid%20%23000%7D%2Etable%7Bborder%2Dcollapse%3Acollapse%21important%7D%2Etable%20td%2C%2Etable%20th%7Bbackground%2Dcolor%3A%23fff%21important%7D%2Etable%2Dbordered%20td%2C%2Etable%2Dbordered%20th%7Bborder%3A1px%20solid%20%23ddd%21important%7D%7D%40font%2Dface%7Bfont%2Dfamily%3A%27Glyphicons%20Halflings%27%3Bsrc%3Aurl%28data%3Aapplication%2Fvnd%2Ems%2Dfontobject%3Bbase64%2Cn04AAEFNAAACAAIABAAAAAAABQAAAAAAAAABAJABAAAEAExQAAAAAAAAAAIAAAAAAAAAAAEAAAAAAAAAJxJ%2FLAAAAAAAAAAAAAAAAAAAAAAAACgARwBMAFkAUABIAEkAQwBPAE4AUwAgAEgAYQBsAGYAbABpAG4AZwBzAAAADgBSAGUAZwB1AGwAYQByAAAAeABWAGUAcgBzAGkAbwBuACAAMQAuADAAMAA5ADsAUABTACAAMAAwADEALgAwADAAOQA7AGgAbwB0AGMAbwBuAHYAIAAxAC4AMAAuADcAMAA7AG0AYQBrAGUAbwB0AGYALgBsAGkAYgAyAC4ANQAuADUAOAAzADIAOQAAADgARwBMAFkAUABIAEkAQwBPAE4AUwAgAEgAYQBsAGYAbABpAG4AZwBzACAAUgBlAGcAdQBsAGEAcgAAAAAAQlNHUAAAAAAAAAAAAAAAAAAAAAADAKncAE0TAE0ZAEbuFM3pjM%2FSEdmjKHUbyow8ATBE40IvWA3vTu8LiABDQ%2BpexwUMcm1SMnNryctQSiI1K5ZnbOlXKmnVV5YvRe6RnNMFNCOs1KNVpn6yZhCJkRtVRNzEufeIq7HgSrcx4S8h%2Fv4vnrrKc6oCNxmSk2uKlZQHBii6iKFoH0746ThvkO1kJHlxjrkxs%2BLWORaDQBEtiYJIR5IB9Bi1UyL4Rmr0BNigNkMzlKQmnofBHviqVzUxwdMb3NdCn69hy%2BpRYVKGVS%2F1tnsqv4LL7wCCPZZAZPT4aCShHjHJVNuXbmMrY5LeQaGnvAkXlVrJgKRAUdFjrWEah9XebPeQMj7KS7DIBAFt8ycgC5PLGUOHSE3ErGZCiViNLL5ZARfywnCoZaKQCu6NuFX42AEeKtKUGnr%2FCm2Cy8tpFhBPMW5Fxi4Qm4TkDWh4IWFDClhU2hRWosUWqcKLlgyXB%2BlSHaWaHiWlBAR8SeSgSPCQxdVQgzUixWKSTrIQEbU94viDctkvX%2BVSjJuUmV8L4CXShI11esnp0pjWNZIyxKHS4wVQ2ime1P4RnhvGw0aDN1OLAXGERsB7buFpFGGBAre4QEQR0HOIO5oYH305G%2BKspT%2FFupEGGafCCwxSe6ZUa%2B073rXHnNdVXE6eWvibUS27XtRzkH838mYLMBmYysZTM0EM3A1fbpCBYFccN1B%2FEnCYu%2FTgCGmr7bMh8GfYL%2BBfcLvB0gRagC09w9elfldaIy%2FhNCBLRgBgtCC7jAF63wLSMAfbfAlEggYU0bUA7ACCJmTDpEmJtI78w4%2FBO7dN7JR7J7ZvbYaUbaILSQsRBiF3HGk5fEg6p9unwLvn98r%2BvnsV%2B372uf1xBLq4qU%2F45fTuqaAP%2BpssmCCCTF0mhEow8ZXZOS8D7Q85JsxZ%2BAzok7B7O%2Ff6J8AzYBySZQB%2FQHYUSA%2BEeQhEWiS6AIQzgcsDiER4MjgMBAWDV4AgQ3g1eBgIdweCQmCjJEMkJ%2BPKRWyFHHmg1Wi%2F6xzUgA0LREoKJChwnQa9B%2B5RQZRB3IlBlkAnxyQNaANwHMowzlYSMCBgnbpzvqpl0iTJNCQidDI9ZrSYNIRBhHtUa5YHMHxyGEik9hDE0AKj72AbTCaxtHPUaKZdAZSnQTyjGqGLsmBStCejApUhg4uBMU6mATujEl%2BKdDPbI6Ag4vLr%2BhjY6lbjBeoLKnZl0UZgRX8gTySOeynZVz1wOq7e1hFGYIq%2BMhrGxDLak0PrwYzSXtcuyhXEhwOYofiW%2BEcI%2Fjw8P6IY6ed%2BetAbuqKp5QIapT77LnAe505lMuqL79a0ut4rWexzFttsOsLDy7zvtQzcq3U1qabe7tB0wHWVXji%2BzDbo8x8HyIRUbXnwUcklFv51fvTymiV%2BMXLSmGH9d9%2BaXpD5X6lao41anWGig7IwIdnoBY2ht%2FpO9mClLo4NdXHAsefqWUKlXJkbqPOFhMoR4aiA1BXqhRNbB2Xwi%2B7u%2FjpAoOpKJ0UX24EsrzMfHXViakCNcKjBxuQX8BO0ZqjJ3xXzf%2B61t2VXOSgJ8xu65QKgtN6FibPmPYsXbJRHHqbgATcSZxBqGiDiU4NNNsYBsKD0MIP%2FOfKnlk%2FLkaid%2FO2NbKeuQrwOB2Gq3YHyr6ALgzym5wIBnsdC1ZkoBFZSQXChZvlesPqvK2c5oHHT3Q65jYpNxnQcGF0EHbvYqoFw60WNlXIHQF2HQB7zD6lWjZ9rVqUKBXUT6hrkZOle0RFYII0V5ZYGl1JAP0Ud1fZZMvSomBzJ710j4Me8mjQDwEre5Uv2wQfk1ifDwb5ksuJQQ3xt423lbuQjvoIQByQrNDh1JxGFkOdlJvu%2FgFtuW0wR4cgd%2BZKesSV7QkNE2kw6AV4hoIuC02LGmTomyf8PiO6CZzOTLTPQ%2BHW06H%2Btx%2BbQ8LmDYg1pTFrp2oJXgkZTyeRJZM0C8aE2LpFrNVDuhARsN543%2FFV6klQ6Tv1OoZGXLv0igKrl%2FCmJxRmX7JJbJ998VSIPQRyDBICzl4JJlYHbdql30NvYcOuZ7a10uWRrgoieOdgIm4rlq6vNOQBuqESLbXG5lzdJGHw2m0sDYmODXbYGTfSTGRKpssTO95fothJCjUGQgEL4yKoGAF%2F0SrpUDNn8CBgBcSDQByAeNkCXp4S4Ro2Xh4OeaGRgR66PVOsU8bc6TR5%2FxTcn4IVMLOkXSWiXxkZQCbvKfmoAvQaKjO3EDKwkwqHChCDEM5loQRPd5ACBki1TjF772oaQhQbQ5C0lcWXPFOzrfsDGUXGrpxasbG4iab6eByaQkQfm0VFlP0ZsDkvvqCL6QXMUwCjdMx1ZOyKhTJ7a1GWAdOUcJ8RSejxNVyGs31OKMyRyBVoZFjqIkmKlLQ5eHMeEL4MkUf23cQ%2F1SgRCJ1dk4UdBT7OoyuNgLs0oCd8RnrEIb6QdMxT2QjD4zMrJkfgx5aDMcA4orsTtKCqWb%2FVeyceqa5OGSmB28YwH4rFbkQaLoUN8OQQYnD3w2eXpI4ScQfbCUZiJ4yMOIKLyyTc7BQ4uXUw6Ee6%2FxM%2B4Y67ngNBknxIPwuppgIhFcwJyr6EIj%2BLzNj%2FmfR2vhhRlx0BILZoAYruF0caWQ7YxO66UmeguDREAFHYuC7HJviRgVO6ruJH59h%2FC%2FPkgSle8xNzZJULLWq9JMDTE2fjGE146a1Us6PZDGYle6ldWRqn%2FpdpgHKNGrGIdkRK%2BKPETT9nKT6kLyDI8xd9A1FgWmXWRAIHwZ37WyZHOVyCadJEmMVz0MadMjDrPho%2BEIochkVC2xgGiwwsQ6DMv2P7UXqT4x7CdcYGId2BJQQa85EQKmCmwcRejQ9Bm4oATENFPkxPXILHpMPUyWTI5rjNOsIlmEeMbcOCEqInpXACYQ9DDxmFo9vcmsDblcMtg4tqBerNngkIKaFJmrQAPnq1dEzsMXcwjcHdfdCibcAxxA%2Bq%2Fj9m3LM%2FO7WJka4tSidVCjsvo2lQ%2F2ewyoYyXwAYyr2PlRoR5MpgVmSUIrM3PQxXPbgjBOaDQFIyFMJvx3Pc5RSYj12ySVF9fwFPQu2e2KWVoL9q3Ayv3IzpGHUdvdPdrNUdicjsTQ2ISy7QU3DrEytIjvbzJnAkmANXjAFERA0MUoPF3%2F5KFmW14bBNOhwircYgMqoDpUMcDtCmBE82QM2YtdjVLB4kBuKho%2FbcwQdeboqfQartuU3CsCf%2BcXkgYAqp%2F0Ee3RorAZt0AvvOCSI4JICIlGlsV0bsSid%2FNIEALAAzb6HAgyWHBps6xAOwkJIGcB82CxRQq4sJf3FzA70A%2BTRqcqjEMETCoez3mkPcpnoALs0ugJY8kQwrC%2BJE5ik3w9rzrvDRjAQnqgEVvdGrNwlanR0SOKWzxOJOvLJhcd8Cl4AshACUkv9czdMkJCVQSQhp6kp7StAlpVRpK0t0SW6LHeBJnE2QchB5Ccu8kxRghZXGIgZIiSj7gEKMJDClcnX6hgoqJMwiQDigIXg3ioFLCgDgjPtYHYpsF5EiA4kcnN18MZtOrY866dEQAb0FB34OGKHGZQjwW%2FWDHA60cYFaI%2FPjpzquUqdaYGcIq%2BmLez3WLFFCtNBN2QJcrlcoELgiPku5R5dSlJFaCEqEZle1AQzAKC%2B1SotMcBNyQUFuRHRF6OlimSBgjZeTBCwLyc6A%2BP%2FoFRchXTz5ADknYJHxzrJ5pGuIKRQISU6WyKTBBjD8WozmVYWIsto1AS5rxzKlvJu4E%2FvwOiKxRtCWsDM%2BeTHUrmwrCK5BIfMzGkD%2B0Fk5LzBs0jMYXktNDblB06LMNJ09U8pzSLmo14MS0OMjcdrZ31pyQqxJJpRImlSvfYAK8inkYU52QY2FPEVsjoWewpwhRp5yAuNpkqhdb7ku9Seefl2D0B8SMTFD90xi4CSOwwZy9IKkpMtI3FmFUg3%2FkFutpQGNc3pCR7gvC4sgwbupDu3DyEN%2BW6YGLNM21jpB49irxy9BSlHrVDlnihGKHwPrbVFtc%2Bh1rVQKZduxIyojccZIIcOCmhEnC7UkY68WXKQgLi2JCDQkQWJRQuk60hZp0D3rtCTINSeY9Ej2kIKYfGxwOs4j9qMM7fYZiipzgcf7TamnehqdhsiMiCawXnz4xAbyCkLAx5EGbo3Ax1u3dUIKnTxIaxwQTHehPl3V491H0%2BbC5zgpGz7Io%2BmjdhKlPJ01EeMpM7UsRJMi1nGjmJg35i6bQBAAxjO%2FENJubU2mg3ONySEoWklCwdABETcs7ck3jgiuU9pcKKpbgn%2B3YlzV1FzIkB6pmEDOSSyDfPPlQskznctFji0kpgZjW5RZe6x9kYT4KJcXg0bNiCyif%2BpZACCyRMmYsfiKmN9tSO65F0R2OO6ytlEhY5Sj6uRKfFxw0ijJaAx%2Fk3QgnAFSq27%2F2i4GEBA%2BUvTJKK%2F9eISNvG46Em5RZfjTYLdeD8kdXHyrwId%2FDQZUaMCY4gGbke2C8vfjgV%2FY9kkRQOJIn%2FxM9INZSpiBnqX0Q9GlQPpPKAyO5y%2BW5NMPSRdBCUlmuxl40ZfMCnf2Cp044uI9WLFtCi4YVxKjuRCOBWIb4XbIsGdbo4qtMQnNOQz4XDSui7W%2FN6l54qOynCqD3DpWQ%2BmpD7C40D8BZEWGJX3tlAaZBMj1yjvDYKwCJBa201u6nBKE5UE%2B7QSEhCwrXfbRZylAaAkplhBWX50dumrElePyNMRYUrC99UmcSSNgImhFhDI4BXjMtiqkgizUGCrZ8iwFxU6fQ8GEHCFdLewwxYWxgScAYMdMLmcZR6b7rZl95eQVDGVoUKcRMM1ixXQtXNkBETZkVVPg8LoSrdetHzkuM7DjZRHP02tCxA1fmkXKF3VzfN1pc1cv%2F8lbTIkkYpqKM9VOhp65ktYk%2BQ46myFWBapDfyWUCnsnI00QTBQmuFjMZTcd0V2NQ768Fhpby04k2IzNR1wKabuGJqYWwSly6ocMFGTeeI%2BejsWDYgEvr66QgqdcIbFYDNgsm0x9UHY6SCd5%2B7tpsLpKdvhahIDyYmEJQCqMqtCF6UlrE5GXRmbu%2Bvtm3BFSxI6ND6UxIE7GsGMgWqghXxSnaRJuGFveTcK5ZVSPJyjUxe1dKgI6kNF7EZhIZs8y8FVqwEfbM0Xk2ltORVDKZZM40SD3qQoQe0orJEKwPfZwm3YPqwixhUMOndis6MhbmfvLBKjC8sKKIZKbJk8L11oNkCQzCgvjhyyEiQSuJcgCQSG4Mocfgc0Hkwcjal1UNgP0CBPikYqBIk9tONv4kLtBswH07vUCjEaHiFGlLf8MgXKzSgjp2HolRRccAOh0ILHz9qlGgIFkwAnzHJRjWFhlA7ROwINyB5HFj59PRZHFor6voq7l23EPNRwdWhgawqbivLSjRA4htEYUFkjESu67icTg5S0aW1sOkCiIysfJ9UnIWevOOLGpepcBxy1wEhd2WI3AZg7sr9WBmHWyasxMcvY%2FiOmsLtHSWNUWEGk9hScMPShasUA1AcHOtRZlqMeQ0OzYS9vQvYUjOLrzP07BUAFikcJNMi7gIxEw4pL1G54TcmmmoAQ5s7TGWErJZ2Io4yQ0ljRYhL8H5e62oDtLF8aDpnIvZ5R3GWJyAugdiiJW9hQAVTsnCBHhwu7rkBlBX6r3b7ejEY0k5GGeyKv66v%2B6dg7mcJTrWHbtMywbedYqCQ0FPwoytmSWsL8WTtChZCKKzEF7vP6De4x2BJkkniMgSdWhbeBSLtJZR9CTHetK1xb34AYIJ37OegYIoPVbXgJ%2FqDQK%2BbfCtxQRVKQu77WzOoM6SGL7MaZwCGJVk46aImai9fmam%2BWpHG%2B0BtQPWUgZ7RIAlPq6lkECUhZQ2gqWkMYKcYMYaIc4gYCDFHYa2d1nzp3%2BJ1eCBay8IYZ0wQRKGAqvCuZ%2FUgbQPyllosq%2BXtfKIZOzmeJqRazpmmoP%2F76YfkjzV2NlXTDSBYB04SVlNQsFTbGPk1t%2FI4Jktu0XSgifO2ozFOiwd%2F0SssJDn0dn4xqk4GDTTKX73%2FwQyBLdqgJ%2BWx6AQaba3BA9CKEzjtQYIfAsiYamapq80LAamYjinlKXUkxdpIDk0puXUEYzSalfRibAeDAKpNiqQ0FTwoxuGYzRnisyTotdVTclis1LHRQCy%2FqqL8oUaQzWRxilq5Mi0IJGtMY02cGLD69vGjkj3p6pGePKI8bkBv5evq8SjjyU04vJR2cQXQwSJyoinDsUJHCQ50jrFTT7yRdbdYQMB3MYCb6uBzJ9ewhXYPAIZSXfeEQBZZ3GPN3Nbhh%2FwkvAJLXnQMdi5NYYZ5GHE400GS5rXkOZSQsdZgIbzRnF9ueLnsfQ47wHAsirITnTlkCcuWWIUhJSbpM3wWhXNHvt2xUsKKMpdBSbJnBMcihkoDqAd1Zml%2FR4yrzow1Q2A5G%2Bkzo%2FRhRxQS2lCSDRV8LlYLBOOoo1bF4jwJAwKMK1tWLHlu9i0j4Ig8qVm6wE1DxXwAwQwsaBWUg2pOOol2dHxyt6npwJEdLDDVYyRc2D0HbcbLUJQj8gPevQBUBOUHXPrsAPBERICpnYESeu2OHotpXQxRGlCCtLdIsu23MhZVEoJg8Qumj%2FUMMc34IBqTKLDTp76WzL%2FdMjCxK7MjhiGjeYAC%2Fkj%2FjY%2FRde7hpSM1xChrog6yZ7OWTuD56xBJnGFE%2BpT2ElSyCnJcwVzCjkqeNLfMEJqKW0G7OFIp0G%2B9mh50I9o8k1tpCY0xYqFNIALgIfc2me4n1bmJnRZ89oepgLPT0NTMLNZsvSCZAc3TXaNB07vail36%2FdBySis4m9%2FDR8izaLJW6bWCkVgm5T%2Bius3ZXq4xI%2BGnbveLbdRwF2mNtsrE0JjYc1AXknCOrLSu7Te%2Fr4dPYMCl5qtiHNTn%2BTPbh1jCBHH%2BdMJNhwNgs3nT%2BOhQoQ0vYif56BMG6WowAcHR3DjQolxLzyVekHj00PBAaW7IIAF1EF%2BuRIWyXjQMAs2chdpaKPNaB%2BkSezYt0%2BCA04sOg5vx8Fr7Ofa9sUv87h7SLAUFSzbetCCZ9pmyLt6l6%2FTzoA1%2FZBG9bIUVHLAbi%2FkdBFgYGyGwRQGBpkqCEg2ah9UD6EedEcEL3j4y0BQQCiExEnocA3SZboh%2Bepgd3YsOkHskZwPuQ5OoyA0fTA5AXrHcUOQF%2BzkJHIA7PwCDk1gGVmGUZSSoPhNf%2BTklauz98QofOlCIQ%2FtCD4dosHYPqtPCXB3agggQQIqQJsSkB%2Bqn0rkQ1toJjON%2FOtCIB9RYv3PqRA4C4U68ZMlZn6BdgEvi2ziU%2BTQ6NIw3ej%2BAtDwMGEZk7e2IjxUWKdAxyaw9OCwSmeADTPPleyk6UhGDNXQb%2B%2BW6Uk4q6F7%2Frg6WVTo82IoCxSIsFDrav4EPHphD3u4hR53WKVvYZUwNCCeM4PMBWzK%2BEfIthZOkuAwPo5C5jgoZgn6dUdvx5rIDmd58cXXdKNfw3l%2BwM2UjgrDJeQHhbD7HW2QDoZMCujgIUkk5Fg8VCsdyjOtnGRx8wgKRPZN5dR0zPUyfGZFVihbFRniXZFOZGKPnEQzU3AnD1KfR6weHW2XS6KbPJxUkOTZsAB9vTVp3Le1F8q5l%2BDMcLiIq78jxAImD2pGFw0VHfRatScGlK6SMu8leTmhUSMy8Uhdd6xBiH3Gdman4tjQGLboJfqz6fL2WKHTmrfsKZRYX6BTDjDldKMosaSTLdQS7oDisJNqAUhw1PfTlnacCO8vl8706Km1FROgLDmudzxg%2BEWTiArtHgLsRrAXYWdB0NmToNCJdKm0KWycZQqb%2BMw76Qy29iQ5up%2FX7oyw8QZ75kP5F6iJAJz6KCmqxz8fEa%2FxnsMYcIO%2FvEkGRuMckhr4rIeLrKaXnmIzlNLxbFspOphkcnJdnz%2FChp%2FVlpj2P7jJQmQRwGnltkTV5dbF9fE3%2FfxoSqTROgq9wFUlbuYzYcasE0ouzBo%2BdDCDzxKAfhbAZYxQiHrLzV2iVexnDX%2FQnT1fsT%2Fxuhu1ui5qIytgbGmRoQkeQooO8eJNNZsf0iALur8QxZFH0nCMnjerYQqG1pIfjyVZWxhVRznmmfLG00BcBWJE6hzQWRyFknuJnXuk8A5FRDCulwrWASSNoBtR%2BCtGdkPwYN2o7DOw%2FVGlCZPusRBFXODQdUM5zeHDIVuAJBLqbO%2Ff9Qua%2BpDqEPk230Sob9lEZ8BHiCorjVghuI0lI4JDgHGRDD%2FprQ84B1pVGkIpVUAHCG%2Biz3Bn3qm2AVrYcYWhock4jso5%2BJ7HfHVj4WMIQdGctq3psBCVVzupQOEioBGA2Bk%2BUILT7%2BVoX5mdxxA5fS42gISQVi%2FHTzrgMxu0fY6hE1ocUwwbsbWcezrY2n6S8%2F6cxXkOH4prpmPuFoikTzY7T85C4T2XYlbxLglSv2uLCgFv8Quk%2FwdesUdWPeHYIH0R729JIisN9Apdd4eB10aqwXrPt%2BSu9mA8k8n1sjMwnfsfF2j3jMUzXepSHmZ%2FBfqXvzgUNQQWOXO8YEuFBh4QTYCkOAPxywpYu1VxiDyJmKVcmJPGWk%2Fgc3Pov02StyYDahwmzw3E1gYC9wkupyWfDqDSUMpCTH5e5N8B%2F%2FlHiMuIkTNw4USHrJU67bjXGqNav6PBuQSoqTxc8avHoGmvqNtXzIaoyMIQIiiUHIM64cXieouplhNYln7qgc4wBVAYR104kO%2BCvKqsg4yIUlFNThVUAKZxZt1XA34h3TCUUiXVkZ0w8Hh2R0Z5L0b4LZvPd%2Fp1gi%2F07h8qfwHrByuSxglc9cI4QIg2oqvC%2Fqm0i7tjPLTgDhoWTAKDO2ONW5oe%2B%2FeKB9vZB8K6C25yCZ9RFVMnb6NRdRjyVK57CHHSkJBfnM2%2Fj4ODUwRkqrtBBCrDsDpt8jhZdXoy%2F1BCqw3sSGhgGGy0a5Jw6BP%2FTExoCmNFYjZl248A0osgPyGEmRA%2BfAsqPVaNAfytu0vuQJ7rk3J4kTDTR2AlCHJ5cls26opZM4w3jMULh2YXKpcqGBtuleAlOZnaZGbD6DHzMd6i2oFeJ8z9XYmalg1Szd%2FocZDc1C7Y6vcALJz2lYnTXiWEr2wawtoR4g3jvWUU2Ngjd1cewtFzEvM1NiHZPeLlIXFbBPawxNgMwwAlyNSuGF3zizVeOoC9bag1qRAQKQE%2FEZBWC2J8mnXAN2aTBboZ7HewnObE8CwROudZHmUM5oZ%2FUgd%2FJZQK8lvAm43uDRAbyW8gZ%2BZGq0EVerVGUKUSm%2FIdn8AQHdR4m7bue88WBwft9mSCeMOt1ncBwziOmJYI2ZR7ewNMPiCugmSsE4EyQ%2BQATJG6qORMGd4snEzc6B4shPIo4G1T7PgSm8PY5eUkPdF8JZ0VBtadbHXoJgnEhZQaODPj2gpODKJY5Yp4DOsLBFxWbvXN755KWylJm%2BoOd4zEL9Hpubuy2gyyfxh8oEfFutnYWdfB8PdESLWYvSqbElP9qo3u6KTmkhoacDauMNNjj0oy40DFV7Ql0aZj77xfGl7TJNHnIwgqOkenruYYNo6h724%2BzUQ7%2BvkCpZB%2BpGA562hYQiDxHVWOq0oDQl%2FQsoiY%2BcuI7iWq%2FZIBtHcXJ7kks%2Bh2fCNUPA82BzjnqktNts%2BRLdk1VSu%2BtqEn7QZCCsvEqk6FkfiOYkrsw092J8jsfIuEKypNjLxrKA9kiA19mxBD2suxQKCzwXGws7kEJvlhUiV9tArLIdZW0IORcxEzdzKmjtFhsjKy%2F44XYXdI5noQoRcvjZ1RMPACRqYg2V1%2BOwOepcOknRLLFdYgTkT5UApt%2FJhLM3jeFYprZV%2BZow2g8fP%2BU68hkKFWJj2yBbKqsrp25xkZX1DAjUw52IMYWaOhab8Kp05VrdNftqwRrymWF4OQSjbdfzmRZirK8FMJELEgER2PHjEAN9pGfLhCUiTJFbd5LBkOBMaxLr%2FA1SY9dXFz4RjzoU9ExfJCmx%2FI9FKEGT3n2cmzl2X42L3Jh%2BAbQq6sA%2BSs1kitoa4TAYgKHaoybHUDJ51oETdeI%2F9ThSmjWGkyLi5QAGWhL0BG1UsTyRGRJOldKBrYJeB8ljLJHfATWTEQBXBDnQexOHTB%2BUn44zExFE4vLytcu5NwpWrUxO%2F0ZICUGM7hGABXym0V6ZvDST0E370St9MIWQOTWngeoQHUTdCJUP04spMBMS8LSker9cReVQkULFDIZDFPrhTzBl6sed9wcZQTbL%2BBDqMyaN3RJPh%2Fanbx%2BIv%2BqgQdAa3M9Z5JmvYlh4qop%2BHo1F1W5gbOE9YKLgAnWytXElU4G8GtW47lhgFE6gaSs%2Bgs37sFvi0PPVvA5dnCBgILTwoKd%2F%2BDoL9F6inlM7H4rOTzD79KJgKlZO%2FZgt22UsKhrAaXU5ZcLrAglTVKJEmNJvORGN1vqrcfSMizfpsgbIe9zno%2BgBoKVXgIL%2FVI8dB1O5o%2FR3Suez%2FgD7M781ShjKpIIORM%2FnxG%2BjjhhgPwsn2IoXsPGPqYHXA63zJ07M2GPEykQwJBYLK808qYxuIew4frk52nhCsnCYmXiR6CuapvE1IwRB4%2FQftDbEn%2BAucIr1oxrLabRj9q4ae0%2BfXkHnteAJwXRbVkR0mctVSwEbqhJiMSZUp9DNbEDMmjX22m3ABpkrPQQTP3S1sib5pD2VRKRd%2BeNAjLYyT0hGrdjWJZy24OYXRoWQAIhGBZRxuBFMjjZQhpgrWo8SiFYbojcHO8V5DyscJpLTHyx9Fimassyo5U6WNtquUMYgccaHY5amgR3PQzq3ToNM5ABnoB9kuxsebqmYZm0R9qxJbFXCQ1UPyFIbxoUraTJFDpCk0Wk9GaYJKz%2F6oHwEP0Q14lMtlddQsOAU9zlYdMVHiT7RQP3XCmWYDcHCGbVRHGnHuwzScA0BaSBOGkz3lM8CArjrBsyEoV6Ys4qgDK3ykQQPZ3hCRGNXQTNNXbEb6tDiTDLKOyMzRhCFT%2BmAUmiYbV3YQVqFVp9dorv%2BTsLeCykS2b5yyu8AV7IS9cxcL8z4Kfwp%2BxJyYLv1OsxQCZwTB4a8BZ%2F5EdxTBJthApqyfd9u3ifr%2FWILTqq5VqgwMT9SOxbSGWLQJUUWCVi4k9tho9nEsbUh7U6NUsLmkYFXOhZ0kmamaJLRNJzSj%2Fqn4Mso6zb6iLLBXoaZ6AqeWCjHQm2lztnejYYM2eubnpBdKVLORZhudH3JF1waBJKA9%2BW8EhMj3Kzf0L4vi4k6RoHh3Z5YgmSZmk6ns4fjScjAoL8GoOECgqgYEBYUGFVO4FUv4%2FYtowhEmTs0vrvlD%2FCrisnoBNDAcUi%2FteY7OctFlmARQzjOItrrlKuPO6E2Ox93L4O%2F4DcgV%2FdZ7qR3VBwVQxP1GCieA4RIpweYJ5FoYrHxqRBdJjnqbsikA2Ictbb8vE1GYIo9dacK0REgDX4smy6GAkxlH1yCGGsk%2BtgiDhNKuKu3yNrMdxafmKTF632F8Vx4BNK57GvlFisrkjN9WDAtjsWA0ENT2e2nETUb%2Fn7qwhvGnrHuf5bX6Vh%2Fn3xffU3PeHdR%2BFA92i6ufT3AlyAREoNDh6chiMWTvjKjHDeRhOa9YkOQRq1vQXEMppAQVwHCuIcV2g5rBn6GmZZpTR7vnSD6ZmhdSl176gqKTXu5E%2BYbfL0adwNtHP7dT7t7b46DVZIkzaRJOM%2BS6KcrzYVg%2BT3wSRFRQashjfU18NutrKa%2F7PXbtuJvpIjbgPeqd%2BpjmRw6YKpnANFSQcpzTZgpSNJ6J7uiagAbir%2F8tNXJ%2FOsOnRh6iuIexxrmkIneAgz8QoLmiaJ8sLQrELVK2yn3wOHp57BAZJhDZjTBzyoRAuuZ4eoxHruY1pSb7qq79cIeAdOwin4GdgMeIMHeG%2BFZWYaiUQQyC5b50zKjYw97dFjAeY2I4Bnl105Iku1y0lMA1ZHolLx19uZnRdILcXKlZGQx%2FGdEqSsMRU1BIrFqRcV1qQOOHyxOLXEGcbRtAEsuAC2V4K3p5mFJ22IDWaEkk9ttf5Izb2LkD1MnrSwztXmmD%2FQi%2FEmVEFBfiKGmftsPwVaIoZanlKndMZsIBOskFYpDOq3QUs9aSbAAtL5Dbokus2G4%2FasthNMK5UQKCOhU97oaOYNGsTah%2BjfCKsZnTRn5TbhFX8ghg8CBYt%2FBjeYYYUrtUZ5jVij%2Fop7V5SsbA4mYTOwZ46hqdpbB6Qvq3AS2HHNkC15pTDIcDNGsMPXaBidXYPHc6PJAkRh29Vx8KcgX46LoUQBhRM%2B3SW6Opll%2FwgxxsPgKJKzr5QCmwkUxNbeg6Wj34SUnEzOemSuvS2OetRCO8Tyy%2BQbSKVJcqkia%2BGvDefFwMOmgnD7h81TUtMn%2BmRpyJJ349HhAnoWFTejhpYTL9G8N2nVg1qkXBeoS9Nw2fB27t7trm7d%2FQK7Cr4uoCeOQ7%2F8JfKT77KiDzLImESHw%2F0wf73QeHu74hxv7uihi4fTX%2BXEwAyQG3264dwv17aJ5N335Vt9sdrAXhPOAv8JFvzqyYXwfx8WYJaef1gMl98JRFyl5Mv5Uo%2FoVH5ww5OzLFsiTPDns7fS6EURSSWd%2F92BxMYQ8sBaH%2Bj%2BwthQPdVgDGpTfi%2BJQIWMD8xKqULliRH01rTeyF8x8q%2FGBEEEBrAJMPf25UQwi0b8tmqRXY7kIvNkzrkvRWLnxoGYEJsz8u4oOyMp8cHyaybb1HdMCaLApUE%2B%2F7xLIZGP6H9xuSEXp1zLIdjk5nBaMuV%2FyTDRRP8Y2ww5RO6d2D94o%2B6ucWIqUAvgHIHXhZsmDhjVLczmZ3ca0Cb3PpKwt2UtHVQ0BgFJsqqTsnzZPlKahRUkEu4qmkJt%2Bkqdae76ViWe3STan69yaF9%2BfESD2lcQshLHWVu4ovItXxO69bqC5p1nZLvI8NdQB9s9UNaJGlQ5mG947ipdDA0eTIw%2FA1zEdjWquIsQXXGIVEH0thC5M%2BW9pZe7IhAVnPJkYCCXN5a32HjN6nsvokEqRS44tGIs7s2LVTvcrHAF%2BRVmI8L4HUYk4x%2B67AxSMJKqCg8zrGOgvK9kNMdDrNiUtSWuHFpC8%2Fp5qIQrEo%2FH%2B1l%2F0cAwQ2nKmpWxKcMIuHY44Y6DlkpO48tRuUGBWT0FyHwSKO72Ud%2BtJUfdaZ4CWNijzZtlRa8%2BCkmO%2FEwHYfPZFU%2FhzjFWH7vnzHRMo%2BaF9u8qHSAiEkA2HjoNQPEwHsDKOt6hOoK3Ce%2F%2B%2F9boMWDa44I6FrQhdgS7OnNaSzwxWKZMcyHi6LN4WC6sSj0qm2PSOGBTvDs%2FGWJS6SwEN%2FULwpb4LQo9fYjUfSXRwZkynUazlSpvX9e%2BG2zor8l%2BYaMxSEomDdLHGcD6YVQPegTaA74H8%2BV4WvJkFUrjMLGLlvSZQWvi8%2FQA7yzQ8GPno%2F%2F5SJHRP%2FOqKObPCo81s%2F%2B6WgLqykYpGAgQZhVDEBPXWgU%2FWzFZjKUhSFInufPRiMAUULC6T11yL45ZrRoB4DzOyJShKXaAJIBS9wzLYIoCEcJKQW8GVCx4fihqJ6mshBUXSw3wWVj3grrHQlGNGhIDNNzsxQ3M%2BGWn6ASobIWC%2BLbYOC6UpahVO13Zs2zOzZC8z7FmA05JhUGyBsF4tsG0drcggIFzgg%2Fkpf3%2BCnAXKiMgIE8Jk%2FMhpkc8DUJEUzDSnWlQFme3d0sHZDrg7LavtsEX3cHwjCYA17pMTfx8Ajw9hHscN67hyo%2BRJQ4458RmPywXykkVcW688oVUrQhahpPRvTWPnuI0B%2BSkQu7dCyvLRyFYlC1LG1gRCIvn3rwQeINzZQC2KXq31FaR9UmVV2QeGVqBHjmE%2BVMd3b1fhCynD0pQNhCG6%2FWCDbKPyE7NRQzL3BzQAJ0g09aUzcQA6mUp9iZFK6Sbp%2FYbHjo%2B%2B7%2FWj8S4YNa%2BZdqAw1hDrKWFXv9%2BzaXpf8ZTDSbiqsxnwN%2FCzK5tPkOr4tRh2kY3Bn9JtalbIOI4b3F7F1vPQMfoDcdxMS8CW9m%2FNCW%2FHILTUVWQIPiD0j1A6bo8vsv6P1hCESl2abrSJWDrq5sSzUpwoxaCU9FtJyYH4QFMxDBpkkBR6kn0LMPO%2B5EJ7Z6bCiRoPedRZ%2FP0SSdii7ZnPAtVwwHUidcdyspwncz5uq6vvm4IEDbJVLUFCn%2FLvIHfooUBTkFO130FC7CmmcrKdgDJcid9mvVzsDSibOoXtIf9k6ABle3PmIxejodc4aob0QKS432srrCMndbfD454q52V01G4q913mC5HOsTzWF4h2No1av1VbcUgWAqyoZl%2B11PoFYnNv2HwAODeNRkHj%2B8SF1fcvVBu6MrehHAZK1Gm69ICcTKizykHgGFx7QdowTVAsYEF2tVc0Z6wLryz2FI1sc5By2znJAAmINndoJiB4sfPdPrTC8RnkW7KRCwxC6YvXg5ahMlQuMpoCSXjOlBy0Kij%2BbsCYPbGp8BdCBiLmLSAkEQRaieWo1SYvZIKJGj9Ur%2FeWHjiB7SOVdqMAVmpBvfRiebsFjger7DC%2B8kRFGtNrTrnnGD2GAJb8rQCWkUPYHhwXsjNBSkE6lGWUj5QNhK0DMNM2l%2BkXRZ0KLZaGsFSIdQz%2FHXDxf3%2FTE30%2BDgBKWGWdxElyLccJfEpjsnszECNoDGZpdwdRgCixeg9L4EPhH%2BRptvRMVRaahu4cySjS3P5wxAUCPkmn%2BrhyASpmiTaiDeggaIxYBmtLZDDhiWIJaBgzfCsAGUF1Q1SFZYyXDt9skCaxJsxK2Ms65dmdp5WAZyxik%2FzbrTQk5KmgxCg%2Ff45L0jywebOWUYFJQAJia7XzCV0x89rpp%2Ff3AVWhSPyTanqmik2SkD8A3Ml4NhIGLAjBXtPShwKYfi2eXtrDuKLk4QlSyTw1ftXgwqA2jUuopDl%2B5tfUWZNwBpEPXghzbBggYCw%2Fdhy0ntds2yeHCDKkF%2FYxQjNIL%2FF%2F37jLPHCKBO9ibwYCmuxImIo0ijV2Wbg3kSN2psoe8IsABv3RNFaF9uMyCtCYtqcD%2BqNOhwMlfARQUdJ2tUX%2BMNJqOwIciWalZsmEjt07tfa8ma4cji9sqz%2BQ9hWfmMoKEbIHPOQORbhQRHIsrTYlnVTNvcq1imqmmPDdVDkJgRcTgB8Sb6epCQVmFZe%2BjGDiNJQLWnfx%2BdrTKYjm0G8yH0ZAGMWzEJhUEQ4Maimgf%2Fbkvo8PLVBsZl152y5S8%2BHRDfZIMCbYZ1WDp4yrdchOJw8k6R%2B%2F2pHmydK4NIK2PHdFPHtoLmHxRDwLFb7eB%2BM4zNZcB9NrAgjVyzLM7xyYSY13ykWfIEEd2n5%2FiYp3ZdrCf7fL%2Ben%2BsIJu2W7E30MrAgZBD1rAAbZHPgeAMtKCg3NpSpYQUDWJu9bT3V7tOKv%2BNRiJc8JAKqqgCA%2FPNRBR7ChpiEulyQApMK1AyqcWnpSOmYh6yLiWkGJ2mklCSPIqN7UypWj3dGi5MvsHQ87MrB4VFgypJaFriaHivwcHIpmyi5LhNqtem4q0n8awM19Qk8BOS0EsqGscuuydYsIGsbT5GHnERUiMpKJl4ON7qjB4fEqlGN%2FhCky89232UQCiaeWpDYCJINXjT6xl4Gc7DxRCtgV0i1ma4RgWLsNtnEBRQFqZggCLiuyEydmFd7WlogpkCw5G1x4ft2psm3KAREwVwr1Gzl6RT7FDAqpVal34ewVm3VH4qn5mjGj%2BbYL1NgfLNeXDwtmYSpwzbruDKpTjOdgiIHDVQSb5%2FzBgSMbHLkxWWgghIh9QTFSDILixVwg0Eg1puooBiHAt7DzwJ7m8i8%2Fi%2BjHvKf0QDnnHVkVTIqMvIQImOrzCJwhSR7qYB5gSwL6aWL9hERHCZc4G2%2BJrpgHNB8eCCmcIWIQ6rSdyPCyftXkDlErUkHafHRlkOIjxGbAktz75bnh50dU7YHk%2BMz7wwstg6RFZb%2BTZuSOx1qqP5C66c0mptQmzIC2dlpte7vZrauAMm%2F7RfBYkGtXWGiaWTtwvAQiq2oD4YixPLXE2khB2FRaNRDTk%2B9sZ6K74Ia9VntCpN4BhJGJMT4Z5c5FhSepRCRWmBXqx%2BwhVZC4me4saDs2iNqXMuCl6iAZflH8fscC1sTsy4PHeC%2BXYuqMBMUun5YezKbRKmEPwuK%2BCLzijPEQgfhahQswBBLfg%2FGBgBiI4QwAqzJkkyYAWtjzSg2ILgMAgqxYfwERRo3zruBL9WOryUArSD8sQOcD7fvIODJxKFS615KFPsb68USBEPPj1orNzFY2xoTtNBVTyzBhPbhFH0PI5AtlJBl2aSgNPYzxYLw7XTDBDinmVoENwiGzmngrMo8OmnRP0Z0i0Zrln9DDFcnmOoBZjABaQIbPOJYZGqX%2BRCMlDDbElcjaROLDoualmUIQ88Kekk3iM4OQrADcxi3rJguS4MOIBIgKgXrjd1WkbCdqxJk%2F4efRIFsavZA7KvvJQqp3Iid5Z0NFc5aiMRzGN3vrpBzaMy4JYde3wr96PjN90AYOIbyp6T4zj8LoE66OGcX1Ef4Z3KoWLAUF4BTg7ug%2FAbkG5UNQXAMkQezujSHeir2uTThgd3gpyzDrbnEdDRH2W7U6PeRvBX1ZFMP5RM%2BZu6UUZZD8hDPHldVWntTCNk7To8IeOW9yn2wx0gmurwqC60AOde4r3ETi5pVMSDK8wxhoGAoEX9NLWHIR33VbrbMveii2jAJlrxwytTHbWNu8Y4N8vCCyZjAX%2FpcsfwXbLze2%2BD%2Bu33OGBoJyAAL3jn3RuEcdp5If8O%2Ba4NKWvxOTyDltG0IWoHhwVGe7dKkCWFT%2B%2Btm%2BhaBCikRUUMrMhYKZJKYoVuv%2FbsJzO8DwfVIInQq3g3BYypiz8baogH3r3GwqCwFtZnz4xMjAVOYnyOi5HWbFA8n0qz1OjSpHWFzpQOpvkNETZBGpxN8ybhtqV%2FDMUxd9uFZmBfKXMCn%2FSqkWJyKPnT6lq%2B4zBZni6fYRByJn6OK%2BOgPBGRAJluwGSk4wxjOOzyce%2FPKODwRlsgrVkdcsEiYrqYdXo0Er2GXi2GQZd0tNJT6c9pK1EEJG1zgDJBoTVuCXGAU8BKTvCO%2FcEQ1Wjk3Zzuy90JX4m3O5IlxVFhYkSUwuQB2up7jhvkm%2BbddRQu5F9s0XftGEJ9JSuSk%2BZachCbdU45fEqbugzTIUokwoAKvpUQF%2FCvLbWW5BNQFqFkJg2f30E%2F48StNe5QwBg8zz3YAJ82FZoXBxXSv4QDooDo79NixyglO9AembuBcx5Re3CwOKTHebOPhkmFC7wNaWtoBhFuV4AkEuJ0J%2B1pT0tLkvFVZaNzfhs%2FKd3%2BA9YsImlO4XK4vpCo%2FelHQi%2F9gkFg07xxnuXLt21unCIpDV%2BbbRxb7FC6nWYTsMFF8%2B1LUg4JFjVt3vqbuhHmDKbgQ4e%2BRGizRiO8ky05LQGMdL2IKLSNar0kNG7lHJMaXr5mLdG3nykgj6vB%2FKVijd1ARWkFEf3yiUw1v%2FWaQivVUpIDdSNrrKbjO5NPnxz6qTTGgYg03HgPhDrCFyYZTi3XQw3HXCva39mpLNFtz8AiEhxAJHpWX13gCTAwgm9YTvMeiqetdNQv6IU0hH0G%2BZManTqDLPjyrOse7WiiwOJCG%2BJ0pZYULhN8NILulmYYvmVcV2MjAfA39sGKqGdjpiPo86fecg65UPyXDIAOyOkCx5NQsLeD4gGVjTVDwOHWkbbBW0GeNjDkcSOn2Nq4cEssP54t9D749A7M1AIOBl0Fi0sSO5v3P7LCBrM6ZwFY6kp2FX6AcbGUdybnfChHPyu6WlRZ2Fwv9YM0RMI7kISRgR8HpQSJJOyTfXj%2F6gQKuihPtiUtlCQVPohUgzfezTg8o1b3n9pNZeco1QucaoXe40Fa5JYhqdTspFmxGtW9h5ezLFZs3j%2FN46f%2BS2rjYNC2JySXrnSAFhvAkz9a5L3pza8eYKHNoPrvBRESpxYPJdKVUxBE39nJ1chrAFpy4MMkf0qKgYALctGg1DQI1kIymyeS2AJNT4X240d3IFQb%2F0jQbaHJ2YRK8A%2Bls6WMhWmpCXYG5jqapGs5%2FeOJErxi2%2F2KWVHiPellTgh%2FfNl%2F2KYPKb7DUcAg%2BmCOPQFCiU9Mq%2FWLcU1xxC8aLePFZZlE%2BPCLzf7ey46INWRw2kcXySR9FDgByXzfxiNKwDFbUSMMhALPFSedyjEVM5442GZ4hTrsAEvZxIieSHGSgkwFh%2FnFNdrrFD4tBH4Il7fW6ur4J8Xaz7RW9jgtuPEXQsYk7gcMs2neu3zJwTyUerHKSh1iTBkj2YJh1SSOZL5pLuQbFFAvyO4k1Hxg2h99MTC6cTUkbONQIAnEfGsGkNFWRbuRyyaEZInM5pij73EA9rPIUfU4XoqQpHT9THZkW%2BoKFLvpyvTBMM69tN1Ydwv1LIEhHsC%2BueVG%2Bw%2BkyCPsvV3erRikcscHjZCkccx6VrBkBRusTDDd8847GA7p2Ucy0y0HdSRN6YIBciYa4vuXcAZbQAuSEmzw%2BH%2FAuOx%2BaH%2BtBL88H57D0MsqyiZxhOEQkF%2F8DR1d2hSPMj%2FsNOa5rxcUnBgH8ictv2J%2Bcb4BA4v3MCShdZ2vtK30vAwkobnEWh7rsSyhmos3WC93Gn9C4nnAd%2FPjMMtQfyDNZsOPd6XcAsnBE%2FmRHtHEyJMzJfZFLE9OvQa0i9kUmToJ0ZxknTgdl%2FXPV8xoh0K7wNHHsnBdvFH3sv52lU7UFteseLG%2FVanIvcwycVA7%2BBE1Ulyb20BvwUWZcMTKhaCcmY3ROpvonVMV4N7yBXTL7IDtHzQ4CCcqF66LjF3xUqgErKzolLyCG6Kb7irP%2FMVTCCwGRxfrPGpMMGvPLgJ881PHMNMIO09T5ig7AzZTX%2F5PLlwnJLDAPfuHynSGhV4tPqR3gJ4kg4c06c%2FF1AcjGytKm2Yb5jwMotF7vro4YDLWlnMIpmPg36NgAZsGA0W1spfLSue4xxat0Gdwd0lqDBOgIaMANykwwDKejt5YaNtJYIkrSgu0KjIg0pznY0SCd1qlC6R19g97UrWDoYJGlrvCE05J%2F5wkjpkre727p5PTRX5FGrSBIfJqhJE%2FIS876PaHFkx9pGTH3oaY3jJRvLX9Iy3Edoar7cFvJqyUlOhAEiOSAyYgVEGkzHdug%2BoRHIEOXAExMiTSKU9A6nmRC8mp8iYhwWdP2U%2F5EkFAdPrZw03YA3gSyNUtMZeh7dDCu8pF5x0VORCTgKp07ehy7NZqKTpIC4UJJ89lnboyAfy5OyXzXtuDRbtAFjZRSyGFTpFrXwkpjSLIQIG3N0Vj4BtzK3wdlkBJrO18MNsgseR4BysJilI0wI6ZahLhBFA0XBmV8d4LUzEcNVb0xbLjLTETYN8OEVqNxkt10W614dd1FlFFVTIgB7%2FBQQp1sWlNolpIu4ekxUTBV7NmxOFKEBmmN%2BnA7pvF78%2FRII5ZHA09OAiE%2F66MF6HQ%2BqVEJCHxwymukkNvzqHEh52dULPbVasfQMgTDyBZzx4007YiKdBuUauQOt27Gmy8ISclPmEUCIcuLbkb1mzQSqIa3iE0PJh7UMYQbkpe%2BhXjTJKdldyt2mVPwywoODGJtBV1lJTgMsuSQBlDMwhEKIfrvsxGQjHPCEfNfMAY2oxvyKcKPUbQySkKG6tj9AQyEW3Q5rpaDJ5Sns9ScLKeizPRbvWYAw4bXkrZdmB7CQopCH8NAmqbuciZChHN8lVGaDbCnmddnqO1PQ4ieMYfcSiBE5zzMz%2BJV%2F4eyzrzTEShvqSGzgWimkNxLvUj86iAwcZuIkqdB0VaIB7wncLRmzHkiUQpPBIXbDDLHBlq7vp9xwuC9AiNkIptAYlG7Biyuk8ILdynuUM1cHWJgeB%2BK3wBP%2FineogxkvBNNQ4AkW0hvpBOQGFfeptF2YTR75MexYDUy7Q%2F9uocGsx41O4IZhViw%2F2FvAEuGO5g2kyXBUijAggWM08bRhXg5ijgMwDJy40QeY%2FcQpUDZiIzmvskQpO5G1zyGZA8WByjIQU4jRoFJt56behxtHUUE%2Fom7Rj2psYXGmq3llVOCgGYKNMo4pzwntITtapDqjvQtqpjaJwjHmDzSVGLxMt12gEXAdLi%2FcaHSM3FPRGRf7dB7YC%2BcD2ho6oL2zGDCkjlf%2FDFoQVl8GS%2F56wur3rdV6ggtzZW60MRB3g%2BU1W8o8cvqIpMkctiGVMzXUFI7FacFLrgtdz4mTEr4aRAaQ2AFQaNeG7GX0yOJgMRYFziXdJf24kg%2FgBQIZMG%2FYcPEllRTVNoDYR6oSJ8wQNLuihfw81UpiKPm714bZX1KYjcXJdfclCUOOpvTxr9AAJevTY4HK%2FG7F3mUc3GOAKqh60zM0v34v%2BELyhJZqhkaMA8UMMOU90f8RKEJFj7EqepBVwsRiLbwMo1J2zrE2UYJnsgIAscDmjPjnzI8a719Wxp757wqmSJBjXowhc46QN4RwKIxqEE6E5218OeK7RfcpGjWG1jD7qND%2B%2FGTk6M56Ig4yMsU6LUW1EWE%2BfIYycVV1thldSlbP6ltdC01y3KUfkobkt2q01YYMmxpKRvh1Z48uNKzP%2FIoRIZ%2FF6buOymSnW8gICitpJjKWBscSb9JJKaWkvEkqinAJ2kowKoqkqZftRqfRQlLtKoqvTRDi2vg%2FRrPD%2Fd3a09J8JhGZlEkOM6znTsoMCsuvTmywxTCDhw5dd0GJOHCMPbsj3QLkTE3MInsZsimDQ3HkvthT7U9VA4s6G07sID0FW4SHJmRGwCl%2BMu4xf0ezqeXD2PtPDnwMPo86sbwDV%2B9PWcgFcARUVYm3hrFQrHcgMElFGbSM2A1zUYA3baWfheJp2AINmTJLuoyYD%2FOwA4a6V0ChBN97E8YtDBerUECv0u0TlxR5yhJCXvJxgyM73Bb6pyq0jTFJDZ4p1Am1SA6sh8nADd1hAcGBMfq4d%2FUfwnmBqe0Jun1n1LzrgKuZMAnxA3NtCN7Klf4BH%2B14B7ibBmgt0TGUafVzI4uKlpF7v8NmgNjg90D6QE3tbx8AjSAC%2BOA1YJvclyPKgT27QpIEgVYpbPYGBsnyCNrGz9XUsCHkW1QAHgL2STZk12QGqmvAB0NFteERkvBIH7INDsNW9KKaAYyDMdBEMzJiWaJHZALqDxQDWRntumSDPcplyFiI1oDpT8wbwe01AHhW6%2BvAUUBoGhY3CT2tgwehdPqU%2F4Q7ZLYvhRl%2FogOvR9O2%2BwkkPKW5vCTjD2fHRYXONCoIl4Jh1bZY0ZE1O94mMGn%2FdFSWBWzQ%2FVYk%2BGezi46RgiDv3EshoTmMSlioUK6MQEN8qeyK6FRninyX8ZPeUWjjbMJChn0n%2FyJvrq5bh5UcCAcBYSafTFg7p0jDgrXo2QWLb3WpSOET%2FHh4oSadBTvyDo10IufLzxiMLAnbZ1vcUmj3w7BQuIXjEZXifwukVxrGa9j%2BDXfpi12m1RbzYLg9J2wFergEwOxFyD0%2FJstNK06ZN2XdZSGWxcJODpQHOq4iKqjqkJUmPu1VczL5xTGUfCgLEYyNBCCbMBFT%2FcUP6pE%2FmujnHsSDeWxMbhrNilS5MyYR0nJyzanWXBeVcEQrRIhQeJA6Xt4f2eQESNeLwmC10WJVHqwx8SSyrtAAjpGjidcj1E2FYN0LObUcFQhafUKTiGmHWRHGsFCB%2BHEXgrzJEB5bp0QiF8ZHh11nFX8AboTD0PS4O1LqF8XBks2MpjsQnwKHF6HgaKCVLJtcr0XjqFMRGfKv8tmmykhLRzu%2BvqQ02%2BKpJBjaLt9ye1Ab%2BBbEBhy4EVdIJDrL2naV0o4wU8YZ2Lq04FG1mWCKC%2BUwkXOoAjneU%2FxHplMQo2cXUlrVNqJYczgYlaOEczVCs%2FOCgkyvLmTmdaBJc1iBLuKwmr6qtRnhowngsDxhzKFAi02tf8bmET8BO27ovJKF1plJwm3b0JpMh38%2BxsrXXg7U74QUM8ZCIMOpXujHntKdaRtsgyEZl5MClMVMMMZkZLNxH9%2Bb8fH6%2Bb8Lev30A9TuEVj9CqAdmwAAHBPbfOBFEATAPZ2CS0OH1Pj%2F0Q7PFUcC8hDrxESWdfgFRm%2B7vvWbkEppHB4T%2F1ApWnlTIqQwjcPl0VgS1yHSmD0OdsCVST8CQVwuiew1Y%2Bg3QGFjNMzwRB2DSsAk26cmA8lp2wIU4p93AUBiUHFGOxOajAqD7Gm6NezNDjYzwLOaSXRBYcWipTSONHjUDXCY4mMI8XoVCR%2FRrs%2FJLKXgEx%2BqkmeDlFOD1%2FyTQNDClRuiUyKYCllfMiQiyFkmuTz2vLsBNyRW%2Bxz%2B5FElFxWB28VjYIGZ0Yd%2B5wIjkcoMaggxswbT0pCmckRAErbRlIlcOGdBo4djTNO8FAgQ%2BlT6vPS60BwTRSUAM3ddkEAZiwtEyArrkiDRnS7LJ%2B2hwbzd2YDQagSgACpsovmjil5wfPuXq3GuH0CyE7FK3M4FgRaFoIkaodORrPx1%2BJpI9psyNYIFuJogZa0%2F1AhOWdlHQxdAgbwacsHqPZo8u%2FngAH2GmaTdhYnBfSDbBfh8CHq6Bx5bttP2%2BRdM%2BMAaYaZ0Y%2FADkbNCZuAyAVQa2OcXOeICmDn9Q%2FeFkDeFQg5MgHEDXq%2FtVjj%2Bjtd26nhaaolWxs1ixSUgOBwrDhRIGOLyOVk2%2FBc0UxvseQCO2pQ2i%2BKrfhu%2FWeBovNb5dJxQtJRUDv2mCwYVpNl2efQM9xQHnK0JwLYt%2FU0Wf%2BphiA4uw8G91slC832pmOTCAoZXohg1fewCZqLBhkOUBofBWpMPsqg7XEXgPfAlDo2U5WXjtFdS87PIqClCK5nW6adCeXPkUiTGx0emOIDQqw1yFYGHEVx20xKjJVYe0O8iLmnQr3FA9nSIQilUKtJ4ZAdcTm7%2BExseJauyqo30hs%2B1qSW211A1SFAOUgDlCGq7eTIcMAeyZkV1SQJ4j%2Fe1Smbq4HcjqgFbLAGLyKxlMDMgZavK5NAYH19Olz3la%2FQCTiVelFnU6O%2FGCvykqS%2FwZJDhKN9gBtSOp%2F1SP5VRgJcoVj%2Bkmf2wBgv4gjrgARBWiURYx8xENV3bEVUAAWWD3dYDKAIWk5opaCFCMR5ZjJExiCAw7gYiSZ2rkyTce4eNMY3lfGn%2B8p6%2BvBckGlKEXnA6Eota69OxDO9oOsJoy28BXOR0UoXNRaJD5ceKdlWMJlOFzDdZNpc05tkMGQtqeNF2lttZqNco1VtwXgRstLSQ6tSPChgqtGV5h2DcDReIQadaNRR6AsAYKL5gSFsCJMgfsaZ7DpKh8mg8Wz8V7H%2BgDnLuMxaWEIUPevIbClgap4dqmVWSrPgVYCzAoZHIa5z2Ocx1D%2FGvDOEqMOKLrMefWIbSWHZ6jbgA8qVBhYNHpx0P%2BjAgN5TB3haSifDcApp6yymEi6Ij%2FGsEpDYUgcHATJUYDUAmC1SCkJ4cuZXSAP2DEpQsGUjQmKJfJOvlC2x%2FpChkOyLW7KEoMYc5FDC4v2FGqSoRWiLsbPCiyg1U5yiHZVm1XLkHMMZL11%2Fyxyw0UnGig3MFdZklN5FI%2FqiT65T%2BjOXOdO7XbgWurOAZR6Cv9uu1cm5LjkXX4xi6mWn5r5NjBS0gTliHhMZI2WNqSiSphEtiCAwnafS11JhseDGHYQ5%2BbqWiAYiAv6Jsf79%2FVUs4cIl%2Bn6%2BWOjcgB%2F2l5TreoAV2717JzZbQIR0W1cl%2FdEqCy5kJ3ZSIHuU0vBoHooEpiHeQWVkkkOqRX27eD1FWw4BfO9CJDdKoSogQi3hAAwsPRFrN5RbX7bqLdBJ9JYMohWrgJKHSjVl1sy2xAG0E3sNyO0oCbSGOxCNBRRXTXenYKuwAoDLfnDcQaCwehUOIDiHAu5m5hMpKeKM4sIo3vxACakIxKoH2YWF2QM84e6F5C5hJU4g8uxuFOlAYnqtwxmHyNEawLW%2FPhoawJDrGAP0JYWHgAVUByo%2FbGdiv2T2EMg8gsS14%2FrAdzlOYazFE7w4OzxeKiWdm3nSOnQRRKXSlVo8HEAbBfyJMKqoq%2BSCcTSx5NDtbFwNlh8VhjGGDu7JG5%2FTAGAvniQSSUog0pNzTim8Owc6QTuSKSTXlQqwV3eiEnklS3LeSXYPXGK2VgeZBqNcHG6tZHvA3vTINhV0ELuQdp3t1y9%2BogD8Kk%2FW7QoRN1UWPqM4%2BxdygkFDPLoTaumKReKiLWoPHOfY54m3qPx4c%2B4pgY3MRKKbljG8w4wvz8pxk3AqKsy4GMAkAtmRjRMsCxbb4Q2Ds0Ia9ci8cMT6DmsJG00XaHCIS%2Bo3F8YVVeikw13w%2BOEDaCYYhC0ZE54kA4jpjruBr5STWeqQG6M74HHL6TZ3lXrd99ZX%2B%2B7LhNatQaZosuxEf5yRA15S9gPeHskBIq3Gcw81AGb9%2FO53DYi%2F5CsQ51EmEh8Rkg4vOciClpy4d04eYsfr6fyQkBmtD%2BP8sNh6e%2BXYHJXT%2FlkXxT4KXU5F2sGxYyzfniMMQkb9OjDN2C8tRRgTyL7GwozH14PrEUZc6oz05Emne3Ts5EG7WolDmU8OB1LDG3VrpQxp%2BpT0KYV5dGtknU64JhabdqcVQbGZiAxQAnvN1u70y1AnmvOSPgLI6uB4AuDGhmAu3ATkJSw7OtS%2F2ToPjqkaq62%2F7WFG8advGlRRqxB9diP07JrXowKR9tpRa%2BjGJ91zxNTT1h8I2PcSfoUPtd7NejVoH03EUcqSBuFZPkMZhegHyo2ZAITovmm3zAIdGFWxoNNORiMRShgwdYwFzkPw5PA4a5MIIQpmq%2Bnsp3YMuXt%2FGkXxLx%2FP6%2BZJS0lFyz4MunC3eWSGE8xlCQrKvhKUPXr0hjpAN9ZK4PfEDrPMfMbGNWcHDzjA7ngMxTPnT7GMHar%2BgMQQ3NwHCv4zH4BIMYvzsdiERi6gebRmerTsVwZJTRsL8dkZgxgRxmpbgRcud%2BYlCIRpPwHShlUSwuipZnx9QCsEWziVazdDeKSYU5CF7UVPAhLer3CgJOQXl%2Fzh575R5rsrmRnKAzq4POFdgbYBuEviM4%2BLVC15ssLNFghbTtHWerS1hDt5s4qkLUha%2FqpZXhWh1C6lTQAqCNQnaDjS7UGFBC6wTu8yFnKJnExCnAs3Ok9yj5KpfZESQ4lTy5pTGTnkAUpxI%2ByjEldJfSo4y0QhG4i4IwkRFGcjWY8%2BEzgYYJUK7BXQksLxAww%2FYYWBMhJILB9e8ePEJ4OP7z%2B4%2FwOQDl64iOYDp26DaONPxpKtBxq%2FaTzRGarm3VkPYTLJKx6Z%2FMw2YbBGseJhPMwhhNswrIkyvV2BYzrvZbxLpKwcWJhYmFtVZ%2BlPEq91FzVp1HlQY1bZVLqeNR9SAUn6n0E28k%2FUuGkNpP1DBI5ch%2FEehZfjUQ9aE41NhETExoPT2gGQz0IhWJbEOvTQ4wgcXCHHFBhewYUiFHuhRSAUVmEHeCRQHQkXGFwkAgyzREJCVN7TRnTon36Zw3tPhx4EALwNdwDv%2BJ41YSP4B2CQqz0EFgARZ4ESgBHQgROwAVn9GTI%2BHYexTUevLUeta4%2FDqKrbMVS%2BYqb8hUwYCrlgKtmAq1YCrFgKrd4qpXiqZcKn1oqdWipjYKpWwVPVYqW6xUpVipKqFR3QKjagVEtAqHpxUMTitsnFaJOKx2cVhswq35RVpyiq9lFVNIKnOQVMkgqtYxVNxiqQjFS7GKlSIVIsQqPIhUWwioigFQ%2B%2BKkN8VHr49HDw9Ebo9EDo9DTo9Crg9BDg9%2FWx7gWx7YWwlobYrOGxWPNisAaAHEyALpkAVDIAeWAArsABVXACYuAD5cAF6wAKFQAQqgAbVAAsoAAlQAUaYAfkwAvogBWQACOgAD9AAHSAAKT4GUdMiOvFngBTwCn2AZ7Dv6B6k%2F90B8%2ByRnkV144AIBoAMTQATGgAjNAA4YABgwABZgB%2FmQCwyAVlwCguASlwCEuAQFwB4uAMlwBYuAJlQAUVAAhUD2KgdpUDaJgaRMDFJgX5MC1JgWJEAokQCWRAHxEAWkQBMRADpEAMkQAYROAEecC484DRpwBDTnwNOdw05tjTmiNOYwtswhYFwLA7BYG4LA2BYGOLAwRYFuLAsxYFQJAohIEyJAMwkAwiQC0JAJgkAeiQBkJAFokAPCQA0JABwcD4Dgc4cDdDgaYcDIDgYgUC6CgWgUClCgUYUAVBQBOFAEYMALgwAgDA9QYAdIn8AZzeBB2L5EcWrenUT1KXienEsuJJ7x5U8XlTjc1NVzUyXFTGb1LlpUtWlTDIjqwE4LsagowoCi2gJLKAkpoBgJQNpAIhNqaEoneI6kiiqQ6Go%2Fn6j0cS%2Ba2gEU8gIHJ%2BBwfgZX4GL%2BBd%2FgW34FZ%2BBS%2FgUH4FN6BTegTvoEv6BJegRnYEF2A79gOvYDl2BdEjCkqkGtwXp0LNToIskOTXzh%2FF062yJ7AAAAEDAWAAABWhJ%2BKPEIJgBFxMVP7w2QJBGHASQnOBKXKFIdUK4igKA9IEaYJg%29%3Bsrc%3Aurl%28data%3Aapplication%2Fvnd%2Ems%2Dfontobject%3Bbase64%2Cn04AAEFNAAACAAIABAAAAAAABQAAAAAAAAABAJABAAAEAExQAAAAAAAAAAIAAAAAAAAAAAEAAAAAAAAAJxJ%2FLAAAAAAAAAAAAAAAAAAAAAAAACgARwBMAFkAUABIAEkAQwBPAE4AUwAgAEgAYQBsAGYAbABpAG4AZwBzAAAADgBSAGUAZwB1AGwAYQByAAAAeABWAGUAcgBzAGkAbwBuACAAMQAuADAAMAA5ADsAUABTACAAMAAwADEALgAwADAAOQA7AGgAbwB0AGMAbwBuAHYAIAAxAC4AMAAuADcAMAA7AG0AYQBrAGUAbwB0AGYALgBsAGkAYgAyAC4ANQAuADUAOAAzADIAOQAAADgARwBMAFkAUABIAEkAQwBPAE4AUwAgAEgAYQBsAGYAbABpAG4AZwBzACAAUgBlAGcAdQBsAGEAcgAAAAAAQlNHUAAAAAAAAAAAAAAAAAAAAAADAKncAE0TAE0ZAEbuFM3pjM%2FSEdmjKHUbyow8ATBE40IvWA3vTu8LiABDQ%2BpexwUMcm1SMnNryctQSiI1K5ZnbOlXKmnVV5YvRe6RnNMFNCOs1KNVpn6yZhCJkRtVRNzEufeIq7HgSrcx4S8h%2Fv4vnrrKc6oCNxmSk2uKlZQHBii6iKFoH0746ThvkO1kJHlxjrkxs%2BLWORaDQBEtiYJIR5IB9Bi1UyL4Rmr0BNigNkMzlKQmnofBHviqVzUxwdMb3NdCn69hy%2BpRYVKGVS%2F1tnsqv4LL7wCCPZZAZPT4aCShHjHJVNuXbmMrY5LeQaGnvAkXlVrJgKRAUdFjrWEah9XebPeQMj7KS7DIBAFt8ycgC5PLGUOHSE3ErGZCiViNLL5ZARfywnCoZaKQCu6NuFX42AEeKtKUGnr%2FCm2Cy8tpFhBPMW5Fxi4Qm4TkDWh4IWFDClhU2hRWosUWqcKLlgyXB%2BlSHaWaHiWlBAR8SeSgSPCQxdVQgzUixWKSTrIQEbU94viDctkvX%2BVSjJuUmV8L4CXShI11esnp0pjWNZIyxKHS4wVQ2ime1P4RnhvGw0aDN1OLAXGERsB7buFpFGGBAre4QEQR0HOIO5oYH305G%2BKspT%2FFupEGGafCCwxSe6ZUa%2B073rXHnNdVXE6eWvibUS27XtRzkH838mYLMBmYysZTM0EM3A1fbpCBYFccN1B%2FEnCYu%2FTgCGmr7bMh8GfYL%2BBfcLvB0gRagC09w9elfldaIy%2FhNCBLRgBgtCC7jAF63wLSMAfbfAlEggYU0bUA7ACCJmTDpEmJtI78w4%2FBO7dN7JR7J7ZvbYaUbaILSQsRBiF3HGk5fEg6p9unwLvn98r%2BvnsV%2B372uf1xBLq4qU%2F45fTuqaAP%2BpssmCCCTF0mhEow8ZXZOS8D7Q85JsxZ%2BAzok7B7O%2Ff6J8AzYBySZQB%2FQHYUSA%2BEeQhEWiS6AIQzgcsDiER4MjgMBAWDV4AgQ3g1eBgIdweCQmCjJEMkJ%2BPKRWyFHHmg1Wi%2F6xzUgA0LREoKJChwnQa9B%2B5RQZRB3IlBlkAnxyQNaANwHMowzlYSMCBgnbpzvqpl0iTJNCQidDI9ZrSYNIRBhHtUa5YHMHxyGEik9hDE0AKj72AbTCaxtHPUaKZdAZSnQTyjGqGLsmBStCejApUhg4uBMU6mATujEl%2BKdDPbI6Ag4vLr%2BhjY6lbjBeoLKnZl0UZgRX8gTySOeynZVz1wOq7e1hFGYIq%2BMhrGxDLak0PrwYzSXtcuyhXEhwOYofiW%2BEcI%2Fjw8P6IY6ed%2BetAbuqKp5QIapT77LnAe505lMuqL79a0ut4rWexzFttsOsLDy7zvtQzcq3U1qabe7tB0wHWVXji%2BzDbo8x8HyIRUbXnwUcklFv51fvTymiV%2BMXLSmGH9d9%2BaXpD5X6lao41anWGig7IwIdnoBY2ht%2FpO9mClLo4NdXHAsefqWUKlXJkbqPOFhMoR4aiA1BXqhRNbB2Xwi%2B7u%2FjpAoOpKJ0UX24EsrzMfHXViakCNcKjBxuQX8BO0ZqjJ3xXzf%2B61t2VXOSgJ8xu65QKgtN6FibPmPYsXbJRHHqbgATcSZxBqGiDiU4NNNsYBsKD0MIP%2FOfKnlk%2FLkaid%2FO2NbKeuQrwOB2Gq3YHyr6ALgzym5wIBnsdC1ZkoBFZSQXChZvlesPqvK2c5oHHT3Q65jYpNxnQcGF0EHbvYqoFw60WNlXIHQF2HQB7zD6lWjZ9rVqUKBXUT6hrkZOle0RFYII0V5ZYGl1JAP0Ud1fZZMvSomBzJ710j4Me8mjQDwEre5Uv2wQfk1ifDwb5ksuJQQ3xt423lbuQjvoIQByQrNDh1JxGFkOdlJvu%2FgFtuW0wR4cgd%2BZKesSV7QkNE2kw6AV4hoIuC02LGmTomyf8PiO6CZzOTLTPQ%2BHW06H%2Btx%2BbQ8LmDYg1pTFrp2oJXgkZTyeRJZM0C8aE2LpFrNVDuhARsN543%2FFV6klQ6Tv1OoZGXLv0igKrl%2FCmJxRmX7JJbJ998VSIPQRyDBICzl4JJlYHbdql30NvYcOuZ7a10uWRrgoieOdgIm4rlq6vNOQBuqESLbXG5lzdJGHw2m0sDYmODXbYGTfSTGRKpssTO95fothJCjUGQgEL4yKoGAF%2F0SrpUDNn8CBgBcSDQByAeNkCXp4S4Ro2Xh4OeaGRgR66PVOsU8bc6TR5%2FxTcn4IVMLOkXSWiXxkZQCbvKfmoAvQaKjO3EDKwkwqHChCDEM5loQRPd5ACBki1TjF772oaQhQbQ5C0lcWXPFOzrfsDGUXGrpxasbG4iab6eByaQkQfm0VFlP0ZsDkvvqCL6QXMUwCjdMx1ZOyKhTJ7a1GWAdOUcJ8RSejxNVyGs31OKMyRyBVoZFjqIkmKlLQ5eHMeEL4MkUf23cQ%2F1SgRCJ1dk4UdBT7OoyuNgLs0oCd8RnrEIb6QdMxT2QjD4zMrJkfgx5aDMcA4orsTtKCqWb%2FVeyceqa5OGSmB28YwH4rFbkQaLoUN8OQQYnD3w2eXpI4ScQfbCUZiJ4yMOIKLyyTc7BQ4uXUw6Ee6%2FxM%2B4Y67ngNBknxIPwuppgIhFcwJyr6EIj%2BLzNj%2FmfR2vhhRlx0BILZoAYruF0caWQ7YxO66UmeguDREAFHYuC7HJviRgVO6ruJH59h%2FC%2FPkgSle8xNzZJULLWq9JMDTE2fjGE146a1Us6PZDGYle6ldWRqn%2FpdpgHKNGrGIdkRK%2BKPETT9nKT6kLyDI8xd9A1FgWmXWRAIHwZ37WyZHOVyCadJEmMVz0MadMjDrPho%2BEIochkVC2xgGiwwsQ6DMv2P7UXqT4x7CdcYGId2BJQQa85EQKmCmwcRejQ9Bm4oATENFPkxPXILHpMPUyWTI5rjNOsIlmEeMbcOCEqInpXACYQ9DDxmFo9vcmsDblcMtg4tqBerNngkIKaFJmrQAPnq1dEzsMXcwjcHdfdCibcAxxA%2Bq%2Fj9m3LM%2FO7WJka4tSidVCjsvo2lQ%2F2ewyoYyXwAYyr2PlRoR5MpgVmSUIrM3PQxXPbgjBOaDQFIyFMJvx3Pc5RSYj12ySVF9fwFPQu2e2KWVoL9q3Ayv3IzpGHUdvdPdrNUdicjsTQ2ISy7QU3DrEytIjvbzJnAkmANXjAFERA0MUoPF3%2F5KFmW14bBNOhwircYgMqoDpUMcDtCmBE82QM2YtdjVLB4kBuKho%2FbcwQdeboqfQartuU3CsCf%2BcXkgYAqp%2F0Ee3RorAZt0AvvOCSI4JICIlGlsV0bsSid%2FNIEALAAzb6HAgyWHBps6xAOwkJIGcB82CxRQq4sJf3FzA70A%2BTRqcqjEMETCoez3mkPcpnoALs0ugJY8kQwrC%2BJE5ik3w9rzrvDRjAQnqgEVvdGrNwlanR0SOKWzxOJOvLJhcd8Cl4AshACUkv9czdMkJCVQSQhp6kp7StAlpVRpK0t0SW6LHeBJnE2QchB5Ccu8kxRghZXGIgZIiSj7gEKMJDClcnX6hgoqJMwiQDigIXg3ioFLCgDgjPtYHYpsF5EiA4kcnN18MZtOrY866dEQAb0FB34OGKHGZQjwW%2FWDHA60cYFaI%2FPjpzquUqdaYGcIq%2BmLez3WLFFCtNBN2QJcrlcoELgiPku5R5dSlJFaCEqEZle1AQzAKC%2B1SotMcBNyQUFuRHRF6OlimSBgjZeTBCwLyc6A%2BP%2FoFRchXTz5ADknYJHxzrJ5pGuIKRQISU6WyKTBBjD8WozmVYWIsto1AS5rxzKlvJu4E%2FvwOiKxRtCWsDM%2BeTHUrmwrCK5BIfMzGkD%2B0Fk5LzBs0jMYXktNDblB06LMNJ09U8pzSLmo14MS0OMjcdrZ31pyQqxJJpRImlSvfYAK8inkYU52QY2FPEVsjoWewpwhRp5yAuNpkqhdb7ku9Seefl2D0B8SMTFD90xi4CSOwwZy9IKkpMtI3FmFUg3%2FkFutpQGNc3pCR7gvC4sgwbupDu3DyEN%2BW6YGLNM21jpB49irxy9BSlHrVDlnihGKHwPrbVFtc%2Bh1rVQKZduxIyojccZIIcOCmhEnC7UkY68WXKQgLi2JCDQkQWJRQuk60hZp0D3rtCTINSeY9Ej2kIKYfGxwOs4j9qMM7fYZiipzgcf7TamnehqdhsiMiCawXnz4xAbyCkLAx5EGbo3Ax1u3dUIKnTxIaxwQTHehPl3V491H0%2BbC5zgpGz7Io%2BmjdhKlPJ01EeMpM7UsRJMi1nGjmJg35i6bQBAAxjO%2FENJubU2mg3ONySEoWklCwdABETcs7ck3jgiuU9pcKKpbgn%2B3YlzV1FzIkB6pmEDOSSyDfPPlQskznctFji0kpgZjW5RZe6x9kYT4KJcXg0bNiCyif%2BpZACCyRMmYsfiKmN9tSO65F0R2OO6ytlEhY5Sj6uRKfFxw0ijJaAx%2Fk3QgnAFSq27%2F2i4GEBA%2BUvTJKK%2F9eISNvG46Em5RZfjTYLdeD8kdXHyrwId%2FDQZUaMCY4gGbke2C8vfjgV%2FY9kkRQOJIn%2FxM9INZSpiBnqX0Q9GlQPpPKAyO5y%2BW5NMPSRdBCUlmuxl40ZfMCnf2Cp044uI9WLFtCi4YVxKjuRCOBWIb4XbIsGdbo4qtMQnNOQz4XDSui7W%2FN6l54qOynCqD3DpWQ%2BmpD7C40D8BZEWGJX3tlAaZBMj1yjvDYKwCJBa201u6nBKE5UE%2B7QSEhCwrXfbRZylAaAkplhBWX50dumrElePyNMRYUrC99UmcSSNgImhFhDI4BXjMtiqkgizUGCrZ8iwFxU6fQ8GEHCFdLewwxYWxgScAYMdMLmcZR6b7rZl95eQVDGVoUKcRMM1ixXQtXNkBETZkVVPg8LoSrdetHzkuM7DjZRHP02tCxA1fmkXKF3VzfN1pc1cv%2F8lbTIkkYpqKM9VOhp65ktYk%2BQ46myFWBapDfyWUCnsnI00QTBQmuFjMZTcd0V2NQ768Fhpby04k2IzNR1wKabuGJqYWwSly6ocMFGTeeI%2BejsWDYgEvr66QgqdcIbFYDNgsm0x9UHY6SCd5%2B7tpsLpKdvhahIDyYmEJQCqMqtCF6UlrE5GXRmbu%2Bvtm3BFSxI6ND6UxIE7GsGMgWqghXxSnaRJuGFveTcK5ZVSPJyjUxe1dKgI6kNF7EZhIZs8y8FVqwEfbM0Xk2ltORVDKZZM40SD3qQoQe0orJEKwPfZwm3YPqwixhUMOndis6MhbmfvLBKjC8sKKIZKbJk8L11oNkCQzCgvjhyyEiQSuJcgCQSG4Mocfgc0Hkwcjal1UNgP0CBPikYqBIk9tONv4kLtBswH07vUCjEaHiFGlLf8MgXKzSgjp2HolRRccAOh0ILHz9qlGgIFkwAnzHJRjWFhlA7ROwINyB5HFj59PRZHFor6voq7l23EPNRwdWhgawqbivLSjRA4htEYUFkjESu67icTg5S0aW1sOkCiIysfJ9UnIWevOOLGpepcBxy1wEhd2WI3AZg7sr9WBmHWyasxMcvY%2FiOmsLtHSWNUWEGk9hScMPShasUA1AcHOtRZlqMeQ0OzYS9vQvYUjOLrzP07BUAFikcJNMi7gIxEw4pL1G54TcmmmoAQ5s7TGWErJZ2Io4yQ0ljRYhL8H5e62oDtLF8aDpnIvZ5R3GWJyAugdiiJW9hQAVTsnCBHhwu7rkBlBX6r3b7ejEY0k5GGeyKv66v%2B6dg7mcJTrWHbtMywbedYqCQ0FPwoytmSWsL8WTtChZCKKzEF7vP6De4x2BJkkniMgSdWhbeBSLtJZR9CTHetK1xb34AYIJ37OegYIoPVbXgJ%2FqDQK%2BbfCtxQRVKQu77WzOoM6SGL7MaZwCGJVk46aImai9fmam%2BWpHG%2B0BtQPWUgZ7RIAlPq6lkECUhZQ2gqWkMYKcYMYaIc4gYCDFHYa2d1nzp3%2BJ1eCBay8IYZ0wQRKGAqvCuZ%2FUgbQPyllosq%2BXtfKIZOzmeJqRazpmmoP%2F76YfkjzV2NlXTDSBYB04SVlNQsFTbGPk1t%2FI4Jktu0XSgifO2ozFOiwd%2F0SssJDn0dn4xqk4GDTTKX73%2FwQyBLdqgJ%2BWx6AQaba3BA9CKEzjtQYIfAsiYamapq80LAamYjinlKXUkxdpIDk0puXUEYzSalfRibAeDAKpNiqQ0FTwoxuGYzRnisyTotdVTclis1LHRQCy%2FqqL8oUaQzWRxilq5Mi0IJGtMY02cGLD69vGjkj3p6pGePKI8bkBv5evq8SjjyU04vJR2cQXQwSJyoinDsUJHCQ50jrFTT7yRdbdYQMB3MYCb6uBzJ9ewhXYPAIZSXfeEQBZZ3GPN3Nbhh%2FwkvAJLXnQMdi5NYYZ5GHE400GS5rXkOZSQsdZgIbzRnF9ueLnsfQ47wHAsirITnTlkCcuWWIUhJSbpM3wWhXNHvt2xUsKKMpdBSbJnBMcihkoDqAd1Zml%2FR4yrzow1Q2A5G%2Bkzo%2FRhRxQS2lCSDRV8LlYLBOOoo1bF4jwJAwKMK1tWLHlu9i0j4Ig8qVm6wE1DxXwAwQwsaBWUg2pOOol2dHxyt6npwJEdLDDVYyRc2D0HbcbLUJQj8gPevQBUBOUHXPrsAPBERICpnYESeu2OHotpXQxRGlCCtLdIsu23MhZVEoJg8Qumj%2FUMMc34IBqTKLDTp76WzL%2FdMjCxK7MjhiGjeYAC%2Fkj%2FjY%2FRde7hpSM1xChrog6yZ7OWTuD56xBJnGFE%2BpT2ElSyCnJcwVzCjkqeNLfMEJqKW0G7OFIp0G%2B9mh50I9o8k1tpCY0xYqFNIALgIfc2me4n1bmJnRZ89oepgLPT0NTMLNZsvSCZAc3TXaNB07vail36%2FdBySis4m9%2FDR8izaLJW6bWCkVgm5T%2Bius3ZXq4xI%2BGnbveLbdRwF2mNtsrE0JjYc1AXknCOrLSu7Te%2Fr4dPYMCl5qtiHNTn%2BTPbh1jCBHH%2BdMJNhwNgs3nT%2BOhQoQ0vYif56BMG6WowAcHR3DjQolxLzyVekHj00PBAaW7IIAF1EF%2BuRIWyXjQMAs2chdpaKPNaB%2BkSezYt0%2BCA04sOg5vx8Fr7Ofa9sUv87h7SLAUFSzbetCCZ9pmyLt6l6%2FTzoA1%2FZBG9bIUVHLAbi%2FkdBFgYGyGwRQGBpkqCEg2ah9UD6EedEcEL3j4y0BQQCiExEnocA3SZboh%2Bepgd3YsOkHskZwPuQ5OoyA0fTA5AXrHcUOQF%2BzkJHIA7PwCDk1gGVmGUZSSoPhNf%2BTklauz98QofOlCIQ%2FtCD4dosHYPqtPCXB3agggQQIqQJsSkB%2Bqn0rkQ1toJjON%2FOtCIB9RYv3PqRA4C4U68ZMlZn6BdgEvi2ziU%2BTQ6NIw3ej%2BAtDwMGEZk7e2IjxUWKdAxyaw9OCwSmeADTPPleyk6UhGDNXQb%2B%2BW6Uk4q6F7%2Frg6WVTo82IoCxSIsFDrav4EPHphD3u4hR53WKVvYZUwNCCeM4PMBWzK%2BEfIthZOkuAwPo5C5jgoZgn6dUdvx5rIDmd58cXXdKNfw3l%2BwM2UjgrDJeQHhbD7HW2QDoZMCujgIUkk5Fg8VCsdyjOtnGRx8wgKRPZN5dR0zPUyfGZFVihbFRniXZFOZGKPnEQzU3AnD1KfR6weHW2XS6KbPJxUkOTZsAB9vTVp3Le1F8q5l%2BDMcLiIq78jxAImD2pGFw0VHfRatScGlK6SMu8leTmhUSMy8Uhdd6xBiH3Gdman4tjQGLboJfqz6fL2WKHTmrfsKZRYX6BTDjDldKMosaSTLdQS7oDisJNqAUhw1PfTlnacCO8vl8706Km1FROgLDmudzxg%2BEWTiArtHgLsRrAXYWdB0NmToNCJdKm0KWycZQqb%2BMw76Qy29iQ5up%2FX7oyw8QZ75kP5F6iJAJz6KCmqxz8fEa%2FxnsMYcIO%2FvEkGRuMckhr4rIeLrKaXnmIzlNLxbFspOphkcnJdnz%2FChp%2FVlpj2P7jJQmQRwGnltkTV5dbF9fE3%2FfxoSqTROgq9wFUlbuYzYcasE0ouzBo%2BdDCDzxKAfhbAZYxQiHrLzV2iVexnDX%2FQnT1fsT%2Fxuhu1ui5qIytgbGmRoQkeQooO8eJNNZsf0iALur8QxZFH0nCMnjerYQqG1pIfjyVZWxhVRznmmfLG00BcBWJE6hzQWRyFknuJnXuk8A5FRDCulwrWASSNoBtR%2BCtGdkPwYN2o7DOw%2FVGlCZPusRBFXODQdUM5zeHDIVuAJBLqbO%2Ff9Qua%2BpDqEPk230Sob9lEZ8BHiCorjVghuI0lI4JDgHGRDD%2FprQ84B1pVGkIpVUAHCG%2Biz3Bn3qm2AVrYcYWhock4jso5%2BJ7HfHVj4WMIQdGctq3psBCVVzupQOEioBGA2Bk%2BUILT7%2BVoX5mdxxA5fS42gISQVi%2FHTzrgMxu0fY6hE1ocUwwbsbWcezrY2n6S8%2F6cxXkOH4prpmPuFoikTzY7T85C4T2XYlbxLglSv2uLCgFv8Quk%2FwdesUdWPeHYIH0R729JIisN9Apdd4eB10aqwXrPt%2BSu9mA8k8n1sjMwnfsfF2j3jMUzXepSHmZ%2FBfqXvzgUNQQWOXO8YEuFBh4QTYCkOAPxywpYu1VxiDyJmKVcmJPGWk%2Fgc3Pov02StyYDahwmzw3E1gYC9wkupyWfDqDSUMpCTH5e5N8B%2F%2FlHiMuIkTNw4USHrJU67bjXGqNav6PBuQSoqTxc8avHoGmvqNtXzIaoyMIQIiiUHIM64cXieouplhNYln7qgc4wBVAYR104kO%2BCvKqsg4yIUlFNThVUAKZxZt1XA34h3TCUUiXVkZ0w8Hh2R0Z5L0b4LZvPd%2Fp1gi%2F07h8qfwHrByuSxglc9cI4QIg2oqvC%2Fqm0i7tjPLTgDhoWTAKDO2ONW5oe%2B%2FeKB9vZB8K6C25yCZ9RFVMnb6NRdRjyVK57CHHSkJBfnM2%2Fj4ODUwRkqrtBBCrDsDpt8jhZdXoy%2F1BCqw3sSGhgGGy0a5Jw6BP%2FTExoCmNFYjZl248A0osgPyGEmRA%2BfAsqPVaNAfytu0vuQJ7rk3J4kTDTR2AlCHJ5cls26opZM4w3jMULh2YXKpcqGBtuleAlOZnaZGbD6DHzMd6i2oFeJ8z9XYmalg1Szd%2FocZDc1C7Y6vcALJz2lYnTXiWEr2wawtoR4g3jvWUU2Ngjd1cewtFzEvM1NiHZPeLlIXFbBPawxNgMwwAlyNSuGF3zizVeOoC9bag1qRAQKQE%2FEZBWC2J8mnXAN2aTBboZ7HewnObE8CwROudZHmUM5oZ%2FUgd%2FJZQK8lvAm43uDRAbyW8gZ%2BZGq0EVerVGUKUSm%2FIdn8AQHdR4m7bue88WBwft9mSCeMOt1ncBwziOmJYI2ZR7ewNMPiCugmSsE4EyQ%2BQATJG6qORMGd4snEzc6B4shPIo4G1T7PgSm8PY5eUkPdF8JZ0VBtadbHXoJgnEhZQaODPj2gpODKJY5Yp4DOsLBFxWbvXN755KWylJm%2BoOd4zEL9Hpubuy2gyyfxh8oEfFutnYWdfB8PdESLWYvSqbElP9qo3u6KTmkhoacDauMNNjj0oy40DFV7Ql0aZj77xfGl7TJNHnIwgqOkenruYYNo6h724%2BzUQ7%2BvkCpZB%2BpGA562hYQiDxHVWOq0oDQl%2FQsoiY%2BcuI7iWq%2FZIBtHcXJ7kks%2Bh2fCNUPA82BzjnqktNts%2BRLdk1VSu%2BtqEn7QZCCsvEqk6FkfiOYkrsw092J8jsfIuEKypNjLxrKA9kiA19mxBD2suxQKCzwXGws7kEJvlhUiV9tArLIdZW0IORcxEzdzKmjtFhsjKy%2F44XYXdI5noQoRcvjZ1RMPACRqYg2V1%2BOwOepcOknRLLFdYgTkT5UApt%2FJhLM3jeFYprZV%2BZow2g8fP%2BU68hkKFWJj2yBbKqsrp25xkZX1DAjUw52IMYWaOhab8Kp05VrdNftqwRrymWF4OQSjbdfzmRZirK8FMJELEgER2PHjEAN9pGfLhCUiTJFbd5LBkOBMaxLr%2FA1SY9dXFz4RjzoU9ExfJCmx%2FI9FKEGT3n2cmzl2X42L3Jh%2BAbQq6sA%2BSs1kitoa4TAYgKHaoybHUDJ51oETdeI%2F9ThSmjWGkyLi5QAGWhL0BG1UsTyRGRJOldKBrYJeB8ljLJHfATWTEQBXBDnQexOHTB%2BUn44zExFE4vLytcu5NwpWrUxO%2F0ZICUGM7hGABXym0V6ZvDST0E370St9MIWQOTWngeoQHUTdCJUP04spMBMS8LSker9cReVQkULFDIZDFPrhTzBl6sed9wcZQTbL%2BBDqMyaN3RJPh%2Fanbx%2BIv%2BqgQdAa3M9Z5JmvYlh4qop%2BHo1F1W5gbOE9YKLgAnWytXElU4G8GtW47lhgFE6gaSs%2Bgs37sFvi0PPVvA5dnCBgILTwoKd%2F%2BDoL9F6inlM7H4rOTzD79KJgKlZO%2FZgt22UsKhrAaXU5ZcLrAglTVKJEmNJvORGN1vqrcfSMizfpsgbIe9zno%2BgBoKVXgIL%2FVI8dB1O5o%2FR3Suez%2FgD7M781ShjKpIIORM%2FnxG%2BjjhhgPwsn2IoXsPGPqYHXA63zJ07M2GPEykQwJBYLK808qYxuIew4frk52nhCsnCYmXiR6CuapvE1IwRB4%2FQftDbEn%2BAucIr1oxrLabRj9q4ae0%2BfXkHnteAJwXRbVkR0mctVSwEbqhJiMSZUp9DNbEDMmjX22m3ABpkrPQQTP3S1sib5pD2VRKRd%2BeNAjLYyT0hGrdjWJZy24OYXRoWQAIhGBZRxuBFMjjZQhpgrWo8SiFYbojcHO8V5DyscJpLTHyx9Fimassyo5U6WNtquUMYgccaHY5amgR3PQzq3ToNM5ABnoB9kuxsebqmYZm0R9qxJbFXCQ1UPyFIbxoUraTJFDpCk0Wk9GaYJKz%2F6oHwEP0Q14lMtlddQsOAU9zlYdMVHiT7RQP3XCmWYDcHCGbVRHGnHuwzScA0BaSBOGkz3lM8CArjrBsyEoV6Ys4qgDK3ykQQPZ3hCRGNXQTNNXbEb6tDiTDLKOyMzRhCFT%2BmAUmiYbV3YQVqFVp9dorv%2BTsLeCykS2b5yyu8AV7IS9cxcL8z4Kfwp%2BxJyYLv1OsxQCZwTB4a8BZ%2F5EdxTBJthApqyfd9u3ifr%2FWILTqq5VqgwMT9SOxbSGWLQJUUWCVi4k9tho9nEsbUh7U6NUsLmkYFXOhZ0kmamaJLRNJzSj%2Fqn4Mso6zb6iLLBXoaZ6AqeWCjHQm2lztnejYYM2eubnpBdKVLORZhudH3JF1waBJKA9%2BW8EhMj3Kzf0L4vi4k6RoHh3Z5YgmSZmk6ns4fjScjAoL8GoOECgqgYEBYUGFVO4FUv4%2FYtowhEmTs0vrvlD%2FCrisnoBNDAcUi%2FteY7OctFlmARQzjOItrrlKuPO6E2Ox93L4O%2F4DcgV%2FdZ7qR3VBwVQxP1GCieA4RIpweYJ5FoYrHxqRBdJjnqbsikA2Ictbb8vE1GYIo9dacK0REgDX4smy6GAkxlH1yCGGsk%2BtgiDhNKuKu3yNrMdxafmKTF632F8Vx4BNK57GvlFisrkjN9WDAtjsWA0ENT2e2nETUb%2Fn7qwhvGnrHuf5bX6Vh%2Fn3xffU3PeHdR%2BFA92i6ufT3AlyAREoNDh6chiMWTvjKjHDeRhOa9YkOQRq1vQXEMppAQVwHCuIcV2g5rBn6GmZZpTR7vnSD6ZmhdSl176gqKTXu5E%2BYbfL0adwNtHP7dT7t7b46DVZIkzaRJOM%2BS6KcrzYVg%2BT3wSRFRQashjfU18NutrKa%2F7PXbtuJvpIjbgPeqd%2BpjmRw6YKpnANFSQcpzTZgpSNJ6J7uiagAbir%2F8tNXJ%2FOsOnRh6iuIexxrmkIneAgz8QoLmiaJ8sLQrELVK2yn3wOHp57BAZJhDZjTBzyoRAuuZ4eoxHruY1pSb7qq79cIeAdOwin4GdgMeIMHeG%2BFZWYaiUQQyC5b50zKjYw97dFjAeY2I4Bnl105Iku1y0lMA1ZHolLx19uZnRdILcXKlZGQx%2FGdEqSsMRU1BIrFqRcV1qQOOHyxOLXEGcbRtAEsuAC2V4K3p5mFJ22IDWaEkk9ttf5Izb2LkD1MnrSwztXmmD%2FQi%2FEmVEFBfiKGmftsPwVaIoZanlKndMZsIBOskFYpDOq3QUs9aSbAAtL5Dbokus2G4%2FasthNMK5UQKCOhU97oaOYNGsTah%2BjfCKsZnTRn5TbhFX8ghg8CBYt%2FBjeYYYUrtUZ5jVij%2Fop7V5SsbA4mYTOwZ46hqdpbB6Qvq3AS2HHNkC15pTDIcDNGsMPXaBidXYPHc6PJAkRh29Vx8KcgX46LoUQBhRM%2B3SW6Opll%2FwgxxsPgKJKzr5QCmwkUxNbeg6Wj34SUnEzOemSuvS2OetRCO8Tyy%2BQbSKVJcqkia%2BGvDefFwMOmgnD7h81TUtMn%2BmRpyJJ349HhAnoWFTejhpYTL9G8N2nVg1qkXBeoS9Nw2fB27t7trm7d%2FQK7Cr4uoCeOQ7%2F8JfKT77KiDzLImESHw%2F0wf73QeHu74hxv7uihi4fTX%2BXEwAyQG3264dwv17aJ5N335Vt9sdrAXhPOAv8JFvzqyYXwfx8WYJaef1gMl98JRFyl5Mv5Uo%2FoVH5ww5OzLFsiTPDns7fS6EURSSWd%2F92BxMYQ8sBaH%2Bj%2BwthQPdVgDGpTfi%2BJQIWMD8xKqULliRH01rTeyF8x8q%2FGBEEEBrAJMPf25UQwi0b8tmqRXY7kIvNkzrkvRWLnxoGYEJsz8u4oOyMp8cHyaybb1HdMCaLApUE%2B%2F7xLIZGP6H9xuSEXp1zLIdjk5nBaMuV%2FyTDRRP8Y2ww5RO6d2D94o%2B6ucWIqUAvgHIHXhZsmDhjVLczmZ3ca0Cb3PpKwt2UtHVQ0BgFJsqqTsnzZPlKahRUkEu4qmkJt%2Bkqdae76ViWe3STan69yaF9%2BfESD2lcQshLHWVu4ovItXxO69bqC5p1nZLvI8NdQB9s9UNaJGlQ5mG947ipdDA0eTIw%2FA1zEdjWquIsQXXGIVEH0thC5M%2BW9pZe7IhAVnPJkYCCXN5a32HjN6nsvokEqRS44tGIs7s2LVTvcrHAF%2BRVmI8L4HUYk4x%2B67AxSMJKqCg8zrGOgvK9kNMdDrNiUtSWuHFpC8%2Fp5qIQrEo%2FH%2B1l%2F0cAwQ2nKmpWxKcMIuHY44Y6DlkpO48tRuUGBWT0FyHwSKO72Ud%2BtJUfdaZ4CWNijzZtlRa8%2BCkmO%2FEwHYfPZFU%2FhzjFWH7vnzHRMo%2BaF9u8qHSAiEkA2HjoNQPEwHsDKOt6hOoK3Ce%2F%2B%2F9boMWDa44I6FrQhdgS7OnNaSzwxWKZMcyHi6LN4WC6sSj0qm2PSOGBTvDs%2FGWJS6SwEN%2FULwpb4LQo9fYjUfSXRwZkynUazlSpvX9e%2BG2zor8l%2BYaMxSEomDdLHGcD6YVQPegTaA74H8%2BV4WvJkFUrjMLGLlvSZQWvi8%2FQA7yzQ8GPno%2F%2F5SJHRP%2FOqKObPCo81s%2F%2B6WgLqykYpGAgQZhVDEBPXWgU%2FWzFZjKUhSFInufPRiMAUULC6T11yL45ZrRoB4DzOyJShKXaAJIBS9wzLYIoCEcJKQW8GVCx4fihqJ6mshBUXSw3wWVj3grrHQlGNGhIDNNzsxQ3M%2BGWn6ASobIWC%2BLbYOC6UpahVO13Zs2zOzZC8z7FmA05JhUGyBsF4tsG0drcggIFzgg%2Fkpf3%2BCnAXKiMgIE8Jk%2FMhpkc8DUJEUzDSnWlQFme3d0sHZDrg7LavtsEX3cHwjCYA17pMTfx8Ajw9hHscN67hyo%2BRJQ4458RmPywXykkVcW688oVUrQhahpPRvTWPnuI0B%2BSkQu7dCyvLRyFYlC1LG1gRCIvn3rwQeINzZQC2KXq31FaR9UmVV2QeGVqBHjmE%2BVMd3b1fhCynD0pQNhCG6%2FWCDbKPyE7NRQzL3BzQAJ0g09aUzcQA6mUp9iZFK6Sbp%2FYbHjo%2B%2B7%2FWj8S4YNa%2BZdqAw1hDrKWFXv9%2BzaXpf8ZTDSbiqsxnwN%2FCzK5tPkOr4tRh2kY3Bn9JtalbIOI4b3F7F1vPQMfoDcdxMS8CW9m%2FNCW%2FHILTUVWQIPiD0j1A6bo8vsv6P1hCESl2abrSJWDrq5sSzUpwoxaCU9FtJyYH4QFMxDBpkkBR6kn0LMPO%2B5EJ7Z6bCiRoPedRZ%2FP0SSdii7ZnPAtVwwHUidcdyspwncz5uq6vvm4IEDbJVLUFCn%2FLvIHfooUBTkFO130FC7CmmcrKdgDJcid9mvVzsDSibOoXtIf9k6ABle3PmIxejodc4aob0QKS432srrCMndbfD454q52V01G4q913mC5HOsTzWF4h2No1av1VbcUgWAqyoZl%2B11PoFYnNv2HwAODeNRkHj%2B8SF1fcvVBu6MrehHAZK1Gm69ICcTKizykHgGFx7QdowTVAsYEF2tVc0Z6wLryz2FI1sc5By2znJAAmINndoJiB4sfPdPrTC8RnkW7KRCwxC6YvXg5ahMlQuMpoCSXjOlBy0Kij%2BbsCYPbGp8BdCBiLmLSAkEQRaieWo1SYvZIKJGj9Ur%2FeWHjiB7SOVdqMAVmpBvfRiebsFjger7DC%2B8kRFGtNrTrnnGD2GAJb8rQCWkUPYHhwXsjNBSkE6lGWUj5QNhK0DMNM2l%2BkXRZ0KLZaGsFSIdQz%2FHXDxf3%2FTE30%2BDgBKWGWdxElyLccJfEpjsnszECNoDGZpdwdRgCixeg9L4EPhH%2BRptvRMVRaahu4cySjS3P5wxAUCPkmn%2BrhyASpmiTaiDeggaIxYBmtLZDDhiWIJaBgzfCsAGUF1Q1SFZYyXDt9skCaxJsxK2Ms65dmdp5WAZyxik%2FzbrTQk5KmgxCg%2Ff45L0jywebOWUYFJQAJia7XzCV0x89rpp%2Ff3AVWhSPyTanqmik2SkD8A3Ml4NhIGLAjBXtPShwKYfi2eXtrDuKLk4QlSyTw1ftXgwqA2jUuopDl%2B5tfUWZNwBpEPXghzbBggYCw%2Fdhy0ntds2yeHCDKkF%2FYxQjNIL%2FF%2F37jLPHCKBO9ibwYCmuxImIo0ijV2Wbg3kSN2psoe8IsABv3RNFaF9uMyCtCYtqcD%2BqNOhwMlfARQUdJ2tUX%2BMNJqOwIciWalZsmEjt07tfa8ma4cji9sqz%2BQ9hWfmMoKEbIHPOQORbhQRHIsrTYlnVTNvcq1imqmmPDdVDkJgRcTgB8Sb6epCQVmFZe%2BjGDiNJQLWnfx%2BdrTKYjm0G8yH0ZAGMWzEJhUEQ4Maimgf%2Fbkvo8PLVBsZl152y5S8%2BHRDfZIMCbYZ1WDp4yrdchOJw8k6R%2B%2F2pHmydK4NIK2PHdFPHtoLmHxRDwLFb7eB%2BM4zNZcB9NrAgjVyzLM7xyYSY13ykWfIEEd2n5%2FiYp3ZdrCf7fL%2Ben%2BsIJu2W7E30MrAgZBD1rAAbZHPgeAMtKCg3NpSpYQUDWJu9bT3V7tOKv%2BNRiJc8JAKqqgCA%2FPNRBR7ChpiEulyQApMK1AyqcWnpSOmYh6yLiWkGJ2mklCSPIqN7UypWj3dGi5MvsHQ87MrB4VFgypJaFriaHivwcHIpmyi5LhNqtem4q0n8awM19Qk8BOS0EsqGscuuydYsIGsbT5GHnERUiMpKJl4ON7qjB4fEqlGN%2FhCky89232UQCiaeWpDYCJINXjT6xl4Gc7DxRCtgV0i1ma4RgWLsNtnEBRQFqZggCLiuyEydmFd7WlogpkCw5G1x4ft2psm3KAREwVwr1Gzl6RT7FDAqpVal34ewVm3VH4qn5mjGj%2BbYL1NgfLNeXDwtmYSpwzbruDKpTjOdgiIHDVQSb5%2FzBgSMbHLkxWWgghIh9QTFSDILixVwg0Eg1puooBiHAt7DzwJ7m8i8%2Fi%2BjHvKf0QDnnHVkVTIqMvIQImOrzCJwhSR7qYB5gSwL6aWL9hERHCZc4G2%2BJrpgHNB8eCCmcIWIQ6rSdyPCyftXkDlErUkHafHRlkOIjxGbAktz75bnh50dU7YHk%2BMz7wwstg6RFZb%2BTZuSOx1qqP5C66c0mptQmzIC2dlpte7vZrauAMm%2F7RfBYkGtXWGiaWTtwvAQiq2oD4YixPLXE2khB2FRaNRDTk%2B9sZ6K74Ia9VntCpN4BhJGJMT4Z5c5FhSepRCRWmBXqx%2BwhVZC4me4saDs2iNqXMuCl6iAZflH8fscC1sTsy4PHeC%2BXYuqMBMUun5YezKbRKmEPwuK%2BCLzijPEQgfhahQswBBLfg%2FGBgBiI4QwAqzJkkyYAWtjzSg2ILgMAgqxYfwERRo3zruBL9WOryUArSD8sQOcD7fvIODJxKFS615KFPsb68USBEPPj1orNzFY2xoTtNBVTyzBhPbhFH0PI5AtlJBl2aSgNPYzxYLw7XTDBDinmVoENwiGzmngrMo8OmnRP0Z0i0Zrln9DDFcnmOoBZjABaQIbPOJYZGqX%2BRCMlDDbElcjaROLDoualmUIQ88Kekk3iM4OQrADcxi3rJguS4MOIBIgKgXrjd1WkbCdqxJk%2F4efRIFsavZA7KvvJQqp3Iid5Z0NFc5aiMRzGN3vrpBzaMy4JYde3wr96PjN90AYOIbyp6T4zj8LoE66OGcX1Ef4Z3KoWLAUF4BTg7ug%2FAbkG5UNQXAMkQezujSHeir2uTThgd3gpyzDrbnEdDRH2W7U6PeRvBX1ZFMP5RM%2BZu6UUZZD8hDPHldVWntTCNk7To8IeOW9yn2wx0gmurwqC60AOde4r3ETi5pVMSDK8wxhoGAoEX9NLWHIR33VbrbMveii2jAJlrxwytTHbWNu8Y4N8vCCyZjAX%2FpcsfwXbLze2%2BD%2Bu33OGBoJyAAL3jn3RuEcdp5If8O%2Ba4NKWvxOTyDltG0IWoHhwVGe7dKkCWFT%2B%2Btm%2BhaBCikRUUMrMhYKZJKYoVuv%2FbsJzO8DwfVIInQq3g3BYypiz8baogH3r3GwqCwFtZnz4xMjAVOYnyOi5HWbFA8n0qz1OjSpHWFzpQOpvkNETZBGpxN8ybhtqV%2FDMUxd9uFZmBfKXMCn%2FSqkWJyKPnT6lq%2B4zBZni6fYRByJn6OK%2BOgPBGRAJluwGSk4wxjOOzyce%2FPKODwRlsgrVkdcsEiYrqYdXo0Er2GXi2GQZd0tNJT6c9pK1EEJG1zgDJBoTVuCXGAU8BKTvCO%2FcEQ1Wjk3Zzuy90JX4m3O5IlxVFhYkSUwuQB2up7jhvkm%2BbddRQu5F9s0XftGEJ9JSuSk%2BZachCbdU45fEqbugzTIUokwoAKvpUQF%2FCvLbWW5BNQFqFkJg2f30E%2F48StNe5QwBg8zz3YAJ82FZoXBxXSv4QDooDo79NixyglO9AembuBcx5Re3CwOKTHebOPhkmFC7wNaWtoBhFuV4AkEuJ0J%2B1pT0tLkvFVZaNzfhs%2FKd3%2BA9YsImlO4XK4vpCo%2FelHQi%2F9gkFg07xxnuXLt21unCIpDV%2BbbRxb7FC6nWYTsMFF8%2B1LUg4JFjVt3vqbuhHmDKbgQ4e%2BRGizRiO8ky05LQGMdL2IKLSNar0kNG7lHJMaXr5mLdG3nykgj6vB%2FKVijd1ARWkFEf3yiUw1v%2FWaQivVUpIDdSNrrKbjO5NPnxz6qTTGgYg03HgPhDrCFyYZTi3XQw3HXCva39mpLNFtz8AiEhxAJHpWX13gCTAwgm9YTvMeiqetdNQv6IU0hH0G%2BZManTqDLPjyrOse7WiiwOJCG%2BJ0pZYULhN8NILulmYYvmVcV2MjAfA39sGKqGdjpiPo86fecg65UPyXDIAOyOkCx5NQsLeD4gGVjTVDwOHWkbbBW0GeNjDkcSOn2Nq4cEssP54t9D749A7M1AIOBl0Fi0sSO5v3P7LCBrM6ZwFY6kp2FX6AcbGUdybnfChHPyu6WlRZ2Fwv9YM0RMI7kISRgR8HpQSJJOyTfXj%2F6gQKuihPtiUtlCQVPohUgzfezTg8o1b3n9pNZeco1QucaoXe40Fa5JYhqdTspFmxGtW9h5ezLFZs3j%2FN46f%2BS2rjYNC2JySXrnSAFhvAkz9a5L3pza8eYKHNoPrvBRESpxYPJdKVUxBE39nJ1chrAFpy4MMkf0qKgYALctGg1DQI1kIymyeS2AJNT4X240d3IFQb%2F0jQbaHJ2YRK8A%2Bls6WMhWmpCXYG5jqapGs5%2FeOJErxi2%2F2KWVHiPellTgh%2FfNl%2F2KYPKb7DUcAg%2BmCOPQFCiU9Mq%2FWLcU1xxC8aLePFZZlE%2BPCLzf7ey46INWRw2kcXySR9FDgByXzfxiNKwDFbUSMMhALPFSedyjEVM5442GZ4hTrsAEvZxIieSHGSgkwFh%2FnFNdrrFD4tBH4Il7fW6ur4J8Xaz7RW9jgtuPEXQsYk7gcMs2neu3zJwTyUerHKSh1iTBkj2YJh1SSOZL5pLuQbFFAvyO4k1Hxg2h99MTC6cTUkbONQIAnEfGsGkNFWRbuRyyaEZInM5pij73EA9rPIUfU4XoqQpHT9THZkW%2BoKFLvpyvTBMM69tN1Ydwv1LIEhHsC%2BueVG%2Bw%2BkyCPsvV3erRikcscHjZCkccx6VrBkBRusTDDd8847GA7p2Ucy0y0HdSRN6YIBciYa4vuXcAZbQAuSEmzw%2BH%2FAuOx%2BaH%2BtBL88H57D0MsqyiZxhOEQkF%2F8DR1d2hSPMj%2FsNOa5rxcUnBgH8ictv2J%2Bcb4BA4v3MCShdZ2vtK30vAwkobnEWh7rsSyhmos3WC93Gn9C4nnAd%2FPjMMtQfyDNZsOPd6XcAsnBE%2FmRHtHEyJMzJfZFLE9OvQa0i9kUmToJ0ZxknTgdl%2FXPV8xoh0K7wNHHsnBdvFH3sv52lU7UFteseLG%2FVanIvcwycVA7%2BBE1Ulyb20BvwUWZcMTKhaCcmY3ROpvonVMV4N7yBXTL7IDtHzQ4CCcqF66LjF3xUqgErKzolLyCG6Kb7irP%2FMVTCCwGRxfrPGpMMGvPLgJ881PHMNMIO09T5ig7AzZTX%2F5PLlwnJLDAPfuHynSGhV4tPqR3gJ4kg4c06c%2FF1AcjGytKm2Yb5jwMotF7vro4YDLWlnMIpmPg36NgAZsGA0W1spfLSue4xxat0Gdwd0lqDBOgIaMANykwwDKejt5YaNtJYIkrSgu0KjIg0pznY0SCd1qlC6R19g97UrWDoYJGlrvCE05J%2F5wkjpkre727p5PTRX5FGrSBIfJqhJE%2FIS876PaHFkx9pGTH3oaY3jJRvLX9Iy3Edoar7cFvJqyUlOhAEiOSAyYgVEGkzHdug%2BoRHIEOXAExMiTSKU9A6nmRC8mp8iYhwWdP2U%2F5EkFAdPrZw03YA3gSyNUtMZeh7dDCu8pF5x0VORCTgKp07ehy7NZqKTpIC4UJJ89lnboyAfy5OyXzXtuDRbtAFjZRSyGFTpFrXwkpjSLIQIG3N0Vj4BtzK3wdlkBJrO18MNsgseR4BysJilI0wI6ZahLhBFA0XBmV8d4LUzEcNVb0xbLjLTETYN8OEVqNxkt10W614dd1FlFFVTIgB7%2FBQQp1sWlNolpIu4ekxUTBV7NmxOFKEBmmN%2BnA7pvF78%2FRII5ZHA09OAiE%2F66MF6HQ%2BqVEJCHxwymukkNvzqHEh52dULPbVasfQMgTDyBZzx4007YiKdBuUauQOt27Gmy8ISclPmEUCIcuLbkb1mzQSqIa3iE0PJh7UMYQbkpe%2BhXjTJKdldyt2mVPwywoODGJtBV1lJTgMsuSQBlDMwhEKIfrvsxGQjHPCEfNfMAY2oxvyKcKPUbQySkKG6tj9AQyEW3Q5rpaDJ5Sns9ScLKeizPRbvWYAw4bXkrZdmB7CQopCH8NAmqbuciZChHN8lVGaDbCnmddnqO1PQ4ieMYfcSiBE5zzMz%2BJV%2F4eyzrzTEShvqSGzgWimkNxLvUj86iAwcZuIkqdB0VaIB7wncLRmzHkiUQpPBIXbDDLHBlq7vp9xwuC9AiNkIptAYlG7Biyuk8ILdynuUM1cHWJgeB%2BK3wBP%2FineogxkvBNNQ4AkW0hvpBOQGFfeptF2YTR75MexYDUy7Q%2F9uocGsx41O4IZhViw%2F2FvAEuGO5g2kyXBUijAggWM08bRhXg5ijgMwDJy40QeY%2FcQpUDZiIzmvskQpO5G1zyGZA8WByjIQU4jRoFJt56behxtHUUE%2Fom7Rj2psYXGmq3llVOCgGYKNMo4pzwntITtapDqjvQtqpjaJwjHmDzSVGLxMt12gEXAdLi%2FcaHSM3FPRGRf7dB7YC%2BcD2ho6oL2zGDCkjlf%2FDFoQVl8GS%2F56wur3rdV6ggtzZW60MRB3g%2BU1W8o8cvqIpMkctiGVMzXUFI7FacFLrgtdz4mTEr4aRAaQ2AFQaNeG7GX0yOJgMRYFziXdJf24kg%2FgBQIZMG%2FYcPEllRTVNoDYR6oSJ8wQNLuihfw81UpiKPm714bZX1KYjcXJdfclCUOOpvTxr9AAJevTY4HK%2FG7F3mUc3GOAKqh60zM0v34v%2BELyhJZqhkaMA8UMMOU90f8RKEJFj7EqepBVwsRiLbwMo1J2zrE2UYJnsgIAscDmjPjnzI8a719Wxp757wqmSJBjXowhc46QN4RwKIxqEE6E5218OeK7RfcpGjWG1jD7qND%2B%2FGTk6M56Ig4yMsU6LUW1EWE%2BfIYycVV1thldSlbP6ltdC01y3KUfkobkt2q01YYMmxpKRvh1Z48uNKzP%2FIoRIZ%2FF6buOymSnW8gICitpJjKWBscSb9JJKaWkvEkqinAJ2kowKoqkqZftRqfRQlLtKoqvTRDi2vg%2FRrPD%2Fd3a09J8JhGZlEkOM6znTsoMCsuvTmywxTCDhw5dd0GJOHCMPbsj3QLkTE3MInsZsimDQ3HkvthT7U9VA4s6G07sID0FW4SHJmRGwCl%2BMu4xf0ezqeXD2PtPDnwMPo86sbwDV%2B9PWcgFcARUVYm3hrFQrHcgMElFGbSM2A1zUYA3baWfheJp2AINmTJLuoyYD%2FOwA4a6V0ChBN97E8YtDBerUECv0u0TlxR5yhJCXvJxgyM73Bb6pyq0jTFJDZ4p1Am1SA6sh8nADd1hAcGBMfq4d%2FUfwnmBqe0Jun1n1LzrgKuZMAnxA3NtCN7Klf4BH%2B14B7ibBmgt0TGUafVzI4uKlpF7v8NmgNjg90D6QE3tbx8AjSAC%2BOA1YJvclyPKgT27QpIEgVYpbPYGBsnyCNrGz9XUsCHkW1QAHgL2STZk12QGqmvAB0NFteERkvBIH7INDsNW9KKaAYyDMdBEMzJiWaJHZALqDxQDWRntumSDPcplyFiI1oDpT8wbwe01AHhW6%2BvAUUBoGhY3CT2tgwehdPqU%2F4Q7ZLYvhRl%2FogOvR9O2%2BwkkPKW5vCTjD2fHRYXONCoIl4Jh1bZY0ZE1O94mMGn%2FdFSWBWzQ%2FVYk%2BGezi46RgiDv3EshoTmMSlioUK6MQEN8qeyK6FRninyX8ZPeUWjjbMJChn0n%2FyJvrq5bh5UcCAcBYSafTFg7p0jDgrXo2QWLb3WpSOET%2FHh4oSadBTvyDo10IufLzxiMLAnbZ1vcUmj3w7BQuIXjEZXifwukVxrGa9j%2BDXfpi12m1RbzYLg9J2wFergEwOxFyD0%2FJstNK06ZN2XdZSGWxcJODpQHOq4iKqjqkJUmPu1VczL5xTGUfCgLEYyNBCCbMBFT%2FcUP6pE%2FmujnHsSDeWxMbhrNilS5MyYR0nJyzanWXBeVcEQrRIhQeJA6Xt4f2eQESNeLwmC10WJVHqwx8SSyrtAAjpGjidcj1E2FYN0LObUcFQhafUKTiGmHWRHGsFCB%2BHEXgrzJEB5bp0QiF8ZHh11nFX8AboTD0PS4O1LqF8XBks2MpjsQnwKHF6HgaKCVLJtcr0XjqFMRGfKv8tmmykhLRzu%2BvqQ02%2BKpJBjaLt9ye1Ab%2BBbEBhy4EVdIJDrL2naV0o4wU8YZ2Lq04FG1mWCKC%2BUwkXOoAjneU%2FxHplMQo2cXUlrVNqJYczgYlaOEczVCs%2FOCgkyvLmTmdaBJc1iBLuKwmr6qtRnhowngsDxhzKFAi02tf8bmET8BO27ovJKF1plJwm3b0JpMh38%2BxsrXXg7U74QUM8ZCIMOpXujHntKdaRtsgyEZl5MClMVMMMZkZLNxH9%2Bb8fH6%2Bb8Lev30A9TuEVj9CqAdmwAAHBPbfOBFEATAPZ2CS0OH1Pj%2F0Q7PFUcC8hDrxESWdfgFRm%2B7vvWbkEppHB4T%2F1ApWnlTIqQwjcPl0VgS1yHSmD0OdsCVST8CQVwuiew1Y%2Bg3QGFjNMzwRB2DSsAk26cmA8lp2wIU4p93AUBiUHFGOxOajAqD7Gm6NezNDjYzwLOaSXRBYcWipTSONHjUDXCY4mMI8XoVCR%2FRrs%2FJLKXgEx%2BqkmeDlFOD1%2FyTQNDClRuiUyKYCllfMiQiyFkmuTz2vLsBNyRW%2Bxz%2B5FElFxWB28VjYIGZ0Yd%2B5wIjkcoMaggxswbT0pCmckRAErbRlIlcOGdBo4djTNO8FAgQ%2BlT6vPS60BwTRSUAM3ddkEAZiwtEyArrkiDRnS7LJ%2B2hwbzd2YDQagSgACpsovmjil5wfPuXq3GuH0CyE7FK3M4FgRaFoIkaodORrPx1%2BJpI9psyNYIFuJogZa0%2F1AhOWdlHQxdAgbwacsHqPZo8u%2FngAH2GmaTdhYnBfSDbBfh8CHq6Bx5bttP2%2BRdM%2BMAaYaZ0Y%2FADkbNCZuAyAVQa2OcXOeICmDn9Q%2FeFkDeFQg5MgHEDXq%2FtVjj%2Bjtd26nhaaolWxs1ixSUgOBwrDhRIGOLyOVk2%2FBc0UxvseQCO2pQ2i%2BKrfhu%2FWeBovNb5dJxQtJRUDv2mCwYVpNl2efQM9xQHnK0JwLYt%2FU0Wf%2BphiA4uw8G91slC832pmOTCAoZXohg1fewCZqLBhkOUBofBWpMPsqg7XEXgPfAlDo2U5WXjtFdS87PIqClCK5nW6adCeXPkUiTGx0emOIDQqw1yFYGHEVx20xKjJVYe0O8iLmnQr3FA9nSIQilUKtJ4ZAdcTm7%2BExseJauyqo30hs%2B1qSW211A1SFAOUgDlCGq7eTIcMAeyZkV1SQJ4j%2Fe1Smbq4HcjqgFbLAGLyKxlMDMgZavK5NAYH19Olz3la%2FQCTiVelFnU6O%2FGCvykqS%2FwZJDhKN9gBtSOp%2F1SP5VRgJcoVj%2Bkmf2wBgv4gjrgARBWiURYx8xENV3bEVUAAWWD3dYDKAIWk5opaCFCMR5ZjJExiCAw7gYiSZ2rkyTce4eNMY3lfGn%2B8p6%2BvBckGlKEXnA6Eota69OxDO9oOsJoy28BXOR0UoXNRaJD5ceKdlWMJlOFzDdZNpc05tkMGQtqeNF2lttZqNco1VtwXgRstLSQ6tSPChgqtGV5h2DcDReIQadaNRR6AsAYKL5gSFsCJMgfsaZ7DpKh8mg8Wz8V7H%2BgDnLuMxaWEIUPevIbClgap4dqmVWSrPgVYCzAoZHIa5z2Ocx1D%2FGvDOEqMOKLrMefWIbSWHZ6jbgA8qVBhYNHpx0P%2BjAgN5TB3haSifDcApp6yymEi6Ij%2FGsEpDYUgcHATJUYDUAmC1SCkJ4cuZXSAP2DEpQsGUjQmKJfJOvlC2x%2FpChkOyLW7KEoMYc5FDC4v2FGqSoRWiLsbPCiyg1U5yiHZVm1XLkHMMZL11%2Fyxyw0UnGig3MFdZklN5FI%2FqiT65T%2BjOXOdO7XbgWurOAZR6Cv9uu1cm5LjkXX4xi6mWn5r5NjBS0gTliHhMZI2WNqSiSphEtiCAwnafS11JhseDGHYQ5%2BbqWiAYiAv6Jsf79%2FVUs4cIl%2Bn6%2BWOjcgB%2F2l5TreoAV2717JzZbQIR0W1cl%2FdEqCy5kJ3ZSIHuU0vBoHooEpiHeQWVkkkOqRX27eD1FWw4BfO9CJDdKoSogQi3hAAwsPRFrN5RbX7bqLdBJ9JYMohWrgJKHSjVl1sy2xAG0E3sNyO0oCbSGOxCNBRRXTXenYKuwAoDLfnDcQaCwehUOIDiHAu5m5hMpKeKM4sIo3vxACakIxKoH2YWF2QM84e6F5C5hJU4g8uxuFOlAYnqtwxmHyNEawLW%2FPhoawJDrGAP0JYWHgAVUByo%2FbGdiv2T2EMg8gsS14%2FrAdzlOYazFE7w4OzxeKiWdm3nSOnQRRKXSlVo8HEAbBfyJMKqoq%2BSCcTSx5NDtbFwNlh8VhjGGDu7JG5%2FTAGAvniQSSUog0pNzTim8Owc6QTuSKSTXlQqwV3eiEnklS3LeSXYPXGK2VgeZBqNcHG6tZHvA3vTINhV0ELuQdp3t1y9%2BogD8Kk%2FW7QoRN1UWPqM4%2BxdygkFDPLoTaumKReKiLWoPHOfY54m3qPx4c%2B4pgY3MRKKbljG8w4wvz8pxk3AqKsy4GMAkAtmRjRMsCxbb4Q2Ds0Ia9ci8cMT6DmsJG00XaHCIS%2Bo3F8YVVeikw13w%2BOEDaCYYhC0ZE54kA4jpjruBr5STWeqQG6M74HHL6TZ3lXrd99ZX%2B%2B7LhNatQaZosuxEf5yRA15S9gPeHskBIq3Gcw81AGb9%2FO53DYi%2F5CsQ51EmEh8Rkg4vOciClpy4d04eYsfr6fyQkBmtD%2BP8sNh6e%2BXYHJXT%2FlkXxT4KXU5F2sGxYyzfniMMQkb9OjDN2C8tRRgTyL7GwozH14PrEUZc6oz05Emne3Ts5EG7WolDmU8OB1LDG3VrpQxp%2BpT0KYV5dGtknU64JhabdqcVQbGZiAxQAnvN1u70y1AnmvOSPgLI6uB4AuDGhmAu3ATkJSw7OtS%2F2ToPjqkaq62%2F7WFG8advGlRRqxB9diP07JrXowKR9tpRa%2BjGJ91zxNTT1h8I2PcSfoUPtd7NejVoH03EUcqSBuFZPkMZhegHyo2ZAITovmm3zAIdGFWxoNNORiMRShgwdYwFzkPw5PA4a5MIIQpmq%2Bnsp3YMuXt%2FGkXxLx%2FP6%2BZJS0lFyz4MunC3eWSGE8xlCQrKvhKUPXr0hjpAN9ZK4PfEDrPMfMbGNWcHDzjA7ngMxTPnT7GMHar%2BgMQQ3NwHCv4zH4BIMYvzsdiERi6gebRmerTsVwZJTRsL8dkZgxgRxmpbgRcud%2BYlCIRpPwHShlUSwuipZnx9QCsEWziVazdDeKSYU5CF7UVPAhLer3CgJOQXl%2Fzh575R5rsrmRnKAzq4POFdgbYBuEviM4%2BLVC15ssLNFghbTtHWerS1hDt5s4qkLUha%2FqpZXhWh1C6lTQAqCNQnaDjS7UGFBC6wTu8yFnKJnExCnAs3Ok9yj5KpfZESQ4lTy5pTGTnkAUpxI%2ByjEldJfSo4y0QhG4i4IwkRFGcjWY8%2BEzgYYJUK7BXQksLxAww%2FYYWBMhJILB9e8ePEJ4OP7z%2B4%2FwOQDl64iOYDp26DaONPxpKtBxq%2FaTzRGarm3VkPYTLJKx6Z%2FMw2YbBGseJhPMwhhNswrIkyvV2BYzrvZbxLpKwcWJhYmFtVZ%2BlPEq91FzVp1HlQY1bZVLqeNR9SAUn6n0E28k%2FUuGkNpP1DBI5ch%2FEehZfjUQ9aE41NhETExoPT2gGQz0IhWJbEOvTQ4wgcXCHHFBhewYUiFHuhRSAUVmEHeCRQHQkXGFwkAgyzREJCVN7TRnTon36Zw3tPhx4EALwNdwDv%2BJ41YSP4B2CQqz0EFgARZ4ESgBHQgROwAVn9GTI%2BHYexTUevLUeta4%2FDqKrbMVS%2BYqb8hUwYCrlgKtmAq1YCrFgKrd4qpXiqZcKn1oqdWipjYKpWwVPVYqW6xUpVipKqFR3QKjagVEtAqHpxUMTitsnFaJOKx2cVhswq35RVpyiq9lFVNIKnOQVMkgqtYxVNxiqQjFS7GKlSIVIsQqPIhUWwioigFQ%2B%2BKkN8VHr49HDw9Ebo9EDo9DTo9Crg9BDg9%2FWx7gWx7YWwlobYrOGxWPNisAaAHEyALpkAVDIAeWAArsABVXACYuAD5cAF6wAKFQAQqgAbVAAsoAAlQAUaYAfkwAvogBWQACOgAD9AAHSAAKT4GUdMiOvFngBTwCn2AZ7Dv6B6k%2F90B8%2ByRnkV144AIBoAMTQATGgAjNAA4YABgwABZgB%2FmQCwyAVlwCguASlwCEuAQFwB4uAMlwBYuAJlQAUVAAhUD2KgdpUDaJgaRMDFJgX5MC1JgWJEAokQCWRAHxEAWkQBMRADpEAMkQAYROAEecC484DRpwBDTnwNOdw05tjTmiNOYwtswhYFwLA7BYG4LA2BYGOLAwRYFuLAsxYFQJAohIEyJAMwkAwiQC0JAJgkAeiQBkJAFokAPCQA0JABwcD4Dgc4cDdDgaYcDIDgYgUC6CgWgUClCgUYUAVBQBOFAEYMALgwAgDA9QYAdIn8AZzeBB2L5EcWrenUT1KXienEsuJJ7x5U8XlTjc1NVzUyXFTGb1LlpUtWlTDIjqwE4LsagowoCi2gJLKAkpoBgJQNpAIhNqaEoneI6kiiqQ6Go%2Fn6j0cS%2Ba2gEU8gIHJ%2BBwfgZX4GL%2BBd%2FgW34FZ%2BBS%2FgUH4FN6BTegTvoEv6BJegRnYEF2A79gOvYDl2BdEjCkqkGtwXp0LNToIskOTXzh%2FF062yJ7AAAAEDAWAAABWhJ%2BKPEIJgBFxMVP7w2QJBGHASQnOBKXKFIdUK4igKA9IEaYJg%29%20format%28%27embedded%2Dopentype%27%29%2Curl%28data%3Aapplication%2Ffont%2Dwoff%3Bbase64%2Cd09GRgABAAAAAFuAAA8AAAAAsVwAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAABWAAAABwAAAAcbSqX3EdERUYAAAF0AAAAHwAAACABRAAET1MvMgAAAZQAAABFAAAAYGe5a4ljbWFwAAAB3AAAAsAAAAZy2q3jgWN2dCAAAAScAAAABAAAAAQAKAL4Z2FzcAAABKAAAAAIAAAACP%2F%2FAANnbHlmAAAEqAAATRcAAJSkfV3Cb2hlYWQAAFHAAAAANAAAADYFTS%2FYaGhlYQAAUfQAAAAcAAAAJApEBBFobXR4AABSEAAAAU8AAAN00scgYGxvY2EAAFNgAAACJwAAAjBv%2B5XObWF4cAAAVYgAAAAgAAAAIAFqANhuYW1lAABVqAAAAZ4AAAOisyygm3Bvc3QAAFdIAAAELQAACtG6o%2BU1d2ViZgAAW3gAAAAGAAAABsMYVFAAAAABAAAAAMw9os8AAAAA0HaBdQAAAADQdnOXeNpjYGRgYOADYgkGEGBiYGRgZBQDkixgHgMABUgASgB42mNgZulmnMDAysDCzMN0gYGBIQpCMy5hMGLaAeQDpRCACYkd6h3ux%2BDAoPD%2FP%2FOB%2FwJAdSIM1UBhRiQlCgyMADGWCwwAAAB42u2UP2hTQRzHf5ekaVPExv6JjW3fvTQ0sa3QLA5xylBLgyBx0gzSWEUaXbIoBBQyCQGHLqXUqYNdtIIgIg5FHJxEtwqtpbnfaV1E1KFaSvX5vVwGEbW6OPngk8%2FvvXfv7pt3v4SImojIDw6BViKxRgIVBaZwVdSv%2BxvXA%2BIuzqcog2cOkkvDNE8Lbqs74k64i%2B5Sf3u8Z2AnIRLbyVCyTflVSEXVoEqrrMqrgiqqsqqqWQ5xlAc5zWOc5TwXucxVnuE5HdQhHdFRHdNJndZZndeFLc%2FzsKJLQ%2FWV6BcrCdWkwspVKZVROaw0qUqqoqZZcJhdTnGGxznHBS5xhad5VhNWCuturBTXKZ3RObuS98pb9c57k6ql9rp2v1as5deb1r6s9q1GV2IrHSt73T631424YXzjgPwqt%2BRn%2BVG%2BlRvyirwsS%2FKCPCfPytPypDwhj8mjctRZd9acF86y89x55jxxHjkPnXstXfbt%2FpNjj%2FnwXW%2BcHa6%2FSYvZ7yEwbDYazDcIgoUGzY3h2HtqgUcs1AFPWKgTXrRQF7xkoQhRf7uF9hPFeyzUTTSwY6EoUUJY6AC8bSGMS4Ys1Au3WaiPSGGsMtkdGH2rzJgYHAaYjxIwQqtB1CnYkEZ9BM6ALOpROAfyqI%2FDBQudgidBETXuqRIooz4DV0AV9UV4GsyivkTEyMMmw1UYGdhkuAYjA5sMGMvIwCbDDRgZeAz1TXgcmDy3YeRhk%2BcOjCxsMjyAkYFNhscwMrDJ8BQ2886gXoaRhedQvyTSkDZ7uA6HLLQBI5vGntAbGHugTc53cMxC7%2BE4SKL%2BACOzNpk3YWTWJid%2BiRo5NXIKM3fBItAPW55FdJLY3FeHBDr90606JCIU9Jk%2BMs3%2FY%2F8L8jUq3y79bJ%2F0%2F%2BROoP4v9v%2F4%2Fmj%2Bi7HBXUd0%2FelU6IHfHt8Aj9EPGAAoAvgAAAAB%2F%2F8AAnjaxb0JfBvVtTA%2BdxaN1hltI1m2ZVuSJVneLVlSHCdy9oTEWchqtrBEJRAgCYEsQNhC2EsbWmpI2dqkQBoSYgKlpaQthVL0yusrpW77aEubfq%2Fly%2BujvJampSTW5Dvnzmi1E%2Bjr%2F%2F3%2BXmbu3Llz77nnbuece865DMu0MAy5jGtiOEZkOp8lTNeUwyLP%2FDH%2BrEH41ZTDHAtB5lkOowWMPiwayNiUwwTjE46AI5xwhFrINPXYn%2F7ENY0dbWHfZAiTZbL8ID%2FInAd5xz2NpIH4STpDGonHIJNE3OP1KG4ISaSNeBuITAyRLgIxoiEUhFAnmUpEiXSRSGqAQEw0kuyFUIb0k2gnGSApyBFi0il2SI5YLGb5MdFjXCey4mNHzQ7WwLGEdZiPPgYR64we8THZHAt%2BwnT84D%2Fx8YTpGPgheKH4CMEDVF9xBOIeP3EbQgGH29BGgpGkIxCMTCW9qUTA0Zsir%2BQUP1mt%2BP2KusevwIO6Bx%2FIaj8%2FOD5O0VNrZW2EsqZBWbO1skRiEKE0DdlKKaSVO5VAuRpqk8VQJAqY7ydxaK44YJvrO2EWjOoDBoFYzQbDNkON%2BUbiKoRkywMWWf1j4bEY2iIY1AeMgvmEz%2FkVo9v4FSc%2FaMZMrFbjl4zWLL0%2BY5FlyzNlEVYDudJohg8gPUP7kcB%2Fmn%2BG6cd%2B5PV4Q72dXCgocWJADBgUuDTwiXiGSyZo14HOEQ2lE6k0XDIEusexDzZOMXwt1Dutz%2BtqmxTvlskNWXXUQIbhaurum9GrePqm9Yaeabjkiqf%2BbUvzDOvb2Y1E%2BEX2DnemcTP%2FzLcuu7xjQXdAtjR0Lo5n4%2FHs%2FGtntMlysHt%2B29NXbH6se%2F%2FWbFcyu%2Br28H0MwzI30DYeYTLMXIA2EG8QlHpAsyS0EfEToR0a3utIxFPJ3kiIHCCrZ66b0e2xEmL1dM9YN%2FMwS5p01N5jMX%2FBLKt%2F1R83l0LyC29M6%2BiYxo%2FUNg%2FEF7c2WyyW5tYl8WnhWg2%2FhyySbD5UhnDyS7OcU0dnrFw%2BDfGdI7v4QfYIIzOMq9hFtY55gmvC7jZ2FK7sEdrn6IXBuucYhjsGdQ8z0yEbWkkczjjsE5hNAIZrPx2zOLZDmKNXcXtg7EMqidAEEWg%2BSJCBBNwxvxJfc%2FbZa%2BKKf%2BxoKZybnq5vaqpPTye7CiF%2BZFjxZ8%2F7Qij0hfOG%2FcowPA1rT1l4ymWnrKmxxqfErTVrpgwPlz1kC%2BOy8NMDz6c%2BIO38K%2Fx0xkPnLW8Kx6qGAoQdL%2BTD9V9rb%2B%2Fctn%2F%2Ftrxz8dUrZrD%2Fzk%2FferF0cNt1BzctmX2FZPXt%2FjnFCQNz4Ah%2FiKllGiCMs1w5Lkg0kiEwj6VTXCDKsX9rMpnvIj9pcDecXAIXMnqn2dTUbN6w0XQ9ue6FV%2FnnXCH7S3lPWGltVcLsH75ub3ab7A8M28caNrIeOr3o5Q0yFsYL80xaa0EY%2FUEczV7icUMY5pnelAkmUAXmHYjvFWFGxuqlSaow3OM%2B%2FiYY7%2Fl%2FhVELF4EjRqNR%2FbvRbOY%2BDUGzGR%2FOh3EqmE%2FugIQQguGt%2FeMYz%2F%2BL0cimjeZfQDI3phXMbMQsqH%2BCjwVz%2Fhf4idHovgVmB8gLvjbicDcC%2FNypP536E%2F9N%2FpuMibExdohBmNwyiaZdJGoigos7GpF222xrfnZhML%2F7Z%2BylaqP63Hr%2Bm7bdUkQ6%2F2cXqdfmvwixY%2Bs2ksXFeXcE%2BiX0Z%2BIow76DBNgjJ7TOdUK18iPsPflfQD%2BDPsZG2Aj9VmKMMJ4fYRrhIaxhTDR0Elh2vA6h%2FAE6xUb29mj3sjmL72petXjejPy%2Boel60M99tFduCI59N3221xe7apOvxs6aHs7vab1IqY2tv7q2xsHeHGml%2FcV06u%2F8S%2FxTjJ%2BJYc0bWEX0ukW6YmIbGkJRMdjJ9mYIH5QIdJF4hvRGyK7cC7ctImQRcUET99fGXOoft35GYLMQu%2Bg2smnkgZUrH8AL%2F9Si217IssJ916nv14ZrJrvdxLkQvrvtBcjgPC0NXOicO8Qf4mcxPqh3hgUw3DDfdvLJXngg7N3dN2zbPJSaed3OfZnMU7dvmznp3C3bruO%2BNmue0LFsy7S%2B6265%2BfCKFYdvvuW6vmlblnUI8xCXp37CrOZv4B9gauDBlYp7adcUXB5DNCwYImlXOJJKkAdvExXxVvKEYnCo%2B3eIskP9qrrfIYs71CccBjfXRC52udTHHdaP1A1ui%2FVvH1otbrLrpNXBsGX5B89QghDyimlvNB2KfkxZ5C9%2Fem3%2Bd1%2Bd%2F%2FIfFp2%2B2Oxn%2Fs%2B9n%2F79p39S3s8idN6g0yZObwJOgKUpNB3GyU0Ls0PbRzIRq4lcarLKOJBkLRzJQD4j2090XrbA7DW8K3jNF5hlGS5e4V2D17zgss4T20egOJte5iD0bReM9yjTxnQxCRj3c5kFzGJmGbNKmwGw39IJDJcXJZGMkaAB4jyJAKw0jt5IAuIE%2BA%2BU3cVAZZrq9zhDyBrU8oosuxcGNTzCKJfla7JjNVmuSb%2F%2BtuzN2H%2BX4vlB%2BPpdfMXXmuVsNiub1T34SFbjYw5itEvVi0K0Nt9pNJUMI7SLGRhf2xipfCYf8z5OdlGKayOucFeVPeS%2Fdbo3lBrbSMmwUiQN5%2Fed7g0Ds1s17IuZC5kNzM3MZ6EWCa0DtekdJfAxz%2BR%2FOX28sND7yRMTBcf%2B%2Bs8mQCQWHya4qBv%2FufeMoWyslPA9DtMxUknxkH%2FyfTnm2CMYzs%2BCq3r7PxY%2FMXomrvTEsRpfEGHa%2BWN8E1AHjElb7d06ddA7oK%2F%2B5Mdsv9EtPms0jv0Z5kf1FqPxWdFtfFr0kHfgDX0Y%2B5PRSG7RUj0tQr7rmfX8DH4G5W28kKeJLtmQsQkuwMP1pk16EV4sl7vrMJATfyUWo%2FGwEco4rh4XFQgaiUX9qxZHrMQqKnz%2Fc2d8b9TysYrAuXpP%2FRf%2FGr8b1qwwc5a%2BeuLa6S6sneNXToG2XrEJi4R5SGs8Sq2S3d97bsfCRaTdaLwKClRHt37mkudvXbjwVrLhuYeGhh56bvfQkHpk2CwvwClqgWwuBfndC3c8dwmstj81KkagcUgbfPY8Zje0W%2F82VPWJHmSq6pP8hPWpotc%2FEexDOK3qU%2BwngPhOCiO9MJRm8TJefjelrzoKnG2Bn%2B1NCUmPE4gHFmBN9jrTigRIpsACrc9Gstg58ULkp9467%2BGf%2FeFnD5%2F31lNrt2967dhrm7bzI%2BVT5m%2BfzKhvf2MzpICEm79Bopkn07lt1762adNr127LwVqQLdJ5%2BlpQDcvHPQtVY5knhYrK6q8%2FJsiP6EuhGZdFdaNszjvpqvc%2BPI0CdjN0AXsFOC3ZfALDJwr4q2Xq%2BGF%2BGNbsxUg5NLLIEXi8otcDQcUts0D8eQ1iVDRAMBTsYiNdRIxE09EIBJO9A2xqgERTaW86BUFn0OD2xFO97FAgFhF6OoQ7prYt4XwSeUgQHiJyDbeke9IdQntciLQ1FlJMaYcUNvZBg%2BFB1ubjlnRNvl3o6IEU2w7fdNPhm%2Fhh%2BFLysUu6%2B%2BDLHkOkrSHYEjH0tEPe7WdD3uyDgvAgK%2Fm4szFFR7ch0toUgBTdWHr7EpaWru6%2B6dmbbnqWEbV2EtxAsXiZAPTtGPSbHsotI2leoM8TePEqgSQprs7AGFf8kuOkPdZPXGb55POAW1d%2FjLST9v5YflasP6v%2FCO7%2BGNAPC2BMZWmsOjp2NNbfHwMCJD%2BLPVL%2BD%2FOYlWEEI%2F9jpPddOFkB5d1GSuKZYggmCCd7JUxD7EXAzxyirYnNDLdDZoFdx14kivkvGc3579Jm36reTTvDgBnaO6vzyQ6chQmlsMoIkIQ2%2BbBDWBud1Va4pcCn8CPqxlh%2FfgtG8IPaPH8C5wk6%2FnZDv69jurV5QhtwE0x2iqOsj9Mx8B9%2F0EaUdiPfOYYDCi%2Fq9jhWRuupMDEU0%2BCtX0sDFxv07T%2FK5niBPqN9%2BtQjgEc31NGCXFeMcCEuQBIc%2FBK4CO78u7EPYvl3yaEfK3vcb6qP1R2tI7vUjVDDUdKubsSrNjYKY1qBEa2P50SJoaXiksIoLiCwnxS6EBuBde87botNfdEWwYvF%2FR0%2Fu5yCqhGeEOR2ynSeyXjt6ka7neyye8kryBSWE52y%2BRBgogrXPZ8E1yIHoHIFUM%2BAbJhE7lbMtt8ApL%2BxmZW7PwbjAO0fAVoXQOuiSP%2FksIVdFZ0aulsamKUzwPZ%2FNYDMJRBPCxsBqLzqHyneXF6Ej9HlIFo7%2Bpg%2BjUb3unRmGpstGkm6etOuDBGA5wCMefp1gTHcdZlvPBXlOslvYTp1cd8UjYLVd%2FJ5awNrIOKLnIt9MD9qdrKrWCvA6ALm3QV9VrsPm60Q7%2BRHJHP%2B2hqfugo%2FMvI2H%2Fmqr4b9tFnKSRY1Y5Ek80Nm%2FWIhr1ikKnxGz9TWXrokf9xwujfvcOTtNTWnxd0F37Y2W79tteBqZ4G5qLCuomw%2BnSr28QESCRVLTyYKILGJOPfcnaIFOsewhRdvv%2BrWa%2FWih0vlbX6Zb75T5C0qNKVFvH1QL%2FvazSWgC2s6oWXXIuUxQelKiJbowuJDQViatLmLijg9CQBMg8WiPgiw3LEeYRmm5f%2BXdnvkDnxLLjMLxtvX74C3OlwPQqx4xwIdpPx38LrlDphiyWUWHWKAzzxurS%2FxTo%2BP5wGFak62ap1PVFFN4v%2Fy%2BxuR39WnIO7lsWfwgVsK17wxrs9K8ltIKuhkw7f%2F6dhK6gQokFKhWX3urrjk%2FrnI0pgfpGMeuQIUaEM7%2BGF5q2iMkCaMQwxxOzcvU0eXbsnS9XknXvP7Gtw5dwPXlFu2ecvSHEZgNDsU6x%2FGdXBYXyOQjzZReSedeEPY6nEv9gJR4oBQJtFO6Kd0fwC6BO4LNHDeBujB6dSNcUQC9zIv2LnAzGk99bUDrdFY%2B9yGFQtEo0GQPNv6vS2drj4%2B1jHbv3aJSMUWP%2BQTZrmbNTjU8wyG%2FiXNNpskybLcJ3CiTF5Ir%2BJYzmJwE0mSVhlxbtbmvweB3ulB6Til5UuUZydpgiFVeobhU0WaBqpJ198d%2B%2FXeNRTZ9%2F1OPfG7%2B2hwzd5W3D%2BhmyjsRcUg%2F%2BCavb%2B%2BVh2ls3L7zT%2FetOnHNxeerv313vzLVqPai4nJv%2BK1FC6040%2F4udw7sAb3laSg0XCkAAs0npBO6VJabS4Elk%2FU%2BD4gTXW%2Bj0wnrMlqNamq4tMIYB87tE10i0FR3LZNhJsb7%2FR561btmes8YBCRkhYNByRtKd55mqTas9FYhJnbRGHuOh3M4QTdgQSqmgRxuzGdSvZGcbMxNQGk5C3ebLjoXIOFM4l%2BWKHmLTJwRv9E8GWJ6dYvf%2FFmEyEGr%2Bgyrr1p5zrgkz0Cw2j94Hv8Jdx7dIVegBSNtgsqGsRQEYiIBoXwD0LNvQ5d7s5Z00QzwNhqZA0b%2BtMG1tQq5nd84uq8R0zPvX35G8uRaze4jcOHzz0w1%2BQ2BIRvf6J6Kgatnrbiem%2BCFvAxfkrndzD9MFPP1GWTUHclpASUkCNAQkpCCcCgDSUDAhDZ%2BCuEkgn8J7i9nMA7pA4lISappxILKfAeSAbIcSDuN2bJcfZILqeO5rLs0MnngSHYRdrHjmaz7JEsEPw51ZqDJDmUIOZIe34WaQeegNsJn1qz8AIpT3yCjyEih%2FxELkuJ0lEMYTLVCiWpo5oYMleMH6USyYJcD%2BuOe%2BkWKpn1Qns34iyYDjkSLvgnZXcgVQNeqINXr48m3iS7cjm8tedyY0f1QvTnHHdsrKby%2F%2BSSbPY8%2FNH6vpl%2FEsq3Ae4ZU1HC44KFiI9o7CEgab%2FRqHbj7s5KAg06s39ZP%2FzxI%2FmVuF%2FTbTSy%2B3Fb8If9%2Fcv7%2Bwt91yy8RfP1QXtW5RzQn7qIiZyuFM5QfJ5E9uVnqT85TanFx0lkP3ukBAMprvsRyi%2FC8NAJL1xbIIirSvnSj4O5netb4JxmNANHPssHAcHMHsFRgEug816gDBeMbdfiuRcghqYcm0%2BXxx%2F5IAEtN3fqFF3LzAXqwoT0PN0OVTNqxo8sxMkd5Ig6k79Zk7VxxX6gMLOZFQgvpW2RrMW1D0BDihaXQ9wVRoBxPLfpknmkeMtoB%2FqM9cRc9IqmMD2XUmdZ7GSRKPUZvChf8BoykriM2MnKYbOHX8R7cLdNCxSFFVQqoYswnlWtlFS2mNkhswVpZiQW1J%2FUKFfipHGlUkM6UKBhMz1istELIHJLMSctu3ugzfaVSOjKvUgc%2FTHK4Sdg2Wscz69leKIkkrwuuWiOe9yGYKQXRumkC3qbRcMwrvhjNXgdZk3RxAUEhuSPvn3nnd%2B%2BU%2F3vlVOmrJzCD8JLxV1OHRjrZifbcFDOuRNTGqdgQm1tSNJ2OcQ04YiEXuxtII1ECSQRoQGYioEsgCfchB4ghAtw7FfJre4WZ9hkVi9MtjuWqtdNDlpMrfEG9fOT6q21okg%2Be4As38MfGquNt7oUws6Ysarj1%2FefE%2Byst86YUVNvDdts3Pv5c8m%2FaP0C%2Bf8%2FQb%2BIMnGq09BgwN01oIOAnAdagI8mBSrqk1gxTDUBOtk2ousEtBH2z4Ir2d3f6k8PXXVlt2qN9RODxRuoJT%2Fv27wm09jRYVc%2Fe%2B%2Biyx2tyzJb%2Fn3J0htXP87eSsQaf2Ly0s6Zmxela88REy1cf4273mI3iXNJ7KxrZibOm9xm6rl4fqy%2Ft27smU8tOfdW2ucBzg2UfmOIVyLIl3kpYlwphDISTXJXsctmiDtN7fNV6zelgxwnWxsVr83Aj%2FS5ki1jL%2Fa0GC6%2B2L6Um%2BaoddlNFuj%2BbJ8mH%2FiaLh8I0%2FU51NspIEfq0dohwyFXKgm4NggwQ4rRhCOUFtxxo8XnitT4cnGfT93IS8FaT85XE3H5LMY4zIEPL1hw443wz%2B1UmhTJyJGxZzw%2BwsKkKZgUiVtKOKMEb2AKHTv61FNc01PQFwKnvsZ%2F9pPA4RKTASWahmh%2B8MxwzHxKy74IRn5LGRjsPUUwTu64UYNY38caqd7HKucZ%2FtHnODtENw%2F2UfHRMaq1UUPDJQ0OKkWCeet5fYOhII1VRz8%2B%2FElg5j4Gxur3J8o2PJ4rg%2B2d08T%2FfwEzSVbyZ9XPro95T477lRKqUSRXQnauHNsISAl27oWi6Fv9z48JMv8r%2FaMMj8onCP%2FDuDZOuN%2BGPPr%2F%2Bp7bx%2B7JlbYdppcNhzKU%2F1Px5aiaGDn%2Fs1iGMaBcleKUo%2Fv9rcxkZj7DBEKOfrayytXNLYiUdBY%2BpleQXdnscKlQcpzuWluxsieeyuXIK6SdxozitWyGOV3vOHHjguyCQ6fpIYy2JwvrQEF%2FQa9Pdf%2FQqOSqCiE%2FEE1%2FXIVKTc2tzWbHnimrEd%2BVyz311Ml3P0GVTj7PD5aDnsvCvH36alEaPMePcMegXs7x8igTu4B9v7G9vTHvhCu%2FkzIdx%2BBxC0ay9zRSvoS0F2lIxI%2BX7klU63I40gLQ3w5ep5na%2BSFnba3z5D64zv%2BQtM4n4ffG3tq4aNHGRfxgrXPMim%2B5487abL7xhdseIRn1KDl%2B7aINixdv0OD%2BJSPwKf5%2BxoP6aiTeQIDVlIhMcL1H5R9PYXvprs3fv2bO7MOplCmweuiq2JRZ1zz%2B9a%2Fv2PH1Hfz9236w%2BZrPXvWfAxlj4NLLHpq3c%2FPQ3uvmvbrjG7fe%2Bo2y%2FcLdtE6VUlXi0ASb1VLUBVSUWSU4HdvAraTyS8xzM8NxvxFkXV6pUVRiJwcgC5zEeht4rwcp7ki0k41G0qlQhG1Vzlq8alEmnFi58caB5Q9vn988MLhqyVlHvLEWjtQFeupdiocF%2FtkkOGPW2ibWaBTkeZ%2FdvPWazXfOnnvL6jkRXpi85sFzZt%2B55ZptW3bl1cCCHZPD06MhySha7UFzjcjbp8fOecFCirzAG%2FyVjBX6OFIaadSjQq1nNhyIe8tVbaaSdHlXIWKacMeuZA1uxS95zILhyrxAdsXTL6m7kNQlx2P9uZf2qhufePFFbpI6%2FOU0WcP99RrCsrwseVot5mtytpf6Y0gm9sdeyKnPQ7onyK4nXlR%2Frg7H95M1upzu89DH6pgUcikoiihJ6NJKmRxV1x%2BMJiOA3YwhDRQrWU0u%2F0rvq0VYXnyCwsLeTJYBq3dAtJDavuzyoVpzZ99Z0%2Ba0uoiFH%2FxcqgDR7rUFeOrUn6Cywb8ZeNMbhLV5ugP9l0zv9UN5b5mFkjzxUcpPJCn3V402pRxtJd2GrnLdhtVk9ZSZh9W91fCSH5B7ofxPiWL%2Bj3D%2FuwhBRdyAyozeZwvQzs79soi%2BBKSnafLviZCcfrpBpLyimfLfTyJtbyruIQKD01tUwJyKEo%2FybaxkSNFUMdMkhQoJyRBQFhnUkDQSXhTM%2B3NmY0EDM7ffLIjqWEGt8lCO6mLia3PukFnghosJD5p5SIho%2FVDkzQfLE%2BIrYoJXkD19pdP7OwG%2FvoIUtagiWiZ4PAFTHHlTVhRZ7dYmPar%2BNJ%2B8JhmR6DFK5DV1foHoLNO%2FpHrvZfmWZ15RQlwvoVDKhCWNK3CCch9lfFBuAqUgpFSShmNaPj%2Bi5%2B%2BWZfKeViJfW5HnUakVL4UCNVkA4%2BETfIqx4B5xSaP2L1yn0zn2ltPn4%2BOqZGmwwEVCaCSqG53ldtL1oLGAhdMLd09MpCCF6tD6ZnAZBY9hDaYsP0jzZ0j5ZjKsF4i1UmLuhbJMCnYJPt5VwFNvmZawXjEvLJqIH8STonZjq7BZ8gKgR20C9MDFqJAX1H64QW2NEup6qgzLP8cvppL%2FNNTOBTCJABOHeWoXzLhw4Wuy7gaBtjKr9kgKq8ZlRYBS32Lpxc8vIhpNDTfyNXWybMJbn2RyQ5EmWc2QF9wmSZ0KYCE%2BcPuYO6b15Uotj2Kd4MItLS7gtFbkTdrFND6pvEZqv5Yv7jXAus7Pg7avo7KDot50NX3CPkP%2BKps8J9%2F3mGQIteY%2FLGPC%2BL7872SPR2br5fy8MtKBMHedGuM28%2FMZmPJMrGgi3Gb1S%2BSi1%2FL%2FzrZwO9XH1ce%2Fz7ZQ1WSoY%2F%2BpMb5FT4ua0Wm%2BJf%2F298nFmChEQ%2BTi71est4mq9VYI6RsymoRJKYidElT2FGnDTZvqtfhGAFTbeqEw68GqtfmbVa%2F1IFO1%2FjdWr%2F8BDRRtQh9XNjubEm4aWVpVonpTGR7PVGc%2BKJNoBIWF7kYi4gUV3r1U6723i6TxUl3n3%2FtM27aZfKb7THiHW9VzFSwHJ05VfK6Ar7kaB0XgPPE0BSkSFKsBUpaLihEWoA9wBt8qirh2VSOkZwXEwyrxZ5jyt2rJmSo9gX7cg6jsEUGJU9z9xJPOEM3uQQxKgkh35DNATnVyrmJ3mbCNyIB%2Fyox4wH1bg2DwN7q9kov4pFqny8oSm3RQbGgJ1QQTs6ZMLilOVYJ9v6Wha3HcJ9jddsXp9YhGUXLXt%2FqMDnvLpPNTXfNa60z5%2FyjXQOMq%2BlNmwh5egpYrdfZQZV9rI47xlRkuyTjpzsmCBSWNkAXVoK8sgYWqQJWbo1RLo6QH0YW6pxqfCnRgkd%2BRiFjUQUQ7poIaYoakgXxwFd9BuuI38H1xBxXSFb%2FpBDIKQFn7YB3dB36l7sG1FLaKiBdp1KxLvfswap%2F30lnVESgNnvjbUoT6w9N%2BXoio0qcYOIM%2Bheg940YimsucQVvli9NEcft2UZwGQwLuilj1fFr1i3NP94X%2BPE7Hpvtj6lBJfJ4R6NvWiaL6MgzWHxiN66DExa%2BdAdAbMYX6HVF8A%2B7rjEZIXAVbDe7PVI9rmN69JOLV1DOSvRPxWNPZBZf%2FNf%2BNy65BhYxxxV%2B77XJ2wfQ389%2FIQPgajXbwMsuAz%2F0IaQcXJavKbRqR2IqyZruXjVC2%2Bhdee%2F5vdnYOedpmVtR3NGXldxSzDSIiBVpkGb9by89UpEPKrSLZmyFDzMab%2FwXl2CNe7s%2FqCtTvWgG5kpBmCBlSzDS%2Fr8N4uwBwohRW63JTS1y32f0TQsPfXVGEHQrV8%2FNCfiOUVirYcBbIeA2%2BiF68rQIo3B%2FS628vYESr79ehzS7Q9LEL9UXmik9XVHb1yBO3Ngvt5935%2Bk1efkV51mzzrM0LL3%2F20avnwMeKuWyOUZg2TasSqZ%2BKcZQiOn1Iu2Vh497ALUVZiCKt%2Fgh6IvTIj1ZLRjWAkpHKOKovNwp00eqPROiAbiNEKieXwMLcXhVJ1%2FuzmLP4tfxaHR59cBdJVG1kTAgl9ze9QKUEQ946Hkb%2BokJ5JRDyf54Axur1D%2BWS49cLr0tTPEu7UmXrxcSr3XNvumv4yXzInXKH4F7Tc7p17Zt%2Bt%2FqW2%2B93k063X7VW6lALxTY7i1nBXMxcxmzQbabxz%2BtJo%2BwijYaIGMNS8AoSMgAPt84DdHOoMPfjXhF%2BkuH1tZvuFQrRCN07xGcXRX9MYxYchDe5BcHj%2BZ4i%2B42WyPc8Xofi7bbZJN5nJLJ5qr6IqRtzqNlM17SpFsnkEyTWoABEjz4JXOQvzWYuwdnV5LNGOwTM5v9r4RpQ8ZXsYodks3o31JBlzbYtNotisnm22MxiwGFXam5oN1n0TA%2FhRvshvTSDwHff4nNzRo9Dum6PaJbMXzDz%2Bx%2BFkj4L4bFNBb1asqsgH7Dyh4DvbkPtf5yMDKzEwyoaESMSNS9P9gJVA3%2FRTlwoMwZvxECFWxIPNw9gi01nOHjP32esZTtmXHnxvZd8ZtakqQ7ekajbXetpNa6ocTVxJtY%2BuSe69OLz77zh5bDR3xjZMzUz6fxrz1nqrZGcHQHfPVefN%2BfiK86LeXj%2BSc5lPKy%2Bk%2FvCUI%2FDaLFYCWHr6nbXuILTIsb5imNKY%2FrCm28fSMxPhkN1XbNMNZGuqwOBhtTSxWuTk6bw0ZaG86b1hKddePOKuBvmiguYBn4T%2FyOqOyGRBt7bKUI1GjioBC8aUKwF7Q319UgcmtFGIzCJGBqwQij0ynDsfdFGc3TS3BlNfJ25xmzniMkpXXTPvCaD3ZaZvyzjmZdudBostmhb0ORZNN2sJBeed1HXkrUsywueQH%2BL0eCPxmsa5ZpgRJSDZ11yDv%2Bjmbd86vxZfc1WcZJ3UkMq1BOOOVtvu%2F%2BpB%2Ben186d3GTwWAw2jheaJs09%2F%2BLNfZft37DALyrNj1wABMuUKbODyTVnT%2FKYbJ3Tpq8IrNh92dkxOj5P%2FYpZx4%2FycyiVcDYdn4JbEoKdQi9054iBKsygLW46FRGxAb0NPNCm8BSNCPjoKcj6EAus4SuP3rB%2BcV99%2FeTF6294dA8%2BTK6v74MHVpYNRt%2FI30e8QGTOOdfGWzzxcy%2B87a7bLjw37rHw1nPzp0KyyRSeZO%2BQQhInt3dYgvycjrPOv%2BT8s1rptaP84VeywdWX2T4ysr0%2F7TLIs6%2Bx9zib56ye1dM9e%2FXsZmePY3NDs9zlnNVt4%2BWgHJbbz3Livg4P9WWgviOMm4kCRT6I8vw0NbUUEnFvOuFKoxQW1gTsvFirsF5pb7qTUCx4i7VmtToveaDxvK9uOaedVvPRpVOnNz0Q6bry7uiSdQ8t7Vy4JQKVS%2BXPplV2ts4bvCwZu%2BKzgITtxepaPRzWdpv74muvv6RO0SorX6cu%2FdqKn%2FXWnrtp%2FZragz13DUCl5myiFW2Ycvb0PtsXnU%2Btx8pvLFbUspLX68mdegwmOif%2FNPDONajTGoUh6tU56HBJCTBASVvNUB5VIiKpc9kd7kludodSFz7xQbiOmMk5dOYk56gzL6uaf7N8a6MQOHm0ae6snZpFDfuT3%2FjdYzjzwkXXIVHoXNuCfQslQZqBZjTsoHMqrkE4jaYdgkGz2ATOgB3cPkSukD01DnV3ttb1wx%2B6arPqbkcNAHoFPzKUUQ%2BqL0k97pjbZv1I%2FegC9zTFbrrlFpNdmea%2BgIgfWW3wqkcis8ky5FAcRd1If5nNZrl2FFpungc8wpoCl1BpQV%2FScS%2BzjlASyUTVv%2FAJ46gkJI4bHX4lTnloctxPZE1ckS3%2BjG2fKIjkQFyzuo8jvYQG1OrGvJPSTu%2FnSp9PHNTl4z5hK%2F8gtXVKF6gEKiglgcKiRlCESsQCV5QIlKWKpr34lt%2FwkSx%2FJCmP5%2FcBKQfl%2F5gd%2BrOS%2F%2Bp91%2F%2BYCg5CXK2W4M9fu%2B%2F6xxX%2BvnelVuldIDCG0VQTpU9Dw4pRfei%2B6zWx0MLie0gPbyrkmRU7OwT16JGeyXLHqOLqAfVN1GPlBzWtFNzj0TRTCjogtP1NjIvu5habN5Aoa1k66wGpqriVetJgiGdwDZtKhnN0y4n9sXYnsqGmZfDSR15%2B5NLBlhoDaedEm7sxmpqRija6ZEEg2EAnTiAC8IrmFbGz1q08P9PSkjl%2F5bqzYqT9hMmptEXDgTqP3Wiye%2BsD4Wir4jCeoHbbp5hRfpB7BakUIppIlPCD30dR1GtslDz8OsqbXmejFC%2Fv8wu5X2myq7SJ8Avzv9DFUJySf5uNvq4%2BTi7W9D%2FOZrLChdwxmPNiBRqVjnpK%2FaGxRCDspVYKAW9AN1JANoo8wP4BJUlGqdgw6m1qPQ2QW3%2BOfU5%2FieLS%2FNuKpDU3uf8bcAXyBal5jMR2NEAbPAZt0K3hvxHBEDlUxfIGcD%2BN2gNSNx36nfqlAYow0puatNpRz0e4W2oahKzQHsjf2c16ad%2F3t2KTtPobnX6D8C8pd0MDP%2BKx7wnXqGGlLQcvikMErm6TmfsuxJXbSAxqNjOogJLQBLiKEHAE%2BJGTS3JoEhTrz8%2FCB%2B5YlupJ58aOat8Kv4JvregxwcU5Cp8GFAFm1FyOfto6GS2m1NGTS6CPNKkbsTdCBlnN9onMho55BX8IJZtEQ35lk%2BhtwN5A0V3RCPoD%2FyXAcv6pAtbZczRUA64JmcUf4q7Q89ZHLeJVZ5D1Ps%2Ft%2B0iCT3AHVtZC7JDCXfR7OSb%2FXja5H3zQbZL1B%2BULX1BMTEk3AseSpmnKEK4T9ekMIidUCRQFfcbj7z8gNLvzF7mbhQN8h6ZbRset%2BnQWdS%2FZX3k7WpS8P9sfo0iGS64wV516pOhjI6TZ2dApgI5%2BLhxywYoWxKUrykKJsIoDsR4mSrCTg0egMPnLW%2F3Q5Nn8BZEuzqEI7HK3n0%2BzFmuO3TtWQ5WJoG9YqCD6Gc32SxnbnVPfsxvrFXK2dILl7bLthDp6glhcsfp4bYvbSmj%2FmQ94uBTw0E73x2jbNRCvC6VL6GCFDwU7eWQDcC5FY5s0slieRDwtAbRsbLXbaXAuu14e2OJw1dc6jQ3ZdY8v7rv2%2FBWZLqvFWVvvcmwZkK9f5jS4muO9yR5res4kfkRxhV03L1RfPOiPtYi8pd7jNEsOpyTwxpaY%2FyCZu%2FAmd5Or9uS3DYaeqVOhH7gZN%2F8I%2Fwi1fEuLXvyNivibjuKvN%2B1Nc01HF%2F3h%2Bef%2FsOhox8MPd5SFucPjorQwXT%2BytA8EmA5mamHNFDVhBI5pjZbQpugBNkO8MvRub8KVDKST1Wag7D3xlin1ZF7LFP%2F79nbvCXFOY%2BPUjrT7%2FotsPXXZ4exdPzuhZuL5LUXVAn7k7PbhG89uz3b41X01gbjP1xwlu5rrvvf9%2Bpbs6E%2FVu7Nk642%2FPYRaAiUBdrmO6CDTBLPQFA1ur0uXoBR1INDMkypKpoTqnSMx5GiEdTEaSHLs0Alvu%2F19%2F5QW9Rv1U1ridT22i%2B53pzumbs%2BXFFXYC%2B%2BCGsTj5JUT%2FGCgRt3n78i2n71FHG4%2Fu6X%2B%2B9%2Braya7os3ZbDmgWfXun44e%2Bu2NZKuGZ0HiF8M4TlMPR%2BEU6rPKRJ8wOU2RFUFLex3egEsz3YqEAq0cqhAAW19dBZIlVzR61tuIdTnpXH7l%2BuXrbjPUyep%2B8cl6aXKWhPHpDcXl9KiTWDNr4mBQc8Tq%2BNzK%2FOKSbsfl79o9G20R%2BbrBXYvUg0rLHhtrc4TN81TTOWSZ0gL1ZVlOYH2ery%2F7XVUjFMbzYpg7UswcqJPQwBd0LKLabJ8IaCr2otcjSkIrGwootKECaUd4XH1%2BSdazRrfddkBU98t1htvWrbjqSqjaCguxrffM%2F5zDCpBALUycmajhd%2BR6ww4SWafuZ5eU%2BtPid4lgd3gt%2Bb%2FY9rQoZNmiXYPXyRHbRs8zX%2Ff4WIFjWZJtUdSD55AP3xtXH%2BZipC0EqdBGDA4CoYEU6gRLGPU11QhkLTBiEYPiqOeQgwTCl9aok1Qr5pFf71qEeNxjy%2F8F0GoqYPv75Yh9j3x4DuJ%2BuEzHRpAq2lMqb%2BqfTdiq6kGtzfOWsv0c7lSeMXDHBDe1MT%2BLUgx0Pg%2Fp87u2UicdIvqQi8DkxhcUwUXCedMpb4NQjwY3npTmgsURJavLwCRyEcN2HfWsDVGfv%2Fu9ZUWUx%2BPYFueUKwaNvbtu%2BXps3eVWbN1GcgVrdMnWJ7WmJz9SD66EBidag0NF1Ukep0t5A7sFCWdhzvYwHv6L%2FBehXuHqfaBwBEU7hfVLcXvS4VQv%2BT%2FvaSIl7cbeMc7ekv9i8S3e1L5xxpvMGcu1EYPbKyCiijjGXcDKckm43PqU2qNWlXusZMiqF82cuVzolUHN9NNR0HZPxFPV9V0wLtvq%2Bk4DqOwVWDlzuQLVdqFiP08cRX7aRlBVfR8cb55bWe5LExnlcsDp1vAP8Q9BucPMk1Ulh4GnN0SAdxcNHv3q9ohx1Ati4S%2FtkWjIDe3hQdkUGrGRaFBiUdiTSkI41UkMuuQHP%2BEaSQYlPQTFWJF03BNPpTu5KFAdkWgDukzsZKMG0Q1TAQQglScOaP%2FdsZ8%2BfP75D%2F9Uu5Gs3FY%2F2SxPld0DHOciXI9gqjcEidXjE%2B3BLosy0OcX3T7O5g65ROGyzQ2BZs7WbZVnO5ydLe32hMwTQ4wnnKXW6XW5LAa7oaXOIHoUl0FgLQLH2by8wSTWeAx2Y5PDazK3BqZbeJZwXGPaYhX87ZNszoDdaRxotXO1nNlpdvAPFWHDm8PqEE0sZxDEqGzxisFNnuCWetPcGrObN0p23tTZwMuRVodSV8%2BLTrOV3eRvzjQZiSjaLYS1WEJe0kNsJlZu9LFun7%2B%2BwW4gRDRbaxw2nrOGm%2BxOj9cmtbp9ZqeTM1m8UXfQQCSTVSQox6pvtjot%2FFpHvIUjJovFEoYvHYV9C5Y%2FxN9OfcalvII37UEhTbTg%2FAQIaPb4Vz6j5u8%2FaViycMod%2FfkDcpu8QZbZoeBi%2FvbzP3XPsZvOubMtaPHkD9jt6%2BU2O7vqU%2F9C9SMvgrXpQNG%2FE0oJxun%2BCiElUa0IKQSUwERxOntKSV7ekcuh9VBZBBo3VUcB58ofKBHCwLyf9qFosz9Ibf8dGqwaBMjRig4SGOZ2UkWI7UiO9OfUPdxOYFApUZyfpY7mgEc5rtNGGk2H1lPhAk1Hp%2FVAMqQEHEUfEYkkUQq1JMdzsX7kklRrTrUi1wMcDjmu1YYfATj7Y%2BpGpPEBXuoQIj8rR9mgCl4C9yqmF7xnVWxGVniNqtpVmXBvQ6iwni5YQ8a1jYrXtc2J13HvgkvqWxuva1sbr%2BP2S5ceKGyBwDv2DbrToe1u6BkAJV7xnVLUaq0sJB8pFqcUIPi3yuwxi4JuLr%2BP30f3OkPQ72aO0xYo3%2FEsmO3QO5qEF8S0qQH0UsKXv0brnl9%2B8M7jF174%2BDsfvPOl1au%2FRL5%2F9DsbNnwHL2pHR1NTRxMZhJtHktOOxLxErPF6YlLvpC9YP73x%2B4ofw%2B3xVdrHcDE0dQQCmCRgvt9b35xINDf1CDcRSfJ%2BpYl%2BSf8YcurfmXP5F%2Fkj6J82jNsrkWiEuhVlgFfyNkB3S5MUzLhoNiwSCYcxQ7Ui4J0Xh7fmqRbaPa1tzujxkBRlsEHy0%2FOM4pYLPb7g9O6BQJN6l9zQ0OGyCaZz0vMTbHOzXfQ7a2tsterTcqxeInODoemdktw%2B1SbVhKwtW9ffe8VKadK0OVuC3bWzyKm5LeddsWTeorWyY9IMtUFutdu5g%2BRn533qkocdvLs2HmhU75br%2FMmWtD8zA3OP2t1ea636jEzqYxJZGAwFiDEd61oTsrRuW3%2F3pYNi3bS%2BRd%2BGjOfVpAPNd6y64Gsz1GaZleWIPoYL%2Fv9mTeQBENVEguiF1aC4YeXxFETw6QyPfn0m9g8IrMFAvKM1EI11DARnbqibHk%2FIojy5rSdgCyZi06y8sS024PeuO4MfwQ5Y9yKRZCqyYaF30vzeHlmUprR21tR0t0yz8KZY66zWuGvxVQB%2F36kP%2BK38t2Hu6NQ9SFJfw0AdpqPEK2qTMpf2VCqJwqPoJezTL824b8akoL%2Bx03nhh%2BoNo5e77psxg9Q5LzebIKD%2BfsY34f2MtB9fk9v5b8PT6tYrgv4kRPwd0q9z3gdJSJ0653KjCYPwCaR5aUY63eW48O%2Fkdo33yxX9wCiMv2QTrk8eGSI6Ag6moG9t2P%2FF7GRNlDjl0gw7pJ5aOXXqyqn8SENnXBmbSwUYLyqJjv3UmY1nKr4t80no0faXsaIEiF%2FBRaIBnItSce4OUif7W6Vm9T9H1X9Vj71BEm%2BRdmIJQST%2FZfVdudUvh9S%2FqqNvqT98g9SQ3lHibZY0mRVHooyDN%2FFHmTgzjdozKw28NwQ0hwN6BCoPKaEk3YtKwNhwRLXuk076CGoZNXDQcRwZvreTZY9EZi%2Bd0s4%2Bztv8iei04JQl6ZbDD2eHV7X4uHuFVfPrOmcs6m6Kr7hssr%2B1VZFcEZ%2FPdJkn1hOs8SXS%2FNFFgqt94PIZzZ3tdaL6Q5vo6piSzdy737pwsX1VyxUrF15iJ4uNkq%2Brbyg1Z%2BO8VsNC1UmcvORPRfxtPrfRwL2p%2FoA1eZp6Z%2FaGffoewaXcA%2FxBlKlQLfhQL%2FoPgBGP3qsA7IQS8qDVNswHKRSheDUvA3Q7MZoRcJMxlEygujn1QdyzfPfq3dEp%2FbXh5e5YXW2Ngfvza0ZF6UgFL%2FE0fTq4LBlvTE2qb%2FKuuzYSXVnjTfM1osvqMHVbm9950quIZlbqaL6YP7jk3kUtA0GnX2nvq53f3WoSsvEdDRnULgo2fN7lNZJgI8%2FVWi33c3bBZnGY05%2Bdm%2B3qc7fNmj4YGKLj2nfqFP%2Bg7jdDlxEV5XsJQZP6hYrS1l0VQr4c69Xueixp90gnZPmE5OF22j%2BSYEWHlZ0K%2FHgsh%2FZtsbh6h2DNRlvv6jJh9XaJaHCZDiUDKNTMkvb8vsqCyf3ZNdSmO0fa0Y4baJTtpbKzuVzeeSI7fCKr2Z0WypapnXJ4gnoWy3PoUIlIQ1TXdqhQJIXp9Wx5fYdpeWh2TY5D%2BYVyKd0jw3iumwi%2FBC3cEy4o83QlZnW79MrCgCjbhWXBlRZVVZZv4rIKpXC01HFlHdHLoeWVl6UVc%2FJ5uGm6CViW5mulYMk%2BHqNYr0AyUPivLg2oMs2MPqtuhHyRyiwvNJej1Br%2BfcLyoAyu8D9B7bgmzUqfFobF5nKnK4%2Bt8MPJkI%2FxHUNWk117jugWF%2BxazTAALQn6%2BUE9lhoI5ApGA%2FiuJOsrlNP28SVVuBVajXmircLel46w2bJS1Q0Ft0KDuikDFL%2F3pYrid1Q4FvofwRIo4R9h2ftSwc6jHAMqLcCql8YPHtlzGoByNXYN6v8hXnRaOhUvx0sVLCexwupGDR4NOYC7PePa5keIPACnuAdD7dEadRuTIiS6Lb7uskb381My5yjzF8lGCjBRqdwrWJCagfB3yCy7XT1i92hbcZ5Ci1FJkgYMDf6n%2BjspIsHFjJrTOdzSMuOa9DbDcj%2FnH9N9bIoGVgzHPWIQuFuYtaMRaq8eCKI0gEF6lPOZjBz3EEvaaxwSUT9U%2F8JbJZPJJLBLolH1La%2FRbF9AbC8JJjv%2FmMnssKjLRBJyqj9QXxNko0Ux%2FX79epfiXkm6fmKwF%2Fen1HLc6LxloXWKvGa5rVCVL83VuiPcDEX%2FK5pTXOxHfx6HHB0t2FI0qI2rCZFTrvPWU67zVuS%2FkTsLnc7IKhFg30e4FOkqNSfH5PtkmUy6Cpiv%2F36k2sbqCeCFNa%2BURpoY0sZoYmCgCr3qgZz6s8I0gP1bYiR%2BD79H56NOz0EVWCTy2%2FfffvSCCx59W7uRV9995eqrX8GLesOXNm360iZ%2BT%2FEl3uZqL%2BFyzSZ8XxpTiI%2FG0nkT4zznFZ0t4ipMz5v4q9ssqbdKUZt6u82knPCrt6PZwsnn0XySVnyPR1ZXAn72yx48bWJsu7apnI3Hy8bygUK5Js32qcytapqgmn95uexccj205vGgJ%2BeuOeG2SORmKZr%2FqKzcx9SFctMJdwMUFZDJITs7dnOp1EKZCxg304Cevyfya%2BvlKqv6aXK1qIj3imL%2BL6hL%2ByvUlFfE0VKZ7E8gBY3M%2F8VoJCFgizH1W6VyC76nH6b7jiibYVxUmVIEspry%2FLgZIlCeP11Z4zs%2FAwvVwtGFEut5S1JY4lfyT0N%2FevOLo%2BrUEgjcqc9IkGpQbv3iW7Co5b%2BKgjvpzYdH85PLcc4X21ouwEGl%2FS4qnUAvoSlXUUhR1eKr2VWFTB%2BGMl6FsiQsVD1R3urlAAIoSn7JQkmiVVCHSpCwDH%2FqPepXQ0Db77CJOAImohB%2BRPWr31ev5g%2FkE%2BzTa4lbvZo8xdWPffQu9yJTPCNB66s%2BzXoJt%2F0L6hSoCuBIoK8fnBGG87OoRckJpLqyWe4YbpGi50g0%2B3I3UD85Oa0fzubfoXxPLbW3FDWzigmyJeM0tQkax7PqTy80%2BUxfUHPlBZIRVNQ%2Bv0xRm8REKPoLmNr0%2BUo48v9GFbXPKylqQ2IKm00QddgyWGMROCTxdLB9nCY8P7j2DjlsV%2F%2Bmfr0C0r%2FNkeXbbpPlOTBBwT0mVz1zx9S%2FwJecBF9Wgv3p032iP2v4VSgfgW2G%2BHUEdEXU6iq4CtpLJfIN9XQG8dwa1VoO8XC2SrPDDyCOQptXgbcPvlAgBfxBoGwftQKeKFrNTASPt3pGGqDt%2FQRasn2kri%2BH6L80MJRsmVYJrAKyDItpJUy3%2F15WYIJqcJ9Q5N%2FLFJ4c3dc1URpWl9hW6mu50MUIelg4ucTPf15zs5DFo1c0VSp1tKB9jkwIyuM45kb%2BIP8gHed%2B6jO3v0KbIknzLy636E8KPTdCuUpB0wLo9JKnAO6pv0vS31EtBha%2FfJemkgLVVnd8KCk4qBTpQ5m7FbifBKrPJcq0pZAFVG%2FXbOFz%2BTcq2MLrcmV28Nmi%2FOHskh82bau0k8eWCaPijQPWQ5lUvslwVCfHkXBMIehqUgtDNLeauH1huvZTbYmw%2BluPjyWoNGEuxRLR7LK5fSyXFUyK7PURQv2v8D3XOt2NJ6liBbmPGOsakw1kbeOs%2B31Wm5qpH%2BiJWSzqdPr2O7zc2TmtnrzCig6bBd%2FvgQmzOlz0STWIlmZEQfupogOZFHUZ7EkUnMn0RrpIMqAgHRJAOjIJ3yGw1I%2FMAp9q9S3Q%2FclADNm1wEeO%2Bxbwg5OIYHZLY3ehG5lJk2xhco%2B6JWybpEVz2wrR6hZyD0QXZbeDVB%2BonmlimpkWprdAs4WEZDSQppsDlcdCBJJESIYFuAtUnC4GIF2C3Uu2Kv7L1bdz6FxtqxpG4TqQOqOUNAJ2HLvPWA2GgDy4O4vaDrtyl6P%2B1fAll%2BSyFcQ28GHqh7fvvf37udylf0fNwhzgz87Y%2Bcf5x9GnF6ygHu18sAbipWeF0YPBgp2GaKeQduxxdEr3SgbH1kvH7tvqSLhedomOvZyts2dw8acu3dY%2Ff%2BucuMtCuP%2Fe4zC4XnH3OLZ8ZuxTWxy8dJfU5dhDeKPSlJy5pn%2F%2B7u3XrJhmr9C5CuleGflGQocKnlAUaRKp0BAHV0ZwUt9VCqk6zYOgRIuMfePJzdmBdpPJ7%2F6B23%2Bf%2Bsp9NMDZevovvfYHG5dGPISQq1DojqNckchVrCcCYz%2FQ0hI0m3NKDRfkgsrnamo%2Bp0CAq1FyvC3a3Nak%2Fs5VX282x9Ufy3E39VAx6o7LpCvO2wK%2Bch9jNqpJCutcIOooKnYWtDK8gTRVYygRQfwgzKM5%2BjP2jOZdx3r32Py7rQUPOzAnoRs95NvRAR0qLGU11Taqu1bUYSzMcWjMEir067JQQHfIrLBHsrgv00%2FWavd8HRLMEEYFSW3HCSNQehnrHztKqHcDyo4VfZ6gPKCR%2BgufwA8GegxUEo4A%2Bgd0BASHiH6jYMLIsUdQJTs%2FC641KN4oCHWolCMLlMfIdtWKScjx7SM5LD9HnfmhrGI0S139UWfUnxgOXdJFW%2BAMcGjKr6eHAttHF5sUoeArYKDcxMSYcKA%2FxUDhPiEOEAPafSIUFArN0r24ynI91EPARDXvIDYyvqZaWeroBOUABQA%2FE%2BDXC7PWafDLQY2oiwpUEyj4RQtVlUp1GrM7In2p2A7VuiOW6otMiGOo5Mrp05ejVuTy6dNX%2Fk%2F7mybZQ0nUmfrbx3U4KueDnlHm5wdh8FFeKnoaKKh%2FTK18StOPhwG9Xo5mqXAxvw%2F79YQwwDR%2BnAKQQ4izVXioB84qcppWB7IqjU45z4CE17OvF1Dw%2BoTFqxtz8dxwtogBnF9MjIl%2Fin%2BK8s3hM9laIn0TiCbTAXL0T798bPXqx36p3chrv0O%2BGC9Xaj48Ecv8U8UEeBvUEsDlTepiU5OvlpeNGvpnKF0RvUooWhIjnx6GeBapXCQYTw9DNg6%2FOC3gZjp76oNTj9Kz6Jqobxb9NDqc08vcKReOpcsQV2K8InXFaXW3aI6Ofr1k48rp7CX7rx%2Bv1UKPsfvzQU0Kc83i2VdILmd2%2FyX55zT9luN2%2BCu4nKfwPcK%2FCvDVU%2BpHh8%2BLaldIf1fA5h3ndT6Fln9%2FW%2F9Ce1vndfvJtnPVO2xhm3qbafHVCN1X363UXHq9xuVD8OSD29Z8pZ5cZrern9cAdGW%2Fuib%2Fud%2BVK0L9a42r6C90kL8KzxwLQw9NkIQJL0ASU8M%2BVG0KsUdgdvpgP%2F6NqqP0%2FgHZFUfGEijZLHpiIgvV5%2FBltrj8Qd7XQd5p4P%2B7tJo30NMO6VGBwahSPMYiaaBYoLY6uEnciyhhh1Z%2FvvacG%2Frjpsvnpzs0B1Id6fmX8119l88XnOxe%2FuGrzzHcdu7UtY3%2B2vmXN5zUyj3ZcPl8p1sZSs6%2FnGXtwrV7Ka0XZdz83fwjjINpZWYw85lL8BRK4nGyIir2RiOsEyipuEcIakpGjWgBjLiHWOgj0Yi34gW1kKPxHt2Na5q%2Blwg1RdRSpFDNzosb44YJXnAfoEOpZW%2F%2F6u1lhYA6leevezbI26zNHO811M2dc5HFxpk4i1jPC0s21%2FBWW5DnPQbn2X1WK43%2FaM2n18DfSoybbNHijFpamzXI31eRibGUOxSu%2FlT96YZlq1Yt20DaSBuG6knw2eusHs5EPBfNmVvHKdaQzcDfz9ZsXmLDWGXy2U5OsYSsIn8CS12jQIyD12KKqZrLPy7mSPdICmd6WGHG8NDZkkHuE4h9TU8FpmUO%2FVjC%2FEinToFyoNDz2p9XD6g78WgQdPG7Z3R0T%2FZ5dTM9lsL8Ktek7szl2L%2BgQwGgwkZHc2g5Su7NvVqwGy2Ua4KSXUwt1X4PaM5paaEu6jQ5zVFyNabxvUksVt2T%2F4VeamYPlLtffdQsk%2B2sUTY%2FzDXl%2F05W53%2FBz9UK3p7LjapZ2ZxOm%2BUlZXrL3HHGqO8%2BwVroDaCTTnTxitMxmiAAYQzVJQH%2Bnj3oIHnPaN6Zq6sNSLjBl8tKgVr2mj%2F9CWi9dnKca8rBQBsd5R1tzVlgrl5pbnPw6kZclCr2CHxMnHohLz%2B3KRQokzALyeIKFU1TNCiayJdoHvDYe7K6mZLm8S3uJ9dojuaJ62%2FqN%2FtjQxnSnhnKPw%2BLNrLi8ZKyJ3x1YhiI1aNAtP6NzCGzYv3DmaGh%2FLvQZnt0evgIhTFV0kE%2FPYxAnOHhCQUZdCWY5JWJwMzlAGl1mpNbDU7yyGnhRMILsYhH3VRAijrPcBU8%2FCj1Y9NY6cnGVW0CjTLaz7E3epvaT%2FLtTV72Rs%2B0WVVmd0dz%2FMGTI5F0OsIviaqDlbbO5X6xT3PeXbXHRtf%2Fz%2Bfdka%2BeKPr8KF7IF4vBsT9MFPuPJMBTBMq9hQxXelQ%2Bbewnf18ap4Ib%2BmSMrtDU5zqlD8QANa5MBGh%2FOwOvSDfcV2d66mfEWsbGWmIz6nsyZDWQSmqmxDneYyvjHPmRXHZxeueyRGLZzvRioKnGto9nIPkibAJA16adcOZRQr1iAP3bUyBR7T4RgAWTKxhkCYFwshq%2B7iV9r0whk50cmRcTg4fy5x4OmmNkHndIA2%2BYuMbmE9dwGYB4KFTsvnDE6Ah47r%2FfE3AYI%2BoXADpkdlENcZ8OZEEf8FFGZNxMs6ZLpG3SUFLL7Q2kcFU%2FA%2FJsw%2BvWDa%2F7emewLaoeibaF1B9qUNnuqWK3%2BUfXYVL1v%2FomD15xxeDkPnXTOKSVcCbDGtOu0YQNpGAP7U1HU58UrqGu8xIbHtkQ3LVhb7Dx46ET3Ffcm1q0YcOizNmf3bC3VjWfAcpSv3MyTlgJ23FHQgmgvk%2Bgk8pL0mcCDOn08MDAQlf%2B%2FSlTZ1z12fnqntOhbOTL9%2FZdevbAPN%2Byby1f%2FuUtC%2Fixm8ZBo59LTXEW060hGrTDplNprWd58fwB%2Fb%2FE27BdS%2Fs7U%2BrGVCeQ46nzaw9QccnmZerGZZs3Yw9aVHt%2BKh6HN4ti6lxIhT%2FwahnZtWwzlY9QHQ2c79C%2BdxzvVDKy8GqKWQERO9YAKbpsDUTLdWV5dE8PVPjvj9pqw7ah%2FPFVtkit7aj6G5xY9mfJrCz1j1e0BcnPol4UjtrCdbahIVtd2HaURujnFJR8CuOuUUfhrGhgKKgjCYNSvCc1WKlEp8wHUaAYynFNyzZn%2B2MnYv36dbMDBTonl%2FT%2Fma5IKAyEGz%2B4eRnVtaX6tss2o34u8mWorFtuFgm4A6qK%2Fyp%2FgLEBVat5WnPDdKA574ubuFJ%2FIUfZ%2FY2Nt6mN%2BZNNTSTaeI56gKwkXerTe9DDHUw8%2FH35FY3nNN7GGuBKWhrV9ep%2B0k1WjNWVaHkW1yA%2BQHWNu8rtBw2a5YXuE40rs7%2FGA%2Bj09V3hA98yRnFPOGr8ltGlsFdD%2F7tRce3LH6Trcneuiy7K7J3khKu%2B3qUaXPWaX7T6%2FKfj9BX2eZq2XAcZT79u1ClJzUtHUqfqSMWBcZS43Ena0cUGLgpkKxB1QM%2B0Fxz10wgg6r5rltnFpH05pepUq3Y2HfYqeKRntmUFNz%2BXmcOs1H31U6cC6RTVLfCg7RNBF1UF2%2FwBgu0fFQtPEU1sSg3VcNsR7dWq3af87tUFn1l3ltXpaJxpNvtcZkH2WmMst3JqRpxUH%2BWC0E1qOGtP66s1MYv%2BVLu8%2FXFXvV%2FZbunYYBeVN64ls0ur6NzpV9xzlmQwB5qC4Tq70WC0tk8dWJXeHvkD0h9zJOM0vD86%2F1NJMaIAolctvlByferCsqOKDKceOfUu1PsmoFCamV5mCrMUOCi6V6FJosMF22AcrKJgQDVhfYh6tepp%2FlYgvnCEAbJQ1L0rOpajEmRcasMiPfxhgGoVo4rwreQpV6fUJHH2e8fa1s2c13Apl1b89a58ozdoap2sjgLN9uISl7P1DrulyeIkt0zr6JjWocoPOZsaXPb6jtqBblsgsaRre2xHi4nELm0MhG1%2Bx1SXwLpFi53b%2BaHRYo%2FIrbZtuWAKu5cSEXfybnnmUCaXGTpQr0xK2O2WWY76f%2BnAjNVf7nCZHU5XqIkTnpt6VtvsFlPXg1031g%2FVRdpkkyVpD7jnmax88QwDvg%2F66NnMRdRXTcGTmQc3cuINwN5IQqi0yzb%2BYFVHuVqI5s4ADfg5oE4ybDLd28mFSFmYvRoomsWXEdLU2Wl3GJy93ZNb%2Fd5gqmNaqJZSO1l6PVRy0nZIj%2F45EetjLguh1rLqR%2BSK0hO6NrsqcNX8zoUdjQYDJ7tb4os6%2Bi%2BY0qpY2AWlnLRDWdGFTfGY1gV0zNAtJ7pdo24se0D88AwLY%2FgZmE9iuP4V5v7CSR%2FRThaHLh%2BUeBkXwU6BC7lGOevK65udTv%2BtS%2FPfW7qj3ljTcj3b9OkbV85t8xsMj7Ddj7DGpthZKwKPvso%2Fc%2F1K9aLE12fMWLV1y1D9ua8lyJdWXr%2FbG%2BnoCFutf%2FmLILe39ITUV4igr3876fpX5g2zeB52sWnIL4fXHlgeUzOx5QfIvJQyrKQE9wHUqVq%2BPEaOrz0wVvNbJZVSfsuMzxN4l9PkedFzw9V5Dj%2BnzpgoT4ZxCxJfC5RWLc74YVHxKlExCYt0JAOMatREhHBSCAtSfod6x6Ls8HCWECLwXZ9nd5Dz1T24JUdWs6fU3%2B%2BfcnT49Qe%2BkBs%2BwdsMZgPXMp3U5S958snPP%2FEE7bvkOPCuTUDTUQ%2FUzirLhML9yPahoe1D5Fj5jWsaoveyP00PehdUAHk%2FseDVWsvDWXXXsyn%2F4wfpXc2V3%2FQxli3jl%2F5hj%2F83avSCfpTNxOEKLmTjxOEKuxgNlsQn0xgct724mhynupNW1Ph6o3RYS3%2F%2B2TJrzLlkFz%2Bip3qCHKf6eqW02QJLjBYuuj4sobhCWqa%2FYHGEHpcnumuWSOhxeaL7sOakNR6vvmo%2BYcfFA8UFXEPZf9UjyudIOyNwx%2Fi90DdsujS%2FFX2UAwvWSVK4NxaMhAGw3oowp%2Fuc8CTi7D2rBgZWwb%2F60faR7SPsEbjkXy4G0XaqhXPwe2cePjxjxuHD6ssQuR1fq6PF0E%2Bo2t1nePTn8TUmxz%2FA3crMoCc7egESuoTHYc7mYdg6etORoOhR7BBGD%2BqJopELrl4S6cJNRtEAsLP%2FOdvnJq0Wo0GolY2Et9VFB2Kf%2B4bZvVyxfOMz3WdFfSIryj6DwWghre7aQbdiDrkTL3A3vNDuDpk93HqXwam%2BbWmUJZfNn5ozKV5Pmmq8PF%2FjVY%2B2Tlk2M2RzSXKjmbQ4RZcQavEYrN%2F9rlXwtIQqzxQNMzPPfHYLvuPoO9TbT8bpGw5CQPGd%2BSyX%2FCyf0Vxjd2R9NmsunnXYa8xGHzn%2BsSfM5J0y0DZEXWWxkXjcR75KBLNLHi7XvX2G8VOrf4Ykg0AMdBESIpo7MgAfyakA6rkqpI6UjNs0px7cMV%2BD5BF49Tez1VGnYmq0WIijp985m4Sn2gJR9b07riPPFo97OYbUZbxJCpot7H%2FlpZBicglCPN7WOfJkcHqc3ElWqvvz%2F1E6bIQrG%2Btz6WkM1SM9FBTR7FSs8KyBBytSmNEoquJNFN5EQyTiCrnKDx1h58yxCepPHU5nxGoxEQeeOZi2m80DxNxncVhr6BmEfUarxejw%2BWSiHhWk19bSY7aKR5MsteblJpfTLtjimBouXsm3d3djjYM%2BwEW0El9dM%2FueVRWIsXwe43R7SgbVZqrnqoJ1X%2FkuF7pcgf8duv4q6vayV5U9zMV91GxO59UUjW8rHV6u799WzKMT7umRCXbYUKM%2BfoaCcwgaoqZUtmodV3p%2BX7akb4dnU9B9La38RPFUG2SCC90tVA4XwEFhyOpZZrUCsgWYHsczLFBBVGNtstoN1bw0Z%2BO4fYIbvZVt4EUcJEKOhHeincWqONw%2Bq6w5Go%2BWGOSR7LhKV%2BKBqbBPpfUvOf9QqkpDyVhBeyyZQGMsdA5FBUqvFMtUyGq9vjnsAJU4UcrxldP1CCaofyDkSAifoP5QwWx%2BSyUGxp75BzGAvtG7uQ38LehlyEQMeh0TeE6Bm7tYdXqdkt0uOb3kfYlNwmOdDyacOq%2FqlFo1v%2BPTmTi3E%2FglC9W11b34A22zmLzvb231Q0L2Bgg60OTW4YdstO%2BYOJnO38TtpH7zy9ymokWyA79qlVSn38HtpFlImFnhu3b4boNWXklOXV0Iwo7lQ1hrZyPFcwtjwFP7iEKSHSSJw509kh8kj6pr%2BH1jR7km9vcvqN9657vffefkv%2BfKxge1X%2B7RdjYUPIESN7gTvRkB%2FRMYtEkaVkdHApmdBPpnKmz0n1xSWFOyVIuLrinZwpoCRe6kyiVZoHX088F%2BUX4%2BWKS4iBTP0IWxGtZgOdMaV4KTayqHQF%2FVihBwTbgDXTCmKoOBJeNhwJMzEVjtjIFLuU38fPR7hqNG1JS7g%2FqRCuy3vmQ3W9Vu8qbVbP%2BSzazGRJH83MzP90Ck2m31mMjP8TiLn5uwD2Ugr2PFvPQjB5BnSJvQxGQZZEB%2BLopqzGzDbMmbkAPkZVJjeO5FzOSBKCgJze2ZS4Gemc9twrwY6u9H61iUQTcRvtdT9RW3tRxAWwFs2tcuJRnI6xjmBdWjbgFNRHMHiF1uHYBfUR%2Fut5Ug2jXAaT96%2B9RH%2FFToRwIzGbKmVJ1AZQnoabSB1yyIg7ByAridHApPMjyw0OiV6RjSbCuzwLAvFizBliWJua1tsuAgvNPbmljYbpt8lkWam7b3XZiOiKJskMOtmfScnsbPW208knwjuXrXK4Q1iKIgNyYXXDVT9C2Ye%2F78GQ5BEEXfFdde2RwauOysdJNL5AzCy84ard%2FnGAVN8alecnFdgu5Gbd5DJTL%2BhHZK0vApVy3OfU8XTSJg1TlssivsPYUlIqvn66PzrVTymCc4wgF6SDNR0pDf%2B9Gp%2BVnsUH5WtpHYsuhOaey8zdwLN47V8MTbm78g687%2BP3cx6tcAeNpjYGRgYGBk8s0%2FzBIfz2%2FzlUGeZQNQhOFCWfF0GP0%2F8P8c1jusIkAuBwMTSBQAYwQM6HjaY2BkYGAV%2Bd8KJgP%2FXWG9wwAUQQGLAYqPBl942n1TvUoDQRCe1VM8kWARjNrZGIurBAsRBIuA2vkAFsJiKTYW4guIjT5ARMgTxCLoA1hcb5OgDyGHrY7f7M65e8fpLF%2B%2B2W%2FnZ2eTmGfaIJi5I0qGDlZZcD51QzTTJirZPAI9JIwVA%2BwT8L5nOdMaV0AuMJ%2BicRHq8of6LSD18fzq8ds7xjpwBnQiSI9V5QVl6NwPvgM15NXn%2FAtWZyj3W0HjEXitOc%2FdIdbetPdFTZ%2BP6t%2BX7xU0%2Fk6GJtOe1%2FB3arN0%2Fpmz1J4UZc%2BD6ExwjD7vioeGd5HvhvU%2BR%2BDZcGZ6YBPNfAi0G97iBPwFXqph2cW8%2BD7kjMfwtinHb6kLb6Wygk3cZytSEoptGrlScdHtLPeri1JKueACMZfU1ViJG1Sq5E43dIt7SZZFl1zuRhb%2FGOs44xFVDbrJzB5tYs35OmaXTrEmkv0DajnMWQB42mNgYNCCwk0MLxheMPrhgUuY2JiUmOqY2pjWMD1hdmPOY%2B5hPsLCwWLEksSyiOUOawzrLrYiti%2FsCuxJ7Kc45DiSOPZxmnG2cG7jvMelweXDNYXrEbcBdxf3KR4OngheLd443g18fHwZfFv4NfiX8T8TEBIIEZggsEpQS7BMcJsQl5CFUI3QAWEp4RLhCyJaIldEbURXiJ4RYxEzE0sQ2yD2TzxIfJkEk4SeRJbENIkNEg8k%2FklqSGZITpE8InlL8p2UmVSG1A6pb9Jx0ltkjGSmyDySlZF1kc2RnSK7R%2FaZnJ5cmdwB%2BST5SwpuCvsUjRTLFHcoOShNU9qhzKespGyhXKV8SPmBCpOKgUqcyjSVR6omqgmqe9RE1OrUnqkHqO9R%2F6FholGgsUZzgeYZLTUtL60WbS7tKh0OnQydXTpvdGV0O3S%2F6Gnopekt0ruhz6fvpl%2Bnv0n%2Fh4GdQYvBJUMhwwTDdYYvjFSM4oxmGd0zVjK2M84w3mYiYZJgssLkkqmO6TzTF2Z2ZjVmd8ylzP3MJ5lfsRCwcLJoszhhyWXpZdlhecZKxirHapbVPesF1ndsJGwCbBbZ%2FLA1sn1jZ2XXY3fFXsM%2Bz36V%2FS8HD4cGh2OOTI51ThJOK5zeOUs4OzmXOS9wPuUi4JLgss7lm2uU6zY3NrcSty1u39zN3Mvct7l%2F8xDzMPLw88jyaPM44ynkaeEZ59niucqLyUvPKwgAn3OqOQAAAQAAARcApwARAAAAAAACAAAAAQABAAAAQAAuAAAAAHjarZK9TgJBEMf%2Fd6CRaAyRhMLqCgsbL4ciglTGRPEjSiSKlnLycXJ86CEniU%2FhM9jYWPgIFkYfwd6nsDD%2Bd1mBIIUx3mZnfzs3MzszuwDCeIYG8UUwQxmAFgxxPeeuyxrmcaNYxzTuFAewi0fFQSTxqXgM11pC8TgS2oPiCUS1d8Uh8ofiSczpYcVT5LjiCPlY8Qui%2BncOr7D02y6%2FBTCrP%2Fm%2Bb5bdTrPi2I26Z9qNGtbRQBMdXMJBGRW0YOCecxEWYoiTCvxrYBunqHPdoX2bLOyrMKlZg8thDETw5K7Itci1TXlGy0124QRZZLDFU%2FexhxztMozlosTpMH6ZPge0L%2BOKGnFKjJ4WRwppHPL0PP3SI2P9jLQwFOu3GRhDfkeyDo%2F%2FG7IHgzllZQxLdquvrdCyBVvat3seJlYo06gxapUxhU2JWnFygR03sSxnEkvcpf5Y5eibGq315TDp7fKWm8zbUVl71Aqq%2FZtNnlkWmLnQtno9ycvXYbA6W2pF3aKfCayyC0Ja7Fr%2FPW70%2FHO4YM0OKxFvzf0C1MyPjwAAeNpt1VWUU2cYRuHsgxenQt1d8%2F3JOUnqAyR1d%2FcCLQVKO22pu7tQd3d3d3d3d3cXmGzumrWy3pWLs%2FNdPDMpZaWu1783l1Lpf14MnfzO6FbqVupfGkD30iR60JNe9KYP09CXfvRnAAMZxGCGMG3pW6ZjemZgKDMyEzMzC7MyG7MzB3MyF3MzD%2FMyH%2FOzAAuyEAuzCIuyGIuzBGWCRIUqOQU16jRYkqVYmmVYluVYng6GMZwRNGmxAiuyEiuzCquyGquzBmuyFmuzDuuyHuuzARuyERuzCZuyGZuzBVuyFVuzDduyHdszklGMZgd2ZAw7MZZxjGdnJrALu9LJbuzOHkxkT%2FZib%2FZhX%2FZjfw7gQA7iYA7hUA7jcI7gSI7iaI7hWI7jeE7gRE7iZE5hEqdyGqdzBmdyFmdzDudyHudzARdyERdzCZdyGZdzBVdyFVdzDddyHddzAzdyEzdzC7dyG7dzB3dyF3dzD%2FdyH%2FfzAA%2FyEA%2FzCI%2FyGI%2FzBE%2FyFE%2FzDM%2FyHM%2FzAi%2FyEi%2FzCq%2FyGq%2FzBm%2FyFm%2FzDu%2FyHu%2FzAR%2FyER%2FzCZ%2FyGZ%2FzBV%2FyFV%2FzDd%2FyHd%2FzAz%2FyEz%2FzC7%2FyG7%2FzB3%2FyF3%2FzD%2F9mpYwsy7pl3bMeWc%2BsV9Y765NNk%2FXN%2BmX9swHZwGxQNjgb0nPkmInjR0V7Uq%2FOsaPL5Y7ylE3l8tQNN7kVt%2BrmbuHW3LrbcDvam1rtzVvdm50TxrU%2FDBvRtZUY1rV5a3jXFn550Wo%2FXDNWK3dFmh7X9LimxzU9qulRTY9qelTTo5rlKLt2wk7YiaprL%2ByFvbAX9pK9ZC%2FZS%2FaSvWQv2Uv2kr1kr2KvYq9ir2KvYq9ir2KvYq9ir2Kvaq9qr2qvaq9qr2qvaq9qr2qvai%2B3l9vL7eX2cnu5vdxebi%2B3l9sr7BV2CjuFncJOYaewU9gp7NTs1LyrZq9mr2avZq9mr2avZq9mr26vbq9ur26vbq9ur26vbq9ur26vYa9hr2GvYa9hr2GvYa%2FR7oXuQ%2Feh%2B2j%2FUU7e3C3cqc%2FV3fYdof%2FQf%2Bg%2F9B%2F6D%2F2H%2FkP%2Fof%2FQf%2Bg%2F9B%2F6D%2F2H%2FkP%2Fof%2FQf%2Bg%2F9B%2F6D%2F2H%2FkP%2Fof%2FQf%2Bg%2F9B%2F6D%2F2H%2FkP%2Fof%2FQf%2Bg%2F9B%2F6D92H7kP3ofvQfeg%2BdB%2B6D92H7kP3ofvQfRT29B%2F6D%2F2H%2FkP%2Fof%2FQf%2Bg%2F9B%2F6D%2F2H%2FkP%2Fof%2FQf%2Bg%2F9B%2F6D%2F2H%2FkP%2Fof%2FQf%2Bg%2F9B%2F6D%2F2H%2FkP%2Fof%2FQf%2Bg%2F9B%2F6j6nuG3Ya7U5q%2F0hN3nCTW3Grbu4Wrs%2FrP%2Bk%2F6T%2FpP%2Bk%2F6T%2FpP%2Bk%2B6T7pPek86TzpPOk86TzpOuk66TrpOuk66TrpOlWmPu%2F36zrpOuk66TrpOuk66TrpOvl%2FPek76TvpO%2Bk76TvpO%2Bk76TvpO%2Bk76TvpO7V9t%2BqtVs%2FOaOURU6bo6PgPt6rZbwAAAAABVFDDFwAA%29%20format%28%27woff%27%29%2Curl%28data%3Aapplication%2Fx%2Dfont%2Dtruetype%3Bbase64%2CAAEAAAAPAIAAAwBwRkZUTW0ql9wAAAD8AAAAHEdERUYBRAAEAAABGAAAACBPUy8yZ7lriQAAATgAAABgY21hcNqt44EAAAGYAAAGcmN2dCAAKAL4AAAIDAAAAARnYXNw%2F%2F8AAwAACBAAAAAIZ2x5Zn1dwm8AAAgYAACUpGhlYWQFTS%2FYAACcvAAAADZoaGVhCkQEEQAAnPQAAAAkaG10eNLHIGAAAJ0YAAADdGxvY2Fv%2B5XOAACgjAAAAjBtYXhwAWoA2AAAorwAAAAgbmFtZbMsoJsAAKLcAAADonBvc3S6o%2BU1AACmgAAACtF3ZWJmwxhUUAAAsVQAAAAGAAAAAQAAAADMPaLPAAAAANB2gXUAAAAA0HZzlwABAAAADgAAABgAAAAAAAIAAQABARYAAQAEAAAAAgAAAAMEiwGQAAUABAMMAtAAAABaAwwC0AAAAaQAMgK4AAAAAAUAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAFVLV04AQAAg%2F%2F8DwP8QAAAFFAB7AAAAAQAAAAAAAAAAAAAAIAABAAAABQAAAAMAAAAsAAAACgAAAdwAAQAAAAAEaAADAAEAAAAsAAMACgAAAdwABAGwAAAAaABAAAUAKAAgACsAoAClIAogLyBfIKwgvSISIxsl%2FCYBJvonCScP4APgCeAZ4CngOeBJ4FngYOBp4HngieCX4QnhGeEp4TnhRuFJ4VnhaeF54YnhleGZ4gbiCeIW4hniIeIn4jniSeJZ4mD4%2F%2F%2F%2FAAAAIAAqAKAApSAAIC8gXyCsIL0iEiMbJfwmASb6JwknD%2BAB4AXgEOAg4DDgQOBQ4GDgYuBw4IDgkOEB4RDhIOEw4UDhSOFQ4WDhcOGA4ZDhl%2BIA4gniEOIY4iHiI%2BIw4kDiUOJg%2BP%2F%2F%2F%2F%2Fj%2F9r%2FZv9i4Ajf5N%2B132nfWd4F3P3aHdoZ2SHZE9kOIB0gHCAWIBAgCiAEH%2F4f%2BB%2F3H%2FEf6x%2FlH3wfdh9wH2ofZB9jH10fVx9RH0sfRR9EHt4e3B7WHtUezh7NHsUevx65HrMIFQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAACjAAAAAAAAAA1AAAAIAAAACAAAAADAAAAKgAAACsAAAAEAAAAoAAAAKAAAAAGAAAApQAAAKUAAAAHAAAgAAAAIAoAAAAIAAAgLwAAIC8AAAATAAAgXwAAIF8AAAAUAAAgrAAAIKwAAAAVAAAgvQAAIL0AAAAWAAAiEgAAIhIAAAAXAAAjGwAAIxsAAAAYAAAl%2FAAAJfwAAAAZAAAmAQAAJgEAAAAaAAAm%2BgAAJvoAAAAbAAAnCQAAJwkAAAAcAAAnDwAAJw8AAAAdAADgAQAA4AMAAAAeAADgBQAA4AkAAAAhAADgEAAA4BkAAAAmAADgIAAA4CkAAAAwAADgMAAA4DkAAAA6AADgQAAA4EkAAABEAADgUAAA4FkAAABOAADgYAAA4GAAAABYAADgYgAA4GkAAABZAADgcAAA4HkAAABhAADggAAA4IkAAABrAADgkAAA4JcAAAB1AADhAQAA4QkAAAB9AADhEAAA4RkAAACGAADhIAAA4SkAAACQAADhMAAA4TkAAACaAADhQAAA4UYAAACkAADhSAAA4UkAAACrAADhUAAA4VkAAACtAADhYAAA4WkAAAC3AADhcAAA4XkAAADBAADhgAAA4YkAAADLAADhkAAA4ZUAAADVAADhlwAA4ZkAAADbAADiAAAA4gYAAADeAADiCQAA4gkAAADlAADiEAAA4hYAAADmAADiGAAA4hkAAADtAADiIQAA4iEAAADvAADiIwAA4icAAADwAADiMAAA4jkAAAD1AADiQAAA4kkAAAD%2FAADiUAAA4lkAAAEJAADiYAAA4mAAAAETAAD4%2FwAA%2BP8AAAEUAAH1EQAB9REAAAEVAAH2qgAB9qoAAAEWAAYCCgAAAAABAAABAAAAAAAAAAAAAAAAAAAAAQACAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAEAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAL4AAAAAf%2F%2FAAIAAgAoAAABaAMgAAMABwAusQEALzyyBwQA7TKxBgXcPLIDAgDtMgCxAwAvPLIFBADtMrIHBgH8PLIBAgDtMjMRIRElMxEjKAFA%2Fujw8AMg%2FOAoAtAAAQBkAGQETARMAFsAAAEyFh8BHgEdATc%2BAR8BFgYPATMyFhcWFRQGDwEOASsBFx4BDwEGJi8BFRQGBwYjIiYvAS4BPQEHDgEvASY2PwEjIiYnJjU0Nj8BPgE7AScuAT8BNhYfATU0Njc2AlgPJgsLCg%2BeBxYIagcCB57gChECBgMCAQIRCuCeBwIHaggWB54PCikiDyYLCwoPngcWCGoHAgee4AoRAgYDAgECEQrgngcCB2oIFgeeDwopBEwDAgECEQrgngcCB2oIFgeeDwopIg8mCwsKD54HFghqBwIHnuAKEQIGAwIBAhEK4J4HAgdqCBYHng8KKSIPJgsLCg%2BeBxYIagcCB57gChECBgAAAAABAAAAAARMBEwAIwAAATMyFhURITIWHQEUBiMhERQGKwEiJjURISImPQE0NjMhETQ2AcLIFR0BXhUdHRX%2Boh0VyBUd%2FqIVHR0VAV4dBEwdFf6iHRXIFR3%2BohUdHRUBXh0VyBUdAV4VHQAAAAABAHAAAARABEwARQAAATMyFgcBBgchMhYPAQ4BKwEVITIWDwEOASsBFRQGKwEiJj0BISImPwE%2BATsBNSEiJj8BPgE7ASYnASY2OwEyHwEWMj8BNgM5%2BgoFCP6UBgUBDAoGBngGGAp9ARMKBgZ4BhgKfQ8LlAsP%2Fu0KBgZ4BhgKff7tCgYGeAYYCnYFBv6UCAUK%2BhkSpAgUCKQSBEwKCP6UBgwMCKAIDGQMCKAIDK4LDw8LrgwIoAgMZAwIoAgMDAYBbAgKEqQICKQSAAABAGQABQSMBK4AOwAAATIXFhcjNC4DIyIOAwchByEGFSEHIR4EMzI%2BAzUzBgcGIyInLgEnIzczNjcjNzM%2BATc2AujycDwGtSM0QDkXEys4MjAPAXtk%2FtQGAZZk%2FtQJMDlCNBUWOUA0I64eYmunznYkQgzZZHABBdpkhhQ%2BH3UErr1oaS1LMCEPCx4uTzJkMjJkSnRCKw8PIjBKK6trdZ4wqndkLzVkV4UljQAAAgB7AAAETASwAD4ARwAAASEyHgUVHAEVFA4FKwEHITIWDwEOASsBFRQGKwEiJj0BISImPwE%2BATsBNSEiJj8BPgE7ARE0NhcRMzI2NTQmIwGsAV5DakIwFgwBAQwWMEJqQ7ICASAKBgZ4BhgKigsKlQoP%2FvUKBgZ4BhgKdf71CgYGeAYYCnUPtstALS1ABLAaJD8yTyokCwsLJCpQMkAlGmQMCKAIDK8LDg8KrwwIoAgMZAwIoAgMAdsKD8j%2B1EJWVEAAAAEAyAGQBEwCvAAPAAATITIWHQEUBiMhIiY9ATQ2%2BgMgFR0dFfzgFR0dArwdFcgVHR0VyBUdAAAAAgDIAAAD6ASwACUAQQAAARUUBisBFRQGBx4BHQEzMhYdASE1NDY7ATU0NjcuAT0BIyImPQEXFRQWFx4BFAYHDgEdASE1NCYnLgE0Njc%2BAT0BA%2BgdFTJjUVFjMhUd%2FOAdFTJjUVFjMhUdyEE3HCAgHDdBAZBBNxwgIBw3QQSwlhUdZFuVIyOVW5YdFZaWFR2WW5UjI5VbZB0VlshkPGMYDDI8MgwYYzyWljxjGAwyPDIMGGM8ZAAAAAEAAAAAAAAAAAAAAAAxAAAB%2F%2FIBLATCBEEAFgAAATIWFzYzMhYVFAYjISImNTQ2NyY1NDYB9261LCwueKqqeP0ST3FVQgLYBEF3YQ6teHmtclBFaw4MGZnXAAAAAgAAAGQEsASvABoAHgAAAB4BDwEBMzIWHQEhNTQ2OwEBJyY%2BARYfATc2AyEnAwL2IAkKiAHTHhQe%2B1AeFB4B1IcKCSAkCm9wCXoBebbDBLMTIxC7%2FRYlFSoqFSUC6rcQJBQJEJSWEPwecAIWAAAAAAQAAABkBLAETAALABcAIwA3AAATITIWBwEGIicBJjYXARYUBwEGJjURNDYJATYWFREUBicBJjQHARYGIyEiJjcBNjIfARYyPwE2MhkEfgoFCP3MCBQI%2FcwIBQMBCAgI%2FvgICgoDjAEICAoKCP74CFwBbAgFCvuCCgUIAWwIFAikCBQIpAgUBEwKCP3JCAgCNwgK2v74CBQI%2FvgIBQoCJgoF%2FvABCAgFCv3aCgUIAQgIFID%2BlAgKCggBbAgIpAgIpAgAAAAD%2F%2FD%2F8AS6BLoACQANABAAAAAyHwEWFA8BJzcTAScJAQUTA%2BAmDpkNDWPWXyL9mdYCZv4f%2FrNuBLoNmQ4mDlzWYP50%2FZrWAmb8anABTwAAAAEAAAAABLAEsAAPAAABETMyFh0BITU0NjsBEQEhArz6FR384B0V%2Bv4MBLACiv3aHRUyMhUdAiYCJgAAAAEADgAIBEwEnAAfAAABJTYWFREUBgcGLgE2NzYXEQURFAYHBi4BNjc2FxE0NgFwAoUnMFNGT4gkV09IQv2oWEFPiCRXT0hCHQP5ow8eIvzBN1EXGSltchkYEAIJm%2F2iKmAVGilucRoYEQJ%2FJioAAAACAAn%2F%2BAS7BKcAHQApAAAAMh4CFQcXFAcBFgYPAQYiJwEGIycHIi4CND4BBCIOARQeATI%2BATQmAZDItoNOAQFOARMXARY7GikT%2Fu13jgUCZLaDTk6DAXKwlFZWlLCUVlYEp06DtmQCBY15%2Fu4aJRg6FBQBEk0BAU6Dtsi2g1tWlLCUVlaUsJQAAQBkAFgErwREABkAAAE%2BAh4CFRQOAwcuBDU0PgIeAQKJMHt4dVg2Q3mEqD4%2Bp4V4Qzhadnh5A7VESAUtU3ZAOXmAf7JVVbJ%2FgHk5QHZTLQVIAAAAAf%2FTAF4EewSUABgAAAETNjIXEyEyFgcFExYGJyUFBiY3EyUmNjMBl4MHFQeBAaUVBhH%2BqoIHDxH%2Bqf6qEQ8Hgv6lEQYUAyABYRMT%2Fp8RDPn%2BbxQLDPb3DAsUAZD7DBEAAv%2FTAF4EewSUABgAIgAAARM2MhcTITIWBwUTFgYnJQUGJjcTJSY2MwUjFwc3Fyc3IycBl4MHFQeBAaUVBhH%2BqoIHDxH%2Bqf6qEQ8Hgv6lEQYUAfPwxUrBw0rA6k4DIAFhExP%2BnxEM%2Bf5vFAsM9vcMCxQBkPsMEWSO4ouM5YzTAAABAAAAAASwBLAAJgAAATIWHQEUBiMVFBYXBR4BHQEUBiMhIiY9ATQ2NyU%2BAT0BIiY9ATQ2Alh8sD4mDAkBZgkMDwr7ggoPDAkBZgkMJj6wBLCwfPouaEsKFwbmBRcKXQoPDwpdChcF5gYXCktoLvp8sAAAAA0AAAAABLAETAAPABMAIwAnACsALwAzADcARwBLAE8AUwBXAAATITIWFREUBiMhIiY1ETQ2FxUzNSkBIgYVERQWMyEyNjURNCYzFTM1BRUzNSEVMzUFFTM1IRUzNQchIgYVERQWMyEyNjURNCYFFTM1IRUzNQUVMzUhFTM1GQR%2BCg8PCvuCCg8PVWQCo%2F3aCg8PCgImCg8Pc2T8GGQDIGT8GGQDIGTh%2FdoKDw8KAiYKDw%2F872QDIGT8GGQDIGQETA8K%2B%2BYKDw8KBBoKD2RkZA8K%2FqIKDw8KAV4KD2RkyGRkZGTIZGRkZGQPCv6iCg8PCgFeCg9kZGRkZMhkZGRkAAAEAAAAAARMBEwADwAfAC8APwAAEyEyFhURFAYjISImNRE0NikBMhYVERQGIyEiJjURNDYBITIWFREUBiMhIiY1ETQ2KQEyFhURFAYjISImNRE0NjIBkBUdHRX%2BcBUdHQJtAZAVHR0V%2FnAVHR39vQGQFR0dFf5wFR0dAm0BkBUdHRX%2BcBUdHQRMHRX%2BcBUdHRUBkBUdHRX%2BcBUdHRUBkBUd%2FagdFf5wFR0dFQGQFR0dFf5wFR0dFQGQFR0AAAkAAAAABEwETAAPAB8ALwA%2FAE8AXwBvAH8AjwAAEzMyFh0BFAYrASImPQE0NiEzMhYdARQGKwEiJj0BNDYhMzIWHQEUBisBIiY9ATQ2ATMyFh0BFAYrASImPQE0NiEzMhYdARQGKwEiJj0BNDYhMzIWHQEUBisBIiY9ATQ2ATMyFh0BFAYrASImPQE0NiEzMhYdARQGKwEiJj0BNDYhMzIWHQEUBisBIiY9ATQ2MsgVHR0VyBUdHQGlyBUdHRXIFR0dAaXIFR0dFcgVHR389cgVHR0VyBUdHQGlyBUdHRXIFR0dAaXIFR0dFcgVHR389cgVHR0VyBUdHQGlyBUdHRXIFR0dAaXIFR0dFcgVHR0ETB0VyBUdHRXIFR0dFcgVHR0VyBUdHRXIFR0dFcgVHf5wHRXIFR0dFcgVHR0VyBUdHRXIFR0dFcgVHR0VyBUd%2FnAdFcgVHR0VyBUdHRXIFR0dFcgVHR0VyBUdHRXIFR0ABgAAAAAEsARMAA8AHwAvAD8ATwBfAAATMzIWHQEUBisBIiY9ATQ2KQEyFh0BFAYjISImPQE0NgEzMhYdARQGKwEiJj0BNDYpATIWHQEUBiMhIiY9ATQ2ATMyFh0BFAYrASImPQE0NikBMhYdARQGIyEiJj0BNDYyyBUdHRXIFR0dAaUCvBUdHRX9RBUdHf6FyBUdHRXIFR0dAaUCvBUdHRX9RBUdHf6FyBUdHRXIFR0dAaUCvBUdHRX9RBUdHQRMHRXIFR0dFcgVHR0VyBUdHRXIFR3%2BcB0VyBUdHRXIFR0dFcgVHR0VyBUd%2FnAdFcgVHR0VyBUdHRXIFR0dFcgVHQAAAAABACYALAToBCAAFwAACQE2Mh8BFhQHAQYiJwEmND8BNjIfARYyAdECOwgUB7EICPzxBxUH%2FoAICLEHFAirBxYB3QI7CAixBxQI%2FPAICAGACBQHsQgIqwcAAQBuAG4EQgRCACMAAAEXFhQHCQEWFA8BBiInCQEGIi8BJjQ3CQEmND8BNjIXCQE2MgOIsggI%2FvUBCwgIsggVB%2F70%2FvQHFQiyCAgBC%2F71CAiyCBUHAQwBDAcVBDuzCBUH%2FvT%2B9AcVCLIICAEL%2FvUICLIIFQcBDAEMBxUIsggI%2FvUBDAcAAwAX%2F%2BsExQSZABkAJQBJAAAAMh4CFRQHARYUDwEGIicBBiMiLgI0PgEEIg4BFB4BMj4BNCYFMzIWHQEzMhYdARQGKwEVFAYrASImPQEjIiY9ATQ2OwE1NDYBmcSzgk1OASwICG0HFQj%2B1HeOYrSBTU2BAW%2BzmFhYmLOZWFj%2BvJYKD0sKDw8KSw8KlgoPSwoPDwpLDwSZTYKzYo15%2FtUIFQhsCAgBK01NgbTEs4JNWJmzmFhYmLOZIw8KSw8KlgoPSwoPDwpLDwqWCg9LCg8AAAMAF%2F%2FrBMUEmQAZACUANQAAADIeAhUUBwEWFA8BBiInAQYjIi4CND4BBCIOARQeATI%2BATQmBSEyFh0BFAYjISImPQE0NgGZxLOCTU4BLAgIbQcVCP7Ud45itIFNTYEBb7OYWFiYs5lYWP5YAV4KDw8K%2FqIKDw8EmU2Cs2KNef7VCBUIbAgIAStNTYG0xLOCTViZs5hYWJizmYcPCpYKDw8KlgoPAAAAAAIAFwAXBJkEsAAPAC0AAAEzMhYVERQGKwEiJjURNDYFNRYSFRQOAiIuAjU0EjcVDgEVFB4BMj4BNTQmAiZkFR0dFWQVHR0BD6fSW5vW6tabW9KnZ3xyxejFcnwEsB0V%2FnAVHR0VAZAVHeGmPv7ZuHXWm1tbm9Z1uAEnPqY3yHh0xXJyxXR4yAAEAGQAAASwBLAADwAfAC8APwAAATMyFhURFAYrASImNRE0NgEzMhYVERQGKwEiJjURNDYBMzIWFREUBisBIiY1ETQ2BTMyFh0BFAYrASImPQE0NgQBlgoPDwqWCg8P%2Ft6WCg8PCpYKDw%2F%2B3pYKDw8KlgoPD%2F7elgoPDwqWCg8PBLAPCvuCCg8PCgR%2BCg%2F%2BcA8K%2FRIKDw8KAu4KD%2F7UDwr%2BPgoPDwoBwgoPyA8K%2BgoPDwr6Cg8AAAAAAgAaABsElgSWAEcATwAAATIfAhYfATcWFwcXFh8CFhUUDwIGDwEXBgcnBwYPAgYjIi8CJi8BByYnNycmLwImNTQ%2FAjY%2FASc2Nxc3Nj8CNhIiBhQWMjY0AlghKSYFMS0Fhj0rUAMZDgGYBQWYAQ8YA1AwOIYFLDIFJisfISkmBTEtBYY8LFADGQ0ClwYGlwINGQNQLzqFBS0xBSYreLJ%2BfrJ%2BBJYFmAEOGQJQMDmGBSwxBiYrHiIoJgYxLAWGPSxRAxkOApcFBZcCDhkDUTA5hgUtMAYmKiAhKCYGMC0Fhj0sUAIZDgGYBf6ZfrF%2BfrEABwBkAAAEsAUUABMAFwAhACUAKQAtADEAAAEhMhYdASEyFh0BITU0NjMhNTQ2FxUhNQERFAYjISImNREXETMRMxEzETMRMxEzETMRAfQBLCk7ARMKD%2Fu0DwoBEzspASwBLDsp%2FUQpO2RkZGRkZGRkBRQ7KWQPCktLCg9kKTtkZGT%2B1PzgKTs7KQMgZP1EArz9RAK8%2FUQCvP1EArwAAQAMAAAFCATRAB8AABMBNjIXARYGKwERFAYrASImNREhERQGKwEiJjURIyImEgJsCBUHAmAIBQqvDwr6Cg%2F%2B1A8K%2BgoPrwoFAmoCYAcH%2FaAICv3BCg8PCgF3%2FokKDw8KAj8KAAIAZAAAA%2BgEsAARABcAAAERFBYzIREUBiMhIiY1ETQ2MwEjIiY9AQJYOykBLB0V%2FOAVHR0VA1L6FR0EsP5wKTv9dhUdHRUETBUd%2FnAdFfoAAwAXABcEmQSZAA8AGwAwAAAAMh4CFA4CIi4CND4BBCIOARQeATI%2BATQmBTMyFhURMzIWHQEUBisBIiY1ETQ2AePq1ptbW5vW6tabW1ubAb%2FoxXJyxejFcnL%2BfDIKD68KDw8K%2BgoPDwSZW5vW6tabW1ub1urWmztyxejFcnLF6MUNDwr%2B7Q8KMgoPDwoBXgoPAAAAAAL%2FnAAABRQEsAALAA8AACkBAyMDIQEzAzMDMwEDMwMFFP3mKfIp%2FeYBr9EVohTQ%2Fp4b4BsBkP5wBLD%2B1AEs%2FnD%2B1AEsAAAAAAIAZAAABLAEsAAVAC8AAAEzMhYVETMyFgcBBiInASY2OwERNDYBMzIWFREUBiMhIiY1ETQ2OwEyFh0BITU0NgImyBUdvxQLDf65DSYN%2FrkNCxS%2FHQJUMgoPDwr75goPDwoyCg8DhA8EsB0V%2Fj4XEP5wEBABkBAXAcIVHfzgDwr%2BogoPDwoBXgoPDwqvrwoPAAMAFwAXBJkEmQAPABsAMQAAADIeAhQOAiIuAjQ%2BAQQiDgEUHgEyPgE0JgUzMhYVETMyFgcDBiInAyY2OwERNDYB4%2BrWm1tbm9bq1ptbW5sBv%2BjFcnLF6MVycv58lgoPiRUKDd8NJg3fDQoViQ8EmVub1urWm1tbm9bq1ps7csXoxXJyxejFDQ8K%2Fu0XEP7tEBABExAXARMKDwAAAAMAFwAXBJkEmQAPABsAMQAAADIeAhQOAiIuAjQ%2BAQQiDgEUHgEyPgE0JiUTFgYrAREUBisBIiY1ESMiJjcTNjIB4%2BrWm1tbm9bq1ptbW5sBv%2BjFcnLF6MVycv7n3w0KFYkPCpYKD4kVCg3fDSYEmVub1urWm1tbm9bq1ps7csXoxXJyxejFAf7tEBf%2B7QoPDwoBExcQARMQAAAAAAIAAAAABLAEsAAZADkAABMhMhYXExYVERQGBwYjISImJyY1EzQ3Ez4BBSEiBgcDBhY7ATIWHwEeATsBMjY%2FAT4BOwEyNicDLgHhAu4KEwO6BwgFDBn7tAweAgYBB7kDEwKX%2FdQKEgJXAgwKlgoTAiYCEwr6ChMCJgITCpYKDAJXAhIEsA4K%2FXQYGf5XDB4CBggEDRkBqRkYAowKDsgOC%2F4%2BCw4OCpgKDg4KmAoODgsBwgsOAAMAFwAXBJkEmQAPABsAJwAAADIeAhQOAiIuAjQ%2BAQQiDgEUHgEyPgE0JgUXFhQPAQYmNRE0NgHj6tabW1ub1urWm1tbmwG%2F6MVycsXoxXJy%2Fov9ERH9EBgYBJlbm9bq1ptbW5vW6tabO3LF6MVycsXoxV2%2BDCQMvgwLFQGQFQsAAQAXABcEmQSwACgAAAE3NhYVERQGIyEiJj8BJiMiDgEUHgEyPgE1MxQOAiIuAjQ%2BAjMyA7OHBwsPCv6WCwQHhW2BdMVycsXoxXKWW5vW6tabW1ub1nXABCSHBwQL%2FpYKDwsHhUxyxejFcnLFdHXWm1tbm9bq1ptbAAAAAAIAFwABBJkEsAAaADUAAAE3NhYVERQGIyEiJj8BJiMiDgEVIzQ%2BAjMyEzMUDgIjIicHBiY1ETQ2MyEyFg8BFjMyPgEDs4cHCw8L%2FpcLBAeGboF0xXKWW5vWdcDrllub1nXAnIYHCw8LAWgKBQiFboJ0xXIEJIcHBAv%2BlwsPCweGS3LFdHXWm1v9v3XWm1t2hggFCgFoCw8LB4VMcsUAAAAKAGQAAASwBLAADwAfAC8APwBPAF8AbwB%2FAI8AnwAAEyEyFhURFAYjISImNRE0NgUhIgYVERQWMyEyNjURNCYFMzIWHQEUBisBIiY9ATQ2MyEyFh0BFAYjISImPQE0NgczMhYdARQGKwEiJj0BNDYzITIWHQEUBiMhIiY9ATQ2BzMyFh0BFAYrASImPQE0NjMhMhYdARQGIyEiJj0BNDYHMzIWHQEUBisBIiY9ATQ2MyEyFh0BFAYjISImPQE0Nn0EGgoPDwr75goPDwPA%2FK4KDw8KA1IKDw%2F9CDIKDw8KMgoPD9IBwgoPDwr%2BPgoPD74yCg8PCjIKDw%2FSAcIKDw8K%2Fj4KDw%2B%2BMgoPDwoyCg8P0gHCCg8PCv4%2BCg8PvjIKDw8KMgoPD9IBwgoPDwr%2BPgoPDwSwDwr7ggoPDwoEfgoPyA8K%2FK4KDw8KA1IKD2QPCjIKDw8KMgoPDwoyCg8PCjIKD8gPCjIKDw8KMgoPDwoyCg8PCjIKD8gPCjIKDw8KMgoPDwoyCg8PCjIKD8gPCjIKDw8KMgoPDwoyCg8PCjIKDwAAAAACAAAAAARMBLAAGQAjAAABNTQmIyEiBh0BIyIGFREUFjMhMjY1ETQmIyE1NDY7ATIWHQEDhHVT%2FtRSdmQpOzspA4QpOzsp%2FageFMgUHgMgyFN1dlLIOyn9qCk7OykCWCk7lhUdHRWWAAIAZAAABEwETAAJADcAABMzMhYVESMRNDYFMhcWFREUBw4DIyIuAScuAiMiBwYjIicmNRE%2BATc2HgMXHgIzMjc2fTIKD2QPA8AEBRADIUNAMRwaPyonKSxHHlVLBwgGBQ4WeDsXKC4TOQQpLUUdZ1AHBEwPCvvNBDMKDzACBhH%2BWwYGO1AkDQ0ODg8PDzkFAwcPAbY3VwMCAwsGFAEODg5XCAAAAwAAAAAEsASXACEAMQBBAAAAMh4CFREUBisBIiY1ETQuASAOARURFAYrASImNRE0PgEDMzIWFREUBisBIiY1ETQ2ITMyFhURFAYrASImNRE0NgHk6N6jYw8KMgoPjeT%2B%2BuSNDwoyCg9joyqgCAwMCKAIDAwCYKAIDAwIoAgMDASXY6PedP7UCg8PCgEsf9FyctF%2F%2FtQKDw8KASx03qP9wAwI%2FjQIDAwIAcwIDAwI%2FjQIDAwIAcwIDAAAAAACAAAA0wRHA90AFQA5AAABJTYWFREUBiclJisBIiY1ETQ2OwEyBTc2Mh8BFhQPARcWFA8BBiIvAQcGIi8BJjQ%2FAScmND8BNjIXAUEBAgkMDAn%2B%2FhUZ%2BgoPDwr6GQJYeAcUByIHB3h4BwciBxQHeHgHFAciBwd3dwcHIgcUBwMurAYHCv0SCgcGrA4PCgFeCg%2BEeAcHIgcUB3h4BxQHIgcHd3cHByIHFAd4eAcUByIICAAAAAACAAAA0wNyA90AFQAvAAABJTYWFREUBiclJisBIiY1ETQ2OwEyJTMWFxYVFAcGDwEiLwEuATc2NTQnJjY%2FATYBQQECCQwMCf7%2BFRn6Cg8PCvoZAdIECgZgWgYLAwkHHQcDBkhOBgMIHQcDLqwGBwr9EgoHBqwODwoBXgoPZAEJgaGafwkBAQYXBxMIZ36EaggUBxYFAAAAAAMAAADEBGID7AAbADEASwAAATMWFxYVFAYHBgcjIi8BLgE3NjU0JicmNj8BNgUlNhYVERQGJyUmKwEiJjURNDY7ATIlMxYXFhUUBwYPASIvAS4BNzY1NCcmNj8BNgPHAwsGh0RABwoDCQcqCAIGbzs3BgIJKgf9ggECCQwMCf7%2BFRn6Cg8PCvoZAdIECgZgWgYLAwkHHQcDBkhOBgMIHQcD7AEJs9lpy1QJAQYiBhQIlrJarEcJFAYhBb6sBgcK%2FRIKBwasDg8KAV4KD2QBCYGhmn8JAQEGFwcTCGd%2BhGoIFQYWBQAAAAANAAAAAASwBLAACQAVABkAHQAhACUALQA7AD8AQwBHAEsATwAAATMVIxUhFSMRIQEjFTMVIREjESM1IQURIREhESERBSM1MwUjNTMBMxEhETM1MwEzFSMVIzUjNTM1IzUhBREhEQcjNTMFIzUzASM1MwUhNSEB9GRk%2FnBkAfQCvMjI%2FtTIZAJY%2B7QBLAGQASz84GRkArxkZP1EyP4MyGQB9MhkyGRkyAEs%2FUQBLGRkZAOEZGT%2BDGRkAfT%2B1AEsA4RkZGQCWP4MZMgBLAEsyGT%2B1AEs%2FtQBLMhkZGT%2BDP4MAfRk%2FtRkZGRkyGTI%2FtQBLMhkZGT%2B1GRkZAAAAAAJAAAAAASwBLAAAwAHAAsADwATABcAGwAfACMAADcjETMTIxEzASMRMxMjETMBIxEzASE1IRcjNTMXIzUzBSM1M2RkZMhkZAGQyMjIZGQBLMjI%2FOD%2B1AEsyGRkyGRkASzIyMgD6PwYA%2Bj8GAPo%2FBgD6PwYA%2Bj7UGRkW1tbW1sAAAIAAAAKBKYEsAANABUAAAkBFhQHAQYiJwETNDYzBCYiBhQWMjYB9AKqCAj%2BMAgUCP1WAQ8KAUM7Uzs7UzsEsP1WCBQI%2FjAICAKqAdsKD807O1Q7OwAAAAADAAAACgXSBLAADQAZACEAAAkBFhQHAQYiJwETNDYzIQEWFAcBBiIvAQkBBCYiBhQWMjYB9AKqCAj%2BMAgUCP1WAQ8KAwYCqggI%2FjAIFAg4Aaj9RP7TO1M7O1M7BLD9VggUCP4wCAgCqgHbCg%2F9VggUCP4wCAg4AaoCvM07O1Q7OwAAAAABAGQAAASwBLAAJgAAASEyFREUDwEGJjURNCYjISIPAQYWMyEyFhURFAYjISImNRE0PwE2ASwDOUsSQAgKDwr9RBkSQAgFCgK8Cg8PCvyuCg8SixIEsEv8fBkSQAgFCgO2Cg8SQAgKDwr8SgoPDwoDzxkSixIAAAABAMj%2F%2FwRMBLAACgAAEyEyFhURCQERNDb6AyAVHf4%2B%2Fj4dBLAdFfuCAbz%2BQwR%2FFR0AAAAAAwAAAAAEsASwABUARQBVAAABISIGBwMGHwEeATMhMjY%2FATYnAy4BASMiBg8BDgEjISImLwEuASsBIgYVERQWOwEyNj0BNDYzITIWHQEUFjsBMjY1ETQmASEiBg8BBhYzITI2LwEuAQM2%2FkQLEAFOBw45BhcKAcIKFwY%2BDgdTARABVpYKFgROBBYK%2FdoKFgROBBYKlgoPDwqWCg8PCgLuCg8PCpYKDw%2F%2Bsf4MChMCJgILCgJYCgsCJgITBLAPCv7TGBVsCQwMCWwVGAEtCg%2F%2BcA0JnAkNDQmcCQ0PCv12Cg8PCpYKDw8KlgoPDwoCigoP%2FagOCpgKDg4KmAoOAAAAAAQAAABkBLAETAAdACEAKQAxAAABMzIeAh8BMzIWFREUBiMhIiY1ETQ2OwE%2BBAEVMzUEIgYUFjI2NCQyFhQGIiY0AfTIOF00JAcGlik7Oyn8GCk7OymWAgknM10ByGT%2Bz76Hh76H%2Fu9WPDxWPARMKTs7FRQ7Kf2oKTs7KQJYKTsIG0U1K%2F7UZGRGh76Hh74IPFY8PFYAAAAAAgA1AAAEsASvACAAIwAACQEWFx4BHwEVITUyNi8BIQYHBh4CMxUhNTY3PgE%2FAQEDIQMCqQGBFCgSJQkK%2Fl81LBFS%2Fnk6IgsJKjIe%2FpM4HAwaBwcBj6wBVKIEr%2FwaMioTFQECQkJXLd6RWSIuHAxCQhgcDCUNDQPu%2FVoByQAAAAADAGQAAAPwBLAAJwAyADsAAAEeBhUUDgMjITU%2BATURNC4EJzUFMh4CFRQOAgclMzI2NTQuAisBETMyNjU0JisBAvEFEzUwOyodN1htbDD%2BDCk7AQYLFyEaAdc5dWM%2BHy0tEP6Pi05pESpTPnbYUFJ9Xp8CgQEHGB0zOlIuQ3VONxpZBzMoAzsYFBwLEAkHRwEpSXNDM1s6KwkxYUopOzQb%2FK5lUFqBAAABAMgAAANvBLAAGQAAARcOAQcDBhYXFSE1NjcTNjQuBCcmJzUDbQJTQgeECSxK%2Fgy6Dq0DAw8MHxUXDQYEsDkTNSj8uTEoBmFhEFIDQBEaExAJCwYHAwI5AAAAAAL%2FtQAABRQEsAAlAC8AAAEjNC4FKwERFBYfARUhNTI%2BAzURIyIOBRUjESEFIxEzByczESM3BRQyCAsZEyYYGcgyGRn%2BcAQOIhoWyBkYJhMZCwgyA%2Bj7m0tLfX1LS30DhBUgFQ4IAwH8rhYZAQJkZAEFCRUOA1IBAwgOFSAVASzI%2FOCnpwMgpwACACH%2FtQSPBLAAJQAvAAABIzQuBSsBERQWHwEVITUyPgM1ESMiDgUVIxEhEwc1IRUnNxUhNQRMMggLGRMmGBnIMhkZ%2FnAEDiIaFsgZGCYTGQsIMgPoQ6f84KenAyADhBUgFQ4IAwH9dhYZAQJkZAEFCRUOAooBAwgOFSAVASz7gn1LS319S0sABAAAAAAEsARMAA8AHwAvAD8AABMhMhYdARQGIyEiJj0BNDYTITIWHQEUBiMhIiY9ATQ2EyEyFh0BFAYjISImPQE0NhMhMhYdARQGIyEiJj0BNDYyAlgVHR0V%2FagVHR0VA%2BgVHR0V%2FBgVHR0VAyAVHR0V%2FOAVHR0VBEwVHR0V%2B7QVHR0ETB0VZBUdHRVkFR3%2B1B0VZBUdHRVkFR3%2B1B0VZBUdHRVkFR3%2B1B0VZBUdHRVkFR0ABAAAAAAEsARMAA8AHwAvAD8AABMhMhYdARQGIyEiJj0BNDYDITIWHQEUBiMhIiY9ATQ2EyEyFh0BFAYjISImPQE0NgMhMhYdARQGIyEiJj0BNDb6ArwVHR0V%2FUQVHR2zBEwVHR0V%2B7QVHR3dArwVHR0V%2FUQVHR2zBEwVHR0V%2B7QVHR0ETB0VZBUdHRVkFR3%2B1B0VZBUdHRVkFR3%2B1B0VZBUdHRVkFR3%2B1B0VZBUdHRVkFR0ABAAAAAAEsARMAA8AHwAvAD8AAAE1NDYzITIWHQEUBiMhIiYBNTQ2MyEyFh0BFAYjISImEzU0NjMhMhYdARQGIyEiJgE1NDYzITIWHQEUBiMhIiYB9B0VAlgVHR0V%2FagVHf5wHRUD6BUdHRX8GBUdyB0VAyAVHR0V%2FOAVHf7UHRUETBUdHRX7tBUdA7ZkFR0dFWQVHR3%2B6WQVHR0VZBUdHf7pZBUdHRVkFR0d%2FulkFR0dFWQVHR0AAAQAAAAABLAETAAPAB8ALwA%2FAAATITIWHQEUBiMhIiY9ATQ2EyEyFh0BFAYjISImPQE0NhMhMhYdARQGIyEiJj0BNDYTITIWHQEUBiMhIiY9ATQ2MgRMFR0dFfu0FR0dFQRMFR0dFfu0FR0dFQRMFR0dFfu0FR0dFQRMFR0dFfu0FR0dBEwdFWQVHR0VZBUd%2FtQdFWQVHR0VZBUd%2FtQdFWQVHR0VZBUd%2FtQdFWQVHR0VZBUdAAgAAAAABLAETAAPAB8ALwA%2FAE8AXwBvAH8AABMzMhYdARQGKwEiJj0BNDYpATIWHQEUBiMhIiY9ATQ2ATMyFh0BFAYrASImPQE0NikBMhYdARQGIyEiJj0BNDYBMzIWHQEUBisBIiY9ATQ2KQEyFh0BFAYjISImPQE0NgEzMhYdARQGKwEiJj0BNDYpATIWHQEUBiMhIiY9ATQ2MmQVHR0VZBUdHQFBAyAVHR0V%2FOAVHR3%2B6WQVHR0VZBUdHQFBAyAVHR0V%2FOAVHR3%2B6WQVHR0VZBUdHQFBAyAVHR0V%2FOAVHR3%2B6WQVHR0VZBUdHQFBAyAVHR0V%2FOAVHR0ETB0VZBUdHRVkFR0dFWQVHR0VZBUd%2FtQdFWQVHR0VZBUdHRVkFR0dFWQVHf7UHRVkFR0dFWQVHR0VZBUdHRVkFR3%2B1B0VZBUdHRVkFR0dFWQVHR0VZBUdAAAG%2F5wAAASwBEwAAwATACMAKgA6AEoAACEjETsCMhYdARQGKwEiJj0BNDYTITIWHQEUBiMhIiY9ATQ2BQc1IzUzNQUhMhYdARQGIyEiJj0BNDYTITIWHQEUBiMhIiY9ATQ2AZBkZJZkFR0dFWQVHR0VAfQVHR0V%2FgwVHR3%2B%2BqfIyAHCASwVHR0V%2FtQVHR0VAlgVHR0V%2FagVHR0ETB0VZBUdHRVkFR3%2B1B0VZBUdHRVkFR36fUtkS68dFWQVHR0VZBUd%2FtQdFWQVHR0VZBUdAAAABgAAAAAFFARMAA8AEwAjACoAOgBKAAATMzIWHQEUBisBIiY9ATQ2ASMRMwEhMhYdARQGIyEiJj0BNDYFMxUjFSc3BSEyFh0BFAYjISImPQE0NhMhMhYdARQGIyEiJj0BNDYyZBUdHRVkFR0dA2dkZPyuAfQVHR0V%2FgwVHR0EL8jIp6f75gEsFR0dFf7UFR0dFQJYFR0dFf2oFR0dBEwdFWQVHR0VZBUd%2B7QETP7UHRVkFR0dFWQVHchkS319rx0VZBUdHRVkFR3%2B1B0VZBUdHRVkFR0AAAAAAgAAAMgEsAPoAA8AEgAAEyEyFhURFAYjISImNRE0NgkCSwLuHywsH%2F0SHywsBIT%2B1AEsA%2BgsH%2F12HywsHwKKHyz9RAEsASwAAwAAAAAEsARMAA8AFwAfAAATITIWFREUBiMhIiY1ETQ2FxE3BScBExEEMhYUBiImNCwEWBIaGhL7qBIaGkr3ASpKASXs%2FNJwTk5wTgRMGhL8DBIaGhID9BIaZP0ftoOcAT7%2B4AH0dE5vT09vAAAAAAIA2wAFBDYEkQAWAB4AAAEyHgEVFAcOAQ8BLgQnJjU0PgIWIgYUFjI2NAKIdcZzRkWyNjYJIV5YbSk8RHOft7eCgreCBJF4ynVzj23pPz4IIWZomEiEdVijeUjDgriBgbgAAAACABcAFwSZBJkADwAXAAAAMh4CFA4CIi4CND4BAREiDgEUHgEB4%2BrWm1tbm9bq1ptbW5sBS3TFcnLFBJlbm9bq1ptbW5vW6tab%2FG8DVnLF6MVyAAACAHUAAwPfBQ8AGgA1AAABHgYVFA4DBy4DNTQ%2BBQMOAhceBBcWNj8BNiYnLgInJjc2IyYCKhVJT1dOPiUzVnB9P1SbfEokP0xXUEm8FykoAwEbITEcExUWAgYCCQkFEikMGiACCAgFD0iPdXdzdYdFR4BeRiYEBTpjl1lFh3ZzeHaQ%2Ff4hS4I6JUEnIw4IBwwQIgoYBwQQQSlZtgsBAAAAAwAAAAAEywRsAAwAKgAvAAABNz4CHgEXHgEPAiUhMhcHISIGFREUFjMhMjY9ATcRFAYjISImNRE0NgkBBzcBA%2BhsAgYUFR0OFgoFBmz9BQGQMje7%2FpApOzspAfQpO8i7o%2F5wpbm5Azj%2BlqE3AWMD9XMBAgIEDw4WKgsKc8gNuzsp%2FgwpOzsptsj%2BtKW5uaUBkKW5%2Ftf%2BljKqAWMAAgAAAAAEkwRMABsANgAAASEGByMiBhURFBYzITI2NTcVFAYjISImNRE0NgUBFhQHAQYmJzUmDgMHPgY3NT4BAV4BaaQ0wyk7OykB9Ck7yLml%2FnClubkCfwFTCAj%2BrAcLARo5ZFRYGgouOUlARioTAQsETJI2Oyn%2BDCk7OymZZ6W5uaUBkKW5G%2F7TBxUH%2Fs4GBAnLAQINFjAhO2JBNB0UBwHSCgUAAAAAAgAAAAAEnQRMAB0ANQAAASEyFwchIgYVERQWMyEyNj0BNxUUBiMhIiY1ETQ2CQE2Mh8BFhQHAQYiLwEmND8BNjIfARYyAV4BXjxDsv6jKTs7KQH0KTvIuaX%2BcKW5uQHKAYsHFQdlBwf97QcVB%2FgHB2UHFQdvCBQETBexOyn%2BDCk7OylFyNulubmlAZCluf4zAYsHB2UHFQf97AcH%2BAcVB2UHB28HAAAAAQAKAAoEpgSmADsAAAkBNjIXARYGKwEVMzU0NhcBFhQHAQYmPQEjFTMyFgcBBiInASY2OwE1IxUUBicBJjQ3ATYWHQEzNSMiJgE%2BAQgIFAgBBAcFCqrICggBCAgI%2FvgICsiqCgUH%2FvwIFAj%2B%2BAgFCq%2FICgj%2B%2BAgIAQgICsivCgUDlgEICAj%2B%2BAgKyK0KBAf%2B%2FAcVB%2F73BwQKrcgKCP74CAgBCAgKyK0KBAcBCQcVBwEEBwQKrcgKAAEAyAAAA4QETAAZAAATMzIWFREBNhYVERQGJwERFAYrASImNRE0NvpkFR0B0A8VFQ%2F%2BMB0VZBUdHQRMHRX%2BSgHFDggV%2FBgVCA4Bxf5KFR0dFQPoFR0AAAABAAAAAASwBEwAIwAAEzMyFhURATYWFREBNhYVERQGJwERFAYnAREUBisBIiY1ETQ2MmQVHQHQDxUB0A8VFQ%2F%2BMBUP%2FjAdFWQVHR0ETB0V%2FkoBxQ4IFf5KAcUOCBX8GBUIDgHF%2FkoVCA4Bxf5KFR0dFQPoFR0AAAABAJ0AGQSwBDMAFQAAAREUBicBERQGJwEmNDcBNhYVEQE2FgSwFQ%2F%2BMBUP%2FhQPDwHsDxUB0A8VBBr8GBUIDgHF%2FkoVCA4B4A4qDgHgDggV%2FkoBxQ4IAAAAAQDIABYEMwQ2AAsAABMBFhQHAQYmNRE0NvMDLhIS%2FNISGRkEMv4OCx4L%2Fg4LDhUD6BUOAAIAyABkA4QD6AAPAB8AABMzMhYVERQGKwEiJjURNDYhMzIWFREUBisBIiY1ETQ2%2BsgVHR0VyBUdHQGlyBUdHRXIFR0dA%2BgdFfzgFR0dFQMgFR0dFfzgFR0dFQMgFR0AAAEAyABkBEwD6AAPAAABERQGIyEiJjURNDYzITIWBEwdFfzgFR0dFQMgFR0DtvzgFR0dFQMgFR0dAAAAAAEAAAAZBBMEMwAVAAABETQ2FwEWFAcBBiY1EQEGJjURNDYXAfQVDwHsDw%2F%2BFA8V%2FjAPFRUPAmQBthUIDv4gDioO%2FiAOCBUBtv47DggVA%2BgVCA4AAAH%2F%2FgACBLMETwAjAAABNzIWFRMUBiMHIiY1AwEGJjUDAQYmNQM0NhcBAzQ2FwEDNDYEGGQUHgUdFWQVHQL%2BMQ4VAv4yDxUFFQ8B0gIVDwHSAh0ETgEdFfwYFR0BHRUBtf46DwkVAbX%2BOQ4JFAPoFQkP%2Fj4BthQJDv49AbYVHQAAAQEsAAAD6ARMABkAAAEzMhYVERQGKwEiJjURAQYmNRE0NhcBETQ2A1JkFR0dFWQVHf4wDxUVDwHQHQRMHRX8GBUdHRUBtv47DggVA%2BgVCA7%2BOwG2FR0AAAIAZADIBLAESAALABsAAAkBFgYjISImNwE2MgEhMhYdARQGIyEiJj0BNDYCrgH1DwkW%2B%2B4WCQ8B9Q8q%2FfcD6BUdHRX8GBUdHQQ5%2FeQPFhYPAhwP%2FUgdFWQVHR0VZBUdAAEAiP%2F8A3UESgAFAAAJAgcJAQN1%2FqABYMX92AIoA4T%2Bn%2F6fxgIoAiYAAAAAAQE7%2F%2FwEKARKAAUAAAkBJwkBNwQo%2FdnGAWH%2Bn8YCI%2F3ZxgFhAWHGAAIAFwAXBJkEmQAPADMAAAAyHgIUDgIiLgI0PgEFIyIGHQEjIgYdARQWOwEVFBY7ATI2PQEzMjY9ATQmKwE1NCYB4%2BrWm1tbm9bq1ptbW5sBfWQVHZYVHR0Vlh0VZBUdlhUdHRWWHQSZW5vW6tabW1ub1urWm7odFZYdFWQVHZYVHR0Vlh0VZBUdlhUdAAAAAAIAFwAXBJkEmQAPAB8AAAAyHgIUDgIiLgI0PgEBISIGHQEUFjMhMjY9ATQmAePq1ptbW5vW6tabW1ubAkX%2BDBUdHRUB9BUdHQSZW5vW6tabW1ub1urWm%2F5%2BHRVkFR0dFWQVHQACABcAFwSZBJkADwAzAAAAMh4CFA4CIi4CND4BBCIPAScmIg8BBhQfAQcGFB8BFjI%2FARcWMj8BNjQvATc2NC8BAePq1ptbW5vW6tabW1ubAeUZCXh4CRkJjQkJeHgJCY0JGQl4eAkZCY0JCXh4CQmNBJlbm9bq1ptbW5vW6tabrQl4eAkJjQkZCXh4CRkJjQkJeHgJCY0JGQl4eAkZCY0AAgAXABcEmQSZAA8AJAAAADIeAhQOAiIuAjQ%2BAQEnJiIPAQYUHwEWMjcBNjQvASYiBwHj6tabW1ub1urWm1tbmwEVVAcVCIsHB%2FIHFQcBdwcHiwcVBwSZW5vW6tabW1ub1urWm%2F4xVQcHiwgUCPEICAF3BxUIiwcHAAAAAAMAFwAXBJkEmQAPADsASwAAADIeAhQOAiIuAjQ%2BAQUiDgMVFDsBFjc%2BATMyFhUUBgciDgUHBhY7ATI%2BAzU0LgMTIyIGHQEUFjsBMjY9ATQmAePq1ptbW5vW6tabW1ubAT8dPEIyIRSDHgUGHR8UFw4TARkOGhITDAIBDQ6tBx4oIxgiM0Q8OpYKDw8KlgoPDwSZW5vW6tabW1ub1urWm5ELHi9PMhkFEBQQFRIXFgcIBw4UHCoZCBEQKDhcNi9IKhsJ%2FeMPCpYKDw8KlgoPAAADABcAFwSZBJkADwAfAD4AAAAyHgIUDgIiLgI0PgEFIyIGHQEUFjsBMjY9ATQmAyMiBh0BFBY7ARUjIgYdARQWMyEyNj0BNCYrARE0JgHj6tabW1ub1urWm1tbmwGWlgoPDwqWCg8PCvoKDw8KS0sKDw8KAV4KDw8KSw8EmVub1urWm1tbm9bq1ptWDwqWCg8PCpYKD%2F7UDwoyCg%2FIDwoyCg8PCjIKDwETCg8AAgAAAAAEsASwAC8AXwAAATMyFh0BHgEXMzIWHQEUBisBDgEHFRQGKwEiJj0BLgEnIyImPQE0NjsBPgE3NTQ2ExUUBisBIiY9AQ4BBzMyFh0BFAYrAR4BFzU0NjsBMhYdAT4BNyMiJj0BNDY7AS4BAg2WCg9nlxvCCg8PCsIbl2cPCpYKD2eXG8IKDw8KwhuXZw%2B5DwqWCg9EZheoCg8PCqgXZkQPCpYKD0RmF6gKDw8KqBdmBLAPCsIbl2cPCpYKD2eXG8IKDw8KwhuXZw8KlgoPZ5cbwgoP%2Fs2oCg8PCqgXZkQPCpYKD0RmF6gKDw8KqBdmRA8KlgoPRGYAAwAXABcEmQSZAA8AGwA%2FAAAAMh4CFA4CIi4CND4BBCIOARQeATI%2BATQmBxcWFA8BFxYUDwEGIi8BBwYiLwEmND8BJyY0PwE2Mh8BNzYyAePq1ptbW5vW6tabW1ubAb%2FoxXJyxejFcnKaQAcHfHwHB0AHFQd8fAcVB0AHB3x8BwdABxUHfHwHFQSZW5vW6tabW1ub1urWmztyxejFcnLF6MVaQAcVB3x8BxUHQAcHfHwHB0AHFQd8fAcVB0AHB3x8BwAAAAMAFwAXBJkEmQAPABsAMAAAADIeAhQOAiIuAjQ%2BAQQiDgEUHgEyPgE0JgcXFhQHAQYiLwEmND8BNjIfATc2MgHj6tabW1ub1urWm1tbmwG%2F6MVycsXoxXJyg2oHB%2F7ACBQIyggIagcVB0%2FFBxUEmVub1urWm1tbm9bq1ps7csXoxXJyxejFfWoHFQf%2BvwcHywcVB2oICE%2FFBwAAAAMAFwAXBJkEmQAPABgAIQAAADIeAhQOAiIuAjQ%2BAQUiDgEVFBcBJhcBFjMyPgE1NAHj6tabW1ub1urWm1tbmwFLdMVyQQJLafX9uGhzdMVyBJlbm9bq1ptbW5vW6tabO3LFdHhpAktB0P24PnLFdHMAAAAAAQAXAFMEsAP5ABUAABMBNhYVESEyFh0BFAYjIREUBicBJjQnAgoQFwImFR0dFf3aFxD99hACRgGrDQoV%2Ft0dFcgVHf7dFQoNAasNJgAAAAABAAAAUwSZA%2FkAFQAACQEWFAcBBiY1ESEiJj0BNDYzIRE0NgJ%2FAgoQEP32EBf92hUdHRUCJhcD8f5VDSYN%2FlUNChUBIx0VyBUdASMVCgAAAAEAtwAABF0EmQAVAAAJARYGIyERFAYrASImNREhIiY3ATYyAqoBqw0KFf7dHRXIFR3%2B3RUKDQGrDSYEif32EBf92hUdHRUCJhcQAgoQAAAAAQC3ABcEXQSwABUAAAEzMhYVESEyFgcBBiInASY2MyERNDYCJsgVHQEjFQoN%2FlUNJg3%2BVQ0KFQEjHQSwHRX92hcQ%2FfYQEAIKEBcCJhUdAAABAAAAtwSZBF0AFwAACQEWFAcBBiY1EQ4DBz4ENxE0NgJ%2FAgoQEP32EBdesKWBJAUsW4fHfhcEVf5VDSYN%2FlUNChUBIwIkRHVNabGdcUYHAQYVCgACAAAAAASwBLAAFQArAAABITIWFREUBi8BBwYiLwEmND8BJyY2ASEiJjURNDYfATc2Mh8BFhQPARcWBgNSASwVHRUOXvkIFAhqBwf5Xg4I%2FiH%2B1BUdFQ5e%2BQgUCGoHB%2FleDggEsB0V%2FtQVCA5e%2BQcHaggUCPleDhX7UB0VASwVCA5e%2BQcHaggUCPleDhUAAAACAEkASQRnBGcAFQArAAABFxYUDwEXFgYjISImNRE0Nh8BNzYyASEyFhURFAYvAQcGIi8BJjQ%2FAScmNgP2agcH%2BV4OCBX%2B1BUdFQ5e%2BQgU%2FQwBLBUdFQ5e%2BQgUCGoHB%2FleDggEYGoIFAj5Xg4VHRUBLBUIDl75B%2F3xHRX%2B1BUIDl75BwdqCBQI%2BV4OFQAAAAADABcAFwSZBJkADwAfAC8AAAAyHgIUDgIiLgI0PgEFIyIGFxMeATsBMjY3EzYmAyMiBh0BFBY7ATI2PQE0JgHj6tabW1ub1urWm1tbmwGz0BQYBDoEIxQ2FCMEOgQYMZYKDw8KlgoPDwSZW5vW6tabW1ub1urWm7odFP7SFB0dFAEuFB3%2BDA8KlgoPDwqWCg8AAAAABQAAAAAEsASwAEkAVQBhAGgAbwAAATIWHwEWHwEWFxY3Nj8BNjc2MzIWHwEWHwIeATsBMhYdARQGKwEiBh0BIREjESE1NCYrASImPQE0NjsBMjY1ND8BNjc%2BBAUHBhY7ATI2LwEuAQUnJgYPAQYWOwEyNhMhIiY1ESkBERQGIyERAQQJFAUFFhbEFQ8dCAsmxBYXERUXMA0NDgQZCAEPCj0KDw8KMgoP%2FnDI%2FnAPCjIKDw8KPQsOCRkFDgIGFRYfAp2mBwQK2woKAzMDEP41sQgQAzMDCgrnCwMe%2FokKDwGQAlgPCv6JBLAEAgIKDXYNCxUJDRZ2DQoHIREQFRh7LAkLDwoyCg8PCq8BLP7UrwoPDwoyCg8GBQQwgBkUAwgWEQ55ogcKDgqVCgSqnQcECo8KDgr8cg8KAXf%2BiQoPAZAAAAAAAgAAAAwErwSmACsASQAAATYWFQYCDgQuAScmByYOAQ8BBiY1NDc%2BATc%2BAScuAT4BNz4GFyYGBw4BDwEOBAcOARY2Nz4CNz4DNz4BBI0IGgItQmxhi2KORDg9EQQRMxuZGhYqCFUYEyADCQIQOjEnUmFch3vAJQgdHyaiPT44XHRZUhcYDhItIRmKcVtGYWtbKRYEBKYDEwiy%2Ft3IlVgxEQgLCwwBAQIbG5kYEyJAJghKFRE8Hzdff4U%2FM0o1JSMbL0QJGCYvcSEhHjZST2c1ODwEJygeW0AxJUBff1UyFAABAF0AHgRyBM8ATwAAAQ4BHgQXLgc%2BATceAwYHDgQHBicmNzY3PgQuAScWDgMmJy4BJyY%2BBDcGHgM3PgEuAicmPgMCjScfCic4R0IgBBsKGAoQAwEJEg5gikggBhANPkpTPhZINx8SBgsNJysiCRZOQQoVNU1bYC9QZwICBAUWITsoCAYdJzIYHw8YIiYHDyJJYlkEz0OAZVxEOSQMBzgXOB42IzElKRIqg5Gnl0o3Z0c6IAYWCwYNAwQFIDhHXGF1OWiqb0sdBxUknF0XNTQ8PEUiNWNROBYJDS5AQVUhVZloUSkAAAAAA%2F%2FcAGoE1ARGABsAPwBRAAAAMh4FFA4FIi4FND4EBSYGFxYVFAYiJjU0NzYmBwYHDgEXHgQyPgM3NiYnJgUHDgEXFhcWNj8BNiYnJicuAQIGpJ17bk85HBw6T257naKde25POhwcOU9uewIPDwYIGbD4sBcIBw5GWg0ECxYyWl%2BDiINfWjIWCwQMWv3%2FIw8JCSU4EC0OIw4DDywtCyIERi1JXGJcSSpJXGJcSS0tSVxiXEkqSVxiXEncDwYTOT58sLB8OzcTBg9FcxAxEiRGXkQxMEVeRSQSMRF1HiQPLxJEMA0EDyIPJQ8sSRIEAAAABP%2FcAAAE1ASwABQAJwA7AEwAACEjNy4ENTQ%2BBTMyFzczEzceARUUDgMHNz4BNzYmJyYlBgcOARceBBc3LgE1NDc2JhcHDgEXFhcWNj8CJyYnLgECUJQfW6l2WSwcOU9ue51SPUEglCYvbIknUGqYUi5NdiYLBAw2%2FVFGWg0ECxIqSExoNSlrjxcIB3wjDwkJJTgQLQ4MFgMsLQsieBRhdHpiGxVJXGJcSS0Pef5StVXWNBpacm5jGq0xiD8SMRFGckVzEDESHjxRQTkNmhKnbjs3EwZwJA8vEkQwDQQPC1YELEkSBAAAAAP%2FngAABRIEqwALABgAKAAAJwE2FhcBFgYjISImJSE1NDY7ATIWHQEhAQczMhYPAQ4BKwEiJi8BJjZaAoIUOBQCghUbJfryJRsBCgFZDwqWCg8BWf5DaNAUGAQ6BCMUNhQjBDoEGGQEKh8FIfvgIEdEhEsKDw8KSwLT3x0U%2FBQdHRT8FB0AAAABAGQAFQSwBLAAKAAAADIWFREBHgEdARQGJyURFh0BFAYvAQcGJj0BNDcRBQYmPQE0NjcBETQCTHxYAWsPFhgR%2FplkGhPNzRMaZP6ZERgWDwFrBLBYPv6t%2FrsOMRQpFA0M%2Bf75XRRAFRAJgIAJEBVAFF0BB%2FkMDRQpFDEOAUUBUz4AAAARAAAAAARMBLAAHQAnACsALwAzADcAOwA%2FAEMARwBLAE8AUwBXAFsAXwBjAAABMzIWHQEzMhYdASE1NDY7ATU0NjsBMhYdASE1NDYBERQGIyEiJjURFxUzNTMVMzUzFTM1MxUzNTMVMzUFFTM1MxUzNTMVMzUzFTM1MxUzNQUVMzUzFTM1MxUzNTMVMzUzFTM1A1JkFR0yFR37tB0VMh0VZBUdAfQdAQ8dFfwYFR1kZGRkZGRkZGRk%2FHxkZGRkZGRkZGT8fGRkZGRkZGRkZASwHRUyHRWWlhUdMhUdHRUyMhUd%2FnD9EhUdHRUC7shkZGRkZGRkZGRkyGRkZGRkZGRkZGTIZGRkZGRkZGRkZAAAAAMAAAAZBXcElwAZACUANwAAARcWFA8BBiY9ASMBISImPQE0NjsBATM1NDYBBycjIiY9ATQ2MyEBFxYUDwEGJj0BIyc3FzM1NDYEb%2FkPD%2FkOFZ%2F9qP7dFR0dFdECWPEV%2FamNetEVHR0VASMDGvkPD%2FkOFfG1jXqfFQSN5g4qDuYOCBWW%2FagdFWQVHQJYlhUI%2FpiNeh0VZBUd%2Fk3mDioO5g4IFZa1jXqWFQgAAAABAAAAAASwBEwAEgAAEyEyFhURFAYjIQERIyImNRE0NmQD6Ck7Oyn9rP7QZCk7OwRMOyn9qCk7%2FtQBLDspAlgpOwAAAAMAZAAABEwEsAAJABMAPwAAEzMyFh0BITU0NiEzMhYdASE1NDYBERQOBSIuBTURIRUUFRwBHgYyPgYmNTQ9AZbIFR3%2B1B0C0cgVHf7UHQEPBhgoTGacwJxmTCgYBgEsAwcNFB8nNkI2Jx8TDwUFAQSwHRX6%2BhUdHRX6%2BhUd%2FnD%2B1ClJalZcPigoPlxWakkpASz6CRIVKyclIRsWEAgJEBccISUnKhURCPoAAAAB%2F%2F8A1ARMA8IABQAAAQcJAScBBEzG%2Fp%2F%2Bn8UCJwGbxwFh%2Fp%2FHAicAAQAAAO4ETQPcAAUAAAkCNwkBBE392v3ZxgFhAWEDFf3ZAifH%2Fp8BYQAAAAAC%2F1EAZAVfA%2BgAFAApAAABITIWFREzMhYPAQYiLwEmNjsBESElFxYGKwERIRchIiY1ESMiJj8BNjIBlALqFR2WFQgO5g4qDuYOCBWW%2FoP%2BHOYOCBWWAYHX%2FRIVHZYVCA7mDioD6B0V%2FdkVDvkPD%2FkOFQGRuPkOFf5wyB0VAiYVDvkPAAABAAYAAASeBLAAMAAAEzMyFh8BITIWBwMOASMhFyEyFhQGKwEVFAYiJj0BIRUUBiImPQEjIiYvAQMjIiY0NjheERwEJgOAGB4FZAUsIf2HMAIXFR0dFTIdKh3%2B1B0qHR8SHQYFyTYUHh4EsBYQoiUY%2FiUVK8gdKh0yFR0dFTIyFR0dFTIUCQoDwR0qHQAAAAACAAAAAASwBEwACwAPAAABFSE1MzQ2MyEyFhUFIREhBLD7UMg7KQEsKTv9RASw%2B1AD6GRkKTs7Kcj84AACAAAAAAXcBEwADAAQAAATAxEzNDYzITIWFSEVBQEhAcjIyDspASwqOgH0ASz%2B1PtQASwDIP5wAlgpOzspyGT9RAK8AAEBRQAAA2sErwAbAAABFxYGKwERMzIWDwEGIi8BJjY7AREjIiY%2FATYyAnvmDggVlpYVCA7mDioO5g4IFZaWFQgO5g4qBKD5DhX9pxUO%2BQ8P%2BQ4VAlkVDvkPAAAAAQABAUQErwNrABsAAAEXFhQPAQYmPQEhFRQGLwEmND8BNhYdASE1NDYDqPkODvkPFf2oFQ%2F5Dg75DxUCWBUDYOUPKQ%2FlDwkUl5cUCQ%2FlDykP5Q8JFZWVFQkAAAAEAAAAAASwBLAACQAZAB0AIQAAAQMuASMhIgYHAwUhIgYdARQWMyEyNj0BNCYFNTMVMzUzFQSRrAUkFP1gFCQFrAQt%2FBgpOzspA%2BgpOzv%2Bq2RkZAGQAtwXLSgV%2FR1kOylkKTs7KWQpO8hkZGRkAAAAA%2F%2BcAGQEsARMAAsAIwAxAAAAMhYVERQGIiY1ETQDJSMTFgYjIisBIiYnAj0BNDU0PgE7ASUBFSIuAz0BND4CNwRpKh0dKh1k%2FV0mLwMRFQUCVBQdBDcCCwzIAqP8GAQOIhoWFR0dCwRMHRX8rhUdHRUDUhX8mcj%2B7BAIHBUBUQ76AgQQDw36%2FtT6AQsTKRwyGigUDAEAAAACAEoAAARmBLAALAA1AAABMzIWDwEeARcTFzMyFhQGBw4EIyIuBC8BLgE0NjsBNxM%2BATcnJjYDFjMyNw4BIiYCKV4UEgYSU3oPP3YRExwaEggeZGqfTzl0XFU%2BLwwLEhocExF2Pw96UxIGEyQyNDUxDDdGOASwFRMlE39N%2FrmtHSkoBwQLHBYSCg4REg4FBAgoKR2tAUdNfhQgExr7vgYGMT09AAEAFAAUBJwEnAAXAAABNwcXBxcHFycHJwcnBzcnNyc3Jxc3FzcDIOBO6rS06k7gLZubLeBO6rS06k7gLZubA7JO4C2bmy3gTuq0tOpO4C2bmy3gTuq0tAADAAAAZASwBLAAIQAtAD0AAAEzMhYdAQchMhYdARQHAw4BKwEiJi8BIyImNRE0PwI%2BARcPAREzFzMTNSE3NQEzMhYVERQGKwEiJjURNDYCijIoPBwBSCg8He4QLBf6B0YfHz0tNxSRYA0xG2SWZIjW%2Bv4%2BMv12ZBUdHRVkFR0dBLBRLJZ9USxkLR3%2BqBghMhkZJCcBkCQbxMYcKGTU1f6JZAF3feGv%2FtQdFf4MFR0dFQH0FR0AAAAAAwAAAAAEsARMACAAMAA8AAABMzIWFxMWHQEUBiMhFh0BFAYrASImLwImNRE0NjsBNgUzMhYVERQGKwEiJjURNDYhByMRHwEzNSchNQMCWPoXLBDuHTwo%2FrgcPCgyGzENYJEUNy09fP3pZBUdHRVkFR0dAl%2BIZJZkMjIBwvoETCEY%2FqgdLWQsUXYHlixRKBzGxBskAZAnJGRkHRX%2BDBUdHRUB9BUdZP6J1dSv4X0BdwADAAAAZAUOBE8AGwA3AEcAAAElNh8BHgEPASEyFhQGKwEDDgEjISImNRE0NjcXERchEz4BOwEyNiYjISoDLgQnJj8BJwUzMhYVERQGKwEiJjURNDYBZAFrHxZuDQEMVAEuVGxuVGqDBhsP%2FqoHphwOOmQBJYMGGw%2FLFRMSFv44AgoCCQMHAwUDAQwRklb9T2QVHR0VZBUdHQNp5hAWcA0mD3lMkE7%2BrRUoog0CDRElCkj%2BCVkBUxUoMjIBAgIDBQIZFrdT5B0V%2FgwVHR0VAfQVHQAAAAP%2FnABkBLAETwAdADYARgAAAQUeBBURFAYjISImJwMjIiY0NjMhJyY2PwE2BxcWBw4FKgIjIRUzMhYXEyE3ESUFMzIWFREUBisBIiY1ETQ2AdsBbgIIFBANrAf%2Bqg8bBoNqVW1sVAEuVQsBDW4WSpIRDAIDBQMHAwkDCgH%2BJd0PHAaCASZq%2FqoCUGQVHR0VZBUdHQRP5gEFEBEXC%2F3zDaIoFQFTTpBMeQ8mDXAWrrcWGQIFAwICAWQoFf6tWQH37OQdFf4MFR0dFQH0FR0AAAADAGEAAARMBQ4AGwA3AEcAAAAyFh0BBR4BFREUBiMhIiYvAQMmPwE%2BAR8BETQXNTQmBhURHAMOBAcGLwEHEyE3ESUuAQMhMhYdARQGIyEiJj0BNDYB3pBOAVMVKKIN%2FfMRJQoJ5hAWcA0mD3nGMjIBAgIDBQIZFrdT7AH3Wf6tFSiWAfQVHR0V%2FgwVHR0FDm5UaoMGGw%2F%2BqgemHA4OAWsfFm4NAQxUAS5U1ssVExIW%2FjgCCgIJAwcDBQMBDBGSVv6tZAElgwYb%2FQsdFWQVHR0VZBUdAAP%2F%2FQAGA%2BgFFAAPAC0ASQAAASEyNj0BNCYjISIGHQEUFgEVFAYiJjURBwYmLwEmNxM%2BBDMhMhYVERQGBwEDFzc2Fx4FHAIVERQWNj0BNDY3JREnAV4B9BUdHRX%2BDBUdHQEPTpBMeQ8mDXAWEOYBBRARFwsCDQ2iKBX9iexTtxYZAgUDAgIBMjIoFQFTWQRMHRVkFR0dFWQVHfzmalRubFQBLlQMAQ1uFh8BawIIEw8Mpgf%2Bqg8bBgHP%2Fq1WkhEMAQMFAwcDCQIKAv44FhITFcsPGwaDASVkAAIAFgAWBJoEmgAPACUAAAAyHgIUDgIiLgI0PgEBJSYGHQEhIgYdARQWMyEVFBY3JTY0AeLs1ptbW5vW7NabW1ubAob%2B7RAX%2Fu0KDw8KARMXEAETEASaW5vW7NabW1ub1uzWm%2F453w0KFYkPCpYKD4kVCg3fDSYAAAIAFgAWBJoEmgAPACUAAAAyHgIUDgIiLgI0PgENAQYUFwUWNj0BITI2PQE0JiMhNTQmAeLs1ptbW5vW7NabW1ubASX%2B7RAQARMQFwETCg8PCv7tFwSaW5vW7NabW1ub1uzWm%2BjfDSYN3w0KFYkPCpYKD4kVCgAAAAIAFgAWBJoEmgAPACUAAAAyHgIUDgIiLgI0PgEBAyYiBwMGFjsBERQWOwEyNjURMzI2AeLs1ptbW5vW7NabW1ubAkvfDSYN3w0KFYkPCpYKD4kVCgSaW5vW7NabW1ub1uzWm%2F5AARMQEP7tEBf%2B7QoPDwoBExcAAAIAFgAWBJoEmgAPACUAAAAyHgIUDgIiLgI0PgEFIyIGFREjIgYXExYyNxM2JisBETQmAeLs1ptbW5vW7NabW1ubAZeWCg%2BJFQoN3w0mDd8NChWJDwSaW5vW7NabW1ub1uzWm7sPCv7tFxD%2B7RAQARMQFwETCg8AAAMAGAAYBJgEmAAPAJYApgAAADIeAhQOAiIuAjQ%2BASUOAwcGJgcOAQcGFgcOAQcGFgcUFgcyHgEXHgIXHgI3Fg4BFx4CFxQGFBcWNz4CNy4BJy4BJyIOAgcGJyY2NS4BJzYuAQYHBicmNzY3HgIXHgMfAT4CJyY%2BATc%2BAzcmNzIWMjY3LgMnND4CJiceAT8BNi4CJwYHFB4BFS4CJz4BNxYyPgEB5OjVm1xcm9Xo1ZtcXJsBZA8rHDoKDz0PFD8DAxMBAzEFCRwGIgEMFhkHECIvCxU%2FOR0HFBkDDRQjEwcFaHUeISQDDTAMD0UREi4oLBAzDwQBBikEAQMLGhIXExMLBhAGKBsGBxYVEwYFAgsFAwMNFwQGCQcYFgYQCCARFwkKKiFBCwQCAQMDHzcLDAUdLDgNEiEQEgg%2FKhADGgMKEgoRBJhcm9Xo1ZtcXJvV6NWbEQwRBwkCAwYFBycPCxcHInIWInYcCUcYChQECA4QBAkuHgQPJioRFRscBAcSCgwCch0kPiAIAQcHEAsBAgsLIxcBMQENCQIPHxkCFBkdHB4QBgEBBwoMGBENBAMMJSAQEhYXDQ4qFBkKEhIDCQsXJxQiBgEOCQwHAQ0DBAUcJAwSCwRnETIoAwEJCwsLJQcKDBEAAAAAAQAAAAIErwSFABYAAAE2FwUXNxYGBw4BJwEGIi8BJjQ3ASY2AvSkjv79kfsGUE08hjv9rA8rD28PDwJYIk8EhVxliuh%2BWYcrIgsW%2FawQEG4PKxACV2XJAAYAAABgBLAErAAPABMAIwAnADcAOwAAEyEyFh0BFAYjISImPQE0NgUjFTMFITIWHQEUBiMhIiY9ATQ2BSEVIQUhMhYdARQGIyEiJj0BNDYFIRUhZAPoKTs7KfwYKTs7BBHIyPwYA%2BgpOzsp%2FBgpOzsEEf4MAfT8GAPoKTs7KfwYKTs7BBH%2B1AEsBKw7KWQpOzspZCk7ZGTIOylkKTs7KWQpO2RkyDspZCk7OylkKTtkZAAAAAIAZAAABEwEsAALABEAABMhMhYUBiMhIiY0NgERBxEBIZYDhBUdHRX8fBUdHQI7yP6iA4QEsB0qHR0qHf1E%2FtTIAfQB9AAAAAMAAABkBLAEsAAXABsAJQAAATMyFh0BITIWFREhNSMVIRE0NjMhNTQ2FxUzNQEVFAYjISImPQEB9MgpOwEsKTv%2BDMj%2BDDspASw7KcgB9Dsp%2FBgpOwSwOylkOyn%2BcGRkAZApO2QpO2RkZP1EyCk7OynIAAAABAAAAAAEsASwABUAKwBBAFcAABMhMhYPARcWFA8BBiIvAQcGJjURNDYpATIWFREUBi8BBwYiLwEmND8BJyY2ARcWFA8BFxYGIyEiJjURNDYfATc2MgU3NhYVERQGIyEiJj8BJyY0PwE2MhcyASwVCA5exwcHaggUCMdeDhUdAzUBLBUdFQ5exwgUCGoHB8deDgj%2BL2oHB8deDggV%2FtQVHRUOXscIFALLXg4VHRX%2B1BUIDl7HBwdqCBQIBLAVDl7HCBQIagcHx14OCBUBLBUdHRX%2B1BUIDl7HBwdqCBQIx14OFf0maggUCMdeDhUdFQEsFQgOXscHzl4OCBX%2B1BUdFQ5exwgUCGoHBwAAAAYAAAAABKgEqAAPABsAIwA7AEMASwAAADIeAhQOAiIuAjQ%2BAQQiDgEUHgEyPgE0JiQyFhQGIiY0JDIWFAYjIicHFhUUBiImNTQ2PwImNTQEMhYUBiImNCQyFhQGIiY0Advy3Z9fX5%2Fd8t2gXl6gAcbgv29vv%2BC%2Fb2%2F%2BLS0gIC0gAUwtICAWDg83ETNIMykfegEJ%2FoctICAtIAIdLSAgLSAEqF%2Bf3fLdoF5eoN3y3Z9Xb7%2Fgv29vv%2BC%2FBiAtISEtICAtIQqRFxwkMzMkIDEFfgEODhekIC0gIC0gIC0gIC0AAf%2FYAFoEuQS8AFsAACUBNjc2JicmIyIOAwcABw4EFx4BMzI3ATYnLgEjIgcGBwEOASY0NwA3PgEzMhceARcWBgcOBgcGIyImJyY2NwE2NzYzMhceARcWBgcBDgEnLgECIgHVWwgHdl8WGSJBMD8hIP6IDx4eLRMNBQlZN0ozAiQkEAcdEhoYDRr%2Bqw8pHA4BRyIjQS4ODyw9DQ4YIwwod26La1YOOEBGdiIwGkQB%2F0coW2tQSE5nDxE4Qv4eDyoQEAOtAdZbZWKbEQQUGjIhH%2F6JDxsdNSg3HT5CMwIkJCcQFBcMGv6uDwEcKQ4BTSIjIQEINykvYyMLKnhuiWZMBxtAOU6%2BRAH%2FSBg3ISSGV121Qv4kDwIPDyYAAAACAGQAWASvBEQAGQBEAAABPgIeAhUUDgMHLgQ1ND4CHgEFIg4DIi4DIyIGFRQeAhcWFx4EMj4DNzY3PgQ1NCYCiTB7eHVYNkN5hKg%2BPqeFeEM4WnZ4eQEjIT8yLSohJyktPyJDbxtBMjMPBw86KzEhDSIzKUAMBAgrKT8dF2oDtURIBS1TdkA5eYB%2FslVVsn%2BAeTlAdlMtBUgtJjY1JiY1NiZvTRc4SjQxDwcOPCouGBgwKEALBAkpKkQqMhNPbQACADn%2F8gR3BL4AFwAuAAAAMh8BFhUUBg8BJi8BNycBFwcvASY0NwEDNxYfARYUBwEGIi8BJjQ%2FARYfAQcXAQKru0KNQjgiHR8uEl%2F3%2FnvUaRONQkIBGxJpCgmNQkL%2B5UK6Qo1CQjcdLhJf9wGFBL5CjUJeKmsiHTUuEl%2F4%2FnvUahKNQrpCARv%2BRmkICY1CukL%2B5UJCjUK7Qjc3LxFf%2BAGFAAAAAAMAyAAAA%2BgEsAARABUAHQAAADIeAhURFAYjISImNRE0PgEHESERACIGFBYyNjQCBqqaZDo7Kf2oKTs8Zj4CWP7%2FVj09Vj0EsB4uMhX8Ryk7OykDuRUzLar9RAK8%2FRY9Vj09VgABAAAAAASwBLAAFgAACQEWFAYiLwEBEScBBRMBJyEBJyY0NjIDhgEbDx0qDiT%2B6dT%2BzP7oywEz0gEsAQsjDx0qBKH%2B5g8qHQ8j%2FvX%2B1NL%2BzcsBGAE01AEXJA4qHQAAAAADAScAEQQJBOAAMgBAAEsAAAEVHgQXIy4DJxEXHgQVFAYHFSM1JicuASczHgEXEScuBDU0PgI3NRkBDgMVFB4DFxYXET4ENC4CArwmRVI8LAKfBA0dMydAIjxQNyiym2SWVygZA4sFV0obLkJOMCAyVWg6HSoqFQ4TJhkZCWgWKTEiGBkzNwTgTgUTLD9pQiQuLBsH%2Fs0NBxMtPGQ%2Bi6oMTU8QVyhrVk1iEAFPCA4ZLzlYNkZwSCoGTf4SARIEDh02Jh0rGRQIBgPQ%2FsoCCRYgNEM0JRkAAAABAGQAZgOUBK0ASgAAATIeARUjNC4CIyIGBwYVFB4BFxYXMxUjFgYHBgc%2BATM2FjMyNxcOAyMiLgEHDgEPASc%2BBTc%2BAScjNTMmJy4CPgE3NgIxVJlemSc8OxolVBQpGxoYBgPxxQgVFS02ImIWIIwiUzUyHzY4HCAXanQmJ1YYFzcEGAcTDBEJMAwk3aYXFQcKAg4tJGEErVCLTig%2FIhIdFSw5GkowKgkFZDKCHj4yCg8BIh6TExcIASIfBAMaDAuRAxAFDQsRCjePR2QvORQrREFMIVgAAAACABn%2F%2FwSXBLAADwAfAAABMzIWDwEGIi8BJjY7AREzBRcWBisBESMRIyImPwE2MgGQlhUIDuYOKg7mDggVlsgCF%2BYOCBWWyJYVCA7mDioBLBYO%2Bg8P%2Bg4WA4QQ%2BQ4V%2FHwDhBUO%2BQ8AAAQAGf%2F%2FA%2BgEsAAHABcAGwAlAAABIzUjFSMRIQEzMhYPAQYiLwEmNjsBETMFFTM1EwczFSE1NyM1IQPoZGRkASz9qJYVCA7mDioO5g4IFZbIAZFkY8jI%2FtTIyAEsArxkZAH0%2FHwWDvoPD%2FoOFgOEZMjI%2FRL6ZJb6ZAAAAAAEABn%2F%2FwPoBLAADwAZACEAJQAAATMyFg8BBiIvASY2OwERMwUHMxUhNTcjNSERIzUjFSMRIQcVMzUBkJYVCA7mDioO5g4IFZbIAljIyP7UyMgBLGRkZAEsx2QBLBYO%2Bg8P%2Bg4WA4SW%2BmSW%2BmT7UGRkAfRkyMgAAAAEABn%2F%2FwRMBLAADwAVABsAHwAAATMyFg8BBiIvASY2OwERMwEjESM1MxMjNSMRIQcVMzUBkJYVCA7mDioO5g4IFZbIAlhkZMhkZMgBLMdkASwWDvoPD%2FoOFgOE%2FgwBkGT7UGQBkGTIyAAAAAAEABn%2F%2FwRMBLAADwAVABkAHwAAATMyFg8BBiIvASY2OwERMwEjNSMRIQcVMzUDIxEjNTMBkJYVCA7mDioO5g4IFZbIArxkyAEsx2QBZGTIASwWDvoPD%2FoOFgOE%2FgxkAZBkyMj7tAGQZAAAAAAFABn%2F%2FwSwBLAADwATABcAGwAfAAABMzIWDwEGIi8BJjY7AREzBSM1MxMhNSETITUhEyE1IQGQlhUIDuYOKg7mDggVlsgB9MjIZP7UASxk%2FnABkGT%2BDAH0ASwWDvoPD%2FoOFgOEyMj%2BDMj%2BDMj%2BDMgABQAZ%2F%2F8EsASwAA8AEwAXABsAHwAAATMyFg8BBiIvASY2OwERMwUhNSEDITUhAyE1IQMjNTMBkJYVCA7mDioO5g4IFZbIAyD%2BDAH0ZP5wAZBk%2FtQBLGTIyAEsFg76Dw%2F6DhYDhMjI%2FgzI%2FgzI%2FgzIAAIAAAAABEwETAAPAB8AAAEhMhYVERQGIyEiJjURNDYFISIGFREUFjMhMjY1ETQmAV4BkKK8u6P%2BcKW5uQJn%2FgwpOzspAfQpOzsETLuj%2FnClubmlAZClucg7Kf4MKTs7KQH0KTsAAAAAAwAAAAAETARMAA8AHwArAAABITIWFREUBiMhIiY1ETQ2BSEiBhURFBYzITI2NRE0JgUXFhQPAQYmNRE0NgFeAZClubml%2FnCju7wCZP4MKTs7KQH0KTs7%2Fm%2F9ERH9EBgYBEy5pf5wpbm5pQGQo7vIOyn%2BDCk7OykB9Ck7gr4MJAy%2BDAsVAZAVCwAAAAADAAAAAARMBEwADwAfACsAAAEhMhYVERQGIyEiJjURNDYFISIGFREUFjMhMjY1ETQmBSEyFg8BBiIvASY2AV4BkKO7uaX%2BcKW5uQJn%2FgwpOzspAfQpOzv%2BFQGQFQsMvgwkDL4MCwRMvKL%2BcKW5uaUBkKO7yDsp%2FgwpOzspAfQpO8gYEP0REf0QGAAAAAMAAAAABEwETAAPAB8AKwAAASEyFhURFAYjISImNRE0NgUhIgYVERQWMyEyNjURNCYFFxYGIyEiJj8BNjIBXgGQpbm5pf5wo7u5Amf%2BDCk7OykB9Ck7O%2F77vgwLFf5wFQsMvgwkBEy5pf5wo7u8ogGQpbnIOyn%2BDCk7OykB9Ck7z%2F0QGBgQ%2FREAAAAAAgAAAAAFFARMAB8ANQAAASEyFhURFAYjISImPQE0NjMhMjY1ETQmIyEiJj0BNDYHARYUBwEGJj0BIyImPQE0NjsBNTQ2AiYBkKW5uaX%2BcBUdHRUBwik7Oyn%2BPhUdHb8BRBAQ%2FrwQFvoVHR0V%2BhYETLml%2FnCluR0VZBUdOykB9Ck7HRVkFR3p%2FuQOJg7%2B5A4KFZYdFcgVHZYVCgAAAQDZAAID1wSeACMAAAEXFgcGAgclMhYHIggBBwYrAScmNz4BPwEhIicmNzYANjc2MwMZCQgDA5gCASwYEQ4B%2Fvf%2B8wQMDgkJCQUCUCcn%2FtIXCAoQSwENuwUJEASeCQoRC%2F5TBwEjEv7K%2FsUFDwgLFQnlbm4TFRRWAS%2FTBhAAAAACAAAAAAT%2BBEwAHwA1AAABITIWHQEUBiMhIgYVERQWMyEyFh0BFAYjISImNRE0NgUBFhQHAQYmPQEjIiY9ATQ2OwE1NDYBXgGQFR0dFf4%2BKTs7KQHCFR0dFf5wpbm5AvEBRBAQ%2FrwQFvoVHR0V%2BhYETB0VZBUdOyn%2BDCk7HRVkFR25pQGQpbnp%2FuQOJg7%2B5A4KFZYdFcgVHZYVCgACAAAAAASwBLAAFQAxAAABITIWFREUBi8BAQYiLwEmNDcBJyY2ASMiBhURFBYzITI2PQE3ERQGIyEiJjURNDYzIQLuAZAVHRUObf7IDykPjQ8PAThtDgj%2B75wpOzspAfQpO8i7o%2F5wpbm5pQEsBLAdFf5wFQgObf7IDw%2BNDykPAThtDhX%2B1Dsp%2FgwpOzsplMj%2B1qW5uaUBkKW5AAADAA4ADgSiBKIADwAbACMAAAAyHgIUDgIiLgI0PgEEIg4BFB4BMj4BNCYEMhYUBiImNAHh7tmdXV2d2e7ZnV1dnQHD5sJxccLmwnFx%2FnugcnKgcgSiXZ3Z7tmdXV2d2e7ZnUdxwubCcXHC5sJzcqBycqAAAAMAAAAABEwEsAAVAB8AIwAAATMyFhURMzIWBwEGIicBJjY7ARE0NgEhMhYdASE1NDYFFTM1AcLIFR31FAoO%2FoEOJw3%2BhQ0JFfod%2FoUD6BUd%2B7QdA2dkBLAdFf6iFg%2F%2BVg8PAaoPFgFeFR38fB0V%2BvoVHWQyMgAAAAMAAAAABEwErAAVAB8AIwAACQEWBisBFRQGKwEiJj0BIyImNwE%2BAQEhMhYdASE1NDYFFTM1AkcBeg4KFfQiFsgUGPoUCw4Bfw4n%2FfkD6BUd%2B7QdA2dkBJ7%2BTQ8g%2BhQeHRX6IQ8BrxAC%2FH8dFfr6FR1kMjIAAwAAAAAETARLABQAHgAiAAAJATYyHwEWFAcBBiInASY0PwE2MhcDITIWHQEhNTQ2BRUzNQGMAXEHFQeLBwf98wcVB%2F7cBweLCBUH1APoFR37tB0DZ2QC0wFxBweLCBUH%2FfMICAEjCBQIiwcH%2FdIdFfr6FR1kMjIABAAAAAAETASbAAkAGQAjACcAABM3NjIfAQcnJjQFNzYWFQMOASMFIiY%2FASc3ASEyFh0BITU0NgUVMzWHjg4qDk3UTQ4CFtIOFQIBHRX9qxUIDtCa1P49A%2BgVHfu0HQNnZAP%2Fjg4OTdRMDyqa0g4IFf2pFB4BFQ7Qm9T9Oh0V%2BvoVHWQyMgAAAAQAAAAABEwEsAAPABkAIwAnAAABBR4BFRMUBi8BByc3JyY2EwcGIi8BJjQ%2FAQEhMhYdASE1NDYFFTM1AV4CVxQeARUO0JvUm9IOCMNMDyoOjg4OTf76A%2BgVHfu0HQNnZASwAgEdFf2rFQgO0JrUmtIOFf1QTQ4Ojg4qDk3%2BWB0V%2BvoVHWQyMgACAAT%2F7ASwBK8ABQAIAAAlCQERIQkBFQEEsP4d%2Fsb%2BcQSs%2FTMCq2cBFP5xAacDHPz55gO5AAAAAAIAAABkBEwEsAAVABkAAAERFAYrAREhESMiJjURNDY7AREhETMHIzUzBEwdFZb9RJYVHR0V%2BgH0ZMhkZAPo%2FK4VHQGQ%2FnAdFQPoFB7%2B1AEsyMgAAAMAAABFBN0EsAAWABoALwAAAQcBJyYiDwEhESMiJjURNDY7AREhETMHIzUzARcWFAcBBiIvASY0PwE2Mh8BATYyBEwC%2FtVfCRkJlf7IlhUdHRX6AfRkyGRkAbBqBwf%2BXAgUCMoICGoHFQdPASkHFQPolf7VXwkJk%2F5wHRUD6BQe%2FtQBLMjI%2Fc5qBxUH%2FlsHB8sHFQdqCAhPASkHAAMAAAANBQcEsAAWABoAPgAAAREHJy4BBwEhESMiJjURNDY7AREhETMHIzUzARcWFA8BFxYUDwEGIi8BBwYiLwEmND8BJyY0PwE2Mh8BNzYyBExnhg8lEP72%2FreWFR0dFfoB9GTIZGQB9kYPD4ODDw9GDykPg4MPKQ9GDw%2BDgw8PRg8pD4ODDykD6P7zZ4YPAw7%2B9v5wHRUD6BQe%2FtQBLMjI%2FYxGDykPg4MPKQ9GDw%2BDgw8PRg8pD4ODDykPRg8Pg4MPAAADAAAAFQSXBLAAFQAZAC8AAAERISIGHQEhESMiJjURNDY7AREhETMHIzUzEzMyFh0BMzIWDwEGIi8BJjY7ATU0NgRM%2FqIVHf4MlhUdHRX6AfRkyGRklmQVHZYVCA7mDioO5g4IFZYdA%2Bj%2B1B0Vlv5wHRUD6BQe%2FtQBLMjI%2FagdFfoVDuYODuYOFfoVHQAAAAADAAAAAASXBLAAFQAZAC8AAAERJyYiBwEhESMiJjURNDY7AREhETMHIzUzExcWBisBFRQGKwEiJj0BIyImPwE2MgRMpQ4qDv75%2Fm6WFR0dFfoB9GTIZGTr5g4IFZYdFWQVHZYVCA7mDioD6P5wpQ8P%2Fvf%2BcB0VA%2BgUHv7UASzIyP2F5Q8V%2BhQeHhT6FQ%2FlDwADAAAAyASwBEwACQATABcAABMhMhYdASE1NDYBERQGIyEiJjURExUhNTIETBUd%2B1AdBJMdFfu0FR1kAZAETB0VlpYVHf7U%2FdoVHR0VAib%2B1MjIAAAGAAMAfQStBJcADwAZAB0ALQAxADsAAAEXFhQPAQYmPQEhNSE1NDYBIyImPQE0NjsBFyM1MwE3NhYdASEVIRUUBi8BJjQFIzU7AjIWHQEUBisBA6f4Dg74DhX%2BcAGQFf0vMhUdHRUyyGRk%2FoL3DhUBkP5wFQ73DwOBZGRkMxQdHRQzBI3mDioO5g4IFZbIlhUI%2FoUdFWQVHcjI%2FcvmDggVlsiWFQgO5g4qecgdFWQVHQAAAAACAGQAAASwBLAAFgBRAAABJTYWFREUBisBIiY1ES4ENRE0NiUyFh8BERQOAg8BERQGKwEiJjURLgQ1ETQ%2BAzMyFh8BETMRPAE%2BAjMyFh8BETMRND4DA14BFBklHRXIFR0EDiIaFiX%2B4RYZAgEVHR0LCh0VyBUdBA4iGhYBBwoTDRQZAgNkBQkVDxcZAQFkAQUJFQQxdBIUH%2FuuFR0dFQGNAQgbHzUeAWcfRJEZDA3%2BPhw%2FMSkLC%2F5BFR0dFQG%2FBA8uLkAcAcICBxENCxkMDf6iAV4CBxENCxkMDf6iAV4CBxENCwABAGQAAASwBEwAMwAAARUiDgMVERQWHwEVITUyNjURIREUFjMVITUyPgM1ETQmLwE1IRUiBhURIRE0JiM1BLAEDiIaFjIZGf5wSxn%2BDBlL%2FnAEDiIaFjIZGQGQSxkB9BlLBEw4AQUKFA78iBYZAQI4OA0lAYr%2BdiUNODgBBQoUDgN4FhkBAjg4DSX%2BdgGKJQ04AAAABgAAAAAETARMAAwAHAAgACQAKAA0AAABITIWHQEjBTUnITchBSEyFhURFAYjISImNRE0NhcVITUBBTUlBRUhNQUVFAYjIQchJyE3MwKjAXcVHWn%2B2cj%2BcGQBd%2F4lASwpOzsp%2FtQpOzspASwCvP5wAZD8GAEsArwdFf6JZP6JZAGQyGkD6B0VlmJiyGTIOyn%2BDCk7OykB9Ck7ZMjI%2FveFo4XGyMhm%2BBUdZGTIAAEAEAAQBJ8EnwAmAAATNzYWHwEWBg8BHgEXNz4BHwEeAQ8BBiIuBicuBTcRohEuDosOBhF3ZvyNdxEzE8ATBxGjAw0uMUxPZWZ4O0p3RjITCwED76IRBhPCFDERdo78ZXYRBA6IDi8RogEECBUgNUNjO0qZfHNVQBAAAAACAAAAAASwBEwAIwBBAAAAMh4EHwEVFAYvAS4BPQEmIAcVFAYPAQYmPQE%2BBRIyHgIfARUBHgEdARQGIyEiJj0BNDY3ATU0PgIB%2FLimdWQ%2FLAkJHRTKFB2N%2FsKNHRTKFB0DDTE7ZnTKcFImFgEBAW0OFR0V%2B7QVHRUOAW0CFiYETBUhKCgiCgrIFRgDIgMiFZIYGJIVIgMiAxgVyAQNJyQrIP7kExwcCgoy%2FtEPMhTUFR0dFdQUMg8BLzIEDSEZAAADAAAAAASwBLAADQAdACcAAAEHIScRMxUzNTMVMzUzASEyFhQGKwEXITcjIiY0NgMhMhYdASE1NDYETMj9qMjIyMjIyPyuArwVHR0VDIn8SokMFR0dswRMFR37UB0CvMjIAfTIyMjI%2FOAdKh1kZB0qHf7UHRUyMhUdAAAAAwBkAAAEsARMAAkAEwAdAAABIyIGFREhETQmASMiBhURIRE0JgEhETQ2OwEyFhUCvGQpOwEsOwFnZCk7ASw7%2FRv%2B1DspZCk7BEw7KfwYA%2BgpO%2F7UOyn9RAK8KTv84AGQKTs7KQAAAAAF%2F5wAAASwBEwADwATAB8AJQApAAATITIWFREUBiMhIiY1ETQ2FxEhEQUjFTMRITUzNSMRIQURByMRMwcRMxHIArx8sLB8%2FUR8sLAYA4T%2BDMjI%2FtTIyAEsAZBkyMhkZARMsHz%2BDHywsHwB9HywyP1EArzIZP7UZGQBLGT%2B1GQB9GT%2B1AEsAAAABf%2BcAAAEsARMAA8AEwAfACUAKQAAEyEyFhURFAYjISImNRE0NhcRIREBIzUjFSMRMxUzNTMFEQcjETMHETMRyAK8fLCwfP1EfLCwGAOE%2FgxkZGRkZGQBkGTIyGRkBEywfP4MfLCwfAH0fLDI%2FUQCvP2oyMgB9MjIZP7UZAH0ZP7UASwABP%2BcAAAEsARMAA8AEwAbACMAABMhMhYVERQGIyEiJjURNDYXESERBSMRMxUhESEFIxEzFSERIcgCvHywsHz9RHywsBgDhP4MyMj%2B1AEsAZDIyP7UASwETLB8%2Fgx8sLB8AfR8sMj9RAK8yP7UZAH0ZP7UZAH0AAAABP%2BcAAAEsARMAA8AEwAWABkAABMhMhYVERQGIyEiJjURNDYXESERAS0BDQERyAK8fLCwfP1EfLCwGAOE%2Fgz%2B1AEsAZD%2B1ARMsHz%2BDHywsHwB9HywyP1EArz%2BDJaWlpYBLAAAAAX%2FnAAABLAETAAPABMAFwAgACkAABMhMhYVERQGIyEiJjURNDYXESERAyERIQcjIgYVFBY7AQERMzI2NTQmI8gCvHywsHz9RHywsBgDhGT9RAK8ZIImOTYpgv4Mgik2OSYETLB8%2Fgx8sLB8AfR8sMj9RAK8%2FagB9GRWQUFUASz%2B1FRBQVYAAAAF%2F5wAAASwBEwADwATAB8AJQApAAATITIWFREUBiMhIiY1ETQ2FxEhEQUjFTMRITUzNSMRIQEjESM1MwMjNTPIArx8sLB8%2FUR8sLAYA4T%2BDMjI%2FtTIyAEsAZBkZMjIZGQETLB8%2Fgx8sLB8AfR8sMj9RAK8yGT%2B1GRkASz%2BDAGQZP4MZAAG%2F5wAAASwBEwADwATABkAHwAjACcAABMhMhYVERQGIyEiJjURNDYXESERBTMRIREzASMRIzUzBRUzNQEjNTPIArx8sLB8%2FUR8sLAYA4T9RMj%2B1GQCWGRkyP2oZAEsZGQETLB8%2Fgx8sLB8AfR8sMj9RAK8yP5wAfT%2BDAGQZMjIyP7UZAAF%2F5wAAASwBEwADwATABwAIgAmAAATITIWFREUBiMhIiY1ETQ2FxEhEQEHIzU3NSM1IQEjESM1MwMjNTPIArx8sLB8%2FUR8sLAYA4T%2BDMdkx8gBLAGQZGTIx2RkBEywfP4MfLCwfAH0fLDI%2FUQCvP5wyDLIlmT%2BDAGQZP4MZAAAAAMACQAJBKcEpwAPABsAJQAAADIeAhQOAiIuAjQ%2BAQQiDgEUHgEyPgE0JgchFSEVISc1NyEB4PDbnl5entvw255eXp4BxeTCcXHC5MJxcWz%2B1AEs%2FtRkZAEsBKdentvw255eXp7b8NueTHHC5MJxccLkwtDIZGTIZAAAAAAEAAkACQSnBKcADwAbACcAKwAAADIeAhQOAiIuAjQ%2BAQQiDgEUHgEyPgE0JgcVBxcVIycjFSMRIQcVMzUB4PDbnl5entvw255eXp4BxeTCcXHC5MJxcWwyZGRklmQBLMjIBKdentvw255eXp7b8NueTHHC5MJxccLkwtBkMmQyZGQBkGRkZAAAAv%2Fy%2F50EwgRBACAANgAAATIWFzYzMhYUBisBNTQmIyEiBh0BIyImNTQ2NyY1ND4BEzMyFhURMzIWDwEGIi8BJjY7ARE0NgH3brUsLC54qqp4gB0V%2FtQVHd5QcFZBAmKqepYKD4kVCg3fDSYN3w0KFYkPBEF3YQ6t8a36FR0dFfpzT0VrDhMSZKpi%2FbMPCv7tFxD0EBD0EBcBEwoPAAAAAAL%2F8v%2BcBMMEQQAcADMAAAEyFhc2MzIWFxQGBwEmIgcBIyImNTQ2NyY1ND4BExcWBisBERQGKwEiJjURIyImNzY3NjIB9m62LCsueaoBeFr%2Bhg0lDf6DCU9xVkECYqnm3w0KFYkPCpYKD4kVCg3HGBMZBEF3YQ%2BteGOkHAFoEBD%2Bk3NPRWsOExNkqWP9kuQQF%2F7tCg8PCgETFxDMGBMAAAABAGQAAARMBG0AGAAAJTUhATMBMwkBMwEzASEVIyIGHQEhNTQmIwK8AZD%2B8qr%2B8qr%2B1P7Uqv7yqv7yAZAyFR0BkB0VZGQBLAEsAU3%2Bs%2F7U%2FtRkHRUyMhUdAAAAAAEAeQAABDcEmwAvAAABMhYXHgEVFAYHFhUUBiMiJxUyFh0BITU0NjM1BiMiJjU0Ny4BNTQ2MzIXNCY1NDYCWF6TGll7OzIJaUo3LRUd%2FtQdFS03SmkELzlpSgUSAqMEm3FZBoNaPWcfHRpKaR77HRUyMhUd%2Bx5pShIUFVg1SmkCAhAFdKMAAAAGACcAFASJBJwAEQAqAEIASgBiAHsAAAEWEgIHDgEiJicmAhI3PgEyFgUiBw4BBwYWHwEWMzI3Njc2Nz4BLwEmJyYXIgcOAQcGFh8BFjMyNz4BNz4BLwEmJyYWJiIGFBYyNjciBw4BBw4BHwEWFxYzMjc%2BATc2Ji8BJhciBwYHBgcOAR8BFhcWMzI3PgE3NiYvASYD8m9PT29T2dzZU29PT29T2dzZ%2Fj0EBHmxIgQNDCQDBBcGG0dGYAsNAwkDCwccBAVQdRgEDA0iBAQWBhJROQwMAwkDCwf5Y4xjY4xjVhYGElE6CwwDCQMLBwgEBVB1GAQNDCIEjRcGG0dGYAsNAwkDCwcIBAR5sSIEDQwkAwPyb%2F7V%2FtVvU1dXU28BKwErb1NXVxwBIrF5DBYDCQEWYEZHGwMVDCMNBgSRAhh1UA0WAwkBFTpREgMVCyMMBwT6Y2OMY2MVFTpREQQVCyMMBwQCGHVQDRYDCQEkFmBGRxsDFQwjDQYEASKxeQwWAwkBAAAABQBkAAAD6ASwAAwADwAWABwAIgAAASERIzUhFSERNDYzIQEjNQMzByczNTMDISImNREFFRQGKwECvAEstP6s%2FoQPCgI%2FASzIZKLU1KJktP51Cg8DhA8KwwMg%2FoTIyALzCg%2F%2B1Mj84NTUyP4MDwoBi8jDCg8AAAAABQBkAAAD6ASwAAkADAATABoAIQAAASERCQERNDYzIQEjNRMjFSM1IzcDISImPQEpARUUBisBNQK8ASz%2Bov3aDwoCPwEsyD6iZKLUqv6dCg8BfAIIDwqbAyD9%2BAFe%2FdoERwoP%2FtTI%2FHzIyNT%2BZA8KNzcKD1AAAAAAAwAAAAAEsAP0AAgAGQAfAAABIxUzFyERIzcFMzIeAhUhFSEDETM0PgIBMwMhASEEiqJkZP7UotT9EsgbGiEOASz9qMhkDiEaAnPw8PzgASwB9AMgyGQBLNTUBBErJGT%2BogHCJCsRBP5w%2FnAB9AAAAAMAAAAABEwETAAZADIAOQAAATMyFh0BMzIWHQEUBiMhIiY9ATQ2OwE1NDYFNTIWFREUBiMhIic3ARE0NjMVFBYzITI2AQc1IzUzNQKKZBUdMhUdHRX%2B1BUdHRUyHQFzKTs7Kf2oARP2%2Fro7KVg%2BASw%2BWP201MjIBEwdFTIdFWQVHR0VZBUdMhUd%2BpY7KfzgKTsE9gFGAUQpO5Y%2BWFj95tSiZKIAAwBkAAAEvARMABkANgA9AAABMzIWHQEzMhYdARQGIyEiJj0BNDY7ATU0NgU1MhYVESMRMxQOAiMhIiY1ETQ2MxUUFjMhMjYBBzUjNTM1AcJkFR0yFR0dFf7UFR0dFTIdAXMpO8jIDiEaG%2F2oKTs7KVg%2BASw%2BWAGc1MjIBEwdFTIdFWQVHR0VZBUdMhUd%2BpY7Kf4M%2FtQkKxEEOykDICk7lj5YWP3m1KJkogAAAAP%2FogAABRYE1AALABsAHwAACQEWBiMhIiY3ATYyEyMiBhcTHgE7ATI2NxM2JgMVMzUCkgJ9FyAs%2BwQsIBcCfRZARNAUGAQ6BCMUNhQjBDoEGODIBK37sCY3NyYEUCf%2BTB0U%2FtIUHR0UAS4UHf4MZGQAAAAACQAAAAAETARMAA8AHwAvAD8ATwBfAG8AfwCPAAABMzIWHQEUBisBIiY9ATQ2EzMyFh0BFAYrASImPQE0NiEzMhYdARQGKwEiJj0BNDYBMzIWHQEUBisBIiY9ATQ2ITMyFh0BFAYrASImPQE0NiEzMhYdARQGKwEiJj0BNDYBMzIWHQEUBisBIiY9ATQ2ITMyFh0BFAYrASImPQE0NiEzMhYdARQGKwEiJj0BNDYBqfoKDw8K%2BgoPDwr6Cg8PCvoKDw8BmvoKDw8K%2BgoPD%2Fzq%2BgoPDwr6Cg8PAZr6Cg8PCvoKDw8BmvoKDw8K%2BgoPD%2Fzq%2BgoPDwr6Cg8PAZr6Cg8PCvoKDw8BmvoKDw8K%2BgoPDwRMDwqWCg8PCpYKD%2F7UDwqWCg8PCpYKDw8KlgoPDwqWCg%2F%2B1A8KlgoPDwqWCg8PCpYKDw8KlgoPDwqWCg8PCpYKD%2F7UDwqWCg8PCpYKDw8KlgoPDwqWCg8PCpYKDw8KlgoPAAAAAwAAAAAEsAUUABkAKQAzAAABMxUjFSEyFg8BBgchJi8BJjYzITUjNTM1MwEhMhYUBisBFyE3IyImNDYDITIWHQEhNTQ2ArxkZAFePjEcQiko%2FPwoKUIcMT4BXmRkyP4%2BArwVHR0VDIn8SooNFR0dswRMFR37UB0EsMhkTzeEUzMzU4Q3T2TIZPx8HSodZGQdKh3%2B1B0VMjIVHQAABAAAAAAEsAUUAAUAGQArADUAAAAyFhUjNAchFhUUByEyFg8BIScmNjMhJjU0AyEyFhQGKwEVBSElNSMiJjQ2AyEyFh0BITU0NgIwUDnCPAE6EgMBSCkHIq%2F9WrIiCikBSAOvArwVHR0VlgET%2FEoBE5YVHR2zBEwVHftQHQUUOykpjSUmCBEhFpGRFiERCCb%2BlR0qHcjIyMgdKh39qB0VMjIVHQAEAAAAAASwBJ0ABwAUACQALgAAADIWFAYiJjQTMzIWFRQXITY1NDYzASEyFhQGKwEXITcjIiY0NgMhMhYdASE1NDYCDZZqapZqty4iKyf%2BvCcrI%2F7NArwVHR0VDYr8SokMFR0dswRMFR37UB0EnWqWamqW%2Fus5Okxra0w6Of5yHSodZGQdKh3%2B1B0VMjIVHQAEAAAAAASwBRQADwAcACwANgAAATIeARUUBiImNTQ3FzcnNhMzMhYVFBchNjU0NjMBITIWFAYrARchNyMiJjQ2AyEyFh0BITU0NgJYL1szb5xvIpBvoyIfLiIrJ%2F68Jysj%2Fs0CvBUdHRUNivxKiQwVHR2zBEwVHftQHQUUa4s2Tm9vTj5Rj2%2BjGv4KOTpMa2tMOjn%2Bch0qHWRkHSod%2FtQdFTIyFR0AAAADAAAAAASwBRIAEgAiACwAAAEFFSEUHgMXIS4BNTQ%2BAjcBITIWFAYrARchNyMiJjQ2AyEyFh0BITU0NgJYASz%2B1CU%2FP00T%2Fe48PUJtj0r%2BogK8FR0dFQ2K%2FEqJDBUdHbMETBUd%2B1AdBLChizlmUT9IGVO9VFShdksE%2FH4dKh1kZB0qHf7UHRUyMhUdAAIAyAAAA%2BgFFAAPACkAAAAyFh0BHgEdASE1NDY3NTQDITIWFyMVMxUjFTMVIxUzFAYjISImNRE0NgIvUjsuNv5wNi5kAZA2XBqsyMjIyMh1U%2F5wU3V1BRQ7KU4aXDYyMjZcGk4p%2Fkc2LmRkZGRkU3V1UwGQU3UAAAMAZP%2F%2FBEwETAAPAC8AMwAAEyEyFhURFAYjISImNRE0NgMhMhYdARQGIyEXFhQGIi8BIQcGIiY0PwEhIiY9ATQ2BQchJ5YDhBUdHRX8fBUdHQQDtgoPDwr%2B5eANGiUNWP30Vw0mGg3g%2Ft8KDw8BqmQBRGQETB0V%2FgwVHR0VAfQVHf1EDwoyCg%2FgDSUbDVhYDRslDeAPCjIKD2RkZAAAAAAEAAAAAASwBEwAGQAjAC0ANwAAEyEyFh0BIzQmKwEiBhUjNCYrASIGFSM1NDYDITIWFREhETQ2ExUUBisBIiY9ASEVFAYrASImPQHIAyBTdWQ7KfopO2Q7KfopO2R1EQPoKTv7UDvxHRVkFR0D6B0VZBUdBEx1U8gpOzspKTs7KchTdf4MOyn%2B1AEsKTv%2BDDIVHR0VMjIVHR0VMgADAAEAAASpBKwADQARABsAAAkBFhQPASEBJjQ3ATYyCQMDITIWHQEhNTQ2AeACqh8fg%2F4f%2FfsgIAEnH1n%2BrAFWAS%2F%2Bq6IDIBUd%2FHwdBI39VR9ZH4MCBh9ZHwEoH%2F5u%2FqoBMAFV%2FBsdFTIyFR0AAAAAAgCPAAAEIQSwABcALwAAAQMuASMhIgYHAwYWMyEVFBYyNj0BMzI2AyE1NDY7ATU0NjsBETMRMzIWHQEzMhYVBCG9CCcV%2FnAVJwi9CBMVAnEdKh19FROo%2Fa0dFTIdFTDILxUdMhUdAocB%2BhMcHBP%2BBhMclhUdHRWWHP2MMhUdMhUdASz%2B1B0VMh0VAAAEAAAAAASwBLAADQAQAB8AIgAAASERFAYjIREBNTQ2MyEBIzUBIREUBiMhIiY1ETQ2MyEBIzUDhAEsDwr%2Bif7UDwoBdwEsyP2oASwPCv12Cg8PCgF3ASzIAyD9wQoPAk8BLFQKD%2F7UyP4M%2FcEKDw8KA7YKD%2F7UyAAC%2F5wAZAUUBEcARgBWAAABMzIeAhcWFxY2NzYnJjc%2BARYXFgcOASsBDgEPAQ4BKwEiJj8BBisBIicHDgErASImPwEmLwEuAT0BNDY7ATY3JyY2OwE2BSMiBh0BFBY7ATI2PQE0JgHkw0uOakkMEhEfQwoKGRMKBQ8XDCkCA1Y9Pgc4HCcDIhVkFRgDDDEqwxgpCwMiFWQVGAMaVCyfExwdFXwLLW8QBxXLdAFF%2BgoPDwr6Cg8PBEdBa4pJDgYKISAiJRsQCAYIDCw9P1c3fCbqFB0dFEYOCEAUHR0UnUplNQcmFTIVHVdPXw4TZV8PCjIKDw8KMgoPAAb%2FnP%2FmBRQEfgAJACQANAA8AFIAYgAAASU2Fh8BFgYPASUzMhYfASEyFh0BFAYHBQYmJyYjISImPQE0NhcjIgYdARQ7ATI2NTQmJyYEIgYUFjI2NAE3PgEeARceAT8BFxYGDwEGJi8BJjYlBwYfAR4BPwE2Jy4BJy4BAoEBpxMuDiAOAxCL%2FCtqQ0geZgM3FR0cE%2F0fFyIJKjr%2B1D5YWLlQExIqhhALIAsSAYBALS1ALf4PmBIgHhMQHC0aPzANITNQL3wpgigJASlmHyElDR0RPRMFAhQHCxADhPcICxAmDyoNeMgiNtQdFTIVJgeEBBQPQ1g%2ByD5YrBwVODMQEAtEERzJLUAtLUD%2B24ITChESEyMgAwWzPUkrRSgJL5cvfRxYGyYrDwkLNRAhFEgJDAQAAAAAAwBkAAAEOQSwAFEAYABvAAABMzIWHQEeARcWDgIPATIeBRUUDgUjFRQGKwEiJj0BIxUUBisBIiY9ASMiJj0BNDY7AREjIiY9ATQ2OwE1NDY7ATIWHQEzNTQ2AxUhMj4CNTc0LgMjARUhMj4CNTc0LgMjAnGWCg9PaAEBIC4uEBEGEjQwOiodFyI2LUAjGg8KlgoPZA8KlgoPrwoPDwpLSwoPDwqvDwqWCg9kD9cBBxwpEwsBAQsTKRz%2B%2BQFrHCkTCwEBCxMpHASwDwptIW1KLk0tHwYGAw8UKDJOLTtdPCoVCwJLCg8PCktLCg8PCksPCpYKDwJYDwqWCg9LCg8PCktLCg%2F%2B1MgVHR0LCgQOIhoW%2FnDIFR0dCwoEDiIaFgAAAwAEAAIEsASuABcAKQAsAAATITIWFREUBg8BDgEjISImJy4CNRE0NgQiDgQPARchNy4FAyMT1AMMVnokEhIdgVL9xFKCHAgYKHoCIIx9VkcrHQYGnAIwnAIIIClJVSGdwwSuelb%2BYDO3QkJXd3ZYHFrFMwGgVnqZFyYtLSUMDPPzBQ8sKDEj%2FsIBBQACAMgAAAOEBRQADwAZAAABMzIWFREUBiMhIiY1ETQ2ARUUBisBIiY9AQHblmesVCn%2BPilUrAFINhWWFTYFFKxn%2FgwpVFQpAfRnrPwY4RU2NhXhAAACAMgAAAOEBRQADwAZAAABMxQWMxEUBiMhIiY1ETQ2ARUUBisBIiY9AQHbYLOWVCn%2BPilUrAFINhWWFTYFFJaz%2FkIpVFQpAfRnrPwY4RU2NhXhAAACAAAAFAUOBBoAFAAaAAAJASUHFRcVJwc1NzU0Jj4CPwEnCQEFJTUFJQUO%2FYL%2Bhk5klpZkAQEBBQQvkwKCAVz%2Bov6iAV4BXgL%2F%2FuWqPOCWx5SVyJb6BA0GCgYDKEEBG%2F1ipqaTpaUAAAMAZAH0BLADIAAHAA8AFwAAEjIWFAYiJjQkMhYUBiImNCQyFhQGIiY0vHxYWHxYAeh8WFh8WAHofFhYfFgDIFh8WFh8WFh8WFh8WFh8WFh8AAAAAAMBkAAAArwETAAHAA8AFwAAADIWFAYiJjQSMhYUBiImNBIyFhQGIiY0Aeh8WFh8WFh8WFh8WFh8WFh8WARMWHxYWHz%2ByFh8WFh8%2FshYfFhYfAAAAAMAZABkBEwETAAPAB8ALwAAEyEyFh0BFAYjISImPQE0NhMhMhYdARQGIyEiJj0BNDYTITIWHQEUBiMhIiY9ATQ2fQO2Cg8PCvxKCg8PCgO2Cg8PCvxKCg8PCgO2Cg8PCvxKCg8PBEwPCpYKDw8KlgoP%2FnAPCpYKDw8KlgoP%2FnAPCpYKDw8KlgoPAAAABAAAAAAEsASwAA8AHwAvADMAAAEhMhYVERQGIyEiJjURNDYFISIGFREUFjMhMjY1ETQmBSEyFhURFAYjISImNRE0NhcVITUBXgH0ory7o%2F4Mpbm5Asv9qCk7OykCWCk7O%2F2xAfQVHR0V%2FgwVHR1HAZAEsLuj%2FgylubmlAfSlucg7Kf2oKTs7KQJYKTtkHRX%2B1BUdHRUBLBUdZMjIAAAAAAEAZABkBLAETAA7AAATITIWFAYrARUzMhYUBisBFTMyFhQGKwEVMzIWFAYjISImNDY7ATUjIiY0NjsBNSMiJjQ2OwE1IyImNDaWA%2BgVHR0VMjIVHR0VMjIVHR0VMjIVHR0V%2FBgVHR0VMjIVHR0VMjIVHR0VMjIVHR0ETB0qHcgdKh3IHSodyB0qHR0qHcgdKh3IHSodyB0qHQAAAAYBLAAFA%2BgEowAHAA0AEwAZAB8AKgAAAR4BBgcuATYBMhYVIiYlFAYjNDYBMhYVIiYlFAYjNDYDFRQGIiY9ARYzMgKKVz8%2FV1c%2FP%2F75fLB8sAK8sHyw%2FcB8sHywArywfLCwHSodKAMRBKNDsrJCQrKy%2FsCwfLB8fLB8sP7UsHywfHywfLD%2B05AVHR0VjgQAAAH%2FtQDIBJQDgQBCAAABNzYXAR4BBw4BKwEyFRQOBCsBIhE0NyYiBxYVECsBIi4DNTQzIyImJyY2NwE2HwEeAQ4BLwEHIScHBi4BNgLpRRkUASoLCAYFGg8IAQQNGyc%2FKZK4ChRUFQu4jjBJJxkHAgcPGQYGCAsBKhQaTBQVCiMUM7YDe7YsFCMKFgNuEwYS%2FtkLHw8OEw0dNkY4MhwBIBgXBAQYF%2F7gKjxTQyMNEw4PHwoBKBIHEwUjKBYGDMHBDAUWKCMAAAAAAgAAAAAEsASwACUAQwAAASM0LgUrAREUFh8BFSE1Mj4DNREjIg4FFSMRIQEjNC4DKwERFBYXMxUjNTI1ESMiDgMVIzUhBLAyCAsZEyYYGcgyGRn%2BcAQOIhoWyBkYJhMZCwgyA%2Bj9RBkIChgQEWQZDQzIMmQREBgKCBkB9AOEFSAVDggDAfyuFhkBAmRkAQUJFQ4DUgEDCA4VIBUBLP0SDxMKBQH%2BVwsNATIyGQGpAQUKEw%2BWAAAAAAMAAAAABEwErgAdACAAMAAAATUiJy4BLwEBIwEGBw4BDwEVITUiJj8BIRcWBiMVARsBARUUBiMhIiY9ATQ2MyEyFgPoGR4OFgUE%2Ft9F%2FtQSFQkfCwsBETE7EkUBJT0NISf%2B7IZ5AbEdFfwYFR0dFQPoFR0BLDIgDiIKCwLr%2FQ4jFQkTBQUyMisusKYiQTIBhwFW%2Fqr942QVHR0VZBUdHQADAAAAAASwBLAADwBHAEoAABMhMhYVERQGIyEiJjURNDYFIyIHAQYHBgcGHQEUFjMhMjY9ATQmIyInJj8BIRcWBwYjIgYdARQWMyEyNj0BNCYnIicmJyMBJhMjEzIETBUdHRX7tBUdHQJGRg0F%2FtUREhImDAsJAREIDAwINxAKCj8BCjkLEQwYCAwMCAE5CAwLCBEZGQ8B%2FuAFDsVnBLAdFfu0FR0dFQRMFR1SDP0PIBMSEAUNMggMDAgyCAwXDhmjmR8YEQwIMggMDAgyBwwBGRskAuwM%2FgUBCAAABAAAAAAEsASwAAMAEwAjACcAAAEhNSEFITIWFREUBiMhIiY1ETQ2KQEyFhURFAYjISImNRE0NhcRIREEsPtQBLD7ggGQFR0dFf5wFR0dAm0BkBUdHRX%2BcBUdHUcBLARMZMgdFfx8FR0dFQOEFR0dFf5wFR0dFQGQFR1k%2FtQBLAAEAAAAAASwBLAADwAfACMAJwAAEyEyFhURFAYjISImNRE0NgEhMhYVERQGIyEiJjURNDYXESEREyE1ITIBkBUdHRX%2BcBUdHQJtAZAVHR0V%2FnAVHR1HASzI%2B1AEsASwHRX8fBUdHRUDhBUd%2FgwdFf5wFR0dFQGQFR1k%2FtQBLP2oZAAAAAACAAAAZASwA%2BgAJwArAAATITIWFREzNTQ2MyEyFh0BMxUjFRQGIyEiJj0BIxEUBiMhIiY1ETQ2AREhETIBkBUdZB0VAZAVHWRkHRX%2BcBUdZB0V%2FnAVHR0CnwEsA%2BgdFf6ilhUdHRWWZJYVHR0Vlv6iFR0dFQMgFR3%2B1P7UASwAAAQAAAAABLAEsAADABMAFwAnAAAzIxEzFyEyFhURFAYjISImNRE0NhcRIREBITIWFREUBiMhIiY1ETQ2ZGRklgGQFR0dFf5wFR0dRwEs%2FqIDhBUdHRX8fBUdHQSwZB0V%2FnAVHR0VAZAVHWT%2B1AEs%2FgwdFf5wFR0dFQGQFR0AAAAAAgBkAAAETASwACcAKwAAATMyFhURFAYrARUhMhYVERQGIyEiJjURNDYzITUjIiY1ETQ2OwE1MwcRIRECWJYVHR0VlgHCFR0dFfx8FR0dFQFelhUdHRWWZMgBLARMHRX%2BcBUdZB0V%2FnAVHR0VAZAVHWQdFQGQFR1kyP7UASwAAAAEAAAAAASwBLAAAwATABcAJwAAISMRMwUhMhYVERQGIyEiJjURNDYXESERASEyFhURFAYjISImNRE0NgSwZGT9dgGQFR0dFf5wFR0dRwEs%2FK4DhBUdHRX8fBUdHQSwZB0V%2FnAVHR0VAZAVHWT%2B1AEs%2FgwdFf5wFR0dFQGQFR0AAAEBLAAwA28EgAAPAAAJAQYjIiY1ETQ2MzIXARYUA2H%2BEhcSDhAQDhIXAe4OAjX%2BEhcbGQPoGRsX%2FhIOKgAAAAABAUEAMgOEBH4ACwAACQE2FhURFAYnASY0AU8B7h0qKh3%2BEg4CewHuHREp%2FBgpER0B7g4qAAAAAAEAMgFBBH4DhAALAAATITIWBwEGIicBJjZkA%2BgpER3%2BEg4qDv4SHREDhCod%2FhIODgHuHSoAAAAAAQAyASwEfgNvAAsAAAkBFgYjISImNwE2MgJ7Ae4dESn8GCkRHQHuDioDYf4SHSoqHQHuDgAAAAACAAgAAASwBCgABgAKAAABFQE1LQE1ASE1IQK8%2FUwBnf5jBKj84AMgAuW2%2Fr3dwcHd%2B9jIAAAAAAIAAABkBLAEsAALADEAAAEjFTMVIREzNSM1IQEzND4FOwERFAYPARUhNSIuAzURMzIeBRUzESEEsMjI%2FtTIyAEs%2B1AyCAsZEyYYGWQyGRkBkAQOIhoWZBkYJhMZCwgy%2FOADhGRkASxkZP4MFSAVDggDAf3aFhkBAmRkAQUJFQ4CJgEDCA4VIBUBLAAAAgAAAAAETAPoACUAMQAAASM0LgUrAREUFh8BFSE1Mj4DNREjIg4FFSMRIQEjFTMVIREzNSM1IQMgMggLGRMmGBlkMhkZ%2FnAEDiIaFmQZGCYTGQsIMgMgASzIyP7UyMgBLAK8FSAVDggDAf3aFhkCAWRkAQUJFQ4CJgEDCA4VIBUBLPzgZGQBLGRkAAABAMgAZgNyBEoAEgAAATMyFgcJARYGKwEiJwEmNDcBNgK9oBAKDP4wAdAMChCgDQr%2BKQcHAdcKBEoWDP4w%2FjAMFgkB1wgUCAHXCQAAAQE%2BAGYD6ARKABIAAAEzMhcBFhQHAQYrASImNwkBJjYBU6ANCgHXBwf%2BKQoNoBAKDAHQ%2FjAMCgRKCf4pCBQI%2FikJFgwB0AHQDBYAAAEAZgDIBEoDcgASAAAAFh0BFAcBBiInASY9ATQ2FwkBBDQWCf4pCBQI%2FikJFgwB0AHQA3cKEKANCv4pBwcB1woNoBAKDP4wAdAAAAABAGYBPgRKA%2BgAEgAACQEWHQEUBicJAQYmPQE0NwE2MgJqAdcJFgz%2BMP4wDBYJAdcIFAPh%2FikKDaAQCgwB0P4wDAoQoA0KAdcHAAAAAgDZ%2F%2FkEPQSwAAUAOgAAARQGIzQ2BTMyFh8BNjc%2BAh4EBgcOBgcGIiYjIgYiJy4DLwEuAT4EHgEXJyY2A%2BiwfLD%2BVmQVJgdPBQsiKFAzRyorDwURAQQSFyozTSwNOkkLDkc3EDlfNyYHBw8GDyUqPjdGMR%2BTDA0EsHywfLDIHBPCAQIGBwcFDx81S21DBxlLR1xKQhEFBQcHGWt0bCQjP2hJNyATBwMGBcASGAAAAAACAMgAFQOEBLAAFgAaAAATITIWFREUBisBEQcGJjURIyImNRE0NhcVITX6AlgVHR0Vlv8TGpYVHR2rASwEsB0V%2FnAVHf4MsgkQFQKKHRUBkBUdZGRkAAAAAgDIABkETASwAA4AEgAAEyEyFhURBRElIREjETQ2ARU3NfoC7ic9%2FUQCWP1EZB8BDWQEsFEs%2FFt1A7Z9%2FBgEARc0%2FV1kFGQAAQAAAAECTW%2FDBF9fDzz1AB8EsAAAAADQdnOXAAAAANB2c5f%2FUf%2BcBdwFFAAAAAgAAgAAAAAAAAABAAAFFP%2BFAAAFFP9R%2FtQF3AABAAAAAAAAAAAAAAAAAAAAowG4ACgAAAAAAZAAAASwAAAEsABkBLAAAASwAAAEsABwAooAAAUUAAACigAABRQAAAGxAAABRQAAANgAAADYAAAAogAAAQQAAABIAAABBAAAAUUAAASwAGQEsAB7BLAAyASwAMgB9AAABLD%2F8gSwAAAEsAAABLD%2F8ASwAAAEsAAOBLAACQSwAGQEsP%2FTBLD%2F0wSwAAAEsAAABLAAAASwAAAEsAAABLAAJgSwAG4EsAAXBLAAFwSwABcEsABkBLAAGgSwAGQEsAAMBLAAZASwABcEsP%2BcBLAAZASwABcEsAAXBLAAAASwABcEsAAXBLAAFwSwAGQEsAAABLAAZASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAZASwAMgEsAAABLAAAASwADUEsABkBLAAyASw%2F7UEsAAhBLAAAASwAAAEsAAABLAAAASwAAAEsP%2BcBLAAAASwAAAEsAAABLAA2wSwABcEsAB1BLAAAASwAAAEsAAABLAACgSwAMgEsAAABLAAnQSwAMgEsADIBLAAyASwAAAEsP%2F%2BBLABLASwAGQEsACIBLABOwSwABcEsAAXBLAAFwSwABcEsAAXBLAAFwSwAAAEsAAXBLAAFwSwABcEsAAXBLAAAASwALcEsAC3BLAAAASwAAAEsABJBLAAFwSwAAAEsAAABLAAXQSw%2F9wEsP%2FcBLD%2FnwSwAGQEsAAABLAAAASwAAAEsABkBLD%2F%2FwSwAAAEsP9RBLAABgSwAAAEsAAABLABRQSwAAEEsAAABLD%2FnASwAEoEsAAUBLAAAASwAAAEsAAABLD%2FnASwAGEEsP%2F9BLAAFgSwABYEsAAWBLAAFgSwABgEsAAABMQAAASwAGQAAAAAAAD%2F2ABkADkAyAAAAScAZAAZABkAGQAZABkAGQAZAAAAAAAAAAAAAADZAAAAAAAOAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAMAZABkAAAAEAAAAAAAZP%2Bc%2F5z%2FnP%2Bc%2F5z%2FnP%2Bc%2F5wACQAJ%2F%2FL%2F8gBkAHkAJwBkAGQAAAAAAGT%2FogAAAAAAAAAAAAAAAADIAGQAAAABAI8AAP%2Bc%2F5wAZAAEAMgAyAAAAGQBkABkAAAAZAEs%2F7UAAAAAAAAAAAAAAAAAAABkAAABLAFBADIAMgAIAAAAAADIAT4AZgBmANkAyADIAAAAKgAqACoAKgCyAOgA6AFOAU4BTgFOAU4BTgFOAU4BTgFOAU4BTgFOAU4BpAIGAiICfgKGAqwC5ANGA24DjAPEBAgEMgRiBKIE3AVcBboGcgb0ByAHYgfKCB4IYgi%2BCTYJhAm2Cd4KKApMCpQK4gswC4oLygwIDFgNKg1eDbAODg5oDrQPKA%2BmD%2BYQEhBUEJAQqhEqEXYRthIKEjgSfBLAExoTdBPQFCoU1BU8FagVzBYEFjYWYBawFv4XUhemGAIYLhhqGJYYsBjgGP4ZKBloGZQZxBnaGe4aNhpoGrga9hteG7QcMhyUHOIdHB1EHWwdlB28HeYeLh52HsAfYh%2FSIEYgviEyIXYhuCJAIpYiuCMOIyIjOCN6I8Ij4CQCJDAkXiSWJOIlNCVgJbwmFCZ%2BJuYnUCe8J%2FgoNChwKKwpoCnMKiYqSiqEKworeiwILGgsuizsLRwtiC30LiguZi6iLtgvDi9GL34vsi%2F4MD4whDDSMRIxYDGuMegyJDJeMpoy3jMiMz4zaDO2NBg0YDSoNNI1LDWeNeg2PjZ8Ntw3GjdON5I31DgQOEI4hjjIOQo5SjmIOcw6HDpsOpo63jugO9w8GDxQPKI8%2BD0yPew%2BOj6MPtQ%2FKD9uP6o%2F%2BkBIQIBAxkECQX5CGEKoQu5DGENCQ3ZDoEPKRBBEYESuRPZFWkW2RgZGdEa0RvZHNkd2R7ZH9kgWSDJITkhqSIZIzEkSSThJXkmESapKAkouSlIAAQAAARcApwARAAAAAAACAAAAAQABAAAAQAAuAAAAAAAAABAAxgABAAAAAAATABIAAAADAAEECQAAAGoAEgADAAEECQABACgAfAADAAEECQACAA4ApAADAAEECQADAEwAsgADAAEECQAEADgA%2FgADAAEECQAFAHgBNgADAAEECQAGADYBrgADAAEECQAIABYB5AADAAEECQAJABYB%2BgADAAEECQALACQCEAADAAEECQAMACQCNAADAAEECQATACQCWAADAAEECQDIABYCfAADAAEECQDJADACkgADAAEECdkDABoCwnd3dy5nbHlwaGljb25zLmNvbQBDAG8AcAB5AHIAaQBnAGgAdAAgAKkAIAAyADAAMQA0ACAAYgB5ACAASgBhAG4AIABLAG8AdgBhAHIAaQBrAC4AIABBAGwAbAAgAHIAaQBnAGgAdABzACAAcgBlAHMAZQByAHYAZQBkAC4ARwBMAFkAUABIAEkAQwBPAE4AUwAgAEgAYQBsAGYAbABpAG4AZwBzAFIAZQBnAHUAbABhAHIAMQAuADAAMAA5ADsAVQBLAFcATgA7AEcATABZAFAASABJAEMATwBOAFMASABhAGwAZgBsAGkAbgBnAHMALQBSAGUAZwB1AGwAYQByAEcATABZAFAASABJAEMATwBOAFMAIABIAGEAbABmAGwAaQBuAGcAcwAgAFIAZQBnAHUAbABhAHIAVgBlAHIAcwBpAG8AbgAgADEALgAwADAAOQA7AFAAUwAgADAAMAAxAC4AMAAwADkAOwBoAG8AdABjAG8AbgB2ACAAMQAuADAALgA3ADAAOwBtAGEAawBlAG8AdABmAC4AbABpAGIAMgAuADUALgA1ADgAMwAyADkARwBMAFkAUABIAEkAQwBPAE4AUwBIAGEAbABmAGwAaQBuAGcAcwAtAFIAZQBnAHUAbABhAHIASgBhAG4AIABLAG8AdgBhAHIAaQBrAEoAYQBuACAASwBvAHYAYQByAGkAawB3AHcAdwAuAGcAbAB5AHAAaABpAGMAbwBuAHMALgBjAG8AbQB3AHcAdwAuAGcAbAB5AHAAaABpAGMAbwBuAHMALgBjAG8AbQB3AHcAdwAuAGcAbAB5AHAAaABpAGMAbwBuAHMALgBjAG8AbQBXAGUAYgBmAG8AbgB0ACAAMQAuADAAVwBlAGQAIABPAGMAdAAgADIAOQAgADAANgA6ADMANgA6ADAANwAgADIAMAAxADQARgBvAG4AdAAgAFMAcQB1AGkAcgByAGUAbAAAAAIAAAAAAAD%2FtQAyAAAAAAAAAAAAAAAAAAAAAAAAAAABFwAAAQIBAwADAA0ADgEEAJYBBQEGAQcBCAEJAQoBCwEMAQ0BDgEPARABEQESARMA7wEUARUBFgEXARgBGQEaARsBHAEdAR4BHwEgASEBIgEjASQBJQEmAScBKAEpASoBKwEsAS0BLgEvATABMQEyATMBNAE1ATYBNwE4ATkBOgE7ATwBPQE%2BAT8BQAFBAUIBQwFEAUUBRgFHAUgBSQFKAUsBTAFNAU4BTwFQAVEBUgFTAVQBVQFWAVcBWAFZAVoBWwFcAV0BXgFfAWABYQFiAWMBZAFlAWYBZwFoAWkBagFrAWwBbQFuAW8BcAFxAXIBcwF0AXUBdgF3AXgBeQF6AXsBfAF9AX4BfwGAAYEBggGDAYQBhQGGAYcBiAGJAYoBiwGMAY0BjgGPAZABkQGSAZMBlAGVAZYBlwGYAZkBmgGbAZwBnQGeAZ8BoAGhAaIBowGkAaUBpgGnAagBqQGqAasBrAGtAa4BrwGwAbEBsgGzAbQBtQG2AbcBuAG5AboBuwG8Ab0BvgG%2FAcABwQHCAcMBxAHFAcYBxwHIAckBygHLAcwBzQHOAc8B0AHRAdIB0wHUAdUB1gHXAdgB2QHaAdsB3AHdAd4B3wHgAeEB4gHjAeQB5QHmAecB6AHpAeoB6wHsAe0B7gHvAfAB8QHyAfMB9AH1AfYB9wH4AfkB%2BgH7AfwB%2FQH%2BAf8CAAIBAgICAwIEAgUCBgIHAggCCQIKAgsCDAINAg4CDwIQAhECEgZnbHlwaDEGZ2x5cGgyB3VuaTAwQTAHdW5pMjAwMAd1bmkyMDAxB3VuaTIwMDIHdW5pMjAwMwd1bmkyMDA0B3VuaTIwMDUHdW5pMjAwNgd1bmkyMDA3B3VuaTIwMDgHdW5pMjAwOQd1bmkyMDBBB3VuaTIwMkYHdW5pMjA1RgRFdXJvB3VuaTIwQkQHdW5pMjMxQgd1bmkyNUZDB3VuaTI2MDEHdW5pMjZGQQd1bmkyNzA5B3VuaTI3MEYHdW5pRTAwMQd1bmlFMDAyB3VuaUUwMDMHdW5pRTAwNQd1bmlFMDA2B3VuaUUwMDcHdW5pRTAwOAd1bmlFMDA5B3VuaUUwMTAHdW5pRTAxMQd1bmlFMDEyB3VuaUUwMTMHdW5pRTAxNAd1bmlFMDE1B3VuaUUwMTYHdW5pRTAxNwd1bmlFMDE4B3VuaUUwMTkHdW5pRTAyMAd1bmlFMDIxB3VuaUUwMjIHdW5pRTAyMwd1bmlFMDI0B3VuaUUwMjUHdW5pRTAyNgd1bmlFMDI3B3VuaUUwMjgHdW5pRTAyOQd1bmlFMDMwB3VuaUUwMzEHdW5pRTAzMgd1bmlFMDMzB3VuaUUwMzQHdW5pRTAzNQd1bmlFMDM2B3VuaUUwMzcHdW5pRTAzOAd1bmlFMDM5B3VuaUUwNDAHdW5pRTA0MQd1bmlFMDQyB3VuaUUwNDMHdW5pRTA0NAd1bmlFMDQ1B3VuaUUwNDYHdW5pRTA0Nwd1bmlFMDQ4B3VuaUUwNDkHdW5pRTA1MAd1bmlFMDUxB3VuaUUwNTIHdW5pRTA1Mwd1bmlFMDU0B3VuaUUwNTUHdW5pRTA1Ngd1bmlFMDU3B3VuaUUwNTgHdW5pRTA1OQd1bmlFMDYwB3VuaUUwNjIHdW5pRTA2Mwd1bmlFMDY0B3VuaUUwNjUHdW5pRTA2Ngd1bmlFMDY3B3VuaUUwNjgHdW5pRTA2OQd1bmlFMDcwB3VuaUUwNzEHdW5pRTA3Mgd1bmlFMDczB3VuaUUwNzQHdW5pRTA3NQd1bmlFMDc2B3VuaUUwNzcHdW5pRTA3OAd1bmlFMDc5B3VuaUUwODAHdW5pRTA4MQd1bmlFMDgyB3VuaUUwODMHdW5pRTA4NAd1bmlFMDg1B3VuaUUwODYHdW5pRTA4Nwd1bmlFMDg4B3VuaUUwODkHdW5pRTA5MAd1bmlFMDkxB3VuaUUwOTIHdW5pRTA5Mwd1bmlFMDk0B3VuaUUwOTUHdW5pRTA5Ngd1bmlFMDk3B3VuaUUxMDEHdW5pRTEwMgd1bmlFMTAzB3VuaUUxMDQHdW5pRTEwNQd1bmlFMTA2B3VuaUUxMDcHdW5pRTEwOAd1bmlFMTA5B3VuaUUxMTAHdW5pRTExMQd1bmlFMTEyB3VuaUUxMTMHdW5pRTExNAd1bmlFMTE1B3VuaUUxMTYHdW5pRTExNwd1bmlFMTE4B3VuaUUxMTkHdW5pRTEyMAd1bmlFMTIxB3VuaUUxMjIHdW5pRTEyMwd1bmlFMTI0B3VuaUUxMjUHdW5pRTEyNgd1bmlFMTI3B3VuaUUxMjgHdW5pRTEyOQd1bmlFMTMwB3VuaUUxMzEHdW5pRTEzMgd1bmlFMTMzB3VuaUUxMzQHdW5pRTEzNQd1bmlFMTM2B3VuaUUxMzcHdW5pRTEzOAd1bmlFMTM5B3VuaUUxNDAHdW5pRTE0MQd1bmlFMTQyB3VuaUUxNDMHdW5pRTE0NAd1bmlFMTQ1B3VuaUUxNDYHdW5pRTE0OAd1bmlFMTQ5B3VuaUUxNTAHdW5pRTE1MQd1bmlFMTUyB3VuaUUxNTMHdW5pRTE1NAd1bmlFMTU1B3VuaUUxNTYHdW5pRTE1Nwd1bmlFMTU4B3VuaUUxNTkHdW5pRTE2MAd1bmlFMTYxB3VuaUUxNjIHdW5pRTE2Mwd1bmlFMTY0B3VuaUUxNjUHdW5pRTE2Ngd1bmlFMTY3B3VuaUUxNjgHdW5pRTE2OQd1bmlFMTcwB3VuaUUxNzEHdW5pRTE3Mgd1bmlFMTczB3VuaUUxNzQHdW5pRTE3NQd1bmlFMTc2B3VuaUUxNzcHdW5pRTE3OAd1bmlFMTc5B3VuaUUxODAHdW5pRTE4MQd1bmlFMTgyB3VuaUUxODMHdW5pRTE4NAd1bmlFMTg1B3VuaUUxODYHdW5pRTE4Nwd1bmlFMTg4B3VuaUUxODkHdW5pRTE5MAd1bmlFMTkxB3VuaUUxOTIHdW5pRTE5Mwd1bmlFMTk0B3VuaUUxOTUHdW5pRTE5Nwd1bmlFMTk4B3VuaUUxOTkHdW5pRTIwMAd1bmlFMjAxB3VuaUUyMDIHdW5pRTIwMwd1bmlFMjA0B3VuaUUyMDUHdW5pRTIwNgd1bmlFMjA5B3VuaUUyMTAHdW5pRTIxMQd1bmlFMjEyB3VuaUUyMTMHdW5pRTIxNAd1bmlFMjE1B3VuaUUyMTYHdW5pRTIxOAd1bmlFMjE5B3VuaUUyMjEHdW5pRTIyMwd1bmlFMjI0B3VuaUUyMjUHdW5pRTIyNgd1bmlFMjI3B3VuaUUyMzAHdW5pRTIzMQd1bmlFMjMyB3VuaUUyMzMHdW5pRTIzNAd1bmlFMjM1B3VuaUUyMzYHdW5pRTIzNwd1bmlFMjM4B3VuaUUyMzkHdW5pRTI0MAd1bmlFMjQxB3VuaUUyNDIHdW5pRTI0Mwd1bmlFMjQ0B3VuaUUyNDUHdW5pRTI0Ngd1bmlFMjQ3B3VuaUUyNDgHdW5pRTI0OQd1bmlFMjUwB3VuaUUyNTEHdW5pRTI1Mgd1bmlFMjUzB3VuaUUyNTQHdW5pRTI1NQd1bmlFMjU2B3VuaUUyNTcHdW5pRTI1OAd1bmlFMjU5B3VuaUUyNjAHdW5pRjhGRgZ1MUY1MTEGdTFGNkFBAAAAAAFUUMMXAAA%3D%29%20format%28%27truetype%27%29%2Curl%28data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI%2FPgo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiID4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8bWV0YWRhdGE%2BPC9tZXRhZGF0YT4KPGRlZnM%2BCjxmb250IGlkPSJnbHlwaGljb25zX2hhbGZsaW5nc3JlZ3VsYXIiIGhvcml6LWFkdi14PSIxMjAwIiA%2BCjxmb250LWZhY2UgdW5pdHMtcGVyLWVtPSIxMjAwIiBhc2NlbnQ9Ijk2MCIgZGVzY2VudD0iLTI0MCIgLz4KPG1pc3NpbmctZ2x5cGggaG9yaXotYWR2LXg9IjUwMCIgLz4KPGdseXBoIGhvcml6LWFkdi14PSIwIiAvPgo8Z2x5cGggaG9yaXotYWR2LXg9IjQwMCIgLz4KPGdseXBoIHVuaWNvZGU9IiAiIC8%2BCjxnbHlwaCB1bmljb2RlPSIqIiBkPSJNNjAwIDExMDBxMTUgMCAzNCAtMS41dDMwIC0zLjVsMTEgLTFxMTAgLTIgMTcuNSAtMTAuNXQ3LjUgLTE4LjV2LTIyNGwxNTggMTU4cTcgNyAxOCA4dDE5IC02bDEwNiAtMTA2cTcgLTggNiAtMTl0LTggLTE4bC0xNTggLTE1OGgyMjRxMTAgMCAxOC41IC03LjV0MTAuNSAtMTcuNXE2IC00MSA2IC03NXEwIC0xNSAtMS41IC0zNHQtMy41IC0zMGwtMSAtMTFxLTIgLTEwIC0xMC41IC0xNy41dC0xOC41IC03LjVoLTIyNGwxNTggLTE1OCBxNyAtNyA4IC0xOHQtNiAtMTlsLTEwNiAtMTA2cS04IC03IC0xOSAtNnQtMTggOGwtMTU4IDE1OHYtMjI0cTAgLTEwIC03LjUgLTE4LjV0LTE3LjUgLTEwLjVxLTQxIC02IC03NSAtNnEtMTUgMCAtMzQgMS41dC0zMCAzLjVsLTExIDFxLTEwIDIgLTE3LjUgMTAuNXQtNy41IDE4LjV2MjI0bC0xNTggLTE1OHEtNyAtNyAtMTggLTh0LTE5IDZsLTEwNiAxMDZxLTcgOCAtNiAxOXQ4IDE4bDE1OCAxNThoLTIyNHEtMTAgMCAtMTguNSA3LjUgdC0xMC41IDE3LjVxLTYgNDEgLTYgNzVxMCAxNSAxLjUgMzR0My41IDMwbDEgMTFxMiAxMCAxMC41IDE3LjV0MTguNSA3LjVoMjI0bC0xNTggMTU4cS03IDcgLTggMTh0NiAxOWwxMDYgMTA2cTggNyAxOSA2dDE4IC04bDE1OCAtMTU4djIyNHEwIDEwIDcuNSAxOC41dDE3LjUgMTAuNXE0MSA2IDc1IDZ6IiAvPgo8Z2x5cGggdW5pY29kZT0iKyIgZD0iTTQ1MCAxMTAwaDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMzUwaDM1MHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0zNTB2LTM1MHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMjAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYzNTBoLTM1MHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MjAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNSBoMzUwdjM1MHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4YTA7IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4YTU7IiBkPSJNODI1IDExMDBoMjUwcTEwIDAgMTIuNSAtNXQtNS41IC0xM2wtMzY0IC0zNjRxLTYgLTYgLTExIC0xOGgyNjhxMTAgMCAxMyAtNnQtMyAtMTRsLTEyMCAtMTYwcS02IC04IC0xOCAtMTR0LTIyIC02aC0xMjV2LTEwMGgyNzVxMTAgMCAxMyAtNnQtMyAtMTRsLTEyMCAtMTYwcS02IC04IC0xOCAtMTR0LTIyIC02aC0xMjV2LTE3NHEwIC0xMSAtNy41IC0xOC41dC0xOC41IC03LjVoLTE0OHEtMTEgMCAtMTguNSA3LjV0LTcuNSAxOC41djE3NCBoLTI3NXEtMTAgMCAtMTMgNnQzIDE0bDEyMCAxNjBxNiA4IDE4IDE0dDIyIDZoMTI1djEwMGgtMjc1cS0xMCAwIC0xMyA2dDMgMTRsMTIwIDE2MHE2IDggMTggMTR0MjIgNmgxMThxLTUgMTIgLTExIDE4bC0zNjQgMzY0cS04IDggLTUuNSAxM3QxMi41IDVoMjUwcTI1IDAgNDMgLTE4bDE2NCAtMTY0cTggLTggMTggLTh0MTggOGwxNjQgMTY0cTE4IDE4IDQzIDE4eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeDIwMDA7IiBob3Jpei1hZHYteD0iNjUwIiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4MjAwMTsiIGhvcml6LWFkdi14PSIxMzAwIiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4MjAwMjsiIGhvcml6LWFkdi14PSI2NTAiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3gyMDAzOyIgaG9yaXotYWR2LXg9IjEzMDAiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3gyMDA0OyIgaG9yaXotYWR2LXg9IjQzMyIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeDIwMDU7IiBob3Jpei1hZHYteD0iMzI1IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4MjAwNjsiIGhvcml6LWFkdi14PSIyMTYiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3gyMDA3OyIgaG9yaXotYWR2LXg9IjIxNiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeDIwMDg7IiBob3Jpei1hZHYteD0iMTYyIiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4MjAwOTsiIGhvcml6LWFkdi14PSIyNjAiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3gyMDBhOyIgaG9yaXotYWR2LXg9IjcyIiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4MjAyZjsiIGhvcml6LWFkdi14PSIyNjAiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3gyMDVmOyIgaG9yaXotYWR2LXg9IjMyNSIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeDIwYWM7IiBkPSJNNzQ0IDExOThxMjQyIDAgMzU0IC0xODlxNjAgLTEwNCA2NiAtMjA5aC0xODFxMCA0NSAtMTcuNSA4Mi41dC00My41IDYxLjV0LTU4IDQwLjV0LTYwLjUgMjR0LTUxLjUgNy41cS0xOSAwIC00MC41IC01LjV0LTQ5LjUgLTIwLjV0LTUzIC0zOHQtNDkgLTYyLjV0LTM5IC04OS41aDM3OWwtMTAwIC0xMDBoLTMwMHEtNiAtNTAgLTYgLTEwMGg0MDZsLTEwMCAtMTAwaC0zMDBxOSAtNzQgMzMgLTEzMnQ1Mi41IC05MXQ2MS41IC01NC41dDU5IC0yOSB0NDcgLTcuNXEyMiAwIDUwLjUgNy41dDYwLjUgMjQuNXQ1OCA0MXQ0My41IDYxdDE3LjUgODBoMTc0cS0zMCAtMTcxIC0xMjggLTI3OHEtMTA3IC0xMTcgLTI3NCAtMTE3cS0yMDYgMCAtMzI0IDE1OHEtMzYgNDggLTY5IDEzM3QtNDUgMjA0aC0yMTdsMTAwIDEwMGgxMTJxMSA0NyA2IDEwMGgtMjE4bDEwMCAxMDBoMTM0cTIwIDg3IDUxIDE1My41dDYyIDEwMy41cTExNyAxNDEgMjk3IDE0MXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3gyMGJkOyIgZD0iTTQyOCAxMjAwaDM1MHE2NyAwIDEyMCAtMTN0ODYgLTMxdDU3IC00OS41dDM1IC01Ni41dDE3IC02NC41dDYuNSAtNjAuNXQwLjUgLTU3di0xNi41di0xNi41cTAgLTM2IC0wLjUgLTU3dC02LjUgLTYxdC0xNyAtNjV0LTM1IC01N3QtNTcgLTUwLjV0LTg2IC0zMS41dC0xMjAgLTEzaC0xNzhsLTIgLTEwMGgyODhxMTAgMCAxMyAtNnQtMyAtMTRsLTEyMCAtMTYwcS02IC04IC0xOCAtMTR0LTIyIC02aC0xMzh2LTE3NXEwIC0xMSAtNS41IC0xOCB0LTE1LjUgLTdoLTE0OXEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djE3NWgtMjY3cS0xMCAwIC0xMyA2dDMgMTRsMTIwIDE2MHE2IDggMTggMTR0MjIgNmgxMTd2MTAwaC0yNjdxLTEwIDAgLTEzIDZ0MyAxNGwxMjAgMTYwcTYgOCAxOCAxNHQyMiA2aDExN3Y0NzVxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXpNNjAwIDEwMDB2LTMwMGgyMDNxNjQgMCA4Ni41IDMzdDIyLjUgMTE5cTAgODQgLTIyLjUgMTE2dC04Ni41IDMyaC0yMDN6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4MjIxMjsiIGQ9Ik0yNTAgNzAwaDgwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC04MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4MjMxYjsiIGQ9Ik0xMDAwIDEyMDB2LTE1MHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNTB2LTEwMHEwIC05MSAtNDkuNSAtMTY1LjV0LTEzMC41IC0xMDkuNXE4MSAtMzUgMTMwLjUgLTEwOS41dDQ5LjUgLTE2NS41di0xNTBoNTBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTE1MGgtODAwdjE1MHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoNTB2MTUwcTAgOTEgNDkuNSAxNjUuNXQxMzAuNSAxMDkuNXEtODEgMzUgLTEzMC41IDEwOS41IHQtNDkuNSAxNjUuNXYxMDBoLTUwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxNTBoODAwek00MDAgMTAwMHYtMTAwcTAgLTYwIDMyLjUgLTEwOS41dDg3LjUgLTczLjVxMjggLTEyIDQ0IC0zN3QxNiAtNTV0LTE2IC01NXQtNDQgLTM3cS01NSAtMjQgLTg3LjUgLTczLjV0LTMyLjUgLTEwOS41di0xNTBoNDAwdjE1MHEwIDYwIC0zMi41IDEwOS41dC04Ny41IDczLjVxLTI4IDEyIC00NCAzN3QtMTYgNTV0MTYgNTV0NDQgMzcgcTU1IDI0IDg3LjUgNzMuNXQzMi41IDEwOS41djEwMGgtNDAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeDI1ZmM7IiBob3Jpei1hZHYteD0iNTAwIiBkPSJNMCAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeDI2MDE7IiBkPSJNNTAzIDEwODlxMTEwIDAgMjAwLjUgLTU5LjV0MTM0LjUgLTE1Ni41cTQ0IDE0IDkwIDE0cTEyMCAwIDIwNSAtODYuNXQ4NSAtMjA2LjVxMCAtMTIxIC04NSAtMjA3LjV0LTIwNSAtODYuNWgtNzUwcS03OSAwIC0xMzUuNSA1N3QtNTYuNSAxMzdxMCA2OSA0Mi41IDEyMi41dDEwOC41IDY3LjVxLTIgMTIgLTIgMzdxMCAxNTMgMTA4IDI2MC41dDI2MCAxMDcuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3gyNmZhOyIgZD0iTTc3NCAxMTkzLjVxMTYgLTkuNSAyMC41IC0yN3QtNS41IC0zMy41bC0xMzYgLTE4N2w0NjcgLTc0NmgzMHEyMCAwIDM1IC0xOC41dDE1IC0zOS41di00MmgtMTIwMHY0MnEwIDIxIDE1IDM5LjV0MzUgMTguNWgzMGw0NjggNzQ2bC0xMzUgMTgzcS0xMCAxNiAtNS41IDM0dDIwLjUgMjh0MzQgNS41dDI4IC0yMC41bDExMSAtMTQ4bDExMiAxNTBxOSAxNiAyNyAyMC41dDM0IC01ek02MDAgMjAwaDM3N2wtMTgyIDExMmwtMTk1IDUzNHYtNjQ2eiAiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3gyNzA5OyIgZD0iTTI1IDExMDBoMTE1MHExMCAwIDEyLjUgLTV0LTUuNSAtMTNsLTU2NCAtNTY3cS04IC04IC0xOCAtOHQtMTggOGwtNTY0IDU2N3EtOCA4IC01LjUgMTN0MTIuNSA1ek0xOCA4ODJsMjY0IC0yNjRxOCAtOCA4IC0xOHQtOCAtMThsLTI2NCAtMjY0cS04IC04IC0xMyAtNS41dC01IDEyLjV2NTUwcTAgMTAgNSAxMi41dDEzIC01LjV6TTkxOCA2MThsMjY0IDI2NHE4IDggMTMgNS41dDUgLTEyLjV2LTU1MHEwIC0xMCAtNSAtMTIuNXQtMTMgNS41IGwtMjY0IDI2NHEtOCA4IC04IDE4dDggMTh6TTgxOCA0ODJsMzY0IC0zNjRxOCAtOCA1LjUgLTEzdC0xMi41IC01aC0xMTUwcS0xMCAwIC0xMi41IDV0NS41IDEzbDM2NCAzNjRxOCA4IDE4IDh0MTggLThsMTY0IC0xNjRxOCAtOCAxOCAtOHQxOCA4bDE2NCAxNjRxOCA4IDE4IDh0MTggLTh6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4MjcwZjsiIGQ9Ik0xMDExIDEyMTBxMTkgMCAzMyAtMTNsMTUzIC0xNTNxMTMgLTE0IDEzIC0zM3QtMTMgLTMzbC05OSAtOTJsLTIxNCAyMTRsOTUgOTZxMTMgMTQgMzIgMTR6TTEwMTMgODAwbC02MTUgLTYxNGwtMjE0IDIxNGw2MTQgNjE0ek0zMTcgOTZsLTMzMyAtMTEybDExMCAzMzV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAwMTsiIGQ9Ik03MDAgNjUwdi01NTBoMjUwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di01MGgtODAwdjUwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWgyNTB2NTUwbC01MDAgNTUwaDEyMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAwMjsiIGQ9Ik0zNjggMTAxN2w2NDUgMTYzcTM5IDE1IDYzIDB0MjQgLTQ5di04MzFxMCAtNTUgLTQxLjUgLTk1LjV0LTExMS41IC02My41cS03OSAtMjUgLTE0NyAtNC41dC04NiA3NXQyNS41IDExMS41dDEyMi41IDgycTcyIDI0IDEzOCA4djUyMWwtNjAwIC0xNTV2LTYwNnEwIC00MiAtNDQgLTkwdC0xMDkgLTY5cS03OSAtMjYgLTE0NyAtNS41dC04NiA3NS41dDI1LjUgMTExLjV0MTIyLjUgODIuNXE3MiAyNCAxMzggN3Y2MzlxMCAzOCAxNC41IDU5IHQ1My41IDM0eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMDM7IiBkPSJNNTAwIDExOTFxMTAwIDAgMTkxIC0zOXQxNTYuNSAtMTA0LjV0MTA0LjUgLTE1Ni41dDM5IC0xOTFsLTEgLTJsMSAtNXEwIC0xNDEgLTc4IC0yNjJsMjc1IC0yNzRxMjMgLTI2IDIyLjUgLTQ0LjV0LTIyLjUgLTQyLjVsLTU5IC01OHEtMjYgLTIwIC00Ni41IC0yMHQtMzkuNSAyMGwtMjc1IDI3NHEtMTE5IC03NyAtMjYxIC03N2wtNSAxbC0yIC0xcS0xMDAgMCAtMTkxIDM5dC0xNTYuNSAxMDQuNXQtMTA0LjUgMTU2LjV0LTM5IDE5MSB0MzkgMTkxdDEwNC41IDE1Ni41dDE1Ni41IDEwNC41dDE5MSAzOXpNNTAwIDEwMjJxLTg4IDAgLTE2MiAtNDN0LTExNyAtMTE3dC00MyAtMTYydDQzIC0xNjJ0MTE3IC0xMTd0MTYyIC00M3QxNjIgNDN0MTE3IDExN3Q0MyAxNjJ0LTQzIDE2MnQtMTE3IDExN3QtMTYyIDQzeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMDU7IiBkPSJNNjQ5IDk0OXE0OCA2OCAxMDkuNSAxMDR0MTIxLjUgMzguNXQxMTguNSAtMjB0MTAyLjUgLTY0dDcxIC0xMDAuNXQyNyAtMTIzcTAgLTU3IC0zMy41IC0xMTcuNXQtOTQgLTEyNC41dC0xMjYuNSAtMTI3LjV0LTE1MCAtMTUyLjV0LTE0NiAtMTc0cS02MiA4NSAtMTQ1LjUgMTc0dC0xNTAgMTUyLjV0LTEyNi41IDEyNy41dC05My41IDEyNC41dC0zMy41IDExNy41cTAgNjQgMjggMTIzdDczIDEwMC41dDEwNCA2NHQxMTkgMjAgdDEyMC41IC0zOC41dDEwNC41IC0xMDR6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAwNjsiIGQ9Ik00MDcgODAwbDEzMSAzNTNxNyAxOSAxNy41IDE5dDE3LjUgLTE5bDEyOSAtMzUzaDQyMXEyMSAwIDI0IC04LjV0LTE0IC0yMC41bC0zNDIgLTI0OWwxMzAgLTQwMXE3IC0yMCAtMC41IC0yNS41dC0yNC41IDYuNWwtMzQzIDI0NmwtMzQyIC0yNDdxLTE3IC0xMiAtMjQuNSAtNi41dC0wLjUgMjUuNWwxMzAgNDAwbC0zNDcgMjUxcS0xNyAxMiAtMTQgMjAuNXQyMyA4LjVoNDI5eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMDc7IiBkPSJNNDA3IDgwMGwxMzEgMzUzcTcgMTkgMTcuNSAxOXQxNy41IC0xOWwxMjkgLTM1M2g0MjFxMjEgMCAyNCAtOC41dC0xNCAtMjAuNWwtMzQyIC0yNDlsMTMwIC00MDFxNyAtMjAgLTAuNSAtMjUuNXQtMjQuNSA2LjVsLTM0MyAyNDZsLTM0MiAtMjQ3cS0xNyAtMTIgLTI0LjUgLTYuNXQtMC41IDI1LjVsMTMwIDQwMGwtMzQ3IDI1MXEtMTcgMTIgLTE0IDIwLjV0MjMgOC41aDQyOXpNNDc3IDcwMGgtMjQwbDE5NyAtMTQybC03NCAtMjI2IGwxOTMgMTM5bDE5NSAtMTQwbC03NCAyMjlsMTkyIDE0MGgtMjM0bC03OCAyMTF6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAwODsiIGQ9Ik02MDAgMTIwMHExMjQgMCAyMTIgLTg4dDg4IC0yMTJ2LTI1MHEwIC00NiAtMzEgLTk4dC02OSAtNTJ2LTc1cTAgLTEwIDYgLTIxLjV0MTUgLTE3LjVsMzU4IC0yMzBxOSAtNSAxNSAtMTYuNXQ2IC0yMS41di05M3EwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTExNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXY5M3EwIDEwIDYgMjEuNXQxNSAxNi41bDM1OCAyMzBxOSA2IDE1IDE3LjV0NiAyMS41djc1cS0zOCAwIC02OSA1MiB0LTMxIDk4djI1MHEwIDEyNCA4OCAyMTJ0MjEyIDg4eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMDk7IiBkPSJNMjUgMTEwMGgxMTUwcTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtMTA1MHEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTExNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXYxMDUwcTAgMTAgNy41IDE3LjV0MTcuNSA3LjV6TTEwMCAxMDAwdi0xMDBoMTAwdjEwMGgtMTAwek04NzUgMTAwMGgtNTUwcS0xMCAwIC0xNy41IC03LjV0LTcuNSAtMTcuNXYtMzUwcTAgLTEwIDcuNSAtMTcuNXQxNy41IC03LjVoNTUwIHExMCAwIDE3LjUgNy41dDcuNSAxNy41djM1MHEwIDEwIC03LjUgMTcuNXQtMTcuNSA3LjV6TTEwMDAgMTAwMHYtMTAwaDEwMHYxMDBoLTEwMHpNMTAwIDgwMHYtMTAwaDEwMHYxMDBoLTEwMHpNMTAwMCA4MDB2LTEwMGgxMDB2MTAwaC0xMDB6TTEwMCA2MDB2LTEwMGgxMDB2MTAwaC0xMDB6TTEwMDAgNjAwdi0xMDBoMTAwdjEwMGgtMTAwek04NzUgNTAwaC01NTBxLTEwIDAgLTE3LjUgLTcuNXQtNy41IC0xNy41di0zNTBxMCAtMTAgNy41IC0xNy41IHQxNy41IC03LjVoNTUwcTEwIDAgMTcuNSA3LjV0Ny41IDE3LjV2MzUwcTAgMTAgLTcuNSAxNy41dC0xNy41IDcuNXpNMTAwIDQwMHYtMTAwaDEwMHYxMDBoLTEwMHpNMTAwMCA0MDB2LTEwMGgxMDB2MTAwaC0xMDB6TTEwMCAyMDB2LTEwMGgxMDB2MTAwaC0xMDB6TTEwMDAgMjAwdi0xMDBoMTAwdjEwMGgtMTAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMTA7IiBkPSJNNTAgMTEwMGg0MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTQwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNDAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXY0MDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek02NTAgMTEwMGg0MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTQwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNDAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXY0MDAgcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNNTAgNTAwaDQwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNDAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC00MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djQwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTY1MCA1MDBoNDAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di00MDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTQwMCBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djQwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAxMTsiIGQ9Ik01MCAxMTAwaDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTQ1MCAxMTAwaDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djIwMCBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek04NTAgMTEwMGgyMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTIwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMjAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYyMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek01MCA3MDBoMjAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0yMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTIwMCBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTQ1MCA3MDBoMjAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0yMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTIwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MjAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNODUwIDcwMGgyMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTIwMCBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTIwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MjAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNNTAgMzAwaDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTQ1MCAzMDBoMjAwIHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTg1MCAzMDBoMjAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0yMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTIwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MjAwcTAgMjEgMTQuNSAzNS41IHQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAxMjsiIGQ9Ik01MCAxMTAwaDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTQ1MCAxMTAwaDcwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC03MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djIwMCBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek01MCA3MDBoMjAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0yMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTIwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MjAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNNDUwIDcwMGg3MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTIwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNzAwIHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MjAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNNTAgMzAwaDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTQ1MCAzMDBoNzAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0yMDAgcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC03MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAxMzsiIGQ9Ik00NjUgNDc3bDU3MSA1NzFxOCA4IDE4IDh0MTcgLThsMTc3IC0xNzdxOCAtNyA4IC0xN3QtOCAtMThsLTc4MyAtNzg0cS03IC04IC0xNy41IC04dC0xNy41IDhsLTM4NCAzODRxLTggOCAtOCAxOHQ4IDE3bDE3NyAxNzdxNyA4IDE3IDh0MTggLThsMTcxIC0xNzFxNyAtNyAxOCAtN3QxOCA3eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMTQ7IiBkPSJNOTA0IDEwODNsMTc4IC0xNzlxOCAtOCA4IC0xOC41dC04IC0xNy41bC0yNjcgLTI2OGwyNjcgLTI2OHE4IC03IDggLTE3LjV0LTggLTE4LjVsLTE3OCAtMTc4cS04IC04IC0xOC41IC04dC0xNy41IDhsLTI2OCAyNjdsLTI2OCAtMjY3cS03IC04IC0xNy41IC04dC0xOC41IDhsLTE3OCAxNzhxLTggOCAtOCAxOC41dDggMTcuNWwyNjcgMjY4bC0yNjcgMjY4cS04IDcgLTggMTcuNXQ4IDE4LjVsMTc4IDE3OHE4IDggMTguNSA4dDE3LjUgLTggbDI2OCAtMjY3bDI2OCAyNjhxNyA3IDE3LjUgN3QxOC41IC03eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMTU7IiBkPSJNNTA3IDExNzdxOTggMCAxODcuNSAtMzguNXQxNTQuNSAtMTAzLjV0MTAzLjUgLTE1NC41dDM4LjUgLTE4Ny41cTAgLTE0MSAtNzggLTI2MmwzMDAgLTI5OXE4IC04IDggLTE4LjV0LTggLTE4LjVsLTEwOSAtMTA4cS03IC04IC0xNy41IC04dC0xOC41IDhsLTMwMCAyOTlxLTExOSAtNzcgLTI2MSAtNzdxLTk4IDAgLTE4OCAzOC41dC0xNTQuNSAxMDN0LTEwMyAxNTQuNXQtMzguNSAxODh0MzguNSAxODcuNXQxMDMgMTU0LjUgdDE1NC41IDEwMy41dDE4OCAzOC41ek01MDYuNSAxMDIzcS04OS41IDAgLTE2NS41IC00NHQtMTIwIC0xMjAuNXQtNDQgLTE2NnQ0NCAtMTY1LjV0MTIwIC0xMjB0MTY1LjUgLTQ0dDE2NiA0NHQxMjAuNSAxMjB0NDQgMTY1LjV0LTQ0IDE2NnQtMTIwLjUgMTIwLjV0LTE2NiA0NHpNNDI1IDkwMGgxNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di03NWg3NXExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTE1MHEwIC0xMCAtNy41IC0xNy41IHQtMTcuNSAtNy41aC03NXYtNzVxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0xNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXY3NWgtNzVxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXYxNTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNWg3NXY3NXEwIDEwIDcuNSAxNy41dDE3LjUgNy41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMTY7IiBkPSJNNTA3IDExNzdxOTggMCAxODcuNSAtMzguNXQxNTQuNSAtMTAzLjV0MTAzLjUgLTE1NC41dDM4LjUgLTE4Ny41cTAgLTE0MSAtNzggLTI2MmwzMDAgLTI5OXE4IC04IDggLTE4LjV0LTggLTE4LjVsLTEwOSAtMTA4cS03IC04IC0xNy41IC04dC0xOC41IDhsLTMwMCAyOTlxLTExOSAtNzcgLTI2MSAtNzdxLTk4IDAgLTE4OCAzOC41dC0xNTQuNSAxMDN0LTEwMyAxNTQuNXQtMzguNSAxODh0MzguNSAxODcuNXQxMDMgMTU0LjUgdDE1NC41IDEwMy41dDE4OCAzOC41ek01MDYuNSAxMDIzcS04OS41IDAgLTE2NS41IC00NHQtMTIwIC0xMjAuNXQtNDQgLTE2NnQ0NCAtMTY1LjV0MTIwIC0xMjB0MTY1LjUgLTQ0dDE2NiA0NHQxMjAuNSAxMjB0NDQgMTY1LjV0LTQ0IDE2NnQtMTIwLjUgMTIwLjV0LTE2NiA0NHpNMzI1IDgwMGgzNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di0xNTBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0zNTBxLTEwIDAgLTE3LjUgNy41IHQtNy41IDE3LjV2MTUwcTAgMTAgNy41IDE3LjV0MTcuNSA3LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAxNzsiIGQ9Ik01NTAgMTIwMGgxMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTQwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXY0MDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek04MDAgOTc1djE2NnExNjcgLTYyIDI3MiAtMjA5LjV0MTA1IC0zMzEuNXEwIC0xMTcgLTQ1LjUgLTIyNHQtMTIzIC0xODQuNXQtMTg0LjUgLTEyM3QtMjI0IC00NS41dC0yMjQgNDUuNSB0LTE4NC41IDEyM3QtMTIzIDE4NC41dC00NS41IDIyNHEwIDE4NCAxMDUgMzMxLjV0MjcyIDIwOS41di0xNjZxLTEwMyAtNTUgLTE2NSAtMTU1dC02MiAtMjIwcTAgLTExNiA1NyAtMjE0LjV0MTU1LjUgLTE1NS41dDIxNC41IC01N3QyMTQuNSA1N3QxNTUuNSAxNTUuNXQ1NyAyMTQuNXEwIDEyMCAtNjIgMjIwdC0xNjUgMTU1eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMTg7IiBkPSJNMTAyNSAxMjAwaDE1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTExNTBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0xNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXYxMTUwcTAgMTAgNy41IDE3LjV0MTcuNSA3LjV6TTcyNSA4MDBoMTUwcTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtNzUwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtMTUwcS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2NzUwIHEwIDEwIDcuNSAxNy41dDE3LjUgNy41ek00MjUgNTAwaDE1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTQ1MHEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTE1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djQ1MHEwIDEwIDcuNSAxNy41dDE3LjUgNy41ek0xMjUgMzAwaDE1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTI1MHEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTE1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41IHYyNTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDE5OyIgZD0iTTYwMCAxMTc0cTMzIDAgNzQgLTVsMzggLTE1Mmw1IC0xcTQ5IC0xNCA5NCAtMzlsNSAtMmwxMzQgODBxNjEgLTQ4IDEwNCAtMTA1bC04MCAtMTM0bDMgLTVxMjUgLTQ0IDM5IC05M2wxIC02bDE1MiAtMzhxNSAtNDMgNSAtNzNxMCAtMzQgLTUgLTc0bC0xNTIgLTM4bC0xIC02cS0xNSAtNDkgLTM5IC05M2wtMyAtNWw4MCAtMTM0cS00OCAtNjEgLTEwNCAtMTA1bC0xMzQgODFsLTUgLTNxLTQ0IC0yNSAtOTQgLTM5bC01IC0ybC0zOCAtMTUxIHEtNDMgLTUgLTc0IC01cS0zMyAwIC03NCA1bC0zOCAxNTFsLTUgMnEtNDkgMTQgLTk0IDM5bC01IDNsLTEzNCAtODFxLTYwIDQ4IC0xMDQgMTA1bDgwIDEzNGwtMyA1cS0yNSA0NSAtMzggOTNsLTIgNmwtMTUxIDM4cS02IDQyIC02IDc0cTAgMzMgNiA3M2wxNTEgMzhsMiA2cTEzIDQ4IDM4IDkzbDMgNWwtODAgMTM0cTQ3IDYxIDEwNSAxMDVsMTMzIC04MGw1IDJxNDUgMjUgOTQgMzlsNSAxbDM4IDE1MnE0MyA1IDc0IDV6TTYwMCA4MTUgcS04OSAwIC0xNTIgLTYzdC02MyAtMTUxLjV0NjMgLTE1MS41dDE1MiAtNjN0MTUyIDYzdDYzIDE1MS41dC02MyAxNTEuNXQtMTUyIDYzeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMjA7IiBkPSJNNTAwIDEzMDBoMzAwcTQxIDAgNzAuNSAtMjkuNXQyOS41IC03MC41di0xMDBoMjc1cTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtNzVoLTExMDB2NzVxMCAxMCA3LjUgMTcuNXQxNy41IDcuNWgyNzV2MTAwcTAgNDEgMjkuNSA3MC41dDcwLjUgMjkuNXpNNTAwIDEyMDB2LTEwMGgzMDB2MTAwaC0zMDB6TTExMDAgOTAwdi04MDBxMCAtNDEgLTI5LjUgLTcwLjV0LTcwLjUgLTI5LjVoLTcwMHEtNDEgMCAtNzAuNSAyOS41dC0yOS41IDcwLjUgdjgwMGg5MDB6TTMwMCA4MDB2LTcwMGgxMDB2NzAwaC0xMDB6TTUwMCA4MDB2LTcwMGgxMDB2NzAwaC0xMDB6TTcwMCA4MDB2LTcwMGgxMDB2NzAwaC0xMDB6TTkwMCA4MDB2LTcwMGgxMDB2NzAwaC0xMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAyMTsiIGQ9Ik0xOCA2MThsNjIwIDYwOHE4IDcgMTguNSA3dDE3LjUgLTdsNjA4IC02MDhxOCAtOCA1LjUgLTEzdC0xMi41IC01aC0xNzV2LTU3NXEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTI1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djM3NWgtMzAwdi0zNzVxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0yNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXY1NzVoLTE3NXEtMTAgMCAtMTIuNSA1dDUuNSAxM3oiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDIyOyIgZD0iTTYwMCAxMjAwdi00MDBxMCAtNDEgMjkuNSAtNzAuNXQ3MC41IC0yOS41aDMwMHYtNjUwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC04MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djExMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDQ1MHpNMTAwMCA4MDBoLTI1MHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MjUweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMjM7IiBkPSJNNjAwIDExNzdxMTE3IDAgMjI0IC00NS41dDE4NC41IC0xMjN0MTIzIC0xODQuNXQ0NS41IC0yMjR0LTQ1LjUgLTIyNHQtMTIzIC0xODQuNXQtMTg0LjUgLTEyM3QtMjI0IC00NS41dC0yMjQgNDUuNXQtMTg0LjUgMTIzdC0xMjMgMTg0LjV0LTQ1LjUgMjI0dDQ1LjUgMjI0dDEyMyAxODQuNXQxODQuNSAxMjN0MjI0IDQ1LjV6TTYwMCAxMDI3cS0xMTYgMCAtMjE0LjUgLTU3dC0xNTUuNSAtMTU1LjV0LTU3IC0yMTQuNXQ1NyAtMjE0LjUgdDE1NS41IC0xNTUuNXQyMTQuNSAtNTd0MjE0LjUgNTd0MTU1LjUgMTU1LjV0NTcgMjE0LjV0LTU3IDIxNC41dC0xNTUuNSAxNTUuNXQtMjE0LjUgNTd6TTUyNSA5MDBoNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di0yNzVoMTc1cTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtNTBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0yNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXYzNTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDI0OyIgZD0iTTEzMDAgMGgtNTM4bC00MSA0MDBoLTI0MmwtNDEgLTQwMGgtNTM4bDQzMSAxMjAwaDIwOWwtMjEgLTMwMGgxNjJsLTIwIDMwMGgyMDh6TTUxNSA4MDBsLTI3IC0zMDBoMjI0bC0yNyAzMDBoLTE3MHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDI1OyIgZD0iTTU1MCAxMjAwaDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNDUwaDE5MXEyMCAwIDI1LjUgLTExLjV0LTcuNSAtMjcuNWwtMzI3IC00MDBxLTEzIC0xNiAtMzIgLTE2dC0zMiAxNmwtMzI3IDQwMHEtMTMgMTYgLTcuNSAyNy41dDI1LjUgMTEuNWgxOTF2NDUwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNMTEyNSA0MDBoNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di0zNTBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41IGgtMTA1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djM1MHEwIDEwIDcuNSAxNy41dDE3LjUgNy41aDUwcTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtMTc1aDkwMHYxNzVxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDI2OyIgZD0iTTYwMCAxMTc3cTExNyAwIDIyNCAtNDUuNXQxODQuNSAtMTIzdDEyMyAtMTg0LjV0NDUuNSAtMjI0dC00NS41IC0yMjR0LTEyMyAtMTg0LjV0LTE4NC41IC0xMjN0LTIyNCAtNDUuNXQtMjI0IDQ1LjV0LTE4NC41IDEyM3QtMTIzIDE4NC41dC00NS41IDIyNHQ0NS41IDIyNHQxMjMgMTg0LjV0MTg0LjUgMTIzdDIyNCA0NS41ek02MDAgMTAyN3EtMTE2IDAgLTIxNC41IC01N3QtMTU1LjUgLTE1NS41dC01NyAtMjE0LjV0NTcgLTIxNC41IHQxNTUuNSAtMTU1LjV0MjE0LjUgLTU3dDIxNC41IDU3dDE1NS41IDE1NS41dDU3IDIxNC41dC01NyAyMTQuNXQtMTU1LjUgMTU1LjV0LTIxNC41IDU3ek01MjUgOTAwaDE1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTI3NWgxMzdxMjEgMCAyNiAtMTEuNXQtOCAtMjcuNWwtMjIzIC0yNzVxLTEzIC0xNiAtMzIgLTE2dC0zMiAxNmwtMjIzIDI3NXEtMTMgMTYgLTggMjcuNXQyNiAxMS41aDEzN3YyNzVxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXogIiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAyNzsiIGQ9Ik02MDAgMTE3N3ExMTcgMCAyMjQgLTQ1LjV0MTg0LjUgLTEyM3QxMjMgLTE4NC41dDQ1LjUgLTIyNHQtNDUuNSAtMjI0dC0xMjMgLTE4NC41dC0xODQuNSAtMTIzdC0yMjQgLTQ1LjV0LTIyNCA0NS41dC0xODQuNSAxMjN0LTEyMyAxODQuNXQtNDUuNSAyMjR0NDUuNSAyMjR0MTIzIDE4NC41dDE4NC41IDEyM3QyMjQgNDUuNXpNNjAwIDEwMjdxLTExNiAwIC0yMTQuNSAtNTd0LTE1NS41IC0xNTUuNXQtNTcgLTIxNC41dDU3IC0yMTQuNSB0MTU1LjUgLTE1NS41dDIxNC41IC01N3QyMTQuNSA1N3QxNTUuNSAxNTUuNXQ1NyAyMTQuNXQtNTcgMjE0LjV0LTE1NS41IDE1NS41dC0yMTQuNSA1N3pNNjMyIDkxNGwyMjMgLTI3NXExMyAtMTYgOCAtMjcuNXQtMjYgLTExLjVoLTEzN3YtMjc1cTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtMTUwcS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2Mjc1aC0xMzdxLTIxIDAgLTI2IDExLjV0OCAyNy41bDIyMyAyNzVxMTMgMTYgMzIgMTYgdDMyIC0xNnoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDI4OyIgZD0iTTIyNSAxMjAwaDc1MHExMCAwIDE5LjUgLTd0MTIuNSAtMTdsMTg2IC02NTJxNyAtMjQgNyAtNDl2LTQyNXEwIC0xMiAtNCAtMjd0LTkgLTE3cS0xMiAtNiAtMzcgLTZoLTExMDBxLTEyIDAgLTI3IDR0LTE3IDhxLTYgMTMgLTYgMzhsMSA0MjVxMCAyNSA3IDQ5bDE4NSA2NTJxMyAxMCAxMi41IDE3dDE5LjUgN3pNODc4IDEwMDBoLTU1NnEtMTAgMCAtMTkgLTd0LTExIC0xOGwtODcgLTQ1MHEtMiAtMTEgNCAtMTh0MTYgLTdoMTUwIHExMCAwIDE5LjUgLTd0MTEuNSAtMTdsMzggLTE1MnEyIC0xMCAxMS41IC0xN3QxOS41IC03aDI1MHExMCAwIDE5LjUgN3QxMS41IDE3bDM4IDE1MnEyIDEwIDExLjUgMTd0MTkuNSA3aDE1MHExMCAwIDE2IDd0NCAxOGwtODcgNDUwcS0yIDExIC0xMSAxOHQtMTkgN3oiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDI5OyIgZD0iTTYwMCAxMTc3cTExNyAwIDIyNCAtNDUuNXQxODQuNSAtMTIzdDEyMyAtMTg0LjV0NDUuNSAtMjI0dC00NS41IC0yMjR0LTEyMyAtMTg0LjV0LTE4NC41IC0xMjN0LTIyNCAtNDUuNXQtMjI0IDQ1LjV0LTE4NC41IDEyM3QtMTIzIDE4NC41dC00NS41IDIyNHQ0NS41IDIyNHQxMjMgMTg0LjV0MTg0LjUgMTIzdDIyNCA0NS41ek02MDAgMTAyN3EtMTE2IDAgLTIxNC41IC01N3QtMTU1LjUgLTE1NS41dC01NyAtMjE0LjV0NTcgLTIxNC41IHQxNTUuNSAtMTU1LjV0MjE0LjUgLTU3dDIxNC41IDU3dDE1NS41IDE1NS41dDU3IDIxNC41dC01NyAyMTQuNXQtMTU1LjUgMTU1LjV0LTIxNC41IDU3ek01NDAgODIwbDI1MyAtMTkwcTE3IC0xMiAxNyAtMzB0LTE3IC0zMGwtMjUzIC0xOTBxLTE2IC0xMiAtMjggLTYuNXQtMTIgMjYuNXY0MDBxMCAyMSAxMiAyNi41dDI4IC02LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAzMDsiIGQ9Ik05NDcgMTA2MGwxMzUgMTM1cTcgNyAxMi41IDV0NS41IC0xM3YtMzYycTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtMzYycS0xMSAwIC0xMyA1LjV0NSAxMi41bDEzMyAxMzNxLTEwOSA3NiAtMjM4IDc2cS0xMTYgMCAtMjE0LjUgLTU3dC0xNTUuNSAtMTU1LjV0LTU3IC0yMTQuNXQ1NyAtMjE0LjV0MTU1LjUgLTE1NS41dDIxNC41IC01N3QyMTQuNSA1N3QxNTUuNSAxNTUuNXQ1NyAyMTQuNWgxNTBxMCAtMTE3IC00NS41IC0yMjQgdC0xMjMgLTE4NC41dC0xODQuNSAtMTIzdC0yMjQgLTQ1LjV0LTIyNCA0NS41dC0xODQuNSAxMjN0LTEyMyAxODQuNXQtNDUuNSAyMjR0NDUuNSAyMjR0MTIzIDE4NC41dDE4NC41IDEyM3QyMjQgNDUuNXExOTIgMCAzNDcgLTExN3oiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDMxOyIgZD0iTTk0NyAxMDYwbDEzNSAxMzVxNyA3IDEyLjUgNXQ1LjUgLTEzdi0zNjFxMCAtMTEgLTcuNSAtMTguNXQtMTguNSAtNy41aC0zNjFxLTExIDAgLTEzIDUuNXQ1IDEyLjVsMTM0IDEzNHEtMTEwIDc1IC0yMzkgNzVxLTExNiAwIC0yMTQuNSAtNTd0LTE1NS41IC0xNTUuNXQtNTcgLTIxNC41aC0xNTBxMCAxMTcgNDUuNSAyMjR0MTIzIDE4NC41dDE4NC41IDEyM3QyMjQgNDUuNXExOTIgMCAzNDcgLTExN3pNMTAyNyA2MDBoMTUwIHEwIC0xMTcgLTQ1LjUgLTIyNHQtMTIzIC0xODQuNXQtMTg0LjUgLTEyM3QtMjI0IC00NS41cS0xOTIgMCAtMzQ4IDExOGwtMTM0IC0xMzRxLTcgLTggLTEyLjUgLTUuNXQtNS41IDEyLjV2MzYwcTAgMTEgNy41IDE4LjV0MTguNSA3LjVoMzYwcTEwIDAgMTIuNSAtNS41dC01LjUgLTEyLjVsLTEzMyAtMTMzcTExMCAtNzYgMjQwIC03NnExMTYgMCAyMTQuNSA1N3QxNTUuNSAxNTUuNXQ1NyAyMTQuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDMyOyIgZD0iTTEyNSAxMjAwaDEwNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di0xMTUwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtMTA1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djExNTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXpNMTA3NSAxMDAwaC04NTBxLTEwIDAgLTE3LjUgLTcuNXQtNy41IC0xNy41di04NTBxMCAtMTAgNy41IC0xNy41dDE3LjUgLTcuNWg4NTBxMTAgMCAxNy41IDcuNXQ3LjUgMTcuNXY4NTAgcTAgMTAgLTcuNSAxNy41dC0xNy41IDcuNXpNMzI1IDkwMGg1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTUwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXY1MHEwIDEwIDcuNSAxNy41dDE3LjUgNy41ek01MjUgOTAwaDQ1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTUwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtNDUwcS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2NTAgcTAgMTAgNy41IDE3LjV0MTcuNSA3LjV6TTMyNSA3MDBoNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di01MHEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTUwcS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2NTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXpNNTI1IDcwMGg0NTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di01MHEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTQ1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djUwIHEwIDEwIDcuNSAxNy41dDE3LjUgNy41ek0zMjUgNTAwaDUwcTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtNTBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC01MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djUwcTAgMTAgNy41IDE3LjV0MTcuNSA3LjV6TTUyNSA1MDBoNDUwcTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtNTBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC00NTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXY1MCBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXpNMzI1IDMwMGg1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTUwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXY1MHEwIDEwIDcuNSAxNy41dDE3LjUgNy41ek01MjUgMzAwaDQ1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTUwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtNDUwcS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2NTAgcTAgMTAgNy41IDE3LjV0MTcuNSA3LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAzMzsiIGQ9Ik05MDAgODAwdjIwMHEwIDgzIC01OC41IDE0MS41dC0xNDEuNSA1OC41aC0zMDBxLTgyIDAgLTE0MSAtNTl0LTU5IC0xNDF2LTIwMGgtMTAwcS00MSAwIC03MC41IC0yOS41dC0yOS41IC03MC41di02MDBxMCAtNDEgMjkuNSAtNzAuNXQ3MC41IC0yOS41aDkwMHE0MSAwIDcwLjUgMjkuNXQyOS41IDcwLjV2NjAwcTAgNDEgLTI5LjUgNzAuNXQtNzAuNSAyOS41aC0xMDB6TTQwMCA4MDB2MTUwcTAgMjEgMTUgMzUuNXQzNSAxNC41aDIwMCBxMjAgMCAzNSAtMTQuNXQxNSAtMzUuNXYtMTUwaC0zMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAzNDsiIGQ9Ik0xMjUgMTEwMGg1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTEwNzVoLTEwMHYxMDc1cTAgMTAgNy41IDE3LjV0MTcuNSA3LjV6TTEwNzUgMTA1MnE0IDAgOSAtMnExNiAtNiAxNiAtMjN2LTQyMXEwIC02IC0zIC0xMnEtMzMgLTU5IC02Ni41IC05OXQtNjUuNSAtNTh0LTU2LjUgLTI0LjV0LTUyLjUgLTYuNXEtMjYgMCAtNTcuNSA2LjV0LTUyLjUgMTMuNXQtNjAgMjFxLTQxIDE1IC02MyAyMi41dC01Ny41IDE1dC02NS41IDcuNSBxLTg1IDAgLTE2MCAtNTdxLTcgLTUgLTE1IC01cS02IDAgLTExIDNxLTE0IDcgLTE0IDIydjQzOHEyMiA1NSA4MiA5OC41dDExOSA0Ni41cTIzIDIgNDMgMC41dDQzIC03dDMyLjUgLTguNXQzOCAtMTN0MzIuNSAtMTFxNDEgLTE0IDYzLjUgLTIxdDU3IC0xNHQ2My41IC03cTEwMyAwIDE4MyA4N3E3IDggMTggOHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDM1OyIgZD0iTTYwMCAxMTc1cTExNiAwIDIyNyAtNDkuNXQxOTIuNSAtMTMxdDEzMSAtMTkyLjV0NDkuNSAtMjI3di0zMDBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC01MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djMwMHEwIDEyNyAtNzAuNSAyMzEuNXQtMTg0LjUgMTYxLjV0LTI0NSA1N3QtMjQ1IC01N3QtMTg0LjUgLTE2MS41dC03MC41IC0yMzEuNXYtMzAwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtNTAgcS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2MzAwcTAgMTE2IDQ5LjUgMjI3dDEzMSAxOTIuNXQxOTIuNSAxMzF0MjI3IDQ5LjV6TTIyMCA1MDBoMTYwcTggMCAxNCAtNnQ2IC0xNHYtNDYwcTAgLTggLTYgLTE0dC0xNCAtNmgtMTYwcS04IDAgLTE0IDZ0LTYgMTR2NDYwcTAgOCA2IDE0dDE0IDZ6TTgyMCA1MDBoMTYwcTggMCAxNCAtNnQ2IC0xNHYtNDYwcTAgLTggLTYgLTE0dC0xNCAtNmgtMTYwcS04IDAgLTE0IDZ0LTYgMTR2NDYwIHEwIDggNiAxNHQxNCA2eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMzY7IiBkPSJNMzIxIDgxNGwyNTggMTcycTkgNiAxNSAyLjV0NiAtMTMuNXYtNzUwcTAgLTEwIC02IC0xMy41dC0xNSAyLjVsLTI1OCAxNzJxLTIxIDE0IC00NiAxNGgtMjUwcS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2MzUwcTAgMTAgNy41IDE3LjV0MTcuNSA3LjVoMjUwcTI1IDAgNDYgMTR6TTkwMCA2NjhsMTIwIDEyMHE3IDcgMTcgN3QxNyAtN2wzNCAtMzRxNyAtNyA3IC0xN3QtNyAtMTdsLTEyMCAtMTIwbDEyMCAtMTIwcTcgLTcgNyAtMTcgdC03IC0xN2wtMzQgLTM0cS03IC03IC0xNyAtN3QtMTcgN2wtMTIwIDExOWwtMTIwIC0xMTlxLTcgLTcgLTE3IC03dC0xNyA3bC0zNCAzNHEtNyA3IC03IDE3dDcgMTdsMTE5IDEyMGwtMTE5IDEyMHEtNyA3IC03IDE3dDcgMTdsMzQgMzRxNyA4IDE3IDh0MTcgLTh6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAzNzsiIGQ9Ik0zMjEgODE0bDI1OCAxNzJxOSA2IDE1IDIuNXQ2IC0xMy41di03NTBxMCAtMTAgLTYgLTEzLjV0LTE1IDIuNWwtMjU4IDE3MnEtMjEgMTQgLTQ2IDE0aC0yNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXYzNTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNWgyNTBxMjUgMCA0NiAxNHpNNzY2IDkwMGg0cTEwIC0xIDE2IC0xMHE5NiAtMTI5IDk2IC0yOTBxMCAtMTU0IC05MCAtMjgxcS02IC05IC0xNyAtMTBsLTMgLTFxLTkgMCAtMTYgNiBsLTI5IDIzcS03IDcgLTguNSAxNi41dDQuNSAxNy41cTcyIDEwMyA3MiAyMjlxMCAxMzIgLTc4IDIzOHEtNiA4IC00LjUgMTh0OS41IDE3bDI5IDIycTcgNSAxNSA1eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMzg7IiBkPSJNOTY3IDEwMDRoM3ExMSAtMSAxNyAtMTBxMTM1IC0xNzkgMTM1IC0zOTZxMCAtMTA1IC0zNCAtMjA2LjV0LTk4IC0xODUuNXEtNyAtOSAtMTcgLTEwaC0zcS05IDAgLTE2IDZsLTQyIDM0cS04IDYgLTkgMTZ0NSAxOHExMTEgMTUwIDExMSAzMjhxMCA5MCAtMjkuNSAxNzZ0LTg0LjUgMTU3cS02IDkgLTUgMTl0MTAgMTZsNDIgMzNxNyA1IDE1IDV6TTMyMSA4MTRsMjU4IDE3MnE5IDYgMTUgMi41dDYgLTEzLjV2LTc1MHEwIC0xMCAtNiAtMTMuNSB0LTE1IDIuNWwtMjU4IDE3MnEtMjEgMTQgLTQ2IDE0aC0yNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXYzNTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNWgyNTBxMjUgMCA0NiAxNHpNNzY2IDkwMGg0cTEwIC0xIDE2IC0xMHE5NiAtMTI5IDk2IC0yOTBxMCAtMTU0IC05MCAtMjgxcS02IC05IC0xNyAtMTBsLTMgLTFxLTkgMCAtMTYgNmwtMjkgMjNxLTcgNyAtOC41IDE2LjV0NC41IDE3LjVxNzIgMTAzIDcyIDIyOXEwIDEzMiAtNzggMjM4IHEtNiA4IC00LjUgMTguNXQ5LjUgMTYuNWwyOSAyMnE3IDUgMTUgNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDM5OyIgZD0iTTUwMCA5MDBoMTAwdi0xMDBoLTEwMHYtMTAwaC00MDB2LTEwMGgtMTAwdjYwMGg1MDB2LTMwMHpNMTIwMCA3MDBoLTIwMHYtMTAwaDIwMHYtMjAwaC0zMDB2MzAwaC0yMDB2MzAwaC0xMDB2MjAwaDYwMHYtNTAwek0xMDAgMTEwMHYtMzAwaDMwMHYzMDBoLTMwMHpNODAwIDExMDB2LTMwMGgzMDB2MzAwaC0zMDB6TTMwMCA5MDBoLTEwMHYxMDBoMTAwdi0xMDB6TTEwMDAgOTAwaC0xMDB2MTAwaDEwMHYtMTAwek0zMDAgNTAwaDIwMHYtNTAwIGgtNTAwdjUwMGgyMDB2MTAwaDEwMHYtMTAwek04MDAgMzAwaDIwMHYtMTAwaC0xMDB2LTEwMGgtMjAwdjEwMGgtMTAwdjEwMGgxMDB2MjAwaC0yMDB2MTAwaDMwMHYtMzAwek0xMDAgNDAwdi0zMDBoMzAwdjMwMGgtMzAwek0zMDAgMjAwaC0xMDB2MTAwaDEwMHYtMTAwek0xMjAwIDIwMGgtMTAwdjEwMGgxMDB2LTEwMHpNNzAwIDBoLTEwMHYxMDBoMTAwdi0xMDB6TTEyMDAgMGgtMzAwdjEwMGgzMDB2LTEwMHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDQwOyIgZD0iTTEwMCAyMDBoLTEwMHYxMDAwaDEwMHYtMTAwMHpNMzAwIDIwMGgtMTAwdjEwMDBoMTAwdi0xMDAwek03MDAgMjAwaC0yMDB2MTAwMGgyMDB2LTEwMDB6TTkwMCAyMDBoLTEwMHYxMDAwaDEwMHYtMTAwMHpNMTIwMCAyMDBoLTIwMHYxMDAwaDIwMHYtMTAwMHpNNDAwIDBoLTMwMHYxMDBoMzAwdi0xMDB6TTYwMCAwaC0xMDB2OTFoMTAwdi05MXpNODAwIDBoLTEwMHY5MWgxMDB2LTkxek0xMTAwIDBoLTIwMHY5MWgyMDB2LTkxeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwNDE7IiBkPSJNNTAwIDEyMDBsNjgyIC02ODJxOCAtOCA4IC0xOHQtOCAtMThsLTQ2NCAtNDY0cS04IC04IC0xOCAtOHQtMTggOGwtNjgyIDY4MmwxIDQ3NXEwIDEwIDcuNSAxNy41dDE3LjUgNy41aDQ3NHpNMzE5LjUgMTAyNC41cS0yOS41IDI5LjUgLTcxIDI5LjV0LTcxIC0yOS41dC0yOS41IC03MS41dDI5LjUgLTcxLjV0NzEgLTI5LjV0NzEgMjkuNXQyOS41IDcxLjV0LTI5LjUgNzEuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDQyOyIgZD0iTTUwMCAxMjAwbDY4MiAtNjgycTggLTggOCAtMTh0LTggLTE4bC00NjQgLTQ2NHEtOCAtOCAtMTggLTh0LTE4IDhsLTY4MiA2ODJsMSA0NzVxMCAxMCA3LjUgMTcuNXQxNy41IDcuNWg0NzR6TTgwMCAxMjAwbDY4MiAtNjgycTggLTggOCAtMTh0LTggLTE4bC00NjQgLTQ2NHEtOCAtOCAtMTggLTh0LTE4IDhsLTU2IDU2bDQyNCA0MjZsLTcwMCA3MDBoMTUwek0zMTkuNSAxMDI0LjVxLTI5LjUgMjkuNSAtNzEgMjkuNXQtNzEgLTI5LjUgdC0yOS41IC03MS41dDI5LjUgLTcxLjV0NzEgLTI5LjV0NzEgMjkuNXQyOS41IDcxLjV0LTI5LjUgNzEuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDQzOyIgZD0iTTMwMCAxMjAwaDgyNXE3NSAwIDc1IC03NXYtOTAwcTAgLTI1IC0xOCAtNDNsLTY0IC02NHEtOCAtOCAtMTMgLTUuNXQtNSAxMi41djk1MHEwIDEwIC03LjUgMTcuNXQtMTcuNSA3LjVoLTcwMHEtMjUgMCAtNDMgLTE4bC02NCAtNjRxLTggLTggLTUuNSAtMTN0MTIuNSAtNWg3MDBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di05NTBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC04NTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXY5NzUgcTAgMjUgMTggNDNsMTM5IDEzOXExOCAxOCA0MyAxOHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDQ0OyIgZD0iTTI1MCAxMjAwaDgwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTE1MGwtNDUwIDQ0NGwtNDUwIC00NDV2MTE1MXEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA0NTsiIGQ9Ik04MjIgMTIwMGgtNDQ0cS0xMSAwIC0xOSAtNy41dC05IC0xNy41bC03OCAtMzAxcS03IC0yNCA3IC00NWw1NyAtMTA4cTYgLTkgMTcuNSAtMTV0MjEuNSAtNmg0NTBxMTAgMCAyMS41IDZ0MTcuNSAxNWw2MiAxMDhxMTQgMjEgNyA0NWwtODMgMzAxcS0xIDEwIC05IDE3LjV0LTE5IDcuNXpNMTE3NSA4MDBoLTE1MHEtMTAgMCAtMjEgLTYuNXQtMTUgLTE1LjVsLTc4IC0xNTZxLTQgLTkgLTE1IC0xNS41dC0yMSAtNi41aC01NTAgcS0xMCAwIC0yMSA2LjV0LTE1IDE1LjVsLTc4IDE1NnEtNCA5IC0xNSAxNS41dC0yMSA2LjVoLTE1MHEtMTAgMCAtMTcuNSAtNy41dC03LjUgLTE3LjV2LTY1MHEwIC0xMCA3LjUgLTE3LjV0MTcuNSAtNy41aDE1MHExMCAwIDE3LjUgNy41dDcuNSAxNy41djE1MHEwIDEwIDcuNSAxNy41dDE3LjUgNy41aDc1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTE1MHEwIC0xMCA3LjUgLTE3LjV0MTcuNSAtNy41aDE1MHExMCAwIDE3LjUgNy41IHQ3LjUgMTcuNXY2NTBxMCAxMCAtNy41IDE3LjV0LTE3LjUgNy41ek04NTAgMjAwaC01MDBxLTEwIDAgLTE5LjUgLTd0LTExLjUgLTE3bC0zOCAtMTUycS0yIC0xMCAzLjUgLTE3dDE1LjUgLTdoNjAwcTEwIDAgMTUuNSA3dDMuNSAxN2wtMzggMTUycS0yIDEwIC0xMS41IDE3dC0xOS41IDd6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA0NjsiIGQ9Ik01MDAgMTEwMGgyMDBxNTYgMCAxMDIuNSAtMjAuNXQ3Mi41IC01MHQ0NCAtNTl0MjUgLTUwLjVsNiAtMjBoMTUwcTQxIDAgNzAuNSAtMjkuNXQyOS41IC03MC41di02MDBxMCAtNDEgLTI5LjUgLTcwLjV0LTcwLjUgLTI5LjVoLTEwMDBxLTQxIDAgLTcwLjUgMjkuNXQtMjkuNSA3MC41djYwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjVoMTUwcTIgOCA2LjUgMjEuNXQyNCA0OHQ0NSA2MXQ3MiA0OHQxMDIuNSAyMS41ek05MDAgODAwdi0xMDAgaDEwMHYxMDBoLTEwMHpNNjAwIDczMHEtOTUgMCAtMTYyLjUgLTY3LjV0LTY3LjUgLTE2Mi41dDY3LjUgLTE2Mi41dDE2Mi41IC02Ny41dDE2Mi41IDY3LjV0NjcuNSAxNjIuNXQtNjcuNSAxNjIuNXQtMTYyLjUgNjcuNXpNNjAwIDYwM3E0MyAwIDczIC0zMHQzMCAtNzN0LTMwIC03M3QtNzMgLTMwdC03MyAzMHQtMzAgNzN0MzAgNzN0NzMgMzB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA0NzsiIGQ9Ik02ODEgMTE5OWwzODUgLTk5OHEyMCAtNTAgNjAgLTkycTE4IC0xOSAzNi41IC0yOS41dDI3LjUgLTExLjVsMTAgLTJ2LTY2aC00MTd2NjZxNTMgMCA3NSA0My41dDUgODguNWwtODIgMjIyaC0zOTFxLTU4IC0xNDUgLTkyIC0yMzRxLTExIC0zNCAtNi41IC01N3QyNS41IC0zN3Q0NiAtMjB0NTUgLTZ2LTY2aC0zNjV2NjZxNTYgMjQgODQgNTJxMTIgMTIgMjUgMzAuNXQyMCAzMS41bDcgMTNsMzk5IDEwMDZoOTN6TTQxNiA1MjFoMzQwIGwtMTYyIDQ1N3oiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDQ4OyIgZD0iTTc1MyA2NDFxNSAtMSAxNC41IC00LjV0MzYgLTE1LjV0NTAuNSAtMjYuNXQ1My41IC00MHQ1MC41IC01NC41dDM1LjUgLTcwdDE0LjUgLTg3cTAgLTY3IC0yNy41IC0xMjUuNXQtNzEuNSAtOTcuNXQtOTguNSAtNjYuNXQtMTA4LjUgLTQwLjV0LTEwMiAtMTNoLTUwMHY4OXE0MSA3IDcwLjUgMzIuNXQyOS41IDY1LjV2ODI3cTAgMjQgLTAuNSAzNHQtMy41IDI0dC04LjUgMTkuNXQtMTcgMTMuNXQtMjggMTIuNXQtNDIuNSAxMS41djcxIGw0NzEgLTFxNTcgMCAxMTUuNSAtMjAuNXQxMDggLTU3dDgwLjUgLTk0dDMxIC0xMjQuNXEwIC01MSAtMTUuNSAtOTYuNXQtMzggLTc0LjV0LTQ1IC01MC41dC0zOC41IC0zMC41ek00MDAgNzAwaDEzOXE3OCAwIDEzMC41IDQ4LjV0NTIuNSAxMjIuNXEwIDQxIC04LjUgNzAuNXQtMjkuNSA1NS41dC02Mi41IDM5LjV0LTEwMy41IDEzLjVoLTExOHYtMzUwek00MDAgMjAwaDIxNnE4MCAwIDEyMSA1MC41dDQxIDEzMC41cTAgOTAgLTYyLjUgMTU0LjUgdC0xNTYuNSA2NC41aC0xNTl2LTQwMHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDQ5OyIgZD0iTTg3NyAxMjAwbDIgLTU3cS04MyAtMTkgLTExNiAtNDUuNXQtNDAgLTY2LjVsLTEzMiAtODM5cS05IC00OSAxMyAtNjl0OTYgLTI2di05N2gtNTAwdjk3cTE4NiAxNiAyMDAgOThsMTczIDgzMnEzIDE3IDMgMzB0LTEuNSAyMi41dC05IDE3LjV0LTEzLjUgMTIuNXQtMjEuNSAxMHQtMjYgOC41dC0zMy41IDEwcS0xMyAzIC0xOSA1djU3aDQyNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDUwOyIgZD0iTTEzMDAgOTAwaC01MHEwIDIxIC00IDM3dC05LjUgMjYuNXQtMTggMTcuNXQtMjIgMTF0LTI4LjUgNS41dC0zMSAydC0zNyAwLjVoLTIwMHYtODUwcTAgLTIyIDI1IC0zNC41dDUwIC0xMy41bDI1IC0ydi0xMDBoLTQwMHYxMDBxNCAwIDExIDAuNXQyNCAzdDMwIDd0MjQgMTV0MTEgMjQuNXY4NTBoLTIwMHEtMjUgMCAtMzcgLTAuNXQtMzEgLTJ0LTI4LjUgLTUuNXQtMjIgLTExdC0xOCAtMTcuNXQtOS41IC0yNi41dC00IC0zN2gtNTB2MzAwIGgxMDAwdi0zMDB6TTE3NSAxMDAwaC03NXYtODAwaDc1bC0xMjUgLTE2N2wtMTI1IDE2N2g3NXY4MDBoLTc1bDEyNSAxNjd6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA1MTsiIGQ9Ik0xMTAwIDkwMGgtNTBxMCAyMSAtNCAzN3QtOS41IDI2LjV0LTE4IDE3LjV0LTIyIDExdC0yOC41IDUuNXQtMzEgMnQtMzcgMC41aC0yMDB2LTY1MHEwIC0yMiAyNSAtMzQuNXQ1MCAtMTMuNWwyNSAtMnYtMTAwaC00MDB2MTAwcTQgMCAxMSAwLjV0MjQgM3QzMCA3dDI0IDE1dDExIDI0LjV2NjUwaC0yMDBxLTI1IDAgLTM3IC0wLjV0LTMxIC0ydC0yOC41IC01LjV0LTIyIC0xMXQtMTggLTE3LjV0LTkuNSAtMjYuNXQtNCAtMzdoLTUwdjMwMCBoMTAwMHYtMzAwek0xMTY3IDUwbC0xNjcgLTEyNXY3NWgtODAwdi03NWwtMTY3IDEyNWwxNjcgMTI1di03NWg4MDB2NzV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA1MjsiIGQ9Ik01MCAxMTAwaDYwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC02MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTUwIDgwMGgxMDAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTEwMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMCBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek01MCA1MDBoODAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTgwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNNTAgMjAwaDExMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTEwMCBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA1MzsiIGQ9Ik0yNTAgMTEwMGg3MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNzAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek01MCA4MDBoMTEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDAgcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNMjUwIDUwMGg3MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNzAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek01MCAyMDBoMTEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMTAwIHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDU0OyIgZD0iTTUwMCA5NTB2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWg2MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNjAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXpNMTAwIDY1MHYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDEwMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTAwMCBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41ek0zMDAgMzUwdjEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoODAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTgwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV6TTAgNTB2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWgxMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDAgcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDU1OyIgZD0iTTUwIDExMDBoMTEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek01MCA4MDBoMTEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDAgcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNNTAgNTAwaDExMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTEwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNNTAgMjAwaDExMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTEwMCBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA1NjsiIGQ9Ik01MCAxMTAwaDEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTM1MCAxMTAwaDgwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC04MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMCBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek01MCA4MDBoMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTEwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNMzUwIDgwMGg4MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtODAwIHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNNTAgNTAwaDEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTM1MCA1MDBoODAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDAgcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC04MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTUwIDIwMGgxMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek0zNTAgMjAwaDgwMCBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtODAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwNTc7IiBkPSJNNDAwIDBoLTEwMHYxMTAwaDEwMHYtMTEwMHpNNTUwIDExMDBoMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTEwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNNTUwIDgwMGg1MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNTAwIHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNMjY3IDU1MGwtMTY3IC0xMjV2NzVoLTIwMHYxMDBoMjAwdjc1ek01NTAgNTAwaDMwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0zMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTU1MCAyMDBoNjAwIHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC02MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA1ODsiIGQ9Ik01MCAxMTAwaDEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTkwMCAwaC0xMDB2MTEwMGgxMDB2LTExMDB6TTUwIDgwMGg1MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNTAwIHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNMTEwMCA2MDBoMjAwdi0xMDBoLTIwMHYtNzVsLTE2NyAxMjVsMTY3IDEyNXYtNzV6TTUwIDUwMGgzMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMzAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek01MCAyMDBoNjAwIHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC02MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA1OTsiIGQ9Ik03NSAxMDAwaDc1MHEzMSAwIDUzIC0yMnQyMiAtNTN2LTY1MHEwIC0zMSAtMjIgLTUzdC01MyAtMjJoLTc1MHEtMzEgMCAtNTMgMjJ0LTIyIDUzdjY1MHEwIDMxIDIyIDUzdDUzIDIyek0xMjAwIDMwMGwtMzAwIDMwMGwzMDAgMzAwdi02MDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA2MDsiIGQ9Ik00NCAxMTAwaDExMTJxMTggMCAzMSAtMTN0MTMgLTMxdi0xMDEycTAgLTE4IC0xMyAtMzF0LTMxIC0xM2gtMTExMnEtMTggMCAtMzEgMTN0LTEzIDMxdjEwMTJxMCAxOCAxMyAzMXQzMSAxM3pNMTAwIDEwMDB2LTczN2wyNDcgMTgybDI5OCAtMTMxbC03NCAxNTZsMjkzIDMxOGwyMzYgLTI4OHY1MDBoLTEwMDB6TTM0MiA4ODRxNTYgMCA5NSAtMzl0MzkgLTk0LjV0LTM5IC05NXQtOTUgLTM5LjV0LTk1IDM5LjV0LTM5IDk1dDM5IDk0LjUgdDk1IDM5eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwNjI7IiBkPSJNNjQ4IDExNjlxMTE3IDAgMjE2IC02MHQxNTYuNSAtMTYxdDU3LjUgLTIxOHEwIC0xMTUgLTcwIC0yNThxLTY5IC0xMDkgLTE1OCAtMjI1LjV0LTE0MyAtMTc5LjVsLTU0IC02MnEtOSA4IC0yNS41IDI0LjV0LTYzLjUgNjcuNXQtOTEgMTAzdC05OC41IDEyOHQtOTUuNSAxNDhxLTYwIDEzMiAtNjAgMjQ5cTAgODggMzQgMTY5LjV0OTEuNSAxNDJ0MTM3IDk2LjV0MTY2LjUgMzZ6TTY1Mi41IDk3NHEtOTEuNSAwIC0xNTYuNSAtNjUgdC02NSAtMTU3dDY1IC0xNTYuNXQxNTYuNSAtNjQuNXQxNTYuNSA2NC41dDY1IDE1Ni41dC02NSAxNTd0LTE1Ni41IDY1eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwNjM7IiBkPSJNNjAwIDExNzdxMTE3IDAgMjI0IC00NS41dDE4NC41IC0xMjN0MTIzIC0xODQuNXQ0NS41IC0yMjR0LTQ1LjUgLTIyNHQtMTIzIC0xODQuNXQtMTg0LjUgLTEyM3QtMjI0IC00NS41dC0yMjQgNDUuNXQtMTg0LjUgMTIzdC0xMjMgMTg0LjV0LTQ1LjUgMjI0dDQ1LjUgMjI0dDEyMyAxODQuNXQxODQuNSAxMjN0MjI0IDQ1LjV6TTYwMCAxNzN2ODU0cS0xMTYgMCAtMjE0LjUgLTU3dC0xNTUuNSAtMTU1LjV0LTU3IC0yMTQuNXQ1NyAtMjE0LjUgdDE1NS41IC0xNTUuNXQyMTQuNSAtNTd6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA2NDsiIGQ9Ik01NTQgMTI5NXEyMSAtNzIgNTcuNSAtMTQzLjV0NzYgLTEzMHQ4MyAtMTE4dDgyLjUgLTExN3Q3MCAtMTE2dDQ5LjUgLTEyNnQxOC41IC0xMzYuNXEwIC03MSAtMjUuNSAtMTM1dC02OC41IC0xMTF0LTk5IC04MnQtMTE4LjUgLTU0dC0xMjUuNSAtMjNxLTg0IDUgLTE2MS41IDM0dC0xMzkuNSA3OC41dC05OSAxMjV0LTM3IDE2NC41cTAgNjkgMTggMTM2LjV0NDkuNSAxMjYuNXQ2OS41IDExNi41dDgxLjUgMTE3LjV0ODMuNSAxMTkgdDc2LjUgMTMxdDU4LjUgMTQzek0zNDQgNzEwcS0yMyAtMzMgLTQzLjUgLTcwLjV0LTQwLjUgLTEwMi41dC0xNyAtMTIzcTEgLTM3IDE0LjUgLTY5LjV0MzAgLTUydDQxIC0zN3QzOC41IC0yNC41dDMzIC0xNXEyMSAtNyAzMiAtMXQxMyAyMmw2IDM0cTIgMTAgLTIuNSAyMnQtMTMuNSAxOXEtNSA0IC0xNCAxMnQtMjkuNSA0MC41dC0zMi41IDczLjVxLTI2IDg5IDYgMjcxcTIgMTEgLTYgMTFxLTggMSAtMTUgLTEweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwNjU7IiBkPSJNMTAwMCAxMDEzbDEwOCAxMTVxMiAxIDUgMnQxMyAydDIwLjUgLTF0MjUgLTkuNXQyOC41IC0yMS41cTIyIC0yMiAyNyAtNDN0MCAtMzJsLTYgLTEwbC0xMDggLTExNXpNMzUwIDExMDBoNDAwcTUwIDAgMTA1IC0xM2wtMTg3IC0xODdoLTM2OHEtNDEgMCAtNzAuNSAtMjkuNXQtMjkuNSAtNzAuNXYtNTAwcTAgLTQxIDI5LjUgLTcwLjV0NzAuNSAtMjkuNWg1MDBxNDEgMCA3MC41IDI5LjV0MjkuNSA3MC41djE4MmwyMDAgMjAwdi0zMzIgcTAgLTE2NSAtOTMuNSAtMjU3LjV0LTI1Ni41IC05Mi41aC00MDBxLTE2NSAwIC0yNTcuNSA5Mi41dC05Mi41IDI1Ny41djQwMHEwIDE2NSA5Mi41IDI1Ny41dDI1Ny41IDkyLjV6TTEwMDkgODAzbC0zNjIgLTM2MmwtMTYxIC01MGw1NSAxNzBsMzU1IDM1NXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDY2OyIgZD0iTTM1MCAxMTAwaDM2MXEtMTY0IC0xNDYgLTIxNiAtMjAwaC0xOTVxLTQxIDAgLTcwLjUgLTI5LjV0LTI5LjUgLTcwLjV2LTUwMHEwIC00MSAyOS41IC03MC41dDcwLjUgLTI5LjVoNTAwcTQxIDAgNzAuNSAyOS41dDI5LjUgNzAuNWwyMDAgMTUzdi0xMDNxMCAtMTY1IC05Mi41IC0yNTcuNXQtMjU3LjUgLTkyLjVoLTQwMHEtMTY1IDAgLTI1Ny41IDkyLjV0LTkyLjUgMjU3LjV2NDAwcTAgMTY1IDkyLjUgMjU3LjV0MjU3LjUgOTIuNXogTTgyNCAxMDczbDMzOSAtMzAxcTggLTcgOCAtMTcuNXQtOCAtMTcuNWwtMzQwIC0zMDZxLTcgLTYgLTEyLjUgLTR0LTYuNSAxMXYyMDNxLTI2IDEgLTU0LjUgMHQtNzguNSAtNy41dC05MiAtMTcuNXQtODYgLTM1dC03MCAtNTdxMTAgNTkgMzMgMTA4dDUxLjUgODEuNXQ2NSA1OC41dDY4LjUgNDAuNXQ2NyAyNC41dDU2IDEzLjV0NDAgNC41djIxMHExIDEwIDYuNSAxMi41dDEzLjUgLTQuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDY3OyIgZD0iTTM1MCAxMTAwaDM1MHE2MCAwIDEyNyAtMjNsLTE3OCAtMTc3aC0zNDlxLTQxIDAgLTcwLjUgLTI5LjV0LTI5LjUgLTcwLjV2LTUwMHEwIC00MSAyOS41IC03MC41dDcwLjUgLTI5LjVoNTAwcTQxIDAgNzAuNSAyOS41dDI5LjUgNzAuNXY2OWwyMDAgMjAwdi0yMTlxMCAtMTY1IC05Mi41IC0yNTcuNXQtMjU3LjUgLTkyLjVoLTQwMHEtMTY1IDAgLTI1Ny41IDkyLjV0LTkyLjUgMjU3LjV2NDAwcTAgMTY1IDkyLjUgMjU3LjV0MjU3LjUgOTIuNXogTTY0MyA2MzlsMzk1IDM5NXE3IDcgMTcuNSA3dDE3LjUgLTdsMTAxIC0xMDFxNyAtNyA3IC0xNy41dC03IC0xNy41bC01MzEgLTUzMnEtNyAtNyAtMTcuNSAtN3QtMTcuNSA3bC0yNDggMjQ4cS03IDcgLTcgMTcuNXQ3IDE3LjVsMTAxIDEwMXE3IDcgMTcuNSA3dDE3LjUgLTdsMTExIC0xMTFxOCAtNyAxOCAtN3QxOCA3eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwNjg7IiBkPSJNMzE4IDkxOGwyNjQgMjY0cTggOCAxOCA4dDE4IC04bDI2MCAtMjY0cTcgLTggNC41IC0xM3QtMTIuNSAtNWgtMTcwdi0yMDBoMjAwdjE3M3EwIDEwIDUgMTJ0MTMgLTVsMjY0IC0yNjBxOCAtNyA4IC0xNy41dC04IC0xNy41bC0yNjQgLTI2NXEtOCAtNyAtMTMgLTV0LTUgMTJ2MTczaC0yMDB2LTIwMGgxNzBxMTAgMCAxMi41IC01dC00LjUgLTEzbC0yNjAgLTI2NHEtOCAtOCAtMTggLTh0LTE4IDhsLTI2NCAyNjRxLTggOCAtNS41IDEzIHQxMi41IDVoMTc1djIwMGgtMjAwdi0xNzNxMCAtMTAgLTUgLTEydC0xMyA1bC0yNjQgMjY1cS04IDcgLTggMTcuNXQ4IDE3LjVsMjY0IDI2MHE4IDcgMTMgNXQ1IC0xMnYtMTczaDIwMHYyMDBoLTE3NXEtMTAgMCAtMTIuNSA1dDUuNSAxM3oiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDY5OyIgZD0iTTI1MCAxMTAwaDEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNDM4bDQ2NCA0NTNxMTUgMTQgMjUuNSAxMHQxMC41IC0yNXYtMTAwMHEwIC0yMSAtMTAuNSAtMjV0LTI1LjUgMTBsLTQ2NCA0NTN2LTQzOHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDcwOyIgZD0iTTUwIDExMDBoMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di00MzhsNDY0IDQ1M3ExNSAxNCAyNS41IDEwdDEwLjUgLTI1di00MzhsNDY0IDQ1M3ExNSAxNCAyNS41IDEwdDEwLjUgLTI1di0xMDAwcTAgLTIxIC0xMC41IC0yNXQtMjUuNSAxMGwtNDY0IDQ1M3YtNDM4cTAgLTIxIC0xMC41IC0yNXQtMjUuNSAxMGwtNDY0IDQ1M3YtNDM4cTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMDBxLTIxIDAgLTM1LjUgMTQuNSB0LTE0LjUgMzUuNXYxMDAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDcxOyIgZD0iTTEyMDAgMTA1MHYtMTAwMHEwIC0yMSAtMTAuNSAtMjV0LTI1LjUgMTBsLTQ2NCA0NTN2LTQzOHEwIC0yMSAtMTAuNSAtMjV0LTI1LjUgMTBsLTQ5MiA0ODBxLTE1IDE0IC0xNSAzNXQxNSAzNWw0OTIgNDgwcTE1IDE0IDI1LjUgMTB0MTAuNSAtMjV2LTQzOGw0NjQgNDUzcTE1IDE0IDI1LjUgMTB0MTAuNSAtMjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA3MjsiIGQ9Ik0yNDMgMTA3NGw4MTQgLTQ5OHExOCAtMTEgMTggLTI2dC0xOCAtMjZsLTgxNCAtNDk4cS0xOCAtMTEgLTMwLjUgLTR0LTEyLjUgMjh2MTAwMHEwIDIxIDEyLjUgMjh0MzAuNSAtNHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDczOyIgZD0iTTI1MCAxMDAwaDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtODAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djgwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTY1MCAxMDAwaDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtODAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djgwMCBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwNzQ7IiBkPSJNMTEwMCA5NTB2LTgwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtODAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXY4MDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDgwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDc1OyIgZD0iTTUwMCA2MTJ2NDM4cTAgMjEgMTAuNSAyNXQyNS41IC0xMGw0OTIgLTQ4MHExNSAtMTQgMTUgLTM1dC0xNSAtMzVsLTQ5MiAtNDgwcS0xNSAtMTQgLTI1LjUgLTEwdC0xMC41IDI1djQzOGwtNDY0IC00NTNxLTE1IC0xNCAtMjUuNSAtMTB0LTEwLjUgMjV2MTAwMHEwIDIxIDEwLjUgMjV0MjUuNSAtMTB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA3NjsiIGQ9Ik0xMDQ4IDExMDJsMTAwIDFxMjAgMCAzNSAtMTQuNXQxNSAtMzUuNWw1IC0xMDAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41bC0xMDAgLTFxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41bC0yIDQzN2wtNDYzIC00NTRxLTE0IC0xNSAtMjQuNSAtMTAuNXQtMTAuNSAyNS41bC0yIDQzN2wtNDYyIC00NTVxLTE1IC0xNCAtMjUuNSAtOS41dC0xMC41IDI0LjVsLTUgMTAwMHEwIDIxIDEwLjUgMjUuNXQyNS41IC0xMC41bDQ2NiAtNDUwIGwtMiA0MzhxMCAyMCAxMC41IDI0LjV0MjUuNSAtOS41bDQ2NiAtNDUxbC0yIDQzOHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA3NzsiIGQ9Ik04NTAgMTEwMGgxMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTEwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2NDM4bC00NjQgLTQ1M3EtMTUgLTE0IC0yNS41IC0xMHQtMTAuNSAyNXYxMDAwcTAgMjEgMTAuNSAyNXQyNS41IC0xMGw0NjQgLTQ1M3Y0MzhxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwNzg7IiBkPSJNNjg2IDEwODFsNTAxIC01NDBxMTUgLTE1IDEwLjUgLTI2dC0yNi41IC0xMWgtMTA0MnEtMjIgMCAtMjYuNSAxMXQxMC41IDI2bDUwMSA1NDBxMTUgMTUgMzYgMTV0MzYgLTE1ek0xNTAgNDAwaDEwMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTAwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDc5OyIgZD0iTTg4NSA5MDBsLTM1MiAtMzUzbDM1MiAtMzUzbC0xOTcgLTE5OGwtNTUyIDU1Mmw1NTIgNTUweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwODA7IiBkPSJNMTA2NCA1NDdsLTU1MSAtNTUxbC0xOTggMTk4bDM1MyAzNTNsLTM1MyAzNTNsMTk4IDE5OHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDgxOyIgZD0iTTYwMCAxMTc3cTExNyAwIDIyNCAtNDUuNXQxODQuNSAtMTIzdDEyMyAtMTg0LjV0NDUuNSAtMjI0dC00NS41IC0yMjR0LTEyMyAtMTg0LjV0LTE4NC41IC0xMjN0LTIyNCAtNDUuNXQtMjI0IDQ1LjV0LTE4NC41IDEyM3QtMTIzIDE4NC41dC00NS41IDIyNHQ0NS41IDIyNHQxMjMgMTg0LjV0MTg0LjUgMTIzdDIyNCA0NS41ek02NTAgOTAwaC0xMDBxLTIxIDAgLTM1LjUgLTE0LjV0LTE0LjUgLTM1LjV2LTE1MGgtMTUwIHEtMjEgMCAtMzUuNSAtMTQuNXQtMTQuNSAtMzUuNXYtMTAwcTAgLTIxIDE0LjUgLTM1LjV0MzUuNSAtMTQuNWgxNTB2LTE1MHEwIC0yMSAxNC41IC0zNS41dDM1LjUgLTE0LjVoMTAwcTIxIDAgMzUuNSAxNC41dDE0LjUgMzUuNXYxNTBoMTUwcTIxIDAgMzUuNSAxNC41dDE0LjUgMzUuNXYxMDBxMCAyMSAtMTQuNSAzNS41dC0zNS41IDE0LjVoLTE1MHYxNTBxMCAyMSAtMTQuNSAzNS41dC0zNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA4MjsiIGQ9Ik02MDAgMTE3N3ExMTcgMCAyMjQgLTQ1LjV0MTg0LjUgLTEyM3QxMjMgLTE4NC41dDQ1LjUgLTIyNHQtNDUuNSAtMjI0dC0xMjMgLTE4NC41dC0xODQuNSAtMTIzdC0yMjQgLTQ1LjV0LTIyNCA0NS41dC0xODQuNSAxMjN0LTEyMyAxODQuNXQtNDUuNSAyMjR0NDUuNSAyMjR0MTIzIDE4NC41dDE4NC41IDEyM3QyMjQgNDUuNXpNODUwIDcwMGgtNTAwcS0yMSAwIC0zNS41IC0xNC41dC0xNC41IC0zNS41di0xMDBxMCAtMjEgMTQuNSAtMzUuNSB0MzUuNSAtMTQuNWg1MDBxMjEgMCAzNS41IDE0LjV0MTQuNSAzNS41djEwMHEwIDIxIC0xNC41IDM1LjV0LTM1LjUgMTQuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDgzOyIgZD0iTTYwMCAxMTc3cTExNyAwIDIyNCAtNDUuNXQxODQuNSAtMTIzdDEyMyAtMTg0LjV0NDUuNSAtMjI0dC00NS41IC0yMjR0LTEyMyAtMTg0LjV0LTE4NC41IC0xMjN0LTIyNCAtNDUuNXQtMjI0IDQ1LjV0LTE4NC41IDEyM3QtMTIzIDE4NC41dC00NS41IDIyNHQ0NS41IDIyNHQxMjMgMTg0LjV0MTg0LjUgMTIzdDIyNCA0NS41ek03NDEuNSA5MTNxLTEyLjUgMCAtMjEuNSAtOWwtMTIwIC0xMjBsLTEyMCAxMjBxLTkgOSAtMjEuNSA5IHQtMjEuNSAtOWwtMTQxIC0xNDFxLTkgLTkgLTkgLTIxLjV0OSAtMjEuNWwxMjAgLTEyMGwtMTIwIC0xMjBxLTkgLTkgLTkgLTIxLjV0OSAtMjEuNWwxNDEgLTE0MXE5IC05IDIxLjUgLTl0MjEuNSA5bDEyMCAxMjBsMTIwIC0xMjBxOSAtOSAyMS41IC05dDIxLjUgOWwxNDEgMTQxcTkgOSA5IDIxLjV0LTkgMjEuNWwtMTIwIDEyMGwxMjAgMTIwcTkgOSA5IDIxLjV0LTkgMjEuNWwtMTQxIDE0MXEtOSA5IC0yMS41IDl6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA4NDsiIGQ9Ik02MDAgMTE3N3ExMTcgMCAyMjQgLTQ1LjV0MTg0LjUgLTEyM3QxMjMgLTE4NC41dDQ1LjUgLTIyNHQtNDUuNSAtMjI0dC0xMjMgLTE4NC41dC0xODQuNSAtMTIzdC0yMjQgLTQ1LjV0LTIyNCA0NS41dC0xODQuNSAxMjN0LTEyMyAxODQuNXQtNDUuNSAyMjR0NDUuNSAyMjR0MTIzIDE4NC41dDE4NC41IDEyM3QyMjQgNDUuNXpNNTQ2IDYyM2wtODQgODVxLTcgNyAtMTcuNSA3dC0xOC41IC03bC0xMzkgLTEzOXEtNyAtOCAtNyAtMTh0NyAtMTggbDI0MiAtMjQxcTcgLTggMTcuNSAtOHQxNy41IDhsMzc1IDM3NXE3IDcgNyAxNy41dC03IDE4LjVsLTEzOSAxMzlxLTcgNyAtMTcuNSA3dC0xNy41IC03eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwODU7IiBkPSJNNjAwIDExNzdxMTE3IDAgMjI0IC00NS41dDE4NC41IC0xMjN0MTIzIC0xODQuNXQ0NS41IC0yMjR0LTQ1LjUgLTIyNHQtMTIzIC0xODQuNXQtMTg0LjUgLTEyM3QtMjI0IC00NS41dC0yMjQgNDUuNXQtMTg0LjUgMTIzdC0xMjMgMTg0LjV0LTQ1LjUgMjI0dDQ1LjUgMjI0dDEyMyAxODQuNXQxODQuNSAxMjN0MjI0IDQ1LjV6TTU4OCA5NDFxLTI5IDAgLTU5IC01LjV0LTYzIC0yMC41dC01OCAtMzguNXQtNDEuNSAtNjN0LTE2LjUgLTg5LjUgcTAgLTI1IDIwIC0yNWgxMzFxMzAgLTUgMzUgMTFxNiAyMCAyMC41IDI4dDQ1LjUgOHEyMCAwIDMxLjUgLTEwLjV0MTEuNSAtMjguNXEwIC0yMyAtNyAtMzR0LTI2IC0xOHEtMSAwIC0xMy41IC00dC0xOS41IC03LjV0LTIwIC0xMC41dC0yMiAtMTd0LTE4LjUgLTI0dC0xNS41IC0zNXQtOCAtNDZxLTEgLTggNS41IC0xNi41dDIwLjUgLTguNWgxNzNxNyAwIDIyIDh0MzUgMjh0MzcuNSA0OHQyOS41IDc0dDEyIDEwMHEwIDQ3IC0xNyA4MyB0LTQyLjUgNTd0LTU5LjUgMzQuNXQtNjQgMTh0LTU5IDQuNXpNNjc1IDQwMGgtMTUwcS0xMCAwIC0xNy41IC03LjV0LTcuNSAtMTcuNXYtMTUwcTAgLTEwIDcuNSAtMTcuNXQxNy41IC03LjVoMTUwcTEwIDAgMTcuNSA3LjV0Ny41IDE3LjV2MTUwcTAgMTAgLTcuNSAxNy41dC0xNy41IDcuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDg2OyIgZD0iTTYwMCAxMTc3cTExNyAwIDIyNCAtNDUuNXQxODQuNSAtMTIzdDEyMyAtMTg0LjV0NDUuNSAtMjI0dC00NS41IC0yMjR0LTEyMyAtMTg0LjV0LTE4NC41IC0xMjN0LTIyNCAtNDUuNXQtMjI0IDQ1LjV0LTE4NC41IDEyM3QtMTIzIDE4NC41dC00NS41IDIyNHQ0NS41IDIyNHQxMjMgMTg0LjV0MTg0LjUgMTIzdDIyNCA0NS41ek02NzUgMTAwMGgtMTUwcS0xMCAwIC0xNy41IC03LjV0LTcuNSAtMTcuNXYtMTUwcTAgLTEwIDcuNSAtMTcuNSB0MTcuNSAtNy41aDE1MHExMCAwIDE3LjUgNy41dDcuNSAxNy41djE1MHEwIDEwIC03LjUgMTcuNXQtMTcuNSA3LjV6TTY3NSA3MDBoLTI1MHEtMTAgMCAtMTcuNSAtNy41dC03LjUgLTE3LjV2LTUwcTAgLTEwIDcuNSAtMTcuNXQxNy41IC03LjVoNzV2LTIwMGgtNzVxLTEwIDAgLTE3LjUgLTcuNXQtNy41IC0xNy41di01MHEwIC0xMCA3LjUgLTE3LjV0MTcuNSAtNy41aDM1MHExMCAwIDE3LjUgNy41dDcuNSAxNy41djUwcTAgMTAgLTcuNSAxNy41IHQtMTcuNSA3LjVoLTc1djI3NXEwIDEwIC03LjUgMTcuNXQtMTcuNSA3LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA4NzsiIGQ9Ik01MjUgMTIwMGgxNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di0xOTRxMTAzIC0yNyAxNzguNSAtMTAyLjV0MTAyLjUgLTE3OC41aDE5NHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTE1MHEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTE5NHEtMjcgLTEwMyAtMTAyLjUgLTE3OC41dC0xNzguNSAtMTAyLjV2LTE5NHEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTE1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djE5NCBxLTEwMyAyNyAtMTc4LjUgMTAyLjV0LTEwMi41IDE3OC41aC0xOTRxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXYxNTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNWgxOTRxMjcgMTAzIDEwMi41IDE3OC41dDE3OC41IDEwMi41djE5NHEwIDEwIDcuNSAxNy41dDE3LjUgNy41ek03MDAgODkzdi0xNjhxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0xNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXYxNjhxLTY4IC0yMyAtMTE5IC03NCB0LTc0IC0xMTloMTY4cTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtMTUwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtMTY4cTIzIC02OCA3NCAtMTE5dDExOSAtNzR2MTY4cTAgMTAgNy41IDE3LjV0MTcuNSA3LjVoMTUwcTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtMTY4cTY4IDIzIDExOSA3NHQ3NCAxMTloLTE2OHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djE1MHEwIDEwIDcuNSAxNy41dDE3LjUgNy41aDE2OCBxLTIzIDY4IC03NCAxMTl0LTExOSA3NHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDg4OyIgZD0iTTYwMCAxMTc3cTExNyAwIDIyNCAtNDUuNXQxODQuNSAtMTIzdDEyMyAtMTg0LjV0NDUuNSAtMjI0dC00NS41IC0yMjR0LTEyMyAtMTg0LjV0LTE4NC41IC0xMjN0LTIyNCAtNDUuNXQtMjI0IDQ1LjV0LTE4NC41IDEyM3QtMTIzIDE4NC41dC00NS41IDIyNHQ0NS41IDIyNHQxMjMgMTg0LjV0MTg0LjUgMTIzdDIyNCA0NS41ek02MDAgMTAyN3EtMTE2IDAgLTIxNC41IC01N3QtMTU1LjUgLTE1NS41dC01NyAtMjE0LjV0NTcgLTIxNC41IHQxNTUuNSAtMTU1LjV0MjE0LjUgLTU3dDIxNC41IDU3dDE1NS41IDE1NS41dDU3IDIxNC41dC01NyAyMTQuNXQtMTU1LjUgMTU1LjV0LTIxNC41IDU3ek03NTkgODIzbDY0IC02NHE3IC03IDcgLTE3LjV0LTcgLTE3LjVsLTEyNCAtMTI0bDEyNCAtMTI0cTcgLTcgNyAtMTcuNXQtNyAtMTcuNWwtNjQgLTY0cS03IC03IC0xNy41IC03dC0xNy41IDdsLTEyNCAxMjRsLTEyNCAtMTI0cS03IC03IC0xNy41IC03dC0xNy41IDdsLTY0IDY0IHEtNyA3IC03IDE3LjV0NyAxNy41bDEyNCAxMjRsLTEyNCAxMjRxLTcgNyAtNyAxNy41dDcgMTcuNWw2NCA2NHE3IDcgMTcuNSA3dDE3LjUgLTdsMTI0IC0xMjRsMTI0IDEyNHE3IDcgMTcuNSA3dDE3LjUgLTd6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA4OTsiIGQ9Ik02MDAgMTE3N3ExMTcgMCAyMjQgLTQ1LjV0MTg0LjUgLTEyM3QxMjMgLTE4NC41dDQ1LjUgLTIyNHQtNDUuNSAtMjI0dC0xMjMgLTE4NC41dC0xODQuNSAtMTIzdC0yMjQgLTQ1LjV0LTIyNCA0NS41dC0xODQuNSAxMjN0LTEyMyAxODQuNXQtNDUuNSAyMjR0NDUuNSAyMjR0MTIzIDE4NC41dDE4NC41IDEyM3QyMjQgNDUuNXpNNjAwIDEwMjdxLTExNiAwIC0yMTQuNSAtNTd0LTE1NS41IC0xNTUuNXQtNTcgLTIxNC41dDU3IC0yMTQuNSB0MTU1LjUgLTE1NS41dDIxNC41IC01N3QyMTQuNSA1N3QxNTUuNSAxNTUuNXQ1NyAyMTQuNXQtNTcgMjE0LjV0LTE1NS41IDE1NS41dC0yMTQuNSA1N3pNNzgyIDc4OGwxMDYgLTEwNnE3IC03IDcgLTE3LjV0LTcgLTE3LjVsLTMyMCAtMzIxcS04IC03IC0xOCAtN3QtMTggN2wtMjAyIDIwM3EtOCA3IC04IDE3LjV0OCAxNy41bDEwNiAxMDZxNyA4IDE3LjUgOHQxNy41IC04bDc5IC03OWwxOTcgMTk3cTcgNyAxNy41IDd0MTcuNSAtN3oiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDkwOyIgZD0iTTYwMCAxMTc3cTExNyAwIDIyNCAtNDUuNXQxODQuNSAtMTIzdDEyMyAtMTg0LjV0NDUuNSAtMjI0dC00NS41IC0yMjR0LTEyMyAtMTg0LjV0LTE4NC41IC0xMjN0LTIyNCAtNDUuNXQtMjI0IDQ1LjV0LTE4NC41IDEyM3QtMTIzIDE4NC41dC00NS41IDIyNHQ0NS41IDIyNHQxMjMgMTg0LjV0MTg0LjUgMTIzdDIyNCA0NS41ek02MDAgMTAyN3EtMTE2IDAgLTIxNC41IC01N3QtMTU1LjUgLTE1NS41dC01NyAtMjE0LjVxMCAtMTIwIDY1IC0yMjUgbDU4NyA1ODdxLTEwNSA2NSAtMjI1IDY1ek05NjUgODE5bC01ODQgLTU4NHExMDQgLTYyIDIxOSAtNjJxMTE2IDAgMjE0LjUgNTd0MTU1LjUgMTU1LjV0NTcgMjE0LjVxMCAxMTUgLTYyIDIxOXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDkxOyIgZD0iTTM5IDU4Mmw1MjIgNDI3cTE2IDEzIDI3LjUgOHQxMS41IC0yNnYtMjkxaDU1MHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC01NTB2LTI5MXEwIC0yMSAtMTEuNSAtMjZ0LTI3LjUgOGwtNTIyIDQyN3EtMTYgMTMgLTE2IDMydDE2IDMyeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwOTI7IiBkPSJNNjM5IDEwMDlsNTIyIC00MjdxMTYgLTEzIDE2IC0zMnQtMTYgLTMybC01MjIgLTQyN3EtMTYgLTEzIC0yNy41IC04dC0xMS41IDI2djI5MWgtNTUwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYyMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDU1MHYyOTFxMCAyMSAxMS41IDI2dDI3LjUgLTh6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA5MzsiIGQ9Ik02ODIgMTE2MWw0MjcgLTUyMnExMyAtMTYgOCAtMjcuNXQtMjYgLTExLjVoLTI5MXYtNTUwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djU1MGgtMjkxcS0yMSAwIC0yNiAxMS41dDggMjcuNWw0MjcgNTIycTEzIDE2IDMyIDE2dDMyIC0xNnoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDk0OyIgZD0iTTU1MCAxMjAwaDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNTUwaDI5MXEyMSAwIDI2IC0xMS41dC04IC0yNy41bC00MjcgLTUyMnEtMTMgLTE2IC0zMiAtMTZ0LTMyIDE2bC00MjcgNTIycS0xMyAxNiAtOCAyNy41dDI2IDExLjVoMjkxdjU1MHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA5NTsiIGQ9Ik02MzkgMTEwOWw1MjIgLTQyN3ExNiAtMTMgMTYgLTMydC0xNiAtMzJsLTUyMiAtNDI3cS0xNiAtMTMgLTI3LjUgLTh0LTExLjUgMjZ2MjkxcS05NCAtMiAtMTgyIC0yMHQtMTcwLjUgLTUydC0xNDcgLTkyLjV0LTEwMC41IC0xMzUuNXE1IDEwNSAyNyAxOTMuNXQ2Ny41IDE2N3QxMTMgMTM1dDE2NyA5MS41dDIyNS41IDQydjI2MnEwIDIxIDExLjUgMjZ0MjcuNSAtOHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDk2OyIgZD0iTTg1MCAxMjAwaDMwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMzAwcTAgLTIxIC0xMC41IC0yNXQtMjQuNSAxMGwtOTQgOTRsLTI0OSAtMjQ5cS04IC03IC0xOCAtN3QtMTggN2wtMTA2IDEwNnEtNyA4IC03IDE4dDcgMThsMjQ5IDI0OWwtOTQgOTRxLTE0IDE0IC0xMCAyNC41dDI1IDEwLjV6TTM1MCAwaC0zMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djMwMHEwIDIxIDEwLjUgMjV0MjQuNSAtMTBsOTQgLTk0bDI0OSAyNDkgcTggNyAxOCA3dDE4IC03bDEwNiAtMTA2cTcgLTggNyAtMTh0LTcgLTE4bC0yNDkgLTI0OWw5NCAtOTRxMTQgLTE0IDEwIC0yNC41dC0yNSAtMTAuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDk3OyIgZD0iTTEwMTQgMTEyMGwxMDYgLTEwNnE3IC04IDcgLTE4dC03IC0xOGwtMjQ5IC0yNDlsOTQgLTk0cTE0IC0xNCAxMCAtMjQuNXQtMjUgLTEwLjVoLTMwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MzAwcTAgMjEgMTAuNSAyNXQyNC41IC0xMGw5NCAtOTRsMjQ5IDI0OXE4IDcgMTggN3QxOCAtN3pNMjUwIDYwMGgzMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTMwMHEwIC0yMSAtMTAuNSAtMjV0LTI0LjUgMTBsLTk0IDk0IGwtMjQ5IC0yNDlxLTggLTcgLTE4IC03dC0xOCA3bC0xMDYgMTA2cS03IDggLTcgMTh0NyAxOGwyNDkgMjQ5bC05NCA5NHEtMTQgMTQgLTEwIDI0LjV0MjUgMTAuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTAxOyIgZD0iTTYwMCAxMTc3cTExNyAwIDIyNCAtNDUuNXQxODQuNSAtMTIzdDEyMyAtMTg0LjV0NDUuNSAtMjI0dC00NS41IC0yMjR0LTEyMyAtMTg0LjV0LTE4NC41IC0xMjN0LTIyNCAtNDUuNXQtMjI0IDQ1LjV0LTE4NC41IDEyM3QtMTIzIDE4NC41dC00NS41IDIyNHQ0NS41IDIyNHQxMjMgMTg0LjV0MTg0LjUgMTIzdDIyNCA0NS41ek03MDQgOTAwaC0yMDhxLTIwIDAgLTMyIC0xNC41dC04IC0zNC41bDU4IC0zMDJxNCAtMjAgMjEuNSAtMzQuNSB0MzcuNSAtMTQuNWg1NHEyMCAwIDM3LjUgMTQuNXQyMS41IDM0LjVsNTggMzAycTQgMjAgLTggMzQuNXQtMzIgMTQuNXpNNjc1IDQwMGgtMTUwcS0xMCAwIC0xNy41IC03LjV0LTcuNSAtMTcuNXYtMTUwcTAgLTEwIDcuNSAtMTcuNXQxNy41IC03LjVoMTUwcTEwIDAgMTcuNSA3LjV0Ny41IDE3LjV2MTUwcTAgMTAgLTcuNSAxNy41dC0xNy41IDcuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTAyOyIgZD0iTTI2MCAxMjAwcTkgMCAxOSAtMnQxNSAtNGw1IC0ycTIyIC0xMCA0NCAtMjNsMTk2IC0xMThxMjEgLTEzIDM2IC0yNHEyOSAtMjEgMzcgLTEycTExIDEzIDQ5IDM1bDE5NiAxMThxMjIgMTMgNDUgMjNxMTcgNyAzOCA3cTIzIDAgNDcgLTE2LjV0MzcgLTMzLjVsMTMgLTE2cTE0IC0yMSAxOCAtNDVsMjUgLTEyM2w4IC00NHExIC05IDguNSAtMTQuNXQxNy41IC01LjVoNjFxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di01MCBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC01MHEtMTAgMCAtMTcuNSAtNy41dC03LjUgLTE3LjV2LTE3NWgtNDAwdjMwMGgtMjAwdi0zMDBoLTQwMHYxNzVxMCAxMCAtNy41IDE3LjV0LTE3LjUgNy41aC01MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djUwcTAgMTAgNy41IDE3LjV0MTcuNSA3LjVoNjFxMTEgMCAxOCAzdDcgOHEwIDQgOSA1MmwyNSAxMjhxNSAyNSAxOSA0NXEyIDMgNSA3dDEzLjUgMTV0MjEuNSAxOS41dDI2LjUgMTUuNSB0MjkuNSA3ek05MTUgMTA3OWwtMTY2IC0xNjJxLTcgLTcgLTUgLTEydDEyIC01aDIxOXExMCAwIDE1IDd0MiAxN2wtNTEgMTQ5cS0zIDEwIC0xMSAxMnQtMTUgLTZ6TTQ2MyA5MTdsLTE3NyAxNTdxLTggNyAtMTYgNXQtMTEgLTEybC01MSAtMTQzcS0zIC0xMCAyIC0xN3QxNSAtN2gyMzFxMTEgMCAxMi41IDV0LTUuNSAxMnpNNTAwIDBoLTM3NXEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djM3NWg0MDB2LTQwMHpNMTEwMCA0MDB2LTM3NSBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0zNzV2NDAwaDQwMHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTAzOyIgZD0iTTExNjUgMTE5MHE4IDMgMjEgLTYuNXQxMyAtMTcuNXEtMiAtMTc4IC0yNC41IC0zMjMuNXQtNTUuNSAtMjQ1LjV0LTg3IC0xNzQuNXQtMTAyLjUgLTExOC41dC0xMTggLTY4LjV0LTExOC41IC0zM3QtMTIwIC00LjV0LTEwNSA5LjV0LTkwIDE2LjVxLTYxIDEyIC03OCAxMXEtNCAxIC0xMi41IDB0LTM0IC0xNC41dC01Mi41IC00MC41bC0xNTMgLTE1M3EtMjYgLTI0IC0zNyAtMTQuNXQtMTEgNDMuNXEwIDY0IDQyIDEwMnE4IDggNTAuNSA0NSB0NjYuNSA1OHExOSAxNyAzNSA0N3QxMyA2MXEtOSA1NSAtMTAgMTAyLjV0NyAxMTF0MzcgMTMwdDc4IDEyOS41cTM5IDUxIDgwIDg4dDg5LjUgNjMuNXQ5NC41IDQ1dDExMy41IDM2dDEyOSAzMXQxNTcuNSAzN3QxODIgNDcuNXpNMTExNiAxMDk4cS04IDkgLTIyLjUgLTN0LTQ1LjUgLTUwcS0zOCAtNDcgLTExOSAtMTAzLjV0LTE0MiAtODkuNWwtNjIgLTMzcS01NiAtMzAgLTEwMiAtNTd0LTEwNCAtNjh0LTEwMi41IC04MC41dC04NS41IC05MSB0LTY0IC0xMDQuNXEtMjQgLTU2IC0zMSAtODZ0MiAtMzJ0MzEuNSAxNy41dDU1LjUgNTkuNXEyNSAzMCA5NCA3NS41dDEyNS41IDc3LjV0MTQ3LjUgODFxNzAgMzcgMTE4LjUgNjl0MTAyIDc5LjV0OTkgMTExdDg2LjUgMTQ4LjVxMjIgNTAgMjQgNjB0LTYgMTl6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEwNDsiIGQ9Ik02NTMgMTIzMXEtMzkgLTY3IC01NC41IC0xMzF0LTEwLjUgLTExNC41dDI0LjUgLTk2LjV0NDcuNSAtODB0NjMuNSAtNjIuNXQ2OC41IC00Ni41dDY1IC0zMHEtNCA3IC0xNy41IDM1dC0xOC41IDM5LjV0LTE3IDM5LjV0LTE3IDQzdC0xMyA0MnQtOS41IDQ0LjV0LTIgNDJ0NCA0M3QxMy41IDM5dDIzIDM4LjVxOTYgLTQyIDE2NSAtMTA3LjV0MTA1IC0xMzh0NTIgLTE1NnQxMyAtMTU5dC0xOSAtMTQ5LjVxLTEzIC01NSAtNDQgLTEwNi41IHQtNjggLTg3dC03OC41IC02NC41dC03Mi41IC00NXQtNTMgLTIycS03MiAtMjIgLTEyNyAtMTFxLTMxIDYgLTEzIDE5cTYgMyAxNyA3cTEzIDUgMzIuNSAyMXQ0MSA0NHQzOC41IDYzLjV0MjEuNSA4MS41dC02LjUgOTQuNXQtNTAgMTA3dC0xMDQgMTE1LjVxMTAgLTEwNCAtMC41IC0xODl0LTM3IC0xNDAuNXQtNjUgLTkzdC04NCAtNTJ0LTkzLjUgLTExdC05NSAyNC41cS04MCAzNiAtMTMxLjUgMTE0dC01My41IDE3MXEtMiAyMyAwIDQ5LjUgdDQuNSA1Mi41dDEzLjUgNTZ0MjcuNSA2MHQ0NiA2NC41dDY5LjUgNjguNXEtOCAtNTMgLTUgLTEwMi41dDE3LjUgLTkwdDM0IC02OC41dDQ0LjUgLTM5dDQ5IC0ycTMxIDEzIDM4LjUgMzZ0LTQuNSA1NXQtMjkgNjQuNXQtMzYgNzV0LTI2IDc1LjVxLTE1IDg1IDIgMTYxLjV0NTMuNSAxMjguNXQ4NS41IDkyLjV0OTMuNSA2MXQ4MS41IDI1LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEwNTsiIGQ9Ik02MDAgMTA5NHE4MiAwIDE2MC41IC0yMi41dDE0MCAtNTl0MTE2LjUgLTgyLjV0OTQuNSAtOTV0NjggLTk1dDQyLjUgLTgyLjV0MTQgLTU3LjV0LTE0IC01Ny41dC00MyAtODIuNXQtNjguNSAtOTV0LTk0LjUgLTk1dC0xMTYuNSAtODIuNXQtMTQwIC01OXQtMTU5LjUgLTIyLjV0LTE1OS41IDIyLjV0LTE0MCA1OXQtMTE2LjUgODIuNXQtOTQuNSA5NXQtNjguNSA5NXQtNDMgODIuNXQtMTQgNTcuNXQxNCA1Ny41dDQyLjUgODIuNXQ2OCA5NSB0OTQuNSA5NXQxMTYuNSA4Mi41dDE0MCA1OXQxNjAuNSAyMi41ek04ODggODI5cS0xNSAxNSAtMTggMTJ0NSAtMjJxMjUgLTU3IDI1IC0xMTlxMCAtMTI0IC04OCAtMjEydC0yMTIgLTg4dC0yMTIgODh0LTg4IDIxMnEwIDU5IDIzIDExNHE4IDE5IDQuNSAyMnQtMTcuNSAtMTJxLTcwIC02OSAtMTYwIC0xODRxLTEzIC0xNiAtMTUgLTQwLjV0OSAtNDIuNXEyMiAtMzYgNDcgLTcxdDcwIC04MnQ5Mi41IC04MXQxMTMgLTU4LjV0MTMzLjUgLTI0LjUgdDEzMy41IDI0dDExMyA1OC41dDkyLjUgODEuNXQ3MCA4MS41dDQ3IDcwLjVxMTEgMTggOSA0Mi41dC0xNCA0MS41cS05MCAxMTcgLTE2MyAxODl6TTQ0OCA3MjdsLTM1IC0zNnEtMTUgLTE1IC0xOS41IC0zOC41dDQuNSAtNDEuNXEzNyAtNjggOTMgLTExNnExNiAtMTMgMzguNSAtMTF0MzYuNSAxN2wzNSAzNHExNCAxNSAxMi41IDMzLjV0LTE2LjUgMzMuNXEtNDQgNDQgLTg5IDExN3EtMTEgMTggLTI4IDIwdC0zMiAtMTJ6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEwNjsiIGQ9Ik01OTIgMGgtMTQ4bDMxIDEyMHEtOTEgMjAgLTE3NS41IDY4LjV0LTE0My41IDEwNi41dC0xMDMuNSAxMTl0LTY2LjUgMTEwdC0yMiA3NnEwIDIxIDE0IDU3LjV0NDIuNSA4Mi41dDY4IDk1dDk0LjUgOTV0MTE2LjUgODIuNXQxNDAgNTl0MTYwLjUgMjIuNXE2MSAwIDEyNiAtMTVsMzIgMTIxaDE0OHpNOTQ0IDc3MGw0NyAxODFxMTA4IC04NSAxNzYuNSAtMTkydDY4LjUgLTE1OXEwIC0yNiAtMTkuNSAtNzF0LTU5LjUgLTEwMnQtOTMgLTExMiB0LTEyOSAtMTA0LjV0LTE1OCAtNzUuNWw0NiAxNzNxNzcgNDkgMTM2IDExN3Q5NyAxMzFxMTEgMTggOSA0Mi41dC0xNCA0MS41cS01NCA3MCAtMTA3IDEzMHpNMzEwIDgyNHEtNzAgLTY5IC0xNjAgLTE4NHEtMTMgLTE2IC0xNSAtNDAuNXQ5IC00Mi41cTE4IC0zMCAzOSAtNjB0NTcgLTcwLjV0NzQgLTczdDkwIC02MXQxMDUgLTQxLjVsNDEgMTU0cS0xMDcgMTggLTE3OC41IDEwMS41dC03MS41IDE5My41cTAgNTkgMjMgMTE0cTggMTkgNC41IDIyIHQtMTcuNSAtMTJ6TTQ0OCA3MjdsLTM1IC0zNnEtMTUgLTE1IC0xOS41IC0zOC41dDQuNSAtNDEuNXEzNyAtNjggOTMgLTExNnExNiAtMTMgMzguNSAtMTF0MzYuNSAxN2wxMiAxMWwyMiA4NmwtMyA0cS00NCA0NCAtODkgMTE3cS0xMSAxOCAtMjggMjB0LTMyIC0xMnoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTA3OyIgZD0iTS05MCAxMDBsNjQyIDEwNjZxMjAgMzEgNDggMjguNXQ0OCAtMzUuNWw2NDIgLTEwNTZxMjEgLTMyIDcuNSAtNjcuNXQtNTAuNSAtMzUuNWgtMTI5NHEtMzcgMCAtNTAuNSAzNHQ3LjUgNjZ6TTE1NSAyMDBoMzQ1djc1cTAgMTAgNy41IDE3LjV0MTcuNSA3LjVoMTUwcTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtNzVoMzQ1bC00NDUgNzIzek00OTYgNzAwaDIwOHEyMCAwIDMyIC0xNC41dDggLTM0LjVsLTU4IC0yNTIgcS00IC0yMCAtMjEuNSAtMzQuNXQtMzcuNSAtMTQuNWgtNTRxLTIwIDAgLTM3LjUgMTQuNXQtMjEuNSAzNC41bC01OCAyNTJxLTQgMjAgOCAzNC41dDMyIDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEwODsiIGQ9Ik02NTAgMTIwMHE2MiAwIDEwNiAtNDR0NDQgLTEwNnYtMzM5bDM2MyAtMzI1cTE1IC0xNCAyNiAtMzguNXQxMSAtNDQuNXYtNDFxMCAtMjAgLTEyIC0yNi41dC0yOSA1LjVsLTM1OSAyNDl2LTI2M3ExMDAgLTkzIDEwMCAtMTEzdi02NHEwIC0yMSAtMTMgLTI5dC0zMiAxbC0yMDUgMTI4bC0yMDUgLTEyOHEtMTkgLTkgLTMyIC0xdC0xMyAyOXY2NHEwIDIwIDEwMCAxMTN2MjYzbC0zNTkgLTI0OXEtMTcgLTEyIC0yOSAtNS41dC0xMiAyNi41djQxIHEwIDIwIDExIDQ0LjV0MjYgMzguNWwzNjMgMzI1djMzOXEwIDYyIDQ0IDEwNnQxMDYgNDR6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEwOTsiIGQ9Ik04NTAgMTIwMGgxMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTUwaDUwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xNTBoLTExMDB2MTUwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWg1MHY1MHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di01MGg1MDB2NTBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek0xMTAwIDgwMHYtNzUwcTAgLTIxIC0xNC41IC0zNS41IHQtMzUuNSAtMTQuNWgtMTAwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2NzUwaDExMDB6TTEwMCA2MDB2LTEwMGgxMDB2MTAwaC0xMDB6TTMwMCA2MDB2LTEwMGgxMDB2MTAwaC0xMDB6TTUwMCA2MDB2LTEwMGgxMDB2MTAwaC0xMDB6TTcwMCA2MDB2LTEwMGgxMDB2MTAwaC0xMDB6TTkwMCA2MDB2LTEwMGgxMDB2MTAwaC0xMDB6TTEwMCA0MDB2LTEwMGgxMDB2MTAwaC0xMDB6TTMwMCA0MDB2LTEwMGgxMDB2MTAwaC0xMDB6TTUwMCA0MDAgdi0xMDBoMTAwdjEwMGgtMTAwek03MDAgNDAwdi0xMDBoMTAwdjEwMGgtMTAwek05MDAgNDAwdi0xMDBoMTAwdjEwMGgtMTAwek0xMDAgMjAwdi0xMDBoMTAwdjEwMGgtMTAwek0zMDAgMjAwdi0xMDBoMTAwdjEwMGgtMTAwek01MDAgMjAwdi0xMDBoMTAwdjEwMGgtMTAwek03MDAgMjAwdi0xMDBoMTAwdjEwMGgtMTAwek05MDAgMjAwdi0xMDBoMTAwdjEwMGgtMTAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMTA7IiBkPSJNMTEzNSAxMTY1bDI0OSAtMjMwcTE1IC0xNCAxNSAtMzV0LTE1IC0zNWwtMjQ5IC0yMzBxLTE0IC0xNCAtMjQuNSAtMTB0LTEwLjUgMjV2MTUwaC0xNTlsLTYwMCAtNjAwaC0yOTFxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMjA5bDYwMCA2MDBoMjQxdjE1MHEwIDIxIDEwLjUgMjV0MjQuNSAtMTB6TTUyMiA4MTlsLTE0MSAtMTQxbC0xMjIgMTIyaC0yMDlxLTIxIDAgLTM1LjUgMTQuNSB0LTE0LjUgMzUuNXYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDI5MXpNMTEzNSA1NjVsMjQ5IC0yMzBxMTUgLTE0IDE1IC0zNXQtMTUgLTM1bC0yNDkgLTIzMHEtMTQgLTE0IC0yNC41IC0xMHQtMTAuNSAyNXYxNTBoLTI0MWwtMTgxIDE4MWwxNDEgMTQxbDEyMiAtMTIyaDE1OXYxNTBxMCAyMSAxMC41IDI1dDI0LjUgLTEweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMTE7IiBkPSJNMTAwIDExMDBoMTAwMHE0MSAwIDcwLjUgLTI5LjV0MjkuNSAtNzAuNXYtNjAwcTAgLTQxIC0yOS41IC03MC41dC03MC41IC0yOS41aC01OTZsLTMwNCAtMzAwdjMwMGgtMTAwcS00MSAwIC03MC41IDI5LjV0LTI5LjUgNzAuNXY2MDBxMCA0MSAyOS41IDcwLjV0NzAuNSAyOS41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMTI7IiBkPSJNMTUwIDEyMDBoMjAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0yNTBoLTMwMHYyNTBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek04NTAgMTIwMGgyMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTI1MGgtMzAwdjI1MHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTExMDAgODAwdi0zMDBxMCAtNDEgLTMgLTc3LjV0LTE1IC04OS41dC0zMiAtOTZ0LTU4IC04OXQtODkgLTc3dC0xMjkgLTUxdC0xNzQgLTIwdC0xNzQgMjAgdC0xMjkgNTF0LTg5IDc3dC01OCA4OXQtMzIgOTZ0LTE1IDg5LjV0LTMgNzcuNXYzMDBoMzAwdi0yNTB2LTI3di00Mi41dDEuNSAtNDF0NSAtMzh0MTAgLTM1dDE2LjUgLTMwdDI1LjUgLTI0LjV0MzUgLTE5dDQ2LjUgLTEydDYwIC00dDYwIDQuNXQ0Ni41IDEyLjV0MzUgMTkuNXQyNSAyNS41dDE3IDMwLjV0MTAgMzV0NSAzOHQyIDQwLjV0LTAuNSA0MnYyNXYyNTBoMzAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMTM7IiBkPSJNMTEwMCA0MTFsLTE5OCAtMTk5bC0zNTMgMzUzbC0zNTMgLTM1M2wtMTk3IDE5OWw1NTEgNTUxeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMTQ7IiBkPSJNMTEwMSA3ODlsLTU1MCAtNTUxbC01NTEgNTUxbDE5OCAxOTlsMzUzIC0zNTNsMzUzIDM1M3oiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTE1OyIgZD0iTTQwNCAxMDAwaDc0NnEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNTUxaDE1MHEyMSAwIDI1IC0xMC41dC0xMCAtMjQuNWwtMjMwIC0yNDlxLTE0IC0xNSAtMzUgLTE1dC0zNSAxNWwtMjMwIDI0OXEtMTQgMTQgLTEwIDI0LjV0MjUgMTAuNWgxNTB2NDAxaC0zODF6TTEzNSA5ODRsMjMwIC0yNDlxMTQgLTE0IDEwIC0yNC41dC0yNSAtMTAuNWgtMTUwdi00MDBoMzg1bDIxNSAtMjAwaC03NTBxLTIxIDAgLTM1LjUgMTQuNSB0LTE0LjUgMzUuNXY1NTBoLTE1MHEtMjEgMCAtMjUgMTAuNXQxMCAyNC41bDIzMCAyNDlxMTQgMTUgMzUgMTV0MzUgLTE1eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMTY7IiBkPSJNNTYgMTIwMGg5NHExNyAwIDMxIC0xMXQxOCAtMjdsMzggLTE2Mmg4OTZxMjQgMCAzOSAtMTguNXQxMCAtNDIuNWwtMTAwIC00NzVxLTUgLTIxIC0yNyAtNDIuNXQtNTUgLTIxLjVoLTYzM2w0OCAtMjAwaDUzNXEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXQtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNTB2LTUwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41dC0zNS41IDE0LjV0LTE0LjUgMzUuNXY1MGgtMzAwdi01MCBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjV0LTM1LjUgMTQuNXQtMTQuNSAzNS41djUwaC0zMXEtMTggMCAtMzIuNSAxMHQtMjAuNSAxOWwtNSAxMGwtMjAxIDk2MWgtNTRxLTIwIDAgLTM1IDE0LjV0LTE1IDM1LjV0MTUgMzUuNXQzNSAxNC41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMTc7IiBkPSJNMTIwMCAxMDAwdi0xMDBoLTEyMDB2MTAwaDIwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjVoMzAwcTQxIDAgNzAuNSAtMjkuNXQyOS41IC03MC41aDUwMHpNMCA4MDBoMTIwMHYtODAwaC0xMjAwdjgwMHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTE4OyIgZD0iTTIwMCA4MDBsLTIwMCAtNDAwdjYwMGgyMDBxMCA0MSAyOS41IDcwLjV0NzAuNSAyOS41aDMwMHE0MiAwIDcxIC0yOS41dDI5IC03MC41aDUwMHYtMjAwaC0xMDAwek0xNTAwIDcwMGwtMzAwIC03MDBoLTEyMDBsMzAwIDcwMGgxMjAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMTk7IiBkPSJNNjM1IDExODRsMjMwIC0yNDlxMTQgLTE0IDEwIC0yNC41dC0yNSAtMTAuNWgtMTUwdi02MDFoMTUwcTIxIDAgMjUgLTEwLjV0LTEwIC0yNC41bC0yMzAgLTI0OXEtMTQgLTE1IC0zNSAtMTV0LTM1IDE1bC0yMzAgMjQ5cS0xNCAxNCAtMTAgMjQuNXQyNSAxMC41aDE1MHY2MDFoLTE1MHEtMjEgMCAtMjUgMTAuNXQxMCAyNC41bDIzMCAyNDlxMTQgMTUgMzUgMTV0MzUgLTE1eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMjA7IiBkPSJNOTM2IDg2NGwyNDkgLTIyOXExNCAtMTUgMTQgLTM1LjV0LTE0IC0zNS41bC0yNDkgLTIyOXEtMTUgLTE1IC0yNS41IC0xMC41dC0xMC41IDI0LjV2MTUxaC02MDB2LTE1MXEwIC0yMCAtMTAuNSAtMjQuNXQtMjUuNSAxMC41bC0yNDkgMjI5cS0xNCAxNSAtMTQgMzUuNXQxNCAzNS41bDI0OSAyMjlxMTUgMTUgMjUuNSAxMC41dDEwLjUgLTI1LjV2LTE0OWg2MDB2MTQ5cTAgMjEgMTAuNSAyNS41dDI1LjUgLTEwLjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEyMTsiIGQ9Ik0xMTY5IDQwMGwtMTcyIDczMnEtNSAyMyAtMjMgNDUuNXQtMzggMjIuNWgtNjcycS0yMCAwIC0zOCAtMjB0LTIzIC00MWwtMTcyIC03MzloMTEzOHpNMTEwMCAzMDBoLTEwMDBxLTQxIDAgLTcwLjUgLTI5LjV0LTI5LjUgLTcwLjV2LTEwMHEwIC00MSAyOS41IC03MC41dDcwLjUgLTI5LjVoMTAwMHE0MSAwIDcwLjUgMjkuNXQyOS41IDcwLjV2MTAwcTAgNDEgLTI5LjUgNzAuNXQtNzAuNSAyOS41ek04MDAgMTAwdjEwMGgxMDB2LTEwMGgtMTAwIHpNMTAwMCAxMDB2MTAwaDEwMHYtMTAwaC0xMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEyMjsiIGQ9Ik0xMTUwIDExMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTg1MHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNXQtMzUuNSAxNC41dC0xNC41IDM1LjV2ODUwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNMTAwMCAyMDBsLTY3NSAyMDBoLTM4bDQ3IC0yNzZxMyAtMTYgLTUuNSAtMjB0LTI5LjUgLTRoLTdoLTg0cS0yMCAwIC0zNC41IDE0dC0xOC41IDM1cS01NSAzMzcgLTU1IDM1MXYyNTB2NnEwIDE2IDEgMjMuNXQ2LjUgMTQgdDE3LjUgNi41aDIwMGw2NzUgMjUwdi04NTB6TTAgNzUwdi0yNTBxLTQgMCAtMTEgMC41dC0yNCA2dC0zMCAxNXQtMjQgMzB0LTExIDQ4LjV2NTBxMCAyNiAxMC41IDQ2dDI1IDMwdDI5IDE2dDI1LjUgN3oiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTIzOyIgZD0iTTU1MyAxMjAwaDk0cTIwIDAgMjkgLTEwLjV0MyAtMjkuNWwtMTggLTM3cTgzIC0xOSAxNDQgLTgyLjV0NzYgLTE0MC41bDYzIC0zMjdsMTE4IC0xNzNoMTdxMTkgMCAzMyAtMTQuNXQxNCAtMzV0LTEzIC00MC41dC0zMSAtMjdxLTggLTQgLTIzIC05LjV0LTY1IC0xOS41dC0xMDMgLTI1dC0xMzIuNSAtMjB0LTE1OC41IC05cS01NyAwIC0xMTUgNXQtMTA0IDEydC04OC41IDE1LjV0LTczLjUgMTcuNXQtNTQuNSAxNnQtMzUuNSAxMmwtMTEgNCBxLTE4IDggLTMxIDI4dC0xMyA0MC41dDE0IDM1dDMzIDE0LjVoMTdsMTE4IDE3M2w2MyAzMjdxMTUgNzcgNzYgMTQwdDE0NCA4M2wtMTggMzJxLTYgMTkgMy41IDMydDI4LjUgMTN6TTQ5OCAxMTBxNTAgLTYgMTAyIC02cTUzIDAgMTAyIDZxLTEyIC00OSAtMzkuNSAtNzkuNXQtNjIuNSAtMzAuNXQtNjMgMzAuNXQtMzkgNzkuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTI0OyIgZD0iTTgwMCA5NDZsMjI0IDc4bC03OCAtMjI0bDIzNCAtNDVsLTE4MCAtMTU1bDE4MCAtMTU1bC0yMzQgLTQ1bDc4IC0yMjRsLTIyNCA3OGwtNDUgLTIzNGwtMTU1IDE4MGwtMTU1IC0xODBsLTQ1IDIzNGwtMjI0IC03OGw3OCAyMjRsLTIzNCA0NWwxODAgMTU1bC0xODAgMTU1bDIzNCA0NWwtNzggMjI0bDIyNCAtNzhsNDUgMjM0bDE1NSAtMTgwbDE1NSAxODB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEyNTsiIGQ9Ik02NTAgMTIwMGg1MHE0MCAwIDcwIC00MC41dDMwIC04NC41di0xNTBsLTI4IC0xMjVoMzI4cTQwIDAgNzAgLTQwLjV0MzAgLTg0LjV2LTEwMHEwIC00NSAtMjkgLTc0bC0yMzggLTM0NHEtMTYgLTI0IC0zOCAtNDAuNXQtNDUgLTE2LjVoLTI1MHEtNyAwIC00MiAyNXQtNjYgNTBsLTMxIDI1aC02MXEtNDUgMCAtNzIuNSAxOHQtMjcuNSA1N3Y0MDBxMCAzNiAyMCA2M2wxNDUgMTk2bDk2IDE5OHExMyAyOCAzNy41IDQ4dDUxLjUgMjB6IE02NTAgMTEwMGwtMTAwIC0yMTJsLTE1MCAtMjEzdi0zNzVoMTAwbDEzNiAtMTAwaDIxNGwyNTAgMzc1djEyNWgtNDUwbDUwIDIyNXYxNzVoLTUwek01MCA4MDBoMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di01MDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTEwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2NTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTI2OyIgZD0iTTYwMCAxMTAwaDI1MHEyMyAwIDQ1IC0xNi41dDM4IC00MC41bDIzOCAtMzQ0cTI5IC0yOSAyOSAtNzR2LTEwMHEwIC00NCAtMzAgLTg0LjV0LTcwIC00MC41aC0zMjhxMjggLTExOCAyOCAtMTI1di0xNTBxMCAtNDQgLTMwIC04NC41dC03MCAtNDAuNWgtNTBxLTI3IDAgLTUxLjUgMjB0LTM3LjUgNDhsLTk2IDE5OGwtMTQ1IDE5NnEtMjAgMjcgLTIwIDYzdjQwMHEwIDM5IDI3LjUgNTd0NzIuNSAxOGg2MXExMjQgMTAwIDEzOSAxMDB6IE01MCAxMDAwaDEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djUwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTYzNiAxMDAwbC0xMzYgLTEwMGgtMTAwdi0zNzVsMTUwIC0yMTNsMTAwIC0yMTJoNTB2MTc1bC01MCAyMjVoNDUwdjEyNWwtMjUwIDM3NWgtMjE0eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMjc7IiBkPSJNMzU2IDg3M2wzNjMgMjMwcTMxIDE2IDUzIC02bDExMCAtMTEycTEzIC0xMyAxMy41IC0zMnQtMTEuNSAtMzRsLTg0IC0xMjFoMzAycTg0IDAgMTM4IC0zOHQ1NCAtMTEwdC01NSAtMTExdC0xMzkgLTM5aC0xMDZsLTEzMSAtMzM5cS02IC0yMSAtMTkuNSAtNDF0LTI4LjUgLTIwaC0zNDJxLTcgMCAtOTAgODF0LTgzIDk0djUyNXEwIDE3IDE0IDM1LjV0MjggMjguNXpNNDAwIDc5MnYtNTAzbDEwMCAtODloMjkzbDEzMSAzMzkgcTYgMjEgMTkuNSA0MXQyOC41IDIwaDIwM3EyMSAwIDMwLjUgMjV0MC41IDUwdC0zMSAyNWgtNDU2aC03aC02aC01LjV0LTYgMC41dC01IDEuNXQtNSAydC00IDIuNXQtNCA0dC0yLjUgNC41cS0xMiAyNSA1IDQ3bDE0NiAxODNsLTg2IDgzek01MCA4MDBoMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di01MDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTEwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2NTAwIHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEyODsiIGQ9Ik00NzUgMTEwM2wzNjYgLTIzMHEyIC0xIDYgLTMuNXQxNCAtMTAuNXQxOCAtMTYuNXQxNC41IC0yMHQ2LjUgLTIyLjV2LTUyNXEwIC0xMyAtODYgLTk0dC05MyAtODFoLTM0MnEtMTUgMCAtMjguNSAyMHQtMTkuNSA0MWwtMTMxIDMzOWgtMTA2cS04NSAwIC0xMzkuNSAzOXQtNTQuNSAxMTF0NTQgMTEwdDEzOCAzOGgzMDJsLTg1IDEyMXEtMTEgMTUgLTEwLjUgMzR0MTMuNSAzMmwxMTAgMTEycTIyIDIyIDUzIDZ6TTM3MCA5NDVsMTQ2IC0xODMgcTE3IC0yMiA1IC00N3EtMiAtMiAtMy41IC00LjV0LTQgLTR0LTQgLTIuNXQtNSAtMnQtNSAtMS41dC02IC0wLjVoLTZoLTYuNWgtNmgtNDc1di0xMDBoMjIxcTE1IDAgMjkgLTIwdDIwIC00MWwxMzAgLTMzOWgyOTRsMTA2IDg5djUwM2wtMzQyIDIzNnpNMTA1MCA4MDBoMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di01MDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTEwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjUgdjUwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEyOTsiIGQ9Ik01NTAgMTI5NHE3MiAwIDExMSAtNTV0MzkgLTEzOXYtMTA2bDMzOSAtMTMxcTIxIC02IDQxIC0xOS41dDIwIC0yOC41di0zNDJxMCAtNyAtODEgLTkwdC05NCAtODNoLTUyNXEtMTcgMCAtMzUuNSAxNHQtMjguNSAyOGwtOSAxNGwtMjMwIDM2M3EtMTYgMzEgNiA1M2wxMTIgMTEwcTEzIDEzIDMyIDEzLjV0MzQgLTExLjVsMTIxIC04NHYzMDJxMCA4NCAzOCAxMzh0MTEwIDU0ek02MDAgOTcydjIwM3EwIDIxIC0yNSAzMC41dC01MCAwLjUgdC0yNSAtMzF2LTQ1NnYtN3YtNnYtNS41dC0wLjUgLTZ0LTEuNSAtNXQtMiAtNXQtMi41IC00dC00IC00dC00LjUgLTIuNXEtMjUgLTEyIC00NyA1bC0xODMgMTQ2bC04MyAtODZsMjM2IC0zMzloNTAzbDg5IDEwMHYyOTNsLTMzOSAxMzFxLTIxIDYgLTQxIDE5LjV0LTIwIDI4LjV6TTQ1MCAyMDBoNTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTUwMCBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEzMDsiIGQ9Ik0zNTAgMTEwMGg1MDBxMjEgMCAzNS41IDE0LjV0MTQuNSAzNS41djEwMHEwIDIxIC0xNC41IDM1LjV0LTM1LjUgMTQuNWgtNTAwcS0yMSAwIC0zNS41IC0xNC41dC0xNC41IC0zNS41di0xMDBxMCAtMjEgMTQuNSAtMzUuNXQzNS41IC0xNC41ek02MDAgMzA2di0xMDZxMCAtODQgLTM5IC0xMzl0LTExMSAtNTV0LTExMCA1NHQtMzggMTM4djMwMmwtMTIxIC04NHEtMTUgLTEyIC0zNCAtMTEuNXQtMzIgMTMuNWwtMTEyIDExMCBxLTIyIDIyIC02IDUzbDIzMCAzNjNxMSAyIDMuNSA2dDEwLjUgMTMuNXQxNi41IDE3dDIwIDEzLjV0MjIuNSA2aDUyNXExMyAwIDk0IC04M3Q4MSAtOTB2LTM0MnEwIC0xNSAtMjAgLTI4LjV0LTQxIC0xOS41ek0zMDggOTAwbC0yMzYgLTMzOWw4MyAtODZsMTgzIDE0NnEyMiAxNyA0NyA1cTIgLTEgNC41IC0yLjV0NCAtNHQyLjUgLTR0MiAtNXQxLjUgLTV0MC41IC02di01LjV2LTZ2LTd2LTQ1NnEwIC0yMiAyNSAtMzF0NTAgMC41dDI1IDMwLjUgdjIwM3EwIDE1IDIwIDI4LjV0NDEgMTkuNWwzMzkgMTMxdjI5M2wtODkgMTAwaC01MDN6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEzMTsiIGQ9Ik02MDAgMTE3OHExMTggMCAyMjUgLTQ1LjV0MTg0LjUgLTEyM3QxMjMgLTE4NC41dDQ1LjUgLTIyNXQtNDUuNSAtMjI1dC0xMjMgLTE4NC41dC0xODQuNSAtMTIzdC0yMjUgLTQ1LjV0LTIyNSA0NS41dC0xODQuNSAxMjN0LTEyMyAxODQuNXQtNDUuNSAyMjV0NDUuNSAyMjV0MTIzIDE4NC41dDE4NC41IDEyM3QyMjUgNDUuNXpNOTE0IDYzMmwtMjc1IDIyM3EtMTYgMTMgLTI3LjUgOHQtMTEuNSAtMjZ2LTEzN2gtMjc1IHEtMTAgMCAtMTcuNSAtNy41dC03LjUgLTE3LjV2LTE1MHEwIC0xMCA3LjUgLTE3LjV0MTcuNSAtNy41aDI3NXYtMTM3cTAgLTIxIDExLjUgLTI2dDI3LjUgOGwyNzUgMjIzcTE2IDEzIDE2IDMydC0xNiAzMnoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTMyOyIgZD0iTTYwMCAxMTc4cTExOCAwIDIyNSAtNDUuNXQxODQuNSAtMTIzdDEyMyAtMTg0LjV0NDUuNSAtMjI1dC00NS41IC0yMjV0LTEyMyAtMTg0LjV0LTE4NC41IC0xMjN0LTIyNSAtNDUuNXQtMjI1IDQ1LjV0LTE4NC41IDEyM3QtMTIzIDE4NC41dC00NS41IDIyNXQ0NS41IDIyNXQxMjMgMTg0LjV0MTg0LjUgMTIzdDIyNSA0NS41ek01NjEgODU1bC0yNzUgLTIyM3EtMTYgLTEzIC0xNiAtMzJ0MTYgLTMybDI3NSAtMjIzcTE2IC0xMyAyNy41IC04IHQxMS41IDI2djEzN2gyNzVxMTAgMCAxNy41IDcuNXQ3LjUgMTcuNXYxNTBxMCAxMCAtNy41IDE3LjV0LTE3LjUgNy41aC0yNzV2MTM3cTAgMjEgLTExLjUgMjZ0LTI3LjUgLTh6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEzMzsiIGQ9Ik02MDAgMTE3OHExMTggMCAyMjUgLTQ1LjV0MTg0LjUgLTEyM3QxMjMgLTE4NC41dDQ1LjUgLTIyNXQtNDUuNSAtMjI1dC0xMjMgLTE4NC41dC0xODQuNSAtMTIzdC0yMjUgLTQ1LjV0LTIyNSA0NS41dC0xODQuNSAxMjN0LTEyMyAxODQuNXQtNDUuNSAyMjV0NDUuNSAyMjV0MTIzIDE4NC41dDE4NC41IDEyM3QyMjUgNDUuNXpNODU1IDYzOWwtMjIzIDI3NXEtMTMgMTYgLTMyIDE2dC0zMiAtMTZsLTIyMyAtMjc1cS0xMyAtMTYgLTggLTI3LjUgdDI2IC0xMS41aDEzN3YtMjc1cTAgLTEwIDcuNSAtMTcuNXQxNy41IC03LjVoMTUwcTEwIDAgMTcuNSA3LjV0Ny41IDE3LjV2Mjc1aDEzN3EyMSAwIDI2IDExLjV0LTggMjcuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTM0OyIgZD0iTTYwMCAxMTc4cTExOCAwIDIyNSAtNDUuNXQxODQuNSAtMTIzdDEyMyAtMTg0LjV0NDUuNSAtMjI1dC00NS41IC0yMjV0LTEyMyAtMTg0LjV0LTE4NC41IC0xMjN0LTIyNSAtNDUuNXQtMjI1IDQ1LjV0LTE4NC41IDEyM3QtMTIzIDE4NC41dC00NS41IDIyNXQ0NS41IDIyNXQxMjMgMTg0LjV0MTg0LjUgMTIzdDIyNSA0NS41ek02NzUgOTAwaC0xNTBxLTEwIDAgLTE3LjUgLTcuNXQtNy41IC0xNy41di0yNzVoLTEzN3EtMjEgMCAtMjYgLTExLjUgdDggLTI3LjVsMjIzIC0yNzVxMTMgLTE2IDMyIC0xNnQzMiAxNmwyMjMgMjc1cTEzIDE2IDggMjcuNXQtMjYgMTEuNWgtMTM3djI3NXEwIDEwIC03LjUgMTcuNXQtMTcuNSA3LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEzNTsiIGQ9Ik02MDAgMTE3NnExMTYgMCAyMjIuNSAtNDZ0MTg0IC0xMjMuNXQxMjMuNSAtMTg0dDQ2IC0yMjIuNXQtNDYgLTIyMi41dC0xMjMuNSAtMTg0dC0xODQgLTEyMy41dC0yMjIuNSAtNDZ0LTIyMi41IDQ2dC0xODQgMTIzLjV0LTEyMy41IDE4NHQtNDYgMjIyLjV0NDYgMjIyLjV0MTIzLjUgMTg0dDE4NCAxMjMuNXQyMjIuNSA0NnpNNjI3IDExMDFxLTE1IC0xMiAtMzYuNSAtMjAuNXQtMzUuNSAtMTJ0LTQzIC04dC0zOSAtNi41IHEtMTUgLTMgLTQ1LjUgMHQtNDUuNSAtMnEtMjAgLTcgLTUxLjUgLTI2LjV0LTM0LjUgLTM0LjVxLTMgLTExIDYuNSAtMjIuNXQ4LjUgLTE4LjVxLTMgLTM0IC0yNy41IC05MXQtMjkuNSAtNzlxLTkgLTM0IDUgLTkzdDggLTg3cTAgLTkgMTcgLTQ0LjV0MTYgLTU5LjVxMTIgMCAyMyAtNXQyMy41IC0xNXQxOS41IC0xNHExNiAtOCAzMyAtMTV0NDAuNSAtMTV0MzQuNSAtMTJxMjEgLTkgNTIuNSAtMzJ0NjAgLTM4dDU3LjUgLTExIHE3IC0xNSAtMyAtMzR0LTIyLjUgLTQwdC05LjUgLTM4cTEzIC0yMSAyMyAtMzQuNXQyNy41IC0yNy41dDM2LjUgLTE4cTAgLTcgLTMuNSAtMTZ0LTMuNSAtMTR0NSAtMTdxMTA0IC0yIDIyMSAxMTJxMzAgMjkgNDYuNSA0N3QzNC41IDQ5dDIxIDYzcS0xMyA4IC0zNyA4LjV0LTM2IDcuNXEtMTUgNyAtNDkuNSAxNXQtNTEuNSAxOXEtMTggMCAtNDEgLTAuNXQtNDMgLTEuNXQtNDIgLTYuNXQtMzggLTE2LjVxLTUxIC0zNSAtNjYgLTEyIHEtNCAxIC0zLjUgMjUuNXQwLjUgMjUuNXEtNiAxMyAtMjYuNSAxNy41dC0yNC41IDYuNXExIDE1IC0wLjUgMzAuNXQtNyAyOHQtMTguNSAxMS41dC0zMSAtMjFxLTIzIC0yNSAtNDIgNHEtMTkgMjggLTggNThxNiAxNiAyMiAyMnE2IC0xIDI2IC0xLjV0MzMuNSAtNHQxOS41IC0xMy41cTcgLTEyIDE4IC0yNHQyMS41IC0yMC41dDIwIC0xNXQxNS41IC0xMC41bDUgLTNxMiAxMiA3LjUgMzAuNXQ4IDM0LjV0LTAuNSAzMnEtMyAxOCAzLjUgMjkgdDE4IDIyLjV0MTUuNSAyNC41cTYgMTQgMTAuNSAzNXQ4IDMxdDE1LjUgMjIuNXQzNCAyMi41cS02IDE4IDEwIDM2cTggMCAyNCAtMS41dDI0LjUgLTEuNXQyMCA0LjV0MjAuNSAxNS41cS0xMCAyMyAtMzEgNDIuNXQtMzcuNSAyOS41dC00OSAyN3QtNDMuNSAyM3EwIDEgMiA4dDMgMTEuNXQxLjUgMTAuNXQtMSA5LjV0LTQuNSA0LjVxMzEgLTEzIDU4LjUgLTE0LjV0MzguNSAyLjVsMTIgNXE1IDI4IC05LjUgNDZ0LTM2LjUgMjR0LTUwIDE1IHQtNDEgMjBxLTE4IC00IC0zNyAwek02MTMgOTk0cTAgLTE3IDggLTQydDE3IC00NXQ5IC0yM3EtOCAxIC0zOS41IDUuNXQtNTIuNSAxMHQtMzcgMTYuNXEzIDExIDE2IDI5LjV0MTYgMjUuNXExMCAtMTAgMTkgLTEwdDE0IDZ0MTMuNSAxNC41dDE2LjUgMTIuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTM2OyIgZD0iTTc1NiAxMTU3cTE2NCA5MiAzMDYgLTlsLTI1OSAtMTM4bDE0NSAtMjMybDI1MSAxMjZxNiAtODkgLTM0IC0xNTYuNXQtMTE3IC0xMTAuNXEtNjAgLTM0IC0xMjcgLTM5LjV0LTEyNiAxNi41bC01OTYgLTU5NnEtMTUgLTE2IC0zNi41IC0xNnQtMzYuNSAxNmwtMTExIDExMHEtMTUgMTUgLTE1IDM2LjV0MTUgMzcuNWw2MDAgNTk5cS0zNCAxMDEgNS41IDIwMS41dDEzNS41IDE1NC41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMzc7IiBob3Jpei1hZHYteD0iMTIyMCIgZD0iTTEwMCAxMTk2aDEwMDBxNDEgMCA3MC41IC0yOS41dDI5LjUgLTcwLjV2LTEwMHEwIC00MSAtMjkuNSAtNzAuNXQtNzAuNSAtMjkuNWgtMTAwMHEtNDEgMCAtNzAuNSAyOS41dC0yOS41IDcwLjV2MTAwcTAgNDEgMjkuNSA3MC41dDcwLjUgMjkuNXpNMTEwMCAxMDk2aC0yMDB2LTEwMGgyMDB2MTAwek0xMDAgNzk2aDEwMDBxNDEgMCA3MC41IC0yOS41dDI5LjUgLTcwLjV2LTEwMHEwIC00MSAtMjkuNSAtNzAuNXQtNzAuNSAtMjkuNWgtMTAwMCBxLTQxIDAgLTcwLjUgMjkuNXQtMjkuNSA3MC41djEwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjV6TTExMDAgNjk2aC01MDB2LTEwMGg1MDB2MTAwek0xMDAgMzk2aDEwMDBxNDEgMCA3MC41IC0yOS41dDI5LjUgLTcwLjV2LTEwMHEwIC00MSAtMjkuNSAtNzAuNXQtNzAuNSAtMjkuNWgtMTAwMHEtNDEgMCAtNzAuNSAyOS41dC0yOS41IDcwLjV2MTAwcTAgNDEgMjkuNSA3MC41dDcwLjUgMjkuNXpNMTEwMCAyOTZoLTMwMHYtMTAwaDMwMHYxMDB6ICIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMzg7IiBkPSJNMTUwIDEyMDBoOTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41dC0xNC41IC0zNS41dC0zNS41IC0xNC41aC05MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41dDE0LjUgMzUuNXQzNS41IDE0LjV6TTcwMCA1MDB2LTMwMGwtMjAwIC0yMDB2NTAwbC0zNTAgNTAwaDkwMHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTM5OyIgZD0iTTUwMCAxMjAwaDIwMHE0MSAwIDcwLjUgLTI5LjV0MjkuNSAtNzAuNXYtMTAwaDMwMHE0MSAwIDcwLjUgLTI5LjV0MjkuNSAtNzAuNXYtNDAwaC01MDB2MTAwaC0yMDB2LTEwMGgtNTAwdjQwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjVoMzAwdjEwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjV6TTUwMCAxMTAwdi0xMDBoMjAwdjEwMGgtMjAwek0xMjAwIDQwMHYtMjAwcTAgLTQxIC0yOS41IC03MC41dC03MC41IC0yOS41aC0xMDAwIHEtNDEgMCAtNzAuNSAyOS41dC0yOS41IDcwLjV2MjAwaDEyMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE0MDsiIGQ9Ik01MCAxMjAwaDMwMHEyMSAwIDI1IC0xMC41dC0xMCAtMjQuNWwtOTQgLTk0bDE5OSAtMTk5cTcgLTggNyAtMTh0LTcgLTE4bC0xMDYgLTEwNnEtOCAtNyAtMTggLTd0LTE4IDdsLTE5OSAxOTlsLTk0IC05NHEtMTQgLTE0IC0yNC41IC0xMHQtMTAuNSAyNXYzMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek04NTAgMTIwMGgzMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTMwMHEwIC0yMSAtMTAuNSAtMjV0LTI0LjUgMTBsLTk0IDk0IGwtMTk5IC0xOTlxLTggLTcgLTE4IC03dC0xOCA3bC0xMDYgMTA2cS03IDggLTcgMTh0NyAxOGwxOTkgMTk5bC05NCA5NHEtMTQgMTQgLTEwIDI0LjV0MjUgMTAuNXpNMzY0IDQ3MGwxMDYgLTEwNnE3IC04IDcgLTE4dC03IC0xOGwtMTk5IC0xOTlsOTQgLTk0cTE0IC0xNCAxMCAtMjQuNXQtMjUgLTEwLjVoLTMwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MzAwcTAgMjEgMTAuNSAyNXQyNC41IC0xMGw5NCAtOTRsMTk5IDE5OSBxOCA3IDE4IDd0MTggLTd6TTEwNzEgMjcxbDk0IDk0cTE0IDE0IDI0LjUgMTB0MTAuNSAtMjV2LTMwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMzAwcS0yMSAwIC0yNSAxMC41dDEwIDI0LjVsOTQgOTRsLTE5OSAxOTlxLTcgOCAtNyAxOHQ3IDE4bDEwNiAxMDZxOCA3IDE4IDd0MTggLTd6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE0MTsiIGQ9Ik01OTYgMTE5MnExMjEgMCAyMzEuNSAtNDcuNXQxOTAgLTEyN3QxMjcgLTE5MHQ0Ny41IC0yMzEuNXQtNDcuNSAtMjMxLjV0LTEyNyAtMTkwLjV0LTE5MCAtMTI3dC0yMzEuNSAtNDd0LTIzMS41IDQ3dC0xOTAuNSAxMjd0LTEyNyAxOTAuNXQtNDcgMjMxLjV0NDcgMjMxLjV0MTI3IDE5MHQxOTAuNSAxMjd0MjMxLjUgNDcuNXpNNTk2IDEwMTBxLTExMiAwIC0yMDcuNSAtNTUuNXQtMTUxIC0xNTF0LTU1LjUgLTIwNy41dDU1LjUgLTIwNy41IHQxNTEgLTE1MXQyMDcuNSAtNTUuNXQyMDcuNSA1NS41dDE1MSAxNTF0NTUuNSAyMDcuNXQtNTUuNSAyMDcuNXQtMTUxIDE1MXQtMjA3LjUgNTUuNXpNNDU0LjUgOTA1cTIyLjUgMCAzOC41IC0xNnQxNiAtMzguNXQtMTYgLTM5dC0zOC41IC0xNi41dC0zOC41IDE2LjV0LTE2IDM5dDE2IDM4LjV0MzguNSAxNnpNNzU0LjUgOTA1cTIyLjUgMCAzOC41IC0xNnQxNiAtMzguNXQtMTYgLTM5dC0zOCAtMTYuNXEtMTQgMCAtMjkgMTBsLTU1IC0xNDUgcTE3IC0yMyAxNyAtNTFxMCAtMzYgLTI1LjUgLTYxLjV0LTYxLjUgLTI1LjV0LTYxLjUgMjUuNXQtMjUuNSA2MS41cTAgMzIgMjAuNSA1Ni41dDUxLjUgMjkuNWwxMjIgMTI2bDEgMXEtOSAxNCAtOSAyOHEwIDIzIDE2IDM5dDM4LjUgMTZ6TTM0NS41IDcwOXEyMi41IDAgMzguNSAtMTZ0MTYgLTM4LjV0LTE2IC0zOC41dC0zOC41IC0xNnQtMzguNSAxNnQtMTYgMzguNXQxNiAzOC41dDM4LjUgMTZ6TTg1NC41IDcwOXEyMi41IDAgMzguNSAtMTYgdDE2IC0zOC41dC0xNiAtMzguNXQtMzguNSAtMTZ0LTM4LjUgMTZ0LTE2IDM4LjV0MTYgMzguNXQzOC41IDE2eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNDI7IiBkPSJNNTQ2IDE3M2w0NjkgNDcwcTkxIDkxIDk5IDE5MnE3IDk4IC01MiAxNzUuNXQtMTU0IDk0LjVxLTIyIDQgLTQ3IDRxLTM0IDAgLTY2LjUgLTEwdC01Ni41IC0yM3QtNTUuNSAtMzh0LTQ4IC00MS41dC00OC41IC00Ny41cS0zNzYgLTM3NSAtMzkxIC0zOTBxLTMwIC0yNyAtNDUgLTQxLjV0LTM3LjUgLTQxdC0zMiAtNDYuNXQtMTYgLTQ3LjV0LTEuNSAtNTYuNXE5IC02MiA1My41IC05NXQ5OS41IC0zM3E3NCAwIDEyNSA1MWw1NDggNTQ4IHEzNiAzNiAyMCA3NXEtNyAxNiAtMjEuNSAyNnQtMzIuNSAxMHEtMjYgMCAtNTAgLTIzcS0xMyAtMTIgLTM5IC0zOGwtMzQxIC0zMzhxLTE1IC0xNSAtMzUuNSAtMTUuNXQtMzQuNSAxMy41dC0xNCAzNC41dDE0IDM0LjVxMzI3IDMzMyAzNjEgMzY3cTM1IDM1IDY3LjUgNTEuNXQ3OC41IDE2LjVxMTQgMCAyOSAtMXE0NCAtOCA3NC41IC0zNS41dDQzLjUgLTY4LjVxMTQgLTQ3IDIgLTk2LjV0LTQ3IC04NC41cS0xMiAtMTEgLTMyIC0zMiB0LTc5LjUgLTgxdC0xMTQuNSAtMTE1dC0xMjQuNSAtMTIzLjV0LTEyMyAtMTE5LjV0LTk2LjUgLTg5dC01NyAtNDVxLTU2IC0yNyAtMTIwIC0yN3EtNzAgMCAtMTI5IDMydC05MyA4OXEtNDggNzggLTM1IDE3M3Q4MSAxNjNsNTExIDUxMXE3MSA3MiAxMTEgOTZxOTEgNTUgMTk4IDU1cTgwIDAgMTUyIC0zM3E3OCAtMzYgMTI5LjUgLTEwM3Q2Ni41IC0xNTRxMTcgLTkzIC0xMSAtMTgzLjV0LTk0IC0xNTYuNWwtNDgyIC00NzYgcS0xNSAtMTUgLTM2IC0xNnQtMzcgMTR0LTE3LjUgMzR0MTQuNSAzNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTQzOyIgZD0iTTY0OSA5NDlxNDggNjggMTA5LjUgMTA0dDEyMS41IDM4LjV0MTE4LjUgLTIwdDEwMi41IC02NHQ3MSAtMTAwLjV0MjcgLTEyM3EwIC01NyAtMzMuNSAtMTE3LjV0LTk0IC0xMjQuNXQtMTI2LjUgLTEyNy41dC0xNTAgLTE1Mi41dC0xNDYgLTE3NHEtNjIgODUgLTE0NS41IDE3NHQtMTUwIDE1Mi41dC0xMjYuNSAxMjcuNXQtOTMuNSAxMjQuNXQtMzMuNSAxMTcuNXEwIDY0IDI4IDEyM3Q3MyAxMDAuNXQxMDQgNjR0MTE5IDIwIHQxMjAuNSAtMzguNXQxMDQuNSAtMTA0ek04OTYgOTcycS0zMyAwIC02NC41IC0xOXQtNTYuNSAtNDZ0LTQ3LjUgLTUzLjV0LTQzLjUgLTQ1LjV0LTM3LjUgLTE5dC0zNiAxOXQtNDAgNDUuNXQtNDMgNTMuNXQtNTQgNDZ0LTY1LjUgMTlxLTY3IDAgLTEyMi41IC01NS41dC01NS41IC0xMzIuNXEwIC0yMyAxMy41IC01MXQ0NiAtNjV0NTcuNSAtNjN0NzYgLTc1bDIyIC0yMnExNSAtMTQgNDQgLTQ0dDUwLjUgLTUxdDQ2IC00NHQ0MSAtMzV0MjMgLTEyIHQyMy41IDEydDQyLjUgMzZ0NDYgNDR0NTIuNSA1MnQ0NCA0M3E0IDQgMTIgMTNxNDMgNDEgNjMuNSA2MnQ1MiA1NXQ0NiA1NXQyNiA0NnQxMS41IDQ0cTAgNzkgLTUzIDEzMy41dC0xMjAgNTQuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTQ0OyIgZD0iTTc3Ni41IDEyMTRxOTMuNSAwIDE1OS41IC02NmwxNDEgLTE0MXE2NiAtNjYgNjYgLTE2MHEwIC00MiAtMjggLTk1LjV0LTYyIC04Ny41bC0yOSAtMjlxLTMxIDUzIC03NyA5OWwtMTggMThsOTUgOTVsLTI0NyAyNDhsLTM4OSAtMzg5bDIxMiAtMjEybC0xMDUgLTEwNmwtMTkgMThsLTE0MSAxNDFxLTY2IDY2IC02NiAxNTl0NjYgMTU5bDI4MyAyODNxNjUgNjYgMTU4LjUgNjZ6TTYwMCA3MDZsMTA1IDEwNXExMCAtOCAxOSAtMTdsMTQxIC0xNDEgcTY2IC02NiA2NiAtMTU5dC02NiAtMTU5bC0yODMgLTI4M3EtNjYgLTY2IC0xNTkgLTY2dC0xNTkgNjZsLTE0MSAxNDFxLTY2IDY2IC02NiAxNTkuNXQ2NiAxNTkuNWw1NSA1NXEyOSAtNTUgNzUgLTEwMmwxOCAtMTdsLTk1IC05NWwyNDcgLTI0OGwzODkgMzg5eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNDU7IiBkPSJNNjAzIDEyMDBxODUgMCAxNjIgLTE1dDEyNyAtMzh0NzkgLTQ4dDI5IC00NnYtOTUzcTAgLTQxIC0yOS41IC03MC41dC03MC41IC0yOS41aC02MDBxLTQxIDAgLTcwLjUgMjkuNXQtMjkuNSA3MC41djk1M3EwIDIxIDMwIDQ2LjV0ODEgNDh0MTI5IDM3LjV0MTYzIDE1ek0zMDAgMTAwMHYtNzAwaDYwMHY3MDBoLTYwMHpNNjAwIDI1NHEtNDMgMCAtNzMuNSAtMzAuNXQtMzAuNSAtNzMuNXQzMC41IC03My41dDczLjUgLTMwLjV0NzMuNSAzMC41IHQzMC41IDczLjV0LTMwLjUgNzMuNXQtNzMuNSAzMC41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNDY7IiBkPSJNOTAyIDExODVsMjgzIC0yODJxMTUgLTE1IDE1IC0zNnQtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNXQtMzUgMTVsLTM2IDM1bC0yNzkgLTI2N3YtMzAwbC0yMTIgMjEwbC0zMDggLTMwN2wtMjgwIC0yMDNsMjAzIDI4MGwzMDcgMzA4bC0yMTAgMjEyaDMwMGwyNjcgMjc5bC0zNSAzNnEtMTUgMTQgLTE1IDM1dDE0LjUgMzUuNXQzNS41IDE0LjV0MzUgLTE1eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNDg7IiBkPSJNNzAwIDEyNDh2LTc4cTM4IC01IDcyLjUgLTE0LjV0NzUuNSAtMzEuNXQ3MSAtNTMuNXQ1MiAtODR0MjQgLTExOC41aC0xNTlxLTQgMzYgLTEwLjUgNTl0LTIxIDQ1dC00MCAzNS41dC02NC41IDIwLjV2LTMwN2w2NCAtMTNxMzQgLTcgNjQgLTE2LjV0NzAgLTMydDY3LjUgLTUyLjV0NDcuNSAtODB0MjAgLTExMnEwIC0xMzkgLTg5IC0yMjR0LTI0NCAtOTd2LTc3aC0xMDB2NzlxLTE1MCAxNiAtMjM3IDEwM3EtNDAgNDAgLTUyLjUgOTMuNSB0LTE1LjUgMTM5LjVoMTM5cTUgLTc3IDQ4LjUgLTEyNnQxMTcuNSAtNjV2MzM1bC0yNyA4cS00NiAxNCAtNzkgMjYuNXQtNzIgMzZ0LTYzIDUydC00MCA3Mi41dC0xNiA5OHEwIDcwIDI1IDEyNnQ2Ny41IDkydDk0LjUgNTd0MTEwIDI3djc3aDEwMHpNNjAwIDc1NHYyNzRxLTI5IC00IC01MCAtMTF0LTQyIC0yMS41dC0zMS41IC00MS41dC0xMC41IC02NXEwIC0yOSA3IC01MC41dDE2LjUgLTM0dDI4LjUgLTIyLjV0MzEuNSAtMTR0MzcuNSAtMTAgcTkgLTMgMTMgLTR6TTcwMCA1NDd2LTMxMHEyMiAyIDQyLjUgNi41dDQ1IDE1LjV0NDEuNSAyN3QyOSA0MnQxMiA1OS41dC0xMi41IDU5LjV0LTM4IDQ0LjV0LTUzIDMxdC02Ni41IDI0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE0OTsiIGQ9Ik01NjEgMTE5N3E4NCAwIDE2MC41IC00MHQxMjMuNSAtMTA5LjV0NDcgLTE0Ny41aC0xNTNxMCA0MCAtMTkuNSA3MS41dC00OS41IDQ4LjV0LTU5LjUgMjZ0LTU1LjUgOXEtMzcgMCAtNzkgLTE0LjV0LTYyIC0zNS41cS00MSAtNDQgLTQxIC0xMDFxMCAtMjYgMTMuNSAtNjN0MjYuNSAtNjF0MzcgLTY2cTYgLTkgOSAtMTRoMjQxdi0xMDBoLTE5N3E4IC01MCAtMi41IC0xMTV0LTMxLjUgLTk1cS00NSAtNjIgLTk5IC0xMTIgcTM0IDEwIDgzIDE3LjV0NzEgNy41cTMyIDEgMTAyIC0xNnQxMDQgLTE3cTgzIDAgMTM2IDMwbDUwIC0xNDdxLTMxIC0xOSAtNTggLTMwLjV0LTU1IC0xNS41dC00MiAtNC41dC00NiAtMC41cS0yMyAwIC03NiAxN3QtMTExIDMyLjV0LTk2IDExLjVxLTM5IC0zIC04MiAtMTZ0LTY3IC0yNWwtMjMgLTExbC01NSAxNDVxNCAzIDE2IDExdDE1LjUgMTAuNXQxMyA5dDE1LjUgMTJ0MTQuNSAxNHQxNy41IDE4LjVxNDggNTUgNTQgMTI2LjUgdC0zMCAxNDIuNWgtMjIxdjEwMGgxNjZxLTIzIDQ3IC00NCAxMDRxLTcgMjAgLTEyIDQxLjV0LTYgNTUuNXQ2IDY2LjV0MjkuNSA3MC41dDU4LjUgNzFxOTcgODggMjYzIDg4eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNTA7IiBkPSJNNDAwIDMwMGgxNTBxMjEgMCAyNSAtMTF0LTEwIC0yNWwtMjMwIC0yNTBxLTE0IC0xNSAtMzUgLTE1dC0zNSAxNWwtMjMwIDI1MHEtMTQgMTQgLTEwIDI1dDI1IDExaDE1MHY5MDBoMjAwdi05MDB6TTkzNSAxMTg0bDIzMCAtMjQ5cTE0IC0xNCAxMCAtMjQuNXQtMjUgLTEwLjVoLTE1MHYtOTAwaC0yMDB2OTAwaC0xNTBxLTIxIDAgLTI1IDEwLjV0MTAgMjQuNWwyMzAgMjQ5cTE0IDE1IDM1IDE1dDM1IC0xNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTUxOyIgZD0iTTEwMDAgNzAwaC0xMDB2MTAwaC0xMDB2LTEwMGgtMTAwdjUwMGgzMDB2LTUwMHpNNDAwIDMwMGgxNTBxMjEgMCAyNSAtMTF0LTEwIC0yNWwtMjMwIC0yNTBxLTE0IC0xNSAtMzUgLTE1dC0zNSAxNWwtMjMwIDI1MHEtMTQgMTQgLTEwIDI1dDI1IDExaDE1MHY5MDBoMjAwdi05MDB6TTgwMSAxMTAwdi0yMDBoMTAwdjIwMGgtMTAwek0xMDAwIDM1MGwtMjAwIC0yNTBoMjAwdi0xMDBoLTMwMHYxNTBsMjAwIDI1MGgtMjAwdjEwMGgzMDB2LTE1MHogIiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE1MjsiIGQ9Ik00MDAgMzAwaDE1MHEyMSAwIDI1IC0xMXQtMTAgLTI1bC0yMzAgLTI1MHEtMTQgLTE1IC0zNSAtMTV0LTM1IDE1bC0yMzAgMjUwcS0xNCAxNCAtMTAgMjV0MjUgMTFoMTUwdjkwMGgyMDB2LTkwMHpNMTAwMCAxMDUwbC0yMDAgLTI1MGgyMDB2LTEwMGgtMzAwdjE1MGwyMDAgMjUwaC0yMDB2MTAwaDMwMHYtMTUwek0xMDAwIDBoLTEwMHYxMDBoLTEwMHYtMTAwaC0xMDB2NTAwaDMwMHYtNTAwek04MDEgNDAwdi0yMDBoMTAwdjIwMGgtMTAweiAiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTUzOyIgZD0iTTQwMCAzMDBoMTUwcTIxIDAgMjUgLTExdC0xMCAtMjVsLTIzMCAtMjUwcS0xNCAtMTUgLTM1IC0xNXQtMzUgMTVsLTIzMCAyNTBxLTE0IDE0IC0xMCAyNXQyNSAxMWgxNTB2OTAwaDIwMHYtOTAwek0xMDAwIDcwMGgtMTAwdjQwMGgtMTAwdjEwMGgyMDB2LTUwMHpNMTEwMCAwaC0xMDB2MTAwaC0yMDB2NDAwaDMwMHYtNTAwek05MDEgNDAwdi0yMDBoMTAwdjIwMGgtMTAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNTQ7IiBkPSJNNDAwIDMwMGgxNTBxMjEgMCAyNSAtMTF0LTEwIC0yNWwtMjMwIC0yNTBxLTE0IC0xNSAtMzUgLTE1dC0zNSAxNWwtMjMwIDI1MHEtMTQgMTQgLTEwIDI1dDI1IDExaDE1MHY5MDBoMjAwdi05MDB6TTExMDAgNzAwaC0xMDB2MTAwaC0yMDB2NDAwaDMwMHYtNTAwek05MDEgMTEwMHYtMjAwaDEwMHYyMDBoLTEwMHpNMTAwMCAwaC0xMDB2NDAwaC0xMDB2MTAwaDIwMHYtNTAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNTU7IiBkPSJNNDAwIDMwMGgxNTBxMjEgMCAyNSAtMTF0LTEwIC0yNWwtMjMwIC0yNTBxLTE0IC0xNSAtMzUgLTE1dC0zNSAxNWwtMjMwIDI1MHEtMTQgMTQgLTEwIDI1dDI1IDExaDE1MHY5MDBoMjAwdi05MDB6TTkwMCAxMDAwaC0yMDB2MjAwaDIwMHYtMjAwek0xMDAwIDcwMGgtMzAwdjIwMGgzMDB2LTIwMHpNMTEwMCA0MDBoLTQwMHYyMDBoNDAwdi0yMDB6TTEyMDAgMTAwaC01MDB2MjAwaDUwMHYtMjAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNTY7IiBkPSJNNDAwIDMwMGgxNTBxMjEgMCAyNSAtMTF0LTEwIC0yNWwtMjMwIC0yNTBxLTE0IC0xNSAtMzUgLTE1dC0zNSAxNWwtMjMwIDI1MHEtMTQgMTQgLTEwIDI1dDI1IDExaDE1MHY5MDBoMjAwdi05MDB6TTEyMDAgMTAwMGgtNTAwdjIwMGg1MDB2LTIwMHpNMTEwMCA3MDBoLTQwMHYyMDBoNDAwdi0yMDB6TTEwMDAgNDAwaC0zMDB2MjAwaDMwMHYtMjAwek05MDAgMTAwaC0yMDB2MjAwaDIwMHYtMjAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNTc7IiBkPSJNMzUwIDExMDBoNDAwcTE2MiAwIDI1NiAtOTMuNXQ5NCAtMjU2LjV2LTQwMHEwIC0xNjUgLTkzLjUgLTI1Ny41dC0yNTYuNSAtOTIuNWgtNDAwcS0xNjUgMCAtMjU3LjUgOTIuNXQtOTIuNSAyNTcuNXY0MDBxMCAxNjUgOTIuNSAyNTcuNXQyNTcuNSA5Mi41ek04MDAgOTAwaC01MDBxLTQxIDAgLTcwLjUgLTI5LjV0LTI5LjUgLTcwLjV2LTUwMHEwIC00MSAyOS41IC03MC41dDcwLjUgLTI5LjVoNTAwcTQxIDAgNzAuNSAyOS41dDI5LjUgNzAuNSB2NTAwcTAgNDEgLTI5LjUgNzAuNXQtNzAuNSAyOS41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNTg7IiBkPSJNMzUwIDExMDBoNDAwcTE2NSAwIDI1Ny41IC05Mi41dDkyLjUgLTI1Ny41di00MDBxMCAtMTY1IC05Mi41IC0yNTcuNXQtMjU3LjUgLTkyLjVoLTQwMHEtMTYzIDAgLTI1Ni41IDkyLjV0LTkzLjUgMjU3LjV2NDAwcTAgMTYzIDk0IDI1Ni41dDI1NiA5My41ek04MDAgOTAwaC01MDBxLTQxIDAgLTcwLjUgLTI5LjV0LTI5LjUgLTcwLjV2LTUwMHEwIC00MSAyOS41IC03MC41dDcwLjUgLTI5LjVoNTAwcTQxIDAgNzAuNSAyOS41dDI5LjUgNzAuNSB2NTAwcTAgNDEgLTI5LjUgNzAuNXQtNzAuNSAyOS41ek00NDAgNzcwbDI1MyAtMTkwcTE3IC0xMiAxNyAtMzB0LTE3IC0zMGwtMjUzIC0xOTBxLTE2IC0xMiAtMjggLTYuNXQtMTIgMjYuNXY0MDBxMCAyMSAxMiAyNi41dDI4IC02LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE1OTsiIGQ9Ik0zNTAgMTEwMGg0MDBxMTYzIDAgMjU2LjUgLTk0dDkzLjUgLTI1NnYtNDAwcTAgLTE2NSAtOTIuNSAtMjU3LjV0LTI1Ny41IC05Mi41aC00MDBxLTE2NSAwIC0yNTcuNSA5Mi41dC05Mi41IDI1Ny41djQwMHEwIDE2MyA5Mi41IDI1Ni41dDI1Ny41IDkzLjV6TTgwMCA5MDBoLTUwMHEtNDEgMCAtNzAuNSAtMjkuNXQtMjkuNSAtNzAuNXYtNTAwcTAgLTQxIDI5LjUgLTcwLjV0NzAuNSAtMjkuNWg1MDBxNDEgMCA3MC41IDI5LjV0MjkuNSA3MC41IHY1MDBxMCA0MSAtMjkuNSA3MC41dC03MC41IDI5LjV6TTM1MCA3MDBoNDAwcTIxIDAgMjYuNSAtMTJ0LTYuNSAtMjhsLTE5MCAtMjUzcS0xMiAtMTcgLTMwIC0xN3QtMzAgMTdsLTE5MCAyNTNxLTEyIDE2IC02LjUgMjh0MjYuNSAxMnoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTYwOyIgZD0iTTM1MCAxMTAwaDQwMHExNjUgMCAyNTcuNSAtOTIuNXQ5Mi41IC0yNTcuNXYtNDAwcTAgLTE2MyAtOTIuNSAtMjU2LjV0LTI1Ny41IC05My41aC00MDBxLTE2MyAwIC0yNTYuNSA5NHQtOTMuNSAyNTZ2NDAwcTAgMTY1IDkyLjUgMjU3LjV0MjU3LjUgOTIuNXpNODAwIDkwMGgtNTAwcS00MSAwIC03MC41IC0yOS41dC0yOS41IC03MC41di01MDBxMCAtNDEgMjkuNSAtNzAuNXQ3MC41IC0yOS41aDUwMHE0MSAwIDcwLjUgMjkuNXQyOS41IDcwLjUgdjUwMHEwIDQxIC0yOS41IDcwLjV0LTcwLjUgMjkuNXpNNTgwIDY5M2wxOTAgLTI1M3ExMiAtMTYgNi41IC0yOHQtMjYuNSAtMTJoLTQwMHEtMjEgMCAtMjYuNSAxMnQ2LjUgMjhsMTkwIDI1M3ExMiAxNyAzMCAxN3QzMCAtMTd6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE2MTsiIGQ9Ik01NTAgMTEwMGg0MDBxMTY1IDAgMjU3LjUgLTkyLjV0OTIuNSAtMjU3LjV2LTQwMHEwIC0xNjUgLTkyLjUgLTI1Ny41dC0yNTcuNSAtOTIuNWgtNDAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDQ1MHE0MSAwIDcwLjUgMjkuNXQyOS41IDcwLjV2NTAwcTAgNDEgLTI5LjUgNzAuNXQtNzAuNSAyOS41aC00NTBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMCBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek0zMzggODY3bDMyNCAtMjg0cTE2IC0xNCAxNiAtMzN0LTE2IC0zM2wtMzI0IC0yODRxLTE2IC0xNCAtMjcgLTl0LTExIDI2djE1MGgtMjUwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYyMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDI1MHYxNTBxMCAyMSAxMSAyNnQyNyAtOXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTYyOyIgZD0iTTc5MyAxMTgybDkgLTlxOCAtMTAgNSAtMjdxLTMgLTExIC03OSAtMjI1LjV0LTc4IC0yMjEuNWwzMDAgMXEyNCAwIDMyLjUgLTE3LjV0LTUuNSAtMzUuNXEtMSAwIC0xMzMuNSAtMTU1dC0yNjcgLTMxMi41dC0xMzguNSAtMTYyLjVxLTEyIC0xNSAtMjYgLTE1aC05bC05IDhxLTkgMTEgLTQgMzJxMiA5IDQyIDEyMy41dDc5IDIyNC41bDM5IDExMGgtMzAycS0yMyAwIC0zMSAxOXEtMTAgMjEgNiA0MXE3NSA4NiAyMDkuNSAyMzcuNSB0MjI4IDI1N3Q5OC41IDExMS41cTkgMTYgMjUgMTZoOXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTYzOyIgZD0iTTM1MCAxMTAwaDQwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC00NTBxLTQxIDAgLTcwLjUgLTI5LjV0LTI5LjUgLTcwLjV2LTUwMHEwIC00MSAyOS41IC03MC41dDcwLjUgLTI5LjVoNDUwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTQwMHEtMTY1IDAgLTI1Ny41IDkyLjV0LTkyLjUgMjU3LjV2NDAwIHEwIDE2NSA5Mi41IDI1Ny41dDI1Ny41IDkyLjV6TTkzOCA4NjdsMzI0IC0yODRxMTYgLTE0IDE2IC0zM3QtMTYgLTMzbC0zMjQgLTI4NHEtMTYgLTE0IC0yNyAtOXQtMTEgMjZ2MTUwaC0yNTBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMjUwdjE1MHEwIDIxIDExIDI2dDI3IC05eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNjQ7IiBkPSJNNzUwIDEyMDBoNDAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di00MDBxMCAtMjEgLTEwLjUgLTI1dC0yNC41IDEwbC0xMDkgMTA5bC0zMTIgLTMxMnEtMTUgLTE1IC0zNS41IC0xNXQtMzUuNSAxNWwtMTQxIDE0MXEtMTUgMTUgLTE1IDM1LjV0MTUgMzUuNWwzMTIgMzEybC0xMDkgMTA5cS0xNCAxNCAtMTAgMjQuNXQyNSAxMC41ek00NTYgOTAwaC0xNTZxLTQxIDAgLTcwLjUgLTI5LjV0LTI5LjUgLTcwLjV2LTUwMCBxMCAtNDEgMjkuNSAtNzAuNXQ3MC41IC0yOS41aDUwMHE0MSAwIDcwLjUgMjkuNXQyOS41IDcwLjV2MTQ4bDIwMCAyMDB2LTI5OHEwIC0xNjUgLTkzLjUgLTI1Ny41dC0yNTYuNSAtOTIuNWgtNDAwcS0xNjUgMCAtMjU3LjUgOTIuNXQtOTIuNSAyNTcuNXY0MDBxMCAxNjUgOTIuNSAyNTcuNXQyNTcuNSA5Mi41aDMwMHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTY1OyIgZD0iTTYwMCAxMTg2cTExOSAwIDIyNy41IC00Ni41dDE4NyAtMTI1dDEyNSAtMTg3dDQ2LjUgLTIyNy41dC00Ni41IC0yMjcuNXQtMTI1IC0xODd0LTE4NyAtMTI1dC0yMjcuNSAtNDYuNXQtMjI3LjUgNDYuNXQtMTg3IDEyNXQtMTI1IDE4N3QtNDYuNSAyMjcuNXQ0Ni41IDIyNy41dDEyNSAxODd0MTg3IDEyNXQyMjcuNSA0Ni41ek02MDAgMTAyMnEtMTE1IDAgLTIxMiAtNTYuNXQtMTUzLjUgLTE1My41dC01Ni41IC0yMTJ0NTYuNSAtMjEyIHQxNTMuNSAtMTUzLjV0MjEyIC01Ni41dDIxMiA1Ni41dDE1My41IDE1My41dDU2LjUgMjEydC01Ni41IDIxMnQtMTUzLjUgMTUzLjV0LTIxMiA1Ni41ek02MDAgNzk0cTgwIDAgMTM3IC01N3Q1NyAtMTM3dC01NyAtMTM3dC0xMzcgLTU3dC0xMzcgNTd0LTU3IDEzN3Q1NyAxMzd0MTM3IDU3eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNjY7IiBkPSJNNDUwIDEyMDBoMjAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0zNTBoMjQ1cTIwIDAgMjUgLTExdC05IC0yNmwtMzgzIC00MjZxLTE0IC0xNSAtMzMuNSAtMTV0LTMyLjUgMTVsLTM3OSA0MjZxLTEzIDE1IC04LjUgMjZ0MjUuNSAxMWgyNTB2MzUwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNNTAgMzAwaDEwMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTI1MGgtMTEwMHYyNTBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41eiBNOTAwIDIwMHYtNTBoMTAwdjUwaC0xMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE2NzsiIGQ9Ik01ODMgMTE4MmwzNzggLTQzNXExNCAtMTUgOSAtMzF0LTI2IC0xNmgtMjQ0di0yNTBxMCAtMjAgLTE3IC0zNXQtMzkgLTE1aC0yMDBxLTIwIDAgLTMyIDE0LjV0LTEyIDM1LjV2MjUwaC0yNTBxLTIwIDAgLTI1LjUgMTYuNXQ4LjUgMzEuNWwzODMgNDMxcTE0IDE2IDMzLjUgMTd0MzMuNSAtMTR6TTUwIDMwMGgxMDAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0yNTBoLTExMDB2MjUwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXogTTkwMCAyMDB2LTUwaDEwMHY1MGgtMTAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNjg7IiBkPSJNMzk2IDcyM2wzNjkgMzY5cTcgNyAxNy41IDd0MTcuNSAtN2wxMzkgLTEzOXE3IC04IDcgLTE4LjV0LTcgLTE3LjVsLTUyNSAtNTI1cS03IC04IC0xNy41IC04dC0xNy41IDhsLTI5MiAyOTFxLTcgOCAtNyAxOHQ3IDE4bDEzOSAxMzlxOCA3IDE4LjUgN3QxNy41IC03ek01MCAzMDBoMTAwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjUwaC0xMTAwdjI1MHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTkwMCAyMDB2LTUwaDEwMHY1MCBoLTEwMHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTY5OyIgZD0iTTEzNSAxMDIzbDE0MiAxNDJxMTQgMTQgMzUgMTR0MzUgLTE0bDc3IC03N2wtMjEyIC0yMTJsLTc3IDc2cS0xNCAxNSAtMTQgMzZ0MTQgMzV6TTY1NSA4NTVsMjEwIDIxMHExNCAxNCAyNC41IDEwdDEwLjUgLTI1bC0yIC01OTlxLTEgLTIwIC0xNS41IC0zNXQtMzUuNSAtMTVsLTU5NyAtMXEtMjEgMCAtMjUgMTAuNXQxMCAyNC41bDIwOCAyMDhsLTE1NCAxNTVsMjEyIDIxMnpNNTAgMzAwaDEwMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjUgdi0yNTBoLTExMDB2MjUwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNOTAwIDIwMHYtNTBoMTAwdjUwaC0xMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE3MDsiIGQ9Ik0zNTAgMTIwMGw1OTkgLTJxMjAgLTEgMzUgLTE1LjV0MTUgLTM1LjVsMSAtNTk3cTAgLTIxIC0xMC41IC0yNXQtMjQuNSAxMGwtMjA4IDIwOGwtMTU1IC0xNTRsLTIxMiAyMTJsMTU1IDE1NGwtMjEwIDIxMHEtMTQgMTQgLTEwIDI0LjV0MjUgMTAuNXpNNTI0IDUxMmwtNzYgLTc3cS0xNSAtMTQgLTM2IC0xNHQtMzUgMTRsLTE0MiAxNDJxLTE0IDE0IC0xNCAzNXQxNCAzNWw3NyA3N3pNNTAgMzAwaDEwMDBxMjEgMCAzNS41IC0xNC41IHQxNC41IC0zNS41di0yNTBoLTExMDB2MjUwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNOTAwIDIwMHYtNTBoMTAwdjUwaC0xMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE3MTsiIGQ9Ik0xMjAwIDEwM2wtNDgzIDI3NmwtMzE0IC0zOTl2NDIzaC0zOTlsMTE5NiA3OTZ2LTEwOTZ6TTQ4MyA0MjR2LTIzMGw2ODMgOTUzeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNzI7IiBkPSJNMTEwMCAxMDAwdi04NTBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTE1MHY0MDBoLTcwMHYtNDAwaC0xNTBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMDBxMCAyMCAxNC41IDM1dDM1LjUgMTVoMjUwdi0zMDBoNTAwdjMwMGgxMDB6TTcwMCAxMDAwaC0xMDB2MjAwaDEwMHYtMjAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNzM7IiBkPSJNMTEwMCAxMDAwbC0yIC0xNDlsLTI5OSAtMjk5bC05NSA5NXEtOSA5IC0yMS41IDl0LTIxLjUgLTlsLTE0OSAtMTQ3aC0zMTJ2LTQwMGgtMTUwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDAwcTAgMjAgMTQuNSAzNXQzNS41IDE1aDI1MHYtMzAwaDUwMHYzMDBoMTAwek03MDAgMTAwMGgtMTAwdjIwMGgxMDB2LTIwMHpNMTEzMiA2MzhsMTA2IC0xMDZxNyAtNyA3IC0xNy41dC03IC0xNy41bC00MjAgLTQyMXEtOCAtNyAtMTggLTcgdC0xOCA3bC0yMDIgMjAzcS04IDcgLTggMTcuNXQ4IDE3LjVsMTA2IDEwNnE3IDggMTcuNSA4dDE3LjUgLThsNzkgLTc5bDI5NyAyOTdxNyA3IDE3LjUgN3QxNy41IC03eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNzQ7IiBkPSJNMTEwMCAxMDAwdi0yNjlsLTEwMyAtMTAzbC0xMzQgMTM0cS0xNSAxNSAtMzMuNSAxNi41dC0zNC41IC0xMi41bC0yNjYgLTI2NmgtMzI5di00MDBoLTE1MHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwMHEwIDIwIDE0LjUgMzV0MzUuNSAxNWgyNTB2LTMwMGg1MDB2MzAwaDEwMHpNNzAwIDEwMDBoLTEwMHYyMDBoMTAwdi0yMDB6TTEyMDIgNTcybDcwIC03MHExNSAtMTUgMTUgLTM1LjV0LTE1IC0zNS41bC0xMzEgLTEzMSBsMTMxIC0xMzFxMTUgLTE1IDE1IC0zNS41dC0xNSAtMzUuNWwtNzAgLTcwcS0xNSAtMTUgLTM1LjUgLTE1dC0zNS41IDE1bC0xMzEgMTMxbC0xMzEgLTEzMXEtMTUgLTE1IC0zNS41IC0xNXQtMzUuNSAxNWwtNzAgNzBxLTE1IDE1IC0xNSAzNS41dDE1IDM1LjVsMTMxIDEzMWwtMTMxIDEzMXEtMTUgMTUgLTE1IDM1LjV0MTUgMzUuNWw3MCA3MHExNSAxNSAzNS41IDE1dDM1LjUgLTE1bDEzMSAtMTMxbDEzMSAxMzFxMTUgMTUgMzUuNSAxNSB0MzUuNSAtMTV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE3NTsiIGQ9Ik0xMTAwIDEwMDB2LTMwMGgtMzUwcS0yMSAwIC0zNS41IC0xNC41dC0xNC41IC0zNS41di0xNTBoLTUwMHYtNDAwaC0xNTBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMDBxMCAyMCAxNC41IDM1dDM1LjUgMTVoMjUwdi0zMDBoNTAwdjMwMGgxMDB6TTcwMCAxMDAwaC0xMDB2MjAwaDEwMHYtMjAwek04NTAgNjAwaDEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjUwaDE1MHEyMSAwIDI1IC0xMC41dC0xMCAtMjQuNSBsLTIzMCAtMjMwcS0xNCAtMTQgLTM1IC0xNHQtMzUgMTRsLTIzMCAyMzBxLTE0IDE0IC0xMCAyNC41dDI1IDEwLjVoMTUwdjI1MHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE3NjsiIGQ9Ik0xMTAwIDEwMDB2LTQwMGwtMTY1IDE2NXEtMTQgMTUgLTM1IDE1dC0zNSAtMTVsLTI2MyAtMjY1aC00MDJ2LTQwMGgtMTUwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDAwcTAgMjAgMTQuNSAzNXQzNS41IDE1aDI1MHYtMzAwaDUwMHYzMDBoMTAwek03MDAgMTAwMGgtMTAwdjIwMGgxMDB2LTIwMHpNOTM1IDU2NWwyMzAgLTIyOXExNCAtMTUgMTAgLTI1LjV0LTI1IC0xMC41aC0xNTB2LTI1MHEwIC0yMCAtMTQuNSAtMzUgdC0zNS41IC0xNWgtMTAwcS0yMSAwIC0zNS41IDE1dC0xNC41IDM1djI1MGgtMTUwcS0yMSAwIC0yNSAxMC41dDEwIDI1LjVsMjMwIDIyOXExNCAxNSAzNSAxNXQzNSAtMTV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE3NzsiIGQ9Ik01MCAxMTAwaDExMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTE1MGgtMTIwMHYxNTBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek0xMjAwIDgwMHYtNTUwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXY1NTBoMTIwMHpNMTAwIDUwMHYtMjAwaDQwMHYyMDBoLTQwMHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTc4OyIgZD0iTTkzNSAxMTY1bDI0OCAtMjMwcTE0IC0xNCAxNCAtMzV0LTE0IC0zNWwtMjQ4IC0yMzBxLTE0IC0xNCAtMjQuNSAtMTB0LTEwLjUgMjV2MTUwaC00MDB2MjAwaDQwMHYxNTBxMCAyMSAxMC41IDI1dDI0LjUgLTEwek0yMDAgODAwaC01MHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWg1MHYtMjAwek00MDAgODAwaC0xMDB2MjAwaDEwMHYtMjAwek0xOCA0MzVsMjQ3IDIzMCBxMTQgMTQgMjQuNSAxMHQxMC41IC0yNXYtMTUwaDQwMHYtMjAwaC00MDB2LTE1MHEwIC0yMSAtMTAuNSAtMjV0LTI0LjUgMTBsLTI0NyAyMzBxLTE1IDE0IC0xNSAzNXQxNSAzNXpNOTAwIDMwMGgtMTAwdjIwMGgxMDB2LTIwMHpNMTAwMCA1MDBoNTFxMjAgMCAzNC41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzQuNSAtMTQuNWgtNTF2MjAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNzk7IiBkPSJNODYyIDEwNzNsMjc2IDExNnEyNSAxOCA0My41IDh0MTguNSAtNDF2LTExMDZxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTIwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2Mzk3cS00IDEgLTExIDV0LTI0IDE3LjV0LTMwIDI5dC0yNCA0MnQtMTEgNTYuNXYzNTlxMCAzMSAxOC41IDY1dDQzLjUgNTJ6TTU1MCAxMjAwcTIyIDAgMzQuNSAtMTIuNXQxNC41IC0yNC41bDEgLTEzdi00NTBxMCAtMjggLTEwLjUgLTU5LjUgdC0yNSAtNTZ0LTI5IC00NXQtMjUuNSAtMzEuNWwtMTAgLTExdi00NDdxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTIwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2NDQ3cS00IDQgLTExIDExLjV0LTI0IDMwLjV0LTMwIDQ2dC0yNCA1NXQtMTEgNjB2NDUwcTAgMiAwLjUgNS41dDQgMTJ0OC41IDE1dDE0LjUgMTJ0MjIuNSA1LjVxMjAgMCAzMi41IC0xMi41dDE0LjUgLTI0LjVsMyAtMTN2LTM1MGgxMDB2MzUwdjUuNXQyLjUgMTIgdDcgMTV0MTUgMTJ0MjUuNSA1LjVxMjMgMCAzNS41IC0xMi41dDEzLjUgLTI0LjVsMSAtMTN2LTM1MGgxMDB2MzUwcTAgMiAwLjUgNS41dDMgMTJ0NyAxNXQxNSAxMnQyNC41IDUuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTgwOyIgZD0iTTEyMDAgMTEwMHYtNTZxLTQgMCAtMTEgLTAuNXQtMjQgLTN0LTMwIC03LjV0LTI0IC0xNXQtMTEgLTI0di04ODhxMCAtMjIgMjUgLTM0LjV0NTAgLTEzLjVsMjUgLTJ2LTU2aC00MDB2NTZxNzUgMCA4Ny41IDYuNXQxMi41IDQzLjV2Mzk0aC01MDB2LTM5NHEwIC0zNyAxMi41IC00My41dDg3LjUgLTYuNXYtNTZoLTQwMHY1NnE0IDAgMTEgMC41dDI0IDN0MzAgNy41dDI0IDE1dDExIDI0djg4OHEwIDIyIC0yNSAzNC41dC01MCAxMy41IGwtMjUgMnY1Nmg0MDB2LTU2cS03NSAwIC04Ny41IC02LjV0LTEyLjUgLTQzLjV2LTM5NGg1MDB2Mzk0cTAgMzcgLTEyLjUgNDMuNXQtODcuNSA2LjV2NTZoNDAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxODE7IiBkPSJNNjc1IDEwMDBoMzc1cTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xNTBoLTEwNWwtMjk1IC05OHY5OGwtMjAwIDIwMGgtNDAwbDEwMCAxMDBoMzc1ek0xMDAgOTAwaDMwMHE0MSAwIDcwLjUgLTI5LjV0MjkuNSAtNzAuNXYtNTAwcTAgLTQxIC0yOS41IC03MC41dC03MC41IC0yOS41aC0zMDBxLTQxIDAgLTcwLjUgMjkuNXQtMjkuNSA3MC41djUwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjV6TTEwMCA4MDB2LTIwMGgzMDB2MjAwIGgtMzAwek0xMTAwIDUzNWwtNDAwIC0xMzN2MTYzbDQwMCAxMzN2LTE2M3pNMTAwIDUwMHYtMjAwaDMwMHYyMDBoLTMwMHpNMTEwMCAzOTh2LTI0OHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMzc1bC0xMDAgLTEwMGgtMzc1bC0xMDAgMTAwaDQwMGwyMDAgMjAwaDEwNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTgyOyIgZD0iTTE3IDEwMDdsMTYyIDE2MnExNyAxNyA0MCAxNHQzNyAtMjJsMTM5IC0xOTRxMTQgLTIwIDExIC00NC41dC0yMCAtNDEuNWwtMTE5IC0xMThxMTAyIC0xNDIgMjI4IC0yNjh0MjY3IC0yMjdsMTE5IDExOHExNyAxNyA0Mi41IDE5dDQ0LjUgLTEybDE5MiAtMTM2cTE5IC0xNCAyMi41IC0zNy41dC0xMy41IC00MC41bC0xNjMgLTE2MnEtMyAtMSAtOS41IC0xdC0yOS41IDJ0LTQ3LjUgNnQtNjIuNSAxNC41dC03Ny41IDI2LjV0LTkwIDQyLjUgdC0xMDEuNSA2MHQtMTExIDgzdC0xMTkgMTA4LjVxLTc0IDc0IC0xMzMuNSAxNTAuNXQtOTQuNSAxMzguNXQtNjAgMTE5LjV0LTM0LjUgMTAwdC0xNSA3NC41dC00LjUgNDh6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE4MzsiIGQ9Ik02MDAgMTEwMHE5MiAwIDE3NSAtMTAuNXQxNDEuNSAtMjd0MTA4LjUgLTM2LjV0ODEuNSAtNDB0NTMuNSAtMzd0MzEgLTI3bDkgLTEwdi0yMDBxMCAtMjEgLTE0LjUgLTMzdC0zNC41IC05bC0yMDIgMzRxLTIwIDMgLTM0LjUgMjB0LTE0LjUgMzh2MTQ2cS0xNDEgMjQgLTMwMCAyNHQtMzAwIC0yNHYtMTQ2cTAgLTIxIC0xNC41IC0zOHQtMzQuNSAtMjBsLTIwMiAtMzRxLTIwIC0zIC0zNC41IDl0LTE0LjUgMzN2MjAwcTMgNCA5LjUgMTAuNSB0MzEgMjZ0NTQgMzcuNXQ4MC41IDM5LjV0MTA5IDM3LjV0MTQxIDI2LjV0MTc1IDEwLjV6TTYwMCA3OTVxNTYgMCA5NyAtOS41dDYwIC0yMy41dDMwIC0yOHQxMiAtMjRsMSAtMTB2LTUwbDM2NSAtMzAzcTE0IC0xNSAyNC41IC00MHQxMC41IC00NXYtMjEycTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYyMTJxMCAyMCAxMC41IDQ1dDI0LjUgNDBsMzY1IDMwM3Y1MCBxMCA0IDEgMTAuNXQxMiAyM3QzMCAyOXQ2MCAyMi41dDk3IDEweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxODQ7IiBkPSJNMTEwMCA3MDBsLTIwMCAtMjAwaC02MDBsLTIwMCAyMDB2NTAwaDIwMHYtMjAwaDIwMHYyMDBoMjAwdi0yMDBoMjAwdjIwMGgyMDB2LTUwMHpNMjUwIDQwMGg3MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV0LTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTEybDEzNyAtMTAwaC05NTBsMTM3IDEwMGgtMTJxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41dDE0LjUgMzUuNXQzNS41IDE0LjV6TTUwIDEwMGgxMTAwcTIxIDAgMzUuNSAtMTQuNSB0MTQuNSAtMzUuNXYtNTBoLTEyMDB2NTBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxODU7IiBkPSJNNzAwIDExMDBoLTEwMHEtNDEgMCAtNzAuNSAtMjkuNXQtMjkuNSAtNzAuNXYtMTAwMGgzMDB2MTAwMHEwIDQxIC0yOS41IDcwLjV0LTcwLjUgMjkuNXpNMTEwMCA4MDBoLTEwMHEtNDEgMCAtNzAuNSAtMjkuNXQtMjkuNSAtNzAuNXYtNzAwaDMwMHY3MDBxMCA0MSAtMjkuNSA3MC41dC03MC41IDI5LjV6TTQwMCAwaC0zMDB2NDAwcTAgNDEgMjkuNSA3MC41dDcwLjUgMjkuNWgxMDBxNDEgMCA3MC41IC0yOS41dDI5LjUgLTcwLjV2LTQwMHogIiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE4NjsiIGQ9Ik0yMDAgMTEwMGg3MDBxMTI0IDAgMjEyIC04OHQ4OCAtMjEydi01MDBxMCAtMTI0IC04OCAtMjEydC0yMTIgLTg4aC03MDBxLTEyNCAwIC0yMTIgODh0LTg4IDIxMnY1MDBxMCAxMjQgODggMjEydDIxMiA4OHpNMTAwIDkwMHYtNzAwaDkwMHY3MDBoLTkwMHpNNTAwIDcwMGgtMjAwdi0xMDBoMjAwdi0zMDBoLTMwMHYxMDBoMjAwdjEwMGgtMjAwdjMwMGgzMDB2LTEwMHpNOTAwIDcwMHYtMzAwbC0xMDAgLTEwMGgtMjAwdjUwMGgyMDB6IE03MDAgNzAwdi0zMDBoMTAwdjMwMGgtMTAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxODc7IiBkPSJNMjAwIDExMDBoNzAwcTEyNCAwIDIxMiAtODh0ODggLTIxMnYtNTAwcTAgLTEyNCAtODggLTIxMnQtMjEyIC04OGgtNzAwcS0xMjQgMCAtMjEyIDg4dC04OCAyMTJ2NTAwcTAgMTI0IDg4IDIxMnQyMTIgODh6TTEwMCA5MDB2LTcwMGg5MDB2NzAwaC05MDB6TTUwMCAzMDBoLTEwMHYyMDBoLTEwMHYtMjAwaC0xMDB2NTAwaDEwMHYtMjAwaDEwMHYyMDBoMTAwdi01MDB6TTkwMCA3MDB2LTMwMGwtMTAwIC0xMDBoLTIwMHY1MDBoMjAweiBNNzAwIDcwMHYtMzAwaDEwMHYzMDBoLTEwMHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTg4OyIgZD0iTTIwMCAxMTAwaDcwMHExMjQgMCAyMTIgLTg4dDg4IC0yMTJ2LTUwMHEwIC0xMjQgLTg4IC0yMTJ0LTIxMiAtODhoLTcwMHEtMTI0IDAgLTIxMiA4OHQtODggMjEydjUwMHEwIDEyNCA4OCAyMTJ0MjEyIDg4ek0xMDAgOTAwdi03MDBoOTAwdjcwMGgtOTAwek01MDAgNzAwaC0yMDB2LTMwMGgyMDB2LTEwMGgtMzAwdjUwMGgzMDB2LTEwMHpNOTAwIDcwMGgtMjAwdi0zMDBoMjAwdi0xMDBoLTMwMHY1MDBoMzAwdi0xMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE4OTsiIGQ9Ik0yMDAgMTEwMGg3MDBxMTI0IDAgMjEyIC04OHQ4OCAtMjEydi01MDBxMCAtMTI0IC04OCAtMjEydC0yMTIgLTg4aC03MDBxLTEyNCAwIC0yMTIgODh0LTg4IDIxMnY1MDBxMCAxMjQgODggMjEydDIxMiA4OHpNMTAwIDkwMHYtNzAwaDkwMHY3MDBoLTkwMHpNNTAwIDQwMGwtMzAwIDE1MGwzMDAgMTUwdi0zMDB6TTkwMCA1NTBsLTMwMCAtMTUwdjMwMHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTkwOyIgZD0iTTIwMCAxMTAwaDcwMHExMjQgMCAyMTIgLTg4dDg4IC0yMTJ2LTUwMHEwIC0xMjQgLTg4IC0yMTJ0LTIxMiAtODhoLTcwMHEtMTI0IDAgLTIxMiA4OHQtODggMjEydjUwMHEwIDEyNCA4OCAyMTJ0MjEyIDg4ek0xMDAgOTAwdi03MDBoOTAwdjcwMGgtOTAwek05MDAgMzAwaC03MDB2NTAwaDcwMHYtNTAwek04MDAgNzAwaC0xMzBxLTM4IDAgLTY2LjUgLTQzdC0yOC41IC0xMDh0MjcgLTEwN3Q2OCAtNDJoMTMwdjMwMHpNMzAwIDcwMHYtMzAwIGgxMzBxNDEgMCA2OCA0MnQyNyAxMDd0LTI4LjUgMTA4dC02Ni41IDQzaC0xMzB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE5MTsiIGQ9Ik0yMDAgMTEwMGg3MDBxMTI0IDAgMjEyIC04OHQ4OCAtMjEydi01MDBxMCAtMTI0IC04OCAtMjEydC0yMTIgLTg4aC03MDBxLTEyNCAwIC0yMTIgODh0LTg4IDIxMnY1MDBxMCAxMjQgODggMjEydDIxMiA4OHpNMTAwIDkwMHYtNzAwaDkwMHY3MDBoLTkwMHpNNTAwIDcwMGgtMjAwdi0xMDBoMjAwdi0zMDBoLTMwMHYxMDBoMjAwdjEwMGgtMjAwdjMwMGgzMDB2LTEwMHpNOTAwIDMwMGgtMTAwdjQwMGgtMTAwdjEwMGgyMDB2LTUwMHogTTcwMCAzMDBoLTEwMHYxMDBoMTAwdi0xMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE5MjsiIGQ9Ik0yMDAgMTEwMGg3MDBxMTI0IDAgMjEyIC04OHQ4OCAtMjEydi01MDBxMCAtMTI0IC04OCAtMjEydC0yMTIgLTg4aC03MDBxLTEyNCAwIC0yMTIgODh0LTg4IDIxMnY1MDBxMCAxMjQgODggMjEydDIxMiA4OHpNMTAwIDkwMHYtNzAwaDkwMHY3MDBoLTkwMHpNMzAwIDcwMGgyMDB2LTQwMGgtMzAwdjUwMGgxMDB2LTEwMHpNOTAwIDMwMGgtMTAwdjQwMGgtMTAwdjEwMGgyMDB2LTUwMHpNMzAwIDYwMHYtMjAwaDEwMHYyMDBoLTEwMHogTTcwMCAzMDBoLTEwMHYxMDBoMTAwdi0xMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE5MzsiIGQ9Ik0yMDAgMTEwMGg3MDBxMTI0IDAgMjEyIC04OHQ4OCAtMjEydi01MDBxMCAtMTI0IC04OCAtMjEydC0yMTIgLTg4aC03MDBxLTEyNCAwIC0yMTIgODh0LTg4IDIxMnY1MDBxMCAxMjQgODggMjEydDIxMiA4OHpNMTAwIDkwMHYtNzAwaDkwMHY3MDBoLTkwMHpNNTAwIDUwMGwtMTk5IC0yMDBoLTEwMHY1MGwxOTkgMjAwdjE1MGgtMjAwdjEwMGgzMDB2LTMwMHpNOTAwIDMwMGgtMTAwdjQwMGgtMTAwdjEwMGgyMDB2LTUwMHpNNzAxIDMwMGgtMTAwIHYxMDBoMTAwdi0xMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE5NDsiIGQ9Ik02MDAgMTE5MXExMjAgMCAyMjkuNSAtNDd0MTg4LjUgLTEyNnQxMjYgLTE4OC41dDQ3IC0yMjkuNXQtNDcgLTIyOS41dC0xMjYgLTE4OC41dC0xODguNSAtMTI2dC0yMjkuNSAtNDd0LTIyOS41IDQ3dC0xODguNSAxMjZ0LTEyNiAxODguNXQtNDcgMjI5LjV0NDcgMjI5LjV0MTI2IDE4OC41dDE4OC41IDEyNnQyMjkuNSA0N3pNNjAwIDEwMjFxLTExNCAwIC0yMTEgLTU2LjV0LTE1My41IC0xNTMuNXQtNTYuNSAtMjExdDU2LjUgLTIxMSB0MTUzLjUgLTE1My41dDIxMSAtNTYuNXQyMTEgNTYuNXQxNTMuNSAxNTMuNXQ1Ni41IDIxMXQtNTYuNSAyMTF0LTE1My41IDE1My41dC0yMTEgNTYuNXpNODAwIDcwMGgtMzAwdi0yMDBoMzAwdi0xMDBoLTMwMGwtMTAwIDEwMHYyMDBsMTAwIDEwMGgzMDB2LTEwMHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTk1OyIgZD0iTTYwMCAxMTkxcTEyMCAwIDIyOS41IC00N3QxODguNSAtMTI2dDEyNiAtMTg4LjV0NDcgLTIyOS41dC00NyAtMjI5LjV0LTEyNiAtMTg4LjV0LTE4OC41IC0xMjZ0LTIyOS41IC00N3QtMjI5LjUgNDd0LTE4OC41IDEyNnQtMTI2IDE4OC41dC00NyAyMjkuNXQ0NyAyMjkuNXQxMjYgMTg4LjV0MTg4LjUgMTI2dDIyOS41IDQ3ek02MDAgMTAyMXEtMTE0IDAgLTIxMSAtNTYuNXQtMTUzLjUgLTE1My41dC01Ni41IC0yMTF0NTYuNSAtMjExIHQxNTMuNSAtMTUzLjV0MjExIC01Ni41dDIxMSA1Ni41dDE1My41IDE1My41dDU2LjUgMjExdC01Ni41IDIxMXQtMTUzLjUgMTUzLjV0LTIxMSA1Ni41ek04MDAgNzAwdi0xMDBsLTUwIC01MGwxMDAgLTEwMHYtNTBoLTEwMGwtMTAwIDEwMGgtMTUwdi0xMDBoLTEwMHY0MDBoMzAwek01MDAgNzAwdi0xMDBoMjAwdjEwMGgtMjAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxOTc7IiBkPSJNNTAzIDEwODlxMTEwIDAgMjAwLjUgLTU5LjV0MTM0LjUgLTE1Ni41cTQ0IDE0IDkwIDE0cTEyMCAwIDIwNSAtODYuNXQ4NSAtMjA3dC04NSAtMjA3dC0yMDUgLTg2LjVoLTEyOHYyNTBxMCAyMSAtMTQuNSAzNS41dC0zNS41IDE0LjVoLTMwMHEtMjEgMCAtMzUuNSAtMTQuNXQtMTQuNSAtMzUuNXYtMjUwaC0yMjJxLTgwIDAgLTEzNiA1Ny41dC01NiAxMzYuNXEwIDY5IDQzIDEyMi41dDEwOCA2Ny41cS0yIDE5IC0yIDM3cTAgMTAwIDQ5IDE4NSB0MTM0IDEzNHQxODUgNDl6TTUyNSA1MDBoMTUwcTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtMjc1aDEzN3EyMSAwIDI2IC0xMS41dC04IC0yNy41bC0yMjMgLTI0NHEtMTMgLTE2IC0zMiAtMTZ0LTMyIDE2bC0yMjMgMjQ0cS0xMyAxNiAtOCAyNy41dDI2IDExLjVoMTM3djI3NXEwIDEwIDcuNSAxNy41dDE3LjUgNy41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxOTg7IiBkPSJNNTAyIDEwODlxMTEwIDAgMjAxIC01OS41dDEzNSAtMTU2LjVxNDMgMTUgODkgMTVxMTIxIDAgMjA2IC04Ni41dDg2IC0yMDYuNXEwIC05OSAtNjAgLTE4MXQtMTUwIC0xMTBsLTM3OCAzNjBxLTEzIDE2IC0zMS41IDE2dC0zMS41IC0xNmwtMzgxIC0zNjVoLTlxLTc5IDAgLTEzNS41IDU3LjV0LTU2LjUgMTM2LjVxMCA2OSA0MyAxMjIuNXQxMDggNjcuNXEtMiAxOSAtMiAzOHEwIDEwMCA0OSAxODQuNXQxMzMuNSAxMzR0MTg0LjUgNDkuNXogTTYzMiA0NjdsMjIzIC0yMjhxMTMgLTE2IDggLTI3LjV0LTI2IC0xMS41aC0xMzd2LTI3NXEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTE1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djI3NWgtMTM3cS0yMSAwIC0yNiAxMS41dDggMjcuNXExOTkgMjA0IDIyMyAyMjhxMTkgMTkgMzEuNSAxOXQzMi41IC0xOXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTk5OyIgZD0iTTcwMCAxMDB2MTAwaDQwMGwtMjcwIDMwMGgxNzBsLTI3MCAzMDBoMTcwbC0zMDAgMzMzbC0zMDAgLTMzM2gxNzBsLTI3MCAtMzAwaDE3MGwtMjcwIC0zMDBoNDAwdi0xMDBoLTUwcS0yMSAwIC0zNS41IC0xNC41dC0xNC41IC0zNS41di01MGg0MDB2NTBxMCAyMSAtMTQuNSAzNS41dC0zNS41IDE0LjVoLTUweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyMDA7IiBkPSJNNjAwIDExNzlxOTQgMCAxNjcuNSAtNTYuNXQ5OS41IC0xNDUuNXE4OSAtNiAxNTAuNSAtNzEuNXQ2MS41IC0xNTUuNXEwIC02MSAtMjkuNSAtMTEyLjV0LTc5LjUgLTgyLjVxOSAtMjkgOSAtNTVxMCAtNzQgLTUyLjUgLTEyNi41dC0xMjYuNSAtNTIuNXEtNTUgMCAtMTAwIDMwdi0yNTFxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTUwaC0zMDB2NTBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41djI1MXEtNDUgLTMwIC0xMDAgLTMwIHEtNzQgMCAtMTI2LjUgNTIuNXQtNTIuNSAxMjYuNXEwIDE4IDQgMzhxLTQ3IDIxIC03NS41IDY1dC0yOC41IDk3cTAgNzQgNTIuNSAxMjYuNXQxMjYuNSA1Mi41cTUgMCAyMyAtMnEwIDIgLTEgMTB0LTEgMTNxMCAxMTYgODEuNSAxOTcuNXQxOTcuNSA4MS41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyMDE7IiBkPSJNMTAxMCAxMDEwcTExMSAtMTExIDE1MC41IC0yNjAuNXQwIC0yOTl0LTE1MC41IC0yNjAuNXEtODMgLTgzIC0xOTEuNSAtMTI2LjV0LTIxOC41IC00My41dC0yMTguNSA0My41dC0xOTEuNSAxMjYuNXEtMTExIDExMSAtMTUwLjUgMjYwLjV0MCAyOTl0MTUwLjUgMjYwLjVxODMgODMgMTkxLjUgMTI2LjV0MjE4LjUgNDMuNXQyMTguNSAtNDMuNXQxOTEuNSAtMTI2LjV6TTQ3NiAxMDY1cS00IDAgLTggLTFxLTEyMSAtMzQgLTIwOS41IC0xMjIuNSB0LTEyMi41IC0yMDkuNXEtNCAtMTIgMi41IC0yM3QxOC41IC0xNGwzNiAtOXEzIC0xIDcgLTFxMjMgMCAyOSAyMnEyNyA5NiA5OCAxNjZxNzAgNzEgMTY2IDk4cTExIDMgMTcuNSAxMy41dDMuNSAyMi41bC05IDM1cS0zIDEzIC0xNCAxOXEtNyA0IC0xNSA0ek01MTIgOTIwcS00IDAgLTkgLTJxLTgwIC0yNCAtMTM4LjUgLTgyLjV0LTgyLjUgLTEzOC41cS00IC0xMyAyIC0yNHQxOSAtMTRsMzQgLTlxNCAtMSA4IC0xcTIyIDAgMjggMjEgcTE4IDU4IDU4LjUgOTguNXQ5Ny41IDU4LjVxMTIgMyAxOCAxMy41dDMgMjEuNWwtOSAzNXEtMyAxMiAtMTQgMTlxLTcgNCAtMTUgNHpNNzE5LjUgNzE5LjVxLTQ5LjUgNDkuNSAtMTE5LjUgNDkuNXQtMTE5LjUgLTQ5LjV0LTQ5LjUgLTExOS41dDQ5LjUgLTExOS41dDExOS41IC00OS41dDExOS41IDQ5LjV0NDkuNSAxMTkuNXQtNDkuNSAxMTkuNXpNODU1IDU1MXEtMjIgMCAtMjggLTIxcS0xOCAtNTggLTU4LjUgLTk4LjV0LTk4LjUgLTU3LjUgcS0xMSAtNCAtMTcgLTE0LjV0LTMgLTIxLjVsOSAtMzVxMyAtMTIgMTQgLTE5cTcgLTQgMTUgLTRxNCAwIDkgMnE4MCAyNCAxMzguNSA4Mi41dDgyLjUgMTM4LjVxNCAxMyAtMi41IDI0dC0xOC41IDE0bC0zNCA5cS00IDEgLTggMXpNMTAwMCA1MTVxLTIzIDAgLTI5IC0yMnEtMjcgLTk2IC05OCAtMTY2cS03MCAtNzEgLTE2NiAtOThxLTExIC0zIC0xNy41IC0xMy41dC0zLjUgLTIyLjVsOSAtMzVxMyAtMTMgMTQgLTE5cTcgLTQgMTUgLTQgcTQgMCA4IDFxMTIxIDM0IDIwOS41IDEyMi41dDEyMi41IDIwOS41cTQgMTIgLTIuNSAyM3QtMTguNSAxNGwtMzYgOXEtMyAxIC03IDF6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTIwMjsiIGQ9Ik03MDAgODAwaDMwMHYtMzgwaC0xODB2MjAwaC0zNDB2LTIwMGgtMzgwdjc1NXEwIDEwIDcuNSAxNy41dDE3LjUgNy41aDU3NXYtNDAwek0xMDAwIDkwMGgtMjAwdjIwMHpNNzAwIDMwMGgxNjJsLTIxMiAtMjEybC0yMTIgMjEyaDE2MnYyMDBoMTAwdi0yMDB6TTUyMCAwaC0zOTVxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXYzOTV6TTEwMDAgMjIwdi0xOTVxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0xOTV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTIwMzsiIGQ9Ik03MDAgODAwaDMwMHYtNTIwbC0zNTAgMzUwbC01NTAgLTU1MHYxMDk1cTAgMTAgNy41IDE3LjV0MTcuNSA3LjVoNTc1di00MDB6TTEwMDAgOTAwaC0yMDB2MjAwek04NjIgMjAwaC0xNjJ2LTIwMGgtMTAwdjIwMGgtMTYybDIxMiAyMTJ6TTQ4MCAwaC0zNTVxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXY1NWgzODB2LTgwek0xMDAwIDgwdi01NXEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTE1NXY4MGgxODB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTIwNDsiIGQ9Ik0xMTYyIDgwMGgtMTYydi0yMDBoMTAwbDEwMCAtMTAwaC0zMDB2MzAwaC0xNjJsMjEyIDIxMnpNMjAwIDgwMGgyMDBxMjcgMCA0MCAtMnQyOS41IC0xMC41dDIzLjUgLTMwdDcgLTU3LjVoMzAwdi0xMDBoLTYwMGwtMjAwIC0zNTB2NDUwaDEwMHEwIDM2IDcgNTcuNXQyMy41IDMwdDI5LjUgMTAuNXQ0MCAyek04MDAgNDAwaDI0MGwtMjQwIC00MDBoLTgwMGwzMDAgNTAwaDUwMHYtMTAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyMDU7IiBkPSJNNjUwIDExMDBoMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di01MGg1MHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0zMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoNTB2NTBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek0xMDAwIDg1MHYxNTBxNDEgMCA3MC41IC0yOS41dDI5LjUgLTcwLjV2LTgwMCBxMCAtNDEgLTI5LjUgLTcwLjV0LTcwLjUgLTI5LjVoLTYwMHEtMSAwIC0yMCA0bDI0NiAyNDZsLTMyNiAzMjZ2MzI0cTAgNDEgMjkuNSA3MC41dDcwLjUgMjkuNXYtMTUwcTAgLTYyIDQ0IC0xMDZ0MTA2IC00NGgzMDBxNjIgMCAxMDYgNDR0NDQgMTA2ek00MTIgMjUwbC0yMTIgLTIxMnYxNjJoLTIwMHYxMDBoMjAwdjE2MnoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMjA2OyIgZD0iTTQ1MCAxMTAwaDEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNTBoNTBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMzAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDUwdjUwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNODAwIDg1MHYxNTBxNDEgMCA3MC41IC0yOS41dDI5LjUgLTcwLjV2LTUwMCBoLTIwMHYtMzAwaDIwMHEwIC0zNiAtNyAtNTcuNXQtMjMuNSAtMzB0LTI5LjUgLTEwLjV0LTQwIC0yaC02MDBxLTQxIDAgLTcwLjUgMjkuNXQtMjkuNSA3MC41djgwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjV2LTE1MHEwIC02MiA0NCAtMTA2dDEwNiAtNDRoMzAwcTYyIDAgMTA2IDQ0dDQ0IDEwNnpNMTIxMiAyNTBsLTIxMiAtMjEydjE2MmgtMjAwdjEwMGgyMDB2MTYyeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyMDk7IiBkPSJNNjU4IDExOTdsNjM3IC0xMTA0cTIzIC0zOCA3IC02NS41dC02MCAtMjcuNWgtMTI3NnEtNDQgMCAtNjAgMjcuNXQ3IDY1LjVsNjM3IDExMDRxMjIgMzkgNTQgMzl0NTQgLTM5ek03MDQgODAwaC0yMDhxLTIwIDAgLTMyIC0xNC41dC04IC0zNC41bDU4IC0zMDJxNCAtMjAgMjEuNSAtMzQuNXQzNy41IC0xNC41aDU0cTIwIDAgMzcuNSAxNC41dDIxLjUgMzQuNWw1OCAzMDJxNCAyMCAtOCAzNC41dC0zMiAxNC41ek01MDAgMzAwdi0xMDBoMjAwIHYxMDBoLTIwMHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMjEwOyIgZD0iTTQyNSAxMTAwaDI1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTE1MHEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTI1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djE1MHEwIDEwIDcuNSAxNy41dDE3LjUgNy41ek00MjUgODAwaDI1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTE1MHEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTI1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djE1MHEwIDEwIDcuNSAxNy41IHQxNy41IDcuNXpNODI1IDgwMGgyNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di0xNTBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0yNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXYxNTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXpNMjUgNTAwaDI1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTE1MHEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTI1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djE1MCBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXpNNDI1IDUwMGgyNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di0xNTBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0yNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXYxNTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXpNODI1IDUwMGgyNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di0xNTBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0yNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNSB2MTUwcTAgMTAgNy41IDE3LjV0MTcuNSA3LjV6TTI1IDIwMGgyNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di0xNTBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0yNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXYxNTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXpNNDI1IDIwMGgyNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di0xNTBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0yNTBxLTEwIDAgLTE3LjUgNy41IHQtNy41IDE3LjV2MTUwcTAgMTAgNy41IDE3LjV0MTcuNSA3LjV6TTgyNSAyMDBoMjUwcTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtMTUwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtMjUwcS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2MTUwcTAgMTAgNy41IDE3LjV0MTcuNSA3LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTIxMTsiIGQ9Ik03MDAgMTIwMGgxMDB2LTIwMGgtMTAwdi0xMDBoMzUwcTYyIDAgODYuNSAtMzkuNXQtMy41IC05NC41bC02NiAtMTMycS00MSAtODMgLTgxIC0xMzRoLTc3MnEtNDAgNTEgLTgxIDEzNGwtNjYgMTMycS0yOCA1NSAtMy41IDk0LjV0ODYuNSAzOS41aDM1MHYxMDBoLTEwMHYyMDBoMTAwdjEwMGgyMDB2LTEwMHpNMjUwIDQwMGg3MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV0LTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTEybDEzNyAtMTAwIGgtOTUwbDEzOCAxMDBoLTEzcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXQxNC41IDM1LjV0MzUuNSAxNC41ek01MCAxMDBoMTEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNTBoLTEyMDB2NTBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyMTI7IiBkPSJNNjAwIDEzMDBxNDAgMCA2OC41IC0yOS41dDI4LjUgLTcwLjVoLTE5NHEwIDQxIDI4LjUgNzAuNXQ2OC41IDI5LjV6TTQ0MyAxMTAwaDMxNHExOCAtMzcgMTggLTc1cTAgLTggLTMgLTI1aDMyOHE0MSAwIDQ0LjUgLTE2LjV0LTMwLjUgLTM4LjVsLTE3NSAtMTQ1aC02NzhsLTE3OCAxNDVxLTM0IDIyIC0yOSAzOC41dDQ2IDE2LjVoMzI4cS0zIDE3IC0zIDI1cTAgMzggMTggNzV6TTI1MCA3MDBoNzAwcTIxIDAgMzUuNSAtMTQuNSB0MTQuNSAtMzUuNXQtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTUwdi0yMDBsMjc1IC0yMDBoLTk1MGwyNzUgMjAwdjIwMGgtMTUwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXQxNC41IDM1LjV0MzUuNSAxNC41ek01MCAxMDBoMTEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNTBoLTEyMDB2NTBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyMTM7IiBkPSJNNjAwIDExODFxNzUgMCAxMjggLTUzdDUzIC0xMjh0LTUzIC0xMjh0LTEyOCAtNTN0LTEyOCA1M3QtNTMgMTI4dDUzIDEyOHQxMjggNTN6TTYwMiA3OThoNDZxMzQgMCA1NS41IC0yOC41dDIxLjUgLTg2LjVxMCAtNzYgMzkgLTE4M2gtMzI0cTM5IDEwNyAzOSAxODNxMCA1OCAyMS41IDg2LjV0NTYuNSAyOC41aDQ1ek0yNTAgNDAwaDcwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXQtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTMgbDEzOCAtMTAwaC05NTBsMTM3IDEwMGgtMTJxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41dDE0LjUgMzUuNXQzNS41IDE0LjV6TTUwIDEwMGgxMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di01MGgtMTIwMHY1MHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTIxNDsiIGQ9Ik02MDAgMTMwMHE0NyAwIDkyLjUgLTUzLjV0NzEgLTEyM3QyNS41IC0xMjMuNXEwIC03OCAtNTUuNSAtMTMzLjV0LTEzMy41IC01NS41dC0xMzMuNSA1NS41dC01NS41IDEzMy41cTAgNjIgMzQgMTQzbDE0NCAtMTQzbDExMSAxMTFsLTE2MyAxNjNxMzQgMjYgNjMgMjZ6TTYwMiA3OThoNDZxMzQgMCA1NS41IC0yOC41dDIxLjUgLTg2LjVxMCAtNzYgMzkgLTE4M2gtMzI0cTM5IDEwNyAzOSAxODNxMCA1OCAyMS41IDg2LjV0NTYuNSAyOC41aDQ1IHpNMjUwIDQwMGg3MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV0LTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTEzbDEzOCAtMTAwaC05NTBsMTM3IDEwMGgtMTJxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41dDE0LjUgMzUuNXQzNS41IDE0LjV6TTUwIDEwMGgxMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di01MGgtMTIwMHY1MHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTIxNTsiIGQ9Ik02MDAgMTIwMGwzMDAgLTE2MXYtMTM5aC0zMDBxMCAtNTcgMTguNSAtMTA4dDUwIC05MS41dDYzIC03MnQ3MCAtNjcuNXQ1Ny41IC02MWgtNTMwcS02MCA4MyAtOTAuNSAxNzcuNXQtMzAuNSAxNzguNXQzMyAxNjQuNXQ4Ny41IDEzOS41dDEyNiA5Ni41dDE0NS41IDQxLjV2LTk4ek0yNTAgNDAwaDcwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXQtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTNsMTM4IC0xMDBoLTk1MGwxMzcgMTAwIGgtMTJxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41dDE0LjUgMzUuNXQzNS41IDE0LjV6TTUwIDEwMGgxMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di01MGgtMTIwMHY1MHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTIxNjsiIGQ9Ik02MDAgMTMwMHE0MSAwIDcwLjUgLTI5LjV0MjkuNSAtNzAuNXYtNzhxNDYgLTI2IDczIC03MnQyNyAtMTAwdi01MGgtNDAwdjUwcTAgNTQgMjcgMTAwdDczIDcydjc4cTAgNDEgMjkuNSA3MC41dDcwLjUgMjkuNXpNNDAwIDgwMGg0MDBxNTQgMCAxMDAgLTI3dDcyIC03M2gtMTcydi0xMDBoMjAwdi0xMDBoLTIwMHYtMTAwaDIwMHYtMTAwaC0yMDB2LTEwMGgyMDBxMCAtODMgLTU4LjUgLTE0MS41dC0xNDEuNSAtNTguNWgtNDAwIHEtODMgMCAtMTQxLjUgNTguNXQtNTguNSAxNDEuNXY0MDBxMCA4MyA1OC41IDE0MS41dDE0MS41IDU4LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTIxODsiIGQ9Ik0xNTAgMTEwMGg5MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTUwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtOTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXY1MDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek0xMjUgNDAwaDk1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTUwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtMjgzbDIyNCAtMjI0cTEzIC0xMyAxMyAtMzEuNXQtMTMgLTMyIHQtMzEuNSAtMTMuNXQtMzEuNSAxM2wtODggODhoLTUyNGwtODcgLTg4cS0xMyAtMTMgLTMyIC0xM3QtMzIgMTMuNXQtMTMgMzJ0MTMgMzEuNWwyMjQgMjI0aC0yODlxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXY1MHEwIDEwIDcuNSAxNy41dDE3LjUgNy41ek01NDEgMzAwbC0xMDAgLTEwMGgzMjRsLTEwMCAxMDBoLTEyNHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMjE5OyIgZD0iTTIwMCAxMTAwaDgwMHE4MyAwIDE0MS41IC01OC41dDU4LjUgLTE0MS41di0yMDBoLTEwMHEwIDQxIC0yOS41IDcwLjV0LTcwLjUgMjkuNWgtMjUwcS00MSAwIC03MC41IC0yOS41dC0yOS41IC03MC41aC0xMDBxMCA0MSAtMjkuNSA3MC41dC03MC41IDI5LjVoLTI1MHEtNDEgMCAtNzAuNSAtMjkuNXQtMjkuNSAtNzAuNWgtMTAwdjIwMHEwIDgzIDU4LjUgMTQxLjV0MTQxLjUgNTguNXpNMTAwIDYwMGgxMDAwcTQxIDAgNzAuNSAtMjkuNSB0MjkuNSAtNzAuNXYtMzAwaC0xMjAwdjMwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjV6TTMwMCAxMDB2LTUwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djUwaDIwMHpNMTEwMCAxMDB2LTUwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djUwaDIwMHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMjIxOyIgZD0iTTQ4MCAxMTY1bDY4MiAtNjgzcTMxIC0zMSAzMSAtNzUuNXQtMzEgLTc1LjVsLTEzMSAtMTMxaC00ODFsLTUxNyA1MThxLTMyIDMxIC0zMiA3NS41dDMyIDc1LjVsMjk1IDI5NnEzMSAzMSA3NS41IDMxdDc2LjUgLTMxek0xMDggNzk0bDM0MiAtMzQybDMwMyAzMDRsLTM0MSAzNDF6TTI1MCAxMDBoODAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di01MGgtOTAwdjUwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMjIzOyIgZD0iTTEwNTcgNjQ3bC0xODkgNTA2cS04IDE5IC0yNy41IDMzdC00MC41IDE0aC00MDBxLTIxIDAgLTQwLjUgLTE0dC0yNy41IC0zM2wtMTg5IC01MDZxLTggLTE5IDEuNSAtMzN0MzAuNSAtMTRoNjI1di0xNTBxMCAtMjEgMTQuNSAtMzUuNXQzNS41IC0xNC41dDM1LjUgMTQuNXQxNC41IDM1LjV2MTUwaDEyNXEyMSAwIDMwLjUgMTR0MS41IDMzek04OTcgMGgtNTk1djUwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWg1MHY1MCBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDQ4djMwMGgyMDB2LTMwMGg0N3EyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNTBoNTBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTUweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyMjQ7IiBkPSJNOTAwIDgwMGgzMDB2LTU3NXEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTM3NXY1OTFsLTMwMCAzMDB2ODRxMCAxMCA3LjUgMTcuNXQxNy41IDcuNWgzNzV2LTQwMHpNMTIwMCA5MDBoLTIwMHYyMDB6TTQwMCA2MDBoMzAwdi01NzVxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC02NTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXY5NTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNWgzNzV2LTQwMHpNNzAwIDcwMGgtMjAwdjIwMHogIiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTIyNTsiIGQ9Ik00ODQgMTA5NWgxOTVxNzUgMCAxNDYgLTMyLjV0MTI0IC04NnQ4OS41IC0xMjIuNXQ0OC41IC0xNDJxMTggLTE0IDM1IC0yMHEzMSAtMTAgNjQuNSA2LjV0NDMuNSA0OC41cTEwIDM0IC0xNSA3MXEtMTkgMjcgLTkgNDNxNSA4IDEyLjUgMTF0MTkgLTF0MjMuNSAtMTZxNDEgLTQ0IDM5IC0xMDVxLTMgLTYzIC00NiAtMTA2LjV0LTEwNCAtNDMuNWgtNjJxLTcgLTU1IC0zNSAtMTE3dC01NiAtMTAwbC0zOSAtMjM0cS0zIC0yMCAtMjAgLTM0LjUgdC0zOCAtMTQuNWgtMTAwcS0yMSAwIC0zMyAxNC41dC05IDM0LjVsMTIgNzBxLTQ5IC0xNCAtOTEgLTE0aC0xOTVxLTI0IDAgLTY1IDhsLTExIC02NHEtMyAtMjAgLTIwIC0zNC41dC0zOCAtMTQuNWgtMTAwcS0yMSAwIC0zMyAxNC41dC05IDM0LjVsMjYgMTU3cS04NCA3NCAtMTI4IDE3NWwtMTU5IDUzcS0xOSA3IC0zMyAyNnQtMTQgNDB2NTBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDEyNHExMSA4NyA1NiAxNjZsLTExMSA5NSBxLTE2IDE0IC0xMi41IDIzLjV0MjQuNSA5LjVoMjAzcTExNiAxMDEgMjUwIDEwMXpNNjc1IDEwMDBoLTI1MHEtMTAgMCAtMTcuNSAtNy41dC03LjUgLTE3LjV2LTUwcTAgLTEwIDcuNSAtMTcuNXQxNy41IC03LjVoMjUwcTEwIDAgMTcuNSA3LjV0Ny41IDE3LjV2NTBxMCAxMCAtNy41IDE3LjV0LTE3LjUgNy41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyMjY7IiBkPSJNNjQxIDkwMGw0MjMgMjQ3cTE5IDggNDIgMi41dDM3IC0yMS41bDMyIC0zOHExNCAtMTUgMTIuNSAtMzZ0LTE3LjUgLTM0bC0xMzkgLTEyMGgtMzkwek01MCAxMTAwaDEwNnE2NyAwIDEwMyAtMTd0NjYgLTcxbDEwMiAtMjEyaDgyM3EyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNTBxMCAtMjEgLTE0IC00MHQtMzMgLTI2bC03MzcgLTEzMnEtMjMgLTQgLTQwIDZ0LTI2IDI1cS00MiA2NyAtMTAwIDY3aC0zMDBxLTYyIDAgLTEwNiA0NCB0LTQ0IDEwNnYyMDBxMCA2MiA0NCAxMDZ0MTA2IDQ0ek0xNzMgOTI4aC04MHEtMTkgMCAtMjggLTE0dC05IC0zNXYtNTZxMCAtNTEgNDIgLTUxaDEzNHExNiAwIDIxLjUgOHQ1LjUgMjRxMCAxMSAtMTYgNDV0LTI3IDUxcS0xOCAyOCAtNDMgMjh6TTU1MCA3MjdxLTMyIDAgLTU0LjUgLTIyLjV0LTIyLjUgLTU0LjV0MjIuNSAtNTQuNXQ1NC41IC0yMi41dDU0LjUgMjIuNXQyMi41IDU0LjV0LTIyLjUgNTQuNXQtNTQuNSAyMi41ek0xMzAgMzg5IGwxNTIgMTMwcTE4IDE5IDM0IDI0dDMxIC0zLjV0MjQuNSAtMTcuNXQyNS41IC0yOHEyOCAtMzUgNTAuNSAtNTF0NDguNSAtMTNsNjMgNWw0OCAtMTc5cTEzIC02MSAtMy41IC05Ny41dC02Ny41IC03OS41bC04MCAtNjlxLTQ3IC00MCAtMTA5IC0zNS41dC0xMDMgNTEuNWwtMTMwIDE1MXEtNDAgNDcgLTM1LjUgMTA5LjV0NTEuNSAxMDIuNXpNMzgwIDM3N2wtMTAyIC04OHEtMzEgLTI3IDIgLTY1bDM3IC00M3ExMyAtMTUgMjcuNSAtMTkuNSB0MzEuNSA2LjVsNjEgNTNxMTkgMTYgMTQgNDlxLTIgMjAgLTEyIDU2dC0xNyA0NXEtMTEgMTIgLTE5IDE0dC0yMyAtOHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMjI3OyIgZD0iTTYyNSAxMjAwaDE1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTEwOXE3OSAtMzMgMTMxIC04Ny41dDUzIC0xMjguNXExIC00NiAtMTUgLTg0LjV0LTM5IC02MXQtNDYgLTM4dC0zOSAtMjEuNWwtMTcgLTZxNiAwIDE1IC0xLjV0MzUgLTl0NTAgLTE3LjV0NTMgLTMwdDUwIC00NXQzNS41IC02NHQxNC41IC04NHEwIC01OSAtMTEuNSAtMTA1LjV0LTI4LjUgLTc2LjV0LTQ0IC01MXQtNDkuNSAtMzEuNXQtNTQuNSAtMTZ0LTQ5LjUgLTYuNSB0LTQzLjUgLTF2LTc1cTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtMTUwcS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2NzVoLTEwMHYtNzVxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0xNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXY3NWgtMTc1cS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2MTUwcTAgMTAgNy41IDE3LjV0MTcuNSA3LjVoNzV2NjAwaC03NXEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djE1MCBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNWgxNzV2NzVxMCAxMCA3LjUgMTcuNXQxNy41IDcuNWgxNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di03NWgxMDB2NzVxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXpNNDAwIDkwMHYtMjAwaDI2M3EyOCAwIDQ4LjUgMTAuNXQzMCAyNXQxNSAyOXQ1LjUgMjUuNWwxIDEwcTAgNCAtMC41IDExdC02IDI0dC0xNSAzMHQtMzAgMjR0LTQ4LjUgMTFoLTI2M3pNNDAwIDUwMHYtMjAwaDM2M3EyOCAwIDQ4LjUgMTAuNSB0MzAgMjV0MTUgMjl0NS41IDI1LjVsMSAxMHEwIDQgLTAuNSAxMXQtNiAyNHQtMTUgMzB0LTMwIDI0dC00OC41IDExaC0zNjN6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTIzMDsiIGQ9Ik0yMTIgMTE5OGg3ODBxODYgMCAxNDcgLTYxdDYxIC0xNDd2LTQxNnEwIC01MSAtMTggLTE0Mi41dC0zNiAtMTU3LjVsLTE4IC02NnEtMjkgLTg3IC05My41IC0xNDYuNXQtMTQ2LjUgLTU5LjVoLTU3MnEtODIgMCAtMTQ3IDU5dC05MyAxNDdxLTggMjggLTIwIDczdC0zMiAxNDMuNXQtMjAgMTQ5LjV2NDE2cTAgODYgNjEgMTQ3dDE0NyA2MXpNNjAwIDEwNDVxLTcwIDAgLTEzMi41IC0xMS41dC0xMDUuNSAtMzAuNXQtNzguNSAtNDEuNSB0LTU3IC00NXQtMzYgLTQxdC0yMC41IC0zMC41bC02IC0xMmwxNTYgLTI0M2g1NjBsMTU2IDI0M3EtMiA1IC02IDEyLjV0LTIwIDI5LjV0LTM2LjUgNDJ0LTU3IDQ0LjV0LTc5IDQydC0xMDUgMjkuNXQtMTMyLjUgMTJ6TTc2MiA3MDNoLTE1N2wxOTUgMjYxeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyMzE7IiBkPSJNNDc1IDEzMDBoMTUwcTEwMyAwIDE4OSAtODZ0ODYgLTE4OXYtNTAwcTAgLTQxIC00MiAtODN0LTgzIC00MmgtNDUwcS00MSAwIC04MyA0MnQtNDIgODN2NTAwcTAgMTAzIDg2IDE4OXQxODkgODZ6TTcwMCAzMDB2LTIyNXEwIC0yMSAtMjcgLTQ4dC00OCAtMjdoLTE1MHEtMjEgMCAtNDggMjd0LTI3IDQ4djIyNWgzMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTIzMjsiIGQ9Ik00NzUgMTMwMGg5NnEwIC0xNTAgODkuNSAtMjM5LjV0MjM5LjUgLTg5LjV2LTQ0NnEwIC00MSAtNDIgLTgzdC04MyAtNDJoLTQ1MHEtNDEgMCAtODMgNDJ0LTQyIDgzdjUwMHEwIDEwMyA4NiAxODl0MTg5IDg2ek03MDAgMzAwdi0yMjVxMCAtMjEgLTI3IC00OHQtNDggLTI3aC0xNTBxLTIxIDAgLTQ4IDI3dC0yNyA0OHYyMjVoMzAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyMzM7IiBkPSJNMTI5NCA3NjdsLTYzOCAtMjgzbC0zNzggMTcwbC03OCAtNjB2LTIyNGwxMDAgLTE1MHYtMTk5bC0xNTAgMTQ4bC0xNTAgLTE0OXYyMDBsMTAwIDE1MHYyNTBxMCA0IC0wLjUgMTAuNXQwIDkuNXQxIDh0MyA4dDYuNSA2bDQ3IDQwbC0xNDcgNjVsNjQyIDI4M3pNMTAwMCAzODBsLTM1MCAtMTY2bC0zNTAgMTY2djE0N2wzNTAgLTE2NWwzNTAgMTY1di0xNDd6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTIzNDsiIGQ9Ik0yNTAgODAwcTYyIDAgMTA2IC00NHQ0NCAtMTA2dC00NCAtMTA2dC0xMDYgLTQ0dC0xMDYgNDR0LTQ0IDEwNnQ0NCAxMDZ0MTA2IDQ0ek02NTAgODAwcTYyIDAgMTA2IC00NHQ0NCAtMTA2dC00NCAtMTA2dC0xMDYgLTQ0dC0xMDYgNDR0LTQ0IDEwNnQ0NCAxMDZ0MTA2IDQ0ek0xMDUwIDgwMHE2MiAwIDEwNiAtNDR0NDQgLTEwNnQtNDQgLTEwNnQtMTA2IC00NHQtMTA2IDQ0dC00NCAxMDZ0NDQgMTA2dDEwNiA0NHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMjM1OyIgZD0iTTU1MCAxMTAwcTYyIDAgMTA2IC00NHQ0NCAtMTA2dC00NCAtMTA2dC0xMDYgLTQ0dC0xMDYgNDR0LTQ0IDEwNnQ0NCAxMDZ0MTA2IDQ0ek01NTAgNzAwcTYyIDAgMTA2IC00NHQ0NCAtMTA2dC00NCAtMTA2dC0xMDYgLTQ0dC0xMDYgNDR0LTQ0IDEwNnQ0NCAxMDZ0MTA2IDQ0ek01NTAgMzAwcTYyIDAgMTA2IC00NHQ0NCAtMTA2dC00NCAtMTA2dC0xMDYgLTQ0dC0xMDYgNDR0LTQ0IDEwNnQ0NCAxMDZ0MTA2IDQ0eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyMzY7IiBkPSJNMTI1IDExMDBoOTUwcTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtMTUwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtOTUwcS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2MTUwcTAgMTAgNy41IDE3LjV0MTcuNSA3LjV6TTEyNSA3MDBoOTUwcTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtMTUwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtOTUwcS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2MTUwcTAgMTAgNy41IDE3LjUgdDE3LjUgNy41ek0xMjUgMzAwaDk1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTE1MHEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTk1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djE1MHEwIDEwIDcuNSAxNy41dDE3LjUgNy41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyMzc7IiBkPSJNMzUwIDEyMDBoNTAwcTE2MiAwIDI1NiAtOTMuNXQ5NCAtMjU2LjV2LTUwMHEwIC0xNjUgLTkzLjUgLTI1Ny41dC0yNTYuNSAtOTIuNWgtNTAwcS0xNjUgMCAtMjU3LjUgOTIuNXQtOTIuNSAyNTcuNXY1MDBxMCAxNjUgOTIuNSAyNTcuNXQyNTcuNSA5Mi41ek05MDAgMTAwMGgtNjAwcS00MSAwIC03MC41IC0yOS41dC0yOS41IC03MC41di02MDBxMCAtNDEgMjkuNSAtNzAuNXQ3MC41IC0yOS41aDYwMHE0MSAwIDcwLjUgMjkuNSB0MjkuNSA3MC41djYwMHEwIDQxIC0yOS41IDcwLjV0LTcwLjUgMjkuNXpNMzUwIDkwMGg1MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTMwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYzMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek00MDAgODAwdi0yMDBoNDAwdjIwMGgtNDAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyMzg7IiBkPSJNMTUwIDExMDBoMTAwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXQtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNTB2LTIwMGg1MHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXQtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNTB2LTIwMGg1MHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXQtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNTB2LTIwMGg1MHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXQtMTQuNSAtMzUuNSB0LTM1LjUgLTE0LjVoLTEwMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41dDE0LjUgMzUuNXQzNS41IDE0LjVoNTB2MjAwaC01MHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV0MTQuNSAzNS41dDM1LjUgMTQuNWg1MHYyMDBoLTUwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXQxNC41IDM1LjV0MzUuNSAxNC41aDUwdjIwMGgtNTBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41dDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTIzOTsiIGQ9Ik02NTAgMTE4N3E4NyAtNjcgMTE4LjUgLTE1NnQwIC0xNzh0LTExOC41IC0xNTVxLTg3IDY2IC0xMTguNSAxNTV0MCAxNzh0MTE4LjUgMTU2ek0zMDAgODAwcTEyNCAwIDIxMiAtODh0ODggLTIxMnEtMTI0IDAgLTIxMiA4OHQtODggMjEyek0xMDAwIDgwMHEwIC0xMjQgLTg4IC0yMTJ0LTIxMiAtODhxMCAxMjQgODggMjEydDIxMiA4OHpNMzAwIDUwMHExMjQgMCAyMTIgLTg4dDg4IC0yMTJxLTEyNCAwIC0yMTIgODh0LTg4IDIxMnogTTEwMDAgNTAwcTAgLTEyNCAtODggLTIxMnQtMjEyIC04OHEwIDEyNCA4OCAyMTJ0MjEyIDg4ek03MDAgMTk5di0xNDRxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjV0LTM1LjUgMTQuNXQtMTQuNSAzNS41djE0MnE0MCAtNCA0MyAtNHExNyAwIDU3IDZ6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTI0MDsiIGQ9Ik03NDUgODc4bDY5IDE5cTI1IDYgNDUgLTEybDI5OCAtMjk1cTExIC0xMSAxNSAtMjYuNXQtMiAtMzAuNXEtNSAtMTQgLTE4IC0yMy41dC0yOCAtOS41aC04cTEgMCAxIC0xM3EwIC0yOSAtMiAtNTZ0LTguNSAtNjJ0LTIwIC02M3QtMzMgLTUzdC01MSAtMzl0LTcyLjUgLTE0aC0xNDZxLTE4NCAwIC0xODQgMjg4cTAgMjQgMTAgNDdxLTIwIDQgLTYyIDR0LTYzIC00cTExIC0yNCAxMSAtNDdxMCAtMjg4IC0xODQgLTI4OGgtMTQyIHEtNDggMCAtODQuNSAyMXQtNTYgNTF0LTMyIDcxLjV0LTE2IDc1dC0zLjUgNjguNXEwIDEzIDIgMTNoLTdxLTE1IDAgLTI3LjUgOS41dC0xOC41IDIzLjVxLTYgMTUgLTIgMzAuNXQxNSAyNS41bDI5OCAyOTZxMjAgMTggNDYgMTFsNzYgLTE5cTIwIC01IDMwLjUgLTIyLjV0NS41IC0zNy41dC0yMi41IC0zMXQtMzcuNSAtNWwtNTEgMTJsLTE4MiAtMTkzaDg5MWwtMTgyIDE5M2wtNDQgLTEycS0yMCAtNSAtMzcuNSA2dC0yMi41IDMxdDYgMzcuNSB0MzEgMjIuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMjQxOyIgZD0iTTEyMDAgOTAwaC01MHEwIDIxIC00IDM3dC05LjUgMjYuNXQtMTggMTcuNXQtMjIgMTF0LTI4LjUgNS41dC0zMSAydC0zNyAwLjVoLTIwMHYtODUwcTAgLTIyIDI1IC0zNC41dDUwIC0xMy41bDI1IC0ydi0xMDBoLTQwMHYxMDBxNCAwIDExIDAuNXQyNCAzdDMwIDd0MjQgMTV0MTEgMjQuNXY4NTBoLTIwMHEtMjUgMCAtMzcgLTAuNXQtMzEgLTJ0LTI4LjUgLTUuNXQtMjIgLTExdC0xOCAtMTcuNXQtOS41IC0yNi41dC00IC0zN2gtNTB2MzAwIGgxMDAwdi0zMDB6TTUwMCA0NTBoLTI1cTAgMTUgLTQgMjQuNXQtOSAxNC41dC0xNyA3LjV0LTIwIDN0LTI1IDAuNWgtMTAwdi00MjVxMCAtMTEgMTIuNSAtMTcuNXQyNS41IC03LjVoMTJ2LTUwaC0yMDB2NTBxNTAgMCA1MCAyNXY0MjVoLTEwMHEtMTcgMCAtMjUgLTAuNXQtMjAgLTN0LTE3IC03LjV0LTkgLTE0LjV0LTQgLTI0LjVoLTI1djE1MGg1MDB2LTE1MHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMjQyOyIgZD0iTTEwMDAgMzAwdjUwcS0yNSAwIC01NSAzMnEtMTQgMTQgLTI1IDMxdC0xNiAyN2wtNCAxMWwtMjg5IDc0N2gtNjlsLTMwMCAtNzU0cS0xOCAtMzUgLTM5IC01NnEtOSAtOSAtMjQuNSAtMTguNXQtMjYuNSAtMTQuNWwtMTEgLTV2LTUwaDI3M3Y1MHEtNDkgMCAtNzguNSAyMS41dC0xMS41IDY3LjVsNjkgMTc2aDI5M2w2MSAtMTY2cTEzIC0zNCAtMy41IC02Ni41dC01NS41IC0zMi41di01MGgzMTJ6TTQxMiA2OTFsMTM0IDM0MmwxMjEgLTM0MiBoLTI1NXpNMTEwMCAxNTB2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTAwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWgxMDAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyNDM7IiBkPSJNNTAgMTIwMGgxMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNNjExIDExMThoLTcwcS0xMyAwIC0xOCAtMTJsLTI5OSAtNzUzcS0xNyAtMzIgLTM1IC01MXEtMTggLTE4IC01NiAtMzRxLTEyIC01IC0xMiAtMTh2LTUwcTAgLTggNS41IC0xNHQxNC41IC02IGgyNzNxOCAwIDE0IDZ0NiAxNHY1MHEwIDggLTYgMTR0LTE0IDZxLTU1IDAgLTcxIDIzcS0xMCAxNCAwIDM5bDYzIDE2M2gyNjZsNTcgLTE1M3ExMSAtMzEgLTYgLTU1cS0xMiAtMTcgLTM2IC0xN3EtOCAwIC0xNCAtNnQtNiAtMTR2LTUwcTAgLTggNiAtMTR0MTQgLTZoMzEzcTggMCAxNCA2dDYgMTR2NTBxMCA3IC01LjUgMTN0LTEzLjUgN3EtMTcgMCAtNDIgMjVxLTI1IDI3IC00MCA2M2gtMWwtMjg4IDc0OHEtNSAxMiAtMTkgMTJ6TTYzOSA2MTEgaC0xOTdsMTAzIDI2NHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMjQ0OyIgZD0iTTEyMDAgMTEwMGgtMTIwMHYxMDBoMTIwMHYtMTAwek01MCAxMDAwaDQwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtOTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC00MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djkwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTY1MCAxMDAwaDQwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNDAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC00MDAgcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXY0MDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek03MDAgOTAwdi0zMDBoMzAwdjMwMGgtMzAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyNDU7IiBkPSJNNTAgMTIwMGg0MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTkwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNDAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXY5MDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek02NTAgNzAwaDQwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNDAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC00MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djQwMCBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek03MDAgNjAwdi0zMDBoMzAwdjMwMGgtMzAwek0xMjAwIDBoLTEyMDB2MTAwaDEyMDB2LTEwMHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMjQ2OyIgZD0iTTUwIDEwMDBoNDAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0zNTBoMTAwdjE1MHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoNDAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xNTBoMTAwdi0xMDBoLTEwMHYtMTUwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC00MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djE1MGgtMTAwdi0zNTBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTQwMCBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djgwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTcwMCA3MDB2LTMwMGgzMDB2MzAwaC0zMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTI0NzsiIGQ9Ik0xMDAgMGgtMTAwdjEyMDBoMTAwdi0xMjAwek0yNTAgMTEwMGg0MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTQwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNDAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXY0MDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek0zMDAgMTAwMHYtMzAwaDMwMHYzMDBoLTMwMHpNMjUwIDUwMGg5MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTQwMCBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTkwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2NDAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMjQ4OyIgZD0iTTYwMCAxMTAwaDE1MHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNDAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xNTB2LTEwMGg0NTBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTQwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtOTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXY0MDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDM1MHYxMDBoLTE1MHEtMjEgMCAtMzUuNSAxNC41IHQtMTQuNSAzNS41djQwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMTUwdjEwMGgxMDB2LTEwMHpNNDAwIDEwMDB2LTMwMGgzMDB2MzAwaC0zMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTI0OTsiIGQ9Ik0xMjAwIDBoLTEwMHYxMjAwaDEwMHYtMTIwMHpNNTUwIDExMDBoNDAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di00MDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTQwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2NDAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNNjAwIDEwMDB2LTMwMGgzMDB2MzAwaC0zMDB6TTUwIDUwMGg5MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTQwMCBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTkwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2NDAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMjUwOyIgZD0iTTg2NSA1NjVsLTQ5NCAtNDk0cS0yMyAtMjMgLTQxIC0yM3EtMTQgMCAtMjIgMTMuNXQtOCAzOC41djEwMDBxMCAyNSA4IDM4LjV0MjIgMTMuNXExOCAwIDQxIC0yM2w0OTQgLTQ5NHExNCAtMTQgMTQgLTM1dC0xNCAtMzV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTI1MTsiIGQ9Ik0zMzUgNjM1bDQ5NCA0OTRxMjkgMjkgNTAgMjAuNXQyMSAtNDkuNXYtMTAwMHEwIC00MSAtMjEgLTQ5LjV0LTUwIDIwLjVsLTQ5NCA0OTRxLTE0IDE0IC0xNCAzNXQxNCAzNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMjUyOyIgZD0iTTEwMCA5MDBoMTAwMHE0MSAwIDQ5LjUgLTIxdC0yMC41IC01MGwtNDk0IC00OTRxLTE0IC0xNCAtMzUgLTE0dC0zNSAxNGwtNDk0IDQ5NHEtMjkgMjkgLTIwLjUgNTB0NDkuNSAyMXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMjUzOyIgZD0iTTYzNSA4NjVsNDk0IC00OTRxMjkgLTI5IDIwLjUgLTUwdC00OS41IC0yMWgtMTAwMHEtNDEgMCAtNDkuNSAyMXQyMC41IDUwbDQ5NCA0OTRxMTQgMTQgMzUgMTR0MzUgLTE0eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyNTQ7IiBkPSJNNzAwIDc0MXYtMTgybC02OTIgLTMyM3YyMjFsNDEzIDE5M2wtNDEzIDE5M3YyMjF6TTEyMDAgMGgtODAwdjIwMGg4MDB2LTIwMHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMjU1OyIgZD0iTTEyMDAgOTAwaC0yMDB2LTEwMGgyMDB2LTEwMGgtMzAwdjMwMGgyMDB2MTAwaC0yMDB2MTAwaDMwMHYtMzAwek0wIDcwMGg1MHEwIDIxIDQgMzd0OS41IDI2LjV0MTggMTcuNXQyMiAxMXQyOC41IDUuNXQzMSAydDM3IDAuNWgxMDB2LTU1MHEwIC0yMiAtMjUgLTM0LjV0LTUwIC0xMy41bC0yNSAtMnYtMTAwaDQwMHYxMDBxLTQgMCAtMTEgMC41dC0yNCAzdC0zMCA3dC0yNCAxNXQtMTEgMjQuNXY1NTBoMTAwcTI1IDAgMzcgLTAuNXQzMSAtMiB0MjguNSAtNS41dDIyIC0xMXQxOCAtMTcuNXQ5LjUgLTI2LjV0NCAtMzdoNTB2MzAwaC04MDB2LTMwMHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMjU2OyIgZD0iTTgwMCA3MDBoLTUwcTAgMjEgLTQgMzd0LTkuNSAyNi41dC0xOCAxNy41dC0yMiAxMXQtMjguNSA1LjV0LTMxIDJ0LTM3IDAuNWgtMTAwdi01NTBxMCAtMjIgMjUgLTM0LjV0NTAgLTE0LjVsMjUgLTF2LTEwMGgtNDAwdjEwMHE0IDAgMTEgMC41dDI0IDN0MzAgN3QyNCAxNXQxMSAyNC41djU1MGgtMTAwcS0yNSAwIC0zNyAtMC41dC0zMSAtMnQtMjguNSAtNS41dC0yMiAtMTF0LTE4IC0xNy41dC05LjUgLTI2LjV0LTQgLTM3aC01MHYzMDAgaDgwMHYtMzAwek0xMTAwIDIwMGgtMjAwdi0xMDBoMjAwdi0xMDBoLTMwMHYzMDBoMjAwdjEwMGgtMjAwdjEwMGgzMDB2LTMwMHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMjU3OyIgZD0iTTcwMSAxMDk4aDE2MHExNiAwIDIxIC0xMXQtNyAtMjNsLTQ2NCAtNDY0bDQ2NCAtNDY0cTEyIC0xMiA3IC0yM3QtMjEgLTExaC0xNjBxLTEzIDAgLTIzIDlsLTQ3MSA0NzFxLTcgOCAtNyAxOHQ3IDE4bDQ3MSA0NzFxMTAgOSAyMyA5eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyNTg7IiBkPSJNMzM5IDEwOThoMTYwcTEzIDAgMjMgLTlsNDcxIC00NzFxNyAtOCA3IC0xOHQtNyAtMThsLTQ3MSAtNDcxcS0xMCAtOSAtMjMgLTloLTE2MHEtMTYgMCAtMjEgMTF0NyAyM2w0NjQgNDY0bC00NjQgNDY0cS0xMiAxMiAtNyAyM3QyMSAxMXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMjU5OyIgZD0iTTEwODcgODgycTExIC01IDExIC0yMXYtMTYwcTAgLTEzIC05IC0yM2wtNDcxIC00NzFxLTggLTcgLTE4IC03dC0xOCA3bC00NzEgNDcxcS05IDEwIC05IDIzdjE2MHEwIDE2IDExIDIxdDIzIC03bDQ2NCAtNDY0bDQ2NCA0NjRxMTIgMTIgMjMgN3oiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMjYwOyIgZD0iTTYxOCA5OTNsNDcxIC00NzFxOSAtMTAgOSAtMjN2LTE2MHEwIC0xNiAtMTEgLTIxdC0yMyA3bC00NjQgNDY0bC00NjQgLTQ2NHEtMTIgLTEyIC0yMyAtN3QtMTEgMjF2MTYwcTAgMTMgOSAyM2w0NzEgNDcxcTggNyAxOCA3dDE4IC03eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGY4ZmY7IiBkPSJNMTAwMCAxMjAwcTAgLTEyNCAtODggLTIxMnQtMjEyIC04OHEwIDEyNCA4OCAyMTJ0MjEyIDg4ek00NTAgMTAwMGgxMDBxMjEgMCA0MCAtMTR0MjYgLTMzbDc5IC0xOTRxNSAxIDE2IDNxMzQgNiA1NCA5LjV0NjAgN3Q2NS41IDF0NjEgLTEwdDU2LjUgLTIzdDQyLjUgLTQydDI5IC02NHQ1IC05MnQtMTkuNSAtMTIxLjVxLTEgLTcgLTMgLTE5LjV0LTExIC01MHQtMjAuNSAtNzN0LTMyLjUgLTgxLjV0LTQ2LjUgLTgzdC02NCAtNzAgdC04Mi41IC01MHEtMTMgLTUgLTQyIC01dC02NS41IDIuNXQtNDcuNSAyLjVxLTE0IDAgLTQ5LjUgLTMuNXQtNjMgLTMuNXQtNDMuNSA3cS01NyAyNSAtMTA0LjUgNzguNXQtNzUgMTExLjV0LTQ2LjUgMTEydC0yNiA5MGwtNyAzNXEtMTUgNjMgLTE4IDExNXQ0LjUgODguNXQyNiA2NHQzOS41IDQzLjV0NTIgMjUuNXQ1OC41IDEzdDYyLjUgMnQ1OS41IC00LjV0NTUuNSAtOGwtMTQ3IDE5MnEtMTIgMTggLTUuNSAzMHQyNy41IDEyeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeDFmNTExOyIgZD0iTTI1MCAxMjAwaDYwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNDAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xNTB2LTUwMGwtMjU1IC0xNzhxLTE5IC05IC0zMiAtMXQtMTMgMjl2NjUwaC0xNTBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djQwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTQwMCAxMTAwdi0xMDBoMzAwdjEwMGgtMzAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeDFmNmFhOyIgZD0iTTI1MCAxMjAwaDc1MHEzOSAwIDY5LjUgLTQwLjV0MzAuNSAtODQuNXYtOTMzbC03MDAgLTExN3Y5NTBsNjAwIDEyNWgtNzAwdi0xMDAwaC0xMDB2MTAyNXEwIDIzIDE1LjUgNDl0MzQuNSAyNnpNNTAwIDUyNXYtMTAwbDEwMCAyMHYxMDB6IiAvPgo8L2ZvbnQ%2BCjwvZGVmcz48L3N2Zz4g%29%20format%28%27svg%27%29%7D%2Eglyphicon%7Bposition%3Arelative%3Btop%3A1px%3Bdisplay%3Ainline%2Dblock%3Bfont%2Dfamily%3A%27Glyphicons%20Halflings%27%3Bfont%2Dstyle%3Anormal%3Bfont%2Dweight%3A400%3Bline%2Dheight%3A1%3B%2Dwebkit%2Dfont%2Dsmoothing%3Aantialiased%3B%2Dmoz%2Dosx%2Dfont%2Dsmoothing%3Agrayscale%7D%2Eglyphicon%2Dasterisk%3Abefore%7Bcontent%3A%22%5C2a%22%7D%2Eglyphicon%2Dplus%3Abefore%7Bcontent%3A%22%5C2b%22%7D%2Eglyphicon%2Deur%3Abefore%2C%2Eglyphicon%2Deuro%3Abefore%7Bcontent%3A%22%5C20ac%22%7D%2Eglyphicon%2Dminus%3Abefore%7Bcontent%3A%22%5C2212%22%7D%2Eglyphicon%2Dcloud%3Abefore%7Bcontent%3A%22%5C2601%22%7D%2Eglyphicon%2Denvelope%3Abefore%7Bcontent%3A%22%5C2709%22%7D%2Eglyphicon%2Dpencil%3Abefore%7Bcontent%3A%22%5C270f%22%7D%2Eglyphicon%2Dglass%3Abefore%7Bcontent%3A%22%5Ce001%22%7D%2Eglyphicon%2Dmusic%3Abefore%7Bcontent%3A%22%5Ce002%22%7D%2Eglyphicon%2Dsearch%3Abefore%7Bcontent%3A%22%5Ce003%22%7D%2Eglyphicon%2Dheart%3Abefore%7Bcontent%3A%22%5Ce005%22%7D%2Eglyphicon%2Dstar%3Abefore%7Bcontent%3A%22%5Ce006%22%7D%2Eglyphicon%2Dstar%2Dempty%3Abefore%7Bcontent%3A%22%5Ce007%22%7D%2Eglyphicon%2Duser%3Abefore%7Bcontent%3A%22%5Ce008%22%7D%2Eglyphicon%2Dfilm%3Abefore%7Bcontent%3A%22%5Ce009%22%7D%2Eglyphicon%2Dth%2Dlarge%3Abefore%7Bcontent%3A%22%5Ce010%22%7D%2Eglyphicon%2Dth%3Abefore%7Bcontent%3A%22%5Ce011%22%7D%2Eglyphicon%2Dth%2Dlist%3Abefore%7Bcontent%3A%22%5Ce012%22%7D%2Eglyphicon%2Dok%3Abefore%7Bcontent%3A%22%5Ce013%22%7D%2Eglyphicon%2Dremove%3Abefore%7Bcontent%3A%22%5Ce014%22%7D%2Eglyphicon%2Dzoom%2Din%3Abefore%7Bcontent%3A%22%5Ce015%22%7D%2Eglyphicon%2Dzoom%2Dout%3Abefore%7Bcontent%3A%22%5Ce016%22%7D%2Eglyphicon%2Doff%3Abefore%7Bcontent%3A%22%5Ce017%22%7D%2Eglyphicon%2Dsignal%3Abefore%7Bcontent%3A%22%5Ce018%22%7D%2Eglyphicon%2Dcog%3Abefore%7Bcontent%3A%22%5Ce019%22%7D%2Eglyphicon%2Dtrash%3Abefore%7Bcontent%3A%22%5Ce020%22%7D%2Eglyphicon%2Dhome%3Abefore%7Bcontent%3A%22%5Ce021%22%7D%2Eglyphicon%2Dfile%3Abefore%7Bcontent%3A%22%5Ce022%22%7D%2Eglyphicon%2Dtime%3Abefore%7Bcontent%3A%22%5Ce023%22%7D%2Eglyphicon%2Droad%3Abefore%7Bcontent%3A%22%5Ce024%22%7D%2Eglyphicon%2Ddownload%2Dalt%3Abefore%7Bcontent%3A%22%5Ce025%22%7D%2Eglyphicon%2Ddownload%3Abefore%7Bcontent%3A%22%5Ce026%22%7D%2Eglyphicon%2Dupload%3Abefore%7Bcontent%3A%22%5Ce027%22%7D%2Eglyphicon%2Dinbox%3Abefore%7Bcontent%3A%22%5Ce028%22%7D%2Eglyphicon%2Dplay%2Dcircle%3Abefore%7Bcontent%3A%22%5Ce029%22%7D%2Eglyphicon%2Drepeat%3Abefore%7Bcontent%3A%22%5Ce030%22%7D%2Eglyphicon%2Drefresh%3Abefore%7Bcontent%3A%22%5Ce031%22%7D%2Eglyphicon%2Dlist%2Dalt%3Abefore%7Bcontent%3A%22%5Ce032%22%7D%2Eglyphicon%2Dlock%3Abefore%7Bcontent%3A%22%5Ce033%22%7D%2Eglyphicon%2Dflag%3Abefore%7Bcontent%3A%22%5Ce034%22%7D%2Eglyphicon%2Dheadphones%3Abefore%7Bcontent%3A%22%5Ce035%22%7D%2Eglyphicon%2Dvolume%2Doff%3Abefore%7Bcontent%3A%22%5Ce036%22%7D%2Eglyphicon%2Dvolume%2Ddown%3Abefore%7Bcontent%3A%22%5Ce037%22%7D%2Eglyphicon%2Dvolume%2Dup%3Abefore%7Bcontent%3A%22%5Ce038%22%7D%2Eglyphicon%2Dqrcode%3Abefore%7Bcontent%3A%22%5Ce039%22%7D%2Eglyphicon%2Dbarcode%3Abefore%7Bcontent%3A%22%5Ce040%22%7D%2Eglyphicon%2Dtag%3Abefore%7Bcontent%3A%22%5Ce041%22%7D%2Eglyphicon%2Dtags%3Abefore%7Bcontent%3A%22%5Ce042%22%7D%2Eglyphicon%2Dbook%3Abefore%7Bcontent%3A%22%5Ce043%22%7D%2Eglyphicon%2Dbookmark%3Abefore%7Bcontent%3A%22%5Ce044%22%7D%2Eglyphicon%2Dprint%3Abefore%7Bcontent%3A%22%5Ce045%22%7D%2Eglyphicon%2Dcamera%3Abefore%7Bcontent%3A%22%5Ce046%22%7D%2Eglyphicon%2Dfont%3Abefore%7Bcontent%3A%22%5Ce047%22%7D%2Eglyphicon%2Dbold%3Abefore%7Bcontent%3A%22%5Ce048%22%7D%2Eglyphicon%2Ditalic%3Abefore%7Bcontent%3A%22%5Ce049%22%7D%2Eglyphicon%2Dtext%2Dheight%3Abefore%7Bcontent%3A%22%5Ce050%22%7D%2Eglyphicon%2Dtext%2Dwidth%3Abefore%7Bcontent%3A%22%5Ce051%22%7D%2Eglyphicon%2Dalign%2Dleft%3Abefore%7Bcontent%3A%22%5Ce052%22%7D%2Eglyphicon%2Dalign%2Dcenter%3Abefore%7Bcontent%3A%22%5Ce053%22%7D%2Eglyphicon%2Dalign%2Dright%3Abefore%7Bcontent%3A%22%5Ce054%22%7D%2Eglyphicon%2Dalign%2Djustify%3Abefore%7Bcontent%3A%22%5Ce055%22%7D%2Eglyphicon%2Dlist%3Abefore%7Bcontent%3A%22%5Ce056%22%7D%2Eglyphicon%2Dindent%2Dleft%3Abefore%7Bcontent%3A%22%5Ce057%22%7D%2Eglyphicon%2Dindent%2Dright%3Abefore%7Bcontent%3A%22%5Ce058%22%7D%2Eglyphicon%2Dfacetime%2Dvideo%3Abefore%7Bcontent%3A%22%5Ce059%22%7D%2Eglyphicon%2Dpicture%3Abefore%7Bcontent%3A%22%5Ce060%22%7D%2Eglyphicon%2Dmap%2Dmarker%3Abefore%7Bcontent%3A%22%5Ce062%22%7D%2Eglyphicon%2Dadjust%3Abefore%7Bcontent%3A%22%5Ce063%22%7D%2Eglyphicon%2Dtint%3Abefore%7Bcontent%3A%22%5Ce064%22%7D%2Eglyphicon%2Dedit%3Abefore%7Bcontent%3A%22%5Ce065%22%7D%2Eglyphicon%2Dshare%3Abefore%7Bcontent%3A%22%5Ce066%22%7D%2Eglyphicon%2Dcheck%3Abefore%7Bcontent%3A%22%5Ce067%22%7D%2Eglyphicon%2Dmove%3Abefore%7Bcontent%3A%22%5Ce068%22%7D%2Eglyphicon%2Dstep%2Dbackward%3Abefore%7Bcontent%3A%22%5Ce069%22%7D%2Eglyphicon%2Dfast%2Dbackward%3Abefore%7Bcontent%3A%22%5Ce070%22%7D%2Eglyphicon%2Dbackward%3Abefore%7Bcontent%3A%22%5Ce071%22%7D%2Eglyphicon%2Dplay%3Abefore%7Bcontent%3A%22%5Ce072%22%7D%2Eglyphicon%2Dpause%3Abefore%7Bcontent%3A%22%5Ce073%22%7D%2Eglyphicon%2Dstop%3Abefore%7Bcontent%3A%22%5Ce074%22%7D%2Eglyphicon%2Dforward%3Abefore%7Bcontent%3A%22%5Ce075%22%7D%2Eglyphicon%2Dfast%2Dforward%3Abefore%7Bcontent%3A%22%5Ce076%22%7D%2Eglyphicon%2Dstep%2Dforward%3Abefore%7Bcontent%3A%22%5Ce077%22%7D%2Eglyphicon%2Deject%3Abefore%7Bcontent%3A%22%5Ce078%22%7D%2Eglyphicon%2Dchevron%2Dleft%3Abefore%7Bcontent%3A%22%5Ce079%22%7D%2Eglyphicon%2Dchevron%2Dright%3Abefore%7Bcontent%3A%22%5Ce080%22%7D%2Eglyphicon%2Dplus%2Dsign%3Abefore%7Bcontent%3A%22%5Ce081%22%7D%2Eglyphicon%2Dminus%2Dsign%3Abefore%7Bcontent%3A%22%5Ce082%22%7D%2Eglyphicon%2Dremove%2Dsign%3Abefore%7Bcontent%3A%22%5Ce083%22%7D%2Eglyphicon%2Dok%2Dsign%3Abefore%7Bcontent%3A%22%5Ce084%22%7D%2Eglyphicon%2Dquestion%2Dsign%3Abefore%7Bcontent%3A%22%5Ce085%22%7D%2Eglyphicon%2Dinfo%2Dsign%3Abefore%7Bcontent%3A%22%5Ce086%22%7D%2Eglyphicon%2Dscreenshot%3Abefore%7Bcontent%3A%22%5Ce087%22%7D%2Eglyphicon%2Dremove%2Dcircle%3Abefore%7Bcontent%3A%22%5Ce088%22%7D%2Eglyphicon%2Dok%2Dcircle%3Abefore%7Bcontent%3A%22%5Ce089%22%7D%2Eglyphicon%2Dban%2Dcircle%3Abefore%7Bcontent%3A%22%5Ce090%22%7D%2Eglyphicon%2Darrow%2Dleft%3Abefore%7Bcontent%3A%22%5Ce091%22%7D%2Eglyphicon%2Darrow%2Dright%3Abefore%7Bcontent%3A%22%5Ce092%22%7D%2Eglyphicon%2Darrow%2Dup%3Abefore%7Bcontent%3A%22%5Ce093%22%7D%2Eglyphicon%2Darrow%2Ddown%3Abefore%7Bcontent%3A%22%5Ce094%22%7D%2Eglyphicon%2Dshare%2Dalt%3Abefore%7Bcontent%3A%22%5Ce095%22%7D%2Eglyphicon%2Dresize%2Dfull%3Abefore%7Bcontent%3A%22%5Ce096%22%7D%2Eglyphicon%2Dresize%2Dsmall%3Abefore%7Bcontent%3A%22%5Ce097%22%7D%2Eglyphicon%2Dexclamation%2Dsign%3Abefore%7Bcontent%3A%22%5Ce101%22%7D%2Eglyphicon%2Dgift%3Abefore%7Bcontent%3A%22%5Ce102%22%7D%2Eglyphicon%2Dleaf%3Abefore%7Bcontent%3A%22%5Ce103%22%7D%2Eglyphicon%2Dfire%3Abefore%7Bcontent%3A%22%5Ce104%22%7D%2Eglyphicon%2Deye%2Dopen%3Abefore%7Bcontent%3A%22%5Ce105%22%7D%2Eglyphicon%2Deye%2Dclose%3Abefore%7Bcontent%3A%22%5Ce106%22%7D%2Eglyphicon%2Dwarning%2Dsign%3Abefore%7Bcontent%3A%22%5Ce107%22%7D%2Eglyphicon%2Dplane%3Abefore%7Bcontent%3A%22%5Ce108%22%7D%2Eglyphicon%2Dcalendar%3Abefore%7Bcontent%3A%22%5Ce109%22%7D%2Eglyphicon%2Drandom%3Abefore%7Bcontent%3A%22%5Ce110%22%7D%2Eglyphicon%2Dcomment%3Abefore%7Bcontent%3A%22%5Ce111%22%7D%2Eglyphicon%2Dmagnet%3Abefore%7Bcontent%3A%22%5Ce112%22%7D%2Eglyphicon%2Dchevron%2Dup%3Abefore%7Bcontent%3A%22%5Ce113%22%7D%2Eglyphicon%2Dchevron%2Ddown%3Abefore%7Bcontent%3A%22%5Ce114%22%7D%2Eglyphicon%2Dretweet%3Abefore%7Bcontent%3A%22%5Ce115%22%7D%2Eglyphicon%2Dshopping%2Dcart%3Abefore%7Bcontent%3A%22%5Ce116%22%7D%2Eglyphicon%2Dfolder%2Dclose%3Abefore%7Bcontent%3A%22%5Ce117%22%7D%2Eglyphicon%2Dfolder%2Dopen%3Abefore%7Bcontent%3A%22%5Ce118%22%7D%2Eglyphicon%2Dresize%2Dvertical%3Abefore%7Bcontent%3A%22%5Ce119%22%7D%2Eglyphicon%2Dresize%2Dhorizontal%3Abefore%7Bcontent%3A%22%5Ce120%22%7D%2Eglyphicon%2Dhdd%3Abefore%7Bcontent%3A%22%5Ce121%22%7D%2Eglyphicon%2Dbullhorn%3Abefore%7Bcontent%3A%22%5Ce122%22%7D%2Eglyphicon%2Dbell%3Abefore%7Bcontent%3A%22%5Ce123%22%7D%2Eglyphicon%2Dcertificate%3Abefore%7Bcontent%3A%22%5Ce124%22%7D%2Eglyphicon%2Dthumbs%2Dup%3Abefore%7Bcontent%3A%22%5Ce125%22%7D%2Eglyphicon%2Dthumbs%2Ddown%3Abefore%7Bcontent%3A%22%5Ce126%22%7D%2Eglyphicon%2Dhand%2Dright%3Abefore%7Bcontent%3A%22%5Ce127%22%7D%2Eglyphicon%2Dhand%2Dleft%3Abefore%7Bcontent%3A%22%5Ce128%22%7D%2Eglyphicon%2Dhand%2Dup%3Abefore%7Bcontent%3A%22%5Ce129%22%7D%2Eglyphicon%2Dhand%2Ddown%3Abefore%7Bcontent%3A%22%5Ce130%22%7D%2Eglyphicon%2Dcircle%2Darrow%2Dright%3Abefore%7Bcontent%3A%22%5Ce131%22%7D%2Eglyphicon%2Dcircle%2Darrow%2Dleft%3Abefore%7Bcontent%3A%22%5Ce132%22%7D%2Eglyphicon%2Dcircle%2Darrow%2Dup%3Abefore%7Bcontent%3A%22%5Ce133%22%7D%2Eglyphicon%2Dcircle%2Darrow%2Ddown%3Abefore%7Bcontent%3A%22%5Ce134%22%7D%2Eglyphicon%2Dglobe%3Abefore%7Bcontent%3A%22%5Ce135%22%7D%2Eglyphicon%2Dwrench%3Abefore%7Bcontent%3A%22%5Ce136%22%7D%2Eglyphicon%2Dtasks%3Abefore%7Bcontent%3A%22%5Ce137%22%7D%2Eglyphicon%2Dfilter%3Abefore%7Bcontent%3A%22%5Ce138%22%7D%2Eglyphicon%2Dbriefcase%3Abefore%7Bcontent%3A%22%5Ce139%22%7D%2Eglyphicon%2Dfullscreen%3Abefore%7Bcontent%3A%22%5Ce140%22%7D%2Eglyphicon%2Ddashboard%3Abefore%7Bcontent%3A%22%5Ce141%22%7D%2Eglyphicon%2Dpaperclip%3Abefore%7Bcontent%3A%22%5Ce142%22%7D%2Eglyphicon%2Dheart%2Dempty%3Abefore%7Bcontent%3A%22%5Ce143%22%7D%2Eglyphicon%2Dlink%3Abefore%7Bcontent%3A%22%5Ce144%22%7D%2Eglyphicon%2Dphone%3Abefore%7Bcontent%3A%22%5Ce145%22%7D%2Eglyphicon%2Dpushpin%3Abefore%7Bcontent%3A%22%5Ce146%22%7D%2Eglyphicon%2Dusd%3Abefore%7Bcontent%3A%22%5Ce148%22%7D%2Eglyphicon%2Dgbp%3Abefore%7Bcontent%3A%22%5Ce149%22%7D%2Eglyphicon%2Dsort%3Abefore%7Bcontent%3A%22%5Ce150%22%7D%2Eglyphicon%2Dsort%2Dby%2Dalphabet%3Abefore%7Bcontent%3A%22%5Ce151%22%7D%2Eglyphicon%2Dsort%2Dby%2Dalphabet%2Dalt%3Abefore%7Bcontent%3A%22%5Ce152%22%7D%2Eglyphicon%2Dsort%2Dby%2Dorder%3Abefore%7Bcontent%3A%22%5Ce153%22%7D%2Eglyphicon%2Dsort%2Dby%2Dorder%2Dalt%3Abefore%7Bcontent%3A%22%5Ce154%22%7D%2Eglyphicon%2Dsort%2Dby%2Dattributes%3Abefore%7Bcontent%3A%22%5Ce155%22%7D%2Eglyphicon%2Dsort%2Dby%2Dattributes%2Dalt%3Abefore%7Bcontent%3A%22%5Ce156%22%7D%2Eglyphicon%2Dunchecked%3Abefore%7Bcontent%3A%22%5Ce157%22%7D%2Eglyphicon%2Dexpand%3Abefore%7Bcontent%3A%22%5Ce158%22%7D%2Eglyphicon%2Dcollapse%2Ddown%3Abefore%7Bcontent%3A%22%5Ce159%22%7D%2Eglyphicon%2Dcollapse%2Dup%3Abefore%7Bcontent%3A%22%5Ce160%22%7D%2Eglyphicon%2Dlog%2Din%3Abefore%7Bcontent%3A%22%5Ce161%22%7D%2Eglyphicon%2Dflash%3Abefore%7Bcontent%3A%22%5Ce162%22%7D%2Eglyphicon%2Dlog%2Dout%3Abefore%7Bcontent%3A%22%5Ce163%22%7D%2Eglyphicon%2Dnew%2Dwindow%3Abefore%7Bcontent%3A%22%5Ce164%22%7D%2Eglyphicon%2Drecord%3Abefore%7Bcontent%3A%22%5Ce165%22%7D%2Eglyphicon%2Dsave%3Abefore%7Bcontent%3A%22%5Ce166%22%7D%2Eglyphicon%2Dopen%3Abefore%7Bcontent%3A%22%5Ce167%22%7D%2Eglyphicon%2Dsaved%3Abefore%7Bcontent%3A%22%5Ce168%22%7D%2Eglyphicon%2Dimport%3Abefore%7Bcontent%3A%22%5Ce169%22%7D%2Eglyphicon%2Dexport%3Abefore%7Bcontent%3A%22%5Ce170%22%7D%2Eglyphicon%2Dsend%3Abefore%7Bcontent%3A%22%5Ce171%22%7D%2Eglyphicon%2Dfloppy%2Ddisk%3Abefore%7Bcontent%3A%22%5Ce172%22%7D%2Eglyphicon%2Dfloppy%2Dsaved%3Abefore%7Bcontent%3A%22%5Ce173%22%7D%2Eglyphicon%2Dfloppy%2Dremove%3Abefore%7Bcontent%3A%22%5Ce174%22%7D%2Eglyphicon%2Dfloppy%2Dsave%3Abefore%7Bcontent%3A%22%5Ce175%22%7D%2Eglyphicon%2Dfloppy%2Dopen%3Abefore%7Bcontent%3A%22%5Ce176%22%7D%2Eglyphicon%2Dcredit%2Dcard%3Abefore%7Bcontent%3A%22%5Ce177%22%7D%2Eglyphicon%2Dtransfer%3Abefore%7Bcontent%3A%22%5Ce178%22%7D%2Eglyphicon%2Dcutlery%3Abefore%7Bcontent%3A%22%5Ce179%22%7D%2Eglyphicon%2Dheader%3Abefore%7Bcontent%3A%22%5Ce180%22%7D%2Eglyphicon%2Dcompressed%3Abefore%7Bcontent%3A%22%5Ce181%22%7D%2Eglyphicon%2Dearphone%3Abefore%7Bcontent%3A%22%5Ce182%22%7D%2Eglyphicon%2Dphone%2Dalt%3Abefore%7Bcontent%3A%22%5Ce183%22%7D%2Eglyphicon%2Dtower%3Abefore%7Bcontent%3A%22%5Ce184%22%7D%2Eglyphicon%2Dstats%3Abefore%7Bcontent%3A%22%5Ce185%22%7D%2Eglyphicon%2Dsd%2Dvideo%3Abefore%7Bcontent%3A%22%5Ce186%22%7D%2Eglyphicon%2Dhd%2Dvideo%3Abefore%7Bcontent%3A%22%5Ce187%22%7D%2Eglyphicon%2Dsubtitles%3Abefore%7Bcontent%3A%22%5Ce188%22%7D%2Eglyphicon%2Dsound%2Dstereo%3Abefore%7Bcontent%3A%22%5Ce189%22%7D%2Eglyphicon%2Dsound%2Ddolby%3Abefore%7Bcontent%3A%22%5Ce190%22%7D%2Eglyphicon%2Dsound%2D5%2D1%3Abefore%7Bcontent%3A%22%5Ce191%22%7D%2Eglyphicon%2Dsound%2D6%2D1%3Abefore%7Bcontent%3A%22%5Ce192%22%7D%2Eglyphicon%2Dsound%2D7%2D1%3Abefore%7Bcontent%3A%22%5Ce193%22%7D%2Eglyphicon%2Dcopyright%2Dmark%3Abefore%7Bcontent%3A%22%5Ce194%22%7D%2Eglyphicon%2Dregistration%2Dmark%3Abefore%7Bcontent%3A%22%5Ce195%22%7D%2Eglyphicon%2Dcloud%2Ddownload%3Abefore%7Bcontent%3A%22%5Ce197%22%7D%2Eglyphicon%2Dcloud%2Dupload%3Abefore%7Bcontent%3A%22%5Ce198%22%7D%2Eglyphicon%2Dtree%2Dconifer%3Abefore%7Bcontent%3A%22%5Ce199%22%7D%2Eglyphicon%2Dtree%2Ddeciduous%3Abefore%7Bcontent%3A%22%5Ce200%22%7D%2Eglyphicon%2Dcd%3Abefore%7Bcontent%3A%22%5Ce201%22%7D%2Eglyphicon%2Dsave%2Dfile%3Abefore%7Bcontent%3A%22%5Ce202%22%7D%2Eglyphicon%2Dopen%2Dfile%3Abefore%7Bcontent%3A%22%5Ce203%22%7D%2Eglyphicon%2Dlevel%2Dup%3Abefore%7Bcontent%3A%22%5Ce204%22%7D%2Eglyphicon%2Dcopy%3Abefore%7Bcontent%3A%22%5Ce205%22%7D%2Eglyphicon%2Dpaste%3Abefore%7Bcontent%3A%22%5Ce206%22%7D%2Eglyphicon%2Dalert%3Abefore%7Bcontent%3A%22%5Ce209%22%7D%2Eglyphicon%2Dequalizer%3Abefore%7Bcontent%3A%22%5Ce210%22%7D%2Eglyphicon%2Dking%3Abefore%7Bcontent%3A%22%5Ce211%22%7D%2Eglyphicon%2Dqueen%3Abefore%7Bcontent%3A%22%5Ce212%22%7D%2Eglyphicon%2Dpawn%3Abefore%7Bcontent%3A%22%5Ce213%22%7D%2Eglyphicon%2Dbishop%3Abefore%7Bcontent%3A%22%5Ce214%22%7D%2Eglyphicon%2Dknight%3Abefore%7Bcontent%3A%22%5Ce215%22%7D%2Eglyphicon%2Dbaby%2Dformula%3Abefore%7Bcontent%3A%22%5Ce216%22%7D%2Eglyphicon%2Dtent%3Abefore%7Bcontent%3A%22%5C26fa%22%7D%2Eglyphicon%2Dblackboard%3Abefore%7Bcontent%3A%22%5Ce218%22%7D%2Eglyphicon%2Dbed%3Abefore%7Bcontent%3A%22%5Ce219%22%7D%2Eglyphicon%2Dapple%3Abefore%7Bcontent%3A%22%5Cf8ff%22%7D%2Eglyphicon%2Derase%3Abefore%7Bcontent%3A%22%5Ce221%22%7D%2Eglyphicon%2Dhourglass%3Abefore%7Bcontent%3A%22%5C231b%22%7D%2Eglyphicon%2Dlamp%3Abefore%7Bcontent%3A%22%5Ce223%22%7D%2Eglyphicon%2Dduplicate%3Abefore%7Bcontent%3A%22%5Ce224%22%7D%2Eglyphicon%2Dpiggy%2Dbank%3Abefore%7Bcontent%3A%22%5Ce225%22%7D%2Eglyphicon%2Dscissors%3Abefore%7Bcontent%3A%22%5Ce226%22%7D%2Eglyphicon%2Dbitcoin%3Abefore%7Bcontent%3A%22%5Ce227%22%7D%2Eglyphicon%2Dbtc%3Abefore%7Bcontent%3A%22%5Ce227%22%7D%2Eglyphicon%2Dxbt%3Abefore%7Bcontent%3A%22%5Ce227%22%7D%2Eglyphicon%2Dyen%3Abefore%7Bcontent%3A%22%5C00a5%22%7D%2Eglyphicon%2Djpy%3Abefore%7Bcontent%3A%22%5C00a5%22%7D%2Eglyphicon%2Druble%3Abefore%7Bcontent%3A%22%5C20bd%22%7D%2Eglyphicon%2Drub%3Abefore%7Bcontent%3A%22%5C20bd%22%7D%2Eglyphicon%2Dscale%3Abefore%7Bcontent%3A%22%5Ce230%22%7D%2Eglyphicon%2Dice%2Dlolly%3Abefore%7Bcontent%3A%22%5Ce231%22%7D%2Eglyphicon%2Dice%2Dlolly%2Dtasted%3Abefore%7Bcontent%3A%22%5Ce232%22%7D%2Eglyphicon%2Deducation%3Abefore%7Bcontent%3A%22%5Ce233%22%7D%2Eglyphicon%2Doption%2Dhorizontal%3Abefore%7Bcontent%3A%22%5Ce234%22%7D%2Eglyphicon%2Doption%2Dvertical%3Abefore%7Bcontent%3A%22%5Ce235%22%7D%2Eglyphicon%2Dmenu%2Dhamburger%3Abefore%7Bcontent%3A%22%5Ce236%22%7D%2Eglyphicon%2Dmodal%2Dwindow%3Abefore%7Bcontent%3A%22%5Ce237%22%7D%2Eglyphicon%2Doil%3Abefore%7Bcontent%3A%22%5Ce238%22%7D%2Eglyphicon%2Dgrain%3Abefore%7Bcontent%3A%22%5Ce239%22%7D%2Eglyphicon%2Dsunglasses%3Abefore%7Bcontent%3A%22%5Ce240%22%7D%2Eglyphicon%2Dtext%2Dsize%3Abefore%7Bcontent%3A%22%5Ce241%22%7D%2Eglyphicon%2Dtext%2Dcolor%3Abefore%7Bcontent%3A%22%5Ce242%22%7D%2Eglyphicon%2Dtext%2Dbackground%3Abefore%7Bcontent%3A%22%5Ce243%22%7D%2Eglyphicon%2Dobject%2Dalign%2Dtop%3Abefore%7Bcontent%3A%22%5Ce244%22%7D%2Eglyphicon%2Dobject%2Dalign%2Dbottom%3Abefore%7Bcontent%3A%22%5Ce245%22%7D%2Eglyphicon%2Dobject%2Dalign%2Dhorizontal%3Abefore%7Bcontent%3A%22%5Ce246%22%7D%2Eglyphicon%2Dobject%2Dalign%2Dleft%3Abefore%7Bcontent%3A%22%5Ce247%22%7D%2Eglyphicon%2Dobject%2Dalign%2Dvertical%3Abefore%7Bcontent%3A%22%5Ce248%22%7D%2Eglyphicon%2Dobject%2Dalign%2Dright%3Abefore%7Bcontent%3A%22%5Ce249%22%7D%2Eglyphicon%2Dtriangle%2Dright%3Abefore%7Bcontent%3A%22%5Ce250%22%7D%2Eglyphicon%2Dtriangle%2Dleft%3Abefore%7Bcontent%3A%22%5Ce251%22%7D%2Eglyphicon%2Dtriangle%2Dbottom%3Abefore%7Bcontent%3A%22%5Ce252%22%7D%2Eglyphicon%2Dtriangle%2Dtop%3Abefore%7Bcontent%3A%22%5Ce253%22%7D%2Eglyphicon%2Dconsole%3Abefore%7Bcontent%3A%22%5Ce254%22%7D%2Eglyphicon%2Dsuperscript%3Abefore%7Bcontent%3A%22%5Ce255%22%7D%2Eglyphicon%2Dsubscript%3Abefore%7Bcontent%3A%22%5Ce256%22%7D%2Eglyphicon%2Dmenu%2Dleft%3Abefore%7Bcontent%3A%22%5Ce257%22%7D%2Eglyphicon%2Dmenu%2Dright%3Abefore%7Bcontent%3A%22%5Ce258%22%7D%2Eglyphicon%2Dmenu%2Ddown%3Abefore%7Bcontent%3A%22%5Ce259%22%7D%2Eglyphicon%2Dmenu%2Dup%3Abefore%7Bcontent%3A%22%5Ce260%22%7D%2A%7B%2Dwebkit%2Dbox%2Dsizing%3Aborder%2Dbox%3B%2Dmoz%2Dbox%2Dsizing%3Aborder%2Dbox%3Bbox%2Dsizing%3Aborder%2Dbox%7D%3Aafter%2C%3Abefore%7B%2Dwebkit%2Dbox%2Dsizing%3Aborder%2Dbox%3B%2Dmoz%2Dbox%2Dsizing%3Aborder%2Dbox%3Bbox%2Dsizing%3Aborder%2Dbox%7Dhtml%7Bfont%2Dsize%3A10px%3B%2Dwebkit%2Dtap%2Dhighlight%2Dcolor%3Argba%280%2C0%2C0%2C0%29%7Dbody%7Bfont%2Dfamily%3A%22Helvetica%20Neue%22%2CHelvetica%2CArial%2Csans%2Dserif%3Bfont%2Dsize%3A14px%3Bline%2Dheight%3A1%2E42857143%3Bcolor%3A%23333%3Bbackground%2Dcolor%3A%23fff%7Dbutton%2Cinput%2Cselect%2Ctextarea%7Bfont%2Dfamily%3Ainherit%3Bfont%2Dsize%3Ainherit%3Bline%2Dheight%3Ainherit%7Da%7Bcolor%3A%23337ab7%3Btext%2Ddecoration%3Anone%7Da%3Afocus%2Ca%3Ahover%7Bcolor%3A%2323527c%3Btext%2Ddecoration%3Aunderline%7Da%3Afocus%7Boutline%3Athin%20dotted%3Boutline%3A5px%20auto%20%2Dwebkit%2Dfocus%2Dring%2Dcolor%3Boutline%2Doffset%3A%2D2px%7Dfigure%7Bmargin%3A0%7Dimg%7Bvertical%2Dalign%3Amiddle%7D%2Ecarousel%2Dinner%3E%2Eitem%3Ea%3Eimg%2C%2Ecarousel%2Dinner%3E%2Eitem%3Eimg%2C%2Eimg%2Dresponsive%2C%2Ethumbnail%20a%3Eimg%2C%2Ethumbnail%3Eimg%7Bdisplay%3Ablock%3Bmax%2Dwidth%3A100%25%3Bheight%3Aauto%7D%2Eimg%2Drounded%7Bborder%2Dradius%3A6px%7D%2Eimg%2Dthumbnail%7Bdisplay%3Ainline%2Dblock%3Bmax%2Dwidth%3A100%25%3Bheight%3Aauto%3Bpadding%3A4px%3Bline%2Dheight%3A1%2E42857143%3Bbackground%2Dcolor%3A%23fff%3Bborder%3A1px%20solid%20%23ddd%3Bborder%2Dradius%3A4px%3B%2Dwebkit%2Dtransition%3Aall%20%2E2s%20ease%2Din%2Dout%3B%2Do%2Dtransition%3Aall%20%2E2s%20ease%2Din%2Dout%3Btransition%3Aall%20%2E2s%20ease%2Din%2Dout%7D%2Eimg%2Dcircle%7Bborder%2Dradius%3A50%25%7Dhr%7Bmargin%2Dtop%3A20px%3Bmargin%2Dbottom%3A20px%3Bborder%3A0%3Bborder%2Dtop%3A1px%20solid%20%23eee%7D%2Esr%2Donly%7Bposition%3Aabsolute%3Bwidth%3A1px%3Bheight%3A1px%3Bpadding%3A0%3Bmargin%3A%2D1px%3Boverflow%3Ahidden%3Bclip%3Arect%280%2C0%2C0%2C0%29%3Bborder%3A0%7D%2Esr%2Donly%2Dfocusable%3Aactive%2C%2Esr%2Donly%2Dfocusable%3Afocus%7Bposition%3Astatic%3Bwidth%3Aauto%3Bheight%3Aauto%3Bmargin%3A0%3Boverflow%3Avisible%3Bclip%3Aauto%7D%5Brole%3Dbutton%5D%7Bcursor%3Apointer%7D%2Eh1%2C%2Eh2%2C%2Eh3%2C%2Eh4%2C%2Eh5%2C%2Eh6%2Ch1%2Ch2%2Ch3%2Ch4%2Ch5%2Ch6%7Bfont%2Dfamily%3Ainherit%3Bfont%2Dweight%3A500%3Bline%2Dheight%3A1%2E1%3Bcolor%3Ainherit%7D%2Eh1%20%2Esmall%2C%2Eh1%20small%2C%2Eh2%20%2Esmall%2C%2Eh2%20small%2C%2Eh3%20%2Esmall%2C%2Eh3%20small%2C%2Eh4%20%2Esmall%2C%2Eh4%20small%2C%2Eh5%20%2Esmall%2C%2Eh5%20small%2C%2Eh6%20%2Esmall%2C%2Eh6%20small%2Ch1%20%2Esmall%2Ch1%20small%2Ch2%20%2Esmall%2Ch2%20small%2Ch3%20%2Esmall%2Ch3%20small%2Ch4%20%2Esmall%2Ch4%20small%2Ch5%20%2Esmall%2Ch5%20small%2Ch6%20%2Esmall%2Ch6%20small%7Bfont%2Dweight%3A400%3Bline%2Dheight%3A1%3Bcolor%3A%23777%7D%2Eh1%2C%2Eh2%2C%2Eh3%2Ch1%2Ch2%2Ch3%7Bmargin%2Dtop%3A20px%3Bmargin%2Dbottom%3A10px%7D%2Eh1%20%2Esmall%2C%2Eh1%20small%2C%2Eh2%20%2Esmall%2C%2Eh2%20small%2C%2Eh3%20%2Esmall%2C%2Eh3%20small%2Ch1%20%2Esmall%2Ch1%20small%2Ch2%20%2Esmall%2Ch2%20small%2Ch3%20%2Esmall%2Ch3%20small%7Bfont%2Dsize%3A65%25%7D%2Eh4%2C%2Eh5%2C%2Eh6%2Ch4%2Ch5%2Ch6%7Bmargin%2Dtop%3A10px%3Bmargin%2Dbottom%3A10px%7D%2Eh4%20%2Esmall%2C%2Eh4%20small%2C%2Eh5%20%2Esmall%2C%2Eh5%20small%2C%2Eh6%20%2Esmall%2C%2Eh6%20small%2Ch4%20%2Esmall%2Ch4%20small%2Ch5%20%2Esmall%2Ch5%20small%2Ch6%20%2Esmall%2Ch6%20small%7Bfont%2Dsize%3A75%25%7D%2Eh1%2Ch1%7Bfont%2Dsize%3A36px%7D%2Eh2%2Ch2%7Bfont%2Dsize%3A30px%7D%2Eh3%2Ch3%7Bfont%2Dsize%3A24px%7D%2Eh4%2Ch4%7Bfont%2Dsize%3A18px%7D%2Eh5%2Ch5%7Bfont%2Dsize%3A14px%7D%2Eh6%2Ch6%7Bfont%2Dsize%3A12px%7Dp%7Bmargin%3A0%200%2010px%7D%2Elead%7Bmargin%2Dbottom%3A20px%3Bfont%2Dsize%3A16px%3Bfont%2Dweight%3A300%3Bline%2Dheight%3A1%2E4%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Elead%7Bfont%2Dsize%3A21px%7D%7D%2Esmall%2Csmall%7Bfont%2Dsize%3A85%25%7D%2Emark%2Cmark%7Bpadding%3A%2E2em%3Bbackground%2Dcolor%3A%23fcf8e3%7D%2Etext%2Dleft%7Btext%2Dalign%3Aleft%7D%2Etext%2Dright%7Btext%2Dalign%3Aright%7D%2Etext%2Dcenter%7Btext%2Dalign%3Acenter%7D%2Etext%2Djustify%7Btext%2Dalign%3Ajustify%7D%2Etext%2Dnowrap%7Bwhite%2Dspace%3Anowrap%7D%2Etext%2Dlowercase%7Btext%2Dtransform%3Alowercase%7D%2Etext%2Duppercase%7Btext%2Dtransform%3Auppercase%7D%2Etext%2Dcapitalize%7Btext%2Dtransform%3Acapitalize%7D%2Etext%2Dmuted%7Bcolor%3A%23777%7D%2Etext%2Dprimary%7Bcolor%3A%23337ab7%7Da%2Etext%2Dprimary%3Afocus%2Ca%2Etext%2Dprimary%3Ahover%7Bcolor%3A%23286090%7D%2Etext%2Dsuccess%7Bcolor%3A%233c763d%7Da%2Etext%2Dsuccess%3Afocus%2Ca%2Etext%2Dsuccess%3Ahover%7Bcolor%3A%232b542c%7D%2Etext%2Dinfo%7Bcolor%3A%2331708f%7Da%2Etext%2Dinfo%3Afocus%2Ca%2Etext%2Dinfo%3Ahover%7Bcolor%3A%23245269%7D%2Etext%2Dwarning%7Bcolor%3A%238a6d3b%7Da%2Etext%2Dwarning%3Afocus%2Ca%2Etext%2Dwarning%3Ahover%7Bcolor%3A%2366512c%7D%2Etext%2Ddanger%7Bcolor%3A%23a94442%7Da%2Etext%2Ddanger%3Afocus%2Ca%2Etext%2Ddanger%3Ahover%7Bcolor%3A%23843534%7D%2Ebg%2Dprimary%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23337ab7%7Da%2Ebg%2Dprimary%3Afocus%2Ca%2Ebg%2Dprimary%3Ahover%7Bbackground%2Dcolor%3A%23286090%7D%2Ebg%2Dsuccess%7Bbackground%2Dcolor%3A%23dff0d8%7Da%2Ebg%2Dsuccess%3Afocus%2Ca%2Ebg%2Dsuccess%3Ahover%7Bbackground%2Dcolor%3A%23c1e2b3%7D%2Ebg%2Dinfo%7Bbackground%2Dcolor%3A%23d9edf7%7Da%2Ebg%2Dinfo%3Afocus%2Ca%2Ebg%2Dinfo%3Ahover%7Bbackground%2Dcolor%3A%23afd9ee%7D%2Ebg%2Dwarning%7Bbackground%2Dcolor%3A%23fcf8e3%7Da%2Ebg%2Dwarning%3Afocus%2Ca%2Ebg%2Dwarning%3Ahover%7Bbackground%2Dcolor%3A%23f7ecb5%7D%2Ebg%2Ddanger%7Bbackground%2Dcolor%3A%23f2dede%7Da%2Ebg%2Ddanger%3Afocus%2Ca%2Ebg%2Ddanger%3Ahover%7Bbackground%2Dcolor%3A%23e4b9b9%7D%2Epage%2Dheader%7Bpadding%2Dbottom%3A9px%3Bmargin%3A40px%200%2020px%3Bborder%2Dbottom%3A1px%20solid%20%23eee%7Dol%2Cul%7Bmargin%2Dtop%3A0%3Bmargin%2Dbottom%3A10px%7Dol%20ol%2Col%20ul%2Cul%20ol%2Cul%20ul%7Bmargin%2Dbottom%3A0%7D%2Elist%2Dunstyled%7Bpadding%2Dleft%3A0%3Blist%2Dstyle%3Anone%7D%2Elist%2Dinline%7Bpadding%2Dleft%3A0%3Bmargin%2Dleft%3A%2D5px%3Blist%2Dstyle%3Anone%7D%2Elist%2Dinline%3Eli%7Bdisplay%3Ainline%2Dblock%3Bpadding%2Dright%3A5px%3Bpadding%2Dleft%3A5px%7Ddl%7Bmargin%2Dtop%3A0%3Bmargin%2Dbottom%3A20px%7Ddd%2Cdt%7Bline%2Dheight%3A1%2E42857143%7Ddt%7Bfont%2Dweight%3A700%7Ddd%7Bmargin%2Dleft%3A0%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Edl%2Dhorizontal%20dt%7Bfloat%3Aleft%3Bwidth%3A160px%3Boverflow%3Ahidden%3Bclear%3Aleft%3Btext%2Dalign%3Aright%3Btext%2Doverflow%3Aellipsis%3Bwhite%2Dspace%3Anowrap%7D%2Edl%2Dhorizontal%20dd%7Bmargin%2Dleft%3A180px%7D%7Dabbr%5Bdata%2Doriginal%2Dtitle%5D%2Cabbr%5Btitle%5D%7Bcursor%3Ahelp%3Bborder%2Dbottom%3A1px%20dotted%20%23777%7D%2Einitialism%7Bfont%2Dsize%3A90%25%3Btext%2Dtransform%3Auppercase%7Dblockquote%7Bpadding%3A10px%2020px%3Bmargin%3A0%200%2020px%3Bfont%2Dsize%3A17%2E5px%3Bborder%2Dleft%3A5px%20solid%20%23eee%7Dblockquote%20ol%3Alast%2Dchild%2Cblockquote%20p%3Alast%2Dchild%2Cblockquote%20ul%3Alast%2Dchild%7Bmargin%2Dbottom%3A0%7Dblockquote%20%2Esmall%2Cblockquote%20footer%2Cblockquote%20small%7Bdisplay%3Ablock%3Bfont%2Dsize%3A80%25%3Bline%2Dheight%3A1%2E42857143%3Bcolor%3A%23777%7Dblockquote%20%2Esmall%3Abefore%2Cblockquote%20footer%3Abefore%2Cblockquote%20small%3Abefore%7Bcontent%3A%27%5C2014%20%5C00A0%27%7D%2Eblockquote%2Dreverse%2Cblockquote%2Epull%2Dright%7Bpadding%2Dright%3A15px%3Bpadding%2Dleft%3A0%3Btext%2Dalign%3Aright%3Bborder%2Dright%3A5px%20solid%20%23eee%3Bborder%2Dleft%3A0%7D%2Eblockquote%2Dreverse%20%2Esmall%3Abefore%2C%2Eblockquote%2Dreverse%20footer%3Abefore%2C%2Eblockquote%2Dreverse%20small%3Abefore%2Cblockquote%2Epull%2Dright%20%2Esmall%3Abefore%2Cblockquote%2Epull%2Dright%20footer%3Abefore%2Cblockquote%2Epull%2Dright%20small%3Abefore%7Bcontent%3A%27%27%7D%2Eblockquote%2Dreverse%20%2Esmall%3Aafter%2C%2Eblockquote%2Dreverse%20footer%3Aafter%2C%2Eblockquote%2Dreverse%20small%3Aafter%2Cblockquote%2Epull%2Dright%20%2Esmall%3Aafter%2Cblockquote%2Epull%2Dright%20footer%3Aafter%2Cblockquote%2Epull%2Dright%20small%3Aafter%7Bcontent%3A%27%5C00A0%20%5C2014%27%7Daddress%7Bmargin%2Dbottom%3A20px%3Bfont%2Dstyle%3Anormal%3Bline%2Dheight%3A1%2E42857143%7Dcode%2Ckbd%2Cpre%2Csamp%7Bfont%2Dfamily%3Amonospace%7Dcode%7Bpadding%3A2px%204px%3Bfont%2Dsize%3A90%25%3Bcolor%3A%23c7254e%3Bbackground%2Dcolor%3A%23f9f2f4%3Bborder%2Dradius%3A4px%7Dkbd%7Bpadding%3A2px%204px%3Bfont%2Dsize%3A90%25%3Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23333%3Bborder%2Dradius%3A3px%3B%2Dwebkit%2Dbox%2Dshadow%3Ainset%200%20%2D1px%200%20rgba%280%2C0%2C0%2C%2E25%29%3Bbox%2Dshadow%3Ainset%200%20%2D1px%200%20rgba%280%2C0%2C0%2C%2E25%29%7Dkbd%20kbd%7Bpadding%3A0%3Bfont%2Dsize%3A100%25%3Bfont%2Dweight%3A700%3B%2Dwebkit%2Dbox%2Dshadow%3Anone%3Bbox%2Dshadow%3Anone%7Dpre%7Bdisplay%3Ablock%3Bpadding%3A9%2E5px%3Bmargin%3A0%200%2010px%3Bfont%2Dsize%3A13px%3Bline%2Dheight%3A1%2E42857143%3Bcolor%3A%23333%3Bword%2Dbreak%3Abreak%2Dall%3Bword%2Dwrap%3Abreak%2Dword%3Bbackground%2Dcolor%3A%23f5f5f5%3Bborder%3A1px%20solid%20%23ccc%3Bborder%2Dradius%3A4px%7Dpre%20code%7Bpadding%3A0%3Bfont%2Dsize%3Ainherit%3Bcolor%3Ainherit%3Bwhite%2Dspace%3Apre%2Dwrap%3Bbackground%2Dcolor%3Atransparent%3Bborder%2Dradius%3A0%7D%2Epre%2Dscrollable%7Bmax%2Dheight%3A340px%3Boverflow%2Dy%3Ascroll%7D%2Econtainer%7Bpadding%2Dright%3A15px%3Bpadding%2Dleft%3A15px%3Bmargin%2Dright%3Aauto%3Bmargin%2Dleft%3Aauto%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Econtainer%7Bwidth%3A750px%7D%7D%40media%20%28min%2Dwidth%3A992px%29%7B%2Econtainer%7Bwidth%3A970px%7D%7D%40media%20%28min%2Dwidth%3A1200px%29%7B%2Econtainer%7Bwidth%3A1170px%7D%7D%2Econtainer%2Dfluid%7Bpadding%2Dright%3A15px%3Bpadding%2Dleft%3A15px%3Bmargin%2Dright%3Aauto%3Bmargin%2Dleft%3Aauto%7D%2Erow%7Bmargin%2Dright%3A%2D15px%3Bmargin%2Dleft%3A%2D15px%7D%2Ecol%2Dlg%2D1%2C%2Ecol%2Dlg%2D10%2C%2Ecol%2Dlg%2D11%2C%2Ecol%2Dlg%2D12%2C%2Ecol%2Dlg%2D2%2C%2Ecol%2Dlg%2D3%2C%2Ecol%2Dlg%2D4%2C%2Ecol%2Dlg%2D5%2C%2Ecol%2Dlg%2D6%2C%2Ecol%2Dlg%2D7%2C%2Ecol%2Dlg%2D8%2C%2Ecol%2Dlg%2D9%2C%2Ecol%2Dmd%2D1%2C%2Ecol%2Dmd%2D10%2C%2Ecol%2Dmd%2D11%2C%2Ecol%2Dmd%2D12%2C%2Ecol%2Dmd%2D2%2C%2Ecol%2Dmd%2D3%2C%2Ecol%2Dmd%2D4%2C%2Ecol%2Dmd%2D5%2C%2Ecol%2Dmd%2D6%2C%2Ecol%2Dmd%2D7%2C%2Ecol%2Dmd%2D8%2C%2Ecol%2Dmd%2D9%2C%2Ecol%2Dsm%2D1%2C%2Ecol%2Dsm%2D10%2C%2Ecol%2Dsm%2D11%2C%2Ecol%2Dsm%2D12%2C%2Ecol%2Dsm%2D2%2C%2Ecol%2Dsm%2D3%2C%2Ecol%2Dsm%2D4%2C%2Ecol%2Dsm%2D5%2C%2Ecol%2Dsm%2D6%2C%2Ecol%2Dsm%2D7%2C%2Ecol%2Dsm%2D8%2C%2Ecol%2Dsm%2D9%2C%2Ecol%2Dxs%2D1%2C%2Ecol%2Dxs%2D10%2C%2Ecol%2Dxs%2D11%2C%2Ecol%2Dxs%2D12%2C%2Ecol%2Dxs%2D2%2C%2Ecol%2Dxs%2D3%2C%2Ecol%2Dxs%2D4%2C%2Ecol%2Dxs%2D5%2C%2Ecol%2Dxs%2D6%2C%2Ecol%2Dxs%2D7%2C%2Ecol%2Dxs%2D8%2C%2Ecol%2Dxs%2D9%7Bposition%3Arelative%3Bmin%2Dheight%3A1px%3Bpadding%2Dright%3A15px%3Bpadding%2Dleft%3A15px%7D%2Ecol%2Dxs%2D1%2C%2Ecol%2Dxs%2D10%2C%2Ecol%2Dxs%2D11%2C%2Ecol%2Dxs%2D12%2C%2Ecol%2Dxs%2D2%2C%2Ecol%2Dxs%2D3%2C%2Ecol%2Dxs%2D4%2C%2Ecol%2Dxs%2D5%2C%2Ecol%2Dxs%2D6%2C%2Ecol%2Dxs%2D7%2C%2Ecol%2Dxs%2D8%2C%2Ecol%2Dxs%2D9%7Bfloat%3Aleft%7D%2Ecol%2Dxs%2D12%7Bwidth%3A100%25%7D%2Ecol%2Dxs%2D11%7Bwidth%3A91%2E66666667%25%7D%2Ecol%2Dxs%2D10%7Bwidth%3A83%2E33333333%25%7D%2Ecol%2Dxs%2D9%7Bwidth%3A75%25%7D%2Ecol%2Dxs%2D8%7Bwidth%3A66%2E66666667%25%7D%2Ecol%2Dxs%2D7%7Bwidth%3A58%2E33333333%25%7D%2Ecol%2Dxs%2D6%7Bwidth%3A50%25%7D%2Ecol%2Dxs%2D5%7Bwidth%3A41%2E66666667%25%7D%2Ecol%2Dxs%2D4%7Bwidth%3A33%2E33333333%25%7D%2Ecol%2Dxs%2D3%7Bwidth%3A25%25%7D%2Ecol%2Dxs%2D2%7Bwidth%3A16%2E66666667%25%7D%2Ecol%2Dxs%2D1%7Bwidth%3A8%2E33333333%25%7D%2Ecol%2Dxs%2Dpull%2D12%7Bright%3A100%25%7D%2Ecol%2Dxs%2Dpull%2D11%7Bright%3A91%2E66666667%25%7D%2Ecol%2Dxs%2Dpull%2D10%7Bright%3A83%2E33333333%25%7D%2Ecol%2Dxs%2Dpull%2D9%7Bright%3A75%25%7D%2Ecol%2Dxs%2Dpull%2D8%7Bright%3A66%2E66666667%25%7D%2Ecol%2Dxs%2Dpull%2D7%7Bright%3A58%2E33333333%25%7D%2Ecol%2Dxs%2Dpull%2D6%7Bright%3A50%25%7D%2Ecol%2Dxs%2Dpull%2D5%7Bright%3A41%2E66666667%25%7D%2Ecol%2Dxs%2Dpull%2D4%7Bright%3A33%2E33333333%25%7D%2Ecol%2Dxs%2Dpull%2D3%7Bright%3A25%25%7D%2Ecol%2Dxs%2Dpull%2D2%7Bright%3A16%2E66666667%25%7D%2Ecol%2Dxs%2Dpull%2D1%7Bright%3A8%2E33333333%25%7D%2Ecol%2Dxs%2Dpull%2D0%7Bright%3Aauto%7D%2Ecol%2Dxs%2Dpush%2D12%7Bleft%3A100%25%7D%2Ecol%2Dxs%2Dpush%2D11%7Bleft%3A91%2E66666667%25%7D%2Ecol%2Dxs%2Dpush%2D10%7Bleft%3A83%2E33333333%25%7D%2Ecol%2Dxs%2Dpush%2D9%7Bleft%3A75%25%7D%2Ecol%2Dxs%2Dpush%2D8%7Bleft%3A66%2E66666667%25%7D%2Ecol%2Dxs%2Dpush%2D7%7Bleft%3A58%2E33333333%25%7D%2Ecol%2Dxs%2Dpush%2D6%7Bleft%3A50%25%7D%2Ecol%2Dxs%2Dpush%2D5%7Bleft%3A41%2E66666667%25%7D%2Ecol%2Dxs%2Dpush%2D4%7Bleft%3A33%2E33333333%25%7D%2Ecol%2Dxs%2Dpush%2D3%7Bleft%3A25%25%7D%2Ecol%2Dxs%2Dpush%2D2%7Bleft%3A16%2E66666667%25%7D%2Ecol%2Dxs%2Dpush%2D1%7Bleft%3A8%2E33333333%25%7D%2Ecol%2Dxs%2Dpush%2D0%7Bleft%3Aauto%7D%2Ecol%2Dxs%2Doffset%2D12%7Bmargin%2Dleft%3A100%25%7D%2Ecol%2Dxs%2Doffset%2D11%7Bmargin%2Dleft%3A91%2E66666667%25%7D%2Ecol%2Dxs%2Doffset%2D10%7Bmargin%2Dleft%3A83%2E33333333%25%7D%2Ecol%2Dxs%2Doffset%2D9%7Bmargin%2Dleft%3A75%25%7D%2Ecol%2Dxs%2Doffset%2D8%7Bmargin%2Dleft%3A66%2E66666667%25%7D%2Ecol%2Dxs%2Doffset%2D7%7Bmargin%2Dleft%3A58%2E33333333%25%7D%2Ecol%2Dxs%2Doffset%2D6%7Bmargin%2Dleft%3A50%25%7D%2Ecol%2Dxs%2Doffset%2D5%7Bmargin%2Dleft%3A41%2E66666667%25%7D%2Ecol%2Dxs%2Doffset%2D4%7Bmargin%2Dleft%3A33%2E33333333%25%7D%2Ecol%2Dxs%2Doffset%2D3%7Bmargin%2Dleft%3A25%25%7D%2Ecol%2Dxs%2Doffset%2D2%7Bmargin%2Dleft%3A16%2E66666667%25%7D%2Ecol%2Dxs%2Doffset%2D1%7Bmargin%2Dleft%3A8%2E33333333%25%7D%2Ecol%2Dxs%2Doffset%2D0%7Bmargin%2Dleft%3A0%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Ecol%2Dsm%2D1%2C%2Ecol%2Dsm%2D10%2C%2Ecol%2Dsm%2D11%2C%2Ecol%2Dsm%2D12%2C%2Ecol%2Dsm%2D2%2C%2Ecol%2Dsm%2D3%2C%2Ecol%2Dsm%2D4%2C%2Ecol%2Dsm%2D5%2C%2Ecol%2Dsm%2D6%2C%2Ecol%2Dsm%2D7%2C%2Ecol%2Dsm%2D8%2C%2Ecol%2Dsm%2D9%7Bfloat%3Aleft%7D%2Ecol%2Dsm%2D12%7Bwidth%3A100%25%7D%2Ecol%2Dsm%2D11%7Bwidth%3A91%2E66666667%25%7D%2Ecol%2Dsm%2D10%7Bwidth%3A83%2E33333333%25%7D%2Ecol%2Dsm%2D9%7Bwidth%3A75%25%7D%2Ecol%2Dsm%2D8%7Bwidth%3A66%2E66666667%25%7D%2Ecol%2Dsm%2D7%7Bwidth%3A58%2E33333333%25%7D%2Ecol%2Dsm%2D6%7Bwidth%3A50%25%7D%2Ecol%2Dsm%2D5%7Bwidth%3A41%2E66666667%25%7D%2Ecol%2Dsm%2D4%7Bwidth%3A33%2E33333333%25%7D%2Ecol%2Dsm%2D3%7Bwidth%3A25%25%7D%2Ecol%2Dsm%2D2%7Bwidth%3A16%2E66666667%25%7D%2Ecol%2Dsm%2D1%7Bwidth%3A8%2E33333333%25%7D%2Ecol%2Dsm%2Dpull%2D12%7Bright%3A100%25%7D%2Ecol%2Dsm%2Dpull%2D11%7Bright%3A91%2E66666667%25%7D%2Ecol%2Dsm%2Dpull%2D10%7Bright%3A83%2E33333333%25%7D%2Ecol%2Dsm%2Dpull%2D9%7Bright%3A75%25%7D%2Ecol%2Dsm%2Dpull%2D8%7Bright%3A66%2E66666667%25%7D%2Ecol%2Dsm%2Dpull%2D7%7Bright%3A58%2E33333333%25%7D%2Ecol%2Dsm%2Dpull%2D6%7Bright%3A50%25%7D%2Ecol%2Dsm%2Dpull%2D5%7Bright%3A41%2E66666667%25%7D%2Ecol%2Dsm%2Dpull%2D4%7Bright%3A33%2E33333333%25%7D%2Ecol%2Dsm%2Dpull%2D3%7Bright%3A25%25%7D%2Ecol%2Dsm%2Dpull%2D2%7Bright%3A16%2E66666667%25%7D%2Ecol%2Dsm%2Dpull%2D1%7Bright%3A8%2E33333333%25%7D%2Ecol%2Dsm%2Dpull%2D0%7Bright%3Aauto%7D%2Ecol%2Dsm%2Dpush%2D12%7Bleft%3A100%25%7D%2Ecol%2Dsm%2Dpush%2D11%7Bleft%3A91%2E66666667%25%7D%2Ecol%2Dsm%2Dpush%2D10%7Bleft%3A83%2E33333333%25%7D%2Ecol%2Dsm%2Dpush%2D9%7Bleft%3A75%25%7D%2Ecol%2Dsm%2Dpush%2D8%7Bleft%3A66%2E66666667%25%7D%2Ecol%2Dsm%2Dpush%2D7%7Bleft%3A58%2E33333333%25%7D%2Ecol%2Dsm%2Dpush%2D6%7Bleft%3A50%25%7D%2Ecol%2Dsm%2Dpush%2D5%7Bleft%3A41%2E66666667%25%7D%2Ecol%2Dsm%2Dpush%2D4%7Bleft%3A33%2E33333333%25%7D%2Ecol%2Dsm%2Dpush%2D3%7Bleft%3A25%25%7D%2Ecol%2Dsm%2Dpush%2D2%7Bleft%3A16%2E66666667%25%7D%2Ecol%2Dsm%2Dpush%2D1%7Bleft%3A8%2E33333333%25%7D%2Ecol%2Dsm%2Dpush%2D0%7Bleft%3Aauto%7D%2Ecol%2Dsm%2Doffset%2D12%7Bmargin%2Dleft%3A100%25%7D%2Ecol%2Dsm%2Doffset%2D11%7Bmargin%2Dleft%3A91%2E66666667%25%7D%2Ecol%2Dsm%2Doffset%2D10%7Bmargin%2Dleft%3A83%2E33333333%25%7D%2Ecol%2Dsm%2Doffset%2D9%7Bmargin%2Dleft%3A75%25%7D%2Ecol%2Dsm%2Doffset%2D8%7Bmargin%2Dleft%3A66%2E66666667%25%7D%2Ecol%2Dsm%2Doffset%2D7%7Bmargin%2Dleft%3A58%2E33333333%25%7D%2Ecol%2Dsm%2Doffset%2D6%7Bmargin%2Dleft%3A50%25%7D%2Ecol%2Dsm%2Doffset%2D5%7Bmargin%2Dleft%3A41%2E66666667%25%7D%2Ecol%2Dsm%2Doffset%2D4%7Bmargin%2Dleft%3A33%2E33333333%25%7D%2Ecol%2Dsm%2Doffset%2D3%7Bmargin%2Dleft%3A25%25%7D%2Ecol%2Dsm%2Doffset%2D2%7Bmargin%2Dleft%3A16%2E66666667%25%7D%2Ecol%2Dsm%2Doffset%2D1%7Bmargin%2Dleft%3A8%2E33333333%25%7D%2Ecol%2Dsm%2Doffset%2D0%7Bmargin%2Dleft%3A0%7D%7D%40media%20%28min%2Dwidth%3A992px%29%7B%2Ecol%2Dmd%2D1%2C%2Ecol%2Dmd%2D10%2C%2Ecol%2Dmd%2D11%2C%2Ecol%2Dmd%2D12%2C%2Ecol%2Dmd%2D2%2C%2Ecol%2Dmd%2D3%2C%2Ecol%2Dmd%2D4%2C%2Ecol%2Dmd%2D5%2C%2Ecol%2Dmd%2D6%2C%2Ecol%2Dmd%2D7%2C%2Ecol%2Dmd%2D8%2C%2Ecol%2Dmd%2D9%7Bfloat%3Aleft%7D%2Ecol%2Dmd%2D12%7Bwidth%3A100%25%7D%2Ecol%2Dmd%2D11%7Bwidth%3A91%2E66666667%25%7D%2Ecol%2Dmd%2D10%7Bwidth%3A83%2E33333333%25%7D%2Ecol%2Dmd%2D9%7Bwidth%3A75%25%7D%2Ecol%2Dmd%2D8%7Bwidth%3A66%2E66666667%25%7D%2Ecol%2Dmd%2D7%7Bwidth%3A58%2E33333333%25%7D%2Ecol%2Dmd%2D6%7Bwidth%3A50%25%7D%2Ecol%2Dmd%2D5%7Bwidth%3A41%2E66666667%25%7D%2Ecol%2Dmd%2D4%7Bwidth%3A33%2E33333333%25%7D%2Ecol%2Dmd%2D3%7Bwidth%3A25%25%7D%2Ecol%2Dmd%2D2%7Bwidth%3A16%2E66666667%25%7D%2Ecol%2Dmd%2D1%7Bwidth%3A8%2E33333333%25%7D%2Ecol%2Dmd%2Dpull%2D12%7Bright%3A100%25%7D%2Ecol%2Dmd%2Dpull%2D11%7Bright%3A91%2E66666667%25%7D%2Ecol%2Dmd%2Dpull%2D10%7Bright%3A83%2E33333333%25%7D%2Ecol%2Dmd%2Dpull%2D9%7Bright%3A75%25%7D%2Ecol%2Dmd%2Dpull%2D8%7Bright%3A66%2E66666667%25%7D%2Ecol%2Dmd%2Dpull%2D7%7Bright%3A58%2E33333333%25%7D%2Ecol%2Dmd%2Dpull%2D6%7Bright%3A50%25%7D%2Ecol%2Dmd%2Dpull%2D5%7Bright%3A41%2E66666667%25%7D%2Ecol%2Dmd%2Dpull%2D4%7Bright%3A33%2E33333333%25%7D%2Ecol%2Dmd%2Dpull%2D3%7Bright%3A25%25%7D%2Ecol%2Dmd%2Dpull%2D2%7Bright%3A16%2E66666667%25%7D%2Ecol%2Dmd%2Dpull%2D1%7Bright%3A8%2E33333333%25%7D%2Ecol%2Dmd%2Dpull%2D0%7Bright%3Aauto%7D%2Ecol%2Dmd%2Dpush%2D12%7Bleft%3A100%25%7D%2Ecol%2Dmd%2Dpush%2D11%7Bleft%3A91%2E66666667%25%7D%2Ecol%2Dmd%2Dpush%2D10%7Bleft%3A83%2E33333333%25%7D%2Ecol%2Dmd%2Dpush%2D9%7Bleft%3A75%25%7D%2Ecol%2Dmd%2Dpush%2D8%7Bleft%3A66%2E66666667%25%7D%2Ecol%2Dmd%2Dpush%2D7%7Bleft%3A58%2E33333333%25%7D%2Ecol%2Dmd%2Dpush%2D6%7Bleft%3A50%25%7D%2Ecol%2Dmd%2Dpush%2D5%7Bleft%3A41%2E66666667%25%7D%2Ecol%2Dmd%2Dpush%2D4%7Bleft%3A33%2E33333333%25%7D%2Ecol%2Dmd%2Dpush%2D3%7Bleft%3A25%25%7D%2Ecol%2Dmd%2Dpush%2D2%7Bleft%3A16%2E66666667%25%7D%2Ecol%2Dmd%2Dpush%2D1%7Bleft%3A8%2E33333333%25%7D%2Ecol%2Dmd%2Dpush%2D0%7Bleft%3Aauto%7D%2Ecol%2Dmd%2Doffset%2D12%7Bmargin%2Dleft%3A100%25%7D%2Ecol%2Dmd%2Doffset%2D11%7Bmargin%2Dleft%3A91%2E66666667%25%7D%2Ecol%2Dmd%2Doffset%2D10%7Bmargin%2Dleft%3A83%2E33333333%25%7D%2Ecol%2Dmd%2Doffset%2D9%7Bmargin%2Dleft%3A75%25%7D%2Ecol%2Dmd%2Doffset%2D8%7Bmargin%2Dleft%3A66%2E66666667%25%7D%2Ecol%2Dmd%2Doffset%2D7%7Bmargin%2Dleft%3A58%2E33333333%25%7D%2Ecol%2Dmd%2Doffset%2D6%7Bmargin%2Dleft%3A50%25%7D%2Ecol%2Dmd%2Doffset%2D5%7Bmargin%2Dleft%3A41%2E66666667%25%7D%2Ecol%2Dmd%2Doffset%2D4%7Bmargin%2Dleft%3A33%2E33333333%25%7D%2Ecol%2Dmd%2Doffset%2D3%7Bmargin%2Dleft%3A25%25%7D%2Ecol%2Dmd%2Doffset%2D2%7Bmargin%2Dleft%3A16%2E66666667%25%7D%2Ecol%2Dmd%2Doffset%2D1%7Bmargin%2Dleft%3A8%2E33333333%25%7D%2Ecol%2Dmd%2Doffset%2D0%7Bmargin%2Dleft%3A0%7D%7D%40media%20%28min%2Dwidth%3A1200px%29%7B%2Ecol%2Dlg%2D1%2C%2Ecol%2Dlg%2D10%2C%2Ecol%2Dlg%2D11%2C%2Ecol%2Dlg%2D12%2C%2Ecol%2Dlg%2D2%2C%2Ecol%2Dlg%2D3%2C%2Ecol%2Dlg%2D4%2C%2Ecol%2Dlg%2D5%2C%2Ecol%2Dlg%2D6%2C%2Ecol%2Dlg%2D7%2C%2Ecol%2Dlg%2D8%2C%2Ecol%2Dlg%2D9%7Bfloat%3Aleft%7D%2Ecol%2Dlg%2D12%7Bwidth%3A100%25%7D%2Ecol%2Dlg%2D11%7Bwidth%3A91%2E66666667%25%7D%2Ecol%2Dlg%2D10%7Bwidth%3A83%2E33333333%25%7D%2Ecol%2Dlg%2D9%7Bwidth%3A75%25%7D%2Ecol%2Dlg%2D8%7Bwidth%3A66%2E66666667%25%7D%2Ecol%2Dlg%2D7%7Bwidth%3A58%2E33333333%25%7D%2Ecol%2Dlg%2D6%7Bwidth%3A50%25%7D%2Ecol%2Dlg%2D5%7Bwidth%3A41%2E66666667%25%7D%2Ecol%2Dlg%2D4%7Bwidth%3A33%2E33333333%25%7D%2Ecol%2Dlg%2D3%7Bwidth%3A25%25%7D%2Ecol%2Dlg%2D2%7Bwidth%3A16%2E66666667%25%7D%2Ecol%2Dlg%2D1%7Bwidth%3A8%2E33333333%25%7D%2Ecol%2Dlg%2Dpull%2D12%7Bright%3A100%25%7D%2Ecol%2Dlg%2Dpull%2D11%7Bright%3A91%2E66666667%25%7D%2Ecol%2Dlg%2Dpull%2D10%7Bright%3A83%2E33333333%25%7D%2Ecol%2Dlg%2Dpull%2D9%7Bright%3A75%25%7D%2Ecol%2Dlg%2Dpull%2D8%7Bright%3A66%2E66666667%25%7D%2Ecol%2Dlg%2Dpull%2D7%7Bright%3A58%2E33333333%25%7D%2Ecol%2Dlg%2Dpull%2D6%7Bright%3A50%25%7D%2Ecol%2Dlg%2Dpull%2D5%7Bright%3A41%2E66666667%25%7D%2Ecol%2Dlg%2Dpull%2D4%7Bright%3A33%2E33333333%25%7D%2Ecol%2Dlg%2Dpull%2D3%7Bright%3A25%25%7D%2Ecol%2Dlg%2Dpull%2D2%7Bright%3A16%2E66666667%25%7D%2Ecol%2Dlg%2Dpull%2D1%7Bright%3A8%2E33333333%25%7D%2Ecol%2Dlg%2Dpull%2D0%7Bright%3Aauto%7D%2Ecol%2Dlg%2Dpush%2D12%7Bleft%3A100%25%7D%2Ecol%2Dlg%2Dpush%2D11%7Bleft%3A91%2E66666667%25%7D%2Ecol%2Dlg%2Dpush%2D10%7Bleft%3A83%2E33333333%25%7D%2Ecol%2Dlg%2Dpush%2D9%7Bleft%3A75%25%7D%2Ecol%2Dlg%2Dpush%2D8%7Bleft%3A66%2E66666667%25%7D%2Ecol%2Dlg%2Dpush%2D7%7Bleft%3A58%2E33333333%25%7D%2Ecol%2Dlg%2Dpush%2D6%7Bleft%3A50%25%7D%2Ecol%2Dlg%2Dpush%2D5%7Bleft%3A41%2E66666667%25%7D%2Ecol%2Dlg%2Dpush%2D4%7Bleft%3A33%2E33333333%25%7D%2Ecol%2Dlg%2Dpush%2D3%7Bleft%3A25%25%7D%2Ecol%2Dlg%2Dpush%2D2%7Bleft%3A16%2E66666667%25%7D%2Ecol%2Dlg%2Dpush%2D1%7Bleft%3A8%2E33333333%25%7D%2Ecol%2Dlg%2Dpush%2D0%7Bleft%3Aauto%7D%2Ecol%2Dlg%2Doffset%2D12%7Bmargin%2Dleft%3A100%25%7D%2Ecol%2Dlg%2Doffset%2D11%7Bmargin%2Dleft%3A91%2E66666667%25%7D%2Ecol%2Dlg%2Doffset%2D10%7Bmargin%2Dleft%3A83%2E33333333%25%7D%2Ecol%2Dlg%2Doffset%2D9%7Bmargin%2Dleft%3A75%25%7D%2Ecol%2Dlg%2Doffset%2D8%7Bmargin%2Dleft%3A66%2E66666667%25%7D%2Ecol%2Dlg%2Doffset%2D7%7Bmargin%2Dleft%3A58%2E33333333%25%7D%2Ecol%2Dlg%2Doffset%2D6%7Bmargin%2Dleft%3A50%25%7D%2Ecol%2Dlg%2Doffset%2D5%7Bmargin%2Dleft%3A41%2E66666667%25%7D%2Ecol%2Dlg%2Doffset%2D4%7Bmargin%2Dleft%3A33%2E33333333%25%7D%2Ecol%2Dlg%2Doffset%2D3%7Bmargin%2Dleft%3A25%25%7D%2Ecol%2Dlg%2Doffset%2D2%7Bmargin%2Dleft%3A16%2E66666667%25%7D%2Ecol%2Dlg%2Doffset%2D1%7Bmargin%2Dleft%3A8%2E33333333%25%7D%2Ecol%2Dlg%2Doffset%2D0%7Bmargin%2Dleft%3A0%7D%7Dtable%7Bbackground%2Dcolor%3Atransparent%7Dcaption%7Bpadding%2Dtop%3A8px%3Bpadding%2Dbottom%3A8px%3Bcolor%3A%23777%3Btext%2Dalign%3Aleft%7Dth%7B%7D%2Etable%7Bwidth%3A100%25%3Bmax%2Dwidth%3A100%25%3Bmargin%2Dbottom%3A20px%7D%2Etable%3Etbody%3Etr%3Etd%2C%2Etable%3Etbody%3Etr%3Eth%2C%2Etable%3Etfoot%3Etr%3Etd%2C%2Etable%3Etfoot%3Etr%3Eth%2C%2Etable%3Ethead%3Etr%3Etd%2C%2Etable%3Ethead%3Etr%3Eth%7Bpadding%3A8px%3Bline%2Dheight%3A1%2E42857143%3Bvertical%2Dalign%3Atop%3Bborder%2Dtop%3A1px%20solid%20%23ddd%7D%2Etable%3Ethead%3Etr%3Eth%7Bvertical%2Dalign%3Abottom%3Bborder%2Dbottom%3A2px%20solid%20%23ddd%7D%2Etable%3Ecaption%2Bthead%3Etr%3Afirst%2Dchild%3Etd%2C%2Etable%3Ecaption%2Bthead%3Etr%3Afirst%2Dchild%3Eth%2C%2Etable%3Ecolgroup%2Bthead%3Etr%3Afirst%2Dchild%3Etd%2C%2Etable%3Ecolgroup%2Bthead%3Etr%3Afirst%2Dchild%3Eth%2C%2Etable%3Ethead%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%3Etd%2C%2Etable%3Ethead%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%3Eth%7Bborder%2Dtop%3A0%7D%2Etable%3Etbody%2Btbody%7Bborder%2Dtop%3A2px%20solid%20%23ddd%7D%2Etable%20%2Etable%7Bbackground%2Dcolor%3A%23fff%7D%2Etable%2Dcondensed%3Etbody%3Etr%3Etd%2C%2Etable%2Dcondensed%3Etbody%3Etr%3Eth%2C%2Etable%2Dcondensed%3Etfoot%3Etr%3Etd%2C%2Etable%2Dcondensed%3Etfoot%3Etr%3Eth%2C%2Etable%2Dcondensed%3Ethead%3Etr%3Etd%2C%2Etable%2Dcondensed%3Ethead%3Etr%3Eth%7Bpadding%3A5px%7D%2Etable%2Dbordered%7Bborder%3A1px%20solid%20%23ddd%7D%2Etable%2Dbordered%3Etbody%3Etr%3Etd%2C%2Etable%2Dbordered%3Etbody%3Etr%3Eth%2C%2Etable%2Dbordered%3Etfoot%3Etr%3Etd%2C%2Etable%2Dbordered%3Etfoot%3Etr%3Eth%2C%2Etable%2Dbordered%3Ethead%3Etr%3Etd%2C%2Etable%2Dbordered%3Ethead%3Etr%3Eth%7Bborder%3A1px%20solid%20%23ddd%7D%2Etable%2Dbordered%3Ethead%3Etr%3Etd%2C%2Etable%2Dbordered%3Ethead%3Etr%3Eth%7Bborder%2Dbottom%2Dwidth%3A2px%7D%2Etable%2Dstriped%3Etbody%3Etr%3Anth%2Dof%2Dtype%28odd%29%7Bbackground%2Dcolor%3A%23f9f9f9%7D%2Etable%2Dhover%3Etbody%3Etr%3Ahover%7Bbackground%2Dcolor%3A%23f5f5f5%7Dtable%20col%5Bclass%2A%3Dcol%2D%5D%7Bposition%3Astatic%3Bdisplay%3Atable%2Dcolumn%3Bfloat%3Anone%7Dtable%20td%5Bclass%2A%3Dcol%2D%5D%2Ctable%20th%5Bclass%2A%3Dcol%2D%5D%7Bposition%3Astatic%3Bdisplay%3Atable%2Dcell%3Bfloat%3Anone%7D%2Etable%3Etbody%3Etr%2Eactive%3Etd%2C%2Etable%3Etbody%3Etr%2Eactive%3Eth%2C%2Etable%3Etbody%3Etr%3Etd%2Eactive%2C%2Etable%3Etbody%3Etr%3Eth%2Eactive%2C%2Etable%3Etfoot%3Etr%2Eactive%3Etd%2C%2Etable%3Etfoot%3Etr%2Eactive%3Eth%2C%2Etable%3Etfoot%3Etr%3Etd%2Eactive%2C%2Etable%3Etfoot%3Etr%3Eth%2Eactive%2C%2Etable%3Ethead%3Etr%2Eactive%3Etd%2C%2Etable%3Ethead%3Etr%2Eactive%3Eth%2C%2Etable%3Ethead%3Etr%3Etd%2Eactive%2C%2Etable%3Ethead%3Etr%3Eth%2Eactive%7Bbackground%2Dcolor%3A%23f5f5f5%7D%2Etable%2Dhover%3Etbody%3Etr%2Eactive%3Ahover%3Etd%2C%2Etable%2Dhover%3Etbody%3Etr%2Eactive%3Ahover%3Eth%2C%2Etable%2Dhover%3Etbody%3Etr%3Ahover%3E%2Eactive%2C%2Etable%2Dhover%3Etbody%3Etr%3Etd%2Eactive%3Ahover%2C%2Etable%2Dhover%3Etbody%3Etr%3Eth%2Eactive%3Ahover%7Bbackground%2Dcolor%3A%23e8e8e8%7D%2Etable%3Etbody%3Etr%2Esuccess%3Etd%2C%2Etable%3Etbody%3Etr%2Esuccess%3Eth%2C%2Etable%3Etbody%3Etr%3Etd%2Esuccess%2C%2Etable%3Etbody%3Etr%3Eth%2Esuccess%2C%2Etable%3Etfoot%3Etr%2Esuccess%3Etd%2C%2Etable%3Etfoot%3Etr%2Esuccess%3Eth%2C%2Etable%3Etfoot%3Etr%3Etd%2Esuccess%2C%2Etable%3Etfoot%3Etr%3Eth%2Esuccess%2C%2Etable%3Ethead%3Etr%2Esuccess%3Etd%2C%2Etable%3Ethead%3Etr%2Esuccess%3Eth%2C%2Etable%3Ethead%3Etr%3Etd%2Esuccess%2C%2Etable%3Ethead%3Etr%3Eth%2Esuccess%7Bbackground%2Dcolor%3A%23dff0d8%7D%2Etable%2Dhover%3Etbody%3Etr%2Esuccess%3Ahover%3Etd%2C%2Etable%2Dhover%3Etbody%3Etr%2Esuccess%3Ahover%3Eth%2C%2Etable%2Dhover%3Etbody%3Etr%3Ahover%3E%2Esuccess%2C%2Etable%2Dhover%3Etbody%3Etr%3Etd%2Esuccess%3Ahover%2C%2Etable%2Dhover%3Etbody%3Etr%3Eth%2Esuccess%3Ahover%7Bbackground%2Dcolor%3A%23d0e9c6%7D%2Etable%3Etbody%3Etr%2Einfo%3Etd%2C%2Etable%3Etbody%3Etr%2Einfo%3Eth%2C%2Etable%3Etbody%3Etr%3Etd%2Einfo%2C%2Etable%3Etbody%3Etr%3Eth%2Einfo%2C%2Etable%3Etfoot%3Etr%2Einfo%3Etd%2C%2Etable%3Etfoot%3Etr%2Einfo%3Eth%2C%2Etable%3Etfoot%3Etr%3Etd%2Einfo%2C%2Etable%3Etfoot%3Etr%3Eth%2Einfo%2C%2Etable%3Ethead%3Etr%2Einfo%3Etd%2C%2Etable%3Ethead%3Etr%2Einfo%3Eth%2C%2Etable%3Ethead%3Etr%3Etd%2Einfo%2C%2Etable%3Ethead%3Etr%3Eth%2Einfo%7Bbackground%2Dcolor%3A%23d9edf7%7D%2Etable%2Dhover%3Etbody%3Etr%2Einfo%3Ahover%3Etd%2C%2Etable%2Dhover%3Etbody%3Etr%2Einfo%3Ahover%3Eth%2C%2Etable%2Dhover%3Etbody%3Etr%3Ahover%3E%2Einfo%2C%2Etable%2Dhover%3Etbody%3Etr%3Etd%2Einfo%3Ahover%2C%2Etable%2Dhover%3Etbody%3Etr%3Eth%2Einfo%3Ahover%7Bbackground%2Dcolor%3A%23c4e3f3%7D%2Etable%3Etbody%3Etr%2Ewarning%3Etd%2C%2Etable%3Etbody%3Etr%2Ewarning%3Eth%2C%2Etable%3Etbody%3Etr%3Etd%2Ewarning%2C%2Etable%3Etbody%3Etr%3Eth%2Ewarning%2C%2Etable%3Etfoot%3Etr%2Ewarning%3Etd%2C%2Etable%3Etfoot%3Etr%2Ewarning%3Eth%2C%2Etable%3Etfoot%3Etr%3Etd%2Ewarning%2C%2Etable%3Etfoot%3Etr%3Eth%2Ewarning%2C%2Etable%3Ethead%3Etr%2Ewarning%3Etd%2C%2Etable%3Ethead%3Etr%2Ewarning%3Eth%2C%2Etable%3Ethead%3Etr%3Etd%2Ewarning%2C%2Etable%3Ethead%3Etr%3Eth%2Ewarning%7Bbackground%2Dcolor%3A%23fcf8e3%7D%2Etable%2Dhover%3Etbody%3Etr%2Ewarning%3Ahover%3Etd%2C%2Etable%2Dhover%3Etbody%3Etr%2Ewarning%3Ahover%3Eth%2C%2Etable%2Dhover%3Etbody%3Etr%3Ahover%3E%2Ewarning%2C%2Etable%2Dhover%3Etbody%3Etr%3Etd%2Ewarning%3Ahover%2C%2Etable%2Dhover%3Etbody%3Etr%3Eth%2Ewarning%3Ahover%7Bbackground%2Dcolor%3A%23faf2cc%7D%2Etable%3Etbody%3Etr%2Edanger%3Etd%2C%2Etable%3Etbody%3Etr%2Edanger%3Eth%2C%2Etable%3Etbody%3Etr%3Etd%2Edanger%2C%2Etable%3Etbody%3Etr%3Eth%2Edanger%2C%2Etable%3Etfoot%3Etr%2Edanger%3Etd%2C%2Etable%3Etfoot%3Etr%2Edanger%3Eth%2C%2Etable%3Etfoot%3Etr%3Etd%2Edanger%2C%2Etable%3Etfoot%3Etr%3Eth%2Edanger%2C%2Etable%3Ethead%3Etr%2Edanger%3Etd%2C%2Etable%3Ethead%3Etr%2Edanger%3Eth%2C%2Etable%3Ethead%3Etr%3Etd%2Edanger%2C%2Etable%3Ethead%3Etr%3Eth%2Edanger%7Bbackground%2Dcolor%3A%23f2dede%7D%2Etable%2Dhover%3Etbody%3Etr%2Edanger%3Ahover%3Etd%2C%2Etable%2Dhover%3Etbody%3Etr%2Edanger%3Ahover%3Eth%2C%2Etable%2Dhover%3Etbody%3Etr%3Ahover%3E%2Edanger%2C%2Etable%2Dhover%3Etbody%3Etr%3Etd%2Edanger%3Ahover%2C%2Etable%2Dhover%3Etbody%3Etr%3Eth%2Edanger%3Ahover%7Bbackground%2Dcolor%3A%23ebcccc%7D%2Etable%2Dresponsive%7Bmin%2Dheight%3A%2E01%25%3Boverflow%2Dx%3Aauto%7D%40media%20screen%20and%20%28max%2Dwidth%3A767px%29%7B%2Etable%2Dresponsive%7Bwidth%3A100%25%3Bmargin%2Dbottom%3A15px%3Boverflow%2Dy%3Ahidden%3B%2Dms%2Doverflow%2Dstyle%3A%2Dms%2Dautohiding%2Dscrollbar%3Bborder%3A1px%20solid%20%23ddd%7D%2Etable%2Dresponsive%3E%2Etable%7Bmargin%2Dbottom%3A0%7D%2Etable%2Dresponsive%3E%2Etable%3Etbody%3Etr%3Etd%2C%2Etable%2Dresponsive%3E%2Etable%3Etbody%3Etr%3Eth%2C%2Etable%2Dresponsive%3E%2Etable%3Etfoot%3Etr%3Etd%2C%2Etable%2Dresponsive%3E%2Etable%3Etfoot%3Etr%3Eth%2C%2Etable%2Dresponsive%3E%2Etable%3Ethead%3Etr%3Etd%2C%2Etable%2Dresponsive%3E%2Etable%3Ethead%3Etr%3Eth%7Bwhite%2Dspace%3Anowrap%7D%2Etable%2Dresponsive%3E%2Etable%2Dbordered%7Bborder%3A0%7D%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etbody%3Etr%3Etd%3Afirst%2Dchild%2C%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etbody%3Etr%3Eth%3Afirst%2Dchild%2C%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etfoot%3Etr%3Etd%3Afirst%2Dchild%2C%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etfoot%3Etr%3Eth%3Afirst%2Dchild%2C%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Ethead%3Etr%3Etd%3Afirst%2Dchild%2C%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Ethead%3Etr%3Eth%3Afirst%2Dchild%7Bborder%2Dleft%3A0%7D%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etbody%3Etr%3Etd%3Alast%2Dchild%2C%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etbody%3Etr%3Eth%3Alast%2Dchild%2C%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etfoot%3Etr%3Etd%3Alast%2Dchild%2C%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etfoot%3Etr%3Eth%3Alast%2Dchild%2C%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Ethead%3Etr%3Etd%3Alast%2Dchild%2C%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Ethead%3Etr%3Eth%3Alast%2Dchild%7Bborder%2Dright%3A0%7D%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etbody%3Etr%3Alast%2Dchild%3Etd%2C%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etbody%3Etr%3Alast%2Dchild%3Eth%2C%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etfoot%3Etr%3Alast%2Dchild%3Etd%2C%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etfoot%3Etr%3Alast%2Dchild%3Eth%7Bborder%2Dbottom%3A0%7D%7Dfieldset%7Bmin%2Dwidth%3A0%3Bpadding%3A0%3Bmargin%3A0%3Bborder%3A0%7Dlegend%7Bdisplay%3Ablock%3Bwidth%3A100%25%3Bpadding%3A0%3Bmargin%2Dbottom%3A20px%3Bfont%2Dsize%3A21px%3Bline%2Dheight%3Ainherit%3Bcolor%3A%23333%3Bborder%3A0%3Bborder%2Dbottom%3A1px%20solid%20%23e5e5e5%7Dlabel%7Bdisplay%3Ainline%2Dblock%3Bmax%2Dwidth%3A100%25%3Bmargin%2Dbottom%3A5px%3Bfont%2Dweight%3A700%7Dinput%5Btype%3Dsearch%5D%7B%2Dwebkit%2Dbox%2Dsizing%3Aborder%2Dbox%3B%2Dmoz%2Dbox%2Dsizing%3Aborder%2Dbox%3Bbox%2Dsizing%3Aborder%2Dbox%7Dinput%5Btype%3Dcheckbox%5D%2Cinput%5Btype%3Dradio%5D%7Bmargin%3A4px%200%200%3Bmargin%2Dtop%3A1px%5C9%3Bline%2Dheight%3Anormal%7Dinput%5Btype%3Dfile%5D%7Bdisplay%3Ablock%7Dinput%5Btype%3Drange%5D%7Bdisplay%3Ablock%3Bwidth%3A100%25%7Dselect%5Bmultiple%5D%2Cselect%5Bsize%5D%7Bheight%3Aauto%7Dinput%5Btype%3Dfile%5D%3Afocus%2Cinput%5Btype%3Dcheckbox%5D%3Afocus%2Cinput%5Btype%3Dradio%5D%3Afocus%7Boutline%3Athin%20dotted%3Boutline%3A5px%20auto%20%2Dwebkit%2Dfocus%2Dring%2Dcolor%3Boutline%2Doffset%3A%2D2px%7Doutput%7Bdisplay%3Ablock%3Bpadding%2Dtop%3A7px%3Bfont%2Dsize%3A14px%3Bline%2Dheight%3A1%2E42857143%3Bcolor%3A%23555%7D%2Eform%2Dcontrol%7Bdisplay%3Ablock%3Bwidth%3A100%25%3Bheight%3A34px%3Bpadding%3A6px%2012px%3Bfont%2Dsize%3A14px%3Bline%2Dheight%3A1%2E42857143%3Bcolor%3A%23555%3Bbackground%2Dcolor%3A%23fff%3Bbackground%2Dimage%3Anone%3Bborder%3A1px%20solid%20%23ccc%3Bborder%2Dradius%3A4px%3B%2Dwebkit%2Dbox%2Dshadow%3Ainset%200%201px%201px%20rgba%280%2C0%2C0%2C%2E075%29%3Bbox%2Dshadow%3Ainset%200%201px%201px%20rgba%280%2C0%2C0%2C%2E075%29%3B%2Dwebkit%2Dtransition%3Aborder%2Dcolor%20ease%2Din%2Dout%20%2E15s%2C%2Dwebkit%2Dbox%2Dshadow%20ease%2Din%2Dout%20%2E15s%3B%2Do%2Dtransition%3Aborder%2Dcolor%20ease%2Din%2Dout%20%2E15s%2Cbox%2Dshadow%20ease%2Din%2Dout%20%2E15s%3Btransition%3Aborder%2Dcolor%20ease%2Din%2Dout%20%2E15s%2Cbox%2Dshadow%20ease%2Din%2Dout%20%2E15s%7D%2Eform%2Dcontrol%3Afocus%7Bborder%2Dcolor%3A%2366afe9%3Boutline%3A0%3B%2Dwebkit%2Dbox%2Dshadow%3Ainset%200%201px%201px%20rgba%280%2C0%2C0%2C%2E075%29%2C0%200%208px%20rgba%28102%2C175%2C233%2C%2E6%29%3Bbox%2Dshadow%3Ainset%200%201px%201px%20rgba%280%2C0%2C0%2C%2E075%29%2C0%200%208px%20rgba%28102%2C175%2C233%2C%2E6%29%7D%2Eform%2Dcontrol%3A%3A%2Dmoz%2Dplaceholder%7Bcolor%3A%23999%3Bopacity%3A1%7D%2Eform%2Dcontrol%3A%2Dms%2Dinput%2Dplaceholder%7Bcolor%3A%23999%7D%2Eform%2Dcontrol%3A%3A%2Dwebkit%2Dinput%2Dplaceholder%7Bcolor%3A%23999%7D%2Eform%2Dcontrol%5Bdisabled%5D%2C%2Eform%2Dcontrol%5Breadonly%5D%2Cfieldset%5Bdisabled%5D%20%2Eform%2Dcontrol%7Bbackground%2Dcolor%3A%23eee%3Bopacity%3A1%7D%2Eform%2Dcontrol%5Bdisabled%5D%2Cfieldset%5Bdisabled%5D%20%2Eform%2Dcontrol%7Bcursor%3Anot%2Dallowed%7Dtextarea%2Eform%2Dcontrol%7Bheight%3Aauto%7Dinput%5Btype%3Dsearch%5D%7B%2Dwebkit%2Dappearance%3Anone%7D%40media%20screen%20and%20%28%2Dwebkit%2Dmin%2Ddevice%2Dpixel%2Dratio%3A0%29%7Binput%5Btype%3Ddate%5D%2Eform%2Dcontrol%2Cinput%5Btype%3Dtime%5D%2Eform%2Dcontrol%2Cinput%5Btype%3Ddatetime%2Dlocal%5D%2Eform%2Dcontrol%2Cinput%5Btype%3Dmonth%5D%2Eform%2Dcontrol%7Bline%2Dheight%3A34px%7D%2Einput%2Dgroup%2Dsm%20input%5Btype%3Ddate%5D%2C%2Einput%2Dgroup%2Dsm%20input%5Btype%3Dtime%5D%2C%2Einput%2Dgroup%2Dsm%20input%5Btype%3Ddatetime%2Dlocal%5D%2C%2Einput%2Dgroup%2Dsm%20input%5Btype%3Dmonth%5D%2Cinput%5Btype%3Ddate%5D%2Einput%2Dsm%2Cinput%5Btype%3Dtime%5D%2Einput%2Dsm%2Cinput%5Btype%3Ddatetime%2Dlocal%5D%2Einput%2Dsm%2Cinput%5Btype%3Dmonth%5D%2Einput%2Dsm%7Bline%2Dheight%3A30px%7D%2Einput%2Dgroup%2Dlg%20input%5Btype%3Ddate%5D%2C%2Einput%2Dgroup%2Dlg%20input%5Btype%3Dtime%5D%2C%2Einput%2Dgroup%2Dlg%20input%5Btype%3Ddatetime%2Dlocal%5D%2C%2Einput%2Dgroup%2Dlg%20input%5Btype%3Dmonth%5D%2Cinput%5Btype%3Ddate%5D%2Einput%2Dlg%2Cinput%5Btype%3Dtime%5D%2Einput%2Dlg%2Cinput%5Btype%3Ddatetime%2Dlocal%5D%2Einput%2Dlg%2Cinput%5Btype%3Dmonth%5D%2Einput%2Dlg%7Bline%2Dheight%3A46px%7D%7D%2Eform%2Dgroup%7Bmargin%2Dbottom%3A15px%7D%2Echeckbox%2C%2Eradio%7Bposition%3Arelative%3Bdisplay%3Ablock%3Bmargin%2Dtop%3A10px%3Bmargin%2Dbottom%3A10px%7D%2Echeckbox%20label%2C%2Eradio%20label%7Bmin%2Dheight%3A20px%3Bpadding%2Dleft%3A20px%3Bmargin%2Dbottom%3A0%3Bfont%2Dweight%3A400%3Bcursor%3Apointer%7D%2Echeckbox%20input%5Btype%3Dcheckbox%5D%2C%2Echeckbox%2Dinline%20input%5Btype%3Dcheckbox%5D%2C%2Eradio%20input%5Btype%3Dradio%5D%2C%2Eradio%2Dinline%20input%5Btype%3Dradio%5D%7Bposition%3Aabsolute%3Bmargin%2Dtop%3A4px%5C9%3Bmargin%2Dleft%3A%2D20px%7D%2Echeckbox%2B%2Echeckbox%2C%2Eradio%2B%2Eradio%7Bmargin%2Dtop%3A%2D5px%7D%2Echeckbox%2Dinline%2C%2Eradio%2Dinline%7Bposition%3Arelative%3Bdisplay%3Ainline%2Dblock%3Bpadding%2Dleft%3A20px%3Bmargin%2Dbottom%3A0%3Bfont%2Dweight%3A400%3Bvertical%2Dalign%3Amiddle%3Bcursor%3Apointer%7D%2Echeckbox%2Dinline%2B%2Echeckbox%2Dinline%2C%2Eradio%2Dinline%2B%2Eradio%2Dinline%7Bmargin%2Dtop%3A0%3Bmargin%2Dleft%3A10px%7Dfieldset%5Bdisabled%5D%20input%5Btype%3Dcheckbox%5D%2Cfieldset%5Bdisabled%5D%20input%5Btype%3Dradio%5D%2Cinput%5Btype%3Dcheckbox%5D%2Edisabled%2Cinput%5Btype%3Dcheckbox%5D%5Bdisabled%5D%2Cinput%5Btype%3Dradio%5D%2Edisabled%2Cinput%5Btype%3Dradio%5D%5Bdisabled%5D%7Bcursor%3Anot%2Dallowed%7D%2Echeckbox%2Dinline%2Edisabled%2C%2Eradio%2Dinline%2Edisabled%2Cfieldset%5Bdisabled%5D%20%2Echeckbox%2Dinline%2Cfieldset%5Bdisabled%5D%20%2Eradio%2Dinline%7Bcursor%3Anot%2Dallowed%7D%2Echeckbox%2Edisabled%20label%2C%2Eradio%2Edisabled%20label%2Cfieldset%5Bdisabled%5D%20%2Echeckbox%20label%2Cfieldset%5Bdisabled%5D%20%2Eradio%20label%7Bcursor%3Anot%2Dallowed%7D%2Eform%2Dcontrol%2Dstatic%7Bmin%2Dheight%3A34px%3Bpadding%2Dtop%3A7px%3Bpadding%2Dbottom%3A7px%3Bmargin%2Dbottom%3A0%7D%2Eform%2Dcontrol%2Dstatic%2Einput%2Dlg%2C%2Eform%2Dcontrol%2Dstatic%2Einput%2Dsm%7Bpadding%2Dright%3A0%3Bpadding%2Dleft%3A0%7D%2Einput%2Dsm%7Bheight%3A30px%3Bpadding%3A5px%2010px%3Bfont%2Dsize%3A12px%3Bline%2Dheight%3A1%2E5%3Bborder%2Dradius%3A3px%7Dselect%2Einput%2Dsm%7Bheight%3A30px%3Bline%2Dheight%3A30px%7Dselect%5Bmultiple%5D%2Einput%2Dsm%2Ctextarea%2Einput%2Dsm%7Bheight%3Aauto%7D%2Eform%2Dgroup%2Dsm%20%2Eform%2Dcontrol%7Bheight%3A30px%3Bpadding%3A5px%2010px%3Bfont%2Dsize%3A12px%3Bline%2Dheight%3A1%2E5%3Bborder%2Dradius%3A3px%7D%2Eform%2Dgroup%2Dsm%20select%2Eform%2Dcontrol%7Bheight%3A30px%3Bline%2Dheight%3A30px%7D%2Eform%2Dgroup%2Dsm%20select%5Bmultiple%5D%2Eform%2Dcontrol%2C%2Eform%2Dgroup%2Dsm%20textarea%2Eform%2Dcontrol%7Bheight%3Aauto%7D%2Eform%2Dgroup%2Dsm%20%2Eform%2Dcontrol%2Dstatic%7Bheight%3A30px%3Bmin%2Dheight%3A32px%3Bpadding%3A6px%2010px%3Bfont%2Dsize%3A12px%3Bline%2Dheight%3A1%2E5%7D%2Einput%2Dlg%7Bheight%3A46px%3Bpadding%3A10px%2016px%3Bfont%2Dsize%3A18px%3Bline%2Dheight%3A1%2E3333333%3Bborder%2Dradius%3A6px%7Dselect%2Einput%2Dlg%7Bheight%3A46px%3Bline%2Dheight%3A46px%7Dselect%5Bmultiple%5D%2Einput%2Dlg%2Ctextarea%2Einput%2Dlg%7Bheight%3Aauto%7D%2Eform%2Dgroup%2Dlg%20%2Eform%2Dcontrol%7Bheight%3A46px%3Bpadding%3A10px%2016px%3Bfont%2Dsize%3A18px%3Bline%2Dheight%3A1%2E3333333%3Bborder%2Dradius%3A6px%7D%2Eform%2Dgroup%2Dlg%20select%2Eform%2Dcontrol%7Bheight%3A46px%3Bline%2Dheight%3A46px%7D%2Eform%2Dgroup%2Dlg%20select%5Bmultiple%5D%2Eform%2Dcontrol%2C%2Eform%2Dgroup%2Dlg%20textarea%2Eform%2Dcontrol%7Bheight%3Aauto%7D%2Eform%2Dgroup%2Dlg%20%2Eform%2Dcontrol%2Dstatic%7Bheight%3A46px%3Bmin%2Dheight%3A38px%3Bpadding%3A11px%2016px%3Bfont%2Dsize%3A18px%3Bline%2Dheight%3A1%2E3333333%7D%2Ehas%2Dfeedback%7Bposition%3Arelative%7D%2Ehas%2Dfeedback%20%2Eform%2Dcontrol%7Bpadding%2Dright%3A42%2E5px%7D%2Eform%2Dcontrol%2Dfeedback%7Bposition%3Aabsolute%3Btop%3A0%3Bright%3A0%3Bz%2Dindex%3A2%3Bdisplay%3Ablock%3Bwidth%3A34px%3Bheight%3A34px%3Bline%2Dheight%3A34px%3Btext%2Dalign%3Acenter%3Bpointer%2Devents%3Anone%7D%2Eform%2Dgroup%2Dlg%20%2Eform%2Dcontrol%2B%2Eform%2Dcontrol%2Dfeedback%2C%2Einput%2Dgroup%2Dlg%2B%2Eform%2Dcontrol%2Dfeedback%2C%2Einput%2Dlg%2B%2Eform%2Dcontrol%2Dfeedback%7Bwidth%3A46px%3Bheight%3A46px%3Bline%2Dheight%3A46px%7D%2Eform%2Dgroup%2Dsm%20%2Eform%2Dcontrol%2B%2Eform%2Dcontrol%2Dfeedback%2C%2Einput%2Dgroup%2Dsm%2B%2Eform%2Dcontrol%2Dfeedback%2C%2Einput%2Dsm%2B%2Eform%2Dcontrol%2Dfeedback%7Bwidth%3A30px%3Bheight%3A30px%3Bline%2Dheight%3A30px%7D%2Ehas%2Dsuccess%20%2Echeckbox%2C%2Ehas%2Dsuccess%20%2Echeckbox%2Dinline%2C%2Ehas%2Dsuccess%20%2Econtrol%2Dlabel%2C%2Ehas%2Dsuccess%20%2Ehelp%2Dblock%2C%2Ehas%2Dsuccess%20%2Eradio%2C%2Ehas%2Dsuccess%20%2Eradio%2Dinline%2C%2Ehas%2Dsuccess%2Echeckbox%20label%2C%2Ehas%2Dsuccess%2Echeckbox%2Dinline%20label%2C%2Ehas%2Dsuccess%2Eradio%20label%2C%2Ehas%2Dsuccess%2Eradio%2Dinline%20label%7Bcolor%3A%233c763d%7D%2Ehas%2Dsuccess%20%2Eform%2Dcontrol%7Bborder%2Dcolor%3A%233c763d%3B%2Dwebkit%2Dbox%2Dshadow%3Ainset%200%201px%201px%20rgba%280%2C0%2C0%2C%2E075%29%3Bbox%2Dshadow%3Ainset%200%201px%201px%20rgba%280%2C0%2C0%2C%2E075%29%7D%2Ehas%2Dsuccess%20%2Eform%2Dcontrol%3Afocus%7Bborder%2Dcolor%3A%232b542c%3B%2Dwebkit%2Dbox%2Dshadow%3Ainset%200%201px%201px%20rgba%280%2C0%2C0%2C%2E075%29%2C0%200%206px%20%2367b168%3Bbox%2Dshadow%3Ainset%200%201px%201px%20rgba%280%2C0%2C0%2C%2E075%29%2C0%200%206px%20%2367b168%7D%2Ehas%2Dsuccess%20%2Einput%2Dgroup%2Daddon%7Bcolor%3A%233c763d%3Bbackground%2Dcolor%3A%23dff0d8%3Bborder%2Dcolor%3A%233c763d%7D%2Ehas%2Dsuccess%20%2Eform%2Dcontrol%2Dfeedback%7Bcolor%3A%233c763d%7D%2Ehas%2Dwarning%20%2Echeckbox%2C%2Ehas%2Dwarning%20%2Echeckbox%2Dinline%2C%2Ehas%2Dwarning%20%2Econtrol%2Dlabel%2C%2Ehas%2Dwarning%20%2Ehelp%2Dblock%2C%2Ehas%2Dwarning%20%2Eradio%2C%2Ehas%2Dwarning%20%2Eradio%2Dinline%2C%2Ehas%2Dwarning%2Echeckbox%20label%2C%2Ehas%2Dwarning%2Echeckbox%2Dinline%20label%2C%2Ehas%2Dwarning%2Eradio%20label%2C%2Ehas%2Dwarning%2Eradio%2Dinline%20label%7Bcolor%3A%238a6d3b%7D%2Ehas%2Dwarning%20%2Eform%2Dcontrol%7Bborder%2Dcolor%3A%238a6d3b%3B%2Dwebkit%2Dbox%2Dshadow%3Ainset%200%201px%201px%20rgba%280%2C0%2C0%2C%2E075%29%3Bbox%2Dshadow%3Ainset%200%201px%201px%20rgba%280%2C0%2C0%2C%2E075%29%7D%2Ehas%2Dwarning%20%2Eform%2Dcontrol%3Afocus%7Bborder%2Dcolor%3A%2366512c%3B%2Dwebkit%2Dbox%2Dshadow%3Ainset%200%201px%201px%20rgba%280%2C0%2C0%2C%2E075%29%2C0%200%206px%20%23c0a16b%3Bbox%2Dshadow%3Ainset%200%201px%201px%20rgba%280%2C0%2C0%2C%2E075%29%2C0%200%206px%20%23c0a16b%7D%2Ehas%2Dwarning%20%2Einput%2Dgroup%2Daddon%7Bcolor%3A%238a6d3b%3Bbackground%2Dcolor%3A%23fcf8e3%3Bborder%2Dcolor%3A%238a6d3b%7D%2Ehas%2Dwarning%20%2Eform%2Dcontrol%2Dfeedback%7Bcolor%3A%238a6d3b%7D%2Ehas%2Derror%20%2Echeckbox%2C%2Ehas%2Derror%20%2Echeckbox%2Dinline%2C%2Ehas%2Derror%20%2Econtrol%2Dlabel%2C%2Ehas%2Derror%20%2Ehelp%2Dblock%2C%2Ehas%2Derror%20%2Eradio%2C%2Ehas%2Derror%20%2Eradio%2Dinline%2C%2Ehas%2Derror%2Echeckbox%20label%2C%2Ehas%2Derror%2Echeckbox%2Dinline%20label%2C%2Ehas%2Derror%2Eradio%20label%2C%2Ehas%2Derror%2Eradio%2Dinline%20label%7Bcolor%3A%23a94442%7D%2Ehas%2Derror%20%2Eform%2Dcontrol%7Bborder%2Dcolor%3A%23a94442%3B%2Dwebkit%2Dbox%2Dshadow%3Ainset%200%201px%201px%20rgba%280%2C0%2C0%2C%2E075%29%3Bbox%2Dshadow%3Ainset%200%201px%201px%20rgba%280%2C0%2C0%2C%2E075%29%7D%2Ehas%2Derror%20%2Eform%2Dcontrol%3Afocus%7Bborder%2Dcolor%3A%23843534%3B%2Dwebkit%2Dbox%2Dshadow%3Ainset%200%201px%201px%20rgba%280%2C0%2C0%2C%2E075%29%2C0%200%206px%20%23ce8483%3Bbox%2Dshadow%3Ainset%200%201px%201px%20rgba%280%2C0%2C0%2C%2E075%29%2C0%200%206px%20%23ce8483%7D%2Ehas%2Derror%20%2Einput%2Dgroup%2Daddon%7Bcolor%3A%23a94442%3Bbackground%2Dcolor%3A%23f2dede%3Bborder%2Dcolor%3A%23a94442%7D%2Ehas%2Derror%20%2Eform%2Dcontrol%2Dfeedback%7Bcolor%3A%23a94442%7D%2Ehas%2Dfeedback%20label%7E%2Eform%2Dcontrol%2Dfeedback%7Btop%3A25px%7D%2Ehas%2Dfeedback%20label%2Esr%2Donly%7E%2Eform%2Dcontrol%2Dfeedback%7Btop%3A0%7D%2Ehelp%2Dblock%7Bdisplay%3Ablock%3Bmargin%2Dtop%3A5px%3Bmargin%2Dbottom%3A10px%3Bcolor%3A%23737373%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Eform%2Dinline%20%2Eform%2Dgroup%7Bdisplay%3Ainline%2Dblock%3Bmargin%2Dbottom%3A0%3Bvertical%2Dalign%3Amiddle%7D%2Eform%2Dinline%20%2Eform%2Dcontrol%7Bdisplay%3Ainline%2Dblock%3Bwidth%3Aauto%3Bvertical%2Dalign%3Amiddle%7D%2Eform%2Dinline%20%2Eform%2Dcontrol%2Dstatic%7Bdisplay%3Ainline%2Dblock%7D%2Eform%2Dinline%20%2Einput%2Dgroup%7Bdisplay%3Ainline%2Dtable%3Bvertical%2Dalign%3Amiddle%7D%2Eform%2Dinline%20%2Einput%2Dgroup%20%2Eform%2Dcontrol%2C%2Eform%2Dinline%20%2Einput%2Dgroup%20%2Einput%2Dgroup%2Daddon%2C%2Eform%2Dinline%20%2Einput%2Dgroup%20%2Einput%2Dgroup%2Dbtn%7Bwidth%3Aauto%7D%2Eform%2Dinline%20%2Einput%2Dgroup%3E%2Eform%2Dcontrol%7Bwidth%3A100%25%7D%2Eform%2Dinline%20%2Econtrol%2Dlabel%7Bmargin%2Dbottom%3A0%3Bvertical%2Dalign%3Amiddle%7D%2Eform%2Dinline%20%2Echeckbox%2C%2Eform%2Dinline%20%2Eradio%7Bdisplay%3Ainline%2Dblock%3Bmargin%2Dtop%3A0%3Bmargin%2Dbottom%3A0%3Bvertical%2Dalign%3Amiddle%7D%2Eform%2Dinline%20%2Echeckbox%20label%2C%2Eform%2Dinline%20%2Eradio%20label%7Bpadding%2Dleft%3A0%7D%2Eform%2Dinline%20%2Echeckbox%20input%5Btype%3Dcheckbox%5D%2C%2Eform%2Dinline%20%2Eradio%20input%5Btype%3Dradio%5D%7Bposition%3Arelative%3Bmargin%2Dleft%3A0%7D%2Eform%2Dinline%20%2Ehas%2Dfeedback%20%2Eform%2Dcontrol%2Dfeedback%7Btop%3A0%7D%7D%2Eform%2Dhorizontal%20%2Echeckbox%2C%2Eform%2Dhorizontal%20%2Echeckbox%2Dinline%2C%2Eform%2Dhorizontal%20%2Eradio%2C%2Eform%2Dhorizontal%20%2Eradio%2Dinline%7Bpadding%2Dtop%3A7px%3Bmargin%2Dtop%3A0%3Bmargin%2Dbottom%3A0%7D%2Eform%2Dhorizontal%20%2Echeckbox%2C%2Eform%2Dhorizontal%20%2Eradio%7Bmin%2Dheight%3A27px%7D%2Eform%2Dhorizontal%20%2Eform%2Dgroup%7Bmargin%2Dright%3A%2D15px%3Bmargin%2Dleft%3A%2D15px%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Eform%2Dhorizontal%20%2Econtrol%2Dlabel%7Bpadding%2Dtop%3A7px%3Bmargin%2Dbottom%3A0%3Btext%2Dalign%3Aright%7D%7D%2Eform%2Dhorizontal%20%2Ehas%2Dfeedback%20%2Eform%2Dcontrol%2Dfeedback%7Bright%3A15px%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Eform%2Dhorizontal%20%2Eform%2Dgroup%2Dlg%20%2Econtrol%2Dlabel%7Bpadding%2Dtop%3A14%2E33px%3Bfont%2Dsize%3A18px%7D%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Eform%2Dhorizontal%20%2Eform%2Dgroup%2Dsm%20%2Econtrol%2Dlabel%7Bpadding%2Dtop%3A6px%3Bfont%2Dsize%3A12px%7D%7D%2Ebtn%7Bdisplay%3Ainline%2Dblock%3Bpadding%3A6px%2012px%3Bmargin%2Dbottom%3A0%3Bfont%2Dsize%3A14px%3Bfont%2Dweight%3A400%3Bline%2Dheight%3A1%2E42857143%3Btext%2Dalign%3Acenter%3Bwhite%2Dspace%3Anowrap%3Bvertical%2Dalign%3Amiddle%3B%2Dms%2Dtouch%2Daction%3Amanipulation%3Btouch%2Daction%3Amanipulation%3Bcursor%3Apointer%3B%2Dwebkit%2Duser%2Dselect%3Anone%3B%2Dmoz%2Duser%2Dselect%3Anone%3B%2Dms%2Duser%2Dselect%3Anone%3Buser%2Dselect%3Anone%3Bbackground%2Dimage%3Anone%3Bborder%3A1px%20solid%20transparent%3Bborder%2Dradius%3A4px%7D%2Ebtn%2Eactive%2Efocus%2C%2Ebtn%2Eactive%3Afocus%2C%2Ebtn%2Efocus%2C%2Ebtn%3Aactive%2Efocus%2C%2Ebtn%3Aactive%3Afocus%2C%2Ebtn%3Afocus%7Boutline%3Athin%20dotted%3Boutline%3A5px%20auto%20%2Dwebkit%2Dfocus%2Dring%2Dcolor%3Boutline%2Doffset%3A%2D2px%7D%2Ebtn%2Efocus%2C%2Ebtn%3Afocus%2C%2Ebtn%3Ahover%7Bcolor%3A%23333%3Btext%2Ddecoration%3Anone%7D%2Ebtn%2Eactive%2C%2Ebtn%3Aactive%7Bbackground%2Dimage%3Anone%3Boutline%3A0%3B%2Dwebkit%2Dbox%2Dshadow%3Ainset%200%203px%205px%20rgba%280%2C0%2C0%2C%2E125%29%3Bbox%2Dshadow%3Ainset%200%203px%205px%20rgba%280%2C0%2C0%2C%2E125%29%7D%2Ebtn%2Edisabled%2C%2Ebtn%5Bdisabled%5D%2Cfieldset%5Bdisabled%5D%20%2Ebtn%7Bcursor%3Anot%2Dallowed%3Bfilter%3Aalpha%28opacity%3D65%29%3B%2Dwebkit%2Dbox%2Dshadow%3Anone%3Bbox%2Dshadow%3Anone%3Bopacity%3A%2E65%7Da%2Ebtn%2Edisabled%2Cfieldset%5Bdisabled%5D%20a%2Ebtn%7Bpointer%2Devents%3Anone%7D%2Ebtn%2Ddefault%7Bcolor%3A%23333%3Bbackground%2Dcolor%3A%23fff%3Bborder%2Dcolor%3A%23ccc%7D%2Ebtn%2Ddefault%2Efocus%2C%2Ebtn%2Ddefault%3Afocus%7Bcolor%3A%23333%3Bbackground%2Dcolor%3A%23e6e6e6%3Bborder%2Dcolor%3A%238c8c8c%7D%2Ebtn%2Ddefault%3Ahover%7Bcolor%3A%23333%3Bbackground%2Dcolor%3A%23e6e6e6%3Bborder%2Dcolor%3A%23adadad%7D%2Ebtn%2Ddefault%2Eactive%2C%2Ebtn%2Ddefault%3Aactive%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Ddefault%7Bcolor%3A%23333%3Bbackground%2Dcolor%3A%23e6e6e6%3Bborder%2Dcolor%3A%23adadad%7D%2Ebtn%2Ddefault%2Eactive%2Efocus%2C%2Ebtn%2Ddefault%2Eactive%3Afocus%2C%2Ebtn%2Ddefault%2Eactive%3Ahover%2C%2Ebtn%2Ddefault%3Aactive%2Efocus%2C%2Ebtn%2Ddefault%3Aactive%3Afocus%2C%2Ebtn%2Ddefault%3Aactive%3Ahover%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Ddefault%2Efocus%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Ddefault%3Afocus%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Ddefault%3Ahover%7Bcolor%3A%23333%3Bbackground%2Dcolor%3A%23d4d4d4%3Bborder%2Dcolor%3A%238c8c8c%7D%2Ebtn%2Ddefault%2Eactive%2C%2Ebtn%2Ddefault%3Aactive%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Ddefault%7Bbackground%2Dimage%3Anone%7D%2Ebtn%2Ddefault%2Edisabled%2C%2Ebtn%2Ddefault%2Edisabled%2Eactive%2C%2Ebtn%2Ddefault%2Edisabled%2Efocus%2C%2Ebtn%2Ddefault%2Edisabled%3Aactive%2C%2Ebtn%2Ddefault%2Edisabled%3Afocus%2C%2Ebtn%2Ddefault%2Edisabled%3Ahover%2C%2Ebtn%2Ddefault%5Bdisabled%5D%2C%2Ebtn%2Ddefault%5Bdisabled%5D%2Eactive%2C%2Ebtn%2Ddefault%5Bdisabled%5D%2Efocus%2C%2Ebtn%2Ddefault%5Bdisabled%5D%3Aactive%2C%2Ebtn%2Ddefault%5Bdisabled%5D%3Afocus%2C%2Ebtn%2Ddefault%5Bdisabled%5D%3Ahover%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Ddefault%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Ddefault%2Eactive%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Ddefault%2Efocus%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Ddefault%3Aactive%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Ddefault%3Afocus%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Ddefault%3Ahover%7Bbackground%2Dcolor%3A%23fff%3Bborder%2Dcolor%3A%23ccc%7D%2Ebtn%2Ddefault%20%2Ebadge%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23333%7D%2Ebtn%2Dprimary%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23337ab7%3Bborder%2Dcolor%3A%232e6da4%7D%2Ebtn%2Dprimary%2Efocus%2C%2Ebtn%2Dprimary%3Afocus%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23286090%3Bborder%2Dcolor%3A%23122b40%7D%2Ebtn%2Dprimary%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23286090%3Bborder%2Dcolor%3A%23204d74%7D%2Ebtn%2Dprimary%2Eactive%2C%2Ebtn%2Dprimary%3Aactive%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Dprimary%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23286090%3Bborder%2Dcolor%3A%23204d74%7D%2Ebtn%2Dprimary%2Eactive%2Efocus%2C%2Ebtn%2Dprimary%2Eactive%3Afocus%2C%2Ebtn%2Dprimary%2Eactive%3Ahover%2C%2Ebtn%2Dprimary%3Aactive%2Efocus%2C%2Ebtn%2Dprimary%3Aactive%3Afocus%2C%2Ebtn%2Dprimary%3Aactive%3Ahover%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Dprimary%2Efocus%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Dprimary%3Afocus%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Dprimary%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23204d74%3Bborder%2Dcolor%3A%23122b40%7D%2Ebtn%2Dprimary%2Eactive%2C%2Ebtn%2Dprimary%3Aactive%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Dprimary%7Bbackground%2Dimage%3Anone%7D%2Ebtn%2Dprimary%2Edisabled%2C%2Ebtn%2Dprimary%2Edisabled%2Eactive%2C%2Ebtn%2Dprimary%2Edisabled%2Efocus%2C%2Ebtn%2Dprimary%2Edisabled%3Aactive%2C%2Ebtn%2Dprimary%2Edisabled%3Afocus%2C%2Ebtn%2Dprimary%2Edisabled%3Ahover%2C%2Ebtn%2Dprimary%5Bdisabled%5D%2C%2Ebtn%2Dprimary%5Bdisabled%5D%2Eactive%2C%2Ebtn%2Dprimary%5Bdisabled%5D%2Efocus%2C%2Ebtn%2Dprimary%5Bdisabled%5D%3Aactive%2C%2Ebtn%2Dprimary%5Bdisabled%5D%3Afocus%2C%2Ebtn%2Dprimary%5Bdisabled%5D%3Ahover%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dprimary%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dprimary%2Eactive%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dprimary%2Efocus%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dprimary%3Aactive%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dprimary%3Afocus%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dprimary%3Ahover%7Bbackground%2Dcolor%3A%23337ab7%3Bborder%2Dcolor%3A%232e6da4%7D%2Ebtn%2Dprimary%20%2Ebadge%7Bcolor%3A%23337ab7%3Bbackground%2Dcolor%3A%23fff%7D%2Ebtn%2Dsuccess%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%235cb85c%3Bborder%2Dcolor%3A%234cae4c%7D%2Ebtn%2Dsuccess%2Efocus%2C%2Ebtn%2Dsuccess%3Afocus%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23449d44%3Bborder%2Dcolor%3A%23255625%7D%2Ebtn%2Dsuccess%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23449d44%3Bborder%2Dcolor%3A%23398439%7D%2Ebtn%2Dsuccess%2Eactive%2C%2Ebtn%2Dsuccess%3Aactive%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Dsuccess%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23449d44%3Bborder%2Dcolor%3A%23398439%7D%2Ebtn%2Dsuccess%2Eactive%2Efocus%2C%2Ebtn%2Dsuccess%2Eactive%3Afocus%2C%2Ebtn%2Dsuccess%2Eactive%3Ahover%2C%2Ebtn%2Dsuccess%3Aactive%2Efocus%2C%2Ebtn%2Dsuccess%3Aactive%3Afocus%2C%2Ebtn%2Dsuccess%3Aactive%3Ahover%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Dsuccess%2Efocus%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Dsuccess%3Afocus%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Dsuccess%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23398439%3Bborder%2Dcolor%3A%23255625%7D%2Ebtn%2Dsuccess%2Eactive%2C%2Ebtn%2Dsuccess%3Aactive%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Dsuccess%7Bbackground%2Dimage%3Anone%7D%2Ebtn%2Dsuccess%2Edisabled%2C%2Ebtn%2Dsuccess%2Edisabled%2Eactive%2C%2Ebtn%2Dsuccess%2Edisabled%2Efocus%2C%2Ebtn%2Dsuccess%2Edisabled%3Aactive%2C%2Ebtn%2Dsuccess%2Edisabled%3Afocus%2C%2Ebtn%2Dsuccess%2Edisabled%3Ahover%2C%2Ebtn%2Dsuccess%5Bdisabled%5D%2C%2Ebtn%2Dsuccess%5Bdisabled%5D%2Eactive%2C%2Ebtn%2Dsuccess%5Bdisabled%5D%2Efocus%2C%2Ebtn%2Dsuccess%5Bdisabled%5D%3Aactive%2C%2Ebtn%2Dsuccess%5Bdisabled%5D%3Afocus%2C%2Ebtn%2Dsuccess%5Bdisabled%5D%3Ahover%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dsuccess%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dsuccess%2Eactive%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dsuccess%2Efocus%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dsuccess%3Aactive%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dsuccess%3Afocus%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dsuccess%3Ahover%7Bbackground%2Dcolor%3A%235cb85c%3Bborder%2Dcolor%3A%234cae4c%7D%2Ebtn%2Dsuccess%20%2Ebadge%7Bcolor%3A%235cb85c%3Bbackground%2Dcolor%3A%23fff%7D%2Ebtn%2Dinfo%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%235bc0de%3Bborder%2Dcolor%3A%2346b8da%7D%2Ebtn%2Dinfo%2Efocus%2C%2Ebtn%2Dinfo%3Afocus%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%2331b0d5%3Bborder%2Dcolor%3A%231b6d85%7D%2Ebtn%2Dinfo%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%2331b0d5%3Bborder%2Dcolor%3A%23269abc%7D%2Ebtn%2Dinfo%2Eactive%2C%2Ebtn%2Dinfo%3Aactive%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Dinfo%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%2331b0d5%3Bborder%2Dcolor%3A%23269abc%7D%2Ebtn%2Dinfo%2Eactive%2Efocus%2C%2Ebtn%2Dinfo%2Eactive%3Afocus%2C%2Ebtn%2Dinfo%2Eactive%3Ahover%2C%2Ebtn%2Dinfo%3Aactive%2Efocus%2C%2Ebtn%2Dinfo%3Aactive%3Afocus%2C%2Ebtn%2Dinfo%3Aactive%3Ahover%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Dinfo%2Efocus%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Dinfo%3Afocus%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Dinfo%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23269abc%3Bborder%2Dcolor%3A%231b6d85%7D%2Ebtn%2Dinfo%2Eactive%2C%2Ebtn%2Dinfo%3Aactive%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Dinfo%7Bbackground%2Dimage%3Anone%7D%2Ebtn%2Dinfo%2Edisabled%2C%2Ebtn%2Dinfo%2Edisabled%2Eactive%2C%2Ebtn%2Dinfo%2Edisabled%2Efocus%2C%2Ebtn%2Dinfo%2Edisabled%3Aactive%2C%2Ebtn%2Dinfo%2Edisabled%3Afocus%2C%2Ebtn%2Dinfo%2Edisabled%3Ahover%2C%2Ebtn%2Dinfo%5Bdisabled%5D%2C%2Ebtn%2Dinfo%5Bdisabled%5D%2Eactive%2C%2Ebtn%2Dinfo%5Bdisabled%5D%2Efocus%2C%2Ebtn%2Dinfo%5Bdisabled%5D%3Aactive%2C%2Ebtn%2Dinfo%5Bdisabled%5D%3Afocus%2C%2Ebtn%2Dinfo%5Bdisabled%5D%3Ahover%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dinfo%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dinfo%2Eactive%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dinfo%2Efocus%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dinfo%3Aactive%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dinfo%3Afocus%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dinfo%3Ahover%7Bbackground%2Dcolor%3A%235bc0de%3Bborder%2Dcolor%3A%2346b8da%7D%2Ebtn%2Dinfo%20%2Ebadge%7Bcolor%3A%235bc0de%3Bbackground%2Dcolor%3A%23fff%7D%2Ebtn%2Dwarning%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23f0ad4e%3Bborder%2Dcolor%3A%23eea236%7D%2Ebtn%2Dwarning%2Efocus%2C%2Ebtn%2Dwarning%3Afocus%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23ec971f%3Bborder%2Dcolor%3A%23985f0d%7D%2Ebtn%2Dwarning%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23ec971f%3Bborder%2Dcolor%3A%23d58512%7D%2Ebtn%2Dwarning%2Eactive%2C%2Ebtn%2Dwarning%3Aactive%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Dwarning%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23ec971f%3Bborder%2Dcolor%3A%23d58512%7D%2Ebtn%2Dwarning%2Eactive%2Efocus%2C%2Ebtn%2Dwarning%2Eactive%3Afocus%2C%2Ebtn%2Dwarning%2Eactive%3Ahover%2C%2Ebtn%2Dwarning%3Aactive%2Efocus%2C%2Ebtn%2Dwarning%3Aactive%3Afocus%2C%2Ebtn%2Dwarning%3Aactive%3Ahover%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Dwarning%2Efocus%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Dwarning%3Afocus%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Dwarning%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23d58512%3Bborder%2Dcolor%3A%23985f0d%7D%2Ebtn%2Dwarning%2Eactive%2C%2Ebtn%2Dwarning%3Aactive%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Dwarning%7Bbackground%2Dimage%3Anone%7D%2Ebtn%2Dwarning%2Edisabled%2C%2Ebtn%2Dwarning%2Edisabled%2Eactive%2C%2Ebtn%2Dwarning%2Edisabled%2Efocus%2C%2Ebtn%2Dwarning%2Edisabled%3Aactive%2C%2Ebtn%2Dwarning%2Edisabled%3Afocus%2C%2Ebtn%2Dwarning%2Edisabled%3Ahover%2C%2Ebtn%2Dwarning%5Bdisabled%5D%2C%2Ebtn%2Dwarning%5Bdisabled%5D%2Eactive%2C%2Ebtn%2Dwarning%5Bdisabled%5D%2Efocus%2C%2Ebtn%2Dwarning%5Bdisabled%5D%3Aactive%2C%2Ebtn%2Dwarning%5Bdisabled%5D%3Afocus%2C%2Ebtn%2Dwarning%5Bdisabled%5D%3Ahover%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dwarning%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dwarning%2Eactive%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dwarning%2Efocus%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dwarning%3Aactive%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dwarning%3Afocus%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dwarning%3Ahover%7Bbackground%2Dcolor%3A%23f0ad4e%3Bborder%2Dcolor%3A%23eea236%7D%2Ebtn%2Dwarning%20%2Ebadge%7Bcolor%3A%23f0ad4e%3Bbackground%2Dcolor%3A%23fff%7D%2Ebtn%2Ddanger%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23d9534f%3Bborder%2Dcolor%3A%23d43f3a%7D%2Ebtn%2Ddanger%2Efocus%2C%2Ebtn%2Ddanger%3Afocus%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23c9302c%3Bborder%2Dcolor%3A%23761c19%7D%2Ebtn%2Ddanger%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23c9302c%3Bborder%2Dcolor%3A%23ac2925%7D%2Ebtn%2Ddanger%2Eactive%2C%2Ebtn%2Ddanger%3Aactive%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Ddanger%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23c9302c%3Bborder%2Dcolor%3A%23ac2925%7D%2Ebtn%2Ddanger%2Eactive%2Efocus%2C%2Ebtn%2Ddanger%2Eactive%3Afocus%2C%2Ebtn%2Ddanger%2Eactive%3Ahover%2C%2Ebtn%2Ddanger%3Aactive%2Efocus%2C%2Ebtn%2Ddanger%3Aactive%3Afocus%2C%2Ebtn%2Ddanger%3Aactive%3Ahover%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Ddanger%2Efocus%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Ddanger%3Afocus%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Ddanger%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23ac2925%3Bborder%2Dcolor%3A%23761c19%7D%2Ebtn%2Ddanger%2Eactive%2C%2Ebtn%2Ddanger%3Aactive%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Ddanger%7Bbackground%2Dimage%3Anone%7D%2Ebtn%2Ddanger%2Edisabled%2C%2Ebtn%2Ddanger%2Edisabled%2Eactive%2C%2Ebtn%2Ddanger%2Edisabled%2Efocus%2C%2Ebtn%2Ddanger%2Edisabled%3Aactive%2C%2Ebtn%2Ddanger%2Edisabled%3Afocus%2C%2Ebtn%2Ddanger%2Edisabled%3Ahover%2C%2Ebtn%2Ddanger%5Bdisabled%5D%2C%2Ebtn%2Ddanger%5Bdisabled%5D%2Eactive%2C%2Ebtn%2Ddanger%5Bdisabled%5D%2Efocus%2C%2Ebtn%2Ddanger%5Bdisabled%5D%3Aactive%2C%2Ebtn%2Ddanger%5Bdisabled%5D%3Afocus%2C%2Ebtn%2Ddanger%5Bdisabled%5D%3Ahover%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Ddanger%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Ddanger%2Eactive%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Ddanger%2Efocus%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Ddanger%3Aactive%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Ddanger%3Afocus%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Ddanger%3Ahover%7Bbackground%2Dcolor%3A%23d9534f%3Bborder%2Dcolor%3A%23d43f3a%7D%2Ebtn%2Ddanger%20%2Ebadge%7Bcolor%3A%23d9534f%3Bbackground%2Dcolor%3A%23fff%7D%2Ebtn%2Dlink%7Bfont%2Dweight%3A400%3Bcolor%3A%23337ab7%3Bborder%2Dradius%3A0%7D%2Ebtn%2Dlink%2C%2Ebtn%2Dlink%2Eactive%2C%2Ebtn%2Dlink%3Aactive%2C%2Ebtn%2Dlink%5Bdisabled%5D%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dlink%7Bbackground%2Dcolor%3Atransparent%3B%2Dwebkit%2Dbox%2Dshadow%3Anone%3Bbox%2Dshadow%3Anone%7D%2Ebtn%2Dlink%2C%2Ebtn%2Dlink%3Aactive%2C%2Ebtn%2Dlink%3Afocus%2C%2Ebtn%2Dlink%3Ahover%7Bborder%2Dcolor%3Atransparent%7D%2Ebtn%2Dlink%3Afocus%2C%2Ebtn%2Dlink%3Ahover%7Bcolor%3A%2323527c%3Btext%2Ddecoration%3Aunderline%3Bbackground%2Dcolor%3Atransparent%7D%2Ebtn%2Dlink%5Bdisabled%5D%3Afocus%2C%2Ebtn%2Dlink%5Bdisabled%5D%3Ahover%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dlink%3Afocus%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dlink%3Ahover%7Bcolor%3A%23777%3Btext%2Ddecoration%3Anone%7D%2Ebtn%2Dgroup%2Dlg%3E%2Ebtn%2C%2Ebtn%2Dlg%7Bpadding%3A10px%2016px%3Bfont%2Dsize%3A18px%3Bline%2Dheight%3A1%2E3333333%3Bborder%2Dradius%3A6px%7D%2Ebtn%2Dgroup%2Dsm%3E%2Ebtn%2C%2Ebtn%2Dsm%7Bpadding%3A5px%2010px%3Bfont%2Dsize%3A12px%3Bline%2Dheight%3A1%2E5%3Bborder%2Dradius%3A3px%7D%2Ebtn%2Dgroup%2Dxs%3E%2Ebtn%2C%2Ebtn%2Dxs%7Bpadding%3A1px%205px%3Bfont%2Dsize%3A12px%3Bline%2Dheight%3A1%2E5%3Bborder%2Dradius%3A3px%7D%2Ebtn%2Dblock%7Bdisplay%3Ablock%3Bwidth%3A100%25%7D%2Ebtn%2Dblock%2B%2Ebtn%2Dblock%7Bmargin%2Dtop%3A5px%7Dinput%5Btype%3Dbutton%5D%2Ebtn%2Dblock%2Cinput%5Btype%3Dreset%5D%2Ebtn%2Dblock%2Cinput%5Btype%3Dsubmit%5D%2Ebtn%2Dblock%7Bwidth%3A100%25%7D%2Efade%7Bopacity%3A0%3B%2Dwebkit%2Dtransition%3Aopacity%20%2E15s%20linear%3B%2Do%2Dtransition%3Aopacity%20%2E15s%20linear%3Btransition%3Aopacity%20%2E15s%20linear%7D%2Efade%2Ein%7Bopacity%3A1%7D%2Ecollapse%7Bdisplay%3Anone%7D%2Ecollapse%2Ein%7Bdisplay%3Ablock%7Dtr%2Ecollapse%2Ein%7Bdisplay%3Atable%2Drow%7Dtbody%2Ecollapse%2Ein%7Bdisplay%3Atable%2Drow%2Dgroup%7D%2Ecollapsing%7Bposition%3Arelative%3Bheight%3A0%3Boverflow%3Ahidden%3B%2Dwebkit%2Dtransition%2Dtiming%2Dfunction%3Aease%3B%2Do%2Dtransition%2Dtiming%2Dfunction%3Aease%3Btransition%2Dtiming%2Dfunction%3Aease%3B%2Dwebkit%2Dtransition%2Dduration%3A%2E35s%3B%2Do%2Dtransition%2Dduration%3A%2E35s%3Btransition%2Dduration%3A%2E35s%3B%2Dwebkit%2Dtransition%2Dproperty%3Aheight%2Cvisibility%3B%2Do%2Dtransition%2Dproperty%3Aheight%2Cvisibility%3Btransition%2Dproperty%3Aheight%2Cvisibility%7D%2Ecaret%7Bdisplay%3Ainline%2Dblock%3Bwidth%3A0%3Bheight%3A0%3Bmargin%2Dleft%3A2px%3Bvertical%2Dalign%3Amiddle%3Bborder%2Dtop%3A4px%20dashed%3Bborder%2Dtop%3A4px%20solid%5C9%3Bborder%2Dright%3A4px%20solid%20transparent%3Bborder%2Dleft%3A4px%20solid%20transparent%7D%2Edropdown%2C%2Edropup%7Bposition%3Arelative%7D%2Edropdown%2Dtoggle%3Afocus%7Boutline%3A0%7D%2Edropdown%2Dmenu%7Bposition%3Aabsolute%3Btop%3A100%25%3Bleft%3A0%3Bz%2Dindex%3A1000%3Bdisplay%3Anone%3Bfloat%3Aleft%3Bmin%2Dwidth%3A160px%3Bpadding%3A5px%200%3Bmargin%3A2px%200%200%3Bfont%2Dsize%3A14px%3Btext%2Dalign%3Aleft%3Blist%2Dstyle%3Anone%3Bbackground%2Dcolor%3A%23fff%3B%2Dwebkit%2Dbackground%2Dclip%3Apadding%2Dbox%3Bbackground%2Dclip%3Apadding%2Dbox%3Bborder%3A1px%20solid%20%23ccc%3Bborder%3A1px%20solid%20rgba%280%2C0%2C0%2C%2E15%29%3Bborder%2Dradius%3A4px%3B%2Dwebkit%2Dbox%2Dshadow%3A0%206px%2012px%20rgba%280%2C0%2C0%2C%2E175%29%3Bbox%2Dshadow%3A0%206px%2012px%20rgba%280%2C0%2C0%2C%2E175%29%7D%2Edropdown%2Dmenu%2Epull%2Dright%7Bright%3A0%3Bleft%3Aauto%7D%2Edropdown%2Dmenu%20%2Edivider%7Bheight%3A1px%3Bmargin%3A9px%200%3Boverflow%3Ahidden%3Bbackground%2Dcolor%3A%23e5e5e5%7D%2Edropdown%2Dmenu%3Eli%3Ea%7Bdisplay%3Ablock%3Bpadding%3A3px%2020px%3Bclear%3Aboth%3Bfont%2Dweight%3A400%3Bline%2Dheight%3A1%2E42857143%3Bcolor%3A%23333%3Bwhite%2Dspace%3Anowrap%7D%2Edropdown%2Dmenu%3Eli%3Ea%3Afocus%2C%2Edropdown%2Dmenu%3Eli%3Ea%3Ahover%7Bcolor%3A%23262626%3Btext%2Ddecoration%3Anone%3Bbackground%2Dcolor%3A%23f5f5f5%7D%2Edropdown%2Dmenu%3E%2Eactive%3Ea%2C%2Edropdown%2Dmenu%3E%2Eactive%3Ea%3Afocus%2C%2Edropdown%2Dmenu%3E%2Eactive%3Ea%3Ahover%7Bcolor%3A%23fff%3Btext%2Ddecoration%3Anone%3Bbackground%2Dcolor%3A%23337ab7%3Boutline%3A0%7D%2Edropdown%2Dmenu%3E%2Edisabled%3Ea%2C%2Edropdown%2Dmenu%3E%2Edisabled%3Ea%3Afocus%2C%2Edropdown%2Dmenu%3E%2Edisabled%3Ea%3Ahover%7Bcolor%3A%23777%7D%2Edropdown%2Dmenu%3E%2Edisabled%3Ea%3Afocus%2C%2Edropdown%2Dmenu%3E%2Edisabled%3Ea%3Ahover%7Btext%2Ddecoration%3Anone%3Bcursor%3Anot%2Dallowed%3Bbackground%2Dcolor%3Atransparent%3Bbackground%2Dimage%3Anone%3Bfilter%3Aprogid%3ADXImageTransform%2EMicrosoft%2Egradient%28enabled%3Dfalse%29%7D%2Eopen%3E%2Edropdown%2Dmenu%7Bdisplay%3Ablock%7D%2Eopen%3Ea%7Boutline%3A0%7D%2Edropdown%2Dmenu%2Dright%7Bright%3A0%3Bleft%3Aauto%7D%2Edropdown%2Dmenu%2Dleft%7Bright%3Aauto%3Bleft%3A0%7D%2Edropdown%2Dheader%7Bdisplay%3Ablock%3Bpadding%3A3px%2020px%3Bfont%2Dsize%3A12px%3Bline%2Dheight%3A1%2E42857143%3Bcolor%3A%23777%3Bwhite%2Dspace%3Anowrap%7D%2Edropdown%2Dbackdrop%7Bposition%3Afixed%3Btop%3A0%3Bright%3A0%3Bbottom%3A0%3Bleft%3A0%3Bz%2Dindex%3A990%7D%2Epull%2Dright%3E%2Edropdown%2Dmenu%7Bright%3A0%3Bleft%3Aauto%7D%2Edropup%20%2Ecaret%2C%2Enavbar%2Dfixed%2Dbottom%20%2Edropdown%20%2Ecaret%7Bcontent%3A%22%22%3Bborder%2Dtop%3A0%3Bborder%2Dbottom%3A4px%20dashed%3Bborder%2Dbottom%3A4px%20solid%5C9%7D%2Edropup%20%2Edropdown%2Dmenu%2C%2Enavbar%2Dfixed%2Dbottom%20%2Edropdown%20%2Edropdown%2Dmenu%7Btop%3Aauto%3Bbottom%3A100%25%3Bmargin%2Dbottom%3A2px%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Enavbar%2Dright%20%2Edropdown%2Dmenu%7Bright%3A0%3Bleft%3Aauto%7D%2Enavbar%2Dright%20%2Edropdown%2Dmenu%2Dleft%7Bright%3Aauto%3Bleft%3A0%7D%7D%2Ebtn%2Dgroup%2C%2Ebtn%2Dgroup%2Dvertical%7Bposition%3Arelative%3Bdisplay%3Ainline%2Dblock%3Bvertical%2Dalign%3Amiddle%7D%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%2C%2Ebtn%2Dgroup%3E%2Ebtn%7Bposition%3Arelative%3Bfloat%3Aleft%7D%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%2Eactive%2C%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%3Aactive%2C%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%3Afocus%2C%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%3Ahover%2C%2Ebtn%2Dgroup%3E%2Ebtn%2Eactive%2C%2Ebtn%2Dgroup%3E%2Ebtn%3Aactive%2C%2Ebtn%2Dgroup%3E%2Ebtn%3Afocus%2C%2Ebtn%2Dgroup%3E%2Ebtn%3Ahover%7Bz%2Dindex%3A2%7D%2Ebtn%2Dgroup%20%2Ebtn%2B%2Ebtn%2C%2Ebtn%2Dgroup%20%2Ebtn%2B%2Ebtn%2Dgroup%2C%2Ebtn%2Dgroup%20%2Ebtn%2Dgroup%2B%2Ebtn%2C%2Ebtn%2Dgroup%20%2Ebtn%2Dgroup%2B%2Ebtn%2Dgroup%7Bmargin%2Dleft%3A%2D1px%7D%2Ebtn%2Dtoolbar%7Bmargin%2Dleft%3A%2D5px%7D%2Ebtn%2Dtoolbar%20%2Ebtn%2C%2Ebtn%2Dtoolbar%20%2Ebtn%2Dgroup%2C%2Ebtn%2Dtoolbar%20%2Einput%2Dgroup%7Bfloat%3Aleft%7D%2Ebtn%2Dtoolbar%3E%2Ebtn%2C%2Ebtn%2Dtoolbar%3E%2Ebtn%2Dgroup%2C%2Ebtn%2Dtoolbar%3E%2Einput%2Dgroup%7Bmargin%2Dleft%3A5px%7D%2Ebtn%2Dgroup%3E%2Ebtn%3Anot%28%3Afirst%2Dchild%29%3Anot%28%3Alast%2Dchild%29%3Anot%28%2Edropdown%2Dtoggle%29%7Bborder%2Dradius%3A0%7D%2Ebtn%2Dgroup%3E%2Ebtn%3Afirst%2Dchild%7Bmargin%2Dleft%3A0%7D%2Ebtn%2Dgroup%3E%2Ebtn%3Afirst%2Dchild%3Anot%28%3Alast%2Dchild%29%3Anot%28%2Edropdown%2Dtoggle%29%7Bborder%2Dtop%2Dright%2Dradius%3A0%3Bborder%2Dbottom%2Dright%2Dradius%3A0%7D%2Ebtn%2Dgroup%3E%2Ebtn%3Alast%2Dchild%3Anot%28%3Afirst%2Dchild%29%2C%2Ebtn%2Dgroup%3E%2Edropdown%2Dtoggle%3Anot%28%3Afirst%2Dchild%29%7Bborder%2Dtop%2Dleft%2Dradius%3A0%3Bborder%2Dbottom%2Dleft%2Dradius%3A0%7D%2Ebtn%2Dgroup%3E%2Ebtn%2Dgroup%7Bfloat%3Aleft%7D%2Ebtn%2Dgroup%3E%2Ebtn%2Dgroup%3Anot%28%3Afirst%2Dchild%29%3Anot%28%3Alast%2Dchild%29%3E%2Ebtn%7Bborder%2Dradius%3A0%7D%2Ebtn%2Dgroup%3E%2Ebtn%2Dgroup%3Afirst%2Dchild%3Anot%28%3Alast%2Dchild%29%3E%2Ebtn%3Alast%2Dchild%2C%2Ebtn%2Dgroup%3E%2Ebtn%2Dgroup%3Afirst%2Dchild%3Anot%28%3Alast%2Dchild%29%3E%2Edropdown%2Dtoggle%7Bborder%2Dtop%2Dright%2Dradius%3A0%3Bborder%2Dbottom%2Dright%2Dradius%3A0%7D%2Ebtn%2Dgroup%3E%2Ebtn%2Dgroup%3Alast%2Dchild%3Anot%28%3Afirst%2Dchild%29%3E%2Ebtn%3Afirst%2Dchild%7Bborder%2Dtop%2Dleft%2Dradius%3A0%3Bborder%2Dbottom%2Dleft%2Dradius%3A0%7D%2Ebtn%2Dgroup%20%2Edropdown%2Dtoggle%3Aactive%2C%2Ebtn%2Dgroup%2Eopen%20%2Edropdown%2Dtoggle%7Boutline%3A0%7D%2Ebtn%2Dgroup%3E%2Ebtn%2B%2Edropdown%2Dtoggle%7Bpadding%2Dright%3A8px%3Bpadding%2Dleft%3A8px%7D%2Ebtn%2Dgroup%3E%2Ebtn%2Dlg%2B%2Edropdown%2Dtoggle%7Bpadding%2Dright%3A12px%3Bpadding%2Dleft%3A12px%7D%2Ebtn%2Dgroup%2Eopen%20%2Edropdown%2Dtoggle%7B%2Dwebkit%2Dbox%2Dshadow%3Ainset%200%203px%205px%20rgba%280%2C0%2C0%2C%2E125%29%3Bbox%2Dshadow%3Ainset%200%203px%205px%20rgba%280%2C0%2C0%2C%2E125%29%7D%2Ebtn%2Dgroup%2Eopen%20%2Edropdown%2Dtoggle%2Ebtn%2Dlink%7B%2Dwebkit%2Dbox%2Dshadow%3Anone%3Bbox%2Dshadow%3Anone%7D%2Ebtn%20%2Ecaret%7Bmargin%2Dleft%3A0%7D%2Ebtn%2Dlg%20%2Ecaret%7Bborder%2Dwidth%3A5px%205px%200%3Bborder%2Dbottom%2Dwidth%3A0%7D%2Edropup%20%2Ebtn%2Dlg%20%2Ecaret%7Bborder%2Dwidth%3A0%205px%205px%7D%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%2C%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%2Dgroup%2C%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%2Dgroup%3E%2Ebtn%7Bdisplay%3Ablock%3Bfloat%3Anone%3Bwidth%3A100%25%3Bmax%2Dwidth%3A100%25%7D%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%2Dgroup%3E%2Ebtn%7Bfloat%3Anone%7D%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%2B%2Ebtn%2C%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%2B%2Ebtn%2Dgroup%2C%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%2Dgroup%2B%2Ebtn%2C%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%2Dgroup%2B%2Ebtn%2Dgroup%7Bmargin%2Dtop%3A%2D1px%3Bmargin%2Dleft%3A0%7D%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%3Anot%28%3Afirst%2Dchild%29%3Anot%28%3Alast%2Dchild%29%7Bborder%2Dradius%3A0%7D%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%3Afirst%2Dchild%3Anot%28%3Alast%2Dchild%29%7Bborder%2Dtop%2Dright%2Dradius%3A4px%3Bborder%2Dbottom%2Dright%2Dradius%3A0%3Bborder%2Dbottom%2Dleft%2Dradius%3A0%7D%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%3Alast%2Dchild%3Anot%28%3Afirst%2Dchild%29%7Bborder%2Dtop%2Dleft%2Dradius%3A0%3Bborder%2Dtop%2Dright%2Dradius%3A0%3Bborder%2Dbottom%2Dleft%2Dradius%3A4px%7D%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%2Dgroup%3Anot%28%3Afirst%2Dchild%29%3Anot%28%3Alast%2Dchild%29%3E%2Ebtn%7Bborder%2Dradius%3A0%7D%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%2Dgroup%3Afirst%2Dchild%3Anot%28%3Alast%2Dchild%29%3E%2Ebtn%3Alast%2Dchild%2C%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%2Dgroup%3Afirst%2Dchild%3Anot%28%3Alast%2Dchild%29%3E%2Edropdown%2Dtoggle%7Bborder%2Dbottom%2Dright%2Dradius%3A0%3Bborder%2Dbottom%2Dleft%2Dradius%3A0%7D%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%2Dgroup%3Alast%2Dchild%3Anot%28%3Afirst%2Dchild%29%3E%2Ebtn%3Afirst%2Dchild%7Bborder%2Dtop%2Dleft%2Dradius%3A0%3Bborder%2Dtop%2Dright%2Dradius%3A0%7D%2Ebtn%2Dgroup%2Djustified%7Bdisplay%3Atable%3Bwidth%3A100%25%3Btable%2Dlayout%3Afixed%3Bborder%2Dcollapse%3Aseparate%7D%2Ebtn%2Dgroup%2Djustified%3E%2Ebtn%2C%2Ebtn%2Dgroup%2Djustified%3E%2Ebtn%2Dgroup%7Bdisplay%3Atable%2Dcell%3Bfloat%3Anone%3Bwidth%3A1%25%7D%2Ebtn%2Dgroup%2Djustified%3E%2Ebtn%2Dgroup%20%2Ebtn%7Bwidth%3A100%25%7D%2Ebtn%2Dgroup%2Djustified%3E%2Ebtn%2Dgroup%20%2Edropdown%2Dmenu%7Bleft%3Aauto%7D%5Bdata%2Dtoggle%3Dbuttons%5D%3E%2Ebtn%20input%5Btype%3Dcheckbox%5D%2C%5Bdata%2Dtoggle%3Dbuttons%5D%3E%2Ebtn%20input%5Btype%3Dradio%5D%2C%5Bdata%2Dtoggle%3Dbuttons%5D%3E%2Ebtn%2Dgroup%3E%2Ebtn%20input%5Btype%3Dcheckbox%5D%2C%5Bdata%2Dtoggle%3Dbuttons%5D%3E%2Ebtn%2Dgroup%3E%2Ebtn%20input%5Btype%3Dradio%5D%7Bposition%3Aabsolute%3Bclip%3Arect%280%2C0%2C0%2C0%29%3Bpointer%2Devents%3Anone%7D%2Einput%2Dgroup%7Bposition%3Arelative%3Bdisplay%3Atable%3Bborder%2Dcollapse%3Aseparate%7D%2Einput%2Dgroup%5Bclass%2A%3Dcol%2D%5D%7Bfloat%3Anone%3Bpadding%2Dright%3A0%3Bpadding%2Dleft%3A0%7D%2Einput%2Dgroup%20%2Eform%2Dcontrol%7Bposition%3Arelative%3Bz%2Dindex%3A2%3Bfloat%3Aleft%3Bwidth%3A100%25%3Bmargin%2Dbottom%3A0%7D%2Einput%2Dgroup%2Dlg%3E%2Eform%2Dcontrol%2C%2Einput%2Dgroup%2Dlg%3E%2Einput%2Dgroup%2Daddon%2C%2Einput%2Dgroup%2Dlg%3E%2Einput%2Dgroup%2Dbtn%3E%2Ebtn%7Bheight%3A46px%3Bpadding%3A10px%2016px%3Bfont%2Dsize%3A18px%3Bline%2Dheight%3A1%2E3333333%3Bborder%2Dradius%3A6px%7Dselect%2Einput%2Dgroup%2Dlg%3E%2Eform%2Dcontrol%2Cselect%2Einput%2Dgroup%2Dlg%3E%2Einput%2Dgroup%2Daddon%2Cselect%2Einput%2Dgroup%2Dlg%3E%2Einput%2Dgroup%2Dbtn%3E%2Ebtn%7Bheight%3A46px%3Bline%2Dheight%3A46px%7Dselect%5Bmultiple%5D%2Einput%2Dgroup%2Dlg%3E%2Eform%2Dcontrol%2Cselect%5Bmultiple%5D%2Einput%2Dgroup%2Dlg%3E%2Einput%2Dgroup%2Daddon%2Cselect%5Bmultiple%5D%2Einput%2Dgroup%2Dlg%3E%2Einput%2Dgroup%2Dbtn%3E%2Ebtn%2Ctextarea%2Einput%2Dgroup%2Dlg%3E%2Eform%2Dcontrol%2Ctextarea%2Einput%2Dgroup%2Dlg%3E%2Einput%2Dgroup%2Daddon%2Ctextarea%2Einput%2Dgroup%2Dlg%3E%2Einput%2Dgroup%2Dbtn%3E%2Ebtn%7Bheight%3Aauto%7D%2Einput%2Dgroup%2Dsm%3E%2Eform%2Dcontrol%2C%2Einput%2Dgroup%2Dsm%3E%2Einput%2Dgroup%2Daddon%2C%2Einput%2Dgroup%2Dsm%3E%2Einput%2Dgroup%2Dbtn%3E%2Ebtn%7Bheight%3A30px%3Bpadding%3A5px%2010px%3Bfont%2Dsize%3A12px%3Bline%2Dheight%3A1%2E5%3Bborder%2Dradius%3A3px%7Dselect%2Einput%2Dgroup%2Dsm%3E%2Eform%2Dcontrol%2Cselect%2Einput%2Dgroup%2Dsm%3E%2Einput%2Dgroup%2Daddon%2Cselect%2Einput%2Dgroup%2Dsm%3E%2Einput%2Dgroup%2Dbtn%3E%2Ebtn%7Bheight%3A30px%3Bline%2Dheight%3A30px%7Dselect%5Bmultiple%5D%2Einput%2Dgroup%2Dsm%3E%2Eform%2Dcontrol%2Cselect%5Bmultiple%5D%2Einput%2Dgroup%2Dsm%3E%2Einput%2Dgroup%2Daddon%2Cselect%5Bmultiple%5D%2Einput%2Dgroup%2Dsm%3E%2Einput%2Dgroup%2Dbtn%3E%2Ebtn%2Ctextarea%2Einput%2Dgroup%2Dsm%3E%2Eform%2Dcontrol%2Ctextarea%2Einput%2Dgroup%2Dsm%3E%2Einput%2Dgroup%2Daddon%2Ctextarea%2Einput%2Dgroup%2Dsm%3E%2Einput%2Dgroup%2Dbtn%3E%2Ebtn%7Bheight%3Aauto%7D%2Einput%2Dgroup%20%2Eform%2Dcontrol%2C%2Einput%2Dgroup%2Daddon%2C%2Einput%2Dgroup%2Dbtn%7Bdisplay%3Atable%2Dcell%7D%2Einput%2Dgroup%20%2Eform%2Dcontrol%3Anot%28%3Afirst%2Dchild%29%3Anot%28%3Alast%2Dchild%29%2C%2Einput%2Dgroup%2Daddon%3Anot%28%3Afirst%2Dchild%29%3Anot%28%3Alast%2Dchild%29%2C%2Einput%2Dgroup%2Dbtn%3Anot%28%3Afirst%2Dchild%29%3Anot%28%3Alast%2Dchild%29%7Bborder%2Dradius%3A0%7D%2Einput%2Dgroup%2Daddon%2C%2Einput%2Dgroup%2Dbtn%7Bwidth%3A1%25%3Bwhite%2Dspace%3Anowrap%3Bvertical%2Dalign%3Amiddle%7D%2Einput%2Dgroup%2Daddon%7Bpadding%3A6px%2012px%3Bfont%2Dsize%3A14px%3Bfont%2Dweight%3A400%3Bline%2Dheight%3A1%3Bcolor%3A%23555%3Btext%2Dalign%3Acenter%3Bbackground%2Dcolor%3A%23eee%3Bborder%3A1px%20solid%20%23ccc%3Bborder%2Dradius%3A4px%7D%2Einput%2Dgroup%2Daddon%2Einput%2Dsm%7Bpadding%3A5px%2010px%3Bfont%2Dsize%3A12px%3Bborder%2Dradius%3A3px%7D%2Einput%2Dgroup%2Daddon%2Einput%2Dlg%7Bpadding%3A10px%2016px%3Bfont%2Dsize%3A18px%3Bborder%2Dradius%3A6px%7D%2Einput%2Dgroup%2Daddon%20input%5Btype%3Dcheckbox%5D%2C%2Einput%2Dgroup%2Daddon%20input%5Btype%3Dradio%5D%7Bmargin%2Dtop%3A0%7D%2Einput%2Dgroup%20%2Eform%2Dcontrol%3Afirst%2Dchild%2C%2Einput%2Dgroup%2Daddon%3Afirst%2Dchild%2C%2Einput%2Dgroup%2Dbtn%3Afirst%2Dchild%3E%2Ebtn%2C%2Einput%2Dgroup%2Dbtn%3Afirst%2Dchild%3E%2Ebtn%2Dgroup%3E%2Ebtn%2C%2Einput%2Dgroup%2Dbtn%3Afirst%2Dchild%3E%2Edropdown%2Dtoggle%2C%2Einput%2Dgroup%2Dbtn%3Alast%2Dchild%3E%2Ebtn%2Dgroup%3Anot%28%3Alast%2Dchild%29%3E%2Ebtn%2C%2Einput%2Dgroup%2Dbtn%3Alast%2Dchild%3E%2Ebtn%3Anot%28%3Alast%2Dchild%29%3Anot%28%2Edropdown%2Dtoggle%29%7Bborder%2Dtop%2Dright%2Dradius%3A0%3Bborder%2Dbottom%2Dright%2Dradius%3A0%7D%2Einput%2Dgroup%2Daddon%3Afirst%2Dchild%7Bborder%2Dright%3A0%7D%2Einput%2Dgroup%20%2Eform%2Dcontrol%3Alast%2Dchild%2C%2Einput%2Dgroup%2Daddon%3Alast%2Dchild%2C%2Einput%2Dgroup%2Dbtn%3Afirst%2Dchild%3E%2Ebtn%2Dgroup%3Anot%28%3Afirst%2Dchild%29%3E%2Ebtn%2C%2Einput%2Dgroup%2Dbtn%3Afirst%2Dchild%3E%2Ebtn%3Anot%28%3Afirst%2Dchild%29%2C%2Einput%2Dgroup%2Dbtn%3Alast%2Dchild%3E%2Ebtn%2C%2Einput%2Dgroup%2Dbtn%3Alast%2Dchild%3E%2Ebtn%2Dgroup%3E%2Ebtn%2C%2Einput%2Dgroup%2Dbtn%3Alast%2Dchild%3E%2Edropdown%2Dtoggle%7Bborder%2Dtop%2Dleft%2Dradius%3A0%3Bborder%2Dbottom%2Dleft%2Dradius%3A0%7D%2Einput%2Dgroup%2Daddon%3Alast%2Dchild%7Bborder%2Dleft%3A0%7D%2Einput%2Dgroup%2Dbtn%7Bposition%3Arelative%3Bfont%2Dsize%3A0%3Bwhite%2Dspace%3Anowrap%7D%2Einput%2Dgroup%2Dbtn%3E%2Ebtn%7Bposition%3Arelative%7D%2Einput%2Dgroup%2Dbtn%3E%2Ebtn%2B%2Ebtn%7Bmargin%2Dleft%3A%2D1px%7D%2Einput%2Dgroup%2Dbtn%3E%2Ebtn%3Aactive%2C%2Einput%2Dgroup%2Dbtn%3E%2Ebtn%3Afocus%2C%2Einput%2Dgroup%2Dbtn%3E%2Ebtn%3Ahover%7Bz%2Dindex%3A2%7D%2Einput%2Dgroup%2Dbtn%3Afirst%2Dchild%3E%2Ebtn%2C%2Einput%2Dgroup%2Dbtn%3Afirst%2Dchild%3E%2Ebtn%2Dgroup%7Bmargin%2Dright%3A%2D1px%7D%2Einput%2Dgroup%2Dbtn%3Alast%2Dchild%3E%2Ebtn%2C%2Einput%2Dgroup%2Dbtn%3Alast%2Dchild%3E%2Ebtn%2Dgroup%7Bz%2Dindex%3A2%3Bmargin%2Dleft%3A%2D1px%7D%2Enav%7Bpadding%2Dleft%3A0%3Bmargin%2Dbottom%3A0%3Blist%2Dstyle%3Anone%7D%2Enav%3Eli%7Bposition%3Arelative%3Bdisplay%3Ablock%7D%2Enav%3Eli%3Ea%7Bposition%3Arelative%3Bdisplay%3Ablock%3Bpadding%3A10px%2015px%7D%2Enav%3Eli%3Ea%3Afocus%2C%2Enav%3Eli%3Ea%3Ahover%7Btext%2Ddecoration%3Anone%3Bbackground%2Dcolor%3A%23eee%7D%2Enav%3Eli%2Edisabled%3Ea%7Bcolor%3A%23777%7D%2Enav%3Eli%2Edisabled%3Ea%3Afocus%2C%2Enav%3Eli%2Edisabled%3Ea%3Ahover%7Bcolor%3A%23777%3Btext%2Ddecoration%3Anone%3Bcursor%3Anot%2Dallowed%3Bbackground%2Dcolor%3Atransparent%7D%2Enav%20%2Eopen%3Ea%2C%2Enav%20%2Eopen%3Ea%3Afocus%2C%2Enav%20%2Eopen%3Ea%3Ahover%7Bbackground%2Dcolor%3A%23eee%3Bborder%2Dcolor%3A%23337ab7%7D%2Enav%20%2Enav%2Ddivider%7Bheight%3A1px%3Bmargin%3A9px%200%3Boverflow%3Ahidden%3Bbackground%2Dcolor%3A%23e5e5e5%7D%2Enav%3Eli%3Ea%3Eimg%7Bmax%2Dwidth%3Anone%7D%2Enav%2Dtabs%7Bborder%2Dbottom%3A1px%20solid%20%23ddd%7D%2Enav%2Dtabs%3Eli%7Bfloat%3Aleft%3Bmargin%2Dbottom%3A%2D1px%7D%2Enav%2Dtabs%3Eli%3Ea%7Bmargin%2Dright%3A2px%3Bline%2Dheight%3A1%2E42857143%3Bborder%3A1px%20solid%20transparent%3Bborder%2Dradius%3A4px%204px%200%200%7D%2Enav%2Dtabs%3Eli%3Ea%3Ahover%7Bborder%2Dcolor%3A%23eee%20%23eee%20%23ddd%7D%2Enav%2Dtabs%3Eli%2Eactive%3Ea%2C%2Enav%2Dtabs%3Eli%2Eactive%3Ea%3Afocus%2C%2Enav%2Dtabs%3Eli%2Eactive%3Ea%3Ahover%7Bcolor%3A%23555%3Bcursor%3Adefault%3Bbackground%2Dcolor%3A%23fff%3Bborder%3A1px%20solid%20%23ddd%3Bborder%2Dbottom%2Dcolor%3Atransparent%7D%2Enav%2Dtabs%2Enav%2Djustified%7Bwidth%3A100%25%3Bborder%2Dbottom%3A0%7D%2Enav%2Dtabs%2Enav%2Djustified%3Eli%7Bfloat%3Anone%7D%2Enav%2Dtabs%2Enav%2Djustified%3Eli%3Ea%7Bmargin%2Dbottom%3A5px%3Btext%2Dalign%3Acenter%7D%2Enav%2Dtabs%2Enav%2Djustified%3E%2Edropdown%20%2Edropdown%2Dmenu%7Btop%3Aauto%3Bleft%3Aauto%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Enav%2Dtabs%2Enav%2Djustified%3Eli%7Bdisplay%3Atable%2Dcell%3Bwidth%3A1%25%7D%2Enav%2Dtabs%2Enav%2Djustified%3Eli%3Ea%7Bmargin%2Dbottom%3A0%7D%7D%2Enav%2Dtabs%2Enav%2Djustified%3Eli%3Ea%7Bmargin%2Dright%3A0%3Bborder%2Dradius%3A4px%7D%2Enav%2Dtabs%2Enav%2Djustified%3E%2Eactive%3Ea%2C%2Enav%2Dtabs%2Enav%2Djustified%3E%2Eactive%3Ea%3Afocus%2C%2Enav%2Dtabs%2Enav%2Djustified%3E%2Eactive%3Ea%3Ahover%7Bborder%3A1px%20solid%20%23ddd%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Enav%2Dtabs%2Enav%2Djustified%3Eli%3Ea%7Bborder%2Dbottom%3A1px%20solid%20%23ddd%3Bborder%2Dradius%3A4px%204px%200%200%7D%2Enav%2Dtabs%2Enav%2Djustified%3E%2Eactive%3Ea%2C%2Enav%2Dtabs%2Enav%2Djustified%3E%2Eactive%3Ea%3Afocus%2C%2Enav%2Dtabs%2Enav%2Djustified%3E%2Eactive%3Ea%3Ahover%7Bborder%2Dbottom%2Dcolor%3A%23fff%7D%7D%2Enav%2Dpills%3Eli%7Bfloat%3Aleft%7D%2Enav%2Dpills%3Eli%3Ea%7Bborder%2Dradius%3A4px%7D%2Enav%2Dpills%3Eli%2Bli%7Bmargin%2Dleft%3A2px%7D%2Enav%2Dpills%3Eli%2Eactive%3Ea%2C%2Enav%2Dpills%3Eli%2Eactive%3Ea%3Afocus%2C%2Enav%2Dpills%3Eli%2Eactive%3Ea%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23337ab7%7D%2Enav%2Dstacked%3Eli%7Bfloat%3Anone%7D%2Enav%2Dstacked%3Eli%2Bli%7Bmargin%2Dtop%3A2px%3Bmargin%2Dleft%3A0%7D%2Enav%2Djustified%7Bwidth%3A100%25%7D%2Enav%2Djustified%3Eli%7Bfloat%3Anone%7D%2Enav%2Djustified%3Eli%3Ea%7Bmargin%2Dbottom%3A5px%3Btext%2Dalign%3Acenter%7D%2Enav%2Djustified%3E%2Edropdown%20%2Edropdown%2Dmenu%7Btop%3Aauto%3Bleft%3Aauto%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Enav%2Djustified%3Eli%7Bdisplay%3Atable%2Dcell%3Bwidth%3A1%25%7D%2Enav%2Djustified%3Eli%3Ea%7Bmargin%2Dbottom%3A0%7D%7D%2Enav%2Dtabs%2Djustified%7Bborder%2Dbottom%3A0%7D%2Enav%2Dtabs%2Djustified%3Eli%3Ea%7Bmargin%2Dright%3A0%3Bborder%2Dradius%3A4px%7D%2Enav%2Dtabs%2Djustified%3E%2Eactive%3Ea%2C%2Enav%2Dtabs%2Djustified%3E%2Eactive%3Ea%3Afocus%2C%2Enav%2Dtabs%2Djustified%3E%2Eactive%3Ea%3Ahover%7Bborder%3A1px%20solid%20%23ddd%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Enav%2Dtabs%2Djustified%3Eli%3Ea%7Bborder%2Dbottom%3A1px%20solid%20%23ddd%3Bborder%2Dradius%3A4px%204px%200%200%7D%2Enav%2Dtabs%2Djustified%3E%2Eactive%3Ea%2C%2Enav%2Dtabs%2Djustified%3E%2Eactive%3Ea%3Afocus%2C%2Enav%2Dtabs%2Djustified%3E%2Eactive%3Ea%3Ahover%7Bborder%2Dbottom%2Dcolor%3A%23fff%7D%7D%2Etab%2Dcontent%3E%2Etab%2Dpane%7Bdisplay%3Anone%7D%2Etab%2Dcontent%3E%2Eactive%7Bdisplay%3Ablock%7D%2Enav%2Dtabs%20%2Edropdown%2Dmenu%7Bmargin%2Dtop%3A%2D1px%3Bborder%2Dtop%2Dleft%2Dradius%3A0%3Bborder%2Dtop%2Dright%2Dradius%3A0%7D%2Enavbar%7Bposition%3Arelative%3Bmin%2Dheight%3A50px%3Bmargin%2Dbottom%3A20px%3Bborder%3A1px%20solid%20transparent%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Enavbar%7Bborder%2Dradius%3A4px%7D%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Enavbar%2Dheader%7Bfloat%3Aleft%7D%7D%2Enavbar%2Dcollapse%7Bpadding%2Dright%3A15px%3Bpadding%2Dleft%3A15px%3Boverflow%2Dx%3Avisible%3B%2Dwebkit%2Doverflow%2Dscrolling%3Atouch%3Bborder%2Dtop%3A1px%20solid%20transparent%3B%2Dwebkit%2Dbox%2Dshadow%3Ainset%200%201px%200%20rgba%28255%2C255%2C255%2C%2E1%29%3Bbox%2Dshadow%3Ainset%200%201px%200%20rgba%28255%2C255%2C255%2C%2E1%29%7D%2Enavbar%2Dcollapse%2Ein%7Boverflow%2Dy%3Aauto%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Enavbar%2Dcollapse%7Bwidth%3Aauto%3Bborder%2Dtop%3A0%3B%2Dwebkit%2Dbox%2Dshadow%3Anone%3Bbox%2Dshadow%3Anone%7D%2Enavbar%2Dcollapse%2Ecollapse%7Bdisplay%3Ablock%21important%3Bheight%3Aauto%21important%3Bpadding%2Dbottom%3A0%3Boverflow%3Avisible%21important%7D%2Enavbar%2Dcollapse%2Ein%7Boverflow%2Dy%3Avisible%7D%2Enavbar%2Dfixed%2Dbottom%20%2Enavbar%2Dcollapse%2C%2Enavbar%2Dfixed%2Dtop%20%2Enavbar%2Dcollapse%2C%2Enavbar%2Dstatic%2Dtop%20%2Enavbar%2Dcollapse%7Bpadding%2Dright%3A0%3Bpadding%2Dleft%3A0%7D%7D%2Enavbar%2Dfixed%2Dbottom%20%2Enavbar%2Dcollapse%2C%2Enavbar%2Dfixed%2Dtop%20%2Enavbar%2Dcollapse%7Bmax%2Dheight%3A340px%7D%40media%20%28max%2Ddevice%2Dwidth%3A480px%29%20and%20%28orientation%3Alandscape%29%7B%2Enavbar%2Dfixed%2Dbottom%20%2Enavbar%2Dcollapse%2C%2Enavbar%2Dfixed%2Dtop%20%2Enavbar%2Dcollapse%7Bmax%2Dheight%3A200px%7D%7D%2Econtainer%2Dfluid%3E%2Enavbar%2Dcollapse%2C%2Econtainer%2Dfluid%3E%2Enavbar%2Dheader%2C%2Econtainer%3E%2Enavbar%2Dcollapse%2C%2Econtainer%3E%2Enavbar%2Dheader%7Bmargin%2Dright%3A%2D15px%3Bmargin%2Dleft%3A%2D15px%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Econtainer%2Dfluid%3E%2Enavbar%2Dcollapse%2C%2Econtainer%2Dfluid%3E%2Enavbar%2Dheader%2C%2Econtainer%3E%2Enavbar%2Dcollapse%2C%2Econtainer%3E%2Enavbar%2Dheader%7Bmargin%2Dright%3A0%3Bmargin%2Dleft%3A0%7D%7D%2Enavbar%2Dstatic%2Dtop%7Bz%2Dindex%3A1000%3Bborder%2Dwidth%3A0%200%201px%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Enavbar%2Dstatic%2Dtop%7Bborder%2Dradius%3A0%7D%7D%2Enavbar%2Dfixed%2Dbottom%2C%2Enavbar%2Dfixed%2Dtop%7Bposition%3Afixed%3Bright%3A0%3Bleft%3A0%3Bz%2Dindex%3A1030%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Enavbar%2Dfixed%2Dbottom%2C%2Enavbar%2Dfixed%2Dtop%7Bborder%2Dradius%3A0%7D%7D%2Enavbar%2Dfixed%2Dtop%7Btop%3A0%3Bborder%2Dwidth%3A0%200%201px%7D%2Enavbar%2Dfixed%2Dbottom%7Bbottom%3A0%3Bmargin%2Dbottom%3A0%3Bborder%2Dwidth%3A1px%200%200%7D%2Enavbar%2Dbrand%7Bfloat%3Aleft%3Bheight%3A50px%3Bpadding%3A15px%2015px%3Bfont%2Dsize%3A18px%3Bline%2Dheight%3A20px%7D%2Enavbar%2Dbrand%3Afocus%2C%2Enavbar%2Dbrand%3Ahover%7Btext%2Ddecoration%3Anone%7D%2Enavbar%2Dbrand%3Eimg%7Bdisplay%3Ablock%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Enavbar%3E%2Econtainer%20%2Enavbar%2Dbrand%2C%2Enavbar%3E%2Econtainer%2Dfluid%20%2Enavbar%2Dbrand%7Bmargin%2Dleft%3A%2D15px%7D%7D%2Enavbar%2Dtoggle%7Bposition%3Arelative%3Bfloat%3Aright%3Bpadding%3A9px%2010px%3Bmargin%2Dtop%3A8px%3Bmargin%2Dright%3A15px%3Bmargin%2Dbottom%3A8px%3Bbackground%2Dcolor%3Atransparent%3Bbackground%2Dimage%3Anone%3Bborder%3A1px%20solid%20transparent%3Bborder%2Dradius%3A4px%7D%2Enavbar%2Dtoggle%3Afocus%7Boutline%3A0%7D%2Enavbar%2Dtoggle%20%2Eicon%2Dbar%7Bdisplay%3Ablock%3Bwidth%3A22px%3Bheight%3A2px%3Bborder%2Dradius%3A1px%7D%2Enavbar%2Dtoggle%20%2Eicon%2Dbar%2B%2Eicon%2Dbar%7Bmargin%2Dtop%3A4px%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Enavbar%2Dtoggle%7Bdisplay%3Anone%7D%7D%2Enavbar%2Dnav%7Bmargin%3A7%2E5px%20%2D15px%7D%2Enavbar%2Dnav%3Eli%3Ea%7Bpadding%2Dtop%3A10px%3Bpadding%2Dbottom%3A10px%3Bline%2Dheight%3A20px%7D%40media%20%28max%2Dwidth%3A767px%29%7B%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%7Bposition%3Astatic%3Bfloat%3Anone%3Bwidth%3Aauto%3Bmargin%2Dtop%3A0%3Bbackground%2Dcolor%3Atransparent%3Bborder%3A0%3B%2Dwebkit%2Dbox%2Dshadow%3Anone%3Bbox%2Dshadow%3Anone%7D%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%20%2Edropdown%2Dheader%2C%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3Eli%3Ea%7Bpadding%3A5px%2015px%205px%2025px%7D%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3Eli%3Ea%7Bline%2Dheight%3A20px%7D%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3Eli%3Ea%3Afocus%2C%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3Eli%3Ea%3Ahover%7Bbackground%2Dimage%3Anone%7D%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Enavbar%2Dnav%7Bfloat%3Aleft%3Bmargin%3A0%7D%2Enavbar%2Dnav%3Eli%7Bfloat%3Aleft%7D%2Enavbar%2Dnav%3Eli%3Ea%7Bpadding%2Dtop%3A15px%3Bpadding%2Dbottom%3A15px%7D%7D%2Enavbar%2Dform%7Bpadding%3A10px%2015px%3Bmargin%2Dtop%3A8px%3Bmargin%2Dright%3A%2D15px%3Bmargin%2Dbottom%3A8px%3Bmargin%2Dleft%3A%2D15px%3Bborder%2Dtop%3A1px%20solid%20transparent%3Bborder%2Dbottom%3A1px%20solid%20transparent%3B%2Dwebkit%2Dbox%2Dshadow%3Ainset%200%201px%200%20rgba%28255%2C255%2C255%2C%2E1%29%2C0%201px%200%20rgba%28255%2C255%2C255%2C%2E1%29%3Bbox%2Dshadow%3Ainset%200%201px%200%20rgba%28255%2C255%2C255%2C%2E1%29%2C0%201px%200%20rgba%28255%2C255%2C255%2C%2E1%29%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Enavbar%2Dform%20%2Eform%2Dgroup%7Bdisplay%3Ainline%2Dblock%3Bmargin%2Dbottom%3A0%3Bvertical%2Dalign%3Amiddle%7D%2Enavbar%2Dform%20%2Eform%2Dcontrol%7Bdisplay%3Ainline%2Dblock%3Bwidth%3Aauto%3Bvertical%2Dalign%3Amiddle%7D%2Enavbar%2Dform%20%2Eform%2Dcontrol%2Dstatic%7Bdisplay%3Ainline%2Dblock%7D%2Enavbar%2Dform%20%2Einput%2Dgroup%7Bdisplay%3Ainline%2Dtable%3Bvertical%2Dalign%3Amiddle%7D%2Enavbar%2Dform%20%2Einput%2Dgroup%20%2Eform%2Dcontrol%2C%2Enavbar%2Dform%20%2Einput%2Dgroup%20%2Einput%2Dgroup%2Daddon%2C%2Enavbar%2Dform%20%2Einput%2Dgroup%20%2Einput%2Dgroup%2Dbtn%7Bwidth%3Aauto%7D%2Enavbar%2Dform%20%2Einput%2Dgroup%3E%2Eform%2Dcontrol%7Bwidth%3A100%25%7D%2Enavbar%2Dform%20%2Econtrol%2Dlabel%7Bmargin%2Dbottom%3A0%3Bvertical%2Dalign%3Amiddle%7D%2Enavbar%2Dform%20%2Echeckbox%2C%2Enavbar%2Dform%20%2Eradio%7Bdisplay%3Ainline%2Dblock%3Bmargin%2Dtop%3A0%3Bmargin%2Dbottom%3A0%3Bvertical%2Dalign%3Amiddle%7D%2Enavbar%2Dform%20%2Echeckbox%20label%2C%2Enavbar%2Dform%20%2Eradio%20label%7Bpadding%2Dleft%3A0%7D%2Enavbar%2Dform%20%2Echeckbox%20input%5Btype%3Dcheckbox%5D%2C%2Enavbar%2Dform%20%2Eradio%20input%5Btype%3Dradio%5D%7Bposition%3Arelative%3Bmargin%2Dleft%3A0%7D%2Enavbar%2Dform%20%2Ehas%2Dfeedback%20%2Eform%2Dcontrol%2Dfeedback%7Btop%3A0%7D%7D%40media%20%28max%2Dwidth%3A767px%29%7B%2Enavbar%2Dform%20%2Eform%2Dgroup%7Bmargin%2Dbottom%3A5px%7D%2Enavbar%2Dform%20%2Eform%2Dgroup%3Alast%2Dchild%7Bmargin%2Dbottom%3A0%7D%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Enavbar%2Dform%7Bwidth%3Aauto%3Bpadding%2Dtop%3A0%3Bpadding%2Dbottom%3A0%3Bmargin%2Dright%3A0%3Bmargin%2Dleft%3A0%3Bborder%3A0%3B%2Dwebkit%2Dbox%2Dshadow%3Anone%3Bbox%2Dshadow%3Anone%7D%7D%2Enavbar%2Dnav%3Eli%3E%2Edropdown%2Dmenu%7Bmargin%2Dtop%3A0%3Bborder%2Dtop%2Dleft%2Dradius%3A0%3Bborder%2Dtop%2Dright%2Dradius%3A0%7D%2Enavbar%2Dfixed%2Dbottom%20%2Enavbar%2Dnav%3Eli%3E%2Edropdown%2Dmenu%7Bmargin%2Dbottom%3A0%3Bborder%2Dtop%2Dleft%2Dradius%3A4px%3Bborder%2Dtop%2Dright%2Dradius%3A4px%3Bborder%2Dbottom%2Dright%2Dradius%3A0%3Bborder%2Dbottom%2Dleft%2Dradius%3A0%7D%2Enavbar%2Dbtn%7Bmargin%2Dtop%3A8px%3Bmargin%2Dbottom%3A8px%7D%2Enavbar%2Dbtn%2Ebtn%2Dsm%7Bmargin%2Dtop%3A10px%3Bmargin%2Dbottom%3A10px%7D%2Enavbar%2Dbtn%2Ebtn%2Dxs%7Bmargin%2Dtop%3A14px%3Bmargin%2Dbottom%3A14px%7D%2Enavbar%2Dtext%7Bmargin%2Dtop%3A15px%3Bmargin%2Dbottom%3A15px%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Enavbar%2Dtext%7Bfloat%3Aleft%3Bmargin%2Dright%3A15px%3Bmargin%2Dleft%3A15px%7D%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Enavbar%2Dleft%7Bfloat%3Aleft%21important%7D%2Enavbar%2Dright%7Bfloat%3Aright%21important%3Bmargin%2Dright%3A%2D15px%7D%2Enavbar%2Dright%7E%2Enavbar%2Dright%7Bmargin%2Dright%3A0%7D%7D%2Enavbar%2Ddefault%7Bbackground%2Dcolor%3A%23f8f8f8%3Bborder%2Dcolor%3A%23e7e7e7%7D%2Enavbar%2Ddefault%20%2Enavbar%2Dbrand%7Bcolor%3A%23777%7D%2Enavbar%2Ddefault%20%2Enavbar%2Dbrand%3Afocus%2C%2Enavbar%2Ddefault%20%2Enavbar%2Dbrand%3Ahover%7Bcolor%3A%235e5e5e%3Bbackground%2Dcolor%3Atransparent%7D%2Enavbar%2Ddefault%20%2Enavbar%2Dtext%7Bcolor%3A%23777%7D%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%3Eli%3Ea%7Bcolor%3A%23777%7D%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%3Eli%3Ea%3Afocus%2C%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%3Eli%3Ea%3Ahover%7Bcolor%3A%23333%3Bbackground%2Dcolor%3Atransparent%7D%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%3E%2Eactive%3Ea%2C%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%3E%2Eactive%3Ea%3Afocus%2C%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%3E%2Eactive%3Ea%3Ahover%7Bcolor%3A%23555%3Bbackground%2Dcolor%3A%23e7e7e7%7D%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%3E%2Edisabled%3Ea%2C%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%3E%2Edisabled%3Ea%3Afocus%2C%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%3E%2Edisabled%3Ea%3Ahover%7Bcolor%3A%23ccc%3Bbackground%2Dcolor%3Atransparent%7D%2Enavbar%2Ddefault%20%2Enavbar%2Dtoggle%7Bborder%2Dcolor%3A%23ddd%7D%2Enavbar%2Ddefault%20%2Enavbar%2Dtoggle%3Afocus%2C%2Enavbar%2Ddefault%20%2Enavbar%2Dtoggle%3Ahover%7Bbackground%2Dcolor%3A%23ddd%7D%2Enavbar%2Ddefault%20%2Enavbar%2Dtoggle%20%2Eicon%2Dbar%7Bbackground%2Dcolor%3A%23888%7D%2Enavbar%2Ddefault%20%2Enavbar%2Dcollapse%2C%2Enavbar%2Ddefault%20%2Enavbar%2Dform%7Bborder%2Dcolor%3A%23e7e7e7%7D%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%3E%2Eopen%3Ea%2C%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%3E%2Eopen%3Ea%3Afocus%2C%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%3E%2Eopen%3Ea%3Ahover%7Bcolor%3A%23555%3Bbackground%2Dcolor%3A%23e7e7e7%7D%40media%20%28max%2Dwidth%3A767px%29%7B%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3Eli%3Ea%7Bcolor%3A%23777%7D%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3Eli%3Ea%3Afocus%2C%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3Eli%3Ea%3Ahover%7Bcolor%3A%23333%3Bbackground%2Dcolor%3Atransparent%7D%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3E%2Eactive%3Ea%2C%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3E%2Eactive%3Ea%3Afocus%2C%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3E%2Eactive%3Ea%3Ahover%7Bcolor%3A%23555%3Bbackground%2Dcolor%3A%23e7e7e7%7D%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3E%2Edisabled%3Ea%2C%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3E%2Edisabled%3Ea%3Afocus%2C%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3E%2Edisabled%3Ea%3Ahover%7Bcolor%3A%23ccc%3Bbackground%2Dcolor%3Atransparent%7D%7D%2Enavbar%2Ddefault%20%2Enavbar%2Dlink%7Bcolor%3A%23777%7D%2Enavbar%2Ddefault%20%2Enavbar%2Dlink%3Ahover%7Bcolor%3A%23333%7D%2Enavbar%2Ddefault%20%2Ebtn%2Dlink%7Bcolor%3A%23777%7D%2Enavbar%2Ddefault%20%2Ebtn%2Dlink%3Afocus%2C%2Enavbar%2Ddefault%20%2Ebtn%2Dlink%3Ahover%7Bcolor%3A%23333%7D%2Enavbar%2Ddefault%20%2Ebtn%2Dlink%5Bdisabled%5D%3Afocus%2C%2Enavbar%2Ddefault%20%2Ebtn%2Dlink%5Bdisabled%5D%3Ahover%2Cfieldset%5Bdisabled%5D%20%2Enavbar%2Ddefault%20%2Ebtn%2Dlink%3Afocus%2Cfieldset%5Bdisabled%5D%20%2Enavbar%2Ddefault%20%2Ebtn%2Dlink%3Ahover%7Bcolor%3A%23ccc%7D%2Enavbar%2Dinverse%7Bbackground%2Dcolor%3A%23222%3Bborder%2Dcolor%3A%23080808%7D%2Enavbar%2Dinverse%20%2Enavbar%2Dbrand%7Bcolor%3A%239d9d9d%7D%2Enavbar%2Dinverse%20%2Enavbar%2Dbrand%3Afocus%2C%2Enavbar%2Dinverse%20%2Enavbar%2Dbrand%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3Atransparent%7D%2Enavbar%2Dinverse%20%2Enavbar%2Dtext%7Bcolor%3A%239d9d9d%7D%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%3Eli%3Ea%7Bcolor%3A%239d9d9d%7D%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%3Eli%3Ea%3Afocus%2C%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%3Eli%3Ea%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3Atransparent%7D%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%3E%2Eactive%3Ea%2C%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%3E%2Eactive%3Ea%3Afocus%2C%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%3E%2Eactive%3Ea%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23080808%7D%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%3E%2Edisabled%3Ea%2C%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%3E%2Edisabled%3Ea%3Afocus%2C%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%3E%2Edisabled%3Ea%3Ahover%7Bcolor%3A%23444%3Bbackground%2Dcolor%3Atransparent%7D%2Enavbar%2Dinverse%20%2Enavbar%2Dtoggle%7Bborder%2Dcolor%3A%23333%7D%2Enavbar%2Dinverse%20%2Enavbar%2Dtoggle%3Afocus%2C%2Enavbar%2Dinverse%20%2Enavbar%2Dtoggle%3Ahover%7Bbackground%2Dcolor%3A%23333%7D%2Enavbar%2Dinverse%20%2Enavbar%2Dtoggle%20%2Eicon%2Dbar%7Bbackground%2Dcolor%3A%23fff%7D%2Enavbar%2Dinverse%20%2Enavbar%2Dcollapse%2C%2Enavbar%2Dinverse%20%2Enavbar%2Dform%7Bborder%2Dcolor%3A%23101010%7D%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%3E%2Eopen%3Ea%2C%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%3E%2Eopen%3Ea%3Afocus%2C%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%3E%2Eopen%3Ea%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23080808%7D%40media%20%28max%2Dwidth%3A767px%29%7B%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3E%2Edropdown%2Dheader%7Bborder%2Dcolor%3A%23080808%7D%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%20%2Edivider%7Bbackground%2Dcolor%3A%23080808%7D%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3Eli%3Ea%7Bcolor%3A%239d9d9d%7D%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3Eli%3Ea%3Afocus%2C%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3Eli%3Ea%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3Atransparent%7D%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3E%2Eactive%3Ea%2C%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3E%2Eactive%3Ea%3Afocus%2C%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3E%2Eactive%3Ea%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23080808%7D%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3E%2Edisabled%3Ea%2C%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3E%2Edisabled%3Ea%3Afocus%2C%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3E%2Edisabled%3Ea%3Ahover%7Bcolor%3A%23444%3Bbackground%2Dcolor%3Atransparent%7D%7D%2Enavbar%2Dinverse%20%2Enavbar%2Dlink%7Bcolor%3A%239d9d9d%7D%2Enavbar%2Dinverse%20%2Enavbar%2Dlink%3Ahover%7Bcolor%3A%23fff%7D%2Enavbar%2Dinverse%20%2Ebtn%2Dlink%7Bcolor%3A%239d9d9d%7D%2Enavbar%2Dinverse%20%2Ebtn%2Dlink%3Afocus%2C%2Enavbar%2Dinverse%20%2Ebtn%2Dlink%3Ahover%7Bcolor%3A%23fff%7D%2Enavbar%2Dinverse%20%2Ebtn%2Dlink%5Bdisabled%5D%3Afocus%2C%2Enavbar%2Dinverse%20%2Ebtn%2Dlink%5Bdisabled%5D%3Ahover%2Cfieldset%5Bdisabled%5D%20%2Enavbar%2Dinverse%20%2Ebtn%2Dlink%3Afocus%2Cfieldset%5Bdisabled%5D%20%2Enavbar%2Dinverse%20%2Ebtn%2Dlink%3Ahover%7Bcolor%3A%23444%7D%2Ebreadcrumb%7Bpadding%3A8px%2015px%3Bmargin%2Dbottom%3A20px%3Blist%2Dstyle%3Anone%3Bbackground%2Dcolor%3A%23f5f5f5%3Bborder%2Dradius%3A4px%7D%2Ebreadcrumb%3Eli%7Bdisplay%3Ainline%2Dblock%7D%2Ebreadcrumb%3Eli%2Bli%3Abefore%7Bpadding%3A0%205px%3Bcolor%3A%23ccc%3Bcontent%3A%22%2F%5C00a0%22%7D%2Ebreadcrumb%3E%2Eactive%7Bcolor%3A%23777%7D%2Epagination%7Bdisplay%3Ainline%2Dblock%3Bpadding%2Dleft%3A0%3Bmargin%3A20px%200%3Bborder%2Dradius%3A4px%7D%2Epagination%3Eli%7Bdisplay%3Ainline%7D%2Epagination%3Eli%3Ea%2C%2Epagination%3Eli%3Espan%7Bposition%3Arelative%3Bfloat%3Aleft%3Bpadding%3A6px%2012px%3Bmargin%2Dleft%3A%2D1px%3Bline%2Dheight%3A1%2E42857143%3Bcolor%3A%23337ab7%3Btext%2Ddecoration%3Anone%3Bbackground%2Dcolor%3A%23fff%3Bborder%3A1px%20solid%20%23ddd%7D%2Epagination%3Eli%3Afirst%2Dchild%3Ea%2C%2Epagination%3Eli%3Afirst%2Dchild%3Espan%7Bmargin%2Dleft%3A0%3Bborder%2Dtop%2Dleft%2Dradius%3A4px%3Bborder%2Dbottom%2Dleft%2Dradius%3A4px%7D%2Epagination%3Eli%3Alast%2Dchild%3Ea%2C%2Epagination%3Eli%3Alast%2Dchild%3Espan%7Bborder%2Dtop%2Dright%2Dradius%3A4px%3Bborder%2Dbottom%2Dright%2Dradius%3A4px%7D%2Epagination%3Eli%3Ea%3Afocus%2C%2Epagination%3Eli%3Ea%3Ahover%2C%2Epagination%3Eli%3Espan%3Afocus%2C%2Epagination%3Eli%3Espan%3Ahover%7Bz%2Dindex%3A3%3Bcolor%3A%2323527c%3Bbackground%2Dcolor%3A%23eee%3Bborder%2Dcolor%3A%23ddd%7D%2Epagination%3E%2Eactive%3Ea%2C%2Epagination%3E%2Eactive%3Ea%3Afocus%2C%2Epagination%3E%2Eactive%3Ea%3Ahover%2C%2Epagination%3E%2Eactive%3Espan%2C%2Epagination%3E%2Eactive%3Espan%3Afocus%2C%2Epagination%3E%2Eactive%3Espan%3Ahover%7Bz%2Dindex%3A2%3Bcolor%3A%23fff%3Bcursor%3Adefault%3Bbackground%2Dcolor%3A%23337ab7%3Bborder%2Dcolor%3A%23337ab7%7D%2Epagination%3E%2Edisabled%3Ea%2C%2Epagination%3E%2Edisabled%3Ea%3Afocus%2C%2Epagination%3E%2Edisabled%3Ea%3Ahover%2C%2Epagination%3E%2Edisabled%3Espan%2C%2Epagination%3E%2Edisabled%3Espan%3Afocus%2C%2Epagination%3E%2Edisabled%3Espan%3Ahover%7Bcolor%3A%23777%3Bcursor%3Anot%2Dallowed%3Bbackground%2Dcolor%3A%23fff%3Bborder%2Dcolor%3A%23ddd%7D%2Epagination%2Dlg%3Eli%3Ea%2C%2Epagination%2Dlg%3Eli%3Espan%7Bpadding%3A10px%2016px%3Bfont%2Dsize%3A18px%3Bline%2Dheight%3A1%2E3333333%7D%2Epagination%2Dlg%3Eli%3Afirst%2Dchild%3Ea%2C%2Epagination%2Dlg%3Eli%3Afirst%2Dchild%3Espan%7Bborder%2Dtop%2Dleft%2Dradius%3A6px%3Bborder%2Dbottom%2Dleft%2Dradius%3A6px%7D%2Epagination%2Dlg%3Eli%3Alast%2Dchild%3Ea%2C%2Epagination%2Dlg%3Eli%3Alast%2Dchild%3Espan%7Bborder%2Dtop%2Dright%2Dradius%3A6px%3Bborder%2Dbottom%2Dright%2Dradius%3A6px%7D%2Epagination%2Dsm%3Eli%3Ea%2C%2Epagination%2Dsm%3Eli%3Espan%7Bpadding%3A5px%2010px%3Bfont%2Dsize%3A12px%3Bline%2Dheight%3A1%2E5%7D%2Epagination%2Dsm%3Eli%3Afirst%2Dchild%3Ea%2C%2Epagination%2Dsm%3Eli%3Afirst%2Dchild%3Espan%7Bborder%2Dtop%2Dleft%2Dradius%3A3px%3Bborder%2Dbottom%2Dleft%2Dradius%3A3px%7D%2Epagination%2Dsm%3Eli%3Alast%2Dchild%3Ea%2C%2Epagination%2Dsm%3Eli%3Alast%2Dchild%3Espan%7Bborder%2Dtop%2Dright%2Dradius%3A3px%3Bborder%2Dbottom%2Dright%2Dradius%3A3px%7D%2Epager%7Bpadding%2Dleft%3A0%3Bmargin%3A20px%200%3Btext%2Dalign%3Acenter%3Blist%2Dstyle%3Anone%7D%2Epager%20li%7Bdisplay%3Ainline%7D%2Epager%20li%3Ea%2C%2Epager%20li%3Espan%7Bdisplay%3Ainline%2Dblock%3Bpadding%3A5px%2014px%3Bbackground%2Dcolor%3A%23fff%3Bborder%3A1px%20solid%20%23ddd%3Bborder%2Dradius%3A15px%7D%2Epager%20li%3Ea%3Afocus%2C%2Epager%20li%3Ea%3Ahover%7Btext%2Ddecoration%3Anone%3Bbackground%2Dcolor%3A%23eee%7D%2Epager%20%2Enext%3Ea%2C%2Epager%20%2Enext%3Espan%7Bfloat%3Aright%7D%2Epager%20%2Eprevious%3Ea%2C%2Epager%20%2Eprevious%3Espan%7Bfloat%3Aleft%7D%2Epager%20%2Edisabled%3Ea%2C%2Epager%20%2Edisabled%3Ea%3Afocus%2C%2Epager%20%2Edisabled%3Ea%3Ahover%2C%2Epager%20%2Edisabled%3Espan%7Bcolor%3A%23777%3Bcursor%3Anot%2Dallowed%3Bbackground%2Dcolor%3A%23fff%7D%2Elabel%7Bdisplay%3Ainline%3Bpadding%3A%2E2em%20%2E6em%20%2E3em%3Bfont%2Dsize%3A75%25%3Bfont%2Dweight%3A700%3Bline%2Dheight%3A1%3Bcolor%3A%23fff%3Btext%2Dalign%3Acenter%3Bwhite%2Dspace%3Anowrap%3Bvertical%2Dalign%3Abaseline%3Bborder%2Dradius%3A%2E25em%7Da%2Elabel%3Afocus%2Ca%2Elabel%3Ahover%7Bcolor%3A%23fff%3Btext%2Ddecoration%3Anone%3Bcursor%3Apointer%7D%2Elabel%3Aempty%7Bdisplay%3Anone%7D%2Ebtn%20%2Elabel%7Bposition%3Arelative%3Btop%3A%2D1px%7D%2Elabel%2Ddefault%7Bbackground%2Dcolor%3A%23777%7D%2Elabel%2Ddefault%5Bhref%5D%3Afocus%2C%2Elabel%2Ddefault%5Bhref%5D%3Ahover%7Bbackground%2Dcolor%3A%235e5e5e%7D%2Elabel%2Dprimary%7Bbackground%2Dcolor%3A%23337ab7%7D%2Elabel%2Dprimary%5Bhref%5D%3Afocus%2C%2Elabel%2Dprimary%5Bhref%5D%3Ahover%7Bbackground%2Dcolor%3A%23286090%7D%2Elabel%2Dsuccess%7Bbackground%2Dcolor%3A%235cb85c%7D%2Elabel%2Dsuccess%5Bhref%5D%3Afocus%2C%2Elabel%2Dsuccess%5Bhref%5D%3Ahover%7Bbackground%2Dcolor%3A%23449d44%7D%2Elabel%2Dinfo%7Bbackground%2Dcolor%3A%235bc0de%7D%2Elabel%2Dinfo%5Bhref%5D%3Afocus%2C%2Elabel%2Dinfo%5Bhref%5D%3Ahover%7Bbackground%2Dcolor%3A%2331b0d5%7D%2Elabel%2Dwarning%7Bbackground%2Dcolor%3A%23f0ad4e%7D%2Elabel%2Dwarning%5Bhref%5D%3Afocus%2C%2Elabel%2Dwarning%5Bhref%5D%3Ahover%7Bbackground%2Dcolor%3A%23ec971f%7D%2Elabel%2Ddanger%7Bbackground%2Dcolor%3A%23d9534f%7D%2Elabel%2Ddanger%5Bhref%5D%3Afocus%2C%2Elabel%2Ddanger%5Bhref%5D%3Ahover%7Bbackground%2Dcolor%3A%23c9302c%7D%2Ebadge%7Bdisplay%3Ainline%2Dblock%3Bmin%2Dwidth%3A10px%3Bpadding%3A3px%207px%3Bfont%2Dsize%3A12px%3Bfont%2Dweight%3A700%3Bline%2Dheight%3A1%3Bcolor%3A%23fff%3Btext%2Dalign%3Acenter%3Bwhite%2Dspace%3Anowrap%3Bvertical%2Dalign%3Amiddle%3Bbackground%2Dcolor%3A%23777%3Bborder%2Dradius%3A10px%7D%2Ebadge%3Aempty%7Bdisplay%3Anone%7D%2Ebtn%20%2Ebadge%7Bposition%3Arelative%3Btop%3A%2D1px%7D%2Ebtn%2Dgroup%2Dxs%3E%2Ebtn%20%2Ebadge%2C%2Ebtn%2Dxs%20%2Ebadge%7Btop%3A0%3Bpadding%3A1px%205px%7Da%2Ebadge%3Afocus%2Ca%2Ebadge%3Ahover%7Bcolor%3A%23fff%3Btext%2Ddecoration%3Anone%3Bcursor%3Apointer%7D%2Elist%2Dgroup%2Ditem%2Eactive%3E%2Ebadge%2C%2Enav%2Dpills%3E%2Eactive%3Ea%3E%2Ebadge%7Bcolor%3A%23337ab7%3Bbackground%2Dcolor%3A%23fff%7D%2Elist%2Dgroup%2Ditem%3E%2Ebadge%7Bfloat%3Aright%7D%2Elist%2Dgroup%2Ditem%3E%2Ebadge%2B%2Ebadge%7Bmargin%2Dright%3A5px%7D%2Enav%2Dpills%3Eli%3Ea%3E%2Ebadge%7Bmargin%2Dleft%3A3px%7D%2Ejumbotron%7Bpadding%2Dtop%3A30px%3Bpadding%2Dbottom%3A30px%3Bmargin%2Dbottom%3A30px%3Bcolor%3Ainherit%3Bbackground%2Dcolor%3A%23eee%7D%2Ejumbotron%20%2Eh1%2C%2Ejumbotron%20h1%7Bcolor%3Ainherit%7D%2Ejumbotron%20p%7Bmargin%2Dbottom%3A15px%3Bfont%2Dsize%3A21px%3Bfont%2Dweight%3A200%7D%2Ejumbotron%3Ehr%7Bborder%2Dtop%2Dcolor%3A%23d5d5d5%7D%2Econtainer%20%2Ejumbotron%2C%2Econtainer%2Dfluid%20%2Ejumbotron%7Bborder%2Dradius%3A6px%7D%2Ejumbotron%20%2Econtainer%7Bmax%2Dwidth%3A100%25%7D%40media%20screen%20and%20%28min%2Dwidth%3A768px%29%7B%2Ejumbotron%7Bpadding%2Dtop%3A48px%3Bpadding%2Dbottom%3A48px%7D%2Econtainer%20%2Ejumbotron%2C%2Econtainer%2Dfluid%20%2Ejumbotron%7Bpadding%2Dright%3A60px%3Bpadding%2Dleft%3A60px%7D%2Ejumbotron%20%2Eh1%2C%2Ejumbotron%20h1%7Bfont%2Dsize%3A63px%7D%7D%2Ethumbnail%7Bdisplay%3Ablock%3Bpadding%3A4px%3Bmargin%2Dbottom%3A20px%3Bline%2Dheight%3A1%2E42857143%3Bbackground%2Dcolor%3A%23fff%3Bborder%3A1px%20solid%20%23ddd%3Bborder%2Dradius%3A4px%3B%2Dwebkit%2Dtransition%3Aborder%20%2E2s%20ease%2Din%2Dout%3B%2Do%2Dtransition%3Aborder%20%2E2s%20ease%2Din%2Dout%3Btransition%3Aborder%20%2E2s%20ease%2Din%2Dout%7D%2Ethumbnail%20a%3Eimg%2C%2Ethumbnail%3Eimg%7Bmargin%2Dright%3Aauto%3Bmargin%2Dleft%3Aauto%7Da%2Ethumbnail%2Eactive%2Ca%2Ethumbnail%3Afocus%2Ca%2Ethumbnail%3Ahover%7Bborder%2Dcolor%3A%23337ab7%7D%2Ethumbnail%20%2Ecaption%7Bpadding%3A9px%3Bcolor%3A%23333%7D%2Ealert%7Bpadding%3A15px%3Bmargin%2Dbottom%3A20px%3Bborder%3A1px%20solid%20transparent%3Bborder%2Dradius%3A4px%7D%2Ealert%20h4%7Bmargin%2Dtop%3A0%3Bcolor%3Ainherit%7D%2Ealert%20%2Ealert%2Dlink%7Bfont%2Dweight%3A700%7D%2Ealert%3Ep%2C%2Ealert%3Eul%7Bmargin%2Dbottom%3A0%7D%2Ealert%3Ep%2Bp%7Bmargin%2Dtop%3A5px%7D%2Ealert%2Ddismissable%2C%2Ealert%2Ddismissible%7Bpadding%2Dright%3A35px%7D%2Ealert%2Ddismissable%20%2Eclose%2C%2Ealert%2Ddismissible%20%2Eclose%7Bposition%3Arelative%3Btop%3A%2D2px%3Bright%3A%2D21px%3Bcolor%3Ainherit%7D%2Ealert%2Dsuccess%7Bcolor%3A%233c763d%3Bbackground%2Dcolor%3A%23dff0d8%3Bborder%2Dcolor%3A%23d6e9c6%7D%2Ealert%2Dsuccess%20hr%7Bborder%2Dtop%2Dcolor%3A%23c9e2b3%7D%2Ealert%2Dsuccess%20%2Ealert%2Dlink%7Bcolor%3A%232b542c%7D%2Ealert%2Dinfo%7Bcolor%3A%2331708f%3Bbackground%2Dcolor%3A%23d9edf7%3Bborder%2Dcolor%3A%23bce8f1%7D%2Ealert%2Dinfo%20hr%7Bborder%2Dtop%2Dcolor%3A%23a6e1ec%7D%2Ealert%2Dinfo%20%2Ealert%2Dlink%7Bcolor%3A%23245269%7D%2Ealert%2Dwarning%7Bcolor%3A%238a6d3b%3Bbackground%2Dcolor%3A%23fcf8e3%3Bborder%2Dcolor%3A%23faebcc%7D%2Ealert%2Dwarning%20hr%7Bborder%2Dtop%2Dcolor%3A%23f7e1b5%7D%2Ealert%2Dwarning%20%2Ealert%2Dlink%7Bcolor%3A%2366512c%7D%2Ealert%2Ddanger%7Bcolor%3A%23a94442%3Bbackground%2Dcolor%3A%23f2dede%3Bborder%2Dcolor%3A%23ebccd1%7D%2Ealert%2Ddanger%20hr%7Bborder%2Dtop%2Dcolor%3A%23e4b9c0%7D%2Ealert%2Ddanger%20%2Ealert%2Dlink%7Bcolor%3A%23843534%7D%40%2Dwebkit%2Dkeyframes%20progress%2Dbar%2Dstripes%7Bfrom%7Bbackground%2Dposition%3A40px%200%7Dto%7Bbackground%2Dposition%3A0%200%7D%7D%40%2Do%2Dkeyframes%20progress%2Dbar%2Dstripes%7Bfrom%7Bbackground%2Dposition%3A40px%200%7Dto%7Bbackground%2Dposition%3A0%200%7D%7D%40keyframes%20progress%2Dbar%2Dstripes%7Bfrom%7Bbackground%2Dposition%3A40px%200%7Dto%7Bbackground%2Dposition%3A0%200%7D%7D%2Eprogress%7Bheight%3A20px%3Bmargin%2Dbottom%3A20px%3Boverflow%3Ahidden%3Bbackground%2Dcolor%3A%23f5f5f5%3Bborder%2Dradius%3A4px%3B%2Dwebkit%2Dbox%2Dshadow%3Ainset%200%201px%202px%20rgba%280%2C0%2C0%2C%2E1%29%3Bbox%2Dshadow%3Ainset%200%201px%202px%20rgba%280%2C0%2C0%2C%2E1%29%7D%2Eprogress%2Dbar%7Bfloat%3Aleft%3Bwidth%3A0%3Bheight%3A100%25%3Bfont%2Dsize%3A12px%3Bline%2Dheight%3A20px%3Bcolor%3A%23fff%3Btext%2Dalign%3Acenter%3Bbackground%2Dcolor%3A%23337ab7%3B%2Dwebkit%2Dbox%2Dshadow%3Ainset%200%20%2D1px%200%20rgba%280%2C0%2C0%2C%2E15%29%3Bbox%2Dshadow%3Ainset%200%20%2D1px%200%20rgba%280%2C0%2C0%2C%2E15%29%3B%2Dwebkit%2Dtransition%3Awidth%20%2E6s%20ease%3B%2Do%2Dtransition%3Awidth%20%2E6s%20ease%3Btransition%3Awidth%20%2E6s%20ease%7D%2Eprogress%2Dbar%2Dstriped%2C%2Eprogress%2Dstriped%20%2Eprogress%2Dbar%7Bbackground%2Dimage%3A%2Dwebkit%2Dlinear%2Dgradient%2845deg%2Crgba%28255%2C255%2C255%2C%2E15%29%2025%25%2Ctransparent%2025%25%2Ctransparent%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2075%25%2Ctransparent%2075%25%2Ctransparent%29%3Bbackground%2Dimage%3A%2Do%2Dlinear%2Dgradient%2845deg%2Crgba%28255%2C255%2C255%2C%2E15%29%2025%25%2Ctransparent%2025%25%2Ctransparent%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2075%25%2Ctransparent%2075%25%2Ctransparent%29%3Bbackground%2Dimage%3Alinear%2Dgradient%2845deg%2Crgba%28255%2C255%2C255%2C%2E15%29%2025%25%2Ctransparent%2025%25%2Ctransparent%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2075%25%2Ctransparent%2075%25%2Ctransparent%29%3B%2Dwebkit%2Dbackground%2Dsize%3A40px%2040px%3Bbackground%2Dsize%3A40px%2040px%7D%2Eprogress%2Dbar%2Eactive%2C%2Eprogress%2Eactive%20%2Eprogress%2Dbar%7B%2Dwebkit%2Danimation%3Aprogress%2Dbar%2Dstripes%202s%20linear%20infinite%3B%2Do%2Danimation%3Aprogress%2Dbar%2Dstripes%202s%20linear%20infinite%3Banimation%3Aprogress%2Dbar%2Dstripes%202s%20linear%20infinite%7D%2Eprogress%2Dbar%2Dsuccess%7Bbackground%2Dcolor%3A%235cb85c%7D%2Eprogress%2Dstriped%20%2Eprogress%2Dbar%2Dsuccess%7Bbackground%2Dimage%3A%2Dwebkit%2Dlinear%2Dgradient%2845deg%2Crgba%28255%2C255%2C255%2C%2E15%29%2025%25%2Ctransparent%2025%25%2Ctransparent%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2075%25%2Ctransparent%2075%25%2Ctransparent%29%3Bbackground%2Dimage%3A%2Do%2Dlinear%2Dgradient%2845deg%2Crgba%28255%2C255%2C255%2C%2E15%29%2025%25%2Ctransparent%2025%25%2Ctransparent%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2075%25%2Ctransparent%2075%25%2Ctransparent%29%3Bbackground%2Dimage%3Alinear%2Dgradient%2845deg%2Crgba%28255%2C255%2C255%2C%2E15%29%2025%25%2Ctransparent%2025%25%2Ctransparent%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2075%25%2Ctransparent%2075%25%2Ctransparent%29%7D%2Eprogress%2Dbar%2Dinfo%7Bbackground%2Dcolor%3A%235bc0de%7D%2Eprogress%2Dstriped%20%2Eprogress%2Dbar%2Dinfo%7Bbackground%2Dimage%3A%2Dwebkit%2Dlinear%2Dgradient%2845deg%2Crgba%28255%2C255%2C255%2C%2E15%29%2025%25%2Ctransparent%2025%25%2Ctransparent%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2075%25%2Ctransparent%2075%25%2Ctransparent%29%3Bbackground%2Dimage%3A%2Do%2Dlinear%2Dgradient%2845deg%2Crgba%28255%2C255%2C255%2C%2E15%29%2025%25%2Ctransparent%2025%25%2Ctransparent%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2075%25%2Ctransparent%2075%25%2Ctransparent%29%3Bbackground%2Dimage%3Alinear%2Dgradient%2845deg%2Crgba%28255%2C255%2C255%2C%2E15%29%2025%25%2Ctransparent%2025%25%2Ctransparent%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2075%25%2Ctransparent%2075%25%2Ctransparent%29%7D%2Eprogress%2Dbar%2Dwarning%7Bbackground%2Dcolor%3A%23f0ad4e%7D%2Eprogress%2Dstriped%20%2Eprogress%2Dbar%2Dwarning%7Bbackground%2Dimage%3A%2Dwebkit%2Dlinear%2Dgradient%2845deg%2Crgba%28255%2C255%2C255%2C%2E15%29%2025%25%2Ctransparent%2025%25%2Ctransparent%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2075%25%2Ctransparent%2075%25%2Ctransparent%29%3Bbackground%2Dimage%3A%2Do%2Dlinear%2Dgradient%2845deg%2Crgba%28255%2C255%2C255%2C%2E15%29%2025%25%2Ctransparent%2025%25%2Ctransparent%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2075%25%2Ctransparent%2075%25%2Ctransparent%29%3Bbackground%2Dimage%3Alinear%2Dgradient%2845deg%2Crgba%28255%2C255%2C255%2C%2E15%29%2025%25%2Ctransparent%2025%25%2Ctransparent%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2075%25%2Ctransparent%2075%25%2Ctransparent%29%7D%2Eprogress%2Dbar%2Ddanger%7Bbackground%2Dcolor%3A%23d9534f%7D%2Eprogress%2Dstriped%20%2Eprogress%2Dbar%2Ddanger%7Bbackground%2Dimage%3A%2Dwebkit%2Dlinear%2Dgradient%2845deg%2Crgba%28255%2C255%2C255%2C%2E15%29%2025%25%2Ctransparent%2025%25%2Ctransparent%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2075%25%2Ctransparent%2075%25%2Ctransparent%29%3Bbackground%2Dimage%3A%2Do%2Dlinear%2Dgradient%2845deg%2Crgba%28255%2C255%2C255%2C%2E15%29%2025%25%2Ctransparent%2025%25%2Ctransparent%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2075%25%2Ctransparent%2075%25%2Ctransparent%29%3Bbackground%2Dimage%3Alinear%2Dgradient%2845deg%2Crgba%28255%2C255%2C255%2C%2E15%29%2025%25%2Ctransparent%2025%25%2Ctransparent%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2075%25%2Ctransparent%2075%25%2Ctransparent%29%7D%2Emedia%7Bmargin%2Dtop%3A15px%7D%2Emedia%3Afirst%2Dchild%7Bmargin%2Dtop%3A0%7D%2Emedia%2C%2Emedia%2Dbody%7Boverflow%3Ahidden%3Bzoom%3A1%7D%2Emedia%2Dbody%7Bwidth%3A10000px%7D%2Emedia%2Dobject%7Bdisplay%3Ablock%7D%2Emedia%2Dobject%2Eimg%2Dthumbnail%7Bmax%2Dwidth%3Anone%7D%2Emedia%2Dright%2C%2Emedia%3E%2Epull%2Dright%7Bpadding%2Dleft%3A10px%7D%2Emedia%2Dleft%2C%2Emedia%3E%2Epull%2Dleft%7Bpadding%2Dright%3A10px%7D%2Emedia%2Dbody%2C%2Emedia%2Dleft%2C%2Emedia%2Dright%7Bdisplay%3Atable%2Dcell%3Bvertical%2Dalign%3Atop%7D%2Emedia%2Dmiddle%7Bvertical%2Dalign%3Amiddle%7D%2Emedia%2Dbottom%7Bvertical%2Dalign%3Abottom%7D%2Emedia%2Dheading%7Bmargin%2Dtop%3A0%3Bmargin%2Dbottom%3A5px%7D%2Emedia%2Dlist%7Bpadding%2Dleft%3A0%3Blist%2Dstyle%3Anone%7D%2Elist%2Dgroup%7Bpadding%2Dleft%3A0%3Bmargin%2Dbottom%3A20px%7D%2Elist%2Dgroup%2Ditem%7Bposition%3Arelative%3Bdisplay%3Ablock%3Bpadding%3A10px%2015px%3Bmargin%2Dbottom%3A%2D1px%3Bbackground%2Dcolor%3A%23fff%3Bborder%3A1px%20solid%20%23ddd%7D%2Elist%2Dgroup%2Ditem%3Afirst%2Dchild%7Bborder%2Dtop%2Dleft%2Dradius%3A4px%3Bborder%2Dtop%2Dright%2Dradius%3A4px%7D%2Elist%2Dgroup%2Ditem%3Alast%2Dchild%7Bmargin%2Dbottom%3A0%3Bborder%2Dbottom%2Dright%2Dradius%3A4px%3Bborder%2Dbottom%2Dleft%2Dradius%3A4px%7Da%2Elist%2Dgroup%2Ditem%2Cbutton%2Elist%2Dgroup%2Ditem%7Bcolor%3A%23555%7Da%2Elist%2Dgroup%2Ditem%20%2Elist%2Dgroup%2Ditem%2Dheading%2Cbutton%2Elist%2Dgroup%2Ditem%20%2Elist%2Dgroup%2Ditem%2Dheading%7Bcolor%3A%23333%7Da%2Elist%2Dgroup%2Ditem%3Afocus%2Ca%2Elist%2Dgroup%2Ditem%3Ahover%2Cbutton%2Elist%2Dgroup%2Ditem%3Afocus%2Cbutton%2Elist%2Dgroup%2Ditem%3Ahover%7Bcolor%3A%23555%3Btext%2Ddecoration%3Anone%3Bbackground%2Dcolor%3A%23f5f5f5%7Dbutton%2Elist%2Dgroup%2Ditem%7Bwidth%3A100%25%3Btext%2Dalign%3Aleft%7D%2Elist%2Dgroup%2Ditem%2Edisabled%2C%2Elist%2Dgroup%2Ditem%2Edisabled%3Afocus%2C%2Elist%2Dgroup%2Ditem%2Edisabled%3Ahover%7Bcolor%3A%23777%3Bcursor%3Anot%2Dallowed%3Bbackground%2Dcolor%3A%23eee%7D%2Elist%2Dgroup%2Ditem%2Edisabled%20%2Elist%2Dgroup%2Ditem%2Dheading%2C%2Elist%2Dgroup%2Ditem%2Edisabled%3Afocus%20%2Elist%2Dgroup%2Ditem%2Dheading%2C%2Elist%2Dgroup%2Ditem%2Edisabled%3Ahover%20%2Elist%2Dgroup%2Ditem%2Dheading%7Bcolor%3Ainherit%7D%2Elist%2Dgroup%2Ditem%2Edisabled%20%2Elist%2Dgroup%2Ditem%2Dtext%2C%2Elist%2Dgroup%2Ditem%2Edisabled%3Afocus%20%2Elist%2Dgroup%2Ditem%2Dtext%2C%2Elist%2Dgroup%2Ditem%2Edisabled%3Ahover%20%2Elist%2Dgroup%2Ditem%2Dtext%7Bcolor%3A%23777%7D%2Elist%2Dgroup%2Ditem%2Eactive%2C%2Elist%2Dgroup%2Ditem%2Eactive%3Afocus%2C%2Elist%2Dgroup%2Ditem%2Eactive%3Ahover%7Bz%2Dindex%3A2%3Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23337ab7%3Bborder%2Dcolor%3A%23337ab7%7D%2Elist%2Dgroup%2Ditem%2Eactive%20%2Elist%2Dgroup%2Ditem%2Dheading%2C%2Elist%2Dgroup%2Ditem%2Eactive%20%2Elist%2Dgroup%2Ditem%2Dheading%3E%2Esmall%2C%2Elist%2Dgroup%2Ditem%2Eactive%20%2Elist%2Dgroup%2Ditem%2Dheading%3Esmall%2C%2Elist%2Dgroup%2Ditem%2Eactive%3Afocus%20%2Elist%2Dgroup%2Ditem%2Dheading%2C%2Elist%2Dgroup%2Ditem%2Eactive%3Afocus%20%2Elist%2Dgroup%2Ditem%2Dheading%3E%2Esmall%2C%2Elist%2Dgroup%2Ditem%2Eactive%3Afocus%20%2Elist%2Dgroup%2Ditem%2Dheading%3Esmall%2C%2Elist%2Dgroup%2Ditem%2Eactive%3Ahover%20%2Elist%2Dgroup%2Ditem%2Dheading%2C%2Elist%2Dgroup%2Ditem%2Eactive%3Ahover%20%2Elist%2Dgroup%2Ditem%2Dheading%3E%2Esmall%2C%2Elist%2Dgroup%2Ditem%2Eactive%3Ahover%20%2Elist%2Dgroup%2Ditem%2Dheading%3Esmall%7Bcolor%3Ainherit%7D%2Elist%2Dgroup%2Ditem%2Eactive%20%2Elist%2Dgroup%2Ditem%2Dtext%2C%2Elist%2Dgroup%2Ditem%2Eactive%3Afocus%20%2Elist%2Dgroup%2Ditem%2Dtext%2C%2Elist%2Dgroup%2Ditem%2Eactive%3Ahover%20%2Elist%2Dgroup%2Ditem%2Dtext%7Bcolor%3A%23c7ddef%7D%2Elist%2Dgroup%2Ditem%2Dsuccess%7Bcolor%3A%233c763d%3Bbackground%2Dcolor%3A%23dff0d8%7Da%2Elist%2Dgroup%2Ditem%2Dsuccess%2Cbutton%2Elist%2Dgroup%2Ditem%2Dsuccess%7Bcolor%3A%233c763d%7Da%2Elist%2Dgroup%2Ditem%2Dsuccess%20%2Elist%2Dgroup%2Ditem%2Dheading%2Cbutton%2Elist%2Dgroup%2Ditem%2Dsuccess%20%2Elist%2Dgroup%2Ditem%2Dheading%7Bcolor%3Ainherit%7Da%2Elist%2Dgroup%2Ditem%2Dsuccess%3Afocus%2Ca%2Elist%2Dgroup%2Ditem%2Dsuccess%3Ahover%2Cbutton%2Elist%2Dgroup%2Ditem%2Dsuccess%3Afocus%2Cbutton%2Elist%2Dgroup%2Ditem%2Dsuccess%3Ahover%7Bcolor%3A%233c763d%3Bbackground%2Dcolor%3A%23d0e9c6%7Da%2Elist%2Dgroup%2Ditem%2Dsuccess%2Eactive%2Ca%2Elist%2Dgroup%2Ditem%2Dsuccess%2Eactive%3Afocus%2Ca%2Elist%2Dgroup%2Ditem%2Dsuccess%2Eactive%3Ahover%2Cbutton%2Elist%2Dgroup%2Ditem%2Dsuccess%2Eactive%2Cbutton%2Elist%2Dgroup%2Ditem%2Dsuccess%2Eactive%3Afocus%2Cbutton%2Elist%2Dgroup%2Ditem%2Dsuccess%2Eactive%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%233c763d%3Bborder%2Dcolor%3A%233c763d%7D%2Elist%2Dgroup%2Ditem%2Dinfo%7Bcolor%3A%2331708f%3Bbackground%2Dcolor%3A%23d9edf7%7Da%2Elist%2Dgroup%2Ditem%2Dinfo%2Cbutton%2Elist%2Dgroup%2Ditem%2Dinfo%7Bcolor%3A%2331708f%7Da%2Elist%2Dgroup%2Ditem%2Dinfo%20%2Elist%2Dgroup%2Ditem%2Dheading%2Cbutton%2Elist%2Dgroup%2Ditem%2Dinfo%20%2Elist%2Dgroup%2Ditem%2Dheading%7Bcolor%3Ainherit%7Da%2Elist%2Dgroup%2Ditem%2Dinfo%3Afocus%2Ca%2Elist%2Dgroup%2Ditem%2Dinfo%3Ahover%2Cbutton%2Elist%2Dgroup%2Ditem%2Dinfo%3Afocus%2Cbutton%2Elist%2Dgroup%2Ditem%2Dinfo%3Ahover%7Bcolor%3A%2331708f%3Bbackground%2Dcolor%3A%23c4e3f3%7Da%2Elist%2Dgroup%2Ditem%2Dinfo%2Eactive%2Ca%2Elist%2Dgroup%2Ditem%2Dinfo%2Eactive%3Afocus%2Ca%2Elist%2Dgroup%2Ditem%2Dinfo%2Eactive%3Ahover%2Cbutton%2Elist%2Dgroup%2Ditem%2Dinfo%2Eactive%2Cbutton%2Elist%2Dgroup%2Ditem%2Dinfo%2Eactive%3Afocus%2Cbutton%2Elist%2Dgroup%2Ditem%2Dinfo%2Eactive%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%2331708f%3Bborder%2Dcolor%3A%2331708f%7D%2Elist%2Dgroup%2Ditem%2Dwarning%7Bcolor%3A%238a6d3b%3Bbackground%2Dcolor%3A%23fcf8e3%7Da%2Elist%2Dgroup%2Ditem%2Dwarning%2Cbutton%2Elist%2Dgroup%2Ditem%2Dwarning%7Bcolor%3A%238a6d3b%7Da%2Elist%2Dgroup%2Ditem%2Dwarning%20%2Elist%2Dgroup%2Ditem%2Dheading%2Cbutton%2Elist%2Dgroup%2Ditem%2Dwarning%20%2Elist%2Dgroup%2Ditem%2Dheading%7Bcolor%3Ainherit%7Da%2Elist%2Dgroup%2Ditem%2Dwarning%3Afocus%2Ca%2Elist%2Dgroup%2Ditem%2Dwarning%3Ahover%2Cbutton%2Elist%2Dgroup%2Ditem%2Dwarning%3Afocus%2Cbutton%2Elist%2Dgroup%2Ditem%2Dwarning%3Ahover%7Bcolor%3A%238a6d3b%3Bbackground%2Dcolor%3A%23faf2cc%7Da%2Elist%2Dgroup%2Ditem%2Dwarning%2Eactive%2Ca%2Elist%2Dgroup%2Ditem%2Dwarning%2Eactive%3Afocus%2Ca%2Elist%2Dgroup%2Ditem%2Dwarning%2Eactive%3Ahover%2Cbutton%2Elist%2Dgroup%2Ditem%2Dwarning%2Eactive%2Cbutton%2Elist%2Dgroup%2Ditem%2Dwarning%2Eactive%3Afocus%2Cbutton%2Elist%2Dgroup%2Ditem%2Dwarning%2Eactive%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%238a6d3b%3Bborder%2Dcolor%3A%238a6d3b%7D%2Elist%2Dgroup%2Ditem%2Ddanger%7Bcolor%3A%23a94442%3Bbackground%2Dcolor%3A%23f2dede%7Da%2Elist%2Dgroup%2Ditem%2Ddanger%2Cbutton%2Elist%2Dgroup%2Ditem%2Ddanger%7Bcolor%3A%23a94442%7Da%2Elist%2Dgroup%2Ditem%2Ddanger%20%2Elist%2Dgroup%2Ditem%2Dheading%2Cbutton%2Elist%2Dgroup%2Ditem%2Ddanger%20%2Elist%2Dgroup%2Ditem%2Dheading%7Bcolor%3Ainherit%7Da%2Elist%2Dgroup%2Ditem%2Ddanger%3Afocus%2Ca%2Elist%2Dgroup%2Ditem%2Ddanger%3Ahover%2Cbutton%2Elist%2Dgroup%2Ditem%2Ddanger%3Afocus%2Cbutton%2Elist%2Dgroup%2Ditem%2Ddanger%3Ahover%7Bcolor%3A%23a94442%3Bbackground%2Dcolor%3A%23ebcccc%7Da%2Elist%2Dgroup%2Ditem%2Ddanger%2Eactive%2Ca%2Elist%2Dgroup%2Ditem%2Ddanger%2Eactive%3Afocus%2Ca%2Elist%2Dgroup%2Ditem%2Ddanger%2Eactive%3Ahover%2Cbutton%2Elist%2Dgroup%2Ditem%2Ddanger%2Eactive%2Cbutton%2Elist%2Dgroup%2Ditem%2Ddanger%2Eactive%3Afocus%2Cbutton%2Elist%2Dgroup%2Ditem%2Ddanger%2Eactive%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23a94442%3Bborder%2Dcolor%3A%23a94442%7D%2Elist%2Dgroup%2Ditem%2Dheading%7Bmargin%2Dtop%3A0%3Bmargin%2Dbottom%3A5px%7D%2Elist%2Dgroup%2Ditem%2Dtext%7Bmargin%2Dbottom%3A0%3Bline%2Dheight%3A1%2E3%7D%2Epanel%7Bmargin%2Dbottom%3A20px%3Bbackground%2Dcolor%3A%23fff%3Bborder%3A1px%20solid%20transparent%3Bborder%2Dradius%3A4px%3B%2Dwebkit%2Dbox%2Dshadow%3A0%201px%201px%20rgba%280%2C0%2C0%2C%2E05%29%3Bbox%2Dshadow%3A0%201px%201px%20rgba%280%2C0%2C0%2C%2E05%29%7D%2Epanel%2Dbody%7Bpadding%3A15px%7D%2Epanel%2Dheading%7Bpadding%3A10px%2015px%3Bborder%2Dbottom%3A1px%20solid%20transparent%3Bborder%2Dtop%2Dleft%2Dradius%3A3px%3Bborder%2Dtop%2Dright%2Dradius%3A3px%7D%2Epanel%2Dheading%3E%2Edropdown%20%2Edropdown%2Dtoggle%7Bcolor%3Ainherit%7D%2Epanel%2Dtitle%7Bmargin%2Dtop%3A0%3Bmargin%2Dbottom%3A0%3Bfont%2Dsize%3A16px%3Bcolor%3Ainherit%7D%2Epanel%2Dtitle%3E%2Esmall%2C%2Epanel%2Dtitle%3E%2Esmall%3Ea%2C%2Epanel%2Dtitle%3Ea%2C%2Epanel%2Dtitle%3Esmall%2C%2Epanel%2Dtitle%3Esmall%3Ea%7Bcolor%3Ainherit%7D%2Epanel%2Dfooter%7Bpadding%3A10px%2015px%3Bbackground%2Dcolor%3A%23f5f5f5%3Bborder%2Dtop%3A1px%20solid%20%23ddd%3Bborder%2Dbottom%2Dright%2Dradius%3A3px%3Bborder%2Dbottom%2Dleft%2Dradius%3A3px%7D%2Epanel%3E%2Elist%2Dgroup%2C%2Epanel%3E%2Epanel%2Dcollapse%3E%2Elist%2Dgroup%7Bmargin%2Dbottom%3A0%7D%2Epanel%3E%2Elist%2Dgroup%20%2Elist%2Dgroup%2Ditem%2C%2Epanel%3E%2Epanel%2Dcollapse%3E%2Elist%2Dgroup%20%2Elist%2Dgroup%2Ditem%7Bborder%2Dwidth%3A1px%200%3Bborder%2Dradius%3A0%7D%2Epanel%3E%2Elist%2Dgroup%3Afirst%2Dchild%20%2Elist%2Dgroup%2Ditem%3Afirst%2Dchild%2C%2Epanel%3E%2Epanel%2Dcollapse%3E%2Elist%2Dgroup%3Afirst%2Dchild%20%2Elist%2Dgroup%2Ditem%3Afirst%2Dchild%7Bborder%2Dtop%3A0%3Bborder%2Dtop%2Dleft%2Dradius%3A3px%3Bborder%2Dtop%2Dright%2Dradius%3A3px%7D%2Epanel%3E%2Elist%2Dgroup%3Alast%2Dchild%20%2Elist%2Dgroup%2Ditem%3Alast%2Dchild%2C%2Epanel%3E%2Epanel%2Dcollapse%3E%2Elist%2Dgroup%3Alast%2Dchild%20%2Elist%2Dgroup%2Ditem%3Alast%2Dchild%7Bborder%2Dbottom%3A0%3Bborder%2Dbottom%2Dright%2Dradius%3A3px%3Bborder%2Dbottom%2Dleft%2Dradius%3A3px%7D%2Epanel%3E%2Epanel%2Dheading%2B%2Epanel%2Dcollapse%3E%2Elist%2Dgroup%20%2Elist%2Dgroup%2Ditem%3Afirst%2Dchild%7Bborder%2Dtop%2Dleft%2Dradius%3A0%3Bborder%2Dtop%2Dright%2Dradius%3A0%7D%2Epanel%2Dheading%2B%2Elist%2Dgroup%20%2Elist%2Dgroup%2Ditem%3Afirst%2Dchild%7Bborder%2Dtop%2Dwidth%3A0%7D%2Elist%2Dgroup%2B%2Epanel%2Dfooter%7Bborder%2Dtop%2Dwidth%3A0%7D%2Epanel%3E%2Epanel%2Dcollapse%3E%2Etable%2C%2Epanel%3E%2Etable%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%7Bmargin%2Dbottom%3A0%7D%2Epanel%3E%2Epanel%2Dcollapse%3E%2Etable%20caption%2C%2Epanel%3E%2Etable%20caption%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%20caption%7Bpadding%2Dright%3A15px%3Bpadding%2Dleft%3A15px%7D%2Epanel%3E%2Etable%2Dresponsive%3Afirst%2Dchild%3E%2Etable%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%3Afirst%2Dchild%7Bborder%2Dtop%2Dleft%2Dradius%3A3px%3Bborder%2Dtop%2Dright%2Dradius%3A3px%7D%2Epanel%3E%2Etable%2Dresponsive%3Afirst%2Dchild%3E%2Etable%3Afirst%2Dchild%3Etbody%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3Afirst%2Dchild%3E%2Etable%3Afirst%2Dchild%3Ethead%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%3Afirst%2Dchild%3Etbody%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%3Afirst%2Dchild%3Ethead%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%7Bborder%2Dtop%2Dleft%2Dradius%3A3px%3Bborder%2Dtop%2Dright%2Dradius%3A3px%7D%2Epanel%3E%2Etable%2Dresponsive%3Afirst%2Dchild%3E%2Etable%3Afirst%2Dchild%3Etbody%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%20td%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3Afirst%2Dchild%3E%2Etable%3Afirst%2Dchild%3Etbody%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%20th%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3Afirst%2Dchild%3E%2Etable%3Afirst%2Dchild%3Ethead%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%20td%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3Afirst%2Dchild%3E%2Etable%3Afirst%2Dchild%3Ethead%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%20th%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%3Afirst%2Dchild%3Etbody%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%20td%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%3Afirst%2Dchild%3Etbody%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%20th%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%3Afirst%2Dchild%3Ethead%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%20td%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%3Afirst%2Dchild%3Ethead%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%20th%3Afirst%2Dchild%7Bborder%2Dtop%2Dleft%2Dradius%3A3px%7D%2Epanel%3E%2Etable%2Dresponsive%3Afirst%2Dchild%3E%2Etable%3Afirst%2Dchild%3Etbody%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%20td%3Alast%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3Afirst%2Dchild%3E%2Etable%3Afirst%2Dchild%3Etbody%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%20th%3Alast%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3Afirst%2Dchild%3E%2Etable%3Afirst%2Dchild%3Ethead%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%20td%3Alast%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3Afirst%2Dchild%3E%2Etable%3Afirst%2Dchild%3Ethead%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%20th%3Alast%2Dchild%2C%2Epanel%3E%2Etable%3Afirst%2Dchild%3Etbody%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%20td%3Alast%2Dchild%2C%2Epanel%3E%2Etable%3Afirst%2Dchild%3Etbody%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%20th%3Alast%2Dchild%2C%2Epanel%3E%2Etable%3Afirst%2Dchild%3Ethead%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%20td%3Alast%2Dchild%2C%2Epanel%3E%2Etable%3Afirst%2Dchild%3Ethead%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%20th%3Alast%2Dchild%7Bborder%2Dtop%2Dright%2Dradius%3A3px%7D%2Epanel%3E%2Etable%2Dresponsive%3Alast%2Dchild%3E%2Etable%3Alast%2Dchild%2C%2Epanel%3E%2Etable%3Alast%2Dchild%7Bborder%2Dbottom%2Dright%2Dradius%3A3px%3Bborder%2Dbottom%2Dleft%2Dradius%3A3px%7D%2Epanel%3E%2Etable%2Dresponsive%3Alast%2Dchild%3E%2Etable%3Alast%2Dchild%3Etbody%3Alast%2Dchild%3Etr%3Alast%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3Alast%2Dchild%3E%2Etable%3Alast%2Dchild%3Etfoot%3Alast%2Dchild%3Etr%3Alast%2Dchild%2C%2Epanel%3E%2Etable%3Alast%2Dchild%3Etbody%3Alast%2Dchild%3Etr%3Alast%2Dchild%2C%2Epanel%3E%2Etable%3Alast%2Dchild%3Etfoot%3Alast%2Dchild%3Etr%3Alast%2Dchild%7Bborder%2Dbottom%2Dright%2Dradius%3A3px%3Bborder%2Dbottom%2Dleft%2Dradius%3A3px%7D%2Epanel%3E%2Etable%2Dresponsive%3Alast%2Dchild%3E%2Etable%3Alast%2Dchild%3Etbody%3Alast%2Dchild%3Etr%3Alast%2Dchild%20td%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3Alast%2Dchild%3E%2Etable%3Alast%2Dchild%3Etbody%3Alast%2Dchild%3Etr%3Alast%2Dchild%20th%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3Alast%2Dchild%3E%2Etable%3Alast%2Dchild%3Etfoot%3Alast%2Dchild%3Etr%3Alast%2Dchild%20td%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3Alast%2Dchild%3E%2Etable%3Alast%2Dchild%3Etfoot%3Alast%2Dchild%3Etr%3Alast%2Dchild%20th%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%3Alast%2Dchild%3Etbody%3Alast%2Dchild%3Etr%3Alast%2Dchild%20td%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%3Alast%2Dchild%3Etbody%3Alast%2Dchild%3Etr%3Alast%2Dchild%20th%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%3Alast%2Dchild%3Etfoot%3Alast%2Dchild%3Etr%3Alast%2Dchild%20td%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%3Alast%2Dchild%3Etfoot%3Alast%2Dchild%3Etr%3Alast%2Dchild%20th%3Afirst%2Dchild%7Bborder%2Dbottom%2Dleft%2Dradius%3A3px%7D%2Epanel%3E%2Etable%2Dresponsive%3Alast%2Dchild%3E%2Etable%3Alast%2Dchild%3Etbody%3Alast%2Dchild%3Etr%3Alast%2Dchild%20td%3Alast%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3Alast%2Dchild%3E%2Etable%3Alast%2Dchild%3Etbody%3Alast%2Dchild%3Etr%3Alast%2Dchild%20th%3Alast%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3Alast%2Dchild%3E%2Etable%3Alast%2Dchild%3Etfoot%3Alast%2Dchild%3Etr%3Alast%2Dchild%20td%3Alast%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3Alast%2Dchild%3E%2Etable%3Alast%2Dchild%3Etfoot%3Alast%2Dchild%3Etr%3Alast%2Dchild%20th%3Alast%2Dchild%2C%2Epanel%3E%2Etable%3Alast%2Dchild%3Etbody%3Alast%2Dchild%3Etr%3Alast%2Dchild%20td%3Alast%2Dchild%2C%2Epanel%3E%2Etable%3Alast%2Dchild%3Etbody%3Alast%2Dchild%3Etr%3Alast%2Dchild%20th%3Alast%2Dchild%2C%2Epanel%3E%2Etable%3Alast%2Dchild%3Etfoot%3Alast%2Dchild%3Etr%3Alast%2Dchild%20td%3Alast%2Dchild%2C%2Epanel%3E%2Etable%3Alast%2Dchild%3Etfoot%3Alast%2Dchild%3Etr%3Alast%2Dchild%20th%3Alast%2Dchild%7Bborder%2Dbottom%2Dright%2Dradius%3A3px%7D%2Epanel%3E%2Epanel%2Dbody%2B%2Etable%2C%2Epanel%3E%2Epanel%2Dbody%2B%2Etable%2Dresponsive%2C%2Epanel%3E%2Etable%2B%2Epanel%2Dbody%2C%2Epanel%3E%2Etable%2Dresponsive%2B%2Epanel%2Dbody%7Bborder%2Dtop%3A1px%20solid%20%23ddd%7D%2Epanel%3E%2Etable%3Etbody%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%20td%2C%2Epanel%3E%2Etable%3Etbody%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%20th%7Bborder%2Dtop%3A0%7D%2Epanel%3E%2Etable%2Dbordered%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%7Bborder%3A0%7D%2Epanel%3E%2Etable%2Dbordered%3Etbody%3Etr%3Etd%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%2Dbordered%3Etbody%3Etr%3Eth%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%2Dbordered%3Etfoot%3Etr%3Etd%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%2Dbordered%3Etfoot%3Etr%3Eth%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%2Dbordered%3Ethead%3Etr%3Etd%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%2Dbordered%3Ethead%3Etr%3Eth%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etbody%3Etr%3Etd%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etbody%3Etr%3Eth%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etfoot%3Etr%3Etd%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etfoot%3Etr%3Eth%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Ethead%3Etr%3Etd%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Ethead%3Etr%3Eth%3Afirst%2Dchild%7Bborder%2Dleft%3A0%7D%2Epanel%3E%2Etable%2Dbordered%3Etbody%3Etr%3Etd%3Alast%2Dchild%2C%2Epanel%3E%2Etable%2Dbordered%3Etbody%3Etr%3Eth%3Alast%2Dchild%2C%2Epanel%3E%2Etable%2Dbordered%3Etfoot%3Etr%3Etd%3Alast%2Dchild%2C%2Epanel%3E%2Etable%2Dbordered%3Etfoot%3Etr%3Eth%3Alast%2Dchild%2C%2Epanel%3E%2Etable%2Dbordered%3Ethead%3Etr%3Etd%3Alast%2Dchild%2C%2Epanel%3E%2Etable%2Dbordered%3Ethead%3Etr%3Eth%3Alast%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etbody%3Etr%3Etd%3Alast%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etbody%3Etr%3Eth%3Alast%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etfoot%3Etr%3Etd%3Alast%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etfoot%3Etr%3Eth%3Alast%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Ethead%3Etr%3Etd%3Alast%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Ethead%3Etr%3Eth%3Alast%2Dchild%7Bborder%2Dright%3A0%7D%2Epanel%3E%2Etable%2Dbordered%3Etbody%3Etr%3Afirst%2Dchild%3Etd%2C%2Epanel%3E%2Etable%2Dbordered%3Etbody%3Etr%3Afirst%2Dchild%3Eth%2C%2Epanel%3E%2Etable%2Dbordered%3Ethead%3Etr%3Afirst%2Dchild%3Etd%2C%2Epanel%3E%2Etable%2Dbordered%3Ethead%3Etr%3Afirst%2Dchild%3Eth%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etbody%3Etr%3Afirst%2Dchild%3Etd%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etbody%3Etr%3Afirst%2Dchild%3Eth%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Ethead%3Etr%3Afirst%2Dchild%3Etd%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Ethead%3Etr%3Afirst%2Dchild%3Eth%7Bborder%2Dbottom%3A0%7D%2Epanel%3E%2Etable%2Dbordered%3Etbody%3Etr%3Alast%2Dchild%3Etd%2C%2Epanel%3E%2Etable%2Dbordered%3Etbody%3Etr%3Alast%2Dchild%3Eth%2C%2Epanel%3E%2Etable%2Dbordered%3Etfoot%3Etr%3Alast%2Dchild%3Etd%2C%2Epanel%3E%2Etable%2Dbordered%3Etfoot%3Etr%3Alast%2Dchild%3Eth%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etbody%3Etr%3Alast%2Dchild%3Etd%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etbody%3Etr%3Alast%2Dchild%3Eth%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etfoot%3Etr%3Alast%2Dchild%3Etd%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etfoot%3Etr%3Alast%2Dchild%3Eth%7Bborder%2Dbottom%3A0%7D%2Epanel%3E%2Etable%2Dresponsive%7Bmargin%2Dbottom%3A0%3Bborder%3A0%7D%2Epanel%2Dgroup%7Bmargin%2Dbottom%3A20px%7D%2Epanel%2Dgroup%20%2Epanel%7Bmargin%2Dbottom%3A0%3Bborder%2Dradius%3A4px%7D%2Epanel%2Dgroup%20%2Epanel%2B%2Epanel%7Bmargin%2Dtop%3A5px%7D%2Epanel%2Dgroup%20%2Epanel%2Dheading%7Bborder%2Dbottom%3A0%7D%2Epanel%2Dgroup%20%2Epanel%2Dheading%2B%2Epanel%2Dcollapse%3E%2Elist%2Dgroup%2C%2Epanel%2Dgroup%20%2Epanel%2Dheading%2B%2Epanel%2Dcollapse%3E%2Epanel%2Dbody%7Bborder%2Dtop%3A1px%20solid%20%23ddd%7D%2Epanel%2Dgroup%20%2Epanel%2Dfooter%7Bborder%2Dtop%3A0%7D%2Epanel%2Dgroup%20%2Epanel%2Dfooter%2B%2Epanel%2Dcollapse%20%2Epanel%2Dbody%7Bborder%2Dbottom%3A1px%20solid%20%23ddd%7D%2Epanel%2Ddefault%7Bborder%2Dcolor%3A%23ddd%7D%2Epanel%2Ddefault%3E%2Epanel%2Dheading%7Bcolor%3A%23333%3Bbackground%2Dcolor%3A%23f5f5f5%3Bborder%2Dcolor%3A%23ddd%7D%2Epanel%2Ddefault%3E%2Epanel%2Dheading%2B%2Epanel%2Dcollapse%3E%2Epanel%2Dbody%7Bborder%2Dtop%2Dcolor%3A%23ddd%7D%2Epanel%2Ddefault%3E%2Epanel%2Dheading%20%2Ebadge%7Bcolor%3A%23f5f5f5%3Bbackground%2Dcolor%3A%23333%7D%2Epanel%2Ddefault%3E%2Epanel%2Dfooter%2B%2Epanel%2Dcollapse%3E%2Epanel%2Dbody%7Bborder%2Dbottom%2Dcolor%3A%23ddd%7D%2Epanel%2Dprimary%7Bborder%2Dcolor%3A%23337ab7%7D%2Epanel%2Dprimary%3E%2Epanel%2Dheading%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23337ab7%3Bborder%2Dcolor%3A%23337ab7%7D%2Epanel%2Dprimary%3E%2Epanel%2Dheading%2B%2Epanel%2Dcollapse%3E%2Epanel%2Dbody%7Bborder%2Dtop%2Dcolor%3A%23337ab7%7D%2Epanel%2Dprimary%3E%2Epanel%2Dheading%20%2Ebadge%7Bcolor%3A%23337ab7%3Bbackground%2Dcolor%3A%23fff%7D%2Epanel%2Dprimary%3E%2Epanel%2Dfooter%2B%2Epanel%2Dcollapse%3E%2Epanel%2Dbody%7Bborder%2Dbottom%2Dcolor%3A%23337ab7%7D%2Epanel%2Dsuccess%7Bborder%2Dcolor%3A%23d6e9c6%7D%2Epanel%2Dsuccess%3E%2Epanel%2Dheading%7Bcolor%3A%233c763d%3Bbackground%2Dcolor%3A%23dff0d8%3Bborder%2Dcolor%3A%23d6e9c6%7D%2Epanel%2Dsuccess%3E%2Epanel%2Dheading%2B%2Epanel%2Dcollapse%3E%2Epanel%2Dbody%7Bborder%2Dtop%2Dcolor%3A%23d6e9c6%7D%2Epanel%2Dsuccess%3E%2Epanel%2Dheading%20%2Ebadge%7Bcolor%3A%23dff0d8%3Bbackground%2Dcolor%3A%233c763d%7D%2Epanel%2Dsuccess%3E%2Epanel%2Dfooter%2B%2Epanel%2Dcollapse%3E%2Epanel%2Dbody%7Bborder%2Dbottom%2Dcolor%3A%23d6e9c6%7D%2Epanel%2Dinfo%7Bborder%2Dcolor%3A%23bce8f1%7D%2Epanel%2Dinfo%3E%2Epanel%2Dheading%7Bcolor%3A%2331708f%3Bbackground%2Dcolor%3A%23d9edf7%3Bborder%2Dcolor%3A%23bce8f1%7D%2Epanel%2Dinfo%3E%2Epanel%2Dheading%2B%2Epanel%2Dcollapse%3E%2Epanel%2Dbody%7Bborder%2Dtop%2Dcolor%3A%23bce8f1%7D%2Epanel%2Dinfo%3E%2Epanel%2Dheading%20%2Ebadge%7Bcolor%3A%23d9edf7%3Bbackground%2Dcolor%3A%2331708f%7D%2Epanel%2Dinfo%3E%2Epanel%2Dfooter%2B%2Epanel%2Dcollapse%3E%2Epanel%2Dbody%7Bborder%2Dbottom%2Dcolor%3A%23bce8f1%7D%2Epanel%2Dwarning%7Bborder%2Dcolor%3A%23faebcc%7D%2Epanel%2Dwarning%3E%2Epanel%2Dheading%7Bcolor%3A%238a6d3b%3Bbackground%2Dcolor%3A%23fcf8e3%3Bborder%2Dcolor%3A%23faebcc%7D%2Epanel%2Dwarning%3E%2Epanel%2Dheading%2B%2Epanel%2Dcollapse%3E%2Epanel%2Dbody%7Bborder%2Dtop%2Dcolor%3A%23faebcc%7D%2Epanel%2Dwarning%3E%2Epanel%2Dheading%20%2Ebadge%7Bcolor%3A%23fcf8e3%3Bbackground%2Dcolor%3A%238a6d3b%7D%2Epanel%2Dwarning%3E%2Epanel%2Dfooter%2B%2Epanel%2Dcollapse%3E%2Epanel%2Dbody%7Bborder%2Dbottom%2Dcolor%3A%23faebcc%7D%2Epanel%2Ddanger%7Bborder%2Dcolor%3A%23ebccd1%7D%2Epanel%2Ddanger%3E%2Epanel%2Dheading%7Bcolor%3A%23a94442%3Bbackground%2Dcolor%3A%23f2dede%3Bborder%2Dcolor%3A%23ebccd1%7D%2Epanel%2Ddanger%3E%2Epanel%2Dheading%2B%2Epanel%2Dcollapse%3E%2Epanel%2Dbody%7Bborder%2Dtop%2Dcolor%3A%23ebccd1%7D%2Epanel%2Ddanger%3E%2Epanel%2Dheading%20%2Ebadge%7Bcolor%3A%23f2dede%3Bbackground%2Dcolor%3A%23a94442%7D%2Epanel%2Ddanger%3E%2Epanel%2Dfooter%2B%2Epanel%2Dcollapse%3E%2Epanel%2Dbody%7Bborder%2Dbottom%2Dcolor%3A%23ebccd1%7D%2Eembed%2Dresponsive%7Bposition%3Arelative%3Bdisplay%3Ablock%3Bheight%3A0%3Bpadding%3A0%3Boverflow%3Ahidden%7D%2Eembed%2Dresponsive%20%2Eembed%2Dresponsive%2Ditem%2C%2Eembed%2Dresponsive%20embed%2C%2Eembed%2Dresponsive%20iframe%2C%2Eembed%2Dresponsive%20object%2C%2Eembed%2Dresponsive%20video%7Bposition%3Aabsolute%3Btop%3A0%3Bbottom%3A0%3Bleft%3A0%3Bwidth%3A100%25%3Bheight%3A100%25%3Bborder%3A0%7D%2Eembed%2Dresponsive%2D16by9%7Bpadding%2Dbottom%3A56%2E25%25%7D%2Eembed%2Dresponsive%2D4by3%7Bpadding%2Dbottom%3A75%25%7D%2Ewell%7Bmin%2Dheight%3A20px%3Bpadding%3A19px%3Bmargin%2Dbottom%3A20px%3Bbackground%2Dcolor%3A%23f5f5f5%3Bborder%3A1px%20solid%20%23e3e3e3%3Bborder%2Dradius%3A4px%3B%2Dwebkit%2Dbox%2Dshadow%3Ainset%200%201px%201px%20rgba%280%2C0%2C0%2C%2E05%29%3Bbox%2Dshadow%3Ainset%200%201px%201px%20rgba%280%2C0%2C0%2C%2E05%29%7D%2Ewell%20blockquote%7Bborder%2Dcolor%3A%23ddd%3Bborder%2Dcolor%3Argba%280%2C0%2C0%2C%2E15%29%7D%2Ewell%2Dlg%7Bpadding%3A24px%3Bborder%2Dradius%3A6px%7D%2Ewell%2Dsm%7Bpadding%3A9px%3Bborder%2Dradius%3A3px%7D%2Eclose%7Bfloat%3Aright%3Bfont%2Dsize%3A21px%3Bfont%2Dweight%3A700%3Bline%2Dheight%3A1%3Bcolor%3A%23000%3Btext%2Dshadow%3A0%201px%200%20%23fff%3Bfilter%3Aalpha%28opacity%3D20%29%3Bopacity%3A%2E2%7D%2Eclose%3Afocus%2C%2Eclose%3Ahover%7Bcolor%3A%23000%3Btext%2Ddecoration%3Anone%3Bcursor%3Apointer%3Bfilter%3Aalpha%28opacity%3D50%29%3Bopacity%3A%2E5%7Dbutton%2Eclose%7B%2Dwebkit%2Dappearance%3Anone%3Bpadding%3A0%3Bcursor%3Apointer%3Bbackground%3A0%200%3Bborder%3A0%7D%2Emodal%2Dopen%7Boverflow%3Ahidden%7D%2Emodal%7Bposition%3Afixed%3Btop%3A0%3Bright%3A0%3Bbottom%3A0%3Bleft%3A0%3Bz%2Dindex%3A1050%3Bdisplay%3Anone%3Boverflow%3Ahidden%3B%2Dwebkit%2Doverflow%2Dscrolling%3Atouch%3Boutline%3A0%7D%2Emodal%2Efade%20%2Emodal%2Ddialog%7B%2Dwebkit%2Dtransition%3A%2Dwebkit%2Dtransform%20%2E3s%20ease%2Dout%3B%2Do%2Dtransition%3A%2Do%2Dtransform%20%2E3s%20ease%2Dout%3Btransition%3Atransform%20%2E3s%20ease%2Dout%3B%2Dwebkit%2Dtransform%3Atranslate%280%2C%2D25%25%29%3B%2Dms%2Dtransform%3Atranslate%280%2C%2D25%25%29%3B%2Do%2Dtransform%3Atranslate%280%2C%2D25%25%29%3Btransform%3Atranslate%280%2C%2D25%25%29%7D%2Emodal%2Ein%20%2Emodal%2Ddialog%7B%2Dwebkit%2Dtransform%3Atranslate%280%2C0%29%3B%2Dms%2Dtransform%3Atranslate%280%2C0%29%3B%2Do%2Dtransform%3Atranslate%280%2C0%29%3Btransform%3Atranslate%280%2C0%29%7D%2Emodal%2Dopen%20%2Emodal%7Boverflow%2Dx%3Ahidden%3Boverflow%2Dy%3Aauto%7D%2Emodal%2Ddialog%7Bposition%3Arelative%3Bwidth%3Aauto%3Bmargin%3A10px%7D%2Emodal%2Dcontent%7Bposition%3Arelative%3Bbackground%2Dcolor%3A%23fff%3B%2Dwebkit%2Dbackground%2Dclip%3Apadding%2Dbox%3Bbackground%2Dclip%3Apadding%2Dbox%3Bborder%3A1px%20solid%20%23999%3Bborder%3A1px%20solid%20rgba%280%2C0%2C0%2C%2E2%29%3Bborder%2Dradius%3A6px%3Boutline%3A0%3B%2Dwebkit%2Dbox%2Dshadow%3A0%203px%209px%20rgba%280%2C0%2C0%2C%2E5%29%3Bbox%2Dshadow%3A0%203px%209px%20rgba%280%2C0%2C0%2C%2E5%29%7D%2Emodal%2Dbackdrop%7Bposition%3Afixed%3Btop%3A0%3Bright%3A0%3Bbottom%3A0%3Bleft%3A0%3Bz%2Dindex%3A1040%3Bbackground%2Dcolor%3A%23000%7D%2Emodal%2Dbackdrop%2Efade%7Bfilter%3Aalpha%28opacity%3D0%29%3Bopacity%3A0%7D%2Emodal%2Dbackdrop%2Ein%7Bfilter%3Aalpha%28opacity%3D50%29%3Bopacity%3A%2E5%7D%2Emodal%2Dheader%7Bmin%2Dheight%3A16%2E43px%3Bpadding%3A15px%3Bborder%2Dbottom%3A1px%20solid%20%23e5e5e5%7D%2Emodal%2Dheader%20%2Eclose%7Bmargin%2Dtop%3A%2D2px%7D%2Emodal%2Dtitle%7Bmargin%3A0%3Bline%2Dheight%3A1%2E42857143%7D%2Emodal%2Dbody%7Bposition%3Arelative%3Bpadding%3A15px%7D%2Emodal%2Dfooter%7Bpadding%3A15px%3Btext%2Dalign%3Aright%3Bborder%2Dtop%3A1px%20solid%20%23e5e5e5%7D%2Emodal%2Dfooter%20%2Ebtn%2B%2Ebtn%7Bmargin%2Dbottom%3A0%3Bmargin%2Dleft%3A5px%7D%2Emodal%2Dfooter%20%2Ebtn%2Dgroup%20%2Ebtn%2B%2Ebtn%7Bmargin%2Dleft%3A%2D1px%7D%2Emodal%2Dfooter%20%2Ebtn%2Dblock%2B%2Ebtn%2Dblock%7Bmargin%2Dleft%3A0%7D%2Emodal%2Dscrollbar%2Dmeasure%7Bposition%3Aabsolute%3Btop%3A%2D9999px%3Bwidth%3A50px%3Bheight%3A50px%3Boverflow%3Ascroll%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Emodal%2Ddialog%7Bwidth%3A600px%3Bmargin%3A30px%20auto%7D%2Emodal%2Dcontent%7B%2Dwebkit%2Dbox%2Dshadow%3A0%205px%2015px%20rgba%280%2C0%2C0%2C%2E5%29%3Bbox%2Dshadow%3A0%205px%2015px%20rgba%280%2C0%2C0%2C%2E5%29%7D%2Emodal%2Dsm%7Bwidth%3A300px%7D%7D%40media%20%28min%2Dwidth%3A992px%29%7B%2Emodal%2Dlg%7Bwidth%3A900px%7D%7D%2Etooltip%7Bposition%3Aabsolute%3Bz%2Dindex%3A1070%3Bdisplay%3Ablock%3Bfont%2Dfamily%3A%22Helvetica%20Neue%22%2CHelvetica%2CArial%2Csans%2Dserif%3Bfont%2Dsize%3A12px%3Bfont%2Dstyle%3Anormal%3Bfont%2Dweight%3A400%3Bline%2Dheight%3A1%2E42857143%3Btext%2Dalign%3Aleft%3Btext%2Dalign%3Astart%3Btext%2Ddecoration%3Anone%3Btext%2Dshadow%3Anone%3Btext%2Dtransform%3Anone%3Bletter%2Dspacing%3Anormal%3Bword%2Dbreak%3Anormal%3Bword%2Dspacing%3Anormal%3Bword%2Dwrap%3Anormal%3Bwhite%2Dspace%3Anormal%3Bfilter%3Aalpha%28opacity%3D0%29%3Bopacity%3A0%3Bline%2Dbreak%3Aauto%7D%2Etooltip%2Ein%7Bfilter%3Aalpha%28opacity%3D90%29%3Bopacity%3A%2E9%7D%2Etooltip%2Etop%7Bpadding%3A5px%200%3Bmargin%2Dtop%3A%2D3px%7D%2Etooltip%2Eright%7Bpadding%3A0%205px%3Bmargin%2Dleft%3A3px%7D%2Etooltip%2Ebottom%7Bpadding%3A5px%200%3Bmargin%2Dtop%3A3px%7D%2Etooltip%2Eleft%7Bpadding%3A0%205px%3Bmargin%2Dleft%3A%2D3px%7D%2Etooltip%2Dinner%7Bmax%2Dwidth%3A200px%3Bpadding%3A3px%208px%3Bcolor%3A%23fff%3Btext%2Dalign%3Acenter%3Bbackground%2Dcolor%3A%23000%3Bborder%2Dradius%3A4px%7D%2Etooltip%2Darrow%7Bposition%3Aabsolute%3Bwidth%3A0%3Bheight%3A0%3Bborder%2Dcolor%3Atransparent%3Bborder%2Dstyle%3Asolid%7D%2Etooltip%2Etop%20%2Etooltip%2Darrow%7Bbottom%3A0%3Bleft%3A50%25%3Bmargin%2Dleft%3A%2D5px%3Bborder%2Dwidth%3A5px%205px%200%3Bborder%2Dtop%2Dcolor%3A%23000%7D%2Etooltip%2Etop%2Dleft%20%2Etooltip%2Darrow%7Bright%3A5px%3Bbottom%3A0%3Bmargin%2Dbottom%3A%2D5px%3Bborder%2Dwidth%3A5px%205px%200%3Bborder%2Dtop%2Dcolor%3A%23000%7D%2Etooltip%2Etop%2Dright%20%2Etooltip%2Darrow%7Bbottom%3A0%3Bleft%3A5px%3Bmargin%2Dbottom%3A%2D5px%3Bborder%2Dwidth%3A5px%205px%200%3Bborder%2Dtop%2Dcolor%3A%23000%7D%2Etooltip%2Eright%20%2Etooltip%2Darrow%7Btop%3A50%25%3Bleft%3A0%3Bmargin%2Dtop%3A%2D5px%3Bborder%2Dwidth%3A5px%205px%205px%200%3Bborder%2Dright%2Dcolor%3A%23000%7D%2Etooltip%2Eleft%20%2Etooltip%2Darrow%7Btop%3A50%25%3Bright%3A0%3Bmargin%2Dtop%3A%2D5px%3Bborder%2Dwidth%3A5px%200%205px%205px%3Bborder%2Dleft%2Dcolor%3A%23000%7D%2Etooltip%2Ebottom%20%2Etooltip%2Darrow%7Btop%3A0%3Bleft%3A50%25%3Bmargin%2Dleft%3A%2D5px%3Bborder%2Dwidth%3A0%205px%205px%3Bborder%2Dbottom%2Dcolor%3A%23000%7D%2Etooltip%2Ebottom%2Dleft%20%2Etooltip%2Darrow%7Btop%3A0%3Bright%3A5px%3Bmargin%2Dtop%3A%2D5px%3Bborder%2Dwidth%3A0%205px%205px%3Bborder%2Dbottom%2Dcolor%3A%23000%7D%2Etooltip%2Ebottom%2Dright%20%2Etooltip%2Darrow%7Btop%3A0%3Bleft%3A5px%3Bmargin%2Dtop%3A%2D5px%3Bborder%2Dwidth%3A0%205px%205px%3Bborder%2Dbottom%2Dcolor%3A%23000%7D%2Epopover%7Bposition%3Aabsolute%3Btop%3A0%3Bleft%3A0%3Bz%2Dindex%3A1060%3Bdisplay%3Anone%3Bmax%2Dwidth%3A276px%3Bpadding%3A1px%3Bfont%2Dfamily%3A%22Helvetica%20Neue%22%2CHelvetica%2CArial%2Csans%2Dserif%3Bfont%2Dsize%3A14px%3Bfont%2Dstyle%3Anormal%3Bfont%2Dweight%3A400%3Bline%2Dheight%3A1%2E42857143%3Btext%2Dalign%3Aleft%3Btext%2Dalign%3Astart%3Btext%2Ddecoration%3Anone%3Btext%2Dshadow%3Anone%3Btext%2Dtransform%3Anone%3Bletter%2Dspacing%3Anormal%3Bword%2Dbreak%3Anormal%3Bword%2Dspacing%3Anormal%3Bword%2Dwrap%3Anormal%3Bwhite%2Dspace%3Anormal%3Bbackground%2Dcolor%3A%23fff%3B%2Dwebkit%2Dbackground%2Dclip%3Apadding%2Dbox%3Bbackground%2Dclip%3Apadding%2Dbox%3Bborder%3A1px%20solid%20%23ccc%3Bborder%3A1px%20solid%20rgba%280%2C0%2C0%2C%2E2%29%3Bborder%2Dradius%3A6px%3B%2Dwebkit%2Dbox%2Dshadow%3A0%205px%2010px%20rgba%280%2C0%2C0%2C%2E2%29%3Bbox%2Dshadow%3A0%205px%2010px%20rgba%280%2C0%2C0%2C%2E2%29%3Bline%2Dbreak%3Aauto%7D%2Epopover%2Etop%7Bmargin%2Dtop%3A%2D10px%7D%2Epopover%2Eright%7Bmargin%2Dleft%3A10px%7D%2Epopover%2Ebottom%7Bmargin%2Dtop%3A10px%7D%2Epopover%2Eleft%7Bmargin%2Dleft%3A%2D10px%7D%2Epopover%2Dtitle%7Bpadding%3A8px%2014px%3Bmargin%3A0%3Bfont%2Dsize%3A14px%3Bbackground%2Dcolor%3A%23f7f7f7%3Bborder%2Dbottom%3A1px%20solid%20%23ebebeb%3Bborder%2Dradius%3A5px%205px%200%200%7D%2Epopover%2Dcontent%7Bpadding%3A9px%2014px%7D%2Epopover%3E%2Earrow%2C%2Epopover%3E%2Earrow%3Aafter%7Bposition%3Aabsolute%3Bdisplay%3Ablock%3Bwidth%3A0%3Bheight%3A0%3Bborder%2Dcolor%3Atransparent%3Bborder%2Dstyle%3Asolid%7D%2Epopover%3E%2Earrow%7Bborder%2Dwidth%3A11px%7D%2Epopover%3E%2Earrow%3Aafter%7Bcontent%3A%22%22%3Bborder%2Dwidth%3A10px%7D%2Epopover%2Etop%3E%2Earrow%7Bbottom%3A%2D11px%3Bleft%3A50%25%3Bmargin%2Dleft%3A%2D11px%3Bborder%2Dtop%2Dcolor%3A%23999%3Bborder%2Dtop%2Dcolor%3Argba%280%2C0%2C0%2C%2E25%29%3Bborder%2Dbottom%2Dwidth%3A0%7D%2Epopover%2Etop%3E%2Earrow%3Aafter%7Bbottom%3A1px%3Bmargin%2Dleft%3A%2D10px%3Bcontent%3A%22%20%22%3Bborder%2Dtop%2Dcolor%3A%23fff%3Bborder%2Dbottom%2Dwidth%3A0%7D%2Epopover%2Eright%3E%2Earrow%7Btop%3A50%25%3Bleft%3A%2D11px%3Bmargin%2Dtop%3A%2D11px%3Bborder%2Dright%2Dcolor%3A%23999%3Bborder%2Dright%2Dcolor%3Argba%280%2C0%2C0%2C%2E25%29%3Bborder%2Dleft%2Dwidth%3A0%7D%2Epopover%2Eright%3E%2Earrow%3Aafter%7Bbottom%3A%2D10px%3Bleft%3A1px%3Bcontent%3A%22%20%22%3Bborder%2Dright%2Dcolor%3A%23fff%3Bborder%2Dleft%2Dwidth%3A0%7D%2Epopover%2Ebottom%3E%2Earrow%7Btop%3A%2D11px%3Bleft%3A50%25%3Bmargin%2Dleft%3A%2D11px%3Bborder%2Dtop%2Dwidth%3A0%3Bborder%2Dbottom%2Dcolor%3A%23999%3Bborder%2Dbottom%2Dcolor%3Argba%280%2C0%2C0%2C%2E25%29%7D%2Epopover%2Ebottom%3E%2Earrow%3Aafter%7Btop%3A1px%3Bmargin%2Dleft%3A%2D10px%3Bcontent%3A%22%20%22%3Bborder%2Dtop%2Dwidth%3A0%3Bborder%2Dbottom%2Dcolor%3A%23fff%7D%2Epopover%2Eleft%3E%2Earrow%7Btop%3A50%25%3Bright%3A%2D11px%3Bmargin%2Dtop%3A%2D11px%3Bborder%2Dright%2Dwidth%3A0%3Bborder%2Dleft%2Dcolor%3A%23999%3Bborder%2Dleft%2Dcolor%3Argba%280%2C0%2C0%2C%2E25%29%7D%2Epopover%2Eleft%3E%2Earrow%3Aafter%7Bright%3A1px%3Bbottom%3A%2D10px%3Bcontent%3A%22%20%22%3Bborder%2Dright%2Dwidth%3A0%3Bborder%2Dleft%2Dcolor%3A%23fff%7D%2Ecarousel%7Bposition%3Arelative%7D%2Ecarousel%2Dinner%7Bposition%3Arelative%3Bwidth%3A100%25%3Boverflow%3Ahidden%7D%2Ecarousel%2Dinner%3E%2Eitem%7Bposition%3Arelative%3Bdisplay%3Anone%3B%2Dwebkit%2Dtransition%3A%2E6s%20ease%2Din%2Dout%20left%3B%2Do%2Dtransition%3A%2E6s%20ease%2Din%2Dout%20left%3Btransition%3A%2E6s%20ease%2Din%2Dout%20left%7D%2Ecarousel%2Dinner%3E%2Eitem%3Ea%3Eimg%2C%2Ecarousel%2Dinner%3E%2Eitem%3Eimg%7Bline%2Dheight%3A1%7D%40media%20all%20and%20%28transform%2D3d%29%2C%28%2Dwebkit%2Dtransform%2D3d%29%7B%2Ecarousel%2Dinner%3E%2Eitem%7B%2Dwebkit%2Dtransition%3A%2Dwebkit%2Dtransform%20%2E6s%20ease%2Din%2Dout%3B%2Do%2Dtransition%3A%2Do%2Dtransform%20%2E6s%20ease%2Din%2Dout%3Btransition%3Atransform%20%2E6s%20ease%2Din%2Dout%3B%2Dwebkit%2Dbackface%2Dvisibility%3Ahidden%3Bbackface%2Dvisibility%3Ahidden%3B%2Dwebkit%2Dperspective%3A1000px%3Bperspective%3A1000px%7D%2Ecarousel%2Dinner%3E%2Eitem%2Eactive%2Eright%2C%2Ecarousel%2Dinner%3E%2Eitem%2Enext%7Bleft%3A0%3B%2Dwebkit%2Dtransform%3Atranslate3d%28100%25%2C0%2C0%29%3Btransform%3Atranslate3d%28100%25%2C0%2C0%29%7D%2Ecarousel%2Dinner%3E%2Eitem%2Eactive%2Eleft%2C%2Ecarousel%2Dinner%3E%2Eitem%2Eprev%7Bleft%3A0%3B%2Dwebkit%2Dtransform%3Atranslate3d%28%2D100%25%2C0%2C0%29%3Btransform%3Atranslate3d%28%2D100%25%2C0%2C0%29%7D%2Ecarousel%2Dinner%3E%2Eitem%2Eactive%2C%2Ecarousel%2Dinner%3E%2Eitem%2Enext%2Eleft%2C%2Ecarousel%2Dinner%3E%2Eitem%2Eprev%2Eright%7Bleft%3A0%3B%2Dwebkit%2Dtransform%3Atranslate3d%280%2C0%2C0%29%3Btransform%3Atranslate3d%280%2C0%2C0%29%7D%7D%2Ecarousel%2Dinner%3E%2Eactive%2C%2Ecarousel%2Dinner%3E%2Enext%2C%2Ecarousel%2Dinner%3E%2Eprev%7Bdisplay%3Ablock%7D%2Ecarousel%2Dinner%3E%2Eactive%7Bleft%3A0%7D%2Ecarousel%2Dinner%3E%2Enext%2C%2Ecarousel%2Dinner%3E%2Eprev%7Bposition%3Aabsolute%3Btop%3A0%3Bwidth%3A100%25%7D%2Ecarousel%2Dinner%3E%2Enext%7Bleft%3A100%25%7D%2Ecarousel%2Dinner%3E%2Eprev%7Bleft%3A%2D100%25%7D%2Ecarousel%2Dinner%3E%2Enext%2Eleft%2C%2Ecarousel%2Dinner%3E%2Eprev%2Eright%7Bleft%3A0%7D%2Ecarousel%2Dinner%3E%2Eactive%2Eleft%7Bleft%3A%2D100%25%7D%2Ecarousel%2Dinner%3E%2Eactive%2Eright%7Bleft%3A100%25%7D%2Ecarousel%2Dcontrol%7Bposition%3Aabsolute%3Btop%3A0%3Bbottom%3A0%3Bleft%3A0%3Bwidth%3A15%25%3Bfont%2Dsize%3A20px%3Bcolor%3A%23fff%3Btext%2Dalign%3Acenter%3Btext%2Dshadow%3A0%201px%202px%20rgba%280%2C0%2C0%2C%2E6%29%3Bfilter%3Aalpha%28opacity%3D50%29%3Bopacity%3A%2E5%7D%2Ecarousel%2Dcontrol%2Eleft%7Bbackground%2Dimage%3A%2Dwebkit%2Dlinear%2Dgradient%28left%2Crgba%280%2C0%2C0%2C%2E5%29%200%2Crgba%280%2C0%2C0%2C%2E0001%29%20100%25%29%3Bbackground%2Dimage%3A%2Do%2Dlinear%2Dgradient%28left%2Crgba%280%2C0%2C0%2C%2E5%29%200%2Crgba%280%2C0%2C0%2C%2E0001%29%20100%25%29%3Bbackground%2Dimage%3A%2Dwebkit%2Dgradient%28linear%2Cleft%20top%2Cright%20top%2Cfrom%28rgba%280%2C0%2C0%2C%2E5%29%29%2Cto%28rgba%280%2C0%2C0%2C%2E0001%29%29%29%3Bbackground%2Dimage%3Alinear%2Dgradient%28to%20right%2Crgba%280%2C0%2C0%2C%2E5%29%200%2Crgba%280%2C0%2C0%2C%2E0001%29%20100%25%29%3Bfilter%3Aprogid%3ADXImageTransform%2EMicrosoft%2Egradient%28startColorstr%3D%27%2380000000%27%2C%20endColorstr%3D%27%2300000000%27%2C%20GradientType%3D1%29%3Bbackground%2Drepeat%3Arepeat%2Dx%7D%2Ecarousel%2Dcontrol%2Eright%7Bright%3A0%3Bleft%3Aauto%3Bbackground%2Dimage%3A%2Dwebkit%2Dlinear%2Dgradient%28left%2Crgba%280%2C0%2C0%2C%2E0001%29%200%2Crgba%280%2C0%2C0%2C%2E5%29%20100%25%29%3Bbackground%2Dimage%3A%2Do%2Dlinear%2Dgradient%28left%2Crgba%280%2C0%2C0%2C%2E0001%29%200%2Crgba%280%2C0%2C0%2C%2E5%29%20100%25%29%3Bbackground%2Dimage%3A%2Dwebkit%2Dgradient%28linear%2Cleft%20top%2Cright%20top%2Cfrom%28rgba%280%2C0%2C0%2C%2E0001%29%29%2Cto%28rgba%280%2C0%2C0%2C%2E5%29%29%29%3Bbackground%2Dimage%3Alinear%2Dgradient%28to%20right%2Crgba%280%2C0%2C0%2C%2E0001%29%200%2Crgba%280%2C0%2C0%2C%2E5%29%20100%25%29%3Bfilter%3Aprogid%3ADXImageTransform%2EMicrosoft%2Egradient%28startColorstr%3D%27%2300000000%27%2C%20endColorstr%3D%27%2380000000%27%2C%20GradientType%3D1%29%3Bbackground%2Drepeat%3Arepeat%2Dx%7D%2Ecarousel%2Dcontrol%3Afocus%2C%2Ecarousel%2Dcontrol%3Ahover%7Bcolor%3A%23fff%3Btext%2Ddecoration%3Anone%3Bfilter%3Aalpha%28opacity%3D90%29%3Boutline%3A0%3Bopacity%3A%2E9%7D%2Ecarousel%2Dcontrol%20%2Eglyphicon%2Dchevron%2Dleft%2C%2Ecarousel%2Dcontrol%20%2Eglyphicon%2Dchevron%2Dright%2C%2Ecarousel%2Dcontrol%20%2Eicon%2Dnext%2C%2Ecarousel%2Dcontrol%20%2Eicon%2Dprev%7Bposition%3Aabsolute%3Btop%3A50%25%3Bz%2Dindex%3A5%3Bdisplay%3Ainline%2Dblock%3Bmargin%2Dtop%3A%2D10px%7D%2Ecarousel%2Dcontrol%20%2Eglyphicon%2Dchevron%2Dleft%2C%2Ecarousel%2Dcontrol%20%2Eicon%2Dprev%7Bleft%3A50%25%3Bmargin%2Dleft%3A%2D10px%7D%2Ecarousel%2Dcontrol%20%2Eglyphicon%2Dchevron%2Dright%2C%2Ecarousel%2Dcontrol%20%2Eicon%2Dnext%7Bright%3A50%25%3Bmargin%2Dright%3A%2D10px%7D%2Ecarousel%2Dcontrol%20%2Eicon%2Dnext%2C%2Ecarousel%2Dcontrol%20%2Eicon%2Dprev%7Bwidth%3A20px%3Bheight%3A20px%3Bfont%2Dfamily%3Aserif%3Bline%2Dheight%3A1%7D%2Ecarousel%2Dcontrol%20%2Eicon%2Dprev%3Abefore%7Bcontent%3A%27%5C2039%27%7D%2Ecarousel%2Dcontrol%20%2Eicon%2Dnext%3Abefore%7Bcontent%3A%27%5C203a%27%7D%2Ecarousel%2Dindicators%7Bposition%3Aabsolute%3Bbottom%3A10px%3Bleft%3A50%25%3Bz%2Dindex%3A15%3Bwidth%3A60%25%3Bpadding%2Dleft%3A0%3Bmargin%2Dleft%3A%2D30%25%3Btext%2Dalign%3Acenter%3Blist%2Dstyle%3Anone%7D%2Ecarousel%2Dindicators%20li%7Bdisplay%3Ainline%2Dblock%3Bwidth%3A10px%3Bheight%3A10px%3Bmargin%3A1px%3Btext%2Dindent%3A%2D999px%3Bcursor%3Apointer%3Bbackground%2Dcolor%3A%23000%5C9%3Bbackground%2Dcolor%3Argba%280%2C0%2C0%2C0%29%3Bborder%3A1px%20solid%20%23fff%3Bborder%2Dradius%3A10px%7D%2Ecarousel%2Dindicators%20%2Eactive%7Bwidth%3A12px%3Bheight%3A12px%3Bmargin%3A0%3Bbackground%2Dcolor%3A%23fff%7D%2Ecarousel%2Dcaption%7Bposition%3Aabsolute%3Bright%3A15%25%3Bbottom%3A20px%3Bleft%3A15%25%3Bz%2Dindex%3A10%3Bpadding%2Dtop%3A20px%3Bpadding%2Dbottom%3A20px%3Bcolor%3A%23fff%3Btext%2Dalign%3Acenter%3Btext%2Dshadow%3A0%201px%202px%20rgba%280%2C0%2C0%2C%2E6%29%7D%2Ecarousel%2Dcaption%20%2Ebtn%7Btext%2Dshadow%3Anone%7D%40media%20screen%20and%20%28min%2Dwidth%3A768px%29%7B%2Ecarousel%2Dcontrol%20%2Eglyphicon%2Dchevron%2Dleft%2C%2Ecarousel%2Dcontrol%20%2Eglyphicon%2Dchevron%2Dright%2C%2Ecarousel%2Dcontrol%20%2Eicon%2Dnext%2C%2Ecarousel%2Dcontrol%20%2Eicon%2Dprev%7Bwidth%3A30px%3Bheight%3A30px%3Bmargin%2Dtop%3A%2D15px%3Bfont%2Dsize%3A30px%7D%2Ecarousel%2Dcontrol%20%2Eglyphicon%2Dchevron%2Dleft%2C%2Ecarousel%2Dcontrol%20%2Eicon%2Dprev%7Bmargin%2Dleft%3A%2D15px%7D%2Ecarousel%2Dcontrol%20%2Eglyphicon%2Dchevron%2Dright%2C%2Ecarousel%2Dcontrol%20%2Eicon%2Dnext%7Bmargin%2Dright%3A%2D15px%7D%2Ecarousel%2Dcaption%7Bright%3A20%25%3Bleft%3A20%25%3Bpadding%2Dbottom%3A30px%7D%2Ecarousel%2Dindicators%7Bbottom%3A20px%7D%7D%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%2Dgroup%3Aafter%2C%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%2Dgroup%3Abefore%2C%2Ebtn%2Dtoolbar%3Aafter%2C%2Ebtn%2Dtoolbar%3Abefore%2C%2Eclearfix%3Aafter%2C%2Eclearfix%3Abefore%2C%2Econtainer%2Dfluid%3Aafter%2C%2Econtainer%2Dfluid%3Abefore%2C%2Econtainer%3Aafter%2C%2Econtainer%3Abefore%2C%2Edl%2Dhorizontal%20dd%3Aafter%2C%2Edl%2Dhorizontal%20dd%3Abefore%2C%2Eform%2Dhorizontal%20%2Eform%2Dgroup%3Aafter%2C%2Eform%2Dhorizontal%20%2Eform%2Dgroup%3Abefore%2C%2Emodal%2Dfooter%3Aafter%2C%2Emodal%2Dfooter%3Abefore%2C%2Enav%3Aafter%2C%2Enav%3Abefore%2C%2Enavbar%2Dcollapse%3Aafter%2C%2Enavbar%2Dcollapse%3Abefore%2C%2Enavbar%2Dheader%3Aafter%2C%2Enavbar%2Dheader%3Abefore%2C%2Enavbar%3Aafter%2C%2Enavbar%3Abefore%2C%2Epager%3Aafter%2C%2Epager%3Abefore%2C%2Epanel%2Dbody%3Aafter%2C%2Epanel%2Dbody%3Abefore%2C%2Erow%3Aafter%2C%2Erow%3Abefore%7Bdisplay%3Atable%3Bcontent%3A%22%20%22%7D%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%2Dgroup%3Aafter%2C%2Ebtn%2Dtoolbar%3Aafter%2C%2Eclearfix%3Aafter%2C%2Econtainer%2Dfluid%3Aafter%2C%2Econtainer%3Aafter%2C%2Edl%2Dhorizontal%20dd%3Aafter%2C%2Eform%2Dhorizontal%20%2Eform%2Dgroup%3Aafter%2C%2Emodal%2Dfooter%3Aafter%2C%2Enav%3Aafter%2C%2Enavbar%2Dcollapse%3Aafter%2C%2Enavbar%2Dheader%3Aafter%2C%2Enavbar%3Aafter%2C%2Epager%3Aafter%2C%2Epanel%2Dbody%3Aafter%2C%2Erow%3Aafter%7Bclear%3Aboth%7D%2Ecenter%2Dblock%7Bdisplay%3Ablock%3Bmargin%2Dright%3Aauto%3Bmargin%2Dleft%3Aauto%7D%2Epull%2Dright%7Bfloat%3Aright%21important%7D%2Epull%2Dleft%7Bfloat%3Aleft%21important%7D%2Ehide%7Bdisplay%3Anone%21important%7D%2Eshow%7Bdisplay%3Ablock%21important%7D%2Einvisible%7Bvisibility%3Ahidden%7D%2Etext%2Dhide%7Bfont%3A0%2F0%20a%3Bcolor%3Atransparent%3Btext%2Dshadow%3Anone%3Bbackground%2Dcolor%3Atransparent%3Bborder%3A0%7D%2Ehidden%7Bdisplay%3Anone%21important%7D%2Eaffix%7Bposition%3Afixed%7D%40%2Dms%2Dviewport%7Bwidth%3Adevice%2Dwidth%7D%2Evisible%2Dlg%2C%2Evisible%2Dmd%2C%2Evisible%2Dsm%2C%2Evisible%2Dxs%7Bdisplay%3Anone%21important%7D%2Evisible%2Dlg%2Dblock%2C%2Evisible%2Dlg%2Dinline%2C%2Evisible%2Dlg%2Dinline%2Dblock%2C%2Evisible%2Dmd%2Dblock%2C%2Evisible%2Dmd%2Dinline%2C%2Evisible%2Dmd%2Dinline%2Dblock%2C%2Evisible%2Dsm%2Dblock%2C%2Evisible%2Dsm%2Dinline%2C%2Evisible%2Dsm%2Dinline%2Dblock%2C%2Evisible%2Dxs%2Dblock%2C%2Evisible%2Dxs%2Dinline%2C%2Evisible%2Dxs%2Dinline%2Dblock%7Bdisplay%3Anone%21important%7D%40media%20%28max%2Dwidth%3A767px%29%7B%2Evisible%2Dxs%7Bdisplay%3Ablock%21important%7Dtable%2Evisible%2Dxs%7Bdisplay%3Atable%21important%7Dtr%2Evisible%2Dxs%7Bdisplay%3Atable%2Drow%21important%7Dtd%2Evisible%2Dxs%2Cth%2Evisible%2Dxs%7Bdisplay%3Atable%2Dcell%21important%7D%7D%40media%20%28max%2Dwidth%3A767px%29%7B%2Evisible%2Dxs%2Dblock%7Bdisplay%3Ablock%21important%7D%7D%40media%20%28max%2Dwidth%3A767px%29%7B%2Evisible%2Dxs%2Dinline%7Bdisplay%3Ainline%21important%7D%7D%40media%20%28max%2Dwidth%3A767px%29%7B%2Evisible%2Dxs%2Dinline%2Dblock%7Bdisplay%3Ainline%2Dblock%21important%7D%7D%40media%20%28min%2Dwidth%3A768px%29%20and%20%28max%2Dwidth%3A991px%29%7B%2Evisible%2Dsm%7Bdisplay%3Ablock%21important%7Dtable%2Evisible%2Dsm%7Bdisplay%3Atable%21important%7Dtr%2Evisible%2Dsm%7Bdisplay%3Atable%2Drow%21important%7Dtd%2Evisible%2Dsm%2Cth%2Evisible%2Dsm%7Bdisplay%3Atable%2Dcell%21important%7D%7D%40media%20%28min%2Dwidth%3A768px%29%20and%20%28max%2Dwidth%3A991px%29%7B%2Evisible%2Dsm%2Dblock%7Bdisplay%3Ablock%21important%7D%7D%40media%20%28min%2Dwidth%3A768px%29%20and%20%28max%2Dwidth%3A991px%29%7B%2Evisible%2Dsm%2Dinline%7Bdisplay%3Ainline%21important%7D%7D%40media%20%28min%2Dwidth%3A768px%29%20and%20%28max%2Dwidth%3A991px%29%7B%2Evisible%2Dsm%2Dinline%2Dblock%7Bdisplay%3Ainline%2Dblock%21important%7D%7D%40media%20%28min%2Dwidth%3A992px%29%20and%20%28max%2Dwidth%3A1199px%29%7B%2Evisible%2Dmd%7Bdisplay%3Ablock%21important%7Dtable%2Evisible%2Dmd%7Bdisplay%3Atable%21important%7Dtr%2Evisible%2Dmd%7Bdisplay%3Atable%2Drow%21important%7Dtd%2Evisible%2Dmd%2Cth%2Evisible%2Dmd%7Bdisplay%3Atable%2Dcell%21important%7D%7D%40media%20%28min%2Dwidth%3A992px%29%20and%20%28max%2Dwidth%3A1199px%29%7B%2Evisible%2Dmd%2Dblock%7Bdisplay%3Ablock%21important%7D%7D%40media%20%28min%2Dwidth%3A992px%29%20and%20%28max%2Dwidth%3A1199px%29%7B%2Evisible%2Dmd%2Dinline%7Bdisplay%3Ainline%21important%7D%7D%40media%20%28min%2Dwidth%3A992px%29%20and%20%28max%2Dwidth%3A1199px%29%7B%2Evisible%2Dmd%2Dinline%2Dblock%7Bdisplay%3Ainline%2Dblock%21important%7D%7D%40media%20%28min%2Dwidth%3A1200px%29%7B%2Evisible%2Dlg%7Bdisplay%3Ablock%21important%7Dtable%2Evisible%2Dlg%7Bdisplay%3Atable%21important%7Dtr%2Evisible%2Dlg%7Bdisplay%3Atable%2Drow%21important%7Dtd%2Evisible%2Dlg%2Cth%2Evisible%2Dlg%7Bdisplay%3Atable%2Dcell%21important%7D%7D%40media%20%28min%2Dwidth%3A1200px%29%7B%2Evisible%2Dlg%2Dblock%7Bdisplay%3Ablock%21important%7D%7D%40media%20%28min%2Dwidth%3A1200px%29%7B%2Evisible%2Dlg%2Dinline%7Bdisplay%3Ainline%21important%7D%7D%40media%20%28min%2Dwidth%3A1200px%29%7B%2Evisible%2Dlg%2Dinline%2Dblock%7Bdisplay%3Ainline%2Dblock%21important%7D%7D%40media%20%28max%2Dwidth%3A767px%29%7B%2Ehidden%2Dxs%7Bdisplay%3Anone%21important%7D%7D%40media%20%28min%2Dwidth%3A768px%29%20and%20%28max%2Dwidth%3A991px%29%7B%2Ehidden%2Dsm%7Bdisplay%3Anone%21important%7D%7D%40media%20%28min%2Dwidth%3A992px%29%20and%20%28max%2Dwidth%3A1199px%29%7B%2Ehidden%2Dmd%7Bdisplay%3Anone%21important%7D%7D%40media%20%28min%2Dwidth%3A1200px%29%7B%2Ehidden%2Dlg%7Bdisplay%3Anone%21important%7D%7D%2Evisible%2Dprint%7Bdisplay%3Anone%21important%7D%40media%20print%7B%2Evisible%2Dprint%7Bdisplay%3Ablock%21important%7Dtable%2Evisible%2Dprint%7Bdisplay%3Atable%21important%7Dtr%2Evisible%2Dprint%7Bdisplay%3Atable%2Drow%21important%7Dtd%2Evisible%2Dprint%2Cth%2Evisible%2Dprint%7Bdisplay%3Atable%2Dcell%21important%7D%7D%2Evisible%2Dprint%2Dblock%7Bdisplay%3Anone%21important%7D%40media%20print%7B%2Evisible%2Dprint%2Dblock%7Bdisplay%3Ablock%21important%7D%7D%2Evisible%2Dprint%2Dinline%7Bdisplay%3Anone%21important%7D%40media%20print%7B%2Evisible%2Dprint%2Dinline%7Bdisplay%3Ainline%21important%7D%7D%2Evisible%2Dprint%2Dinline%2Dblock%7Bdisplay%3Anone%21important%7D%40media%20print%7B%2Evisible%2Dprint%2Dinline%2Dblock%7Bdisplay%3Ainline%2Dblock%21important%7D%7D%40media%20print%7B%2Ehidden%2Dprint%7Bdisplay%3Anone%21important%7D%7D%0A" rel="stylesheet" />
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
19 <script src="data:application/x-javascript;base64,LyohCiAqIEJvb3RzdHJhcCB2My4zLjUgKGh0dHA6Ly9nZXRib290c3RyYXAuY29tKQogKiBDb3B5cmlnaHQgMjAxMS0yMDE1IFR3aXR0ZXIsIEluYy4KICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlCiAqLwppZigidW5kZWZpbmVkIj09dHlwZW9mIGpRdWVyeSl0aHJvdyBuZXcgRXJyb3IoIkJvb3RzdHJhcCdzIEphdmFTY3JpcHQgcmVxdWlyZXMgalF1ZXJ5Iik7K2Z1bmN0aW9uKGEpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj1hLmZuLmpxdWVyeS5zcGxpdCgiICIpWzBdLnNwbGl0KCIuIik7aWYoYlswXTwyJiZiWzFdPDl8fDE9PWJbMF0mJjk9PWJbMV0mJmJbMl08MSl0aHJvdyBuZXcgRXJyb3IoIkJvb3RzdHJhcCdzIEphdmFTY3JpcHQgcmVxdWlyZXMgalF1ZXJ5IHZlcnNpb24gMS45LjEgb3IgaGlnaGVyIil9KGpRdWVyeSksK2Z1bmN0aW9uKGEpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBiKCl7dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYm9vdHN0cmFwIiksYj17V2Via2l0VHJhbnNpdGlvbjoid2Via2l0VHJhbnNpdGlvbkVuZCIsTW96VHJhbnNpdGlvbjoidHJhbnNpdGlvbmVuZCIsT1RyYW5zaXRpb246Im9UcmFuc2l0aW9uRW5kIG90cmFuc2l0aW9uZW5kIix0cmFuc2l0aW9uOiJ0cmFuc2l0aW9uZW5kIn07Zm9yKHZhciBjIGluIGIpaWYodm9pZCAwIT09YS5zdHlsZVtjXSlyZXR1cm57ZW5kOmJbY119O3JldHVybiExfWEuZm4uZW11bGF0ZVRyYW5zaXRpb25FbmQ9ZnVuY3Rpb24oYil7dmFyIGM9ITEsZD10aGlzO2EodGhpcykub25lKCJic1RyYW5zaXRpb25FbmQiLGZ1bmN0aW9uKCl7Yz0hMH0pO3ZhciBlPWZ1bmN0aW9uKCl7Y3x8YShkKS50cmlnZ2VyKGEuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCl9O3JldHVybiBzZXRUaW1lb3V0KGUsYiksdGhpc30sYShmdW5jdGlvbigpe2Euc3VwcG9ydC50cmFuc2l0aW9uPWIoKSxhLnN1cHBvcnQudHJhbnNpdGlvbiYmKGEuZXZlbnQuc3BlY2lhbC5ic1RyYW5zaXRpb25FbmQ9e2JpbmRUeXBlOmEuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCxkZWxlZ2F0ZVR5cGU6YS5zdXBwb3J0LnRyYW5zaXRpb24uZW5kLGhhbmRsZTpmdW5jdGlvbihiKXtyZXR1cm4gYShiLnRhcmdldCkuaXModGhpcyk/Yi5oYW5kbGVPYmouaGFuZGxlci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6dm9pZCAwfX0pfSl9KGpRdWVyeSksK2Z1bmN0aW9uKGEpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBiKGIpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYz1hKHRoaXMpLGU9Yy5kYXRhKCJicy5hbGVydCIpO2V8fGMuZGF0YSgiYnMuYWxlcnQiLGU9bmV3IGQodGhpcykpLCJzdHJpbmciPT10eXBlb2YgYiYmZVtiXS5jYWxsKGMpfSl9dmFyIGM9J1tkYXRhLWRpc21pc3M9ImFsZXJ0Il0nLGQ9ZnVuY3Rpb24oYil7YShiKS5vbigiY2xpY2siLGMsdGhpcy5jbG9zZSl9O2QuVkVSU0lPTj0iMy4zLjUiLGQuVFJBTlNJVElPTl9EVVJBVElPTj0xNTAsZC5wcm90b3R5cGUuY2xvc2U9ZnVuY3Rpb24oYil7ZnVuY3Rpb24gYygpe2cuZGV0YWNoKCkudHJpZ2dlcigiY2xvc2VkLmJzLmFsZXJ0IikucmVtb3ZlKCl9dmFyIGU9YSh0aGlzKSxmPWUuYXR0cigiZGF0YS10YXJnZXQiKTtmfHwoZj1lLmF0dHIoImhyZWYiKSxmPWYmJmYucmVwbGFjZSgvLiooPz0jW15cc10qJCkvLCIiKSk7dmFyIGc9YShmKTtiJiZiLnByZXZlbnREZWZhdWx0KCksZy5sZW5ndGh8fChnPWUuY2xvc2VzdCgiLmFsZXJ0IikpLGcudHJpZ2dlcihiPWEuRXZlbnQoImNsb3NlLmJzLmFsZXJ0IikpLGIuaXNEZWZhdWx0UHJldmVudGVkKCl8fChnLnJlbW92ZUNsYXNzKCJpbiIpLGEuc3VwcG9ydC50cmFuc2l0aW9uJiZnLmhhc0NsYXNzKCJmYWRlIik/Zy5vbmUoImJzVHJhbnNpdGlvbkVuZCIsYykuZW11bGF0ZVRyYW5zaXRpb25FbmQoZC5UUkFOU0lUSU9OX0RVUkFUSU9OKTpjKCkpfTt2YXIgZT1hLmZuLmFsZXJ0O2EuZm4uYWxlcnQ9YixhLmZuLmFsZXJ0LkNvbnN0cnVjdG9yPWQsYS5mbi5hbGVydC5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGEuZm4uYWxlcnQ9ZSx0aGlzfSxhKGRvY3VtZW50KS5vbigiY2xpY2suYnMuYWxlcnQuZGF0YS1hcGkiLGMsZC5wcm90b3R5cGUuY2xvc2UpfShqUXVlcnkpLCtmdW5jdGlvbihhKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gYihiKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGQ9YSh0aGlzKSxlPWQuZGF0YSgiYnMuYnV0dG9uIiksZj0ib2JqZWN0Ij09dHlwZW9mIGImJmI7ZXx8ZC5kYXRhKCJicy5idXR0b24iLGU9bmV3IGModGhpcyxmKSksInRvZ2dsZSI9PWI/ZS50b2dnbGUoKTpiJiZlLnNldFN0YXRlKGIpfSl9dmFyIGM9ZnVuY3Rpb24oYixkKXt0aGlzLiRlbGVtZW50PWEoYiksdGhpcy5vcHRpb25zPWEuZXh0ZW5kKHt9LGMuREVGQVVMVFMsZCksdGhpcy5pc0xvYWRpbmc9ITF9O2MuVkVSU0lPTj0iMy4zLjUiLGMuREVGQVVMVFM9e2xvYWRpbmdUZXh0OiJsb2FkaW5nLi4uIn0sYy5wcm90b3R5cGUuc2V0U3RhdGU9ZnVuY3Rpb24oYil7dmFyIGM9ImRpc2FibGVkIixkPXRoaXMuJGVsZW1lbnQsZT1kLmlzKCJpbnB1dCIpPyJ2YWwiOiJodG1sIixmPWQuZGF0YSgpO2IrPSJUZXh0IixudWxsPT1mLnJlc2V0VGV4dCYmZC5kYXRhKCJyZXNldFRleHQiLGRbZV0oKSksc2V0VGltZW91dChhLnByb3h5KGZ1bmN0aW9uKCl7ZFtlXShudWxsPT1mW2JdP3RoaXMub3B0aW9uc1tiXTpmW2JdKSwibG9hZGluZ1RleHQiPT1iPyh0aGlzLmlzTG9hZGluZz0hMCxkLmFkZENsYXNzKGMpLmF0dHIoYyxjKSk6dGhpcy5pc0xvYWRpbmcmJih0aGlzLmlzTG9hZGluZz0hMSxkLnJlbW92ZUNsYXNzKGMpLnJlbW92ZUF0dHIoYykpfSx0aGlzKSwwKX0sYy5wcm90b3R5cGUudG9nZ2xlPWZ1bmN0aW9uKCl7dmFyIGE9ITAsYj10aGlzLiRlbGVtZW50LmNsb3Nlc3QoJ1tkYXRhLXRvZ2dsZT0iYnV0dG9ucyJdJyk7aWYoYi5sZW5ndGgpe3ZhciBjPXRoaXMuJGVsZW1lbnQuZmluZCgiaW5wdXQiKTsicmFkaW8iPT1jLnByb3AoInR5cGUiKT8oYy5wcm9wKCJjaGVja2VkIikmJihhPSExKSxiLmZpbmQoIi5hY3RpdmUiKS5yZW1vdmVDbGFzcygiYWN0aXZlIiksdGhpcy4kZWxlbWVudC5hZGRDbGFzcygiYWN0aXZlIikpOiJjaGVja2JveCI9PWMucHJvcCgidHlwZSIpJiYoYy5wcm9wKCJjaGVja2VkIikhPT10aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCJhY3RpdmUiKSYmKGE9ITEpLHRoaXMuJGVsZW1lbnQudG9nZ2xlQ2xhc3MoImFjdGl2ZSIpKSxjLnByb3AoImNoZWNrZWQiLHRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoImFjdGl2ZSIpKSxhJiZjLnRyaWdnZXIoImNoYW5nZSIpfWVsc2UgdGhpcy4kZWxlbWVudC5hdHRyKCJhcmlhLXByZXNzZWQiLCF0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCJhY3RpdmUiKSksdGhpcy4kZWxlbWVudC50b2dnbGVDbGFzcygiYWN0aXZlIil9O3ZhciBkPWEuZm4uYnV0dG9uO2EuZm4uYnV0dG9uPWIsYS5mbi5idXR0b24uQ29uc3RydWN0b3I9YyxhLmZuLmJ1dHRvbi5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGEuZm4uYnV0dG9uPWQsdGhpc30sYShkb2N1bWVudCkub24oImNsaWNrLmJzLmJ1dHRvbi5kYXRhLWFwaSIsJ1tkYXRhLXRvZ2dsZV49ImJ1dHRvbiJdJyxmdW5jdGlvbihjKXt2YXIgZD1hKGMudGFyZ2V0KTtkLmhhc0NsYXNzKCJidG4iKXx8KGQ9ZC5jbG9zZXN0KCIuYnRuIikpLGIuY2FsbChkLCJ0b2dnbGUiKSxhKGMudGFyZ2V0KS5pcygnaW5wdXRbdHlwZT0icmFkaW8iXScpfHxhKGMudGFyZ2V0KS5pcygnaW5wdXRbdHlwZT0iY2hlY2tib3giXScpfHxjLnByZXZlbnREZWZhdWx0KCl9KS5vbigiZm9jdXMuYnMuYnV0dG9uLmRhdGEtYXBpIGJsdXIuYnMuYnV0dG9uLmRhdGEtYXBpIiwnW2RhdGEtdG9nZ2xlXj0iYnV0dG9uIl0nLGZ1bmN0aW9uKGIpe2EoYi50YXJnZXQpLmNsb3Nlc3QoIi5idG4iKS50b2dnbGVDbGFzcygiZm9jdXMiLC9eZm9jdXMoaW4pPyQvLnRlc3QoYi50eXBlKSl9KX0oalF1ZXJ5KSwrZnVuY3Rpb24oYSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGIoYil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBkPWEodGhpcyksZT1kLmRhdGEoImJzLmNhcm91c2VsIiksZj1hLmV4dGVuZCh7fSxjLkRFRkFVTFRTLGQuZGF0YSgpLCJvYmplY3QiPT10eXBlb2YgYiYmYiksZz0ic3RyaW5nIj09dHlwZW9mIGI/YjpmLnNsaWRlO2V8fGQuZGF0YSgiYnMuY2Fyb3VzZWwiLGU9bmV3IGModGhpcyxmKSksIm51bWJlciI9PXR5cGVvZiBiP2UudG8oYik6Zz9lW2ddKCk6Zi5pbnRlcnZhbCYmZS5wYXVzZSgpLmN5Y2xlKCl9KX12YXIgYz1mdW5jdGlvbihiLGMpe3RoaXMuJGVsZW1lbnQ9YShiKSx0aGlzLiRpbmRpY2F0b3JzPXRoaXMuJGVsZW1lbnQuZmluZCgiLmNhcm91c2VsLWluZGljYXRvcnMiKSx0aGlzLm9wdGlvbnM9Yyx0aGlzLnBhdXNlZD1udWxsLHRoaXMuc2xpZGluZz1udWxsLHRoaXMuaW50ZXJ2YWw9bnVsbCx0aGlzLiRhY3RpdmU9bnVsbCx0aGlzLiRpdGVtcz1udWxsLHRoaXMub3B0aW9ucy5rZXlib2FyZCYmdGhpcy4kZWxlbWVudC5vbigia2V5ZG93bi5icy5jYXJvdXNlbCIsYS5wcm94eSh0aGlzLmtleWRvd24sdGhpcykpLCJob3ZlciI9PXRoaXMub3B0aW9ucy5wYXVzZSYmISgib250b3VjaHN0YXJ0ImluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkmJnRoaXMuJGVsZW1lbnQub24oIm1vdXNlZW50ZXIuYnMuY2Fyb3VzZWwiLGEucHJveHkodGhpcy5wYXVzZSx0aGlzKSkub24oIm1vdXNlbGVhdmUuYnMuY2Fyb3VzZWwiLGEucHJveHkodGhpcy5jeWNsZSx0aGlzKSl9O2MuVkVSU0lPTj0iMy4zLjUiLGMuVFJBTlNJVElPTl9EVVJBVElPTj02MDAsYy5ERUZBVUxUUz17aW50ZXJ2YWw6NWUzLHBhdXNlOiJob3ZlciIsd3JhcDohMCxrZXlib2FyZDohMH0sYy5wcm90b3R5cGUua2V5ZG93bj1mdW5jdGlvbihhKXtpZighL2lucHV0fHRleHRhcmVhL2kudGVzdChhLnRhcmdldC50YWdOYW1lKSl7c3dpdGNoKGEud2hpY2gpe2Nhc2UgMzc6dGhpcy5wcmV2KCk7YnJlYWs7Y2FzZSAzOTp0aGlzLm5leHQoKTticmVhaztkZWZhdWx0OnJldHVybn1hLnByZXZlbnREZWZhdWx0KCl9fSxjLnByb3RvdHlwZS5jeWNsZT1mdW5jdGlvbihiKXtyZXR1cm4gYnx8KHRoaXMucGF1c2VkPSExKSx0aGlzLmludGVydmFsJiZjbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWwpLHRoaXMub3B0aW9ucy5pbnRlcnZhbCYmIXRoaXMucGF1c2VkJiYodGhpcy5pbnRlcnZhbD1zZXRJbnRlcnZhbChhLnByb3h5KHRoaXMubmV4dCx0aGlzKSx0aGlzLm9wdGlvbnMuaW50ZXJ2YWwpKSx0aGlzfSxjLnByb3RvdHlwZS5nZXRJdGVtSW5kZXg9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuJGl0ZW1zPWEucGFyZW50KCkuY2hpbGRyZW4oIi5pdGVtIiksdGhpcy4kaXRlbXMuaW5kZXgoYXx8dGhpcy4kYWN0aXZlKX0sYy5wcm90b3R5cGUuZ2V0SXRlbUZvckRpcmVjdGlvbj1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuZ2V0SXRlbUluZGV4KGIpLGQ9InByZXYiPT1hJiYwPT09Y3x8Im5leHQiPT1hJiZjPT10aGlzLiRpdGVtcy5sZW5ndGgtMTtpZihkJiYhdGhpcy5vcHRpb25zLndyYXApcmV0dXJuIGI7dmFyIGU9InByZXYiPT1hPy0xOjEsZj0oYytlKSV0aGlzLiRpdGVtcy5sZW5ndGg7cmV0dXJuIHRoaXMuJGl0ZW1zLmVxKGYpfSxjLnByb3RvdHlwZS50bz1mdW5jdGlvbihhKXt2YXIgYj10aGlzLGM9dGhpcy5nZXRJdGVtSW5kZXgodGhpcy4kYWN0aXZlPXRoaXMuJGVsZW1lbnQuZmluZCgiLml0ZW0uYWN0aXZlIikpO3JldHVybiBhPnRoaXMuJGl0ZW1zLmxlbmd0aC0xfHwwPmE/dm9pZCAwOnRoaXMuc2xpZGluZz90aGlzLiRlbGVtZW50Lm9uZSgic2xpZC5icy5jYXJvdXNlbCIsZnVuY3Rpb24oKXtiLnRvKGEpfSk6Yz09YT90aGlzLnBhdXNlKCkuY3ljbGUoKTp0aGlzLnNsaWRlKGE+Yz8ibmV4dCI6InByZXYiLHRoaXMuJGl0ZW1zLmVxKGEpKX0sYy5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oYil7cmV0dXJuIGJ8fCh0aGlzLnBhdXNlZD0hMCksdGhpcy4kZWxlbWVudC5maW5kKCIubmV4dCwgLnByZXYiKS5sZW5ndGgmJmEuc3VwcG9ydC50cmFuc2l0aW9uJiYodGhpcy4kZWxlbWVudC50cmlnZ2VyKGEuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCksdGhpcy5jeWNsZSghMCkpLHRoaXMuaW50ZXJ2YWw9Y2xlYXJJbnRlcnZhbCh0aGlzLmludGVydmFsKSx0aGlzfSxjLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2xpZGluZz92b2lkIDA6dGhpcy5zbGlkZSgibmV4dCIpfSxjLnByb3RvdHlwZS5wcmV2PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2xpZGluZz92b2lkIDA6dGhpcy5zbGlkZSgicHJldiIpfSxjLnByb3RvdHlwZS5zbGlkZT1mdW5jdGlvbihiLGQpe3ZhciBlPXRoaXMuJGVsZW1lbnQuZmluZCgiLml0ZW0uYWN0aXZlIiksZj1kfHx0aGlzLmdldEl0ZW1Gb3JEaXJlY3Rpb24oYixlKSxnPXRoaXMuaW50ZXJ2YWwsaD0ibmV4dCI9PWI/ImxlZnQiOiJyaWdodCIsaT10aGlzO2lmKGYuaGFzQ2xhc3MoImFjdGl2ZSIpKXJldHVybiB0aGlzLnNsaWRpbmc9ITE7dmFyIGo9ZlswXSxrPWEuRXZlbnQoInNsaWRlLmJzLmNhcm91c2VsIix7cmVsYXRlZFRhcmdldDpqLGRpcmVjdGlvbjpofSk7aWYodGhpcy4kZWxlbWVudC50cmlnZ2VyKGspLCFrLmlzRGVmYXVsdFByZXZlbnRlZCgpKXtpZih0aGlzLnNsaWRpbmc9ITAsZyYmdGhpcy5wYXVzZSgpLHRoaXMuJGluZGljYXRvcnMubGVuZ3RoKXt0aGlzLiRpbmRpY2F0b3JzLmZpbmQoIi5hY3RpdmUiKS5yZW1vdmVDbGFzcygiYWN0aXZlIik7dmFyIGw9YSh0aGlzLiRpbmRpY2F0b3JzLmNoaWxkcmVuKClbdGhpcy5nZXRJdGVtSW5kZXgoZildKTtsJiZsLmFkZENsYXNzKCJhY3RpdmUiKX12YXIgbT1hLkV2ZW50KCJzbGlkLmJzLmNhcm91c2VsIix7cmVsYXRlZFRhcmdldDpqLGRpcmVjdGlvbjpofSk7cmV0dXJuIGEuc3VwcG9ydC50cmFuc2l0aW9uJiZ0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCJzbGlkZSIpPyhmLmFkZENsYXNzKGIpLGZbMF0ub2Zmc2V0V2lkdGgsZS5hZGRDbGFzcyhoKSxmLmFkZENsYXNzKGgpLGUub25lKCJic1RyYW5zaXRpb25FbmQiLGZ1bmN0aW9uKCl7Zi5yZW1vdmVDbGFzcyhbYixoXS5qb2luKCIgIikpLmFkZENsYXNzKCJhY3RpdmUiKSxlLnJlbW92ZUNsYXNzKFsiYWN0aXZlIixoXS5qb2luKCIgIikpLGkuc2xpZGluZz0hMSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aS4kZWxlbWVudC50cmlnZ2VyKG0pfSwwKX0pLmVtdWxhdGVUcmFuc2l0aW9uRW5kKGMuVFJBTlNJVElPTl9EVVJBVElPTikpOihlLnJlbW92ZUNsYXNzKCJhY3RpdmUiKSxmLmFkZENsYXNzKCJhY3RpdmUiKSx0aGlzLnNsaWRpbmc9ITEsdGhpcy4kZWxlbWVudC50cmlnZ2VyKG0pKSxnJiZ0aGlzLmN5Y2xlKCksdGhpc319O3ZhciBkPWEuZm4uY2Fyb3VzZWw7YS5mbi5jYXJvdXNlbD1iLGEuZm4uY2Fyb3VzZWwuQ29uc3RydWN0b3I9YyxhLmZuLmNhcm91c2VsLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gYS5mbi5jYXJvdXNlbD1kLHRoaXN9O3ZhciBlPWZ1bmN0aW9uKGMpe3ZhciBkLGU9YSh0aGlzKSxmPWEoZS5hdHRyKCJkYXRhLXRhcmdldCIpfHwoZD1lLmF0dHIoImhyZWYiKSkmJmQucmVwbGFjZSgvLiooPz0jW15cc10rJCkvLCIiKSk7aWYoZi5oYXNDbGFzcygiY2Fyb3VzZWwiKSl7dmFyIGc9YS5leHRlbmQoe30sZi5kYXRhKCksZS5kYXRhKCkpLGg9ZS5hdHRyKCJkYXRhLXNsaWRlLXRvIik7aCYmKGcuaW50ZXJ2YWw9ITEpLGIuY2FsbChmLGcpLGgmJmYuZGF0YSgiYnMuY2Fyb3VzZWwiKS50byhoKSxjLnByZXZlbnREZWZhdWx0KCl9fTthKGRvY3VtZW50KS5vbigiY2xpY2suYnMuY2Fyb3VzZWwuZGF0YS1hcGkiLCJbZGF0YS1zbGlkZV0iLGUpLm9uKCJjbGljay5icy5jYXJvdXNlbC5kYXRhLWFwaSIsIltkYXRhLXNsaWRlLXRvXSIsZSksYSh3aW5kb3cpLm9uKCJsb2FkIixmdW5jdGlvbigpe2EoJ1tkYXRhLXJpZGU9ImNhcm91c2VsIl0nKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGM9YSh0aGlzKTtiLmNhbGwoYyxjLmRhdGEoKSl9KX0pfShqUXVlcnkpLCtmdW5jdGlvbihhKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gYihiKXt2YXIgYyxkPWIuYXR0cigiZGF0YS10YXJnZXQiKXx8KGM9Yi5hdHRyKCJocmVmIikpJiZjLnJlcGxhY2UoLy4qKD89I1teXHNdKyQpLywiIik7cmV0dXJuIGEoZCl9ZnVuY3Rpb24gYyhiKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGM9YSh0aGlzKSxlPWMuZGF0YSgiYnMuY29sbGFwc2UiKSxmPWEuZXh0ZW5kKHt9LGQuREVGQVVMVFMsYy5kYXRhKCksIm9iamVjdCI9PXR5cGVvZiBiJiZiKTshZSYmZi50b2dnbGUmJi9zaG93fGhpZGUvLnRlc3QoYikmJihmLnRvZ2dsZT0hMSksZXx8Yy5kYXRhKCJicy5jb2xsYXBzZSIsZT1uZXcgZCh0aGlzLGYpKSwic3RyaW5nIj09dHlwZW9mIGImJmVbYl0oKX0pfXZhciBkPWZ1bmN0aW9uKGIsYyl7dGhpcy4kZWxlbWVudD1hKGIpLHRoaXMub3B0aW9ucz1hLmV4dGVuZCh7fSxkLkRFRkFVTFRTLGMpLHRoaXMuJHRyaWdnZXI9YSgnW2RhdGEtdG9nZ2xlPSJjb2xsYXBzZSJdW2hyZWY9IiMnK2IuaWQrJyJdLFtkYXRhLXRvZ2dsZT0iY29sbGFwc2UiXVtkYXRhLXRhcmdldD0iIycrYi5pZCsnIl0nKSx0aGlzLnRyYW5zaXRpb25pbmc9bnVsbCx0aGlzLm9wdGlvbnMucGFyZW50P3RoaXMuJHBhcmVudD10aGlzLmdldFBhcmVudCgpOnRoaXMuYWRkQXJpYUFuZENvbGxhcHNlZENsYXNzKHRoaXMuJGVsZW1lbnQsdGhpcy4kdHJpZ2dlciksdGhpcy5vcHRpb25zLnRvZ2dsZSYmdGhpcy50b2dnbGUoKX07ZC5WRVJTSU9OPSIzLjMuNSIsZC5UUkFOU0lUSU9OX0RVUkFUSU9OPTM1MCxkLkRFRkFVTFRTPXt0b2dnbGU6ITB9LGQucHJvdG90eXBlLmRpbWVuc2lvbj1mdW5jdGlvbigpe3ZhciBhPXRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoIndpZHRoIik7cmV0dXJuIGE/IndpZHRoIjoiaGVpZ2h0In0sZC5wcm90b3R5cGUuc2hvdz1mdW5jdGlvbigpe2lmKCF0aGlzLnRyYW5zaXRpb25pbmcmJiF0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCJpbiIpKXt2YXIgYixlPXRoaXMuJHBhcmVudCYmdGhpcy4kcGFyZW50LmNoaWxkcmVuKCIucGFuZWwiKS5jaGlsZHJlbigiLmluLCAuY29sbGFwc2luZyIpO2lmKCEoZSYmZS5sZW5ndGgmJihiPWUuZGF0YSgiYnMuY29sbGFwc2UiKSxiJiZiLnRyYW5zaXRpb25pbmcpKSl7dmFyIGY9YS5FdmVudCgic2hvdy5icy5jb2xsYXBzZSIpO2lmKHRoaXMuJGVsZW1lbnQudHJpZ2dlcihmKSwhZi5pc0RlZmF1bHRQcmV2ZW50ZWQoKSl7ZSYmZS5sZW5ndGgmJihjLmNhbGwoZSwiaGlkZSIpLGJ8fGUuZGF0YSgiYnMuY29sbGFwc2UiLG51bGwpKTt2YXIgZz10aGlzLmRpbWVuc2lvbigpO3RoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoImNvbGxhcHNlIikuYWRkQ2xhc3MoImNvbGxhcHNpbmciKVtnXSgwKS5hdHRyKCJhcmlhLWV4cGFuZGVkIiwhMCksdGhpcy4kdHJpZ2dlci5yZW1vdmVDbGFzcygiY29sbGFwc2VkIikuYXR0cigiYXJpYS1leHBhbmRlZCIsITApLHRoaXMudHJhbnNpdGlvbmluZz0xO3ZhciBoPWZ1bmN0aW9uKCl7dGhpcy4kZWxlbWVudC5yZW1vdmVDbGFzcygiY29sbGFwc2luZyIpLmFkZENsYXNzKCJjb2xsYXBzZSBpbiIpW2ddKCIiKSx0aGlzLnRyYW5zaXRpb25pbmc9MCx0aGlzLiRlbGVtZW50LnRyaWdnZXIoInNob3duLmJzLmNvbGxhcHNlIil9O2lmKCFhLnN1cHBvcnQudHJhbnNpdGlvbilyZXR1cm4gaC5jYWxsKHRoaXMpO3ZhciBpPWEuY2FtZWxDYXNlKFsic2Nyb2xsIixnXS5qb2luKCItIikpO3RoaXMuJGVsZW1lbnQub25lKCJic1RyYW5zaXRpb25FbmQiLGEucHJveHkoaCx0aGlzKSkuZW11bGF0ZVRyYW5zaXRpb25FbmQoZC5UUkFOU0lUSU9OX0RVUkFUSU9OKVtnXSh0aGlzLiRlbGVtZW50WzBdW2ldKX19fX0sZC5wcm90b3R5cGUuaGlkZT1mdW5jdGlvbigpe2lmKCF0aGlzLnRyYW5zaXRpb25pbmcmJnRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoImluIikpe3ZhciBiPWEuRXZlbnQoImhpZGUuYnMuY29sbGFwc2UiKTtpZih0aGlzLiRlbGVtZW50LnRyaWdnZXIoYiksIWIuaXNEZWZhdWx0UHJldmVudGVkKCkpe3ZhciBjPXRoaXMuZGltZW5zaW9uKCk7dGhpcy4kZWxlbWVudFtjXSh0aGlzLiRlbGVtZW50W2NdKCkpWzBdLm9mZnNldEhlaWdodCx0aGlzLiRlbGVtZW50LmFkZENsYXNzKCJjb2xsYXBzaW5nIikucmVtb3ZlQ2xhc3MoImNvbGxhcHNlIGluIikuYXR0cigiYXJpYS1leHBhbmRlZCIsITEpLHRoaXMuJHRyaWdnZXIuYWRkQ2xhc3MoImNvbGxhcHNlZCIpLmF0dHIoImFyaWEtZXhwYW5kZWQiLCExKSx0aGlzLnRyYW5zaXRpb25pbmc9MTt2YXIgZT1mdW5jdGlvbigpe3RoaXMudHJhbnNpdGlvbmluZz0wLHRoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoImNvbGxhcHNpbmciKS5hZGRDbGFzcygiY29sbGFwc2UiKS50cmlnZ2VyKCJoaWRkZW4uYnMuY29sbGFwc2UiKX07cmV0dXJuIGEuc3VwcG9ydC50cmFuc2l0aW9uP3ZvaWQgdGhpcy4kZWxlbWVudFtjXSgwKS5vbmUoImJzVHJhbnNpdGlvbkVuZCIsYS5wcm94eShlLHRoaXMpKS5lbXVsYXRlVHJhbnNpdGlvbkVuZChkLlRSQU5TSVRJT05fRFVSQVRJT04pOmUuY2FsbCh0aGlzKX19fSxkLnByb3RvdHlwZS50b2dnbGU9ZnVuY3Rpb24oKXt0aGlzW3RoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoImluIik/ImhpZGUiOiJzaG93Il0oKX0sZC5wcm90b3R5cGUuZ2V0UGFyZW50PWZ1bmN0aW9uKCl7cmV0dXJuIGEodGhpcy5vcHRpb25zLnBhcmVudCkuZmluZCgnW2RhdGEtdG9nZ2xlPSJjb2xsYXBzZSJdW2RhdGEtcGFyZW50PSInK3RoaXMub3B0aW9ucy5wYXJlbnQrJyJdJykuZWFjaChhLnByb3h5KGZ1bmN0aW9uKGMsZCl7dmFyIGU9YShkKTt0aGlzLmFkZEFyaWFBbmRDb2xsYXBzZWRDbGFzcyhiKGUpLGUpfSx0aGlzKSkuZW5kKCl9LGQucHJvdG90eXBlLmFkZEFyaWFBbmRDb2xsYXBzZWRDbGFzcz1mdW5jdGlvbihhLGIpe3ZhciBjPWEuaGFzQ2xhc3MoImluIik7YS5hdHRyKCJhcmlhLWV4cGFuZGVkIixjKSxiLnRvZ2dsZUNsYXNzKCJjb2xsYXBzZWQiLCFjKS5hdHRyKCJhcmlhLWV4cGFuZGVkIixjKX07dmFyIGU9YS5mbi5jb2xsYXBzZTthLmZuLmNvbGxhcHNlPWMsYS5mbi5jb2xsYXBzZS5Db25zdHJ1Y3Rvcj1kLGEuZm4uY29sbGFwc2Uubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBhLmZuLmNvbGxhcHNlPWUsdGhpc30sYShkb2N1bWVudCkub24oImNsaWNrLmJzLmNvbGxhcHNlLmRhdGEtYXBpIiwnW2RhdGEtdG9nZ2xlPSJjb2xsYXBzZSJdJyxmdW5jdGlvbihkKXt2YXIgZT1hKHRoaXMpO2UuYXR0cigiZGF0YS10YXJnZXQiKXx8ZC5wcmV2ZW50RGVmYXVsdCgpO3ZhciBmPWIoZSksZz1mLmRhdGEoImJzLmNvbGxhcHNlIiksaD1nPyJ0b2dnbGUiOmUuZGF0YSgpO2MuY2FsbChmLGgpfSl9KGpRdWVyeSksK2Z1bmN0aW9uKGEpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBiKGIpe3ZhciBjPWIuYXR0cigiZGF0YS10YXJnZXQiKTtjfHwoYz1iLmF0dHIoImhyZWYiKSxjPWMmJi8jW0EtWmEtel0vLnRlc3QoYykmJmMucmVwbGFjZSgvLiooPz0jW15cc10qJCkvLCIiKSk7dmFyIGQ9YyYmYShjKTtyZXR1cm4gZCYmZC5sZW5ndGg/ZDpiLnBhcmVudCgpfWZ1bmN0aW9uIGMoYyl7YyYmMz09PWMud2hpY2h8fChhKGUpLnJlbW92ZSgpLGEoZikuZWFjaChmdW5jdGlvbigpe3ZhciBkPWEodGhpcyksZT1iKGQpLGY9e3JlbGF0ZWRUYXJnZXQ6dGhpc307ZS5oYXNDbGFzcygib3BlbiIpJiYoYyYmImNsaWNrIj09Yy50eXBlJiYvaW5wdXR8dGV4dGFyZWEvaS50ZXN0KGMudGFyZ2V0LnRhZ05hbWUpJiZhLmNvbnRhaW5zKGVbMF0sYy50YXJnZXQpfHwoZS50cmlnZ2VyKGM9YS5FdmVudCgiaGlkZS5icy5kcm9wZG93biIsZikpLGMuaXNEZWZhdWx0UHJldmVudGVkKCl8fChkLmF0dHIoImFyaWEtZXhwYW5kZWQiLCJmYWxzZSIpLGUucmVtb3ZlQ2xhc3MoIm9wZW4iKS50cmlnZ2VyKCJoaWRkZW4uYnMuZHJvcGRvd24iLGYpKSkpfSkpfWZ1bmN0aW9uIGQoYil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBjPWEodGhpcyksZD1jLmRhdGEoImJzLmRyb3Bkb3duIik7ZHx8Yy5kYXRhKCJicy5kcm9wZG93biIsZD1uZXcgZyh0aGlzKSksInN0cmluZyI9PXR5cGVvZiBiJiZkW2JdLmNhbGwoYyl9KX12YXIgZT0iLmRyb3Bkb3duLWJhY2tkcm9wIixmPSdbZGF0YS10b2dnbGU9ImRyb3Bkb3duIl0nLGc9ZnVuY3Rpb24oYil7YShiKS5vbigiY2xpY2suYnMuZHJvcGRvd24iLHRoaXMudG9nZ2xlKX07Zy5WRVJTSU9OPSIzLjMuNSIsZy5wcm90b3R5cGUudG9nZ2xlPWZ1bmN0aW9uKGQpe3ZhciBlPWEodGhpcyk7aWYoIWUuaXMoIi5kaXNhYmxlZCwgOmRpc2FibGVkIikpe3ZhciBmPWIoZSksZz1mLmhhc0NsYXNzKCJvcGVuIik7aWYoYygpLCFnKXsib250b3VjaHN0YXJ0ImluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCYmIWYuY2xvc2VzdCgiLm5hdmJhci1uYXYiKS5sZW5ndGgmJmEoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpLmFkZENsYXNzKCJkcm9wZG93bi1iYWNrZHJvcCIpLmluc2VydEFmdGVyKGEodGhpcykpLm9uKCJjbGljayIsYyk7dmFyIGg9e3JlbGF0ZWRUYXJnZXQ6dGhpc307aWYoZi50cmlnZ2VyKGQ9YS5FdmVudCgic2hvdy5icy5kcm9wZG93biIsaCkpLGQuaXNEZWZhdWx0UHJldmVudGVkKCkpcmV0dXJuO2UudHJpZ2dlcigiZm9jdXMiKS5hdHRyKCJhcmlhLWV4cGFuZGVkIiwidHJ1ZSIpLGYudG9nZ2xlQ2xhc3MoIm9wZW4iKS50cmlnZ2VyKCJzaG93bi5icy5kcm9wZG93biIsaCl9cmV0dXJuITF9fSxnLnByb3RvdHlwZS5rZXlkb3duPWZ1bmN0aW9uKGMpe2lmKC8oMzh8NDB8Mjd8MzIpLy50ZXN0KGMud2hpY2gpJiYhL2lucHV0fHRleHRhcmVhL2kudGVzdChjLnRhcmdldC50YWdOYW1lKSl7dmFyIGQ9YSh0aGlzKTtpZihjLnByZXZlbnREZWZhdWx0KCksYy5zdG9wUHJvcGFnYXRpb24oKSwhZC5pcygiLmRpc2FibGVkLCA6ZGlzYWJsZWQiKSl7dmFyIGU9YihkKSxnPWUuaGFzQ2xhc3MoIm9wZW4iKTtpZighZyYmMjchPWMud2hpY2h8fGcmJjI3PT1jLndoaWNoKXJldHVybiAyNz09Yy53aGljaCYmZS5maW5kKGYpLnRyaWdnZXIoImZvY3VzIiksZC50cmlnZ2VyKCJjbGljayIpO3ZhciBoPSIgbGk6bm90KC5kaXNhYmxlZCk6dmlzaWJsZSBhIixpPWUuZmluZCgiLmRyb3Bkb3duLW1lbnUiK2gpO2lmKGkubGVuZ3RoKXt2YXIgaj1pLmluZGV4KGMudGFyZ2V0KTszOD09Yy53aGljaCYmaj4wJiZqLS0sNDA9PWMud2hpY2gmJmo8aS5sZW5ndGgtMSYmaisrLH5qfHwoaj0wKSxpLmVxKGopLnRyaWdnZXIoImZvY3VzIil9fX19O3ZhciBoPWEuZm4uZHJvcGRvd247YS5mbi5kcm9wZG93bj1kLGEuZm4uZHJvcGRvd24uQ29uc3RydWN0b3I9ZyxhLmZuLmRyb3Bkb3duLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gYS5mbi5kcm9wZG93bj1oLHRoaXN9LGEoZG9jdW1lbnQpLm9uKCJjbGljay5icy5kcm9wZG93bi5kYXRhLWFwaSIsYykub24oImNsaWNrLmJzLmRyb3Bkb3duLmRhdGEtYXBpIiwiLmRyb3Bkb3duIGZvcm0iLGZ1bmN0aW9uKGEpe2Euc3RvcFByb3BhZ2F0aW9uKCl9KS5vbigiY2xpY2suYnMuZHJvcGRvd24uZGF0YS1hcGkiLGYsZy5wcm90b3R5cGUudG9nZ2xlKS5vbigia2V5ZG93bi5icy5kcm9wZG93bi5kYXRhLWFwaSIsZixnLnByb3RvdHlwZS5rZXlkb3duKS5vbigia2V5ZG93bi5icy5kcm9wZG93bi5kYXRhLWFwaSIsIi5kcm9wZG93bi1tZW51IixnLnByb3RvdHlwZS5rZXlkb3duKX0oalF1ZXJ5KSwrZnVuY3Rpb24oYSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGIoYixkKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9YSh0aGlzKSxmPWUuZGF0YSgiYnMubW9kYWwiKSxnPWEuZXh0ZW5kKHt9LGMuREVGQVVMVFMsZS5kYXRhKCksIm9iamVjdCI9PXR5cGVvZiBiJiZiKTtmfHxlLmRhdGEoImJzLm1vZGFsIixmPW5ldyBjKHRoaXMsZykpLCJzdHJpbmciPT10eXBlb2YgYj9mW2JdKGQpOmcuc2hvdyYmZi5zaG93KGQpfSl9dmFyIGM9ZnVuY3Rpb24oYixjKXt0aGlzLm9wdGlvbnM9Yyx0aGlzLiRib2R5PWEoZG9jdW1lbnQuYm9keSksdGhpcy4kZWxlbWVudD1hKGIpLHRoaXMuJGRpYWxvZz10aGlzLiRlbGVtZW50LmZpbmQoIi5tb2RhbC1kaWFsb2ciKSx0aGlzLiRiYWNrZHJvcD1udWxsLHRoaXMuaXNTaG93bj1udWxsLHRoaXMub3JpZ2luYWxCb2R5UGFkPW51bGwsdGhpcy5zY3JvbGxiYXJXaWR0aD0wLHRoaXMuaWdub3JlQmFja2Ryb3BDbGljaz0hMSx0aGlzLm9wdGlvbnMucmVtb3RlJiZ0aGlzLiRlbGVtZW50LmZpbmQoIi5tb2RhbC1jb250ZW50IikubG9hZCh0aGlzLm9wdGlvbnMucmVtb3RlLGEucHJveHkoZnVuY3Rpb24oKXt0aGlzLiRlbGVtZW50LnRyaWdnZXIoImxvYWRlZC5icy5tb2RhbCIpfSx0aGlzKSl9O2MuVkVSU0lPTj0iMy4zLjUiLGMuVFJBTlNJVElPTl9EVVJBVElPTj0zMDAsYy5CQUNLRFJPUF9UUkFOU0lUSU9OX0RVUkFUSU9OPTE1MCxjLkRFRkFVTFRTPXtiYWNrZHJvcDohMCxrZXlib2FyZDohMCxzaG93OiEwfSxjLnByb3RvdHlwZS50b2dnbGU9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuaXNTaG93bj90aGlzLmhpZGUoKTp0aGlzLnNob3coYSl9LGMucHJvdG90eXBlLnNob3c9ZnVuY3Rpb24oYil7dmFyIGQ9dGhpcyxlPWEuRXZlbnQoInNob3cuYnMubW9kYWwiLHtyZWxhdGVkVGFyZ2V0OmJ9KTt0aGlzLiRlbGVtZW50LnRyaWdnZXIoZSksdGhpcy5pc1Nob3dufHxlLmlzRGVmYXVsdFByZXZlbnRlZCgpfHwodGhpcy5pc1Nob3duPSEwLHRoaXMuY2hlY2tTY3JvbGxiYXIoKSx0aGlzLnNldFNjcm9sbGJhcigpLHRoaXMuJGJvZHkuYWRkQ2xhc3MoIm1vZGFsLW9wZW4iKSx0aGlzLmVzY2FwZSgpLHRoaXMucmVzaXplKCksdGhpcy4kZWxlbWVudC5vbigiY2xpY2suZGlzbWlzcy5icy5tb2RhbCIsJ1tkYXRhLWRpc21pc3M9Im1vZGFsIl0nLGEucHJveHkodGhpcy5oaWRlLHRoaXMpKSx0aGlzLiRkaWFsb2cub24oIm1vdXNlZG93bi5kaXNtaXNzLmJzLm1vZGFsIixmdW5jdGlvbigpe2QuJGVsZW1lbnQub25lKCJtb3VzZXVwLmRpc21pc3MuYnMubW9kYWwiLGZ1bmN0aW9uKGIpe2EoYi50YXJnZXQpLmlzKGQuJGVsZW1lbnQpJiYoZC5pZ25vcmVCYWNrZHJvcENsaWNrPSEwKX0pfSksdGhpcy5iYWNrZHJvcChmdW5jdGlvbigpe3ZhciBlPWEuc3VwcG9ydC50cmFuc2l0aW9uJiZkLiRlbGVtZW50Lmhhc0NsYXNzKCJmYWRlIik7ZC4kZWxlbWVudC5wYXJlbnQoKS5sZW5ndGh8fGQuJGVsZW1lbnQuYXBwZW5kVG8oZC4kYm9keSksZC4kZWxlbWVudC5zaG93KCkuc2Nyb2xsVG9wKDApLGQuYWRqdXN0RGlhbG9nKCksZSYmZC4kZWxlbWVudFswXS5vZmZzZXRXaWR0aCxkLiRlbGVtZW50LmFkZENsYXNzKCJpbiIpLGQuZW5mb3JjZUZvY3VzKCk7dmFyIGY9YS5FdmVudCgic2hvd24uYnMubW9kYWwiLHtyZWxhdGVkVGFyZ2V0OmJ9KTtlP2QuJGRpYWxvZy5vbmUoImJzVHJhbnNpdGlvbkVuZCIsZnVuY3Rpb24oKXtkLiRlbGVtZW50LnRyaWdnZXIoImZvY3VzIikudHJpZ2dlcihmKX0pLmVtdWxhdGVUcmFuc2l0aW9uRW5kKGMuVFJBTlNJVElPTl9EVVJBVElPTik6ZC4kZWxlbWVudC50cmlnZ2VyKCJmb2N1cyIpLnRyaWdnZXIoZil9KSl9LGMucHJvdG90eXBlLmhpZGU9ZnVuY3Rpb24oYil7YiYmYi5wcmV2ZW50RGVmYXVsdCgpLGI9YS5FdmVudCgiaGlkZS5icy5tb2RhbCIpLHRoaXMuJGVsZW1lbnQudHJpZ2dlcihiKSx0aGlzLmlzU2hvd24mJiFiLmlzRGVmYXVsdFByZXZlbnRlZCgpJiYodGhpcy5pc1Nob3duPSExLHRoaXMuZXNjYXBlKCksdGhpcy5yZXNpemUoKSxhKGRvY3VtZW50KS5vZmYoImZvY3VzaW4uYnMubW9kYWwiKSx0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKCJpbiIpLm9mZigiY2xpY2suZGlzbWlzcy5icy5tb2RhbCIpLm9mZigibW91c2V1cC5kaXNtaXNzLmJzLm1vZGFsIiksdGhpcy4kZGlhbG9nLm9mZigibW91c2Vkb3duLmRpc21pc3MuYnMubW9kYWwiKSxhLnN1cHBvcnQudHJhbnNpdGlvbiYmdGhpcy4kZWxlbWVudC5oYXNDbGFzcygiZmFkZSIpP3RoaXMuJGVsZW1lbnQub25lKCJic1RyYW5zaXRpb25FbmQiLGEucHJveHkodGhpcy5oaWRlTW9kYWwsdGhpcykpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKGMuVFJBTlNJVElPTl9EVVJBVElPTik6dGhpcy5oaWRlTW9kYWwoKSl9LGMucHJvdG90eXBlLmVuZm9yY2VGb2N1cz1mdW5jdGlvbigpe2EoZG9jdW1lbnQpLm9mZigiZm9jdXNpbi5icy5tb2RhbCIpLm9uKCJmb2N1c2luLmJzLm1vZGFsIixhLnByb3h5KGZ1bmN0aW9uKGEpe3RoaXMuJGVsZW1lbnRbMF09PT1hLnRhcmdldHx8dGhpcy4kZWxlbWVudC5oYXMoYS50YXJnZXQpLmxlbmd0aHx8dGhpcy4kZWxlbWVudC50cmlnZ2VyKCJmb2N1cyIpfSx0aGlzKSl9LGMucHJvdG90eXBlLmVzY2FwZT1mdW5jdGlvbigpe3RoaXMuaXNTaG93biYmdGhpcy5vcHRpb25zLmtleWJvYXJkP3RoaXMuJGVsZW1lbnQub24oImtleWRvd24uZGlzbWlzcy5icy5tb2RhbCIsYS5wcm94eShmdW5jdGlvbihhKXsyNz09YS53aGljaCYmdGhpcy5oaWRlKCl9LHRoaXMpKTp0aGlzLmlzU2hvd258fHRoaXMuJGVsZW1lbnQub2ZmKCJrZXlkb3duLmRpc21pc3MuYnMubW9kYWwiKX0sYy5wcm90b3R5cGUucmVzaXplPWZ1bmN0aW9uKCl7dGhpcy5pc1Nob3duP2Eod2luZG93KS5vbigicmVzaXplLmJzLm1vZGFsIixhLnByb3h5KHRoaXMuaGFuZGxlVXBkYXRlLHRoaXMpKTphKHdpbmRvdykub2ZmKCJyZXNpemUuYnMubW9kYWwiKX0sYy5wcm90b3R5cGUuaGlkZU1vZGFsPWZ1bmN0aW9uKCl7dmFyIGE9dGhpczt0aGlzLiRlbGVtZW50LmhpZGUoKSx0aGlzLmJhY2tkcm9wKGZ1bmN0aW9uKCl7YS4kYm9keS5yZW1vdmVDbGFzcygibW9kYWwtb3BlbiIpLGEucmVzZXRBZGp1c3RtZW50cygpLGEucmVzZXRTY3JvbGxiYXIoKSxhLiRlbGVtZW50LnRyaWdnZXIoImhpZGRlbi5icy5tb2RhbCIpfSl9LGMucHJvdG90eXBlLnJlbW92ZUJhY2tkcm9wPWZ1bmN0aW9uKCl7dGhpcy4kYmFja2Ryb3AmJnRoaXMuJGJhY2tkcm9wLnJlbW92ZSgpLHRoaXMuJGJhY2tkcm9wPW51bGx9LGMucHJvdG90eXBlLmJhY2tkcm9wPWZ1bmN0aW9uKGIpe3ZhciBkPXRoaXMsZT10aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCJmYWRlIik/ImZhZGUiOiIiO2lmKHRoaXMuaXNTaG93biYmdGhpcy5vcHRpb25zLmJhY2tkcm9wKXt2YXIgZj1hLnN1cHBvcnQudHJhbnNpdGlvbiYmZTtpZih0aGlzLiRiYWNrZHJvcD1hKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpKS5hZGRDbGFzcygibW9kYWwtYmFja2Ryb3AgIitlKS5hcHBlbmRUbyh0aGlzLiRib2R5KSx0aGlzLiRlbGVtZW50Lm9uKCJjbGljay5kaXNtaXNzLmJzLm1vZGFsIixhLnByb3h5KGZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmlnbm9yZUJhY2tkcm9wQ2xpY2s/dm9pZCh0aGlzLmlnbm9yZUJhY2tkcm9wQ2xpY2s9ITEpOnZvaWQoYS50YXJnZXQ9PT1hLmN1cnJlbnRUYXJnZXQmJigic3RhdGljIj09dGhpcy5vcHRpb25zLmJhY2tkcm9wP3RoaXMuJGVsZW1lbnRbMF0uZm9jdXMoKTp0aGlzLmhpZGUoKSkpfSx0aGlzKSksZiYmdGhpcy4kYmFja2Ryb3BbMF0ub2Zmc2V0V2lkdGgsdGhpcy4kYmFja2Ryb3AuYWRkQ2xhc3MoImluIiksIWIpcmV0dXJuO2Y/dGhpcy4kYmFja2Ryb3Aub25lKCJic1RyYW5zaXRpb25FbmQiLGIpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKGMuQkFDS0RST1BfVFJBTlNJVElPTl9EVVJBVElPTik6YigpfWVsc2UgaWYoIXRoaXMuaXNTaG93biYmdGhpcy4kYmFja2Ryb3Ape3RoaXMuJGJhY2tkcm9wLnJlbW92ZUNsYXNzKCJpbiIpO3ZhciBnPWZ1bmN0aW9uKCl7ZC5yZW1vdmVCYWNrZHJvcCgpLGImJmIoKX07YS5zdXBwb3J0LnRyYW5zaXRpb24mJnRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoImZhZGUiKT90aGlzLiRiYWNrZHJvcC5vbmUoImJzVHJhbnNpdGlvbkVuZCIsZykuZW11bGF0ZVRyYW5zaXRpb25FbmQoYy5CQUNLRFJPUF9UUkFOU0lUSU9OX0RVUkFUSU9OKTpnKCl9ZWxzZSBiJiZiKCl9LGMucHJvdG90eXBlLmhhbmRsZVVwZGF0ZT1mdW5jdGlvbigpe3RoaXMuYWRqdXN0RGlhbG9nKCl9LGMucHJvdG90eXBlLmFkanVzdERpYWxvZz1mdW5jdGlvbigpe3ZhciBhPXRoaXMuJGVsZW1lbnRbMF0uc2Nyb2xsSGVpZ2h0PmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQ7dGhpcy4kZWxlbWVudC5jc3Moe3BhZGRpbmdMZWZ0OiF0aGlzLmJvZHlJc092ZXJmbG93aW5nJiZhP3RoaXMuc2Nyb2xsYmFyV2lkdGg6IiIscGFkZGluZ1JpZ2h0OnRoaXMuYm9keUlzT3ZlcmZsb3dpbmcmJiFhP3RoaXMuc2Nyb2xsYmFyV2lkdGg6IiJ9KX0sYy5wcm90b3R5cGUucmVzZXRBZGp1c3RtZW50cz1mdW5jdGlvbigpe3RoaXMuJGVsZW1lbnQuY3NzKHtwYWRkaW5nTGVmdDoiIixwYWRkaW5nUmlnaHQ6IiJ9KX0sYy5wcm90b3R5cGUuY2hlY2tTY3JvbGxiYXI9ZnVuY3Rpb24oKXt2YXIgYT13aW5kb3cuaW5uZXJXaWR0aDtpZighYSl7dmFyIGI9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2E9Yi5yaWdodC1NYXRoLmFicyhiLmxlZnQpfXRoaXMuYm9keUlzT3ZlcmZsb3dpbmc9ZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aDxhLHRoaXMuc2Nyb2xsYmFyV2lkdGg9dGhpcy5tZWFzdXJlU2Nyb2xsYmFyKCl9LGMucHJvdG90eXBlLnNldFNjcm9sbGJhcj1mdW5jdGlvbigpe3ZhciBhPXBhcnNlSW50KHRoaXMuJGJvZHkuY3NzKCJwYWRkaW5nLXJpZ2h0Iil8fDAsMTApO3RoaXMub3JpZ2luYWxCb2R5UGFkPWRvY3VtZW50LmJvZHkuc3R5bGUucGFkZGluZ1JpZ2h0fHwiIix0aGlzLmJvZHlJc092ZXJmbG93aW5nJiZ0aGlzLiRib2R5LmNzcygicGFkZGluZy1yaWdodCIsYSt0aGlzLnNjcm9sbGJhcldpZHRoKX0sYy5wcm90b3R5cGUucmVzZXRTY3JvbGxiYXI9ZnVuY3Rpb24oKXt0aGlzLiRib2R5LmNzcygicGFkZGluZy1yaWdodCIsdGhpcy5vcmlnaW5hbEJvZHlQYWQpfSxjLnByb3RvdHlwZS5tZWFzdXJlU2Nyb2xsYmFyPWZ1bmN0aW9uKCl7dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7YS5jbGFzc05hbWU9Im1vZGFsLXNjcm9sbGJhci1tZWFzdXJlIix0aGlzLiRib2R5LmFwcGVuZChhKTt2YXIgYj1hLm9mZnNldFdpZHRoLWEuY2xpZW50V2lkdGg7cmV0dXJuIHRoaXMuJGJvZHlbMF0ucmVtb3ZlQ2hpbGQoYSksYn07dmFyIGQ9YS5mbi5tb2RhbDthLmZuLm1vZGFsPWIsYS5mbi5tb2RhbC5Db25zdHJ1Y3Rvcj1jLGEuZm4ubW9kYWwubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBhLmZuLm1vZGFsPWQsdGhpc30sYShkb2N1bWVudCkub24oImNsaWNrLmJzLm1vZGFsLmRhdGEtYXBpIiwnW2RhdGEtdG9nZ2xlPSJtb2RhbCJdJyxmdW5jdGlvbihjKXt2YXIgZD1hKHRoaXMpLGU9ZC5hdHRyKCJocmVmIiksZj1hKGQuYXR0cigiZGF0YS10YXJnZXQiKXx8ZSYmZS5yZXBsYWNlKC8uKig/PSNbXlxzXSskKS8sIiIpKSxnPWYuZGF0YSgiYnMubW9kYWwiKT8idG9nZ2xlIjphLmV4dGVuZCh7cmVtb3RlOiEvIy8udGVzdChlKSYmZX0sZi5kYXRhKCksZC5kYXRhKCkpO2QuaXMoImEiKSYmYy5wcmV2ZW50RGVmYXVsdCgpLGYub25lKCJzaG93LmJzLm1vZGFsIixmdW5jdGlvbihhKXthLmlzRGVmYXVsdFByZXZlbnRlZCgpfHxmLm9uZSgiaGlkZGVuLmJzLm1vZGFsIixmdW5jdGlvbigpe2QuaXMoIjp2aXNpYmxlIikmJmQudHJpZ2dlcigiZm9jdXMiKX0pfSksYi5jYWxsKGYsZyx0aGlzKX0pfShqUXVlcnkpLCtmdW5jdGlvbihhKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gYihiKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGQ9YSh0aGlzKSxlPWQuZGF0YSgiYnMudG9vbHRpcCIpLGY9Im9iamVjdCI9PXR5cGVvZiBiJiZiOyhlfHwhL2Rlc3Ryb3l8aGlkZS8udGVzdChiKSkmJihlfHxkLmRhdGEoImJzLnRvb2x0aXAiLGU9bmV3IGModGhpcyxmKSksInN0cmluZyI9PXR5cGVvZiBiJiZlW2JdKCkpfSl9dmFyIGM9ZnVuY3Rpb24oYSxiKXt0aGlzLnR5cGU9bnVsbCx0aGlzLm9wdGlvbnM9bnVsbCx0aGlzLmVuYWJsZWQ9bnVsbCx0aGlzLnRpbWVvdXQ9bnVsbCx0aGlzLmhvdmVyU3RhdGU9bnVsbCx0aGlzLiRlbGVtZW50PW51bGwsdGhpcy5pblN0YXRlPW51bGwsdGhpcy5pbml0KCJ0b29sdGlwIixhLGIpfTtjLlZFUlNJT049IjMuMy41IixjLlRSQU5TSVRJT05fRFVSQVRJT049MTUwLGMuREVGQVVMVFM9e2FuaW1hdGlvbjohMCxwbGFjZW1lbnQ6InRvcCIsc2VsZWN0b3I6ITEsdGVtcGxhdGU6JzxkaXYgY2xhc3M9InRvb2x0aXAiIHJvbGU9InRvb2x0aXAiPjxkaXYgY2xhc3M9InRvb2x0aXAtYXJyb3ciPjwvZGl2PjxkaXYgY2xhc3M9InRvb2x0aXAtaW5uZXIiPjwvZGl2PjwvZGl2PicsdHJpZ2dlcjoiaG92ZXIgZm9jdXMiLHRpdGxlOiIiLGRlbGF5OjAsaHRtbDohMSxjb250YWluZXI6ITEsdmlld3BvcnQ6e3NlbGVjdG9yOiJib2R5IixwYWRkaW5nOjB9fSxjLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKGIsYyxkKXtpZih0aGlzLmVuYWJsZWQ9ITAsdGhpcy50eXBlPWIsdGhpcy4kZWxlbWVudD1hKGMpLHRoaXMub3B0aW9ucz10aGlzLmdldE9wdGlvbnMoZCksdGhpcy4kdmlld3BvcnQ9dGhpcy5vcHRpb25zLnZpZXdwb3J0JiZhKGEuaXNGdW5jdGlvbih0aGlzLm9wdGlvbnMudmlld3BvcnQpP3RoaXMub3B0aW9ucy52aWV3cG9ydC5jYWxsKHRoaXMsdGhpcy4kZWxlbWVudCk6dGhpcy5vcHRpb25zLnZpZXdwb3J0LnNlbGVjdG9yfHx0aGlzLm9wdGlvbnMudmlld3BvcnQpLHRoaXMuaW5TdGF0ZT17Y2xpY2s6ITEsaG92ZXI6ITEsZm9jdXM6ITF9LHRoaXMuJGVsZW1lbnRbMF1pbnN0YW5jZW9mIGRvY3VtZW50LmNvbnN0cnVjdG9yJiYhdGhpcy5vcHRpb25zLnNlbGVjdG9yKXRocm93IG5ldyBFcnJvcigiYHNlbGVjdG9yYCBvcHRpb24gbXVzdCBiZSBzcGVjaWZpZWQgd2hlbiBpbml0aWFsaXppbmcgIit0aGlzLnR5cGUrIiBvbiB0aGUgd2luZG93LmRvY3VtZW50IG9iamVjdCEiKTtmb3IodmFyIGU9dGhpcy5vcHRpb25zLnRyaWdnZXIuc3BsaXQoIiAiKSxmPWUubGVuZ3RoO2YtLTspe3ZhciBnPWVbZl07aWYoImNsaWNrIj09Zyl0aGlzLiRlbGVtZW50Lm9uKCJjbGljay4iK3RoaXMudHlwZSx0aGlzLm9wdGlvbnMuc2VsZWN0b3IsYS5wcm94eSh0aGlzLnRvZ2dsZSx0aGlzKSk7ZWxzZSBpZigibWFudWFsIiE9Zyl7dmFyIGg9ImhvdmVyIj09Zz8ibW91c2VlbnRlciI6ImZvY3VzaW4iLGk9ImhvdmVyIj09Zz8ibW91c2VsZWF2ZSI6ImZvY3Vzb3V0Ijt0aGlzLiRlbGVtZW50Lm9uKGgrIi4iK3RoaXMudHlwZSx0aGlzLm9wdGlvbnMuc2VsZWN0b3IsYS5wcm94eSh0aGlzLmVudGVyLHRoaXMpKSx0aGlzLiRlbGVtZW50Lm9uKGkrIi4iK3RoaXMudHlwZSx0aGlzLm9wdGlvbnMuc2VsZWN0b3IsYS5wcm94eSh0aGlzLmxlYXZlLHRoaXMpKX19dGhpcy5vcHRpb25zLnNlbGVjdG9yP3RoaXMuX29wdGlvbnM9YS5leHRlbmQoe30sdGhpcy5vcHRpb25zLHt0cmlnZ2VyOiJtYW51YWwiLHNlbGVjdG9yOiIifSk6dGhpcy5maXhUaXRsZSgpfSxjLnByb3RvdHlwZS5nZXREZWZhdWx0cz1mdW5jdGlvbigpe3JldHVybiBjLkRFRkFVTFRTfSxjLnByb3RvdHlwZS5nZXRPcHRpb25zPWZ1bmN0aW9uKGIpe3JldHVybiBiPWEuZXh0ZW5kKHt9LHRoaXMuZ2V0RGVmYXVsdHMoKSx0aGlzLiRlbGVtZW50LmRhdGEoKSxiKSxiLmRlbGF5JiYibnVtYmVyIj09dHlwZW9mIGIuZGVsYXkmJihiLmRlbGF5PXtzaG93OmIuZGVsYXksaGlkZTpiLmRlbGF5fSksYn0sYy5wcm90b3R5cGUuZ2V0RGVsZWdhdGVPcHRpb25zPWZ1bmN0aW9uKCl7dmFyIGI9e30sYz10aGlzLmdldERlZmF1bHRzKCk7cmV0dXJuIHRoaXMuX29wdGlvbnMmJmEuZWFjaCh0aGlzLl9vcHRpb25zLGZ1bmN0aW9uKGEsZCl7Y1thXSE9ZCYmKGJbYV09ZCl9KSxifSxjLnByb3RvdHlwZS5lbnRlcj1mdW5jdGlvbihiKXt2YXIgYz1iIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcj9iOmEoYi5jdXJyZW50VGFyZ2V0KS5kYXRhKCJicy4iK3RoaXMudHlwZSk7cmV0dXJuIGN8fChjPW5ldyB0aGlzLmNvbnN0cnVjdG9yKGIuY3VycmVudFRhcmdldCx0aGlzLmdldERlbGVnYXRlT3B0aW9ucygpKSxhKGIuY3VycmVudFRhcmdldCkuZGF0YSgiYnMuIit0aGlzLnR5cGUsYykpLGIgaW5zdGFuY2VvZiBhLkV2ZW50JiYoYy5pblN0YXRlWyJmb2N1c2luIj09Yi50eXBlPyJmb2N1cyI6ImhvdmVyIl09ITApLGMudGlwKCkuaGFzQ2xhc3MoImluIil8fCJpbiI9PWMuaG92ZXJTdGF0ZT92b2lkKGMuaG92ZXJTdGF0ZT0iaW4iKTooY2xlYXJUaW1lb3V0KGMudGltZW91dCksYy5ob3ZlclN0YXRlPSJpbiIsYy5vcHRpb25zLmRlbGF5JiZjLm9wdGlvbnMuZGVsYXkuc2hvdz92b2lkKGMudGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ImluIj09Yy5ob3ZlclN0YXRlJiZjLnNob3coKX0sYy5vcHRpb25zLmRlbGF5LnNob3cpKTpjLnNob3coKSl9LGMucHJvdG90eXBlLmlzSW5TdGF0ZVRydWU9ZnVuY3Rpb24oKXtmb3IodmFyIGEgaW4gdGhpcy5pblN0YXRlKWlmKHRoaXMuaW5TdGF0ZVthXSlyZXR1cm4hMDtyZXR1cm4hMX0sYy5wcm90b3R5cGUubGVhdmU9ZnVuY3Rpb24oYil7dmFyIGM9YiBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3I/YjphKGIuY3VycmVudFRhcmdldCkuZGF0YSgiYnMuIit0aGlzLnR5cGUpO3JldHVybiBjfHwoYz1uZXcgdGhpcy5jb25zdHJ1Y3RvcihiLmN1cnJlbnRUYXJnZXQsdGhpcy5nZXREZWxlZ2F0ZU9wdGlvbnMoKSksYShiLmN1cnJlbnRUYXJnZXQpLmRhdGEoImJzLiIrdGhpcy50eXBlLGMpKSxiIGluc3RhbmNlb2YgYS5FdmVudCYmKGMuaW5TdGF0ZVsiZm9jdXNvdXQiPT1iLnR5cGU/ImZvY3VzIjoiaG92ZXIiXT0hMSksYy5pc0luU3RhdGVUcnVlKCk/dm9pZCAwOihjbGVhclRpbWVvdXQoYy50aW1lb3V0KSxjLmhvdmVyU3RhdGU9Im91dCIsYy5vcHRpb25zLmRlbGF5JiZjLm9wdGlvbnMuZGVsYXkuaGlkZT92b2lkKGMudGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Im91dCI9PWMuaG92ZXJTdGF0ZSYmYy5oaWRlKCl9LGMub3B0aW9ucy5kZWxheS5oaWRlKSk6Yy5oaWRlKCkpfSxjLnByb3RvdHlwZS5zaG93PWZ1bmN0aW9uKCl7dmFyIGI9YS5FdmVudCgic2hvdy5icy4iK3RoaXMudHlwZSk7aWYodGhpcy5oYXNDb250ZW50KCkmJnRoaXMuZW5hYmxlZCl7dGhpcy4kZWxlbWVudC50cmlnZ2VyKGIpO3ZhciBkPWEuY29udGFpbnModGhpcy4kZWxlbWVudFswXS5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudCx0aGlzLiRlbGVtZW50WzBdKTtpZihiLmlzRGVmYXVsdFByZXZlbnRlZCgpfHwhZClyZXR1cm47dmFyIGU9dGhpcyxmPXRoaXMudGlwKCksZz10aGlzLmdldFVJRCh0aGlzLnR5cGUpO3RoaXMuc2V0Q29udGVudCgpLGYuYXR0cigiaWQiLGcpLHRoaXMuJGVsZW1lbnQuYXR0cigiYXJpYS1kZXNjcmliZWRieSIsZyksdGhpcy5vcHRpb25zLmFuaW1hdGlvbiYmZi5hZGRDbGFzcygiZmFkZSIpO3ZhciBoPSJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLm9wdGlvbnMucGxhY2VtZW50P3RoaXMub3B0aW9ucy5wbGFjZW1lbnQuY2FsbCh0aGlzLGZbMF0sdGhpcy4kZWxlbWVudFswXSk6dGhpcy5vcHRpb25zLnBsYWNlbWVudCxpPS9ccz9hdXRvP1xzPy9pLGo9aS50ZXN0KGgpO2omJihoPWgucmVwbGFjZShpLCIiKXx8InRvcCIpLGYuZGV0YWNoKCkuY3NzKHt0b3A6MCxsZWZ0OjAsZGlzcGxheToiYmxvY2sifSkuYWRkQ2xhc3MoaCkuZGF0YSgiYnMuIit0aGlzLnR5cGUsdGhpcyksdGhpcy5vcHRpb25zLmNvbnRhaW5lcj9mLmFwcGVuZFRvKHRoaXMub3B0aW9ucy5jb250YWluZXIpOmYuaW5zZXJ0QWZ0ZXIodGhpcy4kZWxlbWVudCksdGhpcy4kZWxlbWVudC50cmlnZ2VyKCJpbnNlcnRlZC5icy4iK3RoaXMudHlwZSk7dmFyIGs9dGhpcy5nZXRQb3NpdGlvbigpLGw9ZlswXS5vZmZzZXRXaWR0aCxtPWZbMF0ub2Zmc2V0SGVpZ2h0O2lmKGope3ZhciBuPWgsbz10aGlzLmdldFBvc2l0aW9uKHRoaXMuJHZpZXdwb3J0KTtoPSJib3R0b20iPT1oJiZrLmJvdHRvbSttPm8uYm90dG9tPyJ0b3AiOiJ0b3AiPT1oJiZrLnRvcC1tPG8udG9wPyJib3R0b20iOiJyaWdodCI9PWgmJmsucmlnaHQrbD5vLndpZHRoPyJsZWZ0IjoibGVmdCI9PWgmJmsubGVmdC1sPG8ubGVmdD8icmlnaHQiOmgsZi5yZW1vdmVDbGFzcyhuKS5hZGRDbGFzcyhoKX12YXIgcD10aGlzLmdldENhbGN1bGF0ZWRPZmZzZXQoaCxrLGwsbSk7dGhpcy5hcHBseVBsYWNlbWVudChwLGgpO3ZhciBxPWZ1bmN0aW9uKCl7dmFyIGE9ZS5ob3ZlclN0YXRlO2UuJGVsZW1lbnQudHJpZ2dlcigic2hvd24uYnMuIitlLnR5cGUpLGUuaG92ZXJTdGF0ZT1udWxsLCJvdXQiPT1hJiZlLmxlYXZlKGUpfTthLnN1cHBvcnQudHJhbnNpdGlvbiYmdGhpcy4kdGlwLmhhc0NsYXNzKCJmYWRlIik/Zi5vbmUoImJzVHJhbnNpdGlvbkVuZCIscSkuZW11bGF0ZVRyYW5zaXRpb25FbmQoYy5UUkFOU0lUSU9OX0RVUkFUSU9OKTpxKCl9fSxjLnByb3RvdHlwZS5hcHBseVBsYWNlbWVudD1mdW5jdGlvbihiLGMpe3ZhciBkPXRoaXMudGlwKCksZT1kWzBdLm9mZnNldFdpZHRoLGY9ZFswXS5vZmZzZXRIZWlnaHQsZz1wYXJzZUludChkLmNzcygibWFyZ2luLXRvcCIpLDEwKSxoPXBhcnNlSW50KGQuY3NzKCJtYXJnaW4tbGVmdCIpLDEwKTtpc05hTihnKSYmKGc9MCksaXNOYU4oaCkmJihoPTApLGIudG9wKz1nLGIubGVmdCs9aCxhLm9mZnNldC5zZXRPZmZzZXQoZFswXSxhLmV4dGVuZCh7dXNpbmc6ZnVuY3Rpb24oYSl7ZC5jc3Moe3RvcDpNYXRoLnJvdW5kKGEudG9wKSxsZWZ0Ok1hdGgucm91bmQoYS5sZWZ0KX0pfX0sYiksMCksZC5hZGRDbGFzcygiaW4iKTt2YXIgaT1kWzBdLm9mZnNldFdpZHRoLGo9ZFswXS5vZmZzZXRIZWlnaHQ7InRvcCI9PWMmJmohPWYmJihiLnRvcD1iLnRvcCtmLWopO3ZhciBrPXRoaXMuZ2V0Vmlld3BvcnRBZGp1c3RlZERlbHRhKGMsYixpLGopO2subGVmdD9iLmxlZnQrPWsubGVmdDpiLnRvcCs9ay50b3A7dmFyIGw9L3RvcHxib3R0b20vLnRlc3QoYyksbT1sPzIqay5sZWZ0LWUraToyKmsudG9wLWYraixuPWw/Im9mZnNldFdpZHRoIjoib2Zmc2V0SGVpZ2h0IjtkLm9mZnNldChiKSx0aGlzLnJlcGxhY2VBcnJvdyhtLGRbMF1bbl0sbCl9LGMucHJvdG90eXBlLnJlcGxhY2VBcnJvdz1mdW5jdGlvbihhLGIsYyl7dGhpcy5hcnJvdygpLmNzcyhjPyJsZWZ0IjoidG9wIiw1MCooMS1hL2IpKyIlIikuY3NzKGM/InRvcCI6ImxlZnQiLCIiKX0sYy5wcm90b3R5cGUuc2V0Q29udGVudD1mdW5jdGlvbigpe3ZhciBhPXRoaXMudGlwKCksYj10aGlzLmdldFRpdGxlKCk7YS5maW5kKCIudG9vbHRpcC1pbm5lciIpW3RoaXMub3B0aW9ucy5odG1sPyJodG1sIjoidGV4dCJdKGIpLGEucmVtb3ZlQ2xhc3MoImZhZGUgaW4gdG9wIGJvdHRvbSBsZWZ0IHJpZ2h0Iil9LGMucHJvdG90eXBlLmhpZGU9ZnVuY3Rpb24oYil7ZnVuY3Rpb24gZCgpeyJpbiIhPWUuaG92ZXJTdGF0ZSYmZi5kZXRhY2goKSxlLiRlbGVtZW50LnJlbW92ZUF0dHIoImFyaWEtZGVzY3JpYmVkYnkiKS50cmlnZ2VyKCJoaWRkZW4uYnMuIitlLnR5cGUpLGImJmIoKX12YXIgZT10aGlzLGY9YSh0aGlzLiR0aXApLGc9YS5FdmVudCgiaGlkZS5icy4iK3RoaXMudHlwZSk7cmV0dXJuIHRoaXMuJGVsZW1lbnQudHJpZ2dlcihnKSxnLmlzRGVmYXVsdFByZXZlbnRlZCgpP3ZvaWQgMDooZi5yZW1vdmVDbGFzcygiaW4iKSxhLnN1cHBvcnQudHJhbnNpdGlvbiYmZi5oYXNDbGFzcygiZmFkZSIpP2Yub25lKCJic1RyYW5zaXRpb25FbmQiLGQpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKGMuVFJBTlNJVElPTl9EVVJBVElPTik6ZCgpLHRoaXMuaG92ZXJTdGF0ZT1udWxsLHRoaXMpfSxjLnByb3RvdHlwZS5maXhUaXRsZT1mdW5jdGlvbigpe3ZhciBhPXRoaXMuJGVsZW1lbnQ7KGEuYXR0cigidGl0bGUiKXx8InN0cmluZyIhPXR5cGVvZiBhLmF0dHIoImRhdGEtb3JpZ2luYWwtdGl0bGUiKSkmJmEuYXR0cigiZGF0YS1vcmlnaW5hbC10aXRsZSIsYS5hdHRyKCJ0aXRsZSIpfHwiIikuYXR0cigidGl0bGUiLCIiKX0sYy5wcm90b3R5cGUuaGFzQ29udGVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFRpdGxlKCl9LGMucHJvdG90eXBlLmdldFBvc2l0aW9uPWZ1bmN0aW9uKGIpe2I9Ynx8dGhpcy4kZWxlbWVudDt2YXIgYz1iWzBdLGQ9IkJPRFkiPT1jLnRhZ05hbWUsZT1jLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO251bGw9PWUud2lkdGgmJihlPWEuZXh0ZW5kKHt9LGUse3dpZHRoOmUucmlnaHQtZS5sZWZ0LGhlaWdodDplLmJvdHRvbS1lLnRvcH0pKTt2YXIgZj1kP3t0b3A6MCxsZWZ0OjB9OmIub2Zmc2V0KCksZz17c2Nyb2xsOmQ/ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcHx8ZG9jdW1lbnQuYm9keS5zY3JvbGxUb3A6Yi5zY3JvbGxUb3AoKX0saD1kP3t3aWR0aDphKHdpbmRvdykud2lkdGgoKSxoZWlnaHQ6YSh3aW5kb3cpLmhlaWdodCgpfTpudWxsO3JldHVybiBhLmV4dGVuZCh7fSxlLGcsaCxmKX0sYy5wcm90b3R5cGUuZ2V0Q2FsY3VsYXRlZE9mZnNldD1mdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4iYm90dG9tIj09YT97dG9wOmIudG9wK2IuaGVpZ2h0LGxlZnQ6Yi5sZWZ0K2Iud2lkdGgvMi1jLzJ9OiJ0b3AiPT1hP3t0b3A6Yi50b3AtZCxsZWZ0OmIubGVmdCtiLndpZHRoLzItYy8yfToibGVmdCI9PWE/e3RvcDpiLnRvcCtiLmhlaWdodC8yLWQvMixsZWZ0OmIubGVmdC1jfTp7dG9wOmIudG9wK2IuaGVpZ2h0LzItZC8yLGxlZnQ6Yi5sZWZ0K2Iud2lkdGh9fSxjLnByb3RvdHlwZS5nZXRWaWV3cG9ydEFkanVzdGVkRGVsdGE9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9e3RvcDowLGxlZnQ6MH07aWYoIXRoaXMuJHZpZXdwb3J0KXJldHVybiBlO3ZhciBmPXRoaXMub3B0aW9ucy52aWV3cG9ydCYmdGhpcy5vcHRpb25zLnZpZXdwb3J0LnBhZGRpbmd8fDAsZz10aGlzLmdldFBvc2l0aW9uKHRoaXMuJHZpZXdwb3J0KTtpZigvcmlnaHR8bGVmdC8udGVzdChhKSl7dmFyIGg9Yi50b3AtZi1nLnNjcm9sbCxpPWIudG9wK2YtZy5zY3JvbGwrZDtoPGcudG9wP2UudG9wPWcudG9wLWg6aT5nLnRvcCtnLmhlaWdodCYmKGUudG9wPWcudG9wK2cuaGVpZ2h0LWkpfWVsc2V7dmFyIGo9Yi5sZWZ0LWYsaz1iLmxlZnQrZitjO2o8Zy5sZWZ0P2UubGVmdD1nLmxlZnQtajprPmcucmlnaHQmJihlLmxlZnQ9Zy5sZWZ0K2cud2lkdGgtayl9cmV0dXJuIGV9LGMucHJvdG90eXBlLmdldFRpdGxlPWZ1bmN0aW9uKCl7dmFyIGEsYj10aGlzLiRlbGVtZW50LGM9dGhpcy5vcHRpb25zO3JldHVybiBhPWIuYXR0cigiZGF0YS1vcmlnaW5hbC10aXRsZSIpfHwoImZ1bmN0aW9uIj09dHlwZW9mIGMudGl0bGU/Yy50aXRsZS5jYWxsKGJbMF0pOmMudGl0bGUpfSxjLnByb3RvdHlwZS5nZXRVSUQ9ZnVuY3Rpb24oYSl7ZG8gYSs9fn4oMWU2Kk1hdGgucmFuZG9tKCkpO3doaWxlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGEpKTtyZXR1cm4gYX0sYy5wcm90b3R5cGUudGlwPWZ1bmN0aW9uKCl7aWYoIXRoaXMuJHRpcCYmKHRoaXMuJHRpcD1hKHRoaXMub3B0aW9ucy50ZW1wbGF0ZSksMSE9dGhpcy4kdGlwLmxlbmd0aCkpdGhyb3cgbmV3IEVycm9yKHRoaXMudHlwZSsiIGB0ZW1wbGF0ZWAgb3B0aW9uIG11c3QgY29uc2lzdCBvZiBleGFjdGx5IDEgdG9wLWxldmVsIGVsZW1lbnQhIik7cmV0dXJuIHRoaXMuJHRpcH0sYy5wcm90b3R5cGUuYXJyb3c9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kYXJyb3c9dGhpcy4kYXJyb3d8fHRoaXMudGlwKCkuZmluZCgiLnRvb2x0aXAtYXJyb3ciKX0sYy5wcm90b3R5cGUuZW5hYmxlPWZ1bmN0aW9uKCl7dGhpcy5lbmFibGVkPSEwfSxjLnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7dGhpcy5lbmFibGVkPSExfSxjLnByb3RvdHlwZS50b2dnbGVFbmFibGVkPWZ1bmN0aW9uKCl7dGhpcy5lbmFibGVkPSF0aGlzLmVuYWJsZWR9LGMucHJvdG90eXBlLnRvZ2dsZT1mdW5jdGlvbihiKXt2YXIgYz10aGlzO2ImJihjPWEoYi5jdXJyZW50VGFyZ2V0KS5kYXRhKCJicy4iK3RoaXMudHlwZSksY3x8KGM9bmV3IHRoaXMuY29uc3RydWN0b3IoYi5jdXJyZW50VGFyZ2V0LHRoaXMuZ2V0RGVsZWdhdGVPcHRpb25zKCkpLGEoYi5jdXJyZW50VGFyZ2V0KS5kYXRhKCJicy4iK3RoaXMudHlwZSxjKSkpLGI/KGMuaW5TdGF0ZS5jbGljaz0hYy5pblN0YXRlLmNsaWNrLGMuaXNJblN0YXRlVHJ1ZSgpP2MuZW50ZXIoYyk6Yy5sZWF2ZShjKSk6Yy50aXAoKS5oYXNDbGFzcygiaW4iKT9jLmxlYXZlKGMpOmMuZW50ZXIoYyl9LGMucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgYT10aGlzO2NsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpLHRoaXMuaGlkZShmdW5jdGlvbigpe2EuJGVsZW1lbnQub2ZmKCIuIithLnR5cGUpLnJlbW92ZURhdGEoImJzLiIrYS50eXBlKSxhLiR0aXAmJmEuJHRpcC5kZXRhY2goKSxhLiR0aXA9bnVsbCxhLiRhcnJvdz1udWxsLGEuJHZpZXdwb3J0PW51bGx9KX07dmFyIGQ9YS5mbi50b29sdGlwO2EuZm4udG9vbHRpcD1iLGEuZm4udG9vbHRpcC5Db25zdHJ1Y3Rvcj1jLGEuZm4udG9vbHRpcC5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGEuZm4udG9vbHRpcD1kLHRoaXN9fShqUXVlcnkpLCtmdW5jdGlvbihhKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gYihiKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGQ9YSh0aGlzKSxlPWQuZGF0YSgiYnMucG9wb3ZlciIpLGY9Im9iamVjdCI9PXR5cGVvZiBiJiZiOyhlfHwhL2Rlc3Ryb3l8aGlkZS8udGVzdChiKSkmJihlfHxkLmRhdGEoImJzLnBvcG92ZXIiLGU9bmV3IGModGhpcyxmKSksInN0cmluZyI9PXR5cGVvZiBiJiZlW2JdKCkpfSl9dmFyIGM9ZnVuY3Rpb24oYSxiKXt0aGlzLmluaXQoInBvcG92ZXIiLGEsYil9O2lmKCFhLmZuLnRvb2x0aXApdGhyb3cgbmV3IEVycm9yKCJQb3BvdmVyIHJlcXVpcmVzIHRvb2x0aXAuanMiKTtjLlZFUlNJT049IjMuMy41IixjLkRFRkFVTFRTPWEuZXh0ZW5kKHt9LGEuZm4udG9vbHRpcC5Db25zdHJ1Y3Rvci5ERUZBVUxUUyx7cGxhY2VtZW50OiJyaWdodCIsdHJpZ2dlcjoiY2xpY2siLGNvbnRlbnQ6IiIsdGVtcGxhdGU6JzxkaXYgY2xhc3M9InBvcG92ZXIiIHJvbGU9InRvb2x0aXAiPjxkaXYgY2xhc3M9ImFycm93Ij48L2Rpdj48aDMgY2xhc3M9InBvcG92ZXItdGl0bGUiPjwvaDM+PGRpdiBjbGFzcz0icG9wb3Zlci1jb250ZW50Ij48L2Rpdj48L2Rpdj4nfSksYy5wcm90b3R5cGU9YS5leHRlbmQoe30sYS5mbi50b29sdGlwLkNvbnN0cnVjdG9yLnByb3RvdHlwZSksYy5wcm90b3R5cGUuY29uc3RydWN0b3I9YyxjLnByb3RvdHlwZS5nZXREZWZhdWx0cz1mdW5jdGlvbigpe3JldHVybiBjLkRFRkFVTFRTfSxjLnByb3RvdHlwZS5zZXRDb250ZW50PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy50aXAoKSxiPXRoaXMuZ2V0VGl0bGUoKSxjPXRoaXMuZ2V0Q29udGVudCgpO2EuZmluZCgiLnBvcG92ZXItdGl0bGUiKVt0aGlzLm9wdGlvbnMuaHRtbD8iaHRtbCI6InRleHQiXShiKSxhLmZpbmQoIi5wb3BvdmVyLWNvbnRlbnQiKS5jaGlsZHJlbigpLmRldGFjaCgpLmVuZCgpW3RoaXMub3B0aW9ucy5odG1sPyJzdHJpbmciPT10eXBlb2YgYz8iaHRtbCI6ImFwcGVuZCI6InRleHQiXShjKSxhLnJlbW92ZUNsYXNzKCJmYWRlIHRvcCBib3R0b20gbGVmdCByaWdodCBpbiIpLGEuZmluZCgiLnBvcG92ZXItdGl0bGUiKS5odG1sKCl8fGEuZmluZCgiLnBvcG92ZXItdGl0bGUiKS5oaWRlKCl9LGMucHJvdG90eXBlLmhhc0NvbnRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRUaXRsZSgpfHx0aGlzLmdldENvbnRlbnQoKX0sYy5wcm90b3R5cGUuZ2V0Q29udGVudD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuJGVsZW1lbnQsYj10aGlzLm9wdGlvbnM7cmV0dXJuIGEuYXR0cigiZGF0YS1jb250ZW50Iil8fCgiZnVuY3Rpb24iPT10eXBlb2YgYi5jb250ZW50P2IuY29udGVudC5jYWxsKGFbMF0pOmIuY29udGVudCl9LGMucHJvdG90eXBlLmFycm93PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGFycm93PXRoaXMuJGFycm93fHx0aGlzLnRpcCgpLmZpbmQoIi5hcnJvdyIpfTt2YXIgZD1hLmZuLnBvcG92ZXI7YS5mbi5wb3BvdmVyPWIsYS5mbi5wb3BvdmVyLkNvbnN0cnVjdG9yPWMsYS5mbi5wb3BvdmVyLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gYS5mbi5wb3BvdmVyPWQsdGhpc319KGpRdWVyeSksK2Z1bmN0aW9uKGEpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBiKGMsZCl7dGhpcy4kYm9keT1hKGRvY3VtZW50LmJvZHkpLHRoaXMuJHNjcm9sbEVsZW1lbnQ9YShhKGMpLmlzKGRvY3VtZW50LmJvZHkpP3dpbmRvdzpjKSx0aGlzLm9wdGlvbnM9YS5leHRlbmQoe30sYi5ERUZBVUxUUyxkKSx0aGlzLnNlbGVjdG9yPSh0aGlzLm9wdGlvbnMudGFyZ2V0fHwiIikrIiAubmF2IGxpID4gYSIsdGhpcy5vZmZzZXRzPVtdLHRoaXMudGFyZ2V0cz1bXSx0aGlzLmFjdGl2ZVRhcmdldD1udWxsLHRoaXMuc2Nyb2xsSGVpZ2h0PTAsdGhpcy4kc2Nyb2xsRWxlbWVudC5vbigic2Nyb2xsLmJzLnNjcm9sbHNweSIsYS5wcm94eSh0aGlzLnByb2Nlc3MsdGhpcykpLHRoaXMucmVmcmVzaCgpLHRoaXMucHJvY2VzcygpfWZ1bmN0aW9uIGMoYyl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBkPWEodGhpcyksZT1kLmRhdGEoImJzLnNjcm9sbHNweSIpLGY9Im9iamVjdCI9PXR5cGVvZiBjJiZjO2V8fGQuZGF0YSgiYnMuc2Nyb2xsc3B5IixlPW5ldyBiKHRoaXMsZikpLCJzdHJpbmciPT10eXBlb2YgYyYmZVtjXSgpfSl9Yi5WRVJTSU9OPSIzLjMuNSIsYi5ERUZBVUxUUz17b2Zmc2V0OjEwfSxiLnByb3RvdHlwZS5nZXRTY3JvbGxIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kc2Nyb2xsRWxlbWVudFswXS5zY3JvbGxIZWlnaHR8fE1hdGgubWF4KHRoaXMuJGJvZHlbMF0uc2Nyb2xsSGVpZ2h0LGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxIZWlnaHQpfSxiLnByb3RvdHlwZS5yZWZyZXNoPWZ1bmN0aW9uKCl7dmFyIGI9dGhpcyxjPSJvZmZzZXQiLGQ9MDt0aGlzLm9mZnNldHM9W10sdGhpcy50YXJnZXRzPVtdLHRoaXMuc2Nyb2xsSGVpZ2h0PXRoaXMuZ2V0U2Nyb2xsSGVpZ2h0KCksYS5pc1dpbmRvdyh0aGlzLiRzY3JvbGxFbGVtZW50WzBdKXx8KGM9InBvc2l0aW9uIixkPXRoaXMuJHNjcm9sbEVsZW1lbnQuc2Nyb2xsVG9wKCkpLHRoaXMuJGJvZHkuZmluZCh0aGlzLnNlbGVjdG9yKS5tYXAoZnVuY3Rpb24oKXt2YXIgYj1hKHRoaXMpLGU9Yi5kYXRhKCJ0YXJnZXQiKXx8Yi5hdHRyKCJocmVmIiksZj0vXiMuLy50ZXN0KGUpJiZhKGUpO3JldHVybiBmJiZmLmxlbmd0aCYmZi5pcygiOnZpc2libGUiKSYmW1tmW2NdKCkudG9wK2QsZV1dfHxudWxsfSkuc29ydChmdW5jdGlvbihhLGIpe3JldHVybiBhWzBdLWJbMF19KS5lYWNoKGZ1bmN0aW9uKCl7Yi5vZmZzZXRzLnB1c2godGhpc1swXSksYi50YXJnZXRzLnB1c2godGhpc1sxXSl9KX0sYi5wcm90b3R5cGUucHJvY2Vzcz1mdW5jdGlvbigpe3ZhciBhLGI9dGhpcy4kc2Nyb2xsRWxlbWVudC5zY3JvbGxUb3AoKSt0aGlzLm9wdGlvbnMub2Zmc2V0LGM9dGhpcy5nZXRTY3JvbGxIZWlnaHQoKSxkPXRoaXMub3B0aW9ucy5vZmZzZXQrYy10aGlzLiRzY3JvbGxFbGVtZW50LmhlaWdodCgpLGU9dGhpcy5vZmZzZXRzLGY9dGhpcy50YXJnZXRzLGc9dGhpcy5hY3RpdmVUYXJnZXQ7aWYodGhpcy5zY3JvbGxIZWlnaHQhPWMmJnRoaXMucmVmcmVzaCgpLGI+PWQpcmV0dXJuIGchPShhPWZbZi5sZW5ndGgtMV0pJiZ0aGlzLmFjdGl2YXRlKGEpO2lmKGcmJmI8ZVswXSlyZXR1cm4gdGhpcy5hY3RpdmVUYXJnZXQ9bnVsbCx0aGlzLmNsZWFyKCk7Zm9yKGE9ZS5sZW5ndGg7YS0tOylnIT1mW2FdJiZiPj1lW2FdJiYodm9pZCAwPT09ZVthKzFdfHxiPGVbYSsxXSkmJnRoaXMuYWN0aXZhdGUoZlthXSl9LGIucHJvdG90eXBlLmFjdGl2YXRlPWZ1bmN0aW9uKGIpe3RoaXMuYWN0aXZlVGFyZ2V0PWIsdGhpcy5jbGVhcigpO3ZhciBjPXRoaXMuc2VsZWN0b3IrJ1tkYXRhLXRhcmdldD0iJytiKyciXSwnK3RoaXMuc2VsZWN0b3IrJ1tocmVmPSInK2IrJyJdJyxkPWEoYykucGFyZW50cygibGkiKS5hZGRDbGFzcygiYWN0aXZlIik7ZC5wYXJlbnQoIi5kcm9wZG93bi1tZW51IikubGVuZ3RoJiYoZD1kLmNsb3Nlc3QoImxpLmRyb3Bkb3duIikuYWRkQ2xhc3MoImFjdGl2ZSIpKSwKZC50cmlnZ2VyKCJhY3RpdmF0ZS5icy5zY3JvbGxzcHkiKX0sYi5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXthKHRoaXMuc2VsZWN0b3IpLnBhcmVudHNVbnRpbCh0aGlzLm9wdGlvbnMudGFyZ2V0LCIuYWN0aXZlIikucmVtb3ZlQ2xhc3MoImFjdGl2ZSIpfTt2YXIgZD1hLmZuLnNjcm9sbHNweTthLmZuLnNjcm9sbHNweT1jLGEuZm4uc2Nyb2xsc3B5LkNvbnN0cnVjdG9yPWIsYS5mbi5zY3JvbGxzcHkubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBhLmZuLnNjcm9sbHNweT1kLHRoaXN9LGEod2luZG93KS5vbigibG9hZC5icy5zY3JvbGxzcHkuZGF0YS1hcGkiLGZ1bmN0aW9uKCl7YSgnW2RhdGEtc3B5PSJzY3JvbGwiXScpLmVhY2goZnVuY3Rpb24oKXt2YXIgYj1hKHRoaXMpO2MuY2FsbChiLGIuZGF0YSgpKX0pfSl9KGpRdWVyeSksK2Z1bmN0aW9uKGEpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBiKGIpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZD1hKHRoaXMpLGU9ZC5kYXRhKCJicy50YWIiKTtlfHxkLmRhdGEoImJzLnRhYiIsZT1uZXcgYyh0aGlzKSksInN0cmluZyI9PXR5cGVvZiBiJiZlW2JdKCl9KX12YXIgYz1mdW5jdGlvbihiKXt0aGlzLmVsZW1lbnQ9YShiKX07Yy5WRVJTSU9OPSIzLjMuNSIsYy5UUkFOU0lUSU9OX0RVUkFUSU9OPTE1MCxjLnByb3RvdHlwZS5zaG93PWZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5lbGVtZW50LGM9Yi5jbG9zZXN0KCJ1bDpub3QoLmRyb3Bkb3duLW1lbnUpIiksZD1iLmRhdGEoInRhcmdldCIpO2lmKGR8fChkPWIuYXR0cigiaHJlZiIpLGQ9ZCYmZC5yZXBsYWNlKC8uKig/PSNbXlxzXSokKS8sIiIpKSwhYi5wYXJlbnQoImxpIikuaGFzQ2xhc3MoImFjdGl2ZSIpKXt2YXIgZT1jLmZpbmQoIi5hY3RpdmU6bGFzdCBhIiksZj1hLkV2ZW50KCJoaWRlLmJzLnRhYiIse3JlbGF0ZWRUYXJnZXQ6YlswXX0pLGc9YS5FdmVudCgic2hvdy5icy50YWIiLHtyZWxhdGVkVGFyZ2V0OmVbMF19KTtpZihlLnRyaWdnZXIoZiksYi50cmlnZ2VyKGcpLCFnLmlzRGVmYXVsdFByZXZlbnRlZCgpJiYhZi5pc0RlZmF1bHRQcmV2ZW50ZWQoKSl7dmFyIGg9YShkKTt0aGlzLmFjdGl2YXRlKGIuY2xvc2VzdCgibGkiKSxjKSx0aGlzLmFjdGl2YXRlKGgsaC5wYXJlbnQoKSxmdW5jdGlvbigpe2UudHJpZ2dlcih7dHlwZToiaGlkZGVuLmJzLnRhYiIscmVsYXRlZFRhcmdldDpiWzBdfSksYi50cmlnZ2VyKHt0eXBlOiJzaG93bi5icy50YWIiLHJlbGF0ZWRUYXJnZXQ6ZVswXX0pfSl9fX0sYy5wcm90b3R5cGUuYWN0aXZhdGU9ZnVuY3Rpb24oYixkLGUpe2Z1bmN0aW9uIGYoKXtnLnJlbW92ZUNsYXNzKCJhY3RpdmUiKS5maW5kKCI+IC5kcm9wZG93bi1tZW51ID4gLmFjdGl2ZSIpLnJlbW92ZUNsYXNzKCJhY3RpdmUiKS5lbmQoKS5maW5kKCdbZGF0YS10b2dnbGU9InRhYiJdJykuYXR0cigiYXJpYS1leHBhbmRlZCIsITEpLGIuYWRkQ2xhc3MoImFjdGl2ZSIpLmZpbmQoJ1tkYXRhLXRvZ2dsZT0idGFiIl0nKS5hdHRyKCJhcmlhLWV4cGFuZGVkIiwhMCksaD8oYlswXS5vZmZzZXRXaWR0aCxiLmFkZENsYXNzKCJpbiIpKTpiLnJlbW92ZUNsYXNzKCJmYWRlIiksYi5wYXJlbnQoIi5kcm9wZG93bi1tZW51IikubGVuZ3RoJiZiLmNsb3Nlc3QoImxpLmRyb3Bkb3duIikuYWRkQ2xhc3MoImFjdGl2ZSIpLmVuZCgpLmZpbmQoJ1tkYXRhLXRvZ2dsZT0idGFiIl0nKS5hdHRyKCJhcmlhLWV4cGFuZGVkIiwhMCksZSYmZSgpfXZhciBnPWQuZmluZCgiPiAuYWN0aXZlIiksaD1lJiZhLnN1cHBvcnQudHJhbnNpdGlvbiYmKGcubGVuZ3RoJiZnLmhhc0NsYXNzKCJmYWRlIil8fCEhZC5maW5kKCI+IC5mYWRlIikubGVuZ3RoKTtnLmxlbmd0aCYmaD9nLm9uZSgiYnNUcmFuc2l0aW9uRW5kIixmKS5lbXVsYXRlVHJhbnNpdGlvbkVuZChjLlRSQU5TSVRJT05fRFVSQVRJT04pOmYoKSxnLnJlbW92ZUNsYXNzKCJpbiIpfTt2YXIgZD1hLmZuLnRhYjthLmZuLnRhYj1iLGEuZm4udGFiLkNvbnN0cnVjdG9yPWMsYS5mbi50YWIubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBhLmZuLnRhYj1kLHRoaXN9O3ZhciBlPWZ1bmN0aW9uKGMpe2MucHJldmVudERlZmF1bHQoKSxiLmNhbGwoYSh0aGlzKSwic2hvdyIpfTthKGRvY3VtZW50KS5vbigiY2xpY2suYnMudGFiLmRhdGEtYXBpIiwnW2RhdGEtdG9nZ2xlPSJ0YWIiXScsZSkub24oImNsaWNrLmJzLnRhYi5kYXRhLWFwaSIsJ1tkYXRhLXRvZ2dsZT0icGlsbCJdJyxlKX0oalF1ZXJ5KSwrZnVuY3Rpb24oYSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGIoYil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBkPWEodGhpcyksZT1kLmRhdGEoImJzLmFmZml4IiksZj0ib2JqZWN0Ij09dHlwZW9mIGImJmI7ZXx8ZC5kYXRhKCJicy5hZmZpeCIsZT1uZXcgYyh0aGlzLGYpKSwic3RyaW5nIj09dHlwZW9mIGImJmVbYl0oKX0pfXZhciBjPWZ1bmN0aW9uKGIsZCl7dGhpcy5vcHRpb25zPWEuZXh0ZW5kKHt9LGMuREVGQVVMVFMsZCksdGhpcy4kdGFyZ2V0PWEodGhpcy5vcHRpb25zLnRhcmdldCkub24oInNjcm9sbC5icy5hZmZpeC5kYXRhLWFwaSIsYS5wcm94eSh0aGlzLmNoZWNrUG9zaXRpb24sdGhpcykpLm9uKCJjbGljay5icy5hZmZpeC5kYXRhLWFwaSIsYS5wcm94eSh0aGlzLmNoZWNrUG9zaXRpb25XaXRoRXZlbnRMb29wLHRoaXMpKSx0aGlzLiRlbGVtZW50PWEoYiksdGhpcy5hZmZpeGVkPW51bGwsdGhpcy51bnBpbj1udWxsLHRoaXMucGlubmVkT2Zmc2V0PW51bGwsdGhpcy5jaGVja1Bvc2l0aW9uKCl9O2MuVkVSU0lPTj0iMy4zLjUiLGMuUkVTRVQ9ImFmZml4IGFmZml4LXRvcCBhZmZpeC1ib3R0b20iLGMuREVGQVVMVFM9e29mZnNldDowLHRhcmdldDp3aW5kb3d9LGMucHJvdG90eXBlLmdldFN0YXRlPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPXRoaXMuJHRhcmdldC5zY3JvbGxUb3AoKSxmPXRoaXMuJGVsZW1lbnQub2Zmc2V0KCksZz10aGlzLiR0YXJnZXQuaGVpZ2h0KCk7aWYobnVsbCE9YyYmInRvcCI9PXRoaXMuYWZmaXhlZClyZXR1cm4gYz5lPyJ0b3AiOiExO2lmKCJib3R0b20iPT10aGlzLmFmZml4ZWQpcmV0dXJuIG51bGwhPWM/ZSt0aGlzLnVucGluPD1mLnRvcD8hMToiYm90dG9tIjphLWQ+PWUrZz8hMToiYm90dG9tIjt2YXIgaD1udWxsPT10aGlzLmFmZml4ZWQsaT1oP2U6Zi50b3Asaj1oP2c6YjtyZXR1cm4gbnVsbCE9YyYmYz49ZT8idG9wIjpudWxsIT1kJiZpK2o+PWEtZD8iYm90dG9tIjohMX0sYy5wcm90b3R5cGUuZ2V0UGlubmVkT2Zmc2V0PWZ1bmN0aW9uKCl7aWYodGhpcy5waW5uZWRPZmZzZXQpcmV0dXJuIHRoaXMucGlubmVkT2Zmc2V0O3RoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoYy5SRVNFVCkuYWRkQ2xhc3MoImFmZml4Iik7dmFyIGE9dGhpcy4kdGFyZ2V0LnNjcm9sbFRvcCgpLGI9dGhpcy4kZWxlbWVudC5vZmZzZXQoKTtyZXR1cm4gdGhpcy5waW5uZWRPZmZzZXQ9Yi50b3AtYX0sYy5wcm90b3R5cGUuY2hlY2tQb3NpdGlvbldpdGhFdmVudExvb3A9ZnVuY3Rpb24oKXtzZXRUaW1lb3V0KGEucHJveHkodGhpcy5jaGVja1Bvc2l0aW9uLHRoaXMpLDEpfSxjLnByb3RvdHlwZS5jaGVja1Bvc2l0aW9uPWZ1bmN0aW9uKCl7aWYodGhpcy4kZWxlbWVudC5pcygiOnZpc2libGUiKSl7dmFyIGI9dGhpcy4kZWxlbWVudC5oZWlnaHQoKSxkPXRoaXMub3B0aW9ucy5vZmZzZXQsZT1kLnRvcCxmPWQuYm90dG9tLGc9TWF0aC5tYXgoYShkb2N1bWVudCkuaGVpZ2h0KCksYShkb2N1bWVudC5ib2R5KS5oZWlnaHQoKSk7Im9iamVjdCIhPXR5cGVvZiBkJiYoZj1lPWQpLCJmdW5jdGlvbiI9PXR5cGVvZiBlJiYoZT1kLnRvcCh0aGlzLiRlbGVtZW50KSksImZ1bmN0aW9uIj09dHlwZW9mIGYmJihmPWQuYm90dG9tKHRoaXMuJGVsZW1lbnQpKTt2YXIgaD10aGlzLmdldFN0YXRlKGcsYixlLGYpO2lmKHRoaXMuYWZmaXhlZCE9aCl7bnVsbCE9dGhpcy51bnBpbiYmdGhpcy4kZWxlbWVudC5jc3MoInRvcCIsIiIpO3ZhciBpPSJhZmZpeCIrKGg/Ii0iK2g6IiIpLGo9YS5FdmVudChpKyIuYnMuYWZmaXgiKTtpZih0aGlzLiRlbGVtZW50LnRyaWdnZXIoaiksai5pc0RlZmF1bHRQcmV2ZW50ZWQoKSlyZXR1cm47dGhpcy5hZmZpeGVkPWgsdGhpcy51bnBpbj0iYm90dG9tIj09aD90aGlzLmdldFBpbm5lZE9mZnNldCgpOm51bGwsdGhpcy4kZWxlbWVudC5yZW1vdmVDbGFzcyhjLlJFU0VUKS5hZGRDbGFzcyhpKS50cmlnZ2VyKGkucmVwbGFjZSgiYWZmaXgiLCJhZmZpeGVkIikrIi5icy5hZmZpeCIpfSJib3R0b20iPT1oJiZ0aGlzLiRlbGVtZW50Lm9mZnNldCh7dG9wOmctYi1mfSl9fTt2YXIgZD1hLmZuLmFmZml4O2EuZm4uYWZmaXg9YixhLmZuLmFmZml4LkNvbnN0cnVjdG9yPWMsYS5mbi5hZmZpeC5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGEuZm4uYWZmaXg9ZCx0aGlzfSxhKHdpbmRvdykub24oImxvYWQiLGZ1bmN0aW9uKCl7YSgnW2RhdGEtc3B5PSJhZmZpeCJdJykuZWFjaChmdW5jdGlvbigpe3ZhciBjPWEodGhpcyksZD1jLmRhdGEoKTtkLm9mZnNldD1kLm9mZnNldHx8e30sbnVsbCE9ZC5vZmZzZXRCb3R0b20mJihkLm9mZnNldC5ib3R0b209ZC5vZmZzZXRCb3R0b20pLG51bGwhPWQub2Zmc2V0VG9wJiYoZC5vZmZzZXQudG9wPWQub2Zmc2V0VG9wKSxiLmNhbGwoYyxkKX0pfSl9KGpRdWVyeSk7"></script>
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
20 <script src="data:application/x-javascript;base64,LyoqCiogQHByZXNlcnZlIEhUTUw1IFNoaXYgMy43LjIgfCBAYWZhcmthcyBAamRhbHRvbiBAam9uX25lYWwgQHJlbSB8IE1JVC9HUEwyIExpY2Vuc2VkCiovCi8vIE9ubHkgcnVuIHRoaXMgY29kZSBpbiBJRSA4CmlmICghIXdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKCJNU0lFIDgiKSkgewohZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGEsYil7dmFyIGM9YS5jcmVhdGVFbGVtZW50KCJwIiksZD1hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF18fGEuZG9jdW1lbnRFbGVtZW50O3JldHVybiBjLmlubmVySFRNTD0ieDxzdHlsZT4iK2IrIjwvc3R5bGU+IixkLmluc2VydEJlZm9yZShjLmxhc3RDaGlsZCxkLmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIGQoKXt2YXIgYT10LmVsZW1lbnRzO3JldHVybiJzdHJpbmciPT10eXBlb2YgYT9hLnNwbGl0KCIgIik6YX1mdW5jdGlvbiBlKGEsYil7dmFyIGM9dC5lbGVtZW50czsic3RyaW5nIiE9dHlwZW9mIGMmJihjPWMuam9pbigiICIpKSwic3RyaW5nIiE9dHlwZW9mIGEmJihhPWEuam9pbigiICIpKSx0LmVsZW1lbnRzPWMrIiAiK2EsaihiKX1mdW5jdGlvbiBmKGEpe3ZhciBiPXNbYVtxXV07cmV0dXJuIGJ8fChiPXt9LHIrKyxhW3FdPXIsc1tyXT1iKSxifWZ1bmN0aW9uIGcoYSxjLGQpe2lmKGN8fChjPWIpLGwpcmV0dXJuIGMuY3JlYXRlRWxlbWVudChhKTtkfHwoZD1mKGMpKTt2YXIgZTtyZXR1cm4gZT1kLmNhY2hlW2FdP2QuY2FjaGVbYV0uY2xvbmVOb2RlKCk6cC50ZXN0KGEpPyhkLmNhY2hlW2FdPWQuY3JlYXRlRWxlbShhKSkuY2xvbmVOb2RlKCk6ZC5jcmVhdGVFbGVtKGEpLCFlLmNhbkhhdmVDaGlsZHJlbnx8by50ZXN0KGEpfHxlLnRhZ1Vybj9lOmQuZnJhZy5hcHBlbmRDaGlsZChlKX1mdW5jdGlvbiBoKGEsYyl7aWYoYXx8KGE9YiksbClyZXR1cm4gYS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7Yz1jfHxmKGEpO2Zvcih2YXIgZT1jLmZyYWcuY2xvbmVOb2RlKCksZz0wLGg9ZCgpLGk9aC5sZW5ndGg7aT5nO2crKyllLmNyZWF0ZUVsZW1lbnQoaFtnXSk7cmV0dXJuIGV9ZnVuY3Rpb24gaShhLGIpe2IuY2FjaGV8fChiLmNhY2hlPXt9LGIuY3JlYXRlRWxlbT1hLmNyZWF0ZUVsZW1lbnQsYi5jcmVhdGVGcmFnPWEuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCxiLmZyYWc9Yi5jcmVhdGVGcmFnKCkpLGEuY3JlYXRlRWxlbWVudD1mdW5jdGlvbihjKXtyZXR1cm4gdC5zaGl2TWV0aG9kcz9nKGMsYSxiKTpiLmNyZWF0ZUVsZW0oYyl9LGEuY3JlYXRlRG9jdW1lbnRGcmFnbWVudD1GdW5jdGlvbigiaCxmIiwicmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49Zi5jbG9uZU5vZGUoKSxjPW4uY3JlYXRlRWxlbWVudDtoLnNoaXZNZXRob2RzJiYoIitkKCkuam9pbigpLnJlcGxhY2UoL1tcd1wtOl0rL2csZnVuY3Rpb24oYSl7cmV0dXJuIGIuY3JlYXRlRWxlbShhKSxiLmZyYWcuY3JlYXRlRWxlbWVudChhKSwnYygiJythKyciKSd9KSsiKTtyZXR1cm4gbn0iKSh0LGIuZnJhZyl9ZnVuY3Rpb24gaihhKXthfHwoYT1iKTt2YXIgZD1mKGEpO3JldHVybiF0LnNoaXZDU1N8fGt8fGQuaGFzQ1NTfHwoZC5oYXNDU1M9ISFjKGEsImFydGljbGUsYXNpZGUsZGlhbG9nLGZpZ2NhcHRpb24sZmlndXJlLGZvb3RlcixoZWFkZXIsaGdyb3VwLG1haW4sbmF2LHNlY3Rpb257ZGlzcGxheTpibG9ja31tYXJre2JhY2tncm91bmQ6I0ZGMDtjb2xvcjojMDAwfXRlbXBsYXRle2Rpc3BsYXk6bm9uZX0iKSksbHx8aShhLGQpLGF9dmFyIGssbCxtPSIzLjcuMiIsbj1hLmh0bWw1fHx7fSxvPS9ePHxeKD86YnV0dG9ufG1hcHxzZWxlY3R8dGV4dGFyZWF8b2JqZWN0fGlmcmFtZXxvcHRpb258b3B0Z3JvdXApJC9pLHA9L14oPzphfGJ8Y29kZXxkaXZ8ZmllbGRzZXR8aDF8aDJ8aDN8aDR8aDV8aDZ8aXxsYWJlbHxsaXxvbHxwfHF8c3BhbnxzdHJvbmd8c3R5bGV8dGFibGV8dGJvZHl8dGR8dGh8dHJ8dWwpJC9pLHE9Il9odG1sNXNoaXYiLHI9MCxzPXt9OyFmdW5jdGlvbigpe3RyeXt2YXIgYT1iLmNyZWF0ZUVsZW1lbnQoImEiKTthLmlubmVySFRNTD0iPHh5ej48L3h5ej4iLGs9ImhpZGRlbiJpbiBhLGw9MT09YS5jaGlsZE5vZGVzLmxlbmd0aHx8ZnVuY3Rpb24oKXtiLmNyZWF0ZUVsZW1lbnQoImEiKTt2YXIgYT1iLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtyZXR1cm4idW5kZWZpbmVkIj09dHlwZW9mIGEuY2xvbmVOb2RlfHwidW5kZWZpbmVkIj09dHlwZW9mIGEuY3JlYXRlRG9jdW1lbnRGcmFnbWVudHx8InVuZGVmaW5lZCI9PXR5cGVvZiBhLmNyZWF0ZUVsZW1lbnR9KCl9Y2F0Y2goYyl7az0hMCxsPSEwfX0oKTt2YXIgdD17ZWxlbWVudHM6bi5lbGVtZW50c3x8ImFiYnIgYXJ0aWNsZSBhc2lkZSBhdWRpbyBiZGkgY2FudmFzIGRhdGEgZGF0YWxpc3QgZGV0YWlscyBkaWFsb2cgZmlnY2FwdGlvbiBmaWd1cmUgZm9vdGVyIGhlYWRlciBoZ3JvdXAgbWFpbiBtYXJrIG1ldGVyIG5hdiBvdXRwdXQgcGljdHVyZSBwcm9ncmVzcyBzZWN0aW9uIHN1bW1hcnkgdGVtcGxhdGUgdGltZSB2aWRlbyIsdmVyc2lvbjptLHNoaXZDU1M6bi5zaGl2Q1NTIT09ITEsc3VwcG9ydHNVbmtub3duRWxlbWVudHM6bCxzaGl2TWV0aG9kczpuLnNoaXZNZXRob2RzIT09ITEsdHlwZToiZGVmYXVsdCIsc2hpdkRvY3VtZW50OmosY3JlYXRlRWxlbWVudDpnLGNyZWF0ZURvY3VtZW50RnJhZ21lbnQ6aCxhZGRFbGVtZW50czplfTthLmh0bWw1PXQsaihiKX0odGhpcyxkb2N1bWVudCk7Cn07Cg=="></script>
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
21 <script src="data:application/x-javascript;base64,LyohIFJlc3BvbmQuanMgdjEuNC4yOiBtaW4vbWF4LXdpZHRoIG1lZGlhIHF1ZXJ5IHBvbHlmaWxsICogQ29weXJpZ2h0IDIwMTMgU2NvdHQgSmVobAogKiBMaWNlbnNlZCB1bmRlciBodHRwczovL2dpdGh1Yi5jb20vc2NvdHRqZWhsL1Jlc3BvbmQvYmxvYi9tYXN0ZXIvTElDRU5TRS1NSVQKICogICovCgovLyBPbmx5IHJ1biB0aGlzIGNvZGUgaW4gSUUgOAppZiAoISF3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgiTVNJRSA4IikpIHsKIWZ1bmN0aW9uKGEpeyJ1c2Ugc3RyaWN0IjthLm1hdGNoTWVkaWE9YS5tYXRjaE1lZGlhfHxmdW5jdGlvbihhKXt2YXIgYixjPWEuZG9jdW1lbnRFbGVtZW50LGQ9Yy5maXJzdEVsZW1lbnRDaGlsZHx8Yy5maXJzdENoaWxkLGU9YS5jcmVhdGVFbGVtZW50KCJib2R5IiksZj1hLmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiBmLmlkPSJtcS10ZXN0LTEiLGYuc3R5bGUuY3NzVGV4dD0icG9zaXRpb246YWJzb2x1dGU7dG9wOi0xMDBlbSIsZS5zdHlsZS5iYWNrZ3JvdW5kPSJub25lIixlLmFwcGVuZENoaWxkKGYpLGZ1bmN0aW9uKGEpe3JldHVybiBmLmlubmVySFRNTD0nJnNoeTs8c3R5bGUgbWVkaWE9IicrYSsnIj4gI21xLXRlc3QtMSB7IHdpZHRoOiA0MnB4OyB9PC9zdHlsZT4nLGMuaW5zZXJ0QmVmb3JlKGUsZCksYj00Mj09PWYub2Zmc2V0V2lkdGgsYy5yZW1vdmVDaGlsZChlKSx7bWF0Y2hlczpiLG1lZGlhOmF9fX0oYS5kb2N1bWVudCl9KHRoaXMpLGZ1bmN0aW9uKGEpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBiKCl7dSghMCl9dmFyIGM9e307YS5yZXNwb25kPWMsYy51cGRhdGU9ZnVuY3Rpb24oKXt9O3ZhciBkPVtdLGU9ZnVuY3Rpb24oKXt2YXIgYj0hMTt0cnl7Yj1uZXcgYS5YTUxIdHRwUmVxdWVzdH1jYXRjaChjKXtiPW5ldyBhLkFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxIVFRQIil9cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGJ9fSgpLGY9ZnVuY3Rpb24oYSxiKXt2YXIgYz1lKCk7YyYmKGMub3BlbigiR0VUIixhLCEwKSxjLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpezQhPT1jLnJlYWR5U3RhdGV8fDIwMCE9PWMuc3RhdHVzJiYzMDQhPT1jLnN0YXR1c3x8YihjLnJlc3BvbnNlVGV4dCl9LDQhPT1jLnJlYWR5U3RhdGUmJmMuc2VuZChudWxsKSl9O2lmKGMuYWpheD1mLGMucXVldWU9ZCxjLnJlZ2V4PXttZWRpYTovQG1lZGlhW15ce10rXHsoW15ce1x9XSpce1teXH1ce10qXH0pKy9naSxrZXlmcmFtZXM6L0AoPzpcLSg/Om98bW96fHdlYmtpdClcLSk/a2V5ZnJhbWVzW15ce10rXHsoPzpbXlx7XH1dKlx7W15cfVx7XSpcfSkrW15cfV0qXH0vZ2ksdXJsczovKHVybFwoKVsnIl0/KFteXC9cKSciXVteOlwpJyJdKylbJyJdPyhcKSkvZyxmaW5kU3R5bGVzOi9AbWVkaWEgKihbXlx7XSspXHsoW1xTXHNdKz8pJC8sb25seTovKG9ubHlccyspPyhbYS16QS1aXSspXHM/LyxtaW53Oi9cKFtcc10qbWluXC13aWR0aFxzKjpbXHNdKihbXHNdKlswLTlcLl0rKShweHxlbSlbXHNdKlwpLyxtYXh3Oi9cKFtcc10qbWF4XC13aWR0aFxzKjpbXHNdKihbXHNdKlswLTlcLl0rKShweHxlbSlbXHNdKlwpL30sYy5tZWRpYVF1ZXJpZXNTdXBwb3J0ZWQ9YS5tYXRjaE1lZGlhJiZudWxsIT09YS5tYXRjaE1lZGlhKCJvbmx5IGFsbCIpJiZhLm1hdGNoTWVkaWEoIm9ubHkgYWxsIikubWF0Y2hlcywhYy5tZWRpYVF1ZXJpZXNTdXBwb3J0ZWQpe3ZhciBnLGgsaSxqPWEuZG9jdW1lbnQsaz1qLmRvY3VtZW50RWxlbWVudCxsPVtdLG09W10sbj1bXSxvPXt9LHA9MzAscT1qLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF18fGsscj1qLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJiYXNlIilbMF0scz1xLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJsaW5rIiksdD1mdW5jdGlvbigpe3ZhciBhLGI9ai5jcmVhdGVFbGVtZW50KCJkaXYiKSxjPWouYm9keSxkPWsuc3R5bGUuZm9udFNpemUsZT1jJiZjLnN0eWxlLmZvbnRTaXplLGY9ITE7cmV0dXJuIGIuc3R5bGUuY3NzVGV4dD0icG9zaXRpb246YWJzb2x1dGU7Zm9udC1zaXplOjFlbTt3aWR0aDoxZW0iLGN8fChjPWY9ai5jcmVhdGVFbGVtZW50KCJib2R5IiksYy5zdHlsZS5iYWNrZ3JvdW5kPSJub25lIiksay5zdHlsZS5mb250U2l6ZT0iMTAwJSIsYy5zdHlsZS5mb250U2l6ZT0iMTAwJSIsYy5hcHBlbmRDaGlsZChiKSxmJiZrLmluc2VydEJlZm9yZShjLGsuZmlyc3RDaGlsZCksYT1iLm9mZnNldFdpZHRoLGY/ay5yZW1vdmVDaGlsZChjKTpjLnJlbW92ZUNoaWxkKGIpLGsuc3R5bGUuZm9udFNpemU9ZCxlJiYoYy5zdHlsZS5mb250U2l6ZT1lKSxhPWk9cGFyc2VGbG9hdChhKX0sdT1mdW5jdGlvbihiKXt2YXIgYz0iY2xpZW50V2lkdGgiLGQ9a1tjXSxlPSJDU1MxQ29tcGF0Ij09PWouY29tcGF0TW9kZSYmZHx8ai5ib2R5W2NdfHxkLGY9e30sbz1zW3MubGVuZ3RoLTFdLHI9KG5ldyBEYXRlKS5nZXRUaW1lKCk7aWYoYiYmZyYmcD5yLWcpcmV0dXJuIGEuY2xlYXJUaW1lb3V0KGgpLGg9YS5zZXRUaW1lb3V0KHUscCksdm9pZCAwO2c9cjtmb3IodmFyIHYgaW4gbClpZihsLmhhc093blByb3BlcnR5KHYpKXt2YXIgdz1sW3ZdLHg9dy5taW53LHk9dy5tYXh3LHo9bnVsbD09PXgsQT1udWxsPT09eSxCPSJlbSI7eCYmKHg9cGFyc2VGbG9hdCh4KSooeC5pbmRleE9mKEIpPi0xP2l8fHQoKToxKSkseSYmKHk9cGFyc2VGbG9hdCh5KSooeS5pbmRleE9mKEIpPi0xP2l8fHQoKToxKSksdy5oYXNxdWVyeSYmKHomJkF8fCEoenx8ZT49eCl8fCEoQXx8eT49ZSkpfHwoZlt3Lm1lZGlhXXx8KGZbdy5tZWRpYV09W10pLGZbdy5tZWRpYV0ucHVzaChtW3cucnVsZXNdKSl9Zm9yKHZhciBDIGluIG4pbi5oYXNPd25Qcm9wZXJ0eShDKSYmbltDXSYmbltDXS5wYXJlbnROb2RlPT09cSYmcS5yZW1vdmVDaGlsZChuW0NdKTtuLmxlbmd0aD0wO2Zvcih2YXIgRCBpbiBmKWlmKGYuaGFzT3duUHJvcGVydHkoRCkpe3ZhciBFPWouY3JlYXRlRWxlbWVudCgic3R5bGUiKSxGPWZbRF0uam9pbigiXG4iKTtFLnR5cGU9InRleHQvY3NzIixFLm1lZGlhPUQscS5pbnNlcnRCZWZvcmUoRSxvLm5leHRTaWJsaW5nKSxFLnN0eWxlU2hlZXQ/RS5zdHlsZVNoZWV0LmNzc1RleHQ9RjpFLmFwcGVuZENoaWxkKGouY3JlYXRlVGV4dE5vZGUoRikpLG4ucHVzaChFKX19LHY9ZnVuY3Rpb24oYSxiLGQpe3ZhciBlPWEucmVwbGFjZShjLnJlZ2V4LmtleWZyYW1lcywiIikubWF0Y2goYy5yZWdleC5tZWRpYSksZj1lJiZlLmxlbmd0aHx8MDtiPWIuc3Vic3RyaW5nKDAsYi5sYXN0SW5kZXhPZigiLyIpKTt2YXIgZz1mdW5jdGlvbihhKXtyZXR1cm4gYS5yZXBsYWNlKGMucmVnZXgudXJscywiJDEiK2IrIiQyJDMiKX0saD0hZiYmZDtiLmxlbmd0aCYmKGIrPSIvIiksaCYmKGY9MSk7Zm9yKHZhciBpPTA7Zj5pO2krKyl7dmFyIGosayxuLG87aD8oaj1kLG0ucHVzaChnKGEpKSk6KGo9ZVtpXS5tYXRjaChjLnJlZ2V4LmZpbmRTdHlsZXMpJiZSZWdFeHAuJDEsbS5wdXNoKFJlZ0V4cC4kMiYmZyhSZWdFeHAuJDIpKSksbj1qLnNwbGl0KCIsIiksbz1uLmxlbmd0aDtmb3IodmFyIHA9MDtvPnA7cCsrKWs9bltwXSxsLnB1c2goe21lZGlhOmsuc3BsaXQoIigiKVswXS5tYXRjaChjLnJlZ2V4Lm9ubHkpJiZSZWdFeHAuJDJ8fCJhbGwiLHJ1bGVzOm0ubGVuZ3RoLTEsaGFzcXVlcnk6ay5pbmRleE9mKCIoIik+LTEsbWludzprLm1hdGNoKGMucmVnZXgubWludykmJnBhcnNlRmxvYXQoUmVnRXhwLiQxKSsoUmVnRXhwLiQyfHwiIiksbWF4dzprLm1hdGNoKGMucmVnZXgubWF4dykmJnBhcnNlRmxvYXQoUmVnRXhwLiQxKSsoUmVnRXhwLiQyfHwiIil9KX11KCl9LHc9ZnVuY3Rpb24oKXtpZihkLmxlbmd0aCl7dmFyIGI9ZC5zaGlmdCgpO2YoYi5ocmVmLGZ1bmN0aW9uKGMpe3YoYyxiLmhyZWYsYi5tZWRpYSksb1tiLmhyZWZdPSEwLGEuc2V0VGltZW91dChmdW5jdGlvbigpe3coKX0sMCl9KX19LHg9ZnVuY3Rpb24oKXtmb3IodmFyIGI9MDtiPHMubGVuZ3RoO2IrKyl7dmFyIGM9c1tiXSxlPWMuaHJlZixmPWMubWVkaWEsZz1jLnJlbCYmInN0eWxlc2hlZXQiPT09Yy5yZWwudG9Mb3dlckNhc2UoKTtlJiZnJiYhb1tlXSYmKGMuc3R5bGVTaGVldCYmYy5zdHlsZVNoZWV0LnJhd0Nzc1RleHQ/KHYoYy5zdHlsZVNoZWV0LnJhd0Nzc1RleHQsZSxmKSxvW2VdPSEwKTooIS9eKFthLXpBLVo6XSpcL1wvKS8udGVzdChlKSYmIXJ8fGUucmVwbGFjZShSZWdFeHAuJDEsIiIpLnNwbGl0KCIvIilbMF09PT1hLmxvY2F0aW9uLmhvc3QpJiYoIi8vIj09PWUuc3Vic3RyaW5nKDAsMikmJihlPWEubG9jYXRpb24ucHJvdG9jb2wrZSksZC5wdXNoKHtocmVmOmUsbWVkaWE6Zn0pKSl9dygpfTt4KCksYy51cGRhdGU9eCxjLmdldEVtVmFsdWU9dCxhLmFkZEV2ZW50TGlzdGVuZXI/YS5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLGIsITEpOmEuYXR0YWNoRXZlbnQmJmEuYXR0YWNoRXZlbnQoIm9ucmVzaXplIixiKX19KHRoaXMpOwp9Owo="></script>
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
22 <script src="data:application/x-javascript;base64,CgovKioKICogalF1ZXJ5IFBsdWdpbjogU3RpY2t5IFRhYnMKICoKICogQGF1dGhvciBBaWRhbiBMaXN0ZXIgPGFpZGFuQHBocC5uZXQ+CiAqIGFkYXB0ZWQgYnkgUnViZW4gQXJzbGFuIHRvIGFjdGl2YXRlIHBhcmVudCB0YWJzIHRvbwogKiBodHRwOi8vd3d3LmFpZGFubGlzdGVyLmNvbS8yMDE0LzAzL3BlcnNpc3RpbmctdGhlLXRhYi1zdGF0ZS1pbi1ib290c3RyYXAvCiAqLwooZnVuY3Rpb24oJCkgewogICJ1c2Ugc3RyaWN0IjsKICAkLmZuLnJtYXJrZG93blN0aWNreVRhYnMgPSBmdW5jdGlvbigpIHsKICAgIHZhciBjb250ZXh0ID0gdGhpczsKICAgIC8vIFNob3cgdGhlIHRhYiBjb3JyZXNwb25kaW5nIHdpdGggdGhlIGhhc2ggaW4gdGhlIFVSTCwgb3IgdGhlIGZpcnN0IHRhYgogICAgdmFyIHNob3dTdHVmZkZyb21IYXNoID0gZnVuY3Rpb24oKSB7CiAgICAgIHZhciBoYXNoID0gd2luZG93LmxvY2F0aW9uLmhhc2g7CiAgICAgIHZhciBzZWxlY3RvciA9IGhhc2ggPyAnYVtocmVmPSInICsgaGFzaCArICciXScgOiAnbGkuYWN0aXZlID4gYSc7CiAgICAgIHZhciAkc2VsZWN0b3IgPSAkKHNlbGVjdG9yLCBjb250ZXh0KTsKICAgICAgaWYoJHNlbGVjdG9yLmRhdGEoJ3RvZ2dsZScpID09PSAidGFiIikgewogICAgICAgICRzZWxlY3Rvci50YWIoJ3Nob3cnKTsKICAgICAgICAvLyB3YWxrIHVwIHRoZSBhbmNlc3RvcnMgb2YgdGhpcyBlbGVtZW50LCBzaG93IGFueSBoaWRkZW4gdGFicwogICAgICAgICRzZWxlY3Rvci5wYXJlbnRzKCcuc2VjdGlvbi50YWJzZXQnKS5lYWNoKGZ1bmN0aW9uKGksIGVsbSkgewogICAgICAgICAgdmFyIGxpbmsgPSAkKCdhW2hyZWY9IiMnICsgJChlbG0pLmF0dHIoJ2lkJykgKyAnIl0nKTsKICAgICAgICAgIGlmKGxpbmsuZGF0YSgndG9nZ2xlJykgPT09ICJ0YWIiKSB7CiAgICAgICAgICAgIGxpbmsudGFiKCJzaG93Iik7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH07CgoKICAgIC8vIFNldCB0aGUgY29ycmVjdCB0YWIgd2hlbiB0aGUgcGFnZSBsb2FkcwogICAgc2hvd1N0dWZmRnJvbUhhc2goY29udGV4dCk7CgogICAgLy8gU2V0IHRoZSBjb3JyZWN0IHRhYiB3aGVuIGEgdXNlciB1c2VzIHRoZWlyIGJhY2svZm9yd2FyZCBidXR0b24KICAgICQod2luZG93KS5vbignaGFzaGNoYW5nZScsIGZ1bmN0aW9uKCkgewogICAgICBzaG93U3R1ZmZGcm9tSGFzaChjb250ZXh0KTsKICAgIH0pOwoKICAgIC8vIENoYW5nZSB0aGUgVVJMIHdoZW4gdGFicyBhcmUgY2xpY2tlZAogICAgJCgnYScsIGNvbnRleHQpLm9uKCdjbGljaycsIGZ1bmN0aW9uKGUpIHsKICAgICAgaGlzdG9yeS5wdXNoU3RhdGUobnVsbCwgbnVsbCwgdGhpcy5ocmVmKTsKICAgICAgc2hvd1N0dWZmRnJvbUhhc2goY29udGV4dCk7CiAgICB9KTsKCiAgICByZXR1cm4gdGhpczsKICB9Owp9KGpRdWVyeSkpOwoKd2luZG93LmJ1aWxkVGFic2V0cyA9IGZ1bmN0aW9uKHRvY0lEKSB7CgogIC8vIGJ1aWxkIGEgdGFic2V0IGZyb20gYSBzZWN0aW9uIGRpdiB3aXRoIHRoZSAudGFic2V0IGNsYXNzCiAgZnVuY3Rpb24gYnVpbGRUYWJzZXQodGFic2V0KSB7CgogICAgLy8gY2hlY2sgZm9yIGZhZGUgYW5kIHBpbGxzIG9wdGlvbnMKICAgIHZhciBmYWRlID0gdGFic2V0Lmhhc0NsYXNzKCJ0YWJzZXQtZmFkZSIpOwogICAgdmFyIHBpbGxzID0gdGFic2V0Lmhhc0NsYXNzKCJ0YWJzZXQtcGlsbHMiKTsKICAgIHZhciBuYXZDbGFzcyA9IHBpbGxzID8gIm5hdi1waWxscyIgOiAibmF2LXRhYnMiOwoKICAgIC8vIGRldGVybWluZSB0aGUgaGVhZGluZyBsZXZlbCBvZiB0aGUgdGFic2V0IGFuZCB0YWJzCiAgICB2YXIgbWF0Y2ggPSB0YWJzZXQuYXR0cignY2xhc3MnKS5tYXRjaCgvbGV2ZWwoXGQpIC8pOwogICAgaWYgKG1hdGNoID09PSBudWxsKQogICAgICByZXR1cm47CiAgICB2YXIgdGFic2V0TGV2ZWwgPSBOdW1iZXIobWF0Y2hbMV0pOwogICAgdmFyIHRhYkxldmVsID0gdGFic2V0TGV2ZWwgKyAxOwoKICAgIC8vIGZpbmQgYWxsIHN1YmhlYWRpbmdzIGltbWVkaWF0ZWx5IGJlbG93CiAgICB2YXIgdGFicyA9IHRhYnNldC5maW5kKCJkaXYuc2VjdGlvbi5sZXZlbCIgKyB0YWJMZXZlbCk7CiAgICBpZiAoIXRhYnMubGVuZ3RoKQogICAgICByZXR1cm47CgogICAgLy8gY3JlYXRlIHRhYmxpc3QgYW5kIHRhYi1jb250ZW50IGVsZW1lbnRzCiAgICB2YXIgdGFiTGlzdCA9ICQoJzx1bCBjbGFzcz0ibmF2ICcgKyBuYXZDbGFzcyArICciIHJvbGU9InRhYmxpc3QiPjwvdWw+Jyk7CiAgICAkKHRhYnNbMF0pLmJlZm9yZSh0YWJMaXN0KTsKICAgIHZhciB0YWJDb250ZW50ID0gJCgnPGRpdiBjbGFzcz0idGFiLWNvbnRlbnQiPjwvZGl2PicpOwogICAgJCh0YWJzWzBdKS5iZWZvcmUodGFiQ29udGVudCk7CgogICAgLy8gYnVpbGQgdGhlIHRhYnNldAogICAgdmFyIGFjdGl2ZVRhYiA9IDA7CiAgICB0YWJzLmVhY2goZnVuY3Rpb24oaSkgewoKICAgICAgLy8gZ2V0IHRoZSB0YWIgZGl2CiAgICAgIHZhciB0YWIgPSAkKHRhYnNbaV0pOwoKICAgICAgLy8gZ2V0IHRoZSBpZCB0aGVuIHNhbml0aXplIGl0IGZvciB1c2Ugd2l0aCBib290c3RyYXAgdGFicwogICAgICB2YXIgaWQgPSB0YWIuYXR0cignaWQnKTsKCiAgICAgIC8vIHNlZSBpZiB0aGlzIGlzIG1hcmtlZCBhcyB0aGUgYWN0aXZlIHRhYgogICAgICBpZiAodGFiLmhhc0NsYXNzKCdhY3RpdmUnKSkKICAgICAgICBhY3RpdmVUYWIgPSBpOwoKICAgICAgLy8gcmVtb3ZlIGFueSB0YWJsZSBvZiBjb250ZW50cyBlbnRyaWVzIGFzc29jaWF0ZWQgd2l0aAogICAgICAvLyB0aGlzIElEIChzaW5jZSB3ZSdsbCBiZSByZW1vdmluZyB0aGUgaGVhZGluZyBlbGVtZW50KQogICAgICAkKCJkaXYjIiArIHRvY0lEICsgIiBsaSBhW2hyZWY9JyMiICsgaWQgKyAiJ10iKS5wYXJlbnQoKS5yZW1vdmUoKTsKCiAgICAgIC8vIHNhbml0aXplIHRoZSBpZCBmb3IgdXNlIHdpdGggYm9vdHN0cmFwIHRhYnMKICAgICAgaWQgPSBpZC5yZXBsYWNlKC9bLlwvPyYhIzw+XS9nLCAnJykucmVwbGFjZSgvXHMvZywgJ18nKTsKICAgICAgdGFiLmF0dHIoJ2lkJywgaWQpOwoKICAgICAgLy8gZ2V0IHRoZSBoZWFkaW5nIGVsZW1lbnQgd2l0aGluIGl0LCBncmFiIGl0J3MgdGV4dCwgdGhlbiByZW1vdmUgaXQKICAgICAgdmFyIGhlYWRpbmcgPSB0YWIuZmluZCgnaCcgKyB0YWJMZXZlbCArICc6Zmlyc3QnKTsKICAgICAgdmFyIGhlYWRpbmdUZXh0ID0gaGVhZGluZy5odG1sKCk7CiAgICAgIGhlYWRpbmcucmVtb3ZlKCk7CgogICAgICAvLyBidWlsZCBhbmQgYXBwZW5kIHRoZSB0YWIgbGlzdCBpdGVtCiAgICAgIHZhciBhID0gJCgnPGEgcm9sZT0idGFiIiBkYXRhLXRvZ2dsZT0idGFiIj4nICsgaGVhZGluZ1RleHQgKyAnPC9hPicpOwogICAgICBhLmF0dHIoJ2hyZWYnLCAnIycgKyBpZCk7CiAgICAgIGEuYXR0cignYXJpYS1jb250cm9scycsIGlkKTsKICAgICAgdmFyIGxpID0gJCgnPGxpIHJvbGU9InByZXNlbnRhdGlvbiI+PC9saT4nKTsKICAgICAgbGkuYXBwZW5kKGEpOwogICAgICB0YWJMaXN0LmFwcGVuZChsaSk7CgogICAgICAvLyBzZXQgaXQncyBhdHRyaWJ1dGVzCiAgICAgIHRhYi5hdHRyKCdyb2xlJywgJ3RhYnBhbmVsJyk7CiAgICAgIHRhYi5hZGRDbGFzcygndGFiLXBhbmUnKTsKICAgICAgdGFiLmFkZENsYXNzKCd0YWJiZWQtcGFuZScpOwogICAgICBpZiAoZmFkZSkKICAgICAgICB0YWIuYWRkQ2xhc3MoJ2ZhZGUnKTsKCiAgICAgIC8vIG1vdmUgaXQgaW50byB0aGUgdGFiIGNvbnRlbnQgZGl2CiAgICAgIHRhYi5kZXRhY2goKS5hcHBlbmRUbyh0YWJDb250ZW50KTsKICAgIH0pOwoKICAgIC8vIHNldCBhY3RpdmUgdGFiCiAgICAkKHRhYkxpc3QuY2hpbGRyZW4oJ2xpJylbYWN0aXZlVGFiXSkuYWRkQ2xhc3MoJ2FjdGl2ZScpOwogICAgdmFyIGFjdGl2ZSA9ICQodGFiQ29udGVudC5jaGlsZHJlbignZGl2LnNlY3Rpb24nKVthY3RpdmVUYWJdKTsKICAgIGFjdGl2ZS5hZGRDbGFzcygnYWN0aXZlJyk7CiAgICBpZiAoZmFkZSkKICAgICAgYWN0aXZlLmFkZENsYXNzKCdpbicpOwoKICAgIGlmICh0YWJzZXQuaGFzQ2xhc3MoInRhYnNldC1zdGlja3kiKSkKICAgICAgdGFic2V0LnJtYXJrZG93blN0aWNreVRhYnMoKTsKICB9CgogIC8vIGNvbnZlcnQgc2VjdGlvbiBkaXZzIHdpdGggdGhlIC50YWJzZXQgY2xhc3MgdG8gdGFic2V0cwogIHZhciB0YWJzZXRzID0gJCgiZGl2LnNlY3Rpb24udGFic2V0Iik7CiAgdGFic2V0cy5lYWNoKGZ1bmN0aW9uKGkpIHsKICAgIGJ1aWxkVGFic2V0KCQodGFic2V0c1tpXSkpOwogIH0pOwp9OwoK"></script>
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
23 <link href="data:text/css;charset=utf-8,%2Ehljs%2Dliteral%20%7B%0Acolor%3A%20%23990073%3B%0A%7D%0A%2Ehljs%2Dnumber%20%7B%0Acolor%3A%20%23099%3B%0A%7D%0A%2Ehljs%2Dcomment%20%7B%0Acolor%3A%20%23998%3B%0Afont%2Dstyle%3A%20italic%3B%0A%7D%0A%2Ehljs%2Dkeyword%20%7B%0Acolor%3A%20%23900%3B%0Afont%2Dweight%3A%20bold%3B%0A%7D%0A%2Ehljs%2Dstring%20%7B%0Acolor%3A%20%23d14%3B%0A%7D%0A" rel="stylesheet" />
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
24 <script src="data:application/x-javascript;base64,LyohIGhpZ2hsaWdodC5qcyB2OS4xMi4wIHwgQlNEMyBMaWNlbnNlIHwgZ2l0LmlvL2hsanNsaWNlbnNlICovCiFmdW5jdGlvbihlKXt2YXIgbj0ib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmd2luZG93fHwib2JqZWN0Ij09dHlwZW9mIHNlbGYmJnNlbGY7InVuZGVmaW5lZCIhPXR5cGVvZiBleHBvcnRzP2UoZXhwb3J0cyk6biYmKG4uaGxqcz1lKHt9KSwiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kJiZkZWZpbmUoW10sZnVuY3Rpb24oKXtyZXR1cm4gbi5obGpzfSkpfShmdW5jdGlvbihlKXtmdW5jdGlvbiBuKGUpe3JldHVybiBlLnJlcGxhY2UoLyYvZywiJmFtcDsiKS5yZXBsYWNlKC88L2csIiZsdDsiKS5yZXBsYWNlKC8+L2csIiZndDsiKX1mdW5jdGlvbiB0KGUpe3JldHVybiBlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gcihlLG4pe3ZhciB0PWUmJmUuZXhlYyhuKTtyZXR1cm4gdCYmMD09PXQuaW5kZXh9ZnVuY3Rpb24gYShlKXtyZXR1cm4gay50ZXN0KGUpfWZ1bmN0aW9uIGkoZSl7dmFyIG4sdCxyLGksbz1lLmNsYXNzTmFtZSsiICI7aWYobys9ZS5wYXJlbnROb2RlP2UucGFyZW50Tm9kZS5jbGFzc05hbWU6IiIsdD1CLmV4ZWMobykpcmV0dXJuIHcodFsxXSk/dFsxXToibm8taGlnaGxpZ2h0Ijtmb3Iobz1vLnNwbGl0KC9ccysvKSxuPTAscj1vLmxlbmd0aDtyPm47bisrKWlmKGk9b1tuXSxhKGkpfHx3KGkpKXJldHVybiBpfWZ1bmN0aW9uIG8oZSl7dmFyIG4sdD17fSxyPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTtmb3IobiBpbiBlKXRbbl09ZVtuXTtyZXR1cm4gci5mb3JFYWNoKGZ1bmN0aW9uKGUpe2ZvcihuIGluIGUpdFtuXT1lW25dfSksdH1mdW5jdGlvbiB1KGUpe3ZhciBuPVtdO3JldHVybiBmdW5jdGlvbiByKGUsYSl7Zm9yKHZhciBpPWUuZmlyc3RDaGlsZDtpO2k9aS5uZXh0U2libGluZykzPT09aS5ub2RlVHlwZT9hKz1pLm5vZGVWYWx1ZS5sZW5ndGg6MT09PWkubm9kZVR5cGUmJihuLnB1c2goe2V2ZW50OiJzdGFydCIsb2Zmc2V0OmEsbm9kZTppfSksYT1yKGksYSksdChpKS5tYXRjaCgvYnJ8aHJ8aW1nfGlucHV0Lyl8fG4ucHVzaCh7ZXZlbnQ6InN0b3AiLG9mZnNldDphLG5vZGU6aX0pKTtyZXR1cm4gYX0oZSwwKSxufWZ1bmN0aW9uIGMoZSxyLGEpe2Z1bmN0aW9uIGkoKXtyZXR1cm4gZS5sZW5ndGgmJnIubGVuZ3RoP2VbMF0ub2Zmc2V0IT09clswXS5vZmZzZXQ/ZVswXS5vZmZzZXQ8clswXS5vZmZzZXQ/ZTpyOiJzdGFydCI9PT1yWzBdLmV2ZW50P2U6cjplLmxlbmd0aD9lOnJ9ZnVuY3Rpb24gbyhlKXtmdW5jdGlvbiByKGUpe3JldHVybiIgIitlLm5vZGVOYW1lKyc9IicrbihlLnZhbHVlKS5yZXBsYWNlKCciJywiJnF1b3Q7IikrJyInfXMrPSI8Iit0KGUpK0UubWFwLmNhbGwoZS5hdHRyaWJ1dGVzLHIpLmpvaW4oIiIpKyI+In1mdW5jdGlvbiB1KGUpe3MrPSI8LyIrdChlKSsiPiJ9ZnVuY3Rpb24gYyhlKXsoInN0YXJ0Ij09PWUuZXZlbnQ/bzp1KShlLm5vZGUpfWZvcih2YXIgbD0wLHM9IiIsZj1bXTtlLmxlbmd0aHx8ci5sZW5ndGg7KXt2YXIgZz1pKCk7aWYocys9bihhLnN1YnN0cmluZyhsLGdbMF0ub2Zmc2V0KSksbD1nWzBdLm9mZnNldCxnPT09ZSl7Zi5yZXZlcnNlKCkuZm9yRWFjaCh1KTtkbyBjKGcuc3BsaWNlKDAsMSlbMF0pLGc9aSgpO3doaWxlKGc9PT1lJiZnLmxlbmd0aCYmZ1swXS5vZmZzZXQ9PT1sKTtmLnJldmVyc2UoKS5mb3JFYWNoKG8pfWVsc2Uic3RhcnQiPT09Z1swXS5ldmVudD9mLnB1c2goZ1swXS5ub2RlKTpmLnBvcCgpLGMoZy5zcGxpY2UoMCwxKVswXSl9cmV0dXJuIHMrbihhLnN1YnN0cihsKSl9ZnVuY3Rpb24gbChlKXtyZXR1cm4gZS52JiYhZS5jYWNoZWRfdmFyaWFudHMmJihlLmNhY2hlZF92YXJpYW50cz1lLnYubWFwKGZ1bmN0aW9uKG4pe3JldHVybiBvKGUse3Y6bnVsbH0sbil9KSksZS5jYWNoZWRfdmFyaWFudHN8fGUuZVcmJltvKGUpXXx8W2VdfWZ1bmN0aW9uIHMoZSl7ZnVuY3Rpb24gbihlKXtyZXR1cm4gZSYmZS5zb3VyY2V8fGV9ZnVuY3Rpb24gdCh0LHIpe3JldHVybiBuZXcgUmVnRXhwKG4odCksIm0iKyhlLmNJPyJpIjoiIikrKHI/ImciOiIiKSl9ZnVuY3Rpb24gcihhLGkpe2lmKCFhLmNvbXBpbGVkKXtpZihhLmNvbXBpbGVkPSEwLGEuaz1hLmt8fGEuYkssYS5rKXt2YXIgbz17fSx1PWZ1bmN0aW9uKG4sdCl7ZS5jSSYmKHQ9dC50b0xvd2VyQ2FzZSgpKSx0LnNwbGl0KCIgIikuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD1lLnNwbGl0KCJ8Iik7b1t0WzBdXT1bbix0WzFdP051bWJlcih0WzFdKToxXX0pfTsic3RyaW5nIj09dHlwZW9mIGEuaz91KCJrZXl3b3JkIixhLmspOngoYS5rKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3UoZSxhLmtbZV0pfSksYS5rPW99YS5sUj10KGEubHx8L1x3Ky8sITApLGkmJihhLmJLJiYoYS5iPSJcXGIoIithLmJLLnNwbGl0KCIgIikuam9pbigifCIpKyIpXFxiIiksYS5ifHwoYS5iPS9cQnxcYi8pLGEuYlI9dChhLmIpLGEuZXx8YS5lV3x8KGEuZT0vXEJ8XGIvKSxhLmUmJihhLmVSPXQoYS5lKSksYS50RT1uKGEuZSl8fCIiLGEuZVcmJmkudEUmJihhLnRFKz0oYS5lPyJ8IjoiIikraS50RSkpLGEuaSYmKGEuaVI9dChhLmkpKSxudWxsPT1hLnImJihhLnI9MSksYS5jfHwoYS5jPVtdKSxhLmM9QXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSxhLmMubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBsKCJzZWxmIj09PWU/YTplKX0pKSxhLmMuZm9yRWFjaChmdW5jdGlvbihlKXtyKGUsYSl9KSxhLnN0YXJ0cyYmcihhLnN0YXJ0cyxpKTt2YXIgYz1hLmMubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLmJLPyJcXC4/KCIrZS5iKyIpXFwuPyI6ZS5ifSkuY29uY2F0KFthLnRFLGEuaV0pLm1hcChuKS5maWx0ZXIoQm9vbGVhbik7YS50PWMubGVuZ3RoP3QoYy5qb2luKCJ8IiksITApOntleGVjOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9fX19cihlKX1mdW5jdGlvbiBmKGUsdCxhLGkpe2Z1bmN0aW9uIG8oZSxuKXt2YXIgdCxhO2Zvcih0PTAsYT1uLmMubGVuZ3RoO2E+dDt0KyspaWYocihuLmNbdF0uYlIsZSkpcmV0dXJuIG4uY1t0XX1mdW5jdGlvbiB1KGUsbil7aWYocihlLmVSLG4pKXtmb3IoO2UuZW5kc1BhcmVudCYmZS5wYXJlbnQ7KWU9ZS5wYXJlbnQ7cmV0dXJuIGV9cmV0dXJuIGUuZVc/dShlLnBhcmVudCxuKTp2b2lkIDB9ZnVuY3Rpb24gYyhlLG4pe3JldHVybiFhJiZyKG4uaVIsZSl9ZnVuY3Rpb24gbChlLG4pe3ZhciB0PU4uY0k/blswXS50b0xvd2VyQ2FzZSgpOm5bMF07cmV0dXJuIGUuay5oYXNPd25Qcm9wZXJ0eSh0KSYmZS5rW3RdfWZ1bmN0aW9uIHAoZSxuLHQscil7dmFyIGE9cj8iIjpJLmNsYXNzUHJlZml4LGk9JzxzcGFuIGNsYXNzPSInK2Esbz10PyIiOkM7cmV0dXJuIGkrPWUrJyI+JyxpK24rb31mdW5jdGlvbiBoKCl7dmFyIGUsdCxyLGE7aWYoIUUuaylyZXR1cm4gbihrKTtmb3IoYT0iIix0PTAsRS5sUi5sYXN0SW5kZXg9MCxyPUUubFIuZXhlYyhrKTtyOylhKz1uKGsuc3Vic3RyaW5nKHQsci5pbmRleCkpLGU9bChFLHIpLGU/KEIrPWVbMV0sYSs9cChlWzBdLG4oclswXSkpKTphKz1uKHJbMF0pLHQ9RS5sUi5sYXN0SW5kZXgscj1FLmxSLmV4ZWMoayk7cmV0dXJuIGErbihrLnN1YnN0cih0KSl9ZnVuY3Rpb24gZCgpe3ZhciBlPSJzdHJpbmciPT10eXBlb2YgRS5zTDtpZihlJiYheVtFLnNMXSlyZXR1cm4gbihrKTt2YXIgdD1lP2YoRS5zTCxrLCEwLHhbRS5zTF0pOmcoayxFLnNMLmxlbmd0aD9FLnNMOnZvaWQgMCk7cmV0dXJuIEUucj4wJiYoQis9dC5yKSxlJiYoeFtFLnNMXT10LnRvcCkscCh0Lmxhbmd1YWdlLHQudmFsdWUsITEsITApfWZ1bmN0aW9uIGIoKXtMKz1udWxsIT1FLnNMP2QoKTpoKCksaz0iIn1mdW5jdGlvbiB2KGUpe0wrPWUuY04/cChlLmNOLCIiLCEwKToiIixFPU9iamVjdC5jcmVhdGUoZSx7cGFyZW50Ont2YWx1ZTpFfX0pfWZ1bmN0aW9uIG0oZSxuKXtpZihrKz1lLG51bGw9PW4pcmV0dXJuIGIoKSwwO3ZhciB0PW8obixFKTtpZih0KXJldHVybiB0LnNraXA/ays9bjoodC5lQiYmKGsrPW4pLGIoKSx0LnJCfHx0LmVCfHwoaz1uKSksdih0LG4pLHQuckI/MDpuLmxlbmd0aDt2YXIgcj11KEUsbik7aWYocil7dmFyIGE9RTthLnNraXA/ays9bjooYS5yRXx8YS5lRXx8KGsrPW4pLGIoKSxhLmVFJiYoaz1uKSk7ZG8gRS5jTiYmKEwrPUMpLEUuc2tpcHx8KEIrPUUuciksRT1FLnBhcmVudDt3aGlsZShFIT09ci5wYXJlbnQpO3JldHVybiByLnN0YXJ0cyYmdihyLnN0YXJ0cywiIiksYS5yRT8wOm4ubGVuZ3RofWlmKGMobixFKSl0aHJvdyBuZXcgRXJyb3IoJ0lsbGVnYWwgbGV4ZW1lICInK24rJyIgZm9yIG1vZGUgIicrKEUuY058fCI8dW5uYW1lZD4iKSsnIicpO3JldHVybiBrKz1uLG4ubGVuZ3RofHwxfXZhciBOPXcoZSk7aWYoIU4pdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIGxhbmd1YWdlOiAiJytlKyciJyk7cyhOKTt2YXIgUixFPWl8fE4seD17fSxMPSIiO2ZvcihSPUU7UiE9PU47Uj1SLnBhcmVudClSLmNOJiYoTD1wKFIuY04sIiIsITApK0wpO3ZhciBrPSIiLEI9MDt0cnl7Zm9yKHZhciBNLGosTz0wOzspe2lmKEUudC5sYXN0SW5kZXg9TyxNPUUudC5leGVjKHQpLCFNKWJyZWFrO2o9bSh0LnN1YnN0cmluZyhPLE0uaW5kZXgpLE1bMF0pLE89TS5pbmRleCtqfWZvcihtKHQuc3Vic3RyKE8pKSxSPUU7Ui5wYXJlbnQ7Uj1SLnBhcmVudClSLmNOJiYoTCs9Qyk7cmV0dXJue3I6Qix2YWx1ZTpMLGxhbmd1YWdlOmUsdG9wOkV9fWNhdGNoKFQpe2lmKFQubWVzc2FnZSYmLTEhPT1ULm1lc3NhZ2UuaW5kZXhPZigiSWxsZWdhbCIpKXJldHVybntyOjAsdmFsdWU6bih0KX07dGhyb3cgVH19ZnVuY3Rpb24gZyhlLHQpe3Q9dHx8SS5sYW5ndWFnZXN8fHgoeSk7dmFyIHI9e3I6MCx2YWx1ZTpuKGUpfSxhPXI7cmV0dXJuIHQuZmlsdGVyKHcpLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHQ9ZihuLGUsITEpO3QubGFuZ3VhZ2U9bix0LnI+YS5yJiYoYT10KSx0LnI+ci5yJiYoYT1yLHI9dCl9KSxhLmxhbmd1YWdlJiYoci5zZWNvbmRfYmVzdD1hKSxyfWZ1bmN0aW9uIHAoZSl7cmV0dXJuIEkudGFiUmVwbGFjZXx8SS51c2VCUj9lLnJlcGxhY2UoTSxmdW5jdGlvbihlLG4pe3JldHVybiBJLnVzZUJSJiYiXG4iPT09ZT8iPGJyPiI6SS50YWJSZXBsYWNlP24ucmVwbGFjZSgvXHQvZyxJLnRhYlJlcGxhY2UpOiIifSk6ZX1mdW5jdGlvbiBoKGUsbix0KXt2YXIgcj1uP0xbbl06dCxhPVtlLnRyaW0oKV07cmV0dXJuIGUubWF0Y2goL1xiaGxqc1xiLyl8fGEucHVzaCgiaGxqcyIpLC0xPT09ZS5pbmRleE9mKHIpJiZhLnB1c2gociksYS5qb2luKCIgIikudHJpbSgpfWZ1bmN0aW9uIGQoZSl7dmFyIG4sdCxyLG8sbCxzPWkoZSk7YShzKXx8KEkudXNlQlI/KG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwiZGl2Iiksbi5pbm5lckhUTUw9ZS5pbm5lckhUTUwucmVwbGFjZSgvXG4vZywiIikucmVwbGFjZSgvPGJyWyBcL10qPi9nLCJcbiIpKTpuPWUsbD1uLnRleHRDb250ZW50LHI9cz9mKHMsbCwhMCk6ZyhsKSx0PXUobiksdC5sZW5ndGgmJihvPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsImRpdiIpLG8uaW5uZXJIVE1MPXIudmFsdWUsci52YWx1ZT1jKHQsdShvKSxsKSksci52YWx1ZT1wKHIudmFsdWUpLGUuaW5uZXJIVE1MPXIudmFsdWUsZS5jbGFzc05hbWU9aChlLmNsYXNzTmFtZSxzLHIubGFuZ3VhZ2UpLGUucmVzdWx0PXtsYW5ndWFnZTpyLmxhbmd1YWdlLHJlOnIucn0sci5zZWNvbmRfYmVzdCYmKGUuc2Vjb25kX2Jlc3Q9e2xhbmd1YWdlOnIuc2Vjb25kX2Jlc3QubGFuZ3VhZ2UscmU6ci5zZWNvbmRfYmVzdC5yfSkpfWZ1bmN0aW9uIGIoZSl7ST1vKEksZSl9ZnVuY3Rpb24gdigpe2lmKCF2LmNhbGxlZCl7di5jYWxsZWQ9ITA7dmFyIGU9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgicHJlIGNvZGUiKTtFLmZvckVhY2guY2FsbChlLGQpfX1mdW5jdGlvbiBtKCl7YWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsdiwhMSksYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsdiwhMSl9ZnVuY3Rpb24gTihuLHQpe3ZhciByPXlbbl09dChlKTtyLmFsaWFzZXMmJnIuYWxpYXNlcy5mb3JFYWNoKGZ1bmN0aW9uKGUpe0xbZV09bn0pfWZ1bmN0aW9uIFIoKXtyZXR1cm4geCh5KX1mdW5jdGlvbiB3KGUpe3JldHVybiBlPShlfHwiIikudG9Mb3dlckNhc2UoKSx5W2VdfHx5W0xbZV1dfXZhciBFPVtdLHg9T2JqZWN0LmtleXMseT17fSxMPXt9LGs9L14obm8tP2hpZ2hsaWdodHxwbGFpbnx0ZXh0KSQvaSxCPS9cYmxhbmcoPzp1YWdlKT8tKFtcdy1dKylcYi9pLE09LygoXig8W14+XSs+fFx0fCkrfCg/OlxuKSkpL2dtLEM9Ijwvc3Bhbj4iLEk9e2NsYXNzUHJlZml4OiJobGpzLSIsdGFiUmVwbGFjZTpudWxsLHVzZUJSOiExLGxhbmd1YWdlczp2b2lkIDB9O3JldHVybiBlLmhpZ2hsaWdodD1mLGUuaGlnaGxpZ2h0QXV0bz1nLGUuZml4TWFya3VwPXAsZS5oaWdobGlnaHRCbG9jaz1kLGUuY29uZmlndXJlPWIsZS5pbml0SGlnaGxpZ2h0aW5nPXYsZS5pbml0SGlnaGxpZ2h0aW5nT25Mb2FkPW0sZS5yZWdpc3Rlckxhbmd1YWdlPU4sZS5saXN0TGFuZ3VhZ2VzPVIsZS5nZXRMYW5ndWFnZT13LGUuaW5oZXJpdD1vLGUuSVI9IlthLXpBLVpdXFx3KiIsZS5VSVI9IlthLXpBLVpfXVxcdyoiLGUuTlI9IlxcYlxcZCsoXFwuXFxkKyk/IixlLkNOUj0iKC0/KShcXGIwW3hYXVthLWZBLUYwLTldK3woXFxiXFxkKyhcXC5cXGQqKT98XFwuXFxkKykoW2VFXVstK10/XFxkKyk/KSIsZS5CTlI9IlxcYigwYlswMV0rKSIsZS5SU1I9IiF8IT18IT09fCV8JT18JnwmJnwmPXxcXCp8XFwqPXxcXCt8XFwrPXwsfC18LT18Lz18L3w6fDt8PDx8PDw9fDw9fDx8PT09fD09fD18Pj4+PXw+Pj18Pj18Pj4+fD4+fD58XFw/fFxcW3xcXHt8XFwofFxcXnxcXF49fFxcfHxcXHw9fFxcfFxcfHx+IixlLkJFPXtiOiJcXFxcW1xcc1xcU10iLHI6MH0sZS5BU009e2NOOiJzdHJpbmciLGI6IiciLGU6IiciLGk6IlxcbiIsYzpbZS5CRV19LGUuUVNNPXtjTjoic3RyaW5nIixiOiciJyxlOiciJyxpOiJcXG4iLGM6W2UuQkVdfSxlLlBXTT17YjovXGIoYXxhbnx0aGV8YXJlfEknbXxpc24ndHxkb24ndHxkb2Vzbid0fHdvbid0fGJ1dHxqdXN0fHNob3VsZHxwcmV0dHl8c2ltcGx5fGVub3VnaHxnb25uYXxnb2luZ3x3dGZ8c298c3VjaHx3aWxsfHlvdXx5b3VyfHRoZXl8bGlrZXxtb3JlKVxiL30sZS5DPWZ1bmN0aW9uKG4sdCxyKXt2YXIgYT1lLmluaGVyaXQoe2NOOiJjb21tZW50IixiOm4sZTp0LGM6W119LHJ8fHt9KTtyZXR1cm4gYS5jLnB1c2goZS5QV00pLGEuYy5wdXNoKHtjTjoiZG9jdGFnIixiOiIoPzpUT0RPfEZJWE1FfE5PVEV8QlVHfFhYWCk6IixyOjB9KSxhfSxlLkNMQ009ZS5DKCIvLyIsIiQiKSxlLkNCQ009ZS5DKCIvXFwqIiwiXFwqLyIpLGUuSENNPWUuQygiIyIsIiQiKSxlLk5NPXtjTjoibnVtYmVyIixiOmUuTlIscjowfSxlLkNOTT17Y046Im51bWJlciIsYjplLkNOUixyOjB9LGUuQk5NPXtjTjoibnVtYmVyIixiOmUuQk5SLHI6MH0sZS5DU1NOTT17Y046Im51bWJlciIsYjplLk5SKyIoJXxlbXxleHxjaHxyZW18dnd8dmh8dm1pbnx2bWF4fGNtfG1tfGlufHB0fHBjfHB4fGRlZ3xncmFkfHJhZHx0dXJufHN8bXN8SHp8a0h6fGRwaXxkcGNtfGRwcHgpPyIscjowfSxlLlJNPXtjTjoicmVnZXhwIixiOi9cLy8sZTovXC9bZ2ltdXldKi8saTovXG4vLGM6W2UuQkUse2I6L1xbLyxlOi9cXS8scjowLGM6W2UuQkVdfV19LGUuVE09e2NOOiJ0aXRsZSIsYjplLklSLHI6MH0sZS5VVE09e2NOOiJ0aXRsZSIsYjplLlVJUixyOjB9LGUuTUVUSE9EX0dVQVJEPXtiOiJcXC5cXHMqIitlLlVJUixyOjB9LGV9KTtobGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoInNxbCIsZnVuY3Rpb24oZSl7dmFyIHQ9ZS5DKCItLSIsIiQiKTtyZXR1cm57Y0k6ITAsaTovWzw+e30qI10vLGM6W3tiSzoiYmVnaW4gZW5kIHN0YXJ0IGNvbW1pdCByb2xsYmFjayBzYXZlcG9pbnQgbG9jayBhbHRlciBjcmVhdGUgZHJvcCByZW5hbWUgY2FsbCBkZWxldGUgZG8gaGFuZGxlciBpbnNlcnQgbG9hZCByZXBsYWNlIHNlbGVjdCB0cnVuY2F0ZSB1cGRhdGUgc2V0IHNob3cgcHJhZ21hIGdyYW50IG1lcmdlIGRlc2NyaWJlIHVzZSBleHBsYWluIGhlbHAgZGVjbGFyZSBwcmVwYXJlIGV4ZWN1dGUgZGVhbGxvY2F0ZSByZWxlYXNlIHVubG9jayBwdXJnZSByZXNldCBjaGFuZ2Ugc3RvcCBhbmFseXplIGNhY2hlIGZsdXNoIG9wdGltaXplIHJlcGFpciBraWxsIGluc3RhbGwgdW5pbnN0YWxsIGNoZWNrc3VtIHJlc3RvcmUgY2hlY2sgYmFja3VwIHJldm9rZSBjb21tZW50IixlOi87LyxlVzohMCxsOi9bXHdcLl0rLyxrOntrZXl3b3JkOiJhYm9ydCBhYnMgYWJzb2x1dGUgYWNjIGFjY2UgYWNjZXAgYWNjZXB0IGFjY2VzcyBhY2Nlc3NlZCBhY2Nlc3NpYmxlIGFjY291bnQgYWNvcyBhY3Rpb24gYWN0aXZhdGUgYWRkIGFkZHRpbWUgYWRtaW4gYWRtaW5pc3RlciBhZHZhbmNlZCBhZHZpc2UgYWVzX2RlY3J5cHQgYWVzX2VuY3J5cHQgYWZ0ZXIgYWdlbnQgYWdncmVnYXRlIGFsaSBhbGlhIGFsaWFzIGFsbG9jYXRlIGFsbG93IGFsdGVyIGFsd2F5cyBhbmFseXplIGFuY2lsbGFyeSBhbmQgYW55IGFueWRhdGEgYW55ZGF0YXNldCBhbnlzY2hlbWEgYW55dHlwZSBhcHBseSBhcmNoaXZlIGFyY2hpdmVkIGFyY2hpdmVsb2cgYXJlIGFzIGFzYyBhc2NpaSBhc2luIGFzc2VtYmx5IGFzc2VydGlvbiBhc3NvY2lhdGUgYXN5bmNocm9ub3VzIGF0IGF0YW4gYXRuMiBhdHRyIGF0dHJpIGF0dHJpYiBhdHRyaWJ1IGF0dHJpYnV0IGF0dHJpYnV0ZSBhdHRyaWJ1dGVzIGF1ZGl0IGF1dGhlbnRpY2F0ZWQgYXV0aGVudGljYXRpb24gYXV0aGlkIGF1dGhvcnMgYXV0byBhdXRvYWxsb2NhdGUgYXV0b2RibGluayBhdXRvZXh0ZW5kIGF1dG9tYXRpYyBhdmFpbGFiaWxpdHkgYXZnIGJhY2t1cCBiYWRmaWxlIGJhc2ljZmlsZSBiZWZvcmUgYmVnaW4gYmVnaW5uaW5nIGJlbmNobWFyayBiZXR3ZWVuIGJmaWxlIGJmaWxlX2Jhc2UgYmlnIGJpZ2ZpbGUgYmluIGJpbmFyeV9kb3VibGUgYmluYXJ5X2Zsb2F0IGJpbmxvZyBiaXRfYW5kIGJpdF9jb3VudCBiaXRfbGVuZ3RoIGJpdF9vciBiaXRfeG9yIGJpdG1hcCBibG9iX2Jhc2UgYmxvY2sgYmxvY2tzaXplIGJvZHkgYm90aCBib3VuZCBidWZmZXJfY2FjaGUgYnVmZmVyX3Bvb2wgYnVpbGQgYnVsayBieSBieXRlIGJ5dGVvcmRlcm1hcmsgYnl0ZXMgY2FjaGUgY2FjaGluZyBjYWxsIGNhbGxpbmcgY2FuY2VsIGNhcGFjaXR5IGNhc2NhZGUgY2FzY2FkZWQgY2FzZSBjYXN0IGNhdGFsb2cgY2F0ZWdvcnkgY2VpbCBjZWlsaW5nIGNoYWluIGNoYW5nZSBjaGFuZ2VkIGNoYXJfYmFzZSBjaGFyX2xlbmd0aCBjaGFyYWN0ZXJfbGVuZ3RoIGNoYXJhY3RlcnMgY2hhcmFjdGVyc2V0IGNoYXJpbmRleCBjaGFyc2V0IGNoYXJzZXRmb3JtIGNoYXJzZXRpZCBjaGVjayBjaGVja3N1bSBjaGVja3N1bV9hZ2cgY2hpbGQgY2hvb3NlIGNociBjaHVuayBjbGFzcyBjbGVhbnVwIGNsZWFyIGNsaWVudCBjbG9iIGNsb2JfYmFzZSBjbG9uZSBjbG9zZSBjbHVzdGVyX2lkIGNsdXN0ZXJfcHJvYmFiaWxpdHkgY2x1c3Rlcl9zZXQgY2x1c3RlcmluZyBjb2FsZXNjZSBjb2VyY2liaWxpdHkgY29sIGNvbGxhdGUgY29sbGF0aW9uIGNvbGxlY3QgY29sdSBjb2x1bSBjb2x1bW4gY29sdW1uX3ZhbHVlIGNvbHVtbnMgY29sdW1uc191cGRhdGVkIGNvbW1lbnQgY29tbWl0IGNvbXBhY3QgY29tcGF0aWJpbGl0eSBjb21waWxlZCBjb21wbGV0ZSBjb21wb3NpdGVfbGltaXQgY29tcG91bmQgY29tcHJlc3MgY29tcHV0ZSBjb25jYXQgY29uY2F0X3dzIGNvbmN1cnJlbnQgY29uZmlybSBjb25uIGNvbm5lYyBjb25uZWN0IGNvbm5lY3RfYnlfaXNjeWNsZSBjb25uZWN0X2J5X2lzbGVhZiBjb25uZWN0X2J5X3Jvb3QgY29ubmVjdF90aW1lIGNvbm5lY3Rpb24gY29uc2lkZXIgY29uc2lzdGVudCBjb25zdGFudCBjb25zdHJhaW50IGNvbnN0cmFpbnRzIGNvbnN0cnVjdG9yIGNvbnRhaW5lciBjb250ZW50IGNvbnRlbnRzIGNvbnRleHQgY29udHJpYnV0b3JzIGNvbnRyb2xmaWxlIGNvbnYgY29udmVydCBjb252ZXJ0X3R6IGNvcnIgY29ycl9rIGNvcnJfcyBjb3JyZXNwb25kaW5nIGNvcnJ1cHRpb24gY29zIGNvc3QgY291bnQgY291bnRfYmlnIGNvdW50ZWQgY292YXJfcG9wIGNvdmFyX3NhbXAgY3B1X3Blcl9jYWxsIGNwdV9wZXJfc2Vzc2lvbiBjcmMzMiBjcmVhdGUgY3JlYXRpb24gY3JpdGljYWwgY3Jvc3MgY3ViZSBjdW1lX2Rpc3QgY3VyZGF0ZSBjdXJyZW50IGN1cnJlbnRfZGF0ZSBjdXJyZW50X3RpbWUgY3VycmVudF90aW1lc3RhbXAgY3VycmVudF91c2VyIGN1cnNvciBjdXJ0aW1lIGN1c3RvbWRhdHVtIGN5Y2xlIGRhdGEgZGF0YWJhc2UgZGF0YWJhc2VzIGRhdGFmaWxlIGRhdGFmaWxlcyBkYXRhbGVuZ3RoIGRhdGVfYWRkIGRhdGVfY2FjaGUgZGF0ZV9mb3JtYXQgZGF0ZV9zdWIgZGF0ZWFkZCBkYXRlZGlmZiBkYXRlZnJvbXBhcnRzIGRhdGVuYW1lIGRhdGVwYXJ0IGRhdGV0aW1lMmZyb21wYXJ0cyBkYXkgZGF5X3RvX3NlY29uZCBkYXluYW1lIGRheW9mbW9udGggZGF5b2Z3ZWVrIGRheW9meWVhciBkYXlzIGRiX3JvbGVfY2hhbmdlIGRidGltZXpvbmUgZGRsIGRlYWxsb2NhdGUgZGVjbGFyZSBkZWNvZGUgZGVjb21wb3NlIGRlY3JlbWVudCBkZWNyeXB0IGRlZHVwbGljYXRlIGRlZiBkZWZhIGRlZmF1IGRlZmF1bCBkZWZhdWx0IGRlZmF1bHRzIGRlZmVycmVkIGRlZmkgZGVmaW4gZGVmaW5lIGRlZ3JlZXMgZGVsYXllZCBkZWxlZ2F0ZSBkZWxldGUgZGVsZXRlX2FsbCBkZWxpbWl0ZWQgZGVtYW5kIGRlbnNlX3JhbmsgZGVwdGggZGVxdWV1ZSBkZXNfZGVjcnlwdCBkZXNfZW5jcnlwdCBkZXNfa2V5X2ZpbGUgZGVzYyBkZXNjciBkZXNjcmkgZGVzY3JpYiBkZXNjcmliZSBkZXNjcmlwdG9yIGRldGVybWluaXN0aWMgZGlhZ25vc3RpY3MgZGlmZmVyZW5jZSBkaW1lbnNpb24gZGlyZWN0X2xvYWQgZGlyZWN0b3J5IGRpc2FibGUgZGlzYWJsZV9hbGwgZGlzYWxsb3cgZGlzYXNzb2NpYXRlIGRpc2NhcmRmaWxlIGRpc2Nvbm5lY3QgZGlza2dyb3VwIGRpc3RpbmN0IGRpc3RpbmN0cm93IGRpc3RyaWJ1dGUgZGlzdHJpYnV0ZWQgZGl2IGRvIGRvY3VtZW50IGRvbWFpbiBkb3RuZXQgZG91YmxlIGRvd25ncmFkZSBkcm9wIGR1bXBmaWxlIGR1cGxpY2F0ZSBkdXJhdGlvbiBlYWNoIGVkaXRpb24gZWRpdGlvbmFibGUgZWRpdGlvbnMgZWxlbWVudCBlbGxpcHNpcyBlbHNlIGVsc2lmIGVsdCBlbXB0eSBlbmFibGUgZW5hYmxlX2FsbCBlbmNsb3NlZCBlbmNvZGUgZW5jb2RpbmcgZW5jcnlwdCBlbmQgZW5kLWV4ZWMgZW5kaWFuIGVuZm9yY2VkIGVuZ2luZSBlbmdpbmVzIGVucXVldWUgZW50ZXJwcmlzZSBlbnRpdHllc2NhcGluZyBlb21vbnRoIGVycm9yIGVycm9ycyBlc2NhcGVkIGV2YWxuYW1lIGV2YWx1YXRlIGV2ZW50IGV2ZW50ZGF0YSBldmVudHMgZXhjZXB0IGV4Y2VwdGlvbiBleGNlcHRpb25zIGV4Y2hhbmdlIGV4Y2x1ZGUgZXhjbHVkaW5nIGV4ZWN1IGV4ZWN1dCBleGVjdXRlIGV4ZW1wdCBleGlzdHMgZXhpdCBleHAgZXhwaXJlIGV4cGxhaW4gZXhwb3J0IGV4cG9ydF9zZXQgZXh0ZW5kZWQgZXh0ZW50IGV4dGVybmFsIGV4dGVybmFsXzEgZXh0ZXJuYWxfMiBleHRlcm5hbGx5IGV4dHJhY3QgZmFpbGVkIGZhaWxlZF9sb2dpbl9hdHRlbXB0cyBmYWlsb3ZlciBmYWlsdXJlIGZhciBmYXN0IGZlYXR1cmVfc2V0IGZlYXR1cmVfdmFsdWUgZmV0Y2ggZmllbGQgZmllbGRzIGZpbGUgZmlsZV9uYW1lX2NvbnZlcnQgZmlsZXN5c3RlbV9saWtlX2xvZ2dpbmcgZmluYWwgZmluaXNoIGZpcnN0IGZpcnN0X3ZhbHVlIGZpeGVkIGZsYXNoX2NhY2hlIGZsYXNoYmFjayBmbG9vciBmbHVzaCBmb2xsb3dpbmcgZm9sbG93cyBmb3IgZm9yYWxsIGZvcmNlIGZvcm0gZm9ybWEgZm9ybWF0IGZvdW5kIGZvdW5kX3Jvd3MgZnJlZWxpc3QgZnJlZWxpc3RzIGZyZWVwb29scyBmcmVzaCBmcm9tIGZyb21fYmFzZTY0IGZyb21fZGF5cyBmdHAgZnVsbCBmdW5jdGlvbiBnZW5lcmFsIGdlbmVyYXRlZCBnZXQgZ2V0X2Zvcm1hdCBnZXRfbG9jayBnZXRkYXRlIGdldHV0Y2RhdGUgZ2xvYmFsIGdsb2JhbF9uYW1lIGdsb2JhbGx5IGdvIGdvdG8gZ3JhbnQgZ3JhbnRzIGdyZWF0ZXN0IGdyb3VwIGdyb3VwX2NvbmNhdCBncm91cF9pZCBncm91cGluZyBncm91cGluZ19pZCBncm91cHMgZ3RpZF9zdWJ0cmFjdCBndWFyYW50ZWUgZ3VhcmQgaGFuZGxlciBoYXNoIGhhc2hrZXlzIGhhdmluZyBoZWEgaGVhZCBoZWFkaSBoZWFkaW4gaGVhZGluZyBoZWFwIGhlbHAgaGV4IGhpZXJhcmNoeSBoaWdoIGhpZ2hfcHJpb3JpdHkgaG9zdHMgaG91ciBodHRwIGlkIGlkZW50X2N1cnJlbnQgaWRlbnRfaW5jciBpZGVudF9zZWVkIGlkZW50aWZpZWQgaWRlbnRpdHkgaWRsZV90aW1lIGlmIGlmbnVsbCBpZ25vcmUgaWlmIGlsaWtlIGlsbSBpbW1lZGlhdGUgaW1wb3J0IGluIGluY2x1ZGUgaW5jbHVkaW5nIGluY3JlbWVudCBpbmRleCBpbmRleGVzIGluZGV4aW5nIGluZGV4dHlwZSBpbmRpY2F0b3IgaW5kaWNlcyBpbmV0Nl9hdG9uIGluZXQ2X250b2EgaW5ldF9hdG9uIGluZXRfbnRvYSBpbmZpbGUgaW5pdGlhbCBpbml0aWFsaXplZCBpbml0aWFsbHkgaW5pdHJhbnMgaW5tZW1vcnkgaW5uZXIgaW5ub2RiIGlucHV0IGluc2VydCBpbnN0YWxsIGluc3RhbmNlIGluc3RhbnRpYWJsZSBpbnN0ciBpbnRlcmZhY2UgaW50ZXJsZWF2ZWQgaW50ZXJzZWN0IGludG8gaW52YWxpZGF0ZSBpbnZpc2libGUgaXMgaXNfZnJlZV9sb2NrIGlzX2lwdjQgaXNfaXB2NF9jb21wYXQgaXNfbm90IGlzX25vdF9udWxsIGlzX3VzZWRfbG9jayBpc2RhdGUgaXNudWxsIGlzb2xhdGlvbiBpdGVyYXRlIGphdmEgam9pbiBqc29uIGpzb25fZXhpc3RzIGtlZXAga2VlcF9kdXBsaWNhdGVzIGtleSBrZXlzIGtpbGwgbGFuZ3VhZ2UgbGFyZ2UgbGFzdCBsYXN0X2RheSBsYXN0X2luc2VydF9pZCBsYXN0X3ZhbHVlIGxheCBsY2FzZSBsZWFkIGxlYWRpbmcgbGVhc3QgbGVhdmVzIGxlZnQgbGVuIGxlbmdodCBsZW5ndGggbGVzcyBsZXZlbCBsZXZlbHMgbGlicmFyeSBsaWtlIGxpa2UyIGxpa2U0IGxpa2VjIGxpbWl0IGxpbmVzIGxpbmsgbGlzdCBsaXN0YWdnIGxpdHRsZSBsbiBsb2FkIGxvYWRfZmlsZSBsb2IgbG9icyBsb2NhbCBsb2NhbHRpbWUgbG9jYWx0aW1lc3RhbXAgbG9jYXRlIGxvY2F0b3IgbG9jayBsb2NrZWQgbG9nIGxvZzEwIGxvZzIgbG9nZmlsZSBsb2dmaWxlcyBsb2dnaW5nIGxvZ2ljYWwgbG9naWNhbF9yZWFkc19wZXJfY2FsbCBsb2dvZmYgbG9nb24gbG9ncyBsb25nIGxvb3AgbG93IGxvd19wcmlvcml0eSBsb3dlciBscGFkIGxydHJpbSBsdHJpbSBtYWluIG1ha2Vfc2V0IG1ha2VkYXRlIG1ha2V0aW1lIG1hbmFnZWQgbWFuYWdlbWVudCBtYW51YWwgbWFwIG1hcHBpbmcgbWFzayBtYXN0ZXIgbWFzdGVyX3Bvc193YWl0IG1hdGNoIG1hdGNoZWQgbWF0ZXJpYWxpemVkIG1heCBtYXhleHRlbnRzIG1heGltaXplIG1heGluc3RhbmNlcyBtYXhsZW4gbWF4bG9nZmlsZXMgbWF4bG9naGlzdG9yeSBtYXhsb2dtZW1iZXJzIG1heHNpemUgbWF4dHJhbnMgbWQ1IG1lYXN1cmVzIG1lZGlhbiBtZWRpdW0gbWVtYmVyIG1lbWNvbXByZXNzIG1lbW9yeSBtZXJnZSBtaWNyb3NlY29uZCBtaWQgbWlncmF0aW9uIG1pbiBtaW5leHRlbnRzIG1pbmltdW0gbWluaW5nIG1pbnVzIG1pbnV0ZSBtaW52YWx1ZSBtaXNzaW5nIG1vZCBtb2RlIG1vZGVsIG1vZGlmaWNhdGlvbiBtb2RpZnkgbW9kdWxlIG1vbml0b3JpbmcgbW9udGggbW9udGhzIG1vdW50IG1vdmUgbW92ZW1lbnQgbXVsdGlzZXQgbXV0ZXggbmFtZSBuYW1lX2NvbnN0IG5hbWVzIG5hbiBuYXRpb25hbCBuYXRpdmUgbmF0dXJhbCBuYXYgbmNoYXIgbmNsb2IgbmVzdGVkIG5ldmVyIG5ldyBuZXdsaW5lIG5leHQgbmV4dHZhbCBubyBub193cml0ZV90b19iaW5sb2cgbm9hcmNoaXZlbG9nIG5vYXVkaXQgbm9iYWRmaWxlIG5vY2hlY2sgbm9jb21wcmVzcyBub2NvcHkgbm9jeWNsZSBub2RlbGF5IG5vZGlzY2FyZGZpbGUgbm9lbnRpdHllc2NhcGluZyBub2d1YXJhbnRlZSBub2tlZXAgbm9sb2dmaWxlIG5vbWFwcGluZyBub21heHZhbHVlIG5vbWluaW1pemUgbm9taW52YWx1ZSBub21vbml0b3Jpbmcgbm9uZSBub25lZGl0aW9uYWJsZSBub25zY2hlbWEgbm9vcmRlciBub3ByIG5vcHJvIG5vcHJvbSBub3Byb21wIG5vcHJvbXB0IG5vcmVseSBub3Jlc2V0bG9ncyBub3JldmVyc2Ugbm9ybWFsIG5vcm93ZGVwZW5kZW5jaWVzIG5vc2NoZW1hY2hlY2sgbm9zd2l0Y2ggbm90IG5vdGhpbmcgbm90aWNlIG5vdHJpbSBub3ZhbGlkYXRlIG5vdyBub3dhaXQgbnRoX3ZhbHVlIG51bGxpZiBudWxscyBudW0gbnVtYiBudW1iZSBudmFyY2hhciBudmFyY2hhcjIgb2JqZWN0IG9jaWNvbGwgb2NpZGF0ZSBvY2lkYXRldGltZSBvY2lkdXJhdGlvbiBvY2lpbnRlcnZhbCBvY2lsb2Jsb2NhdG9yIG9jaW51bWJlciBvY2lyZWYgb2NpcmVmY3Vyc29yIG9jaXJvd2lkIG9jaXN0cmluZyBvY2l0eXBlIG9jdCBvY3RldF9sZW5ndGggb2Ygb2ZmIG9mZmxpbmUgb2Zmc2V0IG9pZCBvaWRpbmRleCBvbGQgb24gb25saW5lIG9ubHkgb3BhcXVlIG9wZW4gb3BlcmF0aW9ucyBvcGVyYXRvciBvcHRpbWFsIG9wdGltaXplIG9wdGlvbiBvcHRpb25hbGx5IG9yIG9yYWNsZSBvcmFjbGVfZGF0ZSBvcmFkYXRhIG9yZCBvcmRhdWRpbyBvcmRkaWNvbSBvcmRkb2Mgb3JkZXIgb3JkaW1hZ2Ugb3JkaW5hbGl0eSBvcmR2aWRlbyBvcmdhbml6YXRpb24gb3JsYW55IG9ybHZhcnkgb3V0IG91dGVyIG91dGZpbGUgb3V0bGluZSBvdXRwdXQgb3ZlciBvdmVyZmxvdyBvdmVycmlkaW5nIHBhY2thZ2UgcGFkIHBhcmFsbGVsIHBhcmFsbGVsX2VuYWJsZSBwYXJhbWV0ZXJzIHBhcmVudCBwYXJzZSBwYXJ0aWFsIHBhcnRpdGlvbiBwYXJ0aXRpb25zIHBhc2NhbCBwYXNzaW5nIHBhc3N3b3JkIHBhc3N3b3JkX2dyYWNlX3RpbWUgcGFzc3dvcmRfbG9ja190aW1lIHBhc3N3b3JkX3JldXNlX21heCBwYXNzd29yZF9yZXVzZV90aW1lIHBhc3N3b3JkX3ZlcmlmeV9mdW5jdGlvbiBwYXRjaCBwYXRoIHBhdGluZGV4IHBjdGluY3JlYXNlIHBjdHRocmVzaG9sZCBwY3R1c2VkIHBjdHZlcnNpb24gcGVyY2VudCBwZXJjZW50X3JhbmsgcGVyY2VudGlsZV9jb250IHBlcmNlbnRpbGVfZGlzYyBwZXJmb3JtYW5jZSBwZXJpb2QgcGVyaW9kX2FkZCBwZXJpb2RfZGlmZiBwZXJtYW5lbnQgcGh5c2ljYWwgcGkgcGlwZSBwaXBlbGluZWQgcGl2b3QgcGx1Z2dhYmxlIHBsdWdpbiBwb2xpY3kgcG9zaXRpb24gcG9zdF90cmFuc2FjdGlvbiBwb3cgcG93ZXIgcHJhZ21hIHByZWJ1aWx0IHByZWNlZGVzIHByZWNlZGluZyBwcmVjaXNpb24gcHJlZGljdGlvbiBwcmVkaWN0aW9uX2Nvc3QgcHJlZGljdGlvbl9kZXRhaWxzIHByZWRpY3Rpb25fcHJvYmFiaWxpdHkgcHJlZGljdGlvbl9zZXQgcHJlcGFyZSBwcmVzZW50IHByZXNlcnZlIHByaW9yIHByaW9yaXR5IHByaXZhdGUgcHJpdmF0ZV9zZ2EgcHJpdmlsZWdlcyBwcm9jZWR1cmFsIHByb2NlZHVyZSBwcm9jZWR1cmVfYW5hbHl6ZSBwcm9jZXNzbGlzdCBwcm9maWxlcyBwcm9qZWN0IHByb21wdCBwcm90ZWN0aW9uIHB1YmxpYyBwdWJsaXNoaW5nc2VydmVybmFtZSBwdXJnZSBxdWFydGVyIHF1ZXJ5IHF1aWNrIHF1aWVzY2UgcXVvdGEgcXVvdGVuYW1lIHJhZGlhbnMgcmFpc2UgcmFuZCByYW5nZSByYW5rIHJhdyByZWFkIHJlYWRzIHJlYWRzaXplIHJlYnVpbGQgcmVjb3JkIHJlY29yZHMgcmVjb3ZlciByZWNvdmVyeSByZWN1cnNpdmUgcmVjeWNsZSByZWRvIHJlZHVjZWQgcmVmIHJlZmVyZW5jZSByZWZlcmVuY2VkIHJlZmVyZW5jZXMgcmVmZXJlbmNpbmcgcmVmcmVzaCByZWdleHBfbGlrZSByZWdpc3RlciByZWdyX2F2Z3ggcmVncl9hdmd5IHJlZ3JfY291bnQgcmVncl9pbnRlcmNlcHQgcmVncl9yMiByZWdyX3Nsb3BlIHJlZ3Jfc3h4IHJlZ3Jfc3h5IHJlamVjdCByZWtleSByZWxhdGlvbmFsIHJlbGF0aXZlIHJlbGF5bG9nIHJlbGVhc2UgcmVsZWFzZV9sb2NrIHJlbGllc19vbiByZWxvY2F0ZSByZWx5IHJlbSByZW1haW5kZXIgcmVuYW1lIHJlcGFpciByZXBlYXQgcmVwbGFjZSByZXBsaWNhdGUgcmVwbGljYXRpb24gcmVxdWlyZWQgcmVzZXQgcmVzZXRsb2dzIHJlc2l6ZSByZXNvdXJjZSByZXNwZWN0IHJlc3RvcmUgcmVzdHJpY3RlZCByZXN1bHQgcmVzdWx0X2NhY2hlIHJlc3VtYWJsZSByZXN1bWUgcmV0ZW50aW9uIHJldHVybiByZXR1cm5pbmcgcmV0dXJucyByZXVzZSByZXZlcnNlIHJldm9rZSByaWdodCBybGlrZSByb2xlIHJvbGVzIHJvbGxiYWNrIHJvbGxpbmcgcm9sbHVwIHJvdW5kIHJvdyByb3dfY291bnQgcm93ZGVwZW5kZW5jaWVzIHJvd2lkIHJvd251bSByb3dzIHJ0cmltIHJ1bGVzIHNhZmUgc2FsdCBzYW1wbGUgc2F2ZSBzYXZlcG9pbnQgc2IxIHNiMiBzYjQgc2NhbiBzY2hlbWEgc2NoZW1hY2hlY2sgc2NuIHNjb3BlIHNjcm9sbCBzZG9fZ2VvcmFzdGVyIHNkb190b3BvX2dlb21ldHJ5IHNlYXJjaCBzZWNfdG9fdGltZSBzZWNvbmQgc2VjdGlvbiBzZWN1cmVmaWxlIHNlY3VyaXR5IHNlZWQgc2VnbWVudCBzZWxlY3Qgc2VsZiBzZXF1ZW5jZSBzZXF1ZW50aWFsIHNlcmlhbGl6YWJsZSBzZXJ2ZXIgc2VydmVyZXJyb3Igc2Vzc2lvbiBzZXNzaW9uX3VzZXIgc2Vzc2lvbnNfcGVyX3VzZXIgc2V0IHNldHMgc2V0dGluZ3Mgc2hhIHNoYTEgc2hhMiBzaGFyZSBzaGFyZWQgc2hhcmVkX3Bvb2wgc2hvcnQgc2hvdyBzaHJpbmsgc2h1dGRvd24gc2lfYXZlcmFnZWNvbG9yIHNpX2NvbG9yaGlzdG9ncmFtIHNpX2ZlYXR1cmVsaXN0IHNpX3Bvc2l0aW9uYWxjb2xvciBzaV9zdGlsbGltYWdlIHNpX3RleHR1cmUgc2libGluZ3Mgc2lkIHNpZ24gc2luIHNpemUgc2l6ZV90IHNpemVzIHNraXAgc2xhdmUgc2xlZXAgc21hbGxkYXRldGltZWZyb21wYXJ0cyBzbWFsbGZpbGUgc25hcHNob3Qgc29tZSBzb25hbWUgc29ydCBzb3VuZGV4IHNvdXJjZSBzcGFjZSBzcGFyc2Ugc3BmaWxlIHNwbGl0IHNxbCBzcWxfYmlnX3Jlc3VsdCBzcWxfYnVmZmVyX3Jlc3VsdCBzcWxfY2FjaGUgc3FsX2NhbGNfZm91bmRfcm93cyBzcWxfc21hbGxfcmVzdWx0IHNxbF92YXJpYW50X3Byb3BlcnR5IHNxbGNvZGUgc3FsZGF0YSBzcWxlcnJvciBzcWxuYW1lIHNxbHN0YXRlIHNxcnQgc3F1YXJlIHN0YW5kYWxvbmUgc3RhbmRieSBzdGFydCBzdGFydGluZyBzdGFydHVwIHN0YXRlbWVudCBzdGF0aWMgc3RhdGlzdGljcyBzdGF0c19iaW5vbWlhbF90ZXN0IHN0YXRzX2Nyb3NzdGFiIHN0YXRzX2tzX3Rlc3Qgc3RhdHNfbW9kZSBzdGF0c19td190ZXN0IHN0YXRzX29uZV93YXlfYW5vdmEgc3RhdHNfdF90ZXN0XyBzdGF0c190X3Rlc3RfaW5kZXAgc3RhdHNfdF90ZXN0X29uZSBzdGF0c190X3Rlc3RfcGFpcmVkIHN0YXRzX3dzcl90ZXN0IHN0YXR1cyBzdGQgc3RkZGV2IHN0ZGRldl9wb3Agc3RkZGV2X3NhbXAgc3RkZXYgc3RvcCBzdG9yYWdlIHN0b3JlIHN0b3JlZCBzdHIgc3RyX3RvX2RhdGUgc3RyYWlnaHRfam9pbiBzdHJjbXAgc3RyaWN0IHN0cmluZyBzdHJ1Y3Qgc3R1ZmYgc3R5bGUgc3ViZGF0ZSBzdWJwYXJ0aXRpb24gc3VicGFydGl0aW9ucyBzdWJzdGl0dXRhYmxlIHN1YnN0ciBzdWJzdHJpbmcgc3VidGltZSBzdWJ0cmluZ19pbmRleCBzdWJ0eXBlIHN1Y2Nlc3Mgc3VtIHN1c3BlbmQgc3dpdGNoIHN3aXRjaG9mZnNldCBzd2l0Y2hvdmVyIHN5bmMgc3luY2hyb25vdXMgc3lub255bSBzeXMgc3lzX3htbGFnZyBzeXNhc20gc3lzYXV4IHN5c2RhdGUgc3lzZGF0ZXRpbWVvZmZzZXQgc3lzZGJhIHN5c29wZXIgc3lzdGVtIHN5c3RlbV91c2VyIHN5c3V0Y2RhdGV0aW1lIHRhYmxlIHRhYmxlcyB0YWJsZXNwYWNlIHRhbiB0ZG8gdGVtcGxhdGUgdGVtcG9yYXJ5IHRlcm1pbmF0ZWQgdGVydGlhcnlfd2VpZ2h0cyB0ZXN0IHRoYW4gdGhlbiB0aHJlYWQgdGhyb3VnaCB0aWVyIHRpZXMgdGltZSB0aW1lX2Zvcm1hdCB0aW1lX3pvbmUgdGltZWRpZmYgdGltZWZyb21wYXJ0cyB0aW1lb3V0IHRpbWVzdGFtcCB0aW1lc3RhbXBhZGQgdGltZXN0YW1wZGlmZiB0aW1lem9uZV9hYmJyIHRpbWV6b25lX21pbnV0ZSB0aW1lem9uZV9yZWdpb24gdG8gdG9fYmFzZTY0IHRvX2RhdGUgdG9fZGF5cyB0b19zZWNvbmRzIHRvZGF0ZXRpbWVvZmZzZXQgdHJhY2UgdHJhY2tpbmcgdHJhbnNhY3Rpb24gdHJhbnNhY3Rpb25hbCB0cmFuc2xhdGUgdHJhbnNsYXRpb24gdHJlYXQgdHJpZ2dlciB0cmlnZ2VyX25lc3RsZXZlbCB0cmlnZ2VycyB0cmltIHRydW5jYXRlIHRyeV9jYXN0IHRyeV9jb252ZXJ0IHRyeV9wYXJzZSB0eXBlIHViMSB1YjIgdWI0IHVjYXNlIHVuYXJjaGl2ZWQgdW5ib3VuZGVkIHVuY29tcHJlc3MgdW5kZXIgdW5kbyB1bmhleCB1bmljb2RlIHVuaWZvcm0gdW5pbnN0YWxsIHVuaW9uIHVuaXF1ZSB1bml4X3RpbWVzdGFtcCB1bmtub3duIHVubGltaXRlZCB1bmxvY2sgdW5waXZvdCB1bnJlY292ZXJhYmxlIHVuc2FmZSB1bnNpZ25lZCB1bnRpbCB1bnRydXN0ZWQgdW51c2FibGUgdW51c2VkIHVwZGF0ZSB1cGRhdGVkIHVwZ3JhZGUgdXBwZWQgdXBwZXIgdXBzZXJ0IHVybCB1cm93aWQgdXNhYmxlIHVzYWdlIHVzZSB1c2Vfc3RvcmVkX291dGxpbmVzIHVzZXIgdXNlcl9kYXRhIHVzZXJfcmVzb3VyY2VzIHVzZXJzIHVzaW5nIHV0Y19kYXRlIHV0Y190aW1lc3RhbXAgdXVpZCB1dWlkX3Nob3J0IHZhbGlkYXRlIHZhbGlkYXRlX3Bhc3N3b3JkX3N0cmVuZ3RoIHZhbGlkYXRpb24gdmFsaXN0IHZhbHVlIHZhbHVlcyB2YXIgdmFyX3NhbXAgdmFyY2hhcmMgdmFyaSB2YXJpYSB2YXJpYWIgdmFyaWFibCB2YXJpYWJsZSB2YXJpYWJsZXMgdmFyaWFuY2UgdmFycCB2YXJyYXcgdmFycmF3YyB2YXJyYXkgdmVyaWZ5IHZlcnNpb24gdmVyc2lvbnMgdmlldyB2aXJ0dWFsIHZpc2libGUgdm9pZCB3YWl0IHdhbGxldCB3YXJuaW5nIHdhcm5pbmdzIHdlZWsgd2Vla2RheSB3ZWVrb2Z5ZWFyIHdlbGxmb3JtZWQgd2hlbiB3aGVuZSB3aGVuZXYgd2hlbmV2ZSB3aGVuZXZlciB3aGVyZSB3aGlsZSB3aGl0ZXNwYWNlIHdpdGggd2l0aGluIHdpdGhvdXQgd29yayB3cmFwcGVkIHhkYiB4bWwgeG1sYWdnIHhtbGF0dHJpYnV0ZXMgeG1sY2FzdCB4bWxjb2xhdHR2YWwgeG1sZWxlbWVudCB4bWxleGlzdHMgeG1sZm9yZXN0IHhtbGluZGV4IHhtbG5hbWVzcGFjZXMgeG1scGkgeG1scXVlcnkgeG1scm9vdCB4bWxzY2hlbWEgeG1sc2VyaWFsaXplIHhtbHRhYmxlIHhtbHR5cGUgeG9yIHllYXIgeWVhcl90b19tb250aCB5ZWFycyB5ZWFyd2VlayIsbGl0ZXJhbDoidHJ1ZSBmYWxzZSBudWxsIixidWlsdF9pbjoiYXJyYXkgYmlnaW50IGJpbmFyeSBiaXQgYmxvYiBib29sZWFuIGNoYXIgY2hhcmFjdGVyIGRhdGUgZGVjIGRlY2ltYWwgZmxvYXQgaW50IGludDggaW50ZWdlciBpbnRlcnZhbCBudW1iZXIgbnVtZXJpYyByZWFsIHJlY29yZCBzZXJpYWwgc2VyaWFsOCBzbWFsbGludCB0ZXh0IHZhcmNoYXIgdmFyeWluZyB2b2lkIn0sYzpbe2NOOiJzdHJpbmciLGI6IiciLGU6IiciLGM6W2UuQkUse2I6IicnIn1dfSx7Y046InN0cmluZyIsYjonIicsZTonIicsYzpbZS5CRSx7YjonIiInfV19LHtjTjoic3RyaW5nIixiOiJgIixlOiJgIixjOltlLkJFXX0sZS5DTk0sZS5DQkNNLHRdfSxlLkNCQ00sdF19fSk7aGxqcy5yZWdpc3Rlckxhbmd1YWdlKCJyIixmdW5jdGlvbihlKXt2YXIgcj0iKFthLXpBLVpdfFxcLlthLXpBLVouXSlbYS16QS1aMC05Ll9dKiI7cmV0dXJue2M6W2UuSENNLHtiOnIsbDpyLGs6e2tleXdvcmQ6ImZ1bmN0aW9uIGlmIGluIGJyZWFrIG5leHQgcmVwZWF0IGVsc2UgZm9yIHJldHVybiBzd2l0Y2ggd2hpbGUgdHJ5IHRyeUNhdGNoIHN0b3Agd2FybmluZyByZXF1aXJlIGxpYnJhcnkgYXR0YWNoIGRldGFjaCBzb3VyY2Ugc2V0TWV0aG9kIHNldEdlbmVyaWMgc2V0R3JvdXBHZW5lcmljIHNldENsYXNzIC4uLiIsbGl0ZXJhbDoiTlVMTCBOQSBUUlVFIEZBTFNFIFQgRiBJbmYgTmFOIE5BX2ludGVnZXJffDEwIE5BX3JlYWxffDEwIE5BX2NoYXJhY3Rlcl98MTAgTkFfY29tcGxleF98MTAifSxyOjB9LHtjTjoibnVtYmVyIixiOiIwW3hYXVswLTlhLWZBLUZdK1tMaV0/XFxiIixyOjB9LHtjTjoibnVtYmVyIixiOiJcXGQrKD86W2VFXVsrXFwtXT9cXGQqKT9MXFxiIixyOjB9LHtjTjoibnVtYmVyIixiOiJcXGQrXFwuKD8hXFxkKSg/OmlcXGIpPyIscjowfSx7Y046Im51bWJlciIsYjoiXFxkKyg/OlxcLlxcZCopPyg/OltlRV1bK1xcLV0/XFxkKik/aT9cXGIiLHI6MH0se2NOOiJudW1iZXIiLGI6IlxcLlxcZCsoPzpbZUVdWytcXC1dP1xcZCopP2k/XFxiIixyOjB9LHtiOiJgIixlOiJgIixyOjB9LHtjTjoic3RyaW5nIixjOltlLkJFXSx2Olt7YjonIicsZTonIid9LHtiOiInIixlOiInIn1dfV19fSk7aGxqcy5yZWdpc3Rlckxhbmd1YWdlKCJwZXJsIixmdW5jdGlvbihlKXt2YXIgdD0iZ2V0cHdlbnQgZ2V0c2VydmVudCBxdW90ZW1ldGEgbXNncmN2IHNjYWxhciBraWxsIGRibWNsb3NlIHVuZGVmIGxjIG1hIHN5c3dyaXRlIHRyIHNlbmQgdW1hc2sgc3lzb3BlbiBzaG13cml0ZSB2ZWMgcXggdXRpbWUgbG9jYWwgb2N0IHNlbWN0bCBsb2NhbHRpbWUgcmVhZHBpcGUgZG8gcmV0dXJuIGZvcm1hdCByZWFkIHNwcmludGYgZGJtb3BlbiBwb3AgZ2V0cGdycCBub3QgZ2V0cHduYW0gcmV3aW5kZGlyIHFxZmlsZW5vIHF3IGVuZHByb3RvZW50IHdhaXQgc2V0aG9zdGVudCBibGVzcyBzfDAgb3BlbmRpciBjb250aW51ZSBlYWNoIHNsZWVwIGVuZGdyZW50IHNodXRkb3duIGR1bXAgY2hvbXAgY29ubmVjdCBnZXRzb2NrbmFtZSBkaWUgc29ja2V0cGFpciBjbG9zZSBmbG9jayBleGlzdHMgaW5kZXggc2htZ2V0c3ViIGZvciBlbmRwd2VudCByZWRvIGxzdGF0IG1zZ2N0bCBzZXRwZ3JwIGFicyBleGl0IHNlbGVjdCBwcmludCByZWYgZ2V0aG9zdGJ5YWRkciB1bnNoaWZ0IGZjbnRsIHN5c2NhbGwgZ290byBnZXRuZXRieWFkZHIgam9pbiBnbXRpbWUgc3ltbGluayBzZW1nZXQgc3BsaWNlIHh8MCBnZXRwZWVybmFtZSByZWN2IGxvZyBzZXRzb2Nrb3B0IGNvcyBsYXN0IHJldmVyc2UgZ2V0aG9zdGJ5bmFtZSBnZXRncm5hbSBzdHVkeSBmb3JtbGluZSBlbmRob3N0ZW50IHRpbWVzIGNob3AgbGVuZ3RoIGdldGhvc3RlbnQgZ2V0bmV0ZW50IHBhY2sgZ2V0cHJvdG9lbnQgZ2V0c2VydmJ5bmFtZSByYW5kIG1rZGlyIHBvcyBjaG1vZCB5fDAgc3Vic3RyIGVuZG5ldGVudCBwcmludGYgbmV4dCBvcGVuIG1zZ3NuZCByZWFkZGlyIHVzZSB1bmxpbmsgZ2V0c29ja29wdCBnZXRwcmlvcml0eSByaW5kZXggd2FudGFycmF5IGhleCBzeXN0ZW0gZ2V0c2VydmJ5cG9ydCBlbmRzZXJ2ZW50IGludCBjaHIgdW50aWUgcm1kaXIgcHJvdG90eXBlIHRlbGwgbGlzdGVuIGZvcmsgc2htcmVhZCB1Y2ZpcnN0IHNldHByb3RvZW50IGVsc2Ugc3lzc2VlayBsaW5rIGdldGdyZ2lkIHNobWN0bCB3YWl0cGlkIHVucGFjayBnZXRuZXRieW5hbWUgcmVzZXQgY2hkaXIgZ3JlcCBzcGxpdCByZXF1aXJlIGNhbGxlciBsY2ZpcnN0IHVudGlsIHdhcm4gd2hpbGUgdmFsdWVzIHNoaWZ0IHRlbGxkaXIgZ2V0cHd1aWQgbXkgZ2V0cHJvdG9ieW51bWJlciBkZWxldGUgYW5kIHNvcnQgdWMgZGVmaW5lZCBzcmFuZCBhY2NlcHQgcGFja2FnZSBzZWVrZGlyIGdldHByb3RvYnluYW1lIHNlbW9wIG91ciByZW5hbWUgc2VlayBpZiBxfDAgY2hyb290IHN5c3JlYWQgc2V0cHdlbnQgbm8gY3J5cHQgZ2V0YyBjaG93biBzcXJ0IHdyaXRlIHNldG5ldGVudCBzZXRwcmlvcml0eSBmb3JlYWNoIHRpZSBzaW4gbXNnZ2V0IG1hcCBzdGF0IGdldGxvZ2luIHVubGVzcyBlbHNpZiB0cnVuY2F0ZSBleGVjIGtleXMgZ2xvYiB0aWVkIGNsb3NlZGlyaW9jdGwgc29ja2V0IHJlYWRsaW5rIGV2YWwgeG9yIHJlYWRsaW5lIGJpbm1vZGUgc2V0c2VydmVudCBlb2Ygb3JkIGJpbmQgYWxhcm0gcGlwZSBhdGFuMiBnZXRncmVudCBleHAgdGltZSBwdXNoIHNldGdyZW50IGd0IGx0IG9yIG5lIG18MCBicmVhayBnaXZlbiBzYXkgc3RhdGUgd2hlbiIscj17Y046InN1YnN0IixiOiJbJEBdXFx7IixlOiJcXH0iLGs6dH0scz17YjoiLT57IixlOiJ9In0sbj17djpbe2I6L1wkXGQvfSx7YjovW1wkJUBdKFxeXHdcYnwjXHcrKDo6XHcrKSp8e1x3K318XHcrKDo6XHcqKSopL30se2I6L1tcJCVAXVteXHNcd3tdLyxyOjB9XX0saT1bZS5CRSxyLG5dLG89W24sZS5IQ00sZS5DKCJeXFw9XFx3IiwiXFw9Y3V0Iix7ZVc6ITB9KSxzLHtjTjoic3RyaW5nIixjOmksdjpbe2I6InFbcXd4cl0/XFxzKlxcKCIsZToiXFwpIixyOjV9LHtiOiJxW3F3eHJdP1xccypcXFsiLGU6IlxcXSIscjo1fSx7YjoicVtxd3hyXT9cXHMqXFx7IixlOiJcXH0iLHI6NX0se2I6InFbcXd4cl0/XFxzKlxcfCIsZToiXFx8IixyOjV9LHtiOiJxW3F3eHJdP1xccypcXDwiLGU6IlxcPiIscjo1fSx7YjoicXdcXHMrcSIsZToicSIscjo1fSx7YjoiJyIsZToiJyIsYzpbZS5CRV19LHtiOiciJyxlOiciJ30se2I6ImAiLGU6ImAiLGM6W2UuQkVdfSx7Yjoie1xcdyt9IixjOltdLHI6MH0se2I6Ii0/XFx3K1xccypcXD1cXD4iLGM6W10scjowfV19LHtjTjoibnVtYmVyIixiOiIoXFxiMFswLTdfXSspfChcXGIweFswLTlhLWZBLUZfXSspfChcXGJbMS05XVswLTlfXSooXFwuWzAtOV9dKyk/KXxbMF9dXFxiIixyOjB9LHtiOiIoXFwvXFwvfCIrZS5SU1IrInxcXGIoc3BsaXR8cmV0dXJufHByaW50fHJldmVyc2V8Z3JlcClcXGIpXFxzKiIsazoic3BsaXQgcmV0dXJuIHByaW50IHJldmVyc2UgZ3JlcCIscjowLGM6W2UuSENNLHtjTjoicmVnZXhwIixiOiIoc3x0cnx5KS8oXFxcXC58W14vXSkqLyhcXFxcLnxbXi9dKSovW2Etel0qIixyOjEwfSx7Y046InJlZ2V4cCIsYjoiKG18cXIpPy8iLGU6Ii9bYS16XSoiLGM6W2UuQkVdLHI6MH1dfSx7Y046ImZ1bmN0aW9uIixiSzoic3ViIixlOiIoXFxzKlxcKC4qP1xcKSk/Wzt7XSIsZUU6ITAscjo1LGM6W2UuVE1dfSx7YjoiLVxcd1xcYiIscjowfSx7YjoiXl9fREFUQV9fJCIsZToiXl9fRU5EX18kIixzTDoibW9qb2xpY2lvdXMiLGM6W3tiOiJeQEAuKiIsZToiJCIsY046ImNvbW1lbnQifV19XTtyZXR1cm4gci5jPW8scy5jPW8se2FsaWFzZXM6WyJwbCIsInBtIl0sbDovW1x3XC5dKy8sazp0LGM6b319KTtobGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoImluaSIsZnVuY3Rpb24oZSl7dmFyIGI9e2NOOiJzdHJpbmciLGM6W2UuQkVdLHY6W3tiOiInJyciLGU6IicnJyIscjoxMH0se2I6JyIiIicsZTonIiIiJyxyOjEwfSx7YjonIicsZTonIid9LHtiOiInIixlOiInIn1dfTtyZXR1cm57YWxpYXNlczpbInRvbWwiXSxjSTohMCxpOi9cUy8sYzpbZS5DKCI7IiwiJCIpLGUuSENNLHtjTjoic2VjdGlvbiIsYjovXlxzKlxbKy8sZTovXF0rL30se2I6L15bYS16MC05XFtcXV8tXStccyo9XHMqLyxlOiIkIixyQjohMCxjOlt7Y046ImF0dHIiLGI6L1thLXowLTlcW1xdXy1dKy99LHtiOi89LyxlVzohMCxyOjAsYzpbe2NOOiJsaXRlcmFsIixiOi9cYm9ufG9mZnx0cnVlfGZhbHNlfHllc3xub1xiL30se2NOOiJ2YXJpYWJsZSIsdjpbe2I6L1wkW1x3XGQiXVtcd1xkX10qL30se2I6L1wkXHsoLio/KX0vfV19LGIse2NOOiJudW1iZXIiLGI6LyhbXCtcLV0rKT9bXGRdK19bXGRfXSsvfSxlLk5NXX1dfV19fSk7aGxqcy5yZWdpc3Rlckxhbmd1YWdlKCJkaWZmIixmdW5jdGlvbihlKXtyZXR1cm57YWxpYXNlczpbInBhdGNoIl0sYzpbe2NOOiJtZXRhIixyOjEwLHY6W3tiOi9eQEAgK1wtXGQrLFxkKyArXCtcZCssXGQrICtAQCQvfSx7YjovXlwqXCpcKiArXGQrLFxkKyArXCpcKlwqXCokL30se2I6L15cLVwtXC0gK1xkKyxcZCsgK1wtXC1cLVwtJC99XX0se2NOOiJjb21tZW50Iix2Olt7YjovSW5kZXg6IC8sZTovJC99LHtiOi89ezMsfS8sZTovJC99LHtiOi9eXC17M30vLGU6LyQvfSx7YjovXlwqezN9IC8sZTovJC99LHtiOi9eXCt7M30vLGU6LyQvfSx7YjovXCp7NX0vLGU6L1wqezV9JC99XX0se2NOOiJhZGRpdGlvbiIsYjoiXlxcKyIsZToiJCJ9LHtjTjoiZGVsZXRpb24iLGI6Il5cXC0iLGU6IiQifSx7Y046ImFkZGl0aW9uIixiOiJeXFwhIixlOiIkIn1dfX0pO2hsanMucmVnaXN0ZXJMYW5ndWFnZSgiZ28iLGZ1bmN0aW9uKGUpe3ZhciB0PXtrZXl3b3JkOiJicmVhayBkZWZhdWx0IGZ1bmMgaW50ZXJmYWNlIHNlbGVjdCBjYXNlIG1hcCBzdHJ1Y3QgY2hhbiBlbHNlIGdvdG8gcGFja2FnZSBzd2l0Y2ggY29uc3QgZmFsbHRocm91Z2ggaWYgcmFuZ2UgdHlwZSBjb250aW51ZSBmb3IgaW1wb3J0IHJldHVybiB2YXIgZ28gZGVmZXIgYm9vbCBieXRlIGNvbXBsZXg2NCBjb21wbGV4MTI4IGZsb2F0MzIgZmxvYXQ2NCBpbnQ4IGludDE2IGludDMyIGludDY0IHN0cmluZyB1aW50OCB1aW50MTYgdWludDMyIHVpbnQ2NCBpbnQgdWludCB1aW50cHRyIHJ1bmUiLGxpdGVyYWw6InRydWUgZmFsc2UgaW90YSBuaWwiLGJ1aWx0X2luOiJhcHBlbmQgY2FwIGNsb3NlIGNvbXBsZXggY29weSBpbWFnIGxlbiBtYWtlIG5ldyBwYW5pYyBwcmludCBwcmludGxuIHJlYWwgcmVjb3ZlciBkZWxldGUifTtyZXR1cm57YWxpYXNlczpbImdvbGFuZyJdLGs6dCxpOiI8LyIsYzpbZS5DTENNLGUuQ0JDTSx7Y046InN0cmluZyIsdjpbZS5RU00se2I6IiciLGU6IlteXFxcXF0nIn0se2I6ImAiLGU6ImAifV19LHtjTjoibnVtYmVyIix2Olt7YjplLkNOUisiW2RmbHNpXSIscjoxfSxlLkNOTV19LHtiOi86PS99LHtjTjoiZnVuY3Rpb24iLGJLOiJmdW5jIixlOi9ccypcey8sZUU6ITAsYzpbZS5UTSx7Y046InBhcmFtcyIsYjovXCgvLGU6L1wpLyxrOnQsaTovWyInXS99XX1dfX0pO2hsanMucmVnaXN0ZXJMYW5ndWFnZSgiYmFzaCIsZnVuY3Rpb24oZSl7dmFyIHQ9e2NOOiJ2YXJpYWJsZSIsdjpbe2I6L1wkW1x3XGQjQF1bXHdcZF9dKi99LHtiOi9cJFx7KC4qPyl9L31dfSxzPXtjTjoic3RyaW5nIixiOi8iLyxlOi8iLyxjOltlLkJFLHQse2NOOiJ2YXJpYWJsZSIsYjovXCRcKC8sZTovXCkvLGM6W2UuQkVdfV19LGE9e2NOOiJzdHJpbmciLGI6LycvLGU6LycvfTtyZXR1cm57YWxpYXNlczpbInNoIiwienNoIl0sbDovXGItP1thLXpcLl9dK1xiLyxrOntrZXl3b3JkOiJpZiB0aGVuIGVsc2UgZWxpZiBmaSBmb3Igd2hpbGUgaW4gZG8gZG9uZSBjYXNlIGVzYWMgZnVuY3Rpb24iLGxpdGVyYWw6InRydWUgZmFsc2UiLGJ1aWx0X2luOiJicmVhayBjZCBjb250aW51ZSBldmFsIGV4ZWMgZXhpdCBleHBvcnQgZ2V0b3B0cyBoYXNoIHB3ZCByZWFkb25seSByZXR1cm4gc2hpZnQgdGVzdCB0aW1lcyB0cmFwIHVtYXNrIHVuc2V0IGFsaWFzIGJpbmQgYnVpbHRpbiBjYWxsZXIgY29tbWFuZCBkZWNsYXJlIGVjaG8gZW5hYmxlIGhlbHAgbGV0IGxvY2FsIGxvZ291dCBtYXBmaWxlIHByaW50ZiByZWFkIHJlYWRhcnJheSBzb3VyY2UgdHlwZSB0eXBlc2V0IHVsaW1pdCB1bmFsaWFzIHNldCBzaG9wdCBhdXRvbG9hZCBiZyBiaW5ka2V5IGJ5ZSBjYXAgY2hkaXIgY2xvbmUgY29tcGFyZ3VtZW50cyBjb21wY2FsbCBjb21wY3RsIGNvbXBkZXNjcmliZSBjb21wZmlsZXMgY29tcGdyb3VwcyBjb21wcXVvdGUgY29tcHRhZ3MgY29tcHRyeSBjb21wdmFsdWVzIGRpcnMgZGlzYWJsZSBkaXNvd24gZWNob3RjIGVjaG90aSBlbXVsYXRlIGZjIGZnIGZsb2F0IGZ1bmN0aW9ucyBnZXRjYXAgZ2V0bG4gaGlzdG9yeSBpbnRlZ2VyIGpvYnMga2lsbCBsaW1pdCBsb2cgbm9nbG9iIHBvcGQgcHJpbnQgcHVzaGQgcHVzaGxuIHJlaGFzaCBzY2hlZCBzZXRjYXAgc2V0b3B0IHN0YXQgc3VzcGVuZCB0dHljdGwgdW5mdW5jdGlvbiB1bmhhc2ggdW5saW1pdCB1bnNldG9wdCB2YXJlZCB3YWl0IHdoZW5jZSB3aGVyZSB3aGljaCB6Y29tcGlsZSB6Zm9ybWF0IHpmdHAgemxlIHptb2Rsb2FkIHpwYXJzZW9wdHMgenByb2YgenB0eSB6cmVnZXhwYXJzZSB6c29ja2V0IHpzdHlsZSB6dGNwIixfOiItbmUgLWVxIC1sdCAtZ3QgLWYgLWQgLWUgLXMgLWwgLWEifSxjOlt7Y046Im1ldGEiLGI6L14jIVteXG5dK3NoXHMqJC8scjoxMH0se2NOOiJmdW5jdGlvbiIsYjovXHdbXHdcZF9dKlxzKlwoXHMqXClccypcey8sckI6ITAsYzpbZS5pbmhlcml0KGUuVE0se2I6L1x3W1x3XGRfXSovfSldLHI6MH0sZS5IQ00scyxhLHRdfX0pO2hsanMucmVnaXN0ZXJMYW5ndWFnZSgicHl0aG9uIixmdW5jdGlvbihlKXt2YXIgcj17a2V5d29yZDoiYW5kIGVsaWYgaXMgZ2xvYmFsIGFzIGluIGlmIGZyb20gcmFpc2UgZm9yIGV4Y2VwdCBmaW5hbGx5IHByaW50IGltcG9ydCBwYXNzIHJldHVybiBleGVjIGVsc2UgYnJlYWsgbm90IHdpdGggY2xhc3MgYXNzZXJ0IHlpZWxkIHRyeSB3aGlsZSBjb250aW51ZSBkZWwgb3IgZGVmIGxhbWJkYSBhc3luYyBhd2FpdCBub25sb2NhbHwxMCBOb25lIFRydWUgRmFsc2UiLGJ1aWx0X2luOiJFbGxpcHNpcyBOb3RJbXBsZW1lbnRlZCJ9LGI9e2NOOiJtZXRhIixiOi9eKD4+PnxcLlwuXC4pIC99LGM9e2NOOiJzdWJzdCIsYjovXHsvLGU6L1x9LyxrOnIsaTovIy99LGE9e2NOOiJzdHJpbmciLGM6W2UuQkVdLHY6W3tiOi8odXxiKT9yPycnJy8sZTovJycnLyxjOltiXSxyOjEwfSx7YjovKHV8Yik/cj8iIiIvLGU6LyIiIi8sYzpbYl0scjoxMH0se2I6LyhmcnxyZnxmKScnJy8sZTovJycnLyxjOltiLGNdfSx7YjovKGZyfHJmfGYpIiIiLyxlOi8iIiIvLGM6W2IsY119LHtiOi8odXxyfHVyKScvLGU6LycvLHI6MTB9LHtiOi8odXxyfHVyKSIvLGU6LyIvLHI6MTB9LHtiOi8oYnxiciknLyxlOi8nL30se2I6LyhifGJyKSIvLGU6LyIvfSx7YjovKGZyfHJmfGYpJy8sZTovJy8sYzpbY119LHtiOi8oZnJ8cmZ8ZikiLyxlOi8iLyxjOltjXX0sZS5BU00sZS5RU01dfSxzPXtjTjoibnVtYmVyIixyOjAsdjpbe2I6ZS5CTlIrIltsTGpKXT8ifSx7YjoiXFxiKDBvWzAtN10rKVtsTGpKXT8ifSx7YjplLkNOUisiW2xMakpdPyJ9XX0saT17Y046InBhcmFtcyIsYjovXCgvLGU6L1wpLyxjOlsic2VsZiIsYixzLGFdfTtyZXR1cm4gYy5jPVthLHMsYl0se2FsaWFzZXM6WyJweSIsImd5cCJdLGs6cixpOi8oPFwvfC0+fFw/KXw9Pi8sYzpbYixzLGEsZS5IQ00se3Y6W3tjTjoiZnVuY3Rpb24iLGJLOiJkZWYifSx7Y046ImNsYXNzIixiSzoiY2xhc3MifV0sZTovOi8saTovWyR7PTtcbixdLyxjOltlLlVUTSxpLHtiOi8tPi8sZVc6ITAsazoiTm9uZSJ9XX0se2NOOiJtZXRhIixiOi9eW1x0IF0qQC8sZTovJC99LHtiOi9cYihwcmludHxleGVjKVwoL31dfX0pO2hsanMucmVnaXN0ZXJMYW5ndWFnZSgianVsaWEiLGZ1bmN0aW9uKGUpe3ZhciByPXtrZXl3b3JkOiJpbiBpc2Egd2hlcmUgYmFyZW1vZHVsZSBiZWdpbiBicmVhayBjYXRjaCBjY2FsbCBjb25zdCBjb250aW51ZSBkbyBlbHNlIGVsc2VpZiBlbmQgZXhwb3J0IGZhbHNlIGZpbmFsbHkgZm9yIGZ1bmN0aW9uIGdsb2JhbCBpZiBpbXBvcnQgaW1wb3J0YWxsIGxldCBsb2NhbCBtYWNybyBtb2R1bGUgcXVvdGUgcmV0dXJuIHRydWUgdHJ5IHVzaW5nIHdoaWxlIHR5cGUgaW1tdXRhYmxlIGFic3RyYWN0IGJpdHN0eXBlIHR5cGVhbGlhcyAiLGxpdGVyYWw6InRydWUgZmFsc2UgQVJHUyBDX05VTEwgRGV2TnVsbCBFTkRJQU5fQk9NIEVOViBJIEluZiBJbmYxNiBJbmYzMiBJbmY2NCBJbnNlcnRpb25Tb3J0IEpVTElBX0hPTUUgTE9BRF9QQVRIIE1lcmdlU29ydCBOYU4gTmFOMTYgTmFOMzIgTmFONjQgUFJPR1JBTV9GSUxFIFF1aWNrU29ydCBSb3VuZERvd24gUm91bmRGcm9tWmVybyBSb3VuZE5lYXJlc3QgUm91bmROZWFyZXN0VGllc0F3YXkgUm91bmROZWFyZXN0VGllc1VwIFJvdW5kVG9aZXJvIFJvdW5kVXAgU1RERVJSIFNURElOIFNURE9VVCBWRVJTSU9OIGNhdGFsYW4gZXwwIGV1fDAgZXVsZXJnYW1tYSBnb2xkZW4gaW0gbm90aGluZyBwaSDOsyDPgCDPhiAiLGJ1aWx0X2luOiJBTlkgQWJzdHJhY3RBcnJheSBBYnN0cmFjdENoYW5uZWwgQWJzdHJhY3RGbG9hdCBBYnN0cmFjdE1hdHJpeCBBYnN0cmFjdFJORyBBYnN0cmFjdFNlcmlhbGl6ZXIgQWJzdHJhY3RTZXQgQWJzdHJhY3RTcGFyc2VBcnJheSBBYnN0cmFjdFNwYXJzZU1hdHJpeCBBYnN0cmFjdFNwYXJzZVZlY3RvciBBYnN0cmFjdFN0cmluZyBBYnN0cmFjdFVuaXRSYW5nZSBBYnN0cmFjdFZlY09yTWF0IEFic3RyYWN0VmVjdG9yIEFueSBBcmd1bWVudEVycm9yIEFycmF5IEFzc2VydGlvbkVycm9yIEFzc29jaWF0aXZlIEJhc2U2NERlY29kZVBpcGUgQmFzZTY0RW5jb2RlUGlwZSBCaWRpYWdvbmFsIEJpZ0Zsb2F0IEJpZ0ludCBCaXRBcnJheSBCaXRNYXRyaXggQml0VmVjdG9yIEJvb2wgQm91bmRzRXJyb3IgQnVmZmVyU3RyZWFtIENhY2hpbmdQb29sIENhcHR1cmVkRXhjZXB0aW9uIENhcnRlc2lhbkluZGV4IENhcnRlc2lhblJhbmdlIENjaGFyIENkb3VibGUgQ2Zsb2F0IENoYW5uZWwgQ2hhciBDaW50IENpbnRtYXhfdCBDbG9uZyBDbG9uZ2xvbmcgQ2x1c3Rlck1hbmFnZXIgQ21kIENvZGVJbmZvIENvbG9uIENvbXBsZXggQ29tcGxleDEyOCBDb21wbGV4MzIgQ29tcGxleDY0IENvbXBvc2l0ZUV4Y2VwdGlvbiBDb25kaXRpb24gQ29uakFycmF5IENvbmpNYXRyaXggQ29ualZlY3RvciBDcHRyZGlmZl90IENzaG9ydCBDc2l6ZV90IENzc2l6ZV90IENzdHJpbmcgQ3VjaGFyIEN1aW50IEN1aW50bWF4X3QgQ3Vsb25nIEN1bG9uZ2xvbmcgQ3VzaG9ydCBDd2NoYXJfdCBDd3N0cmluZyBEYXRhVHlwZSBEYXRlIERhdGVGb3JtYXQgRGF0ZVRpbWUgRGVuc2VBcnJheSBEZW5zZU1hdHJpeCBEZW5zZVZlY09yTWF0IERlbnNlVmVjdG9yIERpYWdvbmFsIERpY3QgRGltZW5zaW9uTWlzbWF0Y2ggRGltcyBEaXJlY3RJbmRleFN0cmluZyBEaXNwbGF5IERpdmlkZUVycm9yIERvbWFpbkVycm9yIEVPRkVycm9yIEVhY2hMaW5lIEVudW0gRW51bWVyYXRlIEVycm9yRXhjZXB0aW9uIEV4Y2VwdGlvbiBFeHBvbmVudGlhbEJhY2tPZmYgRXhwciBGYWN0b3JpemF0aW9uIEZpbGVNb25pdG9yIEZsb2F0MTYgRmxvYXQzMiBGbG9hdDY0IEZ1bmN0aW9uIEZ1dHVyZSBHbG9iYWxSZWYgR290b05vZGUgSFRNTCBIZXJtaXRpYW4gSU8gSU9CdWZmZXIgSU9Db250ZXh0IElPU3RyZWFtIElQQWRkciBJUHY0IElQdjYgSW5kZXhDYXJ0ZXNpYW4gSW5kZXhMaW5lYXIgSW5kZXhTdHlsZSBJbmV4YWN0RXJyb3IgSW5pdEVycm9yIEludCBJbnQxMjggSW50MTYgSW50MzIgSW50NjQgSW50OCBJbnRTZXQgSW50ZWdlciBJbnRlcnJ1cHRFeGNlcHRpb24gSW52YWxpZFN0YXRlRXhjZXB0aW9uIElycmF0aW9uYWwgS2V5RXJyb3IgTGFiZWxOb2RlIExpblNwYWNlIExpbmVOdW1iZXJOb2RlIExvYWRFcnJvciBMb3dlclRyaWFuZ3VsYXIgTUlNRSBNYXRyaXggTWVyc2VubmVUd2lzdGVyIE1ldGhvZCBNZXRob2RFcnJvciBNZXRob2RUYWJsZSBNb2R1bGUgTlR1cGxlIE5ld3Zhck5vZGUgTnVsbEV4Y2VwdGlvbiBOdWxsYWJsZSBOdW1iZXIgT2JqZWN0SWREaWN0IE9yZGluYWxSYW5nZSBPdXRPZk1lbW9yeUVycm9yIE92ZXJmbG93RXJyb3IgUGFpciBQYXJzZUVycm9yIFBhcnRpYWxRdWlja1NvcnQgUGVybXV0ZWREaW1zQXJyYXkgUGlwZSBQb2xsaW5nRmlsZVdhdGNoZXIgUHJvY2Vzc0V4aXRlZEV4Y2VwdGlvbiBQdHIgUXVvdGVOb2RlIFJhbmRvbURldmljZSBSYW5nZSBSYW5nZUluZGV4IFJhdGlvbmFsIFJhd0ZEIFJlYWRPbmx5TWVtb3J5RXJyb3IgUmVhbCBSZWVudHJhbnRMb2NrIFJlZiBSZWdleCBSZWdleE1hdGNoIFJlbW90ZUNoYW5uZWwgUmVtb3RlRXhjZXB0aW9uIFJldlN0cmluZyBSb3VuZGluZ01vZGUgUm93VmVjdG9yIFNTQVZhbHVlIFNlZ21lbnRhdGlvbkZhdWx0IFNlcmlhbGl6YXRpb25TdGF0ZSBTZXQgU2hhcmVkQXJyYXkgU2hhcmVkTWF0cml4IFNoYXJlZFZlY3RvciBTaWduZWQgU2ltcGxlVmVjdG9yIFNsb3QgU2xvdE51bWJlciBTcGFyc2VNYXRyaXhDU0MgU3BhcnNlVmVjdG9yIFN0YWNrRnJhbWUgU3RhY2tPdmVyZmxvd0Vycm9yIFN0YWNrVHJhY2UgU3RlcFJhbmdlIFN0ZXBSYW5nZUxlbiBTdHJpZGVkQXJyYXkgU3RyaWRlZE1hdHJpeCBTdHJpZGVkVmVjT3JNYXQgU3RyaWRlZFZlY3RvciBTdHJpbmcgU3ViQXJyYXkgU3ViU3RyaW5nIFN5bVRyaWRpYWdvbmFsIFN5bWJvbCBTeW1tZXRyaWMgU3lzdGVtRXJyb3IgVENQU29ja2V0IFRhc2sgVGV4dCBUZXh0RGlzcGxheSBUaW1lciBUcmlkaWFnb25hbCBUdXBsZSBUeXBlIFR5cGVFcnJvciBUeXBlTWFwRW50cnkgVHlwZU1hcExldmVsIFR5cGVOYW1lIFR5cGVWYXIgVHlwZWRTbG90IFVEUFNvY2tldCBVSW50IFVJbnQxMjggVUludDE2IFVJbnQzMiBVSW50NjQgVUludDggVW5kZWZSZWZFcnJvciBVbmRlZlZhckVycm9yIFVuaWNvZGVFcnJvciBVbmlmb3JtU2NhbGluZyBVbmlvbiBVbmlvbkFsbCBVbml0UmFuZ2UgVW5zaWduZWQgVXBwZXJUcmlhbmd1bGFyIFZhbCBWYXJhcmcgVmVjRWxlbWVudCBWZWNPck1hdCBWZWN0b3IgVmVyc2lvbk51bWJlciBWb2lkIFdlYWtLZXlEaWN0IFdlYWtSZWYgV29ya2VyQ29uZmlnIFdvcmtlclBvb2wgIn0sdD0iW0EtWmEtel9cXHUwMEExLVxcdUZGRkZdW0EtWmEtel8wLTlcXHUwMEExLVxcdUZGRkZdKiIsYT17bDp0LGs6cixpOi88XC8vfSxuPXtjTjoibnVtYmVyIixiOi8oXGIweFtcZF9dKihcLltcZF9dKik/fDB4XC5cZFtcZF9dKilwWy0rXT9cZCt8XGIwW2JveF1bYS1mQS1GMC05XVthLWZBLUYwLTlfXSp8KFxiXGRbXGRfXSooXC5bXGRfXSopP3xcLlxkW1xkX10qKShbZUVmRl1bLStdP1xkKyk/LyxyOjB9LG89e2NOOiJzdHJpbmciLGI6LycoLnxcXFt4WHVVXVthLXpBLVowLTldKyknL30saT17Y046InN1YnN0IixiOi9cJFwoLyxlOi9cKS8sazpyfSxsPXtjTjoidmFyaWFibGUiLGI6IlxcJCIrdH0sYz17Y046InN0cmluZyIsYzpbZS5CRSxpLGxdLHY6W3tiOi9cdyoiIiIvLGU6LyIiIlx3Ki8scjoxMH0se2I6L1x3KiIvLGU6LyJcdyovfV19LHM9e2NOOiJzdHJpbmciLGM6W2UuQkUsaSxsXSxiOiJgIixlOiJgIn0sZD17Y046Im1ldGEiLGI6IkAiK3R9LHU9e2NOOiJjb21tZW50Iix2Olt7YjoiIz0iLGU6Ij0jIixyOjEwfSx7YjoiIyIsZToiJCJ9XX07cmV0dXJuIGEuYz1bbixvLGMscyxkLHUsZS5IQ00se2NOOiJrZXl3b3JkIixiOiJcXGIoKChhYnN0cmFjdHxwcmltaXRpdmUpXFxzKyl0eXBlfChtdXRhYmxlXFxzKyk/c3RydWN0KVxcYiJ9LHtiOi88Oi99XSxpLmM9YS5jLGF9KTtobGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoImNvZmZlZXNjcmlwdCIsZnVuY3Rpb24oZSl7dmFyIGM9e2tleXdvcmQ6ImluIGlmIGZvciB3aGlsZSBmaW5hbGx5IG5ldyBkbyByZXR1cm4gZWxzZSBicmVhayBjYXRjaCBpbnN0YW5jZW9mIHRocm93IHRyeSB0aGlzIHN3aXRjaCBjb250aW51ZSB0eXBlb2YgZGVsZXRlIGRlYnVnZ2VyIHN1cGVyIHlpZWxkIGltcG9ydCBleHBvcnQgZnJvbSBhcyBkZWZhdWx0IGF3YWl0IHRoZW4gdW5sZXNzIHVudGlsIGxvb3Agb2YgYnkgd2hlbiBhbmQgb3IgaXMgaXNudCBub3QiLGxpdGVyYWw6InRydWUgZmFsc2UgbnVsbCB1bmRlZmluZWQgeWVzIG5vIG9uIG9mZiIsYnVpbHRfaW46Im5wbSByZXF1aXJlIGNvbnNvbGUgcHJpbnQgbW9kdWxlIGdsb2JhbCB3aW5kb3cgZG9jdW1lbnQifSxuPSJbQS1aYS16JF9dWzAtOUEtWmEteiRfXSoiLHI9e2NOOiJzdWJzdCIsYjovI1x7LyxlOi99LyxrOmN9LGk9W2UuQk5NLGUuaW5oZXJpdChlLkNOTSx7c3RhcnRzOntlOiIoXFxzKi8pPyIscjowfX0pLHtjTjoic3RyaW5nIix2Olt7YjovJycnLyxlOi8nJycvLGM6W2UuQkVdfSx7YjovJy8sZTovJy8sYzpbZS5CRV19LHtiOi8iIiIvLGU6LyIiIi8sYzpbZS5CRSxyXX0se2I6LyIvLGU6LyIvLGM6W2UuQkUscl19XX0se2NOOiJyZWdleHAiLHY6W3tiOiIvLy8iLGU6Ii8vLyIsYzpbcixlLkhDTV19LHtiOiIvL1tnaW1dKiIscjowfSx7YjovXC8oPyFbICpdKShcXFwvfC4pKj9cL1tnaW1dKig/PVxXfCQpL31dfSx7YjoiQCIrbn0se3NMOiJqYXZhc2NyaXB0IixlQjohMCxlRTohMCx2Olt7YjoiYGBgIixlOiJgYGAifSx7YjoiYCIsZToiYCJ9XX1dO3IuYz1pO3ZhciBzPWUuaW5oZXJpdChlLlRNLHtiOm59KSx0PSIoXFwoLipcXCkpP1xccypcXEJbLT1dPiIsbz17Y046InBhcmFtcyIsYjoiXFwoW15cXChdIixyQjohMCxjOlt7YjovXCgvLGU6L1wpLyxrOmMsYzpbInNlbGYiXS5jb25jYXQoaSl9XX07cmV0dXJue2FsaWFzZXM6WyJjb2ZmZWUiLCJjc29uIiwiaWNlZCJdLGs6YyxpOi9cL1wqLyxjOmkuY29uY2F0KFtlLkMoIiMjIyIsIiMjIyIpLGUuSENNLHtjTjoiZnVuY3Rpb24iLGI6Il5cXHMqIituKyJcXHMqPVxccyoiK3QsZToiWy09XT4iLHJCOiEwLGM6W3Msb119LHtiOi9bOlwoLD1dXHMqLyxyOjAsYzpbe2NOOiJmdW5jdGlvbiIsYjp0LGU6IlstPV0+IixyQjohMCxjOltvXX1dfSx7Y046ImNsYXNzIixiSzoiY2xhc3MiLGU6IiQiLGk6L1s6PSJcW1xdXS8sYzpbe2JLOiJleHRlbmRzIixlVzohMCxpOi9bOj0iXFtcXV0vLGM6W3NdfSxzXX0se2I6bisiOiIsZToiOiIsckI6ITAsckU6ITAscjowfV0pfX0pO2hsanMucmVnaXN0ZXJMYW5ndWFnZSgiY3BwIixmdW5jdGlvbih0KXt2YXIgZT17Y046ImtleXdvcmQiLGI6IlxcYlthLXpcXGRfXSpfdFxcYiJ9LHI9e2NOOiJzdHJpbmciLHY6W3tiOicodTg/fFUpP0w/IicsZTonIicsaToiXFxuIixjOlt0LkJFXX0se2I6Jyh1OD98VSk/UiInLGU6JyInLGM6W3QuQkVdfSx7YjoiJ1xcXFw/LiIsZToiJyIsaToiLiJ9XX0scz17Y046Im51bWJlciIsdjpbe2I6IlxcYigwYlswMSddKykifSx7YjoiKC0/KVxcYihbXFxkJ10rKFxcLltcXGQnXSopP3xcXC5bXFxkJ10rKSh1fFV8bHxMfHVsfFVMfGZ8RnxifEIpIn0se2I6IigtPykoXFxiMFt4WF1bYS1mQS1GMC05J10rfChcXGJbXFxkJ10rKFxcLltcXGQnXSopP3xcXC5bXFxkJ10rKShbZUVdWy0rXT9bXFxkJ10rKT8pIn1dLHI6MH0saT17Y046Im1ldGEiLGI6LyNccypbYS16XStcYi8sZTovJC8sazp7Im1ldGEta2V5d29yZCI6ImlmIGVsc2UgZWxpZiBlbmRpZiBkZWZpbmUgdW5kZWYgd2FybmluZyBlcnJvciBsaW5lIHByYWdtYSBpZmRlZiBpZm5kZWYgaW5jbHVkZSJ9LGM6W3tiOi9cXFxuLyxyOjB9LHQuaW5oZXJpdChyLHtjTjoibWV0YS1zdHJpbmcifSkse2NOOiJtZXRhLXN0cmluZyIsYjovPFteXG4+XSo+LyxlOi8kLyxpOiJcXG4ifSx0LkNMQ00sdC5DQkNNXX0sYT10LklSKyJcXHMqXFwoIixjPXtrZXl3b3JkOiJpbnQgZmxvYXQgd2hpbGUgcHJpdmF0ZSBjaGFyIGNhdGNoIGltcG9ydCBtb2R1bGUgZXhwb3J0IHZpcnR1YWwgb3BlcmF0b3Igc2l6ZW9mIGR5bmFtaWNfY2FzdHwxMCB0eXBlZGVmIGNvbnN0X2Nhc3R8MTAgY29uc3QgZm9yIHN0YXRpY19jYXN0fDEwIHVuaW9uIG5hbWVzcGFjZSB1bnNpZ25lZCBsb25nIHZvbGF0aWxlIHN0YXRpYyBwcm90ZWN0ZWQgYm9vbCB0ZW1wbGF0ZSBtdXRhYmxlIGlmIHB1YmxpYyBmcmllbmQgZG8gZ290byBhdXRvIHZvaWQgZW51bSBlbHNlIGJyZWFrIGV4dGVybiB1c2luZyBhc20gY2FzZSB0eXBlaWQgc2hvcnQgcmVpbnRlcnByZXRfY2FzdHwxMCBkZWZhdWx0IGRvdWJsZSByZWdpc3RlciBleHBsaWNpdCBzaWduZWQgdHlwZW5hbWUgdHJ5IHRoaXMgc3dpdGNoIGNvbnRpbnVlIGlubGluZSBkZWxldGUgYWxpZ25vZiBjb25zdGV4cHIgZGVjbHR5cGUgbm9leGNlcHQgc3RhdGljX2Fzc2VydCB0aHJlYWRfbG9jYWwgcmVzdHJpY3QgX0Jvb2wgY29tcGxleCBfQ29tcGxleCBfSW1hZ2luYXJ5IGF0b21pY19ib29sIGF0b21pY19jaGFyIGF0b21pY19zY2hhciBhdG9taWNfdWNoYXIgYXRvbWljX3Nob3J0IGF0b21pY191c2hvcnQgYXRvbWljX2ludCBhdG9taWNfdWludCBhdG9taWNfbG9uZyBhdG9taWNfdWxvbmcgYXRvbWljX2xsb25nIGF0b21pY191bGxvbmcgbmV3IHRocm93IHJldHVybiBhbmQgb3Igbm90IixidWlsdF9pbjoic3RkIHN0cmluZyBjaW4gY291dCBjZXJyIGNsb2cgc3RkaW4gc3Rkb3V0IHN0ZGVyciBzdHJpbmdzdHJlYW0gaXN0cmluZ3N0cmVhbSBvc3RyaW5nc3RyZWFtIGF1dG9fcHRyIGRlcXVlIGxpc3QgcXVldWUgc3RhY2sgdmVjdG9yIG1hcCBzZXQgYml0c2V0IG11bHRpc2V0IG11bHRpbWFwIHVub3JkZXJlZF9zZXQgdW5vcmRlcmVkX21hcCB1bm9yZGVyZWRfbXVsdGlzZXQgdW5vcmRlcmVkX211bHRpbWFwIGFycmF5IHNoYXJlZF9wdHIgYWJvcnQgYWJzIGFjb3MgYXNpbiBhdGFuMiBhdGFuIGNhbGxvYyBjZWlsIGNvc2ggY29zIGV4aXQgZXhwIGZhYnMgZmxvb3IgZm1vZCBmcHJpbnRmIGZwdXRzIGZyZWUgZnJleHAgZnNjYW5mIGlzYWxudW0gaXNhbHBoYSBpc2NudHJsIGlzZGlnaXQgaXNncmFwaCBpc2xvd2VyIGlzcHJpbnQgaXNwdW5jdCBpc3NwYWNlIGlzdXBwZXIgaXN4ZGlnaXQgdG9sb3dlciB0b3VwcGVyIGxhYnMgbGRleHAgbG9nMTAgbG9nIG1hbGxvYyByZWFsbG9jIG1lbWNociBtZW1jbXAgbWVtY3B5IG1lbXNldCBtb2RmIHBvdyBwcmludGYgcHV0Y2hhciBwdXRzIHNjYW5mIHNpbmggc2luIHNucHJpbnRmIHNwcmludGYgc3FydCBzc2NhbmYgc3RyY2F0IHN0cmNociBzdHJjbXAgc3RyY3B5IHN0cmNzcG4gc3RybGVuIHN0cm5jYXQgc3RybmNtcCBzdHJuY3B5IHN0cnBicmsgc3RycmNociBzdHJzcG4gc3Ryc3RyIHRhbmggdGFuIHZmcHJpbnRmIHZwcmludGYgdnNwcmludGYgZW5kbCBpbml0aWFsaXplcl9saXN0IHVuaXF1ZV9wdHIiLGxpdGVyYWw6InRydWUgZmFsc2UgbnVsbHB0ciBOVUxMIn0sbj1bZSx0LkNMQ00sdC5DQkNNLHMscl07cmV0dXJue2FsaWFzZXM6WyJjIiwiY2MiLCJoIiwiYysrIiwiaCsrIiwiaHBwIl0sazpjLGk6IjwvIixjOm4uY29uY2F0KFtpLHtiOiJcXGIoZGVxdWV8bGlzdHxxdWV1ZXxzdGFja3x2ZWN0b3J8bWFwfHNldHxiaXRzZXR8bXVsdGlzZXR8bXVsdGltYXB8dW5vcmRlcmVkX21hcHx1bm9yZGVyZWRfc2V0fHVub3JkZXJlZF9tdWx0aXNldHx1bm9yZGVyZWRfbXVsdGltYXB8YXJyYXkpXFxzKjwiLGU6Ij4iLGs6YyxjOlsic2VsZiIsZV19LHtiOnQuSVIrIjo6IixrOmN9LHt2Olt7YjovPS8sZTovOy99LHtiOi9cKC8sZTovXCkvfSx7Yks6Im5ldyB0aHJvdyByZXR1cm4gZWxzZSIsZTovOy99XSxrOmMsYzpuLmNvbmNhdChbe2I6L1woLyxlOi9cKS8sazpjLGM6bi5jb25jYXQoWyJzZWxmIl0pLHI6MH1dKSxyOjB9LHtjTjoiZnVuY3Rpb24iLGI6IigiK3QuSVIrIltcXComXFxzXSspKyIrYSxyQjohMCxlOi9bezs9XS8sZUU6ITAsazpjLGk6L1teXHdcc1wqJl0vLGM6W3tiOmEsckI6ITAsYzpbdC5UTV0scjowfSx7Y046InBhcmFtcyIsYjovXCgvLGU6L1wpLyxrOmMscjowLGM6W3QuQ0xDTSx0LkNCQ00scixzLGVdfSx0LkNMQ00sdC5DQkNNLGldfSx7Y046ImNsYXNzIixiSzoiY2xhc3Mgc3RydWN0IixlOi9bezs6XS8sYzpbe2I6LzwvLGU6Lz4vLGM6WyJzZWxmIl19LHQuVE1dfV0pLGV4cG9ydHM6e3ByZXByb2Nlc3NvcjppLHN0cmluZ3M6cixrOmN9fX0pO2hsanMucmVnaXN0ZXJMYW5ndWFnZSgicnVieSIsZnVuY3Rpb24oZSl7dmFyIGI9IlthLXpBLVpfXVxcdypbIT89XT98Wy0rfl1cXEB8PDx8Pj58PX58PT09P3w8PT58Wzw+XT0/fFxcKlxcKnxbLS8rJV4mKn5gfF18XFxbXFxdPT8iLHI9e2tleXdvcmQ6ImFuZCB0aGVuIGRlZmluZWQgbW9kdWxlIGluIHJldHVybiByZWRvIGlmIEJFR0lOIHJldHJ5IGVuZCBmb3Igc2VsZiB3aGVuIG5leHQgdW50aWwgZG8gYmVnaW4gdW5sZXNzIEVORCByZXNjdWUgZWxzZSBicmVhayB1bmRlZiBub3Qgc3VwZXIgY2xhc3MgY2FzZSByZXF1aXJlIHlpZWxkIGFsaWFzIHdoaWxlIGVuc3VyZSBlbHNpZiBvciBpbmNsdWRlIGF0dHJfcmVhZGVyIGF0dHJfd3JpdGVyIGF0dHJfYWNjZXNzb3IiLGxpdGVyYWw6InRydWUgZmFsc2UgbmlsIn0sYz17Y046ImRvY3RhZyIsYjoiQFtBLVphLXpdKyJ9LGE9e2I6IiM8IixlOiI+In0scz1bZS5DKCIjIiwiJCIse2M6W2NdfSksZS5DKCJeXFw9YmVnaW4iLCJeXFw9ZW5kIix7YzpbY10scjoxMH0pLGUuQygiXl9fRU5EX18iLCJcXG4kIildLG49e2NOOiJzdWJzdCIsYjoiI1xceyIsZToifSIsazpyfSx0PXtjTjoic3RyaW5nIixjOltlLkJFLG5dLHY6W3tiOi8nLyxlOi8nL30se2I6LyIvLGU6LyIvfSx7YjovYC8sZTovYC99LHtiOiIlW3FRd1d4XT9cXCgiLGU6IlxcKSJ9LHtiOiIlW3FRd1d4XT9cXFsiLGU6IlxcXSJ9LHtiOiIlW3FRd1d4XT97IixlOiJ9In0se2I6IiVbcVF3V3hdPzwiLGU6Ij4ifSx7YjoiJVtxUXdXeF0/LyIsZToiLyJ9LHtiOiIlW3FRd1d4XT8lIixlOiIlIn0se2I6IiVbcVF3V3hdPy0iLGU6Ii0ifSx7YjoiJVtxUXdXeF0/XFx8IixlOiJcXHwifSx7YjovXEJcPyhcXFxkezEsM318XFx4W0EtRmEtZjAtOV17MSwyfXxcXHVbQS1GYS1mMC05XXs0fXxcXD9cUylcYi99LHtiOi88PCgtPylcdyskLyxlOi9eXHMqXHcrJC99XX0saT17Y046InBhcmFtcyIsYjoiXFwoIixlOiJcXCkiLGVuZHNQYXJlbnQ6ITAsazpyfSxkPVt0LGEse2NOOiJjbGFzcyIsYks6ImNsYXNzIG1vZHVsZSIsZToiJHw7IixpOi89LyxjOltlLmluaGVyaXQoZS5UTSx7YjoiW0EtWmEtel9dXFx3Kig6OlxcdyspKihcXD98XFwhKT8ifSkse2I6IjxcXHMqIixjOlt7YjoiKCIrZS5JUisiOjopPyIrZS5JUn1dfV0uY29uY2F0KHMpfSx7Y046ImZ1bmN0aW9uIixiSzoiZGVmIixlOiIkfDsiLGM6W2UuaW5oZXJpdChlLlRNLHtiOmJ9KSxpXS5jb25jYXQocyl9LHtiOmUuSVIrIjo6In0se2NOOiJzeW1ib2wiLGI6ZS5VSVIrIihcXCF8XFw/KT86IixyOjB9LHtjTjoic3ltYm9sIixiOiI6KD8hXFxzKSIsYzpbdCx7YjpifV0scjowfSx7Y046Im51bWJlciIsYjoiKFxcYjBbMC03X10rKXwoXFxiMHhbMC05YS1mQS1GX10rKXwoXFxiWzEtOV1bMC05X10qKFxcLlswLTlfXSspPyl8WzBfXVxcYiIscjowfSx7YjoiKFxcJFxcVyl8KChcXCR8XFxAXFxAPykoXFx3KykpIn0se2NOOiJwYXJhbXMiLGI6L1x8LyxlOi9cfC8sazpyfSx7YjoiKCIrZS5SU1IrInx1bmxlc3MpXFxzKiIsazoidW5sZXNzIixjOlthLHtjTjoicmVnZXhwIixjOltlLkJFLG5dLGk6L1xuLyx2Olt7YjoiLyIsZToiL1thLXpdKiJ9LHtiOiIlcnsiLGU6In1bYS16XSoifSx7YjoiJXJcXCgiLGU6IlxcKVthLXpdKiJ9LHtiOiIlciEiLGU6IiFbYS16XSoifSx7YjoiJXJcXFsiLGU6IlxcXVthLXpdKiJ9XX1dLmNvbmNhdChzKSxyOjB9XS5jb25jYXQocyk7bi5jPWQsaS5jPWQ7dmFyIGw9Ils+P10+IixvPSJbXFx3I10rXFwoXFx3K1xcKTpcXGQrOlxcZCs+Iix1PSIoXFx3Ky0pP1xcZCtcXC5cXGQrXFwuXFxkKHBcXGQrKT9bXj5dKz4iLHc9W3tiOi9eXHMqPT4vLHN0YXJ0czp7ZToiJCIsYzpkfX0se2NOOiJtZXRhIixiOiJeKCIrbCsifCIrbysifCIrdSsiKSIsc3RhcnRzOntlOiIkIixjOmR9fV07cmV0dXJue2FsaWFzZXM6WyJyYiIsImdlbXNwZWMiLCJwb2RzcGVjIiwidGhvciIsImlyYiJdLGs6cixpOi9cL1wqLyxjOnMuY29uY2F0KHcpLmNvbmNhdChkKX19KTtobGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoInlhbWwiLGZ1bmN0aW9uKGUpe3ZhciBiPSJ0cnVlIGZhbHNlIHllcyBubyBudWxsIixhPSJeWyBcXC1dKiIscj0iW2EtekEtWl9dW1xcd1xcLV0qIix0PXtjTjoiYXR0ciIsdjpbe2I6YStyKyI6In0se2I6YSsnIicrcisnIjonfSx7YjphKyInIityKyInOiJ9XX0sYz17Y046InRlbXBsYXRlLXZhcmlhYmxlIix2Olt7Yjoie3siLGU6In19In0se2I6IiV7IixlOiJ9In1dfSxsPXtjTjoic3RyaW5nIixyOjAsdjpbe2I6LycvLGU6LycvfSx7YjovIi8sZTovIi99LHtiOi9cUysvfV0sYzpbZS5CRSxjXX07cmV0dXJue2NJOiEwLGFsaWFzZXM6WyJ5bWwiLCJZQU1MIiwieWFtbCJdLGM6W3Qse2NOOiJtZXRhIixiOiJeLS0tcyokIixyOjEwfSx7Y046InN0cmluZyIsYjoiW1xcfD5dICokIixyRTohMCxjOmwuYyxlOnQudlswXS5ifSx7YjoiPCVbJT0tXT8iLGU6IlslLV0/JT4iLHNMOiJydWJ5IixlQjohMCxlRTohMCxyOjB9LHtjTjoidHlwZSIsYjoiISEiK2UuVUlSfSx7Y046Im1ldGEiLGI6IiYiK2UuVUlSKyIkIn0se2NOOiJtZXRhIixiOiJcXCoiK2UuVUlSKyIkIn0se2NOOiJidWxsZXQiLGI6Il4gKi0iLHI6MH0sZS5IQ00se2JLOmIsazp7bGl0ZXJhbDpifX0sZS5DTk0sbF19fSk7aGxqcy5yZWdpc3Rlckxhbmd1YWdlKCJjc3MiLGZ1bmN0aW9uKGUpe3ZhciBjPSJbYS16QS1aLV1bYS16QS1aMC05Xy1dKiIsdD17YjovW0EtWlxfXC5cLV0rXHMqOi8sckI6ITAsZToiOyIsZVc6ITAsYzpbe2NOOiJhdHRyaWJ1dGUiLGI6L1xTLyxlOiI6IixlRTohMCxzdGFydHM6e2VXOiEwLGVFOiEwLGM6W3tiOi9bXHctXStcKC8sckI6ITAsYzpbe2NOOiJidWlsdF9pbiIsYjovW1x3LV0rL30se2I6L1woLyxlOi9cKS8sYzpbZS5BU00sZS5RU01dfV19LGUuQ1NTTk0sZS5RU00sZS5BU00sZS5DQkNNLHtjTjoibnVtYmVyIixiOiIjWzAtOUEtRmEtZl0rIn0se2NOOiJtZXRhIixiOiIhaW1wb3J0YW50In1dfX1dfTtyZXR1cm57Y0k6ITAsaTovWz1cL3wnXCRdLyxjOltlLkNCQ00se2NOOiJzZWxlY3Rvci1pZCIsYjovI1tBLVphLXowLTlfLV0rL30se2NOOiJzZWxlY3Rvci1jbGFzcyIsYjovXC5bQS1aYS16MC05Xy1dKy99LHtjTjoic2VsZWN0b3ItYXR0ciIsYjovXFsvLGU6L1xdLyxpOiIkIn0se2NOOiJzZWxlY3Rvci1wc2V1ZG8iLGI6LzooOik/W2EtekEtWjAtOVxfXC1cK1woXCkiJy5dKy99LHtiOiJAKGZvbnQtZmFjZXxwYWdlKSIsbDoiW2Etei1dKyIsazoiZm9udC1mYWNlIHBhZ2UifSx7YjoiQCIsZToiW3s7XSIsaTovOi8sYzpbe2NOOiJrZXl3b3JkIixiOi9cdysvfSx7YjovXHMvLGVXOiEwLGVFOiEwLHI6MCxjOltlLkFTTSxlLlFTTSxlLkNTU05NXX1dfSx7Y046InNlbGVjdG9yLXRhZyIsYjpjLHI6MH0se2I6InsiLGU6In0iLGk6L1xTLyxjOltlLkNCQ00sdF19XX19KTtobGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoImZvcnRyYW4iLGZ1bmN0aW9uKGUpe3ZhciB0PXtjTjoicGFyYW1zIixiOiJcXCgiLGU6IlxcKSJ9LG49e2xpdGVyYWw6Ii5GYWxzZS4gLlRydWUuIixrZXl3b3JkOiJraW5kIGRvIHdoaWxlIHByaXZhdGUgY2FsbCBpbnRyaW5zaWMgd2hlcmUgZWxzZXdoZXJlIHR5cGUgZW5kdHlwZSBlbmRtb2R1bGUgZW5kc2VsZWN0IGVuZGludGVyZmFjZSBlbmQgZW5kZG8gZW5kaWYgaWYgZm9yYWxsIGVuZGZvcmFsbCBvbmx5IGNvbnRhaW5zIGRlZmF1bHQgcmV0dXJuIHN0b3AgdGhlbiBwdWJsaWMgc3Vicm91dGluZXwxMCBmdW5jdGlvbiBwcm9ncmFtIC5hbmQuIC5vci4gLm5vdC4gLmxlLiAuZXEuIC5nZS4gLmd0LiAubHQuIGdvdG8gc2F2ZSBlbHNlIHVzZSBtb2R1bGUgc2VsZWN0IGNhc2UgYWNjZXNzIGJsYW5rIGRpcmVjdCBleGlzdCBmaWxlIGZtdCBmb3JtIGZvcm1hdHRlZCBpb3N0YXQgbmFtZSBuYW1lZCBuZXh0cmVjIG51bWJlciBvcGVuZWQgcmVjIHJlY2wgc2VxdWVudGlhbCBzdGF0dXMgdW5mb3JtYXR0ZWQgdW5pdCBjb250aW51ZSBmb3JtYXQgcGF1c2UgY3ljbGUgZXhpdCBjX251bGxfY2hhciBjX2FsZXJ0IGNfYmFja3NwYWNlIGNfZm9ybV9mZWVkIGZsdXNoIHdhaXQgZGVjaW1hbCByb3VuZCBpb21zZyBzeW5jaHJvbm91cyBub3Bhc3Mgbm9uX292ZXJyaWRhYmxlIHBhc3MgcHJvdGVjdGVkIHZvbGF0aWxlIGFic3RyYWN0IGV4dGVuZHMgaW1wb3J0IG5vbl9pbnRyaW5zaWMgdmFsdWUgZGVmZXJyZWQgZ2VuZXJpYyBmaW5hbCBlbnVtZXJhdG9yIGNsYXNzIGFzc29jaWF0ZSBiaW5kIGVudW0gY19pbnQgY19zaG9ydCBjX2xvbmcgY19sb25nX2xvbmcgY19zaWduZWRfY2hhciBjX3NpemVfdCBjX2ludDhfdCBjX2ludDE2X3QgY19pbnQzMl90IGNfaW50NjRfdCBjX2ludF9sZWFzdDhfdCBjX2ludF9sZWFzdDE2X3QgY19pbnRfbGVhc3QzMl90IGNfaW50X2xlYXN0NjRfdCBjX2ludF9mYXN0OF90IGNfaW50X2Zhc3QxNl90IGNfaW50X2Zhc3QzMl90IGNfaW50X2Zhc3Q2NF90IGNfaW50bWF4X3QgQ19pbnRwdHJfdCBjX2Zsb2F0IGNfZG91YmxlIGNfbG9uZ19kb3VibGUgY19mbG9hdF9jb21wbGV4IGNfZG91YmxlX2NvbXBsZXggY19sb25nX2RvdWJsZV9jb21wbGV4IGNfYm9vbCBjX2NoYXIgY19udWxsX3B0ciBjX251bGxfZnVucHRyIGNfbmV3X2xpbmUgY19jYXJyaWFnZV9yZXR1cm4gY19ob3Jpem9udGFsX3RhYiBjX3ZlcnRpY2FsX3RhYiBpc29fY19iaW5kaW5nIGNfbG9jIGNfZnVubG9jIGNfYXNzb2NpYXRlZCAgY19mX3BvaW50ZXIgY19wdHIgY19mdW5wdHIgaXNvX2ZvcnRyYW5fZW52IGNoYXJhY3Rlcl9zdG9yYWdlX3NpemUgZXJyb3JfdW5pdCBmaWxlX3N0b3JhZ2Vfc2l6ZSBpbnB1dF91bml0IGlvc3RhdF9lbmQgaW9zdGF0X2VvciBudW1lcmljX3N0b3JhZ2Vfc2l6ZSBvdXRwdXRfdW5pdCBjX2ZfcHJvY3BvaW50ZXIgaWVlZV9hcml0aG1ldGljIGllZWVfc3VwcG9ydF91bmRlcmZsb3dfY29udHJvbCBpZWVlX2dldF91bmRlcmZsb3dfbW9kZSBpZWVlX3NldF91bmRlcmZsb3dfbW9kZSBuZXd1bml0IGNvbnRpZ3VvdXMgcmVjdXJzaXZlIHBhZCBwb3NpdGlvbiBhY3Rpb24gZGVsaW0gcmVhZHdyaXRlIGVvciBhZHZhbmNlIG5tbCBpbnRlcmZhY2UgcHJvY2VkdXJlIG5hbWVsaXN0IGluY2x1ZGUgc2VxdWVuY2UgZWxlbWVudGFsIHB1cmUgaW50ZWdlciByZWFsIGNoYXJhY3RlciBjb21wbGV4IGxvZ2ljYWwgZGltZW5zaW9uIGFsbG9jYXRhYmxlfDEwIHBhcmFtZXRlciBleHRlcm5hbCBpbXBsaWNpdHwxMCBub25lIGRvdWJsZSBwcmVjaXNpb24gYXNzaWduIGludGVudCBvcHRpb25hbCBwb2ludGVyIHRhcmdldCBpbiBvdXQgY29tbW9uIGVxdWl2YWxlbmNlIGRhdGEiLGJ1aWx0X2luOiJhbG9nIGFsb2cxMCBhbWF4MCBhbWF4MSBhbWluMCBhbWluMSBhbW9kIGNhYnMgY2NvcyBjZXhwIGNsb2cgY3NpbiBjc3FydCBkYWJzIGRhY29zIGRhc2luIGRhdGFuIGRhdGFuMiBkY29zIGRjb3NoIGRkaW0gZGV4cCBkaW50IGRsb2cgZGxvZzEwIGRtYXgxIGRtaW4xIGRtb2QgZG5pbnQgZHNpZ24gZHNpbiBkc2luaCBkc3FydCBkdGFuIGR0YW5oIGZsb2F0IGlhYnMgaWRpbSBpZGludCBpZG5pbnQgaWZpeCBpc2lnbiBtYXgwIG1heDEgbWluMCBtaW4xIHNuZ2wgYWxnYW1hIGNkYWJzIGNkY29zIGNkZXhwIGNkbG9nIGNkc2luIGNkc3FydCBjcWFicyBjcWNvcyBjcWV4cCBjcWxvZyBjcXNpbiBjcXNxcnQgZGNtcGx4IGRjb25qZyBkZXJmIGRlcmZjIGRmbG9hdCBkZ2FtbWEgZGltYWcgZGxnYW1hIGlxaW50IHFhYnMgcWFjb3MgcWFzaW4gcWF0YW4gcWF0YW4yIHFjbXBseCBxY29uamcgcWNvcyBxY29zaCBxZGltIHFlcmYgcWVyZmMgcWV4cCBxZ2FtbWEgcWltYWcgcWxnYW1hIHFsb2cgcWxvZzEwIHFtYXgxIHFtaW4xIHFtb2QgcW5pbnQgcXNpZ24gcXNpbiBxc2luaCBxc3FydCBxdGFuIHF0YW5oIGFicyBhY29zIGFpbWFnIGFpbnQgYW5pbnQgYXNpbiBhdGFuIGF0YW4yIGNoYXIgY21wbHggY29uamcgY29zIGNvc2ggZXhwIGljaGFyIGluZGV4IGludCBsb2cgbG9nMTAgbWF4IG1pbiBuaW50IHNpZ24gc2luIHNpbmggc3FydCB0YW4gdGFuaCBwcmludCB3cml0ZSBkaW0gbGdlIGxndCBsbGUgbGx0IG1vZCBudWxsaWZ5IGFsbG9jYXRlIGRlYWxsb2NhdGUgYWRqdXN0bCBhZGp1c3RyIGFsbCBhbGxvY2F0ZWQgYW55IGFzc29jaWF0ZWQgYml0X3NpemUgYnRlc3QgY2VpbGluZyBjb3VudCBjc2hpZnQgZGF0ZV9hbmRfdGltZSBkaWdpdHMgZG90X3Byb2R1Y3QgZW9zaGlmdCBlcHNpbG9uIGV4cG9uZW50IGZsb29yIGZyYWN0aW9uIGh1Z2UgaWFuZCBpYmNsciBpYml0cyBpYnNldCBpZW9yIGlvciBpc2hmdCBpc2hmdGMgbGJvdW5kIGxlbl90cmltIG1hdG11bCBtYXhleHBvbmVudCBtYXhsb2MgbWF4dmFsIG1lcmdlIG1pbmV4cG9uZW50IG1pbmxvYyBtaW52YWwgbW9kdWxvIG12Yml0cyBuZWFyZXN0IHBhY2sgcHJlc2VudCBwcm9kdWN0IHJhZGl4IHJhbmRvbV9udW1iZXIgcmFuZG9tX3NlZWQgcmFuZ2UgcmVwZWF0IHJlc2hhcGUgcnJzcGFjaW5nIHNjYWxlIHNjYW4gc2VsZWN0ZWRfaW50X2tpbmQgc2VsZWN0ZWRfcmVhbF9raW5kIHNldF9leHBvbmVudCBzaGFwZSBzaXplIHNwYWNpbmcgc3ByZWFkIHN1bSBzeXN0ZW1fY2xvY2sgdGlueSB0cmFuc3Bvc2UgdHJpbSB1Ym91bmQgdW5wYWNrIHZlcmlmeSBhY2hhciBpYWNoYXIgdHJhbnNmZXIgZGJsZSBlbnRyeSBkcHJvZCBjcHVfdGltZSBjb21tYW5kX2FyZ3VtZW50X2NvdW50IGdldF9jb21tYW5kIGdldF9jb21tYW5kX2FyZ3VtZW50IGdldF9lbnZpcm9ubWVudF92YXJpYWJsZSBpc19pb3N0YXRfZW5kIGllZWVfYXJpdGhtZXRpYyBpZWVlX3N1cHBvcnRfdW5kZXJmbG93X2NvbnRyb2wgaWVlZV9nZXRfdW5kZXJmbG93X21vZGUgaWVlZV9zZXRfdW5kZXJmbG93X21vZGUgaXNfaW9zdGF0X2VvciBtb3ZlX2FsbG9jIG5ld19saW5lIHNlbGVjdGVkX2NoYXJfa2luZCBzYW1lX3R5cGVfYXMgZXh0ZW5kc190eXBlX29mYWNvc2ggYXNpbmggYXRhbmggYmVzc2VsX2owIGJlc3NlbF9qMSBiZXNzZWxfam4gYmVzc2VsX3kwIGJlc3NlbF95MSBiZXNzZWxfeW4gZXJmIGVyZmMgZXJmY19zY2FsZWQgZ2FtbWEgbG9nX2dhbW1hIGh5cG90IG5vcm0yIGF0b21pY19kZWZpbmUgYXRvbWljX3JlZiBleGVjdXRlX2NvbW1hbmRfbGluZSBsZWFkeiB0cmFpbHogc3RvcmFnZV9zaXplIG1lcmdlX2JpdHMgYmdlIGJndCBibGUgYmx0IGRzaGlmdGwgZHNoaWZ0ciBmaW5kbG9jIGlhbGwgaWFueSBpcGFyaXR5IGltYWdlX2luZGV4IGxjb2JvdW5kIHVjb2JvdW5kIG1hc2tsIG1hc2tyIG51bV9pbWFnZXMgcGFyaXR5IHBvcGNudCBwb3BwYXIgc2hpZnRhIHNoaWZ0bCBzaGlmdHIgdGhpc19pbWFnZSJ9O3JldHVybntjSTohMCxhbGlhc2VzOlsiZjkwIiwiZjk1Il0sazpuLGk6L1wvXCovLGM6W2UuaW5oZXJpdChlLkFTTSx7Y046InN0cmluZyIscjowfSksZS5pbmhlcml0KGUuUVNNLHtjTjoic3RyaW5nIixyOjB9KSx7Y046ImZ1bmN0aW9uIixiSzoic3Vicm91dGluZSBmdW5jdGlvbiBwcm9ncmFtIixpOiJbJHs9XFxuXSIsYzpbZS5VVE0sdF19LGUuQygiISIsIiQiLHtyOjB9KSx7Y046Im51bWJlciIsYjoiKD89XFxifFxcK3xcXC18XFwuKSg/PVxcLlxcZHxcXGQpKD86XFxkKyk/KD86XFwuP1xcZCopKD86W2RlXVsrLV0/XFxkKyk/XFxiXFwuPyIscjowfV19fSk7aGxqcy5yZWdpc3Rlckxhbmd1YWdlKCJhd2siLGZ1bmN0aW9uKGUpe3ZhciByPXtjTjoidmFyaWFibGUiLHY6W3tiOi9cJFtcd1xkI0BdW1x3XGRfXSovfSx7YjovXCRceyguKj8pfS99XX0sYj0iQkVHSU4gRU5EIGlmIGVsc2Ugd2hpbGUgZG8gZm9yIGluIGJyZWFrIGNvbnRpbnVlIGRlbGV0ZSBuZXh0IG5leHRmaWxlIGZ1bmN0aW9uIGZ1bmMgZXhpdHwxMCIsbj17Y046InN0cmluZyIsYzpbZS5CRV0sdjpbe2I6Lyh1fGIpP3I/JycnLyxlOi8nJycvLHI6MTB9LHtiOi8odXxiKT9yPyIiIi8sZTovIiIiLyxyOjEwfSx7YjovKHV8cnx1ciknLyxlOi8nLyxyOjEwfSx7YjovKHV8cnx1cikiLyxlOi8iLyxyOjEwfSx7YjovKGJ8YnIpJy8sZTovJy99LHtiOi8oYnxicikiLyxlOi8iL30sZS5BU00sZS5RU01dfTtyZXR1cm57azp7a2V5d29yZDpifSxjOltyLG4sZS5STSxlLkhDTSxlLk5NXX19KTtobGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoIm1ha2VmaWxlIixmdW5jdGlvbihlKXt2YXIgaT17Y046InZhcmlhYmxlIix2Olt7YjoiXFwkXFwoIitlLlVJUisiXFwpIixjOltlLkJFXX0se2I6L1wkW0AlPD9cXlwrXCpdL31dfSxyPXtjTjoic3RyaW5nIixiOi8iLyxlOi8iLyxjOltlLkJFLGldfSxhPXtjTjoidmFyaWFibGUiLGI6L1wkXChbXHctXStccy8sZTovXCkvLGs6e2J1aWx0X2luOiJzdWJzdCBwYXRzdWJzdCBzdHJpcCBmaW5kc3RyaW5nIGZpbHRlciBmaWx0ZXItb3V0IHNvcnQgd29yZCB3b3JkbGlzdCBmaXJzdHdvcmQgbGFzdHdvcmQgZGlyIG5vdGRpciBzdWZmaXggYmFzZW5hbWUgYWRkc3VmZml4IGFkZHByZWZpeCBqb2luIHdpbGRjYXJkIHJlYWxwYXRoIGFic3BhdGggZXJyb3Igd2FybmluZyBzaGVsbCBvcmlnaW4gZmxhdm9yIGZvcmVhY2ggaWYgb3IgYW5kIGNhbGwgZXZhbCBmaWxlIHZhbHVlIn0sYzpbaV19LG49e2I6Il4iK2UuVUlSKyJcXHMqWzorP10/PSIsaToiXFxuIixyQjohMCxjOlt7YjoiXiIrZS5VSVIsZToiWzorP10/PSIsZUU6ITB9XX0sdD17Y046Im1ldGEiLGI6L15cLlBIT05ZOi8sZTovJC8sazp7Im1ldGEta2V5d29yZCI6Ii5QSE9OWSJ9LGw6L1tcLlx3XSsvfSxsPXtjTjoic2VjdGlvbiIsYjovXlteXHNdKzovLGU6LyQvLGM6W2ldfTtyZXR1cm57YWxpYXNlczpbIm1rIiwibWFrIl0sazoiZGVmaW5lIGVuZGVmIHVuZGVmaW5lIGlmZGVmIGlmbmRlZiBpZmVxIGlmbmVxIGVsc2UgZW5kaWYgaW5jbHVkZSAtaW5jbHVkZSBzaW5jbHVkZSBvdmVycmlkZSBleHBvcnQgdW5leHBvcnQgcHJpdmF0ZSB2cGF0aCIsbDovW1x3LV0rLyxjOltlLkhDTSxpLHIsYSxuLHQsbF19fSk7aGxqcy5yZWdpc3Rlckxhbmd1YWdlKCJqYXZhIixmdW5jdGlvbihlKXt2YXIgYT0iW8OALcq4YS16QS1aXyRdW8OALcq4YS16QS1aXyQwLTldKiIsdD1hKyIoPCIrYSsiKFxccyosXFxzKiIrYSsiKSo+KT8iLHI9ImZhbHNlIHN5bmNocm9uaXplZCBpbnQgYWJzdHJhY3QgZmxvYXQgcHJpdmF0ZSBjaGFyIGJvb2xlYW4gc3RhdGljIG51bGwgaWYgY29uc3QgZm9yIHRydWUgd2hpbGUgbG9uZyBzdHJpY3RmcCBmaW5hbGx5IHByb3RlY3RlZCBpbXBvcnQgbmF0aXZlIGZpbmFsIHZvaWQgZW51bSBlbHNlIGJyZWFrIHRyYW5zaWVudCBjYXRjaCBpbnN0YW5jZW9mIGJ5dGUgc3VwZXIgdm9sYXRpbGUgY2FzZSBhc3NlcnQgc2hvcnQgcGFja2FnZSBkZWZhdWx0IGRvdWJsZSBwdWJsaWMgdHJ5IHRoaXMgc3dpdGNoIGNvbnRpbnVlIHRocm93cyBwcm90ZWN0ZWQgcHVibGljIHByaXZhdGUgbW9kdWxlIHJlcXVpcmVzIGV4cG9ydHMgZG8iLHM9IlxcYigwW2JCXShbMDFdK1swMV9dK1swMV0rfFswMV0rKXwwW3hYXShbYS1mQS1GMC05XStbYS1mQS1GMC05X10rW2EtZkEtRjAtOV0rfFthLWZBLUYwLTldKyl8KChbXFxkXStbXFxkX10rW1xcZF0rfFtcXGRdKykoXFwuKFtcXGRdK1tcXGRfXStbXFxkXSt8W1xcZF0rKSk/fFxcLihbXFxkXStbXFxkX10rW1xcZF0rfFtcXGRdKykpKFtlRV1bLStdP1xcZCspPylbbExmRl0/IixjPXtjTjoibnVtYmVyIixiOnMscjowfTtyZXR1cm57YWxpYXNlczpbImpzcCJdLGs6cixpOi88XC98Iy8sYzpbZS5DKCIvXFwqXFwqIiwiXFwqLyIse3I6MCxjOlt7YjovXHcrQC8scjowfSx7Y046ImRvY3RhZyIsYjoiQFtBLVphLXpdKyJ9XX0pLGUuQ0xDTSxlLkNCQ00sZS5BU00sZS5RU00se2NOOiJjbGFzcyIsYks6ImNsYXNzIGludGVyZmFjZSIsZTovW3s7PV0vLGVFOiEwLGs6ImNsYXNzIGludGVyZmFjZSIsaTovWzoiXFtcXV0vLGM6W3tiSzoiZXh0ZW5kcyBpbXBsZW1lbnRzIn0sZS5VVE1dfSx7Yks6Im5ldyB0aHJvdyByZXR1cm4gZWxzZSIscjowfSx7Y046ImZ1bmN0aW9uIixiOiIoIit0KyJcXHMrKSsiK2UuVUlSKyJcXHMqXFwoIixyQjohMCxlOi9bezs9XS8sZUU6ITAsazpyLGM6W3tiOmUuVUlSKyJcXHMqXFwoIixyQjohMCxyOjAsYzpbZS5VVE1dfSx7Y046InBhcmFtcyIsYjovXCgvLGU6L1wpLyxrOnIscjowLGM6W2UuQVNNLGUuUVNNLGUuQ05NLGUuQ0JDTV19LGUuQ0xDTSxlLkNCQ01dfSxjLHtjTjoibWV0YSIsYjoiQFtBLVphLXpdKyJ9XX19KTtobGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoInN0YW4iLGZ1bmN0aW9uKGUpe3JldHVybntjOltlLkhDTSxlLkNMQ00sZS5DQkNNLHtiOmUuVUlSLGw6ZS5VSVIsazp7bmFtZToiZm9yIGluIHdoaWxlIHJlcGVhdCB1bnRpbCBpZiB0aGVuIGVsc2UiLHN5bWJvbDoiYmVybm91bGxpIGJlcm5vdWxsaV9sb2dpdCBiaW5vbWlhbCBiaW5vbWlhbF9sb2dpdCBiZXRhX2Jpbm9taWFsIGh5cGVyZ2VvbWV0cmljIGNhdGVnb3JpY2FsIGNhdGVnb3JpY2FsX2xvZ2l0IG9yZGVyZWRfbG9naXN0aWMgbmVnX2Jpbm9taWFsIG5lZ19iaW5vbWlhbF8yIG5lZ19iaW5vbWlhbF8yX2xvZyBwb2lzc29uIHBvaXNzb25fbG9nIG11bHRpbm9taWFsIG5vcm1hbCBleHBfbW9kX25vcm1hbCBza2V3X25vcm1hbCBzdHVkZW50X3QgY2F1Y2h5IGRvdWJsZV9leHBvbmVudGlhbCBsb2dpc3RpYyBndW1iZWwgbG9nbm9ybWFsIGNoaV9zcXVhcmUgaW52X2NoaV9zcXVhcmUgc2NhbGVkX2ludl9jaGlfc3F1YXJlIGV4cG9uZW50aWFsIGludl9nYW1tYSB3ZWlidWxsIGZyZWNoZXQgcmF5bGVpZ2ggd2llbmVyIHBhcmV0byBwYXJldG9fdHlwZV8yIHZvbl9taXNlcyB1bmlmb3JtIG11bHRpX25vcm1hbCBtdWx0aV9ub3JtYWxfcHJlYyBtdWx0aV9ub3JtYWxfY2hvbGVza3kgbXVsdGlfZ3AgbXVsdGlfZ3BfY2hvbGVza3kgbXVsdGlfc3R1ZGVudF90IGdhdXNzaWFuX2RsbV9vYnMgZGlyaWNobGV0IGxral9jb3JyIGxral9jb3JyX2Nob2xlc2t5IHdpc2hhcnQgaW52X3dpc2hhcnQiLCJzZWxlY3Rvci10YWciOiJpbnQgcmVhbCB2ZWN0b3Igc2ltcGxleCB1bml0X3ZlY3RvciBvcmRlcmVkIHBvc2l0aXZlX29yZGVyZWQgcm93X3ZlY3RvciBtYXRyaXggY2hvbGVza3lfZmFjdG9yX2NvcnIgY2hvbGVza3lfZmFjdG9yX2NvdiBjb3JyX21hdHJpeCBjb3ZfbWF0cml4Iix0aXRsZToiZnVuY3Rpb25zIG1vZGVsIGRhdGEgcGFyYW1ldGVycyBxdWFudGl0aWVzIHRyYW5zZm9ybWVkIGdlbmVyYXRlZCIsbGl0ZXJhbDoidHJ1ZSBmYWxzZSJ9LHI6MH0se2NOOiJudW1iZXIiLGI6IjBbeFhdWzAtOWEtZkEtRl0rW0xpXT9cXGIiLHI6MH0se2NOOiJudW1iZXIiLGI6IjBbeFhdWzAtOWEtZkEtRl0rW0xpXT9cXGIiLHI6MH0se2NOOiJudW1iZXIiLGI6IlxcZCsoPzpbZUVdWytcXC1dP1xcZCopP0xcXGIiLHI6MH0se2NOOiJudW1iZXIiLGI6IlxcZCtcXC4oPyFcXGQpKD86aVxcYik/IixyOjB9LHtjTjoibnVtYmVyIixiOiJcXGQrKD86XFwuXFxkKik/KD86W2VFXVsrXFwtXT9cXGQqKT9pP1xcYiIscjowfSx7Y046Im51bWJlciIsYjoiXFwuXFxkKyg/OltlRV1bK1xcLV0/XFxkKik/aT9cXGIiLHI6MH1dfX0pO2hsanMucmVnaXN0ZXJMYW5ndWFnZSgiamF2YXNjcmlwdCIsZnVuY3Rpb24oZSl7dmFyIHI9IltBLVphLXokX11bMC05QS1aYS16JF9dKiIsdD17a2V5d29yZDoiaW4gb2YgaWYgZm9yIHdoaWxlIGZpbmFsbHkgdmFyIG5ldyBmdW5jdGlvbiBkbyByZXR1cm4gdm9pZCBlbHNlIGJyZWFrIGNhdGNoIGluc3RhbmNlb2Ygd2l0aCB0aHJvdyBjYXNlIGRlZmF1bHQgdHJ5IHRoaXMgc3dpdGNoIGNvbnRpbnVlIHR5cGVvZiBkZWxldGUgbGV0IHlpZWxkIGNvbnN0IGV4cG9ydCBzdXBlciBkZWJ1Z2dlciBhcyBhc3luYyBhd2FpdCBzdGF0aWMgaW1wb3J0IGZyb20gYXMiLGxpdGVyYWw6InRydWUgZmFsc2UgbnVsbCB1bmRlZmluZWQgTmFOIEluZmluaXR5IixidWlsdF9pbjoiZXZhbCBpc0Zpbml0ZSBpc05hTiBwYXJzZUZsb2F0IHBhcnNlSW50IGRlY29kZVVSSSBkZWNvZGVVUklDb21wb25lbnQgZW5jb2RlVVJJIGVuY29kZVVSSUNvbXBvbmVudCBlc2NhcGUgdW5lc2NhcGUgT2JqZWN0IEZ1bmN0aW9uIEJvb2xlYW4gRXJyb3IgRXZhbEVycm9yIEludGVybmFsRXJyb3IgUmFuZ2VFcnJvciBSZWZlcmVuY2VFcnJvciBTdG9wSXRlcmF0aW9uIFN5bnRheEVycm9yIFR5cGVFcnJvciBVUklFcnJvciBOdW1iZXIgTWF0aCBEYXRlIFN0cmluZyBSZWdFeHAgQXJyYXkgRmxvYXQzMkFycmF5IEZsb2F0NjRBcnJheSBJbnQxNkFycmF5IEludDMyQXJyYXkgSW50OEFycmF5IFVpbnQxNkFycmF5IFVpbnQzMkFycmF5IFVpbnQ4QXJyYXkgVWludDhDbGFtcGVkQXJyYXkgQXJyYXlCdWZmZXIgRGF0YVZpZXcgSlNPTiBJbnRsIGFyZ3VtZW50cyByZXF1aXJlIG1vZHVsZSBjb25zb2xlIHdpbmRvdyBkb2N1bWVudCBTeW1ib2wgU2V0IE1hcCBXZWFrU2V0IFdlYWtNYXAgUHJveHkgUmVmbGVjdCBQcm9taXNlIn0sYT17Y046Im51bWJlciIsdjpbe2I6IlxcYigwW2JCXVswMV0rKSJ9LHtiOiJcXGIoMFtvT11bMC03XSspIn0se2I6ZS5DTlJ9XSxyOjB9LG49e2NOOiJzdWJzdCIsYjoiXFwkXFx7IixlOiJcXH0iLGs6dCxjOltdfSxjPXtjTjoic3RyaW5nIixiOiJgIixlOiJgIixjOltlLkJFLG5dfTtuLmM9W2UuQVNNLGUuUVNNLGMsYSxlLlJNXTt2YXIgcz1uLmMuY29uY2F0KFtlLkNCQ00sZS5DTENNXSk7cmV0dXJue2FsaWFzZXM6WyJqcyIsImpzeCJdLGs6dCxjOlt7Y046Im1ldGEiLHI6MTAsYjovXlxzKlsnIl11c2UgKHN0cmljdHxhc20pWyciXS99LHtjTjoibWV0YSIsYjovXiMhLyxlOi8kL30sZS5BU00sZS5RU00sYyxlLkNMQ00sZS5DQkNNLGEse2I6L1t7LF1ccyovLHI6MCxjOlt7YjpyKyJcXHMqOiIsckI6ITAscjowLGM6W3tjTjoiYXR0ciIsYjpyLHI6MH1dfV19LHtiOiIoIitlLlJTUisifFxcYihjYXNlfHJldHVybnx0aHJvdylcXGIpXFxzKiIsazoicmV0dXJuIHRocm93IGNhc2UiLGM6W2UuQ0xDTSxlLkNCQ00sZS5STSx7Y046ImZ1bmN0aW9uIixiOiIoXFwoLio/XFwpfCIrcisiKVxccyo9PiIsckI6ITAsZToiXFxzKj0+IixjOlt7Y046InBhcmFtcyIsdjpbe2I6cn0se2I6L1woXHMqXCkvfSx7YjovXCgvLGU6L1wpLyxlQjohMCxlRTohMCxrOnQsYzpzfV19XX0se2I6LzwvLGU6LyhcL1x3K3xcdytcLyk+LyxzTDoieG1sIixjOlt7YjovPFx3K1xzKlwvPi8sc2tpcDohMH0se2I6LzxcdysvLGU6LyhcL1x3K3xcdytcLyk+Lyxza2lwOiEwLGM6W3tiOi88XHcrXHMqXC8+Lyxza2lwOiEwfSwic2VsZiJdfV19XSxyOjB9LHtjTjoiZnVuY3Rpb24iLGJLOiJmdW5jdGlvbiIsZTovXHsvLGVFOiEwLGM6W2UuaW5oZXJpdChlLlRNLHtiOnJ9KSx7Y046InBhcmFtcyIsYjovXCgvLGU6L1wpLyxlQjohMCxlRTohMCxjOnN9XSxpOi9cW3wlL30se2I6L1wkWyguXS99LGUuTUVUSE9EX0dVQVJELHtjTjoiY2xhc3MiLGJLOiJjbGFzcyIsZTovW3s7PV0vLGVFOiEwLGk6L1s6IlxbXF1dLyxjOlt7Yks6ImV4dGVuZHMifSxlLlVUTV19LHtiSzoiY29uc3RydWN0b3IiLGU6L1x7LyxlRTohMH1dLGk6LyMoPyEhKS99fSk7aGxqcy5yZWdpc3Rlckxhbmd1YWdlKCJ0ZXgiLGZ1bmN0aW9uKGMpe3ZhciBlPXtjTjoidGFnIixiOi9cXC8scjowLGM6W3tjTjoibmFtZSIsdjpbe2I6L1thLXpBLVrQsC3Rj9CQLdGPXStbKl0/L30se2I6L1teYS16QS1a0LAt0Y/QkC3RjzAtOV0vfV0sc3RhcnRzOntlVzohMCxyOjAsYzpbe2NOOiJzdHJpbmciLHY6W3tiOi9cWy8sZTovXF0vfSx7YjovXHsvLGU6L1x9L31dfSx7YjovXHMqPVxzKi8sZVc6ITAscjowLGM6W3tjTjoibnVtYmVyIixiOi8tP1xkKlwuP1xkKyhwdHxwY3xtbXxjbXxpbnxkZHxjY3xleHxlbSk/L31dfV19fV19O3JldHVybntjOltlLHtjTjoiZm9ybXVsYSIsYzpbZV0scjowLHY6W3tiOi9cJFwkLyxlOi9cJFwkL30se2I6L1wkLyxlOi9cJC99XX0sYy5DKCIlIiwiJCIse3I6MH0pXX19KTtobGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoInhtbCIsZnVuY3Rpb24ocyl7dmFyIGU9IltBLVphLXowLTlcXC5fOi1dKyIsdD17ZVc6ITAsaTovPC8scjowLGM6W3tjTjoiYXR0ciIsYjplLHI6MH0se2I6Lz1ccyovLHI6MCxjOlt7Y046InN0cmluZyIsZW5kc1BhcmVudDohMCx2Olt7YjovIi8sZTovIi99LHtiOi8nLyxlOi8nL30se2I6L1teXHMiJz08PmBdKy99XX1dfV19O3JldHVybnthbGlhc2VzOlsiaHRtbCIsInhodG1sIiwicnNzIiwiYXRvbSIsInhqYiIsInhzZCIsInhzbCIsInBsaXN0Il0sY0k6ITAsYzpbe2NOOiJtZXRhIixiOiI8IURPQ1RZUEUiLGU6Ij4iLHI6MTAsYzpbe2I6IlxcWyIsZToiXFxdIn1dfSxzLkMoIjwhLS0iLCItLT4iLHtyOjEwfSkse2I6IjxcXCFcXFtDREFUQVxcWyIsZToiXFxdXFxdPiIscjoxMH0se2I6LzxcPyhwaHApPy8sZTovXD8+LyxzTDoicGhwIixjOlt7YjoiL1xcKiIsZToiXFwqLyIsc2tpcDohMH1dfSx7Y046InRhZyIsYjoiPHN0eWxlKD89XFxzfD58JCkiLGU6Ij4iLGs6e25hbWU6InN0eWxlIn0sYzpbdF0sc3RhcnRzOntlOiI8L3N0eWxlPiIsckU6ITAsc0w6WyJjc3MiLCJ4bWwiXX19LHtjTjoidGFnIixiOiI8c2NyaXB0KD89XFxzfD58JCkiLGU6Ij4iLGs6e25hbWU6InNjcmlwdCJ9LGM6W3RdLHN0YXJ0czp7ZToiPC9zY3JpcHQ+IixyRTohMCxzTDpbImFjdGlvbnNjcmlwdCIsImphdmFzY3JpcHQiLCJoYW5kbGViYXJzIiwieG1sIl19fSx7Y046Im1ldGEiLHY6W3tiOi88XD94bWwvLGU6L1w/Pi8scjoxMH0se2I6LzxcP1x3Ky8sZTovXD8+L31dfSx7Y046InRhZyIsYjoiPC8/IixlOiIvPz4iLGM6W3tjTjoibmFtZSIsYjovW15cLz48XHNdKy8scjowfSx0XX1dfX0pO2hsanMucmVnaXN0ZXJMYW5ndWFnZSgibWFya2Rvd24iLGZ1bmN0aW9uKGUpe3JldHVybnthbGlhc2VzOlsibWQiLCJta2Rvd24iLCJta2QiXSxjOlt7Y046InNlY3Rpb24iLHY6W3tiOiJeI3sxLDZ9IixlOiIkIn0se2I6Il4uKz9cXG5bPS1dezIsfSQifV19LHtiOiI8IixlOiI+IixzTDoieG1sIixyOjB9LHtjTjoiYnVsbGV0IixiOiJeKFsqKy1dfChcXGQrXFwuKSlcXHMrIn0se2NOOiJzdHJvbmciLGI6IlsqX117Mn0uKz9bKl9dezJ9In0se2NOOiJlbXBoYXNpcyIsdjpbe2I6IlxcKi4rP1xcKiJ9LHtiOiJfLis/XyIscjowfV19LHtjTjoicXVvdGUiLGI6Il4+XFxzKyIsZToiJCJ9LHtjTjoiY29kZSIsdjpbe2I6Il5gYGB3KnMqJCIsZToiXmBgYHMqJCJ9LHtiOiJgLis/YCJ9LHtiOiJeKCB7NH18CSkiLGU6IiQiLHI6MH1dfSx7YjoiXlstXFwqXXszLH0iLGU6IiQifSx7YjoiXFxbLis/XFxdW1xcKFxcW10uKj9bXFwpXFxdXSIsckI6ITAsYzpbe2NOOiJzdHJpbmciLGI6IlxcWyIsZToiXFxdIixlQjohMCxyRTohMCxyOjB9LHtjTjoibGluayIsYjoiXFxdXFwoIixlOiJcXCkiLGVCOiEwLGVFOiEwfSx7Y046InN5bWJvbCIsYjoiXFxdXFxbIixlOiJcXF0iLGVCOiEwLGVFOiEwfV0scjoxMH0se2I6L15cW1teXG5dK1xdOi8sckI6ITAsYzpbe2NOOiJzeW1ib2wiLGI6L1xbLyxlOi9cXS8sZUI6ITAsZUU6ITB9LHtjTjoibGluayIsYjovOlxzKi8sZTovJC8sZUI6ITB9XX1dfX0pO2hsanMucmVnaXN0ZXJMYW5ndWFnZSgianNvbiIsZnVuY3Rpb24oZSl7dmFyIGk9e2xpdGVyYWw6InRydWUgZmFsc2UgbnVsbCJ9LG49W2UuUVNNLGUuQ05NXSxyPXtlOiIsIixlVzohMCxlRTohMCxjOm4sazppfSx0PXtiOiJ7IixlOiJ9IixjOlt7Y046ImF0dHIiLGI6LyIvLGU6LyIvLGM6W2UuQkVdLGk6IlxcbiJ9LGUuaW5oZXJpdChyLHtiOi86L30pXSxpOiJcXFMifSxjPXtiOiJcXFsiLGU6IlxcXSIsYzpbZS5pbmhlcml0KHIpXSxpOiJcXFMifTtyZXR1cm4gbi5zcGxpY2Uobi5sZW5ndGgsMCx0LGMpLHtjOm4sazppLGk6IlxcUyJ9fSk7"></script>
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
25 <script src="data:application/x-javascript;base64,KGZ1bmN0aW9uKCkgewogIC8vIElmIHdpbmRvdy5IVE1MV2lkZ2V0cyBpcyBhbHJlYWR5IGRlZmluZWQsIHRoZW4gdXNlIGl0OyBvdGhlcndpc2UgY3JlYXRlIGEKICAvLyBuZXcgb2JqZWN0LiBUaGlzIGFsbG93cyBwcmVjZWRpbmcgY29kZSB0byBzZXQgb3B0aW9ucyB0aGF0IGFmZmVjdCB0aGUKICAvLyBpbml0aWFsaXphdGlvbiBwcm9jZXNzICh0aG91Z2ggbm9uZSBjdXJyZW50bHkgZXhpc3QpLgogIHdpbmRvdy5IVE1MV2lkZ2V0cyA9IHdpbmRvdy5IVE1MV2lkZ2V0cyB8fCB7fTsKCiAgLy8gU2VlIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSB2aWV3ZXIgcGFuZS4gSWYgbm90LCB3ZSdyZSBpbiBhIHdlYiBicm93c2VyLgogIHZhciB2aWV3ZXJNb2RlID0gd2luZG93LkhUTUxXaWRnZXRzLnZpZXdlck1vZGUgPQogICAgICAvXGJ2aWV3ZXJfcGFuZT0xXGIvLnRlc3Qod2luZG93LmxvY2F0aW9uKTsKCiAgLy8gU2VlIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gU2hpbnkgbW9kZS4gSWYgbm90LCBpdCdzIGEgc3RhdGljIGRvY3VtZW50LgogIC8vIE5vdGUgdGhhdCBzdGF0aWMgd2lkZ2V0cyBjYW4gYXBwZWFyIGluIGJvdGggU2hpbnkgYW5kIHN0YXRpYyBtb2RlcywgYnV0CiAgLy8gb2J2aW91c2x5LCBTaGlueSB3aWRnZXRzIGNhbiBvbmx5IGFwcGVhciBpbiBTaGlueSBhcHBzL2RvY3VtZW50cy4KICB2YXIgc2hpbnlNb2RlID0gd2luZG93LkhUTUxXaWRnZXRzLnNoaW55TW9kZSA9CiAgICAgIHR5cGVvZih3aW5kb3cuU2hpbnkpICE9PSAidW5kZWZpbmVkIiAmJiAhIXdpbmRvdy5TaGlueS5vdXRwdXRCaW5kaW5nczsKCiAgLy8gV2UgY2FuJ3QgY291bnQgb24galF1ZXJ5IGJlaW5nIGF2YWlsYWJsZSwgc28gd2UgaW1wbGVtZW50IG91ciBvd24KICAvLyB2ZXJzaW9uIGlmIG5lY2Vzc2FyeS4KICBmdW5jdGlvbiBxdWVyeVNlbGVjdG9yQWxsKHNjb3BlLCBzZWxlY3RvcikgewogICAgaWYgKHR5cGVvZihqUXVlcnkpICE9PSAidW5kZWZpbmVkIiAmJiBzY29wZSBpbnN0YW5jZW9mIGpRdWVyeSkgewogICAgICByZXR1cm4gc2NvcGUuZmluZChzZWxlY3Rvcik7CiAgICB9CiAgICBpZiAoc2NvcGUucXVlcnlTZWxlY3RvckFsbCkgewogICAgICByZXR1cm4gc2NvcGUucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBhc0FycmF5KHZhbHVlKSB7CiAgICBpZiAodmFsdWUgPT09IG51bGwpCiAgICAgIHJldHVybiBbXTsKICAgIGlmICgkLmlzQXJyYXkodmFsdWUpKQogICAgICByZXR1cm4gdmFsdWU7CiAgICByZXR1cm4gW3ZhbHVlXTsKICB9CgogIC8vIEltcGxlbWVudCBqUXVlcnkncyBleHRlbmQKICBmdW5jdGlvbiBleHRlbmQodGFyZ2V0IC8qLCAuLi4gKi8pIHsKICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpIHsKICAgICAgcmV0dXJuIHRhcmdldDsKICAgIH0KICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07CiAgICAgIGZvciAodmFyIHByb3AgaW4gc291cmNlKSB7CiAgICAgICAgaWYgKHNvdXJjZS5oYXNPd25Qcm9wZXJ0eShwcm9wKSkgewogICAgICAgICAgdGFyZ2V0W3Byb3BdID0gc291cmNlW3Byb3BdOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIHRhcmdldDsKICB9CgogIC8vIElFOCBkb2Vzbid0IHN1cHBvcnQgQXJyYXkuZm9yRWFjaC4KICBmdW5jdGlvbiBmb3JFYWNoKHZhbHVlcywgY2FsbGJhY2ssIHRoaXNBcmcpIHsKICAgIGlmICh2YWx1ZXMuZm9yRWFjaCkgewogICAgICB2YWx1ZXMuZm9yRWFjaChjYWxsYmFjaywgdGhpc0FyZyk7CiAgICB9IGVsc2UgewogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykgewogICAgICAgIGNhbGxiYWNrLmNhbGwodGhpc0FyZywgdmFsdWVzW2ldLCBpLCB2YWx1ZXMpOwogICAgICB9CiAgICB9CiAgfQoKICAvLyBSZXBsYWNlcyB0aGUgc3BlY2lmaWVkIG1ldGhvZCB3aXRoIHRoZSByZXR1cm4gdmFsdWUgb2YgZnVuY1NvdXJjZS4KICAvLwogIC8vIE5vdGUgdGhhdCBmdW5jU291cmNlIHNob3VsZCBub3QgQkUgdGhlIG5ldyBtZXRob2QsIGl0IHNob3VsZCBiZSBhIGZ1bmN0aW9uCiAgLy8gdGhhdCBSRVRVUk5TIHRoZSBuZXcgbWV0aG9kLiBmdW5jU291cmNlIHJlY2VpdmVzIGEgc2luZ2xlIGFyZ3VtZW50IHRoYXQgaXMKICAvLyB0aGUgb3ZlcnJpZGRlbiBtZXRob2QsIGl0IGNhbiBiZSBjYWxsZWQgZnJvbSB0aGUgbmV3IG1ldGhvZC4gVGhlIG92ZXJyaWRkZW4KICAvLyBtZXRob2QgY2FuIGJlIGNhbGxlZCBsaWtlIGEgcmVndWxhciBmdW5jdGlvbiwgaXQgaGFzIHRoZSB0YXJnZXQgcGVybWFuZW50bHkKICAvLyBib3VuZCB0byBpdCBzbyAidGhpcyIgd2lsbCB3b3JrIGNvcnJlY3RseS4KICBmdW5jdGlvbiBvdmVycmlkZU1ldGhvZCh0YXJnZXQsIG1ldGhvZE5hbWUsIGZ1bmNTb3VyY2UpIHsKICAgIHZhciBzdXBlckZ1bmMgPSB0YXJnZXRbbWV0aG9kTmFtZV0gfHwgZnVuY3Rpb24oKSB7fTsKICAgIHZhciBzdXBlckZ1bmNCb3VuZCA9IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gc3VwZXJGdW5jLmFwcGx5KHRhcmdldCwgYXJndW1lbnRzKTsKICAgIH07CiAgICB0YXJnZXRbbWV0aG9kTmFtZV0gPSBmdW5jU291cmNlKHN1cGVyRnVuY0JvdW5kKTsKICB9CgogIC8vIEFkZCBhIG1ldGhvZCB0byBkZWxlZ2F0b3IgdGhhdCwgd2hlbiBpbnZva2VkLCBjYWxscwogIC8vIGRlbGVnYXRlZS5tZXRob2ROYW1lLiBJZiB0aGVyZSBpcyBubyBzdWNoIG1ldGhvZCBvbgogIC8vIHRoZSBkZWxlZ2F0ZWUsIGJ1dCB0aGVyZSB3YXMgb25lIG9uIGRlbGVnYXRvciBiZWZvcmUKICAvLyBkZWxlZ2F0ZU1ldGhvZCB3YXMgY2FsbGVkLCB0aGVuIHRoZSBvcmlnaW5hbCB2ZXJzaW9uCiAgLy8gaXMgaW52b2tlZCBpbnN0ZWFkLgogIC8vIEZvciBleGFtcGxlOgogIC8vCiAgLy8gdmFyIGEgPSB7CiAgLy8gICBtZXRob2QxOiBmdW5jdGlvbigpIHsgY29uc29sZS5sb2coJ2ExJyk7IH0KICAvLyAgIG1ldGhvZDI6IGZ1bmN0aW9uKCkgeyBjb25zb2xlLmxvZygnYTInKTsgfQogIC8vIH07CiAgLy8gdmFyIGIgPSB7CiAgLy8gICBtZXRob2QxOiBmdW5jdGlvbigpIHsgY29uc29sZS5sb2coJ2IxJyk7IH0KICAvLyB9OwogIC8vIGRlbGVnYXRlTWV0aG9kKGEsIGIsICJtZXRob2QxIik7CiAgLy8gZGVsZWdhdGVNZXRob2QoYSwgYiwgIm1ldGhvZDIiKTsKICAvLyBhLm1ldGhvZDEoKTsKICAvLyBhLm1ldGhvZDIoKTsKICAvLwogIC8vIFRoZSBvdXRwdXQgd291bGQgYmUgImIxIiwgImEyIi4KICBmdW5jdGlvbiBkZWxlZ2F0ZU1ldGhvZChkZWxlZ2F0b3IsIGRlbGVnYXRlZSwgbWV0aG9kTmFtZSkgewogICAgdmFyIGluaGVyaXRlZCA9IGRlbGVnYXRvclttZXRob2ROYW1lXTsKICAgIGRlbGVnYXRvclttZXRob2ROYW1lXSA9IGZ1bmN0aW9uKCkgewogICAgICB2YXIgdGFyZ2V0ID0gZGVsZWdhdGVlOwogICAgICB2YXIgbWV0aG9kID0gZGVsZWdhdGVlW21ldGhvZE5hbWVdOwoKICAgICAgLy8gVGhlIG1ldGhvZCBkb2Vzbid0IGV4aXN0IG9uIHRoZSBkZWxlZ2F0ZWUuIEluc3RlYWQsCiAgICAgIC8vIGNhbGwgdGhlIG1ldGhvZCBvbiB0aGUgZGVsZWdhdG9yLCBpZiBpdCBleGlzdHMuCiAgICAgIGlmICghbWV0aG9kKSB7CiAgICAgICAgdGFyZ2V0ID0gZGVsZWdhdG9yOwogICAgICAgIG1ldGhvZCA9IGluaGVyaXRlZDsKICAgICAgfQoKICAgICAgaWYgKG1ldGhvZCkgewogICAgICAgIHJldHVybiBtZXRob2QuYXBwbHkodGFyZ2V0LCBhcmd1bWVudHMpOwogICAgICB9CiAgICB9OwogIH0KCiAgLy8gSW1wbGVtZW50IGEgdmFndWUgZmFjc2ltaWxpZSBvZiBqUXVlcnkncyBkYXRhIG1ldGhvZAogIGZ1bmN0aW9uIGVsZW1lbnREYXRhKGVsLCBuYW1lLCB2YWx1ZSkgewogICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMikgewogICAgICByZXR1cm4gZWxbImh0bWx3aWRnZXRfZGF0YV8iICsgbmFtZV07CiAgICB9IGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMykgewogICAgICBlbFsiaHRtbHdpZGdldF9kYXRhXyIgKyBuYW1lXSA9IHZhbHVlOwogICAgICByZXR1cm4gZWw7CiAgICB9IGVsc2UgewogICAgICB0aHJvdyBuZXcgRXJyb3IoIldyb25nIG51bWJlciBvZiBhcmd1bWVudHMgZm9yIGVsZW1lbnREYXRhOiAiICsKICAgICAgICBhcmd1bWVudHMubGVuZ3RoKTsKICAgIH0KICB9CgogIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzQ0NjE3MC9lc2NhcGUtc3RyaW5nLWZvci11c2UtaW4tamF2YXNjcmlwdC1yZWdleAogIGZ1bmN0aW9uIGVzY2FwZVJlZ0V4cChzdHIpIHsKICAgIHJldHVybiBzdHIucmVwbGFjZSgvW1wtXFtcXVwvXHtcfVwoXClcKlwrXD9cLlxcXF5cJFx8XS9nLCAiXFwkJiIpOwogIH0KCiAgZnVuY3Rpb24gaGFzQ2xhc3MoZWwsIGNsYXNzTmFtZSkgewogICAgdmFyIHJlID0gbmV3IFJlZ0V4cCgiXFxiIiArIGVzY2FwZVJlZ0V4cChjbGFzc05hbWUpICsgIlxcYiIpOwogICAgcmV0dXJuIHJlLnRlc3QoZWwuY2xhc3NOYW1lKTsKICB9CgogIC8vIGVsZW1lbnRzIC0gYXJyYXkgKG9yIGFycmF5LWxpa2Ugb2JqZWN0KSBvZiBIVE1MIGVsZW1lbnRzCiAgLy8gY2xhc3NOYW1lIC0gY2xhc3MgbmFtZSB0byB0ZXN0IGZvcgogIC8vIGluY2x1ZGUgLSBpZiB0cnVlLCBvbmx5IHJldHVybiBlbGVtZW50cyB3aXRoIGdpdmVuIGNsYXNzTmFtZTsKICAvLyAgIGlmIGZhbHNlLCBvbmx5IHJldHVybiBlbGVtZW50cyAqd2l0aG91dCogZ2l2ZW4gY2xhc3NOYW1lCiAgZnVuY3Rpb24gZmlsdGVyQnlDbGFzcyhlbGVtZW50cywgY2xhc3NOYW1lLCBpbmNsdWRlKSB7CiAgICB2YXIgcmVzdWx0cyA9IFtdOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykgewogICAgICBpZiAoaGFzQ2xhc3MoZWxlbWVudHNbaV0sIGNsYXNzTmFtZSkgPT0gaW5jbHVkZSkKICAgICAgICByZXN1bHRzLnB1c2goZWxlbWVudHNbaV0pOwogICAgfQogICAgcmV0dXJuIHJlc3VsdHM7CiAgfQoKICBmdW5jdGlvbiBvbihvYmosIGV2ZW50TmFtZSwgZnVuYykgewogICAgaWYgKG9iai5hZGRFdmVudExpc3RlbmVyKSB7CiAgICAgIG9iai5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgZnVuYywgZmFsc2UpOwogICAgfSBlbHNlIGlmIChvYmouYXR0YWNoRXZlbnQpIHsKICAgICAgb2JqLmF0dGFjaEV2ZW50KGV2ZW50TmFtZSwgZnVuYyk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBvZmYob2JqLCBldmVudE5hbWUsIGZ1bmMpIHsKICAgIGlmIChvYmoucmVtb3ZlRXZlbnRMaXN0ZW5lcikKICAgICAgb2JqLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBmdW5jLCBmYWxzZSk7CiAgICBlbHNlIGlmIChvYmouZGV0YWNoRXZlbnQpIHsKICAgICAgb2JqLmRldGFjaEV2ZW50KGV2ZW50TmFtZSwgZnVuYyk7CiAgICB9CiAgfQoKICAvLyBUcmFuc2xhdGUgYXJyYXkgb2YgdmFsdWVzIHRvIHRvcC9yaWdodC9ib3R0b20vbGVmdCwgYXMgdXN1YWwgd2l0aAogIC8vIHRoZSAicGFkZGluZyIgQ1NTIHByb3BlcnR5CiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL3BhZGRpbmcKICBmdW5jdGlvbiB1bnBhY2tQYWRkaW5nKHZhbHVlKSB7CiAgICBpZiAodHlwZW9mKHZhbHVlKSA9PT0gIm51bWJlciIpCiAgICAgIHZhbHVlID0gW3ZhbHVlXTsKICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDEpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMF0sIGJvdHRvbTogdmFsdWVbMF0sIGxlZnQ6IHZhbHVlWzBdfTsKICAgIH0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDIpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMV0sIGJvdHRvbTogdmFsdWVbMF0sIGxlZnQ6IHZhbHVlWzFdfTsKICAgIH0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDMpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMV0sIGJvdHRvbTogdmFsdWVbMl0sIGxlZnQ6IHZhbHVlWzFdfTsKICAgIH0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDQpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMV0sIGJvdHRvbTogdmFsdWVbMl0sIGxlZnQ6IHZhbHVlWzNdfTsKICAgIH0KICB9CgogIC8vIENvbnZlcnQgYW4gdW5wYWNrZWQgcGFkZGluZyBvYmplY3QgdG8gYSBDU1MgdmFsdWUKICBmdW5jdGlvbiBwYWRkaW5nVG9Dc3MocGFkZGluZ09iaikgewogICAgcmV0dXJuIHBhZGRpbmdPYmoudG9wICsgInB4ICIgKyBwYWRkaW5nT2JqLnJpZ2h0ICsgInB4ICIgKyBwYWRkaW5nT2JqLmJvdHRvbSArICJweCAiICsgcGFkZGluZ09iai5sZWZ0ICsgInB4IjsKICB9CgogIC8vIE1ha2VzIGEgbnVtYmVyIHN1aXRhYmxlIGZvciBDU1MKICBmdW5jdGlvbiBweCh4KSB7CiAgICBpZiAodHlwZW9mKHgpID09PSAibnVtYmVyIikKICAgICAgcmV0dXJuIHggKyAicHgiOwogICAgZWxzZQogICAgICByZXR1cm4geDsKICB9CgogIC8vIFJldHJpZXZlcyBydW50aW1lIHdpZGdldCBzaXppbmcgaW5mb3JtYXRpb24gZm9yIGFuIGVsZW1lbnQuCiAgLy8gVGhlIHJldHVybiB2YWx1ZSBpcyBlaXRoZXIgbnVsbCwgb3IgYW4gb2JqZWN0IHdpdGggZmlsbCwgcGFkZGluZywKICAvLyBkZWZhdWx0V2lkdGgsIGRlZmF1bHRIZWlnaHQgZmllbGRzLgogIGZ1bmN0aW9uIHNpemluZ1BvbGljeShlbCkgewogICAgdmFyIHNpemluZ0VsID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcigic2NyaXB0W2RhdGEtZm9yPSciICsgZWwuaWQgKyAiJ11bdHlwZT0nYXBwbGljYXRpb24vaHRtbHdpZGdldC1zaXppbmcnXSIpOwogICAgaWYgKCFzaXppbmdFbCkKICAgICAgcmV0dXJuIG51bGw7CiAgICB2YXIgc3AgPSBKU09OLnBhcnNlKHNpemluZ0VsLnRleHRDb250ZW50IHx8IHNpemluZ0VsLnRleHQgfHwgInt9Iik7CiAgICBpZiAodmlld2VyTW9kZSkgewogICAgICByZXR1cm4gc3Audmlld2VyOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIHNwLmJyb3dzZXI7CiAgICB9CiAgfQoKICAvLyBAcGFyYW0gdGFza3MgQXJyYXkgb2Ygc3RyaW5ncyAob3IgZmFsc3kgdmFsdWUsIGluIHdoaWNoIGNhc2Ugbm8tb3ApLgogIC8vICAgRWFjaCBlbGVtZW50IG11c3QgYmUgYSB2YWxpZCBKYXZhU2NyaXB0IGV4cHJlc3Npb24gdGhhdCB5aWVsZHMgYQogIC8vICAgZnVuY3Rpb24uIE9yLCBjYW4gYmUgYW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoICJjb2RlIiBhbmQgImRhdGEiCiAgLy8gICBwcm9wZXJ0aWVzOyBpbiB0aGlzIGNhc2UsIHRoZSAiY29kZSIgcHJvcGVydHkgc2hvdWxkIGJlIGEgc3RyaW5nCiAgLy8gICBvZiBKUyB0aGF0J3MgYW4gZXhwciB0aGF0IHlpZWxkcyBhIGZ1bmN0aW9uLCBhbmQgImRhdGEiIHNob3VsZCBiZQogIC8vICAgYW4gb2JqZWN0IHRoYXQgd2lsbCBiZSBhZGRlZCBhcyBhbiBhZGRpdGlvbmFsIGFyZ3VtZW50IHdoZW4gdGhhdAogIC8vICAgZnVuY3Rpb24gaXMgY2FsbGVkLgogIC8vIEBwYXJhbSB0YXJnZXQgVGhlIG9iamVjdCB0aGF0IHdpbGwgYmUgInRoaXMiIGZvciBlYWNoIGZ1bmN0aW9uCiAgLy8gICBleGVjdXRpb24uCiAgLy8gQHBhcmFtIGFyZ3MgQXJyYXkgb2YgYXJndW1lbnRzIHRvIGJlIHBhc3NlZCB0byB0aGUgZnVuY3Rpb25zLiAoVGhlCiAgLy8gICBzYW1lIGFyZ3VtZW50cyB3aWxsIGJlIHBhc3NlZCB0byBhbGwgZnVuY3Rpb25zLikKICBmdW5jdGlvbiBldmFsQW5kUnVuKHRhc2tzLCB0YXJnZXQsIGFyZ3MpIHsKICAgIGlmICh0YXNrcykgewogICAgICBmb3JFYWNoKHRhc2tzLCBmdW5jdGlvbih0YXNrKSB7CiAgICAgICAgdmFyIHRoZXNlQXJncyA9IGFyZ3M7CiAgICAgICAgaWYgKHR5cGVvZih0YXNrKSA9PT0gIm9iamVjdCIpIHsKICAgICAgICAgIHRoZXNlQXJncyA9IHRoZXNlQXJncy5jb25jYXQoW3Rhc2suZGF0YV0pOwogICAgICAgICAgdGFzayA9IHRhc2suY29kZTsKICAgICAgICB9CiAgICAgICAgdmFyIHRhc2tGdW5jID0gZXZhbCgiKCIgKyB0YXNrICsgIikiKTsKICAgICAgICBpZiAodHlwZW9mKHRhc2tGdW5jKSAhPT0gImZ1bmN0aW9uIikgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJUYXNrIG11c3QgYmUgYSBmdW5jdGlvbiEgU291cmNlOlxuIiArIHRhc2spOwogICAgICAgIH0KICAgICAgICB0YXNrRnVuYy5hcHBseSh0YXJnZXQsIHRoZXNlQXJncyk7CiAgICAgIH0pOwogICAgfQogIH0KCiAgZnVuY3Rpb24gaW5pdFNpemluZyhlbCkgewogICAgdmFyIHNpemluZyA9IHNpemluZ1BvbGljeShlbCk7CiAgICBpZiAoIXNpemluZykKICAgICAgcmV0dXJuOwoKICAgIHZhciBjZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaHRtbHdpZGdldF9jb250YWluZXIiKTsKICAgIGlmICghY2VsKQogICAgICByZXR1cm47CgogICAgaWYgKHR5cGVvZihzaXppbmcucGFkZGluZykgIT09ICJ1bmRlZmluZWQiKSB7CiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUubWFyZ2luID0gIjAiOwogICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLnBhZGRpbmcgPSBwYWRkaW5nVG9Dc3ModW5wYWNrUGFkZGluZyhzaXppbmcucGFkZGluZykpOwogICAgfQoKICAgIGlmIChzaXppbmcuZmlsbCkgewogICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93ID0gImhpZGRlbiI7CiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUud2lkdGggPSAiMTAwJSI7CiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuaGVpZ2h0ID0gIjEwMCUiOwogICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUud2lkdGggPSAiMTAwJSI7CiAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5oZWlnaHQgPSAiMTAwJSI7CiAgICAgIGlmIChjZWwpIHsKICAgICAgICBjZWwuc3R5bGUucG9zaXRpb24gPSAiYWJzb2x1dGUiOwogICAgICAgIHZhciBwYWQgPSB1bnBhY2tQYWRkaW5nKHNpemluZy5wYWRkaW5nKTsKICAgICAgICBjZWwuc3R5bGUudG9wID0gcGFkLnRvcCArICJweCI7CiAgICAgICAgY2VsLnN0eWxlLnJpZ2h0ID0gcGFkLnJpZ2h0ICsgInB4IjsKICAgICAgICBjZWwuc3R5bGUuYm90dG9tID0gcGFkLmJvdHRvbSArICJweCI7CiAgICAgICAgY2VsLnN0eWxlLmxlZnQgPSBwYWQubGVmdCArICJweCI7CiAgICAgICAgZWwuc3R5bGUud2lkdGggPSAiMTAwJSI7CiAgICAgICAgZWwuc3R5bGUuaGVpZ2h0ID0gIjEwMCUiOwogICAgICB9CgogICAgICByZXR1cm4gewogICAgICAgIGdldFdpZHRoOiBmdW5jdGlvbigpIHsgcmV0dXJuIGNlbC5vZmZzZXRXaWR0aDsgfSwKICAgICAgICBnZXRIZWlnaHQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gY2VsLm9mZnNldEhlaWdodDsgfQogICAgICB9OwoKICAgIH0gZWxzZSB7CiAgICAgIGVsLnN0eWxlLndpZHRoID0gcHgoc2l6aW5nLndpZHRoKTsKICAgICAgZWwuc3R5bGUuaGVpZ2h0ID0gcHgoc2l6aW5nLmhlaWdodCk7CgogICAgICByZXR1cm4gewogICAgICAgIGdldFdpZHRoOiBmdW5jdGlvbigpIHsgcmV0dXJuIGVsLm9mZnNldFdpZHRoOyB9LAogICAgICAgIGdldEhlaWdodDogZnVuY3Rpb24oKSB7IHJldHVybiBlbC5vZmZzZXRIZWlnaHQ7IH0KICAgICAgfTsKICAgIH0KICB9CgogIC8vIERlZmF1bHQgaW1wbGVtZW50YXRpb25zIGZvciBtZXRob2RzCiAgdmFyIGRlZmF1bHRzID0gewogICAgZmluZDogZnVuY3Rpb24oc2NvcGUpIHsKICAgICAgcmV0dXJuIHF1ZXJ5U2VsZWN0b3JBbGwoc2NvcGUsICIuIiArIHRoaXMubmFtZSk7CiAgICB9LAogICAgcmVuZGVyRXJyb3I6IGZ1bmN0aW9uKGVsLCBlcnIpIHsKICAgICAgdmFyICRlbCA9ICQoZWwpOwoKICAgICAgdGhpcy5jbGVhckVycm9yKGVsKTsKCiAgICAgIC8vIEFkZCBhbGwgdGhlc2UgZXJyb3IgY2xhc3NlcywgYXMgU2hpbnkgZG9lcwogICAgICB2YXIgZXJyQ2xhc3MgPSAic2hpbnktb3V0cHV0LWVycm9yIjsKICAgICAgaWYgKGVyci50eXBlICE9PSBudWxsKSB7CiAgICAgICAgLy8gdXNlIHRoZSBjbGFzc2VzIG9mIHRoZSBlcnJvciBjb25kaXRpb24gYXMgQ1NTIGNsYXNzIG5hbWVzCiAgICAgICAgZXJyQ2xhc3MgPSBlcnJDbGFzcyArICIgIiArICQubWFwKGFzQXJyYXkoZXJyLnR5cGUpLCBmdW5jdGlvbih0eXBlKSB7CiAgICAgICAgICByZXR1cm4gZXJyQ2xhc3MgKyAiLSIgKyB0eXBlOwogICAgICAgIH0pLmpvaW4oIiAiKTsKICAgICAgfQogICAgICBlcnJDbGFzcyA9IGVyckNsYXNzICsgIiBodG1sd2lkZ2V0cy1lcnJvciI7CgogICAgICAvLyBJcyBlbCBpbmxpbmUgb3IgYmxvY2s/IElmIGlubGluZSBvciBpbmxpbmUtYmxvY2ssIGp1c3QgZGlzcGxheTpub25lIGl0CiAgICAgIC8vIGFuZCBhZGQgYW4gaW5saW5lIGVycm9yLgogICAgICB2YXIgZGlzcGxheSA9ICRlbC5jc3MoImRpc3BsYXkiKTsKICAgICAgJGVsLmRhdGEoInJlc3RvcmUtZGlzcGxheS1tb2RlIiwgZGlzcGxheSk7CgogICAgICBpZiAoZGlzcGxheSA9PT0gImlubGluZSIgfHwgZGlzcGxheSA9PT0gImlubGluZS1ibG9jayIpIHsKICAgICAgICAkZWwuaGlkZSgpOwogICAgICAgIGlmIChlcnIubWVzc2FnZSAhPT0gIiIpIHsKICAgICAgICAgIHZhciBlcnJvclNwYW4gPSAkKCI8c3Bhbj4iKS5hZGRDbGFzcyhlcnJDbGFzcyk7CiAgICAgICAgICBlcnJvclNwYW4udGV4dChlcnIubWVzc2FnZSk7CiAgICAgICAgICAkZWwuYWZ0ZXIoZXJyb3JTcGFuKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoZGlzcGxheSA9PT0gImJsb2NrIikgewogICAgICAgIC8vIElmIGJsb2NrLCBhZGQgYW4gZXJyb3IganVzdCBhZnRlciB0aGUgZWwsIHNldCB2aXNpYmlsaXR5Om5vbmUgb24gdGhlCiAgICAgICAgLy8gZWwsIGFuZCBwb3NpdGlvbiB0aGUgZXJyb3IgdG8gYmUgb24gdG9wIG9mIHRoZSBlbC4KICAgICAgICAvLyBNYXJrIGl0IHdpdGggYSB1bmlxdWUgSUQgYW5kIENTUyBjbGFzcyBzbyB3ZSBjYW4gcmVtb3ZlIGl0IGxhdGVyLgogICAgICAgICRlbC5jc3MoInZpc2liaWxpdHkiLCAiaGlkZGVuIik7CiAgICAgICAgaWYgKGVyci5tZXNzYWdlICE9PSAiIikgewogICAgICAgICAgdmFyIGVycm9yRGl2ID0gJCgiPGRpdj4iKS5hZGRDbGFzcyhlcnJDbGFzcykuY3NzKCJwb3NpdGlvbiIsICJhYnNvbHV0ZSIpCiAgICAgICAgICAgIC5jc3MoInRvcCIsIGVsLm9mZnNldFRvcCkKICAgICAgICAgICAgLmNzcygibGVmdCIsIGVsLm9mZnNldExlZnQpCiAgICAgICAgICAgIC8vIHNldHRpbmcgd2lkdGggY2FuIHB1c2ggb3V0IHRoZSBwYWdlIHNpemUsIGZvcmNpbmcgb3RoZXJ3aXNlCiAgICAgICAgICAgIC8vIHVubmVjZXNzYXJ5IHNjcm9sbGJhcnMgdG8gYXBwZWFyIGFuZCBtYWtpbmcgaXQgaW1wb3NzaWJsZSBmb3IKICAgICAgICAgICAgLy8gdGhlIGVsZW1lbnQgdG8gc2hyaW5rOyBzbyB1c2UgbWF4LXdpZHRoIGluc3RlYWQKICAgICAgICAgICAgLmNzcygibWF4V2lkdGgiLCBlbC5vZmZzZXRXaWR0aCkKICAgICAgICAgICAgLmNzcygiaGVpZ2h0IiwgZWwub2Zmc2V0SGVpZ2h0KTsKICAgICAgICAgIGVycm9yRGl2LnRleHQoZXJyLm1lc3NhZ2UpOwogICAgICAgICAgJGVsLmFmdGVyKGVycm9yRGl2KTsKCiAgICAgICAgICAvLyBSZWFsbHkgZHVtYiB3YXkgdG8ga2VlcCB0aGUgc2l6ZS9wb3NpdGlvbiBvZiB0aGUgZXJyb3IgaW4gc3luYyB3aXRoCiAgICAgICAgICAvLyB0aGUgcGFyZW50IGVsZW1lbnQgYXMgdGhlIHdpbmRvdyBpcyByZXNpemVkIG9yIHdoYXRldmVyLgogICAgICAgICAgdmFyIGludElkID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGlmICghZXJyb3JEaXZbMF0ucGFyZW50RWxlbWVudCkgewogICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50SWQpOwogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICBlcnJvckRpdgogICAgICAgICAgICAgIC5jc3MoInRvcCIsIGVsLm9mZnNldFRvcCkKICAgICAgICAgICAgICAuY3NzKCJsZWZ0IiwgZWwub2Zmc2V0TGVmdCkKICAgICAgICAgICAgICAuY3NzKCJtYXhXaWR0aCIsIGVsLm9mZnNldFdpZHRoKQogICAgICAgICAgICAgIC5jc3MoImhlaWdodCIsIGVsLm9mZnNldEhlaWdodCk7CiAgICAgICAgICB9LCA1MDApOwogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgIGNsZWFyRXJyb3I6IGZ1bmN0aW9uKGVsKSB7CiAgICAgIHZhciAkZWwgPSAkKGVsKTsKICAgICAgdmFyIGRpc3BsYXkgPSAkZWwuZGF0YSgicmVzdG9yZS1kaXNwbGF5LW1vZGUiKTsKICAgICAgJGVsLmRhdGEoInJlc3RvcmUtZGlzcGxheS1tb2RlIiwgbnVsbCk7CgogICAgICBpZiAoZGlzcGxheSA9PT0gImlubGluZSIgfHwgZGlzcGxheSA9PT0gImlubGluZS1ibG9jayIpIHsKICAgICAgICBpZiAoZGlzcGxheSkKICAgICAgICAgICRlbC5jc3MoImRpc3BsYXkiLCBkaXNwbGF5KTsKICAgICAgICAkKGVsLm5leHRTaWJsaW5nKS5maWx0ZXIoIi5odG1sd2lkZ2V0cy1lcnJvciIpLnJlbW92ZSgpOwogICAgICB9IGVsc2UgaWYgKGRpc3BsYXkgPT09ICJibG9jayIpewogICAgICAgICRlbC5jc3MoInZpc2liaWxpdHkiLCAiaW5oZXJpdCIpOwogICAgICAgICQoZWwubmV4dFNpYmxpbmcpLmZpbHRlcigiLmh0bWx3aWRnZXRzLWVycm9yIikucmVtb3ZlKCk7CiAgICAgIH0KICAgIH0sCiAgICBzaXppbmc6IHt9CiAgfTsKCiAgLy8gQ2FsbGVkIGJ5IHdpZGdldCBiaW5kaW5ncyB0byByZWdpc3RlciBhIG5ldyB0eXBlIG9mIHdpZGdldC4gVGhlIGRlZmluaXRpb24KICAvLyBvYmplY3QgY2FuIGNvbnRhaW4gdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOgogIC8vIC0gbmFtZSAocmVxdWlyZWQpIC0gQSBzdHJpbmcgaW5kaWNhdGluZyB0aGUgYmluZGluZyBuYW1lLCB3aGljaCB3aWxsIGJlCiAgLy8gICB1c2VkIGJ5IGRlZmF1bHQgYXMgdGhlIENTUyBjbGFzc25hbWUgdG8gbG9vayBmb3IuCiAgLy8gLSBpbml0aWFsaXplIChvcHRpb25hbCkgLSBBIGZ1bmN0aW9uKGVsKSB0aGF0IHdpbGwgYmUgY2FsbGVkIG9uY2UgcGVyCiAgLy8gICB3aWRnZXQgZWxlbWVudDsgaWYgYSB2YWx1ZSBpcyByZXR1cm5lZCwgaXQgd2lsbCBiZSBwYXNzZWQgYXMgdGhlIHRoaXJkCiAgLy8gICB2YWx1ZSB0byByZW5kZXJWYWx1ZS4KICAvLyAtIHJlbmRlclZhbHVlIChyZXF1aXJlZCkgLSBBIGZ1bmN0aW9uKGVsLCBkYXRhLCBpbml0VmFsdWUpIHRoYXQgd2lsbCBiZQogIC8vICAgY2FsbGVkIHdpdGggZGF0YS4gU3RhdGljIGNvbnRleHRzIHdpbGwgY2F1c2UgdGhpcyB0byBiZSBjYWxsZWQgb25jZSBwZXIKICAvLyAgIGVsZW1lbnQ7IFNoaW55IGFwcHMgd2lsbCBjYXVzZSB0aGlzIHRvIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBwZXIKICAvLyAgIGVsZW1lbnQsIGFzIHRoZSBkYXRhIGNoYW5nZXMuCiAgd2luZG93LkhUTUxXaWRnZXRzLndpZGdldCA9IGZ1bmN0aW9uKGRlZmluaXRpb24pIHsKICAgIGlmICghZGVmaW5pdGlvbi5uYW1lKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiV2lkZ2V0IG11c3QgaGF2ZSBhIG5hbWUiKTsKICAgIH0KICAgIGlmICghZGVmaW5pdGlvbi50eXBlKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiV2lkZ2V0IG11c3QgaGF2ZSBhIHR5cGUiKTsKICAgIH0KICAgIC8vIEN1cnJlbnRseSB3ZSBvbmx5IHN1cHBvcnQgb3V0cHV0IHdpZGdldHMKICAgIGlmIChkZWZpbml0aW9uLnR5cGUgIT09ICJvdXRwdXQiKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHdpZGdldCB0eXBlICciICsgZGVmaW5pdGlvbi50eXBlICsgIiciKTsKICAgIH0KICAgIC8vIFRPRE86IFZlcmlmeSB0aGF0IC5uYW1lIGlzIGEgdmFsaWQgQ1NTIGNsYXNzbmFtZQoKICAgIC8vIFN1cHBvcnQgbmV3LXN0eWxlIGluc3RhbmNlLWJvdW5kIGRlZmluaXRpb25zLiBPbGQtc3R5bGUgY2xhc3MtYm91bmQKICAgIC8vIGRlZmluaXRpb25zIGhhdmUgb25lIHdpZGdldCAib2JqZWN0IiBwZXIgd2lkZ2V0IHBlciB0eXBlL2NsYXNzIG9mCiAgICAvLyB3aWRnZXQ7IHRoZSByZW5kZXJWYWx1ZSBhbmQgcmVzaXplIG1ldGhvZHMgb24gc3VjaCB3aWRnZXQgb2JqZWN0cwogICAgLy8gdGFrZSBlbCBhbmQgaW5zdGFuY2UgYXJndW1lbnRzLCBiZWNhdXNlIHRoZSB3aWRnZXQgb2JqZWN0IGNhbid0CiAgICAvLyBzdG9yZSB0aGVtLiBOZXctc3R5bGUgaW5zdGFuY2UtYm91bmQgZGVmaW5pdGlvbnMgaGF2ZSBvbmUgd2lkZ2V0CiAgICAvLyBvYmplY3QgcGVyIHdpZGdldCBpbnN0YW5jZTsgdGhlIGRlZmluaXRpb24gdGhhdCdzIHBhc3NlZCBpbiBkb2Vzbid0CiAgICAvLyBwcm92aWRlIHJlbmRlclZhbHVlIG9yIHJlc2l6ZSBtZXRob2RzIGF0IGFsbCwganVzdCB0aGUgc2luZ2xlIG1ldGhvZAogICAgLy8gICBmYWN0b3J5KGVsLCB3aWR0aCwgaGVpZ2h0KQogICAgLy8gd2hpY2ggcmV0dXJucyBhbiBvYmplY3QgdGhhdCBoYXMgcmVuZGVyVmFsdWUoeCkgYW5kIHJlc2l6ZSh3LCBoKS4KICAgIC8vIFRoaXMgZW5hYmxlcyBhIGZhciBtb3JlIG5hdHVyYWwgcHJvZ3JhbW1pbmcgc3R5bGUgZm9yIHRoZSB3aWRnZXQKICAgIC8vIGF1dGhvciwgd2hvIGNhbiBzdG9yZSBwZXItaW5zdGFuY2Ugc3RhdGUgdXNpbmcgZWl0aGVyIE9PLXN0eWxlCiAgICAvLyBpbnN0YW5jZSBmaWVsZHMgb3IgZnVuY3Rpb25hbC1zdHlsZSBjbG9zdXJlIHZhcmlhYmxlcyAoSSBndWVzcyB0aGlzCiAgICAvLyBpcyBpbiBjb250cmFzdCB0byB3aGF0IGNhbiBvbmx5IGJlIGNhbGxlZCBDLXN0eWxlIHBzZXVkby1PTyB3aGljaCBpcwogICAgLy8gd2hhdCB3ZSByZXF1aXJlZCBiZWZvcmUpLgogICAgaWYgKGRlZmluaXRpb24uZmFjdG9yeSkgewogICAgICBkZWZpbml0aW9uID0gY3JlYXRlTGVnYWN5RGVmaW5pdGlvbkFkYXB0ZXIoZGVmaW5pdGlvbik7CiAgICB9CgogICAgaWYgKCFkZWZpbml0aW9uLnJlbmRlclZhbHVlKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiV2lkZ2V0IG11c3QgaGF2ZSBhIHJlbmRlclZhbHVlIGZ1bmN0aW9uIik7CiAgICB9CgogICAgLy8gRm9yIHN0YXRpYyByZW5kZXJpbmcgKG5vbi1TaGlueSksIHVzZSBhIHNpbXBsZSB3aWRnZXQgcmVnaXN0cmF0aW9uCiAgICAvLyBzY2hlbWUuIFdlIGFsc28gdXNlIHRoaXMgc2NoZW1lIGZvciBTaGlueSBhcHBzL2RvY3VtZW50cyB0aGF0IGFsc28KICAgIC8vIGNvbnRhaW4gc3RhdGljIHdpZGdldHMuCiAgICB3aW5kb3cuSFRNTFdpZGdldHMud2lkZ2V0cyA9IHdpbmRvdy5IVE1MV2lkZ2V0cy53aWRnZXRzIHx8IFtdOwogICAgLy8gTWVyZ2UgZGVmYXVsdHMgaW50byB0aGUgZGVmaW5pdGlvbjsgZG9uJ3QgbXV0YXRlIHRoZSBvcmlnaW5hbCBkZWZpbml0aW9uLgogICAgdmFyIHN0YXRpY0JpbmRpbmcgPSBleHRlbmQoe30sIGRlZmF1bHRzLCBkZWZpbml0aW9uKTsKICAgIG92ZXJyaWRlTWV0aG9kKHN0YXRpY0JpbmRpbmcsICJmaW5kIiwgZnVuY3Rpb24oc3VwZXJmdW5jKSB7CiAgICAgIHJldHVybiBmdW5jdGlvbihzY29wZSkgewogICAgICAgIHZhciByZXN1bHRzID0gc3VwZXJmdW5jKHNjb3BlKTsKICAgICAgICAvLyBGaWx0ZXIgb3V0IFNoaW55IG91dHB1dHMsIHdlIG9ubHkgd2FudCB0aGUgc3RhdGljIGtpbmQKICAgICAgICByZXR1cm4gZmlsdGVyQnlDbGFzcyhyZXN1bHRzLCAiaHRtbC13aWRnZXQtb3V0cHV0IiwgZmFsc2UpOwogICAgICB9OwogICAgfSk7CiAgICB3aW5kb3cuSFRNTFdpZGdldHMud2lkZ2V0cy5wdXNoKHN0YXRpY0JpbmRpbmcpOwoKICAgIGlmIChzaGlueU1vZGUpIHsKICAgICAgLy8gU2hpbnkgaXMgcnVubmluZy4gUmVnaXN0ZXIgdGhlIGRlZmluaXRpb24gd2l0aCBhbiBvdXRwdXQgYmluZGluZy4KICAgICAgLy8gVGhlIGRlZmluaXRpb24gaXRzZWxmIHdpbGwgbm90IGJlIHRoZSBvdXRwdXQgYmluZGluZywgaW5zdGVhZAogICAgICAvLyB3ZSB3aWxsIG1ha2UgYW4gb3V0cHV0IGJpbmRpbmcgb2JqZWN0IHRoYXQgZGVsZWdhdGVzIHRvIHRoZQogICAgICAvLyBkZWZpbml0aW9uLiBUaGlzIGlzIGJlY2F1c2Ugd2UgZm9vbGlzaGx5IHVzZWQgdGhlIHNhbWUgbWV0aG9kCiAgICAgIC8vIG5hbWUgKHJlbmRlclZhbHVlKSBmb3IgaHRtbHdpZGdldHMgZGVmaW5pdGlvbiBhbmQgU2hpbnkgYmluZGluZ3MKICAgICAgLy8gYnV0IHRoZXkgYWN0dWFsbHkgaGF2ZSBxdWl0ZSBkaWZmZXJlbnQgc2VtYW50aWNzICh0aGUgU2hpbnkKICAgICAgLy8gYmluZGluZ3MgcmVjZWl2ZSBkYXRhIHRoYXQgaW5jbHVkZXMgbG90cyBvZiBtZXRhZGF0YSB0aGF0IGl0CiAgICAgIC8vIHN0cmlwcyBvZmYgYmVmb3JlIGNhbGxpbmcgaHRtbHdpZGdldHMgcmVuZGVyVmFsdWUpLiBXZSBjYW4ndAogICAgICAvLyBqdXN0IGlnbm9yZSB0aGUgZGlmZmVyZW5jZSBiZWNhdXNlIGluIHNvbWUgd2lkZ2V0cyBpdCdzIGhlbHBmdWwKICAgICAgLy8gdG8gY2FsbCB0aGlzLnJlbmRlclZhbHVlKCkgZnJvbSBpbnNpZGUgb2YgcmVzaXplKCksIGFuZCBpZgogICAgICAvLyB3ZSdyZSBub3QgZGVsZWdhdGluZywgdGhlbiB0aGF0IGNhbGwgd2lsbCBnbyB0byB0aGUgU2hpbnkKICAgICAgLy8gdmVyc2lvbiBpbnN0ZWFkIG9mIHRoZSBodG1sd2lkZ2V0cyB2ZXJzaW9uLgoKICAgICAgLy8gTWVyZ2UgZGVmYXVsdHMgd2l0aCBkZWZpbml0aW9uLCB3aXRob3V0IG11dGF0aW5nIGVpdGhlci4KICAgICAgdmFyIGJpbmRpbmdEZWYgPSBleHRlbmQoe30sIGRlZmF1bHRzLCBkZWZpbml0aW9uKTsKCiAgICAgIC8vIFRoaXMgb2JqZWN0IHdpbGwgYmUgb3VyIGFjdHVhbCBTaGlueSBiaW5kaW5nLgogICAgICB2YXIgc2hpbnlCaW5kaW5nID0gbmV3IFNoaW55Lk91dHB1dEJpbmRpbmcoKTsKCiAgICAgIC8vIFdpdGggYSBmZXcgZXhjZXB0aW9ucywgd2UnbGwgd2FudCB0byBzaW1wbHkgdXNlIHRoZSBiaW5kaW5nRGVmJ3MKICAgICAgLy8gdmVyc2lvbiBvZiBtZXRob2RzIGlmIHRoZXkgYXJlIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGZhbGwgYmFjayB0bwogICAgICAvLyBTaGlueSdzIGRlZmF1bHRzLiBOT1RFOiBJZiBTaGlueSdzIG91dHB1dCBiaW5kaW5ncyBnYWluIGFkZGl0aW9uYWwKICAgICAgLy8gbWV0aG9kcyBpbiB0aGUgZnV0dXJlLCBhbmQgd2Ugd2FudCB0aGVtIHRvIGJlIG92ZXJyaWRlYWJsZSBieQogICAgICAvLyBIVE1MV2lkZ2V0IGJpbmRpbmcgZGVmaW5pdGlvbnMsIHRoZW4gd2UnbGwgbmVlZCB0byBhZGQgdGhlbSB0byB0aGlzCiAgICAgIC8vIGxpc3QuCiAgICAgIGRlbGVnYXRlTWV0aG9kKHNoaW55QmluZGluZywgYmluZGluZ0RlZiwgImdldElkIik7CiAgICAgIGRlbGVnYXRlTWV0aG9kKHNoaW55QmluZGluZywgYmluZGluZ0RlZiwgIm9uVmFsdWVDaGFuZ2UiKTsKICAgICAgZGVsZWdhdGVNZXRob2Qoc2hpbnlCaW5kaW5nLCBiaW5kaW5nRGVmLCAib25WYWx1ZUVycm9yIik7CiAgICAgIGRlbGVnYXRlTWV0aG9kKHNoaW55QmluZGluZywgYmluZGluZ0RlZiwgInJlbmRlckVycm9yIik7CiAgICAgIGRlbGVnYXRlTWV0aG9kKHNoaW55QmluZGluZywgYmluZGluZ0RlZiwgImNsZWFyRXJyb3IiKTsKICAgICAgZGVsZWdhdGVNZXRob2Qoc2hpbnlCaW5kaW5nLCBiaW5kaW5nRGVmLCAic2hvd1Byb2dyZXNzIik7CgogICAgICAvLyBUaGUgZmluZCwgcmVuZGVyVmFsdWUsIGFuZCByZXNpemUgYXJlIGhhbmRsZWQgZGlmZmVyZW50bHksIGJlY2F1c2Ugd2UKICAgICAgLy8gd2FudCB0byBhY3R1YWxseSBkZWNvcmF0ZSB0aGUgYmVoYXZpb3Igb2YgdGhlIGJpbmRpbmdEZWYgbWV0aG9kcy4KCiAgICAgIHNoaW55QmluZGluZy5maW5kID0gZnVuY3Rpb24oc2NvcGUpIHsKICAgICAgICB2YXIgcmVzdWx0cyA9IGJpbmRpbmdEZWYuZmluZChzY29wZSk7CgogICAgICAgIC8vIE9ubHkgcmV0dXJuIGVsZW1lbnRzIHRoYXQgYXJlIFNoaW55IG91dHB1dHMsIG5vdCBzdGF0aWMgb25lcwogICAgICAgIHZhciBkeW5hbWljUmVzdWx0cyA9IHJlc3VsdHMuZmlsdGVyKCIuaHRtbC13aWRnZXQtb3V0cHV0Iik7CgogICAgICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCB3aGF0ZXZlciBjYXVzZWQgU2hpbnkgdG8gdGhpbmsgdGhlcmUgbWlnaHQgYmUKICAgICAgICAvLyBuZXcgZHluYW1pYyBvdXRwdXRzLCBhbHNvIGNhdXNlZCB0aGVyZSB0byBiZSBuZXcgc3RhdGljIG91dHB1dHMuCiAgICAgICAgLy8gU2luY2UgdGhlcmUgbWlnaHQgYmUgbG90cyBvZiBkaWZmZXJlbnQgaHRtbHdpZGdldHMgYmluZGluZ3MsIHdlCiAgICAgICAgLy8gc2NoZWR1bGUgZXhlY3V0aW9uIGZvciBsYXRlci0tbm8gbmVlZCB0byBzdGF0aWNSZW5kZXIgbXVsdGlwbGUKICAgICAgICAvLyB0aW1lcy4KICAgICAgICBpZiAocmVzdWx0cy5sZW5ndGggIT09IGR5bmFtaWNSZXN1bHRzLmxlbmd0aCkKICAgICAgICAgIHNjaGVkdWxlU3RhdGljUmVuZGVyKCk7CgogICAgICAgIHJldHVybiBkeW5hbWljUmVzdWx0czsKICAgICAgfTsKCiAgICAgIC8vIFdyYXAgcmVuZGVyVmFsdWUgdG8gaGFuZGxlIGluaXRpYWxpemF0aW9uLCB3aGljaCB1bmZvcnR1bmF0ZWx5IGlzbid0CiAgICAgIC8vIHN1cHBvcnRlZCBuYXRpdmVseSBieSBTaGlueSBhdCB0aGUgdGltZSBvZiB0aGlzIHdyaXRpbmcuCgogICAgICBzaGlueUJpbmRpbmcucmVuZGVyVmFsdWUgPSBmdW5jdGlvbihlbCwgZGF0YSkgewogICAgICAgIFNoaW55LnJlbmRlckRlcGVuZGVuY2llcyhkYXRhLmRlcHMpOwogICAgICAgIC8vIFJlc29sdmUgc3RyaW5ncyBtYXJrZWQgYXMgamF2YXNjcmlwdCBsaXRlcmFscyB0byBvYmplY3RzCiAgICAgICAgaWYgKCEoZGF0YS5ldmFscyBpbnN0YW5jZW9mIEFycmF5KSkgZGF0YS5ldmFscyA9IFtkYXRhLmV2YWxzXTsKICAgICAgICBmb3IgKHZhciBpID0gMDsgZGF0YS5ldmFscyAmJiBpIDwgZGF0YS5ldmFscy5sZW5ndGg7IGkrKykgewogICAgICAgICAgd2luZG93LkhUTUxXaWRnZXRzLmV2YWx1YXRlU3RyaW5nTWVtYmVyKGRhdGEueCwgZGF0YS5ldmFsc1tpXSk7CiAgICAgICAgfQogICAgICAgIGlmICghYmluZGluZ0RlZi5yZW5kZXJPbk51bGxWYWx1ZSkgewogICAgICAgICAgaWYgKGRhdGEueCA9PT0gbnVsbCkgewogICAgICAgICAgICBlbC5zdHlsZS52aXNpYmlsaXR5ID0gImhpZGRlbiI7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGVsLnN0eWxlLnZpc2liaWxpdHkgPSAiaW5oZXJpdCI7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICghZWxlbWVudERhdGEoZWwsICJpbml0aWFsaXplZCIpKSB7CiAgICAgICAgICBpbml0U2l6aW5nKGVsKTsKCiAgICAgICAgICBlbGVtZW50RGF0YShlbCwgImluaXRpYWxpemVkIiwgdHJ1ZSk7CiAgICAgICAgICBpZiAoYmluZGluZ0RlZi5pbml0aWFsaXplKSB7CiAgICAgICAgICAgIHZhciByZXN1bHQgPSBiaW5kaW5nRGVmLmluaXRpYWxpemUoZWwsIGVsLm9mZnNldFdpZHRoLAogICAgICAgICAgICAgIGVsLm9mZnNldEhlaWdodCk7CiAgICAgICAgICAgIGVsZW1lbnREYXRhKGVsLCAiaW5pdF9yZXN1bHQiLCByZXN1bHQpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBiaW5kaW5nRGVmLnJlbmRlclZhbHVlKGVsLCBkYXRhLngsIGVsZW1lbnREYXRhKGVsLCAiaW5pdF9yZXN1bHQiKSk7CiAgICAgICAgZXZhbEFuZFJ1bihkYXRhLmpzSG9va3MucmVuZGVyLCBlbGVtZW50RGF0YShlbCwgImluaXRfcmVzdWx0IiksIFtlbCwgZGF0YS54XSk7CiAgICAgIH07CgogICAgICAvLyBPbmx5IG92ZXJyaWRlIHJlc2l6ZSBpZiBiaW5kaW5nRGVmIGltcGxlbWVudHMgaXQKICAgICAgaWYgKGJpbmRpbmdEZWYucmVzaXplKSB7CiAgICAgICAgc2hpbnlCaW5kaW5nLnJlc2l6ZSA9IGZ1bmN0aW9uKGVsLCB3aWR0aCwgaGVpZ2h0KSB7CiAgICAgICAgICAvLyBTaGlueSBjYW4gY2FsbCByZXNpemUgYmVmb3JlIGluaXRpYWxpemUvcmVuZGVyVmFsdWUgaGF2ZSBiZWVuCiAgICAgICAgICAvLyBjYWxsZWQsIHdoaWNoIGRvZXNuJ3QgbWFrZSBzZW5zZSBmb3Igd2lkZ2V0cy4KICAgICAgICAgIGlmIChlbGVtZW50RGF0YShlbCwgImluaXRpYWxpemVkIikpIHsKICAgICAgICAgICAgYmluZGluZ0RlZi5yZXNpemUoZWwsIHdpZHRoLCBoZWlnaHQsIGVsZW1lbnREYXRhKGVsLCAiaW5pdF9yZXN1bHQiKSk7CiAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgfQoKICAgICAgU2hpbnkub3V0cHV0QmluZGluZ3MucmVnaXN0ZXIoc2hpbnlCaW5kaW5nLCBiaW5kaW5nRGVmLm5hbWUpOwogICAgfQogIH07CgogIHZhciBzY2hlZHVsZVN0YXRpY1JlbmRlclRpbWVySWQgPSBudWxsOwogIGZ1bmN0aW9uIHNjaGVkdWxlU3RhdGljUmVuZGVyKCkgewogICAgaWYgKCFzY2hlZHVsZVN0YXRpY1JlbmRlclRpbWVySWQpIHsKICAgICAgc2NoZWR1bGVTdGF0aWNSZW5kZXJUaW1lcklkID0gc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgICBzY2hlZHVsZVN0YXRpY1JlbmRlclRpbWVySWQgPSBudWxsOwogICAgICAgIHdpbmRvdy5IVE1MV2lkZ2V0cy5zdGF0aWNSZW5kZXIoKTsKICAgICAgfSwgMSk7CiAgICB9CiAgfQoKICAvLyBSZW5kZXIgc3RhdGljIHdpZGdldHMgYWZ0ZXIgdGhlIGRvY3VtZW50IGZpbmlzaGVzIGxvYWRpbmcKICAvLyBTdGF0aWNhbGx5IHJlbmRlciBhbGwgZWxlbWVudHMgdGhhdCBhcmUgb2YgdGhpcyB3aWRnZXQncyBjbGFzcwogIHdpbmRvdy5IVE1MV2lkZ2V0cy5zdGF0aWNSZW5kZXIgPSBmdW5jdGlvbigpIHsKICAgIHZhciBiaW5kaW5ncyA9IHdpbmRvdy5IVE1MV2lkZ2V0cy53aWRnZXRzIHx8IFtdOwogICAgZm9yRWFjaChiaW5kaW5ncywgZnVuY3Rpb24oYmluZGluZykgewogICAgICB2YXIgbWF0Y2hlcyA9IGJpbmRpbmcuZmluZChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpOwogICAgICBmb3JFYWNoKG1hdGNoZXMsIGZ1bmN0aW9uKGVsKSB7CiAgICAgICAgdmFyIHNpemVPYmogPSBpbml0U2l6aW5nKGVsLCBiaW5kaW5nKTsKCiAgICAgICAgaWYgKGhhc0NsYXNzKGVsLCAiaHRtbC13aWRnZXQtc3RhdGljLWJvdW5kIikpCiAgICAgICAgICByZXR1cm47CiAgICAgICAgZWwuY2xhc3NOYW1lID0gZWwuY2xhc3NOYW1lICsgIiBodG1sLXdpZGdldC1zdGF0aWMtYm91bmQiOwoKICAgICAgICB2YXIgaW5pdFJlc3VsdDsKICAgICAgICBpZiAoYmluZGluZy5pbml0aWFsaXplKSB7CiAgICAgICAgICBpbml0UmVzdWx0ID0gYmluZGluZy5pbml0aWFsaXplKGVsLAogICAgICAgICAgICBzaXplT2JqID8gc2l6ZU9iai5nZXRXaWR0aCgpIDogZWwub2Zmc2V0V2lkdGgsCiAgICAgICAgICAgIHNpemVPYmogPyBzaXplT2JqLmdldEhlaWdodCgpIDogZWwub2Zmc2V0SGVpZ2h0CiAgICAgICAgICApOwogICAgICAgICAgZWxlbWVudERhdGEoZWwsICJpbml0X3Jlc3VsdCIsIGluaXRSZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgaWYgKGJpbmRpbmcucmVzaXplKSB7CiAgICAgICAgICB2YXIgbGFzdFNpemUgPSB7fTsKICAgICAgICAgIHZhciByZXNpemVIYW5kbGVyID0gZnVuY3Rpb24oZSkgewogICAgICAgICAgICB2YXIgc2l6ZSA9IHsKICAgICAgICAgICAgICB3OiBzaXplT2JqID8gc2l6ZU9iai5nZXRXaWR0aCgpIDogZWwub2Zmc2V0V2lkdGgsCiAgICAgICAgICAgICAgaDogc2l6ZU9iaiA/IHNpemVPYmouZ2V0SGVpZ2h0KCkgOiBlbC5vZmZzZXRIZWlnaHQKICAgICAgICAgICAgfTsKICAgICAgICAgICAgaWYgKHNpemUudyA9PT0gMCAmJiBzaXplLmggPT09IDApCiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBpZiAoc2l6ZS53ID09PSBsYXN0U2l6ZS53ICYmIHNpemUuaCA9PT0gbGFzdFNpemUuaCkKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIGxhc3RTaXplID0gc2l6ZTsKICAgICAgICAgICAgYmluZGluZy5yZXNpemUoZWwsIHNpemUudywgc2l6ZS5oLCBpbml0UmVzdWx0KTsKICAgICAgICAgIH07CgogICAgICAgICAgb24od2luZG93LCAicmVzaXplIiwgcmVzaXplSGFuZGxlcik7CgogICAgICAgICAgLy8gVGhpcyBpcyBuZWVkZWQgZm9yIGNhc2VzIHdoZXJlIHdlJ3JlIHJ1bm5pbmcgaW4gYSBTaGlueQogICAgICAgICAgLy8gYXBwLCBidXQgdGhlIHdpZGdldCBpdHNlbGYgaXMgbm90IGEgU2hpbnkgb3V0cHV0LCBidXQKICAgICAgICAgIC8vIHJhdGhlciBhIHNpbXBsZSBzdGF0aWMgd2lkZ2V0LiBPbmUgZXhhbXBsZSBvZiB0aGlzIGlzCiAgICAgICAgICAvLyBhbiBybWFya2Rvd24gZG9jdW1lbnQgdGhhdCBoYXMgcnVudGltZTpzaGlueSBhbmQgd2lkZ2V0CiAgICAgICAgICAvLyB0aGF0IGlzbid0IGluIGEgcmVuZGVyIGZ1bmN0aW9uLiBTaGlueSBvbmx5IGtub3dzIHRvCiAgICAgICAgICAvLyBjYWxsIHJlc2l6ZSBoYW5kbGVycyBmb3IgU2hpbnkgb3V0cHV0cywgbm90IGZvciBzdGF0aWMKICAgICAgICAgIC8vIHdpZGdldHMsIHNvIHdlIGRvIGl0IG91cnNlbHZlcy4KICAgICAgICAgIGlmICh3aW5kb3cualF1ZXJ5KSB7CiAgICAgICAgICAgIHdpbmRvdy5qUXVlcnkoZG9jdW1lbnQpLm9uKAogICAgICAgICAgICAgICJzaG93bi5odG1sd2lkZ2V0cyBzaG93bi5icy50YWIuaHRtbHdpZGdldHMgc2hvd24uYnMuY29sbGFwc2UuaHRtbHdpZGdldHMiLAogICAgICAgICAgICAgIHJlc2l6ZUhhbmRsZXIKICAgICAgICAgICAgKTsKICAgICAgICAgICAgd2luZG93LmpRdWVyeShkb2N1bWVudCkub24oCiAgICAgICAgICAgICAgImhpZGRlbi5odG1sd2lkZ2V0cyBoaWRkZW4uYnMudGFiLmh0bWx3aWRnZXRzIGhpZGRlbi5icy5jb2xsYXBzZS5odG1sd2lkZ2V0cyIsCiAgICAgICAgICAgICAgcmVzaXplSGFuZGxlcgogICAgICAgICAgICApOwogICAgICAgICAgfQoKICAgICAgICAgIC8vIFRoaXMgaXMgbmVlZGVkIGZvciB0aGUgc3BlY2lmaWMgY2FzZSBvZiBpb3NsaWRlcywgd2hpY2gKICAgICAgICAgIC8vIGZsaXBzIHNsaWRlcyBiZXR3ZWVuIGRpc3BsYXk6bm9uZSBhbmQgZGlzcGxheTpibG9jay4KICAgICAgICAgIC8vIElkZWFsbHkgd2Ugd291bGQgbm90IGhhdmUgdG8gaGF2ZSBpb3NsaWRlLXNwZWNpZmljIGNvZGUKICAgICAgICAgIC8vIGhlcmUsIGJ1dCByYXRoZXIgaGF2ZSBpb3NsaWRlcyByYWlzZSBhIGdlbmVyaWMgZXZlbnQsCiAgICAgICAgICAvLyBidXQgdGhlIHJtYXJrZG93biBwYWNrYWdlIGp1c3Qgd2VudCB0byBDUkFOIHNvIHRoZQogICAgICAgICAgLy8gd2luZG93IHRvIGdldHRpbmcgdGhhdCBmaXhlZCBtYXkgYmUgbG9uZy4KICAgICAgICAgIGlmICh3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcikgewogICAgICAgICAgICAvLyBJdCdzIE9LIHRvIGxpbWl0IHRoaXMgdG8gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIKICAgICAgICAgICAgLy8gYnJvd3NlcnMgYmVjYXVzZSBpb3NsaWRlcyBpdHNlbGYgb25seSBzdXBwb3J0cwogICAgICAgICAgICAvLyBzdWNoIGJyb3dzZXJzLgogICAgICAgICAgICBvbihkb2N1bWVudCwgInNsaWRlZW50ZXIiLCByZXNpemVIYW5kbGVyKTsKICAgICAgICAgICAgb24oZG9jdW1lbnQsICJzbGlkZWxlYXZlIiwgcmVzaXplSGFuZGxlcik7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICB2YXIgc2NyaXB0RGF0YSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInNjcmlwdFtkYXRhLWZvcj0nIiArIGVsLmlkICsgIiddW3R5cGU9J2FwcGxpY2F0aW9uL2pzb24nXSIpOwogICAgICAgIGlmIChzY3JpcHREYXRhKSB7CiAgICAgICAgICB2YXIgZGF0YSA9IEpTT04ucGFyc2Uoc2NyaXB0RGF0YS50ZXh0Q29udGVudCB8fCBzY3JpcHREYXRhLnRleHQpOwogICAgICAgICAgLy8gUmVzb2x2ZSBzdHJpbmdzIG1hcmtlZCBhcyBqYXZhc2NyaXB0IGxpdGVyYWxzIHRvIG9iamVjdHMKICAgICAgICAgIGlmICghKGRhdGEuZXZhbHMgaW5zdGFuY2VvZiBBcnJheSkpIGRhdGEuZXZhbHMgPSBbZGF0YS5ldmFsc107CiAgICAgICAgICBmb3IgKHZhciBrID0gMDsgZGF0YS5ldmFscyAmJiBrIDwgZGF0YS5ldmFscy5sZW5ndGg7IGsrKykgewogICAgICAgICAgICB3aW5kb3cuSFRNTFdpZGdldHMuZXZhbHVhdGVTdHJpbmdNZW1iZXIoZGF0YS54LCBkYXRhLmV2YWxzW2tdKTsKICAgICAgICAgIH0KICAgICAgICAgIGJpbmRpbmcucmVuZGVyVmFsdWUoZWwsIGRhdGEueCwgaW5pdFJlc3VsdCk7CiAgICAgICAgICBldmFsQW5kUnVuKGRhdGEuanNIb29rcy5yZW5kZXIsIGluaXRSZXN1bHQsIFtlbCwgZGF0YS54XSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0pOwoKICAgIGludm9rZVBvc3RSZW5kZXJIYW5kbGVycygpOwogIH0KCiAgLy8gV2FpdCB1bnRpbCBhZnRlciB0aGUgZG9jdW1lbnQgaGFzIGxvYWRlZCB0byByZW5kZXIgdGhlIHdpZGdldHMuCiAgaWYgKGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIpIHsKICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLCBmdW5jdGlvbigpIHsKICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsIGFyZ3VtZW50cy5jYWxsZWUsIGZhbHNlKTsKICAgICAgd2luZG93LkhUTUxXaWRnZXRzLnN0YXRpY1JlbmRlcigpOwogICAgfSwgZmFsc2UpOwogIH0gZWxzZSBpZiAoZG9jdW1lbnQuYXR0YWNoRXZlbnQpIHsKICAgIGRvY3VtZW50LmF0dGFjaEV2ZW50KCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCBmdW5jdGlvbigpIHsKICAgICAgaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICJjb21wbGV0ZSIpIHsKICAgICAgICBkb2N1bWVudC5kZXRhY2hFdmVudCgib25yZWFkeXN0YXRlY2hhbmdlIiwgYXJndW1lbnRzLmNhbGxlZSk7CiAgICAgICAgd2luZG93LkhUTUxXaWRnZXRzLnN0YXRpY1JlbmRlcigpOwogICAgICB9CiAgICB9KTsKICB9CgoKICB3aW5kb3cuSFRNTFdpZGdldHMuZ2V0QXR0YWNobWVudFVybCA9IGZ1bmN0aW9uKGRlcG5hbWUsIGtleSkgewogICAgLy8gSWYgbm8ga2V5LCBkZWZhdWx0IHRvIHRoZSBmaXJzdCBpdGVtCiAgICBpZiAodHlwZW9mKGtleSkgPT09ICJ1bmRlZmluZWQiKQogICAgICBrZXkgPSAxOwoKICAgIHZhciBsaW5rID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZGVwbmFtZSArICItIiArIGtleSArICItYXR0YWNobWVudCIpOwogICAgaWYgKCFsaW5rKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiQXR0YWNobWVudCAiICsgZGVwbmFtZSArICIvIiArIGtleSArICIgbm90IGZvdW5kIGluIGRvY3VtZW50Iik7CiAgICB9CiAgICByZXR1cm4gbGluay5nZXRBdHRyaWJ1dGUoImhyZWYiKTsKICB9OwoKICB3aW5kb3cuSFRNTFdpZGdldHMuZGF0YWZyYW1lVG9EMyA9IGZ1bmN0aW9uKGRmKSB7CiAgICB2YXIgbmFtZXMgPSBbXTsKICAgIHZhciBsZW5ndGg7CiAgICBmb3IgKHZhciBuYW1lIGluIGRmKSB7CiAgICAgICAgaWYgKGRmLmhhc093blByb3BlcnR5KG5hbWUpKQogICAgICAgICAgICBuYW1lcy5wdXNoKG5hbWUpOwogICAgICAgIGlmICh0eXBlb2YoZGZbbmFtZV0pICE9PSAib2JqZWN0IiB8fCB0eXBlb2YoZGZbbmFtZV0ubGVuZ3RoKSA9PT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJBbGwgZmllbGRzIG11c3QgYmUgYXJyYXlzIik7CiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YobGVuZ3RoKSAhPT0gInVuZGVmaW5lZCIgJiYgbGVuZ3RoICE9PSBkZltuYW1lXS5sZW5ndGgpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJBbGwgZmllbGRzIG11c3QgYmUgYXJyYXlzIG9mIHRoZSBzYW1lIGxlbmd0aCIpOwogICAgICAgIH0KICAgICAgICBsZW5ndGggPSBkZltuYW1lXS5sZW5ndGg7CiAgICB9CiAgICB2YXIgcmVzdWx0cyA9IFtdOwogICAgdmFyIGl0ZW07CiAgICBmb3IgKHZhciByb3cgPSAwOyByb3cgPCBsZW5ndGg7IHJvdysrKSB7CiAgICAgICAgaXRlbSA9IHt9OwogICAgICAgIGZvciAodmFyIGNvbCA9IDA7IGNvbCA8IG5hbWVzLmxlbmd0aDsgY29sKyspIHsKICAgICAgICAgICAgaXRlbVtuYW1lc1tjb2xdXSA9IGRmW25hbWVzW2NvbF1dW3Jvd107CiAgICAgICAgfQogICAgICAgIHJlc3VsdHMucHVzaChpdGVtKTsKICAgIH0KICAgIHJldHVybiByZXN1bHRzOwogIH07CgogIHdpbmRvdy5IVE1MV2lkZ2V0cy50cmFuc3Bvc2VBcnJheTJEID0gZnVuY3Rpb24oYXJyYXkpIHsKICAgICAgaWYgKGFycmF5Lmxlbmd0aCA9PT0gMCkgcmV0dXJuIGFycmF5OwogICAgICB2YXIgbmV3QXJyYXkgPSBhcnJheVswXS5tYXAoZnVuY3Rpb24oY29sLCBpKSB7CiAgICAgICAgICByZXR1cm4gYXJyYXkubWFwKGZ1bmN0aW9uKHJvdykgewogICAgICAgICAgICAgIHJldHVybiByb3dbaV0KICAgICAgICAgIH0pCiAgICAgIH0pOwogICAgICByZXR1cm4gbmV3QXJyYXk7CiAgfTsKICAvLyBTcGxpdCB2YWx1ZSBhdCBzcGxpdENoYXIsIGJ1dCBhbGxvdyBzcGxpdENoYXIgdG8gYmUgZXNjYXBlZAogIC8vIHVzaW5nIGVzY2FwZUNoYXIuIEFueSBvdGhlciBjaGFyYWN0ZXJzIGVzY2FwZWQgYnkgZXNjYXBlQ2hhcgogIC8vIHdpbGwgYmUgaW5jbHVkZWQgYXMgdXN1YWwgKGluY2x1ZGluZyBlc2NhcGVDaGFyIGl0c2VsZikuCiAgZnVuY3Rpb24gc3BsaXRXaXRoRXNjYXBlKHZhbHVlLCBzcGxpdENoYXIsIGVzY2FwZUNoYXIpIHsKICAgIHZhciByZXN1bHRzID0gW107CiAgICB2YXIgZXNjYXBlTW9kZSA9IGZhbHNlOwogICAgdmFyIGN1cnJlbnRSZXN1bHQgPSAiIjsKICAgIGZvciAodmFyIHBvcyA9IDA7IHBvcyA8IHZhbHVlLmxlbmd0aDsgcG9zKyspIHsKICAgICAgaWYgKCFlc2NhcGVNb2RlKSB7CiAgICAgICAgaWYgKHZhbHVlW3Bvc10gPT09IHNwbGl0Q2hhcikgewogICAgICAgICAgcmVzdWx0cy5wdXNoKGN1cnJlbnRSZXN1bHQpOwogICAgICAgICAgY3VycmVudFJlc3VsdCA9ICIiOwogICAgICAgIH0gZWxzZSBpZiAodmFsdWVbcG9zXSA9PT0gZXNjYXBlQ2hhcikgewogICAgICAgICAgZXNjYXBlTW9kZSA9IHRydWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGN1cnJlbnRSZXN1bHQgKz0gdmFsdWVbcG9zXTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgY3VycmVudFJlc3VsdCArPSB2YWx1ZVtwb3NdOwogICAgICAgIGVzY2FwZU1vZGUgPSBmYWxzZTsKICAgICAgfQogICAgfQogICAgaWYgKGN1cnJlbnRSZXN1bHQgIT09ICIiKSB7CiAgICAgIHJlc3VsdHMucHVzaChjdXJyZW50UmVzdWx0KTsKICAgIH0KICAgIHJldHVybiByZXN1bHRzOwogIH0KICAvLyBGdW5jdGlvbiBhdXRob3JlZCBieSBZaWh1aS9KSiBBbGxhaXJlCiAgd2luZG93LkhUTUxXaWRnZXRzLmV2YWx1YXRlU3RyaW5nTWVtYmVyID0gZnVuY3Rpb24obywgbWVtYmVyKSB7CiAgICB2YXIgcGFydHMgPSBzcGxpdFdpdGhFc2NhcGUobWVtYmVyLCAnLicsICdcXCcpOwogICAgZm9yICh2YXIgaSA9IDAsIGwgPSBwYXJ0cy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKICAgICAgdmFyIHBhcnQgPSBwYXJ0c1tpXTsKICAgICAgLy8gcGFydCBtYXkgYmUgYSBjaGFyYWN0ZXIgb3IgJ251bWVyaWMnIG1lbWJlciBuYW1lCiAgICAgIGlmIChvICE9PSBudWxsICYmIHR5cGVvZiBvID09PSAib2JqZWN0IiAmJiBwYXJ0IGluIG8pIHsKICAgICAgICBpZiAoaSA9PSAobCAtIDEpKSB7IC8vIGlmIHdlIGFyZSBhdCB0aGUgZW5kIG9mIHRoZSBsaW5lIHRoZW4gZXZhbHVsYXRlCiAgICAgICAgICBpZiAodHlwZW9mIG9bcGFydF0gPT09ICJzdHJpbmciKQogICAgICAgICAgICBvW3BhcnRdID0gZXZhbCgiKCIgKyBvW3BhcnRdICsgIikiKTsKICAgICAgICB9IGVsc2UgeyAvLyBvdGhlcndpc2UgY29udGludWUgdG8gbmV4dCBlbWJlZGRlZCBvYmplY3QKICAgICAgICAgIG8gPSBvW3BhcnRdOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH07CgogIC8vIFJldHJpZXZlIHRoZSBIVE1MV2lkZ2V0IGluc3RhbmNlIChpLmUuIHRoZSByZXR1cm4gdmFsdWUgb2YgYW4KICAvLyBIVE1MV2lkZ2V0IGJpbmRpbmcncyBpbml0aWFsaXplKCkgb3IgZmFjdG9yeSgpIGZ1bmN0aW9uKQogIC8vIGFzc29jaWF0ZWQgd2l0aCBhbiBlbGVtZW50LCBvciBudWxsIGlmIG5vbmUuCiAgd2luZG93LkhUTUxXaWRnZXRzLmdldEluc3RhbmNlID0gZnVuY3Rpb24oZWwpIHsKICAgIHJldHVybiBlbGVtZW50RGF0YShlbCwgImluaXRfcmVzdWx0Iik7CiAgfTsKCiAgLy8gRmluZHMgdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlIHNjb3BlIHRoYXQgbWF0Y2hlcyB0aGUgc2VsZWN0b3IsCiAgLy8gYW5kIHJldHVybnMgdGhlIEhUTUxXaWRnZXQgaW5zdGFuY2UgKGkuZS4gdGhlIHJldHVybiB2YWx1ZSBvZgogIC8vIGFuIEhUTUxXaWRnZXQgYmluZGluZydzIGluaXRpYWxpemUoKSBvciBmYWN0b3J5KCkgZnVuY3Rpb24pCiAgLy8gYXNzb2NpYXRlZCB3aXRoIHRoYXQgZWxlbWVudCwgaWYgYW55LiBJZiBubyBlbGVtZW50IG1hdGNoZXMgdGhlCiAgLy8gc2VsZWN0b3IsIG9yIHRoZSBmaXJzdCBtYXRjaGluZyBlbGVtZW50IGhhcyBubyBIVE1MV2lkZ2V0CiAgLy8gaW5zdGFuY2UgYXNzb2NpYXRlZCB3aXRoIGl0LCB0aGVuIG51bGwgaXMgcmV0dXJuZWQuCiAgLy8KICAvLyBUaGUgc2NvcGUgYXJndW1lbnQgaXMgb3B0aW9uYWwsIGFuZCBkZWZhdWx0cyB0byB3aW5kb3cuZG9jdW1lbnQuCiAgd2luZG93LkhUTUxXaWRnZXRzLmZpbmQgPSBmdW5jdGlvbihzY29wZSwgc2VsZWN0b3IpIHsKICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpIHsKICAgICAgc2VsZWN0b3IgPSBzY29wZTsKICAgICAgc2NvcGUgPSBkb2N1bWVudDsKICAgIH0KCiAgICB2YXIgZWwgPSBzY29wZS5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTsKICAgIGlmIChlbCA9PT0gbnVsbCkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiB3aW5kb3cuSFRNTFdpZGdldHMuZ2V0SW5zdGFuY2UoZWwpOwogICAgfQogIH07CgogIC8vIEZpbmRzIGFsbCBlbGVtZW50cyBpbiB0aGUgc2NvcGUgdGhhdCBtYXRjaCB0aGUgc2VsZWN0b3IsIGFuZAogIC8vIHJldHVybnMgdGhlIEhUTUxXaWRnZXQgaW5zdGFuY2VzIChpLmUuIHRoZSByZXR1cm4gdmFsdWVzIG9mCiAgLy8gYW4gSFRNTFdpZGdldCBiaW5kaW5nJ3MgaW5pdGlhbGl6ZSgpIG9yIGZhY3RvcnkoKSBmdW5jdGlvbikKICAvLyBhc3NvY2lhdGVkIHdpdGggdGhlIGVsZW1lbnRzLCBpbiBhbiBhcnJheS4gSWYgZWxlbWVudHMgdGhhdAogIC8vIG1hdGNoIHRoZSBzZWxlY3RvciBkb24ndCBoYXZlIGFuIGFzc29jaWF0ZWQgSFRNTFdpZGdldAogIC8vIGluc3RhbmNlLCB0aGUgcmV0dXJuZWQgYXJyYXkgd2lsbCBjb250YWluIG51bGxzLgogIC8vCiAgLy8gVGhlIHNjb3BlIGFyZ3VtZW50IGlzIG9wdGlvbmFsLCBhbmQgZGVmYXVsdHMgdG8gd2luZG93LmRvY3VtZW50LgogIHdpbmRvdy5IVE1MV2lkZ2V0cy5maW5kQWxsID0gZnVuY3Rpb24oc2NvcGUsIHNlbGVjdG9yKSB7CiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAxKSB7CiAgICAgIHNlbGVjdG9yID0gc2NvcGU7CiAgICAgIHNjb3BlID0gZG9jdW1lbnQ7CiAgICB9CgogICAgdmFyIG5vZGVzID0gc2NvcGUucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7CiAgICB2YXIgcmVzdWx0cyA9IFtdOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykgewogICAgICByZXN1bHRzLnB1c2god2luZG93LkhUTUxXaWRnZXRzLmdldEluc3RhbmNlKG5vZGVzW2ldKSk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0czsKICB9OwoKICB2YXIgcG9zdFJlbmRlckhhbmRsZXJzID0gW107CiAgZnVuY3Rpb24gaW52b2tlUG9zdFJlbmRlckhhbmRsZXJzKCkgewogICAgd2hpbGUgKHBvc3RSZW5kZXJIYW5kbGVycy5sZW5ndGgpIHsKICAgICAgdmFyIGhhbmRsZXIgPSBwb3N0UmVuZGVySGFuZGxlcnMuc2hpZnQoKTsKICAgICAgaWYgKGhhbmRsZXIpIHsKICAgICAgICBoYW5kbGVyKCk7CiAgICAgIH0KICAgIH0KICB9CgogIC8vIFJlZ2lzdGVyIHRoZSBnaXZlbiBjYWxsYmFjayBmdW5jdGlvbiB0byBiZSBpbnZva2VkIGFmdGVyIHRoZQogIC8vIG5leHQgdGltZSBzdGF0aWMgd2lkZ2V0cyBhcmUgcmVuZGVyZWQuCiAgd2luZG93LkhUTUxXaWRnZXRzLmFkZFBvc3RSZW5kZXJIYW5kbGVyID0gZnVuY3Rpb24oY2FsbGJhY2spIHsKICAgIHBvc3RSZW5kZXJIYW5kbGVycy5wdXNoKGNhbGxiYWNrKTsKICB9OwoKICAvLyBUYWtlcyBhIG5ldy1zdHlsZSBpbnN0YW5jZS1ib3VuZCBkZWZpbml0aW9uLCBhbmQgcmV0dXJucyBhbgogIC8vIG9sZC1zdHlsZSBjbGFzcy1ib3VuZCBkZWZpbml0aW9uLiBUaGlzIHNhdmVzIHVzIGZyb20gaGF2aW5nCiAgLy8gdG8gcmV3cml0ZSBhbGwgdGhlIGxvZ2ljIGluIHRoaXMgZmlsZSB0byBhY2NvbW9kYXRlIGJvdGgKICAvLyB0eXBlcyBvZiBkZWZpbml0aW9ucy4KICBmdW5jdGlvbiBjcmVhdGVMZWdhY3lEZWZpbml0aW9uQWRhcHRlcihkZWZuKSB7CiAgICB2YXIgcmVzdWx0ID0gewogICAgICBuYW1lOiBkZWZuLm5hbWUsCiAgICAgIHR5cGU6IGRlZm4udHlwZSwKICAgICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oZWwsIHdpZHRoLCBoZWlnaHQpIHsKICAgICAgICByZXR1cm4gZGVmbi5mYWN0b3J5KGVsLCB3aWR0aCwgaGVpZ2h0KTsKICAgICAgfSwKICAgICAgcmVuZGVyVmFsdWU6IGZ1bmN0aW9uKGVsLCB4LCBpbnN0YW5jZSkgewogICAgICAgIHJldHVybiBpbnN0YW5jZS5yZW5kZXJWYWx1ZSh4KTsKICAgICAgfSwKICAgICAgcmVzaXplOiBmdW5jdGlvbihlbCwgd2lkdGgsIGhlaWdodCwgaW5zdGFuY2UpIHsKICAgICAgICByZXR1cm4gaW5zdGFuY2UucmVzaXplKHdpZHRoLCBoZWlnaHQpOwogICAgICB9CiAgICB9OwoKICAgIGlmIChkZWZuLmZpbmQpCiAgICAgIHJlc3VsdC5maW5kID0gZGVmbi5maW5kOwogICAgaWYgKGRlZm4ucmVuZGVyRXJyb3IpCiAgICAgIHJlc3VsdC5yZW5kZXJFcnJvciA9IGRlZm4ucmVuZGVyRXJyb3I7CiAgICBpZiAoZGVmbi5jbGVhckVycm9yKQogICAgICByZXN1bHQuY2xlYXJFcnJvciA9IGRlZm4uY2xlYXJFcnJvcjsKCiAgICByZXR1cm4gcmVzdWx0OwogIH0KfSkoKTsKCg=="></script>
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
26 <script src="data:application/x-javascript;base64,CkhUTUxXaWRnZXRzLndpZGdldCh7CiAgbmFtZTogInBsb3RseSIsCiAgdHlwZTogIm91dHB1dCIsCgogIGluaXRpYWxpemU6IGZ1bmN0aW9uKGVsLCB3aWR0aCwgaGVpZ2h0KSB7CiAgICByZXR1cm4ge307CiAgfSwKCiAgcmVzaXplOiBmdW5jdGlvbihlbCwgd2lkdGgsIGhlaWdodCwgaW5zdGFuY2UpIHsKICAgIGlmIChpbnN0YW5jZS5hdXRvc2l6ZSkgewogICAgICB2YXIgd2lkdGggPSBpbnN0YW5jZS53aWR0aCB8fCB3aWR0aDsKICAgICAgdmFyIGhlaWdodCA9IGluc3RhbmNlLmhlaWdodCB8fCBoZWlnaHQ7CiAgICAgIFBsb3RseS5yZWxheW91dChlbC5pZCwge3dpZHRoOiB3aWR0aCwgaGVpZ2h0OiBoZWlnaHR9KTsKICAgIH0KICB9LCAgCiAgCiAgcmVuZGVyVmFsdWU6IGZ1bmN0aW9uKGVsLCB4LCBpbnN0YW5jZSkgewogICAgCiAgICAvKiAKICAgIC8gJ2luZm9ybSB0aGUgd29ybGQnIGFib3V0IGhpZ2hsaWdodGluZyBvcHRpb25zIHRoaXMgaXMgc28gb3RoZXIKICAgIC8gY3Jvc3N0YWxrIGxpYnJhcmllcyBoYXZlIGEgY2hhbmNlIHRvIHJlc3BvbmQgdG8gc3BlY2lhbCBzZXR0aW5ncyAKICAgIC8gc3VjaCBhcyBwZXJzaXN0ZW50IHNlbGVjdGlvbi4gCiAgICAvIEFGQUlLLCBsZWFmbGV0IGlzIHRoZSBvbmx5IGxpYnJhcnkgd2l0aCBzdWNoIGludGVyZ3JhdGlvbgogICAgLyBodHRwczovL2dpdGh1Yi5jb20vcnN0dWRpby9sZWFmbGV0L3B1bGwvMzQ2L2ZpbGVzI2RpZmYtYWQwYzJkNTFjZTVmZGY4YzkwYzczOTViMTAyZjQyNjVSMTU0CiAgICAqLwogICAgdmFyIGN0Q29uZmlnID0gY3Jvc3N0YWxrLnZhcigncGxvdGx5Q3Jvc3N0YWxrT3B0cycpLnNldCh4LmhpZ2hsaWdodCk7CiAgICAgIAogICAgaWYgKHR5cGVvZih3aW5kb3cpICE9PSAidW5kZWZpbmVkIikgewogICAgICAvLyBtYWtlIHN1cmUgcGxvdHMgZG9uJ3QgZ2V0IGNyZWF0ZWQgb3V0c2lkZSB0aGUgbmV0d29yayAoZm9yIG9uLXByZW0pCiAgICAgIHdpbmRvdy5QTE9UTFlFTlYgPSB3aW5kb3cuUExPVExZRU5WIHx8IHt9OwogICAgICB3aW5kb3cuUExPVExZRU5WLkJBU0VfVVJMID0geC5iYXNlX3VybDsKICAgICAgCiAgICAgIC8vIEVuYWJsZSBwZXJzaXN0ZW50IHNlbGVjdGlvbiB3aGVuIHNoaWZ0IGtleSBpcyBkb3duCiAgICAgIC8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzE4Mjg2MTMvY2hlY2staWYtYS1rZXktaXMtZG93bgogICAgICB2YXIgcGVyc2lzdE9uU2hpZnQgPSBmdW5jdGlvbihlKSB7CiAgICAgICAgaWYgKCFlKSB3aW5kb3cuZXZlbnQ7CiAgICAgICAgaWYgKGUuc2hpZnRLZXkpIHsgCiAgICAgICAgICB4LmhpZ2hsaWdodC5wZXJzaXN0ZW50ID0gdHJ1ZTsgCiAgICAgICAgICB4LmhpZ2hsaWdodC5wZXJzaXN0ZW50U2hpZnQgPSB0cnVlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB4LmhpZ2hsaWdodC5wZXJzaXN0ZW50ID0gZmFsc2U7IAogICAgICAgICAgeC5oaWdobGlnaHQucGVyc2lzdGVudFNoaWZ0ID0gZmFsc2U7CiAgICAgICAgfQogICAgICB9OwogICAgICAKICAgICAgLy8gT25seSByZWxldmFudCBpZiB3ZSBoYXZlbid0IGZvcmNlZCBwZXJzaXN0ZW50IG1vZGUgYXQgY29tbWFuZCBsaW5lCiAgICAgIGlmICgheC5oaWdobGlnaHQucGVyc2lzdGVudCkgewogICAgICAgIHdpbmRvdy5vbm1vdXNlbW92ZSA9IHBlcnNpc3RPblNoaWZ0OwogICAgICB9CiAgICB9CgogICAgdmFyIGdyYXBoRGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWwuaWQpOwogICAgCiAgICAvLyBUT0RPOiBtb3ZlIHRoZSBjb250cm9sIHBhbmVsIGluamVjdGlvbiBzdHJhdGVneSBpbnNpZGUgaGVyZS4uLgogICAgSFRNTFdpZGdldHMuYWRkUG9zdFJlbmRlckhhbmRsZXIoZnVuY3Rpb24oKSB7CiAgICAgIAogICAgICAvLyBsb3dlciB0aGUgei1pbmRleCBvZiB0aGUgbW9kZWJhciB0byBwcmV2ZW50IGl0IGZyb20gaGlnaGphY2tpbmcgaG92ZXIKICAgICAgLy8gKFRPRE86IGRvIHRoaXMgdmlhIENTUz8pCiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9yb3BlbnNjaS9wbG90bHkvaXNzdWVzLzk1NgogICAgICAvLyBodHRwczovL3d3dy53M3NjaG9vbHMuY29tL2pzcmVmL3Byb3Bfc3R5bGVfemluZGV4LmFzcAogICAgICB2YXIgbW9kZWJhcnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIuanMtcGxvdGx5LXBsb3QgLnBsb3RseSAubW9kZWJhciIpOwogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1vZGViYXJzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgbW9kZWJhcnNbaV0uc3R5bGUuekluZGV4ID0gMTsKICAgICAgfQogICAgfSk7CiAgICAgIAogICAgICAvLyBpbmplY3QgYSAiY29udHJvbCBwYW5lbCIgaG9sZGluZyBzZWxlY3RpemUvZHluYW1pYyBjb2xvciB3aWRnZXQocykKICAgIGlmICh4LnNlbGVjdGl6ZSB8fCB4LmhpZ2hsaWdodC5keW5hbWljICYmICFpbnN0YW5jZS5wbG90bHkpIHsKICAgICAgdmFyIGZsZXggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgZmxleC5jbGFzcyA9ICJwbG90bHktY3Jvc3N0YWxrLWNvbnRyb2wtcGFuZWwiOwogICAgICBmbGV4LnN0eWxlID0gImRpc3BsYXk6IGZsZXg7IGZsZXgtd3JhcDogd3JhcCI7CiAgICAgIAogICAgICAvLyBpbmplY3QgdGhlIGNvbG91cnBpY2tlciBIVE1MIGNvbnRhaW5lciBpbnRvIHRoZSBmbGV4Ym94CiAgICAgIGlmICh4LmhpZ2hsaWdodC5keW5hbWljKSB7CiAgICAgICAgdmFyIHBpY2tlckRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICAgIAogICAgICAgIHZhciBwaWNrZXJJbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7CiAgICAgICAgcGlja2VySW5wdXQuaWQgPSBlbC5pZCArICItY29sb3VycGlja2VyIjsKICAgICAgICBwaWNrZXJJbnB1dC5wbGFjZWhvbGRlciA9ICJhc2Rhc2QiOwogICAgICAgIAogICAgICAgIHZhciBwaWNrZXJMYWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxhYmVsIik7CiAgICAgICAgcGlja2VyTGFiZWwuZm9yID0gcGlja2VySW5wdXQuaWQ7CiAgICAgICAgcGlja2VyTGFiZWwuaW5uZXJIVE1MID0gIkJydXNoIGNvbG9yJm5ic3A7Jm5ic3A7IjsKICAgICAgICAKICAgICAgICBwaWNrZXJEaXYuYXBwZW5kQ2hpbGQocGlja2VyTGFiZWwpOwogICAgICAgIHBpY2tlckRpdi5hcHBlbmRDaGlsZChwaWNrZXJJbnB1dCk7CiAgICAgICAgZmxleC5hcHBlbmRDaGlsZChwaWNrZXJEaXYpOwogICAgICB9CiAgICAgIAogICAgICAvLyBpbmplY3Qgc2VsZWN0aXplIEhUTUwgY29udGFpbmVycyAob25lIGZvciBldmVyeSBjcm9zc3RhbGsgZ3JvdXApCiAgICAgIGlmICh4LnNlbGVjdGl6ZSkgewogICAgICAgIHZhciBpZHMgPSBPYmplY3Qua2V5cyh4LnNlbGVjdGl6ZSk7CiAgICAgICAgCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpZHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIHZhciBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgICAgIGNvbnRhaW5lci5pZCA9IGlkc1tpXTsKICAgICAgICAgIGNvbnRhaW5lci5zdHlsZSA9ICJ3aWR0aDogODAlOyBoZWlnaHQ6IDEwJSI7CiAgICAgICAgICBjb250YWluZXIuY2xhc3MgPSAiZm9ybS1ncm91cCBjcm9zc3RhbGstaW5wdXQtcGxvdGx5LWhpZ2hsaWdodCI7CiAgICAgICAgICAKICAgICAgICAgIHZhciBsYWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxhYmVsIik7CiAgICAgICAgICBsYWJlbC5mb3IgPSBpZHNbaV07CiAgICAgICAgICBsYWJlbC5pbm5lckhUTUwgPSB4LnNlbGVjdGl6ZVtpZHNbaV1dLmdyb3VwOwogICAgICAgICAgbGFiZWwuY2xhc3MgPSAiY29udHJvbC1sYWJlbCI7CiAgICAgICAgICAKICAgICAgICAgIHZhciBzZWxlY3REaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgICAgIHZhciBzZWxlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKTsKICAgICAgICAgIHNlbGVjdC5tdWx0aXBsZSA9IHRydWU7CiAgICAgICAgICAKICAgICAgICAgIHNlbGVjdERpdi5hcHBlbmRDaGlsZChzZWxlY3QpOwogICAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGxhYmVsKTsKICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChzZWxlY3REaXYpOwogICAgICAgICAgZmxleC5hcHBlbmRDaGlsZChjb250YWluZXIpOwogICAgICAgIH0KICAgICAgfQogICAgICAKICAgICAgLy8gZmluYWxseSwgaW5zZXJ0IHRoZSBmbGV4Ym94IGluc2lkZSB0aGUgaHRtbHdpZGdldCBjb250YWluZXIsCiAgICAgIC8vIGJ1dCBiZWZvcmUgdGhlIHBsb3RseSBncmFwaCBkaXYKICAgICAgZ3JhcGhEaXYucGFyZW50RWxlbWVudC5pbnNlcnRCZWZvcmUoZmxleCwgZ3JhcGhEaXYpOwogICAgICAKICAgICAgaWYgKHguaGlnaGxpZ2h0LmR5bmFtaWMpIHsKICAgICAgICB2YXIgcGlja2VyID0gJCgiIyIgKyBwaWNrZXJJbnB1dC5pZCk7CiAgICAgICAgdmFyIGNvbG9ycyA9IHguaGlnaGxpZ2h0LmNvbG9yIHx8IFtdOwogICAgICAgIC8vIFRPRE86IGxldCB1c2VycyBzcGVjaWZ5IG9wdGlvbnM/CiAgICAgICAgdmFyIG9wdHMgPSB7CiAgICAgICAgICB2YWx1ZTogY29sb3JzWzBdLAogICAgICAgICAgc2hvd0NvbG91cjogImJvdGgiLAogICAgICAgICAgcGFsZXR0ZTogImxpbWl0ZWQiLAogICAgICAgICAgYWxsb3dlZENvbHM6IGNvbG9ycy5qb2luKCIgIiksCiAgICAgICAgICB3aWR0aDogIjIwJSIsCiAgICAgICAgICBoZWlnaHQ6ICIxMCUiCiAgICAgICAgfTsKICAgICAgICBwaWNrZXIuY29sb3VycGlja2VyKHtjaGFuZ2VEZWxheTogMH0pOwogICAgICAgIHBpY2tlci5jb2xvdXJwaWNrZXIoInNldHRpbmdzIiwgb3B0cyk7CiAgICAgICAgcGlja2VyLmNvbG91cnBpY2tlcigidmFsdWUiLCBvcHRzLnZhbHVlKTsKICAgICAgICAvLyBpbmZvcm0gY3Jvc3N0YWxrIGFib3V0IGEgY2hhbmdlIGluIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBjb2xvdXIKICAgICAgICB2YXIgZ3JwcyA9IHguaGlnaGxpZ2h0LmN0R3JvdXBzIHx8IFtdOwogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3Jwcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgY3Jvc3N0YWxrLmdyb3VwKGdycHNbaV0pLnZhcigncGxvdGx5U2VsZWN0aW9uQ29sb3VyJykKICAgICAgICAgICAgLnNldChwaWNrZXIuY29sb3VycGlja2VyKCd2YWx1ZScpKTsKICAgICAgICB9CiAgICAgICAgcGlja2VyLm9uKCJjaGFuZ2UiLCBmdW5jdGlvbigpIHsKICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3Jwcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBjcm9zc3RhbGsuZ3JvdXAoZ3Jwc1tpXSkudmFyKCdwbG90bHlTZWxlY3Rpb25Db2xvdXInKQogICAgICAgICAgICAgIC5zZXQocGlja2VyLmNvbG91cnBpY2tlcigndmFsdWUnKSk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0KICAgIAogICAgLy8gcmVtb3ZlICJzZW5kRGF0YVRvQ2xvdWQiLCB1bmxlc3MgdXNlciBoYXMgc3BlY2lmaWVkIHRoZXkgd2FudCBpdAogICAgeC5jb25maWcgPSB4LmNvbmZpZyB8fCB7fTsKICAgIGlmICgheC5jb25maWcuY2xvdWQpIHsKICAgICAgeC5jb25maWcubW9kZUJhckJ1dHRvbnNUb1JlbW92ZSA9IHguY29uZmlnLm1vZGVCYXJCdXR0b25zVG9SZW1vdmUgfHwgW107CiAgICAgIHguY29uZmlnLm1vZGVCYXJCdXR0b25zVG9SZW1vdmUucHVzaCgic2VuZERhdGFUb0Nsb3VkIik7CiAgICB9CiAgICAKICAgIC8vIGlmIG5vIHBsb3QgZXhpc3RzIHlldCwgY3JlYXRlIG9uZSB3aXRoIGEgcGFydGljdWxhciBjb25maWd1cmF0aW9uCiAgICBpZiAoIWluc3RhbmNlLnBsb3RseSkgewogICAgICAKICAgICAgdmFyIHBsb3QgPSBQbG90bHkucGxvdChncmFwaERpdiwgeCk7CiAgICAgIGluc3RhbmNlLnBsb3RseSA9IHRydWU7CiAgICAgIGluc3RhbmNlLmF1dG9zaXplID0geC5sYXlvdXQuYXV0b3NpemUgfHwgdHJ1ZTsKICAgICAgaW5zdGFuY2Uud2lkdGggPSB4LmxheW91dC53aWR0aDsKICAgICAgaW5zdGFuY2UuaGVpZ2h0ID0geC5sYXlvdXQuaGVpZ2h0OwogICAgICAKICAgIH0gZWxzZSB7CiAgICAgIAogICAgICAvLyBuZXcgeCBkYXRhIGNvdWxkIGNvbnRhaW4gYSBuZXcgaGVpZ2h0L3dpZHRoLi4uCiAgICAgIC8vIGF0dGFjaCB0byBpbnN0YW5jZSBzbyB0aGF0IHJlc2l6ZSBsb2dpYyBrbm93cyBhYm91dCB0aGUgbmV3IHNpemUKICAgICAgaW5zdGFuY2Uud2lkdGggPSB4LmxheW91dC53aWR0aCB8fCBpbnN0YW5jZS53aWR0aDsKICAgICAgaW5zdGFuY2UuaGVpZ2h0ID0geC5sYXlvdXQuaGVpZ2h0IHx8IGluc3RhbmNlLmhlaWdodDsKICAgICAgCiAgICAgIC8vIHRoaXMgaXMgZXNzZW50aWFsbHkgZXF1aXZhbGVudCB0byBQbG90bHkubmV3UGxvdCgpLCBidXQgYXZvaWRzIGNyZWF0aW5nIAogICAgICAvLyBhIG5ldyB3ZWJnbCBjb250ZXh0CiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wbG90bHkvcGxvdGx5LmpzL2Jsb2IvMmIyNGY5ZGVmOTAxODMxZTYxMjgyMDc2Y2YzZjgzNTU5OGQ1NmYwZS9zcmMvcGxvdF9hcGkvcGxvdF9hcGkuanMjTDUzMS1MNTMyCgogICAgICAvLyBUT0RPOiByZXN0b3JlIGNyb3NzdGFsayBzZWxlY3Rpb25zPwogICAgICBQbG90bHkucHVyZ2UoZ3JhcGhEaXYpOwogICAgICAvLyBUT0RPOiB3aHkgaXMgdGhpcyBuZWNlc3NhcnkgdG8gZ2V0IGNyb3NzdGFsayB3b3JraW5nPwogICAgICBncmFwaERpdi5kYXRhID0gdW5kZWZpbmVkOwogICAgICBncmFwaERpdi5sYXlvdXQgPSB1bmRlZmluZWQ7CiAgICAgIHZhciBwbG90ID0gUGxvdGx5LnBsb3QoZ3JhcGhEaXYsIHgpOwogICAgICAKICAgIH0KICAgIAogICAgLy8gVHJpZ2dlciBwbG90bHkuanMgY2FsbHMgZGVmaW5lZCB2aWEgYHBsb3RseVByb3h5KClgCiAgICBwbG90LnRoZW4oZnVuY3Rpb24oKSB7CiAgICAgIGlmIChIVE1MV2lkZ2V0cy5zaGlueU1vZGUpIHsKICAgICAgICBTaGlueS5hZGRDdXN0b21NZXNzYWdlSGFuZGxlcigicGxvdGx5LWNhbGxzIiwgZnVuY3Rpb24obXNnKSB7CiAgICAgICAgICB2YXIgZ2QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChtc2cuaWQpOwogICAgICAgICAgaWYgKCFnZCkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkNvdWxkbid0IGZpbmQgcGxvdGx5IGdyYXBoIHdpdGggaWQ6ICIgKyBtc2cuaWQpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKCFQbG90bHlbbXNnLm1ldGhvZF0pIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIG1ldGhvZCAiICsgbXNnLm1ldGhvZCk7CiAgICAgICAgICB9CiAgICAgICAgICB2YXIgYXJncyA9IFtnZF0uY29uY2F0KG1zZy5hcmdzKTsKICAgICAgICAgIFBsb3RseVttc2cubWV0aG9kXS5hcHBseShudWxsLCBhcmdzKTsKICAgICAgICB9KTsKICAgICAgfQogICAgICAKICAgICAgLy8gcGxvdGx5J3MgbWFwYm94IEFQSSBkb2Vzbid0IGN1cnJlbnRseSBzdXBwb3J0IHNldHRpbmcgYm91bmRpbmcgYm94ZXMKICAgICAgLy8gaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9maXRib3VuZHMvCiAgICAgIC8vIHNvIHdlIGRvIHRoaXMgbWFudWFsbHkuLi4KICAgICAgLy8gVE9ETzogbWFrZSBzdXJlIHRoaXMgdHJpZ2dlcnMgb24gYSByZWRyYXcgYW5kIHJlbGF5b3V0IGFzIHdlbGwgYXMgb24gaW5pdGlhbCBkcmF3CiAgICAgIHZhciBtYXBib3hJRHMgPSBncmFwaERpdi5fZnVsbExheW91dC5fc3VicGxvdHMubWFwYm94IHx8IFtdOwogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1hcGJveElEcy5sZW5ndGg7IGkrKykgewogICAgICAgIHZhciBpZCA9IG1hcGJveElEc1tpXTsKICAgICAgICB2YXIgbWFwT3B0cyA9IHgubGF5b3V0W2lkXSB8fCB7fTsKICAgICAgICB2YXIgYXJncyA9IG1hcE9wdHMuX2ZpdEJvdW5kcyB8fCB7fTsKICAgICAgICBpZiAoIWFyZ3MpIHsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICB2YXIgbWFwT2JqID0gZ3JhcGhEaXYuX2Z1bGxMYXlvdXRbaWRdLl9zdWJwbG90Lm1hcDsKICAgICAgICBtYXBPYmouZml0Qm91bmRzKGFyZ3MuYm91bmRzLCBhcmdzLm9wdGlvbnMpOwogICAgICB9CiAgICAgIAogICAgfSk7CiAgICAKICAgIC8vIEF0dGFjaCBhdHRyaWJ1dGVzIChlLmcuLCAia2V5IiwgInoiKSB0byBwbG90bHkgZXZlbnQgZGF0YQogICAgZnVuY3Rpb24gZXZlbnREYXRhV2l0aEtleShldmVudERhdGEpIHsKICAgICAgaWYgKGV2ZW50RGF0YSA9PT0gdW5kZWZpbmVkIHx8ICFldmVudERhdGEuaGFzT3duUHJvcGVydHkoInBvaW50cyIpKSB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgICAgcmV0dXJuIGV2ZW50RGF0YS5wb2ludHMubWFwKGZ1bmN0aW9uKHB0KSB7CiAgICAgICAgdmFyIG9iaiA9IHsKICAgICAgICAgIGN1cnZlTnVtYmVyOiBwdC5jdXJ2ZU51bWJlciwgCiAgICAgICAgICBwb2ludE51bWJlcjogcHQucG9pbnROdW1iZXIsIAogICAgICAgICAgeDogcHQueCwKICAgICAgICAgIHk6IHB0LnkKICAgICAgICB9OwogICAgICAgIC8qIAogICAgICAgICAgVEw7RFI6IChJIHRoaW5rKSB3ZSBoYXZlIHRvIHNlbGVjdCB0aGUgZ3JhcGggZGl2IChhZ2FpbikgdG8gYXR0YWNoIGtleXMuLi4KICAgICAgICAgIAogICAgICAgICAgV2h5PyBSZW1lbWJlciB0aGF0IGNyb3NzdGFsayB3aWxsIGR5bmFtaWNhbGx5IGFkZC9kZWxldGUgdHJhY2VzIAogICAgICAgICAgKHNlZSB0cmFjZU1hbmFnZXIucHJvdG90eXBlLnVwZGF0ZVNlbGVjdGlvbigpIGJlbG93KQogICAgICAgICAgRm9yIHRoaXMgcmVhc29uLCB3ZSBjYW4ndCBzaW1wbHkgZ3JhYiBrZXlzIGZyb20geC5kYXRhIChsaWtlIHdlIGRpZCBwcmV2aW91c2x5KQogICAgICAgICAgTW9yZW92ZXIsIHdlIGNhbid0IHVzZSBfZnVsbERhdGEsIHNpbmNlIHRoYXQgZG9lc24ndCBpbmNsdWRlIAogICAgICAgICAgdW5vZmZpY2lhbCBhdHRyaWJ1dGVzLiBJdCdzIHRydWUgdGhhdCBjbGljay9ob3ZlciBldmVudHMgZmlyZSB3aXRoIAogICAgICAgICAgcHQuZGF0YSwgYnV0IGRyYWcgZXZlbnRzIGRvbid0Li4uCiAgICAgICAgKi8KICAgICAgICB2YXIgZ2QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlbC5pZCk7CiAgICAgICAgdmFyIHRyYWNlID0gZ2QuZGF0YVtwdC5jdXJ2ZU51bWJlcl07CiAgICAgICAgCiAgICAgICAgLy8gQWRkIG90aGVyIGF0dHJpYnV0ZXMgaGVyZSwgaWYgZGVzaXJlZAogICAgICAgIGlmICghdHJhY2UuX2lzU2ltcGxlS2V5KSB7CiAgICAgICAgICB2YXIgYXR0cnNUb0F0dGFjaCA9IFsia2V5IiwgInoiXTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgLy8gc2ltcGxlIGtleXMgZmlyZSB0aGUgd2hvbGUga2V5CiAgICAgICAgICBvYmoua2V5ID0gdHJhY2Uua2V5OwogICAgICAgICAgdmFyIGF0dHJzVG9BdHRhY2ggPSBbInoiXTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRyc1RvQXR0YWNoLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICB2YXIgYXR0ciA9IHRyYWNlW2F0dHJzVG9BdHRhY2hbaV1dOwogICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYXR0cikpIHsKICAgICAgICAgICAgICAvLyBwb2ludE51bWJlciBjYW4gYmUgYW4gYXJyYXkgKGUuZy4sIGhlYXRtYXBzKQogICAgICAgICAgICAgIC8vIFRPRE86IGNhbiBwb2ludE51bWJlciBiZSAzRD8KICAgICAgICAgICAgICBvYmpbYXR0cnNUb0F0dGFjaFtpXV0gPSB0eXBlb2YgcHQucG9pbnROdW1iZXIgPT09ICJudW1iZXIiID8gCiAgICAgICAgICAgICAgICBhdHRyW3B0LnBvaW50TnVtYmVyXSA6IGF0dHJbcHQucG9pbnROdW1iZXJbMF1dW3B0LnBvaW50TnVtYmVyWzFdXTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIG9iajsKICAgICAgfSk7CiAgICB9CiAgICAKICAgIC8vIHNlbmQgdXNlciBpbnB1dCBldmVudCBkYXRhIHRvIHNoaW55CiAgICBpZiAoSFRNTFdpZGdldHMuc2hpbnlNb2RlKSB7CiAgICAgIC8vIGh0dHBzOi8vcGxvdC5seS9qYXZhc2NyaXB0L3pvb20tZXZlbnRzLwogICAgICBncmFwaERpdi5vbigncGxvdGx5X3JlbGF5b3V0JywgZnVuY3Rpb24oZCkgewogICAgICAgIFNoaW55Lm9uSW5wdXRDaGFuZ2UoCiAgICAgICAgICAiLmNsaWVudFZhbHVlLXBsb3RseV9yZWxheW91dC0iICsgeC5zb3VyY2UsIAogICAgICAgICAgSlNPTi5zdHJpbmdpZnkoZCkKICAgICAgICApOwogICAgICB9KTsKICAgICAgZ3JhcGhEaXYub24oJ3Bsb3RseV9ob3ZlcicsIGZ1bmN0aW9uKGQpIHsKICAgICAgICBTaGlueS5vbklucHV0Q2hhbmdlKAogICAgICAgICAgIi5jbGllbnRWYWx1ZS1wbG90bHlfaG92ZXItIiArIHguc291cmNlLCAKICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGV2ZW50RGF0YVdpdGhLZXkoZCkpCiAgICAgICAgKTsKICAgICAgfSk7CiAgICAgIGdyYXBoRGl2Lm9uKCdwbG90bHlfY2xpY2snLCBmdW5jdGlvbihkKSB7CiAgICAgICAgU2hpbnkub25JbnB1dENoYW5nZSgKICAgICAgICAgICIuY2xpZW50VmFsdWUtcGxvdGx5X2NsaWNrLSIgKyB4LnNvdXJjZSwgCiAgICAgICAgICBKU09OLnN0cmluZ2lmeShldmVudERhdGFXaXRoS2V5KGQpKQogICAgICAgICk7CiAgICAgIH0pOwogICAgICBncmFwaERpdi5vbigncGxvdGx5X3NlbGVjdGVkJywgZnVuY3Rpb24oZCkgewogICAgICAgIFNoaW55Lm9uSW5wdXRDaGFuZ2UoCiAgICAgICAgICAiLmNsaWVudFZhbHVlLXBsb3RseV9zZWxlY3RlZC0iICsgeC5zb3VyY2UsIAogICAgICAgICAgSlNPTi5zdHJpbmdpZnkoZXZlbnREYXRhV2l0aEtleShkKSkKICAgICAgICApOwogICAgICB9KTsKICAgICAgZ3JhcGhEaXYub24oJ3Bsb3RseV91bmhvdmVyJywgZnVuY3Rpb24oZXZlbnREYXRhKSB7CiAgICAgICAgU2hpbnkub25JbnB1dENoYW5nZSgiLmNsaWVudFZhbHVlLXBsb3RseV9ob3Zlci0iICsgeC5zb3VyY2UsIG51bGwpOwogICAgICB9KTsKICAgICAgZ3JhcGhEaXYub24oJ3Bsb3RseV9kb3VibGVjbGljaycsIGZ1bmN0aW9uKGV2ZW50RGF0YSkgewogICAgICAgIFNoaW55Lm9uSW5wdXRDaGFuZ2UoIi5jbGllbnRWYWx1ZS1wbG90bHlfY2xpY2stIiArIHguc291cmNlLCBudWxsKTsKICAgICAgfSk7CiAgICAgIC8vICdwbG90bHlfZGVzZWxlY3QnIGlzIGNvZGUgZm9yIGRvdWJsZWNsaWNrIHdoZW4gaW4gc2VsZWN0IG1vZGUKICAgICAgZ3JhcGhEaXYub24oJ3Bsb3RseV9kZXNlbGVjdCcsIGZ1bmN0aW9uKGV2ZW50RGF0YSkgewogICAgICAgIFNoaW55Lm9uSW5wdXRDaGFuZ2UoIi5jbGllbnRWYWx1ZS1wbG90bHlfc2VsZWN0ZWQtIiArIHguc291cmNlLCBudWxsKTsKICAgICAgICBTaGlueS5vbklucHV0Q2hhbmdlKCIuY2xpZW50VmFsdWUtcGxvdGx5X2NsaWNrLSIgKyB4LnNvdXJjZSwgbnVsbCk7CiAgICAgIH0pOwogICAgfSAKICAgIAogICAgCiAgICAvLyBzZW5kIHVzZXIgaW5wdXQgZXZlbnQgZGF0YSB0byBkYXNoUgogICAgLy8gVE9ETzogbWFrZSB0aGlzIG1vcmUgY29uc2lzdGVudCB3aXRoIEdyYXBoKCkgcHJvcHM/CiAgICB2YXIgZGFzaFJ3aWRnZXRzID0gd2luZG93LmRhc2hSd2lkZ2V0cyB8fCB7fTsKICAgIHZhciBkYXNoUm1vZGUgPSB0eXBlb2YgZWwuc2V0UHJvcHMgPT09ICJmdW5jdGlvbiIgJiYKICAgICAgICAgICAgICAgICAgICB0eXBlb2YgZGFzaFJ3aWRnZXRzLmh0bWx3aWRnZXQgPT09ICJmdW5jdGlvbiI7CiAgICBpZiAoZGFzaFJtb2RlKSB7CiAgICAgIGdyYXBoRGl2Lm9uKCdwbG90bHlfcmVsYXlvdXQnLCBmdW5jdGlvbihkKSB7CiAgICAgICAgZWwuc2V0UHJvcHMoeyJpbnB1dF9wbG90bHlfcmVsYXlvdXQiOiBkfSk7CiAgICAgIH0pOwogICAgICBncmFwaERpdi5vbigncGxvdGx5X2hvdmVyJywgZnVuY3Rpb24oZCkgewogICAgICAgIGVsLnNldFByb3BzKHsiaW5wdXRfcGxvdGx5X2hvdmVyIjogZXZlbnREYXRhV2l0aEtleShkKX0pOwogICAgICB9KTsKICAgICAgZ3JhcGhEaXYub24oJ3Bsb3RseV9jbGljaycsIGZ1bmN0aW9uKGQpIHsKICAgICAgICBlbC5zZXRQcm9wcyh7ImlucHV0X3Bsb3RseV9jbGljayI6IGV2ZW50RGF0YVdpdGhLZXkoZCl9KTsKICAgICAgfSk7CiAgICAgIGdyYXBoRGl2Lm9uKCdwbG90bHlfc2VsZWN0ZWQnLCBmdW5jdGlvbihkKSB7CiAgICAgICAgZWwuc2V0UHJvcHMoeyJpbnB1dF9wbG90bHlfc2VsZWN0ZWQiOiBldmVudERhdGFXaXRoS2V5KGQpfSk7CiAgICAgIH0pOwogICAgICBncmFwaERpdi5vbigncGxvdGx5X3VuaG92ZXInLCBmdW5jdGlvbihldmVudERhdGEpIHsKICAgICAgICBlbC5zZXRQcm9wcyh7ImlucHV0X3Bsb3RseV9ob3ZlciI6IG51bGx9KTsKICAgICAgfSk7CiAgICAgIGdyYXBoRGl2Lm9uKCdwbG90bHlfZG91YmxlY2xpY2snLCBmdW5jdGlvbihldmVudERhdGEpIHsKICAgICAgICBlbC5zZXRQcm9wcyh7ImlucHV0X3Bsb3RseV9jbGljayI6IG51bGx9KTsKICAgICAgfSk7CiAgICAgIC8vICdwbG90bHlfZGVzZWxlY3QnIGlzIGNvZGUgZm9yIGRvdWJsZWNsaWNrIHdoZW4gaW4gc2VsZWN0IG1vZGUKICAgICAgZ3JhcGhEaXYub24oJ3Bsb3RseV9kZXNlbGVjdCcsIGZ1bmN0aW9uKGV2ZW50RGF0YSkgewogICAgICAgIGVsLnNldFByb3BzKHsiaW5wdXRfcGxvdGx5X3NlbGVjdGVkIjogbnVsbH0pOwogICAgICAgIGVsLnNldFByb3BzKHsiaW5wdXRfcGxvdGx5X2NsaWNrIjogbnVsbH0pOwogICAgICB9KTsKICAgIH0gCiAgICAKICAgIAogICAgLy8gR2l2ZW4gYW4gYXJyYXkgb2Yge2N1cnZlTnVtYmVyOiB4LCBwb2ludE51bWJlcjogeX0gb2JqZWN0cywKICAgIC8vIHJldHVybiBhIGhhc2ggb2YgewogICAgLy8gICBzZXQxOiB7dmFsdWU6IFtrZXkxLCBrZXkyLCAuLi5dLCBfaXNTaW1wbGVLZXk6IGZhbHNlfSwgCiAgICAvLyAgIHNldDI6IHt2YWx1ZTogW2tleTMsIGtleTQsIC4uLl0sIF9pc1NpbXBsZUtleTogZmFsc2V9CiAgICAvLyB9CiAgICBmdW5jdGlvbiBwb2ludHNUb0tleXMocG9pbnRzKSB7CiAgICAgIHZhciBrZXlzQnlTZXQgPSB7fTsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAKICAgICAgICB2YXIgdHJhY2UgPSBncmFwaERpdi5kYXRhW3BvaW50c1tpXS5jdXJ2ZU51bWJlcl07CiAgICAgICAgaWYgKCF0cmFjZS5rZXkgfHwgIXRyYWNlLnNldCkgewogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8vIHNldCBkZWZhdWx0cyBmb3IgdGhpcyBrZXlTZXQKICAgICAgICAvLyBub3RlIHRoYXQgd2UgZG9uJ3QgdHJhY2sgdGhlIG5lc3RlZCBwcm9wZXJ0eSAoeWV0KSBzaW5jZSB3ZSBhbHdheXMgCiAgICAgICAgLy8gZW1pdCB0aGUgdW5pb24gLS0gaHR0cDovL2Nwc2lldmVydC5naXRodWIuaW8vdGFsa3MvMjAxNjEyMTJiLyMyMQogICAgICAgIGtleXNCeVNldFt0cmFjZS5zZXRdID0ga2V5c0J5U2V0W3RyYWNlLnNldF0gfHwgewogICAgICAgICAgdmFsdWU6IFtdLAogICAgICAgICAgX2lzU2ltcGxlS2V5OiB0cmFjZS5faXNTaW1wbGVLZXkKICAgICAgICB9OwogICAgICAgIAogICAgICAgIC8vIFVzZSBwb2ludE51bWJlciBieSBkZWZhdWx0LCBidXQgYWdncmVnYXRlZCB0cmFjZXMgc2hvdWxkIGVtaXQgcG9pbnROdW1iZXJzCiAgICAgICAgdmFyIHB0TnVtID0gcG9pbnRzW2ldLnBvaW50TnVtYmVyOwogICAgICAgIHZhciBoYXNQdE51bSA9IHR5cGVvZiBwdE51bSA9PT0gIm51bWJlciI7CiAgICAgICAgdmFyIHB0TnVtID0gaGFzUHROdW0gPyBwdE51bSA6IHBvaW50c1tpXS5wb2ludE51bWJlcnM7CiAgICAgICAgCiAgICAgICAgLy8gc2VsZWN0aW5nIGEgcG9pbnQgb2YgYSAic2ltcGxlIiB0cmFjZSBtZWFuczogc2VsZWN0IHRoZSAKICAgICAgICAvLyBlbnRpcmUga2V5IGF0dGFjaGVkIHRvIHRoaXMgdHJhY2UsIHdoaWNoIGlzIHVzZWZ1bCBmb3IsCiAgICAgICAgLy8gc2F5IGNsaWNraW5nIG9uIGEgZml0dGVkIGxpbmUgdG8gc2VsZWN0IGNvcnJlc3BvbmRpbmcgb2JzZXJ2YXRpb25zIAogICAgICAgIHZhciBrZXkgPSB0cmFjZS5faXNTaW1wbGVLZXkgPyB0cmFjZS5rZXkgOiBBcnJheS5pc0FycmF5KHB0TnVtKSA/IHB0TnVtLm1hcChmdW5jdGlvbihpZHgpIHsgcmV0dXJuIHRyYWNlLmtleVtpZHhdOyB9KSA6IHRyYWNlLmtleVtwdE51bV07CiAgICAgICAgLy8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xMDg2NTAyNS9tZXJnZS1mbGF0dGVuLWFuLWFycmF5LW9mLWFycmF5cy1pbi1qYXZhc2NyaXB0CiAgICAgICAgdmFyIGtleUZsYXQgPSB0cmFjZS5faXNOZXN0ZWRLZXkgPyBbXS5jb25jYXQuYXBwbHkoW10sIGtleSkgOiBrZXk7CiAgICAgICAgCiAgICAgICAgLy8gVE9ETzogYmV0dGVyIHRvIG9ubHkgYWRkIG5ldyB2YWx1ZXM/CiAgICAgICAga2V5c0J5U2V0W3RyYWNlLnNldF0udmFsdWUgPSBrZXlzQnlTZXRbdHJhY2Uuc2V0XS52YWx1ZS5jb25jYXQoa2V5RmxhdCk7CiAgICAgIH0KICAgICAgCiAgICAgIHJldHVybiBrZXlzQnlTZXQ7CiAgICB9CiAgICAKICAgIAogICAgeC5oaWdobGlnaHQuY29sb3IgPSB4LmhpZ2hsaWdodC5jb2xvciB8fCBbXTsKICAgIC8vIG1ha2Ugc3VyZSBoaWdobGlnaHQgY29sb3IgaXMgYW4gYXJyYXkKICAgIGlmICghQXJyYXkuaXNBcnJheSh4LmhpZ2hsaWdodC5jb2xvcikpIHsKICAgICAgeC5oaWdobGlnaHQuY29sb3IgPSBbeC5oaWdobGlnaHQuY29sb3JdOwogICAgfQoKICAgIHZhciB0cmFjZU1hbmFnZXIgPSBuZXcgVHJhY2VNYW5hZ2VyKGdyYXBoRGl2LCB4LmhpZ2hsaWdodCk7CgogICAgLy8gR2F0aGVyIGFsbCAqdW5pcXVlKiBzZXRzLgogICAgdmFyIGFsbFNldHMgPSBbXTsKICAgIGZvciAodmFyIGN1cnZlSWR4ID0gMDsgY3VydmVJZHggPCB4LmRhdGEubGVuZ3RoOyBjdXJ2ZUlkeCsrKSB7CiAgICAgIHZhciBuZXdTZXQgPSB4LmRhdGFbY3VydmVJZHhdLnNldDsKICAgICAgaWYgKG5ld1NldCkgewogICAgICAgIGlmIChhbGxTZXRzLmluZGV4T2YobmV3U2V0KSA9PT0gLTEpIHsKICAgICAgICAgIGFsbFNldHMucHVzaChuZXdTZXQpOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIC8vIHJlZ2lzdGVyIGV2ZW50IGxpc3RlbmVycyBmb3IgYWxsIHNldHMKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWxsU2V0cy5sZW5ndGg7IGkrKykgewogICAgICAKICAgICAgdmFyIHNldCA9IGFsbFNldHNbaV07CiAgICAgIHZhciBzZWxlY3Rpb24gPSBuZXcgY3Jvc3N0YWxrLlNlbGVjdGlvbkhhbmRsZShzZXQpOwogICAgICB2YXIgZmlsdGVyID0gbmV3IGNyb3NzdGFsay5GaWx0ZXJIYW5kbGUoc2V0KTsKICAgICAgCiAgICAgIHZhciBmaWx0ZXJDaGFuZ2UgPSBmdW5jdGlvbihlKSB7CiAgICAgICAgcmVtb3ZlQnJ1c2goZWwpOwogICAgICAgIHRyYWNlTWFuYWdlci51cGRhdGVGaWx0ZXIoc2V0LCBlLnZhbHVlKTsKICAgICAgfTsKICAgICAgZmlsdGVyLm9uKCJjaGFuZ2UiLCBmaWx0ZXJDaGFuZ2UpOwogICAgICAKICAgICAgCiAgICAgIHZhciBzZWxlY3Rpb25DaGFuZ2UgPSBmdW5jdGlvbihlKSB7CiAgICAgICAgCiAgICAgICAgLy8gV29ya2Fyb3VuZCBmb3IgJ3Bsb3RseV9zZWxlY3RlZCcgbm93IGZpcmluZyBwcmV2aW91c2x5IHNlbGVjdGVkCiAgICAgICAgLy8gcG9pbnRzIChpbiBhZGRpdGlvbiB0byBuZXcgb25lcykgd2hlbiBob2xkaW5nIHNoaWZ0IGtleS4gSW4gb3VyIGNhc2UsCiAgICAgICAgLy8gd2UganVzdCB3YW50IHRoZSBuZXcga2V5cyAKICAgICAgICBpZiAoeC5oaWdobGlnaHQub24gPT09ICJwbG90bHlfc2VsZWN0ZWQiICYmIHguaGlnaGxpZ2h0LnBlcnNpc3RlbnRTaGlmdCkgewogICAgICAgICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTE4NzUxOC9ob3ctdG8tZ2V0LXRoZS1kaWZmZXJlbmNlLWJldHdlZW4tdHdvLWFycmF5cy1pbi1qYXZhc2NyaXB0CiAgICAgICAgICBBcnJheS5wcm90b3R5cGUuZGlmZiA9IGZ1bmN0aW9uKGEpIHsKICAgICAgICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oaSkge3JldHVybiBhLmluZGV4T2YoaSkgPCAwO30pOwogICAgICAgICAgfTsKICAgICAgICAgIGUudmFsdWUgPSBlLnZhbHVlLmRpZmYoZS5vbGRWYWx1ZSk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8vIGFycmF5IG9mICJldmVudCBvYmplY3RzIiB0cmFja2luZyB0aGUgc2VsZWN0aW9uIGhpc3RvcnkKICAgICAgICAvLyB0aGlzIGlzIHVzZWQgdG8gYXZvaWQgYWRkaW5nIHJlZHVuZGFudCBzZWxlY3Rpb25zCiAgICAgICAgdmFyIHNlbGVjdGlvbkhpc3RvcnkgPSBjcm9zc3RhbGsudmFyKCJwbG90bHlTZWxlY3Rpb25IaXN0b3J5IikuZ2V0KCkgfHwgW107CiAgICAgICAgCiAgICAgICAgLy8gQ29uc3RydWN0IGFuIGV2ZW50IG9iamVjdCAiZGVmaW5pbmciIHRoZSBjdXJyZW50IGV2ZW50LiAKICAgICAgICB2YXIgZXZlbnQgPSB7CiAgICAgICAgICByZWNlaXZlcklEOiB0cmFjZU1hbmFnZXIuZ2QuaWQsCiAgICAgICAgICBwbG90bHlTZWxlY3Rpb25Db2xvdXI6IGNyb3NzdGFsay5ncm91cChzZXQpLnZhcigicGxvdGx5U2VsZWN0aW9uQ29sb3VyIikuZ2V0KCkKICAgICAgICB9OwogICAgICAgIGV2ZW50W3NldF0gPSBlLnZhbHVlOwogICAgICAgIC8vIFRPRE86IGlzIHRoZXJlIGEgc21hcnRlciB3YXkgdG8gY2hlY2sgb2JqZWN0IGVxdWFsaXR5PwogICAgICAgIGlmIChzZWxlY3Rpb25IaXN0b3J5Lmxlbmd0aCA+IDApIHsKICAgICAgICAgIHZhciBldiA9IEpTT04uc3RyaW5naWZ5KGV2ZW50KTsKICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VsZWN0aW9uSGlzdG9yeS5sZW5ndGg7IGkrKykgewogICAgICAgICAgICB2YXIgc2VsID0gSlNPTi5zdHJpbmdpZnkoc2VsZWN0aW9uSGlzdG9yeVtpXSk7CiAgICAgICAgICAgIGlmIChzZWwgPT0gZXYpIHsKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLy8gYWNjdW11bGF0ZSBoaXN0b3J5IGZvciBwZXJzaXN0ZW50IHNlbGVjdGlvbgogICAgICAgIGlmICgheC5oaWdobGlnaHQucGVyc2lzdGVudCkgewogICAgICAgICAgc2VsZWN0aW9uSGlzdG9yeSA9IFtldmVudF07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHNlbGVjdGlvbkhpc3RvcnkucHVzaChldmVudCk7CiAgICAgICAgfQogICAgICAgIGNyb3NzdGFsay52YXIoInBsb3RseVNlbGVjdGlvbkhpc3RvcnkiKS5zZXQoc2VsZWN0aW9uSGlzdG9yeSk7CiAgICAgICAgCiAgICAgICAgLy8gZG8gdGhlIGFjdHVhbCB1cGRhdGluZyBvZiB0cmFjZXMsIGZyYW1lcywgYW5kIHRoZSBzZWxlY3RpemUgd2lkZ2V0CiAgICAgICAgdHJhY2VNYW5hZ2VyLnVwZGF0ZVNlbGVjdGlvbihzZXQsIGUudmFsdWUpOwogICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zZWxlY3RpemUvc2VsZWN0aXplLmpzL2Jsb2IvbWFzdGVyL2RvY3MvYXBpLm1kI21ldGhvZHNfaXRlbXMKICAgICAgICBpZiAoeC5zZWxlY3RpemUpIHsKICAgICAgICAgIGlmICgheC5oaWdobGlnaHQucGVyc2lzdGVudCB8fCBlLnZhbHVlID09PSBudWxsKSB7CiAgICAgICAgICAgIHNlbGVjdGl6ZS5jbGVhcih0cnVlKTsKICAgICAgICAgIH0KICAgICAgICAgIHNlbGVjdGl6ZS5hZGRJdGVtcyhlLnZhbHVlLCB0cnVlKTsKICAgICAgICAgIHNlbGVjdGl6ZS5jbG9zZSgpOwogICAgICAgIH0KICAgICAgfQogICAgICBzZWxlY3Rpb24ub24oImNoYW5nZSIsIHNlbGVjdGlvbkNoYW5nZSk7CiAgICAgIAogICAgICAvLyBTZXQgYSBjcm9zc3RhbGsgdmFyaWFibGUgc2VsZWN0aW9uIHZhbHVlLCB0cmlnZ2VyaW5nIGFuIHVwZGF0ZQogICAgICB2YXIgdHVybk9uID0gZnVuY3Rpb24oZSkgewogICAgICAgIGlmIChlKSB7CiAgICAgICAgICB2YXIgc2VsZWN0ZWRLZXlzID0gcG9pbnRzVG9LZXlzKGUucG9pbnRzKTsKICAgICAgICAgIC8vIEtleXMgYXJlIGdyb3VwIG5hbWVzLCB2YWx1ZXMgYXJlIGFycmF5IG9mIHNlbGVjdGVkIGtleXMgZnJvbSBncm91cC4KICAgICAgICAgIGZvciAodmFyIHNldCBpbiBzZWxlY3RlZEtleXMpIHsKICAgICAgICAgICAgaWYgKHNlbGVjdGVkS2V5cy5oYXNPd25Qcm9wZXJ0eShzZXQpKSB7CiAgICAgICAgICAgICAgc2VsZWN0aW9uLnNldChzZWxlY3RlZEtleXNbc2V0XS52YWx1ZSwge3NlbmRlcjogZWx9KTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfTsKICAgICAgaWYgKHguaGlnaGxpZ2h0LmRlYm91bmNlID4gMCkgewogICAgICAgIHR1cm5PbiA9IGRlYm91bmNlKHR1cm5PbiwgeC5oaWdobGlnaHQuZGVib3VuY2UpOwogICAgICB9CiAgICAgIGdyYXBoRGl2Lm9uKHguaGlnaGxpZ2h0Lm9uLCB0dXJuT24pOwogICAgICAKICAgICAgZ3JhcGhEaXYub24oeC5oaWdobGlnaHQub2ZmLCBmdW5jdGlvbiB0dXJuT2ZmKGUpIHsKICAgICAgICAvLyByZW1vdmUgYW55IHZpc3VhbCBjbHVlcwogICAgICAgIHJlbW92ZUJydXNoKGVsKTsKICAgICAgICAvLyByZW1vdmUgYW55IHNlbGVjdGlvbiBoaXN0b3J5CiAgICAgICAgY3Jvc3N0YWxrLnZhcigicGxvdGx5U2VsZWN0aW9uSGlzdG9yeSIpLnNldChudWxsKTsKICAgICAgICAvLyB0cmlnZ2VyIHRoZSBhY3R1YWwgcmVtb3ZhbCBvZiBzZWxlY3Rpb24gdHJhY2VzCiAgICAgICAgc2VsZWN0aW9uLnNldChudWxsLCB7c2VuZGVyOiBlbH0pOwogICAgICB9KTsKICAgICAgICAgIAogICAgICAvLyByZWdpc3RlciBhIGNhbGxiYWNrIGZvciBzZWxlY3RpemUgc28gdGhhdCB0aGVyZSBpcyBiaS1kaXJlY3Rpb25hbAogICAgICAvLyBjb21tdW5pY2F0aW9uIGJldHdlZW4gdGhlIHdpZGdldCBhbmQgZGlyZWN0IG1hbmlwdWxhdGlvbiBldmVudHMKICAgICAgaWYgKHguc2VsZWN0aXplKSB7CiAgICAgICAgdmFyIHNlbGVjdGl6ZUlEID0gT2JqZWN0LmtleXMoeC5zZWxlY3RpemUpW2ldOwogICAgICAgIHZhciBpdGVtcyA9IHguc2VsZWN0aXplW3NlbGVjdGl6ZUlEXS5pdGVtczsKICAgICAgICB2YXIgZmlyc3QgPSBbe3ZhbHVlOiAiIiwgbGFiZWw6ICIoQWxsKSJ9XTsKICAgICAgICB2YXIgb3B0cyA9IHsKICAgICAgICAgIG9wdGlvbnM6IGZpcnN0LmNvbmNhdChpdGVtcyksCiAgICAgICAgICBzZWFyY2hGaWVsZDogImxhYmVsIiwKICAgICAgICAgIHZhbHVlRmllbGQ6ICJ2YWx1ZSIsCiAgICAgICAgICBsYWJlbEZpZWxkOiAibGFiZWwiLAogICAgICAgICAgbWF4SXRlbXM6IDUwCiAgICAgICAgfTsKICAgICAgICB2YXIgc2VsZWN0ID0gJCgiIyIgKyBzZWxlY3RpemVJRCkuZmluZCgic2VsZWN0IilbMF07CiAgICAgICAgdmFyIHNlbGVjdGl6ZSA9ICQoc2VsZWN0KS5zZWxlY3RpemUob3B0cylbMF0uc2VsZWN0aXplOwogICAgICAgIC8vIE5PVEU6IHRoaXMgY2FsbGJhY2sgaXMgdHJpZ2dlcmVkIHdoZW4gKmRpcmVjdGx5KiBhbHRlcmluZyAKICAgICAgICAvLyBkcm9wZG93biBpdGVtcwogICAgICAgIHNlbGVjdGl6ZS5vbigiY2hhbmdlIiwgZnVuY3Rpb24oKSB7CiAgICAgICAgICB2YXIgY3VycmVudEl0ZW1zID0gdHJhY2VNYW5hZ2VyLmdyb3VwU2VsZWN0aW9uc1tzZXRdIHx8IFtdOwogICAgICAgICAgaWYgKCF4LmhpZ2hsaWdodC5wZXJzaXN0ZW50KSB7CiAgICAgICAgICAgIHJlbW92ZUJydXNoKGVsKTsKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjdXJyZW50SXRlbXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICBzZWxlY3RpemUucmVtb3ZlSXRlbShjdXJyZW50SXRlbXNbaV0sIHRydWUpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICB2YXIgbmV3SXRlbXMgPSBzZWxlY3RpemUuaXRlbXMuZmlsdGVyKGZ1bmN0aW9uKGlkeCkgeyAKICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRJdGVtcy5pbmRleE9mKGlkeCkgPCAwOwogICAgICAgICAgfSk7CiAgICAgICAgICBpZiAobmV3SXRlbXMubGVuZ3RoID4gMCkgewogICAgICAgICAgICB0cmFjZU1hbmFnZXIudXBkYXRlU2VsZWN0aW9uKHNldCwgbmV3SXRlbXMpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gSXRlbSBoYXMgYmVlbiByZW1vdmVkLi4uCiAgICAgICAgICAgIC8vIFRPRE86IHRoaXMgbG9naWMgd29uJ3Qgd29yayBmb3IgZHluYW1pY2FsbHkgY2hhbmdpbmcgcGFsZXR0ZSAKICAgICAgICAgICAgdHJhY2VNYW5hZ2VyLnVwZGF0ZVNlbGVjdGlvbihzZXQsIG51bGwpOwogICAgICAgICAgICB0cmFjZU1hbmFnZXIudXBkYXRlU2VsZWN0aW9uKHNldCwgc2VsZWN0aXplLml0ZW1zKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgfSAvLyBlbmQgb2Ygc2VsZWN0aW9uQ2hhbmdlCiAgICAKICB9IC8vIGVuZCBvZiByZW5kZXJWYWx1ZQp9KTsgLy8gZW5kIG9mIHdpZGdldCBkZWZpbml0aW9uCgovKioKICogQHBhcmFtIGdyYXBoRGl2IFRoZSBQbG90bHkgZ3JhcGggZGl2CiAqIEBwYXJhbSBoaWdobGlnaHQgQW4gb2JqZWN0IHdpdGggb3B0aW9ucyBmb3IgdXBkYXRpbmcgc2VsZWN0aW9uKHMpCiAqLwpmdW5jdGlvbiBUcmFjZU1hbmFnZXIoZ3JhcGhEaXYsIGhpZ2hsaWdodCkgewogIC8vIFRoZSBQbG90bHkgZ3JhcGggZGl2CiAgdGhpcy5nZCA9IGdyYXBoRGl2OwoKICAvLyBQcmVzZXJ2ZSB0aGUgb3JpZ2luYWwgZGF0YS4KICAvLyBUT0RPOiB0cnkgdXNpbmcgTGliLmV4dGVuZEZsYXQoKSBhcyBkb25lIGluICAKICAvLyBodHRwczovL2dpdGh1Yi5jb20vcGxvdGx5L3Bsb3RseS5qcy9wdWxsLzExMzYgCiAgdGhpcy5vcmlnRGF0YSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZ3JhcGhEaXYuZGF0YSkpOwogIAogIC8vIGF2b2lkIGRvaW5nIHRoaXMgb3ZlciBhbmQgb3ZlcgogIHRoaXMub3JpZ09wYWNpdHkgPSBbXTsKICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMub3JpZ0RhdGEubGVuZ3RoOyBpKyspIHsKICAgIHRoaXMub3JpZ09wYWNpdHlbaV0gPSB0aGlzLm9yaWdEYXRhW2ldLm9wYWNpdHkgfHwgMTsKICB9CgogIC8vIGtleTogZ3JvdXAgbmFtZSwgdmFsdWU6IG51bGwgb3IgYXJyYXkgb2Yga2V5cyByZXByZXNlbnRpbmcgdGhlCiAgLy8gbW9zdCByZWNlbnRseSByZWNlaXZlZCBzZWxlY3Rpb24gZm9yIHRoYXQgZ3JvdXAuCiAgdGhpcy5ncm91cFNlbGVjdGlvbnMgPSB7fTsKICAKICAvLyBzZWxlY3Rpb24gcGFyYW1ldGVycyAoZS5nLiwgdHJhbnNpZW50IHZlcnN1cyBwZXJzaXN0ZW50IHNlbGVjdGlvbikKICB0aGlzLmhpZ2hsaWdodCA9IGhpZ2hsaWdodDsKfQoKVHJhY2VNYW5hZ2VyLnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uKCkgewogIC8vIFRPRE86IFVuaG9vayBhbGwgZXZlbnQgaGFuZGxlcnMKfTsKClRyYWNlTWFuYWdlci5wcm90b3R5cGUudXBkYXRlRmlsdGVyID0gZnVuY3Rpb24oZ3JvdXAsIGtleXMpIHsKCiAgaWYgKHR5cGVvZihrZXlzKSA9PT0gInVuZGVmaW5lZCIgfHwga2V5cyA9PT0gbnVsbCkgewogICAgCiAgICB0aGlzLmdkLmRhdGEgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMub3JpZ0RhdGEpKTsKICAgIAogIH0gZWxzZSB7CiAgCiAgICB2YXIgdHJhY2VzID0gW107CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMub3JpZ0RhdGEubGVuZ3RoOyBpKyspIHsKICAgICAgdmFyIHRyYWNlID0gdGhpcy5vcmlnRGF0YVtpXTsKICAgICAgaWYgKCF0cmFjZS5rZXkgfHwgdHJhY2Uuc2V0ICE9PSBncm91cCkgewogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIHZhciBtYXRjaEZ1bmMgPSBnZXRNYXRjaEZ1bmModHJhY2UpOwogICAgICB2YXIgbWF0Y2hlcyA9IG1hdGNoRnVuYyh0cmFjZS5rZXksIGtleXMpOwogICAgICAKICAgICAgaWYgKG1hdGNoZXMubGVuZ3RoID4gMCkgewogICAgICAgIGlmICghdHJhY2UuX2lzU2ltcGxlS2V5KSB7CiAgICAgICAgICAvLyBzdWJzZXRBcnJheUF0dHJzIGRvZXNuJ3QgbXV0YXRlIHRyYWNlIChpdCBtYWtlcyBhIG1vZGlmaWVkIGNsb25lKQogICAgICAgICAgdHJhY2UgPSBzdWJzZXRBcnJheUF0dHJzKHRyYWNlLCBtYXRjaGVzKTsKICAgICAgICB9CiAgICAgICAgdHJhY2VzLnB1c2godHJhY2UpOwogICAgICB9CiAgICB9CiAgfQogIAogIHRoaXMuZ2QuZGF0YSA9IHRyYWNlczsKICBQbG90bHkucmVkcmF3KHRoaXMuZ2QpOwogIAogIC8vIE5PVEU6IHdlIHB1cnBvc2VseSBkbyBfbm90XyByZXN0b3JlIHNlbGVjdGlvbihzKSwgc2luY2Ugb24gZmlsdGVyLAogIC8vIGF4aXMgbGlrZWx5IHdpbGwgdXBkYXRlLCBjaGFuZ2luZyB0aGUgcGl4ZWwgLT4gZGF0YSBtYXBwaW5nLCBsZWFkaW5nIAogIC8vIHRvIGEgbGlrZWx5IG1pc21hdGNoIGluIHRoZSBicnVzaCBvdXRsaW5lIGFuZCBoaWdobGlnaHRlZCBtYXJrcwogIAp9OwoKVHJhY2VNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGVTZWxlY3Rpb24gPSBmdW5jdGlvbihncm91cCwga2V5cykgewogIAogIGlmIChrZXlzICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KGtleXMpKSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQga2V5cyBhcmd1bWVudDsgbnVsbCBvciBhcnJheSBleHBlY3RlZCIpOwogIH0KICAKICAvLyBpZiBzZWxlY3Rpb24gaGFzIGJlZW4gY2xlYXJlZCwgb3IgaWYgdGhpcyBpcyB0cmFuc2llbnQKICAvLyBzZWxlY3Rpb24sIGRlbGV0ZSB0aGUgInNlbGVjdGlvbiB0cmFjZXMiCiAgdmFyIG5OZXdUcmFjZXMgPSB0aGlzLmdkLmRhdGEubGVuZ3RoIC0gdGhpcy5vcmlnRGF0YS5sZW5ndGg7CiAgaWYgKGtleXMgPT09IG51bGwgfHwgIXRoaXMuaGlnaGxpZ2h0LnBlcnNpc3RlbnQgJiYgbk5ld1RyYWNlcyA+IDApIHsKICAgIHZhciB0cmFjZXNUb1JlbW92ZSA9IFtdOwogICAgZm9yICh2YXIgaSA9IHRoaXMub3JpZ0RhdGEubGVuZ3RoOyBpIDwgdGhpcy5nZC5kYXRhLmxlbmd0aDsgaSsrKSB7CiAgICAgIHRyYWNlc1RvUmVtb3ZlLnB1c2goaSk7CiAgICB9CiAgICBQbG90bHkuZGVsZXRlVHJhY2VzKHRoaXMuZ2QsIHRyYWNlc1RvUmVtb3ZlKTsKICAgIHRoaXMuZ3JvdXBTZWxlY3Rpb25zW2dyb3VwXSA9IGtleXM7CiAgfSBlbHNlIHsKICAgIC8vIGFkZCB0byB0aGUgZ3JvdXBTZWxlY3Rpb24sIHJhdGhlciB0aGFuIG92ZXJ3cml0aW5nIGl0CiAgICAvLyBUT0RPOiBjYW4gdGhpcyBiZSByZW1vdmVkPwogICAgdGhpcy5ncm91cFNlbGVjdGlvbnNbZ3JvdXBdID0gdGhpcy5ncm91cFNlbGVjdGlvbnNbZ3JvdXBdIHx8IFtdOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBrID0ga2V5c1tpXTsKICAgICAgaWYgKHRoaXMuZ3JvdXBTZWxlY3Rpb25zW2dyb3VwXS5pbmRleE9mKGspIDwgMCkgewogICAgICAgIHRoaXMuZ3JvdXBTZWxlY3Rpb25zW2dyb3VwXS5wdXNoKGspOwogICAgICB9CiAgICB9CiAgfQogIAogIGlmIChrZXlzID09PSBudWxsKSB7CiAgICAKICAgIFBsb3RseS5yZXN0eWxlKHRoaXMuZ2QsIHsib3BhY2l0eSI6IHRoaXMub3JpZ09wYWNpdHl9KTsKICAgIAogIH0gZWxzZSBpZiAoa2V5cy5sZW5ndGggPj0gMSkgewogICAgCiAgICAvLyBwbGFjZWhvbGRlciBmb3IgbmV3ICJzZWxlY3Rpb24gdHJhY2VzIgogICAgdmFyIHRyYWNlcyA9IFtdOwogICAgLy8gdGhpcyB2YXJpYWJsZSBpcyBzZXQgaW4gUi9oaWdobGlnaHQuUgogICAgdmFyIHNlbGVjdGlvbkNvbG91ciA9IGNyb3NzdGFsay5ncm91cChncm91cCkudmFyKCJwbG90bHlTZWxlY3Rpb25Db2xvdXIiKS5nZXQoKSB8fCAKICAgICAgdGhpcy5oaWdobGlnaHQuY29sb3JbMF07CgogICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm9yaWdEYXRhLmxlbmd0aDsgaSsrKSB7CiAgICAgIC8vIFRPRE86IHRyeSB1c2luZyBMaWIuZXh0ZW5kRmxhdCgpIGFzIGRvbmUgaW4gIAogICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vcGxvdGx5L3Bsb3RseS5qcy9wdWxsLzExMzYgCiAgICAgIHZhciB0cmFjZSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5nZC5kYXRhW2ldKSk7CiAgICAgIGlmICghdHJhY2Uua2V5IHx8IHRyYWNlLnNldCAhPT0gZ3JvdXApIHsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICAvLyBHZXQgc29ydGVkIGFycmF5IG9mIG1hdGNoaW5nIGluZGljZXMgaW4gdHJhY2Uua2V5CiAgICAgIHZhciBtYXRjaEZ1bmMgPSBnZXRNYXRjaEZ1bmModHJhY2UpOwogICAgICB2YXIgbWF0Y2hlcyA9IG1hdGNoRnVuYyh0cmFjZS5rZXksIGtleXMpOwogICAgICAKICAgICAgaWYgKG1hdGNoZXMubGVuZ3RoID4gMCkgewogICAgICAgIC8vIElmIHRoaXMgaXMgYSAic2ltcGxlIiBrZXksIHRoYXQgbWVhbnMgc2VsZWN0IHRoZSBlbnRpcmUgdHJhY2UKICAgICAgICBpZiAoIXRyYWNlLl9pc1NpbXBsZUtleSkgewogICAgICAgICAgdHJhY2UgPSBzdWJzZXRBcnJheUF0dHJzKHRyYWNlLCBtYXRjaGVzKTsKICAgICAgICB9CiAgICAgICAgLy8gcmVhY2ggaW50byB0aGUgZnVsbCB0cmFjZSBvYmplY3Qgc28gd2UgY2FuIHByb3Blcmx5IHJlZmxlY3QgdGhlIAogICAgICAgIC8vIHNlbGVjdGlvbiBhdHRyaWJ1dGVzIGluIGV2ZXJ5IHZpZXcKICAgICAgICB2YXIgZCA9IHRoaXMuZ2QuX2Z1bGxEYXRhW2ldOwogICAgICAgIAogICAgICAgIC8qIAogICAgICAgIC8gUmVjdXJzaXZlbHkgaW5oZXJpdCBzZWxlY3Rpb24gYXR0cmlidXRlcyBmcm9tIHZhcmlvdXMgc291cmNlcywgCiAgICAgICAgLyBpbiBvcmRlciBvZiBwcmVmZXJlbmNlOgogICAgICAgIC8gICgxKSBvZmZpY2lhbCBwbG90bHkuanMgc2VsZWN0ZWQgYXR0cmlidXRlCiAgICAgICAgLyAgKDIpIGhpZ2hsaWdodChzZWxlY3RlZCA9IGF0dHJzX3NlbGVjdGVkKC4uLikpCiAgICAgICAgKi8KICAgICAgICAvLyBUT0RPOiBpdCB3b3VsZCBiZSBuZWF0IHRvIGhhdmUgYSBkcm9wZG93biB0byBkeW5hbWljYWxseSBzcGVjaWZ5IHRoZXNlIQogICAgICAgICQuZXh0ZW5kKHRydWUsIHRyYWNlLCB0aGlzLmhpZ2hsaWdodC5zZWxlY3RlZCk7CiAgICAgICAgCiAgICAgICAgLy8gaWYgaXQgaXMgZGVmaW5lZCwgb3ZlcnJpZGUgY29sb3Igd2l0aCB0aGUgImR5bmFtaWMgYnJ1c2ggY29sb3IiIgogICAgICAgIGlmIChkLm1hcmtlcikgewogICAgICAgICAgdHJhY2UubWFya2VyID0gdHJhY2UubWFya2VyIHx8IHt9OwogICAgICAgICAgdHJhY2UubWFya2VyLmNvbG9yID0gIHNlbGVjdGlvbkNvbG91ciB8fCB0cmFjZS5tYXJrZXIuY29sb3IgfHwgZC5tYXJrZXIuY29sb3I7CiAgICAgICAgfQogICAgICAgIGlmIChkLmxpbmUpIHsKICAgICAgICAgIHRyYWNlLmxpbmUgPSB0cmFjZS5saW5lIHx8IHt9OwogICAgICAgICAgdHJhY2UubGluZS5jb2xvciA9ICBzZWxlY3Rpb25Db2xvdXIgfHwgdHJhY2UubGluZS5jb2xvciB8fCBkLmxpbmUuY29sb3I7CiAgICAgICAgfQogICAgICAgIGlmIChkLnRleHRmb250KSB7CiAgICAgICAgICB0cmFjZS50ZXh0Zm9udCA9IHRyYWNlLnRleHRmb250IHx8IHt9OwogICAgICAgICAgdHJhY2UudGV4dGZvbnQuY29sb3IgPSAgc2VsZWN0aW9uQ29sb3VyIHx8IHRyYWNlLnRleHRmb250LmNvbG9yIHx8IGQudGV4dGZvbnQuY29sb3I7CiAgICAgICAgfQogICAgICAgIGlmIChkLmZpbGxjb2xvcikgewogICAgICAgICAgLy8gVE9ETzogc2hvdWxkIHNlbGVjdGlvbkNvbG91ciBpbmhlcml0IGFscGhhIGZyb20gdGhlIGV4aXN0aW5nIGZpbGxjb2xvcj8KICAgICAgICAgIHRyYWNlLmZpbGxjb2xvciA9IHNlbGVjdGlvbkNvbG91ciB8fCB0cmFjZS5maWxsY29sb3IgfHwgZC5maWxsY29sb3I7CiAgICAgICAgfQogICAgICAgIC8vIGF0dGFjaCBhIHNlbnNpYmxlIG5hbWUvbGVnZW5kZ3JvdXAKICAgICAgICB0cmFjZS5uYW1lID0gdHJhY2UubmFtZSB8fCBrZXlzLmpvaW4oIjxiciAvPiIpOwogICAgICAgIHRyYWNlLmxlZ2VuZGdyb3VwID0gdHJhY2UubGVnZW5kZ3JvdXAgfHwga2V5cy5qb2luKCI8YnIgLz4iKTsKICAgICAgICAKICAgICAgICAvLyBrZWVwIHRyYWNrIG9mIG1hcHBpbmcgYmV0d2VlbiB0aGlzIG5ldyB0cmFjZSBhbmQgdGhlIHRyYWNlIGl0IHRhcmdldHMKICAgICAgICAvLyAobmVjZXNzYXJ5IGZvciB1cGRhdGluZyBmcmFtZXMgdG8gcmVmbGVjdCB0aGUgc2VsZWN0aW9uIHRyYWNlcykKICAgICAgICB0cmFjZS5fb3JpZ2luYWxJbmRleCA9IGk7CiAgICAgICAgdHJhY2UuX25ld0luZGV4ID0gdGhpcy5nZC5fZnVsbERhdGEubGVuZ3RoICsgdHJhY2VzLmxlbmd0aDsKICAgICAgICB0cmFjZXMucHVzaCh0cmFjZSk7CiAgICAgIH0KICAgIH0KICAgIAogICAgaWYgKHRyYWNlcy5sZW5ndGggPiAwKSB7CiAgICAgIAogICAgICBQbG90bHkuYWRkVHJhY2VzKHRoaXMuZ2QsIHRyYWNlcykudGhlbihmdW5jdGlvbihnZCkgewogICAgICAgIC8vIGluY3JlbWVudGFsbHkgYWRkIHNlbGVjdGlvbiB0cmFjZXMgdG8gZnJhbWVzCiAgICAgICAgLy8gKHRoaXMgaXMgaGVhdmlseSBpbnNwaXJlZCBieSBQbG90bHkuUGxvdHMubW9kaWZ5RnJhbWVzKCkgCiAgICAgICAgLy8gaW4gc3JjL3Bsb3RzL3Bsb3RzLmpzKQogICAgICAgIHZhciBfaGFzaCA9IGdkLl90cmFuc2l0aW9uRGF0YS5fZnJhbWVIYXNoOwogICAgICAgIHZhciBfZnJhbWVzID0gZ2QuX3RyYW5zaXRpb25EYXRhLl9mcmFtZXMgfHwgW107CiAgICAgICAgCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBfZnJhbWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAKICAgICAgICAgIC8vIGFkZCB0byBfZnJhbWVzW2ldLnRyYWNlcyAqaWYqIHRoaXMgZnJhbWUgcmVmZXJlbmNlcyBzZWxlY3RlZCB0cmFjZShzKQogICAgICAgICAgdmFyIG5ld0luZGljZXMgPSBbXTsKICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdHJhY2VzLmxlbmd0aDsgaisrKSB7CiAgICAgICAgICAgIHZhciB0ciA9IHRyYWNlc1tqXTsKICAgICAgICAgICAgaWYgKF9mcmFtZXNbaV0udHJhY2VzLmluZGV4T2YodHIuX29yaWdpbmFsSW5kZXgpID4gLTEpIHsKICAgICAgICAgICAgICBuZXdJbmRpY2VzLnB1c2godHIuX25ld0luZGV4KTsKICAgICAgICAgICAgICBfZnJhbWVzW2ldLnRyYWNlcy5wdXNoKHRyLl9uZXdJbmRleCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIAogICAgICAgICAgLy8gbm90aGluZyB0byBkby4uLgogICAgICAgICAgaWYgKG5ld0luZGljZXMubGVuZ3RoID09PSAwKSB7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfQogICAgICAgICAgCiAgICAgICAgICB2YXIgY3RyID0gMDsKICAgICAgICAgIHZhciBuRnJhbWVUcmFjZXMgPSBfZnJhbWVzW2ldLmRhdGEubGVuZ3RoOwogICAgICAgICAgCiAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG5GcmFtZVRyYWNlczsgaisrKSB7CiAgICAgICAgICAgIHZhciBmcmFtZVRyYWNlID0gX2ZyYW1lc1tpXS5kYXRhW2pdOwogICAgICAgICAgICBpZiAoIWZyYW1lVHJhY2Uua2V5IHx8IGZyYW1lVHJhY2Uuc2V0ICE9PSBncm91cCkgewogICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgbWF0Y2hGdW5jID0gZ2V0TWF0Y2hGdW5jKGZyYW1lVHJhY2UpOwogICAgICAgICAgICB2YXIgbWF0Y2hlcyA9IG1hdGNoRnVuYyhmcmFtZVRyYWNlLmtleSwga2V5cyk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAobWF0Y2hlcy5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgICAgaWYgKCF0cmFjZS5faXNTaW1wbGVLZXkpIHsKICAgICAgICAgICAgICAgIGZyYW1lVHJhY2UgPSBzdWJzZXRBcnJheUF0dHJzKGZyYW1lVHJhY2UsIG1hdGNoZXMpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB2YXIgZCA9IGdkLl9mdWxsRGF0YVtuZXdJbmRpY2VzW2N0cl1dOwogICAgICAgICAgICAgIGlmIChkLm1hcmtlcikgewogICAgICAgICAgICAgICAgZnJhbWVUcmFjZS5tYXJrZXIgPSBkLm1hcmtlcjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKGQubGluZSkgewogICAgICAgICAgICAgICAgZnJhbWVUcmFjZS5saW5lID0gZC5saW5lOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAoZC50ZXh0Zm9udCkgewogICAgICAgICAgICAgICAgZnJhbWVUcmFjZS50ZXh0Zm9udCA9IGQudGV4dGZvbnQ7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGN0ciA9IGN0ciArIDE7CiAgICAgICAgICAgICAgX2ZyYW1lc1tpXS5kYXRhLnB1c2goZnJhbWVUcmFjZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIAogICAgICAgICAgLy8gdXBkYXRlIGdkLl90cmFuc2l0aW9uRGF0YS5fZnJhbWVIYXNoCiAgICAgICAgICBfaGFzaFtfZnJhbWVzW2ldLm5hbWVdID0gX2ZyYW1lc1tpXTsKICAgICAgICB9CiAgICAgIAogICAgICB9KTsKICAgICAgCiAgICAgIC8vIGRpbSB0cmFjZXMgdGhhdCBoYXZlIGEgc2V0IG1hdGNoaW5nIHRoZSBzZXQgb2Ygc2VsZWN0aW9uIHNldHMKICAgICAgdmFyIHRyYWNlc1RvRGltID0gW10sCiAgICAgICAgICBvcGFjaXRpZXMgPSBbXSwKICAgICAgICAgIHNldHMgPSBPYmplY3Qua2V5cyh0aGlzLmdyb3VwU2VsZWN0aW9ucyksCiAgICAgICAgICBuID0gdGhpcy5vcmlnRGF0YS5sZW5ndGg7CiAgICAgICAgICAKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgICB2YXIgb3BhY2l0eSA9IHRoaXMub3JpZ09wYWNpdHlbaV0gfHwgMTsKICAgICAgICAvLyBoYXZlIHdlIGFscmVhZHkgZGltbWVkIHRoaXMgdHJhY2U/IE9yIGlzIHRoaXMgZXZlbiB3b3J0aCBkb2luZz8KICAgICAgICBpZiAob3BhY2l0eSAhPT0gdGhpcy5nZC5fZnVsbERhdGFbaV0ub3BhY2l0eSB8fCB0aGlzLmhpZ2hsaWdodC5vcGFjaXR5RGltID09PSAxKSB7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgLy8gaXMgdGhpcyBzZXQgYW4gZWxlbWVudCBvZiB0aGUgc2V0IG9mIHNlbGVjdGlvbiBzZXRzPwogICAgICAgIHZhciBtYXRjaGVzID0gZmluZE1hdGNoZXMoc2V0cywgW3RoaXMuZ2QuZGF0YVtpXS5zZXRdKTsKICAgICAgICBpZiAobWF0Y2hlcy5sZW5ndGgpIHsKICAgICAgICAgIHRyYWNlc1RvRGltLnB1c2goaSk7CiAgICAgICAgICBvcGFjaXRpZXMucHVzaChvcGFjaXR5ICogdGhpcy5oaWdobGlnaHQub3BhY2l0eURpbSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIAogICAgICBpZiAodHJhY2VzVG9EaW0ubGVuZ3RoID4gMCkgewogICAgICAgIFBsb3RseS5yZXN0eWxlKHRoaXMuZ2QsIHsib3BhY2l0eSI6IG9wYWNpdGllc30sIHRyYWNlc1RvRGltKTsKICAgICAgICAvLyB0dXJuIG9mZiB0aGUgc2VsZWN0ZWQvdW5zZWxlY3RlZCBBUEkKICAgICAgICBQbG90bHkucmVzdHlsZSh0aGlzLmdkLCB7InNlbGVjdGVkcG9pbnRzIjogbnVsbH0pOwogICAgICB9CiAgICAgIAogICAgfQogICAgCiAgfQp9OwoKLyogCk5vdGU6IGluIGFsbCBvZiB0aGVzZSBtYXRjaCBmdW5jdGlvbnMsIHdlIGFzc3VtZSBuZWVkbGVTZXQgKGkuZS4gdGhlIHNlbGVjdGVkIGtleXMpCmlzIGEgMUQgKG9yIGZsYXQpIGFycmF5LiBUaGUgcmVhbCBkaWZmZXJlbmNlIGlzIHRoZSBtZWFuaW5nIG9mIGhheXN0YWNrLgpmaW5kTWF0Y2hlcygpIGRvZXMgdGhlIHVzdWFsIHRoaW5nIHlvdSdkIGV4cGVjdCBmb3IgCmxpbmtlZCBicnVzaGluZyBvbiBhIHNjYXR0ZXJwbG90IG1hdHJpeC4gZmluZFNpbXBsZU1hdGNoZXMoKSByZXR1cm5zIGEgbWF0Y2ggaWZmIApoYXlzdGFjayBpcyBhIHN1YnNldCBvZiB0aGUgbmVlZGxlU2V0LiBmaW5kTmVzdGVkTWF0Y2hlcygpIHJldHVybnMgCiovCgpmdW5jdGlvbiBnZXRNYXRjaEZ1bmModHJhY2UpIHsKICByZXR1cm4gKHRyYWNlLl9pc05lc3RlZEtleSkgPyBmaW5kTmVzdGVkTWF0Y2hlcyA6IAogICAgKHRyYWNlLl9pc1NpbXBsZUtleSkgPyBmaW5kU2ltcGxlTWF0Y2hlcyA6IGZpbmRNYXRjaGVzOwp9CgovLyBmaW5kIG1hdGNoZXMgZm9yICJmbGF0IiBrZXlzCmZ1bmN0aW9uIGZpbmRNYXRjaGVzKGhheXN0YWNrLCBuZWVkbGVTZXQpIHsKICB2YXIgbWF0Y2hlcyA9IFtdOwogIGhheXN0YWNrLmZvckVhY2goZnVuY3Rpb24ob2JqLCBpKSB7CiAgICBpZiAob2JqID09PSBudWxsIHx8IG5lZWRsZVNldC5pbmRleE9mKG9iaikgPj0gMCkgewogICAgICBtYXRjaGVzLnB1c2goaSk7CiAgICB9CiAgfSk7CiAgcmV0dXJuIG1hdGNoZXM7Cn0KCi8vIGZpbmQgbWF0Y2hlcyBmb3IgInNpbXBsZSIga2V5cwpmdW5jdGlvbiBmaW5kU2ltcGxlTWF0Y2hlcyhoYXlzdGFjaywgbmVlZGxlU2V0KSB7CiAgdmFyIG1hdGNoID0gaGF5c3RhY2suZXZlcnkoZnVuY3Rpb24odmFsKSB7CiAgICByZXR1cm4gdmFsID09PSBudWxsIHx8IG5lZWRsZVNldC5pbmRleE9mKHZhbCkgPj0gMDsKICB9KTsKICAvLyB5ZXMsIHRoaXMgZG9lc24ndCBtYWtlIG11Y2ggc2Vuc2Ugb3RoZXIgdGhhbiBjb25mb3JtaW5nIAogIC8vIHRvIHRoZSBvdXRwdXQgdHlwZSBvZiB0aGUgb3RoZXIgbWF0Y2ggZnVuY3Rpb25zCiAgcmV0dXJuIChtYXRjaCkgPyBbMF0gOiBbXQp9CgovLyBmaW5kIG1hdGNoZXMgZm9yIGEgIm5lc3RlZCIgaGF5c3RhY2sgKDJEIGFycmF5cykKZnVuY3Rpb24gZmluZE5lc3RlZE1hdGNoZXMoaGF5c3RhY2ssIG5lZWRsZVNldCkgewogIHZhciBtYXRjaGVzID0gW107CiAgZm9yICh2YXIgaSA9IDA7IGkgPCBoYXlzdGFjay5sZW5ndGg7IGkrKykgewogICAgdmFyIGhheSA9IGhheXN0YWNrW2ldOwogICAgdmFyIG1hdGNoID0gaGF5LmV2ZXJ5KGZ1bmN0aW9uKHZhbCkgeyAKICAgICAgcmV0dXJuIHZhbCA9PT0gbnVsbCB8fCBuZWVkbGVTZXQuaW5kZXhPZih2YWwpID49IDA7IAogICAgfSk7CiAgICBpZiAobWF0Y2gpIHsKICAgICAgbWF0Y2hlcy5wdXNoKGkpOwogICAgfQogIH0KICByZXR1cm4gbWF0Y2hlczsKfQoKZnVuY3Rpb24gaXNQbGFpbk9iamVjdChvYmopIHsKICByZXR1cm4gKAogICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IE9iamVjdF0nICYmCiAgICBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqKSA9PT0gT2JqZWN0LnByb3RvdHlwZQogICk7Cn0KCmZ1bmN0aW9uIHN1YnNldEFycmF5QXR0cnMob2JqLCBpbmRpY2VzKSB7CiAgdmFyIG5ld09iaiA9IHt9OwogIE9iamVjdC5rZXlzKG9iaikuZm9yRWFjaChmdW5jdGlvbihrKSB7CiAgICB2YXIgdmFsID0gb2JqW2tdOwoKICAgIGlmIChrLmNoYXJBdCgwKSA9PT0gIl8iKSB7CiAgICAgIG5ld09ialtrXSA9IHZhbDsKICAgIH0gZWxzZSBpZiAoayA9PT0gInRyYW5zZm9ybXMiICYmIEFycmF5LmlzQXJyYXkodmFsKSkgewogICAgICBuZXdPYmpba10gPSB2YWwubWFwKGZ1bmN0aW9uKHRyYW5zZm9ybSkgewogICAgICAgIHJldHVybiBzdWJzZXRBcnJheUF0dHJzKHRyYW5zZm9ybSwgaW5kaWNlcyk7CiAgICAgIH0pOwogICAgfSBlbHNlIGlmIChrID09PSAiY29sb3JzY2FsZSIgJiYgQXJyYXkuaXNBcnJheSh2YWwpKSB7CiAgICAgIG5ld09ialtrXSA9IHZhbDsKICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdCh2YWwpKSB7CiAgICAgIG5ld09ialtrXSA9IHN1YnNldEFycmF5QXR0cnModmFsLCBpbmRpY2VzKTsKICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7CiAgICAgIG5ld09ialtrXSA9IHN1YnNldEFycmF5KHZhbCwgaW5kaWNlcyk7CiAgICB9IGVsc2UgewogICAgICBuZXdPYmpba10gPSB2YWw7CiAgICB9CiAgfSk7CiAgcmV0dXJuIG5ld09iajsKfQoKZnVuY3Rpb24gc3Vic2V0QXJyYXkoYXJyLCBpbmRpY2VzKSB7CiAgdmFyIHJlc3VsdCA9IFtdOwogIGZvciAodmFyIGkgPSAwOyBpIDwgaW5kaWNlcy5sZW5ndGg7IGkrKykgewogICAgcmVzdWx0LnB1c2goYXJyW2luZGljZXNbaV1dKTsKICB9CiAgcmV0dXJuIHJlc3VsdDsKfQoKLy8gQ29udmVuaWVuY2UgZnVuY3Rpb24gZm9yIHJlbW92aW5nIHBsb3RseSdzIGJydXNoIApmdW5jdGlvbiByZW1vdmVCcnVzaChlbCkgewogIHZhciBvdXRsaW5lcyA9IGVsLnF1ZXJ5U2VsZWN0b3JBbGwoIi5zZWxlY3Qtb3V0bGluZSIpOwogIGZvciAodmFyIGkgPSAwOyBpIDwgb3V0bGluZXMubGVuZ3RoOyBpKyspIHsKICAgIG91dGxpbmVzW2ldLnJlbW92ZSgpOwogIH0KfQoKCi8vIGh0dHBzOi8vZGF2aWR3YWxzaC5uYW1lL2phdmFzY3JpcHQtZGVib3VuY2UtZnVuY3Rpb24KCi8vIFJldHVybnMgYSBmdW5jdGlvbiwgdGhhdCwgYXMgbG9uZyBhcyBpdCBjb250aW51ZXMgdG8gYmUgaW52b2tlZCwgd2lsbCBub3QKLy8gYmUgdHJpZ2dlcmVkLiBUaGUgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgYWZ0ZXIgaXQgc3RvcHMgYmVpbmcgY2FsbGVkIGZvcgovLyBOIG1pbGxpc2Vjb25kcy4gSWYgYGltbWVkaWF0ZWAgaXMgcGFzc2VkLCB0cmlnZ2VyIHRoZSBmdW5jdGlvbiBvbiB0aGUKLy8gbGVhZGluZyBlZGdlLCBpbnN0ZWFkIG9mIHRoZSB0cmFpbGluZy4KZnVuY3Rpb24gZGVib3VuY2UoZnVuYywgd2FpdCwgaW1tZWRpYXRlKSB7Cgl2YXIgdGltZW91dDsKCXJldHVybiBmdW5jdGlvbigpIHsKCQl2YXIgY29udGV4dCA9IHRoaXMsIGFyZ3MgPSBhcmd1bWVudHM7CgkJdmFyIGxhdGVyID0gZnVuY3Rpb24oKSB7CgkJCXRpbWVvdXQgPSBudWxsOwoJCQlpZiAoIWltbWVkaWF0ZSkgZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTsKCQl9OwoJCXZhciBjYWxsTm93ID0gaW1tZWRpYXRlICYmICF0aW1lb3V0OwoJCWNsZWFyVGltZW91dCh0aW1lb3V0KTsKCQl0aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgd2FpdCk7CgkJaWYgKGNhbGxOb3cpIGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7Cgl9Owp9Owo="></script>
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
27 <script src="data:application/x-javascript;base64,KGZ1bmN0aW9uKGdsb2JhbCl7InVzZSBzdHJpY3QiO3ZhciB1bmRlZmluZWQ9dm9pZCAwO3ZhciBNQVhfQVJSQVlfTEVOR1RIPTFlNTtmdW5jdGlvbiBUeXBlKHYpe3N3aXRjaCh0eXBlb2Ygdil7Y2FzZSJ1bmRlZmluZWQiOnJldHVybiJ1bmRlZmluZWQiO2Nhc2UiYm9vbGVhbiI6cmV0dXJuImJvb2xlYW4iO2Nhc2UibnVtYmVyIjpyZXR1cm4ibnVtYmVyIjtjYXNlInN0cmluZyI6cmV0dXJuInN0cmluZyI7ZGVmYXVsdDpyZXR1cm4gdj09PW51bGw/Im51bGwiOiJvYmplY3QifX1mdW5jdGlvbiBDbGFzcyh2KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHYpLnJlcGxhY2UoL15cW29iamVjdCAqfFxdJC9nLCIiKX1mdW5jdGlvbiBJc0NhbGxhYmxlKG8pe3JldHVybiB0eXBlb2Ygbz09PSJmdW5jdGlvbiJ9ZnVuY3Rpb24gVG9PYmplY3Qodil7aWYodj09PW51bGx8fHY9PT11bmRlZmluZWQpdGhyb3cgVHlwZUVycm9yKCk7cmV0dXJuIE9iamVjdCh2KX1mdW5jdGlvbiBUb0ludDMyKHYpe3JldHVybiB2Pj4wfWZ1bmN0aW9uIFRvVWludDMyKHYpe3JldHVybiB2Pj4+MH12YXIgTE4yPU1hdGguTE4yLGFicz1NYXRoLmFicyxmbG9vcj1NYXRoLmZsb29yLGxvZz1NYXRoLmxvZyxtYXg9TWF0aC5tYXgsbWluPU1hdGgubWluLHBvdz1NYXRoLnBvdyxyb3VuZD1NYXRoLnJvdW5kOyhmdW5jdGlvbigpe3ZhciBvcmlnPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgZG9tX29ubHk9IWZ1bmN0aW9uKCl7dHJ5e3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sIngiLHt9KX1jYXRjaChfKXtyZXR1cm4gZmFsc2V9fSgpO2lmKCFvcmlnfHxkb21fb25seSl7T2JqZWN0LmRlZmluZVByb3BlcnR5PWZ1bmN0aW9uKG8scHJvcCxkZXNjKXtpZihvcmlnKXRyeXtyZXR1cm4gb3JpZyhvLHByb3AsZGVzYyl9Y2F0Y2goXyl7fWlmKG8hPT1PYmplY3QobykpdGhyb3cgVHlwZUVycm9yKCJPYmplY3QuZGVmaW5lUHJvcGVydHkgY2FsbGVkIG9uIG5vbi1vYmplY3QiKTtpZihPYmplY3QucHJvdG90eXBlLl9fZGVmaW5lR2V0dGVyX18mJiJnZXQiaW4gZGVzYylPYmplY3QucHJvdG90eXBlLl9fZGVmaW5lR2V0dGVyX18uY2FsbChvLHByb3AsZGVzYy5nZXQpO2lmKE9iamVjdC5wcm90b3R5cGUuX19kZWZpbmVTZXR0ZXJfXyYmInNldCJpbiBkZXNjKU9iamVjdC5wcm90b3R5cGUuX19kZWZpbmVTZXR0ZXJfXy5jYWxsKG8scHJvcCxkZXNjLnNldCk7aWYoInZhbHVlImluIGRlc2Mpb1twcm9wXT1kZXNjLnZhbHVlO3JldHVybiBvfX19KSgpO2Z1bmN0aW9uIG1ha2VBcnJheUFjY2Vzc29ycyhvYmope2lmKG9iai5sZW5ndGg+TUFYX0FSUkFZX0xFTkdUSCl0aHJvdyBSYW5nZUVycm9yKCJBcnJheSB0b28gbGFyZ2UgZm9yIHBvbHlmaWxsIik7ZnVuY3Rpb24gbWFrZUFycmF5QWNjZXNzb3IoaW5kZXgpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosaW5kZXgse2dldDpmdW5jdGlvbigpe3JldHVybiBvYmouX2dldHRlcihpbmRleCl9LHNldDpmdW5jdGlvbih2KXtvYmouX3NldHRlcihpbmRleCx2KX0sZW51bWVyYWJsZTp0cnVlLGNvbmZpZ3VyYWJsZTpmYWxzZX0pfXZhciBpO2ZvcihpPTA7aTxvYmoubGVuZ3RoO2krPTEpe21ha2VBcnJheUFjY2Vzc29yKGkpfX1mdW5jdGlvbiBhc19zaWduZWQodmFsdWUsYml0cyl7dmFyIHM9MzItYml0cztyZXR1cm4gdmFsdWU8PHM+PnN9ZnVuY3Rpb24gYXNfdW5zaWduZWQodmFsdWUsYml0cyl7dmFyIHM9MzItYml0cztyZXR1cm4gdmFsdWU8PHM+Pj5zfWZ1bmN0aW9uIHBhY2tJOChuKXtyZXR1cm5bbiYyNTVdfWZ1bmN0aW9uIHVucGFja0k4KGJ5dGVzKXtyZXR1cm4gYXNfc2lnbmVkKGJ5dGVzWzBdLDgpfWZ1bmN0aW9uIHBhY2tVOChuKXtyZXR1cm5bbiYyNTVdfWZ1bmN0aW9uIHVucGFja1U4KGJ5dGVzKXtyZXR1cm4gYXNfdW5zaWduZWQoYnl0ZXNbMF0sOCl9ZnVuY3Rpb24gcGFja1U4Q2xhbXBlZChuKXtuPXJvdW5kKE51bWJlcihuKSk7cmV0dXJuW248MD8wOm4+MjU1PzI1NTpuJjI1NV19ZnVuY3Rpb24gcGFja0kxNihuKXtyZXR1cm5bbj4+OCYyNTUsbiYyNTVdfWZ1bmN0aW9uIHVucGFja0kxNihieXRlcyl7cmV0dXJuIGFzX3NpZ25lZChieXRlc1swXTw8OHxieXRlc1sxXSwxNil9ZnVuY3Rpb24gcGFja1UxNihuKXtyZXR1cm5bbj4+OCYyNTUsbiYyNTVdfWZ1bmN0aW9uIHVucGFja1UxNihieXRlcyl7cmV0dXJuIGFzX3Vuc2lnbmVkKGJ5dGVzWzBdPDw4fGJ5dGVzWzFdLDE2KX1mdW5jdGlvbiBwYWNrSTMyKG4pe3JldHVybltuPj4yNCYyNTUsbj4+MTYmMjU1LG4+PjgmMjU1LG4mMjU1XX1mdW5jdGlvbiB1bnBhY2tJMzIoYnl0ZXMpe3JldHVybiBhc19zaWduZWQoYnl0ZXNbMF08PDI0fGJ5dGVzWzFdPDwxNnxieXRlc1syXTw8OHxieXRlc1szXSwzMil9ZnVuY3Rpb24gcGFja1UzMihuKXtyZXR1cm5bbj4+MjQmMjU1LG4+PjE2JjI1NSxuPj44JjI1NSxuJjI1NV19ZnVuY3Rpb24gdW5wYWNrVTMyKGJ5dGVzKXtyZXR1cm4gYXNfdW5zaWduZWQoYnl0ZXNbMF08PDI0fGJ5dGVzWzFdPDwxNnxieXRlc1syXTw8OHxieXRlc1szXSwzMil9ZnVuY3Rpb24gcGFja0lFRUU3NTQodixlYml0cyxmYml0cyl7dmFyIGJpYXM9KDE8PGViaXRzLTEpLTEscyxlLGYsbG4saSxiaXRzLHN0cixieXRlcztmdW5jdGlvbiByb3VuZFRvRXZlbihuKXt2YXIgdz1mbG9vcihuKSxmPW4tdztpZihmPC41KXJldHVybiB3O2lmKGY+LjUpcmV0dXJuIHcrMTtyZXR1cm4gdyUyP3crMTp3fWlmKHYhPT12KXtlPSgxPDxlYml0cyktMTtmPXBvdygyLGZiaXRzLTEpO3M9MH1lbHNlIGlmKHY9PT1JbmZpbml0eXx8dj09PS1JbmZpbml0eSl7ZT0oMTw8ZWJpdHMpLTE7Zj0wO3M9djwwPzE6MH1lbHNlIGlmKHY9PT0wKXtlPTA7Zj0wO3M9MS92PT09LUluZmluaXR5PzE6MH1lbHNle3M9djwwO3Y9YWJzKHYpO2lmKHY+PXBvdygyLDEtYmlhcykpe2U9bWluKGZsb29yKGxvZyh2KS9MTjIpLDEwMjMpO2Y9cm91bmRUb0V2ZW4odi9wb3coMixlKSpwb3coMixmYml0cykpO2lmKGYvcG93KDIsZmJpdHMpPj0yKXtlPWUrMTtmPTF9aWYoZT5iaWFzKXtlPSgxPDxlYml0cyktMTtmPTB9ZWxzZXtlPWUrYmlhcztmPWYtcG93KDIsZmJpdHMpfX1lbHNle2U9MDtmPXJvdW5kVG9FdmVuKHYvcG93KDIsMS1iaWFzLWZiaXRzKSl9fWJpdHM9W107Zm9yKGk9ZmJpdHM7aTtpLT0xKXtiaXRzLnB1c2goZiUyPzE6MCk7Zj1mbG9vcihmLzIpfWZvcihpPWViaXRzO2k7aS09MSl7Yml0cy5wdXNoKGUlMj8xOjApO2U9Zmxvb3IoZS8yKX1iaXRzLnB1c2gocz8xOjApO2JpdHMucmV2ZXJzZSgpO3N0cj1iaXRzLmpvaW4oIiIpO2J5dGVzPVtdO3doaWxlKHN0ci5sZW5ndGgpe2J5dGVzLnB1c2gocGFyc2VJbnQoc3RyLnN1YnN0cmluZygwLDgpLDIpKTtzdHI9c3RyLnN1YnN0cmluZyg4KX1yZXR1cm4gYnl0ZXN9ZnVuY3Rpb24gdW5wYWNrSUVFRTc1NChieXRlcyxlYml0cyxmYml0cyl7dmFyIGJpdHM9W10saSxqLGIsc3RyLGJpYXMscyxlLGY7Zm9yKGk9Ynl0ZXMubGVuZ3RoO2k7aS09MSl7Yj1ieXRlc1tpLTFdO2ZvcihqPTg7ajtqLT0xKXtiaXRzLnB1c2goYiUyPzE6MCk7Yj1iPj4xfX1iaXRzLnJldmVyc2UoKTtzdHI9Yml0cy5qb2luKCIiKTtiaWFzPSgxPDxlYml0cy0xKS0xO3M9cGFyc2VJbnQoc3RyLnN1YnN0cmluZygwLDEpLDIpPy0xOjE7ZT1wYXJzZUludChzdHIuc3Vic3RyaW5nKDEsMStlYml0cyksMik7Zj1wYXJzZUludChzdHIuc3Vic3RyaW5nKDErZWJpdHMpLDIpO2lmKGU9PT0oMTw8ZWJpdHMpLTEpe3JldHVybiBmIT09MD9OYU46cypJbmZpbml0eX1lbHNlIGlmKGU+MCl7cmV0dXJuIHMqcG93KDIsZS1iaWFzKSooMStmL3BvdygyLGZiaXRzKSl9ZWxzZSBpZihmIT09MCl7cmV0dXJuIHMqcG93KDIsLShiaWFzLTEpKSooZi9wb3coMixmYml0cykpfWVsc2V7cmV0dXJuIHM8MD8tMDowfX1mdW5jdGlvbiB1bnBhY2tGNjQoYil7cmV0dXJuIHVucGFja0lFRUU3NTQoYiwxMSw1Mil9ZnVuY3Rpb24gcGFja0Y2NCh2KXtyZXR1cm4gcGFja0lFRUU3NTQodiwxMSw1Mil9ZnVuY3Rpb24gdW5wYWNrRjMyKGIpe3JldHVybiB1bnBhY2tJRUVFNzU0KGIsOCwyMyl9ZnVuY3Rpb24gcGFja0YzMih2KXtyZXR1cm4gcGFja0lFRUU3NTQodiw4LDIzKX0oZnVuY3Rpb24oKXtmdW5jdGlvbiBBcnJheUJ1ZmZlcihsZW5ndGgpe2xlbmd0aD1Ub0ludDMyKGxlbmd0aCk7aWYobGVuZ3RoPDApdGhyb3cgUmFuZ2VFcnJvcigiQXJyYXlCdWZmZXIgc2l6ZSBpcyBub3QgYSBzbWFsbCBlbm91Z2ggcG9zaXRpdmUgaW50ZWdlci4iKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiYnl0ZUxlbmd0aCIse3ZhbHVlOmxlbmd0aH0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJfYnl0ZXMiLHt2YWx1ZTpBcnJheShsZW5ndGgpfSk7Zm9yKHZhciBpPTA7aTxsZW5ndGg7aSs9MSl0aGlzLl9ieXRlc1tpXT0wfWdsb2JhbC5BcnJheUJ1ZmZlcj1nbG9iYWwuQXJyYXlCdWZmZXJ8fEFycmF5QnVmZmVyO2Z1bmN0aW9uICRUeXBlZEFycmF5JCgpe2lmKCFhcmd1bWVudHMubGVuZ3RofHx0eXBlb2YgYXJndW1lbnRzWzBdIT09Im9iamVjdCIpe3JldHVybiBmdW5jdGlvbihsZW5ndGgpe2xlbmd0aD1Ub0ludDMyKGxlbmd0aCk7aWYobGVuZ3RoPDApdGhyb3cgUmFuZ2VFcnJvcigibGVuZ3RoIGlzIG5vdCBhIHNtYWxsIGVub3VnaCBwb3NpdGl2ZSBpbnRlZ2VyLiIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJsZW5ndGgiLHt2YWx1ZTpsZW5ndGh9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiYnl0ZUxlbmd0aCIse3ZhbHVlOmxlbmd0aCp0aGlzLkJZVEVTX1BFUl9FTEVNRU5UfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImJ1ZmZlciIse3ZhbHVlOm5ldyBBcnJheUJ1ZmZlcih0aGlzLmJ5dGVMZW5ndGgpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImJ5dGVPZmZzZXQiLHt2YWx1ZTowfSl9LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1pZihhcmd1bWVudHMubGVuZ3RoPj0xJiZUeXBlKGFyZ3VtZW50c1swXSk9PT0ib2JqZWN0IiYmYXJndW1lbnRzWzBdaW5zdGFuY2VvZiAkVHlwZWRBcnJheSQpe3JldHVybiBmdW5jdGlvbih0eXBlZEFycmF5KXtpZih0aGlzLmNvbnN0cnVjdG9yIT09dHlwZWRBcnJheS5jb25zdHJ1Y3Rvcil0aHJvdyBUeXBlRXJyb3IoKTt2YXIgYnl0ZUxlbmd0aD10eXBlZEFycmF5Lmxlbmd0aCp0aGlzLkJZVEVTX1BFUl9FTEVNRU5UO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJidWZmZXIiLHt2YWx1ZTpuZXcgQXJyYXlCdWZmZXIoYnl0ZUxlbmd0aCl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiYnl0ZUxlbmd0aCIse3ZhbHVlOmJ5dGVMZW5ndGh9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiYnl0ZU9mZnNldCIse3ZhbHVlOjB9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywibGVuZ3RoIix7dmFsdWU6dHlwZWRBcnJheS5sZW5ndGh9KTtmb3IodmFyIGk9MDtpPHRoaXMubGVuZ3RoO2krPTEpdGhpcy5fc2V0dGVyKGksdHlwZWRBcnJheS5fZ2V0dGVyKGkpKX0uYXBwbHkodGhpcyxhcmd1bWVudHMpfWlmKGFyZ3VtZW50cy5sZW5ndGg+PTEmJlR5cGUoYXJndW1lbnRzWzBdKT09PSJvYmplY3QiJiYhKGFyZ3VtZW50c1swXWluc3RhbmNlb2YgJFR5cGVkQXJyYXkkKSYmIShhcmd1bWVudHNbMF1pbnN0YW5jZW9mIEFycmF5QnVmZmVyfHxDbGFzcyhhcmd1bWVudHNbMF0pPT09IkFycmF5QnVmZmVyIikpe3JldHVybiBmdW5jdGlvbihhcnJheSl7dmFyIGJ5dGVMZW5ndGg9YXJyYXkubGVuZ3RoKnRoaXMuQllURVNfUEVSX0VMRU1FTlQ7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImJ1ZmZlciIse3ZhbHVlOm5ldyBBcnJheUJ1ZmZlcihieXRlTGVuZ3RoKX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJieXRlTGVuZ3RoIix7dmFsdWU6Ynl0ZUxlbmd0aH0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJieXRlT2Zmc2V0Iix7dmFsdWU6MH0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJsZW5ndGgiLHt2YWx1ZTphcnJheS5sZW5ndGh9KTtmb3IodmFyIGk9MDtpPHRoaXMubGVuZ3RoO2krPTEpe3ZhciBzPWFycmF5W2ldO3RoaXMuX3NldHRlcihpLE51bWJlcihzKSl9fS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9aWYoYXJndW1lbnRzLmxlbmd0aD49MSYmVHlwZShhcmd1bWVudHNbMF0pPT09Im9iamVjdCImJihhcmd1bWVudHNbMF1pbnN0YW5jZW9mIEFycmF5QnVmZmVyfHxDbGFzcyhhcmd1bWVudHNbMF0pPT09IkFycmF5QnVmZmVyIikpe3JldHVybiBmdW5jdGlvbihidWZmZXIsYnl0ZU9mZnNldCxsZW5ndGgpe2J5dGVPZmZzZXQ9VG9VaW50MzIoYnl0ZU9mZnNldCk7aWYoYnl0ZU9mZnNldD5idWZmZXIuYnl0ZUxlbmd0aCl0aHJvdyBSYW5nZUVycm9yKCJieXRlT2Zmc2V0IG91dCBvZiByYW5nZSIpO2lmKGJ5dGVPZmZzZXQldGhpcy5CWVRFU19QRVJfRUxFTUVOVCl0aHJvdyBSYW5nZUVycm9yKCJidWZmZXIgbGVuZ3RoIG1pbnVzIHRoZSBieXRlT2Zmc2V0IGlzIG5vdCBhIG11bHRpcGxlIG9mIHRoZSBlbGVtZW50IHNpemUuIik7aWYobGVuZ3RoPT09dW5kZWZpbmVkKXt2YXIgYnl0ZUxlbmd0aD1idWZmZXIuYnl0ZUxlbmd0aC1ieXRlT2Zmc2V0O2lmKGJ5dGVMZW5ndGgldGhpcy5CWVRFU19QRVJfRUxFTUVOVCl0aHJvdyBSYW5nZUVycm9yKCJsZW5ndGggb2YgYnVmZmVyIG1pbnVzIGJ5dGVPZmZzZXQgbm90IGEgbXVsdGlwbGUgb2YgdGhlIGVsZW1lbnQgc2l6ZSIpO2xlbmd0aD1ieXRlTGVuZ3RoL3RoaXMuQllURVNfUEVSX0VMRU1FTlR9ZWxzZXtsZW5ndGg9VG9VaW50MzIobGVuZ3RoKTtieXRlTGVuZ3RoPWxlbmd0aCp0aGlzLkJZVEVTX1BFUl9FTEVNRU5UfWlmKGJ5dGVPZmZzZXQrYnl0ZUxlbmd0aD5idWZmZXIuYnl0ZUxlbmd0aCl0aHJvdyBSYW5nZUVycm9yKCJieXRlT2Zmc2V0IGFuZCBsZW5ndGggcmVmZXJlbmNlIGFuIGFyZWEgYmV5b25kIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJidWZmZXIiLHt2YWx1ZTpidWZmZXJ9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiYnl0ZUxlbmd0aCIse3ZhbHVlOmJ5dGVMZW5ndGh9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiYnl0ZU9mZnNldCIse3ZhbHVlOmJ5dGVPZmZzZXR9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywibGVuZ3RoIix7dmFsdWU6bGVuZ3RofSl9LmFwcGx5KHRoaXMsYXJndW1lbnRzKX10aHJvdyBUeXBlRXJyb3IoKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoJFR5cGVkQXJyYXkkLCJmcm9tIix7dmFsdWU6ZnVuY3Rpb24oaXRlcmFibGUpe3JldHVybiBuZXcgdGhpcyhpdGVyYWJsZSl9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JCwib2YiLHt2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBuZXcgdGhpcyhhcmd1bWVudHMpfX0pO3ZhciAkVHlwZWRBcnJheVByb3RvdHlwZSQ9e307JFR5cGVkQXJyYXkkLnByb3RvdHlwZT0kVHlwZWRBcnJheVByb3RvdHlwZSQ7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsIl9nZXR0ZXIiLHt2YWx1ZTpmdW5jdGlvbihpbmRleCl7aWYoYXJndW1lbnRzLmxlbmd0aDwxKXRocm93IFN5bnRheEVycm9yKCJOb3QgZW5vdWdoIGFyZ3VtZW50cyIpO2luZGV4PVRvVWludDMyKGluZGV4KTtpZihpbmRleD49dGhpcy5sZW5ndGgpcmV0dXJuIHVuZGVmaW5lZDt2YXIgYnl0ZXM9W10saSxvO2ZvcihpPTAsbz10aGlzLmJ5dGVPZmZzZXQraW5kZXgqdGhpcy5CWVRFU19QRVJfRUxFTUVOVDtpPHRoaXMuQllURVNfUEVSX0VMRU1FTlQ7aSs9MSxvKz0xKXtieXRlcy5wdXNoKHRoaXMuYnVmZmVyLl9ieXRlc1tvXSl9cmV0dXJuIHRoaXMuX3VucGFjayhieXRlcyl9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsImdldCIse3ZhbHVlOiRUeXBlZEFycmF5JC5wcm90b3R5cGUuX2dldHRlcn0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJfc2V0dGVyIix7dmFsdWU6ZnVuY3Rpb24oaW5kZXgsdmFsdWUpe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil0aHJvdyBTeW50YXhFcnJvcigiTm90IGVub3VnaCBhcmd1bWVudHMiKTtpbmRleD1Ub1VpbnQzMihpbmRleCk7aWYoaW5kZXg+PXRoaXMubGVuZ3RoKXJldHVybjt2YXIgYnl0ZXM9dGhpcy5fcGFjayh2YWx1ZSksaSxvO2ZvcihpPTAsbz10aGlzLmJ5dGVPZmZzZXQraW5kZXgqdGhpcy5CWVRFU19QRVJfRUxFTUVOVDtpPHRoaXMuQllURVNfUEVSX0VMRU1FTlQ7aSs9MSxvKz0xKXt0aGlzLmJ1ZmZlci5fYnl0ZXNbb109Ynl0ZXNbaV19fX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJjb25zdHJ1Y3RvciIse3ZhbHVlOiRUeXBlZEFycmF5JH0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJjb3B5V2l0aGluIix7dmFsdWU6ZnVuY3Rpb24odGFyZ2V0LHN0YXJ0KXt2YXIgZW5kPWFyZ3VtZW50c1syXTt2YXIgbz1Ub09iamVjdCh0aGlzKTt2YXIgbGVuVmFsPW8ubGVuZ3RoO3ZhciBsZW49VG9VaW50MzIobGVuVmFsKTtsZW49bWF4KGxlbiwwKTt2YXIgcmVsYXRpdmVUYXJnZXQ9VG9JbnQzMih0YXJnZXQpO3ZhciB0bztpZihyZWxhdGl2ZVRhcmdldDwwKXRvPW1heChsZW4rcmVsYXRpdmVUYXJnZXQsMCk7ZWxzZSB0bz1taW4ocmVsYXRpdmVUYXJnZXQsbGVuKTt2YXIgcmVsYXRpdmVTdGFydD1Ub0ludDMyKHN0YXJ0KTt2YXIgZnJvbTtpZihyZWxhdGl2ZVN0YXJ0PDApZnJvbT1tYXgobGVuK3JlbGF0aXZlU3RhcnQsMCk7ZWxzZSBmcm9tPW1pbihyZWxhdGl2ZVN0YXJ0LGxlbik7dmFyIHJlbGF0aXZlRW5kO2lmKGVuZD09PXVuZGVmaW5lZClyZWxhdGl2ZUVuZD1sZW47ZWxzZSByZWxhdGl2ZUVuZD1Ub0ludDMyKGVuZCk7dmFyIGZpbmFsO2lmKHJlbGF0aXZlRW5kPDApZmluYWw9bWF4KGxlbityZWxhdGl2ZUVuZCwwKTtlbHNlIGZpbmFsPW1pbihyZWxhdGl2ZUVuZCxsZW4pO3ZhciBjb3VudD1taW4oZmluYWwtZnJvbSxsZW4tdG8pO3ZhciBkaXJlY3Rpb247aWYoZnJvbTx0byYmdG88ZnJvbStjb3VudCl7ZGlyZWN0aW9uPS0xO2Zyb209ZnJvbStjb3VudC0xO3RvPXRvK2NvdW50LTF9ZWxzZXtkaXJlY3Rpb249MX13aGlsZShjb3VudD4wKXtvLl9zZXR0ZXIodG8sby5fZ2V0dGVyKGZyb20pKTtmcm9tPWZyb20rZGlyZWN0aW9uO3RvPXRvK2RpcmVjdGlvbjtjb3VudD1jb3VudC0xfXJldHVybiBvfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJldmVyeSIse3ZhbHVlOmZ1bmN0aW9uKGNhbGxiYWNrZm4pe2lmKHRoaXM9PT11bmRlZmluZWR8fHRoaXM9PT1udWxsKXRocm93IFR5cGVFcnJvcigpO3ZhciB0PU9iamVjdCh0aGlzKTt2YXIgbGVuPVRvVWludDMyKHQubGVuZ3RoKTtpZighSXNDYWxsYWJsZShjYWxsYmFja2ZuKSl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdGhpc0FyZz1hcmd1bWVudHNbMV07Zm9yKHZhciBpPTA7aTxsZW47aSsrKXtpZighY2FsbGJhY2tmbi5jYWxsKHRoaXNBcmcsdC5fZ2V0dGVyKGkpLGksdCkpcmV0dXJuIGZhbHNlfXJldHVybiB0cnVlfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJmaWxsIix7dmFsdWU6ZnVuY3Rpb24odmFsdWUpe3ZhciBzdGFydD1hcmd1bWVudHNbMV0sZW5kPWFyZ3VtZW50c1syXTt2YXIgbz1Ub09iamVjdCh0aGlzKTt2YXIgbGVuVmFsPW8ubGVuZ3RoO3ZhciBsZW49VG9VaW50MzIobGVuVmFsKTtsZW49bWF4KGxlbiwwKTt2YXIgcmVsYXRpdmVTdGFydD1Ub0ludDMyKHN0YXJ0KTt2YXIgaztpZihyZWxhdGl2ZVN0YXJ0PDApaz1tYXgobGVuK3JlbGF0aXZlU3RhcnQsMCk7ZWxzZSBrPW1pbihyZWxhdGl2ZVN0YXJ0LGxlbik7dmFyIHJlbGF0aXZlRW5kO2lmKGVuZD09PXVuZGVmaW5lZClyZWxhdGl2ZUVuZD1sZW47ZWxzZSByZWxhdGl2ZUVuZD1Ub0ludDMyKGVuZCk7dmFyIGZpbmFsO2lmKHJlbGF0aXZlRW5kPDApZmluYWw9bWF4KGxlbityZWxhdGl2ZUVuZCwwKTtlbHNlIGZpbmFsPW1pbihyZWxhdGl2ZUVuZCxsZW4pO3doaWxlKGs8ZmluYWwpe28uX3NldHRlcihrLHZhbHVlKTtrKz0xfXJldHVybiBvfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJmaWx0ZXIiLHt2YWx1ZTpmdW5jdGlvbihjYWxsYmFja2ZuKXtpZih0aGlzPT09dW5kZWZpbmVkfHx0aGlzPT09bnVsbCl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdD1PYmplY3QodGhpcyk7dmFyIGxlbj1Ub1VpbnQzMih0Lmxlbmd0aCk7aWYoIUlzQ2FsbGFibGUoY2FsbGJhY2tmbikpdGhyb3cgVHlwZUVycm9yKCk7dmFyIHJlcz1bXTt2YXIgdGhpc3A9YXJndW1lbnRzWzFdO2Zvcih2YXIgaT0wO2k8bGVuO2krKyl7dmFyIHZhbD10Ll9nZXR0ZXIoaSk7aWYoY2FsbGJhY2tmbi5jYWxsKHRoaXNwLHZhbCxpLHQpKXJlcy5wdXNoKHZhbCl9cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHJlcyl9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsImZpbmQiLHt2YWx1ZTpmdW5jdGlvbihwcmVkaWNhdGUpe3ZhciBvPVRvT2JqZWN0KHRoaXMpO3ZhciBsZW5WYWx1ZT1vLmxlbmd0aDt2YXIgbGVuPVRvVWludDMyKGxlblZhbHVlKTtpZighSXNDYWxsYWJsZShwcmVkaWNhdGUpKXRocm93IFR5cGVFcnJvcigpO3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dW5kZWZpbmVkO3ZhciBrPTA7d2hpbGUoazxsZW4pe3ZhciBrVmFsdWU9by5fZ2V0dGVyKGspO3ZhciB0ZXN0UmVzdWx0PXByZWRpY2F0ZS5jYWxsKHQsa1ZhbHVlLGssbyk7aWYoQm9vbGVhbih0ZXN0UmVzdWx0KSlyZXR1cm4ga1ZhbHVlOysra31yZXR1cm4gdW5kZWZpbmVkfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJmaW5kSW5kZXgiLHt2YWx1ZTpmdW5jdGlvbihwcmVkaWNhdGUpe3ZhciBvPVRvT2JqZWN0KHRoaXMpO3ZhciBsZW5WYWx1ZT1vLmxlbmd0aDt2YXIgbGVuPVRvVWludDMyKGxlblZhbHVlKTtpZighSXNDYWxsYWJsZShwcmVkaWNhdGUpKXRocm93IFR5cGVFcnJvcigpO3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dW5kZWZpbmVkO3ZhciBrPTA7d2hpbGUoazxsZW4pe3ZhciBrVmFsdWU9by5fZ2V0dGVyKGspO3ZhciB0ZXN0UmVzdWx0PXByZWRpY2F0ZS5jYWxsKHQsa1ZhbHVlLGssbyk7aWYoQm9vbGVhbih0ZXN0UmVzdWx0KSlyZXR1cm4gazsrK2t9cmV0dXJuLTF9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsImZvckVhY2giLHt2YWx1ZTpmdW5jdGlvbihjYWxsYmFja2ZuKXtpZih0aGlzPT09dW5kZWZpbmVkfHx0aGlzPT09bnVsbCl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdD1PYmplY3QodGhpcyk7dmFyIGxlbj1Ub1VpbnQzMih0Lmxlbmd0aCk7aWYoIUlzQ2FsbGFibGUoY2FsbGJhY2tmbikpdGhyb3cgVHlwZUVycm9yKCk7dmFyIHRoaXNwPWFyZ3VtZW50c1sxXTtmb3IodmFyIGk9MDtpPGxlbjtpKyspY2FsbGJhY2tmbi5jYWxsKHRoaXNwLHQuX2dldHRlcihpKSxpLHQpfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJpbmRleE9mIix7dmFsdWU6ZnVuY3Rpb24oc2VhcmNoRWxlbWVudCl7aWYodGhpcz09PXVuZGVmaW5lZHx8dGhpcz09PW51bGwpdGhyb3cgVHlwZUVycm9yKCk7dmFyIHQ9T2JqZWN0KHRoaXMpO3ZhciBsZW49VG9VaW50MzIodC5sZW5ndGgpO2lmKGxlbj09PTApcmV0dXJuLTE7dmFyIG49MDtpZihhcmd1bWVudHMubGVuZ3RoPjApe249TnVtYmVyKGFyZ3VtZW50c1sxXSk7aWYobiE9PW4pe249MH1lbHNlIGlmKG4hPT0wJiZuIT09MS8wJiZuIT09LSgxLzApKXtuPShuPjB8fC0xKSpmbG9vcihhYnMobikpfX1pZihuPj1sZW4pcmV0dXJuLTE7dmFyIGs9bj49MD9uOm1heChsZW4tYWJzKG4pLDApO2Zvcig7azxsZW47aysrKXtpZih0Ll9nZXR0ZXIoayk9PT1zZWFyY2hFbGVtZW50KXtyZXR1cm4ga319cmV0dXJuLTF9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsImpvaW4iLHt2YWx1ZTpmdW5jdGlvbihzZXBhcmF0b3Ipe2lmKHRoaXM9PT11bmRlZmluZWR8fHRoaXM9PT1udWxsKXRocm93IFR5cGVFcnJvcigpO3ZhciB0PU9iamVjdCh0aGlzKTt2YXIgbGVuPVRvVWludDMyKHQubGVuZ3RoKTt2YXIgdG1wPUFycmF5KGxlbik7Zm9yKHZhciBpPTA7aTxsZW47KytpKXRtcFtpXT10Ll9nZXR0ZXIoaSk7cmV0dXJuIHRtcC5qb2luKHNlcGFyYXRvcj09PXVuZGVmaW5lZD8iLCI6c2VwYXJhdG9yKX19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoJFR5cGVkQXJyYXkkLnByb3RvdHlwZSwibGFzdEluZGV4T2YiLHt2YWx1ZTpmdW5jdGlvbihzZWFyY2hFbGVtZW50KXtpZih0aGlzPT09dW5kZWZpbmVkfHx0aGlzPT09bnVsbCl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdD1PYmplY3QodGhpcyk7dmFyIGxlbj1Ub1VpbnQzMih0Lmxlbmd0aCk7aWYobGVuPT09MClyZXR1cm4tMTt2YXIgbj1sZW47aWYoYXJndW1lbnRzLmxlbmd0aD4xKXtuPU51bWJlcihhcmd1bWVudHNbMV0pO2lmKG4hPT1uKXtuPTB9ZWxzZSBpZihuIT09MCYmbiE9PTEvMCYmbiE9PS0oMS8wKSl7bj0obj4wfHwtMSkqZmxvb3IoYWJzKG4pKX19dmFyIGs9bj49MD9taW4obixsZW4tMSk6bGVuLWFicyhuKTtmb3IoO2s+PTA7ay0tKXtpZih0Ll9nZXR0ZXIoayk9PT1zZWFyY2hFbGVtZW50KXJldHVybiBrfXJldHVybi0xfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJtYXAiLHt2YWx1ZTpmdW5jdGlvbihjYWxsYmFja2ZuKXtpZih0aGlzPT09dW5kZWZpbmVkfHx0aGlzPT09bnVsbCl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdD1PYmplY3QodGhpcyk7dmFyIGxlbj1Ub1VpbnQzMih0Lmxlbmd0aCk7aWYoIUlzQ2FsbGFibGUoY2FsbGJhY2tmbikpdGhyb3cgVHlwZUVycm9yKCk7dmFyIHJlcz1bXTtyZXMubGVuZ3RoPWxlbjt2YXIgdGhpc3A9YXJndW1lbnRzWzFdO2Zvcih2YXIgaT0wO2k8bGVuO2krKylyZXNbaV09Y2FsbGJhY2tmbi5jYWxsKHRoaXNwLHQuX2dldHRlcihpKSxpLHQpO3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcihyZXMpfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJyZWR1Y2UiLHt2YWx1ZTpmdW5jdGlvbihjYWxsYmFja2ZuKXtpZih0aGlzPT09dW5kZWZpbmVkfHx0aGlzPT09bnVsbCl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdD1PYmplY3QodGhpcyk7dmFyIGxlbj1Ub1VpbnQzMih0Lmxlbmd0aCk7aWYoIUlzQ2FsbGFibGUoY2FsbGJhY2tmbikpdGhyb3cgVHlwZUVycm9yKCk7aWYobGVuPT09MCYmYXJndW1lbnRzLmxlbmd0aD09PTEpdGhyb3cgVHlwZUVycm9yKCk7dmFyIGs9MDt2YXIgYWNjdW11bGF0b3I7aWYoYXJndW1lbnRzLmxlbmd0aD49Mil7YWNjdW11bGF0b3I9YXJndW1lbnRzWzFdfWVsc2V7YWNjdW11bGF0b3I9dC5fZ2V0dGVyKGsrKyl9d2hpbGUoazxsZW4pe2FjY3VtdWxhdG9yPWNhbGxiYWNrZm4uY2FsbCh1bmRlZmluZWQsYWNjdW11bGF0b3IsdC5fZ2V0dGVyKGspLGssdCk7aysrfXJldHVybiBhY2N1bXVsYXRvcn19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoJFR5cGVkQXJyYXkkLnByb3RvdHlwZSwicmVkdWNlUmlnaHQiLHt2YWx1ZTpmdW5jdGlvbihjYWxsYmFja2ZuKXtpZih0aGlzPT09dW5kZWZpbmVkfHx0aGlzPT09bnVsbCl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdD1PYmplY3QodGhpcyk7dmFyIGxlbj1Ub1VpbnQzMih0Lmxlbmd0aCk7aWYoIUlzQ2FsbGFibGUoY2FsbGJhY2tmbikpdGhyb3cgVHlwZUVycm9yKCk7aWYobGVuPT09MCYmYXJndW1lbnRzLmxlbmd0aD09PTEpdGhyb3cgVHlwZUVycm9yKCk7dmFyIGs9bGVuLTE7dmFyIGFjY3VtdWxhdG9yO2lmKGFyZ3VtZW50cy5sZW5ndGg+PTIpe2FjY3VtdWxhdG9yPWFyZ3VtZW50c1sxXX1lbHNle2FjY3VtdWxhdG9yPXQuX2dldHRlcihrLS0pfXdoaWxlKGs+PTApe2FjY3VtdWxhdG9yPWNhbGxiYWNrZm4uY2FsbCh1bmRlZmluZWQsYWNjdW11bGF0b3IsdC5fZ2V0dGVyKGspLGssdCk7ay0tfXJldHVybiBhY2N1bXVsYXRvcn19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoJFR5cGVkQXJyYXkkLnByb3RvdHlwZSwicmV2ZXJzZSIse3ZhbHVlOmZ1bmN0aW9uKCl7aWYodGhpcz09PXVuZGVmaW5lZHx8dGhpcz09PW51bGwpdGhyb3cgVHlwZUVycm9yKCk7dmFyIHQ9T2JqZWN0KHRoaXMpO3ZhciBsZW49VG9VaW50MzIodC5sZW5ndGgpO3ZhciBoYWxmPWZsb29yKGxlbi8yKTtmb3IodmFyIGk9MCxqPWxlbi0xO2k8aGFsZjsrK2ksLS1qKXt2YXIgdG1wPXQuX2dldHRlcihpKTt0Ll9zZXR0ZXIoaSx0Ll9nZXR0ZXIoaikpO3QuX3NldHRlcihqLHRtcCl9cmV0dXJuIHR9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsInNldCIse3ZhbHVlOmZ1bmN0aW9uKGluZGV4LHZhbHVlKXtpZihhcmd1bWVudHMubGVuZ3RoPDEpdGhyb3cgU3ludGF4RXJyb3IoIk5vdCBlbm91Z2ggYXJndW1lbnRzIik7dmFyIGFycmF5LHNlcXVlbmNlLG9mZnNldCxsZW4saSxzLGQsYnl0ZU9mZnNldCxieXRlTGVuZ3RoLHRtcDtpZih0eXBlb2YgYXJndW1lbnRzWzBdPT09Im9iamVjdCImJmFyZ3VtZW50c1swXS5jb25zdHJ1Y3Rvcj09PXRoaXMuY29uc3RydWN0b3Ipe2FycmF5PWFyZ3VtZW50c1swXTtvZmZzZXQ9VG9VaW50MzIoYXJndW1lbnRzWzFdKTtpZihvZmZzZXQrYXJyYXkubGVuZ3RoPnRoaXMubGVuZ3RoKXt0aHJvdyBSYW5nZUVycm9yKCJPZmZzZXQgcGx1cyBsZW5ndGggb2YgYXJyYXkgaXMgb3V0IG9mIHJhbmdlIil9Ynl0ZU9mZnNldD10aGlzLmJ5dGVPZmZzZXQrb2Zmc2V0KnRoaXMuQllURVNfUEVSX0VMRU1FTlQ7Ynl0ZUxlbmd0aD1hcnJheS5sZW5ndGgqdGhpcy5CWVRFU19QRVJfRUxFTUVOVDtpZihhcnJheS5idWZmZXI9PT10aGlzLmJ1ZmZlcil7dG1wPVtdO2ZvcihpPTAscz1hcnJheS5ieXRlT2Zmc2V0O2k8Ynl0ZUxlbmd0aDtpKz0xLHMrPTEpe3RtcFtpXT1hcnJheS5idWZmZXIuX2J5dGVzW3NdfWZvcihpPTAsZD1ieXRlT2Zmc2V0O2k8Ynl0ZUxlbmd0aDtpKz0xLGQrPTEpe3RoaXMuYnVmZmVyLl9ieXRlc1tkXT10bXBbaV19fWVsc2V7Zm9yKGk9MCxzPWFycmF5LmJ5dGVPZmZzZXQsZD1ieXRlT2Zmc2V0O2k8Ynl0ZUxlbmd0aDtpKz0xLHMrPTEsZCs9MSl7dGhpcy5idWZmZXIuX2J5dGVzW2RdPWFycmF5LmJ1ZmZlci5fYnl0ZXNbc119fX1lbHNlIGlmKHR5cGVvZiBhcmd1bWVudHNbMF09PT0ib2JqZWN0IiYmdHlwZW9mIGFyZ3VtZW50c1swXS5sZW5ndGghPT0idW5kZWZpbmVkIil7c2VxdWVuY2U9YXJndW1lbnRzWzBdO2xlbj1Ub1VpbnQzMihzZXF1ZW5jZS5sZW5ndGgpO29mZnNldD1Ub1VpbnQzMihhcmd1bWVudHNbMV0pO2lmKG9mZnNldCtsZW4+dGhpcy5sZW5ndGgpe3Rocm93IFJhbmdlRXJyb3IoIk9mZnNldCBwbHVzIGxlbmd0aCBvZiBhcnJheSBpcyBvdXQgb2YgcmFuZ2UiKX1mb3IoaT0wO2k8bGVuO2krPTEpe3M9c2VxdWVuY2VbaV07dGhpcy5fc2V0dGVyKG9mZnNldCtpLE51bWJlcihzKSl9fWVsc2V7dGhyb3cgVHlwZUVycm9yKCJVbmV4cGVjdGVkIGFyZ3VtZW50IHR5cGUocykiKX19fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsInNsaWNlIix7dmFsdWU6ZnVuY3Rpb24oc3RhcnQsZW5kKXt2YXIgbz1Ub09iamVjdCh0aGlzKTt2YXIgbGVuVmFsPW8ubGVuZ3RoO3ZhciBsZW49VG9VaW50MzIobGVuVmFsKTt2YXIgcmVsYXRpdmVTdGFydD1Ub0ludDMyKHN0YXJ0KTt2YXIgaz1yZWxhdGl2ZVN0YXJ0PDA/bWF4KGxlbityZWxhdGl2ZVN0YXJ0LDApOm1pbihyZWxhdGl2ZVN0YXJ0LGxlbik7dmFyIHJlbGF0aXZlRW5kPWVuZD09PXVuZGVmaW5lZD9sZW46VG9JbnQzMihlbmQpO3ZhciBmaW5hbD1yZWxhdGl2ZUVuZDwwP21heChsZW4rcmVsYXRpdmVFbmQsMCk6bWluKHJlbGF0aXZlRW5kLGxlbik7dmFyIGNvdW50PWZpbmFsLWs7dmFyIGM9by5jb25zdHJ1Y3Rvcjt2YXIgYT1uZXcgYyhjb3VudCk7dmFyIG49MDt3aGlsZShrPGZpbmFsKXt2YXIga1ZhbHVlPW8uX2dldHRlcihrKTthLl9zZXR0ZXIobixrVmFsdWUpOysrazsrK259cmV0dXJuIGF9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsInNvbWUiLHt2YWx1ZTpmdW5jdGlvbihjYWxsYmFja2ZuKXtpZih0aGlzPT09dW5kZWZpbmVkfHx0aGlzPT09bnVsbCl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdD1PYmplY3QodGhpcyk7dmFyIGxlbj1Ub1VpbnQzMih0Lmxlbmd0aCk7aWYoIUlzQ2FsbGFibGUoY2FsbGJhY2tmbikpdGhyb3cgVHlwZUVycm9yKCk7dmFyIHRoaXNwPWFyZ3VtZW50c1sxXTtmb3IodmFyIGk9MDtpPGxlbjtpKyspe2lmKGNhbGxiYWNrZm4uY2FsbCh0aGlzcCx0Ll9nZXR0ZXIoaSksaSx0KSl7cmV0dXJuIHRydWV9fXJldHVybiBmYWxzZX19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoJFR5cGVkQXJyYXkkLnByb3RvdHlwZSwic29ydCIse3ZhbHVlOmZ1bmN0aW9uKGNvbXBhcmVmbil7aWYodGhpcz09PXVuZGVmaW5lZHx8dGhpcz09PW51bGwpdGhyb3cgVHlwZUVycm9yKCk7dmFyIHQ9T2JqZWN0KHRoaXMpO3ZhciBsZW49VG9VaW50MzIodC5sZW5ndGgpO3ZhciB0bXA9QXJyYXkobGVuKTtmb3IodmFyIGk9MDtpPGxlbjsrK2kpdG1wW2ldPXQuX2dldHRlcihpKTtpZihjb21wYXJlZm4pdG1wLnNvcnQoY29tcGFyZWZuKTtlbHNlIHRtcC5zb3J0KCk7Zm9yKGk9MDtpPGxlbjsrK2kpdC5fc2V0dGVyKGksdG1wW2ldKTtyZXR1cm4gdH19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoJFR5cGVkQXJyYXkkLnByb3RvdHlwZSwic3ViYXJyYXkiLHt2YWx1ZTpmdW5jdGlvbihzdGFydCxlbmQpe2Z1bmN0aW9uIGNsYW1wKHYsbWluLG1heCl7cmV0dXJuIHY8bWluP21pbjp2Pm1heD9tYXg6dn1zdGFydD1Ub0ludDMyKHN0YXJ0KTtlbmQ9VG9JbnQzMihlbmQpO2lmKGFyZ3VtZW50cy5sZW5ndGg8MSl7c3RhcnQ9MH1pZihhcmd1bWVudHMubGVuZ3RoPDIpe2VuZD10aGlzLmxlbmd0aH1pZihzdGFydDwwKXtzdGFydD10aGlzLmxlbmd0aCtzdGFydH1pZihlbmQ8MCl7ZW5kPXRoaXMubGVuZ3RoK2VuZH1zdGFydD1jbGFtcChzdGFydCwwLHRoaXMubGVuZ3RoKTtlbmQ9Y2xhbXAoZW5kLDAsdGhpcy5sZW5ndGgpO3ZhciBsZW49ZW5kLXN0YXJ0O2lmKGxlbjwwKXtsZW49MH1yZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5idWZmZXIsdGhpcy5ieXRlT2Zmc2V0K3N0YXJ0KnRoaXMuQllURVNfUEVSX0VMRU1FTlQsbGVuKX19KTtmdW5jdGlvbiBtYWtlVHlwZWRBcnJheShlbGVtZW50U2l6ZSxwYWNrLHVucGFjayl7dmFyIFR5cGVkQXJyYXk9ZnVuY3Rpb24oKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiY29uc3RydWN0b3IiLHt2YWx1ZTpUeXBlZEFycmF5fSk7JFR5cGVkQXJyYXkkLmFwcGx5KHRoaXMsYXJndW1lbnRzKTttYWtlQXJyYXlBY2Nlc3NvcnModGhpcyl9O2lmKCJfX3Byb3RvX18iaW4gVHlwZWRBcnJheSl7VHlwZWRBcnJheS5fX3Byb3RvX189JFR5cGVkQXJyYXkkfWVsc2V7VHlwZWRBcnJheS5mcm9tPSRUeXBlZEFycmF5JC5mcm9tO1R5cGVkQXJyYXkub2Y9JFR5cGVkQXJyYXkkLm9mfVR5cGVkQXJyYXkuQllURVNfUEVSX0VMRU1FTlQ9ZWxlbWVudFNpemU7dmFyIFR5cGVkQXJyYXlQcm90b3R5cGU9ZnVuY3Rpb24oKXt9O1R5cGVkQXJyYXlQcm90b3R5cGUucHJvdG90eXBlPSRUeXBlZEFycmF5UHJvdG90eXBlJDtUeXBlZEFycmF5LnByb3RvdHlwZT1uZXcgVHlwZWRBcnJheVByb3RvdHlwZTtPYmplY3QuZGVmaW5lUHJvcGVydHkoVHlwZWRBcnJheS5wcm90b3R5cGUsIkJZVEVTX1BFUl9FTEVNRU5UIix7dmFsdWU6ZWxlbWVudFNpemV9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoVHlwZWRBcnJheS5wcm90b3R5cGUsIl9wYWNrIix7dmFsdWU6cGFja30pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShUeXBlZEFycmF5LnByb3RvdHlwZSwiX3VucGFjayIse3ZhbHVlOnVucGFja30pO3JldHVybiBUeXBlZEFycmF5fXZhciBJbnQ4QXJyYXk9bWFrZVR5cGVkQXJyYXkoMSxwYWNrSTgsdW5wYWNrSTgpO3ZhciBVaW50OEFycmF5PW1ha2VUeXBlZEFycmF5KDEscGFja1U4LHVucGFja1U4KTt2YXIgVWludDhDbGFtcGVkQXJyYXk9bWFrZVR5cGVkQXJyYXkoMSxwYWNrVThDbGFtcGVkLHVucGFja1U4KTt2YXIgSW50MTZBcnJheT1tYWtlVHlwZWRBcnJheSgyLHBhY2tJMTYsdW5wYWNrSTE2KTt2YXIgVWludDE2QXJyYXk9bWFrZVR5cGVkQXJyYXkoMixwYWNrVTE2LHVucGFja1UxNik7dmFyIEludDMyQXJyYXk9bWFrZVR5cGVkQXJyYXkoNCxwYWNrSTMyLHVucGFja0kzMik7dmFyIFVpbnQzMkFycmF5PW1ha2VUeXBlZEFycmF5KDQscGFja1UzMix1bnBhY2tVMzIpO3ZhciBGbG9hdDMyQXJyYXk9bWFrZVR5cGVkQXJyYXkoNCxwYWNrRjMyLHVucGFja0YzMik7dmFyIEZsb2F0NjRBcnJheT1tYWtlVHlwZWRBcnJheSg4LHBhY2tGNjQsdW5wYWNrRjY0KTtnbG9iYWwuSW50OEFycmF5PWdsb2JhbC5JbnQ4QXJyYXl8fEludDhBcnJheTtnbG9iYWwuVWludDhBcnJheT1nbG9iYWwuVWludDhBcnJheXx8VWludDhBcnJheTtnbG9iYWwuVWludDhDbGFtcGVkQXJyYXk9Z2xvYmFsLlVpbnQ4Q2xhbXBlZEFycmF5fHxVaW50OENsYW1wZWRBcnJheTtnbG9iYWwuSW50MTZBcnJheT1nbG9iYWwuSW50MTZBcnJheXx8SW50MTZBcnJheTtnbG9iYWwuVWludDE2QXJyYXk9Z2xvYmFsLlVpbnQxNkFycmF5fHxVaW50MTZBcnJheTtnbG9iYWwuSW50MzJBcnJheT1nbG9iYWwuSW50MzJBcnJheXx8SW50MzJBcnJheTtnbG9iYWwuVWludDMyQXJyYXk9Z2xvYmFsLlVpbnQzMkFycmF5fHxVaW50MzJBcnJheTtnbG9iYWwuRmxvYXQzMkFycmF5PWdsb2JhbC5GbG9hdDMyQXJyYXl8fEZsb2F0MzJBcnJheTtnbG9iYWwuRmxvYXQ2NEFycmF5PWdsb2JhbC5GbG9hdDY0QXJyYXl8fEZsb2F0NjRBcnJheX0pKCk7KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihhcnJheSxpbmRleCl7cmV0dXJuIElzQ2FsbGFibGUoYXJyYXkuZ2V0KT9hcnJheS5nZXQoaW5kZXgpOmFycmF5W2luZGV4XX12YXIgSVNfQklHX0VORElBTj1mdW5jdGlvbigpe3ZhciB1MTZhcnJheT1uZXcgVWludDE2QXJyYXkoWzQ2NjBdKSx1OGFycmF5PW5ldyBVaW50OEFycmF5KHUxNmFycmF5LmJ1ZmZlcik7cmV0dXJuIHIodThhcnJheSwwKT09PTE4fSgpO2Z1bmN0aW9uIERhdGFWaWV3KGJ1ZmZlcixieXRlT2Zmc2V0LGJ5dGVMZW5ndGgpe2lmKCEoYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJ8fENsYXNzKGJ1ZmZlcik9PT0iQXJyYXlCdWZmZXIiKSl0aHJvdyBUeXBlRXJyb3IoKTtieXRlT2Zmc2V0PVRvVWludDMyKGJ5dGVPZmZzZXQpO2lmKGJ5dGVPZmZzZXQ+YnVmZmVyLmJ5dGVMZW5ndGgpdGhyb3cgUmFuZ2VFcnJvcigiYnl0ZU9mZnNldCBvdXQgb2YgcmFuZ2UiKTtpZihieXRlTGVuZ3RoPT09dW5kZWZpbmVkKWJ5dGVMZW5ndGg9YnVmZmVyLmJ5dGVMZW5ndGgtYnl0ZU9mZnNldDtlbHNlIGJ5dGVMZW5ndGg9VG9VaW50MzIoYnl0ZUxlbmd0aCk7aWYoYnl0ZU9mZnNldCtieXRlTGVuZ3RoPmJ1ZmZlci5ieXRlTGVuZ3RoKXRocm93IFJhbmdlRXJyb3IoImJ5dGVPZmZzZXQgYW5kIGxlbmd0aCByZWZlcmVuY2UgYW4gYXJlYSBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImJ1ZmZlciIse3ZhbHVlOmJ1ZmZlcn0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJieXRlTGVuZ3RoIix7dmFsdWU6Ynl0ZUxlbmd0aH0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJieXRlT2Zmc2V0Iix7dmFsdWU6Ynl0ZU9mZnNldH0pfWZ1bmN0aW9uIG1ha2VHZXR0ZXIoYXJyYXlUeXBlKXtyZXR1cm4gZnVuY3Rpb24gR2V0Vmlld1ZhbHVlKGJ5dGVPZmZzZXQsbGl0dGxlRW5kaWFuKXtieXRlT2Zmc2V0PVRvVWludDMyKGJ5dGVPZmZzZXQpO2lmKGJ5dGVPZmZzZXQrYXJyYXlUeXBlLkJZVEVTX1BFUl9FTEVNRU5UPnRoaXMuYnl0ZUxlbmd0aCl0aHJvdyBSYW5nZUVycm9yKCJBcnJheSBpbmRleCBvdXQgb2YgcmFuZ2UiKTtieXRlT2Zmc2V0Kz10aGlzLmJ5dGVPZmZzZXQ7dmFyIHVpbnQ4QXJyYXk9bmV3IFVpbnQ4QXJyYXkodGhpcy5idWZmZXIsYnl0ZU9mZnNldCxhcnJheVR5cGUuQllURVNfUEVSX0VMRU1FTlQpLGJ5dGVzPVtdO2Zvcih2YXIgaT0wO2k8YXJyYXlUeXBlLkJZVEVTX1BFUl9FTEVNRU5UO2krPTEpYnl0ZXMucHVzaChyKHVpbnQ4QXJyYXksaSkpO2lmKEJvb2xlYW4obGl0dGxlRW5kaWFuKT09PUJvb2xlYW4oSVNfQklHX0VORElBTikpYnl0ZXMucmV2ZXJzZSgpO3JldHVybiByKG5ldyBhcnJheVR5cGUobmV3IFVpbnQ4QXJyYXkoYnl0ZXMpLmJ1ZmZlciksMCl9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eShEYXRhVmlldy5wcm90b3R5cGUsImdldFVpbnQ4Iix7dmFsdWU6bWFrZUdldHRlcihVaW50OEFycmF5KX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShEYXRhVmlldy5wcm90b3R5cGUsImdldEludDgiLHt2YWx1ZTptYWtlR2V0dGVyKEludDhBcnJheSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoRGF0YVZpZXcucHJvdG90eXBlLCJnZXRVaW50MTYiLHt2YWx1ZTptYWtlR2V0dGVyKFVpbnQxNkFycmF5KX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShEYXRhVmlldy5wcm90b3R5cGUsImdldEludDE2Iix7dmFsdWU6bWFrZUdldHRlcihJbnQxNkFycmF5KX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShEYXRhVmlldy5wcm90b3R5cGUsImdldFVpbnQzMiIse3ZhbHVlOm1ha2VHZXR0ZXIoVWludDMyQXJyYXkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KERhdGFWaWV3LnByb3RvdHlwZSwiZ2V0SW50MzIiLHt2YWx1ZTptYWtlR2V0dGVyKEludDMyQXJyYXkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KERhdGFWaWV3LnByb3RvdHlwZSwiZ2V0RmxvYXQzMiIse3ZhbHVlOm1ha2VHZXR0ZXIoRmxvYXQzMkFycmF5KX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShEYXRhVmlldy5wcm90b3R5cGUsImdldEZsb2F0NjQiLHt2YWx1ZTptYWtlR2V0dGVyKEZsb2F0NjRBcnJheSl9KTtmdW5jdGlvbiBtYWtlU2V0dGVyKGFycmF5VHlwZSl7cmV0dXJuIGZ1bmN0aW9uIFNldFZpZXdWYWx1ZShieXRlT2Zmc2V0LHZhbHVlLGxpdHRsZUVuZGlhbil7Ynl0ZU9mZnNldD1Ub1VpbnQzMihieXRlT2Zmc2V0KTtpZihieXRlT2Zmc2V0K2FycmF5VHlwZS5CWVRFU19QRVJfRUxFTUVOVD50aGlzLmJ5dGVMZW5ndGgpdGhyb3cgUmFuZ2VFcnJvcigiQXJyYXkgaW5kZXggb3V0IG9mIHJhbmdlIik7dmFyIHR5cGVBcnJheT1uZXcgYXJyYXlUeXBlKFt2YWx1ZV0pLGJ5dGVBcnJheT1uZXcgVWludDhBcnJheSh0eXBlQXJyYXkuYnVmZmVyKSxieXRlcz1bXSxpLGJ5dGVWaWV3O2ZvcihpPTA7aTxhcnJheVR5cGUuQllURVNfUEVSX0VMRU1FTlQ7aSs9MSlieXRlcy5wdXNoKHIoYnl0ZUFycmF5LGkpKTtpZihCb29sZWFuKGxpdHRsZUVuZGlhbik9PT1Cb29sZWFuKElTX0JJR19FTkRJQU4pKWJ5dGVzLnJldmVyc2UoKTtieXRlVmlldz1uZXcgVWludDhBcnJheSh0aGlzLmJ1ZmZlcixieXRlT2Zmc2V0LGFycmF5VHlwZS5CWVRFU19QRVJfRUxFTUVOVCk7Ynl0ZVZpZXcuc2V0KGJ5dGVzKX19T2JqZWN0LmRlZmluZVByb3BlcnR5KERhdGFWaWV3LnByb3RvdHlwZSwic2V0VWludDgiLHt2YWx1ZTptYWtlU2V0dGVyKFVpbnQ4QXJyYXkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KERhdGFWaWV3LnByb3RvdHlwZSwic2V0SW50OCIse3ZhbHVlOm1ha2VTZXR0ZXIoSW50OEFycmF5KX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShEYXRhVmlldy5wcm90b3R5cGUsInNldFVpbnQxNiIse3ZhbHVlOm1ha2VTZXR0ZXIoVWludDE2QXJyYXkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KERhdGFWaWV3LnByb3RvdHlwZSwic2V0SW50MTYiLHt2YWx1ZTptYWtlU2V0dGVyKEludDE2QXJyYXkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KERhdGFWaWV3LnByb3RvdHlwZSwic2V0VWludDMyIix7dmFsdWU6bWFrZVNldHRlcihVaW50MzJBcnJheSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoRGF0YVZpZXcucHJvdG90eXBlLCJzZXRJbnQzMiIse3ZhbHVlOm1ha2VTZXR0ZXIoSW50MzJBcnJheSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoRGF0YVZpZXcucHJvdG90eXBlLCJzZXRGbG9hdDMyIix7dmFsdWU6bWFrZVNldHRlcihGbG9hdDMyQXJyYXkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KERhdGFWaWV3LnByb3RvdHlwZSwic2V0RmxvYXQ2NCIse3ZhbHVlOm1ha2VTZXR0ZXIoRmxvYXQ2NEFycmF5KX0pO2dsb2JhbC5EYXRhVmlldz1nbG9iYWwuRGF0YVZpZXd8fERhdGFWaWV3fSkoKX0pKHRoaXMpOw=="></script>
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
28 <link href="data:text/css;charset=utf-8,%0A%2Econtainer%2Dfluid%2Ecrosstalk%2Dbscols%20%7B%0Amargin%2Dleft%3A%20%2D30px%3B%0Amargin%2Dright%3A%20%2D30px%3B%0Awhite%2Dspace%3A%20normal%3B%0A%7D%0A%0Abody%20%3E%20%2Econtainer%2Dfluid%2Ecrosstalk%2Dbscols%20%7B%0Amargin%2Dleft%3A%20auto%3B%0Amargin%2Dright%3A%20auto%3B%0A%7D%0A%2Ecrosstalk%2Dinput%2Dcheckboxgroup%20%2Ecrosstalk%2Doptions%2Dgroup%20%2Ecrosstalk%2Doptions%2Dcolumn%20%7B%0Adisplay%3A%20inline%2Dblock%3B%0Apadding%2Dright%3A%2012px%3B%0Avertical%2Dalign%3A%20top%3B%0A%7D%0A%40media%20only%20screen%20and%20%28max%2Dwidth%3A480px%29%20%7B%0A%2Ecrosstalk%2Dinput%2Dcheckboxgroup%20%2Ecrosstalk%2Doptions%2Dgroup%20%2Ecrosstalk%2Doptions%2Dcolumn%20%7B%0Adisplay%3A%20block%3B%0Apadding%2Dright%3A%20inherit%3B%0A%7D%0A%7D%0A" rel="stylesheet" />
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
29 <script src="data:application/x-javascript;base64,IWZ1bmN0aW9uIGEoYixjLGQpe2Z1bmN0aW9uIGUoZyxoKXtpZighY1tnXSl7aWYoIWJbZ10pe3ZhciBpPSJmdW5jdGlvbiI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlO2lmKCFoJiZpKXJldHVybiBpKGcsITApO2lmKGYpcmV0dXJuIGYoZywhMCk7dmFyIGo9bmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIrZysiJyIpO3Rocm93IGouY29kZT0iTU9EVUxFX05PVF9GT1VORCIsan12YXIgaz1jW2ddPXtleHBvcnRzOnt9fTtiW2ddWzBdLmNhbGwoay5leHBvcnRzLGZ1bmN0aW9uKGEpe3ZhciBjPWJbZ11bMV1bYV07cmV0dXJuIGUoYz9jOmEpfSxrLGsuZXhwb3J0cyxhLGIsYyxkKX1yZXR1cm4gY1tnXS5leHBvcnRzfWZvcih2YXIgZj0iZnVuY3Rpb24iPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZSxnPTA7ZzxkLmxlbmd0aDtnKyspZShkW2ddKTtyZXR1cm4gZX0oezE6W2Z1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZChhLGIpe2lmKCEoYSBpbnN0YW5jZW9mIGIpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoYSxiKXtmb3IodmFyIGM9MDtjPGIubGVuZ3RoO2MrKyl7dmFyIGQ9YltjXTtkLmVudW1lcmFibGU9ZC5lbnVtZXJhYmxlfHwhMSxkLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gZCYmKGQud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhLGQua2V5LGQpfX1yZXR1cm4gZnVuY3Rpb24oYixjLGQpe3JldHVybiBjJiZhKGIucHJvdG90eXBlLGMpLGQmJmEoYixkKSxifX0oKSxmPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYSgpe2QodGhpcyxhKSx0aGlzLl90eXBlcz17fSx0aGlzLl9zZXE9MH1yZXR1cm4gZShhLFt7a2V5OiJvbiIsdmFsdWU6ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLl90eXBlc1thXTtjfHwoYz10aGlzLl90eXBlc1thXT17fSk7dmFyIGQ9InN1YiIrdGhpcy5fc2VxKys7cmV0dXJuIGNbZF09YixkfX0se2tleToib2ZmIix2YWx1ZTpmdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuX3R5cGVzW2FdO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBiKXtmb3IodmFyIGQgaW4gYylpZihjLmhhc093blByb3BlcnR5KGQpJiZjW2RdPT09YilyZXR1cm4gZGVsZXRlIGNbZF0sZDtyZXR1cm4hMX1pZigic3RyaW5nIj09dHlwZW9mIGIpcmV0dXJuISghY3x8IWNbYl0pJiYoZGVsZXRlIGNbYl0sYik7dGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHR5cGUgZm9yIGxpc3RlbmVyIil9fSx7a2V5OiJ0cmlnZ2VyIix2YWx1ZTpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcy5fdHlwZXNbYV07Zm9yKHZhciBlIGluIGQpZC5oYXNPd25Qcm9wZXJ0eShlKSYmZFtlXS5jYWxsKGMsYil9fV0pLGF9KCk7Yy5kZWZhdWx0PWZ9LHt9XSwyOltmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGQoYSl7aWYoYSYmYS5fX2VzTW9kdWxlKXJldHVybiBhO3ZhciBiPXt9O2lmKG51bGwhPWEpZm9yKHZhciBjIGluIGEpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGEsYykmJihiW2NdPWFbY10pO3JldHVybiBiLmRlZmF1bHQ9YSxifWZ1bmN0aW9uIGUoYSl7cmV0dXJuIGEmJmEuX19lc01vZHVsZT9hOntkZWZhdWx0OmF9fWZ1bmN0aW9uIGYoYSxiKXtpZighKGEgaW5zdGFuY2VvZiBiKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBnKGEpe3ZhciBiPWEudmFyKCJmaWx0ZXJzZXQiKSxjPWIuZ2V0KCk7cmV0dXJuIGN8fChjPW5ldyBtLmRlZmF1bHQsYi5zZXQoYykpLGN9ZnVuY3Rpb24gaCgpe3JldHVybiByKyt9T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGMuRmlsdGVySGFuZGxlPXZvaWQgMDt2YXIgaT1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoYSxiKXtmb3IodmFyIGM9MDtjPGIubGVuZ3RoO2MrKyl7dmFyIGQ9YltjXTtkLmVudW1lcmFibGU9ZC5lbnVtZXJhYmxlfHwhMSxkLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gZCYmKGQud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhLGQua2V5LGQpfX1yZXR1cm4gZnVuY3Rpb24oYixjLGQpe3JldHVybiBjJiZhKGIucHJvdG90eXBlLGMpLGQmJmEoYixkKSxifX0oKSxqPWEoIi4vZXZlbnRzIiksaz1lKGopLGw9YSgiLi9maWx0ZXJzZXQiKSxtPWUobCksbj1hKCIuL2dyb3VwIiksbz1lKG4pLHA9YSgiLi91dGlsIikscT1kKHApLHI9MTtjLkZpbHRlckhhbmRsZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoYixjKXtmKHRoaXMsYSksdGhpcy5fZXZlbnRSZWxheT1uZXcgay5kZWZhdWx0LHRoaXMuX2VtaXR0ZXI9bmV3IHEuU3Vic2NyaXB0aW9uVHJhY2tlcih0aGlzLl9ldmVudFJlbGF5KSx0aGlzLl9ncm91cD1udWxsLHRoaXMuX2ZpbHRlclNldD1udWxsLHRoaXMuX2ZpbHRlclZhcj1udWxsLHRoaXMuX3Zhck9uQ2hhbmdlU3ViPW51bGwsdGhpcy5fZXh0cmFJbmZvPXEuZXh0ZW5kKHtzZW5kZXI6dGhpc30sYyksdGhpcy5faWQ9ImZpbHRlciIraCgpLHRoaXMuc2V0R3JvdXAoYil9cmV0dXJuIGkoYSxbe2tleToic2V0R3JvdXAiLHZhbHVlOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXM7aWYodGhpcy5fZ3JvdXAhPT1hJiYodGhpcy5fZ3JvdXB8fGEpJiYodGhpcy5fZmlsdGVyVmFyJiYodGhpcy5fZmlsdGVyVmFyLm9mZigiY2hhbmdlIix0aGlzLl92YXJPbkNoYW5nZVN1YiksdGhpcy5jbGVhcigpLHRoaXMuX3Zhck9uQ2hhbmdlU3ViPW51bGwsdGhpcy5fZmlsdGVyVmFyPW51bGwsdGhpcy5fZmlsdGVyU2V0PW51bGwpLHRoaXMuX2dyb3VwPWEsYSkpe2E9KDAsby5kZWZhdWx0KShhKSx0aGlzLl9maWx0ZXJTZXQ9ZyhhKSx0aGlzLl9maWx0ZXJWYXI9KDAsby5kZWZhdWx0KShhKS52YXIoImZpbHRlciIpO3ZhciBjPXRoaXMuX2ZpbHRlclZhci5vbigiY2hhbmdlIixmdW5jdGlvbihhKXtiLl9ldmVudFJlbGF5LnRyaWdnZXIoImNoYW5nZSIsYSxiKX0pO3RoaXMuX3Zhck9uQ2hhbmdlU3ViPWN9fX0se2tleToiX21lcmdlRXh0cmFJbmZvIix2YWx1ZTpmdW5jdGlvbihhKXtyZXR1cm4gcS5leHRlbmQoe30sdGhpcy5fZXh0cmFJbmZvP3RoaXMuX2V4dHJhSW5mbzpudWxsLGE/YTpudWxsKX19LHtrZXk6ImNsb3NlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX2VtaXR0ZXIucmVtb3ZlQWxsTGlzdGVuZXJzKCksdGhpcy5jbGVhcigpLHRoaXMuc2V0R3JvdXAobnVsbCl9fSx7a2V5OiJjbGVhciIsdmFsdWU6ZnVuY3Rpb24oYSl7dGhpcy5fZmlsdGVyU2V0JiYodGhpcy5fZmlsdGVyU2V0LmNsZWFyKHRoaXMuX2lkKSx0aGlzLl9vbkNoYW5nZShhKSl9fSx7a2V5OiJzZXQiLHZhbHVlOmZ1bmN0aW9uKGEsYil7dGhpcy5fZmlsdGVyU2V0JiYodGhpcy5fZmlsdGVyU2V0LnVwZGF0ZSh0aGlzLl9pZCxhKSx0aGlzLl9vbkNoYW5nZShiKSl9fSx7a2V5OiJvbiIsdmFsdWU6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5fZW1pdHRlci5vbihhLGIpfX0se2tleToib2ZmIix2YWx1ZTpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLl9lbWl0dGVyLm9mZihhLGIpfX0se2tleToiX29uQ2hhbmdlIix2YWx1ZTpmdW5jdGlvbihhKXt0aGlzLl9maWx0ZXJTZXQmJnRoaXMuX2ZpbHRlclZhci5zZXQodGhpcy5fZmlsdGVyU2V0LnZhbHVlLHRoaXMuX21lcmdlRXh0cmFJbmZvKGEpKX19LHtrZXk6ImZpbHRlcmVkS2V5cyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZpbHRlclNldD90aGlzLl9maWx0ZXJTZXQudmFsdWU6bnVsbH19XSksYX0oKX0seyIuL2V2ZW50cyI6MSwiLi9maWx0ZXJzZXQiOjMsIi4vZ3JvdXAiOjQsIi4vdXRpbCI6MTF9XSwzOltmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGQoYSxiKXtpZighKGEgaW5zdGFuY2VvZiBiKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBlKGEsYil7cmV0dXJuIGE9PT1iPzA6YTxiPy0xOmE+Yj8xOnZvaWQgMH1PYmplY3QuZGVmaW5lUHJvcGVydHkoYywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGEsYil7Zm9yKHZhciBjPTA7YzxiLmxlbmd0aDtjKyspe3ZhciBkPWJbY107ZC5lbnVtZXJhYmxlPWQuZW51bWVyYWJsZXx8ITEsZC5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGQmJihkLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYSxkLmtleSxkKX19cmV0dXJuIGZ1bmN0aW9uKGIsYyxkKXtyZXR1cm4gYyYmYShiLnByb3RvdHlwZSxjKSxkJiZhKGIsZCksYn19KCksZz1hKCIuL3V0aWwiKSxoPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYSgpe2QodGhpcyxhKSx0aGlzLnJlc2V0KCl9cmV0dXJuIGYoYSxbe2tleToicmVzZXQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5faGFuZGxlcz17fSx0aGlzLl9rZXlzPXt9LHRoaXMuX3ZhbHVlPW51bGwsdGhpcy5fYWN0aXZlSGFuZGxlcz0wfX0se2tleToidXBkYXRlIix2YWx1ZTpmdW5jdGlvbihhLGIpe251bGwhPT1iJiYoYj1iLnNsaWNlKDApLGIuc29ydChlKSk7dmFyIGM9KDAsZy5kaWZmU29ydGVkTGlzdHMpKHRoaXMuX2hhbmRsZXNbYV0sYiksZD1jLmFkZGVkLGY9Yy5yZW1vdmVkO3RoaXMuX2hhbmRsZXNbYV09Yjtmb3IodmFyIGg9MDtoPGQubGVuZ3RoO2grKyl0aGlzLl9rZXlzW2RbaF1dPSh0aGlzLl9rZXlzW2RbaF1dfHwwKSsxO2Zvcih2YXIgaT0wO2k8Zi5sZW5ndGg7aSsrKXRoaXMuX2tleXNbZltpXV0tLTt0aGlzLl91cGRhdGVWYWx1ZShiKX19LHtrZXk6Il91cGRhdGVWYWx1ZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgYT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5fYWxsS2V5cyxiPU9iamVjdC5rZXlzKHRoaXMuX2hhbmRsZXMpLmxlbmd0aDtpZigwPT09Yil0aGlzLl92YWx1ZT1udWxsO2Vsc2V7dGhpcy5fdmFsdWU9W107Zm9yKHZhciBjPTA7YzxhLmxlbmd0aDtjKyspe3ZhciBkPXRoaXMuX2tleXNbYVtjXV07ZD09PWImJnRoaXMuX3ZhbHVlLnB1c2goYVtjXSl9fX19LHtrZXk6ImNsZWFyIix2YWx1ZTpmdW5jdGlvbihhKXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIHRoaXMuX2hhbmRsZXNbYV0pe3ZhciBiPXRoaXMuX2hhbmRsZXNbYV07Ynx8KGI9W10pO2Zvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKXRoaXMuX2tleXNbYltjXV0tLTtkZWxldGUgdGhpcy5faGFuZGxlc1thXSx0aGlzLl91cGRhdGVWYWx1ZSgpfX19LHtrZXk6InZhbHVlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdmFsdWV9fSx7a2V5OiJfYWxsS2V5cyIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGE9T2JqZWN0LmtleXModGhpcy5fa2V5cyk7cmV0dXJuIGEuc29ydChlKSxhfX1dKSxhfSgpO2MuZGVmYXVsdD1ofSx7Ii4vdXRpbCI6MTF9XSw0OltmdW5jdGlvbihhLGIsYyl7KGZ1bmN0aW9uKGIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBkKGEpe3JldHVybiBhJiZhLl9fZXNNb2R1bGU/YTp7ZGVmYXVsdDphfX1mdW5jdGlvbiBlKGEsYil7aWYoIShhIGluc3RhbmNlb2YgYikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gZihhKXtpZihhJiYic3RyaW5nIj09dHlwZW9mIGEpcmV0dXJuIGsuaGFzT3duUHJvcGVydHkoYSl8fChrW2FdPW5ldyBsKGEpKSxrW2FdO2lmKCJvYmplY3QiPT09KCJ1bmRlZmluZWQiPT10eXBlb2YgYT8idW5kZWZpbmVkIjpoKGEpKSYmYS5fdmFycyYmYS52YXIpcmV0dXJuIGE7aWYoQXJyYXkuaXNBcnJheShhKSYmMT09YS5sZW5ndGgmJiJzdHJpbmciPT10eXBlb2YgYVswXSlyZXR1cm4gZihhWzBdKTt0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgZ3JvdXBOYW1lIGFyZ3VtZW50Iil9T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBnPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShhLGIpe2Zvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKXt2YXIgZD1iW2NdO2QuZW51bWVyYWJsZT1kLmVudW1lcmFibGV8fCExLGQuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBkJiYoZC53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGEsZC5rZXksZCl9fXJldHVybiBmdW5jdGlvbihiLGMsZCl7cmV0dXJuIGMmJmEoYi5wcm90b3R5cGUsYyksZCYmYShiLGQpLGJ9fSgpLGg9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oYSl7cmV0dXJuIHR5cGVvZiBhfTpmdW5jdGlvbihhKXtyZXR1cm4gYSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmYS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmYSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGF9O2MuZGVmYXVsdD1mO3ZhciBpPWEoIi4vdmFyIiksaj1kKGkpO2IuX19jcm9zc3RhbGtfZ3JvdXBzPWIuX19jcm9zc3RhbGtfZ3JvdXBzfHx7fTt2YXIgaz1iLl9fY3Jvc3N0YWxrX2dyb3VwcyxsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShiKXtlKHRoaXMsYSksdGhpcy5uYW1lPWIsdGhpcy5fdmFycz17fX1yZXR1cm4gZyhhLFt7a2V5OiJ2YXIiLHZhbHVlOmZ1bmN0aW9uKGEpe2lmKCFhfHwic3RyaW5nIiE9dHlwZW9mIGEpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHZhciBuYW1lIik7cmV0dXJuIHRoaXMuX3ZhcnMuaGFzT3duUHJvcGVydHkoYSl8fCh0aGlzLl92YXJzW2FdPW5ldyBqLmRlZmF1bHQodGhpcyxhKSksdGhpcy5fdmFyc1thXX19LHtrZXk6ImhhcyIsdmFsdWU6ZnVuY3Rpb24oYSl7aWYoIWF8fCJzdHJpbmciIT10eXBlb2YgYSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdmFyIG5hbWUiKTtyZXR1cm4gdGhpcy5fdmFycy5oYXNPd25Qcm9wZXJ0eShhKX19XSksYX0oKX0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0seyIuL3ZhciI6MTJ9XSw1OltmdW5jdGlvbihhLGIsYyl7KGZ1bmN0aW9uKGIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBkKGEpe3JldHVybiBhJiZhLl9fZXNNb2R1bGU/YTp7ZGVmYXVsdDphfX1mdW5jdGlvbiBlKGEpe3JldHVybiBrLnZhcihhKX1mdW5jdGlvbiBmKGEpe3JldHVybiBrLmhhcyhhKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoYywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGc9YSgiLi9ncm91cCIpLGg9ZChnKSxpPWEoIi4vc2VsZWN0aW9uIiksaj1hKCIuL2ZpbHRlciIpO2EoIi4vaW5wdXQiKSxhKCIuL2lucHV0X3NlbGVjdGl6ZSIpLGEoIi4vaW5wdXRfY2hlY2tib3hncm91cCIpLGEoIi4vaW5wdXRfc2xpZGVyIik7dmFyIGs9KDAsaC5kZWZhdWx0KSgiZGVmYXVsdCIpO2IuU2hpbnkmJmIuU2hpbnkuYWRkQ3VzdG9tTWVzc2FnZUhhbmRsZXIoInVwZGF0ZS1jbGllbnQtdmFsdWUiLGZ1bmN0aW9uKGEpeyJzdHJpbmciPT10eXBlb2YgYS5ncm91cD8oMCxoLmRlZmF1bHQpKGEuZ3JvdXApLnZhcihhLm5hbWUpLnNldChhLnZhbHVlKTplKGEubmFtZSkuc2V0KGEudmFsdWUpfSk7dmFyIGw9e2dyb3VwOmguZGVmYXVsdCx2YXI6ZSxoYXM6ZixTZWxlY3Rpb25IYW5kbGU6aS5TZWxlY3Rpb25IYW5kbGUsRmlsdGVySGFuZGxlOmouRmlsdGVySGFuZGxlfTtjLmRlZmF1bHQ9bCxiLmNyb3NzdGFsaz1sfSkuY2FsbCh0aGlzLCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7Ii4vZmlsdGVyIjoyLCIuL2dyb3VwIjo0LCIuL2lucHV0Ijo2LCIuL2lucHV0X2NoZWNrYm94Z3JvdXAiOjcsIi4vaW5wdXRfc2VsZWN0aXplIjo4LCIuL2lucHV0X3NsaWRlciI6OSwiLi9zZWxlY3Rpb24iOjEwfV0sNjpbZnVuY3Rpb24oYSxiLGMpeyhmdW5jdGlvbihhKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gYihiKXtpW2IuY2xhc3NOYW1lXT1iLGEuZG9jdW1lbnQmJiJjb21wbGV0ZSIhPT1hLmRvY3VtZW50LnJlYWR5U3RhdGU/aChmdW5jdGlvbigpe2QoKX0pOmEuZG9jdW1lbnQmJnNldFRpbWVvdXQoZCwxMDApfWZ1bmN0aW9uIGQoKXtPYmplY3Qua2V5cyhpKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBiPWlbYV07aCgiLiIrYi5jbGFzc05hbWUpLm5vdCgiLmNyb3NzdGFsay1pbnB1dC1ib3VuZCIpLmVhY2goZnVuY3Rpb24oYSxjKXtnKGIsYyl9KX0pfWZ1bmN0aW9uIGUoYSl7cmV0dXJuIGEucmVwbGFjZSgvKFshIiMkJSYnKCkqKywuXC86Ozw9Pj9AXFtcXFxdXmB7fH1+XSkvZywiXFwkMSIpfWZ1bmN0aW9uIGYoYSl7dmFyIGI9aChhKTtPYmplY3Qua2V5cyhpKS5mb3JFYWNoKGZ1bmN0aW9uKGMpe2lmKGIuaGFzQ2xhc3MoYykmJiFiLmhhc0NsYXNzKCJjcm9zc3RhbGstaW5wdXQtYm91bmQiKSl7dmFyIGQ9aVtjXTtnKGQsYSl9fSl9ZnVuY3Rpb24gZyhhLGIpe3ZhciBjPWgoYikuZmluZCgic2NyaXB0W3R5cGU9J2FwcGxpY2F0aW9uL2pzb24nXVtkYXRhLWZvcj0nIitlKGIuaWQpKyInXSIpLGQ9SlNPTi5wYXJzZShjWzBdLmlubmVyVGV4dCksZj1hLmZhY3RvcnkoYixkKTtoKGIpLmRhdGEoImNyb3NzdGFsay1pbnN0YW5jZSIsZiksaChiKS5hZGRDbGFzcygiY3Jvc3N0YWxrLWlucHV0LWJvdW5kIil9T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGMucmVnaXN0ZXI9Yjt2YXIgaD1hLmpRdWVyeSxpPXt9O2EuU2hpbnkmJiFmdW5jdGlvbigpe3ZhciBiPW5ldyBhLlNoaW55LklucHV0QmluZGluZyxjPWEualF1ZXJ5O2MuZXh0ZW5kKGIse2ZpbmQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGMoYSkuZmluZCgiLmNyb3NzdGFsay1pbnB1dCIpfSxpbml0aWFsaXplOmZ1bmN0aW9uKGEpe2MoYSkuaGFzQ2xhc3MoImNyb3NzdGFsay1pbnB1dC1ib3VuZCIpfHxmKGEpfSxnZXRJZDpmdW5jdGlvbihhKXtyZXR1cm4gYS5pZH0sZ2V0VmFsdWU6ZnVuY3Rpb24oYSl7fSxzZXRWYWx1ZTpmdW5jdGlvbihhLGIpe30scmVjZWl2ZU1lc3NhZ2U6ZnVuY3Rpb24oYSxiKXt9LHN1YnNjcmliZTpmdW5jdGlvbihhLGIpe2MoYSkuZGF0YSgiY3Jvc3N0YWxrLWluc3RhbmNlIikucmVzdW1lKCl9LHVuc3Vic2NyaWJlOmZ1bmN0aW9uKGEpe2MoYSkuZGF0YSgiY3Jvc3N0YWxrLWluc3RhbmNlIikuc3VzcGVuZCgpfX0pLGEuU2hpbnkuaW5wdXRCaW5kaW5ncy5yZWdpc3RlcihiLCJjcm9zc3RhbGsuaW5wdXRCaW5kaW5nIil9KCl9KS5jYWxsKHRoaXMsInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHt9XSw3OltmdW5jdGlvbihhLGIsYyl7KGZ1bmN0aW9uKGIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBjKGEpe2lmKGEmJmEuX19lc01vZHVsZSlyZXR1cm4gYTt2YXIgYj17fTtpZihudWxsIT1hKWZvcih2YXIgYyBpbiBhKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhLGMpJiYoYltjXT1hW2NdKTtyZXR1cm4gYi5kZWZhdWx0PWEsYn12YXIgZD1hKCIuL2lucHV0IiksZT1jKGQpLGY9YSgiLi9maWx0ZXIiKSxnPWIualF1ZXJ5O2UucmVnaXN0ZXIoe2NsYXNzTmFtZToiY3Jvc3N0YWxrLWlucHV0LWNoZWNrYm94Z3JvdXAiLGZhY3Rvcnk6ZnVuY3Rpb24oYSxiKXt2YXIgYz1uZXcgZi5GaWx0ZXJIYW5kbGUoYi5ncm91cCksZD12b2lkIDAsZT1nKGEpO3JldHVybiBlLm9uKCJjaGFuZ2UiLCJpbnB1dFt0eXBlPSdjaGVja2JveCddIixmdW5jdGlvbigpe3ZhciBhPWUuZmluZCgiaW5wdXRbdHlwZT0nY2hlY2tib3gnXTpjaGVja2VkIik7MD09PWEubGVuZ3RoPyhkPW51bGwsYy5jbGVhcigpKTohZnVuY3Rpb24oKXt2YXIgZT17fTthLmVhY2goZnVuY3Rpb24oKXtiLm1hcFt0aGlzLnZhbHVlXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2VbYV09ITB9KX0pO3ZhciBmPU9iamVjdC5rZXlzKGUpO2Yuc29ydCgpLGQ9ZixjLnNldChmKX0oKX0pLHtzdXNwZW5kOmZ1bmN0aW9uKCl7Yy5jbGVhcigpfSxyZXN1bWU6ZnVuY3Rpb24oKXtkJiZjLnNldChkKX19fX0pfSkuY2FsbCh0aGlzLCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7Ii4vZmlsdGVyIjoyLCIuL2lucHV0Ijo2fV0sODpbZnVuY3Rpb24oYSxiLGMpeyhmdW5jdGlvbihiKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gYyhhKXtpZihhJiZhLl9fZXNNb2R1bGUpcmV0dXJuIGE7dmFyIGI9e307aWYobnVsbCE9YSlmb3IodmFyIGMgaW4gYSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYSxjKSYmKGJbY109YVtjXSk7cmV0dXJuIGIuZGVmYXVsdD1hLGJ9dmFyIGQ9YSgiLi9pbnB1dCIpLGU9YyhkKSxmPWEoIi4vdXRpbCIpLGc9YyhmKSxoPWEoIi4vZmlsdGVyIiksaT1iLmpRdWVyeTtlLnJlZ2lzdGVyKHtjbGFzc05hbWU6ImNyb3NzdGFsay1pbnB1dC1zZWxlY3QiLGZhY3Rvcnk6ZnVuY3Rpb24oYSxiKXt2YXIgYz1be3ZhbHVlOiIiLGxhYmVsOiIoQWxsKSJ9XSxkPWcuZGF0YWZyYW1lVG9EMyhiLml0ZW1zKSxlPXtvcHRpb25zOmMuY29uY2F0KGQpLHZhbHVlRmllbGQ6InZhbHVlIixsYWJlbEZpZWxkOiJsYWJlbCIsc2VhcmNoRmllbGQ6ImxhYmVsIn0sZj1pKGEpLmZpbmQoInNlbGVjdCIpWzBdLGo9aShmKS5zZWxlY3RpemUoZSlbMF0uc2VsZWN0aXplLGs9bmV3IGguRmlsdGVySGFuZGxlKGIuZ3JvdXApLGw9dm9pZCAwO3JldHVybiBqLm9uKCJjaGFuZ2UiLGZ1bmN0aW9uKCl7MD09PWouaXRlbXMubGVuZ3RoPyhsPW51bGwsay5jbGVhcigpKTohZnVuY3Rpb24oKXt2YXIgYT17fTtqLml0ZW1zLmZvckVhY2goZnVuY3Rpb24oYyl7Yi5tYXBbY10uZm9yRWFjaChmdW5jdGlvbihiKXthW2JdPSEwfSl9KTt2YXIgYz1PYmplY3Qua2V5cyhhKTtjLnNvcnQoKSxsPWMsay5zZXQoYyl9KCl9KSx7c3VzcGVuZDpmdW5jdGlvbigpe2suY2xlYXIoKX0scmVzdW1lOmZ1bmN0aW9uKCl7bCYmay5zZXQobCl9fX19KX0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0seyIuL2ZpbHRlciI6MiwiLi9pbnB1dCI6NiwiLi91dGlsIjoxMX1dLDk6W2Z1bmN0aW9uKGEsYixjKXsoZnVuY3Rpb24oYil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGMoYSl7aWYoYSYmYS5fX2VzTW9kdWxlKXJldHVybiBhO3ZhciBiPXt9O2lmKG51bGwhPWEpZm9yKHZhciBjIGluIGEpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGEsYykmJihiW2NdPWFbY10pO3JldHVybiBiLmRlZmF1bHQ9YSxifWZ1bmN0aW9uIGQoYSxiKXtmb3IodmFyIGM9YS50b1N0cmluZygpO2MubGVuZ3RoPGI7KWM9IjAiK2M7cmV0dXJuIGN9ZnVuY3Rpb24gZShhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIERhdGU/YS5nZXRVVENGdWxsWWVhcigpKyItIitkKGEuZ2V0VVRDTW9udGgoKSsxLDIpKyItIitkKGEuZ2V0VVRDRGF0ZSgpLDIpOm51bGx9dmFyIGY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGEsYil7dmFyIGM9W10sZD0hMCxlPSExLGY9dm9pZCAwO3RyeXtmb3IodmFyIGcsaD1hW1N5bWJvbC5pdGVyYXRvcl0oKTshKGQ9KGc9aC5uZXh0KCkpLmRvbmUpJiYoYy5wdXNoKGcudmFsdWUpLCFifHxjLmxlbmd0aCE9PWIpO2Q9ITApO31jYXRjaChhKXtlPSEwLGY9YX1maW5hbGx5e3RyeXshZCYmaC5yZXR1cm4mJmgucmV0dXJuKCl9ZmluYWxseXtpZihlKXRocm93IGZ9fXJldHVybiBjfXJldHVybiBmdW5jdGlvbihiLGMpe2lmKEFycmF5LmlzQXJyYXkoYikpcmV0dXJuIGI7aWYoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChiKSlyZXR1cm4gYShiLGMpO3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UiKX19KCksZz1hKCIuL2lucHV0IiksaD1jKGcpLGk9YSgiLi9maWx0ZXIiKSxqPWIualF1ZXJ5LGs9Yi5zdHJmdGltZTtoLnJlZ2lzdGVyKHtjbGFzc05hbWU6ImNyb3NzdGFsay1pbnB1dC1zbGlkZXIiLGZhY3Rvcnk6ZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKCl7dmFyIGE9aC5kYXRhKCJpb25SYW5nZVNsaWRlciIpLnJlc3VsdCxiPXZvaWQgMCxjPWguZGF0YSgiZGF0YS10eXBlIik7cmV0dXJuIGI9ImRhdGUiPT09Yz9mdW5jdGlvbihhKXtyZXR1cm4gZShuZXcgRGF0ZSgrYSkpfToiZGF0ZXRpbWUiPT09Yz9mdW5jdGlvbihhKXtyZXR1cm4rYS8xZTN9OmZ1bmN0aW9uKGEpe3JldHVybithfSwiZG91YmxlIj09PWguZGF0YSgiaW9uUmFuZ2VTbGlkZXIiKS5vcHRpb25zLnR5cGU/W2IoYS5mcm9tKSxiKGEudG8pXTpiKGEuZnJvbSl9dmFyIGQ9bmV3IGkuRmlsdGVySGFuZGxlKGIuZ3JvdXApLGc9e30saD1qKGEpLmZpbmQoImlucHV0IiksbD1oLmRhdGEoImRhdGEtdHlwZSIpLG09aC5kYXRhKCJ0aW1lLWZvcm1hdCIpLG49dm9pZCAwO2lmKCJkYXRlIj09PWwpbj1rLnV0YygpLGcucHJldHRpZnk9ZnVuY3Rpb24oYSl7cmV0dXJuIG4obSxuZXcgRGF0ZShhKSl9O2Vsc2UgaWYoImRhdGV0aW1lIj09PWwpe3ZhciBvPWguZGF0YSgidGltZXpvbmUiKTtuPW8/ay50aW1lem9uZShvKTprLGcucHJldHRpZnk9ZnVuY3Rpb24oYSl7cmV0dXJuIG4obSxuZXcgRGF0ZShhKSl9fWguaW9uUmFuZ2VTbGlkZXIoZyk7dmFyIHA9bnVsbDtyZXR1cm4gaC5vbigiY2hhbmdlLmNyb3NzdGFsa1NsaWRlcklucHV0IixmdW5jdGlvbihhKXtpZighaC5kYXRhKCJ1cGRhdGluZyIpJiYhaC5kYXRhKCJhbmltYXRpbmciKSl7Zm9yKHZhciBlPWMoKSxnPWYoZSwyKSxpPWdbMF0saj1nWzFdLGs9W10sbD0wO2w8Yi52YWx1ZXMubGVuZ3RoO2wrKyl7dmFyIG09Yi52YWx1ZXNbbF07bT49aSYmbTw9aiYmay5wdXNoKGIua2V5c1tsXSl9ay5zb3J0KCksZC5zZXQoaykscD1rfX0pLHtzdXNwZW5kOmZ1bmN0aW9uKCl7ZC5jbGVhcigpfSxyZXN1bWU6ZnVuY3Rpb24oKXtwJiZkLnNldChwKX19fX0pfSkuY2FsbCh0aGlzLCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7Ii4vZmlsdGVyIjoyLCIuL2lucHV0Ijo2fV0sMTA6W2Z1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZChhKXtpZihhJiZhLl9fZXNNb2R1bGUpcmV0dXJuIGE7dmFyIGI9e307aWYobnVsbCE9YSlmb3IodmFyIGMgaW4gYSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYSxjKSYmKGJbY109YVtjXSk7cmV0dXJuIGIuZGVmYXVsdD1hLGJ9ZnVuY3Rpb24gZShhKXtyZXR1cm4gYSYmYS5fX2VzTW9kdWxlP2E6e2RlZmF1bHQ6YX19ZnVuY3Rpb24gZihhLGIpe2lmKCEoYSBpbnN0YW5jZW9mIGIpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxjLlNlbGVjdGlvbkhhbmRsZT12b2lkIDA7dmFyIGc9ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGEsYil7Zm9yKHZhciBjPTA7YzxiLmxlbmd0aDtjKyspe3ZhciBkPWJbY107ZC5lbnVtZXJhYmxlPWQuZW51bWVyYWJsZXx8ITEsZC5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGQmJihkLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYSxkLmtleSxkKX19cmV0dXJuIGZ1bmN0aW9uKGIsYyxkKXtyZXR1cm4gYyYmYShiLnByb3RvdHlwZSxjKSxkJiZhKGIsZCksYn19KCksaD1hKCIuL2V2ZW50cyIpLGk9ZShoKSxqPWEoIi4vZ3JvdXAiKSxrPWUoaiksbD1hKCIuL3V0aWwiKSxtPWQobCk7Yy5TZWxlY3Rpb25IYW5kbGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKCl7dmFyIGI9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm51bGwsYz1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bnVsbDtmKHRoaXMsYSksdGhpcy5fZXZlbnRSZWxheT1uZXcgaS5kZWZhdWx0LHRoaXMuX2VtaXR0ZXI9bmV3IG0uU3Vic2NyaXB0aW9uVHJhY2tlcih0aGlzLl9ldmVudFJlbGF5KSx0aGlzLl9ncm91cD1udWxsLHRoaXMuX3Zhcj1udWxsLHRoaXMuX3Zhck9uQ2hhbmdlU3ViPW51bGwsdGhpcy5fZXh0cmFJbmZvPW0uZXh0ZW5kKHtzZW5kZXI6dGhpc30sYyksdGhpcy5zZXRHcm91cChiKX1yZXR1cm4gZyhhLFt7a2V5OiJzZXRHcm91cCIsdmFsdWU6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcztpZih0aGlzLl9ncm91cCE9PWEmJih0aGlzLl9ncm91cHx8YSkmJih0aGlzLl92YXImJih0aGlzLl92YXIub2ZmKCJjaGFuZ2UiLHRoaXMuX3Zhck9uQ2hhbmdlU3ViKSx0aGlzLl92YXI9bnVsbCx0aGlzLl92YXJPbkNoYW5nZVN1Yj1udWxsKSx0aGlzLl9ncm91cD1hLGEpKXt0aGlzLl92YXI9KDAsay5kZWZhdWx0KShhKS52YXIoInNlbGVjdGlvbiIpO3ZhciBjPXRoaXMuX3Zhci5vbigiY2hhbmdlIixmdW5jdGlvbihhKXtiLl9ldmVudFJlbGF5LnRyaWdnZXIoImNoYW5nZSIsYSxiKX0pO3RoaXMuX3Zhck9uQ2hhbmdlU3ViPWN9fX0se2tleToiX21lcmdlRXh0cmFJbmZvIix2YWx1ZTpmdW5jdGlvbihhKXtyZXR1cm4gbS5leHRlbmQoe30sdGhpcy5fZXh0cmFJbmZvP3RoaXMuX2V4dHJhSW5mbzpudWxsLGE/YTpudWxsKX19LHtrZXk6InNldCIsdmFsdWU6ZnVuY3Rpb24oYSxiKXt0aGlzLl92YXImJnRoaXMuX3Zhci5zZXQoYSx0aGlzLl9tZXJnZUV4dHJhSW5mbyhiKSl9fSx7a2V5OiJjbGVhciIsdmFsdWU6ZnVuY3Rpb24oYSl7dGhpcy5fdmFyJiZ0aGlzLnNldCh2b2lkIDAsdGhpcy5fbWVyZ2VFeHRyYUluZm8oYSkpfX0se2tleToib24iLHZhbHVlOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuX2VtaXR0ZXIub24oYSxiKX19LHtrZXk6Im9mZiIsdmFsdWU6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5fZW1pdHRlci5vZmYoYSxiKX19LHtrZXk6ImNsb3NlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX2VtaXR0ZXIucmVtb3ZlQWxsTGlzdGVuZXJzKCksdGhpcy5zZXRHcm91cChudWxsKX19LHtrZXk6InZhbHVlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdmFyP3RoaXMuX3Zhci5nZXQoKTpudWxsfX1dKSxhfSgpfSx7Ii4vZXZlbnRzIjoxLCIuL2dyb3VwIjo0LCIuL3V0aWwiOjExfV0sMTE6W2Z1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZChhLGIpe2lmKCEoYSBpbnN0YW5jZW9mIGIpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGUoYSl7Zm9yKHZhciBiPWFyZ3VtZW50cy5sZW5ndGgsYz1BcnJheShiPjE/Yi0xOjApLGQ9MTtkPGI7ZCsrKWNbZC0xXT1hcmd1bWVudHNbZF07Zm9yKHZhciBlPTA7ZTxjLmxlbmd0aDtlKyspe3ZhciBmPWNbZV07aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBmJiZudWxsIT09Zilmb3IodmFyIGcgaW4gZilmLmhhc093blByb3BlcnR5KGcpJiYoYVtnXT1mW2ddKX1yZXR1cm4gYX1mdW5jdGlvbiBmKGEpe2Zvcih2YXIgYj0xO2I8YS5sZW5ndGg7YisrKWlmKGFbYl08PWFbYi0xXSl0aHJvdyBuZXcgRXJyb3IoIkxpc3QgaXMgbm90IHNvcnRlZCBvciBjb250YWlucyBkdXBsaWNhdGUiKX1mdW5jdGlvbiBnKGEsYil7dmFyIGM9MCxkPTA7YXx8KGE9W10pLGJ8fChiPVtdKTt2YXIgZT1bXSxnPVtdO2ZvcihmKGEpLGYoYik7YzxhLmxlbmd0aCYmZDxiLmxlbmd0aDspYVtjXT09PWJbZF0/KGMrKyxkKyspOmFbY108YltkXT9lLnB1c2goYVtjKytdKTpnLnB1c2goYltkKytdKTtyZXR1cm4gYzxhLmxlbmd0aCYmKGU9ZS5jb25jYXQoYS5zbGljZShjKSkpLGQ8Yi5sZW5ndGgmJihnPWcuY29uY2F0KGIuc2xpY2UoZCkpKSx7cmVtb3ZlZDplLGFkZGVkOmd9fWZ1bmN0aW9uIGgoYSl7dmFyIGI9W10sYz12b2lkIDA7Zm9yKHZhciBkIGluIGEpe2lmKGEuaGFzT3duUHJvcGVydHkoZCkmJmIucHVzaChkKSwib2JqZWN0IiE9PWooYVtkXSl8fCJ1bmRlZmluZWQiPT10eXBlb2YgYVtkXS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJBbGwgZmllbGRzIG11c3QgYmUgYXJyYXlzIik7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBjJiZjIT09YVtkXS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJBbGwgZmllbGRzIG11c3QgYmUgYXJyYXlzIG9mIHRoZSBzYW1lIGxlbmd0aCIpO2M9YVtkXS5sZW5ndGh9Zm9yKHZhciBlPVtdLGY9dm9pZCAwLGc9MDtnPGM7ZysrKXtmPXt9O2Zvcih2YXIgaD0wO2g8Yi5sZW5ndGg7aCsrKWZbYltoXV09YVtiW2hdXVtnXTtlLnB1c2goZil9cmV0dXJuIGV9T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShhLGIpe2Zvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKXt2YXIgZD1iW2NdO2QuZW51bWVyYWJsZT1kLmVudW1lcmFibGV8fCExLGQuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBkJiYoZC53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGEsZC5rZXksZCl9fXJldHVybiBmdW5jdGlvbihiLGMsZCl7cmV0dXJuIGMmJmEoYi5wcm90b3R5cGUsYyksZCYmYShiLGQpLGJ9fSgpLGo9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oYSl7cmV0dXJuIHR5cGVvZiBhfTpmdW5jdGlvbihhKXtyZXR1cm4gYSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmYS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmYSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGF9O2MuZXh0ZW5kPWUsYy5jaGVja1NvcnRlZD1mLGMuZGlmZlNvcnRlZExpc3RzPWcsYy5kYXRhZnJhbWVUb0QzPWg7Yy5TdWJzY3JpcHRpb25UcmFja2VyPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShiKXtkKHRoaXMsYSksdGhpcy5fZW1pdHRlcj1iLHRoaXMuX3N1YnM9e319cmV0dXJuIGkoYSxbe2tleToib24iLHZhbHVlOmZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5fZW1pdHRlci5vbihhLGIpO3JldHVybiB0aGlzLl9zdWJzW2NdPWEsY319LHtrZXk6Im9mZiIsdmFsdWU6ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLl9lbWl0dGVyLm9mZihhLGIpO3JldHVybiBjJiZkZWxldGUgdGhpcy5fc3Vic1tjXSxjfX0se2tleToicmVtb3ZlQWxsTGlzdGVuZXJzIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBhPXRoaXMsYj10aGlzLl9zdWJzO3RoaXMuX3N1YnM9e30sT2JqZWN0LmtleXMoYikuZm9yRWFjaChmdW5jdGlvbihjKXthLl9lbWl0dGVyLm9mZihiW2NdLGMpfSl9fV0pLGF9KCl9LHt9XSwxMjpbZnVuY3Rpb24oYSxiLGMpeyhmdW5jdGlvbihiKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZChhKXtyZXR1cm4gYSYmYS5fX2VzTW9kdWxlP2E6e2RlZmF1bHQ6YX19ZnVuY3Rpb24gZShhLGIpe2lmKCEoYSBpbnN0YW5jZW9mIGIpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgZj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihhKXtyZXR1cm4gdHlwZW9mIGF9OmZ1bmN0aW9uKGEpe3JldHVybiBhJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZhLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZhIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgYX0sZz1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoYSxiKXtmb3IodmFyIGM9MDtjPGIubGVuZ3RoO2MrKyl7dmFyIGQ9YltjXTtkLmVudW1lcmFibGU9ZC5lbnVtZXJhYmxlfHwhMSxkLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gZCYmKGQud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhLGQua2V5LGQpfX1yZXR1cm4gZnVuY3Rpb24oYixjLGQpe3JldHVybiBjJiZhKGIucHJvdG90eXBlLGMpLGQmJmEoYixkKSxifX0oKSxoPWEoIi4vZXZlbnRzIiksaT1kKGgpLGo9ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGIsYyxkKXtlKHRoaXMsYSksdGhpcy5fZ3JvdXA9Yix0aGlzLl9uYW1lPWMsdGhpcy5fdmFsdWU9ZCx0aGlzLl9ldmVudHM9bmV3IGkuZGVmYXVsdH1yZXR1cm4gZyhhLFt7a2V5OiJnZXQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ZhbHVlfX0se2tleToic2V0Iix2YWx1ZTpmdW5jdGlvbihhLGMpe2lmKHRoaXMuX3ZhbHVlIT09YSl7dmFyIGQ9dGhpcy5fdmFsdWU7dGhpcy5fdmFsdWU9YTt2YXIgZT17fTtpZihjJiYib2JqZWN0Ij09PSgidW5kZWZpbmVkIj09dHlwZW9mIGM/InVuZGVmaW5lZCI6ZihjKSkpZm9yKHZhciBnIGluIGMpYy5oYXNPd25Qcm9wZXJ0eShnKSYmKGVbZ109Y1tnXSk7ZS5vbGRWYWx1ZT1kLGUudmFsdWU9YSx0aGlzLl9ldmVudHMudHJpZ2dlcigiY2hhbmdlIixlLHRoaXMpLGIuU2hpbnkmJmIuU2hpbnkub25JbnB1dENoYW5nZSYmYi5TaGlueS5vbklucHV0Q2hhbmdlKCIuY2xpZW50VmFsdWUtIisobnVsbCE9PXRoaXMuX2dyb3VwLm5hbWU/dGhpcy5fZ3JvdXAubmFtZSsiLSI6IiIpK3RoaXMuX25hbWUsInVuZGVmaW5lZCI9PXR5cGVvZiBhP251bGw6YSl9fX0se2tleToib24iLHZhbHVlOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuX2V2ZW50cy5vbihhLGIpfX0se2tleToib2ZmIix2YWx1ZTpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLl9ldmVudHMub2ZmKGEsYil9fV0pLGF9KCk7Yy5kZWZhdWx0PWp9KS5jYWxsKHRoaXMsInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHsiLi9ldmVudHMiOjF9XX0se30sWzVdKTsKLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y3Jvc3N0YWxrLm1pbi5qcy5tYXA="></script>
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
30 <link href="data:text/css;charset=utf-8,%0Aslide%3Anot%28%2Ecurrent%29%20%2Eplotly%2Ehtml%2Dwidget%7B%0Adisplay%3A%20none%3B%0A%7D%0A" rel="stylesheet" />
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
31 <script src="data:application/x-javascript;base64,LyoqCiogcGxvdGx5LmpzIHYxLjM5LjIKKiBDb3B5cmlnaHQgMjAxMi0yMDE4LCBQbG90bHksIEluYy4KKiBBbGwgcmlnaHRzIHJlc2VydmVkLgoqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZQoqLwohZnVuY3Rpb24odCl7aWYoIm9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYidW5kZWZpbmVkIiE9dHlwZW9mIG1vZHVsZSltb2R1bGUuZXhwb3J0cz10KCk7ZWxzZSBpZigiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kKWRlZmluZShbXSx0KTtlbHNleygidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOnRoaXMpLlBsb3RseT10KCl9fShmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiB0KGUscixuKXtmdW5jdGlvbiBpKG8scyl7aWYoIXJbb10pe2lmKCFlW29dKXt2YXIgbD0iZnVuY3Rpb24iPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZTtpZighcyYmbClyZXR1cm4gbChvLCEwKTtpZihhKXJldHVybiBhKG8sITApO3ZhciBjPW5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK28rIiciKTt0aHJvdyBjLmNvZGU9Ik1PRFVMRV9OT1RfRk9VTkQiLGN9dmFyIHU9cltvXT17ZXhwb3J0czp7fX07ZVtvXVswXS5jYWxsKHUuZXhwb3J0cyxmdW5jdGlvbih0KXt2YXIgcj1lW29dWzFdW3RdO3JldHVybiBpKHJ8fHQpfSx1LHUuZXhwb3J0cyx0LGUscixuKX1yZXR1cm4gcltvXS5leHBvcnRzfWZvcih2YXIgYT0iZnVuY3Rpb24iPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZSxvPTA7bzxuLmxlbmd0aDtvKyspaShuW29dKTtyZXR1cm4gaX19KCkoezE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc3JjL2xpYiIpLGk9eyJYLFggZGl2IjoiZGlyZWN0aW9uOmx0cjtmb250LWZhbWlseTonT3BlbiBTYW5zJywgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWY7bWFyZ2luOjA7cGFkZGluZzowOyIsIlggaW5wdXQsWCBidXR0b24iOiJmb250LWZhbWlseTonT3BlbiBTYW5zJywgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWY7IiwiWCBpbnB1dDpmb2N1cyxYIGJ1dHRvbjpmb2N1cyI6Im91dGxpbmU6bm9uZTsiLCJYIGEiOiJ0ZXh0LWRlY29yYXRpb246bm9uZTsiLCJYIGE6aG92ZXIiOiJ0ZXh0LWRlY29yYXRpb246bm9uZTsiLCJYIC5jcmlzcCI6InNoYXBlLXJlbmRlcmluZzpjcmlzcEVkZ2VzOyIsIlggLnVzZXItc2VsZWN0LW5vbmUiOiItd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lOy1tcy11c2VyLXNlbGVjdDpub25lOy1vLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTsiLCJYIHN2ZyI6Im92ZXJmbG93OmhpZGRlbjsiLCJYIHN2ZyBhIjoiZmlsbDojNDQ3YWRiOyIsIlggc3ZnIGE6aG92ZXIiOiJmaWxsOiMzYzZkYzU7IiwiWCAubWFpbi1zdmciOiJwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7cG9pbnRlci1ldmVudHM6bm9uZTsiLCJYIC5tYWluLXN2ZyAuZHJhZ2xheWVyIjoicG9pbnRlci1ldmVudHM6YWxsOyIsIlggLmN1cnNvci1kZWZhdWx0IjoiY3Vyc29yOmRlZmF1bHQ7IiwiWCAuY3Vyc29yLXBvaW50ZXIiOiJjdXJzb3I6cG9pbnRlcjsiLCJYIC5jdXJzb3ItY3Jvc3NoYWlyIjoiY3Vyc29yOmNyb3NzaGFpcjsiLCJYIC5jdXJzb3ItbW92ZSI6ImN1cnNvcjptb3ZlOyIsIlggLmN1cnNvci1jb2wtcmVzaXplIjoiY3Vyc29yOmNvbC1yZXNpemU7IiwiWCAuY3Vyc29yLXJvdy1yZXNpemUiOiJjdXJzb3I6cm93LXJlc2l6ZTsiLCJYIC5jdXJzb3ItbnMtcmVzaXplIjoiY3Vyc29yOm5zLXJlc2l6ZTsiLCJYIC5jdXJzb3ItZXctcmVzaXplIjoiY3Vyc29yOmV3LXJlc2l6ZTsiLCJYIC5jdXJzb3Itc3ctcmVzaXplIjoiY3Vyc29yOnN3LXJlc2l6ZTsiLCJYIC5jdXJzb3Itcy1yZXNpemUiOiJjdXJzb3I6cy1yZXNpemU7IiwiWCAuY3Vyc29yLXNlLXJlc2l6ZSI6ImN1cnNvcjpzZS1yZXNpemU7IiwiWCAuY3Vyc29yLXctcmVzaXplIjoiY3Vyc29yOnctcmVzaXplOyIsIlggLmN1cnNvci1lLXJlc2l6ZSI6ImN1cnNvcjplLXJlc2l6ZTsiLCJYIC5jdXJzb3ItbnctcmVzaXplIjoiY3Vyc29yOm53LXJlc2l6ZTsiLCJYIC5jdXJzb3Itbi1yZXNpemUiOiJjdXJzb3I6bi1yZXNpemU7IiwiWCAuY3Vyc29yLW5lLXJlc2l6ZSI6ImN1cnNvcjpuZS1yZXNpemU7IiwiWCAuY3Vyc29yLWdyYWIiOiJjdXJzb3I6LXdlYmtpdC1ncmFiO2N1cnNvcjpncmFiOyIsIlggLm1vZGViYXIiOiJwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MnB4O3JpZ2h0OjJweDt6LWluZGV4OjEwMDE7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LDAuNyk7IiwiWCAubW9kZWJhci0taG92ZXIiOiJvcGFjaXR5OjA7LXdlYmtpdC10cmFuc2l0aW9uOm9wYWNpdHkgMC4zcyBlYXNlIDBzOy1tb3otdHJhbnNpdGlvbjpvcGFjaXR5IDAuM3MgZWFzZSAwczstbXMtdHJhbnNpdGlvbjpvcGFjaXR5IDAuM3MgZWFzZSAwczstby10cmFuc2l0aW9uOm9wYWNpdHkgMC4zcyBlYXNlIDBzO3RyYW5zaXRpb246b3BhY2l0eSAwLjNzIGVhc2UgMHM7IiwiWDpob3ZlciAubW9kZWJhci0taG92ZXIiOiJvcGFjaXR5OjE7IiwiWCAubW9kZWJhci1ncm91cCI6ImZsb2F0OmxlZnQ7ZGlzcGxheTppbmxpbmUtYmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94O21hcmdpbi1sZWZ0OjhweDtwb3NpdGlvbjpyZWxhdGl2ZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2hpdGUtc3BhY2U6bm93cmFwOyIsIlggLm1vZGViYXItZ3JvdXA6Zmlyc3QtY2hpbGQiOiJtYXJnaW4tbGVmdDowcHg7IiwiWCAubW9kZWJhci1idG4iOiJwb3NpdGlvbjpyZWxhdGl2ZTtmb250LXNpemU6MTZweDtwYWRkaW5nOjNweCA0cHg7Y3Vyc29yOnBvaW50ZXI7bGluZS1oZWlnaHQ6bm9ybWFsO2JveC1zaXppbmc6Ym9yZGVyLWJveDsiLCJYIC5tb2RlYmFyLWJ0biBzdmciOiJwb3NpdGlvbjpyZWxhdGl2ZTt0b3A6MnB4OyIsIlggLm1vZGViYXItYnRuIHBhdGgiOiJmaWxsOnJnYmEoMCwzMSw5NSwwLjMpOyIsIlggLm1vZGViYXItYnRuLmFjdGl2ZSBwYXRoLFggLm1vZGViYXItYnRuOmhvdmVyIHBhdGgiOiJmaWxsOnJnYmEoMCwyMiw3MiwwLjUpOyIsIlggLm1vZGViYXItYnRuLm1vZGViYXItYnRuLS1sb2dvIjoicGFkZGluZzozcHggMXB4OyIsIlggLm1vZGViYXItYnRuLm1vZGViYXItYnRuLS1sb2dvIHBhdGgiOiJmaWxsOiM0NDdhZGIgIWltcG9ydGFudDsiLCJYIFtkYXRhLXRpdGxlXTpiZWZvcmUsWCBbZGF0YS10aXRsZV06YWZ0ZXIiOiJwb3NpdGlvbjphYnNvbHV0ZTstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLCAwLCAwKTstbW96LXRyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLCAwLCAwKTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsIDAsIDApOy1vLXRyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLCAwLCAwKTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwgMCwgMCk7ZGlzcGxheTpub25lO29wYWNpdHk6MDt6LWluZGV4OjEwMDE7cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MTEwJTtyaWdodDo1MCU7IiwiWCBbZGF0YS10aXRsZV06aG92ZXI6YmVmb3JlLFggW2RhdGEtdGl0bGVdOmhvdmVyOmFmdGVyIjoiZGlzcGxheTpibG9jaztvcGFjaXR5OjE7IiwiWCBbZGF0YS10aXRsZV06YmVmb3JlIjoiY29udGVudDonJztwb3NpdGlvbjphYnNvbHV0ZTtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlcjo2cHggc29saWQgdHJhbnNwYXJlbnQ7ei1pbmRleDoxMDAyO21hcmdpbi10b3A6LTEycHg7Ym9yZGVyLWJvdHRvbS1jb2xvcjojNjk3MzhhO21hcmdpbi1yaWdodDotNnB4OyIsIlggW2RhdGEtdGl0bGVdOmFmdGVyIjoiY29udGVudDphdHRyKGRhdGEtdGl0bGUpO2JhY2tncm91bmQ6IzY5NzM4YTtjb2xvcjp3aGl0ZTtwYWRkaW5nOjhweCAxMHB4O2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjEycHg7d2hpdGUtc3BhY2U6bm93cmFwO21hcmdpbi1yaWdodDotMThweDtib3JkZXItcmFkaXVzOjJweDsiLCJYIC5zZWxlY3Qtb3V0bGluZSI6ImZpbGw6bm9uZTtzdHJva2Utd2lkdGg6MTtzaGFwZS1yZW5kZXJpbmc6Y3Jpc3BFZGdlczsiLCJYIC5zZWxlY3Qtb3V0bGluZS0xIjoic3Ryb2tlOndoaXRlOyIsIlggLnNlbGVjdC1vdXRsaW5lLTIiOiJzdHJva2U6YmxhY2s7c3Ryb2tlLWRhc2hhcnJheToycHggMnB4OyIsWToiZm9udC1mYW1pbHk6J09wZW4gU2Fucyc7cG9zaXRpb246Zml4ZWQ7dG9wOjUwcHg7cmlnaHQ6MjBweDt6LWluZGV4OjEwMDAwO2ZvbnQtc2l6ZToxMHB0O21heC13aWR0aDoxODBweDsiLCJZIHAiOiJtYXJnaW46MDsiLCJZIC5ub3RpZmllci1ub3RlIjoibWluLXdpZHRoOjE4MHB4O21heC13aWR0aDoyNTBweDtib3JkZXI6MXB4IHNvbGlkICNmZmY7ei1pbmRleDozMDAwO21hcmdpbjowO2JhY2tncm91bmQtY29sb3I6IzhjOTdhZjtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMTQwLDE1MSwxNzUsMC45KTtjb2xvcjojZmZmO3BhZGRpbmc6MTBweDtvdmVyZmxvdy13cmFwOmJyZWFrLXdvcmQ7d29yZC13cmFwOmJyZWFrLXdvcmQ7LW1zLWh5cGhlbnM6YXV0bzstd2Via2l0LWh5cGhlbnM6YXV0bztoeXBoZW5zOmF1dG87IiwiWSAubm90aWZpZXItY2xvc2UiOiJjb2xvcjojZmZmO29wYWNpdHk6MC44O2Zsb2F0OnJpZ2h0O3BhZGRpbmc6MCA1cHg7YmFja2dyb3VuZDpub25lO2JvcmRlcjpub25lO2ZvbnQtc2l6ZToyMHB4O2ZvbnQtd2VpZ2h0OmJvbGQ7bGluZS1oZWlnaHQ6MjBweDsiLCJZIC5ub3RpZmllci1jbG9zZTpob3ZlciI6ImNvbG9yOiM0NDQ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y3Vyc29yOnBvaW50ZXI7In07Zm9yKHZhciBhIGluIGkpe3ZhciBvPWEucmVwbGFjZSgvXiwvLCIgLCIpLnJlcGxhY2UoL1gvZywiLmpzLXBsb3RseS1wbG90IC5wbG90bHkiKS5yZXBsYWNlKC9ZL2csIi5wbG90bHktbm90aWZpZXIiKTtuLmFkZFN0eWxlUnVsZShvLGlbYV0pfX0seyIuLi9zcmMvbGliIjo2ODR9XSwyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17dW5kbzp7d2lkdGg6ODU3LjEsaGVpZ2h0OjFlMyxwYXRoOiJtODU3IDM1MHEwLTg3LTM0LTE2NnQtOTEtMTM3LTEzNy05Mi0xNjYtMzRxLTk2IDAtMTgzIDQxdC0xNDcgMTE0cS00IDYtNCAxM3Q1IDExbDc2IDc3cTYgNSAxNCA1IDktMSAxMy03IDQxLTUzIDEwMC04MnQxMjYtMjlxNTggMCAxMTAgMjN0OTIgNjEgNjEgOTEgMjIgMTExLTIyIDExMS02MSA5MS05MiA2MS0xMTAgMjNxLTU1IDAtMTA1LTIwdC05MC01N2w3Ny03N3ExNy0xNiA4LTM4LTEwLTIzLTMzLTIzaC0yNTBxLTE1IDAtMjUgMTF0LTExIDI1djI1MHEwIDI0IDIyIDMzIDIyIDEwIDM5LThsNzItNzJxNjAgNTcgMTM3IDg4dDE1OSAzMXE4NyAwIDE2Ni0zNHQxMzctOTIgOTEtMTM3IDM0LTE2NnoiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIC0xIDAgODUwKSJ9LGhvbWU6e3dpZHRoOjkyOC42LGhlaWdodDoxZTMscGF0aDoibTc4NiAyOTZ2LTI2N3EwLTE1LTExLTI2dC0yNS0xMGgtMjE0djIxNGgtMTQzdi0yMTRoLTIxNHEtMTUgMC0yNSAxMHQtMTEgMjZ2MjY3cTAgMSAwIDJ0MCAybDMyMSAyNjQgMzIxLTI2NHExLTEgMS00eiBtMTI0IDM5bC0zNC00MXEtNS01LTEyLTZoLTJxLTcgMC0xMiAzbC0zODYgMzIyLTM4Ni0zMjJxLTctNC0xMy00LTcgMi0xMiA3bC0zNSA0MXEtNCA1LTMgMTN0NiAxMmw0MDEgMzM0cTE4IDE1IDQyIDE1dDQzLTE1bDEzNi0xMTR2MTA5cTAgOCA1IDEzdDEzIDVoMTA3cTggMCAxMy01dDUtMTN2LTIyN2wxMjItMTAycTUtNSA2LTEydC00LTEzeiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0sImNhbWVyYS1yZXRybyI6e3dpZHRoOjFlMyxoZWlnaHQ6MWUzLHBhdGg6Im01MTggMzg2cTAgOC01IDEzdC0xMyA1cS0zNyAwLTYzLTI3dC0yNi02M3EwLTggNS0xM3QxMy01IDEyIDUgNSAxM3EwIDIzIDE2IDM4dDM4IDE2cTggMCAxMyA1dDUgMTN6IG0xMjUtNzNxMC01OS00Mi0xMDF0LTEwMS00Mi0xMDEgNDItNDIgMTAxIDQyIDEwMSAxMDEgNDIgMTAxLTQyIDQyLTEwMXogbS01NzItMzIwaDg1OHY3MWgtODU4di03MXogbTY0MyAzMjBxMCA4OS02MiAxNTJ0LTE1MiA2Mi0xNTEtNjItNjMtMTUyIDYzLTE1MSAxNTEtNjMgMTUyIDYzIDYyIDE1MXogbS01NzEgMzU4aDIxNHY3MmgtMjE0di03MnogbS03Mi0xMDdoODU4djE0M2gtNDYybC0zNi03MWgtMzYwdi03MnogbTkyOSAxNDN2LTcxNHEwLTMwLTIxLTUxdC01MC0yMWgtODU4cS0yOSAwLTUwIDIxdC0yMSA1MXY3MTRxMCAzMCAyMSA1MXQ1MCAyMWg4NThxMjkgMCA1MC0yMXQyMS01MXoiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIC0xIDAgODUwKSJ9LHpvb21ib3g6e3dpZHRoOjFlMyxoZWlnaHQ6MWUzLHBhdGg6Im0xMDAwLTI1bC0yNTAgMjUxYzQwIDYzIDYzIDEzOCA2MyAyMTggMCAyMjQtMTgyIDQwNi00MDcgNDA2LTIyNCAwLTQwNi0xODItNDA2LTQwNnMxODMtNDA2IDQwNy00MDZjODAgMCAxNTUgMjIgMjE4IDYybDI1MC0yNTAgMTI1IDEyNXogbS04MTIgMjUwbDAgNDM4IDQzNyAwIDAtNDM4LTQzNyAweiBtNjIgMzc1bDMxMyAwIDAtMzEyLTMxMyAwIDAgMzEyeiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0scGFuOnt3aWR0aDoxZTMsaGVpZ2h0OjFlMyxwYXRoOiJtMTAwMCAzNTBsLTE4NyAxODggMC0xMjUtMjUwIDAgMCAyNTAgMTI1IDAtMTg4IDE4Ny0xODctMTg3IDEyNSAwIDAtMjUwLTI1MCAwIDAgMTI1LTE4OC0xODggMTg2LTE4NyAwIDEyNSAyNTIgMCAwLTI1MC0xMjUgMCAxODctMTg4IDE4OCAxODgtMTI1IDAgMCAyNTAgMjUwIDAgMC0xMjYgMTg3IDE4OHoiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIC0xIDAgODUwKSJ9LHpvb21fcGx1czp7d2lkdGg6MWUzLGhlaWdodDoxZTMscGF0aDoibTEgNzg3bDAtODc1IDg3NSAwIDAgODc1LTg3NSAweiBtNjg3LTUwMGwtMTg3IDAgMC0xODctMTI1IDAgMCAxODctMTg4IDAgMCAxMjUgMTg4IDAgMCAxODcgMTI1IDAgMC0xODcgMTg3IDAgMC0xMjV6Iix0cmFuc2Zvcm06Im1hdHJpeCgxIDAgMCAtMSAwIDg1MCkifSx6b29tX21pbnVzOnt3aWR0aDoxZTMsaGVpZ2h0OjFlMyxwYXRoOiJtMCA3ODhsMC04NzYgODc1IDAgMCA4NzYtODc1IDB6IG02ODgtNTAwbC01MDAgMCAwIDEyNSA1MDAgMCAwLTEyNXoiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIC0xIDAgODUwKSJ9LGF1dG9zY2FsZTp7d2lkdGg6MWUzLGhlaWdodDoxZTMscGF0aDoibTI1MCA4NTBsLTE4NyAwLTYzIDAgMC02MiAwLTE4OCA2MyAwIDAgMTg4IDE4NyAwIDAgNjJ6IG02ODggMGwtMTg4IDAgMC02MiAxODggMCAwLTE4OCA2MiAwIDAgMTg4IDAgNjItNjIgMHogbS04NzUtOTM4bDAgMTg4LTYzIDAgMC0xODggMC02MiA2MyAwIDE4NyAwIDAgNjItMTg3IDB6IG04NzUgMTg4bDAtMTg4LTE4OCAwIDAtNjIgMTg4IDAgNjIgMCAwIDYyIDAgMTg4LTYyIDB6IG0tMTI1IDE4OGwtMSAwLTkzLTk0LTE1NiAxNTYgMTU2IDE1NiA5Mi05MyAyIDAgMCAyNTAtMjUwIDAgMC0yIDkzLTkyLTE1Ni0xNTYtMTU2IDE1NiA5NCA5MiAwIDItMjUwIDAgMC0yNTAgMCAwIDkzIDkzIDE1Ny0xNTYtMTU3LTE1Ni05MyA5NCAwIDAgMC0yNTAgMjUwIDAgMCAwLTk0IDkzIDE1NiAxNTcgMTU2LTE1Ny05My05MyAwIDAgMjUwIDAgMCAyNTB6Iix0cmFuc2Zvcm06Im1hdHJpeCgxIDAgMCAtMSAwIDg1MCkifSx0b29sdGlwX2Jhc2ljOnt3aWR0aDoxNTAwLGhlaWdodDoxZTMscGF0aDoibTM3NSA3MjVsMCAwLTM3NS0zNzUgMzc1LTM3NCAwLTEgMTEyNSAwIDAgNzUwLTExMjUgMHoiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIC0xIDAgODUwKSJ9LHRvb2x0aXBfY29tcGFyZTp7d2lkdGg6MTEyNSxoZWlnaHQ6MWUzLHBhdGg6Im0xODcgNzg2bDAgMi0xODctMTg4IDE4OC0xODcgMCAwIDkzNyAwIDAgMzczLTkzOCAweiBtMC00OTlsMCAxLTE4Ny0xODggMTg4LTE4OCAwIDAgOTM3IDAgMCAzNzYtOTM4LTF6Iix0cmFuc2Zvcm06Im1hdHJpeCgxIDAgMCAtMSAwIDg1MCkifSxwbG90bHlsb2dvOnt3aWR0aDoxNTQyLGhlaWdodDoxZTMscGF0aDoibTAtMTBoMTgydi0xNDBoLTE4MnYxNDB6IG0yMjggMTQ2aDE4M3YtMjg2aC0xODN2Mjg2eiBtMjI1IDcxNGgxODJ2LTEwMDBoLTE4MnYxMDAweiBtMjI1LTI4NWgxODJ2LTcxNWgtMTgydjcxNXogbTIyNSAxNDJoMTgzdi04NTdoLTE4M3Y4NTd6IG0yMzEtNDI4aDE4MnYtNDI5aC0xODJ2NDI5eiBtMjI1LTI5MWgxODN2LTEzOGgtMTgzdjEzOHoiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIC0xIDAgODUwKSJ9LCJ6LWF4aXMiOnt3aWR0aDoxZTMsaGVpZ2h0OjFlMyxwYXRoOiJtODMzIDVsLTE3IDEwOHY0MWwtMTMwLTY1IDEzMC02NmMwIDAgMCAzOCAwIDM5IDAtMSAzNi0xNCAzOS0yNSA0LTE1LTYtMjItMTYtMzAtMTUtMTItMzktMTYtNTYtMjAtOTAtMjItMTg3LTIzLTI3OS0yMy0yNjEgMC0zNDEgMzQtMzUzIDU5IDMgNjAgMjI4IDExMCAyMjggMTEwLTE0MC04LTM1MS0zNS0zNTEtMTE2IDAtMTIwIDI5My0xNDIgNDc0LTE0MiAxNTUgMCA0NzcgMjIgNDc3IDE0MiAwIDUwLTc0IDc5LTE2MyA5NnogbS0zNzQgOTRjLTU4LTUtOTktMjEtOTktNDAgMC0yNCA2NS00MyAxNDQtNDMgNzkgMCAxNDMgMTkgMTQzIDQzIDAgMTktNDIgMzQtOTggNDB2MjE2aDg3bC0xMzIgMTM1LTEzMy0xMzVoODh2LTIxNnogbTE2NyA1MTVoLTEzNnYxYzE2IDE2IDMxIDM0IDQ2IDUybDg0IDEwOXY1NGgtMjMwdi03MWgxMjR2LTFjLTE2LTE3LTI4LTMyLTQ0LTUxbC04OS0xMTR2LTUxaDI0NXY3MnoiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIC0xIDAgODUwKSJ9LCIzZF9yb3RhdGUiOnt3aWR0aDoxZTMsaGVpZ2h0OjFlMyxwYXRoOiJtOTIyIDY2MGMtNSA0LTkgNy0xNCAxMS0zNTkgMjYzLTU4MC0zMS01ODAtMzFsLTEwMiAyOCA1OC00MDBjMCAxIDEgMSAyIDIgMTE4IDEwOCAzNTEgMjQ5IDM1MSAyNDlzLTYyIDI3LTEwMCA0MmM4OCA4MyAyMjIgMTgzIDM0NyAxMjIgMTYtOCAzMC0xNyA0NC0yNy0yIDEtNCAyLTYgNHogbTM2LTMyOWMwIDAgNjQgMjI5LTg4IDI5Ni02MiAyNy0xMjQgMTQtMTc1LTExIDE1Ny03OCAyMjUtMjA4IDI0OS0yNjYgOC0xOSAxMS0zMSAxMS0zMSAyIDUgNiAxNSAxMSAzMi01LTEzLTgtMjAtOC0yMHogbS03NzUtMjM5YzcwLTMxIDExNy01MCAxOTgtMzItMTIxIDgwLTE5OSAzNDYtMTk5IDM0NmwtOTYtMTUtNTgtMTJjMCAwIDU1LTIyNiAxNTUtMjg3eiBtNjAzIDEzM2wtMzE3LTEzOWMwIDAgNC00IDE5LTE0IDctNSAyNC0xNSAyNC0xNXMtMTc3LTE0Ny0zODkgNGMyMzUtMjg3IDUzNi0xMTIgNTM2LTExMmwzMS0yMiAxMDAgMjk5LTQtMXogbS0yOTgtMTUzYzYtNCAxNC05IDI0LTE1IDAgMC0xNyAxMC0yNCAxNXoiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIC0xIDAgODUwKSJ9LGNhbWVyYTp7d2lkdGg6MWUzLGhlaWdodDoxZTMscGF0aDoibTUwMCA0NTBjLTgzIDAtMTUwLTY3LTE1MC0xNTAgMC04MyA2Ny0xNTAgMTUwLTE1MCA4MyAwIDE1MCA2NyAxNTAgMTUwIDAgODMtNjcgMTUwLTE1MCAxNTB6IG00MDAgMTUwaC0xMjBjLTE2IDAtMzQgMTMtMzkgMjlsLTMxIDkzYy02IDE1LTIzIDI4LTQwIDI4aC0zNDBjLTE2IDAtMzQtMTMtMzktMjhsLTMxLTk0Yy02LTE1LTIzLTI4LTQwLTI4aC0xMjBjLTU1IDAtMTAwLTQ1LTEwMC0xMDB2LTQ1MGMwLTU1IDQ1LTEwMCAxMDAtMTAwaDgwMGM1NSAwIDEwMCA0NSAxMDAgMTAwdjQ1MGMwIDU1LTQ1IDEwMC0xMDAgMTAweiBtLTQwMC01NTBjLTEzOCAwLTI1MCAxMTItMjUwIDI1MCAwIDEzOCAxMTIgMjUwIDI1MCAyNTAgMTM4IDAgMjUwLTExMiAyNTAtMjUwIDAtMTM4LTExMi0yNTAtMjUwLTI1MHogbTM2NSAzODBjLTE5IDAtMzUgMTYtMzUgMzUgMCAxOSAxNiAzNSAzNSAzNSAxOSAwIDM1LTE2IDM1LTM1IDAtMTktMTYtMzUtMzUtMzV6Iix0cmFuc2Zvcm06Im1hdHJpeCgxIDAgMCAtMSAwIDg1MCkifSxtb3ZpZTp7d2lkdGg6MWUzLGhlaWdodDoxZTMscGF0aDoibTkzOCA0MTNsLTE4OC0xMjVjMCAzNy0xNyA3MS00NCA5NCA2NCAzOCAxMDcgMTA3IDEwNyAxODcgMCAxMjEtOTggMjE5LTIxOSAyMTktMTIxIDAtMjE5LTk4LTIxOS0yMTkgMC02MSAyNS0xMTcgNjYtMTU2aC0xMTVjMzAgMzMgNDkgNzYgNDkgMTI1IDAgMTAzLTg0IDE4Ny0xODcgMTg3cy0xODgtODQtMTg4LTE4N2MwLTU3IDI2LTEwNyA2NS0xNDEtMzgtMjItNjUtNjItNjUtMTA5di0yNTBjMC03MCA1Ni0xMjYgMTI1LTEyNmg1MDBjNjkgMCAxMjUgNTYgMTI1IDEyNmwxODgtMTI2YzM0IDAgNjIgMjggNjIgNjN2Mzc1YzAgMzUtMjggNjMtNjIgNjN6IG0tNzUwIDBjLTY5IDAtMTI1IDU2LTEyNSAxMjVzNTYgMTI1IDEyNSAxMjUgMTI1LTU2IDEyNS0xMjUtNTYtMTI1LTEyNS0xMjV6IG00MDYtMWMtODcgMC0xNTcgNzAtMTU3IDE1NyAwIDg2IDcwIDE1NiAxNTcgMTU2czE1Ni03MCAxNTYtMTU2LTcwLTE1Ny0xNTYtMTU3eiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0scXVlc3Rpb246e3dpZHRoOjg1Ny4xLGhlaWdodDoxZTMscGF0aDoibTUwMCA4MnYxMDdxMCA4LTUgMTN0LTEzIDVoLTEwN3EtOCAwLTEzLTV0LTUtMTN2LTEwN3EwLTggNS0xM3QxMy01aDEwN3E4IDAgMTMgNXQ1IDEzeiBtMTQzIDM3NXEwIDQ5LTMxIDkxdC03NyA2NS05NSAyM3EtMTM2IDAtMjA3LTExOS05LTE0IDQtMjRsNzQtNTVxNC00IDEwLTQgOSAwIDE0IDcgMzAgMzggNDggNTEgMTkgMTQgNDggMTQgMjcgMCA0OC0xNXQyMS0zM3EwLTIxLTExLTM0dC0zOC0yNXEtMzUtMTYtNjUtNDh0LTI5LTcwdi0yMHEwLTggNS0xM3QxMy01aDEwN3E4IDAgMTMgNXQ1IDEzcTAgMTAgMTIgMjd0MzAgMjhxMTggMTAgMjggMTZ0MjUgMTkgMjUgMjcgMTYgMzQgNyA0NXogbTIxNC0xMDdxMC0xMTctNTctMjE1dC0xNTYtMTU2LTIxNS01OC0yMTYgNTgtMTU1IDE1Ni01OCAyMTUgNTggMjE1IDE1NSAxNTYgMjE2IDU4IDIxNS01OCAxNTYtMTU2IDU3LTIxNXoiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIC0xIDAgODUwKSJ9LGRpc2s6e3dpZHRoOjg1Ny4xLGhlaWdodDoxZTMscGF0aDoibTIxNC03aDQyOXYyMTRoLTQyOXYtMjE0eiBtNTAwIDBoNzJ2NTAwcTAgOC02IDIxdC0xMSAyMGwtMTU3IDE1NnEtNSA2LTE5IDEydC0yMiA1di0yMzJxMC0yMi0xNS0zOHQtMzgtMTZoLTMyMnEtMjIgMC0zNyAxNnQtMTYgMzh2MjMyaC03MnYtNzE0aDcydjIzMnEwIDIyIDE2IDM4dDM3IDE2aDQ2NXEyMiAwIDM4LTE2dDE1LTM4di0yMzJ6IG0tMjE0IDUxOHYxNzhxMCA4LTUgMTN0LTEzIDVoLTEwN3EtNyAwLTEzLTV0LTUtMTN2LTE3OHEwLTggNS0xM3QxMy01aDEwN3E3IDAgMTMgNXQ1IDEzeiBtMzU3LTE4di01MThxMC0yMi0xNS0zOHQtMzgtMTZoLTc1MHEtMjMgMC0zOCAxNnQtMTYgMzh2NzUwcTAgMjIgMTYgMzh0MzggMTZoNTE3cTIzIDAgNTAtMTJ0NDItMjZsMTU2LTE1N3ExNi0xNSAyNy00MnQxMS00OXoiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIC0xIDAgODUwKSJ9LGxhc3NvOnt3aWR0aDoxMDMxLGhlaWdodDoxZTMscGF0aDoibTEwMTggNTM4Yy0zNiAyMDctMjkwIDMzNi01NjggMjg2LTI3Ny00OC00NzMtMjU2LTQzNi00NjMgMTAtNTcgMzYtMTA4IDc2LTE1MS0xMy02NiAxMS0xMzcgNjgtMTgzIDM0LTI4IDc1LTQxIDExNC00MmwtNTUtNzAgMCAwYy0yLTEtMy0yLTQtMy0xMC0xNC04LTM0IDUtNDUgMTQtMTEgMzQtOCA0NSA0IDEgMSAyIDMgMiA1bDAgMCAxMTMgMTQwYzE2IDExIDMxIDI0IDQ1IDQwIDQgMyA2IDcgOCAxMSA0OC0zIDEwMCAwIDE1MSA5IDI3OCA0OCA0NzMgMjU1IDQzNiA0NjJ6IG0tNjI0LTM3OWMtODAgMTQtMTQ5IDQ4LTE5NyA5NiA0MiA0MiAxMDkgNDcgMTU2IDkgMzMtMjYgNDctNjYgNDEtMTA1eiBtLTE4Ny03NGMtMTkgMTYtMzMgMzctMzkgNjAgNTAtMzIgMTA5LTU1IDE3NC02OC00Mi0yNS05NS0yNC0xMzUgOHogbTM2MCA3NWMtMzQtNy02OS05LTEwMi04IDggNjItMTYgMTI4LTY4IDE3MC03MyA1OS0xNzUgNTQtMjQ0LTUtOSAyMC0xNiA0MC0yMCA2MS0yOCAxNTkgMTIxIDMxNyAzMzMgMzU0czQwNy02MCA0MzQtMjE3YzI4LTE1OS0xMjEtMzE4LTMzMy0zNTV6Iix0cmFuc2Zvcm06Im1hdHJpeCgxIDAgMCAtMSAwIDg1MCkifSxzZWxlY3Rib3g6e3dpZHRoOjFlMyxoZWlnaHQ6MWUzLHBhdGg6Im0wIDg1MGwwLTE0MyAxNDMgMCAwIDE0My0xNDMgMHogbTI4NiAwbDAtMTQzIDE0MyAwIDAgMTQzLTE0MyAweiBtMjg1IDBsMC0xNDMgMTQzIDAgMCAxNDMtMTQzIDB6IG0yODYgMGwwLTE0MyAxNDMgMCAwIDE0My0xNDMgMHogbS04NTctMjg2bDAtMTQzIDE0MyAwIDAgMTQzLTE0MyAweiBtODU3IDBsMC0xNDMgMTQzIDAgMCAxNDMtMTQzIDB6IG0tODU3LTI4NWwwLTE0MyAxNDMgMCAwIDE0My0xNDMgMHogbTg1NyAwbDAtMTQzIDE0MyAwIDAgMTQzLTE0MyAweiBtLTg1Ny0yODZsMC0xNDMgMTQzIDAgMCAxNDMtMTQzIDB6IG0yODYgMGwwLTE0MyAxNDMgMCAwIDE0My0xNDMgMHogbTI4NSAwbDAtMTQzIDE0MyAwIDAgMTQzLTE0MyAweiBtMjg2IDBsMC0xNDMgMTQzIDAgMCAxNDMtMTQzIDB6Iix0cmFuc2Zvcm06Im1hdHJpeCgxIDAgMCAtMSAwIDg1MCkifSxzcGlrZWxpbmU6e3dpZHRoOjFlMyxoZWlnaHQ6MWUzLHBhdGg6Ik01MTIgNDA5YzAtNTctNDYtMTA0LTEwMy0xMDQtNTcgMC0xMDQgNDctMTA0IDEwNCAwIDU3IDQ3IDEwMyAxMDQgMTAzIDU3IDAgMTAzLTQ2IDEwMy0xMDN6IG0tMzI3LTM5bDkyIDAgMCA5Mi05MiAweiBtLTE4NSAwbDkyIDAgMCA5Mi05MiAweiBtMzcwLTE4Nmw5MiAwIDAgOTMtOTIgMHogbTAtMTg0bDkyIDAgMCA5Mi05MiAweiIsdHJhbnNmb3JtOiJtYXRyaXgoMS41IDAgMCAtMS41IDAgODUwKSJ9fX0se31dLDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFuc2Zvcm1zL2FnZ3JlZ2F0ZSIpfSx7Ii4uL3NyYy90cmFuc2Zvcm1zL2FnZ3JlZ2F0ZSI6MTEyNX1dLDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvYmFyIil9LHsiLi4vc3JjL3RyYWNlcy9iYXIiOjgzMX1dLDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvYm94Iil9LHsiLi4vc3JjL3RyYWNlcy9ib3giOjg0NH1dLDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy9jb21wb25lbnRzL2NhbGVuZGFycyIpfSx7Ii4uL3NyYy9jb21wb25lbnRzL2NhbGVuZGFycyI6NTU2fV0sNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9jYW5kbGVzdGljayIpfSx7Ii4uL3NyYy90cmFjZXMvY2FuZGxlc3RpY2siOjg1NH1dLDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvY2FycGV0Iil9LHsiLi4vc3JjL3RyYWNlcy9jYXJwZXQiOjg3M31dLDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvY2hvcm9wbGV0aCIpfSx7Ii4uL3NyYy90cmFjZXMvY2hvcm9wbGV0aCI6ODg3fV0sMTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvY29uZSIpfSx7Ii4uL3NyYy90cmFjZXMvY29uZSI6ODk1fV0sMTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvY29udG91ciIpfSx7Ii4uL3NyYy90cmFjZXMvY29udG91ciI6OTEwfV0sMTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvY29udG91cmNhcnBldCIpfSx7Ii4uL3NyYy90cmFjZXMvY29udG91cmNhcnBldCI6OTIxfV0sMTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy9jb3JlIil9LHsiLi4vc3JjL2NvcmUiOjY2NH1dLDE0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhbnNmb3Jtcy9maWx0ZXIiKX0seyIuLi9zcmMvdHJhbnNmb3Jtcy9maWx0ZXIiOjExMjZ9XSwxNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYW5zZm9ybXMvZ3JvdXBieSIpfSx7Ii4uL3NyYy90cmFuc2Zvcm1zL2dyb3VwYnkiOjExMjd9XSwxNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9oZWF0bWFwIil9LHsiLi4vc3JjL3RyYWNlcy9oZWF0bWFwIjo5MzN9XSwxNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9oZWF0bWFwZ2wiKX0seyIuLi9zcmMvdHJhY2VzL2hlYXRtYXBnbCI6OTQzfV0sMTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvaGlzdG9ncmFtIil9LHsiLi4vc3JjL3RyYWNlcy9oaXN0b2dyYW0iOjk1NH1dLDE5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2hpc3RvZ3JhbTJkIil9LHsiLi4vc3JjL3RyYWNlcy9oaXN0b2dyYW0yZCI6OTYwfV0sMjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvaGlzdG9ncmFtMmRjb250b3VyIil9LHsiLi4vc3JjL3RyYWNlcy9oaXN0b2dyYW0yZGNvbnRvdXIiOjk2NH1dLDIxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vY29yZSIpO24ucmVnaXN0ZXIoW3QoIi4vYmFyIiksdCgiLi9ib3giKSx0KCIuL2hlYXRtYXAiKSx0KCIuL2hpc3RvZ3JhbSIpLHQoIi4vaGlzdG9ncmFtMmQiKSx0KCIuL2hpc3RvZ3JhbTJkY29udG91ciIpLHQoIi4vcGllIiksdCgiLi9jb250b3VyIiksdCgiLi9zY2F0dGVydGVybmFyeSIpLHQoIi4vdmlvbGluIiksdCgiLi9zY2F0dGVyM2QiKSx0KCIuL3N1cmZhY2UiKSx0KCIuL21lc2gzZCIpLHQoIi4vY29uZSIpLHQoIi4vc3RyZWFtdHViZSIpLHQoIi4vc2NhdHRlcmdlbyIpLHQoIi4vY2hvcm9wbGV0aCIpLHQoIi4vc2NhdHRlcmdsIiksdCgiLi9zcGxvbSIpLHQoIi4vcG9pbnRjbG91ZCIpLHQoIi4vaGVhdG1hcGdsIiksdCgiLi9wYXJjb29yZHMiKSx0KCIuL3NjYXR0ZXJtYXBib3giKSx0KCIuL3NhbmtleSIpLHQoIi4vdGFibGUiKSx0KCIuL2NhcnBldCIpLHQoIi4vc2NhdHRlcmNhcnBldCIpLHQoIi4vY29udG91cmNhcnBldCIpLHQoIi4vb2hsYyIpLHQoIi4vY2FuZGxlc3RpY2siKSx0KCIuL3NjYXR0ZXJwb2xhciIpLHQoIi4vc2NhdHRlcnBvbGFyZ2wiKV0pLG4ucmVnaXN0ZXIoW3QoIi4vYWdncmVnYXRlIiksdCgiLi9maWx0ZXIiKSx0KCIuL2dyb3VwYnkiKSx0KCIuL3NvcnQiKV0pLG4ucmVnaXN0ZXIoW3QoIi4vY2FsZW5kYXJzIildKSxlLmV4cG9ydHM9bn0seyIuL2FnZ3JlZ2F0ZSI6MywiLi9iYXIiOjQsIi4vYm94Ijo1LCIuL2NhbGVuZGFycyI6NiwiLi9jYW5kbGVzdGljayI6NywiLi9jYXJwZXQiOjgsIi4vY2hvcm9wbGV0aCI6OSwiLi9jb25lIjoxMCwiLi9jb250b3VyIjoxMSwiLi9jb250b3VyY2FycGV0IjoxMiwiLi9jb3JlIjoxMywiLi9maWx0ZXIiOjE0LCIuL2dyb3VwYnkiOjE1LCIuL2hlYXRtYXAiOjE2LCIuL2hlYXRtYXBnbCI6MTcsIi4vaGlzdG9ncmFtIjoxOCwiLi9oaXN0b2dyYW0yZCI6MTksIi4vaGlzdG9ncmFtMmRjb250b3VyIjoyMCwiLi9tZXNoM2QiOjIyLCIuL29obGMiOjIzLCIuL3BhcmNvb3JkcyI6MjQsIi4vcGllIjoyNSwiLi9wb2ludGNsb3VkIjoyNiwiLi9zYW5rZXkiOjI3LCIuL3NjYXR0ZXIzZCI6MjgsIi4vc2NhdHRlcmNhcnBldCI6MjksIi4vc2NhdHRlcmdlbyI6MzAsIi4vc2NhdHRlcmdsIjozMSwiLi9zY2F0dGVybWFwYm94IjozMiwiLi9zY2F0dGVycG9sYXIiOjMzLCIuL3NjYXR0ZXJwb2xhcmdsIjozNCwiLi9zY2F0dGVydGVybmFyeSI6MzUsIi4vc29ydCI6MzYsIi4vc3Bsb20iOjM3LCIuL3N0cmVhbXR1YmUiOjM4LCIuL3N1cmZhY2UiOjM5LCIuL3RhYmxlIjo0MCwiLi92aW9saW4iOjQxfV0sMjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvbWVzaDNkIil9LHsiLi4vc3JjL3RyYWNlcy9tZXNoM2QiOjk2OX1dLDIzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL29obGMiKX0seyIuLi9zcmMvdHJhY2VzL29obGMiOjk3NH1dLDI0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3BhcmNvb3JkcyIpfSx7Ii4uL3NyYy90cmFjZXMvcGFyY29vcmRzIjo5ODV9XSwyNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9waWUiKX0seyIuLi9zcmMvdHJhY2VzL3BpZSI6OTk2fV0sMjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvcG9pbnRjbG91ZCIpfSx7Ii4uL3NyYy90cmFjZXMvcG9pbnRjbG91ZCI6MTAwNX1dLDI3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3NhbmtleSIpfSx7Ii4uL3NyYy90cmFjZXMvc2Fua2V5IjoxMDExfV0sMjg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvc2NhdHRlcjNkIil9LHsiLi4vc3JjL3RyYWNlcy9zY2F0dGVyM2QiOjEwNDV9XSwyOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9zY2F0dGVyY2FycGV0Iil9LHsiLi4vc3JjL3RyYWNlcy9zY2F0dGVyY2FycGV0IjoxMDUxfV0sMzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvc2NhdHRlcmdlbyIpfSx7Ii4uL3NyYy90cmFjZXMvc2NhdHRlcmdlbyI6MTA1OH1dLDMxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJnbCIpfSx7Ii4uL3NyYy90cmFjZXMvc2NhdHRlcmdsIjoxMDY2fV0sMzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvc2NhdHRlcm1hcGJveCIpfSx7Ii4uL3NyYy90cmFjZXMvc2NhdHRlcm1hcGJveCI6MTA3Mn1dLDMzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJwb2xhciIpfSx7Ii4uL3NyYy90cmFjZXMvc2NhdHRlcnBvbGFyIjoxMDc5fV0sMzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvc2NhdHRlcnBvbGFyZ2wiKX0seyIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJwb2xhcmdsIjoxMDgzfV0sMzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvc2NhdHRlcnRlcm5hcnkiKX0seyIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJ0ZXJuYXJ5IjoxMDg5fV0sMzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFuc2Zvcm1zL3NvcnQiKX0seyIuLi9zcmMvdHJhbnNmb3Jtcy9zb3J0IjoxMTI5fV0sMzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvc3Bsb20iKX0seyIuLi9zcmMvdHJhY2VzL3NwbG9tIjoxMDk0fV0sMzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvc3RyZWFtdHViZSIpfSx7Ii4uL3NyYy90cmFjZXMvc3RyZWFtdHViZSI6MTA5OX1dLDM5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3N1cmZhY2UiKX0seyIuLi9zcmMvdHJhY2VzL3N1cmZhY2UiOjExMDR9XSw0MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy90YWJsZSIpfSx7Ii4uL3NyYy90cmFjZXMvdGFibGUiOjExMTJ9XSw0MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy92aW9saW4iKX0seyIuLi9zcmMvdHJhY2VzL3Zpb2xpbiI6MTExOX1dLDQyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3Q9dHx8ZG9jdW1lbnQuYm9keSxlPWV8fHt9O3ZhciByPVsuMDEsMS8wXTsiZGlzdGFuY2VMaW1pdHMiaW4gZSYmKHJbMF09ZS5kaXN0YW5jZUxpbWl0c1swXSxyWzFdPWUuZGlzdGFuY2VMaW1pdHNbMV0pOyJ6b29tTWluImluIGUmJihyWzBdPWUuem9vbU1pbik7Inpvb21NYXgiaW4gZSYmKHJbMV09ZS56b29tTWF4KTt2YXIgYz1pKHtjZW50ZXI6ZS5jZW50ZXJ8fFswLDAsMF0sdXA6ZS51cHx8WzAsMSwwXSxleWU6ZS5leWV8fFswLDAsMTBdLG1vZGU6ZS5tb2RlfHwib3JiaXQiLGRpc3RhbmNlTGltaXRzOnJ9KSx1PVswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwXSxoPTAsZj10LmNsaWVudFdpZHRoLHA9dC5jbGllbnRIZWlnaHQsZD17dmlldzpjLGVsZW1lbnQ6dCxkZWxheTplLmRlbGF5fHwxNixyb3RhdGVTcGVlZDplLnJvdGF0ZVNwZWVkfHwxLHpvb21TcGVlZDplLnpvb21TcGVlZHx8MSx0cmFuc2xhdGVTcGVlZDplLnRyYW5zbGF0ZVNwZWVkfHwxLGZsaXBYOiEhZS5mbGlwWCxmbGlwWTohIWUuZmxpcFksbW9kZXM6Yy5tb2Rlcyx0aWNrOmZ1bmN0aW9uKCl7dmFyIGU9bigpLHI9dGhpcy5kZWxheTtjLmlkbGUoZS1yKSxjLmZsdXNoKGUtKDEwMCsyKnIpKTt2YXIgaT1lLTIqcjtjLnJlY2FsY01hdHJpeChpKTtmb3IodmFyIGE9ITAsbz1jLmNvbXB1dGVkTWF0cml4LHM9MDtzPDE2OysrcylhPWEmJnVbc109PT1vW3NdLHVbc109b1tzXTt2YXIgbD10LmNsaWVudFdpZHRoPT09ZiYmdC5jbGllbnRIZWlnaHQ9PT1wO3JldHVybiBmPXQuY2xpZW50V2lkdGgscD10LmNsaWVudEhlaWdodCxhPyFsOihoPU1hdGguZXhwKGMuY29tcHV0ZWRSYWRpdXNbMF0pLCEwKX0sbG9va0F0OmZ1bmN0aW9uKHQsZSxyKXtjLmxvb2tBdChjLmxhc3RUKCksdCxlLHIpfSxyb3RhdGU6ZnVuY3Rpb24odCxlLHIpe2Mucm90YXRlKGMubGFzdFQoKSx0LGUscil9LHBhbjpmdW5jdGlvbih0LGUscil7Yy5wYW4oYy5sYXN0VCgpLHQsZSxyKX0sdHJhbnNsYXRlOmZ1bmN0aW9uKHQsZSxyKXtjLnRyYW5zbGF0ZShjLmxhc3RUKCksdCxlLHIpfX07T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZCx7bWF0cml4OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYy5jb21wdXRlZE1hdHJpeH0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBjLnNldE1hdHJpeChjLmxhc3RUKCksdCksYy5jb21wdXRlZE1hdHJpeH0sZW51bWVyYWJsZTohMH0sbW9kZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGMuZ2V0TW9kZSgpfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGMuc2V0TW9kZSh0KSxjLmdldE1vZGUoKX0sZW51bWVyYWJsZTohMH0sY2VudGVyOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYy5jb21wdXRlZENlbnRlcn0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBjLmxvb2tBdChjLmxhc3RUKCksdCksYy5jb21wdXRlZENlbnRlcn0sZW51bWVyYWJsZTohMH0sZXllOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYy5jb21wdXRlZEV5ZX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBjLmxvb2tBdChjLmxhc3RUKCksbnVsbCx0KSxjLmNvbXB1dGVkRXllfSxlbnVtZXJhYmxlOiEwfSx1cDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGMuY29tcHV0ZWRVcH0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBjLmxvb2tBdChjLmxhc3RUKCksbnVsbCxudWxsLHQpLGMuY29tcHV0ZWRVcH0sZW51bWVyYWJsZTohMH0sZGlzdGFuY2U6e2dldDpmdW5jdGlvbigpe3JldHVybiBofSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGMuc2V0RGlzdGFuY2UoYy5sYXN0VCgpLHQpLHR9LGVudW1lcmFibGU6ITB9LGRpc3RhbmNlTGltaXRzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYy5nZXREaXN0YW5jZUxpbWl0cyhyKX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBjLnNldERpc3RhbmNlTGltaXRzKHQpLHR9LGVudW1lcmFibGU6ITB9fSksdC5hZGRFdmVudExpc3RlbmVyKCJjb250ZXh0bWVudSIsZnVuY3Rpb24odCl7cmV0dXJuIHQucHJldmVudERlZmF1bHQoKSwhMX0pO3ZhciBnPTAsbT0wLHY9e3NoaWZ0OiExLGNvbnRyb2w6ITEsYWx0OiExLG1ldGE6ITF9O2Z1bmN0aW9uIHkoZSxyLGksYSl7dmFyIG89MS90LmNsaWVudEhlaWdodCxzPW8qKHItZyksbD1vKihpLW0pLHU9ZC5mbGlwWD8xOi0xLGY9ZC5mbGlwWT8xOi0xLHA9TWF0aC5QSSpkLnJvdGF0ZVNwZWVkLHk9bigpO2lmKDEmZSlhLnNoaWZ0P2Mucm90YXRlKHksMCwwLC1zKnApOmMucm90YXRlKHksdSpwKnMsLWYqcCpsLDApO2Vsc2UgaWYoMiZlKWMucGFuKHksLWQudHJhbnNsYXRlU3BlZWQqcypoLGQudHJhbnNsYXRlU3BlZWQqbCpoLDApO2Vsc2UgaWYoNCZlKXt2YXIgeD1kLnpvb21TcGVlZCpsL3dpbmRvdy5pbm5lckhlaWdodCooeS1jLmxhc3RUKCkpKjUwO2MucGFuKHksMCwwLGgqKE1hdGguZXhwKHgpLTEpKX1nPXIsbT1pLHY9YX1yZXR1cm4gYSh0LHkpLHQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsZnVuY3Rpb24oZSl7dmFyIHI9cyhlLmNoYW5nZWRUb3VjaGVzWzBdLHQpO3koMCxyWzBdLHJbMV0sdikseSgxLHJbMF0sclsxXSx2KSxlLnByZXZlbnREZWZhdWx0KCl9LCEhbCYme3Bhc3NpdmU6ITF9KSx0LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsZnVuY3Rpb24oZSl7dmFyIHI9cyhlLmNoYW5nZWRUb3VjaGVzWzBdLHQpO3koMSxyWzBdLHJbMV0sdiksZS5wcmV2ZW50RGVmYXVsdCgpfSwhIWwmJntwYXNzaXZlOiExfSksdC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIsZnVuY3Rpb24oZSl7cyhlLmNoYW5nZWRUb3VjaGVzWzBdLHQpLHkoMCxnLG0sdiksZS5wcmV2ZW50RGVmYXVsdCgpfSwhIWwmJntwYXNzaXZlOiExfSksbyh0LGZ1bmN0aW9uKHQsZSxyKXt2YXIgaT1kLmZsaXBYPzE6LTEsYT1kLmZsaXBZPzE6LTEsbz1uKCk7aWYoTWF0aC5hYnModCk+TWF0aC5hYnMoZSkpYy5yb3RhdGUobywwLDAsLXQqaSpNYXRoLlBJKmQucm90YXRlU3BlZWQvd2luZG93LmlubmVyV2lkdGgpO2Vsc2V7dmFyIHM9ZC56b29tU3BlZWQqYSplL3dpbmRvdy5pbm5lckhlaWdodCooby1jLmxhc3RUKCkpLzEwMDtjLnBhbihvLDAsMCxoKihNYXRoLmV4cChzKS0xKSl9fSwhMCksZH07dmFyIG49dCgicmlnaHQtbm93IiksaT10KCIzZC12aWV3IiksYT10KCJtb3VzZS1jaGFuZ2UiKSxvPXQoIm1vdXNlLXdoZWVsIikscz10KCJtb3VzZS1ldmVudC1vZmZzZXQiKSxsPXQoImhhcy1wYXNzaXZlLWV2ZW50cyIpfSx7IjNkLXZpZXciOjQzLCJoYXMtcGFzc2l2ZS1ldmVudHMiOjM3OSwibW91c2UtY2hhbmdlIjo0MDIsIm1vdXNlLWV2ZW50LW9mZnNldCI6NDAzLCJtb3VzZS13aGVlbCI6NDA1LCJyaWdodC1ub3ciOjQ2NX1dLDQzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT0odD10fHx7fSkuZXllfHxbMCwwLDFdLHI9dC5jZW50ZXJ8fFswLDAsMF0scz10LnVwfHxbMCwxLDBdLGw9dC5kaXN0YW5jZUxpbWl0c3x8WzAsMS8wXSxjPXQubW9kZXx8InR1cm50YWJsZSIsdT1uKCksaD1pKCksZj1hKCk7cmV0dXJuIHUuc2V0RGlzdGFuY2VMaW1pdHMobFswXSxsWzFdKSx1Lmxvb2tBdCgwLGUscixzKSxoLnNldERpc3RhbmNlTGltaXRzKGxbMF0sbFsxXSksaC5sb29rQXQoMCxlLHIscyksZi5zZXREaXN0YW5jZUxpbWl0cyhsWzBdLGxbMV0pLGYubG9va0F0KDAsZSxyLHMpLG5ldyBvKHt0dXJudGFibGU6dSxvcmJpdDpoLG1hdHJpeDpmfSxjKX07dmFyIG49dCgidHVybnRhYmxlLWNhbWVyYS1jb250cm9sbGVyIiksaT10KCJvcmJpdC1jYW1lcmEtY29udHJvbGxlciIpLGE9dCgibWF0cml4LWNhbWVyYS1jb250cm9sbGVyIik7ZnVuY3Rpb24gbyh0LGUpe3RoaXMuX2NvbnRyb2xsZXJOYW1lcz1PYmplY3Qua2V5cyh0KSx0aGlzLl9jb250cm9sbGVyTGlzdD10aGlzLl9jb250cm9sbGVyTmFtZXMubWFwKGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSksdGhpcy5fbW9kZT1lLHRoaXMuX2FjdGl2ZT10W2VdLHRoaXMuX2FjdGl2ZXx8KHRoaXMuX21vZGU9InR1cm50YWJsZSIsdGhpcy5fYWN0aXZlPXQudHVybnRhYmxlKSx0aGlzLm1vZGVzPXRoaXMuX2NvbnRyb2xsZXJOYW1lcyx0aGlzLmNvbXB1dGVkTWF0cml4PXRoaXMuX2FjdGl2ZS5jb21wdXRlZE1hdHJpeCx0aGlzLmNvbXB1dGVkRXllPXRoaXMuX2FjdGl2ZS5jb21wdXRlZEV5ZSx0aGlzLmNvbXB1dGVkVXA9dGhpcy5fYWN0aXZlLmNvbXB1dGVkVXAsdGhpcy5jb21wdXRlZENlbnRlcj10aGlzLl9hY3RpdmUuY29tcHV0ZWRDZW50ZXIsdGhpcy5jb21wdXRlZFJhZGl1cz10aGlzLl9hY3RpdmUuY29tcHV0ZWRSYWRpdXN9dmFyIHM9by5wcm90b3R5cGU7W1siZmx1c2giLDFdLFsiaWRsZSIsMV0sWyJsb29rQXQiLDRdLFsicm90YXRlIiw0XSxbInBhbiIsNF0sWyJ0cmFuc2xhdGUiLDRdLFsic2V0TWF0cml4IiwyXSxbInNldERpc3RhbmNlTGltaXRzIiwyXSxbInNldERpc3RhbmNlIiwyXV0uZm9yRWFjaChmdW5jdGlvbih0KXtmb3IodmFyIGU9dFswXSxyPVtdLG49MDtuPHRbMV07KytuKXIucHVzaCgiYSIrbik7dmFyIGk9InZhciBjYz10aGlzLl9jb250cm9sbGVyTGlzdDtmb3IodmFyIGk9MDtpPGNjLmxlbmd0aDsrK2kpe2NjW2ldLiIrdFswXSsiKCIrci5qb2luKCkrIil9IjtzW2VdPUZ1bmN0aW9uLmFwcGx5KG51bGwsci5jb25jYXQoaSkpfSkscy5yZWNhbGNNYXRyaXg9ZnVuY3Rpb24odCl7dGhpcy5fYWN0aXZlLnJlY2FsY01hdHJpeCh0KX0scy5nZXREaXN0YW5jZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fYWN0aXZlLmdldERpc3RhbmNlKHQpfSxzLmdldERpc3RhbmNlTGltaXRzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9hY3RpdmUuZ2V0RGlzdGFuY2VMaW1pdHModCl9LHMubGFzdFQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYWN0aXZlLmxhc3RUKCl9LHMuc2V0TW9kZT1mdW5jdGlvbih0KXtpZih0IT09dGhpcy5fbW9kZSl7dmFyIGU9dGhpcy5fY29udHJvbGxlck5hbWVzLmluZGV4T2YodCk7aWYoIShlPDApKXt2YXIgcj10aGlzLl9hY3RpdmUsbj10aGlzLl9jb250cm9sbGVyTGlzdFtlXSxpPU1hdGgubWF4KHIubGFzdFQoKSxuLmxhc3RUKCkpO3IucmVjYWxjTWF0cml4KGkpLG4uc2V0TWF0cml4KGksci5jb21wdXRlZE1hdHJpeCksdGhpcy5fYWN0aXZlPW4sdGhpcy5fbW9kZT10LHRoaXMuY29tcHV0ZWRNYXRyaXg9dGhpcy5fYWN0aXZlLmNvbXB1dGVkTWF0cml4LHRoaXMuY29tcHV0ZWRFeWU9dGhpcy5fYWN0aXZlLmNvbXB1dGVkRXllLHRoaXMuY29tcHV0ZWRVcD10aGlzLl9hY3RpdmUuY29tcHV0ZWRVcCx0aGlzLmNvbXB1dGVkQ2VudGVyPXRoaXMuX2FjdGl2ZS5jb21wdXRlZENlbnRlcix0aGlzLmNvbXB1dGVkUmFkaXVzPXRoaXMuX2FjdGl2ZS5jb21wdXRlZFJhZGl1c319fSxzLmdldE1vZGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9kZX19LHsibWF0cml4LWNhbWVyYS1jb250cm9sbGVyIjo0MDAsIm9yYml0LWNhbWVyYS1jb250cm9sbGVyIjo0MjMsInR1cm50YWJsZS1jYW1lcmEtY29udHJvbGxlciI6NTA0fV0sNDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiY3NzLWZvbnQiKSxpPXQoInBpY2stYnktYWxpYXMiKSxhPXQoInJlZ2wiKSxvPXQoImdsLXV0aWwvY29udGV4dCIpLHM9dCgiZXM2LXdlYWstbWFwIiksbD10KCJjb2xvci1ub3JtYWxpemUiKSxjPXQoImZvbnQtYXRsYXMiKSx1PXQoInR5cGVkYXJyYXktcG9vbCIpLGg9dCgicGFyc2UtcmVjdCIpLGY9dCgiaXMtcGxhaW4tb2JqIikscD10KCJwYXJzZS11bml0IiksZD10KCJ0by1weCIpLGc9dCgiZGV0ZWN0LWtlcm5pbmciKSxtPXQoIm9iamVjdC1hc3NpZ24iKSx2PXQoImZvbnQtbWVhc3VyZSIpLHk9dCgiZmxhdHRlbi12ZXJ0ZXgtZGF0YSIpLHg9bmV3IHMsYj0hMTtpZihkb2N1bWVudC5ib2R5KXt2YXIgXz1kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpKTtfLnN0eWxlLmZvbnQ9Iml0YWxpYyBzbWFsbC1jYXBzIGJvbGQgY29uZGVuc2VkIDE2cHgvMiBjdXJzaXZlIixnZXRDb21wdXRlZFN0eWxlKF8pLmZvbnRTdHJldGNoJiYoYj0hMCksZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChfKX12YXIgdz1mdW5jdGlvbih0KXshZnVuY3Rpb24odCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQuX2dsJiZ0LnByb3AmJnQudGV4dHVyZSYmdC5idWZmZXJ9KHQpP3RoaXMuZ2w9byh0KToodD17cmVnbDp0fSx0aGlzLmdsPXQucmVnbC5fZ2wpLHRoaXMuc2hhZGVyPXguZ2V0KHRoaXMuZ2wpLHRoaXMuc2hhZGVyP3RoaXMucmVnbD10aGlzLnNoYWRlci5yZWdsOnRoaXMucmVnbD10LnJlZ2x8fGEoe2dsOnRoaXMuZ2x9KSx0aGlzLmNoYXJCdWZmZXI9dGhpcy5yZWdsLmJ1ZmZlcih7dHlwZToidWludDgiLHVzYWdlOiJzdHJlYW0ifSksdGhpcy5zaXplQnVmZmVyPXRoaXMucmVnbC5idWZmZXIoe3R5cGU6ImZsb2F0Iix1c2FnZToic3RyZWFtIn0pLHRoaXMuc2hhZGVyfHwodGhpcy5zaGFkZXI9dGhpcy5jcmVhdGVTaGFkZXIoKSx4LnNldCh0aGlzLmdsLHRoaXMuc2hhZGVyKSksdGhpcy5iYXRjaD1bXSx0aGlzLmZvbnRTaXplPVtdLHRoaXMuZm9udD1bXSx0aGlzLmZvbnRBdGxhcz1bXSx0aGlzLmRyYXc9dGhpcy5zaGFkZXIuZHJhdy5iaW5kKHRoaXMpLHRoaXMucmVuZGVyPWZ1bmN0aW9uKCl7dGhpcy5yZWdsLl9yZWZyZXNoKCksdGhpcy5kcmF3KHRoaXMuYmF0Y2gpfSx0aGlzLmNhbnZhcz10aGlzLmdsLmNhbnZhcyx0aGlzLnVwZGF0ZShmKHQpP3Q6e30pfTt3LnByb3RvdHlwZS5jcmVhdGVTaGFkZXI9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnJlZ2wsZT10KHtibGVuZDp7ZW5hYmxlOiEwLGNvbG9yOlswLDAsMCwxXSxmdW5jOntzcmNSR0I6InNyYyBhbHBoYSIsZHN0UkdCOiJvbmUgbWludXMgc3JjIGFscGhhIixzcmNBbHBoYToib25lIG1pbnVzIGRzdCBhbHBoYSIsZHN0QWxwaGE6Im9uZSJ9fSxzdGVuY2lsOntlbmFibGU6ITF9LGRlcHRoOntlbmFibGU6ITF9LGNvdW50OnQucHJvcCgiY291bnQiKSxvZmZzZXQ6dC5wcm9wKCJvZmZzZXQiKSxhdHRyaWJ1dGVzOntjaGFyT2Zmc2V0OntvZmZzZXQ6NCxzdHJpZGU6OCxidWZmZXI6dC50aGlzKCJzaXplQnVmZmVyIil9LHdpZHRoOntvZmZzZXQ6MCxzdHJpZGU6OCxidWZmZXI6dC50aGlzKCJzaXplQnVmZmVyIil9LGNoYXI6dC50aGlzKCJjaGFyQnVmZmVyIikscG9zaXRpb246dC50aGlzKCJwb3NpdGlvbiIpfSx1bmlmb3Jtczp7YXRsYXNTaXplOmZ1bmN0aW9uKHQsZSl7cmV0dXJuW2UuYXRsYXMud2lkdGgsZS5hdGxhcy5oZWlnaHRdfSxhdGxhc0RpbTpmdW5jdGlvbih0LGUpe3JldHVybltlLmF0bGFzLmNvbHMsZS5hdGxhcy5yb3dzXX0sYXRsYXM6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5hdGxhcy50ZXh0dXJlfSxjaGFyU3RlcDpmdW5jdGlvbih0LGUpe3JldHVybiBlLmF0bGFzLnN0ZXB9LGVtOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuYXRsYXMuZW19LGNvbG9yOnQucHJvcCgiY29sb3IiKSxvcGFjaXR5OnQucHJvcCgib3BhY2l0eSIpLHZpZXdwb3J0OnQudGhpcygidmlld3BvcnRBcnJheSIpLHNjYWxlOnQudGhpcygic2NhbGUiKSxhbGlnbjp0LnByb3AoImFsaWduIiksYmFzZWxpbmU6dC5wcm9wKCJiYXNlbGluZSIpLHRyYW5zbGF0ZTp0LnRoaXMoInRyYW5zbGF0ZSIpLHBvc2l0aW9uT2Zmc2V0OnQucHJvcCgicG9zaXRpb25PZmZzZXQiKX0scHJpbWl0aXZlOiJwb2ludHMiLHZpZXdwb3J0OnQudGhpcygidmlld3BvcnQiKSx2ZXJ0OiJcblx0XHRcdHByZWNpc2lvbiBoaWdocCBmbG9hdDtcblx0XHRcdGF0dHJpYnV0ZSBmbG9hdCB3aWR0aCwgY2hhck9mZnNldCwgY2hhcjtcblx0XHRcdGF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uO1xuXHRcdFx0dW5pZm9ybSBmbG9hdCBmb250U2l6ZSwgY2hhclN0ZXAsIGVtLCBhbGlnbiwgYmFzZWxpbmU7XG5cdFx0XHR1bmlmb3JtIHZlYzQgdmlld3BvcnQ7XG5cdFx0XHR1bmlmb3JtIHZlYzQgY29sb3I7XG5cdFx0XHR1bmlmb3JtIHZlYzIgYXRsYXNTaXplLCBhdGxhc0RpbSwgc2NhbGUsIHRyYW5zbGF0ZSwgcG9zaXRpb25PZmZzZXQ7XG5cdFx0XHR2YXJ5aW5nIHZlYzIgY2hhckNvb3JkLCBjaGFySWQ7XG5cdFx0XHR2YXJ5aW5nIGZsb2F0IGNoYXJXaWR0aDtcblx0XHRcdHZhcnlpbmcgdmVjNCBmb250Q29sb3I7XG5cdFx0XHR2b2lkIG1haW4gKCkge1xuXHRcdFx0XHQiKyh3Lm5vcm1hbFZpZXdwb3J0PyIiOiJ2ZWMyIHBvc2l0aW9uT2Zmc2V0ID0gdmVjMihwb3NpdGlvbk9mZnNldC54LC0gcG9zaXRpb25PZmZzZXQueSk7IikrIlxuXG5cdFx0XHRcdHZlYzIgb2Zmc2V0ID0gZmxvb3IoZW0gKiAodmVjMihhbGlnbiArIGNoYXJPZmZzZXQsIGJhc2VsaW5lKVxuXHRcdFx0XHRcdCsgcG9zaXRpb25PZmZzZXQpKVxuXHRcdFx0XHRcdC8gKHZpZXdwb3J0Lnp3ICogc2NhbGUueHkpO1xuXG5cdFx0XHRcdHZlYzIgcG9zaXRpb24gPSAocG9zaXRpb24gKyB0cmFuc2xhdGUpICogc2NhbGU7XG5cdFx0XHRcdHBvc2l0aW9uICs9IG9mZnNldCAqIHNjYWxlO1xuXG5cdFx0XHRcdCIrKHcubm9ybWFsVmlld3BvcnQ/InBvc2l0aW9uLnkgPSAxLiAtIHBvc2l0aW9uLnk7IjoiIikrIlxuXG5cdFx0XHRcdGNoYXJDb29yZCA9IHBvc2l0aW9uICogdmlld3BvcnQuencgKyB2aWV3cG9ydC54eTtcblxuXHRcdFx0XHRnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24gKiAyLiAtIDEuLCAwLCAxKTtcblxuXHRcdFx0XHRnbF9Qb2ludFNpemUgPSBjaGFyU3RlcDtcblxuXHRcdFx0XHRjaGFySWQueCA9IG1vZChjaGFyLCBhdGxhc0RpbS54KTtcblx0XHRcdFx0Y2hhcklkLnkgPSBmbG9vcihjaGFyIC8gYXRsYXNEaW0ueCk7XG5cblx0XHRcdFx0Y2hhcldpZHRoID0gd2lkdGggKiBlbTtcblxuXHRcdFx0XHRmb250Q29sb3IgPSBjb2xvciAvIDI1NS47XG5cdFx0XHR9IixmcmFnOiJcblx0XHRcdHByZWNpc2lvbiBoaWdocCBmbG9hdDtcblx0XHRcdHVuaWZvcm0gc2FtcGxlcjJEIGF0bGFzO1xuXHRcdFx0dW5pZm9ybSBmbG9hdCBmb250U2l6ZSwgY2hhclN0ZXAsIG9wYWNpdHk7XG5cdFx0XHR1bmlmb3JtIHZlYzIgYXRsYXNTaXplO1xuXHRcdFx0dW5pZm9ybSB2ZWM0IHZpZXdwb3J0O1xuXHRcdFx0dmFyeWluZyB2ZWM0IGZvbnRDb2xvcjtcblx0XHRcdHZhcnlpbmcgdmVjMiBjaGFyQ29vcmQsIGNoYXJJZDtcblx0XHRcdHZhcnlpbmcgZmxvYXQgY2hhcldpZHRoO1xuXG5cdFx0XHRmbG9hdCBsaWdodG5lc3ModmVjNCBjb2xvcikge1xuXHRcdFx0XHRyZXR1cm4gY29sb3IuciAqIDAuMjk5ICsgY29sb3IuZyAqIDAuNTg3ICsgY29sb3IuYiAqIDAuMTE0O1xuXHRcdFx0fVxuXG5cdFx0XHR2b2lkIG1haW4gKCkge1xuXHRcdFx0XHR2ZWMyIHV2ID0gZ2xfRnJhZ0Nvb3JkLnh5IC0gY2hhckNvb3JkICsgY2hhclN0ZXAgKiAuNTtcblx0XHRcdFx0ZmxvYXQgaGFsZkNoYXJTdGVwID0gZmxvb3IoY2hhclN0ZXAgKiAuNSArIC41KTtcblxuXHRcdFx0XHQvLyBpbnZlcnQgeSBhbmQgc2hpZnQgYnkgMXB4IChGRiBleHBlY2lhbGx5IG5lZWRzIHRoYXQpXG5cdFx0XHRcdHV2LnkgPSBjaGFyU3RlcCAtIHV2Lnk7XG5cblx0XHRcdFx0Ly8gaWdub3JlIHBvaW50cyBvdXRzaWRlIG9mIGNoYXJhY3RlciBib3VuZGluZyBib3hcblx0XHRcdFx0ZmxvYXQgaGFsZkNoYXJXaWR0aCA9IGNlaWwoY2hhcldpZHRoICogLjUpO1xuXHRcdFx0XHRpZiAoZmxvb3IodXYueCkgPiBoYWxmQ2hhclN0ZXAgKyBoYWxmQ2hhcldpZHRoIHx8XG5cdFx0XHRcdFx0Zmxvb3IodXYueCkgPCBoYWxmQ2hhclN0ZXAgLSBoYWxmQ2hhcldpZHRoKSByZXR1cm47XG5cblx0XHRcdFx0dXYgKz0gY2hhcklkICogY2hhclN0ZXA7XG5cdFx0XHRcdHV2ID0gdXYgLyBhdGxhc1NpemU7XG5cblx0XHRcdFx0dmVjNCBjb2xvciA9IGZvbnRDb2xvcjtcblx0XHRcdFx0dmVjNCBtYXNrID0gdGV4dHVyZTJEKGF0bGFzLCB1dik7XG5cblx0XHRcdFx0ZmxvYXQgbWFza1kgPSBsaWdodG5lc3MobWFzayk7XG5cdFx0XHRcdC8vIGZsb2F0IGNvbG9yWSA9IGxpZ2h0bmVzcyhjb2xvcik7XG5cdFx0XHRcdGNvbG9yLmEgKj0gbWFza1k7XG5cdFx0XHRcdGNvbG9yLmEgKj0gb3BhY2l0eTtcblxuXHRcdFx0XHQvLyBjb2xvci5hICs9IC4xO1xuXG5cdFx0XHRcdC8vIGFudGlhbGlhc2luZywgc2VlIHlpcSBjb2xvciBzcGFjZSB5LWNoYW5uZWwgZm9ybXVsYVxuXHRcdFx0XHQvLyBjb2xvci5yZ2IgKz0gKDEuIC0gY29sb3IucmdiKSAqICgxLiAtIG1hc2sucmdiKTtcblxuXHRcdFx0XHRnbF9GcmFnQ29sb3IgPSBjb2xvcjtcblx0XHRcdH0ifSk7cmV0dXJue3JlZ2w6dCxkcmF3OmUsYXRsYXM6e319fSx3LnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZigic3RyaW5nIj09dHlwZW9mIHQpdD17dGV4dDp0fTtlbHNlIGlmKCF0KXJldHVybjtudWxsIT0odD1pKHQse3Bvc2l0aW9uOiJwb3NpdGlvbiBwb3NpdGlvbnMgY29vcmQgY29vcmRzIGNvb3JkaW5hdGVzIixmb250OiJmb250IGZvbnRGYWNlIGZvbnRmYWNlIHR5cGVmYWNlIGNzc0ZvbnQgY3NzLWZvbnQgZmFtaWx5IGZvbnRGYW1pbHkiLGZvbnRTaXplOiJmb250U2l6ZSBmb250c2l6ZSBzaXplIGZvbnQtc2l6ZSIsdGV4dDoidGV4dCB0ZXh0cyBjaGFycyBjaGFyYWN0ZXJzIHZhbHVlIHZhbHVlcyBzeW1ib2xzIixhbGlnbjoiYWxpZ24gYWxpZ25tZW50IHRleHRBbGlnbiB0ZXh0YmFzZWxpbmUiLGJhc2VsaW5lOiJiYXNlbGluZSB0ZXh0QmFzZWxpbmUgdGV4dGJhc2VsaW5lIixkaXJlY3Rpb246ImRpciBkaXJlY3Rpb24gdGV4dERpcmVjdGlvbiIsY29sb3I6ImNvbG9yIGNvbG91ciBmaWxsIGZpbGwtY29sb3IgZmlsbENvbG9yIHRleHRDb2xvciB0ZXh0Y29sb3IiLGtlcm5pbmc6Imtlcm5pbmcga2VybiIscmFuZ2U6InJhbmdlIGRhdGFCb3giLHZpZXdwb3J0OiJ2cCB2aWV3cG9ydCB2aWV3Qm94IHZpZXdib3ggdmlld1BvcnQiLG9wYWNpdHk6Im9wYWNpdHkgYWxwaGEgdHJhbnNwYXJlbmN5IHZpc2libGUgdmlzaWJpbGl0eSBvcGFxdWUiLG9mZnNldDoib2Zmc2V0IHBvc2l0aW9uT2Zmc2V0IHBhZGRpbmcgc2hpZnQgaW5kZW50IGluZGVudGF0aW9uIn0sITApKS5vcGFjaXR5JiYoQXJyYXkuaXNBcnJheSh0Lm9wYWNpdHkpP3RoaXMub3BhY2l0eT10Lm9wYWNpdHkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBwYXJzZUZsb2F0KHQpfSk6dGhpcy5vcGFjaXR5PXBhcnNlRmxvYXQodC5vcGFjaXR5KSksbnVsbCE9dC52aWV3cG9ydCYmKHRoaXMudmlld3BvcnQ9aCh0LnZpZXdwb3J0KSx3Lm5vcm1hbFZpZXdwb3J0JiYodGhpcy52aWV3cG9ydC55PXRoaXMuY2FudmFzLmhlaWdodC10aGlzLnZpZXdwb3J0LnktdGhpcy52aWV3cG9ydC5oZWlnaHQpLHRoaXMudmlld3BvcnRBcnJheT1bdGhpcy52aWV3cG9ydC54LHRoaXMudmlld3BvcnQueSx0aGlzLnZpZXdwb3J0LndpZHRoLHRoaXMudmlld3BvcnQuaGVpZ2h0XSksbnVsbD09dGhpcy52aWV3cG9ydCYmKHRoaXMudmlld3BvcnQ9e3g6MCx5OjAsd2lkdGg6dGhpcy5nbC5kcmF3aW5nQnVmZmVyV2lkdGgsaGVpZ2h0OnRoaXMuZ2wuZHJhd2luZ0J1ZmZlckhlaWdodH0sdGhpcy52aWV3cG9ydEFycmF5PVt0aGlzLnZpZXdwb3J0LngsdGhpcy52aWV3cG9ydC55LHRoaXMudmlld3BvcnQud2lkdGgsdGhpcy52aWV3cG9ydC5oZWlnaHRdKSxudWxsIT10Lmtlcm5pbmcmJih0aGlzLmtlcm5pbmc9dC5rZXJuaW5nKSxudWxsIT10Lm9mZnNldCYmKCJudW1iZXIiPT10eXBlb2YgdC5vZmZzZXQmJih0Lm9mZnNldD1bdC5vZmZzZXQsMF0pLHRoaXMucG9zaXRpb25PZmZzZXQ9eSh0Lm9mZnNldCkpLHQuZGlyZWN0aW9uJiYodGhpcy5kaXJlY3Rpb249dC5kaXJlY3Rpb24pLHQucmFuZ2UmJih0aGlzLnJhbmdlPXQucmFuZ2UsdGhpcy5zY2FsZT1bMS8odC5yYW5nZVsyXS10LnJhbmdlWzBdKSwxLyh0LnJhbmdlWzNdLXQucmFuZ2VbMV0pXSx0aGlzLnRyYW5zbGF0ZT1bLXQucmFuZ2VbMF0sLXQucmFuZ2VbMV1dKSx0LnNjYWxlJiYodGhpcy5zY2FsZT10LnNjYWxlKSx0LnRyYW5zbGF0ZSYmKHRoaXMudHJhbnNsYXRlPXQudHJhbnNsYXRlKSx0aGlzLnNjYWxlfHwodGhpcy5zY2FsZT1bMS90aGlzLnZpZXdwb3J0LndpZHRoLDEvdGhpcy52aWV3cG9ydC5oZWlnaHRdKSx0aGlzLnRyYW5zbGF0ZXx8KHRoaXMudHJhbnNsYXRlPVswLDBdKSx0aGlzLmZvbnQubGVuZ3RofHx0LmZvbnR8fCh0LmZvbnQ9dy5iYXNlRm9udFNpemUrInB4IHNhbnMtc2VyaWYiKTt2YXIgcixhPSExLG89ITE7aWYodC5mb250JiYoQXJyYXkuaXNBcnJheSh0LmZvbnQpP3QuZm9udDpbdC5mb250XSkuZm9yRWFjaChmdW5jdGlvbih0LHIpe2lmKCJzdHJpbmciPT10eXBlb2YgdCl0cnl7dD1uLnBhcnNlKHQpfWNhdGNoKGUpe3Q9bi5wYXJzZSh3LmJhc2VGb250U2l6ZSsicHggIit0KX1lbHNlIHQ9bi5wYXJzZShuLnN0cmluZ2lmeSh0KSk7dmFyIGk9bi5zdHJpbmdpZnkoe3NpemU6dy5iYXNlRm9udFNpemUsZmFtaWx5OnQuZmFtaWx5LHN0cmV0Y2g6Yj90LnN0cmV0Y2g6dm9pZCAwLHZhcmlhbnQ6dC52YXJpYW50LHdlaWdodDp0LndlaWdodCxzdHlsZTp0LnN0eWxlfSkscz1wKHQuc2l6ZSksbD1NYXRoLnJvdW5kKHNbMF0qZChzWzFdKSk7aWYobCE9PWUuZm9udFNpemVbcl0mJihvPSEwLGUuZm9udFNpemVbcl09bCksIShlLmZvbnRbcl0mJmk9PWUuZm9udFtyXS5iYXNlU3RyaW5nfHwoYT0hMCxlLmZvbnRbcl09dy5mb250c1tpXSxlLmZvbnRbcl0pKSl7dmFyIGM9dC5mYW1pbHkuam9pbigiLCAiKSx1PVt0LnN0eWxlXTt0LnN0eWxlIT10LnZhcmlhbnQmJnUucHVzaCh0LnZhcmlhbnQpLHQudmFyaWFudCE9dC53ZWlnaHQmJnUucHVzaCh0LndlaWdodCksYiYmdC53ZWlnaHQhPXQuc3RyZXRjaCYmdS5wdXNoKHQuc3RyZXRjaCksZS5mb250W3JdPXtiYXNlU3RyaW5nOmksZmFtaWx5OmMsd2VpZ2h0OnQud2VpZ2h0LHN0cmV0Y2g6dC5zdHJldGNoLHN0eWxlOnQuc3R5bGUsdmFyaWFudDp0LnZhcmlhbnQsd2lkdGg6e30sa2VybmluZzp7fSxtZXRyaWNzOnYoYyx7b3JpZ2luOiJ0b3AiLGZvbnRTaXplOncuYmFzZUZvbnRTaXplLGZvbnRTdHlsZTp1LmpvaW4oIiAiKX0pfSx3LmZvbnRzW2ldPWUuZm9udFtyXX19KSwoYXx8bykmJnRoaXMuZm9udC5mb3JFYWNoKGZ1bmN0aW9uKHIsaSl7dmFyIGE9bi5zdHJpbmdpZnkoe3NpemU6ZS5mb250U2l6ZVtpXSxmYW1pbHk6ci5mYW1pbHksc3RyZXRjaDpiP3Iuc3RyZXRjaDp2b2lkIDAsdmFyaWFudDpyLnZhcmlhbnQsd2VpZ2h0OnIud2VpZ2h0LHN0eWxlOnIuc3R5bGV9KTtpZihlLmZvbnRBdGxhc1tpXT1lLnNoYWRlci5hdGxhc1thXSwhZS5mb250QXRsYXNbaV0pe3ZhciBvPXIubWV0cmljcztlLnNoYWRlci5hdGxhc1thXT1lLmZvbnRBdGxhc1tpXT17Zm9udFN0cmluZzphLHN0ZXA6MipNYXRoLmNlaWwoZS5mb250U2l6ZVtpXSpvLmJvdHRvbSouNSksZW06ZS5mb250U2l6ZVtpXSxjb2xzOjAscm93czowLGhlaWdodDowLHdpZHRoOjAsY2hhcnM6W10saWRzOnt9LHRleHR1cmU6ZS5yZWdsLnRleHR1cmUoKX19bnVsbD09dC50ZXh0JiYodC50ZXh0PWUudGV4dCl9KSwic3RyaW5nIj09dHlwZW9mIHQudGV4dCYmdC5wb3NpdGlvbiYmdC5wb3NpdGlvbi5sZW5ndGg+Mil7Zm9yKHZhciBzPUFycmF5KC41KnQucG9zaXRpb24ubGVuZ3RoKSxmPTA7ZjxzLmxlbmd0aDtmKyspc1tmXT10LnRleHQ7dC50ZXh0PXN9aWYobnVsbCE9dC50ZXh0fHxhKXtpZih0aGlzLnRleHRPZmZzZXRzPVswXSxBcnJheS5pc0FycmF5KHQudGV4dCkpe3RoaXMuY291bnQ9dC50ZXh0WzBdLmxlbmd0aCx0aGlzLmNvdW50cz1bdGhpcy5jb3VudF07Zm9yKHZhciB4PTE7eDx0LnRleHQubGVuZ3RoO3grKyllLnRleHRPZmZzZXRzW3hdPWUudGV4dE9mZnNldHNbeC0xXSt0LnRleHRbeC0xXS5sZW5ndGgsZS5jb3VudCs9dC50ZXh0W3hdLmxlbmd0aCxlLmNvdW50cy5wdXNoKHQudGV4dFt4XS5sZW5ndGgpO3RoaXMudGV4dD10LnRleHQuam9pbigiIil9ZWxzZSB0aGlzLnRleHQ9dC50ZXh0LHRoaXMuY291bnQ9dGhpcy50ZXh0Lmxlbmd0aCx0aGlzLmNvdW50cz1bdGhpcy5jb3VudF07cj1bXSx0aGlzLmZvbnQuZm9yRWFjaChmdW5jdGlvbih0LG4pe3cuYXRsYXNDb250ZXh0LmZvbnQ9dC5iYXNlU3RyaW5nO2Zvcih2YXIgaT1lLmZvbnRBdGxhc1tuXSxhPTA7YTxlLnRleHQubGVuZ3RoO2ErKyl7dmFyIG89ZS50ZXh0LmNoYXJBdChhKTtpZihudWxsPT1pLmlkc1tvXSYmKGkuaWRzW29dPWkuY2hhcnMubGVuZ3RoLGkuY2hhcnMucHVzaChvKSxyLnB1c2gobykpLG51bGw9PXQud2lkdGhbb10mJih0LndpZHRoW29dPXcuYXRsYXNDb250ZXh0Lm1lYXN1cmVUZXh0KG8pLndpZHRoL3cuYmFzZUZvbnRTaXplLGUua2VybmluZykpe3ZhciBzPVtdO2Zvcih2YXIgbCBpbiB0LndpZHRoKXMucHVzaChsK28sbytsKTttKHQua2VybmluZyxnKHQuZmFtaWx5LHtwYWlyczpzfSkpfX19KX1pZih0LnBvc2l0aW9uKWlmKHQucG9zaXRpb24ubGVuZ3RoPjIpe2Zvcih2YXIgXz0hdC5wb3NpdGlvblswXS5sZW5ndGgsaz11Lm1hbGxvY0Zsb2F0KDIqdGhpcy5jb3VudCksTT0wLEE9MDtNPHRoaXMuY291bnRzLmxlbmd0aDtNKyspe3ZhciBUPWUuY291bnRzW01dO2lmKF8pZm9yKHZhciBTPTA7UzxUO1MrKylrW0ErK109dC5wb3NpdGlvblsyKk1dLGtbQSsrXT10LnBvc2l0aW9uWzIqTSsxXTtlbHNlIGZvcih2YXIgRT0wO0U8VDtFKyspa1tBKytdPXQucG9zaXRpb25bTV1bMF0sa1tBKytdPXQucG9zaXRpb25bTV1bMV19dGhpcy5wb3NpdGlvbi5jYWxsP3RoaXMucG9zaXRpb24oe3R5cGU6ImZsb2F0IixkYXRhOmt9KTp0aGlzLnBvc2l0aW9uPXRoaXMucmVnbC5idWZmZXIoe3R5cGU6ImZsb2F0IixkYXRhOmt9KSx1LmZyZWVGbG9hdChrKX1lbHNlIHRoaXMucG9zaXRpb24uZGVzdHJveSYmdGhpcy5wb3NpdGlvbi5kZXN0cm95KCksdGhpcy5wb3NpdGlvbj17Y29uc3RhbnQ6dC5wb3NpdGlvbn07aWYodC50ZXh0fHxhKXt2YXIgQz11Lm1hbGxvY1VpbnQ4KHRoaXMuY291bnQpLEw9dS5tYWxsb2NGbG9hdCgyKnRoaXMuY291bnQpO3RoaXMudGV4dFdpZHRoPVtdO2Zvcih2YXIgej0wLFA9MDt6PHRoaXMuY291bnRzLmxlbmd0aDt6Kyspe2Zvcih2YXIgST1lLmNvdW50c1t6XSxPPWUuZm9udFt6XXx8ZS5mb250WzBdLEQ9ZS5mb250QXRsYXNbel18fGUuZm9udEF0bGFzWzBdLFI9MDtSPEk7UisrKXt2YXIgQj1lLnRleHQuY2hhckF0KFApLEY9ZS50ZXh0LmNoYXJBdChQLTEpO2lmKENbUF09RC5pZHNbQl0sTFsyKlBdPU8ud2lkdGhbQl0sUil7dmFyIE49TFsyKlAtMl0saj1MWzIqUF0sVj1MWzIqUC0xXSsuNSpOKy41Kmo7aWYoZS5rZXJuaW5nKXt2YXIgVT1PLmtlcm5pbmdbRitCXTtVJiYoVis9LjAwMSpVKX1MWzIqUCsxXT1WfWVsc2UgTFsyKlArMV09LjUqTFsyKlBdO1ArK31lLnRleHRXaWR0aC5wdXNoKEwubGVuZ3RoPy41KkxbMipQLTJdK0xbMipQLTFdOjApfXQuYWxpZ258fCh0LmFsaWduPXRoaXMuYWxpZ24pLHRoaXMuY2hhckJ1ZmZlcih7ZGF0YTpDLHR5cGU6InVpbnQ4Iix1c2FnZToic3RyZWFtIn0pLHRoaXMuc2l6ZUJ1ZmZlcih7ZGF0YTpMLHR5cGU6ImZsb2F0Iix1c2FnZToic3RyZWFtIn0pLHUuZnJlZVVpbnQ4KEMpLHUuZnJlZUZsb2F0KEwpLHIubGVuZ3RoJiZ0aGlzLmZvbnQuZm9yRWFjaChmdW5jdGlvbih0LHIpe3ZhciBuPWUuZm9udEF0bGFzW3JdLGk9bi5zdGVwLGE9TWF0aC5mbG9vcih3Lm1heEF0bGFzU2l6ZS9pKSxvPU1hdGgubWluKGEsbi5jaGFycy5sZW5ndGgpLHM9TWF0aC5jZWlsKG4uY2hhcnMubGVuZ3RoL28pLGw9byppLHU9cyppO24ud2lkdGg9bCxuLmhlaWdodD11LG4ucm93cz1zLG4uY29scz1vLG4uZW0mJm4udGV4dHVyZSh7ZGF0YTpjKHtjYW52YXM6dy5hdGxhc0NhbnZhcyxmb250Om4uZm9udFN0cmluZyxjaGFyczpuLmNoYXJzLHNoYXBlOltsLHVdLHN0ZXA6W2ksaV19KX0pfSl9aWYodC5hbGlnbiYmKHRoaXMuYWxpZ249dC5hbGlnbix0aGlzLmFsaWduT2Zmc2V0PXRoaXMudGV4dFdpZHRoLm1hcChmdW5jdGlvbih0LHIpe3ZhciBuPUFycmF5LmlzQXJyYXkoZS5hbGlnbik/ZS5hbGlnbi5sZW5ndGg+MT9lLmFsaWduW3JdOmUuYWxpZ25bMF06ZS5hbGlnbjtpZigibnVtYmVyIj09dHlwZW9mIG4pcmV0dXJuIG47c3dpdGNoKG4pe2Nhc2UicmlnaHQiOmNhc2UiZW5kIjpyZXR1cm4tdDtjYXNlImNlbnRlciI6Y2FzZSJjZW50cmUiOmNhc2UibWlkZGxlIjpyZXR1cm4uNSotdH1yZXR1cm4gMH0pKSxudWxsPT10aGlzLmJhc2VsaW5lJiZudWxsPT10LmJhc2VsaW5lJiYodC5iYXNlbGluZT0wKSxudWxsIT10LmJhc2VsaW5lJiYodGhpcy5iYXNlbGluZT10LmJhc2VsaW5lLEFycmF5LmlzQXJyYXkodGhpcy5iYXNlbGluZSl8fCh0aGlzLmJhc2VsaW5lPVt0aGlzLmJhc2VsaW5lXSksdGhpcy5iYXNlbGluZU9mZnNldD10aGlzLmJhc2VsaW5lLm1hcChmdW5jdGlvbih0LHIpe3ZhciBuPShlLmZvbnRbcl18fGUuZm9udFswXSkubWV0cmljcyxpPTA7cmV0dXJuIGkrPS41Km4uYm90dG9tLGkrPSJudW1iZXIiPT10eXBlb2YgdD90LW4uYmFzZWxpbmU6LW5bdF0sdy5ub3JtYWxWaWV3cG9ydHx8KGkqPS0xKSxpfSkpLG51bGwhPXQuY29sb3IpaWYodC5jb2xvcnx8KHQuY29sb3I9InRyYW5zcGFyZW50IiksInN0cmluZyIhPXR5cGVvZiB0LmNvbG9yJiZpc05hTih0LmNvbG9yKSl7dmFyIHE7aWYoIm51bWJlciI9PXR5cGVvZiB0LmNvbG9yWzBdJiZ0LmNvbG9yLmxlbmd0aD50aGlzLmNvdW50cy5sZW5ndGgpe3ZhciBIPXQuY29sb3IubGVuZ3RoO3E9dS5tYWxsb2NVaW50OChIKTtmb3IodmFyIEc9KHQuY29sb3Iuc3ViYXJyYXl8fHQuY29sb3Iuc2xpY2UpLmJpbmQodC5jb2xvciksVz0wO1c8SDtXKz00KXEuc2V0KGwoRyhXLFcrNCksInVpbnQ4IiksVyl9ZWxzZXt2YXIgWT10LmNvbG9yLmxlbmd0aDtxPXUubWFsbG9jVWludDgoNCpZKTtmb3IodmFyIFg9MDtYPFk7WCsrKXEuc2V0KGwodC5jb2xvcltYXXx8MCwidWludDgiKSw0KlgpfXRoaXMuY29sb3I9cX1lbHNlIHRoaXMuY29sb3I9bCh0LmNvbG9yLCJ1aW50OCIpO2lmKHQucG9zaXRpb258fHQudGV4dHx8dC5jb2xvcnx8dC5iYXNlbGluZXx8dC5hbGlnbnx8dC5mb250fHx0Lm9mZnNldHx8dC5vcGFjaXR5KWlmKHRoaXMuY29sb3IubGVuZ3RoPjR8fHRoaXMuYmFzZWxpbmVPZmZzZXQubGVuZ3RoPjF8fHRoaXMuYWxpZ24mJnRoaXMuYWxpZ24ubGVuZ3RoPjF8fHRoaXMuZm9udEF0bGFzLmxlbmd0aD4xfHx0aGlzLnBvc2l0aW9uT2Zmc2V0Lmxlbmd0aD4yKXt2YXIgWj1NYXRoLm1heCguNSp0aGlzLnBvc2l0aW9uLmxlbmd0aHx8MCwuMjUqdGhpcy5jb2xvci5sZW5ndGh8fDAsdGhpcy5iYXNlbGluZU9mZnNldC5sZW5ndGh8fDAsdGhpcy5hbGlnbk9mZnNldC5sZW5ndGh8fDAsdGhpcy5mb250Lmxlbmd0aHx8MCx0aGlzLm9wYWNpdHkubGVuZ3RofHwwLC41KnRoaXMucG9zaXRpb25PZmZzZXQubGVuZ3RofHwwKTt0aGlzLmJhdGNoPUFycmF5KFopO2Zvcih2YXIgJD0wOyQ8dGhpcy5iYXRjaC5sZW5ndGg7JCsrKWUuYmF0Y2hbJF09e2NvdW50OmUuY291bnRzLmxlbmd0aD4xP2UuY291bnRzWyRdOmUuY291bnRzWzBdLG9mZnNldDplLnRleHRPZmZzZXRzLmxlbmd0aD4xP2UudGV4dE9mZnNldHNbJF06ZS50ZXh0T2Zmc2V0c1swXSxjb2xvcjplLmNvbG9yP2UuY29sb3IubGVuZ3RoPD00P2UuY29sb3I6ZS5jb2xvci5zdWJhcnJheSg0KiQsNCokKzQpOlswLDAsMCwyNTVdLG9wYWNpdHk6QXJyYXkuaXNBcnJheShlLm9wYWNpdHkpP2Uub3BhY2l0eVskXTplLm9wYWNpdHksYmFzZWxpbmU6bnVsbCE9ZS5iYXNlbGluZU9mZnNldFskXT9lLmJhc2VsaW5lT2Zmc2V0WyRdOmUuYmFzZWxpbmVPZmZzZXRbMF0sYWxpZ246ZS5hbGlnbj9udWxsIT1lLmFsaWduT2Zmc2V0WyRdP2UuYWxpZ25PZmZzZXRbJF06ZS5hbGlnbk9mZnNldFswXTowLGF0bGFzOmUuZm9udEF0bGFzWyRdfHxlLmZvbnRBdGxhc1swXSxwb3NpdGlvbk9mZnNldDplLnBvc2l0aW9uT2Zmc2V0Lmxlbmd0aD4yP2UucG9zaXRpb25PZmZzZXQuc3ViYXJyYXkoMiokLDIqJCsyKTplLnBvc2l0aW9uT2Zmc2V0fX1lbHNlIHRoaXMuY291bnQ/dGhpcy5iYXRjaD1be2NvdW50OnRoaXMuY291bnQsb2Zmc2V0OjAsY29sb3I6dGhpcy5jb2xvcnx8WzAsMCwwLDI1NV0sb3BhY2l0eTpBcnJheS5pc0FycmF5KHRoaXMub3BhY2l0eSk/dGhpcy5vcGFjaXR5WzBdOnRoaXMub3BhY2l0eSxiYXNlbGluZTp0aGlzLmJhc2VsaW5lT2Zmc2V0WzBdLGFsaWduOnRoaXMuYWxpZ25PZmZzZXQ/dGhpcy5hbGlnbk9mZnNldFswXTowLGF0bGFzOnRoaXMuZm9udEF0bGFzWzBdLHBvc2l0aW9uT2Zmc2V0OnRoaXMucG9zaXRpb25PZmZzZXR9XTp0aGlzLmJhdGNoPVtdfSx3LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7fSx3LnByb3RvdHlwZS5rZXJuaW5nPSEwLHcucHJvdG90eXBlLnBvc2l0aW9uPXtjb25zdGFudDpuZXcgRmxvYXQzMkFycmF5KDIpfSx3LnByb3RvdHlwZS50cmFuc2xhdGU9bnVsbCx3LnByb3RvdHlwZS5zY2FsZT1udWxsLHcucHJvdG90eXBlLmZvbnQ9bnVsbCx3LnByb3RvdHlwZS50ZXh0PSIiLHcucHJvdG90eXBlLnBvc2l0aW9uT2Zmc2V0PVswLDBdLHcucHJvdG90eXBlLm9wYWNpdHk9MSx3LnByb3RvdHlwZS5jb2xvcj1uZXcgVWludDhBcnJheShbMCwwLDAsMjU1XSksdy5wcm90b3R5cGUuYWxpZ25PZmZzZXQ9WzAsMF0sdy5ub3JtYWxWaWV3cG9ydD0hMSx3Lm1heEF0bGFzU2l6ZT0xMDI0LHcuYXRsYXNDYW52YXM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksdy5hdGxhc0NvbnRleHQ9dy5hdGxhc0NhbnZhcy5nZXRDb250ZXh0KCIyZCIse2FscGhhOiExfSksdy5iYXNlRm9udFNpemU9NjQsdy5mb250cz17fSxlLmV4cG9ydHM9d30seyJjb2xvci1ub3JtYWxpemUiOjQ1LCJjc3MtZm9udCI6MTI2LCJkZXRlY3Qta2VybmluZyI6MTUwLCJlczYtd2Vhay1tYXAiOjIwOCwiZmxhdHRlbi12ZXJ0ZXgtZGF0YSI6NDgsImZvbnQtYXRsYXMiOjIxNywiZm9udC1tZWFzdXJlIjoyMTgsImdsLXV0aWwvY29udGV4dCI6MzA0LCJpcy1wbGFpbi1vYmoiOjM5MCwib2JqZWN0LWFzc2lnbiI6NDIxLCJwYXJzZS1yZWN0Ijo0MjYsInBhcnNlLXVuaXQiOjQyOCwicGljay1ieS1hbGlhcyI6NDMyLHJlZ2w6NDYzLCJ0by1weCI6NTAxLCJ0eXBlZGFycmF5LXBvb2wiOjUwN31dLDQ1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImNvbG9yLXJnYmEiKSxpPXQoImNsYW1wIiksYT10KCJkdHlwZSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpeyJmbG9hdCIhPT1lJiZlfHwoZT0iYXJyYXkiKSwidWludCI9PT1lJiYoZT0idWludDgiKSwidWludF9jbGFtcGVkIj09PWUmJihlPSJ1aW50OF9jbGFtcGVkIik7dmFyIHI9YShlKSxvPW5ldyByKDQpO2lmKHQgaW5zdGFuY2VvZiByKXJldHVybiBBcnJheS5pc0FycmF5KHQpP3Quc2xpY2UoKTooby5zZXQodCksbyk7dmFyIHM9InVpbnQ4IiE9PWUmJiJ1aW50OF9jbGFtcGVkIiE9PWU7cmV0dXJuIHQgaW5zdGFuY2VvZiBVaW50OEFycmF5fHx0IGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXk/KG9bMF09dFswXSxvWzFdPXRbMV0sb1syXT10WzJdLG9bM109bnVsbCE9dFszXT90WzNdOjI1NSxzJiYob1swXS89MjU1LG9bMV0vPTI1NSxvWzJdLz0yNTUsb1szXS89MjU1KSxvKToodC5sZW5ndGgmJiJzdHJpbmciIT10eXBlb2YgdHx8KCh0PW4odCkpWzBdLz0yNTUsdFsxXS89MjU1LHRbMl0vPTI1NSkscz8ob1swXT10WzBdLG9bMV09dFsxXSxvWzJdPXRbMl0sb1szXT1udWxsIT10WzNdP3RbM106MSk6KG9bMF09aShNYXRoLnJvdW5kKDI1NSp0WzBdKSwwLDI1NSksb1sxXT1pKE1hdGgucm91bmQoMjU1KnRbMV0pLDAsMjU1KSxvWzJdPWkoTWF0aC5yb3VuZCgyNTUqdFsyXSksMCwyNTUpLG9bM109bnVsbD09dFszXT8yNTU6aShNYXRoLmZsb29yKDI1NSp0WzNdKSwwLDI1NSkpLG8pfX0se2NsYW1wOjEwMiwiY29sb3ItcmdiYSI6NDcsZHR5cGU6MTUzfV0sNDY6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24ocil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImNvbG9yLW5hbWUiKSxpPXQoImlzLXBsYWluLW9iaiIpLGE9dCgiZGVmaW5lZCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZSxzLGw9W10sYz0xO2lmKCJzdHJpbmciPT10eXBlb2YgdClpZihuW3RdKWw9blt0XS5zbGljZSgpLHM9InJnYiI7ZWxzZSBpZigidHJhbnNwYXJlbnQiPT09dCljPTAscz0icmdiIixsPVswLDAsMF07ZWxzZSBpZigvXiNbQS1GYS1mMC05XSskLy50ZXN0KHQpKXt2YXIgdT10LnNsaWNlKDEpLGg9dS5sZW5ndGgsZj1oPD00O2M9MSxmPyhsPVtwYXJzZUludCh1WzBdK3VbMF0sMTYpLHBhcnNlSW50KHVbMV0rdVsxXSwxNikscGFyc2VJbnQodVsyXSt1WzJdLDE2KV0sND09PWgmJihjPXBhcnNlSW50KHVbM10rdVszXSwxNikvMjU1KSk6KGw9W3BhcnNlSW50KHVbMF0rdVsxXSwxNikscGFyc2VJbnQodVsyXSt1WzNdLDE2KSxwYXJzZUludCh1WzRdK3VbNV0sMTYpXSw4PT09aCYmKGM9cGFyc2VJbnQodVs2XSt1WzddLDE2KS8yNTUpKSxsWzBdfHwobFswXT0wKSxsWzFdfHwobFsxXT0wKSxsWzJdfHwobFsyXT0wKSxzPSJyZ2IifWVsc2UgaWYoZT0vXigoPzpyZ2J8aHNbbHZiXXxod2J8Y215az98eHlbenldfGdyYXl8bGFifGxjaHU/dj98W2x5XXV2fGxtcylhPylccypcKChbXlwpXSopXCkvLmV4ZWModCkpe3ZhciBwPWVbMV0sdT1wLnJlcGxhY2UoL2EkLywiIik7cz11O3ZhciBoPSJjbXlrIj09PXU/NDoiZ3JheSI9PT11PzE6MztsPWVbMl0udHJpbSgpLnNwbGl0KC9ccyosXHMqLykubWFwKGZ1bmN0aW9uKHQsZSl7aWYoLyUkLy50ZXN0KHQpKXJldHVybiBlPT09aD9wYXJzZUZsb2F0KHQpLzEwMDoicmdiIj09PXU/MjU1KnBhcnNlRmxvYXQodCkvMTAwOnBhcnNlRmxvYXQodCk7aWYoImgiPT09dVtlXSl7aWYoL2RlZyQvLnRlc3QodCkpcmV0dXJuIHBhcnNlRmxvYXQodCk7aWYodm9pZCAwIT09b1t0XSlyZXR1cm4gb1t0XX1yZXR1cm4gcGFyc2VGbG9hdCh0KX0pLHA9PT11JiZsLnB1c2goMSksYz12b2lkIDA9PT1sW2hdPzE6bFtoXSxsPWwuc2xpY2UoMCxoKX1lbHNlIHQubGVuZ3RoPjEwJiYvWzAtOV0oPzpcc3xcLykvLnRlc3QodCkmJihsPXQubWF0Y2goLyhbMC05XSspL2cpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gcGFyc2VGbG9hdCh0KX0pLHM9dC5tYXRjaCgvKFthLXpdKS9pZykuam9pbigiIikudG9Mb3dlckNhc2UoKSk7ZWxzZSBpZihpc05hTih0KSlpZihpKHQpKXt2YXIgZD1hKHQucix0LnJlZCx0LlIsbnVsbCk7bnVsbCE9PWQ/KHM9InJnYiIsbD1bZCxhKHQuZyx0LmdyZWVuLHQuRyksYSh0LmIsdC5ibHVlLHQuQildKToocz0iaHNsIixsPVthKHQuaCx0Lmh1ZSx0LkgpLGEodC5zLHQuc2F0dXJhdGlvbix0LlMpLGEodC5sLHQubGlnaHRuZXNzLHQuTCx0LmIsdC5icmlnaHRuZXNzKV0pLGM9YSh0LmEsdC5hbHBoYSx0Lm9wYWNpdHksMSksbnVsbCE9dC5vcGFjaXR5JiYoYy89MTAwKX1lbHNlKEFycmF5LmlzQXJyYXkodCl8fHIuQXJyYXlCdWZmZXImJkFycmF5QnVmZmVyLmlzVmlldyYmQXJyYXlCdWZmZXIuaXNWaWV3KHQpKSYmKGw9W3RbMF0sdFsxXSx0WzJdXSxzPSJyZ2IiLGM9ND09PXQubGVuZ3RoP3RbM106MSk7ZWxzZSBzPSJyZ2IiLGw9W3Q+Pj4xNiwoNjUyODAmdCk+Pj44LDI1NSZ0XTtyZXR1cm57c3BhY2U6cyx2YWx1ZXM6bCxhbHBoYTpjfX07dmFyIG89e3JlZDowLG9yYW5nZTo2MCx5ZWxsb3c6MTIwLGdyZWVuOjE4MCxibHVlOjI0MCxwdXJwbGU6MzAwfX0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0seyJjb2xvci1uYW1lIjoxMDYsZGVmaW5lZDoxNDgsImlzLXBsYWluLW9iaiI6MzkwfV0sNDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiY29sb3ItcGFyc2UiKSxpPXQoImNvbG9yLXNwYWNlL2hzbCIpLGE9dCgiY2xhbXAiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGUscj1uKHQpO3JldHVybiByLnNwYWNlPygoZT1BcnJheSgzKSlbMF09YShyLnZhbHVlc1swXSwwLDI1NSksZVsxXT1hKHIudmFsdWVzWzFdLDAsMjU1KSxlWzJdPWEoci52YWx1ZXNbMl0sMCwyNTUpLCJoIj09PXIuc3BhY2VbMF0mJihlPWkucmdiKGUpKSxlLnB1c2goYShyLmFscGhhLDAsMSkpLGUpOltdfX0se2NsYW1wOjEwMiwiY29sb3ItcGFyc2UiOjQ2LCJjb2xvci1zcGFjZS9oc2wiOjExMH1dLDQ4OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiZHR5cGUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2lmKCF0KXRocm93IG5ldyBUeXBlRXJyb3IoIm11c3Qgc3BlY2lmeSBkYXRhIGFzIGZpcnN0IHBhcmFtZXRlciIpO2lmKHI9MHwrKHJ8fDApLEFycmF5LmlzQXJyYXkodCkmJnRbMF0mJiJudW1iZXIiPT10eXBlb2YgdFswXVswXSl7dmFyIGksYSxvLHMsbD10WzBdLmxlbmd0aCxjPXQubGVuZ3RoKmw7ZSYmInN0cmluZyIhPXR5cGVvZiBlfHwoZT1uZXcobihlfHwiZmxvYXQzMiIpKShjK3IpKTt2YXIgdT1lLmxlbmd0aC1yO2lmKGMhPT11KXRocm93IG5ldyBFcnJvcigic291cmNlIGxlbmd0aCAiK2MrIiAoIitsKyJ4Iit0Lmxlbmd0aCsiKSBkb2VzIG5vdCBtYXRjaCBkZXN0aW5hdGlvbiBsZW5ndGggIit1KTtmb3IoaT0wLG89cjtpPHQubGVuZ3RoO2krKylmb3IoYT0wO2E8bDthKyspZVtvKytdPW51bGw9PT10W2ldW2FdP05hTjp0W2ldW2FdfWVsc2UgaWYoZSYmInN0cmluZyIhPXR5cGVvZiBlKWUuc2V0KHQscik7ZWxzZXt2YXIgaD1uKGV8fCJmbG9hdDMyIik7aWYoQXJyYXkuaXNBcnJheSh0KXx8ImFycmF5Ij09PWUpZm9yKGU9bmV3IGgodC5sZW5ndGgrciksaT0wLG89cixzPWUubGVuZ3RoO288cztvKyssaSsrKWVbb109bnVsbD09PXRbaV0/TmFOOnRbaV07ZWxzZSAwPT09cj9lPW5ldyBoKHQpOihlPW5ldyBoKHQubGVuZ3RoK3IpKS5zZXQodCxyKX1yZXR1cm4gZX19LHtkdHlwZToxNTN9XSw0OTpbZnVuY3Rpb24odCxlLHIpe3ZhciBuLGk7bj10aGlzLGk9ZnVuY3Rpb24odCxlLHIsbil7InVzZSBzdHJpY3QiO3Quc2Fua2V5PWZ1bmN0aW9uKCl7dmFyIHQ9e30saT0yNCxhPTgsbz1bMSwxXSxzPVtdLGw9W107ZnVuY3Rpb24gYygpe2Z1bmN0aW9uIHQodCxlKXtyZXR1cm4gdC5zb3VyY2UueS1lLnNvdXJjZS55fHx0Lm9yaWdpbmFsSW5kZXgtZS5vcmlnaW5hbEluZGV4fWZ1bmN0aW9uIGUodCxlKXtyZXR1cm4gdC50YXJnZXQueS1lLnRhcmdldC55fHx0Lm9yaWdpbmFsSW5kZXgtZS5vcmlnaW5hbEluZGV4fXMuZm9yRWFjaChmdW5jdGlvbihyKXtyLnNvdXJjZUxpbmtzLnNvcnQoZSksci50YXJnZXRMaW5rcy5zb3J0KHQpfSkscy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPTAscj0wO3Quc291cmNlTGlua3MuZm9yRWFjaChmdW5jdGlvbih0KXt0LnN5PWUsZSs9dC5keX0pLHQudGFyZ2V0TGlua3MuZm9yRWFjaChmdW5jdGlvbih0KXt0LnR5PXIscis9dC5keX0pfSl9ZnVuY3Rpb24gdSh0KXtyZXR1cm4gdC55K3QuZHkvMn1mdW5jdGlvbiBoKHQpe3JldHVybiB0LnZhbHVlfXJldHVybiB0Lm5vZGVXaWR0aD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0rZSx0KTppfSx0Lm5vZGVQYWRkaW5nPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPStlLHQpOmF9LHQubm9kZXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ZSx0KTpzfSx0LmxpbmtzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPWUsdCk6bH0sdC5zaXplPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPWUsdCk6b30sdC5sYXlvdXQ9ZnVuY3Rpb24obil7cmV0dXJuIHMuZm9yRWFjaChmdW5jdGlvbih0KXt0LnNvdXJjZUxpbmtzPVtdLHQudGFyZ2V0TGlua3M9W119KSxsLmZvckVhY2goZnVuY3Rpb24odCxlKXt2YXIgcj10LnNvdXJjZSxuPXQudGFyZ2V0OyJudW1iZXIiPT10eXBlb2YgciYmKHI9dC5zb3VyY2U9c1t0LnNvdXJjZV0pLCJudW1iZXIiPT10eXBlb2YgbiYmKG49dC50YXJnZXQ9c1t0LnRhcmdldF0pLHQub3JpZ2luYWxJbmRleD1lLHIuc291cmNlTGlua3MucHVzaCh0KSxuLnRhcmdldExpbmtzLnB1c2godCl9KSxzLmZvckVhY2goZnVuY3Rpb24odCl7dC52YWx1ZT1NYXRoLm1heChlLnN1bSh0LnNvdXJjZUxpbmtzLGgpLGUuc3VtKHQudGFyZ2V0TGlua3MsaCkpfSksZnVuY3Rpb24oKXtmb3IodmFyIHQsZSxyPXMsbj0wO3IubGVuZ3RoOyl0PVtdLHIuZm9yRWFjaChmdW5jdGlvbihlKXtlLng9bixlLmR4PWksZS5zb3VyY2VMaW5rcy5mb3JFYWNoKGZ1bmN0aW9uKGUpe3QuaW5kZXhPZihlLnRhcmdldCk8MCYmdC5wdXNoKGUudGFyZ2V0KX0pfSkscj10LCsrbjsoZnVuY3Rpb24odCl7cy5mb3JFYWNoKGZ1bmN0aW9uKGUpe2Uuc291cmNlTGlua3MubGVuZ3RofHwoZS54PXQtMSl9KX0pKG4pLGU9KG9bMF0taSkvKG4tMSkscy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QueCo9ZX0pfSgpLGZ1bmN0aW9uKHQpe3ZhciBuLGk9ci5uZXN0KCkua2V5KGZ1bmN0aW9uKHQpe3JldHVybiB0Lnh9KS5zb3J0S2V5cyhlLmFzY2VuZGluZykuZW50cmllcyhzKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQudmFsdWVzfSk7bj1lLm1pbihpLGZ1bmN0aW9uKHQpe3JldHVybihvWzFdLSh0Lmxlbmd0aC0xKSphKS9lLnN1bSh0LGgpfSksaS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuZm9yRWFjaChmdW5jdGlvbih0LGUpe3QueT1lLHQuZHk9dC52YWx1ZSpufSl9KSxsLmZvckVhY2goZnVuY3Rpb24odCl7dC5keT10LnZhbHVlKm59KSxkKCk7Zm9yKHZhciBjPTE7dD4wOy0tdClwKGMqPS45OSksZCgpLGYoYyksZCgpO2Z1bmN0aW9uIGYodCl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gdSh0LnNvdXJjZSkqdC52YWx1ZX1pLmZvckVhY2goZnVuY3Rpb24obil7bi5mb3JFYWNoKGZ1bmN0aW9uKG4pe2lmKG4udGFyZ2V0TGlua3MubGVuZ3RoKXt2YXIgaT1lLnN1bShuLnRhcmdldExpbmtzLHIpL2Uuc3VtKG4udGFyZ2V0TGlua3MsaCk7bi55Kz0oaS11KG4pKSp0fX0pfSl9ZnVuY3Rpb24gcCh0KXtmdW5jdGlvbiByKHQpe3JldHVybiB1KHQudGFyZ2V0KSp0LnZhbHVlfWkuc2xpY2UoKS5yZXZlcnNlKCkuZm9yRWFjaChmdW5jdGlvbihuKXtuLmZvckVhY2goZnVuY3Rpb24obil7aWYobi5zb3VyY2VMaW5rcy5sZW5ndGgpe3ZhciBpPWUuc3VtKG4uc291cmNlTGlua3MscikvZS5zdW0obi5zb3VyY2VMaW5rcyxoKTtuLnkrPShpLXUobikpKnR9fSl9KX1mdW5jdGlvbiBkKCl7aS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpPTAscz10Lmxlbmd0aDtmb3IodC5zb3J0KGcpLG49MDtuPHM7KytuKWU9dFtuXSwocj1pLWUueSk+MCYmKGUueSs9ciksaT1lLnkrZS5keSthO2lmKChyPWktYS1vWzFdKT4wKWZvcihpPWUueS09cixuPXMtMjtuPj0wOy0tbillPXRbbl0sKHI9ZS55K2UuZHkrYS1pKT4wJiYoZS55LT1yKSxpPWUueX0pfWZ1bmN0aW9uIGcodCxlKXtyZXR1cm4gdC55LWUueX19KG4pLGMoKSx0fSx0LnJlbGF5b3V0PWZ1bmN0aW9uKCl7cmV0dXJuIGMoKSx0fSx0Lmxpbms9ZnVuY3Rpb24oKXt2YXIgdD0uNTtmdW5jdGlvbiBlKGUpe3ZhciByPWUuc291cmNlLngrZS5zb3VyY2UuZHgsaT1lLnRhcmdldC54LGE9bi5pbnRlcnBvbGF0ZU51bWJlcihyLGkpLG89YSh0KSxzPWEoMS10KSxsPWUuc291cmNlLnkrZS5zeSxjPWwrZS5keSx1PWUudGFyZ2V0LnkrZS50eSxoPXUrZS5keTtyZXR1cm4iTSIrcisiLCIrbCsiQyIrbysiLCIrbCsiICIrcysiLCIrdSsiICIraSsiLCIrdSsiTCIraSsiLCIraCsiQyIrcysiLCIraCsiICIrbysiLCIrYysiICIrcisiLCIrYysiWiJ9cmV0dXJuIGUuY3VydmF0dXJlPWZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStyLGUpOnR9LGV9LHR9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sIm9iamVjdCI9PXR5cGVvZiByJiYidW5kZWZpbmVkIiE9dHlwZW9mIGU/aShyLHQoImQzLWFycmF5IiksdCgiZDMtY29sbGVjdGlvbiIpLHQoImQzLWludGVycG9sYXRlIikpOmkobi5kMz1uLmQzfHx7fSxuLmQzLG4uZDMsbi5kMyl9LHsiZDMtYXJyYXkiOjEzOSwiZDMtY29sbGVjdGlvbiI6MTQwLCJkMy1pbnRlcnBvbGF0ZSI6MTQ0fV0sNTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49InVuZGVmaW5lZCI9PXR5cGVvZiBXZWFrTWFwP3QoIndlYWstbWFwIik6V2Vha01hcCxpPXQoImdsLWJ1ZmZlciIpLGE9dCgiZ2wtdmFvIiksbz1uZXcgbjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9by5nZXQodCkscj1lJiYoZS5fdHJpYW5nbGVCdWZmZXIuaGFuZGxlfHxlLl90cmlhbmdsZUJ1ZmZlci5idWZmZXIpO2lmKCFyfHwhdC5pc0J1ZmZlcihyKSl7dmFyIG49aSh0LG5ldyBGbG9hdDMyQXJyYXkoWy0xLC0xLC0xLDQsNCwtMV0pKTsoZT1hKHQsW3tidWZmZXI6bix0eXBlOnQuRkxPQVQsc2l6ZToyfV0pKS5fdHJpYW5nbGVCdWZmZXI9bixvLnNldCh0LGUpfWUuYmluZCgpLHQuZHJhd0FycmF5cyh0LlRSSUFOR0xFUywwLDMpLGUudW5iaW5kKCl9fSx7ImdsLWJ1ZmZlciI6MjMwLCJnbC12YW8iOjMwOCwid2Vhay1tYXAiOjUxN31dLDUxOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPTAscj0wLG49MCxpPTA7cmV0dXJuIHQubWFwKGZ1bmN0aW9uKHQpe3ZhciBhPSh0PXQuc2xpY2UoKSlbMF0sbz1hLnRvVXBwZXJDYXNlKCk7aWYoYSE9bylzd2l0Y2godFswXT1vLGEpe2Nhc2UiYSI6dFs2XSs9bix0WzddKz1pO2JyZWFrO2Nhc2UidiI6dFsxXSs9aTticmVhaztjYXNlImgiOnRbMV0rPW47YnJlYWs7ZGVmYXVsdDpmb3IodmFyIHM9MTtzPHQubGVuZ3RoOyl0W3MrK10rPW4sdFtzKytdKz1pfXN3aXRjaChvKXtjYXNlIloiOm49ZSxpPXI7YnJlYWs7Y2FzZSJIIjpuPXRbMV07YnJlYWs7Y2FzZSJWIjppPXRbMV07YnJlYWs7Y2FzZSJNIjpuPWU9dFsxXSxpPXI9dFsyXTticmVhaztkZWZhdWx0Om49dFt0Lmxlbmd0aC0yXSxpPXRbdC5sZW5ndGgtMV19cmV0dXJuIHR9KX19LHt9XSw1MjpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoInBhZC1sZWZ0Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtlPSJudW1iZXIiPT10eXBlb2YgZT9lOjEscj1yfHwiOiAiO3ZhciBpPXQuc3BsaXQoL1xyP1xuLyksYT1TdHJpbmcoaS5sZW5ndGgrZS0xKS5sZW5ndGg7cmV0dXJuIGkubWFwKGZ1bmN0aW9uKHQsaSl7dmFyIG89aStlLHM9U3RyaW5nKG8pLmxlbmd0aCxsPW4obyxhLXMpO3JldHVybiBsK3IrdH0pLmpvaW4oIlxuIil9fSx7InBhZC1sZWZ0Ijo0MjR9XSw1MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGg7aWYoMD09PWUpcmV0dXJuW107aWYoMT09PWUpcmV0dXJuWzBdO2Zvcih2YXIgcj10WzBdLmxlbmd0aCxuPVt0WzBdXSxhPVswXSxvPTE7bzxlOysrbylpZihuLnB1c2godFtvXSksaShuLHIpKXtpZihhLnB1c2gobyksYS5sZW5ndGg9PT1yKzEpcmV0dXJuIGF9ZWxzZSBuLnBvcCgpO3JldHVybiBhfTt2YXIgbj10KCJyb2J1c3Qtb3JpZW50YXRpb24iKTtmdW5jdGlvbiBpKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheShlKzEpLGk9MDtpPHQubGVuZ3RoOysraSlyW2ldPXRbaV07Zm9yKGk9MDtpPD10Lmxlbmd0aDsrK2kpe2Zvcih2YXIgYT10Lmxlbmd0aDthPD1lOysrYSl7Zm9yKHZhciBvPW5ldyBBcnJheShlKSxzPTA7czxlOysrcylvW3NdPU1hdGgucG93KGErMS1pLHMpO3JbYV09b31pZihuLmFwcGx5KHZvaWQgMCxyKSlyZXR1cm4hMH1yZXR1cm4hMX19LHsicm9idXN0LW9yaWVudGF0aW9uIjo0NzF9XSw1NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbihlKS5maWx0ZXIoZnVuY3Rpb24ocil7Zm9yKHZhciBuPW5ldyBBcnJheShyLmxlbmd0aCksYT0wO2E8ci5sZW5ndGg7KythKW5bYV09ZVtyW2FdXTtyZXR1cm4gaShuKSp0PDF9KX07dmFyIG49dCgiZGVsYXVuYXktdHJpYW5ndWxhdGUiKSxpPXQoImNpcmN1bXJhZGl1cyIpfSx7Y2lyY3VtcmFkaXVzOjEwMSwiZGVsYXVuYXktdHJpYW5ndWxhdGUiOjE0OX1dLDU1OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGkobih0LGUpKX07dmFyIG49dCgiYWxwaGEtY29tcGxleCIpLGk9dCgic2ltcGxpY2lhbC1jb21wbGV4LWJvdW5kYXJ5Iil9LHsiYWxwaGEtY29tcGxleCI6NTQsInNpbXBsaWNpYWwtY29tcGxleC1ib3VuZGFyeSI6NDc4fV0sNTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoIXR8fG51bGw9PXQubGVuZ3RoKXRocm93IEVycm9yKCJBcmd1bWVudCBzaG91bGQgYmUgYW4gYXJyYXkiKTtlPW51bGw9PWU/MTpNYXRoLmZsb29yKGUpO2Zvcih2YXIgcj1BcnJheSgyKmUpLG49MDtuPGU7bisrKXtmb3IodmFyIGk9LTEvMCxhPTEvMCxvPW4scz10Lmxlbmd0aDtvPHM7bys9ZSl0W29dPmkmJihpPXRbb10pLHRbb108YSYmKGE9dFtvXSk7cltuXT1hLHJbZStuXT1pfXJldHVybiByfX0se31dLDU3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImFycmF5LWJvdW5kcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7aWYoIXR8fG51bGw9PXQubGVuZ3RoKXRocm93IEVycm9yKCJBcmd1bWVudCBzaG91bGQgYmUgYW4gYXJyYXkiKTtudWxsPT1lJiYoZT0xKTtudWxsPT1yJiYocj1uKHQsZSkpO2Zvcih2YXIgaT0wO2k8ZTtpKyspe3ZhciBhPXJbZStpXSxvPXJbaV0scz1pLGw9dC5sZW5ndGg7aWYoYT09PTEvMCYmbz09PS0xLzApZm9yKHM9aTtzPGw7cys9ZSl0W3NdPXRbc109PT1hPzE6dFtzXT09PW8/MDouNTtlbHNlIGlmKGE9PT0xLzApZm9yKHM9aTtzPGw7cys9ZSl0W3NdPXRbc109PT1hPzE6MDtlbHNlIGlmKG89PT0tMS8wKWZvcihzPWk7czxsO3MrPWUpdFtzXT10W3NdPT09bz8wOjE7ZWxzZXt2YXIgYz1hLW87Zm9yKHM9aTtzPGw7cys9ZSl0W3NdPTA9PT1jPy41Oih0W3NdLW8pL2N9fXJldHVybiB0fX0seyJhcnJheS1ib3VuZHMiOjU2fV0sNTg6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj0ibnVtYmVyIj09dHlwZW9mIHQsbj0ibnVtYmVyIj09dHlwZW9mIGU7ciYmIW4/KGU9dCx0PTApOnJ8fG58fCh0PTAsZT0wKTt2YXIgaT0oZXw9MCktKHR8PTApO2lmKGk8MCl0aHJvdyBuZXcgRXJyb3IoImFycmF5IGxlbmd0aCBtdXN0IGJlIHBvc2l0aXZlIik7Zm9yKHZhciBhPW5ldyBBcnJheShpKSxvPTAscz10O288aTtvKysscysrKWFbb109cztyZXR1cm4gYX19LHt9XSw1OTpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe2lmKHQ9PT1lKXJldHVybiAwO2Zvcih2YXIgcj10Lmxlbmd0aCxuPWUubGVuZ3RoLGk9MCxhPU1hdGgubWluKHIsbik7aTxhOysraSlpZih0W2ldIT09ZVtpXSl7cj10W2ldLG49ZVtpXTticmVha31yZXR1cm4gcjxuPy0xOm48cj8xOjB9ZnVuY3Rpb24gaSh0KXtyZXR1cm4gci5CdWZmZXImJiJmdW5jdGlvbiI9PXR5cGVvZiByLkJ1ZmZlci5pc0J1ZmZlcj9yLkJ1ZmZlci5pc0J1ZmZlcih0KTohKG51bGw9PXR8fCF0Ll9pc0J1ZmZlcil9dmFyIGE9dCgidXRpbC8iKSxvPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkscz1BcnJheS5wcm90b3R5cGUuc2xpY2UsbD0iZm9vIj09PWZ1bmN0aW9uKCl7fS5uYW1lO2Z1bmN0aW9uIGModCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX1mdW5jdGlvbiB1KHQpe3JldHVybiFpKHQpJiYoImZ1bmN0aW9uIj09dHlwZW9mIHIuQXJyYXlCdWZmZXImJigiZnVuY3Rpb24iPT10eXBlb2YgQXJyYXlCdWZmZXIuaXNWaWV3P0FycmF5QnVmZmVyLmlzVmlldyh0KTohIXQmJih0IGluc3RhbmNlb2YgRGF0YVZpZXd8fCEhKHQuYnVmZmVyJiZ0LmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSkpKX12YXIgaD1lLmV4cG9ydHM9dixmPS9ccypmdW5jdGlvblxzKyhbXlwoXHNdKilccyovO2Z1bmN0aW9uIHAodCl7aWYoYS5pc0Z1bmN0aW9uKHQpKXtpZihsKXJldHVybiB0Lm5hbWU7dmFyIGU9dC50b1N0cmluZygpLm1hdGNoKGYpO3JldHVybiBlJiZlWzFdfX1mdW5jdGlvbiBkKHQsZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P3QubGVuZ3RoPGU/dDp0LnNsaWNlKDAsZSk6dH1mdW5jdGlvbiBnKHQpe2lmKGx8fCFhLmlzRnVuY3Rpb24odCkpcmV0dXJuIGEuaW5zcGVjdCh0KTt2YXIgZT1wKHQpO3JldHVybiJbRnVuY3Rpb24iKyhlPyI6ICIrZToiIikrIl0ifWZ1bmN0aW9uIG0odCxlLHIsbixpKXt0aHJvdyBuZXcgaC5Bc3NlcnRpb25FcnJvcih7bWVzc2FnZTpyLGFjdHVhbDp0LGV4cGVjdGVkOmUsb3BlcmF0b3I6bixzdGFja1N0YXJ0RnVuY3Rpb246aX0pfWZ1bmN0aW9uIHYodCxlKXt0fHxtKHQsITAsZSwiPT0iLGgub2spfWZ1bmN0aW9uIHkodCxlLHIsbyl7aWYodD09PWUpcmV0dXJuITA7aWYoaSh0KSYmaShlKSlyZXR1cm4gMD09PW4odCxlKTtpZihhLmlzRGF0ZSh0KSYmYS5pc0RhdGUoZSkpcmV0dXJuIHQuZ2V0VGltZSgpPT09ZS5nZXRUaW1lKCk7aWYoYS5pc1JlZ0V4cCh0KSYmYS5pc1JlZ0V4cChlKSlyZXR1cm4gdC5zb3VyY2U9PT1lLnNvdXJjZSYmdC5nbG9iYWw9PT1lLmdsb2JhbCYmdC5tdWx0aWxpbmU9PT1lLm11bHRpbGluZSYmdC5sYXN0SW5kZXg9PT1lLmxhc3RJbmRleCYmdC5pZ25vcmVDYXNlPT09ZS5pZ25vcmVDYXNlO2lmKG51bGwhPT10JiYib2JqZWN0Ij09dHlwZW9mIHR8fG51bGwhPT1lJiYib2JqZWN0Ij09dHlwZW9mIGUpe2lmKHUodCkmJnUoZSkmJmModCk9PT1jKGUpJiYhKHQgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXl8fHQgaW5zdGFuY2VvZiBGbG9hdDY0QXJyYXkpKXJldHVybiAwPT09bihuZXcgVWludDhBcnJheSh0LmJ1ZmZlciksbmV3IFVpbnQ4QXJyYXkoZS5idWZmZXIpKTtpZihpKHQpIT09aShlKSlyZXR1cm4hMTt2YXIgbD0obz1vfHx7YWN0dWFsOltdLGV4cGVjdGVkOltdfSkuYWN0dWFsLmluZGV4T2YodCk7cmV0dXJuLTEhPT1sJiZsPT09by5leHBlY3RlZC5pbmRleE9mKGUpfHwoby5hY3R1YWwucHVzaCh0KSxvLmV4cGVjdGVkLnB1c2goZSksZnVuY3Rpb24odCxlLHIsbil7aWYobnVsbD09dHx8bnVsbD09ZSlyZXR1cm4hMTtpZihhLmlzUHJpbWl0aXZlKHQpfHxhLmlzUHJpbWl0aXZlKGUpKXJldHVybiB0PT09ZTtpZihyJiZPYmplY3QuZ2V0UHJvdG90eXBlT2YodCkhPT1PYmplY3QuZ2V0UHJvdG90eXBlT2YoZSkpcmV0dXJuITE7dmFyIGk9eCh0KSxvPXgoZSk7aWYoaSYmIW98fCFpJiZvKXJldHVybiExO2lmKGkpcmV0dXJuIHQ9cy5jYWxsKHQpLGU9cy5jYWxsKGUpLHkodCxlLHIpO3ZhciBsLGMsdT13KHQpLGg9dyhlKTtpZih1Lmxlbmd0aCE9PWgubGVuZ3RoKXJldHVybiExO2Zvcih1LnNvcnQoKSxoLnNvcnQoKSxjPXUubGVuZ3RoLTE7Yz49MDtjLS0paWYodVtjXSE9PWhbY10pcmV0dXJuITE7Zm9yKGM9dS5sZW5ndGgtMTtjPj0wO2MtLSlpZihsPXVbY10sIXkodFtsXSxlW2xdLHIsbikpcmV0dXJuITE7cmV0dXJuITB9KHQsZSxyLG8pKX1yZXR1cm4gcj90PT09ZTp0PT1lfWZ1bmN0aW9uIHgodCl7cmV0dXJuIltvYmplY3QgQXJndW1lbnRzXSI9PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX1mdW5jdGlvbiBiKHQsZSl7aWYoIXR8fCFlKXJldHVybiExO2lmKCJbb2JqZWN0IFJlZ0V4cF0iPT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkpcmV0dXJuIGUudGVzdCh0KTt0cnl7aWYodCBpbnN0YW5jZW9mIGUpcmV0dXJuITB9Y2F0Y2godCl7fXJldHVybiFFcnJvci5pc1Byb3RvdHlwZU9mKGUpJiYhMD09PWUuY2FsbCh7fSx0KX1mdW5jdGlvbiBfKHQsZSxyLG4pe3ZhciBpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoJyJibG9jayIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7InN0cmluZyI9PXR5cGVvZiByJiYobj1yLHI9bnVsbCksaT1mdW5jdGlvbih0KXt2YXIgZTt0cnl7dCgpfWNhdGNoKHQpe2U9dH1yZXR1cm4gZX0oZSksbj0ociYmci5uYW1lPyIgKCIrci5uYW1lKyIpLiI6Ii4iKSsobj8iICIrbjoiLiIpLHQmJiFpJiZtKGksciwiTWlzc2luZyBleHBlY3RlZCBleGNlcHRpb24iK24pO3ZhciBvPSJzdHJpbmciPT10eXBlb2YgbixzPSF0JiZpJiYhcjtpZigoIXQmJmEuaXNFcnJvcihpKSYmbyYmYihpLHIpfHxzKSYmbShpLHIsIkdvdCB1bndhbnRlZCBleGNlcHRpb24iK24pLHQmJmkmJnImJiFiKGkscil8fCF0JiZpKXRocm93IGl9aC5Bc3NlcnRpb25FcnJvcj1mdW5jdGlvbih0KXt2YXIgZTt0aGlzLm5hbWU9IkFzc2VydGlvbkVycm9yIix0aGlzLmFjdHVhbD10LmFjdHVhbCx0aGlzLmV4cGVjdGVkPXQuZXhwZWN0ZWQsdGhpcy5vcGVyYXRvcj10Lm9wZXJhdG9yLHQubWVzc2FnZT8odGhpcy5tZXNzYWdlPXQubWVzc2FnZSx0aGlzLmdlbmVyYXRlZE1lc3NhZ2U9ITEpOih0aGlzLm1lc3NhZ2U9ZChnKChlPXRoaXMpLmFjdHVhbCksMTI4KSsiICIrZS5vcGVyYXRvcisiICIrZChnKGUuZXhwZWN0ZWQpLDEyOCksdGhpcy5nZW5lcmF0ZWRNZXNzYWdlPSEwKTt2YXIgcj10LnN0YWNrU3RhcnRGdW5jdGlvbnx8bTtpZihFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSlFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLHIpO2Vsc2V7dmFyIG49bmV3IEVycm9yO2lmKG4uc3RhY2spe3ZhciBpPW4uc3RhY2ssYT1wKHIpLG89aS5pbmRleE9mKCJcbiIrYSk7aWYobz49MCl7dmFyIHM9aS5pbmRleE9mKCJcbiIsbysxKTtpPWkuc3Vic3RyaW5nKHMrMSl9dGhpcy5zdGFjaz1pfX19LGEuaW5oZXJpdHMoaC5Bc3NlcnRpb25FcnJvcixFcnJvciksaC5mYWlsPW0saC5vaz12LGguZXF1YWw9ZnVuY3Rpb24odCxlLHIpe3QhPWUmJm0odCxlLHIsIj09IixoLmVxdWFsKX0saC5ub3RFcXVhbD1mdW5jdGlvbih0LGUscil7dD09ZSYmbSh0LGUsciwiIT0iLGgubm90RXF1YWwpfSxoLmRlZXBFcXVhbD1mdW5jdGlvbih0LGUscil7eSh0LGUsITEpfHxtKHQsZSxyLCJkZWVwRXF1YWwiLGguZGVlcEVxdWFsKX0saC5kZWVwU3RyaWN0RXF1YWw9ZnVuY3Rpb24odCxlLHIpe3kodCxlLCEwKXx8bSh0LGUsciwiZGVlcFN0cmljdEVxdWFsIixoLmRlZXBTdHJpY3RFcXVhbCl9LGgubm90RGVlcEVxdWFsPWZ1bmN0aW9uKHQsZSxyKXt5KHQsZSwhMSkmJm0odCxlLHIsIm5vdERlZXBFcXVhbCIsaC5ub3REZWVwRXF1YWwpfSxoLm5vdERlZXBTdHJpY3RFcXVhbD1mdW5jdGlvbiB0KGUscixuKXt5KGUsciwhMCkmJm0oZSxyLG4sIm5vdERlZXBTdHJpY3RFcXVhbCIsdCl9LGguc3RyaWN0RXF1YWw9ZnVuY3Rpb24odCxlLHIpe3QhPT1lJiZtKHQsZSxyLCI9PT0iLGguc3RyaWN0RXF1YWwpfSxoLm5vdFN0cmljdEVxdWFsPWZ1bmN0aW9uKHQsZSxyKXt0PT09ZSYmbSh0LGUsciwiIT09IixoLm5vdFN0cmljdEVxdWFsKX0saC50aHJvd3M9ZnVuY3Rpb24odCxlLHIpe18oITAsdCxlLHIpfSxoLmRvZXNOb3RUaHJvdz1mdW5jdGlvbih0LGUscil7XyghMSx0LGUscil9LGguaWZFcnJvcj1mdW5jdGlvbih0KXtpZih0KXRocm93IHR9O3ZhciB3PU9iamVjdC5rZXlzfHxmdW5jdGlvbih0KXt2YXIgZT1bXTtmb3IodmFyIHIgaW4gdClvLmNhbGwodCxyKSYmZS5wdXNoKHIpO3JldHVybiBlfX0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0seyJ1dGlsLyI6NTE0fV0sNjA6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGF0b2IodCl9fSx7fV0sNjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWUubGVuZ3RoLGE9bmV3IEFycmF5KHIrMSksbz0wO288cjsrK28pe2Zvcih2YXIgcz1uZXcgQXJyYXkocisxKSxsPTA7bDw9cjsrK2wpc1tsXT10W2xdW29dO2Fbb109c31hW3JdPW5ldyBBcnJheShyKzEpO2Zvcih2YXIgbz0wO288PXI7KytvKWFbcl1bb109MTtmb3IodmFyIGM9bmV3IEFycmF5KHIrMSksbz0wO288cjsrK28pY1tvXT1lW29dO2Nbcl09MTt2YXIgdT1uKGEsYyksaD1pKHVbcisxXSk7MD09PWgmJihoPTEpO2Zvcih2YXIgZj1uZXcgQXJyYXkocisxKSxvPTA7bzw9cjsrK28pZltvXT1pKHVbb10pL2g7cmV0dXJuIGZ9O3ZhciBuPXQoInJvYnVzdC1saW5lYXItc29sdmUiKTtmdW5jdGlvbiBpKHQpe2Zvcih2YXIgZT0wLHI9MDtyPHQubGVuZ3RoOysrcillKz10W3JdO3JldHVybiBlfX0seyJyb2J1c3QtbGluZWFyLXNvbHZlIjo0NzB9XSw2MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLmJ5dGVMZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIDMqdC5sZW5ndGgvNC1jKHQpfSxyLnRvQnl0ZUFycmF5PWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixvLHMsbD10Lmxlbmd0aDtvPWModCkscz1uZXcgYSgzKmwvNC1vKSxyPW8+MD9sLTQ6bDt2YXIgdT0wO2ZvcihlPTA7ZTxyO2UrPTQpbj1pW3QuY2hhckNvZGVBdChlKV08PDE4fGlbdC5jaGFyQ29kZUF0KGUrMSldPDwxMnxpW3QuY2hhckNvZGVBdChlKzIpXTw8NnxpW3QuY2hhckNvZGVBdChlKzMpXSxzW3UrK109bj4+MTYmMjU1LHNbdSsrXT1uPj44JjI1NSxzW3UrK109MjU1Jm47Mj09PW8/KG49aVt0LmNoYXJDb2RlQXQoZSldPDwyfGlbdC5jaGFyQ29kZUF0KGUrMSldPj40LHNbdSsrXT0yNTUmbik6MT09PW8mJihuPWlbdC5jaGFyQ29kZUF0KGUpXTw8MTB8aVt0LmNoYXJDb2RlQXQoZSsxKV08PDR8aVt0LmNoYXJDb2RlQXQoZSsyKV0+PjIsc1t1KytdPW4+PjgmMjU1LHNbdSsrXT0yNTUmbik7cmV0dXJuIHN9LHIuZnJvbUJ5dGVBcnJheT1mdW5jdGlvbih0KXtmb3IodmFyIGUscj10Lmxlbmd0aCxpPXIlMyxhPSIiLG89W10scz0wLGw9ci1pO3M8bDtzKz0xNjM4MylvLnB1c2godSh0LHMscysxNjM4Mz5sP2w6cysxNjM4MykpOzE9PT1pPyhlPXRbci0xXSxhKz1uW2U+PjJdLGErPW5bZTw8NCY2M10sYSs9Ij09Iik6Mj09PWkmJihlPSh0W3ItMl08PDgpK3Rbci0xXSxhKz1uW2U+PjEwXSxhKz1uW2U+PjQmNjNdLGErPW5bZTw8MiY2M10sYSs9Ij0iKTtyZXR1cm4gby5wdXNoKGEpLG8uam9pbigiIil9O2Zvcih2YXIgbj1bXSxpPVtdLGE9InVuZGVmaW5lZCIhPXR5cGVvZiBVaW50OEFycmF5P1VpbnQ4QXJyYXk6QXJyYXksbz0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyIscz0wLGw9by5sZW5ndGg7czxsOysrcyluW3NdPW9bc10saVtvLmNoYXJDb2RlQXQocyldPXM7ZnVuY3Rpb24gYyh0KXt2YXIgZT10Lmxlbmd0aDtpZihlJTQ+MCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQiKTtyZXR1cm4iPSI9PT10W2UtMl0/MjoiPSI9PT10W2UtMV0/MTowfWZ1bmN0aW9uIHUodCxlLHIpe2Zvcih2YXIgaSxhLG89W10scz1lO3M8cjtzKz0zKWk9KHRbc108PDE2JjE2NzExNjgwKSsodFtzKzFdPDw4JjY1MjgwKSsoMjU1JnRbcysyXSksby5wdXNoKG5bKGE9aSk+PjE4JjYzXStuW2E+PjEyJjYzXStuW2E+PjYmNjNdK25bNjMmYV0pO3JldHVybiBvLmpvaW4oIiIpfWlbIi0iLmNoYXJDb2RlQXQoMCldPTYyLGlbIl8iLmNoYXJDb2RlQXQoMCldPTYzfSx7fV0sNjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9saWIvcmF0aW9uYWxpemUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbih0WzBdLm11bChlWzFdKS5hZGQoZVswXS5tdWwodFsxXSkpLHRbMV0ubXVsKGVbMV0pKX19LHsiLi9saWIvcmF0aW9uYWxpemUiOjczfV0sNjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF0ubXVsKGVbMV0pLmNtcChlWzBdLm11bCh0WzFdKSl9fSx7fV0sNjU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9saWIvcmF0aW9uYWxpemUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbih0WzBdLm11bChlWzFdKSx0WzFdLm11bChlWzBdKSl9fSx7Ii4vbGliL3JhdGlvbmFsaXplIjo3M31dLDY2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vaXMtcmF0IiksaT10KCIuL2xpYi9pcy1ibiIpLGE9dCgiLi9saWIvbnVtLXRvLWJuIiksbz10KCIuL2xpYi9zdHItdG8tYm4iKSxzPXQoIi4vbGliL3JhdGlvbmFsaXplIiksbD10KCIuL2RpdiIpO2UuZXhwb3J0cz1mdW5jdGlvbiB0KGUscil7aWYobihlKSlyZXR1cm4gcj9sKGUsdChyKSk6W2VbMF0uY2xvbmUoKSxlWzFdLmNsb25lKCldO3ZhciBjPTA7dmFyIHUsaDtpZihpKGUpKXU9ZS5jbG9uZSgpO2Vsc2UgaWYoInN0cmluZyI9PXR5cGVvZiBlKXU9byhlKTtlbHNle2lmKDA9PT1lKXJldHVyblthKDApLGEoMSldO2lmKGU9PT1NYXRoLmZsb29yKGUpKXU9YShlKTtlbHNle2Zvcig7ZSE9PU1hdGguZmxvb3IoZSk7KWUqPU1hdGgucG93KDIsMjU2KSxjLT0yNTY7dT1hKGUpfX1pZihuKHIpKXUubXVsKHJbMV0pLGg9clswXS5jbG9uZSgpO2Vsc2UgaWYoaShyKSloPXIuY2xvbmUoKTtlbHNlIGlmKCJzdHJpbmciPT10eXBlb2YgciloPW8ocik7ZWxzZSBpZihyKWlmKHI9PT1NYXRoLmZsb29yKHIpKWg9YShyKTtlbHNle2Zvcig7ciE9PU1hdGguZmxvb3Iocik7KXIqPU1hdGgucG93KDIsMjU2KSxjKz0yNTY7aD1hKHIpfWVsc2UgaD1hKDEpO2M+MD91PXUudXNobG4oYyk6YzwwJiYoaD1oLnVzaGxuKC1jKSk7cmV0dXJuIHModSxoKX19LHsiLi9kaXYiOjY1LCIuL2lzLXJhdCI6NjcsIi4vbGliL2lzLWJuIjo3MSwiLi9saWIvbnVtLXRvLWJuIjo3MiwiLi9saWIvcmF0aW9uYWxpemUiOjczLCIuL2xpYi9zdHItdG8tYm4iOjc0fV0sNjc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9saWIvaXMtYm4iKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCkmJjI9PT10Lmxlbmd0aCYmbih0WzBdKSYmbih0WzFdKX19LHsiLi9saWIvaXMtYm4iOjcxfV0sNjg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiYm4uanMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQuY21wKG5ldyBuKDApKX19LHsiYm4uanMiOjgyfV0sNjk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9ibi1zaWduIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoLHI9dC53b3JkcyxpPTA7aWYoMT09PWUpaT1yWzBdO2Vsc2UgaWYoMj09PWUpaT1yWzBdKzY3MTA4ODY0KnJbMV07ZWxzZSBmb3IodmFyIGE9MDthPGU7YSsrKXt2YXIgbz1yW2FdO2krPW8qTWF0aC5wb3coNjcxMDg4NjQsYSl9cmV0dXJuIG4odCkqaX19LHsiLi9ibi1zaWduIjo2OH1dLDcwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImRvdWJsZS1iaXRzIiksaT10KCJiaXQtdHdpZGRsZSIpLmNvdW50VHJhaWxpbmdaZXJvcztlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9aShuLmxvKHQpKTtpZihlPDMyKXJldHVybiBlO3ZhciByPWkobi5oaSh0KSk7aWYocj4yMClyZXR1cm4gNTI7cmV0dXJuIHIrMzJ9fSx7ImJpdC10d2lkZGxlIjo4MCwiZG91YmxlLWJpdHMiOjE1MX1dLDcxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3QoImJuLmpzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0JiYib2JqZWN0Ij09dHlwZW9mIHQmJkJvb2xlYW4odC53b3Jkcyl9fSx7ImJuLmpzIjo4Mn1dLDcyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImJuLmpzIiksaT10KCJkb3VibGUtYml0cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1pLmV4cG9uZW50KHQpO3JldHVybiBlPDUyP25ldyBuKHQpOm5ldyBuKHQqTWF0aC5wb3coMiw1Mi1lKSkudXNobG4oZS01Mil9fSx7ImJuLmpzIjo4MiwiZG91YmxlLWJpdHMiOjE1MX1dLDczOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vbnVtLXRvLWJuIiksaT10KCIuL2JuLXNpZ24iKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1pKHQpLGE9aShlKTtpZigwPT09cilyZXR1cm5bbigwKSxuKDEpXTtpZigwPT09YSlyZXR1cm5bbigwKSxuKDApXTthPDAmJih0PXQubmVnKCksZT1lLm5lZygpKTt2YXIgbz10LmdjZChlKTtpZihvLmNtcG4oMSkpcmV0dXJuW3QuZGl2KG8pLGUuZGl2KG8pXTtyZXR1cm5bdCxlXX19LHsiLi9ibi1zaWduIjo2OCwiLi9udW0tdG8tYm4iOjcyfV0sNzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiYm4uanMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBuKHQpfX0seyJibi5qcyI6ODJ9XSw3NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2xpYi9yYXRpb25hbGl6ZSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBuKHRbMF0ubXVsKGVbMF0pLHRbMV0ubXVsKGVbMV0pKX19LHsiLi9saWIvcmF0aW9uYWxpemUiOjczfV0sNzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9saWIvYm4tc2lnbiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbih0WzBdKSpuKHRbMV0pfX0seyIuL2xpYi9ibi1zaWduIjo2OH1dLDc3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vbGliL3JhdGlvbmFsaXplIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odFswXS5tdWwoZVsxXSkuc3ViKHRbMV0ubXVsKGVbMF0pKSx0WzFdLm11bChlWzFdKSl9fSx7Ii4vbGliL3JhdGlvbmFsaXplIjo3M31dLDc4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vbGliL2JuLXRvLW51bSIpLGk9dCgiLi9saWIvY3R6Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0scj10WzFdO2lmKDA9PT1lLmNtcG4oMCkpcmV0dXJuIDA7dmFyIGE9ZS5hYnMoKS5kaXZtb2Qoci5hYnMoKSksbz1hLmRpdixzPW4obyksbD1hLm1vZCxjPWUubmVnYXRpdmUhPT1yLm5lZ2F0aXZlPy0xOjE7aWYoMD09PWwuY21wbigwKSlyZXR1cm4gYypzO2lmKHMpe3ZhciB1PWkocykrNCxoPW4obC51c2hsbih1KS5kaXZSb3VuZChyKSk7cmV0dXJuIGMqKHMraCpNYXRoLnBvdygyLC11KSl9dmFyIGY9ci5iaXRMZW5ndGgoKS1sLmJpdExlbmd0aCgpKzUzLGg9bihsLnVzaGxuKGYpLmRpdlJvdW5kKHIpKTtyZXR1cm4gZjwxMDIzP2MqaCpNYXRoLnBvdygyLC1mKTooaCo9TWF0aC5wb3coMiwtMTAyMyksYypoKk1hdGgucG93KDIsMTAyMy1mKSl9fSx7Ii4vbGliL2JuLXRvLW51bSI6NjksIi4vbGliL2N0eiI6NzB9XSw3OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4saSxhKXt2YXIgbz1bImZ1bmN0aW9uICIsdCwiKGEsbCxoLCIsbi5qb2luKCIsIiksIil7IixhPyIiOiJ2YXIgaT0iLHI/ImwtMSI6ImgrMSIsIjt3aGlsZShsPD1oKXt2YXIgbT0obCtoKT4+PjEseD1hIixpPyIuZ2V0KG0pIjoiW21dIl07cmV0dXJuIGE/ZS5pbmRleE9mKCJjIik8MD9vLnB1c2goIjtpZih4PT09eSl7cmV0dXJuIG19ZWxzZSBpZih4PD15KXsiKTpvLnB1c2goIjt2YXIgcD1jKHgseSk7aWYocD09PTApe3JldHVybiBtfWVsc2UgaWYocDw9MCl7Iik6by5wdXNoKCI7aWYoIixlLCIpe2k9bTsiKSxyP28ucHVzaCgibD1tKzF9ZWxzZXtoPW0tMX0iKTpvLnB1c2goImg9bS0xfWVsc2V7bD1tKzF9Iiksby5wdXNoKCJ9IiksYT9vLnB1c2goInJldHVybiAtMX07Iik6by5wdXNoKCJyZXR1cm4gaX07Iiksby5qb2luKCIiKX1mdW5jdGlvbiBpKHQsZSxyLGkpe3JldHVybiBuZXcgRnVuY3Rpb24oW24oIkEiLCJ4Iit0KyJ5IixlLFsieSJdLCExLGkpLG4oIkIiLCJ4Iit0KyJ5IixlLFsieSJdLCEwLGkpLG4oIlAiLCJjKHgseSkiK3QrIjAiLGUsWyJ5IiwiYyJdLCExLGkpLG4oIlEiLCJjKHgseSkiK3QrIjAiLGUsWyJ5IiwiYyJdLCEwLGkpLCJmdW5jdGlvbiBkaXNwYXRjaEJzZWFyY2giLHIsIihhLHksYyxsLGgpe2lmKGEuc2hhcGUpe2lmKHR5cGVvZihjKT09PSdmdW5jdGlvbicpe3JldHVybiBRKGEsKGw9PT11bmRlZmluZWQpPzA6bHwwLChoPT09dW5kZWZpbmVkKT9hLnNoYXBlWzBdLTE6aHwwLHksYyl9ZWxzZXtyZXR1cm4gQihhLChjPT09dW5kZWZpbmVkKT8wOmN8MCwobD09PXVuZGVmaW5lZCk/YS5zaGFwZVswXS0xOmx8MCx5KX19ZWxzZXtpZih0eXBlb2YoYyk9PT0nZnVuY3Rpb24nKXtyZXR1cm4gUChhLChsPT09dW5kZWZpbmVkKT8wOmx8MCwoaD09PXVuZGVmaW5lZCk/YS5sZW5ndGgtMTpofDAseSxjKX1lbHNle3JldHVybiBBKGEsKGM9PT11bmRlZmluZWQpPzA6Y3wwLChsPT09dW5kZWZpbmVkKT9hLmxlbmd0aC0xOmx8MCx5KX19fXJldHVybiBkaXNwYXRjaEJzZWFyY2giLHJdLmpvaW4oIiIpKSgpfWUuZXhwb3J0cz17Z2U6aSgiPj0iLCExLCJHRSIpLGd0OmkoIj4iLCExLCJHVCIpLGx0OmkoIjwiLCEwLCJMVCIpLGxlOmkoIjw9IiwhMCwiTEUiKSxlcTppKCItIiwhMCwiRVEiLCEwKX19LHt9XSw4MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjsidXNlIHJlc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3ZhciBlPTMyO3JldHVybih0Jj0tdCkmJmUtLSw2NTUzNSZ0JiYoZS09MTYpLDE2NzExOTM1JnQmJihlLT04KSwyNTI2NDUxMzUmdCYmKGUtPTQpLDg1ODk5MzQ1OSZ0JiYoZS09MiksMTQzMTY1NTc2NSZ0JiYoZS09MSksZX1yLklOVF9CSVRTPTMyLHIuSU5UX01BWD0yMTQ3NDgzNjQ3LHIuSU5UX01JTj0tMTw8MzEsci5zaWduPWZ1bmN0aW9uKHQpe3JldHVybih0PjApLSh0PDApfSxyLmFicz1mdW5jdGlvbih0KXt2YXIgZT10Pj4zMTtyZXR1cm4odF5lKS1lfSxyLm1pbj1mdW5jdGlvbih0LGUpe3JldHVybiBlXih0XmUpJi0odDxlKX0sci5tYXg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdF4odF5lKSYtKHQ8ZSl9LHIuaXNQb3cyPWZ1bmN0aW9uKHQpe3JldHVybiEodCZ0LTF8fCF0KX0sci5sb2cyPWZ1bmN0aW9uKHQpe3ZhciBlLHI7cmV0dXJuIGU9KHQ+NjU1MzUpPDw0LGV8PXI9KCh0Pj4+PWUpPjI1NSk8PDMsZXw9cj0oKHQ+Pj49cik+MTUpPDwyLChlfD1yPSgodD4+Pj1yKT4zKTw8MSl8KHQ+Pj49cik+PjF9LHIubG9nMTA9ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTFlOT85OnQ+PTFlOD84OnQ+PTFlNz83OnQ+PTFlNj82OnQ+PTFlNT81OnQ+PTFlND80OnQ+PTFlMz8zOnQ+PTEwMD8yOnQ+PTEwPzE6MH0sci5wb3BDb3VudD1mdW5jdGlvbih0KXtyZXR1cm4gMTY4NDMwMDkqKCh0PSg4NTg5OTM0NTkmKHQtPXQ+Pj4xJjE0MzE2NTU3NjUpKSsodD4+PjImODU4OTkzNDU5KSkrKHQ+Pj40KSYyNTI2NDUxMzUpPj4+MjR9LHIuY291bnRUcmFpbGluZ1plcm9zPW4sci5uZXh0UG93Mj1mdW5jdGlvbih0KXtyZXR1cm4gdCs9MD09PXQsLS10LHR8PXQ+Pj4xLHR8PXQ+Pj4yLHR8PXQ+Pj40LHR8PXQ+Pj44LCh0fD10Pj4+MTYpKzF9LHIucHJldlBvdzI9ZnVuY3Rpb24odCl7cmV0dXJuIHR8PXQ+Pj4xLHR8PXQ+Pj4yLHR8PXQ+Pj40LHR8PXQ+Pj44LCh0fD10Pj4+MTYpLSh0Pj4+MSl9LHIucGFyaXR5PWZ1bmN0aW9uKHQpe3JldHVybiB0Xj10Pj4+MTYsdF49dD4+PjgsdF49dD4+PjQsMjcwMzA+Pj4odCY9MTUpJjF9O3ZhciBpPW5ldyBBcnJheSgyNTYpOyFmdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPDI1NjsrK2Upe3ZhciByPWUsbj1lLGk9Nztmb3Iocj4+Pj0xO3I7cj4+Pj0xKW48PD0xLG58PTEmciwtLWk7dFtlXT1uPDxpJjI1NX19KGkpLHIucmV2ZXJzZT1mdW5jdGlvbih0KXtyZXR1cm4gaVsyNTUmdF08PDI0fGlbdD4+PjgmMjU1XTw8MTZ8aVt0Pj4+MTYmMjU1XTw8OHxpW3Q+Pj4yNCYyNTVdfSxyLmludGVybGVhdmUyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuKHQ9MTQzMTY1NTc2NSYoKHQ9ODU4OTkzNDU5JigodD0yNTI2NDUxMzUmKCh0PTE2NzExOTM1JigodCY9NjU1MzUpfHQ8PDgpKXx0PDw0KSl8dDw8MikpfHQ8PDEpKXwoZT0xNDMxNjU1NzY1JigoZT04NTg5OTM0NTkmKChlPTI1MjY0NTEzNSYoKGU9MTY3MTE5MzUmKChlJj02NTUzNSl8ZTw8OCkpfGU8PDQpKXxlPDwyKSl8ZTw8MSkpPDwxfSxyLmRlaW50ZXJsZWF2ZTI9ZnVuY3Rpb24odCxlKXtyZXR1cm4odD02NTUzNSYoKHQ9MTY3MTE5MzUmKCh0PTI1MjY0NTEzNSYoKHQ9ODU4OTkzNDU5JigodD10Pj4+ZSYxNDMxNjU1NzY1KXx0Pj4+MSkpfHQ+Pj4yKSl8dD4+PjQpKXx0Pj4+MTYpKTw8MTY+PjE2fSxyLmludGVybGVhdmUzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD0xMjI3MTMzNTEzJigodD0zMjcyMzU2MDM1JigodD0yNTE3MTk2OTUmKCh0PTQyNzgxOTAzMzUmKCh0Jj0xMDIzKXx0PDwxNikpfHQ8PDgpKXx0PDw0KSl8dDw8MiksKHR8PShlPTEyMjcxMzM1MTMmKChlPTMyNzIzNTYwMzUmKChlPTI1MTcxOTY5NSYoKGU9NDI3ODE5MDMzNSYoKGUmPTEwMjMpfGU8PDE2KSl8ZTw8OCkpfGU8PDQpKXxlPDwyKSk8PDEpfChyPTEyMjcxMzM1MTMmKChyPTMyNzIzNTYwMzUmKChyPTI1MTcxOTY5NSYoKHI9NDI3ODE5MDMzNSYoKHImPTEwMjMpfHI8PDE2KSl8cjw8OCkpfHI8PDQpKXxyPDwyKSk8PDJ9LHIuZGVpbnRlcmxlYXZlMz1mdW5jdGlvbih0LGUpe3JldHVybih0PTEwMjMmKCh0PTQyNzgxOTAzMzUmKCh0PTI1MTcxOTY5NSYoKHQ9MzI3MjM1NjAzNSYoKHQ9dD4+PmUmMTIyNzEzMzUxMyl8dD4+PjIpKXx0Pj4+NCkpfHQ+Pj44KSl8dD4+PjE2KSk8PDIyPj4yMn0sci5uZXh0Q29tYmluYXRpb249ZnVuY3Rpb24odCl7dmFyIGU9dHx0LTE7cmV0dXJuIGUrMXwofmUmLX5lKS0xPj4+bih0KSsxfX0se31dLDgxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImNsYW1wIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZXx8KGU9e30pO3ZhciByLG8scyxsLGMsdSxoLGYscCxkLGcsbT1udWxsPT1lLmN1dG9mZj8uMjU6ZS5jdXRvZmYsdj1udWxsPT1lLnJhZGl1cz84OmUucmFkaXVzLHk9ZS5jaGFubmVsfHwwO2lmKEFycmF5QnVmZmVyLmlzVmlldyh0KXx8QXJyYXkuaXNBcnJheSh0KSl7aWYoIWUud2lkdGh8fCFlLmhlaWdodCl0aHJvdyBFcnJvcigiRm9yIHJhdyBkYXRhIHdpZHRoIGFuZCBoZWlnaHQgc2hvdWxkIGJlIHByb3ZpZGVkIGJ5IG9wdGlvbnMiKTtyPWUud2lkdGgsbz1lLmhlaWdodCxsPXQsdT1lLnN0cmlkZT9lLnN0cmlkZTpNYXRoLmZsb29yKHQubGVuZ3RoL3Ivbyl9ZWxzZSB3aW5kb3cuSFRNTENhbnZhc0VsZW1lbnQmJnQgaW5zdGFuY2VvZiB3aW5kb3cuSFRNTENhbnZhc0VsZW1lbnQ/KGg9KGY9dCkuZ2V0Q29udGV4dCgiMmQiKSxyPWYud2lkdGgsbz1mLmhlaWdodCxwPWguZ2V0SW1hZ2VEYXRhKDAsMCxyLG8pLGw9cC5kYXRhLHU9NCk6d2luZG93LkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCYmdCBpbnN0YW5jZW9mIHdpbmRvdy5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ/KGY9dC5jYW52YXMsaD10LHI9Zi53aWR0aCxvPWYuaGVpZ2h0LHA9aC5nZXRJbWFnZURhdGEoMCwwLHIsbyksbD1wLmRhdGEsdT00KTp3aW5kb3cuSW1hZ2VEYXRhJiZ0IGluc3RhbmNlb2Ygd2luZG93LkltYWdlRGF0YSYmKHA9dCxyPXQud2lkdGgsbz10LmhlaWdodCxsPXAuZGF0YSx1PTQpO2lmKHM9TWF0aC5tYXgocixvKSx3aW5kb3cuVWludDhDbGFtcGVkQXJyYXkmJmwgaW5zdGFuY2VvZiB3aW5kb3cuVWludDhDbGFtcGVkQXJyYXl8fHdpbmRvdy5VaW50OEFycmF5JiZsIGluc3RhbmNlb2Ygd2luZG93LlVpbnQ4QXJyYXkpZm9yKGM9bCxsPUFycmF5KHIqbyksZD0wLGc9Yy5sZW5ndGg7ZDxnO2QrKylsW2RdPWNbZCp1K3ldLzI1NTtlbHNlIGlmKDEhPT11KXRocm93IEVycm9yKCJSYXcgZGF0YSBjYW4gaGF2ZSBvbmx5IDEgdmFsdWUgcGVyIHBpeGVsIik7dmFyIHg9QXJyYXkocipvKSxiPUFycmF5KHIqbyksXz1BcnJheShzKSx3PUFycmF5KHMpLGs9QXJyYXkocysxKSxNPUFycmF5KHMpO2ZvcihkPTAsZz1yKm87ZDxnO2QrKyl7dmFyIEE9bFtkXTt4W2RdPTE9PT1BPzA6MD09PUE/aTpNYXRoLnBvdyhNYXRoLm1heCgwLC41LUEpLDIpLGJbZF09MT09PUE/aTowPT09QT8wOk1hdGgucG93KE1hdGgubWF4KDAsQS0uNSksMil9YSh4LHIsbyxfLHcsTSxrKSxhKGIscixvLF8sdyxNLGspO3ZhciBUPXdpbmRvdy5GbG9hdDMyQXJyYXk/bmV3IEZsb2F0MzJBcnJheShyKm8pOm5ldyBBcnJheShyKm8pO2ZvcihkPTAsZz1yKm87ZDxnO2QrKylUW2RdPW4oMS0oKHhbZF0tYltkXSkvdittKSwwLDEpO3JldHVybiBUfTt2YXIgaT0xZTIwO2Z1bmN0aW9uIGEodCxlLHIsbixpLGEscyl7Zm9yKHZhciBsPTA7bDxlO2wrKyl7Zm9yKHZhciBjPTA7YzxyO2MrKyluW2NdPXRbYyplK2xdO2ZvcihvKG4saSxhLHMsciksYz0wO2M8cjtjKyspdFtjKmUrbF09aVtjXX1mb3IoYz0wO2M8cjtjKyspe2ZvcihsPTA7bDxlO2wrKyluW2xdPXRbYyplK2xdO2ZvcihvKG4saSxhLHMsZSksbD0wO2w8ZTtsKyspdFtjKmUrbF09TWF0aC5zcXJ0KGlbbF0pfX1mdW5jdGlvbiBvKHQsZSxyLG4sYSl7clswXT0wLG5bMF09LWksblsxXT0raTtmb3IodmFyIG89MSxzPTA7bzxhO28rKyl7Zm9yKHZhciBsPSh0W29dK28qby0odFtyW3NdXStyW3NdKnJbc10pKS8oMipvLTIqcltzXSk7bDw9bltzXTspcy0tLGw9KHRbb10rbypvLSh0W3Jbc11dK3Jbc10qcltzXSkpLygyKm8tMipyW3NdKTtyWysrc109byxuW3NdPWwsbltzKzFdPStpfWZvcihvPTAscz0wO288YTtvKyspe2Zvcig7bltzKzFdPG87KXMrKztlW29dPShvLXJbc10pKihvLXJbc10pK3RbcltzXV19fX0se2NsYW1wOjEwMn1dLDgyOltmdW5jdGlvbih0LGUscil7IWZ1bmN0aW9uKGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtpZighdCl0aHJvdyBuZXcgRXJyb3IoZXx8IkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBpKHQsZSl7dC5zdXBlcl89ZTt2YXIgcj1mdW5jdGlvbigpe307ci5wcm90b3R5cGU9ZS5wcm90b3R5cGUsdC5wcm90b3R5cGU9bmV3IHIsdC5wcm90b3R5cGUuY29uc3RydWN0b3I9dH1mdW5jdGlvbiBhKHQsZSxyKXtpZihhLmlzQk4odCkpcmV0dXJuIHQ7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9PXQmJigibGUiIT09ZSYmImJlIiE9PWV8fChyPWUsZT0xMCksdGhpcy5faW5pdCh0fHwwLGV8fDEwLHJ8fCJiZSIpKX12YXIgbzsib2JqZWN0Ij09dHlwZW9mIGU/ZS5leHBvcnRzPWE6ci5CTj1hLGEuQk49YSxhLndvcmRTaXplPTI2O3RyeXtvPXQoImJ1ZmZlciIpLkJ1ZmZlcn1jYXRjaCh0KXt9ZnVuY3Rpb24gcyh0LGUscil7Zm9yKHZhciBuPTAsaT1NYXRoLm1pbih0Lmxlbmd0aCxyKSxhPWU7YTxpO2ErKyl7dmFyIG89dC5jaGFyQ29kZUF0KGEpLTQ4O248PD00LG58PW8+PTQ5JiZvPD01ND9vLTQ5KzEwOm8+PTE3JiZvPD0yMj9vLTE3KzEwOjE1Jm99cmV0dXJuIG59ZnVuY3Rpb24gbCh0LGUscixuKXtmb3IodmFyIGk9MCxhPU1hdGgubWluKHQubGVuZ3RoLHIpLG89ZTtvPGE7bysrKXt2YXIgcz10LmNoYXJDb2RlQXQobyktNDg7aSo9bixpKz1zPj00OT9zLTQ5KzEwOnM+PTE3P3MtMTcrMTA6c31yZXR1cm4gaX1hLmlzQk49ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBhfHxudWxsIT09dCYmIm9iamVjdCI9PXR5cGVvZiB0JiZ0LmNvbnN0cnVjdG9yLndvcmRTaXplPT09YS53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheSh0LndvcmRzKX0sYS5tYXg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5jbXAoZSk+MD90OmV9LGEubWluPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuY21wKGUpPDA/dDplfSxhLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbih0LGUscil7aWYoIm51bWJlciI9PXR5cGVvZiB0KXJldHVybiB0aGlzLl9pbml0TnVtYmVyKHQsZSxyKTtpZigib2JqZWN0Ij09dHlwZW9mIHQpcmV0dXJuIHRoaXMuX2luaXRBcnJheSh0LGUscik7ImhleCI9PT1lJiYoZT0xNiksbihlPT09KDB8ZSkmJmU+PTImJmU8PTM2KTt2YXIgaT0wOyItIj09PSh0PXQudG9TdHJpbmcoKS5yZXBsYWNlKC9ccysvZywiIikpWzBdJiZpKyssMTY9PT1lP3RoaXMuX3BhcnNlSGV4KHQsaSk6dGhpcy5fcGFyc2VCYXNlKHQsZSxpKSwiLSI9PT10WzBdJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCksImxlIj09PXImJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxlLHIpfSxhLnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbih0LGUscil7dDwwJiYodGhpcy5uZWdhdGl2ZT0xLHQ9LXQpLHQ8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJnRdLHRoaXMubGVuZ3RoPTEpOnQ8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmdCx0LzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKToobih0PDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJnQsdC82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09ciYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLGUscil9LGEucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24odCxlLHIpe2lmKG4oIm51bWJlciI9PXR5cGVvZiB0Lmxlbmd0aCksdC5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwodC5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgaT0wO2k8dGhpcy5sZW5ndGg7aSsrKXRoaXMud29yZHNbaV09MDt2YXIgYSxvLHM9MDtpZigiYmUiPT09cilmb3IoaT10Lmxlbmd0aC0xLGE9MDtpPj0wO2ktPTMpbz10W2ldfHRbaS0xXTw8OHx0W2ktMl08PDE2LHRoaXMud29yZHNbYV18PW88PHMmNjcxMDg4NjMsdGhpcy53b3Jkc1thKzFdPW8+Pj4yNi1zJjY3MTA4ODYzLChzKz0yNCk+PTI2JiYocy09MjYsYSsrKTtlbHNlIGlmKCJsZSI9PT1yKWZvcihpPTAsYT0wO2k8dC5sZW5ndGg7aSs9MylvPXRbaV18dFtpKzFdPDw4fHRbaSsyXTw8MTYsdGhpcy53b3Jkc1thXXw9bzw8cyY2NzEwODg2Myx0aGlzLndvcmRzW2ErMV09bz4+PjI2LXMmNjcxMDg4NjMsKHMrPTI0KT49MjYmJihzLT0yNixhKyspO3JldHVybiB0aGlzLnN0cmlwKCl9LGEucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbih0LGUpe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgodC5sZW5ndGgtZSkvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgcj0wO3I8dGhpcy5sZW5ndGg7cisrKXRoaXMud29yZHNbcl09MDt2YXIgbixpLGE9MDtmb3Iocj10Lmxlbmd0aC02LG49MDtyPj1lO3ItPTYpaT1zKHQscixyKzYpLHRoaXMud29yZHNbbl18PWk8PGEmNjcxMDg4NjMsdGhpcy53b3Jkc1tuKzFdfD1pPj4+MjYtYSY0MTk0MzAzLChhKz0yNCk+PTI2JiYoYS09MjYsbisrKTtyKzYhPT1lJiYoaT1zKHQsZSxyKzYpLHRoaXMud29yZHNbbl18PWk8PGEmNjcxMDg4NjMsdGhpcy53b3Jkc1tuKzFdfD1pPj4+MjYtYSY0MTk0MzAzKSx0aGlzLnN0cmlwKCl9LGEucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24odCxlLHIpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciBuPTAsaT0xO2k8PTY3MTA4ODYzO2kqPWUpbisrO24tLSxpPWkvZXwwO2Zvcih2YXIgYT10Lmxlbmd0aC1yLG89YSVuLHM9TWF0aC5taW4oYSxhLW8pK3IsYz0wLHU9cjt1PHM7dSs9biljPWwodCx1LHUrbixlKSx0aGlzLmltdWxuKGkpLHRoaXMud29yZHNbMF0rYzw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1jOnRoaXMuX2lhZGRuKGMpO2lmKDAhPT1vKXt2YXIgaD0xO2ZvcihjPWwodCx1LHQubGVuZ3RoLGUpLHU9MDt1PG87dSsrKWgqPWU7dGhpcy5pbXVsbihoKSx0aGlzLndvcmRzWzBdK2M8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9Yzp0aGlzLl9pYWRkbihjKX19LGEucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24odCl7dC53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgZT0wO2U8dGhpcy5sZW5ndGg7ZSsrKXQud29yZHNbZV09dGhpcy53b3Jkc1tlXTt0Lmxlbmd0aD10aGlzLmxlbmd0aCx0Lm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUsdC5yZWQ9dGhpcy5yZWR9LGEucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IGEobnVsbCk7cmV0dXJuIHRoaXMuY29weSh0KSx0fSxhLnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKHQpe2Zvcig7dGhpcy5sZW5ndGg8dDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSxhLnByb3RvdHlwZS5zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LGEucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSxhLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4tUjogIjoiPEJOOiAiKSt0aGlzLnRvU3RyaW5nKDE2KSsiPiJ9O3ZhciBjPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAwMCIsIjAwMDAwIiwiMDAwMDAwIiwiMDAwMDAwMCIsIjAwMDAwMDAwIiwiMDAwMDAwMDAwIiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJdLHU9WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0saD1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlvbiBmKHQsZSxyKXtyLm5lZ2F0aXZlPWUubmVnYXRpdmVedC5uZWdhdGl2ZTt2YXIgbj10Lmxlbmd0aCtlLmxlbmd0aHwwO3IubGVuZ3RoPW4sbj1uLTF8MDt2YXIgaT0wfHQud29yZHNbMF0sYT0wfGUud29yZHNbMF0sbz1pKmEscz02NzEwODg2MyZvLGw9by82NzEwODg2NHwwO3Iud29yZHNbMF09cztmb3IodmFyIGM9MTtjPG47YysrKXtmb3IodmFyIHU9bD4+PjI2LGg9NjcxMDg4NjMmbCxmPU1hdGgubWluKGMsZS5sZW5ndGgtMSkscD1NYXRoLm1heCgwLGMtdC5sZW5ndGgrMSk7cDw9ZjtwKyspe3ZhciBkPWMtcHwwO3UrPShvPShpPTB8dC53b3Jkc1tkXSkqKGE9MHxlLndvcmRzW3BdKStoKS82NzEwODg2NHwwLGg9NjcxMDg4NjMmb31yLndvcmRzW2NdPTB8aCxsPTB8dX1yZXR1cm4gMCE9PWw/ci53b3Jkc1tjXT0wfGw6ci5sZW5ndGgtLSxyLnN0cmlwKCl9YS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24odCxlKXt2YXIgcjtpZihlPTB8ZXx8MSwxNj09PSh0PXR8fDEwKXx8ImhleCI9PT10KXtyPSIiO2Zvcih2YXIgaT0wLGE9MCxvPTA7bzx0aGlzLmxlbmd0aDtvKyspe3ZhciBzPXRoaXMud29yZHNbb10sbD0oMTY3NzcyMTUmKHM8PGl8YSkpLnRvU3RyaW5nKDE2KTtyPTAhPT0oYT1zPj4+MjQtaSYxNjc3NzIxNSl8fG8hPT10aGlzLmxlbmd0aC0xP2NbNi1sLmxlbmd0aF0rbCtyOmwrciwoaSs9Mik+PTI2JiYoaS09MjYsby0tKX1mb3IoMCE9PWEmJihyPWEudG9TdHJpbmcoMTYpK3IpO3IubGVuZ3RoJWUhPTA7KXI9IjAiK3I7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYocj0iLSIrcikscn1pZih0PT09KDB8dCkmJnQ+PTImJnQ8PTM2KXt2YXIgZj11W3RdLHA9aFt0XTtyPSIiO3ZhciBkPXRoaXMuY2xvbmUoKTtmb3IoZC5uZWdhdGl2ZT0wOyFkLmlzWmVybygpOyl7dmFyIGc9ZC5tb2RuKHApLnRvU3RyaW5nKHQpO3I9KGQ9ZC5pZGl2bihwKSkuaXNaZXJvKCk/ZytyOmNbZi1nLmxlbmd0aF0rZytyfWZvcih0aGlzLmlzWmVybygpJiYocj0iMCIrcik7ci5sZW5ndGglZSE9MDspcj0iMCIrcjtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihyPSItIityKSxyfW4oITEsIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYiKX0sYS5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/dCs9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP3QrPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZuKCExLCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8tdDp0fSxhLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNil9LGEucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4oInVuZGVmaW5lZCIhPXR5cGVvZiBvKSx0aGlzLnRvQXJyYXlMaWtlKG8sdCxlKX0sYS5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LHQsZSl9LGEucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLmJ5dGVMZW5ndGgoKSxhPXJ8fE1hdGgubWF4KDEsaSk7bihpPD1hLCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIiksbihhPjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpLHRoaXMuc3RyaXAoKTt2YXIgbyxzLGw9ImxlIj09PWUsYz1uZXcgdChhKSx1PXRoaXMuY2xvbmUoKTtpZihsKXtmb3Iocz0wOyF1LmlzWmVybygpO3MrKylvPXUuYW5kbG4oMjU1KSx1Lml1c2hybig4KSxjW3NdPW87Zm9yKDtzPGE7cysrKWNbc109MH1lbHNle2ZvcihzPTA7czxhLWk7cysrKWNbc109MDtmb3Iocz0wOyF1LmlzWmVybygpO3MrKylvPXUuYW5kbG4oMjU1KSx1Lml1c2hybig4KSxjW2Etcy0xXT1vfXJldHVybiBjfSxNYXRoLmNsejMyP2EucHJvdG90eXBlLl9jb3VudEJpdHM9ZnVuY3Rpb24odCl7cmV0dXJuIDMyLU1hdGguY2x6MzIodCl9OmEucHJvdG90eXBlLl9jb3VudEJpdHM9ZnVuY3Rpb24odCl7dmFyIGU9dCxyPTA7cmV0dXJuIGU+PTQwOTYmJihyKz0xMyxlPj4+PTEzKSxlPj02NCYmKHIrPTcsZT4+Pj03KSxlPj04JiYocis9NCxlPj4+PTQpLGU+PTImJihyKz0yLGU+Pj49MikscitlfSxhLnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24odCl7aWYoMD09PXQpcmV0dXJuIDI2O3ZhciBlPXQscj0wO3JldHVybiAwPT0oODE5MSZlKSYmKHIrPTEzLGU+Pj49MTMpLDA9PSgxMjcmZSkmJihyKz03LGU+Pj49NyksMD09KDE1JmUpJiYocis9NCxlPj4+PTQpLDA9PSgzJmUpJiYocis9MixlPj4+PTIpLDA9PSgxJmUpJiZyKysscn0sYS5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSxlPXRoaXMuX2NvdW50Qml0cyh0KTtyZXR1cm4gMjYqKHRoaXMubGVuZ3RoLTEpK2V9LGEucHJvdG90eXBlLnplcm9CaXRzPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gMDtmb3IodmFyIHQ9MCxlPTA7ZTx0aGlzLmxlbmd0aDtlKyspe3ZhciByPXRoaXMuX3plcm9CaXRzKHRoaXMud29yZHNbZV0pO2lmKHQrPXIsMjYhPT1yKWJyZWFrfXJldHVybiB0fSxhLnByb3RvdHlwZS5ieXRlTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLmJpdExlbmd0aCgpLzgpfSxhLnByb3RvdHlwZS50b1R3b3M9ZnVuY3Rpb24odCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlP3RoaXMuYWJzKCkuaW5vdG4odCkuaWFkZG4oMSk6dGhpcy5jbG9uZSgpfSxhLnByb3RvdHlwZS5mcm9tVHdvcz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy50ZXN0bih0LTEpP3RoaXMubm90bih0KS5pYWRkbigxKS5pbmVnKCk6dGhpcy5jbG9uZSgpfSxhLnByb3RvdHlwZS5pc05lZz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZX0sYS5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbmVnKCl9LGEucHJvdG90eXBlLmluZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1plcm8oKXx8KHRoaXMubmVnYXRpdmVePTEpLHRoaXN9LGEucHJvdG90eXBlLml1b3I9ZnVuY3Rpb24odCl7Zm9yKDt0aGlzLmxlbmd0aDx0Lmxlbmd0aDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXRoaXMud29yZHNbZV09dGhpcy53b3Jkc1tlXXx0LndvcmRzW2VdO3JldHVybiB0aGlzLnN0cmlwKCl9LGEucHJvdG90eXBlLmlvcj1mdW5jdGlvbih0KXtyZXR1cm4gbigwPT0odGhpcy5uZWdhdGl2ZXx0Lm5lZ2F0aXZlKSksdGhpcy5pdW9yKHQpfSxhLnByb3RvdHlwZS5vcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcih0KTp0LmNsb25lKCkuaW9yKHRoaXMpfSxhLnByb3RvdHlwZS51b3I9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKHQpOnQuY2xvbmUoKS5pdW9yKHRoaXMpfSxhLnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbih0KXt2YXIgZTtlPXRoaXMubGVuZ3RoPnQubGVuZ3RoP3Q6dGhpcztmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl0aGlzLndvcmRzW3JdPXRoaXMud29yZHNbcl0mdC53b3Jkc1tyXTtyZXR1cm4gdGhpcy5sZW5ndGg9ZS5sZW5ndGgsdGhpcy5zdHJpcCgpfSxhLnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uKHQpe3JldHVybiBuKDA9PSh0aGlzLm5lZ2F0aXZlfHQubmVnYXRpdmUpKSx0aGlzLml1YW5kKHQpfSxhLnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKHQpOnQuY2xvbmUoKS5pYW5kKHRoaXMpfSxhLnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQodCk6dC5jbG9uZSgpLml1YW5kKHRoaXMpfSxhLnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbih0KXt2YXIgZSxyO3RoaXMubGVuZ3RoPnQubGVuZ3RoPyhlPXRoaXMscj10KTooZT10LHI9dGhpcyk7Zm9yKHZhciBuPTA7bjxyLmxlbmd0aDtuKyspdGhpcy53b3Jkc1tuXT1lLndvcmRzW25dXnIud29yZHNbbl07aWYodGhpcyE9PWUpZm9yKDtuPGUubGVuZ3RoO24rKyl0aGlzLndvcmRzW25dPWUud29yZHNbbl07cmV0dXJuIHRoaXMubGVuZ3RoPWUubGVuZ3RoLHRoaXMuc3RyaXAoKX0sYS5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbih0KXtyZXR1cm4gbigwPT0odGhpcy5uZWdhdGl2ZXx0Lm5lZ2F0aXZlKSksdGhpcy5pdXhvcih0KX0sYS5wcm90b3R5cGUueG9yPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaXhvcih0KTp0LmNsb25lKCkuaXhvcih0aGlzKX0sYS5wcm90b3R5cGUudXhvcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1eG9yKHQpOnQuY2xvbmUoKS5pdXhvcih0aGlzKX0sYS5wcm90b3R5cGUuaW5vdG49ZnVuY3Rpb24odCl7bigibnVtYmVyIj09dHlwZW9mIHQmJnQ+PTApO3ZhciBlPTB8TWF0aC5jZWlsKHQvMjYpLHI9dCUyNjt0aGlzLl9leHBhbmQoZSkscj4wJiZlLS07Zm9yKHZhciBpPTA7aTxlO2krKyl0aGlzLndvcmRzW2ldPTY3MTA4ODYzJn50aGlzLndvcmRzW2ldO3JldHVybiByPjAmJih0aGlzLndvcmRzW2ldPX50aGlzLndvcmRzW2ldJjY3MTA4ODYzPj4yNi1yKSx0aGlzLnN0cmlwKCl9LGEucHJvdG90eXBlLm5vdG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bih0KX0sYS5wcm90b3R5cGUuc2V0bj1mdW5jdGlvbih0LGUpe24oIm51bWJlciI9PXR5cGVvZiB0JiZ0Pj0wKTt2YXIgcj10LzI2fDAsaT10JTI2O3JldHVybiB0aGlzLl9leHBhbmQocisxKSx0aGlzLndvcmRzW3JdPWU/dGhpcy53b3Jkc1tyXXwxPDxpOnRoaXMud29yZHNbcl0mfigxPDxpKSx0aGlzLnN0cmlwKCl9LGEucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24odCl7dmFyIGUscixuO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09dC5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLGU9dGhpcy5pc3ViKHQpLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXQubmVnYXRpdmUpcmV0dXJuIHQubmVnYXRpdmU9MCxlPXRoaXMuaXN1Yih0KSx0Lm5lZ2F0aXZlPTEsZS5fbm9ybVNpZ24oKTt0aGlzLmxlbmd0aD50Lmxlbmd0aD8ocj10aGlzLG49dCk6KHI9dCxuPXRoaXMpO2Zvcih2YXIgaT0wLGE9MDthPG4ubGVuZ3RoO2ErKyllPSgwfHIud29yZHNbYV0pKygwfG4ud29yZHNbYV0pK2ksdGhpcy53b3Jkc1thXT02NzEwODg2MyZlLGk9ZT4+PjI2O2Zvcig7MCE9PWkmJmE8ci5sZW5ndGg7YSsrKWU9KDB8ci53b3Jkc1thXSkraSx0aGlzLndvcmRzW2FdPTY3MTA4ODYzJmUsaT1lPj4+MjY7aWYodGhpcy5sZW5ndGg9ci5sZW5ndGgsMCE9PWkpdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09aSx0aGlzLmxlbmd0aCsrO2Vsc2UgaWYociE9PXRoaXMpZm9yKDthPHIubGVuZ3RoO2ErKyl0aGlzLndvcmRzW2FdPXIud29yZHNbYV07cmV0dXJuIHRoaXN9LGEucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0KXt2YXIgZTtyZXR1cm4gMCE9PXQubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyh0Lm5lZ2F0aXZlPTAsZT10aGlzLnN1Yih0KSx0Lm5lZ2F0aXZlXj0xLGUpOjA9PT10Lm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLGU9dC5zdWIodGhpcyksdGhpcy5uZWdhdGl2ZT0xLGUpOnRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKHQpOnQuY2xvbmUoKS5pYWRkKHRoaXMpfSxhLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKHQpe2lmKDAhPT10Lm5lZ2F0aXZlKXt0Lm5lZ2F0aXZlPTA7dmFyIGU9dGhpcy5pYWRkKHQpO3JldHVybiB0Lm5lZ2F0aXZlPTEsZS5fbm9ybVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZCh0KSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgcixuLGk9dGhpcy5jbXAodCk7aWYoMD09PWkpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0xLHRoaXMud29yZHNbMF09MCx0aGlzO2k+MD8ocj10aGlzLG49dCk6KHI9dCxuPXRoaXMpO2Zvcih2YXIgYT0wLG89MDtvPG4ubGVuZ3RoO28rKylhPShlPSgwfHIud29yZHNbb10pLSgwfG4ud29yZHNbb10pK2EpPj4yNix0aGlzLndvcmRzW29dPTY3MTA4ODYzJmU7Zm9yKDswIT09YSYmbzxyLmxlbmd0aDtvKyspYT0oZT0oMHxyLndvcmRzW29dKSthKT4+MjYsdGhpcy53b3Jkc1tvXT02NzEwODg2MyZlO2lmKDA9PT1hJiZvPHIubGVuZ3RoJiZyIT09dGhpcylmb3IoO288ci5sZW5ndGg7bysrKXRoaXMud29yZHNbb109ci53b3Jkc1tvXTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsbyksciE9PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuc3RyaXAoKX0sYS5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Yih0KX07dmFyIHA9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYSxvPXQud29yZHMscz1lLndvcmRzLGw9ci53b3JkcyxjPTAsdT0wfG9bMF0saD04MTkxJnUsZj11Pj4+MTMscD0wfG9bMV0sZD04MTkxJnAsZz1wPj4+MTMsbT0wfG9bMl0sdj04MTkxJm0seT1tPj4+MTMseD0wfG9bM10sYj04MTkxJngsXz14Pj4+MTMsdz0wfG9bNF0saz04MTkxJncsTT13Pj4+MTMsQT0wfG9bNV0sVD04MTkxJkEsUz1BPj4+MTMsRT0wfG9bNl0sQz04MTkxJkUsTD1FPj4+MTMsej0wfG9bN10sUD04MTkxJnosST16Pj4+MTMsTz0wfG9bOF0sRD04MTkxJk8sUj1PPj4+MTMsQj0wfG9bOV0sRj04MTkxJkIsTj1CPj4+MTMsaj0wfHNbMF0sVj04MTkxJmosVT1qPj4+MTMscT0wfHNbMV0sSD04MTkxJnEsRz1xPj4+MTMsVz0wfHNbMl0sWT04MTkxJlcsWD1XPj4+MTMsWj0wfHNbM10sJD04MTkxJlosSj1aPj4+MTMsSz0wfHNbNF0sUT04MTkxJkssdHQ9Sz4+PjEzLGV0PTB8c1s1XSxydD04MTkxJmV0LG50PWV0Pj4+MTMsaXQ9MHxzWzZdLGF0PTgxOTEmaXQsb3Q9aXQ+Pj4xMyxzdD0wfHNbN10sbHQ9ODE5MSZzdCxjdD1zdD4+PjEzLHV0PTB8c1s4XSxodD04MTkxJnV0LGZ0PXV0Pj4+MTMscHQ9MHxzWzldLGR0PTgxOTEmcHQsZ3Q9cHQ+Pj4xMztyLm5lZ2F0aXZlPXQubmVnYXRpdmVeZS5uZWdhdGl2ZSxyLmxlbmd0aD0xOTt2YXIgbXQ9KGMrKG49TWF0aC5pbXVsKGgsVikpfDApKygoODE5MSYoaT0oaT1NYXRoLmltdWwoaCxVKSkrTWF0aC5pbXVsKGYsVil8MCkpPDwxMyl8MDtjPSgoYT1NYXRoLmltdWwoZixVKSkrKGk+Pj4xMyl8MCkrKG10Pj4+MjYpfDAsbXQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKGQsViksaT0oaT1NYXRoLmltdWwoZCxVKSkrTWF0aC5pbXVsKGcsVil8MCxhPU1hdGguaW11bChnLFUpO3ZhciB2dD0oYysobj1uK01hdGguaW11bChoLEgpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChoLEcpfDApK01hdGguaW11bChmLEgpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoZixHKXwwKSsoaT4+PjEzKXwwKSsodnQ+Pj4yNil8MCx2dCY9NjcxMDg4NjMsbj1NYXRoLmltdWwodixWKSxpPShpPU1hdGguaW11bCh2LFUpKStNYXRoLmltdWwoeSxWKXwwLGE9TWF0aC5pbXVsKHksVSksbj1uK01hdGguaW11bChkLEgpfDAsaT0oaT1pK01hdGguaW11bChkLEcpfDApK01hdGguaW11bChnLEgpfDAsYT1hK01hdGguaW11bChnLEcpfDA7dmFyIHl0PShjKyhuPW4rTWF0aC5pbXVsKGgsWSl8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKGgsWCl8MCkrTWF0aC5pbXVsKGYsWSl8MCkpPDwxMyl8MDtjPSgoYT1hK01hdGguaW11bChmLFgpfDApKyhpPj4+MTMpfDApKyh5dD4+PjI2KXwwLHl0Jj02NzEwODg2MyxuPU1hdGguaW11bChiLFYpLGk9KGk9TWF0aC5pbXVsKGIsVSkpK01hdGguaW11bChfLFYpfDAsYT1NYXRoLmltdWwoXyxVKSxuPW4rTWF0aC5pbXVsKHYsSCl8MCxpPShpPWkrTWF0aC5pbXVsKHYsRyl8MCkrTWF0aC5pbXVsKHksSCl8MCxhPWErTWF0aC5pbXVsKHksRyl8MCxuPW4rTWF0aC5pbXVsKGQsWSl8MCxpPShpPWkrTWF0aC5pbXVsKGQsWCl8MCkrTWF0aC5pbXVsKGcsWSl8MCxhPWErTWF0aC5pbXVsKGcsWCl8MDt2YXIgeHQ9KGMrKG49bitNYXRoLmltdWwoaCwkKXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoaCxKKXwwKStNYXRoLmltdWwoZiwkKXwwKSk8PDEzKXwwO2M9KChhPWErTWF0aC5pbXVsKGYsSil8MCkrKGk+Pj4xMyl8MCkrKHh0Pj4+MjYpfDAseHQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKGssViksaT0oaT1NYXRoLmltdWwoayxVKSkrTWF0aC5pbXVsKE0sVil8MCxhPU1hdGguaW11bChNLFUpLG49bitNYXRoLmltdWwoYixIKXwwLGk9KGk9aStNYXRoLmltdWwoYixHKXwwKStNYXRoLmltdWwoXyxIKXwwLGE9YStNYXRoLmltdWwoXyxHKXwwLG49bitNYXRoLmltdWwodixZKXwwLGk9KGk9aStNYXRoLmltdWwodixYKXwwKStNYXRoLmltdWwoeSxZKXwwLGE9YStNYXRoLmltdWwoeSxYKXwwLG49bitNYXRoLmltdWwoZCwkKXwwLGk9KGk9aStNYXRoLmltdWwoZCxKKXwwKStNYXRoLmltdWwoZywkKXwwLGE9YStNYXRoLmltdWwoZyxKKXwwO3ZhciBidD0oYysobj1uK01hdGguaW11bChoLFEpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChoLHR0KXwwKStNYXRoLmltdWwoZixRKXwwKSk8PDEzKXwwO2M9KChhPWErTWF0aC5pbXVsKGYsdHQpfDApKyhpPj4+MTMpfDApKyhidD4+PjI2KXwwLGJ0Jj02NzEwODg2MyxuPU1hdGguaW11bChULFYpLGk9KGk9TWF0aC5pbXVsKFQsVSkpK01hdGguaW11bChTLFYpfDAsYT1NYXRoLmltdWwoUyxVKSxuPW4rTWF0aC5pbXVsKGssSCl8MCxpPShpPWkrTWF0aC5pbXVsKGssRyl8MCkrTWF0aC5pbXVsKE0sSCl8MCxhPWErTWF0aC5pbXVsKE0sRyl8MCxuPW4rTWF0aC5pbXVsKGIsWSl8MCxpPShpPWkrTWF0aC5pbXVsKGIsWCl8MCkrTWF0aC5pbXVsKF8sWSl8MCxhPWErTWF0aC5pbXVsKF8sWCl8MCxuPW4rTWF0aC5pbXVsKHYsJCl8MCxpPShpPWkrTWF0aC5pbXVsKHYsSil8MCkrTWF0aC5pbXVsKHksJCl8MCxhPWErTWF0aC5pbXVsKHksSil8MCxuPW4rTWF0aC5pbXVsKGQsUSl8MCxpPShpPWkrTWF0aC5pbXVsKGQsdHQpfDApK01hdGguaW11bChnLFEpfDAsYT1hK01hdGguaW11bChnLHR0KXwwO3ZhciBfdD0oYysobj1uK01hdGguaW11bChoLHJ0KXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoaCxudCl8MCkrTWF0aC5pbXVsKGYscnQpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoZixudCl8MCkrKGk+Pj4xMyl8MCkrKF90Pj4+MjYpfDAsX3QmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEMsViksaT0oaT1NYXRoLmltdWwoQyxVKSkrTWF0aC5pbXVsKEwsVil8MCxhPU1hdGguaW11bChMLFUpLG49bitNYXRoLmltdWwoVCxIKXwwLGk9KGk9aStNYXRoLmltdWwoVCxHKXwwKStNYXRoLmltdWwoUyxIKXwwLGE9YStNYXRoLmltdWwoUyxHKXwwLG49bitNYXRoLmltdWwoayxZKXwwLGk9KGk9aStNYXRoLmltdWwoayxYKXwwKStNYXRoLmltdWwoTSxZKXwwLGE9YStNYXRoLmltdWwoTSxYKXwwLG49bitNYXRoLmltdWwoYiwkKXwwLGk9KGk9aStNYXRoLmltdWwoYixKKXwwKStNYXRoLmltdWwoXywkKXwwLGE9YStNYXRoLmltdWwoXyxKKXwwLG49bitNYXRoLmltdWwodixRKXwwLGk9KGk9aStNYXRoLmltdWwodix0dCl8MCkrTWF0aC5pbXVsKHksUSl8MCxhPWErTWF0aC5pbXVsKHksdHQpfDAsbj1uK01hdGguaW11bChkLHJ0KXwwLGk9KGk9aStNYXRoLmltdWwoZCxudCl8MCkrTWF0aC5pbXVsKGcscnQpfDAsYT1hK01hdGguaW11bChnLG50KXwwO3ZhciB3dD0oYysobj1uK01hdGguaW11bChoLGF0KXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoaCxvdCl8MCkrTWF0aC5pbXVsKGYsYXQpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoZixvdCl8MCkrKGk+Pj4xMyl8MCkrKHd0Pj4+MjYpfDAsd3QmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFAsViksaT0oaT1NYXRoLmltdWwoUCxVKSkrTWF0aC5pbXVsKEksVil8MCxhPU1hdGguaW11bChJLFUpLG49bitNYXRoLmltdWwoQyxIKXwwLGk9KGk9aStNYXRoLmltdWwoQyxHKXwwKStNYXRoLmltdWwoTCxIKXwwLGE9YStNYXRoLmltdWwoTCxHKXwwLG49bitNYXRoLmltdWwoVCxZKXwwLGk9KGk9aStNYXRoLmltdWwoVCxYKXwwKStNYXRoLmltdWwoUyxZKXwwLGE9YStNYXRoLmltdWwoUyxYKXwwLG49bitNYXRoLmltdWwoaywkKXwwLGk9KGk9aStNYXRoLmltdWwoayxKKXwwKStNYXRoLmltdWwoTSwkKXwwLGE9YStNYXRoLmltdWwoTSxKKXwwLG49bitNYXRoLmltdWwoYixRKXwwLGk9KGk9aStNYXRoLmltdWwoYix0dCl8MCkrTWF0aC5pbXVsKF8sUSl8MCxhPWErTWF0aC5pbXVsKF8sdHQpfDAsbj1uK01hdGguaW11bCh2LHJ0KXwwLGk9KGk9aStNYXRoLmltdWwodixudCl8MCkrTWF0aC5pbXVsKHkscnQpfDAsYT1hK01hdGguaW11bCh5LG50KXwwLG49bitNYXRoLmltdWwoZCxhdCl8MCxpPShpPWkrTWF0aC5pbXVsKGQsb3QpfDApK01hdGguaW11bChnLGF0KXwwLGE9YStNYXRoLmltdWwoZyxvdCl8MDt2YXIga3Q9KGMrKG49bitNYXRoLmltdWwoaCxsdCl8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKGgsY3QpfDApK01hdGguaW11bChmLGx0KXwwKSk8PDEzKXwwO2M9KChhPWErTWF0aC5pbXVsKGYsY3QpfDApKyhpPj4+MTMpfDApKyhrdD4+PjI2KXwwLGt0Jj02NzEwODg2MyxuPU1hdGguaW11bChELFYpLGk9KGk9TWF0aC5pbXVsKEQsVSkpK01hdGguaW11bChSLFYpfDAsYT1NYXRoLmltdWwoUixVKSxuPW4rTWF0aC5pbXVsKFAsSCl8MCxpPShpPWkrTWF0aC5pbXVsKFAsRyl8MCkrTWF0aC5pbXVsKEksSCl8MCxhPWErTWF0aC5pbXVsKEksRyl8MCxuPW4rTWF0aC5pbXVsKEMsWSl8MCxpPShpPWkrTWF0aC5pbXVsKEMsWCl8MCkrTWF0aC5pbXVsKEwsWSl8MCxhPWErTWF0aC5pbXVsKEwsWCl8MCxuPW4rTWF0aC5pbXVsKFQsJCl8MCxpPShpPWkrTWF0aC5pbXVsKFQsSil8MCkrTWF0aC5pbXVsKFMsJCl8MCxhPWErTWF0aC5pbXVsKFMsSil8MCxuPW4rTWF0aC5pbXVsKGssUSl8MCxpPShpPWkrTWF0aC5pbXVsKGssdHQpfDApK01hdGguaW11bChNLFEpfDAsYT1hK01hdGguaW11bChNLHR0KXwwLG49bitNYXRoLmltdWwoYixydCl8MCxpPShpPWkrTWF0aC5pbXVsKGIsbnQpfDApK01hdGguaW11bChfLHJ0KXwwLGE9YStNYXRoLmltdWwoXyxudCl8MCxuPW4rTWF0aC5pbXVsKHYsYXQpfDAsaT0oaT1pK01hdGguaW11bCh2LG90KXwwKStNYXRoLmltdWwoeSxhdCl8MCxhPWErTWF0aC5pbXVsKHksb3QpfDAsbj1uK01hdGguaW11bChkLGx0KXwwLGk9KGk9aStNYXRoLmltdWwoZCxjdCl8MCkrTWF0aC5pbXVsKGcsbHQpfDAsYT1hK01hdGguaW11bChnLGN0KXwwO3ZhciBNdD0oYysobj1uK01hdGguaW11bChoLGh0KXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoaCxmdCl8MCkrTWF0aC5pbXVsKGYsaHQpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoZixmdCl8MCkrKGk+Pj4xMyl8MCkrKE10Pj4+MjYpfDAsTXQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEYsViksaT0oaT1NYXRoLmltdWwoRixVKSkrTWF0aC5pbXVsKE4sVil8MCxhPU1hdGguaW11bChOLFUpLG49bitNYXRoLmltdWwoRCxIKXwwLGk9KGk9aStNYXRoLmltdWwoRCxHKXwwKStNYXRoLmltdWwoUixIKXwwLGE9YStNYXRoLmltdWwoUixHKXwwLG49bitNYXRoLmltdWwoUCxZKXwwLGk9KGk9aStNYXRoLmltdWwoUCxYKXwwKStNYXRoLmltdWwoSSxZKXwwLGE9YStNYXRoLmltdWwoSSxYKXwwLG49bitNYXRoLmltdWwoQywkKXwwLGk9KGk9aStNYXRoLmltdWwoQyxKKXwwKStNYXRoLmltdWwoTCwkKXwwLGE9YStNYXRoLmltdWwoTCxKKXwwLG49bitNYXRoLmltdWwoVCxRKXwwLGk9KGk9aStNYXRoLmltdWwoVCx0dCl8MCkrTWF0aC5pbXVsKFMsUSl8MCxhPWErTWF0aC5pbXVsKFMsdHQpfDAsbj1uK01hdGguaW11bChrLHJ0KXwwLGk9KGk9aStNYXRoLmltdWwoayxudCl8MCkrTWF0aC5pbXVsKE0scnQpfDAsYT1hK01hdGguaW11bChNLG50KXwwLG49bitNYXRoLmltdWwoYixhdCl8MCxpPShpPWkrTWF0aC5pbXVsKGIsb3QpfDApK01hdGguaW11bChfLGF0KXwwLGE9YStNYXRoLmltdWwoXyxvdCl8MCxuPW4rTWF0aC5pbXVsKHYsbHQpfDAsaT0oaT1pK01hdGguaW11bCh2LGN0KXwwKStNYXRoLmltdWwoeSxsdCl8MCxhPWErTWF0aC5pbXVsKHksY3QpfDAsbj1uK01hdGguaW11bChkLGh0KXwwLGk9KGk9aStNYXRoLmltdWwoZCxmdCl8MCkrTWF0aC5pbXVsKGcsaHQpfDAsYT1hK01hdGguaW11bChnLGZ0KXwwO3ZhciBBdD0oYysobj1uK01hdGguaW11bChoLGR0KXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoaCxndCl8MCkrTWF0aC5pbXVsKGYsZHQpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoZixndCl8MCkrKGk+Pj4xMyl8MCkrKEF0Pj4+MjYpfDAsQXQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEYsSCksaT0oaT1NYXRoLmltdWwoRixHKSkrTWF0aC5pbXVsKE4sSCl8MCxhPU1hdGguaW11bChOLEcpLG49bitNYXRoLmltdWwoRCxZKXwwLGk9KGk9aStNYXRoLmltdWwoRCxYKXwwKStNYXRoLmltdWwoUixZKXwwLGE9YStNYXRoLmltdWwoUixYKXwwLG49bitNYXRoLmltdWwoUCwkKXwwLGk9KGk9aStNYXRoLmltdWwoUCxKKXwwKStNYXRoLmltdWwoSSwkKXwwLGE9YStNYXRoLmltdWwoSSxKKXwwLG49bitNYXRoLmltdWwoQyxRKXwwLGk9KGk9aStNYXRoLmltdWwoQyx0dCl8MCkrTWF0aC5pbXVsKEwsUSl8MCxhPWErTWF0aC5pbXVsKEwsdHQpfDAsbj1uK01hdGguaW11bChULHJ0KXwwLGk9KGk9aStNYXRoLmltdWwoVCxudCl8MCkrTWF0aC5pbXVsKFMscnQpfDAsYT1hK01hdGguaW11bChTLG50KXwwLG49bitNYXRoLmltdWwoayxhdCl8MCxpPShpPWkrTWF0aC5pbXVsKGssb3QpfDApK01hdGguaW11bChNLGF0KXwwLGE9YStNYXRoLmltdWwoTSxvdCl8MCxuPW4rTWF0aC5pbXVsKGIsbHQpfDAsaT0oaT1pK01hdGguaW11bChiLGN0KXwwKStNYXRoLmltdWwoXyxsdCl8MCxhPWErTWF0aC5pbXVsKF8sY3QpfDAsbj1uK01hdGguaW11bCh2LGh0KXwwLGk9KGk9aStNYXRoLmltdWwodixmdCl8MCkrTWF0aC5pbXVsKHksaHQpfDAsYT1hK01hdGguaW11bCh5LGZ0KXwwO3ZhciBUdD0oYysobj1uK01hdGguaW11bChkLGR0KXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoZCxndCl8MCkrTWF0aC5pbXVsKGcsZHQpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoZyxndCl8MCkrKGk+Pj4xMyl8MCkrKFR0Pj4+MjYpfDAsVHQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEYsWSksaT0oaT1NYXRoLmltdWwoRixYKSkrTWF0aC5pbXVsKE4sWSl8MCxhPU1hdGguaW11bChOLFgpLG49bitNYXRoLmltdWwoRCwkKXwwLGk9KGk9aStNYXRoLmltdWwoRCxKKXwwKStNYXRoLmltdWwoUiwkKXwwLGE9YStNYXRoLmltdWwoUixKKXwwLG49bitNYXRoLmltdWwoUCxRKXwwLGk9KGk9aStNYXRoLmltdWwoUCx0dCl8MCkrTWF0aC5pbXVsKEksUSl8MCxhPWErTWF0aC5pbXVsKEksdHQpfDAsbj1uK01hdGguaW11bChDLHJ0KXwwLGk9KGk9aStNYXRoLmltdWwoQyxudCl8MCkrTWF0aC5pbXVsKEwscnQpfDAsYT1hK01hdGguaW11bChMLG50KXwwLG49bitNYXRoLmltdWwoVCxhdCl8MCxpPShpPWkrTWF0aC5pbXVsKFQsb3QpfDApK01hdGguaW11bChTLGF0KXwwLGE9YStNYXRoLmltdWwoUyxvdCl8MCxuPW4rTWF0aC5pbXVsKGssbHQpfDAsaT0oaT1pK01hdGguaW11bChrLGN0KXwwKStNYXRoLmltdWwoTSxsdCl8MCxhPWErTWF0aC5pbXVsKE0sY3QpfDAsbj1uK01hdGguaW11bChiLGh0KXwwLGk9KGk9aStNYXRoLmltdWwoYixmdCl8MCkrTWF0aC5pbXVsKF8saHQpfDAsYT1hK01hdGguaW11bChfLGZ0KXwwO3ZhciBTdD0oYysobj1uK01hdGguaW11bCh2LGR0KXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwodixndCl8MCkrTWF0aC5pbXVsKHksZHQpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoeSxndCl8MCkrKGk+Pj4xMyl8MCkrKFN0Pj4+MjYpfDAsU3QmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEYsJCksaT0oaT1NYXRoLmltdWwoRixKKSkrTWF0aC5pbXVsKE4sJCl8MCxhPU1hdGguaW11bChOLEopLG49bitNYXRoLmltdWwoRCxRKXwwLGk9KGk9aStNYXRoLmltdWwoRCx0dCl8MCkrTWF0aC5pbXVsKFIsUSl8MCxhPWErTWF0aC5pbXVsKFIsdHQpfDAsbj1uK01hdGguaW11bChQLHJ0KXwwLGk9KGk9aStNYXRoLmltdWwoUCxudCl8MCkrTWF0aC5pbXVsKEkscnQpfDAsYT1hK01hdGguaW11bChJLG50KXwwLG49bitNYXRoLmltdWwoQyxhdCl8MCxpPShpPWkrTWF0aC5pbXVsKEMsb3QpfDApK01hdGguaW11bChMLGF0KXwwLGE9YStNYXRoLmltdWwoTCxvdCl8MCxuPW4rTWF0aC5pbXVsKFQsbHQpfDAsaT0oaT1pK01hdGguaW11bChULGN0KXwwKStNYXRoLmltdWwoUyxsdCl8MCxhPWErTWF0aC5pbXVsKFMsY3QpfDAsbj1uK01hdGguaW11bChrLGh0KXwwLGk9KGk9aStNYXRoLmltdWwoayxmdCl8MCkrTWF0aC5pbXVsKE0saHQpfDAsYT1hK01hdGguaW11bChNLGZ0KXwwO3ZhciBFdD0oYysobj1uK01hdGguaW11bChiLGR0KXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoYixndCl8MCkrTWF0aC5pbXVsKF8sZHQpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoXyxndCl8MCkrKGk+Pj4xMyl8MCkrKEV0Pj4+MjYpfDAsRXQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEYsUSksaT0oaT1NYXRoLmltdWwoRix0dCkpK01hdGguaW11bChOLFEpfDAsYT1NYXRoLmltdWwoTix0dCksbj1uK01hdGguaW11bChELHJ0KXwwLGk9KGk9aStNYXRoLmltdWwoRCxudCl8MCkrTWF0aC5pbXVsKFIscnQpfDAsYT1hK01hdGguaW11bChSLG50KXwwLG49bitNYXRoLmltdWwoUCxhdCl8MCxpPShpPWkrTWF0aC5pbXVsKFAsb3QpfDApK01hdGguaW11bChJLGF0KXwwLGE9YStNYXRoLmltdWwoSSxvdCl8MCxuPW4rTWF0aC5pbXVsKEMsbHQpfDAsaT0oaT1pK01hdGguaW11bChDLGN0KXwwKStNYXRoLmltdWwoTCxsdCl8MCxhPWErTWF0aC5pbXVsKEwsY3QpfDAsbj1uK01hdGguaW11bChULGh0KXwwLGk9KGk9aStNYXRoLmltdWwoVCxmdCl8MCkrTWF0aC5pbXVsKFMsaHQpfDAsYT1hK01hdGguaW11bChTLGZ0KXwwO3ZhciBDdD0oYysobj1uK01hdGguaW11bChrLGR0KXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoayxndCl8MCkrTWF0aC5pbXVsKE0sZHQpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoTSxndCl8MCkrKGk+Pj4xMyl8MCkrKEN0Pj4+MjYpfDAsQ3QmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEYscnQpLGk9KGk9TWF0aC5pbXVsKEYsbnQpKStNYXRoLmltdWwoTixydCl8MCxhPU1hdGguaW11bChOLG50KSxuPW4rTWF0aC5pbXVsKEQsYXQpfDAsaT0oaT1pK01hdGguaW11bChELG90KXwwKStNYXRoLmltdWwoUixhdCl8MCxhPWErTWF0aC5pbXVsKFIsb3QpfDAsbj1uK01hdGguaW11bChQLGx0KXwwLGk9KGk9aStNYXRoLmltdWwoUCxjdCl8MCkrTWF0aC5pbXVsKEksbHQpfDAsYT1hK01hdGguaW11bChJLGN0KXwwLG49bitNYXRoLmltdWwoQyxodCl8MCxpPShpPWkrTWF0aC5pbXVsKEMsZnQpfDApK01hdGguaW11bChMLGh0KXwwLGE9YStNYXRoLmltdWwoTCxmdCl8MDt2YXIgTHQ9KGMrKG49bitNYXRoLmltdWwoVCxkdCl8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKFQsZ3QpfDApK01hdGguaW11bChTLGR0KXwwKSk8PDEzKXwwO2M9KChhPWErTWF0aC5pbXVsKFMsZ3QpfDApKyhpPj4+MTMpfDApKyhMdD4+PjI2KXwwLEx0Jj02NzEwODg2MyxuPU1hdGguaW11bChGLGF0KSxpPShpPU1hdGguaW11bChGLG90KSkrTWF0aC5pbXVsKE4sYXQpfDAsYT1NYXRoLmltdWwoTixvdCksbj1uK01hdGguaW11bChELGx0KXwwLGk9KGk9aStNYXRoLmltdWwoRCxjdCl8MCkrTWF0aC5pbXVsKFIsbHQpfDAsYT1hK01hdGguaW11bChSLGN0KXwwLG49bitNYXRoLmltdWwoUCxodCl8MCxpPShpPWkrTWF0aC5pbXVsKFAsZnQpfDApK01hdGguaW11bChJLGh0KXwwLGE9YStNYXRoLmltdWwoSSxmdCl8MDt2YXIgenQ9KGMrKG49bitNYXRoLmltdWwoQyxkdCl8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKEMsZ3QpfDApK01hdGguaW11bChMLGR0KXwwKSk8PDEzKXwwO2M9KChhPWErTWF0aC5pbXVsKEwsZ3QpfDApKyhpPj4+MTMpfDApKyh6dD4+PjI2KXwwLHp0Jj02NzEwODg2MyxuPU1hdGguaW11bChGLGx0KSxpPShpPU1hdGguaW11bChGLGN0KSkrTWF0aC5pbXVsKE4sbHQpfDAsYT1NYXRoLmltdWwoTixjdCksbj1uK01hdGguaW11bChELGh0KXwwLGk9KGk9aStNYXRoLmltdWwoRCxmdCl8MCkrTWF0aC5pbXVsKFIsaHQpfDAsYT1hK01hdGguaW11bChSLGZ0KXwwO3ZhciBQdD0oYysobj1uK01hdGguaW11bChQLGR0KXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoUCxndCl8MCkrTWF0aC5pbXVsKEksZHQpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoSSxndCl8MCkrKGk+Pj4xMyl8MCkrKFB0Pj4+MjYpfDAsUHQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEYsaHQpLGk9KGk9TWF0aC5pbXVsKEYsZnQpKStNYXRoLmltdWwoTixodCl8MCxhPU1hdGguaW11bChOLGZ0KTt2YXIgSXQ9KGMrKG49bitNYXRoLmltdWwoRCxkdCl8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKEQsZ3QpfDApK01hdGguaW11bChSLGR0KXwwKSk8PDEzKXwwO2M9KChhPWErTWF0aC5pbXVsKFIsZ3QpfDApKyhpPj4+MTMpfDApKyhJdD4+PjI2KXwwLEl0Jj02NzEwODg2Mzt2YXIgT3Q9KGMrKG49TWF0aC5pbXVsKEYsZHQpKXwwKSsoKDgxOTEmKGk9KGk9TWF0aC5pbXVsKEYsZ3QpKStNYXRoLmltdWwoTixkdCl8MCkpPDwxMyl8MDtyZXR1cm4gYz0oKGE9TWF0aC5pbXVsKE4sZ3QpKSsoaT4+PjEzKXwwKSsoT3Q+Pj4yNil8MCxPdCY9NjcxMDg4NjMsbFswXT1tdCxsWzFdPXZ0LGxbMl09eXQsbFszXT14dCxsWzRdPWJ0LGxbNV09X3QsbFs2XT13dCxsWzddPWt0LGxbOF09TXQsbFs5XT1BdCxsWzEwXT1UdCxsWzExXT1TdCxsWzEyXT1FdCxsWzEzXT1DdCxsWzE0XT1MdCxsWzE1XT16dCxsWzE2XT1QdCxsWzE3XT1JdCxsWzE4XT1PdCwwIT09YyYmKGxbMTldPWMsci5sZW5ndGgrKykscn07ZnVuY3Rpb24gZCh0LGUscil7cmV0dXJuKG5ldyBnKS5tdWxwKHQsZSxyKX1mdW5jdGlvbiBnKHQsZSl7dGhpcy54PXQsdGhpcy55PWV9TWF0aC5pbXVsfHwocD1mKSxhLnByb3RvdHlwZS5tdWxUbz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMubGVuZ3RoK3QubGVuZ3RoO3JldHVybiAxMD09PXRoaXMubGVuZ3RoJiYxMD09PXQubGVuZ3RoP3AodGhpcyx0LGUpOnI8NjM/Zih0aGlzLHQsZSk6cjwxMDI0P2Z1bmN0aW9uKHQsZSxyKXtyLm5lZ2F0aXZlPWUubmVnYXRpdmVedC5uZWdhdGl2ZSxyLmxlbmd0aD10Lmxlbmd0aCtlLmxlbmd0aDtmb3IodmFyIG49MCxpPTAsYT0wO2E8ci5sZW5ndGgtMTthKyspe3ZhciBvPWk7aT0wO2Zvcih2YXIgcz02NzEwODg2MyZuLGw9TWF0aC5taW4oYSxlLmxlbmd0aC0xKSxjPU1hdGgubWF4KDAsYS10Lmxlbmd0aCsxKTtjPD1sO2MrKyl7dmFyIHU9YS1jLGg9KDB8dC53b3Jkc1t1XSkqKDB8ZS53b3Jkc1tjXSksZj02NzEwODg2MyZoO3M9NjcxMDg4NjMmKGY9ZitzfDApLGkrPShvPShvPW8rKGgvNjcxMDg4NjR8MCl8MCkrKGY+Pj4yNil8MCk+Pj4yNixvJj02NzEwODg2M31yLndvcmRzW2FdPXMsbj1vLG89aX1yZXR1cm4gMCE9PW4/ci53b3Jkc1thXT1uOnIubGVuZ3RoLS0sci5zdHJpcCgpfSh0aGlzLHQsZSk6ZCh0aGlzLHQsZSl9LGcucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0KSxyPWEucHJvdG90eXBlLl9jb3VudEJpdHModCktMSxuPTA7bjx0O24rKyllW25dPXRoaXMucmV2QmluKG4scix0KTtyZXR1cm4gZX0sZy5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKHQsZSxyKXtpZigwPT09dHx8dD09PXItMSlyZXR1cm4gdDtmb3IodmFyIG49MCxpPTA7aTxlO2krKylufD0oMSZ0KTw8ZS1pLTEsdD4+PTE7cmV0dXJuIG59LGcucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24odCxlLHIsbixpLGEpe2Zvcih2YXIgbz0wO288YTtvKyspbltvXT1lW3Rbb11dLGlbb109clt0W29dXX0sZy5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt0aGlzLnBlcm11dGUoYSx0LGUscixuLGkpO2Zvcih2YXIgbz0xO288aTtvPDw9MSlmb3IodmFyIHM9bzw8MSxsPU1hdGguY29zKDIqTWF0aC5QSS9zKSxjPU1hdGguc2luKDIqTWF0aC5QSS9zKSx1PTA7dTxpO3UrPXMpZm9yKHZhciBoPWwsZj1jLHA9MDtwPG87cCsrKXt2YXIgZD1yW3UrcF0sZz1uW3UrcF0sbT1yW3UrcCtvXSx2PW5bdStwK29dLHk9aCptLWYqdjt2PWgqditmKm0sbT15LHJbdStwXT1kK20sblt1K3BdPWcrdixyW3UrcCtvXT1kLW0sblt1K3Arb109Zy12LHAhPT1zJiYoeT1sKmgtYypmLGY9bCpmK2MqaCxoPXkpfX0sZy5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24odCxlKXt2YXIgcj0xfE1hdGgubWF4KGUsdCksbj0xJnIsaT0wO2ZvcihyPXIvMnwwO3I7cj4+Pj0xKWkrKztyZXR1cm4gMTw8aSsxK259LGcucHJvdG90eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbih0LGUscil7aWYoIShyPD0xKSlmb3IodmFyIG49MDtuPHIvMjtuKyspe3ZhciBpPXRbbl07dFtuXT10W3Itbi0xXSx0W3Itbi0xXT1pLGk9ZVtuXSxlW25dPS1lW3Itbi0xXSxlW3Itbi0xXT0taX19LGcucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLG49MDtuPGUvMjtuKyspe3ZhciBpPTgxOTIqTWF0aC5yb3VuZCh0WzIqbisxXS9lKStNYXRoLnJvdW5kKHRbMipuXS9lKStyO3Rbbl09NjcxMDg4NjMmaSxyPWk8NjcxMDg4NjQ/MDppLzY3MTA4ODY0fDB9cmV0dXJuIHR9LGcucHJvdG90eXBlLmNvbnZlcnQxM2I9ZnVuY3Rpb24odCxlLHIsaSl7Zm9yKHZhciBhPTAsbz0wO288ZTtvKyspYSs9MHx0W29dLHJbMipvXT04MTkxJmEsYT4+Pj0xMyxyWzIqbysxXT04MTkxJmEsYT4+Pj0xMztmb3Iobz0yKmU7bzxpOysrbylyW29dPTA7bigwPT09YSksbigwPT0oLTgxOTImYSkpfSxnLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodCkscj0wO3I8dDtyKyspZVtyXT0wO3JldHVybiBlfSxnLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj0yKnRoaXMuZ3Vlc3NMZW4xM2IodC5sZW5ndGgsZS5sZW5ndGgpLGk9dGhpcy5tYWtlUkJUKG4pLGE9dGhpcy5zdHViKG4pLG89bmV3IEFycmF5KG4pLHM9bmV3IEFycmF5KG4pLGw9bmV3IEFycmF5KG4pLGM9bmV3IEFycmF5KG4pLHU9bmV3IEFycmF5KG4pLGg9bmV3IEFycmF5KG4pLGY9ci53b3JkcztmLmxlbmd0aD1uLHRoaXMuY29udmVydDEzYih0LndvcmRzLHQubGVuZ3RoLG8sbiksdGhpcy5jb252ZXJ0MTNiKGUud29yZHMsZS5sZW5ndGgsYyxuKSx0aGlzLnRyYW5zZm9ybShvLGEscyxsLG4saSksdGhpcy50cmFuc2Zvcm0oYyxhLHUsaCxuLGkpO2Zvcih2YXIgcD0wO3A8bjtwKyspe3ZhciBkPXNbcF0qdVtwXS1sW3BdKmhbcF07bFtwXT1zW3BdKmhbcF0rbFtwXSp1W3BdLHNbcF09ZH1yZXR1cm4gdGhpcy5jb25qdWdhdGUocyxsLG4pLHRoaXMudHJhbnNmb3JtKHMsbCxmLGEsbixpKSx0aGlzLmNvbmp1Z2F0ZShmLGEsbiksdGhpcy5ub3JtYWxpemUxM2IoZixuKSxyLm5lZ2F0aXZlPXQubmVnYXRpdmVeZS5uZWdhdGl2ZSxyLmxlbmd0aD10Lmxlbmd0aCtlLmxlbmd0aCxyLnN0cmlwKCl9LGEucHJvdG90eXBlLm11bD1mdW5jdGlvbih0KXt2YXIgZT1uZXcgYShudWxsKTtyZXR1cm4gZS53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrdC5sZW5ndGgpLHRoaXMubXVsVG8odCxlKX0sYS5wcm90b3R5cGUubXVsZj1mdW5jdGlvbih0KXt2YXIgZT1uZXcgYShudWxsKTtyZXR1cm4gZS53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrdC5sZW5ndGgpLGQodGhpcyx0LGUpfSxhLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8odCx0aGlzKX0sYS5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24odCl7bigibnVtYmVyIj09dHlwZW9mIHQpLG4odDw2NzEwODg2NCk7Zm9yKHZhciBlPTAscj0wO3I8dGhpcy5sZW5ndGg7cisrKXt2YXIgaT0oMHx0aGlzLndvcmRzW3JdKSp0LGE9KDY3MTA4ODYzJmkpKyg2NzEwODg2MyZlKTtlPj49MjYsZSs9aS82NzEwODg2NHwwLGUrPWE+Pj4yNix0aGlzLndvcmRzW3JdPTY3MTA4ODYzJmF9cmV0dXJuIDAhPT1lJiYodGhpcy53b3Jkc1tyXT1lLHRoaXMubGVuZ3RoKyspLHRoaXN9LGEucHJvdG90eXBlLm11bG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbXVsbih0KX0sYS5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXVsKHRoaXMpfSxhLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW11bCh0aGlzLmNsb25lKCkpfSxhLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24odCl7dmFyIGU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0LmJpdExlbmd0aCgpKSxyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPXIvMjZ8MCxpPXIlMjY7ZVtyXT0odC53b3Jkc1tuXSYxPDxpKT4+Pml9cmV0dXJuIGV9KHQpO2lmKDA9PT1lLmxlbmd0aClyZXR1cm4gbmV3IGEoMSk7Zm9yKHZhciByPXRoaXMsbj0wO248ZS5sZW5ndGgmJjA9PT1lW25dO24rKyxyPXIuc3FyKCkpO2lmKCsrbjxlLmxlbmd0aClmb3IodmFyIGk9ci5zcXIoKTtuPGUubGVuZ3RoO24rKyxpPWkuc3FyKCkpMCE9PWVbbl0mJihyPXIubXVsKGkpKTtyZXR1cm4gcn0sYS5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKHQpe24oIm51bWJlciI9PXR5cGVvZiB0JiZ0Pj0wKTt2YXIgZSxyPXQlMjYsaT0odC1yKS8yNixhPTY3MTA4ODYzPj4+MjYtcjw8MjYtcjtpZigwIT09cil7dmFyIG89MDtmb3IoZT0wO2U8dGhpcy5sZW5ndGg7ZSsrKXt2YXIgcz10aGlzLndvcmRzW2VdJmEsbD0oMHx0aGlzLndvcmRzW2VdKS1zPDxyO3RoaXMud29yZHNbZV09bHxvLG89cz4+PjI2LXJ9byYmKHRoaXMud29yZHNbZV09byx0aGlzLmxlbmd0aCsrKX1pZigwIT09aSl7Zm9yKGU9dGhpcy5sZW5ndGgtMTtlPj0wO2UtLSl0aGlzLndvcmRzW2UraV09dGhpcy53b3Jkc1tlXTtmb3IoZT0wO2U8aTtlKyspdGhpcy53b3Jkc1tlXT0wO3RoaXMubGVuZ3RoKz1pfXJldHVybiB0aGlzLnN0cmlwKCl9LGEucHJvdG90eXBlLmlzaGxuPWZ1bmN0aW9uKHQpe3JldHVybiBuKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hsbih0KX0sYS5wcm90b3R5cGUuaXVzaHJuPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaTtuKCJudW1iZXIiPT10eXBlb2YgdCYmdD49MCksaT1lPyhlLWUlMjYpLzI2OjA7dmFyIGE9dCUyNixvPU1hdGgubWluKCh0LWEpLzI2LHRoaXMubGVuZ3RoKSxzPTY3MTA4ODYzXjY3MTA4ODYzPj4+YTw8YSxsPXI7aWYoaS09byxpPU1hdGgubWF4KDAsaSksbCl7Zm9yKHZhciBjPTA7YzxvO2MrKylsLndvcmRzW2NdPXRoaXMud29yZHNbY107bC5sZW5ndGg9b31pZigwPT09byk7ZWxzZSBpZih0aGlzLmxlbmd0aD5vKWZvcih0aGlzLmxlbmd0aC09byxjPTA7Yzx0aGlzLmxlbmd0aDtjKyspdGhpcy53b3Jkc1tjXT10aGlzLndvcmRzW2Mrb107ZWxzZSB0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MTt2YXIgdT0wO2ZvcihjPXRoaXMubGVuZ3RoLTE7Yz49MCYmKDAhPT11fHxjPj1pKTtjLS0pe3ZhciBoPTB8dGhpcy53b3Jkc1tjXTt0aGlzLndvcmRzW2NdPXU8PDI2LWF8aD4+PmEsdT1oJnN9cmV0dXJuIGwmJjAhPT11JiYobC53b3Jkc1tsLmxlbmd0aCsrXT11KSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5zdHJpcCgpfSxhLnByb3RvdHlwZS5pc2hybj1mdW5jdGlvbih0LGUscil7cmV0dXJuIG4oMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaHJuKHQsZSxyKX0sYS5wcm90b3R5cGUuc2hsbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKHQpfSxhLnByb3RvdHlwZS51c2hsbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hsbih0KX0sYS5wcm90b3R5cGUuc2hybj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaHJuKHQpfSxhLnByb3RvdHlwZS51c2hybj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hybih0KX0sYS5wcm90b3R5cGUudGVzdG49ZnVuY3Rpb24odCl7bigibnVtYmVyIj09dHlwZW9mIHQmJnQ+PTApO3ZhciBlPXQlMjYscj0odC1lKS8yNixpPTE8PGU7cmV0dXJuISh0aGlzLmxlbmd0aDw9cikmJiEhKHRoaXMud29yZHNbcl0maSl9LGEucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbih0KXtuKCJudW1iZXIiPT10eXBlb2YgdCYmdD49MCk7dmFyIGU9dCUyNixyPSh0LWUpLzI2O2lmKG4oMD09PXRoaXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIpLHRoaXMubGVuZ3RoPD1yKXJldHVybiB0aGlzO2lmKDAhPT1lJiZyKyssdGhpcy5sZW5ndGg9TWF0aC5taW4ocix0aGlzLmxlbmd0aCksMCE9PWUpe3ZhciBpPTY3MTA4ODYzXjY3MTA4ODYzPj4+ZTw8ZTt0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj1pfXJldHVybiB0aGlzLnN0cmlwKCl9LGEucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKHQpfSxhLnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbih0KXtyZXR1cm4gbigibnVtYmVyIj09dHlwZW9mIHQpLG4odDw2NzEwODg2NCksdDwwP3RoaXMuaXN1Ym4oLXQpOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8dD8odGhpcy53b3Jkc1swXT10LSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4odCksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKHQpfSxhLnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24odCl7dGhpcy53b3Jkc1swXSs9dDtmb3IodmFyIGU9MDtlPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW2VdPj02NzEwODg2NDtlKyspdGhpcy53b3Jkc1tlXS09NjcxMDg4NjQsZT09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1tlKzFdPTE6dGhpcy53b3Jkc1tlKzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLGUrMSksdGhpc30sYS5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24odCl7aWYobigibnVtYmVyIj09dHlwZW9mIHQpLG4odDw2NzEwODg2NCksdDwwKXJldHVybiB0aGlzLmlhZGRuKC10KTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4odCksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09dCwxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgZT0wO2U8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbZV08MDtlKyspdGhpcy53b3Jkc1tlXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1tlKzFdLT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LGEucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbih0KX0sYS5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKHQpfSxhLnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSxhLnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sYS5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaSxhLG89dC5sZW5ndGgrcjt0aGlzLl9leHBhbmQobyk7dmFyIHM9MDtmb3IoaT0wO2k8dC5sZW5ndGg7aSsrKXthPSgwfHRoaXMud29yZHNbaStyXSkrczt2YXIgbD0oMHx0LndvcmRzW2ldKSplO3M9KChhLT02NzEwODg2MyZsKT4+MjYpLShsLzY3MTA4ODY0fDApLHRoaXMud29yZHNbaStyXT02NzEwODg2MyZhfWZvcig7aTx0aGlzLmxlbmd0aC1yO2krKylzPShhPSgwfHRoaXMud29yZHNbaStyXSkrcyk+PjI2LHRoaXMud29yZHNbaStyXT02NzEwODg2MyZhO2lmKDA9PT1zKXJldHVybiB0aGlzLnN0cmlwKCk7Zm9yKG4oLTE9PT1zKSxzPTAsaT0wO2k8dGhpcy5sZW5ndGg7aSsrKXM9KGE9LSgwfHRoaXMud29yZHNbaV0pK3MpPj4yNix0aGlzLndvcmRzW2ldPTY3MTA4ODYzJmE7cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLnN0cmlwKCl9LGEucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uKHQsZSl7dmFyIHI9KHRoaXMubGVuZ3RoLHQubGVuZ3RoKSxuPXRoaXMuY2xvbmUoKSxpPXQsbz0wfGkud29yZHNbaS5sZW5ndGgtMV07MCE9PShyPTI2LXRoaXMuX2NvdW50Qml0cyhvKSkmJihpPWkudXNobG4ociksbi5pdXNobG4ociksbz0wfGkud29yZHNbaS5sZW5ndGgtMV0pO3ZhciBzLGw9bi5sZW5ndGgtaS5sZW5ndGg7aWYoIm1vZCIhPT1lKXsocz1uZXcgYShudWxsKSkubGVuZ3RoPWwrMSxzLndvcmRzPW5ldyBBcnJheShzLmxlbmd0aCk7Zm9yKHZhciBjPTA7YzxzLmxlbmd0aDtjKyspcy53b3Jkc1tjXT0wfXZhciB1PW4uY2xvbmUoKS5faXNobG5zdWJtdWwoaSwxLGwpOzA9PT11Lm5lZ2F0aXZlJiYobj11LHMmJihzLndvcmRzW2xdPTEpKTtmb3IodmFyIGg9bC0xO2g+PTA7aC0tKXt2YXIgZj02NzEwODg2NCooMHxuLndvcmRzW2kubGVuZ3RoK2hdKSsoMHxuLndvcmRzW2kubGVuZ3RoK2gtMV0pO2ZvcihmPU1hdGgubWluKGYvb3wwLDY3MTA4ODYzKSxuLl9pc2hsbnN1Ym11bChpLGYsaCk7MCE9PW4ubmVnYXRpdmU7KWYtLSxuLm5lZ2F0aXZlPTAsbi5faXNobG5zdWJtdWwoaSwxLGgpLG4uaXNaZXJvKCl8fChuLm5lZ2F0aXZlXj0xKTtzJiYocy53b3Jkc1toXT1mKX1yZXR1cm4gcyYmcy5zdHJpcCgpLG4uc3RyaXAoKSwiZGl2IiE9PWUmJjAhPT1yJiZuLml1c2hybihyKSx7ZGl2OnN8fG51bGwsbW9kOm59fSxhLnByb3RvdHlwZS5kaXZtb2Q9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBuKCF0LmlzWmVybygpKSx0aGlzLmlzWmVybygpP3tkaXY6bmV3IGEoMCksbW9kOm5ldyBhKDApfTowIT09dGhpcy5uZWdhdGl2ZSYmMD09PXQubmVnYXRpdmU/KHM9dGhpcy5uZWcoKS5kaXZtb2QodCxlKSwibW9kIiE9PWUmJihpPXMuZGl2Lm5lZygpKSwiZGl2IiE9PWUmJihvPXMubW9kLm5lZygpLHImJjAhPT1vLm5lZ2F0aXZlJiZvLmlhZGQodCkpLHtkaXY6aSxtb2Q6b30pOjA9PT10aGlzLm5lZ2F0aXZlJiYwIT09dC5uZWdhdGl2ZT8ocz10aGlzLmRpdm1vZCh0Lm5lZygpLGUpLCJtb2QiIT09ZSYmKGk9cy5kaXYubmVnKCkpLHtkaXY6aSxtb2Q6cy5tb2R9KTowIT0odGhpcy5uZWdhdGl2ZSZ0Lm5lZ2F0aXZlKT8ocz10aGlzLm5lZygpLmRpdm1vZCh0Lm5lZygpLGUpLCJkaXYiIT09ZSYmKG89cy5tb2QubmVnKCksciYmMCE9PW8ubmVnYXRpdmUmJm8uaXN1Yih0KSkse2RpdjpzLmRpdixtb2Q6b30pOnQubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcCh0KTwwP3tkaXY6bmV3IGEoMCksbW9kOnRoaXN9OjE9PT10Lmxlbmd0aD8iZGl2Ij09PWU/e2Rpdjp0aGlzLmRpdm4odC53b3Jkc1swXSksbW9kOm51bGx9OiJtb2QiPT09ZT97ZGl2Om51bGwsbW9kOm5ldyBhKHRoaXMubW9kbih0LndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKHQud29yZHNbMF0pLG1vZDpuZXcgYSh0aGlzLm1vZG4odC53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KHQsZSk7dmFyIGksbyxzfSxhLnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGl2bW9kKHQsImRpdiIsITEpLmRpdn0sYS5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRpdm1vZCh0LCJtb2QiLCExKS5tb2R9LGEucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGl2bW9kKHQsIm1vZCIsITApLm1vZH0sYS5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5kaXZtb2QodCk7aWYoZS5tb2QuaXNaZXJvKCkpcmV0dXJuIGUuZGl2O3ZhciByPTAhPT1lLmRpdi5uZWdhdGl2ZT9lLm1vZC5pc3ViKHQpOmUubW9kLG49dC51c2hybigxKSxpPXQuYW5kbG4oMSksYT1yLmNtcChuKTtyZXR1cm4gYTwwfHwxPT09aSYmMD09PWE/ZS5kaXY6MCE9PWUuZGl2Lm5lZ2F0aXZlP2UuZGl2LmlzdWJuKDEpOmUuZGl2LmlhZGRuKDEpfSxhLnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKHQpe24odDw9NjcxMDg4NjMpO2Zvcih2YXIgZT0oMTw8MjYpJXQscj0wLGk9dGhpcy5sZW5ndGgtMTtpPj0wO2ktLSlyPShlKnIrKDB8dGhpcy53b3Jkc1tpXSkpJXQ7cmV0dXJuIHJ9LGEucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKHQpe24odDw9NjcxMDg4NjMpO2Zvcih2YXIgZT0wLHI9dGhpcy5sZW5ndGgtMTtyPj0wO3ItLSl7dmFyIGk9KDB8dGhpcy53b3Jkc1tyXSkrNjcxMDg4NjQqZTt0aGlzLndvcmRzW3JdPWkvdHwwLGU9aSV0fXJldHVybiB0aGlzLnN0cmlwKCl9LGEucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bih0KX0sYS5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbih0KXtuKDA9PT10Lm5lZ2F0aXZlKSxuKCF0LmlzWmVybygpKTt2YXIgZT10aGlzLHI9dC5jbG9uZSgpO2U9MCE9PWUubmVnYXRpdmU/ZS51bW9kKHQpOmUuY2xvbmUoKTtmb3IodmFyIGk9bmV3IGEoMSksbz1uZXcgYSgwKSxzPW5ldyBhKDApLGw9bmV3IGEoMSksYz0wO2UuaXNFdmVuKCkmJnIuaXNFdmVuKCk7KWUuaXVzaHJuKDEpLHIuaXVzaHJuKDEpLCsrYztmb3IodmFyIHU9ci5jbG9uZSgpLGg9ZS5jbG9uZSgpOyFlLmlzWmVybygpOyl7Zm9yKHZhciBmPTAscD0xOzA9PShlLndvcmRzWzBdJnApJiZmPDI2OysrZixwPDw9MSk7aWYoZj4wKWZvcihlLml1c2hybihmKTtmLS0gPjA7KShpLmlzT2RkKCl8fG8uaXNPZGQoKSkmJihpLmlhZGQodSksby5pc3ViKGgpKSxpLml1c2hybigxKSxvLml1c2hybigxKTtmb3IodmFyIGQ9MCxnPTE7MD09KHIud29yZHNbMF0mZykmJmQ8MjY7KytkLGc8PD0xKTtpZihkPjApZm9yKHIuaXVzaHJuKGQpO2QtLSA+MDspKHMuaXNPZGQoKXx8bC5pc09kZCgpKSYmKHMuaWFkZCh1KSxsLmlzdWIoaCkpLHMuaXVzaHJuKDEpLGwuaXVzaHJuKDEpO2UuY21wKHIpPj0wPyhlLmlzdWIociksaS5pc3ViKHMpLG8uaXN1YihsKSk6KHIuaXN1YihlKSxzLmlzdWIoaSksbC5pc3ViKG8pKX1yZXR1cm57YTpzLGI6bCxnY2Q6ci5pdXNobG4oYyl9fSxhLnByb3RvdHlwZS5faW52bXA9ZnVuY3Rpb24odCl7bigwPT09dC5uZWdhdGl2ZSksbighdC5pc1plcm8oKSk7dmFyIGU9dGhpcyxyPXQuY2xvbmUoKTtlPTAhPT1lLm5lZ2F0aXZlP2UudW1vZCh0KTplLmNsb25lKCk7Zm9yKHZhciBpLG89bmV3IGEoMSkscz1uZXcgYSgwKSxsPXIuY2xvbmUoKTtlLmNtcG4oMSk+MCYmci5jbXBuKDEpPjA7KXtmb3IodmFyIGM9MCx1PTE7MD09KGUud29yZHNbMF0mdSkmJmM8MjY7KytjLHU8PD0xKTtpZihjPjApZm9yKGUuaXVzaHJuKGMpO2MtLSA+MDspby5pc09kZCgpJiZvLmlhZGQobCksby5pdXNocm4oMSk7Zm9yKHZhciBoPTAsZj0xOzA9PShyLndvcmRzWzBdJmYpJiZoPDI2OysraCxmPDw9MSk7aWYoaD4wKWZvcihyLml1c2hybihoKTtoLS0gPjA7KXMuaXNPZGQoKSYmcy5pYWRkKGwpLHMuaXVzaHJuKDEpO2UuY21wKHIpPj0wPyhlLmlzdWIociksby5pc3ViKHMpKTooci5pc3ViKGUpLHMuaXN1YihvKSl9cmV0dXJuKGk9MD09PWUuY21wbigxKT9vOnMpLmNtcG4oMCk8MCYmaS5pYWRkKHQpLGl9LGEucHJvdG90eXBlLmdjZD1mdW5jdGlvbih0KXtpZih0aGlzLmlzWmVybygpKXJldHVybiB0LmFicygpO2lmKHQuaXNaZXJvKCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFyIGU9dGhpcy5jbG9uZSgpLHI9dC5jbG9uZSgpO2UubmVnYXRpdmU9MCxyLm5lZ2F0aXZlPTA7Zm9yKHZhciBuPTA7ZS5pc0V2ZW4oKSYmci5pc0V2ZW4oKTtuKyspZS5pdXNocm4oMSksci5pdXNocm4oMSk7Zm9yKDs7KXtmb3IoO2UuaXNFdmVuKCk7KWUuaXVzaHJuKDEpO2Zvcig7ci5pc0V2ZW4oKTspci5pdXNocm4oMSk7dmFyIGk9ZS5jbXAocik7aWYoaTwwKXt2YXIgYT1lO2U9cixyPWF9ZWxzZSBpZigwPT09aXx8MD09PXIuY21wbigxKSlicmVhaztlLmlzdWIocil9cmV0dXJuIHIuaXVzaGxuKG4pfSxhLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmVnY2QodCkuYS51bW9kKHQpfSxhLnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4gMD09KDEmdGhpcy53b3Jkc1swXSl9LGEucHJvdG90eXBlLmlzT2RkPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PSgxJnRoaXMud29yZHNbMF0pfSxhLnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy53b3Jkc1swXSZ0fSxhLnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbih0KXtuKCJudW1iZXIiPT10eXBlb2YgdCk7dmFyIGU9dCUyNixyPSh0LWUpLzI2LGk9MTw8ZTtpZih0aGlzLmxlbmd0aDw9cilyZXR1cm4gdGhpcy5fZXhwYW5kKHIrMSksdGhpcy53b3Jkc1tyXXw9aSx0aGlzO2Zvcih2YXIgYT1pLG89cjswIT09YSYmbzx0aGlzLmxlbmd0aDtvKyspe3ZhciBzPTB8dGhpcy53b3Jkc1tvXTthPShzKz1hKT4+PjI2LHMmPTY3MTA4ODYzLHRoaXMud29yZHNbb109c31yZXR1cm4gMCE9PWEmJih0aGlzLndvcmRzW29dPWEsdGhpcy5sZW5ndGgrKyksdGhpc30sYS5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LGEucHJvdG90eXBlLmNtcG49ZnVuY3Rpb24odCl7dmFyIGUscj10PDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiFyKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiZyKXJldHVybiAxO2lmKHRoaXMuc3RyaXAoKSx0aGlzLmxlbmd0aD4xKWU9MTtlbHNle3ImJih0PS10KSxuKHQ8PTY3MTA4ODYzLCJOdW1iZXIgaXMgdG9vIGJpZyIpO3ZhciBpPTB8dGhpcy53b3Jkc1swXTtlPWk9PT10PzA6aTx0Py0xOjF9cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LWU6ZX0sYS5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKHQpe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09dC5uZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXQubmVnYXRpdmUpcmV0dXJuIDE7dmFyIGU9dGhpcy51Y21wKHQpO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1lOmV9LGEucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24odCl7aWYodGhpcy5sZW5ndGg+dC5sZW5ndGgpcmV0dXJuIDE7aWYodGhpcy5sZW5ndGg8dC5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciBlPTAscj10aGlzLmxlbmd0aC0xO3I+PTA7ci0tKXt2YXIgbj0wfHRoaXMud29yZHNbcl0saT0wfHQud29yZHNbcl07aWYobiE9PWkpe248aT9lPS0xOm4+aSYmKGU9MSk7YnJlYWt9fXJldHVybiBlfSxhLnByb3RvdHlwZS5ndG49ZnVuY3Rpb24odCl7cmV0dXJuIDE9PT10aGlzLmNtcG4odCl9LGEucHJvdG90eXBlLmd0PWZ1bmN0aW9uKHQpe3JldHVybiAxPT09dGhpcy5jbXAodCl9LGEucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY21wbih0KT49MH0sYS5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNtcCh0KT49MH0sYS5wcm90b3R5cGUubHRuPWZ1bmN0aW9uKHQpe3JldHVybi0xPT09dGhpcy5jbXBuKHQpfSxhLnByb3RvdHlwZS5sdD1mdW5jdGlvbih0KXtyZXR1cm4tMT09PXRoaXMuY21wKHQpfSxhLnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNtcG4odCk8PTB9LGEucHJvdG90eXBlLmx0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbXAodCk8PTB9LGEucHJvdG90eXBlLmVxbj1mdW5jdGlvbih0KXtyZXR1cm4gMD09PXRoaXMuY21wbih0KX0sYS5wcm90b3R5cGUuZXE9ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT10aGlzLmNtcCh0KX0sYS5yZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyB3KHQpfSxhLnByb3RvdHlwZS50b1JlZD1mdW5jdGlvbih0KXtyZXR1cm4gbighdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSxuKDA9PT10aGlzLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLHQuY29udmVydFRvKHRoaXMpLl9mb3JjZVJlZCh0KX0sYS5wcm90b3R5cGUuZnJvbVJlZD1mdW5jdGlvbigpe3JldHVybiBuKHRoaXMucmVkLCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5yZWQuY29udmVydEZyb20odGhpcyl9LGEucHJvdG90eXBlLl9mb3JjZVJlZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5yZWQ9dCx0aGlzfSxhLnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbih0KXtyZXR1cm4gbighdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLl9mb3JjZVJlZCh0KX0sYS5wcm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLCJyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuYWRkKHRoaXMsdCl9LGEucHJvdG90eXBlLnJlZElBZGQ9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsInJlZElBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaWFkZCh0aGlzLHQpfSxhLnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsInJlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zdWIodGhpcyx0KX0sYS5wcm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pc3ViKHRoaXMsdCl9LGEucHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCwicmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnNobCh0aGlzLHQpfSxhLnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLHQpLHRoaXMucmVkLm11bCh0aGlzLHQpfSxhLnByb3RvdHlwZS5yZWRJTXVsPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyx0KSx0aGlzLnJlZC5pbXVsKHRoaXMsdCl9LGEucHJvdG90eXBlLnJlZFNxcj1mdW5jdGlvbigpe3JldHVybiBuKHRoaXMucmVkLCJyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSxhLnByb3RvdHlwZS5yZWRJU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsInJlZElTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaXNxcih0aGlzKX0sYS5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlvbigpe3JldHVybiBuKHRoaXMucmVkLCJyZWRTcXJ0IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcnQodGhpcyl9LGEucHJvdG90eXBlLnJlZEludm09ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLnJlZCwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSxhLnByb3RvdHlwZS5yZWROZWc9ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLnJlZCwicmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLm5lZyh0aGlzKX0sYS5wcm90b3R5cGUucmVkUG93PWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkJiYhdC5yZWQsInJlZFBvdyhub3JtYWxOdW0pIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQucG93KHRoaXMsdCl9O3ZhciBtPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gdih0LGUpe3RoaXMubmFtZT10LHRoaXMucD1uZXcgYShlLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgYSgxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24geSgpe3YuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiB4KCl7di5jYWxsKHRoaXMsInAyMjQiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMSIpfWZ1bmN0aW9uIGIoKXt2LmNhbGwodGhpcywicDE5MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24gXygpe3YuY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiB3KHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdCl7dmFyIGU9YS5fcHJpbWUodCk7dGhpcy5tPWUucCx0aGlzLnByaW1lPWV9ZWxzZSBuKHQuZ3RuKDEpLCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEiKSx0aGlzLm09dCx0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gayh0KXt3LmNhbGwodGhpcyx0KSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyBhKDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfXYucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgYShudWxsKTtyZXR1cm4gdC53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLHR9LHYucHJvdG90eXBlLmlyZWR1Y2U9ZnVuY3Rpb24odCl7dmFyIGUscj10O2Rve3RoaXMuc3BsaXQocix0aGlzLnRtcCksZT0ocj0ocj10aGlzLmltdWxLKHIpKS5pYWRkKHRoaXMudG1wKSkuYml0TGVuZ3RoKCl9d2hpbGUoZT50aGlzLm4pO3ZhciBuPWU8dGhpcy5uPy0xOnIudWNtcCh0aGlzLnApO3JldHVybiAwPT09bj8oci53b3Jkc1swXT0wLHIubGVuZ3RoPTEpOm4+MD9yLmlzdWIodGhpcy5wKTpyLnN0cmlwKCkscn0sdi5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24odCxlKXt0Lml1c2hybih0aGlzLm4sMCxlKX0sdi5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24odCl7cmV0dXJuIHQuaW11bCh0aGlzLmspfSxpKHksdikseS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9TWF0aC5taW4odC5sZW5ndGgsOSksbj0wO248cjtuKyspZS53b3Jkc1tuXT10LndvcmRzW25dO2lmKGUubGVuZ3RoPXIsdC5sZW5ndGg8PTkpcmV0dXJuIHQud29yZHNbMF09MCx2b2lkKHQubGVuZ3RoPTEpO3ZhciBpPXQud29yZHNbOV07Zm9yKGUud29yZHNbZS5sZW5ndGgrK109NDE5NDMwMyZpLG49MTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBhPTB8dC53b3Jkc1tuXTt0LndvcmRzW24tMTBdPSg0MTk0MzAzJmEpPDw0fGk+Pj4yMixpPWF9aT4+Pj0yMix0LndvcmRzW24tMTBdPWksMD09PWkmJnQubGVuZ3RoPjEwP3QubGVuZ3RoLT0xMDp0Lmxlbmd0aC09OX0seS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24odCl7dC53b3Jkc1t0Lmxlbmd0aF09MCx0LndvcmRzW3QubGVuZ3RoKzFdPTAsdC5sZW5ndGgrPTI7Zm9yKHZhciBlPTAscj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj0wfHQud29yZHNbcl07ZSs9OTc3Km4sdC53b3Jkc1tyXT02NzEwODg2MyZlLGU9NjQqbisoZS82NzEwODg2NHwwKX1yZXR1cm4gMD09PXQud29yZHNbdC5sZW5ndGgtMV0mJih0Lmxlbmd0aC0tLDA9PT10LndvcmRzW3QubGVuZ3RoLTFdJiZ0Lmxlbmd0aC0tKSx0fSxpKHgsdiksaShiLHYpLGkoXyx2KSxfLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPTE5KigwfHQud29yZHNbcl0pK2UsaT02NzEwODg2MyZuO24+Pj49MjYsdC53b3Jkc1tyXT1pLGU9bn1yZXR1cm4gMCE9PWUmJih0LndvcmRzW3QubGVuZ3RoKytdPWUpLHR9LGEuX3ByaW1lPWZ1bmN0aW9uKHQpe2lmKG1bdF0pcmV0dXJuIG1bdF07dmFyIGU7aWYoImsyNTYiPT09dCllPW5ldyB5O2Vsc2UgaWYoInAyMjQiPT09dCllPW5ldyB4O2Vsc2UgaWYoInAxOTIiPT09dCllPW5ldyBiO2Vsc2V7aWYoInAyNTUxOSIhPT10KXRocm93IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAiK3QpO2U9bmV3IF99cmV0dXJuIG1bdF09ZSxlfSx3LnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbih0KXtuKDA9PT10Lm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLG4odC5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sdy5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24odCxlKXtuKDA9PSh0Lm5lZ2F0aXZlfGUubmVnYXRpdmUpLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLG4odC5yZWQmJnQucmVkPT09ZS5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sdy5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UodCkuX2ZvcmNlUmVkKHRoaXMpOnQudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0sdy5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKHQpe3JldHVybiB0LmlzWmVybygpP3QuY2xvbmUoKTp0aGlzLm0uc3ViKHQpLl9mb3JjZVJlZCh0aGlzKX0sdy5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHQsZSl7dGhpcy5fdmVyaWZ5Mih0LGUpO3ZhciByPXQuYWRkKGUpO3JldHVybiByLmNtcCh0aGlzLm0pPj0wJiZyLmlzdWIodGhpcy5tKSxyLl9mb3JjZVJlZCh0aGlzKX0sdy5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbih0LGUpe3RoaXMuX3ZlcmlmeTIodCxlKTt2YXIgcj10LmlhZGQoZSk7cmV0dXJuIHIuY21wKHRoaXMubSk+PTAmJnIuaXN1Yih0aGlzLm0pLHJ9LHcucHJvdG90eXBlLnN1Yj1mdW5jdGlvbih0LGUpe3RoaXMuX3ZlcmlmeTIodCxlKTt2YXIgcj10LnN1YihlKTtyZXR1cm4gci5jbXBuKDApPDAmJnIuaWFkZCh0aGlzLm0pLHIuX2ZvcmNlUmVkKHRoaXMpfSx3LnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKHQsZSl7dGhpcy5fdmVyaWZ5Mih0LGUpO3ZhciByPXQuaXN1YihlKTtyZXR1cm4gci5jbXBuKDApPDAmJnIuaWFkZCh0aGlzLm0pLHJ9LHcucHJvdG90eXBlLnNobD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl92ZXJpZnkxKHQpLHRoaXMuaW1vZCh0LnVzaGxuKGUpKX0sdy5wcm90b3R5cGUuaW11bD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl92ZXJpZnkyKHQsZSksdGhpcy5pbW9kKHQuaW11bChlKSl9LHcucHJvdG90eXBlLm11bD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl92ZXJpZnkyKHQsZSksdGhpcy5pbW9kKHQubXVsKGUpKX0sdy5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbXVsKHQsdC5jbG9uZSgpKX0sdy5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm11bCh0LHQpfSx3LnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKHQpe2lmKHQuaXNaZXJvKCkpcmV0dXJuIHQuY2xvbmUoKTt2YXIgZT10aGlzLm0uYW5kbG4oMyk7aWYobihlJTI9PTEpLDM9PT1lKXt2YXIgcj10aGlzLm0uYWRkKG5ldyBhKDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KHQscil9Zm9yKHZhciBpPXRoaXMubS5zdWJuKDEpLG89MDshaS5pc1plcm8oKSYmMD09PWkuYW5kbG4oMSk7KW8rKyxpLml1c2hybigxKTtuKCFpLmlzWmVybygpKTt2YXIgcz1uZXcgYSgxKS50b1JlZCh0aGlzKSxsPXMucmVkTmVnKCksYz10aGlzLm0uc3VibigxKS5pdXNocm4oMSksdT10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKHU9bmV3IGEoMip1KnUpLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyh1LGMpLmNtcChsKTspdS5yZWRJQWRkKGwpO2Zvcih2YXIgaD10aGlzLnBvdyh1LGkpLGY9dGhpcy5wb3codCxpLmFkZG4oMSkuaXVzaHJuKDEpKSxwPXRoaXMucG93KHQsaSksZD1vOzAhPT1wLmNtcChzKTspe2Zvcih2YXIgZz1wLG09MDswIT09Zy5jbXAocyk7bSsrKWc9Zy5yZWRTcXIoKTtuKG08ZCk7dmFyIHY9dGhpcy5wb3coaCxuZXcgYSgxKS5pdXNobG4oZC1tLTEpKTtmPWYucmVkTXVsKHYpLGg9di5yZWRTcXIoKSxwPXAucmVkTXVsKGgpLGQ9bX1yZXR1cm4gZn0sdy5wcm90b3R5cGUuaW52bT1mdW5jdGlvbih0KXt2YXIgZT10Ll9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09ZS5uZWdhdGl2ZT8oZS5uZWdhdGl2ZT0wLHRoaXMuaW1vZChlKS5yZWROZWcoKSk6dGhpcy5pbW9kKGUpfSx3LnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24odCxlKXtpZihlLmlzWmVybygpKXJldHVybiBuZXcgYSgxKS50b1JlZCh0aGlzKTtpZigwPT09ZS5jbXBuKDEpKXJldHVybiB0LmNsb25lKCk7dmFyIHI9bmV3IEFycmF5KDE2KTtyWzBdPW5ldyBhKDEpLnRvUmVkKHRoaXMpLHJbMV09dDtmb3IodmFyIG49MjtuPHIubGVuZ3RoO24rKylyW25dPXRoaXMubXVsKHJbbi0xXSx0KTt2YXIgaT1yWzBdLG89MCxzPTAsbD1lLmJpdExlbmd0aCgpJTI2O2ZvcigwPT09bCYmKGw9MjYpLG49ZS5sZW5ndGgtMTtuPj0wO24tLSl7Zm9yKHZhciBjPWUud29yZHNbbl0sdT1sLTE7dT49MDt1LS0pe3ZhciBoPWM+PnUmMTtpIT09clswXSYmKGk9dGhpcy5zcXIoaSkpLDAhPT1ofHwwIT09bz8obzw8PTEsb3w9aCwoND09PSsrc3x8MD09PW4mJjA9PT11KSYmKGk9dGhpcy5tdWwoaSxyW29dKSxzPTAsbz0wKSk6cz0wfWw9MjZ9cmV0dXJuIGl9LHcucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbih0KXt2YXIgZT10LnVtb2QodGhpcy5tKTtyZXR1cm4gZT09PXQ/ZS5jbG9uZSgpOmV9LHcucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKHQpe3ZhciBlPXQuY2xvbmUoKTtyZXR1cm4gZS5yZWQ9bnVsbCxlfSxhLm1vbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBrKHQpfSxpKGssdyksay5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmltb2QodC51c2hsbih0aGlzLnNoaWZ0KSl9LGsucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaW1vZCh0Lm11bCh0aGlzLnJpbnYpKTtyZXR1cm4gZS5yZWQ9bnVsbCxlfSxrLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHQsZSl7aWYodC5pc1plcm8oKXx8ZS5pc1plcm8oKSlyZXR1cm4gdC53b3Jkc1swXT0wLHQubGVuZ3RoPTEsdDt2YXIgcj10LmltdWwoZSksbj1yLm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxpPXIuaXN1YihuKS5pdXNocm4odGhpcy5zaGlmdCksYT1pO3JldHVybiBpLmNtcCh0aGlzLm0pPj0wP2E9aS5pc3ViKHRoaXMubSk6aS5jbXBuKDApPDAmJihhPWkuaWFkZCh0aGlzLm0pKSxhLl9mb3JjZVJlZCh0aGlzKX0say5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHQsZSl7aWYodC5pc1plcm8oKXx8ZS5pc1plcm8oKSlyZXR1cm4gbmV3IGEoMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciByPXQubXVsKGUpLG49ci5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksaT1yLmlzdWIobikuaXVzaHJuKHRoaXMuc2hpZnQpLG89aTtyZXR1cm4gaS5jbXAodGhpcy5tKT49MD9vPWkuaXN1Yih0aGlzLm0pOmkuY21wbigwKTwwJiYobz1pLmlhZGQodGhpcy5tKSksby5fZm9yY2VSZWQodGhpcyl9LGsucHJvdG90eXBlLmludm09ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW1vZCh0Ll9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0oInVuZGVmaW5lZCI9PXR5cGVvZiBlfHxlLHRoaXMpfSx7YnVmZmVyOjkxfV0sODM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpPXQubGVuZ3RoLGE9MDtmb3IoZT0wO2U8aTsrK2UpYSs9dFtlXS5sZW5ndGg7dmFyIG89bmV3IEFycmF5KGEpLHM9MDtmb3IoZT0wO2U8aTsrK2Upe3ZhciBsPXRbZV0sYz1sLmxlbmd0aDtmb3Iocj0wO3I8YzsrK3Ipe3ZhciB1PW9bcysrXT1uZXcgQXJyYXkoYy0xKSxoPTA7Zm9yKG49MDtuPGM7KytuKW4hPT1yJiYodVtoKytdPWxbbl0pO2lmKDEmcil7dmFyIGY9dVsxXTt1WzFdPXVbMF0sdVswXT1mfX19cmV0dXJuIG99fSx7fV0sODQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtzd2l0Y2goYXJndW1lbnRzLmxlbmd0aCl7Y2FzZSAxOnJldHVybiBuPVtdLGMoaT10LGksdSwhMCksbjtjYXNlIDI6cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGU/Yyh0LHQsZSwhMCk6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbj1bXSxjKHQsZSx1LCExKSxufSh0LGUpO2Nhc2UgMzpyZXR1cm4gYyh0LGUsciwhMSk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImJveC1pbnRlcnNlY3Q6IEludmFsaWQgYXJndW1lbnRzIil9dmFyIGl9O3ZhciBuLGk9dCgidHlwZWRhcnJheS1wb29sIiksYT10KCIuL2xpYi9zd2VlcCIpLG89dCgiLi9saWIvaW50ZXJzZWN0Iik7ZnVuY3Rpb24gcyh0LGUpe2Zvcih2YXIgcj0wO3I8dDsrK3IpaWYoIShlW3JdPD1lW3IrdF0pKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIGwodCxlLHIsbil7Zm9yKHZhciBpPTAsYT0wLG89MCxsPXQubGVuZ3RoO288bDsrK28pe3ZhciBjPXRbb107aWYoIXMoZSxjKSl7Zm9yKHZhciB1PTA7dTwyKmU7Kyt1KXJbaSsrXT1jW3VdO25bYSsrXT1vfX1yZXR1cm4gYX1mdW5jdGlvbiBjKHQsZSxyLG4pe3ZhciBzPXQubGVuZ3RoLGM9ZS5sZW5ndGg7aWYoIShzPD0wfHxjPD0wKSl7dmFyIHU9dFswXS5sZW5ndGg+Pj4xO2lmKCEodTw9MCkpe3ZhciBoLGY9aS5tYWxsb2NEb3VibGUoMip1KnMpLHA9aS5tYWxsb2NJbnQzMihzKTtpZigocz1sKHQsdSxmLHApKT4wKXtpZigxPT09dSYmbilhLmluaXQocyksaD1hLnN3ZWVwQ29tcGxldGUodSxyLDAscyxmLHAsMCxzLGYscCk7ZWxzZXt2YXIgZD1pLm1hbGxvY0RvdWJsZSgyKnUqYyksZz1pLm1hbGxvY0ludDMyKGMpOyhjPWwoZSx1LGQsZykpPjAmJihhLmluaXQocytjKSxoPTE9PT11P2Euc3dlZXBCaXBhcnRpdGUodSxyLDAscyxmLHAsMCxjLGQsZyk6byh1LHIsbixzLGYscCxjLGQsZyksaS5mcmVlKGQpLGkuZnJlZShnKSl9aS5mcmVlKGYpLGkuZnJlZShwKX1yZXR1cm4gaH19fWZ1bmN0aW9uIHUodCxlKXtuLnB1c2goW3QsZV0pfX0seyIuL2xpYi9pbnRlcnNlY3QiOjg2LCIuL2xpYi9zd2VlcCI6OTAsInR5cGVkYXJyYXktcG9vbCI6NTA3fV0sODU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49ImQiLGk9ImF4IixhPSJ2diIsbz0iZnAiLHM9ImVzIixsPSJycyIsYz0icmUiLHU9InJiIixoPSJyaSIsZj0icnAiLHA9ImJzIixkPSJiZSIsZz0iYmIiLG09ImJpIix2PSJicCIseT0icnYiLHg9IlEiLGI9W24saSxhLGwsYyx1LGgscCxkLGcsbV07ZnVuY3Rpb24gXyh0KXt2YXIgZT0iYnJ1dGVGb3JjZSIrKHQ/IkZ1bGwiOiJQYXJ0aWFsIikscj1bXSxfPWIuc2xpY2UoKTt0fHxfLnNwbGljZSgzLDAsbyk7dmFyIHc9WyJmdW5jdGlvbiAiK2UrIigiK18uam9pbigpKyIpeyJdO2Z1bmN0aW9uIGsoZSxvKXt2YXIgXz1mdW5jdGlvbih0LGUscil7dmFyIG89ImJydXRlRm9yY2UiKyh0PyJSZWQiOiJCbHVlIikrKGU/IkZsaXAiOiIiKSsocj8iRnVsbCI6IiIpLF89WyJmdW5jdGlvbiAiLG8sIigiLGIuam9pbigpLCIpeyIsInZhciAiLHMsIj0yKiIsbiwiOyJdLHc9ImZvcih2YXIgaT0iK2wrIiwiK2YrIj0iK3MrIioiK2wrIjtpPCIrYysiOysraSwiK2YrIis9IitzKyIpe3ZhciB4MD0iK3UrIlsiK2krIisiK2YrIl0seDE9Iit1KyJbIitpKyIrIitmKyIrIituKyJdLHhpPSIraCsiW2ldOyIsaz0iZm9yKHZhciBqPSIrcCsiLCIrdisiPSIrcysiKiIrcCsiO2o8IitkKyI7KytqLCIrdisiKz0iK3MrIil7dmFyIHkwPSIrZysiWyIraSsiKyIrdisiXSwiKyhyPyJ5MT0iK2crIlsiK2krIisiK3YrIisiK24rIl0sIjoiIikrInlpPSIrbSsiW2pdOyI7cmV0dXJuIHQ/Xy5wdXNoKHcseCwiOiIsayk6Xy5wdXNoKGsseCwiOiIsdykscj9fLnB1c2goImlmKHkxPHgwfHx4MTx5MCljb250aW51ZTsiKTplP18ucHVzaCgiaWYoeTA8PXgwfHx4MTx5MCljb250aW51ZTsiKTpfLnB1c2goImlmKHkwPHgwfHx4MTx5MCljb250aW51ZTsiKSxfLnB1c2goImZvcih2YXIgaz0iK2krIisxO2s8IituKyI7KytrKXt2YXIgcjA9Iit1KyJbaysiK2YrIl0scjE9Iit1KyJbaysiK24rIisiK2YrIl0sYjA9IitnKyJbaysiK3YrIl0sYjE9IitnKyJbaysiK24rIisiK3YrIl07aWYocjE8YjB8fGIxPHIwKWNvbnRpbnVlICIreCsiO312YXIgIit5KyI9IithKyIoIiksZT9fLnB1c2goInlpLHhpIik6Xy5wdXNoKCJ4aSx5aSIpLF8ucHVzaCgiKTtpZigiK3krIiE9PXZvaWQgMClyZXR1cm4gIit5KyI7fX19Iikse25hbWU6byxjb2RlOl8uam9pbigiIil9fShlLG8sdCk7ci5wdXNoKF8uY29kZSksdy5wdXNoKCJyZXR1cm4gIitfLm5hbWUrIigiK2Iuam9pbigpKyIpOyIpfXcucHVzaCgiaWYoIitjKyItIitsKyI+IitkKyItIitwKyIpeyIpLHQ/KGsoITAsITEpLHcucHVzaCgifWVsc2V7IiksayghMSwhMSkpOih3LnB1c2goImlmKCIrbysiKXsiKSxrKCEwLCEwKSx3LnB1c2goIn1lbHNleyIpLGsoITAsITEpLHcucHVzaCgifX1lbHNle2lmKCIrbysiKXsiKSxrKCExLCEwKSx3LnB1c2goIn1lbHNleyIpLGsoITEsITEpLHcucHVzaCgifSIpKSx3LnB1c2goIn19cmV0dXJuICIrZSk7dmFyIE09ci5qb2luKCIiKSt3LmpvaW4oIiIpO3JldHVybiBuZXcgRnVuY3Rpb24oTSkoKX1yLnBhcnRpYWw9XyghMSksci5mdWxsPV8oITApfSx7fV0sODY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEsdSxTLEUsQyxMKXshZnVuY3Rpb24odCxlKXt2YXIgcj04KmkubG9nMihlKzEpKih0KzEpfDAsYT1pLm5leHRQb3cyKGIqcik7dy5sZW5ndGg8YSYmKG4uZnJlZSh3KSx3PW4ubWFsbG9jSW50MzIoYSkpO3ZhciBvPWkubmV4dFBvdzIoXypyKTtrPG8mJihuLmZyZWUoayksaz1uLm1hbGxvY0RvdWJsZShvKSl9KHQsYStFKTt2YXIgeixQPTAsST0yKnQ7TShQKyssMCwwLGEsMCxFLHI/MTY6MCwtMS8wLDEvMCkscnx8TShQKyssMCwwLEUsMCxhLDEsLTEvMCwxLzApO2Zvcig7UD4wOyl7dmFyIE89KFAtPTEpKmIsRD13W09dLFI9d1tPKzFdLEI9d1tPKzJdLEY9d1tPKzNdLE49d1tPKzRdLGo9d1tPKzVdLFY9UCpfLFU9a1tWXSxxPWtbVisxXSxIPTEmaixHPSEhKDE2JmopLFc9dSxZPVMsWD1DLFo9TDtpZihIJiYoVz1DLFk9TCxYPXUsWj1TKSwhKDImaiYmKEI9bSh0LEQsUixCLFcsWSxxKSxSPj1CKXx8NCZqJiYoUj12KHQsRCxSLEIsVyxZLFUpKT49Qikpe3ZhciAkPUItUixKPU4tRjtpZihHKXtpZih0KiQqKCQrSik8cCl7aWYodm9pZCAwIT09KHo9bC5zY2FuQ29tcGxldGUodCxELGUsUixCLFcsWSxGLE4sWCxaKSkpcmV0dXJuIHo7Y29udGludWV9fWVsc2V7aWYodCpNYXRoLm1pbigkLEopPGgpe2lmKHZvaWQgMCE9PSh6PW8odCxELGUsSCxSLEIsVyxZLEYsTixYLFopKSlyZXR1cm4gejtjb250aW51ZX1pZih0KiQqSjxmKXtpZih2b2lkIDAhPT0oej1sLnNjYW5CaXBhcnRpdGUodCxELGUsSCxSLEIsVyxZLEYsTixYLFopKSlyZXR1cm4gejtjb250aW51ZX19dmFyIEs9ZCh0LEQsUixCLFcsWSxVLHEpO2lmKFI8SylpZih0KihLLVIpPGgpe2lmKHZvaWQgMCE9PSh6PXModCxEKzEsZSxSLEssVyxZLEYsTixYLFopKSlyZXR1cm4gen1lbHNlIGlmKEQ9PT10LTIpe2lmKHZvaWQgMCE9PSh6PUg/bC5zd2VlcEJpcGFydGl0ZSh0LGUsRixOLFgsWixSLEssVyxZKTpsLnN3ZWVwQmlwYXJ0aXRlKHQsZSxSLEssVyxZLEYsTixYLFopKSlyZXR1cm4gen1lbHNlIE0oUCsrLEQrMSxSLEssRixOLEgsLTEvMCwxLzApLE0oUCsrLEQrMSxGLE4sUixLLDFeSCwtMS8wLDEvMCk7aWYoSzxCKXt2YXIgUT1jKHQsRCxGLE4sWCxaKSx0dD1YW0kqUStEXSxldD1nKHQsRCxRLE4sWCxaLHR0KTtpZihldDxOJiZNKFArKyxELEssQixldCxOLCg0fEgpKyhHPzE2OjApLHR0LHEpLEY8USYmTShQKyssRCxLLEIsRixRLCgyfEgpKyhHPzE2OjApLFUsdHQpLFErMT09PWV0KXtpZih2b2lkIDAhPT0oej1HP1QodCxELGUsSyxCLFcsWSxRLFgsWltRXSk6QSh0LEQsZSxILEssQixXLFksUSxYLFpbUV0pKSlyZXR1cm4gen1lbHNlIGlmKFE8ZXQpe3ZhciBydDtpZihHKXtpZihydD15KHQsRCxLLEIsVyxZLHR0KSxLPHJ0KXt2YXIgbnQ9Zyh0LEQsSyxydCxXLFksdHQpO2lmKEQ9PT10LTIpe2lmKEs8bnQmJnZvaWQgMCE9PSh6PWwuc3dlZXBDb21wbGV0ZSh0LGUsSyxudCxXLFksUSxldCxYLFopKSlyZXR1cm4gejtpZihudDxydCYmdm9pZCAwIT09KHo9bC5zd2VlcEJpcGFydGl0ZSh0LGUsbnQscnQsVyxZLFEsZXQsWCxaKSkpcmV0dXJuIHp9ZWxzZSBLPG50JiZNKFArKyxEKzEsSyxudCxRLGV0LDE2LC0xLzAsMS8wKSxudDxydCYmKE0oUCsrLEQrMSxudCxydCxRLGV0LDAsLTEvMCwxLzApLE0oUCsrLEQrMSxRLGV0LG50LHJ0LDEsLTEvMCwxLzApKX19ZWxzZSBydD1IP3godCxELEssQixXLFksdHQpOnkodCxELEssQixXLFksdHQpLEs8cnQmJihEPT09dC0yP3o9SD9sLnN3ZWVwQmlwYXJ0aXRlKHQsZSxRLGV0LFgsWixLLHJ0LFcsWSk6bC5zd2VlcEJpcGFydGl0ZSh0LGUsSyxydCxXLFksUSxldCxYLFopOihNKFArKyxEKzEsSyxydCxRLGV0LEgsLTEvMCwxLzApLE0oUCsrLEQrMSxRLGV0LEsscnQsMV5ILC0xLzAsMS8wKSkpfX19fX07dmFyIG49dCgidHlwZWRhcnJheS1wb29sIiksaT10KCJiaXQtdHdpZGRsZSIpLGE9dCgiLi9icnV0ZSIpLG89YS5wYXJ0aWFsLHM9YS5mdWxsLGw9dCgiLi9zd2VlcCIpLGM9dCgiLi9tZWRpYW4iKSx1PXQoIi4vcGFydGl0aW9uIiksaD0xMjgsZj0xPDwyMixwPTE8PDIyLGQ9dSgiIShsbz49cDApJiYhKHAxPj1oaSkiLFsicDAiLCJwMSJdKSxnPXUoImxvPT09cDAiLFsicDAiXSksbT11KCJsbzxwMCIsWyJwMCJdKSx2PXUoImhpPD1wMCIsWyJwMCJdKSx5PXUoImxvPD1wMCYmcDA8PWhpIixbInAwIl0pLHg9dSgibG88cDAmJnAwPD1oaSIsWyJwMCJdKSxiPTYsXz0yLHc9bi5tYWxsb2NJbnQzMigxMDI0KSxrPW4ubWFsbG9jRG91YmxlKDEwMjQpO2Z1bmN0aW9uIE0odCxlLHIsbixpLGEsbyxzLGwpe3ZhciBjPWIqdDt3W2NdPWUsd1tjKzFdPXIsd1tjKzJdPW4sd1tjKzNdPWksd1tjKzRdPWEsd1tjKzVdPW87dmFyIHU9Xyp0O2tbdV09cyxrW3UrMV09bH1mdW5jdGlvbiBBKHQsZSxyLG4saSxhLG8scyxsLGMsdSl7dmFyIGg9Mip0LGY9bCpoLHA9Y1tmK2VdO3Q6Zm9yKHZhciBkPWksZz1pKmg7ZDxhOysrZCxnKz1oKXt2YXIgbT1vW2crZV0sdj1vW2crZSt0XTtpZighKHA8bXx8djxwKSYmKCFufHxwIT09bSkpe2Zvcih2YXIgeSx4PXNbZF0sYj1lKzE7Yjx0OysrYil7bT1vW2crYl0sdj1vW2crYit0XTt2YXIgXz1jW2YrYl0sdz1jW2YrYit0XTtpZih2PF98fHc8bSljb250aW51ZSB0fWlmKHZvaWQgMCE9PSh5PW4/cih1LHgpOnIoeCx1KSkpcmV0dXJuIHl9fX1mdW5jdGlvbiBUKHQsZSxyLG4saSxhLG8scyxsLGMpe3ZhciB1PTIqdCxoPXMqdSxmPWxbaCtlXTt0OmZvcih2YXIgcD1uLGQ9bip1O3A8aTsrK3AsZCs9dSl7dmFyIGc9b1twXTtpZihnIT09Yyl7dmFyIG09YVtkK2VdLHY9YVtkK2UrdF07aWYoIShmPG18fHY8Zikpe2Zvcih2YXIgeT1lKzE7eTx0OysreSl7bT1hW2QreV0sdj1hW2QreSt0XTt2YXIgeD1sW2greV0sYj1sW2greSt0XTtpZih2PHh8fGI8bSljb250aW51ZSB0fXZhciBfPXIoZyxjKTtpZih2b2lkIDAhPT1fKXJldHVybiBffX19fX0seyIuL2JydXRlIjo4NSwiLi9tZWRpYW4iOjg3LCIuL3BhcnRpdGlvbiI6ODgsIi4vc3dlZXAiOjkwLCJiaXQtdHdpZGRsZSI6ODAsInR5cGVkYXJyYXktcG9vbCI6NTA3fV0sODc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8scyxsKXtpZihvPD1yKzEpcmV0dXJuIHI7dmFyIGM9cix1PW8saD1vK3I+Pj4xLGY9Mip0LHA9aCxkPXNbZipoK2VdO2Zvcig7Yzx1Oyl7aWYodS1jPGkpe2EodCxlLGMsdSxzLGwpLGQ9c1tmKmgrZV07YnJlYWt9dmFyIGc9dS1jLG09TWF0aC5yYW5kb20oKSpnK2N8MCx2PXNbZiptK2VdLHk9TWF0aC5yYW5kb20oKSpnK2N8MCx4PXNbZip5K2VdLGI9TWF0aC5yYW5kb20oKSpnK2N8MCxfPXNbZipiK2VdO3Y8PXg/Xz49eD8ocD15LGQ9eCk6dj49Xz8ocD1tLGQ9dik6KHA9YixkPV8pOng+PV8/KHA9eSxkPXgpOl8+PXY/KHA9bSxkPXYpOihwPWIsZD1fKTtmb3IodmFyIHc9ZioodS0xKSxrPWYqcCxNPTA7TTxmOysrTSwrK3csKytrKXt2YXIgQT1zW3ddO3Nbd109c1trXSxzW2tdPUF9dmFyIFQ9bFt1LTFdO2xbdS0xXT1sW3BdLGxbcF09VCxwPW4odCxlLGMsdS0xLHMsbCxkKTtmb3IodmFyIHc9ZioodS0xKSxrPWYqcCxNPTA7TTxmOysrTSwrK3csKytrKXt2YXIgQT1zW3ddO3Nbd109c1trXSxzW2tdPUF9dmFyIFQ9bFt1LTFdO2lmKGxbdS0xXT1sW3BdLGxbcF09VCxoPHApe2Zvcih1PXAtMTtjPHUmJnNbZioodS0xKStlXT09PWQ7KXUtPTE7dSs9MX1lbHNle2lmKCEocDxoKSlicmVhaztmb3IoYz1wKzE7Yzx1JiZzW2YqYytlXT09PWQ7KWMrPTF9fXJldHVybiBuKHQsZSxyLGgscyxsLHNbZipoK2VdKX07dmFyIG49dCgiLi9wYXJ0aXRpb24iKSgibG88cDAiLFsicDAiXSksaT04O2Z1bmN0aW9uIGEodCxlLHIsbixpLGEpe2Zvcih2YXIgbz0yKnQscz1vKihyKzEpK2UsbD1yKzE7bDxuOysrbCxzKz1vKWZvcih2YXIgYz1pW3NdLHU9bCxoPW8qKGwtMSk7dT5yJiZpW2grZV0+YzstLXUsaC09byl7Zm9yKHZhciBmPWgscD1oK28sZD0wO2Q8bzsrK2QsKytmLCsrcCl7dmFyIGc9aVtmXTtpW2ZdPWlbcF0saVtwXT1nfXZhciBtPWFbdV07YVt1XT1hW3UtMV0sYVt1LTFdPW19fX0seyIuL3BhcnRpdGlvbiI6ODh9XSw4ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj0iYWJjZGVmIi5zcGxpdCgiIikuY29uY2F0KGUpLGk9W107dC5pbmRleE9mKCJsbyIpPj0wJiZpLnB1c2goImxvPWVbaytuXSIpO3QuaW5kZXhPZigiaGkiKT49MCYmaS5wdXNoKCJoaT1lW2srb10iKTtyZXR1cm4gci5wdXNoKG4ucmVwbGFjZSgiXyIsaS5qb2luKCkpLnJlcGxhY2UoIiQiLHQpKSxGdW5jdGlvbi5hcHBseSh2b2lkIDAscil9O3ZhciBuPSJmb3IodmFyIGo9MiphLGs9aipjLGw9ayxtPWMsbj1iLG89YStiLHA9YztkPnA7KytwLGsrPWope3ZhciBfO2lmKCQpaWYobT09PXApbSs9MSxsKz1qO2Vsc2V7Zm9yKHZhciBzPTA7aj5zOysrcyl7dmFyIHQ9ZVtrK3NdO2VbaytzXT1lW2xdLGVbbCsrXT10fXZhciB1PWZbcF07ZltwXT1mW21dLGZbbSsrXT11fX1yZXR1cm4gbSJ9LHt9XSw4OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtlPD00Km4/aSgwLGUtMSx0KTpmdW5jdGlvbiB0KGUscixoKXt2YXIgZj0oci1lKzEpLzZ8MCxwPWUrZixkPXItZixnPWUrcj4+MSxtPWctZix2PWcrZix5PXAseD1tLGI9ZyxfPXYsdz1kLGs9ZSsxLE09ci0xLEE9MDtjKHkseCxoKSYmKEE9eSx5PXgseD1BKTtjKF8sdyxoKSYmKEE9XyxfPXcsdz1BKTtjKHksYixoKSYmKEE9eSx5PWIsYj1BKTtjKHgsYixoKSYmKEE9eCx4PWIsYj1BKTtjKHksXyxoKSYmKEE9eSx5PV8sXz1BKTtjKGIsXyxoKSYmKEE9YixiPV8sXz1BKTtjKHgsdyxoKSYmKEE9eCx4PXcsdz1BKTtjKHgsYixoKSYmKEE9eCx4PWIsYj1BKTtjKF8sdyxoKSYmKEE9XyxfPXcsdz1BKTt2YXIgVD1oWzIqeF07dmFyIFM9aFsyKngrMV07dmFyIEU9aFsyKl9dO3ZhciBDPWhbMipfKzFdO3ZhciBMPTIqeTt2YXIgej0yKmI7dmFyIFA9Mip3O3ZhciBJPTIqcDt2YXIgTz0yKmc7dmFyIEQ9MipkO2Zvcih2YXIgUj0wO1I8MjsrK1Ipe3ZhciBCPWhbTCtSXSxGPWhbeitSXSxOPWhbUCtSXTtoW0krUl09QixoW08rUl09RixoW0QrUl09Tn1vKG0sZSxoKTtvKHYscixoKTtmb3IodmFyIGo9aztqPD1NOysrailpZih1KGosVCxTLGgpKWohPT1rJiZhKGosayxoKSwrK2s7ZWxzZSBpZighdShqLEUsQyxoKSlmb3IoOzspe2lmKHUoTSxFLEMsaCkpe3UoTSxULFMsaCk/KHMoaixrLE0saCksKytrLC0tTSk6KGEoaixNLGgpLC0tTSk7YnJlYWt9aWYoLS1NPGopYnJlYWt9bChlLGstMSxULFMsaCk7bChyLE0rMSxFLEMsaCk7ay0yLWU8PW4/aShlLGstMixoKTp0KGUsay0yLGgpO3ItKE0rMik8PW4/aShNKzIscixoKTp0KE0rMixyLGgpO00tazw9bj9pKGssTSxoKTp0KGssTSxoKX0oMCxlLTEsdCl9O3ZhciBuPTMyO2Z1bmN0aW9uIGkodCxlLHIpe2Zvcih2YXIgbj0yKih0KzEpLGk9dCsxO2k8PWU7KytpKXtmb3IodmFyIGE9cltuKytdLG89cltuKytdLHM9aSxsPW4tMjtzLS0gPnQ7KXt2YXIgYz1yW2wtMl0sdT1yW2wtMV07aWYoYzxhKWJyZWFrO2lmKGM9PT1hJiZ1PG8pYnJlYWs7cltsXT1jLHJbbCsxXT11LGwtPTJ9cltsXT1hLHJbbCsxXT1vfX1mdW5jdGlvbiBhKHQsZSxyKXtlKj0yO3ZhciBuPXJbdCo9Ml0saT1yW3QrMV07clt0XT1yW2VdLHJbdCsxXT1yW2UrMV0scltlXT1uLHJbZSsxXT1pfWZ1bmN0aW9uIG8odCxlLHIpe2UqPTIsclt0Kj0yXT1yW2VdLHJbdCsxXT1yW2UrMV19ZnVuY3Rpb24gcyh0LGUscixuKXtlKj0yLHIqPTI7dmFyIGk9blt0Kj0yXSxhPW5bdCsxXTtuW3RdPW5bZV0sblt0KzFdPW5bZSsxXSxuW2VdPW5bcl0sbltlKzFdPW5bcisxXSxuW3JdPWksbltyKzFdPWF9ZnVuY3Rpb24gbCh0LGUscixuLGkpe2UqPTIsaVt0Kj0yXT1pW2VdLGlbZV09cixpW3QrMV09aVtlKzFdLGlbZSsxXT1ufWZ1bmN0aW9uIGModCxlLHIpe2UqPTI7dmFyIG49clt0Kj0yXSxpPXJbZV07cmV0dXJuIShuPGkpJiYobiE9PWl8fHJbdCsxXT5yW2UrMV0pfWZ1bmN0aW9uIHUodCxlLHIsbil7dmFyIGk9blt0Kj0yXTtyZXR1cm4gaTxlfHxpPT09ZSYmblt0KzFdPHJ9fSx7fV0sOTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtpbml0OmZ1bmN0aW9uKHQpe3ZhciBlPWkubmV4dFBvdzIodCk7cy5sZW5ndGg8ZSYmKG4uZnJlZShzKSxzPW4ubWFsbG9jSW50MzIoZSkpO2wubGVuZ3RoPGUmJihuLmZyZWUobCksbD1uLm1hbGxvY0ludDMyKGUpKTtjLmxlbmd0aDxlJiYobi5mcmVlKGMpLGM9bi5tYWxsb2NJbnQzMihlKSk7dS5sZW5ndGg8ZSYmKG4uZnJlZSh1KSx1PW4ubWFsbG9jSW50MzIoZSkpO2gubGVuZ3RoPGUmJihuLmZyZWUoaCksaD1uLm1hbGxvY0ludDMyKGUpKTtmLmxlbmd0aDxlJiYobi5mcmVlKGYpLGY9bi5tYWxsb2NJbnQzMihlKSk7dmFyIHI9OCplO3AubGVuZ3RoPHImJihuLmZyZWUocCkscD1uLm1hbGxvY0RvdWJsZShyKSl9LHN3ZWVwQmlwYXJ0aXRlOmZ1bmN0aW9uKHQsZSxyLG4saSxoLGYsbSx2LHkpe2Zvcih2YXIgeD0wLGI9Mip0LF89dC0xLHc9Yi0xLGs9cjtrPG47KytrKXt2YXIgTT1oW2tdLEE9YiprO3BbeCsrXT1pW0ErX10scFt4KytdPS0oTSsxKSxwW3grK109aVtBK3ddLHBbeCsrXT1NfWZvcih2YXIgaz1mO2s8bTsrK2spe3ZhciBNPXlba10rbyxUPWIqaztwW3grK109dltUK19dLHBbeCsrXT0tTSxwW3grK109dltUK3ddLHBbeCsrXT1NfXZhciBTPXg+Pj4xO2EocCxTKTtmb3IodmFyIEU9MCxDPTAsaz0wO2s8UzsrK2spe3ZhciBMPTB8cFsyKmsrMV07aWYoTD49bylkKGMsdSxDLS0sTD1MLW98MCk7ZWxzZSBpZihMPj0wKWQocyxsLEUtLSxMKTtlbHNlIGlmKEw8PS1vKXtMPS1MLW98MDtmb3IodmFyIHo9MDt6PEU7Kyt6KXt2YXIgUD1lKHNbel0sTCk7aWYodm9pZCAwIT09UClyZXR1cm4gUH1nKGMsdSxDKyssTCl9ZWxzZXtMPS1MLTF8MDtmb3IodmFyIHo9MDt6PEM7Kyt6KXt2YXIgUD1lKEwsY1t6XSk7aWYodm9pZCAwIT09UClyZXR1cm4gUH1nKHMsbCxFKyssTCl9fX0sc3dlZXBDb21wbGV0ZTpmdW5jdGlvbih0LGUscixuLGksbyxtLHYseSx4KXtmb3IodmFyIGI9MCxfPTIqdCx3PXQtMSxrPV8tMSxNPXI7TTxuOysrTSl7dmFyIEE9b1tNXSsxPDwxLFQ9XypNO3BbYisrXT1pW1Qrd10scFtiKytdPS1BLHBbYisrXT1pW1Qra10scFtiKytdPUF9Zm9yKHZhciBNPW07TTx2OysrTSl7dmFyIEE9eFtNXSsxPDwxLFM9XypNO3BbYisrXT15W1Mrd10scFtiKytdPTF8LUEscFtiKytdPXlbUytrXSxwW2IrK109MXxBfXZhciBFPWI+Pj4xO2EocCxFKTtmb3IodmFyIEM9MCxMPTAsej0wLE09MDtNPEU7KytNKXt2YXIgUD0wfHBbMipNKzFdLEk9MSZQO2lmKE08RS0xJiZQPj4xPT1wWzIqTSszXT4+MSYmKEk9MixNKz0xKSxQPDApe2Zvcih2YXIgTz0tKFA+PjEpLTEsRD0wO0Q8ejsrK0Qpe3ZhciBSPWUoaFtEXSxPKTtpZih2b2lkIDAhPT1SKXJldHVybiBSfWlmKDAhPT1JKWZvcih2YXIgRD0wO0Q8QzsrK0Qpe3ZhciBSPWUoc1tEXSxPKTtpZih2b2lkIDAhPT1SKXJldHVybiBSfWlmKDEhPT1JKWZvcih2YXIgRD0wO0Q8TDsrK0Qpe3ZhciBSPWUoY1tEXSxPKTtpZih2b2lkIDAhPT1SKXJldHVybiBSfTA9PT1JP2cocyxsLEMrKyxPKToxPT09ST9nKGMsdSxMKyssTyk6Mj09PUkmJmcoaCxmLHorKyxPKX1lbHNle3ZhciBPPShQPj4xKS0xOzA9PT1JP2QocyxsLEMtLSxPKToxPT09ST9kKGMsdSxMLS0sTyk6Mj09PUkmJmQoaCxmLHotLSxPKX19fSxzY2FuQmlwYXJ0aXRlOmZ1bmN0aW9uKHQsZSxyLG4saSxjLHUsaCxmLG0sdix5KXt2YXIgeD0wLGI9Mip0LF89ZSx3PWUrdCxrPTEsTT0xO24/TT1vOms9bztmb3IodmFyIEE9aTtBPGM7KytBKXt2YXIgVD1BK2ssUz1iKkE7cFt4KytdPXVbUytfXSxwW3grK109LVQscFt4KytdPXVbUyt3XSxwW3grK109VH1mb3IodmFyIEE9ZjtBPG07KytBKXt2YXIgVD1BK00sRT1iKkE7cFt4KytdPXZbRStfXSxwW3grK109LVR9dmFyIEM9eD4+PjE7YShwLEMpO2Zvcih2YXIgTD0wLEE9MDtBPEM7KytBKXt2YXIgej0wfHBbMipBKzFdO2lmKHo8MCl7dmFyIFQ9LXosUD0hMTtpZihUPj1vPyhQPSFuLFQtPW8pOihQPSEhbixULT0xKSxQKWcocyxsLEwrKyxUKTtlbHNle3ZhciBJPXlbVF0sTz1iKlQsRD12W08rZSsxXSxSPXZbTytlKzErdF07dDpmb3IodmFyIEI9MDtCPEw7KytCKXt2YXIgRj1zW0JdLE49YipGO2lmKCEoUjx1W04rZSsxXXx8dVtOK2UrMSt0XTxEKSl7Zm9yKHZhciBqPWUrMjtqPHQ7KytqKWlmKHZbTytqK3RdPHVbTitqXXx8dVtOK2ordF08dltPK2pdKWNvbnRpbnVlIHQ7dmFyIFYsVT1oW0ZdO2lmKHZvaWQgMCE9PShWPW4/cihJLFUpOnIoVSxJKSkpcmV0dXJuIFZ9fX19ZWxzZSBkKHMsbCxMLS0sei1rKX19LHNjYW5Db21wbGV0ZTpmdW5jdGlvbih0LGUscixuLGksbCxjLHUsaCxmLGQpe2Zvcih2YXIgZz0wLG09Mip0LHY9ZSx5PWUrdCx4PW47eDxpOysreCl7dmFyIGI9eCtvLF89bSp4O3BbZysrXT1sW18rdl0scFtnKytdPS1iLHBbZysrXT1sW18reV0scFtnKytdPWJ9Zm9yKHZhciB4PXU7eDxoOysreCl7dmFyIGI9eCsxLHc9bSp4O3BbZysrXT1mW3crdl0scFtnKytdPS1ifXZhciBrPWc+Pj4xO2EocCxrKTtmb3IodmFyIE09MCx4PTA7eDxrOysreCl7dmFyIEE9MHxwWzIqeCsxXTtpZihBPDApe3ZhciBiPS1BO2lmKGI+PW8pc1tNKytdPWItbztlbHNle3ZhciBUPWRbYi09MV0sUz1tKmIsRT1mW1MrZSsxXSxDPWZbUytlKzErdF07dDpmb3IodmFyIEw9MDtMPE07KytMKXt2YXIgej1zW0xdLFA9Y1t6XTtpZihQPT09VClicmVhazt2YXIgST1tKno7aWYoIShDPGxbSStlKzFdfHxsW0krZSsxK3RdPEUpKXtmb3IodmFyIE89ZSsyO088dDsrK08paWYoZltTK08rdF08bFtJK09dfHxsW0krTyt0XTxmW1MrT10pY29udGludWUgdDt2YXIgRD1yKFAsVCk7aWYodm9pZCAwIT09RClyZXR1cm4gRH19fX1lbHNle2Zvcih2YXIgYj1BLW8sTD1NLTE7TD49MDstLUwpaWYoc1tMXT09PWIpe2Zvcih2YXIgTz1MKzE7TzxNOysrTylzW08tMV09c1tPXTticmVha30tLU19fX19O3ZhciBuPXQoInR5cGVkYXJyYXktcG9vbCIpLGk9dCgiYml0LXR3aWRkbGUiKSxhPXQoIi4vc29ydCIpLG89MTw8Mjgscz1uLm1hbGxvY0ludDMyKDEwMjQpLGw9bi5tYWxsb2NJbnQzMigxMDI0KSxjPW4ubWFsbG9jSW50MzIoMTAyNCksdT1uLm1hbGxvY0ludDMyKDEwMjQpLGg9bi5tYWxsb2NJbnQzMigxMDI0KSxmPW4ubWFsbG9jSW50MzIoMTAyNCkscD1uLm1hbGxvY0RvdWJsZSg4MTkyKTtmdW5jdGlvbiBkKHQsZSxyLG4pe3ZhciBpPWVbbl0sYT10W3ItMV07dFtpXT1hLGVbYV09aX1mdW5jdGlvbiBnKHQsZSxyLG4pe3Rbcl09bixlW25dPXJ9fSx7Ii4vc29ydCI6ODksImJpdC10d2lkZGxlIjo4MCwidHlwZWRhcnJheS1wb29sIjo1MDd9XSw5MTpbZnVuY3Rpb24odCxlLHIpe30se31dLDkyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImJhc2U2NC1qcyIpLGk9dCgiaWVlZTc1NCIpO3IuQnVmZmVyPXMsci5TbG93QnVmZmVyPWZ1bmN0aW9uKHQpeyt0IT10JiYodD0wKTtyZXR1cm4gcy5hbGxvYygrdCl9LHIuSU5TUEVDVF9NQVhfQllURVM9NTA7dmFyIGE9MjE0NzQ4MzY0NztmdW5jdGlvbiBvKHQpe2lmKHQ+YSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YWxpZCB0eXBlZCBhcnJheSBsZW5ndGgiKTt2YXIgZT1uZXcgVWludDhBcnJheSh0KTtyZXR1cm4gZS5fX3Byb3RvX189cy5wcm90b3R5cGUsZX1mdW5jdGlvbiBzKHQsZSxyKXtpZigibnVtYmVyIj09dHlwZW9mIHQpe2lmKCJzdHJpbmciPT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoIklmIGVuY29kaW5nIGlzIHNwZWNpZmllZCB0aGVuIHRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nIik7cmV0dXJuIHUodCl9cmV0dXJuIGwodCxlLHIpfWZ1bmN0aW9uIGwodCxlLHIpe2lmKCJudW1iZXIiPT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCcidmFsdWUiIGFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyJyk7cmV0dXJuIGoodCl8fHQmJmoodC5idWZmZXIpP2Z1bmN0aW9uKHQsZSxyKXtpZihlPDB8fHQuYnl0ZUxlbmd0aDxlKXRocm93IG5ldyBSYW5nZUVycm9yKCcib2Zmc2V0IiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHMnKTtpZih0LmJ5dGVMZW5ndGg8ZSsocnx8MCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJsZW5ndGgiIGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kcycpO3ZhciBuO249dm9pZCAwPT09ZSYmdm9pZCAwPT09cj9uZXcgVWludDhBcnJheSh0KTp2b2lkIDA9PT1yP25ldyBVaW50OEFycmF5KHQsZSk6bmV3IFVpbnQ4QXJyYXkodCxlLHIpO3JldHVybiBuLl9fcHJvdG9fXz1zLnByb3RvdHlwZSxufSh0LGUscik6InN0cmluZyI9PXR5cGVvZiB0P2Z1bmN0aW9uKHQsZSl7InN0cmluZyI9PXR5cGVvZiBlJiYiIiE9PWV8fChlPSJ1dGY4Iik7aWYoIXMuaXNFbmNvZGluZyhlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK2UpO3ZhciByPTB8cCh0LGUpLG49byhyKSxpPW4ud3JpdGUodCxlKTtpIT09ciYmKG49bi5zbGljZSgwLGkpKTtyZXR1cm4gbn0odCxlKTpmdW5jdGlvbih0KXtpZihzLmlzQnVmZmVyKHQpKXt2YXIgZT0wfGYodC5sZW5ndGgpLHI9byhlKTtyZXR1cm4gMD09PXIubGVuZ3RoP3I6KHQuY29weShyLDAsMCxlKSxyKX1pZih0KXtpZihBcnJheUJ1ZmZlci5pc1ZpZXcodCl8fCJsZW5ndGgiaW4gdClyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIHQubGVuZ3RofHxWKHQubGVuZ3RoKT9vKDApOmgodCk7aWYoIkJ1ZmZlciI9PT10LnR5cGUmJkFycmF5LmlzQXJyYXkodC5kYXRhKSlyZXR1cm4gaCh0LmRhdGEpfXRocm93IG5ldyBUeXBlRXJyb3IoIlRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIEFycmF5LWxpa2UgT2JqZWN0LiIpfSh0KX1mdW5jdGlvbiBjKHQpe2lmKCJudW1iZXIiIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCcic2l6ZSIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIG51bWJlcicpO2lmKHQ8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcignInNpemUiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG5lZ2F0aXZlJyl9ZnVuY3Rpb24gdSh0KXtyZXR1cm4gYyh0KSxvKHQ8MD8wOjB8Zih0KSl9ZnVuY3Rpb24gaCh0KXtmb3IodmFyIGU9dC5sZW5ndGg8MD8wOjB8Zih0Lmxlbmd0aCkscj1vKGUpLG49MDtuPGU7bis9MSlyW25dPTI1NSZ0W25dO3JldHVybiByfWZ1bmN0aW9uIGYodCl7aWYodD49YSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSBzaXplOiAweCIrYS50b1N0cmluZygxNikrIiBieXRlcyIpO3JldHVybiAwfHR9ZnVuY3Rpb24gcCh0LGUpe2lmKHMuaXNCdWZmZXIodCkpcmV0dXJuIHQubGVuZ3RoO2lmKEFycmF5QnVmZmVyLmlzVmlldyh0KXx8aih0KSlyZXR1cm4gdC5ieXRlTGVuZ3RoOyJzdHJpbmciIT10eXBlb2YgdCYmKHQ9IiIrdCk7dmFyIHI9dC5sZW5ndGg7aWYoMD09PXIpcmV0dXJuIDA7Zm9yKHZhciBuPSExOzspc3dpdGNoKGUpe2Nhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIHI7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpjYXNlIHZvaWQgMDpyZXR1cm4gQih0KS5sZW5ndGg7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiAyKnI7Y2FzZSJoZXgiOnJldHVybiByPj4+MTtjYXNlImJhc2U2NCI6cmV0dXJuIEYodCkubGVuZ3RoO2RlZmF1bHQ6aWYobilyZXR1cm4gQih0KS5sZW5ndGg7ZT0oIiIrZSkudG9Mb3dlckNhc2UoKSxuPSEwfX1mdW5jdGlvbiBkKHQsZSxyKXt2YXIgbj10W2VdO3RbZV09dFtyXSx0W3JdPW59ZnVuY3Rpb24gZyh0LGUscixuLGkpe2lmKDA9PT10Lmxlbmd0aClyZXR1cm4tMTtpZigic3RyaW5nIj09dHlwZW9mIHI/KG49cixyPTApOnI+MjE0NzQ4MzY0Nz9yPTIxNDc0ODM2NDc6cjwtMjE0NzQ4MzY0OCYmKHI9LTIxNDc0ODM2NDgpLFYocj0rcikmJihyPWk/MDp0Lmxlbmd0aC0xKSxyPDAmJihyPXQubGVuZ3RoK3IpLHI+PXQubGVuZ3RoKXtpZihpKXJldHVybi0xO3I9dC5sZW5ndGgtMX1lbHNlIGlmKHI8MCl7aWYoIWkpcmV0dXJuLTE7cj0wfWlmKCJzdHJpbmciPT10eXBlb2YgZSYmKGU9cy5mcm9tKGUsbikpLHMuaXNCdWZmZXIoZSkpcmV0dXJuIDA9PT1lLmxlbmd0aD8tMTptKHQsZSxyLG4saSk7aWYoIm51bWJlciI9PXR5cGVvZiBlKXJldHVybiBlJj0yNTUsImZ1bmN0aW9uIj09dHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2Y/aT9VaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwodCxlLHIpOlVpbnQ4QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwodCxlLHIpOm0odCxbZV0scixuLGkpO3Rocm93IG5ldyBUeXBlRXJyb3IoInZhbCBtdXN0IGJlIHN0cmluZywgbnVtYmVyIG9yIEJ1ZmZlciIpfWZ1bmN0aW9uIG0odCxlLHIsbixpKXt2YXIgYSxvPTEscz10Lmxlbmd0aCxsPWUubGVuZ3RoO2lmKHZvaWQgMCE9PW4mJigidWNzMiI9PT0obj1TdHJpbmcobikudG9Mb3dlckNhc2UoKSl8fCJ1Y3MtMiI9PT1ufHwidXRmMTZsZSI9PT1ufHwidXRmLTE2bGUiPT09bikpe2lmKHQubGVuZ3RoPDJ8fGUubGVuZ3RoPDIpcmV0dXJuLTE7bz0yLHMvPTIsbC89MixyLz0yfWZ1bmN0aW9uIGModCxlKXtyZXR1cm4gMT09PW8/dFtlXTp0LnJlYWRVSW50MTZCRShlKm8pfWlmKGkpe3ZhciB1PS0xO2ZvcihhPXI7YTxzO2ErKylpZihjKHQsYSk9PT1jKGUsLTE9PT11PzA6YS11KSl7aWYoLTE9PT11JiYodT1hKSxhLXUrMT09PWwpcmV0dXJuIHUqb31lbHNlLTEhPT11JiYoYS09YS11KSx1PS0xfWVsc2UgZm9yKHIrbD5zJiYocj1zLWwpLGE9cjthPj0wO2EtLSl7Zm9yKHZhciBoPSEwLGY9MDtmPGw7ZisrKWlmKGModCxhK2YpIT09YyhlLGYpKXtoPSExO2JyZWFrfWlmKGgpcmV0dXJuIGF9cmV0dXJuLTF9ZnVuY3Rpb24gdih0LGUscixuKXtyPU51bWJlcihyKXx8MDt2YXIgaT10Lmxlbmd0aC1yO24/KG49TnVtYmVyKG4pKT5pJiYobj1pKTpuPWk7dmFyIGE9ZS5sZW5ndGg7bj5hLzImJihuPWEvMik7Zm9yKHZhciBvPTA7bzxuOysrbyl7dmFyIHM9cGFyc2VJbnQoZS5zdWJzdHIoMipvLDIpLDE2KTtpZihWKHMpKXJldHVybiBvO3RbcitvXT1zfXJldHVybiBvfWZ1bmN0aW9uIHkodCxlLHIsbil7cmV0dXJuIE4oQihlLHQubGVuZ3RoLXIpLHQscixuKX1mdW5jdGlvbiB4KHQsZSxyLG4pe3JldHVybiBOKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXSxyPTA7cjx0Lmxlbmd0aDsrK3IpZS5wdXNoKDI1NSZ0LmNoYXJDb2RlQXQocikpO3JldHVybiBlfShlKSx0LHIsbil9ZnVuY3Rpb24gYih0LGUscixuKXtyZXR1cm4geCh0LGUscixuKX1mdW5jdGlvbiBfKHQsZSxyLG4pe3JldHVybiBOKEYoZSksdCxyLG4pfWZ1bmN0aW9uIHcodCxlLHIsbil7cmV0dXJuIE4oZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsbixpLGE9W10sbz0wO288dC5sZW5ndGgmJiEoKGUtPTIpPDApOysrbylyPXQuY2hhckNvZGVBdChvKSxuPXI+PjgsaT1yJTI1NixhLnB1c2goaSksYS5wdXNoKG4pO3JldHVybiBhfShlLHQubGVuZ3RoLXIpLHQscixuKX1mdW5jdGlvbiBrKHQsZSxyKXtyZXR1cm4gMD09PWUmJnI9PT10Lmxlbmd0aD9uLmZyb21CeXRlQXJyYXkodCk6bi5mcm9tQnl0ZUFycmF5KHQuc2xpY2UoZSxyKSl9ZnVuY3Rpb24gTSh0LGUscil7cj1NYXRoLm1pbih0Lmxlbmd0aCxyKTtmb3IodmFyIG49W10saT1lO2k8cjspe3ZhciBhLG8scyxsLGM9dFtpXSx1PW51bGwsaD1jPjIzOT80OmM+MjIzPzM6Yz4xOTE/MjoxO2lmKGkraDw9cilzd2l0Y2goaCl7Y2FzZSAxOmM8MTI4JiYodT1jKTticmVhaztjYXNlIDI6MTI4PT0oMTkyJihhPXRbaSsxXSkpJiYobD0oMzEmYyk8PDZ8NjMmYSk+MTI3JiYodT1sKTticmVhaztjYXNlIDM6YT10W2krMV0sbz10W2krMl0sMTI4PT0oMTkyJmEpJiYxMjg9PSgxOTImbykmJihsPSgxNSZjKTw8MTJ8KDYzJmEpPDw2fDYzJm8pPjIwNDcmJihsPDU1Mjk2fHxsPjU3MzQzKSYmKHU9bCk7YnJlYWs7Y2FzZSA0OmE9dFtpKzFdLG89dFtpKzJdLHM9dFtpKzNdLDEyOD09KDE5MiZhKSYmMTI4PT0oMTkyJm8pJiYxMjg9PSgxOTImcykmJihsPSgxNSZjKTw8MTh8KDYzJmEpPDwxMnwoNjMmbyk8PDZ8NjMmcyk+NjU1MzUmJmw8MTExNDExMiYmKHU9bCl9bnVsbD09PXU/KHU9NjU1MzMsaD0xKTp1PjY1NTM1JiYodS09NjU1MzYsbi5wdXNoKHU+Pj4xMCYxMDIzfDU1Mjk2KSx1PTU2MzIwfDEwMjMmdSksbi5wdXNoKHUpLGkrPWh9cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoO2lmKGU8PUEpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLHQpO3ZhciByPSIiLG49MDtmb3IoO248ZTspcis9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsdC5zbGljZShuLG4rPUEpKTtyZXR1cm4gcn0obil9ci5rTWF4TGVuZ3RoPWEscy5UWVBFRF9BUlJBWV9TVVBQT1JUPWZ1bmN0aW9uKCl7dHJ5e3ZhciB0PW5ldyBVaW50OEFycmF5KDEpO3JldHVybiB0Ll9fcHJvdG9fXz17X19wcm90b19fOlVpbnQ4QXJyYXkucHJvdG90eXBlLGZvbzpmdW5jdGlvbigpe3JldHVybiA0Mn19LDQyPT09dC5mb28oKX1jYXRjaCh0KXtyZXR1cm4hMX19KCkscy5UWVBFRF9BUlJBWV9TVVBQT1JUfHwidW5kZWZpbmVkIj09dHlwZW9mIGNvbnNvbGV8fCJmdW5jdGlvbiIhPXR5cGVvZiBjb25zb2xlLmVycm9yfHxjb25zb2xlLmVycm9yKCJUaGlzIGJyb3dzZXIgbGFja3MgdHlwZWQgYXJyYXkgKFVpbnQ4QXJyYXkpIHN1cHBvcnQgd2hpY2ggaXMgcmVxdWlyZWQgYnkgYGJ1ZmZlcmAgdjUueC4gVXNlIGBidWZmZXJgIHY0LnggaWYgeW91IHJlcXVpcmUgb2xkIGJyb3dzZXIgc3VwcG9ydC4iKSxPYmplY3QuZGVmaW5lUHJvcGVydHkocy5wcm90b3R5cGUsInBhcmVudCIse2dldDpmdW5jdGlvbigpe2lmKHRoaXMgaW5zdGFuY2VvZiBzKXJldHVybiB0aGlzLmJ1ZmZlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkocy5wcm90b3R5cGUsIm9mZnNldCIse2dldDpmdW5jdGlvbigpe2lmKHRoaXMgaW5zdGFuY2VvZiBzKXJldHVybiB0aGlzLmJ5dGVPZmZzZXR9fSksInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5zcGVjaWVzJiZzW1N5bWJvbC5zcGVjaWVzXT09PXMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShzLFN5bWJvbC5zcGVjaWVzLHt2YWx1ZTpudWxsLGNvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiExfSkscy5wb29sU2l6ZT04MTkyLHMuZnJvbT1mdW5jdGlvbih0LGUscil7cmV0dXJuIGwodCxlLHIpfSxzLnByb3RvdHlwZS5fX3Byb3RvX189VWludDhBcnJheS5wcm90b3R5cGUscy5fX3Byb3RvX189VWludDhBcnJheSxzLmFsbG9jPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZnVuY3Rpb24odCxlLHIpe3JldHVybiBjKHQpLHQ8PTA/byh0KTp2b2lkIDAhPT1lPyJzdHJpbmciPT10eXBlb2Ygcj9vKHQpLmZpbGwoZSxyKTpvKHQpLmZpbGwoZSk6byh0KX0odCxlLHIpfSxzLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKHQpe3JldHVybiB1KHQpfSxzLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbih0KXtyZXR1cm4gdSh0KX0scy5pc0J1ZmZlcj1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9dCYmITA9PT10Ll9pc0J1ZmZlcn0scy5jb21wYXJlPWZ1bmN0aW9uKHQsZSl7aWYoIXMuaXNCdWZmZXIodCl8fCFzLmlzQnVmZmVyKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50cyBtdXN0IGJlIEJ1ZmZlcnMiKTtpZih0PT09ZSlyZXR1cm4gMDtmb3IodmFyIHI9dC5sZW5ndGgsbj1lLmxlbmd0aCxpPTAsYT1NYXRoLm1pbihyLG4pO2k8YTsrK2kpaWYodFtpXSE9PWVbaV0pe3I9dFtpXSxuPWVbaV07YnJlYWt9cmV0dXJuIHI8bj8tMTpuPHI/MTowfSxzLmlzRW5jb2Rpbmc9ZnVuY3Rpb24odCl7c3dpdGNoKFN0cmluZyh0KS50b0xvd2VyQ2FzZSgpKXtjYXNlImhleCI6Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOmNhc2UiYmFzZTY0IjpjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19LHMuY29uY2F0PWZ1bmN0aW9uKHQsZSl7aWYoIUFycmF5LmlzQXJyYXkodCkpdGhyb3cgbmV3IFR5cGVFcnJvcignImxpc3QiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO2lmKDA9PT10Lmxlbmd0aClyZXR1cm4gcy5hbGxvYygwKTt2YXIgcjtpZih2b2lkIDA9PT1lKWZvcihlPTAscj0wO3I8dC5sZW5ndGg7KytyKWUrPXRbcl0ubGVuZ3RoO3ZhciBuPXMuYWxsb2NVbnNhZmUoZSksaT0wO2ZvcihyPTA7cjx0Lmxlbmd0aDsrK3Ipe3ZhciBhPXRbcl07aWYoQXJyYXlCdWZmZXIuaXNWaWV3KGEpJiYoYT1zLmZyb20oYSkpLCFzLmlzQnVmZmVyKGEpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTthLmNvcHkobixpKSxpKz1hLmxlbmd0aH1yZXR1cm4gbn0scy5ieXRlTGVuZ3RoPXAscy5wcm90b3R5cGUuX2lzQnVmZmVyPSEwLHMucHJvdG90eXBlLnN3YXAxNj1mdW5jdGlvbigpe3ZhciB0PXRoaXMubGVuZ3RoO2lmKHQlMiE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDE2LWJpdHMiKTtmb3IodmFyIGU9MDtlPHQ7ZSs9MilkKHRoaXMsZSxlKzEpO3JldHVybiB0aGlzfSxzLnByb3RvdHlwZS5zd2FwMzI9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmxlbmd0aDtpZih0JTQhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzIik7Zm9yKHZhciBlPTA7ZTx0O2UrPTQpZCh0aGlzLGUsZSszKSxkKHRoaXMsZSsxLGUrMik7cmV0dXJuIHRoaXN9LHMucHJvdG90eXBlLnN3YXA2ND1mdW5jdGlvbigpe3ZhciB0PXRoaXMubGVuZ3RoO2lmKHQlOCE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDY0LWJpdHMiKTtmb3IodmFyIGU9MDtlPHQ7ZSs9OClkKHRoaXMsZSxlKzcpLGQodGhpcyxlKzEsZSs2KSxkKHRoaXMsZSsyLGUrNSksZCh0aGlzLGUrMyxlKzQpO3JldHVybiB0aGlzfSxzLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciB0PXRoaXMubGVuZ3RoO3JldHVybiAwPT09dD8iIjowPT09YXJndW1lbnRzLmxlbmd0aD9NKHRoaXMsMCx0KTpmdW5jdGlvbih0LGUscil7dmFyIG49ITE7aWYoKHZvaWQgMD09PWV8fGU8MCkmJihlPTApLGU+dGhpcy5sZW5ndGgpcmV0dXJuIiI7aWYoKHZvaWQgMD09PXJ8fHI+dGhpcy5sZW5ndGgpJiYocj10aGlzLmxlbmd0aCkscjw9MClyZXR1cm4iIjtpZigocj4+Pj0wKTw9KGU+Pj49MCkpcmV0dXJuIiI7Zm9yKHR8fCh0PSJ1dGY4Iik7Oylzd2l0Y2godCl7Y2FzZSJoZXgiOnJldHVybiBFKHRoaXMsZSxyKTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBNKHRoaXMsZSxyKTtjYXNlImFzY2lpIjpyZXR1cm4gVCh0aGlzLGUscik7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gUyh0aGlzLGUscik7Y2FzZSJiYXNlNjQiOnJldHVybiBrKHRoaXMsZSxyKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIEModGhpcyxlLHIpO2RlZmF1bHQ6aWYobil0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK3QpO3Q9KHQrIiIpLnRvTG93ZXJDYXNlKCksbj0hMH19LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0scy5wcm90b3R5cGUudG9Mb2NhbGVTdHJpbmc9cy5wcm90b3R5cGUudG9TdHJpbmcscy5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKHQpe2lmKCFzLmlzQnVmZmVyKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIiKTtyZXR1cm4gdGhpcz09PXR8fDA9PT1zLmNvbXBhcmUodGhpcyx0KX0scy5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3ZhciB0PSIiLGU9ci5JTlNQRUNUX01BWF9CWVRFUztyZXR1cm4gdGhpcy5sZW5ndGg+MCYmKHQ9dGhpcy50b1N0cmluZygiaGV4IiwwLGUpLm1hdGNoKC8uezJ9L2cpLmpvaW4oIiAiKSx0aGlzLmxlbmd0aD5lJiYodCs9IiAuLi4gIikpLCI8QnVmZmVyICIrdCsiPiJ9LHMucHJvdG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24odCxlLHIsbixpKXtpZighcy5pc0J1ZmZlcih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIik7aWYodm9pZCAwPT09ZSYmKGU9MCksdm9pZCAwPT09ciYmKHI9dD90Lmxlbmd0aDowKSx2b2lkIDA9PT1uJiYobj0wKSx2b2lkIDA9PT1pJiYoaT10aGlzLmxlbmd0aCksZTwwfHxyPnQubGVuZ3RofHxuPDB8fGk+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm91dCBvZiByYW5nZSBpbmRleCIpO2lmKG4+PWkmJmU+PXIpcmV0dXJuIDA7aWYobj49aSlyZXR1cm4tMTtpZihlPj1yKXJldHVybiAxO2lmKHRoaXM9PT10KXJldHVybiAwO2Zvcih2YXIgYT0oaT4+Pj0wKS0obj4+Pj0wKSxvPShyPj4+PTApLShlPj4+PTApLGw9TWF0aC5taW4oYSxvKSxjPXRoaXMuc2xpY2UobixpKSx1PXQuc2xpY2UoZSxyKSxoPTA7aDxsOysraClpZihjW2hdIT09dVtoXSl7YT1jW2hdLG89dVtoXTticmVha31yZXR1cm4gYTxvPy0xOm88YT8xOjB9LHMucHJvdG90eXBlLmluY2x1ZGVzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4tMSE9PXRoaXMuaW5kZXhPZih0LGUscil9LHMucHJvdG90eXBlLmluZGV4T2Y9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBnKHRoaXMsdCxlLHIsITApfSxzLnByb3RvdHlwZS5sYXN0SW5kZXhPZj1mdW5jdGlvbih0LGUscil7cmV0dXJuIGcodGhpcyx0LGUsciwhMSl9LHMucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKHZvaWQgMD09PWUpbj0idXRmOCIscj10aGlzLmxlbmd0aCxlPTA7ZWxzZSBpZih2b2lkIDA9PT1yJiYic3RyaW5nIj09dHlwZW9mIGUpbj1lLHI9dGhpcy5sZW5ndGgsZT0wO2Vsc2V7aWYoIWlzRmluaXRlKGUpKXRocm93IG5ldyBFcnJvcigiQnVmZmVyLndyaXRlKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldFssIGxlbmd0aF0pIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQiKTtlPj4+PTAsaXNGaW5pdGUocik/KHI+Pj49MCx2b2lkIDA9PT1uJiYobj0idXRmOCIpKToobj1yLHI9dm9pZCAwKX12YXIgaT10aGlzLmxlbmd0aC1lO2lmKCh2b2lkIDA9PT1yfHxyPmkpJiYocj1pKSx0Lmxlbmd0aD4wJiYocjwwfHxlPDApfHxlPnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIHdyaXRlIG91dHNpZGUgYnVmZmVyIGJvdW5kcyIpO258fChuPSJ1dGY4Iik7Zm9yKHZhciBhPSExOzspc3dpdGNoKG4pe2Nhc2UiaGV4IjpyZXR1cm4gdih0aGlzLHQsZSxyKTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiB5KHRoaXMsdCxlLHIpO2Nhc2UiYXNjaWkiOnJldHVybiB4KHRoaXMsdCxlLHIpO2Nhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIGIodGhpcyx0LGUscik7Y2FzZSJiYXNlNjQiOnJldHVybiBfKHRoaXMsdCxlLHIpO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gdyh0aGlzLHQsZSxyKTtkZWZhdWx0OmlmKGEpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIituKTtuPSgiIituKS50b0xvd2VyQ2FzZSgpLGE9ITB9fSxzLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiQnVmZmVyIixkYXRhOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2Fycnx8dGhpcywwKX19O3ZhciBBPTQwOTY7ZnVuY3Rpb24gVCh0LGUscil7dmFyIG49IiI7cj1NYXRoLm1pbih0Lmxlbmd0aCxyKTtmb3IodmFyIGk9ZTtpPHI7KytpKW4rPVN0cmluZy5mcm9tQ2hhckNvZGUoMTI3JnRbaV0pO3JldHVybiBufWZ1bmN0aW9uIFModCxlLHIpe3ZhciBuPSIiO3I9TWF0aC5taW4odC5sZW5ndGgscik7Zm9yKHZhciBpPWU7aTxyOysraSluKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHRbaV0pO3JldHVybiBufWZ1bmN0aW9uIEUodCxlLHIpe3ZhciBuPXQubGVuZ3RoOyghZXx8ZTwwKSYmKGU9MCksKCFyfHxyPDB8fHI+bikmJihyPW4pO2Zvcih2YXIgaT0iIixhPWU7YTxyOysrYSlpKz1SKHRbYV0pO3JldHVybiBpfWZ1bmN0aW9uIEModCxlLHIpe2Zvcih2YXIgbj10LnNsaWNlKGUsciksaT0iIixhPTA7YTxuLmxlbmd0aDthKz0yKWkrPVN0cmluZy5mcm9tQ2hhckNvZGUoblthXSsyNTYqblthKzFdKTtyZXR1cm4gaX1mdW5jdGlvbiBMKHQsZSxyKXtpZih0JTEhPTB8fHQ8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib2Zmc2V0IGlzIG5vdCB1aW50Iik7aWYodCtlPnIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIlRyeWluZyB0byBhY2Nlc3MgYmV5b25kIGJ1ZmZlciBsZW5ndGgiKX1mdW5jdGlvbiB6KHQsZSxyLG4saSxhKXtpZighcy5pc0J1ZmZlcih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCciYnVmZmVyIiBhcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIGluc3RhbmNlJyk7aWYoZT5pfHxlPGEpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJ2YWx1ZSIgYXJndW1lbnQgaXMgb3V0IG9mIGJvdW5kcycpO2lmKHIrbj50Lmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24gUCh0LGUscixuLGksYSl7aWYocituPnQubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKTtpZihyPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIEkodCxlLHIsbixhKXtyZXR1cm4gZT0rZSxyPj4+PTAsYXx8UCh0LDAsciw0KSxpLndyaXRlKHQsZSxyLG4sMjMsNCkscis0fWZ1bmN0aW9uIE8odCxlLHIsbixhKXtyZXR1cm4gZT0rZSxyPj4+PTAsYXx8UCh0LDAsciw4KSxpLndyaXRlKHQsZSxyLG4sNTIsOCkscis4fXMucHJvdG90eXBlLnNsaWNlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5sZW5ndGg7KHQ9fn50KTwwPyh0Kz1yKTwwJiYodD0wKTp0PnImJih0PXIpLChlPXZvaWQgMD09PWU/cjp+fmUpPDA/KGUrPXIpPDAmJihlPTApOmU+ciYmKGU9ciksZTx0JiYoZT10KTt2YXIgbj10aGlzLnN1YmFycmF5KHQsZSk7cmV0dXJuIG4uX19wcm90b19fPXMucHJvdG90eXBlLG59LHMucHJvdG90eXBlLnJlYWRVSW50TEU9ZnVuY3Rpb24odCxlLHIpe3Q+Pj49MCxlPj4+PTAscnx8TCh0LGUsdGhpcy5sZW5ndGgpO2Zvcih2YXIgbj10aGlzW3RdLGk9MSxhPTA7KythPGUmJihpKj0yNTYpOyluKz10aGlzW3QrYV0qaTtyZXR1cm4gbn0scy5wcm90b3R5cGUucmVhZFVJbnRCRT1mdW5jdGlvbih0LGUscil7dD4+Pj0wLGU+Pj49MCxyfHxMKHQsZSx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbdCstLWVdLGk9MTtlPjAmJihpKj0yNTYpOyluKz10aGlzW3QrLS1lXSppO3JldHVybiBufSxzLnByb3RvdHlwZS5yZWFkVUludDg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fEwodCwxLHRoaXMubGVuZ3RoKSx0aGlzW3RdfSxzLnByb3RvdHlwZS5yZWFkVUludDE2TEU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fEwodCwyLHRoaXMubGVuZ3RoKSx0aGlzW3RdfHRoaXNbdCsxXTw8OH0scy5wcm90b3R5cGUucmVhZFVJbnQxNkJFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+Pj49MCxlfHxMKHQsMix0aGlzLmxlbmd0aCksdGhpc1t0XTw8OHx0aGlzW3QrMV19LHMucHJvdG90eXBlLnJlYWRVSW50MzJMRT1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8TCh0LDQsdGhpcy5sZW5ndGgpLCh0aGlzW3RdfHRoaXNbdCsxXTw8OHx0aGlzW3QrMl08PDE2KSsxNjc3NzIxNip0aGlzW3QrM119LHMucHJvdG90eXBlLnJlYWRVSW50MzJCRT1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8TCh0LDQsdGhpcy5sZW5ndGgpLDE2Nzc3MjE2KnRoaXNbdF0rKHRoaXNbdCsxXTw8MTZ8dGhpc1t0KzJdPDw4fHRoaXNbdCszXSl9LHMucHJvdG90eXBlLnJlYWRJbnRMRT1mdW5jdGlvbih0LGUscil7dD4+Pj0wLGU+Pj49MCxyfHxMKHQsZSx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbdF0saT0xLGE9MDsrK2E8ZSYmKGkqPTI1Nik7KW4rPXRoaXNbdCthXSppO3JldHVybiBuPj0oaSo9MTI4KSYmKG4tPU1hdGgucG93KDIsOCplKSksbn0scy5wcm90b3R5cGUucmVhZEludEJFPWZ1bmN0aW9uKHQsZSxyKXt0Pj4+PTAsZT4+Pj0wLHJ8fEwodCxlLHRoaXMubGVuZ3RoKTtmb3IodmFyIG49ZSxpPTEsYT10aGlzW3QrLS1uXTtuPjAmJihpKj0yNTYpOylhKz10aGlzW3QrLS1uXSppO3JldHVybiBhPj0oaSo9MTI4KSYmKGEtPU1hdGgucG93KDIsOCplKSksYX0scy5wcm90b3R5cGUucmVhZEludDg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fEwodCwxLHRoaXMubGVuZ3RoKSwxMjgmdGhpc1t0XT8tMSooMjU1LXRoaXNbdF0rMSk6dGhpc1t0XX0scy5wcm90b3R5cGUucmVhZEludDE2TEU9ZnVuY3Rpb24odCxlKXt0Pj4+PTAsZXx8TCh0LDIsdGhpcy5sZW5ndGgpO3ZhciByPXRoaXNbdF18dGhpc1t0KzFdPDw4O3JldHVybiAzMjc2OCZyPzQyOTQ5MDE3NjB8cjpyfSxzLnByb3RvdHlwZS5yZWFkSW50MTZCRT1mdW5jdGlvbih0LGUpe3Q+Pj49MCxlfHxMKHQsMix0aGlzLmxlbmd0aCk7dmFyIHI9dGhpc1t0KzFdfHRoaXNbdF08PDg7cmV0dXJuIDMyNzY4JnI/NDI5NDkwMTc2MHxyOnJ9LHMucHJvdG90eXBlLnJlYWRJbnQzMkxFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+Pj49MCxlfHxMKHQsNCx0aGlzLmxlbmd0aCksdGhpc1t0XXx0aGlzW3QrMV08PDh8dGhpc1t0KzJdPDwxNnx0aGlzW3QrM108PDI0fSxzLnByb3RvdHlwZS5yZWFkSW50MzJCRT1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8TCh0LDQsdGhpcy5sZW5ndGgpLHRoaXNbdF08PDI0fHRoaXNbdCsxXTw8MTZ8dGhpc1t0KzJdPDw4fHRoaXNbdCszXX0scy5wcm90b3R5cGUucmVhZEZsb2F0TEU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fEwodCw0LHRoaXMubGVuZ3RoKSxpLnJlYWQodGhpcyx0LCEwLDIzLDQpfSxzLnByb3RvdHlwZS5yZWFkRmxvYXRCRT1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8TCh0LDQsdGhpcy5sZW5ndGgpLGkucmVhZCh0aGlzLHQsITEsMjMsNCl9LHMucHJvdG90eXBlLnJlYWREb3VibGVMRT1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8TCh0LDgsdGhpcy5sZW5ndGgpLGkucmVhZCh0aGlzLHQsITAsNTIsOCl9LHMucHJvdG90eXBlLnJlYWREb3VibGVCRT1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8TCh0LDgsdGhpcy5sZW5ndGgpLGkucmVhZCh0aGlzLHQsITEsNTIsOCl9LHMucHJvdG90eXBlLndyaXRlVUludExFPWZ1bmN0aW9uKHQsZSxyLG4peyh0PSt0LGU+Pj49MCxyPj4+PTAsbil8fHoodGhpcyx0LGUscixNYXRoLnBvdygyLDgqciktMSwwKTt2YXIgaT0xLGE9MDtmb3IodGhpc1tlXT0yNTUmdDsrK2E8ciYmKGkqPTI1Nik7KXRoaXNbZSthXT10L2kmMjU1O3JldHVybiBlK3J9LHMucHJvdG90eXBlLndyaXRlVUludEJFPWZ1bmN0aW9uKHQsZSxyLG4peyh0PSt0LGU+Pj49MCxyPj4+PTAsbil8fHoodGhpcyx0LGUscixNYXRoLnBvdygyLDgqciktMSwwKTt2YXIgaT1yLTEsYT0xO2Zvcih0aGlzW2UraV09MjU1JnQ7LS1pPj0wJiYoYSo9MjU2KTspdGhpc1tlK2ldPXQvYSYyNTU7cmV0dXJuIGUrcn0scy5wcm90b3R5cGUud3JpdGVVSW50OD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9K3QsZT4+Pj0wLHJ8fHoodGhpcyx0LGUsMSwyNTUsMCksdGhpc1tlXT0yNTUmdCxlKzF9LHMucHJvdG90eXBlLndyaXRlVUludDE2TEU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGU+Pj49MCxyfHx6KHRoaXMsdCxlLDIsNjU1MzUsMCksdGhpc1tlXT0yNTUmdCx0aGlzW2UrMV09dD4+PjgsZSsyfSxzLnByb3RvdHlwZS53cml0ZVVJbnQxNkJFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD0rdCxlPj4+PTAscnx8eih0aGlzLHQsZSwyLDY1NTM1LDApLHRoaXNbZV09dD4+PjgsdGhpc1tlKzFdPTI1NSZ0LGUrMn0scy5wcm90b3R5cGUud3JpdGVVSW50MzJMRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9K3QsZT4+Pj0wLHJ8fHoodGhpcyx0LGUsNCw0Mjk0OTY3Mjk1LDApLHRoaXNbZSszXT10Pj4+MjQsdGhpc1tlKzJdPXQ+Pj4xNix0aGlzW2UrMV09dD4+PjgsdGhpc1tlXT0yNTUmdCxlKzR9LHMucHJvdG90eXBlLndyaXRlVUludDMyQkU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGU+Pj49MCxyfHx6KHRoaXMsdCxlLDQsNDI5NDk2NzI5NSwwKSx0aGlzW2VdPXQ+Pj4yNCx0aGlzW2UrMV09dD4+PjE2LHRoaXNbZSsyXT10Pj4+OCx0aGlzW2UrM109MjU1JnQsZSs0fSxzLnByb3RvdHlwZS53cml0ZUludExFPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKHQ9K3QsZT4+Pj0wLCFuKXt2YXIgaT1NYXRoLnBvdygyLDgqci0xKTt6KHRoaXMsdCxlLHIsaS0xLC1pKX12YXIgYT0wLG89MSxzPTA7Zm9yKHRoaXNbZV09MjU1JnQ7KythPHImJihvKj0yNTYpOyl0PDAmJjA9PT1zJiYwIT09dGhpc1tlK2EtMV0mJihzPTEpLHRoaXNbZSthXT0odC9vPj4wKS1zJjI1NTtyZXR1cm4gZStyfSxzLnByb3RvdHlwZS53cml0ZUludEJFPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKHQ9K3QsZT4+Pj0wLCFuKXt2YXIgaT1NYXRoLnBvdygyLDgqci0xKTt6KHRoaXMsdCxlLHIsaS0xLC1pKX12YXIgYT1yLTEsbz0xLHM9MDtmb3IodGhpc1tlK2FdPTI1NSZ0Oy0tYT49MCYmKG8qPTI1Nik7KXQ8MCYmMD09PXMmJjAhPT10aGlzW2UrYSsxXSYmKHM9MSksdGhpc1tlK2FdPSh0L28+PjApLXMmMjU1O3JldHVybiBlK3J9LHMucHJvdG90eXBlLndyaXRlSW50OD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9K3QsZT4+Pj0wLHJ8fHoodGhpcyx0LGUsMSwxMjcsLTEyOCksdDwwJiYodD0yNTUrdCsxKSx0aGlzW2VdPTI1NSZ0LGUrMX0scy5wcm90b3R5cGUud3JpdGVJbnQxNkxFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD0rdCxlPj4+PTAscnx8eih0aGlzLHQsZSwyLDMyNzY3LC0zMjc2OCksdGhpc1tlXT0yNTUmdCx0aGlzW2UrMV09dD4+PjgsZSsyfSxzLnByb3RvdHlwZS53cml0ZUludDE2QkU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGU+Pj49MCxyfHx6KHRoaXMsdCxlLDIsMzI3NjcsLTMyNzY4KSx0aGlzW2VdPXQ+Pj44LHRoaXNbZSsxXT0yNTUmdCxlKzJ9LHMucHJvdG90eXBlLndyaXRlSW50MzJMRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9K3QsZT4+Pj0wLHJ8fHoodGhpcyx0LGUsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSx0aGlzW2VdPTI1NSZ0LHRoaXNbZSsxXT10Pj4+OCx0aGlzW2UrMl09dD4+PjE2LHRoaXNbZSszXT10Pj4+MjQsZSs0fSxzLnByb3RvdHlwZS53cml0ZUludDMyQkU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGU+Pj49MCxyfHx6KHRoaXMsdCxlLDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksdDwwJiYodD00Mjk0OTY3Mjk1K3QrMSksdGhpc1tlXT10Pj4+MjQsdGhpc1tlKzFdPXQ+Pj4xNix0aGlzW2UrMl09dD4+PjgsdGhpc1tlKzNdPTI1NSZ0LGUrNH0scy5wcm90b3R5cGUud3JpdGVGbG9hdExFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gSSh0aGlzLHQsZSwhMCxyKX0scy5wcm90b3R5cGUud3JpdGVGbG9hdEJFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gSSh0aGlzLHQsZSwhMSxyKX0scy5wcm90b3R5cGUud3JpdGVEb3VibGVMRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIE8odGhpcyx0LGUsITAscil9LHMucHJvdG90eXBlLndyaXRlRG91YmxlQkU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBPKHRoaXMsdCxlLCExLHIpfSxzLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHQsZSxyLG4pe2lmKCFzLmlzQnVmZmVyKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoImFyZ3VtZW50IHNob3VsZCBiZSBhIEJ1ZmZlciIpO2lmKHJ8fChyPTApLG58fDA9PT1ufHwobj10aGlzLmxlbmd0aCksZT49dC5sZW5ndGgmJihlPXQubGVuZ3RoKSxlfHwoZT0wKSxuPjAmJm48ciYmKG49ciksbj09PXIpcmV0dXJuIDA7aWYoMD09PXQubGVuZ3RofHwwPT09dGhpcy5sZW5ndGgpcmV0dXJuIDA7aWYoZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJ0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzIik7aWYocjwwfHxyPj10aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIik7aWYobjwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJzb3VyY2VFbmQgb3V0IG9mIGJvdW5kcyIpO24+dGhpcy5sZW5ndGgmJihuPXRoaXMubGVuZ3RoKSx0Lmxlbmd0aC1lPG4tciYmKG49dC5sZW5ndGgtZStyKTt2YXIgaT1uLXI7aWYodGhpcz09PXQmJiJmdW5jdGlvbiI9PXR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluKXRoaXMuY29weVdpdGhpbihlLHIsbik7ZWxzZSBpZih0aGlzPT09dCYmcjxlJiZlPG4pZm9yKHZhciBhPWktMTthPj0wOy0tYSl0W2ErZV09dGhpc1thK3JdO2Vsc2UgVWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwodCx0aGlzLnN1YmFycmF5KHIsbiksZSk7cmV0dXJuIGl9LHMucHJvdG90eXBlLmZpbGw9ZnVuY3Rpb24odCxlLHIsbil7aWYoInN0cmluZyI9PXR5cGVvZiB0KXtpZigic3RyaW5nIj09dHlwZW9mIGU/KG49ZSxlPTAscj10aGlzLmxlbmd0aCk6InN0cmluZyI9PXR5cGVvZiByJiYobj1yLHI9dGhpcy5sZW5ndGgpLHZvaWQgMCE9PW4mJiJzdHJpbmciIT10eXBlb2Ygbil0aHJvdyBuZXcgVHlwZUVycm9yKCJlbmNvZGluZyBtdXN0IGJlIGEgc3RyaW5nIik7aWYoInN0cmluZyI9PXR5cGVvZiBuJiYhcy5pc0VuY29kaW5nKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrbik7aWYoMT09PXQubGVuZ3RoKXt2YXIgaT10LmNoYXJDb2RlQXQoMCk7KCJ1dGY4Ij09PW4mJmk8MTI4fHwibGF0aW4xIj09PW4pJiYodD1pKX19ZWxzZSJudW1iZXIiPT10eXBlb2YgdCYmKHQmPTI1NSk7aWYoZTwwfHx0aGlzLmxlbmd0aDxlfHx0aGlzLmxlbmd0aDxyKXRocm93IG5ldyBSYW5nZUVycm9yKCJPdXQgb2YgcmFuZ2UgaW5kZXgiKTtpZihyPD1lKXJldHVybiB0aGlzO3ZhciBhO2lmKGU+Pj49MCxyPXZvaWQgMD09PXI/dGhpcy5sZW5ndGg6cj4+PjAsdHx8KHQ9MCksIm51bWJlciI9PXR5cGVvZiB0KWZvcihhPWU7YTxyOysrYSl0aGlzW2FdPXQ7ZWxzZXt2YXIgbz1zLmlzQnVmZmVyKHQpP3Q6bmV3IHModCxuKSxsPW8ubGVuZ3RoO2lmKDA9PT1sKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSB2YWx1ZSAiJyt0KyciIGlzIGludmFsaWQgZm9yIGFyZ3VtZW50ICJ2YWx1ZSInKTtmb3IoYT0wO2E8ci1lOysrYSl0aGlzW2ErZV09b1thJWxdfXJldHVybiB0aGlzfTt2YXIgRD0vW14rLzAtOUEtWmEtei1fXS9nO2Z1bmN0aW9uIFIodCl7cmV0dXJuIHQ8MTY/IjAiK3QudG9TdHJpbmcoMTYpOnQudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIEIodCxlKXt2YXIgcjtlPWV8fDEvMDtmb3IodmFyIG49dC5sZW5ndGgsaT1udWxsLGE9W10sbz0wO288bjsrK28pe2lmKChyPXQuY2hhckNvZGVBdChvKSk+NTUyOTUmJnI8NTczNDQpe2lmKCFpKXtpZihyPjU2MzE5KXsoZS09Myk+LTEmJmEucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9aWYobysxPT09bil7KGUtPTMpPi0xJiZhLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWk9cjtjb250aW51ZX1pZihyPDU2MzIwKXsoZS09Myk+LTEmJmEucHVzaCgyMzksMTkxLDE4OSksaT1yO2NvbnRpbnVlfXI9NjU1MzYrKGktNTUyOTY8PDEwfHItNTYzMjApfWVsc2UgaSYmKGUtPTMpPi0xJiZhLnB1c2goMjM5LDE5MSwxODkpO2lmKGk9bnVsbCxyPDEyOCl7aWYoKGUtPTEpPDApYnJlYWs7YS5wdXNoKHIpfWVsc2UgaWYocjwyMDQ4KXtpZigoZS09Mik8MClicmVhazthLnB1c2gocj4+NnwxOTIsNjMmcnwxMjgpfWVsc2UgaWYocjw2NTUzNil7aWYoKGUtPTMpPDApYnJlYWs7YS5wdXNoKHI+PjEyfDIyNCxyPj42JjYzfDEyOCw2MyZyfDEyOCl9ZWxzZXtpZighKHI8MTExNDExMikpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvZGUgcG9pbnQiKTtpZigoZS09NCk8MClicmVhazthLnB1c2gocj4+MTh8MjQwLHI+PjEyJjYzfDEyOCxyPj42JjYzfDEyOCw2MyZyfDEyOCl9fXJldHVybiBhfWZ1bmN0aW9uIEYodCl7cmV0dXJuIG4udG9CeXRlQXJyYXkoZnVuY3Rpb24odCl7aWYoKHQ9KHQ9dC5zcGxpdCgiPSIpWzBdKS50cmltKCkucmVwbGFjZShELCIiKSkubGVuZ3RoPDIpcmV0dXJuIiI7Zm9yKDt0Lmxlbmd0aCU0IT0wOyl0Kz0iPSI7cmV0dXJuIHR9KHQpKX1mdW5jdGlvbiBOKHQsZSxyLG4pe2Zvcih2YXIgaT0wO2k8biYmIShpK3I+PWUubGVuZ3RofHxpPj10Lmxlbmd0aCk7KytpKWVbaStyXT10W2ldO3JldHVybiBpfWZ1bmN0aW9uIGoodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcnx8bnVsbCE9dCYmbnVsbCE9dC5jb25zdHJ1Y3RvciYmIkFycmF5QnVmZmVyIj09PXQuY29uc3RydWN0b3IubmFtZSYmIm51bWJlciI9PXR5cGVvZiB0LmJ5dGVMZW5ndGh9ZnVuY3Rpb24gVih0KXtyZXR1cm4gdCE9dH19LHsiYmFzZTY0LWpzIjo2MixpZWVlNzU0OjM4MH1dLDkzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vbGliL21vbm90b25lIiksaT10KCIuL2xpYi90cmlhbmd1bGF0aW9uIiksYT10KCIuL2xpYi9kZWxhdW5heSIpLG89dCgiLi9saWIvZmlsdGVyIik7ZnVuY3Rpb24gcyh0KXtyZXR1cm5bTWF0aC5taW4odFswXSx0WzFdKSxNYXRoLm1heCh0WzBdLHRbMV0pXX1mdW5jdGlvbiBsKHQsZSl7cmV0dXJuIHRbMF0tZVswXXx8dFsxXS1lWzFdfWZ1bmN0aW9uIGModCxlLHIpe3JldHVybiBlIGluIHQ/dFtlXTpyfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7QXJyYXkuaXNBcnJheShlKT8ocj1yfHx7fSxlPWV8fFtdKToocj1lfHx7fSxlPVtdKTt2YXIgdT0hIWMociwiZGVsYXVuYXkiLCEwKSxoPSEhYyhyLCJpbnRlcmlvciIsITApLGY9ISFjKHIsImV4dGVyaW9yIiwhMCkscD0hIWMociwiaW5maW5pdHkiLCExKTtpZighaCYmIWZ8fDA9PT10Lmxlbmd0aClyZXR1cm5bXTt2YXIgZD1uKHQsZSk7aWYodXx8aCE9PWZ8fHApe2Zvcih2YXIgZz1pKHQubGVuZ3RoLGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1hcChzKS5zb3J0KGwpfShlKSksbT0wO208ZC5sZW5ndGg7KyttKXt2YXIgdj1kW21dO2cuYWRkVHJpYW5nbGUodlswXSx2WzFdLHZbMl0pfXJldHVybiB1JiZhKHQsZyksZj9oP3A/byhnLDAscCk6Zy5jZWxscygpOm8oZywxLHApOm8oZywtMSl9cmV0dXJuIGR9fSx7Ii4vbGliL2RlbGF1bmF5Ijo5NCwiLi9saWIvZmlsdGVyIjo5NSwiLi9saWIvbW9ub3RvbmUiOjk2LCIuL2xpYi90cmlhbmd1bGF0aW9uIjo5N31dLDk0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInJvYnVzdC1pbi1zcGhlcmUiKVs0XTt0KCJiaW5hcnktc2VhcmNoLWJvdW5kcyIpO2Z1bmN0aW9uIGkodCxlLHIsaSxhLG8pe3ZhciBzPWUub3Bwb3NpdGUoaSxhKTtpZighKHM8MCkpe2lmKGE8aSl7dmFyIGw9aTtpPWEsYT1sLGw9byxvPXMscz1sfWUuaXNDb25zdHJhaW50KGksYSl8fG4odFtpXSx0W2FdLHRbb10sdFtzXSk8MCYmci5wdXNoKGksYSl9fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxhPXQubGVuZ3RoLG89ZS5zdGFycyxzPTA7czxhOysrcylmb3IodmFyIGw9b1tzXSxjPTE7YzxsLmxlbmd0aDtjKz0yKXt2YXIgdT1sW2NdO2lmKCEodTxzKSYmIWUuaXNDb25zdHJhaW50KHMsdSkpe2Zvcih2YXIgaD1sW2MtMV0sZj0tMSxwPTE7cDxsLmxlbmd0aDtwKz0yKWlmKGxbcC0xXT09PXUpe2Y9bFtwXTticmVha31mPDB8fG4odFtzXSx0W3VdLHRbaF0sdFtmXSk8MCYmci5wdXNoKHMsdSl9fWZvcig7ci5sZW5ndGg+MDspe2Zvcih2YXIgdT1yLnBvcCgpLHM9ci5wb3AoKSxoPS0xLGY9LTEsbD1vW3NdLGQ9MTtkPGwubGVuZ3RoO2QrPTIpe3ZhciBnPWxbZC0xXSxtPWxbZF07Zz09PXU/Zj1tOm09PT11JiYoaD1nKX1oPDB8fGY8MHx8KG4odFtzXSx0W3VdLHRbaF0sdFtmXSk+PTB8fChlLmZsaXAocyx1KSxpKHQsZSxyLGgscyxmKSxpKHQsZSxyLHMsZixoKSxpKHQsZSxyLGYsdSxoKSxpKHQsZSxyLHUsaCxmKSkpfX19LHsiYmluYXJ5LXNlYXJjaC1ib3VuZHMiOjk4LCJyb2J1c3QtaW4tc3BoZXJlIjo0Njl9XSw5NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixpPXQoImJpbmFyeS1zZWFyY2gtYm91bmRzIik7ZnVuY3Rpb24gYSh0LGUscixuLGksYSxvKXt0aGlzLmNlbGxzPXQsdGhpcy5uZWlnaGJvcj1lLHRoaXMuZmxhZ3M9bix0aGlzLmNvbnN0cmFpbnQ9cix0aGlzLmFjdGl2ZT1pLHRoaXMubmV4dD1hLHRoaXMuYm91bmRhcnk9b31mdW5jdGlvbiBvKHQsZSl7cmV0dXJuIHRbMF0tZVswXXx8dFsxXS1lWzFdfHx0WzJdLWVbMl19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LmNlbGxzKCksbj1yLmxlbmd0aCxpPTA7aTxuOysraSl7dmFyIHM9cltpXSxsPXNbMF0sYz1zWzFdLHU9c1syXTtjPHU/YzxsJiYoc1swXT1jLHNbMV09dSxzWzJdPWwpOnU8bCYmKHNbMF09dSxzWzFdPWwsc1syXT1jKX1yLnNvcnQobyk7Zm9yKHZhciBoPW5ldyBBcnJheShuKSxpPTA7aTxoLmxlbmd0aDsrK2kpaFtpXT0wO3ZhciBmPVtdLHA9W10sZD1uZXcgQXJyYXkoMypuKSxnPW5ldyBBcnJheSgzKm4pLG09bnVsbDtlJiYobT1bXSk7Zm9yKHZhciB2PW5ldyBhKHIsZCxnLGgsZixwLG0pLGk9MDtpPG47KytpKWZvcih2YXIgcz1yW2ldLHk9MDt5PDM7Kyt5KXt2YXIgbD1zW3ldLGM9c1soeSsxKSUzXSx4PWRbMyppK3ldPXYubG9jYXRlKGMsbCx0Lm9wcG9zaXRlKGMsbCkpLGI9Z1szKmkreV09dC5pc0NvbnN0cmFpbnQobCxjKTt4PDAmJihiP3AucHVzaChpKTooZi5wdXNoKGkpLGhbaV09MSksZSYmbS5wdXNoKFtjLGwsLTFdKSl9cmV0dXJuIHZ9KHQscik7aWYoMD09PWUpcmV0dXJuIHI/bi5jZWxscy5jb25jYXQobi5ib3VuZGFyeSk6bi5jZWxsczt2YXIgaT0xLHM9bi5hY3RpdmUsbD1uLm5leHQsYz1uLmZsYWdzLHU9bi5jZWxscyxoPW4uY29uc3RyYWludCxmPW4ubmVpZ2hib3I7Zm9yKDtzLmxlbmd0aD4wfHxsLmxlbmd0aD4wOyl7Zm9yKDtzLmxlbmd0aD4wOyl7dmFyIHA9cy5wb3AoKTtpZihjW3BdIT09LWkpe2NbcF09aTt1W3BdO2Zvcih2YXIgZD0wO2Q8MzsrK2Qpe3ZhciBnPWZbMypwK2RdO2c+PTAmJjA9PT1jW2ddJiYoaFszKnArZF0/bC5wdXNoKGcpOihzLnB1c2goZyksY1tnXT1pKSl9fX12YXIgbT1sO2w9cyxzPW0sbC5sZW5ndGg9MCxpPS1pfXZhciB2PWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49MCxpPTA7aTx0Lmxlbmd0aDsrK2kpZVtpXT09PXImJih0W24rK109dFtpXSk7cmV0dXJuIHQubGVuZ3RoPW4sdH0odSxjLGUpO2lmKHIpcmV0dXJuIHYuY29uY2F0KG4uYm91bmRhcnkpO3JldHVybiB2fSxhLnByb3RvdHlwZS5sb2NhdGU9KG49WzAsMCwwXSxmdW5jdGlvbih0LGUscil7dmFyIGE9dCxzPWUsbD1yO3JldHVybiBlPHI/ZTx0JiYoYT1lLHM9cixsPXQpOnI8dCYmKGE9cixzPXQsbD1lKSxhPDA/LTE6KG5bMF09YSxuWzFdPXMsblsyXT1sLGkuZXEodGhpcy5jZWxscyxuLG8pKX0pfSx7ImJpbmFyeS1zZWFyY2gtYm91bmRzIjo5OH1dLDk2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImJpbmFyeS1zZWFyY2gtYm91bmRzIiksaT10KCJyb2J1c3Qtb3JpZW50YXRpb24iKVszXSxhPTAsbz0xLHM9MjtmdW5jdGlvbiBsKHQsZSxyLG4saSl7dGhpcy5hPXQsdGhpcy5iPWUsdGhpcy5pZHg9cix0aGlzLmxvd2VySWRzPW4sdGhpcy51cHBlcklkcz1pfWZ1bmN0aW9uIGModCxlLHIsbil7dGhpcy5hPXQsdGhpcy5iPWUsdGhpcy50eXBlPXIsdGhpcy5pZHg9bn1mdW5jdGlvbiB1KHQsZSl7dmFyIHI9dC5hWzBdLWUuYVswXXx8dC5hWzFdLWUuYVsxXXx8dC50eXBlLWUudHlwZTtyZXR1cm4gcnx8KHQudHlwZSE9PWEmJihyPWkodC5hLHQuYixlLmIpKT9yOnQuaWR4LWUuaWR4KX1mdW5jdGlvbiBoKHQsZSl7cmV0dXJuIGkodC5hLHQuYixlKX1mdW5jdGlvbiBmKHQsZSxyLGEsbyl7Zm9yKHZhciBzPW4ubHQoZSxhLGgpLGw9bi5ndChlLGEsaCksYz1zO2M8bDsrK2Mpe2Zvcih2YXIgdT1lW2NdLGY9dS5sb3dlcklkcyxwPWYubGVuZ3RoO3A+MSYmaShyW2ZbcC0yXV0scltmW3AtMV1dLGEpPjA7KXQucHVzaChbZltwLTFdLGZbcC0yXSxvXSkscC09MTtmLmxlbmd0aD1wLGYucHVzaChvKTt2YXIgZD11LnVwcGVySWRzO2ZvcihwPWQubGVuZ3RoO3A+MSYmaShyW2RbcC0yXV0scltkW3AtMV1dLGEpPDA7KXQucHVzaChbZFtwLTJdLGRbcC0xXSxvXSkscC09MTtkLmxlbmd0aD1wLGQucHVzaChvKX19ZnVuY3Rpb24gcCh0LGUpe3ZhciByO3JldHVybihyPXQuYVswXTxlLmFbMF0/aSh0LmEsdC5iLGUuYSk6aShlLmIsZS5hLHQuYSkpP3I6KHI9ZS5iWzBdPHQuYlswXT9pKHQuYSx0LmIsZS5iKTppKGUuYixlLmEsdC5iKSl8fHQuaWR4LWUuaWR4fWZ1bmN0aW9uIGQodCxlLHIpe3ZhciBpPW4ubGUodCxyLHApLGE9dFtpXSxvPWEudXBwZXJJZHMscz1vW28ubGVuZ3RoLTFdO2EudXBwZXJJZHM9W3NdLHQuc3BsaWNlKGkrMSwwLG5ldyBsKHIuYSxyLmIsci5pZHgsW3NdLG8pKX1mdW5jdGlvbiBnKHQsZSxyKXt2YXIgaT1yLmE7ci5hPXIuYixyLmI9aTt2YXIgYT1uLmVxKHQscixwKSxvPXRbYV07dFthLTFdLnVwcGVySWRzPW8udXBwZXJJZHMsdC5zcGxpY2UoYSwxKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5sZW5ndGgsbj1lLmxlbmd0aCxpPVtdLGg9MDtoPHI7KytoKWkucHVzaChuZXcgYyh0W2hdLG51bGwsYSxoKSk7Zm9yKHZhciBoPTA7aDxuOysraCl7dmFyIHA9ZVtoXSxtPXRbcFswXV0sdj10W3BbMV1dO21bMF08dlswXT9pLnB1c2gobmV3IGMobSx2LHMsaCksbmV3IGModixtLG8saCkpOm1bMF0+dlswXSYmaS5wdXNoKG5ldyBjKHYsbSxzLGgpLG5ldyBjKG0sdixvLGgpKX1pLnNvcnQodSk7Zm9yKHZhciB5PWlbMF0uYVswXS0oMStNYXRoLmFicyhpWzBdLmFbMF0pKSpNYXRoLnBvdygyLC01MikseD1bbmV3IGwoW3ksMV0sW3ksMF0sLTEsW10sW10sW10sW10pXSxiPVtdLGg9MCxfPWkubGVuZ3RoO2g8XzsrK2gpe3ZhciB3PWlbaF0saz13LnR5cGU7az09PWE/ZihiLHgsdCx3LmEsdy5pZHgpOms9PT1zP2QoeCx0LHcpOmcoeCx0LHcpfXJldHVybiBifX0seyJiaW5hcnktc2VhcmNoLWJvdW5kcyI6OTgsInJvYnVzdC1vcmllbnRhdGlvbiI6NDcxfV0sOTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiYmluYXJ5LXNlYXJjaC1ib3VuZHMiKTtmdW5jdGlvbiBpKHQsZSl7dGhpcy5zdGFycz10LHRoaXMuZWRnZXM9ZX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KHQpLG49MDtuPHQ7KytuKXJbbl09W107cmV0dXJuIG5ldyBpKHIsZSl9O3ZhciBhPWkucHJvdG90eXBlO2Z1bmN0aW9uIG8odCxlLHIpe2Zvcih2YXIgbj0xLGk9dC5sZW5ndGg7bjxpO24rPTIpaWYodFtuLTFdPT09ZSYmdFtuXT09PXIpcmV0dXJuIHRbbi0xXT10W2ktMl0sdFtuXT10W2ktMV0sdm9pZCh0Lmxlbmd0aD1pLTIpfWEuaXNDb25zdHJhaW50PWZ1bmN0aW9uKCl7dmFyIHQ9WzAsMF07ZnVuY3Rpb24gZSh0LGUpe3JldHVybiB0WzBdLWVbMF18fHRbMV0tZVsxXX1yZXR1cm4gZnVuY3Rpb24ocixpKXtyZXR1cm4gdFswXT1NYXRoLm1pbihyLGkpLHRbMV09TWF0aC5tYXgocixpKSxuLmVxKHRoaXMuZWRnZXMsdCxlKT49MH19KCksYS5yZW1vdmVUcmlhbmdsZT1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5zdGFycztvKG5bdF0sZSxyKSxvKG5bZV0scix0KSxvKG5bcl0sdCxlKX0sYS5hZGRUcmlhbmdsZT1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5zdGFycztuW3RdLnB1c2goZSxyKSxuW2VdLnB1c2gocix0KSxuW3JdLnB1c2godCxlKX0sYS5vcHBvc2l0ZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10aGlzLnN0YXJzW2VdLG49MSxpPXIubGVuZ3RoO248aTtuKz0yKWlmKHJbbl09PT10KXJldHVybiByW24tMV07cmV0dXJuLTF9LGEuZmxpcD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMub3Bwb3NpdGUodCxlKSxuPXRoaXMub3Bwb3NpdGUoZSx0KTt0aGlzLnJlbW92ZVRyaWFuZ2xlKHQsZSxyKSx0aGlzLnJlbW92ZVRyaWFuZ2xlKGUsdCxuKSx0aGlzLmFkZFRyaWFuZ2xlKHQsbixyKSx0aGlzLmFkZFRyaWFuZ2xlKGUscixuKX0sYS5lZGdlcz1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLnN0YXJzLGU9W10scj0wLG49dC5sZW5ndGg7cjxuOysrcilmb3IodmFyIGk9dFtyXSxhPTAsbz1pLmxlbmd0aDthPG87YSs9MillLnB1c2goW2lbYV0saVthKzFdXSk7cmV0dXJuIGV9LGEuY2VsbHM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5zdGFycyxlPVtdLHI9MCxuPXQubGVuZ3RoO3I8bjsrK3IpZm9yKHZhciBpPXRbcl0sYT0wLG89aS5sZW5ndGg7YTxvO2ErPTIpe3ZhciBzPWlbYV0sbD1pW2ErMV07cjxNYXRoLm1pbihzLGwpJiZlLnB1c2goW3IscyxsXSl9cmV0dXJuIGV9fSx7ImJpbmFyeS1zZWFyY2gtYm91bmRzIjo5OH1dLDk4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbixpKXt2YXIgYT1bImZ1bmN0aW9uICIsdCwiKGEsbCxoLCIsbi5qb2luKCIsIiksIil7IixpPyIiOiJ2YXIgaT0iLHI/ImwtMSI6ImgrMSIsIjt3aGlsZShsPD1oKXt2YXIgbT0obCtoKT4+PjEseD1hW21dIl07cmV0dXJuIGk/ZS5pbmRleE9mKCJjIik8MD9hLnB1c2goIjtpZih4PT09eSl7cmV0dXJuIG19ZWxzZSBpZih4PD15KXsiKTphLnB1c2goIjt2YXIgcD1jKHgseSk7aWYocD09PTApe3JldHVybiBtfWVsc2UgaWYocDw9MCl7Iik6YS5wdXNoKCI7aWYoIixlLCIpe2k9bTsiKSxyP2EucHVzaCgibD1tKzF9ZWxzZXtoPW0tMX0iKTphLnB1c2goImg9bS0xfWVsc2V7bD1tKzF9IiksYS5wdXNoKCJ9IiksaT9hLnB1c2goInJldHVybiAtMX07Iik6YS5wdXNoKCJyZXR1cm4gaX07IiksYS5qb2luKCIiKX1mdW5jdGlvbiBpKHQsZSxyLGkpe3JldHVybiBuZXcgRnVuY3Rpb24oW24oIkEiLCJ4Iit0KyJ5IixlLFsieSJdLGkpLG4oIlAiLCJjKHgseSkiK3QrIjAiLGUsWyJ5IiwiYyJdLGkpLCJmdW5jdGlvbiBkaXNwYXRjaEJzZWFyY2giLHIsIihhLHksYyxsLGgpe2lmKHR5cGVvZihjKT09PSdmdW5jdGlvbicpe3JldHVybiBQKGEsKGw9PT12b2lkIDApPzA6bHwwLChoPT09dm9pZCAwKT9hLmxlbmd0aC0xOmh8MCx5LGMpfWVsc2V7cmV0dXJuIEEoYSwoYz09PXZvaWQgMCk/MDpjfDAsKGw9PT12b2lkIDApP2EubGVuZ3RoLTE6bHwwLHkpfX1yZXR1cm4gZGlzcGF0Y2hCc2VhcmNoIixyXS5qb2luKCIiKSkoKX1lLmV4cG9ydHM9e2dlOmkoIj49IiwhMSwiR0UiKSxndDppKCI+IiwhMSwiR1QiKSxsdDppKCI8IiwhMCwiTFQiKSxsZTppKCI8PSIsITAsIkxFIiksZXE6aSgiLSIsITAsIkVRIiwhMCl9fSx7fV0sOTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0xLHI9MTtyPHQubGVuZ3RoOysrcilmb3IodmFyIG49MDtuPHI7KytuKWlmKHRbcl08dFtuXSllPS1lO2Vsc2UgaWYodFtuXT09PXRbcl0pcmV0dXJuIDA7cmV0dXJuIGV9fSx7fV0sMTAwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImR1cCIpLGk9dCgicm9idXN0LWxpbmVhci1zb2x2ZSIpO2Z1bmN0aW9uIGEodCxlKXtmb3IodmFyIHI9MCxuPXQubGVuZ3RoLGk9MDtpPG47KytpKXIrPXRbaV0qZVtpXTtyZXR1cm4gcn1mdW5jdGlvbiBvKHQpe3ZhciBlPXQubGVuZ3RoO2lmKDA9PT1lKXJldHVybltdO3RbMF0ubGVuZ3RoO3ZhciByPW4oW3QubGVuZ3RoKzEsdC5sZW5ndGgrMV0sMSksbz1uKFt0Lmxlbmd0aCsxXSwxKTtyW2VdW2VdPTA7Zm9yKHZhciBzPTA7czxlOysrcyl7Zm9yKHZhciBsPTA7bDw9czsrK2wpcltsXVtzXT1yW3NdW2xdPTIqYSh0W3NdLHRbbF0pO29bc109YSh0W3NdLHRbc10pfXZhciBjPWkocixvKSx1PTAsaD1jW2UrMV07Zm9yKHM9MDtzPGgubGVuZ3RoOysrcyl1Kz1oW3NdO3ZhciBmPW5ldyBBcnJheShlKTtmb3Iocz0wO3M8ZTsrK3Mpe2g9Y1tzXTt2YXIgcD0wO2ZvcihsPTA7bDxoLmxlbmd0aDsrK2wpcCs9aFtsXTtmW3NdPXAvdX1yZXR1cm4gZn1mdW5jdGlvbiBzKHQpe2lmKDA9PT10Lmxlbmd0aClyZXR1cm5bXTtmb3IodmFyIGU9dFswXS5sZW5ndGgscj1uKFtlXSksaT1vKHQpLGE9MDthPHQubGVuZ3RoOysrYSlmb3IodmFyIHM9MDtzPGU7KytzKXJbc10rPXRbYV1bc10qaVthXTtyZXR1cm4gcn1zLmJhcnljZW5ldHJpYz1vLGUuZXhwb3J0cz1zfSx7ZHVwOjE1NCwicm9idXN0LWxpbmVhci1zb2x2ZSI6NDcwfV0sMTAxOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uKHQpLHI9MCxpPTA7aTx0Lmxlbmd0aDsrK2kpZm9yKHZhciBhPXRbaV0sbz0wO288ZS5sZW5ndGg7KytvKXIrPU1hdGgucG93KGFbb10tZVtvXSwyKTtyZXR1cm4gTWF0aC5zcXJ0KHIvdC5sZW5ndGgpfTt2YXIgbj10KCJjaXJjdW1jZW50ZXIiKX0se2NpcmN1bWNlbnRlcjoxMDB9XSwxMDI6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBlPHI/dDxlP2U6dD5yP3I6dDp0PHI/cjp0PmU/ZTp0fX0se31dLDEwMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuO2lmKHIpe249ZTtmb3IodmFyIGk9bmV3IEFycmF5KGUubGVuZ3RoKSxhPTA7YTxlLmxlbmd0aDsrK2Epe3ZhciBvPWVbYV07aVthXT1bb1swXSxvWzFdLHJbYV1dfWU9aX12YXIgcz1mdW5jdGlvbih0LGUscil7dmFyIG49ZCh0LFtdLHAodCkpO3JldHVybiB2KGUsbixyKSwhIW59KHQsZSwhIXIpO2Zvcig7eSh0LGUsISFyKTspcz0hMDtpZihyJiZzKXtuLmxlbmd0aD0wLHIubGVuZ3RoPTA7Zm9yKHZhciBhPTA7YTxlLmxlbmd0aDsrK2Epe3ZhciBvPWVbYV07bi5wdXNoKFtvWzBdLG9bMV1dKSxyLnB1c2gob1syXSl9fXJldHVybiBzfTt2YXIgbj10KCJ1bmlvbi1maW5kIiksaT10KCJib3gtaW50ZXJzZWN0IiksYT10KCJyb2J1c3Qtc2VnbWVudC1pbnRlcnNlY3QiKSxvPXQoImJpZy1yYXQiKSxzPXQoImJpZy1yYXQvY21wIiksbD10KCJiaWctcmF0L3RvLWZsb2F0IiksYz10KCJyYXQtdmVjIiksdT10KCJuZXh0YWZ0ZXIiKSxoPXQoIi4vbGliL3JhdC1zZWctaW50ZXJzZWN0Iik7ZnVuY3Rpb24gZih0KXt2YXIgZT1sKHQpO3JldHVyblt1KGUsLTEvMCksdShlLDEvMCldfWZ1bmN0aW9uIHAodCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0Lmxlbmd0aCkscj0wO3I8dC5sZW5ndGg7KytyKXt2YXIgbj10W3JdO2Vbcl09W3UoblswXSwtMS8wKSx1KG5bMV0sLTEvMCksdShuWzBdLDEvMCksdShuWzFdLDEvMCldfXJldHVybiBlfWZ1bmN0aW9uIGQodCxlLHIpe2Zvcih2YXIgYT1lLmxlbmd0aCxvPW5ldyBuKGEpLHM9W10sbD0wO2w8ZS5sZW5ndGg7KytsKXt2YXIgYz1lW2xdLGg9ZihjWzBdKSxwPWYoY1sxXSk7cy5wdXNoKFt1KGhbMF0sLTEvMCksdShwWzBdLC0xLzApLHUoaFsxXSwxLzApLHUocFsxXSwxLzApXSl9aShzLGZ1bmN0aW9uKHQsZSl7by5saW5rKHQsZSl9KTt2YXIgZD0hMCxnPW5ldyBBcnJheShhKTtmb3IobD0wO2w8YTsrK2wpeyh2PW8uZmluZChsKSkhPT1sJiYoZD0hMSx0W3ZdPVtNYXRoLm1pbih0W2xdWzBdLHRbdl1bMF0pLE1hdGgubWluKHRbbF1bMV0sdFt2XVsxXSldKX1pZihkKXJldHVybiBudWxsO3ZhciBtPTA7Zm9yKGw9MDtsPGE7KytsKXt2YXIgdjsodj1vLmZpbmQobCkpPT09bD8oZ1tsXT1tLHRbbSsrXT10W2xdKTpnW2xdPS0xfXQubGVuZ3RoPW07Zm9yKGw9MDtsPGE7KytsKWdbbF08MCYmKGdbbF09Z1tvLmZpbmQobCldKTtyZXR1cm4gZ31mdW5jdGlvbiBnKHQsZSl7cmV0dXJuIHRbMF0tZVswXXx8dFsxXS1lWzFdfWZ1bmN0aW9uIG0odCxlKXt2YXIgcj10WzBdLWVbMF18fHRbMV0tZVsxXTtyZXR1cm4gcnx8KHRbMl08ZVsyXT8tMTp0WzJdPmVbMl0/MTowKX1mdW5jdGlvbiB2KHQsZSxyKXtpZigwIT09dC5sZW5ndGgpe2lmKGUpZm9yKHZhciBuPTA7bjx0Lmxlbmd0aDsrK24pe3ZhciBpPWVbKG89dFtuXSlbMF1dLGE9ZVtvWzFdXTtvWzBdPU1hdGgubWluKGksYSksb1sxXT1NYXRoLm1heChpLGEpfWVsc2UgZm9yKG49MDtuPHQubGVuZ3RoOysrbil7dmFyIG87aT0obz10W25dKVswXSxhPW9bMV07b1swXT1NYXRoLm1pbihpLGEpLG9bMV09TWF0aC5tYXgoaSxhKX1yP3Quc29ydChtKTp0LnNvcnQoZyk7dmFyIHM9MTtmb3Iobj0xO248dC5sZW5ndGg7KytuKXt2YXIgbD10W24tMV0sYz10W25dOyhjWzBdIT09bFswXXx8Y1sxXSE9PWxbMV18fHImJmNbMl0hPT1sWzJdKSYmKHRbcysrXT1jKX10Lmxlbmd0aD1zfX1mdW5jdGlvbiB5KHQsZSxyKXt2YXIgbj1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1uZXcgQXJyYXkoZS5sZW5ndGgpLG49MDtuPGUubGVuZ3RoOysrbil7dmFyIGk9ZVtuXSxhPXRbaVswXV0sbz10W2lbMV1dO3Jbbl09W3UoTWF0aC5taW4oYVswXSxvWzBdKSwtMS8wKSx1KE1hdGgubWluKGFbMV0sb1sxXSksLTEvMCksdShNYXRoLm1heChhWzBdLG9bMF0pLDEvMCksdShNYXRoLm1heChhWzFdLG9bMV0pLDEvMCldfXJldHVybiByfSh0LGUpLGY9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPVtdO3JldHVybiBpKHIsZnVuY3Rpb24ocixpKXt2YXIgbz1lW3JdLHM9ZVtpXTtpZihvWzBdIT09c1swXSYmb1swXSE9PXNbMV0mJm9bMV0hPT1zWzBdJiZvWzFdIT09c1sxXSl7dmFyIGw9dFtvWzBdXSxjPXRbb1sxXV0sdT10W3NbMF1dLGg9dFtzWzFdXTthKGwsYyx1LGgpJiZuLnB1c2goW3IsaV0pfX0pLG59KHQsZSxuKSxnPXAodCksbT1mdW5jdGlvbih0LGUscixuKXt2YXIgbz1bXTtyZXR1cm4gaShyLG4sZnVuY3Rpb24ocixuKXt2YXIgaT1lW3JdO2lmKGlbMF0hPT1uJiZpWzFdIT09bil7dmFyIHM9dFtuXSxsPXRbaVswXV0sYz10W2lbMV1dO2EobCxjLHMscykmJm8ucHVzaChbcixuXSl9fSksb30odCxlLG4sZykseT1kKHQsZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYSx1LGY9dC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuW28odFswXSksbyh0WzFdKV19KTtmb3IoYT0wO2E8ci5sZW5ndGg7KythKXt2YXIgcD1yW2FdO3U9cFswXTt2YXIgZD1wWzFdLGc9ZVt1XSxtPWVbZF0sdj1oKGModFtnWzBdXSksYyh0W2dbMV1dKSxjKHRbbVswXV0pLGModFttWzFdXSkpO2lmKHYpe3ZhciB5PXQubGVuZ3RoO3QucHVzaChbbCh2WzBdKSxsKHZbMV0pXSksZi5wdXNoKHYpLG4ucHVzaChbdSx5XSxbZCx5XSl9fWZvcihuLnNvcnQoZnVuY3Rpb24odCxlKXtpZih0WzBdIT09ZVswXSlyZXR1cm4gdFswXS1lWzBdO3ZhciByPWZbdFsxXV0sbj1mW2VbMV1dO3JldHVybiBzKHJbMF0sblswXSl8fHMoclsxXSxuWzFdKX0pLGE9bi5sZW5ndGgtMTthPj0wOy0tYSl7dmFyIHg9ZVt1PShTPW5bYV0pWzBdXSxiPXhbMF0sXz14WzFdLHc9dFtiXSxrPXRbX107aWYoKHdbMF0ta1swXXx8d1sxXS1rWzFdKTwwKXt2YXIgTT1iO2I9XyxfPU19eFswXT1iO3ZhciBBLFQ9eFsxXT1TWzFdO2ZvcihpJiYoQT14WzJdKTthPjAmJm5bYS0xXVswXT09PXU7KXt2YXIgUyxFPShTPW5bLS1hXSlbMV07aT9lLnB1c2goW1QsRSxBXSk6ZS5wdXNoKFtULEVdKSxUPUV9aT9lLnB1c2goW1QsXyxBXSk6ZS5wdXNoKFtULF9dKX1yZXR1cm4gZn0odCxlLGYsbSxyKSk7cmV0dXJuIHYoZSx5LHIpLCEheXx8KGYubGVuZ3RoPjB8fG0ubGVuZ3RoPjApfX0seyIuL2xpYi9yYXQtc2VnLWludGVyc2VjdCI6MTA0LCJiaWctcmF0Ijo2NiwiYmlnLXJhdC9jbXAiOjY0LCJiaWctcmF0L3RvLWZsb2F0Ijo3OCwiYm94LWludGVyc2VjdCI6ODQsbmV4dGFmdGVyOjQxOCwicmF0LXZlYyI6NDUzLCJyb2J1c3Qtc2VnbWVudC1pbnRlcnNlY3QiOjQ3NCwidW5pb24tZmluZCI6NTA4fV0sMTA0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXt2YXIgYT1zKGUsdCksaD1zKG4sciksZj11KGEsaCk7aWYoMD09PW8oZikpcmV0dXJuIG51bGw7dmFyIHA9cyh0LHIpLGQ9dShoLHApLGc9aShkLGYpLG09YyhhLGcpO3JldHVybiBsKHQsbSl9O3ZhciBuPXQoImJpZy1yYXQvbXVsIiksaT10KCJiaWctcmF0L2RpdiIpLGE9dCgiYmlnLXJhdC9zdWIiKSxvPXQoImJpZy1yYXQvc2lnbiIpLHM9dCgicmF0LXZlYy9zdWIiKSxsPXQoInJhdC12ZWMvYWRkIiksYz10KCJyYXQtdmVjL211bHMiKTtmdW5jdGlvbiB1KHQsZSl7cmV0dXJuIGEobih0WzBdLGVbMV0pLG4odFsxXSxlWzBdKSl9fSx7ImJpZy1yYXQvZGl2Ijo2NSwiYmlnLXJhdC9tdWwiOjc1LCJiaWctcmF0L3NpZ24iOjc2LCJiaWctcmF0L3N1YiI6NzcsInJhdC12ZWMvYWRkIjo0NTIsInJhdC12ZWMvbXVscyI6NDU0LCJyYXQtdmVjL3N1YiI6NDU1fV0sMTA1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImNsYW1wIik7ZnVuY3Rpb24gaSh0LGUpe251bGw9PWUmJihlPSEwKTt2YXIgcj10WzBdLGk9dFsxXSxhPXRbMl0sbz10WzNdO3JldHVybiBudWxsPT1vJiYobz1lPzE6MjU1KSxlJiYocio9MjU1LGkqPTI1NSxhKj0yNTUsbyo9MjU1KSwxNjc3NzIxNioocj0yNTUmbihyLDAsMjU1KSkrKChpPTI1NSZuKGksMCwyNTUpKTw8MTYpKygoYT0yNTUmbihhLDAsMjU1KSk8PDgpKyhvPTI1NSZuKG8sMCwyNTUpKX1lLmV4cG9ydHM9aSxlLmV4cG9ydHMudG89aSxlLmV4cG9ydHMuZnJvbT1mdW5jdGlvbih0LGUpe3ZhciByPSh0PSt0KT4+PjI0LG49KDE2NzExNjgwJnQpPj4+MTYsaT0oNjUyODAmdCk+Pj44LGE9MjU1JnQ7cmV0dXJuITE9PT1lP1tyLG4saSxhXTpbci8yNTUsbi8yNTUsaS8yNTUsYS8yNTVdfX0se2NsYW1wOjEwMn1dLDEwNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2FsaWNlYmx1ZTpbMjQwLDI0OCwyNTVdLGFudGlxdWV3aGl0ZTpbMjUwLDIzNSwyMTVdLGFxdWE6WzAsMjU1LDI1NV0sYXF1YW1hcmluZTpbMTI3LDI1NSwyMTJdLGF6dXJlOlsyNDAsMjU1LDI1NV0sYmVpZ2U6WzI0NSwyNDUsMjIwXSxiaXNxdWU6WzI1NSwyMjgsMTk2XSxibGFjazpbMCwwLDBdLGJsYW5jaGVkYWxtb25kOlsyNTUsMjM1LDIwNV0sYmx1ZTpbMCwwLDI1NV0sYmx1ZXZpb2xldDpbMTM4LDQzLDIyNl0sYnJvd246WzE2NSw0Miw0Ml0sYnVybHl3b29kOlsyMjIsMTg0LDEzNV0sY2FkZXRibHVlOls5NSwxNTgsMTYwXSxjaGFydHJldXNlOlsxMjcsMjU1LDBdLGNob2NvbGF0ZTpbMjEwLDEwNSwzMF0sY29yYWw6WzI1NSwxMjcsODBdLGNvcm5mbG93ZXJibHVlOlsxMDAsMTQ5LDIzN10sY29ybnNpbGs6WzI1NSwyNDgsMjIwXSxjcmltc29uOlsyMjAsMjAsNjBdLGN5YW46WzAsMjU1LDI1NV0sZGFya2JsdWU6WzAsMCwxMzldLGRhcmtjeWFuOlswLDEzOSwxMzldLGRhcmtnb2xkZW5yb2Q6WzE4NCwxMzQsMTFdLGRhcmtncmF5OlsxNjksMTY5LDE2OV0sZGFya2dyZWVuOlswLDEwMCwwXSxkYXJrZ3JleTpbMTY5LDE2OSwxNjldLGRhcmtraGFraTpbMTg5LDE4MywxMDddLGRhcmttYWdlbnRhOlsxMzksMCwxMzldLGRhcmtvbGl2ZWdyZWVuOls4NSwxMDcsNDddLGRhcmtvcmFuZ2U6WzI1NSwxNDAsMF0sZGFya29yY2hpZDpbMTUzLDUwLDIwNF0sZGFya3JlZDpbMTM5LDAsMF0sZGFya3NhbG1vbjpbMjMzLDE1MCwxMjJdLGRhcmtzZWFncmVlbjpbMTQzLDE4OCwxNDNdLGRhcmtzbGF0ZWJsdWU6WzcyLDYxLDEzOV0sZGFya3NsYXRlZ3JheTpbNDcsNzksNzldLGRhcmtzbGF0ZWdyZXk6WzQ3LDc5LDc5XSxkYXJrdHVycXVvaXNlOlswLDIwNiwyMDldLGRhcmt2aW9sZXQ6WzE0OCwwLDIxMV0sZGVlcHBpbms6WzI1NSwyMCwxNDddLGRlZXBza3libHVlOlswLDE5MSwyNTVdLGRpbWdyYXk6WzEwNSwxMDUsMTA1XSxkaW1ncmV5OlsxMDUsMTA1LDEwNV0sZG9kZ2VyYmx1ZTpbMzAsMTQ0LDI1NV0sZmlyZWJyaWNrOlsxNzgsMzQsMzRdLGZsb3JhbHdoaXRlOlsyNTUsMjUwLDI0MF0sZm9yZXN0Z3JlZW46WzM0LDEzOSwzNF0sZnVjaHNpYTpbMjU1LDAsMjU1XSxnYWluc2Jvcm86WzIyMCwyMjAsMjIwXSxnaG9zdHdoaXRlOlsyNDgsMjQ4LDI1NV0sZ29sZDpbMjU1LDIxNSwwXSxnb2xkZW5yb2Q6WzIxOCwxNjUsMzJdLGdyYXk6WzEyOCwxMjgsMTI4XSxncmVlbjpbMCwxMjgsMF0sZ3JlZW55ZWxsb3c6WzE3MywyNTUsNDddLGdyZXk6WzEyOCwxMjgsMTI4XSxob25leWRldzpbMjQwLDI1NSwyNDBdLGhvdHBpbms6WzI1NSwxMDUsMTgwXSxpbmRpYW5yZWQ6WzIwNSw5Miw5Ml0saW5kaWdvOls3NSwwLDEzMF0saXZvcnk6WzI1NSwyNTUsMjQwXSxraGFraTpbMjQwLDIzMCwxNDBdLGxhdmVuZGVyOlsyMzAsMjMwLDI1MF0sbGF2ZW5kZXJibHVzaDpbMjU1LDI0MCwyNDVdLGxhd25ncmVlbjpbMTI0LDI1MiwwXSxsZW1vbmNoaWZmb246WzI1NSwyNTAsMjA1XSxsaWdodGJsdWU6WzE3MywyMTYsMjMwXSxsaWdodGNvcmFsOlsyNDAsMTI4LDEyOF0sbGlnaHRjeWFuOlsyMjQsMjU1LDI1NV0sbGlnaHRnb2xkZW5yb2R5ZWxsb3c6WzI1MCwyNTAsMjEwXSxsaWdodGdyYXk6WzIxMSwyMTEsMjExXSxsaWdodGdyZWVuOlsxNDQsMjM4LDE0NF0sbGlnaHRncmV5OlsyMTEsMjExLDIxMV0sbGlnaHRwaW5rOlsyNTUsMTgyLDE5M10sbGlnaHRzYWxtb246WzI1NSwxNjAsMTIyXSxsaWdodHNlYWdyZWVuOlszMiwxNzgsMTcwXSxsaWdodHNreWJsdWU6WzEzNSwyMDYsMjUwXSxsaWdodHNsYXRlZ3JheTpbMTE5LDEzNiwxNTNdLGxpZ2h0c2xhdGVncmV5OlsxMTksMTM2LDE1M10sbGlnaHRzdGVlbGJsdWU6WzE3NiwxOTYsMjIyXSxsaWdodHllbGxvdzpbMjU1LDI1NSwyMjRdLGxpbWU6WzAsMjU1LDBdLGxpbWVncmVlbjpbNTAsMjA1LDUwXSxsaW5lbjpbMjUwLDI0MCwyMzBdLG1hZ2VudGE6WzI1NSwwLDI1NV0sbWFyb29uOlsxMjgsMCwwXSxtZWRpdW1hcXVhbWFyaW5lOlsxMDIsMjA1LDE3MF0sbWVkaXVtYmx1ZTpbMCwwLDIwNV0sbWVkaXVtb3JjaGlkOlsxODYsODUsMjExXSxtZWRpdW1wdXJwbGU6WzE0NywxMTIsMjE5XSxtZWRpdW1zZWFncmVlbjpbNjAsMTc5LDExM10sbWVkaXVtc2xhdGVibHVlOlsxMjMsMTA0LDIzOF0sbWVkaXVtc3ByaW5nZ3JlZW46WzAsMjUwLDE1NF0sbWVkaXVtdHVycXVvaXNlOls3MiwyMDksMjA0XSxtZWRpdW12aW9sZXRyZWQ6WzE5OSwyMSwxMzNdLG1pZG5pZ2h0Ymx1ZTpbMjUsMjUsMTEyXSxtaW50Y3JlYW06WzI0NSwyNTUsMjUwXSxtaXN0eXJvc2U6WzI1NSwyMjgsMjI1XSxtb2NjYXNpbjpbMjU1LDIyOCwxODFdLG5hdmFqb3doaXRlOlsyNTUsMjIyLDE3M10sbmF2eTpbMCwwLDEyOF0sb2xkbGFjZTpbMjUzLDI0NSwyMzBdLG9saXZlOlsxMjgsMTI4LDBdLG9saXZlZHJhYjpbMTA3LDE0MiwzNV0sb3JhbmdlOlsyNTUsMTY1LDBdLG9yYW5nZXJlZDpbMjU1LDY5LDBdLG9yY2hpZDpbMjE4LDExMiwyMTRdLHBhbGVnb2xkZW5yb2Q6WzIzOCwyMzIsMTcwXSxwYWxlZ3JlZW46WzE1MiwyNTEsMTUyXSxwYWxldHVycXVvaXNlOlsxNzUsMjM4LDIzOF0scGFsZXZpb2xldHJlZDpbMjE5LDExMiwxNDddLHBhcGF5YXdoaXA6WzI1NSwyMzksMjEzXSxwZWFjaHB1ZmY6WzI1NSwyMTgsMTg1XSxwZXJ1OlsyMDUsMTMzLDYzXSxwaW5rOlsyNTUsMTkyLDIwM10scGx1bTpbMjIxLDE2MCwyMjFdLHBvd2RlcmJsdWU6WzE3NiwyMjQsMjMwXSxwdXJwbGU6WzEyOCwwLDEyOF0scmViZWNjYXB1cnBsZTpbMTAyLDUxLDE1M10scmVkOlsyNTUsMCwwXSxyb3N5YnJvd246WzE4OCwxNDMsMTQzXSxyb3lhbGJsdWU6WzY1LDEwNSwyMjVdLHNhZGRsZWJyb3duOlsxMzksNjksMTldLHNhbG1vbjpbMjUwLDEyOCwxMTRdLHNhbmR5YnJvd246WzI0NCwxNjQsOTZdLHNlYWdyZWVuOls0NiwxMzksODddLHNlYXNoZWxsOlsyNTUsMjQ1LDIzOF0sc2llbm5hOlsxNjAsODIsNDVdLHNpbHZlcjpbMTkyLDE5MiwxOTJdLHNreWJsdWU6WzEzNSwyMDYsMjM1XSxzbGF0ZWJsdWU6WzEwNiw5MCwyMDVdLHNsYXRlZ3JheTpbMTEyLDEyOCwxNDRdLHNsYXRlZ3JleTpbMTEyLDEyOCwxNDRdLHNub3c6WzI1NSwyNTAsMjUwXSxzcHJpbmdncmVlbjpbMCwyNTUsMTI3XSxzdGVlbGJsdWU6WzcwLDEzMCwxODBdLHRhbjpbMjEwLDE4MCwxNDBdLHRlYWw6WzAsMTI4LDEyOF0sdGhpc3RsZTpbMjE2LDE5MSwyMTZdLHRvbWF0bzpbMjU1LDk5LDcxXSx0dXJxdW9pc2U6WzY0LDIyNCwyMDhdLHZpb2xldDpbMjM4LDEzMCwyMzhdLHdoZWF0OlsyNDUsMjIyLDE3OV0sd2hpdGU6WzI1NSwyNTUsMjU1XSx3aGl0ZXNtb2tlOlsyNDUsMjQ1LDI0NV0seWVsbG93OlsyNTUsMjU1LDBdLHllbGxvd2dyZWVuOlsxNTQsMjA1LDUwXX19LHt9XSwxMDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiY29sb3ItcmdiYSIpLGk9dCgiY2xhbXAiKSxhPXQoImR0eXBlIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ImZsb2F0IiE9PWUmJmV8fChlPSJhcnJheSIpLCJ1aW50Ij09PWUmJihlPSJ1aW50OCIpLCJ1aW50X2NsYW1wZWQiPT09ZSYmKGU9InVpbnQ4X2NsYW1wZWQiKTt2YXIgcj1hKGUpLG89bmV3IHIoNCk7aWYodCBpbnN0YW5jZW9mIHIpcmV0dXJuIEFycmF5LmlzQXJyYXkodCk/dC5zbGljZSgpOihvLnNldCh0KSxvKTt2YXIgcz0idWludDgiIT09ZSYmInVpbnQ4X2NsYW1wZWQiIT09ZTtyZXR1cm4gdCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fHQgaW5zdGFuY2VvZiBVaW50OENsYW1wZWRBcnJheT8ob1swXT10WzBdLG9bMV09dFsxXSxvWzJdPXRbMl0sb1szXT1udWxsIT10WzNdP3RbM106MjU1LHMmJihvWzBdLz0yNTUsb1sxXS89MjU1LG9bMl0vPTI1NSxvWzNdLz0yNTUpLG8pOih0Lmxlbmd0aCYmInN0cmluZyIhPXR5cGVvZiB0fHwoKHQ9bih0KSlbMF0vPTI1NSx0WzFdLz0yNTUsdFsyXS89MjU1KSxzPyhvWzBdPXRbMF0sb1sxXT10WzFdLG9bMl09dFsyXSxvWzNdPW51bGwhPXRbM10/dFszXToxKToob1swXT1pKE1hdGgucm91bmQoMjU1KnRbMF0pLDAsMjU1KSxvWzFdPWkoTWF0aC5yb3VuZCgyNTUqdFsxXSksMCwyNTUpLG9bMl09aShNYXRoLnJvdW5kKDI1NSp0WzJdKSwwLDI1NSksb1szXT1udWxsPT10WzNdPzI1NTppKE1hdGguZmxvb3IoMjU1KnRbM10pLDAsMjU1KSksbyl9fSx7Y2xhbXA6MTAyLCJjb2xvci1yZ2JhIjoxMDksZHR5cGU6MTUzfV0sMTA4OltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJjb2xvci1uYW1lIiksaT10KCJpcy1wbGFpbi1vYmoiKSxhPXQoImRlZmluZWQiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGUscyxsPVtdLGM9MTtpZigic3RyaW5nIj09dHlwZW9mIHQpaWYoblt0XSlsPW5bdF0uc2xpY2UoKSxzPSJyZ2IiO2Vsc2UgaWYoInRyYW5zcGFyZW50Ij09PXQpYz0wLHM9InJnYiIsbD1bMCwwLDBdO2Vsc2UgaWYoL14jW0EtRmEtZjAtOV0rJC8udGVzdCh0KSl7dmFyIHU9dC5zbGljZSgxKSxoPXUubGVuZ3RoLGY9aDw9NDtjPTEsZj8obD1bcGFyc2VJbnQodVswXSt1WzBdLDE2KSxwYXJzZUludCh1WzFdK3VbMV0sMTYpLHBhcnNlSW50KHVbMl0rdVsyXSwxNildLDQ9PT1oJiYoYz1wYXJzZUludCh1WzNdK3VbM10sMTYpLzI1NSkpOihsPVtwYXJzZUludCh1WzBdK3VbMV0sMTYpLHBhcnNlSW50KHVbMl0rdVszXSwxNikscGFyc2VJbnQodVs0XSt1WzVdLDE2KV0sOD09PWgmJihjPXBhcnNlSW50KHVbNl0rdVs3XSwxNikvMjU1KSksbFswXXx8KGxbMF09MCksbFsxXXx8KGxbMV09MCksbFsyXXx8KGxbMl09MCkscz0icmdiIn1lbHNlIGlmKGU9L14oKD86cmdifGhzW2x2Yl18aHdifGNteWs/fHh5W3p5XXxncmF5fGxhYnxsY2h1P3Y/fFtseV11dnxsbXMpYT8pXHMqXCgoW15cKV0qKVwpLy5leGVjKHQpKXt2YXIgcD1lWzFdLHU9cC5yZXBsYWNlKC9hJC8sIiIpO3M9dTt2YXIgaD0iY215ayI9PT11PzQ6ImdyYXkiPT09dT8xOjM7bD1lWzJdLnRyaW0oKS5zcGxpdCgvXHMqLFxzKi8pLm1hcChmdW5jdGlvbih0LGUpe2lmKC8lJC8udGVzdCh0KSlyZXR1cm4gZT09PWg/cGFyc2VGbG9hdCh0KS8xMDA6InJnYiI9PT11PzI1NSpwYXJzZUZsb2F0KHQpLzEwMDpwYXJzZUZsb2F0KHQpO2lmKCJoIj09PXVbZV0pe2lmKC9kZWckLy50ZXN0KHQpKXJldHVybiBwYXJzZUZsb2F0KHQpO2lmKHZvaWQgMCE9PW9bdF0pcmV0dXJuIG9bdF19cmV0dXJuIHBhcnNlRmxvYXQodCl9KSxwPT09dSYmbC5wdXNoKDEpLGM9dm9pZCAwPT09bFtoXT8xOmxbaF0sbD1sLnNsaWNlKDAsaCl9ZWxzZSB0Lmxlbmd0aD4xMCYmL1swLTldKD86XHN8XC8pLy50ZXN0KHQpJiYobD10Lm1hdGNoKC8oWzAtOV0rKS9nKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHBhcnNlRmxvYXQodCl9KSxzPXQubWF0Y2goLyhbYS16XSkvaWcpLmpvaW4oIiIpLnRvTG93ZXJDYXNlKCkpO2Vsc2UgaWYoIm51bWJlciI9PXR5cGVvZiB0KXM9InJnYiIsbD1bdD4+PjE2LCg2NTI4MCZ0KT4+PjgsMjU1JnRdO2Vsc2UgaWYoaSh0KSl7dmFyIGQ9YSh0LnIsdC5yZWQsdC5SLG51bGwpO251bGwhPT1kPyhzPSJyZ2IiLGw9W2QsYSh0LmcsdC5ncmVlbix0LkcpLGEodC5iLHQuYmx1ZSx0LkIpXSk6KHM9ImhzbCIsbD1bYSh0LmgsdC5odWUsdC5IKSxhKHQucyx0LnNhdHVyYXRpb24sdC5TKSxhKHQubCx0LmxpZ2h0bmVzcyx0LkwsdC5iLHQuYnJpZ2h0bmVzcyldKSxjPWEodC5hLHQuYWxwaGEsdC5vcGFjaXR5LDEpLG51bGwhPXQub3BhY2l0eSYmKGMvPTEwMCl9ZWxzZShBcnJheS5pc0FycmF5KHQpfHxyLkFycmF5QnVmZmVyJiZBcnJheUJ1ZmZlci5pc1ZpZXcmJkFycmF5QnVmZmVyLmlzVmlldyh0KSkmJihsPVt0WzBdLHRbMV0sdFsyXV0scz0icmdiIixjPTQ9PT10Lmxlbmd0aD90WzNdOjEpO3JldHVybntzcGFjZTpzLHZhbHVlczpsLGFscGhhOmN9fTt2YXIgbz17cmVkOjAsb3JhbmdlOjYwLHllbGxvdzoxMjAsZ3JlZW46MTgwLGJsdWU6MjQwLHB1cnBsZTozMDB9fSkuY2FsbCh0aGlzLCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7ImNvbG9yLW5hbWUiOjEwNixkZWZpbmVkOjE0OCwiaXMtcGxhaW4tb2JqIjozOTB9XSwxMDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiY29sb3ItcGFyc2UiKSxpPXQoImNvbG9yLXNwYWNlL2hzbCIpLGE9dCgiY2xhbXAiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU7aWYoInN0cmluZyIhPXR5cGVvZiB0KXRocm93IEVycm9yKCJBcmd1bWVudCBzaG91bGQgYmUgYSBzdHJpbmciKTt2YXIgcj1uKHQpO3JldHVybiByLnNwYWNlPygoZT1BcnJheSgzKSlbMF09YShyLnZhbHVlc1swXSwwLDI1NSksZVsxXT1hKHIudmFsdWVzWzFdLDAsMjU1KSxlWzJdPWEoci52YWx1ZXNbMl0sMCwyNTUpLCJoIj09PXIuc3BhY2VbMF0mJihlPWkucmdiKGUpKSxlLnB1c2goYShyLmFscGhhLDAsMSkpLGUpOltdfX0se2NsYW1wOjEwMiwiY29sb3ItcGFyc2UiOjEwOCwiY29sb3Itc3BhY2UvaHNsIjoxMTB9XSwxMTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9yZ2IiKTtlLmV4cG9ydHM9e25hbWU6ImhzbCIsbWluOlswLDAsMF0sbWF4OlszNjAsMTAwLDEwMF0sY2hhbm5lbDpbImh1ZSIsInNhdHVyYXRpb24iLCJsaWdodG5lc3MiXSxhbGlhczpbIkhTTCJdLHJnYjpmdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhLG89dFswXS8zNjAscz10WzFdLzEwMCxsPXRbMl0vMTAwO2lmKDA9PT1zKXJldHVyblthPTI1NSpsLGEsYV07ZT0yKmwtKHI9bDwuNT9sKigxK3MpOmwrcy1sKnMpLGk9WzAsMCwwXTtmb3IodmFyIGM9MDtjPDM7YysrKShuPW8rMS8zKi0oYy0xKSk8MD9uKys6bj4xJiZuLS0sYT02Km48MT9lKzYqKHItZSkqbjoyKm48MT9yOjMqbjwyP2UrKHItZSkqKDIvMy1uKSo2OmUsaVtjXT0yNTUqYTtyZXR1cm4gaX19LG4uaHNsPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbj10WzBdLzI1NSxpPXRbMV0vMjU1LGE9dFsyXS8yNTUsbz1NYXRoLm1pbihuLGksYSkscz1NYXRoLm1heChuLGksYSksbD1zLW87cmV0dXJuIHM9PT1vP2U9MDpuPT09cz9lPShpLWEpL2w6aT09PXM/ZT0yKyhhLW4pL2w6YT09PXMmJihlPTQrKG4taSkvbCksKGU9TWF0aC5taW4oNjAqZSwzNjApKTwwJiYoZSs9MzYwKSxyPShvK3MpLzIsW2UsMTAwKihzPT09bz8wOnI8PS41P2wvKHMrbyk6bC8oMi1zLW8pKSwxMDAqcl19fSx7Ii4vcmdiIjoxMTF9XSwxMTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtuYW1lOiJyZ2IiLG1pbjpbMCwwLDBdLG1heDpbMjU1LDI1NSwyNTVdLGNoYW5uZWw6WyJyZWQiLCJncmVlbiIsImJsdWUiXSxhbGlhczpbIlJHQiJdfX0se31dLDExMjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz17amV0Olt7aW5kZXg6MCxyZ2I6WzAsMCwxMzFdfSx7aW5kZXg6LjEyNSxyZ2I6WzAsNjAsMTcwXX0se2luZGV4Oi4zNzUscmdiOls1LDI1NSwyNTVdfSx7aW5kZXg6LjYyNSxyZ2I6WzI1NSwyNTUsMF19LHtpbmRleDouODc1LHJnYjpbMjUwLDAsMF19LHtpbmRleDoxLHJnYjpbMTI4LDAsMF19XSxoc3Y6W3tpbmRleDowLHJnYjpbMjU1LDAsMF19LHtpbmRleDouMTY5LHJnYjpbMjUzLDI1NSwyXX0se2luZGV4Oi4xNzMscmdiOlsyNDcsMjU1LDJdfSx7aW5kZXg6LjMzNyxyZ2I6WzAsMjUyLDRdfSx7aW5kZXg6LjM0MSxyZ2I6WzAsMjUyLDEwXX0se2luZGV4Oi41MDYscmdiOlsxLDI0OSwyNTVdfSx7aW5kZXg6LjY3MSxyZ2I6WzIsMCwyNTNdfSx7aW5kZXg6LjY3NSxyZ2I6WzgsMCwyNTNdfSx7aW5kZXg6LjgzOSxyZ2I6WzI1NSwwLDI1MV19LHtpbmRleDouODQzLHJnYjpbMjU1LDAsMjQ1XX0se2luZGV4OjEscmdiOlsyNTUsMCw2XX1dLGhvdDpbe2luZGV4OjAscmdiOlswLDAsMF19LHtpbmRleDouMyxyZ2I6WzIzMCwwLDBdfSx7aW5kZXg6LjYscmdiOlsyNTUsMjEwLDBdfSx7aW5kZXg6MSxyZ2I6WzI1NSwyNTUsMjU1XX1dLGNvb2w6W3tpbmRleDowLHJnYjpbMCwyNTUsMjU1XX0se2luZGV4OjEscmdiOlsyNTUsMCwyNTVdfV0sc3ByaW5nOlt7aW5kZXg6MCxyZ2I6WzI1NSwwLDI1NV19LHtpbmRleDoxLHJnYjpbMjU1LDI1NSwwXX1dLHN1bW1lcjpbe2luZGV4OjAscmdiOlswLDEyOCwxMDJdfSx7aW5kZXg6MSxyZ2I6WzI1NSwyNTUsMTAyXX1dLGF1dHVtbjpbe2luZGV4OjAscmdiOlsyNTUsMCwwXX0se2luZGV4OjEscmdiOlsyNTUsMjU1LDBdfV0sd2ludGVyOlt7aW5kZXg6MCxyZ2I6WzAsMCwyNTVdfSx7aW5kZXg6MSxyZ2I6WzAsMjU1LDEyOF19XSxib25lOlt7aW5kZXg6MCxyZ2I6WzAsMCwwXX0se2luZGV4Oi4zNzYscmdiOls4NCw4NCwxMTZdfSx7aW5kZXg6Ljc1MyxyZ2I6WzE2OSwyMDAsMjAwXX0se2luZGV4OjEscmdiOlsyNTUsMjU1LDI1NV19XSxjb3BwZXI6W3tpbmRleDowLHJnYjpbMCwwLDBdfSx7aW5kZXg6LjgwNCxyZ2I6WzI1NSwxNjAsMTAyXX0se2luZGV4OjEscmdiOlsyNTUsMTk5LDEyN119XSxncmV5czpbe2luZGV4OjAscmdiOlswLDAsMF19LHtpbmRleDoxLHJnYjpbMjU1LDI1NSwyNTVdfV0seWlnbmJ1Olt7aW5kZXg6MCxyZ2I6WzgsMjksODhdfSx7aW5kZXg6LjEyNSxyZ2I6WzM3LDUyLDE0OF19LHtpbmRleDouMjUscmdiOlszNCw5NCwxNjhdfSx7aW5kZXg6LjM3NSxyZ2I6WzI5LDE0NSwxOTJdfSx7aW5kZXg6LjUscmdiOls2NSwxODIsMTk2XX0se2luZGV4Oi42MjUscmdiOlsxMjcsMjA1LDE4N119LHtpbmRleDouNzUscmdiOlsxOTksMjMzLDE4MF19LHtpbmRleDouODc1LHJnYjpbMjM3LDI0OCwyMTddfSx7aW5kZXg6MSxyZ2I6WzI1NSwyNTUsMjE3XX1dLGdyZWVuczpbe2luZGV4OjAscmdiOlswLDY4LDI3XX0se2luZGV4Oi4xMjUscmdiOlswLDEwOSw0NF19LHtpbmRleDouMjUscmdiOlszNSwxMzksNjldfSx7aW5kZXg6LjM3NSxyZ2I6WzY1LDE3MSw5M119LHtpbmRleDouNSxyZ2I6WzExNiwxOTYsMTE4XX0se2luZGV4Oi42MjUscmdiOlsxNjEsMjE3LDE1NV19LHtpbmRleDouNzUscmdiOlsxOTksMjMzLDE5Ml19LHtpbmRleDouODc1LHJnYjpbMjI5LDI0NSwyMjRdfSx7aW5kZXg6MSxyZ2I6WzI0NywyNTIsMjQ1XX1dLHlpb3JyZDpbe2luZGV4OjAscmdiOlsxMjgsMCwzOF19LHtpbmRleDouMTI1LHJnYjpbMTg5LDAsMzhdfSx7aW5kZXg6LjI1LHJnYjpbMjI3LDI2LDI4XX0se2luZGV4Oi4zNzUscmdiOlsyNTIsNzgsNDJdfSx7aW5kZXg6LjUscmdiOlsyNTMsMTQxLDYwXX0se2luZGV4Oi42MjUscmdiOlsyNTQsMTc4LDc2XX0se2luZGV4Oi43NSxyZ2I6WzI1NCwyMTcsMTE4XX0se2luZGV4Oi44NzUscmdiOlsyNTUsMjM3LDE2MF19LHtpbmRleDoxLHJnYjpbMjU1LDI1NSwyMDRdfV0sYmx1ZXJlZDpbe2luZGV4OjAscmdiOlswLDAsMjU1XX0se2luZGV4OjEscmdiOlsyNTUsMCwwXX1dLHJkYnU6W3tpbmRleDowLHJnYjpbNSwxMCwxNzJdfSx7aW5kZXg6LjM1LHJnYjpbMTA2LDEzNywyNDddfSx7aW5kZXg6LjUscmdiOlsxOTAsMTkwLDE5MF19LHtpbmRleDouNixyZ2I6WzIyMCwxNzAsMTMyXX0se2luZGV4Oi43LHJnYjpbMjMwLDE0NSw5MF19LHtpbmRleDoxLHJnYjpbMTc4LDEwLDI4XX1dLHBpY25pYzpbe2luZGV4OjAscmdiOlswLDAsMjU1XX0se2luZGV4Oi4xLHJnYjpbNTEsMTUzLDI1NV19LHtpbmRleDouMixyZ2I6WzEwMiwyMDQsMjU1XX0se2luZGV4Oi4zLHJnYjpbMTUzLDIwNCwyNTVdfSx7aW5kZXg6LjQscmdiOlsyMDQsMjA0LDI1NV19LHtpbmRleDouNSxyZ2I6WzI1NSwyNTUsMjU1XX0se2luZGV4Oi42LHJnYjpbMjU1LDIwNCwyNTVdfSx7aW5kZXg6LjcscmdiOlsyNTUsMTUzLDI1NV19LHtpbmRleDouOCxyZ2I6WzI1NSwxMDIsMjA0XX0se2luZGV4Oi45LHJnYjpbMjU1LDEwMiwxMDJdfSx7aW5kZXg6MSxyZ2I6WzI1NSwwLDBdfV0scmFpbmJvdzpbe2luZGV4OjAscmdiOlsxNTAsMCw5MF19LHtpbmRleDouMTI1LHJnYjpbMCwwLDIwMF19LHtpbmRleDouMjUscmdiOlswLDI1LDI1NV19LHtpbmRleDouMzc1LHJnYjpbMCwxNTIsMjU1XX0se2luZGV4Oi41LHJnYjpbNDQsMjU1LDE1MF19LHtpbmRleDouNjI1LHJnYjpbMTUxLDI1NSwwXX0se2luZGV4Oi43NSxyZ2I6WzI1NSwyMzQsMF19LHtpbmRleDouODc1LHJnYjpbMjU1LDExMSwwXX0se2luZGV4OjEscmdiOlsyNTUsMCwwXX1dLHBvcnRsYW5kOlt7aW5kZXg6MCxyZ2I6WzEyLDUxLDEzMV19LHtpbmRleDouMjUscmdiOlsxMCwxMzYsMTg2XX0se2luZGV4Oi41LHJnYjpbMjQyLDIxMSw1Nl19LHtpbmRleDouNzUscmdiOlsyNDIsMTQzLDU2XX0se2luZGV4OjEscmdiOlsyMTcsMzAsMzBdfV0sYmxhY2tib2R5Olt7aW5kZXg6MCxyZ2I6WzAsMCwwXX0se2luZGV4Oi4yLHJnYjpbMjMwLDAsMF19LHtpbmRleDouNCxyZ2I6WzIzMCwyMTAsMF19LHtpbmRleDouNyxyZ2I6WzI1NSwyNTUsMjU1XX0se2luZGV4OjEscmdiOlsxNjAsMjAwLDI1NV19XSxlYXJ0aDpbe2luZGV4OjAscmdiOlswLDAsMTMwXX0se2luZGV4Oi4xLHJnYjpbMCwxODAsMTgwXX0se2luZGV4Oi4yLHJnYjpbNDAsMjEwLDQwXX0se2luZGV4Oi40LHJnYjpbMjMwLDIzMCw1MF19LHtpbmRleDouNixyZ2I6WzEyMCw3MCwyMF19LHtpbmRleDoxLHJnYjpbMjU1LDI1NSwyNTVdfV0sZWxlY3RyaWM6W3tpbmRleDowLHJnYjpbMCwwLDBdfSx7aW5kZXg6LjE1LHJnYjpbMzAsMCwxMDBdfSx7aW5kZXg6LjQscmdiOlsxMjAsMCwxMDBdfSx7aW5kZXg6LjYscmdiOlsxNjAsOTAsMF19LHtpbmRleDouOCxyZ2I6WzIzMCwyMDAsMF19LHtpbmRleDoxLHJnYjpbMjU1LDI1MCwyMjBdfV0sYWxwaGE6W3tpbmRleDowLHJnYjpbMjU1LDI1NSwyNTUsMF19LHtpbmRleDoxLHJnYjpbMjU1LDI1NSwyNTUsMV19XSx2aXJpZGlzOlt7aW5kZXg6MCxyZ2I6WzY4LDEsODRdfSx7aW5kZXg6LjEzLHJnYjpbNzEsNDQsMTIyXX0se2luZGV4Oi4yNSxyZ2I6WzU5LDgxLDEzOV19LHtpbmRleDouMzgscmdiOls0NCwxMTMsMTQyXX0se2luZGV4Oi41LHJnYjpbMzMsMTQ0LDE0MV19LHtpbmRleDouNjMscmdiOlszOSwxNzMsMTI5XX0se2luZGV4Oi43NSxyZ2I6WzkyLDIwMCw5OV19LHtpbmRleDouODgscmdiOlsxNzAsMjIwLDUwXX0se2luZGV4OjEscmdiOlsyNTMsMjMxLDM3XX1dLGluZmVybm86W3tpbmRleDowLHJnYjpbMCwwLDRdfSx7aW5kZXg6LjEzLHJnYjpbMzEsMTIsNzJdfSx7aW5kZXg6LjI1LHJnYjpbODUsMTUsMTA5XX0se2luZGV4Oi4zOCxyZ2I6WzEzNiwzNCwxMDZdfSx7aW5kZXg6LjUscmdiOlsxODYsNTQsODVdfSx7aW5kZXg6LjYzLHJnYjpbMjI3LDg5LDUxXX0se2luZGV4Oi43NSxyZ2I6WzI0OSwxNDAsMTBdfSx7aW5kZXg6Ljg4LHJnYjpbMjQ5LDIwMSw1MF19LHtpbmRleDoxLHJnYjpbMjUyLDI1NSwxNjRdfV0sbWFnbWE6W3tpbmRleDowLHJnYjpbMCwwLDRdfSx7aW5kZXg6LjEzLHJnYjpbMjgsMTYsNjhdfSx7aW5kZXg6LjI1LHJnYjpbNzksMTgsMTIzXX0se2luZGV4Oi4zOCxyZ2I6WzEyOSwzNywxMjldfSx7aW5kZXg6LjUscmdiOlsxODEsNTQsMTIyXX0se2luZGV4Oi42MyxyZ2I6WzIyOSw4MCwxMDBdfSx7aW5kZXg6Ljc1LHJnYjpbMjUxLDEzNSw5N119LHtpbmRleDouODgscmdiOlsyNTQsMTk0LDEzNV19LHtpbmRleDoxLHJnYjpbMjUyLDI1MywxOTFdfV0scGxhc21hOlt7aW5kZXg6MCxyZ2I6WzEzLDgsMTM1XX0se2luZGV4Oi4xMyxyZ2I6Wzc1LDMsMTYxXX0se2luZGV4Oi4yNSxyZ2I6WzEyNSwzLDE2OF19LHtpbmRleDouMzgscmdiOlsxNjgsMzQsMTUwXX0se2luZGV4Oi41LHJnYjpbMjAzLDcwLDEyMV19LHtpbmRleDouNjMscmdiOlsyMjksMTA3LDkzXX0se2luZGV4Oi43NSxyZ2I6WzI0OCwxNDgsNjVdfSx7aW5kZXg6Ljg4LHJnYjpbMjUzLDE5NSw0MF19LHtpbmRleDoxLHJnYjpbMjQwLDI0OSwzM119XSx3YXJtOlt7aW5kZXg6MCxyZ2I6WzEyNSwwLDE3OV19LHtpbmRleDouMTMscmdiOlsxNzIsMCwxODddfSx7aW5kZXg6LjI1LHJnYjpbMjE5LDAsMTcwXX0se2luZGV4Oi4zOCxyZ2I6WzI1NSwwLDEzMF19LHtpbmRleDouNSxyZ2I6WzI1NSw2Myw3NF19LHtpbmRleDouNjMscmdiOlsyNTUsMTIzLDBdfSx7aW5kZXg6Ljc1LHJnYjpbMjM0LDE3NiwwXX0se2luZGV4Oi44OCxyZ2I6WzE5MCwyMjgsMF19LHtpbmRleDoxLHJnYjpbMTQ3LDI1NSwwXX1dLGNvb2w6W3tpbmRleDowLHJnYjpbMTI1LDAsMTc5XX0se2luZGV4Oi4xMyxyZ2I6WzExNiwwLDIxOF19LHtpbmRleDouMjUscmdiOls5OCw3NCwyMzddfSx7aW5kZXg6LjM4LHJnYjpbNjgsMTQ2LDIzMV19LHtpbmRleDouNSxyZ2I6WzAsMjA0LDE5N119LHtpbmRleDouNjMscmdiOlswLDI0NywxNDZdfSx7aW5kZXg6Ljc1LHJnYjpbMCwyNTUsODhdfSx7aW5kZXg6Ljg4LHJnYjpbNDAsMjU1LDhdfSx7aW5kZXg6MSxyZ2I6WzE0NywyNTUsMF19XSwicmFpbmJvdy1zb2Z0Ijpbe2luZGV4OjAscmdiOlsxMjUsMCwxNzldfSx7aW5kZXg6LjEscmdiOlsxOTksMCwxODBdfSx7aW5kZXg6LjIscmdiOlsyNTUsMCwxMjFdfSx7aW5kZXg6LjMscmdiOlsyNTUsMTA4LDBdfSx7aW5kZXg6LjQscmdiOlsyMjIsMTk0LDBdfSx7aW5kZXg6LjUscmdiOlsxNTAsMjU1LDBdfSx7aW5kZXg6LjYscmdiOlswLDI1NSw1NV19LHtpbmRleDouNyxyZ2I6WzAsMjQ2LDE1MF19LHtpbmRleDouOCxyZ2I6WzUwLDE2NywyMjJdfSx7aW5kZXg6LjkscmdiOlsxMDMsNTEsMjM1XX0se2luZGV4OjEscmdiOlsxMjQsMCwxODZdfV0sYmF0aHltZXRyeTpbe2luZGV4OjAscmdiOls0MCwyNiw0NF19LHtpbmRleDouMTMscmdiOls1OSw0OSw5MF19LHtpbmRleDouMjUscmdiOls2NCw3NiwxMzldfSx7aW5kZXg6LjM4LHJnYjpbNjMsMTEwLDE1MV19LHtpbmRleDouNSxyZ2I6WzcyLDE0MiwxNThdfSx7aW5kZXg6LjYzLHJnYjpbODUsMTc0LDE2M119LHtpbmRleDouNzUscmdiOlsxMjAsMjA2LDE2M119LHtpbmRleDouODgscmdiOlsxODcsMjMwLDE3Ml19LHtpbmRleDoxLHJnYjpbMjUzLDI1NCwyMDRdfV0sY2RvbTpbe2luZGV4OjAscmdiOls0NywxNSw2Ml19LHtpbmRleDouMTMscmdiOls4NywyMyw4Nl19LHtpbmRleDouMjUscmdiOlsxMzAsMjgsOTldfSx7aW5kZXg6LjM4LHJnYjpbMTcxLDQxLDk2XX0se2luZGV4Oi41LHJnYjpbMjA2LDY3LDg2XX0se2luZGV4Oi42MyxyZ2I6WzIzMCwxMDYsODRdfSx7aW5kZXg6Ljc1LHJnYjpbMjQyLDE0OSwxMDNdfSx7aW5kZXg6Ljg4LHJnYjpbMjQ5LDE5MywxMzVdfSx7aW5kZXg6MSxyZ2I6WzI1NCwyMzcsMTc2XX1dLGNobG9yb3BoeWxsOlt7aW5kZXg6MCxyZ2I6WzE4LDM2LDIwXX0se2luZGV4Oi4xMyxyZ2I6WzI1LDYzLDQxXX0se2luZGV4Oi4yNSxyZ2I6WzI0LDkxLDU5XX0se2luZGV4Oi4zOCxyZ2I6WzEzLDExOSw3Ml19LHtpbmRleDouNSxyZ2I6WzE4LDE0OCw4MF19LHtpbmRleDouNjMscmdiOls4MCwxNzMsODldfSx7aW5kZXg6Ljc1LHJnYjpbMTMyLDE5NiwxMjJdfSx7aW5kZXg6Ljg4LHJnYjpbMTc1LDIyMSwxNjJdfSx7aW5kZXg6MSxyZ2I6WzIxNSwyNDksMjA4XX1dLGRlbnNpdHk6W3tpbmRleDowLHJnYjpbNTQsMTQsMzZdfSx7aW5kZXg6LjEzLHJnYjpbODksMjMsODBdfSx7aW5kZXg6LjI1LHJnYjpbMTEwLDQ1LDEzMl19LHtpbmRleDouMzgscmdiOlsxMjAsNzcsMTc4XX0se2luZGV4Oi41LHJnYjpbMTIwLDExMywyMTNdfSx7aW5kZXg6LjYzLHJnYjpbMTE1LDE1MSwyMjhdfSx7aW5kZXg6Ljc1LHJnYjpbMTM0LDE4NSwyMjddfSx7aW5kZXg6Ljg4LHJnYjpbMTc3LDIxNCwyMjddfSx7aW5kZXg6MSxyZ2I6WzIzMCwyNDEsMjQxXX1dLCJmcmVlc3VyZmFjZS1ibHVlIjpbe2luZGV4OjAscmdiOlszMCw0LDExMF19LHtpbmRleDouMTMscmdiOls0NywxNCwxNzZdfSx7aW5kZXg6LjI1LHJnYjpbNDEsNDUsMjM2XX0se2luZGV4Oi4zOCxyZ2I6WzI1LDk5LDIxMl19LHtpbmRleDouNSxyZ2I6WzY4LDEzMSwyMDBdfSx7aW5kZXg6LjYzLHJnYjpbMTE0LDE1NiwxOTddfSx7aW5kZXg6Ljc1LHJnYjpbMTU3LDE4MSwyMDNdfSx7aW5kZXg6Ljg4LHJnYjpbMjAwLDIwOCwyMTZdfSx7aW5kZXg6MSxyZ2I6WzI0MSwyMzcsMjM2XX1dLCJmcmVlc3VyZmFjZS1yZWQiOlt7aW5kZXg6MCxyZ2I6WzYwLDksMThdfSx7aW5kZXg6LjEzLHJnYjpbMTAwLDE3LDI3XX0se2luZGV4Oi4yNSxyZ2I6WzE0MiwyMCwyOV19LHtpbmRleDouMzgscmdiOlsxNzcsNDMsMjddfSx7aW5kZXg6LjUscmdiOlsxOTIsODcsNjNdfSx7aW5kZXg6LjYzLHJnYjpbMjA1LDEyNSwxMDVdfSx7aW5kZXg6Ljc1LHJnYjpbMjE2LDE2MiwxNDhdfSx7aW5kZXg6Ljg4LHJnYjpbMjI3LDE5OSwxOTNdfSx7aW5kZXg6MSxyZ2I6WzI0MSwyMzcsMjM2XX1dLG94eWdlbjpbe2luZGV4OjAscmdiOls2NCw1LDVdfSx7aW5kZXg6LjEzLHJnYjpbMTA2LDYsMTVdfSx7aW5kZXg6LjI1LHJnYjpbMTQ0LDI2LDddfSx7aW5kZXg6LjM4LHJnYjpbMTY4LDY0LDNdfSx7aW5kZXg6LjUscmdiOlsxODgsMTAwLDRdfSx7aW5kZXg6LjYzLHJnYjpbMjA2LDEzNiwxMV19LHtpbmRleDouNzUscmdiOlsyMjAsMTc0LDI1XX0se2luZGV4Oi44OCxyZ2I6WzIzMSwyMTUsNDRdfSx7aW5kZXg6MSxyZ2I6WzI0OCwyNTQsMTA1XX1dLHBhcjpbe2luZGV4OjAscmdiOls1MSwyMCwyNF19LHtpbmRleDouMTMscmdiOls5MCwzMiwzNV19LHtpbmRleDouMjUscmdiOlsxMjksNDQsMzRdfSx7aW5kZXg6LjM4LHJnYjpbMTU5LDY4LDI1XX0se2luZGV4Oi41LHJnYjpbMTgyLDk5LDE5XX0se2luZGV4Oi42MyxyZ2I6WzE5OSwxMzQsMjJdfSx7aW5kZXg6Ljc1LHJnYjpbMjEyLDE3MSwzNV19LHtpbmRleDouODgscmdiOlsyMjEsMjEwLDU0XX0se2luZGV4OjEscmdiOlsyMjUsMjUzLDc1XX1dLHBoYXNlOlt7aW5kZXg6MCxyZ2I6WzE0NSwxMDUsMThdfSx7aW5kZXg6LjEzLHJnYjpbMTg0LDcxLDM4XX0se2luZGV4Oi4yNSxyZ2I6WzE4Niw1OCwxMTVdfSx7aW5kZXg6LjM4LHJnYjpbMTYwLDcxLDE4NV19LHtpbmRleDouNSxyZ2I6WzExMCw5NywyMThdfSx7aW5kZXg6LjYzLHJnYjpbNTAsMTIzLDE2NF19LHtpbmRleDouNzUscmdiOlszMSwxMzEsMTEwXX0se2luZGV4Oi44OCxyZ2I6Wzc3LDEyOSwzNF19LHtpbmRleDoxLHJnYjpbMTQ1LDEwNSwxOF19XSxzYWxpbml0eTpbe2luZGV4OjAscmdiOls0MiwyNCwxMDhdfSx7aW5kZXg6LjEzLHJnYjpbMzMsNTAsMTYyXX0se2luZGV4Oi4yNSxyZ2I6WzE1LDkwLDE0NV19LHtpbmRleDouMzgscmdiOls0MCwxMTgsMTM3XX0se2luZGV4Oi41LHJnYjpbNTksMTQ2LDEzNV19LHtpbmRleDouNjMscmdiOls3OSwxNzUsMTI2XX0se2luZGV4Oi43NSxyZ2I6WzEyMCwyMDMsMTA0XX0se2luZGV4Oi44OCxyZ2I6WzE5MywyMjEsMTAwXX0se2luZGV4OjEscmdiOlsyNTMsMjM5LDE1NF19XSx0ZW1wZXJhdHVyZTpbe2luZGV4OjAscmdiOls0LDM1LDUxXX0se2luZGV4Oi4xMyxyZ2I6WzIzLDUxLDEyMl19LHtpbmRleDouMjUscmdiOls4NSw1OSwxNTddfSx7aW5kZXg6LjM4LHJnYjpbMTI5LDc5LDE0M119LHtpbmRleDouNSxyZ2I6WzE3NSw5NSwxMzBdfSx7aW5kZXg6LjYzLHJnYjpbMjIyLDExMiwxMDFdfSx7aW5kZXg6Ljc1LHJnYjpbMjQ5LDE0Niw2Nl19LHtpbmRleDouODgscmdiOlsyNDksMTk2LDY1XX0se2luZGV4OjEscmdiOlsyMzIsMjUwLDkxXX1dLHR1cmJpZGl0eTpbe2luZGV4OjAscmdiOlszNCwzMSwyN119LHtpbmRleDouMTMscmdiOls2NSw1MCw0MV19LHtpbmRleDouMjUscmdiOls5OCw2OSw1Ml19LHtpbmRleDouMzgscmdiOlsxMzEsODksNTddfSx7aW5kZXg6LjUscmdiOlsxNjEsMTEyLDU5XX0se2luZGV4Oi42MyxyZ2I6WzE4NSwxNDAsNjZdfSx7aW5kZXg6Ljc1LHJnYjpbMjAyLDE3NCw4OF19LHtpbmRleDouODgscmdiOlsyMTYsMjA5LDEyNl19LHtpbmRleDoxLHJnYjpbMjMzLDI0NiwxNzFdfV0sInZlbG9jaXR5LWJsdWUiOlt7aW5kZXg6MCxyZ2I6WzE3LDMyLDY0XX0se2luZGV4Oi4xMyxyZ2I6WzM1LDUyLDExNl19LHtpbmRleDouMjUscmdiOlsyOSw4MSwxNTZdfSx7aW5kZXg6LjM4LHJnYjpbMzEsMTEzLDE2Ml19LHtpbmRleDouNSxyZ2I6WzUwLDE0NCwxNjldfSx7aW5kZXg6LjYzLHJnYjpbODcsMTczLDE3Nl19LHtpbmRleDouNzUscmdiOlsxNDksMTk2LDE4OV19LHtpbmRleDouODgscmdiOlsyMDMsMjIxLDIxMV19LHtpbmRleDoxLHJnYjpbMjU0LDI1MSwyMzBdfV0sInZlbG9jaXR5LWdyZWVuIjpbe2luZGV4OjAscmdiOlsyMywzNSwxOV19LHtpbmRleDouMTMscmdiOlsyNCw2NCwzOF19LHtpbmRleDouMjUscmdiOlsxMSw5NSw0NV19LHtpbmRleDouMzgscmdiOlszOSwxMjMsMzVdfSx7aW5kZXg6LjUscmdiOls5NSwxNDYsMTJdfSx7aW5kZXg6LjYzLHJnYjpbMTUyLDE2NSwxOF19LHtpbmRleDouNzUscmdiOlsyMDEsMTg2LDY5XX0se2luZGV4Oi44OCxyZ2I6WzIzMywyMTYsMTM3XX0se2luZGV4OjEscmdiOlsyNTUsMjUzLDIwNV19XSxjdWJlaGVsaXg6W3tpbmRleDowLHJnYjpbMCwwLDBdfSx7aW5kZXg6LjA3LHJnYjpbMjIsNSw1OV19LHtpbmRleDouMTMscmdiOls2MCw0LDEwNV19LHtpbmRleDouMixyZ2I6WzEwOSwxLDEzNV19LHtpbmRleDouMjcscmdiOlsxNjEsMCwxNDddfSx7aW5kZXg6LjMzLHJnYjpbMjEwLDIsMTQyXX0se2luZGV4Oi40LHJnYjpbMjUxLDExLDEyM119LHtpbmRleDouNDcscmdiOlsyNTUsMjksOTddfSx7aW5kZXg6LjUzLHJnYjpbMjU1LDU0LDY5XX0se2luZGV4Oi42LHJnYjpbMjU1LDg1LDQ2XX0se2luZGV4Oi42NyxyZ2I6WzI1NSwxMjAsMzRdfSx7aW5kZXg6LjczLHJnYjpbMjU1LDE1NywzN119LHtpbmRleDouOCxyZ2I6WzI0MSwxOTEsNTddfSx7aW5kZXg6Ljg3LHJnYjpbMjI0LDIyMCw5M119LHtpbmRleDouOTMscmdiOlsyMTgsMjQxLDE0Ml19LHtpbmRleDoxLHJnYjpbMjI3LDI1MywxOThdfV19fSx7fV0sMTEzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vY29sb3JTY2FsZSIpLGk9dCgibGVycCIpO2Z1bmN0aW9uIGEodCl7cmV0dXJuW3RbMF0vMjU1LHRbMV0vMjU1LHRbMl0vMjU1LHRbM11dfWZ1bmN0aW9uIG8odCl7Zm9yKHZhciBlLHI9IiMiLG49MDtuPDM7KytuKXIrPSgiMDAiKyhlPShlPXRbbl0pLnRvU3RyaW5nKDE2KSkpLnN1YnN0cihlLmxlbmd0aCk7cmV0dXJuIHJ9ZnVuY3Rpb24gcyh0KXtyZXR1cm4icmdiYSgiK3Quam9pbigiLCIpKyIpIn1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGUscixsLGMsdSxoLGYscCxkLGc7dHx8KHQ9e30pO3A9KHQubnNoYWRlc3x8NzIpLTEsZj10LmZvcm1hdHx8ImhleCIsKGg9dC5jb2xvcm1hcCl8fChoPSJqZXQiKTtpZigic3RyaW5nIj09dHlwZW9mIGgpe2lmKGg9aC50b0xvd2VyQ2FzZSgpLCFuW2hdKXRocm93IEVycm9yKGgrIiBub3QgYSBzdXBwb3J0ZWQgY29sb3JzY2FsZSIpO3U9bltoXX1lbHNle2lmKCFBcnJheS5pc0FycmF5KGgpKXRocm93IEVycm9yKCJ1bnN1cHBvcnRlZCBjb2xvcm1hcCBvcHRpb24iLGgpO3U9aC5zbGljZSgpfWlmKHUubGVuZ3RoPnApdGhyb3cgbmV3IEVycm9yKGgrIiBtYXAgcmVxdWlyZXMgbnNoYWRlcyB0byBiZSBhdCBsZWFzdCBzaXplICIrdS5sZW5ndGgpO2Q9QXJyYXkuaXNBcnJheSh0LmFscGhhKT8yIT09dC5hbHBoYS5sZW5ndGg/WzEsMV06dC5hbHBoYS5zbGljZSgpOiJudW1iZXIiPT10eXBlb2YgdC5hbHBoYT9bdC5hbHBoYSx0LmFscGhhXTpbMSwxXTtlPXUubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKHQuaW5kZXgqcCl9KSxkWzBdPU1hdGgubWluKE1hdGgubWF4KGRbMF0sMCksMSksZFsxXT1NYXRoLm1pbihNYXRoLm1heChkWzFdLDApLDEpO3ZhciBtPXUubWFwKGZ1bmN0aW9uKHQsZSl7dmFyIHI9dVtlXS5pbmRleCxuPXVbZV0ucmdiLnNsaWNlKCk7cmV0dXJuIDQ9PT1uLmxlbmd0aCYmblszXT49MCYmblszXTw9MT9uOihuWzNdPWRbMF0rKGRbMV0tZFswXSkqcixuKX0pLHY9W107Zm9yKGc9MDtnPGUubGVuZ3RoLTE7KytnKXtjPWVbZysxXS1lW2ddLHI9bVtnXSxsPW1bZysxXTtmb3IodmFyIHk9MDt5PGM7eSsrKXt2YXIgeD15L2M7di5wdXNoKFtNYXRoLnJvdW5kKGkoclswXSxsWzBdLHgpKSxNYXRoLnJvdW5kKGkoclsxXSxsWzFdLHgpKSxNYXRoLnJvdW5kKGkoclsyXSxsWzJdLHgpKSxpKHJbM10sbFszXSx4KV0pfX12LnB1c2godVt1Lmxlbmd0aC0xXS5yZ2IuY29uY2F0KGRbMV0pKSwiaGV4Ij09PWY/dj12Lm1hcChvKToicmdiYVN0cmluZyI9PT1mP3Y9di5tYXAocyk6ImZsb2F0Ij09PWYmJih2PXYubWFwKGEpKTtyZXR1cm4gdn19LHsiLi9jb2xvclNjYWxlIjoxMTIsbGVycDozOTJ9XSwxMTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvPW4oZSxyLGEpO2lmKDA9PT1vKXt2YXIgcz1pKG4odCxlLHIpKSxjPWkobih0LGUsYSkpO2lmKHM9PT1jKXtpZigwPT09cyl7dmFyIHU9bCh0LGUsciksaD1sKHQsZSxhKTtyZXR1cm4gdT09PWg/MDp1PzE6LTF9cmV0dXJuIDB9cmV0dXJuIDA9PT1jP3M+MD8tMTpsKHQsZSxhKT8tMToxOjA9PT1zP2M+MD8xOmwodCxlLHIpPzE6LTE6aShjLXMpfXZhciBmPW4odCxlLHIpO2lmKGY+MClyZXR1cm4gbz4wJiZuKHQsZSxhKT4wPzE6LTE7aWYoZjwwKXJldHVybiBvPjB8fG4odCxlLGEpPjA/MTotMTt2YXIgcD1uKHQsZSxhKTtyZXR1cm4gcD4wPzE6bCh0LGUscik/MTotMX07dmFyIG49dCgicm9idXN0LW9yaWVudGF0aW9uIiksaT10KCJzaWdudW0iKSxhPXQoInR3by1zdW0iKSxvPXQoInJvYnVzdC1wcm9kdWN0Iikscz10KCJyb2J1c3Qtc3VtIik7ZnVuY3Rpb24gbCh0LGUscil7dmFyIG49YSh0WzBdLC1lWzBdKSxpPWEodFsxXSwtZVsxXSksbD1hKHJbMF0sLWVbMF0pLGM9YShyWzFdLC1lWzFdKSx1PXMobyhuLGwpLG8oaSxjKSk7cmV0dXJuIHVbdS5sZW5ndGgtMV0+PTB9fSx7InJvYnVzdC1vcmllbnRhdGlvbiI6NDcxLCJyb2J1c3QtcHJvZHVjdCI6NDcyLCJyb2J1c3Qtc3VtIjo0NzYsc2lnbnVtOjQ3NywidHdvLXN1bSI6NTA2fV0sMTE1OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5sZW5ndGgsYT10Lmxlbmd0aC1lLmxlbmd0aDtpZihhKXJldHVybiBhO3N3aXRjaChyKXtjYXNlIDA6cmV0dXJuIDA7Y2FzZSAxOnJldHVybiB0WzBdLWVbMF07Y2FzZSAyOnJldHVybiB0WzBdK3RbMV0tZVswXS1lWzFdfHxuKHRbMF0sdFsxXSktbihlWzBdLGVbMV0pO2Nhc2UgMzp2YXIgbz10WzBdK3RbMV0scz1lWzBdK2VbMV07aWYoYT1vK3RbMl0tKHMrZVsyXSkpcmV0dXJuIGE7dmFyIGw9bih0WzBdLHRbMV0pLGM9bihlWzBdLGVbMV0pO3JldHVybiBuKGwsdFsyXSktbihjLGVbMl0pfHxuKGwrdFsyXSxvKS1uKGMrZVsyXSxzKTtjYXNlIDQ6dmFyIHU9dFswXSxoPXRbMV0sZj10WzJdLHA9dFszXSxkPWVbMF0sZz1lWzFdLG09ZVsyXSx2PWVbM107cmV0dXJuIHUraCtmK3AtKGQrZyttK3YpfHxuKHUsaCxmLHApLW4oZCxnLG0sdixkKXx8bih1K2gsdStmLHUrcCxoK2YsaCtwLGYrcCktbihkK2csZCttLGQrdixnK20sZyt2LG0rdil8fG4odStoK2YsdStoK3AsdStmK3AsaCtmK3ApLW4oZCtnK20sZCtnK3YsZCttK3YsZyttK3YpO2RlZmF1bHQ6Zm9yKHZhciB5PXQuc2xpY2UoKS5zb3J0KGkpLHg9ZS5zbGljZSgpLnNvcnQoaSksYj0wO2I8cjsrK2IpaWYoYT15W2JdLXhbYl0pcmV0dXJuIGE7cmV0dXJuIDB9fTt2YXIgbj1NYXRoLm1pbjtmdW5jdGlvbiBpKHQsZSl7cmV0dXJuIHQtZX19LHt9XSwxMTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiY29tcGFyZS1jZWxsIiksaT10KCJjZWxsLW9yaWVudGF0aW9uIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odCxlKXx8aSh0KS1pKGUpfX0seyJjZWxsLW9yaWVudGF0aW9uIjo5OSwiY29tcGFyZS1jZWxsIjoxMTV9XSwxMTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9saWIvY2gxZCIpLGk9dCgiLi9saWIvY2gyZCIpLGE9dCgiLi9saWIvY2huZCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aDtpZigwPT09ZSlyZXR1cm5bXTtpZigxPT09ZSlyZXR1cm5bWzBdXTt2YXIgcj10WzBdLmxlbmd0aDtpZigwPT09cilyZXR1cm5bXTtpZigxPT09cilyZXR1cm4gbih0KTtpZigyPT09cilyZXR1cm4gaSh0KTtyZXR1cm4gYSh0LHIpfX0seyIuL2xpYi9jaDFkIjoxMTgsIi4vbGliL2NoMmQiOjExOSwiLi9saWIvY2huZCI6MTIwfV0sMTE4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPTAsbj0xO248dC5sZW5ndGg7KytuKXRbbl1bMF08dFtlXVswXSYmKGU9biksdFtuXVswXT50W3JdWzBdJiYocj1uKTtyZXR1cm4gZTxyP1tbZV0sW3JdXTplPnI/W1tyXSxbZV1dOltbZV1dfX0se31dLDExOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9bih0KSxyPWUubGVuZ3RoO2lmKHI8PTIpcmV0dXJuW107Zm9yKHZhciBpPW5ldyBBcnJheShyKSxhPWVbci0xXSxvPTA7bzxyOysrbyl7dmFyIHM9ZVtvXTtpW29dPVthLHNdLGE9c31yZXR1cm4gaX07dmFyIG49dCgibW9ub3RvbmUtY29udmV4LWh1bGwtMmQiKX0seyJtb25vdG9uZS1jb252ZXgtaHVsbC0yZCI6NDAxfV0sMTIwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3RyeXtyZXR1cm4gbih0LCEwKX1jYXRjaChzKXt2YXIgcj1pKHQpO2lmKHIubGVuZ3RoPD1lKXJldHVybltdO3ZhciBhPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9MDtpPGUubGVuZ3RoOysraSluW2ldPXRbZVtpXV07Zm9yKHZhciBhPWUubGVuZ3RoLGk9MDtpPHI7KytpKWUuaW5kZXhPZihpKTwwJiYoblthKytdPXRbaV0pO3JldHVybiBufSh0LHIpLG89bihhLCEwKTtyZXR1cm4gZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5sZW5ndGgsbj1lLmxlbmd0aCxpPTA7aTxyOysraSlmb3IodmFyIGE9dFtpXSxvPTA7bzxhLmxlbmd0aDsrK28pe3ZhciBzPWFbb107aWYoczxuKWFbb109ZVtzXTtlbHNle3MtPW47Zm9yKHZhciBsPTA7bDxuOysrbClzPj1lW2xdJiYocys9MSk7YVtvXT1zfX1yZXR1cm4gdH0obyxyKX19O3ZhciBuPXQoImluY3JlbWVudGFsLWNvbnZleC1odWxsIiksaT10KCJhZmZpbmUtaHVsbCIpfSx7ImFmZmluZS1odWxsIjo1MywiaW5jcmVtZW50YWwtY29udmV4LWh1bGwiOjM4MX1dLDEyMTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz17QUZHOiJhZmdoYW4iLEFMQToiXFxiXFx3bGFuZCIsQUxCOiJhbGJhbmlhIixEWkE6ImFsZ2VyaWEiLEFTTToiXig/PS4qYW1lcmljKS4qc2Ftb2EiLEFORDoiYW5kb3JyYSIsQUdPOiJhbmdvbGEiLEFJQToiYW5ndWlsbD9hIixBVEE6ImFudGFyY3RpY2EiLEFURzoiYW50aWd1YSIsQVJHOiJhcmdlbnRpbiIsQVJNOiJhcm1lbmlhIixBQlc6Il4oPyEuKmJvbmFpcmUpLipcXGJhcnViYSIsQVVTOiJhdXN0cmFsaWEiLEFVVDoiXig/IS4qaHVuZ2FyeSkuKmF1c3RyaWF8XFxiYXVzdHJpLipcXGJlbXAiLEFaRToiYXplcmJhaWphbiIsQkhTOiJiYWhhbWFzIixCSFI6ImJhaHJhaW4iLEJHRDoiYmFuZ2xhZGVzaHxeKD89LiplYXN0KS4qcGFraT9zdGFuIixCUkI6ImJhcmJhZG9zIixCTFI6ImJlbGFydXN8YnllbG8iLEJFTDoiXig/IS4qbHV4ZW0pLipiZWxnaXVtIixCTFo6ImJlbGl6ZXxeKD89Lipicml0aXNoKS4qaG9uZHVyYXMiLEJFTjoiYmVuaW58ZGFob21lIixCTVU6ImJlcm11ZGEiLEJUTjoiYmh1dGFuIixCT0w6ImJvbGl2aWEiLEJFUzoiXig/PS4qYm9uYWlyZSkuKmV1c3RhdGl1c3xeKD89LipjYXJpYikuKm5ldGhlcmxhbmRzfFxcYmJlcy4/aXNsYW5kcyIsQklIOiJoZXJ6ZWdvdmluYXxib3NuaWEiLEJXQToiYm90c3dhbmF8YmVjaHVhbmEiLEJWVDoiYm91dmV0IixCUkE6ImJyYXppbCIsSU9UOiJicml0aXNoLj9pbmRpYW4uP29jZWFuIixCUk46ImJydW5laSIsQkdSOiJidWxnYXJpYSIsQkZBOiJidXJraW5hfFxcYmZhc298dXBwZXIuP3ZvbHRhIixCREk6ImJ1cnVuZGkiLENQVjoidmVyZGUiLEtITToiY2FtYm9kaWF8a2FtcHVjaGVhfGtobWVyIixDTVI6ImNhbWVyb29uIixDQU46ImNhbmFkYSIsQ1lNOiJjYXltYW4iLENBRjoiXFxiY2VudHJhbC5hZnJpY2FuLnJlcHVibGljIixUQ0Q6IlxcYmNoYWQiLENITDoiXFxiY2hpbGUiLENITjoiXig/IS4qXFxibWFjKSg/IS4qXFxiaG9uZykoPyEuKlxcYnRhaSkoPyEuKlxcYnJlcCkuKmNoaW5hfF4oPz0uKnBlbykoPz0uKnJlcCkuKmNoaW5hIixDWFI6ImNocmlzdG1hcyIsQ0NLOiJcXGJjb2Nvc3xrZWVsaW5nIixDT0w6ImNvbG9tYmlhIixDT006ImNvbW9ybyIsQ09HOiJeKD8hLipcXGJkZW0pKD8hLipcXGJkW1xcLl0/cikoPyEuKmtpbnNoYXNhKSg/IS4qemFpcmUpKD8hLipiZWxnKSg/IS4qbC5vcG9sZHZpbGxlKSg/IS4qZnJlZSkuKlxcYmNvbmdvIixDT0s6IlxcYmNvb2siLENSSToiY29zdGEuP3JpY2EiLENJVjoiaXZvaXJlfGl2b3J5IixIUlY6ImNyb2F0aWEiLENVQjoiXFxiY3ViYSIsQ1VXOiJeKD8hLipib25haXJlKS4qXFxiY3VyYShjfFx4ZTcpYW8iLENZUDoiY3lwcnVzIixDU0s6ImN6ZWNob3Nsb3Zha2lhIixDWkU6Il4oPz0uKnJlcCkuKmN6ZWNofGN6ZWNoaWF8Ym9oZW1pYSIsQ09EOiJcXGJkZW0uKmNvbmdvfGNvbmdvLipcXGJkZW18Y29uZ28uKlxcYmRbXFwuXT9yfFxcYmRbXFwuXT9yLipjb25nb3xiZWxnaWFuLj9jb25nb3xjb25nby4/ZnJlZS4/c3RhdGV8a2luc2hhc2F8emFpcmV8bC5vcG9sZHZpbGxlfGRyY3xkcm9jfHJkYyIsRE5LOiJkZW5tYXJrIixESkk6ImRqaWJvdXRpIixETUE6ImRvbWluaWNhKD8hbikiLERPTToiZG9taW5pY2FuLnJlcCIsRUNVOiJlY3VhZG9yIixFR1k6ImVneXB0IixTTFY6ImVsLj9zYWx2YWRvciIsR05ROiJndWluZS4qZXF8ZXEuKmd1aW5lfF4oPz0uKnNwYW4pLipndWluZWEiLEVSSToiZXJpdHJlYSIsRVNUOiJlc3RvbmlhIixFVEg6ImV0aGlvcGlhfGFieXNzaW5pYSIsRkxLOiJmYWxrbGFuZHxtYWx2aW5hcyIsRlJPOiJmYXJvZXxmYWVyb2UiLEZKSToiZmlqaSIsRklOOiJmaW5sYW5kIixGUkE6Il4oPyEuKlxcYmRlcCkoPyEuKm1hcnRpbmlxdWUpLipmcmFuY2V8ZnJlbmNoLj9yZXB1YmxpY3xcXGJnYXVsIixHVUY6Il4oPz0uKmZyZW5jaCkuKmd1aWFuYSIsUFlGOiJmcmVuY2guP3BvbHluZXNpYXx0YWhpdGkiLEFURjoiZnJlbmNoLj9zb3V0aGVybiIsR0FCOiJnYWJvbiIsR01COiJnYW1iaWEiLEdFTzoiXig/IS4qc291dGgpLipnZW9yZ2lhIixERFI6Imdlcm1hbi4/ZGVtb2NyYXRpYy4/cmVwdWJsaWN8ZGVtb2NyYXRpYy4/cmVwdWJsaWMuKmdlcm1hbnl8ZWFzdC5nZXJtYW55IixERVU6Il4oPyEuKmVhc3QpLipnZXJtYW55fF4oPz0uKlxcYmZlZC4qXFxicmVwKS4qZ2VybWFuIixHSEE6ImdoYW5hfGdvbGQuP2NvYXN0IixHSUI6ImdpYnJhbHRhciIsR1JDOiJncmVlY2V8aGVsbGVuaWN8aGVsbGFzIixHUkw6ImdyZWVubGFuZCIsR1JEOiJncmVuYWRhIixHTFA6Imd1YWRlbG91cGUiLEdVTToiXFxiZ3VhbSIsR1RNOiJndWF0ZW1hbGEiLEdHWToiZ3Vlcm5zZXkiLEdJTjoiXig/IS4qZXEpKD8hLipzcGFuKSg/IS4qYmlzc2F1KSg/IS4qcG9ydHUpKD8hLipuZXcpLipndWluZWEiLEdOQjoiYmlzc2F1fF4oPz0uKnBvcnR1KS4qZ3VpbmVhIixHVVk6Imd1eWFuYXxicml0aXNoLj9ndWlhbmEiLEhUSToiaGFpdGkiLEhNRDoiaGVhcmQuKm1jZG9uYWxkIixWQVQ6ImhvbHkuP3NlZXx2YXRpY2FufHBhcGFsLj9zdCIsSE5EOiJeKD8hLipicml0KS4qaG9uZHVyYXMiLEhLRzoiaG9uZy4/a29uZyIsSFVOOiJeKD8hLiphdXN0cikuKmh1bmdhcnkiLElTTDoiaWNlbGFuZCIsSU5EOiJpbmRpYSg/IS4qb2NlYSkiLElETjoiaW5kb25lc2lhIixJUk46IlxcYmlyYW58cGVyc2lhIixJUlE6IlxcYmlyYXF8bWVzb3BvdGFtaWEiLElSTDoiKF5pcmVsYW5kKXwoXnJlcHVibGljLippcmVsYW5kKSIsSU1OOiJeKD89Lippc2xlKS4qXFxibWFuIixJU1I6ImlzcmFlbCIsSVRBOiJpdGFseSIsSkFNOiJqYW1haWNhIixKUE46ImphcGFuIixKRVk6ImplcnNleSIsSk9SOiJqb3JkYW4iLEtBWjoia2F6YWsiLEtFTjoia2VueWF8YnJpdGlzaC4/ZWFzdC4/YWZyaWNhfGVhc3QuP2FmcmljYS4/cHJvdCIsS0lSOiJraXJpYmF0aSIsUFJLOiJeKD89LipkZW1vY3JhdHxwZW9wbGV8bm9ydGh8ZC4qcC4qLnIpLipcXGJrb3JlYXxkcHJrfGtvcmVhLiooZC4qcC4qcikiLEtXVDoia3V3YWl0IixLR1o6Imt5cmd5enxraXJnaGl6IixMQU86IlxcYmxhb3M/XFxiIixMVkE6ImxhdHZpYSIsTEJOOiJsZWJhbm9uIixMU086Imxlc290aG98YmFzdXRvIixMQlI6ImxpYmVyaWEiLExCWToibGlieWEiLExJRToibGllY2h0ZW5zdGVpbiIsTFRVOiJsaXRodWFuaWEiLExVWDoiXig/IS4qYmVsZykuKmx1eGVtIixNQUM6Im1hY2Eob3x1KSIsTURHOiJtYWRhZ2FzY2FyfG1hbGFnYXN5IixNV0k6Im1hbGF3aXxueWFzYSIsTVlTOiJtYWxheXNpYSIsTURWOiJtYWxkaXZlIixNTEk6IlxcYm1hbGlcXGIiLE1MVDoiXFxibWFsdGEiLE1ITDoibWFyc2hhbGwiLE1UUToibWFydGluaXF1ZSIsTVJUOiJtYXVyaXRhbmlhIixNVVM6Im1hdXJpdGl1cyIsTVlUOiJcXGJtYXlvdHRlIixNRVg6IlxcYm1leGljIixGU006ImZlZC4qbWljcm9uZXNpYXxtaWNyb25lc2lhLipmZWQiLE1DTzoibW9uYWNvIixNTkc6Im1vbmdvbGlhIixNTkU6Il4oPyEuKnNlcmJpYSkuKm1vbnRlbmVncm8iLE1TUjoibW9udHNlcnJhdCIsTUFSOiJtb3JvY2NvfFxcYm1hcm9jIixNT1o6Im1vemFtYmlxdWUiLE1NUjoibXlhbm1hcnxidXJtYSIsTkFNOiJuYW1pYmlhIixOUlU6Im5hdXJ1IixOUEw6Im5lcGFsIixOTEQ6Il4oPyEuKlxcYmFudCkoPyEuKlxcYmNhcmliKS4qbmV0aGVybGFuZHMiLEFOVDoiXig/PS4qXFxiYW50KS4qKG5ldGhlcnxkdXRjaCkiLE5DTDoibmV3Lj9jYWxlZG9uaWEiLE5aTDoibmV3Lj96ZWFsYW5kIixOSUM6Im5pY2FyYWd1YSIsTkVSOiJcXGJuaWdlcig/IWlhKSIsTkdBOiJuaWdlcmlhIixOSVU6Im5pdWUiLE5GSzoibm9yZm9sayIsTU5QOiJtYXJpYW5hIixOT1I6Im5vcndheSIsT01OOiJcXGJvbWFufHRydWNpYWwiLFBBSzoiXig/IS4qZWFzdCkuKnBha2k/c3RhbiIsUExXOiJwYWxhdSIsUFNFOiJwYWxlc3RpbnxcXGJnYXphfHdlc3QuP2JhbmsiLFBBTjoicGFuYW1hIixQTkc6InBhcHVhfG5ldy4/Z3VpbmVhIixQUlk6InBhcmFndWF5IixQRVI6InBlcnUiLFBITDoicGhpbGlwcGluZXMiLFBDTjoicGl0Y2Fpcm4iLFBPTDoicG9sYW5kIixQUlQ6InBvcnR1Z2FsIixQUkk6InB1ZXJ0by4/cmljbyIsUUFUOiJxYXRhciIsS09SOiJeKD8hLipkLipwLipyKSg/IS4qZGVtb2NyYXQpKD8hLipwZW9wbGUpKD8hLipub3J0aCkuKlxcYmtvcmVhKD8hLipkLipwLipyKSIsTURBOiJtb2xkb3Z8YihhfGUpc3NhcmFiaWEiLFJFVToicihlfFx4ZTkpdW5pb24iLFJPVToicihvfHV8b3UpbWFuaWEiLFJVUzoiXFxicnVzc2lhfHNvdmlldC4/dW5pb258dVxcLj9zXFwuP3NcXC4/cnxzb2NpYWxpc3QuP3JlcHVibGljcyIsUldBOiJyd2FuZGEiLEJMTToiYmFydGgoZXxceGU5KWxlbXkiLFNITjoiaGVsZW5hIixLTkE6ImtpdHRzfFxcYm5ldmlzIixMQ0E6IlxcYmx1Y2lhIixNQUY6Il4oPz0uKmNvbGxlY3Rpdml0eSkuKm1hcnRpbnxeKD89LipmcmFuY2UpLiptYXJ0aW4oPyFpcXVlKXxeKD89LipmcmVuY2gpLiptYXJ0aW4oPyFpcXVlKSIsU1BNOiJtaXF1ZWxvbiIsVkNUOiJ2aW5jZW50IixXU006Il4oPyEuKmFtZXIpLipzYW1vYSIsU01SOiJzYW4uP21hcmlubyIsU1RQOiJcXGJzKGF8XHhlMylvLj90b20oZXxceGU5KSIsU0FVOiJcXGJzYVxcdyouP2FyYWJpYSIsU0VOOiJzZW5lZ2FsIixTUkI6Il4oPyEuKm1vbnRlKS4qc2VyYmlhIixTWUM6InNleWNoZWxsIixTTEU6InNpZXJyYSIsU0dQOiJzaW5nYXBvcmUiLFNYTToiXig/IS4qbWFydGluKSg/IS4qc2FiYSkuKm1hYXJ0ZW4iLFNWSzoiXig/IS4qY3plKS4qc2xvdmFrIixTVk46InNsb3ZlbmlhIixTTEI6InNvbG9tb24iLFNPTToic29tYWxpIixaQUY6InNvdXRoLmFmcmljYXxzXFxcXC4uP2FmcmljYSIsU0dTOiJzb3V0aC4/Z2VvcmdpYXxzYW5kd2ljaCIsU1NEOiJcXGJzXFx3Ki4/c3VkYW4iLEVTUDoic3BhaW4iLExLQToic3JpLj9sYW5rYXxjZXlsb24iLFNETjoiXig/IS4qXFxicyg/IXUpKS4qc3VkYW4iLFNVUjoic3VyaW5hbXxkdXRjaC4/Z3VpYW5hIixTSk06InN2YWxiYXJkIixTV1o6InN3YXppbGFuZCIsU1dFOiJzd2VkZW4iLENIRToic3dpdHp8c3dpc3MiLFNZUjoic3lyaWEiLFRXTjoidGFpd2FufHRhaXBlaXxmb3Jtb3NhfF4oPyEuKnBlbykoPz0uKnJlcCkuKmNoaW5hIixUSks6InRhamlrIixUSEE6InRoYWlsYW5kfFxcYnNpYW0iLE1LRDoibWFjZWRvbmlhfGZ5cm9tIixUTFM6Il4oPz0uKmxlc3RlKS4qdGltb3J8Xig/PS4qZWFzdCkuKnRpbW9yIixUR086InRvZ28iLFRLTDoidG9rZWxhdSIsVE9OOiJ0b25nYSIsVFRPOiJ0cmluaWRhZHx0b2JhZ28iLFRVTjoidHVuaXNpYSIsVFVSOiJ0dXJrZXkiLFRLTToidHVya21lbiIsVENBOiJ0dXJrcyIsVFVWOiJ0dXZhbHUiLFVHQToidWdhbmRhIixVS1I6InVrcmFpbiIsQVJFOiJlbWlyYXRlc3xedVxcLj9hXFwuP2VcXC4/JHx1bml0ZWQuP2FyYWIuP2VtIixHQlI6InVuaXRlZC4/a2luZ2RvbXxicml0YWlufF51XFwuP2tcXC4/JCIsVFpBOiJ0YW56YW5pYSIsVVNBOiJ1bml0ZWQuP3N0YXRlc1xcYig/IS4qaXNsYW5kcyl8XFxidVxcLj9zXFwuP2FcXC4/XFxifF5cXHMqdVxcLj9zXFwuP1xcYig/IS4qaXNsYW5kcykiLFVNSToibWlub3IuP291dGx5aW5nLj9pcyIsVVJZOiJ1cnVndWF5IixVWkI6InV6YmVrIixWVVQ6InZhbnVhdHV8bmV3Lj9oZWJyaWRlcyIsVkVOOiJ2ZW5lenVlbGEiLFZOTToiXig/IS4qcmVwdWJsaWMpLip2aWV0Lj9uYW18Xig/PS4qc29jaWFsaXN0KS4qdmlldC4/bmFtIixWR0I6Il4oPz0uKlxcYnVcXC4/XFxzP2spLip2aXJnaW58Xig/PS4qYnJpdCkuKnZpcmdpbnxeKD89LipraW5nZG9tKS4qdmlyZ2luIixWSVI6Il4oPz0uKlxcYnVcXC4/XFxzP3MpLip2aXJnaW58Xig/PS4qc3RhdGVzKS4qdmlyZ2luIixXTEY6ImZ1dHVuYXx3YWxsaXMiLEVTSDoid2VzdGVybi5zYWhhcmEiLFlFTToiXig/IS4qYXJhYikoPyEuKm5vcnRoKSg/IS4qc2FuYSkoPyEuKnBlbykoPyEuKmRlbSkoPyEuKnNvdXRoKSg/IS4qYWRlbikoPyEuKlxcYnBcXC4/ZFxcLj9yKS4qeWVtZW4iLFlNRDoiXig/PS4qcGVvKS4qeWVtZW58Xig/IS4qcmVwKSg/PS4qZGVtKS4qeWVtZW58Xig/PS4qc291dGgpLip5ZW1lbnxeKD89LiphZGVuKS4qeWVtZW58Xig/PS4qXFxicFxcLj9kXFwuP3IpLip5ZW1lbiIsWVVHOiJ5dWdvc2xhdmlhIixaTUI6InphbWJpYXxub3J0aGVybi4/cmhvZGVzaWEiLEVBWjoiemFuemliYXIiLFpXRToiemltYmFid2V8Xig/IS4qbm9ydGhlcm4pLipyaG9kZXNpYSJ9fSx7fV0sMTIyOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPVsieHgtc21hbGwiLCJ4LXNtYWxsIiwic21hbGwiLCJtZWRpdW0iLCJsYXJnZSIsIngtbGFyZ2UiLCJ4eC1sYXJnZSIsImxhcmdlciIsInNtYWxsZXIiXX0se31dLDEyMzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1bIm5vcm1hbCIsImNvbmRlbnNlZCIsInNlbWktY29uZGVuc2VkIiwiZXh0cmEtY29uZGVuc2VkIiwidWx0cmEtY29uZGVuc2VkIiwiZXhwYW5kZWQiLCJzZW1pLWV4cGFuZGVkIiwiZXh0cmEtZXhwYW5kZWQiLCJ1bHRyYS1leHBhbmRlZCJdfSx7fV0sMTI0OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPVsibm9ybWFsIiwiaXRhbGljIiwib2JsaXF1ZSJdfSx7fV0sMTI1OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPVsibm9ybWFsIiwiYm9sZCIsImJvbGRlciIsImxpZ2h0ZXIiLCIxMDAiLCIyMDAiLCIzMDAiLCI0MDAiLCI1MDAiLCI2MDAiLCI3MDAiLCI4MDAiLCI5MDAiXX0se31dLDEyNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e3BhcnNlOnQoIi4vcGFyc2UiKSxzdHJpbmdpZnk6dCgiLi9zdHJpbmdpZnkiKX19LHsiLi9wYXJzZSI6MTI4LCIuL3N0cmluZ2lmeSI6MTI5fV0sMTI3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImNzcy1mb250LXNpemUta2V5d29yZHMiKTtlLmV4cG9ydHM9e2lzU2l6ZTpmdW5jdGlvbih0KXtyZXR1cm4vXltcZFwuXS8udGVzdCh0KXx8LTEhPT10LmluZGV4T2YoIi8iKXx8LTEhPT1uLmluZGV4T2YodCl9fX0seyJjc3MtZm9udC1zaXplLWtleXdvcmRzIjoxMjJ9XSwxMjg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgidW5xdW90ZSIpLGk9dCgiY3NzLWdsb2JhbC1rZXl3b3JkcyIpLGE9dCgiY3NzLXN5c3RlbS1mb250LWtleXdvcmRzIiksbz10KCJjc3MtZm9udC13ZWlnaHQta2V5d29yZHMiKSxzPXQoImNzcy1mb250LXN0eWxlLWtleXdvcmRzIiksbD10KCJjc3MtZm9udC1zdHJldGNoLWtleXdvcmRzIiksYz10KCJzdHJpbmctc3BsaXQtYnkiKSx1PXQoIi4vbGliL3V0aWwiKS5pc1NpemU7ZS5leHBvcnRzPWY7dmFyIGg9Zi5jYWNoZT17fTtmdW5jdGlvbiBmKHQpe2lmKCJzdHJpbmciIT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3IoIkZvbnQgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZy4iKTtpZihoW3RdKXJldHVybiBoW3RdO2lmKCIiPT09dCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBwYXJzZSBhbiBlbXB0eSBzdHJpbmcuIik7aWYoLTEhPT1hLmluZGV4T2YodCkpcmV0dXJuIGhbdF09e3N5c3RlbTp0fTtmb3IodmFyIGUscj17c3R5bGU6Im5vcm1hbCIsdmFyaWFudDoibm9ybWFsIix3ZWlnaHQ6Im5vcm1hbCIsc3RyZXRjaDoibm9ybWFsIixsaW5lSGVpZ2h0OiJub3JtYWwiLHNpemU6IjFyZW0iLGZhbWlseTpbInNlcmlmIl19LGY9Yyh0LC9ccysvKTtlPWYuc2hpZnQoKTspe2lmKC0xIT09aS5pbmRleE9mKGUpKXJldHVyblsic3R5bGUiLCJ2YXJpYW50Iiwid2VpZ2h0Iiwic3RyZXRjaCJdLmZvckVhY2goZnVuY3Rpb24odCl7clt0XT1lfSksaFt0XT1yO2lmKC0xPT09cy5pbmRleE9mKGUpKWlmKCJub3JtYWwiIT09ZSYmInNtYWxsLWNhcHMiIT09ZSlpZigtMT09PWwuaW5kZXhPZihlKSl7aWYoLTE9PT1vLmluZGV4T2YoZSkpe2lmKHUoZSkpe3ZhciBkPWMoZSwiLyIpO2lmKHIuc2l6ZT1kWzBdLG51bGwhPWRbMV0/ci5saW5lSGVpZ2h0PXAoZFsxXSk6Ii8iPT09ZlswXSYmKGYuc2hpZnQoKSxyLmxpbmVIZWlnaHQ9cChmLnNoaWZ0KCkpKSwhZi5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJNaXNzaW5nIHJlcXVpcmVkIGZvbnQtZmFtaWx5LiIpO3JldHVybiByLmZhbWlseT1jKGYuam9pbigiICIpLC9ccyosXHMqLykubWFwKG4pLGhbdF09cn10aHJvdyBuZXcgRXJyb3IoIlVua25vd24gb3IgdW5zdXBwb3J0ZWQgZm9udCB0b2tlbjogIitlKX1yLndlaWdodD1lfWVsc2Ugci5zdHJldGNoPWU7ZWxzZSByLnZhcmlhbnQ9ZTtlbHNlIHIuc3R5bGU9ZX10aHJvdyBuZXcgRXJyb3IoIk1pc3NpbmcgcmVxdWlyZWQgZm9udC1zaXplLiIpfWZ1bmN0aW9uIHAodCl7dmFyIGU9cGFyc2VGbG9hdCh0KTtyZXR1cm4gZS50b1N0cmluZygpPT09dD9lOnR9fSx7Ii4vbGliL3V0aWwiOjEyNywiY3NzLWZvbnQtc3RyZXRjaC1rZXl3b3JkcyI6MTIzLCJjc3MtZm9udC1zdHlsZS1rZXl3b3JkcyI6MTI0LCJjc3MtZm9udC13ZWlnaHQta2V5d29yZHMiOjEyNSwiY3NzLWdsb2JhbC1rZXl3b3JkcyI6MTMwLCJjc3Mtc3lzdGVtLWZvbnQta2V5d29yZHMiOjEzMSwic3RyaW5nLXNwbGl0LWJ5Ijo0OTAsdW5xdW90ZTo1MTB9XSwxMjk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgicGljay1ieS1hbGlhcyIpLGk9dCgiLi9saWIvdXRpbCIpLmlzU2l6ZSxhPWcodCgiY3NzLWdsb2JhbC1rZXl3b3JkcyIpKSxvPWcodCgiY3NzLXN5c3RlbS1mb250LWtleXdvcmRzIikpLHM9Zyh0KCJjc3MtZm9udC13ZWlnaHQta2V5d29yZHMiKSksbD1nKHQoImNzcy1mb250LXN0eWxlLWtleXdvcmRzIikpLGM9Zyh0KCJjc3MtZm9udC1zdHJldGNoLWtleXdvcmRzIikpLHU9e25vcm1hbDoxLCJzbWFsbC1jYXBzIjoxfSxoPXtzZXJpZjoxLCJzYW5zLXNlcmlmIjoxLG1vbm9zcGFjZToxLGN1cnNpdmU6MSxmYW50YXN5OjEsInN5c3RlbS11aSI6MX0sZj0iMXJlbSIscD0ic2VyaWYiO2Z1bmN0aW9uIGQodCxlKXtpZih0JiYhZVt0XSYmIWFbdF0pdGhyb3cgRXJyb3IoIlVua25vd24ga2V5d29yZCBgIit0KyJgIik7cmV0dXJuIHR9ZnVuY3Rpb24gZyh0KXtmb3IodmFyIGU9e30scj0wO3I8dC5sZW5ndGg7cisrKWVbdFtyXV09MTtyZXR1cm4gZX1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoKHQ9bih0LHtzdHlsZToic3R5bGUgZm9udHN0eWxlIGZvbnRTdHlsZSBmb250LXN0eWxlIHNsb3BlIGRpc3RpbmN0aW9uIix2YXJpYW50OiJ2YXJpYW50IGZvbnQtdmFyaWFudCBmb250VmFyaWFudCBmb250dmFyaWFudCB2YXIgY2FwaXRhbGl6YXRpb24iLHdlaWdodDoid2VpZ2h0IHcgZm9udC13ZWlnaHQgZm9udFdlaWdodCBmb250d2VpZ2h0IixzdHJldGNoOiJzdHJldGNoIGZvbnQtc3RyZXRjaCBmb250U3RyZXRjaCBmb250c3RyZXRjaCB3aWR0aCIsc2l6ZToic2l6ZSBzIGZvbnQtc2l6ZSBmb250U2l6ZSBmb250c2l6ZSBoZWlnaHQgZW0gZW1TaXplIixsaW5lSGVpZ2h0OiJsaCBsaW5lLWhlaWdodCBsaW5lSGVpZ2h0IGxpbmVoZWlnaHQgbGVhZGluZyIsZmFtaWx5OiJmb250IGZhbWlseSBmb250RmFtaWx5IGZvbnQtZmFtaWx5IGZvbnRmYW1pbHkgdHlwZSB0eXBlZmFjZSBmYWNlIixzeXN0ZW06InN5c3RlbSByZXNlcnZlZCBkZWZhdWx0IGdsb2JhbCJ9KSkuc3lzdGVtKXJldHVybiB0LnN5c3RlbSYmZCh0LnN5c3RlbSxvKSx0LnN5c3RlbTtpZihkKHQuc3R5bGUsbCksZCh0LnZhcmlhbnQsdSksZCh0LndlaWdodCxzKSxkKHQuc3RyZXRjaCxjKSxudWxsPT10LnNpemUmJih0LnNpemU9ZiksIm51bWJlciI9PXR5cGVvZiB0LnNpemUmJih0LnNpemUrPSJweCIpLCFpKXRocm93IEVycm9yKCJCYWQgc2l6ZSB2YWx1ZSBgIit0LnNpemUrImAiKTt0LmZhbWlseXx8KHQuZmFtaWx5PXApLEFycmF5LmlzQXJyYXkodC5mYW1pbHkpJiYodC5mYW1pbHkubGVuZ3RofHwodC5mYW1pbHk9W3BdKSx0LmZhbWlseT10LmZhbWlseS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGhbdF0/dDonIicrdCsnIid9KS5qb2luKCIsICIpKTt2YXIgZT1bXTtyZXR1cm4gZS5wdXNoKHQuc3R5bGUpLHQudmFyaWFudCE9PXQuc3R5bGUmJmUucHVzaCh0LnZhcmlhbnQpLHQud2VpZ2h0IT09dC52YXJpYW50JiZ0LndlaWdodCE9PXQuc3R5bGUmJmUucHVzaCh0LndlaWdodCksdC5zdHJldGNoIT09dC53ZWlnaHQmJnQuc3RyZXRjaCE9PXQudmFyaWFudCYmdC5zdHJldGNoIT09dC5zdHlsZSYmZS5wdXNoKHQuc3RyZXRjaCksZS5wdXNoKHQuc2l6ZSsobnVsbD09dC5saW5lSGVpZ2h0fHwibm9ybWFsIj09PXQubGluZUhlaWdodHx8dC5saW5lSGVpZ2h0KyIiPT0iMSI/IiI6Ii8iK3QubGluZUhlaWdodCkpLGUucHVzaCh0LmZhbWlseSksZS5maWx0ZXIoQm9vbGVhbikuam9pbigiICIpfX0seyIuL2xpYi91dGlsIjoxMjcsImNzcy1mb250LXN0cmV0Y2gta2V5d29yZHMiOjEyMywiY3NzLWZvbnQtc3R5bGUta2V5d29yZHMiOjEyNCwiY3NzLWZvbnQtd2VpZ2h0LWtleXdvcmRzIjoxMjUsImNzcy1nbG9iYWwta2V5d29yZHMiOjEzMCwiY3NzLXN5c3RlbS1mb250LWtleXdvcmRzIjoxMzEsInBpY2stYnktYWxpYXMiOjQzMn1dLDEzMDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1bImluaGVyaXQiLCJpbml0aWFsIiwidW5zZXQiXX0se31dLDEzMTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1bImNhcHRpb24iLCJpY29uIiwibWVudSIsIm1lc3NhZ2UtYm94Iiwic21hbGwtY2FwdGlvbiIsInN0YXR1cy1iYXIiXX0se31dLDEzMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvPWktMSxzPWkqaSxsPW8qbyxjPSgxKzIqaSkqbCx1PWkqbCxoPXMqKDMtMippKSxmPXMqbztpZih0Lmxlbmd0aCl7YXx8KGE9bmV3IEFycmF5KHQubGVuZ3RoKSk7Zm9yKHZhciBwPXQubGVuZ3RoLTE7cD49MDstLXApYVtwXT1jKnRbcF0rdSplW3BdK2gqcltwXStmKm5bcF07cmV0dXJuIGF9cmV0dXJuIGMqdCt1KmUraCpyK2Yqbn0sZS5leHBvcnRzLmRlcml2YXRpdmU9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvPTYqaSppLTYqaSxzPTMqaSppLTQqaSsxLGw9LTYqaSppKzYqaSxjPTMqaSppLTIqaTtpZih0Lmxlbmd0aCl7YXx8KGE9bmV3IEFycmF5KHQubGVuZ3RoKSk7Zm9yKHZhciB1PXQubGVuZ3RoLTE7dT49MDstLXUpYVt1XT1vKnRbdV0rcyplW3VdK2wqclt1XStjKm5bdV07cmV0dXJuIGF9cmV0dXJuIG8qdCtzKmUrbCpyW3VdK2Mqbn19LHt9XSwxMzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9saWIvdGh1bmsuanMiKTtmdW5jdGlvbiBpKCl7dGhpcy5hcmdUeXBlcz1bXSx0aGlzLnNoaW1BcmdzPVtdLHRoaXMuYXJyYXlBcmdzPVtdLHRoaXMuYXJyYXlCbG9ja0luZGljZXM9W10sdGhpcy5zY2FsYXJBcmdzPVtdLHRoaXMub2Zmc2V0QXJncz1bXSx0aGlzLm9mZnNldEFyZ0luZGV4PVtdLHRoaXMuaW5kZXhBcmdzPVtdLHRoaXMuc2hhcGVBcmdzPVtdLHRoaXMuZnVuY05hbWU9IiIsdGhpcy5wcmU9bnVsbCx0aGlzLmJvZHk9bnVsbCx0aGlzLnBvc3Q9bnVsbCx0aGlzLmRlYnVnPSExfWUuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1uZXcgaTtlLnByZT10LnByZSxlLmJvZHk9dC5ib2R5LGUucG9zdD10LnBvc3Q7dmFyIHI9dC5hcmdzLnNsaWNlKDApO2UuYXJnVHlwZXM9cjtmb3IodmFyIGE9MDthPHIubGVuZ3RoOysrYSl7dmFyIG89clthXTtpZigiYXJyYXkiPT09b3x8Im9iamVjdCI9PXR5cGVvZiBvJiZvLmJsb2NrSW5kaWNlcyl7aWYoZS5hcmdUeXBlc1thXT0iYXJyYXkiLGUuYXJyYXlBcmdzLnB1c2goYSksZS5hcnJheUJsb2NrSW5kaWNlcy5wdXNoKG8uYmxvY2tJbmRpY2VzP28uYmxvY2tJbmRpY2VzOjApLGUuc2hpbUFyZ3MucHVzaCgiYXJyYXkiK2EpLGE8ZS5wcmUuYXJncy5sZW5ndGgmJmUucHJlLmFyZ3NbYV0uY291bnQ+MCl0aHJvdyBuZXcgRXJyb3IoImN3aXNlOiBwcmUoKSBibG9jayBtYXkgbm90IHJlZmVyZW5jZSBhcnJheSBhcmdzIik7aWYoYTxlLnBvc3QuYXJncy5sZW5ndGgmJmUucG9zdC5hcmdzW2FdLmNvdW50PjApdGhyb3cgbmV3IEVycm9yKCJjd2lzZTogcG9zdCgpIGJsb2NrIG1heSBub3QgcmVmZXJlbmNlIGFycmF5IGFyZ3MiKX1lbHNlIGlmKCJzY2FsYXIiPT09byllLnNjYWxhckFyZ3MucHVzaChhKSxlLnNoaW1BcmdzLnB1c2goInNjYWxhciIrYSk7ZWxzZSBpZigiaW5kZXgiPT09byl7aWYoZS5pbmRleEFyZ3MucHVzaChhKSxhPGUucHJlLmFyZ3MubGVuZ3RoJiZlLnByZS5hcmdzW2FdLmNvdW50PjApdGhyb3cgbmV3IEVycm9yKCJjd2lzZTogcHJlKCkgYmxvY2sgbWF5IG5vdCByZWZlcmVuY2UgYXJyYXkgaW5kZXgiKTtpZihhPGUuYm9keS5hcmdzLmxlbmd0aCYmZS5ib2R5LmFyZ3NbYV0ubHZhbHVlKXRocm93IG5ldyBFcnJvcigiY3dpc2U6IGJvZHkoKSBibG9jayBtYXkgbm90IHdyaXRlIHRvIGFycmF5IGluZGV4Iik7aWYoYTxlLnBvc3QuYXJncy5sZW5ndGgmJmUucG9zdC5hcmdzW2FdLmNvdW50PjApdGhyb3cgbmV3IEVycm9yKCJjd2lzZTogcG9zdCgpIGJsb2NrIG1heSBub3QgcmVmZXJlbmNlIGFycmF5IGluZGV4Iil9ZWxzZSBpZigic2hhcGUiPT09byl7aWYoZS5zaGFwZUFyZ3MucHVzaChhKSxhPGUucHJlLmFyZ3MubGVuZ3RoJiZlLnByZS5hcmdzW2FdLmx2YWx1ZSl0aHJvdyBuZXcgRXJyb3IoImN3aXNlOiBwcmUoKSBibG9jayBtYXkgbm90IHdyaXRlIHRvIGFycmF5IHNoYXBlIik7aWYoYTxlLmJvZHkuYXJncy5sZW5ndGgmJmUuYm9keS5hcmdzW2FdLmx2YWx1ZSl0aHJvdyBuZXcgRXJyb3IoImN3aXNlOiBib2R5KCkgYmxvY2sgbWF5IG5vdCB3cml0ZSB0byBhcnJheSBzaGFwZSIpO2lmKGE8ZS5wb3N0LmFyZ3MubGVuZ3RoJiZlLnBvc3QuYXJnc1thXS5sdmFsdWUpdGhyb3cgbmV3IEVycm9yKCJjd2lzZTogcG9zdCgpIGJsb2NrIG1heSBub3Qgd3JpdGUgdG8gYXJyYXkgc2hhcGUiKX1lbHNle2lmKCJvYmplY3QiIT10eXBlb2Ygb3x8IW8ub2Zmc2V0KXRocm93IG5ldyBFcnJvcigiY3dpc2U6IFVua25vd24gYXJndW1lbnQgdHlwZSAiK3JbYV0pO2UuYXJnVHlwZXNbYV09Im9mZnNldCIsZS5vZmZzZXRBcmdzLnB1c2goe2FycmF5Om8uYXJyYXksb2Zmc2V0Om8ub2Zmc2V0fSksZS5vZmZzZXRBcmdJbmRleC5wdXNoKGEpfX1pZihlLmFycmF5QXJncy5sZW5ndGg8PTApdGhyb3cgbmV3IEVycm9yKCJjd2lzZTogTm8gYXJyYXkgYXJndW1lbnRzIHNwZWNpZmllZCIpO2lmKGUucHJlLmFyZ3MubGVuZ3RoPnIubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiY3dpc2U6IFRvbyBtYW55IGFyZ3VtZW50cyBpbiBwcmUoKSBibG9jayIpO2lmKGUuYm9keS5hcmdzLmxlbmd0aD5yLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImN3aXNlOiBUb28gbWFueSBhcmd1bWVudHMgaW4gYm9keSgpIGJsb2NrIik7aWYoZS5wb3N0LmFyZ3MubGVuZ3RoPnIubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiY3dpc2U6IFRvbyBtYW55IGFyZ3VtZW50cyBpbiBwb3N0KCkgYmxvY2siKTtyZXR1cm4gZS5kZWJ1Zz0hIXQucHJpbnRDb2RlfHwhIXQuZGVidWcsZS5mdW5jTmFtZT10LmZ1bmNOYW1lfHwiY3dpc2UiLGUuYmxvY2tTaXplPXQuYmxvY2tTaXplfHw2NCxuKGUpfX0seyIuL2xpYi90aHVuay5qcyI6MTM1fV0sMTM0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInVuaXEiKTtmdW5jdGlvbiBpKHQsZSxyKXt2YXIgbixpLGE9dC5sZW5ndGgsbz1lLmFycmF5QXJncy5sZW5ndGgscz1lLmluZGV4QXJncy5sZW5ndGg+MCxsPVtdLGM9W10sdT0wLGg9MDtmb3Iobj0wO248YTsrK24pYy5wdXNoKFsiaSIsbiwiPTAiXS5qb2luKCIiKSk7Zm9yKGk9MDtpPG87KytpKWZvcihuPTA7bjxhOysrbiloPXUsdT10W25dLDA9PT1uP2MucHVzaChbImQiLGksInMiLG4sIj10IixpLCJwIix1XS5qb2luKCIiKSk6Yy5wdXNoKFsiZCIsaSwicyIsbiwiPSh0IixpLCJwIix1LCItcyIsaCwiKnQiLGksInAiLGgsIikiXS5qb2luKCIiKSk7Zm9yKGMubGVuZ3RoPjAmJmwucHVzaCgidmFyICIrYy5qb2luKCIsIikpLG49YS0xO24+PTA7LS1uKXU9dFtuXSxsLnB1c2goWyJmb3IoaSIsbiwiPTA7aSIsbiwiPHMiLHUsIjsrK2kiLG4sIil7Il0uam9pbigiIikpO2ZvcihsLnB1c2gociksbj0wO248YTsrK24pe2ZvcihoPXUsdT10W25dLGk9MDtpPG87KytpKWwucHVzaChbInAiLGksIis9ZCIsaSwicyIsbl0uam9pbigiIikpO3MmJihuPjAmJmwucHVzaChbImluZGV4WyIsaCwiXS09cyIsaF0uam9pbigiIikpLGwucHVzaChbIisraW5kZXhbIix1LCJdIl0uam9pbigiIikpKSxsLnB1c2goIn0iKX1yZXR1cm4gbC5qb2luKCJcbiIpfWZ1bmN0aW9uIGEodCxlLHIpe2Zvcih2YXIgbj10LmJvZHksaT1bXSxhPVtdLG89MDtvPHQuYXJncy5sZW5ndGg7KytvKXt2YXIgcz10LmFyZ3Nbb107aWYoIShzLmNvdW50PD0wKSl7dmFyIGw9bmV3IFJlZ0V4cChzLm5hbWUsImciKSxjPSIiLHU9ZS5hcnJheUFyZ3MuaW5kZXhPZihvKTtzd2l0Y2goZS5hcmdUeXBlc1tvXSl7Y2FzZSJvZmZzZXQiOnZhciBoPWUub2Zmc2V0QXJnSW5kZXguaW5kZXhPZihvKTt1PWUub2Zmc2V0QXJnc1toXS5hcnJheSxjPSIrcSIraDtjYXNlImFycmF5IjpjPSJwIit1K2M7dmFyIGY9ImwiK28scD0iYSIrdTtpZigwPT09ZS5hcnJheUJsb2NrSW5kaWNlc1t1XSkxPT09cy5jb3VudD8iZ2VuZXJpYyI9PT1yW3VdP3MubHZhbHVlPyhpLnB1c2goWyJ2YXIgIixmLCI9IixwLCIuZ2V0KCIsYywiKSJdLmpvaW4oIiIpKSxuPW4ucmVwbGFjZShsLGYpLGEucHVzaChbcCwiLnNldCgiLGMsIiwiLGYsIikiXS5qb2luKCIiKSkpOm49bi5yZXBsYWNlKGwsW3AsIi5nZXQoIixjLCIpIl0uam9pbigiIikpOm49bi5yZXBsYWNlKGwsW3AsIlsiLGMsIl0iXS5qb2luKCIiKSk6ImdlbmVyaWMiPT09clt1XT8oaS5wdXNoKFsidmFyICIsZiwiPSIscCwiLmdldCgiLGMsIikiXS5qb2luKCIiKSksbj1uLnJlcGxhY2UobCxmKSxzLmx2YWx1ZSYmYS5wdXNoKFtwLCIuc2V0KCIsYywiLCIsZiwiKSJdLmpvaW4oIiIpKSk6KGkucHVzaChbInZhciAiLGYsIj0iLHAsIlsiLGMsIl0iXS5qb2luKCIiKSksbj1uLnJlcGxhY2UobCxmKSxzLmx2YWx1ZSYmYS5wdXNoKFtwLCJbIixjLCJdPSIsZl0uam9pbigiIikpKTtlbHNle2Zvcih2YXIgZD1bcy5uYW1lXSxnPVtjXSxtPTA7bTxNYXRoLmFicyhlLmFycmF5QmxvY2tJbmRpY2VzW3VdKTttKyspZC5wdXNoKCJcXHMqXFxbKFteXFxdXSspXFxdIiksZy5wdXNoKCIkIisobSsxKSsiKnQiK3UrImIiK20pO2lmKGw9bmV3IFJlZ0V4cChkLmpvaW4oIiIpLCJnIiksYz1nLmpvaW4oIisiKSwiZ2VuZXJpYyI9PT1yW3VdKXRocm93IG5ldyBFcnJvcigiY3dpc2U6IEdlbmVyaWMgYXJyYXlzIG5vdCBzdXBwb3J0ZWQgaW4gY29tYmluYXRpb24gd2l0aCBibG9ja3MhIik7bj1uLnJlcGxhY2UobCxbcCwiWyIsYywiXSJdLmpvaW4oIiIpKX1icmVhaztjYXNlInNjYWxhciI6bj1uLnJlcGxhY2UobCwiWSIrZS5zY2FsYXJBcmdzLmluZGV4T2YobykpO2JyZWFrO2Nhc2UiaW5kZXgiOm49bi5yZXBsYWNlKGwsImluZGV4Iik7YnJlYWs7Y2FzZSJzaGFwZSI6bj1uLnJlcGxhY2UobCwic2hhcGUiKX19fXJldHVybltpLmpvaW4oIlxuIiksbixhLmpvaW4oIlxuIildLmpvaW4oIlxuIikudHJpbSgpfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1lWzFdLmxlbmd0aC1NYXRoLmFicyh0LmFycmF5QmxvY2tJbmRpY2VzWzBdKXwwLG89bmV3IEFycmF5KHQuYXJyYXlBcmdzLmxlbmd0aCkscz1uZXcgQXJyYXkodC5hcnJheUFyZ3MubGVuZ3RoKSxsPTA7bDx0LmFycmF5QXJncy5sZW5ndGg7KytsKXNbbF09ZVsyKmxdLG9bbF09ZVsyKmwrMV07dmFyIGM9W10sdT1bXSxoPVtdLGY9W10scD1bXTtmb3IobD0wO2w8dC5hcnJheUFyZ3MubGVuZ3RoOysrbCl7dC5hcnJheUJsb2NrSW5kaWNlc1tsXTwwPyhoLnB1c2goMCksZi5wdXNoKHIpLGMucHVzaChyKSx1LnB1c2gocit0LmFycmF5QmxvY2tJbmRpY2VzW2xdKSk6KGgucHVzaCh0LmFycmF5QmxvY2tJbmRpY2VzW2xdKSxmLnB1c2godC5hcnJheUJsb2NrSW5kaWNlc1tsXStyKSxjLnB1c2goMCksdS5wdXNoKHQuYXJyYXlCbG9ja0luZGljZXNbbF0pKTtmb3IodmFyIGQ9W10sZz0wO2c8b1tsXS5sZW5ndGg7ZysrKWhbbF08PW9bbF1bZ10mJm9bbF1bZ108ZltsXSYmZC5wdXNoKG9bbF1bZ10taFtsXSk7cC5wdXNoKGQpfXZhciBtPVsiU1MiXSx2PVsiJ3VzZSBzdHJpY3QnIl0seT1bXTtmb3IoZz0wO2c8cjsrK2cpeS5wdXNoKFsicyIsZywiPVNTWyIsZywiXSJdLmpvaW4oIiIpKTtmb3IobD0wO2w8dC5hcnJheUFyZ3MubGVuZ3RoOysrbCl7Zm9yKG0ucHVzaCgiYSIrbCksbS5wdXNoKCJ0IitsKSxtLnB1c2goInAiK2wpLGc9MDtnPHI7KytnKXkucHVzaChbInQiLGwsInAiLGcsIj10IixsLCJbIixoW2xdK2csIl0iXS5qb2luKCIiKSk7Zm9yKGc9MDtnPE1hdGguYWJzKHQuYXJyYXlCbG9ja0luZGljZXNbbF0pOysrZyl5LnB1c2goWyJ0IixsLCJiIixnLCI9dCIsbCwiWyIsY1tsXStnLCJdIl0uam9pbigiIikpfWZvcihsPTA7bDx0LnNjYWxhckFyZ3MubGVuZ3RoOysrbCltLnB1c2goIlkiK2wpO2lmKHQuc2hhcGVBcmdzLmxlbmd0aD4wJiZ5LnB1c2goInNoYXBlPVNTLnNsaWNlKDApIiksdC5pbmRleEFyZ3MubGVuZ3RoPjApe3ZhciB4PW5ldyBBcnJheShyKTtmb3IobD0wO2w8cjsrK2wpeFtsXT0iMCI7eS5wdXNoKFsiaW5kZXg9WyIseC5qb2luKCIsIiksIl0iXS5qb2luKCIiKSl9Zm9yKGw9MDtsPHQub2Zmc2V0QXJncy5sZW5ndGg7KytsKXt2YXIgYj10Lm9mZnNldEFyZ3NbbF0sXz1bXTtmb3IoZz0wO2c8Yi5vZmZzZXQubGVuZ3RoOysrZykwIT09Yi5vZmZzZXRbZ10mJigxPT09Yi5vZmZzZXRbZ10/Xy5wdXNoKFsidCIsYi5hcnJheSwicCIsZ10uam9pbigiIikpOl8ucHVzaChbYi5vZmZzZXRbZ10sIip0IixiLmFycmF5LCJwIixnXS5qb2luKCIiKSkpOzA9PT1fLmxlbmd0aD95LnB1c2goInEiK2wrIj0wIik6eS5wdXNoKFsicSIsbCwiPSIsXy5qb2luKCIrIildLmpvaW4oIiIpKX12YXIgdz1uKFtdLmNvbmNhdCh0LnByZS50aGlzVmFycykuY29uY2F0KHQuYm9keS50aGlzVmFycykuY29uY2F0KHQucG9zdC50aGlzVmFycykpO2ZvcigoeT15LmNvbmNhdCh3KSkubGVuZ3RoPjAmJnYucHVzaCgidmFyICIreS5qb2luKCIsIikpLGw9MDtsPHQuYXJyYXlBcmdzLmxlbmd0aDsrK2wpdi5wdXNoKCJwIitsKyJ8PTAiKTt0LnByZS5ib2R5Lmxlbmd0aD4zJiZ2LnB1c2goYSh0LnByZSx0LHMpKTt2YXIgaz1hKHQuYm9keSx0LHMpLE09ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj10WzBdLmxlbmd0aDtlPHI7KXtmb3IodmFyIG49MTtuPHQubGVuZ3RoOysrbilpZih0W25dW2VdIT09dFswXVtlXSlyZXR1cm4gZTsrK2V9cmV0dXJuIGV9KHApO008cj92LnB1c2goZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBhPWUubGVuZ3RoLG89ci5hcnJheUFyZ3MubGVuZ3RoLHM9ci5ibG9ja1NpemUsbD1yLmluZGV4QXJncy5sZW5ndGg+MCxjPVtdLHU9MDt1PG87Kyt1KWMucHVzaChbInZhciBvZmZzZXQiLHUsIj1wIix1XS5qb2luKCIiKSk7Zm9yKHU9dDt1PGE7Kyt1KWMucHVzaChbImZvcih2YXIgaiIrdSsiPVNTWyIsZVt1XSwiXXwwO2oiLHUsIj4wOyl7Il0uam9pbigiIikpLGMucHVzaChbImlmKGoiLHUsIjwiLHMsIil7Il0uam9pbigiIikpLGMucHVzaChbInMiLGVbdV0sIj1qIix1XS5qb2luKCIiKSksYy5wdXNoKFsiaiIsdSwiPTAiXS5qb2luKCIiKSksYy5wdXNoKFsifWVsc2V7cyIsZVt1XSwiPSIsc10uam9pbigiIikpLGMucHVzaChbImoiLHUsIi09IixzLCJ9Il0uam9pbigiIikpLGwmJmMucHVzaChbImluZGV4WyIsZVt1XSwiXT1qIix1XS5qb2luKCIiKSk7Zm9yKHU9MDt1PG87Kyt1KXtmb3IodmFyIGg9WyJvZmZzZXQiK3VdLGY9dDtmPGE7KytmKWgucHVzaChbImoiLGYsIip0Iix1LCJwIixlW2ZdXS5qb2luKCIiKSk7Yy5wdXNoKFsicCIsdSwiPSgiLGguam9pbigiKyIpLCIpIl0uam9pbigiIikpfWZvcihjLnB1c2goaShlLHIsbikpLHU9dDt1PGE7Kyt1KWMucHVzaCgifSIpO3JldHVybiBjLmpvaW4oIlxuIil9KE0scFswXSx0LGspKTp2LnB1c2goaShwWzBdLHQsaykpLHQucG9zdC5ib2R5Lmxlbmd0aD4zJiZ2LnB1c2goYSh0LnBvc3QsdCxzKSksdC5kZWJ1ZyYmY29uc29sZS5sb2coIi0tLS0tR2VuZXJhdGVkIGN3aXNlIHJvdXRpbmUgZm9yICIsZSwiOlxuIit2LmpvaW4oIlxuIikrIlxuLS0tLS0tLS0tLSIpO3ZhciBBPVt0LmZ1bmNOYW1lfHwidW5uYW1lZCIsIl9jd2lzZV9sb29wXyIsb1swXS5qb2luKCJzIiksIm0iLE0sZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0Lmxlbmd0aCkscj0hMCxuPTA7bjx0Lmxlbmd0aDsrK24pe3ZhciBpPXRbbl0sYT1pLm1hdGNoKC9cZCsvKTthPWE/YVswXToiIiwwPT09aS5jaGFyQXQoMCk/ZVtuXT0idSIraS5jaGFyQXQoMSkrYTplW25dPWkuY2hhckF0KDApK2Esbj4wJiYocj1yJiZlW25dPT09ZVtuLTFdKX1yZXR1cm4gcj9lWzBdOmUuam9pbigiIil9KHMpXS5qb2luKCIiKTtyZXR1cm4gbmV3IEZ1bmN0aW9uKFsiZnVuY3Rpb24gIixBLCIoIixtLmpvaW4oIiwiKSwiKXsiLHYuam9pbigiXG4iKSwifSByZXR1cm4gIixBXS5qb2luKCIiKSkoKX19LHt1bmlxOjUwOX1dLDEzNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2NvbXBpbGUuanMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9WyIndXNlIHN0cmljdCciLCJ2YXIgQ0FDSEVEPXt9Il0scj1bXSxpPXQuZnVuY05hbWUrIl9jd2lzZV90aHVuayI7ZS5wdXNoKFsicmV0dXJuIGZ1bmN0aW9uICIsaSwiKCIsdC5zaGltQXJncy5qb2luKCIsIiksIil7Il0uam9pbigiIikpO2Zvcih2YXIgYT1bXSxvPVtdLHM9W1siYXJyYXkiLHQuYXJyYXlBcmdzWzBdLCIuc2hhcGUuc2xpY2UoIixNYXRoLm1heCgwLHQuYXJyYXlCbG9ja0luZGljZXNbMF0pLHQuYXJyYXlCbG9ja0luZGljZXNbMF08MD8iLCIrdC5hcnJheUJsb2NrSW5kaWNlc1swXSsiKSI6IikiXS5qb2luKCIiKV0sbD1bXSxjPVtdLHU9MDt1PHQuYXJyYXlBcmdzLmxlbmd0aDsrK3Upe3ZhciBoPXQuYXJyYXlBcmdzW3VdO3IucHVzaChbInQiLGgsIj1hcnJheSIsaCwiLmR0eXBlLCIsInIiLGgsIj1hcnJheSIsaCwiLm9yZGVyIl0uam9pbigiIikpLGEucHVzaCgidCIraCksYS5wdXNoKCJyIitoKSxvLnB1c2goInQiK2gpLG8ucHVzaCgiciIraCsiLmpvaW4oKSIpLHMucHVzaCgiYXJyYXkiK2grIi5kYXRhIikscy5wdXNoKCJhcnJheSIraCsiLnN0cmlkZSIpLHMucHVzaCgiYXJyYXkiK2grIi5vZmZzZXR8MCIpLHU+MCYmKGwucHVzaCgiYXJyYXkiK3QuYXJyYXlBcmdzWzBdKyIuc2hhcGUubGVuZ3RoPT09YXJyYXkiK2grIi5zaGFwZS5sZW5ndGgrIisoTWF0aC5hYnModC5hcnJheUJsb2NrSW5kaWNlc1swXSktTWF0aC5hYnModC5hcnJheUJsb2NrSW5kaWNlc1t1XSkpKSxjLnB1c2goImFycmF5Iit0LmFycmF5QXJnc1swXSsiLnNoYXBlW3NoYXBlSW5kZXgrIitNYXRoLm1heCgwLHQuYXJyYXlCbG9ja0luZGljZXNbMF0pKyJdPT09YXJyYXkiK2grIi5zaGFwZVtzaGFwZUluZGV4KyIrTWF0aC5tYXgoMCx0LmFycmF5QmxvY2tJbmRpY2VzW3VdKSsiXSIpKX1mb3IodC5hcnJheUFyZ3MubGVuZ3RoPjEmJihlLnB1c2goImlmICghKCIrbC5qb2luKCIgJiYgIikrIikpIHRocm93IG5ldyBFcnJvcignY3dpc2U6IEFycmF5cyBkbyBub3QgYWxsIGhhdmUgdGhlIHNhbWUgZGltZW5zaW9uYWxpdHkhJykiKSxlLnB1c2goImZvcih2YXIgc2hhcGVJbmRleD1hcnJheSIrdC5hcnJheUFyZ3NbMF0rIi5zaGFwZS5sZW5ndGgtIitNYXRoLmFicyh0LmFycmF5QmxvY2tJbmRpY2VzWzBdKSsiOyBzaGFwZUluZGV4LS1ceDNlMDspIHsiKSxlLnB1c2goImlmICghKCIrYy5qb2luKCIgJiYgIikrIikpIHRocm93IG5ldyBFcnJvcignY3dpc2U6IEFycmF5cyBkbyBub3QgYWxsIGhhdmUgdGhlIHNhbWUgc2hhcGUhJykiKSxlLnB1c2goIn0iKSksdT0wO3U8dC5zY2FsYXJBcmdzLmxlbmd0aDsrK3Upcy5wdXNoKCJzY2FsYXIiK3Quc2NhbGFyQXJnc1t1XSk7cmV0dXJuIHIucHVzaChbInR5cGU9WyIsby5qb2luKCIsIiksIl0uam9pbigpIl0uam9pbigiIikpLHIucHVzaCgicHJvYz1DQUNIRURbdHlwZV0iKSxlLnB1c2goInZhciAiK3Iuam9pbigiLCIpKSxlLnB1c2goWyJpZighcHJvYyl7IiwiQ0FDSEVEW3R5cGVdPXByb2M9Y29tcGlsZShbIixhLmpvaW4oIiwiKSwiXSl9IiwicmV0dXJuIHByb2MoIixzLmpvaW4oIiwiKSwiKX0iXS5qb2luKCIiKSksdC5kZWJ1ZyYmY29uc29sZS5sb2coIi0tLS0tR2VuZXJhdGVkIHRodW5rOlxuIitlLmpvaW4oIlxuIikrIlxuLS0tLS0tLS0tLSIpLG5ldyBGdW5jdGlvbigiY29tcGlsZSIsZS5qb2luKCJcbiIpKShuLmJpbmQodm9pZCAwLHQpKX19LHsiLi9jb21waWxlLmpzIjoxMzR9XSwxMzY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9dCgiY3dpc2UtY29tcGlsZXIiKX0seyJjd2lzZS1jb21waWxlciI6MTMzfV0sMTM3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuLGk9dCgiZXM1LWV4dC9vYmplY3QvY29weSIpLGE9dCgiZXM1LWV4dC9vYmplY3Qvbm9ybWFsaXplLW9wdGlvbnMiKSxvPXQoImVzNS1leHQvb2JqZWN0L3ZhbGlkLWNhbGxhYmxlIikscz10KCJlczUtZXh0L29iamVjdC9tYXAiKSxsPXQoImVzNS1leHQvb2JqZWN0L3ZhbGlkLWNhbGxhYmxlIiksYz10KCJlczUtZXh0L29iamVjdC92YWxpZC12YWx1ZSIpLHU9RnVuY3Rpb24ucHJvdG90eXBlLmJpbmQsaD1PYmplY3QuZGVmaW5lUHJvcGVydHksZj1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O249ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGE9YyhlKSYmbChlLnZhbHVlKTtyZXR1cm4gZGVsZXRlKG49aShlKSkud3JpdGFibGUsZGVsZXRlIG4udmFsdWUsbi5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4hci5vdmVyd3JpdGVEZWZpbml0aW9uJiZmLmNhbGwodGhpcyx0KT9hOihlLnZhbHVlPXUuY2FsbChhLHIucmVzb2x2ZUNvbnRleHQ/ci5yZXNvbHZlQ29udGV4dCh0aGlzKTp0aGlzKSxoKHRoaXMsdCxlKSx0aGlzW3RdKX0sbn0sZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPWEoYXJndW1lbnRzWzFdKTtyZXR1cm4gbnVsbCE9ZS5yZXNvbHZlQ29udGV4dCYmbyhlLnJlc29sdmVDb250ZXh0KSxzKHQsZnVuY3Rpb24odCxyKXtyZXR1cm4gbihyLHQsZSl9KX19LHsiZXM1LWV4dC9vYmplY3QvY29weSI6MTczLCJlczUtZXh0L29iamVjdC9tYXAiOjE4MiwiZXM1LWV4dC9vYmplY3Qvbm9ybWFsaXplLW9wdGlvbnMiOjE4MywiZXM1LWV4dC9vYmplY3QvdmFsaWQtY2FsbGFibGUiOjE4NywiZXM1LWV4dC9vYmplY3QvdmFsaWQtdmFsdWUiOjE4OX1dLDEzODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJlczUtZXh0L29iamVjdC9hc3NpZ24iKSxpPXQoImVzNS1leHQvb2JqZWN0L25vcm1hbGl6ZS1vcHRpb25zIiksYT10KCJlczUtZXh0L29iamVjdC9pcy1jYWxsYWJsZSIpLG89dCgiZXM1LWV4dC9zdHJpbmcvIy9jb250YWlucyIpOyhlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixhLHMsbCxjO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDJ8fCJzdHJpbmciIT10eXBlb2YgdD8obD1lLGU9dCx0PW51bGwpOmw9YXJndW1lbnRzWzJdLG51bGw9PXQ/KHI9cz0hMCxhPSExKToocj1vLmNhbGwodCwiYyIpLGE9by5jYWxsKHQsImUiKSxzPW8uY2FsbCh0LCJ3IikpLGM9e3ZhbHVlOmUsY29uZmlndXJhYmxlOnIsZW51bWVyYWJsZTphLHdyaXRhYmxlOnN9LGw/bihpKGwpLGMpOmN9KS5ncz1mdW5jdGlvbih0LGUscil7dmFyIHMsbCxjLHU7cmV0dXJuInN0cmluZyIhPXR5cGVvZiB0PyhjPXIscj1lLGU9dCx0PW51bGwpOmM9YXJndW1lbnRzWzNdLG51bGw9PWU/ZT12b2lkIDA6YShlKT9udWxsPT1yP3I9dm9pZCAwOmEocil8fChjPXIscj12b2lkIDApOihjPWUsZT1yPXZvaWQgMCksbnVsbD09dD8ocz0hMCxsPSExKToocz1vLmNhbGwodCwiYyIpLGw9by5jYWxsKHQsImUiKSksdT17Z2V0OmUsc2V0OnIsY29uZmlndXJhYmxlOnMsZW51bWVyYWJsZTpsfSxjP24oaShjKSx1KTp1fX0seyJlczUtZXh0L29iamVjdC9hc3NpZ24iOjE3MCwiZXM1LWV4dC9vYmplY3QvaXMtY2FsbGFibGUiOjE3NiwiZXM1LWV4dC9vYmplY3Qvbm9ybWFsaXplLW9wdGlvbnMiOjE4MywiZXM1LWV4dC9zdHJpbmcvIy9jb250YWlucyI6MTkwfV0sMTM5OltmdW5jdGlvbih0LGUscil7dmFyIG47bj10aGlzLGZ1bmN0aW9uKHQpeyJ1c2Ugc3RyaWN0Ijt2YXIgZT1mdW5jdGlvbih0LGUpe3JldHVybiB0PGU/LTE6dD5lPzE6dD49ZT8wOk5hTn0scj1mdW5jdGlvbih0KXt2YXIgcjtyZXR1cm4gMT09PXQubGVuZ3RoJiYocj10LHQ9ZnVuY3Rpb24odCxuKXtyZXR1cm4gZShyKHQpLG4pfSkse2xlZnQ6ZnVuY3Rpb24oZSxyLG4saSl7Zm9yKG51bGw9PW4mJihuPTApLG51bGw9PWkmJihpPWUubGVuZ3RoKTtuPGk7KXt2YXIgYT1uK2k+Pj4xO3QoZVthXSxyKTwwP249YSsxOmk9YX1yZXR1cm4gbn0scmlnaHQ6ZnVuY3Rpb24oZSxyLG4saSl7Zm9yKG51bGw9PW4mJihuPTApLG51bGw9PWkmJihpPWUubGVuZ3RoKTtuPGk7KXt2YXIgYT1uK2k+Pj4xO3QoZVthXSxyKT4wP2k9YTpuPWErMX1yZXR1cm4gbn19fTt2YXIgbj1yKGUpLGk9bi5yaWdodCxhPW4ubGVmdDtmdW5jdGlvbiBvKHQsZSl7cmV0dXJuW3QsZV19dmFyIHM9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PT10P05hTjordH0sbD1mdW5jdGlvbih0LGUpe3ZhciByLG4saT10Lmxlbmd0aCxhPTAsbz0tMSxsPTAsYz0wO2lmKG51bGw9PWUpZm9yKDsrK288aTspaXNOYU4ocj1zKHRbb10pKXx8KGMrPShuPXItbCkqKHItKGwrPW4vKythKSkpO2Vsc2UgZm9yKDsrK288aTspaXNOYU4ocj1zKGUodFtvXSxvLHQpKSl8fChjKz0obj1yLWwpKihyLShsKz1uLysrYSkpKTtpZihhPjEpcmV0dXJuIGMvKGEtMSl9LGM9ZnVuY3Rpb24odCxlKXt2YXIgcj1sKHQsZSk7cmV0dXJuIHI/TWF0aC5zcXJ0KHIpOnJ9LHU9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGksYT10Lmxlbmd0aCxvPS0xO2lmKG51bGw9PWUpe2Zvcig7KytvPGE7KWlmKG51bGwhPShyPXRbb10pJiZyPj1yKWZvcihuPWk9cjsrK288YTspbnVsbCE9KHI9dFtvXSkmJihuPnImJihuPXIpLGk8ciYmKGk9cikpfWVsc2UgZm9yKDsrK288YTspaWYobnVsbCE9KHI9ZSh0W29dLG8sdCkpJiZyPj1yKWZvcihuPWk9cjsrK288YTspbnVsbCE9KHI9ZSh0W29dLG8sdCkpJiYobj5yJiYobj1yKSxpPHImJihpPXIpKTtyZXR1cm5bbixpXX0saD1BcnJheS5wcm90b3R5cGUsZj1oLnNsaWNlLHA9aC5tYXAsZD1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19LGc9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LG09ZnVuY3Rpb24odCxlLHIpe3Q9K3QsZT0rZSxyPShpPWFyZ3VtZW50cy5sZW5ndGgpPDI/KGU9dCx0PTAsMSk6aTwzPzE6K3I7Zm9yKHZhciBuPS0xLGk9MHxNYXRoLm1heCgwLE1hdGguY2VpbCgoZS10KS9yKSksYT1uZXcgQXJyYXkoaSk7KytuPGk7KWFbbl09dCtuKnI7cmV0dXJuIGF9LHY9TWF0aC5zcXJ0KDUwKSx5PU1hdGguc3FydCgxMCkseD1NYXRoLnNxcnQoMik7ZnVuY3Rpb24gYih0LGUscil7dmFyIG49KGUtdCkvTWF0aC5tYXgoMCxyKSxpPU1hdGguZmxvb3IoTWF0aC5sb2cobikvTWF0aC5MTjEwKSxhPW4vTWF0aC5wb3coMTAsaSk7cmV0dXJuIGk+PTA/KGE+PXY/MTA6YT49eT81OmE+PXg/MjoxKSpNYXRoLnBvdygxMCxpKTotTWF0aC5wb3coMTAsLWkpLyhhPj12PzEwOmE+PXk/NTphPj14PzI6MSl9ZnVuY3Rpb24gXyh0LGUscil7dmFyIG49TWF0aC5hYnMoZS10KS9NYXRoLm1heCgwLHIpLGk9TWF0aC5wb3coMTAsTWF0aC5mbG9vcihNYXRoLmxvZyhuKS9NYXRoLkxOMTApKSxhPW4vaTtyZXR1cm4gYT49dj9pKj0xMDphPj15P2kqPTU6YT49eCYmKGkqPTIpLGU8dD8taTppfXZhciB3PWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmNlaWwoTWF0aC5sb2codC5sZW5ndGgpL01hdGguTE4yKSsxfSxrPWZ1bmN0aW9uKHQsZSxyKXtpZihudWxsPT1yJiYocj1zKSxuPXQubGVuZ3RoKXtpZigoZT0rZSk8PTB8fG48MilyZXR1cm4rcih0WzBdLDAsdCk7aWYoZT49MSlyZXR1cm4rcih0W24tMV0sbi0xLHQpO3ZhciBuLGk9KG4tMSkqZSxhPU1hdGguZmxvb3IoaSksbz0rcih0W2FdLGEsdCk7cmV0dXJuIG8rKCtyKHRbYSsxXSxhKzEsdCktbykqKGktYSl9fSxNPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPXQubGVuZ3RoLGE9LTE7aWYobnVsbD09ZSl7Zm9yKDsrK2E8aTspaWYobnVsbCE9KHI9dFthXSkmJnI+PXIpZm9yKG49cjsrK2E8aTspbnVsbCE9KHI9dFthXSkmJm4+ciYmKG49cil9ZWxzZSBmb3IoOysrYTxpOylpZihudWxsIT0ocj1lKHRbYV0sYSx0KSkmJnI+PXIpZm9yKG49cjsrK2E8aTspbnVsbCE9KHI9ZSh0W2FdLGEsdCkpJiZuPnImJihuPXIpO3JldHVybiBufSxBPWZ1bmN0aW9uKHQpe2lmKCEoaT10Lmxlbmd0aCkpcmV0dXJuW107Zm9yKHZhciBlPS0xLHI9TSh0LFQpLG49bmV3IEFycmF5KHIpOysrZTxyOylmb3IodmFyIGksYT0tMSxvPW5bZV09bmV3IEFycmF5KGkpOysrYTxpOylvW2FdPXRbYV1bZV07cmV0dXJuIG59O2Z1bmN0aW9uIFQodCl7cmV0dXJuIHQubGVuZ3RofXQuYmlzZWN0PWksdC5iaXNlY3RSaWdodD1pLHQuYmlzZWN0TGVmdD1hLHQuYXNjZW5kaW5nPWUsdC5iaXNlY3Rvcj1yLHQuY3Jvc3M9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYSxzLGw9dC5sZW5ndGgsYz1lLmxlbmd0aCx1PW5ldyBBcnJheShsKmMpO2ZvcihudWxsPT1yJiYocj1vKSxuPWE9MDtuPGw7KytuKWZvcihzPXRbbl0saT0wO2k8YzsrK2ksKythKXVbYV09cihzLGVbaV0pO3JldHVybiB1fSx0LmRlc2NlbmRpbmc9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59LHQuZGV2aWF0aW9uPWMsdC5leHRlbnQ9dSx0Lmhpc3RvZ3JhbT1mdW5jdGlvbigpe3ZhciB0PWcsZT11LHI9dztmdW5jdGlvbiBuKG4pe3ZhciBhLG8scz1uLmxlbmd0aCxsPW5ldyBBcnJheShzKTtmb3IoYT0wO2E8czsrK2EpbFthXT10KG5bYV0sYSxuKTt2YXIgYz1lKGwpLHU9Y1swXSxoPWNbMV0sZj1yKGwsdSxoKTtBcnJheS5pc0FycmF5KGYpfHwoZj1fKHUsaCxmKSxmPW0oTWF0aC5jZWlsKHUvZikqZixNYXRoLmZsb29yKGgvZikqZixmKSk7Zm9yKHZhciBwPWYubGVuZ3RoO2ZbMF08PXU7KWYuc2hpZnQoKSwtLXA7Zm9yKDtmW3AtMV0+aDspZi5wb3AoKSwtLXA7dmFyIGQsZz1uZXcgQXJyYXkocCsxKTtmb3IoYT0wO2E8PXA7KythKShkPWdbYV09W10pLngwPWE+MD9mW2EtMV06dSxkLngxPWE8cD9mW2FdOmg7Zm9yKGE9MDthPHM7KythKXU8PShvPWxbYV0pJiZvPD1oJiZnW2koZixvLDAscCldLnB1c2goblthXSk7cmV0dXJuIGd9cmV0dXJuIG4udmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpkKGUpLG4pOnR9LG4uZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6ZChbdFswXSx0WzFdXSksbik6ZX0sbi50aHJlc2hvbGRzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6QXJyYXkuaXNBcnJheSh0KT9kKGYuY2FsbCh0KSk6ZCh0KSxuKTpyfSxufSx0LnRocmVzaG9sZEZyZWVkbWFuRGlhY29uaXM9ZnVuY3Rpb24odCxyLG4pe3JldHVybiB0PXAuY2FsbCh0LHMpLnNvcnQoZSksTWF0aC5jZWlsKChuLXIpLygyKihrKHQsLjc1KS1rKHQsLjI1KSkqTWF0aC5wb3codC5sZW5ndGgsLTEvMykpKX0sdC50aHJlc2hvbGRTY290dD1mdW5jdGlvbih0LGUscil7cmV0dXJuIE1hdGguY2VpbCgoci1lKS8oMy41KmModCkqTWF0aC5wb3codC5sZW5ndGgsLTEvMykpKX0sdC50aHJlc2hvbGRTdHVyZ2VzPXcsdC5tYXg9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGk9dC5sZW5ndGgsYT0tMTtpZihudWxsPT1lKXtmb3IoOysrYTxpOylpZihudWxsIT0ocj10W2FdKSYmcj49cilmb3Iobj1yOysrYTxpOyludWxsIT0ocj10W2FdKSYmcj5uJiYobj1yKX1lbHNlIGZvcig7KythPGk7KWlmKG51bGwhPShyPWUodFthXSxhLHQpKSYmcj49cilmb3Iobj1yOysrYTxpOyludWxsIT0ocj1lKHRbYV0sYSx0KSkmJnI+biYmKG49cik7cmV0dXJuIG59LHQubWVhbj1mdW5jdGlvbih0LGUpe3ZhciByLG49dC5sZW5ndGgsaT1uLGE9LTEsbz0wO2lmKG51bGw9PWUpZm9yKDsrK2E8bjspaXNOYU4ocj1zKHRbYV0pKT8tLWk6bys9cjtlbHNlIGZvcig7KythPG47KWlzTmFOKHI9cyhlKHRbYV0sYSx0KSkpPy0taTpvKz1yO2lmKGkpcmV0dXJuIG8vaX0sdC5tZWRpYW49ZnVuY3Rpb24odCxyKXt2YXIgbixpPXQubGVuZ3RoLGE9LTEsbz1bXTtpZihudWxsPT1yKWZvcig7KythPGk7KWlzTmFOKG49cyh0W2FdKSl8fG8ucHVzaChuKTtlbHNlIGZvcig7KythPGk7KWlzTmFOKG49cyhyKHRbYV0sYSx0KSkpfHxvLnB1c2gobik7cmV0dXJuIGsoby5zb3J0KGUpLC41KX0sdC5tZXJnZT1mdW5jdGlvbih0KXtmb3IodmFyIGUscixuLGk9dC5sZW5ndGgsYT0tMSxvPTA7KythPGk7KW8rPXRbYV0ubGVuZ3RoO2ZvcihyPW5ldyBBcnJheShvKTstLWk+PTA7KWZvcihlPShuPXRbaV0pLmxlbmd0aDstLWU+PTA7KXJbLS1vXT1uW2VdO3JldHVybiByfSx0Lm1pbj1NLHQucGFpcnM9ZnVuY3Rpb24odCxlKXtudWxsPT1lJiYoZT1vKTtmb3IodmFyIHI9MCxuPXQubGVuZ3RoLTEsaT10WzBdLGE9bmV3IEFycmF5KG48MD8wOm4pO3I8bjspYVtyXT1lKGksaT10Wysrcl0pO3JldHVybiBhfSx0LnBlcm11dGU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9ZS5sZW5ndGgsbj1uZXcgQXJyYXkocik7ci0tOyluW3JdPXRbZVtyXV07cmV0dXJuIG59LHQucXVhbnRpbGU9ayx0LnJhbmdlPW0sdC5zY2FuPWZ1bmN0aW9uKHQscil7aWYobj10Lmxlbmd0aCl7dmFyIG4saSxhPTAsbz0wLHM9dFtvXTtmb3IobnVsbD09ciYmKHI9ZSk7KythPG47KShyKGk9dFthXSxzKTwwfHwwIT09cihzLHMpKSYmKHM9aSxvPWEpO3JldHVybiAwPT09cihzLHMpP286dm9pZCAwfX0sdC5zaHVmZmxlPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG4saSxhPShudWxsPT1yP3QubGVuZ3RoOnIpLShlPW51bGw9PWU/MDorZSk7YTspaT1NYXRoLnJhbmRvbSgpKmEtLXwwLG49dFthK2VdLHRbYStlXT10W2krZV0sdFtpK2VdPW47cmV0dXJuIHR9LHQuc3VtPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj10Lmxlbmd0aCxpPS0xLGE9MDtpZihudWxsPT1lKWZvcig7KytpPG47KShyPSt0W2ldKSYmKGErPXIpO2Vsc2UgZm9yKDsrK2k8bjspKHI9K2UodFtpXSxpLHQpKSYmKGErPXIpO3JldHVybiBhfSx0LnRpY2tzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGEsbyxzPS0xO2lmKHI9K3IsKHQ9K3QpPT0oZT0rZSkmJnI+MClyZXR1cm5bdF07aWYoKG49ZTx0KSYmKGk9dCx0PWUsZT1pKSwwPT09KG89Yih0LGUscikpfHwhaXNGaW5pdGUobykpcmV0dXJuW107aWYobz4wKWZvcih0PU1hdGguY2VpbCh0L28pLGU9TWF0aC5mbG9vcihlL28pLGE9bmV3IEFycmF5KGk9TWF0aC5jZWlsKGUtdCsxKSk7KytzPGk7KWFbc109KHQrcykqbztlbHNlIGZvcih0PU1hdGguZmxvb3IodCpvKSxlPU1hdGguY2VpbChlKm8pLGE9bmV3IEFycmF5KGk9TWF0aC5jZWlsKHQtZSsxKSk7KytzPGk7KWFbc109KHQtcykvbztyZXR1cm4gbiYmYS5yZXZlcnNlKCksYX0sdC50aWNrSW5jcmVtZW50PWIsdC50aWNrU3RlcD1fLHQudHJhbnNwb3NlPUEsdC52YXJpYW5jZT1sLHQuemlwPWZ1bmN0aW9uKCl7cmV0dXJuIEEoYXJndW1lbnRzKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSgib2JqZWN0Ij09dHlwZW9mIHImJiJ1bmRlZmluZWQiIT10eXBlb2YgZT9yOm4uZDM9bi5kM3x8e30pfSx7fV0sMTQwOltmdW5jdGlvbih0LGUscil7dmFyIG47bj10aGlzLGZ1bmN0aW9uKHQpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBlKCl7fWZ1bmN0aW9uIHIodCxyKXt2YXIgbj1uZXcgZTtpZih0IGluc3RhbmNlb2YgZSl0LmVhY2goZnVuY3Rpb24odCxlKXtuLnNldChlLHQpfSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KHQpKXt2YXIgaSxhPS0xLG89dC5sZW5ndGg7aWYobnVsbD09cilmb3IoOysrYTxvOyluLnNldChhLHRbYV0pO2Vsc2UgZm9yKDsrK2E8bzspbi5zZXQocihpPXRbYV0sYSx0KSxpKX1lbHNlIGlmKHQpZm9yKHZhciBzIGluIHQpbi5zZXQocyx0W3NdKTtyZXR1cm4gbn1lLnByb3RvdHlwZT1yLnByb3RvdHlwZT17Y29uc3RydWN0b3I6ZSxoYXM6ZnVuY3Rpb24odCl7cmV0dXJuIiQiK3QgaW4gdGhpc30sZ2V0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzWyIkIit0XX0sc2V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXNbIiQiK3RdPWUsdGhpc30scmVtb3ZlOmZ1bmN0aW9uKHQpe3ZhciBlPSIkIit0O3JldHVybiBlIGluIHRoaXMmJmRlbGV0ZSB0aGlzW2VdfSxjbGVhcjpmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzKSIkIj09PXRbMF0mJmRlbGV0ZSB0aGlzW3RdfSxrZXlzOmZ1bmN0aW9uKCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIHRoaXMpIiQiPT09ZVswXSYmdC5wdXNoKGUuc2xpY2UoMSkpO3JldHVybiB0fSx2YWx1ZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gdGhpcykiJCI9PT1lWzBdJiZ0LnB1c2godGhpc1tlXSk7cmV0dXJuIHR9LGVudHJpZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gdGhpcykiJCI9PT1lWzBdJiZ0LnB1c2goe2tleTplLnNsaWNlKDEpLHZhbHVlOnRoaXNbZV19KTtyZXR1cm4gdH0sc2l6ZTpmdW5jdGlvbigpe3ZhciB0PTA7Zm9yKHZhciBlIGluIHRoaXMpIiQiPT09ZVswXSYmKyt0O3JldHVybiB0fSxlbXB0eTpmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzKWlmKCIkIj09PXRbMF0pcmV0dXJuITE7cmV0dXJuITB9LGVhY2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMpIiQiPT09ZVswXSYmdCh0aGlzW2VdLGUuc2xpY2UoMSksdGhpcyl9fTtmdW5jdGlvbiBuKCl7cmV0dXJue319ZnVuY3Rpb24gaSh0LGUscil7dFtlXT1yfWZ1bmN0aW9uIGEoKXtyZXR1cm4gcigpfWZ1bmN0aW9uIG8odCxlLHIpe3Quc2V0KGUscil9ZnVuY3Rpb24gcygpe312YXIgbD1yLnByb3RvdHlwZTtmdW5jdGlvbiBjKHQsZSl7dmFyIHI9bmV3IHM7aWYodCBpbnN0YW5jZW9mIHMpdC5lYWNoKGZ1bmN0aW9uKHQpe3IuYWRkKHQpfSk7ZWxzZSBpZih0KXt2YXIgbj0tMSxpPXQubGVuZ3RoO2lmKG51bGw9PWUpZm9yKDsrK248aTspci5hZGQodFtuXSk7ZWxzZSBmb3IoOysrbjxpOylyLmFkZChlKHRbbl0sbix0KSl9cmV0dXJuIHJ9cy5wcm90b3R5cGU9Yy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnMsaGFzOmwuaGFzLGFkZDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpc1siJCIrKHQrPSIiKV09dCx0aGlzfSxyZW1vdmU6bC5yZW1vdmUsY2xlYXI6bC5jbGVhcix2YWx1ZXM6bC5rZXlzLHNpemU6bC5zaXplLGVtcHR5OmwuZW1wdHksZWFjaDpsLmVhY2h9O3QubmVzdD1mdW5jdGlvbigpe3ZhciB0LGUscyxsPVtdLGM9W107ZnVuY3Rpb24gdShuLGksYSxvKXtpZihpPj1sLmxlbmd0aClyZXR1cm4gbnVsbCE9dCYmbi5zb3J0KHQpLG51bGwhPWU/ZShuKTpuO2Zvcih2YXIgcyxjLGgsZj0tMSxwPW4ubGVuZ3RoLGQ9bFtpKytdLGc9cigpLG09YSgpOysrZjxwOykoaD1nLmdldChzPWQoYz1uW2ZdKSsiIikpP2gucHVzaChjKTpnLnNldChzLFtjXSk7cmV0dXJuIGcuZWFjaChmdW5jdGlvbih0LGUpe28obSxlLHUodCxpLGEsbykpfSksbX1yZXR1cm4gcz17b2JqZWN0OmZ1bmN0aW9uKHQpe3JldHVybiB1KHQsMCxuLGkpfSxtYXA6ZnVuY3Rpb24odCl7cmV0dXJuIHUodCwwLGEsbyl9LGVudHJpZXM6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uIHQocixuKXtpZigrK24+bC5sZW5ndGgpcmV0dXJuIHI7dmFyIGksYT1jW24tMV07cmV0dXJuIG51bGwhPWUmJm4+PWwubGVuZ3RoP2k9ci5lbnRyaWVzKCk6KGk9W10sci5lYWNoKGZ1bmN0aW9uKGUscil7aS5wdXNoKHtrZXk6cix2YWx1ZXM6dChlLG4pfSl9KSksbnVsbCE9YT9pLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gYSh0LmtleSxlLmtleSl9KTppfSh1KHQsMCxhLG8pLDApfSxrZXk6ZnVuY3Rpb24odCl7cmV0dXJuIGwucHVzaCh0KSxzfSxzb3J0S2V5czpmdW5jdGlvbih0KXtyZXR1cm4gY1tsLmxlbmd0aC0xXT10LHN9LHNvcnRWYWx1ZXM6ZnVuY3Rpb24oZSl7cmV0dXJuIHQ9ZSxzfSxyb2xsdXA6ZnVuY3Rpb24odCl7cmV0dXJuIGU9dCxzfX19LHQuc2V0PWMsdC5tYXA9cix0LmtleXM9ZnVuY3Rpb24odCl7dmFyIGU9W107Zm9yKHZhciByIGluIHQpZS5wdXNoKHIpO3JldHVybiBlfSx0LnZhbHVlcz1mdW5jdGlvbih0KXt2YXIgZT1bXTtmb3IodmFyIHIgaW4gdCllLnB1c2godFtyXSk7cmV0dXJuIGV9LHQuZW50cmllcz1mdW5jdGlvbih0KXt2YXIgZT1bXTtmb3IodmFyIHIgaW4gdCllLnB1c2goe2tleTpyLHZhbHVlOnRbcl19KTtyZXR1cm4gZX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSgib2JqZWN0Ij09dHlwZW9mIHImJiJ1bmRlZmluZWQiIT10eXBlb2YgZT9yOm4uZDM9bi5kM3x8e30pfSx7fV0sMTQxOltmdW5jdGlvbih0LGUscil7dmFyIG47bj10aGlzLGZ1bmN0aW9uKHQpeyJ1c2Ugc3RyaWN0Ijt2YXIgZT1mdW5jdGlvbih0LGUscil7dC5wcm90b3R5cGU9ZS5wcm90b3R5cGU9cixyLmNvbnN0cnVjdG9yPXR9O2Z1bmN0aW9uIHIodCxlKXt2YXIgcj1PYmplY3QuY3JlYXRlKHQucHJvdG90eXBlKTtmb3IodmFyIG4gaW4gZSlyW25dPWVbbl07cmV0dXJuIHJ9ZnVuY3Rpb24gbigpe312YXIgaT0iXFxzKihbKy1dP1xcZCspXFxzKiIsYT0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPylcXHMqIixvPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KSVcXHMqIixzPS9eIyhbMC05YS1mXXszfSkkLyxsPS9eIyhbMC05YS1mXXs2fSkkLyxjPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tpLGksaV0rIlxcKSQiKSx1PW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tvLG8sb10rIlxcKSQiKSxoPW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbaSxpLGksYV0rIlxcKSQiKSxmPW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbbyxvLG8sYV0rIlxcKSQiKSxwPW5ldyBSZWdFeHAoIl5oc2xcXCgiK1thLG8sb10rIlxcKSQiKSxkPW5ldyBSZWdFeHAoIl5oc2xhXFwoIitbYSxvLG8sYV0rIlxcKSQiKSxnPXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9O2Z1bmN0aW9uIG0odCl7dmFyIGU7cmV0dXJuIHQ9KHQrIiIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLChlPXMuZXhlYyh0KSk/bmV3IF8oKGU9cGFyc2VJbnQoZVsxXSwxNikpPj44JjE1fGU+PjQmMjQwLGU+PjQmMTV8MjQwJmUsKDE1JmUpPDw0fDE1JmUsMSk6KGU9bC5leGVjKHQpKT92KHBhcnNlSW50KGVbMV0sMTYpKTooZT1jLmV4ZWModCkpP25ldyBfKGVbMV0sZVsyXSxlWzNdLDEpOihlPXUuZXhlYyh0KSk/bmV3IF8oMjU1KmVbMV0vMTAwLDI1NSplWzJdLzEwMCwyNTUqZVszXS8xMDAsMSk6KGU9aC5leGVjKHQpKT95KGVbMV0sZVsyXSxlWzNdLGVbNF0pOihlPWYuZXhlYyh0KSk/eSgyNTUqZVsxXS8xMDAsMjU1KmVbMl0vMTAwLDI1NSplWzNdLzEwMCxlWzRdKTooZT1wLmV4ZWModCkpP3coZVsxXSxlWzJdLzEwMCxlWzNdLzEwMCwxKTooZT1kLmV4ZWModCkpP3coZVsxXSxlWzJdLzEwMCxlWzNdLzEwMCxlWzRdKTpnLmhhc093blByb3BlcnR5KHQpP3YoZ1t0XSk6InRyYW5zcGFyZW50Ij09PXQ/bmV3IF8oTmFOLE5hTixOYU4sMCk6bnVsbH1mdW5jdGlvbiB2KHQpe3JldHVybiBuZXcgXyh0Pj4xNiYyNTUsdD4+OCYyNTUsMjU1JnQsMSl9ZnVuY3Rpb24geSh0LGUscixuKXtyZXR1cm4gbjw9MCYmKHQ9ZT1yPU5hTiksbmV3IF8odCxlLHIsbil9ZnVuY3Rpb24geCh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIG58fCh0PW0odCkpLHQ/bmV3IF8oKHQ9dC5yZ2IoKSkucix0LmcsdC5iLHQub3BhY2l0eSk6bmV3IF99ZnVuY3Rpb24gYih0LGUscixuKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/eCh0KTpuZXcgXyh0LGUscixudWxsPT1uPzE6bil9ZnVuY3Rpb24gXyh0LGUscixuKXt0aGlzLnI9K3QsdGhpcy5nPStlLHRoaXMuYj0rcix0aGlzLm9wYWNpdHk9K259ZnVuY3Rpb24gdyh0LGUscixuKXtyZXR1cm4gbjw9MD90PWU9cj1OYU46cjw9MHx8cj49MT90PWU9TmFOOmU8PTAmJih0PU5hTiksbmV3IE0odCxlLHIsbil9ZnVuY3Rpb24gayh0LGUscixpKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/ZnVuY3Rpb24odCl7aWYodCBpbnN0YW5jZW9mIE0pcmV0dXJuIG5ldyBNKHQuaCx0LnMsdC5sLHQub3BhY2l0eSk7aWYodCBpbnN0YW5jZW9mIG58fCh0PW0odCkpLCF0KXJldHVybiBuZXcgTTtpZih0IGluc3RhbmNlb2YgTSlyZXR1cm4gdDt2YXIgZT0odD10LnJnYigpKS5yLzI1NSxyPXQuZy8yNTUsaT10LmIvMjU1LGE9TWF0aC5taW4oZSxyLGkpLG89TWF0aC5tYXgoZSxyLGkpLHM9TmFOLGw9by1hLGM9KG8rYSkvMjtyZXR1cm4gbD8ocz1lPT09bz8oci1pKS9sKzYqKHI8aSk6cj09PW8/KGktZSkvbCsyOihlLXIpL2wrNCxsLz1jPC41P28rYToyLW8tYSxzKj02MCk6bD1jPjAmJmM8MT8wOnMsbmV3IE0ocyxsLGMsdC5vcGFjaXR5KX0odCk6bmV3IE0odCxlLHIsbnVsbD09aT8xOmkpfWZ1bmN0aW9uIE0odCxlLHIsbil7dGhpcy5oPSt0LHRoaXMucz0rZSx0aGlzLmw9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIEEodCxlLHIpe3JldHVybiAyNTUqKHQ8NjA/ZSsoci1lKSp0LzYwOnQ8MTgwP3I6dDwyNDA/ZSsoci1lKSooMjQwLXQpLzYwOmUpfWUobixtLHtkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpLmRpc3BsYXlhYmxlKCl9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkrIiJ9fSksZShfLGIscihuLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10PzEvLjc6TWF0aC5wb3coMS8uNyx0KSxuZXcgXyh0aGlzLnIqdCx0aGlzLmcqdCx0aGlzLmIqdCx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD8uNzpNYXRoLnBvdyguNyx0KSxuZXcgXyh0aGlzLnIqdCx0aGlzLmcqdCx0aGlzLmIqdCx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gMDw9dGhpcy5yJiZ0aGlzLnI8PTI1NSYmMDw9dGhpcy5nJiZ0aGlzLmc8PTI1NSYmMDw9dGhpcy5iJiZ0aGlzLmI8PTI1NSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcGFjaXR5O3JldHVybigxPT09KHQ9aXNOYU4odCk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsdCkpKT8icmdiKCI6InJnYmEoIikrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLnIpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuZyl8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5iKXx8MCkpKygxPT09dD8iKSI6IiwgIit0KyIpIil9fSkpLGUoTSxrLHIobix7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD8xLy43Ok1hdGgucG93KDEvLjcsdCksbmV3IE0odGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD8uNzpNYXRoLnBvdyguNyx0KSxuZXcgTSh0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciB0PXRoaXMuaCUzNjArMzYwKih0aGlzLmg8MCksZT1pc05hTih0KXx8aXNOYU4odGhpcy5zKT8wOnRoaXMucyxyPXRoaXMubCxuPXIrKHI8LjU/cjoxLXIpKmUsaT0yKnItbjtyZXR1cm4gbmV3IF8oQSh0Pj0yNDA/dC0yNDA6dCsxMjAsaSxuKSxBKHQsaSxuKSxBKHQ8MTIwP3QrMjQwOnQtMTIwLGksbiksdGhpcy5vcGFjaXR5KX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4oMDw9dGhpcy5zJiZ0aGlzLnM8PTF8fGlzTmFOKHRoaXMucykpJiYwPD10aGlzLmwmJnRoaXMubDw9MSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9fSkpO3ZhciBUPU1hdGguUEkvMTgwLFM9MTgwL01hdGguUEksRT0uOTUwNDcsQz0xLEw9MS4wODg4Myx6PTQvMjksUD02LzI5LEk9MypQKlAsTz1QKlAqUDtmdW5jdGlvbiBEKHQpe2lmKHQgaW5zdGFuY2VvZiBCKXJldHVybiBuZXcgQih0LmwsdC5hLHQuYix0Lm9wYWNpdHkpO2lmKHQgaW5zdGFuY2VvZiBxKXt2YXIgZT10LmgqVDtyZXR1cm4gbmV3IEIodC5sLE1hdGguY29zKGUpKnQuYyxNYXRoLnNpbihlKSp0LmMsdC5vcGFjaXR5KX10IGluc3RhbmNlb2YgX3x8KHQ9eCh0KSk7dmFyIHI9Vih0LnIpLG49Vih0LmcpLGk9Vih0LmIpLGE9RigoLjQxMjQ1NjQqcisuMzU3NTc2MSpuKy4xODA0Mzc1KmkpL0UpLG89RigoLjIxMjY3MjkqcisuNzE1MTUyMipuKy4wNzIxNzUqaSkvQyk7cmV0dXJuIG5ldyBCKDExNipvLTE2LDUwMCooYS1vKSwyMDAqKG8tRigoLjAxOTMzMzkqcisuMTE5MTkyKm4rLjk1MDMwNDEqaSkvTCkpLHQub3BhY2l0eSl9ZnVuY3Rpb24gUih0LGUscixuKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/RCh0KTpuZXcgQih0LGUscixudWxsPT1uPzE6bil9ZnVuY3Rpb24gQih0LGUscixuKXt0aGlzLmw9K3QsdGhpcy5hPStlLHRoaXMuYj0rcix0aGlzLm9wYWNpdHk9K259ZnVuY3Rpb24gRih0KXtyZXR1cm4gdD5PP01hdGgucG93KHQsMS8zKTp0L0kren1mdW5jdGlvbiBOKHQpe3JldHVybiB0PlA/dCp0KnQ6SSoodC16KX1mdW5jdGlvbiBqKHQpe3JldHVybiAyNTUqKHQ8PS4wMDMxMzA4PzEyLjkyKnQ6MS4wNTUqTWF0aC5wb3codCwxLzIuNCktLjA1NSl9ZnVuY3Rpb24gVih0KXtyZXR1cm4odC89MjU1KTw9LjA0MDQ1P3QvMTIuOTI6TWF0aC5wb3coKHQrLjA1NSkvMS4wNTUsMi40KX1mdW5jdGlvbiBVKHQsZSxyLG4pe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9mdW5jdGlvbih0KXtpZih0IGluc3RhbmNlb2YgcSlyZXR1cm4gbmV3IHEodC5oLHQuYyx0LmwsdC5vcGFjaXR5KTt0IGluc3RhbmNlb2YgQnx8KHQ9RCh0KSk7dmFyIGU9TWF0aC5hdGFuMih0LmIsdC5hKSpTO3JldHVybiBuZXcgcShlPDA/ZSszNjA6ZSxNYXRoLnNxcnQodC5hKnQuYSt0LmIqdC5iKSx0LmwsdC5vcGFjaXR5KX0odCk6bmV3IHEodCxlLHIsbnVsbD09bj8xOm4pfWZ1bmN0aW9uIHEodCxlLHIsbil7dGhpcy5oPSt0LHRoaXMuYz0rZSx0aGlzLmw9K3IsdGhpcy5vcGFjaXR5PStufWUoQixSLHIobix7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBCKHRoaXMubCsxOCoobnVsbD09dD8xOnQpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgQih0aGlzLmwtMTgqKG51bGw9PXQ/MTp0KSx0aGlzLmEsdGhpcy5iLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciB0PSh0aGlzLmwrMTYpLzExNixlPWlzTmFOKHRoaXMuYSk/dDp0K3RoaXMuYS81MDAscj1pc05hTih0aGlzLmIpP3Q6dC10aGlzLmIvMjAwO3JldHVybiB0PUMqTih0KSxuZXcgXyhqKDMuMjQwNDU0MiooZT1FKk4oZSkpLTEuNTM3MTM4NSp0LS40OTg1MzE0KihyPUwqTihyKSkpLGooLS45NjkyNjYqZSsxLjg3NjAxMDgqdCsuMDQxNTU2KnIpLGooLjA1NTY0MzQqZS0uMjA0MDI1OSp0KzEuMDU3MjI1MipyKSx0aGlzLm9wYWNpdHkpfX0pKSxlKHEsVSxyKG4se2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgcSh0aGlzLmgsdGhpcy5jLHRoaXMubCsxOCoobnVsbD09dD8xOnQpLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IHEodGhpcy5oLHRoaXMuYyx0aGlzLmwtMTgqKG51bGw9PXQ/MTp0KSx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gRCh0aGlzKS5yZ2IoKX19KSk7dmFyIEg9LS4xNDg2MSxHPTEuNzgyNzcsVz0tLjI5MjI3LFk9LS45MDY0OSxYPTEuOTcyOTQsWj1YKlksJD1YKkcsSj1HKlctWSpIO2Z1bmN0aW9uIEsodCxlLHIsbil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP2Z1bmN0aW9uKHQpe2lmKHQgaW5zdGFuY2VvZiBRKXJldHVybiBuZXcgUSh0LmgsdC5zLHQubCx0Lm9wYWNpdHkpO3QgaW5zdGFuY2VvZiBffHwodD14KHQpKTt2YXIgZT10LnIvMjU1LHI9dC5nLzI1NSxuPXQuYi8yNTUsaT0oSipuK1oqZS0kKnIpLyhKK1otJCksYT1uLWksbz0oWCooci1pKS1XKmEpL1kscz1NYXRoLnNxcnQobypvK2EqYSkvKFgqaSooMS1pKSksbD1zP01hdGguYXRhbjIobyxhKSpTLTEyMDpOYU47cmV0dXJuIG5ldyBRKGw8MD9sKzM2MDpsLHMsaSx0Lm9wYWNpdHkpfSh0KTpuZXcgUSh0LGUscixudWxsPT1uPzE6bil9ZnVuY3Rpb24gUSh0LGUscixuKXt0aGlzLmg9K3QsdGhpcy5zPStlLHRoaXMubD0rcix0aGlzLm9wYWNpdHk9K259ZShRLEsscihuLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10PzEvLjc6TWF0aC5wb3coMS8uNyx0KSxuZXcgUSh0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10Py43Ok1hdGgucG93KC43LHQpLG5ldyBRKHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIHQ9aXNOYU4odGhpcy5oKT8wOih0aGlzLmgrMTIwKSpULGU9K3RoaXMubCxyPWlzTmFOKHRoaXMucyk/MDp0aGlzLnMqZSooMS1lKSxuPU1hdGguY29zKHQpLGk9TWF0aC5zaW4odCk7cmV0dXJuIG5ldyBfKDI1NSooZStyKihIKm4rRyppKSksMjU1KihlK3IqKFcqbitZKmkpKSwyNTUqKGUrciooWCpuKSksdGhpcy5vcGFjaXR5KX19KSksdC5jb2xvcj1tLHQucmdiPWIsdC5oc2w9ayx0LmxhYj1SLHQuaGNsPVUsdC5jdWJlaGVsaXg9SyxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KCJvYmplY3QiPT10eXBlb2YgciYmInVuZGVmaW5lZCIhPXR5cGVvZiBlP3I6bi5kMz1uLmQzfHx7fSl9LHt9XSwxNDI6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbjtuPXRoaXMsZnVuY3Rpb24odCl7InVzZSBzdHJpY3QiO3ZhciBlPXt2YWx1ZTpmdW5jdGlvbigpe319O2Z1bmN0aW9uIHIoKXtmb3IodmFyIHQsZT0wLHI9YXJndW1lbnRzLmxlbmd0aCxpPXt9O2U8cjsrK2Upe2lmKCEodD1hcmd1bWVudHNbZV0rIiIpfHx0IGluIGkpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrdCk7aVt0XT1bXX1yZXR1cm4gbmV3IG4oaSl9ZnVuY3Rpb24gbih0KXt0aGlzLl89dH1mdW5jdGlvbiBpKHQsZSl7Zm9yKHZhciByLG49MCxpPXQubGVuZ3RoO248aTsrK24paWYoKHI9dFtuXSkubmFtZT09PWUpcmV0dXJuIHIudmFsdWV9ZnVuY3Rpb24gYSh0LHIsbil7Zm9yKHZhciBpPTAsYT10Lmxlbmd0aDtpPGE7KytpKWlmKHRbaV0ubmFtZT09PXIpe3RbaV09ZSx0PXQuc2xpY2UoMCxpKS5jb25jYXQodC5zbGljZShpKzEpKTticmVha31yZXR1cm4gbnVsbCE9biYmdC5wdXNoKHtuYW1lOnIsdmFsdWU6bn0pLHR9bi5wcm90b3R5cGU9ci5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOm4sb246ZnVuY3Rpb24odCxlKXt2YXIgcixuLG89dGhpcy5fLHM9KG49bywodCsiIikudHJpbSgpLnNwbGl0KC9efFxzKy8pLm1hcChmdW5jdGlvbih0KXt2YXIgZT0iIixyPXQuaW5kZXhPZigiLiIpO2lmKHI+PTAmJihlPXQuc2xpY2UocisxKSx0PXQuc2xpY2UoMCxyKSksdCYmIW4uaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7cmV0dXJue3R5cGU6dCxuYW1lOmV9fSkpLGw9LTEsYz1zLmxlbmd0aDtpZighKGFyZ3VtZW50cy5sZW5ndGg8Mikpe2lmKG51bGwhPWUmJiJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjYWxsYmFjazogIitlKTtmb3IoOysrbDxjOylpZihyPSh0PXNbbF0pLnR5cGUpb1tyXT1hKG9bcl0sdC5uYW1lLGUpO2Vsc2UgaWYobnVsbD09ZSlmb3IociBpbiBvKW9bcl09YShvW3JdLHQubmFtZSxudWxsKTtyZXR1cm4gdGhpc31mb3IoOysrbDxjOylpZigocj0odD1zW2xdKS50eXBlKSYmKHI9aShvW3JdLHQubmFtZSkpKXJldHVybiByfSxjb3B5OmZ1bmN0aW9uKCl7dmFyIHQ9e30sZT10aGlzLl87Zm9yKHZhciByIGluIGUpdFtyXT1lW3JdLnNsaWNlKCk7cmV0dXJuIG5ldyBuKHQpfSxjYWxsOmZ1bmN0aW9uKHQsZSl7aWYoKHI9YXJndW1lbnRzLmxlbmd0aC0yKT4wKWZvcih2YXIgcixuLGk9bmV3IEFycmF5KHIpLGE9MDthPHI7KythKWlbYV09YXJndW1lbnRzW2ErMl07aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eSh0KSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIit0KTtmb3IoYT0wLHI9KG49dGhpcy5fW3RdKS5sZW5ndGg7YTxyOysrYSluW2FdLnZhbHVlLmFwcGx5KGUsaSl9LGFwcGx5OmZ1bmN0aW9uKHQsZSxyKXtpZighdGhpcy5fLmhhc093blByb3BlcnR5KHQpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3QpO2Zvcih2YXIgbj10aGlzLl9bdF0saT0wLGE9bi5sZW5ndGg7aTxhOysraSluW2ldLnZhbHVlLmFwcGx5KGUscil9fSx0LmRpc3BhdGNoPXIsT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSgib2JqZWN0Ij09dHlwZW9mIHImJiJ1bmRlZmluZWQiIT10eXBlb2YgZT9yOm4uZDM9bi5kM3x8e30pfSx7fV0sMTQzOltmdW5jdGlvbih0LGUscil7dmFyIG4saTtuPXRoaXMsaT1mdW5jdGlvbih0LGUscixuLGkpeyJ1c2Ugc3RyaWN0Ijt2YXIgYT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19LG89ZnVuY3Rpb24oKXtyZXR1cm4gMWUtNiooTWF0aC5yYW5kb20oKS0uNSl9O2Z1bmN0aW9uIHModCl7cmV0dXJuIHQueCt0LnZ4fWZ1bmN0aW9uIGwodCl7cmV0dXJuIHQueSt0LnZ5fWZ1bmN0aW9uIGModCl7cmV0dXJuIHQuaW5kZXh9ZnVuY3Rpb24gdSh0LGUpe3ZhciByPXQuZ2V0KGUpO2lmKCFyKXRocm93IG5ldyBFcnJvcigibWlzc2luZzogIitlKTtyZXR1cm4gcn1mdW5jdGlvbiBoKHQpe3JldHVybiB0Lnh9ZnVuY3Rpb24gZih0KXtyZXR1cm4gdC55fXZhciBwPTEwLGQ9TWF0aC5QSSooMy1NYXRoLnNxcnQoNSkpO3QuZm9yY2VDZW50ZXI9ZnVuY3Rpb24odCxlKXt2YXIgcjtmdW5jdGlvbiBuKCl7dmFyIG4saSxhPXIubGVuZ3RoLG89MCxzPTA7Zm9yKG49MDtuPGE7KytuKW8rPShpPXJbbl0pLngscys9aS55O2ZvcihvPW8vYS10LHM9cy9hLWUsbj0wO248YTsrK24pKGk9cltuXSkueC09byxpLnktPXN9cmV0dXJuIG51bGw9PXQmJih0PTApLG51bGw9PWUmJihlPTApLG4uaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXtyPXR9LG4ueD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0rZSxuKTp0fSxuLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K3Qsbik6ZX0sbn0sdC5mb3JjZUNvbGxpZGU9ZnVuY3Rpb24odCl7dmFyIHIsbixpPTEsYz0xO2Z1bmN0aW9uIHUoKXtmb3IodmFyIHQsYSx1LGYscCxkLGcsbT1yLmxlbmd0aCx2PTA7djxjOysrdilmb3IoYT1lLnF1YWR0cmVlKHIscyxsKS52aXNpdEFmdGVyKGgpLHQ9MDt0PG07Kyt0KXU9clt0XSxkPW5bdS5pbmRleF0sZz1kKmQsZj11LngrdS52eCxwPXUueSt1LnZ5LGEudmlzaXQoeSk7ZnVuY3Rpb24geSh0LGUscixuLGEpe3ZhciBzPXQuZGF0YSxsPXQucixjPWQrbDtpZighcylyZXR1cm4gZT5mK2N8fG48Zi1jfHxyPnArY3x8YTxwLWM7aWYocy5pbmRleD51LmluZGV4KXt2YXIgaD1mLXMueC1zLnZ4LG09cC1zLnktcy52eSx2PWgqaCttKm07djxjKmMmJigwPT09aCYmKHYrPShoPW8oKSkqaCksMD09PW0mJih2Kz0obT1vKCkpKm0pLHY9KGMtKHY9TWF0aC5zcXJ0KHYpKSkvdippLHUudngrPShoKj12KSooYz0obCo9bCkvKGcrbCkpLHUudnkrPShtKj12KSpjLHMudngtPWgqKGM9MS1jKSxzLnZ5LT1tKmMpfX19ZnVuY3Rpb24gaCh0KXtpZih0LmRhdGEpcmV0dXJuIHQucj1uW3QuZGF0YS5pbmRleF07Zm9yKHZhciBlPXQucj0wO2U8NDsrK2UpdFtlXSYmdFtlXS5yPnQuciYmKHQucj10W2VdLnIpfWZ1bmN0aW9uIGYoKXtpZihyKXt2YXIgZSxpLGE9ci5sZW5ndGg7Zm9yKG49bmV3IEFycmF5KGEpLGU9MDtlPGE7KytlKWk9cltlXSxuW2kuaW5kZXhdPSt0KGksZSxyKX19cmV0dXJuImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PWEobnVsbD09dD8xOit0KSksdS5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe3I9dCxmKCl9LHUuaXRlcmF0aW9ucz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0rdCx1KTpjfSx1LnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSt0LHUpOml9LHUucmFkaXVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6YSgrZSksZigpLHUpOnR9LHV9LHQuZm9yY2VMaW5rPWZ1bmN0aW9uKHQpe3ZhciBlLG4saSxzLGwsaD1jLGY9ZnVuY3Rpb24odCl7cmV0dXJuIDEvTWF0aC5taW4oc1t0LnNvdXJjZS5pbmRleF0sc1t0LnRhcmdldC5pbmRleF0pfSxwPWEoMzApLGQ9MTtmdW5jdGlvbiBnKHIpe2Zvcih2YXIgaT0wLGE9dC5sZW5ndGg7aTxkOysraSlmb3IodmFyIHMsYyx1LGgsZixwLGcsbT0wO208YTsrK20pYz0ocz10W21dKS5zb3VyY2UsaD0odT1zLnRhcmdldCkueCt1LnZ4LWMueC1jLnZ4fHxvKCksZj11LnkrdS52eS1jLnktYy52eXx8bygpLGgqPXA9KChwPU1hdGguc3FydChoKmgrZipmKSktblttXSkvcCpyKmVbbV0sZio9cCx1LnZ4LT1oKihnPWxbbV0pLHUudnktPWYqZyxjLnZ4Kz1oKihnPTEtZyksYy52eSs9ZipnfWZ1bmN0aW9uIG0oKXtpZihpKXt2YXIgYSxvLGM9aS5sZW5ndGgsZj10Lmxlbmd0aCxwPXIubWFwKGksaCk7Zm9yKGE9MCxzPW5ldyBBcnJheShjKTthPGY7KythKShvPXRbYV0pLmluZGV4PWEsIm9iamVjdCIhPXR5cGVvZiBvLnNvdXJjZSYmKG8uc291cmNlPXUocCxvLnNvdXJjZSkpLCJvYmplY3QiIT10eXBlb2Ygby50YXJnZXQmJihvLnRhcmdldD11KHAsby50YXJnZXQpKSxzW28uc291cmNlLmluZGV4XT0oc1tvLnNvdXJjZS5pbmRleF18fDApKzEsc1tvLnRhcmdldC5pbmRleF09KHNbby50YXJnZXQuaW5kZXhdfHwwKSsxO2ZvcihhPTAsbD1uZXcgQXJyYXkoZik7YTxmOysrYSlvPXRbYV0sbFthXT1zW28uc291cmNlLmluZGV4XS8oc1tvLnNvdXJjZS5pbmRleF0rc1tvLnRhcmdldC5pbmRleF0pO2U9bmV3IEFycmF5KGYpLHYoKSxuPW5ldyBBcnJheShmKSx5KCl9fWZ1bmN0aW9uIHYoKXtpZihpKWZvcih2YXIgcj0wLG49dC5sZW5ndGg7cjxuOysrcillW3JdPStmKHRbcl0scix0KX1mdW5jdGlvbiB5KCl7aWYoaSlmb3IodmFyIGU9MCxyPXQubGVuZ3RoO2U8cjsrK2UpbltlXT0rcCh0W2VdLGUsdCl9cmV0dXJuIG51bGw9PXQmJih0PVtdKSxnLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7aT10LG0oKX0sZy5saW5rcz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLG0oKSxnKTp0fSxnLmlkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPXQsZyk6aH0sZy5pdGVyYXRpb25zPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPSt0LGcpOmR9LGcuc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDphKCt0KSx2KCksZyk6Zn0sZy5kaXN0YW5jZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmEoK3QpLHkoKSxnKTpwfSxnfSx0LmZvcmNlTWFueUJvZHk9ZnVuY3Rpb24oKXt2YXIgdCxyLG4saSxzPWEoLTMwKSxsPTEsYz0xLzAsdT0uODE7ZnVuY3Rpb24gcChpKXt2YXIgYSxvPXQubGVuZ3RoLHM9ZS5xdWFkdHJlZSh0LGgsZikudmlzaXRBZnRlcihnKTtmb3Iobj1pLGE9MDthPG87KythKXI9dFthXSxzLnZpc2l0KG0pfWZ1bmN0aW9uIGQoKXtpZih0KXt2YXIgZSxyLG49dC5sZW5ndGg7Zm9yKGk9bmV3IEFycmF5KG4pLGU9MDtlPG47KytlKXI9dFtlXSxpW3IuaW5kZXhdPStzKHIsZSx0KX19ZnVuY3Rpb24gZyh0KXt2YXIgZSxyLG4sYSxvLHM9MCxsPTA7aWYodC5sZW5ndGgpe2ZvcihuPWE9bz0wO288NDsrK28pKGU9dFtvXSkmJihyPU1hdGguYWJzKGUudmFsdWUpKSYmKHMrPWUudmFsdWUsbCs9cixuKz1yKmUueCxhKz1yKmUueSk7dC54PW4vbCx0Lnk9YS9sfWVsc2V7KGU9dCkueD1lLmRhdGEueCxlLnk9ZS5kYXRhLnk7ZG97cys9aVtlLmRhdGEuaW5kZXhdfXdoaWxlKGU9ZS5uZXh0KX10LnZhbHVlPXN9ZnVuY3Rpb24gbSh0LGUsYSxzKXtpZighdC52YWx1ZSlyZXR1cm4hMDt2YXIgaD10Lngtci54LGY9dC55LXIueSxwPXMtZSxkPWgqaCtmKmY7aWYocCpwL3U8ZClyZXR1cm4gZDxjJiYoMD09PWgmJihkKz0oaD1vKCkpKmgpLDA9PT1mJiYoZCs9KGY9bygpKSpmKSxkPGwmJihkPU1hdGguc3FydChsKmQpKSxyLnZ4Kz1oKnQudmFsdWUqbi9kLHIudnkrPWYqdC52YWx1ZSpuL2QpLCEwO2lmKCEodC5sZW5ndGh8fGQ+PWMpKXsodC5kYXRhIT09cnx8dC5uZXh0KSYmKDA9PT1oJiYoZCs9KGg9bygpKSpoKSwwPT09ZiYmKGQrPShmPW8oKSkqZiksZDxsJiYoZD1NYXRoLnNxcnQobCpkKSkpO2Rve3QuZGF0YSE9PXImJihwPWlbdC5kYXRhLmluZGV4XSpuL2Qsci52eCs9aCpwLHIudnkrPWYqcCl9d2hpbGUodD10Lm5leHQpfX1yZXR1cm4gcC5pbml0aWFsaXplPWZ1bmN0aW9uKGUpe3Q9ZSxkKCl9LHAuc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDphKCt0KSxkKCkscCk6c30scC5kaXN0YW5jZU1pbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD10KnQscCk6TWF0aC5zcXJ0KGwpfSxwLmRpc3RhbmNlTWF4PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPXQqdCxwKTpNYXRoLnNxcnQoYyl9LHAudGhldGE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9dCp0LHApOk1hdGguc3FydCh1KX0scH0sdC5mb3JjZVJhZGlhbD1mdW5jdGlvbih0LGUscil7dmFyIG4saSxvLHM9YSguMSk7ZnVuY3Rpb24gbCh0KXtmb3IodmFyIGE9MCxzPW4ubGVuZ3RoO2E8czsrK2Epe3ZhciBsPW5bYV0sYz1sLngtZXx8MWUtNix1PWwueS1yfHwxZS02LGg9TWF0aC5zcXJ0KGMqYyt1KnUpLGY9KG9bYV0taCkqaVthXSp0L2g7bC52eCs9YypmLGwudnkrPXUqZn19ZnVuY3Rpb24gYygpe2lmKG4pe3ZhciBlLHI9bi5sZW5ndGg7Zm9yKGk9bmV3IEFycmF5KHIpLG89bmV3IEFycmF5KHIpLGU9MDtlPHI7KytlKW9bZV09K3QobltlXSxlLG4pLGlbZV09aXNOYU4ob1tlXSk/MDorcyhuW2VdLGUsbil9fXJldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1hKCt0KSksbnVsbD09ZSYmKGU9MCksbnVsbD09ciYmKHI9MCksbC5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe249dCxjKCl9LGwuc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDphKCt0KSxjKCksbCk6c30sbC5yYWRpdXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTphKCtlKSxjKCksbCk6dH0sbC54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSt0LGwpOmV9LGwueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rdCxsKTpyfSxsfSx0LmZvcmNlU2ltdWxhdGlvbj1mdW5jdGlvbih0KXt2YXIgZSxhPTEsbz0uMDAxLHM9MS1NYXRoLnBvdyhvLDEvMzAwKSxsPTAsYz0uNix1PXIubWFwKCksaD1pLnRpbWVyKGcpLGY9bi5kaXNwYXRjaCgidGljayIsImVuZCIpO2Z1bmN0aW9uIGcoKXttKCksZi5jYWxsKCJ0aWNrIixlKSxhPG8mJihoLnN0b3AoKSxmLmNhbGwoImVuZCIsZSkpfWZ1bmN0aW9uIG0oKXt2YXIgZSxyLG49dC5sZW5ndGg7Zm9yKGErPShsLWEpKnMsdS5lYWNoKGZ1bmN0aW9uKHQpe3QoYSl9KSxlPTA7ZTxuOysrZSludWxsPT0ocj10W2VdKS5meD9yLngrPXIudngqPWM6KHIueD1yLmZ4LHIudng9MCksbnVsbD09ci5meT9yLnkrPXIudnkqPWM6KHIueT1yLmZ5LHIudnk9MCl9ZnVuY3Rpb24gdigpe2Zvcih2YXIgZSxyPTAsbj10Lmxlbmd0aDtyPG47KytyKXtpZigoZT10W3JdKS5pbmRleD1yLGlzTmFOKGUueCl8fGlzTmFOKGUueSkpe3ZhciBpPXAqTWF0aC5zcXJ0KHIpLGE9cipkO2UueD1pKk1hdGguY29zKGEpLGUueT1pKk1hdGguc2luKGEpfShpc05hTihlLnZ4KXx8aXNOYU4oZS52eSkpJiYoZS52eD1lLnZ5PTApfX1mdW5jdGlvbiB5KGUpe3JldHVybiBlLmluaXRpYWxpemUmJmUuaW5pdGlhbGl6ZSh0KSxlfXJldHVybiBudWxsPT10JiYodD1bXSksdigpLGU9e3RpY2s6bSxyZXN0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIGgucmVzdGFydChnKSxlfSxzdG9wOmZ1bmN0aW9uKCl7cmV0dXJuIGguc3RvcCgpLGV9LG5vZGVzOmZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXIsdigpLHUuZWFjaCh5KSxlKTp0fSxhbHBoYTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0rdCxlKTphfSxhbHBoYU1pbjpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0rdCxlKTpvfSxhbHBoYURlY2F5OmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPSt0LGUpOitzfSxhbHBoYVRhcmdldDpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD0rdCxlKTpsfSx2ZWxvY2l0eURlY2F5OmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPTEtdCxlKToxLWN9LGZvcmNlOmZ1bmN0aW9uKHQscil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT8obnVsbD09cj91LnJlbW92ZSh0KTp1LnNldCh0LHkocikpLGUpOnUuZ2V0KHQpfSxmaW5kOmZ1bmN0aW9uKGUscixuKXt2YXIgaSxhLG8scyxsLGM9MCx1PXQubGVuZ3RoO2ZvcihudWxsPT1uP249MS8wOm4qPW4sYz0wO2M8dTsrK2MpKG89KGk9ZS0ocz10W2NdKS54KSppKyhhPXItcy55KSphKTxuJiYobD1zLG49byk7cmV0dXJuIGx9LG9uOmZ1bmN0aW9uKHQscil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT8oZi5vbih0LHIpLGUpOmYub24odCl9fX0sdC5mb3JjZVg9ZnVuY3Rpb24odCl7dmFyIGUscixuLGk9YSguMSk7ZnVuY3Rpb24gbyh0KXtmb3IodmFyIGksYT0wLG89ZS5sZW5ndGg7YTxvOysrYSkoaT1lW2FdKS52eCs9KG5bYV0taS54KSpyW2FdKnR9ZnVuY3Rpb24gcygpe2lmKGUpe3ZhciBhLG89ZS5sZW5ndGg7Zm9yKHI9bmV3IEFycmF5KG8pLG49bmV3IEFycmF5KG8pLGE9MDthPG87KythKXJbYV09aXNOYU4oblthXT0rdChlW2FdLGEsZSkpPzA6K2koZVthXSxhLGUpfX1yZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9YShudWxsPT10PzA6K3QpKSxvLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7ZT10LHMoKX0sby5zdHJlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmEoK3QpLHMoKSxvKTppfSxvLng9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTphKCtlKSxzKCksbyk6dH0sb30sdC5mb3JjZVk9ZnVuY3Rpb24odCl7dmFyIGUscixuLGk9YSguMSk7ZnVuY3Rpb24gbyh0KXtmb3IodmFyIGksYT0wLG89ZS5sZW5ndGg7YTxvOysrYSkoaT1lW2FdKS52eSs9KG5bYV0taS55KSpyW2FdKnR9ZnVuY3Rpb24gcygpe2lmKGUpe3ZhciBhLG89ZS5sZW5ndGg7Zm9yKHI9bmV3IEFycmF5KG8pLG49bmV3IEFycmF5KG8pLGE9MDthPG87KythKXJbYV09aXNOYU4oblthXT0rdChlW2FdLGEsZSkpPzA6K2koZVthXSxhLGUpfX1yZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9YShudWxsPT10PzA6K3QpKSxvLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7ZT10LHMoKX0sby5zdHJlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmEoK3QpLHMoKSxvKTppfSxvLnk9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTphKCtlKSxzKCksbyk6dH0sb30sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSwib2JqZWN0Ij09dHlwZW9mIHImJiJ1bmRlZmluZWQiIT10eXBlb2YgZT9pKHIsdCgiZDMtcXVhZHRyZWUiKSx0KCJkMy1jb2xsZWN0aW9uIiksdCgiZDMtZGlzcGF0Y2giKSx0KCJkMy10aW1lciIpKTppKG4uZDM9bi5kM3x8e30sbi5kMyxuLmQzLG4uZDMsbi5kMyl9LHsiZDMtY29sbGVjdGlvbiI6MTQwLCJkMy1kaXNwYXRjaCI6MTQyLCJkMy1xdWFkdHJlZSI6MTQ1LCJkMy10aW1lciI6MTQ2fV0sMTQ0OltmdW5jdGlvbih0LGUscil7dmFyIG4saTtuPXRoaXMsaT1mdW5jdGlvbih0LGUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKHQsZSxyLG4saSl7dmFyIGE9dCp0LG89YSp0O3JldHVybigoMS0zKnQrMyphLW8pKmUrKDQtNiphKzMqbykqcisoMSszKnQrMyphLTMqbykqbitvKmkpLzZ9dmFyIG49ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGgtMTtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGk9bjw9MD9uPTA6bj49MT8obj0xLGUtMSk6TWF0aC5mbG9vcihuKmUpLGE9dFtpXSxvPXRbaSsxXSxzPWk+MD90W2ktMV06MiphLW8sbD1pPGUtMT90W2krMl06MipvLWE7cmV0dXJuIHIoKG4taS9lKSplLHMsYSxvLGwpfX0saT1mdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGk9TWF0aC5mbG9vcigoKG4lPTEpPDA/KytuOm4pKmUpLGE9dFsoaStlLTEpJWVdLG89dFtpJWVdLHM9dFsoaSsxKSVlXSxsPXRbKGkrMiklZV07cmV0dXJuIHIoKG4taS9lKSplLGEsbyxzLGwpfX0sYT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19O2Z1bmN0aW9uIG8odCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIHQrciplfX1mdW5jdGlvbiBzKHQsZSl7dmFyIHI9ZS10O3JldHVybiByP28odCxyPjE4MHx8cjwtMTgwP3ItMzYwKk1hdGgucm91bmQoci8zNjApOnIpOmEoaXNOYU4odCk/ZTp0KX1mdW5jdGlvbiBsKHQpe3JldHVybiAxPT0odD0rdCk/YzpmdW5jdGlvbihlLHIpe3JldHVybiByLWU/ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PU1hdGgucG93KHQsciksZT1NYXRoLnBvdyhlLHIpLXQscj0xL3IsZnVuY3Rpb24obil7cmV0dXJuIE1hdGgucG93KHQrbiplLHIpfX0oZSxyLHQpOmEoaXNOYU4oZSk/cjplKX19ZnVuY3Rpb24gYyh0LGUpe3ZhciByPWUtdDtyZXR1cm4gcj9vKHQscik6YShpc05hTih0KT9lOnQpfXZhciB1PWZ1bmN0aW9uIHQocil7dmFyIG49bChyKTtmdW5jdGlvbiBpKHQscil7dmFyIGk9bigodD1lLnJnYih0KSkuciwocj1lLnJnYihyKSkuciksYT1uKHQuZyxyLmcpLG89bih0LmIsci5iKSxzPWModC5vcGFjaXR5LHIub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0LnI9aShlKSx0Lmc9YShlKSx0LmI9byhlKSx0Lm9wYWNpdHk9cyhlKSx0KyIifX1yZXR1cm4gaS5nYW1tYT10LGl9KDEpO2Z1bmN0aW9uIGgodCl7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuLGksYT1yLmxlbmd0aCxvPW5ldyBBcnJheShhKSxzPW5ldyBBcnJheShhKSxsPW5ldyBBcnJheShhKTtmb3Iobj0wO248YTsrK24paT1lLnJnYihyW25dKSxvW25dPWkucnx8MCxzW25dPWkuZ3x8MCxsW25dPWkuYnx8MDtyZXR1cm4gbz10KG8pLHM9dChzKSxsPXQobCksaS5vcGFjaXR5PTEsZnVuY3Rpb24odCl7cmV0dXJuIGkucj1vKHQpLGkuZz1zKHQpLGkuYj1sKHQpLGkrIiJ9fX12YXIgZj1oKG4pLHA9aChpKSxkPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj1lP2UubGVuZ3RoOjAsaT10P01hdGgubWluKG4sdC5sZW5ndGgpOjAsYT1uZXcgQXJyYXkoaSksbz1uZXcgQXJyYXkobik7Zm9yKHI9MDtyPGk7KytyKWFbcl09QSh0W3JdLGVbcl0pO2Zvcig7cjxuOysrcilvW3JdPWVbcl07cmV0dXJuIGZ1bmN0aW9uKHQpe2ZvcihyPTA7cjxpOysrcilvW3JdPWFbcl0odCk7cmV0dXJuIG99fSxnPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bmV3IERhdGU7cmV0dXJuIGUtPXQ9K3QsZnVuY3Rpb24obil7cmV0dXJuIHIuc2V0VGltZSh0K2Uqbikscn19LG09ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS09dD0rdCxmdW5jdGlvbihyKXtyZXR1cm4gdCtlKnJ9fSx2PWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj17fSxpPXt9O2ZvcihyIGluIG51bGwhPT10JiYib2JqZWN0Ij09dHlwZW9mIHR8fCh0PXt9KSxudWxsIT09ZSYmIm9iamVjdCI9PXR5cGVvZiBlfHwoZT17fSksZSlyIGluIHQ/bltyXT1BKHRbcl0sZVtyXSk6aVtyXT1lW3JdO3JldHVybiBmdW5jdGlvbih0KXtmb3IociBpbiBuKWlbcl09bltyXSh0KTtyZXR1cm4gaX19LHk9L1stK10/KD86XGQrXC4/XGQqfFwuP1xkKykoPzpbZUVdWy0rXT9cZCspPy9nLHg9bmV3IFJlZ0V4cCh5LnNvdXJjZSwiZyIpO3ZhciBiLF8sdyxrLE09ZnVuY3Rpb24odCxlKXt2YXIgcixuLGksYT15Lmxhc3RJbmRleD14Lmxhc3RJbmRleD0wLG89LTEscz1bXSxsPVtdO2Zvcih0Kz0iIixlKz0iIjsocj15LmV4ZWModCkpJiYobj14LmV4ZWMoZSkpOykoaT1uLmluZGV4KT5hJiYoaT1lLnNsaWNlKGEsaSksc1tvXT9zW29dKz1pOnNbKytvXT1pKSwocj1yWzBdKT09PShuPW5bMF0pP3Nbb10/c1tvXSs9bjpzWysrb109bjooc1srK29dPW51bGwsbC5wdXNoKHtpOm8seDptKHIsbil9KSksYT14Lmxhc3RJbmRleDtyZXR1cm4gYTxlLmxlbmd0aCYmKGk9ZS5zbGljZShhKSxzW29dP3Nbb10rPWk6c1srK29dPWkpLHMubGVuZ3RoPDI/bFswXT9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSkrIiJ9fShsWzBdLngpOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0oZSk6KGU9bC5sZW5ndGgsZnVuY3Rpb24odCl7Zm9yKHZhciByLG49MDtuPGU7KytuKXNbKHI9bFtuXSkuaV09ci54KHQpO3JldHVybiBzLmpvaW4oIiIpfSl9LEE9ZnVuY3Rpb24odCxyKXt2YXIgbixpPXR5cGVvZiByO3JldHVybiBudWxsPT1yfHwiYm9vbGVhbiI9PT1pP2Eocik6KCJudW1iZXIiPT09aT9tOiJzdHJpbmciPT09aT8obj1lLmNvbG9yKHIpKT8ocj1uLHUpOk06ciBpbnN0YW5jZW9mIGUuY29sb3I/dTpyIGluc3RhbmNlb2YgRGF0ZT9nOkFycmF5LmlzQXJyYXkocik/ZDoiZnVuY3Rpb24iIT10eXBlb2Ygci52YWx1ZU9mJiYiZnVuY3Rpb24iIT10eXBlb2Ygci50b1N0cmluZ3x8aXNOYU4ocik/djptKSh0LHIpfSxUPTE4MC9NYXRoLlBJLFM9e3RyYW5zbGF0ZVg6MCx0cmFuc2xhdGVZOjAscm90YXRlOjAsc2tld1g6MCxzY2FsZVg6MSxzY2FsZVk6MX0sRT1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG8scyxsO3JldHVybihvPU1hdGguc3FydCh0KnQrZSplKSkmJih0Lz1vLGUvPW8pLChsPXQqcitlKm4pJiYoci09dCpsLG4tPWUqbCksKHM9TWF0aC5zcXJ0KHIqcituKm4pKSYmKHIvPXMsbi89cyxsLz1zKSx0Km48ZSpyJiYodD0tdCxlPS1lLGw9LWwsbz0tbykse3RyYW5zbGF0ZVg6aSx0cmFuc2xhdGVZOmEscm90YXRlOk1hdGguYXRhbjIoZSx0KSpULHNrZXdYOk1hdGguYXRhbihsKSpULHNjYWxlWDpvLHNjYWxlWTpzfX07ZnVuY3Rpb24gQyh0LGUscixuKXtmdW5jdGlvbiBpKHQpe3JldHVybiB0Lmxlbmd0aD90LnBvcCgpKyIgIjoiIn1yZXR1cm4gZnVuY3Rpb24oYSxvKXt2YXIgcz1bXSxsPVtdO3JldHVybiBhPXQoYSksbz10KG8pLGZ1bmN0aW9uKHQsbixpLGEsbyxzKXtpZih0IT09aXx8biE9PWEpe3ZhciBsPW8ucHVzaCgidHJhbnNsYXRlKCIsbnVsbCxlLG51bGwscik7cy5wdXNoKHtpOmwtNCx4Om0odCxpKX0se2k6bC0yLHg6bShuLGEpfSl9ZWxzZShpfHxhKSYmby5wdXNoKCJ0cmFuc2xhdGUoIitpK2UrYStyKX0oYS50cmFuc2xhdGVYLGEudHJhbnNsYXRlWSxvLnRyYW5zbGF0ZVgsby50cmFuc2xhdGVZLHMsbCksZnVuY3Rpb24odCxlLHIsYSl7dCE9PWU/KHQtZT4xODA/ZSs9MzYwOmUtdD4xODAmJih0Kz0zNjApLGEucHVzaCh7aTpyLnB1c2goaShyKSsicm90YXRlKCIsbnVsbCxuKS0yLHg6bSh0LGUpfSkpOmUmJnIucHVzaChpKHIpKyJyb3RhdGUoIitlK24pfShhLnJvdGF0ZSxvLnJvdGF0ZSxzLGwpLGZ1bmN0aW9uKHQsZSxyLGEpe3QhPT1lP2EucHVzaCh7aTpyLnB1c2goaShyKSsic2tld1goIixudWxsLG4pLTIseDptKHQsZSl9KTplJiZyLnB1c2goaShyKSsic2tld1goIitlK24pfShhLnNrZXdYLG8uc2tld1gscyxsKSxmdW5jdGlvbih0LGUscixuLGEsbyl7aWYodCE9PXJ8fGUhPT1uKXt2YXIgcz1hLnB1c2goaShhKSsic2NhbGUoIixudWxsLCIsIixudWxsLCIpIik7by5wdXNoKHtpOnMtNCx4Om0odCxyKX0se2k6cy0yLHg6bShlLG4pfSl9ZWxzZSAxPT09ciYmMT09PW58fGEucHVzaChpKGEpKyJzY2FsZSgiK3IrIiwiK24rIikiKX0oYS5zY2FsZVgsYS5zY2FsZVksby5zY2FsZVgsby5zY2FsZVkscyxsKSxhPW89bnVsbCxmdW5jdGlvbih0KXtmb3IodmFyIGUscj0tMSxuPWwubGVuZ3RoOysrcjxuOylzWyhlPWxbcl0pLmldPWUueCh0KTtyZXR1cm4gcy5qb2luKCIiKX19fXZhciBMPUMoZnVuY3Rpb24odCl7cmV0dXJuIm5vbmUiPT09dD9TOihifHwoYj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKSxfPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCx3PWRvY3VtZW50LmRlZmF1bHRWaWV3KSxiLnN0eWxlLnRyYW5zZm9ybT10LHQ9dy5nZXRDb21wdXRlZFN0eWxlKF8uYXBwZW5kQ2hpbGQoYiksbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgidHJhbnNmb3JtIiksXy5yZW1vdmVDaGlsZChiKSx0PXQuc2xpY2UoNywtMSkuc3BsaXQoIiwiKSxFKCt0WzBdLCt0WzFdLCt0WzJdLCt0WzNdLCt0WzRdLCt0WzVdKSl9LCJweCwgIiwicHgpIiwiZGVnKSIpLHo9QyhmdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD9TOihrfHwoaz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSxrLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIix0KSwodD1rLnRyYW5zZm9ybS5iYXNlVmFsLmNvbnNvbGlkYXRlKCkpPyh0PXQubWF0cml4LEUodC5hLHQuYix0LmMsdC5kLHQuZSx0LmYpKTpTKX0sIiwgIiwiKSIsIikiKSxQPU1hdGguU1FSVDI7ZnVuY3Rpb24gSSh0KXtyZXR1cm4oKHQ9TWF0aC5leHAodCkpKzEvdCkvMn1mdW5jdGlvbiBPKHQpe3JldHVybiBmdW5jdGlvbihyLG4pe3ZhciBpPXQoKHI9ZS5oc2wocikpLmgsKG49ZS5oc2wobikpLmgpLGE9YyhyLnMsbi5zKSxvPWMoci5sLG4ubCkscz1jKHIub3BhY2l0eSxuLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gci5oPWkodCksci5zPWEodCksci5sPW8odCksci5vcGFjaXR5PXModCkscisiIn19fXZhciBEPU8ocyksUj1PKGMpO2Z1bmN0aW9uIEIodCl7cmV0dXJuIGZ1bmN0aW9uKHIsbil7dmFyIGk9dCgocj1lLmhjbChyKSkuaCwobj1lLmhjbChuKSkuaCksYT1jKHIuYyxuLmMpLG89YyhyLmwsbi5sKSxzPWMoci5vcGFjaXR5LG4ub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiByLmg9aSh0KSxyLmM9YSh0KSxyLmw9byh0KSxyLm9wYWNpdHk9cyh0KSxyKyIifX19dmFyIEY9QihzKSxOPUIoYyk7ZnVuY3Rpb24gaih0KXtyZXR1cm4gZnVuY3Rpb24gcihuKXtmdW5jdGlvbiBpKHIsaSl7dmFyIGE9dCgocj1lLmN1YmVoZWxpeChyKSkuaCwoaT1lLmN1YmVoZWxpeChpKSkuaCksbz1jKHIucyxpLnMpLHM9YyhyLmwsaS5sKSxsPWMoci5vcGFjaXR5LGkub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiByLmg9YSh0KSxyLnM9byh0KSxyLmw9cyhNYXRoLnBvdyh0LG4pKSxyLm9wYWNpdHk9bCh0KSxyKyIifX1yZXR1cm4gbj0rbixpLmdhbW1hPXIsaX0oMSl9dmFyIFY9aihzKSxVPWooYyk7dC5pbnRlcnBvbGF0ZT1BLHQuaW50ZXJwb2xhdGVBcnJheT1kLHQuaW50ZXJwb2xhdGVCYXNpcz1uLHQuaW50ZXJwb2xhdGVCYXNpc0Nsb3NlZD1pLHQuaW50ZXJwb2xhdGVEYXRlPWcsdC5pbnRlcnBvbGF0ZU51bWJlcj1tLHQuaW50ZXJwb2xhdGVPYmplY3Q9dix0LmludGVycG9sYXRlUm91bmQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS09dD0rdCxmdW5jdGlvbihyKXtyZXR1cm4gTWF0aC5yb3VuZCh0K2Uqcil9fSx0LmludGVycG9sYXRlU3RyaW5nPU0sdC5pbnRlcnBvbGF0ZVRyYW5zZm9ybUNzcz1MLHQuaW50ZXJwb2xhdGVUcmFuc2Zvcm1Tdmc9eix0LmludGVycG9sYXRlWm9vbT1mdW5jdGlvbih0LGUpe3ZhciByLG4saT10WzBdLGE9dFsxXSxvPXRbMl0scz1lWzBdLGw9ZVsxXSxjPWVbMl0sdT1zLWksaD1sLWEsZj11KnUraCpoO2lmKGY8MWUtMTIpbj1NYXRoLmxvZyhjL28pL1Ascj1mdW5jdGlvbih0KXtyZXR1cm5baSt0KnUsYSt0KmgsbypNYXRoLmV4cChQKnQqbildfTtlbHNle3ZhciBwPU1hdGguc3FydChmKSxkPShjKmMtbypvKzQqZikvKDIqbyoyKnApLGc9KGMqYy1vKm8tNCpmKS8oMipjKjIqcCksbT1NYXRoLmxvZyhNYXRoLnNxcnQoZCpkKzEpLWQpLHY9TWF0aC5sb2coTWF0aC5zcXJ0KGcqZysxKS1nKTtuPSh2LW0pL1Ascj1mdW5jdGlvbih0KXt2YXIgZSxyPXQqbixzPUkobSksbD1vLygyKnApKihzKihlPVAqcittLCgoZT1NYXRoLmV4cCgyKmUpKS0xKS8oZSsxKSktZnVuY3Rpb24odCl7cmV0dXJuKCh0PU1hdGguZXhwKHQpKS0xL3QpLzJ9KG0pKTtyZXR1cm5baStsKnUsYStsKmgsbypzL0koUCpyK20pXX19cmV0dXJuIHIuZHVyYXRpb249MWUzKm4scn0sdC5pbnRlcnBvbGF0ZVJnYj11LHQuaW50ZXJwb2xhdGVSZ2JCYXNpcz1mLHQuaW50ZXJwb2xhdGVSZ2JCYXNpc0Nsb3NlZD1wLHQuaW50ZXJwb2xhdGVIc2w9RCx0LmludGVycG9sYXRlSHNsTG9uZz1SLHQuaW50ZXJwb2xhdGVMYWI9ZnVuY3Rpb24odCxyKXt2YXIgbj1jKCh0PWUubGFiKHQpKS5sLChyPWUubGFiKHIpKS5sKSxpPWModC5hLHIuYSksYT1jKHQuYixyLmIpLG89Yyh0Lm9wYWNpdHksci5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQubD1uKGUpLHQuYT1pKGUpLHQuYj1hKGUpLHQub3BhY2l0eT1vKGUpLHQrIiJ9fSx0LmludGVycG9sYXRlSGNsPUYsdC5pbnRlcnBvbGF0ZUhjbExvbmc9Tix0LmludGVycG9sYXRlQ3ViZWhlbGl4PVYsdC5pbnRlcnBvbGF0ZUN1YmVoZWxpeExvbmc9VSx0LnF1YW50aXplPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheShlKSxuPTA7bjxlOysrbilyW25dPXQobi8oZS0xKSk7cmV0dXJuIHJ9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sIm9iamVjdCI9PXR5cGVvZiByJiYidW5kZWZpbmVkIiE9dHlwZW9mIGU/aShyLHQoImQzLWNvbG9yIikpOmkobi5kMz1uLmQzfHx7fSxuLmQzKX0seyJkMy1jb2xvciI6MTQxfV0sMTQ1OltmdW5jdGlvbih0LGUscil7dmFyIG47bj10aGlzLGZ1bmN0aW9uKHQpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBlKHQsZSxyLG4pe2lmKGlzTmFOKGUpfHxpc05hTihyKSlyZXR1cm4gdDt2YXIgaSxhLG8scyxsLGMsdSxoLGYscD10Ll9yb290LGQ9e2RhdGE6bn0sZz10Ll94MCxtPXQuX3kwLHY9dC5feDEseT10Ll95MTtpZighcClyZXR1cm4gdC5fcm9vdD1kLHQ7Zm9yKDtwLmxlbmd0aDspaWYoKGM9ZT49KGE9KGcrdikvMikpP2c9YTp2PWEsKHU9cj49KG89KG0reSkvMikpP209bzp5PW8saT1wLCEocD1wW2g9dTw8MXxjXSkpcmV0dXJuIGlbaF09ZCx0O2lmKHM9K3QuX3guY2FsbChudWxsLHAuZGF0YSksbD0rdC5feS5jYWxsKG51bGwscC5kYXRhKSxlPT09cyYmcj09PWwpcmV0dXJuIGQubmV4dD1wLGk/aVtoXT1kOnQuX3Jvb3Q9ZCx0O2Rve2k9aT9pW2hdPW5ldyBBcnJheSg0KTp0Ll9yb290PW5ldyBBcnJheSg0KSwoYz1lPj0oYT0oZyt2KS8yKSk/Zz1hOnY9YSwodT1yPj0obz0obSt5KS8yKSk/bT1vOnk9b313aGlsZSgoaD11PDwxfGMpPT0oZj0obD49byk8PDF8cz49YSkpO3JldHVybiBpW2ZdPXAsaVtoXT1kLHR9dmFyIHI9ZnVuY3Rpb24odCxlLHIsbixpKXt0aGlzLm5vZGU9dCx0aGlzLngwPWUsdGhpcy55MD1yLHRoaXMueDE9bix0aGlzLnkxPWl9O2Z1bmN0aW9uIG4odCl7cmV0dXJuIHRbMF19ZnVuY3Rpb24gaSh0KXtyZXR1cm4gdFsxXX1mdW5jdGlvbiBhKHQsZSxyKXt2YXIgYT1uZXcgbyhudWxsPT1lP246ZSxudWxsPT1yP2k6cixOYU4sTmFOLE5hTixOYU4pO3JldHVybiBudWxsPT10P2E6YS5hZGRBbGwodCl9ZnVuY3Rpb24gbyh0LGUscixuLGksYSl7dGhpcy5feD10LHRoaXMuX3k9ZSx0aGlzLl94MD1yLHRoaXMuX3kwPW4sdGhpcy5feDE9aSx0aGlzLl95MT1hLHRoaXMuX3Jvb3Q9dm9pZCAwfWZ1bmN0aW9uIHModCl7Zm9yKHZhciBlPXtkYXRhOnQuZGF0YX0scj1lO3Q9dC5uZXh0OylyPXIubmV4dD17ZGF0YTp0LmRhdGF9O3JldHVybiBlfXZhciBsPWEucHJvdG90eXBlPW8ucHJvdG90eXBlO2wuY29weT1mdW5jdGlvbigpe3ZhciB0LGUscj1uZXcgbyh0aGlzLl94LHRoaXMuX3ksdGhpcy5feDAsdGhpcy5feTAsdGhpcy5feDEsdGhpcy5feTEpLG49dGhpcy5fcm9vdDtpZighbilyZXR1cm4gcjtpZighbi5sZW5ndGgpcmV0dXJuIHIuX3Jvb3Q9cyhuKSxyO2Zvcih0PVt7c291cmNlOm4sdGFyZ2V0OnIuX3Jvb3Q9bmV3IEFycmF5KDQpfV07bj10LnBvcCgpOylmb3IodmFyIGk9MDtpPDQ7KytpKShlPW4uc291cmNlW2ldKSYmKGUubGVuZ3RoP3QucHVzaCh7c291cmNlOmUsdGFyZ2V0Om4udGFyZ2V0W2ldPW5ldyBBcnJheSg0KX0pOm4udGFyZ2V0W2ldPXMoZSkpO3JldHVybiByfSxsLmFkZD1mdW5jdGlvbih0KXt2YXIgcj0rdGhpcy5feC5jYWxsKG51bGwsdCksbj0rdGhpcy5feS5jYWxsKG51bGwsdCk7cmV0dXJuIGUodGhpcy5jb3ZlcihyLG4pLHIsbix0KX0sbC5hZGRBbGw9ZnVuY3Rpb24odCl7dmFyIHIsbixpLGEsbz10Lmxlbmd0aCxzPW5ldyBBcnJheShvKSxsPW5ldyBBcnJheShvKSxjPTEvMCx1PTEvMCxoPS0xLzAsZj0tMS8wO2ZvcihuPTA7bjxvOysrbilpc05hTihpPSt0aGlzLl94LmNhbGwobnVsbCxyPXRbbl0pKXx8aXNOYU4oYT0rdGhpcy5feS5jYWxsKG51bGwscikpfHwoc1tuXT1pLGxbbl09YSxpPGMmJihjPWkpLGk+aCYmKGg9aSksYTx1JiYodT1hKSxhPmYmJihmPWEpKTtmb3IoaDxjJiYoYz10aGlzLl94MCxoPXRoaXMuX3gxKSxmPHUmJih1PXRoaXMuX3kwLGY9dGhpcy5feTEpLHRoaXMuY292ZXIoYyx1KS5jb3ZlcihoLGYpLG49MDtuPG87KytuKWUodGhpcyxzW25dLGxbbl0sdFtuXSk7cmV0dXJuIHRoaXN9LGwuY292ZXI9ZnVuY3Rpb24odCxlKXtpZihpc05hTih0PSt0KXx8aXNOYU4oZT0rZSkpcmV0dXJuIHRoaXM7dmFyIHI9dGhpcy5feDAsbj10aGlzLl95MCxpPXRoaXMuX3gxLGE9dGhpcy5feTE7aWYoaXNOYU4ocikpaT0ocj1NYXRoLmZsb29yKHQpKSsxLGE9KG49TWF0aC5mbG9vcihlKSkrMTtlbHNle2lmKCEocj50fHx0Pml8fG4+ZXx8ZT5hKSlyZXR1cm4gdGhpczt2YXIgbyxzLGw9aS1yLGM9dGhpcy5fcm9vdDtzd2l0Y2gocz0oZTwobithKS8yKTw8MXx0PChyK2kpLzIpe2Nhc2UgMDpkb3sobz1uZXcgQXJyYXkoNCkpW3NdPWMsYz1vfXdoaWxlKGE9bisobCo9MiksdD4oaT1yK2wpfHxlPmEpO2JyZWFrO2Nhc2UgMTpkb3sobz1uZXcgQXJyYXkoNCkpW3NdPWMsYz1vfXdoaWxlKGE9bisobCo9MiksKHI9aS1sKT50fHxlPmEpO2JyZWFrO2Nhc2UgMjpkb3sobz1uZXcgQXJyYXkoNCkpW3NdPWMsYz1vfXdoaWxlKG49YS0obCo9MiksdD4oaT1yK2wpfHxuPmUpO2JyZWFrO2Nhc2UgMzpkb3sobz1uZXcgQXJyYXkoNCkpW3NdPWMsYz1vfXdoaWxlKG49YS0obCo9MiksKHI9aS1sKT50fHxuPmUpfXRoaXMuX3Jvb3QmJnRoaXMuX3Jvb3QubGVuZ3RoJiYodGhpcy5fcm9vdD1jKX1yZXR1cm4gdGhpcy5feDA9cix0aGlzLl95MD1uLHRoaXMuX3gxPWksdGhpcy5feTE9YSx0aGlzfSxsLmRhdGE9ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy52aXNpdChmdW5jdGlvbihlKXtpZighZS5sZW5ndGgpZG97dC5wdXNoKGUuZGF0YSl9d2hpbGUoZT1lLm5leHQpfSksdH0sbC5leHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5jb3ZlcigrdFswXVswXSwrdFswXVsxXSkuY292ZXIoK3RbMV1bMF0sK3RbMV1bMV0pOmlzTmFOKHRoaXMuX3gwKT92b2lkIDA6W1t0aGlzLl94MCx0aGlzLl95MF0sW3RoaXMuX3gxLHRoaXMuX3kxXV19LGwuZmluZD1mdW5jdGlvbih0LGUsbil7dmFyIGksYSxvLHMsbCxjLHUsaD10aGlzLl94MCxmPXRoaXMuX3kwLHA9dGhpcy5feDEsZD10aGlzLl95MSxnPVtdLG09dGhpcy5fcm9vdDtmb3IobSYmZy5wdXNoKG5ldyByKG0saCxmLHAsZCkpLG51bGw9PW4/bj0xLzA6KGg9dC1uLGY9ZS1uLHA9dCtuLGQ9ZStuLG4qPW4pO2M9Zy5wb3AoKTspaWYoISghKG09Yy5ub2RlKXx8KGE9Yy54MCk+cHx8KG89Yy55MCk+ZHx8KHM9Yy54MSk8aHx8KGw9Yy55MSk8ZikpaWYobS5sZW5ndGgpe3ZhciB2PShhK3MpLzIseT0obytsKS8yO2cucHVzaChuZXcgcihtWzNdLHYseSxzLGwpLG5ldyByKG1bMl0sYSx5LHYsbCksbmV3IHIobVsxXSx2LG8scyx5KSxuZXcgcihtWzBdLGEsbyx2LHkpKSwodT0oZT49eSk8PDF8dD49dikmJihjPWdbZy5sZW5ndGgtMV0sZ1tnLmxlbmd0aC0xXT1nW2cubGVuZ3RoLTEtdV0sZ1tnLmxlbmd0aC0xLXVdPWMpfWVsc2V7dmFyIHg9dC0rdGhpcy5feC5jYWxsKG51bGwsbS5kYXRhKSxiPWUtK3RoaXMuX3kuY2FsbChudWxsLG0uZGF0YSksXz14KngrYipiO2lmKF88bil7dmFyIHc9TWF0aC5zcXJ0KG49Xyk7aD10LXcsZj1lLXcscD10K3csZD1lK3csaT1tLmRhdGF9fXJldHVybiBpfSxsLnJlbW92ZT1mdW5jdGlvbih0KXtpZihpc05hTihhPSt0aGlzLl94LmNhbGwobnVsbCx0KSl8fGlzTmFOKG89K3RoaXMuX3kuY2FsbChudWxsLHQpKSlyZXR1cm4gdGhpczt2YXIgZSxyLG4saSxhLG8scyxsLGMsdSxoLGYscD10aGlzLl9yb290LGQ9dGhpcy5feDAsZz10aGlzLl95MCxtPXRoaXMuX3gxLHY9dGhpcy5feTE7aWYoIXApcmV0dXJuIHRoaXM7aWYocC5sZW5ndGgpZm9yKDs7KXtpZigoYz1hPj0ocz0oZCttKS8yKSk/ZD1zOm09cywodT1vPj0obD0oZyt2KS8yKSk/Zz1sOnY9bCxlPXAsIShwPXBbaD11PDwxfGNdKSlyZXR1cm4gdGhpcztpZighcC5sZW5ndGgpYnJlYWs7KGVbaCsxJjNdfHxlW2grMiYzXXx8ZVtoKzMmM10pJiYocj1lLGY9aCl9Zm9yKDtwLmRhdGEhPT10OylpZihuPXAsIShwPXAubmV4dCkpcmV0dXJuIHRoaXM7cmV0dXJuKGk9cC5uZXh0KSYmZGVsZXRlIHAubmV4dCxuPyhpP24ubmV4dD1pOmRlbGV0ZSBuLm5leHQsdGhpcyk6ZT8oaT9lW2hdPWk6ZGVsZXRlIGVbaF0sKHA9ZVswXXx8ZVsxXXx8ZVsyXXx8ZVszXSkmJnA9PT0oZVszXXx8ZVsyXXx8ZVsxXXx8ZVswXSkmJiFwLmxlbmd0aCYmKHI/cltmXT1wOnRoaXMuX3Jvb3Q9cCksdGhpcyk6KHRoaXMuX3Jvb3Q9aSx0aGlzKX0sbC5yZW1vdmVBbGw9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj10Lmxlbmd0aDtlPHI7KytlKXRoaXMucmVtb3ZlKHRbZV0pO3JldHVybiB0aGlzfSxsLnJvb3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcm9vdH0sbC5zaXplPWZ1bmN0aW9uKCl7dmFyIHQ9MDtyZXR1cm4gdGhpcy52aXNpdChmdW5jdGlvbihlKXtpZighZS5sZW5ndGgpZG97Kyt0fXdoaWxlKGU9ZS5uZXh0KX0pLHR9LGwudmlzaXQ9ZnVuY3Rpb24odCl7dmFyIGUsbixpLGEsbyxzLGw9W10sYz10aGlzLl9yb290O2ZvcihjJiZsLnB1c2gobmV3IHIoYyx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSkpO2U9bC5wb3AoKTspaWYoIXQoYz1lLm5vZGUsaT1lLngwLGE9ZS55MCxvPWUueDEscz1lLnkxKSYmYy5sZW5ndGgpe3ZhciB1PShpK28pLzIsaD0oYStzKS8yOyhuPWNbM10pJiZsLnB1c2gobmV3IHIobix1LGgsbyxzKSksKG49Y1syXSkmJmwucHVzaChuZXcgcihuLGksaCx1LHMpKSwobj1jWzFdKSYmbC5wdXNoKG5ldyByKG4sdSxhLG8saCkpLChuPWNbMF0pJiZsLnB1c2gobmV3IHIobixpLGEsdSxoKSl9cmV0dXJuIHRoaXN9LGwudmlzaXRBZnRlcj1mdW5jdGlvbih0KXt2YXIgZSxuPVtdLGk9W107Zm9yKHRoaXMuX3Jvb3QmJm4ucHVzaChuZXcgcih0aGlzLl9yb290LHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSk7ZT1uLnBvcCgpOyl7dmFyIGE9ZS5ub2RlO2lmKGEubGVuZ3RoKXt2YXIgbyxzPWUueDAsbD1lLnkwLGM9ZS54MSx1PWUueTEsaD0ocytjKS8yLGY9KGwrdSkvMjsobz1hWzBdKSYmbi5wdXNoKG5ldyByKG8scyxsLGgsZikpLChvPWFbMV0pJiZuLnB1c2gobmV3IHIobyxoLGwsYyxmKSksKG89YVsyXSkmJm4ucHVzaChuZXcgcihvLHMsZixoLHUpKSwobz1hWzNdKSYmbi5wdXNoKG5ldyByKG8saCxmLGMsdSkpfWkucHVzaChlKX1mb3IoO2U9aS5wb3AoKTspdChlLm5vZGUsZS54MCxlLnkwLGUueDEsZS55MSk7cmV0dXJuIHRoaXN9LGwueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5feD10LHRoaXMpOnRoaXMuX3h9LGwueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5feT10LHRoaXMpOnRoaXMuX3l9LHQucXVhZHRyZWU9YSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KCJvYmplY3QiPT10eXBlb2YgciYmInVuZGVmaW5lZCIhPXR5cGVvZiBlP3I6bi5kMz1uLmQzfHx7fSl9LHt9XSwxNDY6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbjtuPXRoaXMsZnVuY3Rpb24odCl7InVzZSBzdHJpY3QiO3ZhciBlLHIsbj0wLGk9MCxhPTAsbz0xZTMscz0wLGw9MCxjPTAsdT0ib2JqZWN0Ij09dHlwZW9mIHBlcmZvcm1hbmNlJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSxoPSJvYmplY3QiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lP3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpOmZ1bmN0aW9uKHQpe3NldFRpbWVvdXQodCwxNyl9O2Z1bmN0aW9uIGYoKXtyZXR1cm4gbHx8KGgocCksbD11Lm5vdygpK2MpfWZ1bmN0aW9uIHAoKXtsPTB9ZnVuY3Rpb24gZCgpe3RoaXMuX2NhbGw9dGhpcy5fdGltZT10aGlzLl9uZXh0PW51bGx9ZnVuY3Rpb24gZyh0LGUscil7dmFyIG49bmV3IGQ7cmV0dXJuIG4ucmVzdGFydCh0LGUsciksbn1mdW5jdGlvbiBtKCl7ZigpLCsrbjtmb3IodmFyIHQscj1lO3I7KSh0PWwtci5fdGltZSk+PTAmJnIuX2NhbGwuY2FsbChudWxsLHQpLHI9ci5fbmV4dDstLW59ZnVuY3Rpb24gdigpe2w9KHM9dS5ub3coKSkrYyxuPWk9MDt0cnl7bSgpfWZpbmFsbHl7bj0wLGZ1bmN0aW9uKCl7dmFyIHQsbixpPWUsYT0xLzA7Zm9yKDtpOylpLl9jYWxsPyhhPmkuX3RpbWUmJihhPWkuX3RpbWUpLHQ9aSxpPWkuX25leHQpOihuPWkuX25leHQsaS5fbmV4dD1udWxsLGk9dD90Ll9uZXh0PW46ZT1uKTtyPXQseChhKX0oKSxsPTB9fWZ1bmN0aW9uIHkoKXt2YXIgdD11Lm5vdygpLGU9dC1zO2U+byYmKGMtPWUscz10KX1mdW5jdGlvbiB4KHQpe258fChpJiYoaT1jbGVhclRpbWVvdXQoaSkpLHQtbD4yND8odDwxLzAmJihpPXNldFRpbWVvdXQodix0LXUubm93KCktYykpLGEmJihhPWNsZWFySW50ZXJ2YWwoYSkpKTooYXx8KHM9dS5ub3coKSxhPXNldEludGVydmFsKHksbykpLG49MSxoKHYpKSl9ZC5wcm90b3R5cGU9Zy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmQscmVzdGFydDpmdW5jdGlvbih0LG4saSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcigiY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb24iKTtpPShudWxsPT1pP2YoKToraSkrKG51bGw9PW4/MDorbiksdGhpcy5fbmV4dHx8cj09PXRoaXN8fChyP3IuX25leHQ9dGhpczplPXRoaXMscj10aGlzKSx0aGlzLl9jYWxsPXQsdGhpcy5fdGltZT1pLHgoKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuX2NhbGwmJih0aGlzLl9jYWxsPW51bGwsdGhpcy5fdGltZT0xLzAseCgpKX19O3Qubm93PWYsdC50aW1lcj1nLHQudGltZXJGbHVzaD1tLHQudGltZW91dD1mdW5jdGlvbih0LGUscil7dmFyIG49bmV3IGQ7cmV0dXJuIGU9bnVsbD09ZT8wOitlLG4ucmVzdGFydChmdW5jdGlvbihyKXtuLnN0b3AoKSx0KHIrZSl9LGUsciksbn0sdC5pbnRlcnZhbD1mdW5jdGlvbih0LGUscil7dmFyIG49bmV3IGQsaT1lO3JldHVybiBudWxsPT1lPyhuLnJlc3RhcnQodCxlLHIpLG4pOihlPStlLHI9bnVsbD09cj9mKCk6K3Isbi5yZXN0YXJ0KGZ1bmN0aW9uIGEobyl7bys9aSxuLnJlc3RhcnQoYSxpKz1lLHIpLHQobyl9LGUsciksbil9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0oIm9iamVjdCI9PXR5cGVvZiByJiYidW5kZWZpbmVkIiE9dHlwZW9mIGU/cjpuLmQzPW4uZDN8fHt9KX0se31dLDE0NzpbZnVuY3Rpb24odCxlLHIpeyFmdW5jdGlvbigpe3ZhciB0PXt2ZXJzaW9uOiIzLjUuMTcifSxyPVtdLnNsaWNlLG49ZnVuY3Rpb24odCl7cmV0dXJuIHIuY2FsbCh0KX0saT10aGlzLmRvY3VtZW50O2Z1bmN0aW9uIGEodCl7cmV0dXJuIHQmJih0Lm93bmVyRG9jdW1lbnR8fHQuZG9jdW1lbnR8fHQpLmRvY3VtZW50RWxlbWVudH1mdW5jdGlvbiBvKHQpe3JldHVybiB0JiYodC5vd25lckRvY3VtZW50JiZ0Lm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd8fHQuZG9jdW1lbnQmJnR8fHQuZGVmYXVsdFZpZXcpfWlmKGkpdHJ5e24oaS5kb2N1bWVudEVsZW1lbnQuY2hpbGROb2RlcylbMF0ubm9kZVR5cGV9Y2F0Y2godCl7bj1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5sZW5ndGgscj1uZXcgQXJyYXkoZSk7ZS0tOylyW2VdPXRbZV07cmV0dXJuIHJ9fWlmKERhdGUubm93fHwoRGF0ZS5ub3c9ZnVuY3Rpb24oKXtyZXR1cm4rbmV3IERhdGV9KSxpKXRyeXtpLmNyZWF0ZUVsZW1lbnQoIkRJViIpLnN0eWxlLnNldFByb3BlcnR5KCJvcGFjaXR5IiwwLCIiKX1jYXRjaCh0KXt2YXIgcz10aGlzLkVsZW1lbnQucHJvdG90eXBlLGw9cy5zZXRBdHRyaWJ1dGUsYz1zLnNldEF0dHJpYnV0ZU5TLHU9dGhpcy5DU1NTdHlsZURlY2xhcmF0aW9uLnByb3RvdHlwZSxoPXUuc2V0UHJvcGVydHk7cy5zZXRBdHRyaWJ1dGU9ZnVuY3Rpb24odCxlKXtsLmNhbGwodGhpcyx0LGUrIiIpfSxzLnNldEF0dHJpYnV0ZU5TPWZ1bmN0aW9uKHQsZSxyKXtjLmNhbGwodGhpcyx0LGUscisiIil9LHUuc2V0UHJvcGVydHk9ZnVuY3Rpb24odCxlLHIpe2guY2FsbCh0aGlzLHQsZSsiIixyKX19ZnVuY3Rpb24gZih0LGUpe3JldHVybiB0PGU/LTE6dD5lPzE6dD49ZT8wOk5hTn1mdW5jdGlvbiBwKHQpe3JldHVybiBudWxsPT09dD9OYU46K3R9ZnVuY3Rpb24gZCh0KXtyZXR1cm4haXNOYU4odCl9ZnVuY3Rpb24gZyh0KXtyZXR1cm57bGVmdDpmdW5jdGlvbihlLHIsbixpKXtmb3IoYXJndW1lbnRzLmxlbmd0aDwzJiYobj0wKSxhcmd1bWVudHMubGVuZ3RoPDQmJihpPWUubGVuZ3RoKTtuPGk7KXt2YXIgYT1uK2k+Pj4xO3QoZVthXSxyKTwwP249YSsxOmk9YX1yZXR1cm4gbn0scmlnaHQ6ZnVuY3Rpb24oZSxyLG4saSl7Zm9yKGFyZ3VtZW50cy5sZW5ndGg8MyYmKG49MCksYXJndW1lbnRzLmxlbmd0aDw0JiYoaT1lLmxlbmd0aCk7bjxpOyl7dmFyIGE9bitpPj4+MTt0KGVbYV0scik+MD9pPWE6bj1hKzF9cmV0dXJuIG59fX10LmFzY2VuZGluZz1mLHQuZGVzY2VuZGluZz1mdW5jdGlvbih0LGUpe3JldHVybiBlPHQ/LTE6ZT50PzE6ZT49dD8wOk5hTn0sdC5taW49ZnVuY3Rpb24odCxlKXt2YXIgcixuLGk9LTEsYT10Lmxlbmd0aDtpZigxPT09YXJndW1lbnRzLmxlbmd0aCl7Zm9yKDsrK2k8YTspaWYobnVsbCE9KG49dFtpXSkmJm4+PW4pe3I9bjticmVha31mb3IoOysraTxhOyludWxsIT0obj10W2ldKSYmcj5uJiYocj1uKX1lbHNle2Zvcig7KytpPGE7KWlmKG51bGwhPShuPWUuY2FsbCh0LHRbaV0saSkpJiZuPj1uKXtyPW47YnJlYWt9Zm9yKDsrK2k8YTspbnVsbCE9KG49ZS5jYWxsKHQsdFtpXSxpKSkmJnI+biYmKHI9bil9cmV0dXJuIHJ9LHQubWF4PWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPS0xLGE9dC5sZW5ndGg7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpe2Zvcig7KytpPGE7KWlmKG51bGwhPShuPXRbaV0pJiZuPj1uKXtyPW47YnJlYWt9Zm9yKDsrK2k8YTspbnVsbCE9KG49dFtpXSkmJm4+ciYmKHI9bil9ZWxzZXtmb3IoOysraTxhOylpZihudWxsIT0obj1lLmNhbGwodCx0W2ldLGkpKSYmbj49bil7cj1uO2JyZWFrfWZvcig7KytpPGE7KW51bGwhPShuPWUuY2FsbCh0LHRbaV0saSkpJiZuPnImJihyPW4pfXJldHVybiByfSx0LmV4dGVudD1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxhPS0xLG89dC5sZW5ndGg7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpe2Zvcig7KythPG87KWlmKG51bGwhPShuPXRbYV0pJiZuPj1uKXtyPWk9bjticmVha31mb3IoOysrYTxvOyludWxsIT0obj10W2FdKSYmKHI+biYmKHI9biksaTxuJiYoaT1uKSl9ZWxzZXtmb3IoOysrYTxvOylpZihudWxsIT0obj1lLmNhbGwodCx0W2FdLGEpKSYmbj49bil7cj1pPW47YnJlYWt9Zm9yKDsrK2E8bzspbnVsbCE9KG49ZS5jYWxsKHQsdFthXSxhKSkmJihyPm4mJihyPW4pLGk8biYmKGk9bikpfXJldHVybltyLGldfSx0LnN1bT1mdW5jdGlvbih0LGUpe3ZhciByLG49MCxpPXQubGVuZ3RoLGE9LTE7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpZm9yKDsrK2E8aTspZChyPSt0W2FdKSYmKG4rPXIpO2Vsc2UgZm9yKDsrK2E8aTspZChyPStlLmNhbGwodCx0W2FdLGEpKSYmKG4rPXIpO3JldHVybiBufSx0Lm1lYW49ZnVuY3Rpb24odCxlKXt2YXIgcixuPTAsaT10Lmxlbmd0aCxhPS0xLG89aTtpZigxPT09YXJndW1lbnRzLmxlbmd0aClmb3IoOysrYTxpOylkKHI9cCh0W2FdKSk/bis9cjotLW87ZWxzZSBmb3IoOysrYTxpOylkKHI9cChlLmNhbGwodCx0W2FdLGEpKSk/bis9cjotLW87aWYobylyZXR1cm4gbi9vfSx0LnF1YW50aWxlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9KHQubGVuZ3RoLTEpKmUrMSxuPU1hdGguZmxvb3IociksaT0rdFtuLTFdLGE9ci1uO3JldHVybiBhP2krYSoodFtuXS1pKTppfSx0Lm1lZGlhbj1mdW5jdGlvbihlLHIpe3ZhciBuLGk9W10sYT1lLmxlbmd0aCxvPS0xO2lmKDE9PT1hcmd1bWVudHMubGVuZ3RoKWZvcig7KytvPGE7KWQobj1wKGVbb10pKSYmaS5wdXNoKG4pO2Vsc2UgZm9yKDsrK288YTspZChuPXAoci5jYWxsKGUsZVtvXSxvKSkpJiZpLnB1c2gobik7aWYoaS5sZW5ndGgpcmV0dXJuIHQucXVhbnRpbGUoaS5zb3J0KGYpLC41KX0sdC52YXJpYW5jZT1mdW5jdGlvbih0LGUpe3ZhciByLG4saT10Lmxlbmd0aCxhPTAsbz0wLHM9LTEsbD0wO2lmKDE9PT1hcmd1bWVudHMubGVuZ3RoKWZvcig7KytzPGk7KWQocj1wKHRbc10pKSYmKG8rPShuPXItYSkqKHItKGErPW4vKytsKSkpO2Vsc2UgZm9yKDsrK3M8aTspZChyPXAoZS5jYWxsKHQsdFtzXSxzKSkpJiYobys9KG49ci1hKSooci0oYSs9bi8rK2wpKSk7aWYobD4xKXJldHVybiBvLyhsLTEpfSx0LmRldmlhdGlvbj1mdW5jdGlvbigpe3ZhciBlPXQudmFyaWFuY2UuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBlP01hdGguc3FydChlKTplfTt2YXIgbT1nKGYpO2Z1bmN0aW9uIHYodCl7cmV0dXJuIHQubGVuZ3RofXQuYmlzZWN0TGVmdD1tLmxlZnQsdC5iaXNlY3Q9dC5iaXNlY3RSaWdodD1tLnJpZ2h0LHQuYmlzZWN0b3I9ZnVuY3Rpb24odCl7cmV0dXJuIGcoMT09PXQubGVuZ3RoP2Z1bmN0aW9uKGUscil7cmV0dXJuIGYodChlKSxyKX06dCl9LHQuc2h1ZmZsZT1mdW5jdGlvbih0LGUscil7KGE9YXJndW1lbnRzLmxlbmd0aCk8MyYmKHI9dC5sZW5ndGgsYTwyJiYoZT0wKSk7Zm9yKHZhciBuLGksYT1yLWU7YTspaT1NYXRoLnJhbmRvbSgpKmEtLXwwLG49dFthK2VdLHRbYStlXT10W2krZV0sdFtpK2VdPW47cmV0dXJuIHR9LHQucGVybXV0ZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1lLmxlbmd0aCxuPW5ldyBBcnJheShyKTtyLS07KW5bcl09dFtlW3JdXTtyZXR1cm4gbn0sdC5wYWlycz1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPXQubGVuZ3RoLTEsbj10WzBdLGk9bmV3IEFycmF5KHI8MD8wOnIpO2U8cjspaVtlXT1bbixuPXRbKytlXV07cmV0dXJuIGl9LHQudHJhbnNwb3NlPWZ1bmN0aW9uKGUpe2lmKCEoYT1lLmxlbmd0aCkpcmV0dXJuW107Zm9yKHZhciByPS0xLG49dC5taW4oZSx2KSxpPW5ldyBBcnJheShuKTsrK3I8bjspZm9yKHZhciBhLG89LTEscz1pW3JdPW5ldyBBcnJheShhKTsrK288YTspc1tvXT1lW29dW3JdO3JldHVybiBpfSx0LnppcD1mdW5jdGlvbigpe3JldHVybiB0LnRyYW5zcG9zZShhcmd1bWVudHMpfSx0LmtleXM9ZnVuY3Rpb24odCl7dmFyIGU9W107Zm9yKHZhciByIGluIHQpZS5wdXNoKHIpO3JldHVybiBlfSx0LnZhbHVlcz1mdW5jdGlvbih0KXt2YXIgZT1bXTtmb3IodmFyIHIgaW4gdCllLnB1c2godFtyXSk7cmV0dXJuIGV9LHQuZW50cmllcz1mdW5jdGlvbih0KXt2YXIgZT1bXTtmb3IodmFyIHIgaW4gdCllLnB1c2goe2tleTpyLHZhbHVlOnRbcl19KTtyZXR1cm4gZX0sdC5tZXJnZT1mdW5jdGlvbih0KXtmb3IodmFyIGUscixuLGk9dC5sZW5ndGgsYT0tMSxvPTA7KythPGk7KW8rPXRbYV0ubGVuZ3RoO2ZvcihyPW5ldyBBcnJheShvKTstLWk+PTA7KWZvcihlPShuPXRbaV0pLmxlbmd0aDstLWU+PTA7KXJbLS1vXT1uW2VdO3JldHVybiByfTt2YXIgeT1NYXRoLmFicztmdW5jdGlvbiB4KHQsZSl7Zm9yKHZhciByIGluIGUpT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLHIse3ZhbHVlOmVbcl0sZW51bWVyYWJsZTohMX0pfWZ1bmN0aW9uIGIoKXt0aGlzLl89T2JqZWN0LmNyZWF0ZShudWxsKX10LnJhbmdlPWZ1bmN0aW9uKHQsZSxyKXtpZihhcmd1bWVudHMubGVuZ3RoPDMmJihyPTEsYXJndW1lbnRzLmxlbmd0aDwyJiYoZT10LHQ9MCkpLChlLXQpL3I9PTEvMCl0aHJvdyBuZXcgRXJyb3IoImluZmluaXRlIHJhbmdlIik7dmFyIG4saT1bXSxhPWZ1bmN0aW9uKHQpe3ZhciBlPTE7Zm9yKDt0KmUlMTspZSo9MTA7cmV0dXJuIGV9KHkocikpLG89LTE7aWYodCo9YSxlKj1hLChyKj1hKTwwKWZvcig7KG49dCtyKisrbyk+ZTspaS5wdXNoKG4vYSk7ZWxzZSBmb3IoOyhuPXQrciorK28pPGU7KWkucHVzaChuL2EpO3JldHVybiBpfSx0Lm1hcD1mdW5jdGlvbih0LGUpe3ZhciByPW5ldyBiO2lmKHQgaW5zdGFuY2VvZiBiKXQuZm9yRWFjaChmdW5jdGlvbih0LGUpe3Iuc2V0KHQsZSl9KTtlbHNlIGlmKEFycmF5LmlzQXJyYXkodCkpe3ZhciBuLGk9LTEsYT10Lmxlbmd0aDtpZigxPT09YXJndW1lbnRzLmxlbmd0aClmb3IoOysraTxhOylyLnNldChpLHRbaV0pO2Vsc2UgZm9yKDsrK2k8YTspci5zZXQoZS5jYWxsKHQsbj10W2ldLGkpLG4pfWVsc2UgZm9yKHZhciBvIGluIHQpci5zZXQobyx0W29dKTtyZXR1cm4gcn07dmFyIF89Il9fcHJvdG9fXyIsdz0iXDAiO2Z1bmN0aW9uIGsodCl7cmV0dXJuKHQrPSIiKT09PV98fHRbMF09PT13P3crdDp0fWZ1bmN0aW9uIE0odCl7cmV0dXJuKHQrPSIiKVswXT09PXc/dC5zbGljZSgxKTp0fWZ1bmN0aW9uIEEodCl7cmV0dXJuIGsodClpbiB0aGlzLl99ZnVuY3Rpb24gVCh0KXtyZXR1cm4odD1rKHQpKWluIHRoaXMuXyYmZGVsZXRlIHRoaXMuX1t0XX1mdW5jdGlvbiBTKCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIHRoaXMuXyl0LnB1c2goTShlKSk7cmV0dXJuIHR9ZnVuY3Rpb24gRSgpe3ZhciB0PTA7Zm9yKHZhciBlIGluIHRoaXMuXykrK3Q7cmV0dXJuIHR9ZnVuY3Rpb24gQygpe2Zvcih2YXIgdCBpbiB0aGlzLl8pcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gTCgpe3RoaXMuXz1PYmplY3QuY3JlYXRlKG51bGwpfWZ1bmN0aW9uIHoodCl7cmV0dXJuIHR9ZnVuY3Rpb24gUCh0LGUscil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49ci5hcHBseShlLGFyZ3VtZW50cyk7cmV0dXJuIG49PT1lP3Q6bn19ZnVuY3Rpb24gSSh0LGUpe2lmKGUgaW4gdClyZXR1cm4gZTtlPWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrZS5zbGljZSgxKTtmb3IodmFyIHI9MCxuPU8ubGVuZ3RoO3I8bjsrK3Ipe3ZhciBpPU9bcl0rZTtpZihpIGluIHQpcmV0dXJuIGl9fXgoYix7aGFzOkEsZ2V0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9bayh0KV19LHNldDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9bayh0KV09ZX0scmVtb3ZlOlQsa2V5czpTLHZhbHVlczpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzLl8pdC5wdXNoKHRoaXMuX1tlXSk7cmV0dXJuIHR9LGVudHJpZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gdGhpcy5fKXQucHVzaCh7a2V5Ok0oZSksdmFsdWU6dGhpcy5fW2VdfSk7cmV0dXJuIHR9LHNpemU6RSxlbXB0eTpDLGZvckVhY2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMuXyl0LmNhbGwodGhpcyxNKGUpLHRoaXMuX1tlXSl9fSksdC5uZXN0PWZ1bmN0aW9uKCl7dmFyIGUscixuPXt9LGk9W10sYT1bXTtmdW5jdGlvbiBvKHQsYSxzKXtpZihzPj1pLmxlbmd0aClyZXR1cm4gcj9yLmNhbGwobixhKTplP2Euc29ydChlKTphO2Zvcih2YXIgbCxjLHUsaCxmPS0xLHA9YS5sZW5ndGgsZD1pW3MrK10sZz1uZXcgYjsrK2Y8cDspKGg9Zy5nZXQobD1kKGM9YVtmXSkpKT9oLnB1c2goYyk6Zy5zZXQobCxbY10pO3JldHVybiB0PyhjPXQoKSx1PWZ1bmN0aW9uKGUscil7Yy5zZXQoZSxvKHQscixzKSl9KTooYz17fSx1PWZ1bmN0aW9uKGUscil7Y1tlXT1vKHQscixzKX0pLGcuZm9yRWFjaCh1KSxjfXJldHVybiBuLm1hcD1mdW5jdGlvbih0LGUpe3JldHVybiBvKGUsdCwwKX0sbi5lbnRyaWVzPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbiB0KGUscil7aWYocj49aS5sZW5ndGgpcmV0dXJuIGU7dmFyIG49W10sbz1hW3IrK107cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbihlLGkpe24ucHVzaCh7a2V5OmUsdmFsdWVzOnQoaSxyKX0pfSksbz9uLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gbyh0LmtleSxlLmtleSl9KTpufShvKHQubWFwLGUsMCksMCl9LG4ua2V5PWZ1bmN0aW9uKHQpe3JldHVybiBpLnB1c2godCksbn0sbi5zb3J0S2V5cz1mdW5jdGlvbih0KXtyZXR1cm4gYVtpLmxlbmd0aC0xXT10LG59LG4uc29ydFZhbHVlcz1mdW5jdGlvbih0KXtyZXR1cm4gZT10LG59LG4ucm9sbHVwPWZ1bmN0aW9uKHQpe3JldHVybiByPXQsbn0sbn0sdC5zZXQ9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IEw7aWYodClmb3IodmFyIHI9MCxuPXQubGVuZ3RoO3I8bjsrK3IpZS5hZGQodFtyXSk7cmV0dXJuIGV9LHgoTCx7aGFzOkEsYWRkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9bayh0Kz0iIildPSEwLHR9LHJlbW92ZTpULHZhbHVlczpTLHNpemU6RSxlbXB0eTpDLGZvckVhY2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMuXyl0LmNhbGwodGhpcyxNKGUpKX19KSx0LmJlaGF2aW9yPXt9LHQucmViaW5kPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLG49MSxpPWFyZ3VtZW50cy5sZW5ndGg7KytuPGk7KXRbcj1hcmd1bWVudHNbbl1dPVAodCxlLGVbcl0pO3JldHVybiB0fTt2YXIgTz1bIndlYmtpdCIsIm1zIiwibW96IiwiTW96IiwibyIsIk8iXTtmdW5jdGlvbiBEKCl7fWZ1bmN0aW9uIFIoKXt9ZnVuY3Rpb24gQih0KXt2YXIgZT1bXSxyPW5ldyBiO2Z1bmN0aW9uIG4oKXtmb3IodmFyIHIsbj1lLGk9LTEsYT1uLmxlbmd0aDsrK2k8YTspKHI9bltpXS5vbikmJnIuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiB0fXJldHVybiBuLm9uPWZ1bmN0aW9uKG4saSl7dmFyIGEsbz1yLmdldChuKTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP28mJm8ub246KG8mJihvLm9uPW51bGwsZT1lLnNsaWNlKDAsYT1lLmluZGV4T2YobykpLmNvbmNhdChlLnNsaWNlKGErMSkpLHIucmVtb3ZlKG4pKSxpJiZlLnB1c2goci5zZXQobix7b246aX0pKSx0KX0sbn1mdW5jdGlvbiBGKCl7dC5ldmVudC5wcmV2ZW50RGVmYXVsdCgpfWZ1bmN0aW9uIE4oKXtmb3IodmFyIGUscj10LmV2ZW50O2U9ci5zb3VyY2VFdmVudDspcj1lO3JldHVybiByfWZ1bmN0aW9uIGooZSl7Zm9yKHZhciByPW5ldyBSLG49MCxpPWFyZ3VtZW50cy5sZW5ndGg7KytuPGk7KXJbYXJndW1lbnRzW25dXT1CKHIpO3JldHVybiByLm9mPWZ1bmN0aW9uKG4saSl7cmV0dXJuIGZ1bmN0aW9uKGEpe3RyeXt2YXIgbz1hLnNvdXJjZUV2ZW50PXQuZXZlbnQ7YS50YXJnZXQ9ZSx0LmV2ZW50PWEsclthLnR5cGVdLmFwcGx5KG4saSl9ZmluYWxseXt0LmV2ZW50PW99fX0scn10LmRpc3BhdGNoPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PW5ldyBSLGU9LTEscj1hcmd1bWVudHMubGVuZ3RoOysrZTxyOyl0W2FyZ3VtZW50c1tlXV09Qih0KTtyZXR1cm4gdH0sUi5wcm90b3R5cGUub249ZnVuY3Rpb24odCxlKXt2YXIgcj10LmluZGV4T2YoIi4iKSxuPSIiO2lmKHI+PTAmJihuPXQuc2xpY2UocisxKSx0PXQuc2xpY2UoMCxyKSksdClyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP3RoaXNbdF0ub24obik6dGhpc1t0XS5vbihuLGUpO2lmKDI9PT1hcmd1bWVudHMubGVuZ3RoKXtpZihudWxsPT1lKWZvcih0IGluIHRoaXMpdGhpcy5oYXNPd25Qcm9wZXJ0eSh0KSYmdGhpc1t0XS5vbihuLG51bGwpO3JldHVybiB0aGlzfX0sdC5ldmVudD1udWxsLHQucmVxdW90ZT1mdW5jdGlvbih0KXtyZXR1cm4gdC5yZXBsYWNlKFYsIlxcJCYiKX07dmFyIFY9L1tcXFxeXCRcKlwrXD9cfFxbXF1cKFwpXC5ce1x9XS9nLFU9e30uX19wcm90b19fP2Z1bmN0aW9uKHQsZSl7dC5fX3Byb3RvX189ZX06ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIgaW4gZSl0W3JdPWVbcl19O2Z1bmN0aW9uIHEodCl7cmV0dXJuIFUodCxZKSx0fXZhciBIPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUucXVlcnlTZWxlY3Rvcih0KX0sRz1mdW5jdGlvbih0LGUpe3JldHVybiBlLnF1ZXJ5U2VsZWN0b3JBbGwodCl9LFc9ZnVuY3Rpb24odCxlKXt2YXIgcj10Lm1hdGNoZXN8fHRbSSh0LCJtYXRjaGVzU2VsZWN0b3IiKV07cmV0dXJuKFc9ZnVuY3Rpb24odCxlKXtyZXR1cm4gci5jYWxsKHQsZSl9KSh0LGUpfTsiZnVuY3Rpb24iPT10eXBlb2YgU2l6emxlJiYoSD1mdW5jdGlvbih0LGUpe3JldHVybiBTaXp6bGUodCxlKVswXXx8bnVsbH0sRz1TaXp6bGUsVz1TaXp6bGUubWF0Y2hlc1NlbGVjdG9yKSx0LnNlbGVjdGlvbj1mdW5jdGlvbigpe3JldHVybiB0LnNlbGVjdChpLmRvY3VtZW50RWxlbWVudCl9O3ZhciBZPXQuc2VsZWN0aW9uLnByb3RvdHlwZT1bXTtmdW5jdGlvbiBYKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6ZnVuY3Rpb24oKXtyZXR1cm4gSCh0LHRoaXMpfX1mdW5jdGlvbiBaKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6ZnVuY3Rpb24oKXtyZXR1cm4gRyh0LHRoaXMpfX1ZLnNlbGVjdD1mdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhPVtdO3Q9WCh0KTtmb3IodmFyIG89LTEscz10aGlzLmxlbmd0aDsrK288czspe2EucHVzaChlPVtdKSxlLnBhcmVudE5vZGU9KG49dGhpc1tvXSkucGFyZW50Tm9kZTtmb3IodmFyIGw9LTEsYz1uLmxlbmd0aDsrK2w8YzspKGk9bltsXSk/KGUucHVzaChyPXQuY2FsbChpLGkuX19kYXRhX18sbCxvKSksciYmIl9fZGF0YV9fImluIGkmJihyLl9fZGF0YV9fPWkuX19kYXRhX18pKTplLnB1c2gobnVsbCl9cmV0dXJuIHEoYSl9LFkuc2VsZWN0QWxsPWZ1bmN0aW9uKHQpe3ZhciBlLHIsaT1bXTt0PVoodCk7Zm9yKHZhciBhPS0xLG89dGhpcy5sZW5ndGg7KythPG87KWZvcih2YXIgcz10aGlzW2FdLGw9LTEsYz1zLmxlbmd0aDsrK2w8YzspKHI9c1tsXSkmJihpLnB1c2goZT1uKHQuY2FsbChyLHIuX19kYXRhX18sbCxhKSkpLGUucGFyZW50Tm9kZT1yKTtyZXR1cm4gcShpKX07dmFyICQ9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLEo9e3N2ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHhodG1sOiQseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8ifTtmdW5jdGlvbiBLKGUscil7cmV0dXJuIGU9dC5ucy5xdWFsaWZ5KGUpLG51bGw9PXI/ZS5sb2NhbD9mdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKX06ZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZShlKX06ImZ1bmN0aW9uIj09dHlwZW9mIHI/ZS5sb2NhbD9mdW5jdGlvbigpe3ZhciB0PXIuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PXQ/dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpOnRoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHQpfTpmdW5jdGlvbigpe3ZhciB0PXIuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PXQ/dGhpcy5yZW1vdmVBdHRyaWJ1dGUoZSk6dGhpcy5zZXRBdHRyaWJ1dGUoZSx0KX06ZS5sb2NhbD9mdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHIpfTpmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlKGUscil9fWZ1bmN0aW9uIFEodCl7cmV0dXJuIHQudHJpbSgpLnJlcGxhY2UoL1xzKy9nLCIgIil9ZnVuY3Rpb24gdHQoZSl7cmV0dXJuIG5ldyBSZWdFeHAoIig/Ol58XFxzKykiK3QucmVxdW90ZShlKSsiKD86XFxzK3wkKSIsImciKX1mdW5jdGlvbiBldCh0KXtyZXR1cm4odCsiIikudHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uIHJ0KHQsZSl7dmFyIHI9KHQ9ZXQodCkubWFwKG50KSkubGVuZ3RoO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlP2Z1bmN0aW9uKCl7Zm9yKHZhciBuPS0xLGk9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7KytuPHI7KXRbbl0odGhpcyxpKX06ZnVuY3Rpb24oKXtmb3IodmFyIG49LTE7KytuPHI7KXRbbl0odGhpcyxlKX19ZnVuY3Rpb24gbnQodCl7dmFyIGU9dHQodCk7cmV0dXJuIGZ1bmN0aW9uKHIsbil7aWYoaT1yLmNsYXNzTGlzdClyZXR1cm4gbj9pLmFkZCh0KTppLnJlbW92ZSh0KTt2YXIgaT1yLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiI7bj8oZS5sYXN0SW5kZXg9MCxlLnRlc3QoaSl8fHIuc2V0QXR0cmlidXRlKCJjbGFzcyIsUShpKyIgIit0KSkpOnIuc2V0QXR0cmlidXRlKCJjbGFzcyIsUShpLnJlcGxhY2UoZSwiICIpKSl9fWZ1bmN0aW9uIGl0KHQsZSxyKXtyZXR1cm4gbnVsbD09ZT9mdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCl9OiJmdW5jdGlvbiI9PXR5cGVvZiBlP2Z1bmN0aW9uKCl7dmFyIG49ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09bj90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxuLHIpfTpmdW5jdGlvbigpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxlLHIpfX1mdW5jdGlvbiBhdCh0LGUpe3JldHVybiBudWxsPT1lP2Z1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbdF19OiJmdW5jdGlvbiI9PXR5cGVvZiBlP2Z1bmN0aW9uKCl7dmFyIHI9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09cj9kZWxldGUgdGhpc1t0XTp0aGlzW3RdPXJ9OmZ1bmN0aW9uKCl7dGhpc1t0XT1lfX1mdW5jdGlvbiBvdChlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZT9lOihlPXQubnMucXVhbGlmeShlKSkubG9jYWw/ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhlLnNwYWNlLGUubG9jYWwpfTpmdW5jdGlvbigpe3ZhciB0PXRoaXMub3duZXJEb2N1bWVudCxyPXRoaXMubmFtZXNwYWNlVVJJO3JldHVybiByPT09JCYmdC5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJPT09JD90LmNyZWF0ZUVsZW1lbnQoZSk6dC5jcmVhdGVFbGVtZW50TlMocixlKX19ZnVuY3Rpb24gc3QoKXt2YXIgdD10aGlzLnBhcmVudE5vZGU7dCYmdC5yZW1vdmVDaGlsZCh0aGlzKX1mdW5jdGlvbiBsdCh0KXtyZXR1cm57X19kYXRhX186dH19ZnVuY3Rpb24gY3QodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIFcodGhpcyx0KX19ZnVuY3Rpb24gdXQodCxlKXtmb3IodmFyIHI9MCxuPXQubGVuZ3RoO3I8bjtyKyspZm9yKHZhciBpLGE9dFtyXSxvPTAscz1hLmxlbmd0aDtvPHM7bysrKShpPWFbb10pJiZlKGksbyxyKTtyZXR1cm4gdH1mdW5jdGlvbiBodCh0KXtyZXR1cm4gVSh0LGZ0KSx0fXQubnM9e3ByZWZpeDpKLHF1YWxpZnk6ZnVuY3Rpb24odCl7dmFyIGU9dC5pbmRleE9mKCI6Iikscj10O3JldHVybiBlPj0wJiYieG1sbnMiIT09KHI9dC5zbGljZSgwLGUpKSYmKHQ9dC5zbGljZShlKzEpKSxKLmhhc093blByb3BlcnR5KHIpP3tzcGFjZTpKW3JdLGxvY2FsOnR9OnR9fSxZLmF0dHI9ZnVuY3Rpb24oZSxyKXtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2lmKCJzdHJpbmciPT10eXBlb2YgZSl7dmFyIG49dGhpcy5ub2RlKCk7cmV0dXJuKGU9dC5ucy5xdWFsaWZ5KGUpKS5sb2NhbD9uLmdldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCk6bi5nZXRBdHRyaWJ1dGUoZSl9Zm9yKHIgaW4gZSl0aGlzLmVhY2goSyhyLGVbcl0pKTtyZXR1cm4gdGhpc31yZXR1cm4gdGhpcy5lYWNoKEsoZSxyKSl9LFkuY2xhc3NlZD1mdW5jdGlvbih0LGUpe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7aWYoInN0cmluZyI9PXR5cGVvZiB0KXt2YXIgcj10aGlzLm5vZGUoKSxuPSh0PWV0KHQpKS5sZW5ndGgsaT0tMTtpZihlPXIuY2xhc3NMaXN0KXtmb3IoOysraTxuOylpZighZS5jb250YWlucyh0W2ldKSlyZXR1cm4hMX1lbHNlIGZvcihlPXIuZ2V0QXR0cmlidXRlKCJjbGFzcyIpOysraTxuOylpZighdHQodFtpXSkudGVzdChlKSlyZXR1cm4hMTtyZXR1cm4hMH1mb3IoZSBpbiB0KXRoaXMuZWFjaChydChlLHRbZV0pKTtyZXR1cm4gdGhpc31yZXR1cm4gdGhpcy5lYWNoKHJ0KHQsZSkpfSxZLnN0eWxlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoO2lmKG48Myl7aWYoInN0cmluZyIhPXR5cGVvZiB0KXtmb3IociBpbiBuPDImJihlPSIiKSx0KXRoaXMuZWFjaChpdChyLHRbcl0sZSkpO3JldHVybiB0aGlzfWlmKG48Mil7dmFyIGk9dGhpcy5ub2RlKCk7cmV0dXJuIG8oaSkuZ2V0Q29tcHV0ZWRTdHlsZShpLG51bGwpLmdldFByb3BlcnR5VmFsdWUodCl9cj0iIn1yZXR1cm4gdGhpcy5lYWNoKGl0KHQsZSxyKSl9LFkucHJvcGVydHk9ZnVuY3Rpb24odCxlKXtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gdGhpcy5ub2RlKClbdF07Zm9yKGUgaW4gdCl0aGlzLmVhY2goYXQoZSx0W2VdKSk7cmV0dXJuIHRoaXN9cmV0dXJuIHRoaXMuZWFjaChhdCh0LGUpKX0sWS50ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgiZnVuY3Rpb24iPT10eXBlb2YgdD9mdW5jdGlvbigpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMudGV4dENvbnRlbnQ9bnVsbD09ZT8iIjplfTpudWxsPT10P2Z1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD0iIn06ZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PXR9KTp0aGlzLm5vZGUoKS50ZXh0Q29udGVudH0sWS5odG1sPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgiZnVuY3Rpb24iPT10eXBlb2YgdD9mdW5jdGlvbigpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPW51bGw9PWU/IiI6ZX06bnVsbD09dD9mdW5jdGlvbigpe3RoaXMuaW5uZXJIVE1MPSIifTpmdW5jdGlvbigpe3RoaXMuaW5uZXJIVE1MPXR9KTp0aGlzLm5vZGUoKS5pbm5lckhUTUx9LFkuYXBwZW5kPWZ1bmN0aW9uKHQpe3JldHVybiB0PW90KHQpLHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQodC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSl9LFkuaW5zZXJ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9b3QodCksZT1YKGUpLHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKHQuYXBwbHkodGhpcyxhcmd1bWVudHMpLGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHxudWxsKX0pfSxZLnJlbW92ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goc3QpfSxZLmRhdGE9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGk9LTEsYT10aGlzLmxlbmd0aDtpZighYXJndW1lbnRzLmxlbmd0aCl7Zm9yKHQ9bmV3IEFycmF5KGE9KHI9dGhpc1swXSkubGVuZ3RoKTsrK2k8YTspKG49cltpXSkmJih0W2ldPW4uX19kYXRhX18pO3JldHVybiB0fWZ1bmN0aW9uIG8odCxyKXt2YXIgbixpLGEsbz10Lmxlbmd0aCx1PXIubGVuZ3RoLGg9TWF0aC5taW4obyx1KSxmPW5ldyBBcnJheSh1KSxwPW5ldyBBcnJheSh1KSxkPW5ldyBBcnJheShvKTtpZihlKXt2YXIgZyxtPW5ldyBiLHY9bmV3IEFycmF5KG8pO2ZvcihuPS0xOysrbjxvOykoaT10W25dKSYmKG0uaGFzKGc9ZS5jYWxsKGksaS5fX2RhdGFfXyxuKSk/ZFtuXT1pOm0uc2V0KGcsaSksdltuXT1nKTtmb3Iobj0tMTsrK248dTspKGk9bS5nZXQoZz1lLmNhbGwocixhPXJbbl0sbikpKT8hMCE9PWkmJihmW25dPWksaS5fX2RhdGFfXz1hKTpwW25dPWx0KGEpLG0uc2V0KGcsITApO2ZvcihuPS0xOysrbjxvOyluIGluIHYmJiEwIT09bS5nZXQodltuXSkmJihkW25dPXRbbl0pfWVsc2V7Zm9yKG49LTE7KytuPGg7KWk9dFtuXSxhPXJbbl0saT8oaS5fX2RhdGFfXz1hLGZbbl09aSk6cFtuXT1sdChhKTtmb3IoO248dTsrK24pcFtuXT1sdChyW25dKTtmb3IoO248bzsrK24pZFtuXT10W25dfXAudXBkYXRlPWYscC5wYXJlbnROb2RlPWYucGFyZW50Tm9kZT1kLnBhcmVudE5vZGU9dC5wYXJlbnROb2RlLHMucHVzaChwKSxsLnB1c2goZiksYy5wdXNoKGQpfXZhciBzPWh0KFtdKSxsPXEoW10pLGM9cShbXSk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQpZm9yKDsrK2k8YTspbyhyPXRoaXNbaV0sdC5jYWxsKHIsci5wYXJlbnROb2RlLl9fZGF0YV9fLGkpKTtlbHNlIGZvcig7KytpPGE7KW8ocj10aGlzW2ldLHQpO3JldHVybiBsLmVudGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHN9LGwuZXhpdD1mdW5jdGlvbigpe3JldHVybiBjfSxsfSxZLmRhdHVtPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMucHJvcGVydHkoIl9fZGF0YV9fIix0KTp0aGlzLnByb3BlcnR5KCJfX2RhdGFfXyIpfSxZLmZpbHRlcj1mdW5jdGlvbih0KXt2YXIgZSxyLG4saT1bXTsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9Y3QodCkpO2Zvcih2YXIgYT0wLG89dGhpcy5sZW5ndGg7YTxvO2ErKyl7aS5wdXNoKGU9W10pLGUucGFyZW50Tm9kZT0ocj10aGlzW2FdKS5wYXJlbnROb2RlO2Zvcih2YXIgcz0wLGw9ci5sZW5ndGg7czxsO3MrKykobj1yW3NdKSYmdC5jYWxsKG4sbi5fX2RhdGFfXyxzLGEpJiZlLnB1c2gobil9cmV0dXJuIHEoaSl9LFkub3JkZXI9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9LTEsZT10aGlzLmxlbmd0aDsrK3Q8ZTspZm9yKHZhciByLG49dGhpc1t0XSxpPW4ubGVuZ3RoLTEsYT1uW2ldOy0taT49MDspKHI9bltpXSkmJihhJiZhIT09ci5uZXh0U2libGluZyYmYS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShyLGEpLGE9cik7cmV0dXJuIHRoaXN9LFkuc29ydD1mdW5jdGlvbih0KXt0PWZ1bmN0aW9uKHQpe2FyZ3VtZW50cy5sZW5ndGh8fCh0PWYpO3JldHVybiBmdW5jdGlvbihlLHIpe3JldHVybiBlJiZyP3QoZS5fX2RhdGFfXyxyLl9fZGF0YV9fKTohZS0hcn19LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtmb3IodmFyIGU9LTEscj10aGlzLmxlbmd0aDsrK2U8cjspdGhpc1tlXS5zb3J0KHQpO3JldHVybiB0aGlzLm9yZGVyKCl9LFkuZWFjaD1mdW5jdGlvbih0KXtyZXR1cm4gdXQodGhpcyxmdW5jdGlvbihlLHIsbil7dC5jYWxsKGUsZS5fX2RhdGFfXyxyLG4pfSl9LFkuY2FsbD1mdW5jdGlvbih0KXt2YXIgZT1uKGFyZ3VtZW50cyk7cmV0dXJuIHQuYXBwbHkoZVswXT10aGlzLGUpLHRoaXN9LFkuZW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5ub2RlKCl9LFkubm9kZT1mdW5jdGlvbigpe2Zvcih2YXIgdD0wLGU9dGhpcy5sZW5ndGg7dDxlO3QrKylmb3IodmFyIHI9dGhpc1t0XSxuPTAsaT1yLmxlbmd0aDtuPGk7bisrKXt2YXIgYT1yW25dO2lmKGEpcmV0dXJuIGF9cmV0dXJuIG51bGx9LFkuc2l6ZT1mdW5jdGlvbigpe3ZhciB0PTA7cmV0dXJuIHV0KHRoaXMsZnVuY3Rpb24oKXsrK3R9KSx0fTt2YXIgZnQ9W107ZnVuY3Rpb24gcHQoZSxyLGkpe3ZhciBhPSJfX29uIitlLG89ZS5pbmRleE9mKCIuIikscz1ndDtvPjAmJihlPWUuc2xpY2UoMCxvKSk7dmFyIGw9ZHQuZ2V0KGUpO2Z1bmN0aW9uIGMoKXt2YXIgdD10aGlzW2FdO3QmJih0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoZSx0LHQuJCksZGVsZXRlIHRoaXNbYV0pfXJldHVybiBsJiYoZT1sLHM9bXQpLG8/cj9mdW5jdGlvbigpe3ZhciB0PXMocixuKGFyZ3VtZW50cykpO2MuY2FsbCh0aGlzKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoZSx0aGlzW2FdPXQsdC4kPWkpLHQuXz1yfTpjOnI/RDpmdW5jdGlvbigpe3ZhciByLG49bmV3IFJlZ0V4cCgiXl9fb24oW14uXSspIit0LnJlcXVvdGUoZSkrIiQiKTtmb3IodmFyIGkgaW4gdGhpcylpZihyPWkubWF0Y2gobikpe3ZhciBhPXRoaXNbaV07dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKHJbMV0sYSxhLiQpLGRlbGV0ZSB0aGlzW2ldfX19dC5zZWxlY3Rpb24uZW50ZXI9aHQsdC5zZWxlY3Rpb24uZW50ZXIucHJvdG90eXBlPWZ0LGZ0LmFwcGVuZD1ZLmFwcGVuZCxmdC5lbXB0eT1ZLmVtcHR5LGZ0Lm5vZGU9WS5ub2RlLGZ0LmNhbGw9WS5jYWxsLGZ0LnNpemU9WS5zaXplLGZ0LnNlbGVjdD1mdW5jdGlvbih0KXtmb3IodmFyIGUscixuLGksYSxvPVtdLHM9LTEsbD10aGlzLmxlbmd0aDsrK3M8bDspe249KGk9dGhpc1tzXSkudXBkYXRlLG8ucHVzaChlPVtdKSxlLnBhcmVudE5vZGU9aS5wYXJlbnROb2RlO2Zvcih2YXIgYz0tMSx1PWkubGVuZ3RoOysrYzx1OykoYT1pW2NdKT8oZS5wdXNoKG5bY109cj10LmNhbGwoaS5wYXJlbnROb2RlLGEuX19kYXRhX18sYyxzKSksci5fX2RhdGFfXz1hLl9fZGF0YV9fKTplLnB1c2gobnVsbCl9cmV0dXJuIHEobyl9LGZ0Lmluc2VydD1mdW5jdGlvbih0LGUpe3ZhciByLG4saTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyJiYocj10aGlzLGU9ZnVuY3Rpb24odCxlLGEpe3ZhciBvLHM9clthXS51cGRhdGUsbD1zLmxlbmd0aDtmb3IoYSE9aSYmKGk9YSxuPTApLGU+PW4mJihuPWUrMSk7IShvPXNbbl0pJiYrK248bDspO3JldHVybiBvfSksWS5pbnNlcnQuY2FsbCh0aGlzLHQsZSl9LHQuc2VsZWN0PWZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiJzdHJpbmciPT10eXBlb2YgdD8oZT1bSCh0LGkpXSkucGFyZW50Tm9kZT1pLmRvY3VtZW50RWxlbWVudDooZT1bdF0pLnBhcmVudE5vZGU9YSh0KSxxKFtlXSl9LHQuc2VsZWN0QWxsPWZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiJzdHJpbmciPT10eXBlb2YgdD8oZT1uKEcodCxpKSkpLnBhcmVudE5vZGU9aS5kb2N1bWVudEVsZW1lbnQ6KGU9bih0KSkucGFyZW50Tm9kZT1udWxsLHEoW2VdKX0sWS5vbj1mdW5jdGlvbih0LGUscil7dmFyIG49YXJndW1lbnRzLmxlbmd0aDtpZihuPDMpe2lmKCJzdHJpbmciIT10eXBlb2YgdCl7Zm9yKHIgaW4gbjwyJiYoZT0hMSksdCl0aGlzLmVhY2gocHQocix0W3JdLGUpKTtyZXR1cm4gdGhpc31pZihuPDIpcmV0dXJuKG49dGhpcy5ub2RlKClbIl9fb24iK3RdKSYmbi5fO3I9ITF9cmV0dXJuIHRoaXMuZWFjaChwdCh0LGUscikpfTt2YXIgZHQ9dC5tYXAoe21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSk7ZnVuY3Rpb24gZ3QoZSxyKXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGk9dC5ldmVudDt0LmV2ZW50PW4sclswXT10aGlzLl9fZGF0YV9fO3RyeXtlLmFwcGx5KHRoaXMscil9ZmluYWxseXt0LmV2ZW50PWl9fX1mdW5jdGlvbiBtdCh0LGUpe3ZhciByPWd0KHQsZSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPXQucmVsYXRlZFRhcmdldDtlJiYoZT09PXRoaXN8fDgmZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0aGlzKSl8fHIuY2FsbCh0aGlzLHQpfX1pJiZkdC5mb3JFYWNoKGZ1bmN0aW9uKHQpeyJvbiIrdCBpbiBpJiZkdC5yZW1vdmUodCl9KTt2YXIgdnQseXQ9MDtmdW5jdGlvbiB4dChlKXt2YXIgcj0iLmRyYWdzdXBwcmVzcy0iKyArK3l0LG49ImNsaWNrIityLGk9dC5zZWxlY3QobyhlKSkub24oInRvdWNobW92ZSIrcixGKS5vbigiZHJhZ3N0YXJ0IityLEYpLm9uKCJzZWxlY3RzdGFydCIrcixGKTtpZihudWxsPT12dCYmKHZ0PSEoIm9uc2VsZWN0c3RhcnQiaW4gZSkmJkkoZS5zdHlsZSwidXNlclNlbGVjdCIpKSx2dCl7dmFyIHM9YShlKS5zdHlsZSxsPXNbdnRdO3NbdnRdPSJub25lIn1yZXR1cm4gZnVuY3Rpb24odCl7aWYoaS5vbihyLG51bGwpLHZ0JiYoc1t2dF09bCksdCl7dmFyIGU9ZnVuY3Rpb24oKXtpLm9uKG4sbnVsbCl9O2kub24obixmdW5jdGlvbigpe0YoKSxlKCl9LCEwKSxzZXRUaW1lb3V0KGUsMCl9fX10Lm1vdXNlPWZ1bmN0aW9uKHQpe3JldHVybiBfdCh0LE4oKSl9O3ZhciBidD10aGlzLm5hdmlnYXRvciYmL1dlYktpdC8udGVzdCh0aGlzLm5hdmlnYXRvci51c2VyQWdlbnQpPy0xOjA7ZnVuY3Rpb24gX3QoZSxyKXtyLmNoYW5nZWRUb3VjaGVzJiYocj1yLmNoYW5nZWRUb3VjaGVzWzBdKTt2YXIgbj1lLm93bmVyU1ZHRWxlbWVudHx8ZTtpZihuLmNyZWF0ZVNWR1BvaW50KXt2YXIgaT1uLmNyZWF0ZVNWR1BvaW50KCk7aWYoYnQ8MCl7dmFyIGE9byhlKTtpZihhLnNjcm9sbFh8fGEuc2Nyb2xsWSl7dmFyIHM9KG49dC5zZWxlY3QoImJvZHkiKS5hcHBlbmQoInN2ZyIpLnN0eWxlKHtwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDowLGxlZnQ6MCxtYXJnaW46MCxwYWRkaW5nOjAsYm9yZGVyOiJub25lIn0sImltcG9ydGFudCIpKVswXVswXS5nZXRTY3JlZW5DVE0oKTtidD0hKHMuZnx8cy5lKSxuLnJlbW92ZSgpfX1yZXR1cm4gYnQ/KGkueD1yLnBhZ2VYLGkueT1yLnBhZ2VZKTooaS54PXIuY2xpZW50WCxpLnk9ci5jbGllbnRZKSxbKGk9aS5tYXRyaXhUcmFuc2Zvcm0oZS5nZXRTY3JlZW5DVE0oKS5pbnZlcnNlKCkpKS54LGkueV19dmFyIGw9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm5bci5jbGllbnRYLWwubGVmdC1lLmNsaWVudExlZnQsci5jbGllbnRZLWwudG9wLWUuY2xpZW50VG9wXX1mdW5jdGlvbiB3dCgpe3JldHVybiB0LmV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLmlkZW50aWZpZXJ9dC50b3VjaD1mdW5jdGlvbih0LGUscil7aWYoYXJndW1lbnRzLmxlbmd0aDwzJiYocj1lLGU9TigpLmNoYW5nZWRUb3VjaGVzKSxlKWZvcih2YXIgbixpPTAsYT1lLmxlbmd0aDtpPGE7KytpKWlmKChuPWVbaV0pLmlkZW50aWZpZXI9PT1yKXJldHVybiBfdCh0LG4pfSx0LmJlaGF2aW9yLmRyYWc9ZnVuY3Rpb24oKXt2YXIgZT1qKGEsImRyYWciLCJkcmFnc3RhcnQiLCJkcmFnZW5kIikscj1udWxsLG49cyhELHQubW91c2UsbywibW91c2Vtb3ZlIiwibW91c2V1cCIpLGk9cyh3dCx0LnRvdWNoLHosInRvdWNobW92ZSIsInRvdWNoZW5kIik7ZnVuY3Rpb24gYSgpe3RoaXMub24oIm1vdXNlZG93bi5kcmFnIixuKS5vbigidG91Y2hzdGFydC5kcmFnIixpKX1mdW5jdGlvbiBzKG4saSxhLG8scyl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGwsYz10LmV2ZW50LnRhcmdldC5jb3JyZXNwb25kaW5nRWxlbWVudHx8dC5ldmVudC50YXJnZXQsdT10aGlzLnBhcmVudE5vZGUsaD1lLm9mKHRoaXMsYXJndW1lbnRzKSxmPTAscD1uKCksZD0iLmRyYWciKyhudWxsPT1wPyIiOiItIitwKSxnPXQuc2VsZWN0KGEoYykpLm9uKG8rZCxmdW5jdGlvbigpe3ZhciB0LGUscj1pKHUscCk7aWYoIXIpcmV0dXJuO3Q9clswXS12WzBdLGU9clsxXS12WzFdLGZ8PXR8ZSx2PXIsaCh7dHlwZToiZHJhZyIseDpyWzBdK2xbMF0seTpyWzFdK2xbMV0sZHg6dCxkeTplfSl9KS5vbihzK2QsZnVuY3Rpb24oKXtpZighaSh1LHApKXJldHVybjtnLm9uKG8rZCxudWxsKS5vbihzK2QsbnVsbCksbShmKSxoKHt0eXBlOiJkcmFnZW5kIn0pfSksbT14dChjKSx2PWkodSxwKTtsPXI/WyhsPXIuYXBwbHkodGhpcyxhcmd1bWVudHMpKS54LXZbMF0sbC55LXZbMV1dOlswLDBdLGgoe3R5cGU6ImRyYWdzdGFydCJ9KX19cmV0dXJuIGEub3JpZ2luPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsYSk6cn0sdC5yZWJpbmQoYSxlLCJvbiIpfSx0LnRvdWNoZXM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyJiYoZT1OKCkudG91Y2hlcyksZT9uKGUpLm1hcChmdW5jdGlvbihlKXt2YXIgcj1fdCh0LGUpO3JldHVybiByLmlkZW50aWZpZXI9ZS5pZGVudGlmaWVyLHJ9KTpbXX07dmFyIGt0PTFlLTYsTXQ9a3Qqa3QsQXQ9TWF0aC5QSSxUdD0yKkF0LFN0PVR0LWt0LEV0PUF0LzIsQ3Q9QXQvMTgwLEx0PTE4MC9BdDtmdW5jdGlvbiB6dCh0KXtyZXR1cm4gdD4wPzE6dDwwPy0xOjB9ZnVuY3Rpb24gUHQodCxlLHIpe3JldHVybihlWzBdLXRbMF0pKihyWzFdLXRbMV0pLShlWzFdLXRbMV0pKihyWzBdLXRbMF0pfWZ1bmN0aW9uIEl0KHQpe3JldHVybiB0PjE/MDp0PC0xP0F0Ok1hdGguYWNvcyh0KX1mdW5jdGlvbiBPdCh0KXtyZXR1cm4gdD4xP0V0OnQ8LTE/LUV0Ok1hdGguYXNpbih0KX1mdW5jdGlvbiBEdCh0KXtyZXR1cm4oKHQ9TWF0aC5leHAodCkpKzEvdCkvMn1mdW5jdGlvbiBSdCh0KXtyZXR1cm4odD1NYXRoLnNpbih0LzIpKSp0fXZhciBCdD1NYXRoLlNRUlQyO3QuaW50ZXJwb2xhdGVab29tPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPXRbMF0sYT10WzFdLG89dFsyXSxzPWVbMF0sbD1lWzFdLGM9ZVsyXSx1PXMtaSxoPWwtYSxmPXUqdStoKmg7aWYoZjxNdCluPU1hdGgubG9nKGMvbykvQnQscj1mdW5jdGlvbih0KXtyZXR1cm5baSt0KnUsYSt0KmgsbypNYXRoLmV4cChCdCp0Km4pXX07ZWxzZXt2YXIgcD1NYXRoLnNxcnQoZiksZD0oYypjLW8qbys0KmYpLygyKm8qMipwKSxnPShjKmMtbypvLTQqZikvKDIqYyoyKnApLG09TWF0aC5sb2coTWF0aC5zcXJ0KGQqZCsxKS1kKSx2PU1hdGgubG9nKE1hdGguc3FydChnKmcrMSktZyk7bj0odi1tKS9CdCxyPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dCpuLHM9RHQobSksbD1vLygyKnApKihzKihlPUJ0KnIrbSwoKGU9TWF0aC5leHAoMiplKSktMSkvKGUrMSkpLWZ1bmN0aW9uKHQpe3JldHVybigodD1NYXRoLmV4cCh0KSktMS90KS8yfShtKSk7cmV0dXJuW2krbCp1LGErbCpoLG8qcy9EdChCdCpyK20pXX19cmV0dXJuIHIuZHVyYXRpb249MWUzKm4scn0sdC5iZWhhdmlvci56b29tPWZ1bmN0aW9uKCl7dmFyIGUscixuLGEscyxsLGMsdSxoLGY9e3g6MCx5OjAsazoxfSxwPVs5NjAsNTAwXSxkPWp0LGc9MjUwLG09MCx2PSJtb3VzZWRvd24uem9vbSIseT0ibW91c2Vtb3ZlLnpvb20iLHg9Im1vdXNldXAuem9vbSIsYj0idG91Y2hzdGFydC56b29tIixfPWoodywiem9vbXN0YXJ0Iiwiem9vbSIsInpvb21lbmQiKTtmdW5jdGlvbiB3KHQpe3Qub24odix6KS5vbihOdCsiLnpvb20iLEkpLm9uKCJkYmxjbGljay56b29tIixPKS5vbihiLFApfWZ1bmN0aW9uIGsodCl7cmV0dXJuWyh0WzBdLWYueCkvZi5rLCh0WzFdLWYueSkvZi5rXX1mdW5jdGlvbiBNKHQpe2Yuaz1NYXRoLm1heChkWzBdLE1hdGgubWluKGRbMV0sdCkpfWZ1bmN0aW9uIEEodCxlKXtlPWZ1bmN0aW9uKHQpe3JldHVyblt0WzBdKmYuaytmLngsdFsxXSpmLmsrZi55XX0oZSksZi54Kz10WzBdLWVbMF0sZi55Kz10WzFdLWVbMV19ZnVuY3Rpb24gVChlLG4saSxhKXtlLl9fY2hhcnRfXz17eDpmLngseTpmLnksazpmLmt9LE0oTWF0aC5wb3coMixhKSksQShyPW4saSksZT10LnNlbGVjdChlKSxnPjAmJihlPWUudHJhbnNpdGlvbigpLmR1cmF0aW9uKGcpKSxlLmNhbGwody5ldmVudCl9ZnVuY3Rpb24gUygpe2MmJmMuZG9tYWluKGwucmFuZ2UoKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuKHQtZi54KS9mLmt9KS5tYXAobC5pbnZlcnQpKSxoJiZoLmRvbWFpbih1LnJhbmdlKCkubWFwKGZ1bmN0aW9uKHQpe3JldHVybih0LWYueSkvZi5rfSkubWFwKHUuaW52ZXJ0KSl9ZnVuY3Rpb24gRSh0KXttKyt8fHQoe3R5cGU6Inpvb21zdGFydCJ9KX1mdW5jdGlvbiBDKHQpe1MoKSx0KHt0eXBlOiJ6b29tIixzY2FsZTpmLmssdHJhbnNsYXRlOltmLngsZi55XX0pfWZ1bmN0aW9uIEwodCl7LS1tfHwodCh7dHlwZToiem9vbWVuZCJ9KSxyPW51bGwpfWZ1bmN0aW9uIHooKXt2YXIgZT10aGlzLHI9Xy5vZihlLGFyZ3VtZW50cyksbj0wLGk9dC5zZWxlY3QobyhlKSkub24oeSxmdW5jdGlvbigpe249MSxBKHQubW91c2UoZSksYSksQyhyKX0pLm9uKHgsZnVuY3Rpb24oKXtpLm9uKHksbnVsbCkub24oeCxudWxsKSxzKG4pLEwocil9KSxhPWsodC5tb3VzZShlKSkscz14dChlKTtocy5jYWxsKGUpLEUocil9ZnVuY3Rpb24gUCgpe3ZhciBlLHI9dGhpcyxuPV8ub2Yocixhcmd1bWVudHMpLGk9e30sYT0wLG89Ii56b29tLSIrdC5ldmVudC5jaGFuZ2VkVG91Y2hlc1swXS5pZGVudGlmaWVyLGw9InRvdWNobW92ZSIrbyxjPSJ0b3VjaGVuZCIrbyx1PVtdLGg9dC5zZWxlY3QocikscD14dChyKTtmdW5jdGlvbiBkKCl7dmFyIG49dC50b3VjaGVzKHIpO3JldHVybiBlPWYuayxuLmZvckVhY2goZnVuY3Rpb24odCl7dC5pZGVudGlmaWVyIGluIGkmJihpW3QuaWRlbnRpZmllcl09ayh0KSl9KSxufWZ1bmN0aW9uIGcoKXt2YXIgZT10LmV2ZW50LnRhcmdldDt0LnNlbGVjdChlKS5vbihsLG0pLm9uKGMseSksdS5wdXNoKGUpO2Zvcih2YXIgbj10LmV2ZW50LmNoYW5nZWRUb3VjaGVzLG89MCxoPW4ubGVuZ3RoO288aDsrK28paVtuW29dLmlkZW50aWZpZXJdPW51bGw7dmFyIHA9ZCgpLGc9RGF0ZS5ub3coKTtpZigxPT09cC5sZW5ndGgpe2lmKGctczw1MDApe3ZhciB2PXBbMF07VChyLHYsaVt2LmlkZW50aWZpZXJdLE1hdGguZmxvb3IoTWF0aC5sb2coZi5rKS9NYXRoLkxOMikrMSksRigpfXM9Z31lbHNlIGlmKHAubGVuZ3RoPjEpe3Y9cFswXTt2YXIgeD1wWzFdLGI9dlswXS14WzBdLF89dlsxXS14WzFdO2E9YipiK18qX319ZnVuY3Rpb24gbSgpe3ZhciBvLGwsYyx1LGg9dC50b3VjaGVzKHIpO2hzLmNhbGwocik7Zm9yKHZhciBmPTAscD1oLmxlbmd0aDtmPHA7KytmLHU9bnVsbClpZihjPWhbZl0sdT1pW2MuaWRlbnRpZmllcl0pe2lmKGwpYnJlYWs7bz1jLGw9dX1pZih1KXt2YXIgZD0oZD1jWzBdLW9bMF0pKmQrKGQ9Y1sxXS1vWzFdKSpkLGc9YSYmTWF0aC5zcXJ0KGQvYSk7bz1bKG9bMF0rY1swXSkvMiwob1sxXStjWzFdKS8yXSxsPVsobFswXSt1WzBdKS8yLChsWzFdK3VbMV0pLzJdLE0oZyplKX1zPW51bGwsQShvLGwpLEMobil9ZnVuY3Rpb24geSgpe2lmKHQuZXZlbnQudG91Y2hlcy5sZW5ndGgpe2Zvcih2YXIgZT10LmV2ZW50LmNoYW5nZWRUb3VjaGVzLHI9MCxhPWUubGVuZ3RoO3I8YTsrK3IpZGVsZXRlIGlbZVtyXS5pZGVudGlmaWVyXTtmb3IodmFyIHMgaW4gaSlyZXR1cm4gdm9pZCBkKCl9dC5zZWxlY3RBbGwodSkub24obyxudWxsKSxoLm9uKHYseikub24oYixQKSxwKCksTChuKX1nKCksRShuKSxoLm9uKHYsbnVsbCkub24oYixnKX1mdW5jdGlvbiBJKCl7dmFyIGk9Xy5vZih0aGlzLGFyZ3VtZW50cyk7YT9jbGVhclRpbWVvdXQoYSk6KGhzLmNhbGwodGhpcyksZT1rKHI9bnx8dC5tb3VzZSh0aGlzKSksRShpKSksYT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7YT1udWxsLEwoaSl9LDUwKSxGKCksTShNYXRoLnBvdygyLC4wMDIqRnQoKSkqZi5rKSxBKHIsZSksQyhpKX1mdW5jdGlvbiBPKCl7dmFyIGU9dC5tb3VzZSh0aGlzKSxyPU1hdGgubG9nKGYuaykvTWF0aC5MTjI7VCh0aGlzLGUsayhlKSx0LmV2ZW50LnNoaWZ0S2V5P01hdGguY2VpbChyKS0xOk1hdGguZmxvb3IocikrMSl9cmV0dXJuIE50fHwoTnQ9Im9ud2hlZWwiaW4gaT8oRnQ9ZnVuY3Rpb24oKXtyZXR1cm4tdC5ldmVudC5kZWx0YVkqKHQuZXZlbnQuZGVsdGFNb2RlPzEyMDoxKX0sIndoZWVsIik6Im9ubW91c2V3aGVlbCJpbiBpPyhGdD1mdW5jdGlvbigpe3JldHVybiB0LmV2ZW50LndoZWVsRGVsdGF9LCJtb3VzZXdoZWVsIik6KEZ0PWZ1bmN0aW9uKCl7cmV0dXJuLXQuZXZlbnQuZGV0YWlsfSwiTW96TW91c2VQaXhlbFNjcm9sbCIpKSx3LmV2ZW50PWZ1bmN0aW9uKGUpe2UuZWFjaChmdW5jdGlvbigpe3ZhciBlPV8ub2YodGhpcyxhcmd1bWVudHMpLG49Zjtkcz90LnNlbGVjdCh0aGlzKS50cmFuc2l0aW9uKCkuZWFjaCgic3RhcnQuem9vbSIsZnVuY3Rpb24oKXtmPXRoaXMuX19jaGFydF9ffHx7eDowLHk6MCxrOjF9LEUoZSl9KS50d2Vlbigiem9vbTp6b29tIixmdW5jdGlvbigpe3ZhciBpPXBbMF0sYT1wWzFdLG89cj9yWzBdOmkvMixzPXI/clsxXTphLzIsbD10LmludGVycG9sYXRlWm9vbShbKG8tZi54KS9mLmssKHMtZi55KS9mLmssaS9mLmtdLFsoby1uLngpL24uaywocy1uLnkpL24uayxpL24ua10pO3JldHVybiBmdW5jdGlvbih0KXt2YXIgcj1sKHQpLG49aS9yWzJdO3RoaXMuX19jaGFydF9fPWY9e3g6by1yWzBdKm4seTpzLXJbMV0qbixrOm59LEMoZSl9fSkuZWFjaCgiaW50ZXJydXB0Lnpvb20iLGZ1bmN0aW9uKCl7TChlKX0pLmVhY2goImVuZC56b29tIixmdW5jdGlvbigpe0woZSl9KToodGhpcy5fX2NoYXJ0X189ZixFKGUpLEMoZSksTChlKSl9KX0sdy50cmFuc2xhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9e3g6K3RbMF0seTordFsxXSxrOmYua30sUygpLHcpOltmLngsZi55XX0sdy5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj17eDpmLngseTpmLnksazpudWxsfSxNKCt0KSxTKCksdyk6Zi5rfSx3LnNjYWxlRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPW51bGw9PXQ/anQ6Wyt0WzBdLCt0WzFdXSx3KTpkfSx3LmNlbnRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10JiZbK3RbMF0sK3RbMV1dLHcpOm59LHcuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD10JiZbK3RbMF0sK3RbMV1dLHcpOnB9LHcuZHVyYXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGc9K3Qsdyk6Z30sdy54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPXQsbD10LmNvcHkoKSxmPXt4OjAseTowLGs6MX0sdyk6Y30sdy55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPXQsdT10LmNvcHkoKSxmPXt4OjAseTowLGs6MX0sdyk6aH0sdC5yZWJpbmQodyxfLCJvbiIpfTt2YXIgRnQsTnQsanQ9WzAsMS8wXTtmdW5jdGlvbiBWdCgpe31mdW5jdGlvbiBVdCh0LGUscil7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBVdD8odGhpcy5oPSt0LHRoaXMucz0rZSx2b2lkKHRoaXMubD0rcikpOmFyZ3VtZW50cy5sZW5ndGg8Mj90IGluc3RhbmNlb2YgVXQ/bmV3IFV0KHQuaCx0LnMsdC5sKTp1ZSgiIit0LGhlLFV0KTpuZXcgVXQodCxlLHIpfXQuY29sb3I9VnQsVnQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkrIiJ9LHQuaHNsPVV0O3ZhciBxdD1VdC5wcm90b3R5cGU9bmV3IFZ0O2Z1bmN0aW9uIEh0KHQsZSxyKXt2YXIgbixpO2Z1bmN0aW9uIGEodCl7cmV0dXJuIE1hdGgucm91bmQoMjU1KmZ1bmN0aW9uKHQpe3JldHVybiB0PjM2MD90LT0zNjA6dDwwJiYodCs9MzYwKSx0PDYwP24rKGktbikqdC82MDp0PDE4MD9pOnQ8MjQwP24rKGktbikqKDI0MC10KS82MDpufSh0KSl9cmV0dXJuIHQ9aXNOYU4odCk/MDoodCU9MzYwKTwwP3QrMzYwOnQsZT1pc05hTihlKT8wOmU8MD8wOmU+MT8xOmUsbj0yKihyPXI8MD8wOnI+MT8xOnIpLShpPXI8PS41P3IqKDErZSk6citlLXIqZSksbmV3IGFlKGEodCsxMjApLGEodCksYSh0LTEyMCkpfWZ1bmN0aW9uIEd0KGUscixuKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIEd0Pyh0aGlzLmg9K2UsdGhpcy5jPStyLHZvaWQodGhpcy5sPStuKSk6YXJndW1lbnRzLmxlbmd0aDwyP2UgaW5zdGFuY2VvZiBHdD9uZXcgR3QoZS5oLGUuYyxlLmwpOmVlKGUgaW5zdGFuY2VvZiBYdD9lLmw6KGU9ZmUoKGU9dC5yZ2IoZSkpLnIsZS5nLGUuYikpLmwsZS5hLGUuYik6bmV3IEd0KGUscixuKX1xdC5icmlnaHRlcj1mdW5jdGlvbih0KXtyZXR1cm4gdD1NYXRoLnBvdyguNyxhcmd1bWVudHMubGVuZ3RoP3Q6MSksbmV3IFV0KHRoaXMuaCx0aGlzLnMsdGhpcy5sL3QpfSxxdC5kYXJrZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9TWF0aC5wb3coLjcsYXJndW1lbnRzLmxlbmd0aD90OjEpLG5ldyBVdCh0aGlzLmgsdGhpcy5zLHQqdGhpcy5sKX0scXQucmdiPWZ1bmN0aW9uKCl7cmV0dXJuIEh0KHRoaXMuaCx0aGlzLnMsdGhpcy5sKX0sdC5oY2w9R3Q7dmFyIFd0PUd0LnByb3RvdHlwZT1uZXcgVnQ7ZnVuY3Rpb24gWXQodCxlLHIpe3JldHVybiBpc05hTih0KSYmKHQ9MCksaXNOYU4oZSkmJihlPTApLG5ldyBYdChyLE1hdGguY29zKHQqPUN0KSplLE1hdGguc2luKHQpKmUpfWZ1bmN0aW9uIFh0KHQsZSxyKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIFh0Pyh0aGlzLmw9K3QsdGhpcy5hPStlLHZvaWQodGhpcy5iPStyKSk6YXJndW1lbnRzLmxlbmd0aDwyP3QgaW5zdGFuY2VvZiBYdD9uZXcgWHQodC5sLHQuYSx0LmIpOnQgaW5zdGFuY2VvZiBHdD9ZdCh0LmgsdC5jLHQubCk6ZmUoKHQ9YWUodCkpLnIsdC5nLHQuYik6bmV3IFh0KHQsZSxyKX1XdC5icmlnaHRlcj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IEd0KHRoaXMuaCx0aGlzLmMsTWF0aC5taW4oMTAwLHRoaXMubCtadCooYXJndW1lbnRzLmxlbmd0aD90OjEpKSl9LFd0LmRhcmtlcj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IEd0KHRoaXMuaCx0aGlzLmMsTWF0aC5tYXgoMCx0aGlzLmwtWnQqKGFyZ3VtZW50cy5sZW5ndGg/dDoxKSkpfSxXdC5yZ2I9ZnVuY3Rpb24oKXtyZXR1cm4gWXQodGhpcy5oLHRoaXMuYyx0aGlzLmwpLnJnYigpfSx0LmxhYj1YdDt2YXIgWnQ9MTgsJHQ9Ljk1MDQ3LEp0PTEsS3Q9MS4wODg4MyxRdD1YdC5wcm90b3R5cGU9bmV3IFZ0O2Z1bmN0aW9uIHRlKHQsZSxyKXt2YXIgbj0odCsxNikvMTE2LGk9bitlLzUwMCxhPW4tci8yMDA7cmV0dXJuIG5ldyBhZShpZSgzLjI0MDQ1NDIqKGk9cmUoaSkqJHQpLTEuNTM3MTM4NSoobj1yZShuKSpKdCktLjQ5ODUzMTQqKGE9cmUoYSkqS3QpKSxpZSgtLjk2OTI2NippKzEuODc2MDEwOCpuKy4wNDE1NTYqYSksaWUoLjA1NTY0MzQqaS0uMjA0MDI1OSpuKzEuMDU3MjI1MiphKSl9ZnVuY3Rpb24gZWUodCxlLHIpe3JldHVybiB0PjA/bmV3IEd0KE1hdGguYXRhbjIocixlKSpMdCxNYXRoLnNxcnQoZSplK3IqciksdCk6bmV3IEd0KE5hTixOYU4sdCl9ZnVuY3Rpb24gcmUodCl7cmV0dXJuIHQ+LjIwNjg5MzAzND90KnQqdDoodC00LzI5KS83Ljc4NzAzN31mdW5jdGlvbiBuZSh0KXtyZXR1cm4gdD4uMDA4ODU2P01hdGgucG93KHQsMS8zKTo3Ljc4NzAzNyp0KzQvMjl9ZnVuY3Rpb24gaWUodCl7cmV0dXJuIE1hdGgucm91bmQoMjU1Kih0PD0uMDAzMDQ/MTIuOTIqdDoxLjA1NSpNYXRoLnBvdyh0LDEvMi40KS0uMDU1KSl9ZnVuY3Rpb24gYWUodCxlLHIpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgYWU/KHRoaXMucj1+fnQsdGhpcy5nPX5+ZSx2b2lkKHRoaXMuYj1+fnIpKTphcmd1bWVudHMubGVuZ3RoPDI/dCBpbnN0YW5jZW9mIGFlP25ldyBhZSh0LnIsdC5nLHQuYik6dWUoIiIrdCxhZSxIdCk6bmV3IGFlKHQsZSxyKX1mdW5jdGlvbiBvZSh0KXtyZXR1cm4gbmV3IGFlKHQ+PjE2LHQ+PjgmMjU1LDI1NSZ0KX1mdW5jdGlvbiBzZSh0KXtyZXR1cm4gb2UodCkrIiJ9UXQuYnJpZ2h0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBYdChNYXRoLm1pbigxMDAsdGhpcy5sK1p0Kihhcmd1bWVudHMubGVuZ3RoP3Q6MSkpLHRoaXMuYSx0aGlzLmIpfSxRdC5kYXJrZXI9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBYdChNYXRoLm1heCgwLHRoaXMubC1adCooYXJndW1lbnRzLmxlbmd0aD90OjEpKSx0aGlzLmEsdGhpcy5iKX0sUXQucmdiPWZ1bmN0aW9uKCl7cmV0dXJuIHRlKHRoaXMubCx0aGlzLmEsdGhpcy5iKX0sdC5yZ2I9YWU7dmFyIGxlPWFlLnByb3RvdHlwZT1uZXcgVnQ7ZnVuY3Rpb24gY2UodCl7cmV0dXJuIHQ8MTY/IjAiK01hdGgubWF4KDAsdCkudG9TdHJpbmcoMTYpOk1hdGgubWluKDI1NSx0KS50b1N0cmluZygxNil9ZnVuY3Rpb24gdWUodCxlLHIpe3ZhciBuLGksYSxvPTAscz0wLGw9MDtpZihuPS8oW2Etel0rKVwoKC4qKVwpLy5leGVjKHQ9dC50b0xvd2VyQ2FzZSgpKSlzd2l0Y2goaT1uWzJdLnNwbGl0KCIsIiksblsxXSl7Y2FzZSJoc2wiOnJldHVybiByKHBhcnNlRmxvYXQoaVswXSkscGFyc2VGbG9hdChpWzFdKS8xMDAscGFyc2VGbG9hdChpWzJdKS8xMDApO2Nhc2UicmdiIjpyZXR1cm4gZShkZShpWzBdKSxkZShpWzFdKSxkZShpWzJdKSl9cmV0dXJuKGE9Z2UuZ2V0KHQpKT9lKGEucixhLmcsYS5iKToobnVsbD09dHx8IiMiIT09dC5jaGFyQXQoMCl8fGlzTmFOKGE9cGFyc2VJbnQodC5zbGljZSgxKSwxNikpfHwoND09PXQubGVuZ3RoPyhvPSgzODQwJmEpPj40LG98PW8+PjQscz0yNDAmYSxzfD1zPj40LGw9MTUmYSxsfD1sPDw0KTo3PT09dC5sZW5ndGgmJihvPSgxNjcxMTY4MCZhKT4+MTYscz0oNjUyODAmYSk+PjgsbD0yNTUmYSkpLGUobyxzLGwpKX1mdW5jdGlvbiBoZSh0LGUscil7dmFyIG4saSxhPU1hdGgubWluKHQvPTI1NSxlLz0yNTUsci89MjU1KSxvPU1hdGgubWF4KHQsZSxyKSxzPW8tYSxsPShvK2EpLzI7cmV0dXJuIHM/KGk9bDwuNT9zLyhvK2EpOnMvKDItby1hKSxuPXQ9PW8/KGUtcikvcysoZTxyPzY6MCk6ZT09bz8oci10KS9zKzI6KHQtZSkvcys0LG4qPTYwKToobj1OYU4saT1sPjAmJmw8MT8wOm4pLG5ldyBVdChuLGksbCl9ZnVuY3Rpb24gZmUodCxlLHIpe3ZhciBuPW5lKCguNDEyNDU2NCoodD1wZSh0KSkrLjM1NzU3NjEqKGU9cGUoZSkpKy4xODA0Mzc1KihyPXBlKHIpKSkvJHQpLGk9bmUoKC4yMTI2NzI5KnQrLjcxNTE1MjIqZSsuMDcyMTc1KnIpL0p0KTtyZXR1cm4gWHQoMTE2KmktMTYsNTAwKihuLWkpLDIwMCooaS1uZSgoLjAxOTMzMzkqdCsuMTE5MTkyKmUrLjk1MDMwNDEqcikvS3QpKSl9ZnVuY3Rpb24gcGUodCl7cmV0dXJuKHQvPTI1NSk8PS4wNDA0NT90LzEyLjkyOk1hdGgucG93KCh0Ky4wNTUpLzEuMDU1LDIuNCl9ZnVuY3Rpb24gZGUodCl7dmFyIGU9cGFyc2VGbG9hdCh0KTtyZXR1cm4iJSI9PT10LmNoYXJBdCh0Lmxlbmd0aC0xKT9NYXRoLnJvdW5kKDIuNTUqZSk6ZX1sZS5icmlnaHRlcj1mdW5jdGlvbih0KXt0PU1hdGgucG93KC43LGFyZ3VtZW50cy5sZW5ndGg/dDoxKTt2YXIgZT10aGlzLnIscj10aGlzLmcsbj10aGlzLmIsaT0zMDtyZXR1cm4gZXx8cnx8bj8oZSYmZTxpJiYoZT1pKSxyJiZyPGkmJihyPWkpLG4mJm48aSYmKG49aSksbmV3IGFlKE1hdGgubWluKDI1NSxlL3QpLE1hdGgubWluKDI1NSxyL3QpLE1hdGgubWluKDI1NSxuL3QpKSk6bmV3IGFlKGksaSxpKX0sbGUuZGFya2VyPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgYWUoKHQ9TWF0aC5wb3coLjcsYXJndW1lbnRzLmxlbmd0aD90OjEpKSp0aGlzLnIsdCp0aGlzLmcsdCp0aGlzLmIpfSxsZS5oc2w9ZnVuY3Rpb24oKXtyZXR1cm4gaGUodGhpcy5yLHRoaXMuZyx0aGlzLmIpfSxsZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiIjIitjZSh0aGlzLnIpK2NlKHRoaXMuZykrY2UodGhpcy5iKX07dmFyIGdlPXQubWFwKHthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9KTtmdW5jdGlvbiBtZSh0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD90OmZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIHZlKHQpe3JldHVybiBmdW5jdGlvbihlLHIsbil7cmV0dXJuIDI9PT1hcmd1bWVudHMubGVuZ3RoJiYiZnVuY3Rpb24iPT10eXBlb2YgciYmKG49cixyPW51bGwpLHllKGUscix0LG4pfX1mdW5jdGlvbiB5ZShlLHIsaSxhKXt2YXIgbz17fSxzPXQuZGlzcGF0Y2goImJlZm9yZXNlbmQiLCJwcm9ncmVzcyIsImxvYWQiLCJlcnJvciIpLGw9e30sYz1uZXcgWE1MSHR0cFJlcXVlc3QsdT1udWxsO2Z1bmN0aW9uIGgoKXt2YXIgdCxlPWMuc3RhdHVzO2lmKCFlJiZmdW5jdGlvbih0KXt2YXIgZT10LnJlc3BvbnNlVHlwZTtyZXR1cm4gZSYmInRleHQiIT09ZT90LnJlc3BvbnNlOnQucmVzcG9uc2VUZXh0fShjKXx8ZT49MjAwJiZlPDMwMHx8MzA0PT09ZSl7dHJ5e3Q9aS5jYWxsKG8sYyl9Y2F0Y2godCl7cmV0dXJuIHZvaWQgcy5lcnJvci5jYWxsKG8sdCl9cy5sb2FkLmNhbGwobyx0KX1lbHNlIHMuZXJyb3IuY2FsbChvLGMpfXJldHVybiF0aGlzLlhEb21haW5SZXF1ZXN0fHwid2l0aENyZWRlbnRpYWxzImluIGN8fCEvXihodHRwKHMpPzopP1wvXC8vLnRlc3QoZSl8fChjPW5ldyBYRG9tYWluUmVxdWVzdCksIm9ubG9hZCJpbiBjP2Mub25sb2FkPWMub25lcnJvcj1oOmMub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7Yy5yZWFkeVN0YXRlPjMmJmgoKX0sYy5vbnByb2dyZXNzPWZ1bmN0aW9uKGUpe3ZhciByPXQuZXZlbnQ7dC5ldmVudD1lO3RyeXtzLnByb2dyZXNzLmNhbGwobyxjKX1maW5hbGx5e3QuZXZlbnQ9cn19LG8uaGVhZGVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9KHQrIiIpLnRvTG93ZXJDYXNlKCksYXJndW1lbnRzLmxlbmd0aDwyP2xbdF06KG51bGw9PWU/ZGVsZXRlIGxbdF06bFt0XT1lKyIiLG8pfSxvLm1pbWVUeXBlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW51bGw9PXQ/bnVsbDp0KyIiLG8pOnJ9LG8ucmVzcG9uc2VUeXBlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PXQsbyk6dX0sby5yZXNwb25zZT1mdW5jdGlvbih0KXtyZXR1cm4gaT10LG99LFsiZ2V0IiwicG9zdCJdLmZvckVhY2goZnVuY3Rpb24odCl7b1t0XT1mdW5jdGlvbigpe3JldHVybiBvLnNlbmQuYXBwbHkobyxbdF0uY29uY2F0KG4oYXJndW1lbnRzKSkpfX0pLG8uc2VuZD1mdW5jdGlvbih0LG4saSl7aWYoMj09PWFyZ3VtZW50cy5sZW5ndGgmJiJmdW5jdGlvbiI9PXR5cGVvZiBuJiYoaT1uLG49bnVsbCksYy5vcGVuKHQsZSwhMCksbnVsbD09cnx8ImFjY2VwdCJpbiBsfHwobC5hY2NlcHQ9cisiLCovKiIpLGMuc2V0UmVxdWVzdEhlYWRlcilmb3IodmFyIGEgaW4gbCljLnNldFJlcXVlc3RIZWFkZXIoYSxsW2FdKTtyZXR1cm4gbnVsbCE9ciYmYy5vdmVycmlkZU1pbWVUeXBlJiZjLm92ZXJyaWRlTWltZVR5cGUociksbnVsbCE9dSYmKGMucmVzcG9uc2VUeXBlPXUpLG51bGwhPWkmJm8ub24oImVycm9yIixpKS5vbigibG9hZCIsZnVuY3Rpb24odCl7aShudWxsLHQpfSkscy5iZWZvcmVzZW5kLmNhbGwobyxjKSxjLnNlbmQobnVsbD09bj9udWxsOm4pLG99LG8uYWJvcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gYy5hYm9ydCgpLG99LHQucmViaW5kKG8scywib24iKSxudWxsPT1hP286by5nZXQoZnVuY3Rpb24odCl7cmV0dXJuIDE9PT10Lmxlbmd0aD9mdW5jdGlvbihlLHIpe3QobnVsbD09ZT9yOm51bGwpfTp0fShhKSl9Z2UuZm9yRWFjaChmdW5jdGlvbih0LGUpe2dlLnNldCh0LG9lKGUpKX0pLHQuZnVuY3Rvcj1tZSx0Lnhocj12ZSh6KSx0LmRzdj1mdW5jdGlvbih0LGUpe3ZhciByPW5ldyBSZWdFeHAoJ1siJyt0KyJcbl0iKSxuPXQuY2hhckNvZGVBdCgwKTtmdW5jdGlvbiBpKHQscixuKXthcmd1bWVudHMubGVuZ3RoPDMmJihuPXIscj1udWxsKTt2YXIgaT15ZSh0LGUsbnVsbD09cj9hOm8ociksbik7cmV0dXJuIGkucm93PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2kucmVzcG9uc2UobnVsbD09KHI9dCk/YTpvKHQpKTpyfSxpfWZ1bmN0aW9uIGEodCl7cmV0dXJuIGkucGFyc2UodC5yZXNwb25zZVRleHQpfWZ1bmN0aW9uIG8odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBpLnBhcnNlKGUucmVzcG9uc2VUZXh0LHQpfX1mdW5jdGlvbiBzKGUpe3JldHVybiBlLm1hcChsKS5qb2luKHQpfWZ1bmN0aW9uIGwodCl7cmV0dXJuIHIudGVzdCh0KT8nIicrdC5yZXBsYWNlKC9cIi9nLCciIicpKyciJzp0fXJldHVybiBpLnBhcnNlPWZ1bmN0aW9uKHQsZSl7dmFyIHI7cmV0dXJuIGkucGFyc2VSb3dzKHQsZnVuY3Rpb24odCxuKXtpZihyKXJldHVybiByKHQsbi0xKTt2YXIgaT1uZXcgRnVuY3Rpb24oImQiLCJyZXR1cm4geyIrdC5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkodCkrIjogZFsiK2UrIl0ifSkuam9pbigiLCIpKyJ9Iik7cj1lP2Z1bmN0aW9uKHQscil7cmV0dXJuIGUoaSh0KSxyKX06aX0pfSxpLnBhcnNlUm93cz1mdW5jdGlvbih0LGUpe3ZhciByLGksYT17fSxvPXt9LHM9W10sbD10Lmxlbmd0aCxjPTAsdT0wO2Z1bmN0aW9uIGgoKXtpZihjPj1sKXJldHVybiBvO2lmKGkpcmV0dXJuIGk9ITEsYTt2YXIgZT1jO2lmKDM0PT09dC5jaGFyQ29kZUF0KGUpKXtmb3IodmFyIHI9ZTtyKys8bDspaWYoMzQ9PT10LmNoYXJDb2RlQXQocikpe2lmKDM0IT09dC5jaGFyQ29kZUF0KHIrMSkpYnJlYWs7KytyfXJldHVybiBjPXIrMiwxMz09PShzPXQuY2hhckNvZGVBdChyKzEpKT8oaT0hMCwxMD09PXQuY2hhckNvZGVBdChyKzIpJiYrK2MpOjEwPT09cyYmKGk9ITApLHQuc2xpY2UoZSsxLHIpLnJlcGxhY2UoLyIiL2csJyInKX1mb3IoO2M8bDspe3ZhciBzLHU9MTtpZigxMD09PShzPXQuY2hhckNvZGVBdChjKyspKSlpPSEwO2Vsc2UgaWYoMTM9PT1zKWk9ITAsMTA9PT10LmNoYXJDb2RlQXQoYykmJigrK2MsKyt1KTtlbHNlIGlmKHMhPT1uKWNvbnRpbnVlO3JldHVybiB0LnNsaWNlKGUsYy11KX1yZXR1cm4gdC5zbGljZShlKX1mb3IoOyhyPWgoKSkhPT1vOyl7Zm9yKHZhciBmPVtdO3IhPT1hJiZyIT09bzspZi5wdXNoKHIpLHI9aCgpO2UmJm51bGw9PShmPWUoZix1KyspKXx8cy5wdXNoKGYpfXJldHVybiBzfSxpLmZvcm1hdD1mdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGVbMF0pKXJldHVybiBpLmZvcm1hdFJvd3MoZSk7dmFyIHI9bmV3IEwsbj1bXTtyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiB0KXIuaGFzKGUpfHxuLnB1c2goci5hZGQoZSkpfSksW24ubWFwKGwpLmpvaW4odCldLmNvbmNhdChlLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gbi5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGwoZVt0XSl9KS5qb2luKHQpfSkpLmpvaW4oIlxuIil9LGkuZm9ybWF0Um93cz1mdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAocykuam9pbigiXG4iKX0saX0sdC5jc3Y9dC5kc3YoIiwiLCJ0ZXh0L2NzdiIpLHQudHN2PXQuZHN2KCJcdCIsInRleHQvdGFiLXNlcGFyYXRlZC12YWx1ZXMiKTt2YXIgeGUsYmUsX2Usd2Usa2U9dGhpc1tJKHRoaXMsInJlcXVlc3RBbmltYXRpb25GcmFtZSIpXXx8ZnVuY3Rpb24odCl7c2V0VGltZW91dCh0LDE3KX07ZnVuY3Rpb24gTWUodCxlLHIpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg7bjwyJiYoZT0wKSxuPDMmJihyPURhdGUubm93KCkpO3ZhciBpPXtjOnQsdDpyK2UsbjpudWxsfTtyZXR1cm4gYmU/YmUubj1pOnhlPWksYmU9aSxfZXx8KHdlPWNsZWFyVGltZW91dCh3ZSksX2U9MSxrZShBZSkpLGl9ZnVuY3Rpb24gQWUoKXt2YXIgdD1UZSgpLGU9U2UoKS10O2U+MjQ/KGlzRmluaXRlKGUpJiYoY2xlYXJUaW1lb3V0KHdlKSx3ZT1zZXRUaW1lb3V0KEFlLGUpKSxfZT0wKTooX2U9MSxrZShBZSkpfWZ1bmN0aW9uIFRlKCl7Zm9yKHZhciB0PURhdGUubm93KCksZT14ZTtlOyl0Pj1lLnQmJmUuYyh0LWUudCkmJihlLmM9bnVsbCksZT1lLm47cmV0dXJuIHR9ZnVuY3Rpb24gU2UoKXtmb3IodmFyIHQsZT14ZSxyPTEvMDtlOyllLmM/KGUudDxyJiYocj1lLnQpLGU9KHQ9ZSkubik6ZT10P3Qubj1lLm46eGU9ZS5uO3JldHVybiBiZT10LHJ9ZnVuY3Rpb24gRWUodCxlKXtyZXR1cm4gZS0odD9NYXRoLmNlaWwoTWF0aC5sb2codCkvTWF0aC5MTjEwKToxKX10LnRpbWVyPWZ1bmN0aW9uKCl7TWUuYXBwbHkodGhpcyxhcmd1bWVudHMpfSx0LnRpbWVyLmZsdXNoPWZ1bmN0aW9uKCl7VGUoKSxTZSgpfSx0LnJvdW5kPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU/TWF0aC5yb3VuZCh0KihlPU1hdGgucG93KDEwLGUpKSkvZTpNYXRoLnJvdW5kKHQpfTt2YXIgQ2U9WyJ5IiwieiIsImEiLCJmIiwicCIsIm4iLCJceGI1IiwibSIsIiIsImsiLCJNIiwiRyIsIlQiLCJQIiwiRSIsIloiLCJZIl0ubWFwKGZ1bmN0aW9uKHQsZSl7dmFyIHI9TWF0aC5wb3coMTAsMyp5KDgtZSkpO3JldHVybntzY2FsZTplPjg/ZnVuY3Rpb24odCl7cmV0dXJuIHQvcn06ZnVuY3Rpb24odCl7cmV0dXJuIHQqcn0sc3ltYm9sOnR9fSk7dC5mb3JtYXRQcmVmaXg9ZnVuY3Rpb24oZSxyKXt2YXIgbj0wO3JldHVybihlPStlKSYmKGU8MCYmKGUqPS0xKSxyJiYoZT10LnJvdW5kKGUsRWUoZSxyKSkpLG49MStNYXRoLmZsb29yKDFlLTEyK01hdGgubG9nKGUpL01hdGguTE4xMCksbj1NYXRoLm1heCgtMjQsTWF0aC5taW4oMjQsMypNYXRoLmZsb29yKChuLTEpLzMpKSkpLENlWzgrbi8zXX07dmFyIExlPS8oPzooW157XSk/KFs8Pj1eXSkpPyhbK1wtIF0pPyhbJCNdKT8oMCk/KFxkKyk/KCwpPyhcLi0/XGQrKT8oW2EteiVdKT8vaSx6ZT10Lm1hcCh7YjpmdW5jdGlvbih0KXtyZXR1cm4gdC50b1N0cmluZygyKX0sYzpmdW5jdGlvbih0KXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZSh0KX0sbzpmdW5jdGlvbih0KXtyZXR1cm4gdC50b1N0cmluZyg4KX0seDpmdW5jdGlvbih0KXtyZXR1cm4gdC50b1N0cmluZygxNil9LFg6ZnVuY3Rpb24odCl7cmV0dXJuIHQudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCl9LGc6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC50b1ByZWNpc2lvbihlKX0sZTpmdW5jdGlvbih0LGUpe3JldHVybiB0LnRvRXhwb25lbnRpYWwoZSl9LGY6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC50b0ZpeGVkKGUpfSxyOmZ1bmN0aW9uKGUscil7cmV0dXJuKGU9dC5yb3VuZChlLEVlKGUscikpKS50b0ZpeGVkKE1hdGgubWF4KDAsTWF0aC5taW4oMjAsRWUoZSooMSsxZS0xNSkscikpKSl9fSk7ZnVuY3Rpb24gUGUodCl7cmV0dXJuIHQrIiJ9dmFyIEllPXQudGltZT17fSxPZT1EYXRlO2Z1bmN0aW9uIERlKCl7dGhpcy5fPW5ldyBEYXRlKGFyZ3VtZW50cy5sZW5ndGg+MT9EYXRlLlVUQy5hcHBseSh0aGlzLGFyZ3VtZW50cyk6YXJndW1lbnRzWzBdKX1EZS5wcm90b3R5cGU9e2dldERhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fLmdldFVUQ0RhdGUoKX0sZ2V0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENEYXkoKX0sZ2V0RnVsbFllYXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fLmdldFVUQ0Z1bGxZZWFyKCl9LGdldEhvdXJzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENIb3VycygpfSxnZXRNaWxsaXNlY29uZHM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fLmdldFVUQ01pbGxpc2Vjb25kcygpfSxnZXRNaW51dGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENNaW51dGVzKCl9LGdldE1vbnRoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENNb250aCgpfSxnZXRTZWNvbmRzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENTZWNvbmRzKCl9LGdldFRpbWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fLmdldFRpbWUoKX0sZ2V0VGltZXpvbmVPZmZzZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gMH0sdmFsdWVPZjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl8udmFsdWVPZigpfSxzZXREYXRlOmZ1bmN0aW9uKCl7UmUuc2V0VVRDRGF0ZS5hcHBseSh0aGlzLl8sYXJndW1lbnRzKX0sc2V0RGF5OmZ1bmN0aW9uKCl7UmUuc2V0VVRDRGF5LmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxzZXRGdWxsWWVhcjpmdW5jdGlvbigpe1JlLnNldFVUQ0Z1bGxZZWFyLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxzZXRIb3VyczpmdW5jdGlvbigpe1JlLnNldFVUQ0hvdXJzLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxzZXRNaWxsaXNlY29uZHM6ZnVuY3Rpb24oKXtSZS5zZXRVVENNaWxsaXNlY29uZHMuYXBwbHkodGhpcy5fLGFyZ3VtZW50cyl9LHNldE1pbnV0ZXM6ZnVuY3Rpb24oKXtSZS5zZXRVVENNaW51dGVzLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxzZXRNb250aDpmdW5jdGlvbigpe1JlLnNldFVUQ01vbnRoLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxzZXRTZWNvbmRzOmZ1bmN0aW9uKCl7UmUuc2V0VVRDU2Vjb25kcy5hcHBseSh0aGlzLl8sYXJndW1lbnRzKX0sc2V0VGltZTpmdW5jdGlvbigpe1JlLnNldFRpbWUuYXBwbHkodGhpcy5fLGFyZ3VtZW50cyl9fTt2YXIgUmU9RGF0ZS5wcm90b3R5cGU7ZnVuY3Rpb24gQmUodCxlLHIpe2Z1bmN0aW9uIG4oZSl7dmFyIHI9dChlKSxuPWEociwxKTtyZXR1cm4gZS1yPG4tZT9yOm59ZnVuY3Rpb24gaShyKXtyZXR1cm4gZShyPXQobmV3IE9lKHItMSkpLDEpLHJ9ZnVuY3Rpb24gYSh0LHIpe3JldHVybiBlKHQ9bmV3IE9lKCt0KSxyKSx0fWZ1bmN0aW9uIG8odCxuLGEpe3ZhciBvPWkodCkscz1bXTtpZihhPjEpZm9yKDtvPG47KXIobyklYXx8cy5wdXNoKG5ldyBEYXRlKCtvKSksZShvLDEpO2Vsc2UgZm9yKDtvPG47KXMucHVzaChuZXcgRGF0ZSgrbykpLGUobywxKTtyZXR1cm4gc310LmZsb29yPXQsdC5yb3VuZD1uLHQuY2VpbD1pLHQub2Zmc2V0PWEsdC5yYW5nZT1vO3ZhciBzPXQudXRjPUZlKHQpO3JldHVybiBzLmZsb29yPXMscy5yb3VuZD1GZShuKSxzLmNlaWw9RmUoaSkscy5vZmZzZXQ9RmUoYSkscy5yYW5nZT1mdW5jdGlvbih0LGUscil7dHJ5e09lPURlO3ZhciBuPW5ldyBEZTtyZXR1cm4gbi5fPXQsbyhuLGUscil9ZmluYWxseXtPZT1EYXRlfX0sdH1mdW5jdGlvbiBGZSh0KXtyZXR1cm4gZnVuY3Rpb24oZSxyKXt0cnl7T2U9RGU7dmFyIG49bmV3IERlO3JldHVybiBuLl89ZSx0KG4scikuX31maW5hbGx5e09lPURhdGV9fX1JZS55ZWFyPUJlKGZ1bmN0aW9uKHQpe3JldHVybih0PUllLmRheSh0KSkuc2V0TW9udGgoMCwxKSx0fSxmdW5jdGlvbih0LGUpe3Quc2V0RnVsbFllYXIodC5nZXRGdWxsWWVhcigpK2UpfSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRGdWxsWWVhcigpfSksSWUueWVhcnM9SWUueWVhci5yYW5nZSxJZS55ZWFycy51dGM9SWUueWVhci51dGMucmFuZ2UsSWUuZGF5PUJlKGZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBPZSgyZTMsMCk7cmV0dXJuIGUuc2V0RnVsbFllYXIodC5nZXRGdWxsWWVhcigpLHQuZ2V0TW9udGgoKSx0LmdldERhdGUoKSksZX0sZnVuY3Rpb24odCxlKXt0LnNldERhdGUodC5nZXREYXRlKCkrZSl9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldERhdGUoKS0xfSksSWUuZGF5cz1JZS5kYXkucmFuZ2UsSWUuZGF5cy51dGM9SWUuZGF5LnV0Yy5yYW5nZSxJZS5kYXlPZlllYXI9ZnVuY3Rpb24odCl7dmFyIGU9SWUueWVhcih0KTtyZXR1cm4gTWF0aC5mbG9vcigodC1lLTZlNCoodC5nZXRUaW1lem9uZU9mZnNldCgpLWUuZ2V0VGltZXpvbmVPZmZzZXQoKSkpLzg2NGU1KX0sWyJzdW5kYXkiLCJtb25kYXkiLCJ0dWVzZGF5Iiwid2VkbmVzZGF5IiwidGh1cnNkYXkiLCJmcmlkYXkiLCJzYXR1cmRheSJdLmZvckVhY2goZnVuY3Rpb24odCxlKXtlPTctZTt2YXIgcj1JZVt0XT1CZShmdW5jdGlvbih0KXtyZXR1cm4odD1JZS5kYXkodCkpLnNldERhdGUodC5nZXREYXRlKCktKHQuZ2V0RGF5KCkrZSklNyksdH0sZnVuY3Rpb24odCxlKXt0LnNldERhdGUodC5nZXREYXRlKCkrNypNYXRoLmZsb29yKGUpKX0sZnVuY3Rpb24odCl7dmFyIHI9SWUueWVhcih0KS5nZXREYXkoKTtyZXR1cm4gTWF0aC5mbG9vcigoSWUuZGF5T2ZZZWFyKHQpKyhyK2UpJTcpLzcpLShyIT09ZSl9KTtJZVt0KyJzIl09ci5yYW5nZSxJZVt0KyJzIl0udXRjPXIudXRjLnJhbmdlLEllW3QrIk9mWWVhciJdPWZ1bmN0aW9uKHQpe3ZhciByPUllLnllYXIodCkuZ2V0RGF5KCk7cmV0dXJuIE1hdGguZmxvb3IoKEllLmRheU9mWWVhcih0KSsocitlKSU3KS83KX19KSxJZS53ZWVrPUllLnN1bmRheSxJZS53ZWVrcz1JZS5zdW5kYXkucmFuZ2UsSWUud2Vla3MudXRjPUllLnN1bmRheS51dGMucmFuZ2UsSWUud2Vla09mWWVhcj1JZS5zdW5kYXlPZlllYXI7dmFyIE5lPXsiLSI6IiIsXzoiICIsMDoiMCJ9LGplPS9eXHMqXGQrLyxWZT0vXiUvO2Z1bmN0aW9uIFVlKHQsZSxyKXt2YXIgbj10PDA/Ii0iOiIiLGk9KG4/LXQ6dCkrIiIsYT1pLmxlbmd0aDtyZXR1cm4gbisoYTxyP25ldyBBcnJheShyLWErMSkuam9pbihlKStpOmkpfWZ1bmN0aW9uIHFlKGUpe3JldHVybiBuZXcgUmVnRXhwKCJeKD86IitlLm1hcCh0LnJlcXVvdGUpLmpvaW4oInwiKSsiKSIsImkiKX1mdW5jdGlvbiBIZSh0KXtmb3IodmFyIGU9bmV3IGIscj0tMSxuPXQubGVuZ3RoOysrcjxuOyllLnNldCh0W3JdLnRvTG93ZXJDYXNlKCkscik7cmV0dXJuIGV9ZnVuY3Rpb24gR2UodCxlLHIpe2plLmxhc3RJbmRleD0wO3ZhciBuPWplLmV4ZWMoZS5zbGljZShyLHIrMSkpO3JldHVybiBuPyh0Lnc9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gV2UodCxlLHIpe2plLmxhc3RJbmRleD0wO3ZhciBuPWplLmV4ZWMoZS5zbGljZShyKSk7cmV0dXJuIG4/KHQuVT0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBZZSh0LGUscil7amUubGFzdEluZGV4PTA7dmFyIG49amUuZXhlYyhlLnNsaWNlKHIpKTtyZXR1cm4gbj8odC5XPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFhlKHQsZSxyKXtqZS5sYXN0SW5kZXg9MDt2YXIgbj1qZS5leGVjKGUuc2xpY2UocixyKzQpKTtyZXR1cm4gbj8odC55PStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFplKHQsZSxyKXtqZS5sYXN0SW5kZXg9MDt2YXIgbixpPWplLmV4ZWMoZS5zbGljZShyLHIrMikpO3JldHVybiBpPyh0Lnk9KG49K2lbMF0pKyhuPjY4PzE5MDA6MmUzKSxyK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiAkZSh0LGUscil7cmV0dXJuL15bKy1dXGR7NH0kLy50ZXN0KGU9ZS5zbGljZShyLHIrNSkpPyh0Llo9LWUscis1KTotMX1mdW5jdGlvbiBKZSh0LGUscil7amUubGFzdEluZGV4PTA7dmFyIG49amUuZXhlYyhlLnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KHQubT1uWzBdLTEscituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gS2UodCxlLHIpe2plLmxhc3RJbmRleD0wO3ZhciBuPWplLmV4ZWMoZS5zbGljZShyLHIrMikpO3JldHVybiBuPyh0LmQ9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gUWUodCxlLHIpe2plLmxhc3RJbmRleD0wO3ZhciBuPWplLmV4ZWMoZS5zbGljZShyLHIrMykpO3JldHVybiBuPyh0Lmo9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gdHIodCxlLHIpe2plLmxhc3RJbmRleD0wO3ZhciBuPWplLmV4ZWMoZS5zbGljZShyLHIrMikpO3JldHVybiBuPyh0Lkg9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gZXIodCxlLHIpe2plLmxhc3RJbmRleD0wO3ZhciBuPWplLmV4ZWMoZS5zbGljZShyLHIrMikpO3JldHVybiBuPyh0Lk09K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gcnIodCxlLHIpe2plLmxhc3RJbmRleD0wO3ZhciBuPWplLmV4ZWMoZS5zbGljZShyLHIrMikpO3JldHVybiBuPyh0LlM9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gbnIodCxlLHIpe2plLmxhc3RJbmRleD0wO3ZhciBuPWplLmV4ZWMoZS5zbGljZShyLHIrMykpO3JldHVybiBuPyh0Lkw9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gaXIodCl7dmFyIGU9dC5nZXRUaW1lem9uZU9mZnNldCgpLHI9ZT4wPyItIjoiKyIsbj15KGUpLzYwfDAsaT15KGUpJTYwO3JldHVybiByK1VlKG4sIjAiLDIpK1VlKGksIjAiLDIpfWZ1bmN0aW9uIGFyKHQsZSxyKXtWZS5sYXN0SW5kZXg9MDt2YXIgbj1WZS5leGVjKGUuc2xpY2UocixyKzEpKTtyZXR1cm4gbj9yK25bMF0ubGVuZ3RoOi0xfWZ1bmN0aW9uIG9yKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPS0xOysrcjxlOyl0W3JdWzBdPXRoaXModFtyXVswXSk7cmV0dXJuIGZ1bmN0aW9uKGUpe2Zvcih2YXIgcj0wLG49dFtyXTshblsxXShlKTspbj10Wysrcl07cmV0dXJuIG5bMF0oZSl9fXQubG9jYWxlPWZ1bmN0aW9uKGUpe3JldHVybntudW1iZXJGb3JtYXQ6ZnVuY3Rpb24oZSl7dmFyIHI9ZS5kZWNpbWFsLG49ZS50aG91c2FuZHMsaT1lLmdyb3VwaW5nLGE9ZS5jdXJyZW5jeSxvPWkmJm4/ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5sZW5ndGgsYT1bXSxvPTAscz1pWzBdLGw9MDtyPjAmJnM+MCYmKGwrcysxPmUmJihzPU1hdGgubWF4KDEsZS1sKSksYS5wdXNoKHQuc3Vic3RyaW5nKHItPXMscitzKSksISgobCs9cysxKT5lKSk7KXM9aVtvPShvKzEpJWkubGVuZ3RoXTtyZXR1cm4gYS5yZXZlcnNlKCkuam9pbihuKX06ejtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG49TGUuZXhlYyhlKSxpPW5bMV18fCIgIixzPW5bMl18fCI+IixsPW5bM118fCItIixjPW5bNF18fCIiLHU9bls1XSxoPStuWzZdLGY9bls3XSxwPW5bOF0sZD1uWzldLGc9MSxtPSIiLHY9IiIseT0hMSx4PSEwO3N3aXRjaChwJiYocD0rcC5zdWJzdHJpbmcoMSkpLCh1fHwiMCI9PT1pJiYiPSI9PT1zKSYmKHU9aT0iMCIscz0iPSIpLGQpe2Nhc2UibiI6Zj0hMCxkPSJnIjticmVhaztjYXNlIiUiOmc9MTAwLHY9IiUiLGQ9ImYiO2JyZWFrO2Nhc2UicCI6Zz0xMDAsdj0iJSIsZD0iciI7YnJlYWs7Y2FzZSJiIjpjYXNlIm8iOmNhc2UieCI6Y2FzZSJYIjoiIyI9PT1jJiYobT0iMCIrZC50b0xvd2VyQ2FzZSgpKTtjYXNlImMiOng9ITE7Y2FzZSJkIjp5PSEwLHA9MDticmVhaztjYXNlInMiOmc9LTEsZD0iciJ9IiQiPT09YyYmKG09YVswXSx2PWFbMV0pLCJyIiE9ZHx8cHx8KGQ9ImciKSxudWxsIT1wJiYoImciPT1kP3A9TWF0aC5tYXgoMSxNYXRoLm1pbigyMSxwKSk6ImUiIT1kJiYiZiIhPWR8fChwPU1hdGgubWF4KDAsTWF0aC5taW4oMjAscCkpKSksZD16ZS5nZXQoZCl8fFBlO3ZhciBiPXUmJmY7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuPXY7aWYoeSYmZSUxKXJldHVybiIiO3ZhciBhPWU8MHx8MD09PWUmJjEvZTwwPyhlPS1lLCItIik6Ii0iPT09bD8iIjpsO2lmKGc8MCl7dmFyIGM9dC5mb3JtYXRQcmVmaXgoZSxwKTtlPWMuc2NhbGUoZSksbj1jLnN5bWJvbCt2fWVsc2UgZSo9Zzt2YXIgXyx3LGs9KGU9ZChlLHApKS5sYXN0SW5kZXhPZigiLiIpO2lmKGs8MCl7dmFyIE09eD9lLmxhc3RJbmRleE9mKCJlIik6LTE7TTwwPyhfPWUsdz0iIik6KF89ZS5zdWJzdHJpbmcoMCxNKSx3PWUuc3Vic3RyaW5nKE0pKX1lbHNlIF89ZS5zdWJzdHJpbmcoMCxrKSx3PXIrZS5zdWJzdHJpbmcoaysxKTshdSYmZiYmKF89byhfLDEvMCkpO3ZhciBBPW0ubGVuZ3RoK18ubGVuZ3RoK3cubGVuZ3RoKyhiPzA6YS5sZW5ndGgpLFQ9QTxoP25ldyBBcnJheShBPWgtQSsxKS5qb2luKGkpOiIiO3JldHVybiBiJiYoXz1vKFQrXyxULmxlbmd0aD9oLXcubGVuZ3RoOjEvMCkpLGErPW0sZT1fK3csKCI8Ij09PXM/YStlK1Q6Ij4iPT09cz9UK2ErZToiXiI9PT1zP1Quc3Vic3RyaW5nKDAsQT4+PTEpK2ErZStULnN1YnN0cmluZyhBKTphKyhiP2U6VCtlKSkrbn19fShlKSx0aW1lRm9ybWF0OmZ1bmN0aW9uKGUpe3ZhciByPWUuZGF0ZVRpbWUsbj1lLmRhdGUsaT1lLnRpbWUsYT1lLnBlcmlvZHMsbz1lLmRheXMscz1lLnNob3J0RGF5cyxsPWUubW9udGhzLGM9ZS5zaG9ydE1vbnRocztmdW5jdGlvbiB1KHQpe3ZhciBlPXQubGVuZ3RoO2Z1bmN0aW9uIHIocil7Zm9yKHZhciBuLGksYSxvPVtdLHM9LTEsbD0wOysrczxlOykzNz09PXQuY2hhckNvZGVBdChzKSYmKG8ucHVzaCh0LnNsaWNlKGwscykpLG51bGwhPShpPU5lW249dC5jaGFyQXQoKytzKV0pJiYobj10LmNoYXJBdCgrK3MpKSwoYT1fW25dKSYmKG49YShyLG51bGw9PWk/ImUiPT09bj8iICI6IjAiOmkpKSxvLnB1c2gobiksbD1zKzEpO3JldHVybiBvLnB1c2godC5zbGljZShsLHMpKSxvLmpvaW4oIiIpfXJldHVybiByLnBhcnNlPWZ1bmN0aW9uKGUpe3ZhciByPXt5OjE5MDAsbTowLGQ6MSxIOjAsTTowLFM6MCxMOjAsWjpudWxsfTtpZihoKHIsdCxlLDApIT1lLmxlbmd0aClyZXR1cm4gbnVsbDsicCJpbiByJiYoci5IPXIuSCUxMisxMipyLnApO3ZhciBuPW51bGwhPXIuWiYmT2UhPT1EZSxpPW5ldyhuP0RlOk9lKTtyZXR1cm4iaiJpbiByP2kuc2V0RnVsbFllYXIoci55LDAsci5qKToiVyJpbiByfHwiVSJpbiByPygidyJpbiByfHwoci53PSJXImluIHI/MTowKSxpLnNldEZ1bGxZZWFyKHIueSwwLDEpLGkuc2V0RnVsbFllYXIoci55LDAsIlciaW4gcj8oci53KzYpJTcrNypyLlctKGkuZ2V0RGF5KCkrNSklNzpyLncrNypyLlUtKGkuZ2V0RGF5KCkrNiklNykpOmkuc2V0RnVsbFllYXIoci55LHIubSxyLmQpLGkuc2V0SG91cnMoci5IKyhyLlovMTAwfDApLHIuTStyLlolMTAwLHIuUyxyLkwpLG4/aS5fOml9LHIudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdH0scn1mdW5jdGlvbiBoKHQsZSxyLG4pe2Zvcih2YXIgaSxhLG8scz0wLGw9ZS5sZW5ndGgsYz1yLmxlbmd0aDtzPGw7KXtpZihuPj1jKXJldHVybi0xO2lmKDM3PT09KGk9ZS5jaGFyQ29kZUF0KHMrKykpKXtpZihvPWUuY2hhckF0KHMrKyksIShhPXdbbyBpbiBOZT9lLmNoYXJBdChzKyspOm9dKXx8KG49YSh0LHIsbikpPDApcmV0dXJuLTF9ZWxzZSBpZihpIT1yLmNoYXJDb2RlQXQobisrKSlyZXR1cm4tMX1yZXR1cm4gbn11LnV0Yz1mdW5jdGlvbih0KXt2YXIgZT11KHQpO2Z1bmN0aW9uIHIodCl7dHJ5e3ZhciByPW5ldyhPZT1EZSk7cmV0dXJuIHIuXz10LGUocil9ZmluYWxseXtPZT1EYXRlfX1yZXR1cm4gci5wYXJzZT1mdW5jdGlvbih0KXt0cnl7T2U9RGU7dmFyIHI9ZS5wYXJzZSh0KTtyZXR1cm4gciYmci5ffWZpbmFsbHl7T2U9RGF0ZX19LHIudG9TdHJpbmc9ZS50b1N0cmluZyxyfSx1Lm11bHRpPXUudXRjLm11bHRpPW9yO3ZhciBmPXQubWFwKCkscD1xZShvKSxkPUhlKG8pLGc9cWUocyksbT1IZShzKSx2PXFlKGwpLHk9SGUobCkseD1xZShjKSxiPUhlKGMpO2EuZm9yRWFjaChmdW5jdGlvbih0LGUpe2Yuc2V0KHQudG9Mb3dlckNhc2UoKSxlKX0pO3ZhciBfPXthOmZ1bmN0aW9uKHQpe3JldHVybiBzW3QuZ2V0RGF5KCldfSxBOmZ1bmN0aW9uKHQpe3JldHVybiBvW3QuZ2V0RGF5KCldfSxiOmZ1bmN0aW9uKHQpe3JldHVybiBjW3QuZ2V0TW9udGgoKV19LEI6ZnVuY3Rpb24odCl7cmV0dXJuIGxbdC5nZXRNb250aCgpXX0sYzp1KHIpLGQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gVWUodC5nZXREYXRlKCksZSwyKX0sZTpmdW5jdGlvbih0LGUpe3JldHVybiBVZSh0LmdldERhdGUoKSxlLDIpfSxIOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIFVlKHQuZ2V0SG91cnMoKSxlLDIpfSxJOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIFVlKHQuZ2V0SG91cnMoKSUxMnx8MTIsZSwyKX0sajpmdW5jdGlvbih0LGUpe3JldHVybiBVZSgxK0llLmRheU9mWWVhcih0KSxlLDMpfSxMOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIFVlKHQuZ2V0TWlsbGlzZWNvbmRzKCksZSwzKX0sbTpmdW5jdGlvbih0LGUpe3JldHVybiBVZSh0LmdldE1vbnRoKCkrMSxlLDIpfSxNOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIFVlKHQuZ2V0TWludXRlcygpLGUsMil9LHA6ZnVuY3Rpb24odCl7cmV0dXJuIGFbKyh0LmdldEhvdXJzKCk+PTEyKV19LFM6ZnVuY3Rpb24odCxlKXtyZXR1cm4gVWUodC5nZXRTZWNvbmRzKCksZSwyKX0sVTpmdW5jdGlvbih0LGUpe3JldHVybiBVZShJZS5zdW5kYXlPZlllYXIodCksZSwyKX0sdzpmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXREYXkoKX0sVzpmdW5jdGlvbih0LGUpe3JldHVybiBVZShJZS5tb25kYXlPZlllYXIodCksZSwyKX0seDp1KG4pLFg6dShpKSx5OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIFVlKHQuZ2V0RnVsbFllYXIoKSUxMDAsZSwyKX0sWTpmdW5jdGlvbih0LGUpe3JldHVybiBVZSh0LmdldEZ1bGxZZWFyKCklMWU0LGUsNCl9LFo6aXIsIiUiOmZ1bmN0aW9uKCl7cmV0dXJuIiUifX0sdz17YTpmdW5jdGlvbih0LGUscil7Zy5sYXN0SW5kZXg9MDt2YXIgbj1nLmV4ZWMoZS5zbGljZShyKSk7cmV0dXJuIG4/KHQudz1tLmdldChuWzBdLnRvTG93ZXJDYXNlKCkpLHIrblswXS5sZW5ndGgpOi0xfSxBOmZ1bmN0aW9uKHQsZSxyKXtwLmxhc3RJbmRleD0wO3ZhciBuPXAuZXhlYyhlLnNsaWNlKHIpKTtyZXR1cm4gbj8odC53PWQuZ2V0KG5bMF0udG9Mb3dlckNhc2UoKSkscituWzBdLmxlbmd0aCk6LTF9LGI6ZnVuY3Rpb24odCxlLHIpe3gubGFzdEluZGV4PTA7dmFyIG49eC5leGVjKGUuc2xpY2UocikpO3JldHVybiBuPyh0Lm09Yi5nZXQoblswXS50b0xvd2VyQ2FzZSgpKSxyK25bMF0ubGVuZ3RoKTotMX0sQjpmdW5jdGlvbih0LGUscil7di5sYXN0SW5kZXg9MDt2YXIgbj12LmV4ZWMoZS5zbGljZShyKSk7cmV0dXJuIG4/KHQubT15LmdldChuWzBdLnRvTG93ZXJDYXNlKCkpLHIrblswXS5sZW5ndGgpOi0xfSxjOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gaCh0LF8uYy50b1N0cmluZygpLGUscil9LGQ6S2UsZTpLZSxIOnRyLEk6dHIsajpRZSxMOm5yLG06SmUsTTplcixwOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1mLmdldChlLnNsaWNlKHIscis9MikudG9Mb3dlckNhc2UoKSk7cmV0dXJuIG51bGw9PW4/LTE6KHQucD1uLHIpfSxTOnJyLFU6V2UsdzpHZSxXOlllLHg6ZnVuY3Rpb24odCxlLHIpe3JldHVybiBoKHQsXy54LnRvU3RyaW5nKCksZSxyKX0sWDpmdW5jdGlvbih0LGUscil7cmV0dXJuIGgodCxfLlgudG9TdHJpbmcoKSxlLHIpfSx5OlplLFk6WGUsWjokZSwiJSI6YXJ9O3JldHVybiB1fShlKX19O3ZhciBzcj10LmxvY2FsZSh7ZGVjaW1hbDoiLiIsdGhvdXNhbmRzOiIsIixncm91cGluZzpbM10sY3VycmVuY3k6WyIkIiwiIl0sZGF0ZVRpbWU6IiVhICViICVlICVYICVZIixkYXRlOiIlbS8lZC8lWSIsdGltZToiJUg6JU06JVMiLHBlcmlvZHM6WyJBTSIsIlBNIl0sZGF5czpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sc2hvcnREYXlzOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sbW9udGhzOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSxzaG9ydE1vbnRoczpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdfSk7ZnVuY3Rpb24gbHIoKXt9dC5mb3JtYXQ9c3IubnVtYmVyRm9ybWF0LHQuZ2VvPXt9LGxyLnByb3RvdHlwZT17czowLHQ6MCxhZGQ6ZnVuY3Rpb24odCl7dXIodCx0aGlzLnQsY3IpLHVyKGNyLnMsdGhpcy5zLHRoaXMpLHRoaXMucz90aGlzLnQrPWNyLnQ6dGhpcy5zPWNyLnR9LHJlc2V0OmZ1bmN0aW9uKCl7dGhpcy5zPXRoaXMudD0wfSx2YWx1ZU9mOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc319O3ZhciBjcj1uZXcgbHI7ZnVuY3Rpb24gdXIodCxlLHIpe3ZhciBuPXIucz10K2UsaT1uLXQsYT1uLWk7ci50PXQtYSsoZS1pKX1mdW5jdGlvbiBocih0LGUpe3QmJnByLmhhc093blByb3BlcnR5KHQudHlwZSkmJnByW3QudHlwZV0odCxlKX10Lmdlby5zdHJlYW09ZnVuY3Rpb24odCxlKXt0JiZmci5oYXNPd25Qcm9wZXJ0eSh0LnR5cGUpP2ZyW3QudHlwZV0odCxlKTpocih0LGUpfTt2YXIgZnI9e0ZlYXR1cmU6ZnVuY3Rpb24odCxlKXtocih0Lmdlb21ldHJ5LGUpfSxGZWF0dXJlQ29sbGVjdGlvbjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LmZlYXR1cmVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspaHIocltuXS5nZW9tZXRyeSxlKX19LHByPXtTcGhlcmU6ZnVuY3Rpb24odCxlKXtlLnNwaGVyZSgpfSxQb2ludDpmdW5jdGlvbih0LGUpe3Q9dC5jb29yZGluYXRlcyxlLnBvaW50KHRbMF0sdFsxXSx0WzJdKX0sTXVsdGlQb2ludDpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LmNvb3JkaW5hdGVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspdD1yW25dLGUucG9pbnQodFswXSx0WzFdLHRbMl0pfSxMaW5lU3RyaW5nOmZ1bmN0aW9uKHQsZSl7ZHIodC5jb29yZGluYXRlcyxlLDApfSxNdWx0aUxpbmVTdHJpbmc6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5jb29yZGluYXRlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KWRyKHJbbl0sZSwwKX0sUG9seWdvbjpmdW5jdGlvbih0LGUpe2dyKHQuY29vcmRpbmF0ZXMsZSl9LE11bHRpUG9seWdvbjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LmNvb3JkaW5hdGVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspZ3IocltuXSxlKX0sR2VvbWV0cnlDb2xsZWN0aW9uOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuZ2VvbWV0cmllcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KWhyKHJbbl0sZSl9fTtmdW5jdGlvbiBkcih0LGUscil7dmFyIG4saT0tMSxhPXQubGVuZ3RoLXI7Zm9yKGUubGluZVN0YXJ0KCk7KytpPGE7KW49dFtpXSxlLnBvaW50KG5bMF0sblsxXSxuWzJdKTtlLmxpbmVFbmQoKX1mdW5jdGlvbiBncih0LGUpe3ZhciByPS0xLG49dC5sZW5ndGg7Zm9yKGUucG9seWdvblN0YXJ0KCk7KytyPG47KWRyKHRbcl0sZSwxKTtlLnBvbHlnb25FbmQoKX10Lmdlby5hcmVhPWZ1bmN0aW9uKGUpe3JldHVybiBtcj0wLHQuZ2VvLnN0cmVhbShlLENyKSxtcn07dmFyIG1yLHZyLHlyLHhyLGJyLF9yLHdyLGtyLE1yLEFyLFRyLFNyLEVyPW5ldyBscixDcj17c3BoZXJlOmZ1bmN0aW9uKCl7bXIrPTQqQXR9LHBvaW50OkQsbGluZVN0YXJ0OkQsbGluZUVuZDpELHBvbHlnb25TdGFydDpmdW5jdGlvbigpe0VyLnJlc2V0KCksQ3IubGluZVN0YXJ0PUxyfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dmFyIHQ9MipFcjttcis9dDwwPzQqQXQrdDp0LENyLmxpbmVTdGFydD1Dci5saW5lRW5kPUNyLnBvaW50PUR9fTtmdW5jdGlvbiBMcigpe3ZhciB0LGUscixuLGk7ZnVuY3Rpb24gYSh0LGUpe2U9ZSpDdC8yK0F0LzQ7dmFyIGE9KHQqPUN0KS1yLG89YT49MD8xOi0xLHM9byphLGw9TWF0aC5jb3MoZSksYz1NYXRoLnNpbihlKSx1PWkqYyxoPW4qbCt1Kk1hdGguY29zKHMpLGY9dSpvKk1hdGguc2luKHMpO0VyLmFkZChNYXRoLmF0YW4yKGYsaCkpLHI9dCxuPWwsaT1jfUNyLnBvaW50PWZ1bmN0aW9uKG8scyl7Q3IucG9pbnQ9YSxyPSh0PW8pKkN0LG49TWF0aC5jb3Mocz0oZT1zKSpDdC8yK0F0LzQpLGk9TWF0aC5zaW4ocyl9LENyLmxpbmVFbmQ9ZnVuY3Rpb24oKXthKHQsZSl9fWZ1bmN0aW9uIHpyKHQpe3ZhciBlPXRbMF0scj10WzFdLG49TWF0aC5jb3Mocik7cmV0dXJuW24qTWF0aC5jb3MoZSksbipNYXRoLnNpbihlKSxNYXRoLnNpbihyKV19ZnVuY3Rpb24gUHIodCxlKXtyZXR1cm4gdFswXSplWzBdK3RbMV0qZVsxXSt0WzJdKmVbMl19ZnVuY3Rpb24gSXIodCxlKXtyZXR1cm5bdFsxXSplWzJdLXRbMl0qZVsxXSx0WzJdKmVbMF0tdFswXSplWzJdLHRbMF0qZVsxXS10WzFdKmVbMF1dfWZ1bmN0aW9uIE9yKHQsZSl7dFswXSs9ZVswXSx0WzFdKz1lWzFdLHRbMl0rPWVbMl19ZnVuY3Rpb24gRHIodCxlKXtyZXR1cm5bdFswXSplLHRbMV0qZSx0WzJdKmVdfWZ1bmN0aW9uIFJyKHQpe3ZhciBlPU1hdGguc3FydCh0WzBdKnRbMF0rdFsxXSp0WzFdK3RbMl0qdFsyXSk7dFswXS89ZSx0WzFdLz1lLHRbMl0vPWV9ZnVuY3Rpb24gQnIodCl7cmV0dXJuW01hdGguYXRhbjIodFsxXSx0WzBdKSxPdCh0WzJdKV19ZnVuY3Rpb24gRnIodCxlKXtyZXR1cm4geSh0WzBdLWVbMF0pPGt0JiZ5KHRbMV0tZVsxXSk8a3R9dC5nZW8uYm91bmRzPWZ1bmN0aW9uKCl7dmFyIGUscixuLGksYSxvLHMsbCxjLHUsaCxmPXtwb2ludDpwLGxpbmVTdGFydDpnLGxpbmVFbmQ6bSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtmLnBvaW50PXYsZi5saW5lU3RhcnQ9eCxmLmxpbmVFbmQ9YixjPTAsQ3IucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtDci5wb2x5Z29uRW5kKCksZi5wb2ludD1wLGYubGluZVN0YXJ0PWcsZi5saW5lRW5kPW0sRXI8MD8oZT0tKG49MTgwKSxyPS0oaT05MCkpOmM+a3Q/aT05MDpjPC1rdCYmKHI9LTkwKSxoWzBdPWUsaFsxXT1ufX07ZnVuY3Rpb24gcCh0LGEpe3UucHVzaChoPVtlPXQsbj10XSksYTxyJiYocj1hKSxhPmkmJihpPWEpfWZ1bmN0aW9uIGQodCxvKXt2YXIgcz16cihbdCpDdCxvKkN0XSk7aWYobCl7dmFyIGM9SXIobCxzKSx1PUlyKFtjWzFdLC1jWzBdLDBdLGMpO1JyKHUpLHU9QnIodSk7dmFyIGg9dC1hLGY9aD4wPzE6LTEsZD11WzBdKkx0KmYsZz15KGgpPjE4MDtpZihnXihmKmE8ZCYmZDxmKnQpKShtPXVbMV0qTHQpPmkmJihpPW0pO2Vsc2UgaWYoZ14oZiphPChkPShkKzM2MCklMzYwLTE4MCkmJmQ8Zip0KSl7dmFyIG07KG09LXVbMV0qTHQpPHImJihyPW0pfWVsc2UgbzxyJiYocj1vKSxvPmkmJihpPW8pO2c/dDxhP18oZSx0KT5fKGUsbikmJihuPXQpOl8odCxuKT5fKGUsbikmJihlPXQpOm4+PWU/KHQ8ZSYmKGU9dCksdD5uJiYobj10KSk6dD5hP18oZSx0KT5fKGUsbikmJihuPXQpOl8odCxuKT5fKGUsbikmJihlPXQpfWVsc2UgcCh0LG8pO2w9cyxhPXR9ZnVuY3Rpb24gZygpe2YucG9pbnQ9ZH1mdW5jdGlvbiBtKCl7aFswXT1lLGhbMV09bixmLnBvaW50PXAsbD1udWxsfWZ1bmN0aW9uIHYodCxlKXtpZihsKXt2YXIgcj10LWE7Yys9eShyKT4xODA/cisocj4wPzM2MDotMzYwKTpyfWVsc2Ugbz10LHM9ZTtDci5wb2ludCh0LGUpLGQodCxlKX1mdW5jdGlvbiB4KCl7Q3IubGluZVN0YXJ0KCl9ZnVuY3Rpb24gYigpe3YobyxzKSxDci5saW5lRW5kKCkseShjKT5rdCYmKGU9LShuPTE4MCkpLGhbMF09ZSxoWzFdPW4sbD1udWxsfWZ1bmN0aW9uIF8odCxlKXtyZXR1cm4oZS09dCk8MD9lKzM2MDplfWZ1bmN0aW9uIHcodCxlKXtyZXR1cm4gdFswXS1lWzBdfWZ1bmN0aW9uIGsodCxlKXtyZXR1cm4gZVswXTw9ZVsxXT9lWzBdPD10JiZ0PD1lWzFdOnQ8ZVswXXx8ZVsxXTx0fXJldHVybiBmdW5jdGlvbihhKXtpZihpPW49LShlPXI9MS8wKSx1PVtdLHQuZ2VvLnN0cmVhbShhLGYpLGM9dS5sZW5ndGgpe3Uuc29ydCh3KTtmb3IodmFyIG89MSxzPVtnPXVbMF1dO288YzsrK28paygocD11W29dKVswXSxnKXx8ayhwWzFdLGcpPyhfKGdbMF0scFsxXSk+XyhnWzBdLGdbMV0pJiYoZ1sxXT1wWzFdKSxfKHBbMF0sZ1sxXSk+XyhnWzBdLGdbMV0pJiYoZ1swXT1wWzBdKSk6cy5wdXNoKGc9cCk7Zm9yKHZhciBsLGMscCxkPS0xLzAsZz0obz0wLHNbYz1zLmxlbmd0aC0xXSk7bzw9YztnPXAsKytvKXA9c1tvXSwobD1fKGdbMV0scFswXSkpPmQmJihkPWwsZT1wWzBdLG49Z1sxXSl9cmV0dXJuIHU9aD1udWxsLGU9PT0xLzB8fHI9PT0xLzA/W1tOYU4sTmFOXSxbTmFOLE5hTl1dOltbZSxyXSxbbixpXV19fSgpLHQuZ2VvLmNlbnRyb2lkPWZ1bmN0aW9uKGUpe3ZyPXlyPXhyPWJyPV9yPXdyPWtyPU1yPUFyPVRyPVNyPTAsdC5nZW8uc3RyZWFtKGUsTnIpO3ZhciByPUFyLG49VHIsaT1TcixhPXIqcituKm4raSppO3JldHVybiBhPE10JiYocj13cixuPWtyLGk9TXIseXI8a3QmJihyPXhyLG49YnIsaT1fciksKGE9cipyK24qbitpKmkpPE10KT9bTmFOLE5hTl06W01hdGguYXRhbjIobixyKSpMdCxPdChpL01hdGguc3FydChhKSkqTHRdfTt2YXIgTnI9e3NwaGVyZTpELHBvaW50OmpyLGxpbmVTdGFydDpVcixsaW5lRW5kOnFyLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe05yLmxpbmVTdGFydD1Icn0scG9seWdvbkVuZDpmdW5jdGlvbigpe05yLmxpbmVTdGFydD1Vcn19O2Z1bmN0aW9uIGpyKHQsZSl7dCo9Q3Q7dmFyIHI9TWF0aC5jb3MoZSo9Q3QpO1ZyKHIqTWF0aC5jb3ModCkscipNYXRoLnNpbih0KSxNYXRoLnNpbihlKSl9ZnVuY3Rpb24gVnIodCxlLHIpe3hyKz0odC14cikvKyt2cixicis9KGUtYnIpL3ZyLF9yKz0oci1fcikvdnJ9ZnVuY3Rpb24gVXIoKXt2YXIgdCxlLHI7ZnVuY3Rpb24gbihuLGkpe24qPUN0O3ZhciBhPU1hdGguY29zKGkqPUN0KSxvPWEqTWF0aC5jb3Mobikscz1hKk1hdGguc2luKG4pLGw9TWF0aC5zaW4oaSksYz1NYXRoLmF0YW4yKE1hdGguc3FydCgoYz1lKmwtcipzKSpjKyhjPXIqby10KmwpKmMrKGM9dCpzLWUqbykqYyksdCpvK2UqcytyKmwpO3lyKz1jLHdyKz1jKih0Kyh0PW8pKSxrcis9YyooZSsoZT1zKSksTXIrPWMqKHIrKHI9bCkpLFZyKHQsZSxyKX1Oci5wb2ludD1mdW5jdGlvbihpLGEpe2kqPUN0O3ZhciBvPU1hdGguY29zKGEqPUN0KTt0PW8qTWF0aC5jb3MoaSksZT1vKk1hdGguc2luKGkpLHI9TWF0aC5zaW4oYSksTnIucG9pbnQ9bixWcih0LGUscil9fWZ1bmN0aW9uIHFyKCl7TnIucG9pbnQ9anJ9ZnVuY3Rpb24gSHIoKXt2YXIgdCxlLHIsbixpO2Z1bmN0aW9uIGEodCxlKXt0Kj1DdDt2YXIgYT1NYXRoLmNvcyhlKj1DdCksbz1hKk1hdGguY29zKHQpLHM9YSpNYXRoLnNpbih0KSxsPU1hdGguc2luKGUpLGM9bipsLWkqcyx1PWkqby1yKmwsaD1yKnMtbipvLGY9TWF0aC5zcXJ0KGMqYyt1KnUraCpoKSxwPXIqbytuKnMraSpsLGQ9ZiYmLUl0KHApL2YsZz1NYXRoLmF0YW4yKGYscCk7QXIrPWQqYyxUcis9ZCp1LFNyKz1kKmgseXIrPWcsd3IrPWcqKHIrKHI9bykpLGtyKz1nKihuKyhuPXMpKSxNcis9ZyooaSsoaT1sKSksVnIocixuLGkpfU5yLnBvaW50PWZ1bmN0aW9uKG8scyl7dD1vLGU9cyxOci5wb2ludD1hLG8qPUN0O3ZhciBsPU1hdGguY29zKHMqPUN0KTtyPWwqTWF0aC5jb3Mobyksbj1sKk1hdGguc2luKG8pLGk9TWF0aC5zaW4ocyksVnIocixuLGkpfSxOci5saW5lRW5kPWZ1bmN0aW9uKCl7YSh0LGUpLE5yLmxpbmVFbmQ9cXIsTnIucG9pbnQ9anJ9fWZ1bmN0aW9uIEdyKHQsZSl7ZnVuY3Rpb24gcihyLG4pe3JldHVybiByPXQocixuKSxlKHJbMF0sclsxXSl9cmV0dXJuIHQuaW52ZXJ0JiZlLmludmVydCYmKHIuaW52ZXJ0PWZ1bmN0aW9uKHIsbil7cmV0dXJuKHI9ZS5pbnZlcnQocixuKSkmJnQuaW52ZXJ0KHJbMF0sclsxXSl9KSxyfWZ1bmN0aW9uIFdyKCl7cmV0dXJuITB9ZnVuY3Rpb24gWXIodCxlLHIsbixpKXt2YXIgYT1bXSxvPVtdO2lmKHQuZm9yRWFjaChmdW5jdGlvbih0KXtpZighKChlPXQubGVuZ3RoLTEpPD0wKSl7dmFyIGUscj10WzBdLG49dFtlXTtpZihGcihyLG4pKXtpLmxpbmVTdGFydCgpO2Zvcih2YXIgcz0wO3M8ZTsrK3MpaS5wb2ludCgocj10W3NdKVswXSxyWzFdKTtpLmxpbmVFbmQoKX1lbHNle3ZhciBsPW5ldyBacihyLHQsbnVsbCwhMCksYz1uZXcgWnIocixudWxsLGwsITEpO2wubz1jLGEucHVzaChsKSxvLnB1c2goYyksbD1uZXcgWnIobix0LG51bGwsITEpLGM9bmV3IFpyKG4sbnVsbCxsLCEwKSxsLm89YyxhLnB1c2gobCksby5wdXNoKGMpfX19KSxvLnNvcnQoZSksWHIoYSksWHIobyksYS5sZW5ndGgpe2Zvcih2YXIgcz0wLGw9cixjPW8ubGVuZ3RoO3M8YzsrK3Mpb1tzXS5lPWw9IWw7Zm9yKHZhciB1LGgsZj1hWzBdOzspe2Zvcih2YXIgcD1mLGQ9ITA7cC52OylpZigocD1wLm4pPT09ZilyZXR1cm47dT1wLnosaS5saW5lU3RhcnQoKTtkb3tpZihwLnY9cC5vLnY9ITAscC5lKXtpZihkKWZvcihzPTAsYz11Lmxlbmd0aDtzPGM7KytzKWkucG9pbnQoKGg9dVtzXSlbMF0saFsxXSk7ZWxzZSBuKHAueCxwLm4ueCwxLGkpO3A9cC5ufWVsc2V7aWYoZClmb3Iocz0odT1wLnAueikubGVuZ3RoLTE7cz49MDstLXMpaS5wb2ludCgoaD11W3NdKVswXSxoWzFdKTtlbHNlIG4ocC54LHAucC54LC0xLGkpO3A9cC5wfXU9KHA9cC5vKS56LGQ9IWR9d2hpbGUoIXAudik7aS5saW5lRW5kKCl9fX1mdW5jdGlvbiBYcih0KXtpZihlPXQubGVuZ3RoKXtmb3IodmFyIGUscixuPTAsaT10WzBdOysrbjxlOylpLm49cj10W25dLHIucD1pLGk9cjtpLm49cj10WzBdLHIucD1pfX1mdW5jdGlvbiBacih0LGUscixuKXt0aGlzLng9dCx0aGlzLno9ZSx0aGlzLm89cix0aGlzLmU9bix0aGlzLnY9ITEsdGhpcy5uPXRoaXMucD1udWxsfWZ1bmN0aW9uICRyKGUscixuLGkpe3JldHVybiBmdW5jdGlvbihhLG8pe3ZhciBzLGw9cihvKSxjPWEuaW52ZXJ0KGlbMF0saVsxXSksdT17cG9pbnQ6aCxsaW5lU3RhcnQ6cCxsaW5lRW5kOmQscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dS5wb2ludD1iLHUubGluZVN0YXJ0PV8sdS5saW5lRW5kPXcscz1bXSxnPVtdfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dS5wb2ludD1oLHUubGluZVN0YXJ0PXAsdS5saW5lRW5kPWQscz10Lm1lcmdlKHMpO3ZhciBlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dFswXSxuPXRbMV0saT1bTWF0aC5zaW4ociksLU1hdGguY29zKHIpLDBdLGE9MCxvPTA7RXIucmVzZXQoKTtmb3IodmFyIHM9MCxsPWUubGVuZ3RoO3M8bDsrK3Mpe3ZhciBjPWVbc10sdT1jLmxlbmd0aDtpZih1KWZvcih2YXIgaD1jWzBdLGY9aFswXSxwPWhbMV0vMitBdC80LGQ9TWF0aC5zaW4ocCksZz1NYXRoLmNvcyhwKSxtPTE7Oyl7bT09PXUmJihtPTApO3ZhciB2PSh0PWNbbV0pWzBdLHk9dFsxXS8yK0F0LzQseD1NYXRoLnNpbih5KSxiPU1hdGguY29zKHkpLF89di1mLHc9Xz49MD8xOi0xLGs9dypfLE09az5BdCxBPWQqeDtpZihFci5hZGQoTWF0aC5hdGFuMihBKncqTWF0aC5zaW4oayksZypiK0EqTWF0aC5jb3MoaykpKSxhKz1NP18rdypUdDpfLE1eZj49cl52Pj1yKXt2YXIgVD1Jcih6cihoKSx6cih0KSk7UnIoVCk7dmFyIFM9SXIoaSxUKTtScihTKTt2YXIgRT0oTV5fPj0wPy0xOjEpKk90KFNbMl0pOyhuPkV8fG49PT1FJiYoVFswXXx8VFsxXSkpJiYobys9TV5fPj0wPzE6LTEpfWlmKCFtKyspYnJlYWs7Zj12LGQ9eCxnPWIsaD10fX1yZXR1cm4oYTwta3R8fGE8a3QmJkVyPC1rdCleMSZvfShjLGcpO3MubGVuZ3RoPyh4fHwoby5wb2x5Z29uU3RhcnQoKSx4PSEwKSxZcihzLFFyLGUsbixvKSk6ZSYmKHh8fChvLnBvbHlnb25TdGFydCgpLHg9ITApLG8ubGluZVN0YXJ0KCksbihudWxsLG51bGwsMSxvKSxvLmxpbmVFbmQoKSkseCYmKG8ucG9seWdvbkVuZCgpLHg9ITEpLHM9Zz1udWxsfSxzcGhlcmU6ZnVuY3Rpb24oKXtvLnBvbHlnb25TdGFydCgpLG8ubGluZVN0YXJ0KCksbihudWxsLG51bGwsMSxvKSxvLmxpbmVFbmQoKSxvLnBvbHlnb25FbmQoKX19O2Z1bmN0aW9uIGgodCxyKXt2YXIgbj1hKHQscik7ZSh0PW5bMF0scj1uWzFdKSYmby5wb2ludCh0LHIpfWZ1bmN0aW9uIGYodCxlKXt2YXIgcj1hKHQsZSk7bC5wb2ludChyWzBdLHJbMV0pfWZ1bmN0aW9uIHAoKXt1LnBvaW50PWYsbC5saW5lU3RhcnQoKX1mdW5jdGlvbiBkKCl7dS5wb2ludD1oLGwubGluZUVuZCgpfXZhciBnLG0sdj1LcigpLHk9cih2KSx4PSExO2Z1bmN0aW9uIGIodCxlKXttLnB1c2goW3QsZV0pO3ZhciByPWEodCxlKTt5LnBvaW50KHJbMF0sclsxXSl9ZnVuY3Rpb24gXygpe3kubGluZVN0YXJ0KCksbT1bXX1mdW5jdGlvbiB3KCl7YihtWzBdWzBdLG1bMF1bMV0pLHkubGluZUVuZCgpO3ZhciB0LGU9eS5jbGVhbigpLHI9di5idWZmZXIoKSxuPXIubGVuZ3RoO2lmKG0ucG9wKCksZy5wdXNoKG0pLG09bnVsbCxuKWlmKDEmZSl7dmFyIGksYT0tMTtpZigobj0odD1yWzBdKS5sZW5ndGgtMSk+MCl7Zm9yKHh8fChvLnBvbHlnb25TdGFydCgpLHg9ITApLG8ubGluZVN0YXJ0KCk7KythPG47KW8ucG9pbnQoKGk9dFthXSlbMF0saVsxXSk7by5saW5lRW5kKCl9fWVsc2Ugbj4xJiYyJmUmJnIucHVzaChyLnBvcCgpLmNvbmNhdChyLnNoaWZ0KCkpKSxzLnB1c2goci5maWx0ZXIoSnIpKX1yZXR1cm4gdX19ZnVuY3Rpb24gSnIodCl7cmV0dXJuIHQubGVuZ3RoPjF9ZnVuY3Rpb24gS3IoKXt2YXIgdCxlPVtdO3JldHVybntsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtlLnB1c2godD1bXSl9LHBvaW50OmZ1bmN0aW9uKGUscil7dC5wdXNoKFtlLHJdKX0sbGluZUVuZDpELGJ1ZmZlcjpmdW5jdGlvbigpe3ZhciByPWU7cmV0dXJuIGU9W10sdD1udWxsLHJ9LHJlam9pbjpmdW5jdGlvbigpe2UubGVuZ3RoPjEmJmUucHVzaChlLnBvcCgpLmNvbmNhdChlLnNoaWZ0KCkpKX19fWZ1bmN0aW9uIFFyKHQsZSl7cmV0dXJuKCh0PXQueClbMF08MD90WzFdLUV0LWt0OkV0LXRbMV0pLSgoZT1lLngpWzBdPDA/ZVsxXS1FdC1rdDpFdC1lWzFdKX12YXIgdG49JHIoV3IsZnVuY3Rpb24odCl7dmFyIGUscj1OYU4sbj1OYU4saT1OYU47cmV0dXJue2xpbmVTdGFydDpmdW5jdGlvbigpe3QubGluZVN0YXJ0KCksZT0xfSxwb2ludDpmdW5jdGlvbihhLG8pe3ZhciBzPWE+MD9BdDotQXQsbD15KGEtcik7eShsLUF0KTxrdD8odC5wb2ludChyLG49KG4rbykvMj4wP0V0Oi1FdCksdC5wb2ludChpLG4pLHQubGluZUVuZCgpLHQubGluZVN0YXJ0KCksdC5wb2ludChzLG4pLHQucG9pbnQoYSxuKSxlPTApOmkhPT1zJiZsPj1BdCYmKHkoci1pKTxrdCYmKHItPWkqa3QpLHkoYS1zKTxrdCYmKGEtPXMqa3QpLG49ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYSxvPU1hdGguc2luKHQtcik7cmV0dXJuIHkobyk+a3Q/TWF0aC5hdGFuKChNYXRoLnNpbihlKSooYT1NYXRoLmNvcyhuKSkqTWF0aC5zaW4ociktTWF0aC5zaW4obikqKGk9TWF0aC5jb3MoZSkpKk1hdGguc2luKHQpKS8oaSphKm8pKTooZStuKS8yfShyLG4sYSxvKSx0LnBvaW50KGksbiksdC5saW5lRW5kKCksdC5saW5lU3RhcnQoKSx0LnBvaW50KHMsbiksZT0wKSx0LnBvaW50KHI9YSxuPW8pLGk9c30sbGluZUVuZDpmdW5jdGlvbigpe3QubGluZUVuZCgpLHI9bj1OYU59LGNsZWFuOmZ1bmN0aW9uKCl7cmV0dXJuIDItZX19fSxmdW5jdGlvbih0LGUscixuKXt2YXIgaTtpZihudWxsPT10KWk9cipFdCxuLnBvaW50KC1BdCxpKSxuLnBvaW50KDAsaSksbi5wb2ludChBdCxpKSxuLnBvaW50KEF0LDApLG4ucG9pbnQoQXQsLWkpLG4ucG9pbnQoMCwtaSksbi5wb2ludCgtQXQsLWkpLG4ucG9pbnQoLUF0LDApLG4ucG9pbnQoLUF0LGkpO2Vsc2UgaWYoeSh0WzBdLWVbMF0pPmt0KXt2YXIgYT10WzBdPGVbMF0/QXQ6LUF0O2k9ciphLzIsbi5wb2ludCgtYSxpKSxuLnBvaW50KDAsaSksbi5wb2ludChhLGkpfWVsc2Ugbi5wb2ludChlWzBdLGVbMV0pfSxbLUF0LC1BdC8yXSk7ZnVuY3Rpb24gZW4odCxlLHIsbil7cmV0dXJuIGZ1bmN0aW9uKGkpe3ZhciBhLG89aS5hLHM9aS5iLGw9by54LGM9by55LHU9MCxoPTEsZj1zLngtbCxwPXMueS1jO2lmKGE9dC1sLGZ8fCEoYT4wKSl7aWYoYS89ZixmPDApe2lmKGE8dSlyZXR1cm47YTxoJiYoaD1hKX1lbHNlIGlmKGY+MCl7aWYoYT5oKXJldHVybjthPnUmJih1PWEpfWlmKGE9ci1sLGZ8fCEoYTwwKSl7aWYoYS89ZixmPDApe2lmKGE+aClyZXR1cm47YT51JiYodT1hKX1lbHNlIGlmKGY+MCl7aWYoYTx1KXJldHVybjthPGgmJihoPWEpfWlmKGE9ZS1jLHB8fCEoYT4wKSl7aWYoYS89cCxwPDApe2lmKGE8dSlyZXR1cm47YTxoJiYoaD1hKX1lbHNlIGlmKHA+MCl7aWYoYT5oKXJldHVybjthPnUmJih1PWEpfWlmKGE9bi1jLHB8fCEoYTwwKSl7aWYoYS89cCxwPDApe2lmKGE+aClyZXR1cm47YT51JiYodT1hKX1lbHNlIGlmKHA+MCl7aWYoYTx1KXJldHVybjthPGgmJihoPWEpfXJldHVybiB1PjAmJihpLmE9e3g6bCt1KmYseTpjK3UqcH0pLGg8MSYmKGkuYj17eDpsK2gqZix5OmMraCpwfSksaX19fX19fXZhciBybj0xZTk7ZnVuY3Rpb24gbm4oZSxyLG4saSl7cmV0dXJuIGZ1bmN0aW9uKGwpe3ZhciBjLHUsaCxmLHAsZCxnLG0sdix5LHgsYj1sLF89S3IoKSx3PWVuKGUscixuLGkpLGs9e3BvaW50OlQsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7ay5wb2ludD1TLHUmJnUucHVzaChoPVtdKTt5PSEwLHY9ITEsZz1tPU5hTn0sbGluZUVuZDpmdW5jdGlvbigpe2MmJihTKGYscCksZCYmdiYmXy5yZWpvaW4oKSxjLnB1c2goXy5idWZmZXIoKSkpO2sucG9pbnQ9VCx2JiZsLmxpbmVFbmQoKX0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7bD1fLGM9W10sdT1bXSx4PSEwfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7bD1iLGM9dC5tZXJnZShjKTt2YXIgcj1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPXUubGVuZ3RoLG49dFsxXSxpPTA7aTxyOysraSlmb3IodmFyIGEsbz0xLHM9dVtpXSxsPXMubGVuZ3RoLGM9c1swXTtvPGw7KytvKWE9c1tvXSxjWzFdPD1uP2FbMV0+biYmUHQoYyxhLHQpPjAmJisrZTphWzFdPD1uJiZQdChjLGEsdCk8MCYmLS1lLGM9YTtyZXR1cm4gMCE9PWV9KFtlLGldKSxuPXgmJnIsYT1jLmxlbmd0aDsobnx8YSkmJihsLnBvbHlnb25TdGFydCgpLG4mJihsLmxpbmVTdGFydCgpLE0obnVsbCxudWxsLDEsbCksbC5saW5lRW5kKCkpLGEmJllyKGMsbyxyLE0sbCksbC5wb2x5Z29uRW5kKCkpLGM9dT1oPW51bGx9fTtmdW5jdGlvbiBNKHQsbyxsLGMpe3ZhciB1PTAsaD0wO2lmKG51bGw9PXR8fCh1PWEodCxsKSkhPT0oaD1hKG8sbCkpfHxzKHQsbyk8MF5sPjApZG97Yy5wb2ludCgwPT09dXx8Mz09PXU/ZTpuLHU+MT9pOnIpfXdoaWxlKCh1PSh1K2wrNCklNCkhPT1oKTtlbHNlIGMucG9pbnQob1swXSxvWzFdKX1mdW5jdGlvbiBBKHQsYSl7cmV0dXJuIGU8PXQmJnQ8PW4mJnI8PWEmJmE8PWl9ZnVuY3Rpb24gVCh0LGUpe0EodCxlKSYmbC5wb2ludCh0LGUpfWZ1bmN0aW9uIFModCxlKXt2YXIgcj1BKHQ9TWF0aC5tYXgoLXJuLE1hdGgubWluKHJuLHQpKSxlPU1hdGgubWF4KC1ybixNYXRoLm1pbihybixlKSkpO2lmKHUmJmgucHVzaChbdCxlXSkseSlmPXQscD1lLGQ9cix5PSExLHImJihsLmxpbmVTdGFydCgpLGwucG9pbnQodCxlKSk7ZWxzZSBpZihyJiZ2KWwucG9pbnQodCxlKTtlbHNle3ZhciBuPXthOnt4OmcseTptfSxiOnt4OnQseTplfX07dyhuKT8odnx8KGwubGluZVN0YXJ0KCksbC5wb2ludChuLmEueCxuLmEueSkpLGwucG9pbnQobi5iLngsbi5iLnkpLHJ8fGwubGluZUVuZCgpLHg9ITEpOnImJihsLmxpbmVTdGFydCgpLGwucG9pbnQodCxlKSx4PSExKX1nPXQsbT1lLHY9cn1yZXR1cm4ga307ZnVuY3Rpb24gYSh0LGkpe3JldHVybiB5KHRbMF0tZSk8a3Q/aT4wPzA6Mzp5KHRbMF0tbik8a3Q/aT4wPzI6MTp5KHRbMV0tcik8a3Q/aT4wPzE6MDppPjA/MzoyfWZ1bmN0aW9uIG8odCxlKXtyZXR1cm4gcyh0LngsZS54KX1mdW5jdGlvbiBzKHQsZSl7dmFyIHI9YSh0LDEpLG49YShlLDEpO3JldHVybiByIT09bj9yLW46MD09PXI/ZVsxXS10WzFdOjE9PT1yP3RbMF0tZVswXToyPT09cj90WzFdLWVbMV06ZVswXS10WzBdfX1mdW5jdGlvbiBhbih0KXt2YXIgZT0wLHI9QXQvMyxuPUNuKHQpLGk9bihlLHIpO3JldHVybiBpLnBhcmFsbGVscz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9uKGU9dFswXSpBdC8xODAscj10WzFdKkF0LzE4MCk6W2UvQXQqMTgwLHIvQXQqMTgwXX0saX1mdW5jdGlvbiBvbih0LGUpe3ZhciByPU1hdGguc2luKHQpLG49KHIrTWF0aC5zaW4oZSkpLzIsaT0xK3IqKDIqbi1yKSxhPU1hdGguc3FydChpKS9uO2Z1bmN0aW9uIG8odCxlKXt2YXIgcj1NYXRoLnNxcnQoaS0yKm4qTWF0aC5zaW4oZSkpL247cmV0dXJuW3IqTWF0aC5zaW4odCo9biksYS1yKk1hdGguY29zKHQpXX1yZXR1cm4gby5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj1hLWU7cmV0dXJuW01hdGguYXRhbjIodCxyKS9uLE90KChpLSh0KnQrcipyKSpuKm4pLygyKm4pKV19LG99dC5nZW8uY2xpcEV4dGVudD1mdW5jdGlvbigpe3ZhciB0LGUscixuLGksYSxvPXtzdHJlYW06ZnVuY3Rpb24odCl7cmV0dXJuIGkmJihpLnZhbGlkPSExKSwoaT1hKHQpKS52YWxpZD0hMCxpfSxleHRlbnQ6ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9bm4odD0rc1swXVswXSxlPStzWzBdWzFdLHI9K3NbMV1bMF0sbj0rc1sxXVsxXSksaSYmKGkudmFsaWQ9ITEsaT1udWxsKSxvKTpbW3QsZV0sW3Isbl1dfX07cmV0dXJuIG8uZXh0ZW50KFtbMCwwXSxbOTYwLDUwMF1dKX0sKHQuZ2VvLmNvbmljRXF1YWxBcmVhPWZ1bmN0aW9uKCl7cmV0dXJuIGFuKG9uKX0pLnJhdz1vbix0Lmdlby5hbGJlcnM9ZnVuY3Rpb24oKXtyZXR1cm4gdC5nZW8uY29uaWNFcXVhbEFyZWEoKS5yb3RhdGUoWzk2LDBdKS5jZW50ZXIoWy0uNiwzOC43XSkucGFyYWxsZWxzKFsyOS41LDQ1LjVdKS5zY2FsZSgxMDcwKX0sdC5nZW8uYWxiZXJzVXNhPWZ1bmN0aW9uKCl7dmFyIGUscixuLGksYT10Lmdlby5hbGJlcnMoKSxvPXQuZ2VvLmNvbmljRXF1YWxBcmVhKCkucm90YXRlKFsxNTQsMF0pLmNlbnRlcihbLTIsNTguNV0pLnBhcmFsbGVscyhbNTUsNjVdKSxzPXQuZ2VvLmNvbmljRXF1YWxBcmVhKCkucm90YXRlKFsxNTcsMF0pLmNlbnRlcihbLTMsMTkuOV0pLnBhcmFsbGVscyhbOCwxOF0pLGw9e3BvaW50OmZ1bmN0aW9uKHQscil7ZT1bdCxyXX19O2Z1bmN0aW9uIGModCl7dmFyIGE9dFswXSxvPXRbMV07cmV0dXJuIGU9bnVsbCxyKGEsbyksZXx8KG4oYSxvKSxlKXx8aShhLG8pLGV9cmV0dXJuIGMuaW52ZXJ0PWZ1bmN0aW9uKHQpe3ZhciBlPWEuc2NhbGUoKSxyPWEudHJhbnNsYXRlKCksbj0odFswXS1yWzBdKS9lLGk9KHRbMV0tclsxXSkvZTtyZXR1cm4oaT49LjEyJiZpPC4yMzQmJm4+PS0uNDI1JiZuPC0uMjE0P286aT49LjE2NiYmaTwuMjM0JiZuPj0tLjIxNCYmbjwtLjExNT9zOmEpLmludmVydCh0KX0sYy5zdHJlYW09ZnVuY3Rpb24odCl7dmFyIGU9YS5zdHJlYW0odCkscj1vLnN0cmVhbSh0KSxuPXMuc3RyZWFtKHQpO3JldHVybntwb2ludDpmdW5jdGlvbih0LGkpe2UucG9pbnQodCxpKSxyLnBvaW50KHQsaSksbi5wb2ludCh0LGkpfSxzcGhlcmU6ZnVuY3Rpb24oKXtlLnNwaGVyZSgpLHIuc3BoZXJlKCksbi5zcGhlcmUoKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7ZS5saW5lU3RhcnQoKSxyLmxpbmVTdGFydCgpLG4ubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtlLmxpbmVFbmQoKSxyLmxpbmVFbmQoKSxuLmxpbmVFbmQoKX0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7ZS5wb2x5Z29uU3RhcnQoKSxyLnBvbHlnb25TdGFydCgpLG4ucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtlLnBvbHlnb25FbmQoKSxyLnBvbHlnb25FbmQoKSxuLnBvbHlnb25FbmQoKX19fSxjLnByZWNpc2lvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYS5wcmVjaXNpb24odCksby5wcmVjaXNpb24odCkscy5wcmVjaXNpb24odCksYyk6YS5wcmVjaXNpb24oKX0sYy5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYS5zY2FsZSh0KSxvLnNjYWxlKC4zNSp0KSxzLnNjYWxlKHQpLGMudHJhbnNsYXRlKGEudHJhbnNsYXRlKCkpKTphLnNjYWxlKCl9LGMudHJhbnNsYXRlPWZ1bmN0aW9uKHQpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBhLnRyYW5zbGF0ZSgpO3ZhciBlPWEuc2NhbGUoKSx1PSt0WzBdLGg9K3RbMV07cmV0dXJuIHI9YS50cmFuc2xhdGUodCkuY2xpcEV4dGVudChbW3UtLjQ1NSplLGgtLjIzOCplXSxbdSsuNDU1KmUsaCsuMjM4KmVdXSkuc3RyZWFtKGwpLnBvaW50LG49by50cmFuc2xhdGUoW3UtLjMwNyplLGgrLjIwMSplXSkuY2xpcEV4dGVudChbW3UtLjQyNSplK2t0LGgrLjEyKmUra3RdLFt1LS4yMTQqZS1rdCxoKy4yMzQqZS1rdF1dKS5zdHJlYW0obCkucG9pbnQsaT1zLnRyYW5zbGF0ZShbdS0uMjA1KmUsaCsuMjEyKmVdKS5jbGlwRXh0ZW50KFtbdS0uMjE0KmUra3QsaCsuMTY2KmUra3RdLFt1LS4xMTUqZS1rdCxoKy4yMzQqZS1rdF1dKS5zdHJlYW0obCkucG9pbnQsY30sYy5zY2FsZSgxMDcwKX07dmFyIHNuLGxuLGNuLHVuLGhuLGZuLHBuPXtwb2ludDpELGxpbmVTdGFydDpELGxpbmVFbmQ6RCxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtsbj0wLHBuLmxpbmVTdGFydD1kbn0scG9seWdvbkVuZDpmdW5jdGlvbigpe3BuLmxpbmVTdGFydD1wbi5saW5lRW5kPXBuLnBvaW50PUQsc24rPXkobG4vMil9fTtmdW5jdGlvbiBkbigpe3ZhciB0LGUscixuO2Z1bmN0aW9uIGkodCxlKXtsbis9bip0LXIqZSxyPXQsbj1lfXBuLnBvaW50PWZ1bmN0aW9uKGEsbyl7cG4ucG9pbnQ9aSx0PXI9YSxlPW49b30scG4ubGluZUVuZD1mdW5jdGlvbigpe2kodCxlKX19dmFyIGduPXtwb2ludDpmdW5jdGlvbih0LGUpe3Q8Y24mJihjbj10KTt0PmhuJiYoaG49dCk7ZTx1biYmKHVuPWUpO2U+Zm4mJihmbj1lKX0sbGluZVN0YXJ0OkQsbGluZUVuZDpELHBvbHlnb25TdGFydDpELHBvbHlnb25FbmQ6RH07ZnVuY3Rpb24gbW4oKXt2YXIgdD12big0LjUpLGU9W10scj17cG9pbnQ6bixsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtyLnBvaW50PWl9LGxpbmVFbmQ6byxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtyLmxpbmVFbmQ9c30scG9seWdvbkVuZDpmdW5jdGlvbigpe3IubGluZUVuZD1vLHIucG9pbnQ9bn0scG9pbnRSYWRpdXM6ZnVuY3Rpb24oZSl7cmV0dXJuIHQ9dm4oZSkscn0scmVzdWx0OmZ1bmN0aW9uKCl7aWYoZS5sZW5ndGgpe3ZhciB0PWUuam9pbigiIik7cmV0dXJuIGU9W10sdH19fTtmdW5jdGlvbiBuKHIsbil7ZS5wdXNoKCJNIixyLCIsIixuLHQpfWZ1bmN0aW9uIGkodCxuKXtlLnB1c2goIk0iLHQsIiwiLG4pLHIucG9pbnQ9YX1mdW5jdGlvbiBhKHQscil7ZS5wdXNoKCJMIix0LCIsIixyKX1mdW5jdGlvbiBvKCl7ci5wb2ludD1ufWZ1bmN0aW9uIHMoKXtlLnB1c2goIloiKX1yZXR1cm4gcn1mdW5jdGlvbiB2bih0KXtyZXR1cm4ibTAsIit0KyJhIit0KyIsIit0KyIgMCAxLDEgMCwiKy0yKnQrImEiK3QrIiwiK3QrIiAwIDEsMSAwLCIrMip0KyJ6In12YXIgeW4seG49e3BvaW50OmJuLGxpbmVTdGFydDpfbixsaW5lRW5kOnduLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3huLmxpbmVTdGFydD1rbn0scG9seWdvbkVuZDpmdW5jdGlvbigpe3huLnBvaW50PWJuLHhuLmxpbmVTdGFydD1fbix4bi5saW5lRW5kPXdufX07ZnVuY3Rpb24gYm4odCxlKXt4cis9dCxicis9ZSwrK19yfWZ1bmN0aW9uIF9uKCl7dmFyIHQsZTtmdW5jdGlvbiByKHIsbil7dmFyIGk9ci10LGE9bi1lLG89TWF0aC5zcXJ0KGkqaSthKmEpO3dyKz1vKih0K3IpLzIsa3IrPW8qKGUrbikvMixNcis9byxibih0PXIsZT1uKX14bi5wb2ludD1mdW5jdGlvbihuLGkpe3huLnBvaW50PXIsYm4odD1uLGU9aSl9fWZ1bmN0aW9uIHduKCl7eG4ucG9pbnQ9Ym59ZnVuY3Rpb24ga24oKXt2YXIgdCxlLHIsbjtmdW5jdGlvbiBpKHQsZSl7dmFyIGk9dC1yLGE9ZS1uLG89TWF0aC5zcXJ0KGkqaSthKmEpO3dyKz1vKihyK3QpLzIsa3IrPW8qKG4rZSkvMixNcis9byxBcis9KG89bip0LXIqZSkqKHIrdCksVHIrPW8qKG4rZSksU3IrPTMqbyxibihyPXQsbj1lKX14bi5wb2ludD1mdW5jdGlvbihhLG8pe3huLnBvaW50PWksYm4odD1yPWEsZT1uPW8pfSx4bi5saW5lRW5kPWZ1bmN0aW9uKCl7aSh0LGUpfX1mdW5jdGlvbiBNbih0KXt2YXIgZT00LjUscj17cG9pbnQ6bixsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtyLnBvaW50PWl9LGxpbmVFbmQ6byxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtyLmxpbmVFbmQ9c30scG9seWdvbkVuZDpmdW5jdGlvbigpe3IubGluZUVuZD1vLHIucG9pbnQ9bn0scG9pbnRSYWRpdXM6ZnVuY3Rpb24odCl7cmV0dXJuIGU9dCxyfSxyZXN1bHQ6RH07ZnVuY3Rpb24gbihyLG4pe3QubW92ZVRvKHIrZSxuKSx0LmFyYyhyLG4sZSwwLFR0KX1mdW5jdGlvbiBpKGUsbil7dC5tb3ZlVG8oZSxuKSxyLnBvaW50PWF9ZnVuY3Rpb24gYShlLHIpe3QubGluZVRvKGUscil9ZnVuY3Rpb24gbygpe3IucG9pbnQ9bn1mdW5jdGlvbiBzKCl7dC5jbG9zZVBhdGgoKX1yZXR1cm4gcn1mdW5jdGlvbiBBbih0KXt2YXIgZT0uNSxyPU1hdGguY29zKDMwKkN0KSxuPTE2O2Z1bmN0aW9uIGkoZSl7cmV0dXJuKG4/ZnVuY3Rpb24oZSl7dmFyIHIsaSxvLHMsbCxjLHUsaCxmLHAsZCxnLG09e3BvaW50OnYsbGluZVN0YXJ0OnksbGluZUVuZDpiLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2UucG9seWdvblN0YXJ0KCksbS5saW5lU3RhcnQ9X30scG9seWdvbkVuZDpmdW5jdGlvbigpe2UucG9seWdvbkVuZCgpLG0ubGluZVN0YXJ0PXl9fTtmdW5jdGlvbiB2KHIsbil7cj10KHIsbiksZS5wb2ludChyWzBdLHJbMV0pfWZ1bmN0aW9uIHkoKXtoPU5hTixtLnBvaW50PXgsZS5saW5lU3RhcnQoKX1mdW5jdGlvbiB4KHIsaSl7dmFyIG89enIoW3IsaV0pLHM9dChyLGkpO2EoaCxmLHUscCxkLGcsaD1zWzBdLGY9c1sxXSx1PXIscD1vWzBdLGQ9b1sxXSxnPW9bMl0sbixlKSxlLnBvaW50KGgsZil9ZnVuY3Rpb24gYigpe20ucG9pbnQ9dixlLmxpbmVFbmQoKX1mdW5jdGlvbiBfKCl7eSgpLG0ucG9pbnQ9dyxtLmxpbmVFbmQ9a31mdW5jdGlvbiB3KHQsZSl7eChyPXQsZSksaT1oLG89ZixzPXAsbD1kLGM9ZyxtLnBvaW50PXh9ZnVuY3Rpb24gaygpe2EoaCxmLHUscCxkLGcsaSxvLHIscyxsLGMsbixlKSxtLmxpbmVFbmQ9YixiKCl9cmV0dXJuIG19OmZ1bmN0aW9uKGUpe3JldHVybiBTbihlLGZ1bmN0aW9uKHIsbil7cj10KHIsbiksZS5wb2ludChyWzBdLHJbMV0pfSl9KShlKX1mdW5jdGlvbiBhKG4saSxvLHMsbCxjLHUsaCxmLHAsZCxnLG0sdil7dmFyIHg9dS1uLGI9aC1pLF89eCp4K2IqYjtpZihfPjQqZSYmbS0tKXt2YXIgdz1zK3Asaz1sK2QsTT1jK2csQT1NYXRoLnNxcnQodyp3K2sqaytNKk0pLFQ9TWF0aC5hc2luKE0vPUEpLFM9eSh5KE0pLTEpPGt0fHx5KG8tZik8a3Q/KG8rZikvMjpNYXRoLmF0YW4yKGssdyksRT10KFMsVCksQz1FWzBdLEw9RVsxXSx6PUMtbixQPUwtaSxJPWIqei14KlA7KEkqSS9fPmV8fHkoKHgqeitiKlApL18tLjUpPi4zfHxzKnArbCpkK2MqZzxyKSYmKGEobixpLG8scyxsLGMsQyxMLFMsdy89QSxrLz1BLE0sbSx2KSx2LnBvaW50KEMsTCksYShDLEwsUyx3LGssTSx1LGgsZixwLGQsZyxtLHYpKX19cmV0dXJuIGkucHJlY2lzaW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPShlPXQqdCk+MCYmMTYsaSk6TWF0aC5zcXJ0KGUpfSxpfWZ1bmN0aW9uIFRuKHQpe3RoaXMuc3RyZWFtPXR9ZnVuY3Rpb24gU24odCxlKXtyZXR1cm57cG9pbnQ6ZSxzcGhlcmU6ZnVuY3Rpb24oKXt0LnNwaGVyZSgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0LmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dC5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3QucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt0LnBvbHlnb25FbmQoKX19fWZ1bmN0aW9uIEVuKHQpe3JldHVybiBDbihmdW5jdGlvbigpe3JldHVybiB0fSkoKX1mdW5jdGlvbiBDbihlKXt2YXIgcixuLGksYSxvLHMsbD1BbihmdW5jdGlvbih0LGUpe3JldHVyblsodD1yKHQsZSkpWzBdKmMrYSxvLXRbMV0qY119KSxjPTE1MCx1PTQ4MCxoPTI1MCxmPTAscD0wLGQ9MCxnPTAsbT0wLHY9dG4seD16LGI9bnVsbCxfPW51bGw7ZnVuY3Rpb24gdyh0KXtyZXR1cm5bKHQ9aSh0WzBdKkN0LHRbMV0qQ3QpKVswXSpjK2Esby10WzFdKmNdfWZ1bmN0aW9uIGsodCl7cmV0dXJuKHQ9aS5pbnZlcnQoKHRbMF0tYSkvYywoby10WzFdKS9jKSkmJlt0WzBdKkx0LHRbMV0qTHRdfWZ1bmN0aW9uIE0oKXtpPUdyKG49SW4oZCxnLG0pLHIpO3ZhciB0PXIoZixwKTtyZXR1cm4gYT11LXRbMF0qYyxvPWgrdFsxXSpjLEEoKX1mdW5jdGlvbiBBKCl7cmV0dXJuIHMmJihzLnZhbGlkPSExLHM9bnVsbCksd31yZXR1cm4gdy5zdHJlYW09ZnVuY3Rpb24odCl7cmV0dXJuIHMmJihzLnZhbGlkPSExKSwocz1Mbih2KG4sbCh4KHQpKSkpKS52YWxpZD0hMCxzfSx3LmNsaXBBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odj1udWxsPT10PyhiPXQsdG4pOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguY29zKHQpLHI9ZT4wLG49eShlKT5rdDtyZXR1cm4gJHIoaSxmdW5jdGlvbih0KXt2YXIgZSxzLGwsYyx1O3JldHVybntsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtjPWw9ITEsdT0xfSxwb2ludDpmdW5jdGlvbihoLGYpe3ZhciBwLGQ9W2gsZl0sZz1pKGgsZiksbT1yP2c/MDpvKGgsZik6Zz9vKGgrKGg8MD9BdDotQXQpLGYpOjA7aWYoIWUmJihjPWw9ZykmJnQubGluZVN0YXJ0KCksZyE9PWwmJihwPWEoZSxkKSwoRnIoZSxwKXx8RnIoZCxwKSkmJihkWzBdKz1rdCxkWzFdKz1rdCxnPWkoZFswXSxkWzFdKSkpLGchPT1sKXU9MCxnPyh0LmxpbmVTdGFydCgpLHA9YShkLGUpLHQucG9pbnQocFswXSxwWzFdKSk6KHA9YShlLGQpLHQucG9pbnQocFswXSxwWzFdKSx0LmxpbmVFbmQoKSksZT1wO2Vsc2UgaWYobiYmZSYmcl5nKXt2YXIgdjttJnN8fCEodj1hKGQsZSwhMCkpfHwodT0wLHI/KHQubGluZVN0YXJ0KCksdC5wb2ludCh2WzBdWzBdLHZbMF1bMV0pLHQucG9pbnQodlsxXVswXSx2WzFdWzFdKSx0LmxpbmVFbmQoKSk6KHQucG9pbnQodlsxXVswXSx2WzFdWzFdKSx0LmxpbmVFbmQoKSx0LmxpbmVTdGFydCgpLHQucG9pbnQodlswXVswXSx2WzBdWzFdKSkpfSFnfHxlJiZGcihlLGQpfHx0LnBvaW50KGRbMF0sZFsxXSksZT1kLGw9ZyxzPW19LGxpbmVFbmQ6ZnVuY3Rpb24oKXtsJiZ0LmxpbmVFbmQoKSxlPW51bGx9LGNsZWFuOmZ1bmN0aW9uKCl7cmV0dXJuIHV8KGMmJmwpPDwxfX19LEJuKHQsNipDdCkscj9bMCwtdF06Wy1BdCx0LUF0XSk7ZnVuY3Rpb24gaSh0LHIpe3JldHVybiBNYXRoLmNvcyh0KSpNYXRoLmNvcyhyKT5lfWZ1bmN0aW9uIGEodCxyLG4pe3ZhciBpPVsxLDAsMF0sYT1Jcih6cih0KSx6cihyKSksbz1QcihhLGEpLHM9YVswXSxsPW8tcypzO2lmKCFsKXJldHVybiFuJiZ0O3ZhciBjPWUqby9sLHU9LWUqcy9sLGg9SXIoaSxhKSxmPURyKGksYyk7T3IoZixEcihhLHUpKTt2YXIgcD1oLGQ9UHIoZixwKSxnPVByKHAscCksbT1kKmQtZyooUHIoZixmKS0xKTtpZighKG08MCkpe3ZhciB2PU1hdGguc3FydChtKSx4PURyKHAsKC1kLXYpL2cpO2lmKE9yKHgsZikseD1Ccih4KSwhbilyZXR1cm4geDt2YXIgYixfPXRbMF0sdz1yWzBdLGs9dFsxXSxNPXJbMV07dzxfJiYoYj1fLF89dyx3PWIpO3ZhciBBPXctXyxUPXkoQS1BdCk8a3Q7aWYoIVQmJk08ayYmKGI9ayxrPU0sTT1iKSxUfHxBPGt0P1Q/aytNPjBeeFsxXTwoeSh4WzBdLV8pPGt0P2s6TSk6azw9eFsxXSYmeFsxXTw9TTpBPkF0XihfPD14WzBdJiZ4WzBdPD13KSl7dmFyIFM9RHIocCwoLWQrdikvZyk7cmV0dXJuIE9yKFMsZiksW3gsQnIoUyldfX19ZnVuY3Rpb24gbyhlLG4pe3ZhciBpPXI/dDpBdC10LGE9MDtyZXR1cm4gZTwtaT9hfD0xOmU+aSYmKGF8PTIpLG48LWk/YXw9NDpuPmkmJihhfD04KSxhfX0oKGI9K3QpKkN0KSxBKCkpOmJ9LHcuY2xpcEV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oXz10LHg9dD9ubih0WzBdWzBdLHRbMF1bMV0sdFsxXVswXSx0WzFdWzFdKTp6LEEoKSk6X30sdy5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0rdCxNKCkpOmN9LHcudHJhbnNsYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PSt0WzBdLGg9K3RbMV0sTSgpKTpbdSxoXX0sdy5jZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9dFswXSUzNjAqQ3QscD10WzFdJTM2MCpDdCxNKCkpOltmKkx0LHAqTHRdfSx3LnJvdGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD10WzBdJTM2MCpDdCxnPXRbMV0lMzYwKkN0LG09dC5sZW5ndGg+Mj90WzJdJTM2MCpDdDowLE0oKSk6W2QqTHQsZypMdCxtKkx0XX0sdC5yZWJpbmQodyxsLCJwcmVjaXNpb24iKSxmdW5jdGlvbigpe3JldHVybiByPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpLHcuaW52ZXJ0PXIuaW52ZXJ0JiZrLE0oKX19ZnVuY3Rpb24gTG4odCl7cmV0dXJuIFNuKHQsZnVuY3Rpb24oZSxyKXt0LnBvaW50KGUqQ3QscipDdCl9KX1mdW5jdGlvbiB6bih0LGUpe3JldHVyblt0LGVdfWZ1bmN0aW9uIFBuKHQsZSl7cmV0dXJuW3Q+QXQ/dC1UdDp0PC1BdD90K1R0OnQsZV19ZnVuY3Rpb24gSW4odCxlLHIpe3JldHVybiB0P2V8fHI/R3IoRG4odCksUm4oZSxyKSk6RG4odCk6ZXx8cj9SbihlLHIpOlBufWZ1bmN0aW9uIE9uKHQpe3JldHVybiBmdW5jdGlvbihlLHIpe3JldHVyblsoZSs9dCk+QXQ/ZS1UdDplPC1BdD9lK1R0OmUscl19fWZ1bmN0aW9uIERuKHQpe3ZhciBlPU9uKHQpO3JldHVybiBlLmludmVydD1PbigtdCksZX1mdW5jdGlvbiBSbih0LGUpe3ZhciByPU1hdGguY29zKHQpLG49TWF0aC5zaW4odCksaT1NYXRoLmNvcyhlKSxhPU1hdGguc2luKGUpO2Z1bmN0aW9uIG8odCxlKXt2YXIgbz1NYXRoLmNvcyhlKSxzPU1hdGguY29zKHQpKm8sbD1NYXRoLnNpbih0KSpvLGM9TWF0aC5zaW4oZSksdT1jKnIrcypuO3JldHVybltNYXRoLmF0YW4yKGwqaS11KmEscypyLWMqbiksT3QodSppK2wqYSldfXJldHVybiBvLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciBvPU1hdGguY29zKGUpLHM9TWF0aC5jb3ModCkqbyxsPU1hdGguc2luKHQpKm8sYz1NYXRoLnNpbihlKSx1PWMqaS1sKmE7cmV0dXJuW01hdGguYXRhbjIobCppK2MqYSxzKnIrdSpuKSxPdCh1KnItcypuKV19LG99ZnVuY3Rpb24gQm4odCxlKXt2YXIgcj1NYXRoLmNvcyh0KSxuPU1hdGguc2luKHQpO3JldHVybiBmdW5jdGlvbihpLGEsbyxzKXt2YXIgbD1vKmU7bnVsbCE9aT8oaT1GbihyLGkpLGE9Rm4ocixhKSwobz4wP2k8YTppPmEpJiYoaSs9bypUdCkpOihpPXQrbypUdCxhPXQtLjUqbCk7Zm9yKHZhciBjLHU9aTtvPjA/dT5hOnU8YTt1LT1sKXMucG9pbnQoKGM9QnIoW3IsLW4qTWF0aC5jb3ModSksLW4qTWF0aC5zaW4odSldKSlbMF0sY1sxXSl9fWZ1bmN0aW9uIEZuKHQsZSl7dmFyIHI9enIoZSk7clswXS09dCxScihyKTt2YXIgbj1JdCgtclsxXSk7cmV0dXJuKCgtclsyXTwwPy1uOm4pKzIqTWF0aC5QSS1rdCklKDIqTWF0aC5QSSl9ZnVuY3Rpb24gTm4oZSxyLG4pe3ZhciBpPXQucmFuZ2UoZSxyLWt0LG4pLmNvbmNhdChyKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGkubWFwKGZ1bmN0aW9uKGUpe3JldHVyblt0LGVdfSl9fWZ1bmN0aW9uIGpuKGUscixuKXt2YXIgaT10LnJhbmdlKGUsci1rdCxuKS5jb25jYXQocik7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBpLm1hcChmdW5jdGlvbihlKXtyZXR1cm5bZSx0XX0pfX1mdW5jdGlvbiBWbih0KXtyZXR1cm4gdC5zb3VyY2V9ZnVuY3Rpb24gVW4odCl7cmV0dXJuIHQudGFyZ2V0fXQuZ2VvLnBhdGg9ZnVuY3Rpb24oKXt2YXIgZSxyLG4saSxhLG89NC41O2Z1bmN0aW9uIHMoZSl7cmV0dXJuIGUmJigiZnVuY3Rpb24iPT10eXBlb2YgbyYmaS5wb2ludFJhZGl1cygrby5hcHBseSh0aGlzLGFyZ3VtZW50cykpLGEmJmEudmFsaWR8fChhPW4oaSkpLHQuZ2VvLnN0cmVhbShlLGEpKSxpLnJlc3VsdCgpfWZ1bmN0aW9uIGwoKXtyZXR1cm4gYT1udWxsLHN9cmV0dXJuIHMuYXJlYT1mdW5jdGlvbihlKXtyZXR1cm4gc249MCx0Lmdlby5zdHJlYW0oZSxuKHBuKSksc259LHMuY2VudHJvaWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHhyPWJyPV9yPXdyPWtyPU1yPUFyPVRyPVNyPTAsdC5nZW8uc3RyZWFtKGUsbih4bikpLFNyP1tBci9TcixUci9Tcl06TXI/W3dyL01yLGtyL01yXTpfcj9beHIvX3IsYnIvX3JdOltOYU4sTmFOXX0scy5ib3VuZHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGhuPWZuPS0oY249dW49MS8wKSx0Lmdlby5zdHJlYW0oZSxuKGduKSksW1tjbix1bl0sW2huLGZuXV19LHMucHJvamVjdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0oZT10KT90LnN0cmVhbXx8KHI9dCxpPUFuKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIoW3QqTHQsZSpMdF0pfSksZnVuY3Rpb24odCl7cmV0dXJuIExuKGkodCkpfSk6eixsKCkpOmU7dmFyIHIsaX0scy5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW51bGw9PShyPXQpP25ldyBtbjpuZXcgTW4odCksImZ1bmN0aW9uIiE9dHlwZW9mIG8mJmkucG9pbnRSYWRpdXMobyksbCgpKTpyfSxzLnBvaW50UmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6KGkucG9pbnRSYWRpdXMoK3QpLCt0KSxzKTpvfSxzLnByb2plY3Rpb24odC5nZW8uYWxiZXJzVXNhKCkpLmNvbnRleHQobnVsbCl9LHQuZ2VvLnRyYW5zZm9ybT1mdW5jdGlvbih0KXtyZXR1cm57c3RyZWFtOmZ1bmN0aW9uKGUpe3ZhciByPW5ldyBUbihlKTtmb3IodmFyIG4gaW4gdClyW25dPXRbbl07cmV0dXJuIHJ9fX0sVG4ucHJvdG90eXBlPXtwb2ludDpmdW5jdGlvbih0LGUpe3RoaXMuc3RyZWFtLnBvaW50KHQsZSl9LHNwaGVyZTpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnNwaGVyZSgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLmxpbmVFbmQoKX0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5wb2x5Z29uRW5kKCl9fSx0Lmdlby5wcm9qZWN0aW9uPUVuLHQuZ2VvLnByb2plY3Rpb25NdXRhdG9yPUNuLCh0Lmdlby5lcXVpcmVjdGFuZ3VsYXI9ZnVuY3Rpb24oKXtyZXR1cm4gRW4oem4pfSkucmF3PXpuLmludmVydD16bix0Lmdlby5yb3RhdGlvbj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3JldHVybihlPXQoZVswXSpDdCxlWzFdKkN0KSlbMF0qPUx0LGVbMV0qPUx0LGV9cmV0dXJuIHQ9SW4odFswXSUzNjAqQ3QsdFsxXSpDdCx0Lmxlbmd0aD4yP3RbMl0qQ3Q6MCksZS5pbnZlcnQ9ZnVuY3Rpb24oZSl7cmV0dXJuKGU9dC5pbnZlcnQoZVswXSpDdCxlWzFdKkN0KSlbMF0qPUx0LGVbMV0qPUx0LGV9LGV9LFBuLmludmVydD16bix0Lmdlby5jaXJjbGU9ZnVuY3Rpb24oKXt2YXIgdCxlLHI9WzAsMF0sbj02O2Z1bmN0aW9uIGkoKXt2YXIgdD0iZnVuY3Rpb24iPT10eXBlb2Ygcj9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpyLG49SW4oLXRbMF0qQ3QsLXRbMV0qQ3QsMCkuaW52ZXJ0LGk9W107cmV0dXJuIGUobnVsbCxudWxsLDEse3BvaW50OmZ1bmN0aW9uKHQsZSl7aS5wdXNoKHQ9bih0LGUpKSx0WzBdKj1MdCx0WzFdKj1MdH19KSx7dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6W2ldfX1yZXR1cm4gaS5vcmlnaW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxpKTpyfSxpLmFuZ2xlPWZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPUJuKCh0PStyKSpDdCxuKkN0KSxpKTp0fSxpLnByZWNpc2lvbj1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1Cbih0KkN0LChuPStyKSpDdCksaSk6bn0saS5hbmdsZSg5MCl9LHQuZ2VvLmRpc3RhbmNlPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj0oZVswXS10WzBdKSpDdCxpPXRbMV0qQ3QsYT1lWzFdKkN0LG89TWF0aC5zaW4obikscz1NYXRoLmNvcyhuKSxsPU1hdGguc2luKGkpLGM9TWF0aC5jb3MoaSksdT1NYXRoLnNpbihhKSxoPU1hdGguY29zKGEpO3JldHVybiBNYXRoLmF0YW4yKE1hdGguc3FydCgocj1oKm8pKnIrKHI9Yyp1LWwqaCpzKSpyKSxsKnUrYypoKnMpfSx0Lmdlby5ncmF0aWN1bGU9ZnVuY3Rpb24oKXt2YXIgZSxyLG4saSxhLG8scyxsLGMsdSxoLGYscD0xMCxkPXAsZz05MCxtPTM2MCx2PTIuNTtmdW5jdGlvbiB4KCl7cmV0dXJue3R5cGU6Ik11bHRpTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6YigpfX1mdW5jdGlvbiBiKCl7cmV0dXJuIHQucmFuZ2UoTWF0aC5jZWlsKGkvZykqZyxuLGcpLm1hcChoKS5jb25jYXQodC5yYW5nZShNYXRoLmNlaWwobC9tKSptLHMsbSkubWFwKGYpKS5jb25jYXQodC5yYW5nZShNYXRoLmNlaWwoci9wKSpwLGUscCkuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB5KHQlZyk+a3R9KS5tYXAoYykpLmNvbmNhdCh0LnJhbmdlKE1hdGguY2VpbChvL2QpKmQsYSxkKS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHkodCVtKT5rdH0pLm1hcCh1KSl9cmV0dXJuIHgubGluZXM9ZnVuY3Rpb24oKXtyZXR1cm4gYigpLm1hcChmdW5jdGlvbih0KXtyZXR1cm57dHlwZToiTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6dH19KX0seC5vdXRsaW5lPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6IlBvbHlnb24iLGNvb3JkaW5hdGVzOltoKGkpLmNvbmNhdChmKHMpLnNsaWNlKDEpLGgobikucmV2ZXJzZSgpLnNsaWNlKDEpLGYobCkucmV2ZXJzZSgpLnNsaWNlKDEpKV19fSx4LmV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD94Lm1ham9yRXh0ZW50KHQpLm1pbm9yRXh0ZW50KHQpOngubWlub3JFeHRlbnQoKX0seC5tYWpvckV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0rdFswXVswXSxuPSt0WzFdWzBdLGw9K3RbMF1bMV0scz0rdFsxXVsxXSxpPm4mJih0PWksaT1uLG49dCksbD5zJiYodD1sLGw9cyxzPXQpLHgucHJlY2lzaW9uKHYpKTpbW2ksbF0sW24sc11dfSx4Lm1pbm9yRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSt0WzBdWzBdLGU9K3RbMV1bMF0sbz0rdFswXVsxXSxhPSt0WzFdWzFdLHI+ZSYmKHQ9cixyPWUsZT10KSxvPmEmJih0PW8sbz1hLGE9dCkseC5wcmVjaXNpb24odikpOltbcixvXSxbZSxhXV19LHguc3RlcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD94Lm1ham9yU3RlcCh0KS5taW5vclN0ZXAodCk6eC5taW5vclN0ZXAoKX0seC5tYWpvclN0ZXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGc9K3RbMF0sbT0rdFsxXSx4KTpbZyxtXX0seC5taW5vclN0ZXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9K3RbMF0sZD0rdFsxXSx4KTpbcCxkXX0seC5wcmVjaXNpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHY9K3QsYz1ObihvLGEsOTApLHU9am4ocixlLHYpLGg9Tm4obCxzLDkwKSxmPWpuKGksbix2KSx4KTp2fSx4Lm1ham9yRXh0ZW50KFtbLTE4MCwtOTAra3RdLFsxODAsOTAta3RdXSkubWlub3JFeHRlbnQoW1stMTgwLC04MC1rdF0sWzE4MCw4MCtrdF1dKX0sdC5nZW8uZ3JlYXRBcmM9ZnVuY3Rpb24oKXt2YXIgZSxyLG49Vm4saT1VbjtmdW5jdGlvbiBhKCl7cmV0dXJue3R5cGU6IkxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOltlfHxuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxyfHxpLmFwcGx5KHRoaXMsYXJndW1lbnRzKV19fXJldHVybiBhLmRpc3RhbmNlPWZ1bmN0aW9uKCl7cmV0dXJuIHQuZ2VvLmRpc3RhbmNlKGV8fG4uYXBwbHkodGhpcyxhcmd1bWVudHMpLHJ8fGkuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0sYS5zb3VyY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P251bGw6dCxhKTpufSxhLnRhcmdldD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10LHI9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/bnVsbDp0LGEpOml9LGEucHJlY2lzaW9uPWZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/YTowfSxhfSx0Lmdlby5pbnRlcnBvbGF0ZT1mdW5jdGlvbih0LGUpe3JldHVybiByPXRbMF0qQ3Qsbj10WzFdKkN0LGk9ZVswXSpDdCxhPWVbMV0qQ3Qsbz1NYXRoLmNvcyhuKSxzPU1hdGguc2luKG4pLGw9TWF0aC5jb3MoYSksYz1NYXRoLnNpbihhKSx1PW8qTWF0aC5jb3MociksaD1vKk1hdGguc2luKHIpLGY9bCpNYXRoLmNvcyhpKSxwPWwqTWF0aC5zaW4oaSksZD0yKk1hdGguYXNpbihNYXRoLnNxcnQoUnQoYS1uKStvKmwqUnQoaS1yKSkpLGc9MS9NYXRoLnNpbihkKSwobT1kP2Z1bmN0aW9uKHQpe3ZhciBlPU1hdGguc2luKHQqPWQpKmcscj1NYXRoLnNpbihkLXQpKmcsbj1yKnUrZSpmLGk9cipoK2UqcCxhPXIqcytlKmM7cmV0dXJuW01hdGguYXRhbjIoaSxuKSpMdCxNYXRoLmF0YW4yKGEsTWF0aC5zcXJ0KG4qbitpKmkpKSpMdF19OmZ1bmN0aW9uKCl7cmV0dXJuW3IqTHQsbipMdF19KS5kaXN0YW5jZT1kLG07dmFyIHIsbixpLGEsbyxzLGwsYyx1LGgsZixwLGQsZyxtfSx0Lmdlby5sZW5ndGg9ZnVuY3Rpb24oZSl7cmV0dXJuIHluPTAsdC5nZW8uc3RyZWFtKGUscW4pLHlufTt2YXIgcW49e3NwaGVyZTpELHBvaW50OkQsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dmFyIHQsZSxyO2Z1bmN0aW9uIG4obixpKXt2YXIgYT1NYXRoLnNpbihpKj1DdCksbz1NYXRoLmNvcyhpKSxzPXkoKG4qPUN0KS10KSxsPU1hdGguY29zKHMpO3luKz1NYXRoLmF0YW4yKE1hdGguc3FydCgocz1vKk1hdGguc2luKHMpKSpzKyhzPXIqYS1lKm8qbCkqcyksZSphK3IqbypsKSx0PW4sZT1hLHI9b31xbi5wb2ludD1mdW5jdGlvbihpLGEpe3Q9aSpDdCxlPU1hdGguc2luKGEqPUN0KSxyPU1hdGguY29zKGEpLHFuLnBvaW50PW59LHFuLmxpbmVFbmQ9ZnVuY3Rpb24oKXtxbi5wb2ludD1xbi5saW5lRW5kPUR9fSxsaW5lRW5kOkQscG9seWdvblN0YXJ0OkQscG9seWdvbkVuZDpEfTtmdW5jdGlvbiBIbih0LGUpe2Z1bmN0aW9uIHIoZSxyKXt2YXIgbj1NYXRoLmNvcyhlKSxpPU1hdGguY29zKHIpLGE9dChuKmkpO3JldHVyblthKmkqTWF0aC5zaW4oZSksYSpNYXRoLnNpbihyKV19cmV0dXJuIHIuaW52ZXJ0PWZ1bmN0aW9uKHQscil7dmFyIG49TWF0aC5zcXJ0KHQqdCtyKnIpLGk9ZShuKSxhPU1hdGguc2luKGkpLG89TWF0aC5jb3MoaSk7cmV0dXJuW01hdGguYXRhbjIodCphLG4qbyksTWF0aC5hc2luKG4mJnIqYS9uKV19LHJ9dmFyIEduPUhuKGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnNxcnQoMi8oMSt0KSl9LGZ1bmN0aW9uKHQpe3JldHVybiAyKk1hdGguYXNpbih0LzIpfSk7KHQuZ2VvLmF6aW11dGhhbEVxdWFsQXJlYT1mdW5jdGlvbigpe3JldHVybiBFbihHbil9KS5yYXc9R247dmFyIFduPUhuKGZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguYWNvcyh0KTtyZXR1cm4gZSYmZS9NYXRoLnNpbihlKX0seik7ZnVuY3Rpb24gWW4odCxlKXt2YXIgcj1NYXRoLmNvcyh0KSxuPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnRhbihBdC80K3QvMil9LGk9dD09PWU/TWF0aC5zaW4odCk6TWF0aC5sb2coci9NYXRoLmNvcyhlKSkvTWF0aC5sb2cobihlKS9uKHQpKSxhPXIqTWF0aC5wb3cobih0KSxpKS9pO2lmKCFpKXJldHVybiAkbjtmdW5jdGlvbiBvKHQsZSl7YT4wP2U8LUV0K2t0JiYoZT0tRXQra3QpOmU+RXQta3QmJihlPUV0LWt0KTt2YXIgcj1hL01hdGgucG93KG4oZSksaSk7cmV0dXJuW3IqTWF0aC5zaW4oaSp0KSxhLXIqTWF0aC5jb3MoaSp0KV19cmV0dXJuIG8uaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9YS1lLG49enQoaSkqTWF0aC5zcXJ0KHQqdCtyKnIpO3JldHVybltNYXRoLmF0YW4yKHQscikvaSwyKk1hdGguYXRhbihNYXRoLnBvdyhhL24sMS9pKSktRXRdfSxvfWZ1bmN0aW9uIFhuKHQsZSl7dmFyIHI9TWF0aC5jb3ModCksbj10PT09ZT9NYXRoLnNpbih0KTooci1NYXRoLmNvcyhlKSkvKGUtdCksaT1yL24rdDtpZih5KG4pPGt0KXJldHVybiB6bjtmdW5jdGlvbiBhKHQsZSl7dmFyIHI9aS1lO3JldHVybltyKk1hdGguc2luKG4qdCksaS1yKk1hdGguY29zKG4qdCldfXJldHVybiBhLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciByPWktZTtyZXR1cm5bTWF0aC5hdGFuMih0LHIpL24saS16dChuKSpNYXRoLnNxcnQodCp0K3IqcildfSxhfSh0Lmdlby5hemltdXRoYWxFcXVpZGlzdGFudD1mdW5jdGlvbigpe3JldHVybiBFbihXbil9KS5yYXc9V24sKHQuZ2VvLmNvbmljQ29uZm9ybWFsPWZ1bmN0aW9uKCl7cmV0dXJuIGFuKFluKX0pLnJhdz1ZbiwodC5nZW8uY29uaWNFcXVpZGlzdGFudD1mdW5jdGlvbigpe3JldHVybiBhbihYbil9KS5yYXc9WG47dmFyIFpuPUhuKGZ1bmN0aW9uKHQpe3JldHVybiAxL3R9LE1hdGguYXRhbik7ZnVuY3Rpb24gJG4odCxlKXtyZXR1cm5bdCxNYXRoLmxvZyhNYXRoLnRhbihBdC80K2UvMikpXX1mdW5jdGlvbiBKbih0KXt2YXIgZSxyPUVuKHQpLG49ci5zY2FsZSxpPXIudHJhbnNsYXRlLGE9ci5jbGlwRXh0ZW50O3JldHVybiByLnNjYWxlPWZ1bmN0aW9uKCl7dmFyIHQ9bi5hcHBseShyLGFyZ3VtZW50cyk7cmV0dXJuIHQ9PT1yP2U/ci5jbGlwRXh0ZW50KG51bGwpOnI6dH0sci50cmFuc2xhdGU9ZnVuY3Rpb24oKXt2YXIgdD1pLmFwcGx5KHIsYXJndW1lbnRzKTtyZXR1cm4gdD09PXI/ZT9yLmNsaXBFeHRlbnQobnVsbCk6cjp0fSxyLmNsaXBFeHRlbnQ9ZnVuY3Rpb24odCl7dmFyIG89YS5hcHBseShyLGFyZ3VtZW50cyk7aWYobz09PXIpe2lmKGU9bnVsbD09dCl7dmFyIHM9QXQqbigpLGw9aSgpO2EoW1tsWzBdLXMsbFsxXS1zXSxbbFswXStzLGxbMV0rc11dKX19ZWxzZSBlJiYobz1udWxsKTtyZXR1cm4gb30sci5jbGlwRXh0ZW50KG51bGwpfSh0Lmdlby5nbm9tb25pYz1mdW5jdGlvbigpe3JldHVybiBFbihabil9KS5yYXc9Wm4sJG4uaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuW3QsMipNYXRoLmF0YW4oTWF0aC5leHAoZSkpLUV0XX0sKHQuZ2VvLm1lcmNhdG9yPWZ1bmN0aW9uKCl7cmV0dXJuIEpuKCRuKX0pLnJhdz0kbjt2YXIgS249SG4oZnVuY3Rpb24oKXtyZXR1cm4gMX0sTWF0aC5hc2luKTsodC5nZW8ub3J0aG9ncmFwaGljPWZ1bmN0aW9uKCl7cmV0dXJuIEVuKEtuKX0pLnJhdz1Lbjt2YXIgUW49SG4oZnVuY3Rpb24odCl7cmV0dXJuIDEvKDErdCl9LGZ1bmN0aW9uKHQpe3JldHVybiAyKk1hdGguYXRhbih0KX0pO2Z1bmN0aW9uIHRpKHQsZSl7cmV0dXJuW01hdGgubG9nKE1hdGgudGFuKEF0LzQrZS8yKSksLXRdfWZ1bmN0aW9uIGVpKHQpe3JldHVybiB0WzBdfWZ1bmN0aW9uIHJpKHQpe3JldHVybiB0WzFdfWZ1bmN0aW9uIG5pKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPVswLDFdLG49MixpPTI7aTxlO2krKyl7Zm9yKDtuPjEmJlB0KHRbcltuLTJdXSx0W3Jbbi0xXV0sdFtpXSk8PTA7KS0tbjtyW24rK109aX1yZXR1cm4gci5zbGljZSgwLG4pfWZ1bmN0aW9uIGlpKHQsZSl7cmV0dXJuIHRbMF0tZVswXXx8dFsxXS1lWzFdfSh0Lmdlby5zdGVyZW9ncmFwaGljPWZ1bmN0aW9uKCl7cmV0dXJuIEVuKFFuKX0pLnJhdz1Rbix0aS5pbnZlcnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm5bLWUsMipNYXRoLmF0YW4oTWF0aC5leHAodCkpLUV0XX0sKHQuZ2VvLnRyYW5zdmVyc2VNZXJjYXRvcj1mdW5jdGlvbigpe3ZhciB0PUpuKHRpKSxlPXQuY2VudGVyLHI9dC5yb3RhdGU7cmV0dXJuIHQuY2VudGVyPWZ1bmN0aW9uKHQpe3JldHVybiB0P2UoWy10WzFdLHRbMF1dKTpbKHQ9ZSgpKVsxXSwtdFswXV19LHQucm90YXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0P3IoW3RbMF0sdFsxXSx0Lmxlbmd0aD4yP3RbMl0rOTA6OTBdKTpbKHQ9cigpKVswXSx0WzFdLHRbMl0tOTBdfSxyKFswLDAsOTBdKX0pLnJhdz10aSx0Lmdlb209e30sdC5nZW9tLmh1bGw9ZnVuY3Rpb24odCl7dmFyIGU9ZWkscj1yaTtpZihhcmd1bWVudHMubGVuZ3RoKXJldHVybiBuKHQpO2Z1bmN0aW9uIG4odCl7aWYodC5sZW5ndGg8MylyZXR1cm5bXTt2YXIgbixpPW1lKGUpLGE9bWUociksbz10Lmxlbmd0aCxzPVtdLGw9W107Zm9yKG49MDtuPG87bisrKXMucHVzaChbK2kuY2FsbCh0aGlzLHRbbl0sbiksK2EuY2FsbCh0aGlzLHRbbl0sbiksbl0pO2ZvcihzLnNvcnQoaWkpLG49MDtuPG87bisrKWwucHVzaChbc1tuXVswXSwtc1tuXVsxXV0pO3ZhciBjPW5pKHMpLHU9bmkobCksaD11WzBdPT09Y1swXSxmPXVbdS5sZW5ndGgtMV09PT1jW2MubGVuZ3RoLTFdLHA9W107Zm9yKG49Yy5sZW5ndGgtMTtuPj0wOy0tbilwLnB1c2godFtzW2Nbbl1dWzJdXSk7Zm9yKG49K2g7bjx1Lmxlbmd0aC1mOysrbilwLnB1c2godFtzW3Vbbl1dWzJdXSk7cmV0dXJuIHB9cmV0dXJuIG4ueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LG4pOmV9LG4ueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LG4pOnJ9LG59LHQuZ2VvbS5wb2x5Z29uPWZ1bmN0aW9uKHQpe3JldHVybiBVKHQsYWkpLHR9O3ZhciBhaT10Lmdlb20ucG9seWdvbi5wcm90b3R5cGU9W107ZnVuY3Rpb24gb2kodCxlLHIpe3JldHVybihyWzBdLWVbMF0pKih0WzFdLWVbMV0pPChyWzFdLWVbMV0pKih0WzBdLWVbMF0pfWZ1bmN0aW9uIHNpKHQsZSxyLG4pe3ZhciBpPXRbMF0sYT1yWzBdLG89ZVswXS1pLHM9blswXS1hLGw9dFsxXSxjPXJbMV0sdT1lWzFdLWwsaD1uWzFdLWMsZj0ocyoobC1jKS1oKihpLWEpKS8oaCpvLXMqdSk7cmV0dXJuW2krZipvLGwrZip1XX1mdW5jdGlvbiBsaSh0KXt2YXIgZT10WzBdLHI9dFt0Lmxlbmd0aC0xXTtyZXR1cm4hKGVbMF0tclswXXx8ZVsxXS1yWzFdKX1haS5hcmVhPWZ1bmN0aW9uKCl7Zm9yKHZhciB0LGU9LTEscj10aGlzLmxlbmd0aCxuPXRoaXNbci0xXSxpPTA7KytlPHI7KXQ9bixuPXRoaXNbZV0saSs9dFsxXSpuWzBdLXRbMF0qblsxXTtyZXR1cm4uNSppfSxhaS5jZW50cm9pZD1mdW5jdGlvbih0KXt2YXIgZSxyLG49LTEsaT10aGlzLmxlbmd0aCxhPTAsbz0wLHM9dGhpc1tpLTFdO2Zvcihhcmd1bWVudHMubGVuZ3RofHwodD0tMS8oNip0aGlzLmFyZWEoKSkpOysrbjxpOyllPXMscz10aGlzW25dLHI9ZVswXSpzWzFdLXNbMF0qZVsxXSxhKz0oZVswXStzWzBdKSpyLG8rPShlWzFdK3NbMV0pKnI7cmV0dXJuW2EqdCxvKnRdfSxhaS5jbGlwPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyLG4saSxhLG8scz1saSh0KSxsPS0xLGM9dGhpcy5sZW5ndGgtbGkodGhpcyksdT10aGlzW2MtMV07KytsPGM7KXtmb3IoZT10LnNsaWNlKCksdC5sZW5ndGg9MCxpPXRoaXNbbF0sYT1lWyhuPWUubGVuZ3RoLXMpLTFdLHI9LTE7KytyPG47KW9pKG89ZVtyXSx1LGkpPyhvaShhLHUsaSl8fHQucHVzaChzaShhLG8sdSxpKSksdC5wdXNoKG8pKTpvaShhLHUsaSkmJnQucHVzaChzaShhLG8sdSxpKSksYT1vO3MmJnQucHVzaCh0WzBdKSx1PWl9cmV0dXJuIHR9O3ZhciBjaSx1aSxoaSxmaSxwaSxkaT1bXSxnaT1bXTtmdW5jdGlvbiBtaSgpe09pKHRoaXMpLHRoaXMuZWRnZT10aGlzLnNpdGU9dGhpcy5jaXJjbGU9bnVsbH1mdW5jdGlvbiB2aSh0KXt2YXIgZT1kaS5wb3AoKXx8bmV3IG1pO3JldHVybiBlLnNpdGU9dCxlfWZ1bmN0aW9uIHlpKHQpe1NpKHQpLGhpLnJlbW92ZSh0KSxkaS5wdXNoKHQpLE9pKHQpfWZ1bmN0aW9uIHhpKHQpe3ZhciBlPXQuY2lyY2xlLHI9ZS54LG49ZS5jeSxpPXt4OnIseTpufSxhPXQuUCxvPXQuTixzPVt0XTt5aSh0KTtmb3IodmFyIGw9YTtsLmNpcmNsZSYmeShyLWwuY2lyY2xlLngpPGt0JiZ5KG4tbC5jaXJjbGUuY3kpPGt0OylhPWwuUCxzLnVuc2hpZnQobCkseWkobCksbD1hO3MudW5zaGlmdChsKSxTaShsKTtmb3IodmFyIGM9bztjLmNpcmNsZSYmeShyLWMuY2lyY2xlLngpPGt0JiZ5KG4tYy5jaXJjbGUuY3kpPGt0OylvPWMuTixzLnB1c2goYykseWkoYyksYz1vO3MucHVzaChjKSxTaShjKTt2YXIgdSxoPXMubGVuZ3RoO2Zvcih1PTE7dTxoOysrdSljPXNbdV0sbD1zW3UtMV0semkoYy5lZGdlLGwuc2l0ZSxjLnNpdGUsaSk7bD1zWzBdLChjPXNbaC0xXSkuZWRnZT1MaShsLnNpdGUsYy5zaXRlLG51bGwsaSksVGkobCksVGkoYyl9ZnVuY3Rpb24gYmkodCl7Zm9yKHZhciBlLHIsbixpLGE9dC54LG89dC55LHM9aGkuXztzOylpZigobj1faShzLG8pLWEpPmt0KXM9cy5MO2Vsc2V7aWYoISgoaT1hLXdpKHMsbykpPmt0KSl7bj4ta3Q/KGU9cy5QLHI9cyk6aT4ta3Q/KGU9cyxyPXMuTik6ZT1yPXM7YnJlYWt9aWYoIXMuUil7ZT1zO2JyZWFrfXM9cy5SfXZhciBsPXZpKHQpO2lmKGhpLmluc2VydChlLGwpLGV8fHIpe2lmKGU9PT1yKXJldHVybiBTaShlKSxyPXZpKGUuc2l0ZSksaGkuaW5zZXJ0KGwsciksbC5lZGdlPXIuZWRnZT1MaShlLnNpdGUsbC5zaXRlKSxUaShlKSx2b2lkIFRpKHIpO2lmKHIpe1NpKGUpLFNpKHIpO3ZhciBjPWUuc2l0ZSx1PWMueCxoPWMueSxmPXQueC11LHA9dC55LWgsZD1yLnNpdGUsZz1kLngtdSxtPWQueS1oLHY9MiooZiptLXAqZykseT1mKmYrcCpwLHg9ZypnK20qbSxiPXt4OihtKnktcCp4KS92K3UseTooZip4LWcqeSkvditofTt6aShyLmVkZ2UsYyxkLGIpLGwuZWRnZT1MaShjLHQsbnVsbCxiKSxyLmVkZ2U9TGkodCxkLG51bGwsYiksVGkoZSksVGkocil9ZWxzZSBsLmVkZ2U9TGkoZS5zaXRlLGwuc2l0ZSl9fWZ1bmN0aW9uIF9pKHQsZSl7dmFyIHI9dC5zaXRlLG49ci54LGk9ci55LGE9aS1lO2lmKCFhKXJldHVybiBuO3ZhciBvPXQuUDtpZighbylyZXR1cm4tMS8wO3ZhciBzPShyPW8uc2l0ZSkueCxsPXIueSxjPWwtZTtpZighYylyZXR1cm4gczt2YXIgdT1zLW4saD0xL2EtMS9jLGY9dS9jO3JldHVybiBoPygtZitNYXRoLnNxcnQoZipmLTIqaCoodSp1LygtMipjKS1sK2MvMitpLWEvMikpKS9oK246KG4rcykvMn1mdW5jdGlvbiB3aSh0LGUpe3ZhciByPXQuTjtpZihyKXJldHVybiBfaShyLGUpO3ZhciBuPXQuc2l0ZTtyZXR1cm4gbi55PT09ZT9uLng6MS8wfWZ1bmN0aW9uIGtpKHQpe3RoaXMuc2l0ZT10LHRoaXMuZWRnZXM9W119ZnVuY3Rpb24gTWkodCxlKXtyZXR1cm4gZS5hbmdsZS10LmFuZ2xlfWZ1bmN0aW9uIEFpKCl7T2kodGhpcyksdGhpcy54PXRoaXMueT10aGlzLmFyYz10aGlzLnNpdGU9dGhpcy5jeT1udWxsfWZ1bmN0aW9uIFRpKHQpe3ZhciBlPXQuUCxyPXQuTjtpZihlJiZyKXt2YXIgbj1lLnNpdGUsaT10LnNpdGUsYT1yLnNpdGU7aWYobiE9PWEpe3ZhciBvPWkueCxzPWkueSxsPW4ueC1vLGM9bi55LXMsdT1hLngtbyxoPTIqKGwqKG09YS55LXMpLWMqdSk7aWYoIShoPj0tTXQpKXt2YXIgZj1sKmwrYypjLHA9dSp1K20qbSxkPShtKmYtYypwKS9oLGc9KGwqcC11KmYpL2gsbT1nK3Msdj1naS5wb3AoKXx8bmV3IEFpO3YuYXJjPXQsdi5zaXRlPWksdi54PWQrbyx2Lnk9bStNYXRoLnNxcnQoZCpkK2cqZyksdi5jeT1tLHQuY2lyY2xlPXY7Zm9yKHZhciB5PW51bGwseD1waS5fO3g7KWlmKHYueTx4Lnl8fHYueT09PXgueSYmdi54PD14Lngpe2lmKCF4Lkwpe3k9eC5QO2JyZWFrfXg9eC5MfWVsc2V7aWYoIXguUil7eT14O2JyZWFrfXg9eC5SfXBpLmluc2VydCh5LHYpLHl8fChmaT12KX19fX1mdW5jdGlvbiBTaSh0KXt2YXIgZT10LmNpcmNsZTtlJiYoZS5QfHwoZmk9ZS5OKSxwaS5yZW1vdmUoZSksZ2kucHVzaChlKSxPaShlKSx0LmNpcmNsZT1udWxsKX1mdW5jdGlvbiBFaSh0LGUpe3ZhciByPXQuYjtpZihyKXJldHVybiEwO3ZhciBuLGksYT10LmEsbz1lWzBdWzBdLHM9ZVsxXVswXSxsPWVbMF1bMV0sYz1lWzFdWzFdLHU9dC5sLGg9dC5yLGY9dS54LHA9dS55LGQ9aC54LGc9aC55LG09KGYrZCkvMix2PShwK2cpLzI7aWYoZz09PXApe2lmKG08b3x8bT49cylyZXR1cm47aWYoZj5kKXtpZihhKXtpZihhLnk+PWMpcmV0dXJufWVsc2UgYT17eDptLHk6bH07cj17eDptLHk6Y319ZWxzZXtpZihhKXtpZihhLnk8bClyZXR1cm59ZWxzZSBhPXt4Om0seTpjfTtyPXt4Om0seTpsfX19ZWxzZSBpZihpPXYtKG49KGYtZCkvKGctcCkpKm0sbjwtMXx8bj4xKWlmKGY+ZCl7aWYoYSl7aWYoYS55Pj1jKXJldHVybn1lbHNlIGE9e3g6KGwtaSkvbix5Omx9O3I9e3g6KGMtaSkvbix5OmN9fWVsc2V7aWYoYSl7aWYoYS55PGwpcmV0dXJufWVsc2UgYT17eDooYy1pKS9uLHk6Y307cj17eDoobC1pKS9uLHk6bH19ZWxzZSBpZihwPGcpe2lmKGEpe2lmKGEueD49cylyZXR1cm59ZWxzZSBhPXt4Om8seTpuKm8raX07cj17eDpzLHk6bipzK2l9fWVsc2V7aWYoYSl7aWYoYS54PG8pcmV0dXJufWVsc2UgYT17eDpzLHk6bipzK2l9O3I9e3g6byx5Om4qbytpfX1yZXR1cm4gdC5hPWEsdC5iPXIsITB9ZnVuY3Rpb24gQ2kodCxlKXt0aGlzLmw9dCx0aGlzLnI9ZSx0aGlzLmE9dGhpcy5iPW51bGx9ZnVuY3Rpb24gTGkodCxlLHIsbil7dmFyIGk9bmV3IENpKHQsZSk7cmV0dXJuIGNpLnB1c2goaSksciYmemkoaSx0LGUsciksbiYmemkoaSxlLHQsbiksdWlbdC5pXS5lZGdlcy5wdXNoKG5ldyBQaShpLHQsZSkpLHVpW2UuaV0uZWRnZXMucHVzaChuZXcgUGkoaSxlLHQpKSxpfWZ1bmN0aW9uIHppKHQsZSxyLG4pe3QuYXx8dC5iP3QubD09PXI/dC5iPW46dC5hPW46KHQuYT1uLHQubD1lLHQucj1yKX1mdW5jdGlvbiBQaSh0LGUscil7dmFyIG49dC5hLGk9dC5iO3RoaXMuZWRnZT10LHRoaXMuc2l0ZT1lLHRoaXMuYW5nbGU9cj9NYXRoLmF0YW4yKHIueS1lLnksci54LWUueCk6dC5sPT09ZT9NYXRoLmF0YW4yKGkueC1uLngsbi55LWkueSk6TWF0aC5hdGFuMihuLngtaS54LGkueS1uLnkpfWZ1bmN0aW9uIElpKCl7dGhpcy5fPW51bGx9ZnVuY3Rpb24gT2kodCl7dC5VPXQuQz10Lkw9dC5SPXQuUD10Lk49bnVsbH1mdW5jdGlvbiBEaSh0LGUpe3ZhciByPWUsbj1lLlIsaT1yLlU7aT9pLkw9PT1yP2kuTD1uOmkuUj1uOnQuXz1uLG4uVT1pLHIuVT1uLHIuUj1uLkwsci5SJiYoci5SLlU9ciksbi5MPXJ9ZnVuY3Rpb24gUmkodCxlKXt2YXIgcj1lLG49ZS5MLGk9ci5VO2k/aS5MPT09cj9pLkw9bjppLlI9bjp0Ll89bixuLlU9aSxyLlU9bixyLkw9bi5SLHIuTCYmKHIuTC5VPXIpLG4uUj1yfWZ1bmN0aW9uIEJpKHQpe2Zvcig7dC5MOyl0PXQuTDtyZXR1cm4gdH1mdW5jdGlvbiBGaSh0LGUpe3ZhciByLG4saSxhPXQuc29ydChOaSkucG9wKCk7Zm9yKGNpPVtdLHVpPW5ldyBBcnJheSh0Lmxlbmd0aCksaGk9bmV3IElpLHBpPW5ldyBJaTs7KWlmKGk9ZmksYSYmKCFpfHxhLnk8aS55fHxhLnk9PT1pLnkmJmEueDxpLngpKWEueD09PXImJmEueT09PW58fCh1aVthLmldPW5ldyBraShhKSxiaShhKSxyPWEueCxuPWEueSksYT10LnBvcCgpO2Vsc2V7aWYoIWkpYnJlYWs7eGkoaS5hcmMpfWUmJihmdW5jdGlvbih0KXtmb3IodmFyIGUscj1jaSxuPWVuKHRbMF1bMF0sdFswXVsxXSx0WzFdWzBdLHRbMV1bMV0pLGk9ci5sZW5ndGg7aS0tOykoIUVpKGU9cltpXSx0KXx8IW4oZSl8fHkoZS5hLngtZS5iLngpPGt0JiZ5KGUuYS55LWUuYi55KTxrdCkmJihlLmE9ZS5iPW51bGwsci5zcGxpY2UoaSwxKSl9KGUpLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyLG4saSxhLG8scyxsLGMsdSxoPXRbMF1bMF0sZj10WzFdWzBdLHA9dFswXVsxXSxkPXRbMV1bMV0sZz11aSxtPWcubGVuZ3RoO20tLTspaWYoKGE9Z1ttXSkmJmEucHJlcGFyZSgpKWZvcihsPShzPWEuZWRnZXMpLmxlbmd0aCxvPTA7bzxsOyluPSh1PXNbb10uZW5kKCkpLngsaT11LnksZT0oYz1zWysrbyVsXS5zdGFydCgpKS54LHI9Yy55LCh5KG4tZSk+a3R8fHkoaS1yKT5rdCkmJihzLnNwbGljZShvLDAsbmV3IFBpKCh2PWEuc2l0ZSx4PXUsYj15KG4taCk8a3QmJmQtaT5rdD97eDpoLHk6eShlLWgpPGt0P3I6ZH06eShpLWQpPGt0JiZmLW4+a3Q/e3g6eShyLWQpPGt0P2U6Zix5OmR9Onkobi1mKTxrdCYmaS1wPmt0P3t4OmYseTp5KGUtZik8a3Q/cjpwfTp5KGktcCk8a3QmJm4taD5rdD97eDp5KHItcCk8a3Q/ZTpoLHk6cH06bnVsbCxfPXZvaWQgMCxfPW5ldyBDaSh2LG51bGwpLF8uYT14LF8uYj1iLGNpLnB1c2goXyksXyksYS5zaXRlLG51bGwpKSwrK2wpO3ZhciB2LHgsYixffShlKSk7dmFyIG89e2NlbGxzOnVpLGVkZ2VzOmNpfTtyZXR1cm4gaGk9cGk9Y2k9dWk9bnVsbCxvfWZ1bmN0aW9uIE5pKHQsZSl7cmV0dXJuIGUueS10Lnl8fGUueC10Lnh9a2kucHJvdG90eXBlLnByZXBhcmU9ZnVuY3Rpb24oKXtmb3IodmFyIHQsZT10aGlzLmVkZ2VzLHI9ZS5sZW5ndGg7ci0tOykodD1lW3JdLmVkZ2UpLmImJnQuYXx8ZS5zcGxpY2UociwxKTtyZXR1cm4gZS5zb3J0KE1pKSxlLmxlbmd0aH0sUGkucHJvdG90eXBlPXtzdGFydDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZ2UubD09PXRoaXMuc2l0ZT90aGlzLmVkZ2UuYTp0aGlzLmVkZ2UuYn0sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRnZS5sPT09dGhpcy5zaXRlP3RoaXMuZWRnZS5iOnRoaXMuZWRnZS5hfX0sSWkucHJvdG90eXBlPXtpbnNlcnQ6ZnVuY3Rpb24odCxlKXt2YXIgcixuLGk7aWYodCl7aWYoZS5QPXQsZS5OPXQuTix0Lk4mJih0Lk4uUD1lKSx0Lk49ZSx0LlIpe2Zvcih0PXQuUjt0Lkw7KXQ9dC5MO3QuTD1lfWVsc2UgdC5SPWU7cj10fWVsc2UgdGhpcy5fPyh0PUJpKHRoaXMuXyksZS5QPW51bGwsZS5OPXQsdC5QPXQuTD1lLHI9dCk6KGUuUD1lLk49bnVsbCx0aGlzLl89ZSxyPW51bGwpO2ZvcihlLkw9ZS5SPW51bGwsZS5VPXIsZS5DPSEwLHQ9ZTtyJiZyLkM7KXI9PT0obj1yLlUpLkw/KGk9bi5SKSYmaS5DPyhyLkM9aS5DPSExLG4uQz0hMCx0PW4pOih0PT09ci5SJiYoRGkodGhpcyxyKSxyPSh0PXIpLlUpLHIuQz0hMSxuLkM9ITAsUmkodGhpcyxuKSk6KGk9bi5MKSYmaS5DPyhyLkM9aS5DPSExLG4uQz0hMCx0PW4pOih0PT09ci5MJiYoUmkodGhpcyxyKSxyPSh0PXIpLlUpLHIuQz0hMSxuLkM9ITAsRGkodGhpcyxuKSkscj10LlU7dGhpcy5fLkM9ITF9LHJlbW92ZTpmdW5jdGlvbih0KXt0Lk4mJih0Lk4uUD10LlApLHQuUCYmKHQuUC5OPXQuTiksdC5OPXQuUD1udWxsO3ZhciBlLHIsbixpPXQuVSxhPXQuTCxvPXQuUjtpZihyPWE/bz9CaShvKTphOm8saT9pLkw9PT10P2kuTD1yOmkuUj1yOnRoaXMuXz1yLGEmJm8/KG49ci5DLHIuQz10LkMsci5MPWEsYS5VPXIsciE9PW8/KGk9ci5VLHIuVT10LlUsdD1yLlIsaS5MPXQsci5SPW8sby5VPXIpOihyLlU9aSxpPXIsdD1yLlIpKToobj10LkMsdD1yKSx0JiYodC5VPWkpLCFuKWlmKHQmJnQuQyl0LkM9ITE7ZWxzZXtkb3tpZih0PT09dGhpcy5fKWJyZWFrO2lmKHQ9PT1pLkwpe2lmKChlPWkuUikuQyYmKGUuQz0hMSxpLkM9ITAsRGkodGhpcyxpKSxlPWkuUiksZS5MJiZlLkwuQ3x8ZS5SJiZlLlIuQyl7ZS5SJiZlLlIuQ3x8KGUuTC5DPSExLGUuQz0hMCxSaSh0aGlzLGUpLGU9aS5SKSxlLkM9aS5DLGkuQz1lLlIuQz0hMSxEaSh0aGlzLGkpLHQ9dGhpcy5fO2JyZWFrfX1lbHNlIGlmKChlPWkuTCkuQyYmKGUuQz0hMSxpLkM9ITAsUmkodGhpcyxpKSxlPWkuTCksZS5MJiZlLkwuQ3x8ZS5SJiZlLlIuQyl7ZS5MJiZlLkwuQ3x8KGUuUi5DPSExLGUuQz0hMCxEaSh0aGlzLGUpLGU9aS5MKSxlLkM9aS5DLGkuQz1lLkwuQz0hMSxSaSh0aGlzLGkpLHQ9dGhpcy5fO2JyZWFrfWUuQz0hMCx0PWksaT1pLlV9d2hpbGUoIXQuQyk7dCYmKHQuQz0hMSl9fX0sdC5nZW9tLnZvcm9ub2k9ZnVuY3Rpb24odCl7dmFyIGU9ZWkscj1yaSxuPWUsaT1yLGE9amk7aWYodClyZXR1cm4gbyh0KTtmdW5jdGlvbiBvKHQpe3ZhciBlPW5ldyBBcnJheSh0Lmxlbmd0aCkscj1hWzBdWzBdLG49YVswXVsxXSxpPWFbMV1bMF0sbz1hWzFdWzFdO3JldHVybiBGaShzKHQpLGEpLmNlbGxzLmZvckVhY2goZnVuY3Rpb24oYSxzKXt2YXIgbD1hLmVkZ2VzLGM9YS5zaXRlOyhlW3NdPWwubGVuZ3RoP2wubWFwKGZ1bmN0aW9uKHQpe3ZhciBlPXQuc3RhcnQoKTtyZXR1cm5bZS54LGUueV19KTpjLng+PXImJmMueDw9aSYmYy55Pj1uJiZjLnk8PW8/W1tyLG9dLFtpLG9dLFtpLG5dLFtyLG5dXTpbXSkucG9pbnQ9dFtzXX0pLGV9ZnVuY3Rpb24gcyh0KXtyZXR1cm4gdC5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm57eDpNYXRoLnJvdW5kKG4odCxlKS9rdCkqa3QseTpNYXRoLnJvdW5kKGkodCxlKS9rdCkqa3QsaTplfX0pfXJldHVybiBvLmxpbmtzPWZ1bmN0aW9uKHQpe3JldHVybiBGaShzKHQpKS5lZGdlcy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQubCYmdC5yfSkubWFwKGZ1bmN0aW9uKGUpe3JldHVybntzb3VyY2U6dFtlLmwuaV0sdGFyZ2V0OnRbZS5yLmldfX0pfSxvLnRyaWFuZ2xlcz1mdW5jdGlvbih0KXt2YXIgZT1bXTtyZXR1cm4gRmkocyh0KSkuY2VsbHMuZm9yRWFjaChmdW5jdGlvbihyLG4pe2Zvcih2YXIgaSxhLG8scyxsPXIuc2l0ZSxjPXIuZWRnZXMuc29ydChNaSksdT0tMSxoPWMubGVuZ3RoLGY9Y1toLTFdLmVkZ2UscD1mLmw9PT1sP2YucjpmLmw7Kyt1PGg7KWYsaT1wLHA9KGY9Y1t1XS5lZGdlKS5sPT09bD9mLnI6Zi5sLG48aS5pJiZuPHAuaSYmKG89aSxzPXAsKChhPWwpLngtcy54KSooby55LWEueSktKGEueC1vLngpKihzLnktYS55KTwwKSYmZS5wdXNoKFt0W25dLHRbaS5pXSx0W3AuaV1dKX0pLGV9LG8ueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1tZShlPXQpLG8pOmV9LG8ueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1tZShyPXQpLG8pOnJ9LG8uY2xpcEV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1udWxsPT10P2ppOnQsbyk6YT09PWppP251bGw6YX0sby5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP28uY2xpcEV4dGVudCh0JiZbWzAsMF0sdF0pOmE9PT1qaT9udWxsOmEmJmFbMV19LG99O3ZhciBqaT1bWy0xZTYsLTFlNl0sWzFlNiwxZTZdXTtmdW5jdGlvbiBWaSh0KXtyZXR1cm4gdC54fWZ1bmN0aW9uIFVpKHQpe3JldHVybiB0Lnl9ZnVuY3Rpb24gcWkoZSxyKXtlPXQucmdiKGUpLHI9dC5yZ2Iocik7dmFyIG49ZS5yLGk9ZS5nLGE9ZS5iLG89ci5yLW4scz1yLmctaSxsPXIuYi1hO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4iIyIrY2UoTWF0aC5yb3VuZChuK28qdCkpK2NlKE1hdGgucm91bmQoaStzKnQpKStjZShNYXRoLnJvdW5kKGErbCp0KSl9fWZ1bmN0aW9uIEhpKHQsZSl7dmFyIHIsbj17fSxpPXt9O2ZvcihyIGluIHQpciBpbiBlP25bcl09WmkodFtyXSxlW3JdKTppW3JdPXRbcl07Zm9yKHIgaW4gZSlyIGluIHR8fChpW3JdPWVbcl0pO3JldHVybiBmdW5jdGlvbih0KXtmb3IociBpbiBuKWlbcl09bltyXSh0KTtyZXR1cm4gaX19ZnVuY3Rpb24gR2kodCxlKXtyZXR1cm4gdD0rdCxlPStlLGZ1bmN0aW9uKHIpe3JldHVybiB0KigxLXIpK2Uqcn19ZnVuY3Rpb24gV2kodCxlKXt2YXIgcixuLGksYT1ZaS5sYXN0SW5kZXg9WGkubGFzdEluZGV4PTAsbz0tMSxzPVtdLGw9W107Zm9yKHQrPSIiLGUrPSIiOyhyPVlpLmV4ZWModCkpJiYobj1YaS5leGVjKGUpKTspKGk9bi5pbmRleCk+YSYmKGk9ZS5zbGljZShhLGkpLHNbb10/c1tvXSs9aTpzWysrb109aSksKHI9clswXSk9PT0obj1uWzBdKT9zW29dP3Nbb10rPW46c1srK29dPW46KHNbKytvXT1udWxsLGwucHVzaCh7aTpvLHg6R2kocixuKX0pKSxhPVhpLmxhc3RJbmRleDtyZXR1cm4gYTxlLmxlbmd0aCYmKGk9ZS5zbGljZShhKSxzW29dP3Nbb10rPWk6c1srK29dPWkpLHMubGVuZ3RoPDI/bFswXT8oZT1sWzBdLngsZnVuY3Rpb24odCl7cmV0dXJuIGUodCkrIiJ9KTpmdW5jdGlvbigpe3JldHVybiBlfTooZT1sLmxlbmd0aCxmdW5jdGlvbih0KXtmb3IodmFyIHIsbj0wO248ZTsrK24pc1socj1sW25dKS5pXT1yLngodCk7cmV0dXJuIHMuam9pbigiIil9KX10Lmdlb20uZGVsYXVuYXk9ZnVuY3Rpb24oZSl7cmV0dXJuIHQuZ2VvbS52b3Jvbm9pKCkudHJpYW5nbGVzKGUpfSx0Lmdlb20ucXVhZHRyZWU9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYSxvPWVpLHM9cmk7aWYoYT1hcmd1bWVudHMubGVuZ3RoKXJldHVybiBvPVZpLHM9VWksMz09PWEmJihpPXIsbj1lLHI9ZT0wKSxsKHQpO2Z1bmN0aW9uIGwodCl7dmFyIGwsYyx1LGgsZixwLGQsZyxtLHY9bWUobykseD1tZShzKTtpZihudWxsIT1lKXA9ZSxkPXIsZz1uLG09aTtlbHNlIGlmKGc9bT0tKHA9ZD0xLzApLGM9W10sdT1bXSxmPXQubGVuZ3RoLGEpZm9yKGg9MDtoPGY7KytoKShsPXRbaF0pLng8cCYmKHA9bC54KSxsLnk8ZCYmKGQ9bC55KSxsLng+ZyYmKGc9bC54KSxsLnk+bSYmKG09bC55KSxjLnB1c2gobC54KSx1LnB1c2gobC55KTtlbHNlIGZvcihoPTA7aDxmOysraCl7dmFyIGI9K3YobD10W2hdLGgpLF89K3gobCxoKTtiPHAmJihwPWIpLF88ZCYmKGQ9XyksYj5nJiYoZz1iKSxfPm0mJihtPV8pLGMucHVzaChiKSx1LnB1c2goXyl9dmFyIHc9Zy1wLGs9bS1kO2Z1bmN0aW9uIE0odCxlLHIsbixpLGEsbyxzKXtpZighaXNOYU4ocikmJiFpc05hTihuKSlpZih0LmxlYWYpe3ZhciBsPXQueCxjPXQueTtpZihudWxsIT1sKWlmKHkobC1yKSt5KGMtbik8LjAxKUEodCxlLHIsbixpLGEsbyxzKTtlbHNle3ZhciB1PXQucG9pbnQ7dC54PXQueT10LnBvaW50PW51bGwsQSh0LHUsbCxjLGksYSxvLHMpLEEodCxlLHIsbixpLGEsbyxzKX1lbHNlIHQueD1yLHQueT1uLHQucG9pbnQ9ZX1lbHNlIEEodCxlLHIsbixpLGEsbyxzKX1mdW5jdGlvbiBBKHQsZSxyLG4saSxhLG8scyl7dmFyIGw9LjUqKGkrbyksYz0uNSooYStzKSx1PXI+PWwsaD1uPj1jLGY9aDw8MXx1O3QubGVhZj0hMSx1P2k9bDpvPWwsaD9hPWM6cz1jLE0odD10Lm5vZGVzW2ZdfHwodC5ub2Rlc1tmXT17bGVhZjohMCxub2RlczpbXSxwb2ludDpudWxsLHg6bnVsbCx5Om51bGwsYWRkOmZ1bmN0aW9uKHQpe00oVCx0LCt2KHQsKytoKSwreCh0LGgpLHAsZCxnLG0pfX0pLGUscixuLGksYSxvLHMpfXc+az9tPWQrdzpnPXArazt2YXIgVD17bGVhZjohMCxub2RlczpbXSxwb2ludDpudWxsLHg6bnVsbCx5Om51bGwsYWRkOmZ1bmN0aW9uKHQpe00oVCx0LCt2KHQsKytoKSwreCh0LGgpLHAsZCxnLG0pfX07aWYoVC52aXNpdD1mdW5jdGlvbih0KXshZnVuY3Rpb24gdChlLHIsbixpLGEsbyl7aWYoIWUocixuLGksYSxvKSl7dmFyIHM9LjUqKG4rYSksbD0uNSooaStvKSxjPXIubm9kZXM7Y1swXSYmdChlLGNbMF0sbixpLHMsbCksY1sxXSYmdChlLGNbMV0scyxpLGEsbCksY1syXSYmdChlLGNbMl0sbixsLHMsbyksY1szXSYmdChlLGNbM10scyxsLGEsbyl9fSh0LFQscCxkLGcsbSl9LFQuZmluZD1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7dmFyIHMsbD0xLzA7cmV0dXJuIGZ1bmN0aW9uIHQoYyx1LGgsZixwKXtpZighKHU+YXx8aD5vfHxmPG58fHA8aSkpe2lmKGQ9Yy5wb2ludCl7dmFyIGQsZz1lLWMueCxtPXItYy55LHY9ZypnK20qbTtpZih2PGwpe3ZhciB5PU1hdGguc3FydChsPXYpO249ZS15LGk9ci15LGE9ZSt5LG89cit5LHM9ZH19Zm9yKHZhciB4PWMubm9kZXMsYj0uNSoodStmKSxfPS41KihoK3ApLHc9KHI+PV8pPDwxfGU+PWIsaz13KzQ7dzxrOysrdylpZihjPXhbMyZ3XSlzd2l0Y2goMyZ3KXtjYXNlIDA6dChjLHUsaCxiLF8pO2JyZWFrO2Nhc2UgMTp0KGMsYixoLGYsXyk7YnJlYWs7Y2FzZSAyOnQoYyx1LF8sYixwKTticmVhaztjYXNlIDM6dChjLGIsXyxmLHApfX19KHQsbixpLGEsbyksc30oVCx0WzBdLHRbMV0scCxkLGcsbSl9LGg9LTEsbnVsbD09ZSl7Zm9yKDsrK2g8ZjspTShULHRbaF0sY1toXSx1W2hdLHAsZCxnLG0pOy0taH1lbHNlIHQuZm9yRWFjaChULmFkZCk7cmV0dXJuIGM9dT10PWw9bnVsbCxUfXJldHVybiBsLng9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89dCxsKTpvfSxsLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9dCxsKTpzfSxsLmV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obnVsbD09dD9lPXI9bj1pPW51bGw6KGU9K3RbMF1bMF0scj0rdFswXVsxXSxuPSt0WzFdWzBdLGk9K3RbMV1bMV0pLGwpOm51bGw9PWU/bnVsbDpbW2Uscl0sW24saV1dfSxsLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PXQ/ZT1yPW49aT1udWxsOihlPXI9MCxuPSt0WzBdLGk9K3RbMV0pLGwpOm51bGw9PWU/bnVsbDpbbi1lLGktcl19LGx9LHQuaW50ZXJwb2xhdGVSZ2I9cWksdC5pbnRlcnBvbGF0ZU9iamVjdD1IaSx0LmludGVycG9sYXRlTnVtYmVyPUdpLHQuaW50ZXJwb2xhdGVTdHJpbmc9V2k7dmFyIFlpPS9bLStdPyg/OlxkK1wuP1xkKnxcLj9cZCspKD86W2VFXVstK10/XGQrKT8vZyxYaT1uZXcgUmVnRXhwKFlpLnNvdXJjZSwiZyIpO2Z1bmN0aW9uIFppKGUscil7Zm9yKHZhciBuLGk9dC5pbnRlcnBvbGF0b3JzLmxlbmd0aDstLWk+PTAmJiEobj10LmludGVycG9sYXRvcnNbaV0oZSxyKSk7KTtyZXR1cm4gbn1mdW5jdGlvbiAkaSh0LGUpe3ZhciByLG49W10saT1bXSxhPXQubGVuZ3RoLG89ZS5sZW5ndGgscz1NYXRoLm1pbih0Lmxlbmd0aCxlLmxlbmd0aCk7Zm9yKHI9MDtyPHM7KytyKW4ucHVzaChaaSh0W3JdLGVbcl0pKTtmb3IoO3I8YTsrK3IpaVtyXT10W3JdO2Zvcig7cjxvOysrcilpW3JdPWVbcl07cmV0dXJuIGZ1bmN0aW9uKHQpe2ZvcihyPTA7cjxzOysrcilpW3JdPW5bcl0odCk7cmV0dXJuIGl9fXQuaW50ZXJwb2xhdGU9WmksdC5pbnRlcnBvbGF0b3JzPVtmdW5jdGlvbih0LGUpe3ZhciByPXR5cGVvZiBlO3JldHVybigic3RyaW5nIj09PXI/Z2UuaGFzKGUudG9Mb3dlckNhc2UoKSl8fC9eKCN8cmdiXCh8aHNsXCgpL2kudGVzdChlKT9xaTpXaTplIGluc3RhbmNlb2YgVnQ/cWk6QXJyYXkuaXNBcnJheShlKT8kaToib2JqZWN0Ij09PXImJmlzTmFOKGUpP0hpOkdpKSh0LGUpfV0sdC5pbnRlcnBvbGF0ZUFycmF5PSRpO3ZhciBKaT1mdW5jdGlvbigpe3JldHVybiB6fSxLaT10Lm1hcCh7bGluZWFyOkppLHBvbHk6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnBvdyhlLHQpfX0scXVhZDpmdW5jdGlvbigpe3JldHVybiByYX0sY3ViaWM6ZnVuY3Rpb24oKXtyZXR1cm4gbmF9LHNpbjpmdW5jdGlvbigpe3JldHVybiBhYX0sZXhwOmZ1bmN0aW9uKCl7cmV0dXJuIG9hfSxjaXJjbGU6ZnVuY3Rpb24oKXtyZXR1cm4gc2F9LGVsYXN0aWM6ZnVuY3Rpb24odCxlKXt2YXIgcjthcmd1bWVudHMubGVuZ3RoPDImJihlPS40NSk7YXJndW1lbnRzLmxlbmd0aD9yPWUvVHQqTWF0aC5hc2luKDEvdCk6KHQ9MSxyPWUvNCk7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiAxK3QqTWF0aC5wb3coMiwtMTAqbikqTWF0aC5zaW4oKG4tcikqVHQvZSl9fSxiYWNrOmZ1bmN0aW9uKHQpe3R8fCh0PTEuNzAxNTgpO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZSplKigodCsxKSplLXQpfX0sYm91bmNlOmZ1bmN0aW9uKCl7cmV0dXJuIGxhfX0pLFFpPXQubWFwKHtpbjp6LG91dDp0YSwiaW4tb3V0IjplYSwib3V0LWluIjpmdW5jdGlvbih0KXtyZXR1cm4gZWEodGEodCkpfX0pO2Z1bmN0aW9uIHRhKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gMS10KDEtZSl9fWZ1bmN0aW9uIGVhKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4uNSooZTwuNT90KDIqZSk6Mi10KDItMiplKSl9fWZ1bmN0aW9uIHJhKHQpe3JldHVybiB0KnR9ZnVuY3Rpb24gbmEodCl7cmV0dXJuIHQqdCp0fWZ1bmN0aW9uIGlhKHQpe2lmKHQ8PTApcmV0dXJuIDA7aWYodD49MSlyZXR1cm4gMTt2YXIgZT10KnQscj1lKnQ7cmV0dXJuIDQqKHQ8LjU/cjozKih0LWUpK3ItLjc1KX1mdW5jdGlvbiBhYSh0KXtyZXR1cm4gMS1NYXRoLmNvcyh0KkV0KX1mdW5jdGlvbiBvYSh0KXtyZXR1cm4gTWF0aC5wb3coMiwxMCoodC0xKSl9ZnVuY3Rpb24gc2EodCl7cmV0dXJuIDEtTWF0aC5zcXJ0KDEtdCp0KX1mdW5jdGlvbiBsYSh0KXtyZXR1cm4gdDwxLzIuNzU/Ny41NjI1KnQqdDp0PDIvMi43NT83LjU2MjUqKHQtPTEuNS8yLjc1KSp0Ky43NTp0PDIuNS8yLjc1PzcuNTYyNSoodC09Mi4yNS8yLjc1KSp0Ky45Mzc1OjcuNTYyNSoodC09Mi42MjUvMi43NSkqdCsuOTg0Mzc1fWZ1bmN0aW9uIGNhKHQsZSl7cmV0dXJuIGUtPXQsZnVuY3Rpb24ocil7cmV0dXJuIE1hdGgucm91bmQodCtlKnIpfX1mdW5jdGlvbiB1YSh0KXt2YXIgZSxyLG4saT1bdC5hLHQuYl0sYT1bdC5jLHQuZF0sbz1mYShpKSxzPWhhKGksYSksbD1mYSgoKGU9YSlbMF0rPShuPS1zKSoocj1pKVswXSxlWzFdKz1uKnJbMV0sZSkpfHwwO2lbMF0qYVsxXTxhWzBdKmlbMV0mJihpWzBdKj0tMSxpWzFdKj0tMSxvKj0tMSxzKj0tMSksdGhpcy5yb3RhdGU9KG8/TWF0aC5hdGFuMihpWzFdLGlbMF0pOk1hdGguYXRhbjIoLWFbMF0sYVsxXSkpKkx0LHRoaXMudHJhbnNsYXRlPVt0LmUsdC5mXSx0aGlzLnNjYWxlPVtvLGxdLHRoaXMuc2tldz1sP01hdGguYXRhbjIocyxsKSpMdDowfWZ1bmN0aW9uIGhhKHQsZSl7cmV0dXJuIHRbMF0qZVswXSt0WzFdKmVbMV19ZnVuY3Rpb24gZmEodCl7dmFyIGU9TWF0aC5zcXJ0KGhhKHQsdCkpO3JldHVybiBlJiYodFswXS89ZSx0WzFdLz1lKSxlfXQuZWFzZT1mdW5jdGlvbih0KXt2YXIgZSxuPXQuaW5kZXhPZigiLSIpLGk9bj49MD90LnNsaWNlKDAsbik6dCxhPW4+PTA/dC5zbGljZShuKzEpOiJpbiI7cmV0dXJuIGk9S2kuZ2V0KGkpfHxKaSxhPVFpLmdldChhKXx8eixlPWEoaS5hcHBseShudWxsLHIuY2FsbChhcmd1bWVudHMsMSkpKSxmdW5jdGlvbih0KXtyZXR1cm4gdDw9MD8wOnQ+PTE/MTplKHQpfX0sdC5pbnRlcnBvbGF0ZUhjbD1mdW5jdGlvbihlLHIpe2U9dC5oY2woZSkscj10LmhjbChyKTt2YXIgbj1lLmgsaT1lLmMsYT1lLmwsbz1yLmgtbixzPXIuYy1pLGw9ci5sLWE7aXNOYU4ocykmJihzPTAsaT1pc05hTihpKT9yLmM6aSk7aXNOYU4obyk/KG89MCxuPWlzTmFOKG4pP3IuaDpuKTpvPjE4MD9vLT0zNjA6bzwtMTgwJiYobys9MzYwKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIFl0KG4rbyp0LGkrcyp0LGErbCp0KSsiIn19LHQuaW50ZXJwb2xhdGVIc2w9ZnVuY3Rpb24oZSxyKXtlPXQuaHNsKGUpLHI9dC5oc2wocik7dmFyIG49ZS5oLGk9ZS5zLGE9ZS5sLG89ci5oLW4scz1yLnMtaSxsPXIubC1hO2lzTmFOKHMpJiYocz0wLGk9aXNOYU4oaSk/ci5zOmkpO2lzTmFOKG8pPyhvPTAsbj1pc05hTihuKT9yLmg6bik6bz4xODA/by09MzYwOm88LTE4MCYmKG8rPTM2MCk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBIdChuK28qdCxpK3MqdCxhK2wqdCkrIiJ9fSx0LmludGVycG9sYXRlTGFiPWZ1bmN0aW9uKGUscil7ZT10LmxhYihlKSxyPXQubGFiKHIpO3ZhciBuPWUubCxpPWUuYSxhPWUuYixvPXIubC1uLHM9ci5hLWksbD1yLmItYTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHRlKG4rbyp0LGkrcyp0LGErbCp0KSsiIn19LHQuaW50ZXJwb2xhdGVSb3VuZD1jYSx0LnRyYW5zZm9ybT1mdW5jdGlvbihlKXt2YXIgcj1pLmNyZWF0ZUVsZW1lbnROUyh0Lm5zLnByZWZpeC5zdmcsImciKTtyZXR1cm4odC50cmFuc2Zvcm09ZnVuY3Rpb24odCl7aWYobnVsbCE9dCl7ci5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsdCk7dmFyIGU9ci50cmFuc2Zvcm0uYmFzZVZhbC5jb25zb2xpZGF0ZSgpfXJldHVybiBuZXcgdWEoZT9lLm1hdHJpeDpwYSl9KShlKX0sdWEucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuInRyYW5zbGF0ZSgiK3RoaXMudHJhbnNsYXRlKyIpcm90YXRlKCIrdGhpcy5yb3RhdGUrIilza2V3WCgiK3RoaXMuc2tldysiKXNjYWxlKCIrdGhpcy5zY2FsZSsiKSJ9O3ZhciBwYT17YToxLGI6MCxjOjAsZDoxLGU6MCxmOjB9O2Z1bmN0aW9uIGRhKHQpe3JldHVybiB0Lmxlbmd0aD90LnBvcCgpKyIsIjoiIn1mdW5jdGlvbiBnYShlLHIpe3ZhciBuPVtdLGk9W107cmV0dXJuIGU9dC50cmFuc2Zvcm0oZSkscj10LnRyYW5zZm9ybShyKSxmdW5jdGlvbih0LGUscixuKXtpZih0WzBdIT09ZVswXXx8dFsxXSE9PWVbMV0pe3ZhciBpPXIucHVzaCgidHJhbnNsYXRlKCIsbnVsbCwiLCIsbnVsbCwiKSIpO24ucHVzaCh7aTppLTQseDpHaSh0WzBdLGVbMF0pfSx7aTppLTIseDpHaSh0WzFdLGVbMV0pfSl9ZWxzZShlWzBdfHxlWzFdKSYmci5wdXNoKCJ0cmFuc2xhdGUoIitlKyIpIil9KGUudHJhbnNsYXRlLHIudHJhbnNsYXRlLG4saSksZnVuY3Rpb24odCxlLHIsbil7dCE9PWU/KHQtZT4xODA/ZSs9MzYwOmUtdD4xODAmJih0Kz0zNjApLG4ucHVzaCh7aTpyLnB1c2goZGEocikrInJvdGF0ZSgiLG51bGwsIikiKS0yLHg6R2kodCxlKX0pKTplJiZyLnB1c2goZGEocikrInJvdGF0ZSgiK2UrIikiKX0oZS5yb3RhdGUsci5yb3RhdGUsbixpKSxmdW5jdGlvbih0LGUscixuKXt0IT09ZT9uLnB1c2goe2k6ci5wdXNoKGRhKHIpKyJza2V3WCgiLG51bGwsIikiKS0yLHg6R2kodCxlKX0pOmUmJnIucHVzaChkYShyKSsic2tld1goIitlKyIpIil9KGUuc2tldyxyLnNrZXcsbixpKSxmdW5jdGlvbih0LGUscixuKXtpZih0WzBdIT09ZVswXXx8dFsxXSE9PWVbMV0pe3ZhciBpPXIucHVzaChkYShyKSsic2NhbGUoIixudWxsLCIsIixudWxsLCIpIik7bi5wdXNoKHtpOmktNCx4OkdpKHRbMF0sZVswXSl9LHtpOmktMix4OkdpKHRbMV0sZVsxXSl9KX1lbHNlIDE9PT1lWzBdJiYxPT09ZVsxXXx8ci5wdXNoKGRhKHIpKyJzY2FsZSgiK2UrIikiKX0oZS5zY2FsZSxyLnNjYWxlLG4saSksZT1yPW51bGwsZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9LTEsYT1pLmxlbmd0aDsrK3I8YTspblsoZT1pW3JdKS5pXT1lLngodCk7cmV0dXJuIG4uam9pbigiIil9fWZ1bmN0aW9uIG1hKHQsZSl7cmV0dXJuIGU9KGUtPXQ9K3QpfHwxL2UsZnVuY3Rpb24ocil7cmV0dXJuKHItdCkvZX19ZnVuY3Rpb24gdmEodCxlKXtyZXR1cm4gZT0oZS09dD0rdCl8fDEvZSxmdW5jdGlvbihyKXtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1pbigxLChyLXQpL2UpKX19ZnVuY3Rpb24geWEodCl7Zm9yKHZhciBlPXQuc291cmNlLHI9dC50YXJnZXQsbj1mdW5jdGlvbih0LGUpe2lmKHQ9PT1lKXJldHVybiB0O3ZhciByPXhhKHQpLG49eGEoZSksaT1yLnBvcCgpLGE9bi5wb3AoKSxvPW51bGw7Zm9yKDtpPT09YTspbz1pLGk9ci5wb3AoKSxhPW4ucG9wKCk7cmV0dXJuIG99KGUsciksaT1bZV07ZSE9PW47KWU9ZS5wYXJlbnQsaS5wdXNoKGUpO2Zvcih2YXIgYT1pLmxlbmd0aDtyIT09bjspaS5zcGxpY2UoYSwwLHIpLHI9ci5wYXJlbnQ7cmV0dXJuIGl9ZnVuY3Rpb24geGEodCl7Zm9yKHZhciBlPVtdLHI9dC5wYXJlbnQ7bnVsbCE9cjspZS5wdXNoKHQpLHQ9cixyPXIucGFyZW50O3JldHVybiBlLnB1c2godCksZX1mdW5jdGlvbiBiYSh0KXt0LmZpeGVkfD0yfWZ1bmN0aW9uIF9hKHQpe3QuZml4ZWQmPS03fWZ1bmN0aW9uIHdhKHQpe3QuZml4ZWR8PTQsdC5weD10LngsdC5weT10Lnl9ZnVuY3Rpb24ga2EodCl7dC5maXhlZCY9LTV9dC5pbnRlcnBvbGF0ZVRyYW5zZm9ybT1nYSx0LmxheW91dD17fSx0LmxheW91dC5idW5kbGU9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLHI9LTEsbj10Lmxlbmd0aDsrK3I8bjspZS5wdXNoKHlhKHRbcl0pKTtyZXR1cm4gZX19LHQubGF5b3V0LmNob3JkPWZ1bmN0aW9uKCl7dmFyIGUscixuLGksYSxvLHMsbD17fSxjPTA7ZnVuY3Rpb24gdSgpe3ZhciBsLHUsZixwLGQsZz17fSxtPVtdLHY9dC5yYW5nZShpKSx5PVtdO2ZvcihlPVtdLHI9W10sbD0wLHA9LTE7KytwPGk7KXtmb3IodT0wLGQ9LTE7KytkPGk7KXUrPW5bcF1bZF07bS5wdXNoKHUpLHkucHVzaCh0LnJhbmdlKGkpKSxsKz11fWZvcihhJiZ2LnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gYShtW3RdLG1bZV0pfSksbyYmeS5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7dC5zb3J0KGZ1bmN0aW9uKHQscil7cmV0dXJuIG8obltlXVt0XSxuW2VdW3JdKX0pfSksbD0oVHQtYyppKS9sLHU9MCxwPS0xOysrcDxpOyl7Zm9yKGY9dSxkPS0xOysrZDxpOyl7dmFyIHg9dltwXSxiPXlbeF1bZF0sXz1uW3hdW2JdLHc9dSxrPXUrPV8qbDtnW3grIi0iK2JdPXtpbmRleDp4LHN1YmluZGV4OmIsc3RhcnRBbmdsZTp3LGVuZEFuZ2xlOmssdmFsdWU6X319clt4XT17aW5kZXg6eCxzdGFydEFuZ2xlOmYsZW5kQW5nbGU6dSx2YWx1ZTptW3hdfSx1Kz1jfWZvcihwPS0xOysrcDxpOylmb3IoZD1wLTE7KytkPGk7KXt2YXIgTT1nW3ArIi0iK2RdLEE9Z1tkKyItIitwXTsoTS52YWx1ZXx8QS52YWx1ZSkmJmUucHVzaChNLnZhbHVlPEEudmFsdWU/e3NvdXJjZTpBLHRhcmdldDpNfTp7c291cmNlOk0sdGFyZ2V0OkF9KX1zJiZoKCl9ZnVuY3Rpb24gaCgpe2Uuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiBzKCh0LnNvdXJjZS52YWx1ZSt0LnRhcmdldC52YWx1ZSkvMiwoZS5zb3VyY2UudmFsdWUrZS50YXJnZXQudmFsdWUpLzIpfSl9cmV0dXJuIGwubWF0cml4PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPShuPXQpJiZuLmxlbmd0aCxlPXI9bnVsbCxsKTpufSxsLnBhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9dCxlPXI9bnVsbCxsKTpjfSxsLnNvcnRHcm91cHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dCxlPXI9bnVsbCxsKTphfSxsLnNvcnRTdWJncm91cHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89dCxlPW51bGwsbCk6b30sbC5zb3J0Q2hvcmRzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPXQsZSYmaCgpLGwpOnN9LGwuY2hvcmRzPWZ1bmN0aW9uKCl7cmV0dXJuIGV8fHUoKSxlfSxsLmdyb3Vwcz1mdW5jdGlvbigpe3JldHVybiByfHx1KCkscn0sbH0sdC5sYXlvdXQuZm9yY2U9ZnVuY3Rpb24oKXt2YXIgZSxyLG4saSxhLG8scz17fSxsPXQuZGlzcGF0Y2goInN0YXJ0IiwidGljayIsImVuZCIpLGM9WzEsMV0sdT0uOSxoPU1hLGY9QWEscD0tMzAsZD1UYSxnPS4xLG09LjY0LHY9W10seT1bXTtmdW5jdGlvbiB4KHQpe3JldHVybiBmdW5jdGlvbihlLHIsbixpKXtpZihlLnBvaW50IT09dCl7dmFyIGE9ZS5jeC10Lngsbz1lLmN5LXQueSxzPWktcixsPWEqYStvKm87aWYocypzL208bCl7aWYobDxkKXt2YXIgYz1lLmNoYXJnZS9sO3QucHgtPWEqYyx0LnB5LT1vKmN9cmV0dXJuITB9aWYoZS5wb2ludCYmbCYmbDxkKXtjPWUucG9pbnRDaGFyZ2UvbDt0LnB4LT1hKmMsdC5weS09bypjfX1yZXR1cm4hZS5jaGFyZ2V9fWZ1bmN0aW9uIGIoZSl7ZS5weD10LmV2ZW50LngsZS5weT10LmV2ZW50Lnkscy5yZXN1bWUoKX1yZXR1cm4gcy50aWNrPWZ1bmN0aW9uKCl7aWYoKG4qPS45OSk8LjAwNSlyZXR1cm4gZT1udWxsLGwuZW5kKHt0eXBlOiJlbmQiLGFscGhhOm49MH0pLCEwO3ZhciByLHMsaCxmLGQsbSxiLF8sdyxrPXYubGVuZ3RoLE09eS5sZW5ndGg7Zm9yKHM9MDtzPE07KytzKWY9KGg9eVtzXSkuc291cmNlLChtPShfPShkPWgudGFyZ2V0KS54LWYueCkqXysodz1kLnktZi55KSp3KSYmKF8qPW09biphW3NdKigobT1NYXRoLnNxcnQobSkpLWlbc10pL20sdyo9bSxkLngtPV8qKGI9Zi53ZWlnaHQrZC53ZWlnaHQ/Zi53ZWlnaHQvKGYud2VpZ2h0K2Qud2VpZ2h0KTouNSksZC55LT13KmIsZi54Kz1fKihiPTEtYiksZi55Kz13KmIpO2lmKChiPW4qZykmJihfPWNbMF0vMix3PWNbMV0vMixzPS0xLGIpKWZvcig7KytzPGs7KShoPXZbc10pLngrPShfLWgueCkqYixoLnkrPSh3LWgueSkqYjtpZihwKWZvcighZnVuY3Rpb24gdChlLHIsbil7dmFyIGk9MCxhPTA7ZS5jaGFyZ2U9MDtpZighZS5sZWFmKWZvcih2YXIgbyxzPWUubm9kZXMsbD1zLmxlbmd0aCxjPS0xOysrYzxsOyludWxsIT0obz1zW2NdKSYmKHQobyxyLG4pLGUuY2hhcmdlKz1vLmNoYXJnZSxpKz1vLmNoYXJnZSpvLmN4LGErPW8uY2hhcmdlKm8uY3kpO2lmKGUucG9pbnQpe2UubGVhZnx8KGUucG9pbnQueCs9TWF0aC5yYW5kb20oKS0uNSxlLnBvaW50LnkrPU1hdGgucmFuZG9tKCktLjUpO3ZhciB1PXIqbltlLnBvaW50LmluZGV4XTtlLmNoYXJnZSs9ZS5wb2ludENoYXJnZT11LGkrPXUqZS5wb2ludC54LGErPXUqZS5wb2ludC55fWUuY3g9aS9lLmNoYXJnZTtlLmN5PWEvZS5jaGFyZ2V9KHI9dC5nZW9tLnF1YWR0cmVlKHYpLG4sbykscz0tMTsrK3M8azspKGg9dltzXSkuZml4ZWR8fHIudmlzaXQoeChoKSk7Zm9yKHM9LTE7KytzPGs7KShoPXZbc10pLmZpeGVkPyhoLng9aC5weCxoLnk9aC5weSk6KGgueC09KGgucHgtKGgucHg9aC54KSkqdSxoLnktPShoLnB5LShoLnB5PWgueSkpKnUpO2wudGljayh7dHlwZToidGljayIsYWxwaGE6bn0pfSxzLm5vZGVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh2PXQscyk6dn0scy5saW5rcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeT10LHMpOnl9LHMuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz10LHMpOmN9LHMubGlua0Rpc3RhbmNlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6K3Qscyk6aH0scy5kaXN0YW5jZT1zLmxpbmtEaXN0YW5jZSxzLmxpbmtTdHJlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj0iZnVuY3Rpb24iPT10eXBlb2YgdD90Oit0LHMpOmZ9LHMuZnJpY3Rpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9K3Qscyk6dX0scy5jaGFyZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDordCxzKTpwfSxzLmNoYXJnZURpc3RhbmNlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPXQqdCxzKTpNYXRoLnNxcnQoZCl9LHMuZ3Jhdml0eT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz0rdCxzKTpnfSxzLnRoZXRhPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhtPXQqdCxzKTpNYXRoLnNxcnQobSl9LHMuYWxwaGE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K3Qsbj90PjA/bj10OihlLmM9bnVsbCxlLnQ9TmFOLGU9bnVsbCxsLmVuZCh7dHlwZToiZW5kIixhbHBoYTpuPTB9KSk6dD4wJiYobC5zdGFydCh7dHlwZToic3RhcnQiLGFscGhhOm49dH0pLGU9TWUocy50aWNrKSkscyk6bn0scy5zdGFydD1mdW5jdGlvbigpe3ZhciB0LGUscixuPXYubGVuZ3RoLGw9eS5sZW5ndGgsdT1jWzBdLGQ9Y1sxXTtmb3IodD0wO3Q8bjsrK3QpKHI9dlt0XSkuaW5kZXg9dCxyLndlaWdodD0wO2Zvcih0PTA7dDxsOysrdCkibnVtYmVyIj09dHlwZW9mKHI9eVt0XSkuc291cmNlJiYoci5zb3VyY2U9dltyLnNvdXJjZV0pLCJudW1iZXIiPT10eXBlb2Ygci50YXJnZXQmJihyLnRhcmdldD12W3IudGFyZ2V0XSksKytyLnNvdXJjZS53ZWlnaHQsKytyLnRhcmdldC53ZWlnaHQ7Zm9yKHQ9MDt0PG47Kyt0KXI9dlt0XSxpc05hTihyLngpJiYoci54PWcoIngiLHUpKSxpc05hTihyLnkpJiYoci55PWcoInkiLGQpKSxpc05hTihyLnB4KSYmKHIucHg9ci54KSxpc05hTihyLnB5KSYmKHIucHk9ci55KTtpZihpPVtdLCJmdW5jdGlvbiI9PXR5cGVvZiBoKWZvcih0PTA7dDxsOysrdClpW3RdPStoLmNhbGwodGhpcyx5W3RdLHQpO2Vsc2UgZm9yKHQ9MDt0PGw7Kyt0KWlbdF09aDtpZihhPVtdLCJmdW5jdGlvbiI9PXR5cGVvZiBmKWZvcih0PTA7dDxsOysrdClhW3RdPStmLmNhbGwodGhpcyx5W3RdLHQpO2Vsc2UgZm9yKHQ9MDt0PGw7Kyt0KWFbdF09ZjtpZihvPVtdLCJmdW5jdGlvbiI9PXR5cGVvZiBwKWZvcih0PTA7dDxuOysrdClvW3RdPStwLmNhbGwodGhpcyx2W3RdLHQpO2Vsc2UgZm9yKHQ9MDt0PG47Kyt0KW9bdF09cDtmdW5jdGlvbiBnKHIsaSl7aWYoIWUpe2ZvcihlPW5ldyBBcnJheShuKSxjPTA7YzxuOysrYyllW2NdPVtdO2ZvcihjPTA7YzxsOysrYyl7dmFyIGE9eVtjXTtlW2Euc291cmNlLmluZGV4XS5wdXNoKGEudGFyZ2V0KSxlW2EudGFyZ2V0LmluZGV4XS5wdXNoKGEuc291cmNlKX19Zm9yKHZhciBvLHM9ZVt0XSxjPS0xLHU9cy5sZW5ndGg7KytjPHU7KWlmKCFpc05hTihvPXNbY11bcl0pKXJldHVybiBvO3JldHVybiBNYXRoLnJhbmRvbSgpKml9cmV0dXJuIHMucmVzdW1lKCl9LHMucmVzdW1lPWZ1bmN0aW9uKCl7cmV0dXJuIHMuYWxwaGEoLjEpfSxzLnN0b3A9ZnVuY3Rpb24oKXtyZXR1cm4gcy5hbHBoYSgwKX0scy5kcmFnPWZ1bmN0aW9uKCl7aWYocnx8KHI9dC5iZWhhdmlvci5kcmFnKCkub3JpZ2luKHopLm9uKCJkcmFnc3RhcnQuZm9yY2UiLGJhKS5vbigiZHJhZy5mb3JjZSIsYikub24oImRyYWdlbmQuZm9yY2UiLF9hKSksIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHI7dGhpcy5vbigibW91c2VvdmVyLmZvcmNlIix3YSkub24oIm1vdXNlb3V0LmZvcmNlIixrYSkuY2FsbChyKX0sdC5yZWJpbmQocyxsLCJvbiIpfTt2YXIgTWE9MjAsQWE9MSxUYT0xLzA7ZnVuY3Rpb24gU2EoZSxyKXtyZXR1cm4gdC5yZWJpbmQoZSxyLCJzb3J0IiwiY2hpbGRyZW4iLCJ2YWx1ZSIpLGUubm9kZXM9ZSxlLmxpbmtzPUlhLGV9ZnVuY3Rpb24gRWEodCxlKXtmb3IodmFyIHI9W3RdO251bGwhPSh0PXIucG9wKCkpOylpZihlKHQpLChpPXQuY2hpbGRyZW4pJiYobj1pLmxlbmd0aCkpZm9yKHZhciBuLGk7LS1uPj0wOylyLnB1c2goaVtuXSl9ZnVuY3Rpb24gQ2EodCxlKXtmb3IodmFyIHI9W3RdLG49W107bnVsbCE9KHQ9ci5wb3AoKSk7KWlmKG4ucHVzaCh0KSwoYT10LmNoaWxkcmVuKSYmKGk9YS5sZW5ndGgpKWZvcih2YXIgaSxhLG89LTE7KytvPGk7KXIucHVzaChhW29dKTtmb3IoO251bGwhPSh0PW4ucG9wKCkpOyllKHQpfWZ1bmN0aW9uIExhKHQpe3JldHVybiB0LmNoaWxkcmVufWZ1bmN0aW9uIHphKHQpe3JldHVybiB0LnZhbHVlfWZ1bmN0aW9uIFBhKHQsZSl7cmV0dXJuIGUudmFsdWUtdC52YWx1ZX1mdW5jdGlvbiBJYShlKXtyZXR1cm4gdC5tZXJnZShlLm1hcChmdW5jdGlvbih0KXtyZXR1cm4odC5jaGlsZHJlbnx8W10pLm1hcChmdW5jdGlvbihlKXtyZXR1cm57c291cmNlOnQsdGFyZ2V0OmV9fSl9KSl9dC5sYXlvdXQuaGllcmFyY2h5PWZ1bmN0aW9uKCl7dmFyIHQ9UGEsZT1MYSxyPXphO2Z1bmN0aW9uIG4oaSl7dmFyIGEsbz1baV0scz1bXTtmb3IoaS5kZXB0aD0wO251bGwhPShhPW8ucG9wKCkpOylpZihzLnB1c2goYSksKGM9ZS5jYWxsKG4sYSxhLmRlcHRoKSkmJihsPWMubGVuZ3RoKSl7Zm9yKHZhciBsLGMsdTstLWw+PTA7KW8ucHVzaCh1PWNbbF0pLHUucGFyZW50PWEsdS5kZXB0aD1hLmRlcHRoKzE7ciYmKGEudmFsdWU9MCksYS5jaGlsZHJlbj1jfWVsc2UgciYmKGEudmFsdWU9K3IuY2FsbChuLGEsYS5kZXB0aCl8fDApLGRlbGV0ZSBhLmNoaWxkcmVuO3JldHVybiBDYShpLGZ1bmN0aW9uKGUpe3ZhciBuLGk7dCYmKG49ZS5jaGlsZHJlbikmJm4uc29ydCh0KSxyJiYoaT1lLnBhcmVudCkmJihpLnZhbHVlKz1lLnZhbHVlKX0pLHN9cmV0dXJuIG4uc29ydD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLG4pOnR9LG4uY2hpbGRyZW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxuKTplfSxuLnZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsbik6cn0sbi5yZXZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiByJiYoRWEodCxmdW5jdGlvbih0KXt0LmNoaWxkcmVuJiYodC52YWx1ZT0wKX0pLENhKHQsZnVuY3Rpb24odCl7dmFyIGU7dC5jaGlsZHJlbnx8KHQudmFsdWU9K3IuY2FsbChuLHQsdC5kZXB0aCl8fDApLChlPXQucGFyZW50KSYmKGUudmFsdWUrPXQudmFsdWUpfSkpLHR9LG59LHQubGF5b3V0LnBhcnRpdGlvbj1mdW5jdGlvbigpe3ZhciBlPXQubGF5b3V0LmhpZXJhcmNoeSgpLHI9WzEsMV07ZnVuY3Rpb24gbih0LG4pe3ZhciBpPWUuY2FsbCh0aGlzLHQsbik7cmV0dXJuIGZ1bmN0aW9uIHQoZSxyLG4saSl7dmFyIGE9ZS5jaGlsZHJlbjtpZihlLng9cixlLnk9ZS5kZXB0aCppLGUuZHg9bixlLmR5PWksYSYmKG89YS5sZW5ndGgpKXt2YXIgbyxzLGwsYz0tMTtmb3Iobj1lLnZhbHVlP24vZS52YWx1ZTowOysrYzxvOyl0KHM9YVtjXSxyLGw9cy52YWx1ZSpuLGkpLHIrPWx9fShpWzBdLDAsclswXSxyWzFdL2Z1bmN0aW9uIHQoZSl7dmFyIHI9ZS5jaGlsZHJlbixuPTA7aWYociYmKGk9ci5sZW5ndGgpKWZvcih2YXIgaSxhPS0xOysrYTxpOyluPU1hdGgubWF4KG4sdChyW2FdKSk7cmV0dXJuIDErbn0oaVswXSkpLGl9cmV0dXJuIG4uc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LG4pOnJ9LFNhKG4sZSl9LHQubGF5b3V0LnBpZT1mdW5jdGlvbigpe3ZhciBlPU51bWJlcixyPU9hLG49MCxpPVR0LGE9MDtmdW5jdGlvbiBvKHMpe3ZhciBsLGM9cy5sZW5ndGgsdT1zLm1hcChmdW5jdGlvbih0LHIpe3JldHVybitlLmNhbGwobyx0LHIpfSksaD0rKCJmdW5jdGlvbiI9PXR5cGVvZiBuP24uYXBwbHkodGhpcyxhcmd1bWVudHMpOm4pLGY9KCJmdW5jdGlvbiI9PXR5cGVvZiBpP2kuYXBwbHkodGhpcyxhcmd1bWVudHMpOmkpLWgscD1NYXRoLm1pbihNYXRoLmFicyhmKS9jLCsoImZ1bmN0aW9uIj09dHlwZW9mIGE/YS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6YSkpLGQ9cCooZjwwPy0xOjEpLGc9dC5zdW0odSksbT1nPyhmLWMqZCkvZzowLHY9dC5yYW5nZShjKSx5PVtdO3JldHVybiBudWxsIT1yJiZ2LnNvcnQocj09PU9hP2Z1bmN0aW9uKHQsZSl7cmV0dXJuIHVbZV0tdVt0XX06ZnVuY3Rpb24odCxlKXtyZXR1cm4gcihzW3RdLHNbZV0pfSksdi5mb3JFYWNoKGZ1bmN0aW9uKHQpe3lbdF09e2RhdGE6c1t0XSx2YWx1ZTpsPXVbdF0sc3RhcnRBbmdsZTpoLGVuZEFuZ2xlOmgrPWwqbStkLHBhZEFuZ2xlOnB9fSkseX1yZXR1cm4gby52YWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LG8pOmV9LG8uc29ydD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LG8pOnJ9LG8uc3RhcnRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LG8pOm59LG8uZW5kQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxvKTppfSxvLnBhZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXQsbyk6YX0sb307dmFyIE9hPXt9O2Z1bmN0aW9uIERhKHQpe3JldHVybiB0Lnh9ZnVuY3Rpb24gUmEodCl7cmV0dXJuIHQueX1mdW5jdGlvbiBCYSh0LGUscil7dC55MD1lLHQueT1yfXQubGF5b3V0LnN0YWNrPWZ1bmN0aW9uKCl7dmFyIGU9eixyPWphLG49VmEsaT1CYSxhPURhLG89UmE7ZnVuY3Rpb24gcyhsLGMpe2lmKCEocD1sLmxlbmd0aCkpcmV0dXJuIGw7dmFyIHU9bC5tYXAoZnVuY3Rpb24odCxyKXtyZXR1cm4gZS5jYWxsKHMsdCxyKX0pLGg9dS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuW2EuY2FsbChzLHQsZSksby5jYWxsKHMsdCxlKV19KX0pLGY9ci5jYWxsKHMsaCxjKTt1PXQucGVybXV0ZSh1LGYpLGg9dC5wZXJtdXRlKGgsZik7dmFyIHAsZCxnLG0sdj1uLmNhbGwocyxoLGMpLHk9dVswXS5sZW5ndGg7Zm9yKGc9MDtnPHk7KytnKWZvcihpLmNhbGwocyx1WzBdW2ddLG09dltnXSxoWzBdW2ddWzFdKSxkPTE7ZDxwOysrZClpLmNhbGwocyx1W2RdW2ddLG0rPWhbZC0xXVtnXVsxXSxoW2RdW2ddWzFdKTtyZXR1cm4gbH1yZXR1cm4gcy52YWx1ZXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxzKTplfSxzLm9yZGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6RmEuZ2V0KHQpfHxqYSxzKTpyfSxzLm9mZnNldD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90Ok5hLmdldCh0KXx8VmEscyk6bn0scy54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXQscyk6YX0scy55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXQscyk6b30scy5vdXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxzKTppfSxzfTt2YXIgRmE9dC5tYXAoeyJpbnNpZGUtb3V0IjpmdW5jdGlvbihlKXt2YXIgcixuLGk9ZS5sZW5ndGgsYT1lLm1hcChVYSksbz1lLm1hcChxYSkscz10LnJhbmdlKGkpLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gYVt0XS1hW2VdfSksbD0wLGM9MCx1PVtdLGg9W107Zm9yKHI9MDtyPGk7KytyKW49c1tyXSxsPGM/KGwrPW9bbl0sdS5wdXNoKG4pKTooYys9b1tuXSxoLnB1c2gobikpO3JldHVybiBoLnJldmVyc2UoKS5jb25jYXQodSl9LHJldmVyc2U6ZnVuY3Rpb24oZSl7cmV0dXJuIHQucmFuZ2UoZS5sZW5ndGgpLnJldmVyc2UoKX0sZGVmYXVsdDpqYX0pLE5hPXQubWFwKHtzaWxob3VldHRlOmZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpPXQubGVuZ3RoLGE9dFswXS5sZW5ndGgsbz1bXSxzPTAsbD1bXTtmb3Iocj0wO3I8YTsrK3Ipe2ZvcihlPTAsbj0wO2U8aTtlKyspbis9dFtlXVtyXVsxXTtuPnMmJihzPW4pLG8ucHVzaChuKX1mb3Iocj0wO3I8YTsrK3IpbFtyXT0ocy1vW3JdKS8yO3JldHVybiBsfSx3aWdnbGU6ZnVuY3Rpb24odCl7dmFyIGUscixuLGksYSxvLHMsbCxjLHU9dC5sZW5ndGgsaD10WzBdLGY9aC5sZW5ndGgscD1bXTtmb3IocFswXT1sPWM9MCxyPTE7cjxmOysrcil7Zm9yKGU9MCxpPTA7ZTx1OysrZSlpKz10W2VdW3JdWzFdO2ZvcihlPTAsYT0wLHM9aFtyXVswXS1oW3ItMV1bMF07ZTx1OysrZSl7Zm9yKG49MCxvPSh0W2VdW3JdWzFdLXRbZV1bci0xXVsxXSkvKDIqcyk7bjxlOysrbilvKz0odFtuXVtyXVsxXS10W25dW3ItMV1bMV0pL3M7YSs9byp0W2VdW3JdWzFdfXBbcl09bC09aT9hL2kqczowLGw8YyYmKGM9bCl9Zm9yKHI9MDtyPGY7KytyKXBbcl0tPWM7cmV0dXJuIHB9LGV4cGFuZDpmdW5jdGlvbih0KXt2YXIgZSxyLG4saT10Lmxlbmd0aCxhPXRbMF0ubGVuZ3RoLG89MS9pLHM9W107Zm9yKHI9MDtyPGE7KytyKXtmb3IoZT0wLG49MDtlPGk7ZSsrKW4rPXRbZV1bcl1bMV07aWYobilmb3IoZT0wO2U8aTtlKyspdFtlXVtyXVsxXS89bjtlbHNlIGZvcihlPTA7ZTxpO2UrKyl0W2VdW3JdWzFdPW99Zm9yKHI9MDtyPGE7KytyKXNbcl09MDtyZXR1cm4gc30semVybzpWYX0pO2Z1bmN0aW9uIGphKGUpe3JldHVybiB0LnJhbmdlKGUubGVuZ3RoKX1mdW5jdGlvbiBWYSh0KXtmb3IodmFyIGU9LTEscj10WzBdLmxlbmd0aCxuPVtdOysrZTxyOyluW2VdPTA7cmV0dXJuIG59ZnVuY3Rpb24gVWEodCl7Zm9yKHZhciBlLHI9MSxuPTAsaT10WzBdWzFdLGE9dC5sZW5ndGg7cjxhOysrcikoZT10W3JdWzFdKT5pJiYobj1yLGk9ZSk7cmV0dXJuIG59ZnVuY3Rpb24gcWEodCl7cmV0dXJuIHQucmVkdWNlKEhhLDApfWZ1bmN0aW9uIEhhKHQsZSl7cmV0dXJuIHQrZVsxXX1mdW5jdGlvbiBHYSh0LGUpe3JldHVybiBXYSh0LE1hdGguY2VpbChNYXRoLmxvZyhlLmxlbmd0aCkvTWF0aC5MTjIrMSkpfWZ1bmN0aW9uIFdhKHQsZSl7Zm9yKHZhciByPS0xLG49K3RbMF0saT0odFsxXS1uKS9lLGE9W107KytyPD1lOylhW3JdPWkqcituO3JldHVybiBhfWZ1bmN0aW9uIFlhKGUpe3JldHVyblt0Lm1pbihlKSx0Lm1heChlKV19ZnVuY3Rpb24gWGEodCxlKXtyZXR1cm4gdC52YWx1ZS1lLnZhbHVlfWZ1bmN0aW9uIFphKHQsZSl7dmFyIHI9dC5fcGFja19uZXh0O3QuX3BhY2tfbmV4dD1lLGUuX3BhY2tfcHJldj10LGUuX3BhY2tfbmV4dD1yLHIuX3BhY2tfcHJldj1lfWZ1bmN0aW9uICRhKHQsZSl7dC5fcGFja19uZXh0PWUsZS5fcGFja19wcmV2PXR9ZnVuY3Rpb24gSmEodCxlKXt2YXIgcj1lLngtdC54LG49ZS55LXQueSxpPXQucitlLnI7cmV0dXJuLjk5OSppKmk+cipyK24qbn1mdW5jdGlvbiBLYSh0KXtpZigoZT10LmNoaWxkcmVuKSYmKGw9ZS5sZW5ndGgpKXt2YXIgZSxyLG4saSxhLG8scyxsLGM9MS8wLHU9LTEvMCxoPTEvMCxmPS0xLzA7aWYoZS5mb3JFYWNoKFFhKSwocj1lWzBdKS54PS1yLnIsci55PTAseChyKSxsPjEmJigobj1lWzFdKS54PW4ucixuLnk9MCx4KG4pLGw+MikpZm9yKGVvKHIsbixpPWVbMl0pLHgoaSksWmEocixpKSxyLl9wYWNrX3ByZXY9aSxaYShpLG4pLG49ci5fcGFja19uZXh0LGE9MzthPGw7YSsrKXtlbyhyLG4saT1lW2FdKTt2YXIgcD0wLGQ9MSxnPTE7Zm9yKG89bi5fcGFja19uZXh0O28hPT1uO289by5fcGFja19uZXh0LGQrKylpZihKYShvLGkpKXtwPTE7YnJlYWt9aWYoMT09cClmb3Iocz1yLl9wYWNrX3ByZXY7cyE9PW8uX3BhY2tfcHJldiYmIUphKHMsaSk7cz1zLl9wYWNrX3ByZXYsZysrKTtwPyhkPGd8fGQ9PWcmJm4ucjxyLnI/JGEocixuPW8pOiRhKHI9cyxuKSxhLS0pOihaYShyLGkpLG49aSx4KGkpKX12YXIgbT0oYyt1KS8yLHY9KGgrZikvMix5PTA7Zm9yKGE9MDthPGw7YSsrKShpPWVbYV0pLngtPW0saS55LT12LHk9TWF0aC5tYXgoeSxpLnIrTWF0aC5zcXJ0KGkueCppLngraS55KmkueSkpO3Qucj15LGUuZm9yRWFjaCh0byl9ZnVuY3Rpb24geCh0KXtjPU1hdGgubWluKHQueC10LnIsYyksdT1NYXRoLm1heCh0LngrdC5yLHUpLGg9TWF0aC5taW4odC55LXQucixoKSxmPU1hdGgubWF4KHQueSt0LnIsZil9fWZ1bmN0aW9uIFFhKHQpe3QuX3BhY2tfbmV4dD10Ll9wYWNrX3ByZXY9dH1mdW5jdGlvbiB0byh0KXtkZWxldGUgdC5fcGFja19uZXh0LGRlbGV0ZSB0Ll9wYWNrX3ByZXZ9ZnVuY3Rpb24gZW8odCxlLHIpe3ZhciBuPXQucityLnIsaT1lLngtdC54LGE9ZS55LXQueTtpZihuJiYoaXx8YSkpe3ZhciBvPWUucityLnIscz1pKmkrYSphLGw9LjUrKChuKj1uKS0obyo9bykpLygyKnMpLGM9TWF0aC5zcXJ0KE1hdGgubWF4KDAsMipvKihuK3MpLShuLT1zKSpuLW8qbykpLygyKnMpO3IueD10LngrbCppK2MqYSxyLnk9dC55K2wqYS1jKml9ZWxzZSByLng9dC54K24sci55PXQueX1mdW5jdGlvbiBybyh0LGUpe3JldHVybiB0LnBhcmVudD09ZS5wYXJlbnQ/MToyfWZ1bmN0aW9uIG5vKHQpe3ZhciBlPXQuY2hpbGRyZW47cmV0dXJuIGUubGVuZ3RoP2VbMF06dC50fWZ1bmN0aW9uIGlvKHQpe3ZhciBlLHI9dC5jaGlsZHJlbjtyZXR1cm4oZT1yLmxlbmd0aCk/cltlLTFdOnQudH1mdW5jdGlvbiBhbyh0LGUscil7dmFyIG49ci8oZS5pLXQuaSk7ZS5jLT1uLGUucys9cix0LmMrPW4sZS56Kz1yLGUubSs9cn1mdW5jdGlvbiBvbyh0LGUscil7cmV0dXJuIHQuYS5wYXJlbnQ9PT1lLnBhcmVudD90LmE6cn1mdW5jdGlvbiBzbyh0KXtyZXR1cm57eDp0LngseTp0LnksZHg6dC5keCxkeTp0LmR5fX1mdW5jdGlvbiBsbyh0LGUpe3ZhciByPXQueCtlWzNdLG49dC55K2VbMF0saT10LmR4LWVbMV0tZVszXSxhPXQuZHktZVswXS1lWzJdO3JldHVybiBpPDAmJihyKz1pLzIsaT0wKSxhPDAmJihuKz1hLzIsYT0wKSx7eDpyLHk6bixkeDppLGR5OmF9fWZ1bmN0aW9uIGNvKHQpe3ZhciBlPXRbMF0scj10W3QubGVuZ3RoLTFdO3JldHVybiBlPHI/W2Uscl06W3IsZV19ZnVuY3Rpb24gdW8odCl7cmV0dXJuIHQucmFuZ2VFeHRlbnQ/dC5yYW5nZUV4dGVudCgpOmNvKHQucmFuZ2UoKSl9ZnVuY3Rpb24gaG8odCxlLHIsbil7dmFyIGk9cih0WzBdLHRbMV0pLGE9bihlWzBdLGVbMV0pO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gYShpKHQpKX19ZnVuY3Rpb24gZm8odCxlKXt2YXIgcixuPTAsaT10Lmxlbmd0aC0xLGE9dFtuXSxvPXRbaV07cmV0dXJuIG88YSYmKHI9bixuPWksaT1yLHI9YSxhPW8sbz1yKSx0W25dPWUuZmxvb3IoYSksdFtpXT1lLmNlaWwobyksdH1mdW5jdGlvbiBwbyh0KXtyZXR1cm4gdD97Zmxvb3I6ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGguZmxvb3IoZS90KSp0fSxjZWlsOmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLmNlaWwoZS90KSp0fX06Z299dC5sYXlvdXQuaGlzdG9ncmFtPWZ1bmN0aW9uKCl7dmFyIGU9ITAscj1OdW1iZXIsbj1ZYSxpPUdhO2Z1bmN0aW9uIGEoYSxvKXtmb3IodmFyIHMsbCxjPVtdLHU9YS5tYXAocix0aGlzKSxoPW4uY2FsbCh0aGlzLHUsbyksZj1pLmNhbGwodGhpcyxoLHUsbykscD0obz0tMSx1Lmxlbmd0aCksZD1mLmxlbmd0aC0xLGc9ZT8xOjEvcDsrK288ZDspKHM9Y1tvXT1bXSkuZHg9ZltvKzFdLShzLng9ZltvXSkscy55PTA7aWYoZD4wKWZvcihvPS0xOysrbzxwOykobD11W29dKT49aFswXSYmbDw9aFsxXSYmKChzPWNbdC5iaXNlY3QoZixsLDEsZCktMV0pLnkrPWcscy5wdXNoKGFbb10pKTtyZXR1cm4gY31yZXR1cm4gYS52YWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LGEpOnJ9LGEucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49bWUodCksYSk6bn0sYS5iaW5zPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJudW1iZXIiPT10eXBlb2YgdD9mdW5jdGlvbihlKXtyZXR1cm4gV2EoZSx0KX06bWUodCksYSk6aX0sYS5mcmVxdWVuY3k9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ISF0LGEpOmV9LGF9LHQubGF5b3V0LnBhY2s9ZnVuY3Rpb24oKXt2YXIgZSxyPXQubGF5b3V0LmhpZXJhcmNoeSgpLnNvcnQoWGEpLG49MCxpPVsxLDFdO2Z1bmN0aW9uIGEodCxhKXt2YXIgbz1yLmNhbGwodGhpcyx0LGEpLHM9b1swXSxsPWlbMF0sYz1pWzFdLHU9bnVsbD09ZT9NYXRoLnNxcnQ6ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpmdW5jdGlvbigpe3JldHVybiBlfTtpZihzLng9cy55PTAsQ2EocyxmdW5jdGlvbih0KXt0LnI9K3UodC52YWx1ZSl9KSxDYShzLEthKSxuKXt2YXIgaD1uKihlPzE6TWF0aC5tYXgoMipzLnIvbCwyKnMuci9jKSkvMjtDYShzLGZ1bmN0aW9uKHQpe3Qucis9aH0pLENhKHMsS2EpLENhKHMsZnVuY3Rpb24odCl7dC5yLT1ofSl9cmV0dXJuIGZ1bmN0aW9uIHQoZSxyLG4saSl7dmFyIGE9ZS5jaGlsZHJlbjtlLng9cis9aSplLng7ZS55PW4rPWkqZS55O2Uucio9aTtpZihhKWZvcih2YXIgbz0tMSxzPWEubGVuZ3RoOysrbzxzOyl0KGFbb10scixuLGkpfShzLGwvMixjLzIsZT8xOjEvTWF0aC5tYXgoMipzLnIvbCwyKnMuci9jKSksb31yZXR1cm4gYS5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQsYSk6aX0sYS5yYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bnVsbD09dHx8ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDordCxhKTplfSxhLnBhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K3QsYSk6bn0sU2EoYSxyKX0sdC5sYXlvdXQudHJlZT1mdW5jdGlvbigpe3ZhciBlPXQubGF5b3V0LmhpZXJhcmNoeSgpLnNvcnQobnVsbCkudmFsdWUobnVsbCkscj1ybyxuPVsxLDFdLGk9bnVsbDtmdW5jdGlvbiBhKHQsYSl7dmFyIGM9ZS5jYWxsKHRoaXMsdCxhKSx1PWNbMF0saD1mdW5jdGlvbih0KXt2YXIgZSxyPXtBOm51bGwsY2hpbGRyZW46W3RdfSxuPVtyXTtmb3IoO251bGwhPShlPW4ucG9wKCkpOylmb3IodmFyIGksYT1lLmNoaWxkcmVuLG89MCxzPWEubGVuZ3RoO288czsrK28pbi5wdXNoKChhW29dPWk9e186YVtvXSxwYXJlbnQ6ZSxjaGlsZHJlbjooaT1hW29dLmNoaWxkcmVuKSYmaS5zbGljZSgpfHxbXSxBOm51bGwsYTpudWxsLHo6MCxtOjAsYzowLHM6MCx0Om51bGwsaTpvfSkuYT1pKTtyZXR1cm4gci5jaGlsZHJlblswXX0odSk7aWYoQ2EoaCxvKSxoLnBhcmVudC5tPS1oLnosRWEoaCxzKSxpKUVhKHUsbCk7ZWxzZXt2YXIgZj11LHA9dSxkPXU7RWEodSxmdW5jdGlvbih0KXt0Lng8Zi54JiYoZj10KSx0Lng+cC54JiYocD10KSx0LmRlcHRoPmQuZGVwdGgmJihkPXQpfSk7dmFyIGc9cihmLHApLzItZi54LG09blswXS8ocC54K3IocCxmKS8yK2cpLHY9blsxXS8oZC5kZXB0aHx8MSk7RWEodSxmdW5jdGlvbih0KXt0Lng9KHQueCtnKSptLHQueT10LmRlcHRoKnZ9KX1yZXR1cm4gY31mdW5jdGlvbiBvKHQpe3ZhciBlPXQuY2hpbGRyZW4sbj10LnBhcmVudC5jaGlsZHJlbixpPXQuaT9uW3QuaS0xXTpudWxsO2lmKGUubGVuZ3RoKXshZnVuY3Rpb24odCl7dmFyIGUscj0wLG49MCxpPXQuY2hpbGRyZW4sYT1pLmxlbmd0aDtmb3IoOy0tYT49MDspKGU9aVthXSkueis9cixlLm0rPXIscis9ZS5zKyhuKz1lLmMpfSh0KTt2YXIgYT0oZVswXS56K2VbZS5sZW5ndGgtMV0ueikvMjtpPyh0Lno9aS56K3IodC5fLGkuXyksdC5tPXQuei1hKTp0Lno9YX1lbHNlIGkmJih0Lno9aS56K3IodC5fLGkuXykpO3QucGFyZW50LkE9ZnVuY3Rpb24odCxlLG4pe2lmKGUpe2Zvcih2YXIgaSxhPXQsbz10LHM9ZSxsPWEucGFyZW50LmNoaWxkcmVuWzBdLGM9YS5tLHU9by5tLGg9cy5tLGY9bC5tO3M9aW8ocyksYT1ubyhhKSxzJiZhOylsPW5vKGwpLChvPWlvKG8pKS5hPXQsKGk9cy56K2gtYS56LWMrcihzLl8sYS5fKSk+MCYmKGFvKG9vKHMsdCxuKSx0LGkpLGMrPWksdSs9aSksaCs9cy5tLGMrPWEubSxmKz1sLm0sdSs9by5tO3MmJiFpbyhvKSYmKG8udD1zLG8ubSs9aC11KSxhJiYhbm8obCkmJihsLnQ9YSxsLm0rPWMtZixuPXQpfXJldHVybiBufSh0LGksdC5wYXJlbnQuQXx8blswXSl9ZnVuY3Rpb24gcyh0KXt0Ll8ueD10LnordC5wYXJlbnQubSx0Lm0rPXQucGFyZW50Lm19ZnVuY3Rpb24gbCh0KXt0LngqPW5bMF0sdC55PXQuZGVwdGgqblsxXX1yZXR1cm4gYS5zZXBhcmF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsYSk6cn0sYS5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW51bGw9PShuPXQpP2w6bnVsbCxhKTppP251bGw6bn0sYS5ub2RlU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1udWxsPT0obj10KT9udWxsOmwsYSk6aT9uOm51bGx9LFNhKGEsZSl9LHQubGF5b3V0LmNsdXN0ZXI9ZnVuY3Rpb24oKXt2YXIgZT10LmxheW91dC5oaWVyYXJjaHkoKS5zb3J0KG51bGwpLnZhbHVlKG51bGwpLHI9cm8sbj1bMSwxXSxpPSExO2Z1bmN0aW9uIGEoYSxvKXt2YXIgcyxsPWUuY2FsbCh0aGlzLGEsbyksYz1sWzBdLHU9MDtDYShjLGZ1bmN0aW9uKGUpe3ZhciBuPWUuY2hpbGRyZW47biYmbi5sZW5ndGg/KGUueD1mdW5jdGlvbih0KXtyZXR1cm4gdC5yZWR1Y2UoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtlLnh9LDApL3QubGVuZ3RofShuKSxlLnk9ZnVuY3Rpb24oZSl7cmV0dXJuIDErdC5tYXgoZSxmdW5jdGlvbih0KXtyZXR1cm4gdC55fSl9KG4pKTooZS54PXM/dSs9cihlLHMpOjAsZS55PTAscz1lKX0pO3ZhciBoPWZ1bmN0aW9uIHQoZSl7dmFyIHI9ZS5jaGlsZHJlbjtyZXR1cm4gciYmci5sZW5ndGg/dChyWzBdKTplfShjKSxmPWZ1bmN0aW9uIHQoZSl7dmFyIHIsbj1lLmNoaWxkcmVuO3JldHVybiBuJiYocj1uLmxlbmd0aCk/dChuW3ItMV0pOmV9KGMpLHA9aC54LXIoaCxmKS8yLGQ9Zi54K3IoZixoKS8yO3JldHVybiBDYShjLGk/ZnVuY3Rpb24odCl7dC54PSh0LngtYy54KSpuWzBdLHQueT0oYy55LXQueSkqblsxXX06ZnVuY3Rpb24odCl7dC54PSh0LngtcCkvKGQtcCkqblswXSx0Lnk9KDEtKGMueT90LnkvYy55OjEpKSpuWzFdfSksbH1yZXR1cm4gYS5zZXBhcmF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsYSk6cn0sYS5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW51bGw9PShuPXQpLGEpOmk/bnVsbDpufSxhLm5vZGVTaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW51bGwhPShuPXQpLGEpOmk/bjpudWxsfSxTYShhLGUpfSx0LmxheW91dC50cmVlbWFwPWZ1bmN0aW9uKCl7dmFyIGUscj10LmxheW91dC5oaWVyYXJjaHkoKSxuPU1hdGgucm91bmQsaT1bMSwxXSxhPW51bGwsbz1zbyxzPSExLGw9InNxdWFyaWZ5IixjPS41KigxK01hdGguc3FydCg1KSk7ZnVuY3Rpb24gdSh0LGUpe2Zvcih2YXIgcixuLGk9LTEsYT10Lmxlbmd0aDsrK2k8YTspbj0ocj10W2ldKS52YWx1ZSooZTwwPzA6ZSksci5hcmVhPWlzTmFOKG4pfHxuPD0wPzA6bn1mdW5jdGlvbiBoKHQpe3ZhciBlPXQuY2hpbGRyZW47aWYoZSYmZS5sZW5ndGgpe3ZhciByLG4saSxhPW8odCkscz1bXSxjPWUuc2xpY2UoKSxmPTEvMCxnPSJzbGljZSI9PT1sP2EuZHg6ImRpY2UiPT09bD9hLmR5OiJzbGljZS1kaWNlIj09PWw/MSZ0LmRlcHRoP2EuZHk6YS5keDpNYXRoLm1pbihhLmR4LGEuZHkpO2Zvcih1KGMsYS5keCphLmR5L3QudmFsdWUpLHMuYXJlYT0wOyhpPWMubGVuZ3RoKT4wOylzLnB1c2gocj1jW2ktMV0pLHMuYXJlYSs9ci5hcmVhLCJzcXVhcmlmeSIhPT1sfHwobj1wKHMsZykpPD1mPyhjLnBvcCgpLGY9bik6KHMuYXJlYS09cy5wb3AoKS5hcmVhLGQocyxnLGEsITEpLGc9TWF0aC5taW4oYS5keCxhLmR5KSxzLmxlbmd0aD1zLmFyZWE9MCxmPTEvMCk7cy5sZW5ndGgmJihkKHMsZyxhLCEwKSxzLmxlbmd0aD1zLmFyZWE9MCksZS5mb3JFYWNoKGgpfX1mdW5jdGlvbiBmKHQpe3ZhciBlPXQuY2hpbGRyZW47aWYoZSYmZS5sZW5ndGgpe3ZhciByLG49byh0KSxpPWUuc2xpY2UoKSxhPVtdO2Zvcih1KGksbi5keCpuLmR5L3QudmFsdWUpLGEuYXJlYT0wO3I9aS5wb3AoKTspYS5wdXNoKHIpLGEuYXJlYSs9ci5hcmVhLG51bGwhPXIueiYmKGQoYSxyLno/bi5keDpuLmR5LG4sIWkubGVuZ3RoKSxhLmxlbmd0aD1hLmFyZWE9MCk7ZS5mb3JFYWNoKGYpfX1mdW5jdGlvbiBwKHQsZSl7Zm9yKHZhciByLG49dC5hcmVhLGk9MCxhPTEvMCxvPS0xLHM9dC5sZW5ndGg7KytvPHM7KShyPXRbb10uYXJlYSkmJihyPGEmJihhPXIpLHI+aSYmKGk9cikpO3JldHVybiBlKj1lLChuKj1uKT9NYXRoLm1heChlKmkqYy9uLG4vKGUqYSpjKSk6MS8wfWZ1bmN0aW9uIGQodCxlLHIsaSl7dmFyIGEsbz0tMSxzPXQubGVuZ3RoLGw9ci54LGM9ci55LHU9ZT9uKHQuYXJlYS9lKTowO2lmKGU9PXIuZHgpe2ZvcigoaXx8dT5yLmR5KSYmKHU9ci5keSk7KytvPHM7KShhPXRbb10pLng9bCxhLnk9YyxhLmR5PXUsbCs9YS5keD1NYXRoLm1pbihyLngrci5keC1sLHU/bihhLmFyZWEvdSk6MCk7YS56PSEwLGEuZHgrPXIueCtyLmR4LWwsci55Kz11LHIuZHktPXV9ZWxzZXtmb3IoKGl8fHU+ci5keCkmJih1PXIuZHgpOysrbzxzOykoYT10W29dKS54PWwsYS55PWMsYS5keD11LGMrPWEuZHk9TWF0aC5taW4oci55K3IuZHktYyx1P24oYS5hcmVhL3UpOjApO2Euej0hMSxhLmR5Kz1yLnkrci5keS1jLHIueCs9dSxyLmR4LT11fX1mdW5jdGlvbiBnKHQpe3ZhciBuPWV8fHIodCksYT1uWzBdO3JldHVybiBhLng9YS55PTAsYS52YWx1ZT8oYS5keD1pWzBdLGEuZHk9aVsxXSk6YS5keD1hLmR5PTAsZSYmci5yZXZhbHVlKGEpLHUoW2FdLGEuZHgqYS5keS9hLnZhbHVlKSwoZT9mOmgpKGEpLHMmJihlPW4pLG59cmV0dXJuIGcuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10LGcpOml9LGcucGFkZGluZz1mdW5jdGlvbih0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gYTtmdW5jdGlvbiBlKGUpe3JldHVybiBsbyhlLHQpfXZhciByO3JldHVybiBvPW51bGw9PShhPXQpP3NvOiJmdW5jdGlvbiI9PShyPXR5cGVvZiB0KT9mdW5jdGlvbihlKXt2YXIgcj10LmNhbGwoZyxlLGUuZGVwdGgpO3JldHVybiBudWxsPT1yP3NvKGUpOmxvKGUsIm51bWJlciI9PXR5cGVvZiByP1tyLHIscixyXTpyKX06Im51bWJlciI9PT1yPyh0PVt0LHQsdCx0XSxlKTplLGd9LGcucm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dD9NYXRoLnJvdW5kOk51bWJlcixnKTpuIT1OdW1iZXJ9LGcuc3RpY2t5PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPXQsZT1udWxsLGcpOnN9LGcucmF0aW89ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9dCxnKTpjfSxnLm1vZGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9dCsiIixnKTpsfSxTYShnLHIpfSx0LnJhbmRvbT17bm9ybWFsOmZ1bmN0aW9uKHQsZSl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aDtyZXR1cm4gcjwyJiYoZT0xKSxyPDEmJih0PTApLGZ1bmN0aW9uKCl7dmFyIHIsbixpO2Rve2k9KHI9MipNYXRoLnJhbmRvbSgpLTEpKnIrKG49MipNYXRoLnJhbmRvbSgpLTEpKm59d2hpbGUoIWl8fGk+MSk7cmV0dXJuIHQrZSpyKk1hdGguc3FydCgtMipNYXRoLmxvZyhpKS9pKX19LGxvZ05vcm1hbDpmdW5jdGlvbigpe3ZhciBlPXQucmFuZG9tLm5vcm1hbC5hcHBseSh0LGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguZXhwKGUoKSl9fSxiYXRlczpmdW5jdGlvbihlKXt2YXIgcj10LnJhbmRvbS5pcndpbkhhbGwoZSk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHIoKS9lfX0saXJ3aW5IYWxsOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgZT0wLHI9MDtyPHQ7cisrKWUrPU1hdGgucmFuZG9tKCk7cmV0dXJuIGV9fX0sdC5zY2FsZT17fTt2YXIgZ289e2Zsb29yOnosY2VpbDp6fTtmdW5jdGlvbiBtbyhlLHIsbixpKXt2YXIgYT1bXSxvPVtdLHM9MCxsPU1hdGgubWluKGUubGVuZ3RoLHIubGVuZ3RoKS0xO2ZvcihlW2xdPGVbMF0mJihlPWUuc2xpY2UoKS5yZXZlcnNlKCkscj1yLnNsaWNlKCkucmV2ZXJzZSgpKTsrK3M8PWw7KWEucHVzaChuKGVbcy0xXSxlW3NdKSksby5wdXNoKGkocltzLTFdLHJbc10pKTtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIG49dC5iaXNlY3QoZSxyLDEsbCktMTtyZXR1cm4gb1tuXShhW25dKHIpKX19ZnVuY3Rpb24gdm8oZSxyKXtyZXR1cm4gdC5yZWJpbmQoZSxyLCJyYW5nZSIsInJhbmdlUm91bmQiLCJpbnRlcnBvbGF0ZSIsImNsYW1wIil9ZnVuY3Rpb24geW8odCxlKXtyZXR1cm4gZm8odCxwbyh4byh0LGUpWzJdKSksZm8odCxwbyh4byh0LGUpWzJdKSksdH1mdW5jdGlvbiB4byh0LGUpe251bGw9PWUmJihlPTEwKTt2YXIgcj1jbyh0KSxuPXJbMV0tclswXSxpPU1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2cobi9lKS9NYXRoLkxOMTApKSxhPWUvbippO3JldHVybiBhPD0uMTU/aSo9MTA6YTw9LjM1P2kqPTU6YTw9Ljc1JiYoaSo9MiksclswXT1NYXRoLmNlaWwoclswXS9pKSppLHJbMV09TWF0aC5mbG9vcihyWzFdL2kpKmkrLjUqaSxyWzJdPWkscn1mdW5jdGlvbiBibyhlLHIpe3JldHVybiB0LnJhbmdlLmFwcGx5KHQseG8oZSxyKSl9ZnVuY3Rpb24gX28oZSxyLG4pe3ZhciBpPXhvKGUscik7aWYobil7dmFyIGE9TGUuZXhlYyhuKTtpZihhLnNoaWZ0KCksInMiPT09YVs4XSl7dmFyIG89dC5mb3JtYXRQcmVmaXgoTWF0aC5tYXgoeShpWzBdKSx5KGlbMV0pKSk7cmV0dXJuIGFbN118fChhWzddPSIuIitrbyhvLnNjYWxlKGlbMl0pKSksYVs4XT0iZiIsbj10LmZvcm1hdChhLmpvaW4oIiIpKSxmdW5jdGlvbih0KXtyZXR1cm4gbihvLnNjYWxlKHQpKStvLnN5bWJvbH19YVs3XXx8KGFbN109Ii4iK2Z1bmN0aW9uKHQsZSl7dmFyIHI9a28oZVsyXSk7cmV0dXJuIHQgaW4gd28/TWF0aC5hYnMoci1rbyhNYXRoLm1heCh5KGVbMF0pLHkoZVsxXSkpKSkrICsoImUiIT09dCk6ci0yKigiJSI9PT10KX0oYVs4XSxpKSksbj1hLmpvaW4oIiIpfWVsc2Ugbj0iLC4iK2tvKGlbMl0pKyJmIjtyZXR1cm4gdC5mb3JtYXQobil9dC5zY2FsZS5saW5lYXI9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gdChlLHIsbixpKXt2YXIgYSxvO2Z1bmN0aW9uIHMoKXt2YXIgdD1NYXRoLm1pbihlLmxlbmd0aCxyLmxlbmd0aCk+Mj9tbzpobyxzPWk/dmE6bWE7cmV0dXJuIGE9dChlLHIscyxuKSxvPXQocixlLHMsWmkpLGx9ZnVuY3Rpb24gbCh0KXtyZXR1cm4gYSh0KX1sLmludmVydD1mdW5jdGlvbih0KXtyZXR1cm4gbyh0KX07bC5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dC5tYXAoTnVtYmVyKSxzKCkpOmV9O2wucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxzKCkpOnJ9O2wucmFuZ2VSb3VuZD1mdW5jdGlvbih0KXtyZXR1cm4gbC5yYW5nZSh0KS5pbnRlcnBvbGF0ZShjYSl9O2wuY2xhbXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxzKCkpOml9O2wuaW50ZXJwb2xhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxzKCkpOm59O2wudGlja3M9ZnVuY3Rpb24odCl7cmV0dXJuIGJvKGUsdCl9O2wudGlja0Zvcm1hdD1mdW5jdGlvbih0LHIpe3JldHVybiBfbyhlLHQscil9O2wubmljZT1mdW5jdGlvbih0KXtyZXR1cm4geW8oZSx0KSxzKCl9O2wuY29weT1mdW5jdGlvbigpe3JldHVybiB0KGUscixuLGkpfTtyZXR1cm4gcygpfShbMCwxXSxbMCwxXSxaaSwhMSl9O3ZhciB3bz17czoxLGc6MSxwOjEscjoxLGU6MX07ZnVuY3Rpb24ga28odCl7cmV0dXJuLU1hdGguZmxvb3IoTWF0aC5sb2codCkvTWF0aC5MTjEwKy4wMSl9dC5zY2FsZS5sb2c9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gZShyLG4saSxhKXtmdW5jdGlvbiBvKHQpe3JldHVybihpP01hdGgubG9nKHQ8MD8wOnQpOi1NYXRoLmxvZyh0PjA/MDotdCkpL01hdGgubG9nKG4pfWZ1bmN0aW9uIHModCl7cmV0dXJuIGk/TWF0aC5wb3cobix0KTotTWF0aC5wb3cobiwtdCl9ZnVuY3Rpb24gbCh0KXtyZXR1cm4gcihvKHQpKX1sLmludmVydD1mdW5jdGlvbih0KXtyZXR1cm4gcyhyLmludmVydCh0KSl9O2wuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXRbMF0+PTAsci5kb21haW4oKGE9dC5tYXAoTnVtYmVyKSkubWFwKG8pKSxsKTphfTtsLmJhc2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K3Qsci5kb21haW4oYS5tYXAobykpLGwpOm59O2wubmljZT1mdW5jdGlvbigpe3ZhciB0PWZvKGEubWFwKG8pLGk/TWF0aDpBbyk7cmV0dXJuIHIuZG9tYWluKHQpLGE9dC5tYXAocyksbH07bC50aWNrcz1mdW5jdGlvbigpe3ZhciB0PWNvKGEpLGU9W10scj10WzBdLGw9dFsxXSxjPU1hdGguZmxvb3IobyhyKSksdT1NYXRoLmNlaWwobyhsKSksaD1uJTE/MjpuO2lmKGlzRmluaXRlKHUtYykpe2lmKGkpe2Zvcig7Yzx1O2MrKylmb3IodmFyIGY9MTtmPGg7ZisrKWUucHVzaChzKGMpKmYpO2UucHVzaChzKGMpKX1lbHNlIGZvcihlLnB1c2gocyhjKSk7YysrPHU7KWZvcih2YXIgZj1oLTE7Zj4wO2YtLSllLnB1c2gocyhjKSpmKTtmb3IoYz0wO2VbY108cjtjKyspO2Zvcih1PWUubGVuZ3RoO2VbdS0xXT5sO3UtLSk7ZT1lLnNsaWNlKGMsdSl9cmV0dXJuIGV9O2wudGlja0Zvcm1hdD1mdW5jdGlvbihlLHIpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBNbzthcmd1bWVudHMubGVuZ3RoPDI/cj1NbzoiZnVuY3Rpb24iIT10eXBlb2YgciYmKHI9dC5mb3JtYXQocikpO3ZhciBpPU1hdGgubWF4KDEsbiplL2wudGlja3MoKS5sZW5ndGgpO3JldHVybiBmdW5jdGlvbih0KXt2YXIgZT10L3MoTWF0aC5yb3VuZChvKHQpKSk7cmV0dXJuIGUqbjxuLS41JiYoZSo9biksZTw9aT9yKHQpOiIifX07bC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGUoci5jb3B5KCksbixpLGEpfTtyZXR1cm4gdm8obCxyKX0odC5zY2FsZS5saW5lYXIoKS5kb21haW4oWzAsMV0pLDEwLCEwLFsxLDEwXSl9O3ZhciBNbz10LmZvcm1hdCgiLjBlIiksQW89e2Zsb29yOmZ1bmN0aW9uKHQpe3JldHVybi1NYXRoLmNlaWwoLXQpfSxjZWlsOmZ1bmN0aW9uKHQpe3JldHVybi1NYXRoLmZsb29yKC10KX19O2Z1bmN0aW9uIFRvKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZTwwPy1NYXRoLnBvdygtZSx0KTpNYXRoLnBvdyhlLHQpfX10LnNjYWxlLnBvdz1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiB0KGUscixuKXt2YXIgaT1UbyhyKSxhPVRvKDEvcik7ZnVuY3Rpb24gbyh0KXtyZXR1cm4gZShpKHQpKX1vLmludmVydD1mdW5jdGlvbih0KXtyZXR1cm4gYShlLmludmVydCh0KSl9O28uZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlLmRvbWFpbigobj10Lm1hcChOdW1iZXIpKS5tYXAoaSkpLG8pOm59O28udGlja3M9ZnVuY3Rpb24odCl7cmV0dXJuIGJvKG4sdCl9O28udGlja0Zvcm1hdD1mdW5jdGlvbih0LGUpe3JldHVybiBfbyhuLHQsZSl9O28ubmljZT1mdW5jdGlvbih0KXtyZXR1cm4gby5kb21haW4oeW8obix0KSl9O28uZXhwb25lbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9VG8ocj10KSxhPVRvKDEvciksZS5kb21haW4obi5tYXAoaSkpLG8pOnJ9O28uY29weT1mdW5jdGlvbigpe3JldHVybiB0KGUuY29weSgpLHIsbil9O3JldHVybiB2byhvLGUpfSh0LnNjYWxlLmxpbmVhcigpLDEsWzAsMV0pfSx0LnNjYWxlLnNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdC5zY2FsZS5wb3coKS5leHBvbmVudCguNSl9LHQuc2NhbGUub3JkaW5hbD1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBlKHIsbil7dmFyIGksYSxvO2Z1bmN0aW9uIHModCl7cmV0dXJuIGFbKChpLmdldCh0KXx8KCJyYW5nZSI9PT1uLnQ/aS5zZXQodCxyLnB1c2godCkpOk5hTikpLTEpJWEubGVuZ3RoXX1mdW5jdGlvbiBsKGUsbil7cmV0dXJuIHQucmFuZ2Uoci5sZW5ndGgpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gZStuKnR9KX1zLmRvbWFpbj1mdW5jdGlvbih0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gcjtyPVtdLGk9bmV3IGI7Zm9yKHZhciBlLGE9LTEsbz10Lmxlbmd0aDsrK2E8bzspaS5oYXMoZT10W2FdKXx8aS5zZXQoZSxyLnB1c2goZSkpO3JldHVybiBzW24udF0uYXBwbHkocyxuLmEpfTtzLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXQsbz0wLG49e3Q6InJhbmdlIixhOmFyZ3VtZW50c30scyk6YX07cy5yYW5nZVBvaW50cz1mdW5jdGlvbih0LGUpe2FyZ3VtZW50cy5sZW5ndGg8MiYmKGU9MCk7dmFyIGk9dFswXSxjPXRbMV0sdT1yLmxlbmd0aDwyPyhpPShpK2MpLzIsMCk6KGMtaSkvKHIubGVuZ3RoLTErZSk7cmV0dXJuIGE9bChpK3UqZS8yLHUpLG89MCxuPXt0OiJyYW5nZVBvaW50cyIsYTphcmd1bWVudHN9LHN9O3MucmFuZ2VSb3VuZFBvaW50cz1mdW5jdGlvbih0LGUpe2FyZ3VtZW50cy5sZW5ndGg8MiYmKGU9MCk7dmFyIGk9dFswXSxjPXRbMV0sdT1yLmxlbmd0aDwyPyhpPWM9TWF0aC5yb3VuZCgoaStjKS8yKSwwKTooYy1pKS8oci5sZW5ndGgtMStlKXwwO3JldHVybiBhPWwoaStNYXRoLnJvdW5kKHUqZS8yKyhjLWktKHIubGVuZ3RoLTErZSkqdSkvMiksdSksbz0wLG49e3Q6InJhbmdlUm91bmRQb2ludHMiLGE6YXJndW1lbnRzfSxzfTtzLnJhbmdlQmFuZHM9ZnVuY3Rpb24odCxlLGkpe2FyZ3VtZW50cy5sZW5ndGg8MiYmKGU9MCksYXJndW1lbnRzLmxlbmd0aDwzJiYoaT1lKTt2YXIgYz10WzFdPHRbMF0sdT10W2MtMF0saD10WzEtY10sZj0oaC11KS8oci5sZW5ndGgtZSsyKmkpO3JldHVybiBhPWwodStmKmksZiksYyYmYS5yZXZlcnNlKCksbz1mKigxLWUpLG49e3Q6InJhbmdlQmFuZHMiLGE6YXJndW1lbnRzfSxzfTtzLnJhbmdlUm91bmRCYW5kcz1mdW5jdGlvbih0LGUsaSl7YXJndW1lbnRzLmxlbmd0aDwyJiYoZT0wKSxhcmd1bWVudHMubGVuZ3RoPDMmJihpPWUpO3ZhciBjPXRbMV08dFswXSx1PXRbYy0wXSxoPXRbMS1jXSxmPU1hdGguZmxvb3IoKGgtdSkvKHIubGVuZ3RoLWUrMippKSk7cmV0dXJuIGE9bCh1K01hdGgucm91bmQoKGgtdS0oci5sZW5ndGgtZSkqZikvMiksZiksYyYmYS5yZXZlcnNlKCksbz1NYXRoLnJvdW5kKGYqKDEtZSkpLG49e3Q6InJhbmdlUm91bmRCYW5kcyIsYTphcmd1bWVudHN9LHN9O3MucmFuZ2VCYW5kPWZ1bmN0aW9uKCl7cmV0dXJuIG99O3MucmFuZ2VFeHRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gY28obi5hWzBdKX07cy5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGUocixuKX07cmV0dXJuIHMuZG9tYWluKHIpfShbXSx7dDoicmFuZ2UiLGE6W1tdXX0pfSx0LnNjYWxlLmNhdGVnb3J5MTA9ZnVuY3Rpb24oKXtyZXR1cm4gdC5zY2FsZS5vcmRpbmFsKCkucmFuZ2UoU28pfSx0LnNjYWxlLmNhdGVnb3J5MjA9ZnVuY3Rpb24oKXtyZXR1cm4gdC5zY2FsZS5vcmRpbmFsKCkucmFuZ2UoRW8pfSx0LnNjYWxlLmNhdGVnb3J5MjBiPWZ1bmN0aW9uKCl7cmV0dXJuIHQuc2NhbGUub3JkaW5hbCgpLnJhbmdlKENvKX0sdC5zY2FsZS5jYXRlZ29yeTIwYz1mdW5jdGlvbigpe3JldHVybiB0LnNjYWxlLm9yZGluYWwoKS5yYW5nZShMbyl9O3ZhciBTbz1bMjA2MjI2MCwxNjc0NDIwNiwyOTI0NTg4LDE0MDM0NzI4LDk3MjU4ODUsOTE5NzEzMSwxNDkwNzMzMCw4MzU1NzExLDEyMzY5MTg2LDE1NTYxNzVdLm1hcChzZSksRW89WzIwNjIyNjAsMTE0NTQ0NDAsMTY3NDQyMDYsMTY3NTk2NzIsMjkyNDU4OCwxMDAxODY5OCwxNDAzNDcyOCwxNjc1MDc0Miw5NzI1ODg1LDEyOTU1ODYxLDkxOTcxMzEsMTI4ODUxNDAsMTQ5MDczMzAsMTYyMzQxOTQsODM1NTcxMSwxMzA5MjgwNywxMjM2OTE4NiwxNDQwODU4OSwxNTU2MTc1LDEwNDEwNzI1XS5tYXAoc2UpLENvPVszNzUwNzc3LDUzOTU2MTksNzA0MDcxOSwxMDI2NDI4Niw2NTE5MDk3LDkyMTY1OTQsMTE5MTUxMTUsMTM1NTY2MzYsOTIwMjk5MywxMjQyNjgwOSwxNTE4NjUxNCwxNTE5MDkzMiw4NjY2MTY5LDExMzU2NDkwLDE0MDQ5NjQzLDE1MTc3MzcyLDgwNzc2ODMsMTA4MzQzMjQsMTM1Mjg1MDksMTQ1ODk2NTRdLm1hcChzZSksTG89WzMyNDQ3MzMsNzA1NzExMCwxMDQwNjYyNSwxMzAzMjQzMSwxNTA5NTA1MywxNjYxNjc2NCwxNjYyNTI1OSwxNjYzNDAxOCwzMjUzMDc2LDc2NTI0NzAsMTA2MDcwMDMsMTMxMDE1MDQsNzY5NTI4MSwxMDM5NDMxMiwxMjM2OTM3MiwxNDM0Mjg5MSw2NTEzNTA3LDk4Njg5NTAsMTI0MzQ4NzcsMTQyNzcwODFdLm1hcChzZSk7ZnVuY3Rpb24gem8oKXtyZXR1cm4gMH10LnNjYWxlLnF1YW50aWxlPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIGUocixuKXt2YXIgaTtmdW5jdGlvbiBhKCl7dmFyIGU9MCxhPW4ubGVuZ3RoO2ZvcihpPVtdOysrZTxhOylpW2UtMV09dC5xdWFudGlsZShyLGUvYSk7cmV0dXJuIG99ZnVuY3Rpb24gbyhlKXtpZighaXNOYU4oZT0rZSkpcmV0dXJuIG5bdC5iaXNlY3QoaSxlKV19by5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dC5tYXAocCkuZmlsdGVyKGQpLnNvcnQoZiksYSgpKTpyfTtvLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQsYSgpKTpufTtvLnF1YW50aWxlcz1mdW5jdGlvbigpe3JldHVybiBpfTtvLmludmVydEV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4odD1uLmluZGV4T2YodCkpPDA/W05hTixOYU5dOlt0PjA/aVt0LTFdOnJbMF0sdDxpLmxlbmd0aD9pW3RdOnJbci5sZW5ndGgtMV1dfTtvLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gZShyLG4pfTtyZXR1cm4gYSgpfShbXSxbXSl9LHQuc2NhbGUucXVhbnRpemU9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gdChlLHIsbil7dmFyIGksYTtmdW5jdGlvbiBvKHQpe3JldHVybiBuW01hdGgubWF4KDAsTWF0aC5taW4oYSxNYXRoLmZsb29yKGkqKHQtZSkpKSldfWZ1bmN0aW9uIHMoKXtyZXR1cm4gaT1uLmxlbmd0aC8oci1lKSxhPW4ubGVuZ3RoLTEsb31vLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0rdFswXSxyPSt0W3QubGVuZ3RoLTFdLHMoKSk6W2Uscl19O28ucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxzKCkpOm59O28uaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVyblt0PSh0PW4uaW5kZXhPZih0KSk8MD9OYU46dC9pK2UsdCsxL2ldfTtvLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gdChlLHIsbil9O3JldHVybiBzKCl9KDAsMSxbMCwxXSl9LHQuc2NhbGUudGhyZXNob2xkPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIGUocixuKXtmdW5jdGlvbiBpKGUpe2lmKGU8PWUpcmV0dXJuIG5bdC5iaXNlY3QocixlKV19aS5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxpKTpyfTtpLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQsaSk6bn07aS5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bi5pbmRleE9mKHQpLFtyW3QtMV0sclt0XV19O2kuY29weT1mdW5jdGlvbigpe3JldHVybiBlKHIsbil9O3JldHVybiBpfShbLjVdLFswLDFdKX0sdC5zY2FsZS5pZGVudGl0eT1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIHIodCl7cmV0dXJuK3R9ci5pbnZlcnQ9cjtyLmRvbWFpbj1yLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQubWFwKHIpLHIpOmV9O3IudGlja3M9ZnVuY3Rpb24odCl7cmV0dXJuIGJvKGUsdCl9O3IudGlja0Zvcm1hdD1mdW5jdGlvbih0LHIpe3JldHVybiBfbyhlLHQscil9O3IuY29weT1mdW5jdGlvbigpe3JldHVybiB0KGUpfTtyZXR1cm4gcn0oWzAsMV0pfSx0LnN2Zz17fSx0LnN2Zy5hcmM9ZnVuY3Rpb24oKXt2YXIgdD1JbyxlPU9vLHI9em8sbj1QbyxpPURvLGE9Um8sbz1CbztmdW5jdGlvbiBzKCl7dmFyIHM9TWF0aC5tYXgoMCwrdC5hcHBseSh0aGlzLGFyZ3VtZW50cykpLGM9TWF0aC5tYXgoMCwrZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLHU9aS5hcHBseSh0aGlzLGFyZ3VtZW50cyktRXQsaD1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1FdCxmPU1hdGguYWJzKGgtdSkscD11Pmg/MDoxO2lmKGM8cyYmKGQ9YyxjPXMscz1kKSxmPj1TdClyZXR1cm4gbChjLHApKyhzP2wocywxLXApOiIiKSsiWiI7dmFyIGQsZyxtLHYseSx4LGIsXyx3LGssTSxBLFQ9MCxTPTAsRT1bXTtpZigodj0oK28uYXBwbHkodGhpcyxhcmd1bWVudHMpfHwwKS8yKSYmKG09bj09PVBvP01hdGguc3FydChzKnMrYypjKTorbi5hcHBseSh0aGlzLGFyZ3VtZW50cykscHx8KFMqPS0xKSxjJiYoUz1PdChtL2MqTWF0aC5zaW4odikpKSxzJiYoVD1PdChtL3MqTWF0aC5zaW4odikpKSksYyl7eT1jKk1hdGguY29zKHUrUykseD1jKk1hdGguc2luKHUrUyksYj1jKk1hdGguY29zKGgtUyksXz1jKk1hdGguc2luKGgtUyk7dmFyIEM9TWF0aC5hYnMoaC11LTIqUyk8PUF0PzA6MTtpZihTJiZGbyh5LHgsYixfKT09PXBeQyl7dmFyIEw9KHUraCkvMjt5PWMqTWF0aC5jb3MoTCkseD1jKk1hdGguc2luKEwpLGI9Xz1udWxsfX1lbHNlIHk9eD0wO2lmKHMpe3c9cypNYXRoLmNvcyhoLVQpLGs9cypNYXRoLnNpbihoLVQpLE09cypNYXRoLmNvcyh1K1QpLEE9cypNYXRoLnNpbih1K1QpO3ZhciB6PU1hdGguYWJzKHUtaCsyKlQpPD1BdD8wOjE7aWYoVCYmRm8odyxrLE0sQSk9PT0xLXBeeil7dmFyIFA9KHUraCkvMjt3PXMqTWF0aC5jb3MoUCksaz1zKk1hdGguc2luKFApLE09QT1udWxsfX1lbHNlIHc9az0wO2lmKGY+a3QmJihkPU1hdGgubWluKE1hdGguYWJzKGMtcykvMiwrci5hcHBseSh0aGlzLGFyZ3VtZW50cykpKT4uMDAxKXtnPXM8Y15wPzA6MTt2YXIgST1kLE89ZDtpZihmPEF0KXt2YXIgRD1udWxsPT1NP1t3LGtdOm51bGw9PWI/W3kseF06c2koW3kseF0sW00sQV0sW2IsX10sW3csa10pLFI9eS1EWzBdLEI9eC1EWzFdLEY9Yi1EWzBdLE49Xy1EWzFdLGo9MS9NYXRoLnNpbihNYXRoLmFjb3MoKFIqRitCKk4pLyhNYXRoLnNxcnQoUipSK0IqQikqTWF0aC5zcXJ0KEYqRitOKk4pKSkvMiksVj1NYXRoLnNxcnQoRFswXSpEWzBdK0RbMV0qRFsxXSk7Tz1NYXRoLm1pbihkLChzLVYpLyhqLTEpKSxJPU1hdGgubWluKGQsKGMtVikvKGorMSkpfWlmKG51bGwhPWIpe3ZhciBVPU5vKG51bGw9PU0/W3csa106W00sQV0sW3kseF0sYyxJLHApLHE9Tm8oW2IsX10sW3csa10sYyxJLHApO2Q9PT1JP0UucHVzaCgiTSIsVVswXSwiQSIsSSwiLCIsSSwiIDAgMCwiLGcsIiAiLFVbMV0sIkEiLGMsIiwiLGMsIiAwICIsMS1wXkZvKFVbMV1bMF0sVVsxXVsxXSxxWzFdWzBdLHFbMV1bMV0pLCIsIixwLCIgIixxWzFdLCJBIixJLCIsIixJLCIgMCAwLCIsZywiICIscVswXSk6RS5wdXNoKCJNIixVWzBdLCJBIixJLCIsIixJLCIgMCAxLCIsZywiICIscVswXSl9ZWxzZSBFLnB1c2goIk0iLHksIiwiLHgpO2lmKG51bGwhPU0pe3ZhciBIPU5vKFt5LHhdLFtNLEFdLHMsLU8scCksRz1ObyhbdyxrXSxudWxsPT1iP1t5LHhdOltiLF9dLHMsLU8scCk7ZD09PU8/RS5wdXNoKCJMIixHWzBdLCJBIixPLCIsIixPLCIgMCAwLCIsZywiICIsR1sxXSwiQSIscywiLCIscywiIDAgIixwXkZvKEdbMV1bMF0sR1sxXVsxXSxIWzFdWzBdLEhbMV1bMV0pLCIsIiwxLXAsIiAiLEhbMV0sIkEiLE8sIiwiLE8sIiAwIDAsIixnLCIgIixIWzBdKTpFLnB1c2goIkwiLEdbMF0sIkEiLE8sIiwiLE8sIiAwIDAsIixnLCIgIixIWzBdKX1lbHNlIEUucHVzaCgiTCIsdywiLCIsayl9ZWxzZSBFLnB1c2goIk0iLHksIiwiLHgpLG51bGwhPWImJkUucHVzaCgiQSIsYywiLCIsYywiIDAgIixDLCIsIixwLCIgIixiLCIsIixfKSxFLnB1c2goIkwiLHcsIiwiLGspLG51bGwhPU0mJkUucHVzaCgiQSIscywiLCIscywiIDAgIix6LCIsIiwxLXAsIiAiLE0sIiwiLEEpO3JldHVybiBFLnB1c2goIloiKSxFLmpvaW4oIiIpfWZ1bmN0aW9uIGwodCxlKXtyZXR1cm4iTTAsIit0KyJBIit0KyIsIit0KyIgMCAxLCIrZSsiIDAsIistdCsiQSIrdCsiLCIrdCsiIDAgMSwiK2UrIiAwLCIrdH1yZXR1cm4gcy5pbm5lclJhZGl1cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1tZShlKSxzKTp0fSxzLm91dGVyUmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPW1lKHQpLHMpOmV9LHMuY29ybmVyUmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW1lKHQpLHMpOnJ9LHMucGFkUmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQ9PVBvP1BvOm1lKHQpLHMpOm59LHMuc3RhcnRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1tZSh0KSxzKTppfSxzLmVuZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPW1lKHQpLHMpOmF9LHMucGFkQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89bWUodCkscyk6b30scy5jZW50cm9pZD1mdW5jdGlvbigpe3ZhciByPSgrdC5hcHBseSh0aGlzLGFyZ3VtZW50cykrICtlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkvMixuPSgraS5hcHBseSh0aGlzLGFyZ3VtZW50cykrICthLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkvMi1FdDtyZXR1cm5bTWF0aC5jb3MobikqcixNYXRoLnNpbihuKSpyXX0sc307dmFyIFBvPSJhdXRvIjtmdW5jdGlvbiBJbyh0KXtyZXR1cm4gdC5pbm5lclJhZGl1c31mdW5jdGlvbiBPbyh0KXtyZXR1cm4gdC5vdXRlclJhZGl1c31mdW5jdGlvbiBEbyh0KXtyZXR1cm4gdC5zdGFydEFuZ2xlfWZ1bmN0aW9uIFJvKHQpe3JldHVybiB0LmVuZEFuZ2xlfWZ1bmN0aW9uIEJvKHQpe3JldHVybiB0JiZ0LnBhZEFuZ2xlfWZ1bmN0aW9uIEZvKHQsZSxyLG4pe3JldHVybih0LXIpKmUtKGUtbikqdD4wPzA6MX1mdW5jdGlvbiBObyh0LGUscixuLGkpe3ZhciBhPXRbMF0tZVswXSxvPXRbMV0tZVsxXSxzPShpP246LW4pL01hdGguc3FydChhKmErbypvKSxsPXMqbyxjPS1zKmEsdT10WzBdK2wsaD10WzFdK2MsZj1lWzBdK2wscD1lWzFdK2MsZD0odStmKS8yLGc9KGgrcCkvMixtPWYtdSx2PXAtaCx5PW0qbSt2KnYseD1yLW4sYj11KnAtZipoLF89KHY8MD8tMToxKSpNYXRoLnNxcnQoTWF0aC5tYXgoMCx4KngqeS1iKmIpKSx3PShiKnYtbSpfKS95LGs9KC1iKm0tdipfKS95LE09KGIqdittKl8pL3ksQT0oLWIqbSt2Kl8pL3ksVD13LWQsUz1rLWcsRT1NLWQsQz1BLWc7cmV0dXJuIFQqVCtTKlM+RSpFK0MqQyYmKHc9TSxrPUEpLFtbdy1sLGstY10sW3cqci94LGsqci94XV19ZnVuY3Rpb24gam8odCl7dmFyIGU9ZWkscj1yaSxuPVdyLGk9VW8sYT1pLmtleSxvPS43O2Z1bmN0aW9uIHMoYSl7dmFyIHMsbD1bXSxjPVtdLHU9LTEsaD1hLmxlbmd0aCxmPW1lKGUpLHA9bWUocik7ZnVuY3Rpb24gZCgpe2wucHVzaCgiTSIsaSh0KGMpLG8pKX1mb3IoOysrdTxoOyluLmNhbGwodGhpcyxzPWFbdV0sdSk/Yy5wdXNoKFsrZi5jYWxsKHRoaXMscyx1KSwrcC5jYWxsKHRoaXMscyx1KV0pOmMubGVuZ3RoJiYoZCgpLGM9W10pO3JldHVybiBjLmxlbmd0aCYmZCgpLGwubGVuZ3RoP2wuam9pbigiIik6bnVsbH1yZXR1cm4gcy54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQscyk6ZX0scy55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQscyk6cn0scy5kZWZpbmVkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQscyk6bn0scy5pbnRlcnBvbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0iZnVuY3Rpb24iPT10eXBlb2YgdD9pPXQ6KGk9Vm8uZ2V0KHQpfHxVbykua2V5LHMpOmF9LHMudGVuc2lvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz10LHMpOm99LHN9dC5zdmcubGluZT1mdW5jdGlvbigpe3JldHVybiBqbyh6KX07dmFyIFZvPXQubWFwKHtsaW5lYXI6VW8sImxpbmVhci1jbG9zZWQiOnFvLHN0ZXA6ZnVuY3Rpb24odCl7dmFyIGU9MCxyPXQubGVuZ3RoLG49dFswXSxpPVtuWzBdLCIsIixuWzFdXTtmb3IoOysrZTxyOylpLnB1c2goIkgiLChuWzBdKyhuPXRbZV0pWzBdKS8yLCJWIixuWzFdKTtyPjEmJmkucHVzaCgiSCIsblswXSk7cmV0dXJuIGkuam9pbigiIil9LCJzdGVwLWJlZm9yZSI6SG8sInN0ZXAtYWZ0ZXIiOkdvLGJhc2lzOlhvLCJiYXNpcy1vcGVuIjpmdW5jdGlvbih0KXtpZih0Lmxlbmd0aDw0KXJldHVybiBVbyh0KTt2YXIgZSxyPVtdLG49LTEsaT10Lmxlbmd0aCxhPVswXSxvPVswXTtmb3IoOysrbjwzOyllPXRbbl0sYS5wdXNoKGVbMF0pLG8ucHVzaChlWzFdKTtyLnB1c2goWm8oS28sYSkrIiwiK1pvKEtvLG8pKSwtLW47Zm9yKDsrK248aTspZT10W25dLGEuc2hpZnQoKSxhLnB1c2goZVswXSksby5zaGlmdCgpLG8ucHVzaChlWzFdKSxRbyhyLGEsbyk7cmV0dXJuIHIuam9pbigiIil9LCJiYXNpcy1jbG9zZWQiOmZ1bmN0aW9uKHQpe3ZhciBlLHIsbj0tMSxpPXQubGVuZ3RoLGE9aSs0LG89W10scz1bXTtmb3IoOysrbjw0OylyPXRbbiVpXSxvLnB1c2goclswXSkscy5wdXNoKHJbMV0pO2U9W1pvKEtvLG8pLCIsIixabyhLbyxzKV0sLS1uO2Zvcig7KytuPGE7KXI9dFtuJWldLG8uc2hpZnQoKSxvLnB1c2goclswXSkscy5zaGlmdCgpLHMucHVzaChyWzFdKSxRbyhlLG8scyk7cmV0dXJuIGUuam9pbigiIil9LGJ1bmRsZTpmdW5jdGlvbih0LGUpe3ZhciByPXQubGVuZ3RoLTE7aWYocilmb3IodmFyIG4saSxhPXRbMF1bMF0sbz10WzBdWzFdLHM9dFtyXVswXS1hLGw9dFtyXVsxXS1vLGM9LTE7KytjPD1yOyluPXRbY10saT1jL3IsblswXT1lKm5bMF0rKDEtZSkqKGEraSpzKSxuWzFdPWUqblsxXSsoMS1lKSoobytpKmwpO3JldHVybiBYbyh0KX0sY2FyZGluYWw6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5sZW5ndGg8Mz9Vbyh0KTp0WzBdK1dvKHQsWW8odCxlKSl9LCJjYXJkaW5hbC1vcGVuIjpmdW5jdGlvbih0LGUpe3JldHVybiB0Lmxlbmd0aDw0P1VvKHQpOnRbMV0rV28odC5zbGljZSgxLC0xKSxZbyh0LGUpKX0sImNhcmRpbmFsLWNsb3NlZCI6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5sZW5ndGg8Mz9xbyh0KTp0WzBdK1dvKCh0LnB1c2godFswXSksdCksWW8oW3RbdC5sZW5ndGgtMl1dLmNvbmNhdCh0LFt0WzFdXSksZSkpfSxtb25vdG9uZTpmdW5jdGlvbih0KXtyZXR1cm4gdC5sZW5ndGg8Mz9Vbyh0KTp0WzBdK1dvKHQsZnVuY3Rpb24odCl7dmFyIGUscixuLGksYT1bXSxvPWZ1bmN0aW9uKHQpe3ZhciBlPTAscj10Lmxlbmd0aC0xLG49W10saT10WzBdLGE9dFsxXSxvPW5bMF09dHMoaSxhKTtmb3IoOysrZTxyOyluW2VdPShvKyhvPXRzKGk9YSxhPXRbZSsxXSkpKS8yO3JldHVybiBuW2VdPW8sbn0odCkscz0tMSxsPXQubGVuZ3RoLTE7Zm9yKDsrK3M8bDspZT10cyh0W3NdLHRbcysxXSkseShlKTxrdD9vW3NdPW9bcysxXT0wOihyPW9bc10vZSxuPW9bcysxXS9lLChpPXIqcituKm4pPjkmJihpPTMqZS9NYXRoLnNxcnQoaSksb1tzXT1pKnIsb1tzKzFdPWkqbikpO3M9LTE7Zm9yKDsrK3M8PWw7KWk9KHRbTWF0aC5taW4obCxzKzEpXVswXS10W01hdGgubWF4KDAscy0xKV1bMF0pLyg2KigxK29bc10qb1tzXSkpLGEucHVzaChbaXx8MCxvW3NdKml8fDBdKTtyZXR1cm4gYX0odCkpfX0pO2Z1bmN0aW9uIFVvKHQpe3JldHVybiB0Lmxlbmd0aD4xP3Quam9pbigiTCIpOnQrIloifWZ1bmN0aW9uIHFvKHQpe3JldHVybiB0LmpvaW4oIkwiKSsiWiJ9ZnVuY3Rpb24gSG8odCl7Zm9yKHZhciBlPTAscj10Lmxlbmd0aCxuPXRbMF0saT1bblswXSwiLCIsblsxXV07KytlPHI7KWkucHVzaCgiViIsKG49dFtlXSlbMV0sIkgiLG5bMF0pO3JldHVybiBpLmpvaW4oIiIpfWZ1bmN0aW9uIEdvKHQpe2Zvcih2YXIgZT0wLHI9dC5sZW5ndGgsbj10WzBdLGk9W25bMF0sIiwiLG5bMV1dOysrZTxyOylpLnB1c2goIkgiLChuPXRbZV0pWzBdLCJWIixuWzFdKTtyZXR1cm4gaS5qb2luKCIiKX1mdW5jdGlvbiBXbyh0LGUpe2lmKGUubGVuZ3RoPDF8fHQubGVuZ3RoIT1lLmxlbmd0aCYmdC5sZW5ndGghPWUubGVuZ3RoKzIpcmV0dXJuIFVvKHQpO3ZhciByPXQubGVuZ3RoIT1lLmxlbmd0aCxuPSIiLGk9dFswXSxhPXRbMV0sbz1lWzBdLHM9byxsPTE7aWYociYmKG4rPSJRIisoYVswXS0yKm9bMF0vMykrIiwiKyhhWzFdLTIqb1sxXS8zKSsiLCIrYVswXSsiLCIrYVsxXSxpPXRbMV0sbD0yKSxlLmxlbmd0aD4xKXtzPWVbMV0sYT10W2xdLGwrKyxuKz0iQyIrKGlbMF0rb1swXSkrIiwiKyhpWzFdK29bMV0pKyIsIisoYVswXS1zWzBdKSsiLCIrKGFbMV0tc1sxXSkrIiwiK2FbMF0rIiwiK2FbMV07Zm9yKHZhciBjPTI7YzxlLmxlbmd0aDtjKyssbCsrKWE9dFtsXSxzPWVbY10sbis9IlMiKyhhWzBdLXNbMF0pKyIsIisoYVsxXS1zWzFdKSsiLCIrYVswXSsiLCIrYVsxXX1pZihyKXt2YXIgdT10W2xdO24rPSJRIisoYVswXSsyKnNbMF0vMykrIiwiKyhhWzFdKzIqc1sxXS8zKSsiLCIrdVswXSsiLCIrdVsxXX1yZXR1cm4gbn1mdW5jdGlvbiBZbyh0LGUpe2Zvcih2YXIgcixuPVtdLGk9KDEtZSkvMixhPXRbMF0sbz10WzFdLHM9MSxsPXQubGVuZ3RoOysrczxsOylyPWEsYT1vLG89dFtzXSxuLnB1c2goW2kqKG9bMF0tclswXSksaSoob1sxXS1yWzFdKV0pO3JldHVybiBufWZ1bmN0aW9uIFhvKHQpe2lmKHQubGVuZ3RoPDMpcmV0dXJuIFVvKHQpO3ZhciBlPTEscj10Lmxlbmd0aCxuPXRbMF0saT1uWzBdLGE9blsxXSxvPVtpLGksaSwobj10WzFdKVswXV0scz1bYSxhLGEsblsxXV0sbD1baSwiLCIsYSwiTCIsWm8oS28sbyksIiwiLFpvKEtvLHMpXTtmb3IodC5wdXNoKHRbci0xXSk7KytlPD1yOyluPXRbZV0sby5zaGlmdCgpLG8ucHVzaChuWzBdKSxzLnNoaWZ0KCkscy5wdXNoKG5bMV0pLFFvKGwsbyxzKTtyZXR1cm4gdC5wb3AoKSxsLnB1c2goIkwiLG4pLGwuam9pbigiIil9ZnVuY3Rpb24gWm8odCxlKXtyZXR1cm4gdFswXSplWzBdK3RbMV0qZVsxXSt0WzJdKmVbMl0rdFszXSplWzNdfVZvLmZvckVhY2goZnVuY3Rpb24odCxlKXtlLmtleT10LGUuY2xvc2VkPS8tY2xvc2VkJC8udGVzdCh0KX0pO3ZhciAkbz1bMCwyLzMsMS8zLDBdLEpvPVswLDEvMywyLzMsMF0sS289WzAsMS82LDIvMywxLzZdO2Z1bmN0aW9uIFFvKHQsZSxyKXt0LnB1c2goIkMiLFpvKCRvLGUpLCIsIixabygkbyxyKSwiLCIsWm8oSm8sZSksIiwiLFpvKEpvLHIpLCIsIixabyhLbyxlKSwiLCIsWm8oS28scikpfWZ1bmN0aW9uIHRzKHQsZSl7cmV0dXJuKGVbMV0tdFsxXSkvKGVbMF0tdFswXSl9ZnVuY3Rpb24gZXModCl7Zm9yKHZhciBlLHIsbixpPS0xLGE9dC5sZW5ndGg7KytpPGE7KXI9KGU9dFtpXSlbMF0sbj1lWzFdLUV0LGVbMF09cipNYXRoLmNvcyhuKSxlWzFdPXIqTWF0aC5zaW4obik7cmV0dXJuIHR9ZnVuY3Rpb24gcnModCl7dmFyIGU9ZWkscj1laSxuPTAsaT1yaSxhPVdyLG89VW8scz1vLmtleSxsPW8sYz0iTCIsdT0uNztmdW5jdGlvbiBoKHMpe3ZhciBoLGYscCxkPVtdLGc9W10sbT1bXSx2PS0xLHk9cy5sZW5ndGgseD1tZShlKSxiPW1lKG4pLF89ZT09PXI/ZnVuY3Rpb24oKXtyZXR1cm4gZn06bWUociksdz1uPT09aT9mdW5jdGlvbigpe3JldHVybiBwfTptZShpKTtmdW5jdGlvbiBrKCl7ZC5wdXNoKCJNIixvKHQobSksdSksYyxsKHQoZy5yZXZlcnNlKCkpLHUpLCJaIil9Zm9yKDsrK3Y8eTspYS5jYWxsKHRoaXMsaD1zW3ZdLHYpPyhnLnB1c2goW2Y9K3guY2FsbCh0aGlzLGgsdikscD0rYi5jYWxsKHRoaXMsaCx2KV0pLG0ucHVzaChbK18uY2FsbCh0aGlzLGgsdiksK3cuY2FsbCh0aGlzLGgsdildKSk6Zy5sZW5ndGgmJihrKCksZz1bXSxtPVtdKTtyZXR1cm4gZy5sZW5ndGgmJmsoKSxkLmxlbmd0aD9kLmpvaW4oIiIpOm51bGx9cmV0dXJuIGgueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1yPXQsaCk6cn0saC54MD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LGgpOmV9LGgueDE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxoKTpyfSxoLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49aT10LGgpOml9LGgueTA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxoKTpufSxoLnkxPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQsaCk6aX0saC5kZWZpbmVkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXQsaCk6YX0saC5pbnRlcnBvbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0iZnVuY3Rpb24iPT10eXBlb2YgdD9vPXQ6KG89Vm8uZ2V0KHQpfHxVbykua2V5LGw9by5yZXZlcnNlfHxvLGM9by5jbG9zZWQ/Ik0iOiJMIixoKTpzfSxoLnRlbnNpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9dCxoKTp1fSxofWZ1bmN0aW9uIG5zKHQpe3JldHVybiB0LnJhZGl1c31mdW5jdGlvbiBpcyh0KXtyZXR1cm5bdC54LHQueV19ZnVuY3Rpb24gYXMoKXtyZXR1cm4gNjR9ZnVuY3Rpb24gb3MoKXtyZXR1cm4iY2lyY2xlIn1mdW5jdGlvbiBzcyh0KXt2YXIgZT1NYXRoLnNxcnQodC9BdCk7cmV0dXJuIk0wLCIrZSsiQSIrZSsiLCIrZSsiIDAgMSwxIDAsIistZSsiQSIrZSsiLCIrZSsiIDAgMSwxIDAsIitlKyJaIn10LnN2Zy5saW5lLnJhZGlhbD1mdW5jdGlvbigpe3ZhciB0PWpvKGVzKTtyZXR1cm4gdC5yYWRpdXM9dC54LGRlbGV0ZSB0LngsdC5hbmdsZT10LnksZGVsZXRlIHQueSx0fSxIby5yZXZlcnNlPUdvLEdvLnJldmVyc2U9SG8sdC5zdmcuYXJlYT1mdW5jdGlvbigpe3JldHVybiBycyh6KX0sdC5zdmcuYXJlYS5yYWRpYWw9ZnVuY3Rpb24oKXt2YXIgdD1ycyhlcyk7cmV0dXJuIHQucmFkaXVzPXQueCxkZWxldGUgdC54LHQuaW5uZXJSYWRpdXM9dC54MCxkZWxldGUgdC54MCx0Lm91dGVyUmFkaXVzPXQueDEsZGVsZXRlIHQueDEsdC5hbmdsZT10LnksZGVsZXRlIHQueSx0LnN0YXJ0QW5nbGU9dC55MCxkZWxldGUgdC55MCx0LmVuZEFuZ2xlPXQueTEsZGVsZXRlIHQueTEsdH0sdC5zdmcuY2hvcmQ9ZnVuY3Rpb24oKXt2YXIgdD1WbixlPVVuLHI9bnMsbj1EbyxpPVJvO2Z1bmN0aW9uIGEocixuKXt2YXIgaSxhLGM9byh0aGlzLHQscixuKSx1PW8odGhpcyxlLHIsbik7cmV0dXJuIk0iK2MucDArcyhjLnIsYy5wMSxjLmExLWMuYTApKyhhPXUsKGk9YykuYTA9PWEuYTAmJmkuYTE9PWEuYTE/bChjLnIsYy5wMSxjLnIsYy5wMCk6bChjLnIsYy5wMSx1LnIsdS5wMCkrcyh1LnIsdS5wMSx1LmExLXUuYTApK2wodS5yLHUucDEsYy5yLGMucDApKSsiWiJ9ZnVuY3Rpb24gbyh0LGUsYSxvKXt2YXIgcz1lLmNhbGwodCxhLG8pLGw9ci5jYWxsKHQscyxvKSxjPW4uY2FsbCh0LHMsbyktRXQsdT1pLmNhbGwodCxzLG8pLUV0O3JldHVybntyOmwsYTA6YyxhMTp1LHAwOltsKk1hdGguY29zKGMpLGwqTWF0aC5zaW4oYyldLHAxOltsKk1hdGguY29zKHUpLGwqTWF0aC5zaW4odSldfX1mdW5jdGlvbiBzKHQsZSxyKXtyZXR1cm4iQSIrdCsiLCIrdCsiIDAgIisgKyhyPkF0KSsiLDEgIitlfWZ1bmN0aW9uIGwodCxlLHIsbil7cmV0dXJuIlEgMCwwICIrbn1yZXR1cm4gYS5yYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bWUodCksYSk6cn0sYS5zb3VyY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9bWUoZSksYSk6dH0sYS50YXJnZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bWUodCksYSk6ZX0sYS5zdGFydEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPW1lKHQpLGEpOm59LGEuZW5kQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9bWUodCksYSk6aX0sYX0sdC5zdmcuZGlhZ29uYWw9ZnVuY3Rpb24oKXt2YXIgdD1WbixlPVVuLHI9aXM7ZnVuY3Rpb24gbihuLGkpe3ZhciBhPXQuY2FsbCh0aGlzLG4saSksbz1lLmNhbGwodGhpcyxuLGkpLHM9KGEueStvLnkpLzIsbD1bYSx7eDphLngseTpzfSx7eDpvLngseTpzfSxvXTtyZXR1cm4iTSIrKGw9bC5tYXAocikpWzBdKyJDIitsWzFdKyIgIitsWzJdKyIgIitsWzNdfXJldHVybiBuLnNvdXJjZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1tZShlKSxuKTp0fSxuLnRhcmdldD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1tZSh0KSxuKTplfSxuLnByb2plY3Rpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxuKTpyfSxufSx0LnN2Zy5kaWFnb25hbC5yYWRpYWw9ZnVuY3Rpb24oKXt2YXIgZT10LnN2Zy5kaWFnb25hbCgpLHI9aXMsbj1lLnByb2plY3Rpb247cmV0dXJuIGUucHJvamVjdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9uKGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpLHI9ZVswXSxuPWVbMV0tRXQ7cmV0dXJuW3IqTWF0aC5jb3MobikscipNYXRoLnNpbihuKV19fShyPXQpKTpyfSxlfSx0LnN2Zy5zeW1ib2w9ZnVuY3Rpb24oKXt2YXIgdD1vcyxlPWFzO2Z1bmN0aW9uIHIocixuKXtyZXR1cm4obHMuZ2V0KHQuY2FsbCh0aGlzLHIsbikpfHxzcykoZS5jYWxsKHRoaXMscixuKSl9cmV0dXJuIHIudHlwZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1tZShlKSxyKTp0fSxyLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bWUodCkscik6ZX0scn07dmFyIGxzPXQubWFwKHtjaXJjbGU6c3MsY3Jvc3M6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5zcXJ0KHQvNSkvMjtyZXR1cm4iTSIrLTMqZSsiLCIrLWUrIkgiKy1lKyJWIistMyplKyJIIitlKyJWIistZSsiSCIrMyplKyJWIitlKyJIIitlKyJWIiszKmUrIkgiKy1lKyJWIitlKyJIIistMyplKyJaIn0sZGlhbW9uZDpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLnNxcnQodC8oMip1cykpLHI9ZSp1cztyZXR1cm4iTTAsIistZSsiTCIrcisiLDAgMCwiK2UrIiAiKy1yKyIsMFoifSxzcXVhcmU6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5zcXJ0KHQpLzI7cmV0dXJuIk0iKy1lKyIsIistZSsiTCIrZSsiLCIrLWUrIiAiK2UrIiwiK2UrIiAiKy1lKyIsIitlKyJaIn0sInRyaWFuZ2xlLWRvd24iOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguc3FydCh0L2NzKSxyPWUqY3MvMjtyZXR1cm4iTTAsIityKyJMIitlKyIsIistcisiICIrLWUrIiwiKy1yKyJaIn0sInRyaWFuZ2xlLXVwIjpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLnNxcnQodC9jcykscj1lKmNzLzI7cmV0dXJuIk0wLCIrLXIrIkwiK2UrIiwiK3IrIiAiKy1lKyIsIityKyJaIn19KTt0LnN2Zy5zeW1ib2xUeXBlcz1scy5rZXlzKCk7dmFyIGNzPU1hdGguc3FydCgzKSx1cz1NYXRoLnRhbigzMCpDdCk7WS50cmFuc2l0aW9uPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyLG49ZHN8fCsrdnMsaT1icyh0KSxhPVtdLG89Z3N8fHt0aW1lOkRhdGUubm93KCksZWFzZTppYSxkZWxheTowLGR1cmF0aW9uOjI1MH0scz0tMSxsPXRoaXMubGVuZ3RoOysrczxsOyl7YS5wdXNoKGU9W10pO2Zvcih2YXIgYz10aGlzW3NdLHU9LTEsaD1jLmxlbmd0aDsrK3U8aDspKHI9Y1t1XSkmJl9zKHIsdSxpLG4sbyksZS5wdXNoKHIpfXJldHVybiBwcyhhLGksbil9LFkuaW50ZXJydXB0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmVhY2gobnVsbD09dD9oczpmcyhicyh0KSkpfTt2YXIgaHM9ZnMoYnMoKSk7ZnVuY3Rpb24gZnModCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGUscixuOyhlPXRoaXNbdF0pJiYobj1lW3I9ZS5hY3RpdmVdKSYmKG4udGltZXIuYz1udWxsLG4udGltZXIudD1OYU4sLS1lLmNvdW50P2RlbGV0ZSBlW3JdOmRlbGV0ZSB0aGlzW3RdLGUuYWN0aXZlKz0uNSxuLmV2ZW50JiZuLmV2ZW50LmludGVycnVwdC5jYWxsKHRoaXMsdGhpcy5fX2RhdGFfXyxuLmluZGV4KSl9fWZ1bmN0aW9uIHBzKHQsZSxyKXtyZXR1cm4gVSh0LG1zKSx0Lm5hbWVzcGFjZT1lLHQuaWQ9cix0fXZhciBkcyxncyxtcz1bXSx2cz0wO2Z1bmN0aW9uIHlzKHQsZSxyLG4pe3ZhciBpPXQuaWQsYT10Lm5hbWVzcGFjZTtyZXR1cm4gdXQodCwiZnVuY3Rpb24iPT10eXBlb2Ygcj9mdW5jdGlvbih0LG8scyl7dFthXVtpXS50d2Vlbi5zZXQoZSxuKHIuY2FsbCh0LHQuX19kYXRhX18sbyxzKSkpfToocj1uKHIpLGZ1bmN0aW9uKHQpe3RbYV1baV0udHdlZW4uc2V0KGUscil9KSl9ZnVuY3Rpb24geHModCl7cmV0dXJuIG51bGw9PXQmJih0PSIiKSxmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9dH19ZnVuY3Rpb24gYnModCl7cmV0dXJuIG51bGw9PXQ/Il9fdHJhbnNpdGlvbl9fIjoiX190cmFuc2l0aW9uXyIrdCsiX18ifWZ1bmN0aW9uIF9zKHQsZSxyLG4saSl7dmFyIGEsbyxzLGwsYyx1PXRbcl18fCh0W3JdPXthY3RpdmU6MCxjb3VudDowfSksaD11W25dO2Z1bmN0aW9uIGYocil7dmFyIGk9dS5hY3RpdmUsZj11W2ldO2Zvcih2YXIgZCBpbiBmJiYoZi50aW1lci5jPW51bGwsZi50aW1lci50PU5hTiwtLXUuY291bnQsZGVsZXRlIHVbaV0sZi5ldmVudCYmZi5ldmVudC5pbnRlcnJ1cHQuY2FsbCh0LHQuX19kYXRhX18sZi5pbmRleCkpLHUpaWYoK2Q8bil7dmFyIGc9dVtkXTtnLnRpbWVyLmM9bnVsbCxnLnRpbWVyLnQ9TmFOLC0tdS5jb3VudCxkZWxldGUgdVtkXX1vLmM9cCxNZShmdW5jdGlvbigpe3JldHVybiBvLmMmJnAocnx8MSkmJihvLmM9bnVsbCxvLnQ9TmFOKSwxfSwwLGEpLHUuYWN0aXZlPW4saC5ldmVudCYmaC5ldmVudC5zdGFydC5jYWxsKHQsdC5fX2RhdGFfXyxlKSxjPVtdLGgudHdlZW4uZm9yRWFjaChmdW5jdGlvbihyLG4peyhuPW4uY2FsbCh0LHQuX19kYXRhX18sZSkpJiZjLnB1c2gobil9KSxsPWguZWFzZSxzPWguZHVyYXRpb259ZnVuY3Rpb24gcChpKXtmb3IodmFyIGE9aS9zLG89bChhKSxmPWMubGVuZ3RoO2Y+MDspY1stLWZdLmNhbGwodCxvKTtpZihhPj0xKXJldHVybiBoLmV2ZW50JiZoLmV2ZW50LmVuZC5jYWxsKHQsdC5fX2RhdGFfXyxlKSwtLXUuY291bnQ/ZGVsZXRlIHVbbl06ZGVsZXRlIHRbcl0sMX1ofHwoYT1pLnRpbWUsbz1NZShmdW5jdGlvbih0KXt2YXIgZT1oLmRlbGF5O2lmKG8udD1lK2EsZTw9dClyZXR1cm4gZih0LWUpO28uYz1mfSwwLGEpLGg9dVtuXT17dHdlZW46bmV3IGIsdGltZTphLHRpbWVyOm8sZGVsYXk6aS5kZWxheSxkdXJhdGlvbjppLmR1cmF0aW9uLGVhc2U6aS5lYXNlLGluZGV4OmV9LGk9bnVsbCwrK3UuY291bnQpfW1zLmNhbGw9WS5jYWxsLG1zLmVtcHR5PVkuZW1wdHksbXMubm9kZT1ZLm5vZGUsbXMuc2l6ZT1ZLnNpemUsdC50cmFuc2l0aW9uPWZ1bmN0aW9uKGUscil7cmV0dXJuIGUmJmUudHJhbnNpdGlvbj9kcz9lLnRyYW5zaXRpb24ocik6ZTp0LnNlbGVjdGlvbigpLnRyYW5zaXRpb24oZSl9LHQudHJhbnNpdGlvbi5wcm90b3R5cGU9bXMsbXMuc2VsZWN0PWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpPXRoaXMuaWQsYT10aGlzLm5hbWVzcGFjZSxvPVtdO3Q9WCh0KTtmb3IodmFyIHM9LTEsbD10aGlzLmxlbmd0aDsrK3M8bDspe28ucHVzaChlPVtdKTtmb3IodmFyIGM9dGhpc1tzXSx1PS0xLGg9Yy5sZW5ndGg7Kyt1PGg7KShuPWNbdV0pJiYocj10LmNhbGwobixuLl9fZGF0YV9fLHUscykpPygiX19kYXRhX18iaW4gbiYmKHIuX19kYXRhX189bi5fX2RhdGFfXyksX3Mocix1LGEsaSxuW2FdW2ldKSxlLnB1c2gocikpOmUucHVzaChudWxsKX1yZXR1cm4gcHMobyxhLGkpfSxtcy5zZWxlY3RBbGw9ZnVuY3Rpb24odCl7dmFyIGUscixuLGksYSxvPXRoaXMuaWQscz10aGlzLm5hbWVzcGFjZSxsPVtdO3Q9Wih0KTtmb3IodmFyIGM9LTEsdT10aGlzLmxlbmd0aDsrK2M8dTspZm9yKHZhciBoPXRoaXNbY10sZj0tMSxwPWgubGVuZ3RoOysrZjxwOylpZihuPWhbZl0pe2E9bltzXVtvXSxyPXQuY2FsbChuLG4uX19kYXRhX18sZixjKSxsLnB1c2goZT1bXSk7Zm9yKHZhciBkPS0xLGc9ci5sZW5ndGg7KytkPGc7KShpPXJbZF0pJiZfcyhpLGQscyxvLGEpLGUucHVzaChpKX1yZXR1cm4gcHMobCxzLG8pfSxtcy5maWx0ZXI9ZnVuY3Rpb24odCl7dmFyIGUscixuPVtdOyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1jdCh0KSk7Zm9yKHZhciBpPTAsYT10aGlzLmxlbmd0aDtpPGE7aSsrKXtuLnB1c2goZT1bXSk7Zm9yKHZhciBvLHM9MCxsPShvPXRoaXNbaV0pLmxlbmd0aDtzPGw7cysrKShyPW9bc10pJiZ0LmNhbGwocixyLl9fZGF0YV9fLHMsaSkmJmUucHVzaChyKX1yZXR1cm4gcHMobix0aGlzLm5hbWVzcGFjZSx0aGlzLmlkKX0sbXMudHdlZW49ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmlkLG49dGhpcy5uYW1lc3BhY2U7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj90aGlzLm5vZGUoKVtuXVtyXS50d2Vlbi5nZXQodCk6dXQodGhpcyxudWxsPT1lP2Z1bmN0aW9uKGUpe2Vbbl1bcl0udHdlZW4ucmVtb3ZlKHQpfTpmdW5jdGlvbihpKXtpW25dW3JdLnR3ZWVuLnNldCh0LGUpfSl9LG1zLmF0dHI9ZnVuY3Rpb24oZSxyKXtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2ZvcihyIGluIGUpdGhpcy5hdHRyKHIsZVtyXSk7cmV0dXJuIHRoaXN9dmFyIG49InRyYW5zZm9ybSI9PWU/Z2E6WmksaT10Lm5zLnF1YWxpZnkoZSk7ZnVuY3Rpb24gYSgpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGkpfWZ1bmN0aW9uIG8oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGkuc3BhY2UsaS5sb2NhbCl9cmV0dXJuIHlzKHRoaXMsImF0dHIuIitlLHIsaS5sb2NhbD9mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD9vOih0Kz0iIixmdW5jdGlvbigpe3ZhciBlLHI9dGhpcy5nZXRBdHRyaWJ1dGVOUyhpLnNwYWNlLGkubG9jYWwpO3JldHVybiByIT09dCYmKGU9bihyLHQpLGZ1bmN0aW9uKHQpe3RoaXMuc2V0QXR0cmlidXRlTlMoaS5zcGFjZSxpLmxvY2FsLGUodCkpfSl9KX06ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/YToodCs9IiIsZnVuY3Rpb24oKXt2YXIgZSxyPXRoaXMuZ2V0QXR0cmlidXRlKGkpO3JldHVybiByIT09dCYmKGU9bihyLHQpLGZ1bmN0aW9uKHQpe3RoaXMuc2V0QXR0cmlidXRlKGksZSh0KSl9KX0pfSl9LG1zLmF0dHJUd2Vlbj1mdW5jdGlvbihlLHIpe3ZhciBuPXQubnMucXVhbGlmeShlKTtyZXR1cm4gdGhpcy50d2VlbigiYXR0ci4iK2Usbi5sb2NhbD9mdW5jdGlvbih0LGUpe3ZhciBpPXIuY2FsbCh0aGlzLHQsZSx0aGlzLmdldEF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCkpO3JldHVybiBpJiZmdW5jdGlvbih0KXt0aGlzLnNldEF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCxpKHQpKX19OmZ1bmN0aW9uKHQsZSl7dmFyIGk9ci5jYWxsKHRoaXMsdCxlLHRoaXMuZ2V0QXR0cmlidXRlKG4pKTtyZXR1cm4gaSYmZnVuY3Rpb24odCl7dGhpcy5zZXRBdHRyaWJ1dGUobixpKHQpKX19KX0sbXMuc3R5bGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg7aWYobjwzKXtpZigic3RyaW5nIiE9dHlwZW9mIHQpe2ZvcihyIGluIG48MiYmKGU9IiIpLHQpdGhpcy5zdHlsZShyLHRbcl0sZSk7cmV0dXJuIHRoaXN9cj0iIn1mdW5jdGlvbiBpKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KX1yZXR1cm4geXModGhpcywic3R5bGUuIit0LGUsZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWU/aTooZSs9IiIsZnVuY3Rpb24oKXt2YXIgbixpPW8odGhpcykuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLG51bGwpLmdldFByb3BlcnR5VmFsdWUodCk7cmV0dXJuIGkhPT1lJiYobj1aaShpLGUpLGZ1bmN0aW9uKGUpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxuKGUpLHIpfSl9KX0pfSxtcy5zdHlsZVR3ZWVuPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzJiYocj0iIiksdGhpcy50d2Vlbigic3R5bGUuIit0LGZ1bmN0aW9uKG4saSl7dmFyIGE9ZS5jYWxsKHRoaXMsbixpLG8odGhpcykuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLG51bGwpLmdldFByb3BlcnR5VmFsdWUodCkpO3JldHVybiBhJiZmdW5jdGlvbihlKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KHQsYShlKSxyKX19KX0sbXMudGV4dD1mdW5jdGlvbih0KXtyZXR1cm4geXModGhpcywidGV4dCIsdCx4cyl9LG1zLnJlbW92ZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMubmFtZXNwYWNlO3JldHVybiB0aGlzLmVhY2goImVuZC50cmFuc2l0aW9uIixmdW5jdGlvbigpe3ZhciBlO3RoaXNbdF0uY291bnQ8MiYmKGU9dGhpcy5wYXJlbnROb2RlKSYmZS5yZW1vdmVDaGlsZCh0aGlzKX0pfSxtcy5lYXNlPWZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuaWQsbj10aGlzLm5hbWVzcGFjZTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwxP3RoaXMubm9kZSgpW25dW3JdLmVhc2U6KCJmdW5jdGlvbiIhPXR5cGVvZiBlJiYoZT10LmVhc2UuYXBwbHkodCxhcmd1bWVudHMpKSx1dCh0aGlzLGZ1bmN0aW9uKHQpe3Rbbl1bcl0uZWFzZT1lfSkpfSxtcy5kZWxheT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmlkLHI9dGhpcy5uYW1lc3BhY2U7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8MT90aGlzLm5vZGUoKVtyXVtlXS5kZWxheTp1dCh0aGlzLCJmdW5jdGlvbiI9PXR5cGVvZiB0P2Z1bmN0aW9uKG4saSxhKXtuW3JdW2VdLmRlbGF5PSt0LmNhbGwobixuLl9fZGF0YV9fLGksYSl9Oih0PSt0LGZ1bmN0aW9uKG4pe25bcl1bZV0uZGVsYXk9dH0pKX0sbXMuZHVyYXRpb249ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5pZCxyPXRoaXMubmFtZXNwYWNlO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDE/dGhpcy5ub2RlKClbcl1bZV0uZHVyYXRpb246dXQodGhpcywiZnVuY3Rpb24iPT10eXBlb2YgdD9mdW5jdGlvbihuLGksYSl7bltyXVtlXS5kdXJhdGlvbj1NYXRoLm1heCgxLHQuY2FsbChuLG4uX19kYXRhX18saSxhKSl9Oih0PU1hdGgubWF4KDEsdCksZnVuY3Rpb24obil7bltyXVtlXS5kdXJhdGlvbj10fSkpfSxtcy5lYWNoPWZ1bmN0aW9uKGUscil7dmFyIG49dGhpcy5pZCxpPXRoaXMubmFtZXNwYWNlO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7dmFyIGE9Z3Msbz1kczt0cnl7ZHM9bix1dCh0aGlzLGZ1bmN0aW9uKHQscixhKXtncz10W2ldW25dLGUuY2FsbCh0LHQuX19kYXRhX18scixhKX0pfWZpbmFsbHl7Z3M9YSxkcz1vfX1lbHNlIHV0KHRoaXMsZnVuY3Rpb24oYSl7dmFyIG89YVtpXVtuXTsoby5ldmVudHx8KG8uZXZlbnQ9dC5kaXNwYXRjaCgic3RhcnQiLCJlbmQiLCJpbnRlcnJ1cHQiKSkpLm9uKGUscil9KTtyZXR1cm4gdGhpc30sbXMudHJhbnNpdGlvbj1mdW5jdGlvbigpe2Zvcih2YXIgdCxlLHIsbj10aGlzLmlkLGk9Kyt2cyxhPXRoaXMubmFtZXNwYWNlLG89W10scz0wLGw9dGhpcy5sZW5ndGg7czxsO3MrKyl7by5wdXNoKHQ9W10pO2Zvcih2YXIgYyx1PTAsaD0oYz10aGlzW3NdKS5sZW5ndGg7dTxoO3UrKykoZT1jW3VdKSYmX3MoZSx1LGEsaSx7dGltZToocj1lW2FdW25dKS50aW1lLGVhc2U6ci5lYXNlLGRlbGF5OnIuZGVsYXkrci5kdXJhdGlvbixkdXJhdGlvbjpyLmR1cmF0aW9ufSksdC5wdXNoKGUpfXJldHVybiBwcyhvLGEsaSl9LHQuc3ZnLmF4aXM9ZnVuY3Rpb24oKXt2YXIgZSxyPXQuc2NhbGUubGluZWFyKCksaT13cyxhPTYsbz02LHM9MyxsPVsxMF0sYz1udWxsO2Z1bmN0aW9uIHUobil7bi5lYWNoKGZ1bmN0aW9uKCl7dmFyIG4sdT10LnNlbGVjdCh0aGlzKSxoPXRoaXMuX19jaGFydF9ffHxyLGY9dGhpcy5fX2NoYXJ0X189ci5jb3B5KCkscD1udWxsPT1jP2YudGlja3M/Zi50aWNrcy5hcHBseShmLGwpOmYuZG9tYWluKCk6YyxkPW51bGw9PWU/Zi50aWNrRm9ybWF0P2YudGlja0Zvcm1hdC5hcHBseShmLGwpOno6ZSxnPXUuc2VsZWN0QWxsKCIudGljayIpLmRhdGEocCxmKSxtPWcuZW50ZXIoKS5pbnNlcnQoImciLCIuZG9tYWluIikuYXR0cigiY2xhc3MiLCJ0aWNrIikuc3R5bGUoIm9wYWNpdHkiLGt0KSx2PXQudHJhbnNpdGlvbihnLmV4aXQoKSkuc3R5bGUoIm9wYWNpdHkiLGt0KS5yZW1vdmUoKSx5PXQudHJhbnNpdGlvbihnLm9yZGVyKCkpLnN0eWxlKCJvcGFjaXR5IiwxKSx4PU1hdGgubWF4KGEsMCkrcyxiPXVvKGYpLF89dS5zZWxlY3RBbGwoIi5kb21haW4iKS5kYXRhKFswXSksdz0oXy5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiZG9tYWluIiksdC50cmFuc2l0aW9uKF8pKTttLmFwcGVuZCgibGluZSIpLG0uYXBwZW5kKCJ0ZXh0Iik7dmFyIGssTSxBLFQsUz1tLnNlbGVjdCgibGluZSIpLEU9eS5zZWxlY3QoImxpbmUiKSxDPWcuc2VsZWN0KCJ0ZXh0IikudGV4dChkKSxMPW0uc2VsZWN0KCJ0ZXh0IiksUD15LnNlbGVjdCgidGV4dCIpLEk9InRvcCI9PT1pfHwibGVmdCI9PT1pPy0xOjE7aWYoImJvdHRvbSI9PT1pfHwidG9wIj09PWk/KG49TXMsaz0ieCIsQT0ieSIsTT0ieDIiLFQ9InkyIixDLmF0dHIoImR5IixJPDA/IjBlbSI6Ii43MWVtIikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIiksdy5hdHRyKCJkIiwiTSIrYlswXSsiLCIrSSpvKyJWMEgiK2JbMV0rIlYiK0kqbykpOihuPUFzLGs9InkiLEE9IngiLE09InkyIixUPSJ4MiIsQy5hdHRyKCJkeSIsIi4zMmVtIikuc3R5bGUoInRleHQtYW5jaG9yIixJPDA/ImVuZCI6InN0YXJ0Iiksdy5hdHRyKCJkIiwiTSIrSSpvKyIsIitiWzBdKyJIMFYiK2JbMV0rIkgiK0kqbykpLFMuYXR0cihULEkqYSksTC5hdHRyKEEsSSp4KSxFLmF0dHIoTSwwKS5hdHRyKFQsSSphKSxQLmF0dHIoaywwKS5hdHRyKEEsSSp4KSxmLnJhbmdlQmFuZCl7dmFyIE89ZixEPU8ucmFuZ2VCYW5kKCkvMjtoPWY9ZnVuY3Rpb24odCl7cmV0dXJuIE8odCkrRH19ZWxzZSBoLnJhbmdlQmFuZD9oPWY6di5jYWxsKG4sZixoKTttLmNhbGwobixoLGYpLHkuY2FsbChuLGYsZil9KX1yZXR1cm4gdS5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LHUpOnJ9LHUub3JpZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQgaW4ga3M/dCsiIjp3cyx1KTppfSx1LnRpY2tzPWZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9bihhcmd1bWVudHMpLHUpOmx9LHUudGlja1ZhbHVlcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz10LHUpOmN9LHUudGlja0Zvcm1hdD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LHUpOmV9LHUudGlja1NpemU9ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aDtyZXR1cm4gZT8oYT0rdCxvPSthcmd1bWVudHNbZS0xXSx1KTphfSx1LmlubmVyVGlja1NpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9K3QsdSk6YX0sdS5vdXRlclRpY2tTaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSt0LHUpOm99LHUudGlja1BhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9K3QsdSk6c30sdS50aWNrU3ViZGl2aWRlPWZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGgmJnV9LHV9O3ZhciB3cz0iYm90dG9tIixrcz17dG9wOjEscmlnaHQ6MSxib3R0b206MSxsZWZ0OjF9O2Z1bmN0aW9uIE1zKHQsZSxyKXt0LmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24odCl7dmFyIG49ZSh0KTtyZXR1cm4idHJhbnNsYXRlKCIrKGlzRmluaXRlKG4pP246cih0KSkrIiwwKSJ9KX1mdW5jdGlvbiBBcyh0LGUscil7dC5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKHQpe3ZhciBuPWUodCk7cmV0dXJuInRyYW5zbGF0ZSgwLCIrKGlzRmluaXRlKG4pP246cih0KSkrIikifSl9dC5zdmcuYnJ1c2g9ZnVuY3Rpb24oKXt2YXIgZSxyLG49aihmLCJicnVzaHN0YXJ0IiwiYnJ1c2giLCJicnVzaGVuZCIpLGk9bnVsbCxhPW51bGwscz1bMCwwXSxsPVswLDBdLGM9ITAsdT0hMCxoPVNzWzBdO2Z1bmN0aW9uIGYoZSl7ZS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9dC5zZWxlY3QodGhpcykuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYWxsIikuc3R5bGUoIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvciIsInJnYmEoMCwwLDAsMCkiKS5vbigibW91c2Vkb3duLmJydXNoIixtKS5vbigidG91Y2hzdGFydC5icnVzaCIsbSkscj1lLnNlbGVjdEFsbCgiLmJhY2tncm91bmQiKS5kYXRhKFswXSk7ci5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwiYmFja2dyb3VuZCIpLnN0eWxlKCJ2aXNpYmlsaXR5IiwiaGlkZGVuIikuc3R5bGUoImN1cnNvciIsImNyb3NzaGFpciIpLGUuc2VsZWN0QWxsKCIuZXh0ZW50IikuZGF0YShbMF0pLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJleHRlbnQiKS5zdHlsZSgiY3Vyc29yIiwibW92ZSIpO3ZhciBuPWUuc2VsZWN0QWxsKCIucmVzaXplIikuZGF0YShoLHopO24uZXhpdCgpLnJlbW92ZSgpLG4uZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsZnVuY3Rpb24odCl7cmV0dXJuInJlc2l6ZSAiK3R9KS5zdHlsZSgiY3Vyc29yIixmdW5jdGlvbih0KXtyZXR1cm4gVHNbdF19KS5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IixmdW5jdGlvbih0KXtyZXR1cm4vW2V3XSQvLnRlc3QodCk/LTM6bnVsbH0pLmF0dHIoInkiLGZ1bmN0aW9uKHQpe3JldHVybi9eW25zXS8udGVzdCh0KT8tMzpudWxsfSkuYXR0cigid2lkdGgiLDYpLmF0dHIoImhlaWdodCIsNikuc3R5bGUoInZpc2liaWxpdHkiLCJoaWRkZW4iKSxuLnN0eWxlKCJkaXNwbGF5IixmLmVtcHR5KCk/Im5vbmUiOm51bGwpO3ZhciBvLHM9dC50cmFuc2l0aW9uKGUpLGw9dC50cmFuc2l0aW9uKHIpO2kmJihvPXVvKGkpLGwuYXR0cigieCIsb1swXSkuYXR0cigid2lkdGgiLG9bMV0tb1swXSksZChzKSksYSYmKG89dW8oYSksbC5hdHRyKCJ5IixvWzBdKS5hdHRyKCJoZWlnaHQiLG9bMV0tb1swXSksZyhzKSkscChzKX0pfWZ1bmN0aW9uIHAodCl7dC5zZWxlY3RBbGwoIi5yZXNpemUiKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKHQpe3JldHVybiJ0cmFuc2xhdGUoIitzWysvZSQvLnRlc3QodCldKyIsIitsWysvXnMvLnRlc3QodCldKyIpIn0pfWZ1bmN0aW9uIGQodCl7dC5zZWxlY3QoIi5leHRlbnQiKS5hdHRyKCJ4IixzWzBdKSx0LnNlbGVjdEFsbCgiLmV4dGVudCwubj5yZWN0LC5zPnJlY3QiKS5hdHRyKCJ3aWR0aCIsc1sxXS1zWzBdKX1mdW5jdGlvbiBnKHQpe3Quc2VsZWN0KCIuZXh0ZW50IikuYXR0cigieSIsbFswXSksdC5zZWxlY3RBbGwoIi5leHRlbnQsLmU+cmVjdCwudz5yZWN0IikuYXR0cigiaGVpZ2h0IixsWzFdLWxbMF0pfWZ1bmN0aW9uIG0oKXt2YXIgaCxtLHY9dGhpcyx5PXQuc2VsZWN0KHQuZXZlbnQudGFyZ2V0KSx4PW4ub2Yodixhcmd1bWVudHMpLGI9dC5zZWxlY3QodiksXz15LmRhdHVtKCksdz0hL14obnxzKSQvLnRlc3QoXykmJmksaz0hL14oZXx3KSQvLnRlc3QoXykmJmEsTT15LmNsYXNzZWQoImV4dGVudCIpLEE9eHQodiksVD10Lm1vdXNlKHYpLFM9dC5zZWxlY3Qobyh2KSkub24oImtleWRvd24uYnJ1c2giLGZ1bmN0aW9uKCl7MzI9PXQuZXZlbnQua2V5Q29kZSYmKE18fChoPW51bGwsVFswXS09c1sxXSxUWzFdLT1sWzFdLE09MiksRigpKX0pLm9uKCJrZXl1cC5icnVzaCIsZnVuY3Rpb24oKXszMj09dC5ldmVudC5rZXlDb2RlJiYyPT1NJiYoVFswXSs9c1sxXSxUWzFdKz1sWzFdLE09MCxGKCkpfSk7aWYodC5ldmVudC5jaGFuZ2VkVG91Y2hlcz9TLm9uKCJ0b3VjaG1vdmUuYnJ1c2giLEwpLm9uKCJ0b3VjaGVuZC5icnVzaCIsUCk6Uy5vbigibW91c2Vtb3ZlLmJydXNoIixMKS5vbigibW91c2V1cC5icnVzaCIsUCksYi5pbnRlcnJ1cHQoKS5zZWxlY3RBbGwoIioiKS5pbnRlcnJ1cHQoKSxNKVRbMF09c1swXS1UWzBdLFRbMV09bFswXS1UWzFdO2Vsc2UgaWYoXyl7dmFyIEU9Ky93JC8udGVzdChfKSxDPSsvXm4vLnRlc3QoXyk7bT1bc1sxLUVdLVRbMF0sbFsxLUNdLVRbMV1dLFRbMF09c1tFXSxUWzFdPWxbQ119ZWxzZSB0LmV2ZW50LmFsdEtleSYmKGg9VC5zbGljZSgpKTtmdW5jdGlvbiBMKCl7dmFyIGU9dC5tb3VzZSh2KSxyPSExO20mJihlWzBdKz1tWzBdLGVbMV0rPW1bMV0pLE18fCh0LmV2ZW50LmFsdEtleT8oaHx8KGg9WyhzWzBdK3NbMV0pLzIsKGxbMF0rbFsxXSkvMl0pLFRbMF09c1srKGVbMF08aFswXSldLFRbMV09bFsrKGVbMV08aFsxXSldKTpoPW51bGwpLHcmJnooZSxpLDApJiYoZChiKSxyPSEwKSxrJiZ6KGUsYSwxKSYmKGcoYikscj0hMCksciYmKHAoYikseCh7dHlwZToiYnJ1c2giLG1vZGU6TT8ibW92ZSI6InJlc2l6ZSJ9KSl9ZnVuY3Rpb24geih0LG4saSl7dmFyIGEsbyxmPXVvKG4pLHA9ZlswXSxkPWZbMV0sZz1UW2ldLG09aT9sOnMsdj1tWzFdLW1bMF07aWYoTSYmKHAtPWcsZC09ditnKSxhPShpP3U6Yyk/TWF0aC5tYXgocCxNYXRoLm1pbihkLHRbaV0pKTp0W2ldLE0/bz0oYSs9ZykrdjooaCYmKGc9TWF0aC5tYXgocCxNYXRoLm1pbihkLDIqaFtpXS1hKSkpLGc8YT8obz1hLGE9Zyk6bz1nKSxtWzBdIT1hfHxtWzFdIT1vKXJldHVybiBpP3I9bnVsbDplPW51bGwsbVswXT1hLG1bMV09bywhMH1mdW5jdGlvbiBQKCl7TCgpLGIuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYWxsIikuc2VsZWN0QWxsKCIucmVzaXplIikuc3R5bGUoImRpc3BsYXkiLGYuZW1wdHkoKT8ibm9uZSI6bnVsbCksdC5zZWxlY3QoImJvZHkiKS5zdHlsZSgiY3Vyc29yIixudWxsKSxTLm9uKCJtb3VzZW1vdmUuYnJ1c2giLG51bGwpLm9uKCJtb3VzZXVwLmJydXNoIixudWxsKS5vbigidG91Y2htb3ZlLmJydXNoIixudWxsKS5vbigidG91Y2hlbmQuYnJ1c2giLG51bGwpLm9uKCJrZXlkb3duLmJydXNoIixudWxsKS5vbigia2V5dXAuYnJ1c2giLG51bGwpLEEoKSx4KHt0eXBlOiJicnVzaGVuZCJ9KX1iLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsIm5vbmUiKS5zZWxlY3RBbGwoIi5yZXNpemUiKS5zdHlsZSgiZGlzcGxheSIsbnVsbCksdC5zZWxlY3QoImJvZHkiKS5zdHlsZSgiY3Vyc29yIix5LnN0eWxlKCJjdXJzb3IiKSkseCh7dHlwZToiYnJ1c2hzdGFydCJ9KSxMKCl9cmV0dXJuIGYuZXZlbnQ9ZnVuY3Rpb24oaSl7aS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGk9bi5vZih0aGlzLGFyZ3VtZW50cyksYT17eDpzLHk6bCxpOmUsajpyfSxvPXRoaXMuX19jaGFydF9ffHxhO3RoaXMuX19jaGFydF9fPWEsZHM/dC5zZWxlY3QodGhpcykudHJhbnNpdGlvbigpLmVhY2goInN0YXJ0LmJydXNoIixmdW5jdGlvbigpe2U9by5pLHI9by5qLHM9by54LGw9by55LGkoe3R5cGU6ImJydXNoc3RhcnQifSl9KS50d2VlbigiYnJ1c2g6YnJ1c2giLGZ1bmN0aW9uKCl7dmFyIHQ9JGkocyxhLngpLG49JGkobCxhLnkpO3JldHVybiBlPXI9bnVsbCxmdW5jdGlvbihlKXtzPWEueD10KGUpLGw9YS55PW4oZSksaSh7dHlwZToiYnJ1c2giLG1vZGU6InJlc2l6ZSJ9KX19KS5lYWNoKCJlbmQuYnJ1c2giLGZ1bmN0aW9uKCl7ZT1hLmkscj1hLmosaSh7dHlwZToiYnJ1c2giLG1vZGU6InJlc2l6ZSJ9KSxpKHt0eXBlOiJicnVzaGVuZCJ9KX0pOihpKHt0eXBlOiJicnVzaHN0YXJ0In0pLGkoe3R5cGU6ImJydXNoIixtb2RlOiJyZXNpemUifSksaSh7dHlwZToiYnJ1c2hlbmQifSkpfSl9LGYueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD1Tc1shKGk9dCk8PDF8IWFdLGYpOml9LGYueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD1Tc1shaTw8MXwhKGE9dCldLGYpOmF9LGYuY2xhbXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGkmJmE/KGM9ISF0WzBdLHU9ISF0WzFdKTppP2M9ISF0OmEmJih1PSEhdCksZik6aSYmYT9bYyx1XTppP2M6YT91Om51bGx9LGYuZXh0ZW50PWZ1bmN0aW9uKHQpe3ZhciBuLG8sYyx1LGg7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGkmJihuPXRbMF0sbz10WzFdLGEmJihuPW5bMF0sbz1vWzBdKSxlPVtuLG9dLGkuaW52ZXJ0JiYobj1pKG4pLG89aShvKSksbzxuJiYoaD1uLG49byxvPWgpLG49PXNbMF0mJm89PXNbMV18fChzPVtuLG9dKSksYSYmKGM9dFswXSx1PXRbMV0saSYmKGM9Y1sxXSx1PXVbMV0pLHI9W2MsdV0sYS5pbnZlcnQmJihjPWEoYyksdT1hKHUpKSx1PGMmJihoPWMsYz11LHU9aCksYz09bFswXSYmdT09bFsxXXx8KGw9W2MsdV0pKSxmKTooaSYmKGU/KG49ZVswXSxvPWVbMV0pOihuPXNbMF0sbz1zWzFdLGkuaW52ZXJ0JiYobj1pLmludmVydChuKSxvPWkuaW52ZXJ0KG8pKSxvPG4mJihoPW4sbj1vLG89aCkpKSxhJiYocj8oYz1yWzBdLHU9clsxXSk6KGM9bFswXSx1PWxbMV0sYS5pbnZlcnQmJihjPWEuaW52ZXJ0KGMpLHU9YS5pbnZlcnQodSkpLHU8YyYmKGg9YyxjPXUsdT1oKSkpLGkmJmE/W1tuLGNdLFtvLHVdXTppP1tuLG9dOmEmJltjLHVdKX0sZi5jbGVhcj1mdW5jdGlvbigpe3JldHVybiBmLmVtcHR5KCl8fChzPVswLDBdLGw9WzAsMF0sZT1yPW51bGwpLGZ9LGYuZW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4hIWkmJnNbMF09PXNbMV18fCEhYSYmbFswXT09bFsxXX0sdC5yZWJpbmQoZixuLCJvbiIpfTt2YXIgVHM9e246Im5zLXJlc2l6ZSIsZToiZXctcmVzaXplIixzOiJucy1yZXNpemUiLHc6ImV3LXJlc2l6ZSIsbnc6Im53c2UtcmVzaXplIixuZToibmVzdy1yZXNpemUiLHNlOiJud3NlLXJlc2l6ZSIsc3c6Im5lc3ctcmVzaXplIn0sU3M9W1sibiIsImUiLCJzIiwidyIsIm53IiwibmUiLCJzZSIsInN3Il0sWyJlIiwidyJdLFsibiIsInMiXSxbXV0sRXM9SWUuZm9ybWF0PXNyLnRpbWVGb3JtYXQsQ3M9RXMudXRjLExzPUNzKCIlWS0lbS0lZFQlSDolTTolUy4lTFoiKTtmdW5jdGlvbiB6cyh0KXtyZXR1cm4gdC50b0lTT1N0cmluZygpfWZ1bmN0aW9uIFBzKGUscixuKXtmdW5jdGlvbiBpKHQpe3JldHVybiBlKHQpfWZ1bmN0aW9uIGEoZSxuKXt2YXIgaT0oZVsxXS1lWzBdKS9uLGE9dC5iaXNlY3QoT3MsaSk7cmV0dXJuIGE9PU9zLmxlbmd0aD9bci55ZWFyLHhvKGUubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LzMxNTM2ZTZ9KSxuKVsyXV06YT9yW2kvT3NbYS0xXTxPc1thXS9pP2EtMTphXTpbQnMseG8oZSxuKVsyXV19cmV0dXJuIGkuaW52ZXJ0PWZ1bmN0aW9uKHQpe3JldHVybiBJcyhlLmludmVydCh0KSl9LGkuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlLmRvbWFpbih0KSxpKTplLmRvbWFpbigpLm1hcChJcyl9LGkubmljZT1mdW5jdGlvbih0LGUpe3ZhciByPWkuZG9tYWluKCksbj1jbyhyKSxvPW51bGw9PXQ/YShuLDEwKToibnVtYmVyIj09dHlwZW9mIHQmJmEobix0KTtmdW5jdGlvbiBzKHIpe3JldHVybiFpc05hTihyKSYmIXQucmFuZ2UocixJcygrcisxKSxlKS5sZW5ndGh9cmV0dXJuIG8mJih0PW9bMF0sZT1vWzFdKSxpLmRvbWFpbihmbyhyLGU+MT97Zmxvb3I6ZnVuY3Rpb24oZSl7Zm9yKDtzKGU9dC5mbG9vcihlKSk7KWU9SXMoZS0xKTtyZXR1cm4gZX0sY2VpbDpmdW5jdGlvbihlKXtmb3IoO3MoZT10LmNlaWwoZSkpOyllPUlzKCtlKzEpO3JldHVybiBlfX06dCkpfSxpLnRpY2tzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9Y28oaS5kb21haW4oKSksbj1udWxsPT10P2EociwxMCk6Im51bWJlciI9PXR5cGVvZiB0P2Eocix0KTohdC5yYW5nZSYmW3tyYW5nZTp0fSxlXTtyZXR1cm4gbiYmKHQ9blswXSxlPW5bMV0pLHQucmFuZ2UoclswXSxJcygrclsxXSsxKSxlPDE/MTplKX0saS50aWNrRm9ybWF0PWZ1bmN0aW9uKCl7cmV0dXJuIG59LGkuY29weT1mdW5jdGlvbigpe3JldHVybiBQcyhlLmNvcHkoKSxyLG4pfSx2byhpLGUpfWZ1bmN0aW9uIElzKHQpe3JldHVybiBuZXcgRGF0ZSh0KX1Fcy5pc289RGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcmJituZXcgRGF0ZSgiMjAwMC0wMS0wMVQwMDowMDowMC4wMDBaIik/enM6THMsenMucGFyc2U9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IERhdGUodCk7cmV0dXJuIGlzTmFOKGUpP251bGw6ZX0senMudG9TdHJpbmc9THMudG9TdHJpbmcsSWUuc2Vjb25kPUJlKGZ1bmN0aW9uKHQpe3JldHVybiBuZXcgT2UoMWUzKk1hdGguZmxvb3IodC8xZTMpKX0sZnVuY3Rpb24odCxlKXt0LnNldFRpbWUodC5nZXRUaW1lKCkrMWUzKk1hdGguZmxvb3IoZSkpfSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRTZWNvbmRzKCl9KSxJZS5zZWNvbmRzPUllLnNlY29uZC5yYW5nZSxJZS5zZWNvbmRzLnV0Yz1JZS5zZWNvbmQudXRjLnJhbmdlLEllLm1pbnV0ZT1CZShmdW5jdGlvbih0KXtyZXR1cm4gbmV3IE9lKDZlNCpNYXRoLmZsb29yKHQvNmU0KSl9LGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKHQuZ2V0VGltZSgpKzZlNCpNYXRoLmZsb29yKGUpKX0sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0TWludXRlcygpfSksSWUubWludXRlcz1JZS5taW51dGUucmFuZ2UsSWUubWludXRlcy51dGM9SWUubWludXRlLnV0Yy5yYW5nZSxJZS5ob3VyPUJlKGZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2V0VGltZXpvbmVPZmZzZXQoKS82MDtyZXR1cm4gbmV3IE9lKDM2ZTUqKE1hdGguZmxvb3IodC8zNmU1LWUpK2UpKX0sZnVuY3Rpb24odCxlKXt0LnNldFRpbWUodC5nZXRUaW1lKCkrMzZlNSpNYXRoLmZsb29yKGUpKX0sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0SG91cnMoKX0pLEllLmhvdXJzPUllLmhvdXIucmFuZ2UsSWUuaG91cnMudXRjPUllLmhvdXIudXRjLnJhbmdlLEllLm1vbnRoPUJlKGZ1bmN0aW9uKHQpe3JldHVybih0PUllLmRheSh0KSkuc2V0RGF0ZSgxKSx0fSxmdW5jdGlvbih0LGUpe3Quc2V0TW9udGgodC5nZXRNb250aCgpK2UpfSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRNb250aCgpfSksSWUubW9udGhzPUllLm1vbnRoLnJhbmdlLEllLm1vbnRocy51dGM9SWUubW9udGgudXRjLnJhbmdlO3ZhciBPcz1bMWUzLDVlMywxNWUzLDNlNCw2ZTQsM2U1LDllNSwxOGU1LDM2ZTUsMTA4ZTUsMjE2ZTUsNDMyZTUsODY0ZTUsMTcyOGU1LDYwNDhlNSwyNTkyZTYsNzc3NmU2LDMxNTM2ZTZdLERzPVtbSWUuc2Vjb25kLDFdLFtJZS5zZWNvbmQsNV0sW0llLnNlY29uZCwxNV0sW0llLnNlY29uZCwzMF0sW0llLm1pbnV0ZSwxXSxbSWUubWludXRlLDVdLFtJZS5taW51dGUsMTVdLFtJZS5taW51dGUsMzBdLFtJZS5ob3VyLDFdLFtJZS5ob3VyLDNdLFtJZS5ob3VyLDZdLFtJZS5ob3VyLDEyXSxbSWUuZGF5LDFdLFtJZS5kYXksMl0sW0llLndlZWssMV0sW0llLm1vbnRoLDFdLFtJZS5tb250aCwzXSxbSWUueWVhciwxXV0sUnM9RXMubXVsdGkoW1siLiVMIixmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRNaWxsaXNlY29uZHMoKX1dLFsiOiVTIixmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRTZWNvbmRzKCl9XSxbIiVJOiVNIixmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRNaW51dGVzKCl9XSxbIiVJICVwIixmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRIb3VycygpfV0sWyIlYSAlZCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0RGF5KCkmJjEhPXQuZ2V0RGF0ZSgpfV0sWyIlYiAlZCIsZnVuY3Rpb24odCl7cmV0dXJuIDEhPXQuZ2V0RGF0ZSgpfV0sWyIlQiIsZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0TW9udGgoKX1dLFsiJVkiLFdyXV0pLEJzPXtyYW5nZTpmdW5jdGlvbihlLHIsbil7cmV0dXJuIHQucmFuZ2UoTWF0aC5jZWlsKGUvbikqbiwrcixuKS5tYXAoSXMpfSxmbG9vcjp6LGNlaWw6en07RHMueWVhcj1JZS55ZWFyLEllLnNjYWxlPWZ1bmN0aW9uKCl7cmV0dXJuIFBzKHQuc2NhbGUubGluZWFyKCksRHMsUnMpfTt2YXIgRnM9RHMubWFwKGZ1bmN0aW9uKHQpe3JldHVyblt0WzBdLnV0Yyx0WzFdXX0pLE5zPUNzLm11bHRpKFtbIi4lTCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDTWlsbGlzZWNvbmRzKCl9XSxbIjolUyIsZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDU2Vjb25kcygpfV0sWyIlSTolTSIsZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDTWludXRlcygpfV0sWyIlSSAlcCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDSG91cnMoKX1dLFsiJWEgJWQiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ0RheSgpJiYxIT10LmdldFVUQ0RhdGUoKX1dLFsiJWIgJWQiLGZ1bmN0aW9uKHQpe3JldHVybiAxIT10LmdldFVUQ0RhdGUoKX1dLFsiJUIiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ01vbnRoKCl9XSxbIiVZIixXcl1dKTtmdW5jdGlvbiBqcyh0KXtyZXR1cm4gSlNPTi5wYXJzZSh0LnJlc3BvbnNlVGV4dCl9ZnVuY3Rpb24gVnModCl7dmFyIGU9aS5jcmVhdGVSYW5nZSgpO3JldHVybiBlLnNlbGVjdE5vZGUoaS5ib2R5KSxlLmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCh0LnJlc3BvbnNlVGV4dCl9RnMueWVhcj1JZS55ZWFyLnV0YyxJZS5zY2FsZS51dGM9ZnVuY3Rpb24oKXtyZXR1cm4gUHModC5zY2FsZS5saW5lYXIoKSxGcyxOcyl9LHQudGV4dD12ZShmdW5jdGlvbih0KXtyZXR1cm4gdC5yZXNwb25zZVRleHR9KSx0Lmpzb249ZnVuY3Rpb24odCxlKXtyZXR1cm4geWUodCwiYXBwbGljYXRpb24vanNvbiIsanMsZSl9LHQuaHRtbD1mdW5jdGlvbih0LGUpe3JldHVybiB5ZSh0LCJ0ZXh0L2h0bWwiLFZzLGUpfSx0LnhtbD12ZShmdW5jdGlvbih0KXtyZXR1cm4gdC5yZXNwb25zZVhNTH0pLCJvYmplY3QiPT10eXBlb2YgZSYmZS5leHBvcnRzP2UuZXhwb3J0cz10OnRoaXMuZDM9dH0oKX0se31dLDE0ODpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0KyspaWYodm9pZCAwIT09YXJndW1lbnRzW3RdKXJldHVybiBhcmd1bWVudHNbdF19fSx7fV0sMTQ5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImluY3JlbWVudGFsLWNvbnZleC1odWxsIiksaT10KCJ1bmlxIik7ZnVuY3Rpb24gYSh0LGUpe3RoaXMucG9pbnQ9dCx0aGlzLmluZGV4PWV9ZnVuY3Rpb24gbyh0LGUpe2Zvcih2YXIgcj10LnBvaW50LG49ZS5wb2ludCxpPXIubGVuZ3RoLGE9MDthPGk7KythKXt2YXIgbz1uW2FdLXJbYV07aWYobylyZXR1cm4gb31yZXR1cm4gMH1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10Lmxlbmd0aDtpZigwPT09cilyZXR1cm5bXTt2YXIgcz10WzBdLmxlbmd0aDtpZihzPDEpcmV0dXJuW107aWYoMT09PXMpcmV0dXJuIGZ1bmN0aW9uKHQsZSxyKXtpZigxPT09dClyZXR1cm4gcj9bWy0xLDBdXTpbXTt2YXIgbj1lLm1hcChmdW5jdGlvbih0LGUpe3JldHVyblt0WzBdLGVdfSk7bi5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF0tZVswXX0pO2Zvcih2YXIgaT1uZXcgQXJyYXkodC0xKSxhPTE7YTx0OysrYSl7dmFyIG89blthLTFdLHM9blthXTtpW2EtMV09W29bMV0sc1sxXV19ciYmaS5wdXNoKFstMSxpWzBdWzFdXSxbaVt0LTFdWzFdLC0xXSk7cmV0dXJuIGl9KHIsdCxlKTtmb3IodmFyIGw9bmV3IEFycmF5KHIpLGM9MSx1PTA7dTxyOysrdSl7Zm9yKHZhciBoPXRbdV0sZj1uZXcgQXJyYXkocysxKSxwPTAsZD0wO2Q8czsrK2Qpe3ZhciBnPWhbZF07ZltkXT1nLHArPWcqZ31mW3NdPXAsbFt1XT1uZXcgYShmLHUpLGM9TWF0aC5tYXgocCxjKX1pKGwsbykscj1sLmxlbmd0aDtmb3IodmFyIG09bmV3IEFycmF5KHIrcysxKSx2PW5ldyBBcnJheShyK3MrMSkseT0ocysxKSoocysxKSpjLHg9bmV3IEFycmF5KHMrMSksdT0wO3U8PXM7Kyt1KXhbdV09MDt4W3NdPXksbVswXT14LnNsaWNlKCksdlswXT0tMTtmb3IodmFyIHU9MDt1PD1zOysrdSl7dmFyIGY9eC5zbGljZSgpO2ZbdV09MSxtW3UrMV09Zix2W3UrMV09LTF9Zm9yKHZhciB1PTA7dTxyOysrdSl7dmFyIGI9bFt1XTttW3UrcysxXT1iLnBvaW50LHZbdStzKzFdPWIuaW5kZXh9dmFyIF89bihtLCExKTtfPWU/Xy5maWx0ZXIoZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj0wO3I8PXM7KytyKXt2YXIgbj12W3Rbcl1dO2lmKG48MCYmKytlPj0yKXJldHVybiExO3Rbcl09bn1yZXR1cm4hMH0pOl8uZmlsdGVyKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8PXM7KytlKXt2YXIgcj12W3RbZV1dO2lmKHI8MClyZXR1cm4hMTt0W2VdPXJ9cmV0dXJuITB9KTtpZigxJnMpZm9yKHZhciB1PTA7dTxfLmxlbmd0aDsrK3Upe3ZhciBiPV9bdV0sZj1iWzBdO2JbMF09YlsxXSxiWzFdPWZ9cmV0dXJuIF99fSx7ImluY3JlbWVudGFsLWNvbnZleC1odWxsIjozODEsdW5pcTo1MDl9XSwxNTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWE7dmFyIG49KGEuY2FudmFzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpKS5nZXRDb250ZXh0KCIyZCIpLGk9byhbMzIsMTI2XSk7ZnVuY3Rpb24gYSh0LGUpe0FycmF5LmlzQXJyYXkodCkmJih0PXQuam9pbigiLCAiKSk7dmFyIHIsYT17fSxzPTE2LGw9LjA1O2UmJigyPT09ZS5sZW5ndGgmJiJudW1iZXIiPT10eXBlb2YgZVswXT9yPW8oZSk6QXJyYXkuaXNBcnJheShlKT9yPWU6KGUubz9yPW8oZS5vKTplLnBhaXJzJiYocj1lLnBhaXJzKSxlLmZvbnRTaXplJiYocz1lLmZvbnRTaXplKSxudWxsIT1lLnRocmVzaG9sZCYmKGw9ZS50aHJlc2hvbGQpKSkscnx8KHI9aSksbi5mb250PXMrInB4ICIrdDtmb3IodmFyIGM9MDtjPHIubGVuZ3RoO2MrKyl7dmFyIHU9cltjXSxoPW4ubWVhc3VyZVRleHQodVswXSkud2lkdGgrbi5tZWFzdXJlVGV4dCh1WzFdKS53aWR0aCxmPW4ubWVhc3VyZVRleHQodSkud2lkdGg7aWYoTWF0aC5hYnMoaC1mKT5zKmwpe3ZhciBwPShmLWgpL3M7YVt1XT0xZTMqcH19cmV0dXJuIGF9ZnVuY3Rpb24gbyh0KXtmb3IodmFyIGU9W10scj10WzBdO3I8PXRbMV07cisrKWZvcih2YXIgbj1TdHJpbmcuZnJvbUNoYXJDb2RlKHIpLGk9dFswXTtpPHRbMV07aSsrKXt2YXIgYT1uK1N0cmluZy5mcm9tQ2hhckNvZGUoaSk7ZS5wdXNoKGEpfXJldHVybiBlfWEuY3JlYXRlUGFpcnM9byxhLmFzY2lpPWl9LHt9XSwxNTE6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24odCl7dmFyIHI9ITE7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBGbG9hdDY0QXJyYXkpe3ZhciBuPW5ldyBGbG9hdDY0QXJyYXkoMSksaT1uZXcgVWludDMyQXJyYXkobi5idWZmZXIpO2lmKG5bMF09MSxyPSEwLDEwNzI2OTMyNDg9PT1pWzFdKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG5bMF09dCxbaVswXSxpWzFdXX0sZS5leHBvcnRzLnBhY2s9ZnVuY3Rpb24odCxlKXtyZXR1cm4gaVswXT10LGlbMV09ZSxuWzBdfSxlLmV4cG9ydHMubG89ZnVuY3Rpb24odCl7cmV0dXJuIG5bMF09dCxpWzBdfSxlLmV4cG9ydHMuaGk9ZnVuY3Rpb24odCl7cmV0dXJuIG5bMF09dCxpWzFdfX1lbHNlIGlmKDEwNzI2OTMyNDg9PT1pWzBdKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG5bMF09dCxbaVsxXSxpWzBdXX0sZS5leHBvcnRzLnBhY2s9ZnVuY3Rpb24odCxlKXtyZXR1cm4gaVsxXT10LGlbMF09ZSxuWzBdfSxlLmV4cG9ydHMubG89ZnVuY3Rpb24odCl7cmV0dXJuIG5bMF09dCxpWzFdfSxlLmV4cG9ydHMuaGk9ZnVuY3Rpb24odCl7cmV0dXJuIG5bMF09dCxpWzBdfX1lbHNlIHI9ITF9aWYoIXIpe3ZhciBhPW5ldyB0KDgpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gYS53cml0ZURvdWJsZUxFKHQsMCwhMCksW2EucmVhZFVJbnQzMkxFKDAsITApLGEucmVhZFVJbnQzMkxFKDQsITApXX0sZS5leHBvcnRzLnBhY2s9ZnVuY3Rpb24odCxlKXtyZXR1cm4gYS53cml0ZVVJbnQzMkxFKHQsMCwhMCksYS53cml0ZVVJbnQzMkxFKGUsNCwhMCksYS5yZWFkRG91YmxlTEUoMCwhMCl9LGUuZXhwb3J0cy5sbz1mdW5jdGlvbih0KXtyZXR1cm4gYS53cml0ZURvdWJsZUxFKHQsMCwhMCksYS5yZWFkVUludDMyTEUoMCwhMCl9LGUuZXhwb3J0cy5oaT1mdW5jdGlvbih0KXtyZXR1cm4gYS53cml0ZURvdWJsZUxFKHQsMCwhMCksYS5yZWFkVUludDMyTEUoNCwhMCl9fWUuZXhwb3J0cy5zaWduPWZ1bmN0aW9uKHQpe3JldHVybiBlLmV4cG9ydHMuaGkodCk+Pj4zMX0sZS5leHBvcnRzLmV4cG9uZW50PWZ1bmN0aW9uKHQpe3JldHVybihlLmV4cG9ydHMuaGkodCk8PDE+Pj4yMSktMTAyM30sZS5leHBvcnRzLmZyYWN0aW9uPWZ1bmN0aW9uKHQpe3ZhciByPWUuZXhwb3J0cy5sbyh0KSxuPWUuZXhwb3J0cy5oaSh0KSxpPTEwNDg1NzUmbjtyZXR1cm4gMjE0NjQzNTA3MiZuJiYoaSs9MTw8MjApLFtyLGldfSxlLmV4cG9ydHMuZGVub3JtYWxpemVkPWZ1bmN0aW9uKHQpe3JldHVybiEoMjE0NjQzNTA3MiZlLmV4cG9ydHMuaGkodCkpfX0pLmNhbGwodGhpcyx0KCJidWZmZXIiKS5CdWZmZXIpfSx7YnVmZmVyOjkyfV0sMTUyOltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiYWJzLXN2Zy1wYXRoIiksaT10KCJub3JtYWxpemUtc3ZnLXBhdGgiKSxhPXtNOiJtb3ZlVG8iLEM6ImJlemllckN1cnZlVG8ifTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt0LmJlZ2luUGF0aCgpLGkobihlKSkuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgcj1lWzBdLG49ZS5zbGljZSgxKTt0W2Fbcl1dLmFwcGx5KHQsbil9KSx0LmNsb3NlUGF0aCgpfX0seyJhYnMtc3ZnLXBhdGgiOjUxLCJub3JtYWxpemUtc3ZnLXBhdGgiOjQxOX1dLDE1MzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZSJpbnQ4IjpyZXR1cm4gSW50OEFycmF5O2Nhc2UiaW50MTYiOnJldHVybiBJbnQxNkFycmF5O2Nhc2UiaW50MzIiOnJldHVybiBJbnQzMkFycmF5O2Nhc2UidWludDgiOnJldHVybiBVaW50OEFycmF5O2Nhc2UidWludDE2IjpyZXR1cm4gVWludDE2QXJyYXk7Y2FzZSJ1aW50MzIiOnJldHVybiBVaW50MzJBcnJheTtjYXNlImZsb2F0MzIiOnJldHVybiBGbG9hdDMyQXJyYXk7Y2FzZSJmbG9hdDY0IjpyZXR1cm4gRmxvYXQ2NEFycmF5O2Nhc2UiYXJyYXkiOnJldHVybiBBcnJheTtjYXNlInVpbnQ4X2NsYW1wZWQiOnJldHVybiBVaW50OENsYW1wZWRBcnJheX19fSx7fV0sMTU0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3N3aXRjaCgidW5kZWZpbmVkIj09dHlwZW9mIGUmJihlPTApLHR5cGVvZiB0KXtjYXNlIm51bWJlciI6aWYodD4wKXJldHVybiBmdW5jdGlvbih0LGUpe3ZhciByLG47Zm9yKHI9bmV3IEFycmF5KHQpLG49MDtuPHQ7KytuKXJbbl09ZTtyZXR1cm4gcn0oMHx0LGUpO2JyZWFrO2Nhc2Uib2JqZWN0IjppZigibnVtYmVyIj09dHlwZW9mIHQubGVuZ3RoKXJldHVybiBmdW5jdGlvbiB0KGUscixuKXt2YXIgaT0wfGVbbl07aWYoaTw9MClyZXR1cm5bXTt2YXIgYSxvPW5ldyBBcnJheShpKTtpZihuPT09ZS5sZW5ndGgtMSlmb3IoYT0wO2E8aTsrK2Epb1thXT1yO2Vsc2UgZm9yKGE9MDthPGk7KythKW9bYV09dChlLHIsbisxKTtyZXR1cm4gb30odCxlLDApfXJldHVybltdfX0se31dLDE1NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXtyPXJ8fDI7dmFyIG4scyxsLGMsdSxwLGcsbT1lJiZlLmxlbmd0aCx2PW0/ZVswXSpyOnQubGVuZ3RoLHk9aSh0LDAsdixyLCEwKSx4PVtdO2lmKCF5KXJldHVybiB4O2lmKG0mJih5PWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBvLHMsbCxjLHUscD1bXTtmb3Iobz0wLHM9ZS5sZW5ndGg7bzxzO28rKylsPWVbb10qbixjPW88cy0xP2VbbysxXSpuOnQubGVuZ3RoLCh1PWkodCxsLGMsbiwhMSkpPT09dS5uZXh0JiYodS5zdGVpbmVyPSEwKSxwLnB1c2goZCh1KSk7Zm9yKHAuc29ydChoKSxvPTA7bzxwLmxlbmd0aDtvKyspZihwW29dLHIpLHI9YShyLHIubmV4dCk7cmV0dXJuIHJ9KHQsZSx5LHIpKSx0Lmxlbmd0aD44MCpyKXtuPWw9dFswXSxzPWM9dFsxXTtmb3IodmFyIGI9cjtiPHY7Yis9cikodT10W2JdKTxuJiYobj11KSwocD10W2IrMV0pPHMmJihzPXApLHU+bCYmKGw9dSkscD5jJiYoYz1wKTtnPTAhPT0oZz1NYXRoLm1heChsLW4sYy1zKSk/MS9nOjB9cmV0dXJuIG8oeSx4LHIsbixzLGcpLHh9ZnVuY3Rpb24gaSh0LGUscixuLGkpe3ZhciBhLG87aWYoaT09PUEodCxlLHIsbik+MClmb3IoYT1lO2E8cjthKz1uKW89dyhhLHRbYV0sdFthKzFdLG8pO2Vsc2UgZm9yKGE9ci1uO2E+PWU7YS09bilvPXcoYSx0W2FdLHRbYSsxXSxvKTtyZXR1cm4gbyYmeShvLG8ubmV4dCkmJihrKG8pLG89by5uZXh0KSxvfWZ1bmN0aW9uIGEodCxlKXtpZighdClyZXR1cm4gdDtlfHwoZT10KTt2YXIgcixuPXQ7ZG97aWYocj0hMSxuLnN0ZWluZXJ8fCF5KG4sbi5uZXh0KSYmMCE9PXYobi5wcmV2LG4sbi5uZXh0KSluPW4ubmV4dDtlbHNle2lmKGsobiksKG49ZT1uLnByZXYpPT09bi5uZXh0KWJyZWFrO3I9ITB9fXdoaWxlKHJ8fG4hPT1lKTtyZXR1cm4gZX1mdW5jdGlvbiBvKHQsZSxyLG4saSxoLGYpe2lmKHQpeyFmJiZoJiZmdW5jdGlvbih0LGUscixuKXt2YXIgaT10O2Rve251bGw9PT1pLnomJihpLno9cChpLngsaS55LGUscixuKSksaS5wcmV2Wj1pLnByZXYsaS5uZXh0Wj1pLm5leHQsaT1pLm5leHR9d2hpbGUoaSE9PXQpO2kucHJldloubmV4dFo9bnVsbCxpLnByZXZaPW51bGwsZnVuY3Rpb24odCl7dmFyIGUscixuLGksYSxvLHMsbCxjPTE7ZG97Zm9yKHI9dCx0PW51bGwsYT1udWxsLG89MDtyOyl7Zm9yKG8rKyxuPXIscz0wLGU9MDtlPGMmJihzKyssbj1uLm5leHRaKTtlKyspO2ZvcihsPWM7cz4wfHxsPjAmJm47KTAhPT1zJiYoMD09PWx8fCFufHxyLno8PW4ueik/KGk9cixyPXIubmV4dFoscy0tKTooaT1uLG49bi5uZXh0WixsLS0pLGE/YS5uZXh0Wj1pOnQ9aSxpLnByZXZaPWEsYT1pO3I9bn1hLm5leHRaPW51bGwsYyo9Mn13aGlsZShvPjEpfShpKX0odCxuLGksaCk7Zm9yKHZhciBkLGcsbT10O3QucHJldiE9PXQubmV4dDspaWYoZD10LnByZXYsZz10Lm5leHQsaD9sKHQsbixpLGgpOnModCkpZS5wdXNoKGQuaS9yKSxlLnB1c2godC5pL3IpLGUucHVzaChnLmkvciksayh0KSx0PWcubmV4dCxtPWcubmV4dDtlbHNlIGlmKCh0PWcpPT09bSl7Zj8xPT09Zj9vKHQ9Yyh0LGUsciksZSxyLG4saSxoLDIpOjI9PT1mJiZ1KHQsZSxyLG4saSxoKTpvKGEodCksZSxyLG4saSxoLDEpO2JyZWFrfX19ZnVuY3Rpb24gcyh0KXt2YXIgZT10LnByZXYscj10LG49dC5uZXh0O2lmKHYoZSxyLG4pPj0wKXJldHVybiExO2Zvcih2YXIgaT10Lm5leHQubmV4dDtpIT09dC5wcmV2Oyl7aWYoZyhlLngsZS55LHIueCxyLnksbi54LG4ueSxpLngsaS55KSYmdihpLnByZXYsaSxpLm5leHQpPj0wKXJldHVybiExO2k9aS5uZXh0fXJldHVybiEwfWZ1bmN0aW9uIGwodCxlLHIsbil7dmFyIGk9dC5wcmV2LGE9dCxvPXQubmV4dDtpZih2KGksYSxvKT49MClyZXR1cm4hMTtmb3IodmFyIHM9aS54PGEueD9pLng8by54P2kueDpvLng6YS54PG8ueD9hLng6by54LGw9aS55PGEueT9pLnk8by55P2kueTpvLnk6YS55PG8ueT9hLnk6by55LGM9aS54PmEueD9pLng+by54P2kueDpvLng6YS54Pm8ueD9hLng6by54LHU9aS55PmEueT9pLnk+by55P2kueTpvLnk6YS55Pm8ueT9hLnk6by55LGg9cChzLGwsZSxyLG4pLGY9cChjLHUsZSxyLG4pLGQ9dC5wcmV2WixtPXQubmV4dFo7ZCYmZC56Pj1oJiZtJiZtLno8PWY7KXtpZihkIT09dC5wcmV2JiZkIT09dC5uZXh0JiZnKGkueCxpLnksYS54LGEueSxvLngsby55LGQueCxkLnkpJiZ2KGQucHJldixkLGQubmV4dCk+PTApcmV0dXJuITE7aWYoZD1kLnByZXZaLG0hPT10LnByZXYmJm0hPT10Lm5leHQmJmcoaS54LGkueSxhLngsYS55LG8ueCxvLnksbS54LG0ueSkmJnYobS5wcmV2LG0sbS5uZXh0KT49MClyZXR1cm4hMTttPW0ubmV4dFp9Zm9yKDtkJiZkLno+PWg7KXtpZihkIT09dC5wcmV2JiZkIT09dC5uZXh0JiZnKGkueCxpLnksYS54LGEueSxvLngsby55LGQueCxkLnkpJiZ2KGQucHJldixkLGQubmV4dCk+PTApcmV0dXJuITE7ZD1kLnByZXZafWZvcig7bSYmbS56PD1mOyl7aWYobSE9PXQucHJldiYmbSE9PXQubmV4dCYmZyhpLngsaS55LGEueCxhLnksby54LG8ueSxtLngsbS55KSYmdihtLnByZXYsbSxtLm5leHQpPj0wKXJldHVybiExO209bS5uZXh0Wn1yZXR1cm4hMH1mdW5jdGlvbiBjKHQsZSxyKXt2YXIgbj10O2Rve3ZhciBpPW4ucHJldixhPW4ubmV4dC5uZXh0OyF5KGksYSkmJngoaSxuLG4ubmV4dCxhKSYmYihpLGEpJiZiKGEsaSkmJihlLnB1c2goaS5pL3IpLGUucHVzaChuLmkvciksZS5wdXNoKGEuaS9yKSxrKG4pLGsobi5uZXh0KSxuPXQ9YSksbj1uLm5leHR9d2hpbGUobiE9PXQpO3JldHVybiBufWZ1bmN0aW9uIHUodCxlLHIsbixpLHMpe3ZhciBsPXQ7ZG97Zm9yKHZhciBjPWwubmV4dC5uZXh0O2MhPT1sLnByZXY7KXtpZihsLmkhPT1jLmkmJm0obCxjKSl7dmFyIHU9XyhsLGMpO3JldHVybiBsPWEobCxsLm5leHQpLHU9YSh1LHUubmV4dCksbyhsLGUscixuLGkscyksdm9pZCBvKHUsZSxyLG4saSxzKX1jPWMubmV4dH1sPWwubmV4dH13aGlsZShsIT09dCl9ZnVuY3Rpb24gaCh0LGUpe3JldHVybiB0LngtZS54fWZ1bmN0aW9uIGYodCxlKXtpZihlPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj1lLGk9dC54LGE9dC55LG89LTEvMDtkb3tpZihhPD1uLnkmJmE+PW4ubmV4dC55JiZuLm5leHQueSE9PW4ueSl7dmFyIHM9bi54KyhhLW4ueSkqKG4ubmV4dC54LW4ueCkvKG4ubmV4dC55LW4ueSk7aWYoczw9aSYmcz5vKXtpZihvPXMscz09PWkpe2lmKGE9PT1uLnkpcmV0dXJuIG47aWYoYT09PW4ubmV4dC55KXJldHVybiBuLm5leHR9cj1uLng8bi5uZXh0Lng/bjpuLm5leHR9fW49bi5uZXh0fXdoaWxlKG4hPT1lKTtpZighcilyZXR1cm4gbnVsbDtpZihpPT09bylyZXR1cm4gci5wcmV2O3ZhciBsLGM9cix1PXIueCxoPXIueSxmPTEvMDtuPXIubmV4dDtmb3IoO24hPT1jOylpPj1uLngmJm4ueD49dSYmaSE9PW4ueCYmZyhhPGg/aTpvLGEsdSxoLGE8aD9vOmksYSxuLngsbi55KSYmKChsPU1hdGguYWJzKGEtbi55KS8oaS1uLngpKTxmfHxsPT09ZiYmbi54PnIueCkmJmIobix0KSYmKHI9bixmPWwpLG49bi5uZXh0O3JldHVybiByfSh0LGUpKXt2YXIgcj1fKGUsdCk7YShyLHIubmV4dCl9fWZ1bmN0aW9uIHAodCxlLHIsbixpKXtyZXR1cm4odD0xNDMxNjU1NzY1JigodD04NTg5OTM0NTkmKCh0PTI1MjY0NTEzNSYoKHQ9MTY3MTE5MzUmKCh0PTMyNzY3Kih0LXIpKmkpfHQ8PDgpKXx0PDw0KSl8dDw8MikpfHQ8PDEpKXwoZT0xNDMxNjU1NzY1JigoZT04NTg5OTM0NTkmKChlPTI1MjY0NTEzNSYoKGU9MTY3MTE5MzUmKChlPTMyNzY3KihlLW4pKmkpfGU8PDgpKXxlPDw0KSl8ZTw8MikpfGU8PDEpKTw8MX1mdW5jdGlvbiBkKHQpe3ZhciBlPXQscj10O2Rve2UueDxyLngmJihyPWUpLGU9ZS5uZXh0fXdoaWxlKGUhPT10KTtyZXR1cm4gcn1mdW5jdGlvbiBnKHQsZSxyLG4saSxhLG8scyl7cmV0dXJuKGktbykqKGUtcyktKHQtbykqKGEtcyk+PTAmJih0LW8pKihuLXMpLShyLW8pKihlLXMpPj0wJiYoci1vKSooYS1zKS0oaS1vKSoobi1zKT49MH1mdW5jdGlvbiBtKHQsZSl7cmV0dXJuIHQubmV4dC5pIT09ZS5pJiZ0LnByZXYuaSE9PWUuaSYmIWZ1bmN0aW9uKHQsZSl7dmFyIHI9dDtkb3tpZihyLmkhPT10LmkmJnIubmV4dC5pIT09dC5pJiZyLmkhPT1lLmkmJnIubmV4dC5pIT09ZS5pJiZ4KHIsci5uZXh0LHQsZSkpcmV0dXJuITA7cj1yLm5leHR9d2hpbGUociE9PXQpO3JldHVybiExfSh0LGUpJiZiKHQsZSkmJmIoZSx0KSYmZnVuY3Rpb24odCxlKXt2YXIgcj10LG49ITEsaT0odC54K2UueCkvMixhPSh0LnkrZS55KS8yO2Rve3IueT5hIT1yLm5leHQueT5hJiZyLm5leHQueSE9PXIueSYmaTwoci5uZXh0Lngtci54KSooYS1yLnkpLyhyLm5leHQueS1yLnkpK3IueCYmKG49IW4pLHI9ci5uZXh0fXdoaWxlKHIhPT10KTtyZXR1cm4gbn0odCxlKX1mdW5jdGlvbiB2KHQsZSxyKXtyZXR1cm4oZS55LXQueSkqKHIueC1lLngpLShlLngtdC54KSooci55LWUueSl9ZnVuY3Rpb24geSh0LGUpe3JldHVybiB0Lng9PT1lLngmJnQueT09PWUueX1mdW5jdGlvbiB4KHQsZSxyLG4pe3JldHVybiEhKHkodCxlKSYmeShyLG4pfHx5KHQsbikmJnkocixlKSl8fHYodCxlLHIpPjAhPXYodCxlLG4pPjAmJnYocixuLHQpPjAhPXYocixuLGUpPjB9ZnVuY3Rpb24gYih0LGUpe3JldHVybiB2KHQucHJldix0LHQubmV4dCk8MD92KHQsZSx0Lm5leHQpPj0wJiZ2KHQsdC5wcmV2LGUpPj0wOnYodCxlLHQucHJldik8MHx8dih0LHQubmV4dCxlKTwwfWZ1bmN0aW9uIF8odCxlKXt2YXIgcj1uZXcgTSh0LmksdC54LHQueSksbj1uZXcgTShlLmksZS54LGUueSksaT10Lm5leHQsYT1lLnByZXY7cmV0dXJuIHQubmV4dD1lLGUucHJldj10LHIubmV4dD1pLGkucHJldj1yLG4ubmV4dD1yLHIucHJldj1uLGEubmV4dD1uLG4ucHJldj1hLG59ZnVuY3Rpb24gdyh0LGUscixuKXt2YXIgaT1uZXcgTSh0LGUscik7cmV0dXJuIG4/KGkubmV4dD1uLm5leHQsaS5wcmV2PW4sbi5uZXh0LnByZXY9aSxuLm5leHQ9aSk6KGkucHJldj1pLGkubmV4dD1pKSxpfWZ1bmN0aW9uIGsodCl7dC5uZXh0LnByZXY9dC5wcmV2LHQucHJldi5uZXh0PXQubmV4dCx0LnByZXZaJiYodC5wcmV2Wi5uZXh0Wj10Lm5leHRaKSx0Lm5leHRaJiYodC5uZXh0Wi5wcmV2Wj10LnByZXZaKX1mdW5jdGlvbiBNKHQsZSxyKXt0aGlzLmk9dCx0aGlzLng9ZSx0aGlzLnk9cix0aGlzLnByZXY9bnVsbCx0aGlzLm5leHQ9bnVsbCx0aGlzLno9bnVsbCx0aGlzLnByZXZaPW51bGwsdGhpcy5uZXh0Wj1udWxsLHRoaXMuc3RlaW5lcj0hMX1mdW5jdGlvbiBBKHQsZSxyLG4pe2Zvcih2YXIgaT0wLGE9ZSxvPXItbjthPHI7YSs9bilpKz0odFtvXS10W2FdKSoodFthKzFdK3RbbysxXSksbz1hO3JldHVybiBpfWUuZXhwb3J0cz1uLGUuZXhwb3J0cy5kZWZhdWx0PW4sbi5kZXZpYXRpb249ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9ZSYmZS5sZW5ndGgsYT1pP2VbMF0qcjp0Lmxlbmd0aCxvPU1hdGguYWJzKEEodCwwLGEscikpO2lmKGkpZm9yKHZhciBzPTAsbD1lLmxlbmd0aDtzPGw7cysrKXt2YXIgYz1lW3NdKnIsdT1zPGwtMT9lW3MrMV0qcjp0Lmxlbmd0aDtvLT1NYXRoLmFicyhBKHQsYyx1LHIpKX12YXIgaD0wO2ZvcihzPTA7czxuLmxlbmd0aDtzKz0zKXt2YXIgZj1uW3NdKnIscD1uW3MrMV0qcixkPW5bcysyXSpyO2grPU1hdGguYWJzKCh0W2ZdLXRbZF0pKih0W3ArMV0tdFtmKzFdKS0odFtmXS10W3BdKSoodFtkKzFdLXRbZisxXSkpfXJldHVybiAwPT09byYmMD09PWg/MDpNYXRoLmFicygoaC1vKS9vKX0sbi5mbGF0dGVuPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10WzBdWzBdLmxlbmd0aCxyPXt2ZXJ0aWNlczpbXSxob2xlczpbXSxkaW1lbnNpb25zOmV9LG49MCxpPTA7aTx0Lmxlbmd0aDtpKyspe2Zvcih2YXIgYT0wO2E8dFtpXS5sZW5ndGg7YSsrKWZvcih2YXIgbz0wO288ZTtvKyspci52ZXJ0aWNlcy5wdXNoKHRbaV1bYV1bb10pO2k+MCYmKG4rPXRbaS0xXS5sZW5ndGgsci5ob2xlcy5wdXNoKG4pKX1yZXR1cm4gcn19LHt9XSwxNTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5sZW5ndGg7aWYoIm51bWJlciIhPXR5cGVvZiBlKXtlPTA7Zm9yKHZhciBpPTA7aTxyOysraSl7dmFyIGE9dFtpXTtlPU1hdGgubWF4KGUsYVswXSxhWzFdKX1lPTErKDB8ZSl9ZXw9MDtmb3IodmFyIG89bmV3IEFycmF5KGUpLGk9MDtpPGU7KytpKW9baV09W107Zm9yKHZhciBpPTA7aTxyOysraSl7dmFyIGE9dFtpXTtvW2FbMF1dLnB1c2goYVsxXSksb1thWzFdXS5wdXNoKGFbMF0pfWZvcih2YXIgcz0wO3M8ZTsrK3MpbihvW3NdLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtZX0pO3JldHVybiBvfTt2YXIgbj10KCJ1bmlxIil9LHt1bmlxOjUwOX1dLDE1NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9vYmplY3QvdmFsaWQtdmFsdWUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzKS5sZW5ndGg9MCx0aGlzfX0seyIuLi8uLi9vYmplY3QvdmFsaWQtdmFsdWUiOjE4OX1dLDE1ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi9pcy1pbXBsZW1lbnRlZCIpKCk/QXJyYXkuZnJvbTp0KCIuL3NoaW0iKX0seyIuL2lzLWltcGxlbWVudGVkIjoxNTksIi4vc2hpbSI6MTYwfV0sMTU5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciB0LGUscj1BcnJheS5mcm9tO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiByJiYoZT1yKHQ9WyJyYXoiLCJkd2EiXSksQm9vbGVhbihlJiZlIT09dCYmImR3YSI9PT1lWzFdKSl9fSx7fV0sMTYwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImVzNi1zeW1ib2wiKS5pdGVyYXRvcixpPXQoIi4uLy4uL2Z1bmN0aW9uL2lzLWFyZ3VtZW50cyIpLGE9dCgiLi4vLi4vZnVuY3Rpb24vaXMtZnVuY3Rpb24iKSxvPXQoIi4uLy4uL251bWJlci90by1wb3MtaW50ZWdlciIpLHM9dCgiLi4vLi4vb2JqZWN0L3ZhbGlkLWNhbGxhYmxlIiksbD10KCIuLi8uLi9vYmplY3QvdmFsaWQtdmFsdWUiKSxjPXQoIi4uLy4uL29iamVjdC9pcy12YWx1ZSIpLHU9dCgiLi4vLi4vc3RyaW5nL2lzLXN0cmluZyIpLGg9QXJyYXkuaXNBcnJheSxmPUZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsLHA9e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOm51bGx9LGQ9T2JqZWN0LmRlZmluZVByb3BlcnR5O2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZSxyLGcsbSx2LHkseCxiLF8sdyxrPWFyZ3VtZW50c1sxXSxNPWFyZ3VtZW50c1syXTtpZih0PU9iamVjdChsKHQpKSxjKGspJiZzKGspLHRoaXMmJnRoaXMhPT1BcnJheSYmYSh0aGlzKSllPXRoaXM7ZWxzZXtpZighayl7aWYoaSh0KSlyZXR1cm4gMSE9PSh2PXQubGVuZ3RoKT9BcnJheS5hcHBseShudWxsLHQpOigobT1uZXcgQXJyYXkoMSkpWzBdPXRbMF0sbSk7aWYoaCh0KSl7Zm9yKG09bmV3IEFycmF5KHY9dC5sZW5ndGgpLHI9MDtyPHY7KytyKW1bcl09dFtyXTtyZXR1cm4gbX19bT1bXX1pZighaCh0KSlpZih2b2lkIDAhPT0oXz10W25dKSl7Zm9yKHg9cyhfKS5jYWxsKHQpLGUmJihtPW5ldyBlKSxiPXgubmV4dCgpLHI9MDshYi5kb25lOyl3PWs/Zi5jYWxsKGssTSxiLnZhbHVlLHIpOmIudmFsdWUsZT8ocC52YWx1ZT13LGQobSxyLHApKTptW3JdPXcsYj14Lm5leHQoKSwrK3I7dj1yfWVsc2UgaWYodSh0KSl7Zm9yKHY9dC5sZW5ndGgsZSYmKG09bmV3IGUpLHI9MCxnPTA7cjx2Oysrcil3PXRbcl0scisxPHYmJih5PXcuY2hhckNvZGVBdCgwKSk+PTU1Mjk2JiZ5PD01NjMxOSYmKHcrPXRbKytyXSksdz1rP2YuY2FsbChrLE0sdyxnKTp3LGU/KHAudmFsdWU9dyxkKG0sZyxwKSk6bVtnXT13LCsrZzt2PWd9aWYodm9pZCAwPT09dilmb3Iodj1vKHQubGVuZ3RoKSxlJiYobT1uZXcgZSh2KSkscj0wO3I8djsrK3Ipdz1rP2YuY2FsbChrLE0sdFtyXSxyKTp0W3JdLGU/KHAudmFsdWU9dyxkKG0scixwKSk6bVtyXT13O3JldHVybiBlJiYocC52YWx1ZT1udWxsLG0ubGVuZ3RoPXYpLG19fSx7Ii4uLy4uL2Z1bmN0aW9uL2lzLWFyZ3VtZW50cyI6MTYxLCIuLi8uLi9mdW5jdGlvbi9pcy1mdW5jdGlvbiI6MTYyLCIuLi8uLi9udW1iZXIvdG8tcG9zLWludGVnZXIiOjE2OCwiLi4vLi4vb2JqZWN0L2lzLXZhbHVlIjoxNzgsIi4uLy4uL29iamVjdC92YWxpZC1jYWxsYWJsZSI6MTg3LCIuLi8uLi9vYmplY3QvdmFsaWQtdmFsdWUiOjE4OSwiLi4vLi4vc3RyaW5nL2lzLXN0cmluZyI6MTkzLCJlczYtc3ltYm9sIjoyMDN9XSwxNjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxpPW4uY2FsbChmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbi5jYWxsKHQpPT09aX19LHt9XSwxNjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxpPW4uY2FsbCh0KCIuL25vb3AiKSk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0JiZuLmNhbGwodCk9PT1pfX0seyIuL25vb3AiOjE2M31dLDE2MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt9fSx7fV0sMTY0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuL2lzLWltcGxlbWVudGVkIikoKT9NYXRoLnNpZ246dCgiLi9zaGltIil9LHsiLi9pcy1pbXBsZW1lbnRlZCI6MTY1LCIuL3NoaW0iOjE2Nn1dLDE2NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdD1NYXRoLnNpZ247cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQmJigxPT09dCgxMCkmJi0xPT09dCgtMjApKX19LHt9XSwxNjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0PU51bWJlcih0KSxpc05hTih0KXx8MD09PXQ/dDp0PjA/MTotMX19LHt9XSwxNjc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vbWF0aC9zaWduIiksaT1NYXRoLmFicyxhPU1hdGguZmxvb3I7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpc05hTih0KT8wOjAhPT0odD1OdW1iZXIodCkpJiZpc0Zpbml0ZSh0KT9uKHQpKmEoaSh0KSk6dH19LHsiLi4vbWF0aC9zaWduIjoxNjR9XSwxNjg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi90by1pbnRlZ2VyIiksaT1NYXRoLm1heDtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGkoMCxuKHQpKX19LHsiLi90by1pbnRlZ2VyIjoxNjd9XSwxNjk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi92YWxpZC1jYWxsYWJsZSIpLGk9dCgiLi92YWxpZC12YWx1ZSIpLGE9RnVuY3Rpb24ucHJvdG90eXBlLmJpbmQsbz1GdW5jdGlvbi5wcm90b3R5cGUuY2FsbCxzPU9iamVjdC5rZXlzLGw9T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24ocixjKXt2YXIgdSxoPWFyZ3VtZW50c1syXSxmPWFyZ3VtZW50c1szXTtyZXR1cm4gcj1PYmplY3QoaShyKSksbihjKSx1PXMociksZiYmdS5zb3J0KCJmdW5jdGlvbiI9PXR5cGVvZiBmP2EuY2FsbChmLHIpOnZvaWQgMCksImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PXVbdF0pLG8uY2FsbCh0LHUsZnVuY3Rpb24odCxuKXtyZXR1cm4gbC5jYWxsKHIsdCk/by5jYWxsKGMsaCxyW3RdLHQscixuKTplfSl9fX0seyIuL3ZhbGlkLWNhbGxhYmxlIjoxODcsIi4vdmFsaWQtdmFsdWUiOjE4OX1dLDE3MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi9pcy1pbXBsZW1lbnRlZCIpKCk/T2JqZWN0LmFzc2lnbjp0KCIuL3NoaW0iKX0seyIuL2lzLWltcGxlbWVudGVkIjoxNzEsIi4vc2hpbSI6MTcyfV0sMTcxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciB0LGU9T2JqZWN0LmFzc2lnbjtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZSYmKGUodD17Zm9vOiJyYXoifSx7YmFyOiJkd2EifSx7dHJ6eToidHJ6eSJ9KSx0LmZvbyt0LmJhcit0LnRyenk9PT0icmF6ZHdhdHJ6eSIpfX0se31dLDE3MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9rZXlzIiksaT10KCIuLi92YWxpZC12YWx1ZSIpLGE9TWF0aC5tYXg7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbyxzLGw9YShhcmd1bWVudHMubGVuZ3RoLDIpO2Zvcih0PU9iamVjdChpKHQpKSxzPWZ1bmN0aW9uKG4pe3RyeXt0W25dPWVbbl19Y2F0Y2godCl7cnx8KHI9dCl9fSxvPTE7bzxsOysrbyllPWFyZ3VtZW50c1tvXSxuKGUpLmZvckVhY2gocyk7aWYodm9pZCAwIT09cil0aHJvdyByO3JldHVybiB0fX0seyIuLi9rZXlzIjoxNzksIi4uL3ZhbGlkLXZhbHVlIjoxODl9XSwxNzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vYXJyYXkvZnJvbSIpLGk9dCgiLi9hc3NpZ24iKSxhPXQoIi4vdmFsaWQtdmFsdWUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9T2JqZWN0KGEodCkpLHI9YXJndW1lbnRzWzFdLG89T2JqZWN0KGFyZ3VtZW50c1syXSk7aWYoZSE9PXQmJiFyKXJldHVybiBlO3ZhciBzPXt9O3JldHVybiByP24ocixmdW5jdGlvbihlKXsoby5lbnN1cmV8fGUgaW4gdCkmJihzW2VdPXRbZV0pfSk6aShzLHQpLHN9fSx7Ii4uL2FycmF5L2Zyb20iOjE1OCwiLi9hc3NpZ24iOjE3MCwiLi92YWxpZC12YWx1ZSI6MTg5fV0sMTc0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuLGksYSxvLHM9T2JqZWN0LmNyZWF0ZTt0KCIuL3NldC1wcm90b3R5cGUtb2YvaXMtaW1wbGVtZW50ZWQiKSgpfHwobj10KCIuL3NldC1wcm90b3R5cGUtb2Yvc2hpbSIpKSxlLmV4cG9ydHM9bj8xIT09bi5sZXZlbD9zOihpPXt9LGE9e30sbz17Y29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSxPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPYmplY3QucHJvdG90eXBlKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2FbdF09Il9fcHJvdG9fXyIhPT10P286e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhpLGEpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCJudWxsUG9seWZpbGwiLHtjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMSx2YWx1ZTppfSksZnVuY3Rpb24odCxlKXtyZXR1cm4gcyhudWxsPT09dD9pOnQsZSl9KTpzfSx7Ii4vc2V0LXByb3RvdHlwZS1vZi9pcy1pbXBsZW1lbnRlZCI6MTg1LCIuL3NldC1wcm90b3R5cGUtb2Yvc2hpbSI6MTg2fV0sMTc1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuL19pdGVyYXRlIikoImZvckVhY2giKX0seyIuL19pdGVyYXRlIjoxNjl9XSwxNzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0fX0se31dLDE3NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2lzLXZhbHVlIiksaT17ZnVuY3Rpb246ITAsb2JqZWN0OiEwfTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG4odCkmJmlbdHlwZW9mIHRdfHwhMX19LHsiLi9pcy12YWx1ZSI6MTc4fV0sMTc4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2Z1bmN0aW9uL25vb3AiKSgpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdCE9PW4mJm51bGwhPT10fX0seyIuLi9mdW5jdGlvbi9ub29wIjoxNjN9XSwxNzk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4vaXMtaW1wbGVtZW50ZWQiKSgpP09iamVjdC5rZXlzOnQoIi4vc2hpbSIpfSx7Ii4vaXMtaW1wbGVtZW50ZWQiOjE4MCwiLi9zaGltIjoxODF9XSwxODA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dHJ5e3JldHVybiBPYmplY3Qua2V5cygicHJpbWl0aXZlIiksITB9Y2F0Y2godCl7cmV0dXJuITF9fX0se31dLDE4MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9pcy12YWx1ZSIpLGk9T2JqZWN0LmtleXM7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpKG4odCk/T2JqZWN0KHQpOnQpfX0seyIuLi9pcy12YWx1ZSI6MTc4fV0sMTgyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vdmFsaWQtY2FsbGFibGUiKSxpPXQoIi4vZm9yLWVhY2giKSxhPUZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXt9LG89YXJndW1lbnRzWzJdO3JldHVybiBuKGUpLGkodCxmdW5jdGlvbih0LG4saSxzKXtyW25dPWEuY2FsbChlLG8sdCxuLGkscyl9KSxyfX0seyIuL2Zvci1lYWNoIjoxNzUsIi4vdmFsaWQtY2FsbGFibGUiOjE4N31dLDE4MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2lzLXZhbHVlIiksaT1BcnJheS5wcm90b3R5cGUuZm9yRWFjaCxhPU9iamVjdC5jcmVhdGU7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPWEobnVsbCk7cmV0dXJuIGkuY2FsbChhcmd1bWVudHMsZnVuY3Rpb24odCl7bih0KSYmZnVuY3Rpb24odCxlKXt2YXIgcjtmb3IociBpbiB0KWVbcl09dFtyXX0oT2JqZWN0KHQpLGUpfSksZX19LHsiLi9pcy12YWx1ZSI6MTc4fV0sMTg0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuL2lzLWltcGxlbWVudGVkIikoKT9PYmplY3Quc2V0UHJvdG90eXBlT2Y6dCgiLi9zaGltIil9LHsiLi9pcy1pbXBsZW1lbnRlZCI6MTg1LCIuL3NoaW0iOjE4Nn1dLDE4NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1PYmplY3QuY3JlYXRlLGk9T2JqZWN0LmdldFByb3RvdHlwZU9mLGE9e307ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQ9T2JqZWN0LnNldFByb3RvdHlwZU9mLGU9YXJndW1lbnRzWzBdfHxuO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0JiZpKHQoZShudWxsKSxhKSk9PT1hfX0se31dLDE4NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixpLGEsbyxzPXQoIi4uL2lzLW9iamVjdCIpLGw9dCgiLi4vdmFsaWQtdmFsdWUiKSxjPU9iamVjdC5wcm90b3R5cGUuaXNQcm90b3R5cGVPZix1PU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxoPXtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9O249ZnVuY3Rpb24odCxlKXtpZihsKHQpLG51bGw9PT1lfHxzKGUpKXJldHVybiB0O3Rocm93IG5ldyBUeXBlRXJyb3IoIlByb3RvdHlwZSBtdXN0IGJlIG51bGwgb3IgYW4gb2JqZWN0Iil9LGUuZXhwb3J0cz0oaT1mdW5jdGlvbigpe3ZhciB0LGU9T2JqZWN0LmNyZWF0ZShudWxsKSxyPXt9LG49T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPYmplY3QucHJvdG90eXBlLCJfX3Byb3RvX18iKTtpZihuKXt0cnl7KHQ9bi5zZXQpLmNhbGwoZSxyKX1jYXRjaCh0KXt9aWYoT2JqZWN0LmdldFByb3RvdHlwZU9mKGUpPT09cilyZXR1cm57c2V0OnQsbGV2ZWw6Mn19cmV0dXJuIGUuX19wcm90b19fPXIsT2JqZWN0LmdldFByb3RvdHlwZU9mKGUpPT09cj97bGV2ZWw6Mn06KChlPXt9KS5fX3Byb3RvX189cixPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk9PT1yJiZ7bGV2ZWw6MX0pfSgpKT8oMj09PWkubGV2ZWw/aS5zZXQ/KG89aS5zZXQsYT1mdW5jdGlvbih0LGUpe3JldHVybiBvLmNhbGwobih0LGUpLGUpLHR9KTphPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odCxlKS5fX3Byb3RvX189ZSx0fTphPWZ1bmN0aW9uIHQoZSxyKXt2YXIgaTtyZXR1cm4gbihlLHIpLChpPWMuY2FsbCh0Lm51bGxQb2x5ZmlsbCxlKSkmJmRlbGV0ZSB0Lm51bGxQb2x5ZmlsbC5fX3Byb3RvX18sbnVsbD09PXImJihyPXQubnVsbFBvbHlmaWxsKSxlLl9fcHJvdG9fXz1yLGkmJnUodC5udWxsUG9seWZpbGwsIl9fcHJvdG9fXyIsaCksZX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGEsImxldmVsIix7Y29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITEsdmFsdWU6aS5sZXZlbH0pKTpudWxsLHQoIi4uL2NyZWF0ZSIpfSx7Ii4uL2NyZWF0ZSI6MTc0LCIuLi9pcy1vYmplY3QiOjE3NywiLi4vdmFsaWQtdmFsdWUiOjE4OX1dLDE4NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcih0KyIgaXMgbm90IGEgZnVuY3Rpb24iKTtyZXR1cm4gdH19LHt9XSwxODg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9pcy1vYmplY3QiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoIW4odCkpdGhyb3cgbmV3IFR5cGVFcnJvcih0KyIgaXMgbm90IGFuIE9iamVjdCIpO3JldHVybiB0fX0seyIuL2lzLW9iamVjdCI6MTc3fV0sMTg5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vaXMtdmFsdWUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoIW4odCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IHVzZSBudWxsIG9yIHVuZGVmaW5lZCIpO3JldHVybiB0fX0seyIuL2lzLXZhbHVlIjoxNzh9XSwxOTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4vaXMtaW1wbGVtZW50ZWQiKSgpP1N0cmluZy5wcm90b3R5cGUuY29udGFpbnM6dCgiLi9zaGltIil9LHsiLi9pcy1pbXBsZW1lbnRlZCI6MTkxLCIuL3NoaW0iOjE5Mn1dLDE5MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj0icmF6ZHdhdHJ6eSI7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIG4uY29udGFpbnMmJighMD09PW4uY29udGFpbnMoImR3YSIpJiYhMT09PW4uY29udGFpbnMoImZvbyIpKX19LHt9XSwxOTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49U3RyaW5nLnByb3RvdHlwZS5pbmRleE9mO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbi5jYWxsKHRoaXMsdCxhcmd1bWVudHNbMV0pPi0xfX0se31dLDE5MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLGk9bi5jYWxsKCIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0fHx0JiYib2JqZWN0Ij09dHlwZW9mIHQmJih0IGluc3RhbmNlb2YgU3RyaW5nfHxuLmNhbGwodCk9PT1pKXx8ITF9fSx7fV0sMTk0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPU9iamVjdC5jcmVhdGUobnVsbCksaT1NYXRoLnJhbmRvbTtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdDtkb3t0PWkoKS50b1N0cmluZygzNikuc2xpY2UoMil9d2hpbGUoblt0XSk7cmV0dXJuIHR9fSx7fV0sMTk1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuLGk9dCgiZXM1LWV4dC9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZiIpLGE9dCgiZXM1LWV4dC9zdHJpbmcvIy9jb250YWlucyIpLG89dCgiZCIpLHM9dCgiZXM2LXN5bWJvbCIpLGw9dCgiLi8iKSxjPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTtuPWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKCEodGhpcyBpbnN0YW5jZW9mIG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNvbnN0cnVjdG9yIHJlcXVpcmVzICduZXcnIik7bC5jYWxsKHRoaXMsdCksZT1lP2EuY2FsbChlLCJrZXkrdmFsdWUiKT8ia2V5K3ZhbHVlIjphLmNhbGwoZSwia2V5Iik/ImtleSI6InZhbHVlIjoidmFsdWUiLGModGhpcywiX19raW5kX18iLG8oIiIsZSkpfSxpJiZpKG4sbCksZGVsZXRlIG4ucHJvdG90eXBlLmNvbnN0cnVjdG9yLG4ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobC5wcm90b3R5cGUse19yZXNvbHZlOm8oZnVuY3Rpb24odCl7cmV0dXJuInZhbHVlIj09PXRoaXMuX19raW5kX18/dGhpcy5fX2xpc3RfX1t0XToia2V5K3ZhbHVlIj09PXRoaXMuX19raW5kX18/W3QsdGhpcy5fX2xpc3RfX1t0XV06dH0pfSksYyhuLnByb3RvdHlwZSxzLnRvU3RyaW5nVGFnLG8oImMiLCJBcnJheSBJdGVyYXRvciIpKX0seyIuLyI6MTk4LGQ6MTM4LCJlczUtZXh0L29iamVjdC9zZXQtcHJvdG90eXBlLW9mIjoxODQsImVzNS1leHQvc3RyaW5nLyMvY29udGFpbnMiOjE5MCwiZXM2LXN5bWJvbCI6MjAzfV0sMTk2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImVzNS1leHQvZnVuY3Rpb24vaXMtYXJndW1lbnRzIiksaT10KCJlczUtZXh0L29iamVjdC92YWxpZC1jYWxsYWJsZSIpLGE9dCgiZXM1LWV4dC9zdHJpbmcvaXMtc3RyaW5nIiksbz10KCIuL2dldCIpLHM9QXJyYXkuaXNBcnJheSxsPUZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsLGM9QXJyYXkucHJvdG90eXBlLnNvbWU7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsdSxoLGYscCxkLGcsbSx2PWFyZ3VtZW50c1syXTtpZihzKHQpfHxuKHQpP3I9ImFycmF5IjphKHQpP3I9InN0cmluZyI6dD1vKHQpLGkoZSksaD1mdW5jdGlvbigpe2Y9ITB9LCJhcnJheSIhPT1yKWlmKCJzdHJpbmciIT09cilmb3IodT10Lm5leHQoKTshdS5kb25lOyl7aWYobC5jYWxsKGUsdix1LnZhbHVlLGgpLGYpcmV0dXJuO3U9dC5uZXh0KCl9ZWxzZSBmb3IoZD10Lmxlbmd0aCxwPTA7cDxkJiYoZz10W3BdLHArMTxkJiYobT1nLmNoYXJDb2RlQXQoMCkpPj01NTI5NiYmbTw9NTYzMTkmJihnKz10WysrcF0pLGwuY2FsbChlLHYsZyxoKSwhZik7KytwKTtlbHNlIGMuY2FsbCh0LGZ1bmN0aW9uKHQpe3JldHVybiBsLmNhbGwoZSx2LHQsaCksZn0pfX0seyIuL2dldCI6MTk3LCJlczUtZXh0L2Z1bmN0aW9uL2lzLWFyZ3VtZW50cyI6MTYxLCJlczUtZXh0L29iamVjdC92YWxpZC1jYWxsYWJsZSI6MTg3LCJlczUtZXh0L3N0cmluZy9pcy1zdHJpbmciOjE5M31dLDE5NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJlczUtZXh0L2Z1bmN0aW9uL2lzLWFyZ3VtZW50cyIpLGk9dCgiZXM1LWV4dC9zdHJpbmcvaXMtc3RyaW5nIiksYT10KCIuL2FycmF5Iiksbz10KCIuL3N0cmluZyIpLHM9dCgiLi92YWxpZC1pdGVyYWJsZSIpLGw9dCgiZXM2LXN5bWJvbCIpLml0ZXJhdG9yO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygcyh0KVtsXT90W2xdKCk6bih0KT9uZXcgYSh0KTppKHQpP25ldyBvKHQpOm5ldyBhKHQpfX0seyIuL2FycmF5IjoxOTUsIi4vc3RyaW5nIjoyMDAsIi4vdmFsaWQtaXRlcmFibGUiOjIwMSwiZXM1LWV4dC9mdW5jdGlvbi9pcy1hcmd1bWVudHMiOjE2MSwiZXM1LWV4dC9zdHJpbmcvaXMtc3RyaW5nIjoxOTMsImVzNi1zeW1ib2wiOjIwM31dLDE5ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixpPXQoImVzNS1leHQvYXJyYXkvIy9jbGVhciIpLGE9dCgiZXM1LWV4dC9vYmplY3QvYXNzaWduIiksbz10KCJlczUtZXh0L29iamVjdC92YWxpZC1jYWxsYWJsZSIpLHM9dCgiZXM1LWV4dC9vYmplY3QvdmFsaWQtdmFsdWUiKSxsPXQoImQiKSxjPXQoImQvYXV0by1iaW5kIiksdT10KCJlczYtc3ltYm9sIiksaD1PYmplY3QuZGVmaW5lUHJvcGVydHksZj1PYmplY3QuZGVmaW5lUHJvcGVydGllcztlLmV4cG9ydHM9bj1mdW5jdGlvbih0LGUpe2lmKCEodGhpcyBpbnN0YW5jZW9mIG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNvbnN0cnVjdG9yIHJlcXVpcmVzICduZXcnIik7Zih0aGlzLHtfX2xpc3RfXzpsKCJ3IixzKHQpKSxfX2NvbnRleHRfXzpsKCJ3IixlKSxfX25leHRJbmRleF9fOmwoInciLDApfSksZSYmKG8oZS5vbiksZS5vbigiX2FkZCIsdGhpcy5fb25BZGQpLGUub24oIl9kZWxldGUiLHRoaXMuX29uRGVsZXRlKSxlLm9uKCJfY2xlYXIiLHRoaXMuX29uQ2xlYXIpKX0sZGVsZXRlIG4ucHJvdG90eXBlLmNvbnN0cnVjdG9yLGYobi5wcm90b3R5cGUsYSh7X25leHQ6bChmdW5jdGlvbigpe3ZhciB0O2lmKHRoaXMuX19saXN0X18pcmV0dXJuIHRoaXMuX19yZWRvX18mJnZvaWQgMCE9PSh0PXRoaXMuX19yZWRvX18uc2hpZnQoKSk/dDp0aGlzLl9fbmV4dEluZGV4X188dGhpcy5fX2xpc3RfXy5sZW5ndGg/dGhpcy5fX25leHRJbmRleF9fKys6dm9pZCB0aGlzLl91bkJpbmQoKX0pLG5leHQ6bChmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jcmVhdGVSZXN1bHQodGhpcy5fbmV4dCgpKX0pLF9jcmVhdGVSZXN1bHQ6bChmdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dD97ZG9uZTohMCx2YWx1ZTp2b2lkIDB9Ontkb25lOiExLHZhbHVlOnRoaXMuX3Jlc29sdmUodCl9fSksX3Jlc29sdmU6bChmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fX2xpc3RfX1t0XX0pLF91bkJpbmQ6bChmdW5jdGlvbigpe3RoaXMuX19saXN0X189bnVsbCxkZWxldGUgdGhpcy5fX3JlZG9fXyx0aGlzLl9fY29udGV4dF9fJiYodGhpcy5fX2NvbnRleHRfXy5vZmYoIl9hZGQiLHRoaXMuX29uQWRkKSx0aGlzLl9fY29udGV4dF9fLm9mZigiX2RlbGV0ZSIsdGhpcy5fb25EZWxldGUpLHRoaXMuX19jb250ZXh0X18ub2ZmKCJfY2xlYXIiLHRoaXMuX29uQ2xlYXIpLHRoaXMuX19jb250ZXh0X189bnVsbCl9KSx0b1N0cmluZzpsKGZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgIisodGhpc1t1LnRvU3RyaW5nVGFnXXx8Ik9iamVjdCIpKyJdIn0pfSxjKHtfb25BZGQ6bChmdW5jdGlvbih0KXt0Pj10aGlzLl9fbmV4dEluZGV4X198fCgrK3RoaXMuX19uZXh0SW5kZXhfXyx0aGlzLl9fcmVkb19fPyh0aGlzLl9fcmVkb19fLmZvckVhY2goZnVuY3Rpb24oZSxyKXtlPj10JiYodGhpcy5fX3JlZG9fX1tyXT0rK2UpfSx0aGlzKSx0aGlzLl9fcmVkb19fLnB1c2godCkpOmgodGhpcywiX19yZWRvX18iLGwoImMiLFt0XSkpKX0pLF9vbkRlbGV0ZTpsKGZ1bmN0aW9uKHQpe3ZhciBlO3Q+PXRoaXMuX19uZXh0SW5kZXhfX3x8KC0tdGhpcy5fX25leHRJbmRleF9fLHRoaXMuX19yZWRvX18mJigtMSE9PShlPXRoaXMuX19yZWRvX18uaW5kZXhPZih0KSkmJnRoaXMuX19yZWRvX18uc3BsaWNlKGUsMSksdGhpcy5fX3JlZG9fXy5mb3JFYWNoKGZ1bmN0aW9uKGUscil7ZT50JiYodGhpcy5fX3JlZG9fX1tyXT0tLWUpfSx0aGlzKSkpfSksX29uQ2xlYXI6bChmdW5jdGlvbigpe3RoaXMuX19yZWRvX18mJmkuY2FsbCh0aGlzLl9fcmVkb19fKSx0aGlzLl9fbmV4dEluZGV4X189MH0pfSkpKSxoKG4ucHJvdG90eXBlLHUuaXRlcmF0b3IsbChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpfSx7ZDoxMzgsImQvYXV0by1iaW5kIjoxMzcsImVzNS1leHQvYXJyYXkvIy9jbGVhciI6MTU3LCJlczUtZXh0L29iamVjdC9hc3NpZ24iOjE3MCwiZXM1LWV4dC9vYmplY3QvdmFsaWQtY2FsbGFibGUiOjE4NywiZXM1LWV4dC9vYmplY3QvdmFsaWQtdmFsdWUiOjE4OSwiZXM2LXN5bWJvbCI6MjAzfV0sMTk5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImVzNS1leHQvZnVuY3Rpb24vaXMtYXJndW1lbnRzIiksaT10KCJlczUtZXh0L29iamVjdC9pcy12YWx1ZSIpLGE9dCgiZXM1LWV4dC9zdHJpbmcvaXMtc3RyaW5nIiksbz10KCJlczYtc3ltYm9sIikuaXRlcmF0b3Iscz1BcnJheS5pc0FycmF5O2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4hIWkodCkmJighIXModCl8fCghIWEodCl8fCghIW4odCl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0W29dKSkpfX0seyJlczUtZXh0L2Z1bmN0aW9uL2lzLWFyZ3VtZW50cyI6MTYxLCJlczUtZXh0L29iamVjdC9pcy12YWx1ZSI6MTc4LCJlczUtZXh0L3N0cmluZy9pcy1zdHJpbmciOjE5MywiZXM2LXN5bWJvbCI6MjAzfV0sMjAwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuLGk9dCgiZXM1LWV4dC9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZiIpLGE9dCgiZCIpLG89dCgiZXM2LXN5bWJvbCIpLHM9dCgiLi8iKSxsPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTtuPWUuZXhwb3J0cz1mdW5jdGlvbih0KXtpZighKHRoaXMgaW5zdGFuY2VvZiBuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDb25zdHJ1Y3RvciByZXF1aXJlcyAnbmV3JyIpO3Q9U3RyaW5nKHQpLHMuY2FsbCh0aGlzLHQpLGwodGhpcywiX19sZW5ndGhfXyIsYSgiIix0Lmxlbmd0aCkpfSxpJiZpKG4scyksZGVsZXRlIG4ucHJvdG90eXBlLmNvbnN0cnVjdG9yLG4ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUocy5wcm90b3R5cGUse19uZXh0OmEoZnVuY3Rpb24oKXtpZih0aGlzLl9fbGlzdF9fKXJldHVybiB0aGlzLl9fbmV4dEluZGV4X188dGhpcy5fX2xlbmd0aF9fP3RoaXMuX19uZXh0SW5kZXhfXysrOnZvaWQgdGhpcy5fdW5CaW5kKCl9KSxfcmVzb2x2ZTphKGZ1bmN0aW9uKHQpe3ZhciBlLHI9dGhpcy5fX2xpc3RfX1t0XTtyZXR1cm4gdGhpcy5fX25leHRJbmRleF9fPT09dGhpcy5fX2xlbmd0aF9fP3I6KGU9ci5jaGFyQ29kZUF0KDApKT49NTUyOTYmJmU8PTU2MzE5P3IrdGhpcy5fX2xpc3RfX1t0aGlzLl9fbmV4dEluZGV4X18rK106cn0pfSksbChuLnByb3RvdHlwZSxvLnRvU3RyaW5nVGFnLGEoImMiLCJTdHJpbmcgSXRlcmF0b3IiKSl9LHsiLi8iOjE5OCxkOjEzOCwiZXM1LWV4dC9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZiI6MTg0LCJlczYtc3ltYm9sIjoyMDN9XSwyMDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9pcy1pdGVyYWJsZSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtpZighbih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKHQrIiBpcyBub3QgaXRlcmFibGUiKTtyZXR1cm4gdH19LHsiLi9pcy1pdGVyYWJsZSI6MTk5fV0sMjAyOltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKG4saSl7IWZ1bmN0aW9uKHQsbil7Im9iamVjdCI9PXR5cGVvZiByJiYidW5kZWZpbmVkIiE9dHlwZW9mIGU/ZS5leHBvcnRzPW4oKTp0LkVTNlByb21pc2U9bigpfSh0aGlzLGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGUodCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHR9dmFyIHI9QXJyYXkuaXNBcnJheT9BcnJheS5pc0FycmF5OmZ1bmN0aW9uKHQpe3JldHVybiJbb2JqZWN0IEFycmF5XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9LGE9MCxvPXZvaWQgMCxzPXZvaWQgMCxsPWZ1bmN0aW9uKHQsZSl7Z1thXT10LGdbYSsxXT1lLDI9PT0oYSs9MikmJihzP3MobSk6XygpKX07dmFyIGM9InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OnZvaWQgMCx1PWN8fHt9LGg9dS5NdXRhdGlvbk9ic2VydmVyfHx1LldlYktpdE11dGF0aW9uT2JzZXJ2ZXIsZj0idW5kZWZpbmVkIj09dHlwZW9mIHNlbGYmJiJ1bmRlZmluZWQiIT10eXBlb2YgbiYmIltvYmplY3QgcHJvY2Vzc10iPT09e30udG9TdHJpbmcuY2FsbChuKSxwPSJ1bmRlZmluZWQiIT10eXBlb2YgVWludDhDbGFtcGVkQXJyYXkmJiJ1bmRlZmluZWQiIT10eXBlb2YgaW1wb3J0U2NyaXB0cyYmInVuZGVmaW5lZCIhPXR5cGVvZiBNZXNzYWdlQ2hhbm5lbDtmdW5jdGlvbiBkKCl7dmFyIHQ9c2V0VGltZW91dDtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdChtLDEpfX12YXIgZz1uZXcgQXJyYXkoMWUzKTtmdW5jdGlvbiBtKCl7Zm9yKHZhciB0PTA7dDxhO3QrPTIpeygwLGdbdF0pKGdbdCsxXSksZ1t0XT12b2lkIDAsZ1t0KzFdPXZvaWQgMH1hPTB9dmFyIHYseSx4LGIsXz12b2lkIDA7ZnVuY3Rpb24gdyh0LGUpe3ZhciByPWFyZ3VtZW50cyxuPXRoaXMsaT1uZXcgdGhpcy5jb25zdHJ1Y3RvcihBKTt2b2lkIDA9PT1pW01dJiZVKGkpO3ZhciBhLG89bi5fc3RhdGU7cmV0dXJuIG8/KGE9cltvLTFdLGwoZnVuY3Rpb24oKXtyZXR1cm4gaihvLGksYSxuLl9yZXN1bHQpfSkpOlIobixpLHQsZSksaX1mdW5jdGlvbiBrKHQpe2lmKHQmJiJvYmplY3QiPT10eXBlb2YgdCYmdC5jb25zdHJ1Y3Rvcj09PXRoaXMpcmV0dXJuIHQ7dmFyIGU9bmV3IHRoaXMoQSk7cmV0dXJuIFAoZSx0KSxlfWY/Xz1mdW5jdGlvbigpe3JldHVybiBuLm5leHRUaWNrKG0pfTpoPyh5PTAseD1uZXcgaChtKSxiPWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIiKSx4Lm9ic2VydmUoYix7Y2hhcmFjdGVyRGF0YTohMH0pLF89ZnVuY3Rpb24oKXtiLmRhdGE9eT0rK3klMn0pOnA/KCh2PW5ldyBNZXNzYWdlQ2hhbm5lbCkucG9ydDEub25tZXNzYWdlPW0sXz1mdW5jdGlvbigpe3JldHVybiB2LnBvcnQyLnBvc3RNZXNzYWdlKDApfSk6Xz12b2lkIDA9PT1jJiYiZnVuY3Rpb24iPT10eXBlb2YgdD9mdW5jdGlvbigpe3RyeXt2YXIgZT10KCJ2ZXJ0eCIpO3JldHVybiBvPWUucnVuT25Mb29wfHxlLnJ1bk9uQ29udGV4dCxmdW5jdGlvbigpe28obSl9fWNhdGNoKHQpe3JldHVybiBkKCl9fSgpOmQoKTt2YXIgTT1NYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMTYpO2Z1bmN0aW9uIEEoKXt9dmFyIFQ9dm9pZCAwLFM9MSxFPTIsQz1uZXcgRjtmdW5jdGlvbiBMKHQpe3RyeXtyZXR1cm4gdC50aGVufWNhdGNoKHQpe3JldHVybiBDLmVycm9yPXQsQ319ZnVuY3Rpb24geih0LHIsbil7ci5jb25zdHJ1Y3Rvcj09PXQuY29uc3RydWN0b3ImJm49PT13JiZyLmNvbnN0cnVjdG9yLnJlc29sdmU9PT1rP2Z1bmN0aW9uKHQsZSl7ZS5fc3RhdGU9PT1TP08odCxlLl9yZXN1bHQpOmUuX3N0YXRlPT09RT9EKHQsZS5fcmVzdWx0KTpSKGUsdm9pZCAwLGZ1bmN0aW9uKGUpe3JldHVybiBQKHQsZSl9LGZ1bmN0aW9uKGUpe3JldHVybiBEKHQsZSl9KX0odCxyKTpuPT09Qz9EKHQsQy5lcnJvcik6dm9pZCAwPT09bj9PKHQscik6ZShuKT9mdW5jdGlvbih0LGUscil7bChmdW5jdGlvbih0KXt2YXIgbj0hMSxpPWZ1bmN0aW9uKHQsZSxyLG4pe3RyeXt0LmNhbGwoZSxyLG4pfWNhdGNoKHQpe3JldHVybiB0fX0ocixlLGZ1bmN0aW9uKHIpe258fChuPSEwLGUhPT1yP1AodCxyKTpPKHQscikpfSxmdW5jdGlvbihlKXtufHwobj0hMCxEKHQsZSkpfSx0Ll9sYWJlbCk7IW4mJmkmJihuPSEwLEQodCxpKSl9LHQpfSh0LHIsbik6Tyh0LHIpfWZ1bmN0aW9uIFAodCxlKXt2YXIgcjt0PT09ZT9EKHQsbmV3IFR5cGVFcnJvcigiWW91IGNhbm5vdCByZXNvbHZlIGEgcHJvbWlzZSB3aXRoIGl0c2VsZiIpKToiZnVuY3Rpb24iPT10eXBlb2Yocj1lKXx8Im9iamVjdCI9PXR5cGVvZiByJiZudWxsIT09cj96KHQsZSxMKGUpKTpPKHQsZSl9ZnVuY3Rpb24gSSh0KXt0Ll9vbmVycm9yJiZ0Ll9vbmVycm9yKHQuX3Jlc3VsdCksQih0KX1mdW5jdGlvbiBPKHQsZSl7dC5fc3RhdGU9PT1UJiYodC5fcmVzdWx0PWUsdC5fc3RhdGU9UywwIT09dC5fc3Vic2NyaWJlcnMubGVuZ3RoJiZsKEIsdCkpfWZ1bmN0aW9uIEQodCxlKXt0Ll9zdGF0ZT09PVQmJih0Ll9zdGF0ZT1FLHQuX3Jlc3VsdD1lLGwoSSx0KSl9ZnVuY3Rpb24gUih0LGUscixuKXt2YXIgaT10Ll9zdWJzY3JpYmVycyxhPWkubGVuZ3RoO3QuX29uZXJyb3I9bnVsbCxpW2FdPWUsaVthK1NdPXIsaVthK0VdPW4sMD09PWEmJnQuX3N0YXRlJiZsKEIsdCl9ZnVuY3Rpb24gQih0KXt2YXIgZT10Ll9zdWJzY3JpYmVycyxyPXQuX3N0YXRlO2lmKDAhPT1lLmxlbmd0aCl7Zm9yKHZhciBuPXZvaWQgMCxpPXZvaWQgMCxhPXQuX3Jlc3VsdCxvPTA7bzxlLmxlbmd0aDtvKz0zKW49ZVtvXSxpPWVbbytyXSxuP2oocixuLGksYSk6aShhKTt0Ll9zdWJzY3JpYmVycy5sZW5ndGg9MH19ZnVuY3Rpb24gRigpe3RoaXMuZXJyb3I9bnVsbH12YXIgTj1uZXcgRjtmdW5jdGlvbiBqKHQscixuLGkpe3ZhciBhPWUobiksbz12b2lkIDAscz12b2lkIDAsbD12b2lkIDAsYz12b2lkIDA7aWYoYSl7aWYoKG89ZnVuY3Rpb24odCxlKXt0cnl7cmV0dXJuIHQoZSl9Y2F0Y2godCl7cmV0dXJuIE4uZXJyb3I9dCxOfX0obixpKSk9PT1OPyhjPSEwLHM9by5lcnJvcixvPW51bGwpOmw9ITAscj09PW8pcmV0dXJuIHZvaWQgRChyLG5ldyBUeXBlRXJyb3IoIkEgcHJvbWlzZXMgY2FsbGJhY2sgY2Fubm90IHJldHVybiB0aGF0IHNhbWUgcHJvbWlzZS4iKSl9ZWxzZSBvPWksbD0hMDtyLl9zdGF0ZSE9PVR8fChhJiZsP1AocixvKTpjP0QocixzKTp0PT09Uz9PKHIsbyk6dD09PUUmJkQocixvKSl9dmFyIFY9MDtmdW5jdGlvbiBVKHQpe3RbTV09VisrLHQuX3N0YXRlPXZvaWQgMCx0Ll9yZXN1bHQ9dm9pZCAwLHQuX3N1YnNjcmliZXJzPVtdfWZ1bmN0aW9uIHEodCxlKXt0aGlzLl9pbnN0YW5jZUNvbnN0cnVjdG9yPXQsdGhpcy5wcm9taXNlPW5ldyB0KEEpLHRoaXMucHJvbWlzZVtNXXx8VSh0aGlzLnByb21pc2UpLHIoZSk/KHRoaXMuX2lucHV0PWUsdGhpcy5sZW5ndGg9ZS5sZW5ndGgsdGhpcy5fcmVtYWluaW5nPWUubGVuZ3RoLHRoaXMuX3Jlc3VsdD1uZXcgQXJyYXkodGhpcy5sZW5ndGgpLDA9PT10aGlzLmxlbmd0aD9PKHRoaXMucHJvbWlzZSx0aGlzLl9yZXN1bHQpOih0aGlzLmxlbmd0aD10aGlzLmxlbmd0aHx8MCx0aGlzLl9lbnVtZXJhdGUoKSwwPT09dGhpcy5fcmVtYWluaW5nJiZPKHRoaXMucHJvbWlzZSx0aGlzLl9yZXN1bHQpKSk6RCh0aGlzLnByb21pc2UsbmV3IEVycm9yKCJBcnJheSBNZXRob2RzIG11c3QgYmUgcHJvdmlkZWQgYW4gQXJyYXkiKSl9ZnVuY3Rpb24gSCh0KXt0aGlzW01dPVYrKyx0aGlzLl9yZXN1bHQ9dGhpcy5fc3RhdGU9dm9pZCAwLHRoaXMuX3N1YnNjcmliZXJzPVtdLEEhPT10JiYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJmZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiWW91IG11c3QgcGFzcyBhIHJlc29sdmVyIGZ1bmN0aW9uIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgcHJvbWlzZSBjb25zdHJ1Y3RvciIpfSgpLHRoaXMgaW5zdGFuY2VvZiBIP2Z1bmN0aW9uKHQsZSl7dHJ5e2UoZnVuY3Rpb24oZSl7UCh0LGUpfSxmdW5jdGlvbihlKXtEKHQsZSl9KX1jYXRjaChlKXtEKHQsZSl9fSh0aGlzLHQpOmZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiRmFpbGVkIHRvIGNvbnN0cnVjdCAnUHJvbWlzZSc6IFBsZWFzZSB1c2UgdGhlICduZXcnIG9wZXJhdG9yLCB0aGlzIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uIil9KCkpfWZ1bmN0aW9uIEcoKXt2YXIgdD12b2lkIDA7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBpKXQ9aTtlbHNlIGlmKCJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZil0PXNlbGY7ZWxzZSB0cnl7dD1GdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpfWNhdGNoKHQpe3Rocm93IG5ldyBFcnJvcigicG9seWZpbGwgZmFpbGVkIGJlY2F1c2UgZ2xvYmFsIG9iamVjdCBpcyB1bmF2YWlsYWJsZSBpbiB0aGlzIGVudmlyb25tZW50Iil9dmFyIGU9dC5Qcm9taXNlO2lmKGUpe3ZhciByPW51bGw7dHJ5e3I9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUucmVzb2x2ZSgpKX1jYXRjaCh0KXt9aWYoIltvYmplY3QgUHJvbWlzZV0iPT09ciYmIWUuY2FzdClyZXR1cm59dC5Qcm9taXNlPUh9cmV0dXJuIHEucHJvdG90eXBlLl9lbnVtZXJhdGU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5sZW5ndGgsZT10aGlzLl9pbnB1dCxyPTA7dGhpcy5fc3RhdGU9PT1UJiZyPHQ7cisrKXRoaXMuX2VhY2hFbnRyeShlW3JdLHIpfSxxLnByb3RvdHlwZS5fZWFjaEVudHJ5PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5faW5zdGFuY2VDb25zdHJ1Y3RvcixuPXIucmVzb2x2ZTtpZihuPT09ayl7dmFyIGk9TCh0KTtpZihpPT09dyYmdC5fc3RhdGUhPT1UKXRoaXMuX3NldHRsZWRBdCh0Ll9zdGF0ZSxlLHQuX3Jlc3VsdCk7ZWxzZSBpZigiZnVuY3Rpb24iIT10eXBlb2YgaSl0aGlzLl9yZW1haW5pbmctLSx0aGlzLl9yZXN1bHRbZV09dDtlbHNlIGlmKHI9PT1IKXt2YXIgYT1uZXcgcihBKTt6KGEsdCxpKSx0aGlzLl93aWxsU2V0dGxlQXQoYSxlKX1lbHNlIHRoaXMuX3dpbGxTZXR0bGVBdChuZXcgcihmdW5jdGlvbihlKXtyZXR1cm4gZSh0KX0pLGUpfWVsc2UgdGhpcy5fd2lsbFNldHRsZUF0KG4odCksZSl9LHEucHJvdG90eXBlLl9zZXR0bGVkQXQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMucHJvbWlzZTtuLl9zdGF0ZT09PVQmJih0aGlzLl9yZW1haW5pbmctLSx0PT09RT9EKG4scik6dGhpcy5fcmVzdWx0W2VdPXIpLDA9PT10aGlzLl9yZW1haW5pbmcmJk8obix0aGlzLl9yZXN1bHQpfSxxLnByb3RvdHlwZS5fd2lsbFNldHRsZUF0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcztSKHQsdm9pZCAwLGZ1bmN0aW9uKHQpe3JldHVybiByLl9zZXR0bGVkQXQoUyxlLHQpfSxmdW5jdGlvbih0KXtyZXR1cm4gci5fc2V0dGxlZEF0KEUsZSx0KX0pfSxILmFsbD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHEodGhpcyx0KS5wcm9taXNlfSxILnJhY2U9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gcih0KT9uZXcgZShmdW5jdGlvbihyLG4pe2Zvcih2YXIgaT10Lmxlbmd0aCxhPTA7YTxpO2ErKyllLnJlc29sdmUodFthXSkudGhlbihyLG4pfSk6bmV3IGUoZnVuY3Rpb24odCxlKXtyZXR1cm4gZShuZXcgVHlwZUVycm9yKCJZb3UgbXVzdCBwYXNzIGFuIGFycmF5IHRvIHJhY2UuIikpfSl9LEgucmVzb2x2ZT1rLEgucmVqZWN0PWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyB0aGlzKEEpO3JldHVybiBEKGUsdCksZX0sSC5fc2V0U2NoZWR1bGVyPWZ1bmN0aW9uKHQpe3M9dH0sSC5fc2V0QXNhcD1mdW5jdGlvbih0KXtsPXR9LEguX2FzYXA9bCxILnByb3RvdHlwZT17Y29uc3RydWN0b3I6SCx0aGVuOncsY2F0Y2g6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudGhlbihudWxsLHQpfX0sRygpLEgucG9seWZpbGw9RyxILlByb21pc2U9SCxIfSl9KS5jYWxsKHRoaXMsdCgiX3Byb2Nlc3MiKSwidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0se19wcm9jZXNzOjQ0OX1dLDIwMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi9pcy1pbXBsZW1lbnRlZCIpKCk/U3ltYm9sOnQoIi4vcG9seWZpbGwiKX0seyIuL2lzLWltcGxlbWVudGVkIjoyMDQsIi4vcG9seWZpbGwiOjIwNn1dLDIwNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17b2JqZWN0OiEwLHN5bWJvbDohMH07ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQ7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIFN5bWJvbClyZXR1cm4hMTt0PVN5bWJvbCgidGVzdCBzeW1ib2wiKTt0cnl7U3RyaW5nKHQpfWNhdGNoKHQpe3JldHVybiExfXJldHVybiEhblt0eXBlb2YgU3ltYm9sLml0ZXJhdG9yXSYmKCEhblt0eXBlb2YgU3ltYm9sLnRvUHJpbWl0aXZlXSYmISFuW3R5cGVvZiBTeW1ib2wudG9TdHJpbmdUYWddKX19LHt9XSwyMDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiEhdCYmKCJzeW1ib2wiPT10eXBlb2YgdHx8ISF0LmNvbnN0cnVjdG9yJiYoIlN5bWJvbCI9PT10LmNvbnN0cnVjdG9yLm5hbWUmJiJTeW1ib2wiPT09dFt0LmNvbnN0cnVjdG9yLnRvU3RyaW5nVGFnXSkpfX0se31dLDIwNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixpLGEsbyxzPXQoImQiKSxsPXQoIi4vdmFsaWRhdGUtc3ltYm9sIiksYz1PYmplY3QuY3JlYXRlLHU9T2JqZWN0LmRlZmluZVByb3BlcnRpZXMsaD1PYmplY3QuZGVmaW5lUHJvcGVydHksZj1PYmplY3QucHJvdG90eXBlLHA9YyhudWxsKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sKXtuPVN5bWJvbDt0cnl7U3RyaW5nKG4oKSksbz0hMH1jYXRjaCh0KXt9fXZhciBkLGc9KGQ9YyhudWxsKSxmdW5jdGlvbih0KXtmb3IodmFyIGUscixuPTA7ZFt0KyhufHwiIildOykrK247cmV0dXJuIGRbdCs9bnx8IiJdPSEwLGgoZixlPSJAQCIrdCxzLmdzKG51bGwsZnVuY3Rpb24odCl7cnx8KHI9ITAsaCh0aGlzLGUscyh0KSkscj0hMSl9KSksZX0pO2E9ZnVuY3Rpb24odCl7aWYodGhpcyBpbnN0YW5jZW9mIGEpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yIik7cmV0dXJuIGkodCl9LGUuZXhwb3J0cz1pPWZ1bmN0aW9uIHQoZSl7dmFyIHI7aWYodGhpcyBpbnN0YW5jZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yIik7cmV0dXJuIG8/bihlKToocj1jKGEucHJvdG90eXBlKSxlPXZvaWQgMD09PWU/IiI6U3RyaW5nKGUpLHUocix7X19kZXNjcmlwdGlvbl9fOnMoIiIsZSksX19uYW1lX186cygiIixnKGUpKX0pKX0sdShpLHtmb3I6cyhmdW5jdGlvbih0KXtyZXR1cm4gcFt0XT9wW3RdOnBbdF09aShTdHJpbmcodCkpfSksa2V5Rm9yOnMoZnVuY3Rpb24odCl7dmFyIGU7Zm9yKGUgaW4gbCh0KSxwKWlmKHBbZV09PT10KXJldHVybiBlfSksaGFzSW5zdGFuY2U6cygiIixuJiZuLmhhc0luc3RhbmNlfHxpKCJoYXNJbnN0YW5jZSIpKSxpc0NvbmNhdFNwcmVhZGFibGU6cygiIixuJiZuLmlzQ29uY2F0U3ByZWFkYWJsZXx8aSgiaXNDb25jYXRTcHJlYWRhYmxlIikpLGl0ZXJhdG9yOnMoIiIsbiYmbi5pdGVyYXRvcnx8aSgiaXRlcmF0b3IiKSksbWF0Y2g6cygiIixuJiZuLm1hdGNofHxpKCJtYXRjaCIpKSxyZXBsYWNlOnMoIiIsbiYmbi5yZXBsYWNlfHxpKCJyZXBsYWNlIikpLHNlYXJjaDpzKCIiLG4mJm4uc2VhcmNofHxpKCJzZWFyY2giKSksc3BlY2llczpzKCIiLG4mJm4uc3BlY2llc3x8aSgic3BlY2llcyIpKSxzcGxpdDpzKCIiLG4mJm4uc3BsaXR8fGkoInNwbGl0IikpLHRvUHJpbWl0aXZlOnMoIiIsbiYmbi50b1ByaW1pdGl2ZXx8aSgidG9QcmltaXRpdmUiKSksdG9TdHJpbmdUYWc6cygiIixuJiZuLnRvU3RyaW5nVGFnfHxpKCJ0b1N0cmluZ1RhZyIpKSx1bnNjb3BhYmxlczpzKCIiLG4mJm4udW5zY29wYWJsZXN8fGkoInVuc2NvcGFibGVzIikpfSksdShhLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6cyhpKSx0b1N0cmluZzpzKCIiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19uYW1lX199KX0pLHUoaS5wcm90b3R5cGUse3RvU3RyaW5nOnMoZnVuY3Rpb24oKXtyZXR1cm4iU3ltYm9sICgiK2wodGhpcykuX19kZXNjcmlwdGlvbl9fKyIpIn0pLHZhbHVlT2Y6cyhmdW5jdGlvbigpe3JldHVybiBsKHRoaXMpfSl9KSxoKGkucHJvdG90eXBlLGkudG9QcmltaXRpdmUscygiIixmdW5jdGlvbigpe3ZhciB0PWwodGhpcyk7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0P3Q6dC50b1N0cmluZygpfSkpLGgoaS5wcm90b3R5cGUsaS50b1N0cmluZ1RhZyxzKCJjIiwiU3ltYm9sIikpLGgoYS5wcm90b3R5cGUsaS50b1N0cmluZ1RhZyxzKCJjIixpLnByb3RvdHlwZVtpLnRvU3RyaW5nVGFnXSkpLGgoYS5wcm90b3R5cGUsaS50b1ByaW1pdGl2ZSxzKCJjIixpLnByb3RvdHlwZVtpLnRvUHJpbWl0aXZlXSkpfSx7Ii4vdmFsaWRhdGUtc3ltYm9sIjoyMDcsZDoxMzh9XSwyMDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9pcy1zeW1ib2wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoIW4odCkpdGhyb3cgbmV3IFR5cGVFcnJvcih0KyIgaXMgbm90IGEgc3ltYm9sIik7cmV0dXJuIHR9fSx7Ii4vaXMtc3ltYm9sIjoyMDV9XSwyMDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4vaXMtaW1wbGVtZW50ZWQiKSgpP1dlYWtNYXA6dCgiLi9wb2x5ZmlsbCIpfSx7Ii4vaXMtaW1wbGVtZW50ZWQiOjIwOSwiLi9wb2x5ZmlsbCI6MjExfV0sMjA5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciB0LGU7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIFdlYWtNYXApcmV0dXJuITE7dHJ5e3Q9bmV3IFdlYWtNYXAoW1tlPXt9LCJvbmUiXSxbe30sInR3byJdLFt7fSwidGhyZWUiXV0pfWNhdGNoKHQpe3JldHVybiExfXJldHVybiJbb2JqZWN0IFdlYWtNYXBdIj09PVN0cmluZyh0KSYmKCJmdW5jdGlvbiI9PXR5cGVvZiB0LnNldCYmKHQuc2V0KHt9LDEpPT09dCYmKCJmdW5jdGlvbiI9PXR5cGVvZiB0LmRlbGV0ZSYmKCJmdW5jdGlvbiI9PXR5cGVvZiB0LmhhcyYmIm9uZSI9PT10LmdldChlKSkpKSl9fSx7fV0sMjEwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz0iZnVuY3Rpb24iPT10eXBlb2YgV2Vha01hcCYmIltvYmplY3QgV2Vha01hcF0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG5ldyBXZWFrTWFwKX0se31dLDIxMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixpPXQoImVzNS1leHQvb2JqZWN0L3NldC1wcm90b3R5cGUtb2YiKSxhPXQoImVzNS1leHQvb2JqZWN0L3ZhbGlkLW9iamVjdCIpLG89dCgiZXM1LWV4dC9vYmplY3QvdmFsaWQtdmFsdWUiKSxzPXQoImVzNS1leHQvc3RyaW5nL3JhbmRvbS11bmlxIiksbD10KCJkIiksYz10KCJlczYtaXRlcmF0b3IvZ2V0IiksdT10KCJlczYtaXRlcmF0b3IvZm9yLW9mIiksaD10KCJlczYtc3ltYm9sIikudG9TdHJpbmdUYWcsZj10KCIuL2lzLW5hdGl2ZS1pbXBsZW1lbnRlZCIpLHA9QXJyYXkuaXNBcnJheSxkPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxnPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksbT1PYmplY3QuZ2V0UHJvdG90eXBlT2Y7ZS5leHBvcnRzPW49ZnVuY3Rpb24oKXt2YXIgdCxlPWFyZ3VtZW50c1swXTtpZighKHRoaXMgaW5zdGFuY2VvZiBuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDb25zdHJ1Y3RvciByZXF1aXJlcyAnbmV3JyIpO3JldHVybiB0PWYmJmkmJldlYWtNYXAhPT1uP2kobmV3IFdlYWtNYXAsbSh0aGlzKSk6dGhpcyxudWxsIT1lJiYocChlKXx8KGU9YyhlKSkpLGQodCwiX193ZWFrTWFwRGF0YV9fIixsKCJjIiwiJHdlYWtNYXAkIitzKCkpKSxlPyh1KGUsZnVuY3Rpb24oZSl7byhlKSx0LnNldChlWzBdLGVbMV0pfSksdCk6dH0sZiYmKGkmJmkobixXZWFrTWFwKSxuLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFdlYWtNYXAucHJvdG90eXBlLHtjb25zdHJ1Y3RvcjpsKG4pfSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG4ucHJvdG90eXBlLHtkZWxldGU6bChmdW5jdGlvbih0KXtyZXR1cm4hIWcuY2FsbChhKHQpLHRoaXMuX193ZWFrTWFwRGF0YV9fKSYmKGRlbGV0ZSB0W3RoaXMuX193ZWFrTWFwRGF0YV9fXSwhMCl9KSxnZXQ6bChmdW5jdGlvbih0KXtpZihnLmNhbGwoYSh0KSx0aGlzLl9fd2Vha01hcERhdGFfXykpcmV0dXJuIHRbdGhpcy5fX3dlYWtNYXBEYXRhX19dfSksaGFzOmwoZnVuY3Rpb24odCl7cmV0dXJuIGcuY2FsbChhKHQpLHRoaXMuX193ZWFrTWFwRGF0YV9fKX0pLHNldDpsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGQoYSh0KSx0aGlzLl9fd2Vha01hcERhdGFfXyxsKCJjIixlKSksdGhpc30pLHRvU3RyaW5nOmwoZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBXZWFrTWFwXSJ9KX0pLGQobi5wcm90b3R5cGUsaCxsKCJjIiwiV2Vha01hcCIpKX0seyIuL2lzLW5hdGl2ZS1pbXBsZW1lbnRlZCI6MjEwLGQ6MTM4LCJlczUtZXh0L29iamVjdC9zZXQtcHJvdG90eXBlLW9mIjoxODQsImVzNS1leHQvb2JqZWN0L3ZhbGlkLW9iamVjdCI6MTg4LCJlczUtZXh0L29iamVjdC92YWxpZC12YWx1ZSI6MTg5LCJlczUtZXh0L3N0cmluZy9yYW5kb20tdW5pcSI6MTk0LCJlczYtaXRlcmF0b3IvZm9yLW9mIjoxOTYsImVzNi1pdGVyYXRvci9nZXQiOjE5NywiZXM2LXN5bWJvbCI6MjAzfV0sMjEyOltmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbigpe3RoaXMuX2V2ZW50cz10aGlzLl9ldmVudHN8fHt9LHRoaXMuX21heExpc3RlbmVycz10aGlzLl9tYXhMaXN0ZW5lcnN8fHZvaWQgMH1mdW5jdGlvbiBpKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0fWZ1bmN0aW9uIGEodCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB0JiZudWxsIT09dH1mdW5jdGlvbiBvKHQpe3JldHVybiB2b2lkIDA9PT10fWUuZXhwb3J0cz1uLG4uRXZlbnRFbWl0dGVyPW4sbi5wcm90b3R5cGUuX2V2ZW50cz12b2lkIDAsbi5wcm90b3R5cGUuX21heExpc3RlbmVycz12b2lkIDAsbi5kZWZhdWx0TWF4TGlzdGVuZXJzPTEwLG4ucHJvdG90eXBlLnNldE1heExpc3RlbmVycz1mdW5jdGlvbih0KXtpZigibnVtYmVyIiE9dHlwZW9mIHR8fHQ8MHx8aXNOYU4odCkpdGhyb3cgVHlwZUVycm9yKCJuIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXIiKTtyZXR1cm4gdGhpcy5fbWF4TGlzdGVuZXJzPXQsdGhpc30sbi5wcm90b3R5cGUuZW1pdD1mdW5jdGlvbih0KXt2YXIgZSxyLG4scyxsLGM7aWYodGhpcy5fZXZlbnRzfHwodGhpcy5fZXZlbnRzPXt9KSwiZXJyb3IiPT09dCYmKCF0aGlzLl9ldmVudHMuZXJyb3J8fGEodGhpcy5fZXZlbnRzLmVycm9yKSYmIXRoaXMuX2V2ZW50cy5lcnJvci5sZW5ndGgpKXtpZigoZT1hcmd1bWVudHNbMV0paW5zdGFuY2VvZiBFcnJvcil0aHJvdyBlO3ZhciB1PW5ldyBFcnJvcignVW5jYXVnaHQsIHVuc3BlY2lmaWVkICJlcnJvciIgZXZlbnQuICgnK2UrIikiKTt0aHJvdyB1LmNvbnRleHQ9ZSx1fWlmKG8ocj10aGlzLl9ldmVudHNbdF0pKXJldHVybiExO2lmKGkocikpc3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMTpyLmNhbGwodGhpcyk7YnJlYWs7Y2FzZSAyOnIuY2FsbCh0aGlzLGFyZ3VtZW50c1sxXSk7YnJlYWs7Y2FzZSAzOnIuY2FsbCh0aGlzLGFyZ3VtZW50c1sxXSxhcmd1bWVudHNbMl0pO2JyZWFrO2RlZmF1bHQ6cz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSksci5hcHBseSh0aGlzLHMpfWVsc2UgaWYoYShyKSlmb3Iocz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSksbj0oYz1yLnNsaWNlKCkpLmxlbmd0aCxsPTA7bDxuO2wrKyljW2xdLmFwcGx5KHRoaXMscyk7cmV0dXJuITB9LG4ucHJvdG90eXBlLmFkZExpc3RlbmVyPWZ1bmN0aW9uKHQsZSl7dmFyIHI7aWYoIWkoZSkpdGhyb3cgVHlwZUVycm9yKCJsaXN0ZW5lciBtdXN0IGJlIGEgZnVuY3Rpb24iKTtyZXR1cm4gdGhpcy5fZXZlbnRzfHwodGhpcy5fZXZlbnRzPXt9KSx0aGlzLl9ldmVudHMubmV3TGlzdGVuZXImJnRoaXMuZW1pdCgibmV3TGlzdGVuZXIiLHQsaShlLmxpc3RlbmVyKT9lLmxpc3RlbmVyOmUpLHRoaXMuX2V2ZW50c1t0XT9hKHRoaXMuX2V2ZW50c1t0XSk/dGhpcy5fZXZlbnRzW3RdLnB1c2goZSk6dGhpcy5fZXZlbnRzW3RdPVt0aGlzLl9ldmVudHNbdF0sZV06dGhpcy5fZXZlbnRzW3RdPWUsYSh0aGlzLl9ldmVudHNbdF0pJiYhdGhpcy5fZXZlbnRzW3RdLndhcm5lZCYmKHI9byh0aGlzLl9tYXhMaXN0ZW5lcnMpP24uZGVmYXVsdE1heExpc3RlbmVyczp0aGlzLl9tYXhMaXN0ZW5lcnMpJiZyPjAmJnRoaXMuX2V2ZW50c1t0XS5sZW5ndGg+ciYmKHRoaXMuX2V2ZW50c1t0XS53YXJuZWQ9ITAsY29uc29sZS5lcnJvcigiKG5vZGUpIHdhcm5pbmc6IHBvc3NpYmxlIEV2ZW50RW1pdHRlciBtZW1vcnkgbGVhayBkZXRlY3RlZC4gJWQgbGlzdGVuZXJzIGFkZGVkLiBVc2UgZW1pdHRlci5zZXRNYXhMaXN0ZW5lcnMoKSB0byBpbmNyZWFzZSBsaW1pdC4iLHRoaXMuX2V2ZW50c1t0XS5sZW5ndGgpLCJmdW5jdGlvbiI9PXR5cGVvZiBjb25zb2xlLnRyYWNlJiZjb25zb2xlLnRyYWNlKCkpLHRoaXN9LG4ucHJvdG90eXBlLm9uPW4ucHJvdG90eXBlLmFkZExpc3RlbmVyLG4ucHJvdG90eXBlLm9uY2U9ZnVuY3Rpb24odCxlKXtpZighaShlKSl0aHJvdyBUeXBlRXJyb3IoImxpc3RlbmVyIG11c3QgYmUgYSBmdW5jdGlvbiIpO3ZhciByPSExO2Z1bmN0aW9uIG4oKXt0aGlzLnJlbW92ZUxpc3RlbmVyKHQsbikscnx8KHI9ITAsZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXJldHVybiBuLmxpc3RlbmVyPWUsdGhpcy5vbih0LG4pLHRoaXN9LG4ucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixvLHM7aWYoIWkoZSkpdGhyb3cgVHlwZUVycm9yKCJsaXN0ZW5lciBtdXN0IGJlIGEgZnVuY3Rpb24iKTtpZighdGhpcy5fZXZlbnRzfHwhdGhpcy5fZXZlbnRzW3RdKXJldHVybiB0aGlzO2lmKG89KHI9dGhpcy5fZXZlbnRzW3RdKS5sZW5ndGgsbj0tMSxyPT09ZXx8aShyLmxpc3RlbmVyKSYmci5saXN0ZW5lcj09PWUpZGVsZXRlIHRoaXMuX2V2ZW50c1t0XSx0aGlzLl9ldmVudHMucmVtb3ZlTGlzdGVuZXImJnRoaXMuZW1pdCgicmVtb3ZlTGlzdGVuZXIiLHQsZSk7ZWxzZSBpZihhKHIpKXtmb3Iocz1vO3MtLSA+MDspaWYocltzXT09PWV8fHJbc10ubGlzdGVuZXImJnJbc10ubGlzdGVuZXI9PT1lKXtuPXM7YnJlYWt9aWYobjwwKXJldHVybiB0aGlzOzE9PT1yLmxlbmd0aD8oci5sZW5ndGg9MCxkZWxldGUgdGhpcy5fZXZlbnRzW3RdKTpyLnNwbGljZShuLDEpLHRoaXMuX2V2ZW50cy5yZW1vdmVMaXN0ZW5lciYmdGhpcy5lbWl0KCJyZW1vdmVMaXN0ZW5lciIsdCxlKX1yZXR1cm4gdGhpc30sbi5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzPWZ1bmN0aW9uKHQpe3ZhciBlLHI7aWYoIXRoaXMuX2V2ZW50cylyZXR1cm4gdGhpcztpZighdGhpcy5fZXZlbnRzLnJlbW92ZUxpc3RlbmVyKXJldHVybiAwPT09YXJndW1lbnRzLmxlbmd0aD90aGlzLl9ldmVudHM9e306dGhpcy5fZXZlbnRzW3RdJiZkZWxldGUgdGhpcy5fZXZlbnRzW3RdLHRoaXM7aWYoMD09PWFyZ3VtZW50cy5sZW5ndGgpe2ZvcihlIGluIHRoaXMuX2V2ZW50cykicmVtb3ZlTGlzdGVuZXIiIT09ZSYmdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoZSk7cmV0dXJuIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCJyZW1vdmVMaXN0ZW5lciIpLHRoaXMuX2V2ZW50cz17fSx0aGlzfWlmKGkocj10aGlzLl9ldmVudHNbdF0pKXRoaXMucmVtb3ZlTGlzdGVuZXIodCxyKTtlbHNlIGlmKHIpZm9yKDtyLmxlbmd0aDspdGhpcy5yZW1vdmVMaXN0ZW5lcih0LHJbci5sZW5ndGgtMV0pO3JldHVybiBkZWxldGUgdGhpcy5fZXZlbnRzW3RdLHRoaXN9LG4ucHJvdG90eXBlLmxpc3RlbmVycz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZXZlbnRzJiZ0aGlzLl9ldmVudHNbdF0/aSh0aGlzLl9ldmVudHNbdF0pP1t0aGlzLl9ldmVudHNbdF1dOnRoaXMuX2V2ZW50c1t0XS5zbGljZSgpOltdfSxuLnByb3RvdHlwZS5saXN0ZW5lckNvdW50PWZ1bmN0aW9uKHQpe2lmKHRoaXMuX2V2ZW50cyl7dmFyIGU9dGhpcy5fZXZlbnRzW3RdO2lmKGkoZSkpcmV0dXJuIDE7aWYoZSlyZXR1cm4gZS5sZW5ndGh9cmV0dXJuIDB9LG4ubGlzdGVuZXJDb3VudD1mdW5jdGlvbih0LGUpe3JldHVybiB0Lmxpc3RlbmVyQ291bnQoZSl9fSx7fV0sMjEzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49ZXx8MCxpPXJ8fDE7cmV0dXJuW1t0WzEyXSt0WzBdLHRbMTNdK3RbMV0sdFsxNF0rdFsyXSx0WzE1XSt0WzNdXSxbdFsxMl0tdFswXSx0WzEzXS10WzFdLHRbMTRdLXRbMl0sdFsxNV0tdFszXV0sW3RbMTJdK3RbNF0sdFsxM10rdFs1XSx0WzE0XSt0WzZdLHRbMTVdK3RbN11dLFt0WzEyXS10WzRdLHRbMTNdLXRbNV0sdFsxNF0tdFs2XSx0WzE1XS10WzddXSxbbip0WzEyXSt0WzhdLG4qdFsxM10rdFs5XSxuKnRbMTRdK3RbMTBdLG4qdFsxNV0rdFsxMV1dLFtpKnRbMTJdLXRbOF0saSp0WzEzXS10WzldLGkqdFsxNF0tdFsxMF0saSp0WzE1XS10WzExXV1dfX0se31dLDIxNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dHlwZW9mIHQ7aWYoInN0cmluZyI9PT1lKXt2YXIgcj10O2lmKDA9PT0odD0rdCkmJmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyPXQubGVuZ3RoLG49MDtuPHI7bisrKWlmKCgoZT10LmNoYXJDb2RlQXQobikpPDl8fGU+MTMpJiYzMiE9PWUmJjEzMyE9PWUmJjE2MCE9PWUmJjU3NjAhPT1lJiY2MTU4IT09ZSYmKGU8ODE5Mnx8ZT44MjA1KSYmODIzMiE9PWUmJjgyMzMhPT1lJiY4MjM5IT09ZSYmODI4NyE9PWUmJjgyODghPT1lJiYxMjI4OCE9PWUmJjY1Mjc5IT09ZSlyZXR1cm4hMTtyZXR1cm4hMH0ocikpcmV0dXJuITF9ZWxzZSBpZigibnVtYmVyIiE9PWUpcmV0dXJuITE7cmV0dXJuIHQtdDwxfX0se31dLDIxNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIG5ldyBvKFswXSxbMF0sMCk7Y2FzZSAxOmlmKCJudW1iZXIiPT10eXBlb2YgdCl7dmFyIG49bCh0KTtyZXR1cm4gbmV3IG8obixuLDApfXJldHVybiBuZXcgbyh0LGwodC5sZW5ndGgpLDApO2Nhc2UgMjppZigibnVtYmVyIj09dHlwZW9mIGUpe3ZhciBuPWwodC5sZW5ndGgpO3JldHVybiBuZXcgbyh0LG4sK2UpfXI9MDtjYXNlIDM6aWYodC5sZW5ndGghPT1lLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoInN0YXRlIGFuZCB2ZWxvY2l0eSBsZW5ndGhzIG11c3QgbWF0Y2giKTtyZXR1cm4gbmV3IG8odCxlLHIpfX07dmFyIG49dCgiY3ViaWMtaGVybWl0ZSIpLGk9dCgiYmluYXJ5LXNlYXJjaC1ib3VuZHMiKTtmdW5jdGlvbiBhKHQsZSxyKXtyZXR1cm4gTWF0aC5taW4oZSxNYXRoLm1heCh0LHIpKX1mdW5jdGlvbiBvKHQsZSxyKXt0aGlzLmRpbWVuc2lvbj10Lmxlbmd0aCx0aGlzLmJvdW5kcz1bbmV3IEFycmF5KHRoaXMuZGltZW5zaW9uKSxuZXcgQXJyYXkodGhpcy5kaW1lbnNpb24pXTtmb3IodmFyIG49MDtuPHRoaXMuZGltZW5zaW9uOysrbil0aGlzLmJvdW5kc1swXVtuXT0tMS8wLHRoaXMuYm91bmRzWzFdW25dPTEvMDt0aGlzLl9zdGF0ZT10LnNsaWNlKCkucmV2ZXJzZSgpLHRoaXMuX3ZlbG9jaXR5PWUuc2xpY2UoKS5yZXZlcnNlKCksdGhpcy5fdGltZT1bcl0sdGhpcy5fc2NyYXRjaD1bdC5zbGljZSgpLHQuc2xpY2UoKSx0LnNsaWNlKCksdC5zbGljZSgpLHQuc2xpY2UoKV19dmFyIHM9by5wcm90b3R5cGU7ZnVuY3Rpb24gbCh0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQpLHI9MDtyPHQ7KytyKWVbcl09MDtyZXR1cm4gZX1zLmZsdXNoPWZ1bmN0aW9uKHQpe3ZhciBlPWkuZ3QodGhpcy5fdGltZSx0KS0xO2U8PTB8fCh0aGlzLl90aW1lLnNwbGljZSgwLGUpLHRoaXMuX3N0YXRlLnNwbGljZSgwLGUqdGhpcy5kaW1lbnNpb24pLHRoaXMuX3ZlbG9jaXR5LnNwbGljZSgwLGUqdGhpcy5kaW1lbnNpb24pKX0scy5jdXJ2ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl90aW1lLHI9ZS5sZW5ndGgsbz1pLmxlKGUsdCkscz10aGlzLl9zY3JhdGNoWzBdLGw9dGhpcy5fc3RhdGUsYz10aGlzLl92ZWxvY2l0eSx1PXRoaXMuZGltZW5zaW9uLGg9dGhpcy5ib3VuZHM7aWYobzwwKWZvcih2YXIgZj11LTEscD0wO3A8dTsrK3AsLS1mKXNbcF09bFtmXTtlbHNlIGlmKG8+PXItMSl7Zj1sLmxlbmd0aC0xO3ZhciBkPXQtZVtyLTFdO2ZvcihwPTA7cDx1OysrcCwtLWYpc1twXT1sW2ZdK2QqY1tmXX1lbHNle2Y9dSoobysxKS0xO3ZhciBnPWVbb10sbT1lW28rMV0tZ3x8MSx2PXRoaXMuX3NjcmF0Y2hbMV0seT10aGlzLl9zY3JhdGNoWzJdLHg9dGhpcy5fc2NyYXRjaFszXSxiPXRoaXMuX3NjcmF0Y2hbNF0sXz0hMDtmb3IocD0wO3A8dTsrK3AsLS1mKXZbcF09bFtmXSx4W3BdPWNbZl0qbSx5W3BdPWxbZit1XSxiW3BdPWNbZit1XSptLF89XyYmdltwXT09PXlbcF0mJnhbcF09PT1iW3BdJiYwPT09eFtwXTtpZihfKWZvcihwPTA7cDx1OysrcClzW3BdPXZbcF07ZWxzZSBuKHYseCx5LGIsKHQtZykvbSxzKX12YXIgdz1oWzBdLGs9aFsxXTtmb3IocD0wO3A8dTsrK3Apc1twXT1hKHdbcF0sa1twXSxzW3BdKTtyZXR1cm4gc30scy5kY3VydmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdGltZSxyPWUubGVuZ3RoLGE9aS5sZShlLHQpLG89dGhpcy5fc2NyYXRjaFswXSxzPXRoaXMuX3N0YXRlLGw9dGhpcy5fdmVsb2NpdHksYz10aGlzLmRpbWVuc2lvbjtpZihhPj1yLTEpZm9yKHZhciB1PXMubGVuZ3RoLTEsaD0oZVtyLTFdLDApO2g8YzsrK2gsLS11KW9baF09bFt1XTtlbHNle3U9YyooYSsxKS0xO3ZhciBmPWVbYV0scD1lW2ErMV0tZnx8MSxkPXRoaXMuX3NjcmF0Y2hbMV0sZz10aGlzLl9zY3JhdGNoWzJdLG09dGhpcy5fc2NyYXRjaFszXSx2PXRoaXMuX3NjcmF0Y2hbNF0seT0hMDtmb3IoaD0wO2g8YzsrK2gsLS11KWRbaF09c1t1XSxtW2hdPWxbdV0qcCxnW2hdPXNbdStjXSx2W2hdPWxbdStjXSpwLHk9eSYmZFtoXT09PWdbaF0mJm1baF09PT12W2hdJiYwPT09bVtoXTtpZih5KWZvcihoPTA7aDxjOysraClvW2hdPTA7ZWxzZXtuLmRlcml2YXRpdmUoZCxtLGcsdiwodC1mKS9wLG8pO2ZvcihoPTA7aDxjOysraClvW2hdLz1wfX1yZXR1cm4gb30scy5sYXN0VD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3RpbWU7cmV0dXJuIHRbdC5sZW5ndGgtMV19LHMuc3RhYmxlPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuX3ZlbG9jaXR5LGU9dC5sZW5ndGgscj10aGlzLmRpbWVuc2lvbi0xO3I+PTA7LS1yKWlmKHRbLS1lXSlyZXR1cm4hMTtyZXR1cm4hMH0scy5qdW1wPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubGFzdFQoKSxyPXRoaXMuZGltZW5zaW9uO2lmKCEodDxlfHxhcmd1bWVudHMubGVuZ3RoIT09cisxKSl7dmFyIG49dGhpcy5fc3RhdGUsaT10aGlzLl92ZWxvY2l0eSxvPW4ubGVuZ3RoLXRoaXMuZGltZW5zaW9uLHM9dGhpcy5ib3VuZHMsbD1zWzBdLGM9c1sxXTt0aGlzLl90aW1lLnB1c2goZSx0KTtmb3IodmFyIHU9MDt1PDI7Kyt1KWZvcih2YXIgaD0wO2g8cjsrK2gpbi5wdXNoKG5bbysrXSksaS5wdXNoKDApO3RoaXMuX3RpbWUucHVzaCh0KTtmb3IoaD1yO2g+MDstLWgpbi5wdXNoKGEobFtoLTFdLGNbaC0xXSxhcmd1bWVudHNbaF0pKSxpLnB1c2goMCl9fSxzLnB1c2g9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5sYXN0VCgpLHI9dGhpcy5kaW1lbnNpb247aWYoISh0PGV8fGFyZ3VtZW50cy5sZW5ndGghPT1yKzEpKXt2YXIgbj10aGlzLl9zdGF0ZSxpPXRoaXMuX3ZlbG9jaXR5LG89bi5sZW5ndGgtdGhpcy5kaW1lbnNpb24scz10LWUsbD10aGlzLmJvdW5kcyxjPWxbMF0sdT1sWzFdLGg9cz4xZS02PzEvczowO3RoaXMuX3RpbWUucHVzaCh0KTtmb3IodmFyIGY9cjtmPjA7LS1mKXt2YXIgcD1hKGNbZi0xXSx1W2YtMV0sYXJndW1lbnRzW2ZdKTtuLnB1c2gocCksaS5wdXNoKChwLW5bbysrXSkqaCl9fX0scy5zZXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5kaW1lbnNpb247aWYoISh0PHRoaXMubGFzdFQoKXx8YXJndW1lbnRzLmxlbmd0aCE9PWUrMSkpe3ZhciByPXRoaXMuX3N0YXRlLG49dGhpcy5fdmVsb2NpdHksaT10aGlzLmJvdW5kcyxvPWlbMF0scz1pWzFdO3RoaXMuX3RpbWUucHVzaCh0KTtmb3IodmFyIGw9ZTtsPjA7LS1sKXIucHVzaChhKG9bbC0xXSxzW2wtMV0sYXJndW1lbnRzW2xdKSksbi5wdXNoKDApfX0scy5tb3ZlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubGFzdFQoKSxyPXRoaXMuZGltZW5zaW9uO2lmKCEodDw9ZXx8YXJndW1lbnRzLmxlbmd0aCE9PXIrMSkpe3ZhciBuPXRoaXMuX3N0YXRlLGk9dGhpcy5fdmVsb2NpdHksbz1uLmxlbmd0aC10aGlzLmRpbWVuc2lvbixzPXRoaXMuYm91bmRzLGw9c1swXSxjPXNbMV0sdT10LWUsaD11PjFlLTY/MS91OjA7dGhpcy5fdGltZS5wdXNoKHQpO2Zvcih2YXIgZj1yO2Y+MDstLWYpe3ZhciBwPWFyZ3VtZW50c1tmXTtuLnB1c2goYShsW2YtMV0sY1tmLTFdLG5bbysrXStwKSksaS5wdXNoKHAqaCl9fX0scy5pZGxlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubGFzdFQoKTtpZighKHQ8ZSkpe3ZhciByPXRoaXMuZGltZW5zaW9uLG49dGhpcy5fc3RhdGUsaT10aGlzLl92ZWxvY2l0eSxvPW4ubGVuZ3RoLXIscz10aGlzLmJvdW5kcyxsPXNbMF0sYz1zWzFdLHU9dC1lO3RoaXMuX3RpbWUucHVzaCh0KTtmb3IodmFyIGg9ci0xO2g+PTA7LS1oKW4ucHVzaChhKGxbaF0sY1toXSxuW29dK3UqaVtvXSkpLGkucHVzaCgwKSxvKz0xfX19LHsiYmluYXJ5LXNlYXJjaC1ib3VuZHMiOjc5LCJjdWJpYy1oZXJtaXRlIjoxMzJ9XSwyMTY6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCJkdHlwZSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7aWYoIXQpdGhyb3cgbmV3IFR5cGVFcnJvcigibXVzdCBzcGVjaWZ5IGRhdGEgYXMgZmlyc3QgcGFyYW1ldGVyIik7aWYocj0wfCsocnx8MCksQXJyYXkuaXNBcnJheSh0KSYmQXJyYXkuaXNBcnJheSh0WzBdKSl7dmFyIGk9dFswXS5sZW5ndGgsYT10Lmxlbmd0aCppO2UmJiJzdHJpbmciIT10eXBlb2YgZXx8KGU9bmV3KG4oZXx8ImZsb2F0MzIiKSkoYStyKSk7dmFyIG89ZS5sZW5ndGgtcjtpZihhIT09byl0aHJvdyBuZXcgRXJyb3IoInNvdXJjZSBsZW5ndGggIithKyIgKCIraSsieCIrdC5sZW5ndGgrIikgZG9lcyBub3QgbWF0Y2ggZGVzdGluYXRpb24gbGVuZ3RoICIrbyk7Zm9yKHZhciBzPTAsbD1yO3M8dC5sZW5ndGg7cysrKWZvcih2YXIgYz0wO2M8aTtjKyspZVtsKytdPXRbc11bY119ZWxzZSBpZihlJiYic3RyaW5nIiE9dHlwZW9mIGUpZS5zZXQodCxyKTtlbHNle3ZhciB1PW4oZXx8ImZsb2F0MzIiKTswPT09cj9lPW5ldyB1KHQpOihlPW5ldyB1KHQubGVuZ3RoK3IpKS5zZXQodCxyKX1yZXR1cm4gZX19LHtkdHlwZToxNTN9XSwyMTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiY3NzLWZvbnQvc3RyaW5naWZ5IiksaT1bMzIsMTI2XTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9KHQ9dHx8e30pLnNoYXBlP3Quc2hhcGU6dC5jYW52YXM/W3QuY2FudmFzLndpZHRoLHQuY2FudmFzLmhlaWdodF06WzUxMiw1MTJdLHI9dC5jYW52YXN8fGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLGE9dC5mb250LG89Im51bWJlciI9PXR5cGVvZiB0LnN0ZXA/W3Quc3RlcCx0LnN0ZXBdOnQuc3RlcHx8WzMyLDMyXSxzPXQuY2hhcnN8fGk7YSYmInN0cmluZyIhPXR5cGVvZiBhJiYoYT1uKGEpKTtpZihBcnJheS5pc0FycmF5KHMpKXtpZigyPT09cy5sZW5ndGgmJiJudW1iZXIiPT10eXBlb2Ygc1swXSYmIm51bWJlciI9PXR5cGVvZiBzWzFdKXtmb3IodmFyIGw9W10sYz1zWzBdLHU9MDtjPD1zWzFdO2MrKylsW3UrK109U3RyaW5nLmZyb21DaGFyQ29kZShjKTtzPWx9fWVsc2Ugcz1TdHJpbmcocykuc3BsaXQoIiIpO2U9ZS5zbGljZSgpLHIud2lkdGg9ZVswXSxyLmhlaWdodD1lWzFdO3ZhciBoPXIuZ2V0Q29udGV4dCgiMmQiKTtoLmZpbGxTdHlsZT0iIzAwMCIsaC5maWxsUmVjdCgwLDAsci53aWR0aCxyLmhlaWdodCksaC5mb250PWEsaC50ZXh0QWxpZ249ImNlbnRlciIsaC50ZXh0QmFzZWxpbmU9Im1pZGRsZSIsaC5maWxsU3R5bGU9IiNmZmYiO2Zvcih2YXIgZj1vWzBdLzIscD1vWzFdLzIsYz0wO2M8cy5sZW5ndGg7YysrKWguZmlsbFRleHQoc1tjXSxmLHApLChmKz1vWzBdKT5lWzBdLW9bMF0vMiYmKGY9b1swXS8yLHArPW9bMV0pO3JldHVybiByfX0seyJjc3MtZm9udC9zdHJpbmdpZnkiOjEyOX1dLDIxODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7ZXx8KGU9e30pLCgic3RyaW5nIj09dHlwZW9mIHR8fEFycmF5LmlzQXJyYXkodCkpJiYoZS5mYW1pbHk9dCk7dmFyIHI9QXJyYXkuaXNBcnJheShlLmZhbWlseSk/ZS5mYW1pbHkuam9pbigiLCAiKTplLmZhbWlseTtpZighcil0aHJvdyBFcnJvcigiYGZhbWlseWAgbXVzdCBiZSBkZWZpbmVkIik7dmFyIHM9ZS5zaXplfHxlLmZvbnRTaXplfHxlLmVtfHw0OCxsPWUud2VpZ2h0fHxlLmZvbnRXZWlnaHR8fCIiLGM9KHQ9W2Uuc3R5bGV8fGUuZm9udFN0eWxlfHwiIixsLHNdLmpvaW4oIiAiKSsicHggIityLGUub3JpZ2lufHwidG9wIik7aWYobi5jYWNoZVtyXSYmczw9bi5jYWNoZVtyXS5lbSlyZXR1cm4gaShuLmNhY2hlW3JdLGMpO3ZhciB1PWUuY2FudmFzfHxuLmNhbnZhcyxoPXUuZ2V0Q29udGV4dCgiMmQiKSxmPXt1cHBlcjp2b2lkIDAhPT1lLnVwcGVyP2UudXBwZXI6IkgiLGxvd2VyOnZvaWQgMCE9PWUubG93ZXI/ZS5sb3dlcjoieCIsZGVzY2VudDp2b2lkIDAhPT1lLmRlc2NlbnQ/ZS5kZXNjZW50OiJwIixhc2NlbnQ6dm9pZCAwIT09ZS5hc2NlbnQ/ZS5hc2NlbnQ6ImgiLHRpdHRsZTp2b2lkIDAhPT1lLnRpdHRsZT9lLnRpdHRsZToiaSIsb3ZlcnNob290OnZvaWQgMCE9PWUub3ZlcnNob290P2Uub3ZlcnNob290OiJPIn0scD1NYXRoLmNlaWwoMS41KnMpO3UuaGVpZ2h0PXAsdS53aWR0aD0uNSpwLGguZm9udD10O3ZhciBkPXt0b3A6MH07aC5jbGVhclJlY3QoMCwwLHAscCksaC50ZXh0QmFzZWxpbmU9InRvcCIsaC5maWxsU3R5bGU9ImJsYWNrIixoLmZpbGxUZXh0KCJIIiwwLDApO3ZhciBnPWEoaC5nZXRJbWFnZURhdGEoMCwwLHAscCkpO2guY2xlYXJSZWN0KDAsMCxwLHApLGgudGV4dEJhc2VsaW5lPSJib3R0b20iLGguZmlsbFRleHQoIkgiLDAscCk7dmFyIG09YShoLmdldEltYWdlRGF0YSgwLDAscCxwKSk7ZC5saW5lSGVpZ2h0PWQuYm90dG9tPXAtbStnLGguY2xlYXJSZWN0KDAsMCxwLHApLGgudGV4dEJhc2VsaW5lPSJhbHBoYWJldGljIixoLmZpbGxUZXh0KCJIIiwwLHApO3ZhciB2PXAtYShoLmdldEltYWdlRGF0YSgwLDAscCxwKSktMStnO2QuYmFzZWxpbmU9ZC5hbHBoYWJldGljPXYsaC5jbGVhclJlY3QoMCwwLHAscCksaC50ZXh0QmFzZWxpbmU9Im1pZGRsZSIsaC5maWxsVGV4dCgiSCIsMCwuNSpwKTt2YXIgeT1hKGguZ2V0SW1hZ2VEYXRhKDAsMCxwLHApKTtkLm1lZGlhbj1kLm1pZGRsZT1wLXktMStnLS41KnAsaC5jbGVhclJlY3QoMCwwLHAscCksaC50ZXh0QmFzZWxpbmU9ImhhbmdpbmciLGguZmlsbFRleHQoIkgiLDAsLjUqcCk7dmFyIHg9YShoLmdldEltYWdlRGF0YSgwLDAscCxwKSk7ZC5oYW5naW5nPXAteC0xK2ctLjUqcCxoLmNsZWFyUmVjdCgwLDAscCxwKSxoLnRleHRCYXNlbGluZT0iaWRlb2dyYXBoaWMiLGguZmlsbFRleHQoIkgiLDAscCk7dmFyIGI9YShoLmdldEltYWdlRGF0YSgwLDAscCxwKSk7aWYoZC5pZGVvZ3JhcGhpYz1wLWItMStnLGYudXBwZXImJihoLmNsZWFyUmVjdCgwLDAscCxwKSxoLnRleHRCYXNlbGluZT0idG9wIixoLmZpbGxUZXh0KGYudXBwZXIsMCwwKSxkLnVwcGVyPWEoaC5nZXRJbWFnZURhdGEoMCwwLHAscCkpLGQuY2FwSGVpZ2h0PWQuYmFzZWxpbmUtZC51cHBlciksZi5sb3dlciYmKGguY2xlYXJSZWN0KDAsMCxwLHApLGgudGV4dEJhc2VsaW5lPSJ0b3AiLGguZmlsbFRleHQoZi5sb3dlciwwLDApLGQubG93ZXI9YShoLmdldEltYWdlRGF0YSgwLDAscCxwKSksZC54SGVpZ2h0PWQuYmFzZWxpbmUtZC5sb3dlciksZi50aXR0bGUmJihoLmNsZWFyUmVjdCgwLDAscCxwKSxoLnRleHRCYXNlbGluZT0idG9wIixoLmZpbGxUZXh0KGYudGl0dGxlLDAsMCksZC50aXR0bGU9YShoLmdldEltYWdlRGF0YSgwLDAscCxwKSkpLGYuYXNjZW50JiYoaC5jbGVhclJlY3QoMCwwLHAscCksaC50ZXh0QmFzZWxpbmU9InRvcCIsaC5maWxsVGV4dChmLmFzY2VudCwwLDApLGQuYXNjZW50PWEoaC5nZXRJbWFnZURhdGEoMCwwLHAscCkpKSxmLmRlc2NlbnQmJihoLmNsZWFyUmVjdCgwLDAscCxwKSxoLnRleHRCYXNlbGluZT0idG9wIixoLmZpbGxUZXh0KGYuZGVzY2VudCwwLDApLGQuZGVzY2VudD1vKGguZ2V0SW1hZ2VEYXRhKDAsMCxwLHApKSksZi5vdmVyc2hvb3Qpe2guY2xlYXJSZWN0KDAsMCxwLHApLGgudGV4dEJhc2VsaW5lPSJ0b3AiLGguZmlsbFRleHQoZi5vdmVyc2hvb3QsMCwwKTt2YXIgXz1vKGguZ2V0SW1hZ2VEYXRhKDAsMCxwLHApKTtkLm92ZXJzaG9vdD1fLXZ9Zm9yKHZhciB3IGluIGQpZFt3XS89cztyZXR1cm4gZC5lbT1zLG4uY2FjaGVbcl09ZCxpKGQsYyl9ZnVuY3Rpb24gaSh0LGUpe3ZhciByPXt9O2Zvcih2YXIgbiBpbiJzdHJpbmciPT10eXBlb2YgZSYmKGU9dFtlXSksdCkiZW0iIT09biYmKHJbbl09dFtuXS1lKTtyZXR1cm4gcn1mdW5jdGlvbiBhKHQpe2Zvcih2YXIgZT10LmhlaWdodCxyPXQuZGF0YSxuPTM7bjxyLmxlbmd0aDtuKz00KWlmKDAhPT1yW25dKXJldHVybiBNYXRoLmZsb29yKC4yNSoobi0zKS9lKX1mdW5jdGlvbiBvKHQpe2Zvcih2YXIgZT10LmhlaWdodCxyPXQuZGF0YSxuPXIubGVuZ3RoLTE7bj4wO24tPTQpaWYoMCE9PXJbbl0pcmV0dXJuIE1hdGguZmxvb3IoLjI1KihuLTMpL2UpfWUuZXhwb3J0cz1uLG4uY2FudmFzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLG4uY2FjaGU9e319LHt9XSwyMTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgYyh0fHxkLG51bGwpfTt2YXIgbj0wLGk9MTtmdW5jdGlvbiBhKHQsZSxyLG4saSxhKXt0aGlzLl9jb2xvcj10LHRoaXMua2V5PWUsdGhpcy52YWx1ZT1yLHRoaXMubGVmdD1uLHRoaXMucmlnaHQ9aSx0aGlzLl9jb3VudD1hfWZ1bmN0aW9uIG8odCl7cmV0dXJuIG5ldyBhKHQuX2NvbG9yLHQua2V5LHQudmFsdWUsdC5sZWZ0LHQucmlnaHQsdC5fY291bnQpfWZ1bmN0aW9uIHModCxlKXtyZXR1cm4gbmV3IGEodCxlLmtleSxlLnZhbHVlLGUubGVmdCxlLnJpZ2h0LGUuX2NvdW50KX1mdW5jdGlvbiBsKHQpe3QuX2NvdW50PTErKHQubGVmdD90LmxlZnQuX2NvdW50OjApKyh0LnJpZ2h0P3QucmlnaHQuX2NvdW50OjApfWZ1bmN0aW9uIGModCxlKXt0aGlzLl9jb21wYXJlPXQsdGhpcy5yb290PWV9dmFyIHU9Yy5wcm90b3R5cGU7ZnVuY3Rpb24gaCh0LGUpe3RoaXMudHJlZT10LHRoaXMuX3N0YWNrPWV9T2JqZWN0LmRlZmluZVByb3BlcnR5KHUsImtleXMiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKGUscil7dC5wdXNoKGUpfSksdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodSwidmFsdWVzIix7Z2V0OmZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMuZm9yRWFjaChmdW5jdGlvbihlLHIpe3QucHVzaChyKX0pLHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHUsImxlbmd0aCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJvb3Q/dGhpcy5yb290Ll9jb3VudDowfX0pLHUuaW5zZXJ0PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXRoaXMuX2NvbXBhcmUsbz10aGlzLnJvb3QsdT1bXSxoPVtdO287KXt2YXIgZj1yKHQsby5rZXkpO3UucHVzaChvKSxoLnB1c2goZiksbz1mPD0wP28ubGVmdDpvLnJpZ2h0fXUucHVzaChuZXcgYShuLHQsZSxudWxsLG51bGwsMSkpO2Zvcih2YXIgcD11Lmxlbmd0aC0yO3A+PTA7LS1wKXtvPXVbcF07aFtwXTw9MD91W3BdPW5ldyBhKG8uX2NvbG9yLG8ua2V5LG8udmFsdWUsdVtwKzFdLG8ucmlnaHQsby5fY291bnQrMSk6dVtwXT1uZXcgYShvLl9jb2xvcixvLmtleSxvLnZhbHVlLG8ubGVmdCx1W3ArMV0sby5fY291bnQrMSl9Zm9yKHA9dS5sZW5ndGgtMTtwPjE7LS1wKXt2YXIgZD11W3AtMV07bz11W3BdO2lmKGQuX2NvbG9yPT09aXx8by5fY29sb3I9PT1pKWJyZWFrO3ZhciBnPXVbcC0yXTtpZihnLmxlZnQ9PT1kKWlmKGQubGVmdD09PW8pe2lmKCEobT1nLnJpZ2h0KXx8bS5fY29sb3IhPT1uKXtpZihnLl9jb2xvcj1uLGcubGVmdD1kLnJpZ2h0LGQuX2NvbG9yPWksZC5yaWdodD1nLHVbcC0yXT1kLHVbcC0xXT1vLGwoZyksbChkKSxwPj0zKSh2PXVbcC0zXSkubGVmdD09PWc/di5sZWZ0PWQ6di5yaWdodD1kO2JyZWFrfWQuX2NvbG9yPWksZy5yaWdodD1zKGksbSksZy5fY29sb3I9bixwLT0xfWVsc2V7aWYoIShtPWcucmlnaHQpfHxtLl9jb2xvciE9PW4pe2lmKGQucmlnaHQ9by5sZWZ0LGcuX2NvbG9yPW4sZy5sZWZ0PW8ucmlnaHQsby5fY29sb3I9aSxvLmxlZnQ9ZCxvLnJpZ2h0PWcsdVtwLTJdPW8sdVtwLTFdPWQsbChnKSxsKGQpLGwobykscD49Mykodj11W3AtM10pLmxlZnQ9PT1nP3YubGVmdD1vOnYucmlnaHQ9bzticmVha31kLl9jb2xvcj1pLGcucmlnaHQ9cyhpLG0pLGcuX2NvbG9yPW4scC09MX1lbHNlIGlmKGQucmlnaHQ9PT1vKXtpZighKG09Zy5sZWZ0KXx8bS5fY29sb3IhPT1uKXtpZihnLl9jb2xvcj1uLGcucmlnaHQ9ZC5sZWZ0LGQuX2NvbG9yPWksZC5sZWZ0PWcsdVtwLTJdPWQsdVtwLTFdPW8sbChnKSxsKGQpLHA+PTMpKHY9dVtwLTNdKS5yaWdodD09PWc/di5yaWdodD1kOnYubGVmdD1kO2JyZWFrfWQuX2NvbG9yPWksZy5sZWZ0PXMoaSxtKSxnLl9jb2xvcj1uLHAtPTF9ZWxzZXt2YXIgbTtpZighKG09Zy5sZWZ0KXx8bS5fY29sb3IhPT1uKXt2YXIgdjtpZihkLmxlZnQ9by5yaWdodCxnLl9jb2xvcj1uLGcucmlnaHQ9by5sZWZ0LG8uX2NvbG9yPWksby5yaWdodD1kLG8ubGVmdD1nLHVbcC0yXT1vLHVbcC0xXT1kLGwoZyksbChkKSxsKG8pLHA+PTMpKHY9dVtwLTNdKS5yaWdodD09PWc/di5yaWdodD1vOnYubGVmdD1vO2JyZWFrfWQuX2NvbG9yPWksZy5sZWZ0PXMoaSxtKSxnLl9jb2xvcj1uLHAtPTF9fXJldHVybiB1WzBdLl9jb2xvcj1pLG5ldyBjKHIsdVswXSl9LHUuZm9yRWFjaD1mdW5jdGlvbih0LGUscil7aWYodGhpcy5yb290KXN3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDE6cmV0dXJuIGZ1bmN0aW9uIHQoZSxyKXt2YXIgbjtpZihyLmxlZnQmJihuPXQoZSxyLmxlZnQpKSlyZXR1cm4gbjtyZXR1cm4obj1lKHIua2V5LHIudmFsdWUpKXx8KHIucmlnaHQ/dChlLHIucmlnaHQpOnZvaWQgMCl9KHQsdGhpcy5yb290KTtjYXNlIDI6cmV0dXJuIGZ1bmN0aW9uIHQoZSxyLG4saSl7aWYocihlLGkua2V5KTw9MCl7dmFyIGE7aWYoaS5sZWZ0JiYoYT10KGUscixuLGkubGVmdCkpKXJldHVybiBhO2lmKGE9bihpLmtleSxpLnZhbHVlKSlyZXR1cm4gYX1pZihpLnJpZ2h0KXJldHVybiB0KGUscixuLGkucmlnaHQpfShlLHRoaXMuX2NvbXBhcmUsdCx0aGlzLnJvb3QpO2Nhc2UgMzppZih0aGlzLl9jb21wYXJlKGUscik+PTApcmV0dXJuO3JldHVybiBmdW5jdGlvbiB0KGUscixuLGksYSl7dmFyIG8scz1uKGUsYS5rZXkpLGw9bihyLGEua2V5KTtpZihzPD0wKXtpZihhLmxlZnQmJihvPXQoZSxyLG4saSxhLmxlZnQpKSlyZXR1cm4gbztpZihsPjAmJihvPWkoYS5rZXksYS52YWx1ZSkpKXJldHVybiBvfWlmKGw+MCYmYS5yaWdodClyZXR1cm4gdChlLHIsbixpLGEucmlnaHQpfShlLHIsdGhpcy5fY29tcGFyZSx0LHRoaXMucm9vdCl9fSxPYmplY3QuZGVmaW5lUHJvcGVydHkodSwiYmVnaW4iLHtnZXQ6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9W10sZT10aGlzLnJvb3Q7ZTspdC5wdXNoKGUpLGU9ZS5sZWZ0O3JldHVybiBuZXcgaCh0aGlzLHQpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1LCJlbmQiLHtnZXQ6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9W10sZT10aGlzLnJvb3Q7ZTspdC5wdXNoKGUpLGU9ZS5yaWdodDtyZXR1cm4gbmV3IGgodGhpcyx0KX19KSx1LmF0PWZ1bmN0aW9uKHQpe2lmKHQ8MClyZXR1cm4gbmV3IGgodGhpcyxbXSk7Zm9yKHZhciBlPXRoaXMucm9vdCxyPVtdOzspe2lmKHIucHVzaChlKSxlLmxlZnQpe2lmKHQ8ZS5sZWZ0Ll9jb3VudCl7ZT1lLmxlZnQ7Y29udGludWV9dC09ZS5sZWZ0Ll9jb3VudH1pZighdClyZXR1cm4gbmV3IGgodGhpcyxyKTtpZih0LT0xLCFlLnJpZ2h0KWJyZWFrO2lmKHQ+PWUucmlnaHQuX2NvdW50KWJyZWFrO2U9ZS5yaWdodH1yZXR1cm4gbmV3IGgodGhpcyxbXSl9LHUuZ2U9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuX2NvbXBhcmUscj10aGlzLnJvb3Qsbj1bXSxpPTA7cjspe3ZhciBhPWUodCxyLmtleSk7bi5wdXNoKHIpLGE8PTAmJihpPW4ubGVuZ3RoKSxyPWE8PTA/ci5sZWZ0OnIucmlnaHR9cmV0dXJuIG4ubGVuZ3RoPWksbmV3IGgodGhpcyxuKX0sdS5ndD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fY29tcGFyZSxyPXRoaXMucm9vdCxuPVtdLGk9MDtyOyl7dmFyIGE9ZSh0LHIua2V5KTtuLnB1c2gociksYTwwJiYoaT1uLmxlbmd0aCkscj1hPDA/ci5sZWZ0OnIucmlnaHR9cmV0dXJuIG4ubGVuZ3RoPWksbmV3IGgodGhpcyxuKX0sdS5sdD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fY29tcGFyZSxyPXRoaXMucm9vdCxuPVtdLGk9MDtyOyl7dmFyIGE9ZSh0LHIua2V5KTtuLnB1c2gociksYT4wJiYoaT1uLmxlbmd0aCkscj1hPD0wP3IubGVmdDpyLnJpZ2h0fXJldHVybiBuLmxlbmd0aD1pLG5ldyBoKHRoaXMsbil9LHUubGU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuX2NvbXBhcmUscj10aGlzLnJvb3Qsbj1bXSxpPTA7cjspe3ZhciBhPWUodCxyLmtleSk7bi5wdXNoKHIpLGE+PTAmJihpPW4ubGVuZ3RoKSxyPWE8MD9yLmxlZnQ6ci5yaWdodH1yZXR1cm4gbi5sZW5ndGg9aSxuZXcgaCh0aGlzLG4pfSx1LmZpbmQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuX2NvbXBhcmUscj10aGlzLnJvb3Qsbj1bXTtyOyl7dmFyIGk9ZSh0LHIua2V5KTtpZihuLnB1c2gociksMD09PWkpcmV0dXJuIG5ldyBoKHRoaXMsbik7cj1pPD0wP3IubGVmdDpyLnJpZ2h0fXJldHVybiBuZXcgaCh0aGlzLFtdKX0sdS5yZW1vdmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5maW5kKHQpO3JldHVybiBlP2UucmVtb3ZlKCk6dGhpc30sdS5nZXQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuX2NvbXBhcmUscj10aGlzLnJvb3Q7cjspe3ZhciBuPWUodCxyLmtleSk7aWYoMD09PW4pcmV0dXJuIHIudmFsdWU7cj1uPD0wP3IubGVmdDpyLnJpZ2h0fX07dmFyIGY9aC5wcm90b3R5cGU7ZnVuY3Rpb24gcCh0LGUpe3Qua2V5PWUua2V5LHQudmFsdWU9ZS52YWx1ZSx0LmxlZnQ9ZS5sZWZ0LHQucmlnaHQ9ZS5yaWdodCx0Ll9jb2xvcj1lLl9jb2xvcix0Ll9jb3VudD1lLl9jb3VudH1mdW5jdGlvbiBkKHQsZSl7cmV0dXJuIHQ8ZT8tMTp0PmU/MTowfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShmLCJ2YWxpZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdGFjay5sZW5ndGg+MH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZiwibm9kZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdGFjay5sZW5ndGg+MD90aGlzLl9zdGFja1t0aGlzLl9zdGFjay5sZW5ndGgtMV06bnVsbH0sZW51bWVyYWJsZTohMH0pLGYuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGgodGhpcy50cmVlLHRoaXMuX3N0YWNrLnNsaWNlKCkpfSxmLnJlbW92ZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3N0YWNrO2lmKDA9PT10Lmxlbmd0aClyZXR1cm4gdGhpcy50cmVlO3ZhciBlPW5ldyBBcnJheSh0Lmxlbmd0aCkscj10W3QubGVuZ3RoLTFdO2VbZS5sZW5ndGgtMV09bmV3IGEoci5fY29sb3Isci5rZXksci52YWx1ZSxyLmxlZnQsci5yaWdodCxyLl9jb3VudCk7Zm9yKHZhciB1PXQubGVuZ3RoLTI7dT49MDstLXUpeyhyPXRbdV0pLmxlZnQ9PT10W3UrMV0/ZVt1XT1uZXcgYShyLl9jb2xvcixyLmtleSxyLnZhbHVlLGVbdSsxXSxyLnJpZ2h0LHIuX2NvdW50KTplW3VdPW5ldyBhKHIuX2NvbG9yLHIua2V5LHIudmFsdWUsci5sZWZ0LGVbdSsxXSxyLl9jb3VudCl9aWYoKHI9ZVtlLmxlbmd0aC0xXSkubGVmdCYmci5yaWdodCl7dmFyIGg9ZS5sZW5ndGg7Zm9yKHI9ci5sZWZ0O3IucmlnaHQ7KWUucHVzaChyKSxyPXIucmlnaHQ7dmFyIGY9ZVtoLTFdO2UucHVzaChuZXcgYShyLl9jb2xvcixmLmtleSxmLnZhbHVlLHIubGVmdCxyLnJpZ2h0LHIuX2NvdW50KSksZVtoLTFdLmtleT1yLmtleSxlW2gtMV0udmFsdWU9ci52YWx1ZTtmb3IodT1lLmxlbmd0aC0yO3U+PWg7LS11KXI9ZVt1XSxlW3VdPW5ldyBhKHIuX2NvbG9yLHIua2V5LHIudmFsdWUsci5sZWZ0LGVbdSsxXSxyLl9jb3VudCk7ZVtoLTFdLmxlZnQ9ZVtoXX1pZigocj1lW2UubGVuZ3RoLTFdKS5fY29sb3I9PT1uKXt2YXIgZD1lW2UubGVuZ3RoLTJdO2QubGVmdD09PXI/ZC5sZWZ0PW51bGw6ZC5yaWdodD09PXImJihkLnJpZ2h0PW51bGwpLGUucG9wKCk7Zm9yKHU9MDt1PGUubGVuZ3RoOysrdSllW3VdLl9jb3VudC0tO3JldHVybiBuZXcgYyh0aGlzLnRyZWUuX2NvbXBhcmUsZVswXSl9aWYoci5sZWZ0fHxyLnJpZ2h0KXtyLmxlZnQ/cChyLHIubGVmdCk6ci5yaWdodCYmcChyLHIucmlnaHQpLHIuX2NvbG9yPWk7Zm9yKHU9MDt1PGUubGVuZ3RoLTE7Kyt1KWVbdV0uX2NvdW50LS07cmV0dXJuIG5ldyBjKHRoaXMudHJlZS5fY29tcGFyZSxlWzBdKX1pZigxPT09ZS5sZW5ndGgpcmV0dXJuIG5ldyBjKHRoaXMudHJlZS5fY29tcGFyZSxudWxsKTtmb3IodT0wO3U8ZS5sZW5ndGg7Kyt1KWVbdV0uX2NvdW50LS07dmFyIGc9ZVtlLmxlbmd0aC0yXTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKHZhciBlLHIsYSxjLHU9dC5sZW5ndGgtMTt1Pj0wOy0tdSl7aWYoZT10W3VdLDA9PT11KXJldHVybiB2b2lkKGUuX2NvbG9yPWkpO2lmKChyPXRbdS0xXSkubGVmdD09PWUpe2lmKChhPXIucmlnaHQpLnJpZ2h0JiZhLnJpZ2h0Ll9jb2xvcj09PW4pcmV0dXJuIGM9KGE9ci5yaWdodD1vKGEpKS5yaWdodD1vKGEucmlnaHQpLHIucmlnaHQ9YS5sZWZ0LGEubGVmdD1yLGEucmlnaHQ9YyxhLl9jb2xvcj1yLl9jb2xvcixlLl9jb2xvcj1pLHIuX2NvbG9yPWksYy5fY29sb3I9aSxsKHIpLGwoYSksdT4xJiYoKGg9dFt1LTJdKS5sZWZ0PT09cj9oLmxlZnQ9YTpoLnJpZ2h0PWEpLHZvaWQodFt1LTFdPWEpO2lmKGEubGVmdCYmYS5sZWZ0Ll9jb2xvcj09PW4pcmV0dXJuIGM9KGE9ci5yaWdodD1vKGEpKS5sZWZ0PW8oYS5sZWZ0KSxyLnJpZ2h0PWMubGVmdCxhLmxlZnQ9Yy5yaWdodCxjLmxlZnQ9cixjLnJpZ2h0PWEsYy5fY29sb3I9ci5fY29sb3Isci5fY29sb3I9aSxhLl9jb2xvcj1pLGUuX2NvbG9yPWksbChyKSxsKGEpLGwoYyksdT4xJiYoKGg9dFt1LTJdKS5sZWZ0PT09cj9oLmxlZnQ9YzpoLnJpZ2h0PWMpLHZvaWQodFt1LTFdPWMpO2lmKGEuX2NvbG9yPT09aSl7aWYoci5fY29sb3I9PT1uKXJldHVybiByLl9jb2xvcj1pLHZvaWQoci5yaWdodD1zKG4sYSkpO3IucmlnaHQ9cyhuLGEpO2NvbnRpbnVlfWE9byhhKSxyLnJpZ2h0PWEubGVmdCxhLmxlZnQ9cixhLl9jb2xvcj1yLl9jb2xvcixyLl9jb2xvcj1uLGwociksbChhKSx1PjEmJigoaD10W3UtMl0pLmxlZnQ9PT1yP2gubGVmdD1hOmgucmlnaHQ9YSksdFt1LTFdPWEsdFt1XT1yLHUrMTx0Lmxlbmd0aD90W3UrMV09ZTp0LnB1c2goZSksdSs9Mn1lbHNle2lmKChhPXIubGVmdCkubGVmdCYmYS5sZWZ0Ll9jb2xvcj09PW4pcmV0dXJuIGM9KGE9ci5sZWZ0PW8oYSkpLmxlZnQ9byhhLmxlZnQpLHIubGVmdD1hLnJpZ2h0LGEucmlnaHQ9cixhLmxlZnQ9YyxhLl9jb2xvcj1yLl9jb2xvcixlLl9jb2xvcj1pLHIuX2NvbG9yPWksYy5fY29sb3I9aSxsKHIpLGwoYSksdT4xJiYoKGg9dFt1LTJdKS5yaWdodD09PXI/aC5yaWdodD1hOmgubGVmdD1hKSx2b2lkKHRbdS0xXT1hKTtpZihhLnJpZ2h0JiZhLnJpZ2h0Ll9jb2xvcj09PW4pcmV0dXJuIGM9KGE9ci5sZWZ0PW8oYSkpLnJpZ2h0PW8oYS5yaWdodCksci5sZWZ0PWMucmlnaHQsYS5yaWdodD1jLmxlZnQsYy5yaWdodD1yLGMubGVmdD1hLGMuX2NvbG9yPXIuX2NvbG9yLHIuX2NvbG9yPWksYS5fY29sb3I9aSxlLl9jb2xvcj1pLGwociksbChhKSxsKGMpLHU+MSYmKChoPXRbdS0yXSkucmlnaHQ9PT1yP2gucmlnaHQ9YzpoLmxlZnQ9Yyksdm9pZCh0W3UtMV09Yyk7aWYoYS5fY29sb3I9PT1pKXtpZihyLl9jb2xvcj09PW4pcmV0dXJuIHIuX2NvbG9yPWksdm9pZChyLmxlZnQ9cyhuLGEpKTtyLmxlZnQ9cyhuLGEpO2NvbnRpbnVlfXZhciBoO2E9byhhKSxyLmxlZnQ9YS5yaWdodCxhLnJpZ2h0PXIsYS5fY29sb3I9ci5fY29sb3Isci5fY29sb3I9bixsKHIpLGwoYSksdT4xJiYoKGg9dFt1LTJdKS5yaWdodD09PXI/aC5yaWdodD1hOmgubGVmdD1hKSx0W3UtMV09YSx0W3VdPXIsdSsxPHQubGVuZ3RoP3RbdSsxXT1lOnQucHVzaChlKSx1Kz0yfX19KGUpLGcubGVmdD09PXI/Zy5sZWZ0PW51bGw6Zy5yaWdodD1udWxsLG5ldyBjKHRoaXMudHJlZS5fY29tcGFyZSxlWzBdKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGYsImtleSIse2dldDpmdW5jdGlvbigpe2lmKHRoaXMuX3N0YWNrLmxlbmd0aD4wKXJldHVybiB0aGlzLl9zdGFja1t0aGlzLl9zdGFjay5sZW5ndGgtMV0ua2V5fSxlbnVtZXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGYsInZhbHVlIix7Z2V0OmZ1bmN0aW9uKCl7aWYodGhpcy5fc3RhY2subGVuZ3RoPjApcmV0dXJuIHRoaXMuX3N0YWNrW3RoaXMuX3N0YWNrLmxlbmd0aC0xXS52YWx1ZX0sZW51bWVyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmLCJpbmRleCIse2dldDpmdW5jdGlvbigpe3ZhciB0PTAsZT10aGlzLl9zdGFjaztpZigwPT09ZS5sZW5ndGgpe3ZhciByPXRoaXMudHJlZS5yb290O3JldHVybiByP3IuX2NvdW50OjB9ZVtlLmxlbmd0aC0xXS5sZWZ0JiYodD1lW2UubGVuZ3RoLTFdLmxlZnQuX2NvdW50KTtmb3IodmFyIG49ZS5sZW5ndGgtMjtuPj0wOy0tbillW24rMV09PT1lW25dLnJpZ2h0JiYoKyt0LGVbbl0ubGVmdCYmKHQrPWVbbl0ubGVmdC5fY291bnQpKTtyZXR1cm4gdH0sZW51bWVyYWJsZTohMH0pLGYubmV4dD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3N0YWNrO2lmKDAhPT10Lmxlbmd0aCl7dmFyIGU9dFt0Lmxlbmd0aC0xXTtpZihlLnJpZ2h0KWZvcihlPWUucmlnaHQ7ZTspdC5wdXNoKGUpLGU9ZS5sZWZ0O2Vsc2UgZm9yKHQucG9wKCk7dC5sZW5ndGg+MCYmdFt0Lmxlbmd0aC0xXS5yaWdodD09PWU7KWU9dFt0Lmxlbmd0aC0xXSx0LnBvcCgpfX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGYsImhhc05leHQiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9zdGFjaztpZigwPT09dC5sZW5ndGgpcmV0dXJuITE7aWYodFt0Lmxlbmd0aC0xXS5yaWdodClyZXR1cm4hMDtmb3IodmFyIGU9dC5sZW5ndGgtMTtlPjA7LS1lKWlmKHRbZS0xXS5sZWZ0PT09dFtlXSlyZXR1cm4hMDtyZXR1cm4hMX19KSxmLnVwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9zdGFjaztpZigwPT09ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJDYW4ndCB1cGRhdGUgZW1wdHkgbm9kZSEiKTt2YXIgcj1uZXcgQXJyYXkoZS5sZW5ndGgpLG49ZVtlLmxlbmd0aC0xXTtyW3IubGVuZ3RoLTFdPW5ldyBhKG4uX2NvbG9yLG4ua2V5LHQsbi5sZWZ0LG4ucmlnaHQsbi5fY291bnQpO2Zvcih2YXIgaT1lLmxlbmd0aC0yO2k+PTA7LS1pKShuPWVbaV0pLmxlZnQ9PT1lW2krMV0/cltpXT1uZXcgYShuLl9jb2xvcixuLmtleSxuLnZhbHVlLHJbaSsxXSxuLnJpZ2h0LG4uX2NvdW50KTpyW2ldPW5ldyBhKG4uX2NvbG9yLG4ua2V5LG4udmFsdWUsbi5sZWZ0LHJbaSsxXSxuLl9jb3VudCk7cmV0dXJuIG5ldyBjKHRoaXMudHJlZS5fY29tcGFyZSxyWzBdKX0sZi5wcmV2PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fc3RhY2s7aWYoMCE9PXQubGVuZ3RoKXt2YXIgZT10W3QubGVuZ3RoLTFdO2lmKGUubGVmdClmb3IoZT1lLmxlZnQ7ZTspdC5wdXNoKGUpLGU9ZS5yaWdodDtlbHNlIGZvcih0LnBvcCgpO3QubGVuZ3RoPjAmJnRbdC5sZW5ndGgtMV0ubGVmdD09PWU7KWU9dFt0Lmxlbmd0aC0xXSx0LnBvcCgpfX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGYsImhhc1ByZXYiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9zdGFjaztpZigwPT09dC5sZW5ndGgpcmV0dXJuITE7aWYodFt0Lmxlbmd0aC0xXS5sZWZ0KXJldHVybiEwO2Zvcih2YXIgZT10Lmxlbmd0aC0xO2U+MDstLWUpaWYodFtlLTFdLnJpZ2h0PT09dFtlXSlyZXR1cm4hMDtyZXR1cm4hMX19KX0se31dLDIyMDpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPVsuOTk5OTk5OTk5OTk5ODA5OSw2NzYuNTIwMzY4MTIxODg1MSwtMTI1OS4xMzkyMTY3MjI0MDI4LDc3MS4zMjM0Mjg3Nzc2NTMxLC0xNzYuNjE1MDI5MTYyMTQwNiwxMi41MDczNDMyNzg2ODY5MDUsLS4xMzg1NzEwOTUyNjU3MjAxMiw5OTg0MzY5NTc4MDE5NTcyZS0yMSwxLjUwNTYzMjczNTE0OTMxMTZlLTddLGk9NjA3LzEyOCxhPVsuOTk5OTk5OTk5OTk5OTk3MSw1Ny4xNTYyMzU2NjU4NjI5MiwtNTkuNTk3OTYwMzU1NDc1NDksMTQuMTM2MDk3OTc0NzQxNzQ2LC0uNDkxOTEzODE2MDk3NjIwMiwzMzk5NDY0OTk4NDgxMTg5ZS0yMCw0NjUyMzYyODkyNzA0ODU4ZS0yMCwtOTgzNzQ0NzUzMDQ4Nzk1NmUtMjAsLjAwMDE1ODA4ODcwMzIyNDkxMjUsLS4wMDAyMTAyNjQ0NDE3MjQxMDQ4OCwuMDAwMjE3NDM5NjE4MTE1MjEyNjUsLS4wMDAxNjQzMTgxMDY1MzY3NjM5LDg0NDE4MjIzOTgzODUyNzVlLTIwLC0yNjE5MDgzODQwMTU4MTQwOGUtMjEsMzY4OTkxODI2NTk1MzE2MjVlLTIyXTtmdW5jdGlvbiBvKHQpe2lmKHQ8MClyZXR1cm4gTnVtYmVyKCIwLzAiKTtmb3IodmFyIGU9YVswXSxyPWEubGVuZ3RoLTE7cj4wOy0tcillKz1hW3JdLyh0K3IpO3ZhciBuPXQraSsuNTtyZXR1cm4uNSpNYXRoLmxvZygyKk1hdGguUEkpKyh0Ky41KSpNYXRoLmxvZyhuKS1uK01hdGgubG9nKGUpLU1hdGgubG9nKHQpfWUuZXhwb3J0cz1mdW5jdGlvbiB0KGUpe2lmKGU8LjUpcmV0dXJuIE1hdGguUEkvKE1hdGguc2luKE1hdGguUEkqZSkqdCgxLWUpKTtpZihlPjEwMClyZXR1cm4gTWF0aC5leHAobyhlKSk7ZS09MTtmb3IodmFyIHI9blswXSxpPTE7aTw5O2krKylyKz1uW2ldLyhlK2kpO3ZhciBhPWUrNysuNTtyZXR1cm4gTWF0aC5zcXJ0KDIqTWF0aC5QSSkqTWF0aC5wb3coYSxlKy41KSpNYXRoLmV4cCgtYSkqcn0sZS5leHBvcnRzLmxvZz1vfSx7fV0sMjIxOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoInN0cmluZyIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoIm11c3Qgc3BlY2lmeSB0eXBlIHN0cmluZyIpO2lmKGU9ZXx8e30sInVuZGVmaW5lZCI9PXR5cGVvZiBkb2N1bWVudCYmIWUuY2FudmFzKXJldHVybiBudWxsO3ZhciByPWUuY2FudmFzfHxkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTsibnVtYmVyIj09dHlwZW9mIGUud2lkdGgmJihyLndpZHRoPWUud2lkdGgpOyJudW1iZXIiPT10eXBlb2YgZS5oZWlnaHQmJihyLmhlaWdodD1lLmhlaWdodCk7dmFyIG4saT1lO3RyeXt2YXIgYT1bdF07MD09PXQuaW5kZXhPZigid2ViZ2wiKSYmYS5wdXNoKCJleHBlcmltZW50YWwtIit0KTtmb3IodmFyIG89MDtvPGEubGVuZ3RoO28rKylpZihuPXIuZ2V0Q29udGV4dChhW29dLGkpKXJldHVybiBufWNhdGNoKHQpe249bnVsbH1yZXR1cm4gbnx8bnVsbH19LHt9XSwyMjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bmV3IHUodCk7cmV0dXJuIHIudXBkYXRlKGUpLHJ9O3ZhciBuPXQoIi4vbGliL3RleHQuanMiKSxpPXQoIi4vbGliL2xpbmVzLmpzIiksYT10KCIuL2xpYi9iYWNrZ3JvdW5kLmpzIiksbz10KCIuL2xpYi9jdWJlLmpzIikscz10KCIuL2xpYi90aWNrcy5qcyIpLGw9bmV3IEZsb2F0MzJBcnJheShbMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV0pO2Z1bmN0aW9uIGModCxlKXtyZXR1cm4gdFswXT1lWzBdLHRbMV09ZVsxXSx0WzJdPWVbMl0sdH1mdW5jdGlvbiB1KHQpe3RoaXMuZ2w9dCx0aGlzLnBpeGVsUmF0aW89MSx0aGlzLmJvdW5kcz1bWy0xMCwtMTAsLTEwXSxbMTAsMTAsMTBdXSx0aGlzLnRpY2tzPVtbXSxbXSxbXV0sdGhpcy5hdXRvVGlja3M9ITAsdGhpcy50aWNrU3BhY2luZz1bMSwxLDFdLHRoaXMudGlja0VuYWJsZT1bITAsITAsITBdLHRoaXMudGlja0ZvbnQ9WyJzYW5zLXNlcmlmIiwic2Fucy1zZXJpZiIsInNhbnMtc2VyaWYiXSx0aGlzLnRpY2tTaXplPVsxMiwxMiwxMl0sdGhpcy50aWNrQW5nbGU9WzAsMCwwXSx0aGlzLnRpY2tDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMudGlja1BhZD1bMTAsMTAsMTBdLHRoaXMubGFzdEN1YmVQcm9wcz17Y3ViZUVkZ2VzOlswLDAsMF0sYXhpczpbMCwwLDBdfSx0aGlzLmxhYmVscz1bIngiLCJ5IiwieiJdLHRoaXMubGFiZWxFbmFibGU9WyEwLCEwLCEwXSx0aGlzLmxhYmVsRm9udD0ic2Fucy1zZXJpZiIsdGhpcy5sYWJlbFNpemU9WzIwLDIwLDIwXSx0aGlzLmxhYmVsQW5nbGU9WzAsMCwwXSx0aGlzLmxhYmVsQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmxhYmVsUGFkPVsxMCwxMCwxMF0sdGhpcy5saW5lRW5hYmxlPVshMCwhMCwhMF0sdGhpcy5saW5lTWlycm9yPVshMSwhMSwhMV0sdGhpcy5saW5lV2lkdGg9WzEsMSwxXSx0aGlzLmxpbmVDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMubGluZVRpY2tFbmFibGU9WyEwLCEwLCEwXSx0aGlzLmxpbmVUaWNrTWlycm9yPVshMSwhMSwhMV0sdGhpcy5saW5lVGlja0xlbmd0aD1bMCwwLDBdLHRoaXMubGluZVRpY2tXaWR0aD1bMSwxLDFdLHRoaXMubGluZVRpY2tDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMuZ3JpZEVuYWJsZT1bITAsITAsITBdLHRoaXMuZ3JpZFdpZHRoPVsxLDEsMV0sdGhpcy5ncmlkQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLnplcm9FbmFibGU9WyEwLCEwLCEwXSx0aGlzLnplcm9MaW5lQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLnplcm9MaW5lV2lkdGg9WzIsMiwyXSx0aGlzLmJhY2tncm91bmRFbmFibGU9WyExLCExLCExXSx0aGlzLmJhY2tncm91bmRDb2xvcj1bWy44LC44LC44LC41XSxbLjgsLjgsLjgsLjVdLFsuOCwuOCwuOCwuNV1dLHRoaXMuX2ZpcnN0SW5pdD0hMCx0aGlzLl90ZXh0PW51bGwsdGhpcy5fbGluZXM9bnVsbCx0aGlzLl9iYWNrZ3JvdW5kPWEodCl9dmFyIGg9dS5wcm90b3R5cGU7ZnVuY3Rpb24gZigpe3RoaXMucHJpbWFsT2Zmc2V0PVswLDAsMF0sdGhpcy5wcmltYWxNaW5vcj1bMCwwLDBdLHRoaXMubWlycm9yT2Zmc2V0PVswLDAsMF0sdGhpcy5taXJyb3JNaW5vcj1bMCwwLDBdfWgudXBkYXRlPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxyLG4pe2lmKG4gaW4gdCl7dmFyIGksYT10W25dLG89dGhpc1tuXTsoZT9BcnJheS5pc0FycmF5KGEpJiZBcnJheS5pc0FycmF5KGFbMF0pOkFycmF5LmlzQXJyYXkoYSkpP3RoaXNbbl09aT1bcihhWzBdKSxyKGFbMV0pLHIoYVsyXSldOnRoaXNbbl09aT1bcihhKSxyKGEpLHIoYSldO2Zvcih2YXIgcz0wO3M8MzsrK3MpaWYoaVtzXSE9PW9bc10pcmV0dXJuITB9cmV0dXJuITF9dD10fHx7fTt2YXIgcixhPWUuYmluZCh0aGlzLCExLE51bWJlciksbz1lLmJpbmQodGhpcywhMSxCb29sZWFuKSxsPWUuYmluZCh0aGlzLCExLFN0cmluZyksYz1lLmJpbmQodGhpcywhMCxmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXtpZigzPT09dC5sZW5ndGgpcmV0dXJuWyt0WzBdLCt0WzFdLCt0WzJdLDFdO2lmKDQ9PT10Lmxlbmd0aClyZXR1cm5bK3RbMF0sK3RbMV0sK3RbMl0sK3RbM11dfXJldHVyblswLDAsMCwxXX0pLHU9ITEsaD0hMTtpZigiYm91bmRzImluIHQpZm9yKHZhciBmPXQuYm91bmRzLHA9MDtwPDI7KytwKWZvcih2YXIgZD0wO2Q8MzsrK2QpZltwXVtkXSE9PXRoaXMuYm91bmRzW3BdW2RdJiYoaD0hMCksdGhpcy5ib3VuZHNbcF1bZF09ZltwXVtkXTtpZigidGlja3MiaW4gdCl7cj10LnRpY2tzLHU9ITAsdGhpcy5hdXRvVGlja3M9ITE7Zm9yKHA9MDtwPDM7KytwKXRoaXMudGlja1NwYWNpbmdbcF09MH1lbHNlIGEoInRpY2tTcGFjaW5nIikmJih0aGlzLmF1dG9UaWNrcz0hMCxoPSEwKTtpZih0aGlzLl9maXJzdEluaXQmJigidGlja3MiaW4gdHx8InRpY2tTcGFjaW5nImluIHR8fCh0aGlzLmF1dG9UaWNrcz0hMCksaD0hMCx1PSEwLHRoaXMuX2ZpcnN0SW5pdD0hMSksaCYmdGhpcy5hdXRvVGlja3MmJihyPXMuY3JlYXRlKHRoaXMuYm91bmRzLHRoaXMudGlja1NwYWNpbmcpLHU9ITApLHUpe2ZvcihwPTA7cDwzOysrcClyW3BdLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC54LWUueH0pO3MuZXF1YWwocix0aGlzLnRpY2tzKT91PSExOnRoaXMudGlja3M9cn1vKCJ0aWNrRW5hYmxlIiksbCgidGlja0ZvbnQiKSYmKHU9ITApLGEoInRpY2tTaXplIiksYSgidGlja0FuZ2xlIiksYSgidGlja1BhZCIpLGMoInRpY2tDb2xvciIpO3ZhciBnPWwoImxhYmVscyIpO2woImxhYmVsRm9udCIpJiYoZz0hMCksbygibGFiZWxFbmFibGUiKSxhKCJsYWJlbFNpemUiKSxhKCJsYWJlbFBhZCIpLGMoImxhYmVsQ29sb3IiKSxvKCJsaW5lRW5hYmxlIiksbygibGluZU1pcnJvciIpLGEoImxpbmVXaWR0aCIpLGMoImxpbmVDb2xvciIpLG8oImxpbmVUaWNrRW5hYmxlIiksbygibGluZVRpY2tNaXJyb3IiKSxhKCJsaW5lVGlja0xlbmd0aCIpLGEoImxpbmVUaWNrV2lkdGgiKSxjKCJsaW5lVGlja0NvbG9yIiksbygiZ3JpZEVuYWJsZSIpLGEoImdyaWRXaWR0aCIpLGMoImdyaWRDb2xvciIpLG8oInplcm9FbmFibGUiKSxjKCJ6ZXJvTGluZUNvbG9yIiksYSgiemVyb0xpbmVXaWR0aCIpLG8oImJhY2tncm91bmRFbmFibGUiKSxjKCJiYWNrZ3JvdW5kQ29sb3IiKSx0aGlzLl90ZXh0P3RoaXMuX3RleHQmJihnfHx1KSYmdGhpcy5fdGV4dC51cGRhdGUodGhpcy5ib3VuZHMsdGhpcy5sYWJlbHMsdGhpcy5sYWJlbEZvbnQsdGhpcy50aWNrcyx0aGlzLnRpY2tGb250KTp0aGlzLl90ZXh0PW4odGhpcy5nbCx0aGlzLmJvdW5kcyx0aGlzLmxhYmVscyx0aGlzLmxhYmVsRm9udCx0aGlzLnRpY2tzLHRoaXMudGlja0ZvbnQpLHRoaXMuX2xpbmVzJiZ1JiYodGhpcy5fbGluZXMuZGlzcG9zZSgpLHRoaXMuX2xpbmVzPW51bGwpLHRoaXMuX2xpbmVzfHwodGhpcy5fbGluZXM9aSh0aGlzLmdsLHRoaXMuYm91bmRzLHRoaXMudGlja3MpKX07dmFyIHA9W25ldyBmLG5ldyBmLG5ldyBmXTtmdW5jdGlvbiBkKHQsZSxyLG4saSl7Zm9yKHZhciBhPXQucHJpbWFsT2Zmc2V0LG89dC5wcmltYWxNaW5vcixzPXQubWlycm9yT2Zmc2V0LGw9dC5taXJyb3JNaW5vcixjPW5bZV0sdT0wO3U8MzsrK3UpaWYoZSE9PXUpe3ZhciBoPWEsZj1zLHA9byxkPWw7YyYxPDx1JiYoaD1zLGY9YSxwPWwsZD1vKSxoW3VdPXJbMF1bdV0sZlt1XT1yWzFdW3VdLGlbdV0+MD8ocFt1XT0tMSxkW3VdPTApOihwW3VdPTAsZFt1XT0xKX19dmFyIGc9WzAsMCwwXSxtPXttb2RlbDpsLHZpZXc6bCxwcm9qZWN0aW9uOmx9O2guaXNPcGFxdWU9ZnVuY3Rpb24oKXtyZXR1cm4hMH0saC5pc1RyYW5zcGFyZW50PWZ1bmN0aW9uKCl7cmV0dXJuITF9LGguZHJhd1RyYW5zcGFyZW50PWZ1bmN0aW9uKHQpe307dmFyIHY9WzAsMCwwXSx5PVswLDAsMF0seD1bMCwwLDBdO2guZHJhdz1mdW5jdGlvbih0KXt0PXR8fG07Zm9yKHZhciBlPXRoaXMuZ2wscj10Lm1vZGVsfHxsLG49dC52aWV3fHxsLGk9dC5wcm9qZWN0aW9ufHxsLGE9dGhpcy5ib3VuZHMscz1vKHIsbixpLGEpLHU9cy5jdWJlRWRnZXMsaD1zLmF4aXMsZj1uWzEyXSxiPW5bMTNdLF89blsxNF0sdz1uWzE1XSxrPXRoaXMucGl4ZWxSYXRpbyooaVszXSpmK2lbN10qYitpWzExXSpfK2lbMTVdKncpL2UuZHJhd2luZ0J1ZmZlckhlaWdodCxNPTA7TTwzOysrTSl0aGlzLmxhc3RDdWJlUHJvcHMuY3ViZUVkZ2VzW01dPXVbTV0sdGhpcy5sYXN0Q3ViZVByb3BzLmF4aXNbTV09aFtNXTt2YXIgQT1wO2ZvcihNPTA7TTwzOysrTSlkKHBbTV0sTSx0aGlzLmJvdW5kcyx1LGgpO2U9dGhpcy5nbDt2YXIgVD1nO2ZvcihNPTA7TTwzOysrTSl0aGlzLmJhY2tncm91bmRFbmFibGVbTV0/VFtNXT1oW01dOlRbTV09MDt0aGlzLl9iYWNrZ3JvdW5kLmRyYXcocixuLGksYSxULHRoaXMuYmFja2dyb3VuZENvbG9yKSx0aGlzLl9saW5lcy5iaW5kKHIsbixpLHRoaXMpO2ZvcihNPTA7TTwzOysrTSl7dmFyIFM9WzAsMCwwXTtoW01dPjA/U1tNXT1hWzFdW01dOlNbTV09YVswXVtNXTtmb3IodmFyIEU9MDtFPDI7KytFKXt2YXIgQz0oTSsxK0UpJTMsTD0oTSsxKygxXkUpKSUzO3RoaXMuZ3JpZEVuYWJsZVtDXSYmdGhpcy5fbGluZXMuZHJhd0dyaWQoQyxMLHRoaXMuYm91bmRzLFMsdGhpcy5ncmlkQ29sb3JbQ10sdGhpcy5ncmlkV2lkdGhbQ10qdGhpcy5waXhlbFJhdGlvKX1mb3IoRT0wO0U8MjsrK0Upe0M9KE0rMStFKSUzLEw9KE0rMSsoMV5FKSklMzt0aGlzLnplcm9FbmFibGVbTF0mJmFbMF1bTF08PTAmJmFbMV1bTF0+PTAmJnRoaXMuX2xpbmVzLmRyYXdaZXJvKEMsTCx0aGlzLmJvdW5kcyxTLHRoaXMuemVyb0xpbmVDb2xvcltMXSx0aGlzLnplcm9MaW5lV2lkdGhbTF0qdGhpcy5waXhlbFJhdGlvKX19Zm9yKE09MDtNPDM7KytNKXt0aGlzLmxpbmVFbmFibGVbTV0mJnRoaXMuX2xpbmVzLmRyYXdBeGlzTGluZShNLHRoaXMuYm91bmRzLEFbTV0ucHJpbWFsT2Zmc2V0LHRoaXMubGluZUNvbG9yW01dLHRoaXMubGluZVdpZHRoW01dKnRoaXMucGl4ZWxSYXRpbyksdGhpcy5saW5lTWlycm9yW01dJiZ0aGlzLl9saW5lcy5kcmF3QXhpc0xpbmUoTSx0aGlzLmJvdW5kcyxBW01dLm1pcnJvck9mZnNldCx0aGlzLmxpbmVDb2xvcltNXSx0aGlzLmxpbmVXaWR0aFtNXSp0aGlzLnBpeGVsUmF0aW8pO3ZhciB6PWModixBW01dLnByaW1hbE1pbm9yKSxQPWMoeSxBW01dLm1pcnJvck1pbm9yKSxJPXRoaXMubGluZVRpY2tMZW5ndGg7Zm9yKEU9MDtFPDM7KytFKXt2YXIgTz1rL3JbNSpFXTt6W0VdKj1JW0VdKk8sUFtFXSo9SVtFXSpPfXRoaXMubGluZVRpY2tFbmFibGVbTV0mJnRoaXMuX2xpbmVzLmRyYXdBeGlzVGlja3MoTSxBW01dLnByaW1hbE9mZnNldCx6LHRoaXMubGluZVRpY2tDb2xvcltNXSx0aGlzLmxpbmVUaWNrV2lkdGhbTV0qdGhpcy5waXhlbFJhdGlvKSx0aGlzLmxpbmVUaWNrTWlycm9yW01dJiZ0aGlzLl9saW5lcy5kcmF3QXhpc1RpY2tzKE0sQVtNXS5taXJyb3JPZmZzZXQsUCx0aGlzLmxpbmVUaWNrQ29sb3JbTV0sdGhpcy5saW5lVGlja1dpZHRoW01dKnRoaXMucGl4ZWxSYXRpbyl9dGhpcy5fbGluZXMudW5iaW5kKCksdGhpcy5fdGV4dC5iaW5kKHIsbixpLHRoaXMucGl4ZWxSYXRpbyk7Zm9yKE09MDtNPDM7KytNKXt2YXIgRD1BW01dLnByaW1hbE1pbm9yLFI9Yyh4LEFbTV0ucHJpbWFsT2Zmc2V0KTtmb3IoRT0wO0U8MzsrK0UpdGhpcy5saW5lVGlja0VuYWJsZVtNXSYmKFJbRV0rPWsqRFtFXSpNYXRoLm1heCh0aGlzLmxpbmVUaWNrTGVuZ3RoW0VdLDApL3JbNSpFXSk7aWYodGhpcy50aWNrRW5hYmxlW01dKXtmb3IoRT0wO0U8MzsrK0UpUltFXSs9aypEW0VdKnRoaXMudGlja1BhZFtFXS9yWzUqRV07dGhpcy5fdGV4dC5kcmF3VGlja3MoTSx0aGlzLnRpY2tTaXplW01dLHRoaXMudGlja0FuZ2xlW01dLFIsdGhpcy50aWNrQ29sb3JbTV0pfWlmKHRoaXMubGFiZWxFbmFibGVbTV0pe2ZvcihFPTA7RTwzOysrRSlSW0VdKz1rKkRbRV0qdGhpcy5sYWJlbFBhZFtFXS9yWzUqRV07UltNXSs9LjUqKGFbMF1bTV0rYVsxXVtNXSksdGhpcy5fdGV4dC5kcmF3TGFiZWwoTSx0aGlzLmxhYmVsU2l6ZVtNXSx0aGlzLmxhYmVsQW5nbGVbTV0sUix0aGlzLmxhYmVsQ29sb3JbTV0pfX10aGlzLl90ZXh0LnVuYmluZCgpfSxoLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLl90ZXh0LmRpc3Bvc2UoKSx0aGlzLl9saW5lcy5kaXNwb3NlKCksdGhpcy5fYmFja2dyb3VuZC5kaXNwb3NlKCksdGhpcy5fbGluZXM9bnVsbCx0aGlzLl90ZXh0PW51bGwsdGhpcy5fYmFja2dyb3VuZD1udWxsLHRoaXMuZ2w9bnVsbH19LHsiLi9saWIvYmFja2dyb3VuZC5qcyI6MjIzLCIuL2xpYi9jdWJlLmpzIjoyMjQsIi4vbGliL2xpbmVzLmpzIjoyMjUsIi4vbGliL3RleHQuanMiOjIyNywiLi9saWIvdGlja3MuanMiOjIyOH1dLDIyMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLHI9W10scz0wLGw9MDtsPDM7KytsKWZvcih2YXIgYz0obCsxKSUzLHU9KGwrMiklMyxoPVswLDAsMF0sZj1bMCwwLDBdLHA9LTE7cDw9MTtwKz0yKXtyLnB1c2gocyxzKzIscysxLHMrMSxzKzIscyszKSxoW2xdPXAsZltsXT1wO2Zvcih2YXIgZD0tMTtkPD0xO2QrPTIpe2hbY109ZDtmb3IodmFyIGc9LTE7Zzw9MTtnKz0yKWhbdV09ZyxlLnB1c2goaFswXSxoWzFdLGhbMl0sZlswXSxmWzFdLGZbMl0pLHMrPTF9dmFyIG09YztjPXUsdT1tfXZhciB2PW4odCxuZXcgRmxvYXQzMkFycmF5KGUpKSx5PW4odCxuZXcgVWludDE2QXJyYXkociksdC5FTEVNRU5UX0FSUkFZX0JVRkZFUikseD1pKHQsW3tidWZmZXI6dix0eXBlOnQuRkxPQVQsc2l6ZTozLG9mZnNldDowLHN0cmlkZToyNH0se2J1ZmZlcjp2LHR5cGU6dC5GTE9BVCxzaXplOjMsb2Zmc2V0OjEyLHN0cmlkZToyNH1dLHkpLGI9YSh0KTtyZXR1cm4gYi5hdHRyaWJ1dGVzLnBvc2l0aW9uLmxvY2F0aW9uPTAsYi5hdHRyaWJ1dGVzLm5vcm1hbC5sb2NhdGlvbj0xLG5ldyBvKHQsdix4LGIpfTt2YXIgbj10KCJnbC1idWZmZXIiKSxpPXQoImdsLXZhbyIpLGE9dCgiLi9zaGFkZXJzIikuYmc7ZnVuY3Rpb24gbyh0LGUscixuKXt0aGlzLmdsPXQsdGhpcy5idWZmZXI9ZSx0aGlzLnZhbz1yLHRoaXMuc2hhZGVyPW59dmFyIHM9by5wcm90b3R5cGU7cy5kcmF3PWZ1bmN0aW9uKHQsZSxyLG4saSxhKXtmb3IodmFyIG89ITEscz0wO3M8MzsrK3Mpbz1vfHxpW3NdO2lmKG8pe3ZhciBsPXRoaXMuZ2w7bC5lbmFibGUobC5QT0xZR09OX09GRlNFVF9GSUxMKSxsLnBvbHlnb25PZmZzZXQoMSwyKSx0aGlzLnNoYWRlci5iaW5kKCksdGhpcy5zaGFkZXIudW5pZm9ybXM9e21vZGVsOnQsdmlldzplLHByb2plY3Rpb246cixib3VuZHM6bixlbmFibGU6aSxjb2xvcnM6YX0sdGhpcy52YW8uYmluZCgpLHRoaXMudmFvLmRyYXcodGhpcy5nbC5UUklBTkdMRVMsMzYpLHRoaXMudmFvLnVuYmluZCgpLGwuZGlzYWJsZShsLlBPTFlHT05fT0ZGU0VUX0ZJTEwpfX0scy5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy52YW8uZGlzcG9zZSgpLHRoaXMuYnVmZmVyLmRpc3Bvc2UoKSx0aGlzLnNoYWRlci5kaXNwb3NlKCl9fSx7Ii4vc2hhZGVycyI6MjI2LCJnbC1idWZmZXIiOjIzMCwiZ2wtdmFvIjozMDh9XSwyMjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe2kocyxlLHQpLGkocyxyLHMpO2Zvcih2YXIgcD0wLHk9MDt5PDI7Kyt5KXt1WzJdPWFbeV1bMl07Zm9yKHZhciB4PTA7eDwyOysreCl7dVsxXT1hW3hdWzFdO2Zvcih2YXIgYj0wO2I8MjsrK2IpdVswXT1hW2JdWzBdLGYobFtwXSx1LHMpLHArPTF9fWZvcih2YXIgXz0tMSx5PTA7eTw4OysreSl7Zm9yKHZhciB3PWxbeV1bM10saz0wO2s8MzsrK2spY1t5XVtrXT1sW3ldW2tdL3c7dzwwJiYoXzwwP189eTpjW3ldWzJdPGNbX11bMl0mJihfPXkpKX1pZihfPDApe189MDtmb3IodmFyIE09MDtNPDM7KytNKXtmb3IodmFyIEE9KE0rMiklMyxUPShNKzEpJTMsUz0tMSxFPS0xLEM9MDtDPDI7KytDKXt2YXIgTD1DPDxNLHo9TCsoQzw8QSkrKDEtQzw8VCksUD1MKygxLUM8PEEpKyhDPDxUKTtvKGNbTF0sY1t6XSxjW1BdLGgpPDB8fChDP1M9MTpFPTEpfWlmKFM8MHx8RTwwKUU+UyYmKF98PTE8PE0pO2Vsc2V7Zm9yKHZhciBDPTA7QzwyOysrQyl7dmFyIEw9Qzw8TSx6PUwrKEM8PEEpKygxLUM8PFQpLFA9TCsoMS1DPDxBKSsoQzw8VCksST1kKFtsW0xdLGxbel0sbFtQXSxsW0wrKDE8PEEpKygxPDxUKV1dKTtDP1M9STpFPUl9RT5TJiYoX3w9MTw8TSl9fX1mb3IodmFyIE89N15fLEQ9LTEseT0wO3k8ODsrK3kpeSE9PV8mJnkhPT1PJiYoRDwwP0Q9eTpjW0RdWzFdPmNbeV1bMV0mJihEPXkpKTtmb3IodmFyIFI9LTEseT0wO3k8MzsrK3kpe3ZhciBCPUReMTw8eTtpZihCIT09XyYmQiE9PU8pe1I8MCYmKFI9Qik7dmFyIFQ9Y1tCXTtUWzBdPGNbUl1bMF0mJihSPUIpfX1mb3IodmFyIEY9LTEseT0wO3k8MzsrK3kpe3ZhciBCPUReMTw8eTtpZihCIT09XyYmQiE9PU8mJkIhPT1SKXtGPDAmJihGPUIpO3ZhciBUPWNbQl07VFswXT5jW0ZdWzBdJiYoRj1CKX19dmFyIE49ZztOWzBdPU5bMV09TlsyXT0wLE5bbi5sb2cyKFJeRCldPUQmUixOW24ubG9nMihEXkYpXT1EJkY7dmFyIGo9N15GO2o9PT1ffHxqPT09Tz8oaj03XlIsTltuLmxvZzIoRl5qKV09aiZGKTpOW24ubG9nMihSXmopXT1qJlI7Zm9yKHZhciBWPW0sVT1fLE09MDtNPDM7KytNKVZbTV09VSYxPDxNPy0xOjE7cmV0dXJuIHZ9O3ZhciBuPXQoImJpdC10d2lkZGxlIiksaT10KCJnbC1tYXQ0L211bHRpcGx5IiksYT0odCgiZ2wtbWF0NC9pbnZlcnQiKSx0KCJzcGxpdC1wb2x5Z29uIikpLG89dCgicm9idXN0LW9yaWVudGF0aW9uIikscz1uZXcgQXJyYXkoMTYpLGw9KG5ldyBBcnJheSgxNiksbmV3IEFycmF5KDgpKSxjPW5ldyBBcnJheSg4KSx1PW5ldyBBcnJheSgzKSxoPVswLDAsMF07ZnVuY3Rpb24gZih0LGUscil7Zm9yKHZhciBuPTA7bjw0Oysrbil7dFtuXT1yWzEyK25dO2Zvcih2YXIgaT0wO2k8MzsrK2kpdFtuXSs9ZVtpXSpyWzQqaStuXX19IWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTA7dDw4OysrdClsW3RdPVsxLDEsMSwxXSxjW3RdPVsxLDEsMV19KCk7dmFyIHA9W1swLDAsMSwwLDBdLFswLDAsLTEsMSwwXSxbMCwtMSwwLDEsMF0sWzAsMSwwLDEsMF0sWy0xLDAsMCwxLDBdLFsxLDAsMCwxLDBdXTtmdW5jdGlvbiBkKHQpe2Zvcih2YXIgZT0wO2U8cC5sZW5ndGg7KytlKWlmKCh0PWEucG9zaXRpdmUodCxwW2VdKSkubGVuZ3RoPDMpcmV0dXJuIDA7dmFyIHI9dFswXSxuPXJbMF0vclszXSxpPXJbMV0vclszXSxvPTA7Zm9yKGU9MTtlKzE8dC5sZW5ndGg7KytlKXt2YXIgcz10W2VdLGw9dFtlKzFdLGM9c1swXS9zWzNdLW4sdT1zWzFdL3NbM10taSxoPWxbMF0vbFszXS1uLGY9bFsxXS9sWzNdLWk7bys9TWF0aC5hYnMoYypmLXUqaCl9cmV0dXJuIG99dmFyIGc9WzEsMSwxXSxtPVswLDAsMF0sdj17Y3ViZUVkZ2VzOmcsYXhpczptfX0seyJiaXQtdHdpZGRsZSI6ODAsImdsLW1hdDQvaW52ZXJ0IjoyNTQsImdsLW1hdDQvbXVsdGlwbHkiOjI1Niwicm9idXN0LW9yaWVudGF0aW9uIjo0NzEsInNwbGl0LXBvbHlnb24iOjQ4OH1dLDIyNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBvPVtdLHM9WzAsMCwwXSxsPVswLDAsMF0sYz1bMCwwLDBdLHU9WzAsMCwwXTtvLnB1c2goMCwwLDEsMCwxLDEsMCwwLC0xLDAsMCwtMSwwLDEsMSwwLDEsLTEpO2Zvcih2YXIgaD0wO2g8MzsrK2gpe2Zvcih2YXIgZj1vLmxlbmd0aC8zfDAsZD0wO2Q8cltoXS5sZW5ndGg7KytkKXt2YXIgZz0rcltoXVtkXS54O28ucHVzaChnLDAsMSxnLDEsMSxnLDAsLTEsZywwLC0xLGcsMSwxLGcsMSwtMSl9dmFyIG09by5sZW5ndGgvM3wwO3NbaF09ZixsW2hdPW0tZjtmb3IodmFyIGY9by5sZW5ndGgvM3wwLHY9MDt2PHJbaF0ubGVuZ3RoOysrdil7dmFyIGc9K3JbaF1bdl0ueDtvLnB1c2goZywwLDEsZywxLDEsZywwLC0xLGcsMCwtMSxnLDEsMSxnLDEsLTEpfXZhciBtPW8ubGVuZ3RoLzN8MDtjW2hdPWYsdVtoXT1tLWZ9dmFyIHk9bih0LG5ldyBGbG9hdDMyQXJyYXkobykpLHg9aSh0LFt7YnVmZmVyOnksdHlwZTp0LkZMT0FULHNpemU6MyxzdHJpZGU6MCxvZmZzZXQ6MH1dKSxiPWEodCk7cmV0dXJuIGIuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLG5ldyBwKHQseSx4LGIsbCxzLHUsYyl9O3ZhciBuPXQoImdsLWJ1ZmZlciIpLGk9dCgiZ2wtdmFvIiksYT10KCIuL3NoYWRlcnMiKS5saW5lLG89WzAsMCwwXSxzPVswLDAsMF0sbD1bMCwwLDBdLGM9WzAsMCwwXSx1PVsxLDFdO2Z1bmN0aW9uIGgodCl7cmV0dXJuIHRbMF09dFsxXT10WzJdPTAsdH1mdW5jdGlvbiBmKHQsZSl7cmV0dXJuIHRbMF09ZVswXSx0WzFdPWVbMV0sdFsyXT1lWzJdLHR9ZnVuY3Rpb24gcCh0LGUscixuLGksYSxvLHMpe3RoaXMuZ2w9dCx0aGlzLnZlcnRCdWZmZXI9ZSx0aGlzLnZhbz1yLHRoaXMuc2hhZGVyPW4sdGhpcy50aWNrQ291bnQ9aSx0aGlzLnRpY2tPZmZzZXQ9YSx0aGlzLmdyaWRDb3VudD1vLHRoaXMuZ3JpZE9mZnNldD1zfXZhciBkPXAucHJvdG90eXBlO2QuYmluZD1mdW5jdGlvbih0LGUscil7dGhpcy5zaGFkZXIuYmluZCgpLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm1vZGVsPXQsdGhpcy5zaGFkZXIudW5pZm9ybXMudmlldz1lLHRoaXMuc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb249cix1WzBdPXRoaXMuZ2wuZHJhd2luZ0J1ZmZlcldpZHRoLHVbMV09dGhpcy5nbC5kcmF3aW5nQnVmZmVySGVpZ2h0LHRoaXMuc2hhZGVyLnVuaWZvcm1zLnNjcmVlblNoYXBlPXUsdGhpcy52YW8uYmluZCgpfSxkLnVuYmluZD1mdW5jdGlvbigpe3RoaXMudmFvLnVuYmluZCgpfSxkLmRyYXdBeGlzTGluZT1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPWgocyk7dGhpcy5zaGFkZXIudW5pZm9ybXMubWFqb3JBeGlzPXMsYVt0XT1lWzFdW3RdLWVbMF1bdF0sdGhpcy5zaGFkZXIudW5pZm9ybXMubWlub3JBeGlzPWE7dmFyIG8sdT1mKGMscik7dVt0XSs9ZVswXVt0XSx0aGlzLnNoYWRlci51bmlmb3Jtcy5vZmZzZXQ9dSx0aGlzLnNoYWRlci51bmlmb3Jtcy5saW5lV2lkdGg9aSx0aGlzLnNoYWRlci51bmlmb3Jtcy5jb2xvcj1uLChvPWgobCkpWyh0KzIpJTNdPTEsdGhpcy5zaGFkZXIudW5pZm9ybXMuc2NyZWVuQXhpcz1vLHRoaXMudmFvLmRyYXcodGhpcy5nbC5UUklBTkdMRVMsNiksKG89aChsKSlbKHQrMSklM109MSx0aGlzLnNoYWRlci51bmlmb3Jtcy5zY3JlZW5BeGlzPW8sdGhpcy52YW8uZHJhdyh0aGlzLmdsLlRSSUFOR0xFUyw2KX0sZC5kcmF3QXhpc1RpY2tzPWZ1bmN0aW9uKHQsZSxyLG4saSl7aWYodGhpcy50aWNrQ291bnRbdF0pe3ZhciBhPWgobyk7YVt0XT0xLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm1ham9yQXhpcz1hLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm9mZnNldD1lLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm1pbm9yQXhpcz1yLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmNvbG9yPW4sdGhpcy5zaGFkZXIudW5pZm9ybXMubGluZVdpZHRoPWk7dmFyIHM9aChsKTtzW3RdPTEsdGhpcy5zaGFkZXIudW5pZm9ybXMuc2NyZWVuQXhpcz1zLHRoaXMudmFvLmRyYXcodGhpcy5nbC5UUklBTkdMRVMsdGhpcy50aWNrQ291bnRbdF0sdGhpcy50aWNrT2Zmc2V0W3RdKX19LGQuZHJhd0dyaWQ9ZnVuY3Rpb24odCxlLHIsbixpLGEpe2lmKHRoaXMuZ3JpZENvdW50W3RdKXt2YXIgdT1oKHMpO3VbZV09clsxXVtlXS1yWzBdW2VdLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm1pbm9yQXhpcz11O3ZhciBwPWYoYyxuKTtwW2VdKz1yWzBdW2VdLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm9mZnNldD1wO3ZhciBkPWgobyk7ZFt0XT0xLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm1ham9yQXhpcz1kO3ZhciBnPWgobCk7Z1t0XT0xLHRoaXMuc2hhZGVyLnVuaWZvcm1zLnNjcmVlbkF4aXM9Zyx0aGlzLnNoYWRlci51bmlmb3Jtcy5saW5lV2lkdGg9YSx0aGlzLnNoYWRlci51bmlmb3Jtcy5jb2xvcj1pLHRoaXMudmFvLmRyYXcodGhpcy5nbC5UUklBTkdMRVMsdGhpcy5ncmlkQ291bnRbdF0sdGhpcy5ncmlkT2Zmc2V0W3RdKX19LGQuZHJhd1plcm89ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvPWgocyk7dGhpcy5zaGFkZXIudW5pZm9ybXMubWFqb3JBeGlzPW8sb1t0XT1yWzFdW3RdLXJbMF1bdF0sdGhpcy5zaGFkZXIudW5pZm9ybXMubWlub3JBeGlzPW87dmFyIHU9ZihjLG4pO3VbdF0rPXJbMF1bdF0sdGhpcy5zaGFkZXIudW5pZm9ybXMub2Zmc2V0PXU7dmFyIHA9aChsKTtwW2VdPTEsdGhpcy5zaGFkZXIudW5pZm9ybXMuc2NyZWVuQXhpcz1wLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmxpbmVXaWR0aD1hLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmNvbG9yPWksdGhpcy52YW8uZHJhdyh0aGlzLmdsLlRSSUFOR0xFUyw2KX0sZC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy52YW8uZGlzcG9zZSgpLHRoaXMudmVydEJ1ZmZlci5kaXNwb3NlKCksdGhpcy5zaGFkZXIuZGlzcG9zZSgpfX0seyIuL3NoYWRlcnMiOjIyNiwiZ2wtYnVmZmVyIjoyMzAsImdsLXZhbyI6MzA4fV0sMjI2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImdsc2xpZnkiKSxpPXQoImdsLXNoYWRlciIpLGE9bihbIiNkZWZpbmUgR0xTTElGWSAxXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcblxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xudW5pZm9ybSB2ZWMzIG9mZnNldCwgbWFqb3JBeGlzLCBtaW5vckF4aXMsIHNjcmVlbkF4aXM7XG51bmlmb3JtIGZsb2F0IGxpbmVXaWR0aDtcbnVuaWZvcm0gdmVjMiBzY3JlZW5TaGFwZTtcblxudmVjMyBwcm9qZWN0KHZlYzMgcCkge1xuICB2ZWM0IHBwID0gcHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQocCwgMS4wKTtcbiAgcmV0dXJuIHBwLnh5eiAvIG1heChwcC53LCAwLjAwMDEpO1xufVxuXG52b2lkIG1haW4oKSB7XG4gIHZlYzMgbWFqb3IgPSBwb3NpdGlvbi54ICogbWFqb3JBeGlzO1xuICB2ZWMzIG1pbm9yID0gcG9zaXRpb24ueSAqIG1pbm9yQXhpcztcblxuICB2ZWMzIHZQb3NpdGlvbiA9IG1ham9yICsgbWlub3IgKyBvZmZzZXQ7XG4gIHZlYzMgcFBvc2l0aW9uID0gcHJvamVjdCh2UG9zaXRpb24pO1xuICB2ZWMzIG9mZnNldCA9IHByb2plY3QodlBvc2l0aW9uICsgc2NyZWVuQXhpcyAqIHBvc2l0aW9uLnopO1xuXG4gIHZlYzIgc2NyZWVuID0gbm9ybWFsaXplKChvZmZzZXQgLSBwUG9zaXRpb24pLnh5ICogc2NyZWVuU2hhcGUpIC8gc2NyZWVuU2hhcGU7XG5cbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBQb3NpdGlvbiArIHZlYzMoMC41ICogc2NyZWVuICogbGluZVdpZHRoLCAwKSwgMS4wKTtcbn1cbiJdKSxvPW4oWyJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG51bmlmb3JtIHZlYzQgY29sb3I7XG52b2lkIG1haW4oKSB7XG4gIGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xufSJdKTtyLmxpbmU9ZnVuY3Rpb24odCl7cmV0dXJuIGkodCxhLG8sbnVsbCxbe25hbWU6InBvc2l0aW9uIix0eXBlOiJ2ZWMzIn1dKX07dmFyIHM9bihbIiNkZWZpbmUgR0xTTElGWSAxXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcblxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xudW5pZm9ybSB2ZWMzIG9mZnNldCwgYXhpcztcbnVuaWZvcm0gZmxvYXQgc2NhbGUsIGFuZ2xlLCBwaXhlbFNjYWxlO1xudW5pZm9ybSB2ZWMyIHJlc29sdXRpb247XG5cbnZvaWQgbWFpbigpIHsgIFxuICAvL0NvbXB1dGUgcGxhbmUgb2Zmc2V0XG4gIHZlYzIgcGxhbmVDb29yZCA9IHBvc2l0aW9uLnh5ICogcGl4ZWxTY2FsZTtcbiAgbWF0MiBwbGFuZVhmb3JtID0gc2NhbGUgKiBtYXQyKGNvcyhhbmdsZSksIHNpbihhbmdsZSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1zaW4oYW5nbGUpLCBjb3MoYW5nbGUpKTtcbiAgdmVjMiB2aWV3T2Zmc2V0ID0gMi4wICogcGxhbmVYZm9ybSAqIHBsYW5lQ29vcmQgLyByZXNvbHV0aW9uO1xuXG4gIC8vQ29tcHV0ZSB3b3JsZCBvZmZzZXRcbiAgZmxvYXQgYXhpc0Rpc3RhbmNlID0gcG9zaXRpb24uejtcbiAgdmVjMyBkYXRhUG9zaXRpb24gPSBheGlzRGlzdGFuY2UgKiBheGlzICsgb2Zmc2V0O1xuICB2ZWM0IHdvcmxkUG9zaXRpb24gPSBtb2RlbCAqIHZlYzQoZGF0YVBvc2l0aW9uLCAxKTtcbiAgXG4gIC8vQ29tcHV0ZSBjbGlwIHBvc2l0aW9uXG4gIHZlYzQgdmlld1Bvc2l0aW9uID0gdmlldyAqIHdvcmxkUG9zaXRpb247XG4gIHZlYzQgY2xpcFBvc2l0aW9uID0gcHJvamVjdGlvbiAqIHZpZXdQb3NpdGlvbjtcbiAgY2xpcFBvc2l0aW9uIC89IGNsaXBQb3NpdGlvbi53O1xuXG4gIC8vQXBwbHkgdGV4dCBvZmZzZXQgaW4gY2xpcCBjb29yZGluYXRlc1xuICBjbGlwUG9zaXRpb24gKz0gdmVjNCh2aWV3T2Zmc2V0LCAwLCAwKTtcblxuICAvL0RvbmVcbiAgZ2xfUG9zaXRpb24gPSBjbGlwUG9zaXRpb247XG59Il0pLGw9bihbInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcbnVuaWZvcm0gdmVjNCBjb2xvcjtcbnZvaWQgbWFpbigpIHtcbiAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7XG59Il0pO3IudGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gaSh0LHMsbCxudWxsLFt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzMifV0pfTt2YXIgYz1uKFsiI2RlZmluZSBHTFNMSUZZIDFcbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uO1xuYXR0cmlidXRlIHZlYzMgbm9ybWFsO1xuXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XG51bmlmb3JtIHZlYzMgZW5hYmxlO1xudW5pZm9ybSB2ZWMzIGJvdW5kc1syXTtcblxudmFyeWluZyB2ZWMzIGNvbG9yQ2hhbm5lbDtcblxudm9pZCBtYWluKCkge1xuICBpZihkb3Qobm9ybWFsLCBlbmFibGUpID4gMC4wKSB7XG4gICAgdmVjMyBuUG9zaXRpb24gPSBtaXgoYm91bmRzWzBdLCBib3VuZHNbMV0sIDAuNSAqIChwb3NpdGlvbiArIDEuMCkpO1xuICAgIGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQoblBvc2l0aW9uLCAxLjApO1xuICB9IGVsc2Uge1xuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgwLDAsMCwwKTtcbiAgfVxuICBjb2xvckNoYW5uZWwgPSBhYnMobm9ybWFsKTtcbn0iXSksdT1uKFsicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG51bmlmb3JtIHZlYzQgY29sb3JzWzNdO1xuXG52YXJ5aW5nIHZlYzMgY29sb3JDaGFubmVsO1xuXG52b2lkIG1haW4oKSB7XG4gIGdsX0ZyYWdDb2xvciA9IGNvbG9yQ2hhbm5lbC54ICogY29sb3JzWzBdICsgXG4gICAgICAgICAgICAgICAgIGNvbG9yQ2hhbm5lbC55ICogY29sb3JzWzFdICtcbiAgICAgICAgICAgICAgICAgY29sb3JDaGFubmVsLnogKiBjb2xvcnNbMl07XG59Il0pO3IuYmc9ZnVuY3Rpb24odCl7cmV0dXJuIGkodCxjLHUsbnVsbCxbe25hbWU6InBvc2l0aW9uIix0eXBlOiJ2ZWMzIn0se25hbWU6Im5vcm1hbCIsdHlwZToidmVjMyJ9XSl9fSx7ImdsLXNoYWRlciI6Mjg3LGdsc2xpZnk6Mzc3fV0sMjI3OltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSxzLGwpe3ZhciB1PW4odCksaD1pKHQsW3tidWZmZXI6dSxzaXplOjN9XSksZj1vKHQpO2YuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wO3ZhciBwPW5ldyBjKHQsZix1LGgpO3JldHVybiBwLnVwZGF0ZShlLHIsYSxzLGwpLHB9O3ZhciBuPXQoImdsLWJ1ZmZlciIpLGk9dCgiZ2wtdmFvIiksYT10KCJ2ZWN0b3JpemUtdGV4dCIpLG89dCgiLi9zaGFkZXJzIikudGV4dCxzPXdpbmRvd3x8ci5nbG9iYWx8fHt9LGw9cy5fX1RFWFRfQ0FDSEV8fHt9O3MuX19URVhUX0NBQ0hFPXt9O2Z1bmN0aW9uIGModCxlLHIsbil7dGhpcy5nbD10LHRoaXMuc2hhZGVyPWUsdGhpcy5idWZmZXI9cix0aGlzLnZhbz1uLHRoaXMudGlja09mZnNldD10aGlzLnRpY2tDb3VudD10aGlzLmxhYmVsT2Zmc2V0PXRoaXMubGFiZWxDb3VudD1udWxsfXZhciB1PWMucHJvdG90eXBlLGg9WzAsMF07dS5iaW5kPWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMudmFvLmJpbmQoKSx0aGlzLnNoYWRlci5iaW5kKCk7dmFyIGk9dGhpcy5zaGFkZXIudW5pZm9ybXM7aS5tb2RlbD10LGkudmlldz1lLGkucHJvamVjdGlvbj1yLGkucGl4ZWxTY2FsZT1uLGhbMF09dGhpcy5nbC5kcmF3aW5nQnVmZmVyV2lkdGgsaFsxXT10aGlzLmdsLmRyYXdpbmdCdWZmZXJIZWlnaHQsdGhpcy5zaGFkZXIudW5pZm9ybXMucmVzb2x1dGlvbj1ofSx1LnVuYmluZD1mdW5jdGlvbigpe3RoaXMudmFvLnVuYmluZCgpfSx1LnVwZGF0ZT1mdW5jdGlvbih0LGUscixuLGkpe3RoaXMuZ2w7dmFyIG89W107ZnVuY3Rpb24gcyh0LGUscixuKXt2YXIgaT1sW3JdO2l8fChpPWxbcl09e30pO3ZhciBzPWlbZV07c3x8KHM9aVtlXT1mdW5jdGlvbih0LGUpe3RyeXtyZXR1cm4gYSh0LGUpfWNhdGNoKHQpe3JldHVybiBjb25zb2xlLndhcm4oImVycm9yIHZlY3Rvcml6aW5nIHRleHQ6Iix0KSx7Y2VsbHM6W10scG9zaXRpb25zOltdfX19KGUse3RyaWFuZ2xlczohMCxmb250OnIsdGV4dEFsaWduOiJjZW50ZXIiLHRleHRCYXNlbGluZToibWlkZGxlIn0pKTtmb3IodmFyIGM9KG58fDEyKS8xMix1PXMucG9zaXRpb25zLGg9cy5jZWxscyxmPTAscD1oLmxlbmd0aDtmPHA7KytmKWZvcih2YXIgZD1oW2ZdLGc9MjtnPj0wOy0tZyl7dmFyIG09dVtkW2ddXTtvLnB1c2goYyptWzBdLC1jKm1bMV0sdCl9fWZvcih2YXIgYz1bMCwwLDBdLHU9WzAsMCwwXSxoPVswLDAsMF0sZj1bMCwwLDBdLHA9MDtwPDM7KytwKXtoW3BdPW8ubGVuZ3RoLzN8MCxzKC41Kih0WzBdW3BdK3RbMV1bcF0pLGVbcF0sciksZltwXT0oby5sZW5ndGgvM3wwKS1oW3BdLGNbcF09by5sZW5ndGgvM3wwO2Zvcih2YXIgZD0wO2Q8bltwXS5sZW5ndGg7KytkKW5bcF1bZF0udGV4dCYmcyhuW3BdW2RdLngsbltwXVtkXS50ZXh0LG5bcF1bZF0uZm9udHx8aSxuW3BdW2RdLmZvbnRTaXplfHwxMik7dVtwXT0oby5sZW5ndGgvM3wwKS1jW3BdfXRoaXMuYnVmZmVyLnVwZGF0ZShvKSx0aGlzLnRpY2tPZmZzZXQ9Yyx0aGlzLnRpY2tDb3VudD11LHRoaXMubGFiZWxPZmZzZXQ9aCx0aGlzLmxhYmVsQ291bnQ9Zn07dmFyIGY9WzAsMCwwXTt1LmRyYXdUaWNrcz1mdW5jdGlvbih0LGUscixuLGkpe2lmKHRoaXMudGlja0NvdW50W3RdKXt2YXIgYT1mO2FbMF09YVsxXT1hWzJdPTAsYVt0XT0xLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmF4aXM9YSx0aGlzLnNoYWRlci51bmlmb3Jtcy5jb2xvcj1pLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmFuZ2xlPXIsdGhpcy5zaGFkZXIudW5pZm9ybXMuc2NhbGU9ZSx0aGlzLnNoYWRlci51bmlmb3Jtcy5vZmZzZXQ9bix0aGlzLnZhby5kcmF3KHRoaXMuZ2wuVFJJQU5HTEVTLHRoaXMudGlja0NvdW50W3RdLHRoaXMudGlja09mZnNldFt0XSl9fTt2YXIgcD1bMCwwLDBdO3UuZHJhd0xhYmVsPWZ1bmN0aW9uKHQsZSxyLG4saSl7dGhpcy5sYWJlbENvdW50W3RdJiYodGhpcy5zaGFkZXIudW5pZm9ybXMuYXhpcz1wLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmNvbG9yPWksdGhpcy5zaGFkZXIudW5pZm9ybXMuYW5nbGU9cix0aGlzLnNoYWRlci51bmlmb3Jtcy5zY2FsZT1lLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm9mZnNldD1uLHRoaXMudmFvLmRyYXcodGhpcy5nbC5UUklBTkdMRVMsdGhpcy5sYWJlbENvdW50W3RdLHRoaXMubGFiZWxPZmZzZXRbdF0pKX0sdS5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5zaGFkZXIuZGlzcG9zZSgpLHRoaXMudmFvLmRpc3Bvc2UoKSx0aGlzLmJ1ZmZlci5kaXNwb3NlKCl9fSkuY2FsbCh0aGlzLHQoIl9wcm9jZXNzIikpfSx7Ii4vc2hhZGVycyI6MjI2LF9wcm9jZXNzOjQ0OSwiZ2wtYnVmZmVyIjoyMzAsImdsLXZhbyI6MzA4LCJ2ZWN0b3JpemUtdGV4dCI6NTE1fV0sMjI4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt2YXIgcj10KyIiLG49ci5pbmRleE9mKCIuIiksaT0wO24+PTAmJihpPXIubGVuZ3RoLW4tMSk7dmFyIGE9TWF0aC5wb3coMTAsaSksbz1NYXRoLnJvdW5kKHQqZSphKSxzPW8rIiI7aWYocy5pbmRleE9mKCJlIik+PTApcmV0dXJuIHM7dmFyIGw9by9hLGM9byVhO288MD8obD0wfC1NYXRoLmNlaWwobCksYz0wfC1jKToobD0wfE1hdGguZmxvb3IobCksY3w9MCk7dmFyIHU9IiIrbDtpZihvPDAmJih1PSItIit1KSxpKXtmb3IodmFyIGg9IiIrYztoLmxlbmd0aDxpOyloPSIwIitoO3JldHVybiB1KyIuIitofXJldHVybiB1fXIuY3JlYXRlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLGk9MDtpPDM7KytpKXtmb3IodmFyIGE9W10sbz0odFswXVtpXSx0WzFdW2ldLDApO28qZVtpXTw9dFsxXVtpXTsrK28pYS5wdXNoKHt4Om8qZVtpXSx0ZXh0Om4oZVtpXSxvKX0pO2Zvcih2YXIgbz0tMTtvKmVbaV0+PXRbMF1baV07LS1vKWEucHVzaCh7eDpvKmVbaV0sdGV4dDpuKGVbaV0sbyl9KTtyLnB1c2goYSl9cmV0dXJuIHJ9LHIuZXF1YWw9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MDtyPDM7KytyKXtpZih0W3JdLmxlbmd0aCE9PWVbcl0ubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgbj0wO248dFtyXS5sZW5ndGg7KytuKXt2YXIgaT10W3JdW25dLGE9ZVtyXVtuXTtpZihpLnghPT1hLnh8fGkudGV4dCE9PWEudGV4dHx8aS5mb250IT09YS5mb250fHxpLmZvbnRDb2xvciE9PWEuZm9udENvbG9yfHxpLmZvbnRTaXplIT09YS5mb250U2l6ZXx8aS5keCE9PWEuZHh8fGkuZHkhPT1hLmR5KXJldHVybiExfX1yZXR1cm4hMH19LHt9XSwyMjk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGwsaCl7dmFyIGY9ZS5tb2RlbHx8YyxwPWUudmlld3x8Yyx2PWUucHJvamVjdGlvbnx8Yyx5PXQuYm91bmRzLHg9KGg9aHx8YShmLHAsdix5KSkuYXhpcztoLmVkZ2VzO28odSxwLGYpLG8odSx2LHUpO2Zvcih2YXIgYj1nLF89MDtfPDM7KytfKWJbX10ubG89MS8wLGJbX10uaGk9LTEvMCxiW19dLnBpeGVsc1BlckRhdGFVbml0PTEvMDt2YXIgdz1uKHModSx1KSk7cyh1LHUpO2Zvcih2YXIgaz0wO2s8MzsrK2spe3ZhciBNPShrKzEpJTMsQT0oaysyKSUzLFQ9bTt0OmZvcih2YXIgXz0wO188MjsrK18pe3ZhciBTPVtdO2lmKHhba108MCE9ISFfKXtUW2tdPXlbX11ba107Zm9yKHZhciBFPTA7RTwyOysrRSl7VFtNXT15W0VeX11bTV07Zm9yKHZhciBDPTA7QzwyOysrQylUW0FdPXlbQ15FXl9dW0FdLFMucHVzaChULnNsaWNlKCkpfWZvcih2YXIgRT0wO0U8dy5sZW5ndGg7KytFKXtpZigwPT09Uy5sZW5ndGgpY29udGludWUgdDtTPWkucG9zaXRpdmUoUyx3W0VdKX1mb3IodmFyIEU9MDtFPFMubGVuZ3RoOysrRSlmb3IodmFyIEE9U1tFXSxMPWQobSx1LEEscixsKSxDPTA7QzwzOysrQyliW0NdLmxvPU1hdGgubWluKGJbQ10ubG8sQVtDXSksYltDXS5oaT1NYXRoLm1heChiW0NdLmhpLEFbQ10pLEMhPT1rJiYoYltDXS5waXhlbHNQZXJEYXRhVW5pdD1NYXRoLm1pbihiW0NdLnBpeGVsc1BlckRhdGFVbml0LE1hdGguYWJzKExbQ10pKSl9fX1yZXR1cm4gYn07dmFyIG49dCgiZXh0cmFjdC1mcnVzdHVtLXBsYW5lcyIpLGk9dCgic3BsaXQtcG9seWdvbiIpLGE9dCgiLi9saWIvY3ViZS5qcyIpLG89dCgiZ2wtbWF0NC9tdWx0aXBseSIpLHM9dCgiZ2wtbWF0NC90cmFuc3Bvc2UiKSxsPXQoImdsLXZlYzQvdHJhbnNmb3JtTWF0NCIpLGM9bmV3IEZsb2F0MzJBcnJheShbMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV0pLHU9bmV3IEZsb2F0MzJBcnJheSgxNik7ZnVuY3Rpb24gaCh0LGUscil7dGhpcy5sbz10LHRoaXMuaGk9ZSx0aGlzLnBpeGVsc1BlckRhdGFVbml0PXJ9dmFyIGY9WzAsMCwwLDFdLHA9WzAsMCwwLDFdO2Z1bmN0aW9uIGQodCxlLHIsbixpKXtmb3IodmFyIGE9MDthPDM7KythKXtmb3IodmFyIG89ZixzPXAsYz0wO2M8MzsrK2Mpc1tjXT1vW2NdPXJbY107c1szXT1vWzNdPTEsc1thXSs9MSxsKHMscyxlKSxzWzNdPDAmJih0W2FdPTEvMCksb1thXS09MSxsKG8sbyxlKSxvWzNdPDAmJih0W2FdPTEvMCk7dmFyIHU9KG9bMF0vb1szXS1zWzBdL3NbM10pKm4saD0ob1sxXS9vWzNdLXNbMV0vc1szXSkqaTt0W2FdPS4yNSpNYXRoLnNxcnQodSp1K2gqaCl9cmV0dXJuIHR9dmFyIGc9W25ldyBoKDEvMCwtMS8wLDEvMCksbmV3IGgoMS8wLC0xLzAsMS8wKSxuZXcgaCgxLzAsLTEvMCwxLzApXSxtPVswLDAsMF19LHsiLi9saWIvY3ViZS5qcyI6MjI0LCJleHRyYWN0LWZydXN0dW0tcGxhbmVzIjoyMTMsImdsLW1hdDQvbXVsdGlwbHkiOjI1NiwiZ2wtbWF0NC90cmFuc3Bvc2UiOjI2NCwiZ2wtdmVjNC90cmFuc2Zvcm1NYXQ0IjozNjYsInNwbGl0LXBvbHlnb24iOjQ4OH1dLDIzMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJ0eXBlZGFycmF5LXBvb2wiKSxpPXQoIm5kYXJyYXktb3BzIiksYT10KCJuZGFycmF5Iiksbz1bInVpbnQ4IiwidWludDhfY2xhbXBlZCIsInVpbnQxNiIsInVpbnQzMiIsImludDgiLCJpbnQxNiIsImludDMyIiwiZmxvYXQzMiJdO2Z1bmN0aW9uIHModCxlLHIsbixpKXt0aGlzLmdsPXQsdGhpcy50eXBlPWUsdGhpcy5oYW5kbGU9cix0aGlzLmxlbmd0aD1uLHRoaXMudXNhZ2U9aX12YXIgbD1zLnByb3RvdHlwZTtmdW5jdGlvbiBjKHQsZSxyLG4saSxhKXt2YXIgbz1pLmxlbmd0aCppLkJZVEVTX1BFUl9FTEVNRU5UO2lmKGE8MClyZXR1cm4gdC5idWZmZXJEYXRhKGUsaSxuKSxvO2lmKG8rYT5yKXRocm93IG5ldyBFcnJvcigiZ2wtYnVmZmVyOiBJZiByZXNpemluZyBidWZmZXIsIG11c3Qgbm90IHNwZWNpZnkgb2Zmc2V0Iik7cmV0dXJuIHQuYnVmZmVyU3ViRGF0YShlLGEsaSkscn1mdW5jdGlvbiB1KHQsZSl7Zm9yKHZhciByPW4ubWFsbG9jKHQubGVuZ3RoLGUpLGk9dC5sZW5ndGgsYT0wO2E8aTsrK2EpclthXT10W2FdO3JldHVybiByfWwuYmluZD1mdW5jdGlvbigpe3RoaXMuZ2wuYmluZEJ1ZmZlcih0aGlzLnR5cGUsdGhpcy5oYW5kbGUpfSxsLnVuYmluZD1mdW5jdGlvbigpe3RoaXMuZ2wuYmluZEJ1ZmZlcih0aGlzLnR5cGUsbnVsbCl9LGwuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuZ2wuZGVsZXRlQnVmZmVyKHRoaXMuaGFuZGxlKX0sbC51cGRhdGU9ZnVuY3Rpb24odCxlKXtpZigibnVtYmVyIiE9dHlwZW9mIGUmJihlPS0xKSx0aGlzLmJpbmQoKSwib2JqZWN0Ij09dHlwZW9mIHQmJiJ1bmRlZmluZWQiIT10eXBlb2YgdC5zaGFwZSl7dmFyIHI9dC5kdHlwZTtpZihvLmluZGV4T2Yocik8MCYmKHI9ImZsb2F0MzIiKSx0aGlzLnR5cGU9PT10aGlzLmdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSKXI9Z2wuZ2V0RXh0ZW5zaW9uKCJPRVNfZWxlbWVudF9pbmRleF91aW50IikmJiJ1aW50MTYiIT09cj8idWludDMyIjoidWludDE2IjtpZihyPT09dC5kdHlwZSYmZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MSxuPWUubGVuZ3RoLTE7bj49MDstLW4pe2lmKGVbbl0hPT1yKXJldHVybiExO3IqPXRbbl19cmV0dXJuITB9KHQuc2hhcGUsdC5zdHJpZGUpKTA9PT10Lm9mZnNldCYmdC5kYXRhLmxlbmd0aD09PXQuc2hhcGVbMF0/dGhpcy5sZW5ndGg9Yyh0aGlzLmdsLHRoaXMudHlwZSx0aGlzLmxlbmd0aCx0aGlzLnVzYWdlLHQuZGF0YSxlKTp0aGlzLmxlbmd0aD1jKHRoaXMuZ2wsdGhpcy50eXBlLHRoaXMubGVuZ3RoLHRoaXMudXNhZ2UsdC5kYXRhLnN1YmFycmF5KHQub2Zmc2V0LHQuc2hhcGVbMF0pLGUpO2Vsc2V7dmFyIHM9bi5tYWxsb2ModC5zaXplLHIpLGw9YShzLHQuc2hhcGUpO2kuYXNzaWduKGwsdCksdGhpcy5sZW5ndGg9Yyh0aGlzLmdsLHRoaXMudHlwZSx0aGlzLmxlbmd0aCx0aGlzLnVzYWdlLGU8MD9zOnMuc3ViYXJyYXkoMCx0LnNpemUpLGUpLG4uZnJlZShzKX19ZWxzZSBpZihBcnJheS5pc0FycmF5KHQpKXt2YXIgaDtoPXRoaXMudHlwZT09PXRoaXMuZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVI/dSh0LCJ1aW50MTYiKTp1KHQsImZsb2F0MzIiKSx0aGlzLmxlbmd0aD1jKHRoaXMuZ2wsdGhpcy50eXBlLHRoaXMubGVuZ3RoLHRoaXMudXNhZ2UsZTwwP2g6aC5zdWJhcnJheSgwLHQubGVuZ3RoKSxlKSxuLmZyZWUoaCl9ZWxzZSBpZigib2JqZWN0Ij09dHlwZW9mIHQmJiJudW1iZXIiPT10eXBlb2YgdC5sZW5ndGgpdGhpcy5sZW5ndGg9Yyh0aGlzLmdsLHRoaXMudHlwZSx0aGlzLmxlbmd0aCx0aGlzLnVzYWdlLHQsZSk7ZWxzZXtpZigibnVtYmVyIiE9dHlwZW9mIHQmJnZvaWQgMCE9PXQpdGhyb3cgbmV3IEVycm9yKCJnbC1idWZmZXI6IEludmFsaWQgZGF0YSB0eXBlIik7aWYoZT49MCl0aHJvdyBuZXcgRXJyb3IoImdsLWJ1ZmZlcjogQ2Fubm90IHNwZWNpZnkgb2Zmc2V0IHdoZW4gcmVzaXppbmcgYnVmZmVyIik7KHR8PTApPD0wJiYodD0xKSx0aGlzLmdsLmJ1ZmZlckRhdGEodGhpcy50eXBlLDB8dCx0aGlzLnVzYWdlKSx0aGlzLmxlbmd0aD10fX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKHI9cnx8dC5BUlJBWV9CVUZGRVIsbj1ufHx0LkRZTkFNSUNfRFJBVyxyIT09dC5BUlJBWV9CVUZGRVImJnIhPT10LkVMRU1FTlRfQVJSQVlfQlVGRkVSKXRocm93IG5ldyBFcnJvcigiZ2wtYnVmZmVyOiBJbnZhbGlkIHR5cGUgZm9yIHdlYmdsIGJ1ZmZlciwgbXVzdCBiZSBlaXRoZXIgZ2wuQVJSQVlfQlVGRkVSIG9yIGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSIik7aWYobiE9PXQuRFlOQU1JQ19EUkFXJiZuIT09dC5TVEFUSUNfRFJBVyYmbiE9PXQuU1RSRUFNX0RSQVcpdGhyb3cgbmV3IEVycm9yKCJnbC1idWZmZXI6IEludmFsaWQgdXNhZ2UgZm9yIGJ1ZmZlciwgbXVzdCBiZSBlaXRoZXIgZ2wuRFlOQU1JQ19EUkFXLCBnbC5TVEFUSUNfRFJBVyBvciBnbC5TVFJFQU1fRFJBVyIpO3ZhciBpPXQuY3JlYXRlQnVmZmVyKCksYT1uZXcgcyh0LHIsaSwwLG4pO3JldHVybiBhLnVwZGF0ZShlKSxhfX0se25kYXJyYXk6NDE3LCJuZGFycmF5LW9wcyI6NDExLCJ0eXBlZGFycmF5LXBvb2wiOjUwN31dLDIzMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJnbC12ZWMzIiksaT0odCgiZ2wtdmVjNCIpLGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspaWYodFtyXT49ZSlyZXR1cm4gci0xO3JldHVybiByfSksYT1uLmNyZWF0ZSgpLG89bi5jcmVhdGUoKSxzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdDxlP2U6dD5yP3I6dH0sbD1mdW5jdGlvbih0LGUscixsKXt2YXIgYz10WzBdLHU9dFsxXSxoPXRbMl0sZj1yWzBdLmxlbmd0aCxwPXJbMV0ubGVuZ3RoLGQ9clsyXS5sZW5ndGgsZz1pKHJbMF0sYyksbT1pKHJbMV0sdSksdj1pKHJbMl0saCkseT1nKzEseD1tKzEsYj12KzE7aWYobCYmKGc9cyhnLDAsZi0xKSx5PXMoeSwwLGYtMSksbT1zKG0sMCxwLTEpLHg9cyh4LDAscC0xKSx2PXModiwwLGQtMSksYj1zKGIsMCxkLTEpKSxnPDB8fG08MHx8djwwfHx5Pj1mfHx4Pj1wfHxiPj1kKXJldHVybiBuLmNyZWF0ZSgpO3ZhciBfPShjLXJbMF1bZ10pLyhyWzBdW3ldLXJbMF1bZ10pLHc9KHUtclsxXVttXSkvKHJbMV1beF0tclsxXVttXSksaz0oaC1yWzJdW3ZdKS8oclsyXVtiXS1yWzJdW3ZdKTsoXzwwfHxfPjF8fGlzTmFOKF8pKSYmKF89MCksKHc8MHx8dz4xfHxpc05hTih3KSkmJih3PTApLChrPDB8fGs+MXx8aXNOYU4oaykpJiYoaz0wKTt2YXIgTT12KmYqcCxBPWIqZipwLFQ9bSpmLFM9eCpmLEU9ZyxDPXksTD1lW1QrTStFXSx6PWVbVCtNK0NdLFA9ZVtTK00rRV0sST1lW1MrTStDXSxPPWVbVCtBK0VdLEQ9ZVtUK0ErQ10sUj1lW1MrQStFXSxCPWVbUytBK0NdLEY9bi5jcmVhdGUoKTtyZXR1cm4gbi5sZXJwKEYsTCx6LF8pLG4ubGVycChhLFAsSSxfKSxuLmxlcnAoRixGLGEsdyksbi5sZXJwKGEsTyxELF8pLG4ubGVycChvLFIsQixfKSxuLmxlcnAoYSxhLG8sdyksbi5sZXJwKEYsRixhLGspLEZ9O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByO3I9dC5wb3NpdGlvbnM/dC5wb3NpdGlvbnM6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRbMF0scj10WzFdLG49dFsyXSxpPVtdLGE9MDthPG4ubGVuZ3RoO2ErKylmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKylmb3IodmFyIHM9MDtzPGUubGVuZ3RoO3MrKylpLnB1c2goW25bYV0scltvXSxlW3NdXSk7cmV0dXJuIGl9KHQubWVzaGdyaWQpO3ZhciBpPXQubWVzaGdyaWQsYT10LnZlY3RvcnMsbz17cG9zaXRpb25zOltdLHZlcnRleEludGVuc2l0eTpbXSx2ZXJ0ZXhJbnRlbnNpdHlCb3VuZHM6dC52ZXJ0ZXhJbnRlbnNpdHlCb3VuZHMsdmVydGV4Tm9ybWFsczpbXSx2ZWN0b3JzOltdLGNlbGxzOltdLGNvbmVPZmZzZXQ6dC5jb25lT2Zmc2V0LGNvbG9ybWFwOnQuY29sb3JtYXB9O2lmKDA9PT10LnBvc2l0aW9ucy5sZW5ndGgpcmV0dXJuIGUmJihlWzBdPVswLDAsMF0sZVsxXT1bMCwwLDBdKSxvO2Zvcih2YXIgcz0wLGM9MS8wLHU9LTEvMCxoPTEvMCxmPS0xLzAscD0xLzAsZD0tMS8wLGc9bnVsbCxtPW51bGwsdj1bXSx5PTEvMCx4PTA7eDxyLmxlbmd0aDt4Kyspe3ZhciBiLF89clt4XTtjPU1hdGgubWluKF9bMF0sYyksdT1NYXRoLm1heChfWzBdLHUpLGg9TWF0aC5taW4oX1sxXSxoKSxmPU1hdGgubWF4KF9bMV0sZikscD1NYXRoLm1pbihfWzJdLHApLGQ9TWF0aC5tYXgoX1syXSxkKSxiPWk/bChfLGEsaSwhMCk6YVt4XSxuLmxlbmd0aChiKT5zJiYocz1uLmxlbmd0aChiKSkseCYmKHk9TWF0aC5taW4oeSwyKm4uZGlzdGFuY2UoZyxfKS8obi5sZW5ndGgobSkrbi5sZW5ndGgoYikpKSksZz1fLG09Yix2LnB1c2goYil9dmFyIHc9W2MsaCxwXSxrPVt1LGYsZF07ZSYmKGVbMF09dyxlWzFdPWspLDA9PT1zJiYocz0xKTt2YXIgTT0xL3M7aXNGaW5pdGUoeSkmJiFpc05hTih5KXx8KHk9MSksby52ZWN0b3JTY2FsZT15O3ZhciBBPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT1uLmNyZWF0ZSgpO3JldHVybiB2b2lkIDAhPT10JiZuLnNldChpLHQsZSxyKSxpfSgwLDEsMCksVD10LmNvbmVTaXplfHwuNTt0LmFic29sdXRlQ29uZVNpemUmJihUPXQuYWJzb2x1dGVDb25lU2l6ZSpNKSxvLmNvbmVTY2FsZT1UO3g9MDtmb3IodmFyIFM9MDt4PHIubGVuZ3RoO3grKylmb3IodmFyIEU9KF89clt4XSlbMF0sQz1fWzFdLEw9X1syXSx6PXZbeF0sUD1uLmxlbmd0aCh6KSpNLEk9MDtJPDg7SSsrKXtvLnBvc2l0aW9ucy5wdXNoKFtFLEMsTCxTKytdKSxvLnBvc2l0aW9ucy5wdXNoKFtFLEMsTCxTKytdKSxvLnBvc2l0aW9ucy5wdXNoKFtFLEMsTCxTKytdKSxvLnBvc2l0aW9ucy5wdXNoKFtFLEMsTCxTKytdKSxvLnBvc2l0aW9ucy5wdXNoKFtFLEMsTCxTKytdKSxvLnBvc2l0aW9ucy5wdXNoKFtFLEMsTCxTKytdKSxvLnZlY3RvcnMucHVzaCh6KSxvLnZlY3RvcnMucHVzaCh6KSxvLnZlY3RvcnMucHVzaCh6KSxvLnZlY3RvcnMucHVzaCh6KSxvLnZlY3RvcnMucHVzaCh6KSxvLnZlY3RvcnMucHVzaCh6KSxvLnZlcnRleEludGVuc2l0eS5wdXNoKFAsUCxQKSxvLnZlcnRleEludGVuc2l0eS5wdXNoKFAsUCxQKSxvLnZlcnRleE5vcm1hbHMucHVzaChBLEEsQSksby52ZXJ0ZXhOb3JtYWxzLnB1c2goQSxBLEEpO3ZhciBPPW8ucG9zaXRpb25zLmxlbmd0aDtvLmNlbGxzLnB1c2goW08tNixPLTUsTy00XSxbTy0zLE8tMixPLTFdKX1yZXR1cm4gb30sZS5leHBvcnRzLmNyZWF0ZUNvbmVNZXNoPXQoIi4vbGliL2NvbmVtZXNoIil9LHsiLi9saWIvY29uZW1lc2giOjIzMywiZ2wtdmVjMyI6MzIwLCJnbC12ZWM0IjozNTB9XSwyMzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiYmFyeWNlbnRyaWMiKSxpPXQoInBvbHl0b3BlLWNsb3Nlc3QtcG9pbnQvbGliL2Nsb3Nlc3RfcG9pbnRfMmQuanMiKTtmdW5jdGlvbiBhKHQsZSl7Zm9yKHZhciByPVswLDAsMCwwXSxuPTA7bjw0Oysrbilmb3IodmFyIGk9MDtpPDQ7KytpKXJbaV0rPXRbNCpuK2ldKmVbbl07cmV0dXJuIHJ9ZnVuY3Rpb24gbyh0LGUscixuLGkpe2Zvcih2YXIgbz1hKG4sYShyLGEoZSxbdFswXSx0WzFdLHRbMl0sMV0pKSkscz0wO3M8MzsrK3Mpb1tzXS89b1szXTtyZXR1cm5bLjUqaVswXSooMStvWzBdKSwuNSppWzFdKigxLW9bMV0pXX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSxzLGwpe2lmKDE9PT10Lmxlbmd0aClyZXR1cm5bMCx0WzBdLnNsaWNlKCldO2Zvcih2YXIgYz1uZXcgQXJyYXkodC5sZW5ndGgpLHU9MDt1PHQubGVuZ3RoOysrdSljW3VdPW8odFt1XSxyLGEscyxsKTtmb3IodmFyIGg9MCxmPTEvMCx1PTA7dTxjLmxlbmd0aDsrK3Upe2Zvcih2YXIgcD0wLGQ9MDtkPDI7KytkKXArPU1hdGgucG93KGNbdV1bZF0tZVtkXSwyKTtwPGYmJihmPXAsaD11KX1mb3IodmFyIGc9ZnVuY3Rpb24odCxlKXtpZigyPT09dC5sZW5ndGgpe2Zvcih2YXIgcj0wLGE9MCxvPTA7bzwyOysrbylyKz1NYXRoLnBvdyhlW29dLXRbMF1bb10sMiksYSs9TWF0aC5wb3coZVtvXS10WzFdW29dLDIpO3JldHVybiByPU1hdGguc3FydChyKSxhPU1hdGguc3FydChhKSxyK2E8MWUtNj9bMSwwXTpbYS8ocithKSxyLyhhK3IpXX1pZigzPT09dC5sZW5ndGgpe3ZhciBzPVswLDBdO3JldHVybiBpKHRbMF0sdFsxXSx0WzJdLGUscyksbih0LHMpfXJldHVybltdfShjLGUpLG09MCx1PTA7dTwzOysrdSl7aWYoZ1t1XTwtLjAwMXx8Z1t1XT4xLjAwMDEpcmV0dXJuIG51bGw7bSs9Z1t1XX1pZihNYXRoLmFicyhtLTEpPi4wMDEpcmV0dXJuIG51bGw7cmV0dXJuW2gsZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9WzAsMCwwXSxuPTA7bjx0Lmxlbmd0aDsrK24pZm9yKHZhciBpPXRbbl0sYT1lW25dLG89MDtvPDM7KytvKXJbb10rPWEqaVtvXTtyZXR1cm4gcn0odCxnKSxnXX19LHtiYXJ5Y2VudHJpYzo2MSwicG9seXRvcGUtY2xvc2VzdC1wb2ludC9saWIvY2xvc2VzdF9wb2ludF8yZC5qcyI6NDQ4fV0sMjMzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImdsLXNoYWRlciIpLGk9dCgiZ2wtYnVmZmVyIiksYT10KCJnbC12YW8iKSxvPXQoImdsLXRleHR1cmUyZCIpLHM9dCgibm9ybWFscyIpLGw9dCgiZ2wtbWF0NC9tdWx0aXBseSIpLGM9dCgiZ2wtbWF0NC9pbnZlcnQiKSx1PXQoIm5kYXJyYXkiKSxoPXQoImNvbG9ybWFwIiksZj10KCJzaW1wbGljaWFsLWNvbXBsZXgtY29udG91ciIpLHA9dCgidHlwZWRhcnJheS1wb29sIiksZD10KCIuL3NoYWRlcnMiKSxnPSh0KCIuL2Nsb3Nlc3QtcG9pbnQiKSxkLm1lc2hTaGFkZXIpLG09ZC5waWNrU2hhZGVyLHY9WzEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDFdO2Z1bmN0aW9uIHkodCxlLHIsbixpLGEsbyxzLGwsYyx1LGgsZixwLGQsZyxtLHkseCxiLF8sdyxrLE0sQSxULFMsRSl7dGhpcy5nbD10LHRoaXMuY2VsbHM9W10sdGhpcy5wb3NpdGlvbnM9W10sdGhpcy5pbnRlbnNpdHk9W10sdGhpcy50ZXh0dXJlPWUsdGhpcy5kaXJ0eT0hMCx0aGlzLnRyaVNoYWRlcj1yLHRoaXMubGluZVNoYWRlcj1uLHRoaXMucG9pbnRTaGFkZXI9aSx0aGlzLnBpY2tTaGFkZXI9YSx0aGlzLnBvaW50UGlja1NoYWRlcj1vLHRoaXMuY29udG91clNoYWRlcj1zLHRoaXMudHJpYW5nbGVQb3NpdGlvbnM9bCx0aGlzLnRyaWFuZ2xlVmVjdG9ycz1jLHRoaXMudHJpYW5nbGVDb2xvcnM9aCx0aGlzLnRyaWFuZ2xlTm9ybWFscz1wLHRoaXMudHJpYW5nbGVVVnM9Zix0aGlzLnRyaWFuZ2xlSWRzPXUsdGhpcy50cmlhbmdsZVZBTz1kLHRoaXMudHJpYW5nbGVDb3VudD0wLHRoaXMubGluZVdpZHRoPTEsdGhpcy5lZGdlUG9zaXRpb25zPWcsdGhpcy5lZGdlQ29sb3JzPXksdGhpcy5lZGdlVVZzPXgsdGhpcy5lZGdlSWRzPW0sdGhpcy5lZGdlVkFPPWIsdGhpcy5lZGdlQ291bnQ9MCx0aGlzLnBvaW50UG9zaXRpb25zPV8sdGhpcy5wb2ludENvbG9ycz1rLHRoaXMucG9pbnRVVnM9TSx0aGlzLnBvaW50U2l6ZXM9QSx0aGlzLnBvaW50SWRzPXcsdGhpcy5wb2ludFZBTz1ULHRoaXMucG9pbnRDb3VudD0wLHRoaXMuY29udG91ckxpbmVXaWR0aD0xLHRoaXMuY29udG91clBvc2l0aW9ucz1TLHRoaXMuY29udG91clZBTz1FLHRoaXMuY29udG91ckNvdW50PTAsdGhpcy5jb250b3VyQ29sb3I9WzAsMCwwXSx0aGlzLmNvbnRvdXJFbmFibGU9ITAsdGhpcy5waWNrSWQ9MSx0aGlzLmJvdW5kcz1bWzEvMCwxLzAsMS8wXSxbLTEvMCwtMS8wLC0xLzBdXSx0aGlzLmNsaXBCb3VuZHM9W1stMS8wLC0xLzAsLTEvMF0sWzEvMCwxLzAsMS8wXV0sdGhpcy5saWdodFBvc2l0aW9uPVsxZTUsMWU1LDBdLHRoaXMuYW1iaWVudExpZ2h0PS44LHRoaXMuZGlmZnVzZUxpZ2h0PS44LHRoaXMuc3BlY3VsYXJMaWdodD0yLHRoaXMucm91Z2huZXNzPS41LHRoaXMuZnJlc25lbD0xLjUsdGhpcy5vcGFjaXR5PTEsdGhpcy5jb25lU2NhbGU9Mix0aGlzLnZlY3RvclNjYWxlPTEsdGhpcy5jb25lT2Zmc2V0PS4yNSx0aGlzLl9tb2RlbD12LHRoaXMuX3ZpZXc9dix0aGlzLl9wcm9qZWN0aW9uPXYsdGhpcy5fcmVzb2x1dGlvbj1bMSwxXX12YXIgeD15LnByb3RvdHlwZTtmdW5jdGlvbiBiKHQpe3ZhciBlPW4odCxtLnZlcnRleCxtLmZyYWdtZW50LG51bGwsbS5hdHRyaWJ1dGVzKTtyZXR1cm4gZS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmxvY2F0aW9uPTAsZS5hdHRyaWJ1dGVzLmlkLmxvY2F0aW9uPTEsZS5hdHRyaWJ1dGVzLnZlY3Rvci5sb2NhdGlvbj01LGV9eC5pc09wYXF1ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9wYWNpdHk+PTF9LHguaXNUcmFuc3BhcmVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9wYWNpdHk8MX0seC5waWNrU2xvdHM9MSx4LnNldFBpY2tCYXNlPWZ1bmN0aW9uKHQpe3RoaXMucGlja0lkPXR9LHguaGlnaGxpZ2h0PWZ1bmN0aW9uKHQpe2lmKHQmJnRoaXMuY29udG91ckVuYWJsZSl7Zm9yKHZhciBlPWYodGhpcy5jZWxscyx0aGlzLmludGVuc2l0eSx0LmludGVuc2l0eSkscj1lLmNlbGxzLG49ZS52ZXJ0ZXhJZHMsaT1lLnZlcnRleFdlaWdodHMsYT1yLmxlbmd0aCxvPXAubWFsbG9jRmxvYXQzMig2KmEpLHM9MCxsPTA7bDxhOysrbClmb3IodmFyIGM9cltsXSx1PTA7dTwyOysrdSl7dmFyIGg9Y1swXTsyPT09Yy5sZW5ndGgmJihoPWNbdV0pO2Zvcih2YXIgZD1uW2hdWzBdLGc9bltoXVsxXSxtPWlbaF0sdj0xLW0seT10aGlzLnBvc2l0aW9uc1tkXSx4PXRoaXMucG9zaXRpb25zW2ddLGI9MDtiPDM7KytiKW9bcysrXT1tKnlbYl0rdip4W2JdfXRoaXMuY29udG91ckNvdW50PXMvM3wwLHRoaXMuY29udG91clBvc2l0aW9ucy51cGRhdGUoby5zdWJhcnJheSgwLHMpKSxwLmZyZWUobyl9ZWxzZSB0aGlzLmNvbnRvdXJDb3VudD0wfSx4LnVwZGF0ZT1mdW5jdGlvbih0KXt0PXR8fHt9O3ZhciBlPXRoaXMuZ2w7dGhpcy5kaXJ0eT0hMCwiY29udG91ckVuYWJsZSJpbiB0JiYodGhpcy5jb250b3VyRW5hYmxlPXQuY29udG91ckVuYWJsZSksImNvbnRvdXJDb2xvciJpbiB0JiYodGhpcy5jb250b3VyQ29sb3I9dC5jb250b3VyQ29sb3IpLCJsaW5lV2lkdGgiaW4gdCYmKHRoaXMubGluZVdpZHRoPXQubGluZVdpZHRoKSwibGlnaHRQb3NpdGlvbiJpbiB0JiYodGhpcy5saWdodFBvc2l0aW9uPXQubGlnaHRQb3NpdGlvbiksIm9wYWNpdHkiaW4gdCYmKHRoaXMub3BhY2l0eT10Lm9wYWNpdHkpLCJhbWJpZW50ImluIHQmJih0aGlzLmFtYmllbnRMaWdodD10LmFtYmllbnQpLCJkaWZmdXNlImluIHQmJih0aGlzLmRpZmZ1c2VMaWdodD10LmRpZmZ1c2UpLCJzcGVjdWxhciJpbiB0JiYodGhpcy5zcGVjdWxhckxpZ2h0PXQuc3BlY3VsYXIpLCJyb3VnaG5lc3MiaW4gdCYmKHRoaXMucm91Z2huZXNzPXQucm91Z2huZXNzKSwiZnJlc25lbCJpbiB0JiYodGhpcy5mcmVzbmVsPXQuZnJlc25lbCksdm9pZCAwIT09dC52ZWN0b3JTY2FsZSYmKHRoaXMudmVjdG9yU2NhbGU9dC52ZWN0b3JTY2FsZSksdm9pZCAwIT09dC5jb25lU2NhbGUmJih0aGlzLmNvbmVTY2FsZT10LmNvbmVTY2FsZSksdm9pZCAwIT09dC5jb25lT2Zmc2V0JiYodGhpcy5jb25lT2Zmc2V0PXQuY29uZU9mZnNldCksdC50ZXh0dXJlPyh0aGlzLnRleHR1cmUuZGlzcG9zZSgpLHRoaXMudGV4dHVyZT1vKGUsdC50ZXh0dXJlKSk6dC5jb2xvcm1hcCYmKHRoaXMudGV4dHVyZS5zaGFwZT1bMjU2LDI1Nl0sdGhpcy50ZXh0dXJlLm1pbkZpbHRlcj1lLkxJTkVBUl9NSVBNQVBfTElORUFSLHRoaXMudGV4dHVyZS5tYWdGaWx0ZXI9ZS5MSU5FQVIsdGhpcy50ZXh0dXJlLnNldFBpeGVscyhmdW5jdGlvbih0KXtmb3IodmFyIGU9aCh7Y29sb3JtYXA6dCxuc2hhZGVzOjI1Nixmb3JtYXQ6InJnYmEifSkscj1uZXcgVWludDhBcnJheSgxMDI0KSxuPTA7bjwyNTY7KytuKXtmb3IodmFyIGk9ZVtuXSxhPTA7YTwzOysrYSlyWzQqbithXT1pW2FdO3JbNCpuKzNdPTI1NSppWzNdfXJldHVybiB1KHIsWzI1NiwyNTYsNF0sWzQsMCwxXSl9KHQuY29sb3JtYXApKSx0aGlzLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXAoKSk7dmFyIHI9dC5jZWxscyxuPXQucG9zaXRpb25zLGk9dC52ZWN0b3JzO2lmKG4mJnImJmkpe3ZhciBhPVtdLGw9W10sYz1bXSxmPVtdLHA9W10sZD1bXSxnPVtdLG09W10sdj1bXSx5PVtdLHg9W10sYj1bXSxfPVtdLHc9W10saz1bXTt0aGlzLmNlbGxzPXIsdGhpcy5wb3NpdGlvbnM9bjt2YXIgTT10LnZlcnRleE5vcm1hbHMsQT10LmNlbGxOb3JtYWxzLFQ9dm9pZCAwPT09dC52ZXJ0ZXhOb3JtYWxzRXBzaWxvbj8xZS02OnQudmVydGV4Tm9ybWFsc0Vwc2lsb24sUz12b2lkIDA9PT10LmZhY2VOb3JtYWxzRXBzaWxvbj8xZS02OnQuZmFjZU5vcm1hbHNFcHNpbG9uO3QudXNlRmFjZXROb3JtYWxzJiYhQSYmKEE9cy5mYWNlTm9ybWFscyhyLG4sUykpLEF8fE18fChNPXMudmVydGV4Tm9ybWFscyhyLG4sVCkpO3ZhciBFPXQudmVydGV4Q29sb3JzLEM9dC5jZWxsQ29sb3JzLEw9dC5tZXNoQ29sb3J8fFsxLDEsMSwxXSx6PXQudmVydGV4VVZzLFA9dC52ZXJ0ZXhJbnRlbnNpdHksST10LmNlbGxVVnMsTz10LmNlbGxJbnRlbnNpdHksRD0xLzAsUj0tMS8wO2lmKCF6JiYhSSlpZihQKWlmKHQudmVydGV4SW50ZW5zaXR5Qm91bmRzKUQ9K3QudmVydGV4SW50ZW5zaXR5Qm91bmRzWzBdLFI9K3QudmVydGV4SW50ZW5zaXR5Qm91bmRzWzFdO2Vsc2UgZm9yKHZhciBCPTA7QjxQLmxlbmd0aDsrK0Ipe3ZhciBGPVBbQl07RD1NYXRoLm1pbihELEYpLFI9TWF0aC5tYXgoUixGKX1lbHNlIGlmKE8pZm9yKEI9MDtCPE8ubGVuZ3RoOysrQil7Rj1PW0JdO0Q9TWF0aC5taW4oRCxGKSxSPU1hdGgubWF4KFIsRil9ZWxzZSBmb3IoQj0wO0I8bi5sZW5ndGg7KytCKXtGPW5bQl1bMl07RD1NYXRoLm1pbihELEYpLFI9TWF0aC5tYXgoUixGKX10aGlzLmludGVuc2l0eT1QfHwoTz9mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPW5ldyBBcnJheShlKSxpPTA7aTxlOysraSluW2ldPTA7dmFyIGE9dC5sZW5ndGg7Zm9yKGk9MDtpPGE7KytpKWZvcih2YXIgbz10W2ldLHM9MDtzPG8ubGVuZ3RoOysrcyluW29bc11dPXJbaV07cmV0dXJuIG59KHIsbi5sZW5ndGgsTyk6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQubGVuZ3RoLHI9bmV3IEFycmF5KGUpLG49MDtuPGU7KytuKXJbbl09dFtuXVsyXTtyZXR1cm4gcn0obikpO3ZhciBOPXQucG9pbnRTaXplcyxqPXQucG9pbnRTaXplfHwxO3RoaXMuYm91bmRzPVtbMS8wLDEvMCwxLzBdLFstMS8wLC0xLzAsLTEvMF1dO2ZvcihCPTA7QjxuLmxlbmd0aDsrK0IpZm9yKHZhciBWPW5bQl0sVT0wO1U8MzsrK1UpIWlzTmFOKFZbVV0pJiZpc0Zpbml0ZShWW1VdKSYmKHRoaXMuYm91bmRzWzBdW1VdPU1hdGgubWluKHRoaXMuYm91bmRzWzBdW1VdLFZbVV0pLHRoaXMuYm91bmRzWzFdW1VdPU1hdGgubWF4KHRoaXMuYm91bmRzWzFdW1VdLFZbVV0pKTt2YXIgcT0wLEg9MCxHPTA7dDpmb3IoQj0wO0I8ci5sZW5ndGg7KytCKXt2YXIgVz1yW0JdO3N3aXRjaChXLmxlbmd0aCl7Y2FzZSAxOmZvcihWPW5bWD1XWzBdXSxVPTA7VTwzOysrVSlpZihpc05hTihWW1VdKXx8IWlzRmluaXRlKFZbVV0pKWNvbnRpbnVlIHQ7eC5wdXNoKFZbMF0sVlsxXSxWWzJdLFZbM10pLDM9PT0oWj1FP0VbWF06Qz9DW0JdOkwpLmxlbmd0aD9iLnB1c2goWlswXSxaWzFdLFpbMl0sMSk6Yi5wdXNoKFpbMF0sWlsxXSxaWzJdLFpbM10pLCQ9ej96W1hdOlA/WyhQW1hdLUQpLyhSLUQpLDBdOkk/SVtCXTpPP1soT1tCXS1EKS8oUi1EKSwwXTpbKFZbMl0tRCkvKFItRCksMF0sXy5wdXNoKCRbMF0sJFsxXSksTj93LnB1c2goTltYXSk6dy5wdXNoKGopLGsucHVzaChCKSxHKz0xO2JyZWFrO2Nhc2UgMjpmb3IoVT0wO1U8MjsrK1Upe1Y9bltYPVdbVV1dO2Zvcih2YXIgWT0wO1k8MzsrK1kpaWYoaXNOYU4oVltZXSl8fCFpc0Zpbml0ZShWW1ldKSljb250aW51ZSB0fWZvcihVPTA7VTwyOysrVSl7Vj1uW1g9V1tVXV07Zy5wdXNoKFZbMF0sVlsxXSxWWzJdKSwzPT09KFo9RT9FW1hdOkM/Q1tCXTpMKS5sZW5ndGg/bS5wdXNoKFpbMF0sWlsxXSxaWzJdLDEpOm0ucHVzaChaWzBdLFpbMV0sWlsyXSxaWzNdKSwkPXo/eltYXTpQP1soUFtYXS1EKS8oUi1EKSwwXTpJP0lbQl06Tz9bKE9bQl0tRCkvKFItRCksMF06WyhWWzJdLUQpLyhSLUQpLDBdLHYucHVzaCgkWzBdLCRbMV0pLHkucHVzaChCKX1IKz0xO2JyZWFrO2Nhc2UgMzpmb3IoVT0wO1U8MzsrK1UpZm9yKFY9bltYPVdbVV1dLFk9MDtZPDM7KytZKWlmKGlzTmFOKFZbWV0pfHwhaXNGaW5pdGUoVltZXSkpY29udGludWUgdDtmb3IoVT0wO1U8MzsrK1Upe3ZhciBYO1Y9bltYPVdbVV1dO2EucHVzaChWWzBdLFZbMV0sVlsyXSxWWzNdKTt2YXIgWiwkLEosSz1pW1hdO2wucHVzaChLWzBdLEtbMV0sS1syXSksMz09PShaPUU/RVtYXTpDP0NbQl06TCkubGVuZ3RoP2MucHVzaChaWzBdLFpbMV0sWlsyXSwxKTpjLnB1c2goWlswXSxaWzFdLFpbMl0sWlszXSksJD16P3pbWF06UD9bKFBbWF0tRCkvKFItRCksMF06ST9JW0JdOk8/WyhPW0JdLUQpLyhSLUQpLDBdOlsoVlsyXS1EKS8oUi1EKSwwXSxwLnB1c2goJFswXSwkWzFdKSxKPU0/TVtYXTpBW0JdLGYucHVzaChKWzBdLEpbMV0sSlsyXSksZC5wdXNoKEIpfXErPTF9fXRoaXMucG9pbnRDb3VudD1HLHRoaXMuZWRnZUNvdW50PUgsdGhpcy50cmlhbmdsZUNvdW50PXEsdGhpcy5wb2ludFBvc2l0aW9ucy51cGRhdGUoeCksdGhpcy5wb2ludENvbG9ycy51cGRhdGUoYiksdGhpcy5wb2ludFVWcy51cGRhdGUoXyksdGhpcy5wb2ludFNpemVzLnVwZGF0ZSh3KSx0aGlzLnBvaW50SWRzLnVwZGF0ZShuZXcgVWludDMyQXJyYXkoaykpLHRoaXMuZWRnZVBvc2l0aW9ucy51cGRhdGUoZyksdGhpcy5lZGdlQ29sb3JzLnVwZGF0ZShtKSx0aGlzLmVkZ2VVVnMudXBkYXRlKHYpLHRoaXMuZWRnZUlkcy51cGRhdGUobmV3IFVpbnQzMkFycmF5KHkpKSx0aGlzLnRyaWFuZ2xlUG9zaXRpb25zLnVwZGF0ZShhKSx0aGlzLnRyaWFuZ2xlVmVjdG9ycy51cGRhdGUobCksdGhpcy50cmlhbmdsZUNvbG9ycy51cGRhdGUoYyksdGhpcy50cmlhbmdsZVVWcy51cGRhdGUocCksdGhpcy50cmlhbmdsZU5vcm1hbHMudXBkYXRlKGYpLHRoaXMudHJpYW5nbGVJZHMudXBkYXRlKG5ldyBVaW50MzJBcnJheShkKSl9fSx4LmRyYXdUcmFuc3BhcmVudD14LmRyYXc9ZnVuY3Rpb24odCl7dD10fHx7fTtmb3IodmFyIGU9dGhpcy5nbCxyPXQubW9kZWx8fHYsbj10LnZpZXd8fHYsaT10LnByb2plY3Rpb258fHYsYT1bWy0xZTYsLTFlNiwtMWU2XSxbMWU2LDFlNiwxZTZdXSxvPTA7bzwzOysrbylhWzBdW29dPU1hdGgubWF4KGFbMF1bb10sdGhpcy5jbGlwQm91bmRzWzBdW29dKSxhWzFdW29dPU1hdGgubWluKGFbMV1bb10sdGhpcy5jbGlwQm91bmRzWzFdW29dKTt2YXIgcz17bW9kZWw6cix2aWV3Om4scHJvamVjdGlvbjppLGNsaXBCb3VuZHM6YSxrYW1iaWVudDp0aGlzLmFtYmllbnRMaWdodCxrZGlmZnVzZTp0aGlzLmRpZmZ1c2VMaWdodCxrc3BlY3VsYXI6dGhpcy5zcGVjdWxhckxpZ2h0LHJvdWdobmVzczp0aGlzLnJvdWdobmVzcyxmcmVzbmVsOnRoaXMuZnJlc25lbCxleWVQb3NpdGlvbjpbMCwwLDBdLGxpZ2h0UG9zaXRpb246WzAsMCwwXSxvcGFjaXR5OnRoaXMub3BhY2l0eSx2ZWN0b3JTY2FsZTp0aGlzLnZlY3RvclNjYWxlLGNvbmVTY2FsZTp0aGlzLmNvbmVTY2FsZSxjb25lT2Zmc2V0OnRoaXMuY29uZU9mZnNldCxjb250b3VyQ29sb3I6dGhpcy5jb250b3VyQ29sb3IsdGV4dHVyZTowfTt0aGlzLnRleHR1cmUuYmluZCgwKTt2YXIgdT1uZXcgQXJyYXkoMTYpO2wodSxzLnZpZXcscy5tb2RlbCksbCh1LHMucHJvamVjdGlvbix1KSxjKHUsdSk7Zm9yKG89MDtvPDM7KytvKXMuZXllUG9zaXRpb25bb109dVsxMitvXS91WzE1XTt2YXIgaCxmPXVbMTVdO2ZvcihvPTA7bzwzOysrbylmKz10aGlzLmxpZ2h0UG9zaXRpb25bb10qdVs0Km8rM107Zm9yKG89MDtvPDM7KytvKXtmb3IodmFyIHA9dVsxMitvXSxkPTA7ZDwzOysrZClwKz11WzQqZCtvXSp0aGlzLmxpZ2h0UG9zaXRpb25bZF07cy5saWdodFBvc2l0aW9uW29dPXAvZn10aGlzLnRyaWFuZ2xlQ291bnQ+MCYmKChoPXRoaXMudHJpU2hhZGVyKS5iaW5kKCksaC51bmlmb3Jtcz1zLHRoaXMudHJpYW5nbGVWQU8uYmluZCgpLGUuZHJhd0FycmF5cyhlLlRSSUFOR0xFUywwLDMqdGhpcy50cmlhbmdsZUNvdW50KSx0aGlzLnRyaWFuZ2xlVkFPLnVuYmluZCgpKTt0aGlzLmVkZ2VDb3VudD4wJiZ0aGlzLmxpbmVXaWR0aD4wJiYoKGg9dGhpcy5saW5lU2hhZGVyKS5iaW5kKCksaC51bmlmb3Jtcz1zLHRoaXMuZWRnZVZBTy5iaW5kKCksZS5saW5lV2lkdGgodGhpcy5saW5lV2lkdGgpLGUuZHJhd0FycmF5cyhlLkxJTkVTLDAsMip0aGlzLmVkZ2VDb3VudCksdGhpcy5lZGdlVkFPLnVuYmluZCgpKTt0aGlzLnBvaW50Q291bnQ+MCYmKChoPXRoaXMucG9pbnRTaGFkZXIpLmJpbmQoKSxoLnVuaWZvcm1zPXMsdGhpcy5wb2ludFZBTy5iaW5kKCksZS5kcmF3QXJyYXlzKGUuUE9JTlRTLDAsdGhpcy5wb2ludENvdW50KSx0aGlzLnBvaW50VkFPLnVuYmluZCgpKTt0aGlzLmNvbnRvdXJFbmFibGUmJnRoaXMuY29udG91ckNvdW50PjAmJnRoaXMuY29udG91ckxpbmVXaWR0aD4wJiYoKGg9dGhpcy5jb250b3VyU2hhZGVyKS5iaW5kKCksaC51bmlmb3Jtcz1zLHRoaXMuY29udG91clZBTy5iaW5kKCksZS5kcmF3QXJyYXlzKGUuTElORVMsMCx0aGlzLmNvbnRvdXJDb3VudCksdGhpcy5jb250b3VyVkFPLnVuYmluZCgpKX0seC5kcmF3UGljaz1mdW5jdGlvbih0KXt0PXR8fHt9O2Zvcih2YXIgZT10aGlzLmdsLHI9dC5tb2RlbHx8dixuPXQudmlld3x8dixpPXQucHJvamVjdGlvbnx8dixhPVtbLTFlNiwtMWU2LC0xZTZdLFsxZTYsMWU2LDFlNl1dLG89MDtvPDM7KytvKWFbMF1bb109TWF0aC5tYXgoYVswXVtvXSx0aGlzLmNsaXBCb3VuZHNbMF1bb10pLGFbMV1bb109TWF0aC5taW4oYVsxXVtvXSx0aGlzLmNsaXBCb3VuZHNbMV1bb10pO3RoaXMuX21vZGVsPVtdLnNsaWNlLmNhbGwociksdGhpcy5fdmlldz1bXS5zbGljZS5jYWxsKG4pLHRoaXMuX3Byb2plY3Rpb249W10uc2xpY2UuY2FsbChpKSx0aGlzLl9yZXNvbHV0aW9uPVtlLmRyYXdpbmdCdWZmZXJXaWR0aCxlLmRyYXdpbmdCdWZmZXJIZWlnaHRdO3ZhciBzLGw9e21vZGVsOnIsdmlldzpuLHByb2plY3Rpb246aSxjbGlwQm91bmRzOmEsdmVjdG9yU2NhbGU6dGhpcy52ZWN0b3JTY2FsZSxjb25lU2NhbGU6dGhpcy5jb25lU2NhbGUsY29uZU9mZnNldDp0aGlzLmNvbmVPZmZzZXQscGlja0lkOnRoaXMucGlja0lkLzI1NX07KChzPXRoaXMucGlja1NoYWRlcikuYmluZCgpLHMudW5pZm9ybXM9bCx0aGlzLnRyaWFuZ2xlQ291bnQ+MCYmKHRoaXMudHJpYW5nbGVWQU8uYmluZCgpLGUuZHJhd0FycmF5cyhlLlRSSUFOR0xFUywwLDMqdGhpcy50cmlhbmdsZUNvdW50KSx0aGlzLnRyaWFuZ2xlVkFPLnVuYmluZCgpKSx0aGlzLmVkZ2VDb3VudD4wJiYodGhpcy5lZGdlVkFPLmJpbmQoKSxlLmxpbmVXaWR0aCh0aGlzLmxpbmVXaWR0aCksZS5kcmF3QXJyYXlzKGUuTElORVMsMCwyKnRoaXMuZWRnZUNvdW50KSx0aGlzLmVkZ2VWQU8udW5iaW5kKCkpLHRoaXMucG9pbnRDb3VudD4wKSYmKChzPXRoaXMucG9pbnRQaWNrU2hhZGVyKS5iaW5kKCkscy51bmlmb3Jtcz1sLHRoaXMucG9pbnRWQU8uYmluZCgpLGUuZHJhd0FycmF5cyhlLlBPSU5UUywwLHRoaXMucG9pbnRDb3VudCksdGhpcy5wb2ludFZBTy51bmJpbmQoKSl9LHgucGljaz1mdW5jdGlvbih0KXtpZighdClyZXR1cm4gbnVsbDtpZih0LmlkIT09dGhpcy5waWNrSWQpcmV0dXJuIG51bGw7dmFyIGU9dC52YWx1ZVswXSsyNTYqdC52YWx1ZVsxXSs2NTUzNip0LnZhbHVlWzJdLHI9dGhpcy5jZWxsc1tlXSxuPXRoaXMucG9zaXRpb25zW3JbMV1dLnNsaWNlKDAsMyk7cmV0dXJue2luZGV4Ok1hdGguZmxvb3IoclsxXS80OCkscG9zaXRpb246bixkYXRhQ29vcmRpbmF0ZTpufX0seC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy50ZXh0dXJlLmRpc3Bvc2UoKSx0aGlzLnRyaVNoYWRlci5kaXNwb3NlKCksdGhpcy5waWNrU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlVkFPLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlUG9zaXRpb25zLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlVmVjdG9ycy5kaXNwb3NlKCksdGhpcy50cmlhbmdsZUNvbG9ycy5kaXNwb3NlKCksdGhpcy50cmlhbmdsZVVWcy5kaXNwb3NlKCksdGhpcy50cmlhbmdsZU5vcm1hbHMuZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVJZHMuZGlzcG9zZSgpLHRoaXMuZWRnZVZBTy5kaXNwb3NlKCksdGhpcy5lZGdlUG9zaXRpb25zLmRpc3Bvc2UoKSx0aGlzLmVkZ2VDb2xvcnMuZGlzcG9zZSgpLHRoaXMuZWRnZVVWcy5kaXNwb3NlKCksdGhpcy5lZGdlSWRzLmRpc3Bvc2UoKSx0aGlzLnBvaW50VkFPLmRpc3Bvc2UoKSx0aGlzLnBvaW50UG9zaXRpb25zLmRpc3Bvc2UoKSx0aGlzLnBvaW50Q29sb3JzLmRpc3Bvc2UoKSx0aGlzLnBvaW50VVZzLmRpc3Bvc2UoKSx0aGlzLnBvaW50U2l6ZXMuZGlzcG9zZSgpLHRoaXMucG9pbnRJZHMuZGlzcG9zZSgpLHRoaXMuY29udG91clZBTy5kaXNwb3NlKCksdGhpcy5jb250b3VyUG9zaXRpb25zLmRpc3Bvc2UoKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7MT09PWFyZ3VtZW50cy5sZW5ndGgmJih0PShlPXQpLmdsKTt2YXIgcj1lLnRyaVNoYWRlcnx8ZnVuY3Rpb24odCl7dmFyIGU9bih0LGcudmVydGV4LGcuZnJhZ21lbnQsbnVsbCxnLmF0dHJpYnV0ZXMpO3JldHVybiBlLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCxlLmF0dHJpYnV0ZXMuY29sb3IubG9jYXRpb249MixlLmF0dHJpYnV0ZXMudXYubG9jYXRpb249MyxlLmF0dHJpYnV0ZXMudmVjdG9yLmxvY2F0aW9uPTUsZX0odCkscz1iKHQpLGw9byh0LHUobmV3IFVpbnQ4QXJyYXkoWzI1NSwyNTUsMjU1LDI1NV0pLFsxLDEsNF0pKTtsLmdlbmVyYXRlTWlwbWFwKCksbC5taW5GaWx0ZXI9dC5MSU5FQVJfTUlQTUFQX0xJTkVBUixsLm1hZ0ZpbHRlcj10LkxJTkVBUjt2YXIgYz1pKHQpLGg9aSh0KSxmPWkodCkscD1pKHQpLGQ9aSh0KSxtPWkodCksdj1hKHQsW3tidWZmZXI6Yyx0eXBlOnQuRkxPQVQsc2l6ZTo0fSx7YnVmZmVyOm0sdHlwZTp0LlVOU0lHTkVEX0JZVEUsc2l6ZTo0LG5vcm1hbGl6ZWQ6ITB9LHtidWZmZXI6Zix0eXBlOnQuRkxPQVQsc2l6ZTo0fSx7YnVmZmVyOnAsdHlwZTp0LkZMT0FULHNpemU6Mn0se2J1ZmZlcjpkLHR5cGU6dC5GTE9BVCxzaXplOjN9LHtidWZmZXI6aCx0eXBlOnQuRkxPQVQsc2l6ZTozfV0pLHg9aSh0KSxfPWkodCksdz1pKHQpLGs9aSh0KSxNPWEodCxbe2J1ZmZlcjp4LHR5cGU6dC5GTE9BVCxzaXplOjN9LHtidWZmZXI6ayx0eXBlOnQuVU5TSUdORURfQllURSxzaXplOjQsbm9ybWFsaXplZDohMH0se2J1ZmZlcjpfLHR5cGU6dC5GTE9BVCxzaXplOjR9LHtidWZmZXI6dyx0eXBlOnQuRkxPQVQsc2l6ZToyfV0pLEE9aSh0KSxUPWkodCksUz1pKHQpLEU9aSh0KSxDPWkodCksTD1hKHQsW3tidWZmZXI6QSx0eXBlOnQuRkxPQVQsc2l6ZTozfSx7YnVmZmVyOkMsdHlwZTp0LlVOU0lHTkVEX0JZVEUsc2l6ZTo0LG5vcm1hbGl6ZWQ6ITB9LHtidWZmZXI6VCx0eXBlOnQuRkxPQVQsc2l6ZTo0fSx7YnVmZmVyOlMsdHlwZTp0LkZMT0FULHNpemU6Mn0se2J1ZmZlcjpFLHR5cGU6dC5GTE9BVCxzaXplOjF9XSksej1pKHQpLFA9bmV3IHkodCxsLHIsbnVsbCxudWxsLHMsbnVsbCxudWxsLGMsaCxtLGYscCxkLHYseCxrLF8sdyxNLEEsQyxULFMsRSxMLHosYSh0LFt7YnVmZmVyOnosdHlwZTp0LkZMT0FULHNpemU6M31dKSk7cmV0dXJuIFAudXBkYXRlKGUpLFB9fSx7Ii4vY2xvc2VzdC1wb2ludCI6MjMyLCIuL3NoYWRlcnMiOjIzNCxjb2xvcm1hcDoxMTMsImdsLWJ1ZmZlciI6MjMwLCJnbC1tYXQ0L2ludmVydCI6MjU0LCJnbC1tYXQ0L211bHRpcGx5IjoyNTYsImdsLXNoYWRlciI6Mjg3LCJnbC10ZXh0dXJlMmQiOjMwMywiZ2wtdmFvIjozMDgsbmRhcnJheTo0MTcsbm9ybWFsczo0MjAsInNpbXBsaWNpYWwtY29tcGxleC1jb250b3VyIjo0NzksInR5cGVkYXJyYXktcG9vbCI6NTA3fV0sMjM0OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiZ2xzbGlmeSIpLGk9bihbInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuZmxvYXQgaW52ZXJzZShmbG9hdCBtKSB7XG4gIHJldHVybiAxLjAgLyBtO1xufVxuXG5tYXQyIGludmVyc2UobWF0MiBtKSB7XG4gIHJldHVybiBtYXQyKG1bMV1bMV0sLW1bMF1bMV0sXG4gICAgICAgICAgICAgLW1bMV1bMF0sIG1bMF1bMF0pIC8gKG1bMF1bMF0qbVsxXVsxXSAtIG1bMF1bMV0qbVsxXVswXSk7XG59XG5cbm1hdDMgaW52ZXJzZShtYXQzIG0pIHtcbiAgZmxvYXQgYTAwID0gbVswXVswXSwgYTAxID0gbVswXVsxXSwgYTAyID0gbVswXVsyXTtcbiAgZmxvYXQgYTEwID0gbVsxXVswXSwgYTExID0gbVsxXVsxXSwgYTEyID0gbVsxXVsyXTtcbiAgZmxvYXQgYTIwID0gbVsyXVswXSwgYTIxID0gbVsyXVsxXSwgYTIyID0gbVsyXVsyXTtcblxuICBmbG9hdCBiMDEgPSBhMjIgKiBhMTEgLSBhMTIgKiBhMjE7XG4gIGZsb2F0IGIxMSA9IC1hMjIgKiBhMTAgKyBhMTIgKiBhMjA7XG4gIGZsb2F0IGIyMSA9IGEyMSAqIGExMCAtIGExMSAqIGEyMDtcblxuICBmbG9hdCBkZXQgPSBhMDAgKiBiMDEgKyBhMDEgKiBiMTEgKyBhMDIgKiBiMjE7XG5cbiAgcmV0dXJuIG1hdDMoYjAxLCAoLWEyMiAqIGEwMSArIGEwMiAqIGEyMSksIChhMTIgKiBhMDEgLSBhMDIgKiBhMTEpLFxuICAgICAgICAgICAgICBiMTEsIChhMjIgKiBhMDAgLSBhMDIgKiBhMjApLCAoLWExMiAqIGEwMCArIGEwMiAqIGExMCksXG4gICAgICAgICAgICAgIGIyMSwgKC1hMjEgKiBhMDAgKyBhMDEgKiBhMjApLCAoYTExICogYTAwIC0gYTAxICogYTEwKSkgLyBkZXQ7XG59XG5cbm1hdDQgaW52ZXJzZShtYXQ0IG0pIHtcbiAgZmxvYXRcbiAgICAgIGEwMCA9IG1bMF1bMF0sIGEwMSA9IG1bMF1bMV0sIGEwMiA9IG1bMF1bMl0sIGEwMyA9IG1bMF1bM10sXG4gICAgICBhMTAgPSBtWzFdWzBdLCBhMTEgPSBtWzFdWzFdLCBhMTIgPSBtWzFdWzJdLCBhMTMgPSBtWzFdWzNdLFxuICAgICAgYTIwID0gbVsyXVswXSwgYTIxID0gbVsyXVsxXSwgYTIyID0gbVsyXVsyXSwgYTIzID0gbVsyXVszXSxcbiAgICAgIGEzMCA9IG1bM11bMF0sIGEzMSA9IG1bM11bMV0sIGEzMiA9IG1bM11bMl0sIGEzMyA9IG1bM11bM10sXG5cbiAgICAgIGIwMCA9IGEwMCAqIGExMSAtIGEwMSAqIGExMCxcbiAgICAgIGIwMSA9IGEwMCAqIGExMiAtIGEwMiAqIGExMCxcbiAgICAgIGIwMiA9IGEwMCAqIGExMyAtIGEwMyAqIGExMCxcbiAgICAgIGIwMyA9IGEwMSAqIGExMiAtIGEwMiAqIGExMSxcbiAgICAgIGIwNCA9IGEwMSAqIGExMyAtIGEwMyAqIGExMSxcbiAgICAgIGIwNSA9IGEwMiAqIGExMyAtIGEwMyAqIGExMixcbiAgICAgIGIwNiA9IGEyMCAqIGEzMSAtIGEyMSAqIGEzMCxcbiAgICAgIGIwNyA9IGEyMCAqIGEzMiAtIGEyMiAqIGEzMCxcbiAgICAgIGIwOCA9IGEyMCAqIGEzMyAtIGEyMyAqIGEzMCxcbiAgICAgIGIwOSA9IGEyMSAqIGEzMiAtIGEyMiAqIGEzMSxcbiAgICAgIGIxMCA9IGEyMSAqIGEzMyAtIGEyMyAqIGEzMSxcbiAgICAgIGIxMSA9IGEyMiAqIGEzMyAtIGEyMyAqIGEzMixcblxuICAgICAgZGV0ID0gYjAwICogYjExIC0gYjAxICogYjEwICsgYjAyICogYjA5ICsgYjAzICogYjA4IC0gYjA0ICogYjA3ICsgYjA1ICogYjA2O1xuXG4gIHJldHVybiBtYXQ0KFxuICAgICAgYTExICogYjExIC0gYTEyICogYjEwICsgYTEzICogYjA5LFxuICAgICAgYTAyICogYjEwIC0gYTAxICogYjExIC0gYTAzICogYjA5LFxuICAgICAgYTMxICogYjA1IC0gYTMyICogYjA0ICsgYTMzICogYjAzLFxuICAgICAgYTIyICogYjA0IC0gYTIxICogYjA1IC0gYTIzICogYjAzLFxuICAgICAgYTEyICogYjA4IC0gYTEwICogYjExIC0gYTEzICogYjA3LFxuICAgICAgYTAwICogYjExIC0gYTAyICogYjA4ICsgYTAzICogYjA3LFxuICAgICAgYTMyICogYjAyIC0gYTMwICogYjA1IC0gYTMzICogYjAxLFxuICAgICAgYTIwICogYjA1IC0gYTIyICogYjAyICsgYTIzICogYjAxLFxuICAgICAgYTEwICogYjEwIC0gYTExICogYjA4ICsgYTEzICogYjA2LFxuICAgICAgYTAxICogYjA4IC0gYTAwICogYjEwIC0gYTAzICogYjA2LFxuICAgICAgYTMwICogYjA0IC0gYTMxICogYjAyICsgYTMzICogYjAwLFxuICAgICAgYTIxICogYjAyIC0gYTIwICogYjA0IC0gYTIzICogYjAwLFxuICAgICAgYTExICogYjA3IC0gYTEwICogYjA5IC0gYTEyICogYjA2LFxuICAgICAgYTAwICogYjA5IC0gYTAxICogYjA3ICsgYTAyICogYjA2LFxuICAgICAgYTMxICogYjAxIC0gYTMwICogYjAzIC0gYTMyICogYjAwLFxuICAgICAgYTIwICogYjAzIC0gYTIxICogYjAxICsgYTIyICogYjAwKSAvIGRldDtcbn1cblxudmVjMyBnZXRPcnRob2dvbmFsVmVjdG9yKHZlYzMgdikge1xuICAvLyBSZXR1cm4gdXAtdmVjdG9yIGZvciBvbmx5LXogdmVjdG9yLlxuICAvLyBSZXR1cm4gYXggKyBieSArIGN6ID0gMCwgYSBwb2ludCB0aGF0IGxpZXMgb24gdGhlIHBsYW5lIHRoYXQgaGFzIHYgYXMgYSBub3JtYWwgYW5kIHRoYXQgaXNuJ3QgKDAsMCwwKS5cbiAgLy8gRnJvbSB0aGUgYWJvdmUgaWYtc3RhdGVtZW50IHdlIGhhdmUgfHxhfHwgPiAwICBVICB8fGJ8fCA+IDAuXG4gIC8vIEFzc2lnbiB6ID0gMCwgeCA9IC1iLCB5ID0gYTpcbiAgLy8gYSotYiArIGIqYSArIGMqMCA9IC1iYSArIGJhICsgMCA9IDBcbiAgaWYgKHYueCp2LnggPiB2Lnoqdi56IHx8IHYueSp2LnkgPiB2Lnoqdi56KSB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZSh2ZWMzKC12LnksIHYueCwgMC4wKSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZSh2ZWMzKDAuMCwgdi56LCAtdi55KSk7XG4gIH1cbn1cblxuLy8gQ2FsY3VsYXRlIHRoZSBjb25lIHZlcnRleCBhbmQgbm9ybWFsIGF0IHRoZSBnaXZlbiBpbmRleC5cbi8vXG4vLyBUaGUgcmV0dXJuZWQgdmVydGV4IGlzIGZvciBhIGNvbmUgd2l0aCBpdHMgdG9wIGF0IG9yaWdpbiBhbmQgaGVpZ2h0IG9mIDEuMCxcbi8vIHBvaW50aW5nIGluIHRoZSBkaXJlY3Rpb24gb2YgdGhlIHZlY3RvciBhdHRyaWJ1dGUuXG4vL1xuLy8gRWFjaCBjb25lIGlzIG1hZGUgdXAgb2YgYSB0b3AgdmVydGV4LCBhIGNlbnRlciBiYXNlIHZlcnRleCBhbmQgYmFzZSBwZXJpbWV0ZXIgdmVydGljZXMuXG4vLyBUaGVzZSB2ZXJ0aWNlcyBhcmUgdXNlZCB0byBtYWtlIHVwIHRoZSB0cmlhbmdsZXMgb2YgdGhlIGNvbmUgYnkgdGhlIGZvbGxvd2luZzpcbi8vICAgc2VnbWVudCArIDAgdG9wIHZlcnRleFxuLy8gICBzZWdtZW50ICsgMSBwZXJpbWV0ZXIgdmVydGV4IGErMVxuLy8gICBzZWdtZW50ICsgMiBwZXJpbWV0ZXIgdmVydGV4IGFcbi8vICAgc2VnbWVudCArIDMgY2VudGVyIGJhc2UgdmVydGV4XG4vLyAgIHNlZ21lbnQgKyA0IHBlcmltZXRlciB2ZXJ0ZXggYVxuLy8gICBzZWdtZW50ICsgNSBwZXJpbWV0ZXIgdmVydGV4IGErMVxuLy8gV2hlcmUgc2VnbWVudCBpcyB0aGUgbnVtYmVyIG9mIHRoZSByYWRpYWwgc2VnbWVudCAqIDYgYW5kIGEgaXMgdGhlIGFuZ2xlIGF0IHRoYXQgcmFkaWFsIHNlZ21lbnQuXG4vLyBUbyBnbyBmcm9tIGluZGV4IHRvIHNlZ21lbnQsIGZsb29yKGluZGV4IC8gNilcbi8vIFRvIGdvIGZyb20gc2VnbWVudCB0byBhbmdsZSwgMipwaSAqIChzZWdtZW50L3NlZ21lbnRDb3VudClcbi8vIFRvIGdvIGZyb20gaW5kZXggdG8gc2VnbWVudCBpbmRleCwgaW5kZXggLSAoc2VnbWVudCo2KVxuLy9cbnZlYzMgZ2V0Q29uZVBvc2l0aW9uKHZlYzMgZCwgZmxvYXQgaW5kZXgsIGZsb2F0IGNvbmVPZmZzZXQsIG91dCB2ZWMzIG5vcm1hbCkge1xuXG4gIGNvbnN0IGZsb2F0IHNlZ21lbnRDb3VudCA9IDguMDtcblxuICBpbmRleCA9IG1vZChpbmRleCwgc2VnbWVudENvdW50ICogNi4wKTtcblxuICBmbG9hdCBzZWdtZW50ID0gZmxvb3IoaW5kZXgvNi4wKTtcbiAgZmxvYXQgc2VnbWVudEluZGV4ID0gaW5kZXggLSAoc2VnbWVudCo2LjApO1xuXG4gIG5vcm1hbCA9IC1ub3JtYWxpemUoZCk7XG5cbiAgaWYgKHNlZ21lbnRJbmRleCA9PSAzLjApIHtcbiAgICByZXR1cm4gbWl4KHZlYzMoMC4wKSwgLWQsIGNvbmVPZmZzZXQpO1xuICB9XG5cbiAgLy8gYW5nbGUgPSAycGkgKiAoKHNlZ21lbnQgKyAoKHNlZ21lbnRJbmRleCA9PSAxLjAgfHwgc2VnbWVudEluZGV4ID09IDUuMCkgPyAxLjAgOiAwLjApKSAvIHNlZ21lbnRDb3VudClcbiAgZmxvYXQgbmV4dEFuZ2xlID0gZmxvYXQoc2VnbWVudEluZGV4ID09IDEuMCB8fCBzZWdtZW50SW5kZXggPT0gNS4wKTtcbiAgZmxvYXQgYW5nbGUgPSAyLjAgKiAzLjE0MTU5ICogKChzZWdtZW50ICsgbmV4dEFuZ2xlKSAvIHNlZ21lbnRDb3VudCk7XG5cbiAgdmVjMyB2MSA9IG1peChkLCB2ZWMzKDAuMCksIGNvbmVPZmZzZXQpO1xuICB2ZWMzIHYyID0gdjEgLSBkO1xuXG4gIHZlYzMgdSA9IGdldE9ydGhvZ29uYWxWZWN0b3IoZCk7XG4gIHZlYzMgdiA9IG5vcm1hbGl6ZShjcm9zcyh1LCBkKSk7XG5cbiAgdmVjMyB4ID0gdSAqIGNvcyhhbmdsZSkgKiBsZW5ndGgoZCkqMC4yNTtcbiAgdmVjMyB5ID0gdiAqIHNpbihhbmdsZSkgKiBsZW5ndGgoZCkqMC4yNTtcbiAgdmVjMyB2MyA9IHYyICsgeCArIHk7XG4gIGlmIChzZWdtZW50SW5kZXggPD0gMi4wKSB7XG4gICAgdmVjMyB0eCA9IHUgKiBzaW4oYW5nbGUpO1xuICAgIHZlYzMgdHkgPSB2ICogLWNvcyhhbmdsZSk7XG4gICAgdmVjMyB0YW5nZW50ID0gdHggKyB0eTtcbiAgICBub3JtYWwgPSBub3JtYWxpemUoY3Jvc3ModjMgLSB2MSwgdGFuZ2VudCkpO1xuICB9XG5cbiAgaWYgKHNlZ21lbnRJbmRleCA9PSAwLjApIHtcbiAgICByZXR1cm4gbWl4KGQsIHZlYzMoMC4wKSwgY29uZU9mZnNldCk7XG4gIH1cbiAgcmV0dXJuIHYzO1xufVxuXG5hdHRyaWJ1dGUgdmVjMyB2ZWN0b3I7XG5hdHRyaWJ1dGUgdmVjNCBjb2xvciwgcG9zaXRpb247XG5hdHRyaWJ1dGUgdmVjMiB1djtcbnVuaWZvcm0gZmxvYXQgdmVjdG9yU2NhbGU7XG51bmlmb3JtIGZsb2F0IGNvbmVTY2FsZTtcblxudW5pZm9ybSBmbG9hdCBjb25lT2Zmc2V0O1xuXG51bmlmb3JtIG1hdDQgbW9kZWxcbiAgICAgICAgICAgLCB2aWV3XG4gICAgICAgICAgICwgcHJvamVjdGlvbjtcbnVuaWZvcm0gdmVjMyBleWVQb3NpdGlvblxuICAgICAgICAgICAsIGxpZ2h0UG9zaXRpb247XG5cbnZhcnlpbmcgdmVjMyBmX25vcm1hbFxuICAgICAgICAgICAsIGZfbGlnaHREaXJlY3Rpb25cbiAgICAgICAgICAgLCBmX2V5ZURpcmVjdGlvblxuICAgICAgICAgICAsIGZfZGF0YTtcbnZhcnlpbmcgdmVjNCBmX2NvbG9yO1xudmFyeWluZyB2ZWMyIGZfdXY7XG5cbnZvaWQgbWFpbigpIHtcbiAgLy8gU2NhbGUgdGhlIHZlY3RvciBtYWduaXR1ZGUgdG8gc3RheSBjb25zdGFudCB3aXRoXG4gIC8vIG1vZGVsICYgdmlldyBjaGFuZ2VzLlxuICB2ZWMzIG5vcm1hbDtcbiAgdmVjNCBjb25lUG9zaXRpb24gPSBtb2RlbCAqIHZlYzQocG9zaXRpb24ueHl6LCAxLjApICsgdmVjNChnZXRDb25lUG9zaXRpb24obWF0Myhtb2RlbCkgKiAoKHZlY3RvclNjYWxlICogY29uZVNjYWxlKSAqIHZlY3RvciksIHBvc2l0aW9uLncsIGNvbmVPZmZzZXQsIG5vcm1hbCksIDAuMCk7XG4gIG5vcm1hbCA9IG5vcm1hbGl6ZShub3JtYWwgKiBpbnZlcnNlKG1hdDMobW9kZWwpKSk7XG5cbiAgLy8gdmVjNCBtX3Bvc2l0aW9uICA9IG1vZGVsICogdmVjNChjb25lUG9zaXRpb24sIDEuMCk7XG4gIHZlYzQgdF9wb3NpdGlvbiAgPSB2aWV3ICogY29uZVBvc2l0aW9uO1xuICBnbF9Qb3NpdGlvbiAgICAgID0gcHJvamVjdGlvbiAqIHRfcG9zaXRpb247XG4gIGZfY29sb3IgICAgICAgICAgPSBjb2xvcjsgLy92ZWM0KHBvc2l0aW9uLncsIGNvbG9yLnIsIDAsIDApO1xuICBmX25vcm1hbCAgICAgICAgID0gbm9ybWFsO1xuICBmX2RhdGEgICAgICAgICAgID0gY29uZVBvc2l0aW9uLnh5ejtcbiAgZl9leWVEaXJlY3Rpb24gICA9IGV5ZVBvc2l0aW9uICAgLSBjb25lUG9zaXRpb24ueHl6O1xuICBmX2xpZ2h0RGlyZWN0aW9uID0gbGlnaHRQb3NpdGlvbiAtIGNvbmVQb3NpdGlvbi54eXo7XG4gIGZfdXYgICAgICAgICAgICAgPSB1djtcbn1cbiJdKSxhPW4oWyJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmZsb2F0IGJlY2ttYW5uRGlzdHJpYnV0aW9uKGZsb2F0IHgsIGZsb2F0IHJvdWdobmVzcykge1xuICBmbG9hdCBOZG90SCA9IG1heCh4LCAwLjAwMDEpO1xuICBmbG9hdCBjb3MyQWxwaGEgPSBOZG90SCAqIE5kb3RIO1xuICBmbG9hdCB0YW4yQWxwaGEgPSAoY29zMkFscGhhIC0gMS4wKSAvIGNvczJBbHBoYTtcbiAgZmxvYXQgcm91Z2huZXNzMiA9IHJvdWdobmVzcyAqIHJvdWdobmVzcztcbiAgZmxvYXQgZGVub20gPSAzLjE0MTU5MjY1MzU4OTc5MyAqIHJvdWdobmVzczIgKiBjb3MyQWxwaGEgKiBjb3MyQWxwaGE7XG4gIHJldHVybiBleHAodGFuMkFscGhhIC8gcm91Z2huZXNzMikgLyBkZW5vbTtcbn1cblxuZmxvYXQgY29va1RvcnJhbmNlU3BlY3VsYXIoXG4gIHZlYzMgbGlnaHREaXJlY3Rpb24sXG4gIHZlYzMgdmlld0RpcmVjdGlvbixcbiAgdmVjMyBzdXJmYWNlTm9ybWFsLFxuICBmbG9hdCByb3VnaG5lc3MsXG4gIGZsb2F0IGZyZXNuZWwpIHtcblxuICBmbG9hdCBWZG90TiA9IG1heChkb3Qodmlld0RpcmVjdGlvbiwgc3VyZmFjZU5vcm1hbCksIDAuMCk7XG4gIGZsb2F0IExkb3ROID0gbWF4KGRvdChsaWdodERpcmVjdGlvbiwgc3VyZmFjZU5vcm1hbCksIDAuMCk7XG5cbiAgLy9IYWxmIGFuZ2xlIHZlY3RvclxuICB2ZWMzIEggPSBub3JtYWxpemUobGlnaHREaXJlY3Rpb24gKyB2aWV3RGlyZWN0aW9uKTtcblxuICAvL0dlb21ldHJpYyB0ZXJtXG4gIGZsb2F0IE5kb3RIID0gbWF4KGRvdChzdXJmYWNlTm9ybWFsLCBIKSwgMC4wKTtcbiAgZmxvYXQgVmRvdEggPSBtYXgoZG90KHZpZXdEaXJlY3Rpb24sIEgpLCAwLjAwMDAwMSk7XG4gIGZsb2F0IExkb3RIID0gbWF4KGRvdChsaWdodERpcmVjdGlvbiwgSCksIDAuMDAwMDAxKTtcbiAgZmxvYXQgRzEgPSAoMi4wICogTmRvdEggKiBWZG90TikgLyBWZG90SDtcbiAgZmxvYXQgRzIgPSAoMi4wICogTmRvdEggKiBMZG90TikgLyBMZG90SDtcbiAgZmxvYXQgRyA9IG1pbigxLjAsIG1pbihHMSwgRzIpKTtcbiAgXG4gIC8vRGlzdHJpYnV0aW9uIHRlcm1cbiAgZmxvYXQgRCA9IGJlY2ttYW5uRGlzdHJpYnV0aW9uKE5kb3RILCByb3VnaG5lc3MpO1xuXG4gIC8vRnJlc25lbCB0ZXJtXG4gIGZsb2F0IEYgPSBwb3coMS4wIC0gVmRvdE4sIGZyZXNuZWwpO1xuXG4gIC8vTXVsdGlwbHkgdGVybXMgYW5kIGRvbmVcbiAgcmV0dXJuICBHICogRiAqIEQgLyBtYXgoMy4xNDE1OTI2NSAqIFZkb3ROLCAwLjAwMDAwMSk7XG59XG5cbnVuaWZvcm0gdmVjMyBjbGlwQm91bmRzWzJdO1xudW5pZm9ybSBmbG9hdCByb3VnaG5lc3NcbiAgICAgICAgICAgICwgZnJlc25lbFxuICAgICAgICAgICAgLCBrYW1iaWVudFxuICAgICAgICAgICAgLCBrZGlmZnVzZVxuICAgICAgICAgICAgLCBrc3BlY3VsYXJcbiAgICAgICAgICAgICwgb3BhY2l0eTtcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XG5cbnZhcnlpbmcgdmVjMyBmX25vcm1hbFxuICAgICAgICAgICAsIGZfbGlnaHREaXJlY3Rpb25cbiAgICAgICAgICAgLCBmX2V5ZURpcmVjdGlvblxuICAgICAgICAgICAsIGZfZGF0YTtcbnZhcnlpbmcgdmVjNCBmX2NvbG9yO1xudmFyeWluZyB2ZWMyIGZfdXY7XG5cbnZvaWQgbWFpbigpIHtcbiAgLy9pZihhbnkobGVzc1RoYW4oZl9kYXRhLCBjbGlwQm91bmRzWzBdKSkgfHwgXG4gIC8vICAgYW55KGdyZWF0ZXJUaGFuKGZfZGF0YSwgY2xpcEJvdW5kc1sxXSkpKSB7XG4gIC8vICBkaXNjYXJkO1xuICAvL31cblxuICB2ZWMzIE4gPSBub3JtYWxpemUoZl9ub3JtYWwpO1xuICB2ZWMzIEwgPSBub3JtYWxpemUoZl9saWdodERpcmVjdGlvbik7XG4gIHZlYzMgViA9IG5vcm1hbGl6ZShmX2V5ZURpcmVjdGlvbik7XG4gIFxuICBpZighZ2xfRnJvbnRGYWNpbmcpIHtcbiAgICBOID0gLU47XG4gIH1cblxuICBmbG9hdCBzcGVjdWxhciA9IGNvb2tUb3JyYW5jZVNwZWN1bGFyKEwsIFYsIE4sIHJvdWdobmVzcywgZnJlc25lbCk7XG4gIGZsb2F0IGRpZmZ1c2UgID0gbWluKGthbWJpZW50ICsga2RpZmZ1c2UgKiBtYXgoZG90KE4sIEwpLCAwLjApLCAxLjApO1xuXG4gIHZlYzQgc3VyZmFjZUNvbG9yID0gIHRleHR1cmUyRCh0ZXh0dXJlLCBmX3V2KTtcbiAgdmVjNCBsaXRDb2xvciA9IHN1cmZhY2VDb2xvci5hICogdmVjNChkaWZmdXNlICogc3VyZmFjZUNvbG9yLnJnYiArIGtzcGVjdWxhciAqIHZlYzMoMSwxLDEpICogc3BlY3VsYXIsICAxLjApO1xuXG4gIGdsX0ZyYWdDb2xvciA9IGxpdENvbG9yICogb3BhY2l0eTtcbn0iXSksbz1uKFsicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG52ZWMzIGdldE9ydGhvZ29uYWxWZWN0b3IodmVjMyB2KSB7XG4gIC8vIFJldHVybiB1cC12ZWN0b3IgZm9yIG9ubHkteiB2ZWN0b3IuXG4gIC8vIFJldHVybiBheCArIGJ5ICsgY3ogPSAwLCBhIHBvaW50IHRoYXQgbGllcyBvbiB0aGUgcGxhbmUgdGhhdCBoYXMgdiBhcyBhIG5vcm1hbCBhbmQgdGhhdCBpc24ndCAoMCwwLDApLlxuICAvLyBGcm9tIHRoZSBhYm92ZSBpZi1zdGF0ZW1lbnQgd2UgaGF2ZSB8fGF8fCA+IDAgIFUgIHx8Ynx8ID4gMC5cbiAgLy8gQXNzaWduIHogPSAwLCB4ID0gLWIsIHkgPSBhOlxuICAvLyBhKi1iICsgYiphICsgYyowID0gLWJhICsgYmEgKyAwID0gMFxuICBpZiAodi54KnYueCA+IHYueip2LnogfHwgdi55KnYueSA+IHYueip2LnopIHtcbiAgICByZXR1cm4gbm9ybWFsaXplKHZlYzMoLXYueSwgdi54LCAwLjApKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbm9ybWFsaXplKHZlYzMoMC4wLCB2LnosIC12LnkpKTtcbiAgfVxufVxuXG4vLyBDYWxjdWxhdGUgdGhlIGNvbmUgdmVydGV4IGFuZCBub3JtYWwgYXQgdGhlIGdpdmVuIGluZGV4LlxuLy9cbi8vIFRoZSByZXR1cm5lZCB2ZXJ0ZXggaXMgZm9yIGEgY29uZSB3aXRoIGl0cyB0b3AgYXQgb3JpZ2luIGFuZCBoZWlnaHQgb2YgMS4wLFxuLy8gcG9pbnRpbmcgaW4gdGhlIGRpcmVjdGlvbiBvZiB0aGUgdmVjdG9yIGF0dHJpYnV0ZS5cbi8vXG4vLyBFYWNoIGNvbmUgaXMgbWFkZSB1cCBvZiBhIHRvcCB2ZXJ0ZXgsIGEgY2VudGVyIGJhc2UgdmVydGV4IGFuZCBiYXNlIHBlcmltZXRlciB2ZXJ0aWNlcy5cbi8vIFRoZXNlIHZlcnRpY2VzIGFyZSB1c2VkIHRvIG1ha2UgdXAgdGhlIHRyaWFuZ2xlcyBvZiB0aGUgY29uZSBieSB0aGUgZm9sbG93aW5nOlxuLy8gICBzZWdtZW50ICsgMCB0b3AgdmVydGV4XG4vLyAgIHNlZ21lbnQgKyAxIHBlcmltZXRlciB2ZXJ0ZXggYSsxXG4vLyAgIHNlZ21lbnQgKyAyIHBlcmltZXRlciB2ZXJ0ZXggYVxuLy8gICBzZWdtZW50ICsgMyBjZW50ZXIgYmFzZSB2ZXJ0ZXhcbi8vICAgc2VnbWVudCArIDQgcGVyaW1ldGVyIHZlcnRleCBhXG4vLyAgIHNlZ21lbnQgKyA1IHBlcmltZXRlciB2ZXJ0ZXggYSsxXG4vLyBXaGVyZSBzZWdtZW50IGlzIHRoZSBudW1iZXIgb2YgdGhlIHJhZGlhbCBzZWdtZW50ICogNiBhbmQgYSBpcyB0aGUgYW5nbGUgYXQgdGhhdCByYWRpYWwgc2VnbWVudC5cbi8vIFRvIGdvIGZyb20gaW5kZXggdG8gc2VnbWVudCwgZmxvb3IoaW5kZXggLyA2KVxuLy8gVG8gZ28gZnJvbSBzZWdtZW50IHRvIGFuZ2xlLCAyKnBpICogKHNlZ21lbnQvc2VnbWVudENvdW50KVxuLy8gVG8gZ28gZnJvbSBpbmRleCB0byBzZWdtZW50IGluZGV4LCBpbmRleCAtIChzZWdtZW50KjYpXG4vL1xudmVjMyBnZXRDb25lUG9zaXRpb24odmVjMyBkLCBmbG9hdCBpbmRleCwgZmxvYXQgY29uZU9mZnNldCwgb3V0IHZlYzMgbm9ybWFsKSB7XG5cbiAgY29uc3QgZmxvYXQgc2VnbWVudENvdW50ID0gOC4wO1xuXG4gIGluZGV4ID0gbW9kKGluZGV4LCBzZWdtZW50Q291bnQgKiA2LjApO1xuXG4gIGZsb2F0IHNlZ21lbnQgPSBmbG9vcihpbmRleC82LjApO1xuICBmbG9hdCBzZWdtZW50SW5kZXggPSBpbmRleCAtIChzZWdtZW50KjYuMCk7XG5cbiAgbm9ybWFsID0gLW5vcm1hbGl6ZShkKTtcblxuICBpZiAoc2VnbWVudEluZGV4ID09IDMuMCkge1xuICAgIHJldHVybiBtaXgodmVjMygwLjApLCAtZCwgY29uZU9mZnNldCk7XG4gIH1cblxuICAvLyBhbmdsZSA9IDJwaSAqICgoc2VnbWVudCArICgoc2VnbWVudEluZGV4ID09IDEuMCB8fCBzZWdtZW50SW5kZXggPT0gNS4wKSA/IDEuMCA6IDAuMCkpIC8gc2VnbWVudENvdW50KVxuICBmbG9hdCBuZXh0QW5nbGUgPSBmbG9hdChzZWdtZW50SW5kZXggPT0gMS4wIHx8IHNlZ21lbnRJbmRleCA9PSA1LjApO1xuICBmbG9hdCBhbmdsZSA9IDIuMCAqIDMuMTQxNTkgKiAoKHNlZ21lbnQgKyBuZXh0QW5nbGUpIC8gc2VnbWVudENvdW50KTtcblxuICB2ZWMzIHYxID0gbWl4KGQsIHZlYzMoMC4wKSwgY29uZU9mZnNldCk7XG4gIHZlYzMgdjIgPSB2MSAtIGQ7XG5cbiAgdmVjMyB1ID0gZ2V0T3J0aG9nb25hbFZlY3RvcihkKTtcbiAgdmVjMyB2ID0gbm9ybWFsaXplKGNyb3NzKHUsIGQpKTtcblxuICB2ZWMzIHggPSB1ICogY29zKGFuZ2xlKSAqIGxlbmd0aChkKSowLjI1O1xuICB2ZWMzIHkgPSB2ICogc2luKGFuZ2xlKSAqIGxlbmd0aChkKSowLjI1O1xuICB2ZWMzIHYzID0gdjIgKyB4ICsgeTtcbiAgaWYgKHNlZ21lbnRJbmRleCA8PSAyLjApIHtcbiAgICB2ZWMzIHR4ID0gdSAqIHNpbihhbmdsZSk7XG4gICAgdmVjMyB0eSA9IHYgKiAtY29zKGFuZ2xlKTtcbiAgICB2ZWMzIHRhbmdlbnQgPSB0eCArIHR5O1xuICAgIG5vcm1hbCA9IG5vcm1hbGl6ZShjcm9zcyh2MyAtIHYxLCB0YW5nZW50KSk7XG4gIH1cblxuICBpZiAoc2VnbWVudEluZGV4ID09IDAuMCkge1xuICAgIHJldHVybiBtaXgoZCwgdmVjMygwLjApLCBjb25lT2Zmc2V0KTtcbiAgfVxuICByZXR1cm4gdjM7XG59XG5cbmF0dHJpYnV0ZSB2ZWMzIHZlY3RvcjtcbmF0dHJpYnV0ZSB2ZWM0IHBvc2l0aW9uO1xuYXR0cmlidXRlIHZlYzQgaWQ7XG5cbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcblxudW5pZm9ybSBmbG9hdCB2ZWN0b3JTY2FsZTtcbnVuaWZvcm0gZmxvYXQgY29uZVNjYWxlO1xudW5pZm9ybSBmbG9hdCBjb25lT2Zmc2V0O1xuXG52YXJ5aW5nIHZlYzMgZl9wb3NpdGlvbjtcbnZhcnlpbmcgdmVjNCBmX2lkO1xuXG52b2lkIG1haW4oKSB7XG4gIHZlYzMgbm9ybWFsO1xuICB2ZWM0IGNvbmVQb3NpdGlvbiA9IG1vZGVsICogdmVjNChwb3NpdGlvbi54eXosIDEuMCkgKyB2ZWM0KGdldENvbmVQb3NpdGlvbihtYXQzKG1vZGVsKSAqICgodmVjdG9yU2NhbGUgKiBjb25lU2NhbGUpICogdmVjdG9yKSwgcG9zaXRpb24udywgY29uZU9mZnNldCwgbm9ybWFsKSwgMC4wKTtcbiAgZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uICogdmlldyAqIGNvbmVQb3NpdGlvbjtcbiAgZl9pZCAgICAgICAgPSBpZDtcbiAgZl9wb3NpdGlvbiAgPSBwb3NpdGlvbi54eXo7XG59XG4iXSkscz1uKFsicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG51bmlmb3JtIHZlYzMgIGNsaXBCb3VuZHNbMl07XG51bmlmb3JtIGZsb2F0IHBpY2tJZDtcblxudmFyeWluZyB2ZWMzIGZfcG9zaXRpb247XG52YXJ5aW5nIHZlYzQgZl9pZDtcblxudm9pZCBtYWluKCkge1xuICBpZihhbnkobGVzc1RoYW4oZl9wb3NpdGlvbiwgY2xpcEJvdW5kc1swXSkpIHx8IFxuICAgICBhbnkoZ3JlYXRlclRoYW4oZl9wb3NpdGlvbiwgY2xpcEJvdW5kc1sxXSkpKSB7XG4gICAgZGlzY2FyZDtcbiAgfVxuICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHBpY2tJZCwgZl9pZC54eXopO1xufSJdKTtyLm1lc2hTaGFkZXI9e3ZlcnRleDppLGZyYWdtZW50OmEsYXR0cmlidXRlczpbe25hbWU6InBvc2l0aW9uIix0eXBlOiJ2ZWM0In0se25hbWU6Im5vcm1hbCIsdHlwZToidmVjMyJ9LHtuYW1lOiJjb2xvciIsdHlwZToidmVjNCJ9LHtuYW1lOiJ1diIsdHlwZToidmVjMiJ9LHtuYW1lOiJ2ZWN0b3IiLHR5cGU6InZlYzMifV19LHIucGlja1NoYWRlcj17dmVydGV4Om8sZnJhZ21lbnQ6cyxhdHRyaWJ1dGVzOlt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzQifSx7bmFtZToiaWQiLHR5cGU6InZlYzQifSx7bmFtZToidmVjdG9yIix0eXBlOiJ2ZWMzIn1dfX0se2dsc2xpZnk6Mzc3fV0sMjM1OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXswOiJOT05FIiwxOiJPTkUiLDI6IkxJTkVfTE9PUCIsMzoiTElORV9TVFJJUCIsNDoiVFJJQU5HTEVTIiw1OiJUUklBTkdMRV9TVFJJUCIsNjoiVFJJQU5HTEVfRkFOIiwyNTY6IkRFUFRIX0JVRkZFUl9CSVQiLDUxMjoiTkVWRVIiLDUxMzoiTEVTUyIsNTE0OiJFUVVBTCIsNTE1OiJMRVFVQUwiLDUxNjoiR1JFQVRFUiIsNTE3OiJOT1RFUVVBTCIsNTE4OiJHRVFVQUwiLDUxOToiQUxXQVlTIiw3Njg6IlNSQ19DT0xPUiIsNzY5OiJPTkVfTUlOVVNfU1JDX0NPTE9SIiw3NzA6IlNSQ19BTFBIQSIsNzcxOiJPTkVfTUlOVVNfU1JDX0FMUEhBIiw3NzI6IkRTVF9BTFBIQSIsNzczOiJPTkVfTUlOVVNfRFNUX0FMUEhBIiw3NzQ6IkRTVF9DT0xPUiIsNzc1OiJPTkVfTUlOVVNfRFNUX0NPTE9SIiw3NzY6IlNSQ19BTFBIQV9TQVRVUkFURSIsMTAyNDoiU1RFTkNJTF9CVUZGRVJfQklUIiwxMDI4OiJGUk9OVCIsMTAyOToiQkFDSyIsMTAzMjoiRlJPTlRfQU5EX0JBQ0siLDEyODA6IklOVkFMSURfRU5VTSIsMTI4MToiSU5WQUxJRF9WQUxVRSIsMTI4MjoiSU5WQUxJRF9PUEVSQVRJT04iLDEyODU6Ik9VVF9PRl9NRU1PUlkiLDEyODY6IklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIiwyMzA0OiJDVyIsMjMwNToiQ0NXIiwyODQ5OiJMSU5FX1dJRFRIIiwyODg0OiJDVUxMX0ZBQ0UiLDI4ODU6IkNVTExfRkFDRV9NT0RFIiwyODg2OiJGUk9OVF9GQUNFIiwyOTI4OiJERVBUSF9SQU5HRSIsMjkyOToiREVQVEhfVEVTVCIsMjkzMDoiREVQVEhfV1JJVEVNQVNLIiwyOTMxOiJERVBUSF9DTEVBUl9WQUxVRSIsMjkzMjoiREVQVEhfRlVOQyIsMjk2MDoiU1RFTkNJTF9URVNUIiwyOTYxOiJTVEVOQ0lMX0NMRUFSX1ZBTFVFIiwyOTYyOiJTVEVOQ0lMX0ZVTkMiLDI5NjM6IlNURU5DSUxfVkFMVUVfTUFTSyIsMjk2NDoiU1RFTkNJTF9GQUlMIiwyOTY1OiJTVEVOQ0lMX1BBU1NfREVQVEhfRkFJTCIsMjk2NjoiU1RFTkNJTF9QQVNTX0RFUFRIX1BBU1MiLDI5Njc6IlNURU5DSUxfUkVGIiwyOTY4OiJTVEVOQ0lMX1dSSVRFTUFTSyIsMjk3ODoiVklFV1BPUlQiLDMwMjQ6IkRJVEhFUiIsMzA0MjoiQkxFTkQiLDMwODg6IlNDSVNTT1JfQk9YIiwzMDg5OiJTQ0lTU09SX1RFU1QiLDMxMDY6IkNPTE9SX0NMRUFSX1ZBTFVFIiwzMTA3OiJDT0xPUl9XUklURU1BU0siLDMzMTc6IlVOUEFDS19BTElHTk1FTlQiLDMzMzM6IlBBQ0tfQUxJR05NRU5UIiwzMzc5OiJNQVhfVEVYVFVSRV9TSVpFIiwzMzg2OiJNQVhfVklFV1BPUlRfRElNUyIsMzQwODoiU1VCUElYRUxfQklUUyIsMzQxMDoiUkVEX0JJVFMiLDM0MTE6IkdSRUVOX0JJVFMiLDM0MTI6IkJMVUVfQklUUyIsMzQxMzoiQUxQSEFfQklUUyIsMzQxNDoiREVQVEhfQklUUyIsMzQxNToiU1RFTkNJTF9CSVRTIiwzNTUzOiJURVhUVVJFXzJEIiw0MzUyOiJET05UX0NBUkUiLDQzNTM6IkZBU1RFU1QiLDQzNTQ6Ik5JQ0VTVCIsNTEyMDoiQllURSIsNTEyMToiVU5TSUdORURfQllURSIsNTEyMjoiU0hPUlQiLDUxMjM6IlVOU0lHTkVEX1NIT1JUIiw1MTI0OiJJTlQiLDUxMjU6IlVOU0lHTkVEX0lOVCIsNTEyNjoiRkxPQVQiLDUzODY6IklOVkVSVCIsNTg5MDoiVEVYVFVSRSIsNjQwMToiU1RFTkNJTF9JTkRFWCIsNjQwMjoiREVQVEhfQ09NUE9ORU5UIiw2NDA2OiJBTFBIQSIsNjQwNzoiUkdCIiw2NDA4OiJSR0JBIiw2NDA5OiJMVU1JTkFOQ0UiLDY0MTA6IkxVTUlOQU5DRV9BTFBIQSIsNzY4MDoiS0VFUCIsNzY4MToiUkVQTEFDRSIsNzY4MjoiSU5DUiIsNzY4MzoiREVDUiIsNzkzNjoiVkVORE9SIiw3OTM3OiJSRU5ERVJFUiIsNzkzODoiVkVSU0lPTiIsOTcyODoiTkVBUkVTVCIsOTcyOToiTElORUFSIiw5OTg0OiJORUFSRVNUX01JUE1BUF9ORUFSRVNUIiw5OTg1OiJMSU5FQVJfTUlQTUFQX05FQVJFU1QiLDk5ODY6Ik5FQVJFU1RfTUlQTUFQX0xJTkVBUiIsOTk4NzoiTElORUFSX01JUE1BUF9MSU5FQVIiLDEwMjQwOiJURVhUVVJFX01BR19GSUxURVIiLDEwMjQxOiJURVhUVVJFX01JTl9GSUxURVIiLDEwMjQyOiJURVhUVVJFX1dSQVBfUyIsMTAyNDM6IlRFWFRVUkVfV1JBUF9UIiwxMDQ5NzoiUkVQRUFUIiwxMDc1MjoiUE9MWUdPTl9PRkZTRVRfVU5JVFMiLDE2Mzg0OiJDT0xPUl9CVUZGRVJfQklUIiwzMjc2OToiQ09OU1RBTlRfQ09MT1IiLDMyNzcwOiJPTkVfTUlOVVNfQ09OU1RBTlRfQ09MT1IiLDMyNzcxOiJDT05TVEFOVF9BTFBIQSIsMzI3NzI6Ik9ORV9NSU5VU19DT05TVEFOVF9BTFBIQSIsMzI3NzM6IkJMRU5EX0NPTE9SIiwzMjc3NDoiRlVOQ19BREQiLDMyNzc3OiJCTEVORF9FUVVBVElPTl9SR0IiLDMyNzc4OiJGVU5DX1NVQlRSQUNUIiwzMjc3OToiRlVOQ19SRVZFUlNFX1NVQlRSQUNUIiwzMjgxOToiVU5TSUdORURfU0hPUlRfNF80XzRfNCIsMzI4MjA6IlVOU0lHTkVEX1NIT1JUXzVfNV81XzEiLDMyODIzOiJQT0xZR09OX09GRlNFVF9GSUxMIiwzMjgyNDoiUE9MWUdPTl9PRkZTRVRfRkFDVE9SIiwzMjg1NDoiUkdCQTQiLDMyODU1OiJSR0I1X0ExIiwzMjg3MzoiVEVYVFVSRV9CSU5ESU5HXzJEIiwzMjkyNjoiU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFIiwzMjkyODoiU0FNUExFX0NPVkVSQUdFIiwzMjkzNjoiU0FNUExFX0JVRkZFUlMiLDMyOTM3OiJTQU1QTEVTIiwzMjkzODoiU0FNUExFX0NPVkVSQUdFX1ZBTFVFIiwzMjkzOToiU0FNUExFX0NPVkVSQUdFX0lOVkVSVCIsMzI5Njg6IkJMRU5EX0RTVF9SR0IiLDMyOTY5OiJCTEVORF9TUkNfUkdCIiwzMjk3MDoiQkxFTkRfRFNUX0FMUEhBIiwzMjk3MToiQkxFTkRfU1JDX0FMUEhBIiwzMzA3MToiQ0xBTVBfVE9fRURHRSIsMzMxNzA6IkdFTkVSQVRFX01JUE1BUF9ISU5UIiwzMzE4OToiREVQVEhfQ09NUE9ORU5UMTYiLDMzMzA2OiJERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQiLDMzNjM1OiJVTlNJR05FRF9TSE9SVF81XzZfNSIsMzM2NDg6Ik1JUlJPUkVEX1JFUEVBVCIsMzM5MDE6IkFMSUFTRURfUE9JTlRfU0laRV9SQU5HRSIsMzM5MDI6IkFMSUFTRURfTElORV9XSURUSF9SQU5HRSIsMzM5ODQ6IlRFWFRVUkUwIiwzMzk4NToiVEVYVFVSRTEiLDMzOTg2OiJURVhUVVJFMiIsMzM5ODc6IlRFWFRVUkUzIiwzMzk4ODoiVEVYVFVSRTQiLDMzOTg5OiJURVhUVVJFNSIsMzM5OTA6IlRFWFRVUkU2IiwzMzk5MToiVEVYVFVSRTciLDMzOTkyOiJURVhUVVJFOCIsMzM5OTM6IlRFWFRVUkU5IiwzMzk5NDoiVEVYVFVSRTEwIiwzMzk5NToiVEVYVFVSRTExIiwzMzk5NjoiVEVYVFVSRTEyIiwzMzk5NzoiVEVYVFVSRTEzIiwzMzk5ODoiVEVYVFVSRTE0IiwzMzk5OToiVEVYVFVSRTE1IiwzNDAwMDoiVEVYVFVSRTE2IiwzNDAwMToiVEVYVFVSRTE3IiwzNDAwMjoiVEVYVFVSRTE4IiwzNDAwMzoiVEVYVFVSRTE5IiwzNDAwNDoiVEVYVFVSRTIwIiwzNDAwNToiVEVYVFVSRTIxIiwzNDAwNjoiVEVYVFVSRTIyIiwzNDAwNzoiVEVYVFVSRTIzIiwzNDAwODoiVEVYVFVSRTI0IiwzNDAwOToiVEVYVFVSRTI1IiwzNDAxMDoiVEVYVFVSRTI2IiwzNDAxMToiVEVYVFVSRTI3IiwzNDAxMjoiVEVYVFVSRTI4IiwzNDAxMzoiVEVYVFVSRTI5IiwzNDAxNDoiVEVYVFVSRTMwIiwzNDAxNToiVEVYVFVSRTMxIiwzNDAxNjoiQUNUSVZFX1RFWFRVUkUiLDM0MDI0OiJNQVhfUkVOREVSQlVGRkVSX1NJWkUiLDM0MDQxOiJERVBUSF9TVEVOQ0lMIiwzNDA1NToiSU5DUl9XUkFQIiwzNDA1NjoiREVDUl9XUkFQIiwzNDA2NzoiVEVYVFVSRV9DVUJFX01BUCIsMzQwNjg6IlRFWFRVUkVfQklORElOR19DVUJFX01BUCIsMzQwNjk6IlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCIsMzQwNzA6IlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWCIsMzQwNzE6IlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWSIsMzQwNzI6IlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWSIsMzQwNzM6IlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWiIsMzQwNzQ6IlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWiIsMzQwNzY6Ik1BWF9DVUJFX01BUF9URVhUVVJFX1NJWkUiLDM0MzM4OiJWRVJURVhfQVRUUklCX0FSUkFZX0VOQUJMRUQiLDM0MzM5OiJWRVJURVhfQVRUUklCX0FSUkFZX1NJWkUiLDM0MzQwOiJWRVJURVhfQVRUUklCX0FSUkFZX1NUUklERSIsMzQzNDE6IlZFUlRFWF9BVFRSSUJfQVJSQVlfVFlQRSIsMzQzNDI6IkNVUlJFTlRfVkVSVEVYX0FUVFJJQiIsMzQzNzM6IlZFUlRFWF9BVFRSSUJfQVJSQVlfUE9JTlRFUiIsMzQ0NjY6Ik5VTV9DT01QUkVTU0VEX1RFWFRVUkVfRk9STUFUUyIsMzQ0Njc6IkNPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTIiwzNDY2MDoiQlVGRkVSX1NJWkUiLDM0NjYxOiJCVUZGRVJfVVNBR0UiLDM0ODE2OiJTVEVOQ0lMX0JBQ0tfRlVOQyIsMzQ4MTc6IlNURU5DSUxfQkFDS19GQUlMIiwzNDgxODoiU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfRkFJTCIsMzQ4MTk6IlNURU5DSUxfQkFDS19QQVNTX0RFUFRIX1BBU1MiLDM0ODc3OiJCTEVORF9FUVVBVElPTl9BTFBIQSIsMzQ5MjE6Ik1BWF9WRVJURVhfQVRUUklCUyIsMzQ5MjI6IlZFUlRFWF9BVFRSSUJfQVJSQVlfTk9STUFMSVpFRCIsMzQ5MzA6Ik1BWF9URVhUVVJFX0lNQUdFX1VOSVRTIiwzNDk2MjoiQVJSQVlfQlVGRkVSIiwzNDk2MzoiRUxFTUVOVF9BUlJBWV9CVUZGRVIiLDM0OTY0OiJBUlJBWV9CVUZGRVJfQklORElORyIsMzQ5NjU6IkVMRU1FTlRfQVJSQVlfQlVGRkVSX0JJTkRJTkciLDM0OTc1OiJWRVJURVhfQVRUUklCX0FSUkFZX0JVRkZFUl9CSU5ESU5HIiwzNTA0MDoiU1RSRUFNX0RSQVciLDM1MDQ0OiJTVEFUSUNfRFJBVyIsMzUwNDg6IkRZTkFNSUNfRFJBVyIsMzU2MzI6IkZSQUdNRU5UX1NIQURFUiIsMzU2MzM6IlZFUlRFWF9TSEFERVIiLDM1NjYwOiJNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFMiLDM1NjYxOiJNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUyIsMzU2NjM6IlNIQURFUl9UWVBFIiwzNTY2NDoiRkxPQVRfVkVDMiIsMzU2NjU6IkZMT0FUX1ZFQzMiLDM1NjY2OiJGTE9BVF9WRUM0IiwzNTY2NzoiSU5UX1ZFQzIiLDM1NjY4OiJJTlRfVkVDMyIsMzU2Njk6IklOVF9WRUM0IiwzNTY3MDoiQk9PTCIsMzU2NzE6IkJPT0xfVkVDMiIsMzU2NzI6IkJPT0xfVkVDMyIsMzU2NzM6IkJPT0xfVkVDNCIsMzU2NzQ6IkZMT0FUX01BVDIiLDM1Njc1OiJGTE9BVF9NQVQzIiwzNTY3NjoiRkxPQVRfTUFUNCIsMzU2Nzg6IlNBTVBMRVJfMkQiLDM1NjgwOiJTQU1QTEVSX0NVQkUiLDM1NzEyOiJERUxFVEVfU1RBVFVTIiwzNTcxMzoiQ09NUElMRV9TVEFUVVMiLDM1NzE0OiJMSU5LX1NUQVRVUyIsMzU3MTU6IlZBTElEQVRFX1NUQVRVUyIsMzU3MTY6IklORk9fTE9HX0xFTkdUSCIsMzU3MTc6IkFUVEFDSEVEX1NIQURFUlMiLDM1NzE4OiJBQ1RJVkVfVU5JRk9STVMiLDM1NzE5OiJBQ1RJVkVfVU5JRk9STV9NQVhfTEVOR1RIIiwzNTcyMDoiU0hBREVSX1NPVVJDRV9MRU5HVEgiLDM1NzIxOiJBQ1RJVkVfQVRUUklCVVRFUyIsMzU3MjI6IkFDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdUSCIsMzU3MjQ6IlNIQURJTkdfTEFOR1VBR0VfVkVSU0lPTiIsMzU3MjU6IkNVUlJFTlRfUFJPR1JBTSIsMzYwMDM6IlNURU5DSUxfQkFDS19SRUYiLDM2MDA0OiJTVEVOQ0lMX0JBQ0tfVkFMVUVfTUFTSyIsMzYwMDU6IlNURU5DSUxfQkFDS19XUklURU1BU0siLDM2MDA2OiJGUkFNRUJVRkZFUl9CSU5ESU5HIiwzNjAwNzoiUkVOREVSQlVGRkVSX0JJTkRJTkciLDM2MDQ4OiJGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9UWVBFIiwzNjA0OToiRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfTkFNRSIsMzYwNTA6IkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9MRVZFTCIsMzYwNTE6IkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9DVUJFX01BUF9GQUNFIiwzNjA1MzoiRlJBTUVCVUZGRVJfQ09NUExFVEUiLDM2MDU0OiJGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQiLDM2MDU1OiJGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX01JU1NJTkdfQVRUQUNITUVOVCIsMzYwNTc6IkZSQU1FQlVGRkVSX0lOQ09NUExFVEVfRElNRU5TSU9OUyIsMzYwNjE6IkZSQU1FQlVGRkVSX1VOU1VQUE9SVEVEIiwzNjA2NDoiQ09MT1JfQVRUQUNITUVOVDAiLDM2MDk2OiJERVBUSF9BVFRBQ0hNRU5UIiwzNjEyODoiU1RFTkNJTF9BVFRBQ0hNRU5UIiwzNjE2MDoiRlJBTUVCVUZGRVIiLDM2MTYxOiJSRU5ERVJCVUZGRVIiLDM2MTYyOiJSRU5ERVJCVUZGRVJfV0lEVEgiLDM2MTYzOiJSRU5ERVJCVUZGRVJfSEVJR0hUIiwzNjE2NDoiUkVOREVSQlVGRkVSX0lOVEVSTkFMX0ZPUk1BVCIsMzYxNjg6IlNURU5DSUxfSU5ERVg4IiwzNjE3NjoiUkVOREVSQlVGRkVSX1JFRF9TSVpFIiwzNjE3NzoiUkVOREVSQlVGRkVSX0dSRUVOX1NJWkUiLDM2MTc4OiJSRU5ERVJCVUZGRVJfQkxVRV9TSVpFIiwzNjE3OToiUkVOREVSQlVGRkVSX0FMUEhBX1NJWkUiLDM2MTgwOiJSRU5ERVJCVUZGRVJfREVQVEhfU0laRSIsMzYxODE6IlJFTkRFUkJVRkZFUl9TVEVOQ0lMX1NJWkUiLDM2MTk0OiJSR0I1NjUiLDM2MzM2OiJMT1dfRkxPQVQiLDM2MzM3OiJNRURJVU1fRkxPQVQiLDM2MzM4OiJISUdIX0ZMT0FUIiwzNjMzOToiTE9XX0lOVCIsMzYzNDA6Ik1FRElVTV9JTlQiLDM2MzQxOiJISUdIX0lOVCIsMzYzNDY6IlNIQURFUl9DT01QSUxFUiIsMzYzNDc6Ik1BWF9WRVJURVhfVU5JRk9STV9WRUNUT1JTIiwzNjM0ODoiTUFYX1ZBUllJTkdfVkVDVE9SUyIsMzYzNDk6Ik1BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlMiLDM3NDQwOiJVTlBBQ0tfRkxJUF9ZX1dFQkdMIiwzNzQ0MToiVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMIiwzNzQ0MjoiQ09OVEVYVF9MT1NUX1dFQkdMIiwzNzQ0MzoiVU5QQUNLX0NPTE9SU1BBQ0VfQ09OVkVSU0lPTl9XRUJHTCIsMzc0NDQ6IkJST1dTRVJfREVGQVVMVF9XRUJHTCJ9fSx7fV0sMjM2OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi8xLjAvbnVtYmVycyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gblt0XX19LHsiLi8xLjAvbnVtYmVycyI6MjM1fV0sMjM3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmdsLHI9bihlKSxvPWkoZSxbe2J1ZmZlcjpyLHR5cGU6ZS5GTE9BVCxzaXplOjMsb2Zmc2V0OjAsc3RyaWRlOjQwfSx7YnVmZmVyOnIsdHlwZTplLkZMT0FULHNpemU6NCxvZmZzZXQ6MTIsc3RyaWRlOjQwfSx7YnVmZmVyOnIsdHlwZTplLkZMT0FULHNpemU6MyxvZmZzZXQ6Mjgsc3RyaWRlOjQwfV0pLGw9YShlKTtsLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCxsLmF0dHJpYnV0ZXMuY29sb3IubG9jYXRpb249MSxsLmF0dHJpYnV0ZXMub2Zmc2V0LmxvY2F0aW9uPTI7dmFyIGM9bmV3IHMoZSxyLG8sbCk7cmV0dXJuIGMudXBkYXRlKHQpLGN9O3ZhciBuPXQoImdsLWJ1ZmZlciIpLGk9dCgiZ2wtdmFvIiksYT10KCIuL3NoYWRlcnMvaW5kZXgiKSxvPVsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXTtmdW5jdGlvbiBzKHQsZSxyLG4pe3RoaXMuZ2w9dCx0aGlzLnNoYWRlcj1uLHRoaXMuYnVmZmVyPWUsdGhpcy52YW89cix0aGlzLnBpeGVsUmF0aW89MSx0aGlzLmJvdW5kcz1bWzEvMCwxLzAsMS8wXSxbLTEvMCwtMS8wLC0xLzBdXSx0aGlzLmNsaXBCb3VuZHM9W1stMS8wLC0xLzAsLTEvMF0sWzEvMCwxLzAsMS8wXV0sdGhpcy5saW5lV2lkdGg9WzEsMSwxXSx0aGlzLmNhcFNpemU9WzEwLDEwLDEwXSx0aGlzLmxpbmVDb3VudD1bMCwwLDBdLHRoaXMubGluZU9mZnNldD1bMCwwLDBdLHRoaXMub3BhY2l0eT0xfXZhciBsPXMucHJvdG90eXBlO2Z1bmN0aW9uIGModCxlKXtmb3IodmFyIHI9MDtyPDM7KytyKXRbMF1bcl09TWF0aC5taW4odFswXVtyXSxlW3JdKSx0WzFdW3JdPU1hdGgubWF4KHRbMV1bcl0sZVtyXSl9bC5pc09wYXF1ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9wYWNpdHk+PTF9LGwuaXNUcmFuc3BhcmVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9wYWNpdHk8MX0sbC5kcmF3VHJhbnNwYXJlbnQ9bC5kcmF3PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ2wscj10aGlzLnNoYWRlci51bmlmb3Jtczt0aGlzLnNoYWRlci5iaW5kKCk7dmFyIG49ci52aWV3PXQudmlld3x8byxpPXIucHJvamVjdGlvbj10LnByb2plY3Rpb258fG87ci5tb2RlbD10Lm1vZGVsfHxvLHIuY2xpcEJvdW5kcz10aGlzLmNsaXBCb3VuZHMsci5vcGFjaXR5PXRoaXMub3BhY2l0eTt2YXIgYT1uWzEyXSxzPW5bMTNdLGw9blsxNF0sYz1uWzE1XSx1PXRoaXMucGl4ZWxSYXRpbyooaVszXSphK2lbN10qcytpWzExXSpsK2lbMTVdKmMpL2UuZHJhd2luZ0J1ZmZlckhlaWdodDt0aGlzLnZhby5iaW5kKCk7Zm9yKHZhciBoPTA7aDwzOysraCllLmxpbmVXaWR0aCh0aGlzLmxpbmVXaWR0aFtoXSksci5jYXBTaXplPXRoaXMuY2FwU2l6ZVtoXSp1LHRoaXMubGluZUNvdW50W2hdJiZlLmRyYXdBcnJheXMoZS5MSU5FUyx0aGlzLmxpbmVPZmZzZXRbaF0sdGhpcy5saW5lQ291bnRbaF0pO3RoaXMudmFvLnVuYmluZCgpfTt2YXIgdT1mdW5jdGlvbigpe2Zvcih2YXIgdD1uZXcgQXJyYXkoMyksZT0wO2U8MzsrK2Upe2Zvcih2YXIgcj1bXSxuPTE7bjw9MjsrK24pZm9yKHZhciBpPS0xO2k8PTE7aSs9Mil7dmFyIGE9WzAsMCwwXTthWyhuK2UpJTNdPWksci5wdXNoKGEpfXRbZV09cn1yZXR1cm4gdH0oKTtmdW5jdGlvbiBoKHQsZSxyLG4pe2Zvcih2YXIgaT11W25dLGE9MDthPGkubGVuZ3RoOysrYSl7dmFyIG89aVthXTt0LnB1c2goZVswXSxlWzFdLGVbMl0sclswXSxyWzFdLHJbMl0sclszXSxvWzBdLG9bMV0sb1syXSl9cmV0dXJuIGkubGVuZ3RofWwudXBkYXRlPWZ1bmN0aW9uKHQpeyJsaW5lV2lkdGgiaW4odD10fHx7fSkmJih0aGlzLmxpbmVXaWR0aD10LmxpbmVXaWR0aCxBcnJheS5pc0FycmF5KHRoaXMubGluZVdpZHRoKXx8KHRoaXMubGluZVdpZHRoPVt0aGlzLmxpbmVXaWR0aCx0aGlzLmxpbmVXaWR0aCx0aGlzLmxpbmVXaWR0aF0pKSwiY2FwU2l6ZSJpbiB0JiYodGhpcy5jYXBTaXplPXQuY2FwU2l6ZSxBcnJheS5pc0FycmF5KHRoaXMuY2FwU2l6ZSl8fCh0aGlzLmNhcFNpemU9W3RoaXMuY2FwU2l6ZSx0aGlzLmNhcFNpemUsdGhpcy5jYXBTaXplXSkpLCJvcGFjaXR5ImluIHQmJih0aGlzLm9wYWNpdHk9dC5vcGFjaXR5KTt2YXIgZT10LmNvbG9yfHxbWzAsMCwwXSxbMCwwLDBdLFswLDAsMF1dLHI9dC5wb3NpdGlvbixuPXQuZXJyb3I7aWYoQXJyYXkuaXNBcnJheShlWzBdKXx8KGU9W2UsZSxlXSksciYmbil7dmFyIGk9W10sYT1yLmxlbmd0aCxvPTA7dGhpcy5ib3VuZHM9W1sxLzAsMS8wLDEvMF0sWy0xLzAsLTEvMCwtMS8wXV0sdGhpcy5saW5lQ291bnQ9WzAsMCwwXTtmb3IodmFyIHM9MDtzPDM7KytzKXt0aGlzLmxpbmVPZmZzZXRbc109bzt0OmZvcih2YXIgbD0wO2w8YTsrK2wpe2Zvcih2YXIgdT1yW2xdLGY9MDtmPDM7KytmKWlmKGlzTmFOKHVbZl0pfHwhaXNGaW5pdGUodVtmXSkpY29udGludWUgdDt2YXIgcD1uW2xdLGQ9ZVtzXTtpZihBcnJheS5pc0FycmF5KGRbMF0pJiYoZD1lW2xdKSwzPT09ZC5sZW5ndGgmJihkPVtkWzBdLGRbMV0sZFsyXSwxXSksIWlzTmFOKHBbMF1bc10pJiYhaXNOYU4ocFsxXVtzXSkpe3ZhciBnO2lmKHBbMF1bc108MCkoZz11LnNsaWNlKCkpW3NdKz1wWzBdW3NdLGkucHVzaCh1WzBdLHVbMV0sdVsyXSxkWzBdLGRbMV0sZFsyXSxkWzNdLDAsMCwwLGdbMF0sZ1sxXSxnWzJdLGRbMF0sZFsxXSxkWzJdLGRbM10sMCwwLDApLGModGhpcy5ib3VuZHMsZyksbys9MitoKGksZyxkLHMpO2lmKHBbMV1bc10+MCkoZz11LnNsaWNlKCkpW3NdKz1wWzFdW3NdLGkucHVzaCh1WzBdLHVbMV0sdVsyXSxkWzBdLGRbMV0sZFsyXSxkWzNdLDAsMCwwLGdbMF0sZ1sxXSxnWzJdLGRbMF0sZFsxXSxkWzJdLGRbM10sMCwwLDApLGModGhpcy5ib3VuZHMsZyksbys9MitoKGksZyxkLHMpfX10aGlzLmxpbmVDb3VudFtzXT1vLXRoaXMubGluZU9mZnNldFtzXX10aGlzLmJ1ZmZlci51cGRhdGUoaSl9fSxsLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnNoYWRlci5kaXNwb3NlKCksdGhpcy5idWZmZXIuZGlzcG9zZSgpLHRoaXMudmFvLmRpc3Bvc2UoKX19LHsiLi9zaGFkZXJzL2luZGV4IjoyMzgsImdsLWJ1ZmZlciI6MjMwLCJnbC12YW8iOjMwOH1dLDIzODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJnbHNsaWZ5IiksaT10KCJnbC1zaGFkZXIiKSxhPW4oWyJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uLCBvZmZzZXQ7XG5hdHRyaWJ1dGUgdmVjNCBjb2xvcjtcbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcbnVuaWZvcm0gZmxvYXQgY2FwU2l6ZTtcbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XG52YXJ5aW5nIHZlYzMgZnJhZ1Bvc2l0aW9uO1xuXG52b2lkIG1haW4oKSB7XG4gIHZlYzQgd29ybGRQb3NpdGlvbiAgPSBtb2RlbCAqIHZlYzQocG9zaXRpb24sIDEuMCk7XG4gIHdvcmxkUG9zaXRpb24gICAgICAgPSAod29ybGRQb3NpdGlvbiAvIHdvcmxkUG9zaXRpb24udykgKyB2ZWM0KGNhcFNpemUgKiBvZmZzZXQsIDAuMCk7XG4gIGdsX1Bvc2l0aW9uICAgICAgICAgPSBwcm9qZWN0aW9uICogdmlldyAqIHdvcmxkUG9zaXRpb247XG4gIGZyYWdDb2xvciAgICAgICAgICAgPSBjb2xvcjtcbiAgZnJhZ1Bvc2l0aW9uICAgICAgICA9IHBvc2l0aW9uO1xufSJdKSxvPW4oWyJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbnZhcnlpbmcgdmVjMyBmcmFnUG9zaXRpb247XG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gIGlmKGFueShsZXNzVGhhbihmcmFnUG9zaXRpb24sIGNsaXBCb3VuZHNbMF0pKSB8fCBhbnkoZ3JlYXRlclRoYW4oZnJhZ1Bvc2l0aW9uLCBjbGlwQm91bmRzWzFdKSkpIHtcbiAgICBkaXNjYXJkO1xuICB9XG4gIGdsX0ZyYWdDb2xvciA9IG9wYWNpdHkgKiBmcmFnQ29sb3I7XG59Il0pO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaSh0LGEsbyxudWxsLFt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzMifSx7bmFtZToiY29sb3IiLHR5cGU6InZlYzQifSx7bmFtZToib2Zmc2V0Iix0eXBlOiJ2ZWMzIn1dKX19LHsiZ2wtc2hhZGVyIjoyODcsZ2xzbGlmeTozNzd9XSwyMzk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZ2wtdGV4dHVyZTJkIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe2l8fChpPXQuRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQsYT10LkZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVCxvPXQuRlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1FTlNJT05TLHM9dC5GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX01JU1NJTkdfQVRUQUNITUVOVCk7dmFyIGM9dC5nZXRFeHRlbnNpb24oIldFQkdMX2RyYXdfYnVmZmVycyIpOyFsJiZjJiZmdW5jdGlvbih0LGUpe3ZhciByPXQuZ2V0UGFyYW1ldGVyKGUuTUFYX0NPTE9SX0FUVEFDSE1FTlRTX1dFQkdMKTtsPW5ldyBBcnJheShyKzEpO2Zvcih2YXIgbj0wO248PXI7KytuKXtmb3IodmFyIGk9bmV3IEFycmF5KHIpLGE9MDthPG47KythKWlbYV09dC5DT0xPUl9BVFRBQ0hNRU5UMCthO2Zvcih2YXIgYT1uO2E8cjsrK2EpaVthXT10Lk5PTkU7bFtuXT1pfX0odCxjKTtBcnJheS5pc0FycmF5KGUpJiYobj1yLHI9MHxlWzFdLGU9MHxlWzBdKTtpZigibnVtYmVyIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yKCJnbC1mYm86IE1pc3Npbmcgc2hhcGUgcGFyYW1ldGVyIik7dmFyIHU9dC5nZXRQYXJhbWV0ZXIodC5NQVhfUkVOREVSQlVGRkVSX1NJWkUpO2lmKGU8MHx8ZT51fHxyPDB8fHI+dSl0aHJvdyBuZXcgRXJyb3IoImdsLWZibzogUGFyYW1ldGVycyBhcmUgdG9vIGxhcmdlIGZvciBGQk8iKTt2YXIgaD0xO2lmKCJjb2xvciJpbihuPW58fHt9KSl7aWYoKGg9TWF0aC5tYXgoMHxuLmNvbG9yLDApKTwwKXRocm93IG5ldyBFcnJvcigiZ2wtZmJvOiBNdXN0IHNwZWNpZnkgYSBub25uZWdhdGl2ZSBudW1iZXIgb2YgY29sb3JzIik7aWYoaD4xKXtpZighYyl0aHJvdyBuZXcgRXJyb3IoImdsLWZibzogTXVsdGlwbGUgZHJhdyBidWZmZXIgZXh0ZW5zaW9uIG5vdCBzdXBwb3J0ZWQiKTtpZihoPnQuZ2V0UGFyYW1ldGVyKGMuTUFYX0NPTE9SX0FUVEFDSE1FTlRTX1dFQkdMKSl0aHJvdyBuZXcgRXJyb3IoImdsLWZibzogQ29udGV4dCBkb2VzIG5vdCBzdXBwb3J0ICIraCsiIGRyYXcgYnVmZmVycyIpfX12YXIgZj10LlVOU0lHTkVEX0JZVEUscD10LmdldEV4dGVuc2lvbigiT0VTX3RleHR1cmVfZmxvYXQiKTtpZihuLmZsb2F0JiZoPjApe2lmKCFwKXRocm93IG5ldyBFcnJvcigiZ2wtZmJvOiBDb250ZXh0IGRvZXMgbm90IHN1cHBvcnQgZmxvYXRpbmcgcG9pbnQgdGV4dHVyZXMiKTtmPXQuRkxPQVR9ZWxzZSBuLnByZWZlckZsb2F0JiZoPjAmJnAmJihmPXQuRkxPQVQpO3ZhciBnPSEwOyJkZXB0aCJpbiBuJiYoZz0hIW4uZGVwdGgpO3ZhciBtPSExOyJzdGVuY2lsImluIG4mJihtPSEhbi5zdGVuY2lsKTtyZXR1cm4gbmV3IGQodCxlLHIsZixoLGcsbSxjKX07dmFyIGksYSxvLHMsbD1udWxsO2Z1bmN0aW9uIGModCl7cmV0dXJuW3QuZ2V0UGFyYW1ldGVyKHQuRlJBTUVCVUZGRVJfQklORElORyksdC5nZXRQYXJhbWV0ZXIodC5SRU5ERVJCVUZGRVJfQklORElORyksdC5nZXRQYXJhbWV0ZXIodC5URVhUVVJFX0JJTkRJTkdfMkQpXX1mdW5jdGlvbiB1KHQsZSl7dC5iaW5kRnJhbWVidWZmZXIodC5GUkFNRUJVRkZFUixlWzBdKSx0LmJpbmRSZW5kZXJidWZmZXIodC5SRU5ERVJCVUZGRVIsZVsxXSksdC5iaW5kVGV4dHVyZSh0LlRFWFRVUkVfMkQsZVsyXSl9ZnVuY3Rpb24gaCh0KXtzd2l0Y2godCl7Y2FzZSBpOnRocm93IG5ldyBFcnJvcigiZ2wtZmJvOiBGcmFtZWJ1ZmZlciB1bnN1cHBvcnRlZCIpO2Nhc2UgYTp0aHJvdyBuZXcgRXJyb3IoImdsLWZibzogRnJhbWVidWZmZXIgaW5jb21wbGV0ZSBhdHRhY2htZW50Iik7Y2FzZSBvOnRocm93IG5ldyBFcnJvcigiZ2wtZmJvOiBGcmFtZWJ1ZmZlciBpbmNvbXBsZXRlIGRpbWVuc2lvbnMiKTtjYXNlIHM6dGhyb3cgbmV3IEVycm9yKCJnbC1mYm86IEZyYW1lYnVmZmVyIGluY29tcGxldGUgbWlzc2luZyBhdHRhY2htZW50Iik7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImdsLWZibzogRnJhbWVidWZmZXIgZmFpbGVkIGZvciB1bnNwZWNpZmllZCByZWFzb24iKX19ZnVuY3Rpb24gZih0LGUscixpLGEsbyl7aWYoIWkpcmV0dXJuIG51bGw7dmFyIHM9bih0LGUscixhLGkpO3JldHVybiBzLm1hZ0ZpbHRlcj10Lk5FQVJFU1Qscy5taW5GaWx0ZXI9dC5ORUFSRVNULHMubWlwU2FtcGxlcz0xLHMuYmluZCgpLHQuZnJhbWVidWZmZXJUZXh0dXJlMkQodC5GUkFNRUJVRkZFUixvLHQuVEVYVFVSRV8yRCxzLmhhbmRsZSwwKSxzfWZ1bmN0aW9uIHAodCxlLHIsbixpKXt2YXIgYT10LmNyZWF0ZVJlbmRlcmJ1ZmZlcigpO3JldHVybiB0LmJpbmRSZW5kZXJidWZmZXIodC5SRU5ERVJCVUZGRVIsYSksdC5yZW5kZXJidWZmZXJTdG9yYWdlKHQuUkVOREVSQlVGRkVSLG4sZSxyKSx0LmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHQuRlJBTUVCVUZGRVIsaSx0LlJFTkRFUkJVRkZFUixhKSxhfWZ1bmN0aW9uIGQodCxlLHIsbixpLGEsbyxzKXt0aGlzLmdsPXQsdGhpcy5fc2hhcGU9WzB8ZSwwfHJdLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9leHQ9cyx0aGlzLmNvbG9yPW5ldyBBcnJheShpKTtmb3IodmFyIGQ9MDtkPGk7KytkKXRoaXMuY29sb3JbZF09bnVsbDt0aGlzLl9jb2xvcl9yYj1udWxsLHRoaXMuZGVwdGg9bnVsbCx0aGlzLl9kZXB0aF9yYj1udWxsLHRoaXMuX2NvbG9yVHlwZT1uLHRoaXMuX3VzZURlcHRoPWEsdGhpcy5fdXNlU3RlbmNpbD1vO3ZhciBnPXRoaXMsbT1bMHxlLDB8cl07T2JqZWN0LmRlZmluZVByb3BlcnRpZXMobSx7MDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcuX3NoYXBlWzBdfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGcud2lkdGg9dH19LDE6e2dldDpmdW5jdGlvbigpe3JldHVybiBnLl9zaGFwZVsxXX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBnLmhlaWdodD10fX19KSx0aGlzLl9zaGFwZVZlY3Rvcj1tLGZ1bmN0aW9uKHQpe3ZhciBlPWModC5nbCkscj10LmdsLG49dC5oYW5kbGU9ci5jcmVhdGVGcmFtZWJ1ZmZlcigpLGk9dC5fc2hhcGVbMF0sYT10Ll9zaGFwZVsxXSxvPXQuY29sb3IubGVuZ3RoLHM9dC5fZXh0LGQ9dC5fdXNlU3RlbmNpbCxnPXQuX3VzZURlcHRoLG09dC5fY29sb3JUeXBlO3IuYmluZEZyYW1lYnVmZmVyKHIuRlJBTUVCVUZGRVIsbik7Zm9yKHZhciB2PTA7djxvOysrdil0LmNvbG9yW3ZdPWYocixpLGEsbSxyLlJHQkEsci5DT0xPUl9BVFRBQ0hNRU5UMCt2KTswPT09bz8odC5fY29sb3JfcmI9cChyLGksYSxyLlJHQkE0LHIuQ09MT1JfQVRUQUNITUVOVDApLHMmJnMuZHJhd0J1ZmZlcnNXRUJHTChsWzBdKSk6bz4xJiZzLmRyYXdCdWZmZXJzV0VCR0wobFtvXSk7dmFyIHk9ci5nZXRFeHRlbnNpb24oIldFQkdMX2RlcHRoX3RleHR1cmUiKTt5P2Q/dC5kZXB0aD1mKHIsaSxhLHkuVU5TSUdORURfSU5UXzI0XzhfV0VCR0wsci5ERVBUSF9TVEVOQ0lMLHIuREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UKTpnJiYodC5kZXB0aD1mKHIsaSxhLHIuVU5TSUdORURfU0hPUlQsci5ERVBUSF9DT01QT05FTlQsci5ERVBUSF9BVFRBQ0hNRU5UKSk6ZyYmZD90Ll9kZXB0aF9yYj1wKHIsaSxhLHIuREVQVEhfU1RFTkNJTCxyLkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVCk6Zz90Ll9kZXB0aF9yYj1wKHIsaSxhLHIuREVQVEhfQ09NUE9ORU5UMTYsci5ERVBUSF9BVFRBQ0hNRU5UKTpkJiYodC5fZGVwdGhfcmI9cChyLGksYSxyLlNURU5DSUxfSU5ERVgsci5TVEVOQ0lMX0FUVEFDSE1FTlQpKTt2YXIgeD1yLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoci5GUkFNRUJVRkZFUik7aWYoeCE9PXIuRlJBTUVCVUZGRVJfQ09NUExFVEUpe2Zvcih0Ll9kZXN0cm95ZWQ9ITAsci5iaW5kRnJhbWVidWZmZXIoci5GUkFNRUJVRkZFUixudWxsKSxyLmRlbGV0ZUZyYW1lYnVmZmVyKHQuaGFuZGxlKSx0LmhhbmRsZT1udWxsLHQuZGVwdGgmJih0LmRlcHRoLmRpc3Bvc2UoKSx0LmRlcHRoPW51bGwpLHQuX2RlcHRoX3JiJiYoci5kZWxldGVSZW5kZXJidWZmZXIodC5fZGVwdGhfcmIpLHQuX2RlcHRoX3JiPW51bGwpLHY9MDt2PHQuY29sb3IubGVuZ3RoOysrdil0LmNvbG9yW3ZdLmRpc3Bvc2UoKSx0LmNvbG9yW3ZdPW51bGw7dC5fY29sb3JfcmImJihyLmRlbGV0ZVJlbmRlcmJ1ZmZlcih0Ll9jb2xvcl9yYiksdC5fY29sb3JfcmI9bnVsbCksdShyLGUpLGgoeCl9dShyLGUpfSh0aGlzKX12YXIgZz1kLnByb3RvdHlwZTtmdW5jdGlvbiBtKHQsZSxyKXtpZih0Ll9kZXN0cm95ZWQpdGhyb3cgbmV3IEVycm9yKCJnbC1mYm86IENhbid0IHJlc2l6ZSBkZXN0cm95ZWQgRkJPIik7aWYodC5fc2hhcGVbMF0hPT1lfHx0Ll9zaGFwZVsxXSE9PXIpe3ZhciBuPXQuZ2wsaT1uLmdldFBhcmFtZXRlcihuLk1BWF9SRU5ERVJCVUZGRVJfU0laRSk7aWYoZTwwfHxlPml8fHI8MHx8cj5pKXRocm93IG5ldyBFcnJvcigiZ2wtZmJvOiBDYW4ndCByZXNpemUgRkJPLCBpbnZhbGlkIGRpbWVuc2lvbnMiKTt0Ll9zaGFwZVswXT1lLHQuX3NoYXBlWzFdPXI7Zm9yKHZhciBhPWMobiksbz0wO288dC5jb2xvci5sZW5ndGg7KytvKXQuY29sb3Jbb10uc2hhcGU9dC5fc2hhcGU7dC5fY29sb3JfcmImJihuLmJpbmRSZW5kZXJidWZmZXIobi5SRU5ERVJCVUZGRVIsdC5fY29sb3JfcmIpLG4ucmVuZGVyYnVmZmVyU3RvcmFnZShuLlJFTkRFUkJVRkZFUixuLlJHQkE0LHQuX3NoYXBlWzBdLHQuX3NoYXBlWzFdKSksdC5kZXB0aCYmKHQuZGVwdGguc2hhcGU9dC5fc2hhcGUpLHQuX2RlcHRoX3JiJiYobi5iaW5kUmVuZGVyYnVmZmVyKG4uUkVOREVSQlVGRkVSLHQuX2RlcHRoX3JiKSx0Ll91c2VEZXB0aCYmdC5fdXNlU3RlbmNpbD9uLnJlbmRlcmJ1ZmZlclN0b3JhZ2Uobi5SRU5ERVJCVUZGRVIsbi5ERVBUSF9TVEVOQ0lMLHQuX3NoYXBlWzBdLHQuX3NoYXBlWzFdKTp0Ll91c2VEZXB0aD9uLnJlbmRlcmJ1ZmZlclN0b3JhZ2Uobi5SRU5ERVJCVUZGRVIsbi5ERVBUSF9DT01QT05FTlQxNix0Ll9zaGFwZVswXSx0Ll9zaGFwZVsxXSk6dC5fdXNlU3RlbmNpbCYmbi5yZW5kZXJidWZmZXJTdG9yYWdlKG4uUkVOREVSQlVGRkVSLG4uU1RFTkNJTF9JTkRFWCx0Ll9zaGFwZVswXSx0Ll9zaGFwZVsxXSkpLG4uYmluZEZyYW1lYnVmZmVyKG4uRlJBTUVCVUZGRVIsdC5oYW5kbGUpO3ZhciBzPW4uY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhuLkZSQU1FQlVGRkVSKTtzIT09bi5GUkFNRUJVRkZFUl9DT01QTEVURSYmKHQuZGlzcG9zZSgpLHUobixhKSxoKHMpKSx1KG4sYSl9fU9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGcse3NoYXBlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVzdHJveWVkP1swLDBdOnRoaXMuX3NoYXBlVmVjdG9yfSxzZXQ6ZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KXx8KHQ9WzB8dCwwfHRdKSwyIT09dC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJnbC1mYm86IFNoYXBlIHZlY3RvciBtdXN0IGJlIGxlbmd0aCAyIik7dmFyIGU9MHx0WzBdLHI9MHx0WzFdO3JldHVybiBtKHRoaXMsZSxyKSxbZSxyXX0sZW51bWVyYWJsZTohMX0sd2lkdGg6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZXN0cm95ZWQ/MDp0aGlzLl9zaGFwZVswXX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBtKHRoaXMsdHw9MCx0aGlzLl9zaGFwZVsxXSksdH0sZW51bWVyYWJsZTohMX0saGVpZ2h0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVzdHJveWVkPzA6dGhpcy5fc2hhcGVbMV19LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gdHw9MCxtKHRoaXMsdGhpcy5fc2hhcGVbMF0sdCksdH0sZW51bWVyYWJsZTohMX19KSxnLmJpbmQ9ZnVuY3Rpb24oKXtpZighdGhpcy5fZGVzdHJveWVkKXt2YXIgdD10aGlzLmdsO3QuYmluZEZyYW1lYnVmZmVyKHQuRlJBTUVCVUZGRVIsdGhpcy5oYW5kbGUpLHQudmlld3BvcnQoMCwwLHRoaXMuX3NoYXBlWzBdLHRoaXMuX3NoYXBlWzFdKX19LGcuZGlzcG9zZT1mdW5jdGlvbigpe2lmKCF0aGlzLl9kZXN0cm95ZWQpe3RoaXMuX2Rlc3Ryb3llZD0hMDt2YXIgdD10aGlzLmdsO3QuZGVsZXRlRnJhbWVidWZmZXIodGhpcy5oYW5kbGUpLHRoaXMuaGFuZGxlPW51bGwsdGhpcy5kZXB0aCYmKHRoaXMuZGVwdGguZGlzcG9zZSgpLHRoaXMuZGVwdGg9bnVsbCksdGhpcy5fZGVwdGhfcmImJih0LmRlbGV0ZVJlbmRlcmJ1ZmZlcih0aGlzLl9kZXB0aF9yYiksdGhpcy5fZGVwdGhfcmI9bnVsbCk7Zm9yKHZhciBlPTA7ZTx0aGlzLmNvbG9yLmxlbmd0aDsrK2UpdGhpcy5jb2xvcltlXS5kaXNwb3NlKCksdGhpcy5jb2xvcltlXT1udWxsO3RoaXMuX2NvbG9yX3JiJiYodC5kZWxldGVSZW5kZXJidWZmZXIodGhpcy5fY29sb3JfcmIpLHRoaXMuX2NvbG9yX3JiPW51bGwpfX19LHsiZ2wtdGV4dHVyZTJkIjozMDN9XSwyNDA6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCJzcHJpbnRmLWpzIikuc3ByaW50ZixpPXQoImdsLWNvbnN0YW50cy9sb29rdXAiKSxhPXQoImdsc2wtc2hhZGVyLW5hbWUiKSxvPXQoImFkZC1saW5lLW51bWJlcnMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgcz1hKGUpfHwib2YgdW5rbm93biBuYW1lIChzZWUgbnBtIGdsc2wtc2hhZGVyLW5hbWUpIixsPSJ1bmtub3duIHR5cGUiO3ZvaWQgMCE9PXImJihsPXI9PT1pLkZSQUdNRU5UX1NIQURFUj8iZnJhZ21lbnQiOiJ2ZXJ0ZXgiKTtmb3IodmFyIGM9bigiRXJyb3IgY29tcGlsaW5nICVzIHNoYWRlciAlczpcbiIsbCxzKSx1PW4oIiVzJXMiLGMsdCksaD10LnNwbGl0KCJcbiIpLGY9e30scD0wO3A8aC5sZW5ndGg7cCsrKXt2YXIgZD1oW3BdO2lmKCIiIT09ZCYmIlwwIiE9PWQpe3ZhciBnPXBhcnNlSW50KGQuc3BsaXQoIjoiKVsyXSk7aWYoaXNOYU4oZykpdGhyb3cgbmV3IEVycm9yKG4oIkNvdWxkIG5vdCBwYXJzZSBlcnJvcjogJXMiLGQpKTtmW2ddPWR9fWZvcih2YXIgbT1vKGUpLnNwbGl0KCJcbiIpLHA9MDtwPG0ubGVuZ3RoO3ArKylpZihmW3ArM118fGZbcCsyXXx8ZltwKzFdKXt2YXIgdj1tW3BdO2lmKGMrPXYrIlxuIixmW3ArMV0pe3ZhciB5PWZbcCsxXTt5PXkuc3Vic3RyKHkuc3BsaXQoIjoiLDMpLmpvaW4oIjoiKS5sZW5ndGgrMSkudHJpbSgpLGMrPW4oIl5eXiAlc1xuXG4iLHkpfX1yZXR1cm57bG9uZzpjLnRyaW0oKSxzaG9ydDp1LnRyaW0oKX19fSx7ImFkZC1saW5lLW51bWJlcnMiOjUyLCJnbC1jb25zdGFudHMvbG9va3VwIjoyMzYsImdsc2wtc2hhZGVyLW5hbWUiOjM2OSwic3ByaW50Zi1qcyI6NDg5fV0sMjQxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuZ2wsbj1vKHIsbC52ZXJ0ZXgsbC5mcmFnbWVudCksaT1vKHIsbC5waWNrVmVydGV4LGwucGlja0ZyYWdtZW50KSxhPXMociksdT1zKHIpLGg9cyhyKSxmPXMocikscD1uZXcgYyh0LG4saSxhLHUsaCxmKTtyZXR1cm4gcC51cGRhdGUoZSksdC5hZGRPYmplY3QocCkscH07dmFyIG49dCgiYmluYXJ5LXNlYXJjaC1ib3VuZHMiKSxpPXQoImlvdGEtYXJyYXkiKSxhPXQoInR5cGVkYXJyYXktcG9vbCIpLG89dCgiZ2wtc2hhZGVyIikscz10KCJnbC1idWZmZXIiKSxsPXQoIi4vbGliL3NoYWRlcnMiKTtmdW5jdGlvbiBjKHQsZSxyLG4saSxhLG8pe3RoaXMucGxvdD10LHRoaXMuc2hhZGVyPWUsdGhpcy5waWNrU2hhZGVyPXIsdGhpcy5wb3NpdGlvbkJ1ZmZlcj1uLHRoaXMud2VpZ2h0QnVmZmVyPWksdGhpcy5jb2xvckJ1ZmZlcj1hLHRoaXMuaWRCdWZmZXI9byx0aGlzLnhEYXRhPVtdLHRoaXMueURhdGE9W10sdGhpcy5zaGFwZT1bMCwwXSx0aGlzLmJvdW5kcz1bMS8wLDEvMCwtMS8wLC0xLzBdLHRoaXMucGlja09mZnNldD0wfXZhciB1LGg9Yy5wcm90b3R5cGUsZj1bMCwwLDEsMCwwLDEsMSwwLDEsMSwwLDFdO2guZHJhdz0odT1bMSwwLDAsMCwxLDAsMCwwLDFdLGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wbG90LGU9dGhpcy5zaGFkZXIscj10aGlzLmJvdW5kcyxuPXRoaXMubnVtVmVydGljZXM7aWYoIShuPD0wKSl7dmFyIGk9dC5nbCxhPXQuZGF0YUJveCxvPXJbMl0tclswXSxzPXJbM10tclsxXSxsPWFbMl0tYVswXSxjPWFbM10tYVsxXTt1WzBdPTIqby9sLHVbNF09MipzL2MsdVs2XT0yKihyWzBdLWFbMF0pL2wtMSx1WzddPTIqKHJbMV0tYVsxXSkvYy0xLGUuYmluZCgpO3ZhciBoPWUudW5pZm9ybXM7aC52aWV3VHJhbnNmb3JtPXUsaC5zaGFwZT10aGlzLnNoYXBlO3ZhciBmPWUuYXR0cmlidXRlczt0aGlzLnBvc2l0aW9uQnVmZmVyLmJpbmQoKSxmLnBvc2l0aW9uLnBvaW50ZXIoKSx0aGlzLndlaWdodEJ1ZmZlci5iaW5kKCksZi53ZWlnaHQucG9pbnRlcihpLlVOU0lHTkVEX0JZVEUsITEpLHRoaXMuY29sb3JCdWZmZXIuYmluZCgpLGYuY29sb3IucG9pbnRlcihpLlVOU0lHTkVEX0JZVEUsITApLGkuZHJhd0FycmF5cyhpLlRSSUFOR0xFUywwLG4pfX0pLGguZHJhd1BpY2s9ZnVuY3Rpb24oKXt2YXIgdD1bMSwwLDAsMCwxLDAsMCwwLDFdLGU9WzAsMCwwLDBdO3JldHVybiBmdW5jdGlvbihyKXt2YXIgbj10aGlzLnBsb3QsaT10aGlzLnBpY2tTaGFkZXIsYT10aGlzLmJvdW5kcyxvPXRoaXMubnVtVmVydGljZXM7aWYoIShvPD0wKSl7dmFyIHM9bi5nbCxsPW4uZGF0YUJveCxjPWFbMl0tYVswXSx1PWFbM10tYVsxXSxoPWxbMl0tbFswXSxmPWxbM10tbFsxXTt0WzBdPTIqYy9oLHRbNF09Mip1L2YsdFs2XT0yKihhWzBdLWxbMF0pL2gtMSx0WzddPTIqKGFbMV0tbFsxXSkvZi0xO2Zvcih2YXIgcD0wO3A8NDsrK3ApZVtwXT1yPj44KnAmMjU1O3RoaXMucGlja09mZnNldD1yLGkuYmluZCgpO3ZhciBkPWkudW5pZm9ybXM7ZC52aWV3VHJhbnNmb3JtPXQsZC5waWNrT2Zmc2V0PWUsZC5zaGFwZT10aGlzLnNoYXBlO3ZhciBnPWkuYXR0cmlidXRlcztyZXR1cm4gdGhpcy5wb3NpdGlvbkJ1ZmZlci5iaW5kKCksZy5wb3NpdGlvbi5wb2ludGVyKCksdGhpcy53ZWlnaHRCdWZmZXIuYmluZCgpLGcud2VpZ2h0LnBvaW50ZXIocy5VTlNJR05FRF9CWVRFLCExKSx0aGlzLmlkQnVmZmVyLmJpbmQoKSxnLnBpY2tJZC5wb2ludGVyKHMuVU5TSUdORURfQllURSwhMSkscy5kcmF3QXJyYXlzKHMuVFJJQU5HTEVTLDAsbykscit0aGlzLnNoYXBlWzBdKnRoaXMuc2hhcGVbMV19fX0oKSxoLnBpY2s9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMucGlja09mZnNldCxpPXRoaXMuc2hhcGVbMF0qdGhpcy5zaGFwZVsxXTtpZihyPG58fHI+PW4raSlyZXR1cm4gbnVsbDt2YXIgYT1yLW4sbz10aGlzLnhEYXRhLHM9dGhpcy55RGF0YTtyZXR1cm57b2JqZWN0OnRoaXMscG9pbnRJZDphLGRhdGFDb29yZDpbb1thJXRoaXMuc2hhcGVbMF1dLHNbYS90aGlzLnNoYXBlWzBdfDBdXX19LGgudXBkYXRlPWZ1bmN0aW9uKHQpe3ZhciBlPSh0PXR8fHt9KS5zaGFwZXx8WzAsMF0scj10Lnh8fGkoZVswXSksbz10Lnl8fGkoZVsxXSkscz10Lnp8fG5ldyBGbG9hdDMyQXJyYXkoZVswXSplWzFdKTt0aGlzLnhEYXRhPXIsdGhpcy55RGF0YT1vO3ZhciBsPXQuY29sb3JMZXZlbHN8fFswXSxjPXQuY29sb3JWYWx1ZXN8fFswLDAsMCwxXSx1PWwubGVuZ3RoLGg9dGhpcy5ib3VuZHMscD1oWzBdPXJbMF0sZD1oWzFdPW9bMF0sZz0xLygoaFsyXT1yW3IubGVuZ3RoLTFdKS1wKSxtPTEvKChoWzNdPW9bby5sZW5ndGgtMV0pLWQpLHY9ZVswXSx5PWVbMV07dGhpcy5zaGFwZT1bdix5XTt2YXIgeD0odi0xKSooeS0xKSooZi5sZW5ndGg+Pj4xKTt0aGlzLm51bVZlcnRpY2VzPXg7Zm9yKHZhciBiPWEubWFsbG9jVWludDgoNCp4KSxfPWEubWFsbG9jRmxvYXQzMigyKngpLHc9YS5tYWxsb2NVaW50OCgyKngpLGs9YS5tYWxsb2NVaW50MzIoeCksTT0wLEE9MDtBPHktMTsrK0EpZm9yKHZhciBUPW0qKG9bQV0tZCksUz1tKihvW0ErMV0tZCksRT0wO0U8di0xOysrRSlmb3IodmFyIEM9ZyoocltFXS1wKSxMPWcqKHJbRSsxXS1wKSx6PTA7ejxmLmxlbmd0aDt6Kz0yKXt2YXIgUCxJLE8sRCxSPWZbel0sQj1mW3orMV0sRj1zWyhBK0IpKnYrKEUrUildLE49bi5sZShsLEYpO2lmKE48MClQPWNbMF0sST1jWzFdLE89Y1syXSxEPWNbM107ZWxzZSBpZihOPT09dS0xKVA9Y1s0KnUtNF0sST1jWzQqdS0zXSxPPWNbNCp1LTJdLEQ9Y1s0KnUtMV07ZWxzZXt2YXIgaj0oRi1sW05dKS8obFtOKzFdLWxbTl0pLFY9MS1qLFU9NCpOLHE9NCooTisxKTtQPVYqY1tVXStqKmNbcV0sST1WKmNbVSsxXStqKmNbcSsxXSxPPVYqY1tVKzJdK2oqY1txKzJdLEQ9VipjW1UrM10raipjW3ErM119Yls0Kk1dPTI1NSpQLGJbNCpNKzFdPTI1NSpJLGJbNCpNKzJdPTI1NSpPLGJbNCpNKzNdPTI1NSpELF9bMipNXT0uNSpDKy41KkwsX1syKk0rMV09LjUqVCsuNSpTLHdbMipNXT1SLHdbMipNKzFdPUIsa1tNXT1BKnYrRSxNKz0xfXRoaXMucG9zaXRpb25CdWZmZXIudXBkYXRlKF8pLHRoaXMud2VpZ2h0QnVmZmVyLnVwZGF0ZSh3KSx0aGlzLmNvbG9yQnVmZmVyLnVwZGF0ZShiKSx0aGlzLmlkQnVmZmVyLnVwZGF0ZShrKSxhLmZyZWUoXyksYS5mcmVlKGIpLGEuZnJlZSh3KSxhLmZyZWUoayl9LGguZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuc2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnBpY2tTaGFkZXIuZGlzcG9zZSgpLHRoaXMucG9zaXRpb25CdWZmZXIuZGlzcG9zZSgpLHRoaXMud2VpZ2h0QnVmZmVyLmRpc3Bvc2UoKSx0aGlzLmNvbG9yQnVmZmVyLmRpc3Bvc2UoKSx0aGlzLmlkQnVmZmVyLmRpc3Bvc2UoKSx0aGlzLnBsb3QucmVtb3ZlT2JqZWN0KHRoaXMpfX0seyIuL2xpYi9zaGFkZXJzIjoyNDIsImJpbmFyeS1zZWFyY2gtYm91bmRzIjoyNDMsImdsLWJ1ZmZlciI6MjMwLCJnbC1zaGFkZXIiOjI4NywiaW90YS1hcnJheSI6Mzg0LCJ0eXBlZGFycmF5LXBvb2wiOjUwN31dLDI0MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJnbHNsaWZ5Iik7ZS5leHBvcnRzPXtmcmFnbWVudDpuKFsicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcbnZvaWQgbWFpbigpIHtcbiAgZ2xfRnJhZ0NvbG9yID0gdmVjNChmcmFnQ29sb3IucmdiICogZnJhZ0NvbG9yLmEsIGZyYWdDb2xvci5hKTtcbn1cbiJdKSx2ZXJ0ZXg6bihbInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzIgcG9zaXRpb247XG5hdHRyaWJ1dGUgdmVjNCBjb2xvcjtcbmF0dHJpYnV0ZSB2ZWMyIHdlaWdodDtcblxudW5pZm9ybSB2ZWMyIHNoYXBlO1xudW5pZm9ybSBtYXQzIHZpZXdUcmFuc2Zvcm07XG5cbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjMyB2UG9zaXRpb24gPSB2aWV3VHJhbnNmb3JtICogdmVjMyggcG9zaXRpb24gKyAod2VpZ2h0LS41KS8oc2hhcGUtMS4pICwgMS4wKTtcbiAgZnJhZ0NvbG9yID0gY29sb3I7XG4gIGdsX1Bvc2l0aW9uID0gdmVjNCh2UG9zaXRpb24ueHksIDAsIHZQb3NpdGlvbi56KTtcbn1cbiJdKSxwaWNrRnJhZ21lbnQ6bihbInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudmFyeWluZyB2ZWM0IGZyYWdJZDtcbnZhcnlpbmcgdmVjMiB2V2VpZ2h0O1xuXG51bmlmb3JtIHZlYzIgc2hhcGU7XG51bmlmb3JtIHZlYzQgcGlja09mZnNldDtcblxudm9pZCBtYWluKCkge1xuICB2ZWMyIGQgPSBzdGVwKC41LCB2V2VpZ2h0KTtcbiAgdmVjNCBpZCA9IGZyYWdJZCArIHBpY2tPZmZzZXQ7XG4gIGlkLnggKz0gZC54ICsgZC55KnNoYXBlLng7XG5cbiAgaWQueSArPSBmbG9vcihpZC54IC8gMjU2LjApO1xuICBpZC54IC09IGZsb29yKGlkLnggLyAyNTYuMCkgKiAyNTYuMDtcblxuICBpZC56ICs9IGZsb29yKGlkLnkgLyAyNTYuMCk7XG4gIGlkLnkgLT0gZmxvb3IoaWQueSAvIDI1Ni4wKSAqIDI1Ni4wO1xuXG4gIGlkLncgKz0gZmxvb3IoaWQueiAvIDI1Ni4wKTtcbiAgaWQueiAtPSBmbG9vcihpZC56IC8gMjU2LjApICogMjU2LjA7XG5cbiAgZ2xfRnJhZ0NvbG9yID0gaWQvMjU1Ljtcbn1cbiJdKSxwaWNrVmVydGV4Om4oWyJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uO1xuYXR0cmlidXRlIHZlYzQgcGlja0lkO1xuYXR0cmlidXRlIHZlYzIgd2VpZ2h0O1xuXG51bmlmb3JtIHZlYzIgc2hhcGU7XG51bmlmb3JtIG1hdDMgdmlld1RyYW5zZm9ybTtcblxudmFyeWluZyB2ZWM0IGZyYWdJZDtcbnZhcnlpbmcgdmVjMiB2V2VpZ2h0O1xuXG52b2lkIG1haW4oKSB7XG4gIHZXZWlnaHQgPSB3ZWlnaHQ7XG5cbiAgZnJhZ0lkID0gcGlja0lkO1xuXG4gIHZlYzMgdlBvc2l0aW9uID0gdmlld1RyYW5zZm9ybSAqIHZlYzMoIHBvc2l0aW9uICsgKHdlaWdodC0uNSkvKHNoYXBlLTEuKSAsIDEuMCk7XG4gIGdsX1Bvc2l0aW9uID0gdmVjNCh2UG9zaXRpb24ueHksIDAsIHZQb3NpdGlvbi56KTtcbn1cbiJdKX19LHtnbHNsaWZ5OjM3N31dLDI0MzpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVs5OF1bMF0uYXBwbHkocixhcmd1bWVudHMpfSx7ZHVwOjk4fV0sMjQ0OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiZ2xzbGlmeSIpLGk9dCgiZ2wtc2hhZGVyIiksYT1uKFsicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbiwgbmV4dFBvc2l0aW9uO1xuYXR0cmlidXRlIGZsb2F0IGFyY0xlbmd0aCwgbGluZVdpZHRoO1xuYXR0cmlidXRlIHZlYzQgY29sb3I7XG5cbnVuaWZvcm0gdmVjMiBzY3JlZW5TaGFwZTtcbnVuaWZvcm0gZmxvYXQgcGl4ZWxSYXRpbztcbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcblxudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcbnZhcnlpbmcgdmVjMyB3b3JsZFBvc2l0aW9uO1xudmFyeWluZyBmbG9hdCBwaXhlbEFyY0xlbmd0aDtcblxudm9pZCBtYWluKCkge1xuICB2ZWM0IHByb2plY3RlZCA9IHByb2plY3Rpb24gKiB2aWV3ICogbW9kZWwgKiB2ZWM0KHBvc2l0aW9uLCAxLjApO1xuICB2ZWM0IHRhbmdlbnRDbGlwID0gcHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQobmV4dFBvc2l0aW9uIC0gcG9zaXRpb24sIDAuMCk7XG4gIHZlYzIgdGFuZ2VudCA9IG5vcm1hbGl6ZShzY3JlZW5TaGFwZSAqIHRhbmdlbnRDbGlwLnh5KTtcbiAgdmVjMiBvZmZzZXQgPSAwLjUgKiBwaXhlbFJhdGlvICogbGluZVdpZHRoICogdmVjMih0YW5nZW50LnksIC10YW5nZW50LngpIC8gc2NyZWVuU2hhcGU7XG5cbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHByb2plY3RlZC54eSArIHByb2plY3RlZC53ICogb2Zmc2V0LCBwcm9qZWN0ZWQuencpO1xuXG4gIHdvcmxkUG9zaXRpb24gPSBwb3NpdGlvbjtcbiAgcGl4ZWxBcmNMZW5ndGggPSBhcmNMZW5ndGg7XG4gIGZyYWdDb2xvciA9IGNvbG9yO1xufVxuIl0pLG89bihbInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudW5pZm9ybSB2ZWMzICAgICAgY2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gc2FtcGxlcjJEIGRhc2hUZXh0dXJlO1xudW5pZm9ybSBmbG9hdCAgICAgZGFzaFNjYWxlO1xudW5pZm9ybSBmbG9hdCAgICAgb3BhY2l0eTtcblxudmFyeWluZyB2ZWMzICAgIHdvcmxkUG9zaXRpb247XG52YXJ5aW5nIGZsb2F0ICAgcGl4ZWxBcmNMZW5ndGg7XG52YXJ5aW5nIHZlYzQgICAgZnJhZ0NvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gIGlmKGFueShsZXNzVGhhbih3b3JsZFBvc2l0aW9uLCBjbGlwQm91bmRzWzBdKSkgfHwgYW55KGdyZWF0ZXJUaGFuKHdvcmxkUG9zaXRpb24sIGNsaXBCb3VuZHNbMV0pKSkge1xuICAgIGRpc2NhcmQ7XG4gIH1cbiAgZmxvYXQgZGFzaFdlaWdodCA9IHRleHR1cmUyRChkYXNoVGV4dHVyZSwgdmVjMihkYXNoU2NhbGUgKiBwaXhlbEFyY0xlbmd0aCwgMCkpLnI7XG4gIGlmKGRhc2hXZWlnaHQgPCAwLjUpIHtcbiAgICBkaXNjYXJkO1xuICB9XG4gIGdsX0ZyYWdDb2xvciA9IGZyYWdDb2xvciAqIG9wYWNpdHk7XG59XG4iXSkscz1uKFsicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG4jZGVmaW5lIEZMT0FUX01BWCAgMS43MDE0MTE4NGUzOFxuI2RlZmluZSBGTE9BVF9NSU4gIDEuMTc1NDk0MzVlLTM4XG5cbmxvd3AgdmVjNCBlbmNvZGVfZmxvYXRfMTU0MDI1OTEzMChoaWdocCBmbG9hdCB2KSB7XG4gIGhpZ2hwIGZsb2F0IGF2ID0gYWJzKHYpO1xuXG4gIC8vSGFuZGxlIHNwZWNpYWwgY2FzZXNcbiAgaWYoYXYgPCBGTE9BVF9NSU4pIHtcbiAgICByZXR1cm4gdmVjNCgwLjAsIDAuMCwgMC4wLCAwLjApO1xuICB9IGVsc2UgaWYodiA+IEZMT0FUX01BWCkge1xuICAgIHJldHVybiB2ZWM0KDEyNy4wLCAxMjguMCwgMC4wLCAwLjApIC8gMjU1LjA7XG4gIH0gZWxzZSBpZih2IDwgLUZMT0FUX01BWCkge1xuICAgIHJldHVybiB2ZWM0KDI1NS4wLCAxMjguMCwgMC4wLCAwLjApIC8gMjU1LjA7XG4gIH1cblxuICBoaWdocCB2ZWM0IGMgPSB2ZWM0KDAsMCwwLDApO1xuXG4gIC8vQ29tcHV0ZSBleHBvbmVudCBhbmQgbWFudGlzc2FcbiAgaGlnaHAgZmxvYXQgZSA9IGZsb29yKGxvZzIoYXYpKTtcbiAgaGlnaHAgZmxvYXQgbSA9IGF2ICogcG93KDIuMCwgLWUpIC0gMS4wO1xuICBcbiAgLy9VbnBhY2sgbWFudGlzc2FcbiAgY1sxXSA9IGZsb29yKDEyOC4wICogbSk7XG4gIG0gLT0gY1sxXSAvIDEyOC4wO1xuICBjWzJdID0gZmxvb3IoMzI3NjguMCAqIG0pO1xuICBtIC09IGNbMl0gLyAzMjc2OC4wO1xuICBjWzNdID0gZmxvb3IoODM4ODYwOC4wICogbSk7XG4gIFxuICAvL1VucGFjayBleHBvbmVudFxuICBoaWdocCBmbG9hdCBlYmlhcyA9IGUgKyAxMjcuMDtcbiAgY1swXSA9IGZsb29yKGViaWFzIC8gMi4wKTtcbiAgZWJpYXMgLT0gY1swXSAqIDIuMDtcbiAgY1sxXSArPSBmbG9vcihlYmlhcykgKiAxMjguMDsgXG5cbiAgLy9VbnBhY2sgc2lnbiBiaXRcbiAgY1swXSArPSAxMjguMCAqIHN0ZXAoMC4wLCAtdik7XG5cbiAgLy9TY2FsZSBiYWNrIHRvIHJhbmdlXG4gIHJldHVybiBjIC8gMjU1LjA7XG59XG5cbnVuaWZvcm0gZmxvYXQgcGlja0lkO1xudW5pZm9ybSB2ZWMzIGNsaXBCb3VuZHNbMl07XG5cbnZhcnlpbmcgdmVjMyB3b3JsZFBvc2l0aW9uO1xudmFyeWluZyBmbG9hdCBwaXhlbEFyY0xlbmd0aDtcbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XG5cbnZvaWQgbWFpbigpIHtcbiAgaWYoYW55KGxlc3NUaGFuKHdvcmxkUG9zaXRpb24sIGNsaXBCb3VuZHNbMF0pKSB8fCBhbnkoZ3JlYXRlclRoYW4od29ybGRQb3NpdGlvbiwgY2xpcEJvdW5kc1sxXSkpKSB7XG4gICAgZGlzY2FyZDtcbiAgfVxuICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHBpY2tJZC8yNTUuMCwgZW5jb2RlX2Zsb2F0XzE1NDAyNTkxMzAocGl4ZWxBcmNMZW5ndGgpLnh5eik7XG59Il0pLGw9W3tuYW1lOiJwb3NpdGlvbiIsdHlwZToidmVjMyJ9LHtuYW1lOiJuZXh0UG9zaXRpb24iLHR5cGU6InZlYzMifSx7bmFtZToiYXJjTGVuZ3RoIix0eXBlOiJmbG9hdCJ9LHtuYW1lOiJsaW5lV2lkdGgiLHR5cGU6ImZsb2F0In0se25hbWU6ImNvbG9yIix0eXBlOiJ2ZWM0In1dO3IuY3JlYXRlU2hhZGVyPWZ1bmN0aW9uKHQpe3JldHVybiBpKHQsYSxvLG51bGwsbCl9LHIuY3JlYXRlUGlja1NoYWRlcj1mdW5jdGlvbih0KXtyZXR1cm4gaSh0LGEscyxudWxsLGwpfX0seyJnbC1zaGFkZXIiOjI4NyxnbHNsaWZ5OjM3N31dLDI0NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5nbHx8dC5zY2VuZSYmdC5zY2VuZS5nbCxyPXUoZSk7ci5hdHRyaWJ1dGVzLnBvc2l0aW9uLmxvY2F0aW9uPTAsci5hdHRyaWJ1dGVzLm5leHRQb3NpdGlvbi5sb2NhdGlvbj0xLHIuYXR0cmlidXRlcy5hcmNMZW5ndGgubG9jYXRpb249MixyLmF0dHJpYnV0ZXMubGluZVdpZHRoLmxvY2F0aW9uPTMsci5hdHRyaWJ1dGVzLmNvbG9yLmxvY2F0aW9uPTQ7dmFyIG89aChlKTtvLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCxvLmF0dHJpYnV0ZXMubmV4dFBvc2l0aW9uLmxvY2F0aW9uPTEsby5hdHRyaWJ1dGVzLmFyY0xlbmd0aC5sb2NhdGlvbj0yLG8uYXR0cmlidXRlcy5saW5lV2lkdGgubG9jYXRpb249MyxvLmF0dHJpYnV0ZXMuY29sb3IubG9jYXRpb249NDtmb3IodmFyIHM9bihlKSxjPWkoZSxbe2J1ZmZlcjpzLHNpemU6MyxvZmZzZXQ6MCxzdHJpZGU6NDh9LHtidWZmZXI6cyxzaXplOjMsb2Zmc2V0OjEyLHN0cmlkZTo0OH0se2J1ZmZlcjpzLHNpemU6MSxvZmZzZXQ6MjQsc3RyaWRlOjQ4fSx7YnVmZmVyOnMsc2l6ZToxLG9mZnNldDoyOCxzdHJpZGU6NDh9LHtidWZmZXI6cyxzaXplOjQsb2Zmc2V0OjMyLHN0cmlkZTo0OH1dKSxmPWwobmV3IEFycmF5KDEwMjQpLFsyNTYsMSw0XSkscD0wO3A8MTAyNDsrK3ApZi5kYXRhW3BdPTI1NTt2YXIgZD1hKGUsZik7ZC53cmFwPWUuUkVQRUFUO3ZhciBnPW5ldyBtKGUscixvLHMsYyxkKTtyZXR1cm4gZy51cGRhdGUodCksZ307dmFyIG49dCgiZ2wtYnVmZmVyIiksaT10KCJnbC12YW8iKSxhPXQoImdsLXRleHR1cmUyZCIpLG89dCgiZ2xzbC1yZWFkLWZsb2F0Iikscz10KCJiaW5hcnktc2VhcmNoLWJvdW5kcyIpLGw9dCgibmRhcnJheSIpLGM9dCgiLi9saWIvc2hhZGVycyIpLHU9Yy5jcmVhdGVTaGFkZXIsaD1jLmNyZWF0ZVBpY2tTaGFkZXIsZj1bMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV07ZnVuY3Rpb24gcCh0LGUpe2Zvcih2YXIgcj0wLG49MDtuPDM7KytuKXt2YXIgaT10W25dLWVbbl07cis9aSppfXJldHVybiBNYXRoLnNxcnQocil9ZnVuY3Rpb24gZCh0KXtmb3IodmFyIGU9W1stMWU2LC0xZTYsLTFlNl0sWzFlNiwxZTYsMWU2XV0scj0wO3I8MzsrK3IpZVswXVtyXT1NYXRoLm1heCh0WzBdW3JdLGVbMF1bcl0pLGVbMV1bcl09TWF0aC5taW4odFsxXVtyXSxlWzFdW3JdKTtyZXR1cm4gZX1mdW5jdGlvbiBnKHQsZSxyLG4pe3RoaXMuYXJjTGVuZ3RoPXQsdGhpcy5wb3NpdGlvbj1lLHRoaXMuaW5kZXg9cix0aGlzLmRhdGFDb29yZGluYXRlPW59ZnVuY3Rpb24gbSh0LGUscixuLGksYSl7dGhpcy5nbD10LHRoaXMuc2hhZGVyPWUsdGhpcy5waWNrU2hhZGVyPXIsdGhpcy5idWZmZXI9bix0aGlzLnZhbz1pLHRoaXMuY2xpcEJvdW5kcz1bWy0xLzAsLTEvMCwtMS8wXSxbMS8wLDEvMCwxLzBdXSx0aGlzLnBvaW50cz1bXSx0aGlzLmFyY0xlbmd0aD1bXSx0aGlzLnZlcnRleENvdW50PTAsdGhpcy5ib3VuZHM9W1swLDAsMF0sWzAsMCwwXV0sdGhpcy5waWNrSWQ9MCx0aGlzLmxpbmVXaWR0aD0xLHRoaXMudGV4dHVyZT1hLHRoaXMuZGFzaFNjYWxlPTEsdGhpcy5vcGFjaXR5PTEsdGhpcy5kaXJ0eT0hMCx0aGlzLnBpeGVsUmF0aW89MX12YXIgdj1tLnByb3RvdHlwZTt2LmlzVHJhbnNwYXJlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcGFjaXR5PDF9LHYuaXNPcGFxdWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcGFjaXR5Pj0xfSx2LnBpY2tTbG90cz0xLHYuc2V0UGlja0Jhc2U9ZnVuY3Rpb24odCl7dGhpcy5waWNrSWQ9dH0sdi5kcmF3VHJhbnNwYXJlbnQ9di5kcmF3PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ2wscj10aGlzLnNoYWRlcixuPXRoaXMudmFvO3IuYmluZCgpLHIudW5pZm9ybXM9e21vZGVsOnQubW9kZWx8fGYsdmlldzp0LnZpZXd8fGYscHJvamVjdGlvbjp0LnByb2plY3Rpb258fGYsY2xpcEJvdW5kczpkKHRoaXMuY2xpcEJvdW5kcyksZGFzaFRleHR1cmU6dGhpcy50ZXh0dXJlLmJpbmQoKSxkYXNoU2NhbGU6dGhpcy5kYXNoU2NhbGUvdGhpcy5hcmNMZW5ndGhbdGhpcy5hcmNMZW5ndGgubGVuZ3RoLTFdLG9wYWNpdHk6dGhpcy5vcGFjaXR5LHNjcmVlblNoYXBlOltlLmRyYXdpbmdCdWZmZXJXaWR0aCxlLmRyYXdpbmdCdWZmZXJIZWlnaHRdLHBpeGVsUmF0aW86dGhpcy5waXhlbFJhdGlvfSxuLmJpbmQoKSxuLmRyYXcoZS5UUklBTkdMRV9TVFJJUCx0aGlzLnZlcnRleENvdW50KSxuLnVuYmluZCgpfSx2LmRyYXdQaWNrPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ2wscj10aGlzLnBpY2tTaGFkZXIsbj10aGlzLnZhbztyLmJpbmQoKSxyLnVuaWZvcm1zPXttb2RlbDp0Lm1vZGVsfHxmLHZpZXc6dC52aWV3fHxmLHByb2plY3Rpb246dC5wcm9qZWN0aW9ufHxmLHBpY2tJZDp0aGlzLnBpY2tJZCxjbGlwQm91bmRzOmQodGhpcy5jbGlwQm91bmRzKSxzY3JlZW5TaGFwZTpbZS5kcmF3aW5nQnVmZmVyV2lkdGgsZS5kcmF3aW5nQnVmZmVySGVpZ2h0XSxwaXhlbFJhdGlvOnRoaXMucGl4ZWxSYXRpb30sbi5iaW5kKCksbi5kcmF3KGUuVFJJQU5HTEVfU1RSSVAsdGhpcy52ZXJ0ZXhDb3VudCksbi51bmJpbmQoKX0sdi51cGRhdGU9ZnVuY3Rpb24odCl7dmFyIGUscjt0aGlzLmRpcnR5PSEwO3ZhciBuPSEhdC5jb25uZWN0R2FwczsiZGFzaFNjYWxlImluIHQmJih0aGlzLmRhc2hTY2FsZT10LmRhc2hTY2FsZSksIm9wYWNpdHkiaW4gdCYmKHRoaXMub3BhY2l0eT0rdC5vcGFjaXR5KTt2YXIgaT10LnBvc2l0aW9ufHx0LnBvc2l0aW9ucztpZihpKXt2YXIgYT10LmNvbG9yfHx0LmNvbG9yc3x8WzAsMCwwLDFdLG89dC5saW5lV2lkdGh8fDEsYz1bXSx1PVtdLGg9W10sZj0wLGQ9MCxnPVtbMS8wLDEvMCwxLzBdLFstMS8wLC0xLzAsLTEvMF1dLG09ITE7dDpmb3IoZT0xO2U8aS5sZW5ndGg7KytlKXt2YXIgdix5LHgsYj1pW2UtMV0sXz1pW2VdO2Zvcih1LnB1c2goZiksaC5wdXNoKGIuc2xpY2UoKSkscj0wO3I8MzsrK3Ipe2lmKGlzTmFOKGJbcl0pfHxpc05hTihfW3JdKXx8IWlzRmluaXRlKGJbcl0pfHwhaXNGaW5pdGUoX1tyXSkpe2lmKCFuJiZjLmxlbmd0aD4wKXtmb3IodmFyIHc9MDt3PDI0OysrdyljLnB1c2goY1tjLmxlbmd0aC0xMl0pO2QrPTIsbT0hMH1jb250aW51ZSB0fWdbMF1bcl09TWF0aC5taW4oZ1swXVtyXSxiW3JdLF9bcl0pLGdbMV1bcl09TWF0aC5tYXgoZ1sxXVtyXSxiW3JdLF9bcl0pfUFycmF5LmlzQXJyYXkoYVswXSk/KHY9YVtlLTFdLHk9YVtlXSk6dj15PWEsMz09PXYubGVuZ3RoJiYodj1bdlswXSx2WzFdLHZbMl0sMV0pLDM9PT15Lmxlbmd0aCYmKHk9W3lbMF0seVsxXSx5WzJdLDFdKSx4PUFycmF5LmlzQXJyYXkobyk/b1tlLTFdOm87dmFyIGs9ZjtpZihmKz1wKGIsXyksbSl7Zm9yKHI9MDtyPDI7KytyKWMucHVzaChiWzBdLGJbMV0sYlsyXSxfWzBdLF9bMV0sX1syXSxrLHgsdlswXSx2WzFdLHZbMl0sdlszXSk7ZCs9MixtPSExfWMucHVzaChiWzBdLGJbMV0sYlsyXSxfWzBdLF9bMV0sX1syXSxrLHgsdlswXSx2WzFdLHZbMl0sdlszXSxiWzBdLGJbMV0sYlsyXSxfWzBdLF9bMV0sX1syXSxrLC14LHZbMF0sdlsxXSx2WzJdLHZbM10sX1swXSxfWzFdLF9bMl0sYlswXSxiWzFdLGJbMl0sZiwteCx5WzBdLHlbMV0seVsyXSx5WzNdLF9bMF0sX1sxXSxfWzJdLGJbMF0sYlsxXSxiWzJdLGYseCx5WzBdLHlbMV0seVsyXSx5WzNdKSxkKz00fWlmKHRoaXMuYnVmZmVyLnVwZGF0ZShjKSx1LnB1c2goZiksaC5wdXNoKGlbaS5sZW5ndGgtMV0uc2xpY2UoKSksdGhpcy5ib3VuZHM9Zyx0aGlzLnZlcnRleENvdW50PWQsdGhpcy5wb2ludHM9aCx0aGlzLmFyY0xlbmd0aD11LCJkYXNoZXMiaW4gdCl7dmFyIE09dC5kYXNoZXMuc2xpY2UoKTtmb3IoTS51bnNoaWZ0KDApLGU9MTtlPE0ubGVuZ3RoOysrZSlNW2VdPU1bZS0xXStNW2VdO3ZhciBBPWwobmV3IEFycmF5KDEwMjQpLFsyNTYsMSw0XSk7Zm9yKGU9MDtlPDI1NjsrK2Upe2ZvcihyPTA7cjw0OysrcilBLnNldChlLDAsciwwKTsxJnMubGUoTSxNW00ubGVuZ3RoLTFdKmUvMjU1KT9BLnNldChlLDAsMCwwKTpBLnNldChlLDAsMCwyNTUpfXRoaXMudGV4dHVyZS5zZXRQaXhlbHMoQSl9fX0sdi5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5zaGFkZXIuZGlzcG9zZSgpLHRoaXMudmFvLmRpc3Bvc2UoKSx0aGlzLmJ1ZmZlci5kaXNwb3NlKCl9LHYucGljaz1mdW5jdGlvbih0KXtpZighdClyZXR1cm4gbnVsbDtpZih0LmlkIT09dGhpcy5waWNrSWQpcmV0dXJuIG51bGw7dmFyIGU9byh0LnZhbHVlWzBdLHQudmFsdWVbMV0sdC52YWx1ZVsyXSwwKSxyPXMubGUodGhpcy5hcmNMZW5ndGgsZSk7aWYocjwwKXJldHVybiBudWxsO2lmKHI9PT10aGlzLmFyY0xlbmd0aC5sZW5ndGgtMSlyZXR1cm4gbmV3IGcodGhpcy5hcmNMZW5ndGhbdGhpcy5hcmNMZW5ndGgubGVuZ3RoLTFdLHRoaXMucG9pbnRzW3RoaXMucG9pbnRzLmxlbmd0aC0xXS5zbGljZSgpLHIpO2Zvcih2YXIgbj10aGlzLnBvaW50c1tyXSxpPXRoaXMucG9pbnRzW01hdGgubWluKHIrMSx0aGlzLnBvaW50cy5sZW5ndGgtMSldLGE9KGUtdGhpcy5hcmNMZW5ndGhbcl0pLyh0aGlzLmFyY0xlbmd0aFtyKzFdLXRoaXMuYXJjTGVuZ3RoW3JdKSxsPTEtYSxjPVswLDAsMF0sdT0wO3U8MzsrK3UpY1t1XT1sKm5bdV0rYSppW3VdO3ZhciBoPU1hdGgubWluKGE8LjU/cjpyKzEsdGhpcy5wb2ludHMubGVuZ3RoLTEpO3JldHVybiBuZXcgZyhlLGMsaCx0aGlzLnBvaW50c1toXSl9fSx7Ii4vbGliL3NoYWRlcnMiOjI0NCwiYmluYXJ5LXNlYXJjaC1ib3VuZHMiOjc5LCJnbC1idWZmZXIiOjIzMCwiZ2wtdGV4dHVyZTJkIjozMDMsImdsLXZhbyI6MzA4LCJnbHNsLXJlYWQtZmxvYXQiOjM2OCxuZGFycmF5OjQxN31dLDI0NjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxhPWVbM10sbz1yKmEtaSpuO3JldHVybiBvPyhvPTEvbyx0WzBdPWEqbyx0WzFdPS1uKm8sdFsyXT0taSpvLHRbM109cipvLHQpOm51bGx9fSx7fV0sMjQ3OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0saT1lWzJdLGE9ZVszXSxvPWVbNF0scz1lWzVdLGw9ZVs2XSxjPWVbN10sdT1lWzhdLGg9dSpvLXMqYyxmPS11KmErcypsLHA9YyphLW8qbCxkPXIqaCtuKmYraSpwO3JldHVybiBkPyhkPTEvZCx0WzBdPWgqZCx0WzFdPSgtdSpuK2kqYykqZCx0WzJdPShzKm4taSpvKSpkLHRbM109ZipkLHRbNF09KHUqci1pKmwpKmQsdFs1XT0oLXMqcitpKmEpKmQsdFs2XT1wKmQsdFs3XT0oLWMqcituKmwpKmQsdFs4XT0obypyLW4qYSkqZCx0KTpudWxsfX0se31dLDI0ODpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1uZXcgRmxvYXQzMkFycmF5KDE2KTtyZXR1cm4gZVswXT10WzBdLGVbMV09dFsxXSxlWzJdPXRbMl0sZVszXT10WzNdLGVbNF09dFs0XSxlWzVdPXRbNV0sZVs2XT10WzZdLGVbN109dFs3XSxlWzhdPXRbOF0sZVs5XT10WzldLGVbMTBdPXRbMTBdLGVbMTFdPXRbMTFdLGVbMTJdPXRbMTJdLGVbMTNdPXRbMTNdLGVbMTRdPXRbMTRdLGVbMTVdPXRbMTVdLGV9fSx7fV0sMjQ5OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IEZsb2F0MzJBcnJheSgxNik7cmV0dXJuIHRbMF09MSx0WzFdPTAsdFsyXT0wLHRbM109MCx0WzRdPTAsdFs1XT0xLHRbNl09MCx0WzddPTAsdFs4XT0wLHRbOV09MCx0WzEwXT0xLHRbMTFdPTAsdFsxMl09MCx0WzEzXT0wLHRbMTRdPTAsdFsxNV09MSx0fX0se31dLDI1MDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10WzBdLHI9dFsxXSxuPXRbMl0saT10WzNdLGE9dFs0XSxvPXRbNV0scz10WzZdLGw9dFs3XSxjPXRbOF0sdT10WzldLGg9dFsxMF0sZj10WzExXSxwPXRbMTJdLGQ9dFsxM10sZz10WzE0XSxtPXRbMTVdO3JldHVybihlKm8tciphKSooaCptLWYqZyktKGUqcy1uKmEpKih1Km0tZipkKSsoZSpsLWkqYSkqKHUqZy1oKmQpKyhyKnMtbipvKSooYyptLWYqcCktKHIqbC1pKm8pKihjKmctaCpwKSsobipsLWkqcykqKGMqZC11KnApfX0se31dLDI1MTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxhPWVbM10sbz1yK3Iscz1uK24sbD1pK2ksYz1yKm8sdT1uKm8saD1uKnMsZj1pKm8scD1pKnMsZD1pKmwsZz1hKm8sbT1hKnMsdj1hKmw7cmV0dXJuIHRbMF09MS1oLWQsdFsxXT11K3YsdFsyXT1mLW0sdFszXT0wLHRbNF09dS12LHRbNV09MS1jLWQsdFs2XT1wK2csdFs3XT0wLHRbOF09ZittLHRbOV09cC1nLHRbMTBdPTEtYy1oLHRbMTFdPTAsdFsxMl09MCx0WzEzXT0wLHRbMTRdPTAsdFsxNV09MSx0fX0se31dLDI1MjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdLG89ZVszXSxzPW4rbixsPWkraSxjPWErYSx1PW4qcyxoPW4qbCxmPW4qYyxwPWkqbCxkPWkqYyxnPWEqYyxtPW8qcyx2PW8qbCx5PW8qYztyZXR1cm4gdFswXT0xLShwK2cpLHRbMV09aCt5LHRbMl09Zi12LHRbM109MCx0WzRdPWgteSx0WzVdPTEtKHUrZyksdFs2XT1kK20sdFs3XT0wLHRbOF09Zit2LHRbOV09ZC1tLHRbMTBdPTEtKHUrcCksdFsxMV09MCx0WzEyXT1yWzBdLHRbMTNdPXJbMV0sdFsxNF09clsyXSx0WzE1XT0xLHR9fSx7fV0sMjUzOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0WzBdPTEsdFsxXT0wLHRbMl09MCx0WzNdPTAsdFs0XT0wLHRbNV09MSx0WzZdPTAsdFs3XT0wLHRbOF09MCx0WzldPTAsdFsxMF09MSx0WzExXT0wLHRbMTJdPTAsdFsxM109MCx0WzE0XT0wLHRbMTVdPTEsdH19LHt9XSwyNTQ6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXSxpPWVbMl0sYT1lWzNdLG89ZVs0XSxzPWVbNV0sbD1lWzZdLGM9ZVs3XSx1PWVbOF0saD1lWzldLGY9ZVsxMF0scD1lWzExXSxkPWVbMTJdLGc9ZVsxM10sbT1lWzE0XSx2PWVbMTVdLHk9cipzLW4qbyx4PXIqbC1pKm8sYj1yKmMtYSpvLF89bipsLWkqcyx3PW4qYy1hKnMsaz1pKmMtYSpsLE09dSpnLWgqZCxBPXUqbS1mKmQsVD11KnYtcCpkLFM9aCptLWYqZyxFPWgqdi1wKmcsQz1mKnYtcCptLEw9eSpDLXgqRStiKlMrXypULXcqQStrKk07aWYoIUwpcmV0dXJuIG51bGw7cmV0dXJuIEw9MS9MLHRbMF09KHMqQy1sKkUrYypTKSpMLHRbMV09KGkqRS1uKkMtYSpTKSpMLHRbMl09KGcqay1tKncrdipfKSpMLHRbM109KGYqdy1oKmstcCpfKSpMLHRbNF09KGwqVC1vKkMtYypBKSpMLHRbNV09KHIqQy1pKlQrYSpBKSpMLHRbNl09KG0qYi1kKmstdip4KSpMLHRbN109KHUqay1mKmIrcCp4KSpMLHRbOF09KG8qRS1zKlQrYypNKSpMLHRbOV09KG4qVC1yKkUtYSpNKSpMLHRbMTBdPShkKnctZypiK3YqeSkqTCx0WzExXT0oaCpiLXUqdy1wKnkpKkwsdFsxMl09KHMqQS1vKlMtbCpNKSpMLHRbMTNdPShyKlMtbipBK2kqTSkqTCx0WzE0XT0oZyp4LWQqXy1tKnkpKkwsdFsxNV09KHUqXy1oKngrZip5KSpMLHR9fSx7fV0sMjU1OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi9pZGVudGl0eSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpKXt2YXIgYSxvLHMsbCxjLHUsaCxmLHAsZCxnPWVbMF0sbT1lWzFdLHY9ZVsyXSx5PWlbMF0seD1pWzFdLGI9aVsyXSxfPXJbMF0sdz1yWzFdLGs9clsyXTtpZihNYXRoLmFicyhnLV8pPDFlLTYmJk1hdGguYWJzKG0tdyk8MWUtNiYmTWF0aC5hYnModi1rKTwxZS02KXJldHVybiBuKHQpO2g9Zy1fLGY9bS13LHA9di1rLGQ9MS9NYXRoLnNxcnQoaCpoK2YqZitwKnApLGE9eCoocCo9ZCktYiooZio9ZCksbz1iKihoKj1kKS15KnAscz15KmYteCpoLChkPU1hdGguc3FydChhKmErbypvK3MqcykpPyhhKj1kPTEvZCxvKj1kLHMqPWQpOihhPTAsbz0wLHM9MCk7bD1mKnMtcCpvLGM9cCphLWgqcyx1PWgqby1mKmEsKGQ9TWF0aC5zcXJ0KGwqbCtjKmMrdSp1KSk/KGwqPWQ9MS9kLGMqPWQsdSo9ZCk6KGw9MCxjPTAsdT0wKTtyZXR1cm4gdFswXT1hLHRbMV09bCx0WzJdPWgsdFszXT0wLHRbNF09byx0WzVdPWMsdFs2XT1mLHRbN109MCx0WzhdPXMsdFs5XT11LHRbMTBdPXAsdFsxMV09MCx0WzEyXT0tKGEqZytvKm0rcyp2KSx0WzEzXT0tKGwqZytjKm0rdSp2KSx0WzE0XT0tKGgqZytmKm0rcCp2KSx0WzE1XT0xLHR9fSx7Ii4vaWRlbnRpdHkiOjI1M31dLDI1NjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdLG89ZVszXSxzPWVbNF0sbD1lWzVdLGM9ZVs2XSx1PWVbN10saD1lWzhdLGY9ZVs5XSxwPWVbMTBdLGQ9ZVsxMV0sZz1lWzEyXSxtPWVbMTNdLHY9ZVsxNF0seT1lWzE1XSx4PXJbMF0sYj1yWzFdLF89clsyXSx3PXJbM107cmV0dXJuIHRbMF09eCpuK2IqcytfKmgrdypnLHRbMV09eCppK2IqbCtfKmYrdyptLHRbMl09eCphK2IqYytfKnArdyp2LHRbM109eCpvK2IqdStfKmQrdyp5LHg9cls0XSxiPXJbNV0sXz1yWzZdLHc9cls3XSx0WzRdPXgqbitiKnMrXypoK3cqZyx0WzVdPXgqaStiKmwrXypmK3cqbSx0WzZdPXgqYStiKmMrXypwK3cqdix0WzddPXgqbytiKnUrXypkK3cqeSx4PXJbOF0sYj1yWzldLF89clsxMF0sdz1yWzExXSx0WzhdPXgqbitiKnMrXypoK3cqZyx0WzldPXgqaStiKmwrXypmK3cqbSx0WzEwXT14KmErYipjK18qcCt3KnYsdFsxMV09eCpvK2IqdStfKmQrdyp5LHg9clsxMl0sYj1yWzEzXSxfPXJbMTRdLHc9clsxNV0sdFsxMl09eCpuK2IqcytfKmgrdypnLHRbMTNdPXgqaStiKmwrXypmK3cqbSx0WzE0XT14KmErYipjK18qcCt3KnYsdFsxNV09eCpvK2IqdStfKmQrdyp5LHR9fSx7fV0sMjU3OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9MS9NYXRoLnRhbihlLzIpLG89MS8obi1pKTtyZXR1cm4gdFswXT1hL3IsdFsxXT0wLHRbMl09MCx0WzNdPTAsdFs0XT0wLHRbNV09YSx0WzZdPTAsdFs3XT0wLHRbOF09MCx0WzldPTAsdFsxMF09KGkrbikqbyx0WzExXT0tMSx0WzEyXT0wLHRbMTNdPTAsdFsxNF09MippKm4qbyx0WzE1XT0wLHR9fSx7fV0sMjU4OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGEsbyxzLGwsYyx1LGgsZixwLGQsZyxtLHYseSx4LGIsXyx3LGssTSxBLFQsUyxFPW5bMF0sQz1uWzFdLEw9blsyXSx6PU1hdGguc3FydChFKkUrQypDK0wqTCk7aWYoTWF0aC5hYnMoeik8MWUtNilyZXR1cm4gbnVsbDtFKj16PTEveixDKj16LEwqPXosaT1NYXRoLnNpbihyKSxhPU1hdGguY29zKHIpLG89MS1hLHM9ZVswXSxsPWVbMV0sYz1lWzJdLHU9ZVszXSxoPWVbNF0sZj1lWzVdLHA9ZVs2XSxkPWVbN10sZz1lWzhdLG09ZVs5XSx2PWVbMTBdLHk9ZVsxMV0seD1FKkUqbythLGI9QypFKm8rTCppLF89TCpFKm8tQyppLHc9RSpDKm8tTCppLGs9QypDKm8rYSxNPUwqQypvK0UqaSxBPUUqTCpvK0MqaSxUPUMqTCpvLUUqaSxTPUwqTCpvK2EsdFswXT1zKngraCpiK2cqXyx0WzFdPWwqeCtmKmIrbSpfLHRbMl09Yyp4K3AqYit2Kl8sdFszXT11KngrZCpiK3kqXyx0WzRdPXMqdytoKmsrZypNLHRbNV09bCp3K2YqayttKk0sdFs2XT1jKncrcCprK3YqTSx0WzddPXUqdytkKmsreSpNLHRbOF09cypBK2gqVCtnKlMsdFs5XT1sKkErZipUK20qUyx0WzEwXT1jKkErcCpUK3YqUyx0WzExXT11KkErZCpUK3kqUyxlIT09dCYmKHRbMTJdPWVbMTJdLHRbMTNdPWVbMTNdLHRbMTRdPWVbMTRdLHRbMTVdPWVbMTVdKTtyZXR1cm4gdH19LHt9XSwyNTk6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPU1hdGguc2luKHIpLGk9TWF0aC5jb3MociksYT1lWzRdLG89ZVs1XSxzPWVbNl0sbD1lWzddLGM9ZVs4XSx1PWVbOV0saD1lWzEwXSxmPWVbMTFdO2UhPT10JiYodFswXT1lWzBdLHRbMV09ZVsxXSx0WzJdPWVbMl0sdFszXT1lWzNdLHRbMTJdPWVbMTJdLHRbMTNdPWVbMTNdLHRbMTRdPWVbMTRdLHRbMTVdPWVbMTVdKTtyZXR1cm4gdFs0XT1hKmkrYypuLHRbNV09byppK3Uqbix0WzZdPXMqaStoKm4sdFs3XT1sKmkrZipuLHRbOF09YyppLWEqbix0WzldPXUqaS1vKm4sdFsxMF09aCppLXMqbix0WzExXT1mKmktbCpuLHR9fSx7fV0sMjYwOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1NYXRoLnNpbihyKSxpPU1hdGguY29zKHIpLGE9ZVswXSxvPWVbMV0scz1lWzJdLGw9ZVszXSxjPWVbOF0sdT1lWzldLGg9ZVsxMF0sZj1lWzExXTtlIT09dCYmKHRbNF09ZVs0XSx0WzVdPWVbNV0sdFs2XT1lWzZdLHRbN109ZVs3XSx0WzEyXT1lWzEyXSx0WzEzXT1lWzEzXSx0WzE0XT1lWzE0XSx0WzE1XT1lWzE1XSk7cmV0dXJuIHRbMF09YSppLWMqbix0WzFdPW8qaS11Km4sdFsyXT1zKmktaCpuLHRbM109bCppLWYqbix0WzhdPWEqbitjKmksdFs5XT1vKm4rdSppLHRbMTBdPXMqbitoKmksdFsxMV09bCpuK2YqaSx0fX0se31dLDI2MTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49TWF0aC5zaW4ociksaT1NYXRoLmNvcyhyKSxhPWVbMF0sbz1lWzFdLHM9ZVsyXSxsPWVbM10sYz1lWzRdLHU9ZVs1XSxoPWVbNl0sZj1lWzddO2UhPT10JiYodFs4XT1lWzhdLHRbOV09ZVs5XSx0WzEwXT1lWzEwXSx0WzExXT1lWzExXSx0WzEyXT1lWzEyXSx0WzEzXT1lWzEzXSx0WzE0XT1lWzE0XSx0WzE1XT1lWzE1XSk7cmV0dXJuIHRbMF09YSppK2Mqbix0WzFdPW8qaSt1Km4sdFsyXT1zKmkraCpuLHRbM109bCppK2Yqbix0WzRdPWMqaS1hKm4sdFs1XT11KmktbypuLHRbNl09aCppLXMqbix0WzddPWYqaS1sKm4sdH19LHt9XSwyNjI6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXJbMF0saT1yWzFdLGE9clsyXTtyZXR1cm4gdFswXT1lWzBdKm4sdFsxXT1lWzFdKm4sdFsyXT1lWzJdKm4sdFszXT1lWzNdKm4sdFs0XT1lWzRdKmksdFs1XT1lWzVdKmksdFs2XT1lWzZdKmksdFs3XT1lWzddKmksdFs4XT1lWzhdKmEsdFs5XT1lWzldKmEsdFsxMF09ZVsxMF0qYSx0WzExXT1lWzExXSphLHRbMTJdPWVbMTJdLHRbMTNdPWVbMTNdLHRbMTRdPWVbMTRdLHRbMTVdPWVbMTVdLHR9fSx7fV0sMjYzOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGEsbyxzLGwsYyx1LGgsZixwLGQsZz1yWzBdLG09clsxXSx2PXJbMl07ZT09PXQ/KHRbMTJdPWVbMF0qZytlWzRdKm0rZVs4XSp2K2VbMTJdLHRbMTNdPWVbMV0qZytlWzVdKm0rZVs5XSp2K2VbMTNdLHRbMTRdPWVbMl0qZytlWzZdKm0rZVsxMF0qditlWzE0XSx0WzE1XT1lWzNdKmcrZVs3XSptK2VbMTFdKnYrZVsxNV0pOihuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPWVbM10scz1lWzRdLGw9ZVs1XSxjPWVbNl0sdT1lWzddLGg9ZVs4XSxmPWVbOV0scD1lWzEwXSxkPWVbMTFdLHRbMF09bix0WzFdPWksdFsyXT1hLHRbM109byx0WzRdPXMsdFs1XT1sLHRbNl09Yyx0WzddPXUsdFs4XT1oLHRbOV09Zix0WzEwXT1wLHRbMTFdPWQsdFsxMl09bipnK3MqbStoKnYrZVsxMl0sdFsxM109aSpnK2wqbStmKnYrZVsxM10sdFsxNF09YSpnK2MqbStwKnYrZVsxNF0sdFsxNV09bypnK3UqbStkKnYrZVsxNV0pO3JldHVybiB0fX0se31dLDI2NDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKHQ9PT1lKXt2YXIgcj1lWzFdLG49ZVsyXSxpPWVbM10sYT1lWzZdLG89ZVs3XSxzPWVbMTFdO3RbMV09ZVs0XSx0WzJdPWVbOF0sdFszXT1lWzEyXSx0WzRdPXIsdFs2XT1lWzldLHRbN109ZVsxM10sdFs4XT1uLHRbOV09YSx0WzExXT1lWzE0XSx0WzEyXT1pLHRbMTNdPW8sdFsxNF09c31lbHNlIHRbMF09ZVswXSx0WzFdPWVbNF0sdFsyXT1lWzhdLHRbM109ZVsxMl0sdFs0XT1lWzFdLHRbNV09ZVs1XSx0WzZdPWVbOV0sdFs3XT1lWzEzXSx0WzhdPWVbMl0sdFs5XT1lWzZdLHRbMTBdPWVbMTBdLHRbMTFdPWVbMTRdLHRbMTJdPWVbM10sdFsxM109ZVs3XSx0WzE0XT1lWzExXSx0WzE1XT1lWzE1XTtyZXR1cm4gdH19LHt9XSwyNjU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7c3dpdGNoKGUubGVuZ3RoKXtjYXNlIDA6YnJlYWs7Y2FzZSAxOnRbMF09MS9lWzBdO2JyZWFrO2Nhc2UgNDpuKHQsZSk7YnJlYWs7Y2FzZSA5OmkodCxlKTticmVhaztjYXNlIDE2OmEodCxlKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiY3VycmVudGx5IHN1cHBvcnRzIG1hdHJpY2VzIHVwIHRvIDR4NCIpfXJldHVybiB0fTt2YXIgbj10KCJnbC1tYXQyL2ludmVydCIpLGk9dCgiZ2wtbWF0My9pbnZlcnQiKSxhPXQoImdsLW1hdDQvaW52ZXJ0Iil9LHsiZ2wtbWF0Mi9pbnZlcnQiOjI0NiwiZ2wtbWF0My9pbnZlcnQiOjI0NywiZ2wtbWF0NC9pbnZlcnQiOjI1NH1dLDI2NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJiYXJ5Y2VudHJpYyIpLGk9dCgicG9seXRvcGUtY2xvc2VzdC1wb2ludC9saWIvY2xvc2VzdF9wb2ludF8yZC5qcyIpO2Z1bmN0aW9uIGEodCxlKXtmb3IodmFyIHI9WzAsMCwwLDBdLG49MDtuPDQ7KytuKWZvcih2YXIgaT0wO2k8NDsrK2kpcltpXSs9dFs0Km4raV0qZVtuXTtyZXR1cm4gcn1mdW5jdGlvbiBvKHQsZSxyLG4saSl7Zm9yKHZhciBvPWEobixhKHIsYShlLFt0WzBdLHRbMV0sdFsyXSwxXSkpKSxzPTA7czwzOysrcylvW3NdLz1vWzNdO3JldHVyblsuNSppWzBdKigxK29bMF0pLC41KmlbMV0qKDEtb1sxXSldfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhLHMsbCl7aWYoMT09PXQubGVuZ3RoKXJldHVyblswLHRbMF0uc2xpY2UoKV07Zm9yKHZhciBjPW5ldyBBcnJheSh0Lmxlbmd0aCksdT0wO3U8dC5sZW5ndGg7Kyt1KWNbdV09byh0W3VdLHIsYSxzLGwpO2Zvcih2YXIgaD0wLGY9MS8wLHU9MDt1PGMubGVuZ3RoOysrdSl7Zm9yKHZhciBwPTAsZD0wO2Q8MjsrK2QpcCs9TWF0aC5wb3coY1t1XVtkXS1lW2RdLDIpO3A8ZiYmKGY9cCxoPXUpfWZvcih2YXIgZz1mdW5jdGlvbih0LGUpe2lmKDI9PT10Lmxlbmd0aCl7Zm9yKHZhciByPTAsYT0wLG89MDtvPDI7KytvKXIrPU1hdGgucG93KGVbb10tdFswXVtvXSwyKSxhKz1NYXRoLnBvdyhlW29dLXRbMV1bb10sMik7cmV0dXJuIHI9TWF0aC5zcXJ0KHIpLGE9TWF0aC5zcXJ0KGEpLHIrYTwxZS02P1sxLDBdOlthLyhyK2EpLHIvKGErcildfWlmKDM9PT10Lmxlbmd0aCl7dmFyIHM9WzAsMF07cmV0dXJuIGkodFswXSx0WzFdLHRbMl0sZSxzKSxuKHQscyl9cmV0dXJuW119KGMsZSksbT0wLHU9MDt1PDM7Kyt1KXtpZihnW3VdPC0uMDAxfHxnW3VdPjEuMDAwMSlyZXR1cm4gbnVsbDttKz1nW3VdfWlmKE1hdGguYWJzKG0tMSk+LjAwMSlyZXR1cm4gbnVsbDtyZXR1cm5baCxmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bMCwwLDBdLG49MDtuPHQubGVuZ3RoOysrbilmb3IodmFyIGk9dFtuXSxhPWVbbl0sbz0wO288MzsrK28pcltvXSs9YSppW29dO3JldHVybiByfSh0LGcpLGddfX0se2JhcnljZW50cmljOjYxLCJwb2x5dG9wZS1jbG9zZXN0LXBvaW50L2xpYi9jbG9zZXN0X3BvaW50XzJkLmpzIjo0NDh9XSwyNjc6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCJnbHNsaWZ5IiksaT1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb24sIG5vcm1hbDtcbmF0dHJpYnV0ZSB2ZWM0IGNvbG9yO1xuYXR0cmlidXRlIHZlYzIgdXY7XG5cbnVuaWZvcm0gbWF0NCBtb2RlbFxuICAgICAgICAgICAsIHZpZXdcbiAgICAgICAgICAgLCBwcm9qZWN0aW9uO1xudW5pZm9ybSB2ZWMzIGV5ZVBvc2l0aW9uXG4gICAgICAgICAgICwgbGlnaHRQb3NpdGlvbjtcblxudmFyeWluZyB2ZWMzIGZfbm9ybWFsXG4gICAgICAgICAgICwgZl9saWdodERpcmVjdGlvblxuICAgICAgICAgICAsIGZfZXllRGlyZWN0aW9uXG4gICAgICAgICAgICwgZl9kYXRhO1xudmFyeWluZyB2ZWM0IGZfY29sb3I7XG52YXJ5aW5nIHZlYzIgZl91djtcblxudm9pZCBtYWluKCkge1xuICB2ZWM0IG1fcG9zaXRpb24gID0gbW9kZWwgKiB2ZWM0KHBvc2l0aW9uLCAxLjApO1xuICB2ZWM0IHRfcG9zaXRpb24gID0gdmlldyAqIG1fcG9zaXRpb247XG4gIGdsX1Bvc2l0aW9uICAgICAgPSBwcm9qZWN0aW9uICogdF9wb3NpdGlvbjtcbiAgZl9jb2xvciAgICAgICAgICA9IGNvbG9yO1xuICBmX25vcm1hbCAgICAgICAgID0gbm9ybWFsO1xuICBmX2RhdGEgICAgICAgICAgID0gcG9zaXRpb247XG4gIGZfZXllRGlyZWN0aW9uICAgPSBleWVQb3NpdGlvbiAgIC0gcG9zaXRpb247XG4gIGZfbGlnaHREaXJlY3Rpb24gPSBsaWdodFBvc2l0aW9uIC0gcG9zaXRpb247XG4gIGZfdXYgICAgICAgICAgICAgPSB1djtcbn1cbiJdKSxhPW4oWyIjZXh0ZW5zaW9uIEdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyA6IGVuYWJsZVxuXG5wcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5mbG9hdCBiZWNrbWFubkRpc3RyaWJ1dGlvbihmbG9hdCB4LCBmbG9hdCByb3VnaG5lc3MpIHtcbiAgZmxvYXQgTmRvdEggPSBtYXgoeCwgMC4wMDAxKTtcbiAgZmxvYXQgY29zMkFscGhhID0gTmRvdEggKiBOZG90SDtcbiAgZmxvYXQgdGFuMkFscGhhID0gKGNvczJBbHBoYSAtIDEuMCkgLyBjb3MyQWxwaGE7XG4gIGZsb2F0IHJvdWdobmVzczIgPSByb3VnaG5lc3MgKiByb3VnaG5lc3M7XG4gIGZsb2F0IGRlbm9tID0gMy4xNDE1OTI2NTM1ODk3OTMgKiByb3VnaG5lc3MyICogY29zMkFscGhhICogY29zMkFscGhhO1xuICByZXR1cm4gZXhwKHRhbjJBbHBoYSAvIHJvdWdobmVzczIpIC8gZGVub207XG59XG5cbmZsb2F0IGNvb2tUb3JyYW5jZVNwZWN1bGFyKFxuICB2ZWMzIGxpZ2h0RGlyZWN0aW9uLFxuICB2ZWMzIHZpZXdEaXJlY3Rpb24sXG4gIHZlYzMgc3VyZmFjZU5vcm1hbCxcbiAgZmxvYXQgcm91Z2huZXNzLFxuICBmbG9hdCBmcmVzbmVsKSB7XG5cbiAgZmxvYXQgVmRvdE4gPSBtYXgoZG90KHZpZXdEaXJlY3Rpb24sIHN1cmZhY2VOb3JtYWwpLCAwLjApO1xuICBmbG9hdCBMZG90TiA9IG1heChkb3QobGlnaHREaXJlY3Rpb24sIHN1cmZhY2VOb3JtYWwpLCAwLjApO1xuXG4gIC8vSGFsZiBhbmdsZSB2ZWN0b3JcbiAgdmVjMyBIID0gbm9ybWFsaXplKGxpZ2h0RGlyZWN0aW9uICsgdmlld0RpcmVjdGlvbik7XG5cbiAgLy9HZW9tZXRyaWMgdGVybVxuICBmbG9hdCBOZG90SCA9IG1heChkb3Qoc3VyZmFjZU5vcm1hbCwgSCksIDAuMCk7XG4gIGZsb2F0IFZkb3RIID0gbWF4KGRvdCh2aWV3RGlyZWN0aW9uLCBIKSwgMC4wMDAwMDEpO1xuICBmbG9hdCBMZG90SCA9IG1heChkb3QobGlnaHREaXJlY3Rpb24sIEgpLCAwLjAwMDAwMSk7XG4gIGZsb2F0IEcxID0gKDIuMCAqIE5kb3RIICogVmRvdE4pIC8gVmRvdEg7XG4gIGZsb2F0IEcyID0gKDIuMCAqIE5kb3RIICogTGRvdE4pIC8gTGRvdEg7XG4gIGZsb2F0IEcgPSBtaW4oMS4wLCBtaW4oRzEsIEcyKSk7XG4gIFxuICAvL0Rpc3RyaWJ1dGlvbiB0ZXJtXG4gIGZsb2F0IEQgPSBiZWNrbWFubkRpc3RyaWJ1dGlvbihOZG90SCwgcm91Z2huZXNzKTtcblxuICAvL0ZyZXNuZWwgdGVybVxuICBmbG9hdCBGID0gcG93KDEuMCAtIFZkb3ROLCBmcmVzbmVsKTtcblxuICAvL011bHRpcGx5IHRlcm1zIGFuZCBkb25lXG4gIHJldHVybiAgRyAqIEYgKiBEIC8gbWF4KDMuMTQxNTkyNjUgKiBWZG90TiwgMC4wMDAwMDEpO1xufVxuXG52ZWMzIG5vcm1hbHModmVjMyBwb3MpIHtcbiAgdmVjMyBmZHggPSBkRmR4KHBvcyk7XG4gIHZlYzMgZmR5ID0gZEZkeShwb3MpO1xuICByZXR1cm4gbm9ybWFsaXplKGNyb3NzKGZkeCwgZmR5KSk7XG59XG5cbnVuaWZvcm0gdmVjMyBjbGlwQm91bmRzWzJdO1xudW5pZm9ybSBmbG9hdCByb3VnaG5lc3NcbiAgICAgICAgICAgICwgZnJlc25lbFxuICAgICAgICAgICAgLCBrYW1iaWVudFxuICAgICAgICAgICAgLCBrZGlmZnVzZVxuICAgICAgICAgICAgLCBrc3BlY3VsYXJcbiAgICAgICAgICAgICwgb3BhY2l0eTtcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XG5cbnZhcnlpbmcgdmVjMyBmX25vcm1hbFxuICAgICAgICAgICAsIGZfbGlnaHREaXJlY3Rpb25cbiAgICAgICAgICAgLCBmX2V5ZURpcmVjdGlvblxuICAgICAgICAgICAsIGZfZGF0YTtcbnZhcnlpbmcgdmVjNCBmX2NvbG9yO1xudmFyeWluZyB2ZWMyIGZfdXY7XG5cbnZvaWQgbWFpbigpIHtcbiAgaWYoYW55KGxlc3NUaGFuKGZfZGF0YSwgY2xpcEJvdW5kc1swXSkpIHx8XG4gICAgIGFueShncmVhdGVyVGhhbihmX2RhdGEsIGNsaXBCb3VuZHNbMV0pKSkge1xuICAgIGRpc2NhcmQ7XG4gIH1cblxuICB2ZWMzIE4gPSBub3JtYWxpemUoZl9ub3JtYWwpO1xuICB2ZWMzIEwgPSBub3JtYWxpemUoZl9saWdodERpcmVjdGlvbik7XG4gIHZlYzMgViA9IG5vcm1hbGl6ZShmX2V5ZURpcmVjdGlvbik7XG5cbiAgdmVjMyBub3JtYWwgPSBub3JtYWxzKGZfZGF0YSk7XG5cbiAgaWYgKFxuICAgIGRvdChOLCBub3JtYWwpIDwgMC4wXG4gICAgKSB7XG4gICAgICBOID0gLU47XG4gIH1cblxuICBmbG9hdCBzcGVjdWxhciA9IGNvb2tUb3JyYW5jZVNwZWN1bGFyKEwsIFYsIE4sIHJvdWdobmVzcywgZnJlc25lbCk7XG4gIGZsb2F0IGRpZmZ1c2UgID0gbWluKGthbWJpZW50ICsga2RpZmZ1c2UgKiBtYXgoZG90KE4sIEwpLCAwLjApLCAxLjApO1xuXG4gIHZlYzQgc3VyZmFjZUNvbG9yID0gZl9jb2xvciAqIHRleHR1cmUyRCh0ZXh0dXJlLCBmX3V2KTtcbiAgdmVjNCBsaXRDb2xvciA9IHN1cmZhY2VDb2xvci5hICogdmVjNChkaWZmdXNlICogc3VyZmFjZUNvbG9yLnJnYiArIGtzcGVjdWxhciAqIHZlYzMoMSwxLDEpICogc3BlY3VsYXIsICAxLjApO1xuXG4gIGdsX0ZyYWdDb2xvciA9IGxpdENvbG9yICogb3BhY2l0eTtcbn1cbiJdKSxvPW4oWyJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uO1xuYXR0cmlidXRlIHZlYzQgY29sb3I7XG5hdHRyaWJ1dGUgdmVjMiB1djtcblxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xuXG52YXJ5aW5nIHZlYzQgZl9jb2xvcjtcbnZhcnlpbmcgdmVjMyBmX2RhdGE7XG52YXJ5aW5nIHZlYzIgZl91djtcblxudm9pZCBtYWluKCkge1xuICBnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb24gKiB2aWV3ICogbW9kZWwgKiB2ZWM0KHBvc2l0aW9uLCAxLjApO1xuICBmX2NvbG9yID0gY29sb3I7XG4gIGZfZGF0YSAgPSBwb3NpdGlvbjtcbiAgZl91diAgICA9IHV2O1xufSJdKSxzPW4oWyJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnVuaWZvcm0gdmVjMyBjbGlwQm91bmRzWzJdO1xudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcblxudmFyeWluZyB2ZWM0IGZfY29sb3I7XG52YXJ5aW5nIHZlYzMgZl9kYXRhO1xudmFyeWluZyB2ZWMyIGZfdXY7XG5cbnZvaWQgbWFpbigpIHtcbiAgaWYoYW55KGxlc3NUaGFuKGZfZGF0YSwgY2xpcEJvdW5kc1swXSkpIHx8IFxuICAgICBhbnkoZ3JlYXRlclRoYW4oZl9kYXRhLCBjbGlwQm91bmRzWzFdKSkpIHtcbiAgICBkaXNjYXJkO1xuICB9XG5cbiAgZ2xfRnJhZ0NvbG9yID0gZl9jb2xvciAqIHRleHR1cmUyRCh0ZXh0dXJlLCBmX3V2KSAqIG9wYWNpdHk7XG59Il0pLGw9bihbInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb247XG5hdHRyaWJ1dGUgdmVjNCBjb2xvcjtcbmF0dHJpYnV0ZSB2ZWMyIHV2O1xuYXR0cmlidXRlIGZsb2F0IHBvaW50U2l6ZTtcblxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xudW5pZm9ybSB2ZWMzIGNsaXBCb3VuZHNbMl07XG5cbnZhcnlpbmcgdmVjNCBmX2NvbG9yO1xudmFyeWluZyB2ZWMyIGZfdXY7XG5cbnZvaWQgbWFpbigpIHtcbiAgaWYoYW55KGxlc3NUaGFuKHBvc2l0aW9uLCBjbGlwQm91bmRzWzBdKSkgfHwgXG4gICAgIGFueShncmVhdGVyVGhhbihwb3NpdGlvbiwgY2xpcEJvdW5kc1sxXSkpKSB7XG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KDAsMCwwLDApO1xuICB9IGVsc2Uge1xuICAgIGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQocG9zaXRpb24sIDEuMCk7XG4gIH1cbiAgZ2xfUG9pbnRTaXplID0gcG9pbnRTaXplO1xuICBmX2NvbG9yID0gY29sb3I7XG4gIGZfdXYgPSB1djtcbn0iXSksYz1uKFsicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuXG52YXJ5aW5nIHZlYzQgZl9jb2xvcjtcbnZhcnlpbmcgdmVjMiBmX3V2O1xuXG52b2lkIG1haW4oKSB7XG4gIHZlYzIgcG9pbnRSID0gZ2xfUG9pbnRDb29yZC54eSAtIHZlYzIoMC41LDAuNSk7XG4gIGlmKGRvdChwb2ludFIsIHBvaW50UikgPiAwLjI1KSB7XG4gICAgZGlzY2FyZDtcbiAgfVxuICBnbF9GcmFnQ29sb3IgPSBmX2NvbG9yICogdGV4dHVyZTJEKHRleHR1cmUsIGZfdXYpICogb3BhY2l0eTtcbn0iXSksdT1uKFsicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcbmF0dHJpYnV0ZSB2ZWM0IGlkO1xuXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XG5cbnZhcnlpbmcgdmVjMyBmX3Bvc2l0aW9uO1xudmFyeWluZyB2ZWM0IGZfaWQ7XG5cbnZvaWQgbWFpbigpIHtcbiAgZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNChwb3NpdGlvbiwgMS4wKTtcbiAgZl9pZCAgICAgICAgPSBpZDtcbiAgZl9wb3NpdGlvbiAgPSBwb3NpdGlvbjtcbn0iXSksaD1uKFsicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG51bmlmb3JtIHZlYzMgIGNsaXBCb3VuZHNbMl07XG51bmlmb3JtIGZsb2F0IHBpY2tJZDtcblxudmFyeWluZyB2ZWMzIGZfcG9zaXRpb247XG52YXJ5aW5nIHZlYzQgZl9pZDtcblxudm9pZCBtYWluKCkge1xuICBpZihhbnkobGVzc1RoYW4oZl9wb3NpdGlvbiwgY2xpcEJvdW5kc1swXSkpIHx8IFxuICAgICBhbnkoZ3JlYXRlclRoYW4oZl9wb3NpdGlvbiwgY2xpcEJvdW5kc1sxXSkpKSB7XG4gICAgZGlzY2FyZDtcbiAgfVxuICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHBpY2tJZCwgZl9pZC54eXopO1xufSJdKSxmPW4oWyJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMzICBwb3NpdGlvbjtcbmF0dHJpYnV0ZSBmbG9hdCBwb2ludFNpemU7XG5hdHRyaWJ1dGUgdmVjNCAgaWQ7XG5cbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcbnVuaWZvcm0gdmVjMyBjbGlwQm91bmRzWzJdO1xuXG52YXJ5aW5nIHZlYzMgZl9wb3NpdGlvbjtcbnZhcnlpbmcgdmVjNCBmX2lkO1xuXG52b2lkIG1haW4oKSB7XG4gIGlmKGFueShsZXNzVGhhbihwb3NpdGlvbiwgY2xpcEJvdW5kc1swXSkpIHx8IFxuICAgICBhbnkoZ3JlYXRlclRoYW4ocG9zaXRpb24sIGNsaXBCb3VuZHNbMV0pKSkge1xuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgwLDAsMCwwKTtcbiAgfSBlbHNlIHtcbiAgICBnbF9Qb3NpdGlvbiAgPSBwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNChwb3NpdGlvbiwgMS4wKTtcbiAgICBnbF9Qb2ludFNpemUgPSBwb2ludFNpemU7XG4gIH1cbiAgZl9pZCAgICAgICAgID0gaWQ7XG4gIGZfcG9zaXRpb24gICA9IHBvc2l0aW9uO1xufSJdKSxwPW4oWyJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uO1xuXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XG5cbnZvaWQgbWFpbigpIHtcbiAgZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNChwb3NpdGlvbiwgMS4wKTtcbn0iXSksZD1uKFsicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG51bmlmb3JtIHZlYzMgY29udG91ckNvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29udG91ckNvbG9yLDEpO1xufVxuIl0pO3IubWVzaFNoYWRlcj17dmVydGV4OmksZnJhZ21lbnQ6YSxhdHRyaWJ1dGVzOlt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzMifSx7bmFtZToibm9ybWFsIix0eXBlOiJ2ZWMzIn0se25hbWU6ImNvbG9yIix0eXBlOiJ2ZWM0In0se25hbWU6InV2Iix0eXBlOiJ2ZWMyIn1dfSxyLndpcmVTaGFkZXI9e3ZlcnRleDpvLGZyYWdtZW50OnMsYXR0cmlidXRlczpbe25hbWU6InBvc2l0aW9uIix0eXBlOiJ2ZWMzIn0se25hbWU6ImNvbG9yIix0eXBlOiJ2ZWM0In0se25hbWU6InV2Iix0eXBlOiJ2ZWMyIn1dfSxyLnBvaW50U2hhZGVyPXt2ZXJ0ZXg6bCxmcmFnbWVudDpjLGF0dHJpYnV0ZXM6W3tuYW1lOiJwb3NpdGlvbiIsdHlwZToidmVjMyJ9LHtuYW1lOiJjb2xvciIsdHlwZToidmVjNCJ9LHtuYW1lOiJ1diIsdHlwZToidmVjMiJ9LHtuYW1lOiJwb2ludFNpemUiLHR5cGU6ImZsb2F0In1dfSxyLnBpY2tTaGFkZXI9e3ZlcnRleDp1LGZyYWdtZW50OmgsYXR0cmlidXRlczpbe25hbWU6InBvc2l0aW9uIix0eXBlOiJ2ZWMzIn0se25hbWU6ImlkIix0eXBlOiJ2ZWM0In1dfSxyLnBvaW50UGlja1NoYWRlcj17dmVydGV4OmYsZnJhZ21lbnQ6aCxhdHRyaWJ1dGVzOlt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzMifSx7bmFtZToicG9pbnRTaXplIix0eXBlOiJmbG9hdCJ9LHtuYW1lOiJpZCIsdHlwZToidmVjNCJ9XX0sci5jb250b3VyU2hhZGVyPXt2ZXJ0ZXg6cCxmcmFnbWVudDpkLGF0dHJpYnV0ZXM6W3tuYW1lOiJwb3NpdGlvbiIsdHlwZToidmVjMyJ9XX19LHtnbHNsaWZ5OjM3N31dLDI2ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJnbC1zaGFkZXIiKSxpPXQoImdsLWJ1ZmZlciIpLGE9dCgiZ2wtdmFvIiksbz10KCJnbC10ZXh0dXJlMmQiKSxzPXQoIm5vcm1hbHMiKSxsPXQoImdsLW1hdDQvbXVsdGlwbHkiKSxjPXQoImdsLW1hdDQvaW52ZXJ0IiksdT10KCJuZGFycmF5IiksaD10KCJjb2xvcm1hcCIpLGY9dCgic2ltcGxpY2lhbC1jb21wbGV4LWNvbnRvdXIiKSxwPXQoInR5cGVkYXJyYXktcG9vbCIpLGQ9dCgiLi9saWIvc2hhZGVycyIpLGc9dCgiLi9saWIvY2xvc2VzdC1wb2ludCIpLG09ZC5tZXNoU2hhZGVyLHY9ZC53aXJlU2hhZGVyLHk9ZC5wb2ludFNoYWRlcix4PWQucGlja1NoYWRlcixiPWQucG9pbnRQaWNrU2hhZGVyLF89ZC5jb250b3VyU2hhZGVyLHc9WzEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDFdO2Z1bmN0aW9uIGsodCxlLHIsbixpLGEsbyxzLGwsYyx1LGgsZixwLGQsZyxtLHYseSx4LGIsXyxrLE0sQSxULFMpe3RoaXMuZ2w9dCx0aGlzLmNlbGxzPVtdLHRoaXMucG9zaXRpb25zPVtdLHRoaXMuaW50ZW5zaXR5PVtdLHRoaXMudGV4dHVyZT1lLHRoaXMuZGlydHk9ITAsdGhpcy50cmlTaGFkZXI9cix0aGlzLmxpbmVTaGFkZXI9bix0aGlzLnBvaW50U2hhZGVyPWksdGhpcy5waWNrU2hhZGVyPWEsdGhpcy5wb2ludFBpY2tTaGFkZXI9byx0aGlzLmNvbnRvdXJTaGFkZXI9cyx0aGlzLnRyaWFuZ2xlUG9zaXRpb25zPWwsdGhpcy50cmlhbmdsZUNvbG9ycz11LHRoaXMudHJpYW5nbGVOb3JtYWxzPWYsdGhpcy50cmlhbmdsZVVWcz1oLHRoaXMudHJpYW5nbGVJZHM9Yyx0aGlzLnRyaWFuZ2xlVkFPPXAsdGhpcy50cmlhbmdsZUNvdW50PTAsdGhpcy5saW5lV2lkdGg9MSx0aGlzLmVkZ2VQb3NpdGlvbnM9ZCx0aGlzLmVkZ2VDb2xvcnM9bSx0aGlzLmVkZ2VVVnM9dix0aGlzLmVkZ2VJZHM9Zyx0aGlzLmVkZ2VWQU89eSx0aGlzLmVkZ2VDb3VudD0wLHRoaXMucG9pbnRQb3NpdGlvbnM9eCx0aGlzLnBvaW50Q29sb3JzPV8sdGhpcy5wb2ludFVWcz1rLHRoaXMucG9pbnRTaXplcz1NLHRoaXMucG9pbnRJZHM9Yix0aGlzLnBvaW50VkFPPUEsdGhpcy5wb2ludENvdW50PTAsdGhpcy5jb250b3VyTGluZVdpZHRoPTEsdGhpcy5jb250b3VyUG9zaXRpb25zPVQsdGhpcy5jb250b3VyVkFPPVMsdGhpcy5jb250b3VyQ291bnQ9MCx0aGlzLmNvbnRvdXJDb2xvcj1bMCwwLDBdLHRoaXMuY29udG91ckVuYWJsZT0hMCx0aGlzLnBpY2tJZD0xLHRoaXMuYm91bmRzPVtbMS8wLDEvMCwxLzBdLFstMS8wLC0xLzAsLTEvMF1dLHRoaXMuY2xpcEJvdW5kcz1bWy0xLzAsLTEvMCwtMS8wXSxbMS8wLDEvMCwxLzBdXSx0aGlzLmxpZ2h0UG9zaXRpb249WzFlNSwxZTUsMF0sdGhpcy5hbWJpZW50TGlnaHQ9LjgsdGhpcy5kaWZmdXNlTGlnaHQ9LjgsdGhpcy5zcGVjdWxhckxpZ2h0PTIsdGhpcy5yb3VnaG5lc3M9LjUsdGhpcy5mcmVzbmVsPTEuNSx0aGlzLm9wYWNpdHk9MSx0aGlzLl9tb2RlbD13LHRoaXMuX3ZpZXc9dyx0aGlzLl9wcm9qZWN0aW9uPXcsdGhpcy5fcmVzb2x1dGlvbj1bMSwxXX12YXIgTT1rLnByb3RvdHlwZTtmdW5jdGlvbiBBKHQpe3ZhciBlPW4odCx5LnZlcnRleCx5LmZyYWdtZW50KTtyZXR1cm4gZS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmxvY2F0aW9uPTAsZS5hdHRyaWJ1dGVzLmNvbG9yLmxvY2F0aW9uPTIsZS5hdHRyaWJ1dGVzLnV2LmxvY2F0aW9uPTMsZS5hdHRyaWJ1dGVzLnBvaW50U2l6ZS5sb2NhdGlvbj00LGV9ZnVuY3Rpb24gVCh0KXt2YXIgZT1uKHQseC52ZXJ0ZXgseC5mcmFnbWVudCk7cmV0dXJuIGUuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLGUuYXR0cmlidXRlcy5pZC5sb2NhdGlvbj0xLGV9ZnVuY3Rpb24gUyh0KXt2YXIgZT1uKHQsYi52ZXJ0ZXgsYi5mcmFnbWVudCk7cmV0dXJuIGUuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLGUuYXR0cmlidXRlcy5pZC5sb2NhdGlvbj0xLGUuYXR0cmlidXRlcy5wb2ludFNpemUubG9jYXRpb249NCxlfWZ1bmN0aW9uIEUodCl7dmFyIGU9bih0LF8udmVydGV4LF8uZnJhZ21lbnQpO3JldHVybiBlLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCxlfU0uaXNPcGFxdWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcGFjaXR5Pj0xfSxNLmlzVHJhbnNwYXJlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcGFjaXR5PDF9LE0ucGlja1Nsb3RzPTEsTS5zZXRQaWNrQmFzZT1mdW5jdGlvbih0KXt0aGlzLnBpY2tJZD10fSxNLmhpZ2hsaWdodD1mdW5jdGlvbih0KXtpZih0JiZ0aGlzLmNvbnRvdXJFbmFibGUpe2Zvcih2YXIgZT1mKHRoaXMuY2VsbHMsdGhpcy5pbnRlbnNpdHksdC5pbnRlbnNpdHkpLHI9ZS5jZWxscyxuPWUudmVydGV4SWRzLGk9ZS52ZXJ0ZXhXZWlnaHRzLGE9ci5sZW5ndGgsbz1wLm1hbGxvY0Zsb2F0MzIoNiphKSxzPTAsbD0wO2w8YTsrK2wpZm9yKHZhciBjPXJbbF0sdT0wO3U8MjsrK3Upe3ZhciBoPWNbMF07Mj09PWMubGVuZ3RoJiYoaD1jW3VdKTtmb3IodmFyIGQ9bltoXVswXSxnPW5baF1bMV0sbT1pW2hdLHY9MS1tLHk9dGhpcy5wb3NpdGlvbnNbZF0seD10aGlzLnBvc2l0aW9uc1tnXSxiPTA7YjwzOysrYilvW3MrK109bSp5W2JdK3YqeFtiXX10aGlzLmNvbnRvdXJDb3VudD1zLzN8MCx0aGlzLmNvbnRvdXJQb3NpdGlvbnMudXBkYXRlKG8uc3ViYXJyYXkoMCxzKSkscC5mcmVlKG8pfWVsc2UgdGhpcy5jb250b3VyQ291bnQ9MH0sTS51cGRhdGU9ZnVuY3Rpb24odCl7dD10fHx7fTt2YXIgZT10aGlzLmdsO3RoaXMuZGlydHk9ITAsImNvbnRvdXJFbmFibGUiaW4gdCYmKHRoaXMuY29udG91ckVuYWJsZT10LmNvbnRvdXJFbmFibGUpLCJjb250b3VyQ29sb3IiaW4gdCYmKHRoaXMuY29udG91ckNvbG9yPXQuY29udG91ckNvbG9yKSwibGluZVdpZHRoImluIHQmJih0aGlzLmxpbmVXaWR0aD10LmxpbmVXaWR0aCksImxpZ2h0UG9zaXRpb24iaW4gdCYmKHRoaXMubGlnaHRQb3NpdGlvbj10LmxpZ2h0UG9zaXRpb24pLCJvcGFjaXR5ImluIHQmJih0aGlzLm9wYWNpdHk9dC5vcGFjaXR5KSwiYW1iaWVudCJpbiB0JiYodGhpcy5hbWJpZW50TGlnaHQ9dC5hbWJpZW50KSwiZGlmZnVzZSJpbiB0JiYodGhpcy5kaWZmdXNlTGlnaHQ9dC5kaWZmdXNlKSwic3BlY3VsYXIiaW4gdCYmKHRoaXMuc3BlY3VsYXJMaWdodD10LnNwZWN1bGFyKSwicm91Z2huZXNzImluIHQmJih0aGlzLnJvdWdobmVzcz10LnJvdWdobmVzcyksImZyZXNuZWwiaW4gdCYmKHRoaXMuZnJlc25lbD10LmZyZXNuZWwpLHQudGV4dHVyZT8odGhpcy50ZXh0dXJlLmRpc3Bvc2UoKSx0aGlzLnRleHR1cmU9byhlLHQudGV4dHVyZSkpOnQuY29sb3JtYXAmJih0aGlzLnRleHR1cmUuc2hhcGU9WzI1NiwyNTZdLHRoaXMudGV4dHVyZS5taW5GaWx0ZXI9ZS5MSU5FQVJfTUlQTUFQX0xJTkVBUix0aGlzLnRleHR1cmUubWFnRmlsdGVyPWUuTElORUFSLHRoaXMudGV4dHVyZS5zZXRQaXhlbHMoZnVuY3Rpb24odCl7Zm9yKHZhciBlPWgoe2NvbG9ybWFwOnQsbnNoYWRlczoyNTYsZm9ybWF0OiJyZ2JhIn0pLHI9bmV3IFVpbnQ4QXJyYXkoMTAyNCksbj0wO248MjU2Oysrbil7Zm9yKHZhciBpPWVbbl0sYT0wO2E8MzsrK2Epcls0Km4rYV09aVthXTtyWzQqbiszXT0yNTUqaVszXX1yZXR1cm4gdShyLFsyNTYsMjU2LDRdLFs0LDAsMV0pfSh0LmNvbG9ybWFwKSksdGhpcy50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwKCkpO3ZhciByPXQuY2VsbHMsbj10LnBvc2l0aW9ucztpZihuJiZyKXt2YXIgaT1bXSxhPVtdLGw9W10sYz1bXSxmPVtdLHA9W10sZD1bXSxnPVtdLG09W10sdj1bXSx5PVtdLHg9W10sYj1bXSxfPVtdO3RoaXMuY2VsbHM9cix0aGlzLnBvc2l0aW9ucz1uO3ZhciB3PXQudmVydGV4Tm9ybWFscyxrPXQuY2VsbE5vcm1hbHMsTT12b2lkIDA9PT10LnZlcnRleE5vcm1hbHNFcHNpbG9uPzFlLTY6dC52ZXJ0ZXhOb3JtYWxzRXBzaWxvbixBPXZvaWQgMD09PXQuZmFjZU5vcm1hbHNFcHNpbG9uPzFlLTY6dC5mYWNlTm9ybWFsc0Vwc2lsb247dC51c2VGYWNldE5vcm1hbHMmJiFrJiYoaz1zLmZhY2VOb3JtYWxzKHIsbixBKSksa3x8d3x8KHc9cy52ZXJ0ZXhOb3JtYWxzKHIsbixNKSk7dmFyIFQ9dC52ZXJ0ZXhDb2xvcnMsUz10LmNlbGxDb2xvcnMsRT10Lm1lc2hDb2xvcnx8WzEsMSwxLDFdLEM9dC52ZXJ0ZXhVVnMsTD10LnZlcnRleEludGVuc2l0eSx6PXQuY2VsbFVWcyxQPXQuY2VsbEludGVuc2l0eSxJPTEvMCxPPS0xLzA7aWYoIUMmJiF6KWlmKEwpaWYodC52ZXJ0ZXhJbnRlbnNpdHlCb3VuZHMpST0rdC52ZXJ0ZXhJbnRlbnNpdHlCb3VuZHNbMF0sTz0rdC52ZXJ0ZXhJbnRlbnNpdHlCb3VuZHNbMV07ZWxzZSBmb3IodmFyIEQ9MDtEPEwubGVuZ3RoOysrRCl7dmFyIFI9TFtEXTtJPU1hdGgubWluKEksUiksTz1NYXRoLm1heChPLFIpfWVsc2UgaWYoUClmb3IoRD0wO0Q8UC5sZW5ndGg7KytEKXtSPVBbRF07ST1NYXRoLm1pbihJLFIpLE89TWF0aC5tYXgoTyxSKX1lbHNlIGZvcihEPTA7RDxuLmxlbmd0aDsrK0Qpe1I9bltEXVsyXTtJPU1hdGgubWluKEksUiksTz1NYXRoLm1heChPLFIpfXRoaXMuaW50ZW5zaXR5PUx8fChQP2Z1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49bmV3IEFycmF5KGUpLGk9MDtpPGU7KytpKW5baV09MDt2YXIgYT10Lmxlbmd0aDtmb3IoaT0wO2k8YTsrK2kpZm9yKHZhciBvPXRbaV0scz0wO3M8by5sZW5ndGg7KytzKW5bb1tzXV09cltpXTtyZXR1cm4gbn0ocixuLmxlbmd0aCxQKTpmdW5jdGlvbih0KXtmb3IodmFyIGU9dC5sZW5ndGgscj1uZXcgQXJyYXkoZSksbj0wO248ZTsrK24pcltuXT10W25dWzJdO3JldHVybiByfShuKSk7dmFyIEI9dC5wb2ludFNpemVzLEY9dC5wb2ludFNpemV8fDE7dGhpcy5ib3VuZHM9W1sxLzAsMS8wLDEvMF0sWy0xLzAsLTEvMCwtMS8wXV07Zm9yKEQ9MDtEPG4ubGVuZ3RoOysrRClmb3IodmFyIE49bltEXSxqPTA7ajwzOysraikhaXNOYU4oTltqXSkmJmlzRmluaXRlKE5bal0pJiYodGhpcy5ib3VuZHNbMF1bal09TWF0aC5taW4odGhpcy5ib3VuZHNbMF1bal0sTltqXSksdGhpcy5ib3VuZHNbMV1bal09TWF0aC5tYXgodGhpcy5ib3VuZHNbMV1bal0sTltqXSkpO3ZhciBWPTAsVT0wLHE9MDt0OmZvcihEPTA7RDxyLmxlbmd0aDsrK0Qpe3ZhciBIPXJbRF07c3dpdGNoKEgubGVuZ3RoKXtjYXNlIDE6Zm9yKE49bltXPUhbMF1dLGo9MDtqPDM7KytqKWlmKGlzTmFOKE5bal0pfHwhaXNGaW5pdGUoTltqXSkpY29udGludWUgdDt2LnB1c2goTlswXSxOWzFdLE5bMl0pLDM9PT0oWT1UP1RbV106Uz9TW0RdOkUpLmxlbmd0aD95LnB1c2goWVswXSxZWzFdLFlbMl0sMSk6eS5wdXNoKFlbMF0sWVsxXSxZWzJdLFlbM10pLFg9Qz9DW1ddOkw/WyhMW1ddLUkpLyhPLUkpLDBdOno/eltEXTpQP1soUFtEXS1JKS8oTy1JKSwwXTpbKE5bMl0tSSkvKE8tSSksMF0seC5wdXNoKFhbMF0sWFsxXSksQj9iLnB1c2goQltXXSk6Yi5wdXNoKEYpLF8ucHVzaChEKSxxKz0xO2JyZWFrO2Nhc2UgMjpmb3Ioaj0wO2o8MjsrK2ope049bltXPUhbal1dO2Zvcih2YXIgRz0wO0c8MzsrK0cpaWYoaXNOYU4oTltHXSl8fCFpc0Zpbml0ZShOW0ddKSljb250aW51ZSB0fWZvcihqPTA7ajwyOysrail7Tj1uW1c9SFtqXV07cC5wdXNoKE5bMF0sTlsxXSxOWzJdKSwzPT09KFk9VD9UW1ddOlM/U1tEXTpFKS5sZW5ndGg/ZC5wdXNoKFlbMF0sWVsxXSxZWzJdLDEpOmQucHVzaChZWzBdLFlbMV0sWVsyXSxZWzNdKSxYPUM/Q1tXXTpMP1soTFtXXS1JKS8oTy1JKSwwXTp6P3pbRF06UD9bKFBbRF0tSSkvKE8tSSksMF06WyhOWzJdLUkpLyhPLUkpLDBdLGcucHVzaChYWzBdLFhbMV0pLG0ucHVzaChEKX1VKz0xO2JyZWFrO2Nhc2UgMzpmb3Ioaj0wO2o8MzsrK2opZm9yKE49bltXPUhbal1dLEc9MDtHPDM7KytHKWlmKGlzTmFOKE5bR10pfHwhaXNGaW5pdGUoTltHXSkpY29udGludWUgdDtmb3Ioaj0wO2o8MzsrK2ope3ZhciBXLFksWCxaO049bltXPUhbal1dO2kucHVzaChOWzBdLE5bMV0sTlsyXSksMz09PShZPVQ/VFtXXTpTP1NbRF06RSkubGVuZ3RoP2EucHVzaChZWzBdLFlbMV0sWVsyXSwxKTphLnB1c2goWVswXSxZWzFdLFlbMl0sWVszXSksWD1DP0NbV106TD9bKExbV10tSSkvKE8tSSksMF06ej96W0RdOlA/WyhQW0RdLUkpLyhPLUkpLDBdOlsoTlsyXS1JKS8oTy1JKSwwXSxjLnB1c2goWFswXSxYWzFdKSxaPXc/d1tXXTprW0RdLGwucHVzaChaWzBdLFpbMV0sWlsyXSksZi5wdXNoKEQpfVYrPTF9fXRoaXMucG9pbnRDb3VudD1xLHRoaXMuZWRnZUNvdW50PVUsdGhpcy50cmlhbmdsZUNvdW50PVYsdGhpcy5wb2ludFBvc2l0aW9ucy51cGRhdGUodiksdGhpcy5wb2ludENvbG9ycy51cGRhdGUoeSksdGhpcy5wb2ludFVWcy51cGRhdGUoeCksdGhpcy5wb2ludFNpemVzLnVwZGF0ZShiKSx0aGlzLnBvaW50SWRzLnVwZGF0ZShuZXcgVWludDMyQXJyYXkoXykpLHRoaXMuZWRnZVBvc2l0aW9ucy51cGRhdGUocCksdGhpcy5lZGdlQ29sb3JzLnVwZGF0ZShkKSx0aGlzLmVkZ2VVVnMudXBkYXRlKGcpLHRoaXMuZWRnZUlkcy51cGRhdGUobmV3IFVpbnQzMkFycmF5KG0pKSx0aGlzLnRyaWFuZ2xlUG9zaXRpb25zLnVwZGF0ZShpKSx0aGlzLnRyaWFuZ2xlQ29sb3JzLnVwZGF0ZShhKSx0aGlzLnRyaWFuZ2xlVVZzLnVwZGF0ZShjKSx0aGlzLnRyaWFuZ2xlTm9ybWFscy51cGRhdGUobCksdGhpcy50cmlhbmdsZUlkcy51cGRhdGUobmV3IFVpbnQzMkFycmF5KGYpKX19LE0uZHJhd1RyYW5zcGFyZW50PU0uZHJhdz1mdW5jdGlvbih0KXt0PXR8fHt9O2Zvcih2YXIgZT10aGlzLmdsLHI9dC5tb2RlbHx8dyxuPXQudmlld3x8dyxpPXQucHJvamVjdGlvbnx8dyxhPVtbLTFlNiwtMWU2LC0xZTZdLFsxZTYsMWU2LDFlNl1dLG89MDtvPDM7KytvKWFbMF1bb109TWF0aC5tYXgoYVswXVtvXSx0aGlzLmNsaXBCb3VuZHNbMF1bb10pLGFbMV1bb109TWF0aC5taW4oYVsxXVtvXSx0aGlzLmNsaXBCb3VuZHNbMV1bb10pO3ZhciBzPXttb2RlbDpyLHZpZXc6bixwcm9qZWN0aW9uOmksY2xpcEJvdW5kczphLGthbWJpZW50OnRoaXMuYW1iaWVudExpZ2h0LGtkaWZmdXNlOnRoaXMuZGlmZnVzZUxpZ2h0LGtzcGVjdWxhcjp0aGlzLnNwZWN1bGFyTGlnaHQscm91Z2huZXNzOnRoaXMucm91Z2huZXNzLGZyZXNuZWw6dGhpcy5mcmVzbmVsLGV5ZVBvc2l0aW9uOlswLDAsMF0sbGlnaHRQb3NpdGlvbjpbMCwwLDBdLG9wYWNpdHk6dGhpcy5vcGFjaXR5LGNvbnRvdXJDb2xvcjp0aGlzLmNvbnRvdXJDb2xvcix0ZXh0dXJlOjB9O3RoaXMudGV4dHVyZS5iaW5kKDApO3ZhciB1PW5ldyBBcnJheSgxNik7bCh1LHMudmlldyxzLm1vZGVsKSxsKHUscy5wcm9qZWN0aW9uLHUpLGModSx1KTtmb3Iobz0wO288MzsrK28pcy5leWVQb3NpdGlvbltvXT11WzEyK29dL3VbMTVdO3ZhciBoLGY9dVsxNV07Zm9yKG89MDtvPDM7KytvKWYrPXRoaXMubGlnaHRQb3NpdGlvbltvXSp1WzQqbyszXTtmb3Iobz0wO288MzsrK28pe2Zvcih2YXIgcD11WzEyK29dLGQ9MDtkPDM7KytkKXArPXVbNCpkK29dKnRoaXMubGlnaHRQb3NpdGlvbltkXTtzLmxpZ2h0UG9zaXRpb25bb109cC9mfXRoaXMudHJpYW5nbGVDb3VudD4wJiYoKGg9dGhpcy50cmlTaGFkZXIpLmJpbmQoKSxoLnVuaWZvcm1zPXMsdGhpcy50cmlhbmdsZVZBTy5iaW5kKCksZS5kcmF3QXJyYXlzKGUuVFJJQU5HTEVTLDAsMyp0aGlzLnRyaWFuZ2xlQ291bnQpLHRoaXMudHJpYW5nbGVWQU8udW5iaW5kKCkpO3RoaXMuZWRnZUNvdW50PjAmJnRoaXMubGluZVdpZHRoPjAmJigoaD10aGlzLmxpbmVTaGFkZXIpLmJpbmQoKSxoLnVuaWZvcm1zPXMsdGhpcy5lZGdlVkFPLmJpbmQoKSxlLmxpbmVXaWR0aCh0aGlzLmxpbmVXaWR0aCksZS5kcmF3QXJyYXlzKGUuTElORVMsMCwyKnRoaXMuZWRnZUNvdW50KSx0aGlzLmVkZ2VWQU8udW5iaW5kKCkpO3RoaXMucG9pbnRDb3VudD4wJiYoKGg9dGhpcy5wb2ludFNoYWRlcikuYmluZCgpLGgudW5pZm9ybXM9cyx0aGlzLnBvaW50VkFPLmJpbmQoKSxlLmRyYXdBcnJheXMoZS5QT0lOVFMsMCx0aGlzLnBvaW50Q291bnQpLHRoaXMucG9pbnRWQU8udW5iaW5kKCkpO3RoaXMuY29udG91ckVuYWJsZSYmdGhpcy5jb250b3VyQ291bnQ+MCYmdGhpcy5jb250b3VyTGluZVdpZHRoPjAmJigoaD10aGlzLmNvbnRvdXJTaGFkZXIpLmJpbmQoKSxoLnVuaWZvcm1zPXMsdGhpcy5jb250b3VyVkFPLmJpbmQoKSxlLmRyYXdBcnJheXMoZS5MSU5FUywwLHRoaXMuY29udG91ckNvdW50KSx0aGlzLmNvbnRvdXJWQU8udW5iaW5kKCkpfSxNLmRyYXdQaWNrPWZ1bmN0aW9uKHQpe3Q9dHx8e307Zm9yKHZhciBlPXRoaXMuZ2wscj10Lm1vZGVsfHx3LG49dC52aWV3fHx3LGk9dC5wcm9qZWN0aW9ufHx3LGE9W1stMWU2LC0xZTYsLTFlNl0sWzFlNiwxZTYsMWU2XV0sbz0wO288MzsrK28pYVswXVtvXT1NYXRoLm1heChhWzBdW29dLHRoaXMuY2xpcEJvdW5kc1swXVtvXSksYVsxXVtvXT1NYXRoLm1pbihhWzFdW29dLHRoaXMuY2xpcEJvdW5kc1sxXVtvXSk7dGhpcy5fbW9kZWw9W10uc2xpY2UuY2FsbChyKSx0aGlzLl92aWV3PVtdLnNsaWNlLmNhbGwobiksdGhpcy5fcHJvamVjdGlvbj1bXS5zbGljZS5jYWxsKGkpLHRoaXMuX3Jlc29sdXRpb249W2UuZHJhd2luZ0J1ZmZlcldpZHRoLGUuZHJhd2luZ0J1ZmZlckhlaWdodF07dmFyIHMsbD17bW9kZWw6cix2aWV3Om4scHJvamVjdGlvbjppLGNsaXBCb3VuZHM6YSxwaWNrSWQ6dGhpcy5waWNrSWQvMjU1fTsoKHM9dGhpcy5waWNrU2hhZGVyKS5iaW5kKCkscy51bmlmb3Jtcz1sLHRoaXMudHJpYW5nbGVDb3VudD4wJiYodGhpcy50cmlhbmdsZVZBTy5iaW5kKCksZS5kcmF3QXJyYXlzKGUuVFJJQU5HTEVTLDAsMyp0aGlzLnRyaWFuZ2xlQ291bnQpLHRoaXMudHJpYW5nbGVWQU8udW5iaW5kKCkpLHRoaXMuZWRnZUNvdW50PjAmJih0aGlzLmVkZ2VWQU8uYmluZCgpLGUubGluZVdpZHRoKHRoaXMubGluZVdpZHRoKSxlLmRyYXdBcnJheXMoZS5MSU5FUywwLDIqdGhpcy5lZGdlQ291bnQpLHRoaXMuZWRnZVZBTy51bmJpbmQoKSksdGhpcy5wb2ludENvdW50PjApJiYoKHM9dGhpcy5wb2ludFBpY2tTaGFkZXIpLmJpbmQoKSxzLnVuaWZvcm1zPWwsdGhpcy5wb2ludFZBTy5iaW5kKCksZS5kcmF3QXJyYXlzKGUuUE9JTlRTLDAsdGhpcy5wb2ludENvdW50KSx0aGlzLnBvaW50VkFPLnVuYmluZCgpKX0sTS5waWNrPWZ1bmN0aW9uKHQpe2lmKCF0KXJldHVybiBudWxsO2lmKHQuaWQhPT10aGlzLnBpY2tJZClyZXR1cm4gbnVsbDtmb3IodmFyIGU9dC52YWx1ZVswXSsyNTYqdC52YWx1ZVsxXSs2NTUzNip0LnZhbHVlWzJdLHI9dGhpcy5jZWxsc1tlXSxuPXRoaXMucG9zaXRpb25zLGk9bmV3IEFycmF5KHIubGVuZ3RoKSxhPTA7YTxyLmxlbmd0aDsrK2EpaVthXT1uW3JbYV1dO3ZhciBvPWcoaSxbdC5jb29yZFswXSx0aGlzLl9yZXNvbHV0aW9uWzFdLXQuY29vcmRbMV1dLHRoaXMuX21vZGVsLHRoaXMuX3ZpZXcsdGhpcy5fcHJvamVjdGlvbix0aGlzLl9yZXNvbHV0aW9uKTtpZighbylyZXR1cm4gbnVsbDt2YXIgcz1vWzJdLGw9MDtmb3IoYT0wO2E8ci5sZW5ndGg7KythKWwrPXNbYV0qdGhpcy5pbnRlbnNpdHlbclthXV07cmV0dXJue3Bvc2l0aW9uOm9bMV0saW5kZXg6cltvWzBdXSxjZWxsOnIsY2VsbElkOmUsaW50ZW5zaXR5OmwsZGF0YUNvb3JkaW5hdGU6dGhpcy5wb3NpdGlvbnNbcltvWzBdXV19fSxNLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnRleHR1cmUuZGlzcG9zZSgpLHRoaXMudHJpU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLmxpbmVTaGFkZXIuZGlzcG9zZSgpLHRoaXMucG9pbnRTaGFkZXIuZGlzcG9zZSgpLHRoaXMucGlja1NoYWRlci5kaXNwb3NlKCksdGhpcy5wb2ludFBpY2tTaGFkZXIuZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVWQU8uZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVQb3NpdGlvbnMuZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVDb2xvcnMuZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVVVnMuZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVOb3JtYWxzLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlSWRzLmRpc3Bvc2UoKSx0aGlzLmVkZ2VWQU8uZGlzcG9zZSgpLHRoaXMuZWRnZVBvc2l0aW9ucy5kaXNwb3NlKCksdGhpcy5lZGdlQ29sb3JzLmRpc3Bvc2UoKSx0aGlzLmVkZ2VVVnMuZGlzcG9zZSgpLHRoaXMuZWRnZUlkcy5kaXNwb3NlKCksdGhpcy5wb2ludFZBTy5kaXNwb3NlKCksdGhpcy5wb2ludFBvc2l0aW9ucy5kaXNwb3NlKCksdGhpcy5wb2ludENvbG9ycy5kaXNwb3NlKCksdGhpcy5wb2ludFVWcy5kaXNwb3NlKCksdGhpcy5wb2ludFNpemVzLmRpc3Bvc2UoKSx0aGlzLnBvaW50SWRzLmRpc3Bvc2UoKSx0aGlzLmNvbnRvdXJWQU8uZGlzcG9zZSgpLHRoaXMuY29udG91clBvc2l0aW9ucy5kaXNwb3NlKCksdGhpcy5jb250b3VyU2hhZGVyLmRpc3Bvc2UoKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgmJih0PShlPXQpLmdsKSwhKHQuZ2V0RXh0ZW5zaW9uKCJPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKXx8dC5nZXRFeHRlbnNpb24oIk1PWl9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKXx8dC5nZXRFeHRlbnNpb24oIldFQktJVF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKSkpdGhyb3cgbmV3IEVycm9yKCJkZXJpdmF0aXZlcyBub3Qgc3VwcG9ydGVkIik7dmFyIHI9ZnVuY3Rpb24odCl7dmFyIGU9bih0LG0udmVydGV4LG0uZnJhZ21lbnQpO3JldHVybiBlLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCxlLmF0dHJpYnV0ZXMuY29sb3IubG9jYXRpb249MixlLmF0dHJpYnV0ZXMudXYubG9jYXRpb249MyxlLmF0dHJpYnV0ZXMubm9ybWFsLmxvY2F0aW9uPTQsZX0odCkscz1mdW5jdGlvbih0KXt2YXIgZT1uKHQsdi52ZXJ0ZXgsdi5mcmFnbWVudCk7cmV0dXJuIGUuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLGUuYXR0cmlidXRlcy5jb2xvci5sb2NhdGlvbj0yLGUuYXR0cmlidXRlcy51di5sb2NhdGlvbj0zLGV9KHQpLGw9QSh0KSxjPVQodCksaD1TKHQpLGY9RSh0KSxwPW8odCx1KG5ldyBVaW50OEFycmF5KFsyNTUsMjU1LDI1NSwyNTVdKSxbMSwxLDRdKSk7cC5nZW5lcmF0ZU1pcG1hcCgpLHAubWluRmlsdGVyPXQuTElORUFSX01JUE1BUF9MSU5FQVIscC5tYWdGaWx0ZXI9dC5MSU5FQVI7dmFyIGQ9aSh0KSxnPWkodCkseT1pKHQpLHg9aSh0KSxiPWkodCksXz1hKHQsW3tidWZmZXI6ZCx0eXBlOnQuRkxPQVQsc2l6ZTozfSx7YnVmZmVyOmIsdHlwZTp0LlVOU0lHTkVEX0JZVEUsc2l6ZTo0LG5vcm1hbGl6ZWQ6ITB9LHtidWZmZXI6Zyx0eXBlOnQuRkxPQVQsc2l6ZTo0fSx7YnVmZmVyOnksdHlwZTp0LkZMT0FULHNpemU6Mn0se2J1ZmZlcjp4LHR5cGU6dC5GTE9BVCxzaXplOjN9XSksdz1pKHQpLE09aSh0KSxDPWkodCksTD1pKHQpLHo9YSh0LFt7YnVmZmVyOncsdHlwZTp0LkZMT0FULHNpemU6M30se2J1ZmZlcjpMLHR5cGU6dC5VTlNJR05FRF9CWVRFLHNpemU6NCxub3JtYWxpemVkOiEwfSx7YnVmZmVyOk0sdHlwZTp0LkZMT0FULHNpemU6NH0se2J1ZmZlcjpDLHR5cGU6dC5GTE9BVCxzaXplOjJ9XSksUD1pKHQpLEk9aSh0KSxPPWkodCksRD1pKHQpLFI9aSh0KSxCPWEodCxbe2J1ZmZlcjpQLHR5cGU6dC5GTE9BVCxzaXplOjN9LHtidWZmZXI6Uix0eXBlOnQuVU5TSUdORURfQllURSxzaXplOjQsbm9ybWFsaXplZDohMH0se2J1ZmZlcjpJLHR5cGU6dC5GTE9BVCxzaXplOjR9LHtidWZmZXI6Tyx0eXBlOnQuRkxPQVQsc2l6ZToyfSx7YnVmZmVyOkQsdHlwZTp0LkZMT0FULHNpemU6MX1dKSxGPWkodCksTj1uZXcgayh0LHAscixzLGwsYyxoLGYsZCxiLGcseSx4LF8sdyxMLE0sQyx6LFAsUixJLE8sRCxCLEYsYSh0LFt7YnVmZmVyOkYsdHlwZTp0LkZMT0FULHNpemU6M31dKSk7cmV0dXJuIE4udXBkYXRlKGUpLE59fSx7Ii4vbGliL2Nsb3Nlc3QtcG9pbnQiOjI2NiwiLi9saWIvc2hhZGVycyI6MjY3LGNvbG9ybWFwOjExMywiZ2wtYnVmZmVyIjoyMzAsImdsLW1hdDQvaW52ZXJ0IjoyNTQsImdsLW1hdDQvbXVsdGlwbHkiOjI1NiwiZ2wtc2hhZGVyIjoyODcsImdsLXRleHR1cmUyZCI6MzAzLCJnbC12YW8iOjMwOCxuZGFycmF5OjQxNyxub3JtYWxzOjQyMCwic2ltcGxpY2lhbC1jb21wbGV4LWNvbnRvdXIiOjQ3OSwidHlwZWRhcnJheS1wb29sIjo1MDd9XSwyNjk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2wscj1uKGUsWzAsMCwwLDEsMSwwLDEsMV0pLHM9aShlLGEuYm94VmVydCxhLmxpbmVGcmFnKTtyZXR1cm4gbmV3IG8odCxyLHMpfTt2YXIgbj10KCJnbC1idWZmZXIiKSxpPXQoImdsLXNoYWRlciIpLGE9dCgiLi9zaGFkZXJzIik7ZnVuY3Rpb24gbyh0LGUscil7dGhpcy5wbG90PXQsdGhpcy52Ym89ZSx0aGlzLnNoYWRlcj1yfXZhciBzLGwsYz1vLnByb3RvdHlwZTtjLmJpbmQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnNoYWRlcjt0aGlzLnZiby5iaW5kKCksdGhpcy5zaGFkZXIuYmluZCgpLHQuYXR0cmlidXRlcy5jb29yZC5wb2ludGVyKCksdC51bmlmb3Jtcy5zY3JlZW5Cb3g9dGhpcy5wbG90LnNjcmVlbkJveH0sYy5kcmF3Qm94PShzPVswLDBdLGw9WzAsMF0sZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT10aGlzLnBsb3Qsbz10aGlzLnNoYWRlcixjPWEuZ2w7c1swXT10LHNbMV09ZSxsWzBdPXIsbFsxXT1uLG8udW5pZm9ybXMubG89cyxvLnVuaWZvcm1zLmhpPWwsby51bmlmb3Jtcy5jb2xvcj1pLGMuZHJhd0FycmF5cyhjLlRSSUFOR0xFX1NUUklQLDAsNCl9KSxjLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnZiby5kaXNwb3NlKCksdGhpcy5zaGFkZXIuZGlzcG9zZSgpfX0seyIuL3NoYWRlcnMiOjI3MiwiZ2wtYnVmZmVyIjoyMzAsImdsLXNoYWRlciI6Mjg3fV0sMjcwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmdsLHI9bihlKSxhPWkoZSxvLmdyaWRWZXJ0LG8uZ3JpZEZyYWcpLGw9aShlLG8udGlja1ZlcnQsby5ncmlkRnJhZyk7cmV0dXJuIG5ldyBzKHQscixhLGwpfTt2YXIgbj10KCJnbC1idWZmZXIiKSxpPXQoImdsLXNoYWRlciIpLGE9dCgiYmluYXJ5LXNlYXJjaC1ib3VuZHMiKSxvPXQoIi4vc2hhZGVycyIpO2Z1bmN0aW9uIHModCxlLHIsbil7dGhpcy5wbG90PXQsdGhpcy52Ym89ZSx0aGlzLnNoYWRlcj1yLHRoaXMudGlja1NoYWRlcj1uLHRoaXMudGlja3M9W1tdLFtdXX1mdW5jdGlvbiBsKHQsZSl7cmV0dXJuIHQtZX12YXIgYyx1LGgsZixwLGQ9cy5wcm90b3R5cGU7ZC5kcmF3PShjPVswLDBdLHU9WzAsMF0saD1bMCwwXSxmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLnBsb3QsZT10aGlzLnZibyxyPXRoaXMuc2hhZGVyLG49dGhpcy50aWNrcyxpPXQuZ2wsYT10Ll90aWNrQm91bmRzLG89dC5kYXRhQm94LHM9dC52aWV3Qm94LGw9dC5ncmlkTGluZVdpZHRoLGY9dC5ncmlkTGluZUNvbG9yLHA9dC5ncmlkTGluZUVuYWJsZSxkPXQucGl4ZWxSYXRpbyxnPTA7ZzwyOysrZyl7dmFyIG09YVtnXSx2PWFbZysyXS1tLHk9LjUqKG9bZysyXStvW2ddKSx4PW9bZysyXS1vW2ddO3VbZ109Mip2L3gsY1tnXT0yKihtLXkpL3h9ci5iaW5kKCksZS5iaW5kKCksci5hdHRyaWJ1dGVzLmRhdGFDb29yZC5wb2ludGVyKCksci51bmlmb3Jtcy5kYXRhU2hpZnQ9YyxyLnVuaWZvcm1zLmRhdGFTY2FsZT11O3ZhciBiPTA7Zm9yKGc9MDtnPDI7KytnKXtoWzBdPWhbMV09MCxoW2ddPTEsci51bmlmb3Jtcy5kYXRhQXhpcz1oLHIudW5pZm9ybXMubGluZVdpZHRoPWxbZ10vKHNbZysyXS1zW2ddKSpkLHIudW5pZm9ybXMuY29sb3I9ZltnXTt2YXIgXz02Km5bZ10ubGVuZ3RoO3BbZ10mJl8mJmkuZHJhd0FycmF5cyhpLlRSSUFOR0xFUyxiLF8pLGIrPV99fSksZC5kcmF3VGlja01hcmtzPWZ1bmN0aW9uKCl7dmFyIHQ9WzAsMF0sZT1bMCwwXSxyPVsxLDBdLG49WzAsMV0saT1bMCwwXSxvPVswLDBdO3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgcz10aGlzLnBsb3QsYz10aGlzLnZibyx1PXRoaXMudGlja1NoYWRlcixoPXRoaXMudGlja3MsZj1zLmdsLHA9cy5fdGlja0JvdW5kcyxkPXMuZGF0YUJveCxnPXMudmlld0JveCxtPXMucGl4ZWxSYXRpbyx2PXMuc2NyZWVuQm94LHk9dlsyXS12WzBdLHg9dlszXS12WzFdLGI9Z1syXS1nWzBdLF89Z1szXS1nWzFdLHc9MDt3PDI7Kyt3KXt2YXIgaz1wW3ddLE09cFt3KzJdLWssQT0uNSooZFt3KzJdK2Rbd10pLFQ9ZFt3KzJdLWRbd107ZVt3XT0yKk0vVCx0W3ddPTIqKGstQSkvVH1lWzBdKj1iL3ksdFswXSo9Yi95LGVbMV0qPV8veCx0WzFdKj1fL3gsdS5iaW5kKCksYy5iaW5kKCksdS5hdHRyaWJ1dGVzLmRhdGFDb29yZC5wb2ludGVyKCk7dmFyIFM9dS51bmlmb3JtcztTLmRhdGFTaGlmdD10LFMuZGF0YVNjYWxlPWU7dmFyIEU9cy50aWNrTWFya0xlbmd0aCxDPXMudGlja01hcmtXaWR0aCxMPXMudGlja01hcmtDb2xvcix6PTYqaFswXS5sZW5ndGgsUD1NYXRoLm1pbihhLmdlKGhbMF0sKGRbMF0tcFswXSkvKHBbMl0tcFswXSksbCksaFswXS5sZW5ndGgpLEk9TWF0aC5taW4oYS5ndChoWzBdLChkWzJdLXBbMF0pLyhwWzJdLXBbMF0pLGwpLGhbMF0ubGVuZ3RoKSxPPTArNipQLEQ9NipNYXRoLm1heCgwLEktUCksUj1NYXRoLm1pbihhLmdlKGhbMV0sKGRbMV0tcFsxXSkvKHBbM10tcFsxXSksbCksaFsxXS5sZW5ndGgpLEI9TWF0aC5taW4oYS5ndChoWzFdLChkWzNdLXBbMV0pLyhwWzNdLXBbMV0pLGwpLGhbMV0ubGVuZ3RoKSxGPXorNipSLE49NipNYXRoLm1heCgwLEItUik7aVswXT0yKihnWzBdLUVbMV0pL3ktMSxpWzFdPShnWzNdK2dbMV0pL3gtMSxvWzBdPUVbMV0qbS95LG9bMV09Q1sxXSptL3gsTiYmKFMuY29sb3I9TFsxXSxTLnRpY2tTY2FsZT1vLFMuZGF0YUF4aXM9bixTLnNjcmVlbk9mZnNldD1pLGYuZHJhd0FycmF5cyhmLlRSSUFOR0xFUyxGLE4pKSxpWzBdPShnWzJdK2dbMF0pL3ktMSxpWzFdPTIqKGdbMV0tRVswXSkveC0xLG9bMF09Q1swXSptL3ksb1sxXT1FWzBdKm0veCxEJiYoUy5jb2xvcj1MWzBdLFMudGlja1NjYWxlPW8sUy5kYXRhQXhpcz1yLFMuc2NyZWVuT2Zmc2V0PWksZi5kcmF3QXJyYXlzKGYuVFJJQU5HTEVTLE8sRCkpLGlbMF09MiooZ1syXStFWzNdKS95LTEsaVsxXT0oZ1szXStnWzFdKS94LTEsb1swXT1FWzNdKm0veSxvWzFdPUNbM10qbS94LE4mJihTLmNvbG9yPUxbM10sUy50aWNrU2NhbGU9byxTLmRhdGFBeGlzPW4sUy5zY3JlZW5PZmZzZXQ9aSxmLmRyYXdBcnJheXMoZi5UUklBTkdMRVMsRixOKSksaVswXT0oZ1syXStnWzBdKS95LTEsaVsxXT0yKihnWzNdK0VbMl0pL3gtMSxvWzBdPUNbMl0qbS95LG9bMV09RVsyXSptL3gsRCYmKFMuY29sb3I9TFsyXSxTLnRpY2tTY2FsZT1vLFMuZGF0YUF4aXM9cixTLnNjcmVlbk9mZnNldD1pLGYuZHJhd0FycmF5cyhmLlRSSUFOR0xFUyxPLEQpKX19KCksZC51cGRhdGU9KGY9WzEsMSwtMSwtMSwxLC0xXSxwPVsxLC0xLDEsMSwtMSwtMV0sZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQudGlja3Mscj10LmJvdW5kcyxuPW5ldyBGbG9hdDMyQXJyYXkoMTgqKGVbMF0ubGVuZ3RoK2VbMV0ubGVuZ3RoKSksaT0odGhpcy5wbG90Lnplcm9MaW5lRW5hYmxlLDApLGE9W1tdLFtdXSxvPTA7bzwyOysrbylmb3IodmFyIHM9YVtvXSxsPWVbb10sYz1yW29dLHU9cltvKzJdLGg9MDtoPGwubGVuZ3RoOysraCl7dmFyIGQ9KGxbaF0ueC1jKS8odS1jKTtzLnB1c2goZCk7Zm9yKHZhciBnPTA7Zzw2OysrZyluW2krK109ZCxuW2krK109ZltnXSxuW2krK109cFtnXX10aGlzLnRpY2tzPWEsdGhpcy52Ym8udXBkYXRlKG4pfSksZC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy52Ym8uZGlzcG9zZSgpLHRoaXMuc2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnRpY2tTaGFkZXIuZGlzcG9zZSgpfX0seyIuL3NoYWRlcnMiOjI3MiwiYmluYXJ5LXNlYXJjaC1ib3VuZHMiOjI3NCwiZ2wtYnVmZmVyIjoyMzAsImdsLXNoYWRlciI6Mjg3fV0sMjcxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmdsLHI9bihlLFstMSwtMSwtMSwxLDEsLTEsMSwxXSkscz1pKGUsYS5saW5lVmVydCxhLmxpbmVGcmFnKTtyZXR1cm4gbmV3IG8odCxyLHMpfTt2YXIgbj10KCJnbC1idWZmZXIiKSxpPXQoImdsLXNoYWRlciIpLGE9dCgiLi9zaGFkZXJzIik7ZnVuY3Rpb24gbyh0LGUscil7dGhpcy5wbG90PXQsdGhpcy52Ym89ZSx0aGlzLnNoYWRlcj1yfXZhciBzLGwsYz1vLnByb3RvdHlwZTtjLmJpbmQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnNoYWRlcjt0aGlzLnZiby5iaW5kKCksdGhpcy5zaGFkZXIuYmluZCgpLHQuYXR0cmlidXRlcy5jb29yZC5wb2ludGVyKCksdC51bmlmb3Jtcy5zY3JlZW5Cb3g9dGhpcy5wbG90LnNjcmVlbkJveH0sYy5kcmF3TGluZT0ocz1bMCwwXSxsPVswLDBdLGZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbz10aGlzLnBsb3QsYz10aGlzLnNoYWRlcix1PW8uZ2w7c1swXT10LHNbMV09ZSxsWzBdPXIsbFsxXT1uLGMudW5pZm9ybXMuc3RhcnQ9cyxjLnVuaWZvcm1zLmVuZD1sLGMudW5pZm9ybXMud2lkdGg9aSpvLnBpeGVsUmF0aW8sYy51bmlmb3Jtcy5jb2xvcj1hLHUuZHJhd0FycmF5cyh1LlRSSUFOR0xFX1NUUklQLDAsNCl9KSxjLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnZiby5kaXNwb3NlKCksdGhpcy5zaGFkZXIuZGlzcG9zZSgpfX0seyIuL3NoYWRlcnMiOjI3MiwiZ2wtYnVmZmVyIjoyMzAsImdsLXNoYWRlciI6Mjg3fV0sMjcyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImdsc2xpZnkiKSxpPW4oWyJwcmVjaXNpb24gbG93cCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG51bmlmb3JtIHZlYzQgY29sb3I7XG52b2lkIG1haW4oKSB7XG4gIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sb3IueHl6ICogY29sb3IudywgY29sb3Iudyk7XG59XG4iXSk7ZS5leHBvcnRzPXtsaW5lVmVydDpuKFsicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMiBjb29yZDtcblxudW5pZm9ybSB2ZWM0IHNjcmVlbkJveDtcbnVuaWZvcm0gdmVjMiBzdGFydCwgZW5kO1xudW5pZm9ybSBmbG9hdCB3aWR0aDtcblxudmVjMiBwZXJwKHZlYzIgdikge1xuICByZXR1cm4gdmVjMih2LnksIC12LngpO1xufVxuXG52ZWMyIHNjcmVlbih2ZWMyIHYpIHtcbiAgcmV0dXJuIDIuMCAqICh2IC0gc2NyZWVuQm94Lnh5KSAvIChzY3JlZW5Cb3guencgLSBzY3JlZW5Cb3gueHkpIC0gMS4wO1xufVxuXG52b2lkIG1haW4oKSB7XG4gIHZlYzIgZGVsdGEgPSBub3JtYWxpemUocGVycChzdGFydCAtIGVuZCkpO1xuICB2ZWMyIG9mZnNldCA9IG1peChzdGFydCwgZW5kLCAwLjUgKiAoY29vcmQueSsxLjApKTtcbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHNjcmVlbihvZmZzZXQgKyAwLjUgKiB3aWR0aCAqIGRlbHRhICogY29vcmQueCksIDAsIDEpO1xufVxuIl0pLGxpbmVGcmFnOmksdGV4dFZlcnQ6bihbIiNkZWZpbmUgR0xTTElGWSAxXG5hdHRyaWJ1dGUgdmVjMyB0ZXh0Q29vcmRpbmF0ZTtcblxudW5pZm9ybSB2ZWMyIGRhdGFTY2FsZSwgZGF0YVNoaWZ0LCBkYXRhQXhpcywgc2NyZWVuT2Zmc2V0LCB0ZXh0U2NhbGU7XG51bmlmb3JtIGZsb2F0IGFuZ2xlO1xuXG52b2lkIG1haW4oKSB7XG4gIGZsb2F0IGRhdGFPZmZzZXQgID0gdGV4dENvb3JkaW5hdGUuejtcbiAgdmVjMiBnbHlwaE9mZnNldCAgPSB0ZXh0Q29vcmRpbmF0ZS54eTtcbiAgbWF0MiBnbHlwaE1hdHJpeCA9IG1hdDIoY29zKGFuZ2xlKSwgc2luKGFuZ2xlKSwgLXNpbihhbmdsZSksIGNvcyhhbmdsZSkpO1xuICB2ZWMyIHNjcmVlbkNvb3JkaW5hdGUgPSBkYXRhQXhpcyAqIChkYXRhU2NhbGUgKiBkYXRhT2Zmc2V0ICsgZGF0YVNoaWZ0KSArXG4gICAgZ2x5cGhNYXRyaXggKiBnbHlwaE9mZnNldCAqIHRleHRTY2FsZSArIHNjcmVlbk9mZnNldDtcbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHNjcmVlbkNvb3JkaW5hdGUsIDAsIDEpO1xufVxuIl0pLHRleHRGcmFnOmksZ3JpZFZlcnQ6bihbInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzMgZGF0YUNvb3JkO1xuXG51bmlmb3JtIHZlYzIgZGF0YUF4aXMsIGRhdGFTaGlmdCwgZGF0YVNjYWxlO1xudW5pZm9ybSBmbG9hdCBsaW5lV2lkdGg7XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjMiBwb3MgPSBkYXRhQXhpcyAqIChkYXRhU2NhbGUgKiBkYXRhQ29vcmQueCArIGRhdGFTaGlmdCk7XG4gIHBvcyArPSAxMC4wICogZGF0YUNvb3JkLnkgKiB2ZWMyKGRhdGFBeGlzLnksIC1kYXRhQXhpcy54KSArIGRhdGFDb29yZC56ICogbGluZVdpZHRoO1xuICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zLCAwLCAxKTtcbn1cbiJdKSxncmlkRnJhZzppLGJveFZlcnQ6bihbInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzIgY29vcmQ7XG5cbnVuaWZvcm0gdmVjNCBzY3JlZW5Cb3g7XG51bmlmb3JtIHZlYzIgbG8sIGhpO1xuXG52ZWMyIHNjcmVlbih2ZWMyIHYpIHtcbiAgcmV0dXJuIDIuMCAqICh2IC0gc2NyZWVuQm94Lnh5KSAvIChzY3JlZW5Cb3guencgLSBzY3JlZW5Cb3gueHkpIC0gMS4wO1xufVxuXG52b2lkIG1haW4oKSB7XG4gIGdsX1Bvc2l0aW9uID0gdmVjNChzY3JlZW4obWl4KGxvLCBoaSwgY29vcmQpKSwgMCwgMSk7XG59XG4iXSksdGlja1ZlcnQ6bihbInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzMgZGF0YUNvb3JkO1xuXG51bmlmb3JtIHZlYzIgZGF0YUF4aXMsIGRhdGFTaGlmdCwgZGF0YVNjYWxlLCBzY3JlZW5PZmZzZXQsIHRpY2tTY2FsZTtcblxudm9pZCBtYWluKCkge1xuICB2ZWMyIHBvcyA9IGRhdGFBeGlzICogKGRhdGFTY2FsZSAqIGRhdGFDb29yZC54ICsgZGF0YVNoaWZ0KTtcbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvcyArIHRpY2tTY2FsZSpkYXRhQ29vcmQueXogKyBzY3JlZW5PZmZzZXQsIDAsIDEpO1xufVxuIl0pfX0se2dsc2xpZnk6Mzc3fV0sMjczOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmdsLHI9bihlKSxhPWkoZSxzLnRleHRWZXJ0LHMudGV4dEZyYWcpO3JldHVybiBuZXcgbCh0LHIsYSl9O3ZhciBuPXQoImdsLWJ1ZmZlciIpLGk9dCgiZ2wtc2hhZGVyIiksYT10KCJ0ZXh0LWNhY2hlIiksbz10KCJiaW5hcnktc2VhcmNoLWJvdW5kcyIpLHM9dCgiLi9zaGFkZXJzIik7ZnVuY3Rpb24gbCh0LGUscil7dGhpcy5wbG90PXQsdGhpcy52Ym89ZSx0aGlzLnNoYWRlcj1yLHRoaXMudGlja09mZnNldD1bW10sW11dLHRoaXMudGlja1g9W1tdLFtdXSx0aGlzLmxhYmVsT2Zmc2V0PVswLDBdLHRoaXMubGFiZWxDb3VudD1bMCwwXX12YXIgYyx1LGgsZixwLGQsZz1sLnByb3RvdHlwZTtnLmRyYXdUaWNrcz0oYz1bMCwwXSx1PVswLDBdLGg9WzAsMF0sZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5wbG90LHI9dGhpcy5zaGFkZXIsbj10aGlzLnRpY2tYW3RdLGk9dGhpcy50aWNrT2Zmc2V0W3RdLGE9ZS5nbCxzPWUudmlld0JveCxsPWUuZGF0YUJveCxmPWUuc2NyZWVuQm94LHA9ZS5waXhlbFJhdGlvLGQ9ZS50aWNrRW5hYmxlLGc9ZS50aWNrUGFkLG09ZS50aWNrQ29sb3Isdj1lLnRpY2tBbmdsZSx5PWUubGFiZWxFbmFibGUseD1lLmxhYmVsUGFkLGI9ZS5sYWJlbENvbG9yLF89ZS5sYWJlbEFuZ2xlLHc9dGhpcy5sYWJlbE9mZnNldFt0XSxrPXRoaXMubGFiZWxDb3VudFt0XSxNPW8ubHQobixsW3RdKSxBPW8ubGUobixsW3QrMl0pO2NbMF09Y1sxXT0wLGNbdF09MSx1W3RdPShzWzIrdF0rc1t0XSkvKGZbMit0XS1mW3RdKS0xO3ZhciBUPTIvZlsyKygxXnQpXS1mWzFedF07dVsxXnRdPVQqc1sxXnRdLTEsZFt0XSYmKHVbMV50XS09VCpwKmdbdF0sTTxBJiZpW0FdPmlbTV0mJihyLnVuaWZvcm1zLmRhdGFBeGlzPWMsci51bmlmb3Jtcy5zY3JlZW5PZmZzZXQ9dSxyLnVuaWZvcm1zLmNvbG9yPW1bdF0sci51bmlmb3Jtcy5hbmdsZT12W3RdLGEuZHJhd0FycmF5cyhhLlRSSUFOR0xFUyxpW01dLGlbQV0taVtNXSkpKSx5W3RdJiZrJiYodVsxXnRdLT1UKnAqeFt0XSxyLnVuaWZvcm1zLmRhdGFBeGlzPWgsci51bmlmb3Jtcy5zY3JlZW5PZmZzZXQ9dSxyLnVuaWZvcm1zLmNvbG9yPWJbdF0sci51bmlmb3Jtcy5hbmdsZT1fW3RdLGEuZHJhd0FycmF5cyhhLlRSSUFOR0xFUyx3LGspKSx1WzFedF09VCpzWzIrKDFedCldLTEsZFt0KzJdJiYodVsxXnRdKz1UKnAqZ1t0KzJdLE08QSYmaVtBXT5pW01dJiYoci51bmlmb3Jtcy5kYXRhQXhpcz1jLHIudW5pZm9ybXMuc2NyZWVuT2Zmc2V0PXUsci51bmlmb3Jtcy5jb2xvcj1tW3QrMl0sci51bmlmb3Jtcy5hbmdsZT12W3QrMl0sYS5kcmF3QXJyYXlzKGEuVFJJQU5HTEVTLGlbTV0saVtBXS1pW01dKSkpLHlbdCsyXSYmayYmKHVbMV50XSs9VCpwKnhbdCsyXSxyLnVuaWZvcm1zLmRhdGFBeGlzPWgsci51bmlmb3Jtcy5zY3JlZW5PZmZzZXQ9dSxyLnVuaWZvcm1zLmNvbG9yPWJbdCsyXSxyLnVuaWZvcm1zLmFuZ2xlPV9bdCsyXSxhLmRyYXdBcnJheXMoYS5UUklBTkdMRVMsdyxrKSl9KSxnLmRyYXdUaXRsZT1mdW5jdGlvbigpe3ZhciB0PVswLDBdLGU9WzAsMF07cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5wbG90LG49dGhpcy5zaGFkZXIsaT1yLmdsLGE9ci5zY3JlZW5Cb3gsbz1yLnRpdGxlQ2VudGVyLHM9ci50aXRsZUFuZ2xlLGw9ci50aXRsZUNvbG9yLGM9ci5waXhlbFJhdGlvO2lmKHRoaXMudGl0bGVDb3VudCl7Zm9yKHZhciB1PTA7dTwyOysrdSllW3VdPTIqKG9bdV0qYy1hW3VdKS8oYVsyK3VdLWFbdV0pLTE7bi5iaW5kKCksbi51bmlmb3Jtcy5kYXRhQXhpcz10LG4udW5pZm9ybXMuc2NyZWVuT2Zmc2V0PWUsbi51bmlmb3Jtcy5hbmdsZT1zLG4udW5pZm9ybXMuY29sb3I9bCxpLmRyYXdBcnJheXMoaS5UUklBTkdMRVMsdGhpcy50aXRsZU9mZnNldCx0aGlzLnRpdGxlQ291bnQpfX19KCksZy5iaW5kPShmPVswLDBdLHA9WzAsMF0sZD1bMCwwXSxmdW5jdGlvbigpe3ZhciB0PXRoaXMucGxvdCxlPXRoaXMuc2hhZGVyLHI9dC5fdGlja0JvdW5kcyxuPXQuZGF0YUJveCxpPXQuc2NyZWVuQm94LGE9dC52aWV3Qm94O2UuYmluZCgpO2Zvcih2YXIgbz0wO288MjsrK28pe3ZhciBzPXJbb10sbD1yW28rMl0tcyxjPS41KihuW28rMl0rbltvXSksdT1uW28rMl0tbltvXSxoPWFbb10sZz1hW28rMl0taCxtPWlbb10sdj1pW28rMl0tbTtwW29dPTIqbC91KmcvdixmW29dPTIqKHMtYykvdSpnL3Z9ZFsxXT0yKnQucGl4ZWxSYXRpby8oaVszXS1pWzFdKSxkWzBdPWRbMV0qKGlbM10taVsxXSkvKGlbMl0taVswXSksZS51bmlmb3Jtcy5kYXRhU2NhbGU9cCxlLnVuaWZvcm1zLmRhdGFTaGlmdD1mLGUudW5pZm9ybXMudGV4dFNjYWxlPWQsdGhpcy52Ym8uYmluZCgpLGUuYXR0cmlidXRlcy50ZXh0Q29vcmRpbmF0ZS5wb2ludGVyKCl9KSxnLnVwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZSxyLG4saSxvLHM9W10sbD10LnRpY2tzLGM9dC5ib3VuZHM7Zm9yKG89MDtvPDI7KytvKXt2YXIgdT1bTWF0aC5mbG9vcihzLmxlbmd0aC8zKV0saD1bLTEvMF0sZj1sW29dO2ZvcihlPTA7ZTxmLmxlbmd0aDsrK2Upe3ZhciBwPWZbZV0sZD1wLngsZz1wLnRleHQsbT1wLmZvbnR8fCJzYW5zLXNlcmlmIjtpPXAuZm9udFNpemV8fDEyO2Zvcih2YXIgdj0xLyhjW28rMl0tY1tvXSkseT1jW29dLHg9Zy5zcGxpdCgiXG4iKSxiPTA7Yjx4Lmxlbmd0aDtiKyspZm9yKG49YShtLHhbYl0pLmRhdGEscj0wO3I8bi5sZW5ndGg7cis9MilzLnB1c2gobltyXSppLC1uW3IrMV0qaS1iKmkqMS4yLChkLXkpKnYpO3UucHVzaChNYXRoLmZsb29yKHMubGVuZ3RoLzMpKSxoLnB1c2goZCl9dGhpcy50aWNrT2Zmc2V0W29dPXUsdGhpcy50aWNrWFtvXT1ofWZvcihvPTA7bzwyOysrbyl7Zm9yKHRoaXMubGFiZWxPZmZzZXRbb109TWF0aC5mbG9vcihzLmxlbmd0aC8zKSxuPWEodC5sYWJlbEZvbnRbb10sdC5sYWJlbHNbb10se3RleHRBbGlnbjoiY2VudGVyIn0pLmRhdGEsaT10LmxhYmVsU2l6ZVtvXSxlPTA7ZTxuLmxlbmd0aDtlKz0yKXMucHVzaChuW2VdKmksLW5bZSsxXSppLDApO3RoaXMubGFiZWxDb3VudFtvXT1NYXRoLmZsb29yKHMubGVuZ3RoLzMpLXRoaXMubGFiZWxPZmZzZXRbb119Zm9yKHRoaXMudGl0bGVPZmZzZXQ9TWF0aC5mbG9vcihzLmxlbmd0aC8zKSxuPWEodC50aXRsZUZvbnQsdC50aXRsZSkuZGF0YSxpPXQudGl0bGVTaXplLGU9MDtlPG4ubGVuZ3RoO2UrPTIpcy5wdXNoKG5bZV0qaSwtbltlKzFdKmksMCk7dGhpcy50aXRsZUNvdW50PU1hdGguZmxvb3Iocy5sZW5ndGgvMyktdGhpcy50aXRsZU9mZnNldCx0aGlzLnZiby51cGRhdGUocyl9LGcuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMudmJvLmRpc3Bvc2UoKSx0aGlzLnNoYWRlci5kaXNwb3NlKCl9fSx7Ii4vc2hhZGVycyI6MjcyLCJiaW5hcnktc2VhcmNoLWJvdW5kcyI6Mjc0LCJnbC1idWZmZXIiOjIzMCwiZ2wtc2hhZGVyIjoyODcsInRleHQtY2FjaGUiOjQ5OH1dLDI3NDpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVs5OF1bMF0uYXBwbHkocixhcmd1bWVudHMpfSx7ZHVwOjk4fV0sMjc1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmdsLHI9bihlLFtlLmRyYXdpbmdCdWZmZXJXaWR0aCxlLmRyYXdpbmdCdWZmZXJIZWlnaHRdKSxjPW5ldyBsKGUscik7cmV0dXJuIGMuZ3JpZD1pKGMpLGMudGV4dD1hKGMpLGMubGluZT1vKGMpLGMuYm94PXMoYyksYy51cGRhdGUodCksY307dmFyIG49dCgiZ2wtc2VsZWN0LXN0YXRpYyIpLGk9dCgiLi9saWIvZ3JpZCIpLGE9dCgiLi9saWIvdGV4dCIpLG89dCgiLi9saWIvbGluZSIpLHM9dCgiLi9saWIvYm94Iik7ZnVuY3Rpb24gbCh0LGUpe3RoaXMuZ2w9dCx0aGlzLnBpY2tCdWZmZXI9ZSx0aGlzLnNjcmVlbkJveD1bMCwwLHQuZHJhd2luZ0J1ZmZlcldpZHRoLHQuZHJhd2luZ0J1ZmZlckhlaWdodF0sdGhpcy52aWV3Qm94PVswLDAsMCwwXSx0aGlzLmRhdGFCb3g9Wy0xMCwtMTAsMTAsMTBdLHRoaXMuZ3JpZExpbmVFbmFibGU9WyEwLCEwXSx0aGlzLmdyaWRMaW5lV2lkdGg9WzEsMV0sdGhpcy5ncmlkTGluZUNvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLnBpeGVsUmF0aW89MSx0aGlzLnRpY2tNYXJrTGVuZ3RoPVswLDAsMCwwXSx0aGlzLnRpY2tNYXJrV2lkdGg9WzAsMCwwLDBdLHRoaXMudGlja01hcmtDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLnRpY2tQYWQ9WzE1LDE1LDE1LDE1XSx0aGlzLnRpY2tBbmdsZT1bMCwwLDAsMF0sdGhpcy50aWNrRW5hYmxlPVshMCwhMCwhMCwhMF0sdGhpcy50aWNrQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5sYWJlbFBhZD1bMTUsMTUsMTUsMTVdLHRoaXMubGFiZWxBbmdsZT1bMCxNYXRoLlBJLzIsMCwzKk1hdGguUEkvMl0sdGhpcy5sYWJlbEVuYWJsZT1bITAsITAsITAsITBdLHRoaXMubGFiZWxDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLnRpdGxlQ2VudGVyPVswLDBdLHRoaXMudGl0bGVFbmFibGU9ITAsdGhpcy50aXRsZUFuZ2xlPTAsdGhpcy50aXRsZUNvbG9yPVswLDAsMCwxXSx0aGlzLmJvcmRlckNvbG9yPVswLDAsMCwwXSx0aGlzLmJhY2tncm91bmRDb2xvcj1bMCwwLDAsMF0sdGhpcy56ZXJvTGluZUVuYWJsZT1bITAsITBdLHRoaXMuemVyb0xpbmVXaWR0aD1bNCw0XSx0aGlzLnplcm9MaW5lQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMuYm9yZGVyTGluZUVuYWJsZT1bITAsITAsITAsITBdLHRoaXMuYm9yZGVyTGluZVdpZHRoPVsyLDIsMiwyXSx0aGlzLmJvcmRlckxpbmVDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmdyaWQ9bnVsbCx0aGlzLnRleHQ9bnVsbCx0aGlzLmxpbmU9bnVsbCx0aGlzLmJveD1udWxsLHRoaXMub2JqZWN0cz1bXSx0aGlzLm92ZXJsYXlzPVtdLHRoaXMuX3RpY2tCb3VuZHM9WzEvMCwxLzAsLTEvMCwtMS8wXSx0aGlzLnN0YXRpYz0hMSx0aGlzLmRpcnR5PSExLHRoaXMucGlja0RpcnR5PSExLHRoaXMucGlja0RlbGF5PTEyMCx0aGlzLnBpY2tSYWRpdXM9MTAsdGhpcy5fcGlja1RpbWVvdXQ9bnVsbCx0aGlzLl9kcmF3UGljaz10aGlzLmRyYXdQaWNrLmJpbmQodGhpcyksdGhpcy5fZGVwdGhDb3VudGVyPTB9dmFyIGM9bC5wcm90b3R5cGU7ZnVuY3Rpb24gdSh0KXtmb3IodmFyIGU9dC5zbGljZSgpLHI9MDtyPGUubGVuZ3RoOysrcillW3JdPWVbcl0uc2xpY2UoKTtyZXR1cm4gZX1mdW5jdGlvbiBoKHQsZSl7cmV0dXJuIHQueC1lLnh9Yy5zZXREaXJ0eT1mdW5jdGlvbigpe3RoaXMuZGlydHk9dGhpcy5waWNrRGlydHk9ITB9LGMuc2V0T3ZlcmxheURpcnR5PWZ1bmN0aW9uKCl7dGhpcy5kaXJ0eT0hMH0sYy5uZXh0RGVwdGhWYWx1ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZXB0aENvdW50ZXIrKy82NTUzNn0sYy5kcmF3PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5nbCxlPXRoaXMuc2NyZWVuQm94LHI9dGhpcy52aWV3Qm94LG49dGhpcy5kYXRhQm94LGk9dGhpcy5waXhlbFJhdGlvLGE9dGhpcy5ncmlkLG89dGhpcy5saW5lLHM9dGhpcy50ZXh0LGw9dGhpcy5vYmplY3RzO2lmKHRoaXMuX2RlcHRoQ291bnRlcj0wLHRoaXMucGlja0RpcnR5JiYodGhpcy5fcGlja1RpbWVvdXQmJmNsZWFyVGltZW91dCh0aGlzLl9waWNrVGltZW91dCksdGhpcy5waWNrRGlydHk9ITEsdGhpcy5fcGlja1RpbWVvdXQ9c2V0VGltZW91dCh0aGlzLl9kcmF3UGljayx0aGlzLnBpY2tEZWxheSkpLHRoaXMuZGlydHkpe2lmKHRoaXMuZGlydHk9ITEsdC5iaW5kRnJhbWVidWZmZXIodC5GUkFNRUJVRkZFUixudWxsKSx0LmVuYWJsZSh0LlNDSVNTT1JfVEVTVCksdC5kaXNhYmxlKHQuREVQVEhfVEVTVCksdC5kZXB0aEZ1bmModC5MRVNTKSx0LmRlcHRoTWFzayghMSksdC5lbmFibGUodC5CTEVORCksdC5ibGVuZEVxdWF0aW9uKHQuRlVOQ19BREQsdC5GVU5DX0FERCksdC5ibGVuZEZ1bmModC5PTkUsdC5PTkVfTUlOVVNfU1JDX0FMUEhBKSx0aGlzLmJvcmRlckNvbG9yKXt0LnNjaXNzb3IoZVswXSxlWzFdLGVbMl0tZVswXSxlWzNdLWVbMV0pO3ZhciBjPXRoaXMuYm9yZGVyQ29sb3I7dC5jbGVhckNvbG9yKGNbMF0qY1szXSxjWzFdKmNbM10sY1syXSpjWzNdLGNbM10pLHQuY2xlYXIodC5DT0xPUl9CVUZGRVJfQklUfHQuREVQVEhfQlVGRkVSX0JJVCl9dC5zY2lzc29yKHJbMF0sclsxXSxyWzJdLXJbMF0sclszXS1yWzFdKSx0LnZpZXdwb3J0KHJbMF0sclsxXSxyWzJdLXJbMF0sclszXS1yWzFdKTt2YXIgdT10aGlzLmJhY2tncm91bmRDb2xvcjt0LmNsZWFyQ29sb3IodVswXSp1WzNdLHVbMV0qdVszXSx1WzJdKnVbM10sdVszXSksdC5jbGVhcih0LkNPTE9SX0JVRkZFUl9CSVQpLGEuZHJhdygpO3ZhciBoPXRoaXMuemVyb0xpbmVFbmFibGUsZj10aGlzLnplcm9MaW5lQ29sb3IscD10aGlzLnplcm9MaW5lV2lkdGg7aWYoaFswXXx8aFsxXSl7by5iaW5kKCk7Zm9yKHZhciBkPTA7ZDwyOysrZClpZihoW2RdJiZuW2RdPD0wJiZuW2QrMl0+PTApe3ZhciBnPWVbZF0tbltkXSooZVtkKzJdLWVbZF0pLyhuW2QrMl0tbltkXSk7MD09PWQ/by5kcmF3TGluZShnLGVbMV0sZyxlWzNdLHBbZF0sZltkXSk6by5kcmF3TGluZShlWzBdLGcsZVsyXSxnLHBbZF0sZltkXSl9fWZvcihkPTA7ZDxsLmxlbmd0aDsrK2QpbFtkXS5kcmF3KCk7dC52aWV3cG9ydChlWzBdLGVbMV0sZVsyXS1lWzBdLGVbM10tZVsxXSksdC5zY2lzc29yKGVbMF0sZVsxXSxlWzJdLWVbMF0sZVszXS1lWzFdKSx0aGlzLmdyaWQuZHJhd1RpY2tNYXJrcygpLG8uYmluZCgpO3ZhciBtPXRoaXMuYm9yZGVyTGluZUVuYWJsZSx2PXRoaXMuYm9yZGVyTGluZVdpZHRoLHk9dGhpcy5ib3JkZXJMaW5lQ29sb3I7Zm9yKG1bMV0mJm8uZHJhd0xpbmUoclswXSxyWzFdLS41KnZbMV0qaSxyWzBdLHJbM10rLjUqdlszXSppLHZbMV0seVsxXSksbVswXSYmby5kcmF3TGluZShyWzBdLS41KnZbMF0qaSxyWzFdLHJbMl0rLjUqdlsyXSppLHJbMV0sdlswXSx5WzBdKSxtWzNdJiZvLmRyYXdMaW5lKHJbMl0sclsxXS0uNSp2WzFdKmksclsyXSxyWzNdKy41KnZbM10qaSx2WzNdLHlbM10pLG1bMl0mJm8uZHJhd0xpbmUoclswXS0uNSp2WzBdKmksclszXSxyWzJdKy41KnZbMl0qaSxyWzNdLHZbMl0seVsyXSkscy5iaW5kKCksZD0wO2Q8MjsrK2Qpcy5kcmF3VGlja3MoZCk7dGhpcy50aXRsZUVuYWJsZSYmcy5kcmF3VGl0bGUoKTt2YXIgeD10aGlzLm92ZXJsYXlzO2ZvcihkPTA7ZDx4Lmxlbmd0aDsrK2QpeFtkXS5kcmF3KCk7dC5kaXNhYmxlKHQuU0NJU1NPUl9URVNUKSx0LmRpc2FibGUodC5CTEVORCksdC5kZXB0aE1hc2soITApfX0sYy5kcmF3UGljaz1mdW5jdGlvbigpe2lmKCF0aGlzLnN0YXRpYyl7dmFyIHQ9dGhpcy5waWNrQnVmZmVyO3RoaXMuZ2w7dGhpcy5fcGlja1RpbWVvdXQ9bnVsbCx0LmJlZ2luKCk7Zm9yKHZhciBlPTEscj10aGlzLm9iamVjdHMsbj0wO248ci5sZW5ndGg7KytuKWU9cltuXS5kcmF3UGljayhlKTt0LmVuZCgpfX0sYy5waWNrPWZ1bmN0aW9uKHQsZSl7aWYoIXRoaXMuc3RhdGljKXt2YXIgcj10aGlzLnBpeGVsUmF0aW8sbj10aGlzLnBpY2tQaXhlbFJhdGlvLGk9dGhpcy52aWV3Qm94LGE9MHxNYXRoLnJvdW5kKCh0LWlbMF0vcikqbiksbz0wfE1hdGgucm91bmQoKGUtaVsxXS9yKSpuKSxzPXRoaXMucGlja0J1ZmZlci5xdWVyeShhLG8sdGhpcy5waWNrUmFkaXVzKTtpZighcylyZXR1cm4gbnVsbDtmb3IodmFyIGw9cy5pZCsocy52YWx1ZVswXTw8OCkrKHMudmFsdWVbMV08PDE2KSsocy52YWx1ZVsyXTw8MjQpLGM9dGhpcy5vYmplY3RzLHU9MDt1PGMubGVuZ3RoOysrdSl7dmFyIGg9Y1t1XS5waWNrKGEsbyxsKTtpZihoKXJldHVybiBofXJldHVybiBudWxsfX0sYy5zZXRTY3JlZW5Cb3g9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5zY3JlZW5Cb3gscj10aGlzLnBpeGVsUmF0aW87ZVswXT0wfE1hdGgucm91bmQodFswXSpyKSxlWzFdPTB8TWF0aC5yb3VuZCh0WzFdKnIpLGVbMl09MHxNYXRoLnJvdW5kKHRbMl0qciksZVszXT0wfE1hdGgucm91bmQodFszXSpyKSx0aGlzLnNldERpcnR5KCl9LGMuc2V0RGF0YUJveD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmRhdGFCb3g7KGVbMF0hPT10WzBdfHxlWzFdIT09dFsxXXx8ZVsyXSE9PXRbMl18fGVbM10hPT10WzNdKSYmKGVbMF09dFswXSxlWzFdPXRbMV0sZVsyXT10WzJdLGVbM109dFszXSx0aGlzLnNldERpcnR5KCkpfSxjLnNldFZpZXdCb3g9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5waXhlbFJhdGlvLHI9dGhpcy52aWV3Qm94O3JbMF09MHxNYXRoLnJvdW5kKHRbMF0qZSksclsxXT0wfE1hdGgucm91bmQodFsxXSplKSxyWzJdPTB8TWF0aC5yb3VuZCh0WzJdKmUpLHJbM109MHxNYXRoLnJvdW5kKHRbM10qZSk7dmFyIG49dGhpcy5waWNrUGl4ZWxSYXRpbzt0aGlzLnBpY2tCdWZmZXIuc2hhcGU9WzB8TWF0aC5yb3VuZCgodFsyXS10WzBdKSpuKSwwfE1hdGgucm91bmQoKHRbM10tdFsxXSkqbildLHRoaXMuc2V0RGlydHkoKX0sYy51cGRhdGU9ZnVuY3Rpb24odCl7dD10fHx7fTt2YXIgZT10aGlzLmdsO3RoaXMucGl4ZWxSYXRpbz10LnBpeGVsUmF0aW98fDE7dmFyIHI9dGhpcy5waXhlbFJhdGlvO3RoaXMucGlja1BpeGVsUmF0aW89TWF0aC5tYXgociwxKSx0aGlzLnNldFNjcmVlbkJveCh0LnNjcmVlbkJveHx8WzAsMCxlLmRyYXdpbmdCdWZmZXJXaWR0aC9yLGUuZHJhd2luZ0J1ZmZlckhlaWdodC9yXSk7dGhpcy5zY3JlZW5Cb3g7dGhpcy5zZXRWaWV3Qm94KHQudmlld0JveHx8Wy4xMjUqKHRoaXMuc2NyZWVuQm94WzJdLXRoaXMuc2NyZWVuQm94WzBdKS9yLC4xMjUqKHRoaXMuc2NyZWVuQm94WzNdLXRoaXMuc2NyZWVuQm94WzFdKS9yLC44NzUqKHRoaXMuc2NyZWVuQm94WzJdLXRoaXMuc2NyZWVuQm94WzBdKS9yLC44NzUqKHRoaXMuc2NyZWVuQm94WzNdLXRoaXMuc2NyZWVuQm94WzFdKS9yXSk7dmFyIG49dGhpcy52aWV3Qm94LGk9KG5bMl0tblswXSkvKG5bM10tblsxXSk7dGhpcy5zZXREYXRhQm94KHQuZGF0YUJveHx8Wy0xMCwtMTAvaSwxMCwxMC9pXSksdGhpcy5ib3JkZXJDb2xvcj0hMSE9PXQuYm9yZGVyQ29sb3ImJih0LmJvcmRlckNvbG9yfHxbMCwwLDAsMF0pLnNsaWNlKCksdGhpcy5iYWNrZ3JvdW5kQ29sb3I9KHQuYmFja2dyb3VuZENvbG9yfHxbMCwwLDAsMF0pLnNsaWNlKCksdGhpcy5ncmlkTGluZUVuYWJsZT0odC5ncmlkTGluZUVuYWJsZXx8WyEwLCEwXSkuc2xpY2UoKSx0aGlzLmdyaWRMaW5lV2lkdGg9KHQuZ3JpZExpbmVXaWR0aHx8WzEsMV0pLnNsaWNlKCksdGhpcy5ncmlkTGluZUNvbG9yPXUodC5ncmlkTGluZUNvbG9yfHxbWy41LC41LC41LDFdLFsuNSwuNSwuNSwxXV0pLHRoaXMuemVyb0xpbmVFbmFibGU9KHQuemVyb0xpbmVFbmFibGV8fFshMCwhMF0pLnNsaWNlKCksdGhpcy56ZXJvTGluZVdpZHRoPSh0Lnplcm9MaW5lV2lkdGh8fFs0LDRdKS5zbGljZSgpLHRoaXMuemVyb0xpbmVDb2xvcj11KHQuemVyb0xpbmVDb2xvcnx8W1swLDAsMCwxXSxbMCwwLDAsMV1dKSx0aGlzLnRpY2tNYXJrTGVuZ3RoPSh0LnRpY2tNYXJrTGVuZ3RofHxbMCwwLDAsMF0pLnNsaWNlKCksdGhpcy50aWNrTWFya1dpZHRoPSh0LnRpY2tNYXJrV2lkdGh8fFswLDAsMCwwXSkuc2xpY2UoKSx0aGlzLnRpY2tNYXJrQ29sb3I9dSh0LnRpY2tNYXJrQ29sb3J8fFtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dKSx0aGlzLnRpdGxlQ2VudGVyPSh0LnRpdGxlQ2VudGVyfHxbLjUqKG5bMF0rblsyXSkvciwoblszXSsxMjApL3JdKS5zbGljZSgpLHRoaXMudGl0bGVFbmFibGU9ISgidGl0bGVFbmFibGUiaW4gdCYmIXQudGl0bGVFbmFibGUpLHRoaXMudGl0bGVBbmdsZT10LnRpdGxlQW5nbGV8fDAsdGhpcy50aXRsZUNvbG9yPSh0LnRpdGxlQ29sb3J8fFswLDAsMCwxXSkuc2xpY2UoKSx0aGlzLmxhYmVsUGFkPSh0LmxhYmVsUGFkfHxbMTUsMTUsMTUsMTVdKS5zbGljZSgpLHRoaXMubGFiZWxBbmdsZT0odC5sYWJlbEFuZ2xlfHxbMCxNYXRoLlBJLzIsMCwzKk1hdGguUEkvMl0pLnNsaWNlKCksdGhpcy5sYWJlbEVuYWJsZT0odC5sYWJlbEVuYWJsZXx8WyEwLCEwLCEwLCEwXSkuc2xpY2UoKSx0aGlzLmxhYmVsQ29sb3I9dSh0LmxhYmVsQ29sb3J8fFtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dKSx0aGlzLnRpY2tQYWQ9KHQudGlja1BhZHx8WzE1LDE1LDE1LDE1XSkuc2xpY2UoKSx0aGlzLnRpY2tBbmdsZT0odC50aWNrQW5nbGV8fFswLDAsMCwwXSkuc2xpY2UoKSx0aGlzLnRpY2tFbmFibGU9KHQudGlja0VuYWJsZXx8WyEwLCEwLCEwLCEwXSkuc2xpY2UoKSx0aGlzLnRpY2tDb2xvcj11KHQudGlja0NvbG9yfHxbWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSksdGhpcy5ib3JkZXJMaW5lRW5hYmxlPSh0LmJvcmRlckxpbmVFbmFibGV8fFshMCwhMCwhMCwhMF0pLnNsaWNlKCksdGhpcy5ib3JkZXJMaW5lV2lkdGg9KHQuYm9yZGVyTGluZVdpZHRofHxbMiwyLDIsMl0pLnNsaWNlKCksdGhpcy5ib3JkZXJMaW5lQ29sb3I9dSh0LmJvcmRlckxpbmVDb2xvcnx8W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0pO3ZhciBhPXQudGlja3N8fFtbXSxbXV0sbz10aGlzLl90aWNrQm91bmRzO29bMF09b1sxXT0xLzAsb1syXT1vWzNdPS0xLzA7Zm9yKHZhciBzPTA7czwyOysrcyl7dmFyIGw9YVtzXS5zbGljZSgwKTswIT09bC5sZW5ndGgmJihsLnNvcnQoaCksb1tzXT1NYXRoLm1pbihvW3NdLGxbMF0ueCksb1tzKzJdPU1hdGgubWF4KG9bcysyXSxsW2wubGVuZ3RoLTFdLngpKX10aGlzLmdyaWQudXBkYXRlKHtib3VuZHM6byx0aWNrczphfSksdGhpcy50ZXh0LnVwZGF0ZSh7Ym91bmRzOm8sdGlja3M6YSxsYWJlbHM6dC5sYWJlbHN8fFsieCIsInkiXSxsYWJlbFNpemU6dC5sYWJlbFNpemV8fFsxMiwxMl0sbGFiZWxGb250OnQubGFiZWxGb250fHxbInNhbnMtc2VyaWYiLCJzYW5zLXNlcmlmIl0sdGl0bGU6dC50aXRsZXx8IiIsdGl0bGVTaXplOnQudGl0bGVTaXplfHwxOCx0aXRsZUZvbnQ6dC50aXRsZUZvbnR8fCJzYW5zLXNlcmlmIn0pLHRoaXMuc3RhdGljPSEhdC5zdGF0aWMsdGhpcy5zZXREaXJ0eSgpfSxjLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmJveC5kaXNwb3NlKCksdGhpcy5ncmlkLmRpc3Bvc2UoKSx0aGlzLnRleHQuZGlzcG9zZSgpLHRoaXMubGluZS5kaXNwb3NlKCk7Zm9yKHZhciB0PXRoaXMub2JqZWN0cy5sZW5ndGgtMTt0Pj0wOy0tdCl0aGlzLm9iamVjdHNbdF0uZGlzcG9zZSgpO3RoaXMub2JqZWN0cy5sZW5ndGg9MDtmb3IodD10aGlzLm92ZXJsYXlzLmxlbmd0aC0xO3Q+PTA7LS10KXRoaXMub3ZlcmxheXNbdF0uZGlzcG9zZSgpO3RoaXMub3ZlcmxheXMubGVuZ3RoPTAsdGhpcy5nbD1udWxsfSxjLmFkZE9iamVjdD1mdW5jdGlvbih0KXt0aGlzLm9iamVjdHMuaW5kZXhPZih0KTwwJiYodGhpcy5vYmplY3RzLnB1c2godCksdGhpcy5zZXREaXJ0eSgpKX0sYy5yZW1vdmVPYmplY3Q9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMub2JqZWN0cyxyPTA7cjxlLmxlbmd0aDsrK3IpaWYoZVtyXT09PXQpe2Uuc3BsaWNlKHIsMSksdGhpcy5zZXREaXJ0eSgpO2JyZWFrfX0sYy5hZGRPdmVybGF5PWZ1bmN0aW9uKHQpe3RoaXMub3ZlcmxheXMuaW5kZXhPZih0KTwwJiYodGhpcy5vdmVybGF5cy5wdXNoKHQpLHRoaXMuc2V0T3ZlcmxheURpcnR5KCkpfSxjLnJlbW92ZU92ZXJsYXk9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMub3ZlcmxheXMscj0wO3I8ZS5sZW5ndGg7KytyKWlmKGVbcl09PT10KXtlLnNwbGljZShyLDEpLHRoaXMuc2V0T3ZlcmxheURpcnR5KCk7YnJlYWt9fX0seyIuL2xpYi9ib3giOjI2OSwiLi9saWIvZ3JpZCI6MjcwLCIuL2xpYi9saW5lIjoyNzEsIi4vbGliL3RleHQiOjI3MywiZ2wtc2VsZWN0LXN0YXRpYyI6Mjg2fV0sMjc2OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiZ2xzbGlmeSIpLGk9dCgiZ2wtc2hhZGVyIiksYT1uKFsicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuYXR0cmlidXRlIHZlYzIgcG9zaXRpb247XG52YXJ5aW5nIHZlYzIgdXY7XG52b2lkIG1haW4oKSB7XG4gIHV2ID0gcG9zaXRpb247XG4gIGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMCwgMSk7XG59Il0pLG89bihbInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudW5pZm9ybSBzYW1wbGVyMkQgYWNjdW1CdWZmZXI7XG52YXJ5aW5nIHZlYzIgdXY7XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjNCBhY2N1bSA9IHRleHR1cmUyRChhY2N1bUJ1ZmZlciwgMC41ICogKHV2ICsgMS4wKSk7XG4gIGdsX0ZyYWdDb2xvciA9IG1pbih2ZWM0KDEsMSwxLDEpLCBhY2N1bSk7XG59Il0pO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaSh0LGEsbyxudWxsLFt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzIifV0pfX0seyJnbC1zaGFkZXIiOjI4NyxnbHNsaWZ5OjM3N31dLDI3NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9ITEscj0oKHQ9dHx8e30pLnBpeGVsUmF0aW98fHBhcnNlRmxvYXQod2luZG93LmRldmljZVBpeGVsUmF0aW8pLHQuY2FudmFzKTtpZighcilpZihyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLHQuY29udGFpbmVyKXt2YXIgdj10LmNvbnRhaW5lcjt2LmFwcGVuZENoaWxkKHIpfWVsc2UgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChyKTt2YXIgeT10LmdsO3l8fCh5PWZ1bmN0aW9uKHQsZSl7dmFyIHI9bnVsbDt0cnl7KHI9dC5nZXRDb250ZXh0KCJ3ZWJnbCIsZSkpfHwocj10LmdldENvbnRleHQoImV4cGVyaW1lbnRhbC13ZWJnbCIsZSkpfWNhdGNoKHQpe3JldHVybiBudWxsfXJldHVybiByfShyLHQuZ2xPcHRpb25zfHx7cHJlbXVsdGlwbGllZEFscGhhOiEwLGFudGlhbGlhczohMH0pKTtpZigheSl0aHJvdyBuZXcgRXJyb3IoIndlYmdsIG5vdCBzdXBwb3J0ZWQiKTt2YXIgeD10LmJvdW5kc3x8W1stMTAsLTEwLC0xMF0sWzEwLDEwLDEwXV0sYj1uZXcgZCxfPWwoeSxbeS5kcmF3aW5nQnVmZmVyV2lkdGgseS5kcmF3aW5nQnVmZmVySGVpZ2h0XSx7cHJlZmVyRmxvYXQ6IXB9KSx3PWYoeSksaz10LmNhbWVyYXx8e2V5ZTpbMiwwLDBdLGNlbnRlcjpbMCwwLDBdLHVwOlswLDEsMF0sem9vbU1pbjouMSx6b29tTWF4OjEwMCxtb2RlOiJ0dXJudGFibGUifSxNPXQuYXhlc3x8e30sQT1pKHksTSk7QS5lbmFibGU9IU0uZGlzYWJsZTt2YXIgVD10LnNwaWtlc3x8e30sUz1vKHksVCksRT1bXSxDPVtdLEw9W10sej1bXSxQPSEwLEk9ITAsTz1uZXcgQXJyYXkoMTYpLEQ9bmV3IEFycmF5KDE2KSxSPXt2aWV3Om51bGwscHJvamVjdGlvbjpPLG1vZGVsOkR9LEk9ITAsQj1beS5kcmF3aW5nQnVmZmVyV2lkdGgseS5kcmF3aW5nQnVmZmVySGVpZ2h0XSxGPXtnbDp5LGNvbnRleHRMb3N0OiExLHBpeGVsUmF0aW86dC5waXhlbFJhdGlvfHxwYXJzZUZsb2F0KHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvKSxjYW52YXM6cixzZWxlY3Rpb246YixjYW1lcmE6bihyLGspLGF4ZXM6QSxheGVzUGl4ZWxzOm51bGwsc3Bpa2VzOlMsYm91bmRzOngsb2JqZWN0czpFLHNoYXBlOkIsYXNwZWN0OnQuYXNwZWN0UmF0aW98fFsxLDEsMV0scGlja1JhZGl1czp0LnBpY2tSYWRpdXN8fDEwLHpOZWFyOnQuek5lYXJ8fC4wMSx6RmFyOnQuekZhcnx8MWUzLGZvdnk6dC5mb3Z5fHxNYXRoLlBJLzQsY2xlYXJDb2xvcjp0LmNsZWFyQ29sb3J8fFswLDAsMCwwXSxhdXRvUmVzaXplOm0odC5hdXRvUmVzaXplKSxhdXRvQm91bmRzOm0odC5hdXRvQm91bmRzKSxhdXRvU2NhbGU6ISF0LmF1dG9TY2FsZSxhdXRvQ2VudGVyOm0odC5hdXRvQ2VudGVyKSxjbGlwVG9Cb3VuZHM6bSh0LmNsaXBUb0JvdW5kcyksc25hcFRvRGF0YTohIXQuc25hcFRvRGF0YSxvbnNlbGVjdDp0Lm9uc2VsZWN0fHxudWxsLG9ucmVuZGVyOnQub25yZW5kZXJ8fG51bGwsb25jbGljazp0Lm9uY2xpY2t8fG51bGwsY2FtZXJhUGFyYW1zOlIsb25jb250ZXh0bG9zczpudWxsLG1vdXNlTGlzdGVuZXI6bnVsbH0sTj1beS5kcmF3aW5nQnVmZmVyV2lkdGgvRi5waXhlbFJhdGlvfDAseS5kcmF3aW5nQnVmZmVySGVpZ2h0L0YucGl4ZWxSYXRpb3wwXTtmdW5jdGlvbiBqKCl7aWYoIWUmJkYuYXV0b1Jlc2l6ZSl7dmFyIHQ9ci5wYXJlbnROb2RlLG49MSxpPTE7dCYmdCE9PWRvY3VtZW50LmJvZHk/KG49dC5jbGllbnRXaWR0aCxpPXQuY2xpZW50SGVpZ2h0KToobj13aW5kb3cuaW5uZXJXaWR0aCxpPXdpbmRvdy5pbm5lckhlaWdodCk7dmFyIGE9MHxNYXRoLmNlaWwobipGLnBpeGVsUmF0aW8pLG89MHxNYXRoLmNlaWwoaSpGLnBpeGVsUmF0aW8pO2lmKGEhPT1yLndpZHRofHxvIT09ci5oZWlnaHQpe3Iud2lkdGg9YSxyLmhlaWdodD1vO3ZhciBzPXIuc3R5bGU7cy5wb3NpdGlvbj1zLnBvc2l0aW9ufHwiYWJzb2x1dGUiLHMubGVmdD0iMHB4IixzLnRvcD0iMHB4IixzLndpZHRoPW4rInB4IixzLmhlaWdodD1pKyJweCIsUD0hMH19fUYuYXV0b1Jlc2l6ZSYmaigpO2Z1bmN0aW9uIFYoKXtmb3IodmFyIHQ9RS5sZW5ndGgsZT16Lmxlbmd0aCxyPTA7cjxlOysrcilMW3JdPTA7dDpmb3IodmFyIHI9MDtyPHQ7KytyKXt2YXIgbj1FW3JdLGk9bi5waWNrU2xvdHM7aWYoaSl7Zm9yKHZhciBhPTA7YTxlOysrYSlpZihMW2FdK2k8MjU1KXtDW3JdPWEsbi5zZXRQaWNrQmFzZShMW2FdKzEpLExbYV0rPWk7Y29udGludWUgdH12YXIgbz1zKHksQik7Q1tyXT1lLHoucHVzaChvKSxMLnB1c2goaSksbi5zZXRQaWNrQmFzZSgxKSxlKz0xfWVsc2UgQ1tyXT0tMX1mb3IoO2U+MCYmMD09PUxbZS0xXTspTC5wb3AoKSx6LnBvcCgpLmRpc3Bvc2UoKX13aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIixqKSxGLnVwZGF0ZT1mdW5jdGlvbih0KXtlfHwodD10fHx7fSxQPSEwLEk9ITApfSxGLmFkZD1mdW5jdGlvbih0KXtlfHwodC5heGVzPUEsRS5wdXNoKHQpLEMucHVzaCgtMSksUD0hMCxJPSEwLFYoKSl9LEYucmVtb3ZlPWZ1bmN0aW9uKHQpe2lmKCFlKXt2YXIgcj1FLmluZGV4T2YodCk7cjwwfHwoRS5zcGxpY2UociwxKSxDLnBvcCgpLFA9ITAsST0hMCxWKCkpfX0sRi5kaXNwb3NlPWZ1bmN0aW9uKCl7aWYoIWUmJihlPSEwLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLGopLHIucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0bG9zdCIsSCksRi5tb3VzZUxpc3RlbmVyLmVuYWJsZWQ9ITEsIUYuY29udGV4dExvc3QpKXtBLmRpc3Bvc2UoKSxTLmRpc3Bvc2UoKTtmb3IodmFyIHQ9MDt0PEUubGVuZ3RoOysrdClFW3RdLmRpc3Bvc2UoKTtfLmRpc3Bvc2UoKTtmb3IodmFyIHQ9MDt0PHoubGVuZ3RoOysrdCl6W3RdLmRpc3Bvc2UoKTt3LmRpc3Bvc2UoKSx5PW51bGwsQT1udWxsLFM9bnVsbCxFPVtdfX07dmFyIFU9ITEscT0wO2Z1bmN0aW9uIEgoKXtpZihGLmNvbnRleHRMb3N0KXJldHVybiEwO3kuaXNDb250ZXh0TG9zdCgpJiYoRi5jb250ZXh0TG9zdD0hMCxGLm1vdXNlTGlzdGVuZXIuZW5hYmxlZD0hMSxGLnNlbGVjdGlvbi5vYmplY3Q9bnVsbCxGLm9uY29udGV4dGxvc3MmJkYub25jb250ZXh0bG9zcygpKX1GLm1vdXNlTGlzdGVuZXI9dShyLGZ1bmN0aW9uKHQscixuKXtpZighZSl7dmFyIGk9ei5sZW5ndGgsYT1FLmxlbmd0aCxvPWIub2JqZWN0O2IuZGlzdGFuY2U9MS8wLGIubW91c2VbMF09cixiLm1vdXNlWzFdPW4sYi5vYmplY3Q9bnVsbCxiLnNjcmVlbj1udWxsLGIuZGF0YUNvb3JkaW5hdGU9Yi5kYXRhUG9zaXRpb249bnVsbDt2YXIgcz0hMTtpZih0JiZxKVU9ITA7ZWxzZXtVJiYoST0hMCksVT0hMTtmb3IodmFyIGw9MDtsPGk7KytsKXt2YXIgYz16W2xdLnF1ZXJ5KHIsTlsxXS1uLTEsRi5waWNrUmFkaXVzKTtpZihjKXtpZihjLmRpc3RhbmNlPmIuZGlzdGFuY2UpY29udGludWU7Zm9yKHZhciB1PTA7dTxhOysrdSl7dmFyIGg9RVt1XTtpZihDW3VdPT09bCl7dmFyIGY9aC5waWNrKGMpO2YmJihiLmJ1dHRvbnM9dCxiLnNjcmVlbj1jLmNvb3JkLGIuZGlzdGFuY2U9Yy5kaXN0YW5jZSxiLm9iamVjdD1oLGIuaW5kZXg9Zi5kaXN0YW5jZSxiLmRhdGFQb3NpdGlvbj1mLnBvc2l0aW9uLGIuZGF0YUNvb3JkaW5hdGU9Zi5kYXRhQ29vcmRpbmF0ZSxiLmRhdGE9ZixzPSEwKX19fX19byYmbyE9PWIub2JqZWN0JiYoby5oaWdobGlnaHQmJm8uaGlnaGxpZ2h0KG51bGwpLFA9ITApLGIub2JqZWN0JiYoYi5vYmplY3QuaGlnaGxpZ2h0JiZiLm9iamVjdC5oaWdobGlnaHQoYi5kYXRhKSxQPSEwKSwocz1zfHxiLm9iamVjdCE9PW8pJiZGLm9uc2VsZWN0JiZGLm9uc2VsZWN0KGIpLDEmdCYmISgxJnEpJiZGLm9uY2xpY2smJkYub25jbGljayhiKSxxPXR9fSksci5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRsb3N0IixIKTt2YXIgRz1bWzEvMCwxLzAsMS8wXSxbLTEvMCwtMS8wLC0xLzBdXSxXPVtHWzBdLnNsaWNlKCksR1sxXS5zbGljZSgpXTtmdW5jdGlvbiBZKCl7aWYoIUgoKSl7aigpO3ZhciB0PUYuY2FtZXJhLnRpY2soKTtSLnZpZXc9Ri5jYW1lcmEubWF0cml4LFA9UHx8dCxJPUl8fHQsQS5waXhlbFJhdGlvPUYucGl4ZWxSYXRpbyxTLnBpeGVsUmF0aW89Ri5waXhlbFJhdGlvO3ZhciBlPUUubGVuZ3RoLHI9R1swXSxuPUdbMV07clswXT1yWzFdPXJbMl09MS8wLG5bMF09blsxXT1uWzJdPS0xLzA7Zm9yKHZhciBpPTA7aTxlOysraSl7dmFyIG89RVtpXTtvLnBpeGVsUmF0aW89Ri5waXhlbFJhdGlvLG8uYXhlcz1GLmF4ZXMsUD1QfHwhIW8uZGlydHksST1JfHwhIW8uZGlydHk7dmFyIHM9by5ib3VuZHM7aWYocylmb3IodmFyIGw9c1swXSx1PXNbMV0sZj0wO2Y8MzsrK2YpcltmXT1NYXRoLm1pbihyW2ZdLGxbZl0pLG5bZl09TWF0aC5tYXgobltmXSx1W2ZdKX12YXIgcD1GLmJvdW5kcztpZihGLmF1dG9Cb3VuZHMpZm9yKHZhciBmPTA7ZjwzOysrZil7aWYobltmXTxyW2ZdKXJbZl09LTEsbltmXT0xO2Vsc2V7cltmXT09PW5bZl0mJihyW2ZdLT0xLG5bZl0rPTEpO3ZhciBkPS4wNSoobltmXS1yW2ZdKTtyW2ZdPXJbZl0tZCxuW2ZdPW5bZl0rZH1wWzBdW2ZdPXJbZl0scFsxXVtmXT1uW2ZdfWZvcih2YXIgbT0hMSxmPTA7ZjwzOysrZiltPW18fFdbMF1bZl0hPT1wWzBdW2ZdfHxXWzFdW2ZdIT09cFsxXVtmXSxXWzBdW2ZdPXBbMF1bZl0sV1sxXVtmXT1wWzFdW2ZdO2lmKEk9SXx8bSxQPVB8fG0pe2lmKG0pe2Zvcih2YXIgdj1bMCwwLDBdLGk9MDtpPDM7KytpKXZbaV09ZygocFsxXVtpXS1wWzBdW2ldKS8xMCk7QS5hdXRvVGlja3M/QS51cGRhdGUoe2JvdW5kczpwLHRpY2tTcGFjaW5nOnZ9KTpBLnVwZGF0ZSh7Ym91bmRzOnB9KX12YXIgeD15LmRyYXdpbmdCdWZmZXJXaWR0aCxrPXkuZHJhd2luZ0J1ZmZlckhlaWdodDtCWzBdPXgsQlsxXT1rLE5bMF09MHxNYXRoLm1heCh4L0YucGl4ZWxSYXRpbywxKSxOWzFdPTB8TWF0aC5tYXgoay9GLnBpeGVsUmF0aW8sMSksaChPLEYuZm92eSx4L2ssRi56TmVhcixGLnpGYXIpO2Zvcih2YXIgaT0wO2k8MTY7KytpKURbaV09MDtEWzE1XT0xO2Zvcih2YXIgTT0wLGk9MDtpPDM7KytpKU09TWF0aC5tYXgoTSxwWzFdW2ldLXBbMF1baV0pO2Zvcih2YXIgaT0wO2k8MzsrK2kpRi5hdXRvU2NhbGU/RFs1KmldPUYuYXNwZWN0W2ldLyhwWzFdW2ldLXBbMF1baV0pOkRbNSppXT0xL00sRi5hdXRvQ2VudGVyJiYoRFsxMitpXT0uNSotRFs1KmldKihwWzBdW2ldK3BbMV1baV0pKTtmb3IodmFyIGk9MDtpPGU7KytpKXt2YXIgbz1FW2ldO28uYXhlc0JvdW5kcz1wLEYuY2xpcFRvQm91bmRzJiYoby5jbGlwQm91bmRzPXApfWIub2JqZWN0JiYoRi5zbmFwVG9EYXRhP1MucG9zaXRpb249Yi5kYXRhQ29vcmRpbmF0ZTpTLnBvc2l0aW9uPWIuZGF0YVBvc2l0aW9uLFMuYm91bmRzPXApLEkmJihJPSExLGZ1bmN0aW9uKCl7aWYoSCgpKXJldHVybjt5LmNvbG9yTWFzayghMCwhMCwhMCwhMCkseS5kZXB0aE1hc2soITApLHkuZGlzYWJsZSh5LkJMRU5EKSx5LmVuYWJsZSh5LkRFUFRIX1RFU1QpO2Zvcih2YXIgdD1FLmxlbmd0aCxlPXoubGVuZ3RoLHI9MDtyPGU7KytyKXt2YXIgbj16W3JdO24uc2hhcGU9TixuLmJlZ2luKCk7Zm9yKHZhciBpPTA7aTx0OysraSlpZihDW2ldPT09cil7dmFyIGE9RVtpXTthLmRyYXdQaWNrJiYoYS5waXhlbFJhdGlvPTEsYS5kcmF3UGljayhSKSl9bi5lbmQoKX19KCkpLEYuYXhlc1BpeGVscz1hKEYuYXhlcyxSLHgsayksRi5vbnJlbmRlciYmRi5vbnJlbmRlcigpLHkuYmluZEZyYW1lYnVmZmVyKHkuRlJBTUVCVUZGRVIsbnVsbCkseS52aWV3cG9ydCgwLDAseCxrKTt2YXIgVD1GLmNsZWFyQ29sb3I7eS5jbGVhckNvbG9yKFRbMF0sVFsxXSxUWzJdLFRbM10pLHkuY2xlYXIoeS5DT0xPUl9CVUZGRVJfQklUfHkuREVQVEhfQlVGRkVSX0JJVCkseS5kZXB0aE1hc2soITApLHkuY29sb3JNYXNrKCEwLCEwLCEwLCEwKSx5LmVuYWJsZSh5LkRFUFRIX1RFU1QpLHkuZGVwdGhGdW5jKHkuTEVRVUFMKSx5LmRpc2FibGUoeS5CTEVORCkseS5kaXNhYmxlKHkuQ1VMTF9GQUNFKTt2YXIgTD0hMTtBLmVuYWJsZSYmKEw9THx8QS5pc1RyYW5zcGFyZW50KCksQS5kcmF3KFIpKSxTLmF4ZXM9QSxiLm9iamVjdCYmUy5kcmF3KFIpLHkuZGlzYWJsZSh5LkNVTExfRkFDRSk7Zm9yKHZhciBpPTA7aTxlOysraSl7dmFyIG89RVtpXTtvLmF4ZXM9QSxvLnBpeGVsUmF0aW89Ri5waXhlbFJhdGlvLG8uaXNPcGFxdWUmJm8uaXNPcGFxdWUoKSYmby5kcmF3KFIpLG8uaXNUcmFuc3BhcmVudCYmby5pc1RyYW5zcGFyZW50KCkmJihMPSEwKX1pZihMKXtfLnNoYXBlPUIsXy5iaW5kKCkseS5jbGVhcih5LkRFUFRIX0JVRkZFUl9CSVQpLHkuY29sb3JNYXNrKCExLCExLCExLCExKSx5LmRlcHRoTWFzayghMCkseS5kZXB0aEZ1bmMoeS5MRVNTKSxBLmVuYWJsZSYmQS5pc1RyYW5zcGFyZW50KCkmJkEuZHJhd1RyYW5zcGFyZW50KFIpO2Zvcih2YXIgaT0wO2k8ZTsrK2kpe3ZhciBvPUVbaV07by5pc09wYXF1ZSYmby5pc09wYXF1ZSgpJiZvLmRyYXcoUil9eS5lbmFibGUoeS5CTEVORCkseS5ibGVuZEVxdWF0aW9uKHkuRlVOQ19BREQpLHkuYmxlbmRGdW5jKHkuT05FLHkuT05FX01JTlVTX1NSQ19BTFBIQSkseS5jb2xvck1hc2soITAsITAsITAsITApLHkuZGVwdGhNYXNrKCExKSx5LmNsZWFyQ29sb3IoMCwwLDAsMCkseS5jbGVhcih5LkNPTE9SX0JVRkZFUl9CSVQpLEEuaXNUcmFuc3BhcmVudCgpJiZBLmRyYXdUcmFuc3BhcmVudChSKTtmb3IodmFyIGk9MDtpPGU7KytpKXt2YXIgbz1FW2ldO28uaXNUcmFuc3BhcmVudCYmby5pc1RyYW5zcGFyZW50KCkmJm8uZHJhd1RyYW5zcGFyZW50KFIpfXkuYmluZEZyYW1lYnVmZmVyKHkuRlJBTUVCVUZGRVIsbnVsbCkseS5ibGVuZEZ1bmMoeS5PTkUseS5PTkVfTUlOVVNfU1JDX0FMUEhBKSx5LmRpc2FibGUoeS5ERVBUSF9URVNUKSx3LmJpbmQoKSxfLmNvbG9yWzBdLmJpbmQoMCksdy51bmlmb3Jtcy5hY2N1bUJ1ZmZlcj0wLGMoeSkseS5kaXNhYmxlKHkuQkxFTkQpfVA9ITE7Zm9yKHZhciBpPTA7aTxlOysraSlFW2ldLmRpcnR5PSExfX19cmV0dXJuIGZ1bmN0aW9uIHQoKXtlfHxGLmNvbnRleHRMb3N0fHwocmVxdWVzdEFuaW1hdGlvbkZyYW1lKHQpLFkoKSl9KCksRi5yZWRyYXc9ZnVuY3Rpb24oKXtlfHwoUD0hMCxZKCkpfSxGfTt2YXIgbj10KCIzZC12aWV3LWNvbnRyb2xzIiksaT10KCJnbC1heGVzM2QiKSxhPXQoImdsLWF4ZXMzZC9wcm9wZXJ0aWVzIiksbz10KCJnbC1zcGlrZXMzZCIpLHM9dCgiZ2wtc2VsZWN0LXN0YXRpYyIpLGw9dCgiZ2wtZmJvIiksYz10KCJhLWJpZy10cmlhbmdsZSIpLHU9dCgibW91c2UtY2hhbmdlIiksaD10KCJnbC1tYXQ0L3BlcnNwZWN0aXZlIiksZj10KCIuL2xpYi9zaGFkZXIiKSxwPXQoImlzLW1vYmlsZSIpKCk7ZnVuY3Rpb24gZCgpe3RoaXMubW91c2U9Wy0xLC0xXSx0aGlzLnNjcmVlbj1udWxsLHRoaXMuZGlzdGFuY2U9MS8wLHRoaXMuaW5kZXg9bnVsbCx0aGlzLmRhdGFDb29yZGluYXRlPW51bGwsdGhpcy5kYXRhUG9zaXRpb249bnVsbCx0aGlzLm9iamVjdD1udWxsLHRoaXMuZGF0YT1udWxsfWZ1bmN0aW9uIGcodCl7dmFyIGU9TWF0aC5yb3VuZChNYXRoLmxvZyhNYXRoLmFicyh0KSkvTWF0aC5sb2coMTApKTtpZihlPDApe3ZhciByPU1hdGgucm91bmQoTWF0aC5wb3coMTAsLWUpKTtyZXR1cm4gTWF0aC5jZWlsKHQqcikvcn1pZihlPjApe3I9TWF0aC5yb3VuZChNYXRoLnBvdygxMCxlKSk7cmV0dXJuIE1hdGguY2VpbCh0L3IpKnJ9cmV0dXJuIE1hdGguY2VpbCh0KX1mdW5jdGlvbiBtKHQpe3JldHVybiJib29sZWFuIiE9dHlwZW9mIHR8fHR9fSx7Ii4vbGliL3NoYWRlciI6Mjc2LCIzZC12aWV3LWNvbnRyb2xzIjo0MiwiYS1iaWctdHJpYW5nbGUiOjUwLCJnbC1heGVzM2QiOjIyMiwiZ2wtYXhlczNkL3Byb3BlcnRpZXMiOjIyOSwiZ2wtZmJvIjoyMzksImdsLW1hdDQvcGVyc3BlY3RpdmUiOjI1NywiZ2wtc2VsZWN0LXN0YXRpYyI6Mjg2LCJnbC1zcGlrZXMzZCI6Mjk2LCJpcy1tb2JpbGUiOjM4OCwibW91c2UtY2hhbmdlIjo0MDJ9XSwyNzg6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCJnbHNsaWZ5Iik7ci5wb2ludFZlcnRleD1uKFsicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjtcblxudW5pZm9ybSBtYXQzIG1hdHJpeDtcbnVuaWZvcm0gZmxvYXQgcG9pbnRTaXplO1xudW5pZm9ybSBmbG9hdCBwb2ludENsb3VkO1xuXG5oaWdocCBmbG9hdCByYW5kKHZlYzIgY28pIHtcbiAgaGlnaHAgZmxvYXQgYSA9IDEyLjk4OTg7XG4gIGhpZ2hwIGZsb2F0IGIgPSA3OC4yMzM7XG4gIGhpZ2hwIGZsb2F0IGMgPSA0Mzc1OC41NDUzO1xuICBoaWdocCBmbG9hdCBkID0gZG90KGNvLnh5LCB2ZWMyKGEsIGIpKTtcbiAgaGlnaHAgZmxvYXQgZSA9IG1vZChkLCAzLjE0KTtcbiAgcmV0dXJuIGZyYWN0KHNpbihlKSAqIGMpO1xufVxuXG52b2lkIG1haW4oKSB7XG4gIHZlYzMgaGdQb3NpdGlvbiA9IG1hdHJpeCAqIHZlYzMocG9zaXRpb24sIDEpO1xuICBnbF9Qb3NpdGlvbiAgPSB2ZWM0KGhnUG9zaXRpb24ueHksIDAsIGhnUG9zaXRpb24ueik7XG4gICAgLy8gaWYgd2UgZG9uJ3Qgaml0dGVyIHRoZSBwb2ludCBzaXplIGEgYml0LCBvdmVyYWxsIHBvaW50IGNsb3VkXG4gICAgLy8gc2F0dXJhdGlvbiAnanVtcHMnIG9uIHpvb21pbmcsIHdoaWNoIGlzIGRpc3R1cmJpbmcgYW5kIGNvbmZ1c2luZ1xuICBnbF9Qb2ludFNpemUgPSBwb2ludFNpemUgKiAoKDE5LjUgKyByYW5kKHBvc2l0aW9uKSkgLyAyMC4wKTtcbiAgaWYocG9pbnRDbG91ZCAhPSAwLjApIHsgLy8gcG9pbnRDbG91ZCBpcyB0cnV0aHlcbiAgICAvLyBnZXQgdGhlIHNhbWUgc3F1YXJlIHN1cmZhY2UgYXMgY2lyY2xlIHdvdWxkIGJlXG4gICAgZ2xfUG9pbnRTaXplICo9IDAuODg2O1xuICB9XG59Il0pLHIucG9pbnRGcmFnbWVudD1uKFsicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG51bmlmb3JtIHZlYzQgY29sb3IsIGJvcmRlckNvbG9yO1xudW5pZm9ybSBmbG9hdCBjZW50ZXJGcmFjdGlvbjtcbnVuaWZvcm0gZmxvYXQgcG9pbnRDbG91ZDtcblxudm9pZCBtYWluKCkge1xuICBmbG9hdCByYWRpdXM7XG4gIHZlYzQgYmFzZUNvbG9yO1xuICBpZihwb2ludENsb3VkICE9IDAuMCkgeyAvLyBwb2ludENsb3VkIGlzIHRydXRoeVxuICAgIGlmKGNlbnRlckZyYWN0aW9uID09IDEuMCkge1xuICAgICAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7XG4gICAgfSBlbHNlIHtcbiAgICAgIGdsX0ZyYWdDb2xvciA9IG1peChib3JkZXJDb2xvciwgY29sb3IsIGNlbnRlckZyYWN0aW9uKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmFkaXVzID0gbGVuZ3RoKDIuMCAqIGdsX1BvaW50Q29vcmQueHkgLSAxLjApO1xuICAgIGlmKHJhZGl1cyA+IDEuMCkge1xuICAgICAgZGlzY2FyZDtcbiAgICB9XG4gICAgYmFzZUNvbG9yID0gbWl4KGJvcmRlckNvbG9yLCBjb2xvciwgc3RlcChyYWRpdXMsIGNlbnRlckZyYWN0aW9uKSk7XG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChiYXNlQ29sb3IucmdiICogYmFzZUNvbG9yLmEsIGJhc2VDb2xvci5hKTtcbiAgfVxufVxuIl0pLHIucGlja1ZlcnRleD1uKFsicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjtcbmF0dHJpYnV0ZSB2ZWM0IHBpY2tJZDtcblxudW5pZm9ybSBtYXQzIG1hdHJpeDtcbnVuaWZvcm0gZmxvYXQgcG9pbnRTaXplO1xudW5pZm9ybSB2ZWM0IHBpY2tPZmZzZXQ7XG5cbnZhcnlpbmcgdmVjNCBmcmFnSWQ7XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjMyBoZ1Bvc2l0aW9uID0gbWF0cml4ICogdmVjMyhwb3NpdGlvbiwgMSk7XG4gIGdsX1Bvc2l0aW9uICA9IHZlYzQoaGdQb3NpdGlvbi54eSwgMCwgaGdQb3NpdGlvbi56KTtcbiAgZ2xfUG9pbnRTaXplID0gcG9pbnRTaXplO1xuXG4gIHZlYzQgaWQgPSBwaWNrSWQgKyBwaWNrT2Zmc2V0O1xuICBpZC55ICs9IGZsb29yKGlkLnggLyAyNTYuMCk7XG4gIGlkLnggLT0gZmxvb3IoaWQueCAvIDI1Ni4wKSAqIDI1Ni4wO1xuXG4gIGlkLnogKz0gZmxvb3IoaWQueSAvIDI1Ni4wKTtcbiAgaWQueSAtPSBmbG9vcihpZC55IC8gMjU2LjApICogMjU2LjA7XG5cbiAgaWQudyArPSBmbG9vcihpZC56IC8gMjU2LjApO1xuICBpZC56IC09IGZsb29yKGlkLnogLyAyNTYuMCkgKiAyNTYuMDtcblxuICBmcmFnSWQgPSBpZDtcbn1cbiJdKSxyLnBpY2tGcmFnbWVudD1uKFsicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG52YXJ5aW5nIHZlYzQgZnJhZ0lkO1xuXG52b2lkIG1haW4oKSB7XG4gIGZsb2F0IHJhZGl1cyA9IGxlbmd0aCgyLjAgKiBnbF9Qb2ludENvb3JkLnh5IC0gMS4wKTtcbiAgaWYocmFkaXVzID4gMS4wKSB7XG4gICAgZGlzY2FyZDtcbiAgfVxuICBnbF9GcmFnQ29sb3IgPSBmcmFnSWQgLyAyNTUuMDtcbn1cbiJdKX0se2dsc2xpZnk6Mzc3fV0sMjc5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImdsLXNoYWRlciIpLGk9dCgiZ2wtYnVmZmVyIiksYT10KCJ0eXBlZGFycmF5LXBvb2wiKSxvPXQoIi4vbGliL3NoYWRlciIpO2Z1bmN0aW9uIHModCxlLHIsbixpKXt0aGlzLnBsb3Q9dCx0aGlzLm9mZnNldEJ1ZmZlcj1lLHRoaXMucGlja0J1ZmZlcj1yLHRoaXMuc2hhZGVyPW4sdGhpcy5waWNrU2hhZGVyPWksdGhpcy5zaXplTWluPS41LHRoaXMuc2l6ZU1pbkNhcD0yLHRoaXMuc2l6ZU1heD0yMCx0aGlzLmFyZWFSYXRpbz0xLHRoaXMucG9pbnRDb3VudD0wLHRoaXMuY29sb3I9WzEsMCwwLDFdLHRoaXMuYm9yZGVyQ29sb3I9WzAsMCwwLDFdLHRoaXMuYmxlbmQ9ITEsdGhpcy5waWNrT2Zmc2V0PTAsdGhpcy5wb2ludHM9bnVsbH1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmdsLGE9aShyKSxsPWkociksYz1uKHIsby5wb2ludFZlcnRleCxvLnBvaW50RnJhZ21lbnQpLHU9bihyLG8ucGlja1ZlcnRleCxvLnBpY2tGcmFnbWVudCksaD1uZXcgcyh0LGEsbCxjLHUpO3JldHVybiBoLnVwZGF0ZShlKSx0LmFkZE9iamVjdChoKSxofTt2YXIgbCxjLHU9cy5wcm90b3R5cGU7dS5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5zaGFkZXIuZGlzcG9zZSgpLHRoaXMucGlja1NoYWRlci5kaXNwb3NlKCksdGhpcy5vZmZzZXRCdWZmZXIuZGlzcG9zZSgpLHRoaXMucGlja0J1ZmZlci5kaXNwb3NlKCksdGhpcy5wbG90LnJlbW92ZU9iamVjdCh0aGlzKX0sdS51cGRhdGU9ZnVuY3Rpb24odCl7dmFyIGU7ZnVuY3Rpb24gcihlLHIpe3JldHVybiBlIGluIHQ/dFtlXTpyfXQ9dHx8e30sdGhpcy5zaXplTWluPXIoInNpemVNaW4iLC41KSx0aGlzLnNpemVNYXg9cigic2l6ZU1heCIsMjApLHRoaXMuY29sb3I9cigiY29sb3IiLFsxLDAsMCwxXSkuc2xpY2UoKSx0aGlzLmFyZWFSYXRpbz1yKCJhcmVhUmF0aW8iLDEpLHRoaXMuYm9yZGVyQ29sb3I9cigiYm9yZGVyQ29sb3IiLFswLDAsMCwxXSkuc2xpY2UoKSx0aGlzLmJsZW5kPXIoImJsZW5kIiwhMSk7dmFyIG49dC5wb3NpdGlvbnMubGVuZ3RoPj4+MSxpPXQucG9zaXRpb25zIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5LG89dC5pZFRvSW5kZXggaW5zdGFuY2VvZiBJbnQzMkFycmF5JiZ0LmlkVG9JbmRleC5sZW5ndGg+PW4scz10LnBvc2l0aW9ucyxsPWk/czphLm1hbGxvY0Zsb2F0MzIocy5sZW5ndGgpLGM9bz90LmlkVG9JbmRleDphLm1hbGxvY0ludDMyKG4pO2lmKGl8fGwuc2V0KHMpLCFvKWZvcihsLnNldChzKSxlPTA7ZTxuO2UrKyljW2VdPWU7dGhpcy5wb2ludHM9cyx0aGlzLm9mZnNldEJ1ZmZlci51cGRhdGUobCksdGhpcy5waWNrQnVmZmVyLnVwZGF0ZShjKSxpfHxhLmZyZWUobCksb3x8YS5mcmVlKGMpLHRoaXMucG9pbnRDb3VudD1uLHRoaXMucGlja09mZnNldD0wfSx1LnVuaWZpZWREcmF3PShsPVsxLDAsMCwwLDEsMCwwLDAsMV0sYz1bMCwwLDAsMF0sZnVuY3Rpb24odCl7dmFyIGU9dm9pZCAwIT09dCxyPWU/dGhpcy5waWNrU2hhZGVyOnRoaXMuc2hhZGVyLG49dGhpcy5wbG90LmdsLGk9dGhpcy5wbG90LmRhdGFCb3g7aWYoMD09PXRoaXMucG9pbnRDb3VudClyZXR1cm4gdDt2YXIgYT1pWzJdLWlbMF0sbz1pWzNdLWlbMV0scz1mdW5jdGlvbih0LGUpe3ZhciByLG49MCxpPXQubGVuZ3RoPj4+MTtmb3Iocj0wO3I8aTtyKyspe3ZhciBhPXRbMipyXSxvPXRbMipyKzFdO2E+PWVbMF0mJmE8PWVbMl0mJm8+PWVbMV0mJm88PWVbM10mJm4rK31yZXR1cm4gbn0odGhpcy5wb2ludHMsaSksdT10aGlzLnBsb3QucGlja1BpeGVsUmF0aW8qTWF0aC5tYXgoTWF0aC5taW4odGhpcy5zaXplTWluQ2FwLHRoaXMuc2l6ZU1pbiksTWF0aC5taW4odGhpcy5zaXplTWF4LHRoaXMuc2l6ZU1heC9NYXRoLnBvdyhzLC4zMzMzMykpKTtsWzBdPTIvYSxsWzRdPTIvbyxsWzZdPS0yKmlbMF0vYS0xLGxbN109LTIqaVsxXS9vLTEsdGhpcy5vZmZzZXRCdWZmZXIuYmluZCgpLHIuYmluZCgpLHIuYXR0cmlidXRlcy5wb3NpdGlvbi5wb2ludGVyKCksci51bmlmb3Jtcy5tYXRyaXg9bCxyLnVuaWZvcm1zLmNvbG9yPXRoaXMuY29sb3Isci51bmlmb3Jtcy5ib3JkZXJDb2xvcj10aGlzLmJvcmRlckNvbG9yLHIudW5pZm9ybXMucG9pbnRDbG91ZD11PDUsci51bmlmb3Jtcy5wb2ludFNpemU9dSxyLnVuaWZvcm1zLmNlbnRlckZyYWN0aW9uPU1hdGgubWluKDEsTWF0aC5tYXgoMCxNYXRoLnNxcnQoMS10aGlzLmFyZWFSYXRpbykpKSxlJiYoY1swXT0yNTUmdCxjWzFdPXQ+PjgmMjU1LGNbMl09dD4+MTYmMjU1LGNbM109dD4+MjQmMjU1LHRoaXMucGlja0J1ZmZlci5iaW5kKCksci5hdHRyaWJ1dGVzLnBpY2tJZC5wb2ludGVyKG4uVU5TSUdORURfQllURSksci51bmlmb3Jtcy5waWNrT2Zmc2V0PWMsdGhpcy5waWNrT2Zmc2V0PXQpO3ZhciBoPW4uZ2V0UGFyYW1ldGVyKG4uQkxFTkQpLGY9bi5nZXRQYXJhbWV0ZXIobi5ESVRIRVIpO3JldHVybiBoJiYhdGhpcy5ibGVuZCYmbi5kaXNhYmxlKG4uQkxFTkQpLGYmJm4uZGlzYWJsZShuLkRJVEhFUiksbi5kcmF3QXJyYXlzKG4uUE9JTlRTLDAsdGhpcy5wb2ludENvdW50KSxoJiYhdGhpcy5ibGVuZCYmbi5lbmFibGUobi5CTEVORCksZiYmbi5lbmFibGUobi5ESVRIRVIpLHQrdGhpcy5wb2ludENvdW50fSksdS5kcmF3PXUudW5pZmllZERyYXcsdS5kcmF3UGljaz11LnVuaWZpZWREcmF3LHUucGljaz1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5waWNrT2Zmc2V0LGk9dGhpcy5wb2ludENvdW50O2lmKHI8bnx8cj49bitpKXJldHVybiBudWxsO3ZhciBhPXItbixvPXRoaXMucG9pbnRzO3JldHVybntvYmplY3Q6dGhpcyxwb2ludElkOmEsZGF0YUNvb3JkOltvWzIqYV0sb1syKmErMV1dfX19LHsiLi9saWIvc2hhZGVyIjoyNzgsImdsLWJ1ZmZlciI6MjMwLCJnbC1zaGFkZXIiOjI4NywidHlwZWRhcnJheS1wb29sIjo1MDd9XSwyODA6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYSxvLHMsbCxjPWVbMF0sdT1lWzFdLGg9ZVsyXSxmPWVbM10scD1yWzBdLGQ9clsxXSxnPXJbMl0sbT1yWzNdOyhhPWMqcCt1KmQraCpnK2YqbSk8MCYmKGE9LWEscD0tcCxkPS1kLGc9LWcsbT0tbSk7MS1hPjFlLTY/KGk9TWF0aC5hY29zKGEpLG89TWF0aC5zaW4oaSkscz1NYXRoLnNpbigoMS1uKSppKS9vLGw9TWF0aC5zaW4obippKS9vKToocz0xLW4sbD1uKTtyZXR1cm4gdFswXT1zKmMrbCpwLHRbMV09cyp1K2wqZCx0WzJdPXMqaCtsKmcsdFszXT1zKmYrbCptLHR9fSx7fV0sMjgxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInZlY3Rvcml6ZS10ZXh0Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9aVtlXTtyfHwocj1pW2VdPXt9KTtpZih0IGluIHIpcmV0dXJuIHJbdF07Zm9yKHZhciBhPW4odCx7dGV4dEFsaWduOiJjZW50ZXIiLHRleHRCYXNlbGluZToibWlkZGxlIixsaW5lSGVpZ2h0OjEsZm9udDplfSksbz1uKHQse3RyaWFuZ2xlczohMCx0ZXh0QWxpZ246ImNlbnRlciIsdGV4dEJhc2VsaW5lOiJtaWRkbGUiLGxpbmVIZWlnaHQ6MSxmb250OmV9KSxzPVtbMS8wLDEvMF0sWy0xLzAsLTEvMF1dLGw9MDtsPGEucG9zaXRpb25zLmxlbmd0aDsrK2wpZm9yKHZhciBjPWEucG9zaXRpb25zW2xdLHU9MDt1PDI7Kyt1KXNbMF1bdV09TWF0aC5taW4oc1swXVt1XSxjW3VdKSxzWzFdW3VdPU1hdGgubWF4KHNbMV1bdV0sY1t1XSk7cmV0dXJuIHJbdF09W28sYSxzXX07dmFyIGk9e319LHsidmVjdG9yaXplLXRleHQiOjUxNX1dLDI4MjpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoImdsLXNoYWRlciIpLGk9dCgiZ2xzbGlmeSIpLGE9aShbInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb247XG5hdHRyaWJ1dGUgdmVjNCBjb2xvcjtcbmF0dHJpYnV0ZSB2ZWMyIGdseXBoO1xuYXR0cmlidXRlIHZlYzQgaWQ7XG5cbnVuaWZvcm0gdmVjNCBoaWdobGlnaHRJZDtcbnVuaWZvcm0gZmxvYXQgaGlnaGxpZ2h0U2NhbGU7XG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcblxudmFyeWluZyB2ZWM0IGludGVycENvbG9yO1xudmFyeWluZyB2ZWM0IHBpY2tJZDtcbnZhcnlpbmcgdmVjMyBkYXRhQ29vcmRpbmF0ZTtcblxudm9pZCBtYWluKCkge1xuICBpZihhbnkobGVzc1RoYW4ocG9zaXRpb24sIGNsaXBCb3VuZHNbMF0pKSAgIHx8IFxuICAgICBhbnkoZ3JlYXRlclRoYW4ocG9zaXRpb24sIGNsaXBCb3VuZHNbMV0pKSApIHtcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoMCwwLDAsMCk7XG4gIH0gZWxzZSB7XG4gICAgZmxvYXQgc2NhbGUgPSAxLjA7XG4gICAgaWYoZGlzdGFuY2UoaGlnaGxpZ2h0SWQsIGlkKSA8IDAuMDAwMSkge1xuICAgICAgc2NhbGUgPSBoaWdobGlnaHRTY2FsZTtcbiAgICB9XG5cbiAgICB2ZWM0IHdvcmxkUG9zaXRpb24gPSBtb2RlbCAqIHZlYzQocG9zaXRpb24sIDEpO1xuICAgIHZlYzQgdmlld1Bvc2l0aW9uID0gdmlldyAqIHdvcmxkUG9zaXRpb247XG4gICAgdmlld1Bvc2l0aW9uID0gdmlld1Bvc2l0aW9uIC8gdmlld1Bvc2l0aW9uLnc7XG4gICAgdmVjNCBjbGlwUG9zaXRpb24gPSBwcm9qZWN0aW9uICogKHZpZXdQb3NpdGlvbiArIHNjYWxlICogdmVjNChnbHlwaC54LCAtZ2x5cGgueSwgMCwgMCkpO1xuICAgIFxuICAgIGdsX1Bvc2l0aW9uID0gY2xpcFBvc2l0aW9uO1xuICAgIGludGVycENvbG9yID0gY29sb3I7XG4gICAgcGlja0lkID0gaWQ7XG4gICAgZGF0YUNvb3JkaW5hdGUgPSBwb3NpdGlvbjtcbiAgfVxufSJdKSxvPWkoWyJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uO1xuYXR0cmlidXRlIHZlYzQgY29sb3I7XG5hdHRyaWJ1dGUgdmVjMiBnbHlwaDtcbmF0dHJpYnV0ZSB2ZWM0IGlkO1xuXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XG51bmlmb3JtIHZlYzIgc2NyZWVuU2l6ZTtcbnVuaWZvcm0gdmVjMyBjbGlwQm91bmRzWzJdO1xudW5pZm9ybSBmbG9hdCBoaWdobGlnaHRTY2FsZSwgcGl4ZWxSYXRpbztcbnVuaWZvcm0gdmVjNCBoaWdobGlnaHRJZDtcblxudmFyeWluZyB2ZWM0IGludGVycENvbG9yO1xudmFyeWluZyB2ZWM0IHBpY2tJZDtcbnZhcnlpbmcgdmVjMyBkYXRhQ29vcmRpbmF0ZTtcblxudm9pZCBtYWluKCkge1xuICBpZihhbnkobGVzc1RoYW4ocG9zaXRpb24sIGNsaXBCb3VuZHNbMF0pKSB8fCBhbnkoZ3JlYXRlclRoYW4ocG9zaXRpb24sIGNsaXBCb3VuZHNbMV0pKSkge1xuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgwLDAsMCwwKTtcbiAgfSBlbHNlIHtcbiAgICBmbG9hdCBzY2FsZSA9IHBpeGVsUmF0aW87XG4gICAgaWYoZGlzdGFuY2UoaGlnaGxpZ2h0SWQuYmdyLCBpZC5iZ3IpIDwgMC4wMDEpIHtcbiAgICAgIHNjYWxlICo9IGhpZ2hsaWdodFNjYWxlO1xuICAgIH1cblxuICAgIHZlYzQgd29ybGRQb3NpdGlvbiA9IG1vZGVsICogdmVjNChwb3NpdGlvbiwgMS4wKTtcbiAgICB2ZWM0IHZpZXdQb3NpdGlvbiA9IHZpZXcgKiB3b3JsZFBvc2l0aW9uO1xuICAgIHZlYzQgY2xpcFBvc2l0aW9uID0gcHJvamVjdGlvbiAqIHZpZXdQb3NpdGlvbjtcbiAgICBjbGlwUG9zaXRpb24gLz0gY2xpcFBvc2l0aW9uLnc7XG4gICAgXG4gICAgZ2xfUG9zaXRpb24gPSBjbGlwUG9zaXRpb24gKyB2ZWM0KHNjcmVlblNpemUgKiBzY2FsZSAqIHZlYzIoZ2x5cGgueCwgLWdseXBoLnkpLCAwLjAsIDAuMCk7XG4gICAgaW50ZXJwQ29sb3IgPSBjb2xvcjtcbiAgICBwaWNrSWQgPSBpZDtcbiAgICBkYXRhQ29vcmRpbmF0ZSA9IHBvc2l0aW9uO1xuICB9XG59Il0pLHM9aShbInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb247XG5hdHRyaWJ1dGUgdmVjNCBjb2xvcjtcbmF0dHJpYnV0ZSB2ZWMyIGdseXBoO1xuYXR0cmlidXRlIHZlYzQgaWQ7XG5cbnVuaWZvcm0gZmxvYXQgaGlnaGxpZ2h0U2NhbGU7XG51bmlmb3JtIHZlYzQgaGlnaGxpZ2h0SWQ7XG51bmlmb3JtIHZlYzMgYXhlc1syXTtcbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcbnVuaWZvcm0gdmVjMiBzY3JlZW5TaXplO1xudW5pZm9ybSB2ZWMzIGNsaXBCb3VuZHNbMl07XG51bmlmb3JtIGZsb2F0IHNjYWxlLCBwaXhlbFJhdGlvO1xuXG52YXJ5aW5nIHZlYzQgaW50ZXJwQ29sb3I7XG52YXJ5aW5nIHZlYzQgcGlja0lkO1xudmFyeWluZyB2ZWMzIGRhdGFDb29yZGluYXRlO1xuXG52b2lkIG1haW4oKSB7XG4gIGlmKGFueShsZXNzVGhhbihwb3NpdGlvbiwgY2xpcEJvdW5kc1swXSkpICAgfHxcbiAgICAgYW55KGdyZWF0ZXJUaGFuKHBvc2l0aW9uLCBjbGlwQm91bmRzWzFdKSkgKSB7XG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KDAsMCwwLDApO1xuICB9IGVsc2Uge1xuICAgIGZsb2F0IGxzY2FsZSA9IHBpeGVsUmF0aW8gKiBzY2FsZTtcbiAgICBpZihkaXN0YW5jZShoaWdobGlnaHRJZCwgaWQpIDwgMC4wMDAxKSB7XG4gICAgICBsc2NhbGUgKj0gaGlnaGxpZ2h0U2NhbGU7XG4gICAgfVxuXG4gICAgdmVjNCBjbGlwQ2VudGVyICAgPSBwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNChwb3NpdGlvbiwgMSk7XG4gICAgdmVjMyBkYXRhUG9zaXRpb24gPSBwb3NpdGlvbiArIDAuNSpsc2NhbGUqKGF4ZXNbMF0gKiBnbHlwaC54ICsgYXhlc1sxXSAqIGdseXBoLnkpICogY2xpcENlbnRlci53ICogc2NyZWVuU2l6ZS55O1xuICAgIHZlYzQgY2xpcFBvc2l0aW9uID0gcHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQoZGF0YVBvc2l0aW9uLCAxKTtcblxuICAgIGdsX1Bvc2l0aW9uID0gY2xpcFBvc2l0aW9uO1xuICAgIGludGVycENvbG9yID0gY29sb3I7XG4gICAgcGlja0lkID0gaWQ7XG4gICAgZGF0YUNvb3JkaW5hdGUgPSBkYXRhUG9zaXRpb247XG4gIH1cbn1cbiJdKSxsPWkoWyJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnVuaWZvcm0gdmVjMyBmcmFnQ2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcblxudmFyeWluZyB2ZWM0IGludGVycENvbG9yO1xudmFyeWluZyB2ZWM0IHBpY2tJZDtcbnZhcnlpbmcgdmVjMyBkYXRhQ29vcmRpbmF0ZTtcblxudm9pZCBtYWluKCkge1xuICBpZihhbnkobGVzc1RoYW4oZGF0YUNvb3JkaW5hdGUsIGZyYWdDbGlwQm91bmRzWzBdKSkgICB8fFxuICAgICBhbnkoZ3JlYXRlclRoYW4oZGF0YUNvb3JkaW5hdGUsIGZyYWdDbGlwQm91bmRzWzFdKSkgKSB7XG4gICAgZGlzY2FyZDtcbiAgfSBlbHNlIHtcbiAgICBnbF9GcmFnQ29sb3IgPSBpbnRlcnBDb2xvciAqIG9wYWNpdHk7XG4gIH1cbn1cbiJdKSxjPWkoWyJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnVuaWZvcm0gdmVjMyBmcmFnQ2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gZmxvYXQgcGlja0dyb3VwO1xuXG52YXJ5aW5nIHZlYzQgcGlja0lkO1xudmFyeWluZyB2ZWMzIGRhdGFDb29yZGluYXRlO1xuXG52b2lkIG1haW4oKSB7XG4gIGlmKGFueShsZXNzVGhhbihkYXRhQ29vcmRpbmF0ZSwgZnJhZ0NsaXBCb3VuZHNbMF0pKSAgIHx8IFxuICAgICBhbnkoZ3JlYXRlclRoYW4oZGF0YUNvb3JkaW5hdGUsIGZyYWdDbGlwQm91bmRzWzFdKSkgKSB7XG4gICAgZGlzY2FyZDtcbiAgfSBlbHNlIHtcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHBpY2tHcm91cCwgcGlja0lkLmJncik7XG4gIH1cbn0iXSksdT1be25hbWU6InBvc2l0aW9uIix0eXBlOiJ2ZWMzIn0se25hbWU6ImNvbG9yIix0eXBlOiJ2ZWM0In0se25hbWU6ImdseXBoIix0eXBlOiJ2ZWMyIn0se25hbWU6ImlkIix0eXBlOiJ2ZWM0In1dLGg9e3ZlcnRleDphLGZyYWdtZW50OmwsYXR0cmlidXRlczp1fSxmPXt2ZXJ0ZXg6byxmcmFnbWVudDpsLGF0dHJpYnV0ZXM6dX0scD17dmVydGV4OnMsZnJhZ21lbnQ6bCxhdHRyaWJ1dGVzOnV9LGQ9e3ZlcnRleDphLGZyYWdtZW50OmMsYXR0cmlidXRlczp1fSxnPXt2ZXJ0ZXg6byxmcmFnbWVudDpjLGF0dHJpYnV0ZXM6dX0sbT17dmVydGV4OnMsZnJhZ21lbnQ6YyxhdHRyaWJ1dGVzOnV9O2Z1bmN0aW9uIHYodCxlKXt2YXIgcj1uKHQsZSksaT1yLmF0dHJpYnV0ZXM7cmV0dXJuIGkucG9zaXRpb24ubG9jYXRpb249MCxpLmNvbG9yLmxvY2F0aW9uPTEsaS5nbHlwaC5sb2NhdGlvbj0yLGkuaWQubG9jYXRpb249MyxyfXIuY3JlYXRlUGVyc3BlY3RpdmU9ZnVuY3Rpb24odCl7cmV0dXJuIHYodCxoKX0sci5jcmVhdGVPcnRobz1mdW5jdGlvbih0KXtyZXR1cm4gdih0LGYpfSxyLmNyZWF0ZVByb2plY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHYodCxwKX0sci5jcmVhdGVQaWNrUGVyc3BlY3RpdmU9ZnVuY3Rpb24odCl7cmV0dXJuIHYodCxkKX0sci5jcmVhdGVQaWNrT3J0aG89ZnVuY3Rpb24odCl7cmV0dXJuIHYodCxnKX0sci5jcmVhdGVQaWNrUHJvamVjdD1mdW5jdGlvbih0KXtyZXR1cm4gdih0LG0pfX0seyJnbC1zaGFkZXIiOjI4NyxnbHNsaWZ5OjM3N31dLDI4MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJnbC1idWZmZXIiKSxpPXQoImdsLXZhbyIpLGE9dCgidHlwZWRhcnJheS1wb29sIiksbz10KCJnbC1tYXQ0L211bHRpcGx5Iikscz10KCIuL2xpYi9zaGFkZXJzIiksbD10KCIuL2xpYi9nbHlwaHMiKSxjPVsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXTtmdW5jdGlvbiB1KHQsZSl7dmFyIHI9dFswXSxuPXRbMV0saT10WzJdLGE9dFszXTtyZXR1cm4gdFswXT1lWzBdKnIrZVs0XSpuK2VbOF0qaStlWzEyXSphLHRbMV09ZVsxXSpyK2VbNV0qbitlWzldKmkrZVsxM10qYSx0WzJdPWVbMl0qcitlWzZdKm4rZVsxMF0qaStlWzE0XSphLHRbM109ZVszXSpyK2VbN10qbitlWzExXSppK2VbMTVdKmEsdH1mdW5jdGlvbiBoKHQsZSxyLG4pe3JldHVybiB1KG4sbiksdShuLG4pLHUobixuKX1mdW5jdGlvbiBmKHQsZSl7dGhpcy5pbmRleD10LHRoaXMuZGF0YUNvb3JkaW5hdGU9dGhpcy5wb3NpdGlvbj1lfWZ1bmN0aW9uIHAodCxlLHIsbixpLGEsbyxzLGwsYyx1LGgpe3RoaXMuZ2w9dCx0aGlzLnBpeGVsUmF0aW89MSx0aGlzLnNoYWRlcj1lLHRoaXMub3J0aG9TaGFkZXI9cix0aGlzLnByb2plY3RTaGFkZXI9bix0aGlzLnBvaW50QnVmZmVyPWksdGhpcy5jb2xvckJ1ZmZlcj1hLHRoaXMuZ2x5cGhCdWZmZXI9byx0aGlzLmlkQnVmZmVyPXMsdGhpcy52YW89bCx0aGlzLnZlcnRleENvdW50PTAsdGhpcy5saW5lVmVydGV4Q291bnQ9MCx0aGlzLm9wYWNpdHk9MSx0aGlzLmxpbmVXaWR0aD0wLHRoaXMucHJvamVjdFNjYWxlPVsyLzMsMi8zLDIvM10sdGhpcy5wcm9qZWN0T3BhY2l0eT1bMSwxLDFdLHRoaXMucGlja0lkPTAsdGhpcy5waWNrUGVyc3BlY3RpdmVTaGFkZXI9Yyx0aGlzLnBpY2tPcnRob1NoYWRlcj11LHRoaXMucGlja1Byb2plY3RTaGFkZXI9aCx0aGlzLnBvaW50cz1bXSx0aGlzLl9zZWxlY3RSZXN1bHQ9bmV3IGYoMCxbMCwwLDBdKSx0aGlzLnVzZU9ydGhvPSEwLHRoaXMuYm91bmRzPVtbMS8wLDEvMCwxLzBdLFstMS8wLC0xLzAsLTEvMF1dLHRoaXMuYXhlc1Byb2plY3Q9WyEwLCEwLCEwXSx0aGlzLmF4ZXNCb3VuZHM9W1stMS8wLC0xLzAsLTEvMF0sWzEvMCwxLzAsMS8wXV0sdGhpcy5oaWdobGlnaHRJZD1bMSwxLDEsMV0sdGhpcy5oaWdobGlnaHRTY2FsZT0yLHRoaXMuY2xpcEJvdW5kcz1bWy0xLzAsLTEvMCwtMS8wXSxbMS8wLDEvMCwxLzBdXSx0aGlzLmRpcnR5PSEwfWUuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmdsLHI9cy5jcmVhdGVQZXJzcGVjdGl2ZShlKSxhPXMuY3JlYXRlT3J0aG8oZSksbz1zLmNyZWF0ZVByb2plY3QoZSksbD1zLmNyZWF0ZVBpY2tQZXJzcGVjdGl2ZShlKSxjPXMuY3JlYXRlUGlja09ydGhvKGUpLHU9cy5jcmVhdGVQaWNrUHJvamVjdChlKSxoPW4oZSksZj1uKGUpLGQ9bihlKSxnPW4oZSksbT1pKGUsW3tidWZmZXI6aCxzaXplOjMsdHlwZTplLkZMT0FUfSx7YnVmZmVyOmYsc2l6ZTo0LHR5cGU6ZS5GTE9BVH0se2J1ZmZlcjpkLHNpemU6Mix0eXBlOmUuRkxPQVR9LHtidWZmZXI6ZyxzaXplOjQsdHlwZTplLlVOU0lHTkVEX0JZVEUsbm9ybWFsaXplZDohMH1dKSx2PW5ldyBwKGUscixhLG8saCxmLGQsZyxtLGwsYyx1KTtyZXR1cm4gdi51cGRhdGUodCksdn07dmFyIGQ9cC5wcm90b3R5cGU7ZC5waWNrU2xvdHM9MSxkLnNldFBpY2tCYXNlPWZ1bmN0aW9uKHQpe3RoaXMucGlja0lkPXR9LGQuaXNUcmFuc3BhcmVudD1mdW5jdGlvbigpe2lmKHRoaXMub3BhY2l0eTwxKXJldHVybiEwO2Zvcih2YXIgdD0wO3Q8MzsrK3QpaWYodGhpcy5heGVzUHJvamVjdFt0XSYmdGhpcy5wcm9qZWN0T3BhY2l0eVt0XTwxKXJldHVybiEwO3JldHVybiExfSxkLmlzT3BhcXVlPWZ1bmN0aW9uKCl7aWYodGhpcy5vcGFjaXR5Pj0xKXJldHVybiEwO2Zvcih2YXIgdD0wO3Q8MzsrK3QpaWYodGhpcy5heGVzUHJvamVjdFt0XSYmdGhpcy5wcm9qZWN0T3BhY2l0eVt0XT49MSlyZXR1cm4hMDtyZXR1cm4hMX07dmFyIGc9WzAsMF0sbT1bMCwwLDBdLHY9WzAsMCwwXSx5PVswLDAsMCwxXSx4PVswLDAsMCwxXSxiPWMuc2xpY2UoKSxfPVswLDAsMF0sdz1bWzAsMCwwXSxbMCwwLDBdXTtmdW5jdGlvbiBrKHQpe3JldHVybiB0WzBdPXRbMV09dFsyXT0wLHR9ZnVuY3Rpb24gTSh0LGUpe3JldHVybiB0WzBdPWVbMF0sdFsxXT1lWzFdLHRbMl09ZVsyXSx0WzNdPTEsdH1mdW5jdGlvbiBBKHQsZSxyLG4pe3JldHVybiB0WzBdPWVbMF0sdFsxXT1lWzFdLHRbMl09ZVsyXSx0W3JdPW4sdH1mdW5jdGlvbiBUKHQsZSxyLG4saSl7dmFyIGEscz1lLmF4ZXNQcm9qZWN0LGw9ZS5nbCx1PXQudW5pZm9ybXMsZj1yLm1vZGVsfHxjLHA9ci52aWV3fHxjLGQ9ci5wcm9qZWN0aW9ufHxjLFQ9ZS5heGVzQm91bmRzLFM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXcscj0wO3I8MjsrK3IpZm9yKHZhciBuPTA7bjwzOysrbillW3JdW25dPU1hdGgubWF4KE1hdGgubWluKHRbcl1bbl0sMWU4KSwtMWU4KTtyZXR1cm4gZX0oZS5jbGlwQm91bmRzKTthPWUuYXhlcyYmZS5heGVzLmxhc3RDdWJlUHJvcHM/ZS5heGVzLmxhc3RDdWJlUHJvcHMuYXhpczpbMSwxLDFdLGdbMF09Mi9sLmRyYXdpbmdCdWZmZXJXaWR0aCxnWzFdPTIvbC5kcmF3aW5nQnVmZmVySGVpZ2h0LHQuYmluZCgpLHUudmlldz1wLHUucHJvamVjdGlvbj1kLHUuc2NyZWVuU2l6ZT1nLHUuaGlnaGxpZ2h0SWQ9ZS5oaWdobGlnaHRJZCx1LmhpZ2hsaWdodFNjYWxlPWUuaGlnaGxpZ2h0U2NhbGUsdS5jbGlwQm91bmRzPVMsdS5waWNrR3JvdXA9ZS5waWNrSWQvMjU1LHUucGl4ZWxSYXRpbz1lLnBpeGVsUmF0aW87Zm9yKHZhciBFPTA7RTwzOysrRSlpZihzW0VdJiZlLnByb2plY3RPcGFjaXR5W0VdPDE9PT1uKXt1LnNjYWxlPWUucHJvamVjdFNjYWxlW0VdLHUub3BhY2l0eT1lLnByb2plY3RPcGFjaXR5W0VdO2Zvcih2YXIgQz1iLEw9MDtMPDE2OysrTClDW0xdPTA7Zm9yKEw9MDtMPDQ7KytMKUNbNSpMXT0xO0NbNSpFXT0wLGFbRV08MD9DWzEyK0VdPVRbMF1bRV06Q1sxMitFXT1UWzFdW0VdLG8oQyxmLEMpLHUubW9kZWw9Qzt2YXIgej0oRSsxKSUzLFA9KEUrMiklMyxJPWsobSksTz1rKHYpO0lbel09MSxPW1BdPTE7dmFyIEQ9aCgwLDAsMCxNKHksSSkpLFI9aCgwLDAsMCxNKHgsTykpO2lmKE1hdGguYWJzKERbMV0pPk1hdGguYWJzKFJbMV0pKXt2YXIgQj1EO0Q9UixSPUIsQj1JLEk9TyxPPUI7dmFyIEY9ejt6PVAsUD1GfURbMF08MCYmKElbel09LTEpLFJbMV0+MCYmKE9bUF09LTEpO3ZhciBOPTAsaj0wO2ZvcihMPTA7TDw0OysrTClOKz1NYXRoLnBvdyhmWzQqeitMXSwyKSxqKz1NYXRoLnBvdyhmWzQqUCtMXSwyKTtJW3pdLz1NYXRoLnNxcnQoTiksT1tQXS89TWF0aC5zcXJ0KGopLHUuYXhlc1swXT1JLHUuYXhlc1sxXT1PLHUuZnJhZ0NsaXBCb3VuZHNbMF09QShfLFNbMF0sRSwtMWU4KSx1LmZyYWdDbGlwQm91bmRzWzFdPUEoXyxTWzFdLEUsMWU4KSxlLnZhby5kcmF3KGwuVFJJQU5HTEVTLGUudmVydGV4Q291bnQpLGUubGluZVdpZHRoPjAmJihsLmxpbmVXaWR0aChlLmxpbmVXaWR0aCksZS52YW8uZHJhdyhsLkxJTkVTLGUubGluZVZlcnRleENvdW50LGUudmVydGV4Q291bnQpKX19dmFyIFM9W1stMWU4LC0xZTgsLTFlOF0sWzFlOCwxZTgsMWU4XV07ZnVuY3Rpb24gRSh0LGUscixuLGksYSl7dmFyIG89ci5nbDtpZihyLnZhby5iaW5kKCksaT09PXIub3BhY2l0eTwxfHxhKXt0LmJpbmQoKTt2YXIgcz10LnVuaWZvcm1zO3MubW9kZWw9bi5tb2RlbHx8YyxzLnZpZXc9bi52aWV3fHxjLHMucHJvamVjdGlvbj1uLnByb2plY3Rpb258fGMsZ1swXT0yL28uZHJhd2luZ0J1ZmZlcldpZHRoLGdbMV09Mi9vLmRyYXdpbmdCdWZmZXJIZWlnaHQscy5zY3JlZW5TaXplPWcscy5oaWdobGlnaHRJZD1yLmhpZ2hsaWdodElkLHMuaGlnaGxpZ2h0U2NhbGU9ci5oaWdobGlnaHRTY2FsZSxzLmZyYWdDbGlwQm91bmRzPVMscy5jbGlwQm91bmRzPXIuYXhlcy5ib3VuZHMscy5vcGFjaXR5PXIub3BhY2l0eSxzLnBpY2tHcm91cD1yLnBpY2tJZC8yNTUscy5waXhlbFJhdGlvPXIucGl4ZWxSYXRpbyxyLnZhby5kcmF3KG8uVFJJQU5HTEVTLHIudmVydGV4Q291bnQpLHIubGluZVdpZHRoPjAmJihvLmxpbmVXaWR0aChyLmxpbmVXaWR0aCksci52YW8uZHJhdyhvLkxJTkVTLHIubGluZVZlcnRleENvdW50LHIudmVydGV4Q291bnQpKX1UKGUscixuLGkpLHIudmFvLnVuYmluZCgpfWQuZHJhdz1mdW5jdGlvbih0KXtFKHRoaXMudXNlT3J0aG8/dGhpcy5vcnRob1NoYWRlcjp0aGlzLnNoYWRlcix0aGlzLnByb2plY3RTaGFkZXIsdGhpcyx0LCExLCExKX0sZC5kcmF3VHJhbnNwYXJlbnQ9ZnVuY3Rpb24odCl7RSh0aGlzLnVzZU9ydGhvP3RoaXMub3J0aG9TaGFkZXI6dGhpcy5zaGFkZXIsdGhpcy5wcm9qZWN0U2hhZGVyLHRoaXMsdCwhMCwhMSl9LGQuZHJhd1BpY2s9ZnVuY3Rpb24odCl7RSh0aGlzLnVzZU9ydGhvP3RoaXMucGlja09ydGhvU2hhZGVyOnRoaXMucGlja1BlcnNwZWN0aXZlU2hhZGVyLHRoaXMucGlja1Byb2plY3RTaGFkZXIsdGhpcyx0LCExLCEwKX0sZC5waWNrPWZ1bmN0aW9uKHQpe2lmKCF0KXJldHVybiBudWxsO2lmKHQuaWQhPT10aGlzLnBpY2tJZClyZXR1cm4gbnVsbDt2YXIgZT10LnZhbHVlWzJdKyh0LnZhbHVlWzFdPDw4KSsodC52YWx1ZVswXTw8MTYpO2lmKGU+PXRoaXMucG9pbnRDb3VudHx8ZTwwKXJldHVybiBudWxsO3ZhciByPXRoaXMucG9pbnRzW2VdLG49dGhpcy5fc2VsZWN0UmVzdWx0O24uaW5kZXg9ZTtmb3IodmFyIGk9MDtpPDM7KytpKW4ucG9zaXRpb25baV09bi5kYXRhQ29vcmRpbmF0ZVtpXT1yW2ldO3JldHVybiBufSxkLmhpZ2hsaWdodD1mdW5jdGlvbih0KXtpZih0KXt2YXIgZT10LmluZGV4LHI9MjU1JmUsbj1lPj44JjI1NSxpPWU+PjE2JjI1NTt0aGlzLmhpZ2hsaWdodElkPVtyLzI1NSxuLzI1NSxpLzI1NSwwXX1lbHNlIHRoaXMuaGlnaGxpZ2h0SWQ9WzEsMSwxLDFdfSxkLnVwZGF0ZT1mdW5jdGlvbih0KXtpZigicGVyc3BlY3RpdmUiaW4odD10fHx7fSkmJih0aGlzLnVzZU9ydGhvPSF0LnBlcnNwZWN0aXZlKSwib3J0aG9ncmFwaGljImluIHQmJih0aGlzLnVzZU9ydGhvPSEhdC5vcnRob2dyYXBoaWMpLCJsaW5lV2lkdGgiaW4gdCYmKHRoaXMubGluZVdpZHRoPXQubGluZVdpZHRoKSwicHJvamVjdCJpbiB0KWlmKEFycmF5LmlzQXJyYXkodC5wcm9qZWN0KSl0aGlzLmF4ZXNQcm9qZWN0PXQucHJvamVjdDtlbHNle3ZhciBlPSEhdC5wcm9qZWN0O3RoaXMuYXhlc1Byb2plY3Q9W2UsZSxlXX1pZigicHJvamVjdFNjYWxlImluIHQpaWYoQXJyYXkuaXNBcnJheSh0LnByb2plY3RTY2FsZSkpdGhpcy5wcm9qZWN0U2NhbGU9dC5wcm9qZWN0U2NhbGUuc2xpY2UoKTtlbHNle3ZhciByPSt0LnByb2plY3RTY2FsZTt0aGlzLnByb2plY3RTY2FsZT1bcixyLHJdfWlmKCJwcm9qZWN0T3BhY2l0eSJpbiB0KWlmKEFycmF5LmlzQXJyYXkodC5wcm9qZWN0T3BhY2l0eSkpdGhpcy5wcm9qZWN0T3BhY2l0eT10LnByb2plY3RPcGFjaXR5LnNsaWNlKCk7ZWxzZXtyPSt0LnByb2plY3RPcGFjaXR5O3RoaXMucHJvamVjdE9wYWNpdHk9W3IscixyXX0ib3BhY2l0eSJpbiB0JiYodGhpcy5vcGFjaXR5PXQub3BhY2l0eSksdGhpcy5kaXJ0eT0hMDt2YXIgbj10LnBvc2l0aW9uO2lmKG4pe3ZhciBpPXQuZm9udHx8Im5vcm1hbCIsbz10LmFsaWdubWVudHx8WzAsMF0scz1bMS8wLDEvMCwxLzBdLGM9Wy0xLzAsLTEvMCwtMS8wXSx1PXQuZ2x5cGgsaD10LmNvbG9yLGY9dC5zaXplLHA9dC5hbmdsZSxkPXQubGluZUNvbG9yLGc9MCxtPTAsdj0wLHk9bi5sZW5ndGg7dDpmb3IodmFyIHg9MDt4PHk7Kyt4KXtmb3IodmFyIGI9blt4XSxfPTA7XzwzOysrXylpZihpc05hTihiW19dKXx8IWlzRmluaXRlKGJbX10pKWNvbnRpbnVlIHQ7dmFyIHc9KEI9QXJyYXkuaXNBcnJheSh1KT9sKHVbeF0saSk6bCh1fHwiXHUyNWNmIixpKSlbMF0saz1CWzFdLE09QlsyXTttKz0zKncuY2VsbHMubGVuZ3RoLHYrPTIqay5lZGdlcy5sZW5ndGh9dmFyIEE9bSt2LFQ9YS5tYWxsb2NGbG9hdCgzKkEpLFM9YS5tYWxsb2NGbG9hdCg0KkEpLEU9YS5tYWxsb2NGbG9hdCgyKkEpLEM9YS5tYWxsb2NVaW50MzIoQSksTD1bMCxvWzFdXSx6PTAsUD1tLEk9WzAsMCwwLDFdLE89WzAsMCwwLDFdLEQ9QXJyYXkuaXNBcnJheShoKSYmQXJyYXkuaXNBcnJheShoWzBdKSxSPUFycmF5LmlzQXJyYXkoZCkmJkFycmF5LmlzQXJyYXkoZFswXSk7dDpmb3IoeD0wO3g8eTsrK3gpe3ZhciBCO2ZvcihiPW5beF0sXz0wO188MzsrK18pe2lmKGlzTmFOKGJbX10pfHwhaXNGaW5pdGUoYltfXSkpe2crPTE7Y29udGludWUgdH1jW19dPU1hdGgubWF4KGNbX10sYltfXSksc1tfXT1NYXRoLm1pbihzW19dLGJbX10pfXZhciBGO3c9KEI9QXJyYXkuaXNBcnJheSh1KT9sKHVbeF0saSk6bCh1fHwiXHUyNWNmIixpKSlbMF0saz1CWzFdLE09QlsyXTtpZihBcnJheS5pc0FycmF5KGgpKXtpZigzPT09KEY9RD9oW3hdOmgpLmxlbmd0aCl7Zm9yKF89MDtfPDM7KytfKUlbX109RltfXTtJWzNdPTF9ZWxzZSBpZig0PT09Ri5sZW5ndGgpZm9yKF89MDtfPDQ7KytfKUlbX109RltfXX1lbHNlIElbMF09SVsxXT1JWzJdPTAsSVszXT0xO2lmKEFycmF5LmlzQXJyYXkoZCkpe2lmKDM9PT0oRj1SP2RbeF06ZCkubGVuZ3RoKXtmb3IoXz0wO188MzsrK18pT1tfXT1GW19dO09bX109MX1lbHNlIGlmKDQ9PT1GLmxlbmd0aClmb3IoXz0wO188NDsrK18pT1tfXT1GW19dfWVsc2UgT1swXT1PWzFdPU9bMl09MCxPWzNdPTE7dmFyIE49LjU7QXJyYXkuaXNBcnJheShmKT9OPStmW3hdOmY/Tj0rZjp0aGlzLnVzZU9ydGhvJiYoTj0xMik7dmFyIGo9MDtBcnJheS5pc0FycmF5KHApP2o9K3BbeF06cCYmKGo9K3ApO3ZhciBWPU1hdGguY29zKGopLFU9TWF0aC5zaW4oaik7Zm9yKGI9blt4XSxfPTA7XzwzOysrXyljW19dPU1hdGgubWF4KGNbX10sYltfXSksc1tfXT1NYXRoLm1pbihzW19dLGJbX10pO29bMF08MD9MWzBdPW9bMF0qKDErTVsxXVswXSk6b1swXT4wJiYoTFswXT0tb1swXSooMStNWzBdWzBdKSk7dmFyIHE9dy5jZWxscyxIPXcucG9zaXRpb25zO2ZvcihfPTA7XzxxLmxlbmd0aDsrK18pZm9yKHZhciBHPXFbX10sVz0wO1c8MzsrK1cpe2Zvcih2YXIgWT0wO1k8MzsrK1kpVFszKnorWV09YltZXTtmb3IoWT0wO1k8NDsrK1kpU1s0KnorWV09SVtZXTtDW3pdPWc7dmFyIFg9SFtHW1ddXTtFWzIqel09TiooVipYWzBdLVUqWFsxXStMWzBdKSxFWzIqeisxXT1OKihVKlhbMF0rVipYWzFdK0xbMV0pLHorPTF9Zm9yKHE9ay5lZGdlcyxIPWsucG9zaXRpb25zLF89MDtfPHEubGVuZ3RoOysrXylmb3IoRz1xW19dLFc9MDtXPDI7KytXKXtmb3IoWT0wO1k8MzsrK1kpVFszKlArWV09YltZXTtmb3IoWT0wO1k8NDsrK1kpU1s0KlArWV09T1tZXTtDW1BdPWc7WD1IW0dbV11dO0VbMipQXT1OKihWKlhbMF0tVSpYWzFdK0xbMF0pLEVbMipQKzFdPU4qKFUqWFswXStWKlhbMV0rTFsxXSksUCs9MX1nKz0xfXRoaXMudmVydGV4Q291bnQ9bSx0aGlzLmxpbmVWZXJ0ZXhDb3VudD12LHRoaXMucG9pbnRCdWZmZXIudXBkYXRlKFQpLHRoaXMuY29sb3JCdWZmZXIudXBkYXRlKFMpLHRoaXMuZ2x5cGhCdWZmZXIudXBkYXRlKEUpLHRoaXMuaWRCdWZmZXIudXBkYXRlKG5ldyBVaW50MzJBcnJheShDKSksYS5mcmVlKFQpLGEuZnJlZShTKSxhLmZyZWUoRSksYS5mcmVlKEMpLHRoaXMuYm91bmRzPVtzLGNdLHRoaXMucG9pbnRzPW4sdGhpcy5wb2ludENvdW50PW4ubGVuZ3RofX0sZC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5zaGFkZXIuZGlzcG9zZSgpLHRoaXMub3J0aG9TaGFkZXIuZGlzcG9zZSgpLHRoaXMucGlja1BlcnNwZWN0aXZlU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnBpY2tPcnRob1NoYWRlci5kaXNwb3NlKCksdGhpcy52YW8uZGlzcG9zZSgpLHRoaXMucG9pbnRCdWZmZXIuZGlzcG9zZSgpLHRoaXMuY29sb3JCdWZmZXIuZGlzcG9zZSgpLHRoaXMuZ2x5cGhCdWZmZXIuZGlzcG9zZSgpLHRoaXMuaWRCdWZmZXIuZGlzcG9zZSgpfX0seyIuL2xpYi9nbHlwaHMiOjI4MSwiLi9saWIvc2hhZGVycyI6MjgyLCJnbC1idWZmZXIiOjIzMCwiZ2wtbWF0NC9tdWx0aXBseSI6MjU2LCJnbC12YW8iOjMwOCwidHlwZWRhcnJheS1wb29sIjo1MDd9XSwyODQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZ2xzbGlmeSIpO3IuYm94VmVydGV4PW4oWyJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMyIHZlcnRleDtcblxudW5pZm9ybSB2ZWMyIGNvcm5lckEsIGNvcm5lckI7XG5cbnZvaWQgbWFpbigpIHtcbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KG1peChjb3JuZXJBLCBjb3JuZXJCLCB2ZXJ0ZXgpLCAwLCAxKTtcbn1cbiJdKSxyLmJveEZyYWdtZW50PW4oWyJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnVuaWZvcm0gdmVjNCBjb2xvcjtcblxudm9pZCBtYWluKCkge1xuICBnbF9GcmFnQ29sb3IgPSBjb2xvcjtcbn1cbiJdKX0se2dsc2xpZnk6Mzc3fV0sMjg1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImdsLXNoYWRlciIpLGk9dCgiZ2wtYnVmZmVyIiksYT10KCIuL2xpYi9zaGFkZXJzIik7ZnVuY3Rpb24gbyh0LGUscil7dGhpcy5wbG90PXQsdGhpcy5ib3hCdWZmZXI9ZSx0aGlzLmJveFNoYWRlcj1yLHRoaXMuZW5hYmxlZD0hMCx0aGlzLnNlbGVjdEJveD1bMS8wLDEvMCwtMS8wLC0xLzBdLHRoaXMuYm9yZGVyQ29sb3I9WzAsMCwwLDFdLHRoaXMuaW5uZXJGaWxsPSExLHRoaXMuaW5uZXJDb2xvcj1bMCwwLDAsLjI1XSx0aGlzLm91dGVyRmlsbD0hMCx0aGlzLm91dGVyQ29sb3I9WzAsMCwwLC41XSx0aGlzLmJvcmRlcldpZHRoPTEwfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuZ2wscz1pKHIsWzAsMCwwLDEsMSwwLDEsMV0pLGw9bihyLGEuYm94VmVydGV4LGEuYm94RnJhZ21lbnQpLGM9bmV3IG8odCxzLGwpO3JldHVybiBjLnVwZGF0ZShlKSx0LmFkZE92ZXJsYXkoYyksY307dmFyIHM9by5wcm90b3R5cGU7cy5kcmF3PWZ1bmN0aW9uKCl7aWYodGhpcy5lbmFibGVkKXt2YXIgdD10aGlzLnBsb3QsZT10aGlzLnNlbGVjdEJveCxyPXRoaXMuYm9yZGVyV2lkdGgsbj0odGhpcy5pbm5lckZpbGwsdGhpcy5pbm5lckNvbG9yKSxpPSh0aGlzLm91dGVyRmlsbCx0aGlzLm91dGVyQ29sb3IpLGE9dGhpcy5ib3JkZXJDb2xvcixvPXQuYm94LHM9dC5zY3JlZW5Cb3gsbD10LmRhdGFCb3gsYz10LnZpZXdCb3gsdT10LnBpeGVsUmF0aW8saD0oZVswXS1sWzBdKSooY1syXS1jWzBdKS8obFsyXS1sWzBdKStjWzBdLGY9KGVbMV0tbFsxXSkqKGNbM10tY1sxXSkvKGxbM10tbFsxXSkrY1sxXSxwPShlWzJdLWxbMF0pKihjWzJdLWNbMF0pLyhsWzJdLWxbMF0pK2NbMF0sZD0oZVszXS1sWzFdKSooY1szXS1jWzFdKS8obFszXS1sWzFdKStjWzFdO2lmKGg9TWF0aC5tYXgoaCxjWzBdKSxmPU1hdGgubWF4KGYsY1sxXSkscD1NYXRoLm1pbihwLGNbMl0pLGQ9TWF0aC5taW4oZCxjWzNdKSwhKHA8aHx8ZDxmKSl7by5iaW5kKCk7dmFyIGc9c1syXS1zWzBdLG09c1szXS1zWzFdO2lmKHRoaXMub3V0ZXJGaWxsJiYoby5kcmF3Qm94KDAsMCxnLGYsaSksby5kcmF3Qm94KDAsZixoLGQsaSksby5kcmF3Qm94KDAsZCxnLG0saSksby5kcmF3Qm94KHAsZixnLGQsaSkpLHRoaXMuaW5uZXJGaWxsJiZvLmRyYXdCb3goaCxmLHAsZCxuKSxyPjApe3ZhciB2PXIqdTtvLmRyYXdCb3goaC12LGYtdixwK3YsZit2LGEpLG8uZHJhd0JveChoLXYsZC12LHArdixkK3YsYSksby5kcmF3Qm94KGgtdixmLXYsaCt2LGQrdixhKSxvLmRyYXdCb3gocC12LGYtdixwK3YsZCt2LGEpfX19fSxzLnVwZGF0ZT1mdW5jdGlvbih0KXt0PXR8fHt9LHRoaXMuaW5uZXJGaWxsPSEhdC5pbm5lckZpbGwsdGhpcy5vdXRlckZpbGw9ISF0Lm91dGVyRmlsbCx0aGlzLmlubmVyQ29sb3I9KHQuaW5uZXJDb2xvcnx8WzAsMCwwLC41XSkuc2xpY2UoKSx0aGlzLm91dGVyQ29sb3I9KHQub3V0ZXJDb2xvcnx8WzAsMCwwLC41XSkuc2xpY2UoKSx0aGlzLmJvcmRlckNvbG9yPSh0LmJvcmRlckNvbG9yfHxbMCwwLDAsMV0pLnNsaWNlKCksdGhpcy5ib3JkZXJXaWR0aD10LmJvcmRlcldpZHRofHwwLHRoaXMuc2VsZWN0Qm94PSh0LnNlbGVjdEJveHx8dGhpcy5zZWxlY3RCb3gpLnNsaWNlKCl9LHMuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuYm94QnVmZmVyLmRpc3Bvc2UoKSx0aGlzLmJveFNoYWRlci5kaXNwb3NlKCksdGhpcy5wbG90LnJlbW92ZU92ZXJsYXkodGhpcyl9fSx7Ii4vbGliL3NoYWRlcnMiOjI4NCwiZ2wtYnVmZmVyIjoyMzAsImdsLXNoYWRlciI6Mjg3fV0sMjg2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPW4odCxlKSxhPWkubWFsbG9jVWludDgoZVswXSplWzFdKjQpO3JldHVybiBuZXcgYyh0LHIsYSl9O3ZhciBuPXQoImdsLWZibyIpLGk9dCgidHlwZWRhcnJheS1wb29sIiksYT10KCJuZGFycmF5Iiksbz10KCJiaXQtdHdpZGRsZSIpLm5leHRQb3cyLHM9dCgiY3dpc2UvbGliL3dyYXBwZXIiKSh7YXJnczpbImFycmF5Iix7b2Zmc2V0OlswLDAsMV0sYXJyYXk6MH0se29mZnNldDpbMCwwLDJdLGFycmF5OjB9LHtvZmZzZXQ6WzAsMCwzXSxhcnJheTowfSwic2NhbGFyIiwic2NhbGFyIiwiaW5kZXgiXSxwcmU6e2JvZHk6Int0aGlzX2Nsb3Nlc3REMj0xZTgsdGhpc19jbG9zZXN0WD0tMSx0aGlzX2Nsb3Nlc3RZPS0xfSIsYXJnczpbXSx0aGlzVmFyczpbInRoaXNfY2xvc2VzdEQyIiwidGhpc19jbG9zZXN0WCIsInRoaXNfY2xvc2VzdFkiXSxsb2NhbFZhcnM6W119LGJvZHk6e2JvZHk6IntpZihfaW5saW5lXzE2X2FyZzBfPDI1NXx8X2lubGluZV8xNl9hcmcxXzwyNTV8fF9pbmxpbmVfMTZfYXJnMl88MjU1fHxfaW5saW5lXzE2X2FyZzNfPDI1NSl7dmFyIF9pbmxpbmVfMTZfbD1faW5saW5lXzE2X2FyZzRfLV9pbmxpbmVfMTZfYXJnNl9bMF0sX2lubGluZV8xNl9hPV9pbmxpbmVfMTZfYXJnNV8tX2lubGluZV8xNl9hcmc2X1sxXSxfaW5saW5lXzE2X2Y9X2lubGluZV8xNl9sKl9pbmxpbmVfMTZfbCtfaW5saW5lXzE2X2EqX2lubGluZV8xNl9hO19pbmxpbmVfMTZfZjx0aGlzX2Nsb3Nlc3REMiYmKHRoaXNfY2xvc2VzdEQyPV9pbmxpbmVfMTZfZix0aGlzX2Nsb3Nlc3RYPV9pbmxpbmVfMTZfYXJnNl9bMF0sdGhpc19jbG9zZXN0WT1faW5saW5lXzE2X2FyZzZfWzFdKX19IixhcmdzOlt7bmFtZToiX2lubGluZV8xNl9hcmcwXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZToiX2lubGluZV8xNl9hcmcxXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZToiX2lubGluZV8xNl9hcmcyXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZToiX2lubGluZV8xNl9hcmczXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZToiX2lubGluZV8xNl9hcmc0XyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZToiX2lubGluZV8xNl9hcmc1XyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZToiX2lubGluZV8xNl9hcmc2XyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDo0fV0sdGhpc1ZhcnM6WyJ0aGlzX2Nsb3Nlc3REMiIsInRoaXNfY2xvc2VzdFgiLCJ0aGlzX2Nsb3Nlc3RZIl0sbG9jYWxWYXJzOlsiX2lubGluZV8xNl9hIiwiX2lubGluZV8xNl9mIiwiX2lubGluZV8xNl9sIl19LHBvc3Q6e2JvZHk6IntyZXR1cm5bdGhpc19jbG9zZXN0WCx0aGlzX2Nsb3Nlc3RZLHRoaXNfY2xvc2VzdEQyXX0iLGFyZ3M6W10sdGhpc1ZhcnM6WyJ0aGlzX2Nsb3Nlc3REMiIsInRoaXNfY2xvc2VzdFgiLCJ0aGlzX2Nsb3Nlc3RZIl0sbG9jYWxWYXJzOltdfSxkZWJ1ZzohMSxmdW5jTmFtZToiY3dpc2UiLGJsb2NrU2l6ZTo2NH0pO2Z1bmN0aW9uIGwodCxlLHIsbixpKXt0aGlzLmNvb3JkPVt0LGVdLHRoaXMuaWQ9cix0aGlzLnZhbHVlPW4sdGhpcy5kaXN0YW5jZT1pfWZ1bmN0aW9uIGModCxlLHIpe3RoaXMuZ2w9dCx0aGlzLmZibz1lLHRoaXMuYnVmZmVyPXIsdGhpcy5fcmVhZFRpbWVvdXQ9bnVsbDt2YXIgbj10aGlzO3RoaXMuX3JlYWRDYWxsYmFjaz1mdW5jdGlvbigpe24uZ2wmJihlLmJpbmQoKSx0LnJlYWRQaXhlbHMoMCwwLGUuc2hhcGVbMF0sZS5zaGFwZVsxXSx0LlJHQkEsdC5VTlNJR05FRF9CWVRFLG4uYnVmZmVyKSxuLl9yZWFkVGltZW91dD1udWxsKX19dmFyIHU9Yy5wcm90b3R5cGU7T2JqZWN0LmRlZmluZVByb3BlcnR5KHUsInNoYXBlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2w/dGhpcy5mYm8uc2hhcGUuc2xpY2UoKTpbMCwwXX0sc2V0OmZ1bmN0aW9uKHQpe2lmKHRoaXMuZ2wpe3RoaXMuZmJvLnNoYXBlPXQ7dmFyIGU9dGhpcy5mYm8uc2hhcGVbMF0scj10aGlzLmZiby5zaGFwZVsxXTtpZihyKmUqND50aGlzLmJ1ZmZlci5sZW5ndGgpe2kuZnJlZSh0aGlzLmJ1ZmZlcik7Zm9yKHZhciBuPXRoaXMuYnVmZmVyPWkubWFsbG9jVWludDgobyhyKmUqNCkpLGE9MDthPHIqZSo0OysrYSluW2FdPTI1NX1yZXR1cm4gdH19fSksdS5iZWdpbj1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZ2w7dGhpcy5zaGFwZTt0JiYodGhpcy5mYm8uYmluZCgpLHQuY2xlYXJDb2xvcigxLDEsMSwxKSx0LmNsZWFyKHQuQ09MT1JfQlVGRkVSX0JJVHx0LkRFUFRIX0JVRkZFUl9CSVQpKX0sdS5lbmQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdsO3QmJih0LmJpbmRGcmFtZWJ1ZmZlcih0LkZSQU1FQlVGRkVSLG51bGwpLHRoaXMuX3JlYWRUaW1lb3V0fHxjbGVhclRpbWVvdXQodGhpcy5fcmVhZFRpbWVvdXQpLHRoaXMuX3JlYWRUaW1lb3V0PXNldFRpbWVvdXQodGhpcy5fcmVhZENhbGxiYWNrLDEpKX0sdS5xdWVyeT1mdW5jdGlvbih0LGUscil7aWYoIXRoaXMuZ2wpcmV0dXJuIG51bGw7dmFyIG49dGhpcy5mYm8uc2hhcGUuc2xpY2UoKTt0fD0wLGV8PTAsIm51bWJlciIhPXR5cGVvZiByJiYocj0xKTt2YXIgaT0wfE1hdGgubWluKE1hdGgubWF4KHQtciwwKSxuWzBdKSxvPTB8TWF0aC5taW4oTWF0aC5tYXgodCtyLDApLG5bMF0pLGM9MHxNYXRoLm1pbihNYXRoLm1heChlLXIsMCksblsxXSksdT0wfE1hdGgubWluKE1hdGgubWF4KGUrciwwKSxuWzFdKTtpZihvPD1pfHx1PD1jKXJldHVybiBudWxsO3ZhciBoPVtvLWksdS1jXSxmPWEodGhpcy5idWZmZXIsW2hbMF0saFsxXSw0XSxbNCw0Km5bMF0sMV0sNCooaStuWzBdKmMpKSxwPXMoZi5oaShoWzBdLGhbMV0sMSkscixyKSxkPXBbMF0sZz1wWzFdO3JldHVybiBkPDB8fE1hdGgucG93KHRoaXMucmFkaXVzLDIpPHBbMl0/bnVsbDpuZXcgbChkK2l8MCxnK2N8MCxmLmdldChkLGcsMCksW2YuZ2V0KGQsZywxKSxmLmdldChkLGcsMiksZi5nZXQoZCxnLDMpXSxNYXRoLnNxcnQocFsyXSkpfSx1LmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmdsJiYodGhpcy5mYm8uZGlzcG9zZSgpLGkuZnJlZSh0aGlzLmJ1ZmZlciksdGhpcy5nbD1udWxsLHRoaXMuX3JlYWRUaW1lb3V0JiZjbGVhclRpbWVvdXQodGhpcy5fcmVhZFRpbWVvdXQpKX19LHsiYml0LXR3aWRkbGUiOjgwLCJjd2lzZS9saWIvd3JhcHBlciI6MTM2LCJnbC1mYm8iOjIzOSxuZGFycmF5OjQxNywidHlwZWRhcnJheS1wb29sIjo1MDd9XSwyODc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9saWIvY3JlYXRlLXVuaWZvcm1zIiksaT10KCIuL2xpYi9jcmVhdGUtYXR0cmlidXRlcyIpLGE9dCgiLi9saWIvcmVmbGVjdCIpLG89dCgiLi9saWIvc2hhZGVyLWNhY2hlIikscz10KCIuL2xpYi9ydW50aW1lLXJlZmxlY3QiKSxsPXQoIi4vbGliL0dMRXJyb3IiKTtmdW5jdGlvbiBjKHQpe3RoaXMuZ2w9dCx0aGlzLmdsLmxhc3RBdHRyaWJDb3VudD0wLHRoaXMuX3ZyZWY9dGhpcy5fZnJlZj10aGlzLl9yZWxpbms9dGhpcy52ZXJ0U2hhZGVyPXRoaXMuZnJhZ1NoYWRlcj10aGlzLnByb2dyYW09dGhpcy5hdHRyaWJ1dGVzPXRoaXMudW5pZm9ybXM9dGhpcy50eXBlcz1udWxsfXZhciB1PWMucHJvdG90eXBlO2Z1bmN0aW9uIGgodCxlKXtyZXR1cm4gdC5uYW1lPGUubmFtZT8tMToxfXUuYmluZD1mdW5jdGlvbigpe3ZhciB0O3RoaXMucHJvZ3JhbXx8dGhpcy5fcmVsaW5rKCk7dmFyIGU9dGhpcy5nbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHRoaXMucHJvZ3JhbSx0aGlzLmdsLkFDVElWRV9BVFRSSUJVVEVTKSxyPXRoaXMuZ2wubGFzdEF0dHJpYkNvdW50O2lmKGU+cilmb3IodD1yO3Q8ZTt0KyspdGhpcy5nbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSh0KTtlbHNlIGlmKHI+ZSlmb3IodD1lO3Q8cjt0KyspdGhpcy5nbC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkodCk7dGhpcy5nbC5sYXN0QXR0cmliQ291bnQ9ZSx0aGlzLmdsLnVzZVByb2dyYW0odGhpcy5wcm9ncmFtKX0sdS5kaXNwb3NlPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuZ2wubGFzdEF0dHJpYkNvdW50LGU9MDtlPHQ7ZSsrKXRoaXMuZ2wuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGUpO3RoaXMuZ2wubGFzdEF0dHJpYkNvdW50PTAsdGhpcy5fZnJlZiYmdGhpcy5fZnJlZi5kaXNwb3NlKCksdGhpcy5fdnJlZiYmdGhpcy5fdnJlZi5kaXNwb3NlKCksdGhpcy5hdHRyaWJ1dGVzPXRoaXMudHlwZXM9dGhpcy52ZXJ0U2hhZGVyPXRoaXMuZnJhZ1NoYWRlcj10aGlzLnByb2dyYW09dGhpcy5fcmVsaW5rPXRoaXMuX2ZyZWY9dGhpcy5fdnJlZj1udWxsfSx1LnVwZGF0ZT1mdW5jdGlvbih0LGUscixjKXtpZighZXx8MT09PWFyZ3VtZW50cy5sZW5ndGgpe3ZhciB1PXQ7dD11LnZlcnRleCxlPXUuZnJhZ21lbnQscj11LnVuaWZvcm1zLGM9dS5hdHRyaWJ1dGVzfXZhciBmPXRoaXMscD1mLmdsLGQ9Zi5fdnJlZjtmLl92cmVmPW8uc2hhZGVyKHAscC5WRVJURVhfU0hBREVSLHQpLGQmJmQuZGlzcG9zZSgpLGYudmVydFNoYWRlcj1mLl92cmVmLnNoYWRlcjt2YXIgZz10aGlzLl9mcmVmO2lmKGYuX2ZyZWY9by5zaGFkZXIocCxwLkZSQUdNRU5UX1NIQURFUixlKSxnJiZnLmRpc3Bvc2UoKSxmLmZyYWdTaGFkZXI9Zi5fZnJlZi5zaGFkZXIsIXJ8fCFjKXt2YXIgbT1wLmNyZWF0ZVByb2dyYW0oKTtpZihwLmF0dGFjaFNoYWRlcihtLGYuZnJhZ1NoYWRlcikscC5hdHRhY2hTaGFkZXIobSxmLnZlcnRTaGFkZXIpLHAubGlua1Byb2dyYW0obSksIXAuZ2V0UHJvZ3JhbVBhcmFtZXRlcihtLHAuTElOS19TVEFUVVMpKXt2YXIgdj1wLmdldFByb2dyYW1JbmZvTG9nKG0pO3Rocm93IG5ldyBsKHYsIkVycm9yIGxpbmtpbmcgcHJvZ3JhbToiK3YpfXI9cnx8cy51bmlmb3JtcyhwLG0pLGM9Y3x8cy5hdHRyaWJ1dGVzKHAsbSkscC5kZWxldGVQcm9ncmFtKG0pfShjPWMuc2xpY2UoKSkuc29ydChoKTt2YXIgeSx4PVtdLGI9W10sXz1bXTtmb3IoeT0wO3k8Yy5sZW5ndGg7Kyt5KXt2YXIgdz1jW3ldO2lmKHcudHlwZS5pbmRleE9mKCJtYXQiKT49MCl7Zm9yKHZhciBrPTB8dy50eXBlLmNoYXJBdCh3LnR5cGUubGVuZ3RoLTEpLE09bmV3IEFycmF5KGspLEE9MDtBPGs7KytBKU1bQV09Xy5sZW5ndGgsYi5wdXNoKHcubmFtZSsiWyIrQSsiXSIpLCJudW1iZXIiPT10eXBlb2Ygdy5sb2NhdGlvbj9fLnB1c2gody5sb2NhdGlvbitBKTpBcnJheS5pc0FycmF5KHcubG9jYXRpb24pJiZ3LmxvY2F0aW9uLmxlbmd0aD09PWsmJiJudW1iZXIiPT10eXBlb2Ygdy5sb2NhdGlvbltBXT9fLnB1c2goMHx3LmxvY2F0aW9uW0FdKTpfLnB1c2goLTEpO3gucHVzaCh7bmFtZTp3Lm5hbWUsdHlwZTp3LnR5cGUsbG9jYXRpb25zOk19KX1lbHNlIHgucHVzaCh7bmFtZTp3Lm5hbWUsdHlwZTp3LnR5cGUsbG9jYXRpb25zOltfLmxlbmd0aF19KSxiLnB1c2gody5uYW1lKSwibnVtYmVyIj09dHlwZW9mIHcubG9jYXRpb24/Xy5wdXNoKDB8dy5sb2NhdGlvbik6Xy5wdXNoKC0xKX12YXIgVD0wO2Zvcih5PTA7eTxfLmxlbmd0aDsrK3kpaWYoX1t5XTwwKXtmb3IoO18uaW5kZXhPZihUKT49MDspVCs9MTtfW3ldPVR9dmFyIFM9bmV3IEFycmF5KHIubGVuZ3RoKTtmdW5jdGlvbiBFKCl7Zi5wcm9ncmFtPW8ucHJvZ3JhbShwLGYuX3ZyZWYsZi5fZnJlZixiLF8pO2Zvcih2YXIgdD0wO3Q8ci5sZW5ndGg7Kyt0KVNbdF09cC5nZXRVbmlmb3JtTG9jYXRpb24oZi5wcm9ncmFtLHJbdF0ubmFtZSl9RSgpLGYuX3JlbGluaz1FLGYudHlwZXM9e3VuaWZvcm1zOmEociksYXR0cmlidXRlczphKGMpfSxmLmF0dHJpYnV0ZXM9aShwLGYseCxfKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZiwidW5pZm9ybXMiLG4ocCxmLHIsUykpfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT1uZXcgYyh0KTtyZXR1cm4gYS51cGRhdGUoZSxyLG4saSksYX19LHsiLi9saWIvR0xFcnJvciI6Mjg4LCIuL2xpYi9jcmVhdGUtYXR0cmlidXRlcyI6Mjg5LCIuL2xpYi9jcmVhdGUtdW5pZm9ybXMiOjI5MCwiLi9saWIvcmVmbGVjdCI6MjkxLCIuL2xpYi9ydW50aW1lLXJlZmxlY3QiOjI5MiwiLi9saWIvc2hhZGVyLWNhY2hlIjoyOTN9XSwyODg6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSxyKXt0aGlzLnNob3J0TWVzc2FnZT1lfHwiIix0aGlzLmxvbmdNZXNzYWdlPXJ8fCIiLHRoaXMucmF3RXJyb3I9dHx8IiIsdGhpcy5tZXNzYWdlPSJnbC1zaGFkZXI6ICIrKGV8fHR8fCIiKSsocj8iXG4iK3I6IiIpLHRoaXMuc3RhY2s9KG5ldyBFcnJvcikuc3RhY2t9bi5wcm90b3R5cGU9bmV3IEVycm9yLG4ucHJvdG90eXBlLm5hbWU9IkdMRXJyb3IiLG4ucHJvdG90eXBlLmNvbnN0cnVjdG9yPW4sZS5leHBvcnRzPW59LHt9XSwyODk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGkpe2Zvcih2YXIgYT17fSxsPTAsYz1yLmxlbmd0aDtsPGM7KytsKXt2YXIgdT1yW2xdLGg9dS5uYW1lLGY9dS50eXBlLHA9dS5sb2NhdGlvbnM7c3dpdGNoKGYpe2Nhc2UiYm9vbCI6Y2FzZSJpbnQiOmNhc2UiZmxvYXQiOm8odCxlLHBbMF0saSwxLGEsaCk7YnJlYWs7ZGVmYXVsdDppZihmLmluZGV4T2YoInZlYyIpPj0wKXt2YXIgZD1mLmNoYXJDb2RlQXQoZi5sZW5ndGgtMSktNDg7aWYoZDwyfHxkPjQpdGhyb3cgbmV3IG4oIiIsIkludmFsaWQgZGF0YSB0eXBlIGZvciBhdHRyaWJ1dGUgIitoKyI6ICIrZik7byh0LGUscFswXSxpLGQsYSxoKX1lbHNle2lmKCEoZi5pbmRleE9mKCJtYXQiKT49MCkpdGhyb3cgbmV3IG4oIiIsIlVua25vd24gZGF0YSB0eXBlIGZvciBhdHRyaWJ1dGUgIitoKyI6ICIrZik7dmFyIGQ9Zi5jaGFyQ29kZUF0KGYubGVuZ3RoLTEpLTQ4O2lmKGQ8Mnx8ZD40KXRocm93IG5ldyBuKCIiLCJJbnZhbGlkIGRhdGEgdHlwZSBmb3IgYXR0cmlidXRlICIraCsiOiAiK2YpO3ModCxlLHAsaSxkLGEsaCl9fX1yZXR1cm4gYX07dmFyIG49dCgiLi9HTEVycm9yIik7ZnVuY3Rpb24gaSh0LGUscixuLGksYSl7dGhpcy5fZ2w9dCx0aGlzLl93cmFwcGVyPWUsdGhpcy5faW5kZXg9cix0aGlzLl9sb2NhdGlvbnM9bix0aGlzLl9kaW1lbnNpb249aSx0aGlzLl9jb25zdEZ1bmM9YX12YXIgYT1pLnByb3RvdHlwZTtmdW5jdGlvbiBvKHQsZSxyLG4sYSxvLHMpe2Zvcih2YXIgbD1bImdsIiwidiJdLGM9W10sdT0wO3U8YTsrK3UpbC5wdXNoKCJ4Iit1KSxjLnB1c2goIngiK3UpO2wucHVzaCgiaWYoeDAubGVuZ3RoPT09dm9pZCAwKXtyZXR1cm4gZ2wudmVydGV4QXR0cmliIithKyJmKHYsIitjLmpvaW4oKSsiKX1lbHNle3JldHVybiBnbC52ZXJ0ZXhBdHRyaWIiK2ErImZ2KHYseDApfSIpO3ZhciBoPUZ1bmN0aW9uLmFwcGx5KG51bGwsbCksZj1uZXcgaSh0LGUscixuLGEsaCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KG8scyx7c2V0OmZ1bmN0aW9uKGUpe3JldHVybiB0LmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShuW3JdKSxoKHQsbltyXSxlKSxlfSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZn0sZW51bWVyYWJsZTohMH0pfWZ1bmN0aW9uIHModCxlLHIsbixpLGEscyl7Zm9yKHZhciBsPW5ldyBBcnJheShpKSxjPW5ldyBBcnJheShpKSx1PTA7dTxpOysrdSlvKHQsZSxyW3VdLG4saSxsLHUpLGNbdV09bFt1XTtPYmplY3QuZGVmaW5lUHJvcGVydHkobCwibG9jYXRpb24iLHtzZXQ6ZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSlmb3IodmFyIGU9MDtlPGk7KytlKWNbZV0ubG9jYXRpb249dFtlXTtlbHNlIGZvcihlPTA7ZTxpOysrZSljW2VdLmxvY2F0aW9uPXQrZTtyZXR1cm4gdH0sZ2V0OmZ1bmN0aW9uKCl7Zm9yKHZhciB0PW5ldyBBcnJheShpKSxlPTA7ZTxpOysrZSl0W2VdPW5bcltlXV07cmV0dXJuIHR9LGVudW1lcmFibGU6ITB9KSxsLnBvaW50ZXI9ZnVuY3Rpb24oZSxhLG8scyl7ZT1lfHx0LkZMT0FULGE9ISFhLG89b3x8aSppLHM9c3x8MDtmb3IodmFyIGw9MDtsPGk7KytsKXt2YXIgYz1uW3JbbF1dO3QudmVydGV4QXR0cmliUG9pbnRlcihjLGksZSxhLG8scytsKmkpLHQuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoYyl9fTt2YXIgaD1uZXcgQXJyYXkoaSksZj10WyJ2ZXJ0ZXhBdHRyaWIiK2krImZ2Il07T2JqZWN0LmRlZmluZVByb3BlcnR5KGEscyx7c2V0OmZ1bmN0aW9uKGUpe2Zvcih2YXIgYT0wO2E8aTsrK2Epe3ZhciBvPW5bclthXV07aWYodC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkobyksQXJyYXkuaXNBcnJheShlWzBdKSlmLmNhbGwodCxvLGVbYV0pO2Vsc2V7Zm9yKHZhciBzPTA7czxpOysrcyloW3NdPWVbaSphK3NdO2YuY2FsbCh0LG8saCl9fXJldHVybiBlfSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbH0sZW51bWVyYWJsZTohMH0pfWEucG9pbnRlcj1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10aGlzLl9nbCxhPXRoaXMuX2xvY2F0aW9uc1t0aGlzLl9pbmRleF07aS52ZXJ0ZXhBdHRyaWJQb2ludGVyKGEsdGhpcy5fZGltZW5zaW9uLHR8fGkuRkxPQVQsISFlLHJ8fDAsbnx8MCksaS5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShhKX0sYS5zZXQ9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHRoaXMuX2NvbnN0RnVuYyh0aGlzLl9sb2NhdGlvbnNbdGhpcy5faW5kZXhdLHQsZSxyLG4pfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYSwibG9jYXRpb24iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbG9jYXRpb25zW3RoaXMuX2luZGV4XX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiB0IT09dGhpcy5fbG9jYXRpb25zW3RoaXMuX2luZGV4XSYmKHRoaXMuX2xvY2F0aW9uc1t0aGlzLl9pbmRleF09MHx0LHRoaXMuX3dyYXBwZXIucHJvZ3JhbT1udWxsKSwwfHR9fSl9LHsiLi9HTEVycm9yIjoyODh9XSwyOTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9yZWZsZWN0IiksaT10KCIuL0dMRXJyb3IiKTtmdW5jdGlvbiBhKHQpe3JldHVybiBuZXcgRnVuY3Rpb24oInkiLCJyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4geX0iKSh0KX1mdW5jdGlvbiBvKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheSh0KSxuPTA7bjx0OysrbilyW25dPWU7cmV0dXJuIHJ9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMpe2Z1bmN0aW9uIGwodCxlLHIpe3N3aXRjaChyKXtjYXNlImJvb2wiOmNhc2UiaW50IjpjYXNlInNhbXBsZXIyRCI6Y2FzZSJzYW1wbGVyQ3ViZSI6cmV0dXJuImdsLnVuaWZvcm0xaShsb2NhdGlvbnNbIitlKyJdLG9iaiIrdCsiKSI7Y2FzZSJmbG9hdCI6cmV0dXJuImdsLnVuaWZvcm0xZihsb2NhdGlvbnNbIitlKyJdLG9iaiIrdCsiKSI7ZGVmYXVsdDp2YXIgbj1yLmluZGV4T2YoInZlYyIpO2lmKCEoMDw9biYmbjw9MSYmci5sZW5ndGg9PT00K24pKXtpZigwPT09ci5pbmRleE9mKCJtYXQiKSYmND09PXIubGVuZ3RoKXt2YXIgYT1yLmNoYXJDb2RlQXQoci5sZW5ndGgtMSktNDg7aWYoYTwyfHxhPjQpdGhyb3cgbmV3IGkoIiIsIkludmFsaWQgdW5pZm9ybSBkaW1lbnNpb24gdHlwZSBmb3IgbWF0cml4ICIrbmFtZSsiOiAiK3IpO3JldHVybiJnbC51bmlmb3JtTWF0cml4IithKyJmdihsb2NhdGlvbnNbIitlKyJdLGZhbHNlLG9iaiIrdCsiKSJ9dGhyb3cgbmV3IGkoIiIsIlVua25vd24gdW5pZm9ybSBkYXRhIHR5cGUgZm9yICIrbmFtZSsiOiAiK3IpfXZhciBhPXIuY2hhckNvZGVBdChyLmxlbmd0aC0xKS00ODtpZihhPDJ8fGE+NCl0aHJvdyBuZXcgaSgiIiwiSW52YWxpZCBkYXRhIHR5cGUiKTtzd2l0Y2goci5jaGFyQXQoMCkpe2Nhc2UiYiI6Y2FzZSJpIjpyZXR1cm4iZ2wudW5pZm9ybSIrYSsiaXYobG9jYXRpb25zWyIrZSsiXSxvYmoiK3QrIikiO2Nhc2UidiI6cmV0dXJuImdsLnVuaWZvcm0iK2ErImZ2KGxvY2F0aW9uc1siK2UrIl0sb2JqIit0KyIpIjtkZWZhdWx0OnRocm93IG5ldyBpKCIiLCJVbnJlY29nbml6ZWQgZGF0YSB0eXBlIGZvciB2ZWN0b3IgIituYW1lKyI6ICIrcil9fX1mdW5jdGlvbiBjKGUpe2Zvcih2YXIgbj1bInJldHVybiBmdW5jdGlvbiB1cGRhdGVQcm9wZXJ0eShvYmopeyJdLGk9ZnVuY3Rpb24gdChlLHIpe2lmKCJvYmplY3QiIT10eXBlb2YgcilyZXR1cm5bW2Uscl1dO3ZhciBuPVtdO2Zvcih2YXIgaSBpbiByKXt2YXIgYT1yW2ldLG89ZTtwYXJzZUludChpKSsiIj09PWk/bys9IlsiK2krIl0iOm8rPSIuIitpLCJvYmplY3QiPT10eXBlb2YgYT9uLnB1c2guYXBwbHkobix0KG8sYSkpOm4ucHVzaChbbyxhXSl9cmV0dXJuIG59KCIiLGUpLGE9MDthPGkubGVuZ3RoOysrYSl7dmFyIG89aVthXSxjPW9bMF0sdT1vWzFdO3NbdV0mJm4ucHVzaChsKGMsdSxyW3VdLnR5cGUpKX1uLnB1c2goInJldHVybiBvYmp9Iik7dmFyIGg9bmV3IEZ1bmN0aW9uKCJnbCIsImxvY2F0aW9ucyIsbi5qb2luKCJcbiIpKTtyZXR1cm4gaCh0LHMpfWZ1bmN0aW9uIHUobixsLHUpe2lmKCJvYmplY3QiPT10eXBlb2YgdSl7dmFyIGY9aCh1KTtPYmplY3QuZGVmaW5lUHJvcGVydHkobixsLHtnZXQ6YShmKSxzZXQ6Yyh1KSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMX0pfWVsc2Ugc1t1XT9PYmplY3QuZGVmaW5lUHJvcGVydHkobixsLHtnZXQ6KHA9dSxuZXcgRnVuY3Rpb24oImdsIiwid3JhcHBlciIsImxvY2F0aW9ucyIsInJldHVybiBmdW5jdGlvbigpe3JldHVybiBnbC5nZXRVbmlmb3JtKHdyYXBwZXIucHJvZ3JhbSxsb2NhdGlvbnNbIitwKyJdKX0iKSh0LGUscykpLHNldDpjKHUpLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiExfSk6bltsXT1mdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZSJib29sIjpyZXR1cm4hMTtjYXNlImludCI6Y2FzZSJzYW1wbGVyMkQiOmNhc2Uic2FtcGxlckN1YmUiOmNhc2UiZmxvYXQiOnJldHVybiAwO2RlZmF1bHQ6dmFyIGU9dC5pbmRleE9mKCJ2ZWMiKTtpZigwPD1lJiZlPD0xJiZ0Lmxlbmd0aD09PTQrZSl7dmFyIHI9dC5jaGFyQ29kZUF0KHQubGVuZ3RoLTEpLTQ4O2lmKHI8Mnx8cj40KXRocm93IG5ldyBpKCIiLCJJbnZhbGlkIGRhdGEgdHlwZSIpO3JldHVybiJiIj09PXQuY2hhckF0KDApP28ociwhMSk6byhyLDApfWlmKDA9PT10LmluZGV4T2YoIm1hdCIpJiY0PT09dC5sZW5ndGgpe3ZhciByPXQuY2hhckNvZGVBdCh0Lmxlbmd0aC0xKS00ODtpZihyPDJ8fHI+NCl0aHJvdyBuZXcgaSgiIiwiSW52YWxpZCB1bmlmb3JtIGRpbWVuc2lvbiB0eXBlIGZvciBtYXRyaXggIituYW1lKyI6ICIrdCk7cmV0dXJuIG8ocipyLDApfXRocm93IG5ldyBpKCIiLCJVbmtub3duIHVuaWZvcm0gZGF0YSB0eXBlIGZvciAiK25hbWUrIjogIit0KX19KHJbdV0udHlwZSk7dmFyIHB9ZnVuY3Rpb24gaCh0KXt2YXIgZTtpZihBcnJheS5pc0FycmF5KHQpKXtlPW5ldyBBcnJheSh0Lmxlbmd0aCk7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDsrK3IpdShlLHIsdFtyXSl9ZWxzZSBmb3IodmFyIG4gaW4gZT17fSx0KXUoZSxuLHRbbl0pO3JldHVybiBlfXZhciBmPW4ociwhMCk7cmV0dXJue2dldDphKGgoZikpLHNldDpjKGYpLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfX19LHsiLi9HTEVycm9yIjoyODgsIi4vcmVmbGVjdCI6MjkxfV0sMjkxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj17fSxuPTA7bjx0Lmxlbmd0aDsrK24pZm9yKHZhciBpPXRbbl0ubmFtZSxhPWkuc3BsaXQoIi4iKSxvPXIscz0wO3M8YS5sZW5ndGg7KytzKXt2YXIgbD1hW3NdLnNwbGl0KCJbIik7aWYobC5sZW5ndGg+MSl7bFswXWluIG98fChvW2xbMF1dPVtdKSxvPW9bbFswXV07Zm9yKHZhciBjPTE7YzxsLmxlbmd0aDsrK2Mpe3ZhciB1PXBhcnNlSW50KGxbY10pO2M8bC5sZW5ndGgtMXx8czxhLmxlbmd0aC0xPyh1IGluIG98fChjPGwubGVuZ3RoLTE/b1t1XT1bXTpvW3VdPXt9KSxvPW9bdV0pOm9bdV09ZT9uOnRbbl0udHlwZX19ZWxzZSBzPGEubGVuZ3RoLTE/KGxbMF1pbiBvfHwob1tsWzBdXT17fSksbz1vW2xbMF1dKTpvW2xbMF1dPWU/bjp0W25dLnR5cGV9cmV0dXJuIHJ9fSx7fV0sMjkyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3IudW5pZm9ybXM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5nZXRQcm9ncmFtUGFyYW1ldGVyKGUsdC5BQ1RJVkVfVU5JRk9STVMpLG49W10saT0wO2k8cjsrK2kpe3ZhciBvPXQuZ2V0QWN0aXZlVW5pZm9ybShlLGkpO2lmKG8pe3ZhciBzPWEodCxvLnR5cGUpO2lmKG8uc2l6ZT4xKWZvcih2YXIgbD0wO2w8by5zaXplOysrbCluLnB1c2goe25hbWU6by5uYW1lLnJlcGxhY2UoIlswXSIsIlsiK2wrIl0iKSx0eXBlOnN9KTtlbHNlIG4ucHVzaCh7bmFtZTpvLm5hbWUsdHlwZTpzfSl9fXJldHVybiBufSxyLmF0dHJpYnV0ZXM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5nZXRQcm9ncmFtUGFyYW1ldGVyKGUsdC5BQ1RJVkVfQVRUUklCVVRFUyksbj1bXSxpPTA7aTxyOysraSl7dmFyIG89dC5nZXRBY3RpdmVBdHRyaWIoZSxpKTtvJiZuLnB1c2goe25hbWU6by5uYW1lLHR5cGU6YSh0LG8udHlwZSl9KX1yZXR1cm4gbn07dmFyIG49e0ZMT0FUOiJmbG9hdCIsRkxPQVRfVkVDMjoidmVjMiIsRkxPQVRfVkVDMzoidmVjMyIsRkxPQVRfVkVDNDoidmVjNCIsSU5UOiJpbnQiLElOVF9WRUMyOiJpdmVjMiIsSU5UX1ZFQzM6Iml2ZWMzIixJTlRfVkVDNDoiaXZlYzQiLEJPT0w6ImJvb2wiLEJPT0xfVkVDMjoiYnZlYzIiLEJPT0xfVkVDMzoiYnZlYzMiLEJPT0xfVkVDNDoiYnZlYzQiLEZMT0FUX01BVDI6Im1hdDIiLEZMT0FUX01BVDM6Im1hdDMiLEZMT0FUX01BVDQ6Im1hdDQiLFNBTVBMRVJfMkQ6InNhbXBsZXIyRCIsU0FNUExFUl9DVUJFOiJzYW1wbGVyQ3ViZSJ9LGk9bnVsbDtmdW5jdGlvbiBhKHQsZSl7aWYoIWkpe3ZhciByPU9iamVjdC5rZXlzKG4pO2k9e307Zm9yKHZhciBhPTA7YTxyLmxlbmd0aDsrK2Epe3ZhciBvPXJbYV07aVt0W29dXT1uW29dfX1yZXR1cm4gaVtlXX19LHt9XSwyOTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ci5zaGFkZXI9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB1KHQpLmdldFNoYWRlclJlZmVyZW5jZShlLHIpfSxyLnByb2dyYW09ZnVuY3Rpb24odCxlLHIsbixpKXtyZXR1cm4gdSh0KS5nZXRQcm9ncmFtKGUscixuLGkpfTt2YXIgbj10KCIuL0dMRXJyb3IiKSxpPXQoImdsLWZvcm1hdC1jb21waWxlci1lcnJvciIpLGE9bmV3KCJ1bmRlZmluZWQiPT10eXBlb2YgV2Vha01hcD90KCJ3ZWFrbWFwLXNoaW0iKTpXZWFrTWFwKSxvPTA7ZnVuY3Rpb24gcyh0LGUscixuLGksYSxvKXt0aGlzLmlkPXQsdGhpcy5zcmM9ZSx0aGlzLnR5cGU9cix0aGlzLnNoYWRlcj1uLHRoaXMuY291bnQ9YSx0aGlzLnByb2dyYW1zPVtdLHRoaXMuY2FjaGU9b31mdW5jdGlvbiBsKHQpe3RoaXMuZ2w9dCx0aGlzLnNoYWRlcnM9W3t9LHt9XSx0aGlzLnByb2dyYW1zPXt9fXMucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXtpZigwPT0tLXRoaXMuY291bnQpe2Zvcih2YXIgdD10aGlzLmNhY2hlLGU9dC5nbCxyPXRoaXMucHJvZ3JhbXMsbj0wLGk9ci5sZW5ndGg7bjxpOysrbil7dmFyIGE9dC5wcm9ncmFtc1tyW25dXTthJiYoZGVsZXRlIHQucHJvZ3JhbXNbbl0sZS5kZWxldGVQcm9ncmFtKGEpKX1lLmRlbGV0ZVNoYWRlcih0aGlzLnNoYWRlciksZGVsZXRlIHQuc2hhZGVyc1t0aGlzLnR5cGU9PT1lLkZSQUdNRU5UX1NIQURFUnwwXVt0aGlzLnNyY119fTt2YXIgYz1sLnByb3RvdHlwZTtmdW5jdGlvbiB1KHQpe3ZhciBlPWEuZ2V0KHQpO3JldHVybiBlfHwoZT1uZXcgbCh0KSxhLnNldCh0LGUpKSxlfWMuZ2V0U2hhZGVyUmVmZXJlbmNlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5nbCxhPXRoaXMuc2hhZGVyc1t0PT09ci5GUkFHTUVOVF9TSEFERVJ8MF0sbD1hW2VdO2lmKGwmJnIuaXNTaGFkZXIobC5zaGFkZXIpKWwuY291bnQrPTE7ZWxzZXt2YXIgYz1mdW5jdGlvbih0LGUscil7dmFyIGE9dC5jcmVhdGVTaGFkZXIoZSk7aWYodC5zaGFkZXJTb3VyY2UoYSxyKSx0LmNvbXBpbGVTaGFkZXIoYSksIXQuZ2V0U2hhZGVyUGFyYW1ldGVyKGEsdC5DT01QSUxFX1NUQVRVUykpe3ZhciBvPXQuZ2V0U2hhZGVySW5mb0xvZyhhKTt0cnl7dmFyIHM9aShvLHIsZSl9Y2F0Y2godCl7dGhyb3cgY29uc29sZS53YXJuKCJGYWlsZWQgdG8gZm9ybWF0IGNvbXBpbGVyIGVycm9yOiAiK3QpLG5ldyBuKG8sIkVycm9yIGNvbXBpbGluZyBzaGFkZXI6XG4iK28pfXRocm93IG5ldyBuKG8scy5zaG9ydCxzLmxvbmcpfXJldHVybiBhfShyLHQsZSk7bD1hW2VdPW5ldyBzKG8rKyxlLHQsYyxbXSwxLHRoaXMpfXJldHVybiBsfSxjLmdldFByb2dyYW09ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGE9W3QuaWQsZS5pZCxyLmpvaW4oIjoiKSxpLmpvaW4oIjoiKV0uam9pbigiQCIpLG89dGhpcy5wcm9ncmFtc1thXTtyZXR1cm4gbyYmdGhpcy5nbC5pc1Byb2dyYW0obyl8fCh0aGlzLnByb2dyYW1zW2FdPW89ZnVuY3Rpb24odCxlLHIsaSxhKXt2YXIgbz10LmNyZWF0ZVByb2dyYW0oKTt0LmF0dGFjaFNoYWRlcihvLGUpLHQuYXR0YWNoU2hhZGVyKG8scik7Zm9yKHZhciBzPTA7czxpLmxlbmd0aDsrK3MpdC5iaW5kQXR0cmliTG9jYXRpb24obyxhW3NdLGlbc10pO2lmKHQubGlua1Byb2dyYW0obyksIXQuZ2V0UHJvZ3JhbVBhcmFtZXRlcihvLHQuTElOS19TVEFUVVMpKXt2YXIgbD10LmdldFByb2dyYW1JbmZvTG9nKG8pO3Rocm93IG5ldyBuKGwsIkVycm9yIGxpbmtpbmcgcHJvZ3JhbTogIitsKX1yZXR1cm4gb30odGhpcy5nbCx0LnNoYWRlcixlLnNoYWRlcixyLGkpLHQucHJvZ3JhbXMucHVzaChhKSxlLnByb2dyYW1zLnB1c2goYSkpLG99fSx7Ii4vR0xFcnJvciI6Mjg4LCJnbC1mb3JtYXQtY29tcGlsZXItZXJyb3IiOjI0MCwid2Vha21hcC1zaGltIjo1MjB9XSwyOTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt0aGlzLnBsb3Q9dCx0aGlzLmVuYWJsZT1bITAsITAsITEsITFdLHRoaXMud2lkdGg9WzEsMSwxLDFdLHRoaXMuY29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5jZW50ZXI9WzEvMCwxLzBdfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPW5ldyBuKHQpO3JldHVybiByLnVwZGF0ZShlKSx0LmFkZE92ZXJsYXkocikscn07dmFyIGk9bi5wcm90b3R5cGU7aS51cGRhdGU9ZnVuY3Rpb24odCl7dD10fHx7fSx0aGlzLmVuYWJsZT0odC5lbmFibGV8fFshMCwhMCwhMSwhMV0pLnNsaWNlKCksdGhpcy53aWR0aD0odC53aWR0aHx8WzEsMSwxLDFdKS5zbGljZSgpLHRoaXMuY29sb3I9KHQuY29sb3J8fFtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuc2xpY2UoKX0pLHRoaXMuY2VudGVyPSh0LmNlbnRlcnx8WzEvMCwxLzBdKS5zbGljZSgpLHRoaXMucGxvdC5zZXRPdmVybGF5RGlydHkoKX0saS5kcmF3PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5lbmFibGUsZT10aGlzLndpZHRoLHI9dGhpcy5jb2xvcixuPXRoaXMuY2VudGVyLGk9dGhpcy5wbG90LGE9aS5saW5lLG89aS5kYXRhQm94LHM9aS52aWV3Qm94O2lmKGEuYmluZCgpLG9bMF08PW5bMF0mJm5bMF08PW9bMl0mJm9bMV08PW5bMV0mJm5bMV08PW9bM10pe3ZhciBsPXNbMF0rKG5bMF0tb1swXSkvKG9bMl0tb1swXSkqKHNbMl0tc1swXSksYz1zWzFdKyhuWzFdLW9bMV0pLyhvWzNdLW9bMV0pKihzWzNdLXNbMV0pO3RbMF0mJmEuZHJhd0xpbmUobCxjLHNbMF0sYyxlWzBdLHJbMF0pLHRbMV0mJmEuZHJhd0xpbmUobCxjLGwsc1sxXSxlWzFdLHJbMV0pLHRbMl0mJmEuZHJhd0xpbmUobCxjLHNbMl0sYyxlWzJdLHJbMl0pLHRbM10mJmEuZHJhd0xpbmUobCxjLGwsc1szXSxlWzNdLHJbM10pfX0saS5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5wbG90LnJlbW92ZU92ZXJsYXkodGhpcyl9fSx7fV0sMjk1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImdsc2xpZnkiKSxpPXQoImdsLXNoYWRlciIpLGE9bihbInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb24sIGNvbG9yO1xuYXR0cmlidXRlIGZsb2F0IHdlaWdodDtcblxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xudW5pZm9ybSB2ZWMzIGNvb3JkaW5hdGVzWzNdO1xudW5pZm9ybSB2ZWM0IGNvbG9yc1szXTtcbnVuaWZvcm0gdmVjMiBzY3JlZW5TaGFwZTtcbnVuaWZvcm0gZmxvYXQgbGluZVdpZHRoO1xuXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gIHZlYzMgdmVydGV4UG9zaXRpb24gPSBtaXgoY29vcmRpbmF0ZXNbMF0sXG4gICAgbWl4KGNvb3JkaW5hdGVzWzJdLCBjb29yZGluYXRlc1sxXSwgMC41ICogKHBvc2l0aW9uICsgMS4wKSksIGFicyhwb3NpdGlvbikpO1xuXG4gIHZlYzQgY2xpcFBvcyA9IHByb2plY3Rpb24gKiB2aWV3ICogbW9kZWwgKiB2ZWM0KHZlcnRleFBvc2l0aW9uLCAxLjApO1xuICB2ZWMyIGNsaXBPZmZzZXQgPSAocHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQoY29sb3IsIDAuMCkpLnh5O1xuICB2ZWMyIGRlbHRhID0gd2VpZ2h0ICogY2xpcE9mZnNldCAqIHNjcmVlblNoYXBlO1xuICB2ZWMyIGxpbmVPZmZzZXQgPSBub3JtYWxpemUodmVjMihkZWx0YS55LCAtZGVsdGEueCkpIC8gc2NyZWVuU2hhcGU7XG5cbiAgZ2xfUG9zaXRpb24gICA9IHZlYzQoY2xpcFBvcy54eSArIGNsaXBQb3MudyAqIDAuNSAqIGxpbmVXaWR0aCAqIGxpbmVPZmZzZXQsIGNsaXBQb3MueiwgY2xpcFBvcy53KTtcbiAgZnJhZ0NvbG9yICAgICA9IGNvbG9yLnggKiBjb2xvcnNbMF0gKyBjb2xvci55ICogY29sb3JzWzFdICsgY29sb3IueiAqIGNvbG9yc1syXTtcbn1cbiJdKSxvPW4oWyJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XG5cbnZvaWQgbWFpbigpIHtcbiAgZ2xfRnJhZ0NvbG9yID0gZnJhZ0NvbG9yO1xufSJdKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGkodCxhLG8sbnVsbCxbe25hbWU6InBvc2l0aW9uIix0eXBlOiJ2ZWMzIn0se25hbWU6ImNvbG9yIix0eXBlOiJ2ZWMzIn0se25hbWU6IndlaWdodCIsdHlwZToiZmxvYXQifV0pfX0seyJnbC1zaGFkZXIiOjI4NyxnbHNsaWZ5OjM3N31dLDI5NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJnbC1idWZmZXIiKSxpPXQoImdsLXZhbyIpLGE9dCgiLi9zaGFkZXJzL2luZGV4Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9W107ZnVuY3Rpb24gbyh0LGUsbixpLGEsbyl7dmFyIHM9W3QsZSxuLDAsMCwwLDFdO3NbaSszXT0xLHNbaV09YSxyLnB1c2guYXBwbHkocixzKSxzWzZdPS0xLHIucHVzaC5hcHBseShyLHMpLHNbaV09byxyLnB1c2guYXBwbHkocixzKSxyLnB1c2guYXBwbHkocixzKSxzWzZdPTEsci5wdXNoLmFwcGx5KHIscyksc1tpXT1hLHIucHVzaC5hcHBseShyLHMpfW8oMCwwLDAsMCwwLDEpLG8oMCwwLDAsMSwwLDEpLG8oMCwwLDAsMiwwLDEpLG8oMSwwLDAsMSwtMSwxKSxvKDEsMCwwLDIsLTEsMSksbygwLDEsMCwwLC0xLDEpLG8oMCwxLDAsMiwtMSwxKSxvKDAsMCwxLDAsLTEsMSksbygwLDAsMSwxLC0xLDEpO3ZhciBsPW4odCxyKSxjPWkodCxbe3R5cGU6dC5GTE9BVCxidWZmZXI6bCxzaXplOjMsb2Zmc2V0OjAsc3RyaWRlOjI4fSx7dHlwZTp0LkZMT0FULGJ1ZmZlcjpsLHNpemU6MyxvZmZzZXQ6MTIsc3RyaWRlOjI4fSx7dHlwZTp0LkZMT0FULGJ1ZmZlcjpsLHNpemU6MSxvZmZzZXQ6MjQsc3RyaWRlOjI4fV0pLHU9YSh0KTt1LmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCx1LmF0dHJpYnV0ZXMuY29sb3IubG9jYXRpb249MSx1LmF0dHJpYnV0ZXMud2VpZ2h0LmxvY2F0aW9uPTI7dmFyIGg9bmV3IHModCxsLGMsdSk7cmV0dXJuIGgudXBkYXRlKGUpLGh9O3ZhciBvPVsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXTtmdW5jdGlvbiBzKHQsZSxyLG4pe3RoaXMuZ2w9dCx0aGlzLmJ1ZmZlcj1lLHRoaXMudmFvPXIsdGhpcy5zaGFkZXI9bix0aGlzLnBpeGVsUmF0aW89MSx0aGlzLmJvdW5kcz1bWy0xZTMsLTFlMywtMWUzXSxbMWUzLDFlMywxZTNdXSx0aGlzLnBvc2l0aW9uPVswLDAsMF0sdGhpcy5saW5lV2lkdGg9WzIsMiwyXSx0aGlzLmNvbG9ycz1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMuZW5hYmxlZD1bITAsITAsITBdLHRoaXMuZHJhd1NpZGVzPVshMCwhMCwhMF0sdGhpcy5heGVzPW51bGx9dmFyIGw9cy5wcm90b3R5cGUsYz1bMCwwLDBdLHU9WzAsMCwwXSxoPVswLDBdO2wuaXNUcmFuc3BhcmVudD1mdW5jdGlvbigpe3JldHVybiExfSxsLmRyYXdUcmFuc3BhcmVudD1mdW5jdGlvbih0KXt9LGwuZHJhdz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmdsLHI9dGhpcy52YW8sbj10aGlzLnNoYWRlcjtyLmJpbmQoKSxuLmJpbmQoKTt2YXIgaSxhPXQubW9kZWx8fG8scz10LnZpZXd8fG8sbD10LnByb2plY3Rpb258fG87dGhpcy5heGVzJiYoaT10aGlzLmF4ZXMubGFzdEN1YmVQcm9wcy5heGlzKTtmb3IodmFyIGY9YyxwPXUsZD0wO2Q8MzsrK2QpaSYmaVtkXTwwPyhmW2RdPXRoaXMuYm91bmRzWzBdW2RdLHBbZF09dGhpcy5ib3VuZHNbMV1bZF0pOihmW2RdPXRoaXMuYm91bmRzWzFdW2RdLHBbZF09dGhpcy5ib3VuZHNbMF1bZF0pO2hbMF09ZS5kcmF3aW5nQnVmZmVyV2lkdGgsaFsxXT1lLmRyYXdpbmdCdWZmZXJIZWlnaHQsbi51bmlmb3Jtcy5tb2RlbD1hLG4udW5pZm9ybXMudmlldz1zLG4udW5pZm9ybXMucHJvamVjdGlvbj1sLG4udW5pZm9ybXMuY29vcmRpbmF0ZXM9W3RoaXMucG9zaXRpb24sZixwXSxuLnVuaWZvcm1zLmNvbG9ycz10aGlzLmNvbG9ycyxuLnVuaWZvcm1zLnNjcmVlblNoYXBlPWg7Zm9yKGQ9MDtkPDM7KytkKW4udW5pZm9ybXMubGluZVdpZHRoPXRoaXMubGluZVdpZHRoW2RdKnRoaXMucGl4ZWxSYXRpbyx0aGlzLmVuYWJsZWRbZF0mJihyLmRyYXcoZS5UUklBTkdMRVMsNiw2KmQpLHRoaXMuZHJhd1NpZGVzW2RdJiZyLmRyYXcoZS5UUklBTkdMRVMsMTIsMTgrMTIqZCkpO3IudW5iaW5kKCl9LGwudXBkYXRlPWZ1bmN0aW9uKHQpe3QmJigiYm91bmRzImluIHQmJih0aGlzLmJvdW5kcz10LmJvdW5kcyksInBvc2l0aW9uImluIHQmJih0aGlzLnBvc2l0aW9uPXQucG9zaXRpb24pLCJsaW5lV2lkdGgiaW4gdCYmKHRoaXMubGluZVdpZHRoPXQubGluZVdpZHRoKSwiY29sb3JzImluIHQmJih0aGlzLmNvbG9ycz10LmNvbG9ycyksImVuYWJsZWQiaW4gdCYmKHRoaXMuZW5hYmxlZD10LmVuYWJsZWQpLCJkcmF3U2lkZXMiaW4gdCYmKHRoaXMuZHJhd1NpZGVzPXQuZHJhd1NpZGVzKSl9LGwuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMudmFvLmRpc3Bvc2UoKSx0aGlzLmJ1ZmZlci5kaXNwb3NlKCksdGhpcy5zaGFkZXIuZGlzcG9zZSgpfX0seyIuL3NoYWRlcnMvaW5kZXgiOjI5NSwiZ2wtYnVmZmVyIjoyMzAsImdsLXZhbyI6MzA4fV0sMjk3OltmdW5jdGlvbih0LGUscil7YXJndW1lbnRzWzRdWzIzMl1bMF0uYXBwbHkocixhcmd1bWVudHMpfSx7YmFyeWNlbnRyaWM6NjEsZHVwOjIzMiwicG9seXRvcGUtY2xvc2VzdC1wb2ludC9saWIvY2xvc2VzdF9wb2ludF8yZC5qcyI6NDQ4fV0sMjk4OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiZ2xzbGlmeSIpLGk9bihbInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuZmxvYXQgaW52ZXJzZShmbG9hdCBtKSB7XG4gIHJldHVybiAxLjAgLyBtO1xufVxuXG5tYXQyIGludmVyc2UobWF0MiBtKSB7XG4gIHJldHVybiBtYXQyKG1bMV1bMV0sLW1bMF1bMV0sXG4gICAgICAgICAgICAgLW1bMV1bMF0sIG1bMF1bMF0pIC8gKG1bMF1bMF0qbVsxXVsxXSAtIG1bMF1bMV0qbVsxXVswXSk7XG59XG5cbm1hdDMgaW52ZXJzZShtYXQzIG0pIHtcbiAgZmxvYXQgYTAwID0gbVswXVswXSwgYTAxID0gbVswXVsxXSwgYTAyID0gbVswXVsyXTtcbiAgZmxvYXQgYTEwID0gbVsxXVswXSwgYTExID0gbVsxXVsxXSwgYTEyID0gbVsxXVsyXTtcbiAgZmxvYXQgYTIwID0gbVsyXVswXSwgYTIxID0gbVsyXVsxXSwgYTIyID0gbVsyXVsyXTtcblxuICBmbG9hdCBiMDEgPSBhMjIgKiBhMTEgLSBhMTIgKiBhMjE7XG4gIGZsb2F0IGIxMSA9IC1hMjIgKiBhMTAgKyBhMTIgKiBhMjA7XG4gIGZsb2F0IGIyMSA9IGEyMSAqIGExMCAtIGExMSAqIGEyMDtcblxuICBmbG9hdCBkZXQgPSBhMDAgKiBiMDEgKyBhMDEgKiBiMTEgKyBhMDIgKiBiMjE7XG5cbiAgcmV0dXJuIG1hdDMoYjAxLCAoLWEyMiAqIGEwMSArIGEwMiAqIGEyMSksIChhMTIgKiBhMDEgLSBhMDIgKiBhMTEpLFxuICAgICAgICAgICAgICBiMTEsIChhMjIgKiBhMDAgLSBhMDIgKiBhMjApLCAoLWExMiAqIGEwMCArIGEwMiAqIGExMCksXG4gICAgICAgICAgICAgIGIyMSwgKC1hMjEgKiBhMDAgKyBhMDEgKiBhMjApLCAoYTExICogYTAwIC0gYTAxICogYTEwKSkgLyBkZXQ7XG59XG5cbm1hdDQgaW52ZXJzZShtYXQ0IG0pIHtcbiAgZmxvYXRcbiAgICAgIGEwMCA9IG1bMF1bMF0sIGEwMSA9IG1bMF1bMV0sIGEwMiA9IG1bMF1bMl0sIGEwMyA9IG1bMF1bM10sXG4gICAgICBhMTAgPSBtWzFdWzBdLCBhMTEgPSBtWzFdWzFdLCBhMTIgPSBtWzFdWzJdLCBhMTMgPSBtWzFdWzNdLFxuICAgICAgYTIwID0gbVsyXVswXSwgYTIxID0gbVsyXVsxXSwgYTIyID0gbVsyXVsyXSwgYTIzID0gbVsyXVszXSxcbiAgICAgIGEzMCA9IG1bM11bMF0sIGEzMSA9IG1bM11bMV0sIGEzMiA9IG1bM11bMl0sIGEzMyA9IG1bM11bM10sXG5cbiAgICAgIGIwMCA9IGEwMCAqIGExMSAtIGEwMSAqIGExMCxcbiAgICAgIGIwMSA9IGEwMCAqIGExMiAtIGEwMiAqIGExMCxcbiAgICAgIGIwMiA9IGEwMCAqIGExMyAtIGEwMyAqIGExMCxcbiAgICAgIGIwMyA9IGEwMSAqIGExMiAtIGEwMiAqIGExMSxcbiAgICAgIGIwNCA9IGEwMSAqIGExMyAtIGEwMyAqIGExMSxcbiAgICAgIGIwNSA9IGEwMiAqIGExMyAtIGEwMyAqIGExMixcbiAgICAgIGIwNiA9IGEyMCAqIGEzMSAtIGEyMSAqIGEzMCxcbiAgICAgIGIwNyA9IGEyMCAqIGEzMiAtIGEyMiAqIGEzMCxcbiAgICAgIGIwOCA9IGEyMCAqIGEzMyAtIGEyMyAqIGEzMCxcbiAgICAgIGIwOSA9IGEyMSAqIGEzMiAtIGEyMiAqIGEzMSxcbiAgICAgIGIxMCA9IGEyMSAqIGEzMyAtIGEyMyAqIGEzMSxcbiAgICAgIGIxMSA9IGEyMiAqIGEzMyAtIGEyMyAqIGEzMixcblxuICAgICAgZGV0ID0gYjAwICogYjExIC0gYjAxICogYjEwICsgYjAyICogYjA5ICsgYjAzICogYjA4IC0gYjA0ICogYjA3ICsgYjA1ICogYjA2O1xuXG4gIHJldHVybiBtYXQ0KFxuICAgICAgYTExICogYjExIC0gYTEyICogYjEwICsgYTEzICogYjA5LFxuICAgICAgYTAyICogYjEwIC0gYTAxICogYjExIC0gYTAzICogYjA5LFxuICAgICAgYTMxICogYjA1IC0gYTMyICogYjA0ICsgYTMzICogYjAzLFxuICAgICAgYTIyICogYjA0IC0gYTIxICogYjA1IC0gYTIzICogYjAzLFxuICAgICAgYTEyICogYjA4IC0gYTEwICogYjExIC0gYTEzICogYjA3LFxuICAgICAgYTAwICogYjExIC0gYTAyICogYjA4ICsgYTAzICogYjA3LFxuICAgICAgYTMyICogYjAyIC0gYTMwICogYjA1IC0gYTMzICogYjAxLFxuICAgICAgYTIwICogYjA1IC0gYTIyICogYjAyICsgYTIzICogYjAxLFxuICAgICAgYTEwICogYjEwIC0gYTExICogYjA4ICsgYTEzICogYjA2LFxuICAgICAgYTAxICogYjA4IC0gYTAwICogYjEwIC0gYTAzICogYjA2LFxuICAgICAgYTMwICogYjA0IC0gYTMxICogYjAyICsgYTMzICogYjAwLFxuICAgICAgYTIxICogYjAyIC0gYTIwICogYjA0IC0gYTIzICogYjAwLFxuICAgICAgYTExICogYjA3IC0gYTEwICogYjA5IC0gYTEyICogYjA2LFxuICAgICAgYTAwICogYjA5IC0gYTAxICogYjA3ICsgYTAyICogYjA2LFxuICAgICAgYTMxICogYjAxIC0gYTMwICogYjAzIC0gYTMyICogYjAwLFxuICAgICAgYTIwICogYjAzIC0gYTIxICogYjAxICsgYTIyICogYjAwKSAvIGRldDtcbn1cblxudmVjMyBnZXRPcnRob2dvbmFsVmVjdG9yKHZlYzMgdikge1xuICAvLyBSZXR1cm4gdXAtdmVjdG9yIGZvciBvbmx5LXogdmVjdG9yLlxuICAvLyBSZXR1cm4gYXggKyBieSArIGN6ID0gMCwgYSBwb2ludCB0aGF0IGxpZXMgb24gdGhlIHBsYW5lIHRoYXQgaGFzIHYgYXMgYSBub3JtYWwgYW5kIHRoYXQgaXNuJ3QgKDAsMCwwKS5cbiAgLy8gRnJvbSB0aGUgYWJvdmUgaWYtc3RhdGVtZW50IHdlIGhhdmUgfHxhfHwgPiAwICBVICB8fGJ8fCA+IDAuXG4gIC8vIEFzc2lnbiB6ID0gMCwgeCA9IC1iLCB5ID0gYTpcbiAgLy8gYSotYiArIGIqYSArIGMqMCA9IC1iYSArIGJhICsgMCA9IDBcbiAgaWYgKHYueCp2LnggPiB2Lnoqdi56IHx8IHYueSp2LnkgPiB2Lnoqdi56KSB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZSh2ZWMzKC12LnksIHYueCwgMC4wKSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZSh2ZWMzKDAuMCwgdi56LCAtdi55KSk7XG4gIH1cbn1cblxuLy8gQ2FsY3VsYXRlIHRoZSB0dWJlIHZlcnRleCBhbmQgbm9ybWFsIGF0IHRoZSBnaXZlbiBpbmRleC5cbi8vXG4vLyBUaGUgcmV0dXJuZWQgdmVydGV4IGlzIGZvciBhIHR1YmUgcmluZyB3aXRoIGl0cyBjZW50ZXIgYXQgb3JpZ2luLCByYWRpdXMgb2YgbGVuZ3RoKGQpLCBwb2ludGluZyBpbiB0aGUgZGlyZWN0aW9uIG9mIGQuXG4vL1xuLy8gRWFjaCB0dWJlIHNlZ21lbnQgaXMgbWFkZSB1cCBvZiBhIHJpbmcgb2YgdmVydGljZXMuXG4vLyBUaGVzZSB2ZXJ0aWNlcyBhcmUgdXNlZCB0byBtYWtlIHVwIHRoZSB0cmlhbmdsZXMgb2YgdGhlIHR1YmUgYnkgY29ubmVjdGluZyB0aGVtIHRvZ2V0aGVyIGluIHRoZSB2ZXJ0ZXggYXJyYXkuXG4vLyBUaGUgaW5kZXhlcyBvZiB0dWJlIHNlZ21lbnRzIHJ1biBmcm9tIDAgdG8gOC5cbi8vXG52ZWMzIGdldFR1YmVQb3NpdGlvbih2ZWMzIGQsIGZsb2F0IGluZGV4LCBvdXQgdmVjMyBub3JtYWwpIHtcbiAgZmxvYXQgc2VnbWVudENvdW50ID0gOC4wO1xuXG4gIGZsb2F0IGFuZ2xlID0gMi4wICogMy4xNDE1OSAqIChpbmRleCAvIHNlZ21lbnRDb3VudCk7XG5cbiAgdmVjMyB1ID0gZ2V0T3J0aG9nb25hbFZlY3RvcihkKTtcbiAgdmVjMyB2ID0gbm9ybWFsaXplKGNyb3NzKHUsIGQpKTtcblxuICB2ZWMzIHggPSB1ICogY29zKGFuZ2xlKSAqIGxlbmd0aChkKTtcbiAgdmVjMyB5ID0gdiAqIHNpbihhbmdsZSkgKiBsZW5ndGgoZCk7XG4gIHZlYzMgdjMgPSB4ICsgeTtcblxuICBub3JtYWwgPSBub3JtYWxpemUodjMpO1xuXG4gIHJldHVybiB2Mztcbn1cblxuYXR0cmlidXRlIHZlYzQgdmVjdG9yO1xuYXR0cmlidXRlIHZlYzQgY29sb3IsIHBvc2l0aW9uO1xuYXR0cmlidXRlIHZlYzIgdXY7XG51bmlmb3JtIGZsb2F0IHR1YmVTY2FsZTtcblxudW5pZm9ybSBtYXQ0IG1vZGVsXG4gICAgICAgICAgICwgdmlld1xuICAgICAgICAgICAsIHByb2plY3Rpb247XG51bmlmb3JtIHZlYzMgZXllUG9zaXRpb25cbiAgICAgICAgICAgLCBsaWdodFBvc2l0aW9uO1xuXG52YXJ5aW5nIHZlYzMgZl9ub3JtYWxcbiAgICAgICAgICAgLCBmX2xpZ2h0RGlyZWN0aW9uXG4gICAgICAgICAgICwgZl9leWVEaXJlY3Rpb25cbiAgICAgICAgICAgLCBmX2RhdGE7XG52YXJ5aW5nIHZlYzQgZl9jb2xvcjtcbnZhcnlpbmcgdmVjMiBmX3V2O1xuXG52b2lkIG1haW4oKSB7XG4gIC8vIFNjYWxlIHRoZSB2ZWN0b3IgbWFnbml0dWRlIHRvIHN0YXkgY29uc3RhbnQgd2l0aFxuICAvLyBtb2RlbCAmIHZpZXcgY2hhbmdlcy5cbiAgdmVjMyBub3JtYWw7XG4gIHZlYzQgdHViZVBvc2l0aW9uID0gbW9kZWwgKiB2ZWM0KHBvc2l0aW9uLnh5eiwgMS4wKSArIHZlYzQoZ2V0VHViZVBvc2l0aW9uKG1hdDMobW9kZWwpICogKHR1YmVTY2FsZSAqIHZlY3Rvci53ICogbm9ybWFsaXplKHZlY3Rvci54eXopKSwgcG9zaXRpb24udywgbm9ybWFsKSwgMC4wKTtcbiAgbm9ybWFsID0gbm9ybWFsaXplKG5vcm1hbCAqIGludmVyc2UobWF0Myhtb2RlbCkpKTtcblxuICB2ZWM0IHRfcG9zaXRpb24gID0gdmlldyAqIHR1YmVQb3NpdGlvbjtcbiAgZ2xfUG9zaXRpb24gICAgICA9IHByb2plY3Rpb24gKiB0X3Bvc2l0aW9uO1xuICBmX2NvbG9yICAgICAgICAgID0gY29sb3I7XG4gIGZfbm9ybWFsICAgICAgICAgPSBub3JtYWw7XG4gIGZfZGF0YSAgICAgICAgICAgPSB0dWJlUG9zaXRpb24ueHl6O1xuICBmX2V5ZURpcmVjdGlvbiAgID0gZXllUG9zaXRpb24gICAtIHR1YmVQb3NpdGlvbi54eXo7XG4gIGZfbGlnaHREaXJlY3Rpb24gPSBsaWdodFBvc2l0aW9uIC0gdHViZVBvc2l0aW9uLnh5ejtcbiAgZl91diAgICAgICAgICAgICA9IHV2O1xufVxuIl0pLGE9bihbInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuZmxvYXQgYmVja21hbm5EaXN0cmlidXRpb24oZmxvYXQgeCwgZmxvYXQgcm91Z2huZXNzKSB7XG4gIGZsb2F0IE5kb3RIID0gbWF4KHgsIDAuMDAwMSk7XG4gIGZsb2F0IGNvczJBbHBoYSA9IE5kb3RIICogTmRvdEg7XG4gIGZsb2F0IHRhbjJBbHBoYSA9IChjb3MyQWxwaGEgLSAxLjApIC8gY29zMkFscGhhO1xuICBmbG9hdCByb3VnaG5lc3MyID0gcm91Z2huZXNzICogcm91Z2huZXNzO1xuICBmbG9hdCBkZW5vbSA9IDMuMTQxNTkyNjUzNTg5NzkzICogcm91Z2huZXNzMiAqIGNvczJBbHBoYSAqIGNvczJBbHBoYTtcbiAgcmV0dXJuIGV4cCh0YW4yQWxwaGEgLyByb3VnaG5lc3MyKSAvIGRlbm9tO1xufVxuXG5mbG9hdCBjb29rVG9ycmFuY2VTcGVjdWxhcihcbiAgdmVjMyBsaWdodERpcmVjdGlvbixcbiAgdmVjMyB2aWV3RGlyZWN0aW9uLFxuICB2ZWMzIHN1cmZhY2VOb3JtYWwsXG4gIGZsb2F0IHJvdWdobmVzcyxcbiAgZmxvYXQgZnJlc25lbCkge1xuXG4gIGZsb2F0IFZkb3ROID0gbWF4KGRvdCh2aWV3RGlyZWN0aW9uLCBzdXJmYWNlTm9ybWFsKSwgMC4wKTtcbiAgZmxvYXQgTGRvdE4gPSBtYXgoZG90KGxpZ2h0RGlyZWN0aW9uLCBzdXJmYWNlTm9ybWFsKSwgMC4wKTtcblxuICAvL0hhbGYgYW5nbGUgdmVjdG9yXG4gIHZlYzMgSCA9IG5vcm1hbGl6ZShsaWdodERpcmVjdGlvbiArIHZpZXdEaXJlY3Rpb24pO1xuXG4gIC8vR2VvbWV0cmljIHRlcm1cbiAgZmxvYXQgTmRvdEggPSBtYXgoZG90KHN1cmZhY2VOb3JtYWwsIEgpLCAwLjApO1xuICBmbG9hdCBWZG90SCA9IG1heChkb3Qodmlld0RpcmVjdGlvbiwgSCksIDAuMDAwMDAxKTtcbiAgZmxvYXQgTGRvdEggPSBtYXgoZG90KGxpZ2h0RGlyZWN0aW9uLCBIKSwgMC4wMDAwMDEpO1xuICBmbG9hdCBHMSA9ICgyLjAgKiBOZG90SCAqIFZkb3ROKSAvIFZkb3RIO1xuICBmbG9hdCBHMiA9ICgyLjAgKiBOZG90SCAqIExkb3ROKSAvIExkb3RIO1xuICBmbG9hdCBHID0gbWluKDEuMCwgbWluKEcxLCBHMikpO1xuICBcbiAgLy9EaXN0cmlidXRpb24gdGVybVxuICBmbG9hdCBEID0gYmVja21hbm5EaXN0cmlidXRpb24oTmRvdEgsIHJvdWdobmVzcyk7XG5cbiAgLy9GcmVzbmVsIHRlcm1cbiAgZmxvYXQgRiA9IHBvdygxLjAgLSBWZG90TiwgZnJlc25lbCk7XG5cbiAgLy9NdWx0aXBseSB0ZXJtcyBhbmQgZG9uZVxuICByZXR1cm4gIEcgKiBGICogRCAvIG1heCgzLjE0MTU5MjY1ICogVmRvdE4sIDAuMDAwMDAxKTtcbn1cblxudW5pZm9ybSB2ZWMzIGNsaXBCb3VuZHNbMl07XG51bmlmb3JtIGZsb2F0IHJvdWdobmVzc1xuICAgICAgICAgICAgLCBmcmVzbmVsXG4gICAgICAgICAgICAsIGthbWJpZW50XG4gICAgICAgICAgICAsIGtkaWZmdXNlXG4gICAgICAgICAgICAsIGtzcGVjdWxhclxuICAgICAgICAgICAgLCBvcGFjaXR5O1xudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcblxudmFyeWluZyB2ZWMzIGZfbm9ybWFsXG4gICAgICAgICAgICwgZl9saWdodERpcmVjdGlvblxuICAgICAgICAgICAsIGZfZXllRGlyZWN0aW9uXG4gICAgICAgICAgICwgZl9kYXRhO1xudmFyeWluZyB2ZWM0IGZfY29sb3I7XG52YXJ5aW5nIHZlYzIgZl91djtcblxudm9pZCBtYWluKCkge1xuICB2ZWMzIE4gPSBub3JtYWxpemUoZl9ub3JtYWwpO1xuICB2ZWMzIEwgPSBub3JtYWxpemUoZl9saWdodERpcmVjdGlvbik7XG4gIHZlYzMgViA9IG5vcm1hbGl6ZShmX2V5ZURpcmVjdGlvbik7XG4gIFxuICBpZighZ2xfRnJvbnRGYWNpbmcpIHtcbiAgICBOID0gLU47XG4gIH1cblxuICBmbG9hdCBzcGVjdWxhciA9IGNvb2tUb3JyYW5jZVNwZWN1bGFyKEwsIFYsIE4sIHJvdWdobmVzcywgZnJlc25lbCk7XG4gIGZsb2F0IGRpZmZ1c2UgID0gbWluKGthbWJpZW50ICsga2RpZmZ1c2UgKiBtYXgoZG90KE4sIEwpLCAwLjApLCAxLjApO1xuXG4gIHZlYzQgc3VyZmFjZUNvbG9yID0gIHRleHR1cmUyRCh0ZXh0dXJlLCBmX3V2KTtcbiAgdmVjNCBsaXRDb2xvciA9IHN1cmZhY2VDb2xvci5hICogdmVjNChkaWZmdXNlICogc3VyZmFjZUNvbG9yLnJnYiArIGtzcGVjdWxhciAqIHZlYzMoMSwxLDEpICogc3BlY3VsYXIsICAxLjApO1xuXG4gIGdsX0ZyYWdDb2xvciA9IGxpdENvbG9yICogb3BhY2l0eTtcbn0iXSksbz1uKFsicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG52ZWMzIGdldE9ydGhvZ29uYWxWZWN0b3IodmVjMyB2KSB7XG4gIC8vIFJldHVybiB1cC12ZWN0b3IgZm9yIG9ubHkteiB2ZWN0b3IuXG4gIC8vIFJldHVybiBheCArIGJ5ICsgY3ogPSAwLCBhIHBvaW50IHRoYXQgbGllcyBvbiB0aGUgcGxhbmUgdGhhdCBoYXMgdiBhcyBhIG5vcm1hbCBhbmQgdGhhdCBpc24ndCAoMCwwLDApLlxuICAvLyBGcm9tIHRoZSBhYm92ZSBpZi1zdGF0ZW1lbnQgd2UgaGF2ZSB8fGF8fCA+IDAgIFUgIHx8Ynx8ID4gMC5cbiAgLy8gQXNzaWduIHogPSAwLCB4ID0gLWIsIHkgPSBhOlxuICAvLyBhKi1iICsgYiphICsgYyowID0gLWJhICsgYmEgKyAwID0gMFxuICBpZiAodi54KnYueCA+IHYueip2LnogfHwgdi55KnYueSA+IHYueip2LnopIHtcbiAgICByZXR1cm4gbm9ybWFsaXplKHZlYzMoLXYueSwgdi54LCAwLjApKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbm9ybWFsaXplKHZlYzMoMC4wLCB2LnosIC12LnkpKTtcbiAgfVxufVxuXG4vLyBDYWxjdWxhdGUgdGhlIHR1YmUgdmVydGV4IGFuZCBub3JtYWwgYXQgdGhlIGdpdmVuIGluZGV4LlxuLy9cbi8vIFRoZSByZXR1cm5lZCB2ZXJ0ZXggaXMgZm9yIGEgdHViZSByaW5nIHdpdGggaXRzIGNlbnRlciBhdCBvcmlnaW4sIHJhZGl1cyBvZiBsZW5ndGgoZCksIHBvaW50aW5nIGluIHRoZSBkaXJlY3Rpb24gb2YgZC5cbi8vXG4vLyBFYWNoIHR1YmUgc2VnbWVudCBpcyBtYWRlIHVwIG9mIGEgcmluZyBvZiB2ZXJ0aWNlcy5cbi8vIFRoZXNlIHZlcnRpY2VzIGFyZSB1c2VkIHRvIG1ha2UgdXAgdGhlIHRyaWFuZ2xlcyBvZiB0aGUgdHViZSBieSBjb25uZWN0aW5nIHRoZW0gdG9nZXRoZXIgaW4gdGhlIHZlcnRleCBhcnJheS5cbi8vIFRoZSBpbmRleGVzIG9mIHR1YmUgc2VnbWVudHMgcnVuIGZyb20gMCB0byA4LlxuLy9cbnZlYzMgZ2V0VHViZVBvc2l0aW9uKHZlYzMgZCwgZmxvYXQgaW5kZXgsIG91dCB2ZWMzIG5vcm1hbCkge1xuICBmbG9hdCBzZWdtZW50Q291bnQgPSA4LjA7XG5cbiAgZmxvYXQgYW5nbGUgPSAyLjAgKiAzLjE0MTU5ICogKGluZGV4IC8gc2VnbWVudENvdW50KTtcblxuICB2ZWMzIHUgPSBnZXRPcnRob2dvbmFsVmVjdG9yKGQpO1xuICB2ZWMzIHYgPSBub3JtYWxpemUoY3Jvc3ModSwgZCkpO1xuXG4gIHZlYzMgeCA9IHUgKiBjb3MoYW5nbGUpICogbGVuZ3RoKGQpO1xuICB2ZWMzIHkgPSB2ICogc2luKGFuZ2xlKSAqIGxlbmd0aChkKTtcbiAgdmVjMyB2MyA9IHggKyB5O1xuXG4gIG5vcm1hbCA9IG5vcm1hbGl6ZSh2Myk7XG5cbiAgcmV0dXJuIHYzO1xufVxuXG5hdHRyaWJ1dGUgdmVjNCB2ZWN0b3I7XG5hdHRyaWJ1dGUgdmVjNCBwb3NpdGlvbjtcbmF0dHJpYnV0ZSB2ZWM0IGlkO1xuXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XG51bmlmb3JtIGZsb2F0IHR1YmVTY2FsZTtcblxudmFyeWluZyB2ZWMzIGZfcG9zaXRpb247XG52YXJ5aW5nIHZlYzQgZl9pZDtcblxudm9pZCBtYWluKCkge1xuICB2ZWMzIG5vcm1hbDtcbiAgdmVjNCB0dWJlUG9zaXRpb24gPSBtb2RlbCAqIHZlYzQocG9zaXRpb24ueHl6LCAxLjApICsgdmVjNChnZXRUdWJlUG9zaXRpb24obWF0Myhtb2RlbCkgKiAodHViZVNjYWxlICogdmVjdG9yLncgKiBub3JtYWxpemUodmVjdG9yLnh5eikpLCBwb3NpdGlvbi53LCBub3JtYWwpLCAwLjApO1xuICBnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb24gKiB2aWV3ICogdHViZVBvc2l0aW9uO1xuICBmX2lkICAgICAgICA9IGlkO1xuICBmX3Bvc2l0aW9uICA9IHBvc2l0aW9uLnh5ejtcbn1cbiJdKSxzPW4oWyJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnVuaWZvcm0gdmVjMyAgY2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gZmxvYXQgcGlja0lkO1xuXG52YXJ5aW5nIHZlYzMgZl9wb3NpdGlvbjtcbnZhcnlpbmcgdmVjNCBmX2lkO1xuXG52b2lkIG1haW4oKSB7XG4gIGdsX0ZyYWdDb2xvciA9IHZlYzQocGlja0lkLCBmX2lkLnh5eik7XG59Il0pO3IubWVzaFNoYWRlcj17dmVydGV4OmksZnJhZ21lbnQ6YSxhdHRyaWJ1dGVzOlt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzQifSx7bmFtZToibm9ybWFsIix0eXBlOiJ2ZWMzIn0se25hbWU6ImNvbG9yIix0eXBlOiJ2ZWM0In0se25hbWU6InV2Iix0eXBlOiJ2ZWMyIn0se25hbWU6InZlY3RvciIsdHlwZToidmVjNCJ9XX0sci5waWNrU2hhZGVyPXt2ZXJ0ZXg6byxmcmFnbWVudDpzLGF0dHJpYnV0ZXM6W3tuYW1lOiJwb3NpdGlvbiIsdHlwZToidmVjNCJ9LHtuYW1lOiJpZCIsdHlwZToidmVjNCJ9LHtuYW1lOiJ2ZWN0b3IiLHR5cGU6InZlYzQifV19fSx7Z2xzbGlmeTozNzd9XSwyOTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZ2wtc2hhZGVyIiksaT10KCJnbC1idWZmZXIiKSxhPXQoImdsLXZhbyIpLG89dCgiZ2wtdGV4dHVyZTJkIikscz10KCJub3JtYWxzIiksbD10KCJnbC1tYXQ0L211bHRpcGx5IiksYz10KCJnbC1tYXQ0L2ludmVydCIpLHU9dCgibmRhcnJheSIpLGg9dCgiY29sb3JtYXAiKSxmPXQoInNpbXBsaWNpYWwtY29tcGxleC1jb250b3VyIikscD10KCJ0eXBlZGFycmF5LXBvb2wiKSxkPXQoIi4vc2hhZGVycyIpLGc9KHQoIi4vY2xvc2VzdC1wb2ludCIpLGQubWVzaFNoYWRlciksbT1kLnBpY2tTaGFkZXIsdj1bMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV07ZnVuY3Rpb24geSh0LGUscixuLGksYSxvLHMsbCxjLHUsaCxmLHAsZCxnLG0seSx4LGIsXyx3LGssTSxBLFQsUyxFKXt0aGlzLmdsPXQsdGhpcy5jZWxscz1bXSx0aGlzLnBvc2l0aW9ucz1bXSx0aGlzLmludGVuc2l0eT1bXSx0aGlzLnRleHR1cmU9ZSx0aGlzLmRpcnR5PSEwLHRoaXMudHJpU2hhZGVyPXIsdGhpcy5saW5lU2hhZGVyPW4sdGhpcy5wb2ludFNoYWRlcj1pLHRoaXMucGlja1NoYWRlcj1hLHRoaXMucG9pbnRQaWNrU2hhZGVyPW8sdGhpcy5jb250b3VyU2hhZGVyPXMsdGhpcy50cmlhbmdsZVBvc2l0aW9ucz1sLHRoaXMudHJpYW5nbGVWZWN0b3JzPWMsdGhpcy50cmlhbmdsZUNvbG9ycz1oLHRoaXMudHJpYW5nbGVOb3JtYWxzPXAsdGhpcy50cmlhbmdsZVVWcz1mLHRoaXMudHJpYW5nbGVJZHM9dSx0aGlzLnRyaWFuZ2xlVkFPPWQsdGhpcy50cmlhbmdsZUNvdW50PTAsdGhpcy5saW5lV2lkdGg9MSx0aGlzLmVkZ2VQb3NpdGlvbnM9Zyx0aGlzLmVkZ2VDb2xvcnM9eSx0aGlzLmVkZ2VVVnM9eCx0aGlzLmVkZ2VJZHM9bSx0aGlzLmVkZ2VWQU89Yix0aGlzLmVkZ2VDb3VudD0wLHRoaXMucG9pbnRQb3NpdGlvbnM9Xyx0aGlzLnBvaW50Q29sb3JzPWssdGhpcy5wb2ludFVWcz1NLHRoaXMucG9pbnRTaXplcz1BLHRoaXMucG9pbnRJZHM9dyx0aGlzLnBvaW50VkFPPVQsdGhpcy5wb2ludENvdW50PTAsdGhpcy5jb250b3VyTGluZVdpZHRoPTEsdGhpcy5jb250b3VyUG9zaXRpb25zPVMsdGhpcy5jb250b3VyVkFPPUUsdGhpcy5jb250b3VyQ291bnQ9MCx0aGlzLmNvbnRvdXJDb2xvcj1bMCwwLDBdLHRoaXMuY29udG91ckVuYWJsZT0hMSx0aGlzLnBpY2tJZD0xLHRoaXMuYm91bmRzPVtbMS8wLDEvMCwxLzBdLFstMS8wLC0xLzAsLTEvMF1dLHRoaXMuY2xpcEJvdW5kcz1bWy0xLzAsLTEvMCwtMS8wXSxbMS8wLDEvMCwxLzBdXSx0aGlzLmxpZ2h0UG9zaXRpb249WzFlNSwxZTUsMF0sdGhpcy5hbWJpZW50TGlnaHQ9LjgsdGhpcy5kaWZmdXNlTGlnaHQ9LjgsdGhpcy5zcGVjdWxhckxpZ2h0PTIsdGhpcy5yb3VnaG5lc3M9LjUsdGhpcy5mcmVzbmVsPTEuNSx0aGlzLm9wYWNpdHk9MSx0aGlzLnR1YmVTY2FsZT0xLHRoaXMuX21vZGVsPXYsdGhpcy5fdmlldz12LHRoaXMuX3Byb2plY3Rpb249dix0aGlzLl9yZXNvbHV0aW9uPVsxLDFdfXZhciB4PXkucHJvdG90eXBlO2Z1bmN0aW9uIGIodCl7dmFyIGU9bih0LG0udmVydGV4LG0uZnJhZ21lbnQsbnVsbCxtLmF0dHJpYnV0ZXMpO3JldHVybiBlLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCxlLmF0dHJpYnV0ZXMuaWQubG9jYXRpb249MSxlLmF0dHJpYnV0ZXMudmVjdG9yLmxvY2F0aW9uPTUsZX14LmlzT3BhcXVlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3BhY2l0eT49MX0seC5pc1RyYW5zcGFyZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3BhY2l0eTwxfSx4LnBpY2tTbG90cz0xLHguc2V0UGlja0Jhc2U9ZnVuY3Rpb24odCl7dGhpcy5waWNrSWQ9dH0seC5oaWdobGlnaHQ9ZnVuY3Rpb24odCl7aWYodCYmdGhpcy5jb250b3VyRW5hYmxlKXtmb3IodmFyIGU9Zih0aGlzLmNlbGxzLHRoaXMuaW50ZW5zaXR5LHQuaW50ZW5zaXR5KSxyPWUuY2VsbHMsbj1lLnZlcnRleElkcyxpPWUudmVydGV4V2VpZ2h0cyxhPXIubGVuZ3RoLG89cC5tYWxsb2NGbG9hdDMyKDYqYSkscz0wLGw9MDtsPGE7KytsKWZvcih2YXIgYz1yW2xdLHU9MDt1PDI7Kyt1KXt2YXIgaD1jWzBdOzI9PT1jLmxlbmd0aCYmKGg9Y1t1XSk7Zm9yKHZhciBkPW5baF1bMF0sZz1uW2hdWzFdLG09aVtoXSx2PTEtbSx5PXRoaXMucG9zaXRpb25zW2RdLHg9dGhpcy5wb3NpdGlvbnNbZ10sYj0wO2I8MzsrK2Ipb1tzKytdPW0qeVtiXSt2KnhbYl19dGhpcy5jb250b3VyQ291bnQ9cy8zfDAsdGhpcy5jb250b3VyUG9zaXRpb25zLnVwZGF0ZShvLnN1YmFycmF5KDAscykpLHAuZnJlZShvKX1lbHNlIHRoaXMuY29udG91ckNvdW50PTB9LHgudXBkYXRlPWZ1bmN0aW9uKHQpe3Q9dHx8e307dmFyIGU9dGhpcy5nbDt0aGlzLmRpcnR5PSEwLCJjb250b3VyRW5hYmxlImluIHQmJih0aGlzLmNvbnRvdXJFbmFibGU9dC5jb250b3VyRW5hYmxlKSwiY29udG91ckNvbG9yImluIHQmJih0aGlzLmNvbnRvdXJDb2xvcj10LmNvbnRvdXJDb2xvciksImxpbmVXaWR0aCJpbiB0JiYodGhpcy5saW5lV2lkdGg9dC5saW5lV2lkdGgpLCJsaWdodFBvc2l0aW9uImluIHQmJih0aGlzLmxpZ2h0UG9zaXRpb249dC5saWdodFBvc2l0aW9uKSwib3BhY2l0eSJpbiB0JiYodGhpcy5vcGFjaXR5PXQub3BhY2l0eSksImFtYmllbnQiaW4gdCYmKHRoaXMuYW1iaWVudExpZ2h0PXQuYW1iaWVudCksImRpZmZ1c2UiaW4gdCYmKHRoaXMuZGlmZnVzZUxpZ2h0PXQuZGlmZnVzZSksInNwZWN1bGFyImluIHQmJih0aGlzLnNwZWN1bGFyTGlnaHQ9dC5zcGVjdWxhciksInJvdWdobmVzcyJpbiB0JiYodGhpcy5yb3VnaG5lc3M9dC5yb3VnaG5lc3MpLCJmcmVzbmVsImluIHQmJih0aGlzLmZyZXNuZWw9dC5mcmVzbmVsKSx0LnRleHR1cmU/KHRoaXMudGV4dHVyZS5kaXNwb3NlKCksdGhpcy50ZXh0dXJlPW8oZSx0LnRleHR1cmUpKTp0LmNvbG9ybWFwJiYodGhpcy50ZXh0dXJlLnNoYXBlPVsyNTYsMjU2XSx0aGlzLnRleHR1cmUubWluRmlsdGVyPWUuTElORUFSX01JUE1BUF9MSU5FQVIsdGhpcy50ZXh0dXJlLm1hZ0ZpbHRlcj1lLkxJTkVBUix0aGlzLnRleHR1cmUuc2V0UGl4ZWxzKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1oKHtjb2xvcm1hcDp0LG5zaGFkZXM6MjU2LGZvcm1hdDoicmdiYSJ9KSxyPW5ldyBVaW50OEFycmF5KDEwMjQpLG49MDtuPDI1NjsrK24pe2Zvcih2YXIgaT1lW25dLGE9MDthPDM7KythKXJbNCpuK2FdPWlbYV07cls0Km4rM109MjU1KmlbM119cmV0dXJuIHUocixbMjU2LDI1Niw0XSxbNCwwLDFdKX0odC5jb2xvcm1hcCkpLHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcCgpKTt2YXIgcj10LmNlbGxzLG49dC5wb3NpdGlvbnMsaT10LnZlY3RvcnM7aWYobiYmciYmaSl7dm9pZCAwIT09dC50dWJlU2NhbGUmJih0aGlzLnR1YmVTY2FsZT10LnR1YmVTY2FsZSk7dmFyIGE9W10sbD1bXSxjPVtdLGY9W10scD1bXSxkPVtdLGc9W10sbT1bXSx2PVtdLHk9W10seD1bXSxiPVtdLF89W10sdz1bXSxrPVtdO3RoaXMuY2VsbHM9cix0aGlzLnBvc2l0aW9ucz1uLHRoaXMudmVjdG9ycz1pO3ZhciBNPXQudmVydGV4Tm9ybWFscyxBPXQuY2VsbE5vcm1hbHMsVD12b2lkIDA9PT10LnZlcnRleE5vcm1hbHNFcHNpbG9uPzFlLTY6dC52ZXJ0ZXhOb3JtYWxzRXBzaWxvbixTPXZvaWQgMD09PXQuZmFjZU5vcm1hbHNFcHNpbG9uPzFlLTY6dC5mYWNlTm9ybWFsc0Vwc2lsb247dC51c2VGYWNldE5vcm1hbHMmJiFBJiYoQT1zLmZhY2VOb3JtYWxzKHIsbixTKSksQXx8TXx8KE09cy52ZXJ0ZXhOb3JtYWxzKHIsbixUKSk7dmFyIEU9dC52ZXJ0ZXhDb2xvcnMsQz10LmNlbGxDb2xvcnMsTD10Lm1lc2hDb2xvcnx8WzEsMSwxLDFdLHo9dC52ZXJ0ZXhVVnMsUD10LnZlcnRleEludGVuc2l0eSxJPXQuY2VsbFVWcyxPPXQuY2VsbEludGVuc2l0eSxEPTEvMCxSPS0xLzA7aWYoIXomJiFJKWlmKFApaWYodC52ZXJ0ZXhJbnRlbnNpdHlCb3VuZHMpRD0rdC52ZXJ0ZXhJbnRlbnNpdHlCb3VuZHNbMF0sUj0rdC52ZXJ0ZXhJbnRlbnNpdHlCb3VuZHNbMV07ZWxzZSBmb3IodmFyIEI9MDtCPFAubGVuZ3RoOysrQil7dmFyIEY9UFtCXTtEPU1hdGgubWluKEQsRiksUj1NYXRoLm1heChSLEYpfWVsc2UgaWYoTylmb3IoQj0wO0I8Ty5sZW5ndGg7KytCKXtGPU9bQl07RD1NYXRoLm1pbihELEYpLFI9TWF0aC5tYXgoUixGKX1lbHNlIGZvcihCPTA7QjxuLmxlbmd0aDsrK0Ipe0Y9bltCXVsyXTtEPU1hdGgubWluKEQsRiksUj1NYXRoLm1heChSLEYpfXRoaXMuaW50ZW5zaXR5PVB8fChPP2Z1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49bmV3IEFycmF5KGUpLGk9MDtpPGU7KytpKW5baV09MDt2YXIgYT10Lmxlbmd0aDtmb3IoaT0wO2k8YTsrK2kpZm9yKHZhciBvPXRbaV0scz0wO3M8by5sZW5ndGg7KytzKW5bb1tzXV09cltpXTtyZXR1cm4gbn0ocixuLmxlbmd0aCxPKTpmdW5jdGlvbih0KXtmb3IodmFyIGU9dC5sZW5ndGgscj1uZXcgQXJyYXkoZSksbj0wO248ZTsrK24pcltuXT10W25dWzJdO3JldHVybiByfShuKSk7dmFyIE49dC5wb2ludFNpemVzLGo9dC5wb2ludFNpemV8fDE7dGhpcy5ib3VuZHM9W1sxLzAsMS8wLDEvMF0sWy0xLzAsLTEvMCwtMS8wXV07Zm9yKEI9MDtCPG4ubGVuZ3RoOysrQilmb3IodmFyIFY9bltCXSxVPTA7VTwzOysrVSkhaXNOYU4oVltVXSkmJmlzRmluaXRlKFZbVV0pJiYodGhpcy5ib3VuZHNbMF1bVV09TWF0aC5taW4odGhpcy5ib3VuZHNbMF1bVV0sVltVXSksdGhpcy5ib3VuZHNbMV1bVV09TWF0aC5tYXgodGhpcy5ib3VuZHNbMV1bVV0sVltVXSkpO3ZhciBxPTAsSD0wLEc9MDt0OmZvcihCPTA7QjxyLmxlbmd0aDsrK0Ipe3ZhciBXPXJbQl07c3dpdGNoKFcubGVuZ3RoKXtjYXNlIDE6Zm9yKFY9bltYPVdbMF1dLFU9MDtVPDM7KytVKWlmKGlzTmFOKFZbVV0pfHwhaXNGaW5pdGUoVltVXSkpY29udGludWUgdDt4LnB1c2goVlswXSxWWzFdLFZbMl0sVlszXSksMz09PShaPUU/RVtYXTpDP0NbQl06TCkubGVuZ3RoP2IucHVzaChaWzBdLFpbMV0sWlsyXSwxKTpiLnB1c2goWlswXSxaWzFdLFpbMl0sWlszXSksJD16P3pbWF06UD9bKFBbWF0tRCkvKFItRCksMF06ST9JW0JdOk8/WyhPW0JdLUQpLyhSLUQpLDBdOlsoVlsyXS1EKS8oUi1EKSwwXSxfLnB1c2goJFswXSwkWzFdKSxOP3cucHVzaChOW1hdKTp3LnB1c2goaiksay5wdXNoKEIpLEcrPTE7YnJlYWs7Y2FzZSAyOmZvcihVPTA7VTwyOysrVSl7Vj1uW1g9V1tVXV07Zm9yKHZhciBZPTA7WTwzOysrWSlpZihpc05hTihWW1ldKXx8IWlzRmluaXRlKFZbWV0pKWNvbnRpbnVlIHR9Zm9yKFU9MDtVPDI7KytVKXtWPW5bWD1XW1VdXTtnLnB1c2goVlswXSxWWzFdLFZbMl0pLDM9PT0oWj1FP0VbWF06Qz9DW0JdOkwpLmxlbmd0aD9tLnB1c2goWlswXSxaWzFdLFpbMl0sMSk6bS5wdXNoKFpbMF0sWlsxXSxaWzJdLFpbM10pLCQ9ej96W1hdOlA/WyhQW1hdLUQpLyhSLUQpLDBdOkk/SVtCXTpPP1soT1tCXS1EKS8oUi1EKSwwXTpbKFZbMl0tRCkvKFItRCksMF0sdi5wdXNoKCRbMF0sJFsxXSkseS5wdXNoKEIpfUgrPTE7YnJlYWs7Y2FzZSAzOmZvcihVPTA7VTwzOysrVSlmb3IoVj1uW1g9V1tVXV0sWT0wO1k8MzsrK1kpaWYoaXNOYU4oVltZXSl8fCFpc0Zpbml0ZShWW1ldKSljb250aW51ZSB0O2ZvcihVPTA7VTwzOysrVSl7dmFyIFg7Vj1uW1g9V1tVXV07YS5wdXNoKFZbMF0sVlsxXSxWWzJdLFZbM10pO3ZhciBaLCQsSixLPWlbWF07bC5wdXNoKEtbMF0sS1sxXSxLWzJdLEtbM10pLDM9PT0oWj1FP0VbWF06Qz9DW0JdOkwpLmxlbmd0aD9jLnB1c2goWlswXSxaWzFdLFpbMl0sMSk6Yy5wdXNoKFpbMF0sWlsxXSxaWzJdLFpbM10pLCQ9ej96W1hdOlA/WyhQW1hdLUQpLyhSLUQpLDBdOkk/SVtCXTpPP1soT1tCXS1EKS8oUi1EKSwwXTpbKFZbMl0tRCkvKFItRCksMF0scC5wdXNoKCRbMF0sJFsxXSksSj1NP01bWF06QVtCXSxmLnB1c2goSlswXSxKWzFdLEpbMl0pLGQucHVzaChCKX1xKz0xfX10aGlzLnBvaW50Q291bnQ9Ryx0aGlzLmVkZ2VDb3VudD1ILHRoaXMudHJpYW5nbGVDb3VudD1xLHRoaXMucG9pbnRQb3NpdGlvbnMudXBkYXRlKHgpLHRoaXMucG9pbnRDb2xvcnMudXBkYXRlKGIpLHRoaXMucG9pbnRVVnMudXBkYXRlKF8pLHRoaXMucG9pbnRTaXplcy51cGRhdGUodyksdGhpcy5wb2ludElkcy51cGRhdGUobmV3IFVpbnQzMkFycmF5KGspKSx0aGlzLmVkZ2VQb3NpdGlvbnMudXBkYXRlKGcpLHRoaXMuZWRnZUNvbG9ycy51cGRhdGUobSksdGhpcy5lZGdlVVZzLnVwZGF0ZSh2KSx0aGlzLmVkZ2VJZHMudXBkYXRlKG5ldyBVaW50MzJBcnJheSh5KSksdGhpcy50cmlhbmdsZVBvc2l0aW9ucy51cGRhdGUoYSksdGhpcy50cmlhbmdsZVZlY3RvcnMudXBkYXRlKGwpLHRoaXMudHJpYW5nbGVDb2xvcnMudXBkYXRlKGMpLHRoaXMudHJpYW5nbGVVVnMudXBkYXRlKHApLHRoaXMudHJpYW5nbGVOb3JtYWxzLnVwZGF0ZShmKSx0aGlzLnRyaWFuZ2xlSWRzLnVwZGF0ZShuZXcgVWludDMyQXJyYXkoZCkpfX0seC5kcmF3VHJhbnNwYXJlbnQ9eC5kcmF3PWZ1bmN0aW9uKHQpe3Q9dHx8e307Zm9yKHZhciBlPXRoaXMuZ2wscj10Lm1vZGVsfHx2LG49dC52aWV3fHx2LGk9dC5wcm9qZWN0aW9ufHx2LGE9W1stMWU2LC0xZTYsLTFlNl0sWzFlNiwxZTYsMWU2XV0sbz0wO288MzsrK28pYVswXVtvXT1NYXRoLm1heChhWzBdW29dLHRoaXMuY2xpcEJvdW5kc1swXVtvXSksYVsxXVtvXT1NYXRoLm1pbihhWzFdW29dLHRoaXMuY2xpcEJvdW5kc1sxXVtvXSk7dmFyIHM9e21vZGVsOnIsdmlldzpuLHByb2plY3Rpb246aSxjbGlwQm91bmRzOmEsa2FtYmllbnQ6dGhpcy5hbWJpZW50TGlnaHQsa2RpZmZ1c2U6dGhpcy5kaWZmdXNlTGlnaHQsa3NwZWN1bGFyOnRoaXMuc3BlY3VsYXJMaWdodCxyb3VnaG5lc3M6dGhpcy5yb3VnaG5lc3MsZnJlc25lbDp0aGlzLmZyZXNuZWwsZXllUG9zaXRpb246WzAsMCwwXSxsaWdodFBvc2l0aW9uOlswLDAsMF0sb3BhY2l0eTp0aGlzLm9wYWNpdHksdHViZVNjYWxlOnRoaXMudHViZVNjYWxlLGNvbnRvdXJDb2xvcjp0aGlzLmNvbnRvdXJDb2xvcix0ZXh0dXJlOjB9O3RoaXMudGV4dHVyZS5iaW5kKDApO3ZhciB1PW5ldyBBcnJheSgxNik7bCh1LHMudmlldyxzLm1vZGVsKSxsKHUscy5wcm9qZWN0aW9uLHUpLGModSx1KTtmb3Iobz0wO288MzsrK28pcy5leWVQb3NpdGlvbltvXT11WzEyK29dL3VbMTVdO3ZhciBoLGY9dVsxNV07Zm9yKG89MDtvPDM7KytvKWYrPXRoaXMubGlnaHRQb3NpdGlvbltvXSp1WzQqbyszXTtmb3Iobz0wO288MzsrK28pe2Zvcih2YXIgcD11WzEyK29dLGQ9MDtkPDM7KytkKXArPXVbNCpkK29dKnRoaXMubGlnaHRQb3NpdGlvbltkXTtzLmxpZ2h0UG9zaXRpb25bb109cC9mfXRoaXMudHJpYW5nbGVDb3VudD4wJiYoKGg9dGhpcy50cmlTaGFkZXIpLmJpbmQoKSxoLnVuaWZvcm1zPXMsdGhpcy50cmlhbmdsZVZBTy5iaW5kKCksZS5kcmF3QXJyYXlzKGUuVFJJQU5HTEVTLDAsMyp0aGlzLnRyaWFuZ2xlQ291bnQpLHRoaXMudHJpYW5nbGVWQU8udW5iaW5kKCkpO3RoaXMuZWRnZUNvdW50PjAmJnRoaXMubGluZVdpZHRoPjAmJigoaD10aGlzLmxpbmVTaGFkZXIpLmJpbmQoKSxoLnVuaWZvcm1zPXMsdGhpcy5lZGdlVkFPLmJpbmQoKSxlLmxpbmVXaWR0aCh0aGlzLmxpbmVXaWR0aCksZS5kcmF3QXJyYXlzKGUuTElORVMsMCwyKnRoaXMuZWRnZUNvdW50KSx0aGlzLmVkZ2VWQU8udW5iaW5kKCkpO3RoaXMucG9pbnRDb3VudD4wJiYoKGg9dGhpcy5wb2ludFNoYWRlcikuYmluZCgpLGgudW5pZm9ybXM9cyx0aGlzLnBvaW50VkFPLmJpbmQoKSxlLmRyYXdBcnJheXMoZS5QT0lOVFMsMCx0aGlzLnBvaW50Q291bnQpLHRoaXMucG9pbnRWQU8udW5iaW5kKCkpO3RoaXMuY29udG91ckVuYWJsZSYmdGhpcy5jb250b3VyQ291bnQ+MCYmdGhpcy5jb250b3VyTGluZVdpZHRoPjAmJigoaD10aGlzLmNvbnRvdXJTaGFkZXIpLmJpbmQoKSxoLnVuaWZvcm1zPXMsdGhpcy5jb250b3VyVkFPLmJpbmQoKSxlLmRyYXdBcnJheXMoZS5MSU5FUywwLHRoaXMuY29udG91ckNvdW50KSx0aGlzLmNvbnRvdXJWQU8udW5iaW5kKCkpfSx4LmRyYXdQaWNrPWZ1bmN0aW9uKHQpe3Q9dHx8e307Zm9yKHZhciBlPXRoaXMuZ2wscj10Lm1vZGVsfHx2LG49dC52aWV3fHx2LGk9dC5wcm9qZWN0aW9ufHx2LGE9W1stMWU2LC0xZTYsLTFlNl0sWzFlNiwxZTYsMWU2XV0sbz0wO288MzsrK28pYVswXVtvXT1NYXRoLm1heChhWzBdW29dLHRoaXMuY2xpcEJvdW5kc1swXVtvXSksYVsxXVtvXT1NYXRoLm1pbihhWzFdW29dLHRoaXMuY2xpcEJvdW5kc1sxXVtvXSk7dGhpcy5fbW9kZWw9W10uc2xpY2UuY2FsbChyKSx0aGlzLl92aWV3PVtdLnNsaWNlLmNhbGwobiksdGhpcy5fcHJvamVjdGlvbj1bXS5zbGljZS5jYWxsKGkpLHRoaXMuX3Jlc29sdXRpb249W2UuZHJhd2luZ0J1ZmZlcldpZHRoLGUuZHJhd2luZ0J1ZmZlckhlaWdodF07dmFyIHMsbD17bW9kZWw6cix2aWV3Om4scHJvamVjdGlvbjppLGNsaXBCb3VuZHM6YSx0dWJlU2NhbGU6dGhpcy50dWJlU2NhbGUscGlja0lkOnRoaXMucGlja0lkLzI1NX07KChzPXRoaXMucGlja1NoYWRlcikuYmluZCgpLHMudW5pZm9ybXM9bCx0aGlzLnRyaWFuZ2xlQ291bnQ+MCYmKHRoaXMudHJpYW5nbGVWQU8uYmluZCgpLGUuZHJhd0FycmF5cyhlLlRSSUFOR0xFUywwLDMqdGhpcy50cmlhbmdsZUNvdW50KSx0aGlzLnRyaWFuZ2xlVkFPLnVuYmluZCgpKSx0aGlzLmVkZ2VDb3VudD4wJiYodGhpcy5lZGdlVkFPLmJpbmQoKSxlLmxpbmVXaWR0aCh0aGlzLmxpbmVXaWR0aCksZS5kcmF3QXJyYXlzKGUuTElORVMsMCwyKnRoaXMuZWRnZUNvdW50KSx0aGlzLmVkZ2VWQU8udW5iaW5kKCkpLHRoaXMucG9pbnRDb3VudD4wKSYmKChzPXRoaXMucG9pbnRQaWNrU2hhZGVyKS5iaW5kKCkscy51bmlmb3Jtcz1sLHRoaXMucG9pbnRWQU8uYmluZCgpLGUuZHJhd0FycmF5cyhlLlBPSU5UUywwLHRoaXMucG9pbnRDb3VudCksdGhpcy5wb2ludFZBTy51bmJpbmQoKSl9LHgucGljaz1mdW5jdGlvbih0KXtpZighdClyZXR1cm4gbnVsbDtpZih0LmlkIT09dGhpcy5waWNrSWQpcmV0dXJuIG51bGw7dmFyIGU9dC52YWx1ZVswXSsyNTYqdC52YWx1ZVsxXSs2NTUzNip0LnZhbHVlWzJdLHI9dGhpcy5jZWxsc1tlXSxuPXRoaXMucG9zaXRpb25zW3JbMV1dLnNsaWNlKDAsMyk7cmV0dXJue2luZGV4OmUscG9zaXRpb246bixpbnRlbnNpdHk6dGhpcy5pbnRlbnNpdHlbclsxXV0sdmVsb2NpdHk6dGhpcy52ZWN0b3JzW3JbMV1dLnNsaWNlKDAsMyksZGl2ZXJnZW5jZTp0aGlzLnZlY3RvcnNbclsxXV1bM10sZGF0YUNvb3JkaW5hdGU6bn19LHguZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMudGV4dHVyZS5kaXNwb3NlKCksdGhpcy50cmlTaGFkZXIuZGlzcG9zZSgpLHRoaXMucGlja1NoYWRlci5kaXNwb3NlKCksdGhpcy50cmlhbmdsZVZBTy5kaXNwb3NlKCksdGhpcy50cmlhbmdsZVBvc2l0aW9ucy5kaXNwb3NlKCksdGhpcy50cmlhbmdsZVZlY3RvcnMuZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVDb2xvcnMuZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVVVnMuZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVOb3JtYWxzLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlSWRzLmRpc3Bvc2UoKSx0aGlzLmVkZ2VWQU8uZGlzcG9zZSgpLHRoaXMuZWRnZVBvc2l0aW9ucy5kaXNwb3NlKCksdGhpcy5lZGdlQ29sb3JzLmRpc3Bvc2UoKSx0aGlzLmVkZ2VVVnMuZGlzcG9zZSgpLHRoaXMuZWRnZUlkcy5kaXNwb3NlKCksdGhpcy5wb2ludFZBTy5kaXNwb3NlKCksdGhpcy5wb2ludFBvc2l0aW9ucy5kaXNwb3NlKCksdGhpcy5wb2ludENvbG9ycy5kaXNwb3NlKCksdGhpcy5wb2ludFVWcy5kaXNwb3NlKCksdGhpcy5wb2ludFNpemVzLmRpc3Bvc2UoKSx0aGlzLnBvaW50SWRzLmRpc3Bvc2UoKSx0aGlzLmNvbnRvdXJWQU8uZGlzcG9zZSgpLHRoaXMuY29udG91clBvc2l0aW9ucy5kaXNwb3NlKCl9LGUuZXhwb3J0cz1mdW5jdGlvbih0LGUpezE9PT1hcmd1bWVudHMubGVuZ3RoJiYodD0oZT10KS5nbCk7dmFyIHI9ZS50cmlTaGFkZXJ8fGZ1bmN0aW9uKHQpe3ZhciBlPW4odCxnLnZlcnRleCxnLmZyYWdtZW50LG51bGwsZy5hdHRyaWJ1dGVzKTtyZXR1cm4gZS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmxvY2F0aW9uPTAsZS5hdHRyaWJ1dGVzLmNvbG9yLmxvY2F0aW9uPTIsZS5hdHRyaWJ1dGVzLnV2LmxvY2F0aW9uPTMsZS5hdHRyaWJ1dGVzLnZlY3Rvci5sb2NhdGlvbj01LGV9KHQpLHM9Yih0KSxsPW8odCx1KG5ldyBVaW50OEFycmF5KFsyNTUsMjU1LDI1NSwyNTVdKSxbMSwxLDRdKSk7bC5nZW5lcmF0ZU1pcG1hcCgpLGwubWluRmlsdGVyPXQuTElORUFSX01JUE1BUF9MSU5FQVIsbC5tYWdGaWx0ZXI9dC5MSU5FQVI7dmFyIGM9aSh0KSxoPWkodCksZj1pKHQpLHA9aSh0KSxkPWkodCksbT1pKHQpLHY9YSh0LFt7YnVmZmVyOmMsdHlwZTp0LkZMT0FULHNpemU6NH0se2J1ZmZlcjptLHR5cGU6dC5VTlNJR05FRF9CWVRFLHNpemU6NCxub3JtYWxpemVkOiEwfSx7YnVmZmVyOmYsdHlwZTp0LkZMT0FULHNpemU6NH0se2J1ZmZlcjpwLHR5cGU6dC5GTE9BVCxzaXplOjJ9LHtidWZmZXI6ZCx0eXBlOnQuRkxPQVQsc2l6ZTozfSx7YnVmZmVyOmgsdHlwZTp0LkZMT0FULHNpemU6NH1dKSx4PWkodCksXz1pKHQpLHc9aSh0KSxrPWkodCksTT1hKHQsW3tidWZmZXI6eCx0eXBlOnQuRkxPQVQsc2l6ZTozfSx7YnVmZmVyOmssdHlwZTp0LlVOU0lHTkVEX0JZVEUsc2l6ZTo0LG5vcm1hbGl6ZWQ6ITB9LHtidWZmZXI6Xyx0eXBlOnQuRkxPQVQsc2l6ZTo0fSx7YnVmZmVyOncsdHlwZTp0LkZMT0FULHNpemU6Mn1dKSxBPWkodCksVD1pKHQpLFM9aSh0KSxFPWkodCksQz1pKHQpLEw9YSh0LFt7YnVmZmVyOkEsdHlwZTp0LkZMT0FULHNpemU6M30se2J1ZmZlcjpDLHR5cGU6dC5VTlNJR05FRF9CWVRFLHNpemU6NCxub3JtYWxpemVkOiEwfSx7YnVmZmVyOlQsdHlwZTp0LkZMT0FULHNpemU6NH0se2J1ZmZlcjpTLHR5cGU6dC5GTE9BVCxzaXplOjJ9LHtidWZmZXI6RSx0eXBlOnQuRkxPQVQsc2l6ZToxfV0pLHo9aSh0KSxQPW5ldyB5KHQsbCxyLG51bGwsbnVsbCxzLG51bGwsbnVsbCxjLGgsbSxmLHAsZCx2LHgsayxfLHcsTSxBLEMsVCxTLEUsTCx6LGEodCxbe2J1ZmZlcjp6LHR5cGU6dC5GTE9BVCxzaXplOjN9XSkpO3JldHVybiBQLnVwZGF0ZShlKSxQfX0seyIuL2Nsb3Nlc3QtcG9pbnQiOjI5NywiLi9zaGFkZXJzIjoyOTgsY29sb3JtYXA6MTEzLCJnbC1idWZmZXIiOjIzMCwiZ2wtbWF0NC9pbnZlcnQiOjI1NCwiZ2wtbWF0NC9tdWx0aXBseSI6MjU2LCJnbC1zaGFkZXIiOjI4NywiZ2wtdGV4dHVyZTJkIjozMDMsImdsLXZhbyI6MzA4LG5kYXJyYXk6NDE3LG5vcm1hbHM6NDIwLCJzaW1wbGljaWFsLWNvbXBsZXgtY29udG91ciI6NDc5LCJ0eXBlZGFycmF5LXBvb2wiOjUwN31dLDMwMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJnbC12ZWMzIiksaT10KCJnbC12ZWM0IiksYT1mdW5jdGlvbih0LGUscixhKXtmb3IodmFyIG89MCxzPTA7czx0Lmxlbmd0aDtzKyspZm9yKHZhciBsPXRbc10udmVsb2NpdGllcyxjPTA7YzxsLmxlbmd0aDtjKyspe3ZhciB1PW4ubGVuZ3RoKGxbY10pO3U+byYmKG89dSl9dmFyIGg9dC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvLHMsbCxjPXQucG9pbnRzLHU9dC52ZWxvY2l0aWVzLGg9dC5kaXZlcmdlbmNlcztuLnNldChuLmNyZWF0ZSgpLDAsMSwwKSxuLmNyZWF0ZSgpLG4uY3JlYXRlKCk7bi5jcmVhdGUoKTtmb3IodmFyIGY9W10scD1bXSxkPVtdLGc9W10sbT1bXSx2PVtdLHk9MCx4PTAsYj1pLmNyZWF0ZSgpLF89aS5jcmVhdGUoKSx3PTA7dzxjLmxlbmd0aDt3Kyspe289Y1t3XSxzPXVbd10sbD1oW3ddLDA9PT1lJiYobD0uMDUqcikseD1uLmxlbmd0aChzKS9hLGI9aS5jcmVhdGUoKSxuLmNvcHkoYixzKSxiWzNdPWw7Zm9yKHZhciBrPTA7azw4O2srKyltW2tdPVtvWzBdLG9bMV0sb1syXSxrXTtpZihnLmxlbmd0aD4wKWZvcihrPTA7azw4O2srKyl7dmFyIE09KGsrMSklODtmLnB1c2goZ1trXSxtW2tdLG1bTV0sbVtNXSxnW01dLGdba10pLGQucHVzaChfLGIsYixiLF8sXyksdi5wdXNoKHkseCx4LHgseSx5KSxwLnB1c2goW2YubGVuZ3RoLTYsZi5sZW5ndGgtNSxmLmxlbmd0aC00XSxbZi5sZW5ndGgtMyxmLmxlbmd0aC0yLGYubGVuZ3RoLTFdKX12YXIgQT1nO2c9bSxtPUEsQT1fLF89YixiPUEsQT15LHk9eCx4PUF9cmV0dXJue3Bvc2l0aW9uczpmLGNlbGxzOnAsdmVjdG9yczpkLHZlcnRleEludGVuc2l0eTp2fX0odCxyLGEsbyl9KSxmPVtdLHA9W10sZD1bXSxnPVtdO2ZvcihzPTA7czxoLmxlbmd0aDtzKyspe3ZhciBtPWhbc10sdj1mLmxlbmd0aDtmPWYuY29uY2F0KG0ucG9zaXRpb25zKSxkPWQuY29uY2F0KG0udmVjdG9ycyksZz1nLmNvbmNhdChtLnZlcnRleEludGVuc2l0eSk7Zm9yKGM9MDtjPG0uY2VsbHMubGVuZ3RoO2MrKyl7dmFyIHk9bS5jZWxsc1tjXSx4PVtdO3AucHVzaCh4KTtmb3IodmFyIGI9MDtiPHkubGVuZ3RoO2IrKyl4LnB1c2goeVtiXSt2KX19cmV0dXJue3Bvc2l0aW9uczpmLGNlbGxzOnAsdmVjdG9yczpkLHZlcnRleEludGVuc2l0eTpnLGNvbG9ybWFwOmV9fSxvPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bi5jcmVhdGUoKSxpPTFlLTQ7bi5hZGQocix0LFtpLDAsMF0pO3ZhciBhPXRoaXMuZ2V0VmVsb2NpdHkocik7bi5zdWJ0cmFjdChhLGEsZSksbi5zY2FsZShhLGEsMWU0KSxuLmFkZChyLHQsWzAsaSwwXSk7dmFyIG89dGhpcy5nZXRWZWxvY2l0eShyKTtuLnN1YnRyYWN0KG8sbyxlKSxuLnNjYWxlKG8sbywxZTQpLG4uYWRkKHIsdCxbMCwwLGldKTt2YXIgcz10aGlzLmdldFZlbG9jaXR5KHIpO3JldHVybiBuLnN1YnRyYWN0KHMscyxlKSxuLnNjYWxlKHMscywxZTQpLG4uYWRkKHIsYSxvKSxuLmFkZChyLHIscykscn0scz1mdW5jdGlvbih0KXtyZXR1cm4gZih0LHRoaXMudmVjdG9ycyx0aGlzLm1lc2hncmlkLHRoaXMuY2xhbXBCb3JkZXJzKX0sbD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO2lmKG49PT1lKXJldHVybiByO2lmKG4+ZSlyZXR1cm4gci0xfXJldHVybiByfSxjPW4uY3JlYXRlKCksdT1uLmNyZWF0ZSgpLGg9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PGU/ZTp0PnI/cjp0fSxmPWZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhPXRbMF0sbz10WzFdLHM9dFsyXSxmPXJbMF0ubGVuZ3RoLHA9clsxXS5sZW5ndGgsZD1yWzJdLmxlbmd0aCxnPWwoclswXSxhKSxtPWwoclsxXSxvKSx2PWwoclsyXSxzKSx5PWcrMSx4PW0rMSxiPXYrMTtpZihyWzBdW2ddPT09YSYmKHk9ZyksclsxXVttXT09PW8mJih4PW0pLHJbMl1bdl09PT1zJiYoYj12KSxpJiYoZz1oKGcsMCxmLTEpLHk9aCh5LDAsZi0xKSxtPWgobSwwLHAtMSkseD1oKHgsMCxwLTEpLHY9aCh2LDAsZC0xKSxiPWgoYiwwLGQtMSkpLGc8MHx8bTwwfHx2PDB8fHk+PWZ8fHg+PXB8fGI+PWQpcmV0dXJuIG4uY3JlYXRlKCk7dmFyIF89KGEtclswXVtnXSkvKHJbMF1beV0tclswXVtnXSksdz0oby1yWzFdW21dKS8oclsxXVt4XS1yWzFdW21dKSxrPShzLXJbMl1bdl0pLyhyWzJdW2JdLXJbMl1bdl0pOyhfPDB8fF8+MXx8aXNOYU4oXykpJiYoXz0wKSwodzwwfHx3PjF8fGlzTmFOKHcpKSYmKHc9MCksKGs8MHx8az4xfHxpc05hTihrKSkmJihrPTApO3ZhciBNPXYqZipwLEE9YipmKnAsVD1tKmYsUz14KmYsRT1nLEM9eSxMPWVbVCtNK0VdLHo9ZVtUK00rQ10sUD1lW1MrTStFXSxJPWVbUytNK0NdLE89ZVtUK0ErRV0sRD1lW1QrQStDXSxSPWVbUytBK0VdLEI9ZVtTK0ErQ10sRj1uLmNyZWF0ZSgpO3JldHVybiBuLmxlcnAoRixMLHosXyksbi5sZXJwKGMsUCxJLF8pLG4ubGVycChGLEYsYyx3KSxuLmxlcnAoYyxPLEQsXyksbi5sZXJwKHUsUixCLF8pLG4ubGVycChjLGMsdSx3KSxuLmxlcnAoRixGLGMsayksRn0scD1mdW5jdGlvbih0KXt2YXIgZT0xLzA7dC5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtZX0pO2Zvcih2YXIgcj0xO3I8dC5sZW5ndGg7cisrKXt2YXIgbj1NYXRoLmFicyh0W3JdLXRbci0xXSk7bjxlJiYoZT1uKX1yZXR1cm4gZX07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5zdGFydGluZ1Bvc2l0aW9ucyxpPXQubWF4TGVuZ3RofHwxZTMsbD10LnR1YmVTaXplfHwxLGM9dC5hYnNvbHV0ZVR1YmVTaXplO3QuZ2V0RGl2ZXJnZW5jZXx8KHQuZ2V0RGl2ZXJnZW5jZT1vKSx0LmdldFZlbG9jaXR5fHwodC5nZXRWZWxvY2l0eT1zKSx2b2lkIDA9PT10LmNsYW1wQm9yZGVycyYmKHQuY2xhbXBCb3JkZXJzPSEwKTt2YXIgdT1bXSxoPWVbMF1bMF0sZj1lWzBdWzFdLGQ9ZVswXVsyXSxnPWVbMV1bMF0sbT1lWzFdWzFdLHY9ZVsxXVsyXSx5PWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0saT1lWzJdO3JldHVybiByPj1oJiZyPD1nJiZuPj1mJiZuPD1tJiZpPj1kJiZpPD12fSx4PTEwKm4uZGlzdGFuY2UoZVswXSxlWzFdKS9pLGI9eCp4LF89MSx3PTA7bi5jcmVhdGUoKTtyLmxlbmd0aD49MiYmKF89ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLHI9W10sbj1bXSxpPXt9LGE9e30sbz17fSxzPTA7czx0Lmxlbmd0aDtzKyspe3ZhciBsPXRbc10sYz1sWzBdLHU9bFsxXSxoPWxbMl07aVtjXXx8KGUucHVzaChjKSxpW2NdPSEwKSxhW3VdfHwoci5wdXNoKHUpLGFbdV09ITApLG9baF18fChuLnB1c2goaCksb1toXT0hMCl9dmFyIGY9cChlKSxkPXAociksZz1wKG4pLG09TWF0aC5taW4oZixkLGcpO3JldHVybiBpc0Zpbml0ZShtKT9tOjF9KHIpKTtmb3IodmFyIGs9MDtrPHIubGVuZ3RoO2srKyl7dmFyIE09bi5jcmVhdGUoKTtuLmNvcHkoTSxyW2tdKTt2YXIgQT1bTV0sVD1bXSxTPXQuZ2V0VmVsb2NpdHkoTSksRT1NO1QucHVzaChTKTt2YXIgQz1bXSxMPXQuZ2V0RGl2ZXJnZW5jZShNLFMpOyhPPW4ubGVuZ3RoKEwpKT53JiYhaXNOYU4oTykmJmlzRmluaXRlKE8pJiYodz1PKSxDLnB1c2goTyksdS5wdXNoKHtwb2ludHM6QSx2ZWxvY2l0aWVzOlQsZGl2ZXJnZW5jZXM6Q30pO2Zvcih2YXIgej0wO3o8MTAwKmkmJkEubGVuZ3RoPGkmJnkoMCxNKTspe3orKzt2YXIgUD1uLmNsb25lKFMpLEk9bi5zcXVhcmVkTGVuZ3RoKFApO2lmKDA9PT1JKWJyZWFrO2lmKEk+YiYmbi5zY2FsZShQLFAseC9NYXRoLnNxcnQoSSkpLG4uYWRkKFAsUCxNKSxTPXQuZ2V0VmVsb2NpdHkoUCksbi5zcXVhcmVkRGlzdGFuY2UoRSxQKS1iPi0xZS00KmIpe0EucHVzaChQKSxFPVAsVC5wdXNoKFMpO0w9dC5nZXREaXZlcmdlbmNlKFAsUyk7KE89bi5sZW5ndGgoTCkpPncmJiFpc05hTihPKSYmaXNGaW5pdGUoTykmJih3PU8pLEMucHVzaChPKX1NPVB9fWZvcihrPTA7azxDLmxlbmd0aDtrKyspe3ZhciBPPUNba107IWlzTmFOKE8pJiZpc0Zpbml0ZShPKXx8KENba109dyl9dmFyIEQ9YSh1LHQuY29sb3JtYXAsdyxfKTtyZXR1cm4gYz9ELnR1YmVTY2FsZT1jOigwPT09dyYmKHc9MSksRC50dWJlU2NhbGU9LjUqbCpfL3cpLER9LGUuZXhwb3J0cy5jcmVhdGVUdWJlTWVzaD10KCIuL2xpYi90dWJlbWVzaCIpfSx7Ii4vbGliL3R1YmVtZXNoIjoyOTksImdsLXZlYzMiOjMyMCwiZ2wtdmVjNCI6MzUwfV0sMzAxOltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiZ2wtc2hhZGVyIiksaT10KCJnbHNsaWZ5IiksYT1pKFsicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjNCB1djtcbmF0dHJpYnV0ZSB2ZWMzIGY7XG5hdHRyaWJ1dGUgdmVjMyBub3JtYWw7XG5cbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbiwgaW52ZXJzZU1vZGVsO1xudW5pZm9ybSB2ZWMzIGxpZ2h0UG9zaXRpb24sIGV5ZVBvc2l0aW9uO1xudW5pZm9ybSBzYW1wbGVyMkQgY29sb3JtYXA7XG5cbnZhcnlpbmcgZmxvYXQgdmFsdWUsIGtpbGw7XG52YXJ5aW5nIHZlYzMgd29ybGRDb29yZGluYXRlO1xudmFyeWluZyB2ZWMyIHBsYW5lQ29vcmRpbmF0ZTtcbnZhcnlpbmcgdmVjMyBsaWdodERpcmVjdGlvbiwgZXllRGlyZWN0aW9uLCBzdXJmYWNlTm9ybWFsO1xudmFyeWluZyB2ZWM0IHZDb2xvcjtcblxudm9pZCBtYWluKCkge1xuICB3b3JsZENvb3JkaW5hdGUgPSB2ZWMzKHV2Lnp3LCBmLngpO1xuICB2ZWM0IHdvcmxkUG9zaXRpb24gPSBtb2RlbCAqIHZlYzQod29ybGRDb29yZGluYXRlLCAxLjApO1xuICB2ZWM0IGNsaXBQb3NpdGlvbiA9IHByb2plY3Rpb24gKiB2aWV3ICogd29ybGRQb3NpdGlvbjtcbiAgZ2xfUG9zaXRpb24gPSBjbGlwUG9zaXRpb247XG4gIGtpbGwgPSBmLnk7XG4gIHZhbHVlID0gZi56O1xuICBwbGFuZUNvb3JkaW5hdGUgPSB1di54eTtcblxuICB2Q29sb3IgPSB0ZXh0dXJlMkQoY29sb3JtYXAsIHZlYzIodmFsdWUsIHZhbHVlKSk7XG5cbiAgLy9MaWdodGluZyBnZW9tZXRyeSBwYXJhbWV0ZXJzXG4gIHZlYzQgY2FtZXJhQ29vcmRpbmF0ZSA9IHZpZXcgKiB3b3JsZFBvc2l0aW9uO1xuICBjYW1lcmFDb29yZGluYXRlLnh5eiAvPSBjYW1lcmFDb29yZGluYXRlLnc7XG4gIGxpZ2h0RGlyZWN0aW9uID0gbGlnaHRQb3NpdGlvbiAtIGNhbWVyYUNvb3JkaW5hdGUueHl6O1xuICBleWVEaXJlY3Rpb24gICA9IGV5ZVBvc2l0aW9uIC0gY2FtZXJhQ29vcmRpbmF0ZS54eXo7XG4gIHN1cmZhY2VOb3JtYWwgID0gbm9ybWFsaXplKCh2ZWM0KG5vcm1hbCwwKSAqIGludmVyc2VNb2RlbCkueHl6KTtcbn1cbiJdKSxvPWkoWyJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmZsb2F0IGJlY2ttYW5uRGlzdHJpYnV0aW9uKGZsb2F0IHgsIGZsb2F0IHJvdWdobmVzcykge1xuICBmbG9hdCBOZG90SCA9IG1heCh4LCAwLjAwMDEpO1xuICBmbG9hdCBjb3MyQWxwaGEgPSBOZG90SCAqIE5kb3RIO1xuICBmbG9hdCB0YW4yQWxwaGEgPSAoY29zMkFscGhhIC0gMS4wKSAvIGNvczJBbHBoYTtcbiAgZmxvYXQgcm91Z2huZXNzMiA9IHJvdWdobmVzcyAqIHJvdWdobmVzcztcbiAgZmxvYXQgZGVub20gPSAzLjE0MTU5MjY1MzU4OTc5MyAqIHJvdWdobmVzczIgKiBjb3MyQWxwaGEgKiBjb3MyQWxwaGE7XG4gIHJldHVybiBleHAodGFuMkFscGhhIC8gcm91Z2huZXNzMikgLyBkZW5vbTtcbn1cblxuZmxvYXQgYmVja21hbm5TcGVjdWxhcihcbiAgdmVjMyBsaWdodERpcmVjdGlvbixcbiAgdmVjMyB2aWV3RGlyZWN0aW9uLFxuICB2ZWMzIHN1cmZhY2VOb3JtYWwsXG4gIGZsb2F0IHJvdWdobmVzcykge1xuICByZXR1cm4gYmVja21hbm5EaXN0cmlidXRpb24oZG90KHN1cmZhY2VOb3JtYWwsIG5vcm1hbGl6ZShsaWdodERpcmVjdGlvbiArIHZpZXdEaXJlY3Rpb24pKSwgcm91Z2huZXNzKTtcbn1cblxudW5pZm9ybSB2ZWMzIGxvd2VyQm91bmQsIHVwcGVyQm91bmQ7XG51bmlmb3JtIGZsb2F0IGNvbnRvdXJUaW50O1xudW5pZm9ybSB2ZWM0IGNvbnRvdXJDb2xvcjtcbnVuaWZvcm0gc2FtcGxlcjJEIGNvbG9ybWFwO1xudW5pZm9ybSB2ZWMzIGNsaXBCb3VuZHNbMl07XG51bmlmb3JtIGZsb2F0IHJvdWdobmVzcywgZnJlc25lbCwga2FtYmllbnQsIGtkaWZmdXNlLCBrc3BlY3VsYXIsIG9wYWNpdHk7XG51bmlmb3JtIGZsb2F0IHZlcnRleENvbG9yO1xuXG52YXJ5aW5nIGZsb2F0IHZhbHVlLCBraWxsO1xudmFyeWluZyB2ZWMzIHdvcmxkQ29vcmRpbmF0ZTtcbnZhcnlpbmcgdmVjMyBsaWdodERpcmVjdGlvbiwgZXllRGlyZWN0aW9uLCBzdXJmYWNlTm9ybWFsO1xudmFyeWluZyB2ZWM0IHZDb2xvcjtcblxudm9pZCBtYWluKCkge1xuICBpZiAoa2lsbCA+IDAuMCB8fFxuICAgIGFueShsZXNzVGhhbih3b3JsZENvb3JkaW5hdGUsIGNsaXBCb3VuZHNbMF0pKSB8fCBhbnkoZ3JlYXRlclRoYW4od29ybGRDb29yZGluYXRlLCBjbGlwQm91bmRzWzFdKSkpIHtcbiAgICBkaXNjYXJkO1xuICB9XG5cbiAgdmVjMyBOID0gbm9ybWFsaXplKHN1cmZhY2VOb3JtYWwpO1xuICB2ZWMzIFYgPSBub3JtYWxpemUoZXllRGlyZWN0aW9uKTtcbiAgdmVjMyBMID0gbm9ybWFsaXplKGxpZ2h0RGlyZWN0aW9uKTtcblxuICBpZihnbF9Gcm9udEZhY2luZykge1xuICAgIE4gPSAtTjtcbiAgfVxuXG4gIGZsb2F0IHNwZWN1bGFyID0gbWF4KGJlY2ttYW5uU3BlY3VsYXIoTCwgViwgTiwgcm91Z2huZXNzKSwgMC4pO1xuICBmbG9hdCBkaWZmdXNlICA9IG1pbihrYW1iaWVudCArIGtkaWZmdXNlICogbWF4KGRvdChOLCBMKSwgMC4wKSwgMS4wKTtcblxuICAvL2RlY2lkZSBob3cgdG8gaW50ZXJwb2xhdGUgY29sb3IgXHUyMDE0IGluIHZlcnRleCBvciBpbiBmcmFnbWVudFxuICB2ZWM0IHN1cmZhY2VDb2xvciA9IHN0ZXAodmVydGV4Q29sb3IsIC41KSAqIHRleHR1cmUyRChjb2xvcm1hcCwgdmVjMih2YWx1ZSwgdmFsdWUpKSArIHN0ZXAoLjUsIHZlcnRleENvbG9yKSAqIHZDb2xvcjtcblxuICB2ZWM0IGxpdENvbG9yID0gc3VyZmFjZUNvbG9yLmEgKiB2ZWM0KGRpZmZ1c2UgKiBzdXJmYWNlQ29sb3IucmdiICsga3NwZWN1bGFyICogdmVjMygxLDEsMSkgKiBzcGVjdWxhciwgIDEuMCk7XG5cbiAgZ2xfRnJhZ0NvbG9yID0gbWl4KGxpdENvbG9yLCBjb250b3VyQ29sb3IsIGNvbnRvdXJUaW50KSAqIG9wYWNpdHk7XG59XG4iXSkscz1pKFsicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjNCB1djtcbmF0dHJpYnV0ZSBmbG9hdCBmO1xuXG51bmlmb3JtIG1hdDMgcGVybXV0YXRpb247XG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XG51bmlmb3JtIGZsb2F0IGhlaWdodCwgek9mZnNldDtcbnVuaWZvcm0gc2FtcGxlcjJEIGNvbG9ybWFwO1xuXG52YXJ5aW5nIGZsb2F0IHZhbHVlLCBraWxsO1xudmFyeWluZyB2ZWMzIHdvcmxkQ29vcmRpbmF0ZTtcbnZhcnlpbmcgdmVjMiBwbGFuZUNvb3JkaW5hdGU7XG52YXJ5aW5nIHZlYzMgbGlnaHREaXJlY3Rpb24sIGV5ZURpcmVjdGlvbiwgc3VyZmFjZU5vcm1hbDtcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjMyBkYXRhQ29vcmRpbmF0ZSA9IHBlcm11dGF0aW9uICogdmVjMyh1di54eSwgaGVpZ2h0KTtcbiAgdmVjNCB3b3JsZFBvc2l0aW9uID0gbW9kZWwgKiB2ZWM0KGRhdGFDb29yZGluYXRlLCAxLjApO1xuXG4gIHZlYzQgY2xpcFBvc2l0aW9uID0gcHJvamVjdGlvbiAqIHZpZXcgKiB3b3JsZFBvc2l0aW9uO1xuICBjbGlwUG9zaXRpb24ueiA9IGNsaXBQb3NpdGlvbi56ICsgek9mZnNldDtcblxuICBnbF9Qb3NpdGlvbiA9IGNsaXBQb3NpdGlvbjtcbiAgdmFsdWUgPSBmO1xuICBraWxsID0gLTEuMDtcbiAgd29ybGRDb29yZGluYXRlID0gZGF0YUNvb3JkaW5hdGU7XG4gIHBsYW5lQ29vcmRpbmF0ZSA9IHV2Lnp3O1xuXG4gIHZDb2xvciA9IHRleHR1cmUyRChjb2xvcm1hcCwgdmVjMih2YWx1ZSwgdmFsdWUpKTtcblxuICAvL0Rvbid0IGRvIGxpZ2h0aW5nIGZvciBjb250b3Vyc1xuICBzdXJmYWNlTm9ybWFsICAgPSB2ZWMzKDEsMCwwKTtcbiAgZXllRGlyZWN0aW9uICAgID0gdmVjMygwLDEsMCk7XG4gIGxpZ2h0RGlyZWN0aW9uICA9IHZlYzMoMCwwLDEpO1xufVxuIl0pLGw9aShbInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudW5pZm9ybSB2ZWMyIHNoYXBlO1xudW5pZm9ybSB2ZWMzIGNsaXBCb3VuZHNbMl07XG51bmlmb3JtIGZsb2F0IHBpY2tJZDtcblxudmFyeWluZyBmbG9hdCB2YWx1ZSwga2lsbDtcbnZhcnlpbmcgdmVjMyB3b3JsZENvb3JkaW5hdGU7XG52YXJ5aW5nIHZlYzIgcGxhbmVDb29yZGluYXRlO1xudmFyeWluZyB2ZWMzIHN1cmZhY2VOb3JtYWw7XG5cbnZlYzIgc3BsaXRGbG9hdChmbG9hdCB2KSB7XG4gIGZsb2F0IHZoID0gMjU1LjAgKiB2O1xuICBmbG9hdCB1cHBlciA9IGZsb29yKHZoKTtcbiAgZmxvYXQgbG93ZXIgPSBmcmFjdCh2aCk7XG4gIHJldHVybiB2ZWMyKHVwcGVyIC8gMjU1LjAsIGZsb29yKGxvd2VyICogMTYuMCkgLyAxNi4wKTtcbn1cblxudm9pZCBtYWluKCkge1xuICBpZihraWxsID4gMC4wIHx8XG4gICAgYW55KGxlc3NUaGFuKHdvcmxkQ29vcmRpbmF0ZSwgY2xpcEJvdW5kc1swXSkpIHx8IGFueShncmVhdGVyVGhhbih3b3JsZENvb3JkaW5hdGUsIGNsaXBCb3VuZHNbMV0pKSkge1xuICAgIGRpc2NhcmQ7XG4gIH1cbiAgdmVjMiB1eCA9IHNwbGl0RmxvYXQocGxhbmVDb29yZGluYXRlLnggLyBzaGFwZS54KTtcbiAgdmVjMiB1eSA9IHNwbGl0RmxvYXQocGxhbmVDb29yZGluYXRlLnkgLyBzaGFwZS55KTtcbiAgZ2xfRnJhZ0NvbG9yID0gdmVjNChwaWNrSWQsIHV4LngsIHV5LngsIHV4LnkgKyAodXkueS8xNi4wKSk7XG59XG4iXSk7ci5jcmVhdGVTaGFkZXI9ZnVuY3Rpb24odCl7dmFyIGU9bih0LGEsbyxudWxsLFt7bmFtZToidXYiLHR5cGU6InZlYzQifSx7bmFtZToiZiIsdHlwZToidmVjMyJ9LHtuYW1lOiJub3JtYWwiLHR5cGU6InZlYzMifV0pO3JldHVybiBlLmF0dHJpYnV0ZXMudXYubG9jYXRpb249MCxlLmF0dHJpYnV0ZXMuZi5sb2NhdGlvbj0xLGUuYXR0cmlidXRlcy5ub3JtYWwubG9jYXRpb249MixlfSxyLmNyZWF0ZVBpY2tTaGFkZXI9ZnVuY3Rpb24odCl7dmFyIGU9bih0LGEsbCxudWxsLFt7bmFtZToidXYiLHR5cGU6InZlYzQifSx7bmFtZToiZiIsdHlwZToidmVjMyJ9LHtuYW1lOiJub3JtYWwiLHR5cGU6InZlYzMifV0pO3JldHVybiBlLmF0dHJpYnV0ZXMudXYubG9jYXRpb249MCxlLmF0dHJpYnV0ZXMuZi5sb2NhdGlvbj0xLGUuYXR0cmlidXRlcy5ub3JtYWwubG9jYXRpb249MixlfSxyLmNyZWF0ZUNvbnRvdXJTaGFkZXI9ZnVuY3Rpb24odCl7dmFyIGU9bih0LHMsbyxudWxsLFt7bmFtZToidXYiLHR5cGU6InZlYzQifSx7bmFtZToiZiIsdHlwZToiZmxvYXQifV0pO3JldHVybiBlLmF0dHJpYnV0ZXMudXYubG9jYXRpb249MCxlLmF0dHJpYnV0ZXMuZi5sb2NhdGlvbj0xLGV9LHIuY3JlYXRlUGlja0NvbnRvdXJTaGFkZXI9ZnVuY3Rpb24odCl7dmFyIGU9bih0LHMsbCxudWxsLFt7bmFtZToidXYiLHR5cGU6InZlYzQifSx7bmFtZToiZiIsdHlwZToiZmxvYXQifV0pO3JldHVybiBlLmF0dHJpYnV0ZXMudXYubG9jYXRpb249MCxlLmF0dHJpYnV0ZXMuZi5sb2NhdGlvbj0xLGV9fSx7ImdsLXNoYWRlciI6Mjg3LGdsc2xpZnk6Mzc3fV0sMzAyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmdsLHI9eShlKSxuPWIoZSkscz14KGUpLGw9XyhlKSxjPWkoZSksdT1hKGUsW3tidWZmZXI6YyxzaXplOjQsc3RyaWRlOncsb2Zmc2V0OjB9LHtidWZmZXI6YyxzaXplOjMsc3RyaWRlOncsb2Zmc2V0OjE2fSx7YnVmZmVyOmMsc2l6ZTozLHN0cmlkZTp3LG9mZnNldDoyOH1dKSxoPWkoZSksZj1hKGUsW3tidWZmZXI6aCxzaXplOjQsc3RyaWRlOjIwLG9mZnNldDowfSx7YnVmZmVyOmgsc2l6ZToxLHN0cmlkZToyMCxvZmZzZXQ6MTZ9XSkscD1pKGUpLGQ9YShlLFt7YnVmZmVyOnAsc2l6ZToyLHR5cGU6ZS5GTE9BVH1dKSxnPW8oZSwxLFMsZS5SR0JBLGUuVU5TSUdORURfQllURSk7Zy5taW5GaWx0ZXI9ZS5MSU5FQVIsZy5tYWdGaWx0ZXI9ZS5MSU5FQVI7dmFyIG09bmV3IEUoZSxbMCwwXSxbWzAsMCwwXSxbMCwwLDBdXSxyLG4sYyx1LGcscyxsLGgsZixwLGQpLHY9e2xldmVsczpbW10sW10sW11dfTtmb3IodmFyIGsgaW4gdCl2W2tdPXRba107cmV0dXJuIHYuY29sb3JtYXA9di5jb2xvcm1hcHx8ImpldCIsbS51cGRhdGUodiksbX07dmFyIG49dCgiYml0LXR3aWRkbGUiKSxpPXQoImdsLWJ1ZmZlciIpLGE9dCgiZ2wtdmFvIiksbz10KCJnbC10ZXh0dXJlMmQiKSxzPXQoInR5cGVkYXJyYXktcG9vbCIpLGw9dCgiY29sb3JtYXAiKSxjPXQoIm5kYXJyYXktb3BzIiksdT10KCJuZGFycmF5LXBhY2siKSxoPXQoIm5kYXJyYXkiKSxmPXQoInN1cmZhY2UtbmV0cyIpLHA9dCgiZ2wtbWF0NC9tdWx0aXBseSIpLGQ9dCgiZ2wtbWF0NC9pbnZlcnQiKSxnPXQoImJpbmFyeS1zZWFyY2gtYm91bmRzIiksbT10KCJuZGFycmF5LWdyYWRpZW50Iiksdj10KCIuL2xpYi9zaGFkZXJzIikseT12LmNyZWF0ZVNoYWRlcix4PXYuY3JlYXRlQ29udG91clNoYWRlcixiPXYuY3JlYXRlUGlja1NoYWRlcixfPXYuY3JlYXRlUGlja0NvbnRvdXJTaGFkZXIsdz00MCxrPVsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXSxNPVtbMCwwXSxbMCwxXSxbMSwwXSxbMSwxXSxbMSwwXSxbMCwxXV0sQT1bWzAsMCwwLDAsMCwwLDAsMCwwXSxbMCwwLDAsMCwwLDAsMCwwLDBdLFswLDAsMCwwLDAsMCwwLDAsMF1dO2Z1bmN0aW9uIFQodCxlLHIsbixpKXt0aGlzLnBvc2l0aW9uPXQsdGhpcy5pbmRleD1lLHRoaXMudXY9cix0aGlzLmxldmVsPW4sdGhpcy5kYXRhQ29vcmRpbmF0ZT1pfSFmdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8MzsrK3Qpe3ZhciBlPUFbdF0scj0odCsyKSUzO2VbKHQrMSklMyswXT0xLGVbciszXT0xLGVbdCs2XT0xfX0oKTt2YXIgUz0yNTY7ZnVuY3Rpb24gRSh0LGUscixuLGksYSxvLGwsYyx1LGYscCxkLGcpe3RoaXMuZ2w9dCx0aGlzLnNoYXBlPWUsdGhpcy5ib3VuZHM9cix0aGlzLmludGVuc2l0eUJvdW5kcz1bXSx0aGlzLl9zaGFkZXI9bix0aGlzLl9waWNrU2hhZGVyPWksdGhpcy5fY29vcmRpbmF0ZUJ1ZmZlcj1hLHRoaXMuX3Zhbz1vLHRoaXMuX2NvbG9yTWFwPWwsdGhpcy5fY29udG91clNoYWRlcj1jLHRoaXMuX2NvbnRvdXJQaWNrU2hhZGVyPXUsdGhpcy5fY29udG91ckJ1ZmZlcj1mLHRoaXMuX2NvbnRvdXJWQU89cCx0aGlzLl9jb250b3VyT2Zmc2V0cz1bW10sW10sW11dLHRoaXMuX2NvbnRvdXJDb3VudHM9W1tdLFtdLFtdXSx0aGlzLl92ZXJ0ZXhDb3VudD0wLHRoaXMuX3BpY2tSZXN1bHQ9bmV3IFQoWzAsMCwwXSxbMCwwXSxbMCwwXSxbMCwwLDBdLFswLDAsMF0pLHRoaXMuX2R5bmFtaWNCdWZmZXI9ZCx0aGlzLl9keW5hbWljVkFPPWcsdGhpcy5fZHluYW1pY09mZnNldHM9WzAsMCwwXSx0aGlzLl9keW5hbWljQ291bnRzPVswLDAsMF0sdGhpcy5jb250b3VyV2lkdGg9WzEsMSwxXSx0aGlzLmNvbnRvdXJMZXZlbHM9W1sxXSxbMV0sWzFdXSx0aGlzLmNvbnRvdXJUaW50PVswLDAsMF0sdGhpcy5jb250b3VyQ29sb3I9W1suNSwuNSwuNSwxXSxbLjUsLjUsLjUsMV0sWy41LC41LC41LDFdXSx0aGlzLnNob3dDb250b3VyPSEwLHRoaXMuc2hvd1N1cmZhY2U9ITAsdGhpcy5lbmFibGVIaWdobGlnaHQ9WyEwLCEwLCEwXSx0aGlzLmhpZ2hsaWdodENvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5oaWdobGlnaHRUaW50PVsxLDEsMV0sdGhpcy5oaWdobGlnaHRMZXZlbD1bLTEsLTEsLTFdLHRoaXMuZW5hYmxlRHluYW1pYz1bITAsITAsITBdLHRoaXMuZHluYW1pY0xldmVsPVtOYU4sTmFOLE5hTl0sdGhpcy5keW5hbWljQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmR5bmFtaWNUaW50PVsxLDEsMV0sdGhpcy5keW5hbWljV2lkdGg9WzEsMSwxXSx0aGlzLmF4ZXNCb3VuZHM9W1sxLzAsMS8wLDEvMF0sWy0xLzAsLTEvMCwtMS8wXV0sdGhpcy5zdXJmYWNlUHJvamVjdD1bITEsITEsITFdLHRoaXMuY29udG91clByb2plY3Q9W1shMSwhMSwhMV0sWyExLCExLCExXSxbITEsITEsITFdXSx0aGlzLmNvbG9yQm91bmRzPVshMSwhMV0sdGhpcy5fZmllbGQ9W2gocy5tYWxsb2NGbG9hdCgxMDI0KSxbMCwwXSksaChzLm1hbGxvY0Zsb2F0KDEwMjQpLFswLDBdKSxoKHMubWFsbG9jRmxvYXQoMTAyNCksWzAsMF0pXSx0aGlzLnBpY2tJZD0xLHRoaXMuY2xpcEJvdW5kcz1bWy0xLzAsLTEvMCwtMS8wXSxbMS8wLDEvMCwxLzBdXSx0aGlzLnNuYXBUb0RhdGE9ITEsdGhpcy5vcGFjaXR5PTEsdGhpcy5saWdodFBvc2l0aW9uPVsxMCwxZTQsMF0sdGhpcy5hbWJpZW50TGlnaHQ9LjgsdGhpcy5kaWZmdXNlTGlnaHQ9LjgsdGhpcy5zcGVjdWxhckxpZ2h0PTIsdGhpcy5yb3VnaG5lc3M9LjUsdGhpcy5mcmVzbmVsPTEuNSx0aGlzLnZlcnRleENvbG9yPTAsdGhpcy5kaXJ0eT0hMH12YXIgQz1FLnByb3RvdHlwZTtDLmlzVHJhbnNwYXJlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcGFjaXR5PDF9LEMuaXNPcGFxdWU9ZnVuY3Rpb24oKXtpZih0aGlzLm9wYWNpdHk+PTEpcmV0dXJuITA7Zm9yKHZhciB0PTA7dDwzOysrdClpZih0aGlzLl9jb250b3VyQ291bnRzW3RdLmxlbmd0aD4wfHx0aGlzLl9keW5hbWljQ291bnRzW3RdPjApcmV0dXJuITA7cmV0dXJuITF9LEMucGlja1Nsb3RzPTEsQy5zZXRQaWNrQmFzZT1mdW5jdGlvbih0KXt0aGlzLnBpY2tJZD10fTt2YXIgTD1bMCwwLDBdLHo9e3Nob3dTdXJmYWNlOiExLHNob3dDb250b3VyOiExLHByb2plY3Rpb25zOltrLnNsaWNlKCksay5zbGljZSgpLGsuc2xpY2UoKV0sY2xpcEJvdW5kczpbW1swLDAsMF0sWzAsMCwwXV0sW1swLDAsMF0sWzAsMCwwXV0sW1swLDAsMF0sWzAsMCwwXV1dfTtmdW5jdGlvbiBQKHQsZSl7dmFyIHIsbixpLGE9ZS5heGVzJiZlLmF4ZXMubGFzdEN1YmVQcm9wcy5heGlzfHxMLG89ZS5zaG93U3VyZmFjZSxzPWUuc2hvd0NvbnRvdXI7Zm9yKHI9MDtyPDM7KytyKWZvcihvPW98fGUuc3VyZmFjZVByb2plY3Rbcl0sbj0wO248MzsrK24pcz1zfHxlLmNvbnRvdXJQcm9qZWN0W3JdW25dO2ZvcihyPTA7cjwzOysrcil7dmFyIGw9ei5wcm9qZWN0aW9uc1tyXTtmb3Iobj0wO248MTY7KytuKWxbbl09MDtmb3Iobj0wO248NDsrK24pbFs1Km5dPTE7bFs1KnJdPTAsbFsxMityXT1lLmF4ZXNCb3VuZHNbKyhhW3JdPjApXVtyXSxwKGwsdC5tb2RlbCxsKTt2YXIgYz16LmNsaXBCb3VuZHNbcl07Zm9yKGk9MDtpPDI7KytpKWZvcihuPTA7bjwzOysrbiljW2ldW25dPXQuY2xpcEJvdW5kc1tpXVtuXTtjWzBdW3JdPS0xZTgsY1sxXVtyXT0xZTh9cmV0dXJuIHouc2hvd1N1cmZhY2U9byx6LnNob3dDb250b3VyPXMsen12YXIgST17bW9kZWw6ayx2aWV3OmsscHJvamVjdGlvbjprLGludmVyc2VNb2RlbDprLnNsaWNlKCksbG93ZXJCb3VuZDpbMCwwLDBdLHVwcGVyQm91bmQ6WzAsMCwwXSxjb2xvck1hcDowLGNsaXBCb3VuZHM6W1swLDAsMF0sWzAsMCwwXV0saGVpZ2h0OjAsY29udG91clRpbnQ6MCxjb250b3VyQ29sb3I6WzAsMCwwLDFdLHBlcm11dGF0aW9uOlsxLDAsMCwwLDEsMCwwLDAsMV0sek9mZnNldDotMWUtNCxrYW1iaWVudDoxLGtkaWZmdXNlOjEsa3NwZWN1bGFyOjEsbGlnaHRQb3NpdGlvbjpbMWUzLDFlMywxZTNdLGV5ZVBvc2l0aW9uOlswLDAsMF0scm91Z2huZXNzOjEsZnJlc25lbDoxLG9wYWNpdHk6MSx2ZXJ0ZXhDb2xvcjowfSxPPWsuc2xpY2UoKSxEPVsxLDAsMCwwLDEsMCwwLDAsMV07ZnVuY3Rpb24gUih0LGUpe3Q9dHx8e307dmFyIHI9dGhpcy5nbDtyLmRpc2FibGUoci5DVUxMX0ZBQ0UpLHRoaXMuX2NvbG9yTWFwLmJpbmQoMCk7dmFyIG49STtuLm1vZGVsPXQubW9kZWx8fGssbi52aWV3PXQudmlld3x8ayxuLnByb2plY3Rpb249dC5wcm9qZWN0aW9ufHxrLG4ubG93ZXJCb3VuZD1bdGhpcy5ib3VuZHNbMF1bMF0sdGhpcy5ib3VuZHNbMF1bMV0sdGhpcy5jb2xvckJvdW5kc1swXXx8dGhpcy5ib3VuZHNbMF1bMl1dLG4udXBwZXJCb3VuZD1bdGhpcy5ib3VuZHNbMV1bMF0sdGhpcy5ib3VuZHNbMV1bMV0sdGhpcy5jb2xvckJvdW5kc1sxXXx8dGhpcy5ib3VuZHNbMV1bMl1dLG4uY29udG91ckNvbG9yPXRoaXMuY29udG91ckNvbG9yWzBdLG4uaW52ZXJzZU1vZGVsPWQobi5pbnZlcnNlTW9kZWwsbi5tb2RlbCk7Zm9yKHZhciBpPTA7aTwyOysraSlmb3IodmFyIGE9bi5jbGlwQm91bmRzW2ldLG89MDtvPDM7KytvKWFbb109TWF0aC5taW4oTWF0aC5tYXgodGhpcy5jbGlwQm91bmRzW2ldW29dLC0xZTgpLDFlOCk7bi5rYW1iaWVudD10aGlzLmFtYmllbnRMaWdodCxuLmtkaWZmdXNlPXRoaXMuZGlmZnVzZUxpZ2h0LG4ua3NwZWN1bGFyPXRoaXMuc3BlY3VsYXJMaWdodCxuLnJvdWdobmVzcz10aGlzLnJvdWdobmVzcyxuLmZyZXNuZWw9dGhpcy5mcmVzbmVsLG4ub3BhY2l0eT10aGlzLm9wYWNpdHksbi5oZWlnaHQ9MCxuLnBlcm11dGF0aW9uPUQsbi52ZXJ0ZXhDb2xvcj10aGlzLnZlcnRleENvbG9yO3ZhciBzPU87Zm9yKHAocyxuLnZpZXcsbi5tb2RlbCkscChzLG4ucHJvamVjdGlvbixzKSxkKHMscyksaT0wO2k8MzsrK2kpbi5leWVQb3NpdGlvbltpXT1zWzEyK2ldL3NbMTVdO3ZhciBsPXNbMTVdO2ZvcihpPTA7aTwzOysraSlsKz10aGlzLmxpZ2h0UG9zaXRpb25baV0qc1s0KmkrM107Zm9yKGk9MDtpPDM7KytpKXt2YXIgYz1zWzEyK2ldO2ZvcihvPTA7bzwzOysrbyljKz1zWzQqbytpXSp0aGlzLmxpZ2h0UG9zaXRpb25bb107bi5saWdodFBvc2l0aW9uW2ldPWMvbH12YXIgdT1QKG4sdGhpcyk7aWYodS5zaG93U3VyZmFjZSYmZT09PXRoaXMub3BhY2l0eTwxKXtmb3IodGhpcy5fc2hhZGVyLmJpbmQoKSx0aGlzLl9zaGFkZXIudW5pZm9ybXM9bix0aGlzLl92YW8uYmluZCgpLHRoaXMuc2hvd1N1cmZhY2UmJnRoaXMuX3ZlcnRleENvdW50JiZ0aGlzLl92YW8uZHJhdyhyLlRSSUFOR0xFUyx0aGlzLl92ZXJ0ZXhDb3VudCksaT0wO2k8MzsrK2kpdGhpcy5zdXJmYWNlUHJvamVjdFtpXSYmdGhpcy52ZXJ0ZXhDb3VudCYmKHRoaXMuX3NoYWRlci51bmlmb3Jtcy5tb2RlbD11LnByb2plY3Rpb25zW2ldLHRoaXMuX3NoYWRlci51bmlmb3Jtcy5jbGlwQm91bmRzPXUuY2xpcEJvdW5kc1tpXSx0aGlzLl92YW8uZHJhdyhyLlRSSUFOR0xFUyx0aGlzLl92ZXJ0ZXhDb3VudCkpO3RoaXMuX3Zhby51bmJpbmQoKX1pZih1LnNob3dDb250b3VyJiYhZSl7dmFyIGg9dGhpcy5fY29udG91clNoYWRlcjtuLmthbWJpZW50PTEsbi5rZGlmZnVzZT0wLG4ua3NwZWN1bGFyPTAsbi5vcGFjaXR5PTEsaC5iaW5kKCksaC51bmlmb3Jtcz1uO3ZhciBmPXRoaXMuX2NvbnRvdXJWQU87Zm9yKGYuYmluZCgpLGk9MDtpPDM7KytpKWZvcihoLnVuaWZvcm1zLnBlcm11dGF0aW9uPUFbaV0sci5saW5lV2lkdGgodGhpcy5jb250b3VyV2lkdGhbaV0pLG89MDtvPHRoaXMuY29udG91ckxldmVsc1tpXS5sZW5ndGg7KytvKW89PT10aGlzLmhpZ2hsaWdodExldmVsW2ldPyhoLnVuaWZvcm1zLmNvbnRvdXJDb2xvcj10aGlzLmhpZ2hsaWdodENvbG9yW2ldLGgudW5pZm9ybXMuY29udG91clRpbnQ9dGhpcy5oaWdobGlnaHRUaW50W2ldKTowIT09byYmby0xIT09dGhpcy5oaWdobGlnaHRMZXZlbFtpXXx8KGgudW5pZm9ybXMuY29udG91ckNvbG9yPXRoaXMuY29udG91ckNvbG9yW2ldLGgudW5pZm9ybXMuY29udG91clRpbnQ9dGhpcy5jb250b3VyVGludFtpXSksdGhpcy5fY29udG91ckNvdW50c1tpXVtvXSYmKGgudW5pZm9ybXMuaGVpZ2h0PXRoaXMuY29udG91ckxldmVsc1tpXVtvXSxmLmRyYXcoci5MSU5FUyx0aGlzLl9jb250b3VyQ291bnRzW2ldW29dLHRoaXMuX2NvbnRvdXJPZmZzZXRzW2ldW29dKSk7Zm9yKGk9MDtpPDM7KytpKWZvcihoLnVuaWZvcm1zLm1vZGVsPXUucHJvamVjdGlvbnNbaV0saC51bmlmb3Jtcy5jbGlwQm91bmRzPXUuY2xpcEJvdW5kc1tpXSxvPTA7bzwzOysrbylpZih0aGlzLmNvbnRvdXJQcm9qZWN0W2ldW29dKXtoLnVuaWZvcm1zLnBlcm11dGF0aW9uPUFbb10sci5saW5lV2lkdGgodGhpcy5jb250b3VyV2lkdGhbb10pO2Zvcih2YXIgZz0wO2c8dGhpcy5jb250b3VyTGV2ZWxzW29dLmxlbmd0aDsrK2cpZz09PXRoaXMuaGlnaGxpZ2h0TGV2ZWxbb10/KGgudW5pZm9ybXMuY29udG91ckNvbG9yPXRoaXMuaGlnaGxpZ2h0Q29sb3Jbb10saC51bmlmb3Jtcy5jb250b3VyVGludD10aGlzLmhpZ2hsaWdodFRpbnRbb10pOjAhPT1nJiZnLTEhPT10aGlzLmhpZ2hsaWdodExldmVsW29dfHwoaC51bmlmb3Jtcy5jb250b3VyQ29sb3I9dGhpcy5jb250b3VyQ29sb3Jbb10saC51bmlmb3Jtcy5jb250b3VyVGludD10aGlzLmNvbnRvdXJUaW50W29dKSxoLnVuaWZvcm1zLmhlaWdodD10aGlzLmNvbnRvdXJMZXZlbHNbb11bZ10sZi5kcmF3KHIuTElORVMsdGhpcy5fY29udG91ckNvdW50c1tvXVtnXSx0aGlzLl9jb250b3VyT2Zmc2V0c1tvXVtnXSl9Zm9yKGYudW5iaW5kKCksKGY9dGhpcy5fZHluYW1pY1ZBTykuYmluZCgpLGk9MDtpPDM7KytpKWlmKDAhPT10aGlzLl9keW5hbWljQ291bnRzW2ldKWZvcihoLnVuaWZvcm1zLm1vZGVsPW4ubW9kZWwsaC51bmlmb3Jtcy5jbGlwQm91bmRzPW4uY2xpcEJvdW5kcyxoLnVuaWZvcm1zLnBlcm11dGF0aW9uPUFbaV0sci5saW5lV2lkdGgodGhpcy5keW5hbWljV2lkdGhbaV0pLGgudW5pZm9ybXMuY29udG91ckNvbG9yPXRoaXMuZHluYW1pY0NvbG9yW2ldLGgudW5pZm9ybXMuY29udG91clRpbnQ9dGhpcy5keW5hbWljVGludFtpXSxoLnVuaWZvcm1zLmhlaWdodD10aGlzLmR5bmFtaWNMZXZlbFtpXSxmLmRyYXcoci5MSU5FUyx0aGlzLl9keW5hbWljQ291bnRzW2ldLHRoaXMuX2R5bmFtaWNPZmZzZXRzW2ldKSxvPTA7bzwzOysrbyl0aGlzLmNvbnRvdXJQcm9qZWN0W29dW2ldJiYoaC51bmlmb3Jtcy5tb2RlbD11LnByb2plY3Rpb25zW29dLGgudW5pZm9ybXMuY2xpcEJvdW5kcz11LmNsaXBCb3VuZHNbb10sZi5kcmF3KHIuTElORVMsdGhpcy5fZHluYW1pY0NvdW50c1tpXSx0aGlzLl9keW5hbWljT2Zmc2V0c1tpXSkpO2YudW5iaW5kKCl9fUMuZHJhdz1mdW5jdGlvbih0KXtyZXR1cm4gUi5jYWxsKHRoaXMsdCwhMSl9LEMuZHJhd1RyYW5zcGFyZW50PWZ1bmN0aW9uKHQpe3JldHVybiBSLmNhbGwodGhpcyx0LCEwKX07dmFyIEI9e21vZGVsOmssdmlldzprLHByb2plY3Rpb246ayxpbnZlcnNlTW9kZWw6ayxjbGlwQm91bmRzOltbMCwwLDBdLFswLDAsMF1dLGhlaWdodDowLHNoYXBlOlswLDBdLHBpY2tJZDowLGxvd2VyQm91bmQ6WzAsMCwwXSx1cHBlckJvdW5kOlswLDAsMF0sek9mZnNldDowLHBlcm11dGF0aW9uOlsxLDAsMCwwLDEsMCwwLDAsMV0sbGlnaHRQb3NpdGlvbjpbMCwwLDBdLGV5ZVBvc2l0aW9uOlswLDAsMF19O2Z1bmN0aW9uIEYodCxlKXt2YXIgcj1lLnNoYXBlLnNsaWNlKCksbj10LnNoYXBlLnNsaWNlKCk7Yy5hc3NpZ24odC5sbygxLDEpLmhpKHJbMF0sclsxXSksZSksYy5hc3NpZ24odC5sbygxKS5oaShyWzBdLDEpLGUuaGkoclswXSwxKSksYy5hc3NpZ24odC5sbygxLG5bMV0tMSkuaGkoclswXSwxKSxlLmxvKDAsclsxXS0xKS5oaShyWzBdLDEpKSxjLmFzc2lnbih0LmxvKDAsMSkuaGkoMSxyWzFdKSxlLmhpKDEpKSxjLmFzc2lnbih0LmxvKG5bMF0tMSwxKS5oaSgxLHJbMV0pLGUubG8oclswXS0xKSksdC5zZXQoMCwwLGUuZ2V0KDAsMCkpLHQuc2V0KDAsblsxXS0xLGUuZ2V0KDAsclsxXS0xKSksdC5zZXQoblswXS0xLDAsZS5nZXQoclswXS0xLDApKSx0LnNldChuWzBdLTEsblsxXS0xLGUuZ2V0KHJbMF0tMSxyWzFdLTEpKX1mdW5jdGlvbiBOKHQsZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/W2UodFswXSksZSh0WzFdKSxlKHRbMl0pXTpbZSh0KSxlKHQpLGUodCldfWZ1bmN0aW9uIGoodCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/Mz09PXQubGVuZ3RoP1t0WzBdLHRbMV0sdFsyXSwxXTpbdFswXSx0WzFdLHRbMl0sdFszXV06WzAsMCwwLDFdfWZ1bmN0aW9uIFYodCl7aWYoQXJyYXkuaXNBcnJheSh0KSl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm5baih0WzBdKSxqKHRbMV0pLGoodFsyXSldO3ZhciBlPWoodCk7cmV0dXJuW2Uuc2xpY2UoKSxlLnNsaWNlKCksZS5zbGljZSgpXX19Qy5kcmF3UGljaz1mdW5jdGlvbih0KXt0PXR8fHt9O3ZhciBlPXRoaXMuZ2w7ZS5kaXNhYmxlKGUuQ1VMTF9GQUNFKTt2YXIgcj1CO3IubW9kZWw9dC5tb2RlbHx8ayxyLnZpZXc9dC52aWV3fHxrLHIucHJvamVjdGlvbj10LnByb2plY3Rpb258fGssci5zaGFwZT10aGlzLl9maWVsZFsyXS5zaGFwZSxyLnBpY2tJZD10aGlzLnBpY2tJZC8yNTUsci5sb3dlckJvdW5kPXRoaXMuYm91bmRzWzBdLHIudXBwZXJCb3VuZD10aGlzLmJvdW5kc1sxXSxyLnBlcm11dGF0aW9uPUQ7Zm9yKHZhciBuPTA7bjwyOysrbilmb3IodmFyIGk9ci5jbGlwQm91bmRzW25dLGE9MDthPDM7KythKWlbYV09TWF0aC5taW4oTWF0aC5tYXgodGhpcy5jbGlwQm91bmRzW25dW2FdLC0xZTgpLDFlOCk7dmFyIG89UChyLHRoaXMpO2lmKG8uc2hvd1N1cmZhY2Upe2Zvcih0aGlzLl9waWNrU2hhZGVyLmJpbmQoKSx0aGlzLl9waWNrU2hhZGVyLnVuaWZvcm1zPXIsdGhpcy5fdmFvLmJpbmQoKSx0aGlzLl92YW8uZHJhdyhlLlRSSUFOR0xFUyx0aGlzLl92ZXJ0ZXhDb3VudCksbj0wO248MzsrK24pdGhpcy5zdXJmYWNlUHJvamVjdFtuXSYmKHRoaXMuX3BpY2tTaGFkZXIudW5pZm9ybXMubW9kZWw9by5wcm9qZWN0aW9uc1tuXSx0aGlzLl9waWNrU2hhZGVyLnVuaWZvcm1zLmNsaXBCb3VuZHM9by5jbGlwQm91bmRzW25dLHRoaXMuX3Zhby5kcmF3KGUuVFJJQU5HTEVTLHRoaXMuX3ZlcnRleENvdW50KSk7dGhpcy5fdmFvLnVuYmluZCgpfWlmKG8uc2hvd0NvbnRvdXIpe3ZhciBzPXRoaXMuX2NvbnRvdXJQaWNrU2hhZGVyO3MuYmluZCgpLHMudW5pZm9ybXM9cjt2YXIgbD10aGlzLl9jb250b3VyVkFPO2ZvcihsLmJpbmQoKSxhPTA7YTwzOysrYSlmb3IoZS5saW5lV2lkdGgodGhpcy5jb250b3VyV2lkdGhbYV0pLHMudW5pZm9ybXMucGVybXV0YXRpb249QVthXSxuPTA7bjx0aGlzLmNvbnRvdXJMZXZlbHNbYV0ubGVuZ3RoOysrbil0aGlzLl9jb250b3VyQ291bnRzW2FdW25dJiYocy51bmlmb3Jtcy5oZWlnaHQ9dGhpcy5jb250b3VyTGV2ZWxzW2FdW25dLGwuZHJhdyhlLkxJTkVTLHRoaXMuX2NvbnRvdXJDb3VudHNbYV1bbl0sdGhpcy5fY29udG91ck9mZnNldHNbYV1bbl0pKTtmb3Iobj0wO248MzsrK24pZm9yKHMudW5pZm9ybXMubW9kZWw9by5wcm9qZWN0aW9uc1tuXSxzLnVuaWZvcm1zLmNsaXBCb3VuZHM9by5jbGlwQm91bmRzW25dLGE9MDthPDM7KythKWlmKHRoaXMuY29udG91clByb2plY3Rbbl1bYV0pe3MudW5pZm9ybXMucGVybXV0YXRpb249QVthXSxlLmxpbmVXaWR0aCh0aGlzLmNvbnRvdXJXaWR0aFthXSk7Zm9yKHZhciBjPTA7Yzx0aGlzLmNvbnRvdXJMZXZlbHNbYV0ubGVuZ3RoOysrYyl0aGlzLl9jb250b3VyQ291bnRzW2FdW2NdJiYocy51bmlmb3Jtcy5oZWlnaHQ9dGhpcy5jb250b3VyTGV2ZWxzW2FdW2NdLGwuZHJhdyhlLkxJTkVTLHRoaXMuX2NvbnRvdXJDb3VudHNbYV1bY10sdGhpcy5fY29udG91ck9mZnNldHNbYV1bY10pKX1sLnVuYmluZCgpfX0sQy5waWNrPWZ1bmN0aW9uKHQpe2lmKCF0KXJldHVybiBudWxsO2lmKHQuaWQhPT10aGlzLnBpY2tJZClyZXR1cm4gbnVsbDt2YXIgZT10aGlzLl9maWVsZFsyXS5zaGFwZSxyPXRoaXMuX3BpY2tSZXN1bHQsbj1lWzBdKih0LnZhbHVlWzBdKyh0LnZhbHVlWzJdPj40KS8xNikvMjU1LGk9TWF0aC5mbG9vcihuKSxhPW4taSxvPWVbMV0qKHQudmFsdWVbMV0rKDE1JnQudmFsdWVbMl0pLzE2KS8yNTUscz1NYXRoLmZsb29yKG8pLGw9by1zO2krPTEscys9MTt2YXIgYz1yLnBvc2l0aW9uO2NbMF09Y1sxXT1jWzJdPTA7Zm9yKHZhciB1PTA7dTwyOysrdSlmb3IodmFyIGg9dT9hOjEtYSxmPTA7ZjwyOysrZilmb3IodmFyIHA9aSt1LGQ9cytmLG09aCooZj9sOjEtbCksdj0wO3Y8MzsrK3YpY1t2XSs9dGhpcy5fZmllbGRbdl0uZ2V0KHAsZCkqbTtmb3IodmFyIHk9dGhpcy5fcGlja1Jlc3VsdC5sZXZlbCx4PTA7eDwzOysreClpZih5W3hdPWcubGUodGhpcy5jb250b3VyTGV2ZWxzW3hdLGNbeF0pLHlbeF08MCl0aGlzLmNvbnRvdXJMZXZlbHNbeF0ubGVuZ3RoPjAmJih5W3hdPTApO2Vsc2UgaWYoeVt4XTx0aGlzLmNvbnRvdXJMZXZlbHNbeF0ubGVuZ3RoLTEpe3ZhciBiPXRoaXMuY29udG91ckxldmVsc1t4XVt5W3hdXSxfPXRoaXMuY29udG91ckxldmVsc1t4XVt5W3hdKzFdO01hdGguYWJzKGItY1t4XSk+TWF0aC5hYnMoXy1jW3hdKSYmKHlbeF0rPTEpfWZvcihyLmluZGV4WzBdPWE8LjU/aTppKzEsci5pbmRleFsxXT1sPC41P3M6cysxLHIudXZbMF09bi9lWzBdLHIudXZbMV09by9lWzFdLHY9MDt2PDM7Kyt2KXIuZGF0YUNvb3JkaW5hdGVbdl09dGhpcy5fZmllbGRbdl0uZ2V0KHIuaW5kZXhbMF0sci5pbmRleFsxXSk7cmV0dXJuIHJ9LEMudXBkYXRlPWZ1bmN0aW9uKHQpe3Q9dHx8e30sdGhpcy5kaXJ0eT0hMCwiY29udG91cldpZHRoImluIHQmJih0aGlzLmNvbnRvdXJXaWR0aD1OKHQuY29udG91cldpZHRoLE51bWJlcikpLCJzaG93Q29udG91ciJpbiB0JiYodGhpcy5zaG93Q29udG91cj1OKHQuc2hvd0NvbnRvdXIsQm9vbGVhbikpLCJzaG93U3VyZmFjZSJpbiB0JiYodGhpcy5zaG93U3VyZmFjZT0hIXQuc2hvd1N1cmZhY2UpLCJjb250b3VyVGludCJpbiB0JiYodGhpcy5jb250b3VyVGludD1OKHQuY29udG91clRpbnQsQm9vbGVhbikpLCJjb250b3VyQ29sb3IiaW4gdCYmKHRoaXMuY29udG91ckNvbG9yPVYodC5jb250b3VyQ29sb3IpKSwiY29udG91clByb2plY3QiaW4gdCYmKHRoaXMuY29udG91clByb2plY3Q9Tih0LmNvbnRvdXJQcm9qZWN0LGZ1bmN0aW9uKHQpe3JldHVybiBOKHQsQm9vbGVhbil9KSksInN1cmZhY2VQcm9qZWN0ImluIHQmJih0aGlzLnN1cmZhY2VQcm9qZWN0PXQuc3VyZmFjZVByb2plY3QpLCJkeW5hbWljQ29sb3IiaW4gdCYmKHRoaXMuZHluYW1pY0NvbG9yPVYodC5keW5hbWljQ29sb3IpKSwiZHluYW1pY1RpbnQiaW4gdCYmKHRoaXMuZHluYW1pY1RpbnQ9Tih0LmR5bmFtaWNUaW50LE51bWJlcikpLCJkeW5hbWljV2lkdGgiaW4gdCYmKHRoaXMuZHluYW1pY1dpZHRoPU4odC5keW5hbWljV2lkdGgsTnVtYmVyKSksIm9wYWNpdHkiaW4gdCYmKHRoaXMub3BhY2l0eT10Lm9wYWNpdHkpLCJjb2xvckJvdW5kcyJpbiB0JiYodGhpcy5jb2xvckJvdW5kcz10LmNvbG9yQm91bmRzKSwidmVydGV4Q29sb3IiaW4gdCYmKHRoaXMudmVydGV4Q29sb3I9dC52ZXJ0ZXhDb2xvcj8xOjApO3ZhciBlPXQuZmllbGR8fHQuY29vcmRzJiZ0LmNvb3Jkc1syXXx8bnVsbCxyPSExO2lmKGV8fChlPXRoaXMuX2ZpZWxkWzJdLnNoYXBlWzBdfHx0aGlzLl9maWVsZFsyXS5zaGFwZVsyXT90aGlzLl9maWVsZFsyXS5sbygxLDEpLmhpKHRoaXMuX2ZpZWxkWzJdLnNoYXBlWzBdLTIsdGhpcy5fZmllbGRbMl0uc2hhcGVbMV0tMik6dGhpcy5fZmllbGRbMl0uaGkoMCwwKSksImZpZWxkImluIHR8fCJjb29yZHMiaW4gdCl7dmFyIGk9KGUuc2hhcGVbMF0rMikqKGUuc2hhcGVbMV0rMik7aT50aGlzLl9maWVsZFsyXS5kYXRhLmxlbmd0aCYmKHMuZnJlZUZsb2F0KHRoaXMuX2ZpZWxkWzJdLmRhdGEpLHRoaXMuX2ZpZWxkWzJdLmRhdGE9cy5tYWxsb2NGbG9hdChuLm5leHRQb3cyKGkpKSksdGhpcy5fZmllbGRbMl09aCh0aGlzLl9maWVsZFsyXS5kYXRhLFtlLnNoYXBlWzBdKzIsZS5zaGFwZVsxXSsyXSksRih0aGlzLl9maWVsZFsyXSxlKSx0aGlzLnNoYXBlPWUuc2hhcGUuc2xpY2UoKTtmb3IodmFyIGE9dGhpcy5zaGFwZSxvPTA7bzwyOysrbyl0aGlzLl9maWVsZFsyXS5zaXplPnRoaXMuX2ZpZWxkW29dLmRhdGEubGVuZ3RoJiYocy5mcmVlRmxvYXQodGhpcy5fZmllbGRbb10uZGF0YSksdGhpcy5fZmllbGRbb10uZGF0YT1zLm1hbGxvY0Zsb2F0KHRoaXMuX2ZpZWxkWzJdLnNpemUpKSx0aGlzLl9maWVsZFtvXT1oKHRoaXMuX2ZpZWxkW29dLmRhdGEsW2FbMF0rMixhWzFdKzJdKTtpZih0LmNvb3Jkcyl7dmFyIHA9dC5jb29yZHM7aWYoIUFycmF5LmlzQXJyYXkocCl8fDMhPT1wLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImdsLXN1cmZhY2U6IGludmFsaWQgY29vcmRpbmF0ZXMgZm9yIHgveSIpO2ZvcihvPTA7bzwyOysrbyl7dmFyIGQ9cFtvXTtmb3IoYj0wO2I8MjsrK2IpaWYoZC5zaGFwZVtiXSE9PWFbYl0pdGhyb3cgbmV3IEVycm9yKCJnbC1zdXJmYWNlOiBjb29yZHMgaGF2ZSBpbmNvcnJlY3Qgc2hhcGUiKTtGKHRoaXMuX2ZpZWxkW29dLGQpfX1lbHNlIGlmKHQudGlja3Mpe3ZhciBnPXQudGlja3M7aWYoIUFycmF5LmlzQXJyYXkoZyl8fDIhPT1nLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImdsLXN1cmZhY2U6IGludmFsaWQgdGlja3MiKTtmb3Iobz0wO288MjsrK28pe3ZhciB2PWdbb107aWYoKEFycmF5LmlzQXJyYXkodil8fHYubGVuZ3RoKSYmKHY9aCh2KSksdi5zaGFwZVswXSE9PWFbb10pdGhyb3cgbmV3IEVycm9yKCJnbC1zdXJmYWNlOiBpbnZhbGlkIHRpY2sgbGVuZ3RoIik7dmFyIHk9aCh2LmRhdGEsYSk7eS5zdHJpZGVbb109di5zdHJpZGVbMF0seS5zdHJpZGVbMV5vXT0wLEYodGhpcy5fZmllbGRbb10seSl9fWVsc2V7Zm9yKG89MDtvPDI7KytvKXt2YXIgeD1bMCwwXTt4W29dPTEsdGhpcy5fZmllbGRbb109aCh0aGlzLl9maWVsZFtvXS5kYXRhLFthWzBdKzIsYVsxXSsyXSx4LDApfXRoaXMuX2ZpZWxkWzBdLnNldCgwLDAsMCk7Zm9yKHZhciBiPTA7YjxhWzBdOysrYil0aGlzLl9maWVsZFswXS5zZXQoYisxLDAsYik7Zm9yKHRoaXMuX2ZpZWxkWzBdLnNldChhWzBdKzEsMCxhWzBdLTEpLHRoaXMuX2ZpZWxkWzFdLnNldCgwLDAsMCksYj0wO2I8YVsxXTsrK2IpdGhpcy5fZmllbGRbMV0uc2V0KDAsYisxLGIpO3RoaXMuX2ZpZWxkWzFdLnNldCgwLGFbMV0rMSxhWzFdLTEpfXZhciBfPXRoaXMuX2ZpZWxkLHc9aChzLm1hbGxvY0Zsb2F0KDMqX1syXS5zaXplKjIpLFszLGFbMF0rMixhWzFdKzIsMl0pO2ZvcihvPTA7bzwzOysrbyltKHcucGljayhvKSxfW29dLCJtaXJyb3IiKTt2YXIgaz1oKHMubWFsbG9jRmxvYXQoMypfWzJdLnNpemUpLFthWzBdKzIsYVsxXSsyLDNdKTtmb3Iobz0wO288YVswXSsyOysrbylmb3IoYj0wO2I8YVsxXSsyOysrYil7dmFyIEE9dy5nZXQoMCxvLGIsMCksVD13LmdldCgwLG8sYiwxKSxFPXcuZ2V0KDEsbyxiLDApLEM9dy5nZXQoMSxvLGIsMSksTD13LmdldCgyLG8sYiwwKSx6PXcuZ2V0KDIsbyxiLDEpLFA9RSp6LUMqTCxJPUwqVC16KkEsTz1BKkMtVCpFLEQ9TWF0aC5zcXJ0KFAqUCtJKkkrTypPKTtEPDFlLTg/KEQ9TWF0aC5tYXgoTWF0aC5hYnMoUCksTWF0aC5hYnMoSSksTWF0aC5hYnMoTykpKTwxZS04PyhPPTEsST1QPTAsRD0xKTpEPTEvRDpEPTEvTWF0aC5zcXJ0KEQpLGsuc2V0KG8sYiwwLFAqRCksay5zZXQobyxiLDEsSSpEKSxrLnNldChvLGIsMixPKkQpfXMuZnJlZSh3LmRhdGEpO3ZhciBSPVsxLzAsMS8wLDEvMF0sQj1bLTEvMCwtMS8wLC0xLzBdLGo9MS8wLFU9LTEvMCxxPShhWzBdLTEpKihhWzFdLTEpKjYsSD1zLm1hbGxvY0Zsb2F0KG4ubmV4dFBvdzIoMTAqcSkpLEc9MCxXPTA7Zm9yKG89MDtvPGFbMF0tMTsrK28pdDpmb3IoYj0wO2I8YVsxXS0xOysrYil7Zm9yKHZhciBZPTA7WTwyOysrWSlmb3IodmFyIFg9MDtYPDI7KytYKWZvcih2YXIgWj0wO1o8MzsrK1ope3ZhciAkPXRoaXMuX2ZpZWxkW1pdLmdldCgxK28rWSwxK2IrWCk7aWYoaXNOYU4oJCl8fCFpc0Zpbml0ZSgkKSljb250aW51ZSB0fWZvcihaPTA7Wjw2OysrWil7dmFyIEo9bytNW1pdWzBdLEs9YitNW1pdWzFdLFE9dGhpcy5fZmllbGRbMF0uZ2V0KEorMSxLKzEpLHR0PXRoaXMuX2ZpZWxkWzFdLmdldChKKzEsSysxKSxldD0kPXRoaXMuX2ZpZWxkWzJdLmdldChKKzEsSysxKTtQPWsuZ2V0KEorMSxLKzEsMCksST1rLmdldChKKzEsSysxLDEpLE89ay5nZXQoSisxLEsrMSwyKSx0LmludGVuc2l0eSYmKGV0PXQuaW50ZW5zaXR5LmdldChKLEspKSxIW0crK109SixIW0crK109SyxIW0crK109USxIW0crK109dHQsSFtHKytdPSQsSFtHKytdPTAsSFtHKytdPWV0LEhbRysrXT1QLEhbRysrXT1JLEhbRysrXT1PLFJbMF09TWF0aC5taW4oUlswXSxRKSxSWzFdPU1hdGgubWluKFJbMV0sdHQpLFJbMl09TWF0aC5taW4oUlsyXSwkKSxqPU1hdGgubWluKGosZXQpLEJbMF09TWF0aC5tYXgoQlswXSxRKSxCWzFdPU1hdGgubWF4KEJbMV0sdHQpLEJbMl09TWF0aC5tYXgoQlsyXSwkKSxVPU1hdGgubWF4KFUsZXQpLFcrPTF9fWZvcih0LmludGVuc2l0eUJvdW5kcyYmKGo9K3QuaW50ZW5zaXR5Qm91bmRzWzBdLFU9K3QuaW50ZW5zaXR5Qm91bmRzWzFdKSxvPTY7bzxHO28rPTEwKUhbb109KEhbb10taikvKFUtaik7dGhpcy5fdmVydGV4Q291bnQ9Vyx0aGlzLl9jb29yZGluYXRlQnVmZmVyLnVwZGF0ZShILnN1YmFycmF5KDAsRykpLHMuZnJlZUZsb2F0KEgpLHMuZnJlZShrLmRhdGEpLHRoaXMuYm91bmRzPVtSLEJdLHRoaXMuaW50ZW5zaXR5PXQuaW50ZW5zaXR5fHx0aGlzLl9maWVsZFsyXSx0aGlzLmludGVuc2l0eUJvdW5kc1swXT09PWomJnRoaXMuaW50ZW5zaXR5Qm91bmRzWzFdPT09VXx8KHI9ITApLHRoaXMuaW50ZW5zaXR5Qm91bmRzPVtqLFVdfWlmKCJsZXZlbHMiaW4gdCl7dmFyIHJ0PXQubGV2ZWxzO2ZvcihydD1BcnJheS5pc0FycmF5KHJ0WzBdKT9ydC5zbGljZSgpOltbXSxbXSxydF0sbz0wO288MzsrK28pcnRbb109cnRbb10uc2xpY2UoKSxydC5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtZX0pO3Q6Zm9yKG89MDtvPDM7KytvKXtpZihydFtvXS5sZW5ndGghPT10aGlzLmNvbnRvdXJMZXZlbHNbb10ubGVuZ3RoKXtyPSEwO2JyZWFrfWZvcihiPTA7YjxydFtvXS5sZW5ndGg7KytiKWlmKHJ0W29dW2JdIT09dGhpcy5jb250b3VyTGV2ZWxzW29dW2JdKXtyPSEwO2JyZWFrIHR9fXRoaXMuY29udG91ckxldmVscz1ydH1pZihyKXtfPXRoaXMuX2ZpZWxkLGE9dGhpcy5zaGFwZTtmb3IodmFyIG50PVtdLGl0PTA7aXQ8MzsrK2l0KXtydD10aGlzLmNvbnRvdXJMZXZlbHNbaXRdO3ZhciBhdD1bXSxvdD1bXSxzdD1bMCwwLDBdO2ZvcihvPTA7bzxydC5sZW5ndGg7KytvKXt2YXIgbHQ9Zih0aGlzLl9maWVsZFtpdF0scnRbb10pO2F0LnB1c2gobnQubGVuZ3RoLzV8MCksVz0wO3Q6Zm9yKGI9MDtiPGx0LmNlbGxzLmxlbmd0aDsrK2Ipe3ZhciBjdD1sdC5jZWxsc1tiXTtmb3IoWj0wO1o8MjsrK1ope3ZhciB1dD1sdC5wb3NpdGlvbnNbY3RbWl1dLGh0PXV0WzBdLGZ0PTB8TWF0aC5mbG9vcihodCkscHQ9aHQtZnQsZHQ9dXRbMV0sZ3Q9MHxNYXRoLmZsb29yKGR0KSxtdD1kdC1ndCx2dD0hMTtlOmZvcih2YXIgeXQ9MDt5dDwzOysreXQpe3N0W3l0XT0wO3ZhciB4dD0oaXQreXQrMSklMztmb3IoWT0wO1k8MjsrK1kpe3ZhciBidD1ZP3B0OjEtcHQ7Zm9yKEo9MHxNYXRoLm1pbihNYXRoLm1heChmdCtZLDApLGFbMF0pLFg9MDtYPDI7KytYKXt2YXIgX3Q9WD9tdDoxLW10O2lmKEs9MHxNYXRoLm1pbihNYXRoLm1heChndCtYLDApLGFbMV0pLCQ9eXQ8Mj90aGlzLl9maWVsZFt4dF0uZ2V0KEosSyk6KHRoaXMuaW50ZW5zaXR5LmdldChKLEspLXRoaXMuaW50ZW5zaXR5Qm91bmRzWzBdKS8odGhpcy5pbnRlbnNpdHlCb3VuZHNbMV0tdGhpcy5pbnRlbnNpdHlCb3VuZHNbMF0pLCFpc0Zpbml0ZSgkKXx8aXNOYU4oJCkpe3Z0PSEwO2JyZWFrIGV9dmFyIHd0PWJ0Kl90O3N0W3l0XSs9d3QqJH19fWlmKHZ0KXtpZihaPjApe2Zvcih2YXIga3Q9MDtrdDw1Oysra3QpbnQucG9wKCk7Vy09MX1jb250aW51ZSB0fW50LnB1c2goc3RbMF0sc3RbMV0sdXRbMF0sdXRbMV0sc3RbMl0pLFcrPTF9fW90LnB1c2goVyl9dGhpcy5fY29udG91ck9mZnNldHNbaXRdPWF0LHRoaXMuX2NvbnRvdXJDb3VudHNbaXRdPW90fXZhciBNdD1zLm1hbGxvY0Zsb2F0KG50Lmxlbmd0aCk7Zm9yKG89MDtvPG50Lmxlbmd0aDsrK28pTXRbb109bnRbb107dGhpcy5fY29udG91ckJ1ZmZlci51cGRhdGUoTXQpLHMuZnJlZUZsb2F0KE10KX10LmNvbG9ybWFwJiZ0aGlzLl9jb2xvck1hcC5zZXRQaXhlbHMoZnVuY3Rpb24odCl7dmFyIGU9dShbbCh7Y29sb3JtYXA6dCxuc2hhZGVzOlMsZm9ybWF0OiJyZ2JhIn0pLm1hcChmdW5jdGlvbih0KXtyZXR1cm5bdFswXSx0WzFdLHRbMl0sMjU1KnRbM11dfSldKTtyZXR1cm4gYy5kaXZzZXEoZSwyNTUpLGV9KHQuY29sb3JtYXApKX0sQy5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5fc2hhZGVyLmRpc3Bvc2UoKSx0aGlzLl92YW8uZGlzcG9zZSgpLHRoaXMuX2Nvb3JkaW5hdGVCdWZmZXIuZGlzcG9zZSgpLHRoaXMuX2NvbG9yTWFwLmRpc3Bvc2UoKSx0aGlzLl9jb250b3VyQnVmZmVyLmRpc3Bvc2UoKSx0aGlzLl9jb250b3VyVkFPLmRpc3Bvc2UoKSx0aGlzLl9jb250b3VyU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLl9jb250b3VyUGlja1NoYWRlci5kaXNwb3NlKCksdGhpcy5fZHluYW1pY0J1ZmZlci5kaXNwb3NlKCksdGhpcy5fZHluYW1pY1ZBTy5kaXNwb3NlKCk7Zm9yKHZhciB0PTA7dDwzOysrdClzLmZyZWVGbG9hdCh0aGlzLl9maWVsZFt0XS5kYXRhKX0sQy5oaWdobGlnaHQ9ZnVuY3Rpb24odCl7aWYoIXQpcmV0dXJuIHRoaXMuX2R5bmFtaWNDb3VudHM9WzAsMCwwXSx0aGlzLmR5YW5hbWljTGV2ZWw9W05hTixOYU4sTmFOXSx2b2lkKHRoaXMuaGlnaGxpZ2h0TGV2ZWw9Wy0xLC0xLC0xXSk7Zm9yKHZhciBlPTA7ZTwzOysrZSl0aGlzLmVuYWJsZUhpZ2hsaWdodFtlXT90aGlzLmhpZ2hsaWdodExldmVsW2VdPXQubGV2ZWxbZV06dGhpcy5oaWdobGlnaHRMZXZlbFtlXT0tMTt2YXIgcjtpZihyPXRoaXMuc25hcFRvRGF0YT90LmRhdGFDb29yZGluYXRlOnQucG9zaXRpb24sdGhpcy5lbmFibGVEeW5hbWljWzBdJiZyWzBdIT09dGhpcy5keW5hbWljTGV2ZWxbMF18fHRoaXMuZW5hYmxlRHluYW1pY1sxXSYmclsxXSE9PXRoaXMuZHluYW1pY0xldmVsWzFdfHx0aGlzLmVuYWJsZUR5bmFtaWNbMl0mJnJbMl0hPT10aGlzLmR5bmFtaWNMZXZlbFsyXSl7Zm9yKHZhciBuPTAsaT10aGlzLnNoYXBlLGE9cy5tYWxsb2NGbG9hdCgxMippWzBdKmlbMV0pLG89MDtvPDM7KytvKWlmKHRoaXMuZW5hYmxlRHluYW1pY1tvXSl7dGhpcy5keW5hbWljTGV2ZWxbb109cltvXTt2YXIgbD0obysxKSUzLGM9KG8rMiklMyx1PXRoaXMuX2ZpZWxkW29dLGg9dGhpcy5fZmllbGRbbF0scD10aGlzLl9maWVsZFtjXSxkPSh0aGlzLmludGVuc2l0eSxmKHUscltvXSkpLGc9ZC5jZWxscyxtPWQucG9zaXRpb25zO2Zvcih0aGlzLl9keW5hbWljT2Zmc2V0c1tvXT1uLGU9MDtlPGcubGVuZ3RoOysrZSlmb3IodmFyIHY9Z1tlXSx5PTA7eTwyOysreSl7dmFyIHg9bVt2W3ldXSxiPSt4WzBdLF89MHxiLHc9MHxNYXRoLm1pbihfKzEsaVswXSksaz1iLV8sTT0xLWssQT0reFsxXSxUPTB8QSxTPTB8TWF0aC5taW4oVCsxLGlbMV0pLEU9QS1ULEM9MS1FLEw9TSpDLHo9TSpFLFA9aypDLEk9aypFLE89TCpoLmdldChfLFQpK3oqaC5nZXQoXyxTKStQKmguZ2V0KHcsVCkrSSpoLmdldCh3LFMpLEQ9TCpwLmdldChfLFQpK3oqcC5nZXQoXyxTKStQKnAuZ2V0KHcsVCkrSSpwLmdldCh3LFMpO2lmKGlzTmFOKE8pfHxpc05hTihEKSl7eSYmKG4tPTEpO2JyZWFrfWFbMipuKzBdPU8sYVsyKm4rMV09RCxuKz0xfXRoaXMuX2R5bmFtaWNDb3VudHNbb109bi10aGlzLl9keW5hbWljT2Zmc2V0c1tvXX1lbHNlIHRoaXMuZHluYW1pY0xldmVsW29dPU5hTix0aGlzLl9keW5hbWljQ291bnRzW29dPTA7dGhpcy5fZHluYW1pY0J1ZmZlci51cGRhdGUoYS5zdWJhcnJheSgwLDIqbikpLHMuZnJlZUZsb2F0KGEpfX19LHsiLi9saWIvc2hhZGVycyI6MzAxLCJiaW5hcnktc2VhcmNoLWJvdW5kcyI6NzksImJpdC10d2lkZGxlIjo4MCxjb2xvcm1hcDoxMTMsImdsLWJ1ZmZlciI6MjMwLCJnbC1tYXQ0L2ludmVydCI6MjU0LCJnbC1tYXQ0L211bHRpcGx5IjoyNTYsImdsLXRleHR1cmUyZCI6MzAzLCJnbC12YW8iOjMwOCxuZGFycmF5OjQxNywibmRhcnJheS1ncmFkaWVudCI6NDA4LCJuZGFycmF5LW9wcyI6NDExLCJuZGFycmF5LXBhY2siOjQxMiwic3VyZmFjZS1uZXRzIjo0OTMsInR5cGVkYXJyYXktcG9vbCI6NTA3fV0sMzAzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIm5kYXJyYXkiKSxpPXQoIm5kYXJyYXktb3BzIiksYT10KCJ0eXBlZGFycmF5LXBvb2wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoYXJndW1lbnRzLmxlbmd0aDw9MSl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogTWlzc2luZyBhcmd1bWVudHMgZm9yIHRleHR1cmUyZCBjb25zdHJ1Y3RvciIpO298fGZ1bmN0aW9uKHQpe289W3QuTElORUFSLHQuTkVBUkVTVF9NSVBNQVBfTElORUFSLHQuTElORUFSX01JUE1BUF9ORUFSRVNULHQuTElORUFSX01JUE1BUF9ORUFSRVNUXSxzPVt0Lk5FQVJFU1QsdC5MSU5FQVIsdC5ORUFSRVNUX01JUE1BUF9ORUFSRVNULHQuTkVBUkVTVF9NSVBNQVBfTElORUFSLHQuTElORUFSX01JUE1BUF9ORUFSRVNULHQuTElORUFSX01JUE1BUF9MSU5FQVJdLGw9W3QuUkVQRUFULHQuQ0xBTVBfVE9fRURHRSx0Lk1JUlJPUkVEX1JFUEVBVF19KHQpO2lmKCJudW1iZXIiPT10eXBlb2YgYXJndW1lbnRzWzFdKXJldHVybiBtKHQsYXJndW1lbnRzWzFdLGFyZ3VtZW50c1syXSxhcmd1bWVudHNbM118fHQuUkdCQSxhcmd1bWVudHNbNF18fHQuVU5TSUdORURfQllURSk7aWYoQXJyYXkuaXNBcnJheShhcmd1bWVudHNbMV0pKXJldHVybiBtKHQsMHxhcmd1bWVudHNbMV1bMF0sMHxhcmd1bWVudHNbMV1bMV0sYXJndW1lbnRzWzJdfHx0LlJHQkEsYXJndW1lbnRzWzNdfHx0LlVOU0lHTkVEX0JZVEUpO2lmKCJvYmplY3QiPT10eXBlb2YgYXJndW1lbnRzWzFdKXt2YXIgZT1hcmd1bWVudHNbMV0scj1jKGUpP2U6ZS5yYXc7aWYocilyZXR1cm4gZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvPWcodCk7cmV0dXJuIHQudGV4SW1hZ2UyRCh0LlRFWFRVUkVfMkQsMCxpLGksYSxlKSxuZXcgZih0LG8scixuLGksYSl9KHQsciwwfGUud2lkdGgsMHxlLmhlaWdodCxhcmd1bWVudHNbMl18fHQuUkdCQSxhcmd1bWVudHNbM118fHQuVU5TSUdORURfQllURSk7aWYoZS5zaGFwZSYmZS5kYXRhJiZlLnN0cmlkZSlyZXR1cm4gZnVuY3Rpb24odCxlKXt2YXIgcj1lLmR0eXBlLG89ZS5zaGFwZS5zbGljZSgpLHM9dC5nZXRQYXJhbWV0ZXIodC5NQVhfVEVYVFVSRV9TSVpFKTtpZihvWzBdPDB8fG9bMF0+c3x8b1sxXTwwfHxvWzFdPnMpdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IEludmFsaWQgdGV4dHVyZSBzaXplIik7dmFyIGw9ZChvLGUuc3RyaWRlLnNsaWNlKCkpLGM9MDsiZmxvYXQzMiI9PT1yP2M9dC5GTE9BVDoiZmxvYXQ2NCI9PT1yPyhjPXQuRkxPQVQsbD0hMSxyPSJmbG9hdDMyIik6InVpbnQ4Ij09PXI/Yz10LlVOU0lHTkVEX0JZVEU6KGM9dC5VTlNJR05FRF9CWVRFLGw9ITEscj0idWludDgiKTt2YXIgaCxwLG09MDtpZigyPT09by5sZW5ndGgpbT10LkxVTUlOQU5DRSxvPVtvWzBdLG9bMV0sMV0sZT1uKGUuZGF0YSxvLFtlLnN0cmlkZVswXSxlLnN0cmlkZVsxXSwxXSxlLm9mZnNldCk7ZWxzZXtpZigzIT09by5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IEludmFsaWQgc2hhcGUgZm9yIHRleHR1cmUiKTtpZigxPT09b1syXSltPXQuQUxQSEE7ZWxzZSBpZigyPT09b1syXSltPXQuTFVNSU5BTkNFX0FMUEhBO2Vsc2UgaWYoMz09PW9bMl0pbT10LlJHQjtlbHNle2lmKDQhPT1vWzJdKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBJbnZhbGlkIHNoYXBlIGZvciBwaXhlbCBjb29yZHMiKTttPXQuUkdCQX19YyE9PXQuRkxPQVR8fHQuZ2V0RXh0ZW5zaW9uKCJPRVNfdGV4dHVyZV9mbG9hdCIpfHwoYz10LlVOU0lHTkVEX0JZVEUsbD0hMSk7dmFyIHY9ZS5zaXplO2lmKGwpaD0wPT09ZS5vZmZzZXQmJmUuZGF0YS5sZW5ndGg9PT12P2UuZGF0YTplLmRhdGEuc3ViYXJyYXkoZS5vZmZzZXQsZS5vZmZzZXQrdik7ZWxzZXt2YXIgeT1bb1syXSxvWzJdKm9bMF0sMV07cD1hLm1hbGxvYyh2LHIpO3ZhciB4PW4ocCxvLHksMCk7ImZsb2F0MzIiIT09ciYmImZsb2F0NjQiIT09cnx8YyE9PXQuVU5TSUdORURfQllURT9pLmFzc2lnbih4LGUpOnUoeCxlKSxoPXAuc3ViYXJyYXkoMCx2KX12YXIgYj1nKHQpO3QudGV4SW1hZ2UyRCh0LlRFWFRVUkVfMkQsMCxtLG9bMF0sb1sxXSwwLG0sYyxoKSxsfHxhLmZyZWUocCk7cmV0dXJuIG5ldyBmKHQsYixvWzBdLG9bMV0sbSxjKX0odCxlKX10aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogSW52YWxpZCBhcmd1bWVudHMgZm9yIHRleHR1cmUyZCBjb25zdHJ1Y3RvciIpfTt2YXIgbz1udWxsLHM9bnVsbCxsPW51bGw7ZnVuY3Rpb24gYyh0KXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIEhUTUxDYW52YXNFbGVtZW50JiZ0IGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnR8fCJ1bmRlZmluZWQiIT10eXBlb2YgSFRNTEltYWdlRWxlbWVudCYmdCBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnR8fCJ1bmRlZmluZWQiIT10eXBlb2YgSFRNTFZpZGVvRWxlbWVudCYmdCBpbnN0YW5jZW9mIEhUTUxWaWRlb0VsZW1lbnR8fCJ1bmRlZmluZWQiIT10eXBlb2YgSW1hZ2VEYXRhJiZ0IGluc3RhbmNlb2YgSW1hZ2VEYXRhfXZhciB1PWZ1bmN0aW9uKHQsZSl7aS5tdWxzKHQsZSwyNTUpfTtmdW5jdGlvbiBoKHQsZSxyKXt2YXIgbj10LmdsLGk9bi5nZXRQYXJhbWV0ZXIobi5NQVhfVEVYVFVSRV9TSVpFKTtpZihlPDB8fGU+aXx8cjwwfHxyPmkpdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IEludmFsaWQgdGV4dHVyZSBzaXplIik7cmV0dXJuIHQuX3NoYXBlPVtlLHJdLHQuYmluZCgpLG4udGV4SW1hZ2UyRChuLlRFWFRVUkVfMkQsMCx0LmZvcm1hdCxlLHIsMCx0LmZvcm1hdCx0LnR5cGUsbnVsbCksdC5fbWlwTGV2ZWxzPVswXSx0fWZ1bmN0aW9uIGYodCxlLHIsbixpLGEpe3RoaXMuZ2w9dCx0aGlzLmhhbmRsZT1lLHRoaXMuZm9ybWF0PWksdGhpcy50eXBlPWEsdGhpcy5fc2hhcGU9W3Isbl0sdGhpcy5fbWlwTGV2ZWxzPVswXSx0aGlzLl9tYWdGaWx0ZXI9dC5ORUFSRVNULHRoaXMuX21pbkZpbHRlcj10Lk5FQVJFU1QsdGhpcy5fd3JhcFM9dC5DTEFNUF9UT19FREdFLHRoaXMuX3dyYXBUPXQuQ0xBTVBfVE9fRURHRSx0aGlzLl9hbmlzb1NhbXBsZXM9MTt2YXIgbz10aGlzLHM9W3RoaXMuX3dyYXBTLHRoaXMuX3dyYXBUXTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhzLFt7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uX3dyYXBTfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIG8ud3JhcFM9dH19LHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5fd3JhcFR9LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gby53cmFwVD10fX1dKSx0aGlzLl93cmFwVmVjdG9yPXM7dmFyIGw9W3RoaXMuX3NoYXBlWzBdLHRoaXMuX3NoYXBlWzFdXTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhsLFt7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uX3NoYXBlWzBdfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIG8ud2lkdGg9dH19LHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5fc2hhcGVbMV19LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gby5oZWlnaHQ9dH19XSksdGhpcy5fc2hhcGVWZWN0b3I9bH12YXIgcD1mLnByb3RvdHlwZTtmdW5jdGlvbiBkKHQsZSl7cmV0dXJuIDM9PT10Lmxlbmd0aD8xPT09ZVsyXSYmZVsxXT09PXRbMF0qdFsyXSYmZVswXT09PXRbMl06MT09PWVbMF0mJmVbMV09PT10WzBdfWZ1bmN0aW9uIGcodCl7dmFyIGU9dC5jcmVhdGVUZXh0dXJlKCk7cmV0dXJuIHQuYmluZFRleHR1cmUodC5URVhUVVJFXzJELGUpLHQudGV4UGFyYW1ldGVyaSh0LlRFWFRVUkVfMkQsdC5URVhUVVJFX01JTl9GSUxURVIsdC5ORUFSRVNUKSx0LnRleFBhcmFtZXRlcmkodC5URVhUVVJFXzJELHQuVEVYVFVSRV9NQUdfRklMVEVSLHQuTkVBUkVTVCksdC50ZXhQYXJhbWV0ZXJpKHQuVEVYVFVSRV8yRCx0LlRFWFRVUkVfV1JBUF9TLHQuQ0xBTVBfVE9fRURHRSksdC50ZXhQYXJhbWV0ZXJpKHQuVEVYVFVSRV8yRCx0LlRFWFRVUkVfV1JBUF9ULHQuQ0xBTVBfVE9fRURHRSksZX1mdW5jdGlvbiBtKHQsZSxyLG4saSl7dmFyIGE9dC5nZXRQYXJhbWV0ZXIodC5NQVhfVEVYVFVSRV9TSVpFKTtpZihlPDB8fGU+YXx8cjwwfHxyPmEpdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IEludmFsaWQgdGV4dHVyZSBzaGFwZSIpO2lmKGk9PT10LkZMT0FUJiYhdC5nZXRFeHRlbnNpb24oIk9FU190ZXh0dXJlX2Zsb2F0IikpdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IEZsb2F0aW5nIHBvaW50IHRleHR1cmVzIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybSIpO3ZhciBvPWcodCk7cmV0dXJuIHQudGV4SW1hZ2UyRCh0LlRFWFRVUkVfMkQsMCxuLGUsciwwLG4saSxudWxsKSxuZXcgZih0LG8sZSxyLG4saSl9T2JqZWN0LmRlZmluZVByb3BlcnRpZXMocCx7bWluRmlsdGVyOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWluRmlsdGVyfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5iaW5kKCk7dmFyIGU9dGhpcy5nbDtpZih0aGlzLnR5cGU9PT1lLkZMT0FUJiZvLmluZGV4T2YodCk+PTAmJihlLmdldEV4dGVuc2lvbigiT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIil8fCh0PWUuTkVBUkVTVCkpLHMuaW5kZXhPZih0KTwwKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBVbmtub3duIGZpbHRlciBtb2RlICIrdCk7cmV0dXJuIGUudGV4UGFyYW1ldGVyaShlLlRFWFRVUkVfMkQsZS5URVhUVVJFX01JTl9GSUxURVIsdCksdGhpcy5fbWluRmlsdGVyPXR9fSxtYWdGaWx0ZXI6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYWdGaWx0ZXJ9LHNldDpmdW5jdGlvbih0KXt0aGlzLmJpbmQoKTt2YXIgZT10aGlzLmdsO2lmKHRoaXMudHlwZT09PWUuRkxPQVQmJm8uaW5kZXhPZih0KT49MCYmKGUuZ2V0RXh0ZW5zaW9uKCJPRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIiKXx8KHQ9ZS5ORUFSRVNUKSkscy5pbmRleE9mKHQpPDApdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IFVua25vd24gZmlsdGVyIG1vZGUgIit0KTtyZXR1cm4gZS50ZXhQYXJhbWV0ZXJpKGUuVEVYVFVSRV8yRCxlLlRFWFRVUkVfTUFHX0ZJTFRFUix0KSx0aGlzLl9tYWdGaWx0ZXI9dH19LG1pcFNhbXBsZXM6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hbmlzb1NhbXBsZXN9LHNldDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9hbmlzb1NhbXBsZXM7aWYodGhpcy5fYW5pc29TYW1wbGVzPTB8TWF0aC5tYXgodCwxKSxlIT09dGhpcy5fYW5pc29TYW1wbGVzKXt2YXIgcj10aGlzLmdsLmdldEV4dGVuc2lvbigiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIik7ciYmdGhpcy5nbC50ZXhQYXJhbWV0ZXJmKHRoaXMuZ2wuVEVYVFVSRV8yRCxyLlRFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhULHRoaXMuX2FuaXNvU2FtcGxlcyl9cmV0dXJuIHRoaXMuX2FuaXNvU2FtcGxlc319LHdyYXBTOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JhcFN9LHNldDpmdW5jdGlvbih0KXtpZih0aGlzLmJpbmQoKSxsLmluZGV4T2YodCk8MCl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogVW5rbm93biB3cmFwIG1vZGUgIit0KTtyZXR1cm4gdGhpcy5nbC50ZXhQYXJhbWV0ZXJpKHRoaXMuZ2wuVEVYVFVSRV8yRCx0aGlzLmdsLlRFWFRVUkVfV1JBUF9TLHQpLHRoaXMuX3dyYXBTPXR9fSx3cmFwVDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyYXBUfSxzZXQ6ZnVuY3Rpb24odCl7aWYodGhpcy5iaW5kKCksbC5pbmRleE9mKHQpPDApdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IFVua25vd24gd3JhcCBtb2RlICIrdCk7cmV0dXJuIHRoaXMuZ2wudGV4UGFyYW1ldGVyaSh0aGlzLmdsLlRFWFRVUkVfMkQsdGhpcy5nbC5URVhUVVJFX1dSQVBfVCx0KSx0aGlzLl93cmFwVD10fX0sd3JhcDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyYXBWZWN0b3J9LHNldDpmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpfHwodD1bdCx0XSksMiE9PXQubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBNdXN0IHNwZWNpZnkgd3JhcCBtb2RlIGZvciByb3dzIGFuZCBjb2x1bW5zIik7Zm9yKHZhciBlPTA7ZTwyOysrZSlpZihsLmluZGV4T2YodFtlXSk8MCl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogVW5rbm93biB3cmFwIG1vZGUgIit0KTt0aGlzLl93cmFwUz10WzBdLHRoaXMuX3dyYXBUPXRbMV07dmFyIHI9dGhpcy5nbDtyZXR1cm4gdGhpcy5iaW5kKCksci50ZXhQYXJhbWV0ZXJpKHIuVEVYVFVSRV8yRCxyLlRFWFRVUkVfV1JBUF9TLHRoaXMuX3dyYXBTKSxyLnRleFBhcmFtZXRlcmkoci5URVhUVVJFXzJELHIuVEVYVFVSRV9XUkFQX1QsdGhpcy5fd3JhcFQpLHR9fSxzaGFwZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NoYXBlVmVjdG9yfSxzZXQ6ZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSl7aWYoMiE9PXQubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBJbnZhbGlkIHRleHR1cmUgc2hhcGUiKX1lbHNlIHQ9WzB8dCwwfHRdO3JldHVybiBoKHRoaXMsMHx0WzBdLDB8dFsxXSksWzB8dFswXSwwfHRbMV1dfX0sd2lkdGg6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zaGFwZVswXX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBoKHRoaXMsdHw9MCx0aGlzLl9zaGFwZVsxXSksdH19LGhlaWdodDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NoYXBlWzFdfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHR8PTAsaCh0aGlzLHRoaXMuX3NoYXBlWzBdLHQpLHR9fX0pLHAuYmluZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmdsO3JldHVybiB2b2lkIDAhPT10JiZlLmFjdGl2ZVRleHR1cmUoZS5URVhUVVJFMCsoMHx0KSksZS5iaW5kVGV4dHVyZShlLlRFWFRVUkVfMkQsdGhpcy5oYW5kbGUpLHZvaWQgMCE9PXQ/MHx0OmUuZ2V0UGFyYW1ldGVyKGUuQUNUSVZFX1RFWFRVUkUpLWUuVEVYVFVSRTB9LHAuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuZ2wuZGVsZXRlVGV4dHVyZSh0aGlzLmhhbmRsZSl9LHAuZ2VuZXJhdGVNaXBtYXA9ZnVuY3Rpb24oKXt0aGlzLmJpbmQoKSx0aGlzLmdsLmdlbmVyYXRlTWlwbWFwKHRoaXMuZ2wuVEVYVFVSRV8yRCk7Zm9yKHZhciB0PU1hdGgubWluKHRoaXMuX3NoYXBlWzBdLHRoaXMuX3NoYXBlWzFdKSxlPTA7dD4wOysrZSx0Pj4+PTEpdGhpcy5fbWlwTGV2ZWxzLmluZGV4T2YoZSk8MCYmdGhpcy5fbWlwTGV2ZWxzLnB1c2goZSl9LHAuc2V0UGl4ZWxzPWZ1bmN0aW9uKHQsZSxyLG8pe3ZhciBzPXRoaXMuZ2w7dGhpcy5iaW5kKCksQXJyYXkuaXNBcnJheShlKT8obz1yLHI9MHxlWzFdLGU9MHxlWzBdKTooZT1lfHwwLHI9cnx8MCksbz1vfHwwO3ZhciBsPWModCk/dDp0LnJhdztpZihsKXt0aGlzLl9taXBMZXZlbHMuaW5kZXhPZihvKTwwPyhzLnRleEltYWdlMkQocy5URVhUVVJFXzJELDAsdGhpcy5mb3JtYXQsdGhpcy5mb3JtYXQsdGhpcy50eXBlLGwpLHRoaXMuX21pcExldmVscy5wdXNoKG8pKTpzLnRleFN1YkltYWdlMkQocy5URVhUVVJFXzJELG8sZSxyLHRoaXMuZm9ybWF0LHRoaXMudHlwZSxsKX1lbHNle2lmKCEodC5zaGFwZSYmdC5zdHJpZGUmJnQuZGF0YSkpdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IFVuc3VwcG9ydGVkIGRhdGEgdHlwZSIpO2lmKHQuc2hhcGUubGVuZ3RoPDJ8fGUrdC5zaGFwZVsxXT50aGlzLl9zaGFwZVsxXT4+Pm98fHIrdC5zaGFwZVswXT50aGlzLl9zaGFwZVswXT4+Pm98fGU8MHx8cjwwKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBUZXh0dXJlIGRpbWVuc2lvbnMgYXJlIG91dCBvZiBib3VuZHMiKTshZnVuY3Rpb24odCxlLHIsbyxzLGwsYyxoKXt2YXIgZj1oLmR0eXBlLHA9aC5zaGFwZS5zbGljZSgpO2lmKHAubGVuZ3RoPDJ8fHAubGVuZ3RoPjMpdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IEludmFsaWQgbmRhcnJheSwgbXVzdCBiZSAyZCBvciAzZCIpO3ZhciBnPTAsbT0wLHY9ZChwLGguc3RyaWRlLnNsaWNlKCkpOyJmbG9hdDMyIj09PWY/Zz10LkZMT0FUOiJmbG9hdDY0Ij09PWY/KGc9dC5GTE9BVCx2PSExLGY9ImZsb2F0MzIiKToidWludDgiPT09Zj9nPXQuVU5TSUdORURfQllURTooZz10LlVOU0lHTkVEX0JZVEUsdj0hMSxmPSJ1aW50OCIpO2lmKDI9PT1wLmxlbmd0aCltPXQuTFVNSU5BTkNFLHA9W3BbMF0scFsxXSwxXSxoPW4oaC5kYXRhLHAsW2guc3RyaWRlWzBdLGguc3RyaWRlWzFdLDFdLGgub2Zmc2V0KTtlbHNle2lmKDMhPT1wLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogSW52YWxpZCBzaGFwZSBmb3IgdGV4dHVyZSIpO2lmKDE9PT1wWzJdKW09dC5BTFBIQTtlbHNlIGlmKDI9PT1wWzJdKW09dC5MVU1JTkFOQ0VfQUxQSEE7ZWxzZSBpZigzPT09cFsyXSltPXQuUkdCO2Vsc2V7aWYoNCE9PXBbMl0pdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IEludmFsaWQgc2hhcGUgZm9yIHBpeGVsIGNvb3JkcyIpO209dC5SR0JBfXBbMl19bSE9PXQuTFVNSU5BTkNFJiZtIT09dC5BTFBIQXx8cyE9PXQuTFVNSU5BTkNFJiZzIT09dC5BTFBIQXx8KG09cyk7aWYobSE9PXMpdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IEluY29tcGF0aWJsZSB0ZXh0dXJlIGZvcm1hdCBmb3Igc2V0UGl4ZWxzIik7dmFyIHk9aC5zaXplLHg9Yy5pbmRleE9mKG8pPDA7eCYmYy5wdXNoKG8pO2lmKGc9PT1sJiZ2KTA9PT1oLm9mZnNldCYmaC5kYXRhLmxlbmd0aD09PXk/eD90LnRleEltYWdlMkQodC5URVhUVVJFXzJELG8scyxwWzBdLHBbMV0sMCxzLGwsaC5kYXRhKTp0LnRleFN1YkltYWdlMkQodC5URVhUVVJFXzJELG8sZSxyLHBbMF0scFsxXSxzLGwsaC5kYXRhKTp4P3QudGV4SW1hZ2UyRCh0LlRFWFRVUkVfMkQsbyxzLHBbMF0scFsxXSwwLHMsbCxoLmRhdGEuc3ViYXJyYXkoaC5vZmZzZXQsaC5vZmZzZXQreSkpOnQudGV4U3ViSW1hZ2UyRCh0LlRFWFRVUkVfMkQsbyxlLHIscFswXSxwWzFdLHMsbCxoLmRhdGEuc3ViYXJyYXkoaC5vZmZzZXQsaC5vZmZzZXQreSkpO2Vsc2V7dmFyIGI7Yj1sPT09dC5GTE9BVD9hLm1hbGxvY0Zsb2F0MzIoeSk6YS5tYWxsb2NVaW50OCh5KTt2YXIgXz1uKGIscCxbcFsyXSxwWzJdKnBbMF0sMV0pO2c9PT10LkZMT0FUJiZsPT09dC5VTlNJR05FRF9CWVRFP3UoXyxoKTppLmFzc2lnbihfLGgpLHg/dC50ZXhJbWFnZTJEKHQuVEVYVFVSRV8yRCxvLHMscFswXSxwWzFdLDAscyxsLGIuc3ViYXJyYXkoMCx5KSk6dC50ZXhTdWJJbWFnZTJEKHQuVEVYVFVSRV8yRCxvLGUscixwWzBdLHBbMV0scyxsLGIuc3ViYXJyYXkoMCx5KSksbD09PXQuRkxPQVQ/YS5mcmVlRmxvYXQzMihiKTphLmZyZWVVaW50OChiKX19KHMsZSxyLG8sdGhpcy5mb3JtYXQsdGhpcy50eXBlLHRoaXMuX21pcExldmVscyx0KX19fSx7bmRhcnJheTo0MTcsIm5kYXJyYXktb3BzIjo0MTEsInR5cGVkYXJyYXktcG9vbCI6NTA3fV0sMzA0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInBpY2stYnktYWxpYXMiKTtmdW5jdGlvbiBpKHQpe2lmKHQuY29udGFpbmVyKWlmKHQuY29udGFpbmVyPT1kb2N1bWVudC5ib2R5KWRvY3VtZW50LmJvZHkuc3R5bGUud2lkdGh8fCh0LmNhbnZhcy53aWR0aD10LndpZHRofHx0LnBpeGVsUmF0aW8qd2luZG93LmlubmVyV2lkdGgpLGRvY3VtZW50LmJvZHkuc3R5bGUuaGVpZ2h0fHwodC5jYW52YXMuaGVpZ2h0PXQuaGVpZ2h0fHx0LnBpeGVsUmF0aW8qd2luZG93LmlubmVySGVpZ2h0KTtlbHNle3ZhciBlPXQuY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3QuY2FudmFzLndpZHRoPXQud2lkdGh8fGUucmlnaHQtZS5sZWZ0LHQuY2FudmFzLmhlaWdodD10LmhlaWdodHx8ZS5ib3R0b20tZS50b3B9fWZ1bmN0aW9uIGEodCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQuZ2V0Q29udGV4dCYmIndpZHRoImluIHQmJiJoZWlnaHQiaW4gdH1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU7aWYodD8ic3RyaW5nIj09dHlwZW9mIHQmJih0PXtjb250YWluZXI6dH0pOnQ9e30sYSh0KT90PXtjb250YWluZXI6dH06dD0ic3RyaW5nIj09dHlwZW9mKGU9dCkubm9kZU5hbWUmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLmFwcGVuZENoaWxkJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5nZXRCb3VuZGluZ0NsaWVudFJlY3Q/e2NvbnRhaW5lcjp0fTpmdW5jdGlvbih0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdC5kcmF3QXJyYXlzfHwiZnVuY3Rpb24iPT10eXBlb2YgdC5kcmF3RWxlbWVudHN9KHQpP3tnbDp0fTpuKHQse2NvbnRhaW5lcjoiY29udGFpbmVyIHRhcmdldCBlbGVtZW50IGVsIGNhbnZhcyBob2xkZXIgcGFyZW50IHBhcmVudE5vZGUgd3JhcHBlciB1c2UgcmVmIHJvb3Qgbm9kZSIsZ2w6ImdsIGNvbnRleHQgd2ViZ2wgZ2xDb250ZXh0IixhdHRyczoiYXR0cmlidXRlcyBhdHRycyBjb250ZXh0QXR0cmlidXRlcyIscGl4ZWxSYXRpbzoicGl4ZWxSYXRpbyBweFJhdGlvIHB4IHJhdGlvIHB4cmF0aW8gcGl4ZWxyYXRpbyJ9LCEwKSx0LnBpeGVsUmF0aW98fCh0LnBpeGVsUmF0aW89d2luZG93LnBpeGVsUmF0aW98fDEpLHQuZ2wpcmV0dXJuIHQuZ2w7aWYodC5jYW52YXMmJih0LmNvbnRhaW5lcj10LmNhbnZhcy5wYXJlbnROb2RlKSx0LmNvbnRhaW5lcil7aWYoInN0cmluZyI9PXR5cGVvZiB0LmNvbnRhaW5lcil7dmFyIHI9ZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0LmNvbnRhaW5lcik7aWYoIXIpdGhyb3cgRXJyb3IoIkVsZW1lbnQgIit0LmNvbnRhaW5lcisiIGlzIG5vdCBmb3VuZCIpO3QuY29udGFpbmVyPXJ9YSh0LmNvbnRhaW5lcik/KHQuY2FudmFzPXQuY29udGFpbmVyLHQuY29udGFpbmVyPXQuY2FudmFzLnBhcmVudE5vZGUpOnQuY2FudmFzfHwodC5jYW52YXM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksdC5jb250YWluZXIuYXBwZW5kQ2hpbGQodC5jYW52YXMpLGkodCkpfWVsc2UgdC5jYW52YXN8fCh0LmNvbnRhaW5lcj1kb2N1bWVudC5ib2R5fHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsdC5jYW52YXM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksdC5jYW52YXMuc3R5bGUucG9zaXRpb249ImFic29sdXRlIix0LmNhbnZhcy5zdHlsZS50b3A9MCx0LmNhbnZhcy5zdHlsZS5sZWZ0PTAsdC5jb250YWluZXIuYXBwZW5kQ2hpbGQodC5jYW52YXMpLGkodCkpO2lmKCF0LmdsKXRyeXt0LmdsPXQuY2FudmFzLmdldENvbnRleHQoIndlYmdsIix0LmF0dHJzKX1jYXRjaChlKXt0cnl7dC5nbD10LmNhbnZhcy5nZXRDb250ZXh0KCJleHBlcmltZW50YWwtd2ViZ2wiLHQuYXR0cnMpfWNhdGNoKGUpe3QuZ2w9dC5jYW52YXMuZ2V0Q29udGV4dCgid2ViZ2wtZXhwZXJpbWVudGFsIix0LmF0dHJzKX19cmV0dXJuIHQuZ2x9fSx7InBpY2stYnktYWxpYXMiOjQzMn1dLDMwNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2U/ZS5iaW5kKCk6dC5iaW5kQnVmZmVyKHQuRUxFTUVOVF9BUlJBWV9CVUZGRVIsbnVsbCk7dmFyIG49MHx0LmdldFBhcmFtZXRlcih0Lk1BWF9WRVJURVhfQVRUUklCUyk7aWYocil7aWYoci5sZW5ndGg+bil0aHJvdyBuZXcgRXJyb3IoImdsLXZhbzogVG9vIG1hbnkgdmVydGV4IGF0dHJpYnV0ZXMiKTtmb3IodmFyIGk9MDtpPHIubGVuZ3RoOysraSl7dmFyIGE9cltpXTtpZihhLmJ1ZmZlcil7dmFyIG89YS5idWZmZXIscz1hLnNpemV8fDQsbD1hLnR5cGV8fHQuRkxPQVQsYz0hIWEubm9ybWFsaXplZCx1PWEuc3RyaWRlfHwwLGg9YS5vZmZzZXR8fDA7by5iaW5kKCksdC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpKSx0LnZlcnRleEF0dHJpYlBvaW50ZXIoaSxzLGwsYyx1LGgpfWVsc2V7aWYoIm51bWJlciI9PXR5cGVvZiBhKXQudmVydGV4QXR0cmliMWYoaSxhKTtlbHNlIGlmKDE9PT1hLmxlbmd0aCl0LnZlcnRleEF0dHJpYjFmKGksYVswXSk7ZWxzZSBpZigyPT09YS5sZW5ndGgpdC52ZXJ0ZXhBdHRyaWIyZihpLGFbMF0sYVsxXSk7ZWxzZSBpZigzPT09YS5sZW5ndGgpdC52ZXJ0ZXhBdHRyaWIzZihpLGFbMF0sYVsxXSxhWzJdKTtlbHNle2lmKDQhPT1hLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImdsLXZhbzogSW52YWxpZCB2ZXJ0ZXggYXR0cmlidXRlIik7dC52ZXJ0ZXhBdHRyaWI0ZihpLGFbMF0sYVsxXSxhWzJdLGFbM10pfXQuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpfX1mb3IoO2k8bjsrK2kpdC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaSl9ZWxzZSBmb3IodC5iaW5kQnVmZmVyKHQuQVJSQVlfQlVGRkVSLG51bGwpLGk9MDtpPG47KytpKXQuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpfX0se31dLDMwNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2RvLWJpbmQuanMiKTtmdW5jdGlvbiBpKHQpe3RoaXMuZ2w9dCx0aGlzLl9lbGVtZW50cz1udWxsLHRoaXMuX2F0dHJpYnV0ZXM9bnVsbCx0aGlzLl9lbGVtZW50c1R5cGU9dC5VTlNJR05FRF9TSE9SVH1pLnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKCl7bih0aGlzLmdsLHRoaXMuX2VsZW1lbnRzLHRoaXMuX2F0dHJpYnV0ZXMpfSxpLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCxlLHIpe3RoaXMuX2VsZW1lbnRzPWUsdGhpcy5fYXR0cmlidXRlcz10LHRoaXMuX2VsZW1lbnRzVHlwZT1yfHx0aGlzLmdsLlVOU0lHTkVEX1NIT1JUfSxpLnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7fSxpLnByb3RvdHlwZS51bmJpbmQ9ZnVuY3Rpb24oKXt9LGkucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24odCxlLHIpe3I9cnx8MDt2YXIgbj10aGlzLmdsO3RoaXMuX2VsZW1lbnRzP24uZHJhd0VsZW1lbnRzKHQsZSx0aGlzLl9lbGVtZW50c1R5cGUscik6bi5kcmF3QXJyYXlzKHQscixlKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgaSh0KX19LHsiLi9kby1iaW5kLmpzIjozMDV9XSwzMDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9kby1iaW5kLmpzIik7ZnVuY3Rpb24gaSh0LGUscixuLGksYSl7dGhpcy5sb2NhdGlvbj10LHRoaXMuZGltZW5zaW9uPWUsdGhpcy5hPXIsdGhpcy5iPW4sdGhpcy5jPWksdGhpcy5kPWF9ZnVuY3Rpb24gYSh0LGUscil7dGhpcy5nbD10LHRoaXMuX2V4dD1lLHRoaXMuaGFuZGxlPXIsdGhpcy5fYXR0cmlicz1bXSx0aGlzLl91c2VFbGVtZW50cz0hMSx0aGlzLl9lbGVtZW50c1R5cGU9dC5VTlNJR05FRF9TSE9SVH1pLnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKHQpe3N3aXRjaCh0aGlzLmRpbWVuc2lvbil7Y2FzZSAxOnQudmVydGV4QXR0cmliMWYodGhpcy5sb2NhdGlvbix0aGlzLmEpO2JyZWFrO2Nhc2UgMjp0LnZlcnRleEF0dHJpYjJmKHRoaXMubG9jYXRpb24sdGhpcy5hLHRoaXMuYik7YnJlYWs7Y2FzZSAzOnQudmVydGV4QXR0cmliM2YodGhpcy5sb2NhdGlvbix0aGlzLmEsdGhpcy5iLHRoaXMuYyk7YnJlYWs7Y2FzZSA0OnQudmVydGV4QXR0cmliNGYodGhpcy5sb2NhdGlvbix0aGlzLmEsdGhpcy5iLHRoaXMuYyx0aGlzLmQpfX0sYS5wcm90b3R5cGUuYmluZD1mdW5jdGlvbigpe3RoaXMuX2V4dC5iaW5kVmVydGV4QXJyYXlPRVModGhpcy5oYW5kbGUpO2Zvcih2YXIgdD0wO3Q8dGhpcy5fYXR0cmlicy5sZW5ndGg7Kyt0KXRoaXMuX2F0dHJpYnNbdF0uYmluZCh0aGlzLmdsKX0sYS5wcm90b3R5cGUudW5iaW5kPWZ1bmN0aW9uKCl7dGhpcy5fZXh0LmJpbmRWZXJ0ZXhBcnJheU9FUyhudWxsKX0sYS5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuX2V4dC5kZWxldGVWZXJ0ZXhBcnJheU9FUyh0aGlzLmhhbmRsZSl9LGEucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih0LGUscil7aWYodGhpcy5iaW5kKCksbih0aGlzLmdsLGUsdCksdGhpcy51bmJpbmQoKSx0aGlzLl9hdHRyaWJzLmxlbmd0aD0wLHQpZm9yKHZhciBhPTA7YTx0Lmxlbmd0aDsrK2Epe3ZhciBvPXRbYV07Im51bWJlciI9PXR5cGVvZiBvP3RoaXMuX2F0dHJpYnMucHVzaChuZXcgaShhLDEsbykpOkFycmF5LmlzQXJyYXkobykmJnRoaXMuX2F0dHJpYnMucHVzaChuZXcgaShhLG8ubGVuZ3RoLG9bMF0sb1sxXSxvWzJdLG9bM10pKX10aGlzLl91c2VFbGVtZW50cz0hIWUsdGhpcy5fZWxlbWVudHNUeXBlPXJ8fHRoaXMuZ2wuVU5TSUdORURfU0hPUlR9LGEucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24odCxlLHIpe3I9cnx8MDt2YXIgbj10aGlzLmdsO3RoaXMuX3VzZUVsZW1lbnRzP24uZHJhd0VsZW1lbnRzKHQsZSx0aGlzLl9lbGVtZW50c1R5cGUscik6bi5kcmF3QXJyYXlzKHQscixlKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBhKHQsZSxlLmNyZWF0ZVZlcnRleEFycmF5T0VTKCkpfX0seyIuL2RvLWJpbmQuanMiOjMwNX1dLDMwODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2xpYi92YW8tbmF0aXZlLmpzIiksaT10KCIuL2xpYi92YW8tZW11bGF0ZWQuanMiKTtmdW5jdGlvbiBhKHQpe3RoaXMuYmluZFZlcnRleEFycmF5T0VTPXQuYmluZFZlcnRleEFycmF5LmJpbmQodCksdGhpcy5jcmVhdGVWZXJ0ZXhBcnJheU9FUz10LmNyZWF0ZVZlcnRleEFycmF5LmJpbmQodCksdGhpcy5kZWxldGVWZXJ0ZXhBcnJheU9FUz10LmRlbGV0ZVZlcnRleEFycmF5LmJpbmQodCl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8pe3ZhciBzLGw9dC5jcmVhdGVWZXJ0ZXhBcnJheT9uZXcgYSh0KTp0LmdldEV4dGVuc2lvbigiT0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKTtyZXR1cm4ocz1sP24odCxsKTppKHQpKS51cGRhdGUoZSxyLG8pLHN9fSx7Ii4vbGliL3Zhby1lbXVsYXRlZC5qcyI6MzA2LCIuL2xpYi92YW8tbmF0aXZlLmpzIjozMDd9XSwzMDk6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0rclswXSx0WzFdPWVbMV0rclsxXSx0WzJdPWVbMl0rclsyXSx0fX0se31dLDMxMDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPW4odFswXSx0WzFdLHRbMl0pLG89bihlWzBdLGVbMV0sZVsyXSk7aShyLHIpLGkobyxvKTt2YXIgcz1hKHIsbyk7cmV0dXJuIHM+MT8wOk1hdGguYWNvcyhzKX07dmFyIG49dCgiLi9mcm9tVmFsdWVzIiksaT10KCIuL25vcm1hbGl6ZSIpLGE9dCgiLi9kb3QiKX0seyIuL2RvdCI6MzE3LCIuL2Zyb21WYWx1ZXMiOjMxOSwiLi9ub3JtYWxpemUiOjMyOH1dLDMxMTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1uZXcgRmxvYXQzMkFycmF5KDMpO3JldHVybiBlWzBdPXRbMF0sZVsxXT10WzFdLGVbMl09dFsyXSxlfX0se31dLDMxMjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdPWVbMF0sdFsxXT1lWzFdLHRbMl09ZVsyXSx0fX0se31dLDMxMzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciB0PW5ldyBGbG9hdDMyQXJyYXkoMyk7cmV0dXJuIHRbMF09MCx0WzFdPTAsdFsyXT0wLHR9fSx7fV0sMzE0OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lWzBdLGk9ZVsxXSxhPWVbMl0sbz1yWzBdLHM9clsxXSxsPXJbMl07cmV0dXJuIHRbMF09aSpsLWEqcyx0WzFdPWEqby1uKmwsdFsyXT1uKnMtaSpvLHR9fSx7fV0sMzE1OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXS10WzBdLG49ZVsxXS10WzFdLGk9ZVsyXS10WzJdO3JldHVybiBNYXRoLnNxcnQocipyK24qbitpKmkpfX0se31dLDMxNjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09ZVswXS9yWzBdLHRbMV09ZVsxXS9yWzFdLHRbMl09ZVsyXS9yWzJdLHR9fSx7fV0sMzE3OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF0qZVswXSt0WzFdKmVbMV0rdFsyXSplWzJdfX0se31dLDMxODpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpLGEsbyl7dmFyIHMsbDtlfHwoZT0zKTtyfHwocj0wKTtsPWk/TWF0aC5taW4oaSplK3IsdC5sZW5ndGgpOnQubGVuZ3RoO2ZvcihzPXI7czxsO3MrPWUpblswXT10W3NdLG5bMV09dFtzKzFdLG5bMl09dFtzKzJdLGEobixuLG8pLHRbc109blswXSx0W3MrMV09blsxXSx0W3MrMl09blsyXTtyZXR1cm4gdH07dmFyIG49dCgiLi9jcmVhdGUiKSgpfSx7Ii4vY3JlYXRlIjozMTN9XSwzMTk6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPW5ldyBGbG9hdDMyQXJyYXkoMyk7cmV0dXJuIG5bMF09dCxuWzFdPWUsblsyXT1yLG59fSx7fV0sMzIwOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXtjcmVhdGU6dCgiLi9jcmVhdGUiKSxjbG9uZTp0KCIuL2Nsb25lIiksYW5nbGU6dCgiLi9hbmdsZSIpLGZyb21WYWx1ZXM6dCgiLi9mcm9tVmFsdWVzIiksY29weTp0KCIuL2NvcHkiKSxzZXQ6dCgiLi9zZXQiKSxhZGQ6dCgiLi9hZGQiKSxzdWJ0cmFjdDp0KCIuL3N1YnRyYWN0IiksbXVsdGlwbHk6dCgiLi9tdWx0aXBseSIpLGRpdmlkZTp0KCIuL2RpdmlkZSIpLG1pbjp0KCIuL21pbiIpLG1heDp0KCIuL21heCIpLHNjYWxlOnQoIi4vc2NhbGUiKSxzY2FsZUFuZEFkZDp0KCIuL3NjYWxlQW5kQWRkIiksZGlzdGFuY2U6dCgiLi9kaXN0YW5jZSIpLHNxdWFyZWREaXN0YW5jZTp0KCIuL3NxdWFyZWREaXN0YW5jZSIpLGxlbmd0aDp0KCIuL2xlbmd0aCIpLHNxdWFyZWRMZW5ndGg6dCgiLi9zcXVhcmVkTGVuZ3RoIiksbmVnYXRlOnQoIi4vbmVnYXRlIiksaW52ZXJzZTp0KCIuL2ludmVyc2UiKSxub3JtYWxpemU6dCgiLi9ub3JtYWxpemUiKSxkb3Q6dCgiLi9kb3QiKSxjcm9zczp0KCIuL2Nyb3NzIiksbGVycDp0KCIuL2xlcnAiKSxyYW5kb206dCgiLi9yYW5kb20iKSx0cmFuc2Zvcm1NYXQ0OnQoIi4vdHJhbnNmb3JtTWF0NCIpLHRyYW5zZm9ybU1hdDM6dCgiLi90cmFuc2Zvcm1NYXQzIiksdHJhbnNmb3JtUXVhdDp0KCIuL3RyYW5zZm9ybVF1YXQiKSxyb3RhdGVYOnQoIi4vcm90YXRlWCIpLHJvdGF0ZVk6dCgiLi9yb3RhdGVZIikscm90YXRlWjp0KCIuL3JvdGF0ZVoiKSxmb3JFYWNoOnQoIi4vZm9yRWFjaCIpfX0seyIuL2FkZCI6MzA5LCIuL2FuZ2xlIjozMTAsIi4vY2xvbmUiOjMxMSwiLi9jb3B5IjozMTIsIi4vY3JlYXRlIjozMTMsIi4vY3Jvc3MiOjMxNCwiLi9kaXN0YW5jZSI6MzE1LCIuL2RpdmlkZSI6MzE2LCIuL2RvdCI6MzE3LCIuL2ZvckVhY2giOjMxOCwiLi9mcm9tVmFsdWVzIjozMTksIi4vaW52ZXJzZSI6MzIxLCIuL2xlbmd0aCI6MzIyLCIuL2xlcnAiOjMyMywiLi9tYXgiOjMyNCwiLi9taW4iOjMyNSwiLi9tdWx0aXBseSI6MzI2LCIuL25lZ2F0ZSI6MzI3LCIuL25vcm1hbGl6ZSI6MzI4LCIuL3JhbmRvbSI6MzI5LCIuL3JvdGF0ZVgiOjMzMCwiLi9yb3RhdGVZIjozMzEsIi4vcm90YXRlWiI6MzMyLCIuL3NjYWxlIjozMzMsIi4vc2NhbGVBbmRBZGQiOjMzNCwiLi9zZXQiOjMzNSwiLi9zcXVhcmVkRGlzdGFuY2UiOjMzNiwiLi9zcXVhcmVkTGVuZ3RoIjozMzcsIi4vc3VidHJhY3QiOjMzOCwiLi90cmFuc2Zvcm1NYXQzIjozMzksIi4vdHJhbnNmb3JtTWF0NCI6MzQwLCIuL3RyYW5zZm9ybVF1YXQiOjM0MX1dLDMyMTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdPTEvZVswXSx0WzFdPTEvZVsxXSx0WzJdPTEvZVsyXSx0fX0se31dLDMyMjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10WzBdLHI9dFsxXSxuPXRbMl07cmV0dXJuIE1hdGguc3FydChlKmUrcipyK24qbil9fSx7fV0sMzIzOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPWVbMF0sYT1lWzFdLG89ZVsyXTtyZXR1cm4gdFswXT1pK24qKHJbMF0taSksdFsxXT1hK24qKHJbMV0tYSksdFsyXT1vK24qKHJbMl0tbyksdH19LHt9XSwzMjQ6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPU1hdGgubWF4KGVbMF0sclswXSksdFsxXT1NYXRoLm1heChlWzFdLHJbMV0pLHRbMl09TWF0aC5tYXgoZVsyXSxyWzJdKSx0fX0se31dLDMyNTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09TWF0aC5taW4oZVswXSxyWzBdKSx0WzFdPU1hdGgubWluKGVbMV0sclsxXSksdFsyXT1NYXRoLm1pbihlWzJdLHJbMl0pLHR9fSx7fV0sMzI2OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1lWzBdKnJbMF0sdFsxXT1lWzFdKnJbMV0sdFsyXT1lWzJdKnJbMl0sdH19LHt9XSwzMjc6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT0tZVswXSx0WzFdPS1lWzFdLHRbMl09LWVbMl0sdH19LHt9XSwzMjg6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXSxpPWVbMl0sYT1yKnIrbipuK2kqaTthPjAmJihhPTEvTWF0aC5zcXJ0KGEpLHRbMF09ZVswXSphLHRbMV09ZVsxXSphLHRbMl09ZVsyXSphKTtyZXR1cm4gdH19LHt9XSwzMjk6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtlPWV8fDE7dmFyIHI9MipNYXRoLnJhbmRvbSgpKk1hdGguUEksbj0yKk1hdGgucmFuZG9tKCktMSxpPU1hdGguc3FydCgxLW4qbikqZTtyZXR1cm4gdFswXT1NYXRoLmNvcyhyKSppLHRbMV09TWF0aC5zaW4ocikqaSx0WzJdPW4qZSx0fX0se31dLDMzMDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1bXSxhPVtdO3JldHVybiBpWzBdPWVbMF0tclswXSxpWzFdPWVbMV0tclsxXSxpWzJdPWVbMl0tclsyXSxhWzBdPWlbMF0sYVsxXT1pWzFdKk1hdGguY29zKG4pLWlbMl0qTWF0aC5zaW4obiksYVsyXT1pWzFdKk1hdGguc2luKG4pK2lbMl0qTWF0aC5jb3MobiksdFswXT1hWzBdK3JbMF0sdFsxXT1hWzFdK3JbMV0sdFsyXT1hWzJdK3JbMl0sdH19LHt9XSwzMzE6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9W10sYT1bXTtyZXR1cm4gaVswXT1lWzBdLXJbMF0saVsxXT1lWzFdLXJbMV0saVsyXT1lWzJdLXJbMl0sYVswXT1pWzJdKk1hdGguc2luKG4pK2lbMF0qTWF0aC5jb3MobiksYVsxXT1pWzFdLGFbMl09aVsyXSpNYXRoLmNvcyhuKS1pWzBdKk1hdGguc2luKG4pLHRbMF09YVswXStyWzBdLHRbMV09YVsxXStyWzFdLHRbMl09YVsyXStyWzJdLHR9fSx7fV0sMzMyOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPVtdLGE9W107cmV0dXJuIGlbMF09ZVswXS1yWzBdLGlbMV09ZVsxXS1yWzFdLGlbMl09ZVsyXS1yWzJdLGFbMF09aVswXSpNYXRoLmNvcyhuKS1pWzFdKk1hdGguc2luKG4pLGFbMV09aVswXSpNYXRoLnNpbihuKStpWzFdKk1hdGguY29zKG4pLGFbMl09aVsyXSx0WzBdPWFbMF0rclswXSx0WzFdPWFbMV0rclsxXSx0WzJdPWFbMl0rclsyXSx0fX0se31dLDMzMzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09ZVswXSpyLHRbMV09ZVsxXSpyLHRbMl09ZVsyXSpyLHR9fSx7fV0sMzM0OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0WzBdPWVbMF0rclswXSpuLHRbMV09ZVsxXStyWzFdKm4sdFsyXT1lWzJdK3JbMl0qbix0fX0se31dLDMzNTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gdFswXT1lLHRbMV09cix0WzJdPW4sdH19LHt9XSwzMzY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLXRbMF0sbj1lWzFdLXRbMV0saT1lWzJdLXRbMl07cmV0dXJuIHIqcituKm4raSppfX0se31dLDMzNzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10WzBdLHI9dFsxXSxuPXRbMl07cmV0dXJuIGUqZStyKnIrbipufX0se31dLDMzODpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09ZVswXS1yWzBdLHRbMV09ZVsxXS1yWzFdLHRbMl09ZVsyXS1yWzJdLHR9fSx7fV0sMzM5OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lWzBdLGk9ZVsxXSxhPWVbMl07cmV0dXJuIHRbMF09bipyWzBdK2kqclszXSthKnJbNl0sdFsxXT1uKnJbMV0raSpyWzRdK2Eqcls3XSx0WzJdPW4qclsyXStpKnJbNV0rYSpyWzhdLHR9fSx7fV0sMzQwOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lWzBdLGk9ZVsxXSxhPWVbMl0sbz1yWzNdKm4rcls3XSppK3JbMTFdKmErclsxNV07cmV0dXJuIG89b3x8MSx0WzBdPShyWzBdKm4rcls0XSppK3JbOF0qYStyWzEyXSkvbyx0WzFdPShyWzFdKm4rcls1XSppK3JbOV0qYStyWzEzXSkvbyx0WzJdPShyWzJdKm4rcls2XSppK3JbMTBdKmErclsxNF0pL28sdH19LHt9XSwzNDE6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPXJbMF0scz1yWzFdLGw9clsyXSxjPXJbM10sdT1jKm4rcyphLWwqaSxoPWMqaStsKm4tbyphLGY9YyphK28qaS1zKm4scD0tbypuLXMqaS1sKmE7cmV0dXJuIHRbMF09dSpjK3AqLW8raCotbC1mKi1zLHRbMV09aCpjK3AqLXMrZiotby11Ki1sLHRbMl09ZipjK3AqLWwrdSotcy1oKi1vLHR9fSx7fV0sMzQyOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1lWzBdK3JbMF0sdFsxXT1lWzFdK3JbMV0sdFsyXT1lWzJdK3JbMl0sdFszXT1lWzNdK3JbM10sdH19LHt9XSwzNDM6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IEZsb2F0MzJBcnJheSg0KTtyZXR1cm4gZVswXT10WzBdLGVbMV09dFsxXSxlWzJdPXRbMl0sZVszXT10WzNdLGV9fSx7fV0sMzQ0OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09ZVswXSx0WzFdPWVbMV0sdFsyXT1lWzJdLHRbM109ZVszXSx0fX0se31dLDM0NTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciB0PW5ldyBGbG9hdDMyQXJyYXkoNCk7cmV0dXJuIHRbMF09MCx0WzFdPTAsdFsyXT0wLHRbM109MCx0fX0se31dLDM0NjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0tdFswXSxuPWVbMV0tdFsxXSxpPWVbMl0tdFsyXSxhPWVbM10tdFszXTtyZXR1cm4gTWF0aC5zcXJ0KHIqcituKm4raSppK2EqYSl9fSx7fV0sMzQ3OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1lWzBdL3JbMF0sdFsxXT1lWzFdL3JbMV0sdFsyXT1lWzJdL3JbMl0sdFszXT1lWzNdL3JbM10sdH19LHt9XSwzNDg6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXSplWzBdK3RbMV0qZVsxXSt0WzJdKmVbMl0rdFszXSplWzNdfX0se31dLDM0OTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1uZXcgRmxvYXQzMkFycmF5KDQpO3JldHVybiBpWzBdPXQsaVsxXT1lLGlbMl09cixpWzNdPW4saX19LHt9XSwzNTA6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9e2NyZWF0ZTp0KCIuL2NyZWF0ZSIpLGNsb25lOnQoIi4vY2xvbmUiKSxmcm9tVmFsdWVzOnQoIi4vZnJvbVZhbHVlcyIpLGNvcHk6dCgiLi9jb3B5Iiksc2V0OnQoIi4vc2V0IiksYWRkOnQoIi4vYWRkIiksc3VidHJhY3Q6dCgiLi9zdWJ0cmFjdCIpLG11bHRpcGx5OnQoIi4vbXVsdGlwbHkiKSxkaXZpZGU6dCgiLi9kaXZpZGUiKSxtaW46dCgiLi9taW4iKSxtYXg6dCgiLi9tYXgiKSxzY2FsZTp0KCIuL3NjYWxlIiksc2NhbGVBbmRBZGQ6dCgiLi9zY2FsZUFuZEFkZCIpLGRpc3RhbmNlOnQoIi4vZGlzdGFuY2UiKSxzcXVhcmVkRGlzdGFuY2U6dCgiLi9zcXVhcmVkRGlzdGFuY2UiKSxsZW5ndGg6dCgiLi9sZW5ndGgiKSxzcXVhcmVkTGVuZ3RoOnQoIi4vc3F1YXJlZExlbmd0aCIpLG5lZ2F0ZTp0KCIuL25lZ2F0ZSIpLGludmVyc2U6dCgiLi9pbnZlcnNlIiksbm9ybWFsaXplOnQoIi4vbm9ybWFsaXplIiksZG90OnQoIi4vZG90IiksbGVycDp0KCIuL2xlcnAiKSxyYW5kb206dCgiLi9yYW5kb20iKSx0cmFuc2Zvcm1NYXQ0OnQoIi4vdHJhbnNmb3JtTWF0NCIpLHRyYW5zZm9ybVF1YXQ6dCgiLi90cmFuc2Zvcm1RdWF0Iil9fSx7Ii4vYWRkIjozNDIsIi4vY2xvbmUiOjM0MywiLi9jb3B5IjozNDQsIi4vY3JlYXRlIjozNDUsIi4vZGlzdGFuY2UiOjM0NiwiLi9kaXZpZGUiOjM0NywiLi9kb3QiOjM0OCwiLi9mcm9tVmFsdWVzIjozNDksIi4vaW52ZXJzZSI6MzUxLCIuL2xlbmd0aCI6MzUyLCIuL2xlcnAiOjM1MywiLi9tYXgiOjM1NCwiLi9taW4iOjM1NSwiLi9tdWx0aXBseSI6MzU2LCIuL25lZ2F0ZSI6MzU3LCIuL25vcm1hbGl6ZSI6MzU4LCIuL3JhbmRvbSI6MzU5LCIuL3NjYWxlIjozNjAsIi4vc2NhbGVBbmRBZGQiOjM2MSwiLi9zZXQiOjM2MiwiLi9zcXVhcmVkRGlzdGFuY2UiOjM2MywiLi9zcXVhcmVkTGVuZ3RoIjozNjQsIi4vc3VidHJhY3QiOjM2NSwiLi90cmFuc2Zvcm1NYXQ0IjozNjYsIi4vdHJhbnNmb3JtUXVhdCI6MzY3fV0sMzUxOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09MS9lWzBdLHRbMV09MS9lWzFdLHRbMl09MS9lWzJdLHRbM109MS9lWzNdLHR9fSx7fV0sMzUyOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0scj10WzFdLG49dFsyXSxpPXRbM107cmV0dXJuIE1hdGguc3FydChlKmUrcipyK24qbitpKmkpfX0se31dLDM1MzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1lWzBdLGE9ZVsxXSxvPWVbMl0scz1lWzNdO3JldHVybiB0WzBdPWkrbiooclswXS1pKSx0WzFdPWErbiooclsxXS1hKSx0WzJdPW8rbiooclsyXS1vKSx0WzNdPXMrbiooclszXS1zKSx0fX0se31dLDM1NDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09TWF0aC5tYXgoZVswXSxyWzBdKSx0WzFdPU1hdGgubWF4KGVbMV0sclsxXSksdFsyXT1NYXRoLm1heChlWzJdLHJbMl0pLHRbM109TWF0aC5tYXgoZVszXSxyWzNdKSx0fX0se31dLDM1NTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09TWF0aC5taW4oZVswXSxyWzBdKSx0WzFdPU1hdGgubWluKGVbMV0sclsxXSksdFsyXT1NYXRoLm1pbihlWzJdLHJbMl0pLHRbM109TWF0aC5taW4oZVszXSxyWzNdKSx0fX0se31dLDM1NjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09ZVswXSpyWzBdLHRbMV09ZVsxXSpyWzFdLHRbMl09ZVsyXSpyWzJdLHRbM109ZVszXSpyWzNdLHR9fSx7fV0sMzU3OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09LWVbMF0sdFsxXT0tZVsxXSx0WzJdPS1lWzJdLHRbM109LWVbM10sdH19LHt9XSwzNTg6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXSxpPWVbMl0sYT1lWzNdLG89cipyK24qbitpKmkrYSphO28+MCYmKG89MS9NYXRoLnNxcnQobyksdFswXT1yKm8sdFsxXT1uKm8sdFsyXT1pKm8sdFszXT1hKm8pO3JldHVybiB0fX0se31dLDM1OTpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4vbm9ybWFsaXplIiksaT10KCIuL3NjYWxlIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU9ZXx8MSx0WzBdPU1hdGgucmFuZG9tKCksdFsxXT1NYXRoLnJhbmRvbSgpLHRbMl09TWF0aC5yYW5kb20oKSx0WzNdPU1hdGgucmFuZG9tKCksbih0LHQpLGkodCx0LGUpLHR9fSx7Ii4vbm9ybWFsaXplIjozNTgsIi4vc2NhbGUiOjM2MH1dLDM2MDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09ZVswXSpyLHRbMV09ZVsxXSpyLHRbMl09ZVsyXSpyLHRbM109ZVszXSpyLHR9fSx7fV0sMzYxOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0WzBdPWVbMF0rclswXSpuLHRbMV09ZVsxXStyWzFdKm4sdFsyXT1lWzJdK3JbMl0qbix0WzNdPWVbM10rclszXSpuLHR9fSx7fV0sMzYyOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4saSl7cmV0dXJuIHRbMF09ZSx0WzFdPXIsdFsyXT1uLHRbM109aSx0fX0se31dLDM2MzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0tdFswXSxuPWVbMV0tdFsxXSxpPWVbMl0tdFsyXSxhPWVbM10tdFszXTtyZXR1cm4gcipyK24qbitpKmkrYSphfX0se31dLDM2NDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10WzBdLHI9dFsxXSxuPXRbMl0saT10WzNdO3JldHVybiBlKmUrcipyK24qbitpKml9fSx7fV0sMzY1OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1lWzBdLXJbMF0sdFsxXT1lWzFdLXJbMV0sdFsyXT1lWzJdLXJbMl0sdFszXT1lWzNdLXJbM10sdH19LHt9XSwzNjY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPWVbM107cmV0dXJuIHRbMF09clswXSpuK3JbNF0qaStyWzhdKmErclsxMl0qbyx0WzFdPXJbMV0qbityWzVdKmkrcls5XSphK3JbMTNdKm8sdFsyXT1yWzJdKm4rcls2XSppK3JbMTBdKmErclsxNF0qbyx0WzNdPXJbM10qbityWzddKmkrclsxMV0qYStyWzE1XSpvLHR9fSx7fV0sMzY3OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lWzBdLGk9ZVsxXSxhPWVbMl0sbz1yWzBdLHM9clsxXSxsPXJbMl0sYz1yWzNdLHU9YypuK3MqYS1sKmksaD1jKmkrbCpuLW8qYSxmPWMqYStvKmktcypuLHA9LW8qbi1zKmktbCphO3JldHVybiB0WzBdPXUqYytwKi1vK2gqLWwtZiotcyx0WzFdPWgqYytwKi1zK2YqLW8tdSotbCx0WzJdPWYqYytwKi1sK3UqLXMtaCotbyx0WzNdPWVbM10sdH19LHt9XSwzNjg6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7cmV0dXJuIG5bMF09YSxuWzFdPXIsblsyXT1lLG5bM109dCxpWzBdfTt2YXIgbj1uZXcgVWludDhBcnJheSg0KSxpPW5ldyBGbG9hdDMyQXJyYXkobi5idWZmZXIpfSx7fV0sMzY5OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiZ2xzbC10b2tlbml6ZXIiKSxpPXQoImF0b2ItbGl0ZSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9QXJyYXkuaXNBcnJheSh0KT90Om4odCkscj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgYT1lW3JdO2lmKCJwcmVwcm9jZXNzb3IiPT09YS50eXBlKXt2YXIgbz1hLmRhdGEubWF0Y2goL1wjZGVmaW5lXHMrU0hBREVSX05BTUUoX0I2NCk/XHMrKC4rKSQvKTtpZihvJiZvWzJdKXt2YXIgcz1vWzFdLGw9b1syXTtyZXR1cm4ocz9pKGwpOmwpLnRyaW0oKX19fX19LHsiYXRvYi1saXRlIjo2MCwiZ2xzbC10b2tlbml6ZXIiOjM3Nn1dLDM3MDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZSxyLGssTT0wLEE9MCxUPWwsUz1bXSxFPVtdLEM9MSxMPTAsej0wLFA9ITEsST0hMSxPPSIiLEQ9YSxSPW47IjMwMCBlcyI9PT0odD10fHx7fSkudmVyc2lvbiYmKEQ9cyxSPW8pO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gRT1bXSxudWxsIT09dD9mdW5jdGlvbih0KXt2YXIgcjtNPTAsaz0oTys9dCkubGVuZ3RoO2Zvcig7ZT1PW01dLE08azspe3N3aXRjaChyPU0sVCl7Y2FzZSB1Ok09VigpO2JyZWFrO2Nhc2UgaDpjYXNlIGY6TT1qKCk7YnJlYWs7Y2FzZSBwOk09VSgpO2JyZWFrO2Nhc2UgZDpNPUcoKTticmVhaztjYXNlIF86TT1IKCk7YnJlYWs7Y2FzZSBnOk09VygpO2JyZWFrO2Nhc2UgYzpNPVkoKTticmVhaztjYXNlIHg6TT1OKCk7YnJlYWs7Y2FzZSBsOk09RigpfWlmKHIhPT1NKXN3aXRjaChPW3JdKXtjYXNlIlxuIjpMPTAsKytDO2JyZWFrO2RlZmF1bHQ6KytMfX1yZXR1cm4gQSs9TSxPPU8uc2xpY2UoTSksRX0odC5yZXBsYWNlP3QucmVwbGFjZSgvXHJcbi9nLCJcbiIpOnQpOmZ1bmN0aW9uKHQpe1MubGVuZ3RoJiZCKFMuam9pbigiIikpO3JldHVybiBUPWIsQigiKGVvZikiKSxFfSgpfTtmdW5jdGlvbiBCKHQpe3QubGVuZ3RoJiZFLnB1c2goe3R5cGU6d1tUXSxkYXRhOnQscG9zaXRpb246eixsaW5lOkMsY29sdW1uOkx9KX1mdW5jdGlvbiBGKCl7cmV0dXJuIFM9Uy5sZW5ndGg/W106UywiLyI9PT1yJiYiKiI9PT1lPyh6PUErTS0xLFQ9dSxyPWUsTSsxKToiLyI9PT1yJiYiLyI9PT1lPyh6PUErTS0xLFQ9aCxyPWUsTSsxKToiIyI9PT1lPyhUPWYsej1BK00sTSk6L1xzLy50ZXN0KGUpPyhUPXgsej1BK00sTSk6KFA9L1xkLy50ZXN0KGUpLEk9L1teXHdfXS8udGVzdChlKSx6PUErTSxUPVA/ZDpJP3A6YyxNKX1mdW5jdGlvbiBOKCl7cmV0dXJuL1teXHNdL2cudGVzdChlKT8oQihTLmpvaW4oIiIpKSxUPWwsTSk6KFMucHVzaChlKSxyPWUsTSsxKX1mdW5jdGlvbiBqKCl7cmV0dXJuIlxyIiE9PWUmJiJcbiIhPT1lfHwiXFwiPT09cj8oUy5wdXNoKGUpLHI9ZSxNKzEpOihCKFMuam9pbigiIikpLFQ9bCxNKX1mdW5jdGlvbiBWKCl7cmV0dXJuIi8iPT09ZSYmIioiPT09cj8oUy5wdXNoKGUpLEIoUy5qb2luKCIiKSksVD1sLE0rMSk6KFMucHVzaChlKSxyPWUsTSsxKX1mdW5jdGlvbiBVKCl7aWYoIi4iPT09ciYmL1xkLy50ZXN0KGUpKXJldHVybiBUPWcsTTtpZigiLyI9PT1yJiYiKiI9PT1lKXJldHVybiBUPXUsTTtpZigiLyI9PT1yJiYiLyI9PT1lKXJldHVybiBUPWgsTTtpZigiLiI9PT1lJiZTLmxlbmd0aCl7Zm9yKDtxKFMpOyk7cmV0dXJuIFQ9ZyxNfWlmKCI7Ij09PWV8fCIpIj09PWV8fCIoIj09PWUpe2lmKFMubGVuZ3RoKWZvcig7cShTKTspO3JldHVybiBCKGUpLFQ9bCxNKzF9dmFyIHQ9Mj09PVMubGVuZ3RoJiYiPSIhPT1lO2lmKC9bXHdfXGRcc10vLnRlc3QoZSl8fHQpe2Zvcig7cShTKTspO3JldHVybiBUPWwsTX1yZXR1cm4gUy5wdXNoKGUpLHI9ZSxNKzF9ZnVuY3Rpb24gcSh0KXtmb3IodmFyIGUscixuPTA7Oyl7aWYoZT1pLmluZGV4T2YodC5zbGljZSgwLHQubGVuZ3RoK24pLmpvaW4oIiIpKSxyPWlbZV0sLTE9PT1lKXtpZihuLS0rdC5sZW5ndGg+MCljb250aW51ZTtyPXQuc2xpY2UoMCwxKS5qb2luKCIiKX1yZXR1cm4gQihyKSx6Kz1yLmxlbmd0aCwoUz1TLnNsaWNlKHIubGVuZ3RoKSkubGVuZ3RofX1mdW5jdGlvbiBIKCl7cmV0dXJuL1teYS1mQS1GMC05XS8udGVzdChlKT8oQihTLmpvaW4oIiIpKSxUPWwsTSk6KFMucHVzaChlKSxyPWUsTSsxKX1mdW5jdGlvbiBHKCl7cmV0dXJuIi4iPT09ZT8oUy5wdXNoKGUpLFQ9ZyxyPWUsTSsxKTovW2VFXS8udGVzdChlKT8oUy5wdXNoKGUpLFQ9ZyxyPWUsTSsxKToieCI9PT1lJiYxPT09Uy5sZW5ndGgmJiIwIj09PVNbMF0/KFQ9XyxTLnB1c2goZSkscj1lLE0rMSk6L1teXGRdLy50ZXN0KGUpPyhCKFMuam9pbigiIikpLFQ9bCxNKTooUy5wdXNoKGUpLHI9ZSxNKzEpfWZ1bmN0aW9uIFcoKXtyZXR1cm4iZiI9PT1lJiYoUy5wdXNoKGUpLHI9ZSxNKz0xKSwvW2VFXS8udGVzdChlKT8oUy5wdXNoKGUpLHI9ZSxNKzEpOiItIj09PWUmJi9bZUVdLy50ZXN0KHIpPyhTLnB1c2goZSkscj1lLE0rMSk6L1teXGRdLy50ZXN0KGUpPyhCKFMuam9pbigiIikpLFQ9bCxNKTooUy5wdXNoKGUpLHI9ZSxNKzEpfWZ1bmN0aW9uIFkoKXtpZigvW15cZFx3X10vLnRlc3QoZSkpe3ZhciB0PVMuam9pbigiIik7cmV0dXJuIFQ9Ui5pbmRleE9mKHQpPi0xP3k6RC5pbmRleE9mKHQpPi0xP3Y6bSxCKFMuam9pbigiIikpLFQ9bCxNfXJldHVybiBTLnB1c2goZSkscj1lLE0rMX19O3ZhciBuPXQoIi4vbGliL2xpdGVyYWxzIiksaT10KCIuL2xpYi9vcGVyYXRvcnMiKSxhPXQoIi4vbGliL2J1aWx0aW5zIiksbz10KCIuL2xpYi9saXRlcmFscy0zMDBlcyIpLHM9dCgiLi9saWIvYnVpbHRpbnMtMzAwZXMiKSxsPTk5OSxjPTk5OTksdT0wLGg9MSxmPTIscD0zLGQ9NCxnPTUsbT02LHY9Nyx5PTgseD05LGI9MTAsXz0xMSx3PVsiYmxvY2stY29tbWVudCIsImxpbmUtY29tbWVudCIsInByZXByb2Nlc3NvciIsIm9wZXJhdG9yIiwiaW50ZWdlciIsImZsb2F0IiwiaWRlbnQiLCJidWlsdGluIiwia2V5d29yZCIsIndoaXRlc3BhY2UiLCJlb2YiLCJpbnRlZ2VyIl19LHsiLi9saWIvYnVpbHRpbnMiOjM3MiwiLi9saWIvYnVpbHRpbnMtMzAwZXMiOjM3MSwiLi9saWIvbGl0ZXJhbHMiOjM3NCwiLi9saWIvbGl0ZXJhbHMtMzAwZXMiOjM3MywiLi9saWIvb3BlcmF0b3JzIjozNzV9XSwzNzE6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCIuL2J1aWx0aW5zIik7bj1uLnNsaWNlKCkuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiEvXihnbFxffHRleHR1cmUpLy50ZXN0KHQpfSksZS5leHBvcnRzPW4uY29uY2F0KFsiZ2xfVmVydGV4SUQiLCJnbF9JbnN0YW5jZUlEIiwiZ2xfUG9zaXRpb24iLCJnbF9Qb2ludFNpemUiLCJnbF9GcmFnQ29vcmQiLCJnbF9Gcm9udEZhY2luZyIsImdsX0ZyYWdEZXB0aCIsImdsX1BvaW50Q29vcmQiLCJnbF9NYXhWZXJ0ZXhBdHRyaWJzIiwiZ2xfTWF4VmVydGV4VW5pZm9ybVZlY3RvcnMiLCJnbF9NYXhWZXJ0ZXhPdXRwdXRWZWN0b3JzIiwiZ2xfTWF4RnJhZ21lbnRJbnB1dFZlY3RvcnMiLCJnbF9NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyIsImdsX01heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMiLCJnbF9NYXhUZXh0dXJlSW1hZ2VVbml0cyIsImdsX01heEZyYWdtZW50VW5pZm9ybVZlY3RvcnMiLCJnbF9NYXhEcmF3QnVmZmVycyIsImdsX01pblByb2dyYW1UZXhlbE9mZnNldCIsImdsX01heFByb2dyYW1UZXhlbE9mZnNldCIsImdsX0RlcHRoUmFuZ2VQYXJhbWV0ZXJzIiwiZ2xfRGVwdGhSYW5nZSIsInRydW5jIiwicm91bmQiLCJyb3VuZEV2ZW4iLCJpc25hbiIsImlzaW5mIiwiZmxvYXRCaXRzVG9JbnQiLCJmbG9hdEJpdHNUb1VpbnQiLCJpbnRCaXRzVG9GbG9hdCIsInVpbnRCaXRzVG9GbG9hdCIsInBhY2tTbm9ybTJ4MTYiLCJ1bnBhY2tTbm9ybTJ4MTYiLCJwYWNrVW5vcm0yeDE2IiwidW5wYWNrVW5vcm0yeDE2IiwicGFja0hhbGYyeDE2IiwidW5wYWNrSGFsZjJ4MTYiLCJvdXRlclByb2R1Y3QiLCJ0cmFuc3Bvc2UiLCJkZXRlcm1pbmFudCIsImludmVyc2UiLCJ0ZXh0dXJlIiwidGV4dHVyZVNpemUiLCJ0ZXh0dXJlUHJvaiIsInRleHR1cmVMb2QiLCJ0ZXh0dXJlT2Zmc2V0IiwidGV4ZWxGZXRjaCIsInRleGVsRmV0Y2hPZmZzZXQiLCJ0ZXh0dXJlUHJvak9mZnNldCIsInRleHR1cmVMb2RPZmZzZXQiLCJ0ZXh0dXJlUHJvakxvZCIsInRleHR1cmVQcm9qTG9kT2Zmc2V0IiwidGV4dHVyZUdyYWQiLCJ0ZXh0dXJlR3JhZE9mZnNldCIsInRleHR1cmVQcm9qR3JhZCIsInRleHR1cmVQcm9qR3JhZE9mZnNldCJdKX0seyIuL2J1aWx0aW5zIjozNzJ9XSwzNzI6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9WyJhYnMiLCJhY29zIiwiYWxsIiwiYW55IiwiYXNpbiIsImF0YW4iLCJjZWlsIiwiY2xhbXAiLCJjb3MiLCJjcm9zcyIsImRGZHgiLCJkRmR5IiwiZGVncmVlcyIsImRpc3RhbmNlIiwiZG90IiwiZXF1YWwiLCJleHAiLCJleHAyIiwiZmFjZWZvcndhcmQiLCJmbG9vciIsImZyYWN0IiwiZ2xfQmFja0NvbG9yIiwiZ2xfQmFja0xpZ2h0TW9kZWxQcm9kdWN0IiwiZ2xfQmFja0xpZ2h0UHJvZHVjdCIsImdsX0JhY2tNYXRlcmlhbCIsImdsX0JhY2tTZWNvbmRhcnlDb2xvciIsImdsX0NsaXBQbGFuZSIsImdsX0NsaXBWZXJ0ZXgiLCJnbF9Db2xvciIsImdsX0RlcHRoUmFuZ2UiLCJnbF9EZXB0aFJhbmdlUGFyYW1ldGVycyIsImdsX0V5ZVBsYW5lUSIsImdsX0V5ZVBsYW5lUiIsImdsX0V5ZVBsYW5lUyIsImdsX0V5ZVBsYW5lVCIsImdsX0ZvZyIsImdsX0ZvZ0Nvb3JkIiwiZ2xfRm9nRnJhZ0Nvb3JkIiwiZ2xfRm9nUGFyYW1ldGVycyIsImdsX0ZyYWdDb2xvciIsImdsX0ZyYWdDb29yZCIsImdsX0ZyYWdEYXRhIiwiZ2xfRnJhZ0RlcHRoIiwiZ2xfRnJhZ0RlcHRoRVhUIiwiZ2xfRnJvbnRDb2xvciIsImdsX0Zyb250RmFjaW5nIiwiZ2xfRnJvbnRMaWdodE1vZGVsUHJvZHVjdCIsImdsX0Zyb250TGlnaHRQcm9kdWN0IiwiZ2xfRnJvbnRNYXRlcmlhbCIsImdsX0Zyb250U2Vjb25kYXJ5Q29sb3IiLCJnbF9MaWdodE1vZGVsIiwiZ2xfTGlnaHRNb2RlbFBhcmFtZXRlcnMiLCJnbF9MaWdodE1vZGVsUHJvZHVjdHMiLCJnbF9MaWdodFByb2R1Y3RzIiwiZ2xfTGlnaHRTb3VyY2UiLCJnbF9MaWdodFNvdXJjZVBhcmFtZXRlcnMiLCJnbF9NYXRlcmlhbFBhcmFtZXRlcnMiLCJnbF9NYXhDbGlwUGxhbmVzIiwiZ2xfTWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyIsImdsX01heERyYXdCdWZmZXJzIiwiZ2xfTWF4RnJhZ21lbnRVbmlmb3JtQ29tcG9uZW50cyIsImdsX01heExpZ2h0cyIsImdsX01heFRleHR1cmVDb29yZHMiLCJnbF9NYXhUZXh0dXJlSW1hZ2VVbml0cyIsImdsX01heFRleHR1cmVVbml0cyIsImdsX01heFZhcnlpbmdGbG9hdHMiLCJnbF9NYXhWZXJ0ZXhBdHRyaWJzIiwiZ2xfTWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMiLCJnbF9NYXhWZXJ0ZXhVbmlmb3JtQ29tcG9uZW50cyIsImdsX01vZGVsVmlld01hdHJpeCIsImdsX01vZGVsVmlld01hdHJpeEludmVyc2UiLCJnbF9Nb2RlbFZpZXdNYXRyaXhJbnZlcnNlVHJhbnNwb3NlIiwiZ2xfTW9kZWxWaWV3TWF0cml4VHJhbnNwb3NlIiwiZ2xfTW9kZWxWaWV3UHJvamVjdGlvbk1hdHJpeCIsImdsX01vZGVsVmlld1Byb2plY3Rpb25NYXRyaXhJbnZlcnNlIiwiZ2xfTW9kZWxWaWV3UHJvamVjdGlvbk1hdHJpeEludmVyc2VUcmFuc3Bvc2UiLCJnbF9Nb2RlbFZpZXdQcm9qZWN0aW9uTWF0cml4VHJhbnNwb3NlIiwiZ2xfTXVsdGlUZXhDb29yZDAiLCJnbF9NdWx0aVRleENvb3JkMSIsImdsX011bHRpVGV4Q29vcmQyIiwiZ2xfTXVsdGlUZXhDb29yZDMiLCJnbF9NdWx0aVRleENvb3JkNCIsImdsX011bHRpVGV4Q29vcmQ1IiwiZ2xfTXVsdGlUZXhDb29yZDYiLCJnbF9NdWx0aVRleENvb3JkNyIsImdsX05vcm1hbCIsImdsX05vcm1hbE1hdHJpeCIsImdsX05vcm1hbFNjYWxlIiwiZ2xfT2JqZWN0UGxhbmVRIiwiZ2xfT2JqZWN0UGxhbmVSIiwiZ2xfT2JqZWN0UGxhbmVTIiwiZ2xfT2JqZWN0UGxhbmVUIiwiZ2xfUG9pbnQiLCJnbF9Qb2ludENvb3JkIiwiZ2xfUG9pbnRQYXJhbWV0ZXJzIiwiZ2xfUG9pbnRTaXplIiwiZ2xfUG9zaXRpb24iLCJnbF9Qcm9qZWN0aW9uTWF0cml4IiwiZ2xfUHJvamVjdGlvbk1hdHJpeEludmVyc2UiLCJnbF9Qcm9qZWN0aW9uTWF0cml4SW52ZXJzZVRyYW5zcG9zZSIsImdsX1Byb2plY3Rpb25NYXRyaXhUcmFuc3Bvc2UiLCJnbF9TZWNvbmRhcnlDb2xvciIsImdsX1RleENvb3JkIiwiZ2xfVGV4dHVyZUVudkNvbG9yIiwiZ2xfVGV4dHVyZU1hdHJpeCIsImdsX1RleHR1cmVNYXRyaXhJbnZlcnNlIiwiZ2xfVGV4dHVyZU1hdHJpeEludmVyc2VUcmFuc3Bvc2UiLCJnbF9UZXh0dXJlTWF0cml4VHJhbnNwb3NlIiwiZ2xfVmVydGV4IiwiZ3JlYXRlclRoYW4iLCJncmVhdGVyVGhhbkVxdWFsIiwiaW52ZXJzZXNxcnQiLCJsZW5ndGgiLCJsZXNzVGhhbiIsImxlc3NUaGFuRXF1YWwiLCJsb2ciLCJsb2cyIiwibWF0cml4Q29tcE11bHQiLCJtYXgiLCJtaW4iLCJtaXgiLCJtb2QiLCJub3JtYWxpemUiLCJub3QiLCJub3RFcXVhbCIsInBvdyIsInJhZGlhbnMiLCJyZWZsZWN0IiwicmVmcmFjdCIsInNpZ24iLCJzaW4iLCJzbW9vdGhzdGVwIiwic3FydCIsInN0ZXAiLCJ0YW4iLCJ0ZXh0dXJlMkQiLCJ0ZXh0dXJlMkRMb2QiLCJ0ZXh0dXJlMkRQcm9qIiwidGV4dHVyZTJEUHJvakxvZCIsInRleHR1cmVDdWJlIiwidGV4dHVyZUN1YmVMb2QiLCJ0ZXh0dXJlMkRMb2RFWFQiLCJ0ZXh0dXJlMkRQcm9qTG9kRVhUIiwidGV4dHVyZUN1YmVMb2RFWFQiLCJ0ZXh0dXJlMkRHcmFkRVhUIiwidGV4dHVyZTJEUHJvakdyYWRFWFQiLCJ0ZXh0dXJlQ3ViZUdyYWRFWFQiXX0se31dLDM3MzpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4vbGl0ZXJhbHMiKTtlLmV4cG9ydHM9bi5zbGljZSgpLmNvbmNhdChbImxheW91dCIsImNlbnRyb2lkIiwic21vb3RoIiwiY2FzZSIsIm1hdDJ4MiIsIm1hdDJ4MyIsIm1hdDJ4NCIsIm1hdDN4MiIsIm1hdDN4MyIsIm1hdDN4NCIsIm1hdDR4MiIsIm1hdDR4MyIsIm1hdDR4NCIsInVpbnQiLCJ1dmVjMiIsInV2ZWMzIiwidXZlYzQiLCJzYW1wbGVyQ3ViZVNoYWRvdyIsInNhbXBsZXIyREFycmF5Iiwic2FtcGxlcjJEQXJyYXlTaGFkb3ciLCJpc2FtcGxlcjJEIiwiaXNhbXBsZXIzRCIsImlzYW1wbGVyQ3ViZSIsImlzYW1wbGVyMkRBcnJheSIsInVzYW1wbGVyMkQiLCJ1c2FtcGxlcjNEIiwidXNhbXBsZXJDdWJlIiwidXNhbXBsZXIyREFycmF5IiwiY29oZXJlbnQiLCJyZXN0cmljdCIsInJlYWRvbmx5Iiwid3JpdGVvbmx5IiwicmVzb3VyY2UiLCJhdG9taWNfdWludCIsIm5vcGVyc3BlY3RpdmUiLCJwYXRjaCIsInNhbXBsZSIsInN1YnJvdXRpbmUiLCJjb21tb24iLCJwYXJ0aXRpb24iLCJhY3RpdmUiLCJmaWx0ZXIiLCJpbWFnZTFEIiwiaW1hZ2UyRCIsImltYWdlM0QiLCJpbWFnZUN1YmUiLCJpaW1hZ2UxRCIsImlpbWFnZTJEIiwiaWltYWdlM0QiLCJpaW1hZ2VDdWJlIiwidWltYWdlMUQiLCJ1aW1hZ2UyRCIsInVpbWFnZTNEIiwidWltYWdlQ3ViZSIsImltYWdlMURBcnJheSIsImltYWdlMkRBcnJheSIsImlpbWFnZTFEQXJyYXkiLCJpaW1hZ2UyREFycmF5IiwidWltYWdlMURBcnJheSIsInVpbWFnZTJEQXJyYXkiLCJpbWFnZTFEU2hhZG93IiwiaW1hZ2UyRFNoYWRvdyIsImltYWdlMURBcnJheVNoYWRvdyIsImltYWdlMkRBcnJheVNoYWRvdyIsImltYWdlQnVmZmVyIiwiaWltYWdlQnVmZmVyIiwidWltYWdlQnVmZmVyIiwic2FtcGxlcjFEQXJyYXkiLCJzYW1wbGVyMURBcnJheVNoYWRvdyIsImlzYW1wbGVyMUQiLCJpc2FtcGxlcjFEQXJyYXkiLCJ1c2FtcGxlcjFEIiwidXNhbXBsZXIxREFycmF5IiwiaXNhbXBsZXIyRFJlY3QiLCJ1c2FtcGxlcjJEUmVjdCIsInNhbXBsZXJCdWZmZXIiLCJpc2FtcGxlckJ1ZmZlciIsInVzYW1wbGVyQnVmZmVyIiwic2FtcGxlcjJETVMiLCJpc2FtcGxlcjJETVMiLCJ1c2FtcGxlcjJETVMiLCJzYW1wbGVyMkRNU0FycmF5IiwiaXNhbXBsZXIyRE1TQXJyYXkiLCJ1c2FtcGxlcjJETVNBcnJheSJdKX0seyIuL2xpdGVyYWxzIjozNzR9XSwzNzQ6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9WyJwcmVjaXNpb24iLCJoaWdocCIsIm1lZGl1bXAiLCJsb3dwIiwiYXR0cmlidXRlIiwiY29uc3QiLCJ1bmlmb3JtIiwidmFyeWluZyIsImJyZWFrIiwiY29udGludWUiLCJkbyIsImZvciIsIndoaWxlIiwiaWYiLCJlbHNlIiwiaW4iLCJvdXQiLCJpbm91dCIsImZsb2F0IiwiaW50Iiwidm9pZCIsImJvb2wiLCJ0cnVlIiwiZmFsc2UiLCJkaXNjYXJkIiwicmV0dXJuIiwibWF0MiIsIm1hdDMiLCJtYXQ0IiwidmVjMiIsInZlYzMiLCJ2ZWM0IiwiaXZlYzIiLCJpdmVjMyIsIml2ZWM0IiwiYnZlYzIiLCJidmVjMyIsImJ2ZWM0Iiwic2FtcGxlcjFEIiwic2FtcGxlcjJEIiwic2FtcGxlcjNEIiwic2FtcGxlckN1YmUiLCJzYW1wbGVyMURTaGFkb3ciLCJzYW1wbGVyMkRTaGFkb3ciLCJzdHJ1Y3QiLCJhc20iLCJjbGFzcyIsInVuaW9uIiwiZW51bSIsInR5cGVkZWYiLCJ0ZW1wbGF0ZSIsInRoaXMiLCJwYWNrZWQiLCJnb3RvIiwic3dpdGNoIiwiZGVmYXVsdCIsImlubGluZSIsIm5vaW5saW5lIiwidm9sYXRpbGUiLCJwdWJsaWMiLCJzdGF0aWMiLCJleHRlcm4iLCJleHRlcm5hbCIsImludGVyZmFjZSIsImxvbmciLCJzaG9ydCIsImRvdWJsZSIsImhhbGYiLCJmaXhlZCIsInVuc2lnbmVkIiwiaW5wdXQiLCJvdXRwdXQiLCJodmVjMiIsImh2ZWMzIiwiaHZlYzQiLCJkdmVjMiIsImR2ZWMzIiwiZHZlYzQiLCJmdmVjMiIsImZ2ZWMzIiwiZnZlYzQiLCJzYW1wbGVyMkRSZWN0Iiwic2FtcGxlcjNEUmVjdCIsInNhbXBsZXIyRFJlY3RTaGFkb3ciLCJzaXplb2YiLCJjYXN0IiwibmFtZXNwYWNlIiwidXNpbmciXX0se31dLDM3NTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1bIjw8PSIsIj4+PSIsIisrIiwiLS0iLCI8PCIsIj4+IiwiPD0iLCI+PSIsIj09IiwiIT0iLCImJiIsInx8IiwiKz0iLCItPSIsIio9IiwiLz0iLCIlPSIsIiY9IiwiXl4iLCJePSIsInw9IiwiKCIsIikiLCJbIiwiXSIsIi4iLCIhIiwifiIsIioiLCIvIiwiJSIsIisiLCItIiwiPCIsIj4iLCImIiwiXiIsInwiLCI/IiwiOiIsIj0iLCIsIiwiOyIsInsiLCJ9Il19LHt9XSwzNzY6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCIuL2luZGV4Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bihlKSxpPVtdO3JldHVybiBpPShpPWkuY29uY2F0KHIodCkpKS5jb25jYXQocihudWxsKSl9fSx7Ii4vaW5kZXgiOjM3MH1dLDM3NzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXsic3RyaW5nIj09dHlwZW9mIHQmJih0PVt0XSk7Zm9yKHZhciBlPVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLHI9W10sbj0wO248dC5sZW5ndGgtMTtuKyspci5wdXNoKHRbbl0sZVtuXXx8IiIpO3JldHVybiByLnB1c2godFtuXSksci5qb2luKCIiKX19LHt9XSwzNzg6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24ocil7InVzZSBzdHJpY3QiO3ZhciBuLGk9dCgiaXMtYnJvd3NlciIpO249ImZ1bmN0aW9uIj09dHlwZW9mIHIubWF0Y2hNZWRpYT8hci5tYXRjaE1lZGlhKCIoaG92ZXI6IG5vbmUpIikubWF0Y2hlczppLGUuZXhwb3J0cz1ufSkuY2FsbCh0aGlzLCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7ImlzLWJyb3dzZXIiOjM4NX1dLDM3OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJpcy1icm93c2VyIik7ZS5leHBvcnRzPW4mJmZ1bmN0aW9uKCl7dmFyIHQ9ITE7dHJ5e3ZhciBlPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwicGFzc2l2ZSIse2dldDpmdW5jdGlvbigpe3Q9ITB9fSk7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInRlc3QiLG51bGwsZSksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRlc3QiLG51bGwsZSl9Y2F0Y2goZSl7dD0hMX1yZXR1cm4gdH0oKX0seyJpcy1icm93c2VyIjozODV9XSwzODA6W2Z1bmN0aW9uKHQsZSxyKXtyLnJlYWQ9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYSxvLHM9OCppLW4tMSxsPSgxPDxzKS0xLGM9bD4+MSx1PS03LGg9cj9pLTE6MCxmPXI/LTE6MSxwPXRbZStoXTtmb3IoaCs9ZixhPXAmKDE8PC11KS0xLHA+Pj0tdSx1Kz1zO3U+MDthPTI1NiphK3RbZStoXSxoKz1mLHUtPTgpO2ZvcihvPWEmKDE8PC11KS0xLGE+Pj0tdSx1Kz1uO3U+MDtvPTI1NipvK3RbZStoXSxoKz1mLHUtPTgpO2lmKDA9PT1hKWE9MS1jO2Vsc2V7aWYoYT09PWwpcmV0dXJuIG8/TmFOOjEvMCoocD8tMToxKTtvKz1NYXRoLnBvdygyLG4pLGEtPWN9cmV0dXJuKHA/LTE6MSkqbypNYXRoLnBvdygyLGEtbil9LHIud3JpdGU9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvLHMsbCxjPTgqYS1pLTEsdT0oMTw8YyktMSxoPXU+PjEsZj0yMz09PWk/TWF0aC5wb3coMiwtMjQpLU1hdGgucG93KDIsLTc3KTowLHA9bj8wOmEtMSxkPW4/MTotMSxnPWU8MHx8MD09PWUmJjEvZTwwPzE6MDtmb3IoZT1NYXRoLmFicyhlKSxpc05hTihlKXx8ZT09PTEvMD8ocz1pc05hTihlKT8xOjAsbz11KToobz1NYXRoLmZsb29yKE1hdGgubG9nKGUpL01hdGguTE4yKSxlKihsPU1hdGgucG93KDIsLW8pKTwxJiYoby0tLGwqPTIpLChlKz1vK2g+PTE/Zi9sOmYqTWF0aC5wb3coMiwxLWgpKSpsPj0yJiYobysrLGwvPTIpLG8raD49dT8ocz0wLG89dSk6bytoPj0xPyhzPShlKmwtMSkqTWF0aC5wb3coMixpKSxvKz1oKToocz1lKk1hdGgucG93KDIsaC0xKSpNYXRoLnBvdygyLGkpLG89MCkpO2k+PTg7dFtyK3BdPTI1NSZzLHArPWQscy89MjU2LGktPTgpO2ZvcihvPW88PGl8cyxjKz1pO2M+MDt0W3IrcF09MjU1Jm8scCs9ZCxvLz0yNTYsYy09OCk7dFtyK3AtZF18PTEyOCpnfX0se31dLDM4MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10Lmxlbmd0aDtpZigwPT09cil0aHJvdyBuZXcgRXJyb3IoIk11c3QgaGF2ZSBhdCBsZWFzdCBkKzEgcG9pbnRzIik7dmFyIGk9dFswXS5sZW5ndGg7aWYocjw9aSl0aHJvdyBuZXcgRXJyb3IoIk11c3QgaW5wdXQgYXQgbGVhc3QgZCsxIHBvaW50cyIpO3ZhciBvPXQuc2xpY2UoMCxpKzEpLHM9bi5hcHBseSh2b2lkIDAsbyk7aWYoMD09PXMpdGhyb3cgbmV3IEVycm9yKCJJbnB1dCBub3QgaW4gZ2VuZXJhbCBwb3NpdGlvbiIpO2Zvcih2YXIgbD1uZXcgQXJyYXkoaSsxKSx1PTA7dTw9aTsrK3UpbFt1XT11O3M8MCYmKGxbMF09MSxsWzFdPTApO2Zvcih2YXIgaD1uZXcgYShsLG5ldyBBcnJheShpKzEpLCExKSxmPWguYWRqYWNlbnQscD1uZXcgQXJyYXkoaSsyKSx1PTA7dTw9aTsrK3Upe2Zvcih2YXIgZD1sLnNsaWNlKCksZz0wO2c8PWk7KytnKWc9PT11JiYoZFtnXT0tMSk7dmFyIG09ZFswXTtkWzBdPWRbMV0sZFsxXT1tO3ZhciB2PW5ldyBhKGQsbmV3IEFycmF5KGkrMSksITApO2ZbdV09dixwW3VdPXZ9cFtpKzFdPWg7Zm9yKHZhciB1PTA7dTw9aTsrK3UpZm9yKHZhciBkPWZbdV0udmVydGljZXMseT1mW3VdLmFkamFjZW50LGc9MDtnPD1pOysrZyl7dmFyIHg9ZFtnXTtpZih4PDApeVtnXT1oO2Vsc2UgZm9yKHZhciBiPTA7Yjw9aTsrK2IpZltiXS52ZXJ0aWNlcy5pbmRleE9mKHgpPDAmJih5W2ddPWZbYl0pfWZvcih2YXIgXz1uZXcgYyhpLG8scCksdz0hIWUsdT1pKzE7dTxyOysrdSlfLmluc2VydCh0W3VdLHcpO3JldHVybiBfLmJvdW5kYXJ5KCl9O3ZhciBuPXQoInJvYnVzdC1vcmllbnRhdGlvbiIpLGk9dCgic2ltcGxpY2lhbC1jb21wbGV4IikuY29tcGFyZUNlbGxzO2Z1bmN0aW9uIGEodCxlLHIpe3RoaXMudmVydGljZXM9dCx0aGlzLmFkamFjZW50PWUsdGhpcy5ib3VuZGFyeT1yLHRoaXMubGFzdFZpc2l0ZWQ9LTF9ZnVuY3Rpb24gbyh0LGUscil7dGhpcy52ZXJ0aWNlcz10LHRoaXMuY2VsbD1lLHRoaXMuaW5kZXg9cn1mdW5jdGlvbiBzKHQsZSl7cmV0dXJuIGkodC52ZXJ0aWNlcyxlLnZlcnRpY2VzKX1hLnByb3RvdHlwZS5mbGlwPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy52ZXJ0aWNlc1swXTt0aGlzLnZlcnRpY2VzWzBdPXRoaXMudmVydGljZXNbMV0sdGhpcy52ZXJ0aWNlc1sxXT10O3ZhciBlPXRoaXMuYWRqYWNlbnRbMF07dGhpcy5hZGphY2VudFswXT10aGlzLmFkamFjZW50WzFdLHRoaXMuYWRqYWNlbnRbMV09ZX07dmFyIGw9W107ZnVuY3Rpb24gYyh0LGUscil7dGhpcy5kaW1lbnNpb249dCx0aGlzLnZlcnRpY2VzPWUsdGhpcy5zaW1wbGljZXM9cix0aGlzLmludGVyaW9yPXIuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiF0LmJvdW5kYXJ5fSksdGhpcy50dXBsZT1uZXcgQXJyYXkodCsxKTtmb3IodmFyIGk9MDtpPD10OysraSl0aGlzLnR1cGxlW2ldPXRoaXMudmVydGljZXNbaV07dmFyIGE9bFt0XTthfHwoYT1sW3RdPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bImZ1bmN0aW9uIG9yaWVudCgpe3ZhciB0dXBsZT10aGlzLnR1cGxlO3JldHVybiB0ZXN0KCJdLHI9MDtyPD10OysrcilyPjAmJmUucHVzaCgiLCIpLGUucHVzaCgidHVwbGVbIixyLCJdIik7ZS5wdXNoKCIpfXJldHVybiBvcmllbnQiKTt2YXIgaT1uZXcgRnVuY3Rpb24oInRlc3QiLGUuam9pbigiIikpLGE9blt0KzFdO3JldHVybiBhfHwoYT1uKSxpKGEpfSh0KSksdGhpcy5vcmllbnQ9YX12YXIgdT1jLnByb3RvdHlwZTt1LmhhbmRsZUJvdW5kYXJ5RGVnZW5lcmFjeT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuZGltZW5zaW9uLG49dGhpcy52ZXJ0aWNlcy5sZW5ndGgtMSxpPXRoaXMudHVwbGUsYT10aGlzLnZlcnRpY2VzLG89W3RdO2Zvcih0Lmxhc3RWaXNpdGVkPS1uO28ubGVuZ3RoPjA7KXsodD1vLnBvcCgpKS52ZXJ0aWNlcztmb3IodmFyIHM9dC5hZGphY2VudCxsPTA7bDw9cjsrK2wpe3ZhciBjPXNbbF07aWYoYy5ib3VuZGFyeSYmIShjLmxhc3RWaXNpdGVkPD0tbikpe2Zvcih2YXIgdT1jLnZlcnRpY2VzLGg9MDtoPD1yOysraCl7dmFyIGY9dVtoXTtpW2hdPWY8MD9lOmFbZl19dmFyIHA9dGhpcy5vcmllbnQoKTtpZihwPjApcmV0dXJuIGM7Yy5sYXN0VmlzaXRlZD0tbiwwPT09cCYmby5wdXNoKGMpfX19cmV0dXJuIG51bGx9LHUud2Fsaz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMudmVydGljZXMubGVuZ3RoLTEsbj10aGlzLmRpbWVuc2lvbixpPXRoaXMudmVydGljZXMsYT10aGlzLnR1cGxlLG89ZT90aGlzLmludGVyaW9yLmxlbmd0aCpNYXRoLnJhbmRvbSgpfDA6dGhpcy5pbnRlcmlvci5sZW5ndGgtMSxzPXRoaXMuaW50ZXJpb3Jbb107dDpmb3IoOyFzLmJvdW5kYXJ5Oyl7Zm9yKHZhciBsPXMudmVydGljZXMsYz1zLmFkamFjZW50LHU9MDt1PD1uOysrdSlhW3VdPWlbbFt1XV07cy5sYXN0VmlzaXRlZD1yO2Zvcih1PTA7dTw9bjsrK3Upe3ZhciBoPWNbdV07aWYoIShoLmxhc3RWaXNpdGVkPj1yKSl7dmFyIGY9YVt1XTthW3VdPXQ7dmFyIHA9dGhpcy5vcmllbnQoKTtpZihhW3VdPWYscDwwKXtzPWg7Y29udGludWUgdH1oLmJvdW5kYXJ5P2gubGFzdFZpc2l0ZWQ9LXI6aC5sYXN0VmlzaXRlZD1yfX1yZXR1cm59cmV0dXJuIHN9LHUuYWRkUGVha3M9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLnZlcnRpY2VzLmxlbmd0aC0xLG49dGhpcy5kaW1lbnNpb24saT10aGlzLnZlcnRpY2VzLGw9dGhpcy50dXBsZSxjPXRoaXMuaW50ZXJpb3IsdT10aGlzLnNpbXBsaWNlcyxoPVtlXTtlLmxhc3RWaXNpdGVkPXIsZS52ZXJ0aWNlc1tlLnZlcnRpY2VzLmluZGV4T2YoLTEpXT1yLGUuYm91bmRhcnk9ITEsYy5wdXNoKGUpO2Zvcih2YXIgZj1bXTtoLmxlbmd0aD4wOyl7dmFyIHA9KGU9aC5wb3AoKSkudmVydGljZXMsZD1lLmFkamFjZW50LGc9cC5pbmRleE9mKHIpO2lmKCEoZzwwKSlmb3IodmFyIG09MDttPD1uOysrbSlpZihtIT09Zyl7dmFyIHY9ZFttXTtpZih2LmJvdW5kYXJ5JiYhKHYubGFzdFZpc2l0ZWQ+PXIpKXt2YXIgeT12LnZlcnRpY2VzO2lmKHYubGFzdFZpc2l0ZWQhPT0tcil7Zm9yKHZhciB4PTAsYj0wO2I8PW47KytiKXlbYl08MD8oeD1iLGxbYl09dCk6bFtiXT1pW3lbYl1dO2lmKHRoaXMub3JpZW50KCk+MCl7eVt4XT1yLHYuYm91bmRhcnk9ITEsYy5wdXNoKHYpLGgucHVzaCh2KSx2Lmxhc3RWaXNpdGVkPXI7Y29udGludWV9di5sYXN0VmlzaXRlZD0tcn12YXIgXz12LmFkamFjZW50LHc9cC5zbGljZSgpLGs9ZC5zbGljZSgpLE09bmV3IGEodyxrLCEwKTt1LnB1c2goTSk7dmFyIEE9Xy5pbmRleE9mKGUpO2lmKCEoQTwwKSl7X1tBXT1NLGtbZ109dix3W21dPS0xLGtbbV09ZSxkW21dPU0sTS5mbGlwKCk7Zm9yKGI9MDtiPD1uOysrYil7dmFyIFQ9d1tiXTtpZighKFQ8MHx8VD09PXIpKXtmb3IodmFyIFM9bmV3IEFycmF5KG4tMSksRT0wLEM9MDtDPD1uOysrQyl7dmFyIEw9d1tDXTtMPDB8fEM9PT1ifHwoU1tFKytdPUwpfWYucHVzaChuZXcgbyhTLE0sYikpfX19fX19Zi5zb3J0KHMpO2ZvcihtPTA7bSsxPGYubGVuZ3RoO20rPTIpe3ZhciB6PWZbbV0sUD1mW20rMV0sST16LmluZGV4LE89UC5pbmRleDtJPDB8fE88MHx8KHouY2VsbC5hZGphY2VudFt6LmluZGV4XT1QLmNlbGwsUC5jZWxsLmFkamFjZW50W1AuaW5kZXhdPXouY2VsbCl9fSx1Lmluc2VydD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMudmVydGljZXM7ci5wdXNoKHQpO3ZhciBuPXRoaXMud2Fsayh0LGUpO2lmKG4pe2Zvcih2YXIgaT10aGlzLmRpbWVuc2lvbixhPXRoaXMudHVwbGUsbz0wO288PWk7KytvKXt2YXIgcz1uLnZlcnRpY2VzW29dO2Fbb109czwwP3Q6cltzXX12YXIgbD10aGlzLm9yaWVudChhKTtsPDB8fCgwIT09bHx8KG49dGhpcy5oYW5kbGVCb3VuZGFyeURlZ2VuZXJhY3kobix0KSkpJiZ0aGlzLmFkZFBlYWtzKHQsbil9fSx1LmJvdW5kYXJ5PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuZGltZW5zaW9uLGU9W10scj10aGlzLnNpbXBsaWNlcyxuPXIubGVuZ3RoLGk9MDtpPG47KytpKXt2YXIgYT1yW2ldO2lmKGEuYm91bmRhcnkpe2Zvcih2YXIgbz1uZXcgQXJyYXkodCkscz1hLnZlcnRpY2VzLGw9MCxjPTAsdT0wO3U8PXQ7Kyt1KXNbdV0+PTA/b1tsKytdPXNbdV06Yz0xJnU7aWYoYz09PSgxJnQpKXt2YXIgaD1vWzBdO29bMF09b1sxXSxvWzFdPWh9ZS5wdXNoKG8pfX1yZXR1cm4gZX19LHsicm9idXN0LW9yaWVudGF0aW9uIjo0NzEsInNpbXBsaWNpYWwtY29tcGxleCI6NDgxfV0sMzgyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImJpbmFyeS1zZWFyY2gtYm91bmRzIiksaT0wLGE9MTtmdW5jdGlvbiBvKHQsZSxyLG4saSl7dGhpcy5taWQ9dCx0aGlzLmxlZnQ9ZSx0aGlzLnJpZ2h0PXIsdGhpcy5sZWZ0UG9pbnRzPW4sdGhpcy5yaWdodFBvaW50cz1pLHRoaXMuY291bnQ9KGU/ZS5jb3VudDowKSsocj9yLmNvdW50OjApK24ubGVuZ3RofWUuZXhwb3J0cz1mdW5jdGlvbih0KXtpZighdHx8MD09PXQubGVuZ3RoKXJldHVybiBuZXcgeChudWxsKTtyZXR1cm4gbmV3IHgoeSh0KSl9O3ZhciBzPW8ucHJvdG90eXBlO2Z1bmN0aW9uIGwodCxlKXt0Lm1pZD1lLm1pZCx0LmxlZnQ9ZS5sZWZ0LHQucmlnaHQ9ZS5yaWdodCx0LmxlZnRQb2ludHM9ZS5sZWZ0UG9pbnRzLHQucmlnaHRQb2ludHM9ZS5yaWdodFBvaW50cyx0LmNvdW50PWUuY291bnR9ZnVuY3Rpb24gYyh0LGUpe3ZhciByPXkoZSk7dC5taWQ9ci5taWQsdC5sZWZ0PXIubGVmdCx0LnJpZ2h0PXIucmlnaHQsdC5sZWZ0UG9pbnRzPXIubGVmdFBvaW50cyx0LnJpZ2h0UG9pbnRzPXIucmlnaHRQb2ludHMsdC5jb3VudD1yLmNvdW50fWZ1bmN0aW9uIHUodCxlKXt2YXIgcj10LmludGVydmFscyhbXSk7ci5wdXNoKGUpLGModCxyKX1mdW5jdGlvbiBoKHQsZSl7dmFyIHI9dC5pbnRlcnZhbHMoW10pLG49ci5pbmRleE9mKGUpO3JldHVybiBuPDA/aTooci5zcGxpY2UobiwxKSxjKHQsciksYSl9ZnVuY3Rpb24gZih0LGUscil7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aCYmdFtuXVswXTw9ZTsrK24pe3ZhciBpPXIodFtuXSk7aWYoaSlyZXR1cm4gaX19ZnVuY3Rpb24gcCh0LGUscil7Zm9yKHZhciBuPXQubGVuZ3RoLTE7bj49MCYmdFtuXVsxXT49ZTstLW4pe3ZhciBpPXIodFtuXSk7aWYoaSlyZXR1cm4gaX19ZnVuY3Rpb24gZCh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7KytyKXt2YXIgbj1lKHRbcl0pO2lmKG4pcmV0dXJuIG59fWZ1bmN0aW9uIGcodCxlKXtyZXR1cm4gdC1lfWZ1bmN0aW9uIG0odCxlKXt2YXIgcj10WzBdLWVbMF07cmV0dXJuIHJ8fHRbMV0tZVsxXX1mdW5jdGlvbiB2KHQsZSl7dmFyIHI9dFsxXS1lWzFdO3JldHVybiByfHx0WzBdLWVbMF19ZnVuY3Rpb24geSh0KXtpZigwPT09dC5sZW5ndGgpcmV0dXJuIG51bGw7Zm9yKHZhciBlPVtdLHI9MDtyPHQubGVuZ3RoOysrcillLnB1c2godFtyXVswXSx0W3JdWzFdKTtlLnNvcnQoZyk7dmFyIG49ZVtlLmxlbmd0aD4+MV0saT1bXSxhPVtdLHM9W107Zm9yKHI9MDtyPHQubGVuZ3RoOysrcil7dmFyIGw9dFtyXTtsWzFdPG4/aS5wdXNoKGwpOm48bFswXT9hLnB1c2gobCk6cy5wdXNoKGwpfXZhciBjPXMsdT1zLnNsaWNlKCk7cmV0dXJuIGMuc29ydChtKSx1LnNvcnQodiksbmV3IG8obix5KGkpLHkoYSksYyx1KX1mdW5jdGlvbiB4KHQpe3RoaXMucm9vdD10fXMuaW50ZXJ2YWxzPWZ1bmN0aW9uKHQpe3JldHVybiB0LnB1c2guYXBwbHkodCx0aGlzLmxlZnRQb2ludHMpLHRoaXMubGVmdCYmdGhpcy5sZWZ0LmludGVydmFscyh0KSx0aGlzLnJpZ2h0JiZ0aGlzLnJpZ2h0LmludGVydmFscyh0KSx0fSxzLmluc2VydD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmNvdW50LXRoaXMubGVmdFBvaW50cy5sZW5ndGg7aWYodGhpcy5jb3VudCs9MSx0WzFdPHRoaXMubWlkKXRoaXMubGVmdD80Kih0aGlzLmxlZnQuY291bnQrMSk+MyooZSsxKT91KHRoaXMsdCk6dGhpcy5sZWZ0Lmluc2VydCh0KTp0aGlzLmxlZnQ9eShbdF0pO2Vsc2UgaWYodFswXT50aGlzLm1pZCl0aGlzLnJpZ2h0PzQqKHRoaXMucmlnaHQuY291bnQrMSk+MyooZSsxKT91KHRoaXMsdCk6dGhpcy5yaWdodC5pbnNlcnQodCk6dGhpcy5yaWdodD15KFt0XSk7ZWxzZXt2YXIgcj1uLmdlKHRoaXMubGVmdFBvaW50cyx0LG0pLGk9bi5nZSh0aGlzLnJpZ2h0UG9pbnRzLHQsdik7dGhpcy5sZWZ0UG9pbnRzLnNwbGljZShyLDAsdCksdGhpcy5yaWdodFBvaW50cy5zcGxpY2UoaSwwLHQpfX0scy5yZW1vdmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jb3VudC10aGlzLmxlZnRQb2ludHM7aWYodFsxXTx0aGlzLm1pZClyZXR1cm4gdGhpcy5sZWZ0PzQqKHRoaXMucmlnaHQ/dGhpcy5yaWdodC5jb3VudDowKT4zKihlLTEpP2godGhpcyx0KToyPT09KGM9dGhpcy5sZWZ0LnJlbW92ZSh0KSk/KHRoaXMubGVmdD1udWxsLHRoaXMuY291bnQtPTEsYSk6KGM9PT1hJiYodGhpcy5jb3VudC09MSksYyk6aTtpZih0WzBdPnRoaXMubWlkKXJldHVybiB0aGlzLnJpZ2h0PzQqKHRoaXMubGVmdD90aGlzLmxlZnQuY291bnQ6MCk+MyooZS0xKT9oKHRoaXMsdCk6Mj09PShjPXRoaXMucmlnaHQucmVtb3ZlKHQpKT8odGhpcy5yaWdodD1udWxsLHRoaXMuY291bnQtPTEsYSk6KGM9PT1hJiYodGhpcy5jb3VudC09MSksYyk6aTtpZigxPT09dGhpcy5jb3VudClyZXR1cm4gdGhpcy5sZWZ0UG9pbnRzWzBdPT09dD8yOmk7aWYoMT09PXRoaXMubGVmdFBvaW50cy5sZW5ndGgmJnRoaXMubGVmdFBvaW50c1swXT09PXQpe2lmKHRoaXMubGVmdCYmdGhpcy5yaWdodCl7Zm9yKHZhciByPXRoaXMsbz10aGlzLmxlZnQ7by5yaWdodDspcj1vLG89by5yaWdodDtpZihyPT09dGhpcylvLnJpZ2h0PXRoaXMucmlnaHQ7ZWxzZXt2YXIgcz10aGlzLmxlZnQsYz10aGlzLnJpZ2h0O3IuY291bnQtPW8uY291bnQsci5yaWdodD1vLmxlZnQsby5sZWZ0PXMsby5yaWdodD1jfWwodGhpcyxvKSx0aGlzLmNvdW50PSh0aGlzLmxlZnQ/dGhpcy5sZWZ0LmNvdW50OjApKyh0aGlzLnJpZ2h0P3RoaXMucmlnaHQuY291bnQ6MCkrdGhpcy5sZWZ0UG9pbnRzLmxlbmd0aH1lbHNlIHRoaXMubGVmdD9sKHRoaXMsdGhpcy5sZWZ0KTpsKHRoaXMsdGhpcy5yaWdodCk7cmV0dXJuIGF9Zm9yKHM9bi5nZSh0aGlzLmxlZnRQb2ludHMsdCxtKTtzPHRoaXMubGVmdFBvaW50cy5sZW5ndGgmJnRoaXMubGVmdFBvaW50c1tzXVswXT09PXRbMF07KytzKWlmKHRoaXMubGVmdFBvaW50c1tzXT09PXQpe3RoaXMuY291bnQtPTEsdGhpcy5sZWZ0UG9pbnRzLnNwbGljZShzLDEpO2ZvcihjPW4uZ2UodGhpcy5yaWdodFBvaW50cyx0LHYpO2M8dGhpcy5yaWdodFBvaW50cy5sZW5ndGgmJnRoaXMucmlnaHRQb2ludHNbY11bMV09PT10WzFdOysrYylpZih0aGlzLnJpZ2h0UG9pbnRzW2NdPT09dClyZXR1cm4gdGhpcy5yaWdodFBvaW50cy5zcGxpY2UoYywxKSxhfXJldHVybiBpfSxzLnF1ZXJ5UG9pbnQ9ZnVuY3Rpb24odCxlKXtpZih0PHRoaXMubWlkKXtpZih0aGlzLmxlZnQpaWYocj10aGlzLmxlZnQucXVlcnlQb2ludCh0LGUpKXJldHVybiByO3JldHVybiBmKHRoaXMubGVmdFBvaW50cyx0LGUpfWlmKHQ+dGhpcy5taWQpe3ZhciByO2lmKHRoaXMucmlnaHQpaWYocj10aGlzLnJpZ2h0LnF1ZXJ5UG9pbnQodCxlKSlyZXR1cm4gcjtyZXR1cm4gcCh0aGlzLnJpZ2h0UG9pbnRzLHQsZSl9cmV0dXJuIGQodGhpcy5sZWZ0UG9pbnRzLGUpfSxzLnF1ZXJ5SW50ZXJ2YWw9ZnVuY3Rpb24odCxlLHIpe3ZhciBuO2lmKHQ8dGhpcy5taWQmJnRoaXMubGVmdCYmKG49dGhpcy5sZWZ0LnF1ZXJ5SW50ZXJ2YWwodCxlLHIpKSlyZXR1cm4gbjtpZihlPnRoaXMubWlkJiZ0aGlzLnJpZ2h0JiYobj10aGlzLnJpZ2h0LnF1ZXJ5SW50ZXJ2YWwodCxlLHIpKSlyZXR1cm4gbjtyZXR1cm4gZTx0aGlzLm1pZD9mKHRoaXMubGVmdFBvaW50cyxlLHIpOnQ+dGhpcy5taWQ/cCh0aGlzLnJpZ2h0UG9pbnRzLHQscik6ZCh0aGlzLmxlZnRQb2ludHMscil9O3ZhciBiPXgucHJvdG90eXBlO2IuaW5zZXJ0PWZ1bmN0aW9uKHQpe3RoaXMucm9vdD90aGlzLnJvb3QuaW5zZXJ0KHQpOnRoaXMucm9vdD1uZXcgbyh0WzBdLG51bGwsbnVsbCxbdF0sW3RdKX0sYi5yZW1vdmU9ZnVuY3Rpb24odCl7aWYodGhpcy5yb290KXt2YXIgZT10aGlzLnJvb3QucmVtb3ZlKHQpO3JldHVybiAyPT09ZSYmKHRoaXMucm9vdD1udWxsKSxlIT09aX1yZXR1cm4hMX0sYi5xdWVyeVBvaW50PWZ1bmN0aW9uKHQsZSl7aWYodGhpcy5yb290KXJldHVybiB0aGlzLnJvb3QucXVlcnlQb2ludCh0LGUpfSxiLnF1ZXJ5SW50ZXJ2YWw9ZnVuY3Rpb24odCxlLHIpe2lmKHQ8PWUmJnRoaXMucm9vdClyZXR1cm4gdGhpcy5yb290LnF1ZXJ5SW50ZXJ2YWwodCxlLHIpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYiwiY291bnQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yb290P3RoaXMucm9vdC5jb3VudDowfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLCJpbnRlcnZhbHMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yb290P3RoaXMucm9vdC5pbnRlcnZhbHMoW10pOltdfX0pfSx7ImJpbmFyeS1zZWFyY2gtYm91bmRzIjo3OX1dLDM4MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtlPWV8fG5ldyBBcnJheSh0Lmxlbmd0aCk7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDsrK3IpZVt0W3JdXT1yO3JldHVybiBlfX0se31dLDM4NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0KSxyPTA7cjx0OysrcillW3JdPXI7cmV0dXJuIGV9fSx7fV0sMzg1OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPSEwfSx7fV0sMzg2OltmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0KXtyZXR1cm4hIXQuY29uc3RydWN0b3ImJiJmdW5jdGlvbiI9PXR5cGVvZiB0LmNvbnN0cnVjdG9yLmlzQnVmZmVyJiZ0LmNvbnN0cnVjdG9yLmlzQnVmZmVyKHQpfWUuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9dCYmKG4odCl8fGZ1bmN0aW9uKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0LnJlYWRGbG9hdExFJiYiZnVuY3Rpb24iPT10eXBlb2YgdC5zbGljZSYmbih0LnNsaWNlKDAsMCkpfSh0KXx8ISF0Ll9pc0J1ZmZlcil9fSx7fV0sMzg3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz0idW5kZWZpbmVkIiE9dHlwZW9mIG5hdmlnYXRvciYmKC9NU0lFLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpfHwvVHJpZGVudFwvLy50ZXN0KG5hdmlnYXRvci5hcHBWZXJzaW9uKSl9LHt9XSwzODg6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dHx8InVuZGVmaW5lZCI9PXR5cGVvZiBuYXZpZ2F0b3J8fCh0PW5hdmlnYXRvci51c2VyQWdlbnQpO3QmJnQuaGVhZGVycyYmInN0cmluZyI9PXR5cGVvZiB0LmhlYWRlcnNbInVzZXItYWdlbnQiXSYmKHQ9dC5oZWFkZXJzWyJ1c2VyLWFnZW50Il0pO3JldHVybiJzdHJpbmciPT10eXBlb2YgdCYmKC8oYW5kcm9pZHxiYlxkK3xtZWVnbykuK21vYmlsZXxhdmFudGdvfGJhZGFcL3xibGFja2JlcnJ5fGJsYXplcnxjb21wYWx8ZWxhaW5lfGZlbm5lY3xoaXB0b3B8aWVtb2JpbGV8aXAoaG9uZXxvZCl8aXJpc3xraW5kbGV8bGdlIHxtYWVtb3xtaWRwfG1tcHxtb2JpbGUuK2ZpcmVmb3h8bmV0ZnJvbnR8b3BlcmEgbShvYnxpbilpfHBhbG0oIG9zKT98cGhvbmV8cChpeGl8cmUpXC98cGx1Y2tlcnxwb2NrZXR8cHNwfHNlcmllcyg0fDYpMHxzeW1iaWFufHRyZW98dXBcLihicm93c2VyfGxpbmspfHZvZGFmb25lfHdhcHx3aW5kb3dzIChjZXxwaG9uZSl8eGRhfHhpaW5vL2kudGVzdCh0KXx8LzEyMDd8NjMxMHw2NTkwfDNnc298NHRocHw1MFsxLTZdaXw3NzBzfDgwMnN8YSB3YXxhYmFjfGFjKGVyfG9vfHNcLSl8YWkoa298cm4pfGFsKGF2fGNhfGNvKXxhbW9pfGFuKGV4fG55fHl3KXxhcHR1fGFyKGNofGdvKXxhcyh0ZXx1cyl8YXR0d3xhdShkaXxcLW18ciB8cyApfGF2YW58YmUoY2t8bGx8bnEpfGJpKGxifHJkKXxibChhY3xheil8YnIoZXx2KXd8YnVtYnxid1wtKG58dSl8YzU1XC98Y2FwaXxjY3dhfGNkbVwtfGNlbGx8Y2h0bXxjbGRjfGNtZFwtfGNvKG1wfG5kKXxjcmF3fGRhKGl0fGxsfG5nKXxkYnRlfGRjXC1zfGRldml8ZGljYXxkbW9ifGRvKGN8cClvfGRzKDEyfFwtZCl8ZWwoNDl8YWkpfGVtKGwyfHVsKXxlcihpY3xrMCl8ZXNsOHxleihbNC03XTB8b3N8d2F8emUpfGZldGN8Zmx5KFwtfF8pfGcxIHV8ZzU2MHxnZW5lfGdmXC01fGdcLW1vfGdvKFwud3xvZCl8Z3IoYWR8dW4pfGhhaWV8aGNpdHxoZFwtKG18cHx0KXxoZWlcLXxoaShwdHx0YSl8aHAoIGl8aXApfGhzXC1jfGh0KGMoXC18IHxffGF8Z3xwfHN8dCl8dHApfGh1KGF3fHRjKXxpXC0oMjB8Z298bWEpfGkyMzB8aWFjKCB8XC18XC8pfGlicm98aWRlYXxpZzAxfGlrb218aW0xa3xpbm5vfGlwYXF8aXJpc3xqYSh0fHYpYXxqYnJvfGplbXV8amlnc3xrZGRpfGtlaml8a2d0KCB8XC8pfGtsb258a3B0IHxrd2NcLXxreW8oY3xrKXxsZShub3x4aSl8bGcoIGd8XC8oa3xsfHUpfDUwfDU0fFwtW2Etd10pfGxpYnd8bHlueHxtMVwtd3xtM2dhfG01MFwvfG1hKHRlfHVpfHhvKXxtYygwMXwyMXxjYSl8bVwtY3J8bWUocmN8cmkpfG1pKG84fG9hfHRzKXxtbWVmfG1vKDAxfDAyfGJpfGRlfGRvfHQoXC18IHxvfHYpfHp6KXxtdCg1MHxwMXx2ICl8bXdicHxteXdhfG4xMFswLTJdfG4yMFsyLTNdfG4zMCgwfDIpfG41MCgwfDJ8NSl8bjcoMCgwfDEpfDEwKXxuZSgoY3xtKVwtfG9ufHRmfHdmfHdnfHd0KXxub2soNnxpKXxuenBofG8yaW18b3AodGl8d3YpfG9yYW58b3dnMXxwODAwfHBhbihhfGR8dCl8cGR4Z3xwZygxM3xcLShbMS04XXxjKSl8cGhpbHxwaXJlfHBsKGF5fHVjKXxwblwtMnxwbyhja3xydHxzZSl8cHJveHxwc2lvfHB0XC1nfHFhXC1hfHFjKDA3fDEyfDIxfDMyfDYwfFwtWzItN118aVwtKXxxdGVrfHIzODB8cjYwMHxyYWtzfHJpbTl8cm8odmV8em8pfHM1NVwvfHNhKGdlfG1hfG1tfG1zfG55fHZhKXxzYygwMXxoXC18b298cFwtKXxzZGtcL3xzZShjKFwtfDB8MSl8NDd8bWN8bmR8cmkpfHNnaFwtfHNoYXJ8c2llKFwtfG0pfHNrXC0wfHNsKDQ1fGlkKXxzbShhbHxhcnxiM3xpdHx0NSl8c28oZnR8bnkpfHNwKDAxfGhcLXx2XC18diApfHN5KDAxfG1iKXx0MigxOHw1MCl8dDYoMDB8MTB8MTgpfHRhKGd0fGxrKXx0Y2xcLXx0ZGdcLXx0ZWwoaXxtKXx0aW1cLXx0XC1tb3x0byhwbHxzaCl8dHMoNzB8bVwtfG0zfG01KXx0eFwtOXx1cChcLmJ8ZzF8c2kpfHV0c3R8djQwMHx2NzUwfHZlcml8dmkocmd8dGUpfHZrKDQwfDVbMC0zXXxcLXYpfHZtNDB8dm9kYXx2dWxjfHZ4KDUyfDUzfDYwfDYxfDcwfDgwfDgxfDgzfDg1fDk4KXx3M2MoXC18ICl8d2ViY3x3aGl0fHdpKGcgfG5jfG53KXx3bWxifHdvbnV8eDcwMHx5YXNcLXx5b3VyfHpldG98enRlXC0vaS50ZXN0KHQuc3Vic3RyKDAsNCkpKX19LHt9XSwzODk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXR5cGVvZiB0O3JldHVybiBudWxsIT09dCYmKCJvYmplY3QiPT09ZXx8ImZ1bmN0aW9uIj09PWUpfX0se31dLDM5MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZTtyZXR1cm4iW29iamVjdCBPYmplY3RdIj09PW4uY2FsbCh0KSYmKG51bGw9PT0oZT1PYmplY3QuZ2V0UHJvdG90eXBlT2YodCkpfHxlPT09T2JqZWN0LmdldFByb3RvdHlwZU9mKHt9KSl9fSx7fV0sMzkxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQmJih0PXQudHJpbSgpLCEhKC9eW216bGh2Y3NxdGFdXHMqWy0rLjAtOV1bXm1saHZ6Y3NxdGFdKy9pLnRlc3QodCkmJi9bXGR6XSQvaS50ZXN0KHQpJiZ0Lmxlbmd0aD40KSl9fSx7fV0sMzkyOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdCooMS1yKStlKnJ9fSx7fV0sMzkzOltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQpeyFmdW5jdGlvbih0LG4peyJvYmplY3QiPT10eXBlb2YgciYmInVuZGVmaW5lZCIhPXR5cGVvZiBlP2UuZXhwb3J0cz1uKCk6dC5tYXBib3hnbD1uKCl9KHRoaXMsZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIGUscixuO2Z1bmN0aW9uIGkodCxpKXtpZihlKWlmKHIpe3ZhciBhPSJ2YXIgc2hhcmVkQ2h1bmsgPSB7fTsgKCIrZSsiKShzaGFyZWRDaHVuayk7ICgiK3IrIikoc2hhcmVkQ2h1bmspOyIsbz17fTtlKG8pLChuPWkobykpLndvcmtlclVybD13aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbYV0se3R5cGU6InRleHQvamF2YXNjcmlwdCJ9KSl9ZWxzZSByPWk7ZWxzZSBlPWl9cmV0dXJuIGkoMCxmdW5jdGlvbihlKXt2YXIgcj0idW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6InVuZGVmaW5lZCIhPXR5cGVvZiB0P3Q6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6e307ZnVuY3Rpb24gbih0KXtyZXR1cm4gdCYmdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCwiZGVmYXVsdCIpP3QuZGVmYXVsdDp0fWZ1bmN0aW9uIGkodCxlKXtyZXR1cm4gdChlPXtleHBvcnRzOnt9fSxlLmV4cG9ydHMpLGUuZXhwb3J0c312YXIgYT1vO2Z1bmN0aW9uIG8odCxlLHIsbil7dGhpcy5jeD0zKnQsdGhpcy5ieD0zKihyLXQpLXRoaXMuY3gsdGhpcy5heD0xLXRoaXMuY3gtdGhpcy5ieCx0aGlzLmN5PTMqZSx0aGlzLmJ5PTMqKG4tZSktdGhpcy5jeSx0aGlzLmF5PTEtdGhpcy5jeS10aGlzLmJ5LHRoaXMucDF4PXQsdGhpcy5wMXk9bix0aGlzLnAyeD1yLHRoaXMucDJ5PW59by5wcm90b3R5cGUuc2FtcGxlQ3VydmVYPWZ1bmN0aW9uKHQpe3JldHVybigodGhpcy5heCp0K3RoaXMuYngpKnQrdGhpcy5jeCkqdH0sby5wcm90b3R5cGUuc2FtcGxlQ3VydmVZPWZ1bmN0aW9uKHQpe3JldHVybigodGhpcy5heSp0K3RoaXMuYnkpKnQrdGhpcy5jeSkqdH0sby5wcm90b3R5cGUuc2FtcGxlQ3VydmVEZXJpdmF0aXZlWD1mdW5jdGlvbih0KXtyZXR1cm4oMyp0aGlzLmF4KnQrMip0aGlzLmJ4KSp0K3RoaXMuY3h9LG8ucHJvdG90eXBlLnNvbHZlQ3VydmVYPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLGEsbztmb3Iodm9pZCAwPT09ZSYmKGU9MWUtNiksaT10LG89MDtvPDg7bysrKXtpZihhPXRoaXMuc2FtcGxlQ3VydmVYKGkpLXQsTWF0aC5hYnMoYSk8ZSlyZXR1cm4gaTt2YXIgcz10aGlzLnNhbXBsZUN1cnZlRGVyaXZhdGl2ZVgoaSk7aWYoTWF0aC5hYnMocyk8MWUtNilicmVhaztpLT1hL3N9aWYoKGk9dCk8KHI9MCkpcmV0dXJuIHI7aWYoaT4obj0xKSlyZXR1cm4gbjtmb3IoO3I8bjspe2lmKGE9dGhpcy5zYW1wbGVDdXJ2ZVgoaSksTWF0aC5hYnMoYS10KTxlKXJldHVybiBpO3Q+YT9yPWk6bj1pLGk9LjUqKG4tcikrcn1yZXR1cm4gaX0sby5wcm90b3R5cGUuc29sdmU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5zYW1wbGVDdXJ2ZVkodGhpcy5zb2x2ZUN1cnZlWCh0LGUpKX07dmFyIHM9ZnVuY3Rpb24odCxlLHIpe3RoaXMuY29sdW1uPXQsdGhpcy5yb3c9ZSx0aGlzLnpvb209cn07cy5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHModGhpcy5jb2x1bW4sdGhpcy5yb3csdGhpcy56b29tKX0scy5wcm90b3R5cGUuem9vbVRvPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuX3pvb21Ubyh0KX0scy5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuX3N1Yih0KX0scy5wcm90b3R5cGUuX3pvb21Ubz1mdW5jdGlvbih0KXt2YXIgZT1NYXRoLnBvdygyLHQtdGhpcy56b29tKTtyZXR1cm4gdGhpcy5jb2x1bW4qPWUsdGhpcy5yb3cqPWUsdGhpcy56b29tPXQsdGhpc30scy5wcm90b3R5cGUuX3N1Yj1mdW5jdGlvbih0KXtyZXR1cm4gdD10Lnpvb21Ubyh0aGlzLnpvb20pLHRoaXMuY29sdW1uLT10LmNvbHVtbix0aGlzLnJvdy09dC5yb3csdGhpc307dmFyIGw9YztmdW5jdGlvbiBjKHQsZSl7dGhpcy54PXQsdGhpcy55PWV9ZnVuY3Rpb24gdSh0LGUscixuKXt2YXIgaT1uZXcgYSh0LGUscixuKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGkuc29sdmUodCl9fWMucHJvdG90eXBlPXtjbG9uZTpmdW5jdGlvbigpe3JldHVybiBuZXcgYyh0aGlzLngsdGhpcy55KX0sYWRkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuX2FkZCh0KX0sc3ViOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuX3N1Yih0KX0sbXVsdEJ5UG9pbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fbXVsdEJ5UG9pbnQodCl9LGRpdkJ5UG9pbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fZGl2QnlQb2ludCh0KX0sbXVsdDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9tdWx0KHQpfSxkaXY6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fZGl2KHQpfSxyb3RhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fcm90YXRlKHQpfSxyb3RhdGVBcm91bmQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9yb3RhdGVBcm91bmQodCxlKX0sbWF0TXVsdDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9tYXRNdWx0KHQpfSx1bml0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fdW5pdCgpfSxwZXJwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fcGVycCgpfSxyb3VuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuX3JvdW5kKCl9LG1hZzpmdW5jdGlvbigpe3JldHVybiBNYXRoLnNxcnQodGhpcy54KnRoaXMueCt0aGlzLnkqdGhpcy55KX0sZXF1YWxzOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLng9PT10LngmJnRoaXMueT09PXQueX0sZGlzdDpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuZGlzdFNxcih0KSl9LGRpc3RTcXI6ZnVuY3Rpb24odCl7dmFyIGU9dC54LXRoaXMueCxyPXQueS10aGlzLnk7cmV0dXJuIGUqZStyKnJ9LGFuZ2xlOmZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguYXRhbjIodGhpcy55LHRoaXMueCl9LGFuZ2xlVG86ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguYXRhbjIodGhpcy55LXQueSx0aGlzLngtdC54KX0sYW5nbGVXaXRoOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmFuZ2xlV2l0aFNlcCh0LngsdC55KX0sYW5nbGVXaXRoU2VwOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIE1hdGguYXRhbjIodGhpcy54KmUtdGhpcy55KnQsdGhpcy54KnQrdGhpcy55KmUpfSxfbWF0TXVsdDpmdW5jdGlvbih0KXt2YXIgZT10WzBdKnRoaXMueCt0WzFdKnRoaXMueSxyPXRbMl0qdGhpcy54K3RbM10qdGhpcy55O3JldHVybiB0aGlzLng9ZSx0aGlzLnk9cix0aGlzfSxfYWRkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLngrPXQueCx0aGlzLnkrPXQueSx0aGlzfSxfc3ViOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLngtPXQueCx0aGlzLnktPXQueSx0aGlzfSxfbXVsdDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54Kj10LHRoaXMueSo9dCx0aGlzfSxfZGl2OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLngvPXQsdGhpcy55Lz10LHRoaXN9LF9tdWx0QnlQb2ludDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54Kj10LngsdGhpcy55Kj10LnksdGhpc30sX2RpdkJ5UG9pbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueC89dC54LHRoaXMueS89dC55LHRoaXN9LF91bml0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Rpdih0aGlzLm1hZygpKSx0aGlzfSxfcGVycDpmdW5jdGlvbigpe3ZhciB0PXRoaXMueTtyZXR1cm4gdGhpcy55PXRoaXMueCx0aGlzLng9LXQsdGhpc30sX3JvdGF0ZTpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLmNvcyh0KSxyPU1hdGguc2luKHQpLG49ZSp0aGlzLngtcip0aGlzLnksaT1yKnRoaXMueCtlKnRoaXMueTtyZXR1cm4gdGhpcy54PW4sdGhpcy55PWksdGhpc30sX3JvdGF0ZUFyb3VuZDpmdW5jdGlvbih0LGUpe3ZhciByPU1hdGguY29zKHQpLG49TWF0aC5zaW4odCksaT1lLngrcioodGhpcy54LWUueCktbioodGhpcy55LWUueSksYT1lLnkrbioodGhpcy54LWUueCkrcioodGhpcy55LWUueSk7cmV0dXJuIHRoaXMueD1pLHRoaXMueT1hLHRoaXN9LF9yb3VuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLng9TWF0aC5yb3VuZCh0aGlzLngpLHRoaXMueT1NYXRoLnJvdW5kKHRoaXMueSksdGhpc319LGMuY29udmVydD1mdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIGM/dDpBcnJheS5pc0FycmF5KHQpP25ldyBjKHRbMF0sdFsxXSk6dH07dmFyIGg9dSguMjUsLjEsLjI1LDEpO2Z1bmN0aW9uIGYodCxlLHIpe3JldHVybiBNYXRoLm1pbihyLE1hdGgubWF4KGUsdCkpfWZ1bmN0aW9uIHAodCl7Zm9yKHZhciBlPVtdLHI9YXJndW1lbnRzLmxlbmd0aC0xO3ItLSA+MDspZVtyXT1hcmd1bWVudHNbcisxXTtmb3IodmFyIG49MCxpPWU7bjxpLmxlbmd0aDtuKz0xKXt2YXIgYT1pW25dO2Zvcih2YXIgbyBpbiBhKXRbb109YVtvXX1yZXR1cm4gdH12YXIgZD0xO2Z1bmN0aW9uIGcodCxlKXt0LmZvckVhY2goZnVuY3Rpb24odCl7ZVt0XSYmKGVbdF09ZVt0XS5iaW5kKGUpKX0pfWZ1bmN0aW9uIG0odCxlKXtyZXR1cm4tMSE9PXQuaW5kZXhPZihlLHQubGVuZ3RoLWUubGVuZ3RoKX1mdW5jdGlvbiB2KHQsZSxyKXt2YXIgbj17fTtmb3IodmFyIGkgaW4gdCluW2ldPWUuY2FsbChyfHx0aGlzLHRbaV0saSx0KTtyZXR1cm4gbn1mdW5jdGlvbiB5KHQsZSxyKXt2YXIgbj17fTtmb3IodmFyIGkgaW4gdCllLmNhbGwocnx8dGhpcyx0W2ldLGksdCkmJihuW2ldPXRbaV0pO3JldHVybiBufWZ1bmN0aW9uIHgodCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/dC5tYXAoeCk6Im9iamVjdCI9PXR5cGVvZiB0JiZ0P3YodCx4KTp0fXZhciBiPXt9O2Z1bmN0aW9uIF8odCl7Ylt0XXx8KCJ1bmRlZmluZWQiIT10eXBlb2YgY29uc29sZSYmY29uc29sZS53YXJuKHQpLGJbdF09ITApfWZ1bmN0aW9uIHcodCxlLHIpe3JldHVybihyLnktdC55KSooZS54LXQueCk+KGUueS10LnkpKihyLngtdC54KX1mdW5jdGlvbiBrKHQpe2Zvcih2YXIgZT0wLHI9MCxuPXQubGVuZ3RoLGk9bi0xLGE9dm9pZCAwLG89dm9pZCAwO3I8bjtpPXIrKylhPXRbcl0sZSs9KChvPXRbaV0pLngtYS54KSooYS55K28ueSk7cmV0dXJuIGV9dmFyIE09e1Vua25vd246IlVua25vd24iLFN0eWxlOiJTdHlsZSIsU291cmNlOiJTb3VyY2UiLFRpbGU6IlRpbGUiLEdseXBoczoiR2x5cGhzIixTcHJpdGVJbWFnZToiU3ByaXRlSW1hZ2UiLFNwcml0ZUpTT046IlNwcml0ZUpTT04iLEltYWdlOiJJbWFnZSJ9OyJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuZnJlZXplJiZPYmplY3QuZnJlZXplKE0pO3ZhciBBPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxyLG4pe3QuY2FsbCh0aGlzLGUpLHRoaXMuc3RhdHVzPXIsdGhpcy51cmw9bix0aGlzLm5hbWU9dGhpcy5jb25zdHJ1Y3Rvci5uYW1lLHRoaXMubWVzc2FnZT1lfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5hbWUrIjogIit0aGlzLm1lc3NhZ2UrIiAoIit0aGlzLnN0YXR1cysiKTogIit0aGlzLnVybH0sZX0oRXJyb3IpO2Z1bmN0aW9uIFQodCl7dmFyIGU9bmV3IHNlbGYuWE1MSHR0cFJlcXVlc3Q7Zm9yKHZhciByIGluIGUub3BlbigiR0VUIix0LnVybCwhMCksdC5oZWFkZXJzKWUuc2V0UmVxdWVzdEhlYWRlcihyLHQuaGVhZGVyc1tyXSk7cmV0dXJuIGUud2l0aENyZWRlbnRpYWxzPSJpbmNsdWRlIj09PXQuY3JlZGVudGlhbHMsZX12YXIgUz1mdW5jdGlvbih0LGUpe3ZhciByPVQodCk7cmV0dXJuIHIucmVzcG9uc2VUeXBlPSJhcnJheWJ1ZmZlciIsci5vbmVycm9yPWZ1bmN0aW9uKCl7ZShuZXcgRXJyb3Ioci5zdGF0dXNUZXh0KSl9LHIub25sb2FkPWZ1bmN0aW9uKCl7dmFyIG49ci5yZXNwb25zZTtpZigwPT09bi5ieXRlTGVuZ3RoJiYyMDA9PT1yLnN0YXR1cylyZXR1cm4gZShuZXcgRXJyb3IoImh0dHAgc3RhdHVzIDIwMCByZXR1cm5lZCB3aXRob3V0IGNvbnRlbnQuIikpO3Iuc3RhdHVzPj0yMDAmJnIuc3RhdHVzPDMwMCYmci5yZXNwb25zZT9lKG51bGwse2RhdGE6bixjYWNoZUNvbnRyb2w6ci5nZXRSZXNwb25zZUhlYWRlcigiQ2FjaGUtQ29udHJvbCIpLGV4cGlyZXM6ci5nZXRSZXNwb25zZUhlYWRlcigiRXhwaXJlcyIpfSk6ZShuZXcgQShyLnN0YXR1c1RleHQsci5zdGF0dXMsdC51cmwpKX0sci5zZW5kKCkscn07ZnVuY3Rpb24gRSh0LGUscil7clt0XT1yW3RdfHxbXSxyW3RdLnB1c2goZSl9ZnVuY3Rpb24gQyh0LGUscil7aWYociYmclt0XSl7dmFyIG49clt0XS5pbmRleE9mKGUpOy0xIT09biYmclt0XS5zcGxpY2UobiwxKX19dmFyIEw9ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1lJiYoZT17fSkscCh0aGlzLGUpLHRoaXMudHlwZT10fSx6PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxyKXt2b2lkIDA9PT1yJiYocj17fSksdC5jYWxsKHRoaXMsImVycm9yIixwKHtlcnJvcjplfSxyKSl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGV9KEwpLFA9ZnVuY3Rpb24oKXt9O1AucHJvdG90eXBlLm9uPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX2xpc3RlbmVycz10aGlzLl9saXN0ZW5lcnN8fHt9LEUodCxlLHRoaXMuX2xpc3RlbmVycyksdGhpc30sUC5wcm90b3R5cGUub2ZmPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIEModCxlLHRoaXMuX2xpc3RlbmVycyksQyh0LGUsdGhpcy5fb25lVGltZUxpc3RlbmVycyksdGhpc30sUC5wcm90b3R5cGUub25jZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9vbmVUaW1lTGlzdGVuZXJzPXRoaXMuX29uZVRpbWVMaXN0ZW5lcnN8fHt9LEUodCxlLHRoaXMuX29uZVRpbWVMaXN0ZW5lcnMpLHRoaXN9LFAucHJvdG90eXBlLmZpcmU9ZnVuY3Rpb24odCl7InN0cmluZyI9PXR5cGVvZiB0JiYodD1uZXcgTCh0LGFyZ3VtZW50c1sxXXx8e30pKTt2YXIgZT10LnR5cGU7aWYodGhpcy5saXN0ZW5zKGUpKXt0LnRhcmdldD10aGlzO2Zvcih2YXIgcj0wLG49dGhpcy5fbGlzdGVuZXJzJiZ0aGlzLl9saXN0ZW5lcnNbZV0/dGhpcy5fbGlzdGVuZXJzW2VdLnNsaWNlKCk6W107cjxuLmxlbmd0aDtyKz0xKW5bcl0uY2FsbCh0aGlzLHQpO2Zvcih2YXIgaT0wLGE9dGhpcy5fb25lVGltZUxpc3RlbmVycyYmdGhpcy5fb25lVGltZUxpc3RlbmVyc1tlXT90aGlzLl9vbmVUaW1lTGlzdGVuZXJzW2VdLnNsaWNlKCk6W107aTxhLmxlbmd0aDtpKz0xKXt2YXIgbz1hW2ldO0MoZSxvLHRoaXMuX29uZVRpbWVMaXN0ZW5lcnMpLG8uY2FsbCh0aGlzLHQpfXZhciBzPXRoaXMuX2V2ZW50ZWRQYXJlbnQ7cyYmKHAodCwiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5fZXZlbnRlZFBhcmVudERhdGE/dGhpcy5fZXZlbnRlZFBhcmVudERhdGEoKTp0aGlzLl9ldmVudGVkUGFyZW50RGF0YSkscy5maXJlKHQpKX1lbHNlIG0oZSwiZXJyb3IiKT9jb25zb2xlLmVycm9yKHQmJnQuZXJyb3J8fHR8fCJFbXB0eSBlcnJvciBldmVudCIpOm0oZSwid2FybmluZyIpJiZjb25zb2xlLndhcm4odCYmdC53YXJuaW5nfHx0fHwiRW1wdHkgd2FybmluZyBldmVudCIpO3JldHVybiB0aGlzfSxQLnByb3RvdHlwZS5saXN0ZW5zPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9saXN0ZW5lcnMmJnRoaXMuX2xpc3RlbmVyc1t0XSYmdGhpcy5fbGlzdGVuZXJzW3RdLmxlbmd0aD4wfHx0aGlzLl9vbmVUaW1lTGlzdGVuZXJzJiZ0aGlzLl9vbmVUaW1lTGlzdGVuZXJzW3RdJiZ0aGlzLl9vbmVUaW1lTGlzdGVuZXJzW3RdLmxlbmd0aD4wfHx0aGlzLl9ldmVudGVkUGFyZW50JiZ0aGlzLl9ldmVudGVkUGFyZW50Lmxpc3RlbnModCl9LFAucHJvdG90eXBlLnNldEV2ZW50ZWRQYXJlbnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fZXZlbnRlZFBhcmVudD10LHRoaXMuX2V2ZW50ZWRQYXJlbnREYXRhPWUsdGhpc307dmFyIEk9eyR2ZXJzaW9uOjgsJHJvb3Q6e3ZlcnNpb246e3JlcXVpcmVkOiEwLHR5cGU6ImVudW0iLHZhbHVlczpbOF19LG5hbWU6e3R5cGU6InN0cmluZyJ9LG1ldGFkYXRhOnt0eXBlOiIqIn0sY2VudGVyOnt0eXBlOiJhcnJheSIsdmFsdWU6Im51bWJlciJ9LHpvb206e3R5cGU6Im51bWJlciJ9LGJlYXJpbmc6e3R5cGU6Im51bWJlciIsZGVmYXVsdDowLHBlcmlvZDozNjAsdW5pdHM6ImRlZ3JlZXMifSxwaXRjaDp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAsdW5pdHM6ImRlZ3JlZXMifSxsaWdodDp7dHlwZToibGlnaHQifSxzb3VyY2VzOntyZXF1aXJlZDohMCx0eXBlOiJzb3VyY2VzIn0sc3ByaXRlOnt0eXBlOiJzdHJpbmcifSxnbHlwaHM6e3R5cGU6InN0cmluZyJ9LHRyYW5zaXRpb246e3R5cGU6InRyYW5zaXRpb24ifSxsYXllcnM6e3JlcXVpcmVkOiEwLHR5cGU6ImFycmF5Iix2YWx1ZToibGF5ZXIifX0sc291cmNlczp7IioiOnt0eXBlOiJzb3VyY2UifX0sc291cmNlOlsic291cmNlX3ZlY3RvciIsInNvdXJjZV9yYXN0ZXIiLCJzb3VyY2VfcmFzdGVyX2RlbSIsInNvdXJjZV9nZW9qc29uIiwic291cmNlX3ZpZGVvIiwic291cmNlX2ltYWdlIl0sc291cmNlX3ZlY3Rvcjp7dHlwZTp7cmVxdWlyZWQ6ITAsdHlwZToiZW51bSIsdmFsdWVzOnt2ZWN0b3I6e319fSx1cmw6e3R5cGU6InN0cmluZyJ9LHRpbGVzOnt0eXBlOiJhcnJheSIsdmFsdWU6InN0cmluZyJ9LGJvdW5kczp7dHlwZToiYXJyYXkiLHZhbHVlOiJudW1iZXIiLGxlbmd0aDo0LGRlZmF1bHQ6Wy0xODAsLTg1LjA1MTEsMTgwLDg1LjA1MTFdfSxtaW56b29tOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MH0sbWF4em9vbTp7dHlwZToibnVtYmVyIixkZWZhdWx0OjIyfSxhdHRyaWJ1dGlvbjp7dHlwZToic3RyaW5nIn0sIioiOnt0eXBlOiIqIn19LHNvdXJjZV9yYXN0ZXI6e3R5cGU6e3JlcXVpcmVkOiEwLHR5cGU6ImVudW0iLHZhbHVlczp7cmFzdGVyOnt9fX0sdXJsOnt0eXBlOiJzdHJpbmcifSx0aWxlczp7dHlwZToiYXJyYXkiLHZhbHVlOiJzdHJpbmcifSxib3VuZHM6e3R5cGU6ImFycmF5Iix2YWx1ZToibnVtYmVyIixsZW5ndGg6NCxkZWZhdWx0OlstMTgwLC04NS4wNTExLDE4MCw4NS4wNTExXX0sbWluem9vbTp7dHlwZToibnVtYmVyIixkZWZhdWx0OjB9LG1heHpvb206e3R5cGU6Im51bWJlciIsZGVmYXVsdDoyMn0sdGlsZVNpemU6e3R5cGU6Im51bWJlciIsZGVmYXVsdDo1MTIsdW5pdHM6InBpeGVscyJ9LHNjaGVtZTp7dHlwZToiZW51bSIsdmFsdWVzOnt4eXo6e30sdG1zOnt9fSxkZWZhdWx0OiJ4eXoifSxhdHRyaWJ1dGlvbjp7dHlwZToic3RyaW5nIn0sIioiOnt0eXBlOiIqIn19LHNvdXJjZV9yYXN0ZXJfZGVtOnt0eXBlOntyZXF1aXJlZDohMCx0eXBlOiJlbnVtIix2YWx1ZXM6eyJyYXN0ZXItZGVtIjp7fX19LHVybDp7dHlwZToic3RyaW5nIn0sdGlsZXM6e3R5cGU6ImFycmF5Iix2YWx1ZToic3RyaW5nIn0sYm91bmRzOnt0eXBlOiJhcnJheSIsdmFsdWU6Im51bWJlciIsbGVuZ3RoOjQsZGVmYXVsdDpbLTE4MCwtODUuMDUxMSwxODAsODUuMDUxMV19LG1pbnpvb206e3R5cGU6Im51bWJlciIsZGVmYXVsdDowfSxtYXh6b29tOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MjJ9LHRpbGVTaXplOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6NTEyLHVuaXRzOiJwaXhlbHMifSxhdHRyaWJ1dGlvbjp7dHlwZToic3RyaW5nIn0sZW5jb2Rpbmc6e3R5cGU6ImVudW0iLHZhbHVlczp7dGVycmFyaXVtOnt9LG1hcGJveDp7fX0sZGVmYXVsdDoibWFwYm94In0sIioiOnt0eXBlOiIqIn19LHNvdXJjZV9nZW9qc29uOnt0eXBlOntyZXF1aXJlZDohMCx0eXBlOiJlbnVtIix2YWx1ZXM6e2dlb2pzb246e319fSxkYXRhOnt0eXBlOiIqIn0sbWF4em9vbTp7dHlwZToibnVtYmVyIixkZWZhdWx0OjE4fSxidWZmZXI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxMjgsbWF4aW11bTo1MTIsbWluaW11bTowfSx0b2xlcmFuY2U6e3R5cGU6Im51bWJlciIsZGVmYXVsdDouMzc1fSxjbHVzdGVyOnt0eXBlOiJib29sZWFuIixkZWZhdWx0OiExfSxjbHVzdGVyUmFkaXVzOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6NTAsbWluaW11bTowfSxjbHVzdGVyTWF4Wm9vbTp7dHlwZToibnVtYmVyIn0sbGluZU1ldHJpY3M6e3R5cGU6ImJvb2xlYW4iLGRlZmF1bHQ6ITF9fSxzb3VyY2VfdmlkZW86e3R5cGU6e3JlcXVpcmVkOiEwLHR5cGU6ImVudW0iLHZhbHVlczp7dmlkZW86e319fSx1cmxzOntyZXF1aXJlZDohMCx0eXBlOiJhcnJheSIsdmFsdWU6InN0cmluZyJ9LGNvb3JkaW5hdGVzOntyZXF1aXJlZDohMCx0eXBlOiJhcnJheSIsbGVuZ3RoOjQsdmFsdWU6e3R5cGU6ImFycmF5IixsZW5ndGg6Mix2YWx1ZToibnVtYmVyIn19fSxzb3VyY2VfaW1hZ2U6e3R5cGU6e3JlcXVpcmVkOiEwLHR5cGU6ImVudW0iLHZhbHVlczp7aW1hZ2U6e319fSx1cmw6e3JlcXVpcmVkOiEwLHR5cGU6InN0cmluZyJ9LGNvb3JkaW5hdGVzOntyZXF1aXJlZDohMCx0eXBlOiJhcnJheSIsbGVuZ3RoOjQsdmFsdWU6e3R5cGU6ImFycmF5IixsZW5ndGg6Mix2YWx1ZToibnVtYmVyIn19fSxsYXllcjp7aWQ6e3R5cGU6InN0cmluZyIscmVxdWlyZWQ6ITB9LHR5cGU6e3R5cGU6ImVudW0iLHZhbHVlczp7ZmlsbDp7fSxsaW5lOnt9LHN5bWJvbDp7fSxjaXJjbGU6e30saGVhdG1hcDp7fSwiZmlsbC1leHRydXNpb24iOnt9LHJhc3Rlcjp7fSxoaWxsc2hhZGU6e30sYmFja2dyb3VuZDp7fX0scmVxdWlyZWQ6ITB9LG1ldGFkYXRhOnt0eXBlOiIqIn0sc291cmNlOnt0eXBlOiJzdHJpbmcifSwic291cmNlLWxheWVyIjp7dHlwZToic3RyaW5nIn0sbWluem9vbTp7dHlwZToibnVtYmVyIixtaW5pbXVtOjAsbWF4aW11bToyNH0sbWF4em9vbTp7dHlwZToibnVtYmVyIixtaW5pbXVtOjAsbWF4aW11bToyNH0sZmlsdGVyOnt0eXBlOiJmaWx0ZXIifSxsYXlvdXQ6e3R5cGU6ImxheW91dCJ9LHBhaW50Ont0eXBlOiJwYWludCJ9fSxsYXlvdXQ6WyJsYXlvdXRfZmlsbCIsImxheW91dF9saW5lIiwibGF5b3V0X2NpcmNsZSIsImxheW91dF9oZWF0bWFwIiwibGF5b3V0X2ZpbGwtZXh0cnVzaW9uIiwibGF5b3V0X3N5bWJvbCIsImxheW91dF9yYXN0ZXIiLCJsYXlvdXRfaGlsbHNoYWRlIiwibGF5b3V0X2JhY2tncm91bmQiXSxsYXlvdXRfYmFja2dyb3VuZDp7dmlzaWJpbGl0eTp7dHlwZToiZW51bSIsdmFsdWVzOnt2aXNpYmxlOnt9LG5vbmU6e319LGRlZmF1bHQ6InZpc2libGUifX0sbGF5b3V0X2ZpbGw6e3Zpc2liaWxpdHk6e3R5cGU6ImVudW0iLHZhbHVlczp7dmlzaWJsZTp7fSxub25lOnt9fSxkZWZhdWx0OiJ2aXNpYmxlIn19LGxheW91dF9jaXJjbGU6e3Zpc2liaWxpdHk6e3R5cGU6ImVudW0iLHZhbHVlczp7dmlzaWJsZTp7fSxub25lOnt9fSxkZWZhdWx0OiJ2aXNpYmxlIn19LGxheW91dF9oZWF0bWFwOnt2aXNpYmlsaXR5Ont0eXBlOiJlbnVtIix2YWx1ZXM6e3Zpc2libGU6e30sbm9uZTp7fX0sZGVmYXVsdDoidmlzaWJsZSJ9fSxsYXlvdXRfbGluZTp7ImxpbmUtY2FwIjp7dHlwZToiZW51bSIsZnVuY3Rpb246InBpZWNld2lzZS1jb25zdGFudCIsInpvb20tZnVuY3Rpb24iOiEwLHZhbHVlczp7YnV0dDp7fSxyb3VuZDp7fSxzcXVhcmU6e319LGRlZmF1bHQ6ImJ1dHQifSwibGluZS1qb2luIjp7dHlwZToiZW51bSIsZnVuY3Rpb246InBpZWNld2lzZS1jb25zdGFudCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdmFsdWVzOntiZXZlbDp7fSxyb3VuZDp7fSxtaXRlcjp7fX0sZGVmYXVsdDoibWl0ZXIifSwibGluZS1taXRlci1saW1pdCI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoyLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCxyZXF1aXJlczpbeyJsaW5lLWpvaW4iOiJtaXRlciJ9XX0sImxpbmUtcm91bmQtbGltaXQiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MS4wNSxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAscmVxdWlyZXM6W3sibGluZS1qb2luIjoicm91bmQifV19LHZpc2liaWxpdHk6e3R5cGU6ImVudW0iLHZhbHVlczp7dmlzaWJsZTp7fSxub25lOnt9fSxkZWZhdWx0OiJ2aXNpYmxlIn19LGxheW91dF9zeW1ib2w6eyJzeW1ib2wtcGxhY2VtZW50Ijp7dHlwZToiZW51bSIsZnVuY3Rpb246InBpZWNld2lzZS1jb25zdGFudCIsInpvb20tZnVuY3Rpb24iOiEwLHZhbHVlczp7cG9pbnQ6e30sbGluZTp7fX0sZGVmYXVsdDoicG9pbnQifSwic3ltYm9sLXNwYWNpbmciOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MjUwLG1pbmltdW06MSxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsdW5pdHM6InBpeGVscyIscmVxdWlyZXM6W3sic3ltYm9sLXBsYWNlbWVudCI6ImxpbmUifV19LCJzeW1ib2wtYXZvaWQtZWRnZXMiOnt0eXBlOiJib29sZWFuIixmdW5jdGlvbjoicGllY2V3aXNlLWNvbnN0YW50Iiwiem9vbS1mdW5jdGlvbiI6ITAsZGVmYXVsdDohMX0sImljb24tYWxsb3ctb3ZlcmxhcCI6e3R5cGU6ImJvb2xlYW4iLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCxkZWZhdWx0OiExLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSJdfSwiaWNvbi1pZ25vcmUtcGxhY2VtZW50Ijp7dHlwZToiYm9vbGVhbiIsZnVuY3Rpb246InBpZWNld2lzZS1jb25zdGFudCIsInpvb20tZnVuY3Rpb24iOiEwLGRlZmF1bHQ6ITEscmVxdWlyZXM6WyJpY29uLWltYWdlIl19LCJpY29uLW9wdGlvbmFsIjp7dHlwZToiYm9vbGVhbiIsZnVuY3Rpb246InBpZWNld2lzZS1jb25zdGFudCIsInpvb20tZnVuY3Rpb24iOiEwLGRlZmF1bHQ6ITEscmVxdWlyZXM6WyJpY29uLWltYWdlIiwidGV4dC1maWVsZCJdfSwiaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnQiOnt0eXBlOiJlbnVtIixmdW5jdGlvbjoicGllY2V3aXNlLWNvbnN0YW50Iiwiem9vbS1mdW5jdGlvbiI6ITAsdmFsdWVzOnttYXA6e30sdmlld3BvcnQ6e30sYXV0bzp7fX0sZGVmYXVsdDoiYXV0byIscmVxdWlyZXM6WyJpY29uLWltYWdlIl19LCJpY29uLXNpemUiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MSxtaW5pbXVtOjAsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdW5pdHM6ImZhY3RvciBvZiB0aGUgb3JpZ2luYWwgaWNvbiBzaXplIixyZXF1aXJlczpbImljb24taW1hZ2UiXX0sImljb24tdGV4dC1maXQiOnt0eXBlOiJlbnVtIixmdW5jdGlvbjoicGllY2V3aXNlLWNvbnN0YW50Iiwiem9vbS1mdW5jdGlvbiI6ITAsdmFsdWVzOntub25lOnt9LHdpZHRoOnt9LGhlaWdodDp7fSxib3RoOnt9fSxkZWZhdWx0OiJub25lIixyZXF1aXJlczpbImljb24taW1hZ2UiLCJ0ZXh0LWZpZWxkIl19LCJpY29uLXRleHQtZml0LXBhZGRpbmciOnt0eXBlOiJhcnJheSIsdmFsdWU6Im51bWJlciIsbGVuZ3RoOjQsZGVmYXVsdDpbMCwwLDAsMF0sdW5pdHM6InBpeGVscyIsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSIsInRleHQtZmllbGQiLHsiaWNvbi10ZXh0LWZpdCI6WyJib3RoIiwid2lkdGgiLCJoZWlnaHQiXX1dfSwiaWNvbi1pbWFnZSI6e3R5cGU6InN0cmluZyIsZnVuY3Rpb246InBpZWNld2lzZS1jb25zdGFudCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdG9rZW5zOiEwfSwiaWNvbi1yb3RhdGUiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MCxwZXJpb2Q6MzYwLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHVuaXRzOiJkZWdyZWVzIixyZXF1aXJlczpbImljb24taW1hZ2UiXX0sImljb24tcGFkZGluZyI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoyLG1pbmltdW06MCxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsdW5pdHM6InBpeGVscyIscmVxdWlyZXM6WyJpY29uLWltYWdlIl19LCJpY29uLWtlZXAtdXByaWdodCI6e3R5cGU6ImJvb2xlYW4iLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCxkZWZhdWx0OiExLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSIseyJpY29uLXJvdGF0aW9uLWFsaWdubWVudCI6Im1hcCJ9LHsic3ltYm9sLXBsYWNlbWVudCI6ImxpbmUifV19LCJpY29uLW9mZnNldCI6e3R5cGU6ImFycmF5Iix2YWx1ZToibnVtYmVyIixsZW5ndGg6MixkZWZhdWx0OlswLDBdLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSJdfSwiaWNvbi1hbmNob3IiOnt0eXBlOiJlbnVtIixmdW5jdGlvbjoicGllY2V3aXNlLWNvbnN0YW50Iiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCx2YWx1ZXM6e2NlbnRlcjp7fSxsZWZ0Ont9LHJpZ2h0Ont9LHRvcDp7fSxib3R0b206e30sInRvcC1sZWZ0Ijp7fSwidG9wLXJpZ2h0Ijp7fSwiYm90dG9tLWxlZnQiOnt9LCJib3R0b20tcmlnaHQiOnt9fSxkZWZhdWx0OiJjZW50ZXIiLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSJdfSwiaWNvbi1waXRjaC1hbGlnbm1lbnQiOnt0eXBlOiJlbnVtIixmdW5jdGlvbjoicGllY2V3aXNlLWNvbnN0YW50Iiwiem9vbS1mdW5jdGlvbiI6ITAsdmFsdWVzOnttYXA6e30sdmlld3BvcnQ6e30sYXV0bzp7fX0sZGVmYXVsdDoiYXV0byIscmVxdWlyZXM6WyJpY29uLWltYWdlIl19LCJ0ZXh0LXBpdGNoLWFsaWdubWVudCI6e3R5cGU6ImVudW0iLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCx2YWx1ZXM6e21hcDp7fSx2aWV3cG9ydDp7fSxhdXRvOnt9fSxkZWZhdWx0OiJhdXRvIixyZXF1aXJlczpbInRleHQtZmllbGQiXX0sInRleHQtcm90YXRpb24tYWxpZ25tZW50Ijp7dHlwZToiZW51bSIsZnVuY3Rpb246InBpZWNld2lzZS1jb25zdGFudCIsInpvb20tZnVuY3Rpb24iOiEwLHZhbHVlczp7bWFwOnt9LHZpZXdwb3J0Ont9LGF1dG86e319LGRlZmF1bHQ6ImF1dG8iLHJlcXVpcmVzOlsidGV4dC1maWVsZCJdfSwidGV4dC1maWVsZCI6e3R5cGU6InN0cmluZyIsZnVuY3Rpb246InBpZWNld2lzZS1jb25zdGFudCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsZGVmYXVsdDoiIix0b2tlbnM6ITB9LCJ0ZXh0LWZvbnQiOnt0eXBlOiJhcnJheSIsdmFsdWU6InN0cmluZyIsZnVuY3Rpb246InBpZWNld2lzZS1jb25zdGFudCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsZGVmYXVsdDpbIk9wZW4gU2FucyBSZWd1bGFyIiwiQXJpYWwgVW5pY29kZSBNUyBSZWd1bGFyIl0scmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl19LCJ0ZXh0LXNpemUiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MTYsbWluaW11bTowLHVuaXRzOiJwaXhlbHMiLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHJlcXVpcmVzOlsidGV4dC1maWVsZCJdfSwidGV4dC1tYXgtd2lkdGgiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MTAsbWluaW11bTowLHVuaXRzOiJlbXMiLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHJlcXVpcmVzOlsidGV4dC1maWVsZCJdfSwidGV4dC1saW5lLWhlaWdodCI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxLjIsdW5pdHM6ImVtcyIsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLHJlcXVpcmVzOlsidGV4dC1maWVsZCJdfSwidGV4dC1sZXR0ZXItc3BhY2luZyI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDowLHVuaXRzOiJlbXMiLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHJlcXVpcmVzOlsidGV4dC1maWVsZCJdfSwidGV4dC1qdXN0aWZ5Ijp7dHlwZToiZW51bSIsZnVuY3Rpb246InBpZWNld2lzZS1jb25zdGFudCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdmFsdWVzOntsZWZ0Ont9LGNlbnRlcjp7fSxyaWdodDp7fX0sZGVmYXVsdDoiY2VudGVyIixyZXF1aXJlczpbInRleHQtZmllbGQiXX0sInRleHQtYW5jaG9yIjp7dHlwZToiZW51bSIsZnVuY3Rpb246InBpZWNld2lzZS1jb25zdGFudCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdmFsdWVzOntjZW50ZXI6e30sbGVmdDp7fSxyaWdodDp7fSx0b3A6e30sYm90dG9tOnt9LCJ0b3AtbGVmdCI6e30sInRvcC1yaWdodCI6e30sImJvdHRvbS1sZWZ0Ijp7fSwiYm90dG9tLXJpZ2h0Ijp7fX0sZGVmYXVsdDoiY2VudGVyIixyZXF1aXJlczpbInRleHQtZmllbGQiXX0sInRleHQtbWF4LWFuZ2xlIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjQ1LHVuaXRzOiJkZWdyZWVzIixmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIix7InN5bWJvbC1wbGFjZW1lbnQiOiJsaW5lIn1dfSwidGV4dC1yb3RhdGUiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MCxwZXJpb2Q6MzYwLHVuaXRzOiJkZWdyZWVzIixmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCxyZXF1aXJlczpbInRleHQtZmllbGQiXX0sInRleHQtcGFkZGluZyI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoyLG1pbmltdW06MCx1bml0czoicGl4ZWxzIixmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl19LCJ0ZXh0LWtlZXAtdXByaWdodCI6e3R5cGU6ImJvb2xlYW4iLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCxkZWZhdWx0OiEwLHJlcXVpcmVzOlsidGV4dC1maWVsZCIseyJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudCI6Im1hcCJ9LHsic3ltYm9sLXBsYWNlbWVudCI6ImxpbmUifV19LCJ0ZXh0LXRyYW5zZm9ybSI6e3R5cGU6ImVudW0iLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHZhbHVlczp7bm9uZTp7fSx1cHBlcmNhc2U6e30sbG93ZXJjYXNlOnt9fSxkZWZhdWx0OiJub25lIixyZXF1aXJlczpbInRleHQtZmllbGQiXX0sInRleHQtb2Zmc2V0Ijp7dHlwZToiYXJyYXkiLHZhbHVlOiJudW1iZXIiLHVuaXRzOiJlbXMiLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLGxlbmd0aDoyLGRlZmF1bHQ6WzAsMF0scmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl19LCJ0ZXh0LWFsbG93LW92ZXJsYXAiOnt0eXBlOiJib29sZWFuIixmdW5jdGlvbjoicGllY2V3aXNlLWNvbnN0YW50Iiwiem9vbS1mdW5jdGlvbiI6ITAsZGVmYXVsdDohMSxyZXF1aXJlczpbInRleHQtZmllbGQiXX0sInRleHQtaWdub3JlLXBsYWNlbWVudCI6e3R5cGU6ImJvb2xlYW4iLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCxkZWZhdWx0OiExLHJlcXVpcmVzOlsidGV4dC1maWVsZCJdfSwidGV4dC1vcHRpb25hbCI6e3R5cGU6ImJvb2xlYW4iLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCxkZWZhdWx0OiExLHJlcXVpcmVzOlsidGV4dC1maWVsZCIsImljb24taW1hZ2UiXX0sdmlzaWJpbGl0eTp7dHlwZToiZW51bSIsdmFsdWVzOnt2aXNpYmxlOnt9LG5vbmU6e319LGRlZmF1bHQ6InZpc2libGUifX0sbGF5b3V0X3Jhc3Rlcjp7dmlzaWJpbGl0eTp7dHlwZToiZW51bSIsdmFsdWVzOnt2aXNpYmxlOnt9LG5vbmU6e319LGRlZmF1bHQ6InZpc2libGUifX0sbGF5b3V0X2hpbGxzaGFkZTp7dmlzaWJpbGl0eTp7dHlwZToiZW51bSIsdmFsdWVzOnt2aXNpYmxlOnt9LG5vbmU6e319LGRlZmF1bHQ6InZpc2libGUifX0sZmlsdGVyOnt0eXBlOiJhcnJheSIsdmFsdWU6IioifSxmaWx0ZXJfb3BlcmF0b3I6e3R5cGU6ImVudW0iLHZhbHVlczp7Ij09Ijp7fSwiIT0iOnt9LCI+Ijp7fSwiPj0iOnt9LCI8Ijp7fSwiPD0iOnt9LGluOnt9LCIhaW4iOnt9LGFsbDp7fSxhbnk6e30sbm9uZTp7fSxoYXM6e30sIiFoYXMiOnt9fX0sZ2VvbWV0cnlfdHlwZTp7dHlwZToiZW51bSIsdmFsdWVzOntQb2ludDp7fSxMaW5lU3RyaW5nOnt9LFBvbHlnb246e319fSxmdW5jdGlvbl9zdG9wOnt0eXBlOiJhcnJheSIsbWluaW11bTowLG1heGltdW06MjIsdmFsdWU6WyJudW1iZXIiLCJjb2xvciJdLGxlbmd0aDoyfSxleHByZXNzaW9uOnt0eXBlOiJhcnJheSIsdmFsdWU6IioiLG1pbmltdW06MX0sZXhwcmVzc2lvbl9uYW1lOnt0eXBlOiJlbnVtIix2YWx1ZXM6e2xldDp7Z3JvdXA6IlZhcmlhYmxlIGJpbmRpbmcifSx2YXI6e2dyb3VwOiJWYXJpYWJsZSBiaW5kaW5nIn0sbGl0ZXJhbDp7Z3JvdXA6IlR5cGVzIn0sYXJyYXk6e2dyb3VwOiJUeXBlcyJ9LGF0Ontncm91cDoiTG9va3VwIn0sY2FzZTp7Z3JvdXA6IkRlY2lzaW9uIn0sbWF0Y2g6e2dyb3VwOiJEZWNpc2lvbiJ9LGNvYWxlc2NlOntncm91cDoiRGVjaXNpb24ifSxzdGVwOntncm91cDoiUmFtcHMsIHNjYWxlcywgY3VydmVzIn0saW50ZXJwb2xhdGU6e2dyb3VwOiJSYW1wcywgc2NhbGVzLCBjdXJ2ZXMifSxsbjI6e2dyb3VwOiJNYXRoIn0scGk6e2dyb3VwOiJNYXRoIn0sZTp7Z3JvdXA6Ik1hdGgifSx0eXBlb2Y6e2dyb3VwOiJUeXBlcyJ9LHN0cmluZzp7Z3JvdXA6IlR5cGVzIn0sbnVtYmVyOntncm91cDoiVHlwZXMifSxib29sZWFuOntncm91cDoiVHlwZXMifSxvYmplY3Q6e2dyb3VwOiJUeXBlcyJ9LGNvbGxhdG9yOntncm91cDoiVHlwZXMifSwidG8tc3RyaW5nIjp7Z3JvdXA6IlR5cGVzIn0sInRvLW51bWJlciI6e2dyb3VwOiJUeXBlcyJ9LCJ0by1ib29sZWFuIjp7Z3JvdXA6IlR5cGVzIn0sInRvLXJnYmEiOntncm91cDoiQ29sb3IifSwidG8tY29sb3IiOntncm91cDoiVHlwZXMifSxyZ2I6e2dyb3VwOiJDb2xvciJ9LHJnYmE6e2dyb3VwOiJDb2xvciJ9LGdldDp7Z3JvdXA6Ikxvb2t1cCJ9LGhhczp7Z3JvdXA6Ikxvb2t1cCJ9LGxlbmd0aDp7Z3JvdXA6Ikxvb2t1cCJ9LHByb3BlcnRpZXM6e2dyb3VwOiJGZWF0dXJlIGRhdGEifSwiZ2VvbWV0cnktdHlwZSI6e2dyb3VwOiJGZWF0dXJlIGRhdGEifSxpZDp7Z3JvdXA6IkZlYXR1cmUgZGF0YSJ9LHpvb206e2dyb3VwOiJab29tIn0sImhlYXRtYXAtZGVuc2l0eSI6e2dyb3VwOiJIZWF0bWFwIn0sImxpbmUtcHJvZ3Jlc3MiOntncm91cDoiSGVhdG1hcCJ9LCIrIjp7Z3JvdXA6Ik1hdGgifSwiKiI6e2dyb3VwOiJNYXRoIn0sIi0iOntncm91cDoiTWF0aCJ9LCIvIjp7Z3JvdXA6Ik1hdGgifSwiJSI6e2dyb3VwOiJNYXRoIn0sIl4iOntncm91cDoiTWF0aCJ9LHNxcnQ6e2dyb3VwOiJNYXRoIn0sbG9nMTA6e2dyb3VwOiJNYXRoIn0sbG46e2dyb3VwOiJNYXRoIn0sbG9nMjp7Z3JvdXA6Ik1hdGgifSxzaW46e2dyb3VwOiJNYXRoIn0sY29zOntncm91cDoiTWF0aCJ9LHRhbjp7Z3JvdXA6Ik1hdGgifSxhc2luOntncm91cDoiTWF0aCJ9LGFjb3M6e2dyb3VwOiJNYXRoIn0sYXRhbjp7Z3JvdXA6Ik1hdGgifSxtaW46e2dyb3VwOiJNYXRoIn0sbWF4Ontncm91cDoiTWF0aCJ9LHJvdW5kOntncm91cDoiTWF0aCJ9LGFiczp7Z3JvdXA6Ik1hdGgifSxjZWlsOntncm91cDoiTWF0aCJ9LGZsb29yOntncm91cDoiTWF0aCJ9LCI9PSI6e2dyb3VwOiJEZWNpc2lvbiJ9LCIhPSI6e2dyb3VwOiJEZWNpc2lvbiJ9LCI+Ijp7Z3JvdXA6IkRlY2lzaW9uIn0sIjwiOntncm91cDoiRGVjaXNpb24ifSwiPj0iOntncm91cDoiRGVjaXNpb24ifSwiPD0iOntncm91cDoiRGVjaXNpb24ifSxhbGw6e2dyb3VwOiJEZWNpc2lvbiJ9LGFueTp7Z3JvdXA6IkRlY2lzaW9uIn0sIiEiOntncm91cDoiRGVjaXNpb24ifSwiaXMtc3VwcG9ydGVkLXNjcmlwdCI6e2dyb3VwOiJTdHJpbmcifSx1cGNhc2U6e2dyb3VwOiJTdHJpbmcifSxkb3duY2FzZTp7Z3JvdXA6IlN0cmluZyJ9LGNvbmNhdDp7Z3JvdXA6IlN0cmluZyJ9LCJyZXNvbHZlZC1sb2NhbGUiOntncm91cDoiU3RyaW5nIn19fSxsaWdodDp7YW5jaG9yOnt0eXBlOiJlbnVtIixkZWZhdWx0OiJ2aWV3cG9ydCIsdmFsdWVzOnttYXA6e30sdmlld3BvcnQ6e319LHRyYW5zaXRpb246ITEsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITEsZnVuY3Rpb246InBpZWNld2lzZS1jb25zdGFudCJ9LHBvc2l0aW9uOnt0eXBlOiJhcnJheSIsZGVmYXVsdDpbMS4xNSwyMTAsMzBdLGxlbmd0aDozLHZhbHVlOiJudW1iZXIiLHRyYW5zaXRpb246ITAsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITF9LGNvbG9yOnt0eXBlOiJjb2xvciIsZGVmYXVsdDoiI2ZmZmZmZiIsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITEsdHJhbnNpdGlvbjohMH0saW50ZW5zaXR5Ont0eXBlOiJudW1iZXIiLGRlZmF1bHQ6LjUsbWluaW11bTowLG1heGltdW06MSxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMSx0cmFuc2l0aW9uOiEwfX0scGFpbnQ6WyJwYWludF9maWxsIiwicGFpbnRfbGluZSIsInBhaW50X2NpcmNsZSIsInBhaW50X2hlYXRtYXAiLCJwYWludF9maWxsLWV4dHJ1c2lvbiIsInBhaW50X3N5bWJvbCIsInBhaW50X3Jhc3RlciIsInBhaW50X2hpbGxzaGFkZSIsInBhaW50X2JhY2tncm91bmQiXSxwYWludF9maWxsOnsiZmlsbC1hbnRpYWxpYXMiOnt0eXBlOiJib29sZWFuIixmdW5jdGlvbjoicGllY2V3aXNlLWNvbnN0YW50Iiwiem9vbS1mdW5jdGlvbiI6ITAsZGVmYXVsdDohMH0sImZpbGwtb3BhY2l0eSI6e3R5cGU6Im51bWJlciIsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsZGVmYXVsdDoxLG1pbmltdW06MCxtYXhpbXVtOjEsdHJhbnNpdGlvbjohMH0sImZpbGwtY29sb3IiOnt0eXBlOiJjb2xvciIsZGVmYXVsdDoiIzAwMDAwMCIsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMCxyZXF1aXJlczpbeyIhIjoiZmlsbC1wYXR0ZXJuIn1dfSwiZmlsbC1vdXRsaW5lLWNvbG9yIjp7dHlwZToiY29sb3IiLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHRyYW5zaXRpb246ITAscmVxdWlyZXM6W3siISI6ImZpbGwtcGF0dGVybiJ9LHsiZmlsbC1hbnRpYWxpYXMiOiEwfV19LCJmaWxsLXRyYW5zbGF0ZSI6e3R5cGU6ImFycmF5Iix2YWx1ZToibnVtYmVyIixsZW5ndGg6MixkZWZhdWx0OlswLDBdLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMifSwiZmlsbC10cmFuc2xhdGUtYW5jaG9yIjp7dHlwZToiZW51bSIsZnVuY3Rpb246InBpZWNld2lzZS1jb25zdGFudCIsInpvb20tZnVuY3Rpb24iOiEwLHZhbHVlczp7bWFwOnt9LHZpZXdwb3J0Ont9fSxkZWZhdWx0OiJtYXAiLHJlcXVpcmVzOlsiZmlsbC10cmFuc2xhdGUiXX0sImZpbGwtcGF0dGVybiI6e3R5cGU6InN0cmluZyIsZnVuY3Rpb246InBpZWNld2lzZS1jb25zdGFudCIsInpvb20tZnVuY3Rpb24iOiEwLHRyYW5zaXRpb246ITB9fSxwYWludF9saW5lOnsibGluZS1vcGFjaXR5Ijp7dHlwZToibnVtYmVyIixmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCxkZWZhdWx0OjEsbWluaW11bTowLG1heGltdW06MSx0cmFuc2l0aW9uOiEwfSwibGluZS1jb2xvciI6e3R5cGU6ImNvbG9yIixkZWZhdWx0OiIjMDAwMDAwIixmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwLHJlcXVpcmVzOlt7IiEiOiJsaW5lLXBhdHRlcm4ifV19LCJsaW5lLXRyYW5zbGF0ZSI6e3R5cGU6ImFycmF5Iix2YWx1ZToibnVtYmVyIixsZW5ndGg6MixkZWZhdWx0OlswLDBdLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMifSwibGluZS10cmFuc2xhdGUtYW5jaG9yIjp7dHlwZToiZW51bSIsZnVuY3Rpb246InBpZWNld2lzZS1jb25zdGFudCIsInpvb20tZnVuY3Rpb24iOiEwLHZhbHVlczp7bWFwOnt9LHZpZXdwb3J0Ont9fSxkZWZhdWx0OiJtYXAiLHJlcXVpcmVzOlsibGluZS10cmFuc2xhdGUiXX0sImxpbmUtd2lkdGgiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MSxtaW5pbXVtOjAsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMCx1bml0czoicGl4ZWxzIn0sImxpbmUtZ2FwLXdpZHRoIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAsbWluaW11bTowLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHRyYW5zaXRpb246ITAsdW5pdHM6InBpeGVscyJ9LCJsaW5lLW9mZnNldCI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDowLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHRyYW5zaXRpb246ITAsdW5pdHM6InBpeGVscyJ9LCJsaW5lLWJsdXIiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MCxtaW5pbXVtOjAsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMCx1bml0czoicGl4ZWxzIn0sImxpbmUtZGFzaGFycmF5Ijp7dHlwZToiYXJyYXkiLHZhbHVlOiJudW1iZXIiLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCxtaW5pbXVtOjAsdHJhbnNpdGlvbjohMCx1bml0czoibGluZSB3aWR0aHMiLHJlcXVpcmVzOlt7IiEiOiJsaW5lLXBhdHRlcm4ifV19LCJsaW5lLXBhdHRlcm4iOnt0eXBlOiJzdHJpbmciLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwfSwibGluZS1ncmFkaWVudCI6e3R5cGU6ImNvbG9yIixmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITEsInByb3BlcnR5LWZ1bmN0aW9uIjohMSx0cmFuc2l0aW9uOiExLHJlcXVpcmVzOlt7IiEiOiJsaW5lLWRhc2hhcnJheSJ9LHsiISI6ImxpbmUtcGF0dGVybiJ9LHtzb3VyY2U6Imdlb2pzb24iLGhhczp7bGluZU1ldHJpY3M6ITB9fV19fSxwYWludF9jaXJjbGU6eyJjaXJjbGUtcmFkaXVzIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjUsbWluaW11bTowLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHRyYW5zaXRpb246ITAsdW5pdHM6InBpeGVscyJ9LCJjaXJjbGUtY29sb3IiOnt0eXBlOiJjb2xvciIsZGVmYXVsdDoiIzAwMDAwMCIsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMH0sImNpcmNsZS1ibHVyIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMH0sImNpcmNsZS1vcGFjaXR5Ijp7dHlwZToibnVtYmVyIixkZWZhdWx0OjEsbWluaW11bTowLG1heGltdW06MSxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwfSwiY2lyY2xlLXRyYW5zbGF0ZSI6e3R5cGU6ImFycmF5Iix2YWx1ZToibnVtYmVyIixsZW5ndGg6MixkZWZhdWx0OlswLDBdLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMifSwiY2lyY2xlLXRyYW5zbGF0ZS1hbmNob3IiOnt0eXBlOiJlbnVtIixmdW5jdGlvbjoicGllY2V3aXNlLWNvbnN0YW50Iiwiem9vbS1mdW5jdGlvbiI6ITAsdmFsdWVzOnttYXA6e30sdmlld3BvcnQ6e319LGRlZmF1bHQ6Im1hcCIscmVxdWlyZXM6WyJjaXJjbGUtdHJhbnNsYXRlIl19LCJjaXJjbGUtcGl0Y2gtc2NhbGUiOnt0eXBlOiJlbnVtIixmdW5jdGlvbjoicGllY2V3aXNlLWNvbnN0YW50Iiwiem9vbS1mdW5jdGlvbiI6ITAsdmFsdWVzOnttYXA6e30sdmlld3BvcnQ6e319LGRlZmF1bHQ6Im1hcCJ9LCJjaXJjbGUtcGl0Y2gtYWxpZ25tZW50Ijp7dHlwZToiZW51bSIsZnVuY3Rpb246InBpZWNld2lzZS1jb25zdGFudCIsInpvb20tZnVuY3Rpb24iOiEwLHZhbHVlczp7bWFwOnt9LHZpZXdwb3J0Ont9fSxkZWZhdWx0OiJ2aWV3cG9ydCJ9LCJjaXJjbGUtc3Ryb2tlLXdpZHRoIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAsbWluaW11bTowLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHRyYW5zaXRpb246ITAsdW5pdHM6InBpeGVscyJ9LCJjaXJjbGUtc3Ryb2tlLWNvbG9yIjp7dHlwZToiY29sb3IiLGRlZmF1bHQ6IiMwMDAwMDAiLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHRyYW5zaXRpb246ITB9LCJjaXJjbGUtc3Ryb2tlLW9wYWNpdHkiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MSxtaW5pbXVtOjAsbWF4aW11bToxLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHRyYW5zaXRpb246ITB9fSxwYWludF9oZWF0bWFwOnsiaGVhdG1hcC1yYWRpdXMiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MzAsbWluaW11bToxLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHRyYW5zaXRpb246ITAsdW5pdHM6InBpeGVscyJ9LCJoZWF0bWFwLXdlaWdodCI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxLG1pbmltdW06MCxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiExfSwiaGVhdG1hcC1pbnRlbnNpdHkiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MSxtaW5pbXVtOjAsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITEsdHJhbnNpdGlvbjohMH0sImhlYXRtYXAtY29sb3IiOnt0eXBlOiJjb2xvciIsZGVmYXVsdDpbImludGVycG9sYXRlIixbImxpbmVhciJdLFsiaGVhdG1hcC1kZW5zaXR5Il0sMCwicmdiYSgwLCAwLCAyNTUsIDApIiwuMSwicm95YWxibHVlIiwuMywiY3lhbiIsLjUsImxpbWUiLC43LCJ5ZWxsb3ciLDEsInJlZCJdLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMSwicHJvcGVydHktZnVuY3Rpb24iOiExLHRyYW5zaXRpb246ITF9LCJoZWF0bWFwLW9wYWNpdHkiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MSxtaW5pbXVtOjAsbWF4aW11bToxLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiExLHRyYW5zaXRpb246ITB9fSxwYWludF9zeW1ib2w6eyJpY29uLW9wYWNpdHkiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MSxtaW5pbXVtOjAsbWF4aW11bToxLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHRyYW5zaXRpb246ITAscmVxdWlyZXM6WyJpY29uLWltYWdlIl19LCJpY29uLWNvbG9yIjp7dHlwZToiY29sb3IiLGRlZmF1bHQ6IiMwMDAwMDAiLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHRyYW5zaXRpb246ITAscmVxdWlyZXM6WyJpY29uLWltYWdlIl19LCJpY29uLWhhbG8tY29sb3IiOnt0eXBlOiJjb2xvciIsZGVmYXVsdDoicmdiYSgwLCAwLCAwLCAwKSIsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMCxyZXF1aXJlczpbImljb24taW1hZ2UiXX0sImljb24taGFsby13aWR0aCI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDowLG1pbmltdW06MCxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMiLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSJdfSwiaWNvbi1oYWxvLWJsdXIiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MCxtaW5pbXVtOjAsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMCx1bml0czoicGl4ZWxzIixyZXF1aXJlczpbImljb24taW1hZ2UiXX0sImljb24tdHJhbnNsYXRlIjp7dHlwZToiYXJyYXkiLHZhbHVlOiJudW1iZXIiLGxlbmd0aDoyLGRlZmF1bHQ6WzAsMF0sZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLHRyYW5zaXRpb246ITAsdW5pdHM6InBpeGVscyIscmVxdWlyZXM6WyJpY29uLWltYWdlIl19LCJpY29uLXRyYW5zbGF0ZS1hbmNob3IiOnt0eXBlOiJlbnVtIixmdW5jdGlvbjoicGllY2V3aXNlLWNvbnN0YW50Iiwiem9vbS1mdW5jdGlvbiI6ITAsdmFsdWVzOnttYXA6e30sdmlld3BvcnQ6e319LGRlZmF1bHQ6Im1hcCIscmVxdWlyZXM6WyJpY29uLWltYWdlIiwiaWNvbi10cmFuc2xhdGUiXX0sInRleHQtb3BhY2l0eSI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxLG1pbmltdW06MCxtYXhpbXVtOjEsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMCxyZXF1aXJlczpbInRleHQtZmllbGQiXX0sInRleHQtY29sb3IiOnt0eXBlOiJjb2xvciIsZGVmYXVsdDoiIzAwMDAwMCIsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMCxyZXF1aXJlczpbInRleHQtZmllbGQiXX0sInRleHQtaGFsby1jb2xvciI6e3R5cGU6ImNvbG9yIixkZWZhdWx0OiJyZ2JhKDAsIDAsIDAsIDApIixmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwLHJlcXVpcmVzOlsidGV4dC1maWVsZCJdfSwidGV4dC1oYWxvLXdpZHRoIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAsbWluaW11bTowLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHRyYW5zaXRpb246ITAsdW5pdHM6InBpeGVscyIscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl19LCJ0ZXh0LWhhbG8tYmx1ciI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDowLG1pbmltdW06MCxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMiLHJlcXVpcmVzOlsidGV4dC1maWVsZCJdfSwidGV4dC10cmFuc2xhdGUiOnt0eXBlOiJhcnJheSIsdmFsdWU6Im51bWJlciIsbGVuZ3RoOjIsZGVmYXVsdDpbMCwwXSxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMCx1bml0czoicGl4ZWxzIixyZXF1aXJlczpbInRleHQtZmllbGQiXX0sInRleHQtdHJhbnNsYXRlLWFuY2hvciI6e3R5cGU6ImVudW0iLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCx2YWx1ZXM6e21hcDp7fSx2aWV3cG9ydDp7fX0sZGVmYXVsdDoibWFwIixyZXF1aXJlczpbInRleHQtZmllbGQiLCJ0ZXh0LXRyYW5zbGF0ZSJdfX0scGFpbnRfcmFzdGVyOnsicmFzdGVyLW9wYWNpdHkiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MSxtaW5pbXVtOjAsbWF4aW11bToxLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwfSwicmFzdGVyLWh1ZS1yb3RhdGUiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MCxwZXJpb2Q6MzYwLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwLHVuaXRzOiJkZWdyZWVzIn0sInJhc3Rlci1icmlnaHRuZXNzLW1pbiI6e3R5cGU6Im51bWJlciIsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLGRlZmF1bHQ6MCxtaW5pbXVtOjAsbWF4aW11bToxLHRyYW5zaXRpb246ITB9LCJyYXN0ZXItYnJpZ2h0bmVzcy1tYXgiOnt0eXBlOiJudW1iZXIiLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCxkZWZhdWx0OjEsbWluaW11bTowLG1heGltdW06MSx0cmFuc2l0aW9uOiEwfSwicmFzdGVyLXNhdHVyYXRpb24iOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MCxtaW5pbXVtOi0xLG1heGltdW06MSxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMH0sInJhc3Rlci1jb250cmFzdCI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDowLG1pbmltdW06LTEsbWF4aW11bToxLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwfSwicmFzdGVyLWZhZGUtZHVyYXRpb24iOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MzAwLG1pbmltdW06MCxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMSx1bml0czoibWlsbGlzZWNvbmRzIn19LHBhaW50X2hpbGxzaGFkZTp7ImhpbGxzaGFkZS1pbGx1bWluYXRpb24tZGlyZWN0aW9uIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjMzNSxtaW5pbXVtOjAsbWF4aW11bTozNTksZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLHRyYW5zaXRpb246ITF9LCJoaWxsc2hhZGUtaWxsdW1pbmF0aW9uLWFuY2hvciI6e3R5cGU6ImVudW0iLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCx2YWx1ZXM6e21hcDp7fSx2aWV3cG9ydDp7fX0sZGVmYXVsdDoidmlld3BvcnQifSwiaGlsbHNoYWRlLWV4YWdnZXJhdGlvbiI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDouNSxtaW5pbXVtOjAsbWF4aW11bToxLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwfSwiaGlsbHNoYWRlLXNoYWRvdy1jb2xvciI6e3R5cGU6ImNvbG9yIixkZWZhdWx0OiIjMDAwMDAwIixmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMH0sImhpbGxzaGFkZS1oaWdobGlnaHQtY29sb3IiOnt0eXBlOiJjb2xvciIsZGVmYXVsdDoiI0ZGRkZGRiIsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLHRyYW5zaXRpb246ITB9LCJoaWxsc2hhZGUtYWNjZW50LWNvbG9yIjp7dHlwZToiY29sb3IiLGRlZmF1bHQ6IiMwMDAwMDAiLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwfX0scGFpbnRfYmFja2dyb3VuZDp7ImJhY2tncm91bmQtY29sb3IiOnt0eXBlOiJjb2xvciIsZGVmYXVsdDoiIzAwMDAwMCIsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLHRyYW5zaXRpb246ITAscmVxdWlyZXM6W3siISI6ImJhY2tncm91bmQtcGF0dGVybiJ9XX0sImJhY2tncm91bmQtcGF0dGVybiI6e3R5cGU6InN0cmluZyIsZnVuY3Rpb246InBpZWNld2lzZS1jb25zdGFudCIsInpvb20tZnVuY3Rpb24iOiEwLHRyYW5zaXRpb246ITB9LCJiYWNrZ3JvdW5kLW9wYWNpdHkiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MSxtaW5pbXVtOjAsbWF4aW11bToxLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwfX0sdHJhbnNpdGlvbjp7ZHVyYXRpb246e3R5cGU6Im51bWJlciIsZGVmYXVsdDozMDAsbWluaW11bTowLHVuaXRzOiJtaWxsaXNlY29uZHMifSxkZWxheTp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAsbWluaW11bTowLHVuaXRzOiJtaWxsaXNlY29uZHMifX0sImxheW91dF9maWxsLWV4dHJ1c2lvbiI6e3Zpc2liaWxpdHk6e3R5cGU6ImVudW0iLHZhbHVlczp7dmlzaWJsZTp7fSxub25lOnt9fSxkZWZhdWx0OiJ2aXNpYmxlIn19LGZ1bmN0aW9uOntleHByZXNzaW9uOnt0eXBlOiJleHByZXNzaW9uIn0sc3RvcHM6e3R5cGU6ImFycmF5Iix2YWx1ZToiZnVuY3Rpb25fc3RvcCJ9LGJhc2U6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxLG1pbmltdW06MH0scHJvcGVydHk6e3R5cGU6InN0cmluZyIsZGVmYXVsdDoiJHpvb20ifSx0eXBlOnt0eXBlOiJlbnVtIix2YWx1ZXM6e2lkZW50aXR5Ont9LGV4cG9uZW50aWFsOnt9LGludGVydmFsOnt9LGNhdGVnb3JpY2FsOnt9fSxkZWZhdWx0OiJleHBvbmVudGlhbCJ9LGNvbG9yU3BhY2U6e3R5cGU6ImVudW0iLHZhbHVlczp7cmdiOnt9LGxhYjp7fSxoY2w6e319LGRlZmF1bHQ6InJnYiJ9LGRlZmF1bHQ6e3R5cGU6IioiLHJlcXVpcmVkOiExfX0sInBhaW50X2ZpbGwtZXh0cnVzaW9uIjp7ImZpbGwtZXh0cnVzaW9uLW9wYWNpdHkiOnt0eXBlOiJudW1iZXIiLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiExLGRlZmF1bHQ6MSxtaW5pbXVtOjAsbWF4aW11bToxLHRyYW5zaXRpb246ITB9LCJmaWxsLWV4dHJ1c2lvbi1jb2xvciI6e3R5cGU6ImNvbG9yIixkZWZhdWx0OiIjMDAwMDAwIixmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwLHJlcXVpcmVzOlt7IiEiOiJmaWxsLWV4dHJ1c2lvbi1wYXR0ZXJuIn1dfSwiZmlsbC1leHRydXNpb24tdHJhbnNsYXRlIjp7dHlwZToiYXJyYXkiLHZhbHVlOiJudW1iZXIiLGxlbmd0aDoyLGRlZmF1bHQ6WzAsMF0sZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLHRyYW5zaXRpb246ITAsdW5pdHM6InBpeGVscyJ9LCJmaWxsLWV4dHJ1c2lvbi10cmFuc2xhdGUtYW5jaG9yIjp7dHlwZToiZW51bSIsZnVuY3Rpb246InBpZWNld2lzZS1jb25zdGFudCIsInpvb20tZnVuY3Rpb24iOiEwLHZhbHVlczp7bWFwOnt9LHZpZXdwb3J0Ont9fSxkZWZhdWx0OiJtYXAiLHJlcXVpcmVzOlsiZmlsbC1leHRydXNpb24tdHJhbnNsYXRlIl19LCJmaWxsLWV4dHJ1c2lvbi1wYXR0ZXJuIjp7dHlwZToic3RyaW5nIixmdW5jdGlvbjoicGllY2V3aXNlLWNvbnN0YW50Iiwiem9vbS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMH0sImZpbGwtZXh0cnVzaW9uLWhlaWdodCI6e3R5cGU6Im51bWJlciIsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsZGVmYXVsdDowLG1pbmltdW06MCx1bml0czoibWV0ZXJzIix0cmFuc2l0aW9uOiEwfSwiZmlsbC1leHRydXNpb24tYmFzZSI6e3R5cGU6Im51bWJlciIsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsZGVmYXVsdDowLG1pbmltdW06MCx1bml0czoibWV0ZXJzIix0cmFuc2l0aW9uOiEwLHJlcXVpcmVzOlsiZmlsbC1leHRydXNpb24taGVpZ2h0Il19fX0sTz1mdW5jdGlvbih0LGUscixuKXt0aGlzLm1lc3NhZ2U9KHQ/dCsiOiAiOiIiKStyLG4mJih0aGlzLmlkZW50aWZpZXI9biksbnVsbCE9ZSYmZS5fX2xpbmVfXyYmKHRoaXMubGluZT1lLl9fbGluZV9fKX07ZnVuY3Rpb24gRCh0KXt2YXIgZT10LmtleSxyPXQudmFsdWU7cmV0dXJuIHI/W25ldyBPKGUsciwiY29uc3RhbnRzIGhhdmUgYmVlbiBkZXByZWNhdGVkIGFzIG9mIHY4IildOltdfWZ1bmN0aW9uIFIodCl7Zm9yKHZhciBlPVtdLHI9YXJndW1lbnRzLmxlbmd0aC0xO3ItLSA+MDspZVtyXT1hcmd1bWVudHNbcisxXTtmb3IodmFyIG49MCxpPWU7bjxpLmxlbmd0aDtuKz0xKXt2YXIgYT1pW25dO2Zvcih2YXIgbyBpbiBhKXRbb109YVtvXX1yZXR1cm4gdH1mdW5jdGlvbiBCKHQpe3JldHVybiB0IGluc3RhbmNlb2YgTnVtYmVyfHx0IGluc3RhbmNlb2YgU3RyaW5nfHx0IGluc3RhbmNlb2YgQm9vbGVhbj90LnZhbHVlT2YoKTp0fWZ1bmN0aW9uIEYodCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/dC5tYXAoRik6Qih0KX12YXIgTj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUscil7dC5jYWxsKHRoaXMsciksdGhpcy5tZXNzYWdlPXIsdGhpcy5rZXk9ZX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZX0oRXJyb3IpLGo9ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1lJiYoZT1bXSksdGhpcy5wYXJlbnQ9dCx0aGlzLmJpbmRpbmdzPXt9O2Zvcih2YXIgcj0wLG49ZTtyPG4ubGVuZ3RoO3IrPTEpe3ZhciBpPW5bcl0sYT1pWzBdLG89aVsxXTt0aGlzLmJpbmRpbmdzW2FdPW99fTtqLnByb3RvdHlwZS5jb25jYXQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBqKHRoaXMsdCl9LGoucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtpZih0aGlzLmJpbmRpbmdzW3RdKXJldHVybiB0aGlzLmJpbmRpbmdzW3RdO2lmKHRoaXMucGFyZW50KXJldHVybiB0aGlzLnBhcmVudC5nZXQodCk7dGhyb3cgbmV3IEVycm9yKHQrIiBub3QgZm91bmQgaW4gc2NvcGUuIil9LGoucHJvdG90eXBlLmhhcz1mdW5jdGlvbih0KXtyZXR1cm4hIXRoaXMuYmluZGluZ3NbdF18fCEhdGhpcy5wYXJlbnQmJnRoaXMucGFyZW50Lmhhcyh0KX07dmFyIFY9e2tpbmQ6Im51bGwifSxVPXtraW5kOiJudW1iZXIifSxxPXtraW5kOiJzdHJpbmcifSxIPXtraW5kOiJib29sZWFuIn0sRz17a2luZDoiY29sb3IifSxXPXtraW5kOiJvYmplY3QifSxZPXtraW5kOiJ2YWx1ZSJ9LFg9e2tpbmQ6ImNvbGxhdG9yIn07ZnVuY3Rpb24gWih0LGUpe3JldHVybntraW5kOiJhcnJheSIsaXRlbVR5cGU6dCxOOmV9fWZ1bmN0aW9uICQodCl7aWYoImFycmF5Ij09PXQua2luZCl7dmFyIGU9JCh0Lml0ZW1UeXBlKTtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQuTj8iYXJyYXk8IitlKyIsICIrdC5OKyI+IjoidmFsdWUiPT09dC5pdGVtVHlwZS5raW5kPyJhcnJheSI6ImFycmF5PCIrZSsiPiJ9cmV0dXJuIHQua2luZH12YXIgSj1bVixVLHEsSCxHLFcsWihZKV07ZnVuY3Rpb24gSyh0LGUpe2lmKCJlcnJvciI9PT1lLmtpbmQpcmV0dXJuIG51bGw7aWYoImFycmF5Ij09PXQua2luZCl7aWYoImFycmF5Ij09PWUua2luZCYmIUsodC5pdGVtVHlwZSxlLml0ZW1UeXBlKSYmKCJudW1iZXIiIT10eXBlb2YgdC5OfHx0Lk49PT1lLk4pKXJldHVybiBudWxsfWVsc2V7aWYodC5raW5kPT09ZS5raW5kKXJldHVybiBudWxsO2lmKCJ2YWx1ZSI9PT10LmtpbmQpZm9yKHZhciByPTAsbj1KO3I8bi5sZW5ndGg7cis9MSlpZighSyhuW3JdLGUpKXJldHVybiBudWxsfXJldHVybiJFeHBlY3RlZCAiKyQodCkrIiBidXQgZm91bmQgIiskKGUpKyIgaW5zdGVhZC4ifXZhciBRPWkoZnVuY3Rpb24odCxlKXt2YXIgcj17dHJhbnNwYXJlbnQ6WzAsMCwwLDBdLGFsaWNlYmx1ZTpbMjQwLDI0OCwyNTUsMV0sYW50aXF1ZXdoaXRlOlsyNTAsMjM1LDIxNSwxXSxhcXVhOlswLDI1NSwyNTUsMV0sYXF1YW1hcmluZTpbMTI3LDI1NSwyMTIsMV0sYXp1cmU6WzI0MCwyNTUsMjU1LDFdLGJlaWdlOlsyNDUsMjQ1LDIyMCwxXSxiaXNxdWU6WzI1NSwyMjgsMTk2LDFdLGJsYWNrOlswLDAsMCwxXSxibGFuY2hlZGFsbW9uZDpbMjU1LDIzNSwyMDUsMV0sYmx1ZTpbMCwwLDI1NSwxXSxibHVldmlvbGV0OlsxMzgsNDMsMjI2LDFdLGJyb3duOlsxNjUsNDIsNDIsMV0sYnVybHl3b29kOlsyMjIsMTg0LDEzNSwxXSxjYWRldGJsdWU6Wzk1LDE1OCwxNjAsMV0sY2hhcnRyZXVzZTpbMTI3LDI1NSwwLDFdLGNob2NvbGF0ZTpbMjEwLDEwNSwzMCwxXSxjb3JhbDpbMjU1LDEyNyw4MCwxXSxjb3JuZmxvd2VyYmx1ZTpbMTAwLDE0OSwyMzcsMV0sY29ybnNpbGs6WzI1NSwyNDgsMjIwLDFdLGNyaW1zb246WzIyMCwyMCw2MCwxXSxjeWFuOlswLDI1NSwyNTUsMV0sZGFya2JsdWU6WzAsMCwxMzksMV0sZGFya2N5YW46WzAsMTM5LDEzOSwxXSxkYXJrZ29sZGVucm9kOlsxODQsMTM0LDExLDFdLGRhcmtncmF5OlsxNjksMTY5LDE2OSwxXSxkYXJrZ3JlZW46WzAsMTAwLDAsMV0sZGFya2dyZXk6WzE2OSwxNjksMTY5LDFdLGRhcmtraGFraTpbMTg5LDE4MywxMDcsMV0sZGFya21hZ2VudGE6WzEzOSwwLDEzOSwxXSxkYXJrb2xpdmVncmVlbjpbODUsMTA3LDQ3LDFdLGRhcmtvcmFuZ2U6WzI1NSwxNDAsMCwxXSxkYXJrb3JjaGlkOlsxNTMsNTAsMjA0LDFdLGRhcmtyZWQ6WzEzOSwwLDAsMV0sZGFya3NhbG1vbjpbMjMzLDE1MCwxMjIsMV0sZGFya3NlYWdyZWVuOlsxNDMsMTg4LDE0MywxXSxkYXJrc2xhdGVibHVlOls3Miw2MSwxMzksMV0sZGFya3NsYXRlZ3JheTpbNDcsNzksNzksMV0sZGFya3NsYXRlZ3JleTpbNDcsNzksNzksMV0sZGFya3R1cnF1b2lzZTpbMCwyMDYsMjA5LDFdLGRhcmt2aW9sZXQ6WzE0OCwwLDIxMSwxXSxkZWVwcGluazpbMjU1LDIwLDE0NywxXSxkZWVwc2t5Ymx1ZTpbMCwxOTEsMjU1LDFdLGRpbWdyYXk6WzEwNSwxMDUsMTA1LDFdLGRpbWdyZXk6WzEwNSwxMDUsMTA1LDFdLGRvZGdlcmJsdWU6WzMwLDE0NCwyNTUsMV0sZmlyZWJyaWNrOlsxNzgsMzQsMzQsMV0sZmxvcmFsd2hpdGU6WzI1NSwyNTAsMjQwLDFdLGZvcmVzdGdyZWVuOlszNCwxMzksMzQsMV0sZnVjaHNpYTpbMjU1LDAsMjU1LDFdLGdhaW5zYm9ybzpbMjIwLDIyMCwyMjAsMV0sZ2hvc3R3aGl0ZTpbMjQ4LDI0OCwyNTUsMV0sZ29sZDpbMjU1LDIxNSwwLDFdLGdvbGRlbnJvZDpbMjE4LDE2NSwzMiwxXSxncmF5OlsxMjgsMTI4LDEyOCwxXSxncmVlbjpbMCwxMjgsMCwxXSxncmVlbnllbGxvdzpbMTczLDI1NSw0NywxXSxncmV5OlsxMjgsMTI4LDEyOCwxXSxob25leWRldzpbMjQwLDI1NSwyNDAsMV0saG90cGluazpbMjU1LDEwNSwxODAsMV0saW5kaWFucmVkOlsyMDUsOTIsOTIsMV0saW5kaWdvOls3NSwwLDEzMCwxXSxpdm9yeTpbMjU1LDI1NSwyNDAsMV0sa2hha2k6WzI0MCwyMzAsMTQwLDFdLGxhdmVuZGVyOlsyMzAsMjMwLDI1MCwxXSxsYXZlbmRlcmJsdXNoOlsyNTUsMjQwLDI0NSwxXSxsYXduZ3JlZW46WzEyNCwyNTIsMCwxXSxsZW1vbmNoaWZmb246WzI1NSwyNTAsMjA1LDFdLGxpZ2h0Ymx1ZTpbMTczLDIxNiwyMzAsMV0sbGlnaHRjb3JhbDpbMjQwLDEyOCwxMjgsMV0sbGlnaHRjeWFuOlsyMjQsMjU1LDI1NSwxXSxsaWdodGdvbGRlbnJvZHllbGxvdzpbMjUwLDI1MCwyMTAsMV0sbGlnaHRncmF5OlsyMTEsMjExLDIxMSwxXSxsaWdodGdyZWVuOlsxNDQsMjM4LDE0NCwxXSxsaWdodGdyZXk6WzIxMSwyMTEsMjExLDFdLGxpZ2h0cGluazpbMjU1LDE4MiwxOTMsMV0sbGlnaHRzYWxtb246WzI1NSwxNjAsMTIyLDFdLGxpZ2h0c2VhZ3JlZW46WzMyLDE3OCwxNzAsMV0sbGlnaHRza3libHVlOlsxMzUsMjA2LDI1MCwxXSxsaWdodHNsYXRlZ3JheTpbMTE5LDEzNiwxNTMsMV0sbGlnaHRzbGF0ZWdyZXk6WzExOSwxMzYsMTUzLDFdLGxpZ2h0c3RlZWxibHVlOlsxNzYsMTk2LDIyMiwxXSxsaWdodHllbGxvdzpbMjU1LDI1NSwyMjQsMV0sbGltZTpbMCwyNTUsMCwxXSxsaW1lZ3JlZW46WzUwLDIwNSw1MCwxXSxsaW5lbjpbMjUwLDI0MCwyMzAsMV0sbWFnZW50YTpbMjU1LDAsMjU1LDFdLG1hcm9vbjpbMTI4LDAsMCwxXSxtZWRpdW1hcXVhbWFyaW5lOlsxMDIsMjA1LDE3MCwxXSxtZWRpdW1ibHVlOlswLDAsMjA1LDFdLG1lZGl1bW9yY2hpZDpbMTg2LDg1LDIxMSwxXSxtZWRpdW1wdXJwbGU6WzE0NywxMTIsMjE5LDFdLG1lZGl1bXNlYWdyZWVuOls2MCwxNzksMTEzLDFdLG1lZGl1bXNsYXRlYmx1ZTpbMTIzLDEwNCwyMzgsMV0sbWVkaXVtc3ByaW5nZ3JlZW46WzAsMjUwLDE1NCwxXSxtZWRpdW10dXJxdW9pc2U6WzcyLDIwOSwyMDQsMV0sbWVkaXVtdmlvbGV0cmVkOlsxOTksMjEsMTMzLDFdLG1pZG5pZ2h0Ymx1ZTpbMjUsMjUsMTEyLDFdLG1pbnRjcmVhbTpbMjQ1LDI1NSwyNTAsMV0sbWlzdHlyb3NlOlsyNTUsMjI4LDIyNSwxXSxtb2NjYXNpbjpbMjU1LDIyOCwxODEsMV0sbmF2YWpvd2hpdGU6WzI1NSwyMjIsMTczLDFdLG5hdnk6WzAsMCwxMjgsMV0sb2xkbGFjZTpbMjUzLDI0NSwyMzAsMV0sb2xpdmU6WzEyOCwxMjgsMCwxXSxvbGl2ZWRyYWI6WzEwNywxNDIsMzUsMV0sb3JhbmdlOlsyNTUsMTY1LDAsMV0sb3JhbmdlcmVkOlsyNTUsNjksMCwxXSxvcmNoaWQ6WzIxOCwxMTIsMjE0LDFdLHBhbGVnb2xkZW5yb2Q6WzIzOCwyMzIsMTcwLDFdLHBhbGVncmVlbjpbMTUyLDI1MSwxNTIsMV0scGFsZXR1cnF1b2lzZTpbMTc1LDIzOCwyMzgsMV0scGFsZXZpb2xldHJlZDpbMjE5LDExMiwxNDcsMV0scGFwYXlhd2hpcDpbMjU1LDIzOSwyMTMsMV0scGVhY2hwdWZmOlsyNTUsMjE4LDE4NSwxXSxwZXJ1OlsyMDUsMTMzLDYzLDFdLHBpbms6WzI1NSwxOTIsMjAzLDFdLHBsdW06WzIyMSwxNjAsMjIxLDFdLHBvd2RlcmJsdWU6WzE3NiwyMjQsMjMwLDFdLHB1cnBsZTpbMTI4LDAsMTI4LDFdLHJlYmVjY2FwdXJwbGU6WzEwMiw1MSwxNTMsMV0scmVkOlsyNTUsMCwwLDFdLHJvc3licm93bjpbMTg4LDE0MywxNDMsMV0scm95YWxibHVlOls2NSwxMDUsMjI1LDFdLHNhZGRsZWJyb3duOlsxMzksNjksMTksMV0sc2FsbW9uOlsyNTAsMTI4LDExNCwxXSxzYW5keWJyb3duOlsyNDQsMTY0LDk2LDFdLHNlYWdyZWVuOls0NiwxMzksODcsMV0sc2Vhc2hlbGw6WzI1NSwyNDUsMjM4LDFdLHNpZW5uYTpbMTYwLDgyLDQ1LDFdLHNpbHZlcjpbMTkyLDE5MiwxOTIsMV0sc2t5Ymx1ZTpbMTM1LDIwNiwyMzUsMV0sc2xhdGVibHVlOlsxMDYsOTAsMjA1LDFdLHNsYXRlZ3JheTpbMTEyLDEyOCwxNDQsMV0sc2xhdGVncmV5OlsxMTIsMTI4LDE0NCwxXSxzbm93OlsyNTUsMjUwLDI1MCwxXSxzcHJpbmdncmVlbjpbMCwyNTUsMTI3LDFdLHN0ZWVsYmx1ZTpbNzAsMTMwLDE4MCwxXSx0YW46WzIxMCwxODAsMTQwLDFdLHRlYWw6WzAsMTI4LDEyOCwxXSx0aGlzdGxlOlsyMTYsMTkxLDIxNiwxXSx0b21hdG86WzI1NSw5OSw3MSwxXSx0dXJxdW9pc2U6WzY0LDIyNCwyMDgsMV0sdmlvbGV0OlsyMzgsMTMwLDIzOCwxXSx3aGVhdDpbMjQ1LDIyMiwxNzksMV0sd2hpdGU6WzI1NSwyNTUsMjU1LDFdLHdoaXRlc21va2U6WzI0NSwyNDUsMjQ1LDFdLHllbGxvdzpbMjU1LDI1NSwwLDFdLHllbGxvd2dyZWVuOlsxNTQsMjA1LDUwLDFdfTtmdW5jdGlvbiBuKHQpe3JldHVybih0PU1hdGgucm91bmQodCkpPDA/MDp0PjI1NT8yNTU6dH1mdW5jdGlvbiBpKHQpe3JldHVybiB0PDA/MDp0PjE/MTp0fWZ1bmN0aW9uIGEodCl7cmV0dXJuIiUiPT09dFt0Lmxlbmd0aC0xXT9uKHBhcnNlRmxvYXQodCkvMTAwKjI1NSk6bihwYXJzZUludCh0KSl9ZnVuY3Rpb24gbyh0KXtyZXR1cm4iJSI9PT10W3QubGVuZ3RoLTFdP2kocGFyc2VGbG9hdCh0KS8xMDApOmkocGFyc2VGbG9hdCh0KSl9ZnVuY3Rpb24gcyh0LGUscil7cmV0dXJuIHI8MD9yKz0xOnI+MSYmKHItPTEpLDYqcjwxP3QrKGUtdCkqcio2OjIqcjwxP2U6MypyPDI/dCsoZS10KSooMi8zLXIpKjY6dH10cnl7ZS5wYXJzZUNTU0NvbG9yPWZ1bmN0aW9uKHQpe3ZhciBlLGk9dC5yZXBsYWNlKC8gL2csIiIpLnRvTG93ZXJDYXNlKCk7aWYoaSBpbiByKXJldHVybiByW2ldLnNsaWNlKCk7aWYoIiMiPT09aVswXSlyZXR1cm4gND09PWkubGVuZ3RoPyhlPXBhcnNlSW50KGkuc3Vic3RyKDEpLDE2KSk+PTAmJmU8PTQwOTU/WygzODQwJmUpPj40fCgzODQwJmUpPj44LDI0MCZlfCgyNDAmZSk+PjQsMTUmZXwoMTUmZSk8PDQsMV06bnVsbDo3PT09aS5sZW5ndGgmJihlPXBhcnNlSW50KGkuc3Vic3RyKDEpLDE2KSk+PTAmJmU8PTE2Nzc3MjE1P1soMTY3MTE2ODAmZSk+PjE2LCg2NTI4MCZlKT4+OCwyNTUmZSwxXTpudWxsO3ZhciBsPWkuaW5kZXhPZigiKCIpLGM9aS5pbmRleE9mKCIpIik7aWYoLTEhPT1sJiZjKzE9PT1pLmxlbmd0aCl7dmFyIHU9aS5zdWJzdHIoMCxsKSxoPWkuc3Vic3RyKGwrMSxjLShsKzEpKS5zcGxpdCgiLCIpLGY9MTtzd2l0Y2godSl7Y2FzZSJyZ2JhIjppZig0IT09aC5sZW5ndGgpcmV0dXJuIG51bGw7Zj1vKGgucG9wKCkpO2Nhc2UicmdiIjpyZXR1cm4gMyE9PWgubGVuZ3RoP251bGw6W2EoaFswXSksYShoWzFdKSxhKGhbMl0pLGZdO2Nhc2UiaHNsYSI6aWYoNCE9PWgubGVuZ3RoKXJldHVybiBudWxsO2Y9byhoLnBvcCgpKTtjYXNlImhzbCI6aWYoMyE9PWgubGVuZ3RoKXJldHVybiBudWxsO3ZhciBwPShwYXJzZUZsb2F0KGhbMF0pJTM2MCszNjApJTM2MC8zNjAsZD1vKGhbMV0pLGc9byhoWzJdKSxtPWc8PS41P2cqKGQrMSk6ZytkLWcqZCx2PTIqZy1tO3JldHVybltuKDI1NSpzKHYsbSxwKzEvMykpLG4oMjU1KnModixtLHApKSxuKDI1NSpzKHYsbSxwLTEvMykpLGZdO2RlZmF1bHQ6cmV0dXJuIG51bGx9fXJldHVybiBudWxsfX1jYXRjaCh0KXt9fSkucGFyc2VDU1NDb2xvcix0dD1mdW5jdGlvbih0LGUscixuKXt2b2lkIDA9PT1uJiYobj0xKSx0aGlzLnI9dCx0aGlzLmc9ZSx0aGlzLmI9cix0aGlzLmE9bn07dHQucGFyc2U9ZnVuY3Rpb24odCl7aWYodCl7aWYodCBpbnN0YW5jZW9mIHR0KXJldHVybiB0O2lmKCJzdHJpbmciPT10eXBlb2YgdCl7dmFyIGU9USh0KTtpZihlKXJldHVybiBuZXcgdHQoZVswXS8yNTUqZVszXSxlWzFdLzI1NSplWzNdLGVbMl0vMjU1KmVbM10sZVszXSl9fX0sdHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy50b0FycmF5KCksZT10WzBdLHI9dFsxXSxuPXRbMl0saT10WzNdO3JldHVybiJyZ2JhKCIrTWF0aC5yb3VuZChlKSsiLCIrTWF0aC5yb3VuZChyKSsiLCIrTWF0aC5yb3VuZChuKSsiLCIraSsiKSJ9LHR0LnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5yLGU9dGhpcy5nLHI9dGhpcy5iLG49dGhpcy5hO3JldHVybiAwPT09bj9bMCwwLDAsMF06WzI1NSp0L24sMjU1KmUvbiwyNTUqci9uLG5dfSx0dC5ibGFjaz1uZXcgdHQoMCwwLDAsMSksdHQud2hpdGU9bmV3IHR0KDEsMSwxLDEpLHR0LnRyYW5zcGFyZW50PW5ldyB0dCgwLDAsMCwwKTt2YXIgZXQ9ZnVuY3Rpb24odCxlLHIpe3RoaXMuc2Vuc2l0aXZpdHk9dD9lPyJ2YXJpYW50IjoiY2FzZSI6ZT8iYWNjZW50IjoiYmFzZSIsdGhpcy5sb2NhbGU9cix0aGlzLmNvbGxhdG9yPW5ldyBJbnRsLkNvbGxhdG9yKHRoaXMubG9jYWxlP3RoaXMubG9jYWxlOltdLHtzZW5zaXRpdml0eTp0aGlzLnNlbnNpdGl2aXR5LHVzYWdlOiJzZWFyY2gifSl9O2V0LnByb3RvdHlwZS5jb21wYXJlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuY29sbGF0b3IuY29tcGFyZSh0LGUpfSxldC5wcm90b3R5cGUucmVzb2x2ZWRMb2NhbGU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEludGwuQ29sbGF0b3IodGhpcy5sb2NhbGU/dGhpcy5sb2NhbGU6W10pLnJlc29sdmVkT3B0aW9ucygpLmxvY2FsZX07dmFyIHJ0PWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnR5cGU9WCx0aGlzLmxvY2FsZT1yLHRoaXMuY2FzZVNlbnNpdGl2ZT10LHRoaXMuZGlhY3JpdGljU2Vuc2l0aXZlPWV9O2Z1bmN0aW9uIG50KHQsZSxyLG4pe3JldHVybiJudW1iZXIiPT10eXBlb2YgdCYmdD49MCYmdDw9MjU1JiYibnVtYmVyIj09dHlwZW9mIGUmJmU+PTAmJmU8PTI1NSYmIm51bWJlciI9PXR5cGVvZiByJiZyPj0wJiZyPD0yNTU/dm9pZCAwPT09bnx8Im51bWJlciI9PXR5cGVvZiBuJiZuPj0wJiZuPD0xP251bGw6IkludmFsaWQgcmdiYSB2YWx1ZSBbIitbdCxlLHIsbl0uam9pbigiLCAiKSsiXTogJ2EnIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAxLiI6IkludmFsaWQgcmdiYSB2YWx1ZSBbIisoIm51bWJlciI9PXR5cGVvZiBuP1t0LGUscixuXTpbdCxlLHJdKS5qb2luKCIsICIpKyJdOiAncicsICdnJywgYW5kICdiJyBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMjU1LiJ9ZnVuY3Rpb24gaXQodCl7aWYobnVsbD09PXQpcmV0dXJuIFY7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBxO2lmKCJib29sZWFuIj09dHlwZW9mIHQpcmV0dXJuIEg7aWYoIm51bWJlciI9PXR5cGVvZiB0KXJldHVybiBVO2lmKHQgaW5zdGFuY2VvZiB0dClyZXR1cm4gRztpZih0IGluc3RhbmNlb2YgZXQpcmV0dXJuIFg7aWYoQXJyYXkuaXNBcnJheSh0KSl7Zm9yKHZhciBlLHI9dC5sZW5ndGgsbj0wLGk9dDtuPGkubGVuZ3RoO24rPTEpe3ZhciBhPWl0KGlbbl0pO2lmKGUpe2lmKGU9PT1hKWNvbnRpbnVlO2U9WTticmVha31lPWF9cmV0dXJuIFooZXx8WSxyKX1yZXR1cm4gV31ydC5wYXJzZT1mdW5jdGlvbih0LGUpe2lmKDIhPT10Lmxlbmd0aClyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgb25lIGFyZ3VtZW50LiIpO3ZhciByPXRbMV07aWYoIm9iamVjdCIhPXR5cGVvZiByfHxBcnJheS5pc0FycmF5KHIpKXJldHVybiBlLmVycm9yKCJDb2xsYXRvciBvcHRpb25zIGFyZ3VtZW50IG11c3QgYmUgYW4gb2JqZWN0LiIpO3ZhciBuPWUucGFyc2Uodm9pZCAwIT09clsiY2FzZS1zZW5zaXRpdmUiXSYmclsiY2FzZS1zZW5zaXRpdmUiXSwxLEgpO2lmKCFuKXJldHVybiBudWxsO3ZhciBpPWUucGFyc2Uodm9pZCAwIT09clsiZGlhY3JpdGljLXNlbnNpdGl2ZSJdJiZyWyJkaWFjcml0aWMtc2Vuc2l0aXZlIl0sMSxIKTtpZighaSlyZXR1cm4gbnVsbDt2YXIgYT1udWxsO3JldHVybiByLmxvY2FsZSYmIShhPWUucGFyc2Uoci5sb2NhbGUsMSxxKSk/bnVsbDpuZXcgcnQobixpLGEpfSxydC5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBldCh0aGlzLmNhc2VTZW5zaXRpdmUuZXZhbHVhdGUodCksdGhpcy5kaWFjcml0aWNTZW5zaXRpdmUuZXZhbHVhdGUodCksdGhpcy5sb2NhbGU/dGhpcy5sb2NhbGUuZXZhbHVhdGUodCk6bnVsbCl9LHJ0LnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24odCl7dCh0aGlzLmNhc2VTZW5zaXRpdmUpLHQodGhpcy5kaWFjcml0aWNTZW5zaXRpdmUpLHRoaXMubG9jYWxlJiZ0KHRoaXMubG9jYWxlKX0scnQucHJvdG90eXBlLnBvc3NpYmxlT3V0cHV0cz1mdW5jdGlvbigpe3JldHVyblt2b2lkIDBdfSxydC5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7dmFyIHQ9e307cmV0dXJuIHRbImNhc2Utc2Vuc2l0aXZlIl09dGhpcy5jYXNlU2Vuc2l0aXZlLnNlcmlhbGl6ZSgpLHRbImRpYWNyaXRpYy1zZW5zaXRpdmUiXT10aGlzLmRpYWNyaXRpY1NlbnNpdGl2ZS5zZXJpYWxpemUoKSx0aGlzLmxvY2FsZSYmKHQubG9jYWxlPXRoaXMubG9jYWxlLnNlcmlhbGl6ZSgpKSxbImNvbGxhdG9yIix0XX07dmFyIGF0PWZ1bmN0aW9uKHQsZSl7dGhpcy50eXBlPXQsdGhpcy52YWx1ZT1lfTthdC5wYXJzZT1mdW5jdGlvbih0LGUpe2lmKDIhPT10Lmxlbmd0aClyZXR1cm4gZS5lcnJvcigiJ2xpdGVyYWwnIGV4cHJlc3Npb24gcmVxdWlyZXMgZXhhY3RseSBvbmUgYXJndW1lbnQsIGJ1dCBmb3VuZCAiKyh0Lmxlbmd0aC0xKSsiIGluc3RlYWQuIik7aWYoIWZ1bmN0aW9uIHQoZSl7aWYobnVsbD09PWUpcmV0dXJuITA7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiEwO2lmKCJib29sZWFuIj09dHlwZW9mIGUpcmV0dXJuITA7aWYoIm51bWJlciI9PXR5cGVvZiBlKXJldHVybiEwO2lmKGUgaW5zdGFuY2VvZiB0dClyZXR1cm4hMDtpZihlIGluc3RhbmNlb2YgZXQpcmV0dXJuITA7aWYoQXJyYXkuaXNBcnJheShlKSl7Zm9yKHZhciByPTAsbj1lO3I8bi5sZW5ndGg7cis9MSlpZighdChuW3JdKSlyZXR1cm4hMTtyZXR1cm4hMH1pZigib2JqZWN0Ij09dHlwZW9mIGUpe2Zvcih2YXIgaSBpbiBlKWlmKCF0KGVbaV0pKXJldHVybiExO3JldHVybiEwfXJldHVybiExfSh0WzFdKSlyZXR1cm4gZS5lcnJvcigiaW52YWxpZCB2YWx1ZSIpO3ZhciByPXRbMV0sbj1pdChyKSxpPWUuZXhwZWN0ZWRUeXBlO3JldHVybiJhcnJheSIhPT1uLmtpbmR8fDAhPT1uLk58fCFpfHwiYXJyYXkiIT09aS5raW5kfHwibnVtYmVyIj09dHlwZW9mIGkuTiYmMCE9PWkuTnx8KG49aSksbmV3IGF0KG4scil9LGF0LnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnZhbHVlfSxhdC5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKCl7fSxhdC5wcm90b3R5cGUucG9zc2libGVPdXRwdXRzPWZ1bmN0aW9uKCl7cmV0dXJuW3RoaXMudmFsdWVdfSxhdC5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJuImFycmF5Ij09PXRoaXMudHlwZS5raW5kfHwib2JqZWN0Ij09PXRoaXMudHlwZS5raW5kP1sibGl0ZXJhbCIsdGhpcy52YWx1ZV06dGhpcy52YWx1ZSBpbnN0YW5jZW9mIHR0P1sicmdiYSJdLmNvbmNhdCh0aGlzLnZhbHVlLnRvQXJyYXkoKSk6dGhpcy52YWx1ZX07dmFyIG90PWZ1bmN0aW9uKHQpe3RoaXMubmFtZT0iRXhwcmVzc2lvbkV2YWx1YXRpb25FcnJvciIsdGhpcy5tZXNzYWdlPXR9O290LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZXNzYWdlfTt2YXIgc3Q9e3N0cmluZzpxLG51bWJlcjpVLGJvb2xlYW46SCxvYmplY3Q6V30sbHQ9ZnVuY3Rpb24odCxlKXt0aGlzLnR5cGU9dCx0aGlzLmFyZ3M9ZX07bHQucGFyc2U9ZnVuY3Rpb24odCxlKXtpZih0Lmxlbmd0aDwyKXJldHVybiBlLmVycm9yKCJFeHBlY3RlZCBhdCBsZWFzdCBvbmUgYXJndW1lbnQuIik7Zm9yKHZhciByPXRbMF0sbj1zdFtyXSxpPVtdLGE9MTthPHQubGVuZ3RoO2ErKyl7dmFyIG89ZS5wYXJzZSh0W2FdLGEsWSk7aWYoIW8pcmV0dXJuIG51bGw7aS5wdXNoKG8pfXJldHVybiBuZXcgbHQobixpKX0sbHQucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8dGhpcy5hcmdzLmxlbmd0aDtlKyspe3ZhciByPXRoaXMuYXJnc1tlXS5ldmFsdWF0ZSh0KTtpZighSyh0aGlzLnR5cGUsaXQocikpKXJldHVybiByO2lmKGU9PT10aGlzLmFyZ3MubGVuZ3RoLTEpdGhyb3cgbmV3IG90KCJFeHBlY3RlZCB2YWx1ZSB0byBiZSBvZiB0eXBlICIrJCh0aGlzLnR5cGUpKyIsIGJ1dCBmb3VuZCAiKyQoaXQocikpKyIgaW5zdGVhZC4iKX1yZXR1cm4gbnVsbH0sbHQucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbih0KXt0aGlzLmFyZ3MuZm9yRWFjaCh0KX0sbHQucHJvdG90eXBlLnBvc3NpYmxlT3V0cHV0cz1mdW5jdGlvbigpe3JldHVybih0PVtdKS5jb25jYXQuYXBwbHkodCx0aGlzLmFyZ3MubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnBvc3NpYmxlT3V0cHV0cygpfSkpO3ZhciB0fSxsdC5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJuW3RoaXMudHlwZS5raW5kXS5jb25jYXQodGhpcy5hcmdzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5zZXJpYWxpemUoKX0pKX07dmFyIGN0PXtzdHJpbmc6cSxudW1iZXI6VSxib29sZWFuOkh9LHV0PWZ1bmN0aW9uKHQsZSl7dGhpcy50eXBlPXQsdGhpcy5pbnB1dD1lfTt1dC5wYXJzZT1mdW5jdGlvbih0LGUpe2lmKHQubGVuZ3RoPDJ8fHQubGVuZ3RoPjQpcmV0dXJuIGUuZXJyb3IoIkV4cGVjdGVkIDEsIDIsIG9yIDMgYXJndW1lbnRzLCBidXQgZm91bmQgIisodC5sZW5ndGgtMSkrIiBpbnN0ZWFkLiIpO3ZhciByLG47aWYodC5sZW5ndGg+Mil7dmFyIGk9dFsxXTtpZigic3RyaW5nIiE9dHlwZW9mIGl8fCEoaSBpbiBjdCkpcmV0dXJuIGUuZXJyb3IoJ1RoZSBpdGVtIHR5cGUgYXJndW1lbnQgb2YgImFycmF5IiBtdXN0IGJlIG9uZSBvZiBzdHJpbmcsIG51bWJlciwgYm9vbGVhbicsMSk7cj1jdFtpXX1lbHNlIHI9WTtpZih0Lmxlbmd0aD4zKXtpZigibnVtYmVyIiE9dHlwZW9mIHRbMl18fHRbMl08MHx8dFsyXSE9PU1hdGguZmxvb3IodFsyXSkpcmV0dXJuIGUuZXJyb3IoJ1RoZSBsZW5ndGggYXJndW1lbnQgdG8gImFycmF5IiBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciBsaXRlcmFsJywyKTtuPXRbMl19dmFyIGE9WihyLG4pLG89ZS5wYXJzZSh0W3QubGVuZ3RoLTFdLHQubGVuZ3RoLTEsWSk7cmV0dXJuIG8/bmV3IHV0KGEsbyk6bnVsbH0sdXQucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaW5wdXQuZXZhbHVhdGUodCk7aWYoSyh0aGlzLnR5cGUsaXQoZSkpKXRocm93IG5ldyBvdCgiRXhwZWN0ZWQgdmFsdWUgdG8gYmUgb2YgdHlwZSAiKyQodGhpcy50eXBlKSsiLCBidXQgZm91bmQgIiskKGl0KGUpKSsiIGluc3RlYWQuIik7cmV0dXJuIGV9LHV0LnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24odCl7dCh0aGlzLmlucHV0KX0sdXQucHJvdG90eXBlLnBvc3NpYmxlT3V0cHV0cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlucHV0LnBvc3NpYmxlT3V0cHV0cygpfSx1dC5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7dmFyIHQ9WyJhcnJheSJdLGU9dGhpcy50eXBlLml0ZW1UeXBlO2lmKCJzdHJpbmciPT09ZS5raW5kfHwibnVtYmVyIj09PWUua2luZHx8ImJvb2xlYW4iPT09ZS5raW5kKXt0LnB1c2goZS5raW5kKTt2YXIgcj10aGlzLnR5cGUuTjsibnVtYmVyIj09dHlwZW9mIHImJnQucHVzaChyKX1yZXR1cm4gdC5wdXNoKHRoaXMuaW5wdXQuc2VyaWFsaXplKCkpLHR9O3ZhciBodD17InRvLW51bWJlciI6VSwidG8tY29sb3IiOkd9LGZ0PWZ1bmN0aW9uKHQsZSl7dGhpcy50eXBlPXQsdGhpcy5hcmdzPWV9O2Z0LnBhcnNlPWZ1bmN0aW9uKHQsZSl7aWYodC5sZW5ndGg8MilyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgYXQgbGVhc3Qgb25lIGFyZ3VtZW50LiIpO2Zvcih2YXIgcj10WzBdLG49aHRbcl0saT1bXSxhPTE7YTx0Lmxlbmd0aDthKyspe3ZhciBvPWUucGFyc2UodFthXSxhLFkpO2lmKCFvKXJldHVybiBudWxsO2kucHVzaChvKX1yZXR1cm4gbmV3IGZ0KG4saSl9LGZ0LnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXtpZigiY29sb3IiPT09dGhpcy50eXBlLmtpbmQpe2Zvcih2YXIgZSxyLG49MCxpPXRoaXMuYXJncztuPGkubGVuZ3RoO24rPTEpaWYocj1udWxsLCJzdHJpbmciPT10eXBlb2YoZT1pW25dLmV2YWx1YXRlKHQpKSl7dmFyIGE9dC5wYXJzZUNvbG9yKGUpO2lmKGEpcmV0dXJuIGF9ZWxzZSBpZihBcnJheS5pc0FycmF5KGUpJiYhKHI9ZS5sZW5ndGg8M3x8ZS5sZW5ndGg+ND8iSW52YWxpZCByYmdhIHZhbHVlICIrSlNPTi5zdHJpbmdpZnkoZSkrIjogZXhwZWN0ZWQgYW4gYXJyYXkgY29udGFpbmluZyBlaXRoZXIgdGhyZWUgb3IgZm91ciBudW1lcmljIHZhbHVlcy4iOm50KGVbMF0sZVsxXSxlWzJdLGVbM10pKSlyZXR1cm4gbmV3IHR0KGVbMF0vMjU1LGVbMV0vMjU1LGVbMl0vMjU1LGVbM10pO3Rocm93IG5ldyBvdChyfHwiQ291bGQgbm90IHBhcnNlIGNvbG9yIGZyb20gdmFsdWUgJyIrKCJzdHJpbmciPT10eXBlb2YgZT9lOkpTT04uc3RyaW5naWZ5KGUpKSsiJyIpfWZvcih2YXIgbz1udWxsLHM9MCxsPXRoaXMuYXJncztzPGwubGVuZ3RoO3MrPTEpaWYobnVsbCE9PShvPWxbc10uZXZhbHVhdGUodCkpKXt2YXIgYz1OdW1iZXIobyk7aWYoIWlzTmFOKGMpKXJldHVybiBjfXRocm93IG5ldyBvdCgiQ291bGQgbm90IGNvbnZlcnQgIitKU09OLnN0cmluZ2lmeShvKSsiIHRvIG51bWJlci4iKX0sZnQucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbih0KXt0aGlzLmFyZ3MuZm9yRWFjaCh0KX0sZnQucHJvdG90eXBlLnBvc3NpYmxlT3V0cHV0cz1mdW5jdGlvbigpe3JldHVybih0PVtdKS5jb25jYXQuYXBwbHkodCx0aGlzLmFyZ3MubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnBvc3NpYmxlT3V0cHV0cygpfSkpO3ZhciB0fSxmdC5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7dmFyIHQ9WyJ0by0iK3RoaXMudHlwZS5raW5kXTtyZXR1cm4gdGhpcy5lYWNoQ2hpbGQoZnVuY3Rpb24oZSl7dC5wdXNoKGUuc2VyaWFsaXplKCkpfSksdH07dmFyIHB0PVsiVW5rbm93biIsIlBvaW50IiwiTGluZVN0cmluZyIsIlBvbHlnb24iXSxkdD1mdW5jdGlvbigpe3RoaXMuX3BhcnNlQ29sb3JDYWNoZT17fX07ZHQucHJvdG90eXBlLmlkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmVhdHVyZSYmImlkImluIHRoaXMuZmVhdHVyZT90aGlzLmZlYXR1cmUuaWQ6bnVsbH0sZHQucHJvdG90eXBlLmdlb21ldHJ5VHlwZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZlYXR1cmU/Im51bWJlciI9PXR5cGVvZiB0aGlzLmZlYXR1cmUudHlwZT9wdFt0aGlzLmZlYXR1cmUudHlwZV06dGhpcy5mZWF0dXJlLnR5cGU6bnVsbH0sZHQucHJvdG90eXBlLnByb3BlcnRpZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mZWF0dXJlJiZ0aGlzLmZlYXR1cmUucHJvcGVydGllc3x8e319LGR0LnByb3RvdHlwZS5wYXJzZUNvbG9yPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3BhcnNlQ29sb3JDYWNoZVt0XTtyZXR1cm4gZXx8KGU9dGhpcy5fcGFyc2VDb2xvckNhY2hlW3RdPXR0LnBhcnNlKHQpKSxlfTt2YXIgZ3Q9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5uYW1lPXQsdGhpcy50eXBlPWUsdGhpcy5fZXZhbHVhdGU9cix0aGlzLmFyZ3M9bn07ZnVuY3Rpb24gbXQodCl7aWYodCBpbnN0YW5jZW9mIGd0KXtpZigiZ2V0Ij09PXQubmFtZSYmMT09PXQuYXJncy5sZW5ndGgpcmV0dXJuITE7aWYoImhhcyI9PT10Lm5hbWUmJjE9PT10LmFyZ3MubGVuZ3RoKXJldHVybiExO2lmKCJwcm9wZXJ0aWVzIj09PXQubmFtZXx8Imdlb21ldHJ5LXR5cGUiPT09dC5uYW1lfHwiaWQiPT09dC5uYW1lKXJldHVybiExO2lmKC9eZmlsdGVyLS8udGVzdCh0Lm5hbWUpKXJldHVybiExfXZhciBlPSEwO3JldHVybiB0LmVhY2hDaGlsZChmdW5jdGlvbih0KXtlJiYhbXQodCkmJihlPSExKX0pLGV9ZnVuY3Rpb24gdnQodCxlKXtpZih0IGluc3RhbmNlb2YgZ3QmJmUuaW5kZXhPZih0Lm5hbWUpPj0wKXJldHVybiExO3ZhciByPSEwO3JldHVybiB0LmVhY2hDaGlsZChmdW5jdGlvbih0KXtyJiYhdnQodCxlKSYmKHI9ITEpfSkscn1ndC5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2V2YWx1YXRlKHQsdGhpcy5hcmdzKX0sZ3QucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbih0KXt0aGlzLmFyZ3MuZm9yRWFjaCh0KX0sZ3QucHJvdG90eXBlLnBvc3NpYmxlT3V0cHV0cz1mdW5jdGlvbigpe3JldHVyblt2b2lkIDBdfSxndC5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJuW3RoaXMubmFtZV0uY29uY2F0KHRoaXMuYXJncy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuc2VyaWFsaXplKCl9KSl9LGd0LnBhcnNlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dFswXSxuPWd0LmRlZmluaXRpb25zW3JdO2lmKCFuKXJldHVybiBlLmVycm9yKCdVbmtub3duIGV4cHJlc3Npb24gIicrcisnIi4gSWYgeW91IHdhbnRlZCBhIGxpdGVyYWwgYXJyYXksIHVzZSBbImxpdGVyYWwiLCBbLi4uXV0uJywwKTtmb3IodmFyIGk9QXJyYXkuaXNBcnJheShuKT9uWzBdOm4udHlwZSxhPUFycmF5LmlzQXJyYXkobik/W1tuWzFdLG5bMl1dXTpuLm92ZXJsb2FkcyxvPWEuZmlsdGVyKGZ1bmN0aW9uKGUpe3ZhciByPWVbMF07cmV0dXJuIUFycmF5LmlzQXJyYXkocil8fHIubGVuZ3RoPT09dC5sZW5ndGgtMX0pLHM9W10sbD0xO2w8dC5sZW5ndGg7bCsrKXt2YXIgYz10W2xdLHU9dm9pZCAwO2lmKDE9PT1vLmxlbmd0aCl7dmFyIGg9b1swXVswXTt1PUFycmF5LmlzQXJyYXkoaCk/aFtsLTFdOmgudHlwZX12YXIgZj1lLnBhcnNlKGMsMStzLmxlbmd0aCx1KTtpZighZilyZXR1cm4gbnVsbDtzLnB1c2goZil9Zm9yKHZhciBwPW51bGwsZD0wLGc9bztkPGcubGVuZ3RoO2QrPTEpe3ZhciBtPWdbZF0sdj1tWzBdLHk9bVsxXTtpZihwPW5ldyB4dChlLnJlZ2lzdHJ5LGUucGF0aCxudWxsLGUuc2NvcGUpLEFycmF5LmlzQXJyYXkodikmJnYubGVuZ3RoIT09cy5sZW5ndGgpcC5lcnJvcigiRXhwZWN0ZWQgIit2Lmxlbmd0aCsiIGFyZ3VtZW50cywgYnV0IGZvdW5kICIrcy5sZW5ndGgrIiBpbnN0ZWFkLiIpO2Vsc2V7Zm9yKHZhciB4PTA7eDxzLmxlbmd0aDt4Kyspe3ZhciBiPUFycmF5LmlzQXJyYXkodik/dlt4XTp2LnR5cGUsXz1zW3hdO3AuY29uY2F0KHgrMSkuY2hlY2tTdWJ0eXBlKGIsXy50eXBlKX1pZigwPT09cC5lcnJvcnMubGVuZ3RoKXJldHVybiBuZXcgZ3QocixpLHkscyl9fWlmKDE9PT1vLmxlbmd0aCllLmVycm9ycy5wdXNoLmFwcGx5KGUuZXJyb3JzLHAuZXJyb3JzKTtlbHNle3ZhciB3PShvLmxlbmd0aD9vOmEpLm1hcChmdW5jdGlvbih0KXt2YXIgZTtyZXR1cm4gZT10WzBdLEFycmF5LmlzQXJyYXkoZSk/IigiK2UubWFwKCQpLmpvaW4oIiwgIikrIikiOiIoIiskKGUudHlwZSkrIi4uLikifSkuam9pbigiIHwgIiksaz1zLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gJCh0LnR5cGUpfSkuam9pbigiLCAiKTtlLmVycm9yKCJFeHBlY3RlZCBhcmd1bWVudHMgb2YgdHlwZSAiK3crIiwgYnV0IGZvdW5kICgiK2srIikgaW5zdGVhZC4iKX1yZXR1cm4gbnVsbH0sZ3QucmVnaXN0ZXI9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIgaW4gZ3QuZGVmaW5pdGlvbnM9ZSxlKXRbcl09Z3R9O3ZhciB5dD1mdW5jdGlvbih0LGUpe3RoaXMudHlwZT1lLnR5cGUsdGhpcy5uYW1lPXQsdGhpcy5ib3VuZEV4cHJlc3Npb249ZX07eXQucGFyc2U9ZnVuY3Rpb24odCxlKXtpZigyIT09dC5sZW5ndGh8fCJzdHJpbmciIT10eXBlb2YgdFsxXSlyZXR1cm4gZS5lcnJvcigiJ3ZhcicgZXhwcmVzc2lvbiByZXF1aXJlcyBleGFjdGx5IG9uZSBzdHJpbmcgbGl0ZXJhbCBhcmd1bWVudC4iKTt2YXIgcj10WzFdO3JldHVybiBlLnNjb3BlLmhhcyhyKT9uZXcgeXQocixlLnNjb3BlLmdldChyKSk6ZS5lcnJvcignVW5rbm93biB2YXJpYWJsZSAiJytyKyciLiBNYWtlIHN1cmUgIicrcisnIiBoYXMgYmVlbiBib3VuZCBpbiBhbiBlbmNsb3NpbmcgImxldCIgZXhwcmVzc2lvbiBiZWZvcmUgdXNpbmcgaXQuJywxKX0seXQucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmJvdW5kRXhwcmVzc2lvbi5ldmFsdWF0ZSh0KX0seXQucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbigpe30seXQucHJvdG90eXBlLnBvc3NpYmxlT3V0cHV0cz1mdW5jdGlvbigpe3JldHVyblt2b2lkIDBdfSx5dC5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJuWyJ2YXIiLHRoaXMubmFtZV19O3ZhciB4dD1mdW5jdGlvbih0LGUscixuLGkpe3ZvaWQgMD09PWUmJihlPVtdKSx2b2lkIDA9PT1uJiYobj1uZXcgaiksdm9pZCAwPT09aSYmKGk9W10pLHRoaXMucmVnaXN0cnk9dCx0aGlzLnBhdGg9ZSx0aGlzLmtleT1lLm1hcChmdW5jdGlvbih0KXtyZXR1cm4iWyIrdCsiXSJ9KS5qb2luKCIiKSx0aGlzLnNjb3BlPW4sdGhpcy5lcnJvcnM9aSx0aGlzLmV4cGVjdGVkVHlwZT1yfTtmdW5jdGlvbiBidCh0LGUpe2Zvcih2YXIgcixuLGk9MCxhPXQubGVuZ3RoLTEsbz0wO2k8PWE7KXtpZihyPXRbbz1NYXRoLmZsb29yKChpK2EpLzIpXSxuPXRbbysxXSxlPT09cnx8ZT5yJiZlPG4pcmV0dXJuIG87aWYocjxlKWk9bysxO2Vsc2V7aWYoIShyPmUpKXRocm93IG5ldyBvdCgiSW5wdXQgaXMgbm90IGEgbnVtYmVyLiIpO2E9by0xfX1yZXR1cm4gTWF0aC5tYXgoby0xLDApfXh0LnByb3RvdHlwZS5wYXJzZT1mdW5jdGlvbih0LGUscixuLGkpe3JldHVybiB2b2lkIDA9PT1pJiYoaT17fSksZT90aGlzLmNvbmNhdChlLHIsbikuX3BhcnNlKHQsaSk6dGhpcy5fcGFyc2UodCxpKX0seHQucHJvdG90eXBlLl9wYXJzZT1mdW5jdGlvbih0LGUpe2lmKG51bGwhPT10JiYic3RyaW5nIiE9dHlwZW9mIHQmJiJib29sZWFuIiE9dHlwZW9mIHQmJiJudW1iZXIiIT10eXBlb2YgdHx8KHQ9WyJsaXRlcmFsIix0XSksQXJyYXkuaXNBcnJheSh0KSl7aWYoMD09PXQubGVuZ3RoKXJldHVybiB0aGlzLmVycm9yKCdFeHBlY3RlZCBhbiBhcnJheSB3aXRoIGF0IGxlYXN0IG9uZSBlbGVtZW50LiBJZiB5b3Ugd2FudGVkIGEgbGl0ZXJhbCBhcnJheSwgdXNlIFsibGl0ZXJhbCIsIFtdXS4nKTt2YXIgcj10WzBdO2lmKCJzdHJpbmciIT10eXBlb2YgcilyZXR1cm4gdGhpcy5lcnJvcigiRXhwcmVzc2lvbiBuYW1lIG11c3QgYmUgYSBzdHJpbmcsIGJ1dCBmb3VuZCAiK3R5cGVvZiByKycgaW5zdGVhZC4gSWYgeW91IHdhbnRlZCBhIGxpdGVyYWwgYXJyYXksIHVzZSBbImxpdGVyYWwiLCBbLi4uXV0uJywwKSxudWxsO3ZhciBuPXRoaXMucmVnaXN0cnlbcl07aWYobil7dmFyIGk9bi5wYXJzZSh0LHRoaXMpO2lmKCFpKXJldHVybiBudWxsO2lmKHRoaXMuZXhwZWN0ZWRUeXBlKXt2YXIgYT10aGlzLmV4cGVjdGVkVHlwZSxvPWkudHlwZTtpZigic3RyaW5nIiE9PWEua2luZCYmIm51bWJlciIhPT1hLmtpbmQmJiJib29sZWFuIiE9PWEua2luZCYmIm9iamVjdCIhPT1hLmtpbmR8fCJ2YWx1ZSIhPT1vLmtpbmQpaWYoImFycmF5Ij09PWEua2luZCYmInZhbHVlIj09PW8ua2luZCllLm9taXRUeXBlQW5ub3RhdGlvbnN8fChpPW5ldyB1dChhLGkpKTtlbHNlIGlmKCJjb2xvciIhPT1hLmtpbmR8fCJ2YWx1ZSIhPT1vLmtpbmQmJiJzdHJpbmciIT09by5raW5kKXtpZih0aGlzLmNoZWNrU3VidHlwZSh0aGlzLmV4cGVjdGVkVHlwZSxpLnR5cGUpKXJldHVybiBudWxsfWVsc2UgZS5vbWl0VHlwZUFubm90YXRpb25zfHwoaT1uZXcgZnQoYSxbaV0pKTtlbHNlIGUub21pdFR5cGVBbm5vdGF0aW9uc3x8KGk9bmV3IGx0KGEsW2ldKSl9aWYoIShpIGluc3RhbmNlb2YgYXQpJiZmdW5jdGlvbiB0KGUpe2lmKGUgaW5zdGFuY2VvZiB5dClyZXR1cm4gdChlLmJvdW5kRXhwcmVzc2lvbik7aWYoZSBpbnN0YW5jZW9mIGd0JiYiZXJyb3IiPT09ZS5uYW1lKXJldHVybiExO2lmKGUgaW5zdGFuY2VvZiBydClyZXR1cm4hMTt2YXIgcj1lIGluc3RhbmNlb2YgZnR8fGUgaW5zdGFuY2VvZiBsdHx8ZSBpbnN0YW5jZW9mIHV0LG49ITA7cmV0dXJuIGUuZWFjaENoaWxkKGZ1bmN0aW9uKGUpe249cj9uJiZ0KGUpOm4mJmUgaW5zdGFuY2VvZiBhdH0pLCEhbiYmKG10KGUpJiZ2dChlLFsiem9vbSIsImhlYXRtYXAtZGVuc2l0eSIsImxpbmUtcHJvZ3Jlc3MiLCJpcy1zdXBwb3J0ZWQtc2NyaXB0Il0pKX0oaSkpe3ZhciBzPW5ldyBkdDt0cnl7aT1uZXcgYXQoaS50eXBlLGkuZXZhbHVhdGUocykpfWNhdGNoKHQpe3JldHVybiB0aGlzLmVycm9yKHQubWVzc2FnZSksbnVsbH19cmV0dXJuIGl9cmV0dXJuIHRoaXMuZXJyb3IoJ1Vua25vd24gZXhwcmVzc2lvbiAiJytyKyciLiBJZiB5b3Ugd2FudGVkIGEgbGl0ZXJhbCBhcnJheSwgdXNlIFsibGl0ZXJhbCIsIFsuLi5dXS4nLDApfXJldHVybiB2b2lkIDA9PT10P3RoaXMuZXJyb3IoIid1bmRlZmluZWQnIHZhbHVlIGludmFsaWQuIFVzZSBudWxsIGluc3RlYWQuIik6Im9iamVjdCI9PXR5cGVvZiB0P3RoaXMuZXJyb3IoJ0JhcmUgb2JqZWN0cyBpbnZhbGlkLiBVc2UgWyJsaXRlcmFsIiwgey4uLn1dIGluc3RlYWQuJyk6dGhpcy5lcnJvcigiRXhwZWN0ZWQgYW4gYXJyYXksIGJ1dCBmb3VuZCAiK3R5cGVvZiB0KyIgaW5zdGVhZC4iKX0seHQucHJvdG90eXBlLmNvbmNhdD1mdW5jdGlvbih0LGUscil7dmFyIG49Im51bWJlciI9PXR5cGVvZiB0P3RoaXMucGF0aC5jb25jYXQodCk6dGhpcy5wYXRoLGk9cj90aGlzLnNjb3BlLmNvbmNhdChyKTp0aGlzLnNjb3BlO3JldHVybiBuZXcgeHQodGhpcy5yZWdpc3RyeSxuLGV8fG51bGwsaSx0aGlzLmVycm9ycyl9LHh0LnByb3RvdHlwZS5lcnJvcj1mdW5jdGlvbih0KXtmb3IodmFyIGU9W10scj1hcmd1bWVudHMubGVuZ3RoLTE7ci0tID4wOyllW3JdPWFyZ3VtZW50c1tyKzFdO3ZhciBuPSIiK3RoaXMua2V5K2UubWFwKGZ1bmN0aW9uKHQpe3JldHVybiJbIit0KyJdIn0pLmpvaW4oIiIpO3RoaXMuZXJyb3JzLnB1c2gobmV3IE4obix0KSl9LHh0LnByb3RvdHlwZS5jaGVja1N1YnR5cGU9ZnVuY3Rpb24odCxlKXt2YXIgcj1LKHQsZSk7cmV0dXJuIHImJnRoaXMuZXJyb3Iocikscn07dmFyIF90PWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnR5cGU9dCx0aGlzLmlucHV0PWUsdGhpcy5sYWJlbHM9W10sdGhpcy5vdXRwdXRzPVtdO2Zvcih2YXIgbj0wLGk9cjtuPGkubGVuZ3RoO24rPTEpe3ZhciBhPWlbbl0sbz1hWzBdLHM9YVsxXTt0aGlzLmxhYmVscy5wdXNoKG8pLHRoaXMub3V0cHV0cy5wdXNoKHMpfX07ZnVuY3Rpb24gd3QodCxlLHIpe3JldHVybiB0KigxLXIpK2Uqcn1fdC5wYXJzZT1mdW5jdGlvbih0LGUpe3ZhciByPXRbMV0sbj10LnNsaWNlKDIpO2lmKHQubGVuZ3RoLTE8NClyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgYXQgbGVhc3QgNCBhcmd1bWVudHMsIGJ1dCBmb3VuZCBvbmx5ICIrKHQubGVuZ3RoLTEpKyIuIik7aWYoKHQubGVuZ3RoLTEpJTIhPTApcmV0dXJuIGUuZXJyb3IoIkV4cGVjdGVkIGFuIGV2ZW4gbnVtYmVyIG9mIGFyZ3VtZW50cy4iKTtpZighKHI9ZS5wYXJzZShyLDEsVSkpKXJldHVybiBudWxsO3ZhciBpPVtdLGE9bnVsbDtlLmV4cGVjdGVkVHlwZSYmInZhbHVlIiE9PWUuZXhwZWN0ZWRUeXBlLmtpbmQmJihhPWUuZXhwZWN0ZWRUeXBlKSxuLnVuc2hpZnQoLTEvMCk7Zm9yKHZhciBvPTA7bzxuLmxlbmd0aDtvKz0yKXt2YXIgcz1uW29dLGw9bltvKzFdLGM9bysxLHU9bysyO2lmKCJudW1iZXIiIT10eXBlb2YgcylyZXR1cm4gZS5lcnJvcignSW5wdXQvb3V0cHV0IHBhaXJzIGZvciAic3RlcCIgZXhwcmVzc2lvbnMgbXVzdCBiZSBkZWZpbmVkIHVzaW5nIGxpdGVyYWwgbnVtZXJpYyB2YWx1ZXMgKG5vdCBjb21wdXRlZCBleHByZXNzaW9ucykgZm9yIHRoZSBpbnB1dCB2YWx1ZXMuJyxjKTtpZihpLmxlbmd0aCYmaVtpLmxlbmd0aC0xXVswXT49cylyZXR1cm4gZS5lcnJvcignSW5wdXQvb3V0cHV0IHBhaXJzIGZvciAic3RlcCIgZXhwcmVzc2lvbnMgbXVzdCBiZSBhcnJhbmdlZCB3aXRoIGlucHV0IHZhbHVlcyBpbiBzdHJpY3RseSBhc2NlbmRpbmcgb3JkZXIuJyxjKTt2YXIgaD1lLnBhcnNlKGwsdSxhKTtpZighaClyZXR1cm4gbnVsbDthPWF8fGgudHlwZSxpLnB1c2goW3MsaF0pfXJldHVybiBuZXcgX3QoYSxyLGkpfSxfdC5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5sYWJlbHMscj10aGlzLm91dHB1dHM7aWYoMT09PWUubGVuZ3RoKXJldHVybiByWzBdLmV2YWx1YXRlKHQpO3ZhciBuPXRoaXMuaW5wdXQuZXZhbHVhdGUodCk7aWYobjw9ZVswXSlyZXR1cm4gclswXS5ldmFsdWF0ZSh0KTt2YXIgaT1lLmxlbmd0aDtyZXR1cm4gbj49ZVtpLTFdP3JbaS0xXS5ldmFsdWF0ZSh0KTpyW2J0KGUsbildLmV2YWx1YXRlKHQpfSxfdC5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKHQpe3QodGhpcy5pbnB1dCk7Zm9yKHZhciBlPTAscj10aGlzLm91dHB1dHM7ZTxyLmxlbmd0aDtlKz0xKXQocltlXSl9LF90LnByb3RvdHlwZS5wb3NzaWJsZU91dHB1dHM9ZnVuY3Rpb24oKXtyZXR1cm4odD1bXSkuY29uY2F0LmFwcGx5KHQsdGhpcy5vdXRwdXRzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5wb3NzaWJsZU91dHB1dHMoKX0pKTt2YXIgdH0sX3QucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe2Zvcih2YXIgdD1bInN0ZXAiLHRoaXMuaW5wdXQuc2VyaWFsaXplKCldLGU9MDtlPHRoaXMubGFiZWxzLmxlbmd0aDtlKyspZT4wJiZ0LnB1c2godGhpcy5sYWJlbHNbZV0pLHQucHVzaCh0aGlzLm91dHB1dHNbZV0uc2VyaWFsaXplKCkpO3JldHVybiB0fTt2YXIga3Q9T2JqZWN0LmZyZWV6ZSh7bnVtYmVyOnd0LGNvbG9yOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gbmV3IHR0KHd0KHQucixlLnIsciksd3QodC5nLGUuZyxyKSx3dCh0LmIsZS5iLHIpLHd0KHQuYSxlLmEscikpfSxhcnJheTpmdW5jdGlvbih0LGUscil7cmV0dXJuIHQubWFwKGZ1bmN0aW9uKHQsbil7cmV0dXJuIHd0KHQsZVtuXSxyKX0pfX0pLE10PWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMudHlwZT10LHRoaXMuaW50ZXJwb2xhdGlvbj1lLHRoaXMuaW5wdXQ9cix0aGlzLmxhYmVscz1bXSx0aGlzLm91dHB1dHM9W107Zm9yKHZhciBpPTAsYT1uO2k8YS5sZW5ndGg7aSs9MSl7dmFyIG89YVtpXSxzPW9bMF0sbD1vWzFdO3RoaXMubGFiZWxzLnB1c2gocyksdGhpcy5vdXRwdXRzLnB1c2gobCl9fTtmdW5jdGlvbiBBdCh0LGUscixuKXt2YXIgaT1uLXIsYT10LXI7cmV0dXJuIDA9PT1pPzA6MT09PWU/YS9pOihNYXRoLnBvdyhlLGEpLTEpLyhNYXRoLnBvdyhlLGkpLTEpfU10LmludGVycG9sYXRpb25GYWN0b3I9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9MDtpZigiZXhwb25lbnRpYWwiPT09dC5uYW1lKWk9QXQoZSx0LmJhc2UscixuKTtlbHNlIGlmKCJsaW5lYXIiPT09dC5uYW1lKWk9QXQoZSwxLHIsbik7ZWxzZSBpZigiY3ViaWMtYmV6aWVyIj09PXQubmFtZSl7dmFyIG89dC5jb250cm9sUG9pbnRzO2k9bmV3IGEob1swXSxvWzFdLG9bMl0sb1szXSkuc29sdmUoQXQoZSwxLHIsbikpfXJldHVybiBpfSxNdC5wYXJzZT1mdW5jdGlvbih0LGUpe3ZhciByPXRbMV0sbj10WzJdLGk9dC5zbGljZSgzKTtpZighQXJyYXkuaXNBcnJheShyKXx8MD09PXIubGVuZ3RoKXJldHVybiBlLmVycm9yKCJFeHBlY3RlZCBhbiBpbnRlcnBvbGF0aW9uIHR5cGUgZXhwcmVzc2lvbi4iLDEpO2lmKCJsaW5lYXIiPT09clswXSlyPXtuYW1lOiJsaW5lYXIifTtlbHNlIGlmKCJleHBvbmVudGlhbCI9PT1yWzBdKXt2YXIgYT1yWzFdO2lmKCJudW1iZXIiIT10eXBlb2YgYSlyZXR1cm4gZS5lcnJvcigiRXhwb25lbnRpYWwgaW50ZXJwb2xhdGlvbiByZXF1aXJlcyBhIG51bWVyaWMgYmFzZS4iLDEsMSk7cj17bmFtZToiZXhwb25lbnRpYWwiLGJhc2U6YX19ZWxzZXtpZigiY3ViaWMtYmV6aWVyIiE9PXJbMF0pcmV0dXJuIGUuZXJyb3IoIlVua25vd24gaW50ZXJwb2xhdGlvbiB0eXBlICIrU3RyaW5nKHJbMF0pLDEsMCk7dmFyIG89ci5zbGljZSgxKTtpZig0IT09by5sZW5ndGh8fG8uc29tZShmdW5jdGlvbih0KXtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIHR8fHQ8MHx8dD4xfSkpcmV0dXJuIGUuZXJyb3IoIkN1YmljIGJlemllciBpbnRlcnBvbGF0aW9uIHJlcXVpcmVzIGZvdXIgbnVtZXJpYyBhcmd1bWVudHMgd2l0aCB2YWx1ZXMgYmV0d2VlbiAwIGFuZCAxLiIsMSk7cj17bmFtZToiY3ViaWMtYmV6aWVyIixjb250cm9sUG9pbnRzOm99fWlmKHQubGVuZ3RoLTE8NClyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgYXQgbGVhc3QgNCBhcmd1bWVudHMsIGJ1dCBmb3VuZCBvbmx5ICIrKHQubGVuZ3RoLTEpKyIuIik7aWYoKHQubGVuZ3RoLTEpJTIhPTApcmV0dXJuIGUuZXJyb3IoIkV4cGVjdGVkIGFuIGV2ZW4gbnVtYmVyIG9mIGFyZ3VtZW50cy4iKTtpZighKG49ZS5wYXJzZShuLDIsVSkpKXJldHVybiBudWxsO3ZhciBzPVtdLGw9bnVsbDtlLmV4cGVjdGVkVHlwZSYmInZhbHVlIiE9PWUuZXhwZWN0ZWRUeXBlLmtpbmQmJihsPWUuZXhwZWN0ZWRUeXBlKTtmb3IodmFyIGM9MDtjPGkubGVuZ3RoO2MrPTIpe3ZhciB1PWlbY10saD1pW2MrMV0sZj1jKzMscD1jKzQ7aWYoIm51bWJlciIhPXR5cGVvZiB1KXJldHVybiBlLmVycm9yKCdJbnB1dC9vdXRwdXQgcGFpcnMgZm9yICJpbnRlcnBvbGF0ZSIgZXhwcmVzc2lvbnMgbXVzdCBiZSBkZWZpbmVkIHVzaW5nIGxpdGVyYWwgbnVtZXJpYyB2YWx1ZXMgKG5vdCBjb21wdXRlZCBleHByZXNzaW9ucykgZm9yIHRoZSBpbnB1dCB2YWx1ZXMuJyxmKTtpZihzLmxlbmd0aCYmc1tzLmxlbmd0aC0xXVswXT49dSlyZXR1cm4gZS5lcnJvcignSW5wdXQvb3V0cHV0IHBhaXJzIGZvciAiaW50ZXJwb2xhdGUiIGV4cHJlc3Npb25zIG11c3QgYmUgYXJyYW5nZWQgd2l0aCBpbnB1dCB2YWx1ZXMgaW4gc3RyaWN0bHkgYXNjZW5kaW5nIG9yZGVyLicsZik7dmFyIGQ9ZS5wYXJzZShoLHAsbCk7aWYoIWQpcmV0dXJuIG51bGw7bD1sfHxkLnR5cGUscy5wdXNoKFt1LGRdKX1yZXR1cm4ibnVtYmVyIj09PWwua2luZHx8ImNvbG9yIj09PWwua2luZHx8ImFycmF5Ij09PWwua2luZCYmIm51bWJlciI9PT1sLml0ZW1UeXBlLmtpbmQmJiJudW1iZXIiPT10eXBlb2YgbC5OP25ldyBNdChsLHIsbixzKTplLmVycm9yKCJUeXBlICIrJChsKSsiIGlzIG5vdCBpbnRlcnBvbGF0YWJsZS4iKX0sTXQucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubGFiZWxzLHI9dGhpcy5vdXRwdXRzO2lmKDE9PT1lLmxlbmd0aClyZXR1cm4gclswXS5ldmFsdWF0ZSh0KTt2YXIgbj10aGlzLmlucHV0LmV2YWx1YXRlKHQpO2lmKG48PWVbMF0pcmV0dXJuIHJbMF0uZXZhbHVhdGUodCk7dmFyIGk9ZS5sZW5ndGg7aWYobj49ZVtpLTFdKXJldHVybiByW2ktMV0uZXZhbHVhdGUodCk7dmFyIGE9YnQoZSxuKSxvPWVbYV0scz1lW2ErMV0sbD1NdC5pbnRlcnBvbGF0aW9uRmFjdG9yKHRoaXMuaW50ZXJwb2xhdGlvbixuLG8scyksYz1yW2FdLmV2YWx1YXRlKHQpLHU9clthKzFdLmV2YWx1YXRlKHQpO3JldHVybiBrdFt0aGlzLnR5cGUua2luZC50b0xvd2VyQ2FzZSgpXShjLHUsbCl9LE10LnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24odCl7dCh0aGlzLmlucHV0KTtmb3IodmFyIGU9MCxyPXRoaXMub3V0cHV0cztlPHIubGVuZ3RoO2UrPTEpdChyW2VdKX0sTXQucHJvdG90eXBlLnBvc3NpYmxlT3V0cHV0cz1mdW5jdGlvbigpe3JldHVybih0PVtdKS5jb25jYXQuYXBwbHkodCx0aGlzLm91dHB1dHMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnBvc3NpYmxlT3V0cHV0cygpfSkpO3ZhciB0fSxNdC5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PVsiaW50ZXJwb2xhdGUiLCJsaW5lYXIiPT09dGhpcy5pbnRlcnBvbGF0aW9uLm5hbWU/WyJsaW5lYXIiXToiZXhwb25lbnRpYWwiPT09dGhpcy5pbnRlcnBvbGF0aW9uLm5hbWU/MT09PXRoaXMuaW50ZXJwb2xhdGlvbi5iYXNlP1sibGluZWFyIl06WyJleHBvbmVudGlhbCIsdGhpcy5pbnRlcnBvbGF0aW9uLmJhc2VdOlsiY3ViaWMtYmV6aWVyIl0uY29uY2F0KHRoaXMuaW50ZXJwb2xhdGlvbi5jb250cm9sUG9pbnRzKSx0aGlzLmlucHV0LnNlcmlhbGl6ZSgpXSxlPTA7ZTx0aGlzLmxhYmVscy5sZW5ndGg7ZSsrKXQucHVzaCh0aGlzLmxhYmVsc1tlXSx0aGlzLm91dHB1dHNbZV0uc2VyaWFsaXplKCkpO3JldHVybiB0fTt2YXIgVHQ9ZnVuY3Rpb24odCxlKXt0aGlzLnR5cGU9dCx0aGlzLmFyZ3M9ZX07VHQucGFyc2U9ZnVuY3Rpb24odCxlKXtpZih0Lmxlbmd0aDwyKXJldHVybiBlLmVycm9yKCJFeHBlY3RlY3RlZCBhdCBsZWFzdCBvbmUgYXJndW1lbnQuIik7dmFyIHI9bnVsbCxuPWUuZXhwZWN0ZWRUeXBlO24mJiJ2YWx1ZSIhPT1uLmtpbmQmJihyPW4pO2Zvcih2YXIgaT1bXSxhPTAsbz10LnNsaWNlKDEpO2E8by5sZW5ndGg7YSs9MSl7dmFyIHM9b1thXSxsPWUucGFyc2UocywxK2kubGVuZ3RoLHIsdm9pZCAwLHtvbWl0VHlwZUFubm90YXRpb25zOiEwfSk7aWYoIWwpcmV0dXJuIG51bGw7cj1yfHxsLnR5cGUsaS5wdXNoKGwpfXZhciBjPW4mJmkuc29tZShmdW5jdGlvbih0KXtyZXR1cm4gSyhuLHQudHlwZSl9KTtyZXR1cm4gbmV3IFR0KGM/WTpyLGkpfSxUdC5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW51bGwscj0wLG49dGhpcy5hcmdzO3I8bi5sZW5ndGgmJm51bGw9PT0oZT1uW3JdLmV2YWx1YXRlKHQpKTtyKz0xKTtyZXR1cm4gZX0sVHQucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbih0KXt0aGlzLmFyZ3MuZm9yRWFjaCh0KX0sVHQucHJvdG90eXBlLnBvc3NpYmxlT3V0cHV0cz1mdW5jdGlvbigpe3JldHVybih0PVtdKS5jb25jYXQuYXBwbHkodCx0aGlzLmFyZ3MubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnBvc3NpYmxlT3V0cHV0cygpfSkpO3ZhciB0fSxUdC5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7dmFyIHQ9WyJjb2FsZXNjZSJdO3JldHVybiB0aGlzLmVhY2hDaGlsZChmdW5jdGlvbihlKXt0LnB1c2goZS5zZXJpYWxpemUoKSl9KSx0fTt2YXIgU3Q9ZnVuY3Rpb24odCxlKXt0aGlzLnR5cGU9ZS50eXBlLHRoaXMuYmluZGluZ3M9W10uY29uY2F0KHQpLHRoaXMucmVzdWx0PWV9O1N0LnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5yZXN1bHQuZXZhbHVhdGUodCl9LFN0LnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj10aGlzLmJpbmRpbmdzO2U8ci5sZW5ndGg7ZSs9MSl0KHJbZV1bMV0pO3QodGhpcy5yZXN1bHQpfSxTdC5wYXJzZT1mdW5jdGlvbih0LGUpe2lmKHQubGVuZ3RoPDQpcmV0dXJuIGUuZXJyb3IoIkV4cGVjdGVkIGF0IGxlYXN0IDMgYXJndW1lbnRzLCBidXQgZm91bmQgIisodC5sZW5ndGgtMSkrIiBpbnN0ZWFkLiIpO2Zvcih2YXIgcj1bXSxuPTE7bjx0Lmxlbmd0aC0xO24rPTIpe3ZhciBpPXRbbl07aWYoInN0cmluZyIhPXR5cGVvZiBpKXJldHVybiBlLmVycm9yKCJFeHBlY3RlZCBzdHJpbmcsIGJ1dCBmb3VuZCAiK3R5cGVvZiBpKyIgaW5zdGVhZC4iLG4pO2lmKC9bXmEtekEtWjAtOV9dLy50ZXN0KGkpKXJldHVybiBlLmVycm9yKCJWYXJpYWJsZSBuYW1lcyBtdXN0IGNvbnRhaW4gb25seSBhbHBoYW51bWVyaWMgY2hhcmFjdGVycyBvciAnXycuIixuKTt2YXIgYT1lLnBhcnNlKHRbbisxXSxuKzEpO2lmKCFhKXJldHVybiBudWxsO3IucHVzaChbaSxhXSl9dmFyIG89ZS5wYXJzZSh0W3QubGVuZ3RoLTFdLHQubGVuZ3RoLTEsdm9pZCAwLHIpO3JldHVybiBvP25ldyBTdChyLG8pOm51bGx9LFN0LnByb3RvdHlwZS5wb3NzaWJsZU91dHB1dHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZXN1bHQucG9zc2libGVPdXRwdXRzKCl9LFN0LnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9WyJsZXQiXSxlPTAscj10aGlzLmJpbmRpbmdzO2U8ci5sZW5ndGg7ZSs9MSl7dmFyIG49cltlXSxpPW5bMF0sYT1uWzFdO3QucHVzaChpLGEuc2VyaWFsaXplKCkpfXJldHVybiB0LnB1c2godGhpcy5yZXN1bHQuc2VyaWFsaXplKCkpLHR9O3ZhciBFdD1mdW5jdGlvbih0LGUscil7dGhpcy50eXBlPXQsdGhpcy5pbmRleD1lLHRoaXMuaW5wdXQ9cn07RXQucGFyc2U9ZnVuY3Rpb24odCxlKXtpZigzIT09dC5sZW5ndGgpcmV0dXJuIGUuZXJyb3IoIkV4cGVjdGVkIDIgYXJndW1lbnRzLCBidXQgZm91bmQgIisodC5sZW5ndGgtMSkrIiBpbnN0ZWFkLiIpO3ZhciByPWUucGFyc2UodFsxXSwxLFUpLG49ZS5wYXJzZSh0WzJdLDIsWihlLmV4cGVjdGVkVHlwZXx8WSkpO2lmKCFyfHwhbilyZXR1cm4gbnVsbDt2YXIgaT1uLnR5cGU7cmV0dXJuIG5ldyBFdChpLml0ZW1UeXBlLHIsbil9LEV0LnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmluZGV4LmV2YWx1YXRlKHQpLHI9dGhpcy5pbnB1dC5ldmFsdWF0ZSh0KTtpZihlPDApdGhyb3cgbmV3IG90KCJBcnJheSBpbmRleCBvdXQgb2YgYm91bmRzOiAiK2UrIiA8IDAuIik7aWYoZT49ci5sZW5ndGgpdGhyb3cgbmV3IG90KCJBcnJheSBpbmRleCBvdXQgb2YgYm91bmRzOiAiK2UrIiA+ICIrKHIubGVuZ3RoLTEpKyIuIik7aWYoZSE9PU1hdGguZmxvb3IoZSkpdGhyb3cgbmV3IG90KCJBcnJheSBpbmRleCBtdXN0IGJlIGFuIGludGVnZXIsIGJ1dCBmb3VuZCAiK2UrIiBpbnN0ZWFkLiIpO3JldHVybiByW2VdfSxFdC5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKHQpe3QodGhpcy5pbmRleCksdCh0aGlzLmlucHV0KX0sRXQucHJvdG90eXBlLnBvc3NpYmxlT3V0cHV0cz1mdW5jdGlvbigpe3JldHVyblt2b2lkIDBdfSxFdC5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJuWyJhdCIsdGhpcy5pbmRleC5zZXJpYWxpemUoKSx0aGlzLmlucHV0LnNlcmlhbGl6ZSgpXX07dmFyIEN0PWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt0aGlzLmlucHV0VHlwZT10LHRoaXMudHlwZT1lLHRoaXMuaW5wdXQ9cix0aGlzLmNhc2VzPW4sdGhpcy5vdXRwdXRzPWksdGhpcy5vdGhlcndpc2U9YX07Q3QucGFyc2U9ZnVuY3Rpb24odCxlKXtpZih0Lmxlbmd0aDw1KXJldHVybiBlLmVycm9yKCJFeHBlY3RlZCBhdCBsZWFzdCA0IGFyZ3VtZW50cywgYnV0IGZvdW5kIG9ubHkgIisodC5sZW5ndGgtMSkrIi4iKTtpZih0Lmxlbmd0aCUyIT0xKXJldHVybiBlLmVycm9yKCJFeHBlY3RlZCBhbiBldmVuIG51bWJlciBvZiBhcmd1bWVudHMuIik7dmFyIHIsbjtlLmV4cGVjdGVkVHlwZSYmInZhbHVlIiE9PWUuZXhwZWN0ZWRUeXBlLmtpbmQmJihuPWUuZXhwZWN0ZWRUeXBlKTtmb3IodmFyIGk9e30sYT1bXSxvPTI7bzx0Lmxlbmd0aC0xO28rPTIpe3ZhciBzPXRbb10sbD10W28rMV07QXJyYXkuaXNBcnJheShzKXx8KHM9W3NdKTt2YXIgYz1lLmNvbmNhdChvKTtpZigwPT09cy5sZW5ndGgpcmV0dXJuIGMuZXJyb3IoIkV4cGVjdGVkIGF0IGxlYXN0IG9uZSBicmFuY2ggbGFiZWwuIik7Zm9yKHZhciB1PTAsaD1zO3U8aC5sZW5ndGg7dSs9MSl7dmFyIGY9aFt1XTtpZigibnVtYmVyIiE9dHlwZW9mIGYmJiJzdHJpbmciIT10eXBlb2YgZilyZXR1cm4gYy5lcnJvcigiQnJhbmNoIGxhYmVscyBtdXN0IGJlIG51bWJlcnMgb3Igc3RyaW5ncy4iKTtpZigibnVtYmVyIj09dHlwZW9mIGYmJk1hdGguYWJzKGYpPk51bWJlci5NQVhfU0FGRV9JTlRFR0VSKXJldHVybiBjLmVycm9yKCJCcmFuY2ggbGFiZWxzIG11c3QgYmUgaW50ZWdlcnMgbm8gbGFyZ2VyIHRoYW4gIitOdW1iZXIuTUFYX1NBRkVfSU5URUdFUisiLiIpO2lmKCJudW1iZXIiPT10eXBlb2YgZiYmTWF0aC5mbG9vcihmKSE9PWYpcmV0dXJuIGMuZXJyb3IoIk51bWVyaWMgYnJhbmNoIGxhYmVscyBtdXN0IGJlIGludGVnZXIgdmFsdWVzLiIpO2lmKHIpe2lmKGMuY2hlY2tTdWJ0eXBlKHIsaXQoZikpKXJldHVybiBudWxsfWVsc2Ugcj1pdChmKTtpZih2b2lkIDAhPT1pW1N0cmluZyhmKV0pcmV0dXJuIGMuZXJyb3IoIkJyYW5jaCBsYWJlbHMgbXVzdCBiZSB1bmlxdWUuIik7aVtTdHJpbmcoZildPWEubGVuZ3RofXZhciBwPWUucGFyc2UobCxvLG4pO2lmKCFwKXJldHVybiBudWxsO249bnx8cC50eXBlLGEucHVzaChwKX12YXIgZD1lLnBhcnNlKHRbMV0sMSxyKTtpZighZClyZXR1cm4gbnVsbDt2YXIgZz1lLnBhcnNlKHRbdC5sZW5ndGgtMV0sdC5sZW5ndGgtMSxuKTtyZXR1cm4gZz9uZXcgQ3QocixuLGQsaSxhLGcpOm51bGx9LEN0LnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmlucHV0LmV2YWx1YXRlKHQpO3JldHVybih0aGlzLm91dHB1dHNbdGhpcy5jYXNlc1tlXV18fHRoaXMub3RoZXJ3aXNlKS5ldmFsdWF0ZSh0KX0sQ3QucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbih0KXt0KHRoaXMuaW5wdXQpLHRoaXMub3V0cHV0cy5mb3JFYWNoKHQpLHQodGhpcy5vdGhlcndpc2UpfSxDdC5wcm90b3R5cGUucG9zc2libGVPdXRwdXRzPWZ1bmN0aW9uKCl7cmV0dXJuKHQ9W10pLmNvbmNhdC5hcHBseSh0LHRoaXMub3V0cHV0cy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQucG9zc2libGVPdXRwdXRzKCl9KSkuY29uY2F0KHRoaXMub3RoZXJ3aXNlLnBvc3NpYmxlT3V0cHV0cygpKTt2YXIgdH0sQ3QucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLGU9WyJtYXRjaCIsdGhpcy5pbnB1dC5zZXJpYWxpemUoKV0scj1bXSxuPXt9LGk9MCxhPU9iamVjdC5rZXlzKHRoaXMuY2FzZXMpLnNvcnQoKTtpPGEubGVuZ3RoO2krPTEpe3ZhciBvPWFbaV0scz1uW3QuY2FzZXNbb11dO3ZvaWQgMD09PXM/KG5bdC5jYXNlc1tvXV09ci5sZW5ndGgsci5wdXNoKFt0LmNhc2VzW29dLFtvXV0pKTpyW3NdWzFdLnB1c2gobyl9Zm9yKHZhciBsPWZ1bmN0aW9uKGUpe3JldHVybiJudW1iZXIiPT09dC5pbnB1dC50eXBlLmtpbmQ/TnVtYmVyKGUpOmV9LGM9MCx1PXI7Yzx1Lmxlbmd0aDtjKz0xKXt2YXIgaD11W2NdLGY9aFswXSxwPWhbMV07MT09PXAubGVuZ3RoP2UucHVzaChsKHBbMF0pKTplLnB1c2gocC5tYXAobCkpLGUucHVzaCh0Lm91dHB1dHNbZl0uc2VyaWFsaXplKCkpfXJldHVybiBlLnB1c2godGhpcy5vdGhlcndpc2Uuc2VyaWFsaXplKCkpLGV9O3ZhciBMdD1mdW5jdGlvbih0LGUscil7dGhpcy50eXBlPXQsdGhpcy5icmFuY2hlcz1lLHRoaXMub3RoZXJ3aXNlPXJ9O2Z1bmN0aW9uIHp0KHQpe3JldHVybiJzdHJpbmciPT09dC5raW5kfHwibnVtYmVyIj09PXQua2luZHx8ImJvb2xlYW4iPT09dC5raW5kfHwibnVsbCI9PT10LmtpbmR9ZnVuY3Rpb24gUHQodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXtmdW5jdGlvbiByKHQsZSxyKXt0aGlzLnR5cGU9SCx0aGlzLmxocz10LHRoaXMucmhzPWUsdGhpcy5jb2xsYXRvcj1yfXJldHVybiByLnBhcnNlPWZ1bmN0aW9uKHQsZSl7aWYoMyE9PXQubGVuZ3RoJiY0IT09dC5sZW5ndGgpcmV0dXJuIGUuZXJyb3IoIkV4cGVjdGVkIHR3byBvciB0aHJlZSBhcmd1bWVudHMuIik7dmFyIG49ZS5wYXJzZSh0WzFdLDEsWSk7aWYoIW4pcmV0dXJuIG51bGw7dmFyIGk9ZS5wYXJzZSh0WzJdLDIsWSk7aWYoIWkpcmV0dXJuIG51bGw7aWYoIXp0KG4udHlwZSkmJiF6dChpLnR5cGUpKXJldHVybiBlLmVycm9yKCJFeHBlY3RlZCBhdCBsZWFzdCBvbmUgYXJndW1lbnQgdG8gYmUgYSBzdHJpbmcsIG51bWJlciwgYm9vbGVhbiwgb3IgbnVsbCwgYnV0IGZvdW5kICgiKyQobi50eXBlKSsiLCAiKyQoaS50eXBlKSsiKSBpbnN0ZWFkLiIpO2lmKG4udHlwZS5raW5kIT09aS50eXBlLmtpbmQmJiJ2YWx1ZSIhPT1uLnR5cGUua2luZCYmInZhbHVlIiE9PWkudHlwZS5raW5kKXJldHVybiBlLmVycm9yKCJDYW5ub3QgY29tcGFyZSAiKyQobi50eXBlKSsiIGFuZCAiKyQoaS50eXBlKSsiLiIpO3ZhciBhPW51bGw7aWYoND09PXQubGVuZ3RoKXtpZigic3RyaW5nIiE9PW4udHlwZS5raW5kJiYic3RyaW5nIiE9PWkudHlwZS5raW5kKXJldHVybiBlLmVycm9yKCJDYW5ub3QgdXNlIGNvbGxhdG9yIHRvIGNvbXBhcmUgbm9uLXN0cmluZyB0eXBlcy4iKTtpZighKGE9ZS5wYXJzZSh0WzNdLDMsWCkpKXJldHVybiBudWxsfXJldHVybiBuZXcgcihuLGksYSl9LHIucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe3ZhciByPXRoaXMuY29sbGF0b3I/MD09PXRoaXMuY29sbGF0b3IuZXZhbHVhdGUodCkuY29tcGFyZSh0aGlzLmxocy5ldmFsdWF0ZSh0KSx0aGlzLnJocy5ldmFsdWF0ZSh0KSk6dGhpcy5saHMuZXZhbHVhdGUodCk9PT10aGlzLnJocy5ldmFsdWF0ZSh0KTtyZXR1cm4gZT8hcjpyfSxyLnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24odCl7dCh0aGlzLmxocyksdCh0aGlzLnJocyksdGhpcy5jb2xsYXRvciYmdCh0aGlzLmNvbGxhdG9yKX0sci5wcm90b3R5cGUucG9zc2libGVPdXRwdXRzPWZ1bmN0aW9uKCl7cmV0dXJuWyEwLCExXX0sci5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7dmFyIGU9W3RdO3JldHVybiB0aGlzLmVhY2hDaGlsZChmdW5jdGlvbih0KXtlLnB1c2godC5zZXJpYWxpemUoKSl9KSxlfSxyfSgpfUx0LnBhcnNlPWZ1bmN0aW9uKHQsZSl7aWYodC5sZW5ndGg8NClyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgYXQgbGVhc3QgMyBhcmd1bWVudHMsIGJ1dCBmb3VuZCBvbmx5ICIrKHQubGVuZ3RoLTEpKyIuIik7aWYodC5sZW5ndGglMiE9MClyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgYW4gb2RkIG51bWJlciBvZiBhcmd1bWVudHMuIik7dmFyIHI7ZS5leHBlY3RlZFR5cGUmJiJ2YWx1ZSIhPT1lLmV4cGVjdGVkVHlwZS5raW5kJiYocj1lLmV4cGVjdGVkVHlwZSk7Zm9yKHZhciBuPVtdLGk9MTtpPHQubGVuZ3RoLTE7aSs9Mil7dmFyIGE9ZS5wYXJzZSh0W2ldLGksSCk7aWYoIWEpcmV0dXJuIG51bGw7dmFyIG89ZS5wYXJzZSh0W2krMV0saSsxLHIpO2lmKCFvKXJldHVybiBudWxsO24ucHVzaChbYSxvXSkscj1yfHxvLnR5cGV9dmFyIHM9ZS5wYXJzZSh0W3QubGVuZ3RoLTFdLHQubGVuZ3RoLTEscik7cmV0dXJuIHM/bmV3IEx0KHIsbixzKTpudWxsfSxMdC5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj10aGlzLmJyYW5jaGVzO2U8ci5sZW5ndGg7ZSs9MSl7dmFyIG49cltlXSxpPW5bMF0sYT1uWzFdO2lmKGkuZXZhbHVhdGUodCkpcmV0dXJuIGEuZXZhbHVhdGUodCl9cmV0dXJuIHRoaXMub3RoZXJ3aXNlLmV2YWx1YXRlKHQpfSxMdC5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9dGhpcy5icmFuY2hlcztlPHIubGVuZ3RoO2UrPTEpe3ZhciBuPXJbZV0saT1uWzBdLGE9blsxXTt0KGkpLHQoYSl9dCh0aGlzLm90aGVyd2lzZSl9LEx0LnByb3RvdHlwZS5wb3NzaWJsZU91dHB1dHM9ZnVuY3Rpb24oKXtyZXR1cm4odD1bXSkuY29uY2F0LmFwcGx5KHQsdGhpcy5icmFuY2hlcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF0sdFsxXS5wb3NzaWJsZU91dHB1dHMoKX0pKS5jb25jYXQodGhpcy5vdGhlcndpc2UucG9zc2libGVPdXRwdXRzKCkpO3ZhciB0fSxMdC5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7dmFyIHQ9WyJjYXNlIl07cmV0dXJuIHRoaXMuZWFjaENoaWxkKGZ1bmN0aW9uKGUpe3QucHVzaChlLnNlcmlhbGl6ZSgpKX0pLHR9O3ZhciBJdD1QdCgiPT0iLCExKSxPdD1QdCgiIT0iLCEwKSxEdD1mdW5jdGlvbih0KXt0aGlzLnR5cGU9VSx0aGlzLmlucHV0PXR9O0R0LnBhcnNlPWZ1bmN0aW9uKHQsZSl7aWYoMiE9PXQubGVuZ3RoKXJldHVybiBlLmVycm9yKCJFeHBlY3RlZCAxIGFyZ3VtZW50LCBidXQgZm91bmQgIisodC5sZW5ndGgtMSkrIiBpbnN0ZWFkLiIpO3ZhciByPWUucGFyc2UodFsxXSwxKTtyZXR1cm4gcj8iYXJyYXkiIT09ci50eXBlLmtpbmQmJiJzdHJpbmciIT09ci50eXBlLmtpbmQmJiJ2YWx1ZSIhPT1yLnR5cGUua2luZD9lLmVycm9yKCJFeHBlY3RlZCBhcmd1bWVudCBvZiB0eXBlIHN0cmluZyBvciBhcnJheSwgYnV0IGZvdW5kICIrJChyLnR5cGUpKyIgaW5zdGVhZC4iKTpuZXcgRHQocik6bnVsbH0sRHQucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaW5wdXQuZXZhbHVhdGUodCk7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBlLmxlbmd0aDtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlLmxlbmd0aDt0aHJvdyBuZXcgb3QoIkV4cGVjdGVkIHZhbHVlIHRvIGJlIG9mIHR5cGUgc3RyaW5nIG9yIGFycmF5LCBidXQgZm91bmQgIiskKGl0KGUpKSsiIGluc3RlYWQuIil9LER0LnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24odCl7dCh0aGlzLmlucHV0KX0sRHQucHJvdG90eXBlLnBvc3NpYmxlT3V0cHV0cz1mdW5jdGlvbigpe3JldHVyblt2b2lkIDBdfSxEdC5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7dmFyIHQ9WyJsZW5ndGgiXTtyZXR1cm4gdGhpcy5lYWNoQ2hpbGQoZnVuY3Rpb24oZSl7dC5wdXNoKGUuc2VyaWFsaXplKCkpfSksdH07dmFyIFJ0PXsiPT0iOkl0LCIhPSI6T3QsYXJyYXk6dXQsYXQ6RXQsYm9vbGVhbjpsdCxjYXNlOkx0LGNvYWxlc2NlOlR0LGNvbGxhdG9yOnJ0LGludGVycG9sYXRlOk10LGxlbmd0aDpEdCxsZXQ6U3QsbGl0ZXJhbDphdCxtYXRjaDpDdCxudW1iZXI6bHQsb2JqZWN0Omx0LHN0ZXA6X3Qsc3RyaW5nOmx0LCJ0by1jb2xvciI6ZnQsInRvLW51bWJlciI6ZnQsdmFyOnl0fTtmdW5jdGlvbiBCdCh0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxhPWVbM107cj1yLmV2YWx1YXRlKHQpLG49bi5ldmFsdWF0ZSh0KSxpPWkuZXZhbHVhdGUodCk7dmFyIG89YT9hLmV2YWx1YXRlKHQpOjEscz1udChyLG4saSxvKTtpZihzKXRocm93IG5ldyBvdChzKTtyZXR1cm4gbmV3IHR0KHIvMjU1Km8sbi8yNTUqbyxpLzI1NSpvLG8pfWZ1bmN0aW9uIEZ0KHQsZSl7cmV0dXJuIHQgaW4gZX1mdW5jdGlvbiBOdCh0LGUpe3ZhciByPWVbdF07cmV0dXJuIHZvaWQgMD09PXI/bnVsbDpyfWZ1bmN0aW9uIGp0KHQsZSl7dmFyIHI9ZVswXSxuPWVbMV07cmV0dXJuIHIuZXZhbHVhdGUodCk8bi5ldmFsdWF0ZSh0KX1mdW5jdGlvbiBWdCh0LGUpe3ZhciByPWVbMF0sbj1lWzFdO3JldHVybiByLmV2YWx1YXRlKHQpPm4uZXZhbHVhdGUodCl9ZnVuY3Rpb24gVXQodCxlKXt2YXIgcj1lWzBdLG49ZVsxXTtyZXR1cm4gci5ldmFsdWF0ZSh0KTw9bi5ldmFsdWF0ZSh0KX1mdW5jdGlvbiBxdCh0LGUpe3ZhciByPWVbMF0sbj1lWzFdO3JldHVybiByLmV2YWx1YXRlKHQpPj1uLmV2YWx1YXRlKHQpfWZ1bmN0aW9uIEh0KHQpe3JldHVybnt0eXBlOnR9fWZ1bmN0aW9uIEd0KHQpe3JldHVybntyZXN1bHQ6InN1Y2Nlc3MiLHZhbHVlOnR9fWZ1bmN0aW9uIFd0KHQpe3JldHVybntyZXN1bHQ6ImVycm9yIix2YWx1ZTp0fX1ndC5yZWdpc3RlcihSdCx7ZXJyb3I6W3traW5kOiJlcnJvciJ9LFtxXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07dGhyb3cgbmV3IG90KHIuZXZhbHVhdGUodCkpfV0sdHlwZW9mOltxLFtZXSxmdW5jdGlvbih0LGUpe3JldHVybiAkKGl0KGVbMF0uZXZhbHVhdGUodCkpKX1dLCJ0by1zdHJpbmciOltxLFtZXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj10eXBlb2Yocj1yLmV2YWx1YXRlKHQpKTtyZXR1cm4gbnVsbD09PXI/IiI6InN0cmluZyI9PT1ufHwibnVtYmVyIj09PW58fCJib29sZWFuIj09PW4/U3RyaW5nKHIpOnIgaW5zdGFuY2VvZiB0dD9yLnRvU3RyaW5nKCk6SlNPTi5zdHJpbmdpZnkocil9XSwidG8tYm9vbGVhbiI6W0gsW1ldLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXTtyZXR1cm4gQm9vbGVhbihyLmV2YWx1YXRlKHQpKX1dLCJ0by1yZ2JhIjpbWihVLDQpLFtHXSxmdW5jdGlvbih0LGUpe3JldHVybiBlWzBdLmV2YWx1YXRlKHQpLnRvQXJyYXkoKX1dLHJnYjpbRyxbVSxVLFVdLEJ0XSxyZ2JhOltHLFtVLFUsVSxVXSxCdF0saGFzOnt0eXBlOkgsb3ZlcmxvYWRzOltbW3FdLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIEZ0KGVbMF0uZXZhbHVhdGUodCksdC5wcm9wZXJ0aWVzKCkpfV0sW1txLFddLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV07cmV0dXJuIEZ0KHIuZXZhbHVhdGUodCksbi5ldmFsdWF0ZSh0KSl9XV19LGdldDp7dHlwZTpZLG92ZXJsb2FkczpbW1txXSxmdW5jdGlvbih0LGUpe3JldHVybiBOdChlWzBdLmV2YWx1YXRlKHQpLHQucHJvcGVydGllcygpKX1dLFtbcSxXXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdO3JldHVybiBOdChyLmV2YWx1YXRlKHQpLG4uZXZhbHVhdGUodCkpfV1dfSxwcm9wZXJ0aWVzOltXLFtdLGZ1bmN0aW9uKHQpe3JldHVybiB0LnByb3BlcnRpZXMoKX1dLCJnZW9tZXRyeS10eXBlIjpbcSxbXSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZW9tZXRyeVR5cGUoKX1dLGlkOltZLFtdLGZ1bmN0aW9uKHQpe3JldHVybiB0LmlkKCl9XSx6b29tOltVLFtdLGZ1bmN0aW9uKHQpe3JldHVybiB0Lmdsb2JhbHMuem9vbX1dLCJoZWF0bWFwLWRlbnNpdHkiOltVLFtdLGZ1bmN0aW9uKHQpe3JldHVybiB0Lmdsb2JhbHMuaGVhdG1hcERlbnNpdHl8fDB9XSwibGluZS1wcm9ncmVzcyI6W1UsW10sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2xvYmFscy5saW5lUHJvZ3Jlc3N8fDB9XSwiKyI6W1UsSHQoVSksZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPTAsaT1lO248aS5sZW5ndGg7bis9MSlyKz1pW25dLmV2YWx1YXRlKHQpO3JldHVybiByfV0sIioiOltVLEh0KFUpLGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTEsbj0wLGk9ZTtuPGkubGVuZ3RoO24rPTEpcio9aVtuXS5ldmFsdWF0ZSh0KTtyZXR1cm4gcn1dLCItIjp7dHlwZTpVLG92ZXJsb2FkczpbW1tVLFVdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV07cmV0dXJuIHIuZXZhbHVhdGUodCktbi5ldmFsdWF0ZSh0KX1dLFtbVV0sZnVuY3Rpb24odCxlKXtyZXR1cm4tZVswXS5ldmFsdWF0ZSh0KX1dXX0sIi8iOltVLFtVLFVdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV07cmV0dXJuIHIuZXZhbHVhdGUodCkvbi5ldmFsdWF0ZSh0KX1dLCIlIjpbVSxbVSxVXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdO3JldHVybiByLmV2YWx1YXRlKHQpJW4uZXZhbHVhdGUodCl9XSxsbjI6W1UsW10sZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5MTjJ9XSxwaTpbVSxbXSxmdW5jdGlvbigpe3JldHVybiBNYXRoLlBJfV0sZTpbVSxbXSxmdW5jdGlvbigpe3JldHVybiBNYXRoLkV9XSwiXiI6W1UsW1UsVV0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXTtyZXR1cm4gTWF0aC5wb3coci5ldmFsdWF0ZSh0KSxuLmV2YWx1YXRlKHQpKX1dLHNxcnQ6W1UsW1VdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXTtyZXR1cm4gTWF0aC5zcXJ0KHIuZXZhbHVhdGUodCkpfV0sbG9nMTA6W1UsW1VdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXTtyZXR1cm4gTWF0aC5sb2cxMChyLmV2YWx1YXRlKHQpKX1dLGxuOltVLFtVXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIE1hdGgubG9nKHIuZXZhbHVhdGUodCkpfV0sbG9nMjpbVSxbVV0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdO3JldHVybiBNYXRoLmxvZzIoci5ldmFsdWF0ZSh0KSl9XSxzaW46W1UsW1VdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXTtyZXR1cm4gTWF0aC5zaW4oci5ldmFsdWF0ZSh0KSl9XSxjb3M6W1UsW1VdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXTtyZXR1cm4gTWF0aC5jb3Moci5ldmFsdWF0ZSh0KSl9XSx0YW46W1UsW1VdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXTtyZXR1cm4gTWF0aC50YW4oci5ldmFsdWF0ZSh0KSl9XSxhc2luOltVLFtVXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIE1hdGguYXNpbihyLmV2YWx1YXRlKHQpKX1dLGFjb3M6W1UsW1VdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXTtyZXR1cm4gTWF0aC5hY29zKHIuZXZhbHVhdGUodCkpfV0sYXRhbjpbVSxbVV0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdO3JldHVybiBNYXRoLmF0YW4oci5ldmFsdWF0ZSh0KSl9XSxtaW46W1UsSHQoVSksZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5taW4uYXBwbHkoTWF0aCxlLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS5ldmFsdWF0ZSh0KX0pKX1dLG1heDpbVSxIdChVKSxmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLm1heC5hcHBseShNYXRoLGUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLmV2YWx1YXRlKHQpfSkpfV0sYWJzOltVLFtVXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIE1hdGguYWJzKHIuZXZhbHVhdGUodCkpfV0scm91bmQ6W1UsW1VdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXS5ldmFsdWF0ZSh0KTtyZXR1cm4gcjwwPy1NYXRoLnJvdW5kKC1yKTpNYXRoLnJvdW5kKHIpfV0sZmxvb3I6W1UsW1VdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXTtyZXR1cm4gTWF0aC5mbG9vcihyLmV2YWx1YXRlKHQpKX1dLGNlaWw6W1UsW1VdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXTtyZXR1cm4gTWF0aC5jZWlsKHIuZXZhbHVhdGUodCkpfV0sImZpbHRlci09PSI6W0gsW3EsWV0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXTtyZXR1cm4gdC5wcm9wZXJ0aWVzKClbci52YWx1ZV09PT1uLnZhbHVlfV0sImZpbHRlci1pZC09PSI6W0gsW1ldLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXTtyZXR1cm4gdC5pZCgpPT09ci52YWx1ZX1dLCJmaWx0ZXItdHlwZS09PSI6W0gsW3FdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXTtyZXR1cm4gdC5nZW9tZXRyeVR5cGUoKT09PXIudmFsdWV9XSwiZmlsdGVyLTwiOltILFtxLFldLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0saT10LnByb3BlcnRpZXMoKVtyLnZhbHVlXSxhPW4udmFsdWU7cmV0dXJuIHR5cGVvZiBpPT10eXBlb2YgYSYmaTxhfV0sImZpbHRlci1pZC08IjpbSCxbWV0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49dC5pZCgpLGk9ci52YWx1ZTtyZXR1cm4gdHlwZW9mIG49PXR5cGVvZiBpJiZuPGl9XSwiZmlsdGVyLT4iOltILFtxLFldLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0saT10LnByb3BlcnRpZXMoKVtyLnZhbHVlXSxhPW4udmFsdWU7cmV0dXJuIHR5cGVvZiBpPT10eXBlb2YgYSYmaT5hfV0sImZpbHRlci1pZC0+IjpbSCxbWV0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49dC5pZCgpLGk9ci52YWx1ZTtyZXR1cm4gdHlwZW9mIG49PXR5cGVvZiBpJiZuPml9XSwiZmlsdGVyLTw9IjpbSCxbcSxZXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9dC5wcm9wZXJ0aWVzKClbci52YWx1ZV0sYT1uLnZhbHVlO3JldHVybiB0eXBlb2YgaT09dHlwZW9mIGEmJmk8PWF9XSwiZmlsdGVyLWlkLTw9IjpbSCxbWV0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49dC5pZCgpLGk9ci52YWx1ZTtyZXR1cm4gdHlwZW9mIG49PXR5cGVvZiBpJiZuPD1pfV0sImZpbHRlci0+PSI6W0gsW3EsWV0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXSxpPXQucHJvcGVydGllcygpW3IudmFsdWVdLGE9bi52YWx1ZTtyZXR1cm4gdHlwZW9mIGk9PXR5cGVvZiBhJiZpPj1hfV0sImZpbHRlci1pZC0+PSI6W0gsW1ldLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPXQuaWQoKSxpPXIudmFsdWU7cmV0dXJuIHR5cGVvZiBuPT10eXBlb2YgaSYmbj49aX1dLCJmaWx0ZXItaGFzIjpbSCxbWV0sZnVuY3Rpb24odCxlKXtyZXR1cm4gZVswXS52YWx1ZSBpbiB0LnByb3BlcnRpZXMoKX1dLCJmaWx0ZXItaGFzLWlkIjpbSCxbXSxmdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9PXQuaWQoKX1dLCJmaWx0ZXItdHlwZS1pbiI6W0gsW1oocSldLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGVbMF0udmFsdWUuaW5kZXhPZih0Lmdlb21ldHJ5VHlwZSgpKT49MH1dLCJmaWx0ZXItaWQtaW4iOltILFtaKFkpXSxmdW5jdGlvbih0LGUpe3JldHVybiBlWzBdLnZhbHVlLmluZGV4T2YodC5pZCgpKT49MH1dLCJmaWx0ZXItaW4tc21hbGwiOltILFtxLFooWSldLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXTtyZXR1cm4gZVsxXS52YWx1ZS5pbmRleE9mKHQucHJvcGVydGllcygpW3IudmFsdWVdKT49MH1dLCJmaWx0ZXItaW4tbGFyZ2UiOltILFtxLFooWSldLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV07cmV0dXJuIGZ1bmN0aW9uKHQsZSxyLG4pe2Zvcig7cjw9bjspe3ZhciBpPXIrbj4+MTtpZihlW2ldPT09dClyZXR1cm4hMDtlW2ldPnQ/bj1pLTE6cj1pKzF9cmV0dXJuITF9KHQucHJvcGVydGllcygpW3IudmFsdWVdLG4udmFsdWUsMCxuLnZhbHVlLmxlbmd0aC0xKX1dLCI+Ijp7dHlwZTpILG92ZXJsb2FkczpbW1tVLFVdLFZ0XSxbW3EscV0sVnRdLFtbcSxxLFhdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV07cmV0dXJuIGVbMl0uZXZhbHVhdGUodCkuY29tcGFyZShyLmV2YWx1YXRlKHQpLG4uZXZhbHVhdGUodCkpPjB9XV19LCI8Ijp7dHlwZTpILG92ZXJsb2FkczpbW1tVLFVdLGp0XSxbW3EscV0sanRdLFtbcSxxLFhdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV07cmV0dXJuIGVbMl0uZXZhbHVhdGUodCkuY29tcGFyZShyLmV2YWx1YXRlKHQpLG4uZXZhbHVhdGUodCkpPDB9XV19LCI+PSI6e3R5cGU6SCxvdmVybG9hZHM6W1tbVSxVXSxxdF0sW1txLHFdLHF0XSxbW3EscSxYXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdO3JldHVybiBlWzJdLmV2YWx1YXRlKHQpLmNvbXBhcmUoci5ldmFsdWF0ZSh0KSxuLmV2YWx1YXRlKHQpKT49MH1dXX0sIjw9Ijp7dHlwZTpILG92ZXJsb2FkczpbW1tVLFVdLFV0XSxbW3EscV0sVXRdLFtbcSxxLFhdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV07cmV0dXJuIGVbMl0uZXZhbHVhdGUodCkuY29tcGFyZShyLmV2YWx1YXRlKHQpLG4uZXZhbHVhdGUodCkpPD0wfV1dfSxhbGw6e3R5cGU6SCxvdmVybG9hZHM6W1tbSCxIXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdO3JldHVybiByLmV2YWx1YXRlKHQpJiZuLmV2YWx1YXRlKHQpfV0sW0h0KEgpLGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsbj1lO3I8bi5sZW5ndGg7cis9MSlpZighbltyXS5ldmFsdWF0ZSh0KSlyZXR1cm4hMTtyZXR1cm4hMH1dXX0sYW55Ont0eXBlOkgsb3ZlcmxvYWRzOltbW0gsSF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXTtyZXR1cm4gci5ldmFsdWF0ZSh0KXx8bi5ldmFsdWF0ZSh0KX1dLFtIdChIKSxmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLG49ZTtyPG4ubGVuZ3RoO3IrPTEpaWYobltyXS5ldmFsdWF0ZSh0KSlyZXR1cm4hMDtyZXR1cm4hMX1dXX0sIiEiOltILFtIXSxmdW5jdGlvbih0LGUpe3JldHVybiFlWzBdLmV2YWx1YXRlKHQpfV0sImlzLXN1cHBvcnRlZC1zY3JpcHQiOltILFtxXSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj10Lmdsb2JhbHMmJnQuZ2xvYmFscy5pc1N1cHBvcnRlZFNjcmlwdDtyZXR1cm4hbnx8bihyLmV2YWx1YXRlKHQpKX1dLHVwY2FzZTpbcSxbcV0sZnVuY3Rpb24odCxlKXtyZXR1cm4gZVswXS5ldmFsdWF0ZSh0KS50b1VwcGVyQ2FzZSgpfV0sZG93bmNhc2U6W3EsW3FdLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGVbMF0uZXZhbHVhdGUodCkudG9Mb3dlckNhc2UoKX1dLGNvbmNhdDpbcSxIdChxKSxmdW5jdGlvbih0LGUpe3JldHVybiBlLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS5ldmFsdWF0ZSh0KX0pLmpvaW4oIiIpfV0sInJlc29sdmVkLWxvY2FsZSI6W3EsW1hdLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGVbMF0uZXZhbHVhdGUodCkucmVzb2x2ZWRMb2NhbGUoKX1dfSk7dmFyIFl0PS45NTA0NyxYdD0xLFp0PTEuMDg4ODMsJHQ9NC8yOSxKdD02LzI5LEt0PTMqSnQqSnQsUXQ9SnQqSnQqSnQsdGU9TWF0aC5QSS8xODAsZWU9MTgwL01hdGguUEk7ZnVuY3Rpb24gcmUodCl7cmV0dXJuIHQ+UXQ/TWF0aC5wb3codCwxLzMpOnQvS3QrJHR9ZnVuY3Rpb24gbmUodCl7cmV0dXJuIHQ+SnQ/dCp0KnQ6S3QqKHQtJHQpfWZ1bmN0aW9uIGllKHQpe3JldHVybiAyNTUqKHQ8PS4wMDMxMzA4PzEyLjkyKnQ6MS4wNTUqTWF0aC5wb3codCwxLzIuNCktLjA1NSl9ZnVuY3Rpb24gYWUodCl7cmV0dXJuKHQvPTI1NSk8PS4wNDA0NT90LzEyLjkyOk1hdGgucG93KCh0Ky4wNTUpLzEuMDU1LDIuNCl9ZnVuY3Rpb24gb2UodCl7dmFyIGU9YWUodC5yKSxyPWFlKHQuZyksbj1hZSh0LmIpLGk9cmUoKC40MTI0NTY0KmUrLjM1NzU3NjEqcisuMTgwNDM3NSpuKS9ZdCksYT1yZSgoLjIxMjY3MjkqZSsuNzE1MTUyMipyKy4wNzIxNzUqbikvWHQpO3JldHVybntsOjExNiphLTE2LGE6NTAwKihpLWEpLGI6MjAwKihhLXJlKCguMDE5MzMzOSplKy4xMTkxOTIqcisuOTUwMzA0MSpuKS9adCkpLGFscGhhOnQuYX19ZnVuY3Rpb24gc2UodCl7dmFyIGU9KHQubCsxNikvMTE2LHI9aXNOYU4odC5hKT9lOmUrdC5hLzUwMCxuPWlzTmFOKHQuYik/ZTplLXQuYi8yMDA7cmV0dXJuIGU9WHQqbmUoZSkscj1ZdCpuZShyKSxuPVp0Km5lKG4pLG5ldyB0dChpZSgzLjI0MDQ1NDIqci0xLjUzNzEzODUqZS0uNDk4NTMxNCpuKSxpZSgtLjk2OTI2NipyKzEuODc2MDEwOCplKy4wNDE1NTYqbiksaWUoLjA1NTY0MzQqci0uMjA0MDI1OSplKzEuMDU3MjI1MipuKSx0LmFscGhhKX12YXIgbGU9e2ZvcndhcmQ6b2UscmV2ZXJzZTpzZSxpbnRlcnBvbGF0ZTpmdW5jdGlvbih0LGUscil7cmV0dXJue2w6d3QodC5sLGUubCxyKSxhOnd0KHQuYSxlLmEsciksYjp3dCh0LmIsZS5iLHIpLGFscGhhOnd0KHQuYWxwaGEsZS5hbHBoYSxyKX19fSxjZT17Zm9yd2FyZDpmdW5jdGlvbih0KXt2YXIgZT1vZSh0KSxyPWUubCxuPWUuYSxpPWUuYixhPU1hdGguYXRhbjIoaSxuKSplZTtyZXR1cm57aDphPDA/YSszNjA6YSxjOk1hdGguc3FydChuKm4raSppKSxsOnIsYWxwaGE6dC5hfX0scmV2ZXJzZTpmdW5jdGlvbih0KXt2YXIgZT10LmgqdGUscj10LmM7cmV0dXJuIHNlKHtsOnQubCxhOk1hdGguY29zKGUpKnIsYjpNYXRoLnNpbihlKSpyLGFscGhhOnQuYWxwaGF9KX0saW50ZXJwb2xhdGU6ZnVuY3Rpb24odCxlLHIpe3JldHVybntoOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lLXQ7cmV0dXJuIHQrcioobj4xODB8fG48LTE4MD9uLTM2MCpNYXRoLnJvdW5kKG4vMzYwKTpuKX0odC5oLGUuaCxyKSxjOnd0KHQuYyxlLmMsciksbDp3dCh0LmwsZS5sLHIpLGFscGhhOnd0KHQuYWxwaGEsZS5hbHBoYSxyKX19fSx1ZT1PYmplY3QuZnJlZXplKHtsYWI6bGUsaGNsOmNlfSk7ZnVuY3Rpb24gaGUodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBOdW1iZXI/Im51bWJlciI6dCBpbnN0YW5jZW9mIFN0cmluZz8ic3RyaW5nIjp0IGluc3RhbmNlb2YgQm9vbGVhbj8iYm9vbGVhbiI6QXJyYXkuaXNBcnJheSh0KT8iYXJyYXkiOm51bGw9PT10PyJudWxsIjp0eXBlb2YgdH1mdW5jdGlvbiBmZSh0KXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHQmJm51bGwhPT10JiYhQXJyYXkuaXNBcnJheSh0KX1mdW5jdGlvbiBwZSh0KXtyZXR1cm4gdH1mdW5jdGlvbiBkZSh0LGUscil7cmV0dXJuIHZvaWQgMCE9PXQ/dDp2b2lkIDAhPT1lP2U6dm9pZCAwIT09cj9yOnZvaWQgMH1mdW5jdGlvbiBnZSh0LGUscixuLGkpe3JldHVybiBkZSh0eXBlb2Ygcj09PWk/bltyXTp2b2lkIDAsdC5kZWZhdWx0LGUuZGVmYXVsdCl9ZnVuY3Rpb24gbWUodCxlLHIpe2lmKCJudW1iZXIiIT09aGUocikpcmV0dXJuIGRlKHQuZGVmYXVsdCxlLmRlZmF1bHQpO3ZhciBuPXQuc3RvcHMubGVuZ3RoO2lmKDE9PT1uKXJldHVybiB0LnN0b3BzWzBdWzFdO2lmKHI8PXQuc3RvcHNbMF1bMF0pcmV0dXJuIHQuc3RvcHNbMF1bMV07aWYocj49dC5zdG9wc1tuLTFdWzBdKXJldHVybiB0LnN0b3BzW24tMV1bMV07dmFyIGk9eGUodC5zdG9wcyxyKTtyZXR1cm4gdC5zdG9wc1tpXVsxXX1mdW5jdGlvbiB2ZSh0LGUscil7dmFyIG49dm9pZCAwIT09dC5iYXNlP3QuYmFzZToxO2lmKCJudW1iZXIiIT09aGUocikpcmV0dXJuIGRlKHQuZGVmYXVsdCxlLmRlZmF1bHQpO3ZhciBpPXQuc3RvcHMubGVuZ3RoO2lmKDE9PT1pKXJldHVybiB0LnN0b3BzWzBdWzFdO2lmKHI8PXQuc3RvcHNbMF1bMF0pcmV0dXJuIHQuc3RvcHNbMF1bMV07aWYocj49dC5zdG9wc1tpLTFdWzBdKXJldHVybiB0LnN0b3BzW2ktMV1bMV07dmFyIGE9eGUodC5zdG9wcyxyKSxvPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPW4tcixhPXQtcjtyZXR1cm4gMD09PWk/MDoxPT09ZT9hL2k6KE1hdGgucG93KGUsYSktMSkvKE1hdGgucG93KGUsaSktMSl9KHIsbix0LnN0b3BzW2FdWzBdLHQuc3RvcHNbYSsxXVswXSkscz10LnN0b3BzW2FdWzFdLGw9dC5zdG9wc1thKzFdWzFdLGM9a3RbZS50eXBlXXx8cGU7aWYodC5jb2xvclNwYWNlJiYicmdiIiE9PXQuY29sb3JTcGFjZSl7dmFyIHU9dWVbdC5jb2xvclNwYWNlXTtjPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHUucmV2ZXJzZSh1LmludGVycG9sYXRlKHUuZm9yd2FyZCh0KSx1LmZvcndhcmQoZSksbykpfX1yZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygcy5ldmFsdWF0ZT97ZXZhbHVhdGU6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9W10sZT1hcmd1bWVudHMubGVuZ3RoO2UtLTspdFtlXT1hcmd1bWVudHNbZV07dmFyIHI9cy5ldmFsdWF0ZS5hcHBseSh2b2lkIDAsdCksbj1sLmV2YWx1YXRlLmFwcGx5KHZvaWQgMCx0KTtpZih2b2lkIDAhPT1yJiZ2b2lkIDAhPT1uKXJldHVybiBjKHIsbixvKX19OmMocyxsLG8pfWZ1bmN0aW9uIHllKHQsZSxyKXtyZXR1cm4iY29sb3IiPT09ZS50eXBlP3I9dHQucGFyc2Uocik6aGUocik9PT1lLnR5cGV8fCJlbnVtIj09PWUudHlwZSYmZS52YWx1ZXNbcl18fChyPXZvaWQgMCksZGUocix0LmRlZmF1bHQsZS5kZWZhdWx0KX1mdW5jdGlvbiB4ZSh0LGUpe2Zvcih2YXIgcixuLGk9MCxhPXQubGVuZ3RoLTEsbz0wO2k8PWE7KXtpZihyPXRbbz1NYXRoLmZsb29yKChpK2EpLzIpXVswXSxuPXRbbysxXVswXSxlPT09cnx8ZT5yJiZlPG4pcmV0dXJuIG87cjxlP2k9bysxOnI+ZSYmKGE9by0xKX1yZXR1cm4gTWF0aC5tYXgoby0xLDApfXZhciBiZT1mdW5jdGlvbih0LGUpe3ZhciByO3RoaXMuZXhwcmVzc2lvbj10LHRoaXMuX3dhcm5pbmdIaXN0b3J5PXt9LHRoaXMuX2RlZmF1bHRWYWx1ZT0iY29sb3IiPT09KHI9ZSkudHlwZSYmZmUoci5kZWZhdWx0KT9uZXcgdHQoMCwwLDAsMCk6ImNvbG9yIj09PXIudHlwZT90dC5wYXJzZShyLmRlZmF1bHQpfHxudWxsOnZvaWQgMD09PXIuZGVmYXVsdD9udWxsOnIuZGVmYXVsdCwiZW51bSI9PT1lLnR5cGUmJih0aGlzLl9lbnVtVmFsdWVzPWUudmFsdWVzKX07ZnVuY3Rpb24gX2UodCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCkmJnQubGVuZ3RoPjAmJiJzdHJpbmciPT10eXBlb2YgdFswXSYmdFswXWluIFJ0fWZ1bmN0aW9uIHdlKHQsZSl7dmFyIHI9bmV3IHh0KFJ0LFtdLGZ1bmN0aW9uKHQpe3ZhciBlPXtjb2xvcjpHLHN0cmluZzpxLG51bWJlcjpVLGVudW06cSxib29sZWFuOkh9O3JldHVybiJhcnJheSI9PT10LnR5cGU/WihlW3QudmFsdWVdfHxZLHQubGVuZ3RoKTplW3QudHlwZV18fG51bGx9KGUpKSxuPXIucGFyc2UodCk7cmV0dXJuIG4/R3QobmV3IGJlKG4sZSkpOld0KHIuZXJyb3JzKX1iZS5wcm90b3R5cGUuZXZhbHVhdGVXaXRob3V0RXJyb3JIYW5kbGluZz1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9ldmFsdWF0b3J8fCh0aGlzLl9ldmFsdWF0b3I9bmV3IGR0KSx0aGlzLl9ldmFsdWF0b3IuZ2xvYmFscz10LHRoaXMuX2V2YWx1YXRvci5mZWF0dXJlPWUsdGhpcy5leHByZXNzaW9uLmV2YWx1YXRlKHRoaXMuX2V2YWx1YXRvcil9LGJlLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0LGUpe3RoaXMuX2V2YWx1YXRvcnx8KHRoaXMuX2V2YWx1YXRvcj1uZXcgZHQpLHRoaXMuX2V2YWx1YXRvci5nbG9iYWxzPXQsdGhpcy5fZXZhbHVhdG9yLmZlYXR1cmU9ZTt0cnl7dmFyIHI9dGhpcy5leHByZXNzaW9uLmV2YWx1YXRlKHRoaXMuX2V2YWx1YXRvcik7aWYobnVsbD09cilyZXR1cm4gdGhpcy5fZGVmYXVsdFZhbHVlO2lmKHRoaXMuX2VudW1WYWx1ZXMmJiEociBpbiB0aGlzLl9lbnVtVmFsdWVzKSl0aHJvdyBuZXcgb3QoIkV4cGVjdGVkIHZhbHVlIHRvIGJlIG9uZSBvZiAiK09iamVjdC5rZXlzKHRoaXMuX2VudW1WYWx1ZXMpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkodCl9KS5qb2luKCIsICIpKyIsIGJ1dCBmb3VuZCAiK0pTT04uc3RyaW5naWZ5KHIpKyIgaW5zdGVhZC4iKTtyZXR1cm4gcn1jYXRjaCh0KXtyZXR1cm4gdGhpcy5fd2FybmluZ0hpc3RvcnlbdC5tZXNzYWdlXXx8KHRoaXMuX3dhcm5pbmdIaXN0b3J5W3QubWVzc2FnZV09ITAsInVuZGVmaW5lZCIhPXR5cGVvZiBjb25zb2xlJiZjb25zb2xlLndhcm4odC5tZXNzYWdlKSksdGhpcy5fZGVmYXVsdFZhbHVlfX07dmFyIGtlPWZ1bmN0aW9uKHQsZSl7dGhpcy5raW5kPXQsdGhpcy5fc3R5bGVFeHByZXNzaW9uPWV9O2tlLnByb3RvdHlwZS5ldmFsdWF0ZVdpdGhvdXRFcnJvckhhbmRsaW5nPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3N0eWxlRXhwcmVzc2lvbi5ldmFsdWF0ZVdpdGhvdXRFcnJvckhhbmRsaW5nKHQsZSl9LGtlLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9zdHlsZUV4cHJlc3Npb24uZXZhbHVhdGUodCxlKX07dmFyIE1lPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmtpbmQ9dCx0aGlzLnpvb21TdG9wcz1yLmxhYmVscyx0aGlzLl9zdHlsZUV4cHJlc3Npb249ZSxyIGluc3RhbmNlb2YgTXQmJih0aGlzLl9pbnRlcnBvbGF0aW9uVHlwZT1yLmludGVycG9sYXRpb24pfTtmdW5jdGlvbiBBZSh0LGUpe2lmKCJlcnJvciI9PT0odD13ZSh0LGUpKS5yZXN1bHQpcmV0dXJuIHQ7dmFyIHI9dC52YWx1ZS5leHByZXNzaW9uLG49bXQocik7aWYoIW4mJiFlWyJwcm9wZXJ0eS1mdW5jdGlvbiJdKXJldHVybiBXdChbbmV3IE4oIiIsInByb3BlcnR5IGV4cHJlc3Npb25zIG5vdCBzdXBwb3J0ZWQiKV0pO3ZhciBpPXZ0KHIsWyJ6b29tIl0pO2lmKCFpJiYhMT09PWVbInpvb20tZnVuY3Rpb24iXSlyZXR1cm4gV3QoW25ldyBOKCIiLCJ6b29tIGV4cHJlc3Npb25zIG5vdCBzdXBwb3J0ZWQiKV0pO3ZhciBhPWZ1bmN0aW9uIHQoZSl7dmFyIHI9bnVsbDtpZihlIGluc3RhbmNlb2YgU3Qpcj10KGUucmVzdWx0KTtlbHNlIGlmKGUgaW5zdGFuY2VvZiBUdClmb3IodmFyIG49MCxpPWUuYXJncztuPGkubGVuZ3RoO24rPTEpe3ZhciBhPWlbbl07aWYocj10KGEpKWJyZWFrfWVsc2UoZSBpbnN0YW5jZW9mIF90fHxlIGluc3RhbmNlb2YgTXQpJiZlLmlucHV0IGluc3RhbmNlb2YgZ3QmJiJ6b29tIj09PWUuaW5wdXQubmFtZSYmKHI9ZSk7cmV0dXJuIHIgaW5zdGFuY2VvZiBOP3I6KGUuZWFjaENoaWxkKGZ1bmN0aW9uKGUpe3ZhciBuPXQoZSk7biBpbnN0YW5jZW9mIE4/cj1uOiFyJiZuP3I9bmV3IE4oIiIsJyJ6b29tIiBleHByZXNzaW9uIG1heSBvbmx5IGJlIHVzZWQgYXMgaW5wdXQgdG8gYSB0b3AtbGV2ZWwgInN0ZXAiIG9yICJpbnRlcnBvbGF0ZSIgZXhwcmVzc2lvbi4nKTpyJiZuJiZyIT09biYmKHI9bmV3IE4oIiIsJ09ubHkgb25lIHpvb20tYmFzZWQgInN0ZXAiIG9yICJpbnRlcnBvbGF0ZSIgc3ViZXhwcmVzc2lvbiBtYXkgYmUgdXNlZCBpbiBhbiBleHByZXNzaW9uLicpKX0pLHIpfShyKTtyZXR1cm4gYXx8aT9hIGluc3RhbmNlb2YgTj9XdChbYV0pOmEgaW5zdGFuY2VvZiBNdCYmInBpZWNld2lzZS1jb25zdGFudCI9PT1lLmZ1bmN0aW9uP1d0KFtuZXcgTigiIiwnImludGVycG9sYXRlIiBleHByZXNzaW9ucyBjYW5ub3QgYmUgdXNlZCB3aXRoIHRoaXMgcHJvcGVydHknKV0pOkd0KGE/bmV3IE1lKG4/ImNhbWVyYSI6ImNvbXBvc2l0ZSIsdC52YWx1ZSxhKTpuZXcga2Uobj8iY29uc3RhbnQiOiJzb3VyY2UiLHQudmFsdWUpKTpXdChbbmV3IE4oIiIsJyJ6b29tIiBleHByZXNzaW9uIG1heSBvbmx5IGJlIHVzZWQgYXMgaW5wdXQgdG8gYSB0b3AtbGV2ZWwgInN0ZXAiIG9yICJpbnRlcnBvbGF0ZSIgZXhwcmVzc2lvbi4nKV0pfU1lLnByb3RvdHlwZS5ldmFsdWF0ZVdpdGhvdXRFcnJvckhhbmRsaW5nPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3N0eWxlRXhwcmVzc2lvbi5ldmFsdWF0ZVdpdGhvdXRFcnJvckhhbmRsaW5nKHQsZSl9LE1lLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9zdHlsZUV4cHJlc3Npb24uZXZhbHVhdGUodCxlKX0sTWUucHJvdG90eXBlLmludGVycG9sYXRpb25GYWN0b3I9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLl9pbnRlcnBvbGF0aW9uVHlwZT9NdC5pbnRlcnBvbGF0aW9uRmFjdG9yKHRoaXMuX2ludGVycG9sYXRpb25UeXBlLHQsZSxyKTowfTt2YXIgVGU9ZnVuY3Rpb24odCxlKXt0aGlzLl9wYXJhbWV0ZXJzPXQsdGhpcy5fc3BlY2lmaWNhdGlvbj1lLFIodGhpcyxmdW5jdGlvbiB0KGUscil7dmFyIG4saSxhLG89ImNvbG9yIj09PXIudHlwZSxzPWUuc3RvcHMmJiJvYmplY3QiPT10eXBlb2YgZS5zdG9wc1swXVswXSxsPXN8fHZvaWQgMCE9PWUucHJvcGVydHksYz1zfHwhbCx1PWUudHlwZXx8KCJpbnRlcnBvbGF0ZWQiPT09ci5mdW5jdGlvbj8iZXhwb25lbnRpYWwiOiJpbnRlcnZhbCIpO2lmKG8mJigoZT1SKHt9LGUpKS5zdG9wcyYmKGUuc3RvcHM9ZS5zdG9wcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuW3RbMF0sdHQucGFyc2UodFsxXSldfSkpLGUuZGVmYXVsdD9lLmRlZmF1bHQ9dHQucGFyc2UoZS5kZWZhdWx0KTplLmRlZmF1bHQ9dHQucGFyc2Uoci5kZWZhdWx0KSksZS5jb2xvclNwYWNlJiYicmdiIiE9PWUuY29sb3JTcGFjZSYmIXVlW2UuY29sb3JTcGFjZV0pdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGNvbG9yIHNwYWNlOiAiK2UuY29sb3JTcGFjZSk7aWYoImV4cG9uZW50aWFsIj09PXUpbj12ZTtlbHNlIGlmKCJpbnRlcnZhbCI9PT11KW49bWU7ZWxzZSBpZigiY2F0ZWdvcmljYWwiPT09dSl7bj1nZSxpPU9iamVjdC5jcmVhdGUobnVsbCk7Zm9yKHZhciBoPTAsZj1lLnN0b3BzO2g8Zi5sZW5ndGg7aCs9MSl7dmFyIHA9ZltoXTtpW3BbMF1dPXBbMV19YT10eXBlb2YgZS5zdG9wc1swXVswXX1lbHNle2lmKCJpZGVudGl0eSIhPT11KXRocm93IG5ldyBFcnJvcignVW5rbm93biBmdW5jdGlvbiB0eXBlICInK3UrJyInKTtuPXllfWlmKHMpe2Zvcih2YXIgZD17fSxnPVtdLG09MDttPGUuc3RvcHMubGVuZ3RoO20rKyl7dmFyIHY9ZS5zdG9wc1ttXSx5PXZbMF0uem9vbTt2b2lkIDA9PT1kW3ldJiYoZFt5XT17em9vbTp5LHR5cGU6ZS50eXBlLHByb3BlcnR5OmUucHJvcGVydHksZGVmYXVsdDplLmRlZmF1bHQsc3RvcHM6W119LGcucHVzaCh5KSksZFt5XS5zdG9wcy5wdXNoKFt2WzBdLnZhbHVlLHZbMV1dKX1mb3IodmFyIHg9W10sYj0wLF89ZztiPF8ubGVuZ3RoO2IrPTEpe3ZhciB3PV9bYl07eC5wdXNoKFtkW3ddLnpvb20sdChkW3ddLHIpXSl9cmV0dXJue2tpbmQ6ImNvbXBvc2l0ZSIsaW50ZXJwb2xhdGlvbkZhY3RvcjpNdC5pbnRlcnBvbGF0aW9uRmFjdG9yLmJpbmQodm9pZCAwLHtuYW1lOiJsaW5lYXIifSksem9vbVN0b3BzOngubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdfSksZXZhbHVhdGU6ZnVuY3Rpb24odCxuKXt2YXIgaT10Lnpvb207cmV0dXJuIHZlKHtzdG9wczp4LGJhc2U6ZS5iYXNlfSxyLGkpLmV2YWx1YXRlKGksbil9fX1yZXR1cm4gYz97a2luZDoiY2FtZXJhIixpbnRlcnBvbGF0aW9uRmFjdG9yOiJleHBvbmVudGlhbCI9PT11P010LmludGVycG9sYXRpb25GYWN0b3IuYmluZCh2b2lkIDAse25hbWU6ImV4cG9uZW50aWFsIixiYXNlOnZvaWQgMCE9PWUuYmFzZT9lLmJhc2U6MX0pOmZ1bmN0aW9uKCl7cmV0dXJuIDB9LHpvb21TdG9wczplLnN0b3BzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdFswXX0pLGV2YWx1YXRlOmZ1bmN0aW9uKHQpe3ZhciBvPXQuem9vbTtyZXR1cm4gbihlLHIsbyxpLGEpfX06e2tpbmQ6InNvdXJjZSIsZXZhbHVhdGU6ZnVuY3Rpb24odCxvKXt2YXIgcz1vJiZvLnByb3BlcnRpZXM/by5wcm9wZXJ0aWVzW2UucHJvcGVydHldOnZvaWQgMDtyZXR1cm4gdm9pZCAwPT09cz9kZShlLmRlZmF1bHQsci5kZWZhdWx0KTpuKGUscixzLGksYSl9fX0odGhpcy5fcGFyYW1ldGVycyx0aGlzLl9zcGVjaWZpY2F0aW9uKSl9O2Z1bmN0aW9uIFNlKHQsZSl7aWYoZmUodCkpcmV0dXJuIG5ldyBUZSh0LGUpO2lmKF9lKHQpKXt2YXIgcj1BZSh0LGUpO2lmKCJlcnJvciI9PT1yLnJlc3VsdCl0aHJvdyBuZXcgRXJyb3Ioci52YWx1ZS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQua2V5KyI6ICIrdC5tZXNzYWdlfSkuam9pbigiLCAiKSk7cmV0dXJuIHIudmFsdWV9dmFyIG49dDtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQmJiJjb2xvciI9PT1lLnR5cGUmJihuPXR0LnBhcnNlKHQpKSx7a2luZDoiY29uc3RhbnQiLGV2YWx1YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIG59fX1mdW5jdGlvbiBFZSh0KXt2YXIgZT10LmtleSxyPXQudmFsdWUsbj10LnZhbHVlU3BlY3x8e30saT10Lm9iamVjdEVsZW1lbnRWYWxpZGF0b3JzfHx7fSxhPXQuc3R5bGUsbz10LnN0eWxlU3BlYyxzPVtdLGw9aGUocik7aWYoIm9iamVjdCIhPT1sKXJldHVybltuZXcgTyhlLHIsIm9iamVjdCBleHBlY3RlZCwgIitsKyIgZm91bmQiKV07Zm9yKHZhciBjIGluIHIpe3ZhciB1PWMuc3BsaXQoIi4iKVswXSxoPW5bdV18fG5bIioiXSxmPXZvaWQgMDtpZihpW3VdKWY9aVt1XTtlbHNlIGlmKG5bdV0pZj1LZTtlbHNlIGlmKGlbIioiXSlmPWlbIioiXTtlbHNle2lmKCFuWyIqIl0pe3MucHVzaChuZXcgTyhlLHJbY10sJ3Vua25vd24gcHJvcGVydHkgIicrYysnIicpKTtjb250aW51ZX1mPUtlfXM9cy5jb25jYXQoZih7a2V5OihlP2UrIi4iOmUpK2MsdmFsdWU6cltjXSx2YWx1ZVNwZWM6aCxzdHlsZTphLHN0eWxlU3BlYzpvLG9iamVjdDpyLG9iamVjdEtleTpjfSxyKSl9Zm9yKHZhciBwIGluIG4paVtwXXx8bltwXS5yZXF1aXJlZCYmdm9pZCAwPT09bltwXS5kZWZhdWx0JiZ2b2lkIDA9PT1yW3BdJiZzLnB1c2gobmV3IE8oZSxyLCdtaXNzaW5nIHJlcXVpcmVkIHByb3BlcnR5ICInK3ArJyInKSk7cmV0dXJuIHN9ZnVuY3Rpb24gQ2UodCl7dmFyIGU9dC52YWx1ZSxyPXQudmFsdWVTcGVjLG49dC5zdHlsZSxpPXQuc3R5bGVTcGVjLGE9dC5rZXksbz10LmFycmF5RWxlbWVudFZhbGlkYXRvcnx8S2U7aWYoImFycmF5IiE9PWhlKGUpKXJldHVybltuZXcgTyhhLGUsImFycmF5IGV4cGVjdGVkLCAiK2hlKGUpKyIgZm91bmQiKV07aWYoci5sZW5ndGgmJmUubGVuZ3RoIT09ci5sZW5ndGgpcmV0dXJuW25ldyBPKGEsZSwiYXJyYXkgbGVuZ3RoICIrci5sZW5ndGgrIiBleHBlY3RlZCwgbGVuZ3RoICIrZS5sZW5ndGgrIiBmb3VuZCIpXTtpZihyWyJtaW4tbGVuZ3RoIl0mJmUubGVuZ3RoPHJbIm1pbi1sZW5ndGgiXSlyZXR1cm5bbmV3IE8oYSxlLCJhcnJheSBsZW5ndGggYXQgbGVhc3QgIityWyJtaW4tbGVuZ3RoIl0rIiBleHBlY3RlZCwgbGVuZ3RoICIrZS5sZW5ndGgrIiBmb3VuZCIpXTt2YXIgcz17dHlwZTpyLnZhbHVlfTtpLiR2ZXJzaW9uPDcmJihzLmZ1bmN0aW9uPXIuZnVuY3Rpb24pLCJvYmplY3QiPT09aGUoci52YWx1ZSkmJihzPXIudmFsdWUpO2Zvcih2YXIgbD1bXSxjPTA7YzxlLmxlbmd0aDtjKyspbD1sLmNvbmNhdChvKHthcnJheTplLGFycmF5SW5kZXg6Yyx2YWx1ZTplW2NdLHZhbHVlU3BlYzpzLHN0eWxlOm4sc3R5bGVTcGVjOmksa2V5OmErIlsiK2MrIl0ifSkpO3JldHVybiBsfWZ1bmN0aW9uIExlKHQpe3ZhciBlPXQua2V5LHI9dC52YWx1ZSxuPXQudmFsdWVTcGVjLGk9aGUocik7cmV0dXJuIm51bWJlciIhPT1pP1tuZXcgTyhlLHIsIm51bWJlciBleHBlY3RlZCwgIitpKyIgZm91bmQiKV06Im1pbmltdW0iaW4gbiYmcjxuLm1pbmltdW0/W25ldyBPKGUscixyKyIgaXMgbGVzcyB0aGFuIHRoZSBtaW5pbXVtIHZhbHVlICIrbi5taW5pbXVtKV06Im1heGltdW0iaW4gbiYmcj5uLm1heGltdW0/W25ldyBPKGUscixyKyIgaXMgZ3JlYXRlciB0aGFuIHRoZSBtYXhpbXVtIHZhbHVlICIrbi5tYXhpbXVtKV06W119ZnVuY3Rpb24gemUodCl7dmFyIGUscixuLGk9dC52YWx1ZVNwZWMsYT1CKHQudmFsdWUudHlwZSksbz17fSxzPSJjYXRlZ29yaWNhbCIhPT1hJiZ2b2lkIDA9PT10LnZhbHVlLnByb3BlcnR5LGw9IXMsYz0iYXJyYXkiPT09aGUodC52YWx1ZS5zdG9wcykmJiJhcnJheSI9PT1oZSh0LnZhbHVlLnN0b3BzWzBdKSYmIm9iamVjdCI9PT1oZSh0LnZhbHVlLnN0b3BzWzBdWzBdKSx1PUVlKHtrZXk6dC5rZXksdmFsdWU6dC52YWx1ZSx2YWx1ZVNwZWM6dC5zdHlsZVNwZWMuZnVuY3Rpb24sc3R5bGU6dC5zdHlsZSxzdHlsZVNwZWM6dC5zdHlsZVNwZWMsb2JqZWN0RWxlbWVudFZhbGlkYXRvcnM6e3N0b3BzOmZ1bmN0aW9uKHQpe2lmKCJpZGVudGl0eSI9PT1hKXJldHVybltuZXcgTyh0LmtleSx0LnZhbHVlLCdpZGVudGl0eSBmdW5jdGlvbiBtYXkgbm90IGhhdmUgYSAic3RvcHMiIHByb3BlcnR5JyldO3ZhciBlPVtdLHI9dC52YWx1ZTtyZXR1cm4gZT1lLmNvbmNhdChDZSh7a2V5OnQua2V5LHZhbHVlOnIsdmFsdWVTcGVjOnQudmFsdWVTcGVjLHN0eWxlOnQuc3R5bGUsc3R5bGVTcGVjOnQuc3R5bGVTcGVjLGFycmF5RWxlbWVudFZhbGlkYXRvcjpofSkpLCJhcnJheSI9PT1oZShyKSYmMD09PXIubGVuZ3RoJiZlLnB1c2gobmV3IE8odC5rZXksciwiYXJyYXkgbXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBzdG9wIikpLGV9LGRlZmF1bHQ6ZnVuY3Rpb24odCl7cmV0dXJuIEtlKHtrZXk6dC5rZXksdmFsdWU6dC52YWx1ZSx2YWx1ZVNwZWM6aSxzdHlsZTp0LnN0eWxlLHN0eWxlU3BlYzp0LnN0eWxlU3BlY30pfX19KTtyZXR1cm4iaWRlbnRpdHkiPT09YSYmcyYmdS5wdXNoKG5ldyBPKHQua2V5LHQudmFsdWUsJ21pc3NpbmcgcmVxdWlyZWQgcHJvcGVydHkgInByb3BlcnR5IicpKSwiaWRlbnRpdHkiPT09YXx8dC52YWx1ZS5zdG9wc3x8dS5wdXNoKG5ldyBPKHQua2V5LHQudmFsdWUsJ21pc3NpbmcgcmVxdWlyZWQgcHJvcGVydHkgInN0b3BzIicpKSwiZXhwb25lbnRpYWwiPT09YSYmInBpZWNld2lzZS1jb25zdGFudCI9PT10LnZhbHVlU3BlYy5mdW5jdGlvbiYmdS5wdXNoKG5ldyBPKHQua2V5LHQudmFsdWUsImV4cG9uZW50aWFsIGZ1bmN0aW9ucyBub3Qgc3VwcG9ydGVkIikpLHQuc3R5bGVTcGVjLiR2ZXJzaW9uPj04JiYobCYmIXQudmFsdWVTcGVjWyJwcm9wZXJ0eS1mdW5jdGlvbiJdP3UucHVzaChuZXcgTyh0LmtleSx0LnZhbHVlLCJwcm9wZXJ0eSBmdW5jdGlvbnMgbm90IHN1cHBvcnRlZCIpKTpzJiYhdC52YWx1ZVNwZWNbInpvb20tZnVuY3Rpb24iXSYmImhlYXRtYXAtY29sb3IiIT09dC5vYmplY3RLZXkmJiJsaW5lLWdyYWRpZW50IiE9PXQub2JqZWN0S2V5JiZ1LnB1c2gobmV3IE8odC5rZXksdC52YWx1ZSwiem9vbSBmdW5jdGlvbnMgbm90IHN1cHBvcnRlZCIpKSksImNhdGVnb3JpY2FsIiE9PWEmJiFjfHx2b2lkIDAhPT10LnZhbHVlLnByb3BlcnR5fHx1LnB1c2gobmV3IE8odC5rZXksdC52YWx1ZSwnInByb3BlcnR5IiBwcm9wZXJ0eSBpcyByZXF1aXJlZCcpKSx1O2Z1bmN0aW9uIGgodCl7dmFyIGU9W10sYT10LnZhbHVlLHM9dC5rZXk7aWYoImFycmF5IiE9PWhlKGEpKXJldHVybltuZXcgTyhzLGEsImFycmF5IGV4cGVjdGVkLCAiK2hlKGEpKyIgZm91bmQiKV07aWYoMiE9PWEubGVuZ3RoKXJldHVybltuZXcgTyhzLGEsImFycmF5IGxlbmd0aCAyIGV4cGVjdGVkLCBsZW5ndGggIithLmxlbmd0aCsiIGZvdW5kIildO2lmKGMpe2lmKCJvYmplY3QiIT09aGUoYVswXSkpcmV0dXJuW25ldyBPKHMsYSwib2JqZWN0IGV4cGVjdGVkLCAiK2hlKGFbMF0pKyIgZm91bmQiKV07aWYodm9pZCAwPT09YVswXS56b29tKXJldHVybltuZXcgTyhzLGEsIm9iamVjdCBzdG9wIGtleSBtdXN0IGhhdmUgem9vbSIpXTtpZih2b2lkIDA9PT1hWzBdLnZhbHVlKXJldHVybltuZXcgTyhzLGEsIm9iamVjdCBzdG9wIGtleSBtdXN0IGhhdmUgdmFsdWUiKV07aWYobiYmbj5CKGFbMF0uem9vbSkpcmV0dXJuW25ldyBPKHMsYVswXS56b29tLCJzdG9wIHpvb20gdmFsdWVzIG11c3QgYXBwZWFyIGluIGFzY2VuZGluZyBvcmRlciIpXTtCKGFbMF0uem9vbSkhPT1uJiYobj1CKGFbMF0uem9vbSkscj12b2lkIDAsbz17fSksZT1lLmNvbmNhdChFZSh7a2V5OnMrIlswXSIsdmFsdWU6YVswXSx2YWx1ZVNwZWM6e3pvb206e319LHN0eWxlOnQuc3R5bGUsc3R5bGVTcGVjOnQuc3R5bGVTcGVjLG9iamVjdEVsZW1lbnRWYWxpZGF0b3JzOnt6b29tOkxlLHZhbHVlOmZ9fSkpfWVsc2UgZT1lLmNvbmNhdChmKHtrZXk6cysiWzBdIix2YWx1ZTphWzBdLHZhbHVlU3BlYzp7fSxzdHlsZTp0LnN0eWxlLHN0eWxlU3BlYzp0LnN0eWxlU3BlY30sYSkpO3JldHVybiBlLmNvbmNhdChLZSh7a2V5OnMrIlsxXSIsdmFsdWU6YVsxXSx2YWx1ZVNwZWM6aSxzdHlsZTp0LnN0eWxlLHN0eWxlU3BlYzp0LnN0eWxlU3BlY30pKX1mdW5jdGlvbiBmKHQsbil7dmFyIHM9aGUodC52YWx1ZSksbD1CKHQudmFsdWUpLGM9bnVsbCE9PXQudmFsdWU/dC52YWx1ZTpuO2lmKGUpe2lmKHMhPT1lKXJldHVybltuZXcgTyh0LmtleSxjLHMrIiBzdG9wIGRvbWFpbiB0eXBlIG11c3QgbWF0Y2ggcHJldmlvdXMgc3RvcCBkb21haW4gdHlwZSAiK2UpXX1lbHNlIGU9cztpZigibnVtYmVyIiE9PXMmJiJzdHJpbmciIT09cyYmImJvb2xlYW4iIT09cylyZXR1cm5bbmV3IE8odC5rZXksYywic3RvcCBkb21haW4gdmFsdWUgbXVzdCBiZSBhIG51bWJlciwgc3RyaW5nLCBvciBib29sZWFuIildO2lmKCJudW1iZXIiIT09cyYmImNhdGVnb3JpY2FsIiE9PWEpe3ZhciB1PSJudW1iZXIgZXhwZWN0ZWQsICIrcysiIGZvdW5kIjtyZXR1cm4gaVsicHJvcGVydHktZnVuY3Rpb24iXSYmdm9pZCAwPT09YSYmKHUrPSdcbklmIHlvdSBpbnRlbmRlZCB0byB1c2UgYSBjYXRlZ29yaWNhbCBmdW5jdGlvbiwgc3BlY2lmeSBgInR5cGUiOiAiY2F0ZWdvcmljYWwiYC4nKSxbbmV3IE8odC5rZXksYyx1KV19cmV0dXJuImNhdGVnb3JpY2FsIiE9PWF8fCJudW1iZXIiIT09c3x8aXNGaW5pdGUobCkmJk1hdGguZmxvb3IobCk9PT1sPyJjYXRlZ29yaWNhbCIhPT1hJiYibnVtYmVyIj09PXMmJnZvaWQgMCE9PXImJmw8cj9bbmV3IE8odC5rZXksYywic3RvcCBkb21haW4gdmFsdWVzIG11c3QgYXBwZWFyIGluIGFzY2VuZGluZyBvcmRlciIpXToocj1sLCJjYXRlZ29yaWNhbCI9PT1hJiZsIGluIG8/W25ldyBPKHQua2V5LGMsInN0b3AgZG9tYWluIHZhbHVlcyBtdXN0IGJlIHVuaXF1ZSIpXToob1tsXT0hMCxbXSkpOltuZXcgTyh0LmtleSxjLCJpbnRlZ2VyIGV4cGVjdGVkLCBmb3VuZCAiK2wpXX19ZnVuY3Rpb24gUGUodCl7dmFyIGU9KCJwcm9wZXJ0eSI9PT10LmV4cHJlc3Npb25Db250ZXh0P0FlOndlKShGKHQudmFsdWUpLHQudmFsdWVTcGVjKTtyZXR1cm4iZXJyb3IiPT09ZS5yZXN1bHQ/ZS52YWx1ZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBPKCIiK3Qua2V5K2Uua2V5LHQudmFsdWUsZS5tZXNzYWdlKX0pOiJwcm9wZXJ0eSI9PT10LmV4cHJlc3Npb25Db250ZXh0JiYidGV4dC1mb250Ij09PXQucHJvcGVydHlLZXkmJi0xIT09ZS52YWx1ZS5fc3R5bGVFeHByZXNzaW9uLmV4cHJlc3Npb24ucG9zc2libGVPdXRwdXRzKCkuaW5kZXhPZih2b2lkIDApP1tuZXcgTyh0LmtleSx0LnZhbHVlLCdJbnZhbGlkIGRhdGEgZXhwcmVzc2lvbiBmb3IgInRleHQtZm9udCIuIE91dHB1dCB2YWx1ZXMgbXVzdCBiZSBjb250YWluZWQgYXMgbGl0ZXJhbHMgd2l0aGluIHRoZSBleHByZXNzaW9uLicpXTpbXX1mdW5jdGlvbiBJZSh0KXt2YXIgZT10LmtleSxyPXQudmFsdWUsbj10LnZhbHVlU3BlYyxpPVtdO3JldHVybiBBcnJheS5pc0FycmF5KG4udmFsdWVzKT8tMT09PW4udmFsdWVzLmluZGV4T2YoQihyKSkmJmkucHVzaChuZXcgTyhlLHIsImV4cGVjdGVkIG9uZSBvZiBbIituLnZhbHVlcy5qb2luKCIsICIpKyJdLCAiK0pTT04uc3RyaW5naWZ5KHIpKyIgZm91bmQiKSk6LTE9PT1PYmplY3Qua2V5cyhuLnZhbHVlcykuaW5kZXhPZihCKHIpKSYmaS5wdXNoKG5ldyBPKGUsciwiZXhwZWN0ZWQgb25lIG9mIFsiK09iamVjdC5rZXlzKG4udmFsdWVzKS5qb2luKCIsICIpKyJdLCAiK0pTT04uc3RyaW5naWZ5KHIpKyIgZm91bmQiKSksaX1mdW5jdGlvbiBPZSh0KXtpZighQXJyYXkuaXNBcnJheSh0KXx8MD09PXQubGVuZ3RoKXJldHVybiExO3N3aXRjaCh0WzBdKXtjYXNlImhhcyI6cmV0dXJuIHQubGVuZ3RoPj0yJiYiJGlkIiE9PXRbMV0mJiIkdHlwZSIhPT10WzFdO2Nhc2UiaW4iOmNhc2UiIWluIjpjYXNlIiFoYXMiOmNhc2Uibm9uZSI6cmV0dXJuITE7Y2FzZSI9PSI6Y2FzZSIhPSI6Y2FzZSI+IjpjYXNlIj49IjpjYXNlIjwiOmNhc2UiPD0iOnJldHVybiAzPT09dC5sZW5ndGgmJihBcnJheS5pc0FycmF5KHRbMV0pfHxBcnJheS5pc0FycmF5KHRbMl0pKTtjYXNlImFueSI6Y2FzZSJhbGwiOmZvcih2YXIgZT0wLHI9dC5zbGljZSgxKTtlPHIubGVuZ3RoO2UrPTEpe3ZhciBuPXJbZV07aWYoIU9lKG4pJiYiYm9vbGVhbiIhPXR5cGVvZiBuKXJldHVybiExfXJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITB9fVRlLmRlc2VyaWFsaXplPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgVGUodC5fcGFyYW1ldGVycyx0Ll9zcGVjaWZpY2F0aW9uKX0sVGUuc2VyaWFsaXplPWZ1bmN0aW9uKHQpe3JldHVybntfcGFyYW1ldGVyczp0Ll9wYXJhbWV0ZXJzLF9zcGVjaWZpY2F0aW9uOnQuX3NwZWNpZmljYXRpb259fTt2YXIgRGU9e3R5cGU6ImJvb2xlYW4iLGRlZmF1bHQ6ITEsZnVuY3Rpb246ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCwiem9vbS1mdW5jdGlvbiI6ITB9O2Z1bmN0aW9uIFJlKHQpe2lmKCF0KXJldHVybiBmdW5jdGlvbigpe3JldHVybiEwfTtPZSh0KXx8KHQ9RmUodCkpO3ZhciBlPXdlKHQsRGUpO2lmKCJlcnJvciI9PT1lLnJlc3VsdCl0aHJvdyBuZXcgRXJyb3IoZS52YWx1ZS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQua2V5KyI6ICIrdC5tZXNzYWdlfSkuam9pbigiLCAiKSk7cmV0dXJuIGZ1bmN0aW9uKHQscil7cmV0dXJuIGUudmFsdWUuZXZhbHVhdGUodCxyKX19ZnVuY3Rpb24gQmUodCxlKXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOjB9ZnVuY3Rpb24gRmUodCl7aWYoIXQpcmV0dXJuITA7dmFyIGUscj10WzBdO3JldHVybiB0Lmxlbmd0aDw9MT8iYW55IiE9PXI6Ij09Ij09PXI/TmUodFsxXSx0WzJdLCI9PSIpOiIhPSI9PT1yP1VlKE5lKHRbMV0sdFsyXSwiPT0iKSk6IjwiPT09cnx8Ij4iPT09cnx8Ijw9Ij09PXJ8fCI+PSI9PT1yP05lKHRbMV0sdFsyXSxyKToiYW55Ij09PXI/KGU9dC5zbGljZSgxKSxbImFueSJdLmNvbmNhdChlLm1hcChGZSkpKToiYWxsIj09PXI/WyJhbGwiXS5jb25jYXQodC5zbGljZSgxKS5tYXAoRmUpKToibm9uZSI9PT1yP1siYWxsIl0uY29uY2F0KHQuc2xpY2UoMSkubWFwKEZlKS5tYXAoVWUpKToiaW4iPT09cj9qZSh0WzFdLHQuc2xpY2UoMikpOiIhaW4iPT09cj9VZShqZSh0WzFdLHQuc2xpY2UoMikpKToiaGFzIj09PXI/VmUodFsxXSk6IiFoYXMiIT09cnx8VWUoVmUodFsxXSkpfWZ1bmN0aW9uIE5lKHQsZSxyKXtzd2l0Y2godCl7Y2FzZSIkdHlwZSI6cmV0dXJuWyJmaWx0ZXItdHlwZS0iK3IsZV07Y2FzZSIkaWQiOnJldHVyblsiZmlsdGVyLWlkLSIrcixlXTtkZWZhdWx0OnJldHVyblsiZmlsdGVyLSIrcix0LGVdfX1mdW5jdGlvbiBqZSh0LGUpe2lmKDA9PT1lLmxlbmd0aClyZXR1cm4hMTtzd2l0Y2godCl7Y2FzZSIkdHlwZSI6cmV0dXJuWyJmaWx0ZXItdHlwZS1pbiIsWyJsaXRlcmFsIixlXV07Y2FzZSIkaWQiOnJldHVyblsiZmlsdGVyLWlkLWluIixbImxpdGVyYWwiLGVdXTtkZWZhdWx0OnJldHVybiBlLmxlbmd0aD4yMDAmJiFlLnNvbWUoZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0IT10eXBlb2YgZVswXX0pP1siZmlsdGVyLWluLWxhcmdlIix0LFsibGl0ZXJhbCIsZS5zb3J0KEJlKV1dOlsiZmlsdGVyLWluLXNtYWxsIix0LFsibGl0ZXJhbCIsZV1dfX1mdW5jdGlvbiBWZSh0KXtzd2l0Y2godCl7Y2FzZSIkdHlwZSI6cmV0dXJuITA7Y2FzZSIkaWQiOnJldHVyblsiZmlsdGVyLWhhcy1pZCJdO2RlZmF1bHQ6cmV0dXJuWyJmaWx0ZXItaGFzIix0XX19ZnVuY3Rpb24gVWUodCl7cmV0dXJuWyIhIix0XX1mdW5jdGlvbiBxZSh0KXtyZXR1cm4gT2UoRih0LnZhbHVlKSk/UGUoUih7fSx0LHtleHByZXNzaW9uQ29udGV4dDoiZmlsdGVyIix2YWx1ZVNwZWM6e3ZhbHVlOiJib29sZWFuIn19KSk6ZnVuY3Rpb24gdChlKXt2YXIgcj1lLnZhbHVlLG49ZS5rZXk7aWYoImFycmF5IiE9PWhlKHIpKXJldHVybltuZXcgTyhuLHIsImFycmF5IGV4cGVjdGVkLCAiK2hlKHIpKyIgZm91bmQiKV07dmFyIGksYT1lLnN0eWxlU3BlYyxvPVtdO2lmKHIubGVuZ3RoPDEpcmV0dXJuW25ldyBPKG4sciwiZmlsdGVyIGFycmF5IG11c3QgaGF2ZSBhdCBsZWFzdCAxIGVsZW1lbnQiKV07c3dpdGNoKG89by5jb25jYXQoSWUoe2tleTpuKyJbMF0iLHZhbHVlOnJbMF0sdmFsdWVTcGVjOmEuZmlsdGVyX29wZXJhdG9yLHN0eWxlOmUuc3R5bGUsc3R5bGVTcGVjOmUuc3R5bGVTcGVjfSkpLEIoclswXSkpe2Nhc2UiPCI6Y2FzZSI8PSI6Y2FzZSI+IjpjYXNlIj49IjpyLmxlbmd0aD49MiYmIiR0eXBlIj09PUIoclsxXSkmJm8ucHVzaChuZXcgTyhuLHIsJyIkdHlwZSIgY2Fubm90IGJlIHVzZSB3aXRoIG9wZXJhdG9yICInK3JbMF0rJyInKSk7Y2FzZSI9PSI6Y2FzZSIhPSI6MyE9PXIubGVuZ3RoJiZvLnB1c2gobmV3IE8obixyLCdmaWx0ZXIgYXJyYXkgZm9yIG9wZXJhdG9yICInK3JbMF0rJyIgbXVzdCBoYXZlIDMgZWxlbWVudHMnKSk7Y2FzZSJpbiI6Y2FzZSIhaW4iOnIubGVuZ3RoPj0yJiYic3RyaW5nIiE9PShpPWhlKHJbMV0pKSYmby5wdXNoKG5ldyBPKG4rIlsxXSIsclsxXSwic3RyaW5nIGV4cGVjdGVkLCAiK2krIiBmb3VuZCIpKTtmb3IodmFyIHM9MjtzPHIubGVuZ3RoO3MrKylpPWhlKHJbc10pLCIkdHlwZSI9PT1CKHJbMV0pP289by5jb25jYXQoSWUoe2tleTpuKyJbIitzKyJdIix2YWx1ZTpyW3NdLHZhbHVlU3BlYzphLmdlb21ldHJ5X3R5cGUsc3R5bGU6ZS5zdHlsZSxzdHlsZVNwZWM6ZS5zdHlsZVNwZWN9KSk6InN0cmluZyIhPT1pJiYibnVtYmVyIiE9PWkmJiJib29sZWFuIiE9PWkmJm8ucHVzaChuZXcgTyhuKyJbIitzKyJdIixyW3NdLCJzdHJpbmcsIG51bWJlciwgb3IgYm9vbGVhbiBleHBlY3RlZCwgIitpKyIgZm91bmQiKSk7YnJlYWs7Y2FzZSJhbnkiOmNhc2UiYWxsIjpjYXNlIm5vbmUiOmZvcih2YXIgbD0xO2w8ci5sZW5ndGg7bCsrKW89by5jb25jYXQodCh7a2V5Om4rIlsiK2wrIl0iLHZhbHVlOnJbbF0sc3R5bGU6ZS5zdHlsZSxzdHlsZVNwZWM6ZS5zdHlsZVNwZWN9KSk7YnJlYWs7Y2FzZSJoYXMiOmNhc2UiIWhhcyI6aT1oZShyWzFdKSwyIT09ci5sZW5ndGg/by5wdXNoKG5ldyBPKG4sciwnZmlsdGVyIGFycmF5IGZvciAiJytyWzBdKyciIG9wZXJhdG9yIG11c3QgaGF2ZSAyIGVsZW1lbnRzJykpOiJzdHJpbmciIT09aSYmby5wdXNoKG5ldyBPKG4rIlsxXSIsclsxXSwic3RyaW5nIGV4cGVjdGVkLCAiK2krIiBmb3VuZCIpKX1yZXR1cm4gb30odCl9ZnVuY3Rpb24gSGUodCxlKXt2YXIgcj10LmtleSxuPXQuc3R5bGUsaT10LnN0eWxlU3BlYyxhPXQudmFsdWUsbz10Lm9iamVjdEtleSxzPWlbZSsiXyIrdC5sYXllclR5cGVdO2lmKCFzKXJldHVybltdO3ZhciBsPW8ubWF0Y2goL14oLiopLXRyYW5zaXRpb24kLyk7aWYoInBhaW50Ij09PWUmJmwmJnNbbFsxXV0mJnNbbFsxXV0udHJhbnNpdGlvbilyZXR1cm4gS2Uoe2tleTpyLHZhbHVlOmEsdmFsdWVTcGVjOmkudHJhbnNpdGlvbixzdHlsZTpuLHN0eWxlU3BlYzppfSk7dmFyIGMsdT10LnZhbHVlU3BlY3x8c1tvXTtpZighdSlyZXR1cm5bbmV3IE8ocixhLCd1bmtub3duIHByb3BlcnR5ICInK28rJyInKV07aWYoInN0cmluZyI9PT1oZShhKSYmdVsicHJvcGVydHktZnVuY3Rpb24iXSYmIXUudG9rZW5zJiYoYz0vXnsoW159XSspfSQvLmV4ZWMoYSkpKXJldHVybltuZXcgTyhyLGEsJyInK28rJyIgZG9lcyBub3Qgc3VwcG9ydCBpbnRlcnBvbGF0aW9uIHN5bnRheFxuVXNlIGFuIGlkZW50aXR5IHByb3BlcnR5IGZ1bmN0aW9uIGluc3RlYWQ6IGB7ICJ0eXBlIjogImlkZW50aXR5IiwgInByb3BlcnR5IjogJytKU09OLnN0cmluZ2lmeShjWzFdKSsiIH1gLiIpXTt2YXIgaD1bXTtyZXR1cm4ic3ltYm9sIj09PXQubGF5ZXJUeXBlJiYoInRleHQtZmllbGQiPT09byYmbiYmIW4uZ2x5cGhzJiZoLnB1c2gobmV3IE8ocixhLCd1c2Ugb2YgInRleHQtZmllbGQiIHJlcXVpcmVzIGEgc3R5bGUgImdseXBocyIgcHJvcGVydHknKSksInRleHQtZm9udCI9PT1vJiZmZShGKGEpKSYmImlkZW50aXR5Ij09PUIoYS50eXBlKSYmaC5wdXNoKG5ldyBPKHIsYSwnInRleHQtZm9udCIgZG9lcyBub3Qgc3VwcG9ydCBpZGVudGl0eSBmdW5jdGlvbnMnKSkpLGguY29uY2F0KEtlKHtrZXk6dC5rZXksdmFsdWU6YSx2YWx1ZVNwZWM6dSxzdHlsZTpuLHN0eWxlU3BlYzppLGV4cHJlc3Npb25Db250ZXh0OiJwcm9wZXJ0eSIscHJvcGVydHlLZXk6b30pKX1mdW5jdGlvbiBHZSh0KXtyZXR1cm4gSGUodCwicGFpbnQiKX1mdW5jdGlvbiBXZSh0KXtyZXR1cm4gSGUodCwibGF5b3V0Iil9ZnVuY3Rpb24gWWUodCl7dmFyIGU9W10scj10LnZhbHVlLG49dC5rZXksaT10LnN0eWxlLGE9dC5zdHlsZVNwZWM7ci50eXBlfHxyLnJlZnx8ZS5wdXNoKG5ldyBPKG4sciwnZWl0aGVyICJ0eXBlIiBvciAicmVmIiBpcyByZXF1aXJlZCcpKTt2YXIgbyxzPUIoci50eXBlKSxsPUIoci5yZWYpO2lmKHIuaWQpZm9yKHZhciBjPUIoci5pZCksdT0wO3U8dC5hcnJheUluZGV4O3UrKyl7dmFyIGg9aS5sYXllcnNbdV07QihoLmlkKT09PWMmJmUucHVzaChuZXcgTyhuLHIuaWQsJ2R1cGxpY2F0ZSBsYXllciBpZCAiJytyLmlkKyciLCBwcmV2aW91c2x5IHVzZWQgYXQgbGluZSAnK2guaWQuX19saW5lX18pKX1pZigicmVmImluIHIpWyJ0eXBlIiwic291cmNlIiwic291cmNlLWxheWVyIiwiZmlsdGVyIiwibGF5b3V0Il0uZm9yRWFjaChmdW5jdGlvbih0KXt0IGluIHImJmUucHVzaChuZXcgTyhuLHJbdF0sJyInK3QrJyIgaXMgcHJvaGliaXRlZCBmb3IgcmVmIGxheWVycycpKX0pLGkubGF5ZXJzLmZvckVhY2goZnVuY3Rpb24odCl7Qih0LmlkKT09PWwmJihvPXQpfSksbz9vLnJlZj9lLnB1c2gobmV3IE8obixyLnJlZiwicmVmIGNhbm5vdCByZWZlcmVuY2UgYW5vdGhlciByZWYgbGF5ZXIiKSk6cz1CKG8udHlwZSk6ZS5wdXNoKG5ldyBPKG4sci5yZWYsJ3JlZiBsYXllciAiJytsKyciIG5vdCBmb3VuZCcpKTtlbHNlIGlmKCJiYWNrZ3JvdW5kIiE9PXMpaWYoci5zb3VyY2Upe3ZhciBmPWkuc291cmNlcyYmaS5zb3VyY2VzW3Iuc291cmNlXSxwPWYmJkIoZi50eXBlKTtmPyJ2ZWN0b3IiPT09cCYmInJhc3RlciI9PT1zP2UucHVzaChuZXcgTyhuLHIuc291cmNlLCdsYXllciAiJytyLmlkKyciIHJlcXVpcmVzIGEgcmFzdGVyIHNvdXJjZScpKToicmFzdGVyIj09PXAmJiJyYXN0ZXIiIT09cz9lLnB1c2gobmV3IE8obixyLnNvdXJjZSwnbGF5ZXIgIicrci5pZCsnIiByZXF1aXJlcyBhIHZlY3RvciBzb3VyY2UnKSk6InZlY3RvciIhPT1wfHxyWyJzb3VyY2UtbGF5ZXIiXT8icmFzdGVyLWRlbSI9PT1wJiYiaGlsbHNoYWRlIiE9PXM/ZS5wdXNoKG5ldyBPKG4sci5zb3VyY2UsInJhc3Rlci1kZW0gc291cmNlIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBsYXllciB0eXBlICdoaWxsc2hhZGUnLiIpKToibGluZSIhPT1zfHwhci5wYWludHx8IXIucGFpbnRbImxpbmUtZ3JhZGllbnQiXXx8Imdlb2pzb24iPT09cCYmZi5saW5lTWV0cmljc3x8ZS5wdXNoKG5ldyBPKG4sciwnbGF5ZXIgIicrci5pZCsnIiBzcGVjaWZpZXMgYSBsaW5lLWdyYWRpZW50LCB3aGljaCByZXF1aXJlcyBhIEdlb0pTT04gc291cmNlIHdpdGggYGxpbmVNZXRyaWNzYCBlbmFibGVkLicpKTplLnB1c2gobmV3IE8obixyLCdsYXllciAiJytyLmlkKyciIG11c3Qgc3BlY2lmeSBhICJzb3VyY2UtbGF5ZXIiJykpOmUucHVzaChuZXcgTyhuLHIuc291cmNlLCdzb3VyY2UgIicrci5zb3VyY2UrJyIgbm90IGZvdW5kJykpfWVsc2UgZS5wdXNoKG5ldyBPKG4sciwnbWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0eSAic291cmNlIicpKTtyZXR1cm4gZT1lLmNvbmNhdChFZSh7a2V5Om4sdmFsdWU6cix2YWx1ZVNwZWM6YS5sYXllcixzdHlsZTp0LnN0eWxlLHN0eWxlU3BlYzp0LnN0eWxlU3BlYyxvYmplY3RFbGVtZW50VmFsaWRhdG9yczp7IioiOmZ1bmN0aW9uKCl7cmV0dXJuW119LHR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4gS2Uoe2tleTpuKyIudHlwZSIsdmFsdWU6ci50eXBlLHZhbHVlU3BlYzphLmxheWVyLnR5cGUsc3R5bGU6dC5zdHlsZSxzdHlsZVNwZWM6dC5zdHlsZVNwZWMsb2JqZWN0OnIsb2JqZWN0S2V5OiJ0eXBlIn0pfSxmaWx0ZXI6cWUsbGF5b3V0OmZ1bmN0aW9uKHQpe3JldHVybiBFZSh7bGF5ZXI6cixrZXk6dC5rZXksdmFsdWU6dC52YWx1ZSxzdHlsZTp0LnN0eWxlLHN0eWxlU3BlYzp0LnN0eWxlU3BlYyxvYmplY3RFbGVtZW50VmFsaWRhdG9yczp7IioiOmZ1bmN0aW9uKHQpe3JldHVybiBXZShSKHtsYXllclR5cGU6c30sdCkpfX19KX0scGFpbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIEVlKHtsYXllcjpyLGtleTp0LmtleSx2YWx1ZTp0LnZhbHVlLHN0eWxlOnQuc3R5bGUsc3R5bGVTcGVjOnQuc3R5bGVTcGVjLG9iamVjdEVsZW1lbnRWYWxpZGF0b3JzOnsiKiI6ZnVuY3Rpb24odCl7cmV0dXJuIEdlKFIoe2xheWVyVHlwZTpzfSx0KSl9fX0pfX19KSl9ZnVuY3Rpb24gWGUodCl7dmFyIGU9dC52YWx1ZSxyPXQua2V5LG49dC5zdHlsZVNwZWMsaT10LnN0eWxlO2lmKCFlLnR5cGUpcmV0dXJuW25ldyBPKHIsZSwnInR5cGUiIGlzIHJlcXVpcmVkJyldO3ZhciBhPUIoZS50eXBlKSxvPVtdO3N3aXRjaChhKXtjYXNlInZlY3RvciI6Y2FzZSJyYXN0ZXIiOmNhc2UicmFzdGVyLWRlbSI6aWYobz1vLmNvbmNhdChFZSh7a2V5OnIsdmFsdWU6ZSx2YWx1ZVNwZWM6blsic291cmNlXyIrYS5yZXBsYWNlKCItIiwiXyIpXSxzdHlsZTp0LnN0eWxlLHN0eWxlU3BlYzpufSkpLCJ1cmwiaW4gZSlmb3IodmFyIHMgaW4gZSlbInR5cGUiLCJ1cmwiLCJ0aWxlU2l6ZSJdLmluZGV4T2Yocyk8MCYmby5wdXNoKG5ldyBPKHIrIi4iK3MsZVtzXSwnYSBzb3VyY2Ugd2l0aCBhICJ1cmwiIHByb3BlcnR5IG1heSBub3QgaW5jbHVkZSBhICInK3MrJyIgcHJvcGVydHknKSk7cmV0dXJuIG87Y2FzZSJnZW9qc29uIjpyZXR1cm4gRWUoe2tleTpyLHZhbHVlOmUsdmFsdWVTcGVjOm4uc291cmNlX2dlb2pzb24sc3R5bGU6aSxzdHlsZVNwZWM6bn0pO2Nhc2UidmlkZW8iOnJldHVybiBFZSh7a2V5OnIsdmFsdWU6ZSx2YWx1ZVNwZWM6bi5zb3VyY2VfdmlkZW8sc3R5bGU6aSxzdHlsZVNwZWM6bn0pO2Nhc2UiaW1hZ2UiOnJldHVybiBFZSh7a2V5OnIsdmFsdWU6ZSx2YWx1ZVNwZWM6bi5zb3VyY2VfaW1hZ2Usc3R5bGU6aSxzdHlsZVNwZWM6bn0pO2Nhc2UiY2FudmFzIjpyZXR1cm4gby5wdXNoKG5ldyBPKHIsbnVsbCwiUGxlYXNlIHVzZSBydW50aW1lIEFQSXMgdG8gYWRkIGNhbnZhcyBzb3VyY2VzLCByYXRoZXIgdGhhbiBpbmNsdWRpbmcgdGhlbSBpbiBzdHlsZXNoZWV0cy4iLCJzb3VyY2UuY2FudmFzIikpLG87ZGVmYXVsdDpyZXR1cm4gSWUoe2tleTpyKyIudHlwZSIsdmFsdWU6ZS50eXBlLHZhbHVlU3BlYzp7dmFsdWVzOlsidmVjdG9yIiwicmFzdGVyIiwicmFzdGVyLWRlbSIsImdlb2pzb24iLCJ2aWRlbyIsImltYWdlIl19LHN0eWxlOmksc3R5bGVTcGVjOm59KX19ZnVuY3Rpb24gWmUodCl7dmFyIGU9dC52YWx1ZSxyPXQuc3R5bGVTcGVjLG49ci5saWdodCxpPXQuc3R5bGUsYT1bXSxvPWhlKGUpO2lmKHZvaWQgMD09PWUpcmV0dXJuIGE7aWYoIm9iamVjdCIhPT1vKXJldHVybiBhLmNvbmNhdChbbmV3IE8oImxpZ2h0IixlLCJvYmplY3QgZXhwZWN0ZWQsICIrbysiIGZvdW5kIildKTtmb3IodmFyIHMgaW4gZSl7dmFyIGw9cy5tYXRjaCgvXiguKiktdHJhbnNpdGlvbiQvKTthPWwmJm5bbFsxXV0mJm5bbFsxXV0udHJhbnNpdGlvbj9hLmNvbmNhdChLZSh7a2V5OnMsdmFsdWU6ZVtzXSx2YWx1ZVNwZWM6ci50cmFuc2l0aW9uLHN0eWxlOmksc3R5bGVTcGVjOnJ9KSk6bltzXT9hLmNvbmNhdChLZSh7a2V5OnMsdmFsdWU6ZVtzXSx2YWx1ZVNwZWM6bltzXSxzdHlsZTppLHN0eWxlU3BlYzpyfSkpOmEuY29uY2F0KFtuZXcgTyhzLGVbc10sJ3Vua25vd24gcHJvcGVydHkgIicrcysnIicpXSl9cmV0dXJuIGF9ZnVuY3Rpb24gJGUodCl7dmFyIGU9dC52YWx1ZSxyPXQua2V5LG49aGUoZSk7cmV0dXJuInN0cmluZyIhPT1uP1tuZXcgTyhyLGUsInN0cmluZyBleHBlY3RlZCwgIituKyIgZm91bmQiKV06W119dmFyIEplPXsiKiI6ZnVuY3Rpb24oKXtyZXR1cm5bXX0sYXJyYXk6Q2UsYm9vbGVhbjpmdW5jdGlvbih0KXt2YXIgZT10LnZhbHVlLHI9dC5rZXksbj1oZShlKTtyZXR1cm4iYm9vbGVhbiIhPT1uP1tuZXcgTyhyLGUsImJvb2xlYW4gZXhwZWN0ZWQsICIrbisiIGZvdW5kIildOltdfSxudW1iZXI6TGUsY29sb3I6ZnVuY3Rpb24odCl7dmFyIGU9dC5rZXkscj10LnZhbHVlLG49aGUocik7cmV0dXJuInN0cmluZyIhPT1uP1tuZXcgTyhlLHIsImNvbG9yIGV4cGVjdGVkLCAiK24rIiBmb3VuZCIpXTpudWxsPT09UShyKT9bbmV3IE8oZSxyLCdjb2xvciBleHBlY3RlZCwgIicrcisnIiBmb3VuZCcpXTpbXX0sY29uc3RhbnRzOkQsZW51bTpJZSxmaWx0ZXI6cWUsZnVuY3Rpb246emUsbGF5ZXI6WWUsb2JqZWN0OkVlLHNvdXJjZTpYZSxsaWdodDpaZSxzdHJpbmc6JGV9O2Z1bmN0aW9uIEtlKHQpe3ZhciBlPXQudmFsdWUscj10LnZhbHVlU3BlYyxuPXQuc3R5bGVTcGVjO3JldHVybiByLmZ1bmN0aW9uJiZmZShCKGUpKT96ZSh0KTpyLmZ1bmN0aW9uJiZfZShGKGUpKT9QZSh0KTpyLnR5cGUmJkplW3IudHlwZV0/SmVbci50eXBlXSh0KTpFZShSKHt9LHQse3ZhbHVlU3BlYzpyLnR5cGU/bltyLnR5cGVdOnJ9KSl9ZnVuY3Rpb24gUWUodCl7dmFyIGU9dC52YWx1ZSxyPXQua2V5LG49JGUodCk7cmV0dXJuIG4ubGVuZ3RoP246KC0xPT09ZS5pbmRleE9mKCJ7Zm9udHN0YWNrfSIpJiZuLnB1c2gobmV3IE8ocixlLCciZ2x5cGhzIiB1cmwgbXVzdCBpbmNsdWRlIGEgIntmb250c3RhY2t9IiB0b2tlbicpKSwtMT09PWUuaW5kZXhPZigie3JhbmdlfSIpJiZuLnB1c2gobmV3IE8ocixlLCciZ2x5cGhzIiB1cmwgbXVzdCBpbmNsdWRlIGEgIntyYW5nZX0iIHRva2VuJykpLG4pfWZ1bmN0aW9uIHRyKHQsZSl7ZT1lfHxJO3ZhciByPVtdO3JldHVybiByPXIuY29uY2F0KEtlKHtrZXk6IiIsdmFsdWU6dCx2YWx1ZVNwZWM6ZS4kcm9vdCxzdHlsZVNwZWM6ZSxzdHlsZTp0LG9iamVjdEVsZW1lbnRWYWxpZGF0b3JzOntnbHlwaHM6UWUsIioiOmZ1bmN0aW9uKCl7cmV0dXJuW119fX0pKSx0LmNvbnN0YW50cyYmKHI9ci5jb25jYXQoRCh7a2V5OiJjb25zdGFudHMiLHZhbHVlOnQuY29uc3RhbnRzLHN0eWxlOnQsc3R5bGVTcGVjOmV9KSkpLGVyKHIpfWZ1bmN0aW9uIGVyKHQpe3JldHVybltdLmNvbmNhdCh0KS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubGluZS1lLmxpbmV9KX1mdW5jdGlvbiBycih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZXIodC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX10ci5zb3VyY2U9cnIoWGUpLHRyLmxpZ2h0PXJyKFplKSx0ci5sYXllcj1ycihZZSksdHIuZmlsdGVyPXJyKHFlKSx0ci5wYWludFByb3BlcnR5PXJyKEdlKSx0ci5sYXlvdXRQcm9wZXJ0eT1ycihXZSk7dmFyIG5yPXRyLGlyPXRyLmxpZ2h0LGFyPXRyLnBhaW50UHJvcGVydHksb3I9dHIubGF5b3V0UHJvcGVydHk7ZnVuY3Rpb24gc3IodCxlKXt2YXIgcj0hMTtpZihlJiZlLmxlbmd0aClmb3IodmFyIG49MCxpPWU7bjxpLmxlbmd0aDtuKz0xKXt2YXIgYT1pW25dO3QuZmlyZShuZXcgeihuZXcgRXJyb3IoYS5tZXNzYWdlKSkpLHI9ITB9cmV0dXJuIHJ9dmFyIGxyPXVyLGNyPTM7ZnVuY3Rpb24gdXIodCxlLHIpe3ZhciBuPXRoaXMuY2VsbHM9W107aWYodCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKXt0aGlzLmFycmF5QnVmZmVyPXQ7dmFyIGk9bmV3IEludDMyQXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7dD1pWzBdLGU9aVsxXSxyPWlbMl0sdGhpcy5kPWUrMipyO2Zvcih2YXIgYT0wO2E8dGhpcy5kKnRoaXMuZDthKyspe3ZhciBvPWlbY3IrYV0scz1pW2NyK2ErMV07bi5wdXNoKG89PT1zP251bGw6aS5zdWJhcnJheShvLHMpKX12YXIgbD1pW2NyK24ubGVuZ3RoXSxjPWlbY3Irbi5sZW5ndGgrMV07dGhpcy5rZXlzPWkuc3ViYXJyYXkobCxjKSx0aGlzLmJib3hlcz1pLnN1YmFycmF5KGMpLHRoaXMuaW5zZXJ0PXRoaXMuX2luc2VydFJlYWRvbmx5fWVsc2V7dGhpcy5kPWUrMipyO2Zvcih2YXIgdT0wO3U8dGhpcy5kKnRoaXMuZDt1Kyspbi5wdXNoKFtdKTt0aGlzLmtleXM9W10sdGhpcy5iYm94ZXM9W119dGhpcy5uPWUsdGhpcy5leHRlbnQ9dCx0aGlzLnBhZGRpbmc9cix0aGlzLnNjYWxlPWUvdCx0aGlzLnVpZD0wO3ZhciBoPXIvZSp0O3RoaXMubWluPS1oLHRoaXMubWF4PXQraH11ci5wcm90b3R5cGUuaW5zZXJ0PWZ1bmN0aW9uKHQsZSxyLG4saSl7dGhpcy5fZm9yRWFjaENlbGwoZSxyLG4saSx0aGlzLl9pbnNlcnRDZWxsLHRoaXMudWlkKyspLHRoaXMua2V5cy5wdXNoKHQpLHRoaXMuYmJveGVzLnB1c2goZSksdGhpcy5iYm94ZXMucHVzaChyKSx0aGlzLmJib3hlcy5wdXNoKG4pLHRoaXMuYmJveGVzLnB1c2goaSl9LHVyLnByb3RvdHlwZS5faW5zZXJ0UmVhZG9ubHk9ZnVuY3Rpb24oKXt0aHJvdyJDYW5ub3QgaW5zZXJ0IGludG8gYSBHcmlkSW5kZXggY3JlYXRlZCBmcm9tIGFuIEFycmF5QnVmZmVyLiJ9LHVyLnByb3RvdHlwZS5faW5zZXJ0Q2VsbD1mdW5jdGlvbih0LGUscixuLGksYSl7dGhpcy5jZWxsc1tpXS5wdXNoKGEpfSx1ci5wcm90b3R5cGUucXVlcnk9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dGhpcy5taW4sYT10aGlzLm1heDtpZih0PD1pJiZlPD1pJiZhPD1yJiZhPD1uKXJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLmtleXMpO3ZhciBvPVtdO3JldHVybiB0aGlzLl9mb3JFYWNoQ2VsbCh0LGUscixuLHRoaXMuX3F1ZXJ5Q2VsbCxvLHt9KSxvfSx1ci5wcm90b3R5cGUuX3F1ZXJ5Q2VsbD1mdW5jdGlvbih0LGUscixuLGksYSxvKXt2YXIgcz10aGlzLmNlbGxzW2ldO2lmKG51bGwhPT1zKWZvcih2YXIgbD10aGlzLmtleXMsYz10aGlzLmJib3hlcyx1PTA7dTxzLmxlbmd0aDt1Kyspe3ZhciBoPXNbdV07aWYodm9pZCAwPT09b1toXSl7dmFyIGY9NCpoO3Q8PWNbZisyXSYmZTw9Y1tmKzNdJiZyPj1jW2YrMF0mJm4+PWNbZisxXT8ob1toXT0hMCxhLnB1c2gobFtoXSkpOm9baF09ITF9fX0sdXIucHJvdG90eXBlLl9mb3JFYWNoQ2VsbD1mdW5jdGlvbih0LGUscixuLGksYSxvKXtmb3IodmFyIHM9dGhpcy5fY29udmVydFRvQ2VsbENvb3JkKHQpLGw9dGhpcy5fY29udmVydFRvQ2VsbENvb3JkKGUpLGM9dGhpcy5fY29udmVydFRvQ2VsbENvb3JkKHIpLHU9dGhpcy5fY29udmVydFRvQ2VsbENvb3JkKG4pLGg9cztoPD1jO2grKylmb3IodmFyIGY9bDtmPD11O2YrKyl7dmFyIHA9dGhpcy5kKmYraDtpZihpLmNhbGwodGhpcyx0LGUscixuLHAsYSxvKSlyZXR1cm59fSx1ci5wcm90b3R5cGUuX2NvbnZlcnRUb0NlbGxDb29yZD1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1pbih0aGlzLmQtMSxNYXRoLmZsb29yKHQqdGhpcy5zY2FsZSkrdGhpcy5wYWRkaW5nKSl9LHVyLnByb3RvdHlwZS50b0FycmF5QnVmZmVyPWZ1bmN0aW9uKCl7aWYodGhpcy5hcnJheUJ1ZmZlcilyZXR1cm4gdGhpcy5hcnJheUJ1ZmZlcjtmb3IodmFyIHQ9dGhpcy5jZWxscyxlPWNyK3RoaXMuY2VsbHMubGVuZ3RoKzErMSxyPTAsbj0wO248dGhpcy5jZWxscy5sZW5ndGg7bisrKXIrPXRoaXMuY2VsbHNbbl0ubGVuZ3RoO3ZhciBpPW5ldyBJbnQzMkFycmF5KGUrcit0aGlzLmtleXMubGVuZ3RoK3RoaXMuYmJveGVzLmxlbmd0aCk7aVswXT10aGlzLmV4dGVudCxpWzFdPXRoaXMubixpWzJdPXRoaXMucGFkZGluZztmb3IodmFyIGE9ZSxvPTA7bzx0Lmxlbmd0aDtvKyspe3ZhciBzPXRbb107aVtjcitvXT1hLGkuc2V0KHMsYSksYSs9cy5sZW5ndGh9cmV0dXJuIGlbY3IrdC5sZW5ndGhdPWEsaS5zZXQodGhpcy5rZXlzLGEpLGErPXRoaXMua2V5cy5sZW5ndGgsaVtjcit0Lmxlbmd0aCsxXT1hLGkuc2V0KHRoaXMuYmJveGVzLGEpLGErPXRoaXMuYmJveGVzLmxlbmd0aCxpLmJ1ZmZlcn07dmFyIGhyPXNlbGYuSW1hZ2VEYXRhLGZyPXt9O2Z1bmN0aW9uIHByKHQsZSxyKXt2b2lkIDA9PT1yJiYocj17fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9jbGFzc1JlZ2lzdHJ5S2V5Iix7dmFsdWU6dCx3cml0ZWFibGU6ITF9KSxmclt0XT17a2xhc3M6ZSxvbWl0OnIub21pdHx8W10sc2hhbGxvdzpyLnNoYWxsb3d8fFtdfX1mb3IodmFyIGRyIGluIHByKCJPYmplY3QiLE9iamVjdCksbHIuc2VyaWFsaXplPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC50b0FycmF5QnVmZmVyKCk7cmV0dXJuIGUmJmUucHVzaChyKSxyfSxsci5kZXNlcmlhbGl6ZT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGxyKHQpfSxwcigiR3JpZCIsbHIpLHByKCJDb2xvciIsdHQpLHByKCJFcnJvciIsRXJyb3IpLHByKCJTdHlsZVByb3BlcnR5RnVuY3Rpb24iLFRlKSxwcigiU3R5bGVFeHByZXNzaW9uIixiZSx7b21pdDpbIl9ldmFsdWF0b3IiXX0pLHByKCJab29tRGVwZW5kZW50RXhwcmVzc2lvbiIsTWUpLHByKCJab29tQ29uc3RhbnRFeHByZXNzaW9uIixrZSkscHIoIkNvbXBvdW5kRXhwcmVzc2lvbiIsZ3Qse29taXQ6WyJfZXZhbHVhdGUiXX0pLFJ0KVJ0W2RyXS5fY2xhc3NSZWdpc3RyeUtleXx8cHIoIkV4cHJlc3Npb25fIitkcixSdFtkcl0pO2Z1bmN0aW9uIGdyKHQsZSl7aWYobnVsbD09dHx8ImJvb2xlYW4iPT10eXBlb2YgdHx8Im51bWJlciI9PXR5cGVvZiB0fHwic3RyaW5nIj09dHlwZW9mIHR8fHQgaW5zdGFuY2VvZiBCb29sZWFufHx0IGluc3RhbmNlb2YgTnVtYmVyfHx0IGluc3RhbmNlb2YgU3RyaW5nfHx0IGluc3RhbmNlb2YgRGF0ZXx8dCBpbnN0YW5jZW9mIFJlZ0V4cClyZXR1cm4gdDtpZih0IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpcmV0dXJuIGUmJmUucHVzaCh0KSx0O2lmKEFycmF5QnVmZmVyLmlzVmlldyh0KSl7dmFyIHI9dDtyZXR1cm4gZSYmZS5wdXNoKHIuYnVmZmVyKSxyfWlmKHQgaW5zdGFuY2VvZiBocilyZXR1cm4gZSYmZS5wdXNoKHQuZGF0YS5idWZmZXIpLHQ7aWYoQXJyYXkuaXNBcnJheSh0KSl7Zm9yKHZhciBuPVtdLGk9MCxhPXQ7aTxhLmxlbmd0aDtpKz0xKXt2YXIgbz1hW2ldO24ucHVzaChncihvLGUpKX1yZXR1cm4gbn1pZigib2JqZWN0Ij09dHlwZW9mIHQpe3ZhciBzPXQuY29uc3RydWN0b3IsbD1zLl9jbGFzc1JlZ2lzdHJ5S2V5O2lmKCFsKXRocm93IG5ldyBFcnJvcigiY2FuJ3Qgc2VyaWFsaXplIG9iamVjdCBvZiB1bnJlZ2lzdGVyZWQgY2xhc3MiKTt2YXIgYz17fTtpZihzLnNlcmlhbGl6ZSljLl9zZXJpYWxpemVkPXMuc2VyaWFsaXplKHQsZSk7ZWxzZXtmb3IodmFyIHUgaW4gdClpZih0Lmhhc093blByb3BlcnR5KHUpJiYhKGZyW2xdLm9taXQuaW5kZXhPZih1KT49MCkpe3ZhciBoPXRbdV07Y1t1XT1mcltsXS5zaGFsbG93LmluZGV4T2YodSk+PTA/aDpncihoLGUpfXQgaW5zdGFuY2VvZiBFcnJvciYmKGMubWVzc2FnZT10Lm1lc3NhZ2UpfXJldHVybntuYW1lOmwscHJvcGVydGllczpjfX10aHJvdyBuZXcgRXJyb3IoImNhbid0IHNlcmlhbGl6ZSBvYmplY3Qgb2YgdHlwZSAiK3R5cGVvZiB0KX1mdW5jdGlvbiBtcih0KXtpZihudWxsPT10fHwiYm9vbGVhbiI9PXR5cGVvZiB0fHwibnVtYmVyIj09dHlwZW9mIHR8fCJzdHJpbmciPT10eXBlb2YgdHx8dCBpbnN0YW5jZW9mIEJvb2xlYW58fHQgaW5zdGFuY2VvZiBOdW1iZXJ8fHQgaW5zdGFuY2VvZiBTdHJpbmd8fHQgaW5zdGFuY2VvZiBEYXRlfHx0IGluc3RhbmNlb2YgUmVnRXhwfHx0IGluc3RhbmNlb2YgQXJyYXlCdWZmZXJ8fEFycmF5QnVmZmVyLmlzVmlldyh0KXx8dCBpbnN0YW5jZW9mIGhyKXJldHVybiB0O2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIHQubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBtcih0KX0pO2lmKCJvYmplY3QiPT10eXBlb2YgdCl7dmFyIGU9dCxyPWUubmFtZSxuPWUucHJvcGVydGllcztpZighcil0aHJvdyBuZXcgRXJyb3IoImNhbid0IGRlc2VyaWFsaXplIG9iamVjdCBvZiBhbm9ueW1vdXMgY2xhc3MiKTt2YXIgaT1mcltyXS5rbGFzcztpZighaSl0aHJvdyBuZXcgRXJyb3IoImNhbid0IGRlc2VyaWFsaXplIHVucmVnaXN0ZXJlZCBjbGFzcyAiK3IpO2lmKGkuZGVzZXJpYWxpemUpcmV0dXJuIGkuZGVzZXJpYWxpemUobi5fc2VyaWFsaXplZCk7Zm9yKHZhciBhPU9iamVjdC5jcmVhdGUoaS5wcm90b3R5cGUpLG89MCxzPU9iamVjdC5rZXlzKG4pO288cy5sZW5ndGg7bys9MSl7dmFyIGw9c1tvXTthW2xdPWZyW3JdLnNoYWxsb3cuaW5kZXhPZihsKT49MD9uW2xdOm1yKG5bbF0pfXJldHVybiBhfXRocm93IG5ldyBFcnJvcigiY2FuJ3QgZGVzZXJpYWxpemUgb2JqZWN0IG9mIHR5cGUgIit0eXBlb2YgdCl9dmFyIHZyPWZ1bmN0aW9uKCl7dGhpcy5maXJzdD0hMH07dnIucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih0LGUpe3ZhciByPU1hdGguZmxvb3IodCk7cmV0dXJuIHRoaXMuZmlyc3Q/KHRoaXMuZmlyc3Q9ITEsdGhpcy5sYXN0SW50ZWdlclpvb209cix0aGlzLmxhc3RJbnRlZ2VyWm9vbVRpbWU9MCx0aGlzLmxhc3Rab29tPXQsdGhpcy5sYXN0Rmxvb3Jab29tPXIsITApOih0aGlzLmxhc3RGbG9vclpvb20+cj8odGhpcy5sYXN0SW50ZWdlclpvb209cisxLHRoaXMubGFzdEludGVnZXJab29tVGltZT1lKTp0aGlzLmxhc3RGbG9vclpvb208ciYmKHRoaXMubGFzdEludGVnZXJab29tPXIsdGhpcy5sYXN0SW50ZWdlclpvb21UaW1lPWUpLHQhPT10aGlzLmxhc3Rab29tJiYodGhpcy5sYXN0Wm9vbT10LHRoaXMubGFzdEZsb29yWm9vbT1yLCEwKSl9O3ZhciB5cj17IkxhdGluLTEgU3VwcGxlbWVudCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTEyOCYmdDw9MjU1fSxBcmFiaWM6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTE1MzYmJnQ8PTE3OTF9LCJBcmFiaWMgU3VwcGxlbWVudCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTE4NzImJnQ8PTE5MTl9LCJBcmFiaWMgRXh0ZW5kZWQtQSI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTIyMDgmJnQ8PTIzMDN9LCJIYW5ndWwgSmFtbyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTQzNTImJnQ8PTQ2MDd9LCJVbmlmaWVkIENhbmFkaWFuIEFib3JpZ2luYWwgU3lsbGFiaWNzIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49NTEyMCYmdDw9NTc1OX0sS2htZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTYwMTYmJnQ8PTYxNDN9LCJVbmlmaWVkIENhbmFkaWFuIEFib3JpZ2luYWwgU3lsbGFiaWNzIEV4dGVuZGVkIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49NjMyMCYmdDw9NjM5OX0sIkdlbmVyYWwgUHVuY3R1YXRpb24iOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj04MTkyJiZ0PD04MzAzfSwiTGV0dGVybGlrZSBTeW1ib2xzIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49ODQ0OCYmdDw9ODUyN30sIk51bWJlciBGb3JtcyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTg1MjgmJnQ8PTg1OTF9LCJNaXNjZWxsYW5lb3VzIFRlY2huaWNhbCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTg5NjAmJnQ8PTkyMTV9LCJDb250cm9sIFBpY3R1cmVzIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49OTIxNiYmdDw9OTI3OX0sIk9wdGljYWwgQ2hhcmFjdGVyIFJlY29nbml0aW9uIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49OTI4MCYmdDw9OTMxMX0sIkVuY2xvc2VkIEFscGhhbnVtZXJpY3MiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj05MzEyJiZ0PD05NDcxfSwiR2VvbWV0cmljIFNoYXBlcyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTk2MzImJnQ8PTk3Mjd9LCJNaXNjZWxsYW5lb3VzIFN5bWJvbHMiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj05NzI4JiZ0PD05OTgzfSwiTWlzY2VsbGFuZW91cyBTeW1ib2xzIGFuZCBBcnJvd3MiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMTAwOCYmdDw9MTEyNjN9LCJDSksgUmFkaWNhbHMgU3VwcGxlbWVudCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTExOTA0JiZ0PD0xMjAzMX0sIkthbmd4aSBSYWRpY2FscyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTEyMDMyJiZ0PD0xMjI1NX0sIklkZW9ncmFwaGljIERlc2NyaXB0aW9uIENoYXJhY3RlcnMiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMjI3MiYmdDw9MTIyODd9LCJDSksgU3ltYm9scyBhbmQgUHVuY3R1YXRpb24iOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMjI4OCYmdDw9MTIzNTF9LEhpcmFnYW5hOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMjM1MiYmdDw9MTI0NDd9LEthdGFrYW5hOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMjQ0OCYmdDw9MTI1NDN9LEJvcG9tb2ZvOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMjU0NCYmdDw9MTI1OTF9LCJIYW5ndWwgQ29tcGF0aWJpbGl0eSBKYW1vIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTI1OTImJnQ8PTEyNjg3fSxLYW5idW46ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTEyNjg4JiZ0PD0xMjcwM30sIkJvcG9tb2ZvIEV4dGVuZGVkIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTI3MDQmJnQ8PTEyNzM1fSwiQ0pLIFN0cm9rZXMiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMjczNiYmdDw9MTI3ODN9LCJLYXRha2FuYSBQaG9uZXRpYyBFeHRlbnNpb25zIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTI3ODQmJnQ8PTEyNzk5fSwiRW5jbG9zZWQgQ0pLIExldHRlcnMgYW5kIE1vbnRocyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTEyODAwJiZ0PD0xMzA1NX0sIkNKSyBDb21wYXRpYmlsaXR5IjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTMwNTYmJnQ8PTEzMzExfSwiQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyBFeHRlbnNpb24gQSI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTEzMzEyJiZ0PD0xOTkwM30sIllpamluZyBIZXhhZ3JhbSBTeW1ib2xzIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTk5MDQmJnQ8PTE5OTY3fSwiQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTE5OTY4JiZ0PD00MDk1OX0sIllpIFN5bGxhYmxlcyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTQwOTYwJiZ0PD00MjEyN30sIllpIFJhZGljYWxzIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49NDIxMjgmJnQ8PTQyMTkxfSwiSGFuZ3VsIEphbW8gRXh0ZW5kZWQtQSI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTQzMzYwJiZ0PD00MzM5MX0sIkhhbmd1bCBTeWxsYWJsZXMiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj00NDAzMiYmdDw9NTUyMTV9LCJIYW5ndWwgSmFtbyBFeHRlbmRlZC1CIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49NTUyMTYmJnQ8PTU1Mjk1fSwiUHJpdmF0ZSBVc2UgQXJlYSI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTU3MzQ0JiZ0PD02Mzc0M30sIkNKSyBDb21wYXRpYmlsaXR5IElkZW9ncmFwaHMiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj02Mzc0NCYmdDw9NjQyNTV9LCJBcmFiaWMgUHJlc2VudGF0aW9uIEZvcm1zLUEiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj02NDMzNiYmdDw9NjUwMjN9LCJWZXJ0aWNhbCBGb3JtcyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTY1MDQwJiZ0PD02NTA1NX0sIkNKSyBDb21wYXRpYmlsaXR5IEZvcm1zIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49NjUwNzImJnQ8PTY1MTAzfSwiU21hbGwgRm9ybSBWYXJpYW50cyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTY1MTA0JiZ0PD02NTEzNX0sIkFyYWJpYyBQcmVzZW50YXRpb24gRm9ybXMtQiI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTY1MTM2JiZ0PD02NTI3OX0sIkhhbGZ3aWR0aCBhbmQgRnVsbHdpZHRoIEZvcm1zIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49NjUyODAmJnQ8PTY1NTE5fX07ZnVuY3Rpb24geHIodCl7Zm9yKHZhciBlPTAscj10O2U8ci5sZW5ndGg7ZSs9MSlpZihfcihyW2VdLmNoYXJDb2RlQXQoMCkpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIGJyKHQpe3JldHVybiEoeXIuQXJhYmljKHQpfHx5clsiQXJhYmljIFN1cHBsZW1lbnQiXSh0KXx8eXJbIkFyYWJpYyBFeHRlbmRlZC1BIl0odCl8fHlyWyJBcmFiaWMgUHJlc2VudGF0aW9uIEZvcm1zLUEiXSh0KXx8eXJbIkFyYWJpYyBQcmVzZW50YXRpb24gRm9ybXMtQiJdKHQpKX1mdW5jdGlvbiBfcih0KXtyZXR1cm4hISg3NDY9PT10fHw3NDc9PT10fHwhKHQ8NDM1MikmJih5clsiQm9wb21vZm8gRXh0ZW5kZWQiXSh0KXx8eXIuQm9wb21vZm8odCl8fHlyWyJDSksgQ29tcGF0aWJpbGl0eSBGb3JtcyJdKHQpJiYhKHQ+PTY1MDk3JiZ0PD02NTEwMyl8fHlyWyJDSksgQ29tcGF0aWJpbGl0eSBJZGVvZ3JhcGhzIl0odCl8fHlyWyJDSksgQ29tcGF0aWJpbGl0eSJdKHQpfHx5clsiQ0pLIFJhZGljYWxzIFN1cHBsZW1lbnQiXSh0KXx8eXJbIkNKSyBTdHJva2VzIl0odCl8fCEoIXlyWyJDSksgU3ltYm9scyBhbmQgUHVuY3R1YXRpb24iXSh0KXx8dD49MTIyOTYmJnQ8PTEyMzA1fHx0Pj0xMjMwOCYmdDw9MTIzMTl8fDEyMzM2PT09dCl8fHlyWyJDSksgVW5pZmllZCBJZGVvZ3JhcGhzIEV4dGVuc2lvbiBBIl0odCl8fHlyWyJDSksgVW5pZmllZCBJZGVvZ3JhcGhzIl0odCl8fHlyWyJFbmNsb3NlZCBDSksgTGV0dGVycyBhbmQgTW9udGhzIl0odCl8fHlyWyJIYW5ndWwgQ29tcGF0aWJpbGl0eSBKYW1vIl0odCl8fHlyWyJIYW5ndWwgSmFtbyBFeHRlbmRlZC1BIl0odCl8fHlyWyJIYW5ndWwgSmFtbyBFeHRlbmRlZC1CIl0odCl8fHlyWyJIYW5ndWwgSmFtbyJdKHQpfHx5clsiSGFuZ3VsIFN5bGxhYmxlcyJdKHQpfHx5ci5IaXJhZ2FuYSh0KXx8eXJbIklkZW9ncmFwaGljIERlc2NyaXB0aW9uIENoYXJhY3RlcnMiXSh0KXx8eXIuS2FuYnVuKHQpfHx5clsiS2FuZ3hpIFJhZGljYWxzIl0odCl8fHlyWyJLYXRha2FuYSBQaG9uZXRpYyBFeHRlbnNpb25zIl0odCl8fHlyLkthdGFrYW5hKHQpJiYxMjU0MCE9PXR8fCEoIXlyWyJIYWxmd2lkdGggYW5kIEZ1bGx3aWR0aCBGb3JtcyJdKHQpfHw2NTI4OD09PXR8fDY1Mjg5PT09dHx8NjUyOTM9PT10fHx0Pj02NTMwNiYmdDw9NjUzMTB8fDY1MzM5PT09dHx8NjUzNDE9PT10fHw2NTM0Mz09PXR8fHQ+PTY1MzcxJiZ0PD02NTUwM3x8NjU1MDc9PT10fHx0Pj02NTUxMiYmdDw9NjU1MTkpfHwhKCF5clsiU21hbGwgRm9ybSBWYXJpYW50cyJdKHQpfHx0Pj02NTExMiYmdDw9NjUxMTh8fHQ+PTY1MTIzJiZ0PD02NTEyNil8fHlyWyJVbmlmaWVkIENhbmFkaWFuIEFib3JpZ2luYWwgU3lsbGFiaWNzIl0odCl8fHlyWyJVbmlmaWVkIENhbmFkaWFuIEFib3JpZ2luYWwgU3lsbGFiaWNzIEV4dGVuZGVkIl0odCl8fHlyWyJWZXJ0aWNhbCBGb3JtcyJdKHQpfHx5clsiWWlqaW5nIEhleGFncmFtIFN5bWJvbHMiXSh0KXx8eXJbIllpIFN5bGxhYmxlcyJdKHQpfHx5clsiWWkgUmFkaWNhbHMiXSh0KSkpfWZ1bmN0aW9uIHdyKHQpe3JldHVybiEoX3IodCl8fGZ1bmN0aW9uKHQpe3JldHVybiEhKHlyWyJMYXRpbi0xIFN1cHBsZW1lbnQiXSh0KSYmKDE2Nz09PXR8fDE2OT09PXR8fDE3ND09PXR8fDE3Nz09PXR8fDE4OD09PXR8fDE4OT09PXR8fDE5MD09PXR8fDIxNT09PXR8fDI0Nz09PXQpfHx5clsiR2VuZXJhbCBQdW5jdHVhdGlvbiJdKHQpJiYoODIxND09PXR8fDgyMjQ9PT10fHw4MjI1PT09dHx8ODI0MD09PXR8fDgyNDE9PT10fHw4MjUxPT09dHx8ODI1Mj09PXR8fDgyNTg9PT10fHw4MjYzPT09dHx8ODI2ND09PXR8fDgyNjU9PT10fHw4MjczPT09dCl8fHlyWyJMZXR0ZXJsaWtlIFN5bWJvbHMiXSh0KXx8eXJbIk51bWJlciBGb3JtcyJdKHQpfHx5clsiTWlzY2VsbGFuZW91cyBUZWNobmljYWwiXSh0KSYmKHQ+PTg5NjAmJnQ8PTg5Njd8fHQ+PTg5NzImJnQ8PTg5OTF8fHQ+PTg5OTYmJnQ8PTllM3x8OTAwMz09PXR8fHQ+PTkwODUmJnQ8PTkxMTR8fHQ+PTkxNTAmJnQ8PTkxNjV8fDkxNjc9PT10fHx0Pj05MTY5JiZ0PD05MTc5fHx0Pj05MTg2JiZ0PD05MjE1KXx8eXJbIkNvbnRyb2wgUGljdHVyZXMiXSh0KSYmOTI1MSE9PXR8fHlyWyJPcHRpY2FsIENoYXJhY3RlciBSZWNvZ25pdGlvbiJdKHQpfHx5clsiRW5jbG9zZWQgQWxwaGFudW1lcmljcyJdKHQpfHx5clsiR2VvbWV0cmljIFNoYXBlcyJdKHQpfHx5clsiTWlzY2VsbGFuZW91cyBTeW1ib2xzIl0odCkmJiEodD49OTc1NCYmdDw9OTc1OSl8fHlyWyJNaXNjZWxsYW5lb3VzIFN5bWJvbHMgYW5kIEFycm93cyJdKHQpJiYodD49MTEwMjYmJnQ8PTExMDU1fHx0Pj0xMTA4OCYmdDw9MTEwOTd8fHQ+PTExMTkyJiZ0PD0xMTI0Myl8fHlyWyJDSksgU3ltYm9scyBhbmQgUHVuY3R1YXRpb24iXSh0KXx8eXIuS2F0YWthbmEodCl8fHlyWyJQcml2YXRlIFVzZSBBcmVhIl0odCl8fHlyWyJDSksgQ29tcGF0aWJpbGl0eSBGb3JtcyJdKHQpfHx5clsiU21hbGwgRm9ybSBWYXJpYW50cyJdKHQpfHx5clsiSGFsZndpZHRoIGFuZCBGdWxsd2lkdGggRm9ybXMiXSh0KXx8ODczND09PXR8fDg3NTY9PT10fHw4NzU3PT09dHx8dD49OTk4NCYmdDw9MTAwODd8fHQ+PTEwMTAyJiZ0PD0xMDEzMXx8NjU1MzI9PT10fHw2NTUzMz09PXQpfSh0KSl9ZnVuY3Rpb24ga3IodCxlKXtyZXR1cm4hKCFlJiYodD49MTQyNCYmdDw9MjMwM3x8eXJbIkFyYWJpYyBQcmVzZW50YXRpb24gRm9ybXMtQSJdKHQpfHx5clsiQXJhYmljIFByZXNlbnRhdGlvbiBGb3Jtcy1CIl0odCkpfHx0Pj0yMzA0JiZ0PD0zNTgzfHx0Pj0zODQwJiZ0PD00MjU1fHx5ci5LaG1lcih0KSl9dmFyIE1yLEFyPSExLFRyPW51bGwsU3I9ITEsRXI9bmV3IFAsQ3I9e2FwcGx5QXJhYmljU2hhcGluZzpudWxsLHByb2Nlc3NCaWRpcmVjdGlvbmFsVGV4dDpudWxsLGlzTG9hZGVkOmZ1bmN0aW9uKCl7cmV0dXJuIFNyfHxudWxsIT1Dci5hcHBseUFyYWJpY1NoYXBpbmd9fSxMcj1mdW5jdGlvbih0LGUpe3RoaXMuem9vbT10LGU/KHRoaXMubm93PWUubm93LHRoaXMuZmFkZUR1cmF0aW9uPWUuZmFkZUR1cmF0aW9uLHRoaXMuem9vbUhpc3Rvcnk9ZS56b29tSGlzdG9yeSx0aGlzLnRyYW5zaXRpb249ZS50cmFuc2l0aW9uKToodGhpcy5ub3c9MCx0aGlzLmZhZGVEdXJhdGlvbj0wLHRoaXMuem9vbUhpc3Rvcnk9bmV3IHZyLHRoaXMudHJhbnNpdGlvbj17fSl9O0xyLnByb3RvdHlwZS5pc1N1cHBvcnRlZFNjcmlwdD1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPXQ7cjxuLmxlbmd0aDtyKz0xKWlmKCFrcihuW3JdLmNoYXJDb2RlQXQoMCksZSkpcmV0dXJuITE7cmV0dXJuITB9KHQsQ3IuaXNMb2FkZWQoKSl9LExyLnByb3RvdHlwZS5jcm9zc0ZhZGluZ0ZhY3Rvcj1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5mYWRlRHVyYXRpb24/MTpNYXRoLm1pbigodGhpcy5ub3ctdGhpcy56b29tSGlzdG9yeS5sYXN0SW50ZWdlclpvb21UaW1lKS90aGlzLmZhZGVEdXJhdGlvbiwxKX07dmFyIHpyPWZ1bmN0aW9uKHQsZSl7dGhpcy5wcm9wZXJ0eT10LHRoaXMudmFsdWU9ZSx0aGlzLmV4cHJlc3Npb249U2Uodm9pZCAwPT09ZT90LnNwZWNpZmljYXRpb24uZGVmYXVsdDplLHQuc3BlY2lmaWNhdGlvbil9O3pyLnByb3RvdHlwZS5pc0RhdGFEcml2ZW49ZnVuY3Rpb24oKXtyZXR1cm4ic291cmNlIj09PXRoaXMuZXhwcmVzc2lvbi5raW5kfHwiY29tcG9zaXRlIj09PXRoaXMuZXhwcmVzc2lvbi5raW5kfSx6ci5wcm90b3R5cGUucG9zc2libHlFdmFsdWF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5wcm9wZXJ0eS5wb3NzaWJseUV2YWx1YXRlKHRoaXMsdCl9O3ZhciBQcj1mdW5jdGlvbih0KXt0aGlzLnByb3BlcnR5PXQsdGhpcy52YWx1ZT1uZXcgenIodCx2b2lkIDApfTtQci5wcm90b3R5cGUudHJhbnNpdGlvbmVkPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBPcih0aGlzLnByb3BlcnR5LHRoaXMudmFsdWUsZSxwKHt9LHQudHJhbnNpdGlvbix0aGlzLnRyYW5zaXRpb24pLHQubm93KX0sUHIucHJvdG90eXBlLnVudHJhbnNpdGlvbmVkPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBPcih0aGlzLnByb3BlcnR5LHRoaXMudmFsdWUsbnVsbCx7fSwwKX07dmFyIElyPWZ1bmN0aW9uKHQpe3RoaXMuX3Byb3BlcnRpZXM9dCx0aGlzLl92YWx1ZXM9T2JqZWN0LmNyZWF0ZSh0LmRlZmF1bHRUcmFuc2l0aW9uYWJsZVByb3BlcnR5VmFsdWVzKX07SXIucHJvdG90eXBlLmdldFZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiB4KHRoaXMuX3ZhbHVlc1t0XS52YWx1ZS52YWx1ZSl9LElyLnByb3RvdHlwZS5zZXRWYWx1ZT1mdW5jdGlvbih0LGUpe3RoaXMuX3ZhbHVlcy5oYXNPd25Qcm9wZXJ0eSh0KXx8KHRoaXMuX3ZhbHVlc1t0XT1uZXcgUHIodGhpcy5fdmFsdWVzW3RdLnByb3BlcnR5KSksdGhpcy5fdmFsdWVzW3RdLnZhbHVlPW5ldyB6cih0aGlzLl92YWx1ZXNbdF0ucHJvcGVydHksbnVsbD09PWU/dm9pZCAwOngoZSkpfSxJci5wcm90b3R5cGUuZ2V0VHJhbnNpdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4geCh0aGlzLl92YWx1ZXNbdF0udHJhbnNpdGlvbil9LElyLnByb3RvdHlwZS5zZXRUcmFuc2l0aW9uPWZ1bmN0aW9uKHQsZSl7dGhpcy5fdmFsdWVzLmhhc093blByb3BlcnR5KHQpfHwodGhpcy5fdmFsdWVzW3RdPW5ldyBQcih0aGlzLl92YWx1ZXNbdF0ucHJvcGVydHkpKSx0aGlzLl92YWx1ZXNbdF0udHJhbnNpdGlvbj14KGUpfHx2b2lkIDB9LElyLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9e30sZT0wLHI9T2JqZWN0LmtleXModGhpcy5fdmFsdWVzKTtlPHIubGVuZ3RoO2UrPTEpe3ZhciBuPXJbZV0saT10aGlzLmdldFZhbHVlKG4pO3ZvaWQgMCE9PWkmJih0W25dPWkpO3ZhciBhPXRoaXMuZ2V0VHJhbnNpdGlvbihuKTt2b2lkIDAhPT1hJiYodFtuKyItdHJhbnNpdGlvbiJdPWEpfXJldHVybiB0fSxJci5wcm90b3R5cGUudHJhbnNpdGlvbmVkPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW5ldyBEcih0aGlzLl9wcm9wZXJ0aWVzKSxuPTAsaT1PYmplY3Qua2V5cyh0aGlzLl92YWx1ZXMpO248aS5sZW5ndGg7bis9MSl7dmFyIGE9aVtuXTtyLl92YWx1ZXNbYV09dGhpcy5fdmFsdWVzW2FdLnRyYW5zaXRpb25lZCh0LGUuX3ZhbHVlc1thXSl9cmV0dXJuIHJ9LElyLnByb3RvdHlwZS51bnRyYW5zaXRpb25lZD1mdW5jdGlvbigpe2Zvcih2YXIgdD1uZXcgRHIodGhpcy5fcHJvcGVydGllcyksZT0wLHI9T2JqZWN0LmtleXModGhpcy5fdmFsdWVzKTtlPHIubGVuZ3RoO2UrPTEpe3ZhciBuPXJbZV07dC5fdmFsdWVzW25dPXRoaXMuX3ZhbHVlc1tuXS51bnRyYW5zaXRpb25lZCgpfXJldHVybiB0fTt2YXIgT3I9ZnVuY3Rpb24odCxlLHIsbixpKXt0aGlzLnByb3BlcnR5PXQsdGhpcy52YWx1ZT1lLHRoaXMuYmVnaW49aStuLmRlbGF5fHwwLHRoaXMuZW5kPXRoaXMuYmVnaW4rbi5kdXJhdGlvbnx8MCx0LnNwZWNpZmljYXRpb24udHJhbnNpdGlvbiYmKG4uZGVsYXl8fG4uZHVyYXRpb24pJiYodGhpcy5wcmlvcj1yKX07T3IucHJvdG90eXBlLnBvc3NpYmx5RXZhbHVhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dC5ub3d8fDAscj10aGlzLnZhbHVlLnBvc3NpYmx5RXZhbHVhdGUodCksbj10aGlzLnByaW9yO2lmKG4pe2lmKGU+dGhpcy5lbmQpcmV0dXJuIHRoaXMucHJpb3I9bnVsbCxyO2lmKHRoaXMudmFsdWUuaXNEYXRhRHJpdmVuKCkpcmV0dXJuIHRoaXMucHJpb3I9bnVsbCxyO2lmKGU8dGhpcy5iZWdpbilyZXR1cm4gbi5wb3NzaWJseUV2YWx1YXRlKHQpO3ZhciBpPShlLXRoaXMuYmVnaW4pLyh0aGlzLmVuZC10aGlzLmJlZ2luKTtyZXR1cm4gdGhpcy5wcm9wZXJ0eS5pbnRlcnBvbGF0ZShuLnBvc3NpYmx5RXZhbHVhdGUodCkscixmdW5jdGlvbih0KXtpZihpPD0wKXJldHVybiAwO2lmKGk+PTEpcmV0dXJuIDE7dmFyIGU9aSppLHI9ZSppO3JldHVybiA0KihpPC41P3I6MyooaS1lKStyLS43NSl9KCkpfXJldHVybiByfTt2YXIgRHI9ZnVuY3Rpb24odCl7dGhpcy5fcHJvcGVydGllcz10LHRoaXMuX3ZhbHVlcz1PYmplY3QuY3JlYXRlKHQuZGVmYXVsdFRyYW5zaXRpb25pbmdQcm9wZXJ0eVZhbHVlcyl9O0RyLnByb3RvdHlwZS5wb3NzaWJseUV2YWx1YXRlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgRnIodGhpcy5fcHJvcGVydGllcykscj0wLG49T2JqZWN0LmtleXModGhpcy5fdmFsdWVzKTtyPG4ubGVuZ3RoO3IrPTEpe3ZhciBpPW5bcl07ZS5fdmFsdWVzW2ldPXRoaXMuX3ZhbHVlc1tpXS5wb3NzaWJseUV2YWx1YXRlKHQpfXJldHVybiBlfSxEci5wcm90b3R5cGUuaGFzVHJhbnNpdGlvbj1mdW5jdGlvbigpe2Zvcih2YXIgdD0wLGU9T2JqZWN0LmtleXModGhpcy5fdmFsdWVzKTt0PGUubGVuZ3RoO3QrPTEpe3ZhciByPWVbdF07aWYodGhpcy5fdmFsdWVzW3JdLnByaW9yKXJldHVybiEwfXJldHVybiExfTt2YXIgUnI9ZnVuY3Rpb24odCl7dGhpcy5fcHJvcGVydGllcz10LHRoaXMuX3ZhbHVlcz1PYmplY3QuY3JlYXRlKHQuZGVmYXVsdFByb3BlcnR5VmFsdWVzKX07UnIucHJvdG90eXBlLmdldFZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiB4KHRoaXMuX3ZhbHVlc1t0XS52YWx1ZSl9LFJyLnByb3RvdHlwZS5zZXRWYWx1ZT1mdW5jdGlvbih0LGUpe3RoaXMuX3ZhbHVlc1t0XT1uZXcgenIodGhpcy5fdmFsdWVzW3RdLnByb3BlcnR5LG51bGw9PT1lP3ZvaWQgMDp4KGUpKX0sUnIucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe2Zvcih2YXIgdD17fSxlPTAscj1PYmplY3Qua2V5cyh0aGlzLl92YWx1ZXMpO2U8ci5sZW5ndGg7ZSs9MSl7dmFyIG49cltlXSxpPXRoaXMuZ2V0VmFsdWUobik7dm9pZCAwIT09aSYmKHRbbl09aSl9cmV0dXJuIHR9LFJyLnByb3RvdHlwZS5wb3NzaWJseUV2YWx1YXRlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgRnIodGhpcy5fcHJvcGVydGllcykscj0wLG49T2JqZWN0LmtleXModGhpcy5fdmFsdWVzKTtyPG4ubGVuZ3RoO3IrPTEpe3ZhciBpPW5bcl07ZS5fdmFsdWVzW2ldPXRoaXMuX3ZhbHVlc1tpXS5wb3NzaWJseUV2YWx1YXRlKHQpfXJldHVybiBlfTt2YXIgQnI9ZnVuY3Rpb24odCxlLHIpe3RoaXMucHJvcGVydHk9dCx0aGlzLnZhbHVlPWUsdGhpcy5nbG9iYWxzPXJ9O0JyLnByb3RvdHlwZS5pc0NvbnN0YW50PWZ1bmN0aW9uKCl7cmV0dXJuImNvbnN0YW50Ij09PXRoaXMudmFsdWUua2luZH0sQnIucHJvdG90eXBlLmNvbnN0YW50T3I9ZnVuY3Rpb24odCl7cmV0dXJuImNvbnN0YW50Ij09PXRoaXMudmFsdWUua2luZD90aGlzLnZhbHVlLnZhbHVlOnR9LEJyLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5wcm9wZXJ0eS5ldmFsdWF0ZSh0aGlzLnZhbHVlLHRoaXMuZ2xvYmFscyx0KX07dmFyIEZyPWZ1bmN0aW9uKHQpe3RoaXMuX3Byb3BlcnRpZXM9dCx0aGlzLl92YWx1ZXM9T2JqZWN0LmNyZWF0ZSh0LmRlZmF1bHRQb3NzaWJseUV2YWx1YXRlZFZhbHVlcyl9O0ZyLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3ZhbHVlc1t0XX07dmFyIE5yPWZ1bmN0aW9uKHQpe3RoaXMuc3BlY2lmaWNhdGlvbj10fTtOci5wcm90b3R5cGUucG9zc2libHlFdmFsdWF0ZT1mdW5jdGlvbih0LGUpe3JldHVybiB0LmV4cHJlc3Npb24uZXZhbHVhdGUoZSl9LE5yLnByb3RvdHlwZS5pbnRlcnBvbGF0ZT1mdW5jdGlvbih0LGUscil7dmFyIG49a3RbdGhpcy5zcGVjaWZpY2F0aW9uLnR5cGVdO3JldHVybiBuP24odCxlLHIpOnR9O3ZhciBqcj1mdW5jdGlvbih0KXt0aGlzLnNwZWNpZmljYXRpb249dH07anIucHJvdG90eXBlLnBvc3NpYmx5RXZhbHVhdGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4iY29uc3RhbnQiPT09dC5leHByZXNzaW9uLmtpbmR8fCJjYW1lcmEiPT09dC5leHByZXNzaW9uLmtpbmQ/bmV3IEJyKHRoaXMse2tpbmQ6ImNvbnN0YW50Iix2YWx1ZTp0LmV4cHJlc3Npb24uZXZhbHVhdGUoZSl9LGUpOm5ldyBCcih0aGlzLHQuZXhwcmVzc2lvbixlKX0sanIucHJvdG90eXBlLmludGVycG9sYXRlPWZ1bmN0aW9uKHQsZSxyKXtpZigiY29uc3RhbnQiIT09dC52YWx1ZS5raW5kfHwiY29uc3RhbnQiIT09ZS52YWx1ZS5raW5kKXJldHVybiB0O2lmKHZvaWQgMD09PXQudmFsdWUudmFsdWV8fHZvaWQgMD09PWUudmFsdWUudmFsdWUpcmV0dXJuIG5ldyBCcih0aGlzLHtraW5kOiJjb25zdGFudCIsdmFsdWU6dm9pZCAwfSx0Lmdsb2JhbHMpO3ZhciBuPWt0W3RoaXMuc3BlY2lmaWNhdGlvbi50eXBlXTtyZXR1cm4gbj9uZXcgQnIodGhpcyx7a2luZDoiY29uc3RhbnQiLHZhbHVlOm4odC52YWx1ZS52YWx1ZSxlLnZhbHVlLnZhbHVlLHIpfSx0Lmdsb2JhbHMpOnR9LGpyLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0LGUscil7cmV0dXJuImNvbnN0YW50Ij09PXQua2luZD90LnZhbHVlOnQuZXZhbHVhdGUoZSxyKX07dmFyIFZyPWZ1bmN0aW9uKHQpe3RoaXMuc3BlY2lmaWNhdGlvbj10fTtWci5wcm90b3R5cGUucG9zc2libHlFdmFsdWF0ZT1mdW5jdGlvbih0LGUpe2lmKHZvaWQgMCE9PXQudmFsdWUpe2lmKCJjb25zdGFudCI9PT10LmV4cHJlc3Npb24ua2luZCl7dmFyIHI9dC5leHByZXNzaW9uLmV2YWx1YXRlKGUpO3JldHVybiB0aGlzLl9jYWxjdWxhdGUocixyLHIsZSl9cmV0dXJuIHRoaXMuX2NhbGN1bGF0ZSh0LmV4cHJlc3Npb24uZXZhbHVhdGUobmV3IExyKE1hdGguZmxvb3IoZS56b29tLTEpLGUpKSx0LmV4cHJlc3Npb24uZXZhbHVhdGUobmV3IExyKE1hdGguZmxvb3IoZS56b29tKSxlKSksdC5leHByZXNzaW9uLmV2YWx1YXRlKG5ldyBMcihNYXRoLmZsb29yKGUuem9vbSsxKSxlKSksZSl9fSxWci5wcm90b3R5cGUuX2NhbGN1bGF0ZT1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1uLnpvb20sYT1pLU1hdGguZmxvb3IoaSksbz1uLmNyb3NzRmFkaW5nRmFjdG9yKCk7cmV0dXJuIGk+bi56b29tSGlzdG9yeS5sYXN0SW50ZWdlclpvb20/e2Zyb206dCx0bzplLGZyb21TY2FsZToyLHRvU2NhbGU6MSx0OmErKDEtYSkqb306e2Zyb206cix0bzplLGZyb21TY2FsZTouNSx0b1NjYWxlOjEsdDoxLSgxLW8pKmF9fSxWci5wcm90b3R5cGUuaW50ZXJwb2xhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHR9O3ZhciBVcj1mdW5jdGlvbih0KXt0aGlzLnNwZWNpZmljYXRpb249dH07VXIucHJvdG90eXBlLnBvc3NpYmx5RXZhbHVhdGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4hIXQuZXhwcmVzc2lvbi5ldmFsdWF0ZShlKX0sVXIucHJvdG90eXBlLmludGVycG9sYXRlPWZ1bmN0aW9uKCl7cmV0dXJuITF9O3ZhciBxcj1mdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdGhpcy5wcm9wZXJ0aWVzPXQsdGhpcy5kZWZhdWx0UHJvcGVydHlWYWx1ZXM9e30sdGhpcy5kZWZhdWx0VHJhbnNpdGlvbmFibGVQcm9wZXJ0eVZhbHVlcz17fSx0aGlzLmRlZmF1bHRUcmFuc2l0aW9uaW5nUHJvcGVydHlWYWx1ZXM9e30sdGhpcy5kZWZhdWx0UG9zc2libHlFdmFsdWF0ZWRWYWx1ZXM9e30sdCl7dmFyIHI9dFtlXSxuPXRoaXMuZGVmYXVsdFByb3BlcnR5VmFsdWVzW2VdPW5ldyB6cihyLHZvaWQgMCksaT10aGlzLmRlZmF1bHRUcmFuc2l0aW9uYWJsZVByb3BlcnR5VmFsdWVzW2VdPW5ldyBQcihyKTt0aGlzLmRlZmF1bHRUcmFuc2l0aW9uaW5nUHJvcGVydHlWYWx1ZXNbZV09aS51bnRyYW5zaXRpb25lZCgpLHRoaXMuZGVmYXVsdFBvc3NpYmx5RXZhbHVhdGVkVmFsdWVzW2VdPW4ucG9zc2libHlFdmFsdWF0ZSh7fSl9fTtwcigiRGF0YURyaXZlblByb3BlcnR5IixqcikscHIoIkRhdGFDb25zdGFudFByb3BlcnR5IixOcikscHIoIkNyb3NzRmFkZWRQcm9wZXJ0eSIsVnIpLHByKCJDb2xvclJhbXBQcm9wZXJ0eSIsVXIpO3ZhciBIcj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUscil7Zm9yKHZhciBuIGluIHQuY2FsbCh0aGlzKSx0aGlzLmlkPWUuaWQsdGhpcy5tZXRhZGF0YT1lLm1ldGFkYXRhLHRoaXMudHlwZT1lLnR5cGUsdGhpcy5taW56b29tPWUubWluem9vbSx0aGlzLm1heHpvb209ZS5tYXh6b29tLHRoaXMudmlzaWJpbGl0eT0idmlzaWJsZSIsImJhY2tncm91bmQiIT09ZS50eXBlJiYodGhpcy5zb3VyY2U9ZS5zb3VyY2UsdGhpcy5zb3VyY2VMYXllcj1lWyJzb3VyY2UtbGF5ZXIiXSx0aGlzLmZpbHRlcj1lLmZpbHRlciksdGhpcy5fZmVhdHVyZUZpbHRlcj1mdW5jdGlvbigpe3JldHVybiEwfSxyLmxheW91dCYmKHRoaXMuX3VuZXZhbHVhdGVkTGF5b3V0PW5ldyBScihyLmxheW91dCkpLHRoaXMuX3RyYW5zaXRpb25hYmxlUGFpbnQ9bmV3IElyKHIucGFpbnQpLGUucGFpbnQpdGhpcy5zZXRQYWludFByb3BlcnR5KG4sZS5wYWludFtuXSx7dmFsaWRhdGU6ITF9KTtmb3IodmFyIGkgaW4gZS5sYXlvdXQpdGhpcy5zZXRMYXlvdXRQcm9wZXJ0eShpLGUubGF5b3V0W2ldLHt2YWxpZGF0ZTohMX0pO3RoaXMuX3RyYW5zaXRpb25pbmdQYWludD10aGlzLl90cmFuc2l0aW9uYWJsZVBhaW50LnVudHJhbnNpdGlvbmVkKCl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldExheW91dFByb3BlcnR5PWZ1bmN0aW9uKHQpe3JldHVybiJ2aXNpYmlsaXR5Ij09PXQ/dGhpcy52aXNpYmlsaXR5OnRoaXMuX3VuZXZhbHVhdGVkTGF5b3V0LmdldFZhbHVlKHQpfSxlLnByb3RvdHlwZS5zZXRMYXlvdXRQcm9wZXJ0eT1mdW5jdGlvbih0LGUscil7aWYobnVsbCE9ZSl7dmFyIG49ImxheWVycy4iK3RoaXMuaWQrIi5sYXlvdXQuIit0O2lmKHRoaXMuX3ZhbGlkYXRlKG9yLG4sdCxlLHIpKXJldHVybn0idmlzaWJpbGl0eSIhPT10P3RoaXMuX3VuZXZhbHVhdGVkTGF5b3V0LnNldFZhbHVlKHQsZSk6dGhpcy52aXNpYmlsaXR5PSJub25lIj09PWU/ZToidmlzaWJsZSJ9LGUucHJvdG90eXBlLmdldFBhaW50UHJvcGVydHk9ZnVuY3Rpb24odCl7cmV0dXJuIG0odCwiLXRyYW5zaXRpb24iKT90aGlzLl90cmFuc2l0aW9uYWJsZVBhaW50LmdldFRyYW5zaXRpb24odC5zbGljZSgwLC0iLXRyYW5zaXRpb24iLmxlbmd0aCkpOnRoaXMuX3RyYW5zaXRpb25hYmxlUGFpbnQuZ2V0VmFsdWUodCl9LGUucHJvdG90eXBlLnNldFBhaW50UHJvcGVydHk9ZnVuY3Rpb24odCxlLHIpe2lmKG51bGwhPWUpe3ZhciBuPSJsYXllcnMuIit0aGlzLmlkKyIucGFpbnQuIit0O2lmKHRoaXMuX3ZhbGlkYXRlKGFyLG4sdCxlLHIpKXJldHVybn1tKHQsIi10cmFuc2l0aW9uIik/dGhpcy5fdHJhbnNpdGlvbmFibGVQYWludC5zZXRUcmFuc2l0aW9uKHQuc2xpY2UoMCwtIi10cmFuc2l0aW9uIi5sZW5ndGgpLGV8fHZvaWQgMCk6dGhpcy5fdHJhbnNpdGlvbmFibGVQYWludC5zZXRWYWx1ZSh0LGUpfSxlLnByb3RvdHlwZS5pc0hpZGRlbj1mdW5jdGlvbih0KXtyZXR1cm4hISh0aGlzLm1pbnpvb20mJnQ8dGhpcy5taW56b29tKXx8ISEodGhpcy5tYXh6b29tJiZ0Pj10aGlzLm1heHpvb20pfHwibm9uZSI9PT10aGlzLnZpc2liaWxpdHl9LGUucHJvdG90eXBlLnVwZGF0ZVRyYW5zaXRpb25zPWZ1bmN0aW9uKHQpe3RoaXMuX3RyYW5zaXRpb25pbmdQYWludD10aGlzLl90cmFuc2l0aW9uYWJsZVBhaW50LnRyYW5zaXRpb25lZCh0LHRoaXMuX3RyYW5zaXRpb25pbmdQYWludCl9LGUucHJvdG90eXBlLmhhc1RyYW5zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNpdGlvbmluZ1BhaW50Lmhhc1RyYW5zaXRpb24oKX0sZS5wcm90b3R5cGUucmVjYWxjdWxhdGU9ZnVuY3Rpb24odCl7dGhpcy5fdW5ldmFsdWF0ZWRMYXlvdXQmJih0aGlzLmxheW91dD10aGlzLl91bmV2YWx1YXRlZExheW91dC5wb3NzaWJseUV2YWx1YXRlKHQpKSx0aGlzLnBhaW50PXRoaXMuX3RyYW5zaXRpb25pbmdQYWludC5wb3NzaWJseUV2YWx1YXRlKHQpfSxlLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXt2YXIgdD17aWQ6dGhpcy5pZCx0eXBlOnRoaXMudHlwZSxzb3VyY2U6dGhpcy5zb3VyY2UsInNvdXJjZS1sYXllciI6dGhpcy5zb3VyY2VMYXllcixtZXRhZGF0YTp0aGlzLm1ldGFkYXRhLG1pbnpvb206dGhpcy5taW56b29tLG1heHpvb206dGhpcy5tYXh6b29tLGZpbHRlcjp0aGlzLmZpbHRlcixsYXlvdXQ6dGhpcy5fdW5ldmFsdWF0ZWRMYXlvdXQmJnRoaXMuX3VuZXZhbHVhdGVkTGF5b3V0LnNlcmlhbGl6ZSgpLHBhaW50OnRoaXMuX3RyYW5zaXRpb25hYmxlUGFpbnQmJnRoaXMuX3RyYW5zaXRpb25hYmxlUGFpbnQuc2VyaWFsaXplKCl9O3JldHVybiJub25lIj09PXRoaXMudmlzaWJpbGl0eSYmKHQubGF5b3V0PXQubGF5b3V0fHx7fSx0LmxheW91dC52aXNpYmlsaXR5PSJub25lIikseSh0LGZ1bmN0aW9uKHQsZSl7cmV0dXJuISh2b2lkIDA9PT10fHwibGF5b3V0Ij09PWUmJiFPYmplY3Qua2V5cyh0KS5sZW5ndGh8fCJwYWludCI9PT1lJiYhT2JqZWN0LmtleXModCkubGVuZ3RoKX0pfSxlLnByb3RvdHlwZS5fdmFsaWRhdGU9ZnVuY3Rpb24odCxlLHIsbixpKXtyZXR1cm4oIWl8fCExIT09aS52YWxpZGF0ZSkmJnNyKHRoaXMsdC5jYWxsKG5yLHtrZXk6ZSxsYXllclR5cGU6dGhpcy50eXBlLG9iamVjdEtleTpyLHZhbHVlOm4sc3R5bGVTcGVjOkksc3R5bGU6e2dseXBoczohMCxzcHJpdGU6ITB9fSkpfSxlLnByb3RvdHlwZS5oYXNPZmZzY3JlZW5QYXNzPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGUucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbigpe30sZX0oUCksR3I9e0ludDg6SW50OEFycmF5LFVpbnQ4OlVpbnQ4QXJyYXksSW50MTY6SW50MTZBcnJheSxVaW50MTY6VWludDE2QXJyYXksSW50MzI6SW50MzJBcnJheSxVaW50MzI6VWludDMyQXJyYXksRmxvYXQzMjpGbG9hdDMyQXJyYXl9LFdyPWZ1bmN0aW9uKHQsZSl7dGhpcy5fc3RydWN0QXJyYXk9dCx0aGlzLl9wb3MxPWUqdGhpcy5zaXplLHRoaXMuX3BvczI9dGhpcy5fcG9zMS8yLHRoaXMuX3BvczQ9dGhpcy5fcG9zMS80LHRoaXMuX3Bvczg9dGhpcy5fcG9zMS84fSxZcj1mdW5jdGlvbigpe3RoaXMuaXNUcmFuc2ZlcnJlZD0hMSx0aGlzLmNhcGFjaXR5PS0xLHRoaXMucmVzaXplKDApfTtmdW5jdGlvbiBYcih0LGUpe3ZvaWQgMD09PWUmJihlPTEpO3ZhciByPTAsbj0wO3JldHVybnttZW1iZXJzOnQubWFwKGZ1bmN0aW9uKHQpe3ZhciBpLGE9KGk9dC50eXBlLEdyW2ldLkJZVEVTX1BFUl9FTEVNRU5UKSxvPXI9WnIocixNYXRoLm1heChlLGEpKSxzPXQuY29tcG9uZW50c3x8MTtyZXR1cm4gbj1NYXRoLm1heChuLGEpLHIrPWEqcyx7bmFtZTp0Lm5hbWUsdHlwZTp0LnR5cGUsY29tcG9uZW50czpzLG9mZnNldDpvfX0pLHNpemU6WnIocixNYXRoLm1heChuLGUpKSxhbGlnbm1lbnQ6ZX19ZnVuY3Rpb24gWnIodCxlKXtyZXR1cm4gTWF0aC5jZWlsKHQvZSkqZX1Zci5zZXJpYWxpemU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5fdHJpbSgpLGUmJih0LmlzVHJhbnNmZXJyZWQ9ITAsZS5wdXNoKHQuYXJyYXlCdWZmZXIpKSx7bGVuZ3RoOnQubGVuZ3RoLGFycmF5QnVmZmVyOnQuYXJyYXlCdWZmZXJ9fSxZci5kZXNlcmlhbGl6ZT1mdW5jdGlvbih0KXt2YXIgZT1PYmplY3QuY3JlYXRlKHRoaXMucHJvdG90eXBlKTtyZXR1cm4gZS5hcnJheUJ1ZmZlcj10LmFycmF5QnVmZmVyLGUubGVuZ3RoPXQubGVuZ3RoLGUuY2FwYWNpdHk9dC5hcnJheUJ1ZmZlci5ieXRlTGVuZ3RoL2UuYnl0ZXNQZXJFbGVtZW50LGUuX3JlZnJlc2hWaWV3cygpLGV9LFlyLnByb3RvdHlwZS5fdHJpbT1mdW5jdGlvbigpe3RoaXMubGVuZ3RoIT09dGhpcy5jYXBhY2l0eSYmKHRoaXMuY2FwYWNpdHk9dGhpcy5sZW5ndGgsdGhpcy5hcnJheUJ1ZmZlcj10aGlzLmFycmF5QnVmZmVyLnNsaWNlKDAsdGhpcy5sZW5ndGgqdGhpcy5ieXRlc1BlckVsZW1lbnQpLHRoaXMuX3JlZnJlc2hWaWV3cygpKX0sWXIucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5sZW5ndGg9MH0sWXIucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbih0KXt0aGlzLnJlc2VydmUodCksdGhpcy5sZW5ndGg9dH0sWXIucHJvdG90eXBlLnJlc2VydmU9ZnVuY3Rpb24odCl7aWYodD50aGlzLmNhcGFjaXR5KXt0aGlzLmNhcGFjaXR5PU1hdGgubWF4KHQsTWF0aC5mbG9vcig1KnRoaXMuY2FwYWNpdHkpLDEyOCksdGhpcy5hcnJheUJ1ZmZlcj1uZXcgQXJyYXlCdWZmZXIodGhpcy5jYXBhY2l0eSp0aGlzLmJ5dGVzUGVyRWxlbWVudCk7dmFyIGU9dGhpcy51aW50ODt0aGlzLl9yZWZyZXNoVmlld3MoKSxlJiZ0aGlzLnVpbnQ4LnNldChlKX19LFlyLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJfcmVmcmVzaFZpZXdzKCkgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBlYWNoIGNvbmNyZXRlIFN0cnVjdEFycmF5IGxheW91dCIpfTt2YXIgJHI9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLmludDE2PW5ldyBJbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMubGVuZ3RoO3RoaXMucmVzaXplKHIrMSk7dmFyIG49MipyO3JldHVybiB0aGlzLmludDE2W24rMF09dCx0aGlzLmludDE2W24rMV09ZSxyfSxlfShZcik7JHIucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD00LHByKCJTdHJ1Y3RBcnJheUxheW91dDJpNCIsJHIpO3ZhciBKcj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMuaW50MTY9bmV3IEludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRoaXMubGVuZ3RoO3RoaXMucmVzaXplKGkrMSk7dmFyIGE9NCppO3JldHVybiB0aGlzLmludDE2W2ErMF09dCx0aGlzLmludDE2W2ErMV09ZSx0aGlzLmludDE2W2ErMl09cix0aGlzLmludDE2W2ErM109bixpfSxlfShZcik7SnIucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD04LHByKCJTdHJ1Y3RBcnJheUxheW91dDRpOCIsSnIpO3ZhciBLcj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMuaW50MTY9bmV3IEludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbz10aGlzLmxlbmd0aDt0aGlzLnJlc2l6ZShvKzEpO3ZhciBzPTYqbztyZXR1cm4gdGhpcy5pbnQxNltzKzBdPXQsdGhpcy5pbnQxNltzKzFdPWUsdGhpcy5pbnQxNltzKzJdPXIsdGhpcy5pbnQxNltzKzNdPW4sdGhpcy5pbnQxNltzKzRdPWksdGhpcy5pbnQxNltzKzVdPWEsb30sZX0oWXIpO0tyLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9MTIscHIoIlN0cnVjdEFycmF5TGF5b3V0Mmk0aTEyIixLcik7dmFyIFFyPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy5pbnQxNj1uZXcgSW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzKXt2YXIgbD10aGlzLmxlbmd0aDt0aGlzLnJlc2l6ZShsKzEpO3ZhciBjPTYqbCx1PTEyKmw7cmV0dXJuIHRoaXMuaW50MTZbYyswXT10LHRoaXMuaW50MTZbYysxXT1lLHRoaXMuaW50MTZbYysyXT1yLHRoaXMuaW50MTZbYyszXT1uLHRoaXMudWludDhbdSs4XT1pLHRoaXMudWludDhbdSs5XT1hLHRoaXMudWludDhbdSsxMF09byx0aGlzLnVpbnQ4W3UrMTFdPXMsbH0sZX0oWXIpO1FyLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9MTIscHIoIlN0cnVjdEFycmF5TGF5b3V0NGk0dWIxMiIsUXIpO3ZhciB0bj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMuaW50MTY9bmV3IEludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy51aW50MTY9bmV3IFVpbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUscixuLGksYSxvLHMpe3ZhciBsPXRoaXMubGVuZ3RoO3RoaXMucmVzaXplKGwrMSk7dmFyIGM9OCpsO3JldHVybiB0aGlzLmludDE2W2MrMF09dCx0aGlzLmludDE2W2MrMV09ZSx0aGlzLmludDE2W2MrMl09cix0aGlzLmludDE2W2MrM109bix0aGlzLnVpbnQxNltjKzRdPWksdGhpcy51aW50MTZbYys1XT1hLHRoaXMudWludDE2W2MrNl09byx0aGlzLnVpbnQxNltjKzddPXMsbH0sZX0oWXIpO3RuLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9MTYscHIoIlN0cnVjdEFycmF5TGF5b3V0NGk0dWkxNiIsdG4pO3ZhciBlbj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMuZmxvYXQzMj1uZXcgRmxvYXQzMkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5sZW5ndGg7dGhpcy5yZXNpemUobisxKTt2YXIgaT0zKm47cmV0dXJuIHRoaXMuZmxvYXQzMltpKzBdPXQsdGhpcy5mbG9hdDMyW2krMV09ZSx0aGlzLmZsb2F0MzJbaSsyXT1yLG59LGV9KFlyKTtlbi5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50PTEyLHByKCJTdHJ1Y3RBcnJheUxheW91dDNmMTIiLGVuKTt2YXIgcm49ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLnVpbnQzMj1uZXcgVWludDMyQXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubGVuZ3RoO3RoaXMucmVzaXplKGUrMSk7dmFyIHI9MSplO3JldHVybiB0aGlzLnVpbnQzMltyKzBdPXQsZX0sZX0oWXIpO3JuLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9NCxwcigiU3RydWN0QXJyYXlMYXlvdXQxdWw0Iixybik7dmFyIG5uPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy5pbnQxNj1uZXcgSW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLnVpbnQzMj1uZXcgVWludDMyQXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy51aW50MTY9bmV3IFVpbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUscixuLGksYSxvLHMsbCxjLHUpe3ZhciBoPXRoaXMubGVuZ3RoO3RoaXMucmVzaXplKGgrMSk7dmFyIGY9MTIqaCxwPTYqaDtyZXR1cm4gdGhpcy5pbnQxNltmKzBdPXQsdGhpcy5pbnQxNltmKzFdPWUsdGhpcy5pbnQxNltmKzJdPXIsdGhpcy5pbnQxNltmKzNdPW4sdGhpcy5pbnQxNltmKzRdPWksdGhpcy5pbnQxNltmKzVdPWEsdGhpcy51aW50MzJbcCszXT1vLHRoaXMudWludDE2W2YrOF09cyx0aGlzLnVpbnQxNltmKzldPWwsdGhpcy5pbnQxNltmKzEwXT1jLHRoaXMuaW50MTZbZisxMV09dSxofSxlfShZcik7bm4ucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD0yNCxwcigiU3RydWN0QXJyYXlMYXlvdXQ2aTF1bDJ1aTJpMjQiLG5uKTt2YXIgYW49ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLmludDE2PW5ldyBJbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG89dGhpcy5sZW5ndGg7dGhpcy5yZXNpemUobysxKTt2YXIgcz02Km87cmV0dXJuIHRoaXMuaW50MTZbcyswXT10LHRoaXMuaW50MTZbcysxXT1lLHRoaXMuaW50MTZbcysyXT1yLHRoaXMuaW50MTZbcyszXT1uLHRoaXMuaW50MTZbcys0XT1pLHRoaXMuaW50MTZbcys1XT1hLG99LGV9KFlyKTthbi5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50PTEyLHByKCJTdHJ1Y3RBcnJheUxheW91dDJpMmkyaTEyIixhbik7dmFyIG9uPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5sZW5ndGg7dGhpcy5yZXNpemUocisxKTt2YXIgbj00KnI7cmV0dXJuIHRoaXMudWludDhbbiswXT10LHRoaXMudWludDhbbisxXT1lLHJ9LGV9KFlyKTtvbi5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50PTQscHIoIlN0cnVjdEFycmF5TGF5b3V0MnViNCIsb24pO3ZhciBzbj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMuaW50MTY9bmV3IEludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy51aW50MTY9bmV3IFVpbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMudWludDMyPW5ldyBVaW50MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLmZsb2F0MzI9bmV3IEZsb2F0MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwsYyx1LGgsZixwKXt2YXIgZD10aGlzLmxlbmd0aDt0aGlzLnJlc2l6ZShkKzEpO3ZhciBnPTIwKmQsbT0xMCpkLHY9NDAqZDtyZXR1cm4gdGhpcy5pbnQxNltnKzBdPXQsdGhpcy5pbnQxNltnKzFdPWUsdGhpcy51aW50MTZbZysyXT1yLHRoaXMudWludDE2W2crM109bix0aGlzLnVpbnQzMlttKzJdPWksdGhpcy51aW50MzJbbSszXT1hLHRoaXMudWludDMyW20rNF09byx0aGlzLnVpbnQxNltnKzEwXT1zLHRoaXMudWludDE2W2crMTFdPWwsdGhpcy51aW50MTZbZysxMl09Yyx0aGlzLmZsb2F0MzJbbSs3XT11LHRoaXMuZmxvYXQzMlttKzhdPWgsdGhpcy51aW50OFt2KzM2XT1mLHRoaXMudWludDhbdiszN109cCxkfSxlfShZcik7c24ucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD00MCxwcigiU3RydWN0QXJyYXlMYXlvdXQyaTJ1aTN1bDN1aTJmMnViNDAiLHNuKTt2YXIgbG49ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLmZsb2F0MzI9bmV3IEZsb2F0MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5sZW5ndGg7dGhpcy5yZXNpemUoZSsxKTt2YXIgcj0xKmU7cmV0dXJuIHRoaXMuZmxvYXQzMltyKzBdPXQsZX0sZX0oWXIpO2xuLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9NCxwcigiU3RydWN0QXJyYXlMYXlvdXQxZjQiLGxuKTt2YXIgY249ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLmludDE2PW5ldyBJbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5sZW5ndGg7dGhpcy5yZXNpemUobisxKTt2YXIgaT0zKm47cmV0dXJuIHRoaXMuaW50MTZbaSswXT10LHRoaXMuaW50MTZbaSsxXT1lLHRoaXMuaW50MTZbaSsyXT1yLG59LGV9KFlyKTtjbi5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50PTYscHIoIlN0cnVjdEFycmF5TGF5b3V0M2k2Iixjbik7dmFyIHVuPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy51aW50MzI9bmV3IFVpbnQzMkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMudWludDE2PW5ldyBVaW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMubGVuZ3RoO3RoaXMucmVzaXplKG4rMSk7dmFyIGk9MipuLGE9NCpuO3JldHVybiB0aGlzLnVpbnQzMltpKzBdPXQsdGhpcy51aW50MTZbYSsyXT1lLHRoaXMudWludDE2W2ErM109cixufSxlfShZcik7dW4ucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD04LHByKCJTdHJ1Y3RBcnJheUxheW91dDF1bDJ1aTgiLHVuKTt2YXIgaG49ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLnVpbnQxNj1uZXcgVWludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLmxlbmd0aDt0aGlzLnJlc2l6ZShuKzEpO3ZhciBpPTMqbjtyZXR1cm4gdGhpcy51aW50MTZbaSswXT10LHRoaXMudWludDE2W2krMV09ZSx0aGlzLnVpbnQxNltpKzJdPXIsbn0sZX0oWXIpO2huLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9NixwcigiU3RydWN0QXJyYXlMYXlvdXQzdWk2Iixobik7dmFyIGZuPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy51aW50MTY9bmV3IFVpbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMubGVuZ3RoO3RoaXMucmVzaXplKHIrMSk7dmFyIG49MipyO3JldHVybiB0aGlzLnVpbnQxNltuKzBdPXQsdGhpcy51aW50MTZbbisxXT1lLHJ9LGV9KFlyKTtmbi5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50PTQscHIoIlN0cnVjdEFycmF5TGF5b3V0MnVpNCIsZm4pO3ZhciBwbj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMuZmxvYXQzMj1uZXcgRmxvYXQzMkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMubGVuZ3RoO3RoaXMucmVzaXplKHIrMSk7dmFyIG49MipyO3JldHVybiB0aGlzLmZsb2F0MzJbbiswXT10LHRoaXMuZmxvYXQzMltuKzFdPWUscn0sZX0oWXIpO3BuLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9OCxwcigiU3RydWN0QXJyYXlMYXlvdXQyZjgiLHBuKTt2YXIgZG49ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLmZsb2F0MzI9bmV3IEZsb2F0MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dGhpcy5sZW5ndGg7dGhpcy5yZXNpemUoaSsxKTt2YXIgYT00Kmk7cmV0dXJuIHRoaXMuZmxvYXQzMlthKzBdPXQsdGhpcy5mbG9hdDMyW2ErMV09ZSx0aGlzLmZsb2F0MzJbYSsyXT1yLHRoaXMuZmxvYXQzMlthKzNdPW4saX0sZX0oWXIpO2RuLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9MTYscHIoIlN0cnVjdEFycmF5TGF5b3V0NGYxNiIsZG4pO3ZhciBnbj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWU7dmFyIHI9e2FuY2hvclBvaW50WDp7Y29uZmlndXJhYmxlOiEwfSxhbmNob3JQb2ludFk6e2NvbmZpZ3VyYWJsZTohMH0seDE6e2NvbmZpZ3VyYWJsZTohMH0seTE6e2NvbmZpZ3VyYWJsZTohMH0seDI6e2NvbmZpZ3VyYWJsZTohMH0seTI6e2NvbmZpZ3VyYWJsZTohMH0sZmVhdHVyZUluZGV4Ontjb25maWd1cmFibGU6ITB9LHNvdXJjZUxheWVySW5kZXg6e2NvbmZpZ3VyYWJsZTohMH0sYnVja2V0SW5kZXg6e2NvbmZpZ3VyYWJsZTohMH0scmFkaXVzOntjb25maWd1cmFibGU6ITB9LHNpZ25lZERpc3RhbmNlRnJvbUFuY2hvcjp7Y29uZmlndXJhYmxlOiEwfSxhbmNob3JQb2ludDp7Y29uZmlndXJhYmxlOiEwfX07cmV0dXJuIHIuYW5jaG9yUG9pbnRYLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzBdfSxyLmFuY2hvclBvaW50WC5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMiswXT10fSxyLmFuY2hvclBvaW50WS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMisxXX0sci5hbmNob3JQb2ludFkuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMV09dH0sci54MS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMisyXX0sci54MS5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMisyXT10fSxyLnkxLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzNdfSxyLnkxLnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzNdPXR9LHIueDIuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrNF19LHIueDIuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrNF09dH0sci55Mi5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMis1XX0sci55Mi5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMis1XT10fSxyLmZlYXR1cmVJbmRleC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDMyW3RoaXMuX3BvczQrM119LHIuZmVhdHVyZUluZGV4LnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS51aW50MzJbdGhpcy5fcG9zNCszXT10fSxyLnNvdXJjZUxheWVySW5kZXguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzhdfSxyLnNvdXJjZUxheWVySW5kZXguc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzhdPXR9LHIuYnVja2V0SW5kZXguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzldfSxyLmJ1Y2tldEluZGV4LnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMis5XT10fSxyLnJhZGl1cy5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMisxMF19LHIucmFkaXVzLnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzEwXT10fSxyLnNpZ25lZERpc3RhbmNlRnJvbUFuY2hvci5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMisxMV19LHIuc2lnbmVkRGlzdGFuY2VGcm9tQW5jaG9yLnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzExXT10fSxyLmFuY2hvclBvaW50LmdldD1mdW5jdGlvbigpe3JldHVybiBuZXcgbCh0aGlzLmFuY2hvclBvaW50WCx0aGlzLmFuY2hvclBvaW50WSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLHIpLGV9KFdyKTtnbi5wcm90b3R5cGUuc2l6ZT0yNDt2YXIgbW49ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBnbih0aGlzLHQpfSxlfShubik7cHIoIkNvbGxpc2lvbkJveEFycmF5Iixtbik7dmFyIHZuPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX10JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZTt2YXIgcj17YW5jaG9yWDp7Y29uZmlndXJhYmxlOiEwfSxhbmNob3JZOntjb25maWd1cmFibGU6ITB9LGdseXBoU3RhcnRJbmRleDp7Y29uZmlndXJhYmxlOiEwfSxudW1HbHlwaHM6e2NvbmZpZ3VyYWJsZTohMH0sdmVydGV4U3RhcnRJbmRleDp7Y29uZmlndXJhYmxlOiEwfSxsaW5lU3RhcnRJbmRleDp7Y29uZmlndXJhYmxlOiEwfSxsaW5lTGVuZ3RoOntjb25maWd1cmFibGU6ITB9LHNlZ21lbnQ6e2NvbmZpZ3VyYWJsZTohMH0sbG93ZXJTaXplOntjb25maWd1cmFibGU6ITB9LHVwcGVyU2l6ZTp7Y29uZmlndXJhYmxlOiEwfSxsaW5lT2Zmc2V0WDp7Y29uZmlndXJhYmxlOiEwfSxsaW5lT2Zmc2V0WTp7Y29uZmlndXJhYmxlOiEwfSx3cml0aW5nTW9kZTp7Y29uZmlndXJhYmxlOiEwfSxoaWRkZW46e2NvbmZpZ3VyYWJsZTohMH19O3JldHVybiByLmFuY2hvclguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMF19LHIuYW5jaG9yWC5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMiswXT10fSxyLmFuY2hvclkuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMV19LHIuYW5jaG9yWS5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMisxXT10fSxyLmdseXBoU3RhcnRJbmRleC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrMl19LHIuZ2x5cGhTdGFydEluZGV4LnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMisyXT10fSxyLm51bUdseXBocy5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrM119LHIubnVtR2x5cGhzLnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMiszXT10fSxyLnZlcnRleFN0YXJ0SW5kZXguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQzMlt0aGlzLl9wb3M0KzJdfSxyLnZlcnRleFN0YXJ0SW5kZXguc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LnVpbnQzMlt0aGlzLl9wb3M0KzJdPXR9LHIubGluZVN0YXJ0SW5kZXguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQzMlt0aGlzLl9wb3M0KzNdfSxyLmxpbmVTdGFydEluZGV4LnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS51aW50MzJbdGhpcy5fcG9zNCszXT10fSxyLmxpbmVMZW5ndGguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQzMlt0aGlzLl9wb3M0KzRdfSxyLmxpbmVMZW5ndGguc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LnVpbnQzMlt0aGlzLl9wb3M0KzRdPXR9LHIuc2VnbWVudC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrMTBdfSxyLnNlZ21lbnQuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzEwXT10fSxyLmxvd2VyU2l6ZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrMTFdfSxyLmxvd2VyU2l6ZS5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrMTFdPXR9LHIudXBwZXJTaXplLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMisxMl19LHIudXBwZXJTaXplLnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMisxMl09dH0sci5saW5lT2Zmc2V0WC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuZmxvYXQzMlt0aGlzLl9wb3M0KzddfSxyLmxpbmVPZmZzZXRYLnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS5mbG9hdDMyW3RoaXMuX3BvczQrN109dH0sci5saW5lT2Zmc2V0WS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuZmxvYXQzMlt0aGlzLl9wb3M0KzhdfSxyLmxpbmVPZmZzZXRZLnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS5mbG9hdDMyW3RoaXMuX3BvczQrOF09dH0sci53cml0aW5nTW9kZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDhbdGhpcy5fcG9zMSszNl19LHIud3JpdGluZ01vZGUuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LnVpbnQ4W3RoaXMuX3BvczErMzZdPXR9LHIuaGlkZGVuLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50OFt0aGlzLl9wb3MxKzM3XX0sci5oaWRkZW4uc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LnVpbnQ4W3RoaXMuX3BvczErMzddPXR9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLHIpLGV9KFdyKTt2bi5wcm90b3R5cGUuc2l6ZT00MDt2YXIgeW49ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyB2bih0aGlzLHQpfSxlfShzbik7cHIoIlBsYWNlZFN5bWJvbEFycmF5Iix5bik7dmFyIHhuPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX10JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZTt2YXIgcj17b2Zmc2V0WDp7Y29uZmlndXJhYmxlOiEwfX07cmV0dXJuIHIub2Zmc2V0WC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuZmxvYXQzMlt0aGlzLl9wb3M0KzBdfSxyLm9mZnNldFguc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LmZsb2F0MzJbdGhpcy5fcG9zNCswXT10fSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSxyKSxlfShXcik7eG4ucHJvdG90eXBlLnNpemU9NDt2YXIgYm49ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXRvZmZzZXRYPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmZsb2F0MzJbMSp0KzBdfSxlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyB4bih0aGlzLHQpfSxlfShsbik7cHIoIkdseXBoT2Zmc2V0QXJyYXkiLGJuKTt2YXIgX249ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lO3ZhciByPXt4Ontjb25maWd1cmFibGU6ITB9LHk6e2NvbmZpZ3VyYWJsZTohMH0sdGlsZVVuaXREaXN0YW5jZUZyb21BbmNob3I6e2NvbmZpZ3VyYWJsZTohMH19O3JldHVybiByLnguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMF19LHIueC5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMiswXT10fSxyLnkuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMV19LHIueS5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMisxXT10fSxyLnRpbGVVbml0RGlzdGFuY2VGcm9tQW5jaG9yLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzJdfSxyLnRpbGVVbml0RGlzdGFuY2VGcm9tQW5jaG9yLnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzJdPXR9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLHIpLGV9KFdyKTtfbi5wcm90b3R5cGUuc2l6ZT02O3ZhciB3bj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldHg9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW50MTZbMyp0KzBdfSxlLnByb3RvdHlwZS5nZXR5PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmludDE2WzMqdCsxXX0sZS5wcm90b3R5cGUuZ2V0dGlsZVVuaXREaXN0YW5jZUZyb21BbmNob3I9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW50MTZbMyp0KzJdfSxlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBfbih0aGlzLHQpfSxlfShjbik7cHIoIlN5bWJvbExpbmVWZXJ0ZXhBcnJheSIsd24pO3ZhciBrbj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWU7dmFyIHI9e2ZlYXR1cmVJbmRleDp7Y29uZmlndXJhYmxlOiEwfSxzb3VyY2VMYXllckluZGV4Ontjb25maWd1cmFibGU6ITB9LGJ1Y2tldEluZGV4Ontjb25maWd1cmFibGU6ITB9fTtyZXR1cm4gci5mZWF0dXJlSW5kZXguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQzMlt0aGlzLl9wb3M0KzBdfSxyLmZlYXR1cmVJbmRleC5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkudWludDMyW3RoaXMuX3BvczQrMF09dH0sci5zb3VyY2VMYXllckluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMisyXX0sci5zb3VyY2VMYXllckluZGV4LnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMisyXT10fSxyLmJ1Y2tldEluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMiszXX0sci5idWNrZXRJbmRleC5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrM109dH0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsciksZX0oV3IpO2tuLnByb3RvdHlwZS5zaXplPTg7dmFyIE1uPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcga24odGhpcyx0KX0sZX0odW4pO3ByKCJGZWF0dXJlSW5kZXhBcnJheSIsTW4pO3ZhciBBbj1Ycihbe25hbWU6ImFfcG9zIixjb21wb25lbnRzOjIsdHlwZToiSW50MTYifV0sNCkubWVtYmVycyxUbj1mdW5jdGlvbih0KXt2b2lkIDA9PT10JiYodD1bXSksdGhpcy5zZWdtZW50cz10fTtUbi5wcm90b3R5cGUucHJlcGFyZVNlZ21lbnQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuc2VnbWVudHNbdGhpcy5zZWdtZW50cy5sZW5ndGgtMV07cmV0dXJuIHQ+VG4uTUFYX1ZFUlRFWF9BUlJBWV9MRU5HVEgmJl8oIk1heCB2ZXJ0aWNlcyBwZXIgc2VnbWVudCBpcyAiK1RuLk1BWF9WRVJURVhfQVJSQVlfTEVOR1RIKyI6IGJ1Y2tldCByZXF1ZXN0ZWQgIit0KSwoIW58fG4udmVydGV4TGVuZ3RoK3Q+VG4uTUFYX1ZFUlRFWF9BUlJBWV9MRU5HVEgpJiYobj17dmVydGV4T2Zmc2V0OmUubGVuZ3RoLHByaW1pdGl2ZU9mZnNldDpyLmxlbmd0aCx2ZXJ0ZXhMZW5ndGg6MCxwcmltaXRpdmVMZW5ndGg6MH0sdGhpcy5zZWdtZW50cy5wdXNoKG4pKSxufSxUbi5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2VnbWVudHN9LFRuLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTAsZT10aGlzLnNlZ21lbnRzO3Q8ZS5sZW5ndGg7dCs9MSl7dmFyIHI9ZVt0XTtmb3IodmFyIG4gaW4gci52YW9zKXIudmFvc1tuXS5kZXN0cm95KCl9fSxUbi5NQVhfVkVSVEVYX0FSUkFZX0xFTkdUSD1NYXRoLnBvdygyLDE2KS0xLHByKCJTZWdtZW50VmVjdG9yIixUbik7dmFyIFNuPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIDI1NioodD1mKE1hdGguZmxvb3IodCksMCwyNTUpKStmKE1hdGguZmxvb3IoZSksMCwyNTUpfTtmdW5jdGlvbiBFbih0KXtyZXR1cm5bU24oMjU1KnQuciwyNTUqdC5nKSxTbigyNTUqdC5iLDI1NSp0LmEpXX12YXIgQ249ZnVuY3Rpb24odCxlLHIpe3RoaXMudmFsdWU9dCx0aGlzLm5hbWU9ZSx0aGlzLnR5cGU9cix0aGlzLnN0YXRpc3RpY3M9e21heDotMS8wfX07Q24ucHJvdG90eXBlLmRlZmluZXM9ZnVuY3Rpb24oKXtyZXR1cm5bIiNkZWZpbmUgSEFTX1VOSUZPUk1fdV8iK3RoaXMubmFtZV19LENuLnByb3RvdHlwZS5wb3B1bGF0ZVBhaW50QXJyYXk9ZnVuY3Rpb24oKXt9LENuLnByb3RvdHlwZS51cGxvYWQ9ZnVuY3Rpb24oKXt9LENuLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7fSxDbi5wcm90b3R5cGUuc2V0VW5pZm9ybXM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9bi5jb25zdGFudE9yKHRoaXMudmFsdWUpLGE9dC5nbDsiY29sb3IiPT09dGhpcy50eXBlP2EudW5pZm9ybTRmKGUudW5pZm9ybXNbInVfIit0aGlzLm5hbWVdLGkucixpLmcsaS5iLGkuYSk6YS51bmlmb3JtMWYoZS51bmlmb3Jtc1sidV8iK3RoaXMubmFtZV0saSl9O3ZhciBMbj1mdW5jdGlvbih0LGUscil7dGhpcy5leHByZXNzaW9uPXQsdGhpcy5uYW1lPWUsdGhpcy50eXBlPXIsdGhpcy5zdGF0aXN0aWNzPXttYXg6LTEvMH07dmFyIG49ImNvbG9yIj09PXI/cG46bG47dGhpcy5wYWludFZlcnRleEF0dHJpYnV0ZXM9W3tuYW1lOiJhXyIrZSx0eXBlOiJGbG9hdDMyIixjb21wb25lbnRzOiJjb2xvciI9PT1yPzI6MSxvZmZzZXQ6MH1dLHRoaXMucGFpbnRWZXJ0ZXhBcnJheT1uZXcgbn07TG4ucHJvdG90eXBlLmRlZmluZXM9ZnVuY3Rpb24oKXtyZXR1cm5bXX0sTG4ucHJvdG90eXBlLnBvcHVsYXRlUGFpbnRBcnJheT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMucGFpbnRWZXJ0ZXhBcnJheSxuPXIubGVuZ3RoO3IucmVzZXJ2ZSh0KTt2YXIgaT10aGlzLmV4cHJlc3Npb24uZXZhbHVhdGUobmV3IExyKDApLGUpO2lmKCJjb2xvciI9PT10aGlzLnR5cGUpZm9yKHZhciBhPUVuKGkpLG89bjtvPHQ7bysrKXIuZW1wbGFjZUJhY2soYVswXSxhWzFdKTtlbHNle2Zvcih2YXIgcz1uO3M8dDtzKyspci5lbXBsYWNlQmFjayhpKTt0aGlzLnN0YXRpc3RpY3MubWF4PU1hdGgubWF4KHRoaXMuc3RhdGlzdGljcy5tYXgsaSl9fSxMbi5wcm90b3R5cGUudXBsb2FkPWZ1bmN0aW9uKHQpe3RoaXMucGFpbnRWZXJ0ZXhBcnJheSYmKHRoaXMucGFpbnRWZXJ0ZXhCdWZmZXI9dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5wYWludFZlcnRleEFycmF5LHRoaXMucGFpbnRWZXJ0ZXhBdHRyaWJ1dGVzKSl9LExuLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5wYWludFZlcnRleEJ1ZmZlciYmdGhpcy5wYWludFZlcnRleEJ1ZmZlci5kZXN0cm95KCl9LExuLnByb3RvdHlwZS5zZXRVbmlmb3Jtcz1mdW5jdGlvbih0LGUpe3QuZ2wudW5pZm9ybTFmKGUudW5pZm9ybXNbImFfIit0aGlzLm5hbWUrIl90Il0sMCl9O3ZhciB6bj1mdW5jdGlvbih0LGUscixuLGkpe3RoaXMuZXhwcmVzc2lvbj10LHRoaXMubmFtZT1lLHRoaXMudHlwZT1yLHRoaXMudXNlSW50ZWdlclpvb209bix0aGlzLnpvb209aSx0aGlzLnN0YXRpc3RpY3M9e21heDotMS8wfTt2YXIgYT0iY29sb3IiPT09cj9kbjpwbjt0aGlzLnBhaW50VmVydGV4QXR0cmlidXRlcz1be25hbWU6ImFfIitlLHR5cGU6IkZsb2F0MzIiLGNvbXBvbmVudHM6ImNvbG9yIj09PXI/NDoyLG9mZnNldDowfV0sdGhpcy5wYWludFZlcnRleEFycmF5PW5ldyBhfTt6bi5wcm90b3R5cGUuZGVmaW5lcz1mdW5jdGlvbigpe3JldHVybltdfSx6bi5wcm90b3R5cGUucG9wdWxhdGVQYWludEFycmF5PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5wYWludFZlcnRleEFycmF5LG49ci5sZW5ndGg7ci5yZXNlcnZlKHQpO3ZhciBpPXRoaXMuZXhwcmVzc2lvbi5ldmFsdWF0ZShuZXcgTHIodGhpcy56b29tKSxlKSxhPXRoaXMuZXhwcmVzc2lvbi5ldmFsdWF0ZShuZXcgTHIodGhpcy56b29tKzEpLGUpO2lmKCJjb2xvciI9PT10aGlzLnR5cGUpZm9yKHZhciBvPUVuKGkpLHM9RW4oYSksbD1uO2w8dDtsKyspci5lbXBsYWNlQmFjayhvWzBdLG9bMV0sc1swXSxzWzFdKTtlbHNle2Zvcih2YXIgYz1uO2M8dDtjKyspci5lbXBsYWNlQmFjayhpLGEpO3RoaXMuc3RhdGlzdGljcy5tYXg9TWF0aC5tYXgodGhpcy5zdGF0aXN0aWNzLm1heCxpLGEpfX0sem4ucHJvdG90eXBlLnVwbG9hZD1mdW5jdGlvbih0KXt0aGlzLnBhaW50VmVydGV4QXJyYXkmJih0aGlzLnBhaW50VmVydGV4QnVmZmVyPXQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMucGFpbnRWZXJ0ZXhBcnJheSx0aGlzLnBhaW50VmVydGV4QXR0cmlidXRlcykpfSx6bi5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMucGFpbnRWZXJ0ZXhCdWZmZXImJnRoaXMucGFpbnRWZXJ0ZXhCdWZmZXIuZGVzdHJveSgpfSx6bi5wcm90b3R5cGUuaW50ZXJwb2xhdGlvbkZhY3Rvcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy51c2VJbnRlZ2VyWm9vbT90aGlzLmV4cHJlc3Npb24uaW50ZXJwb2xhdGlvbkZhY3RvcihNYXRoLmZsb29yKHQpLHRoaXMuem9vbSx0aGlzLnpvb20rMSk6dGhpcy5leHByZXNzaW9uLmludGVycG9sYXRpb25GYWN0b3IodCx0aGlzLnpvb20sdGhpcy56b29tKzEpfSx6bi5wcm90b3R5cGUuc2V0VW5pZm9ybXM9ZnVuY3Rpb24odCxlLHIpe3QuZ2wudW5pZm9ybTFmKGUudW5pZm9ybXNbImFfIit0aGlzLm5hbWUrIl90Il0sdGhpcy5pbnRlcnBvbGF0aW9uRmFjdG9yKHIuem9vbSkpfTt2YXIgUG49ZnVuY3Rpb24oKXt0aGlzLmJpbmRlcnM9e30sdGhpcy5jYWNoZUtleT0iIix0aGlzLl9idWZmZXJzPVtdfTtQbi5jcmVhdGVEeW5hbWljPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1uZXcgUG4saT1bXTtmb3IodmFyIGEgaW4gdC5wYWludC5fdmFsdWVzKWlmKHIoYSkpe3ZhciBvPXQucGFpbnQuZ2V0KGEpO2lmKG8gaW5zdGFuY2VvZiBCciYmby5wcm9wZXJ0eS5zcGVjaWZpY2F0aW9uWyJwcm9wZXJ0eS1mdW5jdGlvbiJdKXt2YXIgcz1PbihhLHQudHlwZSksbD1vLnByb3BlcnR5LnNwZWNpZmljYXRpb24udHlwZSxjPW8ucHJvcGVydHkudXNlSW50ZWdlclpvb207ImNvbnN0YW50Ij09PW8udmFsdWUua2luZD8obi5iaW5kZXJzW2FdPW5ldyBDbihvLnZhbHVlLHMsbCksaS5wdXNoKCIvdV8iK3MpKToic291cmNlIj09PW8udmFsdWUua2luZD8obi5iaW5kZXJzW2FdPW5ldyBMbihvLnZhbHVlLHMsbCksaS5wdXNoKCIvYV8iK3MpKToobi5iaW5kZXJzW2FdPW5ldyB6bihvLnZhbHVlLHMsbCxjLGUpLGkucHVzaCgiL3pfIitzKSl9fXJldHVybiBuLmNhY2hlS2V5PWkuc29ydCgpLmpvaW4oIiIpLG59LFBuLnByb3RvdHlwZS5wb3B1bGF0ZVBhaW50QXJyYXlzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByIGluIHRoaXMuYmluZGVycyl0aGlzLmJpbmRlcnNbcl0ucG9wdWxhdGVQYWludEFycmF5KHQsZSl9LFBuLnByb3RvdHlwZS5kZWZpbmVzPWZ1bmN0aW9uKCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIHRoaXMuYmluZGVycyl0LnB1c2guYXBwbHkodCx0aGlzLmJpbmRlcnNbZV0uZGVmaW5lcygpKTtyZXR1cm4gdH0sUG4ucHJvdG90eXBlLnNldFVuaWZvcm1zPWZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaSBpbiB0aGlzLmJpbmRlcnMpdGhpcy5iaW5kZXJzW2ldLnNldFVuaWZvcm1zKHQsZSxuLHIuZ2V0KGkpKX0sUG4ucHJvdG90eXBlLmdldFBhaW50VmVydGV4QnVmZmVycz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9idWZmZXJzfSxQbi5wcm90b3R5cGUudXBsb2FkPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiB0aGlzLmJpbmRlcnMpdGhpcy5iaW5kZXJzW2VdLnVwbG9hZCh0KTt2YXIgcj1bXTtmb3IodmFyIG4gaW4gdGhpcy5iaW5kZXJzKXt2YXIgaT10aGlzLmJpbmRlcnNbbl07KGkgaW5zdGFuY2VvZiBMbnx8aSBpbnN0YW5jZW9mIHpuKSYmaS5wYWludFZlcnRleEJ1ZmZlciYmci5wdXNoKGkucGFpbnRWZXJ0ZXhCdWZmZXIpfXRoaXMuX2J1ZmZlcnM9cn0sUG4ucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcy5iaW5kZXJzKXRoaXMuYmluZGVyc1t0XS5kZXN0cm95KCl9O3ZhciBJbj1mdW5jdGlvbih0LGUscixuKXt2b2lkIDA9PT1uJiYobj1mdW5jdGlvbigpe3JldHVybiEwfSksdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnM9e307Zm9yKHZhciBpPTAsYT1lO2k8YS5sZW5ndGg7aSs9MSl7dmFyIG89YVtpXTt0aGlzLnByb2dyYW1Db25maWd1cmF0aW9uc1tvLmlkXT1Qbi5jcmVhdGVEeW5hbWljKG8scixuKSx0aGlzLnByb2dyYW1Db25maWd1cmF0aW9uc1tvLmlkXS5sYXlvdXRBdHRyaWJ1dGVzPXR9fTtmdW5jdGlvbiBPbih0LGUpe3JldHVybnsidGV4dC1vcGFjaXR5Ijoib3BhY2l0eSIsImljb24tb3BhY2l0eSI6Im9wYWNpdHkiLCJ0ZXh0LWNvbG9yIjoiZmlsbF9jb2xvciIsImljb24tY29sb3IiOiJmaWxsX2NvbG9yIiwidGV4dC1oYWxvLWNvbG9yIjoiaGFsb19jb2xvciIsImljb24taGFsby1jb2xvciI6ImhhbG9fY29sb3IiLCJ0ZXh0LWhhbG8tYmx1ciI6ImhhbG9fYmx1ciIsImljb24taGFsby1ibHVyIjoiaGFsb19ibHVyIiwidGV4dC1oYWxvLXdpZHRoIjoiaGFsb193aWR0aCIsImljb24taGFsby13aWR0aCI6ImhhbG9fd2lkdGgiLCJsaW5lLWdhcC13aWR0aCI6ImdhcHdpZHRoIn1bdF18fHQucmVwbGFjZShlKyItIiwiIikucmVwbGFjZSgvLS9nLCJfIil9SW4ucHJvdG90eXBlLnBvcHVsYXRlUGFpbnRBcnJheXM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIgaW4gdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMpdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnNbcl0ucG9wdWxhdGVQYWludEFycmF5cyh0LGUpfSxJbi5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9uc1t0XX0sSW4ucHJvdG90eXBlLnVwbG9hZD1mdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMpdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnNbZV0udXBsb2FkKHQpfSxJbi5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucyl0aGlzLnByb2dyYW1Db25maWd1cmF0aW9uc1t0XS5kZXN0cm95KCl9LHByKCJDb25zdGFudEJpbmRlciIsQ24pLHByKCJTb3VyY2VFeHByZXNzaW9uQmluZGVyIixMbikscHIoIkNvbXBvc2l0ZUV4cHJlc3Npb25CaW5kZXIiLHpuKSxwcigiUHJvZ3JhbUNvbmZpZ3VyYXRpb24iLFBuLHtvbWl0OlsiX2J1ZmZlcnMiXX0pLHByKCJQcm9ncmFtQ29uZmlndXJhdGlvblNldCIsSW4pO3ZhciBEbj04MTkyLFJuPSgxNix7bWluOi0xKk1hdGgucG93KDIsMTUpLG1heDpNYXRoLnBvdygyLDE1KS0xfSk7ZnVuY3Rpb24gQm4odCl7Zm9yKHZhciBlPURuL3QuZXh0ZW50LHI9dC5sb2FkR2VvbWV0cnkoKSxuPTA7bjxyLmxlbmd0aDtuKyspZm9yKHZhciBpPXJbbl0sYT0wO2E8aS5sZW5ndGg7YSsrKXt2YXIgbz1pW2FdO28ueD1NYXRoLnJvdW5kKG8ueCplKSxvLnk9TWF0aC5yb3VuZChvLnkqZSksKG8ueDxSbi5taW58fG8ueD5Sbi5tYXh8fG8ueTxSbi5taW58fG8ueT5Sbi5tYXgpJiZfKCJHZW9tZXRyeSBleGNlZWRzIGFsbG93ZWQgZXh0ZW50LCByZWR1Y2UgeW91ciB2ZWN0b3IgdGlsZSBidWZmZXIgc2l6ZSIpfXJldHVybiByfWZ1bmN0aW9uIEZuKHQsZSxyLG4saSl7dC5lbXBsYWNlQmFjaygyKmUrKG4rMSkvMiwyKnIrKGkrMSkvMil9dmFyIE5uPWZ1bmN0aW9uKHQpe3RoaXMuem9vbT10Lnpvb20sdGhpcy5vdmVyc2NhbGluZz10Lm92ZXJzY2FsaW5nLHRoaXMubGF5ZXJzPXQubGF5ZXJzLHRoaXMubGF5ZXJJZHM9dGhpcy5sYXllcnMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlkfSksdGhpcy5pbmRleD10LmluZGV4LHRoaXMubGF5b3V0VmVydGV4QXJyYXk9bmV3ICRyLHRoaXMuaW5kZXhBcnJheT1uZXcgaG4sdGhpcy5zZWdtZW50cz1uZXcgVG4sdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnM9bmV3IEluKEFuLHQubGF5ZXJzLHQuem9vbSl9O2Z1bmN0aW9uIGpuKHQsZSxyKXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGk9dFtuXTtpZihabihpLGUpKXJldHVybiEwO2lmKFduKGUsaSxyKSlyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBWbih0LGUpe2lmKDE9PT10Lmxlbmd0aCYmMT09PXRbMF0ubGVuZ3RoKXJldHVybiBYbihlLHRbMF1bMF0pO2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKWZvcih2YXIgbj1lW3JdLGk9MDtpPG4ubGVuZ3RoO2krKylpZihYbih0LG5baV0pKXJldHVybiEwO2Zvcih2YXIgYT0wO2E8dC5sZW5ndGg7YSsrKXtmb3IodmFyIG89dFthXSxzPTA7czxvLmxlbmd0aDtzKyspaWYoWG4oZSxvW3NdKSlyZXR1cm4hMDtmb3IodmFyIGw9MDtsPGUubGVuZ3RoO2wrKylpZihIbihvLGVbbF0pKXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIFVuKHQsZSxyKXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKylmb3IodmFyIGk9ZVtuXSxhPTA7YTx0Lmxlbmd0aDthKyspe3ZhciBvPXRbYV07aWYoby5sZW5ndGg+PTMpZm9yKHZhciBzPTA7czxpLmxlbmd0aDtzKyspaWYoWm4obyxpW3NdKSlyZXR1cm4hMDtpZihxbihvLGkscikpcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gcW4odCxlLHIpe2lmKHQubGVuZ3RoPjEpe2lmKEhuKHQsZSkpcmV0dXJuITA7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspaWYoV24oZVtuXSx0LHIpKXJldHVybiEwfWZvcih2YXIgaT0wO2k8dC5sZW5ndGg7aSsrKWlmKFduKHRbaV0sZSxyKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBIbih0LGUpe2lmKDA9PT10Lmxlbmd0aHx8MD09PWUubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgcj0wO3I8dC5sZW5ndGgtMTtyKyspZm9yKHZhciBuPXRbcl0saT10W3IrMV0sYT0wO2E8ZS5sZW5ndGgtMTthKyspaWYoR24obixpLGVbYV0sZVthKzFdKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBHbih0LGUscixuKXtyZXR1cm4gdyh0LHIsbikhPT13KGUscixuKSYmdyh0LGUscikhPT13KHQsZSxuKX1mdW5jdGlvbiBXbih0LGUscil7dmFyIG49cipyO2lmKDE9PT1lLmxlbmd0aClyZXR1cm4gdC5kaXN0U3FyKGVbMF0pPG47Zm9yKHZhciBpPTE7aTxlLmxlbmd0aDtpKyspaWYoWW4odCxlW2ktMV0sZVtpXSk8bilyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBZbih0LGUscil7dmFyIG49ZS5kaXN0U3FyKHIpO2lmKDA9PT1uKXJldHVybiB0LmRpc3RTcXIoZSk7dmFyIGk9KCh0LngtZS54KSooci54LWUueCkrKHQueS1lLnkpKihyLnktZS55KSkvbjtyZXR1cm4gaTwwP3QuZGlzdFNxcihlKTppPjE/dC5kaXN0U3FyKHIpOnQuZGlzdFNxcihyLnN1YihlKS5fbXVsdChpKS5fYWRkKGUpKX1mdW5jdGlvbiBYbih0LGUpe2Zvcih2YXIgcixuLGksYT0hMSxvPTA7bzx0Lmxlbmd0aDtvKyspZm9yKHZhciBzPTAsbD0ocj10W29dKS5sZW5ndGgtMTtzPHIubGVuZ3RoO2w9cysrKW49cltzXSxpPXJbbF0sbi55PmUueSE9aS55PmUueSYmZS54PChpLngtbi54KSooZS55LW4ueSkvKGkueS1uLnkpK24ueCYmKGE9IWEpO3JldHVybiBhfWZ1bmN0aW9uIFpuKHQsZSl7Zm9yKHZhciByPSExLG49MCxpPXQubGVuZ3RoLTE7bjx0Lmxlbmd0aDtpPW4rKyl7dmFyIGE9dFtuXSxvPXRbaV07YS55PmUueSE9by55PmUueSYmZS54PChvLngtYS54KSooZS55LWEueSkvKG8ueS1hLnkpK2EueCYmKHI9IXIpfXJldHVybiByfWZ1bmN0aW9uICRuKHQsZSxyKXt2YXIgbj1lLnBhaW50LmdldCh0KS52YWx1ZTtyZXR1cm4iY29uc3RhbnQiPT09bi5raW5kP24udmFsdWU6ci5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZ2V0KGUuaWQpLmJpbmRlcnNbdF0uc3RhdGlzdGljcy5tYXh9ZnVuY3Rpb24gSm4odCl7cmV0dXJuIE1hdGguc3FydCh0WzBdKnRbMF0rdFsxXSp0WzFdKX1mdW5jdGlvbiBLbih0LGUscixuLGkpe2lmKCFlWzBdJiYhZVsxXSlyZXR1cm4gdDt2YXIgYT1sLmNvbnZlcnQoZSk7InZpZXdwb3J0Ij09PXImJmEuX3JvdGF0ZSgtbik7Zm9yKHZhciBvPVtdLHM9MDtzPHQubGVuZ3RoO3MrKyl7Zm9yKHZhciBjPXRbc10sdT1bXSxoPTA7aDxjLmxlbmd0aDtoKyspdS5wdXNoKGNbaF0uc3ViKGEuX211bHQoaSkpKTtvLnB1c2godSl9cmV0dXJuIG99Tm4ucHJvdG90eXBlLnBvcHVsYXRlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsbj10O3I8bi5sZW5ndGg7cis9MSl7dmFyIGk9bltyXSxhPWkuZmVhdHVyZSxvPWkuaW5kZXgscz1pLnNvdXJjZUxheWVySW5kZXg7aWYodGhpcy5sYXllcnNbMF0uX2ZlYXR1cmVGaWx0ZXIobmV3IExyKHRoaXMuem9vbSksYSkpe3ZhciBsPUJuKGEpO3RoaXMuYWRkRmVhdHVyZShhLGwpLGUuZmVhdHVyZUluZGV4Lmluc2VydChhLGwsbyxzLHRoaXMuaW5kZXgpfX19LE5uLnByb3RvdHlwZS5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLmxheW91dFZlcnRleEFycmF5Lmxlbmd0aH0sTm4ucHJvdG90eXBlLnVwbG9hZD1mdW5jdGlvbih0KXt0aGlzLmxheW91dFZlcnRleEJ1ZmZlcj10LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLmxheW91dFZlcnRleEFycmF5LEFuKSx0aGlzLmluZGV4QnVmZmVyPXQuY3JlYXRlSW5kZXhCdWZmZXIodGhpcy5pbmRleEFycmF5KSx0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy51cGxvYWQodCl9LE5uLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXImJih0aGlzLmxheW91dFZlcnRleEJ1ZmZlci5kZXN0cm95KCksdGhpcy5pbmRleEJ1ZmZlci5kZXN0cm95KCksdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZGVzdHJveSgpLHRoaXMuc2VnbWVudHMuZGVzdHJveSgpKX0sTm4ucHJvdG90eXBlLmFkZEZlYXR1cmU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPWU7cjxuLmxlbmd0aDtyKz0xKWZvcih2YXIgaT0wLGE9bltyXTtpPGEubGVuZ3RoO2krPTEpe3ZhciBvPWFbaV0scz1vLngsbD1vLnk7aWYoIShzPDB8fHM+PURufHxsPDB8fGw+PURuKSl7dmFyIGM9dGhpcy5zZWdtZW50cy5wcmVwYXJlU2VnbWVudCg0LHRoaXMubGF5b3V0VmVydGV4QXJyYXksdGhpcy5pbmRleEFycmF5KSx1PWMudmVydGV4TGVuZ3RoO0ZuKHRoaXMubGF5b3V0VmVydGV4QXJyYXkscyxsLC0xLC0xKSxGbih0aGlzLmxheW91dFZlcnRleEFycmF5LHMsbCwxLC0xKSxGbih0aGlzLmxheW91dFZlcnRleEFycmF5LHMsbCwxLDEpLEZuKHRoaXMubGF5b3V0VmVydGV4QXJyYXkscyxsLC0xLDEpLHRoaXMuaW5kZXhBcnJheS5lbXBsYWNlQmFjayh1LHUrMSx1KzIpLHRoaXMuaW5kZXhBcnJheS5lbXBsYWNlQmFjayh1LHUrMyx1KzIpLGMudmVydGV4TGVuZ3RoKz00LGMucHJpbWl0aXZlTGVuZ3RoKz0yfX10aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy5wb3B1bGF0ZVBhaW50QXJyYXlzKHRoaXMubGF5b3V0VmVydGV4QXJyYXkubGVuZ3RoLHQpfSxwcigiQ2lyY2xlQnVja2V0IixObix7b21pdDpbImxheWVycyJdfSk7dmFyIFFuPXtwYWludDpuZXcgcXIoeyJjaXJjbGUtcmFkaXVzIjpuZXcganIoSS5wYWludF9jaXJjbGVbImNpcmNsZS1yYWRpdXMiXSksImNpcmNsZS1jb2xvciI6bmV3IGpyKEkucGFpbnRfY2lyY2xlWyJjaXJjbGUtY29sb3IiXSksImNpcmNsZS1ibHVyIjpuZXcganIoSS5wYWludF9jaXJjbGVbImNpcmNsZS1ibHVyIl0pLCJjaXJjbGUtb3BhY2l0eSI6bmV3IGpyKEkucGFpbnRfY2lyY2xlWyJjaXJjbGUtb3BhY2l0eSJdKSwiY2lyY2xlLXRyYW5zbGF0ZSI6bmV3IE5yKEkucGFpbnRfY2lyY2xlWyJjaXJjbGUtdHJhbnNsYXRlIl0pLCJjaXJjbGUtdHJhbnNsYXRlLWFuY2hvciI6bmV3IE5yKEkucGFpbnRfY2lyY2xlWyJjaXJjbGUtdHJhbnNsYXRlLWFuY2hvciJdKSwiY2lyY2xlLXBpdGNoLXNjYWxlIjpuZXcgTnIoSS5wYWludF9jaXJjbGVbImNpcmNsZS1waXRjaC1zY2FsZSJdKSwiY2lyY2xlLXBpdGNoLWFsaWdubWVudCI6bmV3IE5yKEkucGFpbnRfY2lyY2xlWyJjaXJjbGUtcGl0Y2gtYWxpZ25tZW50Il0pLCJjaXJjbGUtc3Ryb2tlLXdpZHRoIjpuZXcganIoSS5wYWludF9jaXJjbGVbImNpcmNsZS1zdHJva2Utd2lkdGgiXSksImNpcmNsZS1zdHJva2UtY29sb3IiOm5ldyBqcihJLnBhaW50X2NpcmNsZVsiY2lyY2xlLXN0cm9rZS1jb2xvciJdKSwiY2lyY2xlLXN0cm9rZS1vcGFjaXR5IjpuZXcganIoSS5wYWludF9jaXJjbGVbImNpcmNsZS1zdHJva2Utb3BhY2l0eSJdKX0pfSx0aT1pKGZ1bmN0aW9uKHQsZSl7dmFyIHI7dC5leHBvcnRzPSgocj1uZXcgRmxvYXQzMkFycmF5KDMpKVswXT0wLHJbMV09MCxyWzJdPTAsZnVuY3Rpb24oKXt2YXIgdD1uZXcgRmxvYXQzMkFycmF5KDQpO3RbMF09MCx0WzFdPTAsdFsyXT0wLHRbM109MH0oKSx7dmVjMzp7dHJhbnNmb3JtTWF0MzpmdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdO3JldHVybiB0WzBdPW4qclswXStpKnJbM10rYSpyWzZdLHRbMV09bipyWzFdK2kqcls0XSthKnJbN10sdFsyXT1uKnJbMl0raSpyWzVdK2Eqcls4XSx0fX0sdmVjNDp7dHJhbnNmb3JtTWF0NDpmdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdLG89ZVszXTtyZXR1cm4gdFswXT1yWzBdKm4rcls0XSppK3JbOF0qYStyWzEyXSpvLHRbMV09clsxXSpuK3JbNV0qaStyWzldKmErclsxM10qbyx0WzJdPXJbMl0qbityWzZdKmkrclsxMF0qYStyWzE0XSpvLHRbM109clszXSpuK3JbN10qaStyWzExXSphK3JbMTVdKm8sdH19LG1hdDI6e2NyZWF0ZTpmdW5jdGlvbigpe3ZhciB0PW5ldyBGbG9hdDMyQXJyYXkoNCk7cmV0dXJuIHRbMF09MSx0WzFdPTAsdFsyXT0wLHRbM109MSx0fSxyb3RhdGU6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPWVbM10scz1NYXRoLnNpbihyKSxsPU1hdGguY29zKHIpO3JldHVybiB0WzBdPW4qbCthKnMsdFsxXT1pKmwrbypzLHRbMl09biotcythKmwsdFszXT1pKi1zK28qbCx0fSxzY2FsZTpmdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdLG89ZVszXSxzPXJbMF0sbD1yWzFdO3JldHVybiB0WzBdPW4qcyx0WzFdPWkqcyx0WzJdPWEqbCx0WzNdPW8qbCx0fX0sbWF0Mzp7Y3JlYXRlOmZ1bmN0aW9uKCl7dmFyIHQ9bmV3IEZsb2F0MzJBcnJheSg5KTtyZXR1cm4gdFswXT0xLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MSx0WzVdPTAsdFs2XT0wLHRbN109MCx0WzhdPTEsdH0sZnJvbVJvdGF0aW9uOmZ1bmN0aW9uKHQsZSl7dmFyIHI9TWF0aC5zaW4oZSksbj1NYXRoLmNvcyhlKTtyZXR1cm4gdFswXT1uLHRbMV09cix0WzJdPTAsdFszXT0tcix0WzRdPW4sdFs1XT0wLHRbNl09MCx0WzddPTAsdFs4XT0xLHR9fSxtYXQ0OntjcmVhdGU6ZnVuY3Rpb24oKXt2YXIgdD1uZXcgRmxvYXQzMkFycmF5KDE2KTtyZXR1cm4gdFswXT0xLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MCx0WzVdPTEsdFs2XT0wLHRbN109MCx0WzhdPTAsdFs5XT0wLHRbMTBdPTEsdFsxMV09MCx0WzEyXT0wLHRbMTNdPTAsdFsxNF09MCx0WzE1XT0xLHR9LGlkZW50aXR5OmZ1bmN0aW9uKHQpe3JldHVybiB0WzBdPTEsdFsxXT0wLHRbMl09MCx0WzNdPTAsdFs0XT0wLHRbNV09MSx0WzZdPTAsdFs3XT0wLHRbOF09MCx0WzldPTAsdFsxMF09MSx0WzExXT0wLHRbMTJdPTAsdFsxM109MCx0WzE0XT0wLHRbMTVdPTEsdH0sdHJhbnNsYXRlOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGEsbyxzLGwsYyx1LGgsZixwLGQsZz1yWzBdLG09clsxXSx2PXJbMl07cmV0dXJuIGU9PT10Pyh0WzEyXT1lWzBdKmcrZVs0XSptK2VbOF0qditlWzEyXSx0WzEzXT1lWzFdKmcrZVs1XSptK2VbOV0qditlWzEzXSx0WzE0XT1lWzJdKmcrZVs2XSptK2VbMTBdKnYrZVsxNF0sdFsxNV09ZVszXSpnK2VbN10qbStlWzExXSp2K2VbMTVdKToobj1lWzBdLGk9ZVsxXSxhPWVbMl0sbz1lWzNdLHM9ZVs0XSxsPWVbNV0sYz1lWzZdLHU9ZVs3XSxoPWVbOF0sZj1lWzldLHA9ZVsxMF0sZD1lWzExXSx0WzBdPW4sdFsxXT1pLHRbMl09YSx0WzNdPW8sdFs0XT1zLHRbNV09bCx0WzZdPWMsdFs3XT11LHRbOF09aCx0WzldPWYsdFsxMF09cCx0WzExXT1kLHRbMTJdPW4qZytzKm0raCp2K2VbMTJdLHRbMTNdPWkqZytsKm0rZip2K2VbMTNdLHRbMTRdPWEqZytjKm0rcCp2K2VbMTRdLHRbMTVdPW8qZyt1Km0rZCp2K2VbMTVdKSx0fSxzY2FsZTpmdW5jdGlvbih0LGUscil7dmFyIG49clswXSxpPXJbMV0sYT1yWzJdO3JldHVybiB0WzBdPWVbMF0qbix0WzFdPWVbMV0qbix0WzJdPWVbMl0qbix0WzNdPWVbM10qbix0WzRdPWVbNF0qaSx0WzVdPWVbNV0qaSx0WzZdPWVbNl0qaSx0WzddPWVbN10qaSx0WzhdPWVbOF0qYSx0WzldPWVbOV0qYSx0WzEwXT1lWzEwXSphLHRbMTFdPWVbMTFdKmEsdFsxMl09ZVsxMl0sdFsxM109ZVsxM10sdFsxNF09ZVsxNF0sdFsxNV09ZVsxNV0sdH0sbXVsdGlwbHk6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPWVbM10scz1lWzRdLGw9ZVs1XSxjPWVbNl0sdT1lWzddLGg9ZVs4XSxmPWVbOV0scD1lWzEwXSxkPWVbMTFdLGc9ZVsxMl0sbT1lWzEzXSx2PWVbMTRdLHk9ZVsxNV0seD1yWzBdLGI9clsxXSxfPXJbMl0sdz1yWzNdO3JldHVybiB0WzBdPXgqbitiKnMrXypoK3cqZyx0WzFdPXgqaStiKmwrXypmK3cqbSx0WzJdPXgqYStiKmMrXypwK3cqdix0WzNdPXgqbytiKnUrXypkK3cqeSx4PXJbNF0sYj1yWzVdLF89cls2XSx3PXJbN10sdFs0XT14Km4rYipzK18qaCt3KmcsdFs1XT14KmkrYipsK18qZit3Km0sdFs2XT14KmErYipjK18qcCt3KnYsdFs3XT14Km8rYip1K18qZCt3KnkseD1yWzhdLGI9cls5XSxfPXJbMTBdLHc9clsxMV0sdFs4XT14Km4rYipzK18qaCt3KmcsdFs5XT14KmkrYipsK18qZit3Km0sdFsxMF09eCphK2IqYytfKnArdyp2LHRbMTFdPXgqbytiKnUrXypkK3cqeSx4PXJbMTJdLGI9clsxM10sXz1yWzE0XSx3PXJbMTVdLHRbMTJdPXgqbitiKnMrXypoK3cqZyx0WzEzXT14KmkrYipsK18qZit3Km0sdFsxNF09eCphK2IqYytfKnArdyp2LHRbMTVdPXgqbytiKnUrXypkK3cqeSx0fSxwZXJzcGVjdGl2ZTpmdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPTEvTWF0aC50YW4oZS8yKSxvPTEvKG4taSk7cmV0dXJuIHRbMF09YS9yLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MCx0WzVdPWEsdFs2XT0wLHRbN109MCx0WzhdPTAsdFs5XT0wLHRbMTBdPShpK24pKm8sdFsxMV09LTEsdFsxMl09MCx0WzEzXT0wLHRbMTRdPTIqaSpuKm8sdFsxNV09MCx0fSxyb3RhdGVYOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1NYXRoLnNpbihyKSxpPU1hdGguY29zKHIpLGE9ZVs0XSxvPWVbNV0scz1lWzZdLGw9ZVs3XSxjPWVbOF0sdT1lWzldLGg9ZVsxMF0sZj1lWzExXTtyZXR1cm4gZSE9PXQmJih0WzBdPWVbMF0sdFsxXT1lWzFdLHRbMl09ZVsyXSx0WzNdPWVbM10sdFsxMl09ZVsxMl0sdFsxM109ZVsxM10sdFsxNF09ZVsxNF0sdFsxNV09ZVsxNV0pLHRbNF09YSppK2Mqbix0WzVdPW8qaSt1Km4sdFs2XT1zKmkraCpuLHRbN109bCppK2Yqbix0WzhdPWMqaS1hKm4sdFs5XT11KmktbypuLHRbMTBdPWgqaS1zKm4sdFsxMV09ZippLWwqbix0fSxyb3RhdGVaOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1NYXRoLnNpbihyKSxpPU1hdGguY29zKHIpLGE9ZVswXSxvPWVbMV0scz1lWzJdLGw9ZVszXSxjPWVbNF0sdT1lWzVdLGg9ZVs2XSxmPWVbN107cmV0dXJuIGUhPT10JiYodFs4XT1lWzhdLHRbOV09ZVs5XSx0WzEwXT1lWzEwXSx0WzExXT1lWzExXSx0WzEyXT1lWzEyXSx0WzEzXT1lWzEzXSx0WzE0XT1lWzE0XSx0WzE1XT1lWzE1XSksdFswXT1hKmkrYypuLHRbMV09byppK3Uqbix0WzJdPXMqaStoKm4sdFszXT1sKmkrZipuLHRbNF09YyppLWEqbix0WzVdPXUqaS1vKm4sdFs2XT1oKmktcypuLHRbN109ZippLWwqbix0fSxpbnZlcnQ6ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXSxpPWVbMl0sYT1lWzNdLG89ZVs0XSxzPWVbNV0sbD1lWzZdLGM9ZVs3XSx1PWVbOF0saD1lWzldLGY9ZVsxMF0scD1lWzExXSxkPWVbMTJdLGc9ZVsxM10sbT1lWzE0XSx2PWVbMTVdLHk9cipzLW4qbyx4PXIqbC1pKm8sYj1yKmMtYSpvLF89bipsLWkqcyx3PW4qYy1hKnMsaz1pKmMtYSpsLE09dSpnLWgqZCxBPXUqbS1mKmQsVD11KnYtcCpkLFM9aCptLWYqZyxFPWgqdi1wKmcsQz1mKnYtcCptLEw9eSpDLXgqRStiKlMrXypULXcqQStrKk07cmV0dXJuIEw/KEw9MS9MLHRbMF09KHMqQy1sKkUrYypTKSpMLHRbMV09KGkqRS1uKkMtYSpTKSpMLHRbMl09KGcqay1tKncrdipfKSpMLHRbM109KGYqdy1oKmstcCpfKSpMLHRbNF09KGwqVC1vKkMtYypBKSpMLHRbNV09KHIqQy1pKlQrYSpBKSpMLHRbNl09KG0qYi1kKmstdip4KSpMLHRbN109KHUqay1mKmIrcCp4KSpMLHRbOF09KG8qRS1zKlQrYypNKSpMLHRbOV09KG4qVC1yKkUtYSpNKSpMLHRbMTBdPShkKnctZypiK3YqeSkqTCx0WzExXT0oaCpiLXUqdy1wKnkpKkwsdFsxMl09KHMqQS1vKlMtbCpNKSpMLHRbMTNdPShyKlMtbipBK2kqTSkqTCx0WzE0XT0oZyp4LWQqXy1tKnkpKkwsdFsxNV09KHUqXy1oKngrZip5KSpMLHQpOm51bGx9LG9ydGhvOmZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe3ZhciBzPTEvKGUtciksbD0xLyhuLWkpLGM9MS8oYS1vKTtyZXR1cm4gdFswXT0tMipzLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MCx0WzVdPS0yKmwsdFs2XT0wLHRbN109MCx0WzhdPTAsdFs5XT0wLHRbMTBdPTIqYyx0WzExXT0wLHRbMTJdPShlK3IpKnMsdFsxM109KGkrbikqbCx0WzE0XT0obythKSpjLHRbMTVdPTEsdH19fSl9KSxlaT0odGkudmVjMyx0aS52ZWM0KSxyaT0odGkubWF0Mix0aS5tYXQzLHRpLm1hdDQpLG5pPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dC5jYWxsKHRoaXMsZSxRbil9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmNyZWF0ZUJ1Y2tldD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IE5uKHQpfSxlLnByb3RvdHlwZS5xdWVyeVJhZGl1cz1mdW5jdGlvbih0KXt2YXIgZT10O3JldHVybiAkbigiY2lyY2xlLXJhZGl1cyIsdGhpcyxlKSskbigiY2lyY2xlLXN0cm9rZS13aWR0aCIsdGhpcyxlKStKbih0aGlzLnBhaW50LmdldCgiY2lyY2xlLXRyYW5zbGF0ZSIpKX0sZS5wcm90b3R5cGUucXVlcnlJbnRlcnNlY3RzRmVhdHVyZT1mdW5jdGlvbih0LGUscixuLGksYSxvKXtmb3IodmFyIHM9S24odCx0aGlzLnBhaW50LmdldCgiY2lyY2xlLXRyYW5zbGF0ZSIpLHRoaXMucGFpbnQuZ2V0KCJjaXJjbGUtdHJhbnNsYXRlLWFuY2hvciIpLGkuYW5nbGUsYSksbD10aGlzLnBhaW50LmdldCgiY2lyY2xlLXJhZGl1cyIpLmV2YWx1YXRlKGUpK3RoaXMucGFpbnQuZ2V0KCJjaXJjbGUtc3Ryb2tlLXdpZHRoIikuZXZhbHVhdGUoZSksYz0ibWFwIj09PXRoaXMucGFpbnQuZ2V0KCJjaXJjbGUtcGl0Y2gtYWxpZ25tZW50IiksdT1jP3M6ZnVuY3Rpb24odCxlLHIpe3JldHVybiBzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGlpKHQsZSxyKX0pfSl9KDAsbyxpKSxoPWM/bCphOmwsZj0wLHA9cjtmPHAubGVuZ3RoO2YrPTEpZm9yKHZhciBkPTAsZz1wW2ZdO2Q8Zy5sZW5ndGg7ZCs9MSl7dmFyIG09Z1tkXSx2PWM/bTppaShtLG8saSkseT1oLHg9ZWkudHJhbnNmb3JtTWF0NChbXSxbbS54LG0ueSwwLDFdLG8pO2lmKCJ2aWV3cG9ydCI9PT10aGlzLnBhaW50LmdldCgiY2lyY2xlLXBpdGNoLXNjYWxlIikmJiJtYXAiPT09dGhpcy5wYWludC5nZXQoImNpcmNsZS1waXRjaC1hbGlnbm1lbnQiKT95Kj14WzNdL2kuY2FtZXJhVG9DZW50ZXJEaXN0YW5jZToibWFwIj09PXRoaXMucGFpbnQuZ2V0KCJjaXJjbGUtcGl0Y2gtc2NhbGUiKSYmInZpZXdwb3J0Ij09PXRoaXMucGFpbnQuZ2V0KCJjaXJjbGUtcGl0Y2gtYWxpZ25tZW50IikmJih5Kj1pLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2UveFszXSksam4odSx2LHkpKXJldHVybiEwfXJldHVybiExfSxlfShIcik7ZnVuY3Rpb24gaWkodCxlLHIpe3ZhciBuPWVpLnRyYW5zZm9ybU1hdDQoW10sW3QueCx0LnksMCwxXSxlKTtyZXR1cm4gbmV3IGwoKG5bMF0vblszXSsxKSpyLndpZHRoKi41LChuWzFdL25bM10rMSkqci5oZWlnaHQqLjUpfXZhciBhaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGV9KE5uKTtmdW5jdGlvbiBvaSh0LGUscixuKXt2YXIgaT1lLndpZHRoLGE9ZS5oZWlnaHQ7aWYobil7aWYobi5sZW5ndGghPT1pKmEqcil0aHJvdyBuZXcgUmFuZ2VFcnJvcigibWlzbWF0Y2hlZCBpbWFnZSBzaXplIil9ZWxzZSBuPW5ldyBVaW50OEFycmF5KGkqYSpyKTtyZXR1cm4gdC53aWR0aD1pLHQuaGVpZ2h0PWEsdC5kYXRhPW4sdH1mdW5jdGlvbiBzaSh0LGUscil7dmFyIG49ZS53aWR0aCxpPWUuaGVpZ2h0O2lmKG4hPT10LndpZHRofHxpIT09dC5oZWlnaHQpe3ZhciBhPW9pKHt9LHt3aWR0aDpuLGhlaWdodDppfSxyKTtsaSh0LGEse3g6MCx5OjB9LHt4OjAseTowfSx7d2lkdGg6TWF0aC5taW4odC53aWR0aCxuKSxoZWlnaHQ6TWF0aC5taW4odC5oZWlnaHQsaSl9LHIpLHQud2lkdGg9bix0LmhlaWdodD1pLHQuZGF0YT1hLmRhdGF9fWZ1bmN0aW9uIGxpKHQsZSxyLG4saSxhKXtpZigwPT09aS53aWR0aHx8MD09PWkuaGVpZ2h0KXJldHVybiBlO2lmKGkud2lkdGg+dC53aWR0aHx8aS5oZWlnaHQ+dC5oZWlnaHR8fHIueD50LndpZHRoLWkud2lkdGh8fHIueT50LmhlaWdodC1pLmhlaWdodCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib3V0IG9mIHJhbmdlIHNvdXJjZSBjb29yZGluYXRlcyBmb3IgaW1hZ2UgY29weSIpO2lmKGkud2lkdGg+ZS53aWR0aHx8aS5oZWlnaHQ+ZS5oZWlnaHR8fG4ueD5lLndpZHRoLWkud2lkdGh8fG4ueT5lLmhlaWdodC1pLmhlaWdodCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib3V0IG9mIHJhbmdlIGRlc3RpbmF0aW9uIGNvb3JkaW5hdGVzIGZvciBpbWFnZSBjb3B5Iik7Zm9yKHZhciBvPXQuZGF0YSxzPWUuZGF0YSxsPTA7bDxpLmhlaWdodDtsKyspZm9yKHZhciBjPSgoci55K2wpKnQud2lkdGgrci54KSphLHU9KChuLnkrbCkqZS53aWR0aCtuLngpKmEsaD0wO2g8aS53aWR0aCphO2grKylzW3UraF09b1tjK2hdO3JldHVybiBlfXByKCJIZWF0bWFwQnVja2V0IixhaSx7b21pdDpbImxheWVycyJdfSk7dmFyIGNpPWZ1bmN0aW9uKHQsZSl7b2kodGhpcyx0LDEsZSl9O2NpLnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24odCl7c2kodGhpcyx0LDEpfSxjaS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGNpKHt3aWR0aDp0aGlzLndpZHRoLGhlaWdodDp0aGlzLmhlaWdodH0sbmV3IFVpbnQ4QXJyYXkodGhpcy5kYXRhKSl9LGNpLmNvcHk9ZnVuY3Rpb24odCxlLHIsbixpKXtsaSh0LGUscixuLGksMSl9O3ZhciB1aT1mdW5jdGlvbih0LGUpe29pKHRoaXMsdCw0LGUpfTt1aS5wcm90b3R5cGUucmVzaXplPWZ1bmN0aW9uKHQpe3NpKHRoaXMsdCw0KX0sdWkucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB1aSh7d2lkdGg6dGhpcy53aWR0aCxoZWlnaHQ6dGhpcy5oZWlnaHR9LG5ldyBVaW50OEFycmF5KHRoaXMuZGF0YSkpfSx1aS5jb3B5PWZ1bmN0aW9uKHQsZSxyLG4saSl7bGkodCxlLHIsbixpLDQpfSxwcigiQWxwaGFJbWFnZSIsY2kpLHByKCJSR0JBSW1hZ2UiLHVpKTt2YXIgaGk9e3BhaW50Om5ldyBxcih7ImhlYXRtYXAtcmFkaXVzIjpuZXcganIoSS5wYWludF9oZWF0bWFwWyJoZWF0bWFwLXJhZGl1cyJdKSwiaGVhdG1hcC13ZWlnaHQiOm5ldyBqcihJLnBhaW50X2hlYXRtYXBbImhlYXRtYXAtd2VpZ2h0Il0pLCJoZWF0bWFwLWludGVuc2l0eSI6bmV3IE5yKEkucGFpbnRfaGVhdG1hcFsiaGVhdG1hcC1pbnRlbnNpdHkiXSksImhlYXRtYXAtY29sb3IiOm5ldyBVcihJLnBhaW50X2hlYXRtYXBbImhlYXRtYXAtY29sb3IiXSksImhlYXRtYXAtb3BhY2l0eSI6bmV3IE5yKEkucGFpbnRfaGVhdG1hcFsiaGVhdG1hcC1vcGFjaXR5Il0pfSl9O2Z1bmN0aW9uIGZpKHQsZSl7Zm9yKHZhciByPW5ldyBVaW50OEFycmF5KDEwMjQpLG49e30saT0wLGE9MDtpPDI1NjtpKyssYSs9NCl7bltlXT1pLzI1NTt2YXIgbz10LmV2YWx1YXRlKG4pO3JbYSswXT1NYXRoLmZsb29yKDI1NSpvLnIvby5hKSxyW2ErMV09TWF0aC5mbG9vcigyNTUqby5nL28uYSksclthKzJdPU1hdGguZmxvb3IoMjU1Km8uYi9vLmEpLHJbYSszXT1NYXRoLmZsb29yKDI1NSpvLmEpfXJldHVybiBuZXcgdWkoe3dpZHRoOjI1NixoZWlnaHQ6MX0scil9dmFyIHBpPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dC5jYWxsKHRoaXMsZSxoaSksdGhpcy5fdXBkYXRlQ29sb3JSYW1wKCl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmNyZWF0ZUJ1Y2tldD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGFpKHQpfSxlLnByb3RvdHlwZS5zZXRQYWludFByb3BlcnR5PWZ1bmN0aW9uKGUscixuKXt0LnByb3RvdHlwZS5zZXRQYWludFByb3BlcnR5LmNhbGwodGhpcyxlLHIsbiksImhlYXRtYXAtY29sb3IiPT09ZSYmdGhpcy5fdXBkYXRlQ29sb3JSYW1wKCl9LGUucHJvdG90eXBlLl91cGRhdGVDb2xvclJhbXA9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl90cmFuc2l0aW9uYWJsZVBhaW50Ll92YWx1ZXNbImhlYXRtYXAtY29sb3IiXS52YWx1ZS5leHByZXNzaW9uO3RoaXMuY29sb3JSYW1wPWZpKHQsImhlYXRtYXBEZW5zaXR5IiksdGhpcy5jb2xvclJhbXBUZXh0dXJlPW51bGx9LGUucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbigpe3RoaXMuaGVhdG1hcEZibyYmKHRoaXMuaGVhdG1hcEZiby5kZXN0cm95KCksdGhpcy5oZWF0bWFwRmJvPW51bGwpfSxlLnByb3RvdHlwZS5xdWVyeVJhZGl1cz1mdW5jdGlvbigpe3JldHVybiAwfSxlLnByb3RvdHlwZS5xdWVyeUludGVyc2VjdHNGZWF0dXJlPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGUucHJvdG90eXBlLmhhc09mZnNjcmVlblBhc3M9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMucGFpbnQuZ2V0KCJoZWF0bWFwLW9wYWNpdHkiKSYmIm5vbmUiIT09dGhpcy52aXNpYmlsaXR5fSxlfShIciksZGk9e3BhaW50Om5ldyBxcih7ImhpbGxzaGFkZS1pbGx1bWluYXRpb24tZGlyZWN0aW9uIjpuZXcgTnIoSS5wYWludF9oaWxsc2hhZGVbImhpbGxzaGFkZS1pbGx1bWluYXRpb24tZGlyZWN0aW9uIl0pLCJoaWxsc2hhZGUtaWxsdW1pbmF0aW9uLWFuY2hvciI6bmV3IE5yKEkucGFpbnRfaGlsbHNoYWRlWyJoaWxsc2hhZGUtaWxsdW1pbmF0aW9uLWFuY2hvciJdKSwiaGlsbHNoYWRlLWV4YWdnZXJhdGlvbiI6bmV3IE5yKEkucGFpbnRfaGlsbHNoYWRlWyJoaWxsc2hhZGUtZXhhZ2dlcmF0aW9uIl0pLCJoaWxsc2hhZGUtc2hhZG93LWNvbG9yIjpuZXcgTnIoSS5wYWludF9oaWxsc2hhZGVbImhpbGxzaGFkZS1zaGFkb3ctY29sb3IiXSksImhpbGxzaGFkZS1oaWdobGlnaHQtY29sb3IiOm5ldyBOcihJLnBhaW50X2hpbGxzaGFkZVsiaGlsbHNoYWRlLWhpZ2hsaWdodC1jb2xvciJdKSwiaGlsbHNoYWRlLWFjY2VudC1jb2xvciI6bmV3IE5yKEkucGFpbnRfaGlsbHNoYWRlWyJoaWxsc2hhZGUtYWNjZW50LWNvbG9yIl0pfSl9LGdpPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dC5jYWxsKHRoaXMsZSxkaSl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmhhc09mZnNjcmVlblBhc3M9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMucGFpbnQuZ2V0KCJoaWxsc2hhZGUtZXhhZ2dlcmF0aW9uIikmJiJub25lIiE9PXRoaXMudmlzaWJpbGl0eX0sZX0oSHIpLG1pPVhyKFt7bmFtZToiYV9wb3MiLGNvbXBvbmVudHM6Mix0eXBlOiJJbnQxNiJ9XSw0KS5tZW1iZXJzLHZpPXhpLHlpPXhpO2Z1bmN0aW9uIHhpKHQsZSxyKXtyPXJ8fDI7dmFyIG4saSxhLG8scyxsLGMsdT1lJiZlLmxlbmd0aCxoPXU/ZVswXSpyOnQubGVuZ3RoLGY9YmkodCwwLGgsciwhMCkscD1bXTtpZighZilyZXR1cm4gcDtpZih1JiYoZj1mdW5jdGlvbih0LGUscixuKXt2YXIgaSxhLG8scz1bXTtmb3IoaT0wLGE9ZS5sZW5ndGg7aTxhO2krKykobz1iaSh0LGVbaV0qbixpPGEtMT9lW2krMV0qbjp0Lmxlbmd0aCxuLCExKSk9PT1vLm5leHQmJihvLnN0ZWluZXI9ITApLHMucHVzaChMaShvKSk7Zm9yKHMuc29ydChTaSksaT0wO2k8cy5sZW5ndGg7aSsrKUVpKHNbaV0scikscj1faShyLHIubmV4dCk7cmV0dXJuIHJ9KHQsZSxmLHIpKSx0Lmxlbmd0aD44MCpyKXtuPWE9dFswXSxpPW89dFsxXTtmb3IodmFyIGQ9cjtkPGg7ZCs9cikocz10W2RdKTxuJiYobj1zKSwobD10W2QrMV0pPGkmJihpPWwpLHM+YSYmKGE9cyksbD5vJiYobz1sKTtjPTAhPT0oYz1NYXRoLm1heChhLW4sby1pKSk/MS9jOjB9cmV0dXJuIHdpKGYscCxyLG4saSxjKSxwfWZ1bmN0aW9uIGJpKHQsZSxyLG4saSl7dmFyIGEsbztpZihpPT09VmkodCxlLHIsbik+MClmb3IoYT1lO2E8cjthKz1uKW89RmkoYSx0W2FdLHRbYSsxXSxvKTtlbHNlIGZvcihhPXItbjthPj1lO2EtPW4pbz1GaShhLHRbYV0sdFthKzFdLG8pO3JldHVybiBvJiZPaShvLG8ubmV4dCkmJihOaShvKSxvPW8ubmV4dCksb31mdW5jdGlvbiBfaSh0LGUpe2lmKCF0KXJldHVybiB0O2V8fChlPXQpO3ZhciByLG49dDtkb3tpZihyPSExLG4uc3RlaW5lcnx8IU9pKG4sbi5uZXh0KSYmMCE9PUlpKG4ucHJldixuLG4ubmV4dCkpbj1uLm5leHQ7ZWxzZXtpZihOaShuKSwobj1lPW4ucHJldik9PT1uLm5leHQpYnJlYWs7cj0hMH19d2hpbGUocnx8biE9PWUpO3JldHVybiBlfWZ1bmN0aW9uIHdpKHQsZSxyLG4saSxhLG8pe2lmKHQpeyFvJiZhJiZmdW5jdGlvbih0LGUscixuKXt2YXIgaT10O2Rve251bGw9PT1pLnomJihpLno9Q2koaS54LGkueSxlLHIsbikpLGkucHJldlo9aS5wcmV2LGkubmV4dFo9aS5uZXh0LGk9aS5uZXh0fXdoaWxlKGkhPT10KTtpLnByZXZaLm5leHRaPW51bGwsaS5wcmV2Wj1udWxsLGZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpLGEsbyxzLGwsYz0xO2Rve2ZvcihyPXQsdD1udWxsLGE9bnVsbCxvPTA7cjspe2ZvcihvKyssbj1yLHM9MCxlPTA7ZTxjJiYocysrLG49bi5uZXh0Wik7ZSsrKTtmb3IobD1jO3M+MHx8bD4wJiZuOykwIT09cyYmKDA9PT1sfHwhbnx8ci56PD1uLnopPyhpPXIscj1yLm5leHRaLHMtLSk6KGk9bixuPW4ubmV4dFosbC0tKSxhP2EubmV4dFo9aTp0PWksaS5wcmV2Wj1hLGE9aTtyPW59YS5uZXh0Wj1udWxsLGMqPTJ9d2hpbGUobz4xKX0oaSl9KHQsbixpLGEpO2Zvcih2YXIgcyxsLGM9dDt0LnByZXYhPT10Lm5leHQ7KWlmKHM9dC5wcmV2LGw9dC5uZXh0LGE/TWkodCxuLGksYSk6a2kodCkpZS5wdXNoKHMuaS9yKSxlLnB1c2godC5pL3IpLGUucHVzaChsLmkvciksTmkodCksdD1sLm5leHQsYz1sLm5leHQ7ZWxzZSBpZigodD1sKT09PWMpe28/MT09PW8/d2kodD1BaSh0LGUsciksZSxyLG4saSxhLDIpOjI9PT1vJiZUaSh0LGUscixuLGksYSk6d2koX2kodCksZSxyLG4saSxhLDEpO2JyZWFrfX19ZnVuY3Rpb24ga2kodCl7dmFyIGU9dC5wcmV2LHI9dCxuPXQubmV4dDtpZihJaShlLHIsbik+PTApcmV0dXJuITE7Zm9yKHZhciBpPXQubmV4dC5uZXh0O2khPT10LnByZXY7KXtpZih6aShlLngsZS55LHIueCxyLnksbi54LG4ueSxpLngsaS55KSYmSWkoaS5wcmV2LGksaS5uZXh0KT49MClyZXR1cm4hMTtpPWkubmV4dH1yZXR1cm4hMH1mdW5jdGlvbiBNaSh0LGUscixuKXt2YXIgaT10LnByZXYsYT10LG89dC5uZXh0O2lmKElpKGksYSxvKT49MClyZXR1cm4hMTtmb3IodmFyIHM9aS54PGEueD9pLng8by54P2kueDpvLng6YS54PG8ueD9hLng6by54LGw9aS55PGEueT9pLnk8by55P2kueTpvLnk6YS55PG8ueT9hLnk6by55LGM9aS54PmEueD9pLng+by54P2kueDpvLng6YS54Pm8ueD9hLng6by54LHU9aS55PmEueT9pLnk+by55P2kueTpvLnk6YS55Pm8ueT9hLnk6by55LGg9Q2kocyxsLGUscixuKSxmPUNpKGMsdSxlLHIsbikscD10LnByZXZaLGQ9dC5uZXh0WjtwJiZwLno+PWgmJmQmJmQuejw9Zjspe2lmKHAhPT10LnByZXYmJnAhPT10Lm5leHQmJnppKGkueCxpLnksYS54LGEueSxvLngsby55LHAueCxwLnkpJiZJaShwLnByZXYscCxwLm5leHQpPj0wKXJldHVybiExO2lmKHA9cC5wcmV2WixkIT09dC5wcmV2JiZkIT09dC5uZXh0JiZ6aShpLngsaS55LGEueCxhLnksby54LG8ueSxkLngsZC55KSYmSWkoZC5wcmV2LGQsZC5uZXh0KT49MClyZXR1cm4hMTtkPWQubmV4dFp9Zm9yKDtwJiZwLno+PWg7KXtpZihwIT09dC5wcmV2JiZwIT09dC5uZXh0JiZ6aShpLngsaS55LGEueCxhLnksby54LG8ueSxwLngscC55KSYmSWkocC5wcmV2LHAscC5uZXh0KT49MClyZXR1cm4hMTtwPXAucHJldlp9Zm9yKDtkJiZkLno8PWY7KXtpZihkIT09dC5wcmV2JiZkIT09dC5uZXh0JiZ6aShpLngsaS55LGEueCxhLnksby54LG8ueSxkLngsZC55KSYmSWkoZC5wcmV2LGQsZC5uZXh0KT49MClyZXR1cm4hMTtkPWQubmV4dFp9cmV0dXJuITB9ZnVuY3Rpb24gQWkodCxlLHIpe3ZhciBuPXQ7ZG97dmFyIGk9bi5wcmV2LGE9bi5uZXh0Lm5leHQ7IU9pKGksYSkmJkRpKGksbixuLm5leHQsYSkmJlJpKGksYSkmJlJpKGEsaSkmJihlLnB1c2goaS5pL3IpLGUucHVzaChuLmkvciksZS5wdXNoKGEuaS9yKSxOaShuKSxOaShuLm5leHQpLG49dD1hKSxuPW4ubmV4dH13aGlsZShuIT09dCk7cmV0dXJuIG59ZnVuY3Rpb24gVGkodCxlLHIsbixpLGEpe3ZhciBvPXQ7ZG97Zm9yKHZhciBzPW8ubmV4dC5uZXh0O3MhPT1vLnByZXY7KXtpZihvLmkhPT1zLmkmJlBpKG8scykpe3ZhciBsPUJpKG8scyk7cmV0dXJuIG89X2kobyxvLm5leHQpLGw9X2kobCxsLm5leHQpLHdpKG8sZSxyLG4saSxhKSx2b2lkIHdpKGwsZSxyLG4saSxhKX1zPXMubmV4dH1vPW8ubmV4dH13aGlsZShvIT09dCl9ZnVuY3Rpb24gU2kodCxlKXtyZXR1cm4gdC54LWUueH1mdW5jdGlvbiBFaSh0LGUpe2lmKGU9ZnVuY3Rpb24odCxlKXt2YXIgcixuPWUsaT10LngsYT10Lnksbz0tMS8wO2Rve2lmKGE8PW4ueSYmYT49bi5uZXh0LnkmJm4ubmV4dC55IT09bi55KXt2YXIgcz1uLngrKGEtbi55KSoobi5uZXh0Lngtbi54KS8obi5uZXh0Lnktbi55KTtpZihzPD1pJiZzPm8pe2lmKG89cyxzPT09aSl7aWYoYT09PW4ueSlyZXR1cm4gbjtpZihhPT09bi5uZXh0LnkpcmV0dXJuIG4ubmV4dH1yPW4ueDxuLm5leHQueD9uOm4ubmV4dH19bj1uLm5leHR9d2hpbGUobiE9PWUpO2lmKCFyKXJldHVybiBudWxsO2lmKGk9PT1vKXJldHVybiByLnByZXY7dmFyIGwsYz1yLHU9ci54LGg9ci55LGY9MS8wO2ZvcihuPXIubmV4dDtuIT09YzspaT49bi54JiZuLng+PXUmJmkhPT1uLngmJnppKGE8aD9pOm8sYSx1LGgsYTxoP286aSxhLG4ueCxuLnkpJiYoKGw9TWF0aC5hYnMoYS1uLnkpLyhpLW4ueCkpPGZ8fGw9PT1mJiZuLng+ci54KSYmUmkobix0KSYmKHI9bixmPWwpLG49bi5uZXh0O3JldHVybiByfSh0LGUpKXt2YXIgcj1CaShlLHQpO19pKHIsci5uZXh0KX19ZnVuY3Rpb24gQ2kodCxlLHIsbixpKXtyZXR1cm4odD0xNDMxNjU1NzY1JigodD04NTg5OTM0NTkmKCh0PTI1MjY0NTEzNSYoKHQ9MTY3MTE5MzUmKCh0PTMyNzY3Kih0LXIpKmkpfHQ8PDgpKXx0PDw0KSl8dDw8MikpfHQ8PDEpKXwoZT0xNDMxNjU1NzY1JigoZT04NTg5OTM0NTkmKChlPTI1MjY0NTEzNSYoKGU9MTY3MTE5MzUmKChlPTMyNzY3KihlLW4pKmkpfGU8PDgpKXxlPDw0KSl8ZTw8MikpfGU8PDEpKTw8MX1mdW5jdGlvbiBMaSh0KXt2YXIgZT10LHI9dDtkb3tlLng8ci54JiYocj1lKSxlPWUubmV4dH13aGlsZShlIT09dCk7cmV0dXJuIHJ9ZnVuY3Rpb24gemkodCxlLHIsbixpLGEsbyxzKXtyZXR1cm4oaS1vKSooZS1zKS0odC1vKSooYS1zKT49MCYmKHQtbykqKG4tcyktKHItbykqKGUtcyk+PTAmJihyLW8pKihhLXMpLShpLW8pKihuLXMpPj0wfWZ1bmN0aW9uIFBpKHQsZSl7cmV0dXJuIHQubmV4dC5pIT09ZS5pJiZ0LnByZXYuaSE9PWUuaSYmIWZ1bmN0aW9uKHQsZSl7dmFyIHI9dDtkb3tpZihyLmkhPT10LmkmJnIubmV4dC5pIT09dC5pJiZyLmkhPT1lLmkmJnIubmV4dC5pIT09ZS5pJiZEaShyLHIubmV4dCx0LGUpKXJldHVybiEwO3I9ci5uZXh0fXdoaWxlKHIhPT10KTtyZXR1cm4hMX0odCxlKSYmUmkodCxlKSYmUmkoZSx0KSYmZnVuY3Rpb24odCxlKXt2YXIgcj10LG49ITEsaT0odC54K2UueCkvMixhPSh0LnkrZS55KS8yO2Rve3IueT5hIT1yLm5leHQueT5hJiZyLm5leHQueSE9PXIueSYmaTwoci5uZXh0Lngtci54KSooYS1yLnkpLyhyLm5leHQueS1yLnkpK3IueCYmKG49IW4pLHI9ci5uZXh0fXdoaWxlKHIhPT10KTtyZXR1cm4gbn0odCxlKX1mdW5jdGlvbiBJaSh0LGUscil7cmV0dXJuKGUueS10LnkpKihyLngtZS54KS0oZS54LXQueCkqKHIueS1lLnkpfWZ1bmN0aW9uIE9pKHQsZSl7cmV0dXJuIHQueD09PWUueCYmdC55PT09ZS55fWZ1bmN0aW9uIERpKHQsZSxyLG4pe3JldHVybiEhKE9pKHQsZSkmJk9pKHIsbil8fE9pKHQsbikmJk9pKHIsZSkpfHxJaSh0LGUscik+MCE9SWkodCxlLG4pPjAmJklpKHIsbix0KT4wIT1JaShyLG4sZSk+MH1mdW5jdGlvbiBSaSh0LGUpe3JldHVybiBJaSh0LnByZXYsdCx0Lm5leHQpPDA/SWkodCxlLHQubmV4dCk+PTAmJklpKHQsdC5wcmV2LGUpPj0wOklpKHQsZSx0LnByZXYpPDB8fElpKHQsdC5uZXh0LGUpPDB9ZnVuY3Rpb24gQmkodCxlKXt2YXIgcj1uZXcgamkodC5pLHQueCx0LnkpLG49bmV3IGppKGUuaSxlLngsZS55KSxpPXQubmV4dCxhPWUucHJldjtyZXR1cm4gdC5uZXh0PWUsZS5wcmV2PXQsci5uZXh0PWksaS5wcmV2PXIsbi5uZXh0PXIsci5wcmV2PW4sYS5uZXh0PW4sbi5wcmV2PWEsbn1mdW5jdGlvbiBGaSh0LGUscixuKXt2YXIgaT1uZXcgamkodCxlLHIpO3JldHVybiBuPyhpLm5leHQ9bi5uZXh0LGkucHJldj1uLG4ubmV4dC5wcmV2PWksbi5uZXh0PWkpOihpLnByZXY9aSxpLm5leHQ9aSksaX1mdW5jdGlvbiBOaSh0KXt0Lm5leHQucHJldj10LnByZXYsdC5wcmV2Lm5leHQ9dC5uZXh0LHQucHJldlomJih0LnByZXZaLm5leHRaPXQubmV4dFopLHQubmV4dFomJih0Lm5leHRaLnByZXZaPXQucHJldlopfWZ1bmN0aW9uIGppKHQsZSxyKXt0aGlzLmk9dCx0aGlzLng9ZSx0aGlzLnk9cix0aGlzLnByZXY9bnVsbCx0aGlzLm5leHQ9bnVsbCx0aGlzLno9bnVsbCx0aGlzLnByZXZaPW51bGwsdGhpcy5uZXh0Wj1udWxsLHRoaXMuc3RlaW5lcj0hMX1mdW5jdGlvbiBWaSh0LGUscixuKXtmb3IodmFyIGk9MCxhPWUsbz1yLW47YTxyO2ErPW4paSs9KHRbb10tdFthXSkqKHRbYSsxXSt0W28rMV0pLG89YTtyZXR1cm4gaX14aS5kZXZpYXRpb249ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9ZSYmZS5sZW5ndGgsYT1pP2VbMF0qcjp0Lmxlbmd0aCxvPU1hdGguYWJzKFZpKHQsMCxhLHIpKTtpZihpKWZvcih2YXIgcz0wLGw9ZS5sZW5ndGg7czxsO3MrKyl7dmFyIGM9ZVtzXSpyLHU9czxsLTE/ZVtzKzFdKnI6dC5sZW5ndGg7by09TWF0aC5hYnMoVmkodCxjLHUscikpfXZhciBoPTA7Zm9yKHM9MDtzPG4ubGVuZ3RoO3MrPTMpe3ZhciBmPW5bc10qcixwPW5bcysxXSpyLGQ9bltzKzJdKnI7aCs9TWF0aC5hYnMoKHRbZl0tdFtkXSkqKHRbcCsxXS10W2YrMV0pLSh0W2ZdLXRbcF0pKih0W2QrMV0tdFtmKzFdKSl9cmV0dXJuIDA9PT1vJiYwPT09aD8wOk1hdGguYWJzKChoLW8pL28pfSx4aS5mbGF0dGVuPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10WzBdWzBdLmxlbmd0aCxyPXt2ZXJ0aWNlczpbXSxob2xlczpbXSxkaW1lbnNpb25zOmV9LG49MCxpPTA7aTx0Lmxlbmd0aDtpKyspe2Zvcih2YXIgYT0wO2E8dFtpXS5sZW5ndGg7YSsrKWZvcih2YXIgbz0wO288ZTtvKyspci52ZXJ0aWNlcy5wdXNoKHRbaV1bYV1bb10pO2k+MCYmKG4rPXRbaS0xXS5sZW5ndGgsci5ob2xlcy5wdXNoKG4pKX1yZXR1cm4gcn0sdmkuZGVmYXVsdD15aTt2YXIgVWk9SGkscWk9SGk7ZnVuY3Rpb24gSGkodCxlLHIsbixpKXshZnVuY3Rpb24gdChlLHIsbixpLGEpe2Zvcig7aT5uOyl7aWYoaS1uPjYwMCl7dmFyIG89aS1uKzEscz1yLW4rMSxsPU1hdGgubG9nKG8pLGM9LjUqTWF0aC5leHAoMipsLzMpLHU9LjUqTWF0aC5zcXJ0KGwqYyooby1jKS9vKSoocy1vLzI8MD8tMToxKTt0KGUscixNYXRoLm1heChuLE1hdGguZmxvb3Ioci1zKmMvbyt1KSksTWF0aC5taW4oaSxNYXRoLmZsb29yKHIrKG8tcykqYy9vK3UpKSxhKX12YXIgaD1lW3JdLGY9bixwPWk7Zm9yKEdpKGUsbixyKSxhKGVbaV0saCk+MCYmR2koZSxuLGkpO2Y8cDspe2ZvcihHaShlLGYscCksZisrLHAtLTthKGVbZl0saCk8MDspZisrO2Zvcig7YShlW3BdLGgpPjA7KXAtLX0wPT09YShlW25dLGgpP0dpKGUsbixwKTpHaShlLCsrcCxpKSxwPD1yJiYobj1wKzEpLHI8PXAmJihpPXAtMSl9fSh0LGUscnx8MCxufHx0Lmxlbmd0aC0xLGl8fFdpKX1mdW5jdGlvbiBHaSh0LGUscil7dmFyIG49dFtlXTt0W2VdPXRbcl0sdFtyXT1ufWZ1bmN0aW9uIFdpKHQsZSl7cmV0dXJuIHQ8ZT8tMTp0PmU/MTowfWZ1bmN0aW9uIFlpKHQsZSl7dmFyIHI9dC5sZW5ndGg7aWYocjw9MSlyZXR1cm5bdF07Zm9yKHZhciBuLGksYT1bXSxvPTA7bzxyO28rKyl7dmFyIHM9ayh0W29dKTswIT09cyYmKHRbb10uYXJlYT1NYXRoLmFicyhzKSx2b2lkIDA9PT1pJiYoaT1zPDApLGk9PT1zPDA/KG4mJmEucHVzaChuKSxuPVt0W29dXSk6bi5wdXNoKHRbb10pKX1pZihuJiZhLnB1c2gobiksZT4xKWZvcih2YXIgbD0wO2w8YS5sZW5ndGg7bCsrKWFbbF0ubGVuZ3RoPD1lfHwoVWkoYVtsXSxlLDEsYVtsXS5sZW5ndGgtMSxYaSksYVtsXT1hW2xdLnNsaWNlKDAsZSkpO3JldHVybiBhfWZ1bmN0aW9uIFhpKHQsZSl7cmV0dXJuIGUuYXJlYS10LmFyZWF9VWkuZGVmYXVsdD1xaTt2YXIgWmk9ZnVuY3Rpb24odCl7dGhpcy56b29tPXQuem9vbSx0aGlzLm92ZXJzY2FsaW5nPXQub3ZlcnNjYWxpbmcsdGhpcy5sYXllcnM9dC5sYXllcnMsdGhpcy5sYXllcklkcz10aGlzLmxheWVycy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuaWR9KSx0aGlzLmluZGV4PXQuaW5kZXgsdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheT1uZXcgJHIsdGhpcy5pbmRleEFycmF5PW5ldyBobix0aGlzLmluZGV4QXJyYXkyPW5ldyBmbix0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucz1uZXcgSW4obWksdC5sYXllcnMsdC56b29tKSx0aGlzLnNlZ21lbnRzPW5ldyBUbix0aGlzLnNlZ21lbnRzMj1uZXcgVG59O1ppLnByb3RvdHlwZS5wb3B1bGF0ZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLG49dDtyPG4ubGVuZ3RoO3IrPTEpe3ZhciBpPW5bcl0sYT1pLmZlYXR1cmUsbz1pLmluZGV4LHM9aS5zb3VyY2VMYXllckluZGV4O2lmKHRoaXMubGF5ZXJzWzBdLl9mZWF0dXJlRmlsdGVyKG5ldyBMcih0aGlzLnpvb20pLGEpKXt2YXIgbD1CbihhKTt0aGlzLmFkZEZlYXR1cmUoYSxsKSxlLmZlYXR1cmVJbmRleC5pbnNlcnQoYSxsLG8scyx0aGlzLmluZGV4KX19fSxaaS5wcm90b3R5cGUuaXNFbXB0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGh9LFppLnByb3RvdHlwZS51cGxvYWQ9ZnVuY3Rpb24odCl7dGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXI9dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSxtaSksdGhpcy5pbmRleEJ1ZmZlcj10LmNyZWF0ZUluZGV4QnVmZmVyKHRoaXMuaW5kZXhBcnJheSksdGhpcy5pbmRleEJ1ZmZlcjI9dC5jcmVhdGVJbmRleEJ1ZmZlcih0aGlzLmluZGV4QXJyYXkyKSx0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy51cGxvYWQodCl9LFppLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXImJih0aGlzLmxheW91dFZlcnRleEJ1ZmZlci5kZXN0cm95KCksdGhpcy5pbmRleEJ1ZmZlci5kZXN0cm95KCksdGhpcy5pbmRleEJ1ZmZlcjIuZGVzdHJveSgpLHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmRlc3Ryb3koKSx0aGlzLnNlZ21lbnRzLmRlc3Ryb3koKSx0aGlzLnNlZ21lbnRzMi5kZXN0cm95KCkpfSxaaS5wcm90b3R5cGUuYWRkRmVhdHVyZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLG49WWkoZSw1MDApO3I8bi5sZW5ndGg7cis9MSl7Zm9yKHZhciBpPW5bcl0sYT0wLG89MCxzPWk7bzxzLmxlbmd0aDtvKz0xKWErPXNbb10ubGVuZ3RoO2Zvcih2YXIgbD10aGlzLnNlZ21lbnRzLnByZXBhcmVTZWdtZW50KGEsdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSx0aGlzLmluZGV4QXJyYXkpLGM9bC52ZXJ0ZXhMZW5ndGgsdT1bXSxoPVtdLGY9MCxwPWk7ZjxwLmxlbmd0aDtmKz0xKXt2YXIgZD1wW2ZdO2lmKDAhPT1kLmxlbmd0aCl7ZCE9PWlbMF0mJmgucHVzaCh1Lmxlbmd0aC8yKTt2YXIgZz10aGlzLnNlZ21lbnRzMi5wcmVwYXJlU2VnbWVudChkLmxlbmd0aCx0aGlzLmxheW91dFZlcnRleEFycmF5LHRoaXMuaW5kZXhBcnJheTIpLG09Zy52ZXJ0ZXhMZW5ndGg7dGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5lbXBsYWNlQmFjayhkWzBdLngsZFswXS55KSx0aGlzLmluZGV4QXJyYXkyLmVtcGxhY2VCYWNrKG0rZC5sZW5ndGgtMSxtKSx1LnB1c2goZFswXS54KSx1LnB1c2goZFswXS55KTtmb3IodmFyIHY9MTt2PGQubGVuZ3RoO3YrKyl0aGlzLmxheW91dFZlcnRleEFycmF5LmVtcGxhY2VCYWNrKGRbdl0ueCxkW3ZdLnkpLHRoaXMuaW5kZXhBcnJheTIuZW1wbGFjZUJhY2sobSt2LTEsbSt2KSx1LnB1c2goZFt2XS54KSx1LnB1c2goZFt2XS55KTtnLnZlcnRleExlbmd0aCs9ZC5sZW5ndGgsZy5wcmltaXRpdmVMZW5ndGgrPWQubGVuZ3RofX1mb3IodmFyIHk9dmkodSxoKSx4PTA7eDx5Lmxlbmd0aDt4Kz0zKXRoaXMuaW5kZXhBcnJheS5lbXBsYWNlQmFjayhjK3lbeF0sYyt5W3grMV0sYyt5W3grMl0pO2wudmVydGV4TGVuZ3RoKz1hLGwucHJpbWl0aXZlTGVuZ3RoKz15Lmxlbmd0aC8zfXRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnBvcHVsYXRlUGFpbnRBcnJheXModGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGgsdCl9LHByKCJGaWxsQnVja2V0IixaaSx7b21pdDpbImxheWVycyJdfSk7dmFyICRpPXtwYWludDpuZXcgcXIoeyJmaWxsLWFudGlhbGlhcyI6bmV3IE5yKEkucGFpbnRfZmlsbFsiZmlsbC1hbnRpYWxpYXMiXSksImZpbGwtb3BhY2l0eSI6bmV3IGpyKEkucGFpbnRfZmlsbFsiZmlsbC1vcGFjaXR5Il0pLCJmaWxsLWNvbG9yIjpuZXcganIoSS5wYWludF9maWxsWyJmaWxsLWNvbG9yIl0pLCJmaWxsLW91dGxpbmUtY29sb3IiOm5ldyBqcihJLnBhaW50X2ZpbGxbImZpbGwtb3V0bGluZS1jb2xvciJdKSwiZmlsbC10cmFuc2xhdGUiOm5ldyBOcihJLnBhaW50X2ZpbGxbImZpbGwtdHJhbnNsYXRlIl0pLCJmaWxsLXRyYW5zbGF0ZS1hbmNob3IiOm5ldyBOcihJLnBhaW50X2ZpbGxbImZpbGwtdHJhbnNsYXRlLWFuY2hvciJdKSwiZmlsbC1wYXR0ZXJuIjpuZXcgVnIoSS5wYWludF9maWxsWyJmaWxsLXBhdHRlcm4iXSl9KX0sSmk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt0LmNhbGwodGhpcyxlLCRpKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUucmVjYWxjdWxhdGU9ZnVuY3Rpb24odCl7dGhpcy5wYWludD10aGlzLl90cmFuc2l0aW9uaW5nUGFpbnQucG9zc2libHlFdmFsdWF0ZSh0KTt2YXIgZT10aGlzLnBhaW50Ll92YWx1ZXNbImZpbGwtb3V0bGluZS1jb2xvciJdOyJjb25zdGFudCI9PT1lLnZhbHVlLmtpbmQmJnZvaWQgMD09PWUudmFsdWUudmFsdWUmJih0aGlzLnBhaW50Ll92YWx1ZXNbImZpbGwtb3V0bGluZS1jb2xvciJdPXRoaXMucGFpbnQuX3ZhbHVlc1siZmlsbC1jb2xvciJdKX0sZS5wcm90b3R5cGUuY3JlYXRlQnVja2V0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgWmkodCl9LGUucHJvdG90eXBlLnF1ZXJ5UmFkaXVzPWZ1bmN0aW9uKCl7cmV0dXJuIEpuKHRoaXMucGFpbnQuZ2V0KCJmaWxsLXRyYW5zbGF0ZSIpKX0sZS5wcm90b3R5cGUucXVlcnlJbnRlcnNlY3RzRmVhdHVyZT1mdW5jdGlvbih0LGUscixuLGksYSl7cmV0dXJuIFZuKEtuKHQsdGhpcy5wYWludC5nZXQoImZpbGwtdHJhbnNsYXRlIiksdGhpcy5wYWludC5nZXQoImZpbGwtdHJhbnNsYXRlLWFuY2hvciIpLGkuYW5nbGUsYSkscil9LGV9KEhyKSxLaT1Ycihbe25hbWU6ImFfcG9zIixjb21wb25lbnRzOjIsdHlwZToiSW50MTYifSx7bmFtZToiYV9ub3JtYWxfZWQiLGNvbXBvbmVudHM6NCx0eXBlOiJJbnQxNiJ9XSw0KS5tZW1iZXJzLFFpPU1hdGgucG93KDIsMTMpO2Z1bmN0aW9uIHRhKHQsZSxyLG4saSxhLG8scyl7dC5lbXBsYWNlQmFjayhlLHIsMipNYXRoLmZsb29yKG4qUWkpK28saSpRaSoyLGEqUWkqMixNYXRoLnJvdW5kKHMpKX12YXIgZWE9ZnVuY3Rpb24odCl7dGhpcy56b29tPXQuem9vbSx0aGlzLm92ZXJzY2FsaW5nPXQub3ZlcnNjYWxpbmcsdGhpcy5sYXllcnM9dC5sYXllcnMsdGhpcy5sYXllcklkcz10aGlzLmxheWVycy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuaWR9KSx0aGlzLmluZGV4PXQuaW5kZXgsdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheT1uZXcgS3IsdGhpcy5pbmRleEFycmF5PW5ldyBobix0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucz1uZXcgSW4oS2ksdC5sYXllcnMsdC56b29tKSx0aGlzLnNlZ21lbnRzPW5ldyBUbn07ZnVuY3Rpb24gcmEodCxlKXtyZXR1cm4gdC54PT09ZS54JiYodC54PDB8fHQueD5Ebil8fHQueT09PWUueSYmKHQueTwwfHx0Lnk+RG4pfWZ1bmN0aW9uIG5hKHQpe3JldHVybiB0LmV2ZXJ5KGZ1bmN0aW9uKHQpe3JldHVybiB0Lng8MH0pfHx0LmV2ZXJ5KGZ1bmN0aW9uKHQpe3JldHVybiB0Lng+RG59KXx8dC5ldmVyeShmdW5jdGlvbih0KXtyZXR1cm4gdC55PDB9KXx8dC5ldmVyeShmdW5jdGlvbih0KXtyZXR1cm4gdC55PkRufSl9ZWEucHJvdG90eXBlLnBvcHVsYXRlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsbj10O3I8bi5sZW5ndGg7cis9MSl7dmFyIGk9bltyXSxhPWkuZmVhdHVyZSxvPWkuaW5kZXgscz1pLnNvdXJjZUxheWVySW5kZXg7aWYodGhpcy5sYXllcnNbMF0uX2ZlYXR1cmVGaWx0ZXIobmV3IExyKHRoaXMuem9vbSksYSkpe3ZhciBsPUJuKGEpO3RoaXMuYWRkRmVhdHVyZShhLGwpLGUuZmVhdHVyZUluZGV4Lmluc2VydChhLGwsbyxzLHRoaXMuaW5kZXgpfX19LGVhLnByb3RvdHlwZS5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLmxheW91dFZlcnRleEFycmF5Lmxlbmd0aH0sZWEucHJvdG90eXBlLnVwbG9hZD1mdW5jdGlvbih0KXt0aGlzLmxheW91dFZlcnRleEJ1ZmZlcj10LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLmxheW91dFZlcnRleEFycmF5LEtpKSx0aGlzLmluZGV4QnVmZmVyPXQuY3JlYXRlSW5kZXhCdWZmZXIodGhpcy5pbmRleEFycmF5KSx0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy51cGxvYWQodCl9LGVhLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXImJih0aGlzLmxheW91dFZlcnRleEJ1ZmZlci5kZXN0cm95KCksdGhpcy5pbmRleEJ1ZmZlci5kZXN0cm95KCksdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZGVzdHJveSgpLHRoaXMuc2VnbWVudHMuZGVzdHJveSgpKX0sZWEucHJvdG90eXBlLmFkZEZlYXR1cmU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPVlpKGUsNTAwKTtyPG4ubGVuZ3RoO3IrPTEpe2Zvcih2YXIgaT1uW3JdLGE9MCxvPTAscz1pO288cy5sZW5ndGg7bys9MSlhKz1zW29dLmxlbmd0aDtmb3IodmFyIGw9dGhpcy5zZWdtZW50cy5wcmVwYXJlU2VnbWVudCg0LHRoaXMubGF5b3V0VmVydGV4QXJyYXksdGhpcy5pbmRleEFycmF5KSxjPTAsdT1pO2M8dS5sZW5ndGg7Yys9MSl7dmFyIGg9dVtjXTtpZigwIT09aC5sZW5ndGgmJiFuYShoKSlmb3IodmFyIGY9MCxwPTA7cDxoLmxlbmd0aDtwKyspe3ZhciBkPWhbcF07aWYocD49MSl7dmFyIGc9aFtwLTFdO2lmKCFyYShkLGcpKXtsLnZlcnRleExlbmd0aCs0PlRuLk1BWF9WRVJURVhfQVJSQVlfTEVOR1RIJiYobD10aGlzLnNlZ21lbnRzLnByZXBhcmVTZWdtZW50KDQsdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSx0aGlzLmluZGV4QXJyYXkpKTt2YXIgbT1kLnN1YihnKS5fcGVycCgpLl91bml0KCksdj1nLmRpc3QoZCk7Zit2PjMyNzY4JiYoZj0wKSx0YSh0aGlzLmxheW91dFZlcnRleEFycmF5LGQueCxkLnksbS54LG0ueSwwLDAsZiksdGEodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSxkLngsZC55LG0ueCxtLnksMCwxLGYpLGYrPXYsdGEodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSxnLngsZy55LG0ueCxtLnksMCwwLGYpLHRhKHRoaXMubGF5b3V0VmVydGV4QXJyYXksZy54LGcueSxtLngsbS55LDAsMSxmKTt2YXIgeT1sLnZlcnRleExlbmd0aDt0aGlzLmluZGV4QXJyYXkuZW1wbGFjZUJhY2soeSx5KzEseSsyKSx0aGlzLmluZGV4QXJyYXkuZW1wbGFjZUJhY2soeSsxLHkrMix5KzMpLGwudmVydGV4TGVuZ3RoKz00LGwucHJpbWl0aXZlTGVuZ3RoKz0yfX19fWwudmVydGV4TGVuZ3RoK2E+VG4uTUFYX1ZFUlRFWF9BUlJBWV9MRU5HVEgmJihsPXRoaXMuc2VnbWVudHMucHJlcGFyZVNlZ21lbnQoYSx0aGlzLmxheW91dFZlcnRleEFycmF5LHRoaXMuaW5kZXhBcnJheSkpO2Zvcih2YXIgeD1bXSxiPVtdLF89bC52ZXJ0ZXhMZW5ndGgsdz0wLGs9aTt3PGsubGVuZ3RoO3crPTEpe3ZhciBNPWtbd107aWYoMCE9PU0ubGVuZ3RoKXtNIT09aVswXSYmYi5wdXNoKHgubGVuZ3RoLzIpO2Zvcih2YXIgQT0wO0E8TS5sZW5ndGg7QSsrKXt2YXIgVD1NW0FdO3RhKHRoaXMubGF5b3V0VmVydGV4QXJyYXksVC54LFQueSwwLDAsMSwxLDApLHgucHVzaChULngpLHgucHVzaChULnkpfX19Zm9yKHZhciBTPXZpKHgsYiksRT0wO0U8Uy5sZW5ndGg7RSs9Myl0aGlzLmluZGV4QXJyYXkuZW1wbGFjZUJhY2soXytTW0VdLF8rU1tFKzFdLF8rU1tFKzJdKTtsLnByaW1pdGl2ZUxlbmd0aCs9Uy5sZW5ndGgvMyxsLnZlcnRleExlbmd0aCs9YX10aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy5wb3B1bGF0ZVBhaW50QXJyYXlzKHRoaXMubGF5b3V0VmVydGV4QXJyYXkubGVuZ3RoLHQpfSxwcigiRmlsbEV4dHJ1c2lvbkJ1Y2tldCIsZWEse29taXQ6WyJsYXllcnMiXX0pO3ZhciBpYT17cGFpbnQ6bmV3IHFyKHsiZmlsbC1leHRydXNpb24tb3BhY2l0eSI6bmV3IE5yKElbInBhaW50X2ZpbGwtZXh0cnVzaW9uIl1bImZpbGwtZXh0cnVzaW9uLW9wYWNpdHkiXSksImZpbGwtZXh0cnVzaW9uLWNvbG9yIjpuZXcganIoSVsicGFpbnRfZmlsbC1leHRydXNpb24iXVsiZmlsbC1leHRydXNpb24tY29sb3IiXSksImZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZSI6bmV3IE5yKElbInBhaW50X2ZpbGwtZXh0cnVzaW9uIl1bImZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZSJdKSwiZmlsbC1leHRydXNpb24tdHJhbnNsYXRlLWFuY2hvciI6bmV3IE5yKElbInBhaW50X2ZpbGwtZXh0cnVzaW9uIl1bImZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZS1hbmNob3IiXSksImZpbGwtZXh0cnVzaW9uLXBhdHRlcm4iOm5ldyBWcihJWyJwYWludF9maWxsLWV4dHJ1c2lvbiJdWyJmaWxsLWV4dHJ1c2lvbi1wYXR0ZXJuIl0pLCJmaWxsLWV4dHJ1c2lvbi1oZWlnaHQiOm5ldyBqcihJWyJwYWludF9maWxsLWV4dHJ1c2lvbiJdWyJmaWxsLWV4dHJ1c2lvbi1oZWlnaHQiXSksImZpbGwtZXh0cnVzaW9uLWJhc2UiOm5ldyBqcihJWyJwYWludF9maWxsLWV4dHJ1c2lvbiJdWyJmaWxsLWV4dHJ1c2lvbi1iYXNlIl0pfSl9LGFhPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dC5jYWxsKHRoaXMsZSxpYSl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmNyZWF0ZUJ1Y2tldD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGVhKHQpfSxlLnByb3RvdHlwZS5xdWVyeVJhZGl1cz1mdW5jdGlvbigpe3JldHVybiBKbih0aGlzLnBhaW50LmdldCgiZmlsbC1leHRydXNpb24tdHJhbnNsYXRlIikpfSxlLnByb3RvdHlwZS5xdWVyeUludGVyc2VjdHNGZWF0dXJlPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXtyZXR1cm4gVm4oS24odCx0aGlzLnBhaW50LmdldCgiZmlsbC1leHRydXNpb24tdHJhbnNsYXRlIiksdGhpcy5wYWludC5nZXQoImZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZS1hbmNob3IiKSxpLmFuZ2xlLGEpLHIpfSxlLnByb3RvdHlwZS5oYXNPZmZzY3JlZW5QYXNzPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLnBhaW50LmdldCgiZmlsbC1leHRydXNpb24tb3BhY2l0eSIpJiYibm9uZSIhPT10aGlzLnZpc2liaWxpdHl9LGUucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbigpe3RoaXMudmlld3BvcnRGcmFtZSYmKHRoaXMudmlld3BvcnRGcmFtZS5kZXN0cm95KCksdGhpcy52aWV3cG9ydEZyYW1lPW51bGwpfSxlfShIciksb2E9WHIoW3tuYW1lOiJhX3Bvc19ub3JtYWwiLGNvbXBvbmVudHM6NCx0eXBlOiJJbnQxNiJ9LHtuYW1lOiJhX2RhdGEiLGNvbXBvbmVudHM6NCx0eXBlOiJVaW50OCJ9XSw0KS5tZW1iZXJzLHNhPWxhO2Z1bmN0aW9uIGxhKHQsZSxyLG4saSl7dGhpcy5wcm9wZXJ0aWVzPXt9LHRoaXMuZXh0ZW50PXIsdGhpcy50eXBlPTAsdGhpcy5fcGJmPXQsdGhpcy5fZ2VvbWV0cnk9LTEsdGhpcy5fa2V5cz1uLHRoaXMuX3ZhbHVlcz1pLHQucmVhZEZpZWxkcyhjYSx0aGlzLGUpfWZ1bmN0aW9uIGNhKHQsZSxyKXsxPT10P2UuaWQ9ci5yZWFkVmFyaW50KCk6Mj09dD9mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LnJlYWRWYXJpbnQoKSt0LnBvczt0LnBvczxyOyl7dmFyIG49ZS5fa2V5c1t0LnJlYWRWYXJpbnQoKV0saT1lLl92YWx1ZXNbdC5yZWFkVmFyaW50KCldO2UucHJvcGVydGllc1tuXT1pfX0ocixlKTozPT10P2UudHlwZT1yLnJlYWRWYXJpbnQoKTo0PT10JiYoZS5fZ2VvbWV0cnk9ci5wb3MpfWZ1bmN0aW9uIHVhKHQpe2Zvcih2YXIgZSxyLG49MCxpPTAsYT10Lmxlbmd0aCxvPWEtMTtpPGE7bz1pKyspZT10W2ldLG4rPSgocj10W29dKS54LWUueCkqKGUueStyLnkpO3JldHVybiBufWxhLnR5cGVzPVsiVW5rbm93biIsIlBvaW50IiwiTGluZVN0cmluZyIsIlBvbHlnb24iXSxsYS5wcm90b3R5cGUubG9hZEdlb21ldHJ5PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fcGJmO3QucG9zPXRoaXMuX2dlb21ldHJ5O2Zvcih2YXIgZSxyPXQucmVhZFZhcmludCgpK3QucG9zLG49MSxpPTAsYT0wLG89MCxzPVtdO3QucG9zPHI7KXtpZihpPD0wKXt2YXIgYz10LnJlYWRWYXJpbnQoKTtuPTcmYyxpPWM+PjN9aWYoaS0tLDE9PT1ufHwyPT09bilhKz10LnJlYWRTVmFyaW50KCksbys9dC5yZWFkU1ZhcmludCgpLDE9PT1uJiYoZSYmcy5wdXNoKGUpLGU9W10pLGUucHVzaChuZXcgbChhLG8pKTtlbHNle2lmKDchPT1uKXRocm93IG5ldyBFcnJvcigidW5rbm93biBjb21tYW5kICIrbik7ZSYmZS5wdXNoKGVbMF0uY2xvbmUoKSl9fXJldHVybiBlJiZzLnB1c2goZSksc30sbGEucHJvdG90eXBlLmJib3g9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9wYmY7dC5wb3M9dGhpcy5fZ2VvbWV0cnk7Zm9yKHZhciBlPXQucmVhZFZhcmludCgpK3QucG9zLHI9MSxuPTAsaT0wLGE9MCxvPTEvMCxzPS0xLzAsbD0xLzAsYz0tMS8wO3QucG9zPGU7KXtpZihuPD0wKXt2YXIgdT10LnJlYWRWYXJpbnQoKTtyPTcmdSxuPXU+PjN9aWYobi0tLDE9PT1yfHwyPT09cikoaSs9dC5yZWFkU1ZhcmludCgpKTxvJiYobz1pKSxpPnMmJihzPWkpLChhKz10LnJlYWRTVmFyaW50KCkpPGwmJihsPWEpLGE+YyYmKGM9YSk7ZWxzZSBpZig3IT09cil0aHJvdyBuZXcgRXJyb3IoInVua25vd24gY29tbWFuZCAiK3IpfXJldHVybltvLGwscyxjXX0sbGEucHJvdG90eXBlLnRvR2VvSlNPTj1mdW5jdGlvbih0LGUscil7dmFyIG4saSxhPXRoaXMuZXh0ZW50Kk1hdGgucG93KDIsciksbz10aGlzLmV4dGVudCp0LHM9dGhpcy5leHRlbnQqZSxsPXRoaXMubG9hZEdlb21ldHJ5KCksYz1sYS50eXBlc1t0aGlzLnR5cGVdO2Z1bmN0aW9uIHUodCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspe3ZhciByPXRbZV0sbj0xODAtMzYwKihyLnkrcykvYTt0W2VdPVszNjAqKHIueCtvKS9hLTE4MCwzNjAvTWF0aC5QSSpNYXRoLmF0YW4oTWF0aC5leHAobipNYXRoLlBJLzE4MCkpLTkwXX19c3dpdGNoKHRoaXMudHlwZSl7Y2FzZSAxOnZhciBoPVtdO2ZvcihuPTA7bjxsLmxlbmd0aDtuKyspaFtuXT1sW25dWzBdO3UobD1oKTticmVhaztjYXNlIDI6Zm9yKG49MDtuPGwubGVuZ3RoO24rKyl1KGxbbl0pO2JyZWFrO2Nhc2UgMzpmb3IobD1mdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aDtpZihlPD0xKXJldHVyblt0XTtmb3IodmFyIHIsbixpPVtdLGE9MDthPGU7YSsrKXt2YXIgbz11YSh0W2FdKTswIT09byYmKHZvaWQgMD09PW4mJihuPW88MCksbj09PW88MD8ociYmaS5wdXNoKHIpLHI9W3RbYV1dKTpyLnB1c2godFthXSkpfXJldHVybiByJiZpLnB1c2gociksaX0obCksbj0wO248bC5sZW5ndGg7bisrKWZvcihpPTA7aTxsW25dLmxlbmd0aDtpKyspdShsW25dW2ldKX0xPT09bC5sZW5ndGg/bD1sWzBdOmM9Ik11bHRpIitjO3ZhciBmPXt0eXBlOiJGZWF0dXJlIixnZW9tZXRyeTp7dHlwZTpjLGNvb3JkaW5hdGVzOmx9LHByb3BlcnRpZXM6dGhpcy5wcm9wZXJ0aWVzfTtyZXR1cm4iaWQiaW4gdGhpcyYmKGYuaWQ9dGhpcy5pZCksZn07dmFyIGhhPWZhO2Z1bmN0aW9uIGZhKHQsZSl7dGhpcy52ZXJzaW9uPTEsdGhpcy5uYW1lPW51bGwsdGhpcy5leHRlbnQ9NDA5Nix0aGlzLmxlbmd0aD0wLHRoaXMuX3BiZj10LHRoaXMuX2tleXM9W10sdGhpcy5fdmFsdWVzPVtdLHRoaXMuX2ZlYXR1cmVzPVtdLHQucmVhZEZpZWxkcyhwYSx0aGlzLGUpLHRoaXMubGVuZ3RoPXRoaXMuX2ZlYXR1cmVzLmxlbmd0aH1mdW5jdGlvbiBwYSh0LGUscil7MTU9PT10P2UudmVyc2lvbj1yLnJlYWRWYXJpbnQoKToxPT09dD9lLm5hbWU9ci5yZWFkU3RyaW5nKCk6NT09PXQ/ZS5leHRlbnQ9ci5yZWFkVmFyaW50KCk6Mj09PXQ/ZS5fZmVhdHVyZXMucHVzaChyLnBvcyk6Mz09PXQ/ZS5fa2V5cy5wdXNoKHIucmVhZFN0cmluZygpKTo0PT09dCYmZS5fdmFsdWVzLnB1c2goZnVuY3Rpb24odCl7Zm9yKHZhciBlPW51bGwscj10LnJlYWRWYXJpbnQoKSt0LnBvczt0LnBvczxyOyl7dmFyIG49dC5yZWFkVmFyaW50KCk+PjM7ZT0xPT09bj90LnJlYWRTdHJpbmcoKToyPT09bj90LnJlYWRGbG9hdCgpOjM9PT1uP3QucmVhZERvdWJsZSgpOjQ9PT1uP3QucmVhZFZhcmludDY0KCk6NT09PW4/dC5yZWFkVmFyaW50KCk6Nj09PW4/dC5yZWFkU1ZhcmludCgpOjc9PT1uP3QucmVhZEJvb2xlYW4oKTpudWxsfXJldHVybiBlfShyKSl9ZnVuY3Rpb24gZGEodCxlLHIpe2lmKDM9PT10KXt2YXIgbj1uZXcgaGEocixyLnJlYWRWYXJpbnQoKStyLnBvcyk7bi5sZW5ndGgmJihlW24ubmFtZV09bil9fWZhLnByb3RvdHlwZS5mZWF0dXJlPWZ1bmN0aW9uKHQpe2lmKHQ8MHx8dD49dGhpcy5fZmVhdHVyZXMubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiZmVhdHVyZSBpbmRleCBvdXQgb2YgYm91bmRzIik7dGhpcy5fcGJmLnBvcz10aGlzLl9mZWF0dXJlc1t0XTt2YXIgZT10aGlzLl9wYmYucmVhZFZhcmludCgpK3RoaXMuX3BiZi5wb3M7cmV0dXJuIG5ldyBzYSh0aGlzLl9wYmYsZSx0aGlzLmV4dGVudCx0aGlzLl9rZXlzLHRoaXMuX3ZhbHVlcyl9O3ZhciBnYT17VmVjdG9yVGlsZTpmdW5jdGlvbih0LGUpe3RoaXMubGF5ZXJzPXQucmVhZEZpZWxkcyhkYSx7fSxlKX0sVmVjdG9yVGlsZUZlYXR1cmU6c2EsVmVjdG9yVGlsZUxheWVyOmhhfSxtYT1nYS5WZWN0b3JUaWxlRmVhdHVyZS50eXBlcyx2YT02Myx5YT1NYXRoLmNvcyhNYXRoLlBJLzE4MCozNy41KSx4YT0uNSxiYT1NYXRoLnBvdygyLDE0KS94YTtmdW5jdGlvbiBfYSh0LGUscixuLGksYSxvKXt0LmVtcGxhY2VCYWNrKGUueCxlLnksbj8xOjAsaT8xOi0xLE1hdGgucm91bmQodmEqci54KSsxMjgsTWF0aC5yb3VuZCh2YSpyLnkpKzEyOCwxKygwPT09YT8wOmE8MD8tMToxKXwobyp4YSY2Myk8PDIsbyp4YT4+Nil9dmFyIHdhPWZ1bmN0aW9uKHQpe3RoaXMuem9vbT10Lnpvb20sdGhpcy5vdmVyc2NhbGluZz10Lm92ZXJzY2FsaW5nLHRoaXMubGF5ZXJzPXQubGF5ZXJzLHRoaXMubGF5ZXJJZHM9dGhpcy5sYXllcnMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlkfSksdGhpcy5pbmRleD10LmluZGV4LHRoaXMubGF5b3V0VmVydGV4QXJyYXk9bmV3IFFyLHRoaXMuaW5kZXhBcnJheT1uZXcgaG4sdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnM9bmV3IEluKG9hLHQubGF5ZXJzLHQuem9vbSksdGhpcy5zZWdtZW50cz1uZXcgVG59O2Z1bmN0aW9uIGthKHQsZSl7cmV0dXJuKHQvZS50aWxlVG90YWwqKGUuZW5kLWUuc3RhcnQpK2Uuc3RhcnQpKihiYS0xKX13YS5wcm90b3R5cGUucG9wdWxhdGU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPXQ7cjxuLmxlbmd0aDtyKz0xKXt2YXIgaT1uW3JdLGE9aS5mZWF0dXJlLG89aS5pbmRleCxzPWkuc291cmNlTGF5ZXJJbmRleDtpZih0aGlzLmxheWVyc1swXS5fZmVhdHVyZUZpbHRlcihuZXcgTHIodGhpcy56b29tKSxhKSl7dmFyIGw9Qm4oYSk7dGhpcy5hZGRGZWF0dXJlKGEsbCksZS5mZWF0dXJlSW5kZXguaW5zZXJ0KGEsbCxvLHMsdGhpcy5pbmRleCl9fX0sd2EucHJvdG90eXBlLmlzRW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMubGF5b3V0VmVydGV4QXJyYXkubGVuZ3RofSx3YS5wcm90b3R5cGUudXBsb2FkPWZ1bmN0aW9uKHQpe3RoaXMubGF5b3V0VmVydGV4QnVmZmVyPXQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMubGF5b3V0VmVydGV4QXJyYXksb2EpLHRoaXMuaW5kZXhCdWZmZXI9dC5jcmVhdGVJbmRleEJ1ZmZlcih0aGlzLmluZGV4QXJyYXkpLHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnVwbG9hZCh0KX0sd2EucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLmxheW91dFZlcnRleEJ1ZmZlciYmKHRoaXMubGF5b3V0VmVydGV4QnVmZmVyLmRlc3Ryb3koKSx0aGlzLmluZGV4QnVmZmVyLmRlc3Ryb3koKSx0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy5kZXN0cm95KCksdGhpcy5zZWdtZW50cy5kZXN0cm95KCkpfSx3YS5wcm90b3R5cGUuYWRkRmVhdHVyZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10aGlzLmxheWVyc1swXS5sYXlvdXQsbj1yLmdldCgibGluZS1qb2luIikuZXZhbHVhdGUodCksaT1yLmdldCgibGluZS1jYXAiKSxhPXIuZ2V0KCJsaW5lLW1pdGVyLWxpbWl0Iiksbz1yLmdldCgibGluZS1yb3VuZC1saW1pdCIpLHM9MCxsPWU7czxsLmxlbmd0aDtzKz0xKXt2YXIgYz1sW3NdO3RoaXMuYWRkTGluZShjLHQsbixpLGEsbyl9fSx3YS5wcm90b3R5cGUuYWRkTGluZT1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG89bnVsbDtlLnByb3BlcnRpZXMmJmUucHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eSgibWFwYm94X2NsaXBfc3RhcnQiKSYmZS5wcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KCJtYXBib3hfY2xpcF9lbmQiKSYmKG89e3N0YXJ0OmUucHJvcGVydGllcy5tYXBib3hfY2xpcF9zdGFydCxlbmQ6ZS5wcm9wZXJ0aWVzLm1hcGJveF9jbGlwX2VuZCx0aWxlVG90YWw6dm9pZCAwfSk7Zm9yKHZhciBzPSJQb2x5Z29uIj09PW1hW2UudHlwZV0sbD10Lmxlbmd0aDtsPj0yJiZ0W2wtMV0uZXF1YWxzKHRbbC0yXSk7KWwtLTtmb3IodmFyIGM9MDtjPGwtMSYmdFtjXS5lcXVhbHModFtjKzFdKTspYysrO2lmKCEobDwocz8zOjIpKSl7byYmKG8udGlsZVRvdGFsPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG4saSxhPTAsbz1jO288ci0xO28rKyluPXRbb10saT10W28rMV0sYSs9bi5kaXN0KGkpO3JldHVybiBhfSh0LDAsbCkpLCJiZXZlbCI9PT1yJiYoaT0xLjA1KTt2YXIgdT1Ebi8oNTEyKnRoaXMub3ZlcnNjYWxpbmcpKjE1LGg9dFtjXSxmPXRoaXMuc2VnbWVudHMucHJlcGFyZVNlZ21lbnQoMTAqbCx0aGlzLmxheW91dFZlcnRleEFycmF5LHRoaXMuaW5kZXhBcnJheSk7dGhpcy5kaXN0YW5jZT0wO3ZhciBwLGQsZyxtPW4sdj1zPyJidXR0IjpuLHk9ITAseD12b2lkIDAsYj12b2lkIDAsXz12b2lkIDAsdz12b2lkIDA7dGhpcy5lMT10aGlzLmUyPXRoaXMuZTM9LTEscyYmKHA9dFtsLTJdLHc9aC5zdWIocCkuX3VuaXQoKS5fcGVycCgpKTtmb3IodmFyIGs9YztrPGw7aysrKWlmKCEoYj1zJiZrPT09bC0xP3RbYysxXTp0W2srMV0pfHwhdFtrXS5lcXVhbHMoYikpe3cmJihfPXcpLHAmJih4PXApLHA9dFtrXSx3PWI/Yi5zdWIocCkuX3VuaXQoKS5fcGVycCgpOl87dmFyIE09KF89X3x8dykuYWRkKHcpOzA9PT1NLngmJjA9PT1NLnl8fE0uX3VuaXQoKTt2YXIgQT1NLngqdy54K00ueSp3LnksVD0wIT09QT8xL0E6MS8wLFM9QTx5YSYmeCYmYjtpZihTJiZrPmMpe3ZhciBFPXAuZGlzdCh4KTtpZihFPjIqdSl7dmFyIEM9cC5zdWIocC5zdWIoeCkuX211bHQodS9FKS5fcm91bmQoKSk7dGhpcy5kaXN0YW5jZSs9Qy5kaXN0KHgpLHRoaXMuYWRkQ3VycmVudFZlcnRleChDLHRoaXMuZGlzdGFuY2UsXy5tdWx0KDEpLDAsMCwhMSxmLG8pLHg9Q319dmFyIEw9eCYmYix6PUw/cjpiP206djtpZihMJiYicm91bmQiPT09eiYmKFQ8YT96PSJtaXRlciI6VDw9MiYmKHo9ImZha2Vyb3VuZCIpKSwibWl0ZXIiPT09eiYmVD5pJiYoej0iYmV2ZWwiKSwiYmV2ZWwiPT09eiYmKFQ+MiYmKHo9ImZsaXBiZXZlbCIpLFQ8aSYmKHo9Im1pdGVyIikpLHgmJih0aGlzLmRpc3RhbmNlKz1wLmRpc3QoeCkpLCJtaXRlciI9PT16KU0uX211bHQoVCksdGhpcy5hZGRDdXJyZW50VmVydGV4KHAsdGhpcy5kaXN0YW5jZSxNLDAsMCwhMSxmLG8pO2Vsc2UgaWYoImZsaXBiZXZlbCI9PT16KXtpZihUPjEwMClNPXcuY2xvbmUoKS5tdWx0KC0xKTtlbHNle3ZhciBQPV8ueCp3LnktXy55KncueD4wPy0xOjEsST1UKl8uYWRkKHcpLm1hZygpL18uc3ViKHcpLm1hZygpO00uX3BlcnAoKS5fbXVsdChJKlApfXRoaXMuYWRkQ3VycmVudFZlcnRleChwLHRoaXMuZGlzdGFuY2UsTSwwLDAsITEsZixvKSx0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgocCx0aGlzLmRpc3RhbmNlLE0ubXVsdCgtMSksMCwwLCExLGYsbyl9ZWxzZSBpZigiYmV2ZWwiPT09enx8ImZha2Vyb3VuZCI9PT16KXt2YXIgTz1fLngqdy55LV8ueSp3Lng+MCxEPS1NYXRoLnNxcnQoVCpULTEpO2lmKE8/KGc9MCxkPUQpOihkPTAsZz1EKSx5fHx0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgocCx0aGlzLmRpc3RhbmNlLF8sZCxnLCExLGYsbyksImZha2Vyb3VuZCI9PT16KXtmb3IodmFyIFI9TWF0aC5mbG9vcig4KiguNS0oQS0uNSkpKSxCPXZvaWQgMCxGPTA7RjxSO0YrKylCPXcubXVsdCgoRisxKS8oUisxKSkuX2FkZChfKS5fdW5pdCgpLHRoaXMuYWRkUGllU2xpY2VWZXJ0ZXgocCx0aGlzLmRpc3RhbmNlLEIsTyxmLG8pO3RoaXMuYWRkUGllU2xpY2VWZXJ0ZXgocCx0aGlzLmRpc3RhbmNlLE0sTyxmLG8pO2Zvcih2YXIgTj1SLTE7Tj49MDtOLS0pQj1fLm11bHQoKE4rMSkvKFIrMSkpLl9hZGQodykuX3VuaXQoKSx0aGlzLmFkZFBpZVNsaWNlVmVydGV4KHAsdGhpcy5kaXN0YW5jZSxCLE8sZixvKX1iJiZ0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgocCx0aGlzLmRpc3RhbmNlLHcsLWQsLWcsITEsZixvKX1lbHNlImJ1dHQiPT09ej8oeXx8dGhpcy5hZGRDdXJyZW50VmVydGV4KHAsdGhpcy5kaXN0YW5jZSxfLDAsMCwhMSxmLG8pLGImJnRoaXMuYWRkQ3VycmVudFZlcnRleChwLHRoaXMuZGlzdGFuY2UsdywwLDAsITEsZixvKSk6InNxdWFyZSI9PT16Pyh5fHwodGhpcy5hZGRDdXJyZW50VmVydGV4KHAsdGhpcy5kaXN0YW5jZSxfLDEsMSwhMSxmLG8pLHRoaXMuZTE9dGhpcy5lMj0tMSksYiYmdGhpcy5hZGRDdXJyZW50VmVydGV4KHAsdGhpcy5kaXN0YW5jZSx3LC0xLC0xLCExLGYsbykpOiJyb3VuZCI9PT16JiYoeXx8KHRoaXMuYWRkQ3VycmVudFZlcnRleChwLHRoaXMuZGlzdGFuY2UsXywwLDAsITEsZixvKSx0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgocCx0aGlzLmRpc3RhbmNlLF8sMSwxLCEwLGYsbyksdGhpcy5lMT10aGlzLmUyPS0xKSxiJiYodGhpcy5hZGRDdXJyZW50VmVydGV4KHAsdGhpcy5kaXN0YW5jZSx3LC0xLC0xLCEwLGYsbyksdGhpcy5hZGRDdXJyZW50VmVydGV4KHAsdGhpcy5kaXN0YW5jZSx3LDAsMCwhMSxmLG8pKSk7aWYoUyYmazxsLTEpe3ZhciBqPXAuZGlzdChiKTtpZihqPjIqdSl7dmFyIFY9cC5hZGQoYi5zdWIocCkuX211bHQodS9qKS5fcm91bmQoKSk7dGhpcy5kaXN0YW5jZSs9Vi5kaXN0KHApLHRoaXMuYWRkQ3VycmVudFZlcnRleChWLHRoaXMuZGlzdGFuY2Usdy5tdWx0KDEpLDAsMCwhMSxmLG8pLHA9Vn19eT0hMX10aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy5wb3B1bGF0ZVBhaW50QXJyYXlzKHRoaXMubGF5b3V0VmVydGV4QXJyYXkubGVuZ3RoLGUpfX0sd2EucHJvdG90eXBlLmFkZEN1cnJlbnRWZXJ0ZXg9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzKXt2YXIgbCxjPXRoaXMubGF5b3V0VmVydGV4QXJyYXksdT10aGlzLmluZGV4QXJyYXk7cyYmKGU9a2EoZSxzKSksbD1yLmNsb25lKCksbiYmbC5fc3ViKHIucGVycCgpLl9tdWx0KG4pKSxfYShjLHQsbCxhLCExLG4sZSksdGhpcy5lMz1vLnZlcnRleExlbmd0aCsrLHRoaXMuZTE+PTAmJnRoaXMuZTI+PTAmJih1LmVtcGxhY2VCYWNrKHRoaXMuZTEsdGhpcy5lMix0aGlzLmUzKSxvLnByaW1pdGl2ZUxlbmd0aCsrKSx0aGlzLmUxPXRoaXMuZTIsdGhpcy5lMj10aGlzLmUzLGw9ci5tdWx0KC0xKSxpJiZsLl9zdWIoci5wZXJwKCkuX211bHQoaSkpLF9hKGMsdCxsLGEsITAsLWksZSksdGhpcy5lMz1vLnZlcnRleExlbmd0aCsrLHRoaXMuZTE+PTAmJnRoaXMuZTI+PTAmJih1LmVtcGxhY2VCYWNrKHRoaXMuZTEsdGhpcy5lMix0aGlzLmUzKSxvLnByaW1pdGl2ZUxlbmd0aCsrKSx0aGlzLmUxPXRoaXMuZTIsdGhpcy5lMj10aGlzLmUzLGU+YmEvMiYmIXMmJih0aGlzLmRpc3RhbmNlPTAsdGhpcy5hZGRDdXJyZW50VmVydGV4KHQsdGhpcy5kaXN0YW5jZSxyLG4saSxhLG8pKX0sd2EucHJvdG90eXBlLmFkZFBpZVNsaWNlVmVydGV4PWZ1bmN0aW9uKHQsZSxyLG4saSxhKXtyPXIubXVsdChuPy0xOjEpO3ZhciBvPXRoaXMubGF5b3V0VmVydGV4QXJyYXkscz10aGlzLmluZGV4QXJyYXk7YSYmKGU9a2EoZSxhKSksX2Eobyx0LHIsITEsbiwwLGUpLHRoaXMuZTM9aS52ZXJ0ZXhMZW5ndGgrKyx0aGlzLmUxPj0wJiZ0aGlzLmUyPj0wJiYocy5lbXBsYWNlQmFjayh0aGlzLmUxLHRoaXMuZTIsdGhpcy5lMyksaS5wcmltaXRpdmVMZW5ndGgrKyksbj90aGlzLmUyPXRoaXMuZTM6dGhpcy5lMT10aGlzLmUzfSxwcigiTGluZUJ1Y2tldCIsd2Ese29taXQ6WyJsYXllcnMiXX0pO3ZhciBNYT1uZXcgcXIoeyJsaW5lLWNhcCI6bmV3IE5yKEkubGF5b3V0X2xpbmVbImxpbmUtY2FwIl0pLCJsaW5lLWpvaW4iOm5ldyBqcihJLmxheW91dF9saW5lWyJsaW5lLWpvaW4iXSksImxpbmUtbWl0ZXItbGltaXQiOm5ldyBOcihJLmxheW91dF9saW5lWyJsaW5lLW1pdGVyLWxpbWl0Il0pLCJsaW5lLXJvdW5kLWxpbWl0IjpuZXcgTnIoSS5sYXlvdXRfbGluZVsibGluZS1yb3VuZC1saW1pdCJdKX0pLEFhPXtwYWludDpuZXcgcXIoeyJsaW5lLW9wYWNpdHkiOm5ldyBqcihJLnBhaW50X2xpbmVbImxpbmUtb3BhY2l0eSJdKSwibGluZS1jb2xvciI6bmV3IGpyKEkucGFpbnRfbGluZVsibGluZS1jb2xvciJdKSwibGluZS10cmFuc2xhdGUiOm5ldyBOcihJLnBhaW50X2xpbmVbImxpbmUtdHJhbnNsYXRlIl0pLCJsaW5lLXRyYW5zbGF0ZS1hbmNob3IiOm5ldyBOcihJLnBhaW50X2xpbmVbImxpbmUtdHJhbnNsYXRlLWFuY2hvciJdKSwibGluZS13aWR0aCI6bmV3IGpyKEkucGFpbnRfbGluZVsibGluZS13aWR0aCJdKSwibGluZS1nYXAtd2lkdGgiOm5ldyBqcihJLnBhaW50X2xpbmVbImxpbmUtZ2FwLXdpZHRoIl0pLCJsaW5lLW9mZnNldCI6bmV3IGpyKEkucGFpbnRfbGluZVsibGluZS1vZmZzZXQiXSksImxpbmUtYmx1ciI6bmV3IGpyKEkucGFpbnRfbGluZVsibGluZS1ibHVyIl0pLCJsaW5lLWRhc2hhcnJheSI6bmV3IFZyKEkucGFpbnRfbGluZVsibGluZS1kYXNoYXJyYXkiXSksImxpbmUtcGF0dGVybiI6bmV3IFZyKEkucGFpbnRfbGluZVsibGluZS1wYXR0ZXJuIl0pLCJsaW5lLWdyYWRpZW50IjpuZXcgVXIoSS5wYWludF9saW5lWyJsaW5lLWdyYWRpZW50Il0pfSksbGF5b3V0Ok1hfSxUYT1uZXcoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5wb3NzaWJseUV2YWx1YXRlPWZ1bmN0aW9uKGUscil7cmV0dXJuIHI9bmV3IExyKE1hdGguZmxvb3Ioci56b29tKSx7bm93OnIubm93LGZhZGVEdXJhdGlvbjpyLmZhZGVEdXJhdGlvbix6b29tSGlzdG9yeTpyLnpvb21IaXN0b3J5LHRyYW5zaXRpb246ci50cmFuc2l0aW9ufSksdC5wcm90b3R5cGUucG9zc2libHlFdmFsdWF0ZS5jYWxsKHRoaXMsZSxyKX0sZS5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24oZSxyLG4pe3JldHVybiByPXAoe30scix7em9vbTpNYXRoLmZsb29yKHIuem9vbSl9KSx0LnByb3RvdHlwZS5ldmFsdWF0ZS5jYWxsKHRoaXMsZSxyLG4pfSxlfShqcikpKEFhLnBhaW50LnByb3BlcnRpZXNbImxpbmUtd2lkdGgiXS5zcGVjaWZpY2F0aW9uKTtUYS51c2VJbnRlZ2VyWm9vbT0hMDt2YXIgU2E9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt0LmNhbGwodGhpcyxlLEFhKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuc2V0UGFpbnRQcm9wZXJ0eT1mdW5jdGlvbihlLHIsbil7dC5wcm90b3R5cGUuc2V0UGFpbnRQcm9wZXJ0eS5jYWxsKHRoaXMsZSxyLG4pLCJsaW5lLWdyYWRpZW50Ij09PWUmJnRoaXMuX3VwZGF0ZUdyYWRpZW50KCl9LGUucHJvdG90eXBlLl91cGRhdGVHcmFkaWVudD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3RyYW5zaXRpb25hYmxlUGFpbnQuX3ZhbHVlc1sibGluZS1ncmFkaWVudCJdLnZhbHVlLmV4cHJlc3Npb247dGhpcy5ncmFkaWVudD1maSh0LCJsaW5lUHJvZ3Jlc3MiKSx0aGlzLmdyYWRpZW50VGV4dHVyZT1udWxsfSxlLnByb3RvdHlwZS5yZWNhbGN1bGF0ZT1mdW5jdGlvbihlKXt0LnByb3RvdHlwZS5yZWNhbGN1bGF0ZS5jYWxsKHRoaXMsZSksdGhpcy5wYWludC5fdmFsdWVzWyJsaW5lLWZsb29yd2lkdGgiXT1UYS5wb3NzaWJseUV2YWx1YXRlKHRoaXMuX3RyYW5zaXRpb25pbmdQYWludC5fdmFsdWVzWyJsaW5lLXdpZHRoIl0udmFsdWUsZSl9LGUucHJvdG90eXBlLmNyZWF0ZUJ1Y2tldD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHdhKHQpfSxlLnByb3RvdHlwZS5xdWVyeVJhZGl1cz1mdW5jdGlvbih0KXt2YXIgZT10LHI9RWEoJG4oImxpbmUtd2lkdGgiLHRoaXMsZSksJG4oImxpbmUtZ2FwLXdpZHRoIix0aGlzLGUpKSxuPSRuKCJsaW5lLW9mZnNldCIsdGhpcyxlKTtyZXR1cm4gci8yK01hdGguYWJzKG4pK0puKHRoaXMucGFpbnQuZ2V0KCJsaW5lLXRyYW5zbGF0ZSIpKX0sZS5wcm90b3R5cGUucXVlcnlJbnRlcnNlY3RzRmVhdHVyZT1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG89S24odCx0aGlzLnBhaW50LmdldCgibGluZS10cmFuc2xhdGUiKSx0aGlzLnBhaW50LmdldCgibGluZS10cmFuc2xhdGUtYW5jaG9yIiksaS5hbmdsZSxhKSxzPWEvMipFYSh0aGlzLnBhaW50LmdldCgibGluZS13aWR0aCIpLmV2YWx1YXRlKGUpLHRoaXMucGFpbnQuZ2V0KCJsaW5lLWdhcC13aWR0aCIpLmV2YWx1YXRlKGUpKSxjPXRoaXMucGFpbnQuZ2V0KCJsaW5lLW9mZnNldCIpLmV2YWx1YXRlKGUpO3JldHVybiBjJiYocj1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxuPW5ldyBsKDAsMCksaT0wO2k8dC5sZW5ndGg7aSsrKXtmb3IodmFyIGE9dFtpXSxvPVtdLHM9MDtzPGEubGVuZ3RoO3MrKyl7dmFyIGM9YVtzLTFdLHU9YVtzXSxoPWFbcysxXSxmPTA9PT1zP246dS5zdWIoYykuX3VuaXQoKS5fcGVycCgpLHA9cz09PWEubGVuZ3RoLTE/bjpoLnN1Yih1KS5fdW5pdCgpLl9wZXJwKCksZD1mLl9hZGQocCkuX3VuaXQoKSxnPWQueCpwLngrZC55KnAueTtkLl9tdWx0KDEvZyksby5wdXNoKGQuX211bHQoZSkuX2FkZCh1KSl9ci5wdXNoKG8pfXJldHVybiByfShyLGMqYSkpLFVuKG8scixzKX0sZX0oSHIpO2Z1bmN0aW9uIEVhKHQsZSl7cmV0dXJuIGU+MD9lKzIqdDp0fXZhciBDYT1Ycihbe25hbWU6ImFfcG9zX29mZnNldCIsY29tcG9uZW50czo0LHR5cGU6IkludDE2In0se25hbWU6ImFfZGF0YSIsY29tcG9uZW50czo0LHR5cGU6IlVpbnQxNiJ9XSksTGE9WHIoW3tuYW1lOiJhX3Byb2plY3RlZF9wb3MiLGNvbXBvbmVudHM6Myx0eXBlOiJGbG9hdDMyIn1dLDQpLHphPShYcihbe25hbWU6ImFfZmFkZV9vcGFjaXR5Iixjb21wb25lbnRzOjEsdHlwZToiVWludDMyIn1dLDQpLFhyKFt7bmFtZToiYV9wbGFjZWQiLGNvbXBvbmVudHM6Mix0eXBlOiJVaW50OCJ9XSw0KSksUGE9KFhyKFt7dHlwZToiSW50MTYiLG5hbWU6ImFuY2hvclBvaW50WCJ9LHt0eXBlOiJJbnQxNiIsbmFtZToiYW5jaG9yUG9pbnRZIn0se3R5cGU6IkludDE2IixuYW1lOiJ4MSJ9LHt0eXBlOiJJbnQxNiIsbmFtZToieTEifSx7dHlwZToiSW50MTYiLG5hbWU6IngyIn0se3R5cGU6IkludDE2IixuYW1lOiJ5MiJ9LHt0eXBlOiJVaW50MzIiLG5hbWU6ImZlYXR1cmVJbmRleCJ9LHt0eXBlOiJVaW50MTYiLG5hbWU6InNvdXJjZUxheWVySW5kZXgifSx7dHlwZToiVWludDE2IixuYW1lOiJidWNrZXRJbmRleCJ9LHt0eXBlOiJJbnQxNiIsbmFtZToicmFkaXVzIn0se3R5cGU6IkludDE2IixuYW1lOiJzaWduZWREaXN0YW5jZUZyb21BbmNob3IifV0pLFhyKFt7bmFtZToiYV9wb3MiLGNvbXBvbmVudHM6Mix0eXBlOiJJbnQxNiJ9LHtuYW1lOiJhX2FuY2hvcl9wb3MiLGNvbXBvbmVudHM6Mix0eXBlOiJJbnQxNiJ9LHtuYW1lOiJhX2V4dHJ1ZGUiLGNvbXBvbmVudHM6Mix0eXBlOiJJbnQxNiJ9XSw0KSksSWE9WHIoW3tuYW1lOiJhX3BvcyIsY29tcG9uZW50czoyLHR5cGU6IkludDE2In0se25hbWU6ImFfYW5jaG9yX3BvcyIsY29tcG9uZW50czoyLHR5cGU6IkludDE2In0se25hbWU6ImFfZXh0cnVkZSIsY29tcG9uZW50czoyLHR5cGU6IkludDE2In1dLDQpO2Z1bmN0aW9uIE9hKHQsZSxyKXt2YXIgbj1lLmxheW91dC5nZXQoInRleHQtdHJhbnNmb3JtIikuZXZhbHVhdGUocik7cmV0dXJuInVwcGVyY2FzZSI9PT1uP3Q9dC50b0xvY2FsZVVwcGVyQ2FzZSgpOiJsb3dlcmNhc2UiPT09biYmKHQ9dC50b0xvY2FsZUxvd2VyQ2FzZSgpKSxDci5hcHBseUFyYWJpY1NoYXBpbmcmJih0PUNyLmFwcGx5QXJhYmljU2hhcGluZyh0KSksdH1Ycihbe3R5cGU6IkludDE2IixuYW1lOiJhbmNob3JYIn0se3R5cGU6IkludDE2IixuYW1lOiJhbmNob3JZIn0se3R5cGU6IlVpbnQxNiIsbmFtZToiZ2x5cGhTdGFydEluZGV4In0se3R5cGU6IlVpbnQxNiIsbmFtZToibnVtR2x5cGhzIn0se3R5cGU6IlVpbnQzMiIsbmFtZToidmVydGV4U3RhcnRJbmRleCJ9LHt0eXBlOiJVaW50MzIiLG5hbWU6ImxpbmVTdGFydEluZGV4In0se3R5cGU6IlVpbnQzMiIsbmFtZToibGluZUxlbmd0aCJ9LHt0eXBlOiJVaW50MTYiLG5hbWU6InNlZ21lbnQifSx7dHlwZToiVWludDE2IixuYW1lOiJsb3dlclNpemUifSx7dHlwZToiVWludDE2IixuYW1lOiJ1cHBlclNpemUifSx7dHlwZToiRmxvYXQzMiIsbmFtZToibGluZU9mZnNldFgifSx7dHlwZToiRmxvYXQzMiIsbmFtZToibGluZU9mZnNldFkifSx7dHlwZToiVWludDgiLG5hbWU6IndyaXRpbmdNb2RlIn0se3R5cGU6IlVpbnQ4IixuYW1lOiJoaWRkZW4ifV0pLFhyKFt7dHlwZToiRmxvYXQzMiIsbmFtZToib2Zmc2V0WCJ9XSksWHIoW3t0eXBlOiJJbnQxNiIsbmFtZToieCJ9LHt0eXBlOiJJbnQxNiIsbmFtZToieSJ9LHt0eXBlOiJJbnQxNiIsbmFtZToidGlsZVVuaXREaXN0YW5jZUZyb21BbmNob3IifV0pO3ZhciBEYT17IiEiOiJcdWZlMTUiLCIjIjoiXHVmZjAzIiwkOiJcdWZmMDQiLCIlIjoiXHVmZjA1IiwiJiI6Ilx1ZmYwNiIsIigiOiJcdWZlMzUiLCIpIjoiXHVmZTM2IiwiKiI6Ilx1ZmYwYSIsIisiOiJcdWZmMGIiLCIsIjoiXHVmZTEwIiwiLSI6Ilx1ZmUzMiIsIi4iOiJcdTMwZmIiLCIvIjoiXHVmZjBmIiwiOiI6Ilx1ZmUxMyIsIjsiOiJcdWZlMTQiLCI8IjoiXHVmZTNmIiwiPSI6Ilx1ZmYxZCIsIj4iOiJcdWZlNDAiLCI/IjoiXHVmZTE2IiwiQCI6Ilx1ZmYyMCIsIlsiOiJcdWZlNDciLCJcXCI6Ilx1ZmYzYyIsIl0iOiJcdWZlNDgiLCJeIjoiXHVmZjNlIixfOiJcdWZlMzMiLCJgIjoiXHVmZjQwIiwieyI6Ilx1ZmUzNyIsInwiOiJcdTIwMTUiLCJ9IjoiXHVmZTM4IiwifiI6Ilx1ZmY1ZSIsIlx4YTIiOiJcdWZmZTAiLCJceGEzIjoiXHVmZmUxIiwiXHhhNSI6Ilx1ZmZlNSIsIlx4YTYiOiJcdWZmZTQiLCJceGFjIjoiXHVmZmUyIiwiXHhhZiI6Ilx1ZmZlMyIsIlx1MjAxMyI6Ilx1ZmUzMiIsIlx1MjAxNCI6Ilx1ZmUzMSIsIlx1MjAxOCI6Ilx1ZmU0MyIsIlx1MjAxOSI6Ilx1ZmU0NCIsIlx1MjAxYyI6Ilx1ZmU0MSIsIlx1MjAxZCI6Ilx1ZmU0MiIsIlx1MjAyNiI6Ilx1ZmUxOSIsIlx1MjAyNyI6Ilx1MzBmYiIsIlx1MjBhOSI6Ilx1ZmZlNiIsIlx1MzAwMSI6Ilx1ZmUxMSIsIlx1MzAwMiI6Ilx1ZmUxMiIsIlx1MzAwOCI6Ilx1ZmUzZiIsIlx1MzAwOSI6Ilx1ZmU0MCIsIlx1MzAwYSI6Ilx1ZmUzZCIsIlx1MzAwYiI6Ilx1ZmUzZSIsIlx1MzAwYyI6Ilx1ZmU0MSIsIlx1MzAwZCI6Ilx1ZmU0MiIsIlx1MzAwZSI6Ilx1ZmU0MyIsIlx1MzAwZiI6Ilx1ZmU0NCIsIlx1MzAxMCI6Ilx1ZmUzYiIsIlx1MzAxMSI6Ilx1ZmUzYyIsIlx1MzAxNCI6Ilx1ZmUzOSIsIlx1MzAxNSI6Ilx1ZmUzYSIsIlx1MzAxNiI6Ilx1ZmUxNyIsIlx1MzAxNyI6Ilx1ZmUxOCIsIlx1ZmYwMSI6Ilx1ZmUxNSIsIlx1ZmYwOCI6Ilx1ZmUzNSIsIlx1ZmYwOSI6Ilx1ZmUzNiIsIlx1ZmYwYyI6Ilx1ZmUxMCIsIlx1ZmYwZCI6Ilx1ZmUzMiIsIlx1ZmYwZSI6Ilx1MzBmYiIsIlx1ZmYxYSI6Ilx1ZmUxMyIsIlx1ZmYxYiI6Ilx1ZmUxNCIsIlx1ZmYxYyI6Ilx1ZmUzZiIsIlx1ZmYxZSI6Ilx1ZmU0MCIsIlx1ZmYxZiI6Ilx1ZmUxNiIsIlx1ZmYzYiI6Ilx1ZmU0NyIsIlx1ZmYzZCI6Ilx1ZmU0OCIsIlx1ZmYzZiI6Ilx1ZmUzMyIsIlx1ZmY1YiI6Ilx1ZmUzNyIsIlx1ZmY1YyI6Ilx1MjAxNSIsIlx1ZmY1ZCI6Ilx1ZmUzOCIsIlx1ZmY1ZiI6Ilx1ZmUzNSIsIlx1ZmY2MCI6Ilx1ZmUzNiIsIlx1ZmY2MSI6Ilx1ZmUxMiIsIlx1ZmY2MiI6Ilx1ZmU0MSIsIlx1ZmY2MyI6Ilx1ZmU0MiJ9LFJhPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxyLG4saSl7dC5jYWxsKHRoaXMsZSxyKSx0aGlzLmFuZ2xlPW4sdm9pZCAwIT09aSYmKHRoaXMuc2VnbWVudD1pKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGUodGhpcy54LHRoaXMueSx0aGlzLmFuZ2xlLHRoaXMuc2VnbWVudCl9LGV9KGwpO2Z1bmN0aW9uIEJhKHQsZSl7dmFyIHI9ZS5leHByZXNzaW9uO2lmKCJjb25zdGFudCI9PT1yLmtpbmQpcmV0dXJue2Z1bmN0aW9uVHlwZToiY29uc3RhbnQiLGxheW91dFNpemU6ci5ldmFsdWF0ZShuZXcgTHIodCsxKSl9O2lmKCJzb3VyY2UiPT09ci5raW5kKXJldHVybntmdW5jdGlvblR5cGU6InNvdXJjZSJ9O2Zvcih2YXIgbj1yLnpvb21TdG9wcyxpPTA7aTxuLmxlbmd0aCYmbltpXTw9dDspaSsrO2Zvcih2YXIgYT1pPU1hdGgubWF4KDAsaS0xKTthPG4ubGVuZ3RoJiZuW2FdPHQrMTspYSsrO2E9TWF0aC5taW4obi5sZW5ndGgtMSxhKTt2YXIgbz17bWluOm5baV0sbWF4Om5bYV19O3JldHVybiJjb21wb3NpdGUiPT09ci5raW5kP3tmdW5jdGlvblR5cGU6ImNvbXBvc2l0ZSIsem9vbVJhbmdlOm8scHJvcGVydHlWYWx1ZTplLnZhbHVlfTp7ZnVuY3Rpb25UeXBlOiJjYW1lcmEiLGxheW91dFNpemU6ci5ldmFsdWF0ZShuZXcgTHIodCsxKSksem9vbVJhbmdlOm8sc2l6ZVJhbmdlOnttaW46ci5ldmFsdWF0ZShuZXcgTHIoby5taW4pKSxtYXg6ci5ldmFsdWF0ZShuZXcgTHIoby5tYXgpKX0scHJvcGVydHlWYWx1ZTplLnZhbHVlfX1wcigiQW5jaG9yIixSYSk7dmFyIEZhPWdhLlZlY3RvclRpbGVGZWF0dXJlLnR5cGVzLE5hPVt7bmFtZToiYV9mYWRlX29wYWNpdHkiLGNvbXBvbmVudHM6MSx0eXBlOiJVaW50OCIsb2Zmc2V0OjB9XTtmdW5jdGlvbiBqYSh0LGUscixuLGksYSxvLHMpe3QuZW1wbGFjZUJhY2soZSxyLE1hdGgucm91bmQoMzIqbiksTWF0aC5yb3VuZCgzMippKSxhLG8scz9zWzBdOjAscz9zWzFdOjApfWZ1bmN0aW9uIFZhKHQsZSxyKXt0LmVtcGxhY2VCYWNrKGUueCxlLnksciksdC5lbXBsYWNlQmFjayhlLngsZS55LHIpLHQuZW1wbGFjZUJhY2soZS54LGUueSxyKSx0LmVtcGxhY2VCYWNrKGUueCxlLnkscil9dmFyIFVhPWZ1bmN0aW9uKHQpe3RoaXMubGF5b3V0VmVydGV4QXJyYXk9bmV3IHRuLHRoaXMuaW5kZXhBcnJheT1uZXcgaG4sdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnM9dCx0aGlzLnNlZ21lbnRzPW5ldyBUbix0aGlzLmR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheT1uZXcgZW4sdGhpcy5vcGFjaXR5VmVydGV4QXJyYXk9bmV3IHJuLHRoaXMucGxhY2VkU3ltYm9sQXJyYXk9bmV3IHlufTtVYS5wcm90b3R5cGUudXBsb2FkPWZ1bmN0aW9uKHQsZSl7dGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXI9dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSxDYS5tZW1iZXJzKSx0aGlzLmluZGV4QnVmZmVyPXQuY3JlYXRlSW5kZXhCdWZmZXIodGhpcy5pbmRleEFycmF5LGUpLHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnVwbG9hZCh0KSx0aGlzLmR5bmFtaWNMYXlvdXRWZXJ0ZXhCdWZmZXI9dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5keW5hbWljTGF5b3V0VmVydGV4QXJyYXksTGEubWVtYmVycywhMCksdGhpcy5vcGFjaXR5VmVydGV4QnVmZmVyPXQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMub3BhY2l0eVZlcnRleEFycmF5LE5hLCEwKSx0aGlzLm9wYWNpdHlWZXJ0ZXhCdWZmZXIuaXRlbVNpemU9MX0sVWEucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLmxheW91dFZlcnRleEJ1ZmZlciYmKHRoaXMubGF5b3V0VmVydGV4QnVmZmVyLmRlc3Ryb3koKSx0aGlzLmluZGV4QnVmZmVyLmRlc3Ryb3koKSx0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy5kZXN0cm95KCksdGhpcy5zZWdtZW50cy5kZXN0cm95KCksdGhpcy5keW5hbWljTGF5b3V0VmVydGV4QnVmZmVyLmRlc3Ryb3koKSx0aGlzLm9wYWNpdHlWZXJ0ZXhCdWZmZXIuZGVzdHJveSgpKX0scHIoIlN5bWJvbEJ1ZmZlcnMiLFVhKTt2YXIgcWE9ZnVuY3Rpb24odCxlLHIpe3RoaXMubGF5b3V0VmVydGV4QXJyYXk9bmV3IHQsdGhpcy5sYXlvdXRBdHRyaWJ1dGVzPWUsdGhpcy5pbmRleEFycmF5PW5ldyByLHRoaXMuc2VnbWVudHM9bmV3IFRuLHRoaXMuY29sbGlzaW9uVmVydGV4QXJyYXk9bmV3IG9ufTtxYS5wcm90b3R5cGUudXBsb2FkPWZ1bmN0aW9uKHQpe3RoaXMubGF5b3V0VmVydGV4QnVmZmVyPXQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMubGF5b3V0VmVydGV4QXJyYXksdGhpcy5sYXlvdXRBdHRyaWJ1dGVzKSx0aGlzLmluZGV4QnVmZmVyPXQuY3JlYXRlSW5kZXhCdWZmZXIodGhpcy5pbmRleEFycmF5KSx0aGlzLmNvbGxpc2lvblZlcnRleEJ1ZmZlcj10LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLmNvbGxpc2lvblZlcnRleEFycmF5LHphLm1lbWJlcnMsITApfSxxYS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMubGF5b3V0VmVydGV4QnVmZmVyJiYodGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXIuZGVzdHJveSgpLHRoaXMuaW5kZXhCdWZmZXIuZGVzdHJveSgpLHRoaXMuc2VnbWVudHMuZGVzdHJveSgpLHRoaXMuY29sbGlzaW9uVmVydGV4QnVmZmVyLmRlc3Ryb3koKSl9LHByKCJDb2xsaXNpb25CdWZmZXJzIixxYSk7dmFyIEhhPWZ1bmN0aW9uKHQpe3RoaXMuY29sbGlzaW9uQm94QXJyYXk9dC5jb2xsaXNpb25Cb3hBcnJheSx0aGlzLnpvb209dC56b29tLHRoaXMub3ZlcnNjYWxpbmc9dC5vdmVyc2NhbGluZyx0aGlzLmxheWVycz10LmxheWVycyx0aGlzLmxheWVySWRzPXRoaXMubGF5ZXJzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5pZH0pLHRoaXMuaW5kZXg9dC5pbmRleCx0aGlzLnBpeGVsUmF0aW89dC5waXhlbFJhdGlvLHRoaXMuc291cmNlTGF5ZXJJbmRleD10LnNvdXJjZUxheWVySW5kZXg7dmFyIGU9dGhpcy5sYXllcnNbMF0uX3VuZXZhbHVhdGVkTGF5b3V0Ll92YWx1ZXM7dGhpcy50ZXh0U2l6ZURhdGE9QmEodGhpcy56b29tLGVbInRleHQtc2l6ZSJdKSx0aGlzLmljb25TaXplRGF0YT1CYSh0aGlzLnpvb20sZVsiaWNvbi1zaXplIl0pO3ZhciByPXRoaXMubGF5ZXJzWzBdLmxheW91dDt0aGlzLnNvcnRGZWF0dXJlc0J5WT1yLmdldCgidGV4dC1hbGxvdy1vdmVybGFwIil8fHIuZ2V0KCJpY29uLWFsbG93LW92ZXJsYXAiKXx8ci5nZXQoInRleHQtaWdub3JlLXBsYWNlbWVudCIpfHxyLmdldCgiaWNvbi1pZ25vcmUtcGxhY2VtZW50Iil9O0hhLnByb3RvdHlwZS5jcmVhdGVBcnJheXM9ZnVuY3Rpb24oKXt0aGlzLnRleHQ9bmV3IFVhKG5ldyBJbihDYS5tZW1iZXJzLHRoaXMubGF5ZXJzLHRoaXMuem9vbSxmdW5jdGlvbih0KXtyZXR1cm4vXnRleHQvLnRlc3QodCl9KSksdGhpcy5pY29uPW5ldyBVYShuZXcgSW4oQ2EubWVtYmVycyx0aGlzLmxheWVycyx0aGlzLnpvb20sZnVuY3Rpb24odCl7cmV0dXJuL15pY29uLy50ZXN0KHQpfSkpLHRoaXMuY29sbGlzaW9uQm94PW5ldyBxYShhbixQYS5tZW1iZXJzLGZuKSx0aGlzLmNvbGxpc2lvbkNpcmNsZT1uZXcgcWEoYW4sSWEubWVtYmVycyxobiksdGhpcy5nbHlwaE9mZnNldEFycmF5PW5ldyBibix0aGlzLmxpbmVWZXJ0ZXhBcnJheT1uZXcgd259LEhhLnByb3RvdHlwZS5wb3B1bGF0ZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMubGF5ZXJzWzBdLG49ci5sYXlvdXQsaT1uLmdldCgidGV4dC1mb250IiksYT1uLmdldCgidGV4dC1maWVsZCIpLG89bi5nZXQoImljb24taW1hZ2UiKSxzPSgiY29uc3RhbnQiIT09YS52YWx1ZS5raW5kfHxhLnZhbHVlLnZhbHVlLmxlbmd0aD4wKSYmKCJjb25zdGFudCIhPT1pLnZhbHVlLmtpbmR8fGkudmFsdWUudmFsdWUubGVuZ3RoPjApLGw9ImNvbnN0YW50IiE9PW8udmFsdWUua2luZHx8by52YWx1ZS52YWx1ZSYmby52YWx1ZS52YWx1ZS5sZW5ndGg+MDtpZih0aGlzLmZlYXR1cmVzPVtdLHN8fGwpe2Zvcih2YXIgYz1lLmljb25EZXBlbmRlbmNpZXMsdT1lLmdseXBoRGVwZW5kZW5jaWVzLGg9bmV3IExyKHRoaXMuem9vbSksZj0wLHA9dDtmPHAubGVuZ3RoO2YrPTEpe3ZhciBkPXBbZl0sZz1kLmZlYXR1cmUsbT1kLmluZGV4LHY9ZC5zb3VyY2VMYXllckluZGV4O2lmKHIuX2ZlYXR1cmVGaWx0ZXIoaCxnKSl7dmFyIHk9dm9pZCAwO3MmJih5PU9hKHk9ci5nZXRWYWx1ZUFuZFJlc29sdmVUb2tlbnMoInRleHQtZmllbGQiLGcpLHIsZykpO3ZhciB4PXZvaWQgMDtpZihsJiYoeD1yLmdldFZhbHVlQW5kUmVzb2x2ZVRva2VucygiaWNvbi1pbWFnZSIsZykpLHl8fHgpe3ZhciBiPXt0ZXh0OnksaWNvbjp4LGluZGV4Om0sc291cmNlTGF5ZXJJbmRleDp2LGdlb21ldHJ5OkJuKGcpLHByb3BlcnRpZXM6Zy5wcm9wZXJ0aWVzLHR5cGU6RmFbZy50eXBlXX07aWYodm9pZCAwIT09Zy5pZCYmKGIuaWQ9Zy5pZCksdGhpcy5mZWF0dXJlcy5wdXNoKGIpLHgmJihjW3hdPSEwKSx5KWZvcih2YXIgXz1pLmV2YWx1YXRlKGcpLmpvaW4oIiwiKSx3PXVbX109dVtfXXx8e30saz0ibWFwIj09PW4uZ2V0KCJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudCIpJiYibGluZSI9PT1uLmdldCgic3ltYm9sLXBsYWNlbWVudCIpLE09eHIoeSksQT0wO0E8eS5sZW5ndGg7QSsrKWlmKHdbeS5jaGFyQ29kZUF0KEEpXT0hMCxrJiZNKXt2YXIgVD1EYVt5LmNoYXJBdChBKV07VCYmKHdbVC5jaGFyQ29kZUF0KDApXT0hMCl9fX19ImxpbmUiPT09bi5nZXQoInN5bWJvbC1wbGFjZW1lbnQiKSYmKHRoaXMuZmVhdHVyZXM9ZnVuY3Rpb24odCl7dmFyIGU9e30scj17fSxuPVtdLGk9MDtmdW5jdGlvbiBhKGUpe24ucHVzaCh0W2VdKSxpKyt9ZnVuY3Rpb24gbyh0LGUsaSl7dmFyIGE9clt0XTtyZXR1cm4gZGVsZXRlIHJbdF0scltlXT1hLG5bYV0uZ2VvbWV0cnlbMF0ucG9wKCksblthXS5nZW9tZXRyeVswXT1uW2FdLmdlb21ldHJ5WzBdLmNvbmNhdChpWzBdKSxhfWZ1bmN0aW9uIHModCxyLGkpe3ZhciBhPWVbcl07cmV0dXJuIGRlbGV0ZSBlW3JdLGVbdF09YSxuW2FdLmdlb21ldHJ5WzBdLnNoaWZ0KCksblthXS5nZW9tZXRyeVswXT1pWzBdLmNvbmNhdChuW2FdLmdlb21ldHJ5WzBdKSxhfWZ1bmN0aW9uIGwodCxlLHIpe3ZhciBuPXI/ZVswXVtlWzBdLmxlbmd0aC0xXTplWzBdWzBdO3JldHVybiB0KyI6IituLngrIjoiK24ueX1mb3IodmFyIGM9MDtjPHQubGVuZ3RoO2MrKyl7dmFyIHU9dFtjXSxoPXUuZ2VvbWV0cnksZj11LnRleHQ7aWYoZil7dmFyIHA9bChmLGgpLGQ9bChmLGgsITApO2lmKHAgaW4gciYmZCBpbiBlJiZyW3BdIT09ZVtkXSl7dmFyIGc9cyhwLGQsaCksbT1vKHAsZCxuW2ddLmdlb21ldHJ5KTtkZWxldGUgZVtwXSxkZWxldGUgcltkXSxyW2woZixuW21dLmdlb21ldHJ5LCEwKV09bSxuW2ddLmdlb21ldHJ5PW51bGx9ZWxzZSBwIGluIHI/byhwLGQsaCk6ZCBpbiBlP3MocCxkLGgpOihhKGMpLGVbcF09aS0xLHJbZF09aS0xKX1lbHNlIGEoYyl9cmV0dXJuIG4uZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0Lmdlb21ldHJ5fSl9KHRoaXMuZmVhdHVyZXMpKX19LEhhLnByb3RvdHlwZS5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLnN5bWJvbEluc3RhbmNlcy5sZW5ndGh9LEhhLnByb3RvdHlwZS51cGxvYWQ9ZnVuY3Rpb24odCl7dGhpcy50ZXh0LnVwbG9hZCh0LHRoaXMuc29ydEZlYXR1cmVzQnlZKSx0aGlzLmljb24udXBsb2FkKHQsdGhpcy5zb3J0RmVhdHVyZXNCeVkpLHRoaXMuY29sbGlzaW9uQm94LnVwbG9hZCh0KSx0aGlzLmNvbGxpc2lvbkNpcmNsZS51cGxvYWQodCl9LEhhLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy50ZXh0LmRlc3Ryb3koKSx0aGlzLmljb24uZGVzdHJveSgpLHRoaXMuY29sbGlzaW9uQm94LmRlc3Ryb3koKSx0aGlzLmNvbGxpc2lvbkNpcmNsZS5kZXN0cm95KCl9LEhhLnByb3RvdHlwZS5hZGRUb0xpbmVWZXJ0ZXhBcnJheT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMubGluZVZlcnRleEFycmF5Lmxlbmd0aDtpZih2b2lkIDAhPT10LnNlZ21lbnQpe2Zvcih2YXIgbj10LmRpc3QoZVt0LnNlZ21lbnQrMV0pLGk9dC5kaXN0KGVbdC5zZWdtZW50XSksYT17fSxvPXQuc2VnbWVudCsxO288ZS5sZW5ndGg7bysrKWFbb109e3g6ZVtvXS54LHk6ZVtvXS55LHRpbGVVbml0RGlzdGFuY2VGcm9tQW5jaG9yOm59LG88ZS5sZW5ndGgtMSYmKG4rPWVbbysxXS5kaXN0KGVbb10pKTtmb3IodmFyIHM9dC5zZWdtZW50fHwwO3M+PTA7cy0tKWFbc109e3g6ZVtzXS54LHk6ZVtzXS55LHRpbGVVbml0RGlzdGFuY2VGcm9tQW5jaG9yOml9LHM+MCYmKGkrPWVbcy0xXS5kaXN0KGVbc10pKTtmb3IodmFyIGw9MDtsPGUubGVuZ3RoO2wrKyl7dmFyIGM9YVtsXTt0aGlzLmxpbmVWZXJ0ZXhBcnJheS5lbXBsYWNlQmFjayhjLngsYy55LGMudGlsZVVuaXREaXN0YW5jZUZyb21BbmNob3IpfX1yZXR1cm57bGluZVN0YXJ0SW5kZXg6cixsaW5lTGVuZ3RoOnRoaXMubGluZVZlcnRleEFycmF5Lmxlbmd0aC1yfX0sSGEucHJvdG90eXBlLmFkZFN5bWJvbHM9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwsYyl7Zm9yKHZhciB1PXQuaW5kZXhBcnJheSxoPXQubGF5b3V0VmVydGV4QXJyYXksZj10LmR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheSxwPXQuc2VnbWVudHMucHJlcGFyZVNlZ21lbnQoNCplLmxlbmd0aCx0LmxheW91dFZlcnRleEFycmF5LHQuaW5kZXhBcnJheSksZD10aGlzLmdseXBoT2Zmc2V0QXJyYXkubGVuZ3RoLGc9cC52ZXJ0ZXhMZW5ndGgsbT0wLHY9ZTttPHYubGVuZ3RoO20rPTEpe3ZhciB5PXZbbV0seD15LnRsLGI9eS50cixfPXkuYmwsdz15LmJyLGs9eS50ZXgsTT1wLnZlcnRleExlbmd0aCxBPXkuZ2x5cGhPZmZzZXRbMV07amEoaCxzLngscy55LHgueCxBK3gueSxrLngsay55LHIpLGphKGgscy54LHMueSxiLngsQStiLnksay54K2sudyxrLnksciksamEoaCxzLngscy55LF8ueCxBK18ueSxrLngsay55K2suaCxyKSxqYShoLHMueCxzLnksdy54LEErdy55LGsueCtrLncsay55K2suaCxyKSxWYShmLHMsMCksdS5lbXBsYWNlQmFjayhNLE0rMSxNKzIpLHUuZW1wbGFjZUJhY2soTSsxLE0rMixNKzMpLHAudmVydGV4TGVuZ3RoKz00LHAucHJpbWl0aXZlTGVuZ3RoKz0yLHRoaXMuZ2x5cGhPZmZzZXRBcnJheS5lbXBsYWNlQmFjayh5LmdseXBoT2Zmc2V0WzBdKX10LnBsYWNlZFN5bWJvbEFycmF5LmVtcGxhY2VCYWNrKHMueCxzLnksZCx0aGlzLmdseXBoT2Zmc2V0QXJyYXkubGVuZ3RoLWQsZyxsLGMscy5zZWdtZW50LHI/clswXTowLHI/clsxXTowLG5bMF0sblsxXSxvLCExKSx0LnByb2dyYW1Db25maWd1cmF0aW9ucy5wb3B1bGF0ZVBhaW50QXJyYXlzKHQubGF5b3V0VmVydGV4QXJyYXkubGVuZ3RoLGEpfSxIYS5wcm90b3R5cGUuX2FkZENvbGxpc2lvbkRlYnVnVmVydGV4PWZ1bmN0aW9uKHQsZSxyLG4saSl7cmV0dXJuIGUuZW1wbGFjZUJhY2soMCwwKSx0LmVtcGxhY2VCYWNrKHIueCxyLnksbi54LG4ueSxNYXRoLnJvdW5kKGkueCksTWF0aC5yb3VuZChpLnkpKX0sSGEucHJvdG90eXBlLmFkZENvbGxpc2lvbkRlYnVnVmVydGljZXM9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzKXt2YXIgYz1pLnNlZ21lbnRzLnByZXBhcmVTZWdtZW50KDQsaS5sYXlvdXRWZXJ0ZXhBcnJheSxpLmluZGV4QXJyYXkpLHU9Yy52ZXJ0ZXhMZW5ndGgsaD1pLmxheW91dFZlcnRleEFycmF5LGY9aS5jb2xsaXNpb25WZXJ0ZXhBcnJheTtpZih0aGlzLl9hZGRDb2xsaXNpb25EZWJ1Z1ZlcnRleChoLGYsYSxvLmFuY2hvcixuZXcgbCh0LGUpKSx0aGlzLl9hZGRDb2xsaXNpb25EZWJ1Z1ZlcnRleChoLGYsYSxvLmFuY2hvcixuZXcgbChyLGUpKSx0aGlzLl9hZGRDb2xsaXNpb25EZWJ1Z1ZlcnRleChoLGYsYSxvLmFuY2hvcixuZXcgbChyLG4pKSx0aGlzLl9hZGRDb2xsaXNpb25EZWJ1Z1ZlcnRleChoLGYsYSxvLmFuY2hvcixuZXcgbCh0LG4pKSxjLnZlcnRleExlbmd0aCs9NCxzKXt2YXIgcD1pLmluZGV4QXJyYXk7cC5lbXBsYWNlQmFjayh1LHUrMSx1KzIpLHAuZW1wbGFjZUJhY2sodSx1KzIsdSszKSxjLnByaW1pdGl2ZUxlbmd0aCs9Mn1lbHNle3ZhciBkPWkuaW5kZXhBcnJheTtkLmVtcGxhY2VCYWNrKHUsdSsxKSxkLmVtcGxhY2VCYWNrKHUrMSx1KzIpLGQuZW1wbGFjZUJhY2sodSsyLHUrMyksZC5lbXBsYWNlQmFjayh1KzMsdSksYy5wcmltaXRpdmVMZW5ndGgrPTR9fSxIYS5wcm90b3R5cGUuZ2VuZXJhdGVDb2xsaXNpb25EZWJ1Z0J1ZmZlcnM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MCxlPXRoaXMuc3ltYm9sSW5zdGFuY2VzO3Q8ZS5sZW5ndGg7dCs9MSl7dmFyIHI9ZVt0XTtyLnRleHRDb2xsaXNpb25GZWF0dXJlPXtib3hTdGFydEluZGV4OnIudGV4dEJveFN0YXJ0SW5kZXgsYm94RW5kSW5kZXg6ci50ZXh0Qm94RW5kSW5kZXh9LHIuaWNvbkNvbGxpc2lvbkZlYXR1cmU9e2JveFN0YXJ0SW5kZXg6ci5pY29uQm94U3RhcnRJbmRleCxib3hFbmRJbmRleDpyLmljb25Cb3hFbmRJbmRleH07Zm9yKHZhciBuPTA7bjwyO24rKyl7dmFyIGk9clswPT09bj8idGV4dENvbGxpc2lvbkZlYXR1cmUiOiJpY29uQ29sbGlzaW9uRmVhdHVyZSJdO2lmKGkpZm9yKHZhciBhPWkuYm94U3RhcnRJbmRleDthPGkuYm94RW5kSW5kZXg7YSsrKXt2YXIgbz10aGlzLmNvbGxpc2lvbkJveEFycmF5LmdldChhKSxzPW8ueDEsbD1vLnkxLGM9by54Mix1PW8ueTIsaD1vLnJhZGl1cz4wO3RoaXMuYWRkQ29sbGlzaW9uRGVidWdWZXJ0aWNlcyhzLGwsYyx1LGg/dGhpcy5jb2xsaXNpb25DaXJjbGU6dGhpcy5jb2xsaXNpb25Cb3gsby5hbmNob3JQb2ludCxyLGgpfX19fSxIYS5wcm90b3R5cGUuZGVzZXJpYWxpemVDb2xsaXNpb25Cb3hlcz1mdW5jdGlvbih0LGUscixuLGkpe2Zvcih2YXIgYT17fSxvPWU7bzxyO28rKyl7dmFyIHM9dC5nZXQobyk7aWYoMD09PXMucmFkaXVzKXthLnRleHRCb3g9e3gxOnMueDEseTE6cy55MSx4MjpzLngyLHkyOnMueTIsYW5jaG9yUG9pbnRYOnMuYW5jaG9yUG9pbnRYLGFuY2hvclBvaW50WTpzLmFuY2hvclBvaW50WX0sYS50ZXh0RmVhdHVyZUluZGV4PXMuZmVhdHVyZUluZGV4O2JyZWFrfWEudGV4dENpcmNsZXN8fChhLnRleHRDaXJjbGVzPVtdLGEudGV4dEZlYXR1cmVJbmRleD1zLmZlYXR1cmVJbmRleCksYS50ZXh0Q2lyY2xlcy5wdXNoKHMuYW5jaG9yUG9pbnRYLHMuYW5jaG9yUG9pbnRZLHMucmFkaXVzLHMuc2lnbmVkRGlzdGFuY2VGcm9tQW5jaG9yLDEpfWZvcih2YXIgbD1uO2w8aTtsKyspe3ZhciBjPXQuZ2V0KGwpO2lmKDA9PT1jLnJhZGl1cyl7YS5pY29uQm94PXt4MTpjLngxLHkxOmMueTEseDI6Yy54Mix5MjpjLnkyLGFuY2hvclBvaW50WDpjLmFuY2hvclBvaW50WCxhbmNob3JQb2ludFk6Yy5hbmNob3JQb2ludFl9LGEuaWNvbkZlYXR1cmVJbmRleD1jLmZlYXR1cmVJbmRleDticmVha319cmV0dXJuIGF9LEhhLnByb3RvdHlwZS5oYXNUZXh0RGF0YT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRleHQuc2VnbWVudHMuZ2V0KCkubGVuZ3RoPjB9LEhhLnByb3RvdHlwZS5oYXNJY29uRGF0YT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmljb24uc2VnbWVudHMuZ2V0KCkubGVuZ3RoPjB9LEhhLnByb3RvdHlwZS5oYXNDb2xsaXNpb25Cb3hEYXRhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29sbGlzaW9uQm94LnNlZ21lbnRzLmdldCgpLmxlbmd0aD4wfSxIYS5wcm90b3R5cGUuaGFzQ29sbGlzaW9uQ2lyY2xlRGF0YT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbGxpc2lvbkNpcmNsZS5zZWdtZW50cy5nZXQoKS5sZW5ndGg+MH0sSGEucHJvdG90eXBlLnNvcnRGZWF0dXJlcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKHRoaXMuc29ydEZlYXR1cmVzQnlZJiZ0aGlzLnNvcnRlZEFuZ2xlIT09dCYmKHRoaXMuc29ydGVkQW5nbGU9dCwhKHRoaXMudGV4dC5zZWdtZW50cy5nZXQoKS5sZW5ndGg+MXx8dGhpcy5pY29uLnNlZ21lbnRzLmdldCgpLmxlbmd0aD4xKSkpe2Zvcih2YXIgcj1bXSxuPTA7bjx0aGlzLnN5bWJvbEluc3RhbmNlcy5sZW5ndGg7bisrKXIucHVzaChuKTt2YXIgaT1NYXRoLnNpbih0KSxhPU1hdGguY29zKHQpO3Iuc29ydChmdW5jdGlvbih0LHIpe3ZhciBuPWUuc3ltYm9sSW5zdGFuY2VzW3RdLG89ZS5zeW1ib2xJbnN0YW5jZXNbcl07cmV0dXJuKGkqbi5hbmNob3IueCthKm4uYW5jaG9yLnl8MCktKGkqby5hbmNob3IueCthKm8uYW5jaG9yLnl8MCl8fG8uZmVhdHVyZUluZGV4LW4uZmVhdHVyZUluZGV4fSksdGhpcy50ZXh0LmluZGV4QXJyYXkuY2xlYXIoKSx0aGlzLmljb24uaW5kZXhBcnJheS5jbGVhcigpLHRoaXMuZmVhdHVyZVNvcnRPcmRlcj1bXTtmb3IodmFyIG89MCxzPXI7bzxzLmxlbmd0aDtvKz0xKXt2YXIgbD1zW29dLGM9ZS5zeW1ib2xJbnN0YW5jZXNbbF07ZS5mZWF0dXJlU29ydE9yZGVyLnB1c2goYy5mZWF0dXJlSW5kZXgpO2Zvcih2YXIgdT0wLGg9Yy5wbGFjZWRUZXh0U3ltYm9sSW5kaWNlczt1PGgubGVuZ3RoO3UrPTEpZm9yKHZhciBmPWhbdV0scD1lLnRleHQucGxhY2VkU3ltYm9sQXJyYXkuZ2V0KGYpLGQ9cC52ZXJ0ZXhTdGFydEluZGV4KzQqcC5udW1HbHlwaHMsZz1wLnZlcnRleFN0YXJ0SW5kZXg7ZzxkO2crPTQpZS50ZXh0LmluZGV4QXJyYXkuZW1wbGFjZUJhY2soZyxnKzEsZysyKSxlLnRleHQuaW5kZXhBcnJheS5lbXBsYWNlQmFjayhnKzEsZysyLGcrMyk7dmFyIG09ZS5pY29uLnBsYWNlZFN5bWJvbEFycmF5LmdldChsKTtpZihtLm51bUdseXBocyl7dmFyIHY9bS52ZXJ0ZXhTdGFydEluZGV4O2UuaWNvbi5pbmRleEFycmF5LmVtcGxhY2VCYWNrKHYsdisxLHYrMiksZS5pY29uLmluZGV4QXJyYXkuZW1wbGFjZUJhY2sodisxLHYrMix2KzMpfX10aGlzLnRleHQuaW5kZXhCdWZmZXImJnRoaXMudGV4dC5pbmRleEJ1ZmZlci51cGRhdGVEYXRhKHRoaXMudGV4dC5pbmRleEFycmF5KSx0aGlzLmljb24uaW5kZXhCdWZmZXImJnRoaXMuaWNvbi5pbmRleEJ1ZmZlci51cGRhdGVEYXRhKHRoaXMuaWNvbi5pbmRleEFycmF5KX19LHByKCJTeW1ib2xCdWNrZXQiLEhhLHtvbWl0OlsibGF5ZXJzIiwiY29sbGlzaW9uQm94QXJyYXkiLCJmZWF0dXJlcyIsImNvbXBhcmVUZXh0Il0sc2hhbGxvdzpbInN5bWJvbEluc3RhbmNlcyJdfSksSGEuTUFYX0dMWVBIUz02NTUzNSxIYS5hZGREeW5hbWljQXR0cmlidXRlcz1WYTt2YXIgR2E9bmV3IHFyKHsic3ltYm9sLXBsYWNlbWVudCI6bmV3IE5yKEkubGF5b3V0X3N5bWJvbFsic3ltYm9sLXBsYWNlbWVudCJdKSwic3ltYm9sLXNwYWNpbmciOm5ldyBOcihJLmxheW91dF9zeW1ib2xbInN5bWJvbC1zcGFjaW5nIl0pLCJzeW1ib2wtYXZvaWQtZWRnZXMiOm5ldyBOcihJLmxheW91dF9zeW1ib2xbInN5bWJvbC1hdm9pZC1lZGdlcyJdKSwiaWNvbi1hbGxvdy1vdmVybGFwIjpuZXcgTnIoSS5sYXlvdXRfc3ltYm9sWyJpY29uLWFsbG93LW92ZXJsYXAiXSksImljb24taWdub3JlLXBsYWNlbWVudCI6bmV3IE5yKEkubGF5b3V0X3N5bWJvbFsiaWNvbi1pZ25vcmUtcGxhY2VtZW50Il0pLCJpY29uLW9wdGlvbmFsIjpuZXcgTnIoSS5sYXlvdXRfc3ltYm9sWyJpY29uLW9wdGlvbmFsIl0pLCJpY29uLXJvdGF0aW9uLWFsaWdubWVudCI6bmV3IE5yKEkubGF5b3V0X3N5bWJvbFsiaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnQiXSksImljb24tc2l6ZSI6bmV3IGpyKEkubGF5b3V0X3N5bWJvbFsiaWNvbi1zaXplIl0pLCJpY29uLXRleHQtZml0IjpuZXcgTnIoSS5sYXlvdXRfc3ltYm9sWyJpY29uLXRleHQtZml0Il0pLCJpY29uLXRleHQtZml0LXBhZGRpbmciOm5ldyBOcihJLmxheW91dF9zeW1ib2xbImljb24tdGV4dC1maXQtcGFkZGluZyJdKSwiaWNvbi1pbWFnZSI6bmV3IGpyKEkubGF5b3V0X3N5bWJvbFsiaWNvbi1pbWFnZSJdKSwiaWNvbi1yb3RhdGUiOm5ldyBqcihJLmxheW91dF9zeW1ib2xbImljb24tcm90YXRlIl0pLCJpY29uLXBhZGRpbmciOm5ldyBOcihJLmxheW91dF9zeW1ib2xbImljb24tcGFkZGluZyJdKSwiaWNvbi1rZWVwLXVwcmlnaHQiOm5ldyBOcihJLmxheW91dF9zeW1ib2xbImljb24ta2VlcC11cHJpZ2h0Il0pLCJpY29uLW9mZnNldCI6bmV3IGpyKEkubGF5b3V0X3N5bWJvbFsiaWNvbi1vZmZzZXQiXSksImljb24tYW5jaG9yIjpuZXcganIoSS5sYXlvdXRfc3ltYm9sWyJpY29uLWFuY2hvciJdKSwiaWNvbi1waXRjaC1hbGlnbm1lbnQiOm5ldyBOcihJLmxheW91dF9zeW1ib2xbImljb24tcGl0Y2gtYWxpZ25tZW50Il0pLCJ0ZXh0LXBpdGNoLWFsaWdubWVudCI6bmV3IE5yKEkubGF5b3V0X3N5bWJvbFsidGV4dC1waXRjaC1hbGlnbm1lbnQiXSksInRleHQtcm90YXRpb24tYWxpZ25tZW50IjpuZXcgTnIoSS5sYXlvdXRfc3ltYm9sWyJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudCJdKSwidGV4dC1maWVsZCI6bmV3IGpyKEkubGF5b3V0X3N5bWJvbFsidGV4dC1maWVsZCJdKSwidGV4dC1mb250IjpuZXcganIoSS5sYXlvdXRfc3ltYm9sWyJ0ZXh0LWZvbnQiXSksInRleHQtc2l6ZSI6bmV3IGpyKEkubGF5b3V0X3N5bWJvbFsidGV4dC1zaXplIl0pLCJ0ZXh0LW1heC13aWR0aCI6bmV3IGpyKEkubGF5b3V0X3N5bWJvbFsidGV4dC1tYXgtd2lkdGgiXSksInRleHQtbGluZS1oZWlnaHQiOm5ldyBOcihJLmxheW91dF9zeW1ib2xbInRleHQtbGluZS1oZWlnaHQiXSksInRleHQtbGV0dGVyLXNwYWNpbmciOm5ldyBqcihJLmxheW91dF9zeW1ib2xbInRleHQtbGV0dGVyLXNwYWNpbmciXSksInRleHQtanVzdGlmeSI6bmV3IGpyKEkubGF5b3V0X3N5bWJvbFsidGV4dC1qdXN0aWZ5Il0pLCJ0ZXh0LWFuY2hvciI6bmV3IGpyKEkubGF5b3V0X3N5bWJvbFsidGV4dC1hbmNob3IiXSksInRleHQtbWF4LWFuZ2xlIjpuZXcgTnIoSS5sYXlvdXRfc3ltYm9sWyJ0ZXh0LW1heC1hbmdsZSJdKSwidGV4dC1yb3RhdGUiOm5ldyBqcihJLmxheW91dF9zeW1ib2xbInRleHQtcm90YXRlIl0pLCJ0ZXh0LXBhZGRpbmciOm5ldyBOcihJLmxheW91dF9zeW1ib2xbInRleHQtcGFkZGluZyJdKSwidGV4dC1rZWVwLXVwcmlnaHQiOm5ldyBOcihJLmxheW91dF9zeW1ib2xbInRleHQta2VlcC11cHJpZ2h0Il0pLCJ0ZXh0LXRyYW5zZm9ybSI6bmV3IGpyKEkubGF5b3V0X3N5bWJvbFsidGV4dC10cmFuc2Zvcm0iXSksInRleHQtb2Zmc2V0IjpuZXcganIoSS5sYXlvdXRfc3ltYm9sWyJ0ZXh0LW9mZnNldCJdKSwidGV4dC1hbGxvdy1vdmVybGFwIjpuZXcgTnIoSS5sYXlvdXRfc3ltYm9sWyJ0ZXh0LWFsbG93LW92ZXJsYXAiXSksInRleHQtaWdub3JlLXBsYWNlbWVudCI6bmV3IE5yKEkubGF5b3V0X3N5bWJvbFsidGV4dC1pZ25vcmUtcGxhY2VtZW50Il0pLCJ0ZXh0LW9wdGlvbmFsIjpuZXcgTnIoSS5sYXlvdXRfc3ltYm9sWyJ0ZXh0LW9wdGlvbmFsIl0pfSksV2E9e3BhaW50Om5ldyBxcih7Imljb24tb3BhY2l0eSI6bmV3IGpyKEkucGFpbnRfc3ltYm9sWyJpY29uLW9wYWNpdHkiXSksImljb24tY29sb3IiOm5ldyBqcihJLnBhaW50X3N5bWJvbFsiaWNvbi1jb2xvciJdKSwiaWNvbi1oYWxvLWNvbG9yIjpuZXcganIoSS5wYWludF9zeW1ib2xbImljb24taGFsby1jb2xvciJdKSwiaWNvbi1oYWxvLXdpZHRoIjpuZXcganIoSS5wYWludF9zeW1ib2xbImljb24taGFsby13aWR0aCJdKSwiaWNvbi1oYWxvLWJsdXIiOm5ldyBqcihJLnBhaW50X3N5bWJvbFsiaWNvbi1oYWxvLWJsdXIiXSksImljb24tdHJhbnNsYXRlIjpuZXcgTnIoSS5wYWludF9zeW1ib2xbImljb24tdHJhbnNsYXRlIl0pLCJpY29uLXRyYW5zbGF0ZS1hbmNob3IiOm5ldyBOcihJLnBhaW50X3N5bWJvbFsiaWNvbi10cmFuc2xhdGUtYW5jaG9yIl0pLCJ0ZXh0LW9wYWNpdHkiOm5ldyBqcihJLnBhaW50X3N5bWJvbFsidGV4dC1vcGFjaXR5Il0pLCJ0ZXh0LWNvbG9yIjpuZXcganIoSS5wYWludF9zeW1ib2xbInRleHQtY29sb3IiXSksInRleHQtaGFsby1jb2xvciI6bmV3IGpyKEkucGFpbnRfc3ltYm9sWyJ0ZXh0LWhhbG8tY29sb3IiXSksInRleHQtaGFsby13aWR0aCI6bmV3IGpyKEkucGFpbnRfc3ltYm9sWyJ0ZXh0LWhhbG8td2lkdGgiXSksInRleHQtaGFsby1ibHVyIjpuZXcganIoSS5wYWludF9zeW1ib2xbInRleHQtaGFsby1ibHVyIl0pLCJ0ZXh0LXRyYW5zbGF0ZSI6bmV3IE5yKEkucGFpbnRfc3ltYm9sWyJ0ZXh0LXRyYW5zbGF0ZSJdKSwidGV4dC10cmFuc2xhdGUtYW5jaG9yIjpuZXcgTnIoSS5wYWludF9zeW1ib2xbInRleHQtdHJhbnNsYXRlLWFuY2hvciJdKX0pLGxheW91dDpHYX0sWWE9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt0LmNhbGwodGhpcyxlLFdhKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUucmVjYWxjdWxhdGU9ZnVuY3Rpb24oZSl7dC5wcm90b3R5cGUucmVjYWxjdWxhdGUuY2FsbCh0aGlzLGUpLCJhdXRvIj09PXRoaXMubGF5b3V0LmdldCgiaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnQiKSYmKCJsaW5lIj09PXRoaXMubGF5b3V0LmdldCgic3ltYm9sLXBsYWNlbWVudCIpP3RoaXMubGF5b3V0Ll92YWx1ZXNbImljb24tcm90YXRpb24tYWxpZ25tZW50Il09Im1hcCI6dGhpcy5sYXlvdXQuX3ZhbHVlc1siaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnQiXT0idmlld3BvcnQiKSwiYXV0byI9PT10aGlzLmxheW91dC5nZXQoInRleHQtcm90YXRpb24tYWxpZ25tZW50IikmJigibGluZSI9PT10aGlzLmxheW91dC5nZXQoInN5bWJvbC1wbGFjZW1lbnQiKT90aGlzLmxheW91dC5fdmFsdWVzWyJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudCJdPSJtYXAiOnRoaXMubGF5b3V0Ll92YWx1ZXNbInRleHQtcm90YXRpb24tYWxpZ25tZW50Il09InZpZXdwb3J0IiksImF1dG8iPT09dGhpcy5sYXlvdXQuZ2V0KCJ0ZXh0LXBpdGNoLWFsaWdubWVudCIpJiYodGhpcy5sYXlvdXQuX3ZhbHVlc1sidGV4dC1waXRjaC1hbGlnbm1lbnQiXT10aGlzLmxheW91dC5nZXQoInRleHQtcm90YXRpb24tYWxpZ25tZW50IikpLCJhdXRvIj09PXRoaXMubGF5b3V0LmdldCgiaWNvbi1waXRjaC1hbGlnbm1lbnQiKSYmKHRoaXMubGF5b3V0Ll92YWx1ZXNbImljb24tcGl0Y2gtYWxpZ25tZW50Il09dGhpcy5sYXlvdXQuZ2V0KCJpY29uLXJvdGF0aW9uLWFsaWdubWVudCIpKX0sZS5wcm90b3R5cGUuZ2V0VmFsdWVBbmRSZXNvbHZlVG9rZW5zPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj10aGlzLmxheW91dC5nZXQodCkuZXZhbHVhdGUoZSksaT10aGlzLl91bmV2YWx1YXRlZExheW91dC5fdmFsdWVzW3RdO3JldHVybiBpLmlzRGF0YURyaXZlbigpfHxfZShpLnZhbHVlKT9uOihyPWUucHJvcGVydGllcyxuLnJlcGxhY2UoL3soW157fV0rKX0vZyxmdW5jdGlvbih0LGUpe3JldHVybiBlIGluIHI/U3RyaW5nKHJbZV0pOiIifSkpfSxlLnByb3RvdHlwZS5jcmVhdGVCdWNrZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBIYSh0KX0sZS5wcm90b3R5cGUucXVlcnlSYWRpdXM9ZnVuY3Rpb24oKXtyZXR1cm4gMH0sZS5wcm90b3R5cGUucXVlcnlJbnRlcnNlY3RzRmVhdHVyZT1mdW5jdGlvbigpe3JldHVybiExfSxlfShIciksWGE9e3BhaW50Om5ldyBxcih7ImJhY2tncm91bmQtY29sb3IiOm5ldyBOcihJLnBhaW50X2JhY2tncm91bmRbImJhY2tncm91bmQtY29sb3IiXSksImJhY2tncm91bmQtcGF0dGVybiI6bmV3IFZyKEkucGFpbnRfYmFja2dyb3VuZFsiYmFja2dyb3VuZC1wYXR0ZXJuIl0pLCJiYWNrZ3JvdW5kLW9wYWNpdHkiOm5ldyBOcihJLnBhaW50X2JhY2tncm91bmRbImJhY2tncm91bmQtb3BhY2l0eSJdKX0pfSxaYT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3QuY2FsbCh0aGlzLGUsWGEpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlfShIciksJGE9e3BhaW50Om5ldyBxcih7InJhc3Rlci1vcGFjaXR5IjpuZXcgTnIoSS5wYWludF9yYXN0ZXJbInJhc3Rlci1vcGFjaXR5Il0pLCJyYXN0ZXItaHVlLXJvdGF0ZSI6bmV3IE5yKEkucGFpbnRfcmFzdGVyWyJyYXN0ZXItaHVlLXJvdGF0ZSJdKSwicmFzdGVyLWJyaWdodG5lc3MtbWluIjpuZXcgTnIoSS5wYWludF9yYXN0ZXJbInJhc3Rlci1icmlnaHRuZXNzLW1pbiJdKSwicmFzdGVyLWJyaWdodG5lc3MtbWF4IjpuZXcgTnIoSS5wYWludF9yYXN0ZXJbInJhc3Rlci1icmlnaHRuZXNzLW1heCJdKSwicmFzdGVyLXNhdHVyYXRpb24iOm5ldyBOcihJLnBhaW50X3Jhc3RlclsicmFzdGVyLXNhdHVyYXRpb24iXSksInJhc3Rlci1jb250cmFzdCI6bmV3IE5yKEkucGFpbnRfcmFzdGVyWyJyYXN0ZXItY29udHJhc3QiXSksInJhc3Rlci1mYWRlLWR1cmF0aW9uIjpuZXcgTnIoSS5wYWludF9yYXN0ZXJbInJhc3Rlci1mYWRlLWR1cmF0aW9uIl0pfSl9LEphPXtjaXJjbGU6bmksaGVhdG1hcDpwaSxoaWxsc2hhZGU6Z2ksZmlsbDpKaSwiZmlsbC1leHRydXNpb24iOmFhLGxpbmU6U2Esc3ltYm9sOllhLGJhY2tncm91bmQ6WmEscmFzdGVyOmZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dC5jYWxsKHRoaXMsZSwkYSl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGV9KEhyKX0sS2E9aShmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLHIpe3I9cnx8e30sdGhpcy53PXR8fDY0LHRoaXMuaD1lfHw2NCx0aGlzLmF1dG9SZXNpemU9ISFyLmF1dG9SZXNpemUsdGhpcy5zaGVsdmVzPVtdLHRoaXMuZnJlZWJpbnM9W10sdGhpcy5zdGF0cz17fSx0aGlzLmJpbnM9e30sdGhpcy5tYXhJZD0wfWZ1bmN0aW9uIGUodCxlLHIpe3RoaXMueD0wLHRoaXMueT10LHRoaXMudz10aGlzLmZyZWU9ZSx0aGlzLmg9cn1yZXR1cm4gdC5wcm90b3R5cGUucGFjaz1mdW5jdGlvbih0LGUpe3Q9W10uY29uY2F0KHQpLGU9ZXx8e307Zm9yKHZhciByLG4saSxhLG89W10scz0wO3M8dC5sZW5ndGg7cysrKWlmKHI9dFtzXS53fHx0W3NdLndpZHRoLG49dFtzXS5ofHx0W3NdLmhlaWdodCxpPXRbc10uaWQsciYmbil7aWYoIShhPXRoaXMucGFja09uZShyLG4saSkpKWNvbnRpbnVlO2UuaW5QbGFjZSYmKHRbc10ueD1hLngsdFtzXS55PWEueSx0W3NdLmlkPWEuaWQpLG8ucHVzaChhKX1yZXR1cm4gdGhpcy5zaHJpbmsoKSxvfSx0LnByb3RvdHlwZS5wYWNrT25lPWZ1bmN0aW9uKHQscixuKXt2YXIgaSxhLG8scyxsLGMsdSxoLGY9e2ZyZWViaW46LTEsc2hlbGY6LTEsd2FzdGU6MS8wfSxwPTA7aWYoInN0cmluZyI9PXR5cGVvZiBufHwibnVtYmVyIj09dHlwZW9mIG4pe2lmKGk9dGhpcy5nZXRCaW4obikpcmV0dXJuIHRoaXMucmVmKGkpLGk7Im51bWJlciI9PXR5cGVvZiBuJiYodGhpcy5tYXhJZD1NYXRoLm1heChuLHRoaXMubWF4SWQpKX1lbHNlIG49Kyt0aGlzLm1heElkO2ZvcihzPTA7czx0aGlzLmZyZWViaW5zLmxlbmd0aDtzKyspe2lmKHI9PT0oaT10aGlzLmZyZWViaW5zW3NdKS5tYXhoJiZ0PT09aS5tYXh3KXJldHVybiB0aGlzLmFsbG9jRnJlZWJpbihzLHQscixuKTtyPmkubWF4aHx8dD5pLm1heHd8fHI8PWkubWF4aCYmdDw9aS5tYXh3JiYobz1pLm1heHcqaS5tYXhoLXQqcik8Zi53YXN0ZSYmKGYud2FzdGU9byxmLmZyZWViaW49cyl9Zm9yKHM9MDtzPHRoaXMuc2hlbHZlcy5sZW5ndGg7cysrKWlmKHArPShhPXRoaXMuc2hlbHZlc1tzXSkuaCwhKHQ+YS5mcmVlKSl7aWYocj09PWEuaClyZXR1cm4gdGhpcy5hbGxvY1NoZWxmKHMsdCxyLG4pO3I+YS5ofHxyPGEuaCYmKG89KGEuaC1yKSp0KTxmLndhc3RlJiYoZi5mcmVlYmluPS0xLGYud2FzdGU9byxmLnNoZWxmPXMpfXJldHVybi0xIT09Zi5mcmVlYmluP3RoaXMuYWxsb2NGcmVlYmluKGYuZnJlZWJpbix0LHIsbik6LTEhPT1mLnNoZWxmP3RoaXMuYWxsb2NTaGVsZihmLnNoZWxmLHQscixuKTpyPD10aGlzLmgtcCYmdDw9dGhpcy53PyhhPW5ldyBlKHAsdGhpcy53LHIpLHRoaXMuYWxsb2NTaGVsZih0aGlzLnNoZWx2ZXMucHVzaChhKS0xLHQscixuKSk6dGhpcy5hdXRvUmVzaXplPyhsPWM9dGhpcy5oLCgodT1oPXRoaXMudyk8PWx8fHQ+dSkmJihoPTIqTWF0aC5tYXgodCx1KSksKGw8dXx8cj5sKSYmKGM9MipNYXRoLm1heChyLGwpKSx0aGlzLnJlc2l6ZShoLGMpLHRoaXMucGFja09uZSh0LHIsbikpOm51bGx9LHQucHJvdG90eXBlLmFsbG9jRnJlZWJpbj1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10aGlzLmZyZWViaW5zLnNwbGljZSh0LDEpWzBdO3JldHVybiBpLmlkPW4saS53PWUsaS5oPXIsaS5yZWZjb3VudD0wLHRoaXMuYmluc1tuXT1pLHRoaXMucmVmKGkpLGl9LHQucHJvdG90eXBlLmFsbG9jU2hlbGY9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dGhpcy5zaGVsdmVzW3RdLmFsbG9jKGUscixuKTtyZXR1cm4gdGhpcy5iaW5zW25dPWksdGhpcy5yZWYoaSksaX0sdC5wcm90b3R5cGUuc2hyaW5rPWZ1bmN0aW9uKCl7aWYodGhpcy5zaGVsdmVzLmxlbmd0aD4wKXtmb3IodmFyIHQ9MCxlPTAscj0wO3I8dGhpcy5zaGVsdmVzLmxlbmd0aDtyKyspe3ZhciBuPXRoaXMuc2hlbHZlc1tyXTtlKz1uLmgsdD1NYXRoLm1heChuLnctbi5mcmVlLHQpfXRoaXMucmVzaXplKHQsZSl9fSx0LnByb3RvdHlwZS5nZXRCaW49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYmluc1t0XX0sdC5wcm90b3R5cGUucmVmPWZ1bmN0aW9uKHQpe2lmKDE9PSsrdC5yZWZjb3VudCl7dmFyIGU9dC5oO3RoaXMuc3RhdHNbZV09MSsoMHx0aGlzLnN0YXRzW2VdKX1yZXR1cm4gdC5yZWZjb3VudH0sdC5wcm90b3R5cGUudW5yZWY9ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT10LnJlZmNvdW50PzA6KDA9PS0tdC5yZWZjb3VudCYmKHRoaXMuc3RhdHNbdC5oXS0tLGRlbGV0ZSB0aGlzLmJpbnNbdC5pZF0sdGhpcy5mcmVlYmlucy5wdXNoKHQpKSx0LnJlZmNvdW50KX0sdC5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLnNoZWx2ZXM9W10sdGhpcy5mcmVlYmlucz1bXSx0aGlzLnN0YXRzPXt9LHRoaXMuYmlucz17fSx0aGlzLm1heElkPTB9LHQucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbih0LGUpe3RoaXMudz10LHRoaXMuaD1lO2Zvcih2YXIgcj0wO3I8dGhpcy5zaGVsdmVzLmxlbmd0aDtyKyspdGhpcy5zaGVsdmVzW3JdLnJlc2l6ZSh0KTtyZXR1cm4hMH0sZS5wcm90b3R5cGUuYWxsb2M9ZnVuY3Rpb24odCxlLHIpe2lmKHQ+dGhpcy5mcmVlfHxlPnRoaXMuaClyZXR1cm4gbnVsbDt2YXIgbj10aGlzLng7cmV0dXJuIHRoaXMueCs9dCx0aGlzLmZyZWUtPXQsbmV3IGZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe3RoaXMuaWQ9dCx0aGlzLng9ZSx0aGlzLnk9cix0aGlzLnc9bix0aGlzLmg9aSx0aGlzLm1heHc9YXx8bix0aGlzLm1heGg9b3x8aSx0aGlzLnJlZmNvdW50PTB9KHIsbix0aGlzLnksdCxlLHQsdGhpcy5oKX0sZS5wcm90b3R5cGUucmVzaXplPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmZyZWUrPXQtdGhpcy53LHRoaXMudz10LCEwfSx0fSgpfSksUWE9ZnVuY3Rpb24odCxlKXt2YXIgcj1lLnBpeGVsUmF0aW87dGhpcy5wYWRkZWRSZWN0PXQsdGhpcy5waXhlbFJhdGlvPXJ9LHRvPXt0bDp7Y29uZmlndXJhYmxlOiEwfSxicjp7Y29uZmlndXJhYmxlOiEwfSxkaXNwbGF5U2l6ZTp7Y29uZmlndXJhYmxlOiEwfX07dG8udGwuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuW3RoaXMucGFkZGVkUmVjdC54KzEsdGhpcy5wYWRkZWRSZWN0LnkrMV19LHRvLmJyLmdldD1mdW5jdGlvbigpe3JldHVyblt0aGlzLnBhZGRlZFJlY3QueCt0aGlzLnBhZGRlZFJlY3Qudy0xLHRoaXMucGFkZGVkUmVjdC55K3RoaXMucGFkZGVkUmVjdC5oLTFdfSx0by5kaXNwbGF5U2l6ZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm5bKHRoaXMucGFkZGVkUmVjdC53LTIpL3RoaXMucGl4ZWxSYXRpbywodGhpcy5wYWRkZWRSZWN0LmgtMikvdGhpcy5waXhlbFJhdGlvXX0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUWEucHJvdG90eXBlLHRvKTt2YXIgZW89ZnVuY3Rpb24odCl7dmFyIGU9bmV3IHVpKHt3aWR0aDowLGhlaWdodDowfSkscj17fSxuPW5ldyBLYSgwLDAse2F1dG9SZXNpemU6ITB9KTtmb3IodmFyIGkgaW4gdCl7dmFyIGE9dFtpXSxvPW4ucGFja09uZShhLmRhdGEud2lkdGgrMixhLmRhdGEuaGVpZ2h0KzIpO2UucmVzaXplKHt3aWR0aDpuLncsaGVpZ2h0Om4uaH0pLHVpLmNvcHkoYS5kYXRhLGUse3g6MCx5OjB9LHt4Om8ueCsxLHk6by55KzF9LGEuZGF0YSkscltpXT1uZXcgUWEobyxhKX1uLnNocmluaygpLGUucmVzaXplKHt3aWR0aDpuLncsaGVpZ2h0Om4uaH0pLHRoaXMuaW1hZ2U9ZSx0aGlzLnBvc2l0aW9ucz1yfTtwcigiSW1hZ2VQb3NpdGlvbiIsUWEpLHByKCJJbWFnZUF0bGFzIixlbyk7dmFyIHJvPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGEsbyxzPTgqaS1uLTEsbD0oMTw8cyktMSxjPWw+PjEsdT0tNyxoPXI/aS0xOjAsZj1yPy0xOjEscD10W2UraF07Zm9yKGgrPWYsYT1wJigxPDwtdSktMSxwPj49LXUsdSs9czt1PjA7YT0yNTYqYSt0W2UraF0saCs9Zix1LT04KTtmb3Iobz1hJigxPDwtdSktMSxhPj49LXUsdSs9bjt1PjA7bz0yNTYqbyt0W2UraF0saCs9Zix1LT04KTtpZigwPT09YSlhPTEtYztlbHNle2lmKGE9PT1sKXJldHVybiBvP05hTjoxLzAqKHA/LTE6MSk7bys9TWF0aC5wb3coMixuKSxhLT1jfXJldHVybihwPy0xOjEpKm8qTWF0aC5wb3coMixhLW4pfSxubz1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG8scyxsLGM9OCphLWktMSx1PSgxPDxjKS0xLGg9dT4+MSxmPTIzPT09aT9NYXRoLnBvdygyLC0yNCktTWF0aC5wb3coMiwtNzcpOjAscD1uPzA6YS0xLGQ9bj8xOi0xLGc9ZTwwfHwwPT09ZSYmMS9lPDA/MTowO2ZvcihlPU1hdGguYWJzKGUpLGlzTmFOKGUpfHxlPT09MS8wPyhzPWlzTmFOKGUpPzE6MCxvPXUpOihvPU1hdGguZmxvb3IoTWF0aC5sb2coZSkvTWF0aC5MTjIpLGUqKGw9TWF0aC5wb3coMiwtbykpPDEmJihvLS0sbCo9MiksKGUrPW8raD49MT9mL2w6ZipNYXRoLnBvdygyLDEtaCkpKmw+PTImJihvKyssbC89MiksbytoPj11PyhzPTAsbz11KTpvK2g+PTE/KHM9KGUqbC0xKSpNYXRoLnBvdygyLGkpLG8rPWgpOihzPWUqTWF0aC5wb3coMixoLTEpKk1hdGgucG93KDIsaSksbz0wKSk7aT49ODt0W3IrcF09MjU1JnMscCs9ZCxzLz0yNTYsaS09OCk7Zm9yKG89bzw8aXxzLGMrPWk7Yz4wO3RbcitwXT0yNTUmbyxwKz1kLG8vPTI1NixjLT04KTt0W3IrcC1kXXw9MTI4Kmd9LGlvPWFvO2Z1bmN0aW9uIGFvKHQpe3RoaXMuYnVmPUFycmF5QnVmZmVyLmlzVmlldyYmQXJyYXlCdWZmZXIuaXNWaWV3KHQpP3Q6bmV3IFVpbnQ4QXJyYXkodHx8MCksdGhpcy5wb3M9MCx0aGlzLnR5cGU9MCx0aGlzLmxlbmd0aD10aGlzLmJ1Zi5sZW5ndGh9ZnVuY3Rpb24gb28odCl7cmV0dXJuIHQudHlwZT09PWFvLkJ5dGVzP3QucmVhZFZhcmludCgpK3QucG9zOnQucG9zKzF9ZnVuY3Rpb24gc28odCxlLHIpe3JldHVybiByPzQyOTQ5NjcyOTYqZSsodD4+PjApOjQyOTQ5NjcyOTYqKGU+Pj4wKSsodD4+PjApfWZ1bmN0aW9uIGxvKHQsZSxyKXt2YXIgbj1lPD0xNjM4Mz8xOmU8PTIwOTcxNTE/MjplPD0yNjg0MzU0NTU/MzpNYXRoLmNlaWwoTWF0aC5sb2coZSkvKDcqTWF0aC5MTjIpKTtyLnJlYWxsb2Mobik7Zm9yKHZhciBpPXIucG9zLTE7aT49dDtpLS0pci5idWZbaStuXT1yLmJ1ZltpXX1mdW5jdGlvbiBjbyh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWUud3JpdGVWYXJpbnQodFtyXSl9ZnVuY3Rpb24gdW8odCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyllLndyaXRlU1ZhcmludCh0W3JdKX1mdW5jdGlvbiBobyh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWUud3JpdGVGbG9hdCh0W3JdKX1mdW5jdGlvbiBmbyh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWUud3JpdGVEb3VibGUodFtyXSl9ZnVuY3Rpb24gcG8odCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyllLndyaXRlQm9vbGVhbih0W3JdKX1mdW5jdGlvbiBnbyh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWUud3JpdGVGaXhlZDMyKHRbcl0pfWZ1bmN0aW9uIG1vKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspZS53cml0ZVNGaXhlZDMyKHRbcl0pfWZ1bmN0aW9uIHZvKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspZS53cml0ZUZpeGVkNjQodFtyXSl9ZnVuY3Rpb24geW8odCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyllLndyaXRlU0ZpeGVkNjQodFtyXSl9ZnVuY3Rpb24geG8odCxlKXtyZXR1cm4odFtlXXx0W2UrMV08PDh8dFtlKzJdPDwxNikrMTY3NzcyMTYqdFtlKzNdfWZ1bmN0aW9uIGJvKHQsZSxyKXt0W3JdPWUsdFtyKzFdPWU+Pj44LHRbcisyXT1lPj4+MTYsdFtyKzNdPWU+Pj4yNH1mdW5jdGlvbiBfbyh0LGUpe3JldHVybih0W2VdfHRbZSsxXTw8OHx0W2UrMl08PDE2KSsodFtlKzNdPDwyNCl9YW8uVmFyaW50PTAsYW8uRml4ZWQ2ND0xLGFvLkJ5dGVzPTIsYW8uRml4ZWQzMj01LGFvLnByb3RvdHlwZT17ZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuYnVmPW51bGx9LHJlYWRGaWVsZHM6ZnVuY3Rpb24odCxlLHIpe2ZvcihyPXJ8fHRoaXMubGVuZ3RoO3RoaXMucG9zPHI7KXt2YXIgbj10aGlzLnJlYWRWYXJpbnQoKSxpPW4+PjMsYT10aGlzLnBvczt0aGlzLnR5cGU9NyZuLHQoaSxlLHRoaXMpLHRoaXMucG9zPT09YSYmdGhpcy5za2lwKG4pfXJldHVybiBlfSxyZWFkTWVzc2FnZTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnJlYWRGaWVsZHModCxlLHRoaXMucmVhZFZhcmludCgpK3RoaXMucG9zKX0scmVhZEZpeGVkMzI6ZnVuY3Rpb24oKXt2YXIgdD14byh0aGlzLmJ1Zix0aGlzLnBvcyk7cmV0dXJuIHRoaXMucG9zKz00LHR9LHJlYWRTRml4ZWQzMjpmdW5jdGlvbigpe3ZhciB0PV9vKHRoaXMuYnVmLHRoaXMucG9zKTtyZXR1cm4gdGhpcy5wb3MrPTQsdH0scmVhZEZpeGVkNjQ6ZnVuY3Rpb24oKXt2YXIgdD14byh0aGlzLmJ1Zix0aGlzLnBvcykrNDI5NDk2NzI5Nip4byh0aGlzLmJ1Zix0aGlzLnBvcys0KTtyZXR1cm4gdGhpcy5wb3MrPTgsdH0scmVhZFNGaXhlZDY0OmZ1bmN0aW9uKCl7dmFyIHQ9eG8odGhpcy5idWYsdGhpcy5wb3MpKzQyOTQ5NjcyOTYqX28odGhpcy5idWYsdGhpcy5wb3MrNCk7cmV0dXJuIHRoaXMucG9zKz04LHR9LHJlYWRGbG9hdDpmdW5jdGlvbigpe3ZhciB0PXJvKHRoaXMuYnVmLHRoaXMucG9zLCEwLDIzLDQpO3JldHVybiB0aGlzLnBvcys9NCx0fSxyZWFkRG91YmxlOmZ1bmN0aW9uKCl7dmFyIHQ9cm8odGhpcy5idWYsdGhpcy5wb3MsITAsNTIsOCk7cmV0dXJuIHRoaXMucG9zKz04LHR9LHJlYWRWYXJpbnQ6ZnVuY3Rpb24odCl7dmFyIGUscixuPXRoaXMuYnVmO3JldHVybiBlPTEyNyYocj1uW3RoaXMucG9zKytdKSxyPDEyOD9lOihlfD0oMTI3JihyPW5bdGhpcy5wb3MrK10pKTw8NyxyPDEyOD9lOihlfD0oMTI3JihyPW5bdGhpcy5wb3MrK10pKTw8MTQscjwxMjg/ZTooZXw9KDEyNyYocj1uW3RoaXMucG9zKytdKSk8PDIxLHI8MTI4P2U6ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYT1yLmJ1ZjtpZihuPSgxMTImKGk9YVtyLnBvcysrXSkpPj40LGk8MTI4KXJldHVybiBzbyh0LG4sZSk7aWYobnw9KDEyNyYoaT1hW3IucG9zKytdKSk8PDMsaTwxMjgpcmV0dXJuIHNvKHQsbixlKTtpZihufD0oMTI3JihpPWFbci5wb3MrK10pKTw8MTAsaTwxMjgpcmV0dXJuIHNvKHQsbixlKTtpZihufD0oMTI3JihpPWFbci5wb3MrK10pKTw8MTcsaTwxMjgpcmV0dXJuIHNvKHQsbixlKTtpZihufD0oMTI3JihpPWFbci5wb3MrK10pKTw8MjQsaTwxMjgpcmV0dXJuIHNvKHQsbixlKTtpZihufD0oMSYoaT1hW3IucG9zKytdKSk8PDMxLGk8MTI4KXJldHVybiBzbyh0LG4sZSk7dGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCB2YXJpbnQgbm90IG1vcmUgdGhhbiAxMCBieXRlcyIpfShlfD0oMTUmKHI9blt0aGlzLnBvc10pKTw8MjgsdCx0aGlzKSkpKX0scmVhZFZhcmludDY0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFZhcmludCghMCl9LHJlYWRTVmFyaW50OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5yZWFkVmFyaW50KCk7cmV0dXJuIHQlMj09MT8odCsxKS8tMjp0LzJ9LHJlYWRCb29sZWFuOmZ1bmN0aW9uKCl7cmV0dXJuIEJvb2xlYW4odGhpcy5yZWFkVmFyaW50KCkpfSxyZWFkU3RyaW5nOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5yZWFkVmFyaW50KCkrdGhpcy5wb3MsZT1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPSIiLGk9ZTtpPHI7KXt2YXIgYSxvLHMsbD10W2ldLGM9bnVsbCx1PWw+MjM5PzQ6bD4yMjM/MzpsPjE5MT8yOjE7aWYoaSt1PnIpYnJlYWs7MT09PXU/bDwxMjgmJihjPWwpOjI9PT11PzEyOD09KDE5MiYoYT10W2krMV0pKSYmKGM9KDMxJmwpPDw2fDYzJmEpPD0xMjcmJihjPW51bGwpOjM9PT11PyhhPXRbaSsxXSxvPXRbaSsyXSwxMjg9PSgxOTImYSkmJjEyOD09KDE5MiZvKSYmKChjPSgxNSZsKTw8MTJ8KDYzJmEpPDw2fDYzJm8pPD0yMDQ3fHxjPj01NTI5NiYmYzw9NTczNDMpJiYoYz1udWxsKSk6ND09PXUmJihhPXRbaSsxXSxvPXRbaSsyXSxzPXRbaSszXSwxMjg9PSgxOTImYSkmJjEyOD09KDE5MiZvKSYmMTI4PT0oMTkyJnMpJiYoKGM9KDE1JmwpPDwxOHwoNjMmYSk8PDEyfCg2MyZvKTw8Nnw2MyZzKTw9NjU1MzV8fGM+PTExMTQxMTIpJiYoYz1udWxsKSksbnVsbD09PWM/KGM9NjU1MzMsdT0xKTpjPjY1NTM1JiYoYy09NjU1MzYsbis9U3RyaW5nLmZyb21DaGFyQ29kZShjPj4+MTAmMTAyM3w1NTI5NiksYz01NjMyMHwxMDIzJmMpLG4rPVN0cmluZy5mcm9tQ2hhckNvZGUoYyksaSs9dX1yZXR1cm4gbn0odGhpcy5idWYsdGhpcy5wb3MsdCk7cmV0dXJuIHRoaXMucG9zPXQsZX0scmVhZEJ5dGVzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5yZWFkVmFyaW50KCkrdGhpcy5wb3MsZT10aGlzLmJ1Zi5zdWJhcnJheSh0aGlzLnBvcyx0KTtyZXR1cm4gdGhpcy5wb3M9dCxlfSxyZWFkUGFja2VkVmFyaW50OmZ1bmN0aW9uKHQsZSl7dmFyIHI9b28odGhpcyk7Zm9yKHQ9dHx8W107dGhpcy5wb3M8cjspdC5wdXNoKHRoaXMucmVhZFZhcmludChlKSk7cmV0dXJuIHR9LHJlYWRQYWNrZWRTVmFyaW50OmZ1bmN0aW9uKHQpe3ZhciBlPW9vKHRoaXMpO2Zvcih0PXR8fFtdO3RoaXMucG9zPGU7KXQucHVzaCh0aGlzLnJlYWRTVmFyaW50KCkpO3JldHVybiB0fSxyZWFkUGFja2VkQm9vbGVhbjpmdW5jdGlvbih0KXt2YXIgZT1vbyh0aGlzKTtmb3IodD10fHxbXTt0aGlzLnBvczxlOyl0LnB1c2godGhpcy5yZWFkQm9vbGVhbigpKTtyZXR1cm4gdH0scmVhZFBhY2tlZEZsb2F0OmZ1bmN0aW9uKHQpe3ZhciBlPW9vKHRoaXMpO2Zvcih0PXR8fFtdO3RoaXMucG9zPGU7KXQucHVzaCh0aGlzLnJlYWRGbG9hdCgpKTtyZXR1cm4gdH0scmVhZFBhY2tlZERvdWJsZTpmdW5jdGlvbih0KXt2YXIgZT1vbyh0aGlzKTtmb3IodD10fHxbXTt0aGlzLnBvczxlOyl0LnB1c2godGhpcy5yZWFkRG91YmxlKCkpO3JldHVybiB0fSxyZWFkUGFja2VkRml4ZWQzMjpmdW5jdGlvbih0KXt2YXIgZT1vbyh0aGlzKTtmb3IodD10fHxbXTt0aGlzLnBvczxlOyl0LnB1c2godGhpcy5yZWFkRml4ZWQzMigpKTtyZXR1cm4gdH0scmVhZFBhY2tlZFNGaXhlZDMyOmZ1bmN0aW9uKHQpe3ZhciBlPW9vKHRoaXMpO2Zvcih0PXR8fFtdO3RoaXMucG9zPGU7KXQucHVzaCh0aGlzLnJlYWRTRml4ZWQzMigpKTtyZXR1cm4gdH0scmVhZFBhY2tlZEZpeGVkNjQ6ZnVuY3Rpb24odCl7dmFyIGU9b28odGhpcyk7Zm9yKHQ9dHx8W107dGhpcy5wb3M8ZTspdC5wdXNoKHRoaXMucmVhZEZpeGVkNjQoKSk7cmV0dXJuIHR9LHJlYWRQYWNrZWRTRml4ZWQ2NDpmdW5jdGlvbih0KXt2YXIgZT1vbyh0aGlzKTtmb3IodD10fHxbXTt0aGlzLnBvczxlOyl0LnB1c2godGhpcy5yZWFkU0ZpeGVkNjQoKSk7cmV0dXJuIHR9LHNraXA6ZnVuY3Rpb24odCl7dmFyIGU9NyZ0O2lmKGU9PT1hby5WYXJpbnQpZm9yKDt0aGlzLmJ1Zlt0aGlzLnBvcysrXT4xMjc7KTtlbHNlIGlmKGU9PT1hby5CeXRlcyl0aGlzLnBvcz10aGlzLnJlYWRWYXJpbnQoKSt0aGlzLnBvcztlbHNlIGlmKGU9PT1hby5GaXhlZDMyKXRoaXMucG9zKz00O2Vsc2V7aWYoZSE9PWFvLkZpeGVkNjQpdGhyb3cgbmV3IEVycm9yKCJVbmltcGxlbWVudGVkIHR5cGU6ICIrZSk7dGhpcy5wb3MrPTh9fSx3cml0ZVRhZzpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVWYXJpbnQodDw8M3xlKX0scmVhbGxvYzpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5sZW5ndGh8fDE2O2U8dGhpcy5wb3MrdDspZSo9MjtpZihlIT09dGhpcy5sZW5ndGgpe3ZhciByPW5ldyBVaW50OEFycmF5KGUpO3Iuc2V0KHRoaXMuYnVmKSx0aGlzLmJ1Zj1yLHRoaXMubGVuZ3RoPWV9fSxmaW5pc2g6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZW5ndGg9dGhpcy5wb3MsdGhpcy5wb3M9MCx0aGlzLmJ1Zi5zdWJhcnJheSgwLHRoaXMubGVuZ3RoKX0sd3JpdGVGaXhlZDMyOmZ1bmN0aW9uKHQpe3RoaXMucmVhbGxvYyg0KSxibyh0aGlzLmJ1Zix0LHRoaXMucG9zKSx0aGlzLnBvcys9NH0sd3JpdGVTRml4ZWQzMjpmdW5jdGlvbih0KXt0aGlzLnJlYWxsb2MoNCksYm8odGhpcy5idWYsdCx0aGlzLnBvcyksdGhpcy5wb3MrPTR9LHdyaXRlRml4ZWQ2NDpmdW5jdGlvbih0KXt0aGlzLnJlYWxsb2MoOCksYm8odGhpcy5idWYsLTEmdCx0aGlzLnBvcyksYm8odGhpcy5idWYsTWF0aC5mbG9vcih0KigxLzQyOTQ5NjcyOTYpKSx0aGlzLnBvcys0KSx0aGlzLnBvcys9OH0sd3JpdGVTRml4ZWQ2NDpmdW5jdGlvbih0KXt0aGlzLnJlYWxsb2MoOCksYm8odGhpcy5idWYsLTEmdCx0aGlzLnBvcyksYm8odGhpcy5idWYsTWF0aC5mbG9vcih0KigxLzQyOTQ5NjcyOTYpKSx0aGlzLnBvcys0KSx0aGlzLnBvcys9OH0sd3JpdGVWYXJpbnQ6ZnVuY3Rpb24odCl7KHQ9K3R8fDApPjI2ODQzNTQ1NXx8dDwwP2Z1bmN0aW9uKHQsZSl7dmFyIHIsbjtpZih0Pj0wPyhyPXQlNDI5NDk2NzI5NnwwLG49dC80Mjk0OTY3Mjk2fDApOihuPX4oLXQvNDI5NDk2NzI5NiksNDI5NDk2NzI5NV4ocj1+KC10JTQyOTQ5NjcyOTYpKT9yPXIrMXwwOihyPTAsbj1uKzF8MCkpLHQ+PTB4MTAwMDAwMDAwMDAwMDAwMDB8fHQ8LTB4MTAwMDAwMDAwMDAwMDAwMDApdGhyb3cgbmV3IEVycm9yKCJHaXZlbiB2YXJpbnQgZG9lc24ndCBmaXQgaW50byAxMCBieXRlcyIpO2UucmVhbGxvYygxMCksZnVuY3Rpb24odCxlLHIpe3IuYnVmW3IucG9zKytdPTEyNyZ0fDEyOCx0Pj4+PTcsci5idWZbci5wb3MrK109MTI3JnR8MTI4LHQ+Pj49NyxyLmJ1ZltyLnBvcysrXT0xMjcmdHwxMjgsdD4+Pj03LHIuYnVmW3IucG9zKytdPTEyNyZ0fDEyOCx0Pj4+PTcsci5idWZbci5wb3NdPTEyNyZ0fShyLDAsZSksZnVuY3Rpb24odCxlKXt2YXIgcj0oNyZ0KTw8NDtlLmJ1ZltlLnBvcysrXXw9cnwoKHQ+Pj49Myk/MTI4OjApLHQmJihlLmJ1ZltlLnBvcysrXT0xMjcmdHwoKHQ+Pj49Nyk/MTI4OjApLHQmJihlLmJ1ZltlLnBvcysrXT0xMjcmdHwoKHQ+Pj49Nyk/MTI4OjApLHQmJihlLmJ1ZltlLnBvcysrXT0xMjcmdHwoKHQ+Pj49Nyk/MTI4OjApLHQmJihlLmJ1ZltlLnBvcysrXT0xMjcmdHwoKHQ+Pj49Nyk/MTI4OjApLHQmJihlLmJ1ZltlLnBvcysrXT0xMjcmdCkpKSkpfShuLGUpfSh0LHRoaXMpOih0aGlzLnJlYWxsb2MoNCksdGhpcy5idWZbdGhpcy5wb3MrK109MTI3JnR8KHQ+MTI3PzEyODowKSx0PD0xMjd8fCh0aGlzLmJ1Zlt0aGlzLnBvcysrXT0xMjcmKHQ+Pj49Nyl8KHQ+MTI3PzEyODowKSx0PD0xMjd8fCh0aGlzLmJ1Zlt0aGlzLnBvcysrXT0xMjcmKHQ+Pj49Nyl8KHQ+MTI3PzEyODowKSx0PD0xMjd8fCh0aGlzLmJ1Zlt0aGlzLnBvcysrXT10Pj4+NyYxMjcpKSkpfSx3cml0ZVNWYXJpbnQ6ZnVuY3Rpb24odCl7dGhpcy53cml0ZVZhcmludCh0PDA/MiotdC0xOjIqdCl9LHdyaXRlQm9vbGVhbjpmdW5jdGlvbih0KXt0aGlzLndyaXRlVmFyaW50KEJvb2xlYW4odCkpfSx3cml0ZVN0cmluZzpmdW5jdGlvbih0KXt0PVN0cmluZyh0KSx0aGlzLnJlYWxsb2MoNCp0Lmxlbmd0aCksdGhpcy5wb3MrKzt2YXIgZT10aGlzLnBvczt0aGlzLnBvcz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuLGksYT0wO2E8ZS5sZW5ndGg7YSsrKXtpZigobj1lLmNoYXJDb2RlQXQoYSkpPjU1Mjk1JiZuPDU3MzQ0KXtpZighaSl7bj41NjMxOXx8YSsxPT09ZS5sZW5ndGg/KHRbcisrXT0yMzksdFtyKytdPTE5MSx0W3IrK109MTg5KTppPW47Y29udGludWV9aWYobjw1NjMyMCl7dFtyKytdPTIzOSx0W3IrK109MTkxLHRbcisrXT0xODksaT1uO2NvbnRpbnVlfW49aS01NTI5Njw8MTB8bi01NjMyMHw2NTUzNixpPW51bGx9ZWxzZSBpJiYodFtyKytdPTIzOSx0W3IrK109MTkxLHRbcisrXT0xODksaT1udWxsKTtuPDEyOD90W3IrK109bjoobjwyMDQ4P3RbcisrXT1uPj42fDE5Mjoobjw2NTUzNj90W3IrK109bj4+MTJ8MjI0Oih0W3IrK109bj4+MTh8MjQwLHRbcisrXT1uPj4xMiY2M3wxMjgpLHRbcisrXT1uPj42JjYzfDEyOCksdFtyKytdPTYzJm58MTI4KX1yZXR1cm4gcn0odGhpcy5idWYsdCx0aGlzLnBvcyk7dmFyIHI9dGhpcy5wb3MtZTtyPj0xMjgmJmxvKGUscix0aGlzKSx0aGlzLnBvcz1lLTEsdGhpcy53cml0ZVZhcmludChyKSx0aGlzLnBvcys9cn0sd3JpdGVGbG9hdDpmdW5jdGlvbih0KXt0aGlzLnJlYWxsb2MoNCksbm8odGhpcy5idWYsdCx0aGlzLnBvcywhMCwyMyw0KSx0aGlzLnBvcys9NH0sd3JpdGVEb3VibGU6ZnVuY3Rpb24odCl7dGhpcy5yZWFsbG9jKDgpLG5vKHRoaXMuYnVmLHQsdGhpcy5wb3MsITAsNTIsOCksdGhpcy5wb3MrPTh9LHdyaXRlQnl0ZXM6ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGg7dGhpcy53cml0ZVZhcmludChlKSx0aGlzLnJlYWxsb2MoZSk7Zm9yKHZhciByPTA7cjxlO3IrKyl0aGlzLmJ1Zlt0aGlzLnBvcysrXT10W3JdfSx3cml0ZVJhd01lc3NhZ2U6ZnVuY3Rpb24odCxlKXt0aGlzLnBvcysrO3ZhciByPXRoaXMucG9zO3QoZSx0aGlzKTt2YXIgbj10aGlzLnBvcy1yO24+PTEyOCYmbG8ocixuLHRoaXMpLHRoaXMucG9zPXItMSx0aGlzLndyaXRlVmFyaW50KG4pLHRoaXMucG9zKz1ufSx3cml0ZU1lc3NhZ2U6ZnVuY3Rpb24odCxlLHIpe3RoaXMud3JpdGVUYWcodCxhby5CeXRlcyksdGhpcy53cml0ZVJhd01lc3NhZ2UoZSxyKX0sd3JpdGVQYWNrZWRWYXJpbnQ6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlTWVzc2FnZSh0LGNvLGUpfSx3cml0ZVBhY2tlZFNWYXJpbnQ6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlTWVzc2FnZSh0LHVvLGUpfSx3cml0ZVBhY2tlZEJvb2xlYW46ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlTWVzc2FnZSh0LHBvLGUpfSx3cml0ZVBhY2tlZEZsb2F0OmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZU1lc3NhZ2UodCxobyxlKX0sd3JpdGVQYWNrZWREb3VibGU6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlTWVzc2FnZSh0LGZvLGUpfSx3cml0ZVBhY2tlZEZpeGVkMzI6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlTWVzc2FnZSh0LGdvLGUpfSx3cml0ZVBhY2tlZFNGaXhlZDMyOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZU1lc3NhZ2UodCxtbyxlKX0sd3JpdGVQYWNrZWRGaXhlZDY0OmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZU1lc3NhZ2UodCx2byxlKX0sd3JpdGVQYWNrZWRTRml4ZWQ2NDpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVNZXNzYWdlKHQseW8sZSl9LHdyaXRlQnl0ZXNGaWVsZDpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVUYWcodCxhby5CeXRlcyksdGhpcy53cml0ZUJ5dGVzKGUpfSx3cml0ZUZpeGVkMzJGaWVsZDpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVUYWcodCxhby5GaXhlZDMyKSx0aGlzLndyaXRlRml4ZWQzMihlKX0sd3JpdGVTRml4ZWQzMkZpZWxkOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZVRhZyh0LGFvLkZpeGVkMzIpLHRoaXMud3JpdGVTRml4ZWQzMihlKX0sd3JpdGVGaXhlZDY0RmllbGQ6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlVGFnKHQsYW8uRml4ZWQ2NCksdGhpcy53cml0ZUZpeGVkNjQoZSl9LHdyaXRlU0ZpeGVkNjRGaWVsZDpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVUYWcodCxhby5GaXhlZDY0KSx0aGlzLndyaXRlU0ZpeGVkNjQoZSl9LHdyaXRlVmFyaW50RmllbGQ6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlVGFnKHQsYW8uVmFyaW50KSx0aGlzLndyaXRlVmFyaW50KGUpfSx3cml0ZVNWYXJpbnRGaWVsZDpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVUYWcodCxhby5WYXJpbnQpLHRoaXMud3JpdGVTVmFyaW50KGUpfSx3cml0ZVN0cmluZ0ZpZWxkOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZVRhZyh0LGFvLkJ5dGVzKSx0aGlzLndyaXRlU3RyaW5nKGUpfSx3cml0ZUZsb2F0RmllbGQ6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlVGFnKHQsYW8uRml4ZWQzMiksdGhpcy53cml0ZUZsb2F0KGUpfSx3cml0ZURvdWJsZUZpZWxkOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZVRhZyh0LGFvLkZpeGVkNjQpLHRoaXMud3JpdGVEb3VibGUoZSl9LHdyaXRlQm9vbGVhbkZpZWxkOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZVZhcmludEZpZWxkKHQsQm9vbGVhbihlKSl9fTt2YXIgd289MztmdW5jdGlvbiBrbyh0LGUscil7MT09PXQmJnIucmVhZE1lc3NhZ2UoTW8sZSl9ZnVuY3Rpb24gTW8odCxlLHIpe2lmKDM9PT10KXt2YXIgbj1yLnJlYWRNZXNzYWdlKEFvLHt9KSxpPW4uaWQsYT1uLmJpdG1hcCxvPW4ud2lkdGgscz1uLmhlaWdodCxsPW4ubGVmdCxjPW4udG9wLHU9bi5hZHZhbmNlO2UucHVzaCh7aWQ6aSxiaXRtYXA6bmV3IGNpKHt3aWR0aDpvKzIqd28saGVpZ2h0OnMrMip3b30sYSksbWV0cmljczp7d2lkdGg6byxoZWlnaHQ6cyxsZWZ0OmwsdG9wOmMsYWR2YW5jZTp1fX0pfX1mdW5jdGlvbiBBbyh0LGUscil7MT09PXQ/ZS5pZD1yLnJlYWRWYXJpbnQoKToyPT09dD9lLmJpdG1hcD1yLnJlYWRCeXRlcygpOjM9PT10P2Uud2lkdGg9ci5yZWFkVmFyaW50KCk6ND09PXQ/ZS5oZWlnaHQ9ci5yZWFkVmFyaW50KCk6NT09PXQ/ZS5sZWZ0PXIucmVhZFNWYXJpbnQoKTo2PT09dD9lLnRvcD1yLnJlYWRTVmFyaW50KCk6Nz09PXQmJihlLmFkdmFuY2U9ci5yZWFkVmFyaW50KCkpfXZhciBUbz13byxTbz1mdW5jdGlvbih0LGUscil7dGhpcy50YXJnZXQ9dCx0aGlzLnBhcmVudD1lLHRoaXMubWFwSWQ9cix0aGlzLmNhbGxiYWNrcz17fSx0aGlzLmNhbGxiYWNrSUQ9MCxnKFsicmVjZWl2ZSJdLHRoaXMpLHRoaXMudGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLHRoaXMucmVjZWl2ZSwhMSl9O1NvLnByb3RvdHlwZS5zZW5kPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXI/dGhpcy5tYXBJZCsiOiIrdGhpcy5jYWxsYmFja0lEKys6bnVsbDtyJiYodGhpcy5jYWxsYmFja3NbaV09cik7dmFyIGE9W107dGhpcy50YXJnZXQucG9zdE1lc3NhZ2Uoe3RhcmdldE1hcElkOm4sc291cmNlTWFwSWQ6dGhpcy5tYXBJZCx0eXBlOnQsaWQ6U3RyaW5nKGkpLGRhdGE6Z3IoZSxhKX0sYSl9LFNvLnByb3RvdHlwZS5yZWNlaXZlPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dGhpcyxuPXQuZGF0YSxpPW4uaWQ7aWYoIW4udGFyZ2V0TWFwSWR8fHRoaXMubWFwSWQ9PT1uLnRhcmdldE1hcElkKXt2YXIgYT1mdW5jdGlvbih0LGUpe3ZhciBuPVtdO3IudGFyZ2V0LnBvc3RNZXNzYWdlKHtzb3VyY2VNYXBJZDpyLm1hcElkLHR5cGU6IjxyZXNwb25zZT4iLGlkOlN0cmluZyhpKSxlcnJvcjp0P2dyKHQpOm51bGwsZGF0YTpncihlLG4pfSxuKX07aWYoIjxyZXNwb25zZT4iPT09bi50eXBlKWU9dGhpcy5jYWxsYmFja3Nbbi5pZF0sZGVsZXRlIHRoaXMuY2FsbGJhY2tzW24uaWRdLGUmJm4uZXJyb3I/ZShtcihuLmVycm9yKSk6ZSYmZShudWxsLG1yKG4uZGF0YSkpO2Vsc2UgaWYodm9pZCAwIT09bi5pZCYmdGhpcy5wYXJlbnRbbi50eXBlXSl0aGlzLnBhcmVudFtuLnR5cGVdKG4uc291cmNlTWFwSWQsbXIobi5kYXRhKSxhKTtlbHNlIGlmKHZvaWQgMCE9PW4uaWQmJnRoaXMucGFyZW50LmdldFdvcmtlclNvdXJjZSl7dmFyIG89bi50eXBlLnNwbGl0KCIuIik7dGhpcy5wYXJlbnQuZ2V0V29ya2VyU291cmNlKG4uc291cmNlTWFwSWQsb1swXSxvWzFdKVtvWzJdXShtcihuLmRhdGEpLGEpfWVsc2UgdGhpcy5wYXJlbnRbbi50eXBlXShtcihuLmRhdGEpKX19LFNvLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oKXt0aGlzLnRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIix0aGlzLnJlY2VpdmUsITEpfTt2YXIgRW89bihpKGZ1bmN0aW9uKHQsZSl7IWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUodCxlLG4pe3ZhciBpPXIoMjU2KnQsMjU2KihlPU1hdGgucG93KDIsbiktZS0xKSxuKSxhPXIoMjU2Kih0KzEpLDI1NiooZSsxKSxuKTtyZXR1cm4gaVswXSsiLCIraVsxXSsiLCIrYVswXSsiLCIrYVsxXX1mdW5jdGlvbiByKHQsZSxyKXt2YXIgbj0yKk1hdGguUEkqNjM3ODEzNy8yNTYvTWF0aC5wb3coMixyKTtyZXR1cm5bdCpuLTIqTWF0aC5QSSo2Mzc4MTM3LzIsZSpuLTIqTWF0aC5QSSo2Mzc4MTM3LzJdfXQuZ2V0VVJMPWZ1bmN0aW9uKHQscixuLGksYSxvKXtyZXR1cm4gbz1vfHx7fSx0KyI/IitbImJib3g9IitlKG4saSxhKSwiZm9ybWF0PSIrKG8uZm9ybWF0fHwiaW1hZ2UvcG5nIiksInNlcnZpY2U9Iisoby5zZXJ2aWNlfHwiV01TIiksInZlcnNpb249Iisoby52ZXJzaW9ufHwiMS4xLjEiKSwicmVxdWVzdD0iKyhvLnJlcXVlc3R8fCJHZXRNYXAiKSwic3JzPSIrKG8uc3JzfHwiRVBTRzozODU3IiksIndpZHRoPSIrKG8ud2lkdGh8fDI1NiksImhlaWdodD0iKyhvLmhlaWdodHx8MjU2KSwibGF5ZXJzPSIrcl0uam9pbigiJiIpfSx0LmdldFRpbGVCQm94PWUsdC5nZXRNZXJjQ29vcmRzPXIsT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfShlKX0pKSxDbz1mdW5jdGlvbih0LGUscil7dGhpcy56PXQsdGhpcy54PWUsdGhpcy55PXIsdGhpcy5rZXk9UG8oMCx0LGUscil9O0NvLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuej09PXQueiYmdGhpcy54PT09dC54JiZ0aGlzLnk9PT10Lnl9LENvLnByb3RvdHlwZS51cmw9ZnVuY3Rpb24odCxlKXt2YXIgcj1Fby5nZXRUaWxlQkJveCh0aGlzLngsdGhpcy55LHRoaXMueiksbj1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuLGk9IiIsYT10O2E+MDthLS0paSs9KGUmKG49MTw8YS0xKT8xOjApKyhyJm4/MjowKTtyZXR1cm4gaX0odGhpcy56LHRoaXMueCx0aGlzLnkpO3JldHVybiB0Wyh0aGlzLngrdGhpcy55KSV0Lmxlbmd0aF0ucmVwbGFjZSgie3ByZWZpeH0iLCh0aGlzLnglMTYpLnRvU3RyaW5nKDE2KSsodGhpcy55JTE2KS50b1N0cmluZygxNikpLnJlcGxhY2UoInt6fSIsU3RyaW5nKHRoaXMueikpLnJlcGxhY2UoInt4fSIsU3RyaW5nKHRoaXMueCkpLnJlcGxhY2UoInt5fSIsU3RyaW5nKCJ0bXMiPT09ZT9NYXRoLnBvdygyLHRoaXMueiktdGhpcy55LTE6dGhpcy55KSkucmVwbGFjZSgie3F1YWRrZXl9IixuKS5yZXBsYWNlKCJ7YmJveC1lcHNnLTM4NTd9IixyKX07dmFyIExvPWZ1bmN0aW9uKHQsZSl7dGhpcy53cmFwPXQsdGhpcy5jYW5vbmljYWw9ZSx0aGlzLmtleT1Qbyh0LGUueixlLngsZS55KX0sem89ZnVuY3Rpb24odCxlLHIsbixpKXt0aGlzLm92ZXJzY2FsZWRaPXQsdGhpcy53cmFwPWUsdGhpcy5jYW5vbmljYWw9bmV3IENvKHIsK24sK2kpLHRoaXMua2V5PVBvKGUsdCxuLGkpfTtmdW5jdGlvbiBQbyh0LGUscixuKXsodCo9Mik8MCYmKHQ9LTEqdC0xKTt2YXIgaT0xPDxlO3JldHVybiAzMiooaSppKnQraSpuK3IpK2V9em8ucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vdmVyc2NhbGVkWj09PXQub3ZlcnNjYWxlZFomJnRoaXMud3JhcD09PXQud3JhcCYmdGhpcy5jYW5vbmljYWwuZXF1YWxzKHQuY2Fub25pY2FsKX0sem8ucHJvdG90eXBlLnNjYWxlZFRvPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY2Fub25pY2FsLnotdDtyZXR1cm4gdD50aGlzLmNhbm9uaWNhbC56P25ldyB6byh0LHRoaXMud3JhcCx0aGlzLmNhbm9uaWNhbC56LHRoaXMuY2Fub25pY2FsLngsdGhpcy5jYW5vbmljYWwueSk6bmV3IHpvKHQsdGhpcy53cmFwLHQsdGhpcy5jYW5vbmljYWwueD4+ZSx0aGlzLmNhbm9uaWNhbC55Pj5lKX0sem8ucHJvdG90eXBlLmlzQ2hpbGRPZj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmNhbm9uaWNhbC56LXQuY2Fub25pY2FsLno7cmV0dXJuIDA9PT10Lm92ZXJzY2FsZWRafHx0Lm92ZXJzY2FsZWRaPHRoaXMub3ZlcnNjYWxlZFomJnQuY2Fub25pY2FsLng9PT10aGlzLmNhbm9uaWNhbC54Pj5lJiZ0LmNhbm9uaWNhbC55PT09dGhpcy5jYW5vbmljYWwueT4+ZX0sem8ucHJvdG90eXBlLmNoaWxkcmVuPWZ1bmN0aW9uKHQpe2lmKHRoaXMub3ZlcnNjYWxlZFo+PXQpcmV0dXJuW25ldyB6byh0aGlzLm92ZXJzY2FsZWRaKzEsdGhpcy53cmFwLHRoaXMuY2Fub25pY2FsLnosdGhpcy5jYW5vbmljYWwueCx0aGlzLmNhbm9uaWNhbC55KV07dmFyIGU9dGhpcy5jYW5vbmljYWwueisxLHI9Mip0aGlzLmNhbm9uaWNhbC54LG49Mip0aGlzLmNhbm9uaWNhbC55O3JldHVybltuZXcgem8oZSx0aGlzLndyYXAsZSxyLG4pLG5ldyB6byhlLHRoaXMud3JhcCxlLHIrMSxuKSxuZXcgem8oZSx0aGlzLndyYXAsZSxyLG4rMSksbmV3IHpvKGUsdGhpcy53cmFwLGUscisxLG4rMSldfSx6by5wcm90b3R5cGUuaXNMZXNzVGhhbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy53cmFwPHQud3JhcHx8ISh0aGlzLndyYXA+dC53cmFwKSYmKHRoaXMub3ZlcnNjYWxlZFo8dC5vdmVyc2NhbGVkWnx8ISh0aGlzLm92ZXJzY2FsZWRaPnQub3ZlcnNjYWxlZFopJiYodGhpcy5jYW5vbmljYWwueDx0LmNhbm9uaWNhbC54fHwhKHRoaXMuY2Fub25pY2FsLng+dC5jYW5vbmljYWwueCkmJnRoaXMuY2Fub25pY2FsLnk8dC5jYW5vbmljYWwueSkpfSx6by5wcm90b3R5cGUud3JhcHBlZD1mdW5jdGlvbigpe3JldHVybiBuZXcgem8odGhpcy5vdmVyc2NhbGVkWiwwLHRoaXMuY2Fub25pY2FsLnosdGhpcy5jYW5vbmljYWwueCx0aGlzLmNhbm9uaWNhbC55KX0sem8ucHJvdG90eXBlLnVud3JhcFRvPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgem8odGhpcy5vdmVyc2NhbGVkWix0LHRoaXMuY2Fub25pY2FsLnosdGhpcy5jYW5vbmljYWwueCx0aGlzLmNhbm9uaWNhbC55KX0sem8ucHJvdG90eXBlLm92ZXJzY2FsZUZhY3Rvcj1mdW5jdGlvbigpe3JldHVybiBNYXRoLnBvdygyLHRoaXMub3ZlcnNjYWxlZFotdGhpcy5jYW5vbmljYWwueil9LHpvLnByb3RvdHlwZS50b1Vud3JhcHBlZD1mdW5jdGlvbigpe3JldHVybiBuZXcgTG8odGhpcy53cmFwLHRoaXMuY2Fub25pY2FsKX0sem8ucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3ZlcnNjYWxlZForIi8iK3RoaXMuY2Fub25pY2FsLngrIi8iK3RoaXMuY2Fub25pY2FsLnl9LHpvLnByb3RvdHlwZS50b0Nvb3JkaW5hdGU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHModGhpcy5jYW5vbmljYWwueCtNYXRoLnBvdygyLHRoaXMud3JhcCksdGhpcy5jYW5vbmljYWwueSx0aGlzLmNhbm9uaWNhbC56KX0scHIoIkNhbm9uaWNhbFRpbGVJRCIsQ28pLHByKCJPdmVyc2NhbGVkVGlsZUlEIix6byx7b21pdDpbInBvc01hdHJpeCJdfSk7dmFyIElvPWZ1bmN0aW9uKHQsZSxyKXtpZih0PD0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJMZXZlbCBtdXN0IGhhdmUgcG9zaXRpdmUgZGltZW5zaW9uIik7dGhpcy5kaW09dCx0aGlzLmJvcmRlcj1lLHRoaXMuc3RyaWRlPXRoaXMuZGltKzIqdGhpcy5ib3JkZXIsdGhpcy5kYXRhPXJ8fG5ldyBJbnQzMkFycmF5KCh0aGlzLmRpbSsyKnRoaXMuYm9yZGVyKSoodGhpcy5kaW0rMip0aGlzLmJvcmRlcikpfTtJby5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmRhdGFbdGhpcy5faWR4KHQsZSldPXIrNjU1MzZ9LElvLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5kYXRhW3RoaXMuX2lkeCh0LGUpXS02NTUzNn0sSW8ucHJvdG90eXBlLl9pZHg9ZnVuY3Rpb24odCxlKXtpZih0PC10aGlzLmJvcmRlcnx8dD49dGhpcy5kaW0rdGhpcy5ib3JkZXJ8fGU8LXRoaXMuYm9yZGVyfHxlPj10aGlzLmRpbSt0aGlzLmJvcmRlcil0aHJvdyBuZXcgUmFuZ2VFcnJvcigib3V0IG9mIHJhbmdlIHNvdXJjZSBjb29yZGluYXRlcyBmb3IgREVNIGRhdGEiKTtyZXR1cm4oZSt0aGlzLmJvcmRlcikqdGhpcy5zdHJpZGUrKHQrdGhpcy5ib3JkZXIpfSxwcigiTGV2ZWwiLElvKTt2YXIgT289ZnVuY3Rpb24odCxlLHIpe3RoaXMudWlkPXQsdGhpcy5zY2FsZT1lfHwxLHRoaXMubGV2ZWw9cnx8bmV3IElvKDI1Niw1MTIpLHRoaXMubG9hZGVkPSEhcn07T28ucHJvdG90eXBlLmxvYWRGcm9tSW1hZ2U9ZnVuY3Rpb24odCxlKXtpZih0LmhlaWdodCE9PXQud2lkdGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkRFTSB0aWxlcyBtdXN0IGJlIHNxdWFyZSIpO2lmKGUmJiJtYXBib3giIT09ZSYmInRlcnJhcml1bSIhPT1lKXJldHVybiBfKCciJytlKyciIGlzIG5vdCBhIHZhbGlkIGVuY29kaW5nIHR5cGUuIFZhbGlkIHR5cGVzIGluY2x1ZGUgIm1hcGJveCIgYW5kICJ0ZXJyYXJpdW0iLicpO3ZhciByPXRoaXMubGV2ZWw9bmV3IElvKHQud2lkdGgsdC53aWR0aC8yKSxuPXQuZGF0YTt0aGlzLl91bnBhY2tEYXRhKHIsbixlfHwibWFwYm94Iik7Zm9yKHZhciBpPTA7aTxyLmRpbTtpKyspci5zZXQoLTEsaSxyLmdldCgwLGkpKSxyLnNldChyLmRpbSxpLHIuZ2V0KHIuZGltLTEsaSkpLHIuc2V0KGksLTEsci5nZXQoaSwwKSksci5zZXQoaSxyLmRpbSxyLmdldChpLHIuZGltLTEpKTtyLnNldCgtMSwtMSxyLmdldCgwLDApKSxyLnNldChyLmRpbSwtMSxyLmdldChyLmRpbS0xLDApKSxyLnNldCgtMSxyLmRpbSxyLmdldCgwLHIuZGltLTEpKSxyLnNldChyLmRpbSxyLmRpbSxyLmdldChyLmRpbS0xLHIuZGltLTEpKSx0aGlzLmxvYWRlZD0hMH0sT28ucHJvdG90eXBlLl91bnBhY2tNYXBib3g9ZnVuY3Rpb24odCxlLHIpe3JldHVybigyNTYqdCoyNTYrMjU2KmUrcikvMTAtMWU0fSxPby5wcm90b3R5cGUuX3VucGFja1RlcnJhcml1bT1mdW5jdGlvbih0LGUscil7cmV0dXJuIDI1Nip0K2Urci8yNTYtMzI3Njh9LE9vLnByb3RvdHlwZS5fdW5wYWNrRGF0YT1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPXttYXBib3g6dGhpcy5fdW5wYWNrTWFwYm94LHRlcnJhcml1bTp0aGlzLl91bnBhY2tUZXJyYXJpdW19W3JdLGk9MDtpPHQuZGltO2krKylmb3IodmFyIGE9MDthPHQuZGltO2ErKyl7dmFyIG89NCooaSp0LmRpbSthKTt0LnNldChhLGksdGhpcy5zY2FsZSpuKGVbb10sZVtvKzFdLGVbbysyXSkpfX0sT28ucHJvdG90eXBlLmdldFBpeGVscz1mdW5jdGlvbigpe3JldHVybiBuZXcgdWkoe3dpZHRoOnRoaXMubGV2ZWwuZGltKzIqdGhpcy5sZXZlbC5ib3JkZXIsaGVpZ2h0OnRoaXMubGV2ZWwuZGltKzIqdGhpcy5sZXZlbC5ib3JkZXJ9LG5ldyBVaW50OEFycmF5KHRoaXMubGV2ZWwuZGF0YS5idWZmZXIpKX0sT28ucHJvdG90eXBlLmJhY2tmaWxsQm9yZGVyPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLmxldmVsLGk9dC5sZXZlbDtpZihuLmRpbSE9PWkuZGltKXRocm93IG5ldyBFcnJvcigibGV2ZWwgbWlzbWF0Y2ggKGRlbSBkaW1lbnNpb24pIik7dmFyIGE9ZSpuLmRpbSxvPWUqbi5kaW0rbi5kaW0scz1yKm4uZGltLGw9cipuLmRpbStuLmRpbTtzd2l0Y2goZSl7Y2FzZS0xOmE9by0xO2JyZWFrO2Nhc2UgMTpvPWErMX1zd2l0Y2gocil7Y2FzZS0xOnM9bC0xO2JyZWFrO2Nhc2UgMTpsPXMrMX1mb3IodmFyIGM9ZihhLC1uLmJvcmRlcixuLmRpbStuLmJvcmRlciksdT1mKG8sLW4uYm9yZGVyLG4uZGltK24uYm9yZGVyKSxoPWYocywtbi5ib3JkZXIsbi5kaW0rbi5ib3JkZXIpLHA9ZihsLC1uLmJvcmRlcixuLmRpbStuLmJvcmRlciksZD0tZSpuLmRpbSxnPS1yKm4uZGltLG09aDttPHA7bSsrKWZvcih2YXIgdj1jO3Y8dTt2Kyspbi5zZXQodixtLGkuZ2V0KHYrZCxtK2cpKX0scHIoIkRFTURhdGEiLE9vKTt2YXIgRG89ZnVuY3Rpb24odCl7dGhpcy5fc3RyaW5nVG9OdW1iZXI9e30sdGhpcy5fbnVtYmVyVG9TdHJpbmc9W107Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspe3ZhciByPXRbZV07dGhpcy5fc3RyaW5nVG9OdW1iZXJbcl09ZSx0aGlzLl9udW1iZXJUb1N0cmluZ1tlXT1yfX07RG8ucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fc3RyaW5nVG9OdW1iZXJbdF19LERvLnByb3RvdHlwZS5kZWNvZGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX251bWJlclRvU3RyaW5nW3RdfTt2YXIgUm89ZnVuY3Rpb24odCxlLHIsbil7dGhpcy50eXBlPSJGZWF0dXJlIix0aGlzLl92ZWN0b3JUaWxlRmVhdHVyZT10LHQuX3o9ZSx0Ll94PXIsdC5feT1uLHRoaXMucHJvcGVydGllcz10LnByb3BlcnRpZXMsbnVsbCE9dC5pZCYmKHRoaXMuaWQ9dC5pZCl9LEJvPXtnZW9tZXRyeTp7Y29uZmlndXJhYmxlOiEwfX07Qm8uZ2VvbWV0cnkuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMD09PXRoaXMuX2dlb21ldHJ5JiYodGhpcy5fZ2VvbWV0cnk9dGhpcy5fdmVjdG9yVGlsZUZlYXR1cmUudG9HZW9KU09OKHRoaXMuX3ZlY3RvclRpbGVGZWF0dXJlLl94LHRoaXMuX3ZlY3RvclRpbGVGZWF0dXJlLl95LHRoaXMuX3ZlY3RvclRpbGVGZWF0dXJlLl96KS5nZW9tZXRyeSksdGhpcy5fZ2VvbWV0cnl9LEJvLmdlb21ldHJ5LnNldD1mdW5jdGlvbih0KXt0aGlzLl9nZW9tZXRyeT10fSxSby5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7dmFyIHQ9e2dlb21ldHJ5OnRoaXMuZ2VvbWV0cnl9O2Zvcih2YXIgZSBpbiB0aGlzKSJfZ2VvbWV0cnkiIT09ZSYmIl92ZWN0b3JUaWxlRmVhdHVyZSIhPT1lJiYodFtlXT10aGlzW2VdKTtyZXR1cm4gdH0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUm8ucHJvdG90eXBlLEJvKTt2YXIgRm89ZnVuY3Rpb24odCxlLHIpe3RoaXMudGlsZUlEPXQsdGhpcy54PXQuY2Fub25pY2FsLngsdGhpcy55PXQuY2Fub25pY2FsLnksdGhpcy56PXQuY2Fub25pY2FsLnosdGhpcy5ncmlkPWV8fG5ldyBscihEbiwxNiwwKSx0aGlzLmZlYXR1cmVJbmRleEFycmF5PXJ8fG5ldyBNbn07ZnVuY3Rpb24gTm8odCxlKXtyZXR1cm4gZS10fUZvLnByb3RvdHlwZS5pbnNlcnQ9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT10aGlzLmZlYXR1cmVJbmRleEFycmF5Lmxlbmd0aDt0aGlzLmZlYXR1cmVJbmRleEFycmF5LmVtcGxhY2VCYWNrKHIsbixpKTtmb3IodmFyIG89MDtvPGUubGVuZ3RoO28rKyl7Zm9yKHZhciBzPWVbb10sbD1bMS8wLDEvMCwtMS8wLC0xLzBdLGM9MDtjPHMubGVuZ3RoO2MrKyl7dmFyIHU9c1tjXTtsWzBdPU1hdGgubWluKGxbMF0sdS54KSxsWzFdPU1hdGgubWluKGxbMV0sdS55KSxsWzJdPU1hdGgubWF4KGxbMl0sdS54KSxsWzNdPU1hdGgubWF4KGxbM10sdS55KX1sWzBdPERuJiZsWzFdPERuJiZsWzJdPj0wJiZsWzNdPj0wJiZ0aGlzLmdyaWQuaW5zZXJ0KGEsbFswXSxsWzFdLGxbMl0sbFszXSl9fSxGby5wcm90b3R5cGUubG9hZFZUTGF5ZXJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudnRMYXllcnN8fCh0aGlzLnZ0TGF5ZXJzPW5ldyBnYS5WZWN0b3JUaWxlKG5ldyBpbyh0aGlzLnJhd1RpbGVEYXRhKSkubGF5ZXJzLHRoaXMuc291cmNlTGF5ZXJDb2Rlcj1uZXcgRG8odGhpcy52dExheWVycz9PYmplY3Qua2V5cyh0aGlzLnZ0TGF5ZXJzKS5zb3J0KCk6WyJfZ2VvanNvblRpbGVMYXllciJdKSksdGhpcy52dExheWVyc30sRm8ucHJvdG90eXBlLnF1ZXJ5PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpczt0aGlzLmxvYWRWVExheWVycygpO2Zvcih2YXIgbj10LnBhcmFtc3x8e30saT1Ebi90LnRpbGVTaXplL3Quc2NhbGUsYT1SZShuLmZpbHRlciksbz10LnF1ZXJ5R2VvbWV0cnkscz10LnF1ZXJ5UGFkZGluZyppLGw9MS8wLGM9MS8wLHU9LTEvMCxoPS0xLzAsZj0wO2Y8by5sZW5ndGg7ZisrKWZvcih2YXIgcD1vW2ZdLGQ9MDtkPHAubGVuZ3RoO2QrKyl7dmFyIGc9cFtkXTtsPU1hdGgubWluKGwsZy54KSxjPU1hdGgubWluKGMsZy55KSx1PU1hdGgubWF4KHUsZy54KSxoPU1hdGgubWF4KGgsZy55KX12YXIgbT10aGlzLmdyaWQucXVlcnkobC1zLGMtcyx1K3MsaCtzKTttLnNvcnQoTm8pO2Zvcih2YXIgdix5PXt9LHg9ZnVuY3Rpb24ocyl7dmFyIGw9bVtzXTtpZihsIT09dil7dj1sO3ZhciBjPXIuZmVhdHVyZUluZGV4QXJyYXkuZ2V0KGwpLHU9bnVsbDtyLmxvYWRNYXRjaGluZ0ZlYXR1cmUoeSxjLmJ1Y2tldEluZGV4LGMuc291cmNlTGF5ZXJJbmRleCxjLmZlYXR1cmVJbmRleCxhLG4ubGF5ZXJzLGUsZnVuY3Rpb24oZSxuKXtyZXR1cm4gdXx8KHU9Qm4oZSkpLG4ucXVlcnlJbnRlcnNlY3RzRmVhdHVyZShvLGUsdSxyLnosdC50cmFuc2Zvcm0saSx0LnBvc01hdHJpeCl9KX19LGI9MDtiPG0ubGVuZ3RoO2IrKyl4KGIpO3JldHVybiB5fSxGby5wcm90b3R5cGUubG9hZE1hdGNoaW5nRmVhdHVyZT1mdW5jdGlvbih0LGUscixuLGksYSxvLHMpe3ZhciBsPXRoaXMuYnVja2V0TGF5ZXJJRHNbZV07aWYoIWF8fGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspaWYoZS5pbmRleE9mKHRbcl0pPj0wKXJldHVybiEwO3JldHVybiExfShhLGwpKXt2YXIgYz10aGlzLnNvdXJjZUxheWVyQ29kZXIuZGVjb2RlKHIpLHU9dGhpcy52dExheWVyc1tjXS5mZWF0dXJlKG4pO2lmKGkobmV3IExyKHRoaXMudGlsZUlELm92ZXJzY2FsZWRaKSx1KSlmb3IodmFyIGg9MDtoPGwubGVuZ3RoO2grKyl7dmFyIGY9bFtoXTtpZighKGEmJmEuaW5kZXhPZihmKTwwKSl7dmFyIHA9b1tmXTtpZihwJiYoIXN8fHModSxwKSkpe3ZhciBkPW5ldyBSbyh1LHRoaXMueix0aGlzLngsdGhpcy55KTtkLmxheWVyPXAuc2VyaWFsaXplKCk7dmFyIGc9dFtmXTt2b2lkIDA9PT1nJiYoZz10W2ZdPVtdKSxnLnB1c2goe2ZlYXR1cmVJbmRleDpuLGZlYXR1cmU6ZH0pfX19fX0sRm8ucHJvdG90eXBlLmxvb2t1cFN5bWJvbEZlYXR1cmVzPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbz17fTt0aGlzLmxvYWRWVExheWVycygpO2Zvcih2YXIgcz1SZShuKSxsPTAsYz10O2w8Yy5sZW5ndGg7bCs9MSl7dmFyIHU9Y1tsXTt0aGlzLmxvYWRNYXRjaGluZ0ZlYXR1cmUobyxlLHIsdSxzLGksYSl9cmV0dXJuIG99LEZvLnByb3RvdHlwZS5oYXNMYXllcj1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPXRoaXMuYnVja2V0TGF5ZXJJRHM7ZTxyLmxlbmd0aDtlKz0xKWZvcih2YXIgbj0wLGk9cltlXTtuPGkubGVuZ3RoO24rPTEpaWYodD09PWlbbl0pcmV0dXJuITA7cmV0dXJuITF9LHByKCJGZWF0dXJlSW5kZXgiLEZvLHtvbWl0OlsicmF3VGlsZURhdGEiLCJzb3VyY2VMYXllckNvZGVyIl19KTt2YXIgam89e2hvcml6b250YWw6MSx2ZXJ0aWNhbDoyLGhvcml6b250YWxPbmx5OjN9LFZvPXs5OiEwLDEwOiEwLDExOiEwLDEyOiEwLDEzOiEwLDMyOiEwfSxVbz17fTtmdW5jdGlvbiBxbyh0LGUscixuKXt2YXIgaT1NYXRoLnBvdyh0LWUsMik7cmV0dXJuIG4/dDxlP2kvMjoyKmk6aStNYXRoLmFicyhyKSpyfWZ1bmN0aW9uIEhvKHQsZSl7dmFyIHI9MDtyZXR1cm4gMTA9PT10JiYoci09MWU0KSw0MCE9PXQmJjY1Mjg4IT09dHx8KHIrPTUwKSw0MSE9PWUmJjY1Mjg5IT09ZXx8KHIrPTUwKSxyfWZ1bmN0aW9uIEdvKHQsZSxyLG4saSxhKXtmb3IodmFyIG89bnVsbCxzPXFvKGUscixpLGEpLGw9MCxjPW47bDxjLmxlbmd0aDtsKz0xKXt2YXIgdT1jW2xdLGg9cW8oZS11LngscixpLGEpK3UuYmFkbmVzcztoPD1zJiYobz11LHM9aCl9cmV0dXJue2luZGV4OnQseDplLHByaW9yQnJlYWs6byxiYWRuZXNzOnN9fWZ1bmN0aW9uIFdvKHQsZSxyLG4pe2lmKCFyKXJldHVybltdO2lmKCF0KXJldHVybltdO2Zvcih2YXIgaSxhPVtdLG89ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPTAsYT0wO2E8dC5sZW5ndGg7YSsrKXt2YXIgbz1uW3QuY2hhckNvZGVBdChhKV07byYmKGkrPW8ubWV0cmljcy5hZHZhbmNlK2UpfXJldHVybiBpL01hdGgubWF4KDEsTWF0aC5jZWlsKGkvcikpfSh0LGUscixuKSxzPTAsbD0wO2w8dC5sZW5ndGg7bCsrKXt2YXIgYz10LmNoYXJDb2RlQXQobCksdT1uW2NdO3UmJiFWb1tjXSYmKHMrPXUubWV0cmljcy5hZHZhbmNlK2UpLGw8dC5sZW5ndGgtMSYmKFVvW2NdfHwhKChpPWMpPDExOTA0KSYmKHlyWyJCb3BvbW9mbyBFeHRlbmRlZCJdKGkpfHx5ci5Cb3BvbW9mbyhpKXx8eXJbIkNKSyBDb21wYXRpYmlsaXR5IEZvcm1zIl0oaSl8fHlyWyJDSksgQ29tcGF0aWJpbGl0eSBJZGVvZ3JhcGhzIl0oaSl8fHlyWyJDSksgQ29tcGF0aWJpbGl0eSJdKGkpfHx5clsiQ0pLIFJhZGljYWxzIFN1cHBsZW1lbnQiXShpKXx8eXJbIkNKSyBTdHJva2VzIl0oaSl8fHlyWyJDSksgU3ltYm9scyBhbmQgUHVuY3R1YXRpb24iXShpKXx8eXJbIkNKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEEiXShpKXx8eXJbIkNKSyBVbmlmaWVkIElkZW9ncmFwaHMiXShpKXx8eXJbIkVuY2xvc2VkIENKSyBMZXR0ZXJzIGFuZCBNb250aHMiXShpKXx8eXJbIkhhbGZ3aWR0aCBhbmQgRnVsbHdpZHRoIEZvcm1zIl0oaSl8fHlyLkhpcmFnYW5hKGkpfHx5clsiSWRlb2dyYXBoaWMgRGVzY3JpcHRpb24gQ2hhcmFjdGVycyJdKGkpfHx5clsiS2FuZ3hpIFJhZGljYWxzIl0oaSl8fHlyWyJLYXRha2FuYSBQaG9uZXRpYyBFeHRlbnNpb25zIl0oaSl8fHlyLkthdGFrYW5hKGkpfHx5clsiVmVydGljYWwgRm9ybXMiXShpKXx8eXJbIllpIFJhZGljYWxzIl0oaSl8fHlyWyJZaSBTeWxsYWJsZXMiXShpKSkpJiZhLnB1c2goR28obCsxLHMsbyxhLEhvKGMsdC5jaGFyQ29kZUF0KGwrMSkpLCExKSl9cmV0dXJuIGZ1bmN0aW9uIHQoZSl7cmV0dXJuIGU/dChlLnByaW9yQnJlYWspLmNvbmNhdChlLmluZGV4KTpbXX0oR28odC5sZW5ndGgscyxvLGEsMCwhMCkpfWZ1bmN0aW9uIFlvKHQpe3ZhciBlPS41LHI9LjU7c3dpdGNoKHQpe2Nhc2UicmlnaHQiOmNhc2UidG9wLXJpZ2h0IjpjYXNlImJvdHRvbS1yaWdodCI6ZT0xO2JyZWFrO2Nhc2UibGVmdCI6Y2FzZSJ0b3AtbGVmdCI6Y2FzZSJib3R0b20tbGVmdCI6ZT0wfXN3aXRjaCh0KXtjYXNlImJvdHRvbSI6Y2FzZSJib3R0b20tcmlnaHQiOmNhc2UiYm90dG9tLWxlZnQiOnI9MTticmVhaztjYXNlInRvcCI6Y2FzZSJ0b3AtcmlnaHQiOmNhc2UidG9wLWxlZnQiOnI9MH1yZXR1cm57aG9yaXpvbnRhbEFsaWduOmUsdmVydGljYWxBbGlnbjpyfX1mdW5jdGlvbiBYbyh0LGUscixuLGkpe2lmKGkpe3ZhciBhPWVbdFtuXS5nbHlwaF07aWYoYSlmb3IodmFyIG89YS5tZXRyaWNzLmFkdmFuY2Uscz0odFtuXS54K28pKmksbD1yO2w8PW47bCsrKXRbbF0ueC09c319VW9bMTBdPSEwLFVvWzMyXT0hMCxVb1szOF09ITAsVW9bNDBdPSEwLFVvWzQxXT0hMCxVb1s0M109ITAsVW9bNDVdPSEwLFVvWzQ3XT0hMCxVb1sxNzNdPSEwLFVvWzE4M109ITAsVW9bODIwM109ITAsVW9bODIwOF09ITAsVW9bODIxMV09ITAsVW9bODIzMV09ITAsZS5jb21tb25qc0dsb2JhbD1yLGUudW53cmFwRXhwb3J0cz1uLGUuY3JlYXRlQ29tbW9uanNNb2R1bGU9aSxlLmRlZmF1bHQ9c2VsZixlLmRlZmF1bHQkMT1sLGUuZ2V0SlNPTj1mdW5jdGlvbih0LGUpe3ZhciByPVQodCk7cmV0dXJuIHIuc2V0UmVxdWVzdEhlYWRlcigiQWNjZXB0IiwiYXBwbGljYXRpb24vanNvbiIpLHIub25lcnJvcj1mdW5jdGlvbigpe2UobmV3IEVycm9yKHIuc3RhdHVzVGV4dCkpfSxyLm9ubG9hZD1mdW5jdGlvbigpe2lmKHIuc3RhdHVzPj0yMDAmJnIuc3RhdHVzPDMwMCYmci5yZXNwb25zZSl7dmFyIG47dHJ5e249SlNPTi5wYXJzZShyLnJlc3BvbnNlKX1jYXRjaCh0KXtyZXR1cm4gZSh0KX1lKG51bGwsbil9ZWxzZSA0MDE9PT1yLnN0YXR1cyYmdC51cmwubWF0Y2goL21hcGJveC5jb20vKT9lKG5ldyBBKHIuc3RhdHVzVGV4dCsiOiB5b3UgbWF5IGhhdmUgcHJvdmlkZWQgYW4gaW52YWxpZCBNYXBib3ggYWNjZXNzIHRva2VuLiBTZWUgaHR0cHM6Ly93d3cubWFwYm94LmNvbS9hcGktZG9jdW1lbnRhdGlvbi8jYWNjZXNzLXRva2VucyIsci5zdGF0dXMsdC51cmwpKTplKG5ldyBBKHIuc3RhdHVzVGV4dCxyLnN0YXR1cyx0LnVybCkpfSxyLnNlbmQoKSxyfSxlLmdldEltYWdlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIFModCxmdW5jdGlvbih0LHIpe2lmKHQpZSh0KTtlbHNlIGlmKHIpe3ZhciBuPW5ldyBzZWxmLkltYWdlLGk9c2VsZi5VUkx8fHNlbGYud2Via2l0VVJMO24ub25sb2FkPWZ1bmN0aW9uKCl7ZShudWxsLG4pLGkucmV2b2tlT2JqZWN0VVJMKG4uc3JjKX07dmFyIGE9bmV3IHNlbGYuQmxvYihbbmV3IFVpbnQ4QXJyYXkoci5kYXRhKV0se3R5cGU6ImltYWdlL3BuZyJ9KTtuLmNhY2hlQ29udHJvbD1yLmNhY2hlQ29udHJvbCxuLmV4cGlyZXM9ci5leHBpcmVzLG4uc3JjPXIuZGF0YS5ieXRlTGVuZ3RoP2kuY3JlYXRlT2JqZWN0VVJMKGEpOiJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFFQUFBQUJDQVlBQUFBZkZjU0pBQUFBQzBsRVFWUVlWMk5nQUFJQUFBVUFBYXJWeUZFQUFBQUFTVVZPUks1Q1lJST0ifX0pfSxlLlJlc291cmNlVHlwZT1NLGUuUkdCQUltYWdlPXVpLGUuZGVmYXVsdCQyPUthLGUuSW1hZ2VQb3NpdGlvbj1RYSxlLmdldEFycmF5QnVmZmVyPVMsZS5kZWZhdWx0JDM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBpbyh0KS5yZWFkRmllbGRzKGtvLFtdKX0sZS5kZWZhdWx0JDQ9eXIsZS5hc3luY0FsbD1mdW5jdGlvbih0LGUscil7aWYoIXQubGVuZ3RoKXJldHVybiByKG51bGwsW10pO3ZhciBuPXQubGVuZ3RoLGk9bmV3IEFycmF5KHQubGVuZ3RoKSxhPW51bGw7dC5mb3JFYWNoKGZ1bmN0aW9uKHQsbyl7ZSh0LGZ1bmN0aW9uKHQsZSl7dCYmKGE9dCksaVtvXT1lLDA9PS0tbiYmcihhLGkpfSl9KX0sZS5BbHBoYUltYWdlPWNpLGUuZGVmYXVsdCQ1PUksZS5lbmRzV2l0aD1tLGUuZXh0ZW5kPXAsZS5zcGhlcmljYWxUb0NhcnRlc2lhbj1mdW5jdGlvbih0KXt2YXIgZT10WzBdLHI9dFsxXSxuPXRbMl07cmV0dXJuIHIrPTkwLHIqPU1hdGguUEkvMTgwLG4qPU1hdGguUEkvMTgwLHt4OmUqTWF0aC5jb3MocikqTWF0aC5zaW4obikseTplKk1hdGguc2luKHIpKk1hdGguc2luKG4pLHo6ZSpNYXRoLmNvcyhuKX19LGUuRXZlbnRlZD1QLGUudmFsaWRhdGVTdHlsZT1ucixlLnZhbGlkYXRlTGlnaHQ9aXIsZS5lbWl0VmFsaWRhdGlvbkVycm9ycz1zcixlLmRlZmF1bHQkNj10dCxlLm51bWJlcj13dCxlLlByb3BlcnRpZXM9cXIsZS5UcmFuc2l0aW9uYWJsZT1JcixlLlRyYW5zaXRpb25pbmc9RHIsZS5Qb3NzaWJseUV2YWx1YXRlZD1GcixlLkRhdGFDb25zdGFudFByb3BlcnR5PU5yLGUud2Fybk9uY2U9XyxlLnVuaXF1ZUlkPWZ1bmN0aW9uKCl7cmV0dXJuIGQrK30sZS5kZWZhdWx0JDc9U28sZS5waWNrPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXt9LG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIGk9ZVtuXTtpIGluIHQmJihyW2ldPXRbaV0pfXJldHVybiByfSxlLndyYXA9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXItZSxpPSgodC1lKSVuK24pJW4rZTtyZXR1cm4gaT09PWU/cjppfSxlLmNsYW1wPWYsZS5FdmVudD1MLGUuRXJyb3JFdmVudD16LGUuT3ZlcnNjYWxlZFRpbGVJRD16byxlLmRlZmF1bHQkOD1EbixlLmNyZWF0ZUxheW91dD1YcixlLmdldENvb3JkaW5hdGVzQ2VudGVyPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0xLzAscj0xLzAsbj0tMS8wLGk9LTEvMCxhPTA7YTx0Lmxlbmd0aDthKyspZT1NYXRoLm1pbihlLHRbYV0uY29sdW1uKSxyPU1hdGgubWluKHIsdFthXS5yb3cpLG49TWF0aC5tYXgobix0W2FdLmNvbHVtbiksaT1NYXRoLm1heChpLHRbYV0ucm93KTt2YXIgbz1uLWUsbD1pLXIsYz1NYXRoLm1heChvLGwpLHU9TWF0aC5tYXgoMCxNYXRoLmZsb29yKC1NYXRoLmxvZyhjKS9NYXRoLkxOMikpO3JldHVybiBuZXcgcygoZStuKS8yLChyK2kpLzIsMCkuem9vbVRvKHUpfSxlLkNhbm9uaWNhbFRpbGVJRD1DbyxlLlJhc3RlckJvdW5kc0FycmF5PUpyLGUuZ2V0VmlkZW89ZnVuY3Rpb24odCxlKXt2YXIgcixuLGk9c2VsZi5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ2aWRlbyIpO2kub25sb2Fkc3RhcnQ9ZnVuY3Rpb24oKXtlKG51bGwsaSl9O2Zvcih2YXIgYT0wO2E8dC5sZW5ndGg7YSsrKXt2YXIgbz1zZWxmLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNvdXJjZSIpO3I9dFthXSxuPXZvaWQgMCwobj1zZWxmLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSkuaHJlZj1yLChuLnByb3RvY29sIT09c2VsZi5kb2N1bWVudC5sb2NhdGlvbi5wcm90b2NvbHx8bi5ob3N0IT09c2VsZi5kb2N1bWVudC5sb2NhdGlvbi5ob3N0KSYmKGkuY3Jvc3NPcmlnaW49IkFub255bW91cyIpLG8uc3JjPXRbYV0saS5hcHBlbmRDaGlsZChvKX1yZXR1cm4gaX0sZS5kZWZhdWx0JDk9TyxlLmJpbmRBbGw9ZyxlLmRlZmF1bHQkMTA9ZnVuY3Rpb24gdChlLHIpe2lmKEFycmF5LmlzQXJyYXkoZSkpe2lmKCFBcnJheS5pc0FycmF5KHIpfHxlLmxlbmd0aCE9PXIubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKWlmKCF0KGVbbl0scltuXSkpcmV0dXJuITE7cmV0dXJuITB9aWYoIm9iamVjdCI9PXR5cGVvZiBlJiZudWxsIT09ZSYmbnVsbCE9PXIpe2lmKCJvYmplY3QiIT10eXBlb2YgcilyZXR1cm4hMTtpZihPYmplY3Qua2V5cyhlKS5sZW5ndGghPT1PYmplY3Qua2V5cyhyKS5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBpIGluIGUpaWYoIXQoZVtpXSxyW2ldKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4gZT09PXJ9LGUucGFyc2VDYWNoZUNvbnRyb2w9ZnVuY3Rpb24odCl7dmFyIGU9e307aWYodC5yZXBsYWNlKC8oPzpefCg/OlxzKlwsXHMqKSkoW15ceDAwLVx4MjBcKFwpPD5AXCw7XDpcXCJcL1xbXF1cP1w9XHtcfVx4N0ZdKykoPzpcPSg/OihbXlx4MDAtXHgyMFwoXCk8PkBcLDtcOlxcIlwvXFtcXVw/XD1ce1x9XHg3Rl0rKXwoPzpcIigoPzpbXiJcXF18XFwuKSopXCIpKSk/L2csZnVuY3Rpb24odCxyLG4saSl7dmFyIGE9bnx8aTtyZXR1cm4gZVtyXT0hYXx8YS50b0xvd2VyQ2FzZSgpLCIifSksZVsibWF4LWFnZSJdKXt2YXIgcj1wYXJzZUludChlWyJtYXgtYWdlIl0sMTApO2lzTmFOKHIpP2RlbGV0ZSBlWyJtYXgtYWdlIl06ZVsibWF4LWFnZSJdPXJ9cmV0dXJuIGV9LGUuZGVmYXVsdCQxMT1GbyxlLmRlZmF1bHQkMTI9Um8sZS5kZWZhdWx0JDEzPVJlLGUuZGVmYXVsdCQxND1IYSxlLkNvbGxpc2lvbkJveEFycmF5PW1uLGUuZGVmYXVsdCQxNT1UbixlLlRyaWFuZ2xlSW5kZXhBcnJheT1obixlLmRlZmF1bHQkMTY9THIsZS5kZWZhdWx0JDE3PXMsZS5rZXlzRGlmZmVyZW5jZT1mdW5jdGlvbih0LGUpe3ZhciByPVtdO2Zvcih2YXIgbiBpbiB0KW4gaW4gZXx8ci5wdXNoKG4pO3JldHVybiByfSxlLmRlZmF1bHQkMTg9WyJ0eXBlIiwic291cmNlIiwic291cmNlLWxheWVyIiwibWluem9vbSIsIm1heHpvb20iLCJmaWx0ZXIiLCJsYXlvdXQiXSxlLm1hdDQ9cmksZS52ZWM0PWVpLGUuZ2V0U2l6ZURhdGE9QmEsZS5ldmFsdWF0ZVNpemVGb3JGZWF0dXJlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lO3JldHVybiJzb3VyY2UiPT09dC5mdW5jdGlvblR5cGU/ci5sb3dlclNpemUvMTA6ImNvbXBvc2l0ZSI9PT10LmZ1bmN0aW9uVHlwZT93dChyLmxvd2VyU2l6ZS8xMCxyLnVwcGVyU2l6ZS8xMCxuLnVTaXplVCk6bi51U2l6ZX0sZS5ldmFsdWF0ZVNpemVGb3Jab29tPWZ1bmN0aW9uKHQsZSxyKXtpZigiY29uc3RhbnQiPT09dC5mdW5jdGlvblR5cGUpcmV0dXJue3VTaXplVDowLHVTaXplOnQubGF5b3V0U2l6ZX07aWYoInNvdXJjZSI9PT10LmZ1bmN0aW9uVHlwZSlyZXR1cm57dVNpemVUOjAsdVNpemU6MH07aWYoImNhbWVyYSI9PT10LmZ1bmN0aW9uVHlwZSl7dmFyIG49dC5wcm9wZXJ0eVZhbHVlLGk9dC56b29tUmFuZ2UsYT10LnNpemVSYW5nZSxvPWYoU2UobixyLnNwZWNpZmljYXRpb24pLmludGVycG9sYXRpb25GYWN0b3IoZSxpLm1pbixpLm1heCksMCwxKTtyZXR1cm57dVNpemVUOjAsdVNpemU6YS5taW4rbyooYS5tYXgtYS5taW4pfX12YXIgcz10LnByb3BlcnR5VmFsdWUsbD10Lnpvb21SYW5nZTtyZXR1cm57dVNpemVUOmYoU2UocyxyLnNwZWNpZmljYXRpb24pLmludGVycG9sYXRpb25GYWN0b3IoZSxsLm1pbixsLm1heCksMCwxKSx1U2l6ZTowfX0sZS5hZGREeW5hbWljQXR0cmlidXRlcz1WYSxlLmRlZmF1bHQkMTk9V2EsZS5Xcml0aW5nTW9kZT1qbyxlLm11bHRpUG9seWdvbkludGVyc2VjdHNCdWZmZXJlZFBvaW50PWpuLGUubXVsdGlQb2x5Z29uSW50ZXJzZWN0c011bHRpUG9seWdvbj1WbixlLm11bHRpUG9seWdvbkludGVyc2VjdHNCdWZmZXJlZE11bHRpTGluZT1VbixlLnBvbHlnb25JbnRlcnNlY3RzUG9seWdvbj1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWlmKFpuKGUsdFtyXSkpcmV0dXJuITA7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspaWYoWm4odCxlW25dKSlyZXR1cm4hMDtyZXR1cm4hIUhuKHQsZSl9LGUuZGlzdFRvU2VnbWVudFNxdWFyZWQ9WW4sZS5kZWZhdWx0JDIwPXRpLGUuZGVmYXVsdCQyMT1IcixlLmRlZmF1bHQkMjI9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBKYVt0LnR5cGVdKHQpfSxlLmNsb25lPXgsZS5maWx0ZXJPYmplY3Q9eSxlLm1hcE9iamVjdD12LGUucmVnaXN0ZXJGb3JQbHVnaW5BdmFpbGFiaWxpdHk9ZnVuY3Rpb24odCl7cmV0dXJuIFRyP3Qoe3BsdWdpblVSTDpUcixjb21wbGV0aW9uQ2FsbGJhY2s6TXJ9KTpFci5vbmNlKCJwbHVnaW5BdmFpbGFibGUiLHQpLHR9LGUuZXZlbnRlZD1FcixlLmRlZmF1bHQkMjM9dnIsZS5kZWZhdWx0JDI0PVBuLGUuUG9zQXJyYXk9JHIsZS5VbndyYXBwZWRUaWxlSUQ9TG8sZS5lYXNlPWgsZS5iZXppZXI9dSxlLnNldFJUTFRleHRQbHVnaW49ZnVuY3Rpb24odCxlKXtpZihBcil0aHJvdyBuZXcgRXJyb3IoInNldFJUTFRleHRQbHVnaW4gY2Fubm90IGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcy4iKTtBcj0hMCxUcj10LE1yPWZ1bmN0aW9uKHQpe3Q/KEFyPSExLFRyPW51bGwsZSYmZSh0KSk6U3I9ITB9LEVyLmZpcmUobmV3IEwoInBsdWdpbkF2YWlsYWJsZSIse3BsdWdpblVSTDpUcixjb21wbGV0aW9uQ2FsbGJhY2s6TXJ9KSl9LGUudmFsdWVzPWZ1bmN0aW9uKHQpe3ZhciBlPVtdO2Zvcih2YXIgciBpbiB0KWUucHVzaCh0W3JdKTtyZXR1cm4gZX0sZS5kZWZhdWx0JDI1PVJhLGUucmVnaXN0ZXI9cHIsZS5HTFlQSF9QQkZfQk9SREVSPVRvLGUuc2hhcGVUZXh0PWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyxsLGMpe3ZhciB1PXQudHJpbSgpO2M9PT1qby52ZXJ0aWNhbCYmKHU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPSIiLHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dC5jaGFyQ29kZUF0KHIrMSl8fG51bGwsaT10LmNoYXJDb2RlQXQoci0xKXx8bnVsbDtuJiZ3cihuKSYmIURhW3RbcisxXV18fGkmJndyKGkpJiYhRGFbdFtyLTFdXXx8IURhW3Rbcl1dP2UrPXRbcl06ZSs9RGFbdFtyXV19cmV0dXJuIGV9KHUpKTt2YXIgaD1bXSxmPXtwb3NpdGlvbmVkR2x5cGhzOmgsdGV4dDp1LHRvcDpzWzFdLGJvdHRvbTpzWzFdLGxlZnQ6c1swXSxyaWdodDpzWzBdLHdyaXRpbmdNb2RlOmN9LHA9Q3IucHJvY2Vzc0JpZGlyZWN0aW9uYWxUZXh0O3JldHVybiBmdW5jdGlvbih0LGUscixuLGksYSxvLHMsbCl7Zm9yKHZhciBjPTAsdT0tMTcsaD0wLGY9dC5wb3NpdGlvbmVkR2x5cGhzLHA9InJpZ2h0Ij09PWE/MToibGVmdCI9PT1hPzA6LjUsZD0wLGc9cjtkPGcubGVuZ3RoO2QrPTEpe3ZhciBtPWdbZF07aWYoKG09bS50cmltKCkpLmxlbmd0aCl7Zm9yKHZhciB2PWYubGVuZ3RoLHk9MDt5PG0ubGVuZ3RoO3krKyl7dmFyIHg9bS5jaGFyQ29kZUF0KHkpLGI9ZVt4XTtiJiYoX3IoeCkmJm8hPT1qby5ob3Jpem9udGFsPyhmLnB1c2goe2dseXBoOngseDpjLHk6MCx2ZXJ0aWNhbDohMH0pLGMrPWwrcyk6KGYucHVzaCh7Z2x5cGg6eCx4OmMseTp1LHZlcnRpY2FsOiExfSksYys9Yi5tZXRyaWNzLmFkdmFuY2UrcykpfWlmKGYubGVuZ3RoIT09dil7dmFyIF89Yy1zO2g9TWF0aC5tYXgoXyxoKSxYbyhmLGUsdixmLmxlbmd0aC0xLHApfWM9MCx1Kz1ufWVsc2UgdSs9bn12YXIgdz1ZbyhpKSxrPXcuaG9yaXpvbnRhbEFsaWduLE09dy52ZXJ0aWNhbEFsaWduOyFmdW5jdGlvbih0LGUscixuLGksYSxvKXtmb3IodmFyIHM9KGUtcikqaSxsPSgtbipvKy41KSphLGM9MDtjPHQubGVuZ3RoO2MrKyl0W2NdLngrPXMsdFtjXS55Kz1sfShmLHAsayxNLGgsbixyLmxlbmd0aCk7dmFyIEE9ci5sZW5ndGgqbjt0LnRvcCs9LU0qQSx0LmJvdHRvbT10LnRvcCtBLHQubGVmdCs9LWsqaCx0LnJpZ2h0PXQubGVmdCtofShmLGUscD9wKHUsV28odSxvLHIsZSkpOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLG49MCxpPTAsYT1lO2k8YS5sZW5ndGg7aSs9MSl7dmFyIG89YVtpXTtyLnB1c2godC5zdWJzdHJpbmcobixvKSksbj1vfXJldHVybiBuPHQubGVuZ3RoJiZyLnB1c2godC5zdWJzdHJpbmcobix0Lmxlbmd0aCkpLHJ9KHUsV28odSxvLHIsZSkpLG4saSxhLGMsbyxsKSwhIWgubGVuZ3RoJiZmfSxlLnNoYXBlSWNvbj1mdW5jdGlvbih0LGUscil7dmFyIG49WW8ociksaT1uLmhvcml6b250YWxBbGlnbixhPW4udmVydGljYWxBbGlnbixvPWVbMF0scz1lWzFdLGw9by10LmRpc3BsYXlTaXplWzBdKmksYz1sK3QuZGlzcGxheVNpemVbMF0sdT1zLXQuZGlzcGxheVNpemVbMV0qYTtyZXR1cm57aW1hZ2U6dCx0b3A6dSxib3R0b206dSt0LmRpc3BsYXlTaXplWzFdLGxlZnQ6bCxyaWdodDpjfX0sZS5hbGxvd3NWZXJ0aWNhbFdyaXRpbmdNb2RlPXhyLGUuYWxsb3dzTGV0dGVyU3BhY2luZz1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPXQ7ZTxyLmxlbmd0aDtlKz0xKWlmKCFicihyW2VdLmNoYXJDb2RlQXQoMCkpKXJldHVybiExO3JldHVybiEwfSxlLmRlZmF1bHQkMjY9WWksZS5kZWZhdWx0JDI3PURvLGUuZGVmYXVsdCQyOD1lbyxlLmRlZmF1bHQkMjk9Z2EsZS5kZWZhdWx0JDMwPWlvLGUuZGVmYXVsdCQzMT1PbyxlLl9fbW9kdWxlRXhwb3J0cz1nYSxlLmRlZmF1bHQkMzI9bCxlLl9fbW9kdWxlRXhwb3J0cyQxPWlvLGUucGx1Z2luPUNyfSksaSgwLGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUodCl7dmFyIHI9dHlwZW9mIHQ7aWYoIm51bWJlciI9PT1yfHwiYm9vbGVhbiI9PT1yfHwic3RyaW5nIj09PXJ8fG51bGw9PXQpcmV0dXJuIEpTT04uc3RyaW5naWZ5KHQpO2lmKEFycmF5LmlzQXJyYXkodCkpe2Zvcih2YXIgbj0iWyIsaT0wLGE9dDtpPGEubGVuZ3RoO2krPTEpbis9ZShhW2ldKSsiLCI7cmV0dXJuIG4rIl0ifWZvcih2YXIgbz1PYmplY3Qua2V5cyh0KS5zb3J0KCkscz0ieyIsbD0wO2w8by5sZW5ndGg7bCsrKXMrPUpTT04uc3RyaW5naWZ5KG9bbF0pKyI6IitlKHRbb1tsXV0pKyIsIjtyZXR1cm4gcysifSJ9ZnVuY3Rpb24gcihyKXtmb3IodmFyIG49IiIsaT0wLGE9dC5kZWZhdWx0JDE4O2k8YS5sZW5ndGg7aSs9MSluKz0iLyIrZShyW2FbaV1dKTtyZXR1cm4gbn12YXIgbj1mdW5jdGlvbih0KXt0JiZ0aGlzLnJlcGxhY2UodCl9O2Z1bmN0aW9uIGkodCxlLHIsbixpKXtpZih2b2lkIDA9PT1lLnNlZ21lbnQpcmV0dXJuITA7Zm9yKHZhciBhPWUsbz1lLnNlZ21lbnQrMSxzPTA7cz4tci8yOyl7aWYoLS1vPDApcmV0dXJuITE7cy09dFtvXS5kaXN0KGEpLGE9dFtvXX1zKz10W29dLmRpc3QodFtvKzFdKSxvKys7Zm9yKHZhciBsPVtdLGM9MDtzPHIvMjspe3ZhciB1PXRbby0xXSxoPXRbb10sZj10W28rMV07aWYoIWYpcmV0dXJuITE7dmFyIHA9dS5hbmdsZVRvKGgpLWguYW5nbGVUbyhmKTtmb3IocD1NYXRoLmFicygocCszKk1hdGguUEkpJSgyKk1hdGguUEkpLU1hdGguUEkpLGwucHVzaCh7ZGlzdGFuY2U6cyxhbmdsZURlbHRhOnB9KSxjKz1wO3MtbFswXS5kaXN0YW5jZT5uOyljLT1sLnNoaWZ0KCkuYW5nbGVEZWx0YTtpZihjPmkpcmV0dXJuITE7bysrLHMrPWguZGlzdChmKX1yZXR1cm4hMH1mdW5jdGlvbiBhKGUscixuLGEsbyxzLGwsYyx1KXt2YXIgaD1hPy42KnMqbDowLGY9TWF0aC5tYXgoYT9hLnJpZ2h0LWEubGVmdDowLG8/by5yaWdodC1vLmxlZnQ6MCkscD0wPT09ZVswXS54fHxlWzBdLng9PT11fHwwPT09ZVswXS55fHxlWzBdLnk9PT11O3JldHVybiByLWYqbDxyLzQmJihyPWYqbCtyLzQpLGZ1bmN0aW9uIGUocixuLGEsbyxzLGwsYyx1LGgpe2Zvcih2YXIgZj1sLzIscD0wLGQ9MDtkPHIubGVuZ3RoLTE7ZCsrKXArPXJbZF0uZGlzdChyW2QrMV0pO2Zvcih2YXIgZz0wLG09bi1hLHY9W10seT0wO3k8ci5sZW5ndGgtMTt5Kyspe2Zvcih2YXIgeD1yW3ldLGI9clt5KzFdLF89eC5kaXN0KGIpLHc9Yi5hbmdsZVRvKHgpO20rYTxnK187KXt2YXIgaz0oKG0rPWEpLWcpL18sTT10Lm51bWJlcih4LngsYi54LGspLEE9dC5udW1iZXIoeC55LGIueSxrKTtpZihNPj0wJiZNPGgmJkE+PTAmJkE8aCYmbS1mPj0wJiZtK2Y8PXApe3ZhciBUPW5ldyB0LmRlZmF1bHQkMjUoTSxBLHcseSk7VC5fcm91bmQoKSxvJiYhaShyLFQsbCxvLHMpfHx2LnB1c2goVCl9fWcrPV99cmV0dXJuIHV8fHYubGVuZ3RofHxjfHwodj1lKHIsZy8yLGEsbyxzLGwsYywhMCxoKSksdn0oZSxwP3IvMipjJXI6KGYvMisyKnMpKmwqYyVyLHIsaCxuLGYqbCxwLCExLHUpfW4ucHJvdG90eXBlLnJlcGxhY2U9ZnVuY3Rpb24odCl7dGhpcy5fbGF5ZXJDb25maWdzPXt9LHRoaXMuX2xheWVycz17fSx0aGlzLnVwZGF0ZSh0LFtdKX0sbi5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKGUsbil7Zm9yKHZhciBpPXRoaXMsYT0wLG89ZTthPG8ubGVuZ3RoO2ErPTEpe3ZhciBzPW9bYV07aS5fbGF5ZXJDb25maWdzW3MuaWRdPXM7dmFyIGw9aS5fbGF5ZXJzW3MuaWRdPXQuZGVmYXVsdCQyMihzKTtsLl9mZWF0dXJlRmlsdGVyPXQuZGVmYXVsdCQxMyhsLmZpbHRlcil9Zm9yKHZhciBjPTAsdT1uO2M8dS5sZW5ndGg7Yys9MSl7dmFyIGg9dVtjXTtkZWxldGUgaS5fbGF5ZXJDb25maWdzW2hdLGRlbGV0ZSBpLl9sYXllcnNbaF19dGhpcy5mYW1pbGllc0J5U291cmNlPXt9O2Zvcih2YXIgZj0wLHA9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXt9LG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGk9cih0W25dKSxhPWVbaV07YXx8KGE9ZVtpXT1bXSksYS5wdXNoKHRbbl0pfXZhciBvPVtdO2Zvcih2YXIgcyBpbiBlKW8ucHVzaChlW3NdKTtyZXR1cm4gb30odC52YWx1ZXModGhpcy5fbGF5ZXJDb25maWdzKSk7ZjxwLmxlbmd0aDtmKz0xKXt2YXIgZD1wW2ZdLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gaS5fbGF5ZXJzW3QuaWRdfSksZz1kWzBdO2lmKCJub25lIiE9PWcudmlzaWJpbGl0eSl7dmFyIG09Zy5zb3VyY2V8fCIiLHY9aS5mYW1pbGllc0J5U291cmNlW21dO3Z8fCh2PWkuZmFtaWxpZXNCeVNvdXJjZVttXT17fSk7dmFyIHk9Zy5zb3VyY2VMYXllcnx8Il9nZW9qc29uVGlsZUxheWVyIix4PXZbeV07eHx8KHg9dlt5XT1bXSkseC5wdXNoKGQpfX19O3ZhciBvPWZ1bmN0aW9uKCl7dGhpcy5vcGFjaXR5PTAsdGhpcy50YXJnZXRPcGFjaXR5PTAsdGhpcy50aW1lPTB9O28ucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IG87cmV0dXJuIHQub3BhY2l0eT10aGlzLm9wYWNpdHksdC50YXJnZXRPcGFjaXR5PXRoaXMudGFyZ2V0T3BhY2l0eSx0LnRpbWU9dGhpcy50aW1lLHR9LHQucmVnaXN0ZXIoIk9wYWNpdHlTdGF0ZSIsbyk7dmFyIHM9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwsYyx1KXt2YXIgaD1vLnRvcCpzLWwsZj1vLmJvdHRvbSpzK2wscD1vLmxlZnQqcy1sLGQ9by5yaWdodCpzK2w7aWYodGhpcy5ib3hTdGFydEluZGV4PXQubGVuZ3RoLGMpe3ZhciBnPWYtaCxtPWQtcDtnPjAmJihnPU1hdGgubWF4KDEwKnMsZyksdGhpcy5fYWRkTGluZUNvbGxpc2lvbkNpcmNsZXModCxlLHIsci5zZWdtZW50LG0sZyxuLGksYSx1KSl9ZWxzZSB0LmVtcGxhY2VCYWNrKHIueCxyLnkscCxoLGQsZixuLGksYSwwLDApO3RoaXMuYm94RW5kSW5kZXg9dC5sZW5ndGh9O3MucHJvdG90eXBlLl9hZGRMaW5lQ29sbGlzaW9uQ2lyY2xlcz1mdW5jdGlvbih0LGUscixuLGksYSxvLHMsbCxjKXt2YXIgdT1hLzIsaD1NYXRoLmZsb29yKGkvdSksZj0xKy40Kk1hdGgubG9nKGMpL01hdGguTE4yLHA9TWF0aC5mbG9vcihoKmYvMiksZD0tYS8yLGc9cixtPW4rMSx2PWQseT0taS8yLHg9eS1pLzQ7ZG97aWYoLS1tPDApe2lmKHY+eSlyZXR1cm47bT0wO2JyZWFrfXYtPWVbbV0uZGlzdChnKSxnPWVbbV19d2hpbGUodj54KTtmb3IodmFyIGI9ZVttXS5kaXN0KGVbbSsxXSksXz0tcDtfPGgrcDtfKyspe3ZhciB3PV8qdSxrPXkrdztpZih3PDAmJihrKz13KSx3PmkmJihrKz13LWkpLCEoazx2KSl7Zm9yKDt2K2I8azspe2lmKHYrPWIsKyttKzE+PWUubGVuZ3RoKXJldHVybjtiPWVbbV0uZGlzdChlW20rMV0pfXZhciBNPWstdixBPWVbbV0sVD1lW20rMV0uc3ViKEEpLl91bml0KCkuX211bHQoTSkuX2FkZChBKS5fcm91bmQoKSxTPU1hdGguYWJzKGstZCk8dT8wOi44KihrLWQpO3QuZW1wbGFjZUJhY2soVC54LFQueSwtYS8yLC1hLzIsYS8yLGEvMixvLHMsbCxhLzIsUyl9fX07dmFyIGw9dSxjPXU7ZnVuY3Rpb24gdSh0LGUpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHUpKXJldHVybiBuZXcgdSh0LGUpO2lmKHRoaXMuZGF0YT10fHxbXSx0aGlzLmxlbmd0aD10aGlzLmRhdGEubGVuZ3RoLHRoaXMuY29tcGFyZT1lfHxoLHRoaXMubGVuZ3RoPjApZm9yKHZhciByPSh0aGlzLmxlbmd0aD4+MSktMTtyPj0wO3ItLSl0aGlzLl9kb3duKHIpfWZ1bmN0aW9uIGgodCxlKXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOjB9ZnVuY3Rpb24gZihlLHIsbil7dm9pZCAwPT09ciYmKHI9MSksdm9pZCAwPT09biYmKG49ITEpO2Zvcih2YXIgaT0xLzAsYT0xLzAsbz0tMS8wLHM9LTEvMCxjPWVbMF0sdT0wO3U8Yy5sZW5ndGg7dSsrKXt2YXIgaD1jW3VdOyghdXx8aC54PGkpJiYoaT1oLngpLCghdXx8aC55PGEpJiYoYT1oLnkpLCghdXx8aC54Pm8pJiYobz1oLngpLCghdXx8aC55PnMpJiYocz1oLnkpfXZhciBmPW8taSxnPXMtYSxtPU1hdGgubWluKGYsZyksdj1tLzIseT1uZXcgbChudWxsLHApO2lmKDA9PT1tKXJldHVybiBuZXcgdC5kZWZhdWx0JDEoaSxhKTtmb3IodmFyIHg9aTt4PG87eCs9bSlmb3IodmFyIGI9YTtiPHM7Yis9bSl5LnB1c2gobmV3IGQoeCt2LGIrdix2LGUpKTtmb3IodmFyIF89ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj0wLG49MCxpPXRbMF0sYT0wLG89aS5sZW5ndGgscz1vLTE7YTxvO3M9YSsrKXt2YXIgbD1pW2FdLGM9aVtzXSx1PWwueCpjLnktYy54KmwueTtyKz0obC54K2MueCkqdSxuKz0obC55K2MueSkqdSxlKz0zKnV9cmV0dXJuIG5ldyBkKHIvZSxuL2UsMCx0KX0oZSksdz15Lmxlbmd0aDt5Lmxlbmd0aDspe3ZhciBrPXkucG9wKCk7KGsuZD5fLmR8fCFfLmQpJiYoXz1rLG4mJmNvbnNvbGUubG9nKCJmb3VuZCBiZXN0ICVkIGFmdGVyICVkIHByb2JlcyIsTWF0aC5yb3VuZCgxZTQqay5kKS8xZTQsdykpLGsubWF4LV8uZDw9cnx8KHY9ay5oLzIseS5wdXNoKG5ldyBkKGsucC54LXYsay5wLnktdix2LGUpKSx5LnB1c2gobmV3IGQoay5wLngrdixrLnAueS12LHYsZSkpLHkucHVzaChuZXcgZChrLnAueC12LGsucC55K3YsdixlKSkseS5wdXNoKG5ldyBkKGsucC54K3Ysay5wLnkrdix2LGUpKSx3Kz00KX1yZXR1cm4gbiYmKGNvbnNvbGUubG9nKCJudW0gcHJvYmVzOiAiK3cpLGNvbnNvbGUubG9nKCJiZXN0IGRpc3RhbmNlOiAiK18uZCkpLF8ucH1mdW5jdGlvbiBwKHQsZSl7cmV0dXJuIGUubWF4LXQubWF4fWZ1bmN0aW9uIGQoZSxyLG4saSl7dGhpcy5wPW5ldyB0LmRlZmF1bHQkMShlLHIpLHRoaXMuaD1uLHRoaXMuZD1mdW5jdGlvbihlLHIpe2Zvcih2YXIgbj0hMSxpPTEvMCxhPTA7YTxyLmxlbmd0aDthKyspZm9yKHZhciBvPXJbYV0scz0wLGw9by5sZW5ndGgsYz1sLTE7czxsO2M9cysrKXt2YXIgdT1vW3NdLGg9b1tjXTt1Lnk+ZS55IT1oLnk+ZS55JiZlLng8KGgueC11LngpKihlLnktdS55KS8oaC55LXUueSkrdS54JiYobj0hbiksaT1NYXRoLm1pbihpLHQuZGlzdFRvU2VnbWVudFNxdWFyZWQoZSx1LGgpKX1yZXR1cm4obj8xOi0xKSpNYXRoLnNxcnQoaSl9KHRoaXMucCxpKSx0aGlzLm1heD10aGlzLmQrdGhpcy5oKk1hdGguU1FSVDJ9ZnVuY3Rpb24gZyhlLHIsbixpLGEsbyl7ZS5jcmVhdGVBcnJheXMoKSxlLnN5bWJvbEluc3RhbmNlcz1bXTt2YXIgcz01MTIqZS5vdmVyc2NhbGluZztlLnRpbGVQaXhlbFJhdGlvPXQuZGVmYXVsdCQ4L3MsZS5jb21wYXJlVGV4dD17fSxlLmljb25zTmVlZExpbmVhcj0hMTt2YXIgbD1lLmxheWVyc1swXS5sYXlvdXQsYz1lLmxheWVyc1swXS5fdW5ldmFsdWF0ZWRMYXlvdXQuX3ZhbHVlcyx1PXt9O2lmKCJjb21wb3NpdGUiPT09ZS50ZXh0U2l6ZURhdGEuZnVuY3Rpb25UeXBlKXt2YXIgaD1lLnRleHRTaXplRGF0YS56b29tUmFuZ2UsZj1oLm1pbixwPWgubWF4O3UuY29tcG9zaXRlVGV4dFNpemVzPVtjWyJ0ZXh0LXNpemUiXS5wb3NzaWJseUV2YWx1YXRlKG5ldyB0LmRlZmF1bHQkMTYoZikpLGNbInRleHQtc2l6ZSJdLnBvc3NpYmx5RXZhbHVhdGUobmV3IHQuZGVmYXVsdCQxNihwKSldfWlmKCJjb21wb3NpdGUiPT09ZS5pY29uU2l6ZURhdGEuZnVuY3Rpb25UeXBlKXt2YXIgZD1lLmljb25TaXplRGF0YS56b29tUmFuZ2UsZz1kLm1pbix2PWQubWF4O3UuY29tcG9zaXRlSWNvblNpemVzPVtjWyJpY29uLXNpemUiXS5wb3NzaWJseUV2YWx1YXRlKG5ldyB0LmRlZmF1bHQkMTYoZykpLGNbImljb24tc2l6ZSJdLnBvc3NpYmx5RXZhbHVhdGUobmV3IHQuZGVmYXVsdCQxNih2KSldfXUubGF5b3V0VGV4dFNpemU9Y1sidGV4dC1zaXplIl0ucG9zc2libHlFdmFsdWF0ZShuZXcgdC5kZWZhdWx0JDE2KGUuem9vbSsxKSksdS5sYXlvdXRJY29uU2l6ZT1jWyJpY29uLXNpemUiXS5wb3NzaWJseUV2YWx1YXRlKG5ldyB0LmRlZmF1bHQkMTYoZS56b29tKzEpKSx1LnRleHRNYXhTaXplPWNbInRleHQtc2l6ZSJdLnBvc3NpYmx5RXZhbHVhdGUobmV3IHQuZGVmYXVsdCQxNigxOCkpO2Zvcih2YXIgeT0yNCpsLmdldCgidGV4dC1saW5lLWhlaWdodCIpLHg9Im1hcCI9PT1sLmdldCgidGV4dC1yb3RhdGlvbi1hbGlnbm1lbnQiKSYmImxpbmUiPT09bC5nZXQoInN5bWJvbC1wbGFjZW1lbnQiKSxiPWwuZ2V0KCJ0ZXh0LWtlZXAtdXByaWdodCIpLF89MCx3PWUuZmVhdHVyZXM7Xzx3Lmxlbmd0aDtfKz0xKXt2YXIgaz13W19dLE09bC5nZXQoInRleHQtZm9udCIpLmV2YWx1YXRlKGspLmpvaW4oIiwiKSxBPXJbTV18fHt9LFQ9bltNXXx8e30sUz17fSxFPWsudGV4dDtpZihFKXt2YXIgQz1sLmdldCgidGV4dC1vZmZzZXQiKS5ldmFsdWF0ZShrKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIDI0KnR9KSxMPTI0KmwuZ2V0KCJ0ZXh0LWxldHRlci1zcGFjaW5nIikuZXZhbHVhdGUoayksej10LmFsbG93c0xldHRlclNwYWNpbmcoRSk/TDowLFA9bC5nZXQoInRleHQtYW5jaG9yIikuZXZhbHVhdGUoayksST1sLmdldCgidGV4dC1qdXN0aWZ5IikuZXZhbHVhdGUoayksTz0ibGluZSIhPT1sLmdldCgic3ltYm9sLXBsYWNlbWVudCIpPzI0KmwuZ2V0KCJ0ZXh0LW1heC13aWR0aCIpLmV2YWx1YXRlKGspOjA7Uy5ob3Jpem9udGFsPXQuc2hhcGVUZXh0KEUsQSxPLHksUCxJLHosQywyNCx0LldyaXRpbmdNb2RlLmhvcml6b250YWwpLHQuYWxsb3dzVmVydGljYWxXcml0aW5nTW9kZShFKSYmeCYmYiYmKFMudmVydGljYWw9dC5zaGFwZVRleHQoRSxBLE8seSxQLEkseixDLDI0LHQuV3JpdGluZ01vZGUudmVydGljYWwpKX12YXIgRD12b2lkIDA7aWYoay5pY29uKXt2YXIgUj1pW2suaWNvbl07UiYmKEQ9dC5zaGFwZUljb24oYVtrLmljb25dLGwuZ2V0KCJpY29uLW9mZnNldCIpLmV2YWx1YXRlKGspLGwuZ2V0KCJpY29uLWFuY2hvciIpLmV2YWx1YXRlKGspKSx2b2lkIDA9PT1lLnNkZkljb25zP2Uuc2RmSWNvbnM9Ui5zZGY6ZS5zZGZJY29ucyE9PVIuc2RmJiZ0Lndhcm5PbmNlKCJTdHlsZSBzaGVldCB3YXJuaW5nOiBDYW5ub3QgbWl4IFNERiBhbmQgbm9uLVNERiBpY29ucyBpbiBvbmUgYnVmZmVyIiksUi5waXhlbFJhdGlvIT09ZS5waXhlbFJhdGlvP2UuaWNvbnNOZWVkTGluZWFyPSEwOjAhPT1sLmdldCgiaWNvbi1yb3RhdGUiKS5jb25zdGFudE9yKDEpJiYoZS5pY29uc05lZWRMaW5lYXI9ITApKX0oUy5ob3Jpem9udGFsfHxEKSYmbShlLGssUyxELFQsdSl9byYmZS5nZW5lcmF0ZUNvbGxpc2lvbkRlYnVnQnVmZmVycygpfWZ1bmN0aW9uIG0oZSxyLG4saSxsLGMpe3ZhciB1PWMubGF5b3V0VGV4dFNpemUuZXZhbHVhdGUociksaD1jLmxheW91dEljb25TaXplLmV2YWx1YXRlKHIpLHA9Yy50ZXh0TWF4U2l6ZS5ldmFsdWF0ZShyKTt2b2lkIDA9PT1wJiYocD11KTt2YXIgZD1lLmxheWVyc1swXS5sYXlvdXQsZz1kLmdldCgidGV4dC1vZmZzZXQiKS5ldmFsdWF0ZShyKSxtPWQuZ2V0KCJpY29uLW9mZnNldCIpLmV2YWx1YXRlKHIpLHg9dS8yNCxiPWUudGlsZVBpeGVsUmF0aW8qeCxfPWUudGlsZVBpeGVsUmF0aW8qcC8yNCx3PWUudGlsZVBpeGVsUmF0aW8qaCxrPWUudGlsZVBpeGVsUmF0aW8qZC5nZXQoInN5bWJvbC1zcGFjaW5nIiksTT1kLmdldCgidGV4dC1wYWRkaW5nIikqZS50aWxlUGl4ZWxSYXRpbyxBPWQuZ2V0KCJpY29uLXBhZGRpbmciKSplLnRpbGVQaXhlbFJhdGlvLFQ9ZC5nZXQoInRleHQtbWF4LWFuZ2xlIikvMTgwKk1hdGguUEksUz0ibWFwIj09PWQuZ2V0KCJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudCIpJiYibGluZSI9PT1kLmdldCgic3ltYm9sLXBsYWNlbWVudCIpLEU9Im1hcCI9PT1kLmdldCgiaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnQiKSYmImxpbmUiPT09ZC5nZXQoInN5bWJvbC1wbGFjZW1lbnQiKSxDPWsvMixMPWZ1bmN0aW9uKGEsdSl7dS54PDB8fHUueD49dC5kZWZhdWx0JDh8fHUueTwwfHx1Lnk+PXQuZGVmYXVsdCQ4fHxlLnN5bWJvbEluc3RhbmNlcy5wdXNoKGZ1bmN0aW9uKGUscixuLGksYSxsLGMsdSxoLGYscCxkLGcsbSx5LHgsYixfLHcsayxNKXt2YXIgQSxULFM9ZS5hZGRUb0xpbmVWZXJ0ZXhBcnJheShyLG4pLEU9MCxDPTAsTD0wLHo9aS5ob3Jpem9udGFsP2kuaG9yaXpvbnRhbC50ZXh0OiIiLFA9W107aS5ob3Jpem9udGFsJiYoQT1uZXcgcyhjLG4scix1LGgsZixpLmhvcml6b250YWwscCxkLGcsZS5vdmVyc2NhbGluZyksQys9dihlLHIsaS5ob3Jpem9udGFsLGwsZyx3LG0sUyxpLnZlcnRpY2FsP3QuV3JpdGluZ01vZGUuaG9yaXpvbnRhbDp0LldyaXRpbmdNb2RlLmhvcml6b250YWxPbmx5LFAsayxNKSxpLnZlcnRpY2FsJiYoTCs9dihlLHIsaS52ZXJ0aWNhbCxsLGcsdyxtLFMsdC5Xcml0aW5nTW9kZS52ZXJ0aWNhbCxQLGssTSkpKTt2YXIgST1BP0EuYm94U3RhcnRJbmRleDplLmNvbGxpc2lvbkJveEFycmF5Lmxlbmd0aCxPPUE/QS5ib3hFbmRJbmRleDplLmNvbGxpc2lvbkJveEFycmF5Lmxlbmd0aDtpZihhKXt2YXIgRD1mdW5jdGlvbihlLHIsbixpLGEsbyl7dmFyIHMsbCxjLHUsaD1yLmltYWdlLGY9bi5sYXlvdXQscD1yLnRvcC0xL2gucGl4ZWxSYXRpbyxkPXIubGVmdC0xL2gucGl4ZWxSYXRpbyxnPXIuYm90dG9tKzEvaC5waXhlbFJhdGlvLG09ci5yaWdodCsxL2gucGl4ZWxSYXRpbztpZigibm9uZSIhPT1mLmdldCgiaWNvbi10ZXh0LWZpdCIpJiZhKXt2YXIgdj1tLWQseT1nLXAseD1mLmdldCgidGV4dC1zaXplIikuZXZhbHVhdGUobykvMjQsYj1hLmxlZnQqeCxfPWEucmlnaHQqeCx3PWEudG9wKngsaz1fLWIsTT1hLmJvdHRvbSp4LXcsQT1mLmdldCgiaWNvbi10ZXh0LWZpdC1wYWRkaW5nIilbMF0sVD1mLmdldCgiaWNvbi10ZXh0LWZpdC1wYWRkaW5nIilbMV0sUz1mLmdldCgiaWNvbi10ZXh0LWZpdC1wYWRkaW5nIilbMl0sRT1mLmdldCgiaWNvbi10ZXh0LWZpdC1wYWRkaW5nIilbM10sQz0id2lkdGgiPT09Zi5nZXQoImljb24tdGV4dC1maXQiKT8uNSooTS15KTowLEw9ImhlaWdodCI9PT1mLmdldCgiaWNvbi10ZXh0LWZpdCIpPy41KihrLXYpOjAsej0id2lkdGgiPT09Zi5nZXQoImljb24tdGV4dC1maXQiKXx8ImJvdGgiPT09Zi5nZXQoImljb24tdGV4dC1maXQiKT9rOnYsUD0iaGVpZ2h0Ij09PWYuZ2V0KCJpY29uLXRleHQtZml0Iil8fCJib3RoIj09PWYuZ2V0KCJpY29uLXRleHQtZml0Iik/TTp5O3M9bmV3IHQuZGVmYXVsdCQxKGIrTC1FLHcrQy1BKSxsPW5ldyB0LmRlZmF1bHQkMShiK0wrVCt6LHcrQy1BKSxjPW5ldyB0LmRlZmF1bHQkMShiK0wrVCt6LHcrQytTK1ApLHU9bmV3IHQuZGVmYXVsdCQxKGIrTC1FLHcrQytTK1ApfWVsc2Ugcz1uZXcgdC5kZWZhdWx0JDEoZCxwKSxsPW5ldyB0LmRlZmF1bHQkMShtLHApLGM9bmV3IHQuZGVmYXVsdCQxKG0sZyksdT1uZXcgdC5kZWZhdWx0JDEoZCxnKTt2YXIgST1uLmxheW91dC5nZXQoImljb24tcm90YXRlIikuZXZhbHVhdGUobykqTWF0aC5QSS8xODA7aWYoSSl7dmFyIE89TWF0aC5zaW4oSSksRD1NYXRoLmNvcyhJKSxSPVtELC1PLE8sRF07cy5fbWF0TXVsdChSKSxsLl9tYXRNdWx0KFIpLHUuX21hdE11bHQoUiksYy5fbWF0TXVsdChSKX1yZXR1cm5be3RsOnMsdHI6bCxibDp1LGJyOmMsdGV4OmgucGFkZGVkUmVjdCx3cml0aW5nTW9kZTp2b2lkIDAsZ2x5cGhPZmZzZXQ6WzAsMF19XX0oMCxhLGwsMCxpLmhvcml6b250YWwsdyk7VD1uZXcgcyhjLG4scix1LGgsZixhLHkseCwhMSxlLm92ZXJzY2FsaW5nKSxFPTQqRC5sZW5ndGg7dmFyIFI9ZS5pY29uU2l6ZURhdGEsQj1udWxsOyJzb3VyY2UiPT09Ui5mdW5jdGlvblR5cGU/Qj1bMTAqbC5sYXlvdXQuZ2V0KCJpY29uLXNpemUiKS5ldmFsdWF0ZSh3KV06ImNvbXBvc2l0ZSI9PT1SLmZ1bmN0aW9uVHlwZSYmKEI9WzEwKk0uY29tcG9zaXRlSWNvblNpemVzWzBdLmV2YWx1YXRlKHcpLDEwKk0uY29tcG9zaXRlSWNvblNpemVzWzFdLmV2YWx1YXRlKHcpXSksZS5hZGRTeW1ib2xzKGUuaWNvbixELEIsXyxiLHcsITEscixTLmxpbmVTdGFydEluZGV4LFMubGluZUxlbmd0aCl9dmFyIEY9VD9ULmJveFN0YXJ0SW5kZXg6ZS5jb2xsaXNpb25Cb3hBcnJheS5sZW5ndGgsTj1UP1QuYm94RW5kSW5kZXg6ZS5jb2xsaXNpb25Cb3hBcnJheS5sZW5ndGg7cmV0dXJuIGUuZ2x5cGhPZmZzZXRBcnJheS5sZW5ndGg+PXQuZGVmYXVsdCQxNC5NQVhfR0xZUEhTJiZ0Lndhcm5PbmNlKCJUb28gbWFueSBnbHlwaHMgYmVpbmcgcmVuZGVyZWQgaW4gYSB0aWxlLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9tYXBib3gtZ2wtanMvaXNzdWVzLzI5MDciKSx7a2V5OnosdGV4dEJveFN0YXJ0SW5kZXg6SSx0ZXh0Qm94RW5kSW5kZXg6TyxpY29uQm94U3RhcnRJbmRleDpGLGljb25Cb3hFbmRJbmRleDpOLHRleHRPZmZzZXQ6bSxpY29uT2Zmc2V0Ol8sYW5jaG9yOnIsbGluZTpuLGZlYXR1cmVJbmRleDp1LGZlYXR1cmU6dyxudW1HbHlwaFZlcnRpY2VzOkMsbnVtVmVydGljYWxHbHlwaFZlcnRpY2VzOkwsbnVtSWNvblZlcnRpY2VzOkUsdGV4dE9wYWNpdHlTdGF0ZTpuZXcgbyxpY29uT3BhY2l0eVN0YXRlOm5ldyBvLGlzRHVwbGljYXRlOiExLHBsYWNlZFRleHRTeW1ib2xJbmRpY2VzOlAsY3Jvc3NUaWxlSUQ6MH19KGUsdSxhLG4saSxlLmxheWVyc1swXSxlLmNvbGxpc2lvbkJveEFycmF5LHIuaW5kZXgsci5zb3VyY2VMYXllckluZGV4LGUuaW5kZXgsYixNLFMsZyx3LEEsRSxtLHIsbCxjKSl9O2lmKCJsaW5lIj09PWQuZ2V0KCJzeW1ib2wtcGxhY2VtZW50IikpZm9yKHZhciB6PTAsUD1mdW5jdGlvbihlLHIsbixpLGEpe2Zvcih2YXIgbz1bXSxzPTA7czxlLmxlbmd0aDtzKyspZm9yKHZhciBsPWVbc10sYz12b2lkIDAsdT0wO3U8bC5sZW5ndGgtMTt1Kyspe3ZhciBoPWxbdV0sZj1sW3UrMV07aC54PDAmJmYueDwwfHwoaC54PDA/aD1uZXcgdC5kZWZhdWx0JDEoMCxoLnkrKGYueS1oLnkpKigoMC1oLngpLyhmLngtaC54KSkpLl9yb3VuZCgpOmYueDwwJiYoZj1uZXcgdC5kZWZhdWx0JDEoMCxoLnkrKGYueS1oLnkpKigoMC1oLngpLyhmLngtaC54KSkpLl9yb3VuZCgpKSxoLnk8MCYmZi55PDB8fChoLnk8MD9oPW5ldyB0LmRlZmF1bHQkMShoLngrKGYueC1oLngpKigoMC1oLnkpLyhmLnktaC55KSksMCkuX3JvdW5kKCk6Zi55PDAmJihmPW5ldyB0LmRlZmF1bHQkMShoLngrKGYueC1oLngpKigoMC1oLnkpLyhmLnktaC55KSksMCkuX3JvdW5kKCkpLGgueD49aSYmZi54Pj1pfHwoaC54Pj1pP2g9bmV3IHQuZGVmYXVsdCQxKGksaC55KyhmLnktaC55KSooKGktaC54KS8oZi54LWgueCkpKS5fcm91bmQoKTpmLng+PWkmJihmPW5ldyB0LmRlZmF1bHQkMShpLGgueSsoZi55LWgueSkqKChpLWgueCkvKGYueC1oLngpKSkuX3JvdW5kKCkpLGgueT49YSYmZi55Pj1hfHwoaC55Pj1hP2g9bmV3IHQuZGVmYXVsdCQxKGgueCsoZi54LWgueCkqKChhLWgueSkvKGYueS1oLnkpKSxhKS5fcm91bmQoKTpmLnk+PWEmJihmPW5ldyB0LmRlZmF1bHQkMShoLngrKGYueC1oLngpKigoYS1oLnkpLyhmLnktaC55KSksYSkuX3JvdW5kKCkpLGMmJmguZXF1YWxzKGNbYy5sZW5ndGgtMV0pfHwoYz1baF0sby5wdXNoKGMpKSxjLnB1c2goZikpKSkpfXJldHVybiBvfShyLmdlb21ldHJ5LDAsMCx0LmRlZmF1bHQkOCx0LmRlZmF1bHQkOCk7ejxQLmxlbmd0aDt6Kz0xKWZvcih2YXIgST1QW3pdLE89MCxEPWEoSSxrLFQsbi52ZXJ0aWNhbHx8bi5ob3Jpem9udGFsLGksMjQsXyxlLm92ZXJzY2FsaW5nLHQuZGVmYXVsdCQ4KTtPPEQubGVuZ3RoO08rPTEpe3ZhciBSPURbT10sQj1uLmhvcml6b250YWw7QiYmeShlLEIudGV4dCxDLFIpfHxMKEksUil9ZWxzZSBpZigiUG9seWdvbiI9PT1yLnR5cGUpZm9yKHZhciBGPTAsTj10LmRlZmF1bHQkMjYoci5nZW9tZXRyeSwwKTtGPE4ubGVuZ3RoO0YrPTEpe3ZhciBqPU5bRl0sVj1mKGosMTYpO0woalswXSxuZXcgdC5kZWZhdWx0JDI1KFYueCxWLnksMCkpfWVsc2UgaWYoIkxpbmVTdHJpbmciPT09ci50eXBlKWZvcih2YXIgVT0wLHE9ci5nZW9tZXRyeTtVPHEubGVuZ3RoO1UrPTEpe3ZhciBIPXFbVV07TChILG5ldyB0LmRlZmF1bHQkMjUoSFswXS54LEhbMF0ueSwwKSl9ZWxzZSBpZigiUG9pbnQiPT09ci50eXBlKWZvcih2YXIgRz0wLFc9ci5nZW9tZXRyeTtHPFcubGVuZ3RoO0crPTEpZm9yKHZhciBZPTAsWD1XW0ddO1k8WC5sZW5ndGg7WSs9MSl7dmFyIFo9WFtZXTtMKFtaXSxuZXcgdC5kZWZhdWx0JDI1KFoueCxaLnksMCkpfX1mdW5jdGlvbiB2KGUscixuLGksYSxvLHMsbCxjLHUsaCxmKXt2YXIgcD1mdW5jdGlvbihlLHIsbixpLGEsbyl7Zm9yKHZhciBzPW4ubGF5b3V0LmdldCgidGV4dC1yb3RhdGUiKS5ldmFsdWF0ZShhKSpNYXRoLlBJLzE4MCxsPW4ubGF5b3V0LmdldCgidGV4dC1vZmZzZXQiKS5ldmFsdWF0ZShhKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIDI0KnR9KSxjPXIucG9zaXRpb25lZEdseXBocyx1PVtdLGg9MDtoPGMubGVuZ3RoO2grKyl7dmFyIGY9Y1toXSxwPW9bZi5nbHlwaF07aWYocCl7dmFyIGQ9cC5yZWN0O2lmKGQpe3ZhciBnPXQuR0xZUEhfUEJGX0JPUkRFUisxLG09cC5tZXRyaWNzLmFkdmFuY2UvMix2PWk/W2YueCttLGYueV06WzAsMF0seT1pP1swLDBdOltmLngrbStsWzBdLGYueStsWzFdXSx4PXAubWV0cmljcy5sZWZ0LWctbSt5WzBdLGI9LXAubWV0cmljcy50b3AtZyt5WzFdLF89eCtkLncsdz1iK2QuaCxrPW5ldyB0LmRlZmF1bHQkMSh4LGIpLE09bmV3IHQuZGVmYXVsdCQxKF8sYiksQT1uZXcgdC5kZWZhdWx0JDEoeCx3KSxUPW5ldyB0LmRlZmF1bHQkMShfLHcpO2lmKGkmJmYudmVydGljYWwpe3ZhciBTPW5ldyB0LmRlZmF1bHQkMSgtbSxtKSxFPS1NYXRoLlBJLzIsQz1uZXcgdC5kZWZhdWx0JDEoNSwwKTtrLl9yb3RhdGVBcm91bmQoRSxTKS5fYWRkKEMpLE0uX3JvdGF0ZUFyb3VuZChFLFMpLl9hZGQoQyksQS5fcm90YXRlQXJvdW5kKEUsUykuX2FkZChDKSxULl9yb3RhdGVBcm91bmQoRSxTKS5fYWRkKEMpfWlmKHMpe3ZhciBMPU1hdGguc2luKHMpLHo9TWF0aC5jb3MocyksUD1beiwtTCxMLHpdO2suX21hdE11bHQoUCksTS5fbWF0TXVsdChQKSxBLl9tYXRNdWx0KFApLFQuX21hdE11bHQoUCl9dS5wdXNoKHt0bDprLHRyOk0sYmw6QSxicjpULHRleDpkLHdyaXRpbmdNb2RlOnIud3JpdGluZ01vZGUsZ2x5cGhPZmZzZXQ6dn0pfX19cmV0dXJuIHV9KDAsbixpLGEsbyxoKSxkPWUudGV4dFNpemVEYXRhLGc9bnVsbDtyZXR1cm4ic291cmNlIj09PWQuZnVuY3Rpb25UeXBlP2c9WzEwKmkubGF5b3V0LmdldCgidGV4dC1zaXplIikuZXZhbHVhdGUobyldOiJjb21wb3NpdGUiPT09ZC5mdW5jdGlvblR5cGUmJihnPVsxMCpmLmNvbXBvc2l0ZVRleHRTaXplc1swXS5ldmFsdWF0ZShvKSwxMCpmLmNvbXBvc2l0ZVRleHRTaXplc1sxXS5ldmFsdWF0ZShvKV0pLGUuYWRkU3ltYm9scyhlLnRleHQscCxnLHMsYSxvLGMscixsLmxpbmVTdGFydEluZGV4LGwubGluZUxlbmd0aCksdS5wdXNoKGUudGV4dC5wbGFjZWRTeW1ib2xBcnJheS5sZW5ndGgtMSksNCpwLmxlbmd0aH1mdW5jdGlvbiB5KHQsZSxyLG4pe3ZhciBpPXQuY29tcGFyZVRleHQ7aWYoZSBpbiBpKXtmb3IodmFyIGE9aVtlXSxvPWEubGVuZ3RoLTE7bz49MDtvLS0paWYobi5kaXN0KGFbb10pPHIpcmV0dXJuITB9ZWxzZSBpW2VdPVtdO3JldHVybiBpW2VdLnB1c2gobiksITF9dS5wcm90b3R5cGU9e3B1c2g6ZnVuY3Rpb24odCl7dGhpcy5kYXRhLnB1c2godCksdGhpcy5sZW5ndGgrKyx0aGlzLl91cCh0aGlzLmxlbmd0aC0xKX0scG9wOmZ1bmN0aW9uKCl7aWYoMCE9PXRoaXMubGVuZ3RoKXt2YXIgdD10aGlzLmRhdGFbMF07cmV0dXJuIHRoaXMubGVuZ3RoLS0sdGhpcy5sZW5ndGg+MCYmKHRoaXMuZGF0YVswXT10aGlzLmRhdGFbdGhpcy5sZW5ndGhdLHRoaXMuX2Rvd24oMCkpLHRoaXMuZGF0YS5wb3AoKSx0fX0scGVlazpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGFbMF19LF91cDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5kYXRhLHI9dGhpcy5jb21wYXJlLG49ZVt0XTt0PjA7KXt2YXIgaT10LTE+PjEsYT1lW2ldO2lmKHIobixhKT49MClicmVhaztlW3RdPWEsdD1pfWVbdF09bn0sX2Rvd246ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuZGF0YSxyPXRoaXMuY29tcGFyZSxuPXRoaXMubGVuZ3RoPj4xLGk9ZVt0XTt0PG47KXt2YXIgYT0xKyh0PDwxKSxvPWErMSxzPWVbYV07aWYobzx0aGlzLmxlbmd0aCYmcihlW29dLHMpPDAmJihhPW8scz1lW29dKSxyKHMsaSk+PTApYnJlYWs7ZVt0XT1zLHQ9YX1lW3RdPWl9fSxsLmRlZmF1bHQ9Yzt2YXIgeD1mdW5jdGlvbihlKXt2YXIgcj1uZXcgdC5BbHBoYUltYWdlKHt3aWR0aDowLGhlaWdodDowfSksbj17fSxpPW5ldyB0LmRlZmF1bHQkMigwLDAse2F1dG9SZXNpemU6ITB9KTtmb3IodmFyIGEgaW4gZSl7dmFyIG89ZVthXSxzPW5bYV09e307Zm9yKHZhciBsIGluIG8pe3ZhciBjPW9bK2xdO2lmKGMmJjAhPT1jLmJpdG1hcC53aWR0aCYmMCE9PWMuYml0bWFwLmhlaWdodCl7dmFyIHU9aS5wYWNrT25lKGMuYml0bWFwLndpZHRoKzIsYy5iaXRtYXAuaGVpZ2h0KzIpO3IucmVzaXplKHt3aWR0aDppLncsaGVpZ2h0OmkuaH0pLHQuQWxwaGFJbWFnZS5jb3B5KGMuYml0bWFwLHIse3g6MCx5OjB9LHt4OnUueCsxLHk6dS55KzF9LGMuYml0bWFwKSxzW2xdPXtyZWN0OnUsbWV0cmljczpjLm1ldHJpY3N9fX19aS5zaHJpbmsoKSxyLnJlc2l6ZSh7d2lkdGg6aS53LGhlaWdodDppLmh9KSx0aGlzLmltYWdlPXIsdGhpcy5wb3NpdGlvbnM9bn07dC5yZWdpc3RlcigiR2x5cGhBdGxhcyIseCk7dmFyIGI9ZnVuY3Rpb24oZSl7dGhpcy50aWxlSUQ9bmV3IHQuT3ZlcnNjYWxlZFRpbGVJRChlLnRpbGVJRC5vdmVyc2NhbGVkWixlLnRpbGVJRC53cmFwLGUudGlsZUlELmNhbm9uaWNhbC56LGUudGlsZUlELmNhbm9uaWNhbC54LGUudGlsZUlELmNhbm9uaWNhbC55KSx0aGlzLnVpZD1lLnVpZCx0aGlzLnpvb209ZS56b29tLHRoaXMucGl4ZWxSYXRpbz1lLnBpeGVsUmF0aW8sdGhpcy50aWxlU2l6ZT1lLnRpbGVTaXplLHRoaXMuc291cmNlPWUuc291cmNlLHRoaXMub3ZlcnNjYWxpbmc9dGhpcy50aWxlSUQub3ZlcnNjYWxlRmFjdG9yKCksdGhpcy5zaG93Q29sbGlzaW9uQm94ZXM9ZS5zaG93Q29sbGlzaW9uQm94ZXMsdGhpcy5jb2xsZWN0UmVzb3VyY2VUaW1pbmc9ISFlLmNvbGxlY3RSZXNvdXJjZVRpbWluZ307ZnVuY3Rpb24gXyhlLHIpe2Zvcih2YXIgbj1uZXcgdC5kZWZhdWx0JDE2KHIpLGk9MCxhPWU7aTxhLmxlbmd0aDtpKz0xKWFbaV0ucmVjYWxjdWxhdGUobil9Yi5wcm90b3R5cGUucGFyc2U9ZnVuY3Rpb24oZSxyLG4saSl7dmFyIGE9dGhpczt0aGlzLnN0YXR1cz0icGFyc2luZyIsdGhpcy5kYXRhPWUsdGhpcy5jb2xsaXNpb25Cb3hBcnJheT1uZXcgdC5Db2xsaXNpb25Cb3hBcnJheTt2YXIgbz1uZXcgdC5kZWZhdWx0JDI3KE9iamVjdC5rZXlzKGUubGF5ZXJzKS5zb3J0KCkpLHM9bmV3IHQuZGVmYXVsdCQxMSh0aGlzLnRpbGVJRCk7cy5idWNrZXRMYXllcklEcz1bXTt2YXIgbCxjLHUsaD17fSxmPXtmZWF0dXJlSW5kZXg6cyxpY29uRGVwZW5kZW5jaWVzOnt9LGdseXBoRGVwZW5kZW5jaWVzOnt9fSxwPXIuZmFtaWxpZXNCeVNvdXJjZVt0aGlzLnNvdXJjZV07Zm9yKHZhciBkIGluIHApe3ZhciBtPWUubGF5ZXJzW2RdO2lmKG0pezE9PT1tLnZlcnNpb24mJnQud2Fybk9uY2UoJ1ZlY3RvciB0aWxlIHNvdXJjZSAiJythLnNvdXJjZSsnIiBsYXllciAiJytkKyciIGRvZXMgbm90IHVzZSB2ZWN0b3IgdGlsZSBzcGVjIHYyIGFuZCB0aGVyZWZvcmUgbWF5IGhhdmUgc29tZSByZW5kZXJpbmcgZXJyb3JzLicpO2Zvcih2YXIgdj1vLmVuY29kZShkKSx5PVtdLGI9MDtiPG0ubGVuZ3RoO2IrKyl7dmFyIHc9bS5mZWF0dXJlKGIpO3kucHVzaCh7ZmVhdHVyZTp3LGluZGV4OmIsc291cmNlTGF5ZXJJbmRleDp2fSl9Zm9yKHZhciBrPTAsTT1wW2RdO2s8TS5sZW5ndGg7ays9MSl7dmFyIEE9TVtrXSxUPUFbMF07VC5taW56b29tJiZhLnpvb208TWF0aC5mbG9vcihULm1pbnpvb20pfHxULm1heHpvb20mJmEuem9vbT49VC5tYXh6b29tfHwibm9uZSIhPT1ULnZpc2liaWxpdHkmJihfKEEsYS56b29tKSwoaFtULmlkXT1ULmNyZWF0ZUJ1Y2tldCh7aW5kZXg6cy5idWNrZXRMYXllcklEcy5sZW5ndGgsbGF5ZXJzOkEsem9vbTphLnpvb20scGl4ZWxSYXRpbzphLnBpeGVsUmF0aW8sb3ZlcnNjYWxpbmc6YS5vdmVyc2NhbGluZyxjb2xsaXNpb25Cb3hBcnJheTphLmNvbGxpc2lvbkJveEFycmF5LHNvdXJjZUxheWVySW5kZXg6dn0pKS5wb3B1bGF0ZSh5LGYpLHMuYnVja2V0TGF5ZXJJRHMucHVzaChBLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5pZH0pKSl9fX12YXIgUz10Lm1hcE9iamVjdChmLmdseXBoRGVwZW5kZW5jaWVzLGZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3Qua2V5cyh0KS5tYXAoTnVtYmVyKX0pO09iamVjdC5rZXlzKFMpLmxlbmd0aD9uLnNlbmQoImdldEdseXBocyIse3VpZDp0aGlzLnVpZCxzdGFja3M6U30sZnVuY3Rpb24odCxlKXtsfHwobD10LGM9ZSxDLmNhbGwoYSkpfSk6Yz17fTt2YXIgRT1PYmplY3Qua2V5cyhmLmljb25EZXBlbmRlbmNpZXMpO2Z1bmN0aW9uIEMoKXtpZihsKXJldHVybiBpKGwpO2lmKGMmJnUpe3ZhciBlPW5ldyB4KGMpLHI9bmV3IHQuZGVmYXVsdCQyOCh1KTtmb3IodmFyIG4gaW4gaCl7dmFyIGE9aFtuXTthIGluc3RhbmNlb2YgdC5kZWZhdWx0JDE0JiYoXyhhLmxheWVycyx0aGlzLnpvb20pLGcoYSxjLGUucG9zaXRpb25zLHUsci5wb3NpdGlvbnMsdGhpcy5zaG93Q29sbGlzaW9uQm94ZXMpKX10aGlzLnN0YXR1cz0iZG9uZSIsaShudWxsLHtidWNrZXRzOnQudmFsdWVzKGgpLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4hdC5pc0VtcHR5KCl9KSxmZWF0dXJlSW5kZXg6cyxjb2xsaXNpb25Cb3hBcnJheTp0aGlzLmNvbGxpc2lvbkJveEFycmF5LGdseXBoQXRsYXNJbWFnZTplLmltYWdlLGljb25BdGxhc0ltYWdlOnIuaW1hZ2V9KX19RS5sZW5ndGg/bi5zZW5kKCJnZXRJbWFnZXMiLHtpY29uczpFfSxmdW5jdGlvbih0LGUpe2x8fChsPXQsdT1lLEMuY2FsbChhKSl9KTp1PXt9LEMuY2FsbCh0aGlzKX07dmFyIHc9ZnVuY3Rpb24odCl7cmV0dXJuISghcGVyZm9ybWFuY2V8fCFwZXJmb3JtYW5jZS5nZXRFbnRyaWVzQnlOYW1lKSYmcGVyZm9ybWFuY2UuZ2V0RW50cmllc0J5TmFtZSh0KX07ZnVuY3Rpb24gayhlLHIpe3ZhciBuPXQuZ2V0QXJyYXlCdWZmZXIoZS5yZXF1ZXN0LGZ1bmN0aW9uKGUsbil7ZT9yKGUpOm4mJnIobnVsbCx7dmVjdG9yVGlsZTpuZXcgdC5kZWZhdWx0JDI5LlZlY3RvclRpbGUobmV3IHQuZGVmYXVsdCQzMChuLmRhdGEpKSxyYXdEYXRhOm4uZGF0YSxjYWNoZUNvbnRyb2w6bi5jYWNoZUNvbnRyb2wsZXhwaXJlczpuLmV4cGlyZXN9KX0pO3JldHVybiBmdW5jdGlvbigpe24uYWJvcnQoKSxyKCl9fXZhciBNPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmFjdG9yPXQsdGhpcy5sYXllckluZGV4PWUsdGhpcy5sb2FkVmVjdG9yRGF0YT1yfHxrLHRoaXMubG9hZGluZz17fSx0aGlzLmxvYWRlZD17fX07TS5wcm90b3R5cGUubG9hZFRpbGU9ZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzLGk9ZS51aWQ7dGhpcy5sb2FkaW5nfHwodGhpcy5sb2FkaW5nPXt9KTt2YXIgYT10aGlzLmxvYWRpbmdbaV09bmV3IGIoZSk7YS5hYm9ydD10aGlzLmxvYWRWZWN0b3JEYXRhKGUsZnVuY3Rpb24obyxzKXtpZihkZWxldGUgbi5sb2FkaW5nW2ldLG98fCFzKXJldHVybiByKG8pO3ZhciBsPXMucmF3RGF0YSxjPXt9O3MuZXhwaXJlcyYmKGMuZXhwaXJlcz1zLmV4cGlyZXMpLHMuY2FjaGVDb250cm9sJiYoYy5jYWNoZUNvbnRyb2w9cy5jYWNoZUNvbnRyb2wpO3ZhciB1PXt9O2lmKGUucmVxdWVzdCYmZS5yZXF1ZXN0LmNvbGxlY3RSZXNvdXJjZVRpbWluZyl7dmFyIGg9dyhlLnJlcXVlc3QudXJsKTtoJiYodS5yZXNvdXJjZVRpbWluZz1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGgpKSl9YS52ZWN0b3JUaWxlPXMudmVjdG9yVGlsZSxhLnBhcnNlKHMudmVjdG9yVGlsZSxuLmxheWVySW5kZXgsbi5hY3RvcixmdW5jdGlvbihlLG4pe2lmKGV8fCFuKXJldHVybiByKGUpO3IobnVsbCx0LmV4dGVuZCh7cmF3VGlsZURhdGE6bC5zbGljZSgwKX0sbixjLHUpKX0pLG4ubG9hZGVkPW4ubG9hZGVkfHx7fSxuLmxvYWRlZFtpXT1hfSl9LE0ucHJvdG90eXBlLnJlbG9hZFRpbGU9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmxvYWRlZCxuPXQudWlkLGk9dGhpcztpZihyJiZyW25dKXt2YXIgYT1yW25dO2Euc2hvd0NvbGxpc2lvbkJveGVzPXQuc2hvd0NvbGxpc2lvbkJveGVzO3ZhciBvPWZ1bmN0aW9uKHQscil7dmFyIG49YS5yZWxvYWRDYWxsYmFjaztuJiYoZGVsZXRlIGEucmVsb2FkQ2FsbGJhY2ssYS5wYXJzZShhLnZlY3RvclRpbGUsaS5sYXllckluZGV4LGkuYWN0b3IsbikpLGUodCxyKX07InBhcnNpbmciPT09YS5zdGF0dXM/YS5yZWxvYWRDYWxsYmFjaz1vOiJkb25lIj09PWEuc3RhdHVzJiZhLnBhcnNlKGEudmVjdG9yVGlsZSx0aGlzLmxheWVySW5kZXgsdGhpcy5hY3RvcixvKX19LE0ucHJvdG90eXBlLmFib3J0VGlsZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMubG9hZGluZyxuPXQudWlkO3ImJnJbbl0mJnJbbl0uYWJvcnQmJihyW25dLmFib3J0KCksZGVsZXRlIHJbbl0pLGUoKX0sTS5wcm90b3R5cGUucmVtb3ZlVGlsZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMubG9hZGVkLG49dC51aWQ7ciYmcltuXSYmZGVsZXRlIHJbbl0sZSgpfTt2YXIgQT1mdW5jdGlvbigpe3RoaXMubG9hZGluZz17fSx0aGlzLmxvYWRlZD17fX07QS5wcm90b3R5cGUubG9hZFRpbGU9ZnVuY3Rpb24oZSxyKXt2YXIgbj1lLnVpZCxpPWUuZW5jb2RpbmcsYT1uZXcgdC5kZWZhdWx0JDMxKG4pO3RoaXMubG9hZGluZ1tuXT1hLGEubG9hZEZyb21JbWFnZShlLnJhd0ltYWdlRGF0YSxpKSxkZWxldGUgdGhpcy5sb2FkaW5nW25dLHRoaXMubG9hZGVkPXRoaXMubG9hZGVkfHx7fSx0aGlzLmxvYWRlZFtuXT1hLHIobnVsbCxhKX0sQS5wcm90b3R5cGUucmVtb3ZlVGlsZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmxvYWRlZCxyPXQudWlkO2UmJmVbcl0mJmRlbGV0ZSBlW3JdfTt2YXIgVD17UkFESVVTOjYzNzgxMzcsRkxBVFRFTklORzoxLzI5OC4yNTcyMjM1NjMsUE9MQVJfUkFESVVTOjYzNTY3NTIuMzE0Mn07ZnVuY3Rpb24gUyh0KXt2YXIgZT0wO2lmKHQmJnQubGVuZ3RoPjApe2UrPU1hdGguYWJzKEUodFswXSkpO2Zvcih2YXIgcj0xO3I8dC5sZW5ndGg7cisrKWUtPU1hdGguYWJzKEUodFtyXSkpfXJldHVybiBlfWZ1bmN0aW9uIEUodCl7dmFyIGUscixuLGksYSxvLHM9MCxsPXQubGVuZ3RoO2lmKGw+Mil7Zm9yKG89MDtvPGw7bysrKW89PT1sLTI/KG49bC0yLGk9bC0xLGE9MCk6bz09PWwtMT8obj1sLTEsaT0wLGE9MSk6KG49byxpPW8rMSxhPW8rMiksZT10W25dLHI9dFtpXSxzKz0oQyh0W2FdWzBdKS1DKGVbMF0pKSpNYXRoLnNpbihDKHJbMV0pKTtzPXMqVC5SQURJVVMqVC5SQURJVVMvMn1yZXR1cm4gc31mdW5jdGlvbiBDKHQpe3JldHVybiB0Kk1hdGguUEkvMTgwfXZhciBMPXtnZW9tZXRyeTpmdW5jdGlvbiB0KGUpe3ZhciByLG49MDtzd2l0Y2goZS50eXBlKXtjYXNlIlBvbHlnb24iOnJldHVybiBTKGUuY29vcmRpbmF0ZXMpO2Nhc2UiTXVsdGlQb2x5Z29uIjpmb3Iocj0wO3I8ZS5jb29yZGluYXRlcy5sZW5ndGg7cisrKW4rPVMoZS5jb29yZGluYXRlc1tyXSk7cmV0dXJuIG47Y2FzZSJQb2ludCI6Y2FzZSJNdWx0aVBvaW50IjpjYXNlIkxpbmVTdHJpbmciOmNhc2UiTXVsdGlMaW5lU3RyaW5nIjpyZXR1cm4gMDtjYXNlIkdlb21ldHJ5Q29sbGVjdGlvbiI6Zm9yKHI9MDtyPGUuZ2VvbWV0cmllcy5sZW5ndGg7cisrKW4rPXQoZS5nZW9tZXRyaWVzW3JdKTtyZXR1cm4gbn19LHJpbmc6RX07ZnVuY3Rpb24geih0LGUpe3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gdChyLGUpfX1mdW5jdGlvbiBQKHQsZSl7ZT0hIWUsdFswXT1JKHRbMF0sZSk7Zm9yKHZhciByPTE7cjx0Lmxlbmd0aDtyKyspdFtyXT1JKHRbcl0sIWUpO3JldHVybiB0fWZ1bmN0aW9uIEkodCxlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIEwucmluZyh0KT49MH0odCk9PT1lP3Q6dC5yZXZlcnNlKCl9dmFyIE89dC5kZWZhdWx0JDI5LlZlY3RvclRpbGVGZWF0dXJlLnByb3RvdHlwZS50b0dlb0pTT04sRD1mdW5jdGlvbihlKXt0aGlzLl9mZWF0dXJlPWUsdGhpcy5leHRlbnQ9dC5kZWZhdWx0JDgsdGhpcy50eXBlPWUudHlwZSx0aGlzLnByb3BlcnRpZXM9ZS50YWdzLCJpZCJpbiBlJiYhaXNOYU4oZS5pZCkmJih0aGlzLmlkPXBhcnNlSW50KGUuaWQsMTApKX07RC5wcm90b3R5cGUubG9hZEdlb21ldHJ5PWZ1bmN0aW9uKCl7aWYoMT09PXRoaXMuX2ZlYXR1cmUudHlwZSl7Zm9yKHZhciBlPVtdLHI9MCxuPXRoaXMuX2ZlYXR1cmUuZ2VvbWV0cnk7cjxuLmxlbmd0aDtyKz0xKXt2YXIgaT1uW3JdO2UucHVzaChbbmV3IHQuZGVmYXVsdCQxKGlbMF0saVsxXSldKX1yZXR1cm4gZX1mb3IodmFyIGE9W10sbz0wLHM9dGhpcy5fZmVhdHVyZS5nZW9tZXRyeTtvPHMubGVuZ3RoO28rPTEpe2Zvcih2YXIgbD1bXSxjPTAsdT1zW29dO2M8dS5sZW5ndGg7Yys9MSl7dmFyIGg9dVtjXTtsLnB1c2gobmV3IHQuZGVmYXVsdCQxKGhbMF0saFsxXSkpfWEucHVzaChsKX1yZXR1cm4gYX0sRC5wcm90b3R5cGUudG9HZW9KU09OPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gTy5jYWxsKHRoaXMsdCxlLHIpfTt2YXIgUj1mdW5jdGlvbihlKXt0aGlzLmxheWVycz17X2dlb2pzb25UaWxlTGF5ZXI6dGhpc30sdGhpcy5uYW1lPSJfZ2VvanNvblRpbGVMYXllciIsdGhpcy5leHRlbnQ9dC5kZWZhdWx0JDgsdGhpcy5sZW5ndGg9ZS5sZW5ndGgsdGhpcy5fZmVhdHVyZXM9ZX07Ui5wcm90b3R5cGUuZmVhdHVyZT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IEQodGhpcy5fZmVhdHVyZXNbdF0pfTt2YXIgQj10Ll9fbW9kdWxlRXhwb3J0cy5WZWN0b3JUaWxlRmVhdHVyZSxGPU47ZnVuY3Rpb24gTih0LGUpe3RoaXMub3B0aW9ucz1lfHx7fSx0aGlzLmZlYXR1cmVzPXQsdGhpcy5sZW5ndGg9dC5sZW5ndGh9ZnVuY3Rpb24gaih0LGUpe3RoaXMuaWQ9Im51bWJlciI9PXR5cGVvZiB0LmlkP3QuaWQ6dm9pZCAwLHRoaXMudHlwZT10LnR5cGUsdGhpcy5yYXdHZW9tZXRyeT0xPT09dC50eXBlP1t0Lmdlb21ldHJ5XTp0Lmdlb21ldHJ5LHRoaXMucHJvcGVydGllcz10LnRhZ3MsdGhpcy5leHRlbnQ9ZXx8NDA5Nn1OLnByb3RvdHlwZS5mZWF0dXJlPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgaih0aGlzLmZlYXR1cmVzW3RdLHRoaXMub3B0aW9ucy5leHRlbnQpfSxqLnByb3RvdHlwZS5sb2FkR2VvbWV0cnk9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnJhd0dlb21ldHJ5O3RoaXMuZ2VvbWV0cnk9W107Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe2Zvcih2YXIgbj1lW3JdLGk9W10sYT0wO2E8bi5sZW5ndGg7YSsrKWkucHVzaChuZXcgdC5kZWZhdWx0JDMyKG5bYV1bMF0sblthXVsxXSkpO3RoaXMuZ2VvbWV0cnkucHVzaChpKX1yZXR1cm4gdGhpcy5nZW9tZXRyeX0sai5wcm90b3R5cGUuYmJveD1mdW5jdGlvbigpe3RoaXMuZ2VvbWV0cnl8fHRoaXMubG9hZEdlb21ldHJ5KCk7Zm9yKHZhciB0PXRoaXMuZ2VvbWV0cnksZT0xLzAscj0tMS8wLG49MS8wLGk9LTEvMCxhPTA7YTx0Lmxlbmd0aDthKyspZm9yKHZhciBvPXRbYV0scz0wO3M8by5sZW5ndGg7cysrKXt2YXIgbD1vW3NdO2U9TWF0aC5taW4oZSxsLngpLHI9TWF0aC5tYXgocixsLngpLG49TWF0aC5taW4obixsLnkpLGk9TWF0aC5tYXgoaSxsLnkpfXJldHVybltlLG4scixpXX0sai5wcm90b3R5cGUudG9HZW9KU09OPUIucHJvdG90eXBlLnRvR2VvSlNPTjt2YXIgVj1ILFU9SCxxPUY7ZnVuY3Rpb24gSChlKXt2YXIgcj1uZXcgdC5fX21vZHVsZUV4cG9ydHMkMTtyZXR1cm4gZnVuY3Rpb24odCxlKXtmb3IodmFyIHIgaW4gdC5sYXllcnMpZS53cml0ZU1lc3NhZ2UoMyxHLHQubGF5ZXJzW3JdKX0oZSxyKSxyLmZpbmlzaCgpfWZ1bmN0aW9uIEcodCxlKXt2YXIgcjtlLndyaXRlVmFyaW50RmllbGQoMTUsdC52ZXJzaW9ufHwxKSxlLndyaXRlU3RyaW5nRmllbGQoMSx0Lm5hbWV8fCIiKSxlLndyaXRlVmFyaW50RmllbGQoNSx0LmV4dGVudHx8NDA5Nik7dmFyIG49e2tleXM6W10sdmFsdWVzOltdLGtleWNhY2hlOnt9LHZhbHVlY2FjaGU6e319O2ZvcihyPTA7cjx0Lmxlbmd0aDtyKyspbi5mZWF0dXJlPXQuZmVhdHVyZShyKSxlLndyaXRlTWVzc2FnZSgyLFcsbik7dmFyIGk9bi5rZXlzO2ZvcihyPTA7cjxpLmxlbmd0aDtyKyspZS53cml0ZVN0cmluZ0ZpZWxkKDMsaVtyXSk7dmFyIGE9bi52YWx1ZXM7Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyllLndyaXRlTWVzc2FnZSg0LEosYVtyXSl9ZnVuY3Rpb24gVyh0LGUpe3ZhciByPXQuZmVhdHVyZTt2b2lkIDAhPT1yLmlkJiZlLndyaXRlVmFyaW50RmllbGQoMSxyLmlkKSxlLndyaXRlTWVzc2FnZSgyLFksdCksZS53cml0ZVZhcmludEZpZWxkKDMsci50eXBlKSxlLndyaXRlTWVzc2FnZSg0LCQscil9ZnVuY3Rpb24gWSh0LGUpe3ZhciByPXQuZmVhdHVyZSxuPXQua2V5cyxpPXQudmFsdWVzLGE9dC5rZXljYWNoZSxvPXQudmFsdWVjYWNoZTtmb3IodmFyIHMgaW4gci5wcm9wZXJ0aWVzKXt2YXIgbD1hW3NdO3ZvaWQgMD09PWwmJihuLnB1c2gocyksbD1uLmxlbmd0aC0xLGFbc109bCksZS53cml0ZVZhcmludChsKTt2YXIgYz1yLnByb3BlcnRpZXNbc10sdT10eXBlb2YgYzsic3RyaW5nIiE9PXUmJiJib29sZWFuIiE9PXUmJiJudW1iZXIiIT09dSYmKGM9SlNPTi5zdHJpbmdpZnkoYykpO3ZhciBoPXUrIjoiK2MsZj1vW2hdO3ZvaWQgMD09PWYmJihpLnB1c2goYyksZj1pLmxlbmd0aC0xLG9baF09ZiksZS53cml0ZVZhcmludChmKX19ZnVuY3Rpb24gWCh0LGUpe3JldHVybihlPDwzKSsoNyZ0KX1mdW5jdGlvbiBaKHQpe3JldHVybiB0PDwxXnQ+PjMxfWZ1bmN0aW9uICQodCxlKXtmb3IodmFyIHI9dC5sb2FkR2VvbWV0cnkoKSxuPXQudHlwZSxpPTAsYT0wLG89ci5sZW5ndGgscz0wO3M8bztzKyspe3ZhciBsPXJbc10sYz0xOzE9PT1uJiYoYz1sLmxlbmd0aCksZS53cml0ZVZhcmludChYKDEsYykpO2Zvcih2YXIgdT0zPT09bj9sLmxlbmd0aC0xOmwubGVuZ3RoLGg9MDtoPHU7aCsrKXsxPT09aCYmMSE9PW4mJmUud3JpdGVWYXJpbnQoWCgyLHUtMSkpO3ZhciBmPWxbaF0ueC1pLHA9bFtoXS55LWE7ZS53cml0ZVZhcmludChaKGYpKSxlLndyaXRlVmFyaW50KFoocCkpLGkrPWYsYSs9cH0zPT09biYmZS53cml0ZVZhcmludChYKDcsMCkpfX1mdW5jdGlvbiBKKHQsZSl7dmFyIHI9dHlwZW9mIHQ7InN0cmluZyI9PT1yP2Uud3JpdGVTdHJpbmdGaWVsZCgxLHQpOiJib29sZWFuIj09PXI/ZS53cml0ZUJvb2xlYW5GaWVsZCg3LHQpOiJudW1iZXIiPT09ciYmKHQlMSE9MD9lLndyaXRlRG91YmxlRmllbGQoMyx0KTp0PDA/ZS53cml0ZVNWYXJpbnRGaWVsZCg2LHQpOmUud3JpdGVWYXJpbnRGaWVsZCg1LHQpKX1WLmZyb21WZWN0b3JUaWxlSnM9VSxWLmZyb21HZW9qc29uVnQ9ZnVuY3Rpb24odCxlKXtlPWV8fHt9O3ZhciByPXt9O2Zvcih2YXIgbiBpbiB0KXJbbl09bmV3IEYodFtuXS5mZWF0dXJlcyxlKSxyW25dLm5hbWU9bixyW25dLnZlcnNpb249ZS52ZXJzaW9uLHJbbl0uZXh0ZW50PWUuZXh0ZW50O3JldHVybiBIKHtsYXllcnM6cn0pfSxWLkdlb0pTT05XcmFwcGVyPXE7dmFyIEs9ZnVuY3Rpb24gdChlLHIsbixpLGEsbyl7aWYoIShhLWk8PW4pKXt2YXIgcz1NYXRoLmZsb29yKChpK2EpLzIpOyFmdW5jdGlvbiB0KGUscixuLGksYSxvKXtmb3IoO2E+aTspe2lmKGEtaT42MDApe3ZhciBzPWEtaSsxLGw9bi1pKzEsYz1NYXRoLmxvZyhzKSx1PS41Kk1hdGguZXhwKDIqYy8zKSxoPS41Kk1hdGguc3FydChjKnUqKHMtdSkvcykqKGwtcy8yPDA/LTE6MSk7dChlLHIsbixNYXRoLm1heChpLE1hdGguZmxvb3Iobi1sKnUvcytoKSksTWF0aC5taW4oYSxNYXRoLmZsb29yKG4rKHMtbCkqdS9zK2gpKSxvKX12YXIgZj1yWzIqbitvXSxwPWksZD1hO2ZvcihRKGUscixpLG4pLHJbMiphK29dPmYmJlEoZSxyLGksYSk7cDxkOyl7Zm9yKFEoZSxyLHAsZCkscCsrLGQtLTtyWzIqcCtvXTxmOylwKys7Zm9yKDtyWzIqZCtvXT5mOylkLS19clsyKmkrb109PT1mP1EoZSxyLGksZCk6UShlLHIsKytkLGEpLGQ8PW4mJihpPWQrMSksbjw9ZCYmKGE9ZC0xKX19KGUscixzLGksYSxvJTIpLHQoZSxyLG4saSxzLTEsbysxKSx0KGUscixuLHMrMSxhLG8rMSl9fTtmdW5jdGlvbiBRKHQsZSxyLG4pe3R0KHQscixuKSx0dChlLDIqciwyKm4pLHR0KGUsMipyKzEsMipuKzEpfWZ1bmN0aW9uIHR0KHQsZSxyKXt2YXIgbj10W2VdO3RbZV09dFtyXSx0W3JdPW59ZnVuY3Rpb24gZXQodCxlLHIsbil7dmFyIGk9dC1yLGE9ZS1uO3JldHVybiBpKmkrYSphfXZhciBydD1mdW5jdGlvbih0LGUscixuLGkpe3JldHVybiBuZXcgbnQodCxlLHIsbixpKX07ZnVuY3Rpb24gbnQodCxlLHIsbixpKXtlPWV8fGl0LHI9cnx8YXQsaT1pfHxBcnJheSx0aGlzLm5vZGVTaXplPW58fDY0LHRoaXMucG9pbnRzPXQsdGhpcy5pZHM9bmV3IGkodC5sZW5ndGgpLHRoaXMuY29vcmRzPW5ldyBpKDIqdC5sZW5ndGgpO2Zvcih2YXIgYT0wO2E8dC5sZW5ndGg7YSsrKXRoaXMuaWRzW2FdPWEsdGhpcy5jb29yZHNbMiphXT1lKHRbYV0pLHRoaXMuY29vcmRzWzIqYSsxXT1yKHRbYV0pO0sodGhpcy5pZHMsdGhpcy5jb29yZHMsdGhpcy5ub2RlU2l6ZSwwLHRoaXMuaWRzLmxlbmd0aC0xLDApfWZ1bmN0aW9uIGl0KHQpe3JldHVybiB0WzBdfWZ1bmN0aW9uIGF0KHQpe3JldHVybiB0WzFdfW50LnByb3RvdHlwZT17cmFuZ2U6ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe2Zvcih2YXIgcyxsLGM9WzAsdC5sZW5ndGgtMSwwXSx1PVtdO2MubGVuZ3RoOyl7dmFyIGg9Yy5wb3AoKSxmPWMucG9wKCkscD1jLnBvcCgpO2lmKGYtcDw9bylmb3IodmFyIGQ9cDtkPD1mO2QrKylzPWVbMipkXSxsPWVbMipkKzFdLHM+PXImJnM8PWkmJmw+PW4mJmw8PWEmJnUucHVzaCh0W2RdKTtlbHNle3ZhciBnPU1hdGguZmxvb3IoKHArZikvMik7cz1lWzIqZ10sbD1lWzIqZysxXSxzPj1yJiZzPD1pJiZsPj1uJiZsPD1hJiZ1LnB1c2godFtnXSk7dmFyIG09KGgrMSklMjsoMD09PWg/cjw9czpuPD1sKSYmKGMucHVzaChwKSxjLnB1c2goZy0xKSxjLnB1c2gobSkpLCgwPT09aD9pPj1zOmE+PWwpJiYoYy5wdXNoKGcrMSksYy5wdXNoKGYpLGMucHVzaChtKSl9fXJldHVybiB1fSh0aGlzLmlkcyx0aGlzLmNvb3Jkcyx0LGUscixuLHRoaXMubm9kZVNpemUpfSx3aXRoaW46ZnVuY3Rpb24odCxlLHIpe3JldHVybiBmdW5jdGlvbih0LGUscixuLGksYSl7Zm9yKHZhciBvPVswLHQubGVuZ3RoLTEsMF0scz1bXSxsPWkqaTtvLmxlbmd0aDspe3ZhciBjPW8ucG9wKCksdT1vLnBvcCgpLGg9by5wb3AoKTtpZih1LWg8PWEpZm9yKHZhciBmPWg7Zjw9dTtmKyspZXQoZVsyKmZdLGVbMipmKzFdLHIsbik8PWwmJnMucHVzaCh0W2ZdKTtlbHNle3ZhciBwPU1hdGguZmxvb3IoKGgrdSkvMiksZD1lWzIqcF0sZz1lWzIqcCsxXTtldChkLGcscixuKTw9bCYmcy5wdXNoKHRbcF0pO3ZhciBtPShjKzEpJTI7KDA9PT1jP3ItaTw9ZDpuLWk8PWcpJiYoby5wdXNoKGgpLG8ucHVzaChwLTEpLG8ucHVzaChtKSksKDA9PT1jP3IraT49ZDpuK2k+PWcpJiYoby5wdXNoKHArMSksby5wdXNoKHUpLG8ucHVzaChtKSl9fXJldHVybiBzfSh0aGlzLmlkcyx0aGlzLmNvb3Jkcyx0LGUscix0aGlzLm5vZGVTaXplKX19O2Z1bmN0aW9uIG90KHQpe3RoaXMub3B0aW9ucz1wdChPYmplY3QuY3JlYXRlKHRoaXMub3B0aW9ucyksdCksdGhpcy50cmVlcz1uZXcgQXJyYXkodGhpcy5vcHRpb25zLm1heFpvb20rMSl9ZnVuY3Rpb24gc3QodCxlLHIsbixpKXtyZXR1cm57eDp0LHk6ZSx6b29tOjEvMCxpZDpuLHByb3BlcnRpZXM6aSxwYXJlbnRJZDotMSxudW1Qb2ludHM6cn19ZnVuY3Rpb24gbHQodCxlKXt2YXIgcj10Lmdlb21ldHJ5LmNvb3JkaW5hdGVzO3JldHVybnt4Omh0KHJbMF0pLHk6ZnQoclsxXSksem9vbToxLzAsaWQ6ZSxwYXJlbnRJZDotMX19ZnVuY3Rpb24gY3QodCl7cmV0dXJue3R5cGU6IkZlYXR1cmUiLHByb3BlcnRpZXM6dXQodCksZ2VvbWV0cnk6e3R5cGU6IlBvaW50Iixjb29yZGluYXRlczpbKG49dC54LDM2MCoobi0uNSkpLChlPXQueSxyPSgxODAtMzYwKmUpKk1hdGguUEkvMTgwLDM2MCpNYXRoLmF0YW4oTWF0aC5leHAocikpL01hdGguUEktOTApXX19O3ZhciBlLHIsbn1mdW5jdGlvbiB1dCh0KXt2YXIgZT10Lm51bVBvaW50cyxyPWU+PTFlND9NYXRoLnJvdW5kKGUvMWUzKSsiayI6ZT49MWUzP01hdGgucm91bmQoZS8xMDApLzEwKyJrIjplO3JldHVybiBwdChwdCh7fSx0LnByb3BlcnRpZXMpLHtjbHVzdGVyOiEwLGNsdXN0ZXJfaWQ6dC5pZCxwb2ludF9jb3VudDplLHBvaW50X2NvdW50X2FiYnJldmlhdGVkOnJ9KX1mdW5jdGlvbiBodCh0KXtyZXR1cm4gdC8zNjArLjV9ZnVuY3Rpb24gZnQodCl7dmFyIGU9TWF0aC5zaW4odCpNYXRoLlBJLzE4MCkscj0uNS0uMjUqTWF0aC5sb2coKDErZSkvKDEtZSkpL01hdGguUEk7cmV0dXJuIHI8MD8wOnI+MT8xOnJ9ZnVuY3Rpb24gcHQodCxlKXtmb3IodmFyIHIgaW4gZSl0W3JdPWVbcl07cmV0dXJuIHR9ZnVuY3Rpb24gZHQodCl7cmV0dXJuIHQueH1mdW5jdGlvbiBndCh0KXtyZXR1cm4gdC55fWZ1bmN0aW9uIG10KHQsZSxyLG4saSxhKXt2YXIgbz1pLXIscz1hLW47aWYoMCE9PW98fDAhPT1zKXt2YXIgbD0oKHQtcikqbysoZS1uKSpzKS8obypvK3Mqcyk7bD4xPyhyPWksbj1hKTpsPjAmJihyKz1vKmwsbis9cypsKX1yZXR1cm4obz10LXIpKm8rKHM9ZS1uKSpzfWZ1bmN0aW9uIHZ0KHQsZSxyLG4pe3ZhciBpPXtpZDp0fHxudWxsLHR5cGU6ZSxnZW9tZXRyeTpyLHRhZ3M6bixtaW5YOjEvMCxtaW5ZOjEvMCxtYXhYOi0xLzAsbWF4WTotMS8wfTtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9dC5nZW9tZXRyeSxyPXQudHlwZTtpZigiUG9pbnQiPT09cnx8Ik11bHRpUG9pbnQiPT09cnx8IkxpbmVTdHJpbmciPT09cil5dCh0LGUpO2Vsc2UgaWYoIlBvbHlnb24iPT09cnx8Ik11bHRpTGluZVN0cmluZyI9PT1yKWZvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXl0KHQsZVtuXSk7ZWxzZSBpZigiTXVsdGlQb2x5Z29uIj09PXIpZm9yKG49MDtuPGUubGVuZ3RoO24rKylmb3IodmFyIGk9MDtpPGVbbl0ubGVuZ3RoO2krKyl5dCh0LGVbbl1baV0pfShpKSxpfWZ1bmN0aW9uIHl0KHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKz0zKXQubWluWD1NYXRoLm1pbih0Lm1pblgsZVtyXSksdC5taW5ZPU1hdGgubWluKHQubWluWSxlW3IrMV0pLHQubWF4WD1NYXRoLm1heCh0Lm1heFgsZVtyXSksdC5tYXhZPU1hdGgubWF4KHQubWF4WSxlW3IrMV0pfWZ1bmN0aW9uIHh0KHQsZSxyKXtpZihlLmdlb21ldHJ5KXt2YXIgbj1lLmdlb21ldHJ5LmNvb3JkaW5hdGVzLGk9ZS5nZW9tZXRyeS50eXBlLGE9TWF0aC5wb3coci50b2xlcmFuY2UvKCgxPDxyLm1heFpvb20pKnIuZXh0ZW50KSwyKSxvPVtdO2lmKCJQb2ludCI9PT1pKWJ0KG4sbyk7ZWxzZSBpZigiTXVsdGlQb2ludCI9PT1pKWZvcih2YXIgcz0wO3M8bi5sZW5ndGg7cysrKWJ0KG5bc10sbyk7ZWxzZSBpZigiTGluZVN0cmluZyI9PT1pKV90KG4sbyxhLCExKTtlbHNlIGlmKCJNdWx0aUxpbmVTdHJpbmciPT09aSlpZihyLmxpbmVNZXRyaWNzKWZvcihzPTA7czxuLmxlbmd0aDtzKyspcmV0dXJuIG89W10sX3QobltzXSxvLGEsITEpLHZvaWQgdC5wdXNoKHZ0KGUuaWQsIkxpbmVTdHJpbmciLG8sZS5wcm9wZXJ0aWVzKSk7ZWxzZSB3dChuLG8sYSwhMSk7ZWxzZSBpZigiUG9seWdvbiI9PT1pKXd0KG4sbyxhLCEwKTtlbHNle2lmKCJNdWx0aVBvbHlnb24iIT09aSl7aWYoIkdlb21ldHJ5Q29sbGVjdGlvbiI9PT1pKXtmb3Iocz0wO3M8ZS5nZW9tZXRyeS5nZW9tZXRyaWVzLmxlbmd0aDtzKyspeHQodCx7aWQ6ZS5pZCxnZW9tZXRyeTplLmdlb21ldHJ5Lmdlb21ldHJpZXNbc10scHJvcGVydGllczplLnByb3BlcnRpZXN9LHIpO3JldHVybn10aHJvdyBuZXcgRXJyb3IoIklucHV0IGRhdGEgaXMgbm90IGEgdmFsaWQgR2VvSlNPTiBvYmplY3QuIil9Zm9yKHM9MDtzPG4ubGVuZ3RoO3MrKyl7dmFyIGw9W107d3QobltzXSxsLGEsITApLG8ucHVzaChsKX19dC5wdXNoKHZ0KGUuaWQsaSxvLGUucHJvcGVydGllcykpfX1mdW5jdGlvbiBidCh0LGUpe2UucHVzaChrdCh0WzBdKSksZS5wdXNoKE10KHRbMV0pKSxlLnB1c2goMCl9ZnVuY3Rpb24gX3QodCxlLHIsbil7Zm9yKHZhciBpLGEsbz0wLHM9MDtzPHQubGVuZ3RoO3MrKyl7dmFyIGw9a3QodFtzXVswXSksYz1NdCh0W3NdWzFdKTtlLnB1c2gobCksZS5wdXNoKGMpLGUucHVzaCgwKSxzPjAmJihvKz1uPyhpKmMtbCphKS8yOk1hdGguc3FydChNYXRoLnBvdyhsLWksMikrTWF0aC5wb3coYy1hLDIpKSksaT1sLGE9Y312YXIgdT1lLmxlbmd0aC0zO2VbMl09MSxmdW5jdGlvbiB0KGUscixuLGkpe2Zvcih2YXIgYSxvPWkscz1lW3JdLGw9ZVtyKzFdLGM9ZVtuXSx1PWVbbisxXSxoPXIrMztoPG47aCs9Myl7dmFyIGY9bXQoZVtoXSxlW2grMV0scyxsLGMsdSk7Zj5vJiYoYT1oLG89Zil9bz5pJiYoYS1yPjMmJnQoZSxyLGEsaSksZVthKzJdPW8sbi1hPjMmJnQoZSxhLG4saSkpfShlLDAsdSxyKSxlW3UrMl09MSxlLnNpemU9TWF0aC5hYnMobyksZS5zdGFydD0wLGUuZW5kPWUuc2l6ZX1mdW5jdGlvbiB3dCh0LGUscixuKXtmb3IodmFyIGk9MDtpPHQubGVuZ3RoO2krKyl7dmFyIGE9W107X3QodFtpXSxhLHIsbiksZS5wdXNoKGEpfX1mdW5jdGlvbiBrdCh0KXtyZXR1cm4gdC8zNjArLjV9ZnVuY3Rpb24gTXQodCl7dmFyIGU9TWF0aC5zaW4odCpNYXRoLlBJLzE4MCkscj0uNS0uMjUqTWF0aC5sb2coKDErZSkvKDEtZSkpL01hdGguUEk7cmV0dXJuIHI8MD8wOnI+MT8xOnJ9ZnVuY3Rpb24gQXQodCxlLHIsbixpLGEsbyxzKXtpZihuLz1lLGE+PShyLz1lKSYmbzw9bilyZXR1cm4gdDtpZihhPm58fG88cilyZXR1cm4gbnVsbDtmb3IodmFyIGw9W10sYz0wO2M8dC5sZW5ndGg7YysrKXt2YXIgdT10W2NdLGg9dS5nZW9tZXRyeSxmPXUudHlwZSxwPTA9PT1pP3UubWluWDp1Lm1pblksZD0wPT09aT91Lm1heFg6dS5tYXhZO2lmKHA+PXImJmQ8PW4pbC5wdXNoKHUpO2Vsc2UgaWYoIShwPm58fGQ8cikpe3ZhciBnPVtdO2lmKCJQb2ludCI9PT1mfHwiTXVsdGlQb2ludCI9PT1mKVR0KGgsZyxyLG4saSk7ZWxzZSBpZigiTGluZVN0cmluZyI9PT1mKVN0KGgsZyxyLG4saSwhMSxzLmxpbmVNZXRyaWNzKTtlbHNlIGlmKCJNdWx0aUxpbmVTdHJpbmciPT09ZilDdChoLGcscixuLGksITEpO2Vsc2UgaWYoIlBvbHlnb24iPT09ZilDdChoLGcscixuLGksITApO2Vsc2UgaWYoIk11bHRpUG9seWdvbiI9PT1mKWZvcih2YXIgbT0wO208aC5sZW5ndGg7bSsrKXt2YXIgdj1bXTtDdChoW21dLHYscixuLGksITApLHYubGVuZ3RoJiZnLnB1c2godil9aWYoZy5sZW5ndGgpe2lmKHMubGluZU1ldHJpY3MmJiJMaW5lU3RyaW5nIj09PWYpe2ZvcihtPTA7bTxnLmxlbmd0aDttKyspbC5wdXNoKHZ0KHUuaWQsZixnW21dLHUudGFncykpO2NvbnRpbnVlfSJMaW5lU3RyaW5nIiE9PWYmJiJNdWx0aUxpbmVTdHJpbmciIT09Znx8KDE9PT1nLmxlbmd0aD8oZj0iTGluZVN0cmluZyIsZz1nWzBdKTpmPSJNdWx0aUxpbmVTdHJpbmciKSwiUG9pbnQiIT09ZiYmIk11bHRpUG9pbnQiIT09Znx8KGY9Mz09PWcubGVuZ3RoPyJQb2ludCI6Ik11bHRpUG9pbnQiKSxsLnB1c2godnQodS5pZCxmLGcsdS50YWdzKSl9fX1yZXR1cm4gbC5sZW5ndGg/bDpudWxsfWZ1bmN0aW9uIFR0KHQsZSxyLG4saSl7Zm9yKHZhciBhPTA7YTx0Lmxlbmd0aDthKz0zKXt2YXIgbz10W2EraV07bz49ciYmbzw9biYmKGUucHVzaCh0W2FdKSxlLnB1c2godFthKzFdKSxlLnB1c2godFthKzJdKSl9fWZ1bmN0aW9uIFN0KHQsZSxyLG4saSxhLG8pe2Zvcih2YXIgcyxsLGM9RXQodCksdT0wPT09aT96dDpQdCxoPXQuc3RhcnQsZj0wO2Y8dC5sZW5ndGgtMztmKz0zKXt2YXIgcD10W2ZdLGQ9dFtmKzFdLGc9dFtmKzJdLG09dFtmKzNdLHY9dFtmKzRdLHk9MD09PWk/cDpkLHg9MD09PWk/bTp2LGI9ITE7byYmKHM9TWF0aC5zcXJ0KE1hdGgucG93KHAtbSwyKStNYXRoLnBvdyhkLXYsMikpKSx5PHI/eD49ciYmKGw9dShjLHAsZCxtLHYsciksbyYmKGMuc3RhcnQ9aCtzKmwpKTp5Pm4/eDw9biYmKGw9dShjLHAsZCxtLHYsbiksbyYmKGMuc3RhcnQ9aCtzKmwpKTpMdChjLHAsZCxnKSx4PHImJnk+PXImJihsPXUoYyxwLGQsbSx2LHIpLGI9ITApLHg+biYmeTw9biYmKGw9dShjLHAsZCxtLHYsbiksYj0hMCksIWEmJmImJihvJiYoYy5lbmQ9aCtzKmwpLGUucHVzaChjKSxjPUV0KHQpKSxvJiYoaCs9cyl9dmFyIF89dC5sZW5ndGgtMztwPXRbX10sZD10W18rMV0sZz10W18rMl0sKHk9MD09PWk/cDpkKT49ciYmeTw9biYmTHQoYyxwLGQsZyksXz1jLmxlbmd0aC0zLGEmJl8+PTMmJihjW19dIT09Y1swXXx8Y1tfKzFdIT09Y1sxXSkmJkx0KGMsY1swXSxjWzFdLGNbMl0pLGMubGVuZ3RoJiZlLnB1c2goYyl9ZnVuY3Rpb24gRXQodCl7dmFyIGU9W107cmV0dXJuIGUuc2l6ZT10LnNpemUsZS5zdGFydD10LnN0YXJ0LGUuZW5kPXQuZW5kLGV9ZnVuY3Rpb24gQ3QodCxlLHIsbixpLGEpe2Zvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKVN0KHRbb10sZSxyLG4saSxhLCExKX1mdW5jdGlvbiBMdCh0LGUscixuKXt0LnB1c2goZSksdC5wdXNoKHIpLHQucHVzaChuKX1mdW5jdGlvbiB6dCh0LGUscixuLGksYSl7dmFyIG89KGEtZSkvKG4tZSk7cmV0dXJuIHQucHVzaChhKSx0LnB1c2gocisoaS1yKSpvKSx0LnB1c2goMSksb31mdW5jdGlvbiBQdCh0LGUscixuLGksYSl7dmFyIG89KGEtcikvKGktcik7cmV0dXJuIHQucHVzaChlKyhuLWUpKm8pLHQucHVzaChhKSx0LnB1c2goMSksb31mdW5jdGlvbiBJdCh0LGUpe2Zvcih2YXIgcj1bXSxuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBpLGE9dFtuXSxvPWEudHlwZTtpZigiUG9pbnQiPT09b3x8Ik11bHRpUG9pbnQiPT09b3x8IkxpbmVTdHJpbmciPT09bylpPU90KGEuZ2VvbWV0cnksZSk7ZWxzZSBpZigiTXVsdGlMaW5lU3RyaW5nIj09PW98fCJQb2x5Z29uIj09PW8pe2k9W107Zm9yKHZhciBzPTA7czxhLmdlb21ldHJ5Lmxlbmd0aDtzKyspaS5wdXNoKE90KGEuZ2VvbWV0cnlbc10sZSkpfWVsc2UgaWYoIk11bHRpUG9seWdvbiI9PT1vKWZvcihpPVtdLHM9MDtzPGEuZ2VvbWV0cnkubGVuZ3RoO3MrKyl7Zm9yKHZhciBsPVtdLGM9MDtjPGEuZ2VvbWV0cnlbc10ubGVuZ3RoO2MrKylsLnB1c2goT3QoYS5nZW9tZXRyeVtzXVtjXSxlKSk7aS5wdXNoKGwpfXIucHVzaCh2dChhLmlkLG8saSxhLnRhZ3MpKX1yZXR1cm4gcn1mdW5jdGlvbiBPdCh0LGUpe3ZhciByPVtdO3Iuc2l6ZT10LnNpemUsdm9pZCAwIT09dC5zdGFydCYmKHIuc3RhcnQ9dC5zdGFydCxyLmVuZD10LmVuZCk7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKz0zKXIucHVzaCh0W25dK2UsdFtuKzFdLHRbbisyXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gRHQodCxlKXtpZih0LnRyYW5zZm9ybWVkKXJldHVybiB0O3ZhciByLG4saSxhPTE8PHQueixvPXQueCxzPXQueTtmb3Iocj0wO3I8dC5mZWF0dXJlcy5sZW5ndGg7cisrKXt2YXIgbD10LmZlYXR1cmVzW3JdLGM9bC5nZW9tZXRyeSx1PWwudHlwZTtpZihsLmdlb21ldHJ5PVtdLDE9PT11KWZvcihuPTA7bjxjLmxlbmd0aDtuKz0yKWwuZ2VvbWV0cnkucHVzaChSdChjW25dLGNbbisxXSxlLGEsbyxzKSk7ZWxzZSBmb3Iobj0wO248Yy5sZW5ndGg7bisrKXt2YXIgaD1bXTtmb3IoaT0wO2k8Y1tuXS5sZW5ndGg7aSs9MiloLnB1c2goUnQoY1tuXVtpXSxjW25dW2krMV0sZSxhLG8scykpO2wuZ2VvbWV0cnkucHVzaChoKX19cmV0dXJuIHQudHJhbnNmb3JtZWQ9ITAsdH1mdW5jdGlvbiBSdCh0LGUscixuLGksYSl7cmV0dXJuW01hdGgucm91bmQocioodCpuLWkpKSxNYXRoLnJvdW5kKHIqKGUqbi1hKSldfWZ1bmN0aW9uIEJ0KHQsZSxyLG4saSl7Zm9yKHZhciBhPWU9PT1pLm1heFpvb20/MDppLnRvbGVyYW5jZS8oKDE8PGUpKmkuZXh0ZW50KSxvPXtmZWF0dXJlczpbXSxudW1Qb2ludHM6MCxudW1TaW1wbGlmaWVkOjAsbnVtRmVhdHVyZXM6MCxzb3VyY2U6bnVsbCx4OnIseTpuLHo6ZSx0cmFuc2Zvcm1lZDohMSxtaW5YOjIsbWluWToxLG1heFg6LTEsbWF4WTowfSxzPTA7czx0Lmxlbmd0aDtzKyspe28ubnVtRmVhdHVyZXMrKyxGdChvLHRbc10sYSxpKTt2YXIgbD10W3NdLm1pblgsYz10W3NdLm1pblksdT10W3NdLm1heFgsaD10W3NdLm1heFk7bDxvLm1pblgmJihvLm1pblg9bCksYzxvLm1pblkmJihvLm1pblk9YyksdT5vLm1heFgmJihvLm1heFg9dSksaD5vLm1heFkmJihvLm1heFk9aCl9cmV0dXJuIG99ZnVuY3Rpb24gRnQodCxlLHIsbil7dmFyIGk9ZS5nZW9tZXRyeSxhPWUudHlwZSxvPVtdO2lmKCJQb2ludCI9PT1hfHwiTXVsdGlQb2ludCI9PT1hKWZvcih2YXIgcz0wO3M8aS5sZW5ndGg7cys9MylvLnB1c2goaVtzXSksby5wdXNoKGlbcysxXSksdC5udW1Qb2ludHMrKyx0Lm51bVNpbXBsaWZpZWQrKztlbHNlIGlmKCJMaW5lU3RyaW5nIj09PWEpTnQobyxpLHQsciwhMSwhMSk7ZWxzZSBpZigiTXVsdGlMaW5lU3RyaW5nIj09PWF8fCJQb2x5Z29uIj09PWEpZm9yKHM9MDtzPGkubGVuZ3RoO3MrKylOdChvLGlbc10sdCxyLCJQb2x5Z29uIj09PWEsMD09PXMpO2Vsc2UgaWYoIk11bHRpUG9seWdvbiI9PT1hKWZvcih2YXIgbD0wO2w8aS5sZW5ndGg7bCsrKXt2YXIgYz1pW2xdO2ZvcihzPTA7czxjLmxlbmd0aDtzKyspTnQobyxjW3NdLHQsciwhMCwwPT09cyl9aWYoby5sZW5ndGgpe3ZhciB1PWUudGFnc3x8bnVsbDtpZigiTGluZVN0cmluZyI9PT1hJiZuLmxpbmVNZXRyaWNzKXtmb3IodmFyIGggaW4gdT17fSxlLnRhZ3MpdVtoXT1lLnRhZ3NbaF07dS5tYXBib3hfY2xpcF9zdGFydD1pLnN0YXJ0L2kuc2l6ZSx1Lm1hcGJveF9jbGlwX2VuZD1pLmVuZC9pLnNpemV9dmFyIGY9e2dlb21ldHJ5Om8sdHlwZToiUG9seWdvbiI9PT1hfHwiTXVsdGlQb2x5Z29uIj09PWE/MzoiTGluZVN0cmluZyI9PT1hfHwiTXVsdGlMaW5lU3RyaW5nIj09PWE/MjoxLHRhZ3M6dX07bnVsbCE9PWUuaWQmJihmLmlkPWUuaWQpLHQuZmVhdHVyZXMucHVzaChmKX19ZnVuY3Rpb24gTnQodCxlLHIsbixpLGEpe3ZhciBvPW4qbjtpZihuPjAmJmUuc2l6ZTwoaT9vOm4pKXIubnVtUG9pbnRzKz1lLmxlbmd0aC8zO2Vsc2V7Zm9yKHZhciBzPVtdLGw9MDtsPGUubGVuZ3RoO2wrPTMpKDA9PT1ufHxlW2wrMl0+bykmJihyLm51bVNpbXBsaWZpZWQrKyxzLnB1c2goZVtsXSkscy5wdXNoKGVbbCsxXSkpLHIubnVtUG9pbnRzKys7aSYmZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPTAsaT10Lmxlbmd0aCxhPWktMjtuPGk7YT1uLG4rPTIpcis9KHRbbl0tdFthXSkqKHRbbisxXSt0W2ErMV0pO2lmKHI+MD09PWUpZm9yKG49MCxpPXQubGVuZ3RoO248aS8yO24rPTIpe3ZhciBvPXRbbl0scz10W24rMV07dFtuXT10W2ktMi1uXSx0W24rMV09dFtpLTEtbl0sdFtpLTItbl09byx0W2ktMS1uXT1zfX0ocyxhKSx0LnB1c2gocyl9fWZ1bmN0aW9uIGp0KHQsZSl7dmFyIHI9KGU9dGhpcy5vcHRpb25zPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByIGluIGUpdFtyXT1lW3JdO3JldHVybiB0fShPYmplY3QuY3JlYXRlKHRoaXMub3B0aW9ucyksZSkpLmRlYnVnO2lmKHImJmNvbnNvbGUudGltZSgicHJlcHJvY2VzcyBkYXRhIiksZS5tYXhab29tPDB8fGUubWF4Wm9vbT4yNCl0aHJvdyBuZXcgRXJyb3IoIm1heFpvb20gc2hvdWxkIGJlIGluIHRoZSAwLTI0IHJhbmdlIik7dmFyIG49ZnVuY3Rpb24odCxlKXt2YXIgcj1bXTtpZigiRmVhdHVyZUNvbGxlY3Rpb24iPT09dC50eXBlKWZvcih2YXIgbj0wO248dC5mZWF0dXJlcy5sZW5ndGg7bisrKXh0KHIsdC5mZWF0dXJlc1tuXSxlKTtlbHNlIkZlYXR1cmUiPT09dC50eXBlP3h0KHIsdCxlKTp4dChyLHtnZW9tZXRyeTp0fSxlKTtyZXR1cm4gcn0odCxlKTt0aGlzLnRpbGVzPXt9LHRoaXMudGlsZUNvb3Jkcz1bXSxyJiYoY29uc29sZS50aW1lRW5kKCJwcmVwcm9jZXNzIGRhdGEiKSxjb25zb2xlLmxvZygiaW5kZXg6IG1heFpvb206ICVkLCBtYXhQb2ludHM6ICVkIixlLmluZGV4TWF4Wm9vbSxlLmluZGV4TWF4UG9pbnRzKSxjb25zb2xlLnRpbWUoImdlbmVyYXRlIHRpbGVzIiksdGhpcy5zdGF0cz17fSx0aGlzLnRvdGFsPTApLChuPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5idWZmZXIvZS5leHRlbnQsbj10LGk9QXQodCwxLC0xLXIsciwwLC0xLDIsZSksYT1BdCh0LDEsMS1yLDIrciwwLC0xLDIsZSk7cmV0dXJuKGl8fGEpJiYobj1BdCh0LDEsLXIsMStyLDAsLTEsMixlKXx8W10saSYmKG49SXQoaSwxKS5jb25jYXQobikpLGEmJihuPW4uY29uY2F0KEl0KGEsLTEpKSkpLG59KG4sZSkpLmxlbmd0aCYmdGhpcy5zcGxpdFRpbGUobiwwLDAsMCksciYmKG4ubGVuZ3RoJiZjb25zb2xlLmxvZygiZmVhdHVyZXM6ICVkLCBwb2ludHM6ICVkIix0aGlzLnRpbGVzWzBdLm51bUZlYXR1cmVzLHRoaXMudGlsZXNbMF0ubnVtUG9pbnRzKSxjb25zb2xlLnRpbWVFbmQoImdlbmVyYXRlIHRpbGVzIiksY29uc29sZS5sb2coInRpbGVzIGdlbmVyYXRlZDoiLHRoaXMudG90YWwsSlNPTi5zdHJpbmdpZnkodGhpcy5zdGF0cykpKX1mdW5jdGlvbiBWdCh0LGUscil7cmV0dXJuIDMyKigoMTw8dCkqcitlKSt0fWZ1bmN0aW9uIFV0KHQsZSl7dmFyIHI9dC50aWxlSUQuY2Fub25pY2FsO2lmKCF0aGlzLl9nZW9KU09OSW5kZXgpcmV0dXJuIGUobnVsbCxudWxsKTt2YXIgbj10aGlzLl9nZW9KU09OSW5kZXguZ2V0VGlsZShyLnosci54LHIueSk7aWYoIW4pcmV0dXJuIGUobnVsbCxudWxsKTt2YXIgaT1uZXcgUihuLmZlYXR1cmVzKSxhPVYoaSk7MD09PWEuYnl0ZU9mZnNldCYmYS5ieXRlTGVuZ3RoPT09YS5idWZmZXIuYnl0ZUxlbmd0aHx8KGE9bmV3IFVpbnQ4QXJyYXkoYSkpLGUobnVsbCx7dmVjdG9yVGlsZTppLHJhd0RhdGE6YS5idWZmZXJ9KX1vdC5wcm90b3R5cGU9e29wdGlvbnM6e21pblpvb206MCxtYXhab29tOjE2LHJhZGl1czo0MCxleHRlbnQ6NTEyLG5vZGVTaXplOjY0LGxvZzohMSxyZWR1Y2U6bnVsbCxpbml0aWFsOmZ1bmN0aW9uKCl7cmV0dXJue319LG1hcDpmdW5jdGlvbih0KXtyZXR1cm4gdH19LGxvYWQ6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5vcHRpb25zLmxvZztlJiZjb25zb2xlLnRpbWUoInRvdGFsIHRpbWUiKTt2YXIgcj0icHJlcGFyZSAiK3QubGVuZ3RoKyIgcG9pbnRzIjtlJiZjb25zb2xlLnRpbWUociksdGhpcy5wb2ludHM9dDt2YXIgbj10Lm1hcChsdCk7ZSYmY29uc29sZS50aW1lRW5kKHIpO2Zvcih2YXIgaT10aGlzLm9wdGlvbnMubWF4Wm9vbTtpPj10aGlzLm9wdGlvbnMubWluWm9vbTtpLS0pe3ZhciBhPStEYXRlLm5vdygpO3RoaXMudHJlZXNbaSsxXT1ydChuLGR0LGd0LHRoaXMub3B0aW9ucy5ub2RlU2l6ZSxGbG9hdDMyQXJyYXkpLG49dGhpcy5fY2x1c3RlcihuLGkpLGUmJmNvbnNvbGUubG9nKCJ6JWQ6ICVkIGNsdXN0ZXJzIGluICVkbXMiLGksbi5sZW5ndGgsK0RhdGUubm93KCktYSl9cmV0dXJuIHRoaXMudHJlZXNbdGhpcy5vcHRpb25zLm1pblpvb21dPXJ0KG4sZHQsZ3QsdGhpcy5vcHRpb25zLm5vZGVTaXplLEZsb2F0MzJBcnJheSksZSYmY29uc29sZS50aW1lRW5kKCJ0b3RhbCB0aW1lIiksdGhpc30sZ2V0Q2x1c3RlcnM6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dGhpcy50cmVlc1t0aGlzLl9saW1pdFpvb20oZSldLG49ci5yYW5nZShodCh0WzBdKSxmdCh0WzNdKSxodCh0WzJdKSxmdCh0WzFdKSksaT1bXSxhPTA7YTxuLmxlbmd0aDthKyspe3ZhciBvPXIucG9pbnRzW25bYV1dO2kucHVzaChvLm51bVBvaW50cz9jdChvKTp0aGlzLnBvaW50c1tvLmlkXSl9cmV0dXJuIGl9LGdldENoaWxkcmVuOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXRoaXMudHJlZXNbZSsxXS5wb2ludHNbdF0sbj10aGlzLm9wdGlvbnMucmFkaXVzLyh0aGlzLm9wdGlvbnMuZXh0ZW50Kk1hdGgucG93KDIsZSkpLGk9dGhpcy50cmVlc1tlKzFdLndpdGhpbihyLngsci55LG4pLGE9W10sbz0wO288aS5sZW5ndGg7bysrKXt2YXIgcz10aGlzLnRyZWVzW2UrMV0ucG9pbnRzW2lbb11dO3MucGFyZW50SWQ9PT10JiZhLnB1c2gocy5udW1Qb2ludHM/Y3Qocyk6dGhpcy5wb2ludHNbcy5pZF0pfXJldHVybiBhfSxnZXRMZWF2ZXM6ZnVuY3Rpb24odCxlLHIsbil7cj1yfHwxMCxuPW58fDA7dmFyIGk9W107cmV0dXJuIHRoaXMuX2FwcGVuZExlYXZlcyhpLHQsZSxyLG4sMCksaX0sZ2V0VGlsZTpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy50cmVlc1t0aGlzLl9saW1pdFpvb20odCldLGk9TWF0aC5wb3coMix0KSxhPXRoaXMub3B0aW9ucy5leHRlbnQsbz10aGlzLm9wdGlvbnMucmFkaXVzL2Escz0oci1vKS9pLGw9KHIrMStvKS9pLGM9e2ZlYXR1cmVzOltdfTtyZXR1cm4gdGhpcy5fYWRkVGlsZUZlYXR1cmVzKG4ucmFuZ2UoKGUtbykvaSxzLChlKzErbykvaSxsKSxuLnBvaW50cyxlLHIsaSxjKSwwPT09ZSYmdGhpcy5fYWRkVGlsZUZlYXR1cmVzKG4ucmFuZ2UoMS1vL2kscywxLGwpLG4ucG9pbnRzLGkscixpLGMpLGU9PT1pLTEmJnRoaXMuX2FkZFRpbGVGZWF0dXJlcyhuLnJhbmdlKDAscyxvL2ksbCksbi5wb2ludHMsLTEscixpLGMpLGMuZmVhdHVyZXMubGVuZ3RoP2M6bnVsbH0sZ2V0Q2x1c3RlckV4cGFuc2lvblpvb206ZnVuY3Rpb24odCxlKXtmb3IoO2U8dGhpcy5vcHRpb25zLm1heFpvb207KXt2YXIgcj10aGlzLmdldENoaWxkcmVuKHQsZSk7aWYoZSsrLDEhPT1yLmxlbmd0aClicmVhazt0PXJbMF0ucHJvcGVydGllcy5jbHVzdGVyX2lkfXJldHVybiBlfSxfYXBwZW5kTGVhdmVzOmZ1bmN0aW9uKHQsZSxyLG4saSxhKXtmb3IodmFyIG89dGhpcy5nZXRDaGlsZHJlbihlLHIpLHM9MDtzPG8ubGVuZ3RoO3MrKyl7dmFyIGw9b1tzXS5wcm9wZXJ0aWVzO2lmKGwuY2x1c3Rlcj9hK2wucG9pbnRfY291bnQ8PWk/YSs9bC5wb2ludF9jb3VudDphPXRoaXMuX2FwcGVuZExlYXZlcyh0LGwuY2x1c3Rlcl9pZCxyKzEsbixpLGEpOmE8aT9hKys6dC5wdXNoKG9bc10pLHQubGVuZ3RoPT09bilicmVha31yZXR1cm4gYX0sX2FkZFRpbGVGZWF0dXJlczpmdW5jdGlvbih0LGUscixuLGksYSl7Zm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspe3ZhciBzPWVbdFtvXV07YS5mZWF0dXJlcy5wdXNoKHt0eXBlOjEsZ2VvbWV0cnk6W1tNYXRoLnJvdW5kKHRoaXMub3B0aW9ucy5leHRlbnQqKHMueCppLXIpKSxNYXRoLnJvdW5kKHRoaXMub3B0aW9ucy5leHRlbnQqKHMueSppLW4pKV1dLHRhZ3M6cy5udW1Qb2ludHM/dXQocyk6dGhpcy5wb2ludHNbcy5pZF0ucHJvcGVydGllc30pfX0sX2xpbWl0Wm9vbTpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5tYXgodGhpcy5vcHRpb25zLm1pblpvb20sTWF0aC5taW4odCx0aGlzLm9wdGlvbnMubWF4Wm9vbSsxKSl9LF9jbHVzdGVyOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLG49dGhpcy5vcHRpb25zLnJhZGl1cy8odGhpcy5vcHRpb25zLmV4dGVudCpNYXRoLnBvdygyLGUpKSxpPTA7aTx0Lmxlbmd0aDtpKyspe3ZhciBhPXRbaV07aWYoIShhLnpvb208PWUpKXthLnpvb209ZTt2YXIgbz10aGlzLnRyZWVzW2UrMV0scz1vLndpdGhpbihhLngsYS55LG4pLGw9YS5udW1Qb2ludHN8fDEsYz1hLngqbCx1PWEueSpsLGg9bnVsbDt0aGlzLm9wdGlvbnMucmVkdWNlJiYoaD10aGlzLm9wdGlvbnMuaW5pdGlhbCgpLHRoaXMuX2FjY3VtdWxhdGUoaCxhKSk7Zm9yKHZhciBmPTA7ZjxzLmxlbmd0aDtmKyspe3ZhciBwPW8ucG9pbnRzW3NbZl1dO2lmKGU8cC56b29tKXt2YXIgZD1wLm51bVBvaW50c3x8MTtwLnpvb209ZSxjKz1wLngqZCx1Kz1wLnkqZCxsKz1kLHAucGFyZW50SWQ9aSx0aGlzLm9wdGlvbnMucmVkdWNlJiZ0aGlzLl9hY2N1bXVsYXRlKGgscCl9fTE9PT1sP3IucHVzaChhKTooYS5wYXJlbnRJZD1pLHIucHVzaChzdChjL2wsdS9sLGwsaSxoKSkpfX1yZXR1cm4gcn0sX2FjY3VtdWxhdGU6ZnVuY3Rpb24odCxlKXt2YXIgcj1lLm51bVBvaW50cz9lLnByb3BlcnRpZXM6dGhpcy5vcHRpb25zLm1hcCh0aGlzLnBvaW50c1tlLmlkXS5wcm9wZXJ0aWVzKTt0aGlzLm9wdGlvbnMucmVkdWNlKHQscil9fSxqdC5wcm90b3R5cGUub3B0aW9ucz17bWF4Wm9vbToxNCxpbmRleE1heFpvb206NSxpbmRleE1heFBvaW50czoxZTUsdG9sZXJhbmNlOjMsZXh0ZW50OjQwOTYsYnVmZmVyOjY0LGxpbmVNZXRyaWNzOiExLGRlYnVnOjB9LGp0LnByb3RvdHlwZS5zcGxpdFRpbGU9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7Zm9yKHZhciBzPVt0LGUscixuXSxsPXRoaXMub3B0aW9ucyxjPWwuZGVidWc7cy5sZW5ndGg7KXtuPXMucG9wKCkscj1zLnBvcCgpLGU9cy5wb3AoKSx0PXMucG9wKCk7dmFyIHU9MTw8ZSxoPVZ0KGUscixuKSxmPXRoaXMudGlsZXNbaF07aWYoIWYmJihjPjEmJmNvbnNvbGUudGltZSgiY3JlYXRpb24iKSxmPXRoaXMudGlsZXNbaF09QnQodCxlLHIsbixsKSx0aGlzLnRpbGVDb29yZHMucHVzaCh7ejplLHg6cix5Om59KSxjKSl7Yz4xJiYoY29uc29sZS5sb2coInRpbGUgeiVkLSVkLSVkIChmZWF0dXJlczogJWQsIHBvaW50czogJWQsIHNpbXBsaWZpZWQ6ICVkKSIsZSxyLG4sZi5udW1GZWF0dXJlcyxmLm51bVBvaW50cyxmLm51bVNpbXBsaWZpZWQpLGNvbnNvbGUudGltZUVuZCgiY3JlYXRpb24iKSk7dmFyIHA9InoiK2U7dGhpcy5zdGF0c1twXT0odGhpcy5zdGF0c1twXXx8MCkrMSx0aGlzLnRvdGFsKyt9aWYoZi5zb3VyY2U9dCxpKXtpZihlPT09bC5tYXhab29tfHxlPT09aSljb250aW51ZTt2YXIgZD0xPDxpLWU7aWYociE9PU1hdGguZmxvb3IoYS9kKXx8biE9PU1hdGguZmxvb3Ioby9kKSljb250aW51ZX1lbHNlIGlmKGU9PT1sLmluZGV4TWF4Wm9vbXx8Zi5udW1Qb2ludHM8PWwuaW5kZXhNYXhQb2ludHMpY29udGludWU7aWYoZi5zb3VyY2U9bnVsbCwwIT09dC5sZW5ndGgpe2M+MSYmY29uc29sZS50aW1lKCJjbGlwcGluZyIpO3ZhciBnLG0sdix5LHgsYixfPS41KmwuYnVmZmVyL2wuZXh0ZW50LHc9LjUtXyxrPS41K18sTT0xK187Zz1tPXY9eT1udWxsLHg9QXQodCx1LHItXyxyK2ssMCxmLm1pblgsZi5tYXhYLGwpLGI9QXQodCx1LHIrdyxyK00sMCxmLm1pblgsZi5tYXhYLGwpLHQ9bnVsbCx4JiYoZz1BdCh4LHUsbi1fLG4raywxLGYubWluWSxmLm1heFksbCksbT1BdCh4LHUsbit3LG4rTSwxLGYubWluWSxmLm1heFksbCkseD1udWxsKSxiJiYodj1BdChiLHUsbi1fLG4raywxLGYubWluWSxmLm1heFksbCkseT1BdChiLHUsbit3LG4rTSwxLGYubWluWSxmLm1heFksbCksYj1udWxsKSxjPjEmJmNvbnNvbGUudGltZUVuZCgiY2xpcHBpbmciKSxzLnB1c2goZ3x8W10sZSsxLDIqciwyKm4pLHMucHVzaChtfHxbXSxlKzEsMipyLDIqbisxKSxzLnB1c2godnx8W10sZSsxLDIqcisxLDIqbikscy5wdXNoKHl8fFtdLGUrMSwyKnIrMSwyKm4rMSl9fX0sanQucHJvdG90eXBlLmdldFRpbGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMub3B0aW9ucyxpPW4uZXh0ZW50LGE9bi5kZWJ1ZztpZih0PDB8fHQ+MjQpcmV0dXJuIG51bGw7dmFyIG89MTw8dCxzPVZ0KHQsZT0oZSVvK28pJW8scik7aWYodGhpcy50aWxlc1tzXSlyZXR1cm4gRHQodGhpcy50aWxlc1tzXSxpKTthPjEmJmNvbnNvbGUubG9nKCJkcmlsbGluZyBkb3duIHRvIHolZC0lZC0lZCIsdCxlLHIpO2Zvcih2YXIgbCxjPXQsdT1lLGg9cjshbCYmYz4wOyljLS0sdT1NYXRoLmZsb29yKHUvMiksaD1NYXRoLmZsb29yKGgvMiksbD10aGlzLnRpbGVzW1Z0KGMsdSxoKV07cmV0dXJuIGwmJmwuc291cmNlPyhhPjEmJmNvbnNvbGUubG9nKCJmb3VuZCBwYXJlbnQgdGlsZSB6JWQtJWQtJWQiLGMsdSxoKSxhPjEmJmNvbnNvbGUudGltZSgiZHJpbGxpbmcgZG93biIpLHRoaXMuc3BsaXRUaWxlKGwuc291cmNlLGMsdSxoLHQsZSxyKSxhPjEmJmNvbnNvbGUudGltZUVuZCgiZHJpbGxpbmcgZG93biIpLHRoaXMudGlsZXNbc10/RHQodGhpcy50aWxlc1tzXSxpKTpudWxsKTpudWxsfTt2YXIgcXQ9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcih0LHIsbil7ZS5jYWxsKHRoaXMsdCxyLFV0KSxuJiYodGhpcy5sb2FkR2VvSlNPTj1uKX1yZXR1cm4gZSYmKHIuX19wcm90b19fPWUpLHIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLHIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXIsci5wcm90b3R5cGUubG9hZERhdGE9ZnVuY3Rpb24odCxlKXt0aGlzLl9wZW5kaW5nQ2FsbGJhY2smJnRoaXMuX3BlbmRpbmdDYWxsYmFjayhudWxsLHthYmFuZG9uZWQ6ITB9KSx0aGlzLl9wZW5kaW5nQ2FsbGJhY2s9ZSx0aGlzLl9wZW5kaW5nTG9hZERhdGFQYXJhbXM9dCx0aGlzLl9zdGF0ZSYmIklkbGUiIT09dGhpcy5fc3RhdGU/dGhpcy5fc3RhdGU9Ik5lZWRzTG9hZERhdGEiOih0aGlzLl9zdGF0ZT0iQ29hbGVzY2luZyIsdGhpcy5fbG9hZERhdGEoKSl9LHIucHJvdG90eXBlLl9sb2FkRGF0YT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7aWYodGhpcy5fcGVuZGluZ0NhbGxiYWNrJiZ0aGlzLl9wZW5kaW5nTG9hZERhdGFQYXJhbXMpe3ZhciBlPXRoaXMuX3BlbmRpbmdDYWxsYmFjayxyPXRoaXMuX3BlbmRpbmdMb2FkRGF0YVBhcmFtcztkZWxldGUgdGhpcy5fcGVuZGluZ0NhbGxiYWNrLGRlbGV0ZSB0aGlzLl9wZW5kaW5nTG9hZERhdGFQYXJhbXMsdGhpcy5sb2FkR2VvSlNPTihyLGZ1bmN0aW9uKG4saSl7aWYobnx8IWkpcmV0dXJuIGUobik7aWYoIm9iamVjdCIhPXR5cGVvZiBpKXJldHVybiBlKG5ldyBFcnJvcigiSW5wdXQgZGF0YSBpcyBub3QgYSB2YWxpZCBHZW9KU09OIG9iamVjdC4iKSk7IWZ1bmN0aW9uIHQoZSxyKXtzd2l0Y2goZSYmZS50eXBlfHxudWxsKXtjYXNlIkZlYXR1cmVDb2xsZWN0aW9uIjpyZXR1cm4gZS5mZWF0dXJlcz1lLmZlYXR1cmVzLm1hcCh6KHQscikpLGU7Y2FzZSJGZWF0dXJlIjpyZXR1cm4gZS5nZW9tZXRyeT10KGUuZ2VvbWV0cnksciksZTtjYXNlIlBvbHlnb24iOmNhc2UiTXVsdGlQb2x5Z29uIjpyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm4iUG9seWdvbiI9PT10LnR5cGU/dC5jb29yZGluYXRlcz1QKHQuY29vcmRpbmF0ZXMsZSk6Ik11bHRpUG9seWdvbiI9PT10LnR5cGUmJih0LmNvb3JkaW5hdGVzPXQuY29vcmRpbmF0ZXMubWFwKHooUCxlKSkpLHR9KGUscik7ZGVmYXVsdDpyZXR1cm4gZX19KGksITApO3RyeXt0Ll9nZW9KU09OSW5kZXg9ci5jbHVzdGVyP2Z1bmN0aW9uKHQpe3JldHVybiBuZXcgb3QodCl9KHIuc3VwZXJjbHVzdGVyT3B0aW9ucykubG9hZChpLmZlYXR1cmVzKTpuZXcganQoaSxyLmdlb2pzb25WdE9wdGlvbnMpfWNhdGNoKG4pe3JldHVybiBlKG4pfXQubG9hZGVkPXt9O3ZhciBhPXt9O2lmKHIucmVxdWVzdCYmci5yZXF1ZXN0LmNvbGxlY3RSZXNvdXJjZVRpbWluZyl7dmFyIG89dyhyLnJlcXVlc3QudXJsKTtvJiYoYS5yZXNvdXJjZVRpbWluZz17fSxhLnJlc291cmNlVGltaW5nW3Iuc291cmNlXT1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG8pKSl9ZShudWxsLGEpfSl9fSxyLnByb3RvdHlwZS5jb2FsZXNjZT1mdW5jdGlvbigpeyJDb2FsZXNjaW5nIj09PXRoaXMuX3N0YXRlP3RoaXMuX3N0YXRlPSJJZGxlIjoiTmVlZHNMb2FkRGF0YSI9PT10aGlzLl9zdGF0ZSYmKHRoaXMuX3N0YXRlPSJDb2FsZXNjaW5nIix0aGlzLl9sb2FkRGF0YSgpKX0sci5wcm90b3R5cGUucmVsb2FkVGlsZT1mdW5jdGlvbih0LHIpe3ZhciBuPXRoaXMubG9hZGVkLGk9dC51aWQ7cmV0dXJuIG4mJm5baV0/ZS5wcm90b3R5cGUucmVsb2FkVGlsZS5jYWxsKHRoaXMsdCxyKTp0aGlzLmxvYWRUaWxlKHQscil9LHIucHJvdG90eXBlLmxvYWRHZW9KU09OPWZ1bmN0aW9uKGUscil7aWYoZS5yZXF1ZXN0KXQuZ2V0SlNPTihlLnJlcXVlc3Qscik7ZWxzZXtpZigic3RyaW5nIiE9dHlwZW9mIGUuZGF0YSlyZXR1cm4gcihuZXcgRXJyb3IoIklucHV0IGRhdGEgaXMgbm90IGEgdmFsaWQgR2VvSlNPTiBvYmplY3QuIikpO3RyeXtyZXR1cm4gcihudWxsLEpTT04ucGFyc2UoZS5kYXRhKSl9Y2F0Y2godCl7cmV0dXJuIHIobmV3IEVycm9yKCJJbnB1dCBkYXRhIGlzIG5vdCBhIHZhbGlkIEdlb0pTT04gb2JqZWN0LiIpKX19fSxyLnByb3RvdHlwZS5yZW1vdmVTb3VyY2U9ZnVuY3Rpb24odCxlKXt0aGlzLl9wZW5kaW5nQ2FsbGJhY2smJnRoaXMuX3BlbmRpbmdDYWxsYmFjayhudWxsLHthYmFuZG9uZWQ6ITB9KSxlKCl9LHJ9KE0pLEh0PWZ1bmN0aW9uKGUpe3ZhciByPXRoaXM7dGhpcy5zZWxmPWUsdGhpcy5hY3Rvcj1uZXcgdC5kZWZhdWx0JDcoZSx0aGlzKSx0aGlzLmxheWVySW5kZXhlcz17fSx0aGlzLndvcmtlclNvdXJjZVR5cGVzPXt2ZWN0b3I6TSxnZW9qc29uOnF0fSx0aGlzLndvcmtlclNvdXJjZXM9e30sdGhpcy5kZW1Xb3JrZXJTb3VyY2VzPXt9LHRoaXMuc2VsZi5yZWdpc3RlcldvcmtlclNvdXJjZT1mdW5jdGlvbih0LGUpe2lmKHIud29ya2VyU291cmNlVHlwZXNbdF0pdGhyb3cgbmV3IEVycm9yKCdXb3JrZXIgc291cmNlIHdpdGggbmFtZSAiJyt0KyciIGFscmVhZHkgcmVnaXN0ZXJlZC4nKTtyLndvcmtlclNvdXJjZVR5cGVzW3RdPWV9LHRoaXMuc2VsZi5yZWdpc3RlclJUTFRleHRQbHVnaW49ZnVuY3Rpb24oZSl7aWYodC5wbHVnaW4uaXNMb2FkZWQoKSl0aHJvdyBuZXcgRXJyb3IoIlJUTCB0ZXh0IHBsdWdpbiBhbHJlYWR5IHJlZ2lzdGVyZWQuIik7dC5wbHVnaW4uYXBwbHlBcmFiaWNTaGFwaW5nPWUuYXBwbHlBcmFiaWNTaGFwaW5nLHQucGx1Z2luLnByb2Nlc3NCaWRpcmVjdGlvbmFsVGV4dD1lLnByb2Nlc3NCaWRpcmVjdGlvbmFsVGV4dH19O3JldHVybiBIdC5wcm90b3R5cGUuc2V0TGF5ZXJzPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmdldExheWVySW5kZXgodCkucmVwbGFjZShlKSxyKCl9LEh0LnByb3RvdHlwZS51cGRhdGVMYXllcnM9ZnVuY3Rpb24odCxlLHIpe3RoaXMuZ2V0TGF5ZXJJbmRleCh0KS51cGRhdGUoZS5sYXllcnMsZS5yZW1vdmVkSWRzKSxyKCl9LEh0LnByb3RvdHlwZS5sb2FkVGlsZT1mdW5jdGlvbih0LGUscil7dGhpcy5nZXRXb3JrZXJTb3VyY2UodCxlLnR5cGUsZS5zb3VyY2UpLmxvYWRUaWxlKGUscil9LEh0LnByb3RvdHlwZS5sb2FkREVNVGlsZT1mdW5jdGlvbih0LGUscil7dGhpcy5nZXRERU1Xb3JrZXJTb3VyY2UodCxlLnNvdXJjZSkubG9hZFRpbGUoZSxyKX0sSHQucHJvdG90eXBlLnJlbG9hZFRpbGU9ZnVuY3Rpb24odCxlLHIpe3RoaXMuZ2V0V29ya2VyU291cmNlKHQsZS50eXBlLGUuc291cmNlKS5yZWxvYWRUaWxlKGUscil9LEh0LnByb3RvdHlwZS5hYm9ydFRpbGU9ZnVuY3Rpb24odCxlLHIpe3RoaXMuZ2V0V29ya2VyU291cmNlKHQsZS50eXBlLGUuc291cmNlKS5hYm9ydFRpbGUoZSxyKX0sSHQucHJvdG90eXBlLnJlbW92ZVRpbGU9ZnVuY3Rpb24odCxlLHIpe3RoaXMuZ2V0V29ya2VyU291cmNlKHQsZS50eXBlLGUuc291cmNlKS5yZW1vdmVUaWxlKGUscil9LEh0LnByb3RvdHlwZS5yZW1vdmVERU1UaWxlPWZ1bmN0aW9uKHQsZSl7dGhpcy5nZXRERU1Xb3JrZXJTb3VyY2UodCxlLnNvdXJjZSkucmVtb3ZlVGlsZShlKX0sSHQucHJvdG90eXBlLnJlbW92ZVNvdXJjZT1mdW5jdGlvbih0LGUscil7aWYodGhpcy53b3JrZXJTb3VyY2VzW3RdJiZ0aGlzLndvcmtlclNvdXJjZXNbdF1bZS50eXBlXSYmdGhpcy53b3JrZXJTb3VyY2VzW3RdW2UudHlwZV1bZS5zb3VyY2VdKXt2YXIgbj10aGlzLndvcmtlclNvdXJjZXNbdF1bZS50eXBlXVtlLnNvdXJjZV07ZGVsZXRlIHRoaXMud29ya2VyU291cmNlc1t0XVtlLnR5cGVdW2Uuc291cmNlXSx2b2lkIDAhPT1uLnJlbW92ZVNvdXJjZT9uLnJlbW92ZVNvdXJjZShlLHIpOnIoKX19LEh0LnByb3RvdHlwZS5sb2FkV29ya2VyU291cmNlPWZ1bmN0aW9uKHQsZSxyKXt0cnl7dGhpcy5zZWxmLmltcG9ydFNjcmlwdHMoZS51cmwpLHIoKX1jYXRjaCh0KXtyKHQudG9TdHJpbmcoKSl9fSxIdC5wcm90b3R5cGUubG9hZFJUTFRleHRQbHVnaW49ZnVuY3Rpb24oZSxyLG4pe3RyeXt0LnBsdWdpbi5pc0xvYWRlZCgpfHwodGhpcy5zZWxmLmltcG9ydFNjcmlwdHMociksbih0LnBsdWdpbi5pc0xvYWRlZCgpP251bGw6bmV3IEVycm9yKCJSVEwgVGV4dCBQbHVnaW4gZmFpbGVkIHRvIGltcG9ydCBzY3JpcHRzIGZyb20gIityKSkpfWNhdGNoKHQpe24odC50b1N0cmluZygpKX19LEh0LnByb3RvdHlwZS5nZXRMYXllckluZGV4PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubGF5ZXJJbmRleGVzW3RdO3JldHVybiBlfHwoZT10aGlzLmxheWVySW5kZXhlc1t0XT1uZXcgbiksZX0sSHQucHJvdG90eXBlLmdldFdvcmtlclNvdXJjZT1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcztpZih0aGlzLndvcmtlclNvdXJjZXNbdF18fCh0aGlzLndvcmtlclNvdXJjZXNbdF09e30pLHRoaXMud29ya2VyU291cmNlc1t0XVtlXXx8KHRoaXMud29ya2VyU291cmNlc1t0XVtlXT17fSksIXRoaXMud29ya2VyU291cmNlc1t0XVtlXVtyXSl7dmFyIGk9e3NlbmQ6ZnVuY3Rpb24oZSxyLGkpe24uYWN0b3Iuc2VuZChlLHIsaSx0KX19O3RoaXMud29ya2VyU291cmNlc1t0XVtlXVtyXT1uZXcgdGhpcy53b3JrZXJTb3VyY2VUeXBlc1tlXShpLHRoaXMuZ2V0TGF5ZXJJbmRleCh0KSl9cmV0dXJuIHRoaXMud29ya2VyU291cmNlc1t0XVtlXVtyXX0sSHQucHJvdG90eXBlLmdldERFTVdvcmtlclNvdXJjZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmRlbVdvcmtlclNvdXJjZXNbdF18fCh0aGlzLmRlbVdvcmtlclNvdXJjZXNbdF09e30pLHRoaXMuZGVtV29ya2VyU291cmNlc1t0XVtlXXx8KHRoaXMuZGVtV29ya2VyU291cmNlc1t0XVtlXT1uZXcgQSksdGhpcy5kZW1Xb3JrZXJTb3VyY2VzW3RdW2VdfSwidW5kZWZpbmVkIiE9dHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlJiYidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGYmJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSYmbmV3IEh0KHNlbGYpLEh0fSksaSgwLGZ1bmN0aW9uKHQpe3ZhciBlPXQuY3JlYXRlQ29tbW9uanNNb2R1bGUoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0KXtyZXR1cm4hISgidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmInVuZGVmaW5lZCIhPXR5cGVvZiBkb2N1bWVudCYmQXJyYXkucHJvdG90eXBlJiZBcnJheS5wcm90b3R5cGUuZXZlcnkmJkFycmF5LnByb3RvdHlwZS5maWx0ZXImJkFycmF5LnByb3RvdHlwZS5mb3JFYWNoJiZBcnJheS5wcm90b3R5cGUuaW5kZXhPZiYmQXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mJiZBcnJheS5wcm90b3R5cGUubWFwJiZBcnJheS5wcm90b3R5cGUuc29tZSYmQXJyYXkucHJvdG90eXBlLnJlZHVjZSYmQXJyYXkucHJvdG90eXBlLnJlZHVjZVJpZ2h0JiZBcnJheS5pc0FycmF5JiZGdW5jdGlvbi5wcm90b3R5cGUmJkZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kJiZPYmplY3Qua2V5cyYmT2JqZWN0LmNyZWF0ZSYmT2JqZWN0LmdldFByb3RvdHlwZU9mJiZPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyYmT2JqZWN0LmlzU2VhbGVkJiZPYmplY3QuaXNGcm96ZW4mJk9iamVjdC5pc0V4dGVuc2libGUmJk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3ImJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSYmT2JqZWN0LmRlZmluZVByb3BlcnRpZXMmJk9iamVjdC5zZWFsJiZPYmplY3QuZnJlZXplJiZPYmplY3QucHJldmVudEV4dGVuc2lvbnMmJiJKU09OImluIHdpbmRvdyYmInBhcnNlImluIEpTT04mJiJzdHJpbmdpZnkiaW4gSlNPTiYmZnVuY3Rpb24oKXtpZighKCJXb3JrZXIiaW4gd2luZG93JiYiQmxvYiJpbiB3aW5kb3cmJiJVUkwiaW4gd2luZG93KSlyZXR1cm4hMTt2YXIgdCxlLHI9bmV3IEJsb2IoWyIiXSx7dHlwZToidGV4dC9qYXZhc2NyaXB0In0pLG49VVJMLmNyZWF0ZU9iamVjdFVSTChyKTt0cnl7ZT1uZXcgV29ya2VyKG4pLHQ9ITB9Y2F0Y2goZSl7dD0hMX1yZXR1cm4gZSYmZS50ZXJtaW5hdGUoKSxVUkwucmV2b2tlT2JqZWN0VVJMKG4pLHR9KCkmJiJVaW50OENsYW1wZWRBcnJheSJpbiB3aW5kb3cmJmZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT1yW3RdJiYoclt0XT1mdW5jdGlvbih0KXt2YXIgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSxuPU9iamVjdC5jcmVhdGUoZS53ZWJHTENvbnRleHRBdHRyaWJ1dGVzKTtyZXR1cm4gbi5mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0PXQsci5wcm9iYWJseVN1cHBvcnRzQ29udGV4dD9yLnByb2JhYmx5U3VwcG9ydHNDb250ZXh0KCJ3ZWJnbCIsbil8fHIucHJvYmFibHlTdXBwb3J0c0NvbnRleHQoImV4cGVyaW1lbnRhbC13ZWJnbCIsbik6ci5zdXBwb3J0c0NvbnRleHQ/ci5zdXBwb3J0c0NvbnRleHQoIndlYmdsIixuKXx8ci5zdXBwb3J0c0NvbnRleHQoImV4cGVyaW1lbnRhbC13ZWJnbCIsbik6ci5nZXRDb250ZXh0KCJ3ZWJnbCIsbil8fHIuZ2V0Q29udGV4dCgiZXhwZXJpbWVudGFsLXdlYmdsIixuKX0odCkpLHJbdF19KHQmJnQuZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdCkpfXQuZXhwb3J0cz90LmV4cG9ydHM9ZTp3aW5kb3cmJih3aW5kb3cubWFwYm94Z2w9d2luZG93Lm1hcGJveGdsfHx7fSx3aW5kb3cubWFwYm94Z2wuc3VwcG9ydGVkPWUpO3ZhciByPXt9O2Uud2ViR0xDb250ZXh0QXR0cmlidXRlcz17YW50aWFsaWFzOiExLGFscGhhOiEwLHN0ZW5jaWw6ITAsZGVwdGg6ITB9fSkscj10LmRlZmF1bHQucGVyZm9ybWFuY2UmJnQuZGVmYXVsdC5wZXJmb3JtYW5jZS5ub3c/dC5kZWZhdWx0LnBlcmZvcm1hbmNlLm5vdy5iaW5kKHQuZGVmYXVsdC5wZXJmb3JtYW5jZSk6RGF0ZS5ub3cuYmluZChEYXRlKSxuPXQuZGVmYXVsdC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fHQuZGVmYXVsdC5tb3pSZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fHQuZGVmYXVsdC53ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fHQuZGVmYXVsdC5tc1JlcXVlc3RBbmltYXRpb25GcmFtZSxpPXQuZGVmYXVsdC5jYW5jZWxBbmltYXRpb25GcmFtZXx8dC5kZWZhdWx0Lm1vekNhbmNlbEFuaW1hdGlvbkZyYW1lfHx0LmRlZmF1bHQud2Via2l0Q2FuY2VsQW5pbWF0aW9uRnJhbWV8fHQuZGVmYXVsdC5tc0NhbmNlbEFuaW1hdGlvbkZyYW1lLGE9e25vdzpyLGZyYW1lOmZ1bmN0aW9uKHQpe3JldHVybiBuKHQpfSxjYW5jZWxGcmFtZTpmdW5jdGlvbih0KXtyZXR1cm4gaSh0KX0sZ2V0SW1hZ2VEYXRhOmZ1bmN0aW9uKGUpe3ZhciByPXQuZGVmYXVsdC5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSxuPXIuZ2V0Q29udGV4dCgiMmQiKTtpZighbil0aHJvdyBuZXcgRXJyb3IoImZhaWxlZCB0byBjcmVhdGUgY2FudmFzIDJkIGNvbnRleHQiKTtyZXR1cm4gci53aWR0aD1lLndpZHRoLHIuaGVpZ2h0PWUuaGVpZ2h0LG4uZHJhd0ltYWdlKGUsMCwwLGUud2lkdGgsZS5oZWlnaHQpLG4uZ2V0SW1hZ2VEYXRhKDAsMCxlLndpZHRoLGUuaGVpZ2h0KX0saGFyZHdhcmVDb25jdXJyZW5jeTp0LmRlZmF1bHQubmF2aWdhdG9yLmhhcmR3YXJlQ29uY3VycmVuY3l8fDQsZ2V0IGRldmljZVBpeGVsUmF0aW8oKXtyZXR1cm4gdC5kZWZhdWx0LmRldmljZVBpeGVsUmF0aW99LHN1cHBvcnRzV2VicDohMX07aWYodC5kZWZhdWx0LmRvY3VtZW50KXt2YXIgbz10LmRlZmF1bHQuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW1nIik7by5vbmxvYWQ9ZnVuY3Rpb24oKXthLnN1cHBvcnRzV2VicD0hMH0sby5zcmM9ImRhdGE6aW1hZ2Uvd2VicDtiYXNlNjQsVWtsR1JoNEFBQUJYUlVKUVZsQTRUQkVBQUFBdkFRQUFBQWZRLy83M3YvK0JpT2gvQUFBPSJ9dmFyIHM9e2NyZWF0ZTpmdW5jdGlvbihlLHIsbil7dmFyIGk9dC5kZWZhdWx0LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoZSk7cmV0dXJuIHImJihpLmNsYXNzTmFtZT1yKSxuJiZuLmFwcGVuZENoaWxkKGkpLGl9LGNyZWF0ZU5TOmZ1bmN0aW9uKGUscil7cmV0dXJuIHQuZGVmYXVsdC5kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoZSxyKX19LGw9dC5kZWZhdWx0LmRvY3VtZW50P3QuZGVmYXVsdC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGU6bnVsbDtmdW5jdGlvbiBjKHQpe2lmKCFsKXJldHVybiBudWxsO2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKWlmKHRbZV1pbiBsKXJldHVybiB0W2VdO3JldHVybiB0WzBdfXZhciB1LGg9YyhbInVzZXJTZWxlY3QiLCJNb3pVc2VyU2VsZWN0IiwiV2Via2l0VXNlclNlbGVjdCIsIm1zVXNlclNlbGVjdCJdKTtzLmRpc2FibGVEcmFnPWZ1bmN0aW9uKCl7bCYmaCYmKHU9bFtoXSxsW2hdPSJub25lIil9LHMuZW5hYmxlRHJhZz1mdW5jdGlvbigpe2wmJmgmJihsW2hdPXUpfTt2YXIgZj1jKFsidHJhbnNmb3JtIiwiV2Via2l0VHJhbnNmb3JtIl0pO3Muc2V0VHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSl7dC5zdHlsZVtmXT1lfTt2YXIgcD0hMTt0cnl7dmFyIGQ9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCJwYXNzaXZlIix7Z2V0OmZ1bmN0aW9uKCl7cD0hMH19KTt0LmRlZmF1bHQuYWRkRXZlbnRMaXN0ZW5lcigidGVzdCIsZCxkKSx0LmRlZmF1bHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidGVzdCIsZCxkKX1jYXRjaCh0KXtwPSExfXMuYWRkRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbih0LGUscixuKXt2b2lkIDA9PT1uJiYobj17fSksInBhc3NpdmUiaW4gbiYmcD90LmFkZEV2ZW50TGlzdGVuZXIoZSxyLG4pOnQuYWRkRXZlbnRMaXN0ZW5lcihlLHIsbi5jYXB0dXJlKX0scy5yZW1vdmVFdmVudExpc3RlbmVyPWZ1bmN0aW9uKHQsZSxyLG4pe3ZvaWQgMD09PW4mJihuPXt9KSwicGFzc2l2ZSJpbiBuJiZwP3QucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLHIsbik6dC5yZW1vdmVFdmVudExpc3RlbmVyKGUscixuLmNhcHR1cmUpfTt2YXIgZz1mdW5jdGlvbihlKXtlLnByZXZlbnREZWZhdWx0KCksZS5zdG9wUHJvcGFnYXRpb24oKSx0LmRlZmF1bHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLGcsITApfTtzLnN1cHByZXNzQ2xpY2s9ZnVuY3Rpb24oKXt0LmRlZmF1bHQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGcsITApLHQuZGVmYXVsdC5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dC5kZWZhdWx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNsaWNrIixnLCEwKX0sMCl9LHMubW91c2VQb3M9ZnVuY3Rpb24oZSxyKXt2YXIgbj1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybiByPXIudG91Y2hlcz9yLnRvdWNoZXNbMF06cixuZXcgdC5kZWZhdWx0JDEoci5jbGllbnRYLW4ubGVmdC1lLmNsaWVudExlZnQsci5jbGllbnRZLW4udG9wLWUuY2xpZW50VG9wKX0scy50b3VjaFBvcz1mdW5jdGlvbihlLHIpe2Zvcih2YXIgbj1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGk9W10sYT0idG91Y2hlbmQiPT09ci50eXBlP3IuY2hhbmdlZFRvdWNoZXM6ci50b3VjaGVzLG89MDtvPGEubGVuZ3RoO28rKylpLnB1c2gobmV3IHQuZGVmYXVsdCQxKGFbb10uY2xpZW50WC1uLmxlZnQtZS5jbGllbnRMZWZ0LGFbb10uY2xpZW50WS1uLnRvcC1lLmNsaWVudFRvcCkpO3JldHVybiBpfSxzLm1vdXNlQnV0dG9uPWZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDAhPT10LmRlZmF1bHQuSW5zdGFsbFRyaWdnZXImJjI9PT1lLmJ1dHRvbiYmZS5jdHJsS2V5JiZ0LmRlZmF1bHQubmF2aWdhdG9yLnBsYXRmb3JtLnRvVXBwZXJDYXNlKCkuaW5kZXhPZigiTUFDIik+PTA/MDplLmJ1dHRvbn0scy5yZW1vdmU9ZnVuY3Rpb24odCl7dC5wYXJlbnROb2RlJiZ0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCl9O3ZhciBtPXtBUElfVVJMOiJodHRwczovL2FwaS5tYXBib3guY29tIixSRVFVSVJFX0FDQ0VTU19UT0tFTjohMCxBQ0NFU1NfVE9LRU46bnVsbH0sdj0iU2VlIGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vYXBpLWRvY3VtZW50YXRpb24vI2FjY2Vzcy10b2tlbnMiO2Z1bmN0aW9uIHkodCxlKXt2YXIgcj1BKG0uQVBJX1VSTCk7aWYodC5wcm90b2NvbD1yLnByb3RvY29sLHQuYXV0aG9yaXR5PXIuYXV0aG9yaXR5LCIvIiE9PXIucGF0aCYmKHQucGF0aD0iIityLnBhdGgrdC5wYXRoKSwhbS5SRVFVSVJFX0FDQ0VTU19UT0tFTilyZXR1cm4gVCh0KTtpZighKGU9ZXx8bS5BQ0NFU1NfVE9LRU4pKXRocm93IG5ldyBFcnJvcigiQW4gQVBJIGFjY2VzcyB0b2tlbiBpcyByZXF1aXJlZCB0byB1c2UgTWFwYm94IEdMLiAiK3YpO2lmKCJzIj09PWVbMF0pdGhyb3cgbmV3IEVycm9yKCJVc2UgYSBwdWJsaWMgYWNjZXNzIHRva2VuIChway4qKSB3aXRoIE1hcGJveCBHTCwgbm90IGEgc2VjcmV0IGFjY2VzcyB0b2tlbiAoc2suKikuICIrdik7cmV0dXJuIHQucGFyYW1zLnB1c2goImFjY2Vzc190b2tlbj0iK2UpLFQodCl9ZnVuY3Rpb24geCh0KXtyZXR1cm4gMD09PXQuaW5kZXhPZigibWFwYm94OiIpfXZhciBiPWZ1bmN0aW9uKHQsZSl7aWYoIXgodCkpcmV0dXJuIHQ7dmFyIHI9QSh0KTtyZXR1cm4gci5wYXRoPSIvdjQvIityLmF1dGhvcml0eSsiLmpzb24iLHIucGFyYW1zLnB1c2goInNlY3VyZSIpLHkocixlKX0sXz1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1BKHQpO3JldHVybiB4KHQpPyhpLnBhdGg9Ii9zdHlsZXMvdjEiK2kucGF0aCsiL3Nwcml0ZSIrZStyLHkoaSxuKSk6KGkucGF0aCs9IiIrZStyLFQoaSkpfSx3PS8oXC4ocG5nfGpwZylcZCopKD89JCkvLGs9ZnVuY3Rpb24odCxlLHIpe2lmKCFlfHwheChlKSlyZXR1cm4gdDt2YXIgbj1BKHQpLGk9YS5kZXZpY2VQaXhlbFJhdGlvPj0yfHw1MTI9PT1yPyJAMngiOiIiLG89YS5zdXBwb3J0c1dlYnA/Ii53ZWJwIjoiJDEiO3JldHVybiBuLnBhdGg9bi5wYXRoLnJlcGxhY2UodywiIitpK28pLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKTA9PT10W2VdLmluZGV4T2YoImFjY2Vzc190b2tlbj10ay4iKSYmKHRbZV09ImFjY2Vzc190b2tlbj0iKyhtLkFDQ0VTU19UT0tFTnx8IiIpKX0obi5wYXJhbXMpLFQobil9LE09L14oXHcrKTpcL1wvKFteLz9dKikoXC9bXj9dKyk/XD8/KC4rKT8vO2Z1bmN0aW9uIEEodCl7dmFyIGU9dC5tYXRjaChNKTtpZighZSl0aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0byBwYXJzZSBVUkwgb2JqZWN0Iik7cmV0dXJue3Byb3RvY29sOmVbMV0sYXV0aG9yaXR5OmVbMl0scGF0aDplWzNdfHwiLyIscGFyYW1zOmVbNF0/ZVs0XS5zcGxpdCgiJiIpOltdfX1mdW5jdGlvbiBUKHQpe3ZhciBlPXQucGFyYW1zLmxlbmd0aD8iPyIrdC5wYXJhbXMuam9pbigiJiIpOiIiO3JldHVybiB0LnByb3RvY29sKyI6Ly8iK3QuYXV0aG9yaXR5K3QucGF0aCtlfXZhciBTPXQuZGVmYXVsdC5IVE1MSW1hZ2VFbGVtZW50LEU9dC5kZWZhdWx0LkhUTUxDYW52YXNFbGVtZW50LEM9dC5kZWZhdWx0LkhUTUxWaWRlb0VsZW1lbnQsTD10LmRlZmF1bHQuSW1hZ2VEYXRhLHo9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5jb250ZXh0PXQsdGhpcy5mb3JtYXQ9cix0aGlzLnRleHR1cmU9dC5nbC5jcmVhdGVUZXh0dXJlKCksdGhpcy51cGRhdGUoZSxuKX07ei5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC53aWR0aCxuPXQuaGVpZ2h0LGk9IXRoaXMuc2l6ZXx8dGhpcy5zaXplWzBdIT09cnx8dGhpcy5zaXplWzFdIT09bixhPXRoaXMuY29udGV4dCxvPWEuZ2w7dGhpcy51c2VNaXBtYXA9Qm9vbGVhbihlJiZlLnVzZU1pcG1hcCksby5iaW5kVGV4dHVyZShvLlRFWFRVUkVfMkQsdGhpcy50ZXh0dXJlKSxpPyh0aGlzLnNpemU9W3Isbl0sYS5waXhlbFN0b3JlVW5wYWNrLnNldCgxKSx0aGlzLmZvcm1hdCE9PW8uUkdCQXx8ZSYmITE9PT1lLnByZW11bHRpcGx5fHxhLnBpeGVsU3RvcmVVbnBhY2tQcmVtdWx0aXBseUFscGhhLnNldCghMCksdCBpbnN0YW5jZW9mIFN8fHQgaW5zdGFuY2VvZiBFfHx0IGluc3RhbmNlb2YgQ3x8dCBpbnN0YW5jZW9mIEw/by50ZXhJbWFnZTJEKG8uVEVYVFVSRV8yRCwwLHRoaXMuZm9ybWF0LHRoaXMuZm9ybWF0LG8uVU5TSUdORURfQllURSx0KTpvLnRleEltYWdlMkQoby5URVhUVVJFXzJELDAsdGhpcy5mb3JtYXQscixuLDAsdGhpcy5mb3JtYXQsby5VTlNJR05FRF9CWVRFLHQuZGF0YSkpOnQgaW5zdGFuY2VvZiBTfHx0IGluc3RhbmNlb2YgRXx8dCBpbnN0YW5jZW9mIEN8fHQgaW5zdGFuY2VvZiBMP28udGV4U3ViSW1hZ2UyRChvLlRFWFRVUkVfMkQsMCwwLDAsby5SR0JBLG8uVU5TSUdORURfQllURSx0KTpvLnRleFN1YkltYWdlMkQoby5URVhUVVJFXzJELDAsMCwwLHIsbixvLlJHQkEsby5VTlNJR05FRF9CWVRFLHQuZGF0YSksdGhpcy51c2VNaXBtYXAmJnRoaXMuaXNTaXplUG93ZXJPZlR3bygpJiZvLmdlbmVyYXRlTWlwbWFwKG8uVEVYVFVSRV8yRCl9LHoucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuY29udGV4dC5nbDtuLmJpbmRUZXh0dXJlKG4uVEVYVFVSRV8yRCx0aGlzLnRleHR1cmUpLHIhPT1uLkxJTkVBUl9NSVBNQVBfTkVBUkVTVHx8dGhpcy5pc1NpemVQb3dlck9mVHdvKCl8fChyPW4uTElORUFSKSx0IT09dGhpcy5maWx0ZXImJihuLnRleFBhcmFtZXRlcmkobi5URVhUVVJFXzJELG4uVEVYVFVSRV9NQUdfRklMVEVSLHQpLG4udGV4UGFyYW1ldGVyaShuLlRFWFRVUkVfMkQsbi5URVhUVVJFX01JTl9GSUxURVIscnx8dCksdGhpcy5maWx0ZXI9dCksZSE9PXRoaXMud3JhcCYmKG4udGV4UGFyYW1ldGVyaShuLlRFWFRVUkVfMkQsbi5URVhUVVJFX1dSQVBfUyxlKSxuLnRleFBhcmFtZXRlcmkobi5URVhUVVJFXzJELG4uVEVYVFVSRV9XUkFQX1QsZSksdGhpcy53cmFwPWUpfSx6LnByb3RvdHlwZS5pc1NpemVQb3dlck9mVHdvPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2l6ZVswXT09PXRoaXMuc2l6ZVsxXSYmTWF0aC5sb2codGhpcy5zaXplWzBdKS9NYXRoLkxOMiUxPT0wfSx6LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5jb250ZXh0LmdsLmRlbGV0ZVRleHR1cmUodGhpcy50ZXh0dXJlKSx0aGlzLnRleHR1cmU9bnVsbH07dmFyIFA9ZnVuY3Rpb24oKXt0aGlzLmltYWdlcz17fSx0aGlzLmxvYWRlZD0hMSx0aGlzLnJlcXVlc3RvcnM9W10sdGhpcy5zaGVsZlBhY2s9bmV3IHQuZGVmYXVsdCQyKDY0LDY0LHthdXRvUmVzaXplOiEwfSksdGhpcy5wYXR0ZXJucz17fSx0aGlzLmF0bGFzSW1hZ2U9bmV3IHQuUkdCQUltYWdlKHt3aWR0aDo2NCxoZWlnaHQ6NjR9KSx0aGlzLmRpcnR5PSEwfTtQLnByb3RvdHlwZS5pc0xvYWRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxvYWRlZH0sUC5wcm90b3R5cGUuc2V0TG9hZGVkPWZ1bmN0aW9uKHQpe2lmKHRoaXMubG9hZGVkIT09dCYmKHRoaXMubG9hZGVkPXQsdCkpe2Zvcih2YXIgZT0wLHI9dGhpcy5yZXF1ZXN0b3JzO2U8ci5sZW5ndGg7ZSs9MSl7dmFyIG49cltlXSxpPW4uaWRzLGE9bi5jYWxsYmFjazt0aGlzLl9ub3RpZnkoaSxhKX10aGlzLnJlcXVlc3RvcnM9W119fSxQLnByb3RvdHlwZS5nZXRJbWFnZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbWFnZXNbdF19LFAucHJvdG90eXBlLmFkZEltYWdlPWZ1bmN0aW9uKHQsZSl7dGhpcy5pbWFnZXNbdF09ZX0sUC5wcm90b3R5cGUucmVtb3ZlSW1hZ2U9ZnVuY3Rpb24odCl7ZGVsZXRlIHRoaXMuaW1hZ2VzW3RdO3ZhciBlPXRoaXMucGF0dGVybnNbdF07ZSYmKHRoaXMuc2hlbGZQYWNrLnVucmVmKGUuYmluKSxkZWxldGUgdGhpcy5wYXR0ZXJuc1t0XSl9LFAucHJvdG90eXBlLmdldEltYWdlcz1mdW5jdGlvbih0LGUpe3ZhciByPSEwO2lmKCF0aGlzLmlzTG9hZGVkKCkpZm9yKHZhciBuPTAsaT10O248aS5sZW5ndGg7bis9MSl7dmFyIGE9aVtuXTt0aGlzLmltYWdlc1thXXx8KHI9ITEpfXRoaXMuaXNMb2FkZWQoKXx8cj90aGlzLl9ub3RpZnkodCxlKTp0aGlzLnJlcXVlc3RvcnMucHVzaCh7aWRzOnQsY2FsbGJhY2s6ZX0pfSxQLnByb3RvdHlwZS5fbm90aWZ5PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXt9LG49MCxpPXQ7bjxpLmxlbmd0aDtuKz0xKXt2YXIgYT1pW25dLG89dGhpcy5pbWFnZXNbYV07byYmKHJbYV09e2RhdGE6by5kYXRhLmNsb25lKCkscGl4ZWxSYXRpbzpvLnBpeGVsUmF0aW8sc2RmOm8uc2RmfSl9ZShudWxsLHIpfSxQLnByb3RvdHlwZS5nZXRQaXhlbFNpemU9ZnVuY3Rpb24oKXtyZXR1cm57d2lkdGg6dGhpcy5zaGVsZlBhY2sudyxoZWlnaHQ6dGhpcy5zaGVsZlBhY2suaH19LFAucHJvdG90eXBlLmdldFBhdHRlcm49ZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5wYXR0ZXJuc1tlXTtpZihyKXJldHVybiByLnBvc2l0aW9uO3ZhciBuPXRoaXMuZ2V0SW1hZ2UoZSk7aWYoIW4pcmV0dXJuIG51bGw7dmFyIGk9bi5kYXRhLndpZHRoKzIsYT1uLmRhdGEuaGVpZ2h0KzIsbz10aGlzLnNoZWxmUGFjay5wYWNrT25lKGksYSk7aWYoIW8pcmV0dXJuIG51bGw7dGhpcy5hdGxhc0ltYWdlLnJlc2l6ZSh0aGlzLmdldFBpeGVsU2l6ZSgpKTt2YXIgcz1uLmRhdGEsbD10aGlzLmF0bGFzSW1hZ2UsYz1vLngrMSx1PW8ueSsxLGg9cy53aWR0aCxmPXMuaGVpZ2h0O3QuUkdCQUltYWdlLmNvcHkocyxsLHt4OjAseTowfSx7eDpjLHk6dX0se3dpZHRoOmgsaGVpZ2h0OmZ9KSx0LlJHQkFJbWFnZS5jb3B5KHMsbCx7eDowLHk6Zi0xfSx7eDpjLHk6dS0xfSx7d2lkdGg6aCxoZWlnaHQ6MX0pLHQuUkdCQUltYWdlLmNvcHkocyxsLHt4OjAseTowfSx7eDpjLHk6dStmfSx7d2lkdGg6aCxoZWlnaHQ6MX0pLHQuUkdCQUltYWdlLmNvcHkocyxsLHt4OmgtMSx5OjB9LHt4OmMtMSx5OnV9LHt3aWR0aDoxLGhlaWdodDpmfSksdC5SR0JBSW1hZ2UuY29weShzLGwse3g6MCx5OjB9LHt4OmMraCx5OnV9LHt3aWR0aDoxLGhlaWdodDpmfSksdGhpcy5kaXJ0eT0hMDt2YXIgcD1uZXcgdC5JbWFnZVBvc2l0aW9uKG8sbik7cmV0dXJuIHRoaXMucGF0dGVybnNbZV09e2JpbjpvLHBvc2l0aW9uOnB9LHB9LFAucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24odCl7dmFyIGU9dC5nbDt0aGlzLmF0bGFzVGV4dHVyZT90aGlzLmRpcnR5JiYodGhpcy5hdGxhc1RleHR1cmUudXBkYXRlKHRoaXMuYXRsYXNJbWFnZSksdGhpcy5kaXJ0eT0hMSk6dGhpcy5hdGxhc1RleHR1cmU9bmV3IHoodCx0aGlzLmF0bGFzSW1hZ2UsZS5SR0JBKSx0aGlzLmF0bGFzVGV4dHVyZS5iaW5kKGUuTElORUFSLGUuQ0xBTVBfVE9fRURHRSl9O3ZhciBJPUQsTz0xZTIwO2Z1bmN0aW9uIEQodCxlLHIsbixpLGEpe3RoaXMuZm9udFNpemU9dHx8MjQsdGhpcy5idWZmZXI9dm9pZCAwPT09ZT8zOmUsdGhpcy5jdXRvZmY9bnx8LjI1LHRoaXMuZm9udEZhbWlseT1pfHwic2Fucy1zZXJpZiIsdGhpcy5mb250V2VpZ2h0PWF8fCJub3JtYWwiLHRoaXMucmFkaXVzPXJ8fDg7dmFyIG89dGhpcy5zaXplPXRoaXMuZm9udFNpemUrMip0aGlzLmJ1ZmZlcjt0aGlzLmNhbnZhcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSx0aGlzLmNhbnZhcy53aWR0aD10aGlzLmNhbnZhcy5oZWlnaHQ9byx0aGlzLmN0eD10aGlzLmNhbnZhcy5nZXRDb250ZXh0KCIyZCIpLHRoaXMuY3R4LmZvbnQ9dGhpcy5mb250V2VpZ2h0KyIgIit0aGlzLmZvbnRTaXplKyJweCAiK3RoaXMuZm9udEZhbWlseSx0aGlzLmN0eC50ZXh0QmFzZWxpbmU9Im1pZGRsZSIsdGhpcy5jdHguZmlsbFN0eWxlPSJibGFjayIsdGhpcy5ncmlkT3V0ZXI9bmV3IEZsb2F0NjRBcnJheShvKm8pLHRoaXMuZ3JpZElubmVyPW5ldyBGbG9hdDY0QXJyYXkobypvKSx0aGlzLmY9bmV3IEZsb2F0NjRBcnJheShvKSx0aGlzLmQ9bmV3IEZsb2F0NjRBcnJheShvKSx0aGlzLno9bmV3IEZsb2F0NjRBcnJheShvKzEpLHRoaXMudj1uZXcgSW50MTZBcnJheShvKSx0aGlzLm1pZGRsZT1NYXRoLnJvdW5kKG8vMioobmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJHZWNrby8iKT49MD8xLjI6MSkpfWZ1bmN0aW9uIFIodCxlLHIsbixpLGEsbyl7Zm9yKHZhciBzPTA7czxlO3MrKyl7Zm9yKHZhciBsPTA7bDxyO2wrKyluW2xdPXRbbCplK3NdO2ZvcihCKG4saSxhLG8sciksbD0wO2w8cjtsKyspdFtsKmUrc109aVtsXX1mb3IobD0wO2w8cjtsKyspe2ZvcihzPTA7czxlO3MrKyluW3NdPXRbbCplK3NdO2ZvcihCKG4saSxhLG8sZSkscz0wO3M8ZTtzKyspdFtsKmUrc109TWF0aC5zcXJ0KGlbc10pfX1mdW5jdGlvbiBCKHQsZSxyLG4saSl7clswXT0wLG5bMF09LU8sblsxXT0rTztmb3IodmFyIGE9MSxvPTA7YTxpO2ErKyl7Zm9yKHZhciBzPSh0W2FdK2EqYS0odFtyW29dXStyW29dKnJbb10pKS8oMiphLTIqcltvXSk7czw9bltvXTspby0tLHM9KHRbYV0rYSphLSh0W3Jbb11dK3Jbb10qcltvXSkpLygyKmEtMipyW29dKTtyWysrb109YSxuW29dPXMsbltvKzFdPStPfWZvcihhPTAsbz0wO2E8aTthKyspe2Zvcig7bltvKzFdPGE7KW8rKztlW2FdPShhLXJbb10pKihhLXJbb10pK3RbcltvXV19fUQucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24odCl7dGhpcy5jdHguY2xlYXJSZWN0KDAsMCx0aGlzLnNpemUsdGhpcy5zaXplKSx0aGlzLmN0eC5maWxsVGV4dCh0LHRoaXMuYnVmZmVyLHRoaXMubWlkZGxlKTtmb3IodmFyIGU9dGhpcy5jdHguZ2V0SW1hZ2VEYXRhKDAsMCx0aGlzLnNpemUsdGhpcy5zaXplKSxyPW5ldyBVaW50OENsYW1wZWRBcnJheSh0aGlzLnNpemUqdGhpcy5zaXplKSxuPTA7bjx0aGlzLnNpemUqdGhpcy5zaXplO24rKyl7dmFyIGk9ZS5kYXRhWzQqbiszXS8yNTU7dGhpcy5ncmlkT3V0ZXJbbl09MT09PWk/MDowPT09aT9POk1hdGgucG93KE1hdGgubWF4KDAsLjUtaSksMiksdGhpcy5ncmlkSW5uZXJbbl09MT09PWk/TzowPT09aT8wOk1hdGgucG93KE1hdGgubWF4KDAsaS0uNSksMil9Zm9yKFIodGhpcy5ncmlkT3V0ZXIsdGhpcy5zaXplLHRoaXMuc2l6ZSx0aGlzLmYsdGhpcy5kLHRoaXMudix0aGlzLnopLFIodGhpcy5ncmlkSW5uZXIsdGhpcy5zaXplLHRoaXMuc2l6ZSx0aGlzLmYsdGhpcy5kLHRoaXMudix0aGlzLnopLG49MDtuPHRoaXMuc2l6ZSp0aGlzLnNpemU7bisrKXt2YXIgYT10aGlzLmdyaWRPdXRlcltuXS10aGlzLmdyaWRJbm5lcltuXTtyW25dPU1hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoMjU1LTI1NSooYS90aGlzLnJhZGl1cyt0aGlzLmN1dG9mZikpKSl9cmV0dXJuIHJ9O3ZhciBGPWZ1bmN0aW9uKHQsZSl7dGhpcy5yZXF1ZXN0VHJhbnNmb3JtPXQsdGhpcy5sb2NhbElkZW9ncmFwaEZvbnRGYW1pbHk9ZSx0aGlzLmVudHJpZXM9e319O0YucHJvdG90eXBlLnNldFVSTD1mdW5jdGlvbih0KXt0aGlzLnVybD10fSxGLnByb3RvdHlwZS5nZXRHbHlwaHM9ZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzLGk9W107Zm9yKHZhciBhIGluIGUpZm9yKHZhciBvPTAscz1lW2FdO288cy5sZW5ndGg7bys9MSl7dmFyIGw9c1tvXTtpLnB1c2goe3N0YWNrOmEsaWQ6bH0pfXQuYXN5bmNBbGwoaSxmdW5jdGlvbih0LGUpe3ZhciByPXQuc3RhY2ssaT10LmlkLGE9bi5lbnRyaWVzW3JdO2F8fChhPW4uZW50cmllc1tyXT17Z2x5cGhzOnt9LHJlcXVlc3RzOnt9fSk7dmFyIG89YS5nbHlwaHNbaV07aWYodm9pZCAwPT09bylpZihvPW4uX3RpbnlTREYoYSxyLGkpKWUobnVsbCx7c3RhY2s6cixpZDppLGdseXBoOm99KTtlbHNle3ZhciBzPU1hdGguZmxvb3IoaS8yNTYpO2lmKDI1NipzPjY1NTM1KWUobmV3IEVycm9yKCJnbHlwaHMgPiA2NTUzNSBub3Qgc3VwcG9ydGVkIikpO2Vsc2V7dmFyIGw9YS5yZXF1ZXN0c1tzXTtsfHwobD1hLnJlcXVlc3RzW3NdPVtdLEYubG9hZEdseXBoUmFuZ2UocixzLG4udXJsLG4ucmVxdWVzdFRyYW5zZm9ybSxmdW5jdGlvbih0LGUpe2lmKGUpZm9yKHZhciByIGluIGUpYS5nbHlwaHNbK3JdPWVbK3JdO2Zvcih2YXIgbj0wLGk9bDtuPGkubGVuZ3RoO24rPTEpKDAsaVtuXSkodCxlKTtkZWxldGUgYS5yZXF1ZXN0c1tzXX0pKSxsLnB1c2goZnVuY3Rpb24odCxuKXt0P2UodCk6biYmZShudWxsLHtzdGFjazpyLGlkOmksZ2x5cGg6bltpXXx8bnVsbH0pfSl9fWVsc2UgZShudWxsLHtzdGFjazpyLGlkOmksZ2x5cGg6b30pfSxmdW5jdGlvbih0LGUpe2lmKHQpcih0KTtlbHNlIGlmKGUpe2Zvcih2YXIgbj17fSxpPTAsYT1lO2k8YS5sZW5ndGg7aSs9MSl7dmFyIG89YVtpXSxzPW8uc3RhY2ssbD1vLmlkLGM9by5nbHlwaDsobltzXXx8KG5bc109e30pKVtsXT1jJiZ7aWQ6Yy5pZCxiaXRtYXA6Yy5iaXRtYXAuY2xvbmUoKSxtZXRyaWNzOmMubWV0cmljc319cihudWxsLG4pfX0pfSxGLnByb3RvdHlwZS5fdGlueVNERj1mdW5jdGlvbihlLHIsbil7dmFyIGk9dGhpcy5sb2NhbElkZW9ncmFwaEZvbnRGYW1pbHk7aWYoaSYmKHQuZGVmYXVsdCQ0WyJDSksgVW5pZmllZCBJZGVvZ3JhcGhzIl0obil8fHQuZGVmYXVsdCQ0WyJIYW5ndWwgU3lsbGFibGVzIl0obikpKXt2YXIgYT1lLnRpbnlTREY7aWYoIWEpe3ZhciBvPSI0MDAiOy9ib2xkL2kudGVzdChyKT9vPSI5MDAiOi9tZWRpdW0vaS50ZXN0KHIpP289IjUwMCI6L2xpZ2h0L2kudGVzdChyKSYmKG89IjIwMCIpLGE9ZS50aW55U0RGPW5ldyBGLlRpbnlTREYoMjQsMyw4LC4yNSxpLG8pfXJldHVybntpZDpuLGJpdG1hcDpuZXcgdC5BbHBoYUltYWdlKHt3aWR0aDozMCxoZWlnaHQ6MzB9LGEuZHJhdyhTdHJpbmcuZnJvbUNoYXJDb2RlKG4pKSksbWV0cmljczp7d2lkdGg6MjQsaGVpZ2h0OjI0LGxlZnQ6MCx0b3A6LTgsYWR2YW5jZToyNH19fX0sRi5sb2FkR2x5cGhSYW5nZT1mdW5jdGlvbihlLHIsbixpLGEpe3ZhciBvPTI1NipyLHM9bysyNTUsbD1pKGZ1bmN0aW9uKHQsZSl7aWYoIXgodCkpcmV0dXJuIHQ7dmFyIHI9QSh0KTtyZXR1cm4gci5wYXRoPSIvZm9udHMvdjEiK3IucGF0aCx5KHIsZSl9KG4pLnJlcGxhY2UoIntmb250c3RhY2t9IixlKS5yZXBsYWNlKCJ7cmFuZ2V9IixvKyItIitzKSx0LlJlc291cmNlVHlwZS5HbHlwaHMpO3QuZ2V0QXJyYXlCdWZmZXIobCxmdW5jdGlvbihlLHIpe2lmKGUpYShlKTtlbHNlIGlmKHIpe2Zvcih2YXIgbj17fSxpPTAsbz10LmRlZmF1bHQkMyhyLmRhdGEpO2k8by5sZW5ndGg7aSs9MSl7dmFyIHM9b1tpXTtuW3MuaWRdPXN9YShudWxsLG4pfX0pfSxGLlRpbnlTREY9STt2YXIgTj1mdW5jdGlvbigpe3RoaXMuc3BlY2lmaWNhdGlvbj10LmRlZmF1bHQkNS5saWdodC5wb3NpdGlvbn07Ti5wcm90b3R5cGUucG9zc2libHlFdmFsdWF0ZT1mdW5jdGlvbihlLHIpe3JldHVybiB0LnNwaGVyaWNhbFRvQ2FydGVzaWFuKGUuZXhwcmVzc2lvbi5ldmFsdWF0ZShyKSl9LE4ucHJvdG90eXBlLmludGVycG9sYXRlPWZ1bmN0aW9uKGUscixuKXtyZXR1cm57eDp0Lm51bWJlcihlLngsci54LG4pLHk6dC5udW1iZXIoZS55LHIueSxuKSx6OnQubnVtYmVyKGUueixyLnosbil9fTt2YXIgaj1uZXcgdC5Qcm9wZXJ0aWVzKHthbmNob3I6bmV3IHQuRGF0YUNvbnN0YW50UHJvcGVydHkodC5kZWZhdWx0JDUubGlnaHQuYW5jaG9yKSxwb3NpdGlvbjpuZXcgTixjb2xvcjpuZXcgdC5EYXRhQ29uc3RhbnRQcm9wZXJ0eSh0LmRlZmF1bHQkNS5saWdodC5jb2xvciksaW50ZW5zaXR5Om5ldyB0LkRhdGFDb25zdGFudFByb3BlcnR5KHQuZGVmYXVsdCQ1LmxpZ2h0LmludGVuc2l0eSl9KSxWPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIocil7ZS5jYWxsKHRoaXMpLHRoaXMuX3RyYW5zaXRpb25hYmxlPW5ldyB0LlRyYW5zaXRpb25hYmxlKGopLHRoaXMuc2V0TGlnaHQociksdGhpcy5fdHJhbnNpdGlvbmluZz10aGlzLl90cmFuc2l0aW9uYWJsZS51bnRyYW5zaXRpb25lZCgpfXJldHVybiBlJiYoci5fX3Byb3RvX189ZSksci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksci5wcm90b3R5cGUuY29uc3RydWN0b3I9cixyLnByb3RvdHlwZS5nZXRMaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl90cmFuc2l0aW9uYWJsZS5zZXJpYWxpemUoKX0sci5wcm90b3R5cGUuc2V0TGlnaHQ9ZnVuY3Rpb24oZSl7aWYoIXRoaXMuX3ZhbGlkYXRlKHQudmFsaWRhdGVMaWdodCxlKSlmb3IodmFyIHIgaW4gZSl7dmFyIG49ZVtyXTt0LmVuZHNXaXRoKHIsIi10cmFuc2l0aW9uIik/dGhpcy5fdHJhbnNpdGlvbmFibGUuc2V0VHJhbnNpdGlvbihyLnNsaWNlKDAsLSItdHJhbnNpdGlvbiIubGVuZ3RoKSxuKTp0aGlzLl90cmFuc2l0aW9uYWJsZS5zZXRWYWx1ZShyLG4pfX0sci5wcm90b3R5cGUudXBkYXRlVHJhbnNpdGlvbnM9ZnVuY3Rpb24odCl7dGhpcy5fdHJhbnNpdGlvbmluZz10aGlzLl90cmFuc2l0aW9uYWJsZS50cmFuc2l0aW9uZWQodCx0aGlzLl90cmFuc2l0aW9uaW5nKX0sci5wcm90b3R5cGUuaGFzVHJhbnNpdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl90cmFuc2l0aW9uaW5nLmhhc1RyYW5zaXRpb24oKX0sci5wcm90b3R5cGUucmVjYWxjdWxhdGU9ZnVuY3Rpb24odCl7dGhpcy5wcm9wZXJ0aWVzPXRoaXMuX3RyYW5zaXRpb25pbmcucG9zc2libHlFdmFsdWF0ZSh0KX0sci5wcm90b3R5cGUuX3ZhbGlkYXRlPWZ1bmN0aW9uKGUscil7cmV0dXJuIHQuZW1pdFZhbGlkYXRpb25FcnJvcnModGhpcyxlLmNhbGwodC52YWxpZGF0ZVN0eWxlLHQuZXh0ZW5kKHt2YWx1ZTpyLHN0eWxlOntnbHlwaHM6ITAsc3ByaXRlOiEwfSxzdHlsZVNwZWM6dC5kZWZhdWx0JDV9KSkpfSxyfSh0LkV2ZW50ZWQpLFU9ZnVuY3Rpb24odCxlKXt0aGlzLndpZHRoPXQsdGhpcy5oZWlnaHQ9ZSx0aGlzLm5leHRSb3c9MCx0aGlzLmJ5dGVzPTQsdGhpcy5kYXRhPW5ldyBVaW50OEFycmF5KHRoaXMud2lkdGgqdGhpcy5oZWlnaHQqdGhpcy5ieXRlcyksdGhpcy5wb3NpdGlvbnM9e319O1UucHJvdG90eXBlLmdldERhc2g9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmpvaW4oIiwiKStTdHJpbmcoZSk7cmV0dXJuIHRoaXMucG9zaXRpb25zW3JdfHwodGhpcy5wb3NpdGlvbnNbcl09dGhpcy5hZGREYXNoKHQsZSkpLHRoaXMucG9zaXRpb25zW3JdfSxVLnByb3RvdHlwZS5hZGREYXNoPWZ1bmN0aW9uKGUscil7dmFyIG49cj83OjAsaT0yKm4rMTtpZih0aGlzLm5leHRSb3craT50aGlzLmhlaWdodClyZXR1cm4gdC53YXJuT25jZSgiTGluZUF0bGFzIG91dCBvZiBzcGFjZSIpLG51bGw7Zm9yKHZhciBhPTAsbz0wO288ZS5sZW5ndGg7bysrKWErPWVbb107Zm9yKHZhciBzPXRoaXMud2lkdGgvYSxsPXMvMixjPWUubGVuZ3RoJTI9PTEsdT0tbjt1PD1uO3UrKylmb3IodmFyIGg9dGhpcy5uZXh0Um93K24rdSxmPXRoaXMud2lkdGgqaCxwPWM/LWVbZS5sZW5ndGgtMV06MCxkPWVbMF0sZz0xLG09MDttPHRoaXMud2lkdGg7bSsrKXtmb3IoO2Q8bS9zOylwPWQsZCs9ZVtnXSxjJiZnPT09ZS5sZW5ndGgtMSYmKGQrPWVbMF0pLGcrKzt2YXIgdj1NYXRoLmFicyhtLXAqcykseT1NYXRoLmFicyhtLWQqcykseD1NYXRoLm1pbih2LHkpLGI9ZyUyPT0xLF89dm9pZCAwO2lmKHIpe3ZhciB3PW4/dS9uKihsKzEpOjA7aWYoYil7dmFyIGs9bC1NYXRoLmFicyh3KTtfPU1hdGguc3FydCh4KngrayprKX1lbHNlIF89bC1NYXRoLnNxcnQoeCp4K3cqdyl9ZWxzZSBfPShiPzE6LTEpKng7dGhpcy5kYXRhWzMrNCooZittKV09TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsXysxMjgpKX12YXIgTT17eToodGhpcy5uZXh0Um93K24rLjUpL3RoaXMuaGVpZ2h0LGhlaWdodDoyKm4vdGhpcy5oZWlnaHQsd2lkdGg6YX07cmV0dXJuIHRoaXMubmV4dFJvdys9aSx0aGlzLmRpcnR5PSEwLE19LFUucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24odCl7dmFyIGU9dC5nbDt0aGlzLnRleHR1cmU/KGUuYmluZFRleHR1cmUoZS5URVhUVVJFXzJELHRoaXMudGV4dHVyZSksdGhpcy5kaXJ0eSYmKHRoaXMuZGlydHk9ITEsZS50ZXhTdWJJbWFnZTJEKGUuVEVYVFVSRV8yRCwwLDAsMCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0LGUuUkdCQSxlLlVOU0lHTkVEX0JZVEUsdGhpcy5kYXRhKSkpOih0aGlzLnRleHR1cmU9ZS5jcmVhdGVUZXh0dXJlKCksZS5iaW5kVGV4dHVyZShlLlRFWFRVUkVfMkQsdGhpcy50ZXh0dXJlKSxlLnRleFBhcmFtZXRlcmkoZS5URVhUVVJFXzJELGUuVEVYVFVSRV9XUkFQX1MsZS5SRVBFQVQpLGUudGV4UGFyYW1ldGVyaShlLlRFWFRVUkVfMkQsZS5URVhUVVJFX1dSQVBfVCxlLlJFUEVBVCksZS50ZXhQYXJhbWV0ZXJpKGUuVEVYVFVSRV8yRCxlLlRFWFRVUkVfTUlOX0ZJTFRFUixlLkxJTkVBUiksZS50ZXhQYXJhbWV0ZXJpKGUuVEVYVFVSRV8yRCxlLlRFWFRVUkVfTUFHX0ZJTFRFUixlLkxJTkVBUiksZS50ZXhJbWFnZTJEKGUuVEVYVFVSRV8yRCwwLGUuUkdCQSx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0LDAsZS5SR0JBLGUuVU5TSUdORURfQllURSx0aGlzLmRhdGEpKX07dmFyIHE9ZnVuY3Rpb24gZShyLG4pe3RoaXMud29ya2VyUG9vbD1yLHRoaXMuYWN0b3JzPVtdLHRoaXMuY3VycmVudEFjdG9yPTAsdGhpcy5pZD10LnVuaXF1ZUlkKCk7Zm9yKHZhciBpPXRoaXMud29ya2VyUG9vbC5hY3F1aXJlKHRoaXMuaWQpLGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIG89aVthXSxzPW5ldyBlLkFjdG9yKG8sbix0aGlzLmlkKTtzLm5hbWU9IldvcmtlciAiK2EsdGhpcy5hY3RvcnMucHVzaChzKX19O2Z1bmN0aW9uIEgoZSxyLG4pe3ZhciBpPWZ1bmN0aW9uKGUscil7aWYoZSlyZXR1cm4gbihlKTtpZihyKXt2YXIgaT10LnBpY2socixbInRpbGVzIiwibWluem9vbSIsIm1heHpvb20iLCJhdHRyaWJ1dGlvbiIsIm1hcGJveF9sb2dvIiwiYm91bmRzIl0pO3IudmVjdG9yX2xheWVycyYmKGkudmVjdG9yTGF5ZXJzPXIudmVjdG9yX2xheWVycyxpLnZlY3RvckxheWVySWRzPWkudmVjdG9yTGF5ZXJzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5pZH0pKSxuKG51bGwsaSl9fTtlLnVybD90LmdldEpTT04ocihiKGUudXJsKSx0LlJlc291cmNlVHlwZS5Tb3VyY2UpLGkpOmEuZnJhbWUoZnVuY3Rpb24oKXtyZXR1cm4gaShudWxsLGUpfSl9cS5wcm90b3R5cGUuYnJvYWRjYXN0PWZ1bmN0aW9uKGUscixuKXtuPW58fGZ1bmN0aW9uKCl7fSx0LmFzeW5jQWxsKHRoaXMuYWN0b3JzLGZ1bmN0aW9uKHQsbil7dC5zZW5kKGUscixuKX0sbil9LHEucHJvdG90eXBlLnNlbmQ9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuKCJudW1iZXIiIT10eXBlb2Ygbnx8aXNOYU4obikpJiYobj10aGlzLmN1cnJlbnRBY3Rvcj0odGhpcy5jdXJyZW50QWN0b3IrMSkldGhpcy5hY3RvcnMubGVuZ3RoKSx0aGlzLmFjdG9yc1tuXS5zZW5kKHQsZSxyKSxufSxxLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oKXt0aGlzLmFjdG9ycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QucmVtb3ZlKCl9KSx0aGlzLmFjdG9ycz1bXSx0aGlzLndvcmtlclBvb2wucmVsZWFzZSh0aGlzLmlkKX0scS5BY3Rvcj10LmRlZmF1bHQkNzt2YXIgRz1mdW5jdGlvbih0LGUpe2lmKGlzTmFOKHQpfHxpc05hTihlKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgTG5nTGF0IG9iamVjdDogKCIrdCsiLCAiK2UrIikiKTtpZih0aGlzLmxuZz0rdCx0aGlzLmxhdD0rZSx0aGlzLmxhdD45MHx8dGhpcy5sYXQ8LTkwKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBMbmdMYXQgbGF0aXR1ZGUgdmFsdWU6IG11c3QgYmUgYmV0d2VlbiAtOTAgYW5kIDkwIil9O0cucHJvdG90eXBlLndyYXA9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEcodC53cmFwKHRoaXMubG5nLC0xODAsMTgwKSx0aGlzLmxhdCl9LEcucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24oKXtyZXR1cm5bdGhpcy5sbmcsdGhpcy5sYXRdfSxHLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJMbmdMYXQoIit0aGlzLmxuZysiLCAiK3RoaXMubGF0KyIpIn0sRy5wcm90b3R5cGUudG9Cb3VuZHM9ZnVuY3Rpb24odCl7dmFyIGU9MzYwKnQvNDAwNzUwMTcscj1lL01hdGguY29zKE1hdGguUEkvMTgwKnRoaXMubGF0KTtyZXR1cm4gbmV3IFcobmV3IEcodGhpcy5sbmctcix0aGlzLmxhdC1lKSxuZXcgRyh0aGlzLmxuZytyLHRoaXMubGF0K2UpKX0sRy5jb252ZXJ0PWZ1bmN0aW9uKHQpe2lmKHQgaW5zdGFuY2VvZiBHKXJldHVybiB0O2lmKEFycmF5LmlzQXJyYXkodCkmJigyPT09dC5sZW5ndGh8fDM9PT10Lmxlbmd0aCkpcmV0dXJuIG5ldyBHKE51bWJlcih0WzBdKSxOdW1iZXIodFsxXSkpO2lmKCFBcnJheS5pc0FycmF5KHQpJiYib2JqZWN0Ij09dHlwZW9mIHQmJm51bGwhPT10KXJldHVybiBuZXcgRyhOdW1iZXIodC5sbmcpLE51bWJlcih0LmxhdCkpO3Rocm93IG5ldyBFcnJvcigiYExuZ0xhdExpa2VgIGFyZ3VtZW50IG11c3QgYmUgc3BlY2lmaWVkIGFzIGEgTG5nTGF0IGluc3RhbmNlLCBhbiBvYmplY3Qge2xuZzogPGxuZz4sIGxhdDogPGxhdD59LCBvciBhbiBhcnJheSBvZiBbPGxuZz4sIDxsYXQ+XSIpfTt2YXIgVz1mdW5jdGlvbih0LGUpe3QmJihlP3RoaXMuc2V0U291dGhXZXN0KHQpLnNldE5vcnRoRWFzdChlKTo0PT09dC5sZW5ndGg/dGhpcy5zZXRTb3V0aFdlc3QoW3RbMF0sdFsxXV0pLnNldE5vcnRoRWFzdChbdFsyXSx0WzNdXSk6dGhpcy5zZXRTb3V0aFdlc3QodFswXSkuc2V0Tm9ydGhFYXN0KHRbMV0pKX07Vy5wcm90b3R5cGUuc2V0Tm9ydGhFYXN0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9uZT10IGluc3RhbmNlb2YgRz9uZXcgRyh0LmxuZyx0LmxhdCk6Ry5jb252ZXJ0KHQpLHRoaXN9LFcucHJvdG90eXBlLnNldFNvdXRoV2VzdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fc3c9dCBpbnN0YW5jZW9mIEc/bmV3IEcodC5sbmcsdC5sYXQpOkcuY29udmVydCh0KSx0aGlzfSxXLnByb3RvdHlwZS5leHRlbmQ9ZnVuY3Rpb24odCl7dmFyIGUscixuPXRoaXMuX3N3LGk9dGhpcy5fbmU7aWYodCBpbnN0YW5jZW9mIEcpZT10LHI9dDtlbHNle2lmKCEodCBpbnN0YW5jZW9mIFcpKXJldHVybiBBcnJheS5pc0FycmF5KHQpP3QuZXZlcnkoQXJyYXkuaXNBcnJheSk/dGhpcy5leHRlbmQoVy5jb252ZXJ0KHQpKTp0aGlzLmV4dGVuZChHLmNvbnZlcnQodCkpOnRoaXM7aWYoZT10Ll9zdyxyPXQuX25lLCFlfHwhcilyZXR1cm4gdGhpc31yZXR1cm4gbnx8aT8obi5sbmc9TWF0aC5taW4oZS5sbmcsbi5sbmcpLG4ubGF0PU1hdGgubWluKGUubGF0LG4ubGF0KSxpLmxuZz1NYXRoLm1heChyLmxuZyxpLmxuZyksaS5sYXQ9TWF0aC5tYXgoci5sYXQsaS5sYXQpKToodGhpcy5fc3c9bmV3IEcoZS5sbmcsZS5sYXQpLHRoaXMuX25lPW5ldyBHKHIubG5nLHIubGF0KSksdGhpc30sVy5wcm90b3R5cGUuZ2V0Q2VudGVyPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBHKCh0aGlzLl9zdy5sbmcrdGhpcy5fbmUubG5nKS8yLCh0aGlzLl9zdy5sYXQrdGhpcy5fbmUubGF0KS8yKX0sVy5wcm90b3R5cGUuZ2V0U291dGhXZXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N3fSxXLnByb3RvdHlwZS5nZXROb3J0aEVhc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbmV9LFcucHJvdG90eXBlLmdldE5vcnRoV2VzdD1mdW5jdGlvbigpe3JldHVybiBuZXcgRyh0aGlzLmdldFdlc3QoKSx0aGlzLmdldE5vcnRoKCkpfSxXLnByb3RvdHlwZS5nZXRTb3V0aEVhc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEcodGhpcy5nZXRFYXN0KCksdGhpcy5nZXRTb3V0aCgpKX0sVy5wcm90b3R5cGUuZ2V0V2VzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdy5sbmd9LFcucHJvdG90eXBlLmdldFNvdXRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N3LmxhdH0sVy5wcm90b3R5cGUuZ2V0RWFzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9uZS5sbmd9LFcucHJvdG90eXBlLmdldE5vcnRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX25lLmxhdH0sVy5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbigpe3JldHVyblt0aGlzLl9zdy50b0FycmF5KCksdGhpcy5fbmUudG9BcnJheSgpXX0sVy5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iTG5nTGF0Qm91bmRzKCIrdGhpcy5fc3cudG9TdHJpbmcoKSsiLCAiK3RoaXMuX25lLnRvU3RyaW5nKCkrIikifSxXLnByb3RvdHlwZS5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuISh0aGlzLl9zdyYmdGhpcy5fbmUpfSxXLmNvbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIXR8fHQgaW5zdGFuY2VvZiBXP3Q6bmV3IFcodCl9O3ZhciBZPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmJvdW5kcz1XLmNvbnZlcnQodGhpcy52YWxpZGF0ZUJvdW5kcyh0KSksdGhpcy5taW56b29tPWV8fDAsdGhpcy5tYXh6b29tPXJ8fDI0fTtZLnByb3RvdHlwZS52YWxpZGF0ZUJvdW5kcz1mdW5jdGlvbih0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KSYmND09PXQubGVuZ3RoP1tNYXRoLm1heCgtMTgwLHRbMF0pLE1hdGgubWF4KC05MCx0WzFdKSxNYXRoLm1pbigxODAsdFsyXSksTWF0aC5taW4oOTAsdFszXSldOlstMTgwLC05MCwxODAsOTBdfSxZLnByb3RvdHlwZS5jb250YWlucz1mdW5jdGlvbih0KXt2YXIgZT1NYXRoLmZsb29yKHRoaXMubG5nWCh0aGlzLmJvdW5kcy5nZXRXZXN0KCksdC56KSkscj1NYXRoLmZsb29yKHRoaXMubGF0WSh0aGlzLmJvdW5kcy5nZXROb3J0aCgpLHQueikpLG49TWF0aC5jZWlsKHRoaXMubG5nWCh0aGlzLmJvdW5kcy5nZXRFYXN0KCksdC56KSksaT1NYXRoLmNlaWwodGhpcy5sYXRZKHRoaXMuYm91bmRzLmdldFNvdXRoKCksdC56KSk7cmV0dXJuIHQueD49ZSYmdC54PG4mJnQueT49ciYmdC55PGl9LFkucHJvdG90eXBlLmxuZ1g9ZnVuY3Rpb24odCxlKXtyZXR1cm4odCsxODApKihNYXRoLnBvdygyLGUpLzM2MCl9LFkucHJvdG90eXBlLmxhdFk9ZnVuY3Rpb24oZSxyKXt2YXIgbj10LmNsYW1wKE1hdGguc2luKE1hdGguUEkvMTgwKmUpLC0uOTk5OSwuOTk5OSksaT1NYXRoLnBvdygyLHIpLygyKk1hdGguUEkpO3JldHVybiBNYXRoLnBvdygyLHItMSkrLjUqTWF0aC5sb2coKDErbikvKDEtbikpKi1pfTt2YXIgWD1mdW5jdGlvbihlKXtmdW5jdGlvbiByKHIsbixpLGEpe2lmKGUuY2FsbCh0aGlzKSx0aGlzLmlkPXIsdGhpcy5kaXNwYXRjaGVyPWksdGhpcy50eXBlPSJ2ZWN0b3IiLHRoaXMubWluem9vbT0wLHRoaXMubWF4em9vbT0yMix0aGlzLnNjaGVtZT0ieHl6Iix0aGlzLnRpbGVTaXplPTUxMix0aGlzLnJlcGFyc2VPdmVyc2NhbGVkPSEwLHRoaXMuaXNUaWxlQ2xpcHBlZD0hMCx0LmV4dGVuZCh0aGlzLHQucGljayhuLFsidXJsIiwic2NoZW1lIiwidGlsZVNpemUiXSkpLHRoaXMuX29wdGlvbnM9dC5leHRlbmQoe3R5cGU6InZlY3RvciJ9LG4pLHRoaXMuX2NvbGxlY3RSZXNvdXJjZVRpbWluZz1uLmNvbGxlY3RSZXNvdXJjZVRpbWluZyw1MTIhPT10aGlzLnRpbGVTaXplKXRocm93IG5ldyBFcnJvcigidmVjdG9yIHRpbGUgc291cmNlcyBtdXN0IGhhdmUgYSB0aWxlU2l6ZSBvZiA1MTIiKTt0aGlzLnNldEV2ZW50ZWRQYXJlbnQoYSl9cmV0dXJuIGUmJihyLl9fcHJvdG9fXz1lKSxyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSxyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yLHIucHJvdG90eXBlLmxvYWQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuZmlyZShuZXcgdC5FdmVudCgiZGF0YWxvYWRpbmciLHtkYXRhVHlwZToic291cmNlIn0pKSxIKHRoaXMuX29wdGlvbnMsdGhpcy5tYXAuX3RyYW5zZm9ybVJlcXVlc3QsZnVuY3Rpb24ocixuKXtyP2UuZmlyZShuZXcgdC5FcnJvckV2ZW50KHIpKTpuJiYodC5leHRlbmQoZSxuKSxuLmJvdW5kcyYmKGUudGlsZUJvdW5kcz1uZXcgWShuLmJvdW5kcyxlLm1pbnpvb20sZS5tYXh6b29tKSksZS5maXJlKG5ldyB0LkV2ZW50KCJkYXRhIix7ZGF0YVR5cGU6InNvdXJjZSIsc291cmNlRGF0YVR5cGU6Im1ldGFkYXRhIn0pKSxlLmZpcmUobmV3IHQuRXZlbnQoImRhdGEiLHtkYXRhVHlwZToic291cmNlIixzb3VyY2VEYXRhVHlwZToiY29udGVudCJ9KSkpfSl9LHIucHJvdG90eXBlLmhhc1RpbGU9ZnVuY3Rpb24odCl7cmV0dXJuIXRoaXMudGlsZUJvdW5kc3x8dGhpcy50aWxlQm91bmRzLmNvbnRhaW5zKHQuY2Fub25pY2FsKX0sci5wcm90b3R5cGUub25BZGQ9ZnVuY3Rpb24odCl7dGhpcy5tYXA9dCx0aGlzLmxvYWQoKX0sci5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHQuZXh0ZW5kKHt9LHRoaXMuX29wdGlvbnMpfSxyLnByb3RvdHlwZS5sb2FkVGlsZT1mdW5jdGlvbihlLHIpe3ZhciBuPWsoZS50aWxlSUQuY2Fub25pY2FsLnVybCh0aGlzLnRpbGVzLHRoaXMuc2NoZW1lKSx0aGlzLnVybCksaT17cmVxdWVzdDp0aGlzLm1hcC5fdHJhbnNmb3JtUmVxdWVzdChuLHQuUmVzb3VyY2VUeXBlLlRpbGUpLHVpZDplLnVpZCx0aWxlSUQ6ZS50aWxlSUQsem9vbTplLnRpbGVJRC5vdmVyc2NhbGVkWix0aWxlU2l6ZTp0aGlzLnRpbGVTaXplKmUudGlsZUlELm92ZXJzY2FsZUZhY3RvcigpLHR5cGU6dGhpcy50eXBlLHNvdXJjZTp0aGlzLmlkLHBpeGVsUmF0aW86YS5kZXZpY2VQaXhlbFJhdGlvLHNob3dDb2xsaXNpb25Cb3hlczp0aGlzLm1hcC5zaG93Q29sbGlzaW9uQm94ZXN9O2Z1bmN0aW9uIG8odCxuKXtyZXR1cm4gZS5hYm9ydGVkP3IobnVsbCk6dD9yKHQpOihuJiZuLnJlc291cmNlVGltaW5nJiYoZS5yZXNvdXJjZVRpbWluZz1uLnJlc291cmNlVGltaW5nKSx0aGlzLm1hcC5fcmVmcmVzaEV4cGlyZWRUaWxlcyYmZS5zZXRFeHBpcnlEYXRhKG4pLGUubG9hZFZlY3RvckRhdGEobix0aGlzLm1hcC5wYWludGVyKSxyKG51bGwpLHZvaWQoZS5yZWxvYWRDYWxsYmFjayYmKHRoaXMubG9hZFRpbGUoZSxlLnJlbG9hZENhbGxiYWNrKSxlLnJlbG9hZENhbGxiYWNrPW51bGwpKSl9aS5yZXF1ZXN0LmNvbGxlY3RSZXNvdXJjZVRpbWluZz10aGlzLl9jb2xsZWN0UmVzb3VyY2VUaW1pbmcsdm9pZCAwPT09ZS53b3JrZXJJRHx8ImV4cGlyZWQiPT09ZS5zdGF0ZT9lLndvcmtlcklEPXRoaXMuZGlzcGF0Y2hlci5zZW5kKCJsb2FkVGlsZSIsaSxvLmJpbmQodGhpcykpOiJsb2FkaW5nIj09PWUuc3RhdGU/ZS5yZWxvYWRDYWxsYmFjaz1yOnRoaXMuZGlzcGF0Y2hlci5zZW5kKCJyZWxvYWRUaWxlIixpLG8uYmluZCh0aGlzKSxlLndvcmtlcklEKX0sci5wcm90b3R5cGUuYWJvcnRUaWxlPWZ1bmN0aW9uKHQpe3RoaXMuZGlzcGF0Y2hlci5zZW5kKCJhYm9ydFRpbGUiLHt1aWQ6dC51aWQsdHlwZTp0aGlzLnR5cGUsc291cmNlOnRoaXMuaWR9LHZvaWQgMCx0LndvcmtlcklEKX0sci5wcm90b3R5cGUudW5sb2FkVGlsZT1mdW5jdGlvbih0KXt0LnVubG9hZFZlY3RvckRhdGEoKSx0aGlzLmRpc3BhdGNoZXIuc2VuZCgicmVtb3ZlVGlsZSIse3VpZDp0LnVpZCx0eXBlOnRoaXMudHlwZSxzb3VyY2U6dGhpcy5pZH0sdm9pZCAwLHQud29ya2VySUQpfSxyLnByb3RvdHlwZS5oYXNUcmFuc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuITF9LHJ9KHQuRXZlbnRlZCksWj1mdW5jdGlvbihlKXtmdW5jdGlvbiByKHIsbixpLGEpe2UuY2FsbCh0aGlzKSx0aGlzLmlkPXIsdGhpcy5kaXNwYXRjaGVyPWksdGhpcy5zZXRFdmVudGVkUGFyZW50KGEpLHRoaXMudHlwZT0icmFzdGVyIix0aGlzLm1pbnpvb209MCx0aGlzLm1heHpvb209MjIsdGhpcy5yb3VuZFpvb209ITAsdGhpcy5zY2hlbWU9Inh5eiIsdGhpcy50aWxlU2l6ZT01MTIsdGhpcy5fbG9hZGVkPSExLHRoaXMuX29wdGlvbnM9dC5leHRlbmQoe30sbiksdC5leHRlbmQodGhpcyx0LnBpY2sobixbInVybCIsInNjaGVtZSIsInRpbGVTaXplIl0pKX1yZXR1cm4gZSYmKHIuX19wcm90b19fPWUpLHIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLHIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXIsci5wcm90b3R5cGUubG9hZD1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5maXJlKG5ldyB0LkV2ZW50KCJkYXRhbG9hZGluZyIse2RhdGFUeXBlOiJzb3VyY2UifSkpLEgodGhpcy5fb3B0aW9ucyx0aGlzLm1hcC5fdHJhbnNmb3JtUmVxdWVzdCxmdW5jdGlvbihyLG4pe3I/ZS5maXJlKG5ldyB0LkVycm9yRXZlbnQocikpOm4mJih0LmV4dGVuZChlLG4pLG4uYm91bmRzJiYoZS50aWxlQm91bmRzPW5ldyBZKG4uYm91bmRzLGUubWluem9vbSxlLm1heHpvb20pKSxlLmZpcmUobmV3IHQuRXZlbnQoImRhdGEiLHtkYXRhVHlwZToic291cmNlIixzb3VyY2VEYXRhVHlwZToibWV0YWRhdGEifSkpLGUuZmlyZShuZXcgdC5FdmVudCgiZGF0YSIse2RhdGFUeXBlOiJzb3VyY2UiLHNvdXJjZURhdGFUeXBlOiJjb250ZW50In0pKSl9KX0sci5wcm90b3R5cGUub25BZGQ9ZnVuY3Rpb24odCl7dGhpcy5tYXA9dCx0aGlzLmxvYWQoKX0sci5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHQuZXh0ZW5kKHt9LHRoaXMuX29wdGlvbnMpfSxyLnByb3RvdHlwZS5oYXNUaWxlPWZ1bmN0aW9uKHQpe3JldHVybiF0aGlzLnRpbGVCb3VuZHN8fHRoaXMudGlsZUJvdW5kcy5jb250YWlucyh0LmNhbm9uaWNhbCl9LHIucHJvdG90eXBlLmxvYWRUaWxlPWZ1bmN0aW9uKGUscil7dmFyIG49dGhpcyxpPWsoZS50aWxlSUQuY2Fub25pY2FsLnVybCh0aGlzLnRpbGVzLHRoaXMuc2NoZW1lKSx0aGlzLnVybCx0aGlzLnRpbGVTaXplKTtlLnJlcXVlc3Q9dC5nZXRJbWFnZSh0aGlzLm1hcC5fdHJhbnNmb3JtUmVxdWVzdChpLHQuUmVzb3VyY2VUeXBlLlRpbGUpLGZ1bmN0aW9uKHQsaSl7aWYoZGVsZXRlIGUucmVxdWVzdCxlLmFib3J0ZWQpZS5zdGF0ZT0idW5sb2FkZWQiLHIobnVsbCk7ZWxzZSBpZih0KWUuc3RhdGU9ImVycm9yZWQiLHIodCk7ZWxzZSBpZihpKXtuLm1hcC5fcmVmcmVzaEV4cGlyZWRUaWxlcyYmZS5zZXRFeHBpcnlEYXRhKGkpLGRlbGV0ZSBpLmNhY2hlQ29udHJvbCxkZWxldGUgaS5leHBpcmVzO3ZhciBhPW4ubWFwLnBhaW50ZXIuY29udGV4dCxvPWEuZ2w7ZS50ZXh0dXJlPW4ubWFwLnBhaW50ZXIuZ2V0VGlsZVRleHR1cmUoaS53aWR0aCksZS50ZXh0dXJlP2UudGV4dHVyZS51cGRhdGUoaSx7dXNlTWlwbWFwOiEwfSk6KGUudGV4dHVyZT1uZXcgeihhLGksby5SR0JBLHt1c2VNaXBtYXA6ITB9KSxlLnRleHR1cmUuYmluZChvLkxJTkVBUixvLkNMQU1QX1RPX0VER0Usby5MSU5FQVJfTUlQTUFQX05FQVJFU1QpLGEuZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljJiZvLnRleFBhcmFtZXRlcmYoby5URVhUVVJFXzJELGEuZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljLlRFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhULGEuZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljTWF4KSksZS5zdGF0ZT0ibG9hZGVkIixyKG51bGwpfX0pfSxyLnByb3RvdHlwZS5hYm9ydFRpbGU9ZnVuY3Rpb24odCxlKXt0LnJlcXVlc3QmJih0LnJlcXVlc3QuYWJvcnQoKSxkZWxldGUgdC5yZXF1ZXN0KSxlKCl9LHIucHJvdG90eXBlLnVubG9hZFRpbGU9ZnVuY3Rpb24odCxlKXt0LnRleHR1cmUmJnRoaXMubWFwLnBhaW50ZXIuc2F2ZVRpbGVUZXh0dXJlKHQudGV4dHVyZSksZSgpfSxyLnByb3RvdHlwZS5oYXNUcmFuc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuITF9LHJ9KHQuRXZlbnRlZCksJD1mdW5jdGlvbihlKXtmdW5jdGlvbiByKHIsbixpLGEpe2UuY2FsbCh0aGlzLHIsbixpLGEpLHRoaXMudHlwZT0icmFzdGVyLWRlbSIsdGhpcy5tYXh6b29tPTIyLHRoaXMuX29wdGlvbnM9dC5leHRlbmQoe30sbiksdGhpcy5lbmNvZGluZz1uLmVuY29kaW5nfHwibWFwYm94In1yZXR1cm4gZSYmKHIuX19wcm90b19fPWUpLHIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLHIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXIsci5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6InJhc3Rlci1kZW0iLHVybDp0aGlzLnVybCx0aWxlU2l6ZTp0aGlzLnRpbGVTaXplLHRpbGVzOnRoaXMudGlsZXMsYm91bmRzOnRoaXMuYm91bmRzLGVuY29kaW5nOnRoaXMuZW5jb2Rpbmd9fSxyLnByb3RvdHlwZS5sb2FkVGlsZT1mdW5jdGlvbihlLHIpe3ZhciBuPWsoZS50aWxlSUQuY2Fub25pY2FsLnVybCh0aGlzLnRpbGVzLHRoaXMuc2NoZW1lKSx0aGlzLnVybCx0aGlzLnRpbGVTaXplKTtlLnJlcXVlc3Q9dC5nZXRJbWFnZSh0aGlzLm1hcC5fdHJhbnNmb3JtUmVxdWVzdChuLHQuUmVzb3VyY2VUeXBlLlRpbGUpLGZ1bmN0aW9uKHQsbil7aWYoZGVsZXRlIGUucmVxdWVzdCxlLmFib3J0ZWQpZS5zdGF0ZT0idW5sb2FkZWQiLHIobnVsbCk7ZWxzZSBpZih0KWUuc3RhdGU9ImVycm9yZWQiLHIodCk7ZWxzZSBpZihuKXt0aGlzLm1hcC5fcmVmcmVzaEV4cGlyZWRUaWxlcyYmZS5zZXRFeHBpcnlEYXRhKG4pLGRlbGV0ZSBuLmNhY2hlQ29udHJvbCxkZWxldGUgbi5leHBpcmVzO3ZhciBpPWEuZ2V0SW1hZ2VEYXRhKG4pLG89e3VpZDplLnVpZCxjb29yZDplLnRpbGVJRCxzb3VyY2U6dGhpcy5pZCxyYXdJbWFnZURhdGE6aSxlbmNvZGluZzp0aGlzLmVuY29kaW5nfTtlLndvcmtlcklEJiYiZXhwaXJlZCIhPT1lLnN0YXRlfHwoZS53b3JrZXJJRD10aGlzLmRpc3BhdGNoZXIuc2VuZCgibG9hZERFTVRpbGUiLG8sZnVuY3Rpb24odCxuKXt0JiYoZS5zdGF0ZT0iZXJyb3JlZCIscih0KSksbiYmKGUuZGVtPW4sZS5uZWVkc0hpbGxzaGFkZVByZXBhcmU9ITAsZS5zdGF0ZT0ibG9hZGVkIixyKG51bGwpKX0uYmluZCh0aGlzKSkpfX0uYmluZCh0aGlzKSksZS5uZWlnaGJvcmluZ1RpbGVzPXRoaXMuX2dldE5laWdoYm9yaW5nVGlsZXMoZS50aWxlSUQpfSxyLnByb3RvdHlwZS5fZ2V0TmVpZ2hib3JpbmdUaWxlcz1mdW5jdGlvbihlKXt2YXIgcj1lLmNhbm9uaWNhbCxuPU1hdGgucG93KDIsci56KSxpPShyLngtMStuKSVuLGE9MD09PXIueD9lLndyYXAtMTplLndyYXAsbz0oci54KzErbiklbixzPXIueCsxPT09bj9lLndyYXArMTplLndyYXAsbD17fTtyZXR1cm4gbFtuZXcgdC5PdmVyc2NhbGVkVGlsZUlEKGUub3ZlcnNjYWxlZFosYSxyLnosaSxyLnkpLmtleV09e2JhY2tmaWxsZWQ6ITF9LGxbbmV3IHQuT3ZlcnNjYWxlZFRpbGVJRChlLm92ZXJzY2FsZWRaLHMsci56LG8sci55KS5rZXldPXtiYWNrZmlsbGVkOiExfSxyLnk+MCYmKGxbbmV3IHQuT3ZlcnNjYWxlZFRpbGVJRChlLm92ZXJzY2FsZWRaLGEsci56LGksci55LTEpLmtleV09e2JhY2tmaWxsZWQ6ITF9LGxbbmV3IHQuT3ZlcnNjYWxlZFRpbGVJRChlLm92ZXJzY2FsZWRaLGUud3JhcCxyLnosci54LHIueS0xKS5rZXldPXtiYWNrZmlsbGVkOiExfSxsW25ldyB0Lk92ZXJzY2FsZWRUaWxlSUQoZS5vdmVyc2NhbGVkWixzLHIueixvLHIueS0xKS5rZXldPXtiYWNrZmlsbGVkOiExfSksci55KzE8biYmKGxbbmV3IHQuT3ZlcnNjYWxlZFRpbGVJRChlLm92ZXJzY2FsZWRaLGEsci56LGksci55KzEpLmtleV09e2JhY2tmaWxsZWQ6ITF9LGxbbmV3IHQuT3ZlcnNjYWxlZFRpbGVJRChlLm92ZXJzY2FsZWRaLGUud3JhcCxyLnosci54LHIueSsxKS5rZXldPXtiYWNrZmlsbGVkOiExfSxsW25ldyB0Lk92ZXJzY2FsZWRUaWxlSUQoZS5vdmVyc2NhbGVkWixzLHIueixvLHIueSsxKS5rZXldPXtiYWNrZmlsbGVkOiExfSksbH0sci5wcm90b3R5cGUudW5sb2FkVGlsZT1mdW5jdGlvbih0KXt0LmRlbVRleHR1cmUmJnRoaXMubWFwLnBhaW50ZXIuc2F2ZVRpbGVUZXh0dXJlKHQuZGVtVGV4dHVyZSksdC5mYm8mJih0LmZiby5kZXN0cm95KCksZGVsZXRlIHQuZmJvKSx0LmRlbSYmZGVsZXRlIHQuZGVtLGRlbGV0ZSB0Lm5laWdoYm9yaW5nVGlsZXMsdC5zdGF0ZT0idW5sb2FkZWQiLHRoaXMuZGlzcGF0Y2hlci5zZW5kKCJyZW1vdmVERU1UaWxlIix7dWlkOnQudWlkLHNvdXJjZTp0aGlzLmlkfSx2b2lkIDAsdC53b3JrZXJJRCl9LHJ9KFopLEo9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihyLG4saSxhKXtlLmNhbGwodGhpcyksdGhpcy5pZD1yLHRoaXMudHlwZT0iZ2VvanNvbiIsdGhpcy5taW56b29tPTAsdGhpcy5tYXh6b29tPTE4LHRoaXMudGlsZVNpemU9NTEyLHRoaXMuaXNUaWxlQ2xpcHBlZD0hMCx0aGlzLnJlcGFyc2VPdmVyc2NhbGVkPSEwLHRoaXMuX3JlbW92ZWQ9ITEsdGhpcy5kaXNwYXRjaGVyPWksdGhpcy5zZXRFdmVudGVkUGFyZW50KGEpLHRoaXMuX2RhdGE9bi5kYXRhLHRoaXMuX29wdGlvbnM9dC5leHRlbmQoe30sbiksdGhpcy5fY29sbGVjdFJlc291cmNlVGltaW5nPW4uY29sbGVjdFJlc291cmNlVGltaW5nLHRoaXMuX3Jlc291cmNlVGltaW5nPVtdLHZvaWQgMCE9PW4ubWF4em9vbSYmKHRoaXMubWF4em9vbT1uLm1heHpvb20pLG4udHlwZSYmKHRoaXMudHlwZT1uLnR5cGUpO3ZhciBvPXQuZGVmYXVsdCQ4L3RoaXMudGlsZVNpemU7dGhpcy53b3JrZXJPcHRpb25zPXQuZXh0ZW5kKHtzb3VyY2U6dGhpcy5pZCxjbHVzdGVyOm4uY2x1c3Rlcnx8ITEsZ2VvanNvblZ0T3B0aW9uczp7YnVmZmVyOih2b2lkIDAhPT1uLmJ1ZmZlcj9uLmJ1ZmZlcjoxMjgpKm8sdG9sZXJhbmNlOih2b2lkIDAhPT1uLnRvbGVyYW5jZT9uLnRvbGVyYW5jZTouMzc1KSpvLGV4dGVudDp0LmRlZmF1bHQkOCxtYXhab29tOnRoaXMubWF4em9vbSxsaW5lTWV0cmljczpuLmxpbmVNZXRyaWNzfHwhMX0sc3VwZXJjbHVzdGVyT3B0aW9uczp7bWF4Wm9vbTp2b2lkIDAhPT1uLmNsdXN0ZXJNYXhab29tP01hdGgubWluKG4uY2x1c3Rlck1heFpvb20sdGhpcy5tYXh6b29tLTEpOnRoaXMubWF4em9vbS0xLGV4dGVudDp0LmRlZmF1bHQkOCxyYWRpdXM6KG4uY2x1c3RlclJhZGl1c3x8NTApKm8sbG9nOiExfX0sbi53b3JrZXJPcHRpb25zKX1yZXR1cm4gZSYmKHIuX19wcm90b19fPWUpLHIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLHIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXIsci5wcm90b3R5cGUubG9hZD1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5maXJlKG5ldyB0LkV2ZW50KCJkYXRhbG9hZGluZyIse2RhdGFUeXBlOiJzb3VyY2UifSkpLHRoaXMuX3VwZGF0ZVdvcmtlckRhdGEoZnVuY3Rpb24ocil7aWYocillLmZpcmUobmV3IHQuRXJyb3JFdmVudChyKSk7ZWxzZXt2YXIgbj17ZGF0YVR5cGU6InNvdXJjZSIsc291cmNlRGF0YVR5cGU6Im1ldGFkYXRhIn07ZS5fY29sbGVjdFJlc291cmNlVGltaW5nJiZlLl9yZXNvdXJjZVRpbWluZyYmZS5fcmVzb3VyY2VUaW1pbmcubGVuZ3RoPjAmJihuLnJlc291cmNlVGltaW5nPWUuX3Jlc291cmNlVGltaW5nLGUuX3Jlc291cmNlVGltaW5nPVtdKSxlLmZpcmUobmV3IHQuRXZlbnQoImRhdGEiLG4pKX19KX0sci5wcm90b3R5cGUub25BZGQ9ZnVuY3Rpb24odCl7dGhpcy5tYXA9dCx0aGlzLmxvYWQoKX0sci5wcm90b3R5cGUuc2V0RGF0YT1mdW5jdGlvbihlKXt2YXIgcj10aGlzO3JldHVybiB0aGlzLl9kYXRhPWUsdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJkYXRhbG9hZGluZyIse2RhdGFUeXBlOiJzb3VyY2UifSkpLHRoaXMuX3VwZGF0ZVdvcmtlckRhdGEoZnVuY3Rpb24oZSl7aWYoZSlyZXR1cm4gci5maXJlKG5ldyB0LkVycm9yRXZlbnQoZSkpO3ZhciBuPXtkYXRhVHlwZToic291cmNlIixzb3VyY2VEYXRhVHlwZToiY29udGVudCJ9O3IuX2NvbGxlY3RSZXNvdXJjZVRpbWluZyYmci5fcmVzb3VyY2VUaW1pbmcmJnIuX3Jlc291cmNlVGltaW5nLmxlbmd0aD4wJiYobi5yZXNvdXJjZVRpbWluZz1yLl9yZXNvdXJjZVRpbWluZyxyLl9yZXNvdXJjZVRpbWluZz1bXSksci5maXJlKG5ldyB0LkV2ZW50KCJkYXRhIixuKSl9KSx0aGlzfSxyLnByb3RvdHlwZS5fdXBkYXRlV29ya2VyRGF0YT1mdW5jdGlvbihlKXt2YXIgcixuLGk9dGhpcyxhPXQuZXh0ZW5kKHt9LHRoaXMud29ya2VyT3B0aW9ucyksbz10aGlzLl9kYXRhOyJzdHJpbmciPT10eXBlb2Ygbz8oYS5yZXF1ZXN0PXRoaXMubWFwLl90cmFuc2Zvcm1SZXF1ZXN0KChyPW8sKG49dC5kZWZhdWx0LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSkuaHJlZj1yLG4uaHJlZiksdC5SZXNvdXJjZVR5cGUuU291cmNlKSxhLnJlcXVlc3QuY29sbGVjdFJlc291cmNlVGltaW5nPXRoaXMuX2NvbGxlY3RSZXNvdXJjZVRpbWluZyk6YS5kYXRhPUpTT04uc3RyaW5naWZ5KG8pLHRoaXMud29ya2VySUQ9dGhpcy5kaXNwYXRjaGVyLnNlbmQodGhpcy50eXBlKyIuIithLnNvdXJjZSsiLmxvYWREYXRhIixhLGZ1bmN0aW9uKHQscil7aS5fcmVtb3ZlZHx8ciYmci5hYmFuZG9uZWR8fChpLl9sb2FkZWQ9ITAsciYmci5yZXNvdXJjZVRpbWluZyYmci5yZXNvdXJjZVRpbWluZ1tpLmlkXSYmKGkuX3Jlc291cmNlVGltaW5nPXIucmVzb3VyY2VUaW1pbmdbaS5pZF0uc2xpY2UoMCkpLGkuZGlzcGF0Y2hlci5zZW5kKGkudHlwZSsiLiIrYS5zb3VyY2UrIi5jb2FsZXNjZSIsbnVsbCxudWxsLGkud29ya2VySUQpLGUodCkpfSx0aGlzLndvcmtlcklEKX0sci5wcm90b3R5cGUubG9hZFRpbGU9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLG49dm9pZCAwPT09dC53b3JrZXJJRD8ibG9hZFRpbGUiOiJyZWxvYWRUaWxlIixpPXt0eXBlOnRoaXMudHlwZSx1aWQ6dC51aWQsdGlsZUlEOnQudGlsZUlELHpvb206dC50aWxlSUQub3ZlcnNjYWxlZFosbWF4Wm9vbTp0aGlzLm1heHpvb20sdGlsZVNpemU6dGhpcy50aWxlU2l6ZSxzb3VyY2U6dGhpcy5pZCxwaXhlbFJhdGlvOmEuZGV2aWNlUGl4ZWxSYXRpbyxzaG93Q29sbGlzaW9uQm94ZXM6dGhpcy5tYXAuc2hvd0NvbGxpc2lvbkJveGVzfTt0LndvcmtlcklEPXRoaXMuZGlzcGF0Y2hlci5zZW5kKG4saSxmdW5jdGlvbihpLGEpe3JldHVybiB0LnVubG9hZFZlY3RvckRhdGEoKSx0LmFib3J0ZWQ/ZShudWxsKTppP2UoaSk6KHQubG9hZFZlY3RvckRhdGEoYSxyLm1hcC5wYWludGVyLCJyZWxvYWRUaWxlIj09PW4pLGUobnVsbCkpfSx0aGlzLndvcmtlcklEKX0sci5wcm90b3R5cGUuYWJvcnRUaWxlPWZ1bmN0aW9uKHQpe3QuYWJvcnRlZD0hMH0sci5wcm90b3R5cGUudW5sb2FkVGlsZT1mdW5jdGlvbih0KXt0LnVubG9hZFZlY3RvckRhdGEoKSx0aGlzLmRpc3BhdGNoZXIuc2VuZCgicmVtb3ZlVGlsZSIse3VpZDp0LnVpZCx0eXBlOnRoaXMudHlwZSxzb3VyY2U6dGhpcy5pZH0sbnVsbCx0LndvcmtlcklEKX0sci5wcm90b3R5cGUub25SZW1vdmU9ZnVuY3Rpb24oKXt0aGlzLl9yZW1vdmVkPSEwLHRoaXMuZGlzcGF0Y2hlci5zZW5kKCJyZW1vdmVTb3VyY2UiLHt0eXBlOnRoaXMudHlwZSxzb3VyY2U6dGhpcy5pZH0sbnVsbCx0aGlzLndvcmtlcklEKX0sci5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHQuZXh0ZW5kKHt9LHRoaXMuX29wdGlvbnMse3R5cGU6dGhpcy50eXBlLGRhdGE6dGhpcy5fZGF0YX0pfSxyLnByb3RvdHlwZS5oYXNUcmFuc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuITF9LHJ9KHQuRXZlbnRlZCksSz10LmNyZWF0ZUxheW91dChbe25hbWU6ImFfcG9zIix0eXBlOiJJbnQxNiIsY29tcG9uZW50czoyfSx7bmFtZToiYV90ZXh0dXJlX3BvcyIsdHlwZToiSW50MTYiLGNvbXBvbmVudHM6Mn1dKSxRPWZ1bmN0aW9uKCl7dGhpcy5ib3VuZFByb2dyYW09bnVsbCx0aGlzLmJvdW5kTGF5b3V0VmVydGV4QnVmZmVyPW51bGwsdGhpcy5ib3VuZFBhaW50VmVydGV4QnVmZmVycz1bXSx0aGlzLmJvdW5kSW5kZXhCdWZmZXI9bnVsbCx0aGlzLmJvdW5kVmVydGV4T2Zmc2V0PW51bGwsdGhpcy5ib3VuZER5bmFtaWNWZXJ0ZXhCdWZmZXI9bnVsbCx0aGlzLnZhbz1udWxsfTtRLnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyl7dGhpcy5jb250ZXh0PXQ7Zm9yKHZhciBsPXRoaXMuYm91bmRQYWludFZlcnRleEJ1ZmZlcnMubGVuZ3RoIT09bi5sZW5ndGgsYz0wOyFsJiZjPG4ubGVuZ3RoO2MrKyl0aGlzLmJvdW5kUGFpbnRWZXJ0ZXhCdWZmZXJzW2NdIT09bltjXSYmKGw9ITApO3ZhciB1PSF0aGlzLnZhb3x8dGhpcy5ib3VuZFByb2dyYW0hPT1lfHx0aGlzLmJvdW5kTGF5b3V0VmVydGV4QnVmZmVyIT09cnx8bHx8dGhpcy5ib3VuZEluZGV4QnVmZmVyIT09aXx8dGhpcy5ib3VuZFZlcnRleE9mZnNldCE9PWF8fHRoaXMuYm91bmREeW5hbWljVmVydGV4QnVmZmVyIT09b3x8dGhpcy5ib3VuZER5bmFtaWNWZXJ0ZXhCdWZmZXIyIT09czshdC5leHRWZXJ0ZXhBcnJheU9iamVjdHx8dT90aGlzLmZyZXNoQmluZChlLHIsbixpLGEsbyxzKToodC5iaW5kVmVydGV4QXJyYXlPRVMuc2V0KHRoaXMudmFvKSxvJiZvLmJpbmQoKSxpJiZpLmR5bmFtaWNEcmF3JiZpLmJpbmQoKSxzJiZzLmJpbmQoKSl9LFEucHJvdG90eXBlLmZyZXNoQmluZD1mdW5jdGlvbih0LGUscixuLGksYSxvKXt2YXIgcyxsPXQubnVtQXR0cmlidXRlcyxjPXRoaXMuY29udGV4dCx1PWMuZ2w7aWYoYy5leHRWZXJ0ZXhBcnJheU9iamVjdCl0aGlzLnZhbyYmdGhpcy5kZXN0cm95KCksdGhpcy52YW89Yy5leHRWZXJ0ZXhBcnJheU9iamVjdC5jcmVhdGVWZXJ0ZXhBcnJheU9FUygpLGMuYmluZFZlcnRleEFycmF5T0VTLnNldCh0aGlzLnZhbykscz0wLHRoaXMuYm91bmRQcm9ncmFtPXQsdGhpcy5ib3VuZExheW91dFZlcnRleEJ1ZmZlcj1lLHRoaXMuYm91bmRQYWludFZlcnRleEJ1ZmZlcnM9cix0aGlzLmJvdW5kSW5kZXhCdWZmZXI9bix0aGlzLmJvdW5kVmVydGV4T2Zmc2V0PWksdGhpcy5ib3VuZER5bmFtaWNWZXJ0ZXhCdWZmZXI9YSx0aGlzLmJvdW5kRHluYW1pY1ZlcnRleEJ1ZmZlcjI9bztlbHNle3M9Yy5jdXJyZW50TnVtQXR0cmlidXRlc3x8MDtmb3IodmFyIGg9bDtoPHM7aCsrKXUuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGgpfWUuZW5hYmxlQXR0cmlidXRlcyh1LHQpO2Zvcih2YXIgZj0wLHA9cjtmPHAubGVuZ3RoO2YrPTEpcFtmXS5lbmFibGVBdHRyaWJ1dGVzKHUsdCk7YSYmYS5lbmFibGVBdHRyaWJ1dGVzKHUsdCksbyYmby5lbmFibGVBdHRyaWJ1dGVzKHUsdCksZS5iaW5kKCksZS5zZXRWZXJ0ZXhBdHRyaWJQb2ludGVycyh1LHQsaSk7Zm9yKHZhciBkPTAsZz1yO2Q8Zy5sZW5ndGg7ZCs9MSl7dmFyIG09Z1tkXTttLmJpbmQoKSxtLnNldFZlcnRleEF0dHJpYlBvaW50ZXJzKHUsdCxpKX1hJiYoYS5iaW5kKCksYS5zZXRWZXJ0ZXhBdHRyaWJQb2ludGVycyh1LHQsaSkpLG4mJm4uYmluZCgpLG8mJihvLmJpbmQoKSxvLnNldFZlcnRleEF0dHJpYlBvaW50ZXJzKHUsdCxpKSksYy5jdXJyZW50TnVtQXR0cmlidXRlcz1sfSxRLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy52YW8mJih0aGlzLmNvbnRleHQuZXh0VmVydGV4QXJyYXlPYmplY3QuZGVsZXRlVmVydGV4QXJyYXlPRVModGhpcy52YW8pLHRoaXMudmFvPW51bGwpfTt2YXIgdHQ9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcih0LHIsbixpKXtlLmNhbGwodGhpcyksdGhpcy5pZD10LHRoaXMuZGlzcGF0Y2hlcj1uLHRoaXMuY29vcmRpbmF0ZXM9ci5jb29yZGluYXRlcyx0aGlzLnR5cGU9ImltYWdlIix0aGlzLm1pbnpvb209MCx0aGlzLm1heHpvb209MjIsdGhpcy50aWxlU2l6ZT01MTIsdGhpcy50aWxlcz17fSx0aGlzLnNldEV2ZW50ZWRQYXJlbnQoaSksdGhpcy5vcHRpb25zPXJ9cmV0dXJuIGUmJihyLl9fcHJvdG9fXz1lKSxyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSxyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yLHIucHJvdG90eXBlLmxvYWQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuZmlyZShuZXcgdC5FdmVudCgiZGF0YWxvYWRpbmciLHtkYXRhVHlwZToic291cmNlIn0pKSx0aGlzLnVybD10aGlzLm9wdGlvbnMudXJsLHQuZ2V0SW1hZ2UodGhpcy5tYXAuX3RyYW5zZm9ybVJlcXVlc3QodGhpcy51cmwsdC5SZXNvdXJjZVR5cGUuSW1hZ2UpLGZ1bmN0aW9uKHIsbil7cj9lLmZpcmUobmV3IHQuRXJyb3JFdmVudChyKSk6biYmKGUuaW1hZ2U9YS5nZXRJbWFnZURhdGEobiksZS5fZmluaXNoTG9hZGluZygpKX0pfSxyLnByb3RvdHlwZS5fZmluaXNoTG9hZGluZz1mdW5jdGlvbigpe3RoaXMubWFwJiYodGhpcy5zZXRDb29yZGluYXRlcyh0aGlzLmNvb3JkaW5hdGVzKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoImRhdGEiLHtkYXRhVHlwZToic291cmNlIixzb3VyY2VEYXRhVHlwZToibWV0YWRhdGEifSkpKX0sci5wcm90b3R5cGUub25BZGQ9ZnVuY3Rpb24odCl7dGhpcy5tYXA9dCx0aGlzLmxvYWQoKX0sci5wcm90b3R5cGUuc2V0Q29vcmRpbmF0ZXM9ZnVuY3Rpb24oZSl7dGhpcy5jb29yZGluYXRlcz1lO3ZhciByPXRoaXMubWFwLG49ZS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHIudHJhbnNmb3JtLmxvY2F0aW9uQ29vcmRpbmF0ZShHLmNvbnZlcnQodCkpLnpvb21UbygwKX0pLGk9dGhpcy5jZW50ZXJDb29yZD10LmdldENvb3JkaW5hdGVzQ2VudGVyKG4pO2kuY29sdW1uPU1hdGguZmxvb3IoaS5jb2x1bW4pLGkucm93PU1hdGguZmxvb3IoaS5yb3cpLHRoaXMudGlsZUlEPW5ldyB0LkNhbm9uaWNhbFRpbGVJRChpLnpvb20saS5jb2x1bW4saS5yb3cpLHRoaXMubWluem9vbT10aGlzLm1heHpvb209aS56b29tO3ZhciBhPW4ubWFwKGZ1bmN0aW9uKGUpe3ZhciByPWUuem9vbVRvKGkuem9vbSk7cmV0dXJuIG5ldyB0LmRlZmF1bHQkMShNYXRoLnJvdW5kKChyLmNvbHVtbi1pLmNvbHVtbikqdC5kZWZhdWx0JDgpLE1hdGgucm91bmQoKHIucm93LWkucm93KSp0LmRlZmF1bHQkOCkpfSk7cmV0dXJuIHRoaXMuX2JvdW5kc0FycmF5PW5ldyB0LlJhc3RlckJvdW5kc0FycmF5LHRoaXMuX2JvdW5kc0FycmF5LmVtcGxhY2VCYWNrKGFbMF0ueCxhWzBdLnksMCwwKSx0aGlzLl9ib3VuZHNBcnJheS5lbXBsYWNlQmFjayhhWzFdLngsYVsxXS55LHQuZGVmYXVsdCQ4LDApLHRoaXMuX2JvdW5kc0FycmF5LmVtcGxhY2VCYWNrKGFbM10ueCxhWzNdLnksMCx0LmRlZmF1bHQkOCksdGhpcy5fYm91bmRzQXJyYXkuZW1wbGFjZUJhY2soYVsyXS54LGFbMl0ueSx0LmRlZmF1bHQkOCx0LmRlZmF1bHQkOCksdGhpcy5ib3VuZHNCdWZmZXImJih0aGlzLmJvdW5kc0J1ZmZlci5kZXN0cm95KCksZGVsZXRlIHRoaXMuYm91bmRzQnVmZmVyKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoImRhdGEiLHtkYXRhVHlwZToic291cmNlIixzb3VyY2VEYXRhVHlwZToiY29udGVudCJ9KSksdGhpc30sci5wcm90b3R5cGUucHJlcGFyZT1mdW5jdGlvbigpe2lmKDAhPT1PYmplY3Qua2V5cyh0aGlzLnRpbGVzKS5sZW5ndGgmJnRoaXMuaW1hZ2Upe3ZhciB0PXRoaXMubWFwLnBhaW50ZXIuY29udGV4dCxlPXQuZ2w7Zm9yKHZhciByIGluIHRoaXMuYm91bmRzQnVmZmVyfHwodGhpcy5ib3VuZHNCdWZmZXI9dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5fYm91bmRzQXJyYXksSy5tZW1iZXJzKSksdGhpcy5ib3VuZHNWQU98fCh0aGlzLmJvdW5kc1ZBTz1uZXcgUSksdGhpcy50ZXh0dXJlfHwodGhpcy50ZXh0dXJlPW5ldyB6KHQsdGhpcy5pbWFnZSxlLlJHQkEpLHRoaXMudGV4dHVyZS5iaW5kKGUuTElORUFSLGUuQ0xBTVBfVE9fRURHRSkpLHRoaXMudGlsZXMpe3ZhciBuPXRoaXMudGlsZXNbcl07ImxvYWRlZCIhPT1uLnN0YXRlJiYobi5zdGF0ZT0ibG9hZGVkIixuLnRleHR1cmU9dGhpcy50ZXh0dXJlKX19fSxyLnByb3RvdHlwZS5sb2FkVGlsZT1mdW5jdGlvbih0LGUpe3RoaXMudGlsZUlEJiZ0aGlzLnRpbGVJRC5lcXVhbHModC50aWxlSUQuY2Fub25pY2FsKT8odGhpcy50aWxlc1tTdHJpbmcodC50aWxlSUQud3JhcCldPXQsdC5idWNrZXRzPXt9LGUobnVsbCkpOih0LnN0YXRlPSJlcnJvcmVkIixlKG51bGwpKX0sci5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6ImltYWdlIix1cmw6dGhpcy5vcHRpb25zLnVybCxjb29yZGluYXRlczp0aGlzLmNvb3JkaW5hdGVzfX0sci5wcm90b3R5cGUuaGFzVHJhbnNpdGlvbj1mdW5jdGlvbigpe3JldHVybiExfSxyfSh0LkV2ZW50ZWQpLGV0PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIodCxyLG4saSl7ZS5jYWxsKHRoaXMsdCxyLG4saSksdGhpcy5yb3VuZFpvb209ITAsdGhpcy50eXBlPSJ2aWRlbyIsdGhpcy5vcHRpb25zPXJ9cmV0dXJuIGUmJihyLl9fcHJvdG9fXz1lKSxyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSxyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yLHIucHJvdG90eXBlLmxvYWQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHI9dGhpcy5vcHRpb25zO3RoaXMudXJscz1bXTtmb3IodmFyIG49MCxpPXIudXJscztuPGkubGVuZ3RoO24rPTEpe3ZhciBhPWlbbl07ZS51cmxzLnB1c2goZS5tYXAuX3RyYW5zZm9ybVJlcXVlc3QoYSx0LlJlc291cmNlVHlwZS5Tb3VyY2UpLnVybCl9dC5nZXRWaWRlbyh0aGlzLnVybHMsZnVuY3Rpb24ocixuKXtyP2UuZmlyZShuZXcgdC5FcnJvckV2ZW50KHIpKTpuJiYoZS52aWRlbz1uLGUudmlkZW8ubG9vcD0hMCxlLnZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoInBsYXlpbmciLGZ1bmN0aW9uKCl7ZS5tYXAuX3JlcmVuZGVyKCl9KSxlLm1hcCYmZS52aWRlby5wbGF5KCksZS5fZmluaXNoTG9hZGluZygpKX0pfSxyLnByb3RvdHlwZS5nZXRWaWRlbz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnZpZGVvfSxyLnByb3RvdHlwZS5vbkFkZD1mdW5jdGlvbih0KXt0aGlzLm1hcHx8KHRoaXMubWFwPXQsdGhpcy5sb2FkKCksdGhpcy52aWRlbyYmKHRoaXMudmlkZW8ucGxheSgpLHRoaXMuc2V0Q29vcmRpbmF0ZXModGhpcy5jb29yZGluYXRlcykpKX0sci5wcm90b3R5cGUucHJlcGFyZT1mdW5jdGlvbigpe2lmKCEoMD09PU9iamVjdC5rZXlzKHRoaXMudGlsZXMpLmxlbmd0aHx8dGhpcy52aWRlby5yZWFkeVN0YXRlPDIpKXt2YXIgdD10aGlzLm1hcC5wYWludGVyLmNvbnRleHQsZT10LmdsO2Zvcih2YXIgciBpbiB0aGlzLmJvdW5kc0J1ZmZlcnx8KHRoaXMuYm91bmRzQnVmZmVyPXQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMuX2JvdW5kc0FycmF5LEsubWVtYmVycykpLHRoaXMuYm91bmRzVkFPfHwodGhpcy5ib3VuZHNWQU89bmV3IFEpLHRoaXMudGV4dHVyZT90aGlzLnZpZGVvLnBhdXNlZHx8KHRoaXMudGV4dHVyZS5iaW5kKGUuTElORUFSLGUuQ0xBTVBfVE9fRURHRSksZS50ZXhTdWJJbWFnZTJEKGUuVEVYVFVSRV8yRCwwLDAsMCxlLlJHQkEsZS5VTlNJR05FRF9CWVRFLHRoaXMudmlkZW8pKToodGhpcy50ZXh0dXJlPW5ldyB6KHQsdGhpcy52aWRlbyxlLlJHQkEpLHRoaXMudGV4dHVyZS5iaW5kKGUuTElORUFSLGUuQ0xBTVBfVE9fRURHRSkpLHRoaXMudGlsZXMpe3ZhciBuPXRoaXMudGlsZXNbcl07ImxvYWRlZCIhPT1uLnN0YXRlJiYobi5zdGF0ZT0ibG9hZGVkIixuLnRleHR1cmU9dGhpcy50ZXh0dXJlKX19fSxyLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToidmlkZW8iLHVybHM6dGhpcy51cmxzLGNvb3JkaW5hdGVzOnRoaXMuY29vcmRpbmF0ZXN9fSxyLnByb3RvdHlwZS5oYXNUcmFuc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmlkZW8mJiF0aGlzLnZpZGVvLnBhdXNlZH0scn0odHQpLHJ0PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIocixuLGksYSl7ZS5jYWxsKHRoaXMscixuLGksYSksbi5jb29yZGluYXRlcz9BcnJheS5pc0FycmF5KG4uY29vcmRpbmF0ZXMpJiY0PT09bi5jb29yZGluYXRlcy5sZW5ndGgmJiFuLmNvb3JkaW5hdGVzLnNvbWUoZnVuY3Rpb24odCl7cmV0dXJuIUFycmF5LmlzQXJyYXkodCl8fDIhPT10Lmxlbmd0aHx8dC5zb21lKGZ1bmN0aW9uKHQpe3JldHVybiJudW1iZXIiIT10eXBlb2YgdH0pfSl8fHRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyB0LmRlZmF1bHQkOSgic291cmNlcy4iK3IsbnVsbCwnImNvb3JkaW5hdGVzIiBwcm9wZXJ0eSBtdXN0IGJlIGFuIGFycmF5IG9mIDQgbG9uZ2l0dWRlL2xhdGl0dWRlIGFycmF5IHBhaXJzJykpKTp0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgdC5kZWZhdWx0JDkoInNvdXJjZXMuIityLG51bGwsJ21pc3NpbmcgcmVxdWlyZWQgcHJvcGVydHkgImNvb3JkaW5hdGVzIicpKSksbi5hbmltYXRlJiYiYm9vbGVhbiIhPXR5cGVvZiBuLmFuaW1hdGUmJnRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyB0LmRlZmF1bHQkOSgic291cmNlcy4iK3IsbnVsbCwnb3B0aW9uYWwgImFuaW1hdGUiIHByb3BlcnR5IG11c3QgYmUgYSBib29sZWFuIHZhbHVlJykpKSxuLmNhbnZhcz8ic3RyaW5nIj09dHlwZW9mIG4uY2FudmFzfHxuLmNhbnZhcyBpbnN0YW5jZW9mIHQuZGVmYXVsdC5IVE1MQ2FudmFzRWxlbWVudHx8dGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IHQuZGVmYXVsdCQ5KCJzb3VyY2VzLiIrcixudWxsLCciY2FudmFzIiBtdXN0IGJlIGVpdGhlciBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIElEIG9mIHRoZSBjYW52YXMgZWxlbWVudCBmcm9tIHdoaWNoIHRvIHJlYWQsIG9yIGFuIEhUTUxDYW52YXNFbGVtZW50IGluc3RhbmNlJykpKTp0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgdC5kZWZhdWx0JDkoInNvdXJjZXMuIityLG51bGwsJ21pc3NpbmcgcmVxdWlyZWQgcHJvcGVydHkgImNhbnZhcyInKSkpLHRoaXMub3B0aW9ucz1uLHRoaXMuYW5pbWF0ZT12b2lkIDA9PT1uLmFuaW1hdGV8fG4uYW5pbWF0ZX1yZXR1cm4gZSYmKHIuX19wcm90b19fPWUpLHIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLHIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXIsci5wcm90b3R5cGUubG9hZD1mdW5jdGlvbigpe3RoaXMuY2FudmFzfHwodGhpcy5jYW52YXM9dGhpcy5vcHRpb25zLmNhbnZhcyBpbnN0YW5jZW9mIHQuZGVmYXVsdC5IVE1MQ2FudmFzRWxlbWVudD90aGlzLm9wdGlvbnMuY2FudmFzOnQuZGVmYXVsdC5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLm9wdGlvbnMuY2FudmFzKSksdGhpcy53aWR0aD10aGlzLmNhbnZhcy53aWR0aCx0aGlzLmhlaWdodD10aGlzLmNhbnZhcy5oZWlnaHQsdGhpcy5faGFzSW52YWxpZERpbWVuc2lvbnMoKT90aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIkNhbnZhcyBkaW1lbnNpb25zIGNhbm5vdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gemVyby4iKSkpOih0aGlzLnBsYXk9ZnVuY3Rpb24oKXt0aGlzLl9wbGF5aW5nPSEwLHRoaXMubWFwLl9yZXJlbmRlcigpfSx0aGlzLnBhdXNlPWZ1bmN0aW9uKCl7dGhpcy5fcGxheWluZz0hMX0sdGhpcy5fZmluaXNoTG9hZGluZygpKX0sci5wcm90b3R5cGUuZ2V0Q2FudmFzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2FudmFzfSxyLnByb3RvdHlwZS5vbkFkZD1mdW5jdGlvbih0KXt0aGlzLm1hcD10LHRoaXMubG9hZCgpLHRoaXMuY2FudmFzJiZ0aGlzLmFuaW1hdGUmJnRoaXMucGxheSgpfSxyLnByb3RvdHlwZS5vblJlbW92ZT1mdW5jdGlvbigpe3RoaXMucGF1c2UoKX0sci5wcm90b3R5cGUucHJlcGFyZT1mdW5jdGlvbigpe3ZhciB0PSExO2lmKHRoaXMuY2FudmFzLndpZHRoIT09dGhpcy53aWR0aCYmKHRoaXMud2lkdGg9dGhpcy5jYW52YXMud2lkdGgsdD0hMCksdGhpcy5jYW52YXMuaGVpZ2h0IT09dGhpcy5oZWlnaHQmJih0aGlzLmhlaWdodD10aGlzLmNhbnZhcy5oZWlnaHQsdD0hMCksIXRoaXMuX2hhc0ludmFsaWREaW1lbnNpb25zKCkmJjAhPT1PYmplY3Qua2V5cyh0aGlzLnRpbGVzKS5sZW5ndGgpe3ZhciBlPXRoaXMubWFwLnBhaW50ZXIuY29udGV4dCxyPWUuZ2w7Zm9yKHZhciBuIGluIHRoaXMuYm91bmRzQnVmZmVyfHwodGhpcy5ib3VuZHNCdWZmZXI9ZS5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5fYm91bmRzQXJyYXksSy5tZW1iZXJzKSksdGhpcy5ib3VuZHNWQU98fCh0aGlzLmJvdW5kc1ZBTz1uZXcgUSksdGhpcy50ZXh0dXJlP3Q/dGhpcy50ZXh0dXJlLnVwZGF0ZSh0aGlzLmNhbnZhcyk6dGhpcy5fcGxheWluZyYmKHRoaXMudGV4dHVyZS5iaW5kKHIuTElORUFSLHIuQ0xBTVBfVE9fRURHRSksci50ZXhTdWJJbWFnZTJEKHIuVEVYVFVSRV8yRCwwLDAsMCxyLlJHQkEsci5VTlNJR05FRF9CWVRFLHRoaXMuY2FudmFzKSk6KHRoaXMudGV4dHVyZT1uZXcgeihlLHRoaXMuY2FudmFzLHIuUkdCQSksdGhpcy50ZXh0dXJlLmJpbmQoci5MSU5FQVIsci5DTEFNUF9UT19FREdFKSksdGhpcy50aWxlcyl7dmFyIGk9dGhpcy50aWxlc1tuXTsibG9hZGVkIiE9PWkuc3RhdGUmJihpLnN0YXRlPSJsb2FkZWQiLGkudGV4dHVyZT10aGlzLnRleHR1cmUpfX19LHIucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJjYW52YXMiLGNvb3JkaW5hdGVzOnRoaXMuY29vcmRpbmF0ZXN9fSxyLnByb3RvdHlwZS5oYXNUcmFuc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BsYXlpbmd9LHIucHJvdG90eXBlLl9oYXNJbnZhbGlkRGltZW5zaW9ucz1mdW5jdGlvbigpe2Zvcih2YXIgdD0wLGU9W3RoaXMuY2FudmFzLndpZHRoLHRoaXMuY2FudmFzLmhlaWdodF07dDxlLmxlbmd0aDt0Kz0xKXt2YXIgcj1lW3RdO2lmKGlzTmFOKHIpfHxyPD0wKXJldHVybiEwfXJldHVybiExfSxyfSh0dCksbnQ9e3ZlY3RvcjpYLHJhc3RlcjpaLCJyYXN0ZXItZGVtIjokLGdlb2pzb246Six2aWRlbzpldCxpbWFnZTp0dCxjYW52YXM6cnR9LGl0PWZ1bmN0aW9uKGUscixuLGkpe3ZhciBhPW5ldyBudFtyLnR5cGVdKGUscixuLGkpO2lmKGEuaWQhPT1lKXRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgU291cmNlIGlkIHRvIGJlICIrZSsiIGluc3RlYWQgb2YgIithLmlkKTtyZXR1cm4gdC5iaW5kQWxsKFsibG9hZCIsImFib3J0IiwidW5sb2FkIiwic2VyaWFsaXplIiwicHJlcGFyZSJdLGEpLGF9O2Z1bmN0aW9uIGF0KHQsZSxyLG4saSl7dmFyIGE9aS5tYXhQaXRjaFNjYWxlRmFjdG9yKCksbz10LnRpbGVzSW4ocixhKTtvLnNvcnQob3QpO2Zvcih2YXIgcz1bXSxsPTAsYz1vO2w8Yy5sZW5ndGg7bCs9MSl7dmFyIHU9Y1tsXTtzLnB1c2goe3dyYXBwZWRUaWxlSUQ6dS50aWxlSUQud3JhcHBlZCgpLmtleSxxdWVyeVJlc3VsdHM6dS50aWxlLnF1ZXJ5UmVuZGVyZWRGZWF0dXJlcyhlLHUucXVlcnlHZW9tZXRyeSx1LnNjYWxlLG4saSxhLHQudHJhbnNmb3JtLmNhbGN1bGF0ZVBvc01hdHJpeCh1LnRpbGVJRC50b1Vud3JhcHBlZCgpKSl9KX1yZXR1cm4gZnVuY3Rpb24odCl7Zm9yKHZhciBlPXt9LHI9e30sbj0wLGk9dDtuPGkubGVuZ3RoO24rPTEpe3ZhciBhPWlbbl0sbz1hLnF1ZXJ5UmVzdWx0cyxzPWEud3JhcHBlZFRpbGVJRCxsPXJbc109cltzXXx8e307Zm9yKHZhciBjIGluIG8pZm9yKHZhciB1PW9bY10saD1sW2NdPWxbY118fHt9LGY9ZVtjXT1lW2NdfHxbXSxwPTAsZD11O3A8ZC5sZW5ndGg7cCs9MSl7dmFyIGc9ZFtwXTtoW2cuZmVhdHVyZUluZGV4XXx8KGhbZy5mZWF0dXJlSW5kZXhdPSEwLGYucHVzaChnLmZlYXR1cmUpKX19cmV0dXJuIGV9KHMpfWZ1bmN0aW9uIG90KHQsZSl7dmFyIHI9dC50aWxlSUQsbj1lLnRpbGVJRDtyZXR1cm4gci5vdmVyc2NhbGVkWi1uLm92ZXJzY2FsZWRafHxyLmNhbm9uaWNhbC55LW4uY2Fub25pY2FsLnl8fHIud3JhcC1uLndyYXB8fHIuY2Fub25pY2FsLngtbi5jYW5vbmljYWwueH12YXIgc3Q9ZnVuY3Rpb24oZSxyKXt0aGlzLnRpbGVJRD1lLHRoaXMudWlkPXQudW5pcXVlSWQoKSx0aGlzLnVzZXM9MCx0aGlzLnRpbGVTaXplPXIsdGhpcy5idWNrZXRzPXt9LHRoaXMuZXhwaXJhdGlvblRpbWU9bnVsbCx0aGlzLnF1ZXJ5UGFkZGluZz0wLHRoaXMuZXhwaXJlZFJlcXVlc3RDb3VudD0wLHRoaXMuc3RhdGU9ImxvYWRpbmcifTtzdC5wcm90b3R5cGUucmVnaXN0ZXJGYWRlRHVyYXRpb249ZnVuY3Rpb24odCl7dmFyIGU9dCt0aGlzLnRpbWVBZGRlZDtlPGEubm93KCl8fHRoaXMuZmFkZUVuZFRpbWUmJmU8dGhpcy5mYWRlRW5kVGltZXx8KHRoaXMuZmFkZUVuZFRpbWU9ZSl9LHN0LnByb3RvdHlwZS53YXNSZXF1ZXN0ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4iZXJyb3JlZCI9PT10aGlzLnN0YXRlfHwibG9hZGVkIj09PXRoaXMuc3RhdGV8fCJyZWxvYWRpbmciPT09dGhpcy5zdGF0ZX0sc3QucHJvdG90eXBlLmxvYWRWZWN0b3JEYXRhPWZ1bmN0aW9uKGUscixuKXtpZih0aGlzLmhhc0RhdGEoKSYmdGhpcy51bmxvYWRWZWN0b3JEYXRhKCksdGhpcy5zdGF0ZT0ibG9hZGVkIixlKXtpZihlLmZlYXR1cmVJbmRleCYmKHRoaXMubGF0ZXN0RmVhdHVyZUluZGV4PWUuZmVhdHVyZUluZGV4LGUucmF3VGlsZURhdGE/KHRoaXMubGF0ZXN0UmF3VGlsZURhdGE9ZS5yYXdUaWxlRGF0YSx0aGlzLmxhdGVzdEZlYXR1cmVJbmRleC5yYXdUaWxlRGF0YT1lLnJhd1RpbGVEYXRhKTp0aGlzLmxhdGVzdFJhd1RpbGVEYXRhJiYodGhpcy5sYXRlc3RGZWF0dXJlSW5kZXgucmF3VGlsZURhdGE9dGhpcy5sYXRlc3RSYXdUaWxlRGF0YSkpLHRoaXMuY29sbGlzaW9uQm94QXJyYXk9ZS5jb2xsaXNpb25Cb3hBcnJheSx0aGlzLmJ1Y2tldHM9ZnVuY3Rpb24odCxlKXt2YXIgcj17fTtpZighZSlyZXR1cm4gcjtmb3IodmFyIG49MCxpPXQ7bjxpLmxlbmd0aDtuKz0xKXt2YXIgYT1pW25dLG89YS5sYXllcklkcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGUuZ2V0TGF5ZXIodCl9KS5maWx0ZXIoQm9vbGVhbik7aWYoMCE9PW8ubGVuZ3RoKXthLmxheWVycz1vO2Zvcih2YXIgcz0wLGw9bztzPGwubGVuZ3RoO3MrPTEpcltsW3NdLmlkXT1hfX1yZXR1cm4gcn0oZS5idWNrZXRzLHIuc3R5bGUpLG4pZm9yKHZhciBpIGluIHRoaXMuYnVja2V0cyl7dmFyIGE9dGhpcy5idWNrZXRzW2ldO2EgaW5zdGFuY2VvZiB0LmRlZmF1bHQkMTQmJihhLmp1c3RSZWxvYWRlZD0hMCl9Zm9yKHZhciBvIGluIHRoaXMucXVlcnlQYWRkaW5nPTAsdGhpcy5idWNrZXRzKXt2YXIgcz10aGlzLmJ1Y2tldHNbb107dGhpcy5xdWVyeVBhZGRpbmc9TWF0aC5tYXgodGhpcy5xdWVyeVBhZGRpbmcsci5zdHlsZS5nZXRMYXllcihzLmxheWVySWRzWzBdKS5xdWVyeVJhZGl1cyhzKSl9ZS5pY29uQXRsYXNJbWFnZSYmKHRoaXMuaWNvbkF0bGFzSW1hZ2U9ZS5pY29uQXRsYXNJbWFnZSksZS5nbHlwaEF0bGFzSW1hZ2UmJih0aGlzLmdseXBoQXRsYXNJbWFnZT1lLmdseXBoQXRsYXNJbWFnZSl9ZWxzZSB0aGlzLmNvbGxpc2lvbkJveEFycmF5PW5ldyB0LkNvbGxpc2lvbkJveEFycmF5fSxzdC5wcm90b3R5cGUudW5sb2FkVmVjdG9yRGF0YT1mdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzLmJ1Y2tldHMpdGhpcy5idWNrZXRzW3RdLmRlc3Ryb3koKTt0aGlzLmJ1Y2tldHM9e30sdGhpcy5pY29uQXRsYXNUZXh0dXJlJiZ0aGlzLmljb25BdGxhc1RleHR1cmUuZGVzdHJveSgpLHRoaXMuZ2x5cGhBdGxhc1RleHR1cmUmJnRoaXMuZ2x5cGhBdGxhc1RleHR1cmUuZGVzdHJveSgpLHRoaXMubGF0ZXN0RmVhdHVyZUluZGV4PW51bGwsdGhpcy5zdGF0ZT0idW5sb2FkZWQifSxzdC5wcm90b3R5cGUudW5sb2FkREVNRGF0YT1mdW5jdGlvbigpe3RoaXMuZGVtPW51bGwsdGhpcy5uZWlnaGJvcmluZ1RpbGVzPW51bGwsdGhpcy5zdGF0ZT0idW5sb2FkZWQifSxzdC5wcm90b3R5cGUuZ2V0QnVja2V0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmJ1Y2tldHNbdC5pZF19LHN0LnByb3RvdHlwZS51cGxvYWQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMuYnVja2V0cyl7dmFyIHI9dGhpcy5idWNrZXRzW2VdO3IudXBsb2FkZWR8fChyLnVwbG9hZCh0KSxyLnVwbG9hZGVkPSEwKX12YXIgbj10LmdsO3RoaXMuaWNvbkF0bGFzSW1hZ2UmJih0aGlzLmljb25BdGxhc1RleHR1cmU9bmV3IHoodCx0aGlzLmljb25BdGxhc0ltYWdlLG4uUkdCQSksdGhpcy5pY29uQXRsYXNJbWFnZT1udWxsKSx0aGlzLmdseXBoQXRsYXNJbWFnZSYmKHRoaXMuZ2x5cGhBdGxhc1RleHR1cmU9bmV3IHoodCx0aGlzLmdseXBoQXRsYXNJbWFnZSxuLkFMUEhBKSx0aGlzLmdseXBoQXRsYXNJbWFnZT1udWxsKX0sc3QucHJvdG90eXBlLnF1ZXJ5UmVuZGVyZWRGZWF0dXJlcz1mdW5jdGlvbih0LGUscixuLGksYSxvKXtyZXR1cm4gdGhpcy5sYXRlc3RGZWF0dXJlSW5kZXgmJnRoaXMubGF0ZXN0RmVhdHVyZUluZGV4LnJhd1RpbGVEYXRhP3RoaXMubGF0ZXN0RmVhdHVyZUluZGV4LnF1ZXJ5KHtxdWVyeUdlb21ldHJ5OmUsc2NhbGU6cix0aWxlU2l6ZTp0aGlzLnRpbGVTaXplLHBvc01hdHJpeDpvLHRyYW5zZm9ybTppLHBhcmFtczpuLHF1ZXJ5UGFkZGluZzp0aGlzLnF1ZXJ5UGFkZGluZyphfSx0KTp7fX0sc3QucHJvdG90eXBlLnF1ZXJ5U291cmNlRmVhdHVyZXM9ZnVuY3Rpb24oZSxyKXtpZih0aGlzLmxhdGVzdEZlYXR1cmVJbmRleCYmdGhpcy5sYXRlc3RGZWF0dXJlSW5kZXgucmF3VGlsZURhdGEpe3ZhciBuPXRoaXMubGF0ZXN0RmVhdHVyZUluZGV4LmxvYWRWVExheWVycygpLGk9cj9yLnNvdXJjZUxheWVyOiIiLGE9bi5fZ2VvanNvblRpbGVMYXllcnx8bltpXTtpZihhKWZvcih2YXIgbz10LmRlZmF1bHQkMTMociYmci5maWx0ZXIpLHM9e3o6dGhpcy50aWxlSUQub3ZlcnNjYWxlZFoseDp0aGlzLnRpbGVJRC5jYW5vbmljYWwueCx5OnRoaXMudGlsZUlELmNhbm9uaWNhbC55fSxsPTA7bDxhLmxlbmd0aDtsKyspe3ZhciBjPWEuZmVhdHVyZShsKTtpZihvKG5ldyB0LmRlZmF1bHQkMTYodGhpcy50aWxlSUQub3ZlcnNjYWxlZFopLGMpKXt2YXIgdT1uZXcgdC5kZWZhdWx0JDEyKGMscy56LHMueCxzLnkpO3UudGlsZT1zLGUucHVzaCh1KX19fX0sc3QucHJvdG90eXBlLmNsZWFyTWFzaz1mdW5jdGlvbigpe3RoaXMuc2VnbWVudHMmJih0aGlzLnNlZ21lbnRzLmRlc3Ryb3koKSxkZWxldGUgdGhpcy5zZWdtZW50cyksdGhpcy5tYXNrZWRCb3VuZHNCdWZmZXImJih0aGlzLm1hc2tlZEJvdW5kc0J1ZmZlci5kZXN0cm95KCksZGVsZXRlIHRoaXMubWFza2VkQm91bmRzQnVmZmVyKSx0aGlzLm1hc2tlZEluZGV4QnVmZmVyJiYodGhpcy5tYXNrZWRJbmRleEJ1ZmZlci5kZXN0cm95KCksZGVsZXRlIHRoaXMubWFza2VkSW5kZXhCdWZmZXIpfSxzdC5wcm90b3R5cGUuc2V0TWFzaz1mdW5jdGlvbihlLHIpe2lmKCF0LmRlZmF1bHQkMTAodGhpcy5tYXNrLGUpJiYodGhpcy5tYXNrPWUsdGhpcy5jbGVhck1hc2soKSwhdC5kZWZhdWx0JDEwKGUsezA6ITB9KSkpe3ZhciBuPW5ldyB0LlJhc3RlckJvdW5kc0FycmF5LGk9bmV3IHQuVHJpYW5nbGVJbmRleEFycmF5O3RoaXMuc2VnbWVudHM9bmV3IHQuZGVmYXVsdCQxNSx0aGlzLnNlZ21lbnRzLnByZXBhcmVTZWdtZW50KDAsbixpKTtmb3IodmFyIGE9T2JqZWN0LmtleXMoZSksbz0wO288YS5sZW5ndGg7bysrKXt2YXIgcz1lW2Fbb11dLGw9dC5kZWZhdWx0JDg+PnMueixjPW5ldyB0LmRlZmF1bHQkMShzLngqbCxzLnkqbCksdT1uZXcgdC5kZWZhdWx0JDEoYy54K2wsYy55K2wpLGg9dGhpcy5zZWdtZW50cy5wcmVwYXJlU2VnbWVudCg0LG4saSk7bi5lbXBsYWNlQmFjayhjLngsYy55LGMueCxjLnkpLG4uZW1wbGFjZUJhY2sodS54LGMueSx1LngsYy55KSxuLmVtcGxhY2VCYWNrKGMueCx1LnksYy54LHUueSksbi5lbXBsYWNlQmFjayh1LngsdS55LHUueCx1LnkpO3ZhciBmPWgudmVydGV4TGVuZ3RoO2kuZW1wbGFjZUJhY2soZixmKzEsZisyKSxpLmVtcGxhY2VCYWNrKGYrMSxmKzIsZiszKSxoLnZlcnRleExlbmd0aCs9NCxoLnByaW1pdGl2ZUxlbmd0aCs9Mn10aGlzLm1hc2tlZEJvdW5kc0J1ZmZlcj1yLmNyZWF0ZVZlcnRleEJ1ZmZlcihuLEsubWVtYmVycyksdGhpcy5tYXNrZWRJbmRleEJ1ZmZlcj1yLmNyZWF0ZUluZGV4QnVmZmVyKGkpfX0sc3QucHJvdG90eXBlLmhhc0RhdGE9ZnVuY3Rpb24oKXtyZXR1cm4ibG9hZGVkIj09PXRoaXMuc3RhdGV8fCJyZWxvYWRpbmciPT09dGhpcy5zdGF0ZXx8ImV4cGlyZWQiPT09dGhpcy5zdGF0ZX0sc3QucHJvdG90eXBlLnNldEV4cGlyeURhdGE9ZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5leHBpcmF0aW9uVGltZTtpZihlLmNhY2hlQ29udHJvbCl7dmFyIG49dC5wYXJzZUNhY2hlQ29udHJvbChlLmNhY2hlQ29udHJvbCk7blsibWF4LWFnZSJdJiYodGhpcy5leHBpcmF0aW9uVGltZT1EYXRlLm5vdygpKzFlMypuWyJtYXgtYWdlIl0pfWVsc2UgZS5leHBpcmVzJiYodGhpcy5leHBpcmF0aW9uVGltZT1uZXcgRGF0ZShlLmV4cGlyZXMpLmdldFRpbWUoKSk7aWYodGhpcy5leHBpcmF0aW9uVGltZSl7dmFyIGk9RGF0ZS5ub3coKSxhPSExO2lmKHRoaXMuZXhwaXJhdGlvblRpbWU+aSlhPSExO2Vsc2UgaWYocilpZih0aGlzLmV4cGlyYXRpb25UaW1lPHIpYT0hMDtlbHNle3ZhciBvPXRoaXMuZXhwaXJhdGlvblRpbWUtcjtvP3RoaXMuZXhwaXJhdGlvblRpbWU9aStNYXRoLm1heChvLDNlNCk6YT0hMH1lbHNlIGE9ITA7YT8odGhpcy5leHBpcmVkUmVxdWVzdENvdW50KyssdGhpcy5zdGF0ZT0iZXhwaXJlZCIpOnRoaXMuZXhwaXJlZFJlcXVlc3RDb3VudD0wfX0sc3QucHJvdG90eXBlLmdldEV4cGlyeVRpbWVvdXQ9ZnVuY3Rpb24oKXtpZih0aGlzLmV4cGlyYXRpb25UaW1lKXJldHVybiB0aGlzLmV4cGlyZWRSZXF1ZXN0Q291bnQ/MWUzKigxPDxNYXRoLm1pbih0aGlzLmV4cGlyZWRSZXF1ZXN0Q291bnQtMSwzMSkpOk1hdGgubWluKHRoaXMuZXhwaXJhdGlvblRpbWUtKG5ldyBEYXRlKS5nZXRUaW1lKCksTWF0aC5wb3coMiwzMSktMSl9O3ZhciBsdD1mdW5jdGlvbih0LGUpe3RoaXMubWF4PXQsdGhpcy5vblJlbW92ZT1lLHRoaXMucmVzZXQoKX07bHQucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMuZGF0YSlmb3IodmFyIGU9MCxyPXRoaXMuZGF0YVt0XTtlPHIubGVuZ3RoO2UrPTEpe3ZhciBuPXJbZV07bi50aW1lb3V0JiZjbGVhclRpbWVvdXQobi50aW1lb3V0KSx0aGlzLm9uUmVtb3ZlKG4udmFsdWUpfXJldHVybiB0aGlzLmRhdGE9e30sdGhpcy5vcmRlcj1bXSx0aGlzfSxsdC5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLGk9dC53cmFwcGVkKCkua2V5O3ZvaWQgMD09PXRoaXMuZGF0YVtpXSYmKHRoaXMuZGF0YVtpXT1bXSk7dmFyIGE9e3ZhbHVlOmUsdGltZW91dDp2b2lkIDB9O2lmKHZvaWQgMCE9PXImJihhLnRpbWVvdXQ9c2V0VGltZW91dChmdW5jdGlvbigpe24ucmVtb3ZlKHQsYSl9LHIpKSx0aGlzLmRhdGFbaV0ucHVzaChhKSx0aGlzLm9yZGVyLnB1c2goaSksdGhpcy5vcmRlci5sZW5ndGg+dGhpcy5tYXgpe3ZhciBvPXRoaXMuX2dldEFuZFJlbW92ZUJ5S2V5KHRoaXMub3JkZXJbMF0pO28mJnRoaXMub25SZW1vdmUobyl9cmV0dXJuIHRoaXN9LGx0LnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24odCl7cmV0dXJuIHQud3JhcHBlZCgpLmtleSBpbiB0aGlzLmRhdGF9LGx0LnByb3RvdHlwZS5nZXRBbmRSZW1vdmU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaGFzKHQpP3RoaXMuX2dldEFuZFJlbW92ZUJ5S2V5KHQud3JhcHBlZCgpLmtleSk6bnVsbH0sbHQucHJvdG90eXBlLl9nZXRBbmRSZW1vdmVCeUtleT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmRhdGFbdF0uc2hpZnQoKTtyZXR1cm4gZS50aW1lb3V0JiZjbGVhclRpbWVvdXQoZS50aW1lb3V0KSwwPT09dGhpcy5kYXRhW3RdLmxlbmd0aCYmZGVsZXRlIHRoaXMuZGF0YVt0XSx0aGlzLm9yZGVyLnNwbGljZSh0aGlzLm9yZGVyLmluZGV4T2YodCksMSksZS52YWx1ZX0sbHQucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5oYXModCk/dGhpcy5kYXRhW3Qud3JhcHBlZCgpLmtleV1bMF0udmFsdWU6bnVsbH0sbHQucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbih0LGUpe2lmKCF0aGlzLmhhcyh0KSlyZXR1cm4gdGhpczt2YXIgcj10LndyYXBwZWQoKS5rZXksbj12b2lkIDA9PT1lPzA6dGhpcy5kYXRhW3JdLmluZGV4T2YoZSksaT10aGlzLmRhdGFbcl1bbl07cmV0dXJuIHRoaXMuZGF0YVtyXS5zcGxpY2UobiwxKSxpLnRpbWVvdXQmJmNsZWFyVGltZW91dChpLnRpbWVvdXQpLDA9PT10aGlzLmRhdGFbcl0ubGVuZ3RoJiZkZWxldGUgdGhpcy5kYXRhW3JdLHRoaXMub25SZW1vdmUoaS52YWx1ZSksdGhpcy5vcmRlci5zcGxpY2UodGhpcy5vcmRlci5pbmRleE9mKHIpLDEpLHRoaXN9LGx0LnByb3RvdHlwZS5zZXRNYXhTaXplPWZ1bmN0aW9uKHQpe2Zvcih0aGlzLm1heD10O3RoaXMub3JkZXIubGVuZ3RoPnRoaXMubWF4Oyl7dmFyIGU9dGhpcy5fZ2V0QW5kUmVtb3ZlQnlLZXkodGhpcy5vcmRlclswXSk7ZSYmdGhpcy5vblJlbW92ZShlKX1yZXR1cm4gdGhpc307dmFyIGN0PWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmNvbnRleHQ9dDt2YXIgbj10LmdsO3RoaXMuYnVmZmVyPW4uY3JlYXRlQnVmZmVyKCksdGhpcy5keW5hbWljRHJhdz1Cb29sZWFuKHIpLHRoaXMudW5iaW5kVkFPKCksdC5iaW5kRWxlbWVudEJ1ZmZlci5zZXQodGhpcy5idWZmZXIpLG4uYnVmZmVyRGF0YShuLkVMRU1FTlRfQVJSQVlfQlVGRkVSLGUuYXJyYXlCdWZmZXIsdGhpcy5keW5hbWljRHJhdz9uLkRZTkFNSUNfRFJBVzpuLlNUQVRJQ19EUkFXKSx0aGlzLmR5bmFtaWNEcmF3fHxkZWxldGUgZS5hcnJheUJ1ZmZlcn07Y3QucHJvdG90eXBlLnVuYmluZFZBTz1mdW5jdGlvbigpe3RoaXMuY29udGV4dC5leHRWZXJ0ZXhBcnJheU9iamVjdCYmdGhpcy5jb250ZXh0LmJpbmRWZXJ0ZXhBcnJheU9FUy5zZXQobnVsbCl9LGN0LnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKCl7dGhpcy5jb250ZXh0LmJpbmRFbGVtZW50QnVmZmVyLnNldCh0aGlzLmJ1ZmZlcil9LGN0LnByb3RvdHlwZS51cGRhdGVEYXRhPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY29udGV4dC5nbDt0aGlzLnVuYmluZFZBTygpLHRoaXMuYmluZCgpLGUuYnVmZmVyU3ViRGF0YShlLkVMRU1FTlRfQVJSQVlfQlVGRkVSLDAsdC5hcnJheUJ1ZmZlcil9LGN0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jb250ZXh0LmdsO3RoaXMuYnVmZmVyJiYodC5kZWxldGVCdWZmZXIodGhpcy5idWZmZXIpLGRlbGV0ZSB0aGlzLmJ1ZmZlcil9O3ZhciB1dD17SW50ODoiQllURSIsVWludDg6IlVOU0lHTkVEX0JZVEUiLEludDE2OiJTSE9SVCIsVWludDE2OiJVTlNJR05FRF9TSE9SVCIsSW50MzI6IklOVCIsVWludDMyOiJVTlNJR05FRF9JTlQiLEZsb2F0MzI6IkZMT0FUIn0saHQ9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5sZW5ndGg9ZS5sZW5ndGgsdGhpcy5hdHRyaWJ1dGVzPXIsdGhpcy5pdGVtU2l6ZT1lLmJ5dGVzUGVyRWxlbWVudCx0aGlzLmR5bmFtaWNEcmF3PW4sdGhpcy5jb250ZXh0PXQ7dmFyIGk9dC5nbDt0aGlzLmJ1ZmZlcj1pLmNyZWF0ZUJ1ZmZlcigpLHQuYmluZFZlcnRleEJ1ZmZlci5zZXQodGhpcy5idWZmZXIpLGkuYnVmZmVyRGF0YShpLkFSUkFZX0JVRkZFUixlLmFycmF5QnVmZmVyLHRoaXMuZHluYW1pY0RyYXc/aS5EWU5BTUlDX0RSQVc6aS5TVEFUSUNfRFJBVyksdGhpcy5keW5hbWljRHJhd3x8ZGVsZXRlIGUuYXJyYXlCdWZmZXJ9O2h0LnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKCl7dGhpcy5jb250ZXh0LmJpbmRWZXJ0ZXhCdWZmZXIuc2V0KHRoaXMuYnVmZmVyKX0saHQucHJvdG90eXBlLnVwZGF0ZURhdGE9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jb250ZXh0LmdsO3RoaXMuYmluZCgpLGUuYnVmZmVyU3ViRGF0YShlLkFSUkFZX0JVRkZFUiwwLHQuYXJyYXlCdWZmZXIpfSxodC5wcm90b3R5cGUuZW5hYmxlQXR0cmlidXRlcz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wO3I8dGhpcy5hdHRyaWJ1dGVzLmxlbmd0aDtyKyspe3ZhciBuPXRoaXMuYXR0cmlidXRlc1tyXSxpPWUuYXR0cmlidXRlc1tuLm5hbWVdO3ZvaWQgMCE9PWkmJnQuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaSl9fSxodC5wcm90b3R5cGUuc2V0VmVydGV4QXR0cmliUG9pbnRlcnM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj0wO248dGhpcy5hdHRyaWJ1dGVzLmxlbmd0aDtuKyspe3ZhciBpPXRoaXMuYXR0cmlidXRlc1tuXSxhPWUuYXR0cmlidXRlc1tpLm5hbWVdO3ZvaWQgMCE9PWEmJnQudmVydGV4QXR0cmliUG9pbnRlcihhLGkuY29tcG9uZW50cyx0W3V0W2kudHlwZV1dLCExLHRoaXMuaXRlbVNpemUsaS5vZmZzZXQrdGhpcy5pdGVtU2l6ZSoocnx8MCkpfX0saHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmNvbnRleHQuZ2w7dGhpcy5idWZmZXImJih0LmRlbGV0ZUJ1ZmZlcih0aGlzLmJ1ZmZlciksZGVsZXRlIHRoaXMuYnVmZmVyKX07dmFyIGZ0PWZ1bmN0aW9uKGUpe3RoaXMuY29udGV4dD1lLHRoaXMuY3VycmVudD10LmRlZmF1bHQkNi50cmFuc3BhcmVudH07ZnQucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnR9LGZ0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jdXJyZW50O3Qucj09PWUuciYmdC5nPT09ZS5nJiZ0LmI9PT1lLmImJnQuYT09PWUuYXx8KHRoaXMuY29udGV4dC5nbC5jbGVhckNvbG9yKHQucix0LmcsdC5iLHQuYSksdGhpcy5jdXJyZW50PXQpfTt2YXIgcHQ9ZnVuY3Rpb24odCl7dGhpcy5jb250ZXh0PXQsdGhpcy5jdXJyZW50PTF9O3B0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50fSxwdC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuY3VycmVudCE9PXQmJih0aGlzLmNvbnRleHQuZ2wuY2xlYXJEZXB0aCh0KSx0aGlzLmN1cnJlbnQ9dCl9O3ZhciBkdD1mdW5jdGlvbih0KXt0aGlzLmNvbnRleHQ9dCx0aGlzLmN1cnJlbnQ9MH07ZHQucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnR9LGR0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5jdXJyZW50IT09dCYmKHRoaXMuY29udGV4dC5nbC5jbGVhclN0ZW5jaWwodCksdGhpcy5jdXJyZW50PXQpfTt2YXIgZ3Q9ZnVuY3Rpb24odCl7dGhpcy5jb250ZXh0PXQsdGhpcy5jdXJyZW50PVshMCwhMCwhMCwhMF19O2d0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50fSxndC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY3VycmVudDt0WzBdPT09ZVswXSYmdFsxXT09PWVbMV0mJnRbMl09PT1lWzJdJiZ0WzNdPT09ZVszXXx8KHRoaXMuY29udGV4dC5nbC5jb2xvck1hc2sodFswXSx0WzFdLHRbMl0sdFszXSksdGhpcy5jdXJyZW50PXQpfTt2YXIgbXQ9ZnVuY3Rpb24odCl7dGhpcy5jb250ZXh0PXQsdGhpcy5jdXJyZW50PSEwfTttdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudH0sbXQucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXt0aGlzLmN1cnJlbnQhPT10JiYodGhpcy5jb250ZXh0LmdsLmRlcHRoTWFzayh0KSx0aGlzLmN1cnJlbnQ9dCl9O3ZhciB2dD1mdW5jdGlvbih0KXt0aGlzLmNvbnRleHQ9dCx0aGlzLmN1cnJlbnQ9MjU1fTt2dC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudH0sdnQucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXt0aGlzLmN1cnJlbnQhPT10JiYodGhpcy5jb250ZXh0LmdsLnN0ZW5jaWxNYXNrKHQpLHRoaXMuY3VycmVudD10KX07dmFyIHl0PWZ1bmN0aW9uKHQpe3RoaXMuY29udGV4dD10LHRoaXMuY3VycmVudD17ZnVuYzp0LmdsLkFMV0FZUyxyZWY6MCxtYXNrOjI1NX19O3l0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50fSx5dC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY3VycmVudDt0LmZ1bmM9PT1lLmZ1bmMmJnQucmVmPT09ZS5yZWYmJnQubWFzaz09PWUubWFza3x8KHRoaXMuY29udGV4dC5nbC5zdGVuY2lsRnVuYyh0LmZ1bmMsdC5yZWYsdC5tYXNrKSx0aGlzLmN1cnJlbnQ9dCl9O3ZhciB4dD1mdW5jdGlvbih0KXt0aGlzLmNvbnRleHQ9dDt2YXIgZT10aGlzLmNvbnRleHQuZ2w7dGhpcy5jdXJyZW50PVtlLktFRVAsZS5LRUVQLGUuS0VFUF19O3h0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50fSx4dC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY3VycmVudDt0WzBdPT09ZVswXSYmdFsxXT09PWVbMV0mJnRbMl09PT1lWzJdfHwodGhpcy5jb250ZXh0LmdsLnN0ZW5jaWxPcCh0WzBdLHRbMV0sdFsyXSksdGhpcy5jdXJyZW50PXQpfTt2YXIgYnQ9ZnVuY3Rpb24odCl7dGhpcy5jb250ZXh0PXQsdGhpcy5jdXJyZW50PSExfTtidC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudH0sYnQucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXtpZih0aGlzLmN1cnJlbnQhPT10KXt2YXIgZT10aGlzLmNvbnRleHQuZ2w7dD9lLmVuYWJsZShlLlNURU5DSUxfVEVTVCk6ZS5kaXNhYmxlKGUuU1RFTkNJTF9URVNUKSx0aGlzLmN1cnJlbnQ9dH19O3ZhciBfdD1mdW5jdGlvbih0KXt0aGlzLmNvbnRleHQ9dCx0aGlzLmN1cnJlbnQ9WzAsMV19O190LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50fSxfdC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY3VycmVudDt0WzBdPT09ZVswXSYmdFsxXT09PWVbMV18fCh0aGlzLmNvbnRleHQuZ2wuZGVwdGhSYW5nZSh0WzBdLHRbMV0pLHRoaXMuY3VycmVudD10KX07dmFyIHd0PWZ1bmN0aW9uKHQpe3RoaXMuY29udGV4dD10LHRoaXMuY3VycmVudD0hMX07d3QucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnR9LHd0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7aWYodGhpcy5jdXJyZW50IT09dCl7dmFyIGU9dGhpcy5jb250ZXh0LmdsO3Q/ZS5lbmFibGUoZS5ERVBUSF9URVNUKTplLmRpc2FibGUoZS5ERVBUSF9URVNUKSx0aGlzLmN1cnJlbnQ9dH19O3ZhciBrdD1mdW5jdGlvbih0KXt0aGlzLmNvbnRleHQ9dCx0aGlzLmN1cnJlbnQ9dC5nbC5MRVNTfTtrdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudH0sa3QucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXt0aGlzLmN1cnJlbnQhPT10JiYodGhpcy5jb250ZXh0LmdsLmRlcHRoRnVuYyh0KSx0aGlzLmN1cnJlbnQ9dCl9O3ZhciBNdD1mdW5jdGlvbih0KXt0aGlzLmNvbnRleHQ9dCx0aGlzLmN1cnJlbnQ9ITF9O010LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50fSxNdC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe2lmKHRoaXMuY3VycmVudCE9PXQpe3ZhciBlPXRoaXMuY29udGV4dC5nbDt0P2UuZW5hYmxlKGUuQkxFTkQpOmUuZGlzYWJsZShlLkJMRU5EKSx0aGlzLmN1cnJlbnQ9dH19O3ZhciBBdD1mdW5jdGlvbih0KXt0aGlzLmNvbnRleHQ9dDt2YXIgZT10aGlzLmNvbnRleHQuZ2w7dGhpcy5jdXJyZW50PVtlLk9ORSxlLlpFUk9dfTtBdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudH0sQXQucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmN1cnJlbnQ7dFswXT09PWVbMF0mJnRbMV09PT1lWzFdfHwodGhpcy5jb250ZXh0LmdsLmJsZW5kRnVuYyh0WzBdLHRbMV0pLHRoaXMuY3VycmVudD10KX07dmFyIFR0PWZ1bmN0aW9uKGUpe3RoaXMuY29udGV4dD1lLHRoaXMuY3VycmVudD10LmRlZmF1bHQkNi50cmFuc3BhcmVudH07VHQucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnR9LFR0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jdXJyZW50O3Qucj09PWUuciYmdC5nPT09ZS5nJiZ0LmI9PT1lLmImJnQuYT09PWUuYXx8KHRoaXMuY29udGV4dC5nbC5ibGVuZENvbG9yKHQucix0LmcsdC5iLHQuYSksdGhpcy5jdXJyZW50PXQpfTt2YXIgU3Q9ZnVuY3Rpb24odCl7dGhpcy5jb250ZXh0PXQsdGhpcy5jdXJyZW50PW51bGx9O1N0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50fSxTdC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuY3VycmVudCE9PXQmJih0aGlzLmNvbnRleHQuZ2wudXNlUHJvZ3JhbSh0KSx0aGlzLmN1cnJlbnQ9dCl9O3ZhciBFdD1mdW5jdGlvbih0KXt0aGlzLmNvbnRleHQ9dCx0aGlzLmN1cnJlbnQ9MX07RXQucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnR9LEV0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5jb250ZXh0LmxpbmVXaWR0aFJhbmdlLG49dC5jbGFtcChlLHJbMF0sclsxXSk7dGhpcy5jdXJyZW50IT09biYmKHRoaXMuY29udGV4dC5nbC5saW5lV2lkdGgobiksdGhpcy5jdXJyZW50PWUpfTt2YXIgQ3Q9ZnVuY3Rpb24odCl7dGhpcy5jb250ZXh0PXQsdGhpcy5jdXJyZW50PXQuZ2wuVEVYVFVSRTB9O0N0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50fSxDdC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuY3VycmVudCE9PXQmJih0aGlzLmNvbnRleHQuZ2wuYWN0aXZlVGV4dHVyZSh0KSx0aGlzLmN1cnJlbnQ9dCl9O3ZhciBMdD1mdW5jdGlvbih0KXt0aGlzLmNvbnRleHQ9dDt2YXIgZT10aGlzLmNvbnRleHQuZ2w7dGhpcy5jdXJyZW50PVswLDAsZS5kcmF3aW5nQnVmZmVyV2lkdGgsZS5kcmF3aW5nQnVmZmVySGVpZ2h0XX07THQucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnR9LEx0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jdXJyZW50O3RbMF09PT1lWzBdJiZ0WzFdPT09ZVsxXSYmdFsyXT09PWVbMl0mJnRbM109PT1lWzNdfHwodGhpcy5jb250ZXh0LmdsLnZpZXdwb3J0KHRbMF0sdFsxXSx0WzJdLHRbM10pLHRoaXMuY3VycmVudD10KX07dmFyIHp0PWZ1bmN0aW9uKHQpe3RoaXMuY29udGV4dD10LHRoaXMuY3VycmVudD1udWxsfTt6dC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudH0senQucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXtpZih0aGlzLmN1cnJlbnQhPT10KXt2YXIgZT10aGlzLmNvbnRleHQuZ2w7ZS5iaW5kRnJhbWVidWZmZXIoZS5GUkFNRUJVRkZFUix0KSx0aGlzLmN1cnJlbnQ9dH19O3ZhciBQdD1mdW5jdGlvbih0KXt0aGlzLmNvbnRleHQ9dCx0aGlzLmN1cnJlbnQ9bnVsbH07UHQucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnR9LFB0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7aWYodGhpcy5jdXJyZW50IT09dCl7dmFyIGU9dGhpcy5jb250ZXh0LmdsO2UuYmluZFJlbmRlcmJ1ZmZlcihlLlJFTkRFUkJVRkZFUix0KSx0aGlzLmN1cnJlbnQ9dH19O3ZhciBJdD1mdW5jdGlvbih0KXt0aGlzLmNvbnRleHQ9dCx0aGlzLmN1cnJlbnQ9bnVsbH07SXQucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnR9LEl0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7aWYodGhpcy5jdXJyZW50IT09dCl7dmFyIGU9dGhpcy5jb250ZXh0LmdsO2UuYmluZFRleHR1cmUoZS5URVhUVVJFXzJELHQpLHRoaXMuY3VycmVudD10fX07dmFyIE90PWZ1bmN0aW9uKHQpe3RoaXMuY29udGV4dD10LHRoaXMuY3VycmVudD1udWxsfTtPdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudH0sT3QucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXtpZih0aGlzLmN1cnJlbnQhPT10KXt2YXIgZT10aGlzLmNvbnRleHQuZ2w7ZS5iaW5kQnVmZmVyKGUuQVJSQVlfQlVGRkVSLHQpLHRoaXMuY3VycmVudD10fX07dmFyIER0PWZ1bmN0aW9uKHQpe3RoaXMuY29udGV4dD10LHRoaXMuY3VycmVudD1udWxsfTtEdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudH0sRHQucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmNvbnRleHQuZ2w7ZS5iaW5kQnVmZmVyKGUuRUxFTUVOVF9BUlJBWV9CVUZGRVIsdCksdGhpcy5jdXJyZW50PXR9O3ZhciBSdD1mdW5jdGlvbih0KXt0aGlzLmNvbnRleHQ9dCx0aGlzLmN1cnJlbnQ9bnVsbH07UnQucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnR9LFJ0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5jdXJyZW50IT09dCYmdGhpcy5jb250ZXh0LmV4dFZlcnRleEFycmF5T2JqZWN0JiYodGhpcy5jb250ZXh0LmV4dFZlcnRleEFycmF5T2JqZWN0LmJpbmRWZXJ0ZXhBcnJheU9FUyh0KSx0aGlzLmN1cnJlbnQ9dCl9O3ZhciBCdD1mdW5jdGlvbih0KXt0aGlzLmNvbnRleHQ9dCx0aGlzLmN1cnJlbnQ9NH07QnQucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnR9LEJ0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7aWYodGhpcy5jdXJyZW50IT09dCl7dmFyIGU9dGhpcy5jb250ZXh0LmdsO2UucGl4ZWxTdG9yZWkoZS5VTlBBQ0tfQUxJR05NRU5ULHQpLHRoaXMuY3VycmVudD10fX07dmFyIEZ0PWZ1bmN0aW9uKHQpe3RoaXMuY29udGV4dD10LHRoaXMuY3VycmVudD0hMX07RnQucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnR9LEZ0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7aWYodGhpcy5jdXJyZW50IT09dCl7dmFyIGU9dGhpcy5jb250ZXh0LmdsO2UucGl4ZWxTdG9yZWkoZS5VTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wsdCksdGhpcy5jdXJyZW50PXR9fTt2YXIgTnQ9ZnVuY3Rpb24odCxlKXt0aGlzLmNvbnRleHQ9dCx0aGlzLmN1cnJlbnQ9bnVsbCx0aGlzLnBhcmVudD1lfTtOdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudH07dmFyIGp0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxyKXt0LmNhbGwodGhpcyxlLHIpLHRoaXMuZGlydHk9ITF9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXtpZih0aGlzLmRpcnR5fHx0aGlzLmN1cnJlbnQhPT10KXt2YXIgZT10aGlzLmNvbnRleHQuZ2w7dGhpcy5jb250ZXh0LmJpbmRGcmFtZWJ1ZmZlci5zZXQodGhpcy5wYXJlbnQpLGUuZnJhbWVidWZmZXJUZXh0dXJlMkQoZS5GUkFNRUJVRkZFUixlLkNPTE9SX0FUVEFDSE1FTlQwLGUuVEVYVFVSRV8yRCx0LDApLHRoaXMuY3VycmVudD10LHRoaXMuZGlydHk9ITF9fSxlLnByb3RvdHlwZS5zZXREaXJ0eT1mdW5jdGlvbigpe3RoaXMuZGlydHk9ITB9LGV9KE50KSxWdD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXtpZih0aGlzLmN1cnJlbnQhPT10KXt2YXIgZT10aGlzLmNvbnRleHQuZ2w7dGhpcy5jb250ZXh0LmJpbmRGcmFtZWJ1ZmZlci5zZXQodGhpcy5wYXJlbnQpLGUuZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoZS5GUkFNRUJVRkZFUixlLkRFUFRIX0FUVEFDSE1FTlQsZS5SRU5ERVJCVUZGRVIsdCksdGhpcy5jdXJyZW50PXR9fSxlfShOdCksVXQ9ZnVuY3Rpb24odCxlLHIpe3RoaXMuY29udGV4dD10LHRoaXMud2lkdGg9ZSx0aGlzLmhlaWdodD1yO3ZhciBuPXQuZ2wsaT10aGlzLmZyYW1lYnVmZmVyPW4uY3JlYXRlRnJhbWVidWZmZXIoKTt0aGlzLmNvbG9yQXR0YWNobWVudD1uZXcganQodCxpKSx0aGlzLmRlcHRoQXR0YWNobWVudD1uZXcgVnQodCxpKX07VXQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmNvbnRleHQuZ2wsZT10aGlzLmNvbG9yQXR0YWNobWVudC5nZXQoKTtlJiZ0LmRlbGV0ZVRleHR1cmUoZSk7dmFyIHI9dGhpcy5kZXB0aEF0dGFjaG1lbnQuZ2V0KCk7ciYmdC5kZWxldGVSZW5kZXJidWZmZXIociksdC5kZWxldGVGcmFtZWJ1ZmZlcih0aGlzLmZyYW1lYnVmZmVyKX07dmFyIHF0PWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmZ1bmM9dCx0aGlzLm1hc2s9ZSx0aGlzLnJhbmdlPXJ9O3F0LlJlYWRPbmx5PSExLHF0LlJlYWRXcml0ZT0hMCxxdC5kaXNhYmxlZD1uZXcgcXQoNTE5LHF0LlJlYWRPbmx5LFswLDFdKTt2YXIgSHQ9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3RoaXMudGVzdD10LHRoaXMucmVmPWUsdGhpcy5tYXNrPXIsdGhpcy5mYWlsPW4sdGhpcy5kZXB0aEZhaWw9aSx0aGlzLnBhc3M9YX07SHQuZGlzYWJsZWQ9bmV3IEh0KHtmdW5jOjUxOSxtYXNrOjB9LDAsMCw3NjgwLDc2ODAsNzY4MCk7dmFyIEd0PWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmJsZW5kRnVuY3Rpb249dCx0aGlzLmJsZW5kQ29sb3I9ZSx0aGlzLm1hc2s9cn07R3QuZGlzYWJsZWQ9bmV3IEd0KEd0LlJlcGxhY2U9WzEsMF0sdC5kZWZhdWx0JDYudHJhbnNwYXJlbnQsWyExLCExLCExLCExXSksR3QudW5ibGVuZGVkPW5ldyBHdChHdC5SZXBsYWNlLHQuZGVmYXVsdCQ2LnRyYW5zcGFyZW50LFshMCwhMCwhMCwhMF0pLEd0LmFscGhhQmxlbmRlZD1uZXcgR3QoWzEsNzcxXSx0LmRlZmF1bHQkNi50cmFuc3BhcmVudCxbITAsITAsITAsITBdKTt2YXIgV3Q9ZnVuY3Rpb24odCl7dGhpcy5nbD10LHRoaXMuZXh0VmVydGV4QXJyYXlPYmplY3Q9dGhpcy5nbC5nZXRFeHRlbnNpb24oIk9FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IiksdGhpcy5saW5lV2lkdGhSYW5nZT10LmdldFBhcmFtZXRlcih0LkFMSUFTRURfTElORV9XSURUSF9SQU5HRSksdGhpcy5jbGVhckNvbG9yPW5ldyBmdCh0aGlzKSx0aGlzLmNsZWFyRGVwdGg9bmV3IHB0KHRoaXMpLHRoaXMuY2xlYXJTdGVuY2lsPW5ldyBkdCh0aGlzKSx0aGlzLmNvbG9yTWFzaz1uZXcgZ3QodGhpcyksdGhpcy5kZXB0aE1hc2s9bmV3IG10KHRoaXMpLHRoaXMuc3RlbmNpbE1hc2s9bmV3IHZ0KHRoaXMpLHRoaXMuc3RlbmNpbEZ1bmM9bmV3IHl0KHRoaXMpLHRoaXMuc3RlbmNpbE9wPW5ldyB4dCh0aGlzKSx0aGlzLnN0ZW5jaWxUZXN0PW5ldyBidCh0aGlzKSx0aGlzLmRlcHRoUmFuZ2U9bmV3IF90KHRoaXMpLHRoaXMuZGVwdGhUZXN0PW5ldyB3dCh0aGlzKSx0aGlzLmRlcHRoRnVuYz1uZXcga3QodGhpcyksdGhpcy5ibGVuZD1uZXcgTXQodGhpcyksdGhpcy5ibGVuZEZ1bmM9bmV3IEF0KHRoaXMpLHRoaXMuYmxlbmRDb2xvcj1uZXcgVHQodGhpcyksdGhpcy5wcm9ncmFtPW5ldyBTdCh0aGlzKSx0aGlzLmxpbmVXaWR0aD1uZXcgRXQodGhpcyksdGhpcy5hY3RpdmVUZXh0dXJlPW5ldyBDdCh0aGlzKSx0aGlzLnZpZXdwb3J0PW5ldyBMdCh0aGlzKSx0aGlzLmJpbmRGcmFtZWJ1ZmZlcj1uZXcgenQodGhpcyksdGhpcy5iaW5kUmVuZGVyYnVmZmVyPW5ldyBQdCh0aGlzKSx0aGlzLmJpbmRUZXh0dXJlPW5ldyBJdCh0aGlzKSx0aGlzLmJpbmRWZXJ0ZXhCdWZmZXI9bmV3IE90KHRoaXMpLHRoaXMuYmluZEVsZW1lbnRCdWZmZXI9bmV3IER0KHRoaXMpLHRoaXMuYmluZFZlcnRleEFycmF5T0VTPXRoaXMuZXh0VmVydGV4QXJyYXlPYmplY3QmJm5ldyBSdCh0aGlzKSx0aGlzLnBpeGVsU3RvcmVVbnBhY2s9bmV3IEJ0KHRoaXMpLHRoaXMucGl4ZWxTdG9yZVVucGFja1ByZW11bHRpcGx5QWxwaGE9bmV3IEZ0KHRoaXMpLHRoaXMuZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljPXQuZ2V0RXh0ZW5zaW9uKCJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKXx8dC5nZXRFeHRlbnNpb24oIk1PWl9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKXx8dC5nZXRFeHRlbnNpb24oIldFQktJVF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKSx0aGlzLmV4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYyYmKHRoaXMuZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljTWF4PXQuZ2V0UGFyYW1ldGVyKHRoaXMuZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljLk1BWF9URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCkpLHRoaXMuZXh0VGV4dHVyZUhhbGZGbG9hdD10LmdldEV4dGVuc2lvbigiT0VTX3RleHR1cmVfaGFsZl9mbG9hdCIpLHRoaXMuZXh0VGV4dHVyZUhhbGZGbG9hdCYmdC5nZXRFeHRlbnNpb24oIk9FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyIil9O1d0LnByb3RvdHlwZS5jcmVhdGVJbmRleEJ1ZmZlcj1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgY3QodGhpcyx0LGUpfSxXdC5wcm90b3R5cGUuY3JlYXRlVmVydGV4QnVmZmVyPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gbmV3IGh0KHRoaXMsdCxlLHIpfSxXdC5wcm90b3R5cGUuY3JlYXRlUmVuZGVyYnVmZmVyPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLmdsLGk9bi5jcmVhdGVSZW5kZXJidWZmZXIoKTtyZXR1cm4gdGhpcy5iaW5kUmVuZGVyYnVmZmVyLnNldChpKSxuLnJlbmRlcmJ1ZmZlclN0b3JhZ2Uobi5SRU5ERVJCVUZGRVIsdCxlLHIpLHRoaXMuYmluZFJlbmRlcmJ1ZmZlci5zZXQobnVsbCksaX0sV3QucHJvdG90eXBlLmNyZWF0ZUZyYW1lYnVmZmVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBVdCh0aGlzLHQsZSl9LFd0LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbih0KXt2YXIgZT10LmNvbG9yLHI9dC5kZXB0aCxuPXRoaXMuZ2wsaT0wO2UmJihpfD1uLkNPTE9SX0JVRkZFUl9CSVQsdGhpcy5jbGVhckNvbG9yLnNldChlKSx0aGlzLmNvbG9yTWFzay5zZXQoWyEwLCEwLCEwLCEwXSkpLHZvaWQgMCE9PXImJihpfD1uLkRFUFRIX0JVRkZFUl9CSVQsdGhpcy5jbGVhckRlcHRoLnNldChyKSx0aGlzLmRlcHRoTWFzay5zZXQoITApKSxuLmNsZWFyKGkpfSxXdC5wcm90b3R5cGUuc2V0RGVwdGhNb2RlPWZ1bmN0aW9uKHQpe3QuZnVuYyE9PXRoaXMuZ2wuQUxXQVlTfHx0Lm1hc2s/KHRoaXMuZGVwdGhUZXN0LnNldCghMCksdGhpcy5kZXB0aEZ1bmMuc2V0KHQuZnVuYyksdGhpcy5kZXB0aE1hc2suc2V0KHQubWFzayksdGhpcy5kZXB0aFJhbmdlLnNldCh0LnJhbmdlKSk6dGhpcy5kZXB0aFRlc3Quc2V0KCExKX0sV3QucHJvdG90eXBlLnNldFN0ZW5jaWxNb2RlPWZ1bmN0aW9uKHQpe3QudGVzdC5mdW5jIT09dGhpcy5nbC5BTFdBWVN8fHQubWFzaz8odGhpcy5zdGVuY2lsVGVzdC5zZXQoITApLHRoaXMuc3RlbmNpbE1hc2suc2V0KHQubWFzayksdGhpcy5zdGVuY2lsT3Auc2V0KFt0LmZhaWwsdC5kZXB0aEZhaWwsdC5wYXNzXSksdGhpcy5zdGVuY2lsRnVuYy5zZXQoe2Z1bmM6dC50ZXN0LmZ1bmMscmVmOnQucmVmLG1hc2s6dC50ZXN0Lm1hc2t9KSk6dGhpcy5zdGVuY2lsVGVzdC5zZXQoITEpfSxXdC5wcm90b3R5cGUuc2V0Q29sb3JNb2RlPWZ1bmN0aW9uKGUpe3QuZGVmYXVsdCQxMChlLmJsZW5kRnVuY3Rpb24sR3QuUmVwbGFjZSk/dGhpcy5ibGVuZC5zZXQoITEpOih0aGlzLmJsZW5kLnNldCghMCksdGhpcy5ibGVuZEZ1bmMuc2V0KGUuYmxlbmRGdW5jdGlvbiksdGhpcy5ibGVuZENvbG9yLnNldChlLmJsZW5kQ29sb3IpKSx0aGlzLmNvbG9yTWFzay5zZXQoZS5tYXNrKX07dmFyIFl0PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIodCxyLG4pe3ZhciBpPXRoaXM7ZS5jYWxsKHRoaXMpLHRoaXMuaWQ9dCx0aGlzLmRpc3BhdGNoZXI9bix0aGlzLm9uKCJkYXRhIixmdW5jdGlvbih0KXsic291cmNlIj09PXQuZGF0YVR5cGUmJiJtZXRhZGF0YSI9PT10LnNvdXJjZURhdGFUeXBlJiYoaS5fc291cmNlTG9hZGVkPSEwKSxpLl9zb3VyY2VMb2FkZWQmJiFpLl9wYXVzZWQmJiJzb3VyY2UiPT09dC5kYXRhVHlwZSYmImNvbnRlbnQiPT09dC5zb3VyY2VEYXRhVHlwZSYmKGkucmVsb2FkKCksaS50cmFuc2Zvcm0mJmkudXBkYXRlKGkudHJhbnNmb3JtKSl9KSx0aGlzLm9uKCJlcnJvciIsZnVuY3Rpb24oKXtpLl9zb3VyY2VFcnJvcmVkPSEwfSksdGhpcy5fc291cmNlPWl0KHQscixuLHRoaXMpLHRoaXMuX3RpbGVzPXt9LHRoaXMuX2NhY2hlPW5ldyBsdCgwLHRoaXMuX3VubG9hZFRpbGUuYmluZCh0aGlzKSksdGhpcy5fdGltZXJzPXt9LHRoaXMuX2NhY2hlVGltZXJzPXt9LHRoaXMuX21heFRpbGVDYWNoZVNpemU9bnVsbCx0aGlzLl9pc0lkUmVuZGVyYWJsZT10aGlzLl9pc0lkUmVuZGVyYWJsZS5iaW5kKHRoaXMpLHRoaXMuX2NvdmVyZWRUaWxlcz17fX1yZXR1cm4gZSYmKHIuX19wcm90b19fPWUpLHIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLHIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXIsci5wcm90b3R5cGUub25BZGQ9ZnVuY3Rpb24odCl7dGhpcy5tYXA9dCx0aGlzLl9tYXhUaWxlQ2FjaGVTaXplPXQ/dC5fbWF4VGlsZUNhY2hlU2l6ZTpudWxsLHRoaXMuX3NvdXJjZSYmdGhpcy5fc291cmNlLm9uQWRkJiZ0aGlzLl9zb3VyY2Uub25BZGQodCl9LHIucHJvdG90eXBlLm9uUmVtb3ZlPWZ1bmN0aW9uKHQpe3RoaXMuX3NvdXJjZSYmdGhpcy5fc291cmNlLm9uUmVtb3ZlJiZ0aGlzLl9zb3VyY2Uub25SZW1vdmUodCl9LHIucHJvdG90eXBlLmxvYWRlZD1mdW5jdGlvbigpe2lmKHRoaXMuX3NvdXJjZUVycm9yZWQpcmV0dXJuITA7aWYoIXRoaXMuX3NvdXJjZUxvYWRlZClyZXR1cm4hMTtmb3IodmFyIHQgaW4gdGhpcy5fdGlsZXMpe3ZhciBlPXRoaXMuX3RpbGVzW3RdO2lmKCJsb2FkZWQiIT09ZS5zdGF0ZSYmImVycm9yZWQiIT09ZS5zdGF0ZSlyZXR1cm4hMX1yZXR1cm4hMH0sci5wcm90b3R5cGUuZ2V0U291cmNlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NvdXJjZX0sci5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oKXt0aGlzLl9wYXVzZWQ9ITB9LHIucHJvdG90eXBlLnJlc3VtZT1mdW5jdGlvbigpe2lmKHRoaXMuX3BhdXNlZCl7dmFyIHQ9dGhpcy5fc2hvdWxkUmVsb2FkT25SZXN1bWU7dGhpcy5fcGF1c2VkPSExLHRoaXMuX3Nob3VsZFJlbG9hZE9uUmVzdW1lPSExLHQmJnRoaXMucmVsb2FkKCksdGhpcy50cmFuc2Zvcm0mJnRoaXMudXBkYXRlKHRoaXMudHJhbnNmb3JtKX19LHIucHJvdG90eXBlLl9sb2FkVGlsZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9zb3VyY2UubG9hZFRpbGUodCxlKX0sci5wcm90b3R5cGUuX3VubG9hZFRpbGU9ZnVuY3Rpb24odCl7aWYodGhpcy5fc291cmNlLnVubG9hZFRpbGUpcmV0dXJuIHRoaXMuX3NvdXJjZS51bmxvYWRUaWxlKHQsZnVuY3Rpb24oKXt9KX0sci5wcm90b3R5cGUuX2Fib3J0VGlsZT1mdW5jdGlvbih0KXtpZih0aGlzLl9zb3VyY2UuYWJvcnRUaWxlKXJldHVybiB0aGlzLl9zb3VyY2UuYWJvcnRUaWxlKHQsZnVuY3Rpb24oKXt9KX0sci5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NvdXJjZS5zZXJpYWxpemUoKX0sci5wcm90b3R5cGUucHJlcGFyZT1mdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdGhpcy5fc291cmNlLnByZXBhcmUmJnRoaXMuX3NvdXJjZS5wcmVwYXJlKCksdGhpcy5fdGlsZXMpdGhpcy5fdGlsZXNbZV0udXBsb2FkKHQpfSxyLnByb3RvdHlwZS5nZXRJZHM9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3JldHVybiBPYmplY3Qua2V5cyh0aGlzLl90aWxlcykubWFwKE51bWJlcikuc29ydChmdW5jdGlvbihyLG4pe3ZhciBpPWUuX3RpbGVzW3JdLnRpbGVJRCxhPWUuX3RpbGVzW25dLnRpbGVJRCxvPW5ldyB0LmRlZmF1bHQkMShpLmNhbm9uaWNhbC54LGkuY2Fub25pY2FsLnkpLnJvdGF0ZShlLnRyYW5zZm9ybS5hbmdsZSkscz1uZXcgdC5kZWZhdWx0JDEoYS5jYW5vbmljYWwueCxhLmNhbm9uaWNhbC55KS5yb3RhdGUoZS50cmFuc2Zvcm0uYW5nbGUpO3JldHVybiBpLm92ZXJzY2FsZWRaLWEub3ZlcnNjYWxlZFp8fHMueS1vLnl8fHMueC1vLnh9KX0sci5wcm90b3R5cGUuZ2V0UmVuZGVyYWJsZUlkcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldElkcygpLmZpbHRlcih0aGlzLl9pc0lkUmVuZGVyYWJsZSl9LHIucHJvdG90eXBlLmhhc1JlbmRlcmFibGVQYXJlbnQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5maW5kTG9hZGVkUGFyZW50KHQsMCx7fSk7cmV0dXJuISFlJiZ0aGlzLl9pc0lkUmVuZGVyYWJsZShlLnRpbGVJRC5rZXkpfSxyLnByb3RvdHlwZS5faXNJZFJlbmRlcmFibGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3RpbGVzW3RdJiZ0aGlzLl90aWxlc1t0XS5oYXNEYXRhKCkmJiF0aGlzLl9jb3ZlcmVkVGlsZXNbdF19LHIucHJvdG90eXBlLnJlbG9hZD1mdW5jdGlvbigpe2lmKHRoaXMuX3BhdXNlZCl0aGlzLl9zaG91bGRSZWxvYWRPblJlc3VtZT0hMDtlbHNlIGZvcih2YXIgdCBpbiB0aGlzLl9jYWNoZS5yZXNldCgpLHRoaXMuX3RpbGVzKXRoaXMuX3JlbG9hZFRpbGUodCwicmVsb2FkaW5nIil9LHIucHJvdG90eXBlLl9yZWxvYWRUaWxlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdGlsZXNbdF07ciYmKCJsb2FkaW5nIiE9PXIuc3RhdGUmJihyLnN0YXRlPWUpLHRoaXMuX2xvYWRUaWxlKHIsdGhpcy5fdGlsZUxvYWRlZC5iaW5kKHRoaXMscix0LGUpKSl9LHIucHJvdG90eXBlLl90aWxlTG9hZGVkPWZ1bmN0aW9uKGUscixuLGkpe2lmKGkpcmV0dXJuIGUuc3RhdGU9ImVycm9yZWQiLHZvaWQoNDA0IT09aS5zdGF0dXM/dGhpcy5fc291cmNlLmZpcmUobmV3IHQuRXJyb3JFdmVudChpLHt0aWxlOmV9KSk6dGhpcy51cGRhdGUodGhpcy50cmFuc2Zvcm0pKTtlLnRpbWVBZGRlZD1hLm5vdygpLCJleHBpcmVkIj09PW4mJihlLnJlZnJlc2hlZFVwb25FeHBpcmF0aW9uPSEwKSx0aGlzLl9zZXRUaWxlUmVsb2FkVGltZXIocixlKSwicmFzdGVyLWRlbSI9PT10aGlzLmdldFNvdXJjZSgpLnR5cGUmJmUuZGVtJiZ0aGlzLl9iYWNrZmlsbERFTShlKSx0aGlzLl9zb3VyY2UuZmlyZShuZXcgdC5FdmVudCgiZGF0YSIse2RhdGFUeXBlOiJzb3VyY2UiLHRpbGU6ZSxjb29yZDplLnRpbGVJRH0pKSx0aGlzLm1hcCYmKHRoaXMubWFwLnBhaW50ZXIudGlsZUV4dGVudFZBTy52YW89bnVsbCl9LHIucHJvdG90eXBlLl9iYWNrZmlsbERFTT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5nZXRSZW5kZXJhYmxlSWRzKCkscj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdO2lmKHQubmVpZ2hib3JpbmdUaWxlcyYmdC5uZWlnaGJvcmluZ1RpbGVzW25dKXt2YXIgaT10aGlzLmdldFRpbGVCeUlEKG4pO2EodCxpKSxhKGksdCl9fWZ1bmN0aW9uIGEodCxlKXt0Lm5lZWRzSGlsbHNoYWRlUHJlcGFyZT0hMDt2YXIgcj1lLnRpbGVJRC5jYW5vbmljYWwueC10LnRpbGVJRC5jYW5vbmljYWwueCxuPWUudGlsZUlELmNhbm9uaWNhbC55LXQudGlsZUlELmNhbm9uaWNhbC55LGk9TWF0aC5wb3coMix0LnRpbGVJRC5jYW5vbmljYWwueiksYT1lLnRpbGVJRC5rZXk7MD09PXImJjA9PT1ufHxNYXRoLmFicyhuKT4xfHwoTWF0aC5hYnMocik+MSYmKDE9PT1NYXRoLmFicyhyK2kpP3IrPWk6MT09PU1hdGguYWJzKHItaSkmJihyLT1pKSksZS5kZW0mJnQuZGVtJiYodC5kZW0uYmFja2ZpbGxCb3JkZXIoZS5kZW0scixuKSx0Lm5laWdoYm9yaW5nVGlsZXMmJnQubmVpZ2hib3JpbmdUaWxlc1thXSYmKHQubmVpZ2hib3JpbmdUaWxlc1thXS5iYWNrZmlsbGVkPSEwKSkpfX0sci5wcm90b3R5cGUuZ2V0VGlsZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5nZXRUaWxlQnlJRCh0LmtleSl9LHIucHJvdG90eXBlLmdldFRpbGVCeUlEPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl90aWxlc1t0XX0sci5wcm90b3R5cGUuZ2V0Wm9vbT1mdW5jdGlvbih0KXtyZXR1cm4gdC56b29tK3Quc2NhbGVab29tKHQudGlsZVNpemUvdGhpcy5fc291cmNlLnRpbGVTaXplKX0sci5wcm90b3R5cGUuX2ZpbmRMb2FkZWRDaGlsZHJlbj1mdW5jdGlvbih0LGUscil7dmFyIG49ITE7Zm9yKHZhciBpIGluIHRoaXMuX3RpbGVzKXt2YXIgYT10aGlzLl90aWxlc1tpXTtpZighKHJbaV18fCFhLmhhc0RhdGEoKXx8YS50aWxlSUQub3ZlcnNjYWxlZFo8PXQub3ZlcnNjYWxlZFp8fGEudGlsZUlELm92ZXJzY2FsZWRaPmUpKXt2YXIgbz1NYXRoLnBvdygyLGEudGlsZUlELmNhbm9uaWNhbC56LXQuY2Fub25pY2FsLnopO2lmKE1hdGguZmxvb3IoYS50aWxlSUQuY2Fub25pY2FsLngvbyk9PT10LmNhbm9uaWNhbC54JiZNYXRoLmZsb29yKGEudGlsZUlELmNhbm9uaWNhbC55L28pPT09dC5jYW5vbmljYWwueSlmb3IocltpXT1hLnRpbGVJRCxuPSEwO2EmJmEudGlsZUlELm92ZXJzY2FsZWRaLTE+dC5vdmVyc2NhbGVkWjspe3ZhciBzPWEudGlsZUlELnNjYWxlZFRvKGEudGlsZUlELm92ZXJzY2FsZWRaLTEpO2lmKCFzKWJyZWFrOyhhPXRoaXMuX3RpbGVzW3Mua2V5XSkmJmEuaGFzRGF0YSgpJiYoZGVsZXRlIHJbaV0scltzLmtleV09cyl9fX1yZXR1cm4gbn0sci5wcm90b3R5cGUuZmluZExvYWRlZFBhcmVudD1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPXQub3ZlcnNjYWxlZFotMTtuPj1lO24tLSl7dmFyIGk9dC5zY2FsZWRUbyhuKTtpZighaSlyZXR1cm47dmFyIGE9U3RyaW5nKGkua2V5KSxvPXRoaXMuX3RpbGVzW2FdO2lmKG8mJm8uaGFzRGF0YSgpKXJldHVybiByW2FdPWksbztpZih0aGlzLl9jYWNoZS5oYXMoaSkpcmV0dXJuIHJbYV09aSx0aGlzLl9jYWNoZS5nZXQoaSl9fSxyLnByb3RvdHlwZS51cGRhdGVDYWNoZVNpemU9ZnVuY3Rpb24odCl7dmFyIGU9KE1hdGguY2VpbCh0LndpZHRoL3RoaXMuX3NvdXJjZS50aWxlU2l6ZSkrMSkqKE1hdGguY2VpbCh0LmhlaWdodC90aGlzLl9zb3VyY2UudGlsZVNpemUpKzEpLHI9TWF0aC5mbG9vcig1KmUpLG49Im51bWJlciI9PXR5cGVvZiB0aGlzLl9tYXhUaWxlQ2FjaGVTaXplP01hdGgubWluKHRoaXMuX21heFRpbGVDYWNoZVNpemUscik6cjt0aGlzLl9jYWNoZS5zZXRNYXhTaXplKG4pfSxyLnByb3RvdHlwZS5oYW5kbGVXcmFwSnVtcD1mdW5jdGlvbih0KXt2YXIgZT0odC0odm9pZCAwPT09dGhpcy5fcHJldkxuZz90OnRoaXMuX3ByZXZMbmcpKS8zNjAscj1NYXRoLnJvdW5kKGUpO2lmKHRoaXMuX3ByZXZMbmc9dCxyKXt2YXIgbj17fTtmb3IodmFyIGkgaW4gdGhpcy5fdGlsZXMpe3ZhciBhPXRoaXMuX3RpbGVzW2ldO2EudGlsZUlEPWEudGlsZUlELnVud3JhcFRvKGEudGlsZUlELndyYXArciksblthLnRpbGVJRC5rZXldPWF9Zm9yKHZhciBvIGluIHRoaXMuX3RpbGVzPW4sdGhpcy5fdGltZXJzKWNsZWFyVGltZW91dCh0aGlzLl90aW1lcnNbb10pLGRlbGV0ZSB0aGlzLl90aW1lcnNbb107Zm9yKHZhciBzIGluIHRoaXMuX3RpbGVzKXt2YXIgbD10aGlzLl90aWxlc1tzXTt0aGlzLl9zZXRUaWxlUmVsb2FkVGltZXIocyxsKX19fSxyLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oZSl7dmFyIG49dGhpcztpZih0aGlzLnRyYW5zZm9ybT1lLHRoaXMuX3NvdXJjZUxvYWRlZCYmIXRoaXMuX3BhdXNlZCl7dmFyIGk7dGhpcy51cGRhdGVDYWNoZVNpemUoZSksdGhpcy5oYW5kbGVXcmFwSnVtcCh0aGlzLnRyYW5zZm9ybS5jZW50ZXIubG5nKSx0aGlzLl9jb3ZlcmVkVGlsZXM9e30sdGhpcy51c2VkP3RoaXMuX3NvdXJjZS50aWxlSUQ/aT1lLmdldFZpc2libGVVbndyYXBwZWRDb29yZGluYXRlcyh0aGlzLl9zb3VyY2UudGlsZUlEKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB0Lk92ZXJzY2FsZWRUaWxlSUQoZS5jYW5vbmljYWwueixlLndyYXAsZS5jYW5vbmljYWwueixlLmNhbm9uaWNhbC54LGUuY2Fub25pY2FsLnkpfSk6KGk9ZS5jb3ZlcmluZ1RpbGVzKHt0aWxlU2l6ZTp0aGlzLl9zb3VyY2UudGlsZVNpemUsbWluem9vbTp0aGlzLl9zb3VyY2UubWluem9vbSxtYXh6b29tOnRoaXMuX3NvdXJjZS5tYXh6b29tLHJvdW5kWm9vbTp0aGlzLl9zb3VyY2Uucm91bmRab29tLHJlcGFyc2VPdmVyc2NhbGVkOnRoaXMuX3NvdXJjZS5yZXBhcnNlT3ZlcnNjYWxlZH0pLHRoaXMuX3NvdXJjZS5oYXNUaWxlJiYoaT1pLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gbi5fc291cmNlLmhhc1RpbGUodCl9KSkpOmk9W107dmFyIG8scz0odGhpcy5fc291cmNlLnJvdW5kWm9vbT9NYXRoLnJvdW5kOk1hdGguZmxvb3IpKHRoaXMuZ2V0Wm9vbShlKSksbD1NYXRoLm1heChzLXIubWF4T3Zlcnpvb21pbmcsdGhpcy5fc291cmNlLm1pbnpvb20pLGM9TWF0aC5tYXgocytyLm1heFVuZGVyem9vbWluZyx0aGlzLl9zb3VyY2UubWluem9vbSksdT10aGlzLl91cGRhdGVSZXRhaW5lZFRpbGVzKGkscyksaD17fTtpZihadCh0aGlzLl9zb3VyY2UudHlwZSkpZm9yKHZhciBmPU9iamVjdC5rZXlzKHUpLHA9MDtwPGYubGVuZ3RoO3ArKyl7dmFyIGQ9ZltwXSxnPXVbZF0sbT1uLl90aWxlc1tkXTtpZihtJiYodm9pZCAwPT09bS5mYWRlRW5kVGltZXx8bS5mYWRlRW5kVGltZT49YS5ub3coKSkpe24uX2ZpbmRMb2FkZWRDaGlsZHJlbihnLGMsdSkmJih1W2RdPWcpO3ZhciB2PW4uZmluZExvYWRlZFBhcmVudChnLGwsaCk7diYmbi5fYWRkVGlsZSh2LnRpbGVJRCl9fWZvcihvIGluIGgpdVtvXXx8KG4uX2NvdmVyZWRUaWxlc1tvXT0hMCk7Zm9yKG8gaW4gaCl1W29dPWhbb107Zm9yKHZhciB5PXQua2V5c0RpZmZlcmVuY2UodGhpcy5fdGlsZXMsdSkseD0wO3g8eS5sZW5ndGg7eCsrKW4uX3JlbW92ZVRpbGUoeVt4XSl9fSxyLnByb3RvdHlwZS5fdXBkYXRlUmV0YWluZWRUaWxlcz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj17fSxpPXt9LGE9TWF0aC5tYXgoZS1yLm1heE92ZXJ6b29taW5nLHRoaXMuX3NvdXJjZS5taW56b29tKSxvPU1hdGgubWF4KGUrci5tYXhVbmRlcnpvb21pbmcsdGhpcy5fc291cmNlLm1pbnpvb20pLHM9MDtzPHQubGVuZ3RoO3MrKyl7dmFyIGw9dFtzXSxjPXRoaXMuX2FkZFRpbGUobCksdT0hMTtpZihjLmhhc0RhdGEoKSluW2wua2V5XT1sO2Vsc2V7dT1jLndhc1JlcXVlc3RlZCgpLG5bbC5rZXldPWw7dmFyIGg9ITA7aWYoZSsxPnRoaXMuX3NvdXJjZS5tYXh6b29tKXt2YXIgZj1sLmNoaWxkcmVuKHRoaXMuX3NvdXJjZS5tYXh6b29tKVswXSxwPXRoaXMuZ2V0VGlsZShmKTtwJiZwLmhhc0RhdGEoKT9uW2Yua2V5XT1mOmg9ITF9ZWxzZXt0aGlzLl9maW5kTG9hZGVkQ2hpbGRyZW4obCxvLG4pO2Zvcih2YXIgZD1sLmNoaWxkcmVuKHRoaXMuX3NvdXJjZS5tYXh6b29tKSxnPTA7ZzxkLmxlbmd0aDtnKyspaWYoIW5bZFtnXS5rZXldKXtoPSExO2JyZWFrfX1pZighaClmb3IodmFyIG09bC5vdmVyc2NhbGVkWi0xO20+PWE7LS1tKXt2YXIgdj1sLnNjYWxlZFRvKG0pO2lmKGlbdi5rZXldKWJyZWFrO2lmKGlbdi5rZXldPSEwLCEoYz10aGlzLmdldFRpbGUodikpJiZ1JiYoYz10aGlzLl9hZGRUaWxlKHYpKSxjJiYoblt2LmtleV09dix1PWMud2FzUmVxdWVzdGVkKCksYy5oYXNEYXRhKCkpKWJyZWFrfX19cmV0dXJuIG59LHIucHJvdG90eXBlLl9hZGRUaWxlPWZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuX3RpbGVzW2Uua2V5XTtpZihyKXJldHVybiByOyhyPXRoaXMuX2NhY2hlLmdldEFuZFJlbW92ZShlKSkmJih0aGlzLl9zZXRUaWxlUmVsb2FkVGltZXIoZS5rZXksciksci50aWxlSUQ9ZSk7dmFyIG49Qm9vbGVhbihyKTtyZXR1cm4gbnx8KHI9bmV3IHN0KGUsdGhpcy5fc291cmNlLnRpbGVTaXplKmUub3ZlcnNjYWxlRmFjdG9yKCkpLHRoaXMuX2xvYWRUaWxlKHIsdGhpcy5fdGlsZUxvYWRlZC5iaW5kKHRoaXMscixlLmtleSxyLnN0YXRlKSkpLHI/KHIudXNlcysrLHRoaXMuX3RpbGVzW2Uua2V5XT1yLG58fHRoaXMuX3NvdXJjZS5maXJlKG5ldyB0LkV2ZW50KCJkYXRhbG9hZGluZyIse3RpbGU6cixjb29yZDpyLnRpbGVJRCxkYXRhVHlwZToic291cmNlIn0pKSxyKTpudWxsfSxyLnByb3RvdHlwZS5fc2V0VGlsZVJlbG9hZFRpbWVyPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpczt0IGluIHRoaXMuX3RpbWVycyYmKGNsZWFyVGltZW91dCh0aGlzLl90aW1lcnNbdF0pLGRlbGV0ZSB0aGlzLl90aW1lcnNbdF0pO3ZhciBuPWUuZ2V0RXhwaXJ5VGltZW91dCgpO24mJih0aGlzLl90aW1lcnNbdF09c2V0VGltZW91dChmdW5jdGlvbigpe3IuX3JlbG9hZFRpbGUodCwiZXhwaXJlZCIpLGRlbGV0ZSByLl90aW1lcnNbdF19LG4pKX0sci5wcm90b3R5cGUuX3JlbW92ZVRpbGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdGlsZXNbdF07ZSYmKGUudXNlcy0tLGRlbGV0ZSB0aGlzLl90aWxlc1t0XSx0aGlzLl90aW1lcnNbdF0mJihjbGVhclRpbWVvdXQodGhpcy5fdGltZXJzW3RdKSxkZWxldGUgdGhpcy5fdGltZXJzW3RdKSxlLnVzZXM+MHx8KGUuaGFzRGF0YSgpP3RoaXMuX2NhY2hlLmFkZChlLnRpbGVJRCxlLGUuZ2V0RXhwaXJ5VGltZW91dCgpKTooZS5hYm9ydGVkPSEwLHRoaXMuX2Fib3J0VGlsZShlKSx0aGlzLl91bmxvYWRUaWxlKGUpKSkpfSxyLnByb3RvdHlwZS5jbGVhclRpbGVzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMuX3Nob3VsZFJlbG9hZE9uUmVzdW1lPSExLHRoaXMuX3BhdXNlZD0hMSx0aGlzLl90aWxlcyl0aGlzLl9yZW1vdmVUaWxlKHQpO3RoaXMuX2NhY2hlLnJlc2V0KCl9LHIucHJvdG90eXBlLnRpbGVzSW49ZnVuY3Rpb24oZSxyKXtmb3IodmFyIG49W10saT10aGlzLmdldElkcygpLGE9MS8wLG89MS8wLHM9LTEvMCxsPS0xLzAsYz1lWzBdLnpvb20sdT0wO3U8ZS5sZW5ndGg7dSsrKXt2YXIgaD1lW3VdO2E9TWF0aC5taW4oYSxoLmNvbHVtbiksbz1NYXRoLm1pbihvLGgucm93KSxzPU1hdGgubWF4KHMsaC5jb2x1bW4pLGw9TWF0aC5tYXgobCxoLnJvdyl9Zm9yKHZhciBmPTA7ZjxpLmxlbmd0aDtmKyspe3ZhciBwPXRoaXMuX3RpbGVzW2lbZl1dLGQ9cC50aWxlSUQsZz1NYXRoLnBvdygyLHRoaXMudHJhbnNmb3JtLnpvb20tcC50aWxlSUQub3ZlcnNjYWxlZFopLG09cipwLnF1ZXJ5UGFkZGluZyp0LmRlZmF1bHQkOC9wLnRpbGVTaXplL2csdj1bWHQoZCxuZXcgdC5kZWZhdWx0JDE3KGEsbyxjKSksWHQoZCxuZXcgdC5kZWZhdWx0JDE3KHMsbCxjKSldO2lmKHZbMF0ueC1tPHQuZGVmYXVsdCQ4JiZ2WzBdLnktbTx0LmRlZmF1bHQkOCYmdlsxXS54K20+PTAmJnZbMV0ueSttPj0wKXtmb3IodmFyIHk9W10seD0wO3g8ZS5sZW5ndGg7eCsrKXkucHVzaChYdChkLGVbeF0pKTtuLnB1c2goe3RpbGU6cCx0aWxlSUQ6ZCxxdWVyeUdlb21ldHJ5Olt5XSxzY2FsZTpnfSl9fXJldHVybiBufSxyLnByb3RvdHlwZS5nZXRWaXNpYmxlQ29vcmRpbmF0ZXM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcyxlPXRoaXMuZ2V0UmVuZGVyYWJsZUlkcygpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gdC5fdGlsZXNbZV0udGlsZUlEfSkscj0wLG49ZTtyPG4ubGVuZ3RoO3IrPTEpe3ZhciBpPW5bcl07aS5wb3NNYXRyaXg9dC50cmFuc2Zvcm0uY2FsY3VsYXRlUG9zTWF0cml4KGkudG9VbndyYXBwZWQoKSl9cmV0dXJuIGV9LHIucHJvdG90eXBlLmhhc1RyYW5zaXRpb249ZnVuY3Rpb24oKXtpZih0aGlzLl9zb3VyY2UuaGFzVHJhbnNpdGlvbigpKXJldHVybiEwO2lmKFp0KHRoaXMuX3NvdXJjZS50eXBlKSlmb3IodmFyIHQgaW4gdGhpcy5fdGlsZXMpe3ZhciBlPXRoaXMuX3RpbGVzW3RdO2lmKHZvaWQgMCE9PWUuZmFkZUVuZFRpbWUmJmUuZmFkZUVuZFRpbWU+PWEubm93KCkpcmV0dXJuITB9cmV0dXJuITF9LHJ9KHQuRXZlbnRlZCk7ZnVuY3Rpb24gWHQoZSxyKXt2YXIgbj1yLnpvb21UbyhlLmNhbm9uaWNhbC56KTtyZXR1cm4gbmV3IHQuZGVmYXVsdCQxKChuLmNvbHVtbi0oZS5jYW5vbmljYWwueCtlLndyYXAqTWF0aC5wb3coMixlLmNhbm9uaWNhbC56KSkpKnQuZGVmYXVsdCQ4LChuLnJvdy1lLmNhbm9uaWNhbC55KSp0LmRlZmF1bHQkOCl9ZnVuY3Rpb24gWnQodCl7cmV0dXJuInJhc3RlciI9PT10fHwiaW1hZ2UiPT09dHx8InZpZGVvIj09PXR9ZnVuY3Rpb24gJHQoKXtyZXR1cm4gbmV3IHQuZGVmYXVsdC5Xb3JrZXIoRW4ud29ya2VyVXJsKX1ZdC5tYXhPdmVyem9vbWluZz0xMCxZdC5tYXhVbmRlcnpvb21pbmc9Mzt2YXIgSnQsS3Q9ZnVuY3Rpb24oKXt0aGlzLmFjdGl2ZT17fX07ZnVuY3Rpb24gUXQoZSxyKXt2YXIgbj17fTtmb3IodmFyIGkgaW4gZSkicmVmIiE9PWkmJihuW2ldPWVbaV0pO3JldHVybiB0LmRlZmF1bHQkMTguZm9yRWFjaChmdW5jdGlvbih0KXt0IGluIHImJihuW3RdPXJbdF0pfSksbn1mdW5jdGlvbiB0ZSh0KXt0PXQuc2xpY2UoKTtmb3IodmFyIGU9T2JqZWN0LmNyZWF0ZShudWxsKSxyPTA7cjx0Lmxlbmd0aDtyKyspZVt0W3JdLmlkXT10W3JdO2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKSJyZWYiaW4gdFtuXSYmKHRbbl09UXQodFtuXSxlW3Rbbl0ucmVmXSkpO3JldHVybiB0fUt0LnByb3RvdHlwZS5hY3F1aXJlPWZ1bmN0aW9uKHQpe2lmKCF0aGlzLndvcmtlcnMpe3ZhciBlPUVuLndvcmtlckNvdW50O2Zvcih0aGlzLndvcmtlcnM9W107dGhpcy53b3JrZXJzLmxlbmd0aDxlOyl0aGlzLndvcmtlcnMucHVzaChuZXcgJHQpfXJldHVybiB0aGlzLmFjdGl2ZVt0XT0hMCx0aGlzLndvcmtlcnMuc2xpY2UoKX0sS3QucHJvdG90eXBlLnJlbGVhc2U9ZnVuY3Rpb24odCl7ZGVsZXRlIHRoaXMuYWN0aXZlW3RdLDA9PT1PYmplY3Qua2V5cyh0aGlzLmFjdGl2ZSkubGVuZ3RoJiYodGhpcy53b3JrZXJzLmZvckVhY2goZnVuY3Rpb24odCl7dC50ZXJtaW5hdGUoKX0pLHRoaXMud29ya2Vycz1udWxsKX07dmFyIGVlPXtzZXRTdHlsZToic2V0U3R5bGUiLGFkZExheWVyOiJhZGRMYXllciIscmVtb3ZlTGF5ZXI6InJlbW92ZUxheWVyIixzZXRQYWludFByb3BlcnR5OiJzZXRQYWludFByb3BlcnR5IixzZXRMYXlvdXRQcm9wZXJ0eToic2V0TGF5b3V0UHJvcGVydHkiLHNldEZpbHRlcjoic2V0RmlsdGVyIixhZGRTb3VyY2U6ImFkZFNvdXJjZSIscmVtb3ZlU291cmNlOiJyZW1vdmVTb3VyY2UiLHNldEdlb0pTT05Tb3VyY2VEYXRhOiJzZXRHZW9KU09OU291cmNlRGF0YSIsc2V0TGF5ZXJab29tUmFuZ2U6InNldExheWVyWm9vbVJhbmdlIixzZXRMYXllclByb3BlcnR5OiJzZXRMYXllclByb3BlcnR5IixzZXRDZW50ZXI6InNldENlbnRlciIsc2V0Wm9vbToic2V0Wm9vbSIsc2V0QmVhcmluZzoic2V0QmVhcmluZyIsc2V0UGl0Y2g6InNldFBpdGNoIixzZXRTcHJpdGU6InNldFNwcml0ZSIsc2V0R2x5cGhzOiJzZXRHbHlwaHMiLHNldFRyYW5zaXRpb246InNldFRyYW5zaXRpb24iLHNldExpZ2h0OiJzZXRMaWdodCJ9O2Z1bmN0aW9uIHJlKHQsZSxyKXtyLnB1c2goe2NvbW1hbmQ6ZWUuYWRkU291cmNlLGFyZ3M6W3QsZVt0XV19KX1mdW5jdGlvbiBuZSh0LGUscil7ZS5wdXNoKHtjb21tYW5kOmVlLnJlbW92ZVNvdXJjZSxhcmdzOlt0XX0pLHJbdF09ITB9ZnVuY3Rpb24gaWUodCxlLHIsbil7bmUodCxyLG4pLHJlKHQsZSxyKX1mdW5jdGlvbiBhZShlLHIsbil7dmFyIGk7Zm9yKGkgaW4gZVtuXSlpZihlW25dLmhhc093blByb3BlcnR5KGkpJiYiZGF0YSIhPT1pJiYhdC5kZWZhdWx0JDEwKGVbbl1baV0scltuXVtpXSkpcmV0dXJuITE7Zm9yKGkgaW4gcltuXSlpZihyW25dLmhhc093blByb3BlcnR5KGkpJiYiZGF0YSIhPT1pJiYhdC5kZWZhdWx0JDEwKGVbbl1baV0scltuXVtpXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gb2UoZSxyLG4saSxhLG8pe3ZhciBzO2ZvcihzIGluIHI9cnx8e30sZT1lfHx7fSllLmhhc093blByb3BlcnR5KHMpJiYodC5kZWZhdWx0JDEwKGVbc10scltzXSl8fG4ucHVzaCh7Y29tbWFuZDpvLGFyZ3M6W2kscyxyW3NdLGFdfSkpO2ZvcihzIGluIHIpci5oYXNPd25Qcm9wZXJ0eShzKSYmIWUuaGFzT3duUHJvcGVydHkocykmJih0LmRlZmF1bHQkMTAoZVtzXSxyW3NdKXx8bi5wdXNoKHtjb21tYW5kOm8sYXJnczpbaSxzLHJbc10sYV19KSl9ZnVuY3Rpb24gc2UodCl7cmV0dXJuIHQuaWR9ZnVuY3Rpb24gbGUodCxlKXtyZXR1cm4gdFtlLmlkXT1lLHR9dmFyIGNlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLmJveENlbGxzPVtdLGk9dGhpcy5jaXJjbGVDZWxscz1bXTt0aGlzLnhDZWxsQ291bnQ9TWF0aC5jZWlsKHQvciksdGhpcy55Q2VsbENvdW50PU1hdGguY2VpbChlL3IpO2Zvcih2YXIgYT0wO2E8dGhpcy54Q2VsbENvdW50KnRoaXMueUNlbGxDb3VudDthKyspbi5wdXNoKFtdKSxpLnB1c2goW10pO3RoaXMuY2lyY2xlS2V5cz1bXSx0aGlzLmJveEtleXM9W10sdGhpcy5iYm94ZXM9W10sdGhpcy5jaXJjbGVzPVtdLHRoaXMud2lkdGg9dCx0aGlzLmhlaWdodD1lLHRoaXMueFNjYWxlPXRoaXMueENlbGxDb3VudC90LHRoaXMueVNjYWxlPXRoaXMueUNlbGxDb3VudC9lLHRoaXMuYm94VWlkPTAsdGhpcy5jaXJjbGVVaWQ9MH07Y2UucHJvdG90eXBlLmtleXNMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ib3hLZXlzLmxlbmd0aCt0aGlzLmNpcmNsZUtleXMubGVuZ3RofSxjZS5wcm90b3R5cGUuaW5zZXJ0PWZ1bmN0aW9uKHQsZSxyLG4saSl7dGhpcy5fZm9yRWFjaENlbGwoZSxyLG4saSx0aGlzLl9pbnNlcnRCb3hDZWxsLHRoaXMuYm94VWlkKyspLHRoaXMuYm94S2V5cy5wdXNoKHQpLHRoaXMuYmJveGVzLnB1c2goZSksdGhpcy5iYm94ZXMucHVzaChyKSx0aGlzLmJib3hlcy5wdXNoKG4pLHRoaXMuYmJveGVzLnB1c2goaSl9LGNlLnByb3RvdHlwZS5pbnNlcnRDaXJjbGU9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5fZm9yRWFjaENlbGwoZS1uLHItbixlK24scituLHRoaXMuX2luc2VydENpcmNsZUNlbGwsdGhpcy5jaXJjbGVVaWQrKyksdGhpcy5jaXJjbGVLZXlzLnB1c2godCksdGhpcy5jaXJjbGVzLnB1c2goZSksdGhpcy5jaXJjbGVzLnB1c2gociksdGhpcy5jaXJjbGVzLnB1c2gobil9LGNlLnByb3RvdHlwZS5faW5zZXJ0Qm94Q2VsbD1mdW5jdGlvbih0LGUscixuLGksYSl7dGhpcy5ib3hDZWxsc1tpXS5wdXNoKGEpfSxjZS5wcm90b3R5cGUuX2luc2VydENpcmNsZUNlbGw9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3RoaXMuY2lyY2xlQ2VsbHNbaV0ucHVzaChhKX0sY2UucHJvdG90eXBlLl9xdWVyeT1mdW5jdGlvbih0LGUscixuLGkpe2lmKHI8MHx8dD50aGlzLndpZHRofHxuPDB8fGU+dGhpcy5oZWlnaHQpcmV0dXJuIWkmJltdO3ZhciBhPVtdO2lmKHQ8PTAmJmU8PTAmJnRoaXMud2lkdGg8PXImJnRoaXMuaGVpZ2h0PD1uKXtpZihpKXJldHVybiEwO2Zvcih2YXIgbz0wO288dGhpcy5ib3hLZXlzLmxlbmd0aDtvKyspYS5wdXNoKHtrZXk6dGhpcy5ib3hLZXlzW29dLHgxOnRoaXMuYmJveGVzWzQqb10seTE6dGhpcy5iYm94ZXNbNCpvKzFdLHgyOnRoaXMuYmJveGVzWzQqbysyXSx5Mjp0aGlzLmJib3hlc1s0Km8rM119KTtmb3IodmFyIHM9MDtzPHRoaXMuY2lyY2xlS2V5cy5sZW5ndGg7cysrKXt2YXIgbD10aGlzLmNpcmNsZXNbMypzXSxjPXRoaXMuY2lyY2xlc1szKnMrMV0sdT10aGlzLmNpcmNsZXNbMypzKzJdO2EucHVzaCh7a2V5OnRoaXMuY2lyY2xlS2V5c1tzXSx4MTpsLXUseTE6Yy11LHgyOmwrdSx5MjpjK3V9KX19ZWxzZXt2YXIgaD17aGl0VGVzdDppLHNlZW5VaWRzOntib3g6e30sY2lyY2xlOnt9fX07dGhpcy5fZm9yRWFjaENlbGwodCxlLHIsbix0aGlzLl9xdWVyeUNlbGwsYSxoKX1yZXR1cm4gaT9hLmxlbmd0aD4wOmF9LGNlLnByb3RvdHlwZS5fcXVlcnlDaXJjbGU9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dC1yLGE9dCtyLG89ZS1yLHM9ZStyO2lmKGE8MHx8aT50aGlzLndpZHRofHxzPDB8fG8+dGhpcy5oZWlnaHQpcmV0dXJuIW4mJltdO3ZhciBsPVtdLGM9e2hpdFRlc3Q6bixjaXJjbGU6e3g6dCx5OmUscmFkaXVzOnJ9LHNlZW5VaWRzOntib3g6e30sY2lyY2xlOnt9fX07cmV0dXJuIHRoaXMuX2ZvckVhY2hDZWxsKGksbyxhLHMsdGhpcy5fcXVlcnlDZWxsQ2lyY2xlLGwsYyksbj9sLmxlbmd0aD4wOmx9LGNlLnByb3RvdHlwZS5xdWVyeT1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gdGhpcy5fcXVlcnkodCxlLHIsbiwhMSl9LGNlLnByb3RvdHlwZS5oaXRUZXN0PWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0aGlzLl9xdWVyeSh0LGUscixuLCEwKX0sY2UucHJvdG90eXBlLmhpdFRlc3RDaXJjbGU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLl9xdWVyeUNpcmNsZSh0LGUsciwhMCl9LGNlLnByb3RvdHlwZS5fcXVlcnlDZWxsPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe3ZhciBzPW8uc2VlblVpZHMsbD10aGlzLmJveENlbGxzW2ldO2lmKG51bGwhPT1sKWZvcih2YXIgYz10aGlzLmJib3hlcyx1PTAsaD1sO3U8aC5sZW5ndGg7dSs9MSl7dmFyIGY9aFt1XTtpZighcy5ib3hbZl0pe3MuYm94W2ZdPSEwO3ZhciBwPTQqZjtpZih0PD1jW3ArMl0mJmU8PWNbcCszXSYmcj49Y1twKzBdJiZuPj1jW3ArMV0pe2lmKG8uaGl0VGVzdClyZXR1cm4gYS5wdXNoKCEwKSwhMDthLnB1c2goe2tleTp0aGlzLmJveEtleXNbZl0seDE6Y1twXSx5MTpjW3ArMV0seDI6Y1twKzJdLHkyOmNbcCszXX0pfX19dmFyIGQ9dGhpcy5jaXJjbGVDZWxsc1tpXTtpZihudWxsIT09ZClmb3IodmFyIGc9dGhpcy5jaXJjbGVzLG09MCx2PWQ7bTx2Lmxlbmd0aDttKz0xKXt2YXIgeT12W21dO2lmKCFzLmNpcmNsZVt5XSl7cy5jaXJjbGVbeV09ITA7dmFyIHg9Myp5O2lmKHRoaXMuX2NpcmNsZUFuZFJlY3RDb2xsaWRlKGdbeF0sZ1t4KzFdLGdbeCsyXSx0LGUscixuKSl7aWYoby5oaXRUZXN0KXJldHVybiBhLnB1c2goITApLCEwO3ZhciBiPWdbeF0sXz1nW3grMV0sdz1nW3grMl07YS5wdXNoKHtrZXk6dGhpcy5jaXJjbGVLZXlzW3ldLHgxOmItdyx5MTpfLXcseDI6Yit3LHkyOl8rd30pfX19fSxjZS5wcm90b3R5cGUuX3F1ZXJ5Q2VsbENpcmNsZT1mdW5jdGlvbih0LGUscixuLGksYSxvKXt2YXIgcz1vLmNpcmNsZSxsPW8uc2VlblVpZHMsYz10aGlzLmJveENlbGxzW2ldO2lmKG51bGwhPT1jKWZvcih2YXIgdT10aGlzLmJib3hlcyxoPTAsZj1jO2g8Zi5sZW5ndGg7aCs9MSl7dmFyIHA9ZltoXTtpZighbC5ib3hbcF0pe2wuYm94W3BdPSEwO3ZhciBkPTQqcDtpZih0aGlzLl9jaXJjbGVBbmRSZWN0Q29sbGlkZShzLngscy55LHMucmFkaXVzLHVbZCswXSx1W2QrMV0sdVtkKzJdLHVbZCszXSkpcmV0dXJuIGEucHVzaCghMCksITB9fXZhciBnPXRoaXMuY2lyY2xlQ2VsbHNbaV07aWYobnVsbCE9PWcpZm9yKHZhciBtPXRoaXMuY2lyY2xlcyx2PTAseT1nO3Y8eS5sZW5ndGg7dis9MSl7dmFyIHg9eVt2XTtpZighbC5jaXJjbGVbeF0pe2wuY2lyY2xlW3hdPSEwO3ZhciBiPTMqeDtpZih0aGlzLl9jaXJjbGVzQ29sbGlkZShtW2JdLG1bYisxXSxtW2IrMl0scy54LHMueSxzLnJhZGl1cykpcmV0dXJuIGEucHVzaCghMCksITB9fX0sY2UucHJvdG90eXBlLl9mb3JFYWNoQ2VsbD1mdW5jdGlvbih0LGUscixuLGksYSxvKXtmb3IodmFyIHM9dGhpcy5fY29udmVydFRvWENlbGxDb29yZCh0KSxsPXRoaXMuX2NvbnZlcnRUb1lDZWxsQ29vcmQoZSksYz10aGlzLl9jb252ZXJ0VG9YQ2VsbENvb3JkKHIpLHU9dGhpcy5fY29udmVydFRvWUNlbGxDb29yZChuKSxoPXM7aDw9YztoKyspZm9yKHZhciBmPWw7Zjw9dTtmKyspe3ZhciBwPXRoaXMueENlbGxDb3VudCpmK2g7aWYoaS5jYWxsKHRoaXMsdCxlLHIsbixwLGEsbykpcmV0dXJufX0sY2UucHJvdG90eXBlLl9jb252ZXJ0VG9YQ2VsbENvb3JkPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWluKHRoaXMueENlbGxDb3VudC0xLE1hdGguZmxvb3IodCp0aGlzLnhTY2FsZSkpKX0sY2UucHJvdG90eXBlLl9jb252ZXJ0VG9ZQ2VsbENvb3JkPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWluKHRoaXMueUNlbGxDb3VudC0xLE1hdGguZmxvb3IodCp0aGlzLnlTY2FsZSkpKX0sY2UucHJvdG90eXBlLl9jaXJjbGVzQ29sbGlkZT1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG89bi10LHM9aS1lLGw9cithO3JldHVybiBsKmw+bypvK3Mqc30sY2UucHJvdG90eXBlLl9jaXJjbGVBbmRSZWN0Q29sbGlkZT1mdW5jdGlvbih0LGUscixuLGksYSxvKXt2YXIgcz0oYS1uKS8yLGw9TWF0aC5hYnModC0obitzKSk7aWYobD5zK3IpcmV0dXJuITE7dmFyIGM9KG8taSkvMix1PU1hdGguYWJzKGUtKGkrYykpO2lmKHU+YytyKXJldHVybiExO2lmKGw8PXN8fHU8PWMpcmV0dXJuITA7dmFyIGg9bC1zLGY9dS1jO3JldHVybiBoKmgrZipmPD1yKnJ9O3ZhciB1ZT10LmRlZmF1bHQkMTkubGF5b3V0O2Z1bmN0aW9uIGhlKGUscixuLGksYSl7dmFyIG89dC5tYXQ0LmlkZW50aXR5KG5ldyBGbG9hdDMyQXJyYXkoMTYpKTtyZXR1cm4gcj8odC5tYXQ0LmlkZW50aXR5KG8pLHQubWF0NC5zY2FsZShvLG8sWzEvYSwxL2EsMV0pLG58fHQubWF0NC5yb3RhdGVaKG8sbyxpLmFuZ2xlKSk6KHQubWF0NC5zY2FsZShvLG8sW2kud2lkdGgvMiwtaS5oZWlnaHQvMiwxXSksdC5tYXQ0LnRyYW5zbGF0ZShvLG8sWzEsLTEsMF0pLHQubWF0NC5tdWx0aXBseShvLG8sZSkpLG99ZnVuY3Rpb24gZmUoZSxyLG4saSxhKXt2YXIgbz10Lm1hdDQuaWRlbnRpdHkobmV3IEZsb2F0MzJBcnJheSgxNikpO3JldHVybiByPyh0Lm1hdDQubXVsdGlwbHkobyxvLGUpLHQubWF0NC5zY2FsZShvLG8sW2EsYSwxXSksbnx8dC5tYXQ0LnJvdGF0ZVoobyxvLC1pLmFuZ2xlKSk6KHQubWF0NC5zY2FsZShvLG8sWzEsLTEsMV0pLHQubWF0NC50cmFuc2xhdGUobyxvLFstMSwtMSwwXSksdC5tYXQ0LnNjYWxlKG8sbyxbMi9pLndpZHRoLDIvaS5oZWlnaHQsMV0pKSxvfWZ1bmN0aW9uIHBlKGUscil7dmFyIG49W2UueCxlLnksMCwxXTtrZShuLG4scik7dmFyIGk9blszXTtyZXR1cm57cG9pbnQ6bmV3IHQuZGVmYXVsdCQxKG5bMF0vaSxuWzFdL2kpLHNpZ25lZERpc3RhbmNlRnJvbUNhbWVyYTppfX1mdW5jdGlvbiBkZSh0LGUpe3ZhciByPXRbMF0vdFszXSxuPXRbMV0vdFszXTtyZXR1cm4gcj49LWVbMF0mJnI8PWVbMF0mJm4+PS1lWzFdJiZuPD1lWzFdfWZ1bmN0aW9uIGdlKGUscixuLGksYSxvLHMsbCl7dmFyIGM9aT9lLnRleHRTaXplRGF0YTplLmljb25TaXplRGF0YSx1PXQuZXZhbHVhdGVTaXplRm9yWm9vbShjLG4udHJhbnNmb3JtLnpvb20sdWUucHJvcGVydGllc1tpPyJ0ZXh0LXNpemUiOiJpY29uLXNpemUiXSksaD1bMjU2L24ud2lkdGgqMisxLDI1Ni9uLmhlaWdodCoyKzFdLGY9aT9lLnRleHQuZHluYW1pY0xheW91dFZlcnRleEFycmF5OmUuaWNvbi5keW5hbWljTGF5b3V0VmVydGV4QXJyYXk7Zi5jbGVhcigpO2Zvcih2YXIgcD1lLmxpbmVWZXJ0ZXhBcnJheSxkPWk/ZS50ZXh0LnBsYWNlZFN5bWJvbEFycmF5OmUuaWNvbi5wbGFjZWRTeW1ib2xBcnJheSxnPW4udHJhbnNmb3JtLndpZHRoL24udHJhbnNmb3JtLmhlaWdodCxtPSExLHY9MDt2PGQubGVuZ3RoO3YrKyl7dmFyIHk9ZC5nZXQodik7aWYoeS5oaWRkZW58fHkud3JpdGluZ01vZGU9PT10LldyaXRpbmdNb2RlLnZlcnRpY2FsJiYhbSl3ZSh5Lm51bUdseXBocyxmKTtlbHNle209ITE7dmFyIHg9W3kuYW5jaG9yWCx5LmFuY2hvclksMCwxXTtpZih0LnZlYzQudHJhbnNmb3JtTWF0NCh4LHgsciksZGUoeCxoKSl7dmFyIGI9LjUreFszXS9uLnRyYW5zZm9ybS5jYW1lcmFUb0NlbnRlckRpc3RhbmNlKi41LF89dC5ldmFsdWF0ZVNpemVGb3JGZWF0dXJlKGMsdSx5KSx3PXM/XypiOl8vYixrPW5ldyB0LmRlZmF1bHQkMSh5LmFuY2hvclgseS5hbmNob3JZKSxNPXBlKGssYSkucG9pbnQsQT17fSxUPXllKHksdywhMSxsLHIsYSxvLGUuZ2x5cGhPZmZzZXRBcnJheSxwLGYsTSxrLEEsZyk7bT1ULnVzZVZlcnRpY2FsLChULm5vdEVub3VnaFJvb218fG18fFQubmVlZHNGbGlwcGluZyYmeWUoeSx3LCEwLGwscixhLG8sZS5nbHlwaE9mZnNldEFycmF5LHAsZixNLGssQSxnKS5ub3RFbm91Z2hSb29tKSYmd2UoeS5udW1HbHlwaHMsZil9ZWxzZSB3ZSh5Lm51bUdseXBocyxmKX19aT9lLnRleHQuZHluYW1pY0xheW91dFZlcnRleEJ1ZmZlci51cGRhdGVEYXRhKGYpOmUuaWNvbi5keW5hbWljTGF5b3V0VmVydGV4QnVmZmVyLnVwZGF0ZURhdGEoZil9ZnVuY3Rpb24gbWUodCxlLHIsbixpLGEsbyxzLGwsYyx1LGgpe3ZhciBmPXMuZ2x5cGhTdGFydEluZGV4K3MubnVtR2x5cGhzLHA9cy5saW5lU3RhcnRJbmRleCxkPXMubGluZVN0YXJ0SW5kZXgrcy5saW5lTGVuZ3RoLGc9ZS5nZXRvZmZzZXRYKHMuZ2x5cGhTdGFydEluZGV4KSxtPWUuZ2V0b2Zmc2V0WChmLTEpLHY9YmUodCpnLHIsbixpLGEsbyxzLnNlZ21lbnQscCxkLGwsYyx1LGgpO2lmKCF2KXJldHVybiBudWxsO3ZhciB5PWJlKHQqbSxyLG4saSxhLG8scy5zZWdtZW50LHAsZCxsLGMsdSxoKTtyZXR1cm4geT97Zmlyc3Q6dixsYXN0Onl9Om51bGx9ZnVuY3Rpb24gdmUoZSxyLG4saSl7cmV0dXJuIGU9PT10LldyaXRpbmdNb2RlLmhvcml6b250YWwmJk1hdGguYWJzKG4ueS1yLnkpPk1hdGguYWJzKG4ueC1yLngpKmk/e3VzZVZlcnRpY2FsOiEwfTooZT09PXQuV3JpdGluZ01vZGUudmVydGljYWw/ci55PG4ueTpyLng+bi54KT97bmVlZHNGbGlwcGluZzohMH06bnVsbH1mdW5jdGlvbiB5ZShlLHIsbixpLGEsbyxzLGwsYyx1LGgsZixwLGQpe3ZhciBnLG09ci8yNCx2PWUubGluZU9mZnNldFgqcix5PWUubGluZU9mZnNldFkqcjtpZihlLm51bUdseXBocz4xKXt2YXIgeD1lLmdseXBoU3RhcnRJbmRleCtlLm51bUdseXBocyxiPWUubGluZVN0YXJ0SW5kZXgsXz1lLmxpbmVTdGFydEluZGV4K2UubGluZUxlbmd0aCx3PW1lKG0sbCx2LHksbixoLGYsZSxjLG8scCwhMSk7aWYoIXcpcmV0dXJue25vdEVub3VnaFJvb206ITB9O3ZhciBrPXBlKHcuZmlyc3QucG9pbnQscykucG9pbnQsTT1wZSh3Lmxhc3QucG9pbnQscykucG9pbnQ7aWYoaSYmIW4pe3ZhciBBPXZlKGUud3JpdGluZ01vZGUsayxNLGQpO2lmKEEpcmV0dXJuIEF9Zz1bdy5maXJzdF07Zm9yKHZhciBUPWUuZ2x5cGhTdGFydEluZGV4KzE7VDx4LTE7VCsrKWcucHVzaChiZShtKmwuZ2V0b2Zmc2V0WChUKSx2LHksbixoLGYsZS5zZWdtZW50LGIsXyxjLG8scCwhMSkpO2cucHVzaCh3Lmxhc3QpfWVsc2V7aWYoaSYmIW4pe3ZhciBTPXBlKGYsYSkucG9pbnQsRT1lLmxpbmVTdGFydEluZGV4K2Uuc2VnbWVudCsxLEM9bmV3IHQuZGVmYXVsdCQxKGMuZ2V0eChFKSxjLmdldHkoRSkpLEw9cGUoQyxhKSx6PUwuc2lnbmVkRGlzdGFuY2VGcm9tQ2FtZXJhPjA/TC5wb2ludDp4ZShmLEMsUywxLGEpLFA9dmUoZS53cml0aW5nTW9kZSxTLHosZCk7aWYoUClyZXR1cm4gUH12YXIgST1iZShtKmwuZ2V0b2Zmc2V0WChlLmdseXBoU3RhcnRJbmRleCksdix5LG4saCxmLGUuc2VnbWVudCxlLmxpbmVTdGFydEluZGV4LGUubGluZVN0YXJ0SW5kZXgrZS5saW5lTGVuZ3RoLGMsbyxwLCExKTtpZighSSlyZXR1cm57bm90RW5vdWdoUm9vbTohMH07Zz1bSV19Zm9yKHZhciBPPTAsRD1nO088RC5sZW5ndGg7Tys9MSl7dmFyIFI9RFtPXTt0LmFkZER5bmFtaWNBdHRyaWJ1dGVzKHUsUi5wb2ludCxSLmFuZ2xlKX1yZXR1cm57fX1mdW5jdGlvbiB4ZSh0LGUscixuLGkpe3ZhciBhPXBlKHQuYWRkKHQuc3ViKGUpLl91bml0KCkpLGkpLnBvaW50LG89ci5zdWIoYSk7cmV0dXJuIHIuYWRkKG8uX211bHQobi9vLm1hZygpKSl9ZnVuY3Rpb24gYmUoZSxyLG4saSxhLG8scyxsLGMsdSxoLGYscCl7dmFyIGQ9aT9lLXI6ZStyLGc9ZD4wPzE6LTEsbT0wO2kmJihnKj0tMSxtPU1hdGguUEkpLGc8MCYmKG0rPU1hdGguUEkpO2Zvcih2YXIgdj1nPjA/bCtzOmwrcysxLHk9dix4PWEsYj1hLF89MCx3PTAsaz1NYXRoLmFicyhkKTtfK3c8PWs7KXtpZigodis9Zyk8bHx8dj49YylyZXR1cm4gbnVsbDtpZihiPXgsdm9pZCAwPT09KHg9Zlt2XSkpe3ZhciBNPW5ldyB0LmRlZmF1bHQkMSh1LmdldHgodiksdS5nZXR5KHYpKSxBPXBlKE0saCk7aWYoQS5zaWduZWREaXN0YW5jZUZyb21DYW1lcmE+MCl4PWZbdl09QS5wb2ludDtlbHNle3ZhciBUPXYtZzt4PXhlKDA9PT1fP286bmV3IHQuZGVmYXVsdCQxKHUuZ2V0eChUKSx1LmdldHkoVCkpLE0sYixrLV8rMSxoKX19Xys9dyx3PWIuZGlzdCh4KX12YXIgUz0oay1fKS93LEU9eC5zdWIoYiksQz1FLm11bHQoUykuX2FkZChiKTtyZXR1cm4gQy5fYWRkKEUuX3VuaXQoKS5fcGVycCgpLl9tdWx0KG4qZykpLHtwb2ludDpDLGFuZ2xlOm0rTWF0aC5hdGFuMih4LnktYi55LHgueC1iLngpLHRpbGVEaXN0YW5jZTpwP3twcmV2VGlsZURpc3RhbmNlOnYtZz09PXk/MDp1LmdldHRpbGVVbml0RGlzdGFuY2VGcm9tQW5jaG9yKHYtZyksbGFzdFNlZ21lbnRWaWV3cG9ydERpc3RhbmNlOmstX306bnVsbH19dmFyIF9lPW5ldyBGbG9hdDMyQXJyYXkoWy0xLzAsLTEvMCwwLC0xLzAsLTEvMCwwLC0xLzAsLTEvMCwwLC0xLzAsLTEvMCwwXSk7ZnVuY3Rpb24gd2UodCxlKXtmb3IodmFyIHI9MDtyPHQ7cisrKXt2YXIgbj1lLmxlbmd0aDtlLnJlc2l6ZShuKzQpLGUuZmxvYXQzMi5zZXQoX2UsMypuKX19ZnVuY3Rpb24ga2UodCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdO3JldHVybiB0WzBdPXJbMF0qbityWzRdKmkrclsxMl0sdFsxXT1yWzFdKm4rcls1XSppK3JbMTNdLHRbM109clszXSpuK3JbN10qaStyWzE1XSx0fXQuZGVmYXVsdCQyMC5tYXQ0O3ZhciBNZT1mdW5jdGlvbih0LGUscil7dm9pZCAwPT09ZSYmKGU9bmV3IGNlKHQud2lkdGgrMjAwLHQuaGVpZ2h0KzIwMCwyNSkpLHZvaWQgMD09PXImJihyPW5ldyBjZSh0LndpZHRoKzIwMCx0LmhlaWdodCsyMDAsMjUpKSx0aGlzLnRyYW5zZm9ybT10LHRoaXMuZ3JpZD1lLHRoaXMuaWdub3JlZEdyaWQ9cix0aGlzLnBpdGNoZmFjdG9yPU1hdGguY29zKHQuX3BpdGNoKSp0LmNhbWVyYVRvQ2VudGVyRGlzdGFuY2UsdGhpcy5zY3JlZW5SaWdodEJvdW5kYXJ5PXQud2lkdGgrMTAwLHRoaXMuc2NyZWVuQm90dG9tQm91bmRhcnk9dC5oZWlnaHQrMTAwfTtmdW5jdGlvbiBBZSh0LGUscil7dFtlKzRdPXI/MTowfWZ1bmN0aW9uIFRlKGUscixuKXtyZXR1cm4gcioodC5kZWZhdWx0JDgvKGUudGlsZVNpemUqTWF0aC5wb3coMixuLWUudGlsZUlELm92ZXJzY2FsZWRaKSkpfU1lLnByb3RvdHlwZS5wbGFjZUNvbGxpc2lvbkJveD1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10aGlzLnByb2plY3RBbmRHZXRQZXJzcGVjdGl2ZVJhdGlvKG4sdC5hbmNob3JQb2ludFgsdC5hbmNob3JQb2ludFkpLGE9cippLnBlcnNwZWN0aXZlUmF0aW8sbz10LngxKmEraS5wb2ludC54LHM9dC55MSphK2kucG9pbnQueSxsPXQueDIqYStpLnBvaW50LngsYz10LnkyKmEraS5wb2ludC55O3JldHVybiFlJiZ0aGlzLmdyaWQuaGl0VGVzdChvLHMsbCxjKT97Ym94OltdLG9mZnNjcmVlbjohMX06e2JveDpbbyxzLGwsY10sb2Zmc2NyZWVuOnRoaXMuaXNPZmZzY3JlZW4obyxzLGwsYyl9fSxNZS5wcm90b3R5cGUuYXBwcm94aW1hdGVUaWxlRGlzdGFuY2U9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT1pPzE6bi90aGlzLnBpdGNoZmFjdG9yLG89dC5sYXN0U2VnbWVudFZpZXdwb3J0RGlzdGFuY2UqcjtyZXR1cm4gdC5wcmV2VGlsZURpc3RhbmNlK28rKGEtMSkqbypNYXRoLmFicyhNYXRoLnNpbihlKSl9LE1lLnByb3RvdHlwZS5wbGFjZUNvbGxpc2lvbkNpcmNsZXM9ZnVuY3Rpb24oZSxyLG4saSxhLG8scyxsLGMsdSxoLGYscCl7dmFyIGQ9W10sZz10aGlzLnByb2plY3RBbmNob3IodSxvLmFuY2hvclgsby5hbmNob3JZKSxtPWMvMjQsdj1vLmxpbmVPZmZzZXRYKmMseT1vLmxpbmVPZmZzZXRZKmMseD1uZXcgdC5kZWZhdWx0JDEoby5hbmNob3JYLG8uYW5jaG9yWSksYj1tZShtLGwsdix5LCExLHBlKHgsaCkucG9pbnQseCxvLHMsaCx7fSwhMCksXz0hMSx3PSEwLGs9Zy5wZXJzcGVjdGl2ZVJhdGlvKmksTT0xLyhpKm4pLEE9MCxUPTA7YiYmKEE9dGhpcy5hcHByb3hpbWF0ZVRpbGVEaXN0YW5jZShiLmZpcnN0LnRpbGVEaXN0YW5jZSxiLmZpcnN0LmFuZ2xlLE0sZy5jYW1lcmFEaXN0YW5jZSxwKSxUPXRoaXMuYXBwcm94aW1hdGVUaWxlRGlzdGFuY2UoYi5sYXN0LnRpbGVEaXN0YW5jZSxiLmxhc3QuYW5nbGUsTSxnLmNhbWVyYURpc3RhbmNlLHApKTtmb3IodmFyIFM9MDtTPGUubGVuZ3RoO1MrPTUpe3ZhciBFPWVbU10sQz1lW1MrMV0sTD1lW1MrMl0sej1lW1MrM107aWYoIWJ8fHo8LUF8fHo+VClBZShlLFMsITEpO2Vsc2V7dmFyIFA9dGhpcy5wcm9qZWN0UG9pbnQodSxFLEMpLEk9TCprO2lmKGQubGVuZ3RoPjApe3ZhciBPPVAueC1kW2QubGVuZ3RoLTRdLEQ9UC55LWRbZC5sZW5ndGgtM107aWYoSSpJKjI+TypPK0QqRCYmUys4PGUubGVuZ3RoKXt2YXIgUj1lW1MrOF07aWYoUj4tQSYmUjxUKXtBZShlLFMsITEpO2NvbnRpbnVlfX19dmFyIEI9Uy81O2lmKGQucHVzaChQLngsUC55LEksQiksQWUoZSxTLCEwKSx3PXcmJnRoaXMuaXNPZmZzY3JlZW4oUC54LUksUC55LUksUC54K0ksUC55K0kpLCFyJiZ0aGlzLmdyaWQuaGl0VGVzdENpcmNsZShQLngsUC55LEkpKXtpZighZilyZXR1cm57Y2lyY2xlczpbXSxvZmZzY3JlZW46ITF9O189ITB9fX1yZXR1cm57Y2lyY2xlczpfP1tdOmQsb2Zmc2NyZWVuOnd9fSxNZS5wcm90b3R5cGUucXVlcnlSZW5kZXJlZFN5bWJvbHM9ZnVuY3Rpb24oZSl7aWYoMD09PWUubGVuZ3RofHwwPT09dGhpcy5ncmlkLmtleXNMZW5ndGgoKSYmMD09PXRoaXMuaWdub3JlZEdyaWQua2V5c0xlbmd0aCgpKXJldHVybnt9O2Zvcih2YXIgcj1bXSxuPTEvMCxpPTEvMCxhPS0xLzAsbz0tMS8wLHM9MCxsPWU7czxsLmxlbmd0aDtzKz0xKXt2YXIgYz1sW3NdLHU9bmV3IHQuZGVmYXVsdCQxKGMueCsxMDAsYy55KzEwMCk7bj1NYXRoLm1pbihuLHUueCksaT1NYXRoLm1pbihpLHUueSksYT1NYXRoLm1heChhLHUueCksbz1NYXRoLm1heChvLHUueSksci5wdXNoKHUpfWZvcih2YXIgaD17fSxmPXt9LHA9MCxkPXRoaXMuZ3JpZC5xdWVyeShuLGksYSxvKS5jb25jYXQodGhpcy5pZ25vcmVkR3JpZC5xdWVyeShuLGksYSxvKSk7cDxkLmxlbmd0aDtwKz0xKXt2YXIgZz1kW3BdLG09Zy5rZXk7aWYodm9pZCAwPT09aFttLmJ1Y2tldEluc3RhbmNlSWRdJiYoaFttLmJ1Y2tldEluc3RhbmNlSWRdPXt9KSwhaFttLmJ1Y2tldEluc3RhbmNlSWRdW20uZmVhdHVyZUluZGV4XSl7dmFyIHY9W25ldyB0LmRlZmF1bHQkMShnLngxLGcueTEpLG5ldyB0LmRlZmF1bHQkMShnLngyLGcueTEpLG5ldyB0LmRlZmF1bHQkMShnLngyLGcueTIpLG5ldyB0LmRlZmF1bHQkMShnLngxLGcueTIpXTt0LnBvbHlnb25JbnRlcnNlY3RzUG9seWdvbihyLHYpJiYoaFttLmJ1Y2tldEluc3RhbmNlSWRdW20uZmVhdHVyZUluZGV4XT0hMCx2b2lkIDA9PT1mW20uYnVja2V0SW5zdGFuY2VJZF0mJihmW20uYnVja2V0SW5zdGFuY2VJZF09W10pLGZbbS5idWNrZXRJbnN0YW5jZUlkXS5wdXNoKG0uZmVhdHVyZUluZGV4KSl9fXJldHVybiBmfSxNZS5wcm90b3R5cGUuaW5zZXJ0Q29sbGlzaW9uQm94PWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXtidWNrZXRJbnN0YW5jZUlkOnIsZmVhdHVyZUluZGV4Om59OyhlP3RoaXMuaWdub3JlZEdyaWQ6dGhpcy5ncmlkKS5pbnNlcnQoaSx0WzBdLHRbMV0sdFsyXSx0WzNdKX0sTWUucHJvdG90eXBlLmluc2VydENvbGxpc2lvbkNpcmNsZXM9ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPWU/dGhpcy5pZ25vcmVkR3JpZDp0aGlzLmdyaWQsYT17YnVja2V0SW5zdGFuY2VJZDpyLGZlYXR1cmVJbmRleDpufSxvPTA7bzx0Lmxlbmd0aDtvKz00KWkuaW5zZXJ0Q2lyY2xlKGEsdFtvXSx0W28rMV0sdFtvKzJdKX0sTWUucHJvdG90eXBlLnByb2plY3RBbmNob3I9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPVtlLHIsMCwxXTtyZXR1cm4ga2UobixuLHQpLHtwZXJzcGVjdGl2ZVJhdGlvOi41K3RoaXMudHJhbnNmb3JtLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2UvblszXSouNSxjYW1lcmFEaXN0YW5jZTpuWzNdfX0sTWUucHJvdG90eXBlLnByb2plY3RQb2ludD1mdW5jdGlvbihlLHIsbil7dmFyIGk9W3IsbiwwLDFdO3JldHVybiBrZShpLGksZSksbmV3IHQuZGVmYXVsdCQxKChpWzBdL2lbM10rMSkvMip0aGlzLnRyYW5zZm9ybS53aWR0aCsxMDAsKC1pWzFdL2lbM10rMSkvMip0aGlzLnRyYW5zZm9ybS5oZWlnaHQrMTAwKX0sTWUucHJvdG90eXBlLnByb2plY3RBbmRHZXRQZXJzcGVjdGl2ZVJhdGlvPWZ1bmN0aW9uKGUscixuKXt2YXIgaT1bcixuLDAsMV07cmV0dXJuIGtlKGksaSxlKSx7cG9pbnQ6bmV3IHQuZGVmYXVsdCQxKChpWzBdL2lbM10rMSkvMip0aGlzLnRyYW5zZm9ybS53aWR0aCsxMDAsKC1pWzFdL2lbM10rMSkvMip0aGlzLnRyYW5zZm9ybS5oZWlnaHQrMTAwKSxwZXJzcGVjdGl2ZVJhdGlvOi41K3RoaXMudHJhbnNmb3JtLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2UvaVszXSouNX19LE1lLnByb3RvdHlwZS5pc09mZnNjcmVlbj1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gcjwxMDB8fHQ+PXRoaXMuc2NyZWVuUmlnaHRCb3VuZGFyeXx8bjwxMDB8fGU+dGhpcy5zY3JlZW5Cb3R0b21Cb3VuZGFyeX07dmFyIFNlPXQuZGVmYXVsdCQxOS5sYXlvdXQsRWU9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5vcGFjaXR5PXQ/TWF0aC5tYXgoMCxNYXRoLm1pbigxLHQub3BhY2l0eSsodC5wbGFjZWQ/ZTotZSkpKTpuJiZyPzE6MCx0aGlzLnBsYWNlZD1yfTtFZS5wcm90b3R5cGUuaXNIaWRkZW49ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMub3BhY2l0eSYmIXRoaXMucGxhY2VkfTt2YXIgQ2U9ZnVuY3Rpb24odCxlLHIsbixpKXt0aGlzLnRleHQ9bmV3IEVlKHQ/dC50ZXh0Om51bGwsZSxyLGkpLHRoaXMuaWNvbj1uZXcgRWUodD90Lmljb246bnVsbCxlLG4saSl9O0NlLnByb3RvdHlwZS5pc0hpZGRlbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRleHQuaXNIaWRkZW4oKSYmdGhpcy5pY29uLmlzSGlkZGVuKCl9O3ZhciBMZT1mdW5jdGlvbih0LGUscil7dGhpcy50ZXh0PXQsdGhpcy5pY29uPWUsdGhpcy5za2lwRmFkZT1yfSx6ZT1mdW5jdGlvbih0LGUpe3RoaXMudHJhbnNmb3JtPXQuY2xvbmUoKSx0aGlzLmNvbGxpc2lvbkluZGV4PW5ldyBNZSh0aGlzLnRyYW5zZm9ybSksdGhpcy5wbGFjZW1lbnRzPXt9LHRoaXMub3BhY2l0aWVzPXt9LHRoaXMuc3RhbGU9ITEsdGhpcy5mYWRlRHVyYXRpb249ZSx0aGlzLnJldGFpbmVkUXVlcnlEYXRhPXt9fTtmdW5jdGlvbiBQZSh0LGUscil7dC5lbXBsYWNlQmFjayhlPzE6MCxyPzE6MCksdC5lbXBsYWNlQmFjayhlPzE6MCxyPzE6MCksdC5lbXBsYWNlQmFjayhlPzE6MCxyPzE6MCksdC5lbXBsYWNlQmFjayhlPzE6MCxyPzE6MCl9emUucHJvdG90eXBlLnBsYWNlTGF5ZXJUaWxlPWZ1bmN0aW9uKGUscixuLGkpe3ZhciBhPXIuZ2V0QnVja2V0KGUpLG89ci5sYXRlc3RGZWF0dXJlSW5kZXg7aWYoYSYmbyYmZS5pZD09PWEubGF5ZXJJZHNbMF0pe3ZhciBzPXIuY29sbGlzaW9uQm94QXJyYXksbD1hLmxheWVyc1swXS5sYXlvdXQsYz1NYXRoLnBvdygyLHRoaXMudHJhbnNmb3JtLnpvb20tci50aWxlSUQub3ZlcnNjYWxlZFopLHU9ci50aWxlU2l6ZS90LmRlZmF1bHQkOCxoPXRoaXMudHJhbnNmb3JtLmNhbGN1bGF0ZVBvc01hdHJpeChyLnRpbGVJRC50b1Vud3JhcHBlZCgpKSxmPWhlKGgsIm1hcCI9PT1sLmdldCgidGV4dC1waXRjaC1hbGlnbm1lbnQiKSwibWFwIj09PWwuZ2V0KCJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudCIpLHRoaXMudHJhbnNmb3JtLFRlKHIsMSx0aGlzLnRyYW5zZm9ybS56b29tKSkscD1oZShoLCJtYXAiPT09bC5nZXQoImljb24tcGl0Y2gtYWxpZ25tZW50IiksIm1hcCI9PT1sLmdldCgiaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnQiKSx0aGlzLnRyYW5zZm9ybSxUZShyLDEsdGhpcy50cmFuc2Zvcm0uem9vbSkpO3RoaXMucmV0YWluZWRRdWVyeURhdGFbYS5idWNrZXRJbnN0YW5jZUlkXT1uZXcgZnVuY3Rpb24odCxlLHIsbixpKXt0aGlzLmJ1Y2tldEluc3RhbmNlSWQ9dCx0aGlzLmZlYXR1cmVJbmRleD1lLHRoaXMuc291cmNlTGF5ZXJJbmRleD1yLHRoaXMuYnVja2V0SW5kZXg9bix0aGlzLnRpbGVJRD1pfShhLmJ1Y2tldEluc3RhbmNlSWQsbyxhLnNvdXJjZUxheWVySW5kZXgsYS5pbmRleCxyLnRpbGVJRCksdGhpcy5wbGFjZUxheWVyQnVja2V0KGEsaCxmLHAsYyx1LG4saSxzKX19LHplLnByb3RvdHlwZS5wbGFjZUxheWVyQnVja2V0PWZ1bmN0aW9uKGUscixuLGksYSxvLHMsbCxjKXtmb3IodmFyIHU9ZS5sYXllcnNbMF0ubGF5b3V0LGg9dC5ldmFsdWF0ZVNpemVGb3Jab29tKGUudGV4dFNpemVEYXRhLHRoaXMudHJhbnNmb3JtLnpvb20sU2UucHJvcGVydGllc1sidGV4dC1zaXplIl0pLGY9IWUuaGFzVGV4dERhdGEoKXx8dS5nZXQoInRleHQtb3B0aW9uYWwiKSxwPSFlLmhhc0ljb25EYXRhKCl8fHUuZ2V0KCJpY29uLW9wdGlvbmFsIiksZD0wLGc9ZS5zeW1ib2xJbnN0YW5jZXM7ZDxnLmxlbmd0aDtkKz0xKXt2YXIgbT1nW2RdO2lmKCFsW20uY3Jvc3NUaWxlSURdKXt2YXIgdj12b2lkIDAhPT1tLmZlYXR1cmUudGV4dCx5PXZvaWQgMCE9PW0uZmVhdHVyZS5pY29uLHg9ITAsYj1udWxsLF89bnVsbCx3PW51bGwsaz0wLE09MDttLmNvbGxpc2lvbkFycmF5c3x8KG0uY29sbGlzaW9uQXJyYXlzPWUuZGVzZXJpYWxpemVDb2xsaXNpb25Cb3hlcyhjLG0udGV4dEJveFN0YXJ0SW5kZXgsbS50ZXh0Qm94RW5kSW5kZXgsbS5pY29uQm94U3RhcnRJbmRleCxtLmljb25Cb3hFbmRJbmRleCkpLG0uY29sbGlzaW9uQXJyYXlzLnRleHRGZWF0dXJlSW5kZXgmJihrPW0uY29sbGlzaW9uQXJyYXlzLnRleHRGZWF0dXJlSW5kZXgpLG0uY29sbGlzaW9uQXJyYXlzLnRleHRCb3gmJih2PShiPXRoaXMuY29sbGlzaW9uSW5kZXgucGxhY2VDb2xsaXNpb25Cb3gobS5jb2xsaXNpb25BcnJheXMudGV4dEJveCx1LmdldCgidGV4dC1hbGxvdy1vdmVybGFwIiksbyxyKSkuYm94Lmxlbmd0aD4wLHg9eCYmYi5vZmZzY3JlZW4pO3ZhciBBPW0uY29sbGlzaW9uQXJyYXlzLnRleHRDaXJjbGVzO2lmKEEpe3ZhciBUPWUudGV4dC5wbGFjZWRTeW1ib2xBcnJheS5nZXQobS5wbGFjZWRUZXh0U3ltYm9sSW5kaWNlc1swXSksUz10LmV2YWx1YXRlU2l6ZUZvckZlYXR1cmUoZS50ZXh0U2l6ZURhdGEsaCxUKTtfPXRoaXMuY29sbGlzaW9uSW5kZXgucGxhY2VDb2xsaXNpb25DaXJjbGVzKEEsdS5nZXQoInRleHQtYWxsb3ctb3ZlcmxhcCIpLGEsbyxtLmtleSxULGUubGluZVZlcnRleEFycmF5LGUuZ2x5cGhPZmZzZXRBcnJheSxTLHIsbixzLCJtYXAiPT09dS5nZXQoInRleHQtcGl0Y2gtYWxpZ25tZW50IikpLHY9dS5nZXQoInRleHQtYWxsb3ctb3ZlcmxhcCIpfHxfLmNpcmNsZXMubGVuZ3RoPjAseD14JiZfLm9mZnNjcmVlbn1tLmNvbGxpc2lvbkFycmF5cy5pY29uRmVhdHVyZUluZGV4JiYoTT1tLmNvbGxpc2lvbkFycmF5cy5pY29uRmVhdHVyZUluZGV4KSxtLmNvbGxpc2lvbkFycmF5cy5pY29uQm94JiYoeT0odz10aGlzLmNvbGxpc2lvbkluZGV4LnBsYWNlQ29sbGlzaW9uQm94KG0uY29sbGlzaW9uQXJyYXlzLmljb25Cb3gsdS5nZXQoImljb24tYWxsb3ctb3ZlcmxhcCIpLG8scikpLmJveC5sZW5ndGg+MCx4PXgmJncub2Zmc2NyZWVuKSxmfHxwP3A/Znx8KHk9eSYmdik6dj15JiZ2Onk9dj15JiZ2LHYmJmImJnRoaXMuY29sbGlzaW9uSW5kZXguaW5zZXJ0Q29sbGlzaW9uQm94KGIuYm94LHUuZ2V0KCJ0ZXh0LWlnbm9yZS1wbGFjZW1lbnQiKSxlLmJ1Y2tldEluc3RhbmNlSWQsaykseSYmdyYmdGhpcy5jb2xsaXNpb25JbmRleC5pbnNlcnRDb2xsaXNpb25Cb3gody5ib3gsdS5nZXQoImljb24taWdub3JlLXBsYWNlbWVudCIpLGUuYnVja2V0SW5zdGFuY2VJZCxNKSx2JiZfJiZ0aGlzLmNvbGxpc2lvbkluZGV4Lmluc2VydENvbGxpc2lvbkNpcmNsZXMoXy5jaXJjbGVzLHUuZ2V0KCJ0ZXh0LWlnbm9yZS1wbGFjZW1lbnQiKSxlLmJ1Y2tldEluc3RhbmNlSWQsayksdGhpcy5wbGFjZW1lbnRzW20uY3Jvc3NUaWxlSURdPW5ldyBMZSh2LHkseHx8ZS5qdXN0UmVsb2FkZWQpLGxbbS5jcm9zc1RpbGVJRF09ITB9fWUuanVzdFJlbG9hZGVkPSExfSx6ZS5wcm90b3R5cGUuY29tbWl0PWZ1bmN0aW9uKHQsZSl7dGhpcy5jb21taXRUaW1lPWU7dmFyIHI9ITEsbj10JiYwIT09dGhpcy5mYWRlRHVyYXRpb24/KHRoaXMuY29tbWl0VGltZS10LmNvbW1pdFRpbWUpL3RoaXMuZmFkZUR1cmF0aW9uOjEsaT10P3Qub3BhY2l0aWVzOnt9O2Zvcih2YXIgYSBpbiB0aGlzLnBsYWNlbWVudHMpe3ZhciBvPXRoaXMucGxhY2VtZW50c1thXSxzPWlbYV07cz8odGhpcy5vcGFjaXRpZXNbYV09bmV3IENlKHMsbixvLnRleHQsby5pY29uKSxyPXJ8fG8udGV4dCE9PXMudGV4dC5wbGFjZWR8fG8uaWNvbiE9PXMuaWNvbi5wbGFjZWQpOih0aGlzLm9wYWNpdGllc1thXT1uZXcgQ2UobnVsbCxuLG8udGV4dCxvLmljb24sby5za2lwRmFkZSkscj1yfHxvLnRleHR8fG8uaWNvbil9Zm9yKHZhciBsIGluIGkpe3ZhciBjPWlbbF07aWYoIXRoaXMub3BhY2l0aWVzW2xdKXt2YXIgdT1uZXcgQ2UoYyxuLCExLCExKTt1LmlzSGlkZGVuKCl8fCh0aGlzLm9wYWNpdGllc1tsXT11LHI9cnx8Yy50ZXh0LnBsYWNlZHx8Yy5pY29uLnBsYWNlZCl9fXI/dGhpcy5sYXN0UGxhY2VtZW50Q2hhbmdlVGltZT1lOiJudW1iZXIiIT10eXBlb2YgdGhpcy5sYXN0UGxhY2VtZW50Q2hhbmdlVGltZSYmKHRoaXMubGFzdFBsYWNlbWVudENoYW5nZVRpbWU9dD90Lmxhc3RQbGFjZW1lbnRDaGFuZ2VUaW1lOmUpfSx6ZS5wcm90b3R5cGUudXBkYXRlTGF5ZXJPcGFjaXRpZXM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9e30sbj0wLGk9ZTtuPGkubGVuZ3RoO24rPTEpe3ZhciBhPWlbbl0sbz1hLmdldEJ1Y2tldCh0KTtvJiZhLmxhdGVzdEZlYXR1cmVJbmRleCYmdC5pZD09PW8ubGF5ZXJJZHNbMF0mJnRoaXMudXBkYXRlQnVja2V0T3BhY2l0aWVzKG8scixhLmNvbGxpc2lvbkJveEFycmF5KX19LHplLnByb3RvdHlwZS51cGRhdGVCdWNrZXRPcGFjaXRpZXM9ZnVuY3Rpb24odCxlLHIpe3QuaGFzVGV4dERhdGEoKSYmdC50ZXh0Lm9wYWNpdHlWZXJ0ZXhBcnJheS5jbGVhcigpLHQuaGFzSWNvbkRhdGEoKSYmdC5pY29uLm9wYWNpdHlWZXJ0ZXhBcnJheS5jbGVhcigpLHQuaGFzQ29sbGlzaW9uQm94RGF0YSgpJiZ0LmNvbGxpc2lvbkJveC5jb2xsaXNpb25WZXJ0ZXhBcnJheS5jbGVhcigpLHQuaGFzQ29sbGlzaW9uQ2lyY2xlRGF0YSgpJiZ0LmNvbGxpc2lvbkNpcmNsZS5jb2xsaXNpb25WZXJ0ZXhBcnJheS5jbGVhcigpO2Zvcih2YXIgbj10LmxheWVyc1swXS5sYXlvdXQsaT1uZXcgQ2UobnVsbCwwLCExLCExLCEwKSxhPW5ldyBDZShudWxsLDAsbi5nZXQoInRleHQtYWxsb3ctb3ZlcmxhcCIpLG4uZ2V0KCJpY29uLWFsbG93LW92ZXJsYXAiKSwhMCksbz0wO288dC5zeW1ib2xJbnN0YW5jZXMubGVuZ3RoO28rKyl7dmFyIHM9dC5zeW1ib2xJbnN0YW5jZXNbb10sbD1lW3MuY3Jvc3NUaWxlSURdLGM9dGhpcy5vcGFjaXRpZXNbcy5jcm9zc1RpbGVJRF07bD9jPWk6Y3x8KGM9YSx0aGlzLm9wYWNpdGllc1tzLmNyb3NzVGlsZUlEXT1jKSxlW3MuY3Jvc3NUaWxlSURdPSEwO3ZhciB1PXMubnVtR2x5cGhWZXJ0aWNlcz4wfHxzLm51bVZlcnRpY2FsR2x5cGhWZXJ0aWNlcz4wLGg9cy5udW1JY29uVmVydGljZXM+MDtpZih1KXtmb3IodmFyIGY9amUoYy50ZXh0KSxwPShzLm51bUdseXBoVmVydGljZXMrcy5udW1WZXJ0aWNhbEdseXBoVmVydGljZXMpLzQsZD0wO2Q8cDtkKyspdC50ZXh0Lm9wYWNpdHlWZXJ0ZXhBcnJheS5lbXBsYWNlQmFjayhmKTtmb3IodmFyIGc9MCxtPXMucGxhY2VkVGV4dFN5bWJvbEluZGljZXM7ZzxtLmxlbmd0aDtnKz0xKXt2YXIgdj1tW2ddO3QudGV4dC5wbGFjZWRTeW1ib2xBcnJheS5nZXQodikuaGlkZGVuPWMudGV4dC5pc0hpZGRlbigpfX1pZihoKXtmb3IodmFyIHk9amUoYy5pY29uKSx4PTA7eDxzLm51bUljb25WZXJ0aWNlcy80O3grKyl0Lmljb24ub3BhY2l0eVZlcnRleEFycmF5LmVtcGxhY2VCYWNrKHkpO3QuaWNvbi5wbGFjZWRTeW1ib2xBcnJheS5nZXQobykuaGlkZGVuPWMuaWNvbi5pc0hpZGRlbigpfXMuY29sbGlzaW9uQXJyYXlzfHwocy5jb2xsaXNpb25BcnJheXM9dC5kZXNlcmlhbGl6ZUNvbGxpc2lvbkJveGVzKHIscy50ZXh0Qm94U3RhcnRJbmRleCxzLnRleHRCb3hFbmRJbmRleCxzLmljb25Cb3hTdGFydEluZGV4LHMuaWNvbkJveEVuZEluZGV4KSk7dmFyIGI9cy5jb2xsaXNpb25BcnJheXM7aWYoYil7Yi50ZXh0Qm94JiZ0Lmhhc0NvbGxpc2lvbkJveERhdGEoKSYmUGUodC5jb2xsaXNpb25Cb3guY29sbGlzaW9uVmVydGV4QXJyYXksYy50ZXh0LnBsYWNlZCwhMSksYi5pY29uQm94JiZ0Lmhhc0NvbGxpc2lvbkJveERhdGEoKSYmUGUodC5jb2xsaXNpb25Cb3guY29sbGlzaW9uVmVydGV4QXJyYXksYy5pY29uLnBsYWNlZCwhMSk7dmFyIF89Yi50ZXh0Q2lyY2xlcztpZihfJiZ0Lmhhc0NvbGxpc2lvbkNpcmNsZURhdGEoKSlmb3IodmFyIHc9MDt3PF8ubGVuZ3RoO3crPTUpe3ZhciBrPWx8fDA9PT1fW3crNF07UGUodC5jb2xsaXNpb25DaXJjbGUuY29sbGlzaW9uVmVydGV4QXJyYXksYy50ZXh0LnBsYWNlZCxrKX19fXQuc29ydEZlYXR1cmVzKHRoaXMudHJhbnNmb3JtLmFuZ2xlKSx0aGlzLnJldGFpbmVkUXVlcnlEYXRhW3QuYnVja2V0SW5zdGFuY2VJZF0mJih0aGlzLnJldGFpbmVkUXVlcnlEYXRhW3QuYnVja2V0SW5zdGFuY2VJZF0uZmVhdHVyZVNvcnRPcmRlcj10LmZlYXR1cmVTb3J0T3JkZXIpLHQuaGFzVGV4dERhdGEoKSYmdC50ZXh0Lm9wYWNpdHlWZXJ0ZXhCdWZmZXImJnQudGV4dC5vcGFjaXR5VmVydGV4QnVmZmVyLnVwZGF0ZURhdGEodC50ZXh0Lm9wYWNpdHlWZXJ0ZXhBcnJheSksdC5oYXNJY29uRGF0YSgpJiZ0Lmljb24ub3BhY2l0eVZlcnRleEJ1ZmZlciYmdC5pY29uLm9wYWNpdHlWZXJ0ZXhCdWZmZXIudXBkYXRlRGF0YSh0Lmljb24ub3BhY2l0eVZlcnRleEFycmF5KSx0Lmhhc0NvbGxpc2lvbkJveERhdGEoKSYmdC5jb2xsaXNpb25Cb3guY29sbGlzaW9uVmVydGV4QnVmZmVyJiZ0LmNvbGxpc2lvbkJveC5jb2xsaXNpb25WZXJ0ZXhCdWZmZXIudXBkYXRlRGF0YSh0LmNvbGxpc2lvbkJveC5jb2xsaXNpb25WZXJ0ZXhBcnJheSksdC5oYXNDb2xsaXNpb25DaXJjbGVEYXRhKCkmJnQuY29sbGlzaW9uQ2lyY2xlLmNvbGxpc2lvblZlcnRleEJ1ZmZlciYmdC5jb2xsaXNpb25DaXJjbGUuY29sbGlzaW9uVmVydGV4QnVmZmVyLnVwZGF0ZURhdGEodC5jb2xsaXNpb25DaXJjbGUuY29sbGlzaW9uVmVydGV4QXJyYXkpfSx6ZS5wcm90b3R5cGUuc3ltYm9sRmFkZUNoYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gMD09PXRoaXMuZmFkZUR1cmF0aW9uPzE6KHQtdGhpcy5jb21taXRUaW1lKS90aGlzLmZhZGVEdXJhdGlvbn0semUucHJvdG90eXBlLmhhc1RyYW5zaXRpb25zPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnN0YWxlfHx0LXRoaXMubGFzdFBsYWNlbWVudENoYW5nZVRpbWU8dGhpcy5mYWRlRHVyYXRpb259LHplLnByb3RvdHlwZS5zdGlsbFJlY2VudD1mdW5jdGlvbih0KXtyZXR1cm4idW5kZWZpbmVkIiE9PXRoaXMuY29tbWl0VGltZSYmdGhpcy5jb21taXRUaW1lK3RoaXMuZmFkZUR1cmF0aW9uPnR9LHplLnByb3RvdHlwZS5zZXRTdGFsZT1mdW5jdGlvbigpe3RoaXMuc3RhbGU9ITB9O3ZhciBJZT1NYXRoLnBvdygyLDI1KSxPZT1NYXRoLnBvdygyLDI0KSxEZT1NYXRoLnBvdygyLDE3KSxSZT1NYXRoLnBvdygyLDE2KSxCZT1NYXRoLnBvdygyLDkpLEZlPU1hdGgucG93KDIsOCksTmU9TWF0aC5wb3coMiwxKTtmdW5jdGlvbiBqZSh0KXtpZigwPT09dC5vcGFjaXR5JiYhdC5wbGFjZWQpcmV0dXJuIDA7aWYoMT09PXQub3BhY2l0eSYmdC5wbGFjZWQpcmV0dXJuIDQyOTQ5NjcyOTU7dmFyIGU9dC5wbGFjZWQ/MTowLHI9TWF0aC5mbG9vcigxMjcqdC5vcGFjaXR5KTtyZXR1cm4gcipJZStlKk9lK3IqRGUrZSpSZStyKkJlK2UqRmUrcipOZStlfXZhciBWZT1mdW5jdGlvbigpe3RoaXMuX2N1cnJlbnRUaWxlSW5kZXg9MCx0aGlzLl9zZWVuQ3Jvc3NUaWxlSURzPXt9fTtWZS5wcm90b3R5cGUuY29udGludWVQbGFjZW1lbnQ9ZnVuY3Rpb24odCxlLHIsbixpKXtmb3IoO3RoaXMuX2N1cnJlbnRUaWxlSW5kZXg8dC5sZW5ndGg7KXt2YXIgYT10W3RoaXMuX2N1cnJlbnRUaWxlSW5kZXhdO2lmKGUucGxhY2VMYXllclRpbGUobixhLHIsdGhpcy5fc2VlbkNyb3NzVGlsZUlEcyksdGhpcy5fY3VycmVudFRpbGVJbmRleCsrLGkoKSlyZXR1cm4hMH19O3ZhciBVZT1mdW5jdGlvbih0LGUscixuLGkpe3RoaXMucGxhY2VtZW50PW5ldyB6ZSh0LGkpLHRoaXMuX2N1cnJlbnRQbGFjZW1lbnRJbmRleD1lLmxlbmd0aC0xLHRoaXMuX2ZvcmNlRnVsbFBsYWNlbWVudD1yLHRoaXMuX3Nob3dDb2xsaXNpb25Cb3hlcz1uLHRoaXMuX2RvbmU9ITF9O1VlLnByb3RvdHlwZS5pc0RvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZG9uZX0sVWUucHJvdG90eXBlLmNvbnRpbnVlUGxhY2VtZW50PWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49dGhpcyxpPWEubm93KCksbz1mdW5jdGlvbigpe3ZhciB0PWEubm93KCktaTtyZXR1cm4hbi5fZm9yY2VGdWxsUGxhY2VtZW50JiZ0PjJ9O3RoaXMuX2N1cnJlbnRQbGFjZW1lbnRJbmRleD49MDspe3ZhciBzPWVbdFtuLl9jdXJyZW50UGxhY2VtZW50SW5kZXhdXSxsPW4ucGxhY2VtZW50LmNvbGxpc2lvbkluZGV4LnRyYW5zZm9ybS56b29tO2lmKCJzeW1ib2wiPT09cy50eXBlJiYoIXMubWluem9vbXx8cy5taW56b29tPD1sKSYmKCFzLm1heHpvb218fHMubWF4em9vbT5sKSl7aWYobi5faW5Qcm9ncmVzc0xheWVyfHwobi5faW5Qcm9ncmVzc0xheWVyPW5ldyBWZSksbi5faW5Qcm9ncmVzc0xheWVyLmNvbnRpbnVlUGxhY2VtZW50KHJbcy5zb3VyY2VdLG4ucGxhY2VtZW50LG4uX3Nob3dDb2xsaXNpb25Cb3hlcyxzLG8pKXJldHVybjtkZWxldGUgbi5faW5Qcm9ncmVzc0xheWVyfW4uX2N1cnJlbnRQbGFjZW1lbnRJbmRleC0tfXRoaXMuX2RvbmU9ITB9LFVlLnByb3RvdHlwZS5jb21taXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5wbGFjZW1lbnQuY29tbWl0KHQsZSksdGhpcy5wbGFjZW1lbnR9O3ZhciBxZT01MTIvdC5kZWZhdWx0JDgvMixIZT1mdW5jdGlvbih0LGUscil7dGhpcy50aWxlSUQ9dCx0aGlzLmluZGV4ZWRTeW1ib2xJbnN0YW5jZXM9e30sdGhpcy5idWNrZXRJbnN0YW5jZUlkPXI7Zm9yKHZhciBuPTAsaT1lO248aS5sZW5ndGg7bis9MSl7dmFyIGE9aVtuXSxvPWEua2V5O3RoaXMuaW5kZXhlZFN5bWJvbEluc3RhbmNlc1tvXXx8KHRoaXMuaW5kZXhlZFN5bWJvbEluc3RhbmNlc1tvXT1bXSksdGhpcy5pbmRleGVkU3ltYm9sSW5zdGFuY2VzW29dLnB1c2goe2Nyb3NzVGlsZUlEOmEuY3Jvc3NUaWxlSUQsY29vcmQ6dGhpcy5nZXRTY2FsZWRDb29yZGluYXRlcyhhLHQpfSl9fTtIZS5wcm90b3R5cGUuZ2V0U2NhbGVkQ29vcmRpbmF0ZXM9ZnVuY3Rpb24oZSxyKXt2YXIgbj1yLmNhbm9uaWNhbC56LXRoaXMudGlsZUlELmNhbm9uaWNhbC56LGk9cWUvTWF0aC5wb3coMixuKSxhPWUuYW5jaG9yO3JldHVybnt4Ok1hdGguZmxvb3IoKHIuY2Fub25pY2FsLngqdC5kZWZhdWx0JDgrYS54KSppKSx5Ok1hdGguZmxvb3IoKHIuY2Fub25pY2FsLnkqdC5kZWZhdWx0JDgrYS55KSppKX19LEhlLnByb3RvdHlwZS5maW5kTWF0Y2hlcz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPXRoaXMudGlsZUlELmNhbm9uaWNhbC56PGUuY2Fub25pY2FsLno/MTpNYXRoLnBvdygyLHRoaXMudGlsZUlELmNhbm9uaWNhbC56LWUuY2Fub25pY2FsLnopLGk9MCxhPXQ7aTxhLmxlbmd0aDtpKz0xKXt2YXIgbz1hW2ldO2lmKCFvLmNyb3NzVGlsZUlEKXt2YXIgcz10aGlzLmluZGV4ZWRTeW1ib2xJbnN0YW5jZXNbby5rZXldO2lmKHMpZm9yKHZhciBsPXRoaXMuZ2V0U2NhbGVkQ29vcmRpbmF0ZXMobyxlKSxjPTAsdT1zO2M8dS5sZW5ndGg7Yys9MSl7dmFyIGg9dVtjXTtpZihNYXRoLmFicyhoLmNvb3JkLngtbC54KTw9biYmTWF0aC5hYnMoaC5jb29yZC55LWwueSk8PW4mJiFyW2guY3Jvc3NUaWxlSURdKXtyW2guY3Jvc3NUaWxlSURdPSEwLG8uY3Jvc3NUaWxlSUQ9aC5jcm9zc1RpbGVJRDticmVha319fX19O3ZhciBHZT1mdW5jdGlvbigpe3RoaXMubWF4Q3Jvc3NUaWxlSUQ9MH07R2UucHJvdG90eXBlLmdlbmVyYXRlPWZ1bmN0aW9uKCl7cmV0dXJuKyt0aGlzLm1heENyb3NzVGlsZUlEfTt2YXIgV2U9ZnVuY3Rpb24oKXt0aGlzLmluZGV4ZXM9e30sdGhpcy51c2VkQ3Jvc3NUaWxlSURzPXt9LHRoaXMubG5nPTB9O1dlLnByb3RvdHlwZS5oYW5kbGVXcmFwSnVtcD1mdW5jdGlvbih0KXt2YXIgZT1NYXRoLnJvdW5kKCh0LXRoaXMubG5nKS8zNjApO2lmKDAhPT1lKWZvcih2YXIgciBpbiB0aGlzLmluZGV4ZXMpe3ZhciBuPXRoaXMuaW5kZXhlc1tyXSxpPXt9O2Zvcih2YXIgYSBpbiBuKXt2YXIgbz1uW2FdO28udGlsZUlEPW8udGlsZUlELnVud3JhcFRvKG8udGlsZUlELndyYXArZSksaVtvLnRpbGVJRC5rZXldPW99dGhpcy5pbmRleGVzW3JdPWl9dGhpcy5sbmc9dH0sV2UucHJvdG90eXBlLmFkZEJ1Y2tldD1mdW5jdGlvbih0LGUscil7aWYodGhpcy5pbmRleGVzW3Qub3ZlcnNjYWxlZFpdJiZ0aGlzLmluZGV4ZXNbdC5vdmVyc2NhbGVkWl1bdC5rZXldKXtpZih0aGlzLmluZGV4ZXNbdC5vdmVyc2NhbGVkWl1bdC5rZXldLmJ1Y2tldEluc3RhbmNlSWQ9PT1lLmJ1Y2tldEluc3RhbmNlSWQpcmV0dXJuITE7dGhpcy5yZW1vdmVCdWNrZXRDcm9zc1RpbGVJRHModC5vdmVyc2NhbGVkWix0aGlzLmluZGV4ZXNbdC5vdmVyc2NhbGVkWl1bdC5rZXldKX1mb3IodmFyIG49MCxpPWUuc3ltYm9sSW5zdGFuY2VzO248aS5sZW5ndGg7bis9MSlpW25dLmNyb3NzVGlsZUlEPTA7dGhpcy51c2VkQ3Jvc3NUaWxlSURzW3Qub3ZlcnNjYWxlZFpdfHwodGhpcy51c2VkQ3Jvc3NUaWxlSURzW3Qub3ZlcnNjYWxlZFpdPXt9KTt2YXIgYT10aGlzLnVzZWRDcm9zc1RpbGVJRHNbdC5vdmVyc2NhbGVkWl07Zm9yKHZhciBvIGluIHRoaXMuaW5kZXhlcyl7dmFyIHM9dGhpcy5pbmRleGVzW29dO2lmKE51bWJlcihvKT50Lm92ZXJzY2FsZWRaKWZvcih2YXIgbCBpbiBzKXt2YXIgYz1zW2xdO2MudGlsZUlELmlzQ2hpbGRPZih0KSYmYy5maW5kTWF0Y2hlcyhlLnN5bWJvbEluc3RhbmNlcyx0LGEpfWVsc2V7dmFyIHU9c1t0LnNjYWxlZFRvKE51bWJlcihvKSkua2V5XTt1JiZ1LmZpbmRNYXRjaGVzKGUuc3ltYm9sSW5zdGFuY2VzLHQsYSl9fWZvcih2YXIgaD0wLGY9ZS5zeW1ib2xJbnN0YW5jZXM7aDxmLmxlbmd0aDtoKz0xKXt2YXIgcD1mW2hdO3AuY3Jvc3NUaWxlSUR8fChwLmNyb3NzVGlsZUlEPXIuZ2VuZXJhdGUoKSxhW3AuY3Jvc3NUaWxlSURdPSEwKX1yZXR1cm4gdm9pZCAwPT09dGhpcy5pbmRleGVzW3Qub3ZlcnNjYWxlZFpdJiYodGhpcy5pbmRleGVzW3Qub3ZlcnNjYWxlZFpdPXt9KSx0aGlzLmluZGV4ZXNbdC5vdmVyc2NhbGVkWl1bdC5rZXldPW5ldyBIZSh0LGUuc3ltYm9sSW5zdGFuY2VzLGUuYnVja2V0SW5zdGFuY2VJZCksITB9LFdlLnByb3RvdHlwZS5yZW1vdmVCdWNrZXRDcm9zc1RpbGVJRHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIgaW4gZS5pbmRleGVkU3ltYm9sSW5zdGFuY2VzKWZvcih2YXIgbj0wLGk9ZS5pbmRleGVkU3ltYm9sSW5zdGFuY2VzW3JdO248aS5sZW5ndGg7bis9MSl7dmFyIGE9aVtuXTtkZWxldGUgdGhpcy51c2VkQ3Jvc3NUaWxlSURzW3RdW2EuY3Jvc3NUaWxlSURdfX0sV2UucHJvdG90eXBlLnJlbW92ZVN0YWxlQnVja2V0cz1mdW5jdGlvbih0KXt2YXIgZT0hMTtmb3IodmFyIHIgaW4gdGhpcy5pbmRleGVzKXt2YXIgbj10aGlzLmluZGV4ZXNbcl07Zm9yKHZhciBpIGluIG4pdFtuW2ldLmJ1Y2tldEluc3RhbmNlSWRdfHwodGhpcy5yZW1vdmVCdWNrZXRDcm9zc1RpbGVJRHMocixuW2ldKSxkZWxldGUgbltpXSxlPSEwKX1yZXR1cm4gZX07dmFyIFllPWZ1bmN0aW9uKCl7dGhpcy5sYXllckluZGV4ZXM9e30sdGhpcy5jcm9zc1RpbGVJRHM9bmV3IEdlLHRoaXMubWF4QnVja2V0SW5zdGFuY2VJZD0wLHRoaXMuYnVja2V0c0luQ3VycmVudFBsYWNlbWVudD17fX07WWUucHJvdG90eXBlLmFkZExheWVyPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLmxheWVySW5kZXhlc1t0LmlkXTt2b2lkIDA9PT1uJiYobj10aGlzLmxheWVySW5kZXhlc1t0LmlkXT1uZXcgV2UpO3ZhciBpPSExLGE9e307bi5oYW5kbGVXcmFwSnVtcChyKTtmb3IodmFyIG89MCxzPWU7bzxzLmxlbmd0aDtvKz0xKXt2YXIgbD1zW29dLGM9bC5nZXRCdWNrZXQodCk7YyYmdC5pZD09PWMubGF5ZXJJZHNbMF0mJihjLmJ1Y2tldEluc3RhbmNlSWR8fChjLmJ1Y2tldEluc3RhbmNlSWQ9Kyt0aGlzLm1heEJ1Y2tldEluc3RhbmNlSWQpLG4uYWRkQnVja2V0KGwudGlsZUlELGMsdGhpcy5jcm9zc1RpbGVJRHMpJiYoaT0hMCksYVtjLmJ1Y2tldEluc3RhbmNlSWRdPSEwKX1yZXR1cm4gbi5yZW1vdmVTdGFsZUJ1Y2tldHMoYSkmJihpPSEwKSxpfSxZZS5wcm90b3R5cGUucHJ1bmVVbnVzZWRMYXllcnM9ZnVuY3Rpb24odCl7dmFyIGU9e307Zm9yKHZhciByIGluIHQuZm9yRWFjaChmdW5jdGlvbih0KXtlW3RdPSEwfSksdGhpcy5sYXllckluZGV4ZXMpZVtyXXx8ZGVsZXRlIHRoaXMubGF5ZXJJbmRleGVzW3JdfTt2YXIgWGU9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5lbWl0VmFsaWRhdGlvbkVycm9ycyhlLHImJnIuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiJzb3VyY2UuY2FudmFzIiE9PXQuaWRlbnRpZmllcn0pKX0sWmU9dC5waWNrKGVlLFsiYWRkTGF5ZXIiLCJyZW1vdmVMYXllciIsInNldFBhaW50UHJvcGVydHkiLCJzZXRMYXlvdXRQcm9wZXJ0eSIsInNldEZpbHRlciIsImFkZFNvdXJjZSIsInJlbW92ZVNvdXJjZSIsInNldExheWVyWm9vbVJhbmdlIiwic2V0TGlnaHQiLCJzZXRUcmFuc2l0aW9uIiwic2V0R2VvSlNPTlNvdXJjZURhdGEiXSksJGU9dC5waWNrKGVlLFsic2V0Q2VudGVyIiwic2V0Wm9vbSIsInNldEJlYXJpbmciLCJzZXRQaXRjaCJdKSxKZT1mdW5jdGlvbihlKXtmdW5jdGlvbiByKG4saSl7dmFyIGE9dGhpczt2b2lkIDA9PT1pJiYoaT17fSksZS5jYWxsKHRoaXMpLHRoaXMubWFwPW4sdGhpcy5kaXNwYXRjaGVyPW5ldyBxKChKdHx8KEp0PW5ldyBLdCksSnQpLHRoaXMpLHRoaXMuaW1hZ2VNYW5hZ2VyPW5ldyBQLHRoaXMuZ2x5cGhNYW5hZ2VyPW5ldyBGKG4uX3RyYW5zZm9ybVJlcXVlc3QsaS5sb2NhbElkZW9ncmFwaEZvbnRGYW1pbHkpLHRoaXMubGluZUF0bGFzPW5ldyBVKDI1Niw1MTIpLHRoaXMuY3Jvc3NUaWxlU3ltYm9sSW5kZXg9bmV3IFllLHRoaXMuX2xheWVycz17fSx0aGlzLl9vcmRlcj1bXSx0aGlzLnNvdXJjZUNhY2hlcz17fSx0aGlzLnpvb21IaXN0b3J5PW5ldyB0LmRlZmF1bHQkMjMsdGhpcy5fbG9hZGVkPSExLHRoaXMuX3Jlc2V0VXBkYXRlcygpO3ZhciBvPXRoaXM7dGhpcy5fcnRsVGV4dFBsdWdpbkNhbGxiYWNrPXIucmVnaXN0ZXJGb3JQbHVnaW5BdmFpbGFiaWxpdHkoZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIG8uZGlzcGF0Y2hlci5icm9hZGNhc3QoImxvYWRSVExUZXh0UGx1Z2luIix0LnBsdWdpblVSTCx0LmNvbXBsZXRpb25DYWxsYmFjayksby5zb3VyY2VDYWNoZXMpby5zb3VyY2VDYWNoZXNbZV0ucmVsb2FkKCl9KSx0aGlzLm9uKCJkYXRhIixmdW5jdGlvbih0KXtpZigic291cmNlIj09PXQuZGF0YVR5cGUmJiJtZXRhZGF0YSI9PT10LnNvdXJjZURhdGFUeXBlKXt2YXIgZT1hLnNvdXJjZUNhY2hlc1t0LnNvdXJjZUlkXTtpZihlKXt2YXIgcj1lLmdldFNvdXJjZSgpO2lmKHImJnIudmVjdG9yTGF5ZXJJZHMpZm9yKHZhciBuIGluIGEuX2xheWVycyl7dmFyIGk9YS5fbGF5ZXJzW25dO2kuc291cmNlPT09ci5pZCYmYS5fdmFsaWRhdGVMYXllcihpKX19fX0pfXJldHVybiBlJiYoci5fX3Byb3RvX189ZSksci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksci5wcm90b3R5cGUuY29uc3RydWN0b3I9cixyLnByb3RvdHlwZS5sb2FkVVJMPWZ1bmN0aW9uKGUscil7dmFyIG49dGhpczt2b2lkIDA9PT1yJiYocj17fSksdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJkYXRhbG9hZGluZyIse2RhdGFUeXBlOiJzdHlsZSJ9KSk7dmFyIGk9ImJvb2xlYW4iPT10eXBlb2Ygci52YWxpZGF0ZT9yLnZhbGlkYXRlOiF4KGUpO2U9ZnVuY3Rpb24odCxlKXtpZigheCh0KSlyZXR1cm4gdDt2YXIgcj1BKHQpO3JldHVybiByLnBhdGg9Ii9zdHlsZXMvdjEiK3IucGF0aCx5KHIsZSl9KGUsci5hY2Nlc3NUb2tlbik7dmFyIGE9dGhpcy5tYXAuX3RyYW5zZm9ybVJlcXVlc3QoZSx0LlJlc291cmNlVHlwZS5TdHlsZSk7dC5nZXRKU09OKGEsZnVuY3Rpb24oZSxyKXtlP24uZmlyZShuZXcgdC5FcnJvckV2ZW50KGUpKTpyJiZuLl9sb2FkKHIsaSl9KX0sci5wcm90b3R5cGUubG9hZEpTT049ZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzO3ZvaWQgMD09PXImJihyPXt9KSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoImRhdGFsb2FkaW5nIix7ZGF0YVR5cGU6InN0eWxlIn0pKSxhLmZyYW1lKGZ1bmN0aW9uKCl7bi5fbG9hZChlLCExIT09ci52YWxpZGF0ZSl9KX0sci5wcm90b3R5cGUuX2xvYWQ9ZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzO2lmKCFyfHwhWGUodGhpcyx0LnZhbGlkYXRlU3R5bGUoZSkpKXtmb3IodmFyIGkgaW4gdGhpcy5fbG9hZGVkPSEwLHRoaXMuc3R5bGVzaGVldD1lLGUuc291cmNlcyluLmFkZFNvdXJjZShpLGUuc291cmNlc1tpXSx7dmFsaWRhdGU6ITF9KTtlLnNwcml0ZT9mdW5jdGlvbihlLHIsbil7dmFyIGksbyxzLGw9YS5kZXZpY2VQaXhlbFJhdGlvPjE/IkAyeCI6IiI7ZnVuY3Rpb24gYygpe2lmKHMpbihzKTtlbHNlIGlmKGkmJm8pe3ZhciBlPWEuZ2V0SW1hZ2VEYXRhKG8pLHI9e307Zm9yKHZhciBsIGluIGkpe3ZhciBjPWlbbF0sdT1jLndpZHRoLGg9Yy5oZWlnaHQsZj1jLngscD1jLnksZD1jLnNkZixnPWMucGl4ZWxSYXRpbyxtPW5ldyB0LlJHQkFJbWFnZSh7d2lkdGg6dSxoZWlnaHQ6aH0pO3QuUkdCQUltYWdlLmNvcHkoZSxtLHt4OmYseTpwfSx7eDowLHk6MH0se3dpZHRoOnUsaGVpZ2h0Omh9KSxyW2xdPXtkYXRhOm0scGl4ZWxSYXRpbzpnLHNkZjpkfX1uKG51bGwscil9fXQuZ2V0SlNPTihyKF8oZSxsLCIuanNvbiIpLHQuUmVzb3VyY2VUeXBlLlNwcml0ZUpTT04pLGZ1bmN0aW9uKHQsZSl7c3x8KHM9dCxpPWUsYygpKX0pLHQuZ2V0SW1hZ2UocihfKGUsbCwiLnBuZyIpLHQuUmVzb3VyY2VUeXBlLlNwcml0ZUltYWdlKSxmdW5jdGlvbih0LGUpe3N8fChzPXQsbz1lLGMoKSl9KX0oZS5zcHJpdGUsdGhpcy5tYXAuX3RyYW5zZm9ybVJlcXVlc3QsZnVuY3Rpb24oZSxyKXtpZihlKW4uZmlyZShuZXcgdC5FcnJvckV2ZW50KGUpKTtlbHNlIGlmKHIpZm9yKHZhciBpIGluIHIpbi5pbWFnZU1hbmFnZXIuYWRkSW1hZ2UoaSxyW2ldKTtuLmltYWdlTWFuYWdlci5zZXRMb2FkZWQoITApLG4uZmlyZShuZXcgdC5FdmVudCgiZGF0YSIse2RhdGFUeXBlOiJzdHlsZSJ9KSl9KTp0aGlzLmltYWdlTWFuYWdlci5zZXRMb2FkZWQoITApLHRoaXMuZ2x5cGhNYW5hZ2VyLnNldFVSTChlLmdseXBocyk7dmFyIG89dGUodGhpcy5zdHlsZXNoZWV0LmxheWVycyk7dGhpcy5fb3JkZXI9by5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuaWR9KSx0aGlzLl9sYXllcnM9e307Zm9yKHZhciBzPTAsbD1vO3M8bC5sZW5ndGg7cys9MSl7dmFyIGM9bFtzXTsoYz10LmRlZmF1bHQkMjIoYykpLnNldEV2ZW50ZWRQYXJlbnQobix7bGF5ZXI6e2lkOmMuaWR9fSksbi5fbGF5ZXJzW2MuaWRdPWN9dGhpcy5kaXNwYXRjaGVyLmJyb2FkY2FzdCgic2V0TGF5ZXJzIix0aGlzLl9zZXJpYWxpemVMYXllcnModGhpcy5fb3JkZXIpKSx0aGlzLmxpZ2h0PW5ldyBWKHRoaXMuc3R5bGVzaGVldC5saWdodCksdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJkYXRhIix7ZGF0YVR5cGU6InN0eWxlIn0pKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoInN0eWxlLmxvYWQiKSl9fSxyLnByb3RvdHlwZS5fdmFsaWRhdGVMYXllcj1mdW5jdGlvbihlKXt2YXIgcj10aGlzLnNvdXJjZUNhY2hlc1tlLnNvdXJjZV07aWYocil7dmFyIG49ZS5zb3VyY2VMYXllcjtpZihuKXt2YXIgaT1yLmdldFNvdXJjZSgpOygiZ2VvanNvbiI9PT1pLnR5cGV8fGkudmVjdG9yTGF5ZXJJZHMmJi0xPT09aS52ZWN0b3JMYXllcklkcy5pbmRleE9mKG4pKSYmdGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCdTb3VyY2UgbGF5ZXIgIicrbisnIiBkb2VzIG5vdCBleGlzdCBvbiBzb3VyY2UgIicraS5pZCsnIiBhcyBzcGVjaWZpZWQgYnkgc3R5bGUgbGF5ZXIgIicrZS5pZCsnIicpKSl9fX0sci5wcm90b3R5cGUubG9hZGVkPWZ1bmN0aW9uKCl7aWYoIXRoaXMuX2xvYWRlZClyZXR1cm4hMTtpZihPYmplY3Qua2V5cyh0aGlzLl91cGRhdGVkU291cmNlcykubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgdCBpbiB0aGlzLnNvdXJjZUNhY2hlcylpZighdGhpcy5zb3VyY2VDYWNoZXNbdF0ubG9hZGVkKCkpcmV0dXJuITE7cmV0dXJuISF0aGlzLmltYWdlTWFuYWdlci5pc0xvYWRlZCgpfSxyLnByb3RvdHlwZS5fc2VyaWFsaXplTGF5ZXJzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHQubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBlLl9sYXllcnNbdF0uc2VyaWFsaXplKCl9KX0sci5wcm90b3R5cGUuaGFzVHJhbnNpdGlvbnM9ZnVuY3Rpb24oKXtpZih0aGlzLmxpZ2h0JiZ0aGlzLmxpZ2h0Lmhhc1RyYW5zaXRpb24oKSlyZXR1cm4hMDtmb3IodmFyIHQgaW4gdGhpcy5zb3VyY2VDYWNoZXMpaWYodGhpcy5zb3VyY2VDYWNoZXNbdF0uaGFzVHJhbnNpdGlvbigpKXJldHVybiEwO2Zvcih2YXIgZSBpbiB0aGlzLl9sYXllcnMpaWYodGhpcy5fbGF5ZXJzW2VdLmhhc1RyYW5zaXRpb24oKSlyZXR1cm4hMDtyZXR1cm4hMX0sci5wcm90b3R5cGUuX2NoZWNrTG9hZGVkPWZ1bmN0aW9uKCl7aWYoIXRoaXMuX2xvYWRlZCl0aHJvdyBuZXcgRXJyb3IoIlN0eWxlIGlzIG5vdCBkb25lIGxvYWRpbmciKX0sci5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKGUpe2lmKHRoaXMuX2xvYWRlZCl7aWYodGhpcy5fY2hhbmdlZCl7dmFyIHI9T2JqZWN0LmtleXModGhpcy5fdXBkYXRlZExheWVycyksbj1PYmplY3Qua2V5cyh0aGlzLl9yZW1vdmVkTGF5ZXJzKTtmb3IodmFyIGkgaW4oci5sZW5ndGh8fG4ubGVuZ3RoKSYmdGhpcy5fdXBkYXRlV29ya2VyTGF5ZXJzKHIsbiksdGhpcy5fdXBkYXRlZFNvdXJjZXMpe3ZhciBhPXRoaXMuX3VwZGF0ZWRTb3VyY2VzW2ldOyJyZWxvYWQiPT09YT90aGlzLl9yZWxvYWRTb3VyY2UoaSk6ImNsZWFyIj09PWEmJnRoaXMuX2NsZWFyU291cmNlKGkpfWZvcih2YXIgbyBpbiB0aGlzLl91cGRhdGVkUGFpbnRQcm9wcyl0aGlzLl9sYXllcnNbb10udXBkYXRlVHJhbnNpdGlvbnMoZSk7dGhpcy5saWdodC51cGRhdGVUcmFuc2l0aW9ucyhlKSx0aGlzLl9yZXNldFVwZGF0ZXMoKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoImRhdGEiLHtkYXRhVHlwZToic3R5bGUifSkpfWZvcih2YXIgcyBpbiB0aGlzLnNvdXJjZUNhY2hlcyl0aGlzLnNvdXJjZUNhY2hlc1tzXS51c2VkPSExO2Zvcih2YXIgbD0wLGM9dGhpcy5fb3JkZXI7bDxjLmxlbmd0aDtsKz0xKXt2YXIgdT1jW2xdLGg9dGhpcy5fbGF5ZXJzW3VdO2gucmVjYWxjdWxhdGUoZSksIWguaXNIaWRkZW4oZS56b29tKSYmaC5zb3VyY2UmJih0aGlzLnNvdXJjZUNhY2hlc1toLnNvdXJjZV0udXNlZD0hMCl9dGhpcy5saWdodC5yZWNhbGN1bGF0ZShlKSx0aGlzLno9ZS56b29tfX0sci5wcm90b3R5cGUuX3VwZGF0ZVdvcmtlckxheWVycz1mdW5jdGlvbih0LGUpe3RoaXMuZGlzcGF0Y2hlci5icm9hZGNhc3QoInVwZGF0ZUxheWVycyIse2xheWVyczp0aGlzLl9zZXJpYWxpemVMYXllcnModCkscmVtb3ZlZElkczplfSl9LHIucHJvdG90eXBlLl9yZXNldFVwZGF0ZXM9ZnVuY3Rpb24oKXt0aGlzLl9jaGFuZ2VkPSExLHRoaXMuX3VwZGF0ZWRMYXllcnM9e30sdGhpcy5fcmVtb3ZlZExheWVycz17fSx0aGlzLl91cGRhdGVkU291cmNlcz17fSx0aGlzLl91cGRhdGVkUGFpbnRQcm9wcz17fX0sci5wcm90b3R5cGUuc2V0U3RhdGU9ZnVuY3Rpb24oZSl7dmFyIHI9dGhpcztpZih0aGlzLl9jaGVja0xvYWRlZCgpLFhlKHRoaXMsdC52YWxpZGF0ZVN0eWxlKGUpKSlyZXR1cm4hMTsoZT10LmNsb25lKGUpKS5sYXllcnM9dGUoZS5sYXllcnMpO3ZhciBuPWZ1bmN0aW9uKGUscil7aWYoIWUpcmV0dXJuW3tjb21tYW5kOmVlLnNldFN0eWxlLGFyZ3M6W3JdfV07dmFyIG49W107dHJ5e2lmKCF0LmRlZmF1bHQkMTAoZS52ZXJzaW9uLHIudmVyc2lvbikpcmV0dXJuW3tjb21tYW5kOmVlLnNldFN0eWxlLGFyZ3M6W3JdfV07dC5kZWZhdWx0JDEwKGUuY2VudGVyLHIuY2VudGVyKXx8bi5wdXNoKHtjb21tYW5kOmVlLnNldENlbnRlcixhcmdzOltyLmNlbnRlcl19KSx0LmRlZmF1bHQkMTAoZS56b29tLHIuem9vbSl8fG4ucHVzaCh7Y29tbWFuZDplZS5zZXRab29tLGFyZ3M6W3Iuem9vbV19KSx0LmRlZmF1bHQkMTAoZS5iZWFyaW5nLHIuYmVhcmluZyl8fG4ucHVzaCh7Y29tbWFuZDplZS5zZXRCZWFyaW5nLGFyZ3M6W3IuYmVhcmluZ119KSx0LmRlZmF1bHQkMTAoZS5waXRjaCxyLnBpdGNoKXx8bi5wdXNoKHtjb21tYW5kOmVlLnNldFBpdGNoLGFyZ3M6W3IucGl0Y2hdfSksdC5kZWZhdWx0JDEwKGUuc3ByaXRlLHIuc3ByaXRlKXx8bi5wdXNoKHtjb21tYW5kOmVlLnNldFNwcml0ZSxhcmdzOltyLnNwcml0ZV19KSx0LmRlZmF1bHQkMTAoZS5nbHlwaHMsci5nbHlwaHMpfHxuLnB1c2goe2NvbW1hbmQ6ZWUuc2V0R2x5cGhzLGFyZ3M6W3IuZ2x5cGhzXX0pLHQuZGVmYXVsdCQxMChlLnRyYW5zaXRpb24sci50cmFuc2l0aW9uKXx8bi5wdXNoKHtjb21tYW5kOmVlLnNldFRyYW5zaXRpb24sYXJnczpbci50cmFuc2l0aW9uXX0pLHQuZGVmYXVsdCQxMChlLmxpZ2h0LHIubGlnaHQpfHxuLnB1c2goe2NvbW1hbmQ6ZWUuc2V0TGlnaHQsYXJnczpbci5saWdodF19KTt2YXIgaT17fSxhPVtdOyFmdW5jdGlvbihlLHIsbixpKXt2YXIgYTtmb3IoYSBpbiByPXJ8fHt9LGU9ZXx8e30pZS5oYXNPd25Qcm9wZXJ0eShhKSYmKHIuaGFzT3duUHJvcGVydHkoYSl8fG5lKGEsbixpKSk7Zm9yKGEgaW4gcilyLmhhc093blByb3BlcnR5KGEpJiYoZS5oYXNPd25Qcm9wZXJ0eShhKT90LmRlZmF1bHQkMTAoZVthXSxyW2FdKXx8KCJnZW9qc29uIj09PWVbYV0udHlwZSYmImdlb2pzb24iPT09clthXS50eXBlJiZhZShlLHIsYSk/bi5wdXNoKHtjb21tYW5kOmVlLnNldEdlb0pTT05Tb3VyY2VEYXRhLGFyZ3M6W2EsclthXS5kYXRhXX0pOmllKGEscixuLGkpKTpyZShhLHIsbikpfShlLnNvdXJjZXMsci5zb3VyY2VzLGEsaSk7dmFyIG89W107ZS5sYXllcnMmJmUubGF5ZXJzLmZvckVhY2goZnVuY3Rpb24odCl7aVt0LnNvdXJjZV0/bi5wdXNoKHtjb21tYW5kOmVlLnJlbW92ZUxheWVyLGFyZ3M6W3QuaWRdfSk6by5wdXNoKHQpfSksbj1uLmNvbmNhdChhKSxmdW5jdGlvbihlLHIsbil7cj1yfHxbXTt2YXIgaSxhLG8scyxsLGMsdSxoPShlPWV8fFtdKS5tYXAoc2UpLGY9ci5tYXAoc2UpLHA9ZS5yZWR1Y2UobGUse30pLGQ9ci5yZWR1Y2UobGUse30pLGc9aC5zbGljZSgpLG09T2JqZWN0LmNyZWF0ZShudWxsKTtmb3IoaT0wLGE9MDtpPGgubGVuZ3RoO2krKylvPWhbaV0sZC5oYXNPd25Qcm9wZXJ0eShvKT9hKys6KG4ucHVzaCh7Y29tbWFuZDplZS5yZW1vdmVMYXllcixhcmdzOltvXX0pLGcuc3BsaWNlKGcuaW5kZXhPZihvLGEpLDEpKTtmb3IoaT0wLGE9MDtpPGYubGVuZ3RoO2krKylvPWZbZi5sZW5ndGgtMS1pXSxnW2cubGVuZ3RoLTEtaV0hPT1vJiYocC5oYXNPd25Qcm9wZXJ0eShvKT8obi5wdXNoKHtjb21tYW5kOmVlLnJlbW92ZUxheWVyLGFyZ3M6W29dfSksZy5zcGxpY2UoZy5sYXN0SW5kZXhPZihvLGcubGVuZ3RoLWEpLDEpKTphKyssYz1nW2cubGVuZ3RoLWldLG4ucHVzaCh7Y29tbWFuZDplZS5hZGRMYXllcixhcmdzOltkW29dLGNdfSksZy5zcGxpY2UoZy5sZW5ndGgtaSwwLG8pLG1bb109ITApO2ZvcihpPTA7aTxmLmxlbmd0aDtpKyspaWYocz1wW289ZltpXV0sbD1kW29dLCFtW29dJiYhdC5kZWZhdWx0JDEwKHMsbCkpaWYodC5kZWZhdWx0JDEwKHMuc291cmNlLGwuc291cmNlKSYmdC5kZWZhdWx0JDEwKHNbInNvdXJjZS1sYXllciJdLGxbInNvdXJjZS1sYXllciJdKSYmdC5kZWZhdWx0JDEwKHMudHlwZSxsLnR5cGUpKXtmb3IodSBpbiBvZShzLmxheW91dCxsLmxheW91dCxuLG8sbnVsbCxlZS5zZXRMYXlvdXRQcm9wZXJ0eSksb2Uocy5wYWludCxsLnBhaW50LG4sbyxudWxsLGVlLnNldFBhaW50UHJvcGVydHkpLHQuZGVmYXVsdCQxMChzLmZpbHRlcixsLmZpbHRlcil8fG4ucHVzaCh7Y29tbWFuZDplZS5zZXRGaWx0ZXIsYXJnczpbbyxsLmZpbHRlcl19KSx0LmRlZmF1bHQkMTAocy5taW56b29tLGwubWluem9vbSkmJnQuZGVmYXVsdCQxMChzLm1heHpvb20sbC5tYXh6b29tKXx8bi5wdXNoKHtjb21tYW5kOmVlLnNldExheWVyWm9vbVJhbmdlLGFyZ3M6W28sbC5taW56b29tLGwubWF4em9vbV19KSxzKXMuaGFzT3duUHJvcGVydHkodSkmJiJsYXlvdXQiIT09dSYmInBhaW50IiE9PXUmJiJmaWx0ZXIiIT09dSYmIm1ldGFkYXRhIiE9PXUmJiJtaW56b29tIiE9PXUmJiJtYXh6b29tIiE9PXUmJigwPT09dS5pbmRleE9mKCJwYWludC4iKT9vZShzW3VdLGxbdV0sbixvLHUuc2xpY2UoNiksZWUuc2V0UGFpbnRQcm9wZXJ0eSk6dC5kZWZhdWx0JDEwKHNbdV0sbFt1XSl8fG4ucHVzaCh7Y29tbWFuZDplZS5zZXRMYXllclByb3BlcnR5LGFyZ3M6W28sdSxsW3VdXX0pKTtmb3IodSBpbiBsKWwuaGFzT3duUHJvcGVydHkodSkmJiFzLmhhc093blByb3BlcnR5KHUpJiYibGF5b3V0IiE9PXUmJiJwYWludCIhPT11JiYiZmlsdGVyIiE9PXUmJiJtZXRhZGF0YSIhPT11JiYibWluem9vbSIhPT11JiYibWF4em9vbSIhPT11JiYoMD09PXUuaW5kZXhPZigicGFpbnQuIik/b2Uoc1t1XSxsW3VdLG4sbyx1LnNsaWNlKDYpLGVlLnNldFBhaW50UHJvcGVydHkpOnQuZGVmYXVsdCQxMChzW3VdLGxbdV0pfHxuLnB1c2goe2NvbW1hbmQ6ZWUuc2V0TGF5ZXJQcm9wZXJ0eSxhcmdzOltvLHUsbFt1XV19KSl9ZWxzZSBuLnB1c2goe2NvbW1hbmQ6ZWUucmVtb3ZlTGF5ZXIsYXJnczpbb119KSxjPWdbZy5sYXN0SW5kZXhPZihvKSsxXSxuLnB1c2goe2NvbW1hbmQ6ZWUuYWRkTGF5ZXIsYXJnczpbbCxjXX0pfShvLHIubGF5ZXJzLG4pfWNhdGNoKHQpe2NvbnNvbGUud2FybigiVW5hYmxlIHRvIGNvbXB1dGUgc3R5bGUgZGlmZjoiLHQpLG49W3tjb21tYW5kOmVlLnNldFN0eWxlLGFyZ3M6W3JdfV19cmV0dXJuIG59KHRoaXMuc2VyaWFsaXplKCksZSkuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiEodC5jb21tYW5kIGluICRlKX0pO2lmKDA9PT1uLmxlbmd0aClyZXR1cm4hMTt2YXIgaT1uLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4hKHQuY29tbWFuZCBpbiBaZSl9KTtpZihpLmxlbmd0aD4wKXRocm93IG5ldyBFcnJvcigiVW5pbXBsZW1lbnRlZDogIitpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5jb21tYW5kfSkuam9pbigiLCAiKSsiLiIpO3JldHVybiBuLmZvckVhY2goZnVuY3Rpb24odCl7InNldFRyYW5zaXRpb24iIT09dC5jb21tYW5kJiZyW3QuY29tbWFuZF0uYXBwbHkocix0LmFyZ3MpfSksdGhpcy5zdHlsZXNoZWV0PWUsITB9LHIucHJvdG90eXBlLmFkZEltYWdlPWZ1bmN0aW9uKGUscil7aWYodGhpcy5nZXRJbWFnZShlKSlyZXR1cm4gdGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJBbiBpbWFnZSB3aXRoIHRoaXMgbmFtZSBhbHJlYWR5IGV4aXN0cy4iKSkpO3RoaXMuaW1hZ2VNYW5hZ2VyLmFkZEltYWdlKGUsciksdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJkYXRhIix7ZGF0YVR5cGU6InN0eWxlIn0pKX0sci5wcm90b3R5cGUuZ2V0SW1hZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW1hZ2VNYW5hZ2VyLmdldEltYWdlKHQpfSxyLnByb3RvdHlwZS5yZW1vdmVJbWFnZT1mdW5jdGlvbihlKXtpZighdGhpcy5nZXRJbWFnZShlKSlyZXR1cm4gdGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJObyBpbWFnZSB3aXRoIHRoaXMgbmFtZSBleGlzdHMuIikpKTt0aGlzLmltYWdlTWFuYWdlci5yZW1vdmVJbWFnZShlKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoImRhdGEiLHtkYXRhVHlwZToic3R5bGUifSkpfSxyLnByb3RvdHlwZS5hZGRTb3VyY2U9ZnVuY3Rpb24oZSxyLG4pe3ZhciBpPXRoaXM7aWYodGhpcy5fY2hlY2tMb2FkZWQoKSx2b2lkIDAhPT10aGlzLnNvdXJjZUNhY2hlc1tlXSl0aHJvdyBuZXcgRXJyb3IoIlRoZXJlIGlzIGFscmVhZHkgYSBzb3VyY2Ugd2l0aCB0aGlzIElEIik7aWYoIXIudHlwZSl0aHJvdyBuZXcgRXJyb3IoIlRoZSB0eXBlIHByb3BlcnR5IG11c3QgYmUgZGVmaW5lZCwgYnV0IHRoZSBvbmx5IHRoZSBmb2xsb3dpbmcgcHJvcGVydGllcyB3ZXJlIGdpdmVuOiAiK09iamVjdC5rZXlzKHIpLmpvaW4oIiwgIikrIi4iKTtpZighKFsidmVjdG9yIiwicmFzdGVyIiwiZ2VvanNvbiIsInZpZGVvIiwiaW1hZ2UiXS5pbmRleE9mKHIudHlwZSk+PTAmJnRoaXMuX3ZhbGlkYXRlKHQudmFsaWRhdGVTdHlsZS5zb3VyY2UsInNvdXJjZXMuIitlLHIsbnVsbCxuKSkpe3RoaXMubWFwJiZ0aGlzLm1hcC5fY29sbGVjdFJlc291cmNlVGltaW5nJiYoci5jb2xsZWN0UmVzb3VyY2VUaW1pbmc9ITApO3ZhciBhPXRoaXMuc291cmNlQ2FjaGVzW2VdPW5ldyBZdChlLHIsdGhpcy5kaXNwYXRjaGVyKTthLnN0eWxlPXRoaXMsYS5zZXRFdmVudGVkUGFyZW50KHRoaXMsZnVuY3Rpb24oKXtyZXR1cm57aXNTb3VyY2VMb2FkZWQ6aS5sb2FkZWQoKSxzb3VyY2U6YS5zZXJpYWxpemUoKSxzb3VyY2VJZDplfX0pLGEub25BZGQodGhpcy5tYXApLHRoaXMuX2NoYW5nZWQ9ITB9fSxyLnByb3RvdHlwZS5yZW1vdmVTb3VyY2U9ZnVuY3Rpb24oZSl7aWYodGhpcy5fY2hlY2tMb2FkZWQoKSx2b2lkIDA9PT10aGlzLnNvdXJjZUNhY2hlc1tlXSl0aHJvdyBuZXcgRXJyb3IoIlRoZXJlIGlzIG5vIHNvdXJjZSB3aXRoIHRoaXMgSUQiKTtmb3IodmFyIHIgaW4gdGhpcy5fbGF5ZXJzKWlmKHRoaXMuX2xheWVyc1tyXS5zb3VyY2U9PT1lKXJldHVybiB0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoJ1NvdXJjZSAiJytlKyciIGNhbm5vdCBiZSByZW1vdmVkIHdoaWxlIGxheWVyICInK3IrJyIgaXMgdXNpbmcgaXQuJykpKTt2YXIgbj10aGlzLnNvdXJjZUNhY2hlc1tlXTtkZWxldGUgdGhpcy5zb3VyY2VDYWNoZXNbZV0sZGVsZXRlIHRoaXMuX3VwZGF0ZWRTb3VyY2VzW2VdLG4uZmlyZShuZXcgdC5FdmVudCgiZGF0YSIse3NvdXJjZURhdGFUeXBlOiJtZXRhZGF0YSIsZGF0YVR5cGU6InNvdXJjZSIsc291cmNlSWQ6ZX0pKSxuLnNldEV2ZW50ZWRQYXJlbnQobnVsbCksbi5jbGVhclRpbGVzKCksbi5vblJlbW92ZSYmbi5vblJlbW92ZSh0aGlzLm1hcCksdGhpcy5fY2hhbmdlZD0hMH0sci5wcm90b3R5cGUuc2V0R2VvSlNPTlNvdXJjZURhdGE9ZnVuY3Rpb24odCxlKXt0aGlzLl9jaGVja0xvYWRlZCgpLHRoaXMuc291cmNlQ2FjaGVzW3RdLmdldFNvdXJjZSgpLnNldERhdGEoZSksdGhpcy5fY2hhbmdlZD0hMH0sci5wcm90b3R5cGUuZ2V0U291cmNlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnNvdXJjZUNhY2hlc1t0XSYmdGhpcy5zb3VyY2VDYWNoZXNbdF0uZ2V0U291cmNlKCl9LHIucHJvdG90eXBlLmFkZExheWVyPWZ1bmN0aW9uKGUscixuKXt0aGlzLl9jaGVja0xvYWRlZCgpO3ZhciBpPWUuaWQ7aWYodGhpcy5nZXRMYXllcihpKSl0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoJ0xheWVyIHdpdGggaWQgIicraSsnIiBhbHJlYWR5IGV4aXN0cyBvbiB0aGlzIG1hcCcpKSk7ZWxzZSBpZigib2JqZWN0Ij09dHlwZW9mIGUuc291cmNlJiYodGhpcy5hZGRTb3VyY2UoaSxlLnNvdXJjZSksZT10LmNsb25lKGUpLGU9dC5leHRlbmQoZSx7c291cmNlOml9KSksIXRoaXMuX3ZhbGlkYXRlKHQudmFsaWRhdGVTdHlsZS5sYXllciwibGF5ZXJzLiIraSxlLHthcnJheUluZGV4Oi0xfSxuKSl7dmFyIGE9dC5kZWZhdWx0JDIyKGUpO3RoaXMuX3ZhbGlkYXRlTGF5ZXIoYSksYS5zZXRFdmVudGVkUGFyZW50KHRoaXMse2xheWVyOntpZDppfX0pO3ZhciBvPXI/dGhpcy5fb3JkZXIuaW5kZXhPZihyKTp0aGlzLl9vcmRlci5sZW5ndGg7aWYociYmLTE9PT1vKXRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcignTGF5ZXIgd2l0aCBpZCAiJytyKyciIGRvZXMgbm90IGV4aXN0IG9uIHRoaXMgbWFwLicpKSk7ZWxzZXtpZih0aGlzLl9vcmRlci5zcGxpY2UobywwLGkpLHRoaXMuX2xheWVyT3JkZXJDaGFuZ2VkPSEwLHRoaXMuX2xheWVyc1tpXT1hLHRoaXMuX3JlbW92ZWRMYXllcnNbaV0mJmEuc291cmNlKXt2YXIgcz10aGlzLl9yZW1vdmVkTGF5ZXJzW2ldO2RlbGV0ZSB0aGlzLl9yZW1vdmVkTGF5ZXJzW2ldLHMudHlwZSE9PWEudHlwZT90aGlzLl91cGRhdGVkU291cmNlc1thLnNvdXJjZV09ImNsZWFyIjoodGhpcy5fdXBkYXRlZFNvdXJjZXNbYS5zb3VyY2VdPSJyZWxvYWQiLHRoaXMuc291cmNlQ2FjaGVzW2Euc291cmNlXS5wYXVzZSgpKX10aGlzLl91cGRhdGVMYXllcihhKX19fSxyLnByb3RvdHlwZS5tb3ZlTGF5ZXI9ZnVuY3Rpb24oZSxyKXtpZih0aGlzLl9jaGVja0xvYWRlZCgpLHRoaXMuX2NoYW5nZWQ9ITAsdGhpcy5fbGF5ZXJzW2VdKXtpZihlIT09cil7dmFyIG49dGhpcy5fb3JkZXIuaW5kZXhPZihlKTt0aGlzLl9vcmRlci5zcGxpY2UobiwxKTt2YXIgaT1yP3RoaXMuX29yZGVyLmluZGV4T2Yocik6dGhpcy5fb3JkZXIubGVuZ3RoO3ImJi0xPT09aT90aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoJ0xheWVyIHdpdGggaWQgIicrcisnIiBkb2VzIG5vdCBleGlzdCBvbiB0aGlzIG1hcC4nKSkpOih0aGlzLl9vcmRlci5zcGxpY2UoaSwwLGUpLHRoaXMuX2xheWVyT3JkZXJDaGFuZ2VkPSEwKX19ZWxzZSB0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIlRoZSBsYXllciAnIitlKyInIGRvZXMgbm90IGV4aXN0IGluIHRoZSBtYXAncyBzdHlsZSBhbmQgY2Fubm90IGJlIG1vdmVkLiIpKSl9LHIucHJvdG90eXBlLnJlbW92ZUxheWVyPWZ1bmN0aW9uKGUpe3RoaXMuX2NoZWNrTG9hZGVkKCk7dmFyIHI9dGhpcy5fbGF5ZXJzW2VdO2lmKHIpe3Iuc2V0RXZlbnRlZFBhcmVudChudWxsKTt2YXIgbj10aGlzLl9vcmRlci5pbmRleE9mKGUpO3RoaXMuX29yZGVyLnNwbGljZShuLDEpLHRoaXMuX2xheWVyT3JkZXJDaGFuZ2VkPSEwLHRoaXMuX2NoYW5nZWQ9ITAsdGhpcy5fcmVtb3ZlZExheWVyc1tlXT1yLGRlbGV0ZSB0aGlzLl9sYXllcnNbZV0sZGVsZXRlIHRoaXMuX3VwZGF0ZWRMYXllcnNbZV0sZGVsZXRlIHRoaXMuX3VwZGF0ZWRQYWludFByb3BzW2VdfWVsc2UgdGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJUaGUgbGF5ZXIgJyIrZSsiJyBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbWFwJ3Mgc3R5bGUgYW5kIGNhbm5vdCBiZSByZW1vdmVkLiIpKSl9LHIucHJvdG90eXBlLmdldExheWVyPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9sYXllcnNbdF19LHIucHJvdG90eXBlLnNldExheWVyWm9vbVJhbmdlPWZ1bmN0aW9uKGUscixuKXt0aGlzLl9jaGVja0xvYWRlZCgpO3ZhciBpPXRoaXMuZ2V0TGF5ZXIoZSk7aT9pLm1pbnpvb209PT1yJiZpLm1heHpvb209PT1ufHwobnVsbCE9ciYmKGkubWluem9vbT1yKSxudWxsIT1uJiYoaS5tYXh6b29tPW4pLHRoaXMuX3VwZGF0ZUxheWVyKGkpKTp0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIlRoZSBsYXllciAnIitlKyInIGRvZXMgbm90IGV4aXN0IGluIHRoZSBtYXAncyBzdHlsZSBhbmQgY2Fubm90IGhhdmUgem9vbSBleHRlbnQuIikpKX0sci5wcm90b3R5cGUuc2V0RmlsdGVyPWZ1bmN0aW9uKGUscil7dGhpcy5fY2hlY2tMb2FkZWQoKTt2YXIgbj10aGlzLmdldExheWVyKGUpO2lmKG4pe2lmKCF0LmRlZmF1bHQkMTAobi5maWx0ZXIscikpcmV0dXJuIG51bGw9PXI/KG4uZmlsdGVyPXZvaWQgMCx2b2lkIHRoaXMuX3VwZGF0ZUxheWVyKG4pKTp2b2lkKHRoaXMuX3ZhbGlkYXRlKHQudmFsaWRhdGVTdHlsZS5maWx0ZXIsImxheWVycy4iK24uaWQrIi5maWx0ZXIiLHIpfHwobi5maWx0ZXI9dC5jbG9uZShyKSx0aGlzLl91cGRhdGVMYXllcihuKSkpfWVsc2UgdGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJUaGUgbGF5ZXIgJyIrZSsiJyBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbWFwJ3Mgc3R5bGUgYW5kIGNhbm5vdCBiZSBmaWx0ZXJlZC4iKSkpfSxyLnByb3RvdHlwZS5nZXRGaWx0ZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIHQuY2xvbmUodGhpcy5nZXRMYXllcihlKS5maWx0ZXIpfSxyLnByb3RvdHlwZS5zZXRMYXlvdXRQcm9wZXJ0eT1mdW5jdGlvbihlLHIsbil7dGhpcy5fY2hlY2tMb2FkZWQoKTt2YXIgaT10aGlzLmdldExheWVyKGUpO2k/dC5kZWZhdWx0JDEwKGkuZ2V0TGF5b3V0UHJvcGVydHkociksbil8fChpLnNldExheW91dFByb3BlcnR5KHIsbiksdGhpcy5fdXBkYXRlTGF5ZXIoaSkpOnRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigiVGhlIGxheWVyICciK2UrIicgZG9lcyBub3QgZXhpc3QgaW4gdGhlIG1hcCdzIHN0eWxlIGFuZCBjYW5ub3QgYmUgc3R5bGVkLiIpKSl9LHIucHJvdG90eXBlLmdldExheW91dFByb3BlcnR5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuZ2V0TGF5ZXIodCkuZ2V0TGF5b3V0UHJvcGVydHkoZSl9LHIucHJvdG90eXBlLnNldFBhaW50UHJvcGVydHk9ZnVuY3Rpb24oZSxyLG4pe3RoaXMuX2NoZWNrTG9hZGVkKCk7dmFyIGk9dGhpcy5nZXRMYXllcihlKTtpZihpKXtpZighdC5kZWZhdWx0JDEwKGkuZ2V0UGFpbnRQcm9wZXJ0eShyKSxuKSl7dmFyIGE9aS5fdHJhbnNpdGlvbmFibGVQYWludC5fdmFsdWVzW3JdLnZhbHVlLmlzRGF0YURyaXZlbigpO2kuc2V0UGFpbnRQcm9wZXJ0eShyLG4pLChpLl90cmFuc2l0aW9uYWJsZVBhaW50Ll92YWx1ZXNbcl0udmFsdWUuaXNEYXRhRHJpdmVuKCl8fGEpJiZ0aGlzLl91cGRhdGVMYXllcihpKSx0aGlzLl9jaGFuZ2VkPSEwLHRoaXMuX3VwZGF0ZWRQYWludFByb3BzW2VdPSEwfX1lbHNlIHRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigiVGhlIGxheWVyICciK2UrIicgZG9lcyBub3QgZXhpc3QgaW4gdGhlIG1hcCdzIHN0eWxlIGFuZCBjYW5ub3QgYmUgc3R5bGVkLiIpKSl9LHIucHJvdG90eXBlLmdldFBhaW50UHJvcGVydHk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5nZXRMYXllcih0KS5nZXRQYWludFByb3BlcnR5KGUpfSxyLnByb3RvdHlwZS5nZXRUcmFuc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHQuZXh0ZW5kKHtkdXJhdGlvbjozMDAsZGVsYXk6MH0sdGhpcy5zdHlsZXNoZWV0JiZ0aGlzLnN0eWxlc2hlZXQudHJhbnNpdGlvbil9LHIucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3ZhciBlPXRoaXM7cmV0dXJuIHQuZmlsdGVyT2JqZWN0KHt2ZXJzaW9uOnRoaXMuc3R5bGVzaGVldC52ZXJzaW9uLG5hbWU6dGhpcy5zdHlsZXNoZWV0Lm5hbWUsbWV0YWRhdGE6dGhpcy5zdHlsZXNoZWV0Lm1ldGFkYXRhLGxpZ2h0OnRoaXMuc3R5bGVzaGVldC5saWdodCxjZW50ZXI6dGhpcy5zdHlsZXNoZWV0LmNlbnRlcix6b29tOnRoaXMuc3R5bGVzaGVldC56b29tLGJlYXJpbmc6dGhpcy5zdHlsZXNoZWV0LmJlYXJpbmcscGl0Y2g6dGhpcy5zdHlsZXNoZWV0LnBpdGNoLHNwcml0ZTp0aGlzLnN0eWxlc2hlZXQuc3ByaXRlLGdseXBoczp0aGlzLnN0eWxlc2hlZXQuZ2x5cGhzLHRyYW5zaXRpb246dGhpcy5zdHlsZXNoZWV0LnRyYW5zaXRpb24sc291cmNlczp0Lm1hcE9iamVjdCh0aGlzLnNvdXJjZUNhY2hlcyxmdW5jdGlvbih0KXtyZXR1cm4gdC5zZXJpYWxpemUoKX0pLGxheWVyczp0aGlzLl9vcmRlci5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGUuX2xheWVyc1t0XS5zZXJpYWxpemUoKX0pfSxmdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwIT09dH0pfSxyLnByb3RvdHlwZS5fdXBkYXRlTGF5ZXI9ZnVuY3Rpb24odCl7dGhpcy5fdXBkYXRlZExheWVyc1t0LmlkXT0hMCx0LnNvdXJjZSYmIXRoaXMuX3VwZGF0ZWRTb3VyY2VzW3Quc291cmNlXSYmKHRoaXMuX3VwZGF0ZWRTb3VyY2VzW3Quc291cmNlXT0icmVsb2FkIix0aGlzLnNvdXJjZUNhY2hlc1t0LnNvdXJjZV0ucGF1c2UoKSksdGhpcy5fY2hhbmdlZD0hMH0sci5wcm90b3R5cGUuX2ZsYXR0ZW5SZW5kZXJlZEZlYXR1cmVzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXSxyPXRoaXMuX29yZGVyLmxlbmd0aC0xO3I+PTA7ci0tKWZvcih2YXIgbj10aGlzLl9vcmRlcltyXSxpPTAsYT10O2k8YS5sZW5ndGg7aSs9MSl7dmFyIG89YVtpXVtuXTtpZihvKWZvcih2YXIgcz0wLGw9bztzPGwubGVuZ3RoO3MrPTEpe3ZhciBjPWxbc107ZS5wdXNoKGMpfX1yZXR1cm4gZX0sci5wcm90b3R5cGUucXVlcnlSZW5kZXJlZEZlYXR1cmVzPWZ1bmN0aW9uKGUscixuKXtyJiZyLmZpbHRlciYmdGhpcy5fdmFsaWRhdGUodC52YWxpZGF0ZVN0eWxlLmZpbHRlciwicXVlcnlSZW5kZXJlZEZlYXR1cmVzLmZpbHRlciIsci5maWx0ZXIpO3ZhciBpPXt9O2lmKHImJnIubGF5ZXJzKXtpZighQXJyYXkuaXNBcnJheShyLmxheWVycykpcmV0dXJuIHRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigicGFyYW1ldGVycy5sYXllcnMgbXVzdCBiZSBhbiBBcnJheS4iKSkpLFtdO2Zvcih2YXIgYT0wLG89ci5sYXllcnM7YTxvLmxlbmd0aDthKz0xKXt2YXIgcz1vW2FdLGw9dGhpcy5fbGF5ZXJzW3NdO2lmKCFsKXJldHVybiB0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIlRoZSBsYXllciAnIitzKyInIGRvZXMgbm90IGV4aXN0IGluIHRoZSBtYXAncyBzdHlsZSBhbmQgY2Fubm90IGJlIHF1ZXJpZWQgZm9yIGZlYXR1cmVzLiIpKSksW107aVtsLnNvdXJjZV09ITB9fXZhciBjPVtdO2Zvcih2YXIgdSBpbiB0aGlzLnNvdXJjZUNhY2hlcylyLmxheWVycyYmIWlbdV18fGMucHVzaChhdCh0aGlzLnNvdXJjZUNhY2hlc1t1XSx0aGlzLl9sYXllcnMsZS53b3JsZENvb3JkaW5hdGUscixuKSk7cmV0dXJuIHRoaXMucGxhY2VtZW50JiZjLnB1c2goZnVuY3Rpb24odCxlLHIsbixpKXtmb3IodmFyIGE9e30sbz1uLnF1ZXJ5UmVuZGVyZWRTeW1ib2xzKGUpLHM9W10sbD0wLGM9T2JqZWN0LmtleXMobykubWFwKE51bWJlcik7bDxjLmxlbmd0aDtsKz0xKXt2YXIgdT1jW2xdO3MucHVzaChpW3VdKX1zLnNvcnQob3QpO2Zvcih2YXIgaD1mdW5jdGlvbigpe3ZhciBlPXBbZl0sbj1lLmZlYXR1cmVJbmRleC5sb29rdXBTeW1ib2xGZWF0dXJlcyhvW2UuYnVja2V0SW5zdGFuY2VJZF0sZS5idWNrZXRJbmRleCxlLnNvdXJjZUxheWVySW5kZXgsci5maWx0ZXIsci5sYXllcnMsdCk7Zm9yKHZhciBpIGluIG4pe3ZhciBzPWFbaV09YVtpXXx8W10sbD1uW2ldO2wuc29ydChmdW5jdGlvbih0LHIpe3ZhciBuPWUuZmVhdHVyZVNvcnRPcmRlcjtpZihuKXt2YXIgaT1uLmluZGV4T2YodC5mZWF0dXJlSW5kZXgpO3JldHVybiBuLmluZGV4T2Yoci5mZWF0dXJlSW5kZXgpLWl9cmV0dXJuIHIuZmVhdHVyZUluZGV4LXQuZmVhdHVyZUluZGV4fSk7Zm9yKHZhciBjPTAsdT1sO2M8dS5sZW5ndGg7Yys9MSl7dmFyIGg9dVtjXTtzLnB1c2goaC5mZWF0dXJlKX19fSxmPTAscD1zO2Y8cC5sZW5ndGg7Zis9MSloKCk7cmV0dXJuIGF9KHRoaXMuX2xheWVycyxlLnZpZXdwb3J0LHIsdGhpcy5wbGFjZW1lbnQuY29sbGlzaW9uSW5kZXgsdGhpcy5wbGFjZW1lbnQucmV0YWluZWRRdWVyeURhdGEpKSx0aGlzLl9mbGF0dGVuUmVuZGVyZWRGZWF0dXJlcyhjKX0sci5wcm90b3R5cGUucXVlcnlTb3VyY2VGZWF0dXJlcz1mdW5jdGlvbihlLHIpe3ImJnIuZmlsdGVyJiZ0aGlzLl92YWxpZGF0ZSh0LnZhbGlkYXRlU3R5bGUuZmlsdGVyLCJxdWVyeVNvdXJjZUZlYXR1cmVzLmZpbHRlciIsci5maWx0ZXIpO3ZhciBuPXRoaXMuc291cmNlQ2FjaGVzW2VdO3JldHVybiBuP2Z1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuZ2V0UmVuZGVyYWJsZUlkcygpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gdC5nZXRUaWxlQnlJRChlKX0pLG49W10saT17fSxhPTA7YTxyLmxlbmd0aDthKyspe3ZhciBvPXJbYV0scz1vLnRpbGVJRC5jYW5vbmljYWwua2V5O2lbc118fChpW3NdPSEwLG8ucXVlcnlTb3VyY2VGZWF0dXJlcyhuLGUpKX1yZXR1cm4gbn0obixyKTpbXX0sci5wcm90b3R5cGUuYWRkU291cmNlVHlwZT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHIuZ2V0U291cmNlVHlwZSh0KT9uKG5ldyBFcnJvcignQSBzb3VyY2UgdHlwZSBjYWxsZWQgIicrdCsnIiBhbHJlYWR5IGV4aXN0cy4nKSk6KHIuc2V0U291cmNlVHlwZSh0LGUpLGUud29ya2VyU291cmNlVVJMP3ZvaWQgdGhpcy5kaXNwYXRjaGVyLmJyb2FkY2FzdCgibG9hZFdvcmtlclNvdXJjZSIse25hbWU6dCx1cmw6ZS53b3JrZXJTb3VyY2VVUkx9LG4pOm4obnVsbCxudWxsKSl9LHIucHJvdG90eXBlLmdldExpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGlnaHQuZ2V0TGlnaHQoKX0sci5wcm90b3R5cGUuc2V0TGlnaHQ9ZnVuY3Rpb24oZSl7dGhpcy5fY2hlY2tMb2FkZWQoKTt2YXIgcj10aGlzLmxpZ2h0LmdldExpZ2h0KCksbj0hMTtmb3IodmFyIGkgaW4gZSlpZighdC5kZWZhdWx0JDEwKGVbaV0scltpXSkpe249ITA7YnJlYWt9aWYobil7dmFyIG89e25vdzphLm5vdygpLHRyYW5zaXRpb246dC5leHRlbmQoe2R1cmF0aW9uOjMwMCxkZWxheTowfSx0aGlzLnN0eWxlc2hlZXQudHJhbnNpdGlvbil9O3RoaXMubGlnaHQuc2V0TGlnaHQoZSksdGhpcy5saWdodC51cGRhdGVUcmFuc2l0aW9ucyhvKX19LHIucHJvdG90eXBlLl92YWxpZGF0ZT1mdW5jdGlvbihlLHIsbixpLGEpe3JldHVybighYXx8ITEhPT1hLnZhbGlkYXRlKSYmWGUodGhpcyxlLmNhbGwodC52YWxpZGF0ZVN0eWxlLHQuZXh0ZW5kKHtrZXk6cixzdHlsZTp0aGlzLnNlcmlhbGl6ZSgpLHZhbHVlOm4sc3R5bGVTcGVjOnQuZGVmYXVsdCQ1fSxpKSkpfSxyLnByb3RvdHlwZS5fcmVtb3ZlPWZ1bmN0aW9uKCl7Zm9yKHZhciBlIGluIHQuZXZlbnRlZC5vZmYoInBsdWdpbkF2YWlsYWJsZSIsdGhpcy5fcnRsVGV4dFBsdWdpbkNhbGxiYWNrKSx0aGlzLnNvdXJjZUNhY2hlcyl0aGlzLnNvdXJjZUNhY2hlc1tlXS5jbGVhclRpbGVzKCk7dGhpcy5kaXNwYXRjaGVyLnJlbW92ZSgpfSxyLnByb3RvdHlwZS5fY2xlYXJTb3VyY2U9ZnVuY3Rpb24odCl7dGhpcy5zb3VyY2VDYWNoZXNbdF0uY2xlYXJUaWxlcygpfSxyLnByb3RvdHlwZS5fcmVsb2FkU291cmNlPWZ1bmN0aW9uKHQpe3RoaXMuc291cmNlQ2FjaGVzW3RdLnJlc3VtZSgpLHRoaXMuc291cmNlQ2FjaGVzW3RdLnJlbG9hZCgpfSxyLnByb3RvdHlwZS5fdXBkYXRlU291cmNlcz1mdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdGhpcy5zb3VyY2VDYWNoZXMpdGhpcy5zb3VyY2VDYWNoZXNbZV0udXBkYXRlKHQpfSxyLnByb3RvdHlwZS5fZ2VuZXJhdGVDb2xsaXNpb25Cb3hlcz1mdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzLnNvdXJjZUNhY2hlcyl0aGlzLl9yZWxvYWRTb3VyY2UodCl9LHIucHJvdG90eXBlLl91cGRhdGVQbGFjZW1lbnQ9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj0hMSxpPSExLG89e30scz0wLGw9dGhpcy5fb3JkZXI7czxsLmxlbmd0aDtzKz0xKXt2YXIgYz1sW3NdLHU9dGhpcy5fbGF5ZXJzW2NdO2lmKCJzeW1ib2wiPT09dS50eXBlKXtpZighb1t1LnNvdXJjZV0pe3ZhciBoPXRoaXMuc291cmNlQ2FjaGVzW3Uuc291cmNlXTtvW3Uuc291cmNlXT1oLmdldFJlbmRlcmFibGVJZHMoKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGguZ2V0VGlsZUJ5SUQodCl9KS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUudGlsZUlELm92ZXJzY2FsZWRaLXQudGlsZUlELm92ZXJzY2FsZWRafHwodC50aWxlSUQuaXNMZXNzVGhhbihlLnRpbGVJRCk/LTE6MSl9KX12YXIgZj10aGlzLmNyb3NzVGlsZVN5bWJvbEluZGV4LmFkZExheWVyKHUsb1t1LnNvdXJjZV0sdC5jZW50ZXIubG5nKTtuPW58fGZ9fXRoaXMuY3Jvc3NUaWxlU3ltYm9sSW5kZXgucHJ1bmVVbnVzZWRMYXllcnModGhpcy5fb3JkZXIpO3ZhciBwPXRoaXMuX2xheWVyT3JkZXJDaGFuZ2VkO2lmKChwfHwhdGhpcy5wYXVzZWFibGVQbGFjZW1lbnR8fHRoaXMucGF1c2VhYmxlUGxhY2VtZW50LmlzRG9uZSgpJiYhdGhpcy5wbGFjZW1lbnQuc3RpbGxSZWNlbnQoYS5ub3coKSkpJiYodGhpcy5wYXVzZWFibGVQbGFjZW1lbnQ9bmV3IFVlKHQsdGhpcy5fb3JkZXIscCxlLHIpLHRoaXMuX2xheWVyT3JkZXJDaGFuZ2VkPSExKSx0aGlzLnBhdXNlYWJsZVBsYWNlbWVudC5pc0RvbmUoKT90aGlzLnBsYWNlbWVudC5zZXRTdGFsZSgpOih0aGlzLnBhdXNlYWJsZVBsYWNlbWVudC5jb250aW51ZVBsYWNlbWVudCh0aGlzLl9vcmRlcix0aGlzLl9sYXllcnMsbyksdGhpcy5wYXVzZWFibGVQbGFjZW1lbnQuaXNEb25lKCkmJih0aGlzLnBsYWNlbWVudD10aGlzLnBhdXNlYWJsZVBsYWNlbWVudC5jb21taXQodGhpcy5wbGFjZW1lbnQsYS5ub3coKSksaT0hMCksbiYmdGhpcy5wYXVzZWFibGVQbGFjZW1lbnQucGxhY2VtZW50LnNldFN0YWxlKCkpLGl8fG4pZm9yKHZhciBkPTAsZz10aGlzLl9vcmRlcjtkPGcubGVuZ3RoO2QrPTEpe3ZhciBtPWdbZF0sdj10aGlzLl9sYXllcnNbbV07InN5bWJvbCI9PT12LnR5cGUmJnRoaXMucGxhY2VtZW50LnVwZGF0ZUxheWVyT3BhY2l0aWVzKHYsb1t2LnNvdXJjZV0pfXJldHVybiF0aGlzLnBhdXNlYWJsZVBsYWNlbWVudC5pc0RvbmUoKXx8dGhpcy5wbGFjZW1lbnQuaGFzVHJhbnNpdGlvbnMoYS5ub3coKSl9LHIucHJvdG90eXBlLmdldEltYWdlcz1mdW5jdGlvbih0LGUscil7dGhpcy5pbWFnZU1hbmFnZXIuZ2V0SW1hZ2VzKGUuaWNvbnMscil9LHIucHJvdG90eXBlLmdldEdseXBocz1mdW5jdGlvbih0LGUscil7dGhpcy5nbHlwaE1hbmFnZXIuZ2V0R2x5cGhzKGUuc3RhY2tzLHIpfSxyfSh0LkV2ZW50ZWQpO0plLmdldFNvdXJjZVR5cGU9ZnVuY3Rpb24odCl7cmV0dXJuIG50W3RdfSxKZS5zZXRTb3VyY2VUeXBlPWZ1bmN0aW9uKHQsZSl7bnRbdF09ZX0sSmUucmVnaXN0ZXJGb3JQbHVnaW5BdmFpbGFiaWxpdHk9dC5yZWdpc3RlckZvclBsdWdpbkF2YWlsYWJpbGl0eTt2YXIgS2U9dC5jcmVhdGVMYXlvdXQoW3tuYW1lOiJhX3BvcyIsdHlwZToiSW50MTYiLGNvbXBvbmVudHM6Mn1dKSxRZT17cHJlbHVkZTp7ZnJhZ21lbnRTb3VyY2U6IiNpZmRlZiBHTF9FU1xucHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZWxzZVxuXG4jaWYgIWRlZmluZWQobG93cClcbiNkZWZpbmUgbG93cFxuI2VuZGlmXG5cbiNpZiAhZGVmaW5lZChtZWRpdW1wKVxuI2RlZmluZSBtZWRpdW1wXG4jZW5kaWZcblxuI2lmICFkZWZpbmVkKGhpZ2hwKVxuI2RlZmluZSBoaWdocFxuI2VuZGlmXG5cbiNlbmRpZlxuIix2ZXJ0ZXhTb3VyY2U6IiNpZmRlZiBHTF9FU1xucHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2Vsc2VcblxuI2lmICFkZWZpbmVkKGxvd3ApXG4jZGVmaW5lIGxvd3BcbiNlbmRpZlxuXG4jaWYgIWRlZmluZWQobWVkaXVtcClcbiNkZWZpbmUgbWVkaXVtcFxuI2VuZGlmXG5cbiNpZiAhZGVmaW5lZChoaWdocClcbiNkZWZpbmUgaGlnaHBcbiNlbmRpZlxuXG4jZW5kaWZcblxuLy8gVW5wYWNrIGEgcGFpciBvZiB2YWx1ZXMgdGhhdCBoYXZlIGJlZW4gcGFja2VkIGludG8gYSBzaW5nbGUgZmxvYXQuXG4vLyBUaGUgcGFja2VkIHZhbHVlcyBhcmUgYXNzdW1lZCB0byBiZSA4LWJpdCB1bnNpZ25lZCBpbnRlZ2VycywgYW5kIGFyZVxuLy8gcGFja2VkIGxpa2Ugc286XG4vLyBwYWNrZWRWYWx1ZSA9IGZsb29yKGlucHV0WzBdKSAqIDI1NiArIGlucHV0WzFdLFxudmVjMiB1bnBhY2tfZmxvYXQoY29uc3QgZmxvYXQgcGFja2VkVmFsdWUpIHtcbiAgICBpbnQgcGFja2VkSW50VmFsdWUgPSBpbnQocGFja2VkVmFsdWUpO1xuICAgIGludCB2MCA9IHBhY2tlZEludFZhbHVlIC8gMjU2O1xuICAgIHJldHVybiB2ZWMyKHYwLCBwYWNrZWRJbnRWYWx1ZSAtIHYwICogMjU2KTtcbn1cblxudmVjMiB1bnBhY2tfb3BhY2l0eShjb25zdCBmbG9hdCBwYWNrZWRPcGFjaXR5KSB7XG4gICAgaW50IGludE9wYWNpdHkgPSBpbnQocGFja2VkT3BhY2l0eSkgLyAyO1xuICAgIHJldHVybiB2ZWMyKGZsb2F0KGludE9wYWNpdHkpIC8gMTI3LjAsIG1vZChwYWNrZWRPcGFjaXR5LCAyLjApKTtcbn1cblxuLy8gVG8gbWluaW1pemUgdGhlIG51bWJlciBvZiBhdHRyaWJ1dGVzIG5lZWRlZCwgd2UgZW5jb2RlIGEgNC1jb21wb25lbnRcbi8vIGNvbG9yIGludG8gYSBwYWlyIG9mIGZsb2F0cyAoaS5lLiBhIHZlYzIpIGFzIGZvbGxvd3M6XG4vLyBbIGZsb29yKGNvbG9yLnIgKiAyNTUpICogMjU2ICsgY29sb3IuZyAqIDI1NSxcbi8vICAgZmxvb3IoY29sb3IuYiAqIDI1NSkgKiAyNTYgKyBjb2xvci5nICogMjU1IF1cbnZlYzQgZGVjb2RlX2NvbG9yKGNvbnN0IHZlYzIgZW5jb2RlZENvbG9yKSB7XG4gICAgcmV0dXJuIHZlYzQoXG4gICAgICAgIHVucGFja19mbG9hdChlbmNvZGVkQ29sb3JbMF0pIC8gMjU1LjAsXG4gICAgICAgIHVucGFja19mbG9hdChlbmNvZGVkQ29sb3JbMV0pIC8gMjU1LjBcbiAgICApO1xufVxuXG4vLyBVbnBhY2sgYSBwYWlyIG9mIHBhaW50IHZhbHVlcyBhbmQgaW50ZXJwb2xhdGUgYmV0d2VlbiB0aGVtLlxuZmxvYXQgdW5wYWNrX21peF92ZWMyKGNvbnN0IHZlYzIgcGFja2VkVmFsdWUsIGNvbnN0IGZsb2F0IHQpIHtcbiAgICByZXR1cm4gbWl4KHBhY2tlZFZhbHVlWzBdLCBwYWNrZWRWYWx1ZVsxXSwgdCk7XG59XG5cbi8vIFVucGFjayBhIHBhaXIgb2YgcGFpbnQgdmFsdWVzIGFuZCBpbnRlcnBvbGF0ZSBiZXR3ZWVuIHRoZW0uXG52ZWM0IHVucGFja19taXhfdmVjNChjb25zdCB2ZWM0IHBhY2tlZENvbG9ycywgY29uc3QgZmxvYXQgdCkge1xuICAgIHZlYzQgbWluQ29sb3IgPSBkZWNvZGVfY29sb3IodmVjMihwYWNrZWRDb2xvcnNbMF0sIHBhY2tlZENvbG9yc1sxXSkpO1xuICAgIHZlYzQgbWF4Q29sb3IgPSBkZWNvZGVfY29sb3IodmVjMihwYWNrZWRDb2xvcnNbMl0sIHBhY2tlZENvbG9yc1szXSkpO1xuICAgIHJldHVybiBtaXgobWluQ29sb3IsIG1heENvbG9yLCB0KTtcbn1cblxuLy8gVGhlIG9mZnNldCBkZXBlbmRzIG9uIGhvdyBtYW55IHBpeGVscyBhcmUgYmV0d2VlbiB0aGUgd29ybGQgb3JpZ2luIGFuZCB0aGUgZWRnZSBvZiB0aGUgdGlsZTpcbi8vIHZlYzIgb2Zmc2V0ID0gbW9kKHBpeGVsX2Nvb3JkLCBzaXplKVxuLy9cbi8vIEF0IGhpZ2ggem9vbSBsZXZlbHMgdGhlcmUgYXJlIGEgdG9uIG9mIHBpeGVscyBiZXR3ZWVuIHRoZSB3b3JsZCBvcmlnaW4gYW5kIHRoZSBlZGdlIG9mIHRoZSB0aWxlLlxuLy8gVGhlIGdsc2wgc3BlYyBvbmx5IGd1YXJhbnRlZXMgMTYgYml0cyBvZiBwcmVjaXNpb24gZm9yIGhpZ2hwIGZsb2F0cy4gV2UgbmVlZCBtb3JlIHRoYW4gdGhhdC5cbi8vXG4vLyBUaGUgcGl4ZWxfY29vcmQgaXMgcGFzc2VkIGluIGFzIHR3byAxNiBiaXQgdmFsdWVzOlxuLy8gcGl4ZWxfY29vcmRfdXBwZXIgPSBmbG9vcihwaXhlbF9jb29yZCAvIDJeMTYpXG4vLyBwaXhlbF9jb29yZF9sb3dlciA9IG1vZChwaXhlbF9jb29yZCwgMl4xNilcbi8vXG4vLyBUaGUgb2Zmc2V0IGlzIGNhbGN1bGF0ZWQgaW4gYSBzZXJpZXMgb2Ygc3RlcHMgdGhhdCBzaG91bGQgcHJlc2VydmUgdGhpcyBwcmVjaXNpb246XG52ZWMyIGdldF9wYXR0ZXJuX3Bvcyhjb25zdCB2ZWMyIHBpeGVsX2Nvb3JkX3VwcGVyLCBjb25zdCB2ZWMyIHBpeGVsX2Nvb3JkX2xvd2VyLFxuICAgIGNvbnN0IHZlYzIgcGF0dGVybl9zaXplLCBjb25zdCBmbG9hdCB0aWxlX3VuaXRzX3RvX3BpeGVscywgY29uc3QgdmVjMiBwb3MpIHtcblxuICAgIHZlYzIgb2Zmc2V0ID0gbW9kKG1vZChtb2QocGl4ZWxfY29vcmRfdXBwZXIsIHBhdHRlcm5fc2l6ZSkgKiAyNTYuMCwgcGF0dGVybl9zaXplKSAqIDI1Ni4wICsgcGl4ZWxfY29vcmRfbG93ZXIsIHBhdHRlcm5fc2l6ZSk7XG4gICAgcmV0dXJuICh0aWxlX3VuaXRzX3RvX3BpeGVscyAqIHBvcyArIG9mZnNldCkgLyBwYXR0ZXJuX3NpemU7XG59XG4ifSxiYWNrZ3JvdW5kOntmcmFnbWVudFNvdXJjZToidW5pZm9ybSB2ZWM0IHVfY29sb3I7XG51bmlmb3JtIGZsb2F0IHVfb3BhY2l0eTtcblxudm9pZCBtYWluKCkge1xuICAgIGdsX0ZyYWdDb2xvciA9IHVfY29sb3IgKiB1X29wYWNpdHk7XG5cbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCk7XG4jZW5kaWZcbn1cbiIsdmVydGV4U291cmNlOiJhdHRyaWJ1dGUgdmVjMiBhX3BvcztcblxudW5pZm9ybSBtYXQ0IHVfbWF0cml4O1xuXG52b2lkIG1haW4oKSB7XG4gICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIHZlYzQoYV9wb3MsIDAsIDEpO1xufVxuIn0sYmFja2dyb3VuZFBhdHRlcm46e2ZyYWdtZW50U291cmNlOiJ1bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX3RsX2E7XG51bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX2JyX2E7XG51bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX3RsX2I7XG51bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX2JyX2I7XG51bmlmb3JtIHZlYzIgdV90ZXhzaXplO1xudW5pZm9ybSBmbG9hdCB1X21peDtcbnVuaWZvcm0gZmxvYXQgdV9vcGFjaXR5O1xuXG51bmlmb3JtIHNhbXBsZXIyRCB1X2ltYWdlO1xuXG52YXJ5aW5nIHZlYzIgdl9wb3NfYTtcbnZhcnlpbmcgdmVjMiB2X3Bvc19iO1xuXG52b2lkIG1haW4oKSB7XG4gICAgdmVjMiBpbWFnZWNvb3JkID0gbW9kKHZfcG9zX2EsIDEuMCk7XG4gICAgdmVjMiBwb3MgPSBtaXgodV9wYXR0ZXJuX3RsX2EgLyB1X3RleHNpemUsIHVfcGF0dGVybl9icl9hIC8gdV90ZXhzaXplLCBpbWFnZWNvb3JkKTtcbiAgICB2ZWM0IGNvbG9yMSA9IHRleHR1cmUyRCh1X2ltYWdlLCBwb3MpO1xuXG4gICAgdmVjMiBpbWFnZWNvb3JkX2IgPSBtb2Qodl9wb3NfYiwgMS4wKTtcbiAgICB2ZWMyIHBvczIgPSBtaXgodV9wYXR0ZXJuX3RsX2IgLyB1X3RleHNpemUsIHVfcGF0dGVybl9icl9iIC8gdV90ZXhzaXplLCBpbWFnZWNvb3JkX2IpO1xuICAgIHZlYzQgY29sb3IyID0gdGV4dHVyZTJEKHVfaW1hZ2UsIHBvczIpO1xuXG4gICAgZ2xfRnJhZ0NvbG9yID0gbWl4KGNvbG9yMSwgY29sb3IyLCB1X21peCkgKiB1X29wYWNpdHk7XG5cbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCk7XG4jZW5kaWZcbn1cbiIsdmVydGV4U291cmNlOiJ1bmlmb3JtIG1hdDQgdV9tYXRyaXg7XG51bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX3NpemVfYTtcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fc2l6ZV9iO1xudW5pZm9ybSB2ZWMyIHVfcGl4ZWxfY29vcmRfdXBwZXI7XG51bmlmb3JtIHZlYzIgdV9waXhlbF9jb29yZF9sb3dlcjtcbnVuaWZvcm0gZmxvYXQgdV9zY2FsZV9hO1xudW5pZm9ybSBmbG9hdCB1X3NjYWxlX2I7XG51bmlmb3JtIGZsb2F0IHVfdGlsZV91bml0c190b19waXhlbHM7XG5cbmF0dHJpYnV0ZSB2ZWMyIGFfcG9zO1xuXG52YXJ5aW5nIHZlYzIgdl9wb3NfYTtcbnZhcnlpbmcgdmVjMiB2X3Bvc19iO1xuXG52b2lkIG1haW4oKSB7XG4gICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIHZlYzQoYV9wb3MsIDAsIDEpO1xuXG4gICAgdl9wb3NfYSA9IGdldF9wYXR0ZXJuX3Bvcyh1X3BpeGVsX2Nvb3JkX3VwcGVyLCB1X3BpeGVsX2Nvb3JkX2xvd2VyLCB1X3NjYWxlX2EgKiB1X3BhdHRlcm5fc2l6ZV9hLCB1X3RpbGVfdW5pdHNfdG9fcGl4ZWxzLCBhX3Bvcyk7XG4gICAgdl9wb3NfYiA9IGdldF9wYXR0ZXJuX3Bvcyh1X3BpeGVsX2Nvb3JkX3VwcGVyLCB1X3BpeGVsX2Nvb3JkX2xvd2VyLCB1X3NjYWxlX2IgKiB1X3BhdHRlcm5fc2l6ZV9iLCB1X3RpbGVfdW5pdHNfdG9fcGl4ZWxzLCBhX3Bvcyk7XG59XG4ifSxjaXJjbGU6e2ZyYWdtZW50U291cmNlOiIjcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgY29sb3JcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbWVkaXVtcCBmbG9hdCByYWRpdXNcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBibHVyXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IHN0cm9rZV9jb2xvclxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBtZWRpdW1wIGZsb2F0IHN0cm9rZV93aWR0aFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IHN0cm9rZV9vcGFjaXR5XG5cbnZhcnlpbmcgdmVjMyB2X2RhdGE7XG5cbnZvaWQgbWFpbigpIHtcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IGNvbG9yXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCBmbG9hdCByYWRpdXNcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGJsdXJcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IHN0cm9rZV9jb2xvclxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgZmxvYXQgc3Ryb2tlX3dpZHRoXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBzdHJva2Vfb3BhY2l0eVxuXG4gICAgdmVjMiBleHRydWRlID0gdl9kYXRhLnh5O1xuICAgIGZsb2F0IGV4dHJ1ZGVfbGVuZ3RoID0gbGVuZ3RoKGV4dHJ1ZGUpO1xuXG4gICAgbG93cCBmbG9hdCBhbnRpYWxpYXNibHVyID0gdl9kYXRhLno7XG4gICAgZmxvYXQgYW50aWFsaWFzZWRfYmx1ciA9IC1tYXgoYmx1ciwgYW50aWFsaWFzYmx1cik7XG5cbiAgICBmbG9hdCBvcGFjaXR5X3QgPSBzbW9vdGhzdGVwKDAuMCwgYW50aWFsaWFzZWRfYmx1ciwgZXh0cnVkZV9sZW5ndGggLSAxLjApO1xuXG4gICAgZmxvYXQgY29sb3JfdCA9IHN0cm9rZV93aWR0aCA8IDAuMDEgPyAwLjAgOiBzbW9vdGhzdGVwKFxuICAgICAgICBhbnRpYWxpYXNlZF9ibHVyLFxuICAgICAgICAwLjAsXG4gICAgICAgIGV4dHJ1ZGVfbGVuZ3RoIC0gcmFkaXVzIC8gKHJhZGl1cyArIHN0cm9rZV93aWR0aClcbiAgICApO1xuXG4gICAgZ2xfRnJhZ0NvbG9yID0gb3BhY2l0eV90ICogbWl4KGNvbG9yICogb3BhY2l0eSwgc3Ryb2tlX2NvbG9yICogc3Ryb2tlX29wYWNpdHksIGNvbG9yX3QpO1xuXG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjApO1xuI2VuZGlmXG59XG4iLHZlcnRleFNvdXJjZToidW5pZm9ybSBtYXQ0IHVfbWF0cml4O1xudW5pZm9ybSBib29sIHVfc2NhbGVfd2l0aF9tYXA7XG51bmlmb3JtIGJvb2wgdV9waXRjaF93aXRoX21hcDtcbnVuaWZvcm0gdmVjMiB1X2V4dHJ1ZGVfc2NhbGU7XG51bmlmb3JtIGhpZ2hwIGZsb2F0IHVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZTtcblxuYXR0cmlidXRlIHZlYzIgYV9wb3M7XG5cbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBjb2xvclxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBtZWRpdW1wIGZsb2F0IHJhZGl1c1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGJsdXJcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgc3Ryb2tlX2NvbG9yXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIG1lZGl1bXAgZmxvYXQgc3Ryb2tlX3dpZHRoXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgc3Ryb2tlX29wYWNpdHlcblxudmFyeWluZyB2ZWMzIHZfZGF0YTtcblxudm9pZCBtYWluKHZvaWQpIHtcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IGNvbG9yXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCBmbG9hdCByYWRpdXNcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGJsdXJcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IHN0cm9rZV9jb2xvclxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgZmxvYXQgc3Ryb2tlX3dpZHRoXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBzdHJva2Vfb3BhY2l0eVxuXG4gICAgLy8gdW5lbmNvZGUgdGhlIGV4dHJ1c2lvbiB2ZWN0b3IgdGhhdCB3ZSBzbnVjayBpbnRvIHRoZSBhX3BvcyB2ZWN0b3JcbiAgICB2ZWMyIGV4dHJ1ZGUgPSB2ZWMyKG1vZChhX3BvcywgMi4wKSAqIDIuMCAtIDEuMCk7XG5cbiAgICAvLyBtdWx0aXBseSBhX3BvcyBieSAwLjUsIHNpbmNlIHdlIGhhZCBpdCAqIDIgaW4gb3JkZXIgdG8gc25lYWtcbiAgICAvLyBpbiBleHRydXNpb24gZGF0YVxuICAgIHZlYzIgY2lyY2xlX2NlbnRlciA9IGZsb29yKGFfcG9zICogMC41KTtcbiAgICBpZiAodV9waXRjaF93aXRoX21hcCkge1xuICAgICAgICB2ZWMyIGNvcm5lcl9wb3NpdGlvbiA9IGNpcmNsZV9jZW50ZXI7XG4gICAgICAgIGlmICh1X3NjYWxlX3dpdGhfbWFwKSB7XG4gICAgICAgICAgICBjb3JuZXJfcG9zaXRpb24gKz0gZXh0cnVkZSAqIChyYWRpdXMgKyBzdHJva2Vfd2lkdGgpICogdV9leHRydWRlX3NjYWxlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gUGl0Y2hpbmcgdGhlIGNpcmNsZSB3aXRoIHRoZSBtYXAgZWZmZWN0aXZlbHkgc2NhbGVzIGl0IHdpdGggdGhlIG1hcFxuICAgICAgICAgICAgLy8gVG8gY291bnRlcmFjdCB0aGUgZWZmZWN0IGZvciBwaXRjaC1zY2FsZTogdmlld3BvcnQsIHdlIHJlc2NhbGUgdGhlXG4gICAgICAgICAgICAvLyB3aG9sZSBjaXJjbGUgYmFzZWQgb24gdGhlIHBpdGNoIHNjYWxpbmcgZWZmZWN0IGF0IGl0cyBjZW50cmFsIHBvaW50XG4gICAgICAgICAgICB2ZWM0IHByb2plY3RlZF9jZW50ZXIgPSB1X21hdHJpeCAqIHZlYzQoY2lyY2xlX2NlbnRlciwgMCwgMSk7XG4gICAgICAgICAgICBjb3JuZXJfcG9zaXRpb24gKz0gZXh0cnVkZSAqIChyYWRpdXMgKyBzdHJva2Vfd2lkdGgpICogdV9leHRydWRlX3NjYWxlICogKHByb2plY3RlZF9jZW50ZXIudyAvIHVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSk7XG4gICAgICAgIH1cblxuICAgICAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogdmVjNChjb3JuZXJfcG9zaXRpb24sIDAsIDEpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiB2ZWM0KGNpcmNsZV9jZW50ZXIsIDAsIDEpO1xuXG4gICAgICAgIGlmICh1X3NjYWxlX3dpdGhfbWFwKSB7XG4gICAgICAgICAgICBnbF9Qb3NpdGlvbi54eSArPSBleHRydWRlICogKHJhZGl1cyArIHN0cm9rZV93aWR0aCkgKiB1X2V4dHJ1ZGVfc2NhbGUgKiB1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBnbF9Qb3NpdGlvbi54eSArPSBleHRydWRlICogKHJhZGl1cyArIHN0cm9rZV93aWR0aCkgKiB1X2V4dHJ1ZGVfc2NhbGUgKiBnbF9Qb3NpdGlvbi53O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gVGhpcyBpcyBhIG1pbmltdW0gYmx1ciBkaXN0YW5jZSB0aGF0IHNlcnZlcyBhcyBhIGZhdXgtYW50aWFsaWFzaW5nIGZvclxuICAgIC8vIHRoZSBjaXJjbGUuIHNpbmNlIGJsdXIgaXMgYSByYXRpbyBvZiB0aGUgY2lyY2xlJ3Mgc2l6ZSBhbmQgdGhlIGludGVudCBpc1xuICAgIC8vIHRvIGtlZXAgdGhlIGJsdXIgYXQgcm91Z2hseSAxcHgsIHRoZSB0d28gYXJlIGludmVyc2VseSByZWxhdGVkLlxuICAgIGxvd3AgZmxvYXQgYW50aWFsaWFzYmx1ciA9IDEuMCAvIERFVklDRV9QSVhFTF9SQVRJTyAvIChyYWRpdXMgKyBzdHJva2Vfd2lkdGgpO1xuXG4gICAgdl9kYXRhID0gdmVjMyhleHRydWRlLngsIGV4dHJ1ZGUueSwgYW50aWFsaWFzYmx1cik7XG59XG4ifSxjbGlwcGluZ01hc2s6e2ZyYWdtZW50U291cmNlOiJ2b2lkIG1haW4oKSB7XG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjApO1xufVxuIix2ZXJ0ZXhTb3VyY2U6ImF0dHJpYnV0ZSB2ZWMyIGFfcG9zO1xuXG51bmlmb3JtIG1hdDQgdV9tYXRyaXg7XG5cbnZvaWQgbWFpbigpIHtcbiAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogdmVjNChhX3BvcywgMCwgMSk7XG59XG4ifSxoZWF0bWFwOntmcmFnbWVudFNvdXJjZToiI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCBmbG9hdCB3ZWlnaHRcblxudW5pZm9ybSBoaWdocCBmbG9hdCB1X2ludGVuc2l0eTtcbnZhcnlpbmcgdmVjMiB2X2V4dHJ1ZGU7XG5cbi8vIEdhdXNzaWFuIGtlcm5lbCBjb2VmZmljaWVudDogMSAvIHNxcnQoMiAqIFBJKVxuI2RlZmluZSBHQVVTU19DT0VGIDAuMzk4OTQyMjgwNDAxNDMyN1xuXG52b2lkIG1haW4oKSB7XG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgZmxvYXQgd2VpZ2h0XG5cbiAgICAvLyBLZXJuZWwgZGVuc2l0eSBlc3RpbWF0aW9uIHdpdGggYSBHYXVzc2lhbiBrZXJuZWwgb2Ygc2l6ZSA1eDVcbiAgICBmbG9hdCBkID0gLTAuNSAqIDMuMCAqIDMuMCAqIGRvdCh2X2V4dHJ1ZGUsIHZfZXh0cnVkZSk7XG4gICAgZmxvYXQgdmFsID0gd2VpZ2h0ICogdV9pbnRlbnNpdHkgKiBHQVVTU19DT0VGICogZXhwKGQpO1xuXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCh2YWwsIDEuMCwgMS4wLCAxLjApO1xuXG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjApO1xuI2VuZGlmXG59XG4iLHZlcnRleFNvdXJjZToiI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCBmbG9hdCB3ZWlnaHRcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbWVkaXVtcCBmbG9hdCByYWRpdXNcblxudW5pZm9ybSBtYXQ0IHVfbWF0cml4O1xudW5pZm9ybSBmbG9hdCB1X2V4dHJ1ZGVfc2NhbGU7XG51bmlmb3JtIGZsb2F0IHVfb3BhY2l0eTtcbnVuaWZvcm0gZmxvYXQgdV9pbnRlbnNpdHk7XG5cbmF0dHJpYnV0ZSB2ZWMyIGFfcG9zO1xuXG52YXJ5aW5nIHZlYzIgdl9leHRydWRlO1xuXG4vLyBFZmZlY3RpdmUgXCIwXCIgaW4gdGhlIGtlcm5lbCBkZW5zaXR5IHRleHR1cmUgdG8gYWRqdXN0IHRoZSBrZXJuZWwgc2l6ZSB0bztcbi8vIHRoaXMgZW1waXJpY2FsbHkgY2hvc2VuIG51bWJlciBtaW5pbWl6ZXMgYXJ0aWZhY3RzIG9uIG92ZXJsYXBwaW5nIGtlcm5lbHNcbi8vIGZvciB0eXBpY2FsIGhlYXRtYXAgY2FzZXMgKGFzc3VtaW5nIGNsdXN0ZXJlZCBzb3VyY2UpXG5jb25zdCBoaWdocCBmbG9hdCBaRVJPID0gMS4wIC8gMjU1LjAgLyAxNi4wO1xuXG4vLyBHYXVzc2lhbiBrZXJuZWwgY29lZmZpY2llbnQ6IDEgLyBzcXJ0KDIgKiBQSSlcbiNkZWZpbmUgR0FVU1NfQ09FRiAwLjM5ODk0MjI4MDQwMTQzMjdcblxudm9pZCBtYWluKHZvaWQpIHtcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCBmbG9hdCB3ZWlnaHRcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIGZsb2F0IHJhZGl1c1xuXG4gICAgLy8gdW5lbmNvZGUgdGhlIGV4dHJ1c2lvbiB2ZWN0b3IgdGhhdCB3ZSBzbnVjayBpbnRvIHRoZSBhX3BvcyB2ZWN0b3JcbiAgICB2ZWMyIHVuc2NhbGVkX2V4dHJ1ZGUgPSB2ZWMyKG1vZChhX3BvcywgMi4wKSAqIDIuMCAtIDEuMCk7XG5cbiAgICAvLyBUaGlzICdleHRydWRlJyBjb21lcyBpbiByYW5naW5nIGZyb20gWy0xLCAtMV0sIHRvIFsxLCAxXS4gIFdlJ2xsIHVzZVxuICAgIC8vIGl0IHRvIHByb2R1Y2UgdGhlIHZlcnRpY2VzIG9mIGEgc3F1YXJlIG1lc2ggZnJhbWluZyB0aGUgcG9pbnQgZmVhdHVyZVxuICAgIC8vIHdlJ3JlIGFkZGluZyB0byB0aGUga2VybmVsIGRlbnNpdHkgdGV4dHVyZS4gIFdlJ2xsIGFsc28gcGFzcyBpdCBhc1xuICAgIC8vIGEgdmFyeWluZywgc28gdGhhdCB0aGUgZnJhZ21lbnQgc2hhZGVyIGNhbiBkZXRlcm1pbmUgdGhlIGRpc3RhbmNlIG9mXG4gICAgLy8gZWFjaCBmcmFnbWVudCBmcm9tIHRoZSBwb2ludCBmZWF0dXJlLlxuICAgIC8vIEJlZm9yZSB3ZSBkbyBzbywgd2UgbmVlZCB0byBzY2FsZSBpdCB1cCBzdWZmaWNpZW50bHkgc28gdGhhdCB0aGVcbiAgICAvLyBrZXJuZWwgZmFsbHMgZWZmZWN0aXZlbHkgdG8gemVybyBhdCB0aGUgZWRnZSBvZiB0aGUgbWVzaC5cbiAgICAvLyBUaGF0IGlzLCB3ZSB3YW50IHRvIGtub3cgUyBzdWNoIHRoYXRcbiAgICAvLyB3ZWlnaHQgKiB1X2ludGVuc2l0eSAqIEdBVVNTX0NPRUYgKiBleHAoLTAuNSAqIDMuMF4yICogU14yKSA9PSBaRVJPXG4gICAgLy8gV2hpY2ggc29sdmVzIHRvOlxuICAgIC8vIFMgPSBzcXJ0KC0yLjAgKiBsb2coWkVSTyAvICh3ZWlnaHQgKiB1X2ludGVuc2l0eSAqIEdBVVNTX0NPRUYpKSkgLyAzLjBcbiAgICBmbG9hdCBTID0gc3FydCgtMi4wICogbG9nKFpFUk8gLyB3ZWlnaHQgLyB1X2ludGVuc2l0eSAvIEdBVVNTX0NPRUYpKSAvIDMuMDtcblxuICAgIC8vIFBhc3MgdGhlIHZhcnlpbmcgaW4gdW5pdHMgb2YgcmFkaXVzXG4gICAgdl9leHRydWRlID0gUyAqIHVuc2NhbGVkX2V4dHJ1ZGU7XG5cbiAgICAvLyBTY2FsZSBieSByYWRpdXMgYW5kIHRoZSB6b29tLWJhc2VkIHNjYWxlIGZhY3RvciB0byBwcm9kdWNlIGFjdHVhbFxuICAgIC8vIG1lc2ggcG9zaXRpb25cbiAgICB2ZWMyIGV4dHJ1ZGUgPSB2X2V4dHJ1ZGUgKiByYWRpdXMgKiB1X2V4dHJ1ZGVfc2NhbGU7XG5cbiAgICAvLyBtdWx0aXBseSBhX3BvcyBieSAwLjUsIHNpbmNlIHdlIGhhZCBpdCAqIDIgaW4gb3JkZXIgdG8gc25lYWtcbiAgICAvLyBpbiBleHRydXNpb24gZGF0YVxuICAgIHZlYzQgcG9zID0gdmVjNChmbG9vcihhX3BvcyAqIDAuNSkgKyBleHRydWRlLCAwLCAxKTtcblxuICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiBwb3M7XG59XG4ifSxoZWF0bWFwVGV4dHVyZTp7ZnJhZ21lbnRTb3VyY2U6InVuaWZvcm0gc2FtcGxlcjJEIHVfaW1hZ2U7XG51bmlmb3JtIHNhbXBsZXIyRCB1X2NvbG9yX3JhbXA7XG51bmlmb3JtIGZsb2F0IHVfb3BhY2l0eTtcbnZhcnlpbmcgdmVjMiB2X3Bvcztcblxudm9pZCBtYWluKCkge1xuICAgIGZsb2F0IHQgPSB0ZXh0dXJlMkQodV9pbWFnZSwgdl9wb3MpLnI7XG4gICAgdmVjNCBjb2xvciA9IHRleHR1cmUyRCh1X2NvbG9yX3JhbXAsIHZlYzIodCwgMC41KSk7XG4gICAgZ2xfRnJhZ0NvbG9yID0gY29sb3IgKiB1X29wYWNpdHk7XG5cbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCk7XG4jZW5kaWZcbn1cbiIsdmVydGV4U291cmNlOiJ1bmlmb3JtIG1hdDQgdV9tYXRyaXg7XG51bmlmb3JtIHZlYzIgdV93b3JsZDtcbmF0dHJpYnV0ZSB2ZWMyIGFfcG9zO1xudmFyeWluZyB2ZWMyIHZfcG9zO1xuXG52b2lkIG1haW4oKSB7XG4gICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIHZlYzQoYV9wb3MgKiB1X3dvcmxkLCAwLCAxKTtcblxuICAgIHZfcG9zLnggPSBhX3Bvcy54O1xuICAgIHZfcG9zLnkgPSAxLjAgLSBhX3Bvcy55O1xufVxuIn0sY29sbGlzaW9uQm94OntmcmFnbWVudFNvdXJjZToiXG52YXJ5aW5nIGZsb2F0IHZfcGxhY2VkO1xudmFyeWluZyBmbG9hdCB2X25vdFVzZWQ7XG5cbnZvaWQgbWFpbigpIHtcblxuICAgIGZsb2F0IGFscGhhID0gMC41O1xuXG4gICAgLy8gUmVkID0gY29sbGlzaW9uLCBoaWRlIGxhYmVsXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjAsIDAuMCwgMC4wLCAxLjApICogYWxwaGE7XG5cbiAgICAvLyBCbHVlID0gbm8gY29sbGlzaW9uLCBsYWJlbCBpcyBzaG93aW5nXG4gICAgaWYgKHZfcGxhY2VkID4gMC41KSB7XG4gICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wLCAwLjAsIDEuMCwgMC41KSAqIGFscGhhO1xuICAgIH1cblxuICAgIGlmICh2X25vdFVzZWQgPiAwLjUpIHtcbiAgICAgICAgLy8gVGhpcyBib3ggbm90IHVzZWQsIGZhZGUgaXQgb3V0XG4gICAgICAgIGdsX0ZyYWdDb2xvciAqPSAuMTtcbiAgICB9XG59Iix2ZXJ0ZXhTb3VyY2U6ImF0dHJpYnV0ZSB2ZWMyIGFfcG9zO1xuYXR0cmlidXRlIHZlYzIgYV9hbmNob3JfcG9zO1xuYXR0cmlidXRlIHZlYzIgYV9leHRydWRlO1xuYXR0cmlidXRlIHZlYzIgYV9wbGFjZWQ7XG5cbnVuaWZvcm0gbWF0NCB1X21hdHJpeDtcbnVuaWZvcm0gdmVjMiB1X2V4dHJ1ZGVfc2NhbGU7XG51bmlmb3JtIGZsb2F0IHVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZTtcblxudmFyeWluZyBmbG9hdCB2X3BsYWNlZDtcbnZhcnlpbmcgZmxvYXQgdl9ub3RVc2VkO1xuXG52b2lkIG1haW4oKSB7XG4gICAgdmVjNCBwcm9qZWN0ZWRQb2ludCA9IHVfbWF0cml4ICogdmVjNChhX2FuY2hvcl9wb3MsIDAsIDEpO1xuICAgIGhpZ2hwIGZsb2F0IGNhbWVyYV90b19hbmNob3JfZGlzdGFuY2UgPSBwcm9qZWN0ZWRQb2ludC53O1xuICAgIGhpZ2hwIGZsb2F0IGNvbGxpc2lvbl9wZXJzcGVjdGl2ZV9yYXRpbyA9IGNsYW1wKFxuICAgICAgICAwLjUgKyAwLjUgKiAodV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlIC8gY2FtZXJhX3RvX2FuY2hvcl9kaXN0YW5jZSksXG4gICAgICAgIDAuMCwgLy8gUHJldmVudHMgb3ZlcnNpemVkIG5lYXItZmllbGQgYm94ZXMgaW4gcGl0Y2hlZC9vdmVyem9vbWVkIHRpbGVzXG4gICAgICAgIDQuMCk7XG5cbiAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogdmVjNChhX3BvcywgMC4wLCAxLjApO1xuICAgIGdsX1Bvc2l0aW9uLnh5ICs9IGFfZXh0cnVkZSAqIHVfZXh0cnVkZV9zY2FsZSAqIGdsX1Bvc2l0aW9uLncgKiBjb2xsaXNpb25fcGVyc3BlY3RpdmVfcmF0aW87XG5cbiAgICB2X3BsYWNlZCA9IGFfcGxhY2VkLng7XG4gICAgdl9ub3RVc2VkID0gYV9wbGFjZWQueTtcbn1cbiJ9LGNvbGxpc2lvbkNpcmNsZTp7ZnJhZ21lbnRTb3VyY2U6InVuaWZvcm0gZmxvYXQgdV9vdmVyc2NhbGVfZmFjdG9yO1xuXG52YXJ5aW5nIGZsb2F0IHZfcGxhY2VkO1xudmFyeWluZyBmbG9hdCB2X25vdFVzZWQ7XG52YXJ5aW5nIGZsb2F0IHZfcmFkaXVzO1xudmFyeWluZyB2ZWMyIHZfZXh0cnVkZTtcbnZhcnlpbmcgdmVjMiB2X2V4dHJ1ZGVfc2NhbGU7XG5cbnZvaWQgbWFpbigpIHtcbiAgICBmbG9hdCBhbHBoYSA9IDAuNTtcblxuICAgIC8vIFJlZCA9IGNvbGxpc2lvbiwgaGlkZSBsYWJlbFxuICAgIHZlYzQgY29sb3IgPSB2ZWM0KDEuMCwgMC4wLCAwLjAsIDEuMCkgKiBhbHBoYTtcblxuICAgIC8vIEJsdWUgPSBubyBjb2xsaXNpb24sIGxhYmVsIGlzIHNob3dpbmdcbiAgICBpZiAodl9wbGFjZWQgPiAwLjUpIHtcbiAgICAgICAgY29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAxLjAsIDAuNSkgKiBhbHBoYTtcbiAgICB9XG5cbiAgICBpZiAodl9ub3RVc2VkID4gMC41KSB7XG4gICAgICAgIC8vIFRoaXMgYm94IG5vdCB1c2VkLCBmYWRlIGl0IG91dFxuICAgICAgICBjb2xvciAqPSAuMjtcbiAgICB9XG5cbiAgICBmbG9hdCBleHRydWRlX3NjYWxlX2xlbmd0aCA9IGxlbmd0aCh2X2V4dHJ1ZGVfc2NhbGUpO1xuICAgIGZsb2F0IGV4dHJ1ZGVfbGVuZ3RoID0gbGVuZ3RoKHZfZXh0cnVkZSkgKiBleHRydWRlX3NjYWxlX2xlbmd0aDtcbiAgICBmbG9hdCBzdHJva2Vfd2lkdGggPSAxNS4wICogZXh0cnVkZV9zY2FsZV9sZW5ndGggLyB1X292ZXJzY2FsZV9mYWN0b3I7XG4gICAgZmxvYXQgcmFkaXVzID0gdl9yYWRpdXMgKiBleHRydWRlX3NjYWxlX2xlbmd0aDtcblxuICAgIGZsb2F0IGRpc3RhbmNlX3RvX2VkZ2UgPSBhYnMoZXh0cnVkZV9sZW5ndGggLSByYWRpdXMpO1xuICAgIGZsb2F0IG9wYWNpdHlfdCA9IHNtb290aHN0ZXAoLXN0cm9rZV93aWR0aCwgMC4wLCAtZGlzdGFuY2VfdG9fZWRnZSk7XG5cbiAgICBnbF9GcmFnQ29sb3IgPSBvcGFjaXR5X3QgKiBjb2xvcjtcbn1cbiIsdmVydGV4U291cmNlOiJhdHRyaWJ1dGUgdmVjMiBhX3BvcztcbmF0dHJpYnV0ZSB2ZWMyIGFfYW5jaG9yX3BvcztcbmF0dHJpYnV0ZSB2ZWMyIGFfZXh0cnVkZTtcbmF0dHJpYnV0ZSB2ZWMyIGFfcGxhY2VkO1xuXG51bmlmb3JtIG1hdDQgdV9tYXRyaXg7XG51bmlmb3JtIHZlYzIgdV9leHRydWRlX3NjYWxlO1xudW5pZm9ybSBmbG9hdCB1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2U7XG5cbnZhcnlpbmcgZmxvYXQgdl9wbGFjZWQ7XG52YXJ5aW5nIGZsb2F0IHZfbm90VXNlZDtcbnZhcnlpbmcgZmxvYXQgdl9yYWRpdXM7XG5cbnZhcnlpbmcgdmVjMiB2X2V4dHJ1ZGU7XG52YXJ5aW5nIHZlYzIgdl9leHRydWRlX3NjYWxlO1xuXG52b2lkIG1haW4oKSB7XG4gICAgdmVjNCBwcm9qZWN0ZWRQb2ludCA9IHVfbWF0cml4ICogdmVjNChhX2FuY2hvcl9wb3MsIDAsIDEpO1xuICAgIGhpZ2hwIGZsb2F0IGNhbWVyYV90b19hbmNob3JfZGlzdGFuY2UgPSBwcm9qZWN0ZWRQb2ludC53O1xuICAgIGhpZ2hwIGZsb2F0IGNvbGxpc2lvbl9wZXJzcGVjdGl2ZV9yYXRpbyA9IGNsYW1wKFxuICAgICAgICAwLjUgKyAwLjUgKiAodV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlIC8gY2FtZXJhX3RvX2FuY2hvcl9kaXN0YW5jZSksXG4gICAgICAgIDAuMCwgLy8gUHJldmVudHMgb3ZlcnNpemVkIG5lYXItZmllbGQgY2lyY2xlcyBpbiBwaXRjaGVkL292ZXJ6b29tZWQgdGlsZXNcbiAgICAgICAgNC4wKTtcblxuICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiB2ZWM0KGFfcG9zLCAwLjAsIDEuMCk7XG5cbiAgICBoaWdocCBmbG9hdCBwYWRkaW5nX2ZhY3RvciA9IDEuMjsgLy8gUGFkIHRoZSB2ZXJ0aWNlcyBzbGlnaHRseSB0byBtYWtlIHJvb20gZm9yIGFudGktYWxpYXMgYmx1clxuICAgIGdsX1Bvc2l0aW9uLnh5ICs9IGFfZXh0cnVkZSAqIHVfZXh0cnVkZV9zY2FsZSAqIHBhZGRpbmdfZmFjdG9yICogZ2xfUG9zaXRpb24udyAqIGNvbGxpc2lvbl9wZXJzcGVjdGl2ZV9yYXRpbztcblxuICAgIHZfcGxhY2VkID0gYV9wbGFjZWQueDtcbiAgICB2X25vdFVzZWQgPSBhX3BsYWNlZC55O1xuICAgIHZfcmFkaXVzID0gYWJzKGFfZXh0cnVkZS55KTsgLy8gV2UgZG9uJ3QgcGl0Y2ggdGhlIGNpcmNsZXMsIHNvIGJvdGggdW5pdHMgb2YgdGhlIGV4dHJ1c2lvbiB2ZWN0b3IgYXJlIGVxdWFsIGluIG1hZ25pdHVkZSB0byB0aGUgcmFkaXVzXG5cbiAgICB2X2V4dHJ1ZGUgPSBhX2V4dHJ1ZGUgKiBwYWRkaW5nX2ZhY3RvcjtcbiAgICB2X2V4dHJ1ZGVfc2NhbGUgPSB1X2V4dHJ1ZGVfc2NhbGUgKiB1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UgKiBjb2xsaXNpb25fcGVyc3BlY3RpdmVfcmF0aW87XG59XG4ifSxkZWJ1Zzp7ZnJhZ21lbnRTb3VyY2U6InVuaWZvcm0gaGlnaHAgdmVjNCB1X2NvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gICAgZ2xfRnJhZ0NvbG9yID0gdV9jb2xvcjtcbn1cbiIsdmVydGV4U291cmNlOiJhdHRyaWJ1dGUgdmVjMiBhX3BvcztcblxudW5pZm9ybSBtYXQ0IHVfbWF0cml4O1xuXG52b2lkIG1haW4oKSB7XG4gICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIHZlYzQoYV9wb3MsIDAsIDEpO1xufVxuIn0sZmlsbDp7ZnJhZ21lbnRTb3VyY2U6IiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBjb2xvclxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcblxudm9pZCBtYWluKCkge1xuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgY29sb3JcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcblxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yICogb3BhY2l0eTtcblxuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4wKTtcbiNlbmRpZlxufVxuIix2ZXJ0ZXhTb3VyY2U6ImF0dHJpYnV0ZSB2ZWMyIGFfcG9zO1xuXG51bmlmb3JtIG1hdDQgdV9tYXRyaXg7XG5cbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBjb2xvclxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcblxudm9pZCBtYWluKCkge1xuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgY29sb3JcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcblxuICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiB2ZWM0KGFfcG9zLCAwLCAxKTtcbn1cbiJ9LGZpbGxPdXRsaW5lOntmcmFnbWVudFNvdXJjZToiI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IG91dGxpbmVfY29sb3JcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG5cbnZhcnlpbmcgdmVjMiB2X3Bvcztcblxudm9pZCBtYWluKCkge1xuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgb3V0bGluZV9jb2xvclxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuXG4gICAgZmxvYXQgZGlzdCA9IGxlbmd0aCh2X3BvcyAtIGdsX0ZyYWdDb29yZC54eSk7XG4gICAgZmxvYXQgYWxwaGEgPSAxLjAgLSBzbW9vdGhzdGVwKDAuMCwgMS4wLCBkaXN0KTtcbiAgICBnbF9GcmFnQ29sb3IgPSBvdXRsaW5lX2NvbG9yICogKGFscGhhICogb3BhY2l0eSk7XG5cbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCk7XG4jZW5kaWZcbn1cbiIsdmVydGV4U291cmNlOiJhdHRyaWJ1dGUgdmVjMiBhX3BvcztcblxudW5pZm9ybSBtYXQ0IHVfbWF0cml4O1xudW5pZm9ybSB2ZWMyIHVfd29ybGQ7XG5cbnZhcnlpbmcgdmVjMiB2X3BvcztcblxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IG91dGxpbmVfY29sb3JcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG5cbnZvaWQgbWFpbigpIHtcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IG91dGxpbmVfY29sb3JcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcblxuICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiB2ZWM0KGFfcG9zLCAwLCAxKTtcbiAgICB2X3BvcyA9IChnbF9Qb3NpdGlvbi54eSAvIGdsX1Bvc2l0aW9uLncgKyAxLjApIC8gMi4wICogdV93b3JsZDtcbn1cbiJ9LGZpbGxPdXRsaW5lUGF0dGVybjp7ZnJhZ21lbnRTb3VyY2U6InVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fdGxfYTtcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fYnJfYTtcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fdGxfYjtcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fYnJfYjtcbnVuaWZvcm0gdmVjMiB1X3RleHNpemU7XG51bmlmb3JtIGZsb2F0IHVfbWl4O1xuXG51bmlmb3JtIHNhbXBsZXIyRCB1X2ltYWdlO1xuXG52YXJ5aW5nIHZlYzIgdl9wb3NfYTtcbnZhcnlpbmcgdmVjMiB2X3Bvc19iO1xudmFyeWluZyB2ZWMyIHZfcG9zO1xuXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxuXG52b2lkIG1haW4oKSB7XG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG5cbiAgICB2ZWMyIGltYWdlY29vcmQgPSBtb2Qodl9wb3NfYSwgMS4wKTtcbiAgICB2ZWMyIHBvcyA9IG1peCh1X3BhdHRlcm5fdGxfYSAvIHVfdGV4c2l6ZSwgdV9wYXR0ZXJuX2JyX2EgLyB1X3RleHNpemUsIGltYWdlY29vcmQpO1xuICAgIHZlYzQgY29sb3IxID0gdGV4dHVyZTJEKHVfaW1hZ2UsIHBvcyk7XG5cbiAgICB2ZWMyIGltYWdlY29vcmRfYiA9IG1vZCh2X3Bvc19iLCAxLjApO1xuICAgIHZlYzIgcG9zMiA9IG1peCh1X3BhdHRlcm5fdGxfYiAvIHVfdGV4c2l6ZSwgdV9wYXR0ZXJuX2JyX2IgLyB1X3RleHNpemUsIGltYWdlY29vcmRfYik7XG4gICAgdmVjNCBjb2xvcjIgPSB0ZXh0dXJlMkQodV9pbWFnZSwgcG9zMik7XG5cbiAgICAvLyBmaW5kIGRpc3RhbmNlIHRvIG91dGxpbmUgZm9yIGFscGhhIGludGVycG9sYXRpb25cblxuICAgIGZsb2F0IGRpc3QgPSBsZW5ndGgodl9wb3MgLSBnbF9GcmFnQ29vcmQueHkpO1xuICAgIGZsb2F0IGFscGhhID0gMS4wIC0gc21vb3Roc3RlcCgwLjAsIDEuMCwgZGlzdCk7XG5cblxuICAgIGdsX0ZyYWdDb2xvciA9IG1peChjb2xvcjEsIGNvbG9yMiwgdV9taXgpICogYWxwaGEgKiBvcGFjaXR5O1xuXG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjApO1xuI2VuZGlmXG59XG4iLHZlcnRleFNvdXJjZToidW5pZm9ybSBtYXQ0IHVfbWF0cml4O1xudW5pZm9ybSB2ZWMyIHVfd29ybGQ7XG51bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX3NpemVfYTtcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fc2l6ZV9iO1xudW5pZm9ybSB2ZWMyIHVfcGl4ZWxfY29vcmRfdXBwZXI7XG51bmlmb3JtIHZlYzIgdV9waXhlbF9jb29yZF9sb3dlcjtcbnVuaWZvcm0gZmxvYXQgdV9zY2FsZV9hO1xudW5pZm9ybSBmbG9hdCB1X3NjYWxlX2I7XG51bmlmb3JtIGZsb2F0IHVfdGlsZV91bml0c190b19waXhlbHM7XG5cbmF0dHJpYnV0ZSB2ZWMyIGFfcG9zO1xuXG52YXJ5aW5nIHZlYzIgdl9wb3NfYTtcbnZhcnlpbmcgdmVjMiB2X3Bvc19iO1xudmFyeWluZyB2ZWMyIHZfcG9zO1xuXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxuXG52b2lkIG1haW4oKSB7XG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG5cbiAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogdmVjNChhX3BvcywgMCwgMSk7XG5cbiAgICB2X3Bvc19hID0gZ2V0X3BhdHRlcm5fcG9zKHVfcGl4ZWxfY29vcmRfdXBwZXIsIHVfcGl4ZWxfY29vcmRfbG93ZXIsIHVfc2NhbGVfYSAqIHVfcGF0dGVybl9zaXplX2EsIHVfdGlsZV91bml0c190b19waXhlbHMsIGFfcG9zKTtcbiAgICB2X3Bvc19iID0gZ2V0X3BhdHRlcm5fcG9zKHVfcGl4ZWxfY29vcmRfdXBwZXIsIHVfcGl4ZWxfY29vcmRfbG93ZXIsIHVfc2NhbGVfYiAqIHVfcGF0dGVybl9zaXplX2IsIHVfdGlsZV91bml0c190b19waXhlbHMsIGFfcG9zKTtcblxuICAgIHZfcG9zID0gKGdsX1Bvc2l0aW9uLnh5IC8gZ2xfUG9zaXRpb24udyArIDEuMCkgLyAyLjAgKiB1X3dvcmxkO1xufVxuIn0sZmlsbFBhdHRlcm46e2ZyYWdtZW50U291cmNlOiJ1bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX3RsX2E7XG51bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX2JyX2E7XG51bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX3RsX2I7XG51bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX2JyX2I7XG51bmlmb3JtIHZlYzIgdV90ZXhzaXplO1xudW5pZm9ybSBmbG9hdCB1X21peDtcblxudW5pZm9ybSBzYW1wbGVyMkQgdV9pbWFnZTtcblxudmFyeWluZyB2ZWMyIHZfcG9zX2E7XG52YXJ5aW5nIHZlYzIgdl9wb3NfYjtcblxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcblxudm9pZCBtYWluKCkge1xuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuXG4gICAgdmVjMiBpbWFnZWNvb3JkID0gbW9kKHZfcG9zX2EsIDEuMCk7XG4gICAgdmVjMiBwb3MgPSBtaXgodV9wYXR0ZXJuX3RsX2EgLyB1X3RleHNpemUsIHVfcGF0dGVybl9icl9hIC8gdV90ZXhzaXplLCBpbWFnZWNvb3JkKTtcbiAgICB2ZWM0IGNvbG9yMSA9IHRleHR1cmUyRCh1X2ltYWdlLCBwb3MpO1xuXG4gICAgdmVjMiBpbWFnZWNvb3JkX2IgPSBtb2Qodl9wb3NfYiwgMS4wKTtcbiAgICB2ZWMyIHBvczIgPSBtaXgodV9wYXR0ZXJuX3RsX2IgLyB1X3RleHNpemUsIHVfcGF0dGVybl9icl9iIC8gdV90ZXhzaXplLCBpbWFnZWNvb3JkX2IpO1xuICAgIHZlYzQgY29sb3IyID0gdGV4dHVyZTJEKHVfaW1hZ2UsIHBvczIpO1xuXG4gICAgZ2xfRnJhZ0NvbG9yID0gbWl4KGNvbG9yMSwgY29sb3IyLCB1X21peCkgKiBvcGFjaXR5O1xuXG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjApO1xuI2VuZGlmXG59XG4iLHZlcnRleFNvdXJjZToidW5pZm9ybSBtYXQ0IHVfbWF0cml4O1xudW5pZm9ybSB2ZWMyIHVfcGF0dGVybl9zaXplX2E7XG51bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX3NpemVfYjtcbnVuaWZvcm0gdmVjMiB1X3BpeGVsX2Nvb3JkX3VwcGVyO1xudW5pZm9ybSB2ZWMyIHVfcGl4ZWxfY29vcmRfbG93ZXI7XG51bmlmb3JtIGZsb2F0IHVfc2NhbGVfYTtcbnVuaWZvcm0gZmxvYXQgdV9zY2FsZV9iO1xudW5pZm9ybSBmbG9hdCB1X3RpbGVfdW5pdHNfdG9fcGl4ZWxzO1xuXG5hdHRyaWJ1dGUgdmVjMiBhX3BvcztcblxudmFyeWluZyB2ZWMyIHZfcG9zX2E7XG52YXJ5aW5nIHZlYzIgdl9wb3NfYjtcblxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcblxudm9pZCBtYWluKCkge1xuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuXG4gICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIHZlYzQoYV9wb3MsIDAsIDEpO1xuXG4gICAgdl9wb3NfYSA9IGdldF9wYXR0ZXJuX3Bvcyh1X3BpeGVsX2Nvb3JkX3VwcGVyLCB1X3BpeGVsX2Nvb3JkX2xvd2VyLCB1X3NjYWxlX2EgKiB1X3BhdHRlcm5fc2l6ZV9hLCB1X3RpbGVfdW5pdHNfdG9fcGl4ZWxzLCBhX3Bvcyk7XG4gICAgdl9wb3NfYiA9IGdldF9wYXR0ZXJuX3Bvcyh1X3BpeGVsX2Nvb3JkX3VwcGVyLCB1X3BpeGVsX2Nvb3JkX2xvd2VyLCB1X3NjYWxlX2IgKiB1X3BhdHRlcm5fc2l6ZV9iLCB1X3RpbGVfdW5pdHNfdG9fcGl4ZWxzLCBhX3Bvcyk7XG59XG4ifSxmaWxsRXh0cnVzaW9uOntmcmFnbWVudFNvdXJjZToidmFyeWluZyB2ZWM0IHZfY29sb3I7XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgYmFzZVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGhlaWdodFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IGNvbG9yXG5cbnZvaWQgbWFpbigpIHtcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGJhc2VcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGhlaWdodFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgY29sb3JcblxuICAgIGdsX0ZyYWdDb2xvciA9IHZfY29sb3I7XG5cbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCk7XG4jZW5kaWZcbn1cbiIsdmVydGV4U291cmNlOiJ1bmlmb3JtIG1hdDQgdV9tYXRyaXg7XG51bmlmb3JtIHZlYzMgdV9saWdodGNvbG9yO1xudW5pZm9ybSBsb3dwIHZlYzMgdV9saWdodHBvcztcbnVuaWZvcm0gbG93cCBmbG9hdCB1X2xpZ2h0aW50ZW5zaXR5O1xuXG5hdHRyaWJ1dGUgdmVjMiBhX3BvcztcbmF0dHJpYnV0ZSB2ZWM0IGFfbm9ybWFsX2VkO1xuXG52YXJ5aW5nIHZlYzQgdl9jb2xvcjtcblxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGJhc2VcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBoZWlnaHRcblxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IGNvbG9yXG5cbnZvaWQgbWFpbigpIHtcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGJhc2VcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGhlaWdodFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgY29sb3JcblxuICAgIHZlYzMgbm9ybWFsID0gYV9ub3JtYWxfZWQueHl6O1xuXG4gICAgYmFzZSA9IG1heCgwLjAsIGJhc2UpO1xuICAgIGhlaWdodCA9IG1heCgwLjAsIGhlaWdodCk7XG5cbiAgICBmbG9hdCB0ID0gbW9kKG5vcm1hbC54LCAyLjApO1xuXG4gICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIHZlYzQoYV9wb3MsIHQgPiAwLjAgPyBoZWlnaHQgOiBiYXNlLCAxKTtcblxuICAgIC8vIFJlbGF0aXZlIGx1bWluYW5jZSAoaG93IGRhcmsvYnJpZ2h0IGlzIHRoZSBzdXJmYWNlIGNvbG9yPylcbiAgICBmbG9hdCBjb2xvcnZhbHVlID0gY29sb3IuciAqIDAuMjEyNiArIGNvbG9yLmcgKiAwLjcxNTIgKyBjb2xvci5iICogMC4wNzIyO1xuXG4gICAgdl9jb2xvciA9IHZlYzQoMC4wLCAwLjAsIDAuMCwgMS4wKTtcblxuICAgIC8vIEFkZCBzbGlnaHQgYW1iaWVudCBsaWdodGluZyBzbyBubyBleHRydXNpb25zIGFyZSB0b3RhbGx5IGJsYWNrXG4gICAgdmVjNCBhbWJpZW50bGlnaHQgPSB2ZWM0KDAuMDMsIDAuMDMsIDAuMDMsIDEuMCk7XG4gICAgY29sb3IgKz0gYW1iaWVudGxpZ2h0O1xuXG4gICAgLy8gQ2FsY3VsYXRlIGNvcyh0aGV0YSksIHdoZXJlIHRoZXRhIGlzIHRoZSBhbmdsZSBiZXR3ZWVuIHN1cmZhY2Ugbm9ybWFsIGFuZCBkaWZmdXNlIGxpZ2h0IHJheVxuICAgIGZsb2F0IGRpcmVjdGlvbmFsID0gY2xhbXAoZG90KG5vcm1hbCAvIDE2Mzg0LjAsIHVfbGlnaHRwb3MpLCAwLjAsIDEuMCk7XG5cbiAgICAvLyBBZGp1c3QgZGlyZWN0aW9uYWwgc28gdGhhdFxuICAgIC8vIHRoZSByYW5nZSBvZiB2YWx1ZXMgZm9yIGhpZ2hsaWdodC9zaGFkaW5nIGlzIG5hcnJvd2VyXG4gICAgLy8gd2l0aCBsb3dlciBsaWdodCBpbnRlbnNpdHlcbiAgICAvLyBhbmQgd2l0aCBsaWdodGVyL2JyaWdodGVyIHN1cmZhY2UgY29sb3JzXG4gICAgZGlyZWN0aW9uYWwgPSBtaXgoKDEuMCAtIHVfbGlnaHRpbnRlbnNpdHkpLCBtYXgoKDEuMCAtIGNvbG9ydmFsdWUgKyB1X2xpZ2h0aW50ZW5zaXR5KSwgMS4wKSwgZGlyZWN0aW9uYWwpO1xuXG4gICAgLy8gQWRkIGdyYWRpZW50IGFsb25nIHogYXhpcyBvZiBzaWRlIHN1cmZhY2VzXG4gICAgaWYgKG5vcm1hbC55ICE9IDAuMCkge1xuICAgICAgICBkaXJlY3Rpb25hbCAqPSBjbGFtcCgodCArIGJhc2UpICogcG93KGhlaWdodCAvIDE1MC4wLCAwLjUpLCBtaXgoMC43LCAwLjk4LCAxLjAgLSB1X2xpZ2h0aW50ZW5zaXR5KSwgMS4wKTtcbiAgICB9XG5cbiAgICAvLyBBc3NpZ24gZmluYWwgY29sb3IgYmFzZWQgb24gc3VyZmFjZSArIGFtYmllbnQgbGlnaHQgY29sb3IsIGRpZmZ1c2UgbGlnaHQgZGlyZWN0aW9uYWwsIGFuZCBsaWdodCBjb2xvclxuICAgIC8vIHdpdGggbG93ZXIgYm91bmRzIGFkanVzdGVkIHRvIGh1ZSBvZiBsaWdodFxuICAgIC8vIHNvIHRoYXQgc2hhZGluZyBpcyB0aW50ZWQgd2l0aCB0aGUgY29tcGxlbWVudGFyeSAob3Bwb3NpdGUpIGNvbG9yIHRvIHRoZSBsaWdodCBjb2xvclxuICAgIHZfY29sb3IuciArPSBjbGFtcChjb2xvci5yICogZGlyZWN0aW9uYWwgKiB1X2xpZ2h0Y29sb3IuciwgbWl4KDAuMCwgMC4zLCAxLjAgLSB1X2xpZ2h0Y29sb3IuciksIDEuMCk7XG4gICAgdl9jb2xvci5nICs9IGNsYW1wKGNvbG9yLmcgKiBkaXJlY3Rpb25hbCAqIHVfbGlnaHRjb2xvci5nLCBtaXgoMC4wLCAwLjMsIDEuMCAtIHVfbGlnaHRjb2xvci5nKSwgMS4wKTtcbiAgICB2X2NvbG9yLmIgKz0gY2xhbXAoY29sb3IuYiAqIGRpcmVjdGlvbmFsICogdV9saWdodGNvbG9yLmIsIG1peCgwLjAsIDAuMywgMS4wIC0gdV9saWdodGNvbG9yLmIpLCAxLjApO1xufVxuIn0sZmlsbEV4dHJ1c2lvblBhdHRlcm46e2ZyYWdtZW50U291cmNlOiJ1bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX3RsX2E7XG51bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX2JyX2E7XG51bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX3RsX2I7XG51bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX2JyX2I7XG51bmlmb3JtIHZlYzIgdV90ZXhzaXplO1xudW5pZm9ybSBmbG9hdCB1X21peDtcblxudW5pZm9ybSBzYW1wbGVyMkQgdV9pbWFnZTtcblxudmFyeWluZyB2ZWMyIHZfcG9zX2E7XG52YXJ5aW5nIHZlYzIgdl9wb3NfYjtcbnZhcnlpbmcgdmVjNCB2X2xpZ2h0aW5nO1xuXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgYmFzZVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGhlaWdodFxuXG52b2lkIG1haW4oKSB7XG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBiYXNlXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBoZWlnaHRcblxuICAgIHZlYzIgaW1hZ2Vjb29yZCA9IG1vZCh2X3Bvc19hLCAxLjApO1xuICAgIHZlYzIgcG9zID0gbWl4KHVfcGF0dGVybl90bF9hIC8gdV90ZXhzaXplLCB1X3BhdHRlcm5fYnJfYSAvIHVfdGV4c2l6ZSwgaW1hZ2Vjb29yZCk7XG4gICAgdmVjNCBjb2xvcjEgPSB0ZXh0dXJlMkQodV9pbWFnZSwgcG9zKTtcblxuICAgIHZlYzIgaW1hZ2Vjb29yZF9iID0gbW9kKHZfcG9zX2IsIDEuMCk7XG4gICAgdmVjMiBwb3MyID0gbWl4KHVfcGF0dGVybl90bF9iIC8gdV90ZXhzaXplLCB1X3BhdHRlcm5fYnJfYiAvIHVfdGV4c2l6ZSwgaW1hZ2Vjb29yZF9iKTtcbiAgICB2ZWM0IGNvbG9yMiA9IHRleHR1cmUyRCh1X2ltYWdlLCBwb3MyKTtcblxuICAgIHZlYzQgbWl4ZWRDb2xvciA9IG1peChjb2xvcjEsIGNvbG9yMiwgdV9taXgpO1xuXG4gICAgZ2xfRnJhZ0NvbG9yID0gbWl4ZWRDb2xvciAqIHZfbGlnaHRpbmc7XG5cbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCk7XG4jZW5kaWZcbn1cbiIsdmVydGV4U291cmNlOiJ1bmlmb3JtIG1hdDQgdV9tYXRyaXg7XG51bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX3NpemVfYTtcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fc2l6ZV9iO1xudW5pZm9ybSB2ZWMyIHVfcGl4ZWxfY29vcmRfdXBwZXI7XG51bmlmb3JtIHZlYzIgdV9waXhlbF9jb29yZF9sb3dlcjtcbnVuaWZvcm0gZmxvYXQgdV9zY2FsZV9hO1xudW5pZm9ybSBmbG9hdCB1X3NjYWxlX2I7XG51bmlmb3JtIGZsb2F0IHVfdGlsZV91bml0c190b19waXhlbHM7XG51bmlmb3JtIGZsb2F0IHVfaGVpZ2h0X2ZhY3RvcjtcblxudW5pZm9ybSB2ZWMzIHVfbGlnaHRjb2xvcjtcbnVuaWZvcm0gbG93cCB2ZWMzIHVfbGlnaHRwb3M7XG51bmlmb3JtIGxvd3AgZmxvYXQgdV9saWdodGludGVuc2l0eTtcblxuYXR0cmlidXRlIHZlYzIgYV9wb3M7XG5hdHRyaWJ1dGUgdmVjNCBhX25vcm1hbF9lZDtcblxudmFyeWluZyB2ZWMyIHZfcG9zX2E7XG52YXJ5aW5nIHZlYzIgdl9wb3NfYjtcbnZhcnlpbmcgdmVjNCB2X2xpZ2h0aW5nO1xudmFyeWluZyBmbG9hdCB2X2RpcmVjdGlvbmFsO1xuXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgYmFzZVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGhlaWdodFxuXG52b2lkIG1haW4oKSB7XG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBiYXNlXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBoZWlnaHRcblxuICAgIHZlYzMgbm9ybWFsID0gYV9ub3JtYWxfZWQueHl6O1xuICAgIGZsb2F0IGVkZ2VkaXN0YW5jZSA9IGFfbm9ybWFsX2VkLnc7XG5cbiAgICBiYXNlID0gbWF4KDAuMCwgYmFzZSk7XG4gICAgaGVpZ2h0ID0gbWF4KDAuMCwgaGVpZ2h0KTtcblxuICAgIGZsb2F0IHQgPSBtb2Qobm9ybWFsLngsIDIuMCk7XG4gICAgZmxvYXQgeiA9IHQgPiAwLjAgPyBoZWlnaHQgOiBiYXNlO1xuXG4gICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIHZlYzQoYV9wb3MsIHosIDEpO1xuXG4gICAgdmVjMiBwb3MgPSBub3JtYWwueCA9PSAxLjAgJiYgbm9ybWFsLnkgPT0gMC4wICYmIG5vcm1hbC56ID09IDE2Mzg0LjBcbiAgICAgICAgPyBhX3BvcyAvLyBleHRydXNpb24gdG9wXG4gICAgICAgIDogdmVjMihlZGdlZGlzdGFuY2UsIHogKiB1X2hlaWdodF9mYWN0b3IpOyAvLyBleHRydXNpb24gc2lkZVxuXG4gICAgdl9wb3NfYSA9IGdldF9wYXR0ZXJuX3Bvcyh1X3BpeGVsX2Nvb3JkX3VwcGVyLCB1X3BpeGVsX2Nvb3JkX2xvd2VyLCB1X3NjYWxlX2EgKiB1X3BhdHRlcm5fc2l6ZV9hLCB1X3RpbGVfdW5pdHNfdG9fcGl4ZWxzLCBwb3MpO1xuICAgIHZfcG9zX2IgPSBnZXRfcGF0dGVybl9wb3ModV9waXhlbF9jb29yZF91cHBlciwgdV9waXhlbF9jb29yZF9sb3dlciwgdV9zY2FsZV9iICogdV9wYXR0ZXJuX3NpemVfYiwgdV90aWxlX3VuaXRzX3RvX3BpeGVscywgcG9zKTtcblxuICAgIHZfbGlnaHRpbmcgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDEuMCk7XG4gICAgZmxvYXQgZGlyZWN0aW9uYWwgPSBjbGFtcChkb3Qobm9ybWFsIC8gMTYzODMuMCwgdV9saWdodHBvcyksIDAuMCwgMS4wKTtcbiAgICBkaXJlY3Rpb25hbCA9IG1peCgoMS4wIC0gdV9saWdodGludGVuc2l0eSksIG1heCgoMC41ICsgdV9saWdodGludGVuc2l0eSksIDEuMCksIGRpcmVjdGlvbmFsKTtcblxuICAgIGlmIChub3JtYWwueSAhPSAwLjApIHtcbiAgICAgICAgZGlyZWN0aW9uYWwgKj0gY2xhbXAoKHQgKyBiYXNlKSAqIHBvdyhoZWlnaHQgLyAxNTAuMCwgMC41KSwgbWl4KDAuNywgMC45OCwgMS4wIC0gdV9saWdodGludGVuc2l0eSksIDEuMCk7XG4gICAgfVxuXG4gICAgdl9saWdodGluZy5yZ2IgKz0gY2xhbXAoZGlyZWN0aW9uYWwgKiB1X2xpZ2h0Y29sb3IsIG1peCh2ZWMzKDAuMCksIHZlYzMoMC4zKSwgMS4wIC0gdV9saWdodGNvbG9yKSwgdmVjMygxLjApKTtcbn1cbiJ9LGV4dHJ1c2lvblRleHR1cmU6e2ZyYWdtZW50U291cmNlOiJ1bmlmb3JtIHNhbXBsZXIyRCB1X2ltYWdlO1xudW5pZm9ybSBmbG9hdCB1X29wYWNpdHk7XG52YXJ5aW5nIHZlYzIgdl9wb3M7XG5cbnZvaWQgbWFpbigpIHtcbiAgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodV9pbWFnZSwgdl9wb3MpICogdV9vcGFjaXR5O1xuXG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjApO1xuI2VuZGlmXG59XG4iLHZlcnRleFNvdXJjZToidW5pZm9ybSBtYXQ0IHVfbWF0cml4O1xudW5pZm9ybSB2ZWMyIHVfd29ybGQ7XG5hdHRyaWJ1dGUgdmVjMiBhX3BvcztcbnZhcnlpbmcgdmVjMiB2X3Bvcztcblxudm9pZCBtYWluKCkge1xuICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiB2ZWM0KGFfcG9zICogdV93b3JsZCwgMCwgMSk7XG5cbiAgICB2X3Bvcy54ID0gYV9wb3MueDtcbiAgICB2X3Bvcy55ID0gMS4wIC0gYV9wb3MueTtcbn1cbiJ9LGhpbGxzaGFkZVByZXBhcmU6e2ZyYWdtZW50U291cmNlOiIjaWZkZWYgR0xfRVNcbnByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNlbmRpZlxuXG51bmlmb3JtIHNhbXBsZXIyRCB1X2ltYWdlO1xudmFyeWluZyB2ZWMyIHZfcG9zO1xudW5pZm9ybSB2ZWMyIHVfZGltZW5zaW9uO1xudW5pZm9ybSBmbG9hdCB1X3pvb207XG51bmlmb3JtIGZsb2F0IHVfbWF4em9vbTtcblxuZmxvYXQgZ2V0RWxldmF0aW9uKHZlYzIgY29vcmQsIGZsb2F0IGJpYXMpIHtcbiAgICAvLyBDb252ZXJ0IGVuY29kZWQgZWxldmF0aW9uIHZhbHVlIHRvIG1ldGVyc1xuICAgIHZlYzQgZGF0YSA9IHRleHR1cmUyRCh1X2ltYWdlLCBjb29yZCkgKiAyNTUuMDtcbiAgICByZXR1cm4gKGRhdGEuciArIGRhdGEuZyAqIDI1Ni4wICsgZGF0YS5iICogMjU2LjAgKiAyNTYuMCkgLyA0LjA7XG59XG5cbnZvaWQgbWFpbigpIHtcbiAgICB2ZWMyIGVwc2lsb24gPSAxLjAgLyB1X2RpbWVuc2lvbjtcblxuICAgIC8vIHF1ZXJpZWQgcGl4ZWxzOlxuICAgIC8vICstLS0tLS0tLS0tLStcbiAgICAvLyB8ICAgfCAgIHwgICB8XG4gICAgLy8gfCBhIHwgYiB8IGMgfFxuICAgIC8vIHwgICB8ICAgfCAgIHxcbiAgICAvLyArLS0tLS0tLS0tLS0rXG4gICAgLy8gfCAgIHwgICB8ICAgfFxuICAgIC8vIHwgZCB8IGUgfCBmIHxcbiAgICAvLyB8ICAgfCAgIHwgICB8XG4gICAgLy8gKy0tLS0tLS0tLS0tK1xuICAgIC8vIHwgICB8ICAgfCAgIHxcbiAgICAvLyB8IGcgfCBoIHwgaSB8XG4gICAgLy8gfCAgIHwgICB8ICAgfFxuICAgIC8vICstLS0tLS0tLS0tLStcblxuICAgIGZsb2F0IGEgPSBnZXRFbGV2YXRpb24odl9wb3MgKyB2ZWMyKC1lcHNpbG9uLngsIC1lcHNpbG9uLnkpLCAwLjApO1xuICAgIGZsb2F0IGIgPSBnZXRFbGV2YXRpb24odl9wb3MgKyB2ZWMyKDAsIC1lcHNpbG9uLnkpLCAwLjApO1xuICAgIGZsb2F0IGMgPSBnZXRFbGV2YXRpb24odl9wb3MgKyB2ZWMyKGVwc2lsb24ueCwgLWVwc2lsb24ueSksIDAuMCk7XG4gICAgZmxvYXQgZCA9IGdldEVsZXZhdGlvbih2X3BvcyArIHZlYzIoLWVwc2lsb24ueCwgMCksIDAuMCk7XG4gICAgZmxvYXQgZSA9IGdldEVsZXZhdGlvbih2X3BvcywgMC4wKTtcbiAgICBmbG9hdCBmID0gZ2V0RWxldmF0aW9uKHZfcG9zICsgdmVjMihlcHNpbG9uLngsIDApLCAwLjApO1xuICAgIGZsb2F0IGcgPSBnZXRFbGV2YXRpb24odl9wb3MgKyB2ZWMyKC1lcHNpbG9uLngsIGVwc2lsb24ueSksIDAuMCk7XG4gICAgZmxvYXQgaCA9IGdldEVsZXZhdGlvbih2X3BvcyArIHZlYzIoMCwgZXBzaWxvbi55KSwgMC4wKTtcbiAgICBmbG9hdCBpID0gZ2V0RWxldmF0aW9uKHZfcG9zICsgdmVjMihlcHNpbG9uLngsIGVwc2lsb24ueSksIDAuMCk7XG5cbiAgICAvLyBoZXJlIHdlIGRpdmlkZSB0aGUgeCBhbmQgeSBzbG9wZXMgYnkgOCAqIHBpeGVsIHNpemVcbiAgICAvLyB3aGVyZSBwaXhlbCBzaXplIChha2EgbWV0ZXJzL3BpeGVsKSBpczpcbiAgICAvLyBjaXJjdW1mZXJlbmNlIG9mIHRoZSB3b3JsZCAvIChwaXhlbHMgcGVyIHRpbGUgKiBudW1iZXIgb2YgdGlsZXMpXG4gICAgLy8gd2hpY2ggaXMgZXF1aXZhbGVudCB0bzogOCAqIDQwMDc1MDE2LjY4NTU3ODUgLyAoNTEyICogcG93KDIsIHVfem9vbSkpXG4gICAgLy8gd2hpY2ggY2FuIGJlIHJlZHVjZWQgdG86IHBvdygyLCAxOS4yNTYxOTk3ODUyNyAtIHVfem9vbSlcbiAgICAvLyB3ZSB3YW50IHRvIHZlcnRpY2FsbHkgZXhhZ2dlcmF0ZSB0aGUgaGlsbHNoYWRpbmcgdGhvdWdoLCBiZWNhdXNlIG90aGVyd2lzZVxuICAgIC8vIGl0IGlzIGJhcmVseSBub3RpY2VhYmxlIGF0IGxvdyB6b29tcy4gdG8gZG8gdGhpcywgd2UgbXVsdGlwbHkgdGhpcyBieSBzb21lXG4gICAgLy8gc2NhbGUgZmFjdG9yIHBvdygyLCAodV96b29tIC0gdV9tYXh6b29tKSAqIGEpIHdoZXJlIGEgaXMgYW4gYXJiaXRyYXJ5IHZhbHVlXG4gICAgLy8gSGVyZSB3ZSB1c2UgYT0wLjMgd2hpY2ggd29ya3Mgb3V0IHRvIHRoZSBleHByZXNzaW9uIGJlbG93LiBzZWUgXG4gICAgLy8gbmlja2lkbHVnYXNoJ3MgYXdlc29tZSBicmVha2Rvd24gZm9yIG1vcmUgaW5mb1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvbWFwYm94LWdsLWpzL3B1bGwvNTI4NiNkaXNjdXNzaW9uX3IxNDg0MTk1NTZcbiAgICBmbG9hdCBleGFnZ2VyYXRpb24gPSB1X3pvb20gPCAyLjAgPyAwLjQgOiB1X3pvb20gPCA0LjUgPyAwLjM1IDogMC4zO1xuXG4gICAgdmVjMiBkZXJpdiA9IHZlYzIoXG4gICAgICAgIChjICsgZiArIGYgKyBpKSAtIChhICsgZCArIGQgKyBnKSxcbiAgICAgICAgKGcgKyBoICsgaCArIGkpIC0gKGEgKyBiICsgYiArIGMpXG4gICAgKSAvICBwb3coMi4wLCAodV96b29tIC0gdV9tYXh6b29tKSAqIGV4YWdnZXJhdGlvbiArIDE5LjI1NjIgLSB1X3pvb20pO1xuXG4gICAgZ2xfRnJhZ0NvbG9yID0gY2xhbXAodmVjNChcbiAgICAgICAgZGVyaXYueCAvIDIuMCArIDAuNSxcbiAgICAgICAgZGVyaXYueSAvIDIuMCArIDAuNSxcbiAgICAgICAgMS4wLFxuICAgICAgICAxLjApLCAwLjAsIDEuMCk7XG5cbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCk7XG4jZW5kaWZcbn1cbiIsdmVydGV4U291cmNlOiJ1bmlmb3JtIG1hdDQgdV9tYXRyaXg7XG5cbmF0dHJpYnV0ZSB2ZWMyIGFfcG9zO1xuYXR0cmlidXRlIHZlYzIgYV90ZXh0dXJlX3BvcztcblxudmFyeWluZyB2ZWMyIHZfcG9zO1xuXG52b2lkIG1haW4oKSB7XG4gICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIHZlYzQoYV9wb3MsIDAsIDEpO1xuICAgIHZfcG9zID0gKGFfdGV4dHVyZV9wb3MgLyA4MTkyLjApIC8gMi4wICsgMC4yNTtcbn1cbiJ9LGhpbGxzaGFkZTp7ZnJhZ21lbnRTb3VyY2U6InVuaWZvcm0gc2FtcGxlcjJEIHVfaW1hZ2U7XG52YXJ5aW5nIHZlYzIgdl9wb3M7XG5cbnVuaWZvcm0gdmVjMiB1X2xhdHJhbmdlO1xudW5pZm9ybSB2ZWMyIHVfbGlnaHQ7XG51bmlmb3JtIHZlYzQgdV9zaGFkb3c7XG51bmlmb3JtIHZlYzQgdV9oaWdobGlnaHQ7XG51bmlmb3JtIHZlYzQgdV9hY2NlbnQ7XG5cbiNkZWZpbmUgUEkgMy4xNDE1OTI2NTM1ODk3OTNcblxudm9pZCBtYWluKCkge1xuICAgIHZlYzQgcGl4ZWwgPSB0ZXh0dXJlMkQodV9pbWFnZSwgdl9wb3MpO1xuXG4gICAgdmVjMiBkZXJpdiA9ICgocGl4ZWwucmcgKiAyLjApIC0gMS4wKTtcblxuICAgIC8vIFdlIGRpdmlkZSB0aGUgc2xvcGUgYnkgYSBzY2FsZSBmYWN0b3IgYmFzZWQgb24gdGhlIGNvc2luIG9mIHRoZSBwaXhlbCdzIGFwcHJveGltYXRlIGxhdGl0dWRlXG4gICAgLy8gdG8gYWNjb3VudCBmb3IgbWVyY2F0b3IgcHJvamVjdGlvbiBkaXN0b3J0aW9uLiBzZWUgIzQ4MDcgZm9yIGRldGFpbHNcbiAgICBmbG9hdCBzY2FsZUZhY3RvciA9IGNvcyhyYWRpYW5zKCh1X2xhdHJhbmdlWzBdIC0gdV9sYXRyYW5nZVsxXSkgKiAoMS4wIC0gdl9wb3MueSkgKyB1X2xhdHJhbmdlWzFdKSk7XG4gICAgLy8gV2UgYWxzbyBtdWx0aXBseSB0aGUgc2xvcGUgYnkgYW4gYXJiaXRyYXJ5IHotZmFjdG9yIG9mIDEuMjVcbiAgICBmbG9hdCBzbG9wZSA9IGF0YW4oMS4yNSAqIGxlbmd0aChkZXJpdikgLyBzY2FsZUZhY3Rvcik7XG4gICAgZmxvYXQgYXNwZWN0ID0gZGVyaXYueCAhPSAwLjAgPyBhdGFuKGRlcml2LnksIC1kZXJpdi54KSA6IFBJIC8gMi4wICogKGRlcml2LnkgPiAwLjAgPyAxLjAgOiAtMS4wKTtcblxuICAgIGZsb2F0IGludGVuc2l0eSA9IHVfbGlnaHQueDtcbiAgICAvLyBXZSBhZGQgUEkgdG8gbWFrZSB0aGlzIHByb3BlcnR5IG1hdGNoIHRoZSBnbG9iYWwgbGlnaHQgb2JqZWN0LCB3aGljaCBhZGRzIFBJLzIgdG8gdGhlIGxpZ2h0J3MgYXppbXV0aGFsXG4gICAgLy8gcG9zaXRpb24gcHJvcGVydHkgdG8gYWNjb3VudCBmb3IgMGRlZyBjb3JyZXNwb25kaW5nIHRvIG5vcnRoL3RoZSB0b3Agb2YgdGhlIHZpZXdwb3J0IGluIHRoZSBzdHlsZSBzcGVjXG4gICAgLy8gYW5kIHRoZSBvcmlnaW5hbCBzaGFkZXIgd2FzIHdyaXR0ZW4gdG8gYWNjZXB0ICgtaWxsdW1pbmF0aW9uRGlyZWN0aW9uIC0gOTApIGFzIHRoZSBhemltdXRoYWwuXG4gICAgZmxvYXQgYXppbXV0aCA9IHVfbGlnaHQueSArIFBJO1xuXG4gICAgLy8gV2Ugc2NhbGUgdGhlIHNsb3BlIGV4cG9uZW50aWFsbHkgYmFzZWQgb24gaW50ZW5zaXR5LCB1c2luZyBhIGNhbGN1bGF0aW9uIHNpbWlsYXIgdG9cbiAgICAvLyB0aGUgZXhwb25lbnRpYWwgaW50ZXJwb2xhdGlvbiBmdW5jdGlvbiBpbiB0aGUgc3R5bGUgc3BlYzpcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcGJveC1nbC1qcy9ibG9iL21hc3Rlci9zcmMvc3R5bGUtc3BlYy9leHByZXNzaW9uL2RlZmluaXRpb25zL2ludGVycG9sYXRlLmpzI0wyMTctTDIyOFxuICAgIC8vIHNvIHRoYXQgaGlnaGVyIGludGVuc2l0eSB2YWx1ZXMgY3JlYXRlIG1vcmUgb3BhcXVlIGhpbGxzaGFkaW5nLlxuICAgIGZsb2F0IGJhc2UgPSAxLjg3NSAtIGludGVuc2l0eSAqIDEuNzU7XG4gICAgZmxvYXQgbWF4VmFsdWUgPSAwLjUgKiBQSTtcbiAgICBmbG9hdCBzY2FsZWRTbG9wZSA9IGludGVuc2l0eSAhPSAwLjUgPyAoKHBvdyhiYXNlLCBzbG9wZSkgLSAxLjApIC8gKHBvdyhiYXNlLCBtYXhWYWx1ZSkgLSAxLjApKSAqIG1heFZhbHVlIDogc2xvcGU7XG5cbiAgICAvLyBUaGUgYWNjZW50IGNvbG9yIGlzIGNhbGN1bGF0ZWQgd2l0aCB0aGUgY29zaW5lIG9mIHRoZSBzbG9wZSB3aGlsZSB0aGUgc2hhZGUgY29sb3IgaXMgY2FsY3VsYXRlZCB3aXRoIHRoZSBzaW5lXG4gICAgLy8gc28gdGhhdCB0aGUgYWNjZW50IGNvbG9yJ3MgcmF0ZSBvZiBjaGFuZ2UgZWFzZXMgaW4gd2hpbGUgdGhlIHNoYWRlIGNvbG9yJ3MgZWFzZXMgb3V0LlxuICAgIGZsb2F0IGFjY2VudCA9IGNvcyhzY2FsZWRTbG9wZSk7XG4gICAgLy8gV2UgbXVsdGlwbHkgYm90aCB0aGUgYWNjZW50IGFuZCBzaGFkZSBjb2xvciBieSBhIGNsYW1wZWQgaW50ZW5zaXR5IHZhbHVlXG4gICAgLy8gc28gdGhhdCBpbnRlbnNpdGllcyA+PSAwLjUgZG8gbm90IGFkZGl0aW9uYWxseSBhZmZlY3QgdGhlIGNvbG9yIHZhbHVlc1xuICAgIC8vIHdoaWxlIGludGVuc2l0eSB2YWx1ZXMgPCAwLjUgbWFrZSB0aGUgb3ZlcmFsbCBjb2xvciBtb3JlIHRyYW5zcGFyZW50LlxuICAgIHZlYzQgYWNjZW50X2NvbG9yID0gKDEuMCAtIGFjY2VudCkgKiB1X2FjY2VudCAqIGNsYW1wKGludGVuc2l0eSAqIDIuMCwgMC4wLCAxLjApO1xuICAgIGZsb2F0IHNoYWRlID0gYWJzKG1vZCgoYXNwZWN0ICsgYXppbXV0aCkgLyBQSSArIDAuNSwgMi4wKSAtIDEuMCk7XG4gICAgdmVjNCBzaGFkZV9jb2xvciA9IG1peCh1X3NoYWRvdywgdV9oaWdobGlnaHQsIHNoYWRlKSAqIHNpbihzY2FsZWRTbG9wZSkgKiBjbGFtcChpbnRlbnNpdHkgKiAyLjAsIDAuMCwgMS4wKTtcbiAgICBnbF9GcmFnQ29sb3IgPSBhY2NlbnRfY29sb3IgKiAoMS4wIC0gc2hhZGVfY29sb3IuYSkgKyBzaGFkZV9jb2xvcjtcblxuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4wKTtcbiNlbmRpZlxufVxuIix2ZXJ0ZXhTb3VyY2U6InVuaWZvcm0gbWF0NCB1X21hdHJpeDtcblxuYXR0cmlidXRlIHZlYzIgYV9wb3M7XG5hdHRyaWJ1dGUgdmVjMiBhX3RleHR1cmVfcG9zO1xuXG52YXJ5aW5nIHZlYzIgdl9wb3M7XG5cbnZvaWQgbWFpbigpIHtcbiAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogdmVjNChhX3BvcywgMCwgMSk7XG4gICAgdl9wb3MgPSBhX3RleHR1cmVfcG9zIC8gODE5Mi4wO1xufVxuIn0sbGluZTp7ZnJhZ21lbnRTb3VyY2U6IiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBjb2xvclxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGJsdXJcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG5cbnZhcnlpbmcgdmVjMiB2X3dpZHRoMjtcbnZhcnlpbmcgdmVjMiB2X25vcm1hbDtcbnZhcnlpbmcgZmxvYXQgdl9nYW1tYV9zY2FsZTtcblxudm9pZCBtYWluKCkge1xuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgY29sb3JcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGJsdXJcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcblxuICAgIC8vIENhbGN1bGF0ZSB0aGUgZGlzdGFuY2Ugb2YgdGhlIHBpeGVsIGZyb20gdGhlIGxpbmUgaW4gcGl4ZWxzLlxuICAgIGZsb2F0IGRpc3QgPSBsZW5ndGgodl9ub3JtYWwpICogdl93aWR0aDIucztcblxuICAgIC8vIENhbGN1bGF0ZSB0aGUgYW50aWFsaWFzaW5nIGZhZGUgZmFjdG9yLiBUaGlzIGlzIGVpdGhlciB3aGVuIGZhZGluZyBpblxuICAgIC8vIHRoZSBsaW5lIGluIGNhc2Ugb2YgYW4gb2Zmc2V0IGxpbmUgKHZfd2lkdGgyLnQpIG9yIHdoZW4gZmFkaW5nIG91dFxuICAgIC8vICh2X3dpZHRoMi5zKVxuICAgIGZsb2F0IGJsdXIyID0gKGJsdXIgKyAxLjAgLyBERVZJQ0VfUElYRUxfUkFUSU8pICogdl9nYW1tYV9zY2FsZTtcbiAgICBmbG9hdCBhbHBoYSA9IGNsYW1wKG1pbihkaXN0IC0gKHZfd2lkdGgyLnQgLSBibHVyMiksIHZfd2lkdGgyLnMgLSBkaXN0KSAvIGJsdXIyLCAwLjAsIDEuMCk7XG5cbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvciAqIChhbHBoYSAqIG9wYWNpdHkpO1xuXG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjApO1xuI2VuZGlmXG59XG4iLHZlcnRleFNvdXJjZToiXG5cbi8vIHRoZSBkaXN0YW5jZSBvdmVyIHdoaWNoIHRoZSBsaW5lIGVkZ2UgZmFkZXMgb3V0LlxuLy8gUmV0aW5hIGRldmljZXMgbmVlZCBhIHNtYWxsZXIgZGlzdGFuY2UgdG8gYXZvaWQgYWxpYXNpbmcuXG4jZGVmaW5lIEFOVElBTElBU0lORyAxLjAgLyBERVZJQ0VfUElYRUxfUkFUSU8gLyAyLjBcblxuLy8gZmxvb3IoMTI3IC8gMikgPT0gNjMuMFxuLy8gdGhlIG1heGltdW0gYWxsb3dlZCBtaXRlciBsaW1pdCBpcyAyLjAgYXQgdGhlIG1vbWVudC4gdGhlIGV4dHJ1ZGUgbm9ybWFsIGlzXG4vLyBzdG9yZWQgaW4gYSBieXRlICgtMTI4Li4xMjcpLiB3ZSBzY2FsZSByZWd1bGFyIG5vcm1hbHMgdXAgdG8gbGVuZ3RoIDYzLCBidXRcbi8vIHRoZXJlIGFyZSBhbHNvIFwic3BlY2lhbFwiIG5vcm1hbHMgdGhhdCBoYXZlIGEgYmlnZ2VyIGxlbmd0aCAob2YgdXAgdG8gMTI2IGluXG4vLyB0aGlzIGNhc2UpLlxuLy8gI2RlZmluZSBzY2FsZSA2My4wXG4jZGVmaW5lIHNjYWxlIDAuMDE1ODczMDE2XG5cbmF0dHJpYnV0ZSB2ZWM0IGFfcG9zX25vcm1hbDtcbmF0dHJpYnV0ZSB2ZWM0IGFfZGF0YTtcblxudW5pZm9ybSBtYXQ0IHVfbWF0cml4O1xudW5pZm9ybSBtZWRpdW1wIGZsb2F0IHVfcmF0aW87XG51bmlmb3JtIHZlYzIgdV9nbF91bml0c190b19waXhlbHM7XG5cbnZhcnlpbmcgdmVjMiB2X25vcm1hbDtcbnZhcnlpbmcgdmVjMiB2X3dpZHRoMjtcbnZhcnlpbmcgZmxvYXQgdl9nYW1tYV9zY2FsZTtcbnZhcnlpbmcgaGlnaHAgZmxvYXQgdl9saW5lc29mYXI7XG5cbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBjb2xvclxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGJsdXJcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIG1lZGl1bXAgZmxvYXQgZ2Fwd2lkdGhcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvZmZzZXRcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbWVkaXVtcCBmbG9hdCB3aWR0aFxuXG52b2lkIG1haW4oKSB7XG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBjb2xvclxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgYmx1clxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgZmxvYXQgZ2Fwd2lkdGhcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9mZnNldFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgZmxvYXQgd2lkdGhcblxuICAgIHZlYzIgYV9leHRydWRlID0gYV9kYXRhLnh5IC0gMTI4LjA7XG4gICAgZmxvYXQgYV9kaXJlY3Rpb24gPSBtb2QoYV9kYXRhLnosIDQuMCkgLSAxLjA7XG5cbiAgICB2X2xpbmVzb2ZhciA9IChmbG9vcihhX2RhdGEueiAvIDQuMCkgKyBhX2RhdGEudyAqIDY0LjApICogMi4wO1xuXG4gICAgdmVjMiBwb3MgPSBhX3Bvc19ub3JtYWwueHk7XG5cbiAgICAvLyB4IGlzIDEgaWYgaXQncyBhIHJvdW5kIGNhcCwgMCBvdGhlcndpc2VcbiAgICAvLyB5IGlzIDEgaWYgdGhlIG5vcm1hbCBwb2ludHMgdXAsIGFuZCAtMSBpZiBpdCBwb2ludHMgZG93blxuICAgIG1lZGl1bXAgdmVjMiBub3JtYWwgPSBhX3Bvc19ub3JtYWwuenc7XG4gICAgdl9ub3JtYWwgPSBub3JtYWw7XG5cbiAgICAvLyB0aGVzZSB0cmFuc2Zvcm1hdGlvbnMgdXNlZCB0byBiZSBhcHBsaWVkIGluIHRoZSBKUyBhbmQgbmF0aXZlIGNvZGUgYmFzZXMuXG4gICAgLy8gbW92ZWQgdGhlbSBpbnRvIHRoZSBzaGFkZXIgZm9yIGNsYXJpdHkgYW5kIHNpbXBsaWNpdHkuXG4gICAgZ2Fwd2lkdGggPSBnYXB3aWR0aCAvIDIuMDtcbiAgICBmbG9hdCBoYWxmd2lkdGggPSB3aWR0aCAvIDIuMDtcbiAgICBvZmZzZXQgPSAtMS4wICogb2Zmc2V0O1xuXG4gICAgZmxvYXQgaW5zZXQgPSBnYXB3aWR0aCArIChnYXB3aWR0aCA+IDAuMCA/IEFOVElBTElBU0lORyA6IDAuMCk7XG4gICAgZmxvYXQgb3V0c2V0ID0gZ2Fwd2lkdGggKyBoYWxmd2lkdGggKiAoZ2Fwd2lkdGggPiAwLjAgPyAyLjAgOiAxLjApICsgQU5USUFMSUFTSU5HO1xuXG4gICAgLy8gU2NhbGUgdGhlIGV4dHJ1c2lvbiB2ZWN0b3IgZG93biB0byBhIG5vcm1hbCBhbmQgdGhlbiB1cCBieSB0aGUgbGluZSB3aWR0aFxuICAgIC8vIG9mIHRoaXMgdmVydGV4LlxuICAgIG1lZGl1bXAgdmVjMiBkaXN0ID0gb3V0c2V0ICogYV9leHRydWRlICogc2NhbGU7XG5cbiAgICAvLyBDYWxjdWxhdGUgdGhlIG9mZnNldCB3aGVuIGRyYXdpbmcgYSBsaW5lIHRoYXQgaXMgdG8gdGhlIHNpZGUgb2YgdGhlIGFjdHVhbCBsaW5lLlxuICAgIC8vIFdlIGRvIHRoaXMgYnkgY3JlYXRpbmcgYSB2ZWN0b3IgdGhhdCBwb2ludHMgdG93YXJkcyB0aGUgZXh0cnVkZSwgYnV0IHJvdGF0ZVxuICAgIC8vIGl0IHdoZW4gd2UncmUgZHJhd2luZyByb3VuZCBlbmQgcG9pbnRzIChhX2RpcmVjdGlvbiA9IC0xIG9yIDEpIHNpbmNlIHRoZWlyXG4gICAgLy8gZXh0cnVkZSB2ZWN0b3IgcG9pbnRzIGluIGFub3RoZXIgZGlyZWN0aW9uLlxuICAgIG1lZGl1bXAgZmxvYXQgdSA9IDAuNSAqIGFfZGlyZWN0aW9uO1xuICAgIG1lZGl1bXAgZmxvYXQgdCA9IDEuMCAtIGFicyh1KTtcbiAgICBtZWRpdW1wIHZlYzIgb2Zmc2V0MiA9IG9mZnNldCAqIGFfZXh0cnVkZSAqIHNjYWxlICogbm9ybWFsLnkgKiBtYXQyKHQsIC11LCB1LCB0KTtcblxuICAgIHZlYzQgcHJvamVjdGVkX2V4dHJ1ZGUgPSB1X21hdHJpeCAqIHZlYzQoZGlzdCAvIHVfcmF0aW8sIDAuMCwgMC4wKTtcbiAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogdmVjNChwb3MgKyBvZmZzZXQyIC8gdV9yYXRpbywgMC4wLCAxLjApICsgcHJvamVjdGVkX2V4dHJ1ZGU7XG5cbiAgICAvLyBjYWxjdWxhdGUgaG93IG11Y2ggdGhlIHBlcnNwZWN0aXZlIHZpZXcgc3F1aXNoZXMgb3Igc3RyZXRjaGVzIHRoZSBleHRydWRlXG4gICAgZmxvYXQgZXh0cnVkZV9sZW5ndGhfd2l0aG91dF9wZXJzcGVjdGl2ZSA9IGxlbmd0aChkaXN0KTtcbiAgICBmbG9hdCBleHRydWRlX2xlbmd0aF93aXRoX3BlcnNwZWN0aXZlID0gbGVuZ3RoKHByb2plY3RlZF9leHRydWRlLnh5IC8gZ2xfUG9zaXRpb24udyAqIHVfZ2xfdW5pdHNfdG9fcGl4ZWxzKTtcbiAgICB2X2dhbW1hX3NjYWxlID0gZXh0cnVkZV9sZW5ndGhfd2l0aG91dF9wZXJzcGVjdGl2ZSAvIGV4dHJ1ZGVfbGVuZ3RoX3dpdGhfcGVyc3BlY3RpdmU7XG5cbiAgICB2X3dpZHRoMiA9IHZlYzIob3V0c2V0LCBpbnNldCk7XG59XG4ifSxsaW5lR3JhZGllbnQ6e2ZyYWdtZW50U291cmNlOiJcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBibHVyXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxuXG51bmlmb3JtIHNhbXBsZXIyRCB1X2ltYWdlO1xuXG52YXJ5aW5nIHZlYzIgdl93aWR0aDI7XG52YXJ5aW5nIHZlYzIgdl9ub3JtYWw7XG52YXJ5aW5nIGZsb2F0IHZfZ2FtbWFfc2NhbGU7XG52YXJ5aW5nIGhpZ2hwIGZsb2F0IHZfbGluZXByb2dyZXNzO1xuXG52b2lkIG1haW4oKSB7XG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBibHVyXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG5cbiAgICAvLyBDYWxjdWxhdGUgdGhlIGRpc3RhbmNlIG9mIHRoZSBwaXhlbCBmcm9tIHRoZSBsaW5lIGluIHBpeGVscy5cbiAgICBmbG9hdCBkaXN0ID0gbGVuZ3RoKHZfbm9ybWFsKSAqIHZfd2lkdGgyLnM7XG5cbiAgICAvLyBDYWxjdWxhdGUgdGhlIGFudGlhbGlhc2luZyBmYWRlIGZhY3Rvci4gVGhpcyBpcyBlaXRoZXIgd2hlbiBmYWRpbmcgaW5cbiAgICAvLyB0aGUgbGluZSBpbiBjYXNlIG9mIGFuIG9mZnNldCBsaW5lICh2X3dpZHRoMi50KSBvciB3aGVuIGZhZGluZyBvdXRcbiAgICAvLyAodl93aWR0aDIucylcbiAgICBmbG9hdCBibHVyMiA9IChibHVyICsgMS4wIC8gREVWSUNFX1BJWEVMX1JBVElPKSAqIHZfZ2FtbWFfc2NhbGU7XG4gICAgZmxvYXQgYWxwaGEgPSBjbGFtcChtaW4oZGlzdCAtICh2X3dpZHRoMi50IC0gYmx1cjIpLCB2X3dpZHRoMi5zIC0gZGlzdCkgLyBibHVyMiwgMC4wLCAxLjApO1xuXG4gICAgLy8gRm9yIGdyYWRpZW50IGxpbmVzLCB2X2xpbmVwcm9ncmVzcyBpcyB0aGUgcmF0aW8gYWxvbmcgdGhlIGVudGlyZSBsaW5lLFxuICAgIC8vIHNjYWxlZCB0byBbMCwgMl4xNSksIGFuZCB0aGUgZ3JhZGllbnQgcmFtcCBpcyBzdG9yZWQgaW4gYSB0ZXh0dXJlLlxuICAgIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQodV9pbWFnZSwgdmVjMih2X2xpbmVwcm9ncmVzcywgMC41KSk7XG5cbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvciAqIChhbHBoYSAqIG9wYWNpdHkpO1xuXG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjApO1xuI2VuZGlmXG59XG4iLHZlcnRleFNvdXJjZToiXG4vLyB0aGUgYXR0cmlidXRlIGNvbnZleWluZyBwcm9ncmVzcyBhbG9uZyBhIGxpbmUgaXMgc2NhbGVkIHRvIFswLCAyXjE1KVxuI2RlZmluZSBNQVhfTElORV9ESVNUQU5DRSAzMjc2Ny4wXG5cbi8vIHRoZSBkaXN0YW5jZSBvdmVyIHdoaWNoIHRoZSBsaW5lIGVkZ2UgZmFkZXMgb3V0LlxuLy8gUmV0aW5hIGRldmljZXMgbmVlZCBhIHNtYWxsZXIgZGlzdGFuY2UgdG8gYXZvaWQgYWxpYXNpbmcuXG4jZGVmaW5lIEFOVElBTElBU0lORyAxLjAgLyBERVZJQ0VfUElYRUxfUkFUSU8gLyAyLjBcblxuLy8gZmxvb3IoMTI3IC8gMikgPT0gNjMuMFxuLy8gdGhlIG1heGltdW0gYWxsb3dlZCBtaXRlciBsaW1pdCBpcyAyLjAgYXQgdGhlIG1vbWVudC4gdGhlIGV4dHJ1ZGUgbm9ybWFsIGlzXG4vLyBzdG9yZWQgaW4gYSBieXRlICgtMTI4Li4xMjcpLiB3ZSBzY2FsZSByZWd1bGFyIG5vcm1hbHMgdXAgdG8gbGVuZ3RoIDYzLCBidXRcbi8vIHRoZXJlIGFyZSBhbHNvIFwic3BlY2lhbFwiIG5vcm1hbHMgdGhhdCBoYXZlIGEgYmlnZ2VyIGxlbmd0aCAob2YgdXAgdG8gMTI2IGluXG4vLyB0aGlzIGNhc2UpLlxuLy8gI2RlZmluZSBzY2FsZSA2My4wXG4jZGVmaW5lIHNjYWxlIDAuMDE1ODczMDE2XG5cbmF0dHJpYnV0ZSB2ZWM0IGFfcG9zX25vcm1hbDtcbmF0dHJpYnV0ZSB2ZWM0IGFfZGF0YTtcblxudW5pZm9ybSBtYXQ0IHVfbWF0cml4O1xudW5pZm9ybSBtZWRpdW1wIGZsb2F0IHVfcmF0aW87XG51bmlmb3JtIHZlYzIgdV9nbF91bml0c190b19waXhlbHM7XG5cbnZhcnlpbmcgdmVjMiB2X25vcm1hbDtcbnZhcnlpbmcgdmVjMiB2X3dpZHRoMjtcbnZhcnlpbmcgZmxvYXQgdl9nYW1tYV9zY2FsZTtcbnZhcnlpbmcgaGlnaHAgZmxvYXQgdl9saW5lcHJvZ3Jlc3M7XG5cbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBibHVyXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBtZWRpdW1wIGZsb2F0IGdhcHdpZHRoXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb2Zmc2V0XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIG1lZGl1bXAgZmxvYXQgd2lkdGhcblxudm9pZCBtYWluKCkge1xuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgYmx1clxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgZmxvYXQgZ2Fwd2lkdGhcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9mZnNldFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgZmxvYXQgd2lkdGhcblxuICAgIHZlYzIgYV9leHRydWRlID0gYV9kYXRhLnh5IC0gMTI4LjA7XG4gICAgZmxvYXQgYV9kaXJlY3Rpb24gPSBtb2QoYV9kYXRhLnosIDQuMCkgLSAxLjA7XG5cbiAgICB2X2xpbmVwcm9ncmVzcyA9IChmbG9vcihhX2RhdGEueiAvIDQuMCkgKyBhX2RhdGEudyAqIDY0LjApICogMi4wIC8gTUFYX0xJTkVfRElTVEFOQ0U7XG5cbiAgICB2ZWMyIHBvcyA9IGFfcG9zX25vcm1hbC54eTtcblxuICAgIC8vIHggaXMgMSBpZiBpdCdzIGEgcm91bmQgY2FwLCAwIG90aGVyd2lzZVxuICAgIC8vIHkgaXMgMSBpZiB0aGUgbm9ybWFsIHBvaW50cyB1cCwgYW5kIC0xIGlmIGl0IHBvaW50cyBkb3duXG4gICAgbWVkaXVtcCB2ZWMyIG5vcm1hbCA9IGFfcG9zX25vcm1hbC56dztcbiAgICB2X25vcm1hbCA9IG5vcm1hbDtcblxuICAgIC8vIHRoZXNlIHRyYW5zZm9ybWF0aW9ucyB1c2VkIHRvIGJlIGFwcGxpZWQgaW4gdGhlIEpTIGFuZCBuYXRpdmUgY29kZSBiYXNlcy5cbiAgICAvLyBtb3ZlZCB0aGVtIGludG8gdGhlIHNoYWRlciBmb3IgY2xhcml0eSBhbmQgc2ltcGxpY2l0eS5cbiAgICBnYXB3aWR0aCA9IGdhcHdpZHRoIC8gMi4wO1xuICAgIGZsb2F0IGhhbGZ3aWR0aCA9IHdpZHRoIC8gMi4wO1xuICAgIG9mZnNldCA9IC0xLjAgKiBvZmZzZXQ7XG5cbiAgICBmbG9hdCBpbnNldCA9IGdhcHdpZHRoICsgKGdhcHdpZHRoID4gMC4wID8gQU5USUFMSUFTSU5HIDogMC4wKTtcbiAgICBmbG9hdCBvdXRzZXQgPSBnYXB3aWR0aCArIGhhbGZ3aWR0aCAqIChnYXB3aWR0aCA+IDAuMCA/IDIuMCA6IDEuMCkgKyBBTlRJQUxJQVNJTkc7XG5cbiAgICAvLyBTY2FsZSB0aGUgZXh0cnVzaW9uIHZlY3RvciBkb3duIHRvIGEgbm9ybWFsIGFuZCB0aGVuIHVwIGJ5IHRoZSBsaW5lIHdpZHRoXG4gICAgLy8gb2YgdGhpcyB2ZXJ0ZXguXG4gICAgbWVkaXVtcCB2ZWMyIGRpc3QgPSBvdXRzZXQgKiBhX2V4dHJ1ZGUgKiBzY2FsZTtcblxuICAgIC8vIENhbGN1bGF0ZSB0aGUgb2Zmc2V0IHdoZW4gZHJhd2luZyBhIGxpbmUgdGhhdCBpcyB0byB0aGUgc2lkZSBvZiB0aGUgYWN0dWFsIGxpbmUuXG4gICAgLy8gV2UgZG8gdGhpcyBieSBjcmVhdGluZyBhIHZlY3RvciB0aGF0IHBvaW50cyB0b3dhcmRzIHRoZSBleHRydWRlLCBidXQgcm90YXRlXG4gICAgLy8gaXQgd2hlbiB3ZSdyZSBkcmF3aW5nIHJvdW5kIGVuZCBwb2ludHMgKGFfZGlyZWN0aW9uID0gLTEgb3IgMSkgc2luY2UgdGhlaXJcbiAgICAvLyBleHRydWRlIHZlY3RvciBwb2ludHMgaW4gYW5vdGhlciBkaXJlY3Rpb24uXG4gICAgbWVkaXVtcCBmbG9hdCB1ID0gMC41ICogYV9kaXJlY3Rpb247XG4gICAgbWVkaXVtcCBmbG9hdCB0ID0gMS4wIC0gYWJzKHUpO1xuICAgIG1lZGl1bXAgdmVjMiBvZmZzZXQyID0gb2Zmc2V0ICogYV9leHRydWRlICogc2NhbGUgKiBub3JtYWwueSAqIG1hdDIodCwgLXUsIHUsIHQpO1xuXG4gICAgdmVjNCBwcm9qZWN0ZWRfZXh0cnVkZSA9IHVfbWF0cml4ICogdmVjNChkaXN0IC8gdV9yYXRpbywgMC4wLCAwLjApO1xuICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiB2ZWM0KHBvcyArIG9mZnNldDIgLyB1X3JhdGlvLCAwLjAsIDEuMCkgKyBwcm9qZWN0ZWRfZXh0cnVkZTtcblxuICAgIC8vIGNhbGN1bGF0ZSBob3cgbXVjaCB0aGUgcGVyc3BlY3RpdmUgdmlldyBzcXVpc2hlcyBvciBzdHJldGNoZXMgdGhlIGV4dHJ1ZGVcbiAgICBmbG9hdCBleHRydWRlX2xlbmd0aF93aXRob3V0X3BlcnNwZWN0aXZlID0gbGVuZ3RoKGRpc3QpO1xuICAgIGZsb2F0IGV4dHJ1ZGVfbGVuZ3RoX3dpdGhfcGVyc3BlY3RpdmUgPSBsZW5ndGgocHJvamVjdGVkX2V4dHJ1ZGUueHkgLyBnbF9Qb3NpdGlvbi53ICogdV9nbF91bml0c190b19waXhlbHMpO1xuICAgIHZfZ2FtbWFfc2NhbGUgPSBleHRydWRlX2xlbmd0aF93aXRob3V0X3BlcnNwZWN0aXZlIC8gZXh0cnVkZV9sZW5ndGhfd2l0aF9wZXJzcGVjdGl2ZTtcblxuICAgIHZfd2lkdGgyID0gdmVjMihvdXRzZXQsIGluc2V0KTtcbn1cbiJ9LGxpbmVQYXR0ZXJuOntmcmFnbWVudFNvdXJjZToidW5pZm9ybSB2ZWMyIHVfcGF0dGVybl9zaXplX2E7XG51bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX3NpemVfYjtcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fdGxfYTtcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fYnJfYTtcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fdGxfYjtcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fYnJfYjtcbnVuaWZvcm0gdmVjMiB1X3RleHNpemU7XG51bmlmb3JtIGZsb2F0IHVfZmFkZTtcblxudW5pZm9ybSBzYW1wbGVyMkQgdV9pbWFnZTtcblxudmFyeWluZyB2ZWMyIHZfbm9ybWFsO1xudmFyeWluZyB2ZWMyIHZfd2lkdGgyO1xudmFyeWluZyBmbG9hdCB2X2xpbmVzb2ZhcjtcbnZhcnlpbmcgZmxvYXQgdl9nYW1tYV9zY2FsZTtcblxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGJsdXJcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG5cbnZvaWQgbWFpbigpIHtcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGJsdXJcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcblxuICAgIC8vIENhbGN1bGF0ZSB0aGUgZGlzdGFuY2Ugb2YgdGhlIHBpeGVsIGZyb20gdGhlIGxpbmUgaW4gcGl4ZWxzLlxuICAgIGZsb2F0IGRpc3QgPSBsZW5ndGgodl9ub3JtYWwpICogdl93aWR0aDIucztcblxuICAgIC8vIENhbGN1bGF0ZSB0aGUgYW50aWFsaWFzaW5nIGZhZGUgZmFjdG9yLiBUaGlzIGlzIGVpdGhlciB3aGVuIGZhZGluZyBpblxuICAgIC8vIHRoZSBsaW5lIGluIGNhc2Ugb2YgYW4gb2Zmc2V0IGxpbmUgKHZfd2lkdGgyLnQpIG9yIHdoZW4gZmFkaW5nIG91dFxuICAgIC8vICh2X3dpZHRoMi5zKVxuICAgIGZsb2F0IGJsdXIyID0gKGJsdXIgKyAxLjAgLyBERVZJQ0VfUElYRUxfUkFUSU8pICogdl9nYW1tYV9zY2FsZTtcbiAgICBmbG9hdCBhbHBoYSA9IGNsYW1wKG1pbihkaXN0IC0gKHZfd2lkdGgyLnQgLSBibHVyMiksIHZfd2lkdGgyLnMgLSBkaXN0KSAvIGJsdXIyLCAwLjAsIDEuMCk7XG5cbiAgICBmbG9hdCB4X2EgPSBtb2Qodl9saW5lc29mYXIgLyB1X3BhdHRlcm5fc2l6ZV9hLngsIDEuMCk7XG4gICAgZmxvYXQgeF9iID0gbW9kKHZfbGluZXNvZmFyIC8gdV9wYXR0ZXJuX3NpemVfYi54LCAxLjApO1xuXG4gICAgLy8gdl9ub3JtYWwueSBpcyAwIGF0IHRoZSBtaWRwb2ludCBvZiB0aGUgbGluZSwgLTEgYXQgdGhlIGxvd2VyIGVkZ2UsIDEgYXQgdGhlIHVwcGVyIGVkZ2VcbiAgICAvLyB3ZSBjbGFtcCB0aGUgbGluZSB3aWR0aCBvdXRzZXQgdG8gYmUgYmV0d2VlbiAwIGFuZCBoYWxmIHRoZSBwYXR0ZXJuIGhlaWdodCBwbHVzIHBhZGRpbmcgKDIuMClcbiAgICAvLyB0byBlbnN1cmUgd2UgZG9uJ3Qgc2FtcGxlIG91dHNpZGUgdGhlIGRlc2lnbmF0ZWQgc3ltYm9sIG9uIHRoZSBzcHJpdGUgc2hlZXQuXG4gICAgLy8gMC41IGlzIGFkZGVkIHRvIHNoaWZ0IHRoZSBjb21wb25lbnQgdG8gYmUgYm91bmRlZCBiZXR3ZWVuIDAgYW5kIDEgZm9yIGludGVycG9sYXRpb24gb2ZcbiAgICAvLyB0aGUgdGV4dHVyZSBjb29yZGluYXRlXG4gICAgZmxvYXQgeV9hID0gMC41ICsgKHZfbm9ybWFsLnkgKiBjbGFtcCh2X3dpZHRoMi5zLCAwLjAsICh1X3BhdHRlcm5fc2l6ZV9hLnkgKyAyLjApIC8gMi4wKSAvIHVfcGF0dGVybl9zaXplX2EueSk7XG4gICAgZmxvYXQgeV9iID0gMC41ICsgKHZfbm9ybWFsLnkgKiBjbGFtcCh2X3dpZHRoMi5zLCAwLjAsICh1X3BhdHRlcm5fc2l6ZV9iLnkgKyAyLjApIC8gMi4wKSAvIHVfcGF0dGVybl9zaXplX2IueSk7XG4gICAgdmVjMiBwb3NfYSA9IG1peCh1X3BhdHRlcm5fdGxfYSAvIHVfdGV4c2l6ZSwgdV9wYXR0ZXJuX2JyX2EgLyB1X3RleHNpemUsIHZlYzIoeF9hLCB5X2EpKTtcbiAgICB2ZWMyIHBvc19iID0gbWl4KHVfcGF0dGVybl90bF9iIC8gdV90ZXhzaXplLCB1X3BhdHRlcm5fYnJfYiAvIHVfdGV4c2l6ZSwgdmVjMih4X2IsIHlfYikpO1xuXG4gICAgdmVjNCBjb2xvciA9IG1peCh0ZXh0dXJlMkQodV9pbWFnZSwgcG9zX2EpLCB0ZXh0dXJlMkQodV9pbWFnZSwgcG9zX2IpLCB1X2ZhZGUpO1xuXG4gICAgZ2xfRnJhZ0NvbG9yID0gY29sb3IgKiBhbHBoYSAqIG9wYWNpdHk7XG5cbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCk7XG4jZW5kaWZcbn1cbiIsdmVydGV4U291cmNlOiIvLyBmbG9vcigxMjcgLyAyKSA9PSA2My4wXG4vLyB0aGUgbWF4aW11bSBhbGxvd2VkIG1pdGVyIGxpbWl0IGlzIDIuMCBhdCB0aGUgbW9tZW50LiB0aGUgZXh0cnVkZSBub3JtYWwgaXNcbi8vIHN0b3JlZCBpbiBhIGJ5dGUgKC0xMjguLjEyNykuIHdlIHNjYWxlIHJlZ3VsYXIgbm9ybWFscyB1cCB0byBsZW5ndGggNjMsIGJ1dFxuLy8gdGhlcmUgYXJlIGFsc28gXCJzcGVjaWFsXCIgbm9ybWFscyB0aGF0IGhhdmUgYSBiaWdnZXIgbGVuZ3RoIChvZiB1cCB0byAxMjYgaW5cbi8vIHRoaXMgY2FzZSkuXG4vLyAjZGVmaW5lIHNjYWxlIDYzLjBcbiNkZWZpbmUgc2NhbGUgMC4wMTU4NzMwMTZcblxuLy8gV2Ugc2NhbGUgdGhlIGRpc3RhbmNlIGJlZm9yZSBhZGRpbmcgaXQgdG8gdGhlIGJ1ZmZlcnMgc28gdGhhdCB3ZSBjYW4gc3RvcmVcbi8vIGxvbmcgZGlzdGFuY2VzIGZvciBsb25nIHNlZ21lbnRzLiBVc2UgdGhpcyB2YWx1ZSB0byB1bnNjYWxlIHRoZSBkaXN0YW5jZS5cbiNkZWZpbmUgTElORV9ESVNUQU5DRV9TQ0FMRSAyLjBcblxuLy8gdGhlIGRpc3RhbmNlIG92ZXIgd2hpY2ggdGhlIGxpbmUgZWRnZSBmYWRlcyBvdXQuXG4vLyBSZXRpbmEgZGV2aWNlcyBuZWVkIGEgc21hbGxlciBkaXN0YW5jZSB0byBhdm9pZCBhbGlhc2luZy5cbiNkZWZpbmUgQU5USUFMSUFTSU5HIDEuMCAvIERFVklDRV9QSVhFTF9SQVRJTyAvIDIuMFxuXG5hdHRyaWJ1dGUgdmVjNCBhX3Bvc19ub3JtYWw7XG5hdHRyaWJ1dGUgdmVjNCBhX2RhdGE7XG5cbnVuaWZvcm0gbWF0NCB1X21hdHJpeDtcbnVuaWZvcm0gbWVkaXVtcCBmbG9hdCB1X3JhdGlvO1xudW5pZm9ybSB2ZWMyIHVfZ2xfdW5pdHNfdG9fcGl4ZWxzO1xuXG52YXJ5aW5nIHZlYzIgdl9ub3JtYWw7XG52YXJ5aW5nIHZlYzIgdl93aWR0aDI7XG52YXJ5aW5nIGZsb2F0IHZfbGluZXNvZmFyO1xudmFyeWluZyBmbG9hdCB2X2dhbW1hX3NjYWxlO1xuXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgYmx1clxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvZmZzZXRcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbWVkaXVtcCBmbG9hdCBnYXB3aWR0aFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBtZWRpdW1wIGZsb2F0IHdpZHRoXG5cbnZvaWQgbWFpbigpIHtcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGJsdXJcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9mZnNldFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgZmxvYXQgZ2Fwd2lkdGhcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIGZsb2F0IHdpZHRoXG5cbiAgICB2ZWMyIGFfZXh0cnVkZSA9IGFfZGF0YS54eSAtIDEyOC4wO1xuICAgIGZsb2F0IGFfZGlyZWN0aW9uID0gbW9kKGFfZGF0YS56LCA0LjApIC0gMS4wO1xuICAgIGZsb2F0IGFfbGluZXNvZmFyID0gKGZsb29yKGFfZGF0YS56IC8gNC4wKSArIGFfZGF0YS53ICogNjQuMCkgKiBMSU5FX0RJU1RBTkNFX1NDQUxFO1xuXG4gICAgdmVjMiBwb3MgPSBhX3Bvc19ub3JtYWwueHk7XG5cbiAgICAvLyB4IGlzIDEgaWYgaXQncyBhIHJvdW5kIGNhcCwgMCBvdGhlcndpc2VcbiAgICAvLyB5IGlzIDEgaWYgdGhlIG5vcm1hbCBwb2ludHMgdXAsIGFuZCAtMSBpZiBpdCBwb2ludHMgZG93blxuICAgIG1lZGl1bXAgdmVjMiBub3JtYWwgPSBhX3Bvc19ub3JtYWwuenc7XG4gICAgdl9ub3JtYWwgPSBub3JtYWw7XG5cbiAgICAvLyB0aGVzZSB0cmFuc2Zvcm1hdGlvbnMgdXNlZCB0byBiZSBhcHBsaWVkIGluIHRoZSBKUyBhbmQgbmF0aXZlIGNvZGUgYmFzZXMuXG4gICAgLy8gbW92ZWQgdGhlbSBpbnRvIHRoZSBzaGFkZXIgZm9yIGNsYXJpdHkgYW5kIHNpbXBsaWNpdHkuXG4gICAgZ2Fwd2lkdGggPSBnYXB3aWR0aCAvIDIuMDtcbiAgICBmbG9hdCBoYWxmd2lkdGggPSB3aWR0aCAvIDIuMDtcbiAgICBvZmZzZXQgPSAtMS4wICogb2Zmc2V0O1xuXG4gICAgZmxvYXQgaW5zZXQgPSBnYXB3aWR0aCArIChnYXB3aWR0aCA+IDAuMCA/IEFOVElBTElBU0lORyA6IDAuMCk7XG4gICAgZmxvYXQgb3V0c2V0ID0gZ2Fwd2lkdGggKyBoYWxmd2lkdGggKiAoZ2Fwd2lkdGggPiAwLjAgPyAyLjAgOiAxLjApICsgQU5USUFMSUFTSU5HO1xuXG4gICAgLy8gU2NhbGUgdGhlIGV4dHJ1c2lvbiB2ZWN0b3IgZG93biB0byBhIG5vcm1hbCBhbmQgdGhlbiB1cCBieSB0aGUgbGluZSB3aWR0aFxuICAgIC8vIG9mIHRoaXMgdmVydGV4LlxuICAgIG1lZGl1bXAgdmVjMiBkaXN0ID0gb3V0c2V0ICogYV9leHRydWRlICogc2NhbGU7XG5cbiAgICAvLyBDYWxjdWxhdGUgdGhlIG9mZnNldCB3aGVuIGRyYXdpbmcgYSBsaW5lIHRoYXQgaXMgdG8gdGhlIHNpZGUgb2YgdGhlIGFjdHVhbCBsaW5lLlxuICAgIC8vIFdlIGRvIHRoaXMgYnkgY3JlYXRpbmcgYSB2ZWN0b3IgdGhhdCBwb2ludHMgdG93YXJkcyB0aGUgZXh0cnVkZSwgYnV0IHJvdGF0ZVxuICAgIC8vIGl0IHdoZW4gd2UncmUgZHJhd2luZyByb3VuZCBlbmQgcG9pbnRzIChhX2RpcmVjdGlvbiA9IC0xIG9yIDEpIHNpbmNlIHRoZWlyXG4gICAgLy8gZXh0cnVkZSB2ZWN0b3IgcG9pbnRzIGluIGFub3RoZXIgZGlyZWN0aW9uLlxuICAgIG1lZGl1bXAgZmxvYXQgdSA9IDAuNSAqIGFfZGlyZWN0aW9uO1xuICAgIG1lZGl1bXAgZmxvYXQgdCA9IDEuMCAtIGFicyh1KTtcbiAgICBtZWRpdW1wIHZlYzIgb2Zmc2V0MiA9IG9mZnNldCAqIGFfZXh0cnVkZSAqIHNjYWxlICogbm9ybWFsLnkgKiBtYXQyKHQsIC11LCB1LCB0KTtcblxuICAgIHZlYzQgcHJvamVjdGVkX2V4dHJ1ZGUgPSB1X21hdHJpeCAqIHZlYzQoZGlzdCAvIHVfcmF0aW8sIDAuMCwgMC4wKTtcbiAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogdmVjNChwb3MgKyBvZmZzZXQyIC8gdV9yYXRpbywgMC4wLCAxLjApICsgcHJvamVjdGVkX2V4dHJ1ZGU7XG5cbiAgICAvLyBjYWxjdWxhdGUgaG93IG11Y2ggdGhlIHBlcnNwZWN0aXZlIHZpZXcgc3F1aXNoZXMgb3Igc3RyZXRjaGVzIHRoZSBleHRydWRlXG4gICAgZmxvYXQgZXh0cnVkZV9sZW5ndGhfd2l0aG91dF9wZXJzcGVjdGl2ZSA9IGxlbmd0aChkaXN0KTtcbiAgICBmbG9hdCBleHRydWRlX2xlbmd0aF93aXRoX3BlcnNwZWN0aXZlID0gbGVuZ3RoKHByb2plY3RlZF9leHRydWRlLnh5IC8gZ2xfUG9zaXRpb24udyAqIHVfZ2xfdW5pdHNfdG9fcGl4ZWxzKTtcbiAgICB2X2dhbW1hX3NjYWxlID0gZXh0cnVkZV9sZW5ndGhfd2l0aG91dF9wZXJzcGVjdGl2ZSAvIGV4dHJ1ZGVfbGVuZ3RoX3dpdGhfcGVyc3BlY3RpdmU7XG5cbiAgICB2X2xpbmVzb2ZhciA9IGFfbGluZXNvZmFyO1xuICAgIHZfd2lkdGgyID0gdmVjMihvdXRzZXQsIGluc2V0KTtcbn1cbiJ9LGxpbmVTREY6e2ZyYWdtZW50U291cmNlOiJcbnVuaWZvcm0gc2FtcGxlcjJEIHVfaW1hZ2U7XG51bmlmb3JtIGZsb2F0IHVfc2RmZ2FtbWE7XG51bmlmb3JtIGZsb2F0IHVfbWl4O1xuXG52YXJ5aW5nIHZlYzIgdl9ub3JtYWw7XG52YXJ5aW5nIHZlYzIgdl93aWR0aDI7XG52YXJ5aW5nIHZlYzIgdl90ZXhfYTtcbnZhcnlpbmcgdmVjMiB2X3RleF9iO1xudmFyeWluZyBmbG9hdCB2X2dhbW1hX3NjYWxlO1xuXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgY29sb3JcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBibHVyXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBtZWRpdW1wIGZsb2F0IHdpZHRoXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgZmxvb3J3aWR0aFxuXG52b2lkIG1haW4oKSB7XG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBjb2xvclxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgYmx1clxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgZmxvYXQgd2lkdGhcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGZsb29yd2lkdGhcblxuICAgIC8vIENhbGN1bGF0ZSB0aGUgZGlzdGFuY2Ugb2YgdGhlIHBpeGVsIGZyb20gdGhlIGxpbmUgaW4gcGl4ZWxzLlxuICAgIGZsb2F0IGRpc3QgPSBsZW5ndGgodl9ub3JtYWwpICogdl93aWR0aDIucztcblxuICAgIC8vIENhbGN1bGF0ZSB0aGUgYW50aWFsaWFzaW5nIGZhZGUgZmFjdG9yLiBUaGlzIGlzIGVpdGhlciB3aGVuIGZhZGluZyBpblxuICAgIC8vIHRoZSBsaW5lIGluIGNhc2Ugb2YgYW4gb2Zmc2V0IGxpbmUgKHZfd2lkdGgyLnQpIG9yIHdoZW4gZmFkaW5nIG91dFxuICAgIC8vICh2X3dpZHRoMi5zKVxuICAgIGZsb2F0IGJsdXIyID0gKGJsdXIgKyAxLjAgLyBERVZJQ0VfUElYRUxfUkFUSU8pICogdl9nYW1tYV9zY2FsZTtcbiAgICBmbG9hdCBhbHBoYSA9IGNsYW1wKG1pbihkaXN0IC0gKHZfd2lkdGgyLnQgLSBibHVyMiksIHZfd2lkdGgyLnMgLSBkaXN0KSAvIGJsdXIyLCAwLjAsIDEuMCk7XG5cbiAgICBmbG9hdCBzZGZkaXN0X2EgPSB0ZXh0dXJlMkQodV9pbWFnZSwgdl90ZXhfYSkuYTtcbiAgICBmbG9hdCBzZGZkaXN0X2IgPSB0ZXh0dXJlMkQodV9pbWFnZSwgdl90ZXhfYikuYTtcbiAgICBmbG9hdCBzZGZkaXN0ID0gbWl4KHNkZmRpc3RfYSwgc2RmZGlzdF9iLCB1X21peCk7XG4gICAgYWxwaGEgKj0gc21vb3Roc3RlcCgwLjUgLSB1X3NkZmdhbW1hIC8gZmxvb3J3aWR0aCwgMC41ICsgdV9zZGZnYW1tYSAvIGZsb29yd2lkdGgsIHNkZmRpc3QpO1xuXG4gICAgZ2xfRnJhZ0NvbG9yID0gY29sb3IgKiAoYWxwaGEgKiBvcGFjaXR5KTtcblxuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4wKTtcbiNlbmRpZlxufVxuIix2ZXJ0ZXhTb3VyY2U6Ii8vIGZsb29yKDEyNyAvIDIpID09IDYzLjBcbi8vIHRoZSBtYXhpbXVtIGFsbG93ZWQgbWl0ZXIgbGltaXQgaXMgMi4wIGF0IHRoZSBtb21lbnQuIHRoZSBleHRydWRlIG5vcm1hbCBpc1xuLy8gc3RvcmVkIGluIGEgYnl0ZSAoLTEyOC4uMTI3KS4gd2Ugc2NhbGUgcmVndWxhciBub3JtYWxzIHVwIHRvIGxlbmd0aCA2MywgYnV0XG4vLyB0aGVyZSBhcmUgYWxzbyBcInNwZWNpYWxcIiBub3JtYWxzIHRoYXQgaGF2ZSBhIGJpZ2dlciBsZW5ndGggKG9mIHVwIHRvIDEyNiBpblxuLy8gdGhpcyBjYXNlKS5cbi8vICNkZWZpbmUgc2NhbGUgNjMuMFxuI2RlZmluZSBzY2FsZSAwLjAxNTg3MzAxNlxuXG4vLyBXZSBzY2FsZSB0aGUgZGlzdGFuY2UgYmVmb3JlIGFkZGluZyBpdCB0byB0aGUgYnVmZmVycyBzbyB0aGF0IHdlIGNhbiBzdG9yZVxuLy8gbG9uZyBkaXN0YW5jZXMgZm9yIGxvbmcgc2VnbWVudHMuIFVzZSB0aGlzIHZhbHVlIHRvIHVuc2NhbGUgdGhlIGRpc3RhbmNlLlxuI2RlZmluZSBMSU5FX0RJU1RBTkNFX1NDQUxFIDIuMFxuXG4vLyB0aGUgZGlzdGFuY2Ugb3ZlciB3aGljaCB0aGUgbGluZSBlZGdlIGZhZGVzIG91dC5cbi8vIFJldGluYSBkZXZpY2VzIG5lZWQgYSBzbWFsbGVyIGRpc3RhbmNlIHRvIGF2b2lkIGFsaWFzaW5nLlxuI2RlZmluZSBBTlRJQUxJQVNJTkcgMS4wIC8gREVWSUNFX1BJWEVMX1JBVElPIC8gMi4wXG5cbmF0dHJpYnV0ZSB2ZWM0IGFfcG9zX25vcm1hbDtcbmF0dHJpYnV0ZSB2ZWM0IGFfZGF0YTtcblxudW5pZm9ybSBtYXQ0IHVfbWF0cml4O1xudW5pZm9ybSBtZWRpdW1wIGZsb2F0IHVfcmF0aW87XG51bmlmb3JtIHZlYzIgdV9wYXR0ZXJuc2NhbGVfYTtcbnVuaWZvcm0gZmxvYXQgdV90ZXhfeV9hO1xudW5pZm9ybSB2ZWMyIHVfcGF0dGVybnNjYWxlX2I7XG51bmlmb3JtIGZsb2F0IHVfdGV4X3lfYjtcbnVuaWZvcm0gdmVjMiB1X2dsX3VuaXRzX3RvX3BpeGVscztcblxudmFyeWluZyB2ZWMyIHZfbm9ybWFsO1xudmFyeWluZyB2ZWMyIHZfd2lkdGgyO1xudmFyeWluZyB2ZWMyIHZfdGV4X2E7XG52YXJ5aW5nIHZlYzIgdl90ZXhfYjtcbnZhcnlpbmcgZmxvYXQgdl9nYW1tYV9zY2FsZTtcblxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IGNvbG9yXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgYmx1clxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbWVkaXVtcCBmbG9hdCBnYXB3aWR0aFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9mZnNldFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBtZWRpdW1wIGZsb2F0IHdpZHRoXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgZmxvb3J3aWR0aFxuXG52b2lkIG1haW4oKSB7XG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBjb2xvclxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgYmx1clxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgZmxvYXQgZ2Fwd2lkdGhcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9mZnNldFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgZmxvYXQgd2lkdGhcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGZsb29yd2lkdGhcblxuICAgIHZlYzIgYV9leHRydWRlID0gYV9kYXRhLnh5IC0gMTI4LjA7XG4gICAgZmxvYXQgYV9kaXJlY3Rpb24gPSBtb2QoYV9kYXRhLnosIDQuMCkgLSAxLjA7XG4gICAgZmxvYXQgYV9saW5lc29mYXIgPSAoZmxvb3IoYV9kYXRhLnogLyA0LjApICsgYV9kYXRhLncgKiA2NC4wKSAqIExJTkVfRElTVEFOQ0VfU0NBTEU7XG5cbiAgICB2ZWMyIHBvcyA9IGFfcG9zX25vcm1hbC54eTtcblxuICAgIC8vIHggaXMgMSBpZiBpdCdzIGEgcm91bmQgY2FwLCAwIG90aGVyd2lzZVxuICAgIC8vIHkgaXMgMSBpZiB0aGUgbm9ybWFsIHBvaW50cyB1cCwgYW5kIC0xIGlmIGl0IHBvaW50cyBkb3duXG4gICAgbWVkaXVtcCB2ZWMyIG5vcm1hbCA9IGFfcG9zX25vcm1hbC56dztcbiAgICB2X25vcm1hbCA9IG5vcm1hbDtcblxuICAgIC8vIHRoZXNlIHRyYW5zZm9ybWF0aW9ucyB1c2VkIHRvIGJlIGFwcGxpZWQgaW4gdGhlIEpTIGFuZCBuYXRpdmUgY29kZSBiYXNlcy5cbiAgICAvLyBtb3ZlZCB0aGVtIGludG8gdGhlIHNoYWRlciBmb3IgY2xhcml0eSBhbmQgc2ltcGxpY2l0eS5cbiAgICBnYXB3aWR0aCA9IGdhcHdpZHRoIC8gMi4wO1xuICAgIGZsb2F0IGhhbGZ3aWR0aCA9IHdpZHRoIC8gMi4wO1xuICAgIG9mZnNldCA9IC0xLjAgKiBvZmZzZXQ7XG5cbiAgICBmbG9hdCBpbnNldCA9IGdhcHdpZHRoICsgKGdhcHdpZHRoID4gMC4wID8gQU5USUFMSUFTSU5HIDogMC4wKTtcbiAgICBmbG9hdCBvdXRzZXQgPSBnYXB3aWR0aCArIGhhbGZ3aWR0aCAqIChnYXB3aWR0aCA+IDAuMCA/IDIuMCA6IDEuMCkgKyBBTlRJQUxJQVNJTkc7XG5cbiAgICAvLyBTY2FsZSB0aGUgZXh0cnVzaW9uIHZlY3RvciBkb3duIHRvIGEgbm9ybWFsIGFuZCB0aGVuIHVwIGJ5IHRoZSBsaW5lIHdpZHRoXG4gICAgLy8gb2YgdGhpcyB2ZXJ0ZXguXG4gICAgbWVkaXVtcCB2ZWMyIGRpc3QgPW91dHNldCAqIGFfZXh0cnVkZSAqIHNjYWxlO1xuXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBvZmZzZXQgd2hlbiBkcmF3aW5nIGEgbGluZSB0aGF0IGlzIHRvIHRoZSBzaWRlIG9mIHRoZSBhY3R1YWwgbGluZS5cbiAgICAvLyBXZSBkbyB0aGlzIGJ5IGNyZWF0aW5nIGEgdmVjdG9yIHRoYXQgcG9pbnRzIHRvd2FyZHMgdGhlIGV4dHJ1ZGUsIGJ1dCByb3RhdGVcbiAgICAvLyBpdCB3aGVuIHdlJ3JlIGRyYXdpbmcgcm91bmQgZW5kIHBvaW50cyAoYV9kaXJlY3Rpb24gPSAtMSBvciAxKSBzaW5jZSB0aGVpclxuICAgIC8vIGV4dHJ1ZGUgdmVjdG9yIHBvaW50cyBpbiBhbm90aGVyIGRpcmVjdGlvbi5cbiAgICBtZWRpdW1wIGZsb2F0IHUgPSAwLjUgKiBhX2RpcmVjdGlvbjtcbiAgICBtZWRpdW1wIGZsb2F0IHQgPSAxLjAgLSBhYnModSk7XG4gICAgbWVkaXVtcCB2ZWMyIG9mZnNldDIgPSBvZmZzZXQgKiBhX2V4dHJ1ZGUgKiBzY2FsZSAqIG5vcm1hbC55ICogbWF0Mih0LCAtdSwgdSwgdCk7XG5cbiAgICB2ZWM0IHByb2plY3RlZF9leHRydWRlID0gdV9tYXRyaXggKiB2ZWM0KGRpc3QgLyB1X3JhdGlvLCAwLjAsIDAuMCk7XG4gICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIHZlYzQocG9zICsgb2Zmc2V0MiAvIHVfcmF0aW8sIDAuMCwgMS4wKSArIHByb2plY3RlZF9leHRydWRlO1xuXG4gICAgLy8gY2FsY3VsYXRlIGhvdyBtdWNoIHRoZSBwZXJzcGVjdGl2ZSB2aWV3IHNxdWlzaGVzIG9yIHN0cmV0Y2hlcyB0aGUgZXh0cnVkZVxuICAgIGZsb2F0IGV4dHJ1ZGVfbGVuZ3RoX3dpdGhvdXRfcGVyc3BlY3RpdmUgPSBsZW5ndGgoZGlzdCk7XG4gICAgZmxvYXQgZXh0cnVkZV9sZW5ndGhfd2l0aF9wZXJzcGVjdGl2ZSA9IGxlbmd0aChwcm9qZWN0ZWRfZXh0cnVkZS54eSAvIGdsX1Bvc2l0aW9uLncgKiB1X2dsX3VuaXRzX3RvX3BpeGVscyk7XG4gICAgdl9nYW1tYV9zY2FsZSA9IGV4dHJ1ZGVfbGVuZ3RoX3dpdGhvdXRfcGVyc3BlY3RpdmUgLyBleHRydWRlX2xlbmd0aF93aXRoX3BlcnNwZWN0aXZlO1xuXG4gICAgdl90ZXhfYSA9IHZlYzIoYV9saW5lc29mYXIgKiB1X3BhdHRlcm5zY2FsZV9hLnggLyBmbG9vcndpZHRoLCBub3JtYWwueSAqIHVfcGF0dGVybnNjYWxlX2EueSArIHVfdGV4X3lfYSk7XG4gICAgdl90ZXhfYiA9IHZlYzIoYV9saW5lc29mYXIgKiB1X3BhdHRlcm5zY2FsZV9iLnggLyBmbG9vcndpZHRoLCBub3JtYWwueSAqIHVfcGF0dGVybnNjYWxlX2IueSArIHVfdGV4X3lfYik7XG5cbiAgICB2X3dpZHRoMiA9IHZlYzIob3V0c2V0LCBpbnNldCk7XG59XG4ifSxyYXN0ZXI6e2ZyYWdtZW50U291cmNlOiJ1bmlmb3JtIGZsb2F0IHVfZmFkZV90O1xudW5pZm9ybSBmbG9hdCB1X29wYWNpdHk7XG51bmlmb3JtIHNhbXBsZXIyRCB1X2ltYWdlMDtcbnVuaWZvcm0gc2FtcGxlcjJEIHVfaW1hZ2UxO1xudmFyeWluZyB2ZWMyIHZfcG9zMDtcbnZhcnlpbmcgdmVjMiB2X3BvczE7XG5cbnVuaWZvcm0gZmxvYXQgdV9icmlnaHRuZXNzX2xvdztcbnVuaWZvcm0gZmxvYXQgdV9icmlnaHRuZXNzX2hpZ2g7XG5cbnVuaWZvcm0gZmxvYXQgdV9zYXR1cmF0aW9uX2ZhY3RvcjtcbnVuaWZvcm0gZmxvYXQgdV9jb250cmFzdF9mYWN0b3I7XG51bmlmb3JtIHZlYzMgdV9zcGluX3dlaWdodHM7XG5cbnZvaWQgbWFpbigpIHtcblxuICAgIC8vIHJlYWQgYW5kIGNyb3NzLWZhZGUgY29sb3JzIGZyb20gdGhlIG1haW4gYW5kIHBhcmVudCB0aWxlc1xuICAgIHZlYzQgY29sb3IwID0gdGV4dHVyZTJEKHVfaW1hZ2UwLCB2X3BvczApO1xuICAgIHZlYzQgY29sb3IxID0gdGV4dHVyZTJEKHVfaW1hZ2UxLCB2X3BvczEpO1xuICAgIGlmIChjb2xvcjAuYSA+IDAuMCkge1xuICAgICAgICBjb2xvcjAucmdiID0gY29sb3IwLnJnYiAvIGNvbG9yMC5hO1xuICAgIH1cbiAgICBpZiAoY29sb3IxLmEgPiAwLjApIHtcbiAgICAgICAgY29sb3IxLnJnYiA9IGNvbG9yMS5yZ2IgLyBjb2xvcjEuYTtcbiAgICB9XG4gICAgdmVjNCBjb2xvciA9IG1peChjb2xvcjAsIGNvbG9yMSwgdV9mYWRlX3QpO1xuICAgIGNvbG9yLmEgKj0gdV9vcGFjaXR5O1xuICAgIHZlYzMgcmdiID0gY29sb3IucmdiO1xuXG4gICAgLy8gc3BpblxuICAgIHJnYiA9IHZlYzMoXG4gICAgICAgIGRvdChyZ2IsIHVfc3Bpbl93ZWlnaHRzLnh5eiksXG4gICAgICAgIGRvdChyZ2IsIHVfc3Bpbl93ZWlnaHRzLnp4eSksXG4gICAgICAgIGRvdChyZ2IsIHVfc3Bpbl93ZWlnaHRzLnl6eCkpO1xuXG4gICAgLy8gc2F0dXJhdGlvblxuICAgIGZsb2F0IGF2ZXJhZ2UgPSAoY29sb3IuciArIGNvbG9yLmcgKyBjb2xvci5iKSAvIDMuMDtcbiAgICByZ2IgKz0gKGF2ZXJhZ2UgLSByZ2IpICogdV9zYXR1cmF0aW9uX2ZhY3RvcjtcblxuICAgIC8vIGNvbnRyYXN0XG4gICAgcmdiID0gKHJnYiAtIDAuNSkgKiB1X2NvbnRyYXN0X2ZhY3RvciArIDAuNTtcblxuICAgIC8vIGJyaWdodG5lc3NcbiAgICB2ZWMzIHVfaGlnaF92ZWMgPSB2ZWMzKHVfYnJpZ2h0bmVzc19sb3csIHVfYnJpZ2h0bmVzc19sb3csIHVfYnJpZ2h0bmVzc19sb3cpO1xuICAgIHZlYzMgdV9sb3dfdmVjID0gdmVjMyh1X2JyaWdodG5lc3NfaGlnaCwgdV9icmlnaHRuZXNzX2hpZ2gsIHVfYnJpZ2h0bmVzc19oaWdoKTtcblxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQobWl4KHVfaGlnaF92ZWMsIHVfbG93X3ZlYywgcmdiKSAqIGNvbG9yLmEsIGNvbG9yLmEpO1xuXG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjApO1xuI2VuZGlmXG59XG4iLHZlcnRleFNvdXJjZToidW5pZm9ybSBtYXQ0IHVfbWF0cml4O1xudW5pZm9ybSB2ZWMyIHVfdGxfcGFyZW50O1xudW5pZm9ybSBmbG9hdCB1X3NjYWxlX3BhcmVudDtcbnVuaWZvcm0gZmxvYXQgdV9idWZmZXJfc2NhbGU7XG5cbmF0dHJpYnV0ZSB2ZWMyIGFfcG9zO1xuYXR0cmlidXRlIHZlYzIgYV90ZXh0dXJlX3BvcztcblxudmFyeWluZyB2ZWMyIHZfcG9zMDtcbnZhcnlpbmcgdmVjMiB2X3BvczE7XG5cbnZvaWQgbWFpbigpIHtcbiAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogdmVjNChhX3BvcywgMCwgMSk7XG4gICAgLy8gV2UgYXJlIHVzaW5nIEludDE2IGZvciB0ZXh0dXJlIHBvc2l0aW9uIGNvb3JkaW5hdGVzIHRvIGdpdmUgdXMgZW5vdWdoIHByZWNpc2lvbiBmb3JcbiAgICAvLyBmcmFjdGlvbmFsIGNvb3JkaW5hdGVzLiBXZSB1c2UgODE5MiB0byBzY2FsZSB0aGUgdGV4dHVyZSBjb29yZGluYXRlcyBpbiB0aGUgYnVmZmVyXG4gICAgLy8gYXMgYW4gYXJiaXRyYXJpbHkgaGlnaCBudW1iZXIgdG8gcHJlc2VydmUgYWRlcXVhdGUgcHJlY2lzaW9uIHdoZW4gcmVuZGVyaW5nLlxuICAgIC8vIFRoaXMgaXMgYWxzbyB0aGUgc2FtZSB2YWx1ZSBhcyB0aGUgRVhURU5UIHdlIGFyZSB1c2luZyBmb3Igb3VyIHRpbGUgYnVmZmVyIHBvcyBjb29yZGluYXRlcyxcbiAgICAvLyBzbyBtYXRoIGZvciBtb2RpZnlpbmcgZWl0aGVyIGlzIGNvbnNpc3RlbnQuXG4gICAgdl9wb3MwID0gKCgoYV90ZXh0dXJlX3BvcyAvIDgxOTIuMCkgLSAwLjUpIC8gdV9idWZmZXJfc2NhbGUgKSArIDAuNTtcbiAgICB2X3BvczEgPSAodl9wb3MwICogdV9zY2FsZV9wYXJlbnQpICsgdV90bF9wYXJlbnQ7XG59XG4ifSxzeW1ib2xJY29uOntmcmFnbWVudFNvdXJjZToidW5pZm9ybSBzYW1wbGVyMkQgdV90ZXh0dXJlO1xuXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxuXG52YXJ5aW5nIHZlYzIgdl90ZXg7XG52YXJ5aW5nIGZsb2F0IHZfZmFkZV9vcGFjaXR5O1xuXG52b2lkIG1haW4oKSB7XG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG5cbiAgICBsb3dwIGZsb2F0IGFscGhhID0gb3BhY2l0eSAqIHZfZmFkZV9vcGFjaXR5O1xuICAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh1X3RleHR1cmUsIHZfdGV4KSAqIGFscGhhO1xuXG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjApO1xuI2VuZGlmXG59XG4iLHZlcnRleFNvdXJjZToiY29uc3QgZmxvYXQgUEkgPSAzLjE0MTU5MjY1MzU4OTc5MztcblxuYXR0cmlidXRlIHZlYzQgYV9wb3Nfb2Zmc2V0O1xuYXR0cmlidXRlIHZlYzQgYV9kYXRhO1xuYXR0cmlidXRlIHZlYzMgYV9wcm9qZWN0ZWRfcG9zO1xuYXR0cmlidXRlIGZsb2F0IGFfZmFkZV9vcGFjaXR5O1xuXG51bmlmb3JtIGJvb2wgdV9pc19zaXplX3pvb21fY29uc3RhbnQ7XG51bmlmb3JtIGJvb2wgdV9pc19zaXplX2ZlYXR1cmVfY29uc3RhbnQ7XG51bmlmb3JtIGhpZ2hwIGZsb2F0IHVfc2l6ZV90OyAvLyB1c2VkIHRvIGludGVycG9sYXRlIGJldHdlZW4gem9vbSBzdG9wcyB3aGVuIHNpemUgaXMgYSBjb21wb3NpdGUgZnVuY3Rpb25cbnVuaWZvcm0gaGlnaHAgZmxvYXQgdV9zaXplOyAvLyB1c2VkIHdoZW4gc2l6ZSBpcyBib3RoIHpvb20gYW5kIGZlYXR1cmUgY29uc3RhbnRcbnVuaWZvcm0gaGlnaHAgZmxvYXQgdV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlO1xudW5pZm9ybSBoaWdocCBmbG9hdCB1X3BpdGNoO1xudW5pZm9ybSBib29sIHVfcm90YXRlX3N5bWJvbDtcbnVuaWZvcm0gaGlnaHAgZmxvYXQgdV9hc3BlY3RfcmF0aW87XG51bmlmb3JtIGZsb2F0IHVfZmFkZV9jaGFuZ2U7XG5cbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG5cbnVuaWZvcm0gbWF0NCB1X21hdHJpeDtcbnVuaWZvcm0gbWF0NCB1X2xhYmVsX3BsYW5lX21hdHJpeDtcbnVuaWZvcm0gbWF0NCB1X2dsX2Nvb3JkX21hdHJpeDtcblxudW5pZm9ybSBib29sIHVfaXNfdGV4dDtcbnVuaWZvcm0gYm9vbCB1X3BpdGNoX3dpdGhfbWFwO1xuXG51bmlmb3JtIHZlYzIgdV90ZXhzaXplO1xuXG52YXJ5aW5nIHZlYzIgdl90ZXg7XG52YXJ5aW5nIGZsb2F0IHZfZmFkZV9vcGFjaXR5O1xuXG52b2lkIG1haW4oKSB7XG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG5cbiAgICB2ZWMyIGFfcG9zID0gYV9wb3Nfb2Zmc2V0Lnh5O1xuICAgIHZlYzIgYV9vZmZzZXQgPSBhX3Bvc19vZmZzZXQuenc7XG5cbiAgICB2ZWMyIGFfdGV4ID0gYV9kYXRhLnh5O1xuICAgIHZlYzIgYV9zaXplID0gYV9kYXRhLnp3O1xuXG4gICAgaGlnaHAgZmxvYXQgc2VnbWVudF9hbmdsZSA9IC1hX3Byb2plY3RlZF9wb3NbMl07XG5cbiAgICBmbG9hdCBzaXplO1xuICAgIGlmICghdV9pc19zaXplX3pvb21fY29uc3RhbnQgJiYgIXVfaXNfc2l6ZV9mZWF0dXJlX2NvbnN0YW50KSB7XG4gICAgICAgIHNpemUgPSBtaXgoYV9zaXplWzBdLCBhX3NpemVbMV0sIHVfc2l6ZV90KSAvIDEwLjA7XG4gICAgfSBlbHNlIGlmICh1X2lzX3NpemVfem9vbV9jb25zdGFudCAmJiAhdV9pc19zaXplX2ZlYXR1cmVfY29uc3RhbnQpIHtcbiAgICAgICAgc2l6ZSA9IGFfc2l6ZVswXSAvIDEwLjA7XG4gICAgfSBlbHNlIGlmICghdV9pc19zaXplX3pvb21fY29uc3RhbnQgJiYgdV9pc19zaXplX2ZlYXR1cmVfY29uc3RhbnQpIHtcbiAgICAgICAgc2l6ZSA9IHVfc2l6ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBzaXplID0gdV9zaXplO1xuICAgIH1cblxuICAgIHZlYzQgcHJvamVjdGVkUG9pbnQgPSB1X21hdHJpeCAqIHZlYzQoYV9wb3MsIDAsIDEpO1xuICAgIGhpZ2hwIGZsb2F0IGNhbWVyYV90b19hbmNob3JfZGlzdGFuY2UgPSBwcm9qZWN0ZWRQb2ludC53O1xuICAgIC8vIFNlZSBjb21tZW50cyBpbiBzeW1ib2xfc2RmLnZlcnRleFxuICAgIGhpZ2hwIGZsb2F0IGRpc3RhbmNlX3JhdGlvID0gdV9waXRjaF93aXRoX21hcCA/XG4gICAgICAgIGNhbWVyYV90b19hbmNob3JfZGlzdGFuY2UgLyB1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UgOlxuICAgICAgICB1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UgLyBjYW1lcmFfdG9fYW5jaG9yX2Rpc3RhbmNlO1xuICAgIGhpZ2hwIGZsb2F0IHBlcnNwZWN0aXZlX3JhdGlvID0gY2xhbXAoXG4gICAgICAgICAgICAwLjUgKyAwLjUgKiBkaXN0YW5jZV9yYXRpbyxcbiAgICAgICAgICAgIDAuMCwgLy8gUHJldmVudHMgb3ZlcnNpemVkIG5lYXItZmllbGQgc3ltYm9scyBpbiBwaXRjaGVkL292ZXJ6b29tZWQgdGlsZXNcbiAgICAgICAgICAgIDQuMCk7XG5cbiAgICBzaXplICo9IHBlcnNwZWN0aXZlX3JhdGlvO1xuXG4gICAgZmxvYXQgZm9udFNjYWxlID0gdV9pc190ZXh0ID8gc2l6ZSAvIDI0LjAgOiBzaXplO1xuXG4gICAgaGlnaHAgZmxvYXQgc3ltYm9sX3JvdGF0aW9uID0gMC4wO1xuICAgIGlmICh1X3JvdGF0ZV9zeW1ib2wpIHtcbiAgICAgICAgLy8gU2VlIGNvbW1lbnRzIGluIHN5bWJvbF9zZGYudmVydGV4XG4gICAgICAgIHZlYzQgb2Zmc2V0UHJvamVjdGVkUG9pbnQgPSB1X21hdHJpeCAqIHZlYzQoYV9wb3MgKyB2ZWMyKDEsIDApLCAwLCAxKTtcblxuICAgICAgICB2ZWMyIGEgPSBwcm9qZWN0ZWRQb2ludC54eSAvIHByb2plY3RlZFBvaW50Lnc7XG4gICAgICAgIHZlYzIgYiA9IG9mZnNldFByb2plY3RlZFBvaW50Lnh5IC8gb2Zmc2V0UHJvamVjdGVkUG9pbnQudztcblxuICAgICAgICBzeW1ib2xfcm90YXRpb24gPSBhdGFuKChiLnkgLSBhLnkpIC8gdV9hc3BlY3RfcmF0aW8sIGIueCAtIGEueCk7XG4gICAgfVxuXG4gICAgaGlnaHAgZmxvYXQgYW5nbGVfc2luID0gc2luKHNlZ21lbnRfYW5nbGUgKyBzeW1ib2xfcm90YXRpb24pO1xuICAgIGhpZ2hwIGZsb2F0IGFuZ2xlX2NvcyA9IGNvcyhzZWdtZW50X2FuZ2xlICsgc3ltYm9sX3JvdGF0aW9uKTtcbiAgICBtYXQyIHJvdGF0aW9uX21hdHJpeCA9IG1hdDIoYW5nbGVfY29zLCAtMS4wICogYW5nbGVfc2luLCBhbmdsZV9zaW4sIGFuZ2xlX2Nvcyk7XG5cbiAgICB2ZWM0IHByb2plY3RlZF9wb3MgPSB1X2xhYmVsX3BsYW5lX21hdHJpeCAqIHZlYzQoYV9wcm9qZWN0ZWRfcG9zLnh5LCAwLjAsIDEuMCk7XG4gICAgZ2xfUG9zaXRpb24gPSB1X2dsX2Nvb3JkX21hdHJpeCAqIHZlYzQocHJvamVjdGVkX3Bvcy54eSAvIHByb2plY3RlZF9wb3MudyArIHJvdGF0aW9uX21hdHJpeCAqIChhX29mZnNldCAvIDMyLjAgKiBmb250U2NhbGUpLCAwLjAsIDEuMCk7XG5cbiAgICB2X3RleCA9IGFfdGV4IC8gdV90ZXhzaXplO1xuICAgIHZlYzIgZmFkZV9vcGFjaXR5ID0gdW5wYWNrX29wYWNpdHkoYV9mYWRlX29wYWNpdHkpO1xuICAgIGZsb2F0IGZhZGVfY2hhbmdlID0gZmFkZV9vcGFjaXR5WzFdID4gMC41ID8gdV9mYWRlX2NoYW5nZSA6IC11X2ZhZGVfY2hhbmdlO1xuICAgIHZfZmFkZV9vcGFjaXR5ID0gbWF4KDAuMCwgbWluKDEuMCwgZmFkZV9vcGFjaXR5WzBdICsgZmFkZV9jaGFuZ2UpKTtcbn1cbiJ9LHN5bWJvbFNERjp7ZnJhZ21lbnRTb3VyY2U6IiNkZWZpbmUgU0RGX1BYIDguMFxuI2RlZmluZSBFREdFX0dBTU1BIDAuMTA1L0RFVklDRV9QSVhFTF9SQVRJT1xuXG51bmlmb3JtIGJvb2wgdV9pc19oYWxvO1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IGZpbGxfY29sb3JcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBoYWxvX2NvbG9yXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGhhbG9fd2lkdGhcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBoYWxvX2JsdXJcblxudW5pZm9ybSBzYW1wbGVyMkQgdV90ZXh0dXJlO1xudW5pZm9ybSBoaWdocCBmbG9hdCB1X2dhbW1hX3NjYWxlO1xudW5pZm9ybSBib29sIHVfaXNfdGV4dDtcblxudmFyeWluZyB2ZWMyIHZfZGF0YTA7XG52YXJ5aW5nIHZlYzMgdl9kYXRhMTtcblxudm9pZCBtYWluKCkge1xuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgZmlsbF9jb2xvclxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgaGFsb19jb2xvclxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgaGFsb193aWR0aFxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgaGFsb19ibHVyXG5cbiAgICB2ZWMyIHRleCA9IHZfZGF0YTAueHk7XG4gICAgZmxvYXQgZ2FtbWFfc2NhbGUgPSB2X2RhdGExLng7XG4gICAgZmxvYXQgc2l6ZSA9IHZfZGF0YTEueTtcbiAgICBmbG9hdCBmYWRlX29wYWNpdHkgPSB2X2RhdGExWzJdO1xuXG4gICAgZmxvYXQgZm9udFNjYWxlID0gdV9pc190ZXh0ID8gc2l6ZSAvIDI0LjAgOiBzaXplO1xuXG4gICAgbG93cCB2ZWM0IGNvbG9yID0gZmlsbF9jb2xvcjtcbiAgICBoaWdocCBmbG9hdCBnYW1tYSA9IEVER0VfR0FNTUEgLyAoZm9udFNjYWxlICogdV9nYW1tYV9zY2FsZSk7XG4gICAgbG93cCBmbG9hdCBidWZmID0gKDI1Ni4wIC0gNjQuMCkgLyAyNTYuMDtcbiAgICBpZiAodV9pc19oYWxvKSB7XG4gICAgICAgIGNvbG9yID0gaGFsb19jb2xvcjtcbiAgICAgICAgZ2FtbWEgPSAoaGFsb19ibHVyICogMS4xOSAvIFNERl9QWCArIEVER0VfR0FNTUEpIC8gKGZvbnRTY2FsZSAqIHVfZ2FtbWFfc2NhbGUpO1xuICAgICAgICBidWZmID0gKDYuMCAtIGhhbG9fd2lkdGggLyBmb250U2NhbGUpIC8gU0RGX1BYO1xuICAgIH1cblxuICAgIGxvd3AgZmxvYXQgZGlzdCA9IHRleHR1cmUyRCh1X3RleHR1cmUsIHRleCkuYTtcbiAgICBoaWdocCBmbG9hdCBnYW1tYV9zY2FsZWQgPSBnYW1tYSAqIGdhbW1hX3NjYWxlO1xuICAgIGhpZ2hwIGZsb2F0IGFscGhhID0gc21vb3Roc3RlcChidWZmIC0gZ2FtbWFfc2NhbGVkLCBidWZmICsgZ2FtbWFfc2NhbGVkLCBkaXN0KTtcblxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yICogKGFscGhhICogb3BhY2l0eSAqIGZhZGVfb3BhY2l0eSk7XG5cbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCk7XG4jZW5kaWZcbn1cbiIsdmVydGV4U291cmNlOiJjb25zdCBmbG9hdCBQSSA9IDMuMTQxNTkyNjUzNTg5NzkzO1xuXG5hdHRyaWJ1dGUgdmVjNCBhX3Bvc19vZmZzZXQ7XG5hdHRyaWJ1dGUgdmVjNCBhX2RhdGE7XG5hdHRyaWJ1dGUgdmVjMyBhX3Byb2plY3RlZF9wb3M7XG5hdHRyaWJ1dGUgZmxvYXQgYV9mYWRlX29wYWNpdHk7XG5cbi8vIGNvbnRlbnRzIG9mIGFfc2l6ZSB2YXJ5IGJhc2VkIG9uIHRoZSB0eXBlIG9mIHByb3BlcnR5IHZhbHVlXG4vLyB1c2VkIGZvciB7dGV4dCxpY29ufS1zaXplLlxuLy8gRm9yIGNvbnN0YW50cywgYV9zaXplIGlzIGRpc2FibGVkLlxuLy8gRm9yIHNvdXJjZSBmdW5jdGlvbnMsIHdlIGJpbmQgb25seSBvbmUgdmFsdWUgcGVyIHZlcnRleDogdGhlIHZhbHVlIG9mIHt0ZXh0LGljb259LXNpemUgZXZhbHVhdGVkIGZvciB0aGUgY3VycmVudCBmZWF0dXJlLlxuLy8gRm9yIGNvbXBvc2l0ZSBmdW5jdGlvbnM6XG4vLyBbIHRleHQtc2l6ZShsb3dlclpvb21TdG9wLCBmZWF0dXJlKSxcbi8vICAgdGV4dC1zaXplKHVwcGVyWm9vbVN0b3AsIGZlYXR1cmUpIF1cbnVuaWZvcm0gYm9vbCB1X2lzX3NpemVfem9vbV9jb25zdGFudDtcbnVuaWZvcm0gYm9vbCB1X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudDtcbnVuaWZvcm0gaGlnaHAgZmxvYXQgdV9zaXplX3Q7IC8vIHVzZWQgdG8gaW50ZXJwb2xhdGUgYmV0d2VlbiB6b29tIHN0b3BzIHdoZW4gc2l6ZSBpcyBhIGNvbXBvc2l0ZSBmdW5jdGlvblxudW5pZm9ybSBoaWdocCBmbG9hdCB1X3NpemU7IC8vIHVzZWQgd2hlbiBzaXplIGlzIGJvdGggem9vbSBhbmQgZmVhdHVyZSBjb25zdGFudFxuXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgZmlsbF9jb2xvclxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IGhhbG9fY29sb3JcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgaGFsb193aWR0aFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGhhbG9fYmx1clxuXG51bmlmb3JtIG1hdDQgdV9tYXRyaXg7XG51bmlmb3JtIG1hdDQgdV9sYWJlbF9wbGFuZV9tYXRyaXg7XG51bmlmb3JtIG1hdDQgdV9nbF9jb29yZF9tYXRyaXg7XG5cbnVuaWZvcm0gYm9vbCB1X2lzX3RleHQ7XG51bmlmb3JtIGJvb2wgdV9waXRjaF93aXRoX21hcDtcbnVuaWZvcm0gaGlnaHAgZmxvYXQgdV9waXRjaDtcbnVuaWZvcm0gYm9vbCB1X3JvdGF0ZV9zeW1ib2w7XG51bmlmb3JtIGhpZ2hwIGZsb2F0IHVfYXNwZWN0X3JhdGlvO1xudW5pZm9ybSBoaWdocCBmbG9hdCB1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2U7XG51bmlmb3JtIGZsb2F0IHVfZmFkZV9jaGFuZ2U7XG5cbnVuaWZvcm0gdmVjMiB1X3RleHNpemU7XG5cbnZhcnlpbmcgdmVjMiB2X2RhdGEwO1xudmFyeWluZyB2ZWMzIHZfZGF0YTE7XG5cbnZvaWQgbWFpbigpIHtcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IGZpbGxfY29sb3JcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IGhhbG9fY29sb3JcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGhhbG9fd2lkdGhcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGhhbG9fYmx1clxuXG4gICAgdmVjMiBhX3BvcyA9IGFfcG9zX29mZnNldC54eTtcbiAgICB2ZWMyIGFfb2Zmc2V0ID0gYV9wb3Nfb2Zmc2V0Lnp3O1xuXG4gICAgdmVjMiBhX3RleCA9IGFfZGF0YS54eTtcbiAgICB2ZWMyIGFfc2l6ZSA9IGFfZGF0YS56dztcblxuICAgIGhpZ2hwIGZsb2F0IHNlZ21lbnRfYW5nbGUgPSAtYV9wcm9qZWN0ZWRfcG9zWzJdO1xuICAgIGZsb2F0IHNpemU7XG5cbiAgICBpZiAoIXVfaXNfc2l6ZV96b29tX2NvbnN0YW50ICYmICF1X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudCkge1xuICAgICAgICBzaXplID0gbWl4KGFfc2l6ZVswXSwgYV9zaXplWzFdLCB1X3NpemVfdCkgLyAxMC4wO1xuICAgIH0gZWxzZSBpZiAodV9pc19zaXplX3pvb21fY29uc3RhbnQgJiYgIXVfaXNfc2l6ZV9mZWF0dXJlX2NvbnN0YW50KSB7XG4gICAgICAgIHNpemUgPSBhX3NpemVbMF0gLyAxMC4wO1xuICAgIH0gZWxzZSBpZiAoIXVfaXNfc2l6ZV96b29tX2NvbnN0YW50ICYmIHVfaXNfc2l6ZV9mZWF0dXJlX2NvbnN0YW50KSB7XG4gICAgICAgIHNpemUgPSB1X3NpemU7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgc2l6ZSA9IHVfc2l6ZTtcbiAgICB9XG5cbiAgICB2ZWM0IHByb2plY3RlZFBvaW50ID0gdV9tYXRyaXggKiB2ZWM0KGFfcG9zLCAwLCAxKTtcbiAgICBoaWdocCBmbG9hdCBjYW1lcmFfdG9fYW5jaG9yX2Rpc3RhbmNlID0gcHJvamVjdGVkUG9pbnQudztcbiAgICAvLyBJZiB0aGUgbGFiZWwgaXMgcGl0Y2hlZCB3aXRoIHRoZSBtYXAsIGxheW91dCBpcyBkb25lIGluIHBpdGNoZWQgc3BhY2UsXG4gICAgLy8gd2hpY2ggbWFrZXMgbGFiZWxzIGluIHRoZSBkaXN0YW5jZSBzbWFsbGVyIHJlbGF0aXZlIHRvIHZpZXdwb3J0IHNwYWNlLlxuICAgIC8vIFdlIGNvdW50ZXJhY3QgcGFydCBvZiB0aGF0IGVmZmVjdCBieSBtdWx0aXBseWluZyBieSB0aGUgcGVyc3BlY3RpdmUgcmF0aW8uXG4gICAgLy8gSWYgdGhlIGxhYmVsIGlzbid0IHBpdGNoZWQgd2l0aCB0aGUgbWFwLCB3ZSBkbyBsYXlvdXQgaW4gdmlld3BvcnQgc3BhY2UsXG4gICAgLy8gd2hpY2ggbWFrZXMgbGFiZWxzIGluIHRoZSBkaXN0YW5jZSBsYXJnZXIgcmVsYXRpdmUgdG8gdGhlIGZlYXR1cmVzIGFyb3VuZFxuICAgIC8vIHRoZW0uIFdlIGNvdW50ZXJhY3QgcGFydCBvZiB0aGF0IGVmZmVjdCBieSBkaXZpZGluZyBieSB0aGUgcGVyc3BlY3RpdmUgcmF0aW8uXG4gICAgaGlnaHAgZmxvYXQgZGlzdGFuY2VfcmF0aW8gPSB1X3BpdGNoX3dpdGhfbWFwID9cbiAgICAgICAgY2FtZXJhX3RvX2FuY2hvcl9kaXN0YW5jZSAvIHVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSA6XG4gICAgICAgIHVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSAvIGNhbWVyYV90b19hbmNob3JfZGlzdGFuY2U7XG4gICAgaGlnaHAgZmxvYXQgcGVyc3BlY3RpdmVfcmF0aW8gPSBjbGFtcChcbiAgICAgICAgMC41ICsgMC41ICogZGlzdGFuY2VfcmF0aW8sXG4gICAgICAgIDAuMCwgLy8gUHJldmVudHMgb3ZlcnNpemVkIG5lYXItZmllbGQgc3ltYm9scyBpbiBwaXRjaGVkL292ZXJ6b29tZWQgdGlsZXNcbiAgICAgICAgNC4wKTtcblxuICAgIHNpemUgKj0gcGVyc3BlY3RpdmVfcmF0aW87XG5cbiAgICBmbG9hdCBmb250U2NhbGUgPSB1X2lzX3RleHQgPyBzaXplIC8gMjQuMCA6IHNpemU7XG5cbiAgICBoaWdocCBmbG9hdCBzeW1ib2xfcm90YXRpb24gPSAwLjA7XG4gICAgaWYgKHVfcm90YXRlX3N5bWJvbCkge1xuICAgICAgICAvLyBQb2ludCBsYWJlbHMgd2l0aCAncm90YXRpb24tYWxpZ25tZW50OiBtYXAnIGFyZSBob3Jpem9udGFsIHdpdGggcmVzcGVjdCB0byB0aWxlIHVuaXRzXG4gICAgICAgIC8vIFRvIGZpZ3VyZSBvdXQgdGhhdCBhbmdsZSBpbiBwcm9qZWN0ZWQgc3BhY2UsIHdlIGRyYXcgYSBzaG9ydCBob3Jpem9udGFsIGxpbmUgaW4gdGlsZVxuICAgICAgICAvLyBzcGFjZSwgcHJvamVjdCBpdCwgYW5kIG1lYXN1cmUgaXRzIGFuZ2xlIGluIHByb2plY3RlZCBzcGFjZS5cbiAgICAgICAgdmVjNCBvZmZzZXRQcm9qZWN0ZWRQb2ludCA9IHVfbWF0cml4ICogdmVjNChhX3BvcyArIHZlYzIoMSwgMCksIDAsIDEpO1xuXG4gICAgICAgIHZlYzIgYSA9IHByb2plY3RlZFBvaW50Lnh5IC8gcHJvamVjdGVkUG9pbnQudztcbiAgICAgICAgdmVjMiBiID0gb2Zmc2V0UHJvamVjdGVkUG9pbnQueHkgLyBvZmZzZXRQcm9qZWN0ZWRQb2ludC53O1xuXG4gICAgICAgIHN5bWJvbF9yb3RhdGlvbiA9IGF0YW4oKGIueSAtIGEueSkgLyB1X2FzcGVjdF9yYXRpbywgYi54IC0gYS54KTtcbiAgICB9XG5cbiAgICBoaWdocCBmbG9hdCBhbmdsZV9zaW4gPSBzaW4oc2VnbWVudF9hbmdsZSArIHN5bWJvbF9yb3RhdGlvbik7XG4gICAgaGlnaHAgZmxvYXQgYW5nbGVfY29zID0gY29zKHNlZ21lbnRfYW5nbGUgKyBzeW1ib2xfcm90YXRpb24pO1xuICAgIG1hdDIgcm90YXRpb25fbWF0cml4ID0gbWF0MihhbmdsZV9jb3MsIC0xLjAgKiBhbmdsZV9zaW4sIGFuZ2xlX3NpbiwgYW5nbGVfY29zKTtcblxuICAgIHZlYzQgcHJvamVjdGVkX3BvcyA9IHVfbGFiZWxfcGxhbmVfbWF0cml4ICogdmVjNChhX3Byb2plY3RlZF9wb3MueHksIDAuMCwgMS4wKTtcbiAgICBnbF9Qb3NpdGlvbiA9IHVfZ2xfY29vcmRfbWF0cml4ICogdmVjNChwcm9qZWN0ZWRfcG9zLnh5IC8gcHJvamVjdGVkX3Bvcy53ICsgcm90YXRpb25fbWF0cml4ICogKGFfb2Zmc2V0IC8gMzIuMCAqIGZvbnRTY2FsZSksIDAuMCwgMS4wKTtcbiAgICBmbG9hdCBnYW1tYV9zY2FsZSA9IGdsX1Bvc2l0aW9uLnc7XG5cbiAgICB2ZWMyIHRleCA9IGFfdGV4IC8gdV90ZXhzaXplO1xuICAgIHZlYzIgZmFkZV9vcGFjaXR5ID0gdW5wYWNrX29wYWNpdHkoYV9mYWRlX29wYWNpdHkpO1xuICAgIGZsb2F0IGZhZGVfY2hhbmdlID0gZmFkZV9vcGFjaXR5WzFdID4gMC41ID8gdV9mYWRlX2NoYW5nZSA6IC11X2ZhZGVfY2hhbmdlO1xuICAgIGZsb2F0IGludGVycG9sYXRlZF9mYWRlX29wYWNpdHkgPSBtYXgoMC4wLCBtaW4oMS4wLCBmYWRlX29wYWNpdHlbMF0gKyBmYWRlX2NoYW5nZSkpO1xuXG4gICAgdl9kYXRhMCA9IHZlYzIodGV4LngsIHRleC55KTtcbiAgICB2X2RhdGExID0gdmVjMyhnYW1tYV9zY2FsZSwgc2l6ZSwgaW50ZXJwb2xhdGVkX2ZhZGVfb3BhY2l0eSk7XG59XG4ifX0sdHI9LyNwcmFnbWEgbWFwYm94OiAoW1x3XSspIChbXHddKykgKFtcd10rKSAoW1x3XSspL2csZXI9ZnVuY3Rpb24odCl7dmFyIGU9UWVbdF0scj17fTtlLmZyYWdtZW50U291cmNlPWUuZnJhZ21lbnRTb3VyY2UucmVwbGFjZSh0cixmdW5jdGlvbih0LGUsbixpLGEpe3JldHVybiByW2FdPSEwLCJkZWZpbmUiPT09ZT8iXG4jaWZuZGVmIEhBU19VTklGT1JNX3VfIithKyJcbnZhcnlpbmcgIituKyIgIitpKyIgIithKyI7XG4jZWxzZVxudW5pZm9ybSAiK24rIiAiK2krIiB1XyIrYSsiO1xuI2VuZGlmXG4iOiJcbiNpZmRlZiBIQVNfVU5JRk9STV91XyIrYSsiXG4gICAgIituKyIgIitpKyIgIithKyIgPSB1XyIrYSsiO1xuI2VuZGlmXG4ifSksZS52ZXJ0ZXhTb3VyY2U9ZS52ZXJ0ZXhTb3VyY2UucmVwbGFjZSh0cixmdW5jdGlvbih0LGUsbixpLGEpe3ZhciBvPSJmbG9hdCI9PT1pPyJ2ZWMyIjoidmVjNCI7cmV0dXJuIHJbYV0/ImRlZmluZSI9PT1lPyJcbiNpZm5kZWYgSEFTX1VOSUZPUk1fdV8iK2ErIlxudW5pZm9ybSBsb3dwIGZsb2F0IGFfIithKyJfdDtcbmF0dHJpYnV0ZSAiK24rIiAiK28rIiBhXyIrYSsiO1xudmFyeWluZyAiK24rIiAiK2krIiAiK2ErIjtcbiNlbHNlXG51bmlmb3JtICIrbisiICIraSsiIHVfIithKyI7XG4jZW5kaWZcbiI6IlxuI2lmbmRlZiBIQVNfVU5JRk9STV91XyIrYSsiXG4gICAgIithKyIgPSB1bnBhY2tfbWl4XyIrbysiKGFfIithKyIsIGFfIithKyJfdCk7XG4jZWxzZVxuICAgICIrbisiICIraSsiICIrYSsiID0gdV8iK2ErIjtcbiNlbmRpZlxuIjoiZGVmaW5lIj09PWU/IlxuI2lmbmRlZiBIQVNfVU5JRk9STV91XyIrYSsiXG51bmlmb3JtIGxvd3AgZmxvYXQgYV8iK2ErIl90O1xuYXR0cmlidXRlICIrbisiICIrbysiIGFfIithKyI7XG4jZWxzZVxudW5pZm9ybSAiK24rIiAiK2krIiB1XyIrYSsiO1xuI2VuZGlmXG4iOiJcbiNpZm5kZWYgSEFTX1VOSUZPUk1fdV8iK2ErIlxuICAgICIrbisiICIraSsiICIrYSsiID0gdW5wYWNrX21peF8iK28rIihhXyIrYSsiLCBhXyIrYSsiX3QpO1xuI2Vsc2VcbiAgICAiK24rIiAiK2krIiAiK2ErIiA9IHVfIithKyI7XG4jZW5kaWZcbiJ9KX07Zm9yKHZhciByciBpbiBRZSllcihycik7dmFyIG5yPVFlLGlyPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXQuZ2w7dGhpcy5wcm9ncmFtPWkuY3JlYXRlUHJvZ3JhbSgpO3ZhciBvPXIuZGVmaW5lcygpLmNvbmNhdCgiI2RlZmluZSBERVZJQ0VfUElYRUxfUkFUSU8gIithLmRldmljZVBpeGVsUmF0aW8udG9GaXhlZCgxKSk7biYmby5wdXNoKCIjZGVmaW5lIE9WRVJEUkFXX0lOU1BFQ1RPUjsiKTt2YXIgcz1vLmNvbmNhdChuci5wcmVsdWRlLmZyYWdtZW50U291cmNlLGUuZnJhZ21lbnRTb3VyY2UpLmpvaW4oIlxuIiksbD1vLmNvbmNhdChuci5wcmVsdWRlLnZlcnRleFNvdXJjZSxlLnZlcnRleFNvdXJjZSkuam9pbigiXG4iKSxjPWkuY3JlYXRlU2hhZGVyKGkuRlJBR01FTlRfU0hBREVSKTtpLnNoYWRlclNvdXJjZShjLHMpLGkuY29tcGlsZVNoYWRlcihjKSxpLmF0dGFjaFNoYWRlcih0aGlzLnByb2dyYW0sYyk7dmFyIHU9aS5jcmVhdGVTaGFkZXIoaS5WRVJURVhfU0hBREVSKTtpLnNoYWRlclNvdXJjZSh1LGwpLGkuY29tcGlsZVNoYWRlcih1KSxpLmF0dGFjaFNoYWRlcih0aGlzLnByb2dyYW0sdSk7Zm9yKHZhciBoPXIubGF5b3V0QXR0cmlidXRlc3x8W10sZj0wO2Y8aC5sZW5ndGg7ZisrKWkuYmluZEF0dHJpYkxvY2F0aW9uKHRoaXMucHJvZ3JhbSxmLGhbZl0ubmFtZSk7aS5saW5rUHJvZ3JhbSh0aGlzLnByb2dyYW0pLHRoaXMubnVtQXR0cmlidXRlcz1pLmdldFByb2dyYW1QYXJhbWV0ZXIodGhpcy5wcm9ncmFtLGkuQUNUSVZFX0FUVFJJQlVURVMpLHRoaXMuYXR0cmlidXRlcz17fSx0aGlzLnVuaWZvcm1zPXt9O2Zvcih2YXIgcD0wO3A8dGhpcy5udW1BdHRyaWJ1dGVzO3ArKyl7dmFyIGQ9aS5nZXRBY3RpdmVBdHRyaWIodGhpcy5wcm9ncmFtLHApO2QmJih0aGlzLmF0dHJpYnV0ZXNbZC5uYW1lXT1pLmdldEF0dHJpYkxvY2F0aW9uKHRoaXMucHJvZ3JhbSxkLm5hbWUpKX1mb3IodmFyIGc9aS5nZXRQcm9ncmFtUGFyYW1ldGVyKHRoaXMucHJvZ3JhbSxpLkFDVElWRV9VTklGT1JNUyksbT0wO208ZzttKyspe3ZhciB2PWkuZ2V0QWN0aXZlVW5pZm9ybSh0aGlzLnByb2dyYW0sbSk7diYmKHRoaXMudW5pZm9ybXNbdi5uYW1lXT1pLmdldFVuaWZvcm1Mb2NhdGlvbih0aGlzLnByb2dyYW0sdi5uYW1lKSl9fTtmdW5jdGlvbiBhcihlLHIsbixpLGEpe2Zvcih2YXIgbz0wO288bi5sZW5ndGg7bysrKXt2YXIgcz1uW29dO2lmKGkuaXNMZXNzVGhhbihzLnRpbGVJRCkpYnJlYWs7aWYoci5rZXk9PT1zLnRpbGVJRC5rZXkpcmV0dXJuO2lmKHMudGlsZUlELmlzQ2hpbGRPZihyKSl7Zm9yKHZhciBsPXIuY2hpbGRyZW4oMS8wKSxjPTA7YzxsLmxlbmd0aDtjKyspYXIoZSxsW2NdLG4uc2xpY2UobyksaSxhKTtyZXR1cm59fXZhciB1PXIub3ZlcnNjYWxlZFotZS5vdmVyc2NhbGVkWixoPW5ldyB0LkNhbm9uaWNhbFRpbGVJRCh1LHIuY2Fub25pY2FsLngtKGUuY2Fub25pY2FsLng8PHUpLHIuY2Fub25pY2FsLnktKGUuY2Fub25pY2FsLnk8PHUpKTthW2gua2V5XT1hW2gua2V5XXx8aH1mdW5jdGlvbiBvcih0LGUscixuLGkpe3ZhciBhPXQuY29udGV4dCxvPWEuZ2wscz1pP3QudXNlUHJvZ3JhbSgiY29sbGlzaW9uQ2lyY2xlIik6dC51c2VQcm9ncmFtKCJjb2xsaXNpb25Cb3giKTthLnNldERlcHRoTW9kZShxdC5kaXNhYmxlZCksYS5zZXRTdGVuY2lsTW9kZShIdC5kaXNhYmxlZCksYS5zZXRDb2xvck1vZGUodC5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCkpO2Zvcih2YXIgbD0wO2w8bi5sZW5ndGg7bCsrKXt2YXIgYz1uW2xdLHU9ZS5nZXRUaWxlKGMpLGg9dS5nZXRCdWNrZXQocik7aWYoaCl7dmFyIGY9aT9oLmNvbGxpc2lvbkNpcmNsZTpoLmNvbGxpc2lvbkJveDtpZihmKXtvLnVuaWZvcm1NYXRyaXg0ZnYocy51bmlmb3Jtcy51X21hdHJpeCwhMSxjLnBvc01hdHJpeCksaXx8YS5saW5lV2lkdGguc2V0KDEpLG8udW5pZm9ybTFmKHMudW5pZm9ybXMudV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlLHQudHJhbnNmb3JtLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2UpO3ZhciBwPVRlKHUsMSx0LnRyYW5zZm9ybS56b29tKSxkPU1hdGgucG93KDIsdC50cmFuc2Zvcm0uem9vbS11LnRpbGVJRC5vdmVyc2NhbGVkWik7by51bmlmb3JtMWYocy51bmlmb3Jtcy51X3BpeGVsc190b190aWxlX3VuaXRzLHApLG8udW5pZm9ybTJmKHMudW5pZm9ybXMudV9leHRydWRlX3NjYWxlLHQudHJhbnNmb3JtLnBpeGVsc1RvR0xVbml0c1swXS8ocCpkKSx0LnRyYW5zZm9ybS5waXhlbHNUb0dMVW5pdHNbMV0vKHAqZCkpLG8udW5pZm9ybTFmKHMudW5pZm9ybXMudV9vdmVyc2NhbGVfZmFjdG9yLHUudGlsZUlELm92ZXJzY2FsZUZhY3RvcigpKSxzLmRyYXcoYSxpP28uVFJJQU5HTEVTOm8uTElORVMsci5pZCxmLmxheW91dFZlcnRleEJ1ZmZlcixmLmluZGV4QnVmZmVyLGYuc2VnbWVudHMsbnVsbCxmLmNvbGxpc2lvblZlcnRleEJ1ZmZlcixudWxsKX19fX1pci5wcm90b3R5cGUuZHJhdz1mdW5jdGlvbih0LGUscixuLGksYSxvLHMsbCl7Zm9yKHZhciBjLHU9dC5nbCxoPShjPXt9LGNbdS5MSU5FU109MixjW3UuVFJJQU5HTEVTXT0zLGMpW2VdLGY9MCxwPWEuZ2V0KCk7ZjxwLmxlbmd0aDtmKz0xKXt2YXIgZD1wW2ZdLGc9ZC52YW9zfHwoZC52YW9zPXt9KTsoZ1tyXXx8KGdbcl09bmV3IFEpKS5iaW5kKHQsdGhpcyxuLG8/by5nZXRQYWludFZlcnRleEJ1ZmZlcnMoKTpbXSxpLGQudmVydGV4T2Zmc2V0LHMsbCksdS5kcmF3RWxlbWVudHMoZSxkLnByaW1pdGl2ZUxlbmd0aCpoLHUuVU5TSUdORURfU0hPUlQsZC5wcmltaXRpdmVPZmZzZXQqaCoyKX19O3ZhciBzcj10Lm1hdDQuaWRlbnRpdHkobmV3IEZsb2F0MzJBcnJheSgxNikpLGxyPXQuZGVmYXVsdCQxOS5sYXlvdXQ7ZnVuY3Rpb24gY3IodCxlLHIsbixpLGEsbyxzLGwsYyl7dmFyIHUsaD10LmNvbnRleHQsZj1oLmdsLHA9dC50cmFuc2Zvcm0sZD0ibWFwIj09PXMsZz0ibWFwIj09PWwsbT1kJiYibGluZSI9PT1yLmxheW91dC5nZXQoInN5bWJvbC1wbGFjZW1lbnQiKSx2PWQmJiFnJiYhbSx5PWc7aC5zZXREZXB0aE1vZGUoeT90LmRlcHRoTW9kZUZvclN1YmxheWVyKDAscXQuUmVhZE9ubHkpOnF0LmRpc2FibGVkKTtmb3IodmFyIHg9MCxiPW47eDxiLmxlbmd0aDt4Kz0xKXt2YXIgXz1iW3hdLHc9ZS5nZXRUaWxlKF8pLGs9dy5nZXRCdWNrZXQocik7aWYoayl7dmFyIE09aT9rLnRleHQ6ay5pY29uO2lmKE0mJk0uc2VnbWVudHMuZ2V0KCkubGVuZ3RoKXt2YXIgQT1NLnByb2dyYW1Db25maWd1cmF0aW9ucy5nZXQoci5pZCksVD1pfHxrLnNkZkljb25zLFM9aT9rLnRleHRTaXplRGF0YTprLmljb25TaXplRGF0YTtpZih1fHwodT10LnVzZVByb2dyYW0oVD8ic3ltYm9sU0RGIjoic3ltYm9sSWNvbiIsQSksQS5zZXRVbmlmb3Jtcyh0LmNvbnRleHQsdSxyLnBhaW50LHt6b29tOnQudHJhbnNmb3JtLnpvb219KSx1cih1LHQscixpLHYsZyxTKSksaC5hY3RpdmVUZXh0dXJlLnNldChmLlRFWFRVUkUwKSxmLnVuaWZvcm0xaSh1LnVuaWZvcm1zLnVfdGV4dHVyZSwwKSxpKXcuZ2x5cGhBdGxhc1RleHR1cmUuYmluZChmLkxJTkVBUixmLkNMQU1QX1RPX0VER0UpLGYudW5pZm9ybTJmdih1LnVuaWZvcm1zLnVfdGV4c2l6ZSx3LmdseXBoQXRsYXNUZXh0dXJlLnNpemUpO2Vsc2V7dmFyIEU9MSE9PXIubGF5b3V0LmdldCgiaWNvbi1zaXplIikuY29uc3RhbnRPcigwKXx8ay5pY29uc05lZWRMaW5lYXIsQz1nfHwwIT09cC5waXRjaDt3Lmljb25BdGxhc1RleHR1cmUuYmluZChUfHx0Lm9wdGlvbnMucm90YXRpbmd8fHQub3B0aW9ucy56b29taW5nfHxFfHxDP2YuTElORUFSOmYuTkVBUkVTVCxmLkNMQU1QX1RPX0VER0UpLGYudW5pZm9ybTJmdih1LnVuaWZvcm1zLnVfdGV4c2l6ZSx3Lmljb25BdGxhc1RleHR1cmUuc2l6ZSl9Zi51bmlmb3JtTWF0cml4NGZ2KHUudW5pZm9ybXMudV9tYXRyaXgsITEsdC50cmFuc2xhdGVQb3NNYXRyaXgoXy5wb3NNYXRyaXgsdyxhLG8pKTt2YXIgTD1UZSh3LDEsdC50cmFuc2Zvcm0uem9vbSksej1oZShfLnBvc01hdHJpeCxnLGQsdC50cmFuc2Zvcm0sTCksUD1mZShfLnBvc01hdHJpeCxnLGQsdC50cmFuc2Zvcm0sTCk7Zi51bmlmb3JtTWF0cml4NGZ2KHUudW5pZm9ybXMudV9nbF9jb29yZF9tYXRyaXgsITEsdC50cmFuc2xhdGVQb3NNYXRyaXgoUCx3LGEsbywhMCkpLG0/KGYudW5pZm9ybU1hdHJpeDRmdih1LnVuaWZvcm1zLnVfbGFiZWxfcGxhbmVfbWF0cml4LCExLHNyKSxnZShrLF8ucG9zTWF0cml4LHQsaSx6LFAsZyxjKSk6Zi51bmlmb3JtTWF0cml4NGZ2KHUudW5pZm9ybXMudV9sYWJlbF9wbGFuZV9tYXRyaXgsITEseiksZi51bmlmb3JtMWYodS51bmlmb3Jtcy51X2ZhZGVfY2hhbmdlLHQub3B0aW9ucy5mYWRlRHVyYXRpb24/dC5zeW1ib2xGYWRlQ2hhbmdlOjEpLGhyKHUsQSx0LHIsdyxNLGksVCxnKX19fX1mdW5jdGlvbiB1cihlLHIsbixpLGEsbyxzKXt2YXIgbD1yLmNvbnRleHQuZ2wsYz1yLnRyYW5zZm9ybTtsLnVuaWZvcm0xaShlLnVuaWZvcm1zLnVfcGl0Y2hfd2l0aF9tYXAsbz8xOjApLGwudW5pZm9ybTFmKGUudW5pZm9ybXMudV9pc190ZXh0LGk/MTowKSxsLnVuaWZvcm0xZihlLnVuaWZvcm1zLnVfcGl0Y2gsYy5waXRjaC8zNjAqMipNYXRoLlBJKTt2YXIgdT0iY29uc3RhbnQiPT09cy5mdW5jdGlvblR5cGV8fCJzb3VyY2UiPT09cy5mdW5jdGlvblR5cGUsaD0iY29uc3RhbnQiPT09cy5mdW5jdGlvblR5cGV8fCJjYW1lcmEiPT09cy5mdW5jdGlvblR5cGU7bC51bmlmb3JtMWkoZS51bmlmb3Jtcy51X2lzX3NpemVfem9vbV9jb25zdGFudCx1PzE6MCksbC51bmlmb3JtMWkoZS51bmlmb3Jtcy51X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudCxoPzE6MCksbC51bmlmb3JtMWYoZS51bmlmb3Jtcy51X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UsYy5jYW1lcmFUb0NlbnRlckRpc3RhbmNlKTt2YXIgZj10LmV2YWx1YXRlU2l6ZUZvclpvb20ocyxjLnpvb20sbHIucHJvcGVydGllc1tpPyJ0ZXh0LXNpemUiOiJpY29uLXNpemUiXSk7dm9pZCAwIT09Zi51U2l6ZVQmJmwudW5pZm9ybTFmKGUudW5pZm9ybXMudV9zaXplX3QsZi51U2l6ZVQpLHZvaWQgMCE9PWYudVNpemUmJmwudW5pZm9ybTFmKGUudW5pZm9ybXMudV9zaXplLGYudVNpemUpLGwudW5pZm9ybTFmKGUudW5pZm9ybXMudV9hc3BlY3RfcmF0aW8sYy53aWR0aC9jLmhlaWdodCksbC51bmlmb3JtMWkoZS51bmlmb3Jtcy51X3JvdGF0ZV9zeW1ib2wsYT8xOjApfWZ1bmN0aW9uIGhyKHQsZSxyLG4saSxhLG8scyxsKXt2YXIgYz1yLmNvbnRleHQsdT1jLmdsLGg9ci50cmFuc2Zvcm07aWYocyl7dmFyIGY9MCE9PW4ucGFpbnQuZ2V0KG8/InRleHQtaGFsby13aWR0aCI6Imljb24taGFsby13aWR0aCIpLmNvbnN0YW50T3IoMSkscD1sP01hdGguY29zKGguX3BpdGNoKSpoLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2U6MTt1LnVuaWZvcm0xZih0LnVuaWZvcm1zLnVfZ2FtbWFfc2NhbGUscCksZiYmKHUudW5pZm9ybTFmKHQudW5pZm9ybXMudV9pc19oYWxvLDEpLGZyKGEsbixjLHQpKSx1LnVuaWZvcm0xZih0LnVuaWZvcm1zLnVfaXNfaGFsbywwKX1mcihhLG4sYyx0KX1mdW5jdGlvbiBmcih0LGUscixuKXtuLmRyYXcocixyLmdsLlRSSUFOR0xFUyxlLmlkLHQubGF5b3V0VmVydGV4QnVmZmVyLHQuaW5kZXhCdWZmZXIsdC5zZWdtZW50cyx0LnByb2dyYW1Db25maWd1cmF0aW9ucy5nZXQoZS5pZCksdC5keW5hbWljTGF5b3V0VmVydGV4QnVmZmVyLHQub3BhY2l0eVZlcnRleEJ1ZmZlcil9ZnVuY3Rpb24gcHIodCxlLHIsbixpLG8scyxsLGMpe3ZhciB1LGgsZixwLGQ9ZS5jb250ZXh0LGc9ZC5nbCxtPWkucGFpbnQuZ2V0KCJsaW5lLWRhc2hhcnJheSIpLHY9aS5wYWludC5nZXQoImxpbmUtcGF0dGVybiIpO2lmKGx8fGMpe3ZhciB5PTEvVGUociwxLGUudHJhbnNmb3JtLnRpbGVab29tKTtpZihtKXt1PWUubGluZUF0bGFzLmdldERhc2gobS5mcm9tLCJyb3VuZCI9PT1pLmxheW91dC5nZXQoImxpbmUtY2FwIikpLGg9ZS5saW5lQXRsYXMuZ2V0RGFzaChtLnRvLCJyb3VuZCI9PT1pLmxheW91dC5nZXQoImxpbmUtY2FwIikpO3ZhciB4PXUud2lkdGgqbS5mcm9tU2NhbGUsYj1oLndpZHRoKm0udG9TY2FsZTtnLnVuaWZvcm0yZih0LnVuaWZvcm1zLnVfcGF0dGVybnNjYWxlX2EseS94LC11LmhlaWdodC8yKSxnLnVuaWZvcm0yZih0LnVuaWZvcm1zLnVfcGF0dGVybnNjYWxlX2IseS9iLC1oLmhlaWdodC8yKSxnLnVuaWZvcm0xZih0LnVuaWZvcm1zLnVfc2RmZ2FtbWEsZS5saW5lQXRsYXMud2lkdGgvKDI1NipNYXRoLm1pbih4LGIpKmEuZGV2aWNlUGl4ZWxSYXRpbykvMil9ZWxzZSBpZih2KXtpZihmPWUuaW1hZ2VNYW5hZ2VyLmdldFBhdHRlcm4odi5mcm9tKSxwPWUuaW1hZ2VNYW5hZ2VyLmdldFBhdHRlcm4odi50byksIWZ8fCFwKXJldHVybjtnLnVuaWZvcm0yZih0LnVuaWZvcm1zLnVfcGF0dGVybl9zaXplX2EsZi5kaXNwbGF5U2l6ZVswXSp2LmZyb21TY2FsZS95LGYuZGlzcGxheVNpemVbMV0pLGcudW5pZm9ybTJmKHQudW5pZm9ybXMudV9wYXR0ZXJuX3NpemVfYixwLmRpc3BsYXlTaXplWzBdKnYudG9TY2FsZS95LHAuZGlzcGxheVNpemVbMV0pO3ZhciBfPWUuaW1hZ2VNYW5hZ2VyLmdldFBpeGVsU2l6ZSgpLHc9Xy53aWR0aCxrPV8uaGVpZ2h0O2cudW5pZm9ybTJmdih0LnVuaWZvcm1zLnVfdGV4c2l6ZSxbdyxrXSl9Zy51bmlmb3JtMmYodC51bmlmb3Jtcy51X2dsX3VuaXRzX3RvX3BpeGVscywxL2UudHJhbnNmb3JtLnBpeGVsc1RvR0xVbml0c1swXSwxL2UudHJhbnNmb3JtLnBpeGVsc1RvR0xVbml0c1sxXSl9bCYmKG0/KGcudW5pZm9ybTFpKHQudW5pZm9ybXMudV9pbWFnZSwwKSxkLmFjdGl2ZVRleHR1cmUuc2V0KGcuVEVYVFVSRTApLGUubGluZUF0bGFzLmJpbmQoZCksZy51bmlmb3JtMWYodC51bmlmb3Jtcy51X3RleF95X2EsdS55KSxnLnVuaWZvcm0xZih0LnVuaWZvcm1zLnVfdGV4X3lfYixoLnkpLGcudW5pZm9ybTFmKHQudW5pZm9ybXMudV9taXgsbS50KSk6diYmKGcudW5pZm9ybTFpKHQudW5pZm9ybXMudV9pbWFnZSwwKSxkLmFjdGl2ZVRleHR1cmUuc2V0KGcuVEVYVFVSRTApLGUuaW1hZ2VNYW5hZ2VyLmJpbmQoZCksZy51bmlmb3JtMmZ2KHQudW5pZm9ybXMudV9wYXR0ZXJuX3RsX2EsZi50bCksZy51bmlmb3JtMmZ2KHQudW5pZm9ybXMudV9wYXR0ZXJuX2JyX2EsZi5iciksZy51bmlmb3JtMmZ2KHQudW5pZm9ybXMudV9wYXR0ZXJuX3RsX2IscC50bCksZy51bmlmb3JtMmZ2KHQudW5pZm9ybXMudV9wYXR0ZXJuX2JyX2IscC5iciksZy51bmlmb3JtMWYodC51bmlmb3Jtcy51X2ZhZGUsdi50KSkpLGQuc2V0U3RlbmNpbE1vZGUoZS5zdGVuY2lsTW9kZUZvckNsaXBwaW5nKG8pKTt2YXIgTT1lLnRyYW5zbGF0ZVBvc01hdHJpeChvLnBvc01hdHJpeCxyLGkucGFpbnQuZ2V0KCJsaW5lLXRyYW5zbGF0ZSIpLGkucGFpbnQuZ2V0KCJsaW5lLXRyYW5zbGF0ZS1hbmNob3IiKSk7aWYoZy51bmlmb3JtTWF0cml4NGZ2KHQudW5pZm9ybXMudV9tYXRyaXgsITEsTSksZy51bmlmb3JtMWYodC51bmlmb3Jtcy51X3JhdGlvLDEvVGUociwxLGUudHJhbnNmb3JtLnpvb20pKSxpLnBhaW50LmdldCgibGluZS1ncmFkaWVudCIpKXtkLmFjdGl2ZVRleHR1cmUuc2V0KGcuVEVYVFVSRTApO3ZhciBBPWkuZ3JhZGllbnRUZXh0dXJlO2lmKCFpLmdyYWRpZW50KXJldHVybjtBfHwoQT1pLmdyYWRpZW50VGV4dHVyZT1uZXcgeihkLGkuZ3JhZGllbnQsZy5SR0JBKSksQS5iaW5kKGcuTElORUFSLGcuQ0xBTVBfVE9fRURHRSksZy51bmlmb3JtMWkodC51bmlmb3Jtcy51X2ltYWdlLDApfXQuZHJhdyhkLGcuVFJJQU5HTEVTLGkuaWQsbi5sYXlvdXRWZXJ0ZXhCdWZmZXIsbi5pbmRleEJ1ZmZlcixuLnNlZ21lbnRzLHMpfXZhciBkcj1mdW5jdGlvbih0LGUpe2lmKCF0KXJldHVybiExO3ZhciByPWUuaW1hZ2VNYW5hZ2VyLmdldFBhdHRlcm4odC5mcm9tKSxuPWUuaW1hZ2VNYW5hZ2VyLmdldFBhdHRlcm4odC50byk7cmV0dXJuIXJ8fCFufSxncj1mdW5jdGlvbih0LGUscil7dmFyIG49ZS5jb250ZXh0LGk9bi5nbCxhPWUuaW1hZ2VNYW5hZ2VyLmdldFBhdHRlcm4odC5mcm9tKSxvPWUuaW1hZ2VNYW5hZ2VyLmdldFBhdHRlcm4odC50byk7aS51bmlmb3JtMWkoci51bmlmb3Jtcy51X2ltYWdlLDApLGkudW5pZm9ybTJmdihyLnVuaWZvcm1zLnVfcGF0dGVybl90bF9hLGEudGwpLGkudW5pZm9ybTJmdihyLnVuaWZvcm1zLnVfcGF0dGVybl9icl9hLGEuYnIpLGkudW5pZm9ybTJmdihyLnVuaWZvcm1zLnVfcGF0dGVybl90bF9iLG8udGwpLGkudW5pZm9ybTJmdihyLnVuaWZvcm1zLnVfcGF0dGVybl9icl9iLG8uYnIpO3ZhciBzPWUuaW1hZ2VNYW5hZ2VyLmdldFBpeGVsU2l6ZSgpLGw9cy53aWR0aCxjPXMuaGVpZ2h0O2kudW5pZm9ybTJmdihyLnVuaWZvcm1zLnVfdGV4c2l6ZSxbbCxjXSksaS51bmlmb3JtMWYoci51bmlmb3Jtcy51X21peCx0LnQpLGkudW5pZm9ybTJmdihyLnVuaWZvcm1zLnVfcGF0dGVybl9zaXplX2EsYS5kaXNwbGF5U2l6ZSksaS51bmlmb3JtMmZ2KHIudW5pZm9ybXMudV9wYXR0ZXJuX3NpemVfYixvLmRpc3BsYXlTaXplKSxpLnVuaWZvcm0xZihyLnVuaWZvcm1zLnVfc2NhbGVfYSx0LmZyb21TY2FsZSksaS51bmlmb3JtMWYoci51bmlmb3Jtcy51X3NjYWxlX2IsdC50b1NjYWxlKSxuLmFjdGl2ZVRleHR1cmUuc2V0KGkuVEVYVFVSRTApLGUuaW1hZ2VNYW5hZ2VyLmJpbmQoZS5jb250ZXh0KX0sbXI9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWUuY29udGV4dC5nbDtuLnVuaWZvcm0xZihyLnVuaWZvcm1zLnVfdGlsZV91bml0c190b19waXhlbHMsMS9UZSh0LDEsZS50cmFuc2Zvcm0udGlsZVpvb20pKTt2YXIgaT1NYXRoLnBvdygyLHQudGlsZUlELm92ZXJzY2FsZWRaKSxhPXQudGlsZVNpemUqTWF0aC5wb3coMixlLnRyYW5zZm9ybS50aWxlWm9vbSkvaSxvPWEqKHQudGlsZUlELmNhbm9uaWNhbC54K3QudGlsZUlELndyYXAqaSkscz1hKnQudGlsZUlELmNhbm9uaWNhbC55O24udW5pZm9ybTJmKHIudW5pZm9ybXMudV9waXhlbF9jb29yZF91cHBlcixvPj4xNixzPj4xNiksbi51bmlmb3JtMmYoci51bmlmb3Jtcy51X3BpeGVsX2Nvb3JkX2xvd2VyLDY1NTM1Jm8sNjU1MzUmcyl9O2Z1bmN0aW9uIHZyKHQsZSxyLG4saSl7aWYoIWRyKHIucGFpbnQuZ2V0KCJmaWxsLXBhdHRlcm4iKSx0KSlmb3IodmFyIGE9ITAsbz0wLHM9bjtvPHMubGVuZ3RoO28rPTEpe3ZhciBsPXNbb10sYz1lLmdldFRpbGUobCksdT1jLmdldEJ1Y2tldChyKTt1JiYodC5jb250ZXh0LnNldFN0ZW5jaWxNb2RlKHQuc3RlbmNpbE1vZGVGb3JDbGlwcGluZyhsKSksaSh0LGUscixjLGwsdSxhKSxhPSExKX19ZnVuY3Rpb24geXIodCxlLHIsbixpLGEsbyl7dmFyIHM9dC5jb250ZXh0LmdsLGw9YS5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZ2V0KHIuaWQpO2JyKCJmaWxsIixyLnBhaW50LmdldCgiZmlsbC1wYXR0ZXJuIiksdCxsLHIsbixpLG8pLmRyYXcodC5jb250ZXh0LHMuVFJJQU5HTEVTLHIuaWQsYS5sYXlvdXRWZXJ0ZXhCdWZmZXIsYS5pbmRleEJ1ZmZlcixhLnNlZ21lbnRzLGwpfWZ1bmN0aW9uIHhyKHQsZSxyLG4saSxhLG8pe3ZhciBzPXQuY29udGV4dC5nbCxsPWEucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmdldChyLmlkKSxjPWJyKCJmaWxsT3V0bGluZSIsci5nZXRQYWludFByb3BlcnR5KCJmaWxsLW91dGxpbmUtY29sb3IiKT9udWxsOnIucGFpbnQuZ2V0KCJmaWxsLXBhdHRlcm4iKSx0LGwscixuLGksbyk7cy51bmlmb3JtMmYoYy51bmlmb3Jtcy51X3dvcmxkLHMuZHJhd2luZ0J1ZmZlcldpZHRoLHMuZHJhd2luZ0J1ZmZlckhlaWdodCksYy5kcmF3KHQuY29udGV4dCxzLkxJTkVTLHIuaWQsYS5sYXlvdXRWZXJ0ZXhCdWZmZXIsYS5pbmRleEJ1ZmZlcjIsYS5zZWdtZW50czIsbCl9ZnVuY3Rpb24gYnIodCxlLHIsbixpLGEsbyxzKXt2YXIgbCxjPXIuY29udGV4dC5wcm9ncmFtLmdldCgpO3JldHVybiBlPyhsPXIudXNlUHJvZ3JhbSh0KyJQYXR0ZXJuIixuKSwoc3x8bC5wcm9ncmFtIT09YykmJihuLnNldFVuaWZvcm1zKHIuY29udGV4dCxsLGkucGFpbnQse3pvb206ci50cmFuc2Zvcm0uem9vbX0pLGdyKGUscixsKSksbXIoYSxyLGwpKToobD1yLnVzZVByb2dyYW0odCxuKSwoc3x8bC5wcm9ncmFtIT09YykmJm4uc2V0VW5pZm9ybXMoci5jb250ZXh0LGwsaS5wYWludCx7em9vbTpyLnRyYW5zZm9ybS56b29tfSkpLHIuY29udGV4dC5nbC51bmlmb3JtTWF0cml4NGZ2KGwudW5pZm9ybXMudV9tYXRyaXgsITEsci50cmFuc2xhdGVQb3NNYXRyaXgoby5wb3NNYXRyaXgsYSxpLnBhaW50LmdldCgiZmlsbC10cmFuc2xhdGUiKSxpLnBhaW50LmdldCgiZmlsbC10cmFuc2xhdGUtYW5jaG9yIikpKSxsfXZhciBfcj10LmRlZmF1bHQkMjAubWF0Myx3cj10LmRlZmF1bHQkMjAubWF0NCxrcj10LmRlZmF1bHQkMjAudmVjMztmdW5jdGlvbiBNcih0LGUscixuLGksYSxvKXt2YXIgcz10LmNvbnRleHQsbD1zLmdsLGM9ci5wYWludC5nZXQoImZpbGwtZXh0cnVzaW9uLXBhdHRlcm4iKSx1PXQuY29udGV4dC5wcm9ncmFtLmdldCgpLGg9YS5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZ2V0KHIuaWQpLGY9dC51c2VQcm9ncmFtKGM/ImZpbGxFeHRydXNpb25QYXR0ZXJuIjoiZmlsbEV4dHJ1c2lvbiIsaCk7aWYoKG98fGYucHJvZ3JhbSE9PXUpJiZoLnNldFVuaWZvcm1zKHMsZixyLnBhaW50LHt6b29tOnQudHJhbnNmb3JtLnpvb219KSxjKXtpZihkcihjLHQpKXJldHVybjtncihjLHQsZiksbXIobix0LGYpLGwudW5pZm9ybTFmKGYudW5pZm9ybXMudV9oZWlnaHRfZmFjdG9yLC1NYXRoLnBvdygyLGkub3ZlcnNjYWxlZFopL24udGlsZVNpemUvOCl9dC5jb250ZXh0LmdsLnVuaWZvcm1NYXRyaXg0ZnYoZi51bmlmb3Jtcy51X21hdHJpeCwhMSx0LnRyYW5zbGF0ZVBvc01hdHJpeChpLnBvc01hdHJpeCxuLHIucGFpbnQuZ2V0KCJmaWxsLWV4dHJ1c2lvbi10cmFuc2xhdGUiKSxyLnBhaW50LmdldCgiZmlsbC1leHRydXNpb24tdHJhbnNsYXRlLWFuY2hvciIpKSksZnVuY3Rpb24odCxlKXt2YXIgcj1lLmNvbnRleHQuZ2wsbj1lLnN0eWxlLmxpZ2h0LGk9bi5wcm9wZXJ0aWVzLmdldCgicG9zaXRpb24iKSxhPVtpLngsaS55LGkuel0sbz1fci5jcmVhdGUoKTsidmlld3BvcnQiPT09bi5wcm9wZXJ0aWVzLmdldCgiYW5jaG9yIikmJl9yLmZyb21Sb3RhdGlvbihvLC1lLnRyYW5zZm9ybS5hbmdsZSksa3IudHJhbnNmb3JtTWF0MyhhLGEsbyk7dmFyIHM9bi5wcm9wZXJ0aWVzLmdldCgiY29sb3IiKTtyLnVuaWZvcm0zZnYodC51bmlmb3Jtcy51X2xpZ2h0cG9zLGEpLHIudW5pZm9ybTFmKHQudW5pZm9ybXMudV9saWdodGludGVuc2l0eSxuLnByb3BlcnRpZXMuZ2V0KCJpbnRlbnNpdHkiKSksci51bmlmb3JtM2YodC51bmlmb3Jtcy51X2xpZ2h0Y29sb3Iscy5yLHMuZyxzLmIpfShmLHQpLGYuZHJhdyhzLGwuVFJJQU5HTEVTLHIuaWQsYS5sYXlvdXRWZXJ0ZXhCdWZmZXIsYS5pbmRleEJ1ZmZlcixhLnNlZ21lbnRzLGgpfWZ1bmN0aW9uIEFyKGUscixuKXt2YXIgaT1lLmNvbnRleHQsYT1pLmdsLG89ci5mYm87aWYobyl7dmFyIHM9ZS51c2VQcm9ncmFtKCJoaWxsc2hhZGUiKSxsPWUudHJhbnNmb3JtLmNhbGN1bGF0ZVBvc01hdHJpeChyLnRpbGVJRC50b1Vud3JhcHBlZCgpLCEwKTshZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIucGFpbnQuZ2V0KCJoaWxsc2hhZGUtaWxsdW1pbmF0aW9uLWRpcmVjdGlvbiIpKihNYXRoLlBJLzE4MCk7InZpZXdwb3J0Ij09PXIucGFpbnQuZ2V0KCJoaWxsc2hhZGUtaWxsdW1pbmF0aW9uLWFuY2hvciIpJiYobi09ZS50cmFuc2Zvcm0uYW5nbGUpLGUuY29udGV4dC5nbC51bmlmb3JtMmYodC51bmlmb3Jtcy51X2xpZ2h0LHIucGFpbnQuZ2V0KCJoaWxsc2hhZGUtZXhhZ2dlcmF0aW9uIiksbil9KHMsZSxuKTt2YXIgYz1mdW5jdGlvbihlLHIpe3ZhciBuPXIudG9Db29yZGluYXRlKCksaT1uZXcgdC5kZWZhdWx0JDE3KG4uY29sdW1uLG4ucm93KzEsbi56b29tKTtyZXR1cm5bZS50cmFuc2Zvcm0uY29vcmRpbmF0ZUxvY2F0aW9uKG4pLmxhdCxlLnRyYW5zZm9ybS5jb29yZGluYXRlTG9jYXRpb24oaSkubGF0XX0oZSxyLnRpbGVJRCk7aS5hY3RpdmVUZXh0dXJlLnNldChhLlRFWFRVUkUwKSxhLmJpbmRUZXh0dXJlKGEuVEVYVFVSRV8yRCxvLmNvbG9yQXR0YWNobWVudC5nZXQoKSksYS51bmlmb3JtTWF0cml4NGZ2KHMudW5pZm9ybXMudV9tYXRyaXgsITEsbCksYS51bmlmb3JtMmZ2KHMudW5pZm9ybXMudV9sYXRyYW5nZSxjKSxhLnVuaWZvcm0xaShzLnVuaWZvcm1zLnVfaW1hZ2UsMCk7dmFyIHU9bi5wYWludC5nZXQoImhpbGxzaGFkZS1zaGFkb3ctY29sb3IiKTthLnVuaWZvcm00ZihzLnVuaWZvcm1zLnVfc2hhZG93LHUucix1LmcsdS5iLHUuYSk7dmFyIGg9bi5wYWludC5nZXQoImhpbGxzaGFkZS1oaWdobGlnaHQtY29sb3IiKTthLnVuaWZvcm00ZihzLnVuaWZvcm1zLnVfaGlnaGxpZ2h0LGgucixoLmcsaC5iLGguYSk7dmFyIGY9bi5wYWludC5nZXQoImhpbGxzaGFkZS1hY2NlbnQtY29sb3IiKTtpZihhLnVuaWZvcm00ZihzLnVuaWZvcm1zLnVfYWNjZW50LGYucixmLmcsZi5iLGYuYSksci5tYXNrZWRCb3VuZHNCdWZmZXImJnIubWFza2VkSW5kZXhCdWZmZXImJnIuc2VnbWVudHMpcy5kcmF3KGksYS5UUklBTkdMRVMsbi5pZCxyLm1hc2tlZEJvdW5kc0J1ZmZlcixyLm1hc2tlZEluZGV4QnVmZmVyLHIuc2VnbWVudHMpO2Vsc2V7dmFyIHA9ZS5yYXN0ZXJCb3VuZHNCdWZmZXI7ZS5yYXN0ZXJCb3VuZHNWQU8uYmluZChpLHMscCxbXSksYS5kcmF3QXJyYXlzKGEuVFJJQU5HTEVfU1RSSVAsMCxwLmxlbmd0aCl9fX1mdW5jdGlvbiBUcihlLHIsbil7dmFyIGk9ZS5jb250ZXh0LGE9aS5nbDtpZihyLmRlbSYmci5kZW0ubGV2ZWwpe3ZhciBvPXIuZGVtLmxldmVsLmRpbSxzPXIuZGVtLmdldFBpeGVscygpO2lmKGkuYWN0aXZlVGV4dHVyZS5zZXQoYS5URVhUVVJFMSksaS5waXhlbFN0b3JlVW5wYWNrUHJlbXVsdGlwbHlBbHBoYS5zZXQoITEpLHIuZGVtVGV4dHVyZT1yLmRlbVRleHR1cmV8fGUuZ2V0VGlsZVRleHR1cmUoci50aWxlU2l6ZSksci5kZW1UZXh0dXJlKXt2YXIgbD1yLmRlbVRleHR1cmU7bC51cGRhdGUocyx7cHJlbXVsdGlwbHk6ITF9KSxsLmJpbmQoYS5ORUFSRVNULGEuQ0xBTVBfVE9fRURHRSl9ZWxzZSByLmRlbVRleHR1cmU9bmV3IHooaSxzLGEuUkdCQSx7cHJlbXVsdGlwbHk6ITF9KSxyLmRlbVRleHR1cmUuYmluZChhLk5FQVJFU1QsYS5DTEFNUF9UT19FREdFKTtpLmFjdGl2ZVRleHR1cmUuc2V0KGEuVEVYVFVSRTApO3ZhciBjPXIuZmJvO2lmKCFjKXt2YXIgdT1uZXcgeihpLHt3aWR0aDpvLGhlaWdodDpvLGRhdGE6bnVsbH0sYS5SR0JBKTt1LmJpbmQoYS5MSU5FQVIsYS5DTEFNUF9UT19FREdFKSwoYz1yLmZibz1pLmNyZWF0ZUZyYW1lYnVmZmVyKG8sbykpLmNvbG9yQXR0YWNobWVudC5zZXQodS50ZXh0dXJlKX1pLmJpbmRGcmFtZWJ1ZmZlci5zZXQoYy5mcmFtZWJ1ZmZlciksaS52aWV3cG9ydC5zZXQoWzAsMCxvLG9dKTt2YXIgaD10Lm1hdDQuY3JlYXRlKCk7dC5tYXQ0Lm9ydGhvKGgsMCx0LmRlZmF1bHQkOCwtdC5kZWZhdWx0JDgsMCwwLDEpLHQubWF0NC50cmFuc2xhdGUoaCxoLFswLC10LmRlZmF1bHQkOCwwXSk7dmFyIGY9ZS51c2VQcm9ncmFtKCJoaWxsc2hhZGVQcmVwYXJlIik7YS51bmlmb3JtTWF0cml4NGZ2KGYudW5pZm9ybXMudV9tYXRyaXgsITEsaCksYS51bmlmb3JtMWYoZi51bmlmb3Jtcy51X3pvb20sci50aWxlSUQub3ZlcnNjYWxlZFopLGEudW5pZm9ybTJmdihmLnVuaWZvcm1zLnVfZGltZW5zaW9uLFsyKm8sMipvXSksYS51bmlmb3JtMWkoZi51bmlmb3Jtcy51X2ltYWdlLDEpLGEudW5pZm9ybTFmKGYudW5pZm9ybXMudV9tYXh6b29tLG4pO3ZhciBwPWUucmFzdGVyQm91bmRzQnVmZmVyO2UucmFzdGVyQm91bmRzVkFPLmJpbmQoaSxmLHAsW10pLGEuZHJhd0FycmF5cyhhLlRSSUFOR0xFX1NUUklQLDAscC5sZW5ndGgpLHIubmVlZHNIaWxsc2hhZGVQcmVwYXJlPSExfX1mdW5jdGlvbiBTcihlLHIsbixpLG8pe3ZhciBzPWkucGFpbnQuZ2V0KCJyYXN0ZXItZmFkZS1kdXJhdGlvbiIpO2lmKHM+MCl7dmFyIGw9YS5ub3coKSxjPShsLWUudGltZUFkZGVkKS9zLHU9cj8obC1yLnRpbWVBZGRlZCkvczotMSxoPW4uZ2V0U291cmNlKCksZj1vLmNvdmVyaW5nWm9vbUxldmVsKHt0aWxlU2l6ZTpoLnRpbGVTaXplLHJvdW5kWm9vbTpoLnJvdW5kWm9vbX0pLHA9IXJ8fE1hdGguYWJzKHIudGlsZUlELm92ZXJzY2FsZWRaLWYpPk1hdGguYWJzKGUudGlsZUlELm92ZXJzY2FsZWRaLWYpLGQ9cCYmZS5yZWZyZXNoZWRVcG9uRXhwaXJhdGlvbj8xOnQuY2xhbXAocD9jOjEtdSwwLDEpO3JldHVybiBlLnJlZnJlc2hlZFVwb25FeHBpcmF0aW9uJiZjPj0xJiYoZS5yZWZyZXNoZWRVcG9uRXhwaXJhdGlvbj0hMSkscj97b3BhY2l0eToxLG1peDoxLWR9OntvcGFjaXR5OmQsbWl4OjB9fXJldHVybntvcGFjaXR5OjEsbWl4OjB9fWZ1bmN0aW9uIEVyKGUscixuKXt2YXIgaT1lLmNvbnRleHQsbz1pLmdsO2kubGluZVdpZHRoLnNldCgxKmEuZGV2aWNlUGl4ZWxSYXRpbyk7dmFyIHM9bi5wb3NNYXRyaXgsbD1lLnVzZVByb2dyYW0oImRlYnVnIik7aS5zZXREZXB0aE1vZGUocXQuZGlzYWJsZWQpLGkuc2V0U3RlbmNpbE1vZGUoSHQuZGlzYWJsZWQpLGkuc2V0Q29sb3JNb2RlKGUuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpKSxvLnVuaWZvcm1NYXRyaXg0ZnYobC51bmlmb3Jtcy51X21hdHJpeCwhMSxzKSxvLnVuaWZvcm00ZihsLnVuaWZvcm1zLnVfY29sb3IsMSwwLDAsMSksZS5kZWJ1Z1ZBTy5iaW5kKGksbCxlLmRlYnVnQnVmZmVyLFtdKSxvLmRyYXdBcnJheXMoby5MSU5FX1NUUklQLDAsZS5kZWJ1Z0J1ZmZlci5sZW5ndGgpO2Zvcih2YXIgYz1mdW5jdGlvbih0LGUscixuKXtuPW58fDE7dmFyIGksYSxvLHMsbCxjLHUsaCxmPVtdO2ZvcihpPTAsYT10Lmxlbmd0aDtpPGE7aSsrKWlmKGw9Q3JbdFtpXV0pe2ZvcihoPW51bGwsbz0wLHM9bFsxXS5sZW5ndGg7bzxzO28rPTIpLTE9PT1sWzFdW29dJiYtMT09PWxbMV1bbysxXT9oPW51bGw6KGM9ZStsWzFdW29dKm4sdT0yMDAtbFsxXVtvKzFdKm4saCYmZi5wdXNoKGgueCxoLnksYyx1KSxoPXt4OmMseTp1fSk7ZSs9bFswXSpufXJldHVybiBmfShuLnRvU3RyaW5nKCksNTAsMCw1KSx1PW5ldyB0LlBvc0FycmF5LGg9MDtoPGMubGVuZ3RoO2grPTIpdS5lbXBsYWNlQmFjayhjW2hdLGNbaCsxXSk7dmFyIGY9aS5jcmVhdGVWZXJ0ZXhCdWZmZXIodSxLZS5tZW1iZXJzKTsobmV3IFEpLmJpbmQoaSxsLGYsW10pLG8udW5pZm9ybTRmKGwudW5pZm9ybXMudV9jb2xvciwxLDEsMSwxKTtmb3IodmFyIHA9ci5nZXRUaWxlKG4pLnRpbGVTaXplLGQ9dC5kZWZhdWx0JDgvKE1hdGgucG93KDIsZS50cmFuc2Zvcm0uem9vbS1uLm92ZXJzY2FsZWRaKSpwKSxnPVtbLTEsLTFdLFstMSwxXSxbMSwtMV0sWzEsMV1dLG09MDttPGcubGVuZ3RoO20rKyl7dmFyIHY9Z1ttXTtvLnVuaWZvcm1NYXRyaXg0ZnYobC51bmlmb3Jtcy51X21hdHJpeCwhMSx0Lm1hdDQudHJhbnNsYXRlKFtdLHMsW2QqdlswXSxkKnZbMV0sMF0pKSxvLmRyYXdBcnJheXMoby5MSU5FUywwLGYubGVuZ3RoKX1vLnVuaWZvcm00ZihsLnVuaWZvcm1zLnVfY29sb3IsMCwwLDAsMSksby51bmlmb3JtTWF0cml4NGZ2KGwudW5pZm9ybXMudV9tYXRyaXgsITEscyksby5kcmF3QXJyYXlzKG8uTElORVMsMCxmLmxlbmd0aCl9dmFyIENyPXsiICI6WzE2LFtdXSwiISI6WzEwLFs1LDIxLDUsNywtMSwtMSw1LDIsNCwxLDUsMCw2LDEsNSwyXV0sJyInOlsxNixbNCwyMSw0LDE0LC0xLC0xLDEyLDIxLDEyLDE0XV0sIiMiOlsyMSxbMTEsMjUsNCwtNywtMSwtMSwxNywyNSwxMCwtNywtMSwtMSw0LDEyLDE4LDEyLC0xLC0xLDMsNiwxNyw2XV0sJDpbMjAsWzgsMjUsOCwtNCwtMSwtMSwxMiwyNSwxMiwtNCwtMSwtMSwxNywxOCwxNSwyMCwxMiwyMSw4LDIxLDUsMjAsMywxOCwzLDE2LDQsMTQsNSwxMyw3LDEyLDEzLDEwLDE1LDksMTYsOCwxNyw2LDE3LDMsMTUsMSwxMiwwLDgsMCw1LDEsMywzXV0sIiUiOlsyNCxbMjEsMjEsMywwLC0xLC0xLDgsMjEsMTAsMTksMTAsMTcsOSwxNSw3LDE0LDUsMTQsMywxNiwzLDE4LDQsMjAsNiwyMSw4LDIxLDEwLDIwLDEzLDE5LDE2LDE5LDE5LDIwLDIxLDIxLC0xLC0xLDE3LDcsMTUsNiwxNCw0LDE0LDIsMTYsMCwxOCwwLDIwLDEsMjEsMywyMSw1LDE5LDcsMTcsN11dLCImIjpbMjYsWzIzLDEyLDIzLDEzLDIyLDE0LDIxLDE0LDIwLDEzLDE5LDExLDE3LDYsMTUsMywxMywxLDExLDAsNywwLDUsMSw0LDIsMyw0LDMsNiw0LDgsNSw5LDEyLDEzLDEzLDE0LDE0LDE2LDE0LDE4LDEzLDIwLDExLDIxLDksMjAsOCwxOCw4LDE2LDksMTMsMTEsMTAsMTYsMywxOCwxLDIwLDAsMjIsMCwyMywxLDIzLDJdXSwiJyI6WzEwLFs1LDE5LDQsMjAsNSwyMSw2LDIwLDYsMTgsNSwxNiw0LDE1XV0sIigiOlsxNCxbMTEsMjUsOSwyMyw3LDIwLDUsMTYsNCwxMSw0LDcsNSwyLDcsLTIsOSwtNSwxMSwtN11dLCIpIjpbMTQsWzMsMjUsNSwyMyw3LDIwLDksMTYsMTAsMTEsMTAsNyw5LDIsNywtMiw1LC01LDMsLTddXSwiKiI6WzE2LFs4LDIxLDgsOSwtMSwtMSwzLDE4LDEzLDEyLC0xLC0xLDEzLDE4LDMsMTJdXSwiKyI6WzI2LFsxMywxOCwxMywwLC0xLC0xLDQsOSwyMiw5XV0sIiwiOlsxMCxbNiwxLDUsMCw0LDEsNSwyLDYsMSw2LC0xLDUsLTMsNCwtNF1dLCItIjpbMjYsWzQsOSwyMiw5XV0sIi4iOlsxMCxbNSwyLDQsMSw1LDAsNiwxLDUsMl1dLCIvIjpbMjIsWzIwLDI1LDIsLTddXSwwOlsyMCxbOSwyMSw2LDIwLDQsMTcsMywxMiwzLDksNCw0LDYsMSw5LDAsMTEsMCwxNCwxLDE2LDQsMTcsOSwxNywxMiwxNiwxNywxNCwyMCwxMSwyMSw5LDIxXV0sMTpbMjAsWzYsMTcsOCwxOCwxMSwyMSwxMSwwXV0sMjpbMjAsWzQsMTYsNCwxNyw1LDE5LDYsMjAsOCwyMSwxMiwyMSwxNCwyMCwxNSwxOSwxNiwxNywxNiwxNSwxNSwxMywxMywxMCwzLDAsMTcsMF1dLDM6WzIwLFs1LDIxLDE2LDIxLDEwLDEzLDEzLDEzLDE1LDEyLDE2LDExLDE3LDgsMTcsNiwxNiwzLDE0LDEsMTEsMCw4LDAsNSwxLDQsMiwzLDRdXSw0OlsyMCxbMTMsMjEsMyw3LDE4LDcsLTEsLTEsMTMsMjEsMTMsMF1dLDU6WzIwLFsxNSwyMSw1LDIxLDQsMTIsNSwxMyw4LDE0LDExLDE0LDE0LDEzLDE2LDExLDE3LDgsMTcsNiwxNiwzLDE0LDEsMTEsMCw4LDAsNSwxLDQsMiwzLDRdXSw2OlsyMCxbMTYsMTgsMTUsMjAsMTIsMjEsMTAsMjEsNywyMCw1LDE3LDQsMTIsNCw3LDUsMyw3LDEsMTAsMCwxMSwwLDE0LDEsMTYsMywxNyw2LDE3LDcsMTYsMTAsMTQsMTIsMTEsMTMsMTAsMTMsNywxMiw1LDEwLDQsN11dLDc6WzIwLFsxNywyMSw3LDAsLTEsLTEsMywyMSwxNywyMV1dLDg6WzIwLFs4LDIxLDUsMjAsNCwxOCw0LDE2LDUsMTQsNywxMywxMSwxMiwxNCwxMSwxNiw5LDE3LDcsMTcsNCwxNiwyLDE1LDEsMTIsMCw4LDAsNSwxLDQsMiwzLDQsMyw3LDQsOSw2LDExLDksMTIsMTMsMTMsMTUsMTQsMTYsMTYsMTYsMTgsMTUsMjAsMTIsMjEsOCwyMV1dLDk6WzIwLFsxNiwxNCwxNSwxMSwxMyw5LDEwLDgsOSw4LDYsOSw0LDExLDMsMTQsMywxNSw0LDE4LDYsMjAsOSwyMSwxMCwyMSwxMywyMCwxNSwxOCwxNiwxNCwxNiw5LDE1LDQsMTMsMSwxMCwwLDgsMCw1LDEsNCwzXV0sIjoiOlsxMCxbNSwxNCw0LDEzLDUsMTIsNiwxMyw1LDE0LC0xLC0xLDUsMiw0LDEsNSwwLDYsMSw1LDJdXSwiOyI6WzEwLFs1LDE0LDQsMTMsNSwxMiw2LDEzLDUsMTQsLTEsLTEsNiwxLDUsMCw0LDEsNSwyLDYsMSw2LC0xLDUsLTMsNCwtNF1dLCI8IjpbMjQsWzIwLDE4LDQsOSwyMCwwXV0sIj0iOlsyNixbNCwxMiwyMiwxMiwtMSwtMSw0LDYsMjIsNl1dLCI+IjpbMjQsWzQsMTgsMjAsOSw0LDBdXSwiPyI6WzE4LFszLDE2LDMsMTcsNCwxOSw1LDIwLDcsMjEsMTEsMjEsMTMsMjAsMTQsMTksMTUsMTcsMTUsMTUsMTQsMTMsMTMsMTIsOSwxMCw5LDcsLTEsLTEsOSwyLDgsMSw5LDAsMTAsMSw5LDJdXSwiQCI6WzI3LFsxOCwxMywxNywxNSwxNSwxNiwxMiwxNiwxMCwxNSw5LDE0LDgsMTEsOCw4LDksNiwxMSw1LDE0LDUsMTYsNiwxNyw4LC0xLC0xLDEyLDE2LDEwLDE0LDksMTEsOSw4LDEwLDYsMTEsNSwtMSwtMSwxOCwxNiwxNyw4LDE3LDYsMTksNSwyMSw1LDIzLDcsMjQsMTAsMjQsMTIsMjMsMTUsMjIsMTcsMjAsMTksMTgsMjAsMTUsMjEsMTIsMjEsOSwyMCw3LDE5LDUsMTcsNCwxNSwzLDEyLDMsOSw0LDYsNSw0LDcsMiw5LDEsMTIsMCwxNSwwLDE4LDEsMjAsMiwyMSwzLC0xLC0xLDE5LDE2LDE4LDgsMTgsNiwxOSw1XV0sQTpbMTgsWzksMjEsMSwwLC0xLC0xLDksMjEsMTcsMCwtMSwtMSw0LDcsMTQsN11dLEI6WzIxLFs0LDIxLDQsMCwtMSwtMSw0LDIxLDEzLDIxLDE2LDIwLDE3LDE5LDE4LDE3LDE4LDE1LDE3LDEzLDE2LDEyLDEzLDExLC0xLC0xLDQsMTEsMTMsMTEsMTYsMTAsMTcsOSwxOCw3LDE4LDQsMTcsMiwxNiwxLDEzLDAsNCwwXV0sQzpbMjEsWzE4LDE2LDE3LDE4LDE1LDIwLDEzLDIxLDksMjEsNywyMCw1LDE4LDQsMTYsMywxMywzLDgsNCw1LDUsMyw3LDEsOSwwLDEzLDAsMTUsMSwxNywzLDE4LDVdXSxEOlsyMSxbNCwyMSw0LDAsLTEsLTEsNCwyMSwxMSwyMSwxNCwyMCwxNiwxOCwxNywxNiwxOCwxMywxOCw4LDE3LDUsMTYsMywxNCwxLDExLDAsNCwwXV0sRTpbMTksWzQsMjEsNCwwLC0xLC0xLDQsMjEsMTcsMjEsLTEsLTEsNCwxMSwxMiwxMSwtMSwtMSw0LDAsMTcsMF1dLEY6WzE4LFs0LDIxLDQsMCwtMSwtMSw0LDIxLDE3LDIxLC0xLC0xLDQsMTEsMTIsMTFdXSxHOlsyMSxbMTgsMTYsMTcsMTgsMTUsMjAsMTMsMjEsOSwyMSw3LDIwLDUsMTgsNCwxNiwzLDEzLDMsOCw0LDUsNSwzLDcsMSw5LDAsMTMsMCwxNSwxLDE3LDMsMTgsNSwxOCw4LC0xLC0xLDEzLDgsMTgsOF1dLEg6WzIyLFs0LDIxLDQsMCwtMSwtMSwxOCwyMSwxOCwwLC0xLC0xLDQsMTEsMTgsMTFdXSxJOls4LFs0LDIxLDQsMF1dLEo6WzE2LFsxMiwyMSwxMiw1LDExLDIsMTAsMSw4LDAsNiwwLDQsMSwzLDIsMiw1LDIsN11dLEs6WzIxLFs0LDIxLDQsMCwtMSwtMSwxOCwyMSw0LDcsLTEsLTEsOSwxMiwxOCwwXV0sTDpbMTcsWzQsMjEsNCwwLC0xLC0xLDQsMCwxNiwwXV0sTTpbMjQsWzQsMjEsNCwwLC0xLC0xLDQsMjEsMTIsMCwtMSwtMSwyMCwyMSwxMiwwLC0xLC0xLDIwLDIxLDIwLDBdXSxOOlsyMixbNCwyMSw0LDAsLTEsLTEsNCwyMSwxOCwwLC0xLC0xLDE4LDIxLDE4LDBdXSxPOlsyMixbOSwyMSw3LDIwLDUsMTgsNCwxNiwzLDEzLDMsOCw0LDUsNSwzLDcsMSw5LDAsMTMsMCwxNSwxLDE3LDMsMTgsNSwxOSw4LDE5LDEzLDE4LDE2LDE3LDE4LDE1LDIwLDEzLDIxLDksMjFdXSxQOlsyMSxbNCwyMSw0LDAsLTEsLTEsNCwyMSwxMywyMSwxNiwyMCwxNywxOSwxOCwxNywxOCwxNCwxNywxMiwxNiwxMSwxMywxMCw0LDEwXV0sUTpbMjIsWzksMjEsNywyMCw1LDE4LDQsMTYsMywxMywzLDgsNCw1LDUsMyw3LDEsOSwwLDEzLDAsMTUsMSwxNywzLDE4LDUsMTksOCwxOSwxMywxOCwxNiwxNywxOCwxNSwyMCwxMywyMSw5LDIxLC0xLC0xLDEyLDQsMTgsLTJdXSxSOlsyMSxbNCwyMSw0LDAsLTEsLTEsNCwyMSwxMywyMSwxNiwyMCwxNywxOSwxOCwxNywxOCwxNSwxNywxMywxNiwxMiwxMywxMSw0LDExLC0xLC0xLDExLDExLDE4LDBdXSxTOlsyMCxbMTcsMTgsMTUsMjAsMTIsMjEsOCwyMSw1LDIwLDMsMTgsMywxNiw0LDE0LDUsMTMsNywxMiwxMywxMCwxNSw5LDE2LDgsMTcsNiwxNywzLDE1LDEsMTIsMCw4LDAsNSwxLDMsM11dLFQ6WzE2LFs4LDIxLDgsMCwtMSwtMSwxLDIxLDE1LDIxXV0sVTpbMjIsWzQsMjEsNCw2LDUsMyw3LDEsMTAsMCwxMiwwLDE1LDEsMTcsMywxOCw2LDE4LDIxXV0sVjpbMTgsWzEsMjEsOSwwLC0xLC0xLDE3LDIxLDksMF1dLFc6WzI0LFsyLDIxLDcsMCwtMSwtMSwxMiwyMSw3LDAsLTEsLTEsMTIsMjEsMTcsMCwtMSwtMSwyMiwyMSwxNywwXV0sWDpbMjAsWzMsMjEsMTcsMCwtMSwtMSwxNywyMSwzLDBdXSxZOlsxOCxbMSwyMSw5LDExLDksMCwtMSwtMSwxNywyMSw5LDExXV0sWjpbMjAsWzE3LDIxLDMsMCwtMSwtMSwzLDIxLDE3LDIxLC0xLC0xLDMsMCwxNywwXV0sIlsiOlsxNCxbNCwyNSw0LC03LC0xLC0xLDUsMjUsNSwtNywtMSwtMSw0LDI1LDExLDI1LC0xLC0xLDQsLTcsMTEsLTddXSwiXFwiOlsxNCxbMCwyMSwxNCwtM11dLCJdIjpbMTQsWzksMjUsOSwtNywtMSwtMSwxMCwyNSwxMCwtNywtMSwtMSwzLDI1LDEwLDI1LC0xLC0xLDMsLTcsMTAsLTddXSwiXiI6WzE2LFs2LDE1LDgsMTgsMTAsMTUsLTEsLTEsMywxMiw4LDE3LDEzLDEyLC0xLC0xLDgsMTcsOCwwXV0sXzpbMTYsWzAsLTIsMTYsLTJdXSwiYCI6WzEwLFs2LDIxLDUsMjAsNCwxOCw0LDE2LDUsMTUsNiwxNiw1LDE3XV0sYTpbMTksWzE1LDE0LDE1LDAsLTEsLTEsMTUsMTEsMTMsMTMsMTEsMTQsOCwxNCw2LDEzLDQsMTEsMyw4LDMsNiw0LDMsNiwxLDgsMCwxMSwwLDEzLDEsMTUsM11dLGI6WzE5LFs0LDIxLDQsMCwtMSwtMSw0LDExLDYsMTMsOCwxNCwxMSwxNCwxMywxMywxNSwxMSwxNiw4LDE2LDYsMTUsMywxMywxLDExLDAsOCwwLDYsMSw0LDNdXSxjOlsxOCxbMTUsMTEsMTMsMTMsMTEsMTQsOCwxNCw2LDEzLDQsMTEsMyw4LDMsNiw0LDMsNiwxLDgsMCwxMSwwLDEzLDEsMTUsM11dLGQ6WzE5LFsxNSwyMSwxNSwwLC0xLC0xLDE1LDExLDEzLDEzLDExLDE0LDgsMTQsNiwxMyw0LDExLDMsOCwzLDYsNCwzLDYsMSw4LDAsMTEsMCwxMywxLDE1LDNdXSxlOlsxOCxbMyw4LDE1LDgsMTUsMTAsMTQsMTIsMTMsMTMsMTEsMTQsOCwxNCw2LDEzLDQsMTEsMyw4LDMsNiw0LDMsNiwxLDgsMCwxMSwwLDEzLDEsMTUsM11dLGY6WzEyLFsxMCwyMSw4LDIxLDYsMjAsNSwxNyw1LDAsLTEsLTEsMiwxNCw5LDE0XV0sZzpbMTksWzE1LDE0LDE1LC0yLDE0LC01LDEzLC02LDExLC03LDgsLTcsNiwtNiwtMSwtMSwxNSwxMSwxMywxMywxMSwxNCw4LDE0LDYsMTMsNCwxMSwzLDgsMyw2LDQsMyw2LDEsOCwwLDExLDAsMTMsMSwxNSwzXV0saDpbMTksWzQsMjEsNCwwLC0xLC0xLDQsMTAsNywxMyw5LDE0LDEyLDE0LDE0LDEzLDE1LDEwLDE1LDBdXSxpOls4LFszLDIxLDQsMjAsNSwyMSw0LDIyLDMsMjEsLTEsLTEsNCwxNCw0LDBdXSxqOlsxMCxbNSwyMSw2LDIwLDcsMjEsNiwyMiw1LDIxLC0xLC0xLDYsMTQsNiwtMyw1LC02LDMsLTcsMSwtN11dLGs6WzE3LFs0LDIxLDQsMCwtMSwtMSwxNCwxNCw0LDQsLTEsLTEsOCw4LDE1LDBdXSxsOls4LFs0LDIxLDQsMF1dLG06WzMwLFs0LDE0LDQsMCwtMSwtMSw0LDEwLDcsMTMsOSwxNCwxMiwxNCwxNCwxMywxNSwxMCwxNSwwLC0xLC0xLDE1LDEwLDE4LDEzLDIwLDE0LDIzLDE0LDI1LDEzLDI2LDEwLDI2LDBdXSxuOlsxOSxbNCwxNCw0LDAsLTEsLTEsNCwxMCw3LDEzLDksMTQsMTIsMTQsMTQsMTMsMTUsMTAsMTUsMF1dLG86WzE5LFs4LDE0LDYsMTMsNCwxMSwzLDgsMyw2LDQsMyw2LDEsOCwwLDExLDAsMTMsMSwxNSwzLDE2LDYsMTYsOCwxNSwxMSwxMywxMywxMSwxNCw4LDE0XV0scDpbMTksWzQsMTQsNCwtNywtMSwtMSw0LDExLDYsMTMsOCwxNCwxMSwxNCwxMywxMywxNSwxMSwxNiw4LDE2LDYsMTUsMywxMywxLDExLDAsOCwwLDYsMSw0LDNdXSxxOlsxOSxbMTUsMTQsMTUsLTcsLTEsLTEsMTUsMTEsMTMsMTMsMTEsMTQsOCwxNCw2LDEzLDQsMTEsMyw4LDMsNiw0LDMsNiwxLDgsMCwxMSwwLDEzLDEsMTUsM11dLHI6WzEzLFs0LDE0LDQsMCwtMSwtMSw0LDgsNSwxMSw3LDEzLDksMTQsMTIsMTRdXSxzOlsxNyxbMTQsMTEsMTMsMTMsMTAsMTQsNywxNCw0LDEzLDMsMTEsNCw5LDYsOCwxMSw3LDEzLDYsMTQsNCwxNCwzLDEzLDEsMTAsMCw3LDAsNCwxLDMsM11dLHQ6WzEyLFs1LDIxLDUsNCw2LDEsOCwwLDEwLDAsLTEsLTEsMiwxNCw5LDE0XV0sdTpbMTksWzQsMTQsNCw0LDUsMSw3LDAsMTAsMCwxMiwxLDE1LDQsLTEsLTEsMTUsMTQsMTUsMF1dLHY6WzE2LFsyLDE0LDgsMCwtMSwtMSwxNCwxNCw4LDBdXSx3OlsyMixbMywxNCw3LDAsLTEsLTEsMTEsMTQsNywwLC0xLC0xLDExLDE0LDE1LDAsLTEsLTEsMTksMTQsMTUsMF1dLHg6WzE3LFszLDE0LDE0LDAsLTEsLTEsMTQsMTQsMywwXV0seTpbMTYsWzIsMTQsOCwwLC0xLC0xLDE0LDE0LDgsMCw2LC00LDQsLTYsMiwtNywxLC03XV0sejpbMTcsWzE0LDE0LDMsMCwtMSwtMSwzLDE0LDE0LDE0LC0xLC0xLDMsMCwxNCwwXV0sInsiOlsxNCxbOSwyNSw3LDI0LDYsMjMsNSwyMSw1LDE5LDYsMTcsNywxNiw4LDE0LDgsMTIsNiwxMCwtMSwtMSw3LDI0LDYsMjIsNiwyMCw3LDE4LDgsMTcsOSwxNSw5LDEzLDgsMTEsNCw5LDgsNyw5LDUsOSwzLDgsMSw3LDAsNiwtMiw2LC00LDcsLTYsLTEsLTEsNiw4LDgsNiw4LDQsNywyLDYsMSw1LC0xLDUsLTMsNiwtNSw3LC02LDksLTddXSwifCI6WzgsWzQsMjUsNCwtN11dLCJ9IjpbMTQsWzUsMjUsNywyNCw4LDIzLDksMjEsOSwxOSw4LDE3LDcsMTYsNiwxNCw2LDEyLDgsMTAsLTEsLTEsNywyNCw4LDIyLDgsMjAsNywxOCw2LDE3LDUsMTUsNSwxMyw2LDExLDEwLDksNiw3LDUsNSw1LDMsNiwxLDcsMCw4LC0yLDgsLTQsNywtNiwtMSwtMSw4LDgsNiw2LDYsNCw3LDIsOCwxLDksLTEsOSwtMyw4LC01LDcsLTYsNSwtN11dLCJ+IjpbMjQsWzMsNiwzLDgsNCwxMSw2LDEyLDgsMTIsMTAsMTEsMTQsOCwxNiw3LDE4LDcsMjAsOCwyMSwxMCwtMSwtMSwzLDgsNCwxMCw2LDExLDgsMTEsMTAsMTAsMTQsNywxNiw2LDE4LDYsMjAsNywyMSwxMCwyMSwxMl1dfSxMcj17c3ltYm9sOmZ1bmN0aW9uKHQsZSxyLG4pe2lmKCJ0cmFuc2x1Y2VudCI9PT10LnJlbmRlclBhc3Mpe3ZhciBpPXQuY29udGV4dDtpLnNldFN0ZW5jaWxNb2RlKEh0LmRpc2FibGVkKSxpLnNldENvbG9yTW9kZSh0LmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKSksMCE9PXIucGFpbnQuZ2V0KCJpY29uLW9wYWNpdHkiKS5jb25zdGFudE9yKDEpJiZjcih0LGUscixuLCExLHIucGFpbnQuZ2V0KCJpY29uLXRyYW5zbGF0ZSIpLHIucGFpbnQuZ2V0KCJpY29uLXRyYW5zbGF0ZS1hbmNob3IiKSxyLmxheW91dC5nZXQoImljb24tcm90YXRpb24tYWxpZ25tZW50Iiksci5sYXlvdXQuZ2V0KCJpY29uLXBpdGNoLWFsaWdubWVudCIpLHIubGF5b3V0LmdldCgiaWNvbi1rZWVwLXVwcmlnaHQiKSksMCE9PXIucGFpbnQuZ2V0KCJ0ZXh0LW9wYWNpdHkiKS5jb25zdGFudE9yKDEpJiZjcih0LGUscixuLCEwLHIucGFpbnQuZ2V0KCJ0ZXh0LXRyYW5zbGF0ZSIpLHIucGFpbnQuZ2V0KCJ0ZXh0LXRyYW5zbGF0ZS1hbmNob3IiKSxyLmxheW91dC5nZXQoInRleHQtcm90YXRpb24tYWxpZ25tZW50Iiksci5sYXlvdXQuZ2V0KCJ0ZXh0LXBpdGNoLWFsaWdubWVudCIpLHIubGF5b3V0LmdldCgidGV4dC1rZWVwLXVwcmlnaHQiKSksZS5tYXAuc2hvd0NvbGxpc2lvbkJveGVzJiZmdW5jdGlvbih0LGUscixuKXtvcih0LGUscixuLCExKSxvcih0LGUscixuLCEwKX0odCxlLHIsbil9fSxjaXJjbGU6ZnVuY3Rpb24odCxlLHIsbil7aWYoInRyYW5zbHVjZW50Ij09PXQucmVuZGVyUGFzcyl7dmFyIGk9ci5wYWludC5nZXQoImNpcmNsZS1vcGFjaXR5IiksYT1yLnBhaW50LmdldCgiY2lyY2xlLXN0cm9rZS13aWR0aCIpLG89ci5wYWludC5nZXQoImNpcmNsZS1zdHJva2Utb3BhY2l0eSIpO2lmKDAhPT1pLmNvbnN0YW50T3IoMSl8fDAhPT1hLmNvbnN0YW50T3IoMSkmJjAhPT1vLmNvbnN0YW50T3IoMSkpe3ZhciBzPXQuY29udGV4dCxsPXMuZ2w7cy5zZXREZXB0aE1vZGUodC5kZXB0aE1vZGVGb3JTdWJsYXllcigwLHF0LlJlYWRPbmx5KSkscy5zZXRTdGVuY2lsTW9kZShIdC5kaXNhYmxlZCkscy5zZXRDb2xvck1vZGUodC5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCkpO2Zvcih2YXIgYz0hMCx1PTA7dTxuLmxlbmd0aDt1Kyspe3ZhciBoPW5bdV0sZj1lLmdldFRpbGUoaCkscD1mLmdldEJ1Y2tldChyKTtpZihwKXt2YXIgZD10LmNvbnRleHQucHJvZ3JhbS5nZXQoKSxnPXAucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmdldChyLmlkKSxtPXQudXNlUHJvZ3JhbSgiY2lyY2xlIixnKTtpZigoY3x8bS5wcm9ncmFtIT09ZCkmJihnLnNldFVuaWZvcm1zKHMsbSxyLnBhaW50LHt6b29tOnQudHJhbnNmb3JtLnpvb219KSxjPSExKSxsLnVuaWZvcm0xZihtLnVuaWZvcm1zLnVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSx0LnRyYW5zZm9ybS5jYW1lcmFUb0NlbnRlckRpc3RhbmNlKSxsLnVuaWZvcm0xaShtLnVuaWZvcm1zLnVfc2NhbGVfd2l0aF9tYXAsIm1hcCI9PT1yLnBhaW50LmdldCgiY2lyY2xlLXBpdGNoLXNjYWxlIik/MTowKSwibWFwIj09PXIucGFpbnQuZ2V0KCJjaXJjbGUtcGl0Y2gtYWxpZ25tZW50Iikpe2wudW5pZm9ybTFpKG0udW5pZm9ybXMudV9waXRjaF93aXRoX21hcCwxKTt2YXIgdj1UZShmLDEsdC50cmFuc2Zvcm0uem9vbSk7bC51bmlmb3JtMmYobS51bmlmb3Jtcy51X2V4dHJ1ZGVfc2NhbGUsdix2KX1lbHNlIGwudW5pZm9ybTFpKG0udW5pZm9ybXMudV9waXRjaF93aXRoX21hcCwwKSxsLnVuaWZvcm0yZnYobS51bmlmb3Jtcy51X2V4dHJ1ZGVfc2NhbGUsdC50cmFuc2Zvcm0ucGl4ZWxzVG9HTFVuaXRzKTtsLnVuaWZvcm1NYXRyaXg0ZnYobS51bmlmb3Jtcy51X21hdHJpeCwhMSx0LnRyYW5zbGF0ZVBvc01hdHJpeChoLnBvc01hdHJpeCxmLHIucGFpbnQuZ2V0KCJjaXJjbGUtdHJhbnNsYXRlIiksci5wYWludC5nZXQoImNpcmNsZS10cmFuc2xhdGUtYW5jaG9yIikpKSxtLmRyYXcocyxsLlRSSUFOR0xFUyxyLmlkLHAubGF5b3V0VmVydGV4QnVmZmVyLHAuaW5kZXhCdWZmZXIscC5zZWdtZW50cyxnKX19fX19LGhlYXRtYXA6ZnVuY3Rpb24oZSxyLG4saSl7aWYoMCE9PW4ucGFpbnQuZ2V0KCJoZWF0bWFwLW9wYWNpdHkiKSlpZigib2Zmc2NyZWVuIj09PWUucmVuZGVyUGFzcyl7dmFyIGE9ZS5jb250ZXh0LG89YS5nbDthLnNldERlcHRoTW9kZShlLmRlcHRoTW9kZUZvclN1YmxheWVyKDAscXQuUmVhZE9ubHkpKSxhLnNldFN0ZW5jaWxNb2RlKEh0LmRpc2FibGVkKSxmdW5jdGlvbih0LGUscil7dmFyIG49dC5nbDt0LmFjdGl2ZVRleHR1cmUuc2V0KG4uVEVYVFVSRTEpLHQudmlld3BvcnQuc2V0KFswLDAsZS53aWR0aC80LGUuaGVpZ2h0LzRdKTt2YXIgaT1yLmhlYXRtYXBGYm87aWYoaSluLmJpbmRUZXh0dXJlKG4uVEVYVFVSRV8yRCxpLmNvbG9yQXR0YWNobWVudC5nZXQoKSksdC5iaW5kRnJhbWVidWZmZXIuc2V0KGkuZnJhbWVidWZmZXIpO2Vsc2V7dmFyIGE9bi5jcmVhdGVUZXh0dXJlKCk7bi5iaW5kVGV4dHVyZShuLlRFWFRVUkVfMkQsYSksbi50ZXhQYXJhbWV0ZXJpKG4uVEVYVFVSRV8yRCxuLlRFWFRVUkVfV1JBUF9TLG4uQ0xBTVBfVE9fRURHRSksbi50ZXhQYXJhbWV0ZXJpKG4uVEVYVFVSRV8yRCxuLlRFWFRVUkVfV1JBUF9ULG4uQ0xBTVBfVE9fRURHRSksbi50ZXhQYXJhbWV0ZXJpKG4uVEVYVFVSRV8yRCxuLlRFWFRVUkVfTUlOX0ZJTFRFUixuLkxJTkVBUiksbi50ZXhQYXJhbWV0ZXJpKG4uVEVYVFVSRV8yRCxuLlRFWFRVUkVfTUFHX0ZJTFRFUixuLkxJTkVBUiksaT1yLmhlYXRtYXBGYm89dC5jcmVhdGVGcmFtZWJ1ZmZlcihlLndpZHRoLzQsZS5oZWlnaHQvNCksZnVuY3Rpb24gdChlLHIsbixpKXt2YXIgYT1lLmdsO2EudGV4SW1hZ2UyRChhLlRFWFRVUkVfMkQsMCxhLlJHQkEsci53aWR0aC80LHIuaGVpZ2h0LzQsMCxhLlJHQkEsZS5leHRUZXh0dXJlSGFsZkZsb2F0P2UuZXh0VGV4dHVyZUhhbGZGbG9hdC5IQUxGX0ZMT0FUX09FUzphLlVOU0lHTkVEX0JZVEUsbnVsbCksaS5jb2xvckF0dGFjaG1lbnQuc2V0KG4pLGUuZXh0VGV4dHVyZUhhbGZGbG9hdCYmYS5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGEuRlJBTUVCVUZGRVIpIT09YS5GUkFNRUJVRkZFUl9DT01QTEVURSYmKGUuZXh0VGV4dHVyZUhhbGZGbG9hdD1udWxsLGkuY29sb3JBdHRhY2htZW50LnNldERpcnR5KCksdChlLHIsbixpKSl9KHQsZSxhLGkpfX0oYSxlLG4pLGEuY2xlYXIoe2NvbG9yOnQuZGVmYXVsdCQ2LnRyYW5zcGFyZW50fSksYS5zZXRDb2xvck1vZGUobmV3IEd0KFtvLk9ORSxvLk9ORV0sdC5kZWZhdWx0JDYudHJhbnNwYXJlbnQsWyEwLCEwLCEwLCEwXSkpO2Zvcih2YXIgcz0hMCxsPTA7bDxpLmxlbmd0aDtsKyspe3ZhciBjPWlbbF07aWYoIXIuaGFzUmVuZGVyYWJsZVBhcmVudChjKSl7dmFyIHU9ci5nZXRUaWxlKGMpLGg9dS5nZXRCdWNrZXQobik7aWYoaCl7dmFyIGY9ZS5jb250ZXh0LnByb2dyYW0uZ2V0KCkscD1oLnByb2dyYW1Db25maWd1cmF0aW9ucy5nZXQobi5pZCksZD1lLnVzZVByb2dyYW0oImhlYXRtYXAiLHApLGc9ZS50cmFuc2Zvcm0uem9vbTsoc3x8ZC5wcm9ncmFtIT09ZikmJihwLnNldFVuaWZvcm1zKGUuY29udGV4dCxkLG4ucGFpbnQse3pvb206Z30pLHM9ITEpLG8udW5pZm9ybTFmKGQudW5pZm9ybXMudV9leHRydWRlX3NjYWxlLFRlKHUsMSxnKSksby51bmlmb3JtMWYoZC51bmlmb3Jtcy51X2ludGVuc2l0eSxuLnBhaW50LmdldCgiaGVhdG1hcC1pbnRlbnNpdHkiKSksby51bmlmb3JtTWF0cml4NGZ2KGQudW5pZm9ybXMudV9tYXRyaXgsITEsYy5wb3NNYXRyaXgpLGQuZHJhdyhhLG8uVFJJQU5HTEVTLG4uaWQsaC5sYXlvdXRWZXJ0ZXhCdWZmZXIsaC5pbmRleEJ1ZmZlcixoLnNlZ21lbnRzLHApfX19YS52aWV3cG9ydC5zZXQoWzAsMCxlLndpZHRoLGUuaGVpZ2h0XSl9ZWxzZSJ0cmFuc2x1Y2VudCI9PT1lLnJlbmRlclBhc3MmJihlLmNvbnRleHQuc2V0Q29sb3JNb2RlKGUuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpKSxmdW5jdGlvbihlLHIpe3ZhciBuPWUuY29udGV4dCxpPW4uZ2wsYT1yLmhlYXRtYXBGYm87aWYoYSl7bi5hY3RpdmVUZXh0dXJlLnNldChpLlRFWFRVUkUwKSxpLmJpbmRUZXh0dXJlKGkuVEVYVFVSRV8yRCxhLmNvbG9yQXR0YWNobWVudC5nZXQoKSksbi5hY3RpdmVUZXh0dXJlLnNldChpLlRFWFRVUkUxKTt2YXIgbz1yLmNvbG9yUmFtcFRleHR1cmU7b3x8KG89ci5jb2xvclJhbXBUZXh0dXJlPW5ldyB6KG4sci5jb2xvclJhbXAsaS5SR0JBKSksby5iaW5kKGkuTElORUFSLGkuQ0xBTVBfVE9fRURHRSksbi5zZXREZXB0aE1vZGUocXQuZGlzYWJsZWQpO3ZhciBzPWUudXNlUHJvZ3JhbSgiaGVhdG1hcFRleHR1cmUiKSxsPXIucGFpbnQuZ2V0KCJoZWF0bWFwLW9wYWNpdHkiKTtpLnVuaWZvcm0xZihzLnVuaWZvcm1zLnVfb3BhY2l0eSxsKSxpLnVuaWZvcm0xaShzLnVuaWZvcm1zLnVfaW1hZ2UsMCksaS51bmlmb3JtMWkocy51bmlmb3Jtcy51X2NvbG9yX3JhbXAsMSk7dmFyIGM9dC5tYXQ0LmNyZWF0ZSgpO3QubWF0NC5vcnRobyhjLDAsZS53aWR0aCxlLmhlaWdodCwwLDAsMSksaS51bmlmb3JtTWF0cml4NGZ2KHMudW5pZm9ybXMudV9tYXRyaXgsITEsYyksaS51bmlmb3JtMmYocy51bmlmb3Jtcy51X3dvcmxkLGkuZHJhd2luZ0J1ZmZlcldpZHRoLGkuZHJhd2luZ0J1ZmZlckhlaWdodCksZS52aWV3cG9ydFZBTy5iaW5kKGUuY29udGV4dCxzLGUudmlld3BvcnRCdWZmZXIsW10pLGkuZHJhd0FycmF5cyhpLlRSSUFOR0xFX1NUUklQLDAsNCl9fShlLG4pKX0sbGluZTpmdW5jdGlvbih0LGUscixuKXtpZigidHJhbnNsdWNlbnQiPT09dC5yZW5kZXJQYXNzJiYwIT09ci5wYWludC5nZXQoImxpbmUtb3BhY2l0eSIpLmNvbnN0YW50T3IoMSkpe3ZhciBpPXQuY29udGV4dDtpLnNldERlcHRoTW9kZSh0LmRlcHRoTW9kZUZvclN1YmxheWVyKDAscXQuUmVhZE9ubHkpKSxpLnNldENvbG9yTW9kZSh0LmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKSk7Zm9yKHZhciBhLG89ci5wYWludC5nZXQoImxpbmUtZGFzaGFycmF5Iik/ImxpbmVTREYiOnIucGFpbnQuZ2V0KCJsaW5lLXBhdHRlcm4iKT8ibGluZVBhdHRlcm4iOnIucGFpbnQuZ2V0KCJsaW5lLWdyYWRpZW50Iik/ImxpbmVHcmFkaWVudCI6ImxpbmUiLHM9ITAsbD0wLGM9bjtsPGMubGVuZ3RoO2wrPTEpe3ZhciB1PWNbbF0saD1lLmdldFRpbGUodSksZj1oLmdldEJ1Y2tldChyKTtpZihmKXt2YXIgcD1mLnByb2dyYW1Db25maWd1cmF0aW9ucy5nZXQoci5pZCksZD10LmNvbnRleHQucHJvZ3JhbS5nZXQoKSxnPXQudXNlUHJvZ3JhbShvLHApLG09c3x8Zy5wcm9ncmFtIT09ZCx2PWEhPT1oLnRpbGVJRC5vdmVyc2NhbGVkWjttJiZwLnNldFVuaWZvcm1zKHQuY29udGV4dCxnLHIucGFpbnQse3pvb206dC50cmFuc2Zvcm0uem9vbX0pLHByKGcsdCxoLGYscix1LHAsbSx2KSxhPWgudGlsZUlELm92ZXJzY2FsZWRaLHM9ITF9fX19LGZpbGw6ZnVuY3Rpb24oZSxyLG4saSl7dmFyIGE9bi5wYWludC5nZXQoImZpbGwtY29sb3IiKSxvPW4ucGFpbnQuZ2V0KCJmaWxsLW9wYWNpdHkiKTtpZigwIT09by5jb25zdGFudE9yKDEpKXt2YXIgcz1lLmNvbnRleHQ7cy5zZXRDb2xvck1vZGUoZS5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCkpO3ZhciBsPW4ucGFpbnQuZ2V0KCJmaWxsLXBhdHRlcm4iKXx8MSE9PWEuY29uc3RhbnRPcih0LmRlZmF1bHQkNi50cmFuc3BhcmVudCkuYXx8MSE9PW8uY29uc3RhbnRPcigwKT8idHJhbnNsdWNlbnQiOiJvcGFxdWUiO2UucmVuZGVyUGFzcz09PWwmJihzLnNldERlcHRoTW9kZShlLmRlcHRoTW9kZUZvclN1YmxheWVyKDEsIm9wYXF1ZSI9PT1lLnJlbmRlclBhc3M/cXQuUmVhZFdyaXRlOnF0LlJlYWRPbmx5KSksdnIoZSxyLG4saSx5cikpLCJ0cmFuc2x1Y2VudCI9PT1lLnJlbmRlclBhc3MmJm4ucGFpbnQuZ2V0KCJmaWxsLWFudGlhbGlhcyIpJiYocy5saW5lV2lkdGguc2V0KDIpLHMuc2V0RGVwdGhNb2RlKGUuZGVwdGhNb2RlRm9yU3VibGF5ZXIobi5nZXRQYWludFByb3BlcnR5KCJmaWxsLW91dGxpbmUtY29sb3IiKT8yOjAscXQuUmVhZE9ubHkpKSx2cihlLHIsbixpLHhyKSl9fSwiZmlsbC1leHRydXNpb24iOmZ1bmN0aW9uKGUscixuLGkpe2lmKDAhPT1uLnBhaW50LmdldCgiZmlsbC1leHRydXNpb24tb3BhY2l0eSIpKWlmKCJvZmZzY3JlZW4iPT09ZS5yZW5kZXJQYXNzKXshZnVuY3Rpb24oZSxyKXt2YXIgbj1lLmNvbnRleHQsaT1uLmdsLGE9ci52aWV3cG9ydEZyYW1lO2lmKGUuZGVwdGhSYm9OZWVkc0NsZWFyJiZlLnNldHVwT2Zmc2NyZWVuRGVwdGhSZW5kZXJidWZmZXIoKSwhYSl7dmFyIG89bmV3IHoobix7d2lkdGg6ZS53aWR0aCxoZWlnaHQ6ZS5oZWlnaHQsZGF0YTpudWxsfSxpLlJHQkEpO28uYmluZChpLkxJTkVBUixpLkNMQU1QX1RPX0VER0UpLChhPXIudmlld3BvcnRGcmFtZT1uLmNyZWF0ZUZyYW1lYnVmZmVyKGUud2lkdGgsZS5oZWlnaHQpKS5jb2xvckF0dGFjaG1lbnQuc2V0KG8udGV4dHVyZSl9bi5iaW5kRnJhbWVidWZmZXIuc2V0KGEuZnJhbWVidWZmZXIpLGEuZGVwdGhBdHRhY2htZW50LnNldChlLmRlcHRoUmJvKSxlLmRlcHRoUmJvTmVlZHNDbGVhciYmKG4uY2xlYXIoe2RlcHRoOjF9KSxlLmRlcHRoUmJvTmVlZHNDbGVhcj0hMSksbi5jbGVhcih7Y29sb3I6dC5kZWZhdWx0JDYudHJhbnNwYXJlbnR9KSxuLnNldFN0ZW5jaWxNb2RlKEh0LmRpc2FibGVkKSxuLnNldERlcHRoTW9kZShuZXcgcXQoaS5MRVFVQUwscXQuUmVhZFdyaXRlLFswLDFdKSksbi5zZXRDb2xvck1vZGUoZS5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCkpfShlLG4pO2Zvcih2YXIgYT0hMCxvPTAscz1pO288cy5sZW5ndGg7bys9MSl7dmFyIGw9c1tvXSxjPXIuZ2V0VGlsZShsKSx1PWMuZ2V0QnVja2V0KG4pO3UmJihNcihlLDAsbixjLGwsdSxhKSxhPSExKX19ZWxzZSJ0cmFuc2x1Y2VudCI9PT1lLnJlbmRlclBhc3MmJmZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS52aWV3cG9ydEZyYW1lO2lmKHIpe3ZhciBuPXQuY29udGV4dCxpPW4uZ2wsYT10LnVzZVByb2dyYW0oImV4dHJ1c2lvblRleHR1cmUiKTtuLnNldFN0ZW5jaWxNb2RlKEh0LmRpc2FibGVkKSxuLnNldERlcHRoTW9kZShxdC5kaXNhYmxlZCksbi5zZXRDb2xvck1vZGUodC5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCkpLG4uYWN0aXZlVGV4dHVyZS5zZXQoaS5URVhUVVJFMCksaS5iaW5kVGV4dHVyZShpLlRFWFRVUkVfMkQsci5jb2xvckF0dGFjaG1lbnQuZ2V0KCkpLGkudW5pZm9ybTFmKGEudW5pZm9ybXMudV9vcGFjaXR5LGUucGFpbnQuZ2V0KCJmaWxsLWV4dHJ1c2lvbi1vcGFjaXR5IikpLGkudW5pZm9ybTFpKGEudW5pZm9ybXMudV9pbWFnZSwwKTt2YXIgbz13ci5jcmVhdGUoKTt3ci5vcnRobyhvLDAsdC53aWR0aCx0LmhlaWdodCwwLDAsMSksaS51bmlmb3JtTWF0cml4NGZ2KGEudW5pZm9ybXMudV9tYXRyaXgsITEsbyksaS51bmlmb3JtMmYoYS51bmlmb3Jtcy51X3dvcmxkLGkuZHJhd2luZ0J1ZmZlcldpZHRoLGkuZHJhd2luZ0J1ZmZlckhlaWdodCksdC52aWV3cG9ydFZBTy5iaW5kKG4sYSx0LnZpZXdwb3J0QnVmZmVyLFtdKSxpLmRyYXdBcnJheXMoaS5UUklBTkdMRV9TVFJJUCwwLDQpfX0oZSxuKX0saGlsbHNoYWRlOmZ1bmN0aW9uKHQsZSxyLG4pe2lmKCJvZmZzY3JlZW4iPT09dC5yZW5kZXJQYXNzfHwidHJhbnNsdWNlbnQiPT09dC5yZW5kZXJQYXNzKXt2YXIgaT10LmNvbnRleHQsYT1lLmdldFNvdXJjZSgpLm1heHpvb207aS5zZXREZXB0aE1vZGUodC5kZXB0aE1vZGVGb3JTdWJsYXllcigwLHF0LlJlYWRPbmx5KSksaS5zZXRTdGVuY2lsTW9kZShIdC5kaXNhYmxlZCksaS5zZXRDb2xvck1vZGUodC5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCkpO2Zvcih2YXIgbz0wLHM9bjtvPHMubGVuZ3RoO28rPTEpe3ZhciBsPXNbb10sYz1lLmdldFRpbGUobCk7Yy5uZWVkc0hpbGxzaGFkZVByZXBhcmUmJiJvZmZzY3JlZW4iPT09dC5yZW5kZXJQYXNzP1RyKHQsYyxhKToidHJhbnNsdWNlbnQiPT09dC5yZW5kZXJQYXNzJiZBcih0LGMscil9aS52aWV3cG9ydC5zZXQoWzAsMCx0LndpZHRoLHQuaGVpZ2h0XSl9fSxyYXN0ZXI6ZnVuY3Rpb24odCxlLHIsbil7aWYoInRyYW5zbHVjZW50Ij09PXQucmVuZGVyUGFzcyYmMCE9PXIucGFpbnQuZ2V0KCJyYXN0ZXItb3BhY2l0eSIpKXt2YXIgaSxhLG89dC5jb250ZXh0LHM9by5nbCxsPWUuZ2V0U291cmNlKCksYz10LnVzZVByb2dyYW0oInJhc3RlciIpO28uc2V0U3RlbmNpbE1vZGUoSHQuZGlzYWJsZWQpLG8uc2V0Q29sb3JNb2RlKHQuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpKSxzLnVuaWZvcm0xZihjLnVuaWZvcm1zLnVfYnJpZ2h0bmVzc19sb3csci5wYWludC5nZXQoInJhc3Rlci1icmlnaHRuZXNzLW1pbiIpKSxzLnVuaWZvcm0xZihjLnVuaWZvcm1zLnVfYnJpZ2h0bmVzc19oaWdoLHIucGFpbnQuZ2V0KCJyYXN0ZXItYnJpZ2h0bmVzcy1tYXgiKSkscy51bmlmb3JtMWYoYy51bmlmb3Jtcy51X3NhdHVyYXRpb25fZmFjdG9yLChpPXIucGFpbnQuZ2V0KCJyYXN0ZXItc2F0dXJhdGlvbiIpKT4wPzEtMS8oMS4wMDEtaSk6LWkpLHMudW5pZm9ybTFmKGMudW5pZm9ybXMudV9jb250cmFzdF9mYWN0b3IsKGE9ci5wYWludC5nZXQoInJhc3Rlci1jb250cmFzdCIpKT4wPzEvKDEtYSk6MSthKSxzLnVuaWZvcm0zZnYoYy51bmlmb3Jtcy51X3NwaW5fd2VpZ2h0cyxmdW5jdGlvbih0KXt0Kj1NYXRoLlBJLzE4MDt2YXIgZT1NYXRoLnNpbih0KSxyPU1hdGguY29zKHQpO3JldHVyblsoMipyKzEpLzMsKC1NYXRoLnNxcnQoMykqZS1yKzEpLzMsKE1hdGguc3FydCgzKSplLXIrMSkvM119KHIucGFpbnQuZ2V0KCJyYXN0ZXItaHVlLXJvdGF0ZSIpKSkscy51bmlmb3JtMWYoYy51bmlmb3Jtcy51X2J1ZmZlcl9zY2FsZSwxKSxzLnVuaWZvcm0xaShjLnVuaWZvcm1zLnVfaW1hZ2UwLDApLHMudW5pZm9ybTFpKGMudW5pZm9ybXMudV9pbWFnZTEsMSk7Zm9yKHZhciB1PW4ubGVuZ3RoJiZuWzBdLm92ZXJzY2FsZWRaLGg9MCxmPW47aDxmLmxlbmd0aDtoKz0xKXt2YXIgcD1mW2hdO28uc2V0RGVwdGhNb2RlKHQuZGVwdGhNb2RlRm9yU3VibGF5ZXIocC5vdmVyc2NhbGVkWi11LDE9PT1yLnBhaW50LmdldCgicmFzdGVyLW9wYWNpdHkiKT9xdC5SZWFkV3JpdGU6cXQuUmVhZE9ubHkscy5MRVNTKSk7dmFyIGQ9ZS5nZXRUaWxlKHApLGc9dC50cmFuc2Zvcm0uY2FsY3VsYXRlUG9zTWF0cml4KHAudG9VbndyYXBwZWQoKSwhMCk7ZC5yZWdpc3RlckZhZGVEdXJhdGlvbihyLnBhaW50LmdldCgicmFzdGVyLWZhZGUtZHVyYXRpb24iKSkscy51bmlmb3JtTWF0cml4NGZ2KGMudW5pZm9ybXMudV9tYXRyaXgsITEsZyk7dmFyIG09ZS5maW5kTG9hZGVkUGFyZW50KHAsMCx7fSksdj1TcihkLG0sZSxyLHQudHJhbnNmb3JtKSx5PXZvaWQgMCx4PXZvaWQgMDtpZihvLmFjdGl2ZVRleHR1cmUuc2V0KHMuVEVYVFVSRTApLGQudGV4dHVyZS5iaW5kKHMuTElORUFSLHMuQ0xBTVBfVE9fRURHRSxzLkxJTkVBUl9NSVBNQVBfTkVBUkVTVCksby5hY3RpdmVUZXh0dXJlLnNldChzLlRFWFRVUkUxKSxtPyhtLnRleHR1cmUuYmluZChzLkxJTkVBUixzLkNMQU1QX1RPX0VER0Uscy5MSU5FQVJfTUlQTUFQX05FQVJFU1QpLHk9TWF0aC5wb3coMixtLnRpbGVJRC5vdmVyc2NhbGVkWi1kLnRpbGVJRC5vdmVyc2NhbGVkWikseD1bZC50aWxlSUQuY2Fub25pY2FsLngqeSUxLGQudGlsZUlELmNhbm9uaWNhbC55KnklMV0pOmQudGV4dHVyZS5iaW5kKHMuTElORUFSLHMuQ0xBTVBfVE9fRURHRSxzLkxJTkVBUl9NSVBNQVBfTkVBUkVTVCkscy51bmlmb3JtMmZ2KGMudW5pZm9ybXMudV90bF9wYXJlbnQseHx8WzAsMF0pLHMudW5pZm9ybTFmKGMudW5pZm9ybXMudV9zY2FsZV9wYXJlbnQseXx8MSkscy51bmlmb3JtMWYoYy51bmlmb3Jtcy51X2ZhZGVfdCx2Lm1peCkscy51bmlmb3JtMWYoYy51bmlmb3Jtcy51X29wYWNpdHksdi5vcGFjaXR5KnIucGFpbnQuZ2V0KCJyYXN0ZXItb3BhY2l0eSIpKSxsIGluc3RhbmNlb2YgdHQpe3ZhciBiPWwuYm91bmRzQnVmZmVyO2wuYm91bmRzVkFPLmJpbmQobyxjLGIsW10pLHMuZHJhd0FycmF5cyhzLlRSSUFOR0xFX1NUUklQLDAsYi5sZW5ndGgpfWVsc2UgaWYoZC5tYXNrZWRCb3VuZHNCdWZmZXImJmQubWFza2VkSW5kZXhCdWZmZXImJmQuc2VnbWVudHMpYy5kcmF3KG8scy5UUklBTkdMRVMsci5pZCxkLm1hc2tlZEJvdW5kc0J1ZmZlcixkLm1hc2tlZEluZGV4QnVmZmVyLGQuc2VnbWVudHMpO2Vsc2V7dmFyIF89dC5yYXN0ZXJCb3VuZHNCdWZmZXI7dC5yYXN0ZXJCb3VuZHNWQU8uYmluZChvLGMsXyxbXSkscy5kcmF3QXJyYXlzKHMuVFJJQU5HTEVfU1RSSVAsMCxfLmxlbmd0aCl9fX19LGJhY2tncm91bmQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIucGFpbnQuZ2V0KCJiYWNrZ3JvdW5kLWNvbG9yIiksaT1yLnBhaW50LmdldCgiYmFja2dyb3VuZC1vcGFjaXR5Iik7aWYoMCE9PWkpe3ZhciBhPXQuY29udGV4dCxvPWEuZ2wscz10LnRyYW5zZm9ybSxsPXMudGlsZVNpemUsYz1yLnBhaW50LmdldCgiYmFja2dyb3VuZC1wYXR0ZXJuIiksdT1jfHwxIT09bi5hfHwxIT09aT8idHJhbnNsdWNlbnQiOiJvcGFxdWUiO2lmKHQucmVuZGVyUGFzcz09PXUpe3ZhciBoO2lmKGEuc2V0U3RlbmNpbE1vZGUoSHQuZGlzYWJsZWQpLGEuc2V0RGVwdGhNb2RlKHQuZGVwdGhNb2RlRm9yU3VibGF5ZXIoMCwib3BhcXVlIj09PXU/cXQuUmVhZFdyaXRlOnF0LlJlYWRPbmx5KSksYS5zZXRDb2xvck1vZGUodC5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCkpLGMpe2lmKGRyKGMsdCkpcmV0dXJuO2g9dC51c2VQcm9ncmFtKCJiYWNrZ3JvdW5kUGF0dGVybiIpLGdyKGMsdCxoKSx0LnRpbGVFeHRlbnRQYXR0ZXJuVkFPLmJpbmQoYSxoLHQudGlsZUV4dGVudEJ1ZmZlcixbXSl9ZWxzZSBoPXQudXNlUHJvZ3JhbSgiYmFja2dyb3VuZCIpLG8udW5pZm9ybTRmdihoLnVuaWZvcm1zLnVfY29sb3IsW24ucixuLmcsbi5iLG4uYV0pLHQudGlsZUV4dGVudFZBTy5iaW5kKGEsaCx0LnRpbGVFeHRlbnRCdWZmZXIsW10pO28udW5pZm9ybTFmKGgudW5pZm9ybXMudV9vcGFjaXR5LGkpO2Zvcih2YXIgZj0wLHA9cy5jb3ZlcmluZ1RpbGVzKHt0aWxlU2l6ZTpsfSk7ZjxwLmxlbmd0aDtmKz0xKXt2YXIgZD1wW2ZdO2MmJm1yKHt0aWxlSUQ6ZCx0aWxlU2l6ZTpsfSx0LGgpLG8udW5pZm9ybU1hdHJpeDRmdihoLnVuaWZvcm1zLnVfbWF0cml4LCExLHQudHJhbnNmb3JtLmNhbGN1bGF0ZVBvc01hdHJpeChkLnRvVW53cmFwcGVkKCkpKSxvLmRyYXdBcnJheXMoby5UUklBTkdMRV9TVFJJUCwwLHQudGlsZUV4dGVudEJ1ZmZlci5sZW5ndGgpfX19fSxkZWJ1ZzpmdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPTA7bjxyLmxlbmd0aDtuKyspRXIodCxlLHJbbl0pfX0senI9ZnVuY3Rpb24oZSxyKXt0aGlzLmNvbnRleHQ9bmV3IFd0KGUpLHRoaXMudHJhbnNmb3JtPXIsdGhpcy5fdGlsZVRleHR1cmVzPXt9LHRoaXMuc2V0dXAoKSx0aGlzLm51bVN1YmxheWVycz1ZdC5tYXhVbmRlcnpvb21pbmcrWXQubWF4T3Zlcnpvb21pbmcrMSx0aGlzLmRlcHRoRXBzaWxvbj0xL01hdGgucG93KDIsMTYpLHRoaXMuZGVwdGhSYm9OZWVkc0NsZWFyPSEwLHRoaXMuZW1wdHlQcm9ncmFtQ29uZmlndXJhdGlvbj1uZXcgdC5kZWZhdWx0JDI0LHRoaXMuY3Jvc3NUaWxlU3ltYm9sSW5kZXg9bmV3IFllfTtmdW5jdGlvbiBQcih0LGUpe2lmKHQucm93PmUucm93KXt2YXIgcj10O3Q9ZSxlPXJ9cmV0dXJue3gwOnQuY29sdW1uLHkwOnQucm93LHgxOmUuY29sdW1uLHkxOmUucm93LGR4OmUuY29sdW1uLXQuY29sdW1uLGR5OmUucm93LXQucm93fX1mdW5jdGlvbiBJcih0LGUscixuLGkpe3ZhciBhPU1hdGgubWF4KHIsTWF0aC5mbG9vcihlLnkwKSksbz1NYXRoLm1pbihuLE1hdGguY2VpbChlLnkxKSk7aWYodC54MD09PWUueDAmJnQueTA9PT1lLnkwP3QueDArZS5keS90LmR5KnQuZHg8ZS54MTp0LngxLWUuZHkvdC5keSp0LmR4PGUueDApe3ZhciBzPXQ7dD1lLGU9c31mb3IodmFyIGw9dC5keC90LmR5LGM9ZS5keC9lLmR5LHU9dC5keD4wLGg9ZS5keDwwLGY9YTtmPG87ZisrKXt2YXIgcD1sKk1hdGgubWF4KDAsTWF0aC5taW4odC5keSxmK3UtdC55MCkpK3QueDAsZD1jKk1hdGgubWF4KDAsTWF0aC5taW4oZS5keSxmK2gtZS55MCkpK2UueDA7aShNYXRoLmZsb29yKGQpLE1hdGguY2VpbChwKSxmKX19ZnVuY3Rpb24gT3IodCxlLHIsbixpLGEpe3ZhciBvLHM9UHIodCxlKSxsPVByKGUsciksYz1QcihyLHQpO3MuZHk+bC5keSYmKG89cyxzPWwsbD1vKSxzLmR5PmMuZHkmJihvPXMscz1jLGM9byksbC5keT5jLmR5JiYobz1sLGw9YyxjPW8pLHMuZHkmJklyKGMscyxuLGksYSksbC5keSYmSXIoYyxsLG4saSxhKX16ci5wcm90b3R5cGUucmVzaXplPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5jb250ZXh0LmdsO2lmKHRoaXMud2lkdGg9dCphLmRldmljZVBpeGVsUmF0aW8sdGhpcy5oZWlnaHQ9ZSphLmRldmljZVBpeGVsUmF0aW8sdGhpcy5jb250ZXh0LnZpZXdwb3J0LnNldChbMCwwLHRoaXMud2lkdGgsdGhpcy5oZWlnaHRdKSx0aGlzLnN0eWxlKWZvcih2YXIgbj0wLGk9dGhpcy5zdHlsZS5fb3JkZXI7bjxpLmxlbmd0aDtuKz0xKXt2YXIgbz1pW25dO3RoaXMuc3R5bGUuX2xheWVyc1tvXS5yZXNpemUoKX10aGlzLmRlcHRoUmJvJiYoci5kZWxldGVSZW5kZXJidWZmZXIodGhpcy5kZXB0aFJibyksdGhpcy5kZXB0aFJibz1udWxsKX0senIucHJvdG90eXBlLnNldHVwPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jb250ZXh0LHI9bmV3IHQuUG9zQXJyYXk7ci5lbXBsYWNlQmFjaygwLDApLHIuZW1wbGFjZUJhY2sodC5kZWZhdWx0JDgsMCksci5lbXBsYWNlQmFjaygwLHQuZGVmYXVsdCQ4KSxyLmVtcGxhY2VCYWNrKHQuZGVmYXVsdCQ4LHQuZGVmYXVsdCQ4KSx0aGlzLnRpbGVFeHRlbnRCdWZmZXI9ZS5jcmVhdGVWZXJ0ZXhCdWZmZXIocixLZS5tZW1iZXJzKSx0aGlzLnRpbGVFeHRlbnRWQU89bmV3IFEsdGhpcy50aWxlRXh0ZW50UGF0dGVyblZBTz1uZXcgUTt2YXIgbj1uZXcgdC5Qb3NBcnJheTtuLmVtcGxhY2VCYWNrKDAsMCksbi5lbXBsYWNlQmFjayh0LmRlZmF1bHQkOCwwKSxuLmVtcGxhY2VCYWNrKHQuZGVmYXVsdCQ4LHQuZGVmYXVsdCQ4KSxuLmVtcGxhY2VCYWNrKDAsdC5kZWZhdWx0JDgpLG4uZW1wbGFjZUJhY2soMCwwKSx0aGlzLmRlYnVnQnVmZmVyPWUuY3JlYXRlVmVydGV4QnVmZmVyKG4sS2UubWVtYmVycyksdGhpcy5kZWJ1Z1ZBTz1uZXcgUTt2YXIgaT1uZXcgdC5SYXN0ZXJCb3VuZHNBcnJheTtpLmVtcGxhY2VCYWNrKDAsMCwwLDApLGkuZW1wbGFjZUJhY2sodC5kZWZhdWx0JDgsMCx0LmRlZmF1bHQkOCwwKSxpLmVtcGxhY2VCYWNrKDAsdC5kZWZhdWx0JDgsMCx0LmRlZmF1bHQkOCksaS5lbXBsYWNlQmFjayh0LmRlZmF1bHQkOCx0LmRlZmF1bHQkOCx0LmRlZmF1bHQkOCx0LmRlZmF1bHQkOCksdGhpcy5yYXN0ZXJCb3VuZHNCdWZmZXI9ZS5jcmVhdGVWZXJ0ZXhCdWZmZXIoaSxLLm1lbWJlcnMpLHRoaXMucmFzdGVyQm91bmRzVkFPPW5ldyBRO3ZhciBhPW5ldyB0LlBvc0FycmF5O2EuZW1wbGFjZUJhY2soMCwwKSxhLmVtcGxhY2VCYWNrKDEsMCksYS5lbXBsYWNlQmFjaygwLDEpLGEuZW1wbGFjZUJhY2soMSwxKSx0aGlzLnZpZXdwb3J0QnVmZmVyPWUuY3JlYXRlVmVydGV4QnVmZmVyKGEsS2UubWVtYmVycyksdGhpcy52aWV3cG9ydFZBTz1uZXcgUX0senIucHJvdG90eXBlLmNsZWFyU3RlbmNpbD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuY29udGV4dCxyPWUuZ2w7ZS5zZXRDb2xvck1vZGUoR3QuZGlzYWJsZWQpLGUuc2V0RGVwdGhNb2RlKHF0LmRpc2FibGVkKSxlLnNldFN0ZW5jaWxNb2RlKG5ldyBIdCh7ZnVuYzpyLkFMV0FZUyxtYXNrOjB9LDAsMjU1LHIuWkVSTyxyLlpFUk8sci5aRVJPKSk7dmFyIG49dC5tYXQ0LmNyZWF0ZSgpO3QubWF0NC5vcnRobyhuLDAsdGhpcy53aWR0aCx0aGlzLmhlaWdodCwwLDAsMSksdC5tYXQ0LnNjYWxlKG4sbixbci5kcmF3aW5nQnVmZmVyV2lkdGgsci5kcmF3aW5nQnVmZmVySGVpZ2h0LDBdKTt2YXIgaT10aGlzLnVzZVByb2dyYW0oImNsaXBwaW5nTWFzayIpO3IudW5pZm9ybU1hdHJpeDRmdihpLnVuaWZvcm1zLnVfbWF0cml4LCExLG4pLHRoaXMudmlld3BvcnRWQU8uYmluZChlLGksdGhpcy52aWV3cG9ydEJ1ZmZlcixbXSksci5kcmF3QXJyYXlzKHIuVFJJQU5HTEVfU1RSSVAsMCw0KX0senIucHJvdG90eXBlLl9yZW5kZXJUaWxlQ2xpcHBpbmdNYXNrcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmNvbnRleHQscj1lLmdsO2Uuc2V0Q29sb3JNb2RlKEd0LmRpc2FibGVkKSxlLnNldERlcHRoTW9kZShxdC5kaXNhYmxlZCk7dmFyIG49MTt0aGlzLl90aWxlQ2xpcHBpbmdNYXNrSURzPXt9O2Zvcih2YXIgaT0wLGE9dDtpPGEubGVuZ3RoO2krPTEpe3ZhciBvPWFbaV0scz10aGlzLl90aWxlQ2xpcHBpbmdNYXNrSURzW28ua2V5XT1uKys7ZS5zZXRTdGVuY2lsTW9kZShuZXcgSHQoe2Z1bmM6ci5BTFdBWVMsbWFzazowfSxzLDI1NSxyLktFRVAsci5LRUVQLHIuUkVQTEFDRSkpO3ZhciBsPXRoaXMudXNlUHJvZ3JhbSgiY2xpcHBpbmdNYXNrIik7ci51bmlmb3JtTWF0cml4NGZ2KGwudW5pZm9ybXMudV9tYXRyaXgsITEsby5wb3NNYXRyaXgpLHRoaXMudGlsZUV4dGVudFZBTy5iaW5kKHRoaXMuY29udGV4dCxsLHRoaXMudGlsZUV4dGVudEJ1ZmZlcixbXSksci5kcmF3QXJyYXlzKHIuVFJJQU5HTEVfU1RSSVAsMCx0aGlzLnRpbGVFeHRlbnRCdWZmZXIubGVuZ3RoKX19LHpyLnByb3RvdHlwZS5zdGVuY2lsTW9kZUZvckNsaXBwaW5nPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY29udGV4dC5nbDtyZXR1cm4gbmV3IEh0KHtmdW5jOmUuRVFVQUwsbWFzazoyNTV9LHRoaXMuX3RpbGVDbGlwcGluZ01hc2tJRHNbdC5rZXldLDAsZS5LRUVQLGUuS0VFUCxlLlJFUExBQ0UpfSx6ci5wcm90b3R5cGUuY29sb3JNb2RlRm9yUmVuZGVyUGFzcz1mdW5jdGlvbigpe3ZhciBlPXRoaXMuY29udGV4dC5nbDtyZXR1cm4gdGhpcy5fc2hvd092ZXJkcmF3SW5zcGVjdG9yP25ldyBHdChbZS5DT05TVEFOVF9DT0xPUixlLk9ORV0sbmV3IHQuZGVmYXVsdCQ2KDEvOCwxLzgsMS84LDApLFshMCwhMCwhMCwhMF0pOiJvcGFxdWUiPT09dGhpcy5yZW5kZXJQYXNzP0d0LnVuYmxlbmRlZDpHdC5hbHBoYUJsZW5kZWR9LHpyLnByb3RvdHlwZS5kZXB0aE1vZGVGb3JTdWJsYXllcj1mdW5jdGlvbih0LGUscil7dmFyIG49MS0oKDErdGhpcy5jdXJyZW50TGF5ZXIpKnRoaXMubnVtU3VibGF5ZXJzK3QpKnRoaXMuZGVwdGhFcHNpbG9uLGk9bi0xK3RoaXMuZGVwdGhSYW5nZTtyZXR1cm4gbmV3IHF0KHJ8fHRoaXMuY29udGV4dC5nbC5MRVFVQUwsZSxbaSxuXSl9LHpyLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzO2Zvcih2YXIgaSBpbiB0aGlzLnN0eWxlPWUsdGhpcy5vcHRpb25zPXIsdGhpcy5saW5lQXRsYXM9ZS5saW5lQXRsYXMsdGhpcy5pbWFnZU1hbmFnZXI9ZS5pbWFnZU1hbmFnZXIsdGhpcy5nbHlwaE1hbmFnZXI9ZS5nbHlwaE1hbmFnZXIsdGhpcy5zeW1ib2xGYWRlQ2hhbmdlPWUucGxhY2VtZW50LnN5bWJvbEZhZGVDaGFuZ2UoYS5ub3coKSksZS5zb3VyY2VDYWNoZXMpe3ZhciBvPW4uc3R5bGUuc291cmNlQ2FjaGVzW2ldO28udXNlZCYmby5wcmVwYXJlKG4uY29udGV4dCl9dmFyIHM9dGhpcy5zdHlsZS5fb3JkZXIsbD10LmZpbHRlck9iamVjdCh0aGlzLnN0eWxlLnNvdXJjZUNhY2hlcyxmdW5jdGlvbih0KXtyZXR1cm4icmFzdGVyIj09PXQuZ2V0U291cmNlKCkudHlwZXx8InJhc3Rlci1kZW0iPT09dC5nZXRTb3VyY2UoKS50eXBlfSksYz1mdW5jdGlvbihlKXt2YXIgcj1sW2VdOyFmdW5jdGlvbihlLHIpe2Zvcih2YXIgbj1lLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC50aWxlSUQuaXNMZXNzVGhhbihlLnRpbGVJRCk/LTE6ZS50aWxlSUQuaXNMZXNzVGhhbih0LnRpbGVJRCk/MTowfSksaT0wO2k8bi5sZW5ndGg7aSsrKXt2YXIgYT17fSxvPW5baV0scz1uLnNsaWNlKGkrMSk7YXIoby50aWxlSUQud3JhcHBlZCgpLG8udGlsZUlELHMsbmV3IHQuT3ZlcnNjYWxlZFRpbGVJRCgwLG8udGlsZUlELndyYXArMSwwLDAsMCksYSksby5zZXRNYXNrKGEscil9fShyLmdldFZpc2libGVDb29yZGluYXRlcygpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gci5nZXRUaWxlKHQpfSksbi5jb250ZXh0KX07Zm9yKHZhciB1IGluIGwpYyh1KTt0aGlzLnJlbmRlclBhc3M9Im9mZnNjcmVlbiI7dmFyIGgsZj1bXTt0aGlzLmRlcHRoUmJvTmVlZHNDbGVhcj0hMDtmb3IodmFyIHA9MDtwPHMubGVuZ3RoO3ArKyl7dmFyIGQ9bi5zdHlsZS5fbGF5ZXJzW3NbcF1dO2QuaGFzT2Zmc2NyZWVuUGFzcygpJiYhZC5pc0hpZGRlbihuLnRyYW5zZm9ybS56b29tKSYmKGQuc291cmNlIT09KGgmJmguaWQpJiYoZj1bXSwoaD1uLnN0eWxlLnNvdXJjZUNhY2hlc1tkLnNvdXJjZV0pJiYoZj1oLmdldFZpc2libGVDb29yZGluYXRlcygpKS5yZXZlcnNlKCkpLGYubGVuZ3RoJiZuLnJlbmRlckxheWVyKG4saCxkLGYpKX10aGlzLmNvbnRleHQuYmluZEZyYW1lYnVmZmVyLnNldChudWxsKSx0aGlzLmNvbnRleHQuY2xlYXIoe2NvbG9yOnIuc2hvd092ZXJkcmF3SW5zcGVjdG9yP3QuZGVmYXVsdCQ2LmJsYWNrOnQuZGVmYXVsdCQ2LnRyYW5zcGFyZW50LGRlcHRoOjF9KSx0aGlzLl9zaG93T3ZlcmRyYXdJbnNwZWN0b3I9ci5zaG93T3ZlcmRyYXdJbnNwZWN0b3IsdGhpcy5kZXB0aFJhbmdlPShlLl9vcmRlci5sZW5ndGgrMikqdGhpcy5udW1TdWJsYXllcnMqdGhpcy5kZXB0aEVwc2lsb24sdGhpcy5yZW5kZXJQYXNzPSJvcGFxdWUiO3ZhciBnLG09W107Zm9yKHRoaXMuY3VycmVudExheWVyPXMubGVuZ3RoLTEsdGhpcy5jdXJyZW50TGF5ZXI7dGhpcy5jdXJyZW50TGF5ZXI+PTA7dGhpcy5jdXJyZW50TGF5ZXItLSl7dmFyIHY9bi5zdHlsZS5fbGF5ZXJzW3Nbbi5jdXJyZW50TGF5ZXJdXTt2LnNvdXJjZSE9PShnJiZnLmlkKSYmKG09W10sKGc9bi5zdHlsZS5zb3VyY2VDYWNoZXNbdi5zb3VyY2VdKSYmKG4uY2xlYXJTdGVuY2lsKCksbT1nLmdldFZpc2libGVDb29yZGluYXRlcygpLGcuZ2V0U291cmNlKCkuaXNUaWxlQ2xpcHBlZCYmbi5fcmVuZGVyVGlsZUNsaXBwaW5nTWFza3MobSkpKSxuLnJlbmRlckxheWVyKG4sZyx2LG0pfXRoaXMucmVuZGVyUGFzcz0idHJhbnNsdWNlbnQiO3ZhciB5LHg9W107Zm9yKHRoaXMuY3VycmVudExheWVyPTAsdGhpcy5jdXJyZW50TGF5ZXI7dGhpcy5jdXJyZW50TGF5ZXI8cy5sZW5ndGg7dGhpcy5jdXJyZW50TGF5ZXIrKyl7dmFyIGI9bi5zdHlsZS5fbGF5ZXJzW3Nbbi5jdXJyZW50TGF5ZXJdXTtiLnNvdXJjZSE9PSh5JiZ5LmlkKSYmKHg9W10sKHk9bi5zdHlsZS5zb3VyY2VDYWNoZXNbYi5zb3VyY2VdKSYmKG4uY2xlYXJTdGVuY2lsKCkseD15LmdldFZpc2libGVDb29yZGluYXRlcygpLHkuZ2V0U291cmNlKCkuaXNUaWxlQ2xpcHBlZCYmbi5fcmVuZGVyVGlsZUNsaXBwaW5nTWFza3MoeCkpLHgucmV2ZXJzZSgpKSxuLnJlbmRlckxheWVyKG4seSxiLHgpfWlmKHRoaXMub3B0aW9ucy5zaG93VGlsZUJvdW5kYXJpZXMpe3ZhciBfPXRoaXMuc3R5bGUuc291cmNlQ2FjaGVzW09iamVjdC5rZXlzKHRoaXMuc3R5bGUuc291cmNlQ2FjaGVzKVswXV07XyYmTHIuZGVidWcodGhpcyxfLF8uZ2V0VmlzaWJsZUNvb3JkaW5hdGVzKCkpfX0senIucHJvdG90eXBlLnNldHVwT2Zmc2NyZWVuRGVwdGhSZW5kZXJidWZmZXI9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmNvbnRleHQ7dGhpcy5kZXB0aFJib3x8KHRoaXMuZGVwdGhSYm89dC5jcmVhdGVSZW5kZXJidWZmZXIodC5nbC5ERVBUSF9DT01QT05FTlQxNix0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KSl9LHpyLnByb3RvdHlwZS5yZW5kZXJMYXllcj1mdW5jdGlvbih0LGUscixuKXtyLmlzSGlkZGVuKHRoaXMudHJhbnNmb3JtLnpvb20pfHwoImJhY2tncm91bmQiPT09ci50eXBlfHxuLmxlbmd0aCkmJih0aGlzLmlkPXIuaWQsTHJbci50eXBlXSh0LGUscixuKSl9LHpyLnByb3RvdHlwZS50cmFuc2xhdGVQb3NNYXRyaXg9ZnVuY3Rpb24oZSxyLG4saSxhKXtpZighblswXSYmIW5bMV0pcmV0dXJuIGU7dmFyIG89YT8ibWFwIj09PWk/dGhpcy50cmFuc2Zvcm0uYW5nbGU6MDoidmlld3BvcnQiPT09aT8tdGhpcy50cmFuc2Zvcm0uYW5nbGU6MDtpZihvKXt2YXIgcz1NYXRoLnNpbihvKSxsPU1hdGguY29zKG8pO249W25bMF0qbC1uWzFdKnMsblswXSpzK25bMV0qbF19dmFyIGM9W2E/blswXTpUZShyLG5bMF0sdGhpcy50cmFuc2Zvcm0uem9vbSksYT9uWzFdOlRlKHIsblsxXSx0aGlzLnRyYW5zZm9ybS56b29tKSwwXSx1PW5ldyBGbG9hdDMyQXJyYXkoMTYpO3JldHVybiB0Lm1hdDQudHJhbnNsYXRlKHUsZSxjKSx1fSx6ci5wcm90b3R5cGUuc2F2ZVRpbGVUZXh0dXJlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3RpbGVUZXh0dXJlc1t0LnNpemVbMF1dO2U/ZS5wdXNoKHQpOnRoaXMuX3RpbGVUZXh0dXJlc1t0LnNpemVbMF1dPVt0XX0senIucHJvdG90eXBlLmdldFRpbGVUZXh0dXJlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3RpbGVUZXh0dXJlc1t0XTtyZXR1cm4gZSYmZS5sZW5ndGg+MD9lLnBvcCgpOm51bGx9LHpyLnByb3RvdHlwZS5fY3JlYXRlUHJvZ3JhbUNhY2hlZD1mdW5jdGlvbih0LGUpe3RoaXMuY2FjaGU9dGhpcy5jYWNoZXx8e307dmFyIHI9IiIrdCsoZS5jYWNoZUtleXx8IiIpKyh0aGlzLl9zaG93T3ZlcmRyYXdJbnNwZWN0b3I/Ii9vdmVyZHJhdyI6IiIpO3JldHVybiB0aGlzLmNhY2hlW3JdfHwodGhpcy5jYWNoZVtyXT1uZXcgaXIodGhpcy5jb250ZXh0LG5yW3RdLGUsdGhpcy5fc2hvd092ZXJkcmF3SW5zcGVjdG9yKSksdGhpcy5jYWNoZVtyXX0senIucHJvdG90eXBlLnVzZVByb2dyYW09ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl9jcmVhdGVQcm9ncmFtQ2FjaGVkKHQsZXx8dGhpcy5lbXB0eVByb2dyYW1Db25maWd1cmF0aW9uKTtyZXR1cm4gdGhpcy5jb250ZXh0LnByb2dyYW0uc2V0KHIucHJvZ3JhbSkscn07dmFyIERyPXQuZGVmYXVsdCQyMC52ZWM0LFJyPXQuZGVmYXVsdCQyMC5tYXQ0LEJyPXQuZGVmYXVsdCQyMC5tYXQyLEZyPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnRpbGVTaXplPTUxMix0aGlzLl9yZW5kZXJXb3JsZENvcGllcz12b2lkIDA9PT1yfHxyLHRoaXMuX21pblpvb209dHx8MCx0aGlzLl9tYXhab29tPWV8fDIyLHRoaXMubGF0UmFuZ2U9Wy04NS4wNTExMyw4NS4wNTExM10sdGhpcy53aWR0aD0wLHRoaXMuaGVpZ2h0PTAsdGhpcy5fY2VudGVyPW5ldyBHKDAsMCksdGhpcy56b29tPTAsdGhpcy5hbmdsZT0wLHRoaXMuX2Zvdj0uNjQzNTAxMTA4NzkzMjg0NCx0aGlzLl9waXRjaD0wLHRoaXMuX3VubW9kaWZpZWQ9ITAsdGhpcy5fcG9zTWF0cml4Q2FjaGU9e30sdGhpcy5fYWxpZ25lZFBvc01hdHJpeENhY2hlPXt9fSxOcj17bWluWm9vbTp7Y29uZmlndXJhYmxlOiEwfSxtYXhab29tOntjb25maWd1cmFibGU6ITB9LHJlbmRlcldvcmxkQ29waWVzOntjb25maWd1cmFibGU6ITB9LHdvcmxkU2l6ZTp7Y29uZmlndXJhYmxlOiEwfSxjZW50ZXJQb2ludDp7Y29uZmlndXJhYmxlOiEwfSxzaXplOntjb25maWd1cmFibGU6ITB9LGJlYXJpbmc6e2NvbmZpZ3VyYWJsZTohMH0scGl0Y2g6e2NvbmZpZ3VyYWJsZTohMH0sZm92Ontjb25maWd1cmFibGU6ITB9LHpvb206e2NvbmZpZ3VyYWJsZTohMH0sY2VudGVyOntjb25maWd1cmFibGU6ITB9LHVubW9kaWZpZWQ6e2NvbmZpZ3VyYWJsZTohMH0seDp7Y29uZmlndXJhYmxlOiEwfSx5Ontjb25maWd1cmFibGU6ITB9LHBvaW50Ontjb25maWd1cmFibGU6ITB9fTtGci5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgRnIodGhpcy5fbWluWm9vbSx0aGlzLl9tYXhab29tLHRoaXMuX3JlbmRlcldvcmxkQ29waWVzKTtyZXR1cm4gdC50aWxlU2l6ZT10aGlzLnRpbGVTaXplLHQubGF0UmFuZ2U9dGhpcy5sYXRSYW5nZSx0LndpZHRoPXRoaXMud2lkdGgsdC5oZWlnaHQ9dGhpcy5oZWlnaHQsdC5fY2VudGVyPXRoaXMuX2NlbnRlcix0Lnpvb209dGhpcy56b29tLHQuYW5nbGU9dGhpcy5hbmdsZSx0Ll9mb3Y9dGhpcy5fZm92LHQuX3BpdGNoPXRoaXMuX3BpdGNoLHQuX3VubW9kaWZpZWQ9dGhpcy5fdW5tb2RpZmllZCx0Ll9jYWxjTWF0cmljZXMoKSx0fSxOci5taW5ab29tLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9taW5ab29tfSxOci5taW5ab29tLnNldD1mdW5jdGlvbih0KXt0aGlzLl9taW5ab29tIT09dCYmKHRoaXMuX21pblpvb209dCx0aGlzLnpvb209TWF0aC5tYXgodGhpcy56b29tLHQpKX0sTnIubWF4Wm9vbS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWF4Wm9vbX0sTnIubWF4Wm9vbS5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fbWF4Wm9vbSE9PXQmJih0aGlzLl9tYXhab29tPXQsdGhpcy56b29tPU1hdGgubWluKHRoaXMuem9vbSx0KSl9LE5yLnJlbmRlcldvcmxkQ29waWVzLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZW5kZXJXb3JsZENvcGllc30sTnIucmVuZGVyV29ybGRDb3BpZXMuc2V0PWZ1bmN0aW9uKHQpe3ZvaWQgMD09PXQ/dD0hMDpudWxsPT09dCYmKHQ9ITEpLHRoaXMuX3JlbmRlcldvcmxkQ29waWVzPXR9LE5yLndvcmxkU2l6ZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50aWxlU2l6ZSp0aGlzLnNjYWxlfSxOci5jZW50ZXJQb2ludC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaXplLl9kaXYoMil9LE5yLnNpemUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0LmRlZmF1bHQkMSh0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KX0sTnIuYmVhcmluZy5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4tdGhpcy5hbmdsZS9NYXRoLlBJKjE4MH0sTnIuYmVhcmluZy5zZXQ9ZnVuY3Rpb24oZSl7dmFyIHI9LXQud3JhcChlLC0xODAsMTgwKSpNYXRoLlBJLzE4MDt0aGlzLmFuZ2xlIT09ciYmKHRoaXMuX3VubW9kaWZpZWQ9ITEsdGhpcy5hbmdsZT1yLHRoaXMuX2NhbGNNYXRyaWNlcygpLHRoaXMucm90YXRpb25NYXRyaXg9QnIuY3JlYXRlKCksQnIucm90YXRlKHRoaXMucm90YXRpb25NYXRyaXgsdGhpcy5yb3RhdGlvbk1hdHJpeCx0aGlzLmFuZ2xlKSl9LE5yLnBpdGNoLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9waXRjaC9NYXRoLlBJKjE4MH0sTnIucGl0Y2guc2V0PWZ1bmN0aW9uKGUpe3ZhciByPXQuY2xhbXAoZSwwLDYwKS8xODAqTWF0aC5QSTt0aGlzLl9waXRjaCE9PXImJih0aGlzLl91bm1vZGlmaWVkPSExLHRoaXMuX3BpdGNoPXIsdGhpcy5fY2FsY01hdHJpY2VzKCkpfSxOci5mb3YuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Zvdi9NYXRoLlBJKjE4MH0sTnIuZm92LnNldD1mdW5jdGlvbih0KXt0PU1hdGgubWF4KC4wMSxNYXRoLm1pbig2MCx0KSksdGhpcy5fZm92IT09dCYmKHRoaXMuX3VubW9kaWZpZWQ9ITEsdGhpcy5fZm92PXQvMTgwKk1hdGguUEksdGhpcy5fY2FsY01hdHJpY2VzKCkpfSxOci56b29tLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl96b29tfSxOci56b29tLnNldD1mdW5jdGlvbih0KXt2YXIgZT1NYXRoLm1pbihNYXRoLm1heCh0LHRoaXMubWluWm9vbSksdGhpcy5tYXhab29tKTt0aGlzLl96b29tIT09ZSYmKHRoaXMuX3VubW9kaWZpZWQ9ITEsdGhpcy5fem9vbT1lLHRoaXMuc2NhbGU9dGhpcy56b29tU2NhbGUoZSksdGhpcy50aWxlWm9vbT1NYXRoLmZsb29yKGUpLHRoaXMuem9vbUZyYWN0aW9uPWUtdGhpcy50aWxlWm9vbSx0aGlzLl9jb25zdHJhaW4oKSx0aGlzLl9jYWxjTWF0cmljZXMoKSl9LE5yLmNlbnRlci5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2VudGVyfSxOci5jZW50ZXIuc2V0PWZ1bmN0aW9uKHQpe3QubGF0PT09dGhpcy5fY2VudGVyLmxhdCYmdC5sbmc9PT10aGlzLl9jZW50ZXIubG5nfHwodGhpcy5fdW5tb2RpZmllZD0hMSx0aGlzLl9jZW50ZXI9dCx0aGlzLl9jb25zdHJhaW4oKSx0aGlzLl9jYWxjTWF0cmljZXMoKSl9LEZyLnByb3RvdHlwZS5jb3ZlcmluZ1pvb21MZXZlbD1mdW5jdGlvbih0KXtyZXR1cm4odC5yb3VuZFpvb20/TWF0aC5yb3VuZDpNYXRoLmZsb29yKSh0aGlzLnpvb20rdGhpcy5zY2FsZVpvb20odGhpcy50aWxlU2l6ZS90LnRpbGVTaXplKSl9LEZyLnByb3RvdHlwZS5nZXRWaXNpYmxlVW53cmFwcGVkQ29vcmRpbmF0ZXM9ZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5wb2ludENvb3JkaW5hdGUobmV3IHQuZGVmYXVsdCQxKDAsMCksMCksbj10aGlzLnBvaW50Q29vcmRpbmF0ZShuZXcgdC5kZWZhdWx0JDEodGhpcy53aWR0aCwwKSwwKSxpPU1hdGguZmxvb3Ioci5jb2x1bW4pLGE9TWF0aC5mbG9vcihuLmNvbHVtbiksbz1bbmV3IHQuVW53cmFwcGVkVGlsZUlEKDAsZSldO2lmKHRoaXMuX3JlbmRlcldvcmxkQ29waWVzKWZvcih2YXIgcz1pO3M8PWE7cysrKTAhPT1zJiZvLnB1c2gobmV3IHQuVW53cmFwcGVkVGlsZUlEKHMsZSkpO3JldHVybiBvfSxGci5wcm90b3R5cGUuY292ZXJpbmdUaWxlcz1mdW5jdGlvbihlKXt2YXIgcj10aGlzLmNvdmVyaW5nWm9vbUxldmVsKGUpLG49cjtpZih2b2lkIDAhPT1lLm1pbnpvb20mJnI8ZS5taW56b29tKXJldHVybltdO3ZvaWQgMCE9PWUubWF4em9vbSYmcj5lLm1heHpvb20mJihyPWUubWF4em9vbSk7dmFyIGk9dGhpcy5wb2ludENvb3JkaW5hdGUodGhpcy5jZW50ZXJQb2ludCxyKSxhPW5ldyB0LmRlZmF1bHQkMShpLmNvbHVtbi0uNSxpLnJvdy0uNSk7cmV0dXJuIGZ1bmN0aW9uKGUscixuLGkpe3ZvaWQgMD09PWkmJihpPSEwKTt2YXIgYT0xPDxlLG89e307ZnVuY3Rpb24gcyhyLHMsbCl7dmFyIGMsdSxoLGY7aWYobD49MCYmbDw9YSlmb3IoYz1yO2M8cztjKyspdT1NYXRoLmZsb29yKGMvYSksaD0oYyVhK2EpJWEsMCE9PXUmJiEwIT09aXx8KGY9bmV3IHQuT3ZlcnNjYWxlZFRpbGVJRChuLHUsZSxoLGwpLG9bZi5rZXldPWYpfXJldHVybiBPcihyWzBdLHJbMV0sclsyXSwwLGEscyksT3IoclsyXSxyWzNdLHJbMF0sMCxhLHMpLE9iamVjdC5rZXlzKG8pLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gb1t0XX0pfShyLFt0aGlzLnBvaW50Q29vcmRpbmF0ZShuZXcgdC5kZWZhdWx0JDEoMCwwKSxyKSx0aGlzLnBvaW50Q29vcmRpbmF0ZShuZXcgdC5kZWZhdWx0JDEodGhpcy53aWR0aCwwKSxyKSx0aGlzLnBvaW50Q29vcmRpbmF0ZShuZXcgdC5kZWZhdWx0JDEodGhpcy53aWR0aCx0aGlzLmhlaWdodCksciksdGhpcy5wb2ludENvb3JkaW5hdGUobmV3IHQuZGVmYXVsdCQxKDAsdGhpcy5oZWlnaHQpLHIpXSxlLnJlcGFyc2VPdmVyc2NhbGVkP246cix0aGlzLl9yZW5kZXJXb3JsZENvcGllcykuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiBhLmRpc3QodC5jYW5vbmljYWwpLWEuZGlzdChlLmNhbm9uaWNhbCl9KX0sRnIucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbih0LGUpe3RoaXMud2lkdGg9dCx0aGlzLmhlaWdodD1lLHRoaXMucGl4ZWxzVG9HTFVuaXRzPVsyL3QsLTIvZV0sdGhpcy5fY29uc3RyYWluKCksdGhpcy5fY2FsY01hdHJpY2VzKCl9LE5yLnVubW9kaWZpZWQuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3VubW9kaWZpZWR9LEZyLnByb3RvdHlwZS56b29tU2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucG93KDIsdCl9LEZyLnByb3RvdHlwZS5zY2FsZVpvb209ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubG9nKHQpL01hdGguTE4yfSxGci5wcm90b3R5cGUucHJvamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IHQuZGVmYXVsdCQxKHRoaXMubG5nWChlLmxuZyksdGhpcy5sYXRZKGUubGF0KSl9LEZyLnByb3RvdHlwZS51bnByb2plY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBHKHRoaXMueExuZyh0LngpLHRoaXMueUxhdCh0LnkpKX0sTnIueC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sbmdYKHRoaXMuY2VudGVyLmxuZyl9LE5yLnkuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGF0WSh0aGlzLmNlbnRlci5sYXQpfSxOci5wb2ludC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHQuZGVmYXVsdCQxKHRoaXMueCx0aGlzLnkpfSxGci5wcm90b3R5cGUubG5nWD1mdW5jdGlvbih0KXtyZXR1cm4oMTgwK3QpKnRoaXMud29ybGRTaXplLzM2MH0sRnIucHJvdG90eXBlLmxhdFk9ZnVuY3Rpb24odCl7cmV0dXJuKDE4MC0xODAvTWF0aC5QSSpNYXRoLmxvZyhNYXRoLnRhbihNYXRoLlBJLzQrdCpNYXRoLlBJLzM2MCkpKSp0aGlzLndvcmxkU2l6ZS8zNjB9LEZyLnByb3RvdHlwZS54TG5nPWZ1bmN0aW9uKHQpe3JldHVybiAzNjAqdC90aGlzLndvcmxkU2l6ZS0xODB9LEZyLnByb3RvdHlwZS55TGF0PWZ1bmN0aW9uKHQpe3ZhciBlPTE4MC0zNjAqdC90aGlzLndvcmxkU2l6ZTtyZXR1cm4gMzYwL01hdGguUEkqTWF0aC5hdGFuKE1hdGguZXhwKGUqTWF0aC5QSS8xODApKS05MH0sRnIucHJvdG90eXBlLnNldExvY2F0aW9uQXRQb2ludD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMucG9pbnRDb29yZGluYXRlKGUpLl9zdWIodGhpcy5wb2ludENvb3JkaW5hdGUodGhpcy5jZW50ZXJQb2ludCkpO3RoaXMuY2VudGVyPXRoaXMuY29vcmRpbmF0ZUxvY2F0aW9uKHRoaXMubG9jYXRpb25Db29yZGluYXRlKHQpLl9zdWIocikpLHRoaXMuX3JlbmRlcldvcmxkQ29waWVzJiYodGhpcy5jZW50ZXI9dGhpcy5jZW50ZXIud3JhcCgpKX0sRnIucHJvdG90eXBlLmxvY2F0aW9uUG9pbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY29vcmRpbmF0ZVBvaW50KHRoaXMubG9jYXRpb25Db29yZGluYXRlKHQpKX0sRnIucHJvdG90eXBlLnBvaW50TG9jYXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY29vcmRpbmF0ZUxvY2F0aW9uKHRoaXMucG9pbnRDb29yZGluYXRlKHQpKX0sRnIucHJvdG90eXBlLmxvY2F0aW9uQ29vcmRpbmF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IHQuZGVmYXVsdCQxNyh0aGlzLmxuZ1goZS5sbmcpL3RoaXMudGlsZVNpemUsdGhpcy5sYXRZKGUubGF0KS90aGlzLnRpbGVTaXplLHRoaXMuem9vbSkuem9vbVRvKHRoaXMudGlsZVpvb20pfSxGci5wcm90b3R5cGUuY29vcmRpbmF0ZUxvY2F0aW9uPWZ1bmN0aW9uKHQpe3ZhciBlPXQuem9vbVRvKHRoaXMuem9vbSk7cmV0dXJuIG5ldyBHKHRoaXMueExuZyhlLmNvbHVtbip0aGlzLnRpbGVTaXplKSx0aGlzLnlMYXQoZS5yb3cqdGhpcy50aWxlU2l6ZSkpfSxGci5wcm90b3R5cGUucG9pbnRDb29yZGluYXRlPWZ1bmN0aW9uKGUscil7dm9pZCAwPT09ciYmKHI9dGhpcy50aWxlWm9vbSk7dmFyIG49W2UueCxlLnksMCwxXSxpPVtlLngsZS55LDEsMV07RHIudHJhbnNmb3JtTWF0NChuLG4sdGhpcy5waXhlbE1hdHJpeEludmVyc2UpLERyLnRyYW5zZm9ybU1hdDQoaSxpLHRoaXMucGl4ZWxNYXRyaXhJbnZlcnNlKTt2YXIgYT1uWzNdLG89aVszXSxzPW5bMF0vYSxsPWlbMF0vbyxjPW5bMV0vYSx1PWlbMV0vbyxoPW5bMl0vYSxmPWlbMl0vbyxwPWg9PT1mPzA6KDAtaCkvKGYtaCk7cmV0dXJuIG5ldyB0LmRlZmF1bHQkMTcodC5udW1iZXIocyxsLHApL3RoaXMudGlsZVNpemUsdC5udW1iZXIoYyx1LHApL3RoaXMudGlsZVNpemUsdGhpcy56b29tKS5fem9vbVRvKHIpfSxGci5wcm90b3R5cGUuY29vcmRpbmF0ZVBvaW50PWZ1bmN0aW9uKGUpe3ZhciByPWUuem9vbVRvKHRoaXMuem9vbSksbj1bci5jb2x1bW4qdGhpcy50aWxlU2l6ZSxyLnJvdyp0aGlzLnRpbGVTaXplLDAsMV07cmV0dXJuIERyLnRyYW5zZm9ybU1hdDQobixuLHRoaXMucGl4ZWxNYXRyaXgpLG5ldyB0LmRlZmF1bHQkMShuWzBdL25bM10sblsxXS9uWzNdKX0sRnIucHJvdG90eXBlLmNhbGN1bGF0ZVBvc01hdHJpeD1mdW5jdGlvbihlLHIpe3ZvaWQgMD09PXImJihyPSExKTt2YXIgbj1lLmtleSxpPXI/dGhpcy5fYWxpZ25lZFBvc01hdHJpeENhY2hlOnRoaXMuX3Bvc01hdHJpeENhY2hlO2lmKGlbbl0pcmV0dXJuIGlbbl07dmFyIGE9ZS5jYW5vbmljYWwsbz10aGlzLndvcmxkU2l6ZS90aGlzLnpvb21TY2FsZShhLnopLHM9YS54K01hdGgucG93KDIsYS56KSplLndyYXAsbD1Sci5pZGVudGl0eShuZXcgRmxvYXQ2NEFycmF5KDE2KSk7cmV0dXJuIFJyLnRyYW5zbGF0ZShsLGwsW3MqbyxhLnkqbywwXSksUnIuc2NhbGUobCxsLFtvL3QuZGVmYXVsdCQ4LG8vdC5kZWZhdWx0JDgsMV0pLFJyLm11bHRpcGx5KGwscj90aGlzLmFsaWduZWRQcm9qTWF0cml4OnRoaXMucHJvak1hdHJpeCxsKSxpW25dPW5ldyBGbG9hdDMyQXJyYXkobCksaVtuXX0sRnIucHJvdG90eXBlLl9jb25zdHJhaW49ZnVuY3Rpb24oKXtpZih0aGlzLmNlbnRlciYmdGhpcy53aWR0aCYmdGhpcy5oZWlnaHQmJiF0aGlzLl9jb25zdHJhaW5pbmcpe3RoaXMuX2NvbnN0cmFpbmluZz0hMDt2YXIgZSxyLG4saSxhPS05MCxvPTkwLHM9LTE4MCxsPTE4MCxjPXRoaXMuc2l6ZSx1PXRoaXMuX3VubW9kaWZpZWQ7aWYodGhpcy5sYXRSYW5nZSl7dmFyIGg9dGhpcy5sYXRSYW5nZTthPXRoaXMubGF0WShoWzFdKSxlPShvPXRoaXMubGF0WShoWzBdKSktYTxjLnk/Yy55LyhvLWEpOjB9aWYodGhpcy5sbmdSYW5nZSl7dmFyIGY9dGhpcy5sbmdSYW5nZTtzPXRoaXMubG5nWChmWzBdKSxyPShsPXRoaXMubG5nWChmWzFdKSktczxjLng/Yy54LyhsLXMpOjB9dmFyIHA9TWF0aC5tYXgocnx8MCxlfHwwKTtpZihwKXJldHVybiB0aGlzLmNlbnRlcj10aGlzLnVucHJvamVjdChuZXcgdC5kZWZhdWx0JDEocj8obCtzKS8yOnRoaXMueCxlPyhvK2EpLzI6dGhpcy55KSksdGhpcy56b29tKz10aGlzLnNjYWxlWm9vbShwKSx0aGlzLl91bm1vZGlmaWVkPXUsdm9pZCh0aGlzLl9jb25zdHJhaW5pbmc9ITEpO2lmKHRoaXMubGF0UmFuZ2Upe3ZhciBkPXRoaXMueSxnPWMueS8yO2QtZzxhJiYoaT1hK2cpLGQrZz5vJiYoaT1vLWcpfWlmKHRoaXMubG5nUmFuZ2Upe3ZhciBtPXRoaXMueCx2PWMueC8yO20tdjxzJiYobj1zK3YpLG0rdj5sJiYobj1sLXYpfXZvaWQgMD09PW4mJnZvaWQgMD09PWl8fCh0aGlzLmNlbnRlcj10aGlzLnVucHJvamVjdChuZXcgdC5kZWZhdWx0JDEodm9pZCAwIT09bj9uOnRoaXMueCx2b2lkIDAhPT1pP2k6dGhpcy55KSkpLHRoaXMuX3VubW9kaWZpZWQ9dSx0aGlzLl9jb25zdHJhaW5pbmc9ITF9fSxGci5wcm90b3R5cGUuX2NhbGNNYXRyaWNlcz1mdW5jdGlvbigpe2lmKHRoaXMuaGVpZ2h0KXt0aGlzLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2U9LjUvTWF0aC50YW4odGhpcy5fZm92LzIpKnRoaXMuaGVpZ2h0O3ZhciB0PXRoaXMuX2Zvdi8yLGU9TWF0aC5QSS8yK3RoaXMuX3BpdGNoLHI9TWF0aC5zaW4odCkqdGhpcy5jYW1lcmFUb0NlbnRlckRpc3RhbmNlL01hdGguc2luKE1hdGguUEktZS10KSxuPXRoaXMueCxpPXRoaXMueSxhPTEuMDEqKE1hdGguY29zKE1hdGguUEkvMi10aGlzLl9waXRjaCkqcit0aGlzLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2UpLG89bmV3IEZsb2F0NjRBcnJheSgxNik7UnIucGVyc3BlY3RpdmUobyx0aGlzLl9mb3YsdGhpcy53aWR0aC90aGlzLmhlaWdodCwxLGEpLFJyLnNjYWxlKG8sbyxbMSwtMSwxXSksUnIudHJhbnNsYXRlKG8sbyxbMCwwLC10aGlzLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2VdKSxSci5yb3RhdGVYKG8sbyx0aGlzLl9waXRjaCksUnIucm90YXRlWihvLG8sdGhpcy5hbmdsZSksUnIudHJhbnNsYXRlKG8sbyxbLW4sLWksMF0pO3ZhciBzPXRoaXMud29ybGRTaXplLygyKk1hdGguUEkqNjM3ODEzNypNYXRoLmFicyhNYXRoLmNvcyh0aGlzLmNlbnRlci5sYXQqKE1hdGguUEkvMTgwKSkpKTtSci5zY2FsZShvLG8sWzEsMSxzLDFdKSx0aGlzLnByb2pNYXRyaXg9bzt2YXIgbD10aGlzLndpZHRoJTIvMixjPXRoaXMuaGVpZ2h0JTIvMix1PU1hdGguY29zKHRoaXMuYW5nbGUpLGg9TWF0aC5zaW4odGhpcy5hbmdsZSksZj1uLU1hdGgucm91bmQobikrdSpsK2gqYyxwPWktTWF0aC5yb3VuZChpKSt1KmMraCpsLGQ9bmV3IEZsb2F0NjRBcnJheShvKTtpZihSci50cmFuc2xhdGUoZCxkLFtmPi41P2YtMTpmLHA+LjU/cC0xOnAsMF0pLHRoaXMuYWxpZ25lZFByb2pNYXRyaXg9ZCxvPVJyLmNyZWF0ZSgpLFJyLnNjYWxlKG8sbyxbdGhpcy53aWR0aC8yLC10aGlzLmhlaWdodC8yLDFdKSxSci50cmFuc2xhdGUobyxvLFsxLC0xLDBdKSx0aGlzLnBpeGVsTWF0cml4PVJyLm11bHRpcGx5KG5ldyBGbG9hdDY0QXJyYXkoMTYpLG8sdGhpcy5wcm9qTWF0cml4KSwhKG89UnIuaW52ZXJ0KG5ldyBGbG9hdDY0QXJyYXkoMTYpLHRoaXMucGl4ZWxNYXRyaXgpKSl0aHJvdyBuZXcgRXJyb3IoImZhaWxlZCB0byBpbnZlcnQgbWF0cml4Iik7dGhpcy5waXhlbE1hdHJpeEludmVyc2U9byx0aGlzLl9wb3NNYXRyaXhDYWNoZT17fSx0aGlzLl9hbGlnbmVkUG9zTWF0cml4Q2FjaGU9e319fSxGci5wcm90b3R5cGUubWF4UGl0Y2hTY2FsZUZhY3Rvcj1mdW5jdGlvbigpe2lmKCF0aGlzLnBpeGVsTWF0cml4SW52ZXJzZSlyZXR1cm4gMTt2YXIgZT10aGlzLnBvaW50Q29vcmRpbmF0ZShuZXcgdC5kZWZhdWx0JDEoMCwwKSkuem9vbVRvKHRoaXMuem9vbSkscj1bZS5jb2x1bW4qdGhpcy50aWxlU2l6ZSxlLnJvdyp0aGlzLnRpbGVTaXplLDAsMV07cmV0dXJuIERyLnRyYW5zZm9ybU1hdDQocixyLHRoaXMucGl4ZWxNYXRyaXgpWzNdL3RoaXMuY2FtZXJhVG9DZW50ZXJEaXN0YW5jZX0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRnIucHJvdG90eXBlLE5yKTt2YXIganI9ZnVuY3Rpb24oKXt2YXIgZSxyLG4saTt0LmJpbmRBbGwoWyJfb25IYXNoQ2hhbmdlIiwiX3VwZGF0ZUhhc2giXSx0aGlzKSx0aGlzLl91cGRhdGVIYXNoPShlPXRoaXMuX3VwZGF0ZUhhc2hVbnRocm90dGxlZC5iaW5kKHRoaXMpLDMwMCxyPSExLG49MCxpPWZ1bmN0aW9uKCl7bj0wLHImJihlKCksbj1zZXRUaW1lb3V0KGksMzAwKSxyPSExKX0sZnVuY3Rpb24oKXtyZXR1cm4gcj0hMCxufHxpKCksbn0pfTtqci5wcm90b3R5cGUuYWRkVG89ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX21hcD1lLHQuZGVmYXVsdC5hZGRFdmVudExpc3RlbmVyKCJoYXNoY2hhbmdlIix0aGlzLl9vbkhhc2hDaGFuZ2UsITEpLHRoaXMuX21hcC5vbigibW92ZWVuZCIsdGhpcy5fdXBkYXRlSGFzaCksdGhpc30sanIucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbigpe3JldHVybiB0LmRlZmF1bHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiaGFzaGNoYW5nZSIsdGhpcy5fb25IYXNoQ2hhbmdlLCExKSx0aGlzLl9tYXAub2ZmKCJtb3ZlZW5kIix0aGlzLl91cGRhdGVIYXNoKSxjbGVhclRpbWVvdXQodGhpcy5fdXBkYXRlSGFzaCgpKSxkZWxldGUgdGhpcy5fbWFwLHRoaXN9LGpyLnByb3RvdHlwZS5nZXRIYXNoU3RyaW5nPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX21hcC5nZXRDZW50ZXIoKSxyPU1hdGgucm91bmQoMTAwKnRoaXMuX21hcC5nZXRab29tKCkpLzEwMCxuPU1hdGguY2VpbCgocipNYXRoLkxOMitNYXRoLmxvZyg1MTIvMzYwLy41KSkvTWF0aC5MTjEwKSxpPU1hdGgucG93KDEwLG4pLGE9TWF0aC5yb3VuZChlLmxuZyppKS9pLG89TWF0aC5yb3VuZChlLmxhdCppKS9pLHM9dGhpcy5fbWFwLmdldEJlYXJpbmcoKSxsPXRoaXMuX21hcC5nZXRQaXRjaCgpLGM9IiI7cmV0dXJuIGMrPXQ/IiMvIithKyIvIitvKyIvIityOiIjIityKyIvIitvKyIvIithLChzfHxsKSYmKGMrPSIvIitNYXRoLnJvdW5kKDEwKnMpLzEwKSxsJiYoYys9Ii8iK01hdGgucm91bmQobCkpLGN9LGpyLnByb3RvdHlwZS5fb25IYXNoQ2hhbmdlPWZ1bmN0aW9uKCl7dmFyIGU9dC5kZWZhdWx0LmxvY2F0aW9uLmhhc2gucmVwbGFjZSgiIyIsIiIpLnNwbGl0KCIvIik7cmV0dXJuIGUubGVuZ3RoPj0zJiYodGhpcy5fbWFwLmp1bXBUbyh7Y2VudGVyOlsrZVsyXSwrZVsxXV0sem9vbTorZVswXSxiZWFyaW5nOisoZVszXXx8MCkscGl0Y2g6KyhlWzRdfHwwKX0pLCEwKX0sanIucHJvdG90eXBlLl91cGRhdGVIYXNoVW50aHJvdHRsZWQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmdldEhhc2hTdHJpbmcoKTt0LmRlZmF1bHQuaGlzdG9yeS5yZXBsYWNlU3RhdGUodC5kZWZhdWx0Lmhpc3Rvcnkuc3RhdGUsIiIsZSl9O3ZhciBWcj1mdW5jdGlvbihlKXtmdW5jdGlvbiByKHIsbixpLGEpe3ZvaWQgMD09PWEmJihhPXt9KTt2YXIgbz1zLm1vdXNlUG9zKG4uZ2V0Q2FudmFzQ29udGFpbmVyKCksaSksbD1uLnVucHJvamVjdChvKTtlLmNhbGwodGhpcyxyLHQuZXh0ZW5kKHtwb2ludDpvLGxuZ0xhdDpsLG9yaWdpbmFsRXZlbnQ6aX0sYSkpLHRoaXMuX2RlZmF1bHRQcmV2ZW50ZWQ9ITEsdGhpcy50YXJnZXQ9bn1lJiYoci5fX3Byb3RvX189ZSksci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksci5wcm90b3R5cGUuY29uc3RydWN0b3I9cjt2YXIgbj17ZGVmYXVsdFByZXZlbnRlZDp7Y29uZmlndXJhYmxlOiEwfX07cmV0dXJuIHIucHJvdG90eXBlLnByZXZlbnREZWZhdWx0PWZ1bmN0aW9uKCl7dGhpcy5fZGVmYXVsdFByZXZlbnRlZD0hMH0sbi5kZWZhdWx0UHJldmVudGVkLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZWZhdWx0UHJldmVudGVkfSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhyLnByb3RvdHlwZSxuKSxyfSh0LkV2ZW50KSxVcj1mdW5jdGlvbihlKXtmdW5jdGlvbiByKHIsbixpKXt2YXIgYT1zLnRvdWNoUG9zKG4uZ2V0Q2FudmFzQ29udGFpbmVyKCksaSksbz1hLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gbi51bnByb2plY3QodCl9KSxsPWEucmVkdWNlKGZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0LmFkZChlLmRpdihuLmxlbmd0aCkpfSxuZXcgdC5kZWZhdWx0JDEoMCwwKSksYz1uLnVucHJvamVjdChsKTtlLmNhbGwodGhpcyxyLHtwb2ludHM6YSxwb2ludDpsLGxuZ0xhdHM6byxsbmdMYXQ6YyxvcmlnaW5hbEV2ZW50Oml9KSx0aGlzLl9kZWZhdWx0UHJldmVudGVkPSExfWUmJihyLl9fcHJvdG9fXz1lKSxyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSxyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yO3ZhciBuPXtkZWZhdWx0UHJldmVudGVkOntjb25maWd1cmFibGU6ITB9fTtyZXR1cm4gci5wcm90b3R5cGUucHJldmVudERlZmF1bHQ9ZnVuY3Rpb24oKXt0aGlzLl9kZWZhdWx0UHJldmVudGVkPSEwfSxuLmRlZmF1bHRQcmV2ZW50ZWQuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlZmF1bHRQcmV2ZW50ZWR9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHIucHJvdG90eXBlLG4pLHJ9KHQuRXZlbnQpLHFyPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxyLG4pe3QuY2FsbCh0aGlzLGUse29yaWdpbmFsRXZlbnQ6bn0pLHRoaXMuX2RlZmF1bHRQcmV2ZW50ZWQ9ITF9dCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWU7dmFyIHI9e2RlZmF1bHRQcmV2ZW50ZWQ6e2NvbmZpZ3VyYWJsZTohMH19O3JldHVybiBlLnByb3RvdHlwZS5wcmV2ZW50RGVmYXVsdD1mdW5jdGlvbigpe3RoaXMuX2RlZmF1bHRQcmV2ZW50ZWQ9ITB9LHIuZGVmYXVsdFByZXZlbnRlZC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVmYXVsdFByZXZlbnRlZH0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsciksZX0odC5FdmVudCksSHI9ZnVuY3Rpb24oZSl7dGhpcy5fbWFwPWUsdGhpcy5fZWw9ZS5nZXRDYW52YXNDb250YWluZXIoKSx0aGlzLl9kZWx0YT0wLHQuYmluZEFsbChbIl9vbldoZWVsIiwiX29uVGltZW91dCIsIl9vblNjcm9sbEZyYW1lIiwiX29uU2Nyb2xsRmluaXNoZWQiXSx0aGlzKX07SHIucHJvdG90eXBlLmlzRW5hYmxlZD1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5fZW5hYmxlZH0sSHIucHJvdG90eXBlLmlzQWN0aXZlPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9hY3RpdmV9LEhyLnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24odCl7dGhpcy5pc0VuYWJsZWQoKXx8KHRoaXMuX2VuYWJsZWQ9ITAsdGhpcy5fYXJvdW5kQ2VudGVyPXQmJiJjZW50ZXIiPT09dC5hcm91bmQpfSxIci5wcm90b3R5cGUuZGlzYWJsZT1mdW5jdGlvbigpe3RoaXMuaXNFbmFibGVkKCkmJih0aGlzLl9lbmFibGVkPSExKX0sSHIucHJvdG90eXBlLm9uV2hlZWw9ZnVuY3Rpb24oZSl7aWYodGhpcy5pc0VuYWJsZWQoKSl7dmFyIHI9ZS5kZWx0YU1vZGU9PT10LmRlZmF1bHQuV2hlZWxFdmVudC5ET01fREVMVEFfTElORT80MCplLmRlbHRhWTplLmRlbHRhWSxuPWEubm93KCksaT1uLSh0aGlzLl9sYXN0V2hlZWxFdmVudFRpbWV8fDApO3RoaXMuX2xhc3RXaGVlbEV2ZW50VGltZT1uLDAhPT1yJiZyJTQuMDAwMjQ0MTQwNjI1PT0wP3RoaXMuX3R5cGU9IndoZWVsIjowIT09ciYmTWF0aC5hYnMocik8ND90aGlzLl90eXBlPSJ0cmFja3BhZCI6aT40MDA/KHRoaXMuX3R5cGU9bnVsbCx0aGlzLl9sYXN0VmFsdWU9cix0aGlzLl90aW1lb3V0PXNldFRpbWVvdXQodGhpcy5fb25UaW1lb3V0LDQwLGUpKTp0aGlzLl90eXBlfHwodGhpcy5fdHlwZT1NYXRoLmFicyhpKnIpPDIwMD8idHJhY2twYWQiOiJ3aGVlbCIsdGhpcy5fdGltZW91dCYmKGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KSx0aGlzLl90aW1lb3V0PW51bGwscis9dGhpcy5fbGFzdFZhbHVlKSksZS5zaGlmdEtleSYmciYmKHIvPTQpLHRoaXMuX3R5cGUmJih0aGlzLl9sYXN0V2hlZWxFdmVudD1lLHRoaXMuX2RlbHRhLT1yLHRoaXMuaXNBY3RpdmUoKXx8dGhpcy5fc3RhcnQoZSkpLGUucHJldmVudERlZmF1bHQoKX19LEhyLnByb3RvdHlwZS5fb25UaW1lb3V0PWZ1bmN0aW9uKHQpe3RoaXMuX3R5cGU9IndoZWVsIix0aGlzLl9kZWx0YS09dGhpcy5fbGFzdFZhbHVlLHRoaXMuaXNBY3RpdmUoKXx8dGhpcy5fc3RhcnQodCl9LEhyLnByb3RvdHlwZS5fc3RhcnQ9ZnVuY3Rpb24oZSl7aWYodGhpcy5fZGVsdGEpe3RoaXMuX2ZyYW1lSWQmJih0aGlzLl9tYXAuX2NhbmNlbFJlbmRlckZyYW1lKHRoaXMuX2ZyYW1lSWQpLHRoaXMuX2ZyYW1lSWQ9bnVsbCksdGhpcy5fYWN0aXZlPSEwLHRoaXMuX21hcC5maXJlKG5ldyB0LkV2ZW50KCJtb3Zlc3RhcnQiLHtvcmlnaW5hbEV2ZW50OmV9KSksdGhpcy5fbWFwLmZpcmUobmV3IHQuRXZlbnQoInpvb21zdGFydCIse29yaWdpbmFsRXZlbnQ6ZX0pKSx0aGlzLl9maW5pc2hUaW1lb3V0JiZjbGVhclRpbWVvdXQodGhpcy5fZmluaXNoVGltZW91dCk7dmFyIHI9cy5tb3VzZVBvcyh0aGlzLl9lbCxlKTt0aGlzLl9hcm91bmQ9Ry5jb252ZXJ0KHRoaXMuX2Fyb3VuZENlbnRlcj90aGlzLl9tYXAuZ2V0Q2VudGVyKCk6dGhpcy5fbWFwLnVucHJvamVjdChyKSksdGhpcy5fYXJvdW5kUG9pbnQ9dGhpcy5fbWFwLnRyYW5zZm9ybS5sb2NhdGlvblBvaW50KHRoaXMuX2Fyb3VuZCksdGhpcy5fZnJhbWVJZHx8KHRoaXMuX2ZyYW1lSWQ9dGhpcy5fbWFwLl9yZXF1ZXN0UmVuZGVyRnJhbWUodGhpcy5fb25TY3JvbGxGcmFtZSkpfX0sSHIucHJvdG90eXBlLl9vblNjcm9sbEZyYW1lPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcztpZih0aGlzLl9mcmFtZUlkPW51bGwsdGhpcy5pc0FjdGl2ZSgpKXt2YXIgcj10aGlzLl9tYXAudHJhbnNmb3JtO2lmKDAhPT10aGlzLl9kZWx0YSl7dmFyIG49IndoZWVsIj09PXRoaXMuX3R5cGUmJk1hdGguYWJzKHRoaXMuX2RlbHRhKT40LjAwMDI0NDE0MDYyNT8xLzQ1MDouMDEsaT0yLygxK01hdGguZXhwKC1NYXRoLmFicyh0aGlzLl9kZWx0YSpuKSkpO3RoaXMuX2RlbHRhPDAmJjAhPT1pJiYoaT0xL2kpO3ZhciBvPSJudW1iZXIiPT10eXBlb2YgdGhpcy5fdGFyZ2V0Wm9vbT9yLnpvb21TY2FsZSh0aGlzLl90YXJnZXRab29tKTpyLnNjYWxlO3RoaXMuX3RhcmdldFpvb209TWF0aC5taW4oci5tYXhab29tLE1hdGgubWF4KHIubWluWm9vbSxyLnNjYWxlWm9vbShvKmkpKSksIndoZWVsIj09PXRoaXMuX3R5cGUmJih0aGlzLl9zdGFydFpvb209ci56b29tLHRoaXMuX2Vhc2luZz10aGlzLl9zbW9vdGhPdXRFYXNpbmcoMjAwKSksdGhpcy5fZGVsdGE9MH12YXIgcz0hMTtpZigid2hlZWwiPT09dGhpcy5fdHlwZSl7dmFyIGw9TWF0aC5taW4oKGEubm93KCktdGhpcy5fbGFzdFdoZWVsRXZlbnRUaW1lKS8yMDAsMSksYz10aGlzLl9lYXNpbmcobCk7ci56b29tPXQubnVtYmVyKHRoaXMuX3N0YXJ0Wm9vbSx0aGlzLl90YXJnZXRab29tLGMpLGw8MT90aGlzLl9mcmFtZUlkfHwodGhpcy5fZnJhbWVJZD10aGlzLl9tYXAuX3JlcXVlc3RSZW5kZXJGcmFtZSh0aGlzLl9vblNjcm9sbEZyYW1lKSk6cz0hMH1lbHNlIHIuem9vbT10aGlzLl90YXJnZXRab29tLHM9ITA7ci5zZXRMb2NhdGlvbkF0UG9pbnQodGhpcy5fYXJvdW5kLHRoaXMuX2Fyb3VuZFBvaW50KSx0aGlzLl9tYXAuZmlyZShuZXcgdC5FdmVudCgibW92ZSIse29yaWdpbmFsRXZlbnQ6dGhpcy5fbGFzdFdoZWVsRXZlbnR9KSksdGhpcy5fbWFwLmZpcmUobmV3IHQuRXZlbnQoInpvb20iLHtvcmlnaW5hbEV2ZW50OnRoaXMuX2xhc3RXaGVlbEV2ZW50fSkpLHMmJih0aGlzLl9hY3RpdmU9ITEsdGhpcy5fZmluaXNoVGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS5fbWFwLmZpcmUobmV3IHQuRXZlbnQoInpvb21lbmQiLHtvcmlnaW5hbEV2ZW50OmUuX2xhc3RXaGVlbEV2ZW50fSkpLGUuX21hcC5maXJlKG5ldyB0LkV2ZW50KCJtb3ZlZW5kIix7b3JpZ2luYWxFdmVudDplLl9sYXN0V2hlZWxFdmVudH0pKSxkZWxldGUgZS5fdGFyZ2V0Wm9vbX0sMjAwKSl9fSxIci5wcm90b3R5cGUuX3Ntb290aE91dEVhc2luZz1mdW5jdGlvbihlKXt2YXIgcj10LmVhc2U7aWYodGhpcy5fcHJldkVhc2Upe3ZhciBuPXRoaXMuX3ByZXZFYXNlLGk9KGEubm93KCktbi5zdGFydCkvbi5kdXJhdGlvbixvPW4uZWFzaW5nKGkrLjAxKS1uLmVhc2luZyhpKSxzPS4yNy9NYXRoLnNxcnQobypvKzFlLTQpKi4wMSxsPU1hdGguc3FydCguMDcyOS1zKnMpO3I9dC5iZXppZXIocyxsLC4yNSwxKX1yZXR1cm4gdGhpcy5fcHJldkVhc2U9e3N0YXJ0OmEubm93KCksZHVyYXRpb246ZSxlYXNpbmc6cn0scn07dmFyIEdyPWZ1bmN0aW9uKGUpe3RoaXMuX21hcD1lLHRoaXMuX2VsPWUuZ2V0Q2FudmFzQ29udGFpbmVyKCksdGhpcy5fY29udGFpbmVyPWUuZ2V0Q29udGFpbmVyKCksdC5iaW5kQWxsKFsiX29uTW91c2VNb3ZlIiwiX29uTW91c2VVcCIsIl9vbktleURvd24iXSx0aGlzKX07R3IucHJvdG90eXBlLmlzRW5hYmxlZD1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5fZW5hYmxlZH0sR3IucHJvdG90eXBlLmlzQWN0aXZlPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9hY3RpdmV9LEdyLnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24oKXt0aGlzLmlzRW5hYmxlZCgpfHwodGhpcy5fZW5hYmxlZD0hMCl9LEdyLnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7dGhpcy5pc0VuYWJsZWQoKSYmKHRoaXMuX2VuYWJsZWQ9ITEpfSxHci5wcm90b3R5cGUub25Nb3VzZURvd249ZnVuY3Rpb24oZSl7dGhpcy5pc0VuYWJsZWQoKSYmZS5zaGlmdEtleSYmMD09PWUuYnV0dG9uJiYodC5kZWZhdWx0LmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsdGhpcy5fb25Nb3VzZU1vdmUsITEpLHQuZGVmYXVsdC5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIix0aGlzLl9vbktleURvd24sITEpLHQuZGVmYXVsdC5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIix0aGlzLl9vbk1vdXNlVXAsITEpLHMuZGlzYWJsZURyYWcoKSx0aGlzLl9zdGFydFBvcz1zLm1vdXNlUG9zKHRoaXMuX2VsLGUpLHRoaXMuX2FjdGl2ZT0hMCl9LEdyLnByb3RvdHlwZS5fb25Nb3VzZU1vdmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fc3RhcnRQb3Mscj1zLm1vdXNlUG9zKHRoaXMuX2VsLHQpO3RoaXMuX2JveHx8KHRoaXMuX2JveD1zLmNyZWF0ZSgiZGl2IiwibWFwYm94Z2wtYm94em9vbSIsdGhpcy5fY29udGFpbmVyKSx0aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtY3Jvc3NoYWlyIiksdGhpcy5fZmlyZUV2ZW50KCJib3h6b29tc3RhcnQiLHQpKTt2YXIgbj1NYXRoLm1pbihlLngsci54KSxpPU1hdGgubWF4KGUueCxyLngpLGE9TWF0aC5taW4oZS55LHIueSksbz1NYXRoLm1heChlLnksci55KTtzLnNldFRyYW5zZm9ybSh0aGlzLl9ib3gsInRyYW5zbGF0ZSgiK24rInB4LCIrYSsicHgpIiksdGhpcy5fYm94LnN0eWxlLndpZHRoPWktbisicHgiLHRoaXMuX2JveC5zdHlsZS5oZWlnaHQ9by1hKyJweCJ9LEdyLnByb3RvdHlwZS5fb25Nb3VzZVVwPWZ1bmN0aW9uKGUpe2lmKDA9PT1lLmJ1dHRvbil7dmFyIHI9dGhpcy5fc3RhcnRQb3Msbj1zLm1vdXNlUG9zKHRoaXMuX2VsLGUpLGk9KG5ldyBXKS5leHRlbmQodGhpcy5fbWFwLnVucHJvamVjdChyKSkuZXh0ZW5kKHRoaXMuX21hcC51bnByb2plY3QobikpO3RoaXMuX2ZpbmlzaCgpLHMuc3VwcHJlc3NDbGljaygpLHIueD09PW4ueCYmci55PT09bi55P3RoaXMuX2ZpcmVFdmVudCgiYm94em9vbWNhbmNlbCIsZSk6dGhpcy5fbWFwLmZpdEJvdW5kcyhpLHtsaW5lYXI6ITB9KS5maXJlKG5ldyB0LkV2ZW50KCJib3h6b29tZW5kIix7b3JpZ2luYWxFdmVudDplLGJveFpvb21Cb3VuZHM6aX0pKX19LEdyLnByb3RvdHlwZS5fb25LZXlEb3duPWZ1bmN0aW9uKHQpezI3PT09dC5rZXlDb2RlJiYodGhpcy5fZmluaXNoKCksdGhpcy5fZmlyZUV2ZW50KCJib3h6b29tY2FuY2VsIix0KSl9LEdyLnByb3RvdHlwZS5fZmluaXNoPWZ1bmN0aW9uKCl7dGhpcy5fYWN0aXZlPSExLHQuZGVmYXVsdC5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHRoaXMuX29uTW91c2VNb3ZlLCExKSx0LmRlZmF1bHQuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsdGhpcy5fb25LZXlEb3duLCExKSx0LmRlZmF1bHQuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsdGhpcy5fb25Nb3VzZVVwLCExKSx0aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtY3Jvc3NoYWlyIiksdGhpcy5fYm94JiYocy5yZW1vdmUodGhpcy5fYm94KSx0aGlzLl9ib3g9bnVsbCkscy5lbmFibGVEcmFnKCl9LEdyLnByb3RvdHlwZS5fZmlyZUV2ZW50PWZ1bmN0aW9uKGUscil7cmV0dXJuIHRoaXMuX21hcC5maXJlKG5ldyB0LkV2ZW50KGUse29yaWdpbmFsRXZlbnQ6cn0pKX07dmFyIFdyPXQuYmV6aWVyKDAsMCwuMjUsMSksWXI9ZnVuY3Rpb24oZSxyKXt0aGlzLl9tYXA9ZSx0aGlzLl9lbD1yLmVsZW1lbnR8fGUuZ2V0Q2FudmFzQ29udGFpbmVyKCksdGhpcy5fc3RhdGU9ImRpc2FibGVkIix0aGlzLl9idXR0b249ci5idXR0b258fCJyaWdodCIsdGhpcy5fYmVhcmluZ1NuYXA9ci5iZWFyaW5nU25hcHx8MCx0aGlzLl9waXRjaFdpdGhSb3RhdGU9ITEhPT1yLnBpdGNoV2l0aFJvdGF0ZSx0LmJpbmRBbGwoWyJfb25Nb3VzZU1vdmUiLCJfb25Nb3VzZVVwIiwiX29uQmx1ciIsIl9vbkRyYWdGcmFtZSJdLHRoaXMpfTtZci5wcm90b3R5cGUuaXNFbmFibGVkPWZ1bmN0aW9uKCl7cmV0dXJuImRpc2FibGVkIiE9PXRoaXMuX3N0YXRlfSxZci5wcm90b3R5cGUuaXNBY3RpdmU9ZnVuY3Rpb24oKXtyZXR1cm4iYWN0aXZlIj09PXRoaXMuX3N0YXRlfSxZci5wcm90b3R5cGUuZW5hYmxlPWZ1bmN0aW9uKCl7dGhpcy5pc0VuYWJsZWQoKXx8KHRoaXMuX3N0YXRlPSJlbmFibGVkIil9LFlyLnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7aWYodGhpcy5pc0VuYWJsZWQoKSlzd2l0Y2godGhpcy5fc3RhdGUpe2Nhc2UiYWN0aXZlIjp0aGlzLl9zdGF0ZT0iZGlzYWJsZWQiLHRoaXMuX3VuYmluZCgpLHRoaXMuX2RlYWN0aXZhdGUoKSx0aGlzLl9maXJlRXZlbnQoInJvdGF0ZWVuZCIpLHRoaXMuX3BpdGNoV2l0aFJvdGF0ZSYmdGhpcy5fZmlyZUV2ZW50KCJwaXRjaGVuZCIpLHRoaXMuX2ZpcmVFdmVudCgibW92ZWVuZCIpO2JyZWFrO2Nhc2UicGVuZGluZyI6dGhpcy5fc3RhdGU9ImRpc2FibGVkIix0aGlzLl91bmJpbmQoKTticmVhaztkZWZhdWx0OnRoaXMuX3N0YXRlPSJkaXNhYmxlZCJ9fSxZci5wcm90b3R5cGUub25Nb3VzZURvd249ZnVuY3Rpb24oZSl7aWYoImVuYWJsZWQiPT09dGhpcy5fc3RhdGUpe2lmKCJyaWdodCI9PT10aGlzLl9idXR0b24pe2lmKHRoaXMuX2V2ZW50QnV0dG9uPXMubW91c2VCdXR0b24oZSksdGhpcy5fZXZlbnRCdXR0b24hPT0oZS5jdHJsS2V5PzA6MikpcmV0dXJufWVsc2V7aWYoZS5jdHJsS2V5fHwwIT09cy5tb3VzZUJ1dHRvbihlKSlyZXR1cm47dGhpcy5fZXZlbnRCdXR0b249MH1zLmRpc2FibGVEcmFnKCksdC5kZWZhdWx0LmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsdGhpcy5fb25Nb3VzZU1vdmUse2NhcHR1cmU6ITB9KSx0LmRlZmF1bHQuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsdGhpcy5fb25Nb3VzZVVwKSx0LmRlZmF1bHQuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsdGhpcy5fb25CbHVyKSx0aGlzLl9zdGF0ZT0icGVuZGluZyIsdGhpcy5faW5lcnRpYT1bW2Eubm93KCksdGhpcy5fbWFwLmdldEJlYXJpbmcoKV1dLHRoaXMuX3ByZXZpb3VzUG9zPXMubW91c2VQb3ModGhpcy5fZWwsZSksdGhpcy5fY2VudGVyPXRoaXMuX21hcC50cmFuc2Zvcm0uY2VudGVyUG9pbnQsZS5wcmV2ZW50RGVmYXVsdCgpfX0sWXIucHJvdG90eXBlLl9vbk1vdXNlTW92ZT1mdW5jdGlvbih0KXt0aGlzLl9sYXN0TW92ZUV2ZW50PXQsdGhpcy5fcG9zPXMubW91c2VQb3ModGhpcy5fZWwsdCksInBlbmRpbmciPT09dGhpcy5fc3RhdGUmJih0aGlzLl9zdGF0ZT0iYWN0aXZlIix0aGlzLl9maXJlRXZlbnQoInJvdGF0ZXN0YXJ0Iix0KSx0aGlzLl9maXJlRXZlbnQoIm1vdmVzdGFydCIsdCksdGhpcy5fcGl0Y2hXaXRoUm90YXRlJiZ0aGlzLl9maXJlRXZlbnQoInBpdGNoc3RhcnQiLHQpKSx0aGlzLl9mcmFtZUlkfHwodGhpcy5fZnJhbWVJZD10aGlzLl9tYXAuX3JlcXVlc3RSZW5kZXJGcmFtZSh0aGlzLl9vbkRyYWdGcmFtZSkpfSxZci5wcm90b3R5cGUuX29uRHJhZ0ZyYW1lPWZ1bmN0aW9uKCl7dGhpcy5fZnJhbWVJZD1udWxsO3ZhciB0PXRoaXMuX2xhc3RNb3ZlRXZlbnQ7aWYodCl7dmFyIGU9dGhpcy5fbWFwLnRyYW5zZm9ybSxyPXRoaXMuX3ByZXZpb3VzUG9zLG49dGhpcy5fcG9zLGk9LjgqKHIueC1uLngpLG89LS41KihyLnktbi55KSxzPWUuYmVhcmluZy1pLGw9ZS5waXRjaC1vLGM9dGhpcy5faW5lcnRpYSx1PWNbYy5sZW5ndGgtMV07dGhpcy5fZHJhaW5JbmVydGlhQnVmZmVyKCksYy5wdXNoKFthLm5vdygpLHRoaXMuX21hcC5fbm9ybWFsaXplQmVhcmluZyhzLHVbMV0pXSksZS5iZWFyaW5nPXMsdGhpcy5fcGl0Y2hXaXRoUm90YXRlJiYodGhpcy5fZmlyZUV2ZW50KCJwaXRjaCIsdCksZS5waXRjaD1sKSx0aGlzLl9maXJlRXZlbnQoInJvdGF0ZSIsdCksdGhpcy5fZmlyZUV2ZW50KCJtb3ZlIix0KSxkZWxldGUgdGhpcy5fbGFzdE1vdmVFdmVudCx0aGlzLl9wcmV2aW91c1Bvcz10aGlzLl9wb3N9fSxZci5wcm90b3R5cGUuX29uTW91c2VVcD1mdW5jdGlvbih0KXtpZihzLm1vdXNlQnV0dG9uKHQpPT09dGhpcy5fZXZlbnRCdXR0b24pc3dpdGNoKHRoaXMuX3N0YXRlKXtjYXNlImFjdGl2ZSI6dGhpcy5fc3RhdGU9ImVuYWJsZWQiLHMuc3VwcHJlc3NDbGljaygpLHRoaXMuX3VuYmluZCgpLHRoaXMuX2RlYWN0aXZhdGUoKSx0aGlzLl9pbmVydGlhbFJvdGF0ZSh0KTticmVhaztjYXNlInBlbmRpbmciOnRoaXMuX3N0YXRlPSJlbmFibGVkIix0aGlzLl91bmJpbmQoKX19LFlyLnByb3RvdHlwZS5fb25CbHVyPWZ1bmN0aW9uKHQpe3N3aXRjaCh0aGlzLl9zdGF0ZSl7Y2FzZSJhY3RpdmUiOnRoaXMuX3N0YXRlPSJlbmFibGVkIix0aGlzLl91bmJpbmQoKSx0aGlzLl9kZWFjdGl2YXRlKCksdGhpcy5fZmlyZUV2ZW50KCJyb3RhdGVlbmQiLHQpLHRoaXMuX3BpdGNoV2l0aFJvdGF0ZSYmdGhpcy5fZmlyZUV2ZW50KCJwaXRjaGVuZCIsdCksdGhpcy5fZmlyZUV2ZW50KCJtb3ZlZW5kIix0KTticmVhaztjYXNlInBlbmRpbmciOnRoaXMuX3N0YXRlPSJlbmFibGVkIix0aGlzLl91bmJpbmQoKX19LFlyLnByb3RvdHlwZS5fdW5iaW5kPWZ1bmN0aW9uKCl7dC5kZWZhdWx0LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsdGhpcy5fb25Nb3VzZU1vdmUse2NhcHR1cmU6ITB9KSx0LmRlZmF1bHQuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsdGhpcy5fb25Nb3VzZVVwKSx0LmRlZmF1bHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYmx1ciIsdGhpcy5fb25CbHVyKSxzLmVuYWJsZURyYWcoKX0sWXIucHJvdG90eXBlLl9kZWFjdGl2YXRlPWZ1bmN0aW9uKCl7dGhpcy5fZnJhbWVJZCYmKHRoaXMuX21hcC5fY2FuY2VsUmVuZGVyRnJhbWUodGhpcy5fZnJhbWVJZCksdGhpcy5fZnJhbWVJZD1udWxsKSxkZWxldGUgdGhpcy5fbGFzdE1vdmVFdmVudCxkZWxldGUgdGhpcy5fcHJldmlvdXNQb3N9LFlyLnByb3RvdHlwZS5faW5lcnRpYWxSb3RhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLl9maXJlRXZlbnQoInJvdGF0ZWVuZCIsdCksdGhpcy5fZHJhaW5JbmVydGlhQnVmZmVyKCk7dmFyIHI9dGhpcy5fbWFwLG49ci5nZXRCZWFyaW5nKCksaT10aGlzLl9pbmVydGlhLGE9ZnVuY3Rpb24oKXtNYXRoLmFicyhuKTxlLl9iZWFyaW5nU25hcD9yLnJlc2V0Tm9ydGgoe25vTW92ZVN0YXJ0OiEwfSx7b3JpZ2luYWxFdmVudDp0fSk6ZS5fZmlyZUV2ZW50KCJtb3ZlZW5kIix0KSxlLl9waXRjaFdpdGhSb3RhdGUmJmUuX2ZpcmVFdmVudCgicGl0Y2hlbmQiLHQpfTtpZihpLmxlbmd0aDwyKWEoKTtlbHNle3ZhciBvPWlbMF0scz1pW2kubGVuZ3RoLTFdLGw9aVtpLmxlbmd0aC0yXSxjPXIuX25vcm1hbGl6ZUJlYXJpbmcobixsWzFdKSx1PXNbMV0tb1sxXSxoPXU8MD8tMToxLGY9KHNbMF0tb1swXSkvMWUzO2lmKDAhPT11JiYwIT09Zil7dmFyIHA9TWF0aC5hYnModSooLjI1L2YpKTtwPjE4MCYmKHA9MTgwKTt2YXIgZD1wLzE4MDtjKz1oKnAqKGQvMiksTWF0aC5hYnMoci5fbm9ybWFsaXplQmVhcmluZyhjLDApKTx0aGlzLl9iZWFyaW5nU25hcCYmKGM9ci5fbm9ybWFsaXplQmVhcmluZygwLGMpKSxyLnJvdGF0ZVRvKGMse2R1cmF0aW9uOjFlMypkLGVhc2luZzpXcixub01vdmVTdGFydDohMH0se29yaWdpbmFsRXZlbnQ6dH0pfWVsc2UgYSgpfX0sWXIucHJvdG90eXBlLl9maXJlRXZlbnQ9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdGhpcy5fbWFwLmZpcmUobmV3IHQuRXZlbnQoZSxyP3tvcmlnaW5hbEV2ZW50OnJ9Ont9KSl9LFlyLnByb3RvdHlwZS5fZHJhaW5JbmVydGlhQnVmZmVyPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuX2luZXJ0aWEsZT1hLm5vdygpO3QubGVuZ3RoPjAmJmUtdFswXVswXT4xNjA7KXQuc2hpZnQoKX07dmFyIFhyPXQuYmV6aWVyKDAsMCwuMywxKSxacj1mdW5jdGlvbihlKXt0aGlzLl9tYXA9ZSx0aGlzLl9lbD1lLmdldENhbnZhc0NvbnRhaW5lcigpLHRoaXMuX3N0YXRlPSJkaXNhYmxlZCIsdC5iaW5kQWxsKFsiX29uTW92ZSIsIl9vbk1vdXNlVXAiLCJfb25Ub3VjaEVuZCIsIl9vbkJsdXIiLCJfb25EcmFnRnJhbWUiXSx0aGlzKX07WnIucHJvdG90eXBlLmlzRW5hYmxlZD1mdW5jdGlvbigpe3JldHVybiJkaXNhYmxlZCIhPT10aGlzLl9zdGF0ZX0sWnIucHJvdG90eXBlLmlzQWN0aXZlPWZ1bmN0aW9uKCl7cmV0dXJuImFjdGl2ZSI9PT10aGlzLl9zdGF0ZX0sWnIucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbigpe3RoaXMuaXNFbmFibGVkKCl8fCh0aGlzLl9lbC5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC10b3VjaC1kcmFnLXBhbiIpLHRoaXMuX3N0YXRlPSJlbmFibGVkIil9LFpyLnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7aWYodGhpcy5pc0VuYWJsZWQoKSlzd2l0Y2godGhpcy5fZWwuY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtdG91Y2gtZHJhZy1wYW4iKSx0aGlzLl9zdGF0ZSl7Y2FzZSJhY3RpdmUiOnRoaXMuX3N0YXRlPSJkaXNhYmxlZCIsdGhpcy5fdW5iaW5kKCksdGhpcy5fZGVhY3RpdmF0ZSgpLHRoaXMuX2ZpcmVFdmVudCgiZHJhZ2VuZCIpLHRoaXMuX2ZpcmVFdmVudCgibW92ZWVuZCIpO2JyZWFrO2Nhc2UicGVuZGluZyI6dGhpcy5fc3RhdGU9ImRpc2FibGVkIix0aGlzLl91bmJpbmQoKTticmVhaztkZWZhdWx0OnRoaXMuX3N0YXRlPSJkaXNhYmxlZCJ9fSxaci5wcm90b3R5cGUub25Nb3VzZURvd249ZnVuY3Rpb24oZSl7ImVuYWJsZWQiPT09dGhpcy5fc3RhdGUmJihlLmN0cmxLZXl8fDAhPT1zLm1vdXNlQnV0dG9uKGUpfHwocy5hZGRFdmVudExpc3RlbmVyKHQuZGVmYXVsdC5kb2N1bWVudCwibW91c2Vtb3ZlIix0aGlzLl9vbk1vdmUse2NhcHR1cmU6ITB9KSxzLmFkZEV2ZW50TGlzdGVuZXIodC5kZWZhdWx0LmRvY3VtZW50LCJtb3VzZXVwIix0aGlzLl9vbk1vdXNlVXApLHRoaXMuX3N0YXJ0KGUpKSl9LFpyLnByb3RvdHlwZS5vblRvdWNoU3RhcnQ9ZnVuY3Rpb24oZSl7ImVuYWJsZWQiPT09dGhpcy5fc3RhdGUmJihlLnRvdWNoZXMubGVuZ3RoPjF8fChzLmFkZEV2ZW50TGlzdGVuZXIodC5kZWZhdWx0LmRvY3VtZW50LCJ0b3VjaG1vdmUiLHRoaXMuX29uTW92ZSx7Y2FwdHVyZTohMCxwYXNzaXZlOiExfSkscy5hZGRFdmVudExpc3RlbmVyKHQuZGVmYXVsdC5kb2N1bWVudCwidG91Y2hlbmQiLHRoaXMuX29uVG91Y2hFbmQpLHRoaXMuX3N0YXJ0KGUpKSl9LFpyLnByb3RvdHlwZS5fc3RhcnQ9ZnVuY3Rpb24oZSl7dC5kZWZhdWx0LmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLHRoaXMuX29uQmx1ciksdGhpcy5fc3RhdGU9InBlbmRpbmciLHRoaXMuX3ByZXZpb3VzUG9zPXMubW91c2VQb3ModGhpcy5fZWwsZSksdGhpcy5faW5lcnRpYT1bW2Eubm93KCksdGhpcy5fcHJldmlvdXNQb3NdXX0sWnIucHJvdG90eXBlLl9vbk1vdmU9ZnVuY3Rpb24odCl7dGhpcy5fbGFzdE1vdmVFdmVudD10LHQucHJldmVudERlZmF1bHQoKSx0aGlzLl9wb3M9cy5tb3VzZVBvcyh0aGlzLl9lbCx0KSx0aGlzLl9kcmFpbkluZXJ0aWFCdWZmZXIoKSx0aGlzLl9pbmVydGlhLnB1c2goW2Eubm93KCksdGhpcy5fcG9zXSksInBlbmRpbmciPT09dGhpcy5fc3RhdGUmJih0aGlzLl9zdGF0ZT0iYWN0aXZlIix0aGlzLl9maXJlRXZlbnQoImRyYWdzdGFydCIsdCksdGhpcy5fZmlyZUV2ZW50KCJtb3Zlc3RhcnQiLHQpKSx0aGlzLl9mcmFtZUlkfHwodGhpcy5fZnJhbWVJZD10aGlzLl9tYXAuX3JlcXVlc3RSZW5kZXJGcmFtZSh0aGlzLl9vbkRyYWdGcmFtZSkpfSxaci5wcm90b3R5cGUuX29uRHJhZ0ZyYW1lPWZ1bmN0aW9uKCl7dGhpcy5fZnJhbWVJZD1udWxsO3ZhciB0PXRoaXMuX2xhc3RNb3ZlRXZlbnQ7aWYodCl7dmFyIGU9dGhpcy5fbWFwLnRyYW5zZm9ybTtlLnNldExvY2F0aW9uQXRQb2ludChlLnBvaW50TG9jYXRpb24odGhpcy5fcHJldmlvdXNQb3MpLHRoaXMuX3BvcyksdGhpcy5fZmlyZUV2ZW50KCJkcmFnIix0KSx0aGlzLl9maXJlRXZlbnQoIm1vdmUiLHQpLHRoaXMuX3ByZXZpb3VzUG9zPXRoaXMuX3BvcyxkZWxldGUgdGhpcy5fbGFzdE1vdmVFdmVudH19LFpyLnByb3RvdHlwZS5fb25Nb3VzZVVwPWZ1bmN0aW9uKHQpe2lmKDA9PT1zLm1vdXNlQnV0dG9uKHQpKXN3aXRjaCh0aGlzLl9zdGF0ZSl7Y2FzZSJhY3RpdmUiOnRoaXMuX3N0YXRlPSJlbmFibGVkIixzLnN1cHByZXNzQ2xpY2soKSx0aGlzLl91bmJpbmQoKSx0aGlzLl9kZWFjdGl2YXRlKCksdGhpcy5faW5lcnRpYWxQYW4odCk7YnJlYWs7Y2FzZSJwZW5kaW5nIjp0aGlzLl9zdGF0ZT0iZW5hYmxlZCIsdGhpcy5fdW5iaW5kKCl9fSxaci5wcm90b3R5cGUuX29uVG91Y2hFbmQ9ZnVuY3Rpb24odCl7c3dpdGNoKHRoaXMuX3N0YXRlKXtjYXNlImFjdGl2ZSI6dGhpcy5fc3RhdGU9ImVuYWJsZWQiLHRoaXMuX3VuYmluZCgpLHRoaXMuX2RlYWN0aXZhdGUoKSx0aGlzLl9pbmVydGlhbFBhbih0KTticmVhaztjYXNlInBlbmRpbmciOnRoaXMuX3N0YXRlPSJlbmFibGVkIix0aGlzLl91bmJpbmQoKX19LFpyLnByb3RvdHlwZS5fb25CbHVyPWZ1bmN0aW9uKHQpe3N3aXRjaCh0aGlzLl9zdGF0ZSl7Y2FzZSJhY3RpdmUiOnRoaXMuX3N0YXRlPSJlbmFibGVkIix0aGlzLl91bmJpbmQoKSx0aGlzLl9kZWFjdGl2YXRlKCksdGhpcy5fZmlyZUV2ZW50KCJkcmFnZW5kIix0KSx0aGlzLl9maXJlRXZlbnQoIm1vdmVlbmQiLHQpO2JyZWFrO2Nhc2UicGVuZGluZyI6dGhpcy5fc3RhdGU9ImVuYWJsZWQiLHRoaXMuX3VuYmluZCgpfX0sWnIucHJvdG90eXBlLl91bmJpbmQ9ZnVuY3Rpb24oKXtzLnJlbW92ZUV2ZW50TGlzdGVuZXIodC5kZWZhdWx0LmRvY3VtZW50LCJ0b3VjaG1vdmUiLHRoaXMuX29uTW92ZSx7Y2FwdHVyZTohMCxwYXNzaXZlOiExfSkscy5yZW1vdmVFdmVudExpc3RlbmVyKHQuZGVmYXVsdC5kb2N1bWVudCwidG91Y2hlbmQiLHRoaXMuX29uVG91Y2hFbmQpLHMucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LmRlZmF1bHQuZG9jdW1lbnQsIm1vdXNlbW92ZSIsdGhpcy5fb25Nb3ZlLHtjYXB0dXJlOiEwfSkscy5yZW1vdmVFdmVudExpc3RlbmVyKHQuZGVmYXVsdC5kb2N1bWVudCwibW91c2V1cCIsdGhpcy5fb25Nb3VzZVVwKSxzLnJlbW92ZUV2ZW50TGlzdGVuZXIodC5kZWZhdWx0LCJibHVyIix0aGlzLl9vbkJsdXIpfSxaci5wcm90b3R5cGUuX2RlYWN0aXZhdGU9ZnVuY3Rpb24oKXt0aGlzLl9mcmFtZUlkJiYodGhpcy5fbWFwLl9jYW5jZWxSZW5kZXJGcmFtZSh0aGlzLl9mcmFtZUlkKSx0aGlzLl9mcmFtZUlkPW51bGwpLGRlbGV0ZSB0aGlzLl9sYXN0TW92ZUV2ZW50LGRlbGV0ZSB0aGlzLl9wcmV2aW91c1BvcyxkZWxldGUgdGhpcy5fcG9zfSxaci5wcm90b3R5cGUuX2luZXJ0aWFsUGFuPWZ1bmN0aW9uKHQpe3RoaXMuX2ZpcmVFdmVudCgiZHJhZ2VuZCIsdCksdGhpcy5fZHJhaW5JbmVydGlhQnVmZmVyKCk7dmFyIGU9dGhpcy5faW5lcnRpYTtpZihlLmxlbmd0aDwyKXRoaXMuX2ZpcmVFdmVudCgibW92ZWVuZCIsdCk7ZWxzZXt2YXIgcj1lW2UubGVuZ3RoLTFdLG49ZVswXSxpPXJbMV0uc3ViKG5bMV0pLGE9KHJbMF0tblswXSkvMWUzO2lmKDA9PT1hfHxyWzFdLmVxdWFscyhuWzFdKSl0aGlzLl9maXJlRXZlbnQoIm1vdmVlbmQiLHQpO2Vsc2V7dmFyIG89aS5tdWx0KC4zL2EpLHM9by5tYWcoKTtzPjE0MDAmJihzPTE0MDAsby5fdW5pdCgpLl9tdWx0KHMpKTt2YXIgbD1zLzc1MCxjPW8ubXVsdCgtbC8yKTt0aGlzLl9tYXAucGFuQnkoYyx7ZHVyYXRpb246MWUzKmwsZWFzaW5nOlhyLG5vTW92ZVN0YXJ0OiEwfSx7b3JpZ2luYWxFdmVudDp0fSl9fX0sWnIucHJvdG90eXBlLl9maXJlRXZlbnQ9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdGhpcy5fbWFwLmZpcmUobmV3IHQuRXZlbnQoZSxyP3tvcmlnaW5hbEV2ZW50OnJ9Ont9KSl9LFpyLnByb3RvdHlwZS5fZHJhaW5JbmVydGlhQnVmZmVyPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuX2luZXJ0aWEsZT1hLm5vdygpO3QubGVuZ3RoPjAmJmUtdFswXVswXT4xNjA7KXQuc2hpZnQoKX07dmFyICRyPWZ1bmN0aW9uKGUpe3RoaXMuX21hcD1lLHRoaXMuX2VsPWUuZ2V0Q2FudmFzQ29udGFpbmVyKCksdC5iaW5kQWxsKFsiX29uS2V5RG93biJdLHRoaXMpfTtmdW5jdGlvbiBKcih0KXtyZXR1cm4gdCooMi10KX0kci5wcm90b3R5cGUuaXNFbmFibGVkPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9lbmFibGVkfSwkci5wcm90b3R5cGUuZW5hYmxlPWZ1bmN0aW9uKCl7dGhpcy5pc0VuYWJsZWQoKXx8KHRoaXMuX2VsLmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLHRoaXMuX29uS2V5RG93biwhMSksdGhpcy5fZW5hYmxlZD0hMCl9LCRyLnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7dGhpcy5pc0VuYWJsZWQoKSYmKHRoaXMuX2VsLnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLHRoaXMuX29uS2V5RG93biksdGhpcy5fZW5hYmxlZD0hMSl9LCRyLnByb3RvdHlwZS5fb25LZXlEb3duPWZ1bmN0aW9uKHQpe2lmKCEodC5hbHRLZXl8fHQuY3RybEtleXx8dC5tZXRhS2V5KSl7dmFyIGU9MCxyPTAsbj0wLGk9MCxhPTA7c3dpdGNoKHQua2V5Q29kZSl7Y2FzZSA2MTpjYXNlIDEwNzpjYXNlIDE3MTpjYXNlIDE4NzplPTE7YnJlYWs7Y2FzZSAxODk6Y2FzZSAxMDk6Y2FzZSAxNzM6ZT0tMTticmVhaztjYXNlIDM3OnQuc2hpZnRLZXk/cj0tMToodC5wcmV2ZW50RGVmYXVsdCgpLGk9LTEpO2JyZWFrO2Nhc2UgMzk6dC5zaGlmdEtleT9yPTE6KHQucHJldmVudERlZmF1bHQoKSxpPTEpO2JyZWFrO2Nhc2UgMzg6dC5zaGlmdEtleT9uPTE6KHQucHJldmVudERlZmF1bHQoKSxhPS0xKTticmVhaztjYXNlIDQwOnQuc2hpZnRLZXk/bj0tMTooYT0xLHQucHJldmVudERlZmF1bHQoKSk7YnJlYWs7ZGVmYXVsdDpyZXR1cm59dmFyIG89dGhpcy5fbWFwLHM9by5nZXRab29tKCksbD17ZHVyYXRpb246MzAwLGRlbGF5RW5kRXZlbnRzOjUwMCxlYXNpbmc6SnIsem9vbTplP01hdGgucm91bmQocykrZSoodC5zaGlmdEtleT8yOjEpOnMsYmVhcmluZzpvLmdldEJlYXJpbmcoKSsxNSpyLHBpdGNoOm8uZ2V0UGl0Y2goKSsxMCpuLG9mZnNldDpbMTAwKi1pLDEwMCotYV0sY2VudGVyOm8uZ2V0Q2VudGVyKCl9O28uZWFzZVRvKGwse29yaWdpbmFsRXZlbnQ6dH0pfX07dmFyIEtyPWZ1bmN0aW9uKGUpe3RoaXMuX21hcD1lLHQuYmluZEFsbChbIl9vbkRibENsaWNrIiwiX29uWm9vbUVuZCJdLHRoaXMpfTtLci5wcm90b3R5cGUuaXNFbmFibGVkPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9lbmFibGVkfSxLci5wcm90b3R5cGUuaXNBY3RpdmU9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX2FjdGl2ZX0sS3IucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbigpe3RoaXMuaXNFbmFibGVkKCl8fCh0aGlzLl9lbmFibGVkPSEwKX0sS3IucHJvdG90eXBlLmRpc2FibGU9ZnVuY3Rpb24oKXt0aGlzLmlzRW5hYmxlZCgpJiYodGhpcy5fZW5hYmxlZD0hMSl9LEtyLnByb3RvdHlwZS5vblRvdWNoU3RhcnQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLmlzRW5hYmxlZCgpJiYodC5wb2ludHMubGVuZ3RoPjF8fCh0aGlzLl90YXBwZWQ/KGNsZWFyVGltZW91dCh0aGlzLl90YXBwZWQpLHRoaXMuX3RhcHBlZD1udWxsLHRoaXMuX3pvb20odCkpOnRoaXMuX3RhcHBlZD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS5fdGFwcGVkPW51bGx9LDMwMCkpKX0sS3IucHJvdG90eXBlLm9uRGJsQ2xpY2s9ZnVuY3Rpb24odCl7dGhpcy5pc0VuYWJsZWQoKSYmKHQub3JpZ2luYWxFdmVudC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX3pvb20odCkpfSxLci5wcm90b3R5cGUuX3pvb209ZnVuY3Rpb24odCl7dGhpcy5fYWN0aXZlPSEwLHRoaXMuX21hcC5vbigiem9vbWVuZCIsdGhpcy5fb25ab29tRW5kKSx0aGlzLl9tYXAuem9vbVRvKHRoaXMuX21hcC5nZXRab29tKCkrKHQub3JpZ2luYWxFdmVudC5zaGlmdEtleT8tMToxKSx7YXJvdW5kOnQubG5nTGF0fSx0KX0sS3IucHJvdG90eXBlLl9vblpvb21FbmQ9ZnVuY3Rpb24oKXt0aGlzLl9hY3RpdmU9ITEsdGhpcy5fbWFwLm9mZigiem9vbWVuZCIsdGhpcy5fb25ab29tRW5kKX07dmFyIFFyPXQuYmV6aWVyKDAsMCwuMTUsMSksdG49ZnVuY3Rpb24oZSl7dGhpcy5fbWFwPWUsdGhpcy5fZWw9ZS5nZXRDYW52YXNDb250YWluZXIoKSx0LmJpbmRBbGwoWyJfb25Nb3ZlIiwiX29uRW5kIiwiX29uVG91Y2hGcmFtZSJdLHRoaXMpfTt0bi5wcm90b3R5cGUuaXNFbmFibGVkPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9lbmFibGVkfSx0bi5wcm90b3R5cGUuZW5hYmxlPWZ1bmN0aW9uKHQpe3RoaXMuaXNFbmFibGVkKCl8fCh0aGlzLl9lbC5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC10b3VjaC16b29tLXJvdGF0ZSIpLHRoaXMuX2VuYWJsZWQ9ITAsdGhpcy5fYXJvdW5kQ2VudGVyPSEhdCYmImNlbnRlciI9PT10LmFyb3VuZCl9LHRuLnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7dGhpcy5pc0VuYWJsZWQoKSYmKHRoaXMuX2VsLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLXRvdWNoLXpvb20tcm90YXRlIiksdGhpcy5fZW5hYmxlZD0hMSl9LHRuLnByb3RvdHlwZS5kaXNhYmxlUm90YXRpb249ZnVuY3Rpb24oKXt0aGlzLl9yb3RhdGlvbkRpc2FibGVkPSEwfSx0bi5wcm90b3R5cGUuZW5hYmxlUm90YXRpb249ZnVuY3Rpb24oKXt0aGlzLl9yb3RhdGlvbkRpc2FibGVkPSExfSx0bi5wcm90b3R5cGUub25TdGFydD1mdW5jdGlvbihlKXtpZih0aGlzLmlzRW5hYmxlZCgpJiYyPT09ZS50b3VjaGVzLmxlbmd0aCl7dmFyIHI9cy5tb3VzZVBvcyh0aGlzLl9lbCxlLnRvdWNoZXNbMF0pLG49cy5tb3VzZVBvcyh0aGlzLl9lbCxlLnRvdWNoZXNbMV0pO3RoaXMuX3N0YXJ0VmVjPXIuc3ViKG4pLHRoaXMuX2dlc3R1cmVJbnRlbnQ9dm9pZCAwLHRoaXMuX2luZXJ0aWE9W10scy5hZGRFdmVudExpc3RlbmVyKHQuZGVmYXVsdC5kb2N1bWVudCwidG91Y2htb3ZlIix0aGlzLl9vbk1vdmUse3Bhc3NpdmU6ITF9KSxzLmFkZEV2ZW50TGlzdGVuZXIodC5kZWZhdWx0LmRvY3VtZW50LCJ0b3VjaGVuZCIsdGhpcy5fb25FbmQpfX0sdG4ucHJvdG90eXBlLl9nZXRUb3VjaEV2ZW50RGF0YT1mdW5jdGlvbih0KXt2YXIgZT1zLm1vdXNlUG9zKHRoaXMuX2VsLHQudG91Y2hlc1swXSkscj1zLm1vdXNlUG9zKHRoaXMuX2VsLHQudG91Y2hlc1sxXSksbj1lLnN1YihyKTtyZXR1cm57dmVjOm4sY2VudGVyOmUuYWRkKHIpLmRpdigyKSxzY2FsZTpuLm1hZygpL3RoaXMuX3N0YXJ0VmVjLm1hZygpLGJlYXJpbmc6dGhpcy5fcm90YXRpb25EaXNhYmxlZD8wOjE4MCpuLmFuZ2xlV2l0aCh0aGlzLl9zdGFydFZlYykvTWF0aC5QSX19LHRuLnByb3RvdHlwZS5fb25Nb3ZlPWZ1bmN0aW9uKGUpe2lmKDI9PT1lLnRvdWNoZXMubGVuZ3RoKXt2YXIgcj10aGlzLl9nZXRUb3VjaEV2ZW50RGF0YShlKSxuPXIudmVjLGk9ci5zY2FsZSxhPXIuYmVhcmluZztpZighdGhpcy5fZ2VzdHVyZUludGVudCl7dmFyIG89TWF0aC5hYnMoMS1pKT4uMTU7TWF0aC5hYnMoYSk+MTA/dGhpcy5fZ2VzdHVyZUludGVudD0icm90YXRlIjpvJiYodGhpcy5fZ2VzdHVyZUludGVudD0iem9vbSIpLHRoaXMuX2dlc3R1cmVJbnRlbnQmJih0aGlzLl9tYXAuZmlyZShuZXcgdC5FdmVudCh0aGlzLl9nZXN0dXJlSW50ZW50KyJzdGFydCIse29yaWdpbmFsRXZlbnQ6ZX0pKSx0aGlzLl9tYXAuZmlyZShuZXcgdC5FdmVudCgibW92ZXN0YXJ0Iix7b3JpZ2luYWxFdmVudDplfSkpLHRoaXMuX3N0YXJ0VmVjPW4pfXRoaXMuX2xhc3RUb3VjaEV2ZW50PWUsdGhpcy5fZnJhbWVJZHx8KHRoaXMuX2ZyYW1lSWQ9dGhpcy5fbWFwLl9yZXF1ZXN0UmVuZGVyRnJhbWUodGhpcy5fb25Ub3VjaEZyYW1lKSksZS5wcmV2ZW50RGVmYXVsdCgpfX0sdG4ucHJvdG90eXBlLl9vblRvdWNoRnJhbWU9ZnVuY3Rpb24oKXt0aGlzLl9mcmFtZUlkPW51bGw7dmFyIGU9dGhpcy5fZ2VzdHVyZUludGVudDtpZihlKXt2YXIgcj10aGlzLl9tYXAudHJhbnNmb3JtO3RoaXMuX3N0YXJ0U2NhbGV8fCh0aGlzLl9zdGFydFNjYWxlPXIuc2NhbGUsdGhpcy5fc3RhcnRCZWFyaW5nPXIuYmVhcmluZyk7dmFyIG49dGhpcy5fZ2V0VG91Y2hFdmVudERhdGEodGhpcy5fbGFzdFRvdWNoRXZlbnQpLGk9bi5jZW50ZXIsbz1uLmJlYXJpbmcscz1uLnNjYWxlLGw9ci5wb2ludExvY2F0aW9uKGkpLGM9ci5sb2NhdGlvblBvaW50KGwpOyJyb3RhdGUiPT09ZSYmKHIuYmVhcmluZz10aGlzLl9zdGFydEJlYXJpbmcrbyksci56b29tPXIuc2NhbGVab29tKHRoaXMuX3N0YXJ0U2NhbGUqcyksci5zZXRMb2NhdGlvbkF0UG9pbnQobCxjKSx0aGlzLl9tYXAuZmlyZShuZXcgdC5FdmVudChlLHtvcmlnaW5hbEV2ZW50OnRoaXMuX2xhc3RUb3VjaEV2ZW50fSkpLHRoaXMuX21hcC5maXJlKG5ldyB0LkV2ZW50KCJtb3ZlIix7b3JpZ2luYWxFdmVudDp0aGlzLl9sYXN0VG91Y2hFdmVudH0pKSx0aGlzLl9kcmFpbkluZXJ0aWFCdWZmZXIoKSx0aGlzLl9pbmVydGlhLnB1c2goW2Eubm93KCkscyxpXSl9fSx0bi5wcm90b3R5cGUuX29uRW5kPWZ1bmN0aW9uKGUpe3MucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LmRlZmF1bHQuZG9jdW1lbnQsInRvdWNobW92ZSIsdGhpcy5fb25Nb3ZlLHtwYXNzaXZlOiExfSkscy5yZW1vdmVFdmVudExpc3RlbmVyKHQuZGVmYXVsdC5kb2N1bWVudCwidG91Y2hlbmQiLHRoaXMuX29uRW5kKTt2YXIgcj10aGlzLl9nZXN0dXJlSW50ZW50LG49dGhpcy5fc3RhcnRTY2FsZTtpZih0aGlzLl9mcmFtZUlkJiYodGhpcy5fbWFwLl9jYW5jZWxSZW5kZXJGcmFtZSh0aGlzLl9mcmFtZUlkKSx0aGlzLl9mcmFtZUlkPW51bGwpLGRlbGV0ZSB0aGlzLl9nZXN0dXJlSW50ZW50LGRlbGV0ZSB0aGlzLl9zdGFydFNjYWxlLGRlbGV0ZSB0aGlzLl9zdGFydEJlYXJpbmcsZGVsZXRlIHRoaXMuX2xhc3RUb3VjaEV2ZW50LHIpe3RoaXMuX21hcC5maXJlKG5ldyB0LkV2ZW50KHIrImVuZCIse29yaWdpbmFsRXZlbnQ6ZX0pKSx0aGlzLl9kcmFpbkluZXJ0aWFCdWZmZXIoKTt2YXIgaT10aGlzLl9pbmVydGlhLGE9dGhpcy5fbWFwO2lmKGkubGVuZ3RoPDIpYS5zbmFwVG9Ob3J0aCh7fSx7b3JpZ2luYWxFdmVudDplfSk7ZWxzZXt2YXIgbz1pW2kubGVuZ3RoLTFdLGw9aVswXSxjPWEudHJhbnNmb3JtLnNjYWxlWm9vbShuKm9bMV0pLHU9YS50cmFuc2Zvcm0uc2NhbGVab29tKG4qbFsxXSksaD1jLXUsZj0ob1swXS1sWzBdKS8xZTMscD1vWzJdO2lmKDAhPT1mJiZjIT09dSl7dmFyIGQ9LjE1KmgvZjtNYXRoLmFicyhkKT4yLjUmJihkPWQ+MD8yLjU6LTIuNSk7dmFyIGc9MWUzKk1hdGguYWJzKGQvKDEyKi4xNSkpLG09YytkKmcvMmUzO208MCYmKG09MCksYS5lYXNlVG8oe3pvb206bSxkdXJhdGlvbjpnLGVhc2luZzpRcixhcm91bmQ6dGhpcy5fYXJvdW5kQ2VudGVyP2EuZ2V0Q2VudGVyKCk6YS51bnByb2plY3QocCksbm9Nb3ZlU3RhcnQ6ITB9LHtvcmlnaW5hbEV2ZW50OmV9KX1lbHNlIGEuc25hcFRvTm9ydGgoe30se29yaWdpbmFsRXZlbnQ6ZX0pfX19LHRuLnByb3RvdHlwZS5fZHJhaW5JbmVydGlhQnVmZmVyPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuX2luZXJ0aWEsZT1hLm5vdygpO3QubGVuZ3RoPjImJmUtdFswXVswXT4xNjA7KXQuc2hpZnQoKX07dmFyIGVuPXtzY3JvbGxab29tOkhyLGJveFpvb206R3IsZHJhZ1JvdGF0ZTpZcixkcmFnUGFuOlpyLGtleWJvYXJkOiRyLGRvdWJsZUNsaWNrWm9vbTpLcix0b3VjaFpvb21Sb3RhdGU6dG59LHJuPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIocixuKXtlLmNhbGwodGhpcyksdGhpcy5fbW92aW5nPSExLHRoaXMuX3pvb21pbmc9ITEsdGhpcy50cmFuc2Zvcm09cix0aGlzLl9iZWFyaW5nU25hcD1uLmJlYXJpbmdTbmFwLHQuYmluZEFsbChbIl9yZW5kZXJGcmFtZUNhbGxiYWNrIl0sdGhpcyl9cmV0dXJuIGUmJihyLl9fcHJvdG9fXz1lKSxyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSxyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yLHIucHJvdG90eXBlLmdldENlbnRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRyYW5zZm9ybS5jZW50ZXJ9LHIucHJvdG90eXBlLnNldENlbnRlcj1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmp1bXBUbyh7Y2VudGVyOnR9LGUpfSxyLnByb3RvdHlwZS5wYW5CeT1mdW5jdGlvbihlLHIsbil7cmV0dXJuIGU9dC5kZWZhdWx0JDEuY29udmVydChlKS5tdWx0KC0xKSx0aGlzLnBhblRvKHRoaXMudHJhbnNmb3JtLmNlbnRlcix0LmV4dGVuZCh7b2Zmc2V0OmV9LHIpLG4pfSxyLnByb3RvdHlwZS5wYW5Ubz1mdW5jdGlvbihlLHIsbil7cmV0dXJuIHRoaXMuZWFzZVRvKHQuZXh0ZW5kKHtjZW50ZXI6ZX0sciksbil9LHIucHJvdG90eXBlLmdldFpvb209ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0uem9vbX0sci5wcm90b3R5cGUuc2V0Wm9vbT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmp1bXBUbyh7em9vbTp0fSxlKSx0aGlzfSxyLnByb3RvdHlwZS56b29tVG89ZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0aGlzLmVhc2VUbyh0LmV4dGVuZCh7em9vbTplfSxyKSxuKX0sci5wcm90b3R5cGUuem9vbUluPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuem9vbVRvKHRoaXMuZ2V0Wm9vbSgpKzEsdCxlKSx0aGlzfSxyLnByb3RvdHlwZS56b29tT3V0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuem9vbVRvKHRoaXMuZ2V0Wm9vbSgpLTEsdCxlKSx0aGlzfSxyLnByb3RvdHlwZS5nZXRCZWFyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHJhbnNmb3JtLmJlYXJpbmd9LHIucHJvdG90eXBlLnNldEJlYXJpbmc9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5qdW1wVG8oe2JlYXJpbmc6dH0sZSksdGhpc30sci5wcm90b3R5cGUucm90YXRlVG89ZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0aGlzLmVhc2VUbyh0LmV4dGVuZCh7YmVhcmluZzplfSxyKSxuKX0sci5wcm90b3R5cGUucmVzZXROb3J0aD1mdW5jdGlvbihlLHIpe3JldHVybiB0aGlzLnJvdGF0ZVRvKDAsdC5leHRlbmQoe2R1cmF0aW9uOjFlM30sZSksciksdGhpc30sci5wcm90b3R5cGUuc25hcFRvTm9ydGg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5hYnModGhpcy5nZXRCZWFyaW5nKCkpPHRoaXMuX2JlYXJpbmdTbmFwP3RoaXMucmVzZXROb3J0aCh0LGUpOnRoaXN9LHIucHJvdG90eXBlLmdldFBpdGNoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHJhbnNmb3JtLnBpdGNofSxyLnByb3RvdHlwZS5zZXRQaXRjaD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmp1bXBUbyh7cGl0Y2g6dH0sZSksdGhpc30sci5wcm90b3R5cGUuZml0Qm91bmRzPWZ1bmN0aW9uKGUscixuKXtpZigibnVtYmVyIj09dHlwZW9mKHI9dC5leHRlbmQoe3BhZGRpbmc6e3RvcDowLGJvdHRvbTowLHJpZ2h0OjAsbGVmdDowfSxvZmZzZXQ6WzAsMF0sbWF4Wm9vbTp0aGlzLnRyYW5zZm9ybS5tYXhab29tfSxyKSkucGFkZGluZyl7dmFyIGk9ci5wYWRkaW5nO3IucGFkZGluZz17dG9wOmksYm90dG9tOmkscmlnaHQ6aSxsZWZ0Oml9fWlmKCF0LmRlZmF1bHQkMTAoT2JqZWN0LmtleXMoci5wYWRkaW5nKS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ8ZT8tMTp0PmU/MTowfSksWyJib3R0b20iLCJsZWZ0IiwicmlnaHQiLCJ0b3AiXSkpcmV0dXJuIHQud2Fybk9uY2UoIm9wdGlvbnMucGFkZGluZyBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyLCBvciBhbiBPYmplY3Qgd2l0aCBrZXlzICdib3R0b20nLCAnbGVmdCcsICdyaWdodCcsICd0b3AnIiksdGhpcztlPVcuY29udmVydChlKTt2YXIgYT1bKHIucGFkZGluZy5sZWZ0LXIucGFkZGluZy5yaWdodCkvMiwoci5wYWRkaW5nLnRvcC1yLnBhZGRpbmcuYm90dG9tKS8yXSxvPU1hdGgubWluKHIucGFkZGluZy5yaWdodCxyLnBhZGRpbmcubGVmdCkscz1NYXRoLm1pbihyLnBhZGRpbmcudG9wLHIucGFkZGluZy5ib3R0b20pO3Iub2Zmc2V0PVtyLm9mZnNldFswXSthWzBdLHIub2Zmc2V0WzFdK2FbMV1dO3ZhciBsPXQuZGVmYXVsdCQxLmNvbnZlcnQoci5vZmZzZXQpLGM9dGhpcy50cmFuc2Zvcm0sdT1jLnByb2plY3QoZS5nZXROb3J0aFdlc3QoKSksaD1jLnByb2plY3QoZS5nZXRTb3V0aEVhc3QoKSksZj1oLnN1Yih1KSxwPShjLndpZHRoLTIqby0yKk1hdGguYWJzKGwueCkpL2YueCxkPShjLmhlaWdodC0yKnMtMipNYXRoLmFicyhsLnkpKS9mLnk7cmV0dXJuIGQ8MHx8cDwwPyh0Lndhcm5PbmNlKCJNYXAgY2Fubm90IGZpdCB3aXRoaW4gY2FudmFzIHdpdGggdGhlIGdpdmVuIGJvdW5kcywgcGFkZGluZywgYW5kL29yIG9mZnNldC4iKSx0aGlzKTooci5jZW50ZXI9Yy51bnByb2plY3QodS5hZGQoaCkuZGl2KDIpKSxyLnpvb209TWF0aC5taW4oYy5zY2FsZVpvb20oYy5zY2FsZSpNYXRoLm1pbihwLGQpKSxyLm1heFpvb20pLHIuYmVhcmluZz0wLHIubGluZWFyP3RoaXMuZWFzZVRvKHIsbik6dGhpcy5mbHlUbyhyLG4pKX0sci5wcm90b3R5cGUuanVtcFRvPWZ1bmN0aW9uKGUscil7dGhpcy5zdG9wKCk7dmFyIG49dGhpcy50cmFuc2Zvcm0saT0hMSxhPSExLG89ITE7cmV0dXJuInpvb20iaW4gZSYmbi56b29tIT09K2Uuem9vbSYmKGk9ITAsbi56b29tPStlLnpvb20pLHZvaWQgMCE9PWUuY2VudGVyJiYobi5jZW50ZXI9Ry5jb252ZXJ0KGUuY2VudGVyKSksImJlYXJpbmciaW4gZSYmbi5iZWFyaW5nIT09K2UuYmVhcmluZyYmKGE9ITAsbi5iZWFyaW5nPStlLmJlYXJpbmcpLCJwaXRjaCJpbiBlJiZuLnBpdGNoIT09K2UucGl0Y2gmJihvPSEwLG4ucGl0Y2g9K2UucGl0Y2gpLHRoaXMuZmlyZShuZXcgdC5FdmVudCgibW92ZXN0YXJ0IixyKSkuZmlyZShuZXcgdC5FdmVudCgibW92ZSIscikpLGkmJnRoaXMuZmlyZShuZXcgdC5FdmVudCgiem9vbXN0YXJ0IixyKSkuZmlyZShuZXcgdC5FdmVudCgiem9vbSIscikpLmZpcmUobmV3IHQuRXZlbnQoInpvb21lbmQiLHIpKSxhJiZ0aGlzLmZpcmUobmV3IHQuRXZlbnQoInJvdGF0ZXN0YXJ0IixyKSkuZmlyZShuZXcgdC5FdmVudCgicm90YXRlIixyKSkuZmlyZShuZXcgdC5FdmVudCgicm90YXRlZW5kIixyKSksbyYmdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJwaXRjaHN0YXJ0IixyKSkuZmlyZShuZXcgdC5FdmVudCgicGl0Y2giLHIpKS5maXJlKG5ldyB0LkV2ZW50KCJwaXRjaGVuZCIscikpLHRoaXMuZmlyZShuZXcgdC5FdmVudCgibW92ZWVuZCIscikpfSxyLnByb3RvdHlwZS5lYXNlVG89ZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzO3RoaXMuc3RvcCgpLCExPT09KGU9dC5leHRlbmQoe29mZnNldDpbMCwwXSxkdXJhdGlvbjo1MDAsZWFzaW5nOnQuZWFzZX0sZSkpLmFuaW1hdGUmJihlLmR1cmF0aW9uPTApO3ZhciBpPXRoaXMudHJhbnNmb3JtLGE9dGhpcy5nZXRab29tKCksbz10aGlzLmdldEJlYXJpbmcoKSxzPXRoaXMuZ2V0UGl0Y2goKSxsPSJ6b29tImluIGU/K2Uuem9vbTphLGM9ImJlYXJpbmciaW4gZT90aGlzLl9ub3JtYWxpemVCZWFyaW5nKGUuYmVhcmluZyxvKTpvLHU9InBpdGNoImluIGU/K2UucGl0Y2g6cyxoPWkuY2VudGVyUG9pbnQuYWRkKHQuZGVmYXVsdCQxLmNvbnZlcnQoZS5vZmZzZXQpKSxmPWkucG9pbnRMb2NhdGlvbihoKSxwPUcuY29udmVydChlLmNlbnRlcnx8Zik7dGhpcy5fbm9ybWFsaXplQ2VudGVyKHApO3ZhciBkLGcsbT1pLnByb2plY3QoZiksdj1pLnByb2plY3QocCkuc3ViKG0pLHk9aS56b29tU2NhbGUobC1hKTtyZXR1cm4gZS5hcm91bmQmJihkPUcuY29udmVydChlLmFyb3VuZCksZz1pLmxvY2F0aW9uUG9pbnQoZCkpLHRoaXMuX3pvb21pbmc9bCE9PWEsdGhpcy5fcm90YXRpbmc9byE9PWMsdGhpcy5fcGl0Y2hpbmc9dSE9PXMsdGhpcy5fcHJlcGFyZUVhc2UocixlLm5vTW92ZVN0YXJ0KSxjbGVhclRpbWVvdXQodGhpcy5fZWFzZUVuZFRpbWVvdXRJRCksdGhpcy5fZWFzZShmdW5jdGlvbihlKXtpZihuLl96b29taW5nJiYoaS56b29tPXQubnVtYmVyKGEsbCxlKSksbi5fcm90YXRpbmcmJihpLmJlYXJpbmc9dC5udW1iZXIobyxjLGUpKSxuLl9waXRjaGluZyYmKGkucGl0Y2g9dC5udW1iZXIocyx1LGUpKSxkKWkuc2V0TG9jYXRpb25BdFBvaW50KGQsZyk7ZWxzZXt2YXIgZj1pLnpvb21TY2FsZShpLnpvb20tYSkscD1sPmE/TWF0aC5taW4oMix5KTpNYXRoLm1heCguNSx5KSx4PU1hdGgucG93KHAsMS1lKSxiPWkudW5wcm9qZWN0KG0uYWRkKHYubXVsdChlKngpKS5tdWx0KGYpKTtpLnNldExvY2F0aW9uQXRQb2ludChpLnJlbmRlcldvcmxkQ29waWVzP2Iud3JhcCgpOmIsaCl9bi5fZmlyZU1vdmVFdmVudHMocil9LGZ1bmN0aW9uKCl7ZS5kZWxheUVuZEV2ZW50cz9uLl9lYXNlRW5kVGltZW91dElEPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gbi5fYWZ0ZXJFYXNlKHIpfSxlLmRlbGF5RW5kRXZlbnRzKTpuLl9hZnRlckVhc2Uocil9LGUpLHRoaXN9LHIucHJvdG90eXBlLl9wcmVwYXJlRWFzZT1mdW5jdGlvbihlLHIpe3RoaXMuX21vdmluZz0hMCxyfHx0aGlzLmZpcmUobmV3IHQuRXZlbnQoIm1vdmVzdGFydCIsZSkpLHRoaXMuX3pvb21pbmcmJnRoaXMuZmlyZShuZXcgdC5FdmVudCgiem9vbXN0YXJ0IixlKSksdGhpcy5fcm90YXRpbmcmJnRoaXMuZmlyZShuZXcgdC5FdmVudCgicm90YXRlc3RhcnQiLGUpKSx0aGlzLl9waXRjaGluZyYmdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJwaXRjaHN0YXJ0IixlKSl9LHIucHJvdG90eXBlLl9maXJlTW92ZUV2ZW50cz1mdW5jdGlvbihlKXt0aGlzLmZpcmUobmV3IHQuRXZlbnQoIm1vdmUiLGUpKSx0aGlzLl96b29taW5nJiZ0aGlzLmZpcmUobmV3IHQuRXZlbnQoInpvb20iLGUpKSx0aGlzLl9yb3RhdGluZyYmdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJyb3RhdGUiLGUpKSx0aGlzLl9waXRjaGluZyYmdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJwaXRjaCIsZSkpfSxyLnByb3RvdHlwZS5fYWZ0ZXJFYXNlPWZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuX3pvb21pbmcsbj10aGlzLl9yb3RhdGluZyxpPXRoaXMuX3BpdGNoaW5nO3RoaXMuX21vdmluZz0hMSx0aGlzLl96b29taW5nPSExLHRoaXMuX3JvdGF0aW5nPSExLHRoaXMuX3BpdGNoaW5nPSExLHImJnRoaXMuZmlyZShuZXcgdC5FdmVudCgiem9vbWVuZCIsZSkpLG4mJnRoaXMuZmlyZShuZXcgdC5FdmVudCgicm90YXRlZW5kIixlKSksaSYmdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJwaXRjaGVuZCIsZSkpLHRoaXMuZmlyZShuZXcgdC5FdmVudCgibW92ZWVuZCIsZSkpfSxyLnByb3RvdHlwZS5mbHlUbz1mdW5jdGlvbihlLHIpe3ZhciBuPXRoaXM7dGhpcy5zdG9wKCksZT10LmV4dGVuZCh7b2Zmc2V0OlswLDBdLHNwZWVkOjEuMixjdXJ2ZToxLjQyLGVhc2luZzp0LmVhc2V9LGUpO3ZhciBpPXRoaXMudHJhbnNmb3JtLGE9dGhpcy5nZXRab29tKCksbz10aGlzLmdldEJlYXJpbmcoKSxzPXRoaXMuZ2V0UGl0Y2goKSxsPSJ6b29tImluIGU/dC5jbGFtcCgrZS56b29tLGkubWluWm9vbSxpLm1heFpvb20pOmEsYz0iYmVhcmluZyJpbiBlP3RoaXMuX25vcm1hbGl6ZUJlYXJpbmcoZS5iZWFyaW5nLG8pOm8sdT0icGl0Y2giaW4gZT8rZS5waXRjaDpzLGg9aS56b29tU2NhbGUobC1hKSxmPWkuY2VudGVyUG9pbnQuYWRkKHQuZGVmYXVsdCQxLmNvbnZlcnQoZS5vZmZzZXQpKSxwPWkucG9pbnRMb2NhdGlvbihmKSxkPUcuY29udmVydChlLmNlbnRlcnx8cCk7dGhpcy5fbm9ybWFsaXplQ2VudGVyKGQpO3ZhciBnPWkucHJvamVjdChwKSxtPWkucHJvamVjdChkKS5zdWIoZyksdj1lLmN1cnZlLHk9TWF0aC5tYXgoaS53aWR0aCxpLmhlaWdodCkseD15L2gsYj1tLm1hZygpO2lmKCJtaW5ab29tImluIGUpe3ZhciBfPXQuY2xhbXAoTWF0aC5taW4oZS5taW5ab29tLGEsbCksaS5taW5ab29tLGkubWF4Wm9vbSksdz15L2kuem9vbVNjYWxlKF8tYSk7dj1NYXRoLnNxcnQody9iKjIpfXZhciBrPXYqdjtmdW5jdGlvbiBNKHQpe3ZhciBlPSh4KngteSp5Kyh0Py0xOjEpKmsqaypiKmIpLygyKih0P3g6eSkqaypiKTtyZXR1cm4gTWF0aC5sb2coTWF0aC5zcXJ0KGUqZSsxKS1lKX1mdW5jdGlvbiBBKHQpe3JldHVybihNYXRoLmV4cCh0KS1NYXRoLmV4cCgtdCkpLzJ9ZnVuY3Rpb24gVCh0KXtyZXR1cm4oTWF0aC5leHAodCkrTWF0aC5leHAoLXQpKS8yfXZhciBTPU0oMCksRT1mdW5jdGlvbih0KXtyZXR1cm4gVChTKS9UKFMrdip0KX0sQz1mdW5jdGlvbih0KXtyZXR1cm4geSooKFQoUykqKEEoZT1TK3YqdCkvVChlKSktQShTKSkvaykvYjt2YXIgZX0sTD0oTSgxKS1TKS92O2lmKE1hdGguYWJzKGIpPDFlLTZ8fCFpc0Zpbml0ZShMKSl7aWYoTWF0aC5hYnMoeS14KTwxZS02KXJldHVybiB0aGlzLmVhc2VUbyhlLHIpO3ZhciB6PXg8eT8tMToxO0w9TWF0aC5hYnMoTWF0aC5sb2coeC95KSkvdixDPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LEU9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguZXhwKHoqdip0KX19aWYoImR1cmF0aW9uImluIGUpZS5kdXJhdGlvbj0rZS5kdXJhdGlvbjtlbHNle3ZhciBQPSJzY3JlZW5TcGVlZCJpbiBlPytlLnNjcmVlblNwZWVkL3Y6K2Uuc3BlZWQ7ZS5kdXJhdGlvbj0xZTMqTC9QfXJldHVybiBlLm1heER1cmF0aW9uJiZlLmR1cmF0aW9uPmUubWF4RHVyYXRpb24mJihlLmR1cmF0aW9uPTApLHRoaXMuX3pvb21pbmc9ITAsdGhpcy5fcm90YXRpbmc9byE9PWMsdGhpcy5fcGl0Y2hpbmc9dSE9PXMsdGhpcy5fcHJlcGFyZUVhc2UociwhMSksdGhpcy5fZWFzZShmdW5jdGlvbihlKXt2YXIgbD1lKkwsaD0xL0UobCk7aS56b29tPWEraS5zY2FsZVpvb20oaCksbi5fcm90YXRpbmcmJihpLmJlYXJpbmc9dC5udW1iZXIobyxjLGUpKSxuLl9waXRjaGluZyYmKGkucGl0Y2g9dC5udW1iZXIocyx1LGUpKTt2YXIgcD1pLnVucHJvamVjdChnLmFkZChtLm11bHQoQyhsKSkpLm11bHQoaCkpO2kuc2V0TG9jYXRpb25BdFBvaW50KGkucmVuZGVyV29ybGRDb3BpZXM/cC53cmFwKCk6cCxmKSxuLl9maXJlTW92ZUV2ZW50cyhyKX0sZnVuY3Rpb24oKXtyZXR1cm4gbi5fYWZ0ZXJFYXNlKHIpfSxlKSx0aGlzfSxyLnByb3RvdHlwZS5pc0Vhc2luZz1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5fZWFzZUZyYW1lSWR9LHIucHJvdG90eXBlLnN0b3A9ZnVuY3Rpb24oKXtpZih0aGlzLl9lYXNlRnJhbWVJZCYmKHRoaXMuX2NhbmNlbFJlbmRlckZyYW1lKHRoaXMuX2Vhc2VGcmFtZUlkKSxkZWxldGUgdGhpcy5fZWFzZUZyYW1lSWQsZGVsZXRlIHRoaXMuX29uRWFzZUZyYW1lKSx0aGlzLl9vbkVhc2VFbmQpe3ZhciB0PXRoaXMuX29uRWFzZUVuZDtkZWxldGUgdGhpcy5fb25FYXNlRW5kLHQuY2FsbCh0aGlzKX1yZXR1cm4gdGhpc30sci5wcm90b3R5cGUuX2Vhc2U9ZnVuY3Rpb24odCxlLHIpeyExPT09ci5hbmltYXRlfHwwPT09ci5kdXJhdGlvbj8odCgxKSxlKCkpOih0aGlzLl9lYXNlU3RhcnQ9YS5ub3coKSx0aGlzLl9lYXNlT3B0aW9ucz1yLHRoaXMuX29uRWFzZUZyYW1lPXQsdGhpcy5fb25FYXNlRW5kPWUsdGhpcy5fZWFzZUZyYW1lSWQ9dGhpcy5fcmVxdWVzdFJlbmRlckZyYW1lKHRoaXMuX3JlbmRlckZyYW1lQ2FsbGJhY2spKX0sci5wcm90b3R5cGUuX3JlbmRlckZyYW1lQ2FsbGJhY2s9ZnVuY3Rpb24oKXt2YXIgdD1NYXRoLm1pbigoYS5ub3coKS10aGlzLl9lYXNlU3RhcnQpL3RoaXMuX2Vhc2VPcHRpb25zLmR1cmF0aW9uLDEpO3RoaXMuX29uRWFzZUZyYW1lKHRoaXMuX2Vhc2VPcHRpb25zLmVhc2luZyh0KSksdDwxP3RoaXMuX2Vhc2VGcmFtZUlkPXRoaXMuX3JlcXVlc3RSZW5kZXJGcmFtZSh0aGlzLl9yZW5kZXJGcmFtZUNhbGxiYWNrKTp0aGlzLnN0b3AoKX0sci5wcm90b3R5cGUuX25vcm1hbGl6ZUJlYXJpbmc9ZnVuY3Rpb24oZSxyKXtlPXQud3JhcChlLC0xODAsMTgwKTt2YXIgbj1NYXRoLmFicyhlLXIpO3JldHVybiBNYXRoLmFicyhlLTM2MC1yKTxuJiYoZS09MzYwKSxNYXRoLmFicyhlKzM2MC1yKTxuJiYoZSs9MzYwKSxlfSxyLnByb3RvdHlwZS5fbm9ybWFsaXplQ2VudGVyPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMudHJhbnNmb3JtO2lmKGUucmVuZGVyV29ybGRDb3BpZXMmJiFlLmxuZ1JhbmdlKXt2YXIgcj10LmxuZy1lLmNlbnRlci5sbmc7dC5sbmcrPXI+MTgwPy0zNjA6cjwtMTgwPzM2MDowfX0scn0odC5FdmVudGVkKSxubj1mdW5jdGlvbihlKXt2b2lkIDA9PT1lJiYoZT17fSksdGhpcy5vcHRpb25zPWUsdC5iaW5kQWxsKFsiX3VwZGF0ZUVkaXRMaW5rIiwiX3VwZGF0ZURhdGEiLCJfdXBkYXRlQ29tcGFjdCJdLHRoaXMpfTtubi5wcm90b3R5cGUuZ2V0RGVmYXVsdFBvc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuImJvdHRvbS1yaWdodCJ9LG5uLnByb3RvdHlwZS5vbkFkZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLm9wdGlvbnMmJnRoaXMub3B0aW9ucy5jb21wYWN0O3JldHVybiB0aGlzLl9tYXA9dCx0aGlzLl9jb250YWluZXI9cy5jcmVhdGUoImRpdiIsIm1hcGJveGdsLWN0cmwgbWFwYm94Z2wtY3RybC1hdHRyaWIiKSxlJiZ0aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtY29tcGFjdCIpLHRoaXMuX3VwZGF0ZUF0dHJpYnV0aW9ucygpLHRoaXMuX3VwZGF0ZUVkaXRMaW5rKCksdGhpcy5fbWFwLm9uKCJzb3VyY2VkYXRhIix0aGlzLl91cGRhdGVEYXRhKSx0aGlzLl9tYXAub24oIm1vdmVlbmQiLHRoaXMuX3VwZGF0ZUVkaXRMaW5rKSx2b2lkIDA9PT1lJiYodGhpcy5fbWFwLm9uKCJyZXNpemUiLHRoaXMuX3VwZGF0ZUNvbXBhY3QpLHRoaXMuX3VwZGF0ZUNvbXBhY3QoKSksdGhpcy5fY29udGFpbmVyfSxubi5wcm90b3R5cGUub25SZW1vdmU9ZnVuY3Rpb24oKXtzLnJlbW92ZSh0aGlzLl9jb250YWluZXIpLHRoaXMuX21hcC5vZmYoInNvdXJjZWRhdGEiLHRoaXMuX3VwZGF0ZURhdGEpLHRoaXMuX21hcC5vZmYoIm1vdmVlbmQiLHRoaXMuX3VwZGF0ZUVkaXRMaW5rKSx0aGlzLl9tYXAub2ZmKCJyZXNpemUiLHRoaXMuX3VwZGF0ZUNvbXBhY3QpLHRoaXMuX21hcD12b2lkIDB9LG5uLnByb3RvdHlwZS5fdXBkYXRlRWRpdExpbms9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9lZGl0TGluazt0fHwodD10aGlzLl9lZGl0TGluaz10aGlzLl9jb250YWluZXIucXVlcnlTZWxlY3RvcigiLm1hcGJveC1pbXByb3ZlLW1hcCIpKTt2YXIgZT1be2tleToib3duZXIiLHZhbHVlOnRoaXMuc3R5bGVPd25lcn0se2tleToiaWQiLHZhbHVlOnRoaXMuc3R5bGVJZH0se2tleToiYWNjZXNzX3Rva2VuIix2YWx1ZTptLkFDQ0VTU19UT0tFTn1dO2lmKHQpe3ZhciByPWUucmVkdWNlKGZ1bmN0aW9uKHQscixuKXtyZXR1cm4gci52YWx1ZSYmKHQrPXIua2V5KyI9IityLnZhbHVlKyhuPGUubGVuZ3RoLTE/IiYiOiIiKSksdH0sIj8iKTt0LmhyZWY9Imh0dHBzOi8vd3d3Lm1hcGJveC5jb20vZmVlZGJhY2svIityKyh0aGlzLl9tYXAuX2hhc2g/dGhpcy5fbWFwLl9oYXNoLmdldEhhc2hTdHJpbmcoITApOiIiKX19LG5uLnByb3RvdHlwZS5fdXBkYXRlRGF0YT1mdW5jdGlvbih0KXt0JiYibWV0YWRhdGEiPT09dC5zb3VyY2VEYXRhVHlwZSYmKHRoaXMuX3VwZGF0ZUF0dHJpYnV0aW9ucygpLHRoaXMuX3VwZGF0ZUVkaXRMaW5rKCkpfSxubi5wcm90b3R5cGUuX3VwZGF0ZUF0dHJpYnV0aW9ucz1mdW5jdGlvbigpe2lmKHRoaXMuX21hcC5zdHlsZSl7dmFyIHQ9W107aWYodGhpcy5fbWFwLnN0eWxlLnN0eWxlc2hlZXQpe3ZhciBlPXRoaXMuX21hcC5zdHlsZS5zdHlsZXNoZWV0O3RoaXMuc3R5bGVPd25lcj1lLm93bmVyLHRoaXMuc3R5bGVJZD1lLmlkfXZhciByPXRoaXMuX21hcC5zdHlsZS5zb3VyY2VDYWNoZXM7Zm9yKHZhciBuIGluIHIpe3ZhciBpPXJbbl0uZ2V0U291cmNlKCk7aS5hdHRyaWJ1dGlvbiYmdC5pbmRleE9mKGkuYXR0cmlidXRpb24pPDAmJnQucHVzaChpLmF0dHJpYnV0aW9uKX10LnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5sZW5ndGgtZS5sZW5ndGh9KSwodD10LmZpbHRlcihmdW5jdGlvbihlLHIpe2Zvcih2YXIgbj1yKzE7bjx0Lmxlbmd0aDtuKyspaWYodFtuXS5pbmRleE9mKGUpPj0wKXJldHVybiExO3JldHVybiEwfSkpLmxlbmd0aD8odGhpcy5fY29udGFpbmVyLmlubmVySFRNTD10LmpvaW4oIiB8ICIpLHRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC1hdHRyaWItZW1wdHkiKSk6dGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLWF0dHJpYi1lbXB0eSIpLHRoaXMuX2VkaXRMaW5rPW51bGx9fSxubi5wcm90b3R5cGUuX3VwZGF0ZUNvbXBhY3Q9ZnVuY3Rpb24oKXt0aGlzLl9tYXAuZ2V0Q2FudmFzQ29udGFpbmVyKCkub2Zmc2V0V2lkdGg8PTY0MD90aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtY29tcGFjdCIpOnRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC1jb21wYWN0Iil9O3ZhciBhbj1mdW5jdGlvbigpe3QuYmluZEFsbChbIl91cGRhdGVMb2dvIl0sdGhpcyl9O2FuLnByb3RvdHlwZS5vbkFkZD1mdW5jdGlvbih0KXt0aGlzLl9tYXA9dCx0aGlzLl9jb250YWluZXI9cy5jcmVhdGUoImRpdiIsIm1hcGJveGdsLWN0cmwiKTt2YXIgZT1zLmNyZWF0ZSgiYSIsIm1hcGJveGdsLWN0cmwtbG9nbyIpO3JldHVybiBlLnRhcmdldD0iX2JsYW5rIixlLmhyZWY9Imh0dHBzOi8vd3d3Lm1hcGJveC5jb20vIixlLnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIsIk1hcGJveCBsb2dvIiksdGhpcy5fY29udGFpbmVyLmFwcGVuZENoaWxkKGUpLHRoaXMuX2NvbnRhaW5lci5zdHlsZS5kaXNwbGF5PSJub25lIix0aGlzLl9tYXAub24oInNvdXJjZWRhdGEiLHRoaXMuX3VwZGF0ZUxvZ28pLHRoaXMuX3VwZGF0ZUxvZ28oKSx0aGlzLl9jb250YWluZXJ9LGFuLnByb3RvdHlwZS5vblJlbW92ZT1mdW5jdGlvbigpe3MucmVtb3ZlKHRoaXMuX2NvbnRhaW5lciksdGhpcy5fbWFwLm9mZigic291cmNlZGF0YSIsdGhpcy5fdXBkYXRlTG9nbyl9LGFuLnByb3RvdHlwZS5nZXREZWZhdWx0UG9zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4iYm90dG9tLWxlZnQifSxhbi5wcm90b3R5cGUuX3VwZGF0ZUxvZ289ZnVuY3Rpb24odCl7dCYmIm1ldGFkYXRhIiE9PXQuc291cmNlRGF0YVR5cGV8fCh0aGlzLl9jb250YWluZXIuc3R5bGUuZGlzcGxheT10aGlzLl9sb2dvUmVxdWlyZWQoKT8iYmxvY2siOiJub25lIil9LGFuLnByb3RvdHlwZS5fbG9nb1JlcXVpcmVkPWZ1bmN0aW9uKCl7aWYodGhpcy5fbWFwLnN0eWxlKXt2YXIgdD10aGlzLl9tYXAuc3R5bGUuc291cmNlQ2FjaGVzO2Zvcih2YXIgZSBpbiB0KWlmKHRbZV0uZ2V0U291cmNlKCkubWFwYm94X2xvZ28pcmV0dXJuITA7cmV0dXJuITF9fTt2YXIgb249ZnVuY3Rpb24oKXt0aGlzLl9xdWV1ZT1bXSx0aGlzLl9pZD0wLHRoaXMuX2NsZWFyZWQ9ITEsdGhpcy5fY3VycmVudGx5UnVubmluZz0hMX07b24ucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0KXt2YXIgZT0rK3RoaXMuX2lkO3JldHVybiB0aGlzLl9xdWV1ZS5wdXNoKHtjYWxsYmFjazp0LGlkOmUsY2FuY2VsbGVkOiExfSksZX0sb24ucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fY3VycmVudGx5UnVubmluZyxyPTAsbj1lP3RoaXMuX3F1ZXVlLmNvbmNhdChlKTp0aGlzLl9xdWV1ZTtyPG4ubGVuZ3RoO3IrPTEpe3ZhciBpPW5bcl07aWYoaS5pZD09PXQpcmV0dXJuIHZvaWQoaS5jYW5jZWxsZWQ9ITApfX0sb24ucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2N1cnJlbnRseVJ1bm5pbmc9dGhpcy5fcXVldWU7dGhpcy5fcXVldWU9W107Zm9yKHZhciBlPTAscj10O2U8ci5sZW5ndGg7ZSs9MSl7dmFyIG49cltlXTtpZighbi5jYW5jZWxsZWQmJihuLmNhbGxiYWNrKCksdGhpcy5fY2xlYXJlZCkpYnJlYWt9dGhpcy5fY2xlYXJlZD0hMSx0aGlzLl9jdXJyZW50bHlSdW5uaW5nPSExfSxvbi5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLl9jdXJyZW50bHlSdW5uaW5nJiYodGhpcy5fY2xlYXJlZD0hMCksdGhpcy5fcXVldWU9W119O3ZhciBzbj10LmRlZmF1bHQuSFRNTEltYWdlRWxlbWVudCxsbj10LmRlZmF1bHQuSFRNTEVsZW1lbnQsY249e2NlbnRlcjpbMCwwXSx6b29tOjAsYmVhcmluZzowLHBpdGNoOjAsbWluWm9vbTowLG1heFpvb206MjIsaW50ZXJhY3RpdmU6ITAsc2Nyb2xsWm9vbTohMCxib3hab29tOiEwLGRyYWdSb3RhdGU6ITAsZHJhZ1BhbjohMCxrZXlib2FyZDohMCxkb3VibGVDbGlja1pvb206ITAsdG91Y2hab29tUm90YXRlOiEwLGJlYXJpbmdTbmFwOjcsaGFzaDohMSxhdHRyaWJ1dGlvbkNvbnRyb2w6ITAsZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdDohMSxwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6ITEsdHJhY2tSZXNpemU6ITAscmVuZGVyV29ybGRDb3BpZXM6ITAscmVmcmVzaEV4cGlyZWRUaWxlczohMCxtYXhUaWxlQ2FjaGVTaXplOm51bGwsdHJhbnNmb3JtUmVxdWVzdDpudWxsLGZhZGVEdXJhdGlvbjozMDB9LHVuPWZ1bmN0aW9uKHIpe2Z1bmN0aW9uIG4oZSl7aWYobnVsbCE9KGU9dC5leHRlbmQoe30sY24sZSkpLm1pblpvb20mJm51bGwhPWUubWF4Wm9vbSYmZS5taW5ab29tPmUubWF4Wm9vbSl0aHJvdyBuZXcgRXJyb3IoIm1heFpvb20gbXVzdCBiZSBncmVhdGVyIHRoYW4gbWluWm9vbSIpO3ZhciBuPW5ldyBGcihlLm1pblpvb20sZS5tYXhab29tLGUucmVuZGVyV29ybGRDb3BpZXMpO3IuY2FsbCh0aGlzLG4sZSksdGhpcy5faW50ZXJhY3RpdmU9ZS5pbnRlcmFjdGl2ZSx0aGlzLl9tYXhUaWxlQ2FjaGVTaXplPWUubWF4VGlsZUNhY2hlU2l6ZSx0aGlzLl9mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0PWUuZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdCx0aGlzLl9wcmVzZXJ2ZURyYXdpbmdCdWZmZXI9ZS5wcmVzZXJ2ZURyYXdpbmdCdWZmZXIsdGhpcy5fdHJhY2tSZXNpemU9ZS50cmFja1Jlc2l6ZSx0aGlzLl9iZWFyaW5nU25hcD1lLmJlYXJpbmdTbmFwLHRoaXMuX3JlZnJlc2hFeHBpcmVkVGlsZXM9ZS5yZWZyZXNoRXhwaXJlZFRpbGVzLHRoaXMuX2ZhZGVEdXJhdGlvbj1lLmZhZGVEdXJhdGlvbix0aGlzLl9jcm9zc0ZhZGluZ0ZhY3Rvcj0xLHRoaXMuX2NvbGxlY3RSZXNvdXJjZVRpbWluZz1lLmNvbGxlY3RSZXNvdXJjZVRpbWluZyx0aGlzLl9yZW5kZXJUYXNrUXVldWU9bmV3IG9uO3ZhciBpPWUudHJhbnNmb3JtUmVxdWVzdDtpZih0aGlzLl90cmFuc2Zvcm1SZXF1ZXN0PWk/ZnVuY3Rpb24odCxlKXtyZXR1cm4gaSh0LGUpfHx7dXJsOnR9fTpmdW5jdGlvbih0KXtyZXR1cm57dXJsOnR9fSwic3RyaW5nIj09dHlwZW9mIGUuY29udGFpbmVyKXt2YXIgYT10LmRlZmF1bHQuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZS5jb250YWluZXIpO2lmKCFhKXRocm93IG5ldyBFcnJvcigiQ29udGFpbmVyICciK2UuY29udGFpbmVyKyInIG5vdCBmb3VuZC4iKTt0aGlzLl9jb250YWluZXI9YX1lbHNle2lmKCEoZS5jb250YWluZXIgaW5zdGFuY2VvZiBsbikpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHR5cGU6ICdjb250YWluZXInIG11c3QgYmUgYSBTdHJpbmcgb3IgSFRNTEVsZW1lbnQuIik7dGhpcy5fY29udGFpbmVyPWUuY29udGFpbmVyfWUubWF4Qm91bmRzJiZ0aGlzLnNldE1heEJvdW5kcyhlLm1heEJvdW5kcyksdC5iaW5kQWxsKFsiX29uV2luZG93T25saW5lIiwiX29uV2luZG93UmVzaXplIiwiX2NvbnRleHRMb3N0IiwiX2NvbnRleHRSZXN0b3JlZCIsIl91cGRhdGUiLCJfcmVuZGVyIiwiX29uRGF0YSIsIl9vbkRhdGFMb2FkaW5nIl0sdGhpcyksdGhpcy5fc2V0dXBDb250YWluZXIoKSx0aGlzLl9zZXR1cFBhaW50ZXIoKSx0aGlzLm9uKCJtb3ZlIix0aGlzLl91cGRhdGUuYmluZCh0aGlzLCExKSksdGhpcy5vbigiem9vbSIsdGhpcy5fdXBkYXRlLmJpbmQodGhpcywhMCkpLHZvaWQgMCE9PXQuZGVmYXVsdCYmKHQuZGVmYXVsdC5hZGRFdmVudExpc3RlbmVyKCJvbmxpbmUiLHRoaXMuX29uV2luZG93T25saW5lLCExKSx0LmRlZmF1bHQuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIix0aGlzLl9vbldpbmRvd1Jlc2l6ZSwhMSkpLGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5nZXRDYW52YXNDb250YWluZXIoKSxuPW51bGwsaT0hMTtmb3IodmFyIGEgaW4gZW4pdFthXT1uZXcgZW5bYV0odCxlKSxlLmludGVyYWN0aXZlJiZlW2FdJiZ0W2FdLmVuYWJsZShlW2FdKTtzLmFkZEV2ZW50TGlzdGVuZXIociwibW91c2VvdXQiLGZ1bmN0aW9uKGUpe3QuZmlyZShuZXcgVnIoIm1vdXNlb3V0Iix0LGUpKX0pLHMuYWRkRXZlbnRMaXN0ZW5lcihyLCJtb3VzZWRvd24iLGZ1bmN0aW9uKHIpe2k9ITA7dmFyIG49bmV3IFZyKCJtb3VzZWRvd24iLHQscik7dC5maXJlKG4pLG4uZGVmYXVsdFByZXZlbnRlZHx8KGUuaW50ZXJhY3RpdmUmJiF0LmRvdWJsZUNsaWNrWm9vbS5pc0FjdGl2ZSgpJiZ0LnN0b3AoKSx0LmJveFpvb20ub25Nb3VzZURvd24ociksdC5ib3hab29tLmlzQWN0aXZlKCl8fHQuZHJhZ1Bhbi5pc0FjdGl2ZSgpfHx0LmRyYWdSb3RhdGUub25Nb3VzZURvd24ociksdC5ib3hab29tLmlzQWN0aXZlKCl8fHQuZHJhZ1JvdGF0ZS5pc0FjdGl2ZSgpfHx0LmRyYWdQYW4ub25Nb3VzZURvd24ocikpfSkscy5hZGRFdmVudExpc3RlbmVyKHIsIm1vdXNldXAiLGZ1bmN0aW9uKGUpe3ZhciByPXQuZHJhZ1JvdGF0ZS5pc0FjdGl2ZSgpO24mJiFyJiZ0LmZpcmUobmV3IFZyKCJjb250ZXh0bWVudSIsdCxuKSksbj1udWxsLGk9ITEsdC5maXJlKG5ldyBWcigibW91c2V1cCIsdCxlKSl9KSxzLmFkZEV2ZW50TGlzdGVuZXIociwibW91c2Vtb3ZlIixmdW5jdGlvbihlKXtpZighdC5kcmFnUGFuLmlzQWN0aXZlKCkmJiF0LmRyYWdSb3RhdGUuaXNBY3RpdmUoKSl7Zm9yKHZhciBuPWUudG9FbGVtZW50fHxlLnRhcmdldDtuJiZuIT09cjspbj1uLnBhcmVudE5vZGU7bj09PXImJnQuZmlyZShuZXcgVnIoIm1vdXNlbW92ZSIsdCxlKSl9fSkscy5hZGRFdmVudExpc3RlbmVyKHIsIm1vdXNlb3ZlciIsZnVuY3Rpb24oZSl7Zm9yKHZhciBuPWUudG9FbGVtZW50fHxlLnRhcmdldDtuJiZuIT09cjspbj1uLnBhcmVudE5vZGU7bj09PXImJnQuZmlyZShuZXcgVnIoIm1vdXNlb3ZlciIsdCxlKSl9KSxzLmFkZEV2ZW50TGlzdGVuZXIociwidG91Y2hzdGFydCIsZnVuY3Rpb24ocil7dmFyIG49bmV3IFVyKCJ0b3VjaHN0YXJ0Iix0LHIpO3QuZmlyZShuKSxuLmRlZmF1bHRQcmV2ZW50ZWR8fChlLmludGVyYWN0aXZlJiZ0LnN0b3AoKSx0LmJveFpvb20uaXNBY3RpdmUoKXx8dC5kcmFnUm90YXRlLmlzQWN0aXZlKCl8fHQuZHJhZ1Bhbi5vblRvdWNoU3RhcnQociksdC50b3VjaFpvb21Sb3RhdGUub25TdGFydChyKSx0LmRvdWJsZUNsaWNrWm9vbS5vblRvdWNoU3RhcnQobikpfSx7cGFzc2l2ZTohMX0pLHMuYWRkRXZlbnRMaXN0ZW5lcihyLCJ0b3VjaG1vdmUiLGZ1bmN0aW9uKGUpe3QuZmlyZShuZXcgVXIoInRvdWNobW92ZSIsdCxlKSl9LHtwYXNzaXZlOiExfSkscy5hZGRFdmVudExpc3RlbmVyKHIsInRvdWNoZW5kIixmdW5jdGlvbihlKXt0LmZpcmUobmV3IFVyKCJ0b3VjaGVuZCIsdCxlKSl9KSxzLmFkZEV2ZW50TGlzdGVuZXIociwidG91Y2hjYW5jZWwiLGZ1bmN0aW9uKGUpe3QuZmlyZShuZXcgVXIoInRvdWNoY2FuY2VsIix0LGUpKX0pLHMuYWRkRXZlbnRMaXN0ZW5lcihyLCJjbGljayIsZnVuY3Rpb24oZSl7dC5maXJlKG5ldyBWcigiY2xpY2siLHQsZSkpfSkscy5hZGRFdmVudExpc3RlbmVyKHIsImRibGNsaWNrIixmdW5jdGlvbihlKXt2YXIgcj1uZXcgVnIoImRibGNsaWNrIix0LGUpO3QuZmlyZShyKSxyLmRlZmF1bHRQcmV2ZW50ZWR8fHQuZG91YmxlQ2xpY2tab29tLm9uRGJsQ2xpY2socil9KSxzLmFkZEV2ZW50TGlzdGVuZXIociwiY29udGV4dG1lbnUiLGZ1bmN0aW9uKGUpe3ZhciByPXQuZHJhZ1JvdGF0ZS5pc0FjdGl2ZSgpO2l8fHI/aSYmKG49ZSk6dC5maXJlKG5ldyBWcigiY29udGV4dG1lbnUiLHQsZSkpLGUucHJldmVudERlZmF1bHQoKX0pLHMuYWRkRXZlbnRMaXN0ZW5lcihyLCJ3aGVlbCIsZnVuY3Rpb24oZSl7dmFyIHI9bmV3IHFyKCJ3aGVlbCIsdCxlKTt0LmZpcmUociksci5kZWZhdWx0UHJldmVudGVkfHx0LnNjcm9sbFpvb20ub25XaGVlbChlKX0se3Bhc3NpdmU6ITF9KX0odGhpcyxlKSx0aGlzLl9oYXNoPWUuaGFzaCYmKG5ldyBqcikuYWRkVG8odGhpcyksdGhpcy5faGFzaCYmdGhpcy5faGFzaC5fb25IYXNoQ2hhbmdlKCl8fHRoaXMuanVtcFRvKHtjZW50ZXI6ZS5jZW50ZXIsem9vbTplLnpvb20sYmVhcmluZzplLmJlYXJpbmcscGl0Y2g6ZS5waXRjaH0pLHRoaXMucmVzaXplKCksZS5zdHlsZSYmdGhpcy5zZXRTdHlsZShlLnN0eWxlLHtsb2NhbElkZW9ncmFwaEZvbnRGYW1pbHk6ZS5sb2NhbElkZW9ncmFwaEZvbnRGYW1pbHl9KSxlLmF0dHJpYnV0aW9uQ29udHJvbCYmdGhpcy5hZGRDb250cm9sKG5ldyBubiksdGhpcy5hZGRDb250cm9sKG5ldyBhbixlLmxvZ29Qb3NpdGlvbiksdGhpcy5vbigic3R5bGUubG9hZCIsZnVuY3Rpb24oKXt0aGlzLnRyYW5zZm9ybS51bm1vZGlmaWVkJiZ0aGlzLmp1bXBUbyh0aGlzLnN0eWxlLnN0eWxlc2hlZXQpfSksdGhpcy5vbigiZGF0YSIsdGhpcy5fb25EYXRhKSx0aGlzLm9uKCJkYXRhbG9hZGluZyIsdGhpcy5fb25EYXRhTG9hZGluZyl9ciYmKG4uX19wcm90b19fPXIpLG4ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUociYmci5wcm90b3R5cGUpLG4ucHJvdG90eXBlLmNvbnN0cnVjdG9yPW47dmFyIGk9e3Nob3dUaWxlQm91bmRhcmllczp7Y29uZmlndXJhYmxlOiEwfSxzaG93Q29sbGlzaW9uQm94ZXM6e2NvbmZpZ3VyYWJsZTohMH0sc2hvd092ZXJkcmF3SW5zcGVjdG9yOntjb25maWd1cmFibGU6ITB9LHJlcGFpbnQ6e2NvbmZpZ3VyYWJsZTohMH0sdmVydGljZXM6e2NvbmZpZ3VyYWJsZTohMH19O3JldHVybiBuLnByb3RvdHlwZS5hZGRDb250cm9sPWZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09ZSYmdC5nZXREZWZhdWx0UG9zaXRpb24mJihlPXQuZ2V0RGVmYXVsdFBvc2l0aW9uKCkpLHZvaWQgMD09PWUmJihlPSJ0b3AtcmlnaHQiKTt2YXIgcj10Lm9uQWRkKHRoaXMpLG49dGhpcy5fY29udHJvbFBvc2l0aW9uc1tlXTtyZXR1cm4tMSE9PWUuaW5kZXhPZigiYm90dG9tIik/bi5pbnNlcnRCZWZvcmUocixuLmZpcnN0Q2hpbGQpOm4uYXBwZW5kQ2hpbGQociksdGhpc30sbi5wcm90b3R5cGUucmVtb3ZlQ29udHJvbD1mdW5jdGlvbih0KXtyZXR1cm4gdC5vblJlbW92ZSh0aGlzKSx0aGlzfSxuLnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5fY29udGFpbmVyRGltZW5zaW9ucygpLG49clswXSxpPXJbMV07cmV0dXJuIHRoaXMuX3Jlc2l6ZUNhbnZhcyhuLGkpLHRoaXMudHJhbnNmb3JtLnJlc2l6ZShuLGkpLHRoaXMucGFpbnRlci5yZXNpemUobixpKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoIm1vdmVzdGFydCIsZSkpLmZpcmUobmV3IHQuRXZlbnQoIm1vdmUiLGUpKS5maXJlKG5ldyB0LkV2ZW50KCJyZXNpemUiLGUpKS5maXJlKG5ldyB0LkV2ZW50KCJtb3ZlZW5kIixlKSl9LG4ucHJvdG90eXBlLmdldEJvdW5kcz1mdW5jdGlvbigpe3ZhciBlPW5ldyBXKHRoaXMudHJhbnNmb3JtLnBvaW50TG9jYXRpb24obmV3IHQuZGVmYXVsdCQxKDAsdGhpcy50cmFuc2Zvcm0uaGVpZ2h0KSksdGhpcy50cmFuc2Zvcm0ucG9pbnRMb2NhdGlvbihuZXcgdC5kZWZhdWx0JDEodGhpcy50cmFuc2Zvcm0ud2lkdGgsMCkpKTtyZXR1cm4odGhpcy50cmFuc2Zvcm0uYW5nbGV8fHRoaXMudHJhbnNmb3JtLnBpdGNoKSYmKGUuZXh0ZW5kKHRoaXMudHJhbnNmb3JtLnBvaW50TG9jYXRpb24obmV3IHQuZGVmYXVsdCQxKHRoaXMudHJhbnNmb3JtLnNpemUueCwwKSkpLGUuZXh0ZW5kKHRoaXMudHJhbnNmb3JtLnBvaW50TG9jYXRpb24obmV3IHQuZGVmYXVsdCQxKDAsdGhpcy50cmFuc2Zvcm0uc2l6ZS55KSkpKSxlfSxuLnByb3RvdHlwZS5nZXRNYXhCb3VuZHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0ubGF0UmFuZ2UmJjI9PT10aGlzLnRyYW5zZm9ybS5sYXRSYW5nZS5sZW5ndGgmJnRoaXMudHJhbnNmb3JtLmxuZ1JhbmdlJiYyPT09dGhpcy50cmFuc2Zvcm0ubG5nUmFuZ2UubGVuZ3RoP25ldyBXKFt0aGlzLnRyYW5zZm9ybS5sbmdSYW5nZVswXSx0aGlzLnRyYW5zZm9ybS5sYXRSYW5nZVswXV0sW3RoaXMudHJhbnNmb3JtLmxuZ1JhbmdlWzFdLHRoaXMudHJhbnNmb3JtLmxhdFJhbmdlWzFdXSk6bnVsbH0sbi5wcm90b3R5cGUuc2V0TWF4Qm91bmRzPWZ1bmN0aW9uKHQpe2lmKHQpe3ZhciBlPVcuY29udmVydCh0KTt0aGlzLnRyYW5zZm9ybS5sbmdSYW5nZT1bZS5nZXRXZXN0KCksZS5nZXRFYXN0KCldLHRoaXMudHJhbnNmb3JtLmxhdFJhbmdlPVtlLmdldFNvdXRoKCksZS5nZXROb3J0aCgpXSx0aGlzLnRyYW5zZm9ybS5fY29uc3RyYWluKCksdGhpcy5fdXBkYXRlKCl9ZWxzZSBudWxsPT10JiYodGhpcy50cmFuc2Zvcm0ubG5nUmFuZ2U9bnVsbCx0aGlzLnRyYW5zZm9ybS5sYXRSYW5nZT1udWxsLHRoaXMuX3VwZGF0ZSgpKTtyZXR1cm4gdGhpc30sbi5wcm90b3R5cGUuc2V0TWluWm9vbT1mdW5jdGlvbih0KXtpZigodD1udWxsPT10PzA6dCk+PTAmJnQ8PXRoaXMudHJhbnNmb3JtLm1heFpvb20pcmV0dXJuIHRoaXMudHJhbnNmb3JtLm1pblpvb209dCx0aGlzLl91cGRhdGUoKSx0aGlzLmdldFpvb20oKTx0JiZ0aGlzLnNldFpvb20odCksdGhpczt0aHJvdyBuZXcgRXJyb3IoIm1pblpvb20gbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIHRoZSBjdXJyZW50IG1heFpvb20sIGluY2x1c2l2ZSIpfSxuLnByb3RvdHlwZS5nZXRNaW5ab29tPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHJhbnNmb3JtLm1pblpvb219LG4ucHJvdG90eXBlLnNldE1heFpvb209ZnVuY3Rpb24odCl7aWYoKHQ9bnVsbD09dD8yMjp0KT49dGhpcy50cmFuc2Zvcm0ubWluWm9vbSlyZXR1cm4gdGhpcy50cmFuc2Zvcm0ubWF4Wm9vbT10LHRoaXMuX3VwZGF0ZSgpLHRoaXMuZ2V0Wm9vbSgpPnQmJnRoaXMuc2V0Wm9vbSh0KSx0aGlzO3Rocm93IG5ldyBFcnJvcigibWF4Wm9vbSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB0aGUgY3VycmVudCBtaW5ab29tIil9LG4ucHJvdG90eXBlLmdldFJlbmRlcldvcmxkQ29waWVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHJhbnNmb3JtLnJlbmRlcldvcmxkQ29waWVzfSxuLnByb3RvdHlwZS5zZXRSZW5kZXJXb3JsZENvcGllcz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0ucmVuZGVyV29ybGRDb3BpZXM9dCx0aGlzLl91cGRhdGUoKSx0aGlzfSxuLnByb3RvdHlwZS5nZXRNYXhab29tPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHJhbnNmb3JtLm1heFpvb219LG4ucHJvdG90eXBlLnByb2plY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudHJhbnNmb3JtLmxvY2F0aW9uUG9pbnQoRy5jb252ZXJ0KHQpKX0sbi5wcm90b3R5cGUudW5wcm9qZWN0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnRyYW5zZm9ybS5wb2ludExvY2F0aW9uKHQuZGVmYXVsdCQxLmNvbnZlcnQoZSkpfSxuLnByb3RvdHlwZS5pc01vdmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3Zpbmd8fHRoaXMuZHJhZ1Bhbi5pc0FjdGl2ZSgpfHx0aGlzLmRyYWdSb3RhdGUuaXNBY3RpdmUoKXx8dGhpcy5zY3JvbGxab29tLmlzQWN0aXZlKCl9LG4ucHJvdG90eXBlLmlzWm9vbWluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl96b29taW5nfHx0aGlzLnNjcm9sbFpvb20uaXNBY3RpdmUoKX0sbi5wcm90b3R5cGUuaXNSb3RhdGluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yb3RhdGluZ3x8dGhpcy5kcmFnUm90YXRlLmlzQWN0aXZlKCl9LG4ucHJvdG90eXBlLm9uPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaSxhPXRoaXM7aWYodm9pZCAwPT09bilyZXR1cm4gci5wcm90b3R5cGUub24uY2FsbCh0aGlzLHQsZSk7dmFyIG89ZnVuY3Rpb24oKXtpZigibW91c2VlbnRlciI9PT10fHwibW91c2VvdmVyIj09PXQpe3ZhciByPSExO3JldHVybntsYXllcjplLGxpc3RlbmVyOm4sZGVsZWdhdGVzOnttb3VzZW1vdmU6ZnVuY3Rpb24oaSl7dmFyIG89YS5nZXRMYXllcihlKT9hLnF1ZXJ5UmVuZGVyZWRGZWF0dXJlcyhpLnBvaW50LHtsYXllcnM6W2VdfSk6W107by5sZW5ndGg/cnx8KHI9ITAsbi5jYWxsKGEsbmV3IFZyKHQsYSxpLm9yaWdpbmFsRXZlbnQse2ZlYXR1cmVzOm99KSkpOnI9ITF9LG1vdXNlb3V0OmZ1bmN0aW9uKCl7cj0hMX19fX1pZigibW91c2VsZWF2ZSI9PT10fHwibW91c2VvdXQiPT09dCl7dmFyIG89ITE7cmV0dXJue2xheWVyOmUsbGlzdGVuZXI6bixkZWxlZ2F0ZXM6e21vdXNlbW92ZTpmdW5jdGlvbihyKXsoYS5nZXRMYXllcihlKT9hLnF1ZXJ5UmVuZGVyZWRGZWF0dXJlcyhyLnBvaW50LHtsYXllcnM6W2VdfSk6W10pLmxlbmd0aD9vPSEwOm8mJihvPSExLG4uY2FsbChhLG5ldyBWcih0LGEsci5vcmlnaW5hbEV2ZW50KSkpfSxtb3VzZW91dDpmdW5jdGlvbihlKXtvJiYobz0hMSxuLmNhbGwoYSxuZXcgVnIodCxhLGUub3JpZ2luYWxFdmVudCkpKX19fX1yZXR1cm57bGF5ZXI6ZSxsaXN0ZW5lcjpuLGRlbGVnYXRlczooaT17fSxpW3RdPWZ1bmN0aW9uKHQpe3ZhciByPWEuZ2V0TGF5ZXIoZSk/YS5xdWVyeVJlbmRlcmVkRmVhdHVyZXModC5wb2ludCx7bGF5ZXJzOltlXX0pOltdO3IubGVuZ3RoJiYodC5mZWF0dXJlcz1yLG4uY2FsbChhLHQpLGRlbGV0ZSB0LmZlYXR1cmVzKX0saSl9fSgpO2Zvcih2YXIgcyBpbiB0aGlzLl9kZWxlZ2F0ZWRMaXN0ZW5lcnM9dGhpcy5fZGVsZWdhdGVkTGlzdGVuZXJzfHx7fSx0aGlzLl9kZWxlZ2F0ZWRMaXN0ZW5lcnNbdF09dGhpcy5fZGVsZWdhdGVkTGlzdGVuZXJzW3RdfHxbXSx0aGlzLl9kZWxlZ2F0ZWRMaXN0ZW5lcnNbdF0ucHVzaChvKSxvLmRlbGVnYXRlcylhLm9uKHMsby5kZWxlZ2F0ZXNbc10pO3JldHVybiB0aGlzfSxuLnByb3RvdHlwZS5vZmY9ZnVuY3Rpb24odCxlLG4pe2lmKHZvaWQgMD09PW4pcmV0dXJuIHIucHJvdG90eXBlLm9mZi5jYWxsKHRoaXMsdCxlKTtpZih0aGlzLl9kZWxlZ2F0ZWRMaXN0ZW5lcnMmJnRoaXMuX2RlbGVnYXRlZExpc3RlbmVyc1t0XSlmb3IodmFyIGk9dGhpcy5fZGVsZWdhdGVkTGlzdGVuZXJzW3RdLGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIG89aVthXTtpZihvLmxheWVyPT09ZSYmby5saXN0ZW5lcj09PW4pe2Zvcih2YXIgcyBpbiBvLmRlbGVnYXRlcyl0aGlzLm9mZihzLG8uZGVsZWdhdGVzW3NdKTtyZXR1cm4gaS5zcGxpY2UoYSwxKSx0aGlzfX1yZXR1cm4gdGhpc30sbi5wcm90b3R5cGUucXVlcnlSZW5kZXJlZEZlYXR1cmVzPWZ1bmN0aW9uKGUscil7dmFyIG47cmV0dXJuIDI9PT1hcmd1bWVudHMubGVuZ3RoPyhlPWUscj1yKToxPT09YXJndW1lbnRzLmxlbmd0aCYmKChuPWUpaW5zdGFuY2VvZiB0LmRlZmF1bHQkMXx8QXJyYXkuaXNBcnJheShuKSk/KGU9ZSxyPXt9KToxPT09YXJndW1lbnRzLmxlbmd0aD9yPWU9dm9pZCAwOihlPXZvaWQgMCxyPXt9KSx0aGlzLnN0eWxlP3RoaXMuc3R5bGUucXVlcnlSZW5kZXJlZEZlYXR1cmVzKHRoaXMuX21ha2VRdWVyeUdlb21ldHJ5KGUpLHIsdGhpcy50cmFuc2Zvcm0pOltdfSxuLnByb3RvdHlwZS5fbWFrZVF1ZXJ5R2VvbWV0cnk9ZnVuY3Rpb24oZSl7dmFyIHIsbj10aGlzO2lmKHZvaWQgMD09PWUmJihlPVt0LmRlZmF1bHQkMS5jb252ZXJ0KFswLDBdKSx0LmRlZmF1bHQkMS5jb252ZXJ0KFt0aGlzLnRyYW5zZm9ybS53aWR0aCx0aGlzLnRyYW5zZm9ybS5oZWlnaHRdKV0pLGUgaW5zdGFuY2VvZiB0LmRlZmF1bHQkMXx8Im51bWJlciI9PXR5cGVvZiBlWzBdKXI9W3QuZGVmYXVsdCQxLmNvbnZlcnQoZSldO2Vsc2V7dmFyIGk9W3QuZGVmYXVsdCQxLmNvbnZlcnQoZVswXSksdC5kZWZhdWx0JDEuY29udmVydChlWzFdKV07cj1baVswXSxuZXcgdC5kZWZhdWx0JDEoaVsxXS54LGlbMF0ueSksaVsxXSxuZXcgdC5kZWZhdWx0JDEoaVswXS54LGlbMV0ueSksaVswXV19cmV0dXJue3ZpZXdwb3J0OnIsd29ybGRDb29yZGluYXRlOnIubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBuLnRyYW5zZm9ybS5wb2ludENvb3JkaW5hdGUodCl9KX19LG4ucHJvdG90eXBlLnF1ZXJ5U291cmNlRmVhdHVyZXM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5zdHlsZS5xdWVyeVNvdXJjZUZlYXR1cmVzKHQsZSl9LG4ucHJvdG90eXBlLnNldFN0eWxlPWZ1bmN0aW9uKGUscil7aWYoKCFyfHwhMSE9PXIuZGlmZiYmIXIubG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5KSYmdGhpcy5zdHlsZSYmZSYmIm9iamVjdCI9PXR5cGVvZiBlKXRyeXtyZXR1cm4gdGhpcy5zdHlsZS5zZXRTdGF0ZShlKSYmdGhpcy5fdXBkYXRlKCEwKSx0aGlzfWNhdGNoKGUpe3Qud2Fybk9uY2UoIlVuYWJsZSB0byBwZXJmb3JtIHN0eWxlIGRpZmY6ICIrKGUubWVzc2FnZXx8ZS5lcnJvcnx8ZSkrIi4gIFJlYnVpbGRpbmcgdGhlIHN0eWxlIGZyb20gc2NyYXRjaC4iKX1yZXR1cm4gdGhpcy5zdHlsZSYmKHRoaXMuc3R5bGUuc2V0RXZlbnRlZFBhcmVudChudWxsKSx0aGlzLnN0eWxlLl9yZW1vdmUoKSksZT8odGhpcy5zdHlsZT1uZXcgSmUodGhpcyxyfHx7fSksdGhpcy5zdHlsZS5zZXRFdmVudGVkUGFyZW50KHRoaXMse3N0eWxlOnRoaXMuc3R5bGV9KSwic3RyaW5nIj09dHlwZW9mIGU/dGhpcy5zdHlsZS5sb2FkVVJMKGUpOnRoaXMuc3R5bGUubG9hZEpTT04oZSksdGhpcyk6KGRlbGV0ZSB0aGlzLnN0eWxlLHRoaXMpfSxuLnByb3RvdHlwZS5nZXRTdHlsZT1mdW5jdGlvbigpe2lmKHRoaXMuc3R5bGUpcmV0dXJuIHRoaXMuc3R5bGUuc2VyaWFsaXplKCl9LG4ucHJvdG90eXBlLmlzU3R5bGVMb2FkZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdHlsZT90aGlzLnN0eWxlLmxvYWRlZCgpOnQud2Fybk9uY2UoIlRoZXJlIGlzIG5vIHN0eWxlIGFkZGVkIHRvIHRoZSBtYXAuIil9LG4ucHJvdG90eXBlLmFkZFNvdXJjZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnN0eWxlLmFkZFNvdXJjZSh0LGUpLHRoaXMuX3VwZGF0ZSghMCksdGhpc30sbi5wcm90b3R5cGUuaXNTb3VyY2VMb2FkZWQ9ZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5zdHlsZSYmdGhpcy5zdHlsZS5zb3VyY2VDYWNoZXNbZV07aWYodm9pZCAwIT09cilyZXR1cm4gci5sb2FkZWQoKTt0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIlRoZXJlIGlzIG5vIHNvdXJjZSB3aXRoIElEICciK2UrIiciKSkpfSxuLnByb3RvdHlwZS5hcmVUaWxlc0xvYWRlZD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuc3R5bGUmJnRoaXMuc3R5bGUuc291cmNlQ2FjaGVzO2Zvcih2YXIgZSBpbiB0KXt2YXIgcj10W2VdLl90aWxlcztmb3IodmFyIG4gaW4gcil7dmFyIGk9cltuXTtpZigibG9hZGVkIiE9PWkuc3RhdGUmJiJlcnJvcmVkIiE9PWkuc3RhdGUpcmV0dXJuITF9fXJldHVybiEwfSxuLnByb3RvdHlwZS5hZGRTb3VyY2VUeXBlPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5zdHlsZS5hZGRTb3VyY2VUeXBlKHQsZSxyKX0sbi5wcm90b3R5cGUucmVtb3ZlU291cmNlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnN0eWxlLnJlbW92ZVNvdXJjZSh0KSx0aGlzLl91cGRhdGUoITApLHRoaXN9LG4ucHJvdG90eXBlLmdldFNvdXJjZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zdHlsZS5nZXRTb3VyY2UodCl9LG4ucHJvdG90eXBlLmFkZEltYWdlPWZ1bmN0aW9uKGUscixuKXt2b2lkIDA9PT1uJiYobj17fSk7dmFyIGk9bi5waXhlbFJhdGlvO3ZvaWQgMD09PWkmJihpPTEpO3ZhciBvPW4uc2RmO2lmKHZvaWQgMD09PW8mJihvPSExKSxyIGluc3RhbmNlb2Ygc24pe3ZhciBzPWEuZ2V0SW1hZ2VEYXRhKHIpLGw9cy53aWR0aCxjPXMuaGVpZ2h0LHU9cy5kYXRhO3RoaXMuc3R5bGUuYWRkSW1hZ2UoZSx7ZGF0YTpuZXcgdC5SR0JBSW1hZ2Uoe3dpZHRoOmwsaGVpZ2h0OmN9LHUpLHBpeGVsUmF0aW86aSxzZGY6b30pfWVsc2V7aWYodm9pZCAwPT09ci53aWR0aHx8dm9pZCAwPT09ci5oZWlnaHQpcmV0dXJuIHRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigiSW52YWxpZCBhcmd1bWVudHMgdG8gbWFwLmFkZEltYWdlKCkuIFRoZSBzZWNvbmQgYXJndW1lbnQgbXVzdCBiZSBhbiBgSFRNTEltYWdlRWxlbWVudGAsIGBJbWFnZURhdGFgLCBvciBvYmplY3Qgd2l0aCBgd2lkdGhgLCBgaGVpZ2h0YCwgYW5kIGBkYXRhYCBwcm9wZXJ0aWVzIHdpdGggdGhlIHNhbWUgZm9ybWF0IGFzIGBJbWFnZURhdGFgIikpKTt2YXIgaD1yLndpZHRoLGY9ci5oZWlnaHQscD1yLmRhdGE7dGhpcy5zdHlsZS5hZGRJbWFnZShlLHtkYXRhOm5ldyB0LlJHQkFJbWFnZSh7d2lkdGg6aCxoZWlnaHQ6Zn0scC5zbGljZSgwKSkscGl4ZWxSYXRpbzppLHNkZjpvfSl9fSxuLnByb3RvdHlwZS5oYXNJbWFnZT1mdW5jdGlvbihlKXtyZXR1cm4gZT8hIXRoaXMuc3R5bGUuZ2V0SW1hZ2UoZSk6KHRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigiTWlzc2luZyByZXF1aXJlZCBpbWFnZSBpZCIpKSksITEpfSxuLnByb3RvdHlwZS5yZW1vdmVJbWFnZT1mdW5jdGlvbih0KXt0aGlzLnN0eWxlLnJlbW92ZUltYWdlKHQpfSxuLnByb3RvdHlwZS5sb2FkSW1hZ2U9ZnVuY3Rpb24oZSxyKXt0LmdldEltYWdlKHRoaXMuX3RyYW5zZm9ybVJlcXVlc3QoZSx0LlJlc291cmNlVHlwZS5JbWFnZSkscil9LG4ucHJvdG90eXBlLmFkZExheWVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuc3R5bGUuYWRkTGF5ZXIodCxlKSx0aGlzLl91cGRhdGUoITApLHRoaXN9LG4ucHJvdG90eXBlLm1vdmVMYXllcj1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnN0eWxlLm1vdmVMYXllcih0LGUpLHRoaXMuX3VwZGF0ZSghMCksdGhpc30sbi5wcm90b3R5cGUucmVtb3ZlTGF5ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc3R5bGUucmVtb3ZlTGF5ZXIodCksdGhpcy5fdXBkYXRlKCEwKSx0aGlzfSxuLnByb3RvdHlwZS5nZXRMYXllcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zdHlsZS5nZXRMYXllcih0KX0sbi5wcm90b3R5cGUuc2V0RmlsdGVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuc3R5bGUuc2V0RmlsdGVyKHQsZSksdGhpcy5fdXBkYXRlKCEwKSx0aGlzfSxuLnByb3RvdHlwZS5zZXRMYXllclpvb21SYW5nZT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuc3R5bGUuc2V0TGF5ZXJab29tUmFuZ2UodCxlLHIpLHRoaXMuX3VwZGF0ZSghMCksdGhpc30sbi5wcm90b3R5cGUuZ2V0RmlsdGVyPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnN0eWxlLmdldEZpbHRlcih0KX0sbi5wcm90b3R5cGUuc2V0UGFpbnRQcm9wZXJ0eT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuc3R5bGUuc2V0UGFpbnRQcm9wZXJ0eSh0LGUsciksdGhpcy5fdXBkYXRlKCEwKSx0aGlzfSxuLnByb3RvdHlwZS5nZXRQYWludFByb3BlcnR5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuc3R5bGUuZ2V0UGFpbnRQcm9wZXJ0eSh0LGUpfSxuLnByb3RvdHlwZS5zZXRMYXlvdXRQcm9wZXJ0eT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuc3R5bGUuc2V0TGF5b3V0UHJvcGVydHkodCxlLHIpLHRoaXMuX3VwZGF0ZSghMCksdGhpc30sbi5wcm90b3R5cGUuZ2V0TGF5b3V0UHJvcGVydHk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5zdHlsZS5nZXRMYXlvdXRQcm9wZXJ0eSh0LGUpfSxuLnByb3RvdHlwZS5zZXRMaWdodD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zdHlsZS5zZXRMaWdodCh0KSx0aGlzLl91cGRhdGUoITApLHRoaXN9LG4ucHJvdG90eXBlLmdldExpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3R5bGUuZ2V0TGlnaHQoKX0sbi5wcm90b3R5cGUuZ2V0Q29udGFpbmVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbnRhaW5lcn0sbi5wcm90b3R5cGUuZ2V0Q2FudmFzQ29udGFpbmVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbnZhc0NvbnRhaW5lcn0sbi5wcm90b3R5cGUuZ2V0Q2FudmFzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbnZhc30sbi5wcm90b3R5cGUuX2NvbnRhaW5lckRpbWVuc2lvbnM9ZnVuY3Rpb24oKXt2YXIgdD0wLGU9MDtyZXR1cm4gdGhpcy5fY29udGFpbmVyJiYodD10aGlzLl9jb250YWluZXIub2Zmc2V0V2lkdGh8fDQwMCxlPXRoaXMuX2NvbnRhaW5lci5vZmZzZXRIZWlnaHR8fDMwMCksW3QsZV19LG4ucHJvdG90eXBlLl9zZXR1cENvbnRhaW5lcj1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2NvbnRhaW5lcjt0LmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLW1hcCIpLCh0aGlzLl9taXNzaW5nQ1NTQ29udGFpbmVyPXMuY3JlYXRlKCJkaXYiLCJtYXBib3hnbC1taXNzaW5nLWNzcyIsdCkpLmlubmVySFRNTD0iTWlzc2luZyBNYXBib3ggR0wgSlMgQ1NTIjt2YXIgZT10aGlzLl9jYW52YXNDb250YWluZXI9cy5jcmVhdGUoImRpdiIsIm1hcGJveGdsLWNhbnZhcy1jb250YWluZXIiLHQpO3RoaXMuX2ludGVyYWN0aXZlJiZlLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLWludGVyYWN0aXZlIiksdGhpcy5fY2FudmFzPXMuY3JlYXRlKCJjYW52YXMiLCJtYXBib3hnbC1jYW52YXMiLGUpLHRoaXMuX2NhbnZhcy5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLHRoaXMuX2NhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRsb3N0Iix0aGlzLl9jb250ZXh0TG9zdCwhMSksdGhpcy5fY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dHJlc3RvcmVkIix0aGlzLl9jb250ZXh0UmVzdG9yZWQsITEpLHRoaXMuX2NhbnZhcy5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiMCIpLHRoaXMuX2NhbnZhcy5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLCJNYXAiKTt2YXIgcj10aGlzLl9jb250YWluZXJEaW1lbnNpb25zKCk7dGhpcy5fcmVzaXplQ2FudmFzKHJbMF0sclsxXSk7dmFyIG49dGhpcy5fY29udHJvbENvbnRhaW5lcj1zLmNyZWF0ZSgiZGl2IiwibWFwYm94Z2wtY29udHJvbC1jb250YWluZXIiLHQpLGk9dGhpcy5fY29udHJvbFBvc2l0aW9ucz17fTtbInRvcC1sZWZ0IiwidG9wLXJpZ2h0IiwiYm90dG9tLWxlZnQiLCJib3R0b20tcmlnaHQiXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lbdF09cy5jcmVhdGUoImRpdiIsIm1hcGJveGdsLWN0cmwtIit0LG4pfSl9LG4ucHJvdG90eXBlLl9yZXNpemVDYW52YXM9ZnVuY3Rpb24oZSxyKXt2YXIgbj10LmRlZmF1bHQuZGV2aWNlUGl4ZWxSYXRpb3x8MTt0aGlzLl9jYW52YXMud2lkdGg9biplLHRoaXMuX2NhbnZhcy5oZWlnaHQ9bipyLHRoaXMuX2NhbnZhcy5zdHlsZS53aWR0aD1lKyJweCIsdGhpcy5fY2FudmFzLnN0eWxlLmhlaWdodD1yKyJweCJ9LG4ucHJvdG90eXBlLl9zZXR1cFBhaW50ZXI9ZnVuY3Rpb24oKXt2YXIgcj10LmV4dGVuZCh7ZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdDp0aGlzLl9mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0LHByZXNlcnZlRHJhd2luZ0J1ZmZlcjp0aGlzLl9wcmVzZXJ2ZURyYXdpbmdCdWZmZXJ9LGUud2ViR0xDb250ZXh0QXR0cmlidXRlcyksbj10aGlzLl9jYW52YXMuZ2V0Q29udGV4dCgid2ViZ2wiLHIpfHx0aGlzLl9jYW52YXMuZ2V0Q29udGV4dCgiZXhwZXJpbWVudGFsLXdlYmdsIixyKTtuP3RoaXMucGFpbnRlcj1uZXcgenIobix0aGlzLnRyYW5zZm9ybSk6dGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBXZWJHTCIpKSl9LG4ucHJvdG90eXBlLl9jb250ZXh0TG9zdD1mdW5jdGlvbihlKXtlLnByZXZlbnREZWZhdWx0KCksdGhpcy5fZnJhbWVJZCYmKGEuY2FuY2VsRnJhbWUodGhpcy5fZnJhbWVJZCksdGhpcy5fZnJhbWVJZD1udWxsKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoIndlYmdsY29udGV4dGxvc3QiLHtvcmlnaW5hbEV2ZW50OmV9KSl9LG4ucHJvdG90eXBlLl9jb250ZXh0UmVzdG9yZWQ9ZnVuY3Rpb24oZSl7dGhpcy5fc2V0dXBQYWludGVyKCksdGhpcy5yZXNpemUoKSx0aGlzLl91cGRhdGUoKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoIndlYmdsY29udGV4dHJlc3RvcmVkIix7b3JpZ2luYWxFdmVudDplfSkpfSxuLnByb3RvdHlwZS5sb2FkZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5fc3R5bGVEaXJ0eSYmIXRoaXMuX3NvdXJjZXNEaXJ0eSYmISghdGhpcy5zdHlsZXx8IXRoaXMuc3R5bGUubG9hZGVkKCkpfSxuLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHQpe3RoaXMuc3R5bGUmJih0aGlzLl9zdHlsZURpcnR5PXRoaXMuX3N0eWxlRGlydHl8fHQsdGhpcy5fc291cmNlc0RpcnR5PSEwLHRoaXMuX3JlcmVuZGVyKCkpfSxuLnByb3RvdHlwZS5fcmVxdWVzdFJlbmRlckZyYW1lPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl91cGRhdGUoKSx0aGlzLl9yZW5kZXJUYXNrUXVldWUuYWRkKHQpfSxuLnByb3RvdHlwZS5fY2FuY2VsUmVuZGVyRnJhbWU9ZnVuY3Rpb24odCl7dGhpcy5fcmVuZGVyVGFza1F1ZXVlLnJlbW92ZSh0KX0sbi5wcm90b3R5cGUuX3JlbmRlcj1mdW5jdGlvbigpe3RoaXMuX3JlbmRlclRhc2tRdWV1ZS5ydW4oKTt2YXIgZT0hMTtpZih0aGlzLnN0eWxlJiZ0aGlzLl9zdHlsZURpcnR5KXt0aGlzLl9zdHlsZURpcnR5PSExO3ZhciByPXRoaXMudHJhbnNmb3JtLnpvb20sbj1hLm5vdygpO3RoaXMuc3R5bGUuem9vbUhpc3RvcnkudXBkYXRlKHIsbik7dmFyIGk9bmV3IHQuZGVmYXVsdCQxNihyLHtub3c6bixmYWRlRHVyYXRpb246dGhpcy5fZmFkZUR1cmF0aW9uLHpvb21IaXN0b3J5OnRoaXMuc3R5bGUuem9vbUhpc3RvcnksdHJhbnNpdGlvbjp0aGlzLnN0eWxlLmdldFRyYW5zaXRpb24oKX0pLG89aS5jcm9zc0ZhZGluZ0ZhY3RvcigpOzE9PT1vJiZvPT09dGhpcy5fY3Jvc3NGYWRpbmdGYWN0b3J8fChlPSEwLHRoaXMuX2Nyb3NzRmFkaW5nRmFjdG9yPW8pLHRoaXMuc3R5bGUudXBkYXRlKGkpfXJldHVybiB0aGlzLnN0eWxlJiZ0aGlzLl9zb3VyY2VzRGlydHkmJih0aGlzLl9zb3VyY2VzRGlydHk9ITEsdGhpcy5zdHlsZS5fdXBkYXRlU291cmNlcyh0aGlzLnRyYW5zZm9ybSkpLHRoaXMuX3BsYWNlbWVudERpcnR5PXRoaXMuc3R5bGUmJnRoaXMuc3R5bGUuX3VwZGF0ZVBsYWNlbWVudCh0aGlzLnBhaW50ZXIudHJhbnNmb3JtLHRoaXMuc2hvd0NvbGxpc2lvbkJveGVzLHRoaXMuX2ZhZGVEdXJhdGlvbiksdGhpcy5wYWludGVyLnJlbmRlcih0aGlzLnN0eWxlLHtzaG93VGlsZUJvdW5kYXJpZXM6dGhpcy5zaG93VGlsZUJvdW5kYXJpZXMsc2hvd092ZXJkcmF3SW5zcGVjdG9yOnRoaXMuX3Nob3dPdmVyZHJhd0luc3BlY3Rvcixyb3RhdGluZzp0aGlzLmlzUm90YXRpbmcoKSx6b29taW5nOnRoaXMuaXNab29taW5nKCksZmFkZUR1cmF0aW9uOnRoaXMuX2ZhZGVEdXJhdGlvbn0pLHRoaXMuZmlyZShuZXcgdC5FdmVudCgicmVuZGVyIikpLHRoaXMubG9hZGVkKCkmJiF0aGlzLl9sb2FkZWQmJih0aGlzLl9sb2FkZWQ9ITAsdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJsb2FkIikpKSx0aGlzLnN0eWxlJiYodGhpcy5zdHlsZS5oYXNUcmFuc2l0aW9ucygpfHxlKSYmKHRoaXMuX3N0eWxlRGlydHk9ITApLCh0aGlzLl9zb3VyY2VzRGlydHl8fHRoaXMuX3JlcGFpbnR8fHRoaXMuX3N0eWxlRGlydHl8fHRoaXMuX3BsYWNlbWVudERpcnR5KSYmdGhpcy5fcmVyZW5kZXIoKSx0aGlzfSxuLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oKXt0aGlzLl9oYXNoJiZ0aGlzLl9oYXNoLnJlbW92ZSgpLGEuY2FuY2VsRnJhbWUodGhpcy5fZnJhbWVJZCksdGhpcy5fcmVuZGVyVGFza1F1ZXVlLmNsZWFyKCksdGhpcy5fZnJhbWVJZD1udWxsLHRoaXMuc2V0U3R5bGUobnVsbCksdm9pZCAwIT09dC5kZWZhdWx0JiYodC5kZWZhdWx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsdGhpcy5fb25XaW5kb3dSZXNpemUsITEpLHQuZGVmYXVsdC5yZW1vdmVFdmVudExpc3RlbmVyKCJvbmxpbmUiLHRoaXMuX29uV2luZG93T25saW5lLCExKSk7dmFyIGU9dGhpcy5wYWludGVyLmNvbnRleHQuZ2wuZ2V0RXh0ZW5zaW9uKCJXRUJHTF9sb3NlX2NvbnRleHQiKTtlJiZlLmxvc2VDb250ZXh0KCksaG4odGhpcy5fY2FudmFzQ29udGFpbmVyKSxobih0aGlzLl9jb250cm9sQ29udGFpbmVyKSxobih0aGlzLl9taXNzaW5nQ1NTQ29udGFpbmVyKSx0aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtbWFwIiksdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJyZW1vdmUiKSl9LG4ucHJvdG90eXBlLl9yZXJlbmRlcj1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5zdHlsZSYmIXRoaXMuX2ZyYW1lSWQmJih0aGlzLl9mcmFtZUlkPWEuZnJhbWUoZnVuY3Rpb24oKXt0Ll9mcmFtZUlkPW51bGwsdC5fcmVuZGVyKCl9KSl9LG4ucHJvdG90eXBlLl9vbldpbmRvd09ubGluZT1mdW5jdGlvbigpe3RoaXMuX3VwZGF0ZSgpfSxuLnByb3RvdHlwZS5fb25XaW5kb3dSZXNpemU9ZnVuY3Rpb24oKXt0aGlzLl90cmFja1Jlc2l6ZSYmdGhpcy5zdG9wKCkucmVzaXplKCkuX3VwZGF0ZSgpfSxpLnNob3dUaWxlQm91bmRhcmllcy5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX3Nob3dUaWxlQm91bmRhcmllc30saS5zaG93VGlsZUJvdW5kYXJpZXMuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3Nob3dUaWxlQm91bmRhcmllcyE9PXQmJih0aGlzLl9zaG93VGlsZUJvdW5kYXJpZXM9dCx0aGlzLl91cGRhdGUoKSl9LGkuc2hvd0NvbGxpc2lvbkJveGVzLmdldD1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5fc2hvd0NvbGxpc2lvbkJveGVzfSxpLnNob3dDb2xsaXNpb25Cb3hlcy5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc2hvd0NvbGxpc2lvbkJveGVzIT09dCYmKHRoaXMuX3Nob3dDb2xsaXNpb25Cb3hlcz10LHQ/dGhpcy5zdHlsZS5fZ2VuZXJhdGVDb2xsaXNpb25Cb3hlcygpOnRoaXMuX3VwZGF0ZSgpKX0saS5zaG93T3ZlcmRyYXdJbnNwZWN0b3IuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9zaG93T3ZlcmRyYXdJbnNwZWN0b3J9LGkuc2hvd092ZXJkcmF3SW5zcGVjdG9yLnNldD1mdW5jdGlvbih0KXt0aGlzLl9zaG93T3ZlcmRyYXdJbnNwZWN0b3IhPT10JiYodGhpcy5fc2hvd092ZXJkcmF3SW5zcGVjdG9yPXQsdGhpcy5fdXBkYXRlKCkpfSxpLnJlcGFpbnQuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9yZXBhaW50fSxpLnJlcGFpbnQuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3JlcGFpbnQ9dCx0aGlzLl91cGRhdGUoKX0saS52ZXJ0aWNlcy5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX3ZlcnRpY2VzfSxpLnZlcnRpY2VzLnNldD1mdW5jdGlvbih0KXt0aGlzLl92ZXJ0aWNlcz10LHRoaXMuX3VwZGF0ZSgpfSxuLnByb3RvdHlwZS5fb25EYXRhPWZ1bmN0aW9uKGUpe3RoaXMuX3VwZGF0ZSgic3R5bGUiPT09ZS5kYXRhVHlwZSksdGhpcy5maXJlKG5ldyB0LkV2ZW50KGUuZGF0YVR5cGUrImRhdGEiLGUpKX0sbi5wcm90b3R5cGUuX29uRGF0YUxvYWRpbmc9ZnVuY3Rpb24oZSl7dGhpcy5maXJlKG5ldyB0LkV2ZW50KGUuZGF0YVR5cGUrImRhdGFsb2FkaW5nIixlKSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG4ucHJvdG90eXBlLGkpLG59KHJuKTtmdW5jdGlvbiBobih0KXt0LnBhcmVudE5vZGUmJnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0KX12YXIgZm49e3Nob3dDb21wYXNzOiEwLHNob3dab29tOiEwfSxwbj1mdW5jdGlvbihlKXt2YXIgcj10aGlzO3RoaXMub3B0aW9ucz10LmV4dGVuZCh7fSxmbixlKSx0aGlzLl9jb250YWluZXI9cy5jcmVhdGUoImRpdiIsIm1hcGJveGdsLWN0cmwgbWFwYm94Z2wtY3RybC1ncm91cCIpLHRoaXMuX2NvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCJjb250ZXh0bWVudSIsZnVuY3Rpb24odCl7cmV0dXJuIHQucHJldmVudERlZmF1bHQoKX0pLHRoaXMub3B0aW9ucy5zaG93Wm9vbSYmKHRoaXMuX3pvb21JbkJ1dHRvbj10aGlzLl9jcmVhdGVCdXR0b24oIm1hcGJveGdsLWN0cmwtaWNvbiBtYXBib3hnbC1jdHJsLXpvb20taW4iLCJab29tIEluIixmdW5jdGlvbigpe3JldHVybiByLl9tYXAuem9vbUluKCl9KSx0aGlzLl96b29tT3V0QnV0dG9uPXRoaXMuX2NyZWF0ZUJ1dHRvbigibWFwYm94Z2wtY3RybC1pY29uIG1hcGJveGdsLWN0cmwtem9vbS1vdXQiLCJab29tIE91dCIsZnVuY3Rpb24oKXtyZXR1cm4gci5fbWFwLnpvb21PdXQoKX0pKSx0aGlzLm9wdGlvbnMuc2hvd0NvbXBhc3MmJih0LmJpbmRBbGwoWyJfcm90YXRlQ29tcGFzc0Fycm93Il0sdGhpcyksdGhpcy5fY29tcGFzcz10aGlzLl9jcmVhdGVCdXR0b24oIm1hcGJveGdsLWN0cmwtaWNvbiBtYXBib3hnbC1jdHJsLWNvbXBhc3MiLCJSZXNldCBOb3J0aCIsZnVuY3Rpb24oKXtyZXR1cm4gci5fbWFwLnJlc2V0Tm9ydGgoKX0pLHRoaXMuX2NvbXBhc3NBcnJvdz1zLmNyZWF0ZSgic3BhbiIsIm1hcGJveGdsLWN0cmwtY29tcGFzcy1hcnJvdyIsdGhpcy5fY29tcGFzcykpfTtmdW5jdGlvbiBkbih0LGUscil7aWYodD1uZXcgRyh0LmxuZyx0LmxhdCksZSl7dmFyIG49bmV3IEcodC5sbmctMzYwLHQubGF0KSxpPW5ldyBHKHQubG5nKzM2MCx0LmxhdCksYT1yLmxvY2F0aW9uUG9pbnQodCkuZGlzdFNxcihlKTtyLmxvY2F0aW9uUG9pbnQobikuZGlzdFNxcihlKTxhP3Q9bjpyLmxvY2F0aW9uUG9pbnQoaSkuZGlzdFNxcihlKTxhJiYodD1pKX1mb3IoO01hdGguYWJzKHQubG5nLXIuY2VudGVyLmxuZyk+MTgwOyl7dmFyIG89ci5sb2NhdGlvblBvaW50KHQpO2lmKG8ueD49MCYmby55Pj0wJiZvLng8PXIud2lkdGgmJm8ueTw9ci5oZWlnaHQpYnJlYWs7dC5sbmc+ci5jZW50ZXIubG5nP3QubG5nLT0zNjA6dC5sbmcrPTM2MH1yZXR1cm4gdH1wbi5wcm90b3R5cGUuX3JvdGF0ZUNvbXBhc3NBcnJvdz1mdW5jdGlvbigpe3ZhciB0PSJyb3RhdGUoIit0aGlzLl9tYXAudHJhbnNmb3JtLmFuZ2xlKigxODAvTWF0aC5QSSkrImRlZykiO3RoaXMuX2NvbXBhc3NBcnJvdy5zdHlsZS50cmFuc2Zvcm09dH0scG4ucHJvdG90eXBlLm9uQWRkPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9tYXA9dCx0aGlzLm9wdGlvbnMuc2hvd0NvbXBhc3MmJih0aGlzLl9tYXAub24oInJvdGF0ZSIsdGhpcy5fcm90YXRlQ29tcGFzc0Fycm93KSx0aGlzLl9yb3RhdGVDb21wYXNzQXJyb3coKSx0aGlzLl9oYW5kbGVyPW5ldyBZcih0LHtidXR0b246ImxlZnQiLGVsZW1lbnQ6dGhpcy5fY29tcGFzc30pLHRoaXMuX2hhbmRsZXIuZW5hYmxlKCkpLHRoaXMuX2NvbnRhaW5lcn0scG4ucHJvdG90eXBlLm9uUmVtb3ZlPWZ1bmN0aW9uKCl7cy5yZW1vdmUodGhpcy5fY29udGFpbmVyKSx0aGlzLm9wdGlvbnMuc2hvd0NvbXBhc3MmJih0aGlzLl9tYXAub2ZmKCJyb3RhdGUiLHRoaXMuX3JvdGF0ZUNvbXBhc3NBcnJvdyksdGhpcy5faGFuZGxlci5kaXNhYmxlKCksZGVsZXRlIHRoaXMuX2hhbmRsZXIpLGRlbGV0ZSB0aGlzLl9tYXB9LHBuLnByb3RvdHlwZS5fY3JlYXRlQnV0dG9uPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1zLmNyZWF0ZSgiYnV0dG9uIix0LHRoaXMuX2NvbnRhaW5lcik7cmV0dXJuIG4udHlwZT0iYnV0dG9uIixuLnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIsZSksbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsciksbn07dmFyIGduPXtjZW50ZXI6InRyYW5zbGF0ZSgtNTAlLC01MCUpIix0b3A6InRyYW5zbGF0ZSgtNTAlLDApIiwidG9wLWxlZnQiOiJ0cmFuc2xhdGUoMCwwKSIsInRvcC1yaWdodCI6InRyYW5zbGF0ZSgtMTAwJSwwKSIsYm90dG9tOiJ0cmFuc2xhdGUoLTUwJSwtMTAwJSkiLCJib3R0b20tbGVmdCI6InRyYW5zbGF0ZSgwLC0xMDAlKSIsImJvdHRvbS1yaWdodCI6InRyYW5zbGF0ZSgtMTAwJSwtMTAwJSkiLGxlZnQ6InRyYW5zbGF0ZSgwLC01MCUpIixyaWdodDoidHJhbnNsYXRlKC0xMDAlLC01MCUpIn07ZnVuY3Rpb24gbW4odCxlLHIpe3ZhciBuPXQuY2xhc3NMaXN0O2Zvcih2YXIgaSBpbiBnbiluLnJlbW92ZSgibWFwYm94Z2wtIityKyItYW5jaG9yLSIraSk7bi5hZGQoIm1hcGJveGdsLSIrcisiLWFuY2hvci0iK2UpfXZhciB2bj1mdW5jdGlvbihlKXtpZigoZSBpbnN0YW5jZW9mIHQuZGVmYXVsdC5IVE1MRWxlbWVudHx8Mj09PWFyZ3VtZW50cy5sZW5ndGgpJiYoZT10LmV4dGVuZCh7ZWxlbWVudDplfSxhcmd1bWVudHNbMV0pKSx0LmJpbmRBbGwoWyJfdXBkYXRlIiwiX29uTWFwQ2xpY2siXSx0aGlzKSx0aGlzLl9hbmNob3I9ZSYmZS5hbmNob3J8fCJjZW50ZXIiLHRoaXMuX2NvbG9yPWUmJmUuY29sb3J8fCIjM0ZCMUNFIixlJiZlLmVsZW1lbnQpdGhpcy5fZWxlbWVudD1lLmVsZW1lbnQsdGhpcy5fb2Zmc2V0PXQuZGVmYXVsdCQxLmNvbnZlcnQoZSYmZS5vZmZzZXR8fFswLDBdKTtlbHNle3RoaXMuX2RlZmF1bHRNYXJrZXI9ITAsdGhpcy5fZWxlbWVudD1zLmNyZWF0ZSgiZGl2Iik7dmFyIHI9cy5jcmVhdGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJzdmciKTtyLnNldEF0dHJpYnV0ZU5TKG51bGwsImhlaWdodCIsIjQxcHgiKSxyLnNldEF0dHJpYnV0ZU5TKG51bGwsIndpZHRoIiwiMjdweCIpLHIuc2V0QXR0cmlidXRlTlMobnVsbCwidmlld0JveCIsIjAgMCAyNyA0MSIpO3ZhciBuPXMuY3JlYXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpO24uc2V0QXR0cmlidXRlTlMobnVsbCwic3Ryb2tlIiwibm9uZSIpLG4uc2V0QXR0cmlidXRlTlMobnVsbCwic3Ryb2tlLXdpZHRoIiwiMSIpLG4uc2V0QXR0cmlidXRlTlMobnVsbCwiZmlsbCIsIm5vbmUiKSxuLnNldEF0dHJpYnV0ZU5TKG51bGwsImZpbGwtcnVsZSIsImV2ZW5vZGQiKTt2YXIgaT1zLmNyZWF0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImciKTtpLnNldEF0dHJpYnV0ZU5TKG51bGwsImZpbGwtcnVsZSIsIm5vbnplcm8iKTt2YXIgYT1zLmNyZWF0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImciKTthLnNldEF0dHJpYnV0ZU5TKG51bGwsInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgzLjAsIDI5LjApIiksYS5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmaWxsIiwiIzAwMDAwMCIpO2Zvcih2YXIgbz0wLGw9W3tyeDoiMTAuNSIscnk6IjUuMjUwMDIyNzMifSx7cng6IjEwLjUiLHJ5OiI1LjI1MDAyMjczIn0se3J4OiI5LjUiLHJ5OiI0Ljc3Mjc1MDA3In0se3J4OiI4LjUiLHJ5OiI0LjI5NTQ5OTM2In0se3J4OiI3LjUiLHJ5OiIzLjgxODIyMzA4In0se3J4OiI2LjUiLHJ5OiIzLjM0MDk0Njc5In0se3J4OiI1LjUiLHJ5OiIyLjg2MzY3MDUxIn0se3J4OiI0LjUiLHJ5OiIyLjM4NjM2ODY0In1dO288bC5sZW5ndGg7bys9MSl7dmFyIGM9bFtvXSx1PXMuY3JlYXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZWxsaXBzZSIpO3Uuc2V0QXR0cmlidXRlTlMobnVsbCwib3BhY2l0eSIsIjAuMDQiKSx1LnNldEF0dHJpYnV0ZU5TKG51bGwsImN4IiwiMTAuNSIpLHUuc2V0QXR0cmlidXRlTlMobnVsbCwiY3kiLCI1LjgwMDI5MDA4IiksdS5zZXRBdHRyaWJ1dGVOUyhudWxsLCJyeCIsYy5yeCksdS5zZXRBdHRyaWJ1dGVOUyhudWxsLCJyeSIsYy5yeSksYS5hcHBlbmRDaGlsZCh1KX12YXIgaD1zLmNyZWF0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImciKTtoLnNldEF0dHJpYnV0ZU5TKG51bGwsImZpbGwiLHRoaXMuX2NvbG9yKTt2YXIgZj1zLmNyZWF0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInBhdGgiKTtmLnNldEF0dHJpYnV0ZU5TKG51bGwsImQiLCJNMjcsMTMuNSBDMjcsMTkuMDc0NjQ0IDIwLjI1MDAwMSwyNy4wMDAwMDIgMTQuNzUsMzQuNTAwMDAyIEMxNC4wMTY2NjUsMzUuNTAwMDA0IDEyLjk4MzMzNSwzNS41MDAwMDQgMTIuMjUsMzQuNTAwMDAyIEM2Ljc0OTk5OTMsMjcuMDAwMDAyIDAsMTkuMjIyNTYyIDAsMTMuNSBDMCw2LjA0NDE1NTkgNi4wNDQxNTU5LDAgMTMuNSwwIEMyMC45NTU4NDQsMCAyNyw2LjA0NDE1NTkgMjcsMTMuNSBaIiksaC5hcHBlbmRDaGlsZChmKTt2YXIgcD1zLmNyZWF0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImciKTtwLnNldEF0dHJpYnV0ZU5TKG51bGwsIm9wYWNpdHkiLCIwLjI1IikscC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmaWxsIiwiIzAwMDAwMCIpO3ZhciBkPXMuY3JlYXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwicGF0aCIpO2Quc2V0QXR0cmlidXRlTlMobnVsbCwiZCIsIk0xMy41LDAgQzYuMDQ0MTU1OSwwIDAsNi4wNDQxNTU5IDAsMTMuNSBDMCwxOS4yMjI1NjIgNi43NDk5OTkzLDI3IDEyLjI1LDM0LjUgQzEzLDM1LjUyMjcyNyAxNC4wMTY2NjQsMzUuNTAwMDA0IDE0Ljc1LDM0LjUgQzIwLjI1MDAwMSwyNyAyNywxOS4wNzQ2NDQgMjcsMTMuNSBDMjcsNi4wNDQxNTU5IDIwLjk1NTg0NCwwIDEzLjUsMCBaIE0xMy41LDEgQzIwLjQxNTQwNCwxIDI2LDYuNTg0NTk2IDI2LDEzLjUgQzI2LDE1Ljg5ODY1NyAyNC40OTU1ODQsMTkuMTgxNDMxIDIyLjIyMDcwMywyMi43MzgyODEgQzE5Ljk0NTgyMywyNi4yOTUxMzIgMTYuNzA1MTE5LDMwLjE0MjE2NyAxMy45NDMzNTksMzMuOTA4MjAzIEMxMy43NDM0NDUsMzQuMTgwODE0IDEzLjYxMjcxNSwzNC4zMjI3MzggMTMuNSwzNC40NDE0MDYgQzEzLjM4NzI4NSwzNC4zMjI3MzggMTMuMjU2NTU1LDM0LjE4MDgxNCAxMy4wNTY2NDEsMzMuOTA4MjAzIEMxMC4yODQ0ODEsMzAuMTI3OTg1IDcuNDE0ODY4NCwyNi4zMTQxNTkgNS4wMTU2MjUsMjIuNzczNDM4IEMyLjYxNjM4MTYsMTkuMjMyNzE1IDEsMTUuOTUzNTM4IDEsMTMuNSBDMSw2LjU4NDU5NiA2LjU4NDU5NiwxIDEzLjUsMSBaIikscC5hcHBlbmRDaGlsZChkKTt2YXIgZz1zLmNyZWF0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImciKTtnLnNldEF0dHJpYnV0ZU5TKG51bGwsInRyYW5zZm9ybSIsInRyYW5zbGF0ZSg2LjAsIDcuMCkiKSxnLnNldEF0dHJpYnV0ZU5TKG51bGwsImZpbGwiLCIjRkZGRkZGIik7dmFyIG09cy5jcmVhdGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJnIik7bS5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoOC4wLCA4LjApIik7dmFyIHY9cy5jcmVhdGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJjaXJjbGUiKTt2LnNldEF0dHJpYnV0ZU5TKG51bGwsImZpbGwiLCIjMDAwMDAwIiksdi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJvcGFjaXR5IiwiMC4yNSIpLHYuc2V0QXR0cmlidXRlTlMobnVsbCwiY3giLCI1LjUiKSx2LnNldEF0dHJpYnV0ZU5TKG51bGwsImN5IiwiNS41Iiksdi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJyIiwiNS40OTk5OTYyIik7dmFyIHk9cy5jcmVhdGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJjaXJjbGUiKTt5LnNldEF0dHJpYnV0ZU5TKG51bGwsImZpbGwiLCIjRkZGRkZGIikseS5zZXRBdHRyaWJ1dGVOUyhudWxsLCJjeCIsIjUuNSIpLHkuc2V0QXR0cmlidXRlTlMobnVsbCwiY3kiLCI1LjUiKSx5LnNldEF0dHJpYnV0ZU5TKG51bGwsInIiLCI1LjQ5OTk5NjIiKSxtLmFwcGVuZENoaWxkKHYpLG0uYXBwZW5kQ2hpbGQoeSksaS5hcHBlbmRDaGlsZChhKSxpLmFwcGVuZENoaWxkKGgpLGkuYXBwZW5kQ2hpbGQocCksaS5hcHBlbmRDaGlsZChnKSxpLmFwcGVuZENoaWxkKG0pLHIuYXBwZW5kQ2hpbGQoaSksdGhpcy5fZWxlbWVudC5hcHBlbmRDaGlsZChyKSx0aGlzLl9vZmZzZXQ9dC5kZWZhdWx0JDEuY29udmVydChlJiZlLm9mZnNldHx8WzAsLTE0XSl9dGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1tYXJrZXIiKSx0aGlzLl9wb3B1cD1udWxsfTt2bi5wcm90b3R5cGUuYWRkVG89ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucmVtb3ZlKCksdGhpcy5fbWFwPXQsdC5nZXRDYW52YXNDb250YWluZXIoKS5hcHBlbmRDaGlsZCh0aGlzLl9lbGVtZW50KSx0Lm9uKCJtb3ZlIix0aGlzLl91cGRhdGUpLHQub24oIm1vdmVlbmQiLHRoaXMuX3VwZGF0ZSksdGhpcy5fdXBkYXRlKCksdGhpcy5fbWFwLm9uKCJjbGljayIsdGhpcy5fb25NYXBDbGljayksdGhpc30sdm4ucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXAmJih0aGlzLl9tYXAub2ZmKCJjbGljayIsdGhpcy5fb25NYXBDbGljayksdGhpcy5fbWFwLm9mZigibW92ZSIsdGhpcy5fdXBkYXRlKSx0aGlzLl9tYXAub2ZmKCJtb3ZlZW5kIix0aGlzLl91cGRhdGUpLGRlbGV0ZSB0aGlzLl9tYXApLHMucmVtb3ZlKHRoaXMuX2VsZW1lbnQpLHRoaXMuX3BvcHVwJiZ0aGlzLl9wb3B1cC5yZW1vdmUoKSx0aGlzfSx2bi5wcm90b3R5cGUuZ2V0TG5nTGF0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xuZ0xhdH0sdm4ucHJvdG90eXBlLnNldExuZ0xhdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbG5nTGF0PUcuY29udmVydCh0KSx0aGlzLl9wb3M9bnVsbCx0aGlzLl9wb3B1cCYmdGhpcy5fcG9wdXAuc2V0TG5nTGF0KHRoaXMuX2xuZ0xhdCksdGhpcy5fdXBkYXRlKCksdGhpc30sdm4ucHJvdG90eXBlLmdldEVsZW1lbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZWxlbWVudH0sdm4ucHJvdG90eXBlLnNldFBvcHVwPWZ1bmN0aW9uKHQpe2lmKHRoaXMuX3BvcHVwJiYodGhpcy5fcG9wdXAucmVtb3ZlKCksdGhpcy5fcG9wdXA9bnVsbCksdCl7aWYoISgib2Zmc2V0ImluIHQub3B0aW9ucykpe3ZhciBlPU1hdGguc3FydChNYXRoLnBvdygxMy41LDIpLzIpO3Qub3B0aW9ucy5vZmZzZXQ9dGhpcy5fZGVmYXVsdE1hcmtlcj97dG9wOlswLDBdLCJ0b3AtbGVmdCI6WzAsMF0sInRvcC1yaWdodCI6WzAsMF0sYm90dG9tOlswLC0zOC4xXSwiYm90dG9tLWxlZnQiOltlLC0xKigyNC42K2UpXSwiYm90dG9tLXJpZ2h0IjpbLWUsLTEqKDI0LjYrZSldLGxlZnQ6WzEzLjUsLTI0LjZdLHJpZ2h0OlstMTMuNSwtMjQuNl19OnRoaXMuX29mZnNldH10aGlzLl9wb3B1cD10LHRoaXMuX2xuZ0xhdCYmdGhpcy5fcG9wdXAuc2V0TG5nTGF0KHRoaXMuX2xuZ0xhdCl9cmV0dXJuIHRoaXN9LHZuLnByb3RvdHlwZS5fb25NYXBDbGljaz1mdW5jdGlvbih0KXt2YXIgZT10Lm9yaWdpbmFsRXZlbnQudGFyZ2V0LHI9dGhpcy5fZWxlbWVudDt0aGlzLl9wb3B1cCYmKGU9PT1yfHxyLmNvbnRhaW5zKGUpKSYmdGhpcy50b2dnbGVQb3B1cCgpfSx2bi5wcm90b3R5cGUuZ2V0UG9wdXA9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcG9wdXB9LHZuLnByb3RvdHlwZS50b2dnbGVQb3B1cD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3BvcHVwO3JldHVybiB0Pyh0LmlzT3BlbigpP3QucmVtb3ZlKCk6dC5hZGRUbyh0aGlzLl9tYXApLHRoaXMpOnRoaXN9LHZuLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHQpe3RoaXMuX21hcCYmKHRoaXMuX21hcC50cmFuc2Zvcm0ucmVuZGVyV29ybGRDb3BpZXMmJih0aGlzLl9sbmdMYXQ9ZG4odGhpcy5fbG5nTGF0LHRoaXMuX3Bvcyx0aGlzLl9tYXAudHJhbnNmb3JtKSksdGhpcy5fcG9zPXRoaXMuX21hcC5wcm9qZWN0KHRoaXMuX2xuZ0xhdCkuX2FkZCh0aGlzLl9vZmZzZXQpLHQmJiJtb3ZlZW5kIiE9PXQudHlwZXx8KHRoaXMuX3Bvcz10aGlzLl9wb3Mucm91bmQoKSkscy5zZXRUcmFuc2Zvcm0odGhpcy5fZWxlbWVudCxnblt0aGlzLl9hbmNob3JdKyIgdHJhbnNsYXRlKCIrdGhpcy5fcG9zLngrInB4LCAiK3RoaXMuX3Bvcy55KyJweCkiKSxtbih0aGlzLl9lbGVtZW50LHRoaXMuX2FuY2hvciwibWFya2VyIikpfSx2bi5wcm90b3R5cGUuZ2V0T2Zmc2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29mZnNldH0sdm4ucHJvdG90eXBlLnNldE9mZnNldD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fb2Zmc2V0PXQuZGVmYXVsdCQxLmNvbnZlcnQoZSksdGhpcy5fdXBkYXRlKCksdGhpc307dmFyIHluLHhuPXtwb3NpdGlvbk9wdGlvbnM6e2VuYWJsZUhpZ2hBY2N1cmFjeTohMSxtYXhpbXVtQWdlOjAsdGltZW91dDo2ZTN9LGZpdEJvdW5kc09wdGlvbnM6e21heFpvb206MTV9LHRyYWNrVXNlckxvY2F0aW9uOiExLHNob3dVc2VyTG9jYXRpb246ITB9LGJuPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIocil7ZS5jYWxsKHRoaXMpLHRoaXMub3B0aW9ucz10LmV4dGVuZCh7fSx4bixyKSx0LmJpbmRBbGwoWyJfb25TdWNjZXNzIiwiX29uRXJyb3IiLCJfZmluaXNoIiwiX3NldHVwVUkiLCJfdXBkYXRlQ2FtZXJhIiwiX3VwZGF0ZU1hcmtlciJdLHRoaXMpfXJldHVybiBlJiYoci5fX3Byb3RvX189ZSksci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksci5wcm90b3R5cGUuY29uc3RydWN0b3I9cixyLnByb3RvdHlwZS5vbkFkZD1mdW5jdGlvbihlKXt2YXIgcjtyZXR1cm4gdGhpcy5fbWFwPWUsdGhpcy5fY29udGFpbmVyPXMuY3JlYXRlKCJkaXYiLCJtYXBib3hnbC1jdHJsIG1hcGJveGdsLWN0cmwtZ3JvdXAiKSxyPXRoaXMuX3NldHVwVUksdm9pZCAwIT09eW4/cih5bik6dm9pZCAwIT09dC5kZWZhdWx0Lm5hdmlnYXRvci5wZXJtaXNzaW9ucz90LmRlZmF1bHQubmF2aWdhdG9yLnBlcm1pc3Npb25zLnF1ZXJ5KHtuYW1lOiJnZW9sb2NhdGlvbiJ9KS50aGVuKGZ1bmN0aW9uKHQpe3luPSJkZW5pZWQiIT09dC5zdGF0ZSxyKHluKX0pOih5bj0hIXQuZGVmYXVsdC5uYXZpZ2F0b3IuZ2VvbG9jYXRpb24scih5bikpLHRoaXMuX2NvbnRhaW5lcn0sci5wcm90b3R5cGUub25SZW1vdmU9ZnVuY3Rpb24oKXt2b2lkIDAhPT10aGlzLl9nZW9sb2NhdGlvbldhdGNoSUQmJih0LmRlZmF1bHQubmF2aWdhdG9yLmdlb2xvY2F0aW9uLmNsZWFyV2F0Y2godGhpcy5fZ2VvbG9jYXRpb25XYXRjaElEKSx0aGlzLl9nZW9sb2NhdGlvbldhdGNoSUQ9dm9pZCAwKSx0aGlzLm9wdGlvbnMuc2hvd1VzZXJMb2NhdGlvbiYmdGhpcy5fdXNlckxvY2F0aW9uRG90TWFya2VyLnJlbW92ZSgpLHMucmVtb3ZlKHRoaXMuX2NvbnRhaW5lciksdGhpcy5fbWFwPXZvaWQgMH0sci5wcm90b3R5cGUuX29uU3VjY2Vzcz1mdW5jdGlvbihlKXtpZih0aGlzLm9wdGlvbnMudHJhY2tVc2VyTG9jYXRpb24pc3dpdGNoKHRoaXMuX2xhc3RLbm93blBvc2l0aW9uPWUsdGhpcy5fd2F0Y2hTdGF0ZSl7Y2FzZSJXQUlUSU5HX0FDVElWRSI6Y2FzZSJBQ1RJVkVfTE9DSyI6Y2FzZSJBQ1RJVkVfRVJST1IiOnRoaXMuX3dhdGNoU3RhdGU9IkFDVElWRV9MT0NLIix0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtd2FpdGluZyIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmUtZXJyb3IiKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlIik7YnJlYWs7Y2FzZSJCQUNLR1JPVU5EIjpjYXNlIkJBQ0tHUk9VTkRfRVJST1IiOnRoaXMuX3dhdGNoU3RhdGU9IkJBQ0tHUk9VTkQiLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS13YWl0aW5nIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmQtZXJyb3IiKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYmFja2dyb3VuZCIpfXRoaXMub3B0aW9ucy5zaG93VXNlckxvY2F0aW9uJiYiT0ZGIiE9PXRoaXMuX3dhdGNoU3RhdGUmJnRoaXMuX3VwZGF0ZU1hcmtlcihlKSx0aGlzLm9wdGlvbnMudHJhY2tVc2VyTG9jYXRpb24mJiJBQ1RJVkVfTE9DSyIhPT10aGlzLl93YXRjaFN0YXRlfHx0aGlzLl91cGRhdGVDYW1lcmEoZSksdGhpcy5vcHRpb25zLnNob3dVc2VyTG9jYXRpb24mJnRoaXMuX2RvdEVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtdXNlci1sb2NhdGlvbi1kb3Qtc3RhbGUiKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoImdlb2xvY2F0ZSIsZSkpLHRoaXMuX2ZpbmlzaCgpfSxyLnByb3RvdHlwZS5fdXBkYXRlQ2FtZXJhPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBHKHQuY29vcmRzLmxvbmdpdHVkZSx0LmNvb3Jkcy5sYXRpdHVkZSkscj10LmNvb3Jkcy5hY2N1cmFjeTt0aGlzLl9tYXAuZml0Qm91bmRzKGUudG9Cb3VuZHMociksdGhpcy5vcHRpb25zLmZpdEJvdW5kc09wdGlvbnMse2dlb2xvY2F0ZVNvdXJjZTohMH0pfSxyLnByb3RvdHlwZS5fdXBkYXRlTWFya2VyPWZ1bmN0aW9uKHQpe3Q/dGhpcy5fdXNlckxvY2F0aW9uRG90TWFya2VyLnNldExuZ0xhdChbdC5jb29yZHMubG9uZ2l0dWRlLHQuY29vcmRzLmxhdGl0dWRlXSkuYWRkVG8odGhpcy5fbWFwKTp0aGlzLl91c2VyTG9jYXRpb25Eb3RNYXJrZXIucmVtb3ZlKCl9LHIucHJvdG90eXBlLl9vbkVycm9yPWZ1bmN0aW9uKGUpe2lmKHRoaXMub3B0aW9ucy50cmFja1VzZXJMb2NhdGlvbilpZigxPT09ZS5jb2RlKXRoaXMuX3dhdGNoU3RhdGU9Ik9GRiIsdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLXdhaXRpbmciKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZS1lcnJvciIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1iYWNrZ3JvdW5kIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmQtZXJyb3IiKSx2b2lkIDAhPT10aGlzLl9nZW9sb2NhdGlvbldhdGNoSUQmJnRoaXMuX2NsZWFyV2F0Y2goKTtlbHNlIHN3aXRjaCh0aGlzLl93YXRjaFN0YXRlKXtjYXNlIldBSVRJTkdfQUNUSVZFIjp0aGlzLl93YXRjaFN0YXRlPSJBQ1RJVkVfRVJST1IiLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmUiKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlLWVycm9yIik7YnJlYWs7Y2FzZSJBQ1RJVkVfTE9DSyI6dGhpcy5fd2F0Y2hTdGF0ZT0iQUNUSVZFX0VSUk9SIix0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZS1lcnJvciIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS13YWl0aW5nIik7YnJlYWs7Y2FzZSJCQUNLR1JPVU5EIjp0aGlzLl93YXRjaFN0YXRlPSJCQUNLR1JPVU5EX0VSUk9SIix0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYmFja2dyb3VuZCIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1iYWNrZ3JvdW5kLWVycm9yIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLXdhaXRpbmciKX0iT0ZGIiE9PXRoaXMuX3dhdGNoU3RhdGUmJnRoaXMub3B0aW9ucy5zaG93VXNlckxvY2F0aW9uJiZ0aGlzLl9kb3RFbGVtZW50LmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLXVzZXItbG9jYXRpb24tZG90LXN0YWxlIiksdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJlcnJvciIsZSkpLHRoaXMuX2ZpbmlzaCgpfSxyLnByb3RvdHlwZS5fZmluaXNoPWZ1bmN0aW9uKCl7dGhpcy5fdGltZW91dElkJiZjbGVhclRpbWVvdXQodGhpcy5fdGltZW91dElkKSx0aGlzLl90aW1lb3V0SWQ9dm9pZCAwfSxyLnByb3RvdHlwZS5fc2V0dXBVST1mdW5jdGlvbihlKXt2YXIgcj10aGlzOyExIT09ZSYmKHRoaXMuX2NvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCJjb250ZXh0bWVudSIsZnVuY3Rpb24odCl7cmV0dXJuIHQucHJldmVudERlZmF1bHQoKX0pLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbj1zLmNyZWF0ZSgiYnV0dG9uIiwibWFwYm94Z2wtY3RybC1pY29uIG1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlIix0aGlzLl9jb250YWluZXIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi50eXBlPSJidXR0b24iLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLCJHZW9sb2NhdGUiKSx0aGlzLm9wdGlvbnMudHJhY2tVc2VyTG9jYXRpb24mJih0aGlzLl9nZW9sb2NhdGVCdXR0b24uc2V0QXR0cmlidXRlKCJhcmlhLXByZXNzZWQiLCJmYWxzZSIpLHRoaXMuX3dhdGNoU3RhdGU9Ik9GRiIpLHRoaXMub3B0aW9ucy5zaG93VXNlckxvY2F0aW9uJiYodGhpcy5fZG90RWxlbWVudD1zLmNyZWF0ZSgiZGl2IiwibWFwYm94Z2wtdXNlci1sb2NhdGlvbi1kb3QiKSx0aGlzLl91c2VyTG9jYXRpb25Eb3RNYXJrZXI9bmV3IHZuKHRoaXMuX2RvdEVsZW1lbnQpLHRoaXMub3B0aW9ucy50cmFja1VzZXJMb2NhdGlvbiYmKHRoaXMuX3dhdGNoU3RhdGU9Ik9GRiIpKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMudHJpZ2dlci5iaW5kKHRoaXMpKSx0aGlzLl9zZXR1cD0hMCx0aGlzLm9wdGlvbnMudHJhY2tVc2VyTG9jYXRpb24mJnRoaXMuX21hcC5vbigibW92ZXN0YXJ0IixmdW5jdGlvbihlKXtlLmdlb2xvY2F0ZVNvdXJjZXx8IkFDVElWRV9MT0NLIiE9PXIuX3dhdGNoU3RhdGV8fChyLl93YXRjaFN0YXRlPSJCQUNLR1JPVU5EIixyLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYmFja2dyb3VuZCIpLHIuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmUiKSxyLmZpcmUobmV3IHQuRXZlbnQoInRyYWNrdXNlcmxvY2F0aW9uZW5kIikpKX0pKX0sci5wcm90b3R5cGUudHJpZ2dlcj1mdW5jdGlvbigpe2lmKCF0aGlzLl9zZXR1cClyZXR1cm4gdC53YXJuT25jZSgiR2VvbG9jYXRlIGNvbnRyb2wgdHJpZ2dlcmVkIGJlZm9yZSBhZGRlZCB0byBhIG1hcCIpLCExO2lmKHRoaXMub3B0aW9ucy50cmFja1VzZXJMb2NhdGlvbil7c3dpdGNoKHRoaXMuX3dhdGNoU3RhdGUpe2Nhc2UiT0ZGIjp0aGlzLl93YXRjaFN0YXRlPSJXQUlUSU5HX0FDVElWRSIsdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJ0cmFja3VzZXJsb2NhdGlvbnN0YXJ0IikpO2JyZWFrO2Nhc2UiV0FJVElOR19BQ1RJVkUiOmNhc2UiQUNUSVZFX0xPQ0siOmNhc2UiQUNUSVZFX0VSUk9SIjpjYXNlIkJBQ0tHUk9VTkRfRVJST1IiOnRoaXMuX3dhdGNoU3RhdGU9Ik9GRiIsdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLXdhaXRpbmciKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZS1lcnJvciIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1iYWNrZ3JvdW5kIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmQtZXJyb3IiKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoInRyYWNrdXNlcmxvY2F0aW9uZW5kIikpO2JyZWFrO2Nhc2UiQkFDS0dST1VORCI6dGhpcy5fd2F0Y2hTdGF0ZT0iQUNUSVZFX0xPQ0siLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1iYWNrZ3JvdW5kIiksdGhpcy5fbGFzdEtub3duUG9zaXRpb24mJnRoaXMuX3VwZGF0ZUNhbWVyYSh0aGlzLl9sYXN0S25vd25Qb3NpdGlvbiksdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJ0cmFja3VzZXJsb2NhdGlvbnN0YXJ0IikpfXN3aXRjaCh0aGlzLl93YXRjaFN0YXRlKXtjYXNlIldBSVRJTkdfQUNUSVZFIjp0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtd2FpdGluZyIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmUiKTticmVhaztjYXNlIkFDVElWRV9MT0NLIjp0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlIik7YnJlYWs7Y2FzZSJBQ1RJVkVfRVJST1IiOnRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS13YWl0aW5nIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZS1lcnJvciIpO2JyZWFrO2Nhc2UiQkFDS0dST1VORCI6dGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmQiKTticmVhaztjYXNlIkJBQ0tHUk9VTkRfRVJST1IiOnRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS13YWl0aW5nIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmQtZXJyb3IiKX0iT0ZGIj09PXRoaXMuX3dhdGNoU3RhdGUmJnZvaWQgMCE9PXRoaXMuX2dlb2xvY2F0aW9uV2F0Y2hJRD90aGlzLl9jbGVhcldhdGNoKCk6dm9pZCAwPT09dGhpcy5fZ2VvbG9jYXRpb25XYXRjaElEJiYodGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLXdhaXRpbmciKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uc2V0QXR0cmlidXRlKCJhcmlhLXByZXNzZWQiLCJ0cnVlIiksdGhpcy5fZ2VvbG9jYXRpb25XYXRjaElEPXQuZGVmYXVsdC5uYXZpZ2F0b3IuZ2VvbG9jYXRpb24ud2F0Y2hQb3NpdGlvbih0aGlzLl9vblN1Y2Nlc3MsdGhpcy5fb25FcnJvcix0aGlzLm9wdGlvbnMucG9zaXRpb25PcHRpb25zKSl9ZWxzZSB0LmRlZmF1bHQubmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbih0aGlzLl9vblN1Y2Nlc3MsdGhpcy5fb25FcnJvcix0aGlzLm9wdGlvbnMucG9zaXRpb25PcHRpb25zKSx0aGlzLl90aW1lb3V0SWQ9c2V0VGltZW91dCh0aGlzLl9maW5pc2gsMWU0KTtyZXR1cm4hMH0sci5wcm90b3R5cGUuX2NsZWFyV2F0Y2g9ZnVuY3Rpb24oKXt0LmRlZmF1bHQubmF2aWdhdG9yLmdlb2xvY2F0aW9uLmNsZWFyV2F0Y2godGhpcy5fZ2VvbG9jYXRpb25XYXRjaElEKSx0aGlzLl9nZW9sb2NhdGlvbldhdGNoSUQ9dm9pZCAwLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS13YWl0aW5nIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLnNldEF0dHJpYnV0ZSgiYXJpYS1wcmVzc2VkIiwiZmFsc2UiKSx0aGlzLm9wdGlvbnMuc2hvd1VzZXJMb2NhdGlvbiYmdGhpcy5fdXBkYXRlTWFya2VyKG51bGwpfSxyfSh0LkV2ZW50ZWQpLF9uPXttYXhXaWR0aDoxMDAsdW5pdDoibWV0cmljIn0sd249ZnVuY3Rpb24oZSl7dGhpcy5vcHRpb25zPXQuZXh0ZW5kKHt9LF9uLGUpLHQuYmluZEFsbChbIl9vbk1vdmUiLCJzZXRVbml0Il0sdGhpcyl9O2Z1bmN0aW9uIGtuKHQsZSxyKXt2YXIgbixpLGEsbyxzLGwsYz1yJiZyLm1heFdpZHRofHwxMDAsdT10Ll9jb250YWluZXIuY2xpZW50SGVpZ2h0LzIsaD0obj10LnVucHJvamVjdChbMCx1XSksaT10LnVucHJvamVjdChbYyx1XSksYT1NYXRoLlBJLzE4MCxvPW4ubGF0KmEscz1pLmxhdCphLGw9TWF0aC5zaW4obykqTWF0aC5zaW4ocykrTWF0aC5jb3MobykqTWF0aC5jb3MocykqTWF0aC5jb3MoKGkubG5nLW4ubG5nKSphKSw2MzcxZTMqTWF0aC5hY29zKE1hdGgubWluKGwsMSkpKTtpZihyJiYiaW1wZXJpYWwiPT09ci51bml0KXt2YXIgZj0zLjI4MDgqaDtmPjUyODA/TW4oZSxjLGYvNTI4MCwibWkiKTpNbihlLGMsZiwiZnQiKX1lbHNlIHImJiJuYXV0aWNhbCI9PT1yLnVuaXQ/TW4oZSxjLGgvMTg1Miwibm0iKTpNbihlLGMsaCwibSIpfWZ1bmN0aW9uIE1uKHQsZSxyLG4pe3ZhciBpLGEsbyxzPShpPXIsKGE9TWF0aC5wb3coMTAsKCIiK01hdGguZmxvb3IoaSkpLmxlbmd0aC0xKSkqKG89KG89aS9hKT49MTA/MTA6bz49NT81Om8+PTM/MzpvPj0yPzI6MSkpLGw9cy9yOyJtIj09PW4mJnM+PTFlMyYmKHMvPTFlMyxuPSJrbSIpLHQuc3R5bGUud2lkdGg9ZSpsKyJweCIsdC5pbm5lckhUTUw9cytufXduLnByb3RvdHlwZS5nZXREZWZhdWx0UG9zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4iYm90dG9tLWxlZnQifSx3bi5wcm90b3R5cGUuX29uTW92ZT1mdW5jdGlvbigpe2tuKHRoaXMuX21hcCx0aGlzLl9jb250YWluZXIsdGhpcy5vcHRpb25zKX0sd24ucHJvdG90eXBlLm9uQWRkPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9tYXA9dCx0aGlzLl9jb250YWluZXI9cy5jcmVhdGUoImRpdiIsIm1hcGJveGdsLWN0cmwgbWFwYm94Z2wtY3RybC1zY2FsZSIsdC5nZXRDb250YWluZXIoKSksdGhpcy5fbWFwLm9uKCJtb3ZlIix0aGlzLl9vbk1vdmUpLHRoaXMuX29uTW92ZSgpLHRoaXMuX2NvbnRhaW5lcn0sd24ucHJvdG90eXBlLm9uUmVtb3ZlPWZ1bmN0aW9uKCl7cy5yZW1vdmUodGhpcy5fY29udGFpbmVyKSx0aGlzLl9tYXAub2ZmKCJtb3ZlIix0aGlzLl9vbk1vdmUpLHRoaXMuX21hcD12b2lkIDB9LHduLnByb3RvdHlwZS5zZXRVbml0PWZ1bmN0aW9uKHQpe3RoaXMub3B0aW9ucy51bml0PXQsa24odGhpcy5fbWFwLHRoaXMuX2NvbnRhaW5lcix0aGlzLm9wdGlvbnMpfTt2YXIgQW49ZnVuY3Rpb24oKXt0aGlzLl9mdWxsc2NyZWVuPSExLHQuYmluZEFsbChbIl9vbkNsaWNrRnVsbHNjcmVlbiIsIl9jaGFuZ2VJY29uIl0sdGhpcyksIm9uZnVsbHNjcmVlbmNoYW5nZSJpbiB0LmRlZmF1bHQuZG9jdW1lbnQ/dGhpcy5fZnVsbHNjcmVlbmNoYW5nZT0iZnVsbHNjcmVlbmNoYW5nZSI6Im9ubW96ZnVsbHNjcmVlbmNoYW5nZSJpbiB0LmRlZmF1bHQuZG9jdW1lbnQ/dGhpcy5fZnVsbHNjcmVlbmNoYW5nZT0ibW96ZnVsbHNjcmVlbmNoYW5nZSI6Im9ud2Via2l0ZnVsbHNjcmVlbmNoYW5nZSJpbiB0LmRlZmF1bHQuZG9jdW1lbnQ/dGhpcy5fZnVsbHNjcmVlbmNoYW5nZT0id2Via2l0ZnVsbHNjcmVlbmNoYW5nZSI6Im9ubXNmdWxsc2NyZWVuY2hhbmdlImluIHQuZGVmYXVsdC5kb2N1bWVudCYmKHRoaXMuX2Z1bGxzY3JlZW5jaGFuZ2U9Ik1TRnVsbHNjcmVlbkNoYW5nZSIpLHRoaXMuX2NsYXNzTmFtZT0ibWFwYm94Z2wtY3RybCJ9O0FuLnByb3RvdHlwZS5vbkFkZD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fbWFwPWUsdGhpcy5fbWFwQ29udGFpbmVyPXRoaXMuX21hcC5nZXRDb250YWluZXIoKSx0aGlzLl9jb250YWluZXI9cy5jcmVhdGUoImRpdiIsdGhpcy5fY2xhc3NOYW1lKyIgbWFwYm94Z2wtY3RybC1ncm91cCIpLHRoaXMuX2NoZWNrRnVsbHNjcmVlblN1cHBvcnQoKT90aGlzLl9zZXR1cFVJKCk6KHRoaXMuX2NvbnRhaW5lci5zdHlsZS5kaXNwbGF5PSJub25lIix0Lndhcm5PbmNlKCJUaGlzIGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IGZ1bGxzY3JlZW4gbW9kZS4iKSksdGhpcy5fY29udGFpbmVyfSxBbi5wcm90b3R5cGUub25SZW1vdmU9ZnVuY3Rpb24oKXtzLnJlbW92ZSh0aGlzLl9jb250YWluZXIpLHRoaXMuX21hcD1udWxsLHQuZGVmYXVsdC5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHRoaXMuX2Z1bGxzY3JlZW5jaGFuZ2UsdGhpcy5fY2hhbmdlSWNvbil9LEFuLnByb3RvdHlwZS5fY2hlY2tGdWxsc2NyZWVuU3VwcG9ydD1mdW5jdGlvbigpe3JldHVybiEhKHQuZGVmYXVsdC5kb2N1bWVudC5mdWxsc2NyZWVuRW5hYmxlZHx8dC5kZWZhdWx0LmRvY3VtZW50Lm1vekZ1bGxTY3JlZW5FbmFibGVkfHx0LmRlZmF1bHQuZG9jdW1lbnQubXNGdWxsc2NyZWVuRW5hYmxlZHx8dC5kZWZhdWx0LmRvY3VtZW50LndlYmtpdEZ1bGxzY3JlZW5FbmFibGVkKX0sQW4ucHJvdG90eXBlLl9zZXR1cFVJPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fZnVsbHNjcmVlbkJ1dHRvbj1zLmNyZWF0ZSgiYnV0dG9uIix0aGlzLl9jbGFzc05hbWUrIi1pY29uICIrdGhpcy5fY2xhc3NOYW1lKyItZnVsbHNjcmVlbiIsdGhpcy5fY29udGFpbmVyKTtlLnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIsIlRvZ2dsZSBmdWxsc2NyZWVuIiksZS50eXBlPSJidXR0b24iLHRoaXMuX2Z1bGxzY3JlZW5CdXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuX29uQ2xpY2tGdWxsc2NyZWVuKSx0LmRlZmF1bHQuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLl9mdWxsc2NyZWVuY2hhbmdlLHRoaXMuX2NoYW5nZUljb24pfSxBbi5wcm90b3R5cGUuX2lzRnVsbHNjcmVlbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9mdWxsc2NyZWVufSxBbi5wcm90b3R5cGUuX2NoYW5nZUljb249ZnVuY3Rpb24oKXsodC5kZWZhdWx0LmRvY3VtZW50LmZ1bGxzY3JlZW5FbGVtZW50fHx0LmRlZmF1bHQuZG9jdW1lbnQubW96RnVsbFNjcmVlbkVsZW1lbnR8fHQuZGVmYXVsdC5kb2N1bWVudC53ZWJraXRGdWxsc2NyZWVuRWxlbWVudHx8dC5kZWZhdWx0LmRvY3VtZW50Lm1zRnVsbHNjcmVlbkVsZW1lbnQpPT09dGhpcy5fbWFwQ29udGFpbmVyIT09dGhpcy5fZnVsbHNjcmVlbiYmKHRoaXMuX2Z1bGxzY3JlZW49IXRoaXMuX2Z1bGxzY3JlZW4sdGhpcy5fZnVsbHNjcmVlbkJ1dHRvbi5jbGFzc0xpc3QudG9nZ2xlKHRoaXMuX2NsYXNzTmFtZSsiLXNocmluayIpLHRoaXMuX2Z1bGxzY3JlZW5CdXR0b24uY2xhc3NMaXN0LnRvZ2dsZSh0aGlzLl9jbGFzc05hbWUrIi1mdWxsc2NyZWVuIikpfSxBbi5wcm90b3R5cGUuX29uQ2xpY2tGdWxsc2NyZWVuPWZ1bmN0aW9uKCl7dGhpcy5faXNGdWxsc2NyZWVuKCk/dC5kZWZhdWx0LmRvY3VtZW50LmV4aXRGdWxsc2NyZWVuP3QuZGVmYXVsdC5kb2N1bWVudC5leGl0RnVsbHNjcmVlbigpOnQuZGVmYXVsdC5kb2N1bWVudC5tb3pDYW5jZWxGdWxsU2NyZWVuP3QuZGVmYXVsdC5kb2N1bWVudC5tb3pDYW5jZWxGdWxsU2NyZWVuKCk6dC5kZWZhdWx0LmRvY3VtZW50Lm1zRXhpdEZ1bGxzY3JlZW4/dC5kZWZhdWx0LmRvY3VtZW50Lm1zRXhpdEZ1bGxzY3JlZW4oKTp0LmRlZmF1bHQuZG9jdW1lbnQud2Via2l0Q2FuY2VsRnVsbFNjcmVlbiYmdC5kZWZhdWx0LmRvY3VtZW50LndlYmtpdENhbmNlbEZ1bGxTY3JlZW4oKTp0aGlzLl9tYXBDb250YWluZXIucmVxdWVzdEZ1bGxzY3JlZW4/dGhpcy5fbWFwQ29udGFpbmVyLnJlcXVlc3RGdWxsc2NyZWVuKCk6dGhpcy5fbWFwQ29udGFpbmVyLm1velJlcXVlc3RGdWxsU2NyZWVuP3RoaXMuX21hcENvbnRhaW5lci5tb3pSZXF1ZXN0RnVsbFNjcmVlbigpOnRoaXMuX21hcENvbnRhaW5lci5tc1JlcXVlc3RGdWxsc2NyZWVuP3RoaXMuX21hcENvbnRhaW5lci5tc1JlcXVlc3RGdWxsc2NyZWVuKCk6dGhpcy5fbWFwQ29udGFpbmVyLndlYmtpdFJlcXVlc3RGdWxsc2NyZWVuJiZ0aGlzLl9tYXBDb250YWluZXIud2Via2l0UmVxdWVzdEZ1bGxzY3JlZW4oKX07dmFyIFRuPXtjbG9zZUJ1dHRvbjohMCxjbG9zZU9uQ2xpY2s6ITB9LFNuPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIocil7ZS5jYWxsKHRoaXMpLHRoaXMub3B0aW9ucz10LmV4dGVuZChPYmplY3QuY3JlYXRlKFRuKSxyKSx0LmJpbmRBbGwoWyJfdXBkYXRlIiwiX29uQ2xpY2tDbG9zZSJdLHRoaXMpfXJldHVybiBlJiYoci5fX3Byb3RvX189ZSksci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksci5wcm90b3R5cGUuY29uc3RydWN0b3I9cixyLnByb3RvdHlwZS5hZGRUbz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fbWFwPWUsdGhpcy5fbWFwLm9uKCJtb3ZlIix0aGlzLl91cGRhdGUpLHRoaXMub3B0aW9ucy5jbG9zZU9uQ2xpY2smJnRoaXMuX21hcC5vbigiY2xpY2siLHRoaXMuX29uQ2xpY2tDbG9zZSksdGhpcy5fdXBkYXRlKCksdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJvcGVuIikpLHRoaXN9LHIucHJvdG90eXBlLmlzT3Blbj1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5fbWFwfSxyLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29udGVudCYmcy5yZW1vdmUodGhpcy5fY29udGVudCksdGhpcy5fY29udGFpbmVyJiYocy5yZW1vdmUodGhpcy5fY29udGFpbmVyKSxkZWxldGUgdGhpcy5fY29udGFpbmVyKSx0aGlzLl9tYXAmJih0aGlzLl9tYXAub2ZmKCJtb3ZlIix0aGlzLl91cGRhdGUpLHRoaXMuX21hcC5vZmYoImNsaWNrIix0aGlzLl9vbkNsaWNrQ2xvc2UpLGRlbGV0ZSB0aGlzLl9tYXApLHRoaXMuZmlyZShuZXcgdC5FdmVudCgiY2xvc2UiKSksdGhpc30sci5wcm90b3R5cGUuZ2V0TG5nTGF0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xuZ0xhdH0sci5wcm90b3R5cGUuc2V0TG5nTGF0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9sbmdMYXQ9Ry5jb252ZXJ0KHQpLHRoaXMuX3Bvcz1udWxsLHRoaXMuX3VwZGF0ZSgpLHRoaXN9LHIucHJvdG90eXBlLnNldFRleHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuc2V0RE9NQ29udGVudCh0LmRlZmF1bHQuZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZSkpfSxyLnByb3RvdHlwZS5zZXRIVE1MPWZ1bmN0aW9uKGUpe3ZhciByLG49dC5kZWZhdWx0LmRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxpPXQuZGVmYXVsdC5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJib2R5Iik7Zm9yKGkuaW5uZXJIVE1MPWU7cj1pLmZpcnN0Q2hpbGQ7KW4uYXBwZW5kQ2hpbGQocik7cmV0dXJuIHRoaXMuc2V0RE9NQ29udGVudChuKX0sci5wcm90b3R5cGUuc2V0RE9NQ29udGVudD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fY3JlYXRlQ29udGVudCgpLHRoaXMuX2NvbnRlbnQuYXBwZW5kQ2hpbGQodCksdGhpcy5fdXBkYXRlKCksdGhpc30sci5wcm90b3R5cGUuX2NyZWF0ZUNvbnRlbnQ9ZnVuY3Rpb24oKXt0aGlzLl9jb250ZW50JiZzLnJlbW92ZSh0aGlzLl9jb250ZW50KSx0aGlzLl9jb250ZW50PXMuY3JlYXRlKCJkaXYiLCJtYXBib3hnbC1wb3B1cC1jb250ZW50Iix0aGlzLl9jb250YWluZXIpLHRoaXMub3B0aW9ucy5jbG9zZUJ1dHRvbiYmKHRoaXMuX2Nsb3NlQnV0dG9uPXMuY3JlYXRlKCJidXR0b24iLCJtYXBib3hnbC1wb3B1cC1jbG9zZS1idXR0b24iLHRoaXMuX2NvbnRlbnQpLHRoaXMuX2Nsb3NlQnV0dG9uLnR5cGU9ImJ1dHRvbiIsdGhpcy5fY2xvc2VCdXR0b24uc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIiwiQ2xvc2UgcG9wdXAiKSx0aGlzLl9jbG9zZUJ1dHRvbi5pbm5lckhUTUw9IiYjMjE1OyIsdGhpcy5fY2xvc2VCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuX29uQ2xpY2tDbG9zZSkpfSxyLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKCl7aWYodGhpcy5fbWFwJiZ0aGlzLl9sbmdMYXQmJnRoaXMuX2NvbnRlbnQpe3RoaXMuX2NvbnRhaW5lcnx8KHRoaXMuX2NvbnRhaW5lcj1zLmNyZWF0ZSgiZGl2IiwibWFwYm94Z2wtcG9wdXAiLHRoaXMuX21hcC5nZXRDb250YWluZXIoKSksdGhpcy5fdGlwPXMuY3JlYXRlKCJkaXYiLCJtYXBib3hnbC1wb3B1cC10aXAiLHRoaXMuX2NvbnRhaW5lciksdGhpcy5fY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuX2NvbnRlbnQpKSx0aGlzLl9tYXAudHJhbnNmb3JtLnJlbmRlcldvcmxkQ29waWVzJiYodGhpcy5fbG5nTGF0PWRuKHRoaXMuX2xuZ0xhdCx0aGlzLl9wb3MsdGhpcy5fbWFwLnRyYW5zZm9ybSkpO3ZhciBlPXRoaXMuX3Bvcz10aGlzLl9tYXAucHJvamVjdCh0aGlzLl9sbmdMYXQpLHI9dGhpcy5vcHRpb25zLmFuY2hvcixuPWZ1bmN0aW9uIGUocil7aWYocil7aWYoIm51bWJlciI9PXR5cGVvZiByKXt2YXIgbj1NYXRoLnJvdW5kKE1hdGguc3FydCguNSpNYXRoLnBvdyhyLDIpKSk7cmV0dXJue2NlbnRlcjpuZXcgdC5kZWZhdWx0JDEoMCwwKSx0b3A6bmV3IHQuZGVmYXVsdCQxKDAsciksInRvcC1sZWZ0IjpuZXcgdC5kZWZhdWx0JDEobixuKSwidG9wLXJpZ2h0IjpuZXcgdC5kZWZhdWx0JDEoLW4sbiksYm90dG9tOm5ldyB0LmRlZmF1bHQkMSgwLC1yKSwiYm90dG9tLWxlZnQiOm5ldyB0LmRlZmF1bHQkMShuLC1uKSwiYm90dG9tLXJpZ2h0IjpuZXcgdC5kZWZhdWx0JDEoLW4sLW4pLGxlZnQ6bmV3IHQuZGVmYXVsdCQxKHIsMCkscmlnaHQ6bmV3IHQuZGVmYXVsdCQxKC1yLDApfX1pZihyIGluc3RhbmNlb2YgdC5kZWZhdWx0JDF8fEFycmF5LmlzQXJyYXkocikpe3ZhciBpPXQuZGVmYXVsdCQxLmNvbnZlcnQocik7cmV0dXJue2NlbnRlcjppLHRvcDppLCJ0b3AtbGVmdCI6aSwidG9wLXJpZ2h0IjppLGJvdHRvbTppLCJib3R0b20tbGVmdCI6aSwiYm90dG9tLXJpZ2h0IjppLGxlZnQ6aSxyaWdodDppfX1yZXR1cm57Y2VudGVyOnQuZGVmYXVsdCQxLmNvbnZlcnQoci5jZW50ZXJ8fFswLDBdKSx0b3A6dC5kZWZhdWx0JDEuY29udmVydChyLnRvcHx8WzAsMF0pLCJ0b3AtbGVmdCI6dC5kZWZhdWx0JDEuY29udmVydChyWyJ0b3AtbGVmdCJdfHxbMCwwXSksInRvcC1yaWdodCI6dC5kZWZhdWx0JDEuY29udmVydChyWyJ0b3AtcmlnaHQiXXx8WzAsMF0pLGJvdHRvbTp0LmRlZmF1bHQkMS5jb252ZXJ0KHIuYm90dG9tfHxbMCwwXSksImJvdHRvbS1sZWZ0Ijp0LmRlZmF1bHQkMS5jb252ZXJ0KHJbImJvdHRvbS1sZWZ0Il18fFswLDBdKSwiYm90dG9tLXJpZ2h0Ijp0LmRlZmF1bHQkMS5jb252ZXJ0KHJbImJvdHRvbS1yaWdodCJdfHxbMCwwXSksbGVmdDp0LmRlZmF1bHQkMS5jb252ZXJ0KHIubGVmdHx8WzAsMF0pLHJpZ2h0OnQuZGVmYXVsdCQxLmNvbnZlcnQoci5yaWdodHx8WzAsMF0pfX1yZXR1cm4gZShuZXcgdC5kZWZhdWx0JDEoMCwwKSl9KHRoaXMub3B0aW9ucy5vZmZzZXQpO2lmKCFyKXt2YXIgaSxhPXRoaXMuX2NvbnRhaW5lci5vZmZzZXRXaWR0aCxvPXRoaXMuX2NvbnRhaW5lci5vZmZzZXRIZWlnaHQ7aT1lLnkrbi5ib3R0b20ueTxvP1sidG9wIl06ZS55PnRoaXMuX21hcC50cmFuc2Zvcm0uaGVpZ2h0LW8/WyJib3R0b20iXTpbXSxlLng8YS8yP2kucHVzaCgibGVmdCIpOmUueD50aGlzLl9tYXAudHJhbnNmb3JtLndpZHRoLWEvMiYmaS5wdXNoKCJyaWdodCIpLHI9MD09PWkubGVuZ3RoPyJib3R0b20iOmkuam9pbigiLSIpfXZhciBsPWUuYWRkKG5bcl0pLnJvdW5kKCk7cy5zZXRUcmFuc2Zvcm0odGhpcy5fY29udGFpbmVyLGduW3JdKyIgdHJhbnNsYXRlKCIrbC54KyJweCwiK2wueSsicHgpIiksbW4odGhpcy5fY29udGFpbmVyLHIsInBvcHVwIil9fSxyLnByb3RvdHlwZS5fb25DbGlja0Nsb3NlPWZ1bmN0aW9uKCl7dGhpcy5yZW1vdmUoKX0scn0odC5FdmVudGVkKSxFbj17dmVyc2lvbjoiMC40NS4wIixzdXBwb3J0ZWQ6ZSx3b3JrZXJDb3VudDpNYXRoLm1heChNYXRoLmZsb29yKGEuaGFyZHdhcmVDb25jdXJyZW5jeS8yKSwxKSxzZXRSVExUZXh0UGx1Z2luOnQuc2V0UlRMVGV4dFBsdWdpbixNYXA6dW4sTmF2aWdhdGlvbkNvbnRyb2w6cG4sR2VvbG9jYXRlQ29udHJvbDpibixBdHRyaWJ1dGlvbkNvbnRyb2w6bm4sU2NhbGVDb250cm9sOnduLEZ1bGxzY3JlZW5Db250cm9sOkFuLFBvcHVwOlNuLE1hcmtlcjp2bixTdHlsZTpKZSxMbmdMYXQ6RyxMbmdMYXRCb3VuZHM6VyxQb2ludDp0LmRlZmF1bHQkMSxFdmVudGVkOnQuRXZlbnRlZCxjb25maWc6bSxnZXQgYWNjZXNzVG9rZW4oKXtyZXR1cm4gbS5BQ0NFU1NfVE9LRU59LHNldCBhY2Nlc3NUb2tlbih0KXttLkFDQ0VTU19UT0tFTj10fSx3b3JrZXJVcmw6IiJ9O3JldHVybiBFbn0pLG59KX0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0se31dLDM5NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTE8PHQrMSxyPW5ldyBBcnJheShlKSxuPTA7bjxlOysrbilyW25dPWEodCxuKTtyZXR1cm4gcn07dmFyIG49dCgiY29udmV4LWh1bGwiKTtmdW5jdGlvbiBpKHQsZSxyKXtmb3IodmFyIG49bmV3IEFycmF5KHQpLGk9MDtpPHQ7KytpKW5baV09MCxpPT09ZSYmKG5baV0rPS41KSxpPT09ciYmKG5baV0rPS41KTtyZXR1cm4gbn1mdW5jdGlvbiBhKHQsZSl7aWYoMD09PWV8fGU9PT0oMTw8dCsxKS0xKXJldHVybltdO2Zvcih2YXIgcj1bXSxhPVtdLG89MDtvPD10OysrbylpZihlJjE8PG8pe3IucHVzaChpKHQsby0xLG8tMSkpLGEucHVzaChudWxsKTtmb3IodmFyIHM9MDtzPD10Oysrcyl+ZSYxPDxzJiYoci5wdXNoKGkodCxvLTEscy0xKSksYS5wdXNoKFtvLHNdKSl9dmFyIGw9bihyKSxjPVtdO3Q6Zm9yKG89MDtvPGwubGVuZ3RoOysrbyl7dmFyIHU9bFtvXSxoPVtdO2ZvcihzPTA7czx1Lmxlbmd0aDsrK3Mpe2lmKCFhW3Vbc11dKWNvbnRpbnVlIHQ7aC5wdXNoKGFbdVtzXV0uc2xpY2UoKSl9Yy5wdXNoKGgpfXJldHVybiBjfX0seyJjb252ZXgtaHVsbCI6MTE3fV0sMzk1OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi9ub3JtYWxpemUiKSxpPXQoImdsLW1hdDQvY3JlYXRlIiksYT10KCJnbC1tYXQ0L2Nsb25lIiksbz10KCJnbC1tYXQ0L2RldGVybWluYW50Iikscz10KCJnbC1tYXQ0L2ludmVydCIpLGw9dCgiZ2wtbWF0NC90cmFuc3Bvc2UiKSxjPXtsZW5ndGg6dCgiZ2wtdmVjMy9sZW5ndGgiKSxub3JtYWxpemU6dCgiZ2wtdmVjMy9ub3JtYWxpemUiKSxkb3Q6dCgiZ2wtdmVjMy9kb3QiKSxjcm9zczp0KCJnbC12ZWMzL2Nyb3NzIil9LHU9aSgpLGg9aSgpLGY9WzAsMCwwLDBdLHA9W1swLDAsMF0sWzAsMCwwXSxbMCwwLDBdXSxkPVswLDAsMF07ZnVuY3Rpb24gZyh0LGUscixuLGkpe3RbMF09ZVswXSpuK3JbMF0qaSx0WzFdPWVbMV0qbityWzFdKmksdFsyXT1lWzJdKm4rclsyXSppfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpLG0sdil7aWYoZXx8KGU9WzAsMCwwXSkscnx8KHI9WzAsMCwwXSksaXx8KGk9WzAsMCwwXSksbXx8KG09WzAsMCwwLDFdKSx2fHwodj1bMCwwLDAsMV0pLCFuKHUsdCkpcmV0dXJuITE7aWYoYShoLHUpLGhbM109MCxoWzddPTAsaFsxMV09MCxoWzE1XT0xLE1hdGguYWJzKG8oaCk8MWUtOCkpcmV0dXJuITE7dmFyIHkseCxiLF8sdyxrLE0sQT11WzNdLFQ9dVs3XSxTPXVbMTFdLEU9dVsxMl0sQz11WzEzXSxMPXVbMTRdLHo9dVsxNV07aWYoMCE9PUF8fDAhPT1UfHwwIT09Uyl7aWYoZlswXT1BLGZbMV09VCxmWzJdPVMsZlszXT16LCFzKGgsaCkpcmV0dXJuITE7bChoLGgpLHk9bSxiPWgsXz0oeD1mKVswXSx3PXhbMV0saz14WzJdLE09eFszXSx5WzBdPWJbMF0qXytiWzRdKncrYls4XSprK2JbMTJdKk0seVsxXT1iWzFdKl8rYls1XSp3K2JbOV0qaytiWzEzXSpNLHlbMl09YlsyXSpfK2JbNl0qdytiWzEwXSprK2JbMTRdKk0seVszXT1iWzNdKl8rYls3XSp3K2JbMTFdKmsrYlsxNV0qTX1lbHNlIG1bMF09bVsxXT1tWzJdPTAsbVszXT0xO2lmKGVbMF09RSxlWzFdPUMsZVsyXT1MLGZ1bmN0aW9uKHQsZSl7dFswXVswXT1lWzBdLHRbMF1bMV09ZVsxXSx0WzBdWzJdPWVbMl0sdFsxXVswXT1lWzRdLHRbMV1bMV09ZVs1XSx0WzFdWzJdPWVbNl0sdFsyXVswXT1lWzhdLHRbMl1bMV09ZVs5XSx0WzJdWzJdPWVbMTBdfShwLHUpLHJbMF09Yy5sZW5ndGgocFswXSksYy5ub3JtYWxpemUocFswXSxwWzBdKSxpWzBdPWMuZG90KHBbMF0scFsxXSksZyhwWzFdLHBbMV0scFswXSwxLC1pWzBdKSxyWzFdPWMubGVuZ3RoKHBbMV0pLGMubm9ybWFsaXplKHBbMV0scFsxXSksaVswXS89clsxXSxpWzFdPWMuZG90KHBbMF0scFsyXSksZyhwWzJdLHBbMl0scFswXSwxLC1pWzFdKSxpWzJdPWMuZG90KHBbMV0scFsyXSksZyhwWzJdLHBbMl0scFsxXSwxLC1pWzJdKSxyWzJdPWMubGVuZ3RoKHBbMl0pLGMubm9ybWFsaXplKHBbMl0scFsyXSksaVsxXS89clsyXSxpWzJdLz1yWzJdLGMuY3Jvc3MoZCxwWzFdLHBbMl0pLGMuZG90KHBbMF0sZCk8MClmb3IodmFyIFA9MDtQPDM7UCsrKXJbUF0qPS0xLHBbUF1bMF0qPS0xLHBbUF1bMV0qPS0xLHBbUF1bMl0qPS0xO3JldHVybiB2WzBdPS41Kk1hdGguc3FydChNYXRoLm1heCgxK3BbMF1bMF0tcFsxXVsxXS1wWzJdWzJdLDApKSx2WzFdPS41Kk1hdGguc3FydChNYXRoLm1heCgxLXBbMF1bMF0rcFsxXVsxXS1wWzJdWzJdLDApKSx2WzJdPS41Kk1hdGguc3FydChNYXRoLm1heCgxLXBbMF1bMF0tcFsxXVsxXStwWzJdWzJdLDApKSx2WzNdPS41Kk1hdGguc3FydChNYXRoLm1heCgxK3BbMF1bMF0rcFsxXVsxXStwWzJdWzJdLDApKSxwWzJdWzFdPnBbMV1bMl0mJih2WzBdPS12WzBdKSxwWzBdWzJdPnBbMl1bMF0mJih2WzFdPS12WzFdKSxwWzFdWzBdPnBbMF1bMV0mJih2WzJdPS12WzJdKSwhMH19LHsiLi9ub3JtYWxpemUiOjM5NiwiZ2wtbWF0NC9jbG9uZSI6MjQ4LCJnbC1tYXQ0L2NyZWF0ZSI6MjQ5LCJnbC1tYXQ0L2RldGVybWluYW50IjoyNTAsImdsLW1hdDQvaW52ZXJ0IjoyNTQsImdsLW1hdDQvdHJhbnNwb3NlIjoyNjQsImdsLXZlYzMvY3Jvc3MiOjMxNCwiZ2wtdmVjMy9kb3QiOjMxNywiZ2wtdmVjMy9sZW5ndGgiOjMyMiwiZ2wtdmVjMy9ub3JtYWxpemUiOjMyOH1dLDM5NjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWVbMTVdO2lmKDA9PT1yKXJldHVybiExO2Zvcih2YXIgbj0xL3IsaT0wO2k8MTY7aSsrKXRbaV09ZVtpXSpuO3JldHVybiEwfX0se31dLDM5NzpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoImdsLXZlYzMvbGVycCIpLGk9dCgibWF0NC1yZWNvbXBvc2UiKSxhPXQoIm1hdDQtZGVjb21wb3NlIiksbz10KCJnbC1tYXQ0L2RldGVybWluYW50Iikscz10KCJxdWF0LXNsZXJwIiksbD1oKCksYz1oKCksdT1oKCk7ZnVuY3Rpb24gaCgpe3JldHVybnt0cmFuc2xhdGU6ZigpLHNjYWxlOmYoMSksc2tldzpmKCkscGVyc3BlY3RpdmU6WzAsMCwwLDFdLHF1YXRlcm5pb246WzAsMCwwLDFdfX1mdW5jdGlvbiBmKHQpe3JldHVyblt0fHwwLHR8fDAsdHx8MF19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGgpe2lmKDA9PT1vKGUpfHwwPT09byhyKSlyZXR1cm4hMTt2YXIgZj1hKGUsbC50cmFuc2xhdGUsbC5zY2FsZSxsLnNrZXcsbC5wZXJzcGVjdGl2ZSxsLnF1YXRlcm5pb24pLHA9YShyLGMudHJhbnNsYXRlLGMuc2NhbGUsYy5za2V3LGMucGVyc3BlY3RpdmUsYy5xdWF0ZXJuaW9uKTtyZXR1cm4hKCFmfHwhcHx8KG4odS50cmFuc2xhdGUsbC50cmFuc2xhdGUsYy50cmFuc2xhdGUsaCksbih1LnNrZXcsbC5za2V3LGMuc2tldyxoKSxuKHUuc2NhbGUsbC5zY2FsZSxjLnNjYWxlLGgpLG4odS5wZXJzcGVjdGl2ZSxsLnBlcnNwZWN0aXZlLGMucGVyc3BlY3RpdmUsaCkscyh1LnF1YXRlcm5pb24sbC5xdWF0ZXJuaW9uLGMucXVhdGVybmlvbixoKSxpKHQsdS50cmFuc2xhdGUsdS5zY2FsZSx1LnNrZXcsdS5wZXJzcGVjdGl2ZSx1LnF1YXRlcm5pb24pLDApKX19LHsiZ2wtbWF0NC9kZXRlcm1pbmFudCI6MjUwLCJnbC12ZWMzL2xlcnAiOjMyMywibWF0NC1kZWNvbXBvc2UiOjM5NSwibWF0NC1yZWNvbXBvc2UiOjM5OCwicXVhdC1zbGVycCI6NDUwfV0sMzk4OltmdW5jdGlvbih0LGUscil7dmFyIG49e2lkZW50aXR5OnQoImdsLW1hdDQvaWRlbnRpdHkiKSx0cmFuc2xhdGU6dCgiZ2wtbWF0NC90cmFuc2xhdGUiKSxtdWx0aXBseTp0KCJnbC1tYXQ0L211bHRpcGx5IiksY3JlYXRlOnQoImdsLW1hdDQvY3JlYXRlIiksc2NhbGU6dCgiZ2wtbWF0NC9zY2FsZSIpLGZyb21Sb3RhdGlvblRyYW5zbGF0aW9uOnQoImdsLW1hdDQvZnJvbVJvdGF0aW9uVHJhbnNsYXRpb24iKX0saT0obi5jcmVhdGUoKSxuLmNyZWF0ZSgpKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSxvLHMpe3JldHVybiBuLmlkZW50aXR5KHQpLG4uZnJvbVJvdGF0aW9uVHJhbnNsYXRpb24odCxzLGUpLHRbM109b1swXSx0WzddPW9bMV0sdFsxMV09b1syXSx0WzE1XT1vWzNdLG4uaWRlbnRpdHkoaSksMCE9PWFbMl0mJihpWzldPWFbMl0sbi5tdWx0aXBseSh0LHQsaSkpLDAhPT1hWzFdJiYoaVs5XT0wLGlbOF09YVsxXSxuLm11bHRpcGx5KHQsdCxpKSksMCE9PWFbMF0mJihpWzhdPTAsaVs0XT1hWzBdLG4ubXVsdGlwbHkodCx0LGkpKSxuLnNjYWxlKHQsdCxyKSx0fX0seyJnbC1tYXQ0L2NyZWF0ZSI6MjQ5LCJnbC1tYXQ0L2Zyb21Sb3RhdGlvblRyYW5zbGF0aW9uIjoyNTIsImdsLW1hdDQvaWRlbnRpdHkiOjI1MywiZ2wtbWF0NC9tdWx0aXBseSI6MjU2LCJnbC1tYXQ0L3NjYWxlIjoyNjIsImdsLW1hdDQvdHJhbnNsYXRlIjoyNjN9XSwzOTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPU1hdGgubG9nMnx8ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubG9nKHQpKk1hdGguTE9HMkV9fSx7fV0sNDAwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImJpbmFyeS1zZWFyY2gtYm91bmRzIiksaT10KCJtYXQ0LWludGVycG9sYXRlIiksYT10KCJnbC1tYXQ0L2ludmVydCIpLG89dCgiZ2wtbWF0NC9yb3RhdGVYIikscz10KCJnbC1tYXQ0L3JvdGF0ZVkiKSxsPXQoImdsLW1hdDQvcm90YXRlWiIpLGM9dCgiZ2wtbWF0NC9sb29rQXQiKSx1PXQoImdsLW1hdDQvdHJhbnNsYXRlIiksaD0odCgiZ2wtbWF0NC9zY2FsZSIpLHQoImdsLXZlYzMvbm9ybWFsaXplIikpLGY9WzAsMCwwXTtmdW5jdGlvbiBwKHQpe3RoaXMuX2NvbXBvbmVudHM9dC5zbGljZSgpLHRoaXMuX3RpbWU9WzBdLHRoaXMucHJldk1hdHJpeD10LnNsaWNlKCksdGhpcy5uZXh0TWF0cml4PXQuc2xpY2UoKSx0aGlzLmNvbXB1dGVkTWF0cml4PXQuc2xpY2UoKSx0aGlzLmNvbXB1dGVkSW52ZXJzZT10LnNsaWNlKCksdGhpcy5jb21wdXRlZEV5ZT1bMCwwLDBdLHRoaXMuY29tcHV0ZWRVcD1bMCwwLDBdLHRoaXMuY29tcHV0ZWRDZW50ZXI9WzAsMCwwXSx0aGlzLmNvbXB1dGVkUmFkaXVzPVswXSx0aGlzLl9saW1pdHM9Wy0xLzAsMS8wXX1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBwKCh0PXR8fHt9KS5tYXRyaXh8fFsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXSl9O3ZhciBkPXAucHJvdG90eXBlO2QucmVjYWxjTWF0cml4PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3RpbWUscj1uLmxlKGUsdCksbz10aGlzLmNvbXB1dGVkTWF0cml4O2lmKCEocjwwKSl7dmFyIHM9dGhpcy5fY29tcG9uZW50cztpZihyPT09ZS5sZW5ndGgtMSlmb3IodmFyIGw9MTYqcixjPTA7YzwxNjsrK2Mpb1tjXT1zW2wrK107ZWxzZXt2YXIgdT1lW3IrMV0tZVtyXSxmPShsPTE2KnIsdGhpcy5wcmV2TWF0cml4KSxwPSEwO2ZvcihjPTA7YzwxNjsrK2MpZltjXT1zW2wrK107dmFyIGQ9dGhpcy5uZXh0TWF0cml4O2ZvcihjPTA7YzwxNjsrK2MpZFtjXT1zW2wrK10scD1wJiZmW2NdPT09ZFtjXTtpZih1PDFlLTZ8fHApZm9yKGM9MDtjPDE2OysrYylvW2NdPWZbY107ZWxzZSBpKG8sZixkLCh0LWVbcl0pL3UpfXZhciBnPXRoaXMuY29tcHV0ZWRVcDtnWzBdPW9bMV0sZ1sxXT1vWzVdLGdbMl09b1s5XSxoKGcsZyk7dmFyIG09dGhpcy5jb21wdXRlZEludmVyc2U7YShtLG8pO3ZhciB2PXRoaXMuY29tcHV0ZWRFeWUseT1tWzE1XTt2WzBdPW1bMTJdL3ksdlsxXT1tWzEzXS95LHZbMl09bVsxNF0veTt2YXIgeD10aGlzLmNvbXB1dGVkQ2VudGVyLGI9TWF0aC5leHAodGhpcy5jb21wdXRlZFJhZGl1c1swXSk7Zm9yKGM9MDtjPDM7KytjKXhbY109dltjXS1vWzIrNCpjXSpifX0sZC5pZGxlPWZ1bmN0aW9uKHQpe2lmKCEodDx0aGlzLmxhc3RUKCkpKXtmb3IodmFyIGU9dGhpcy5fY29tcG9uZW50cyxyPWUubGVuZ3RoLTE2LG49MDtuPDE2OysrbillLnB1c2goZVtyKytdKTt0aGlzLl90aW1lLnB1c2godCl9fSxkLmZsdXNoPWZ1bmN0aW9uKHQpe3ZhciBlPW4uZ3QodGhpcy5fdGltZSx0KS0yO2U8MHx8KHRoaXMuX3RpbWUuc3BsaWNlKDAsZSksdGhpcy5fY29tcG9uZW50cy5zcGxpY2UoMCwxNiplKSl9LGQubGFzdFQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdGltZVt0aGlzLl90aW1lLmxlbmd0aC0xXX0sZC5sb29rQXQ9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5yZWNhbGNNYXRyaXgodCksZT1lfHx0aGlzLmNvbXB1dGVkRXllLHI9cnx8ZixuPW58fHRoaXMuY29tcHV0ZWRVcCx0aGlzLnNldE1hdHJpeCh0LGModGhpcy5jb21wdXRlZE1hdHJpeCxlLHIsbikpO2Zvcih2YXIgaT0wLGE9MDthPDM7KythKWkrPU1hdGgucG93KHJbYV0tZVthXSwyKTtpPU1hdGgubG9nKE1hdGguc3FydChpKSksdGhpcy5jb21wdXRlZFJhZGl1c1swXT1pfSxkLnJvdGF0ZT1mdW5jdGlvbih0LGUscixuKXt0aGlzLnJlY2FsY01hdHJpeCh0KTt2YXIgaT10aGlzLmNvbXB1dGVkSW52ZXJzZTtlJiZzKGksaSxlKSxyJiZvKGksaSxyKSxuJiZsKGksaSxuKSx0aGlzLnNldE1hdHJpeCh0LGEodGhpcy5jb21wdXRlZE1hdHJpeCxpKSl9O3ZhciBnPVswLDAsMF07ZC5wYW49ZnVuY3Rpb24odCxlLHIsbil7Z1swXT0tKGV8fDApLGdbMV09LShyfHwwKSxnWzJdPS0obnx8MCksdGhpcy5yZWNhbGNNYXRyaXgodCk7dmFyIGk9dGhpcy5jb21wdXRlZEludmVyc2U7dShpLGksZyksdGhpcy5zZXRNYXRyaXgodCxhKGksaSkpfSxkLnRyYW5zbGF0ZT1mdW5jdGlvbih0LGUscixuKXtnWzBdPWV8fDAsZ1sxXT1yfHwwLGdbMl09bnx8MCx0aGlzLnJlY2FsY01hdHJpeCh0KTt2YXIgaT10aGlzLmNvbXB1dGVkTWF0cml4O3UoaSxpLGcpLHRoaXMuc2V0TWF0cml4KHQsaSl9LGQuc2V0TWF0cml4PWZ1bmN0aW9uKHQsZSl7aWYoISh0PHRoaXMubGFzdFQoKSkpe3RoaXMuX3RpbWUucHVzaCh0KTtmb3IodmFyIHI9MDtyPDE2Oysrcil0aGlzLl9jb21wb25lbnRzLnB1c2goZVtyXSl9fSxkLnNldERpc3RhbmNlPWZ1bmN0aW9uKHQsZSl7dGhpcy5jb21wdXRlZFJhZGl1c1swXT1lfSxkLnNldERpc3RhbmNlTGltaXRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fbGltaXRzO3JbMF09dCxyWzFdPWV9LGQuZ2V0RGlzdGFuY2VMaW1pdHM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbGltaXRzO3JldHVybiB0Pyh0WzBdPWVbMF0sdFsxXT1lWzFdLHQpOmV9fSx7ImJpbmFyeS1zZWFyY2gtYm91bmRzIjo3OSwiZ2wtbWF0NC9pbnZlcnQiOjI1NCwiZ2wtbWF0NC9sb29rQXQiOjI1NSwiZ2wtbWF0NC9yb3RhdGVYIjoyNTksImdsLW1hdDQvcm90YXRlWSI6MjYwLCJnbC1tYXQ0L3JvdGF0ZVoiOjI2MSwiZ2wtbWF0NC9zY2FsZSI6MjYyLCJnbC1tYXQ0L3RyYW5zbGF0ZSI6MjYzLCJnbC12ZWMzL25vcm1hbGl6ZSI6MzI4LCJtYXQ0LWludGVycG9sYXRlIjozOTd9XSw0MDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoO2lmKGU8Myl7Zm9yKHZhciByPW5ldyBBcnJheShlKSxpPTA7aTxlOysraSlyW2ldPWk7cmV0dXJuIDI9PT1lJiZ0WzBdWzBdPT09dFsxXVswXSYmdFswXVsxXT09PXRbMV1bMV0/WzBdOnJ9Zm9yKHZhciBhPW5ldyBBcnJheShlKSxpPTA7aTxlOysraSlhW2ldPWk7YS5zb3J0KGZ1bmN0aW9uKGUscil7dmFyIG49dFtlXVswXS10W3JdWzBdO3JldHVybiBufHx0W2VdWzFdLXRbcl1bMV19KTtmb3IodmFyIG89W2FbMF0sYVsxXV0scz1bYVswXSxhWzFdXSxpPTI7aTxlOysraSl7Zm9yKHZhciBsPWFbaV0sYz10W2xdLHU9by5sZW5ndGg7dT4xJiZuKHRbb1t1LTJdXSx0W29bdS0xXV0sYyk8PTA7KXUtPTEsby5wb3AoKTtmb3Ioby5wdXNoKGwpLHU9cy5sZW5ndGg7dT4xJiZuKHRbc1t1LTJdXSx0W3NbdS0xXV0sYyk+PTA7KXUtPTEscy5wb3AoKTtzLnB1c2gobCl9Zm9yKHZhciByPW5ldyBBcnJheShzLmxlbmd0aCtvLmxlbmd0aC0yKSxoPTAsaT0wLGY9by5sZW5ndGg7aTxmOysraSlyW2grK109b1tpXTtmb3IodmFyIHA9cy5sZW5ndGgtMjtwPjA7LS1wKXJbaCsrXT1zW3BdO3JldHVybiByfTt2YXIgbj10KCJyb2J1c3Qtb3JpZW50YXRpb24iKVszXX0seyJyb2J1c3Qtb3JpZW50YXRpb24iOjQ3MX1dLDQwMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtlfHwoZT10LHQ9d2luZG93KTt2YXIgcj0wLGk9MCxhPTAsbz17c2hpZnQ6ITEsYWx0OiExLGNvbnRyb2w6ITEsbWV0YTohMX0scz0hMTtmdW5jdGlvbiBsKHQpe3ZhciBlPSExO3JldHVybiJhbHRLZXkiaW4gdCYmKGU9ZXx8dC5hbHRLZXkhPT1vLmFsdCxvLmFsdD0hIXQuYWx0S2V5KSwic2hpZnRLZXkiaW4gdCYmKGU9ZXx8dC5zaGlmdEtleSE9PW8uc2hpZnQsby5zaGlmdD0hIXQuc2hpZnRLZXkpLCJjdHJsS2V5ImluIHQmJihlPWV8fHQuY3RybEtleSE9PW8uY29udHJvbCxvLmNvbnRyb2w9ISF0LmN0cmxLZXkpLCJtZXRhS2V5ImluIHQmJihlPWV8fHQubWV0YUtleSE9PW8ubWV0YSxvLm1ldGE9ISF0Lm1ldGFLZXkpLGV9ZnVuY3Rpb24gYyh0LHMpe3ZhciBjPW4ueChzKSx1PW4ueShzKTsiYnV0dG9ucyJpbiBzJiYodD0wfHMuYnV0dG9ucyksKHQhPT1yfHxjIT09aXx8dSE9PWF8fGwocykpJiYocj0wfHQsaT1jfHwwLGE9dXx8MCxlJiZlKHIsaSxhLG8pKX1mdW5jdGlvbiB1KHQpe2MoMCx0KX1mdW5jdGlvbiBoKCl7KHJ8fGl8fGF8fG8uc2hpZnR8fG8uYWx0fHxvLm1ldGF8fG8uY29udHJvbCkmJihpPWE9MCxyPTAsby5zaGlmdD1vLmFsdD1vLmNvbnRyb2w9by5tZXRhPSExLGUmJmUoMCwwLDAsbykpfWZ1bmN0aW9uIGYodCl7bCh0KSYmZSYmZShyLGksYSxvKX1mdW5jdGlvbiBwKHQpezA9PT1uLmJ1dHRvbnModCk/YygwLHQpOmMocix0KX1mdW5jdGlvbiBkKHQpe2MocnxuLmJ1dHRvbnModCksdCl9ZnVuY3Rpb24gZyh0KXtjKHImfm4uYnV0dG9ucyh0KSx0KX1mdW5jdGlvbiBtKCl7c3x8KHM9ITAsdC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHApLHQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixkKSx0LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLGcpLHQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VsZWF2ZSIsdSksdC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWVudGVyIix1KSx0LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlb3V0Iix1KSx0LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlb3ZlciIsdSksdC5hZGRFdmVudExpc3RlbmVyKCJibHVyIixoKSx0LmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIixmKSx0LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLGYpLHQuYWRkRXZlbnRMaXN0ZW5lcigia2V5cHJlc3MiLGYpLHQhPT13aW5kb3cmJih3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsaCksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIixmKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsZiksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImtleXByZXNzIixmKSkpfW0oKTt2YXIgdj17ZWxlbWVudDp0fTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnRpZXModix7ZW5hYmxlZDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHN9LHNldDpmdW5jdGlvbihlKXtlP20oKTpzJiYocz0hMSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIscCksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLGQpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsZyksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWxlYXZlIix1KSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZW50ZXIiLHUpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2VvdXQiLHUpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2VvdmVyIix1KSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImJsdXIiLGgpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5dXAiLGYpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsZiksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlwcmVzcyIsZiksdCE9PXdpbmRvdyYmKHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJibHVyIixoKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5dXAiLGYpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIixmKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5cHJlc3MiLGYpKSl9LGVudW1lcmFibGU6ITB9LGJ1dHRvbnM6e2dldDpmdW5jdGlvbigpe3JldHVybiByfSxlbnVtZXJhYmxlOiEwfSx4OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaX0sZW51bWVyYWJsZTohMH0seTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGF9LGVudW1lcmFibGU6ITB9LG1vZHM6e2dldDpmdW5jdGlvbigpe3JldHVybiBvfSxlbnVtZXJhYmxlOiEwfX0pLHZ9O3ZhciBuPXQoIm1vdXNlLWV2ZW50Iil9LHsibW91c2UtZXZlbnQiOjQwNH1dLDQwMzpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXtsZWZ0OjAsdG9wOjB9O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7ZT1lfHx0LmN1cnJlbnRUYXJnZXR8fHQuc3JjRWxlbWVudCxBcnJheS5pc0FycmF5KHIpfHwocj1bMCwwXSk7dmFyIGk9dC5jbGllbnRYfHwwLGE9dC5jbGllbnRZfHwwLG89KHM9ZSxzPT09d2luZG93fHxzPT09ZG9jdW1lbnR8fHM9PT1kb2N1bWVudC5ib2R5P246cy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSk7dmFyIHM7cmV0dXJuIHJbMF09aS1vLmxlZnQsclsxXT1hLW8udG9wLHJ9fSx7fV0sNDA0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7cmV0dXJuIHQudGFyZ2V0fHx0LnNyY0VsZW1lbnR8fHdpbmRvd31yLmJ1dHRvbnM9ZnVuY3Rpb24odCl7aWYoIm9iamVjdCI9PXR5cGVvZiB0KXtpZigiYnV0dG9ucyJpbiB0KXJldHVybiB0LmJ1dHRvbnM7aWYoIndoaWNoImluIHQpe2lmKDI9PT0oZT10LndoaWNoKSlyZXR1cm4gNDtpZigzPT09ZSlyZXR1cm4gMjtpZihlPjApcmV0dXJuIDE8PGUtMX1lbHNlIGlmKCJidXR0b24iaW4gdCl7dmFyIGU7aWYoMT09PShlPXQuYnV0dG9uKSlyZXR1cm4gNDtpZigyPT09ZSlyZXR1cm4gMjtpZihlPj0wKXJldHVybiAxPDxlfX1yZXR1cm4gMH0sci5lbGVtZW50PW4sci54PWZ1bmN0aW9uKHQpe2lmKCJvYmplY3QiPT10eXBlb2YgdCl7aWYoIm9mZnNldFgiaW4gdClyZXR1cm4gdC5vZmZzZXRYO3ZhciBlPW4odCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuIHQuY2xpZW50WC1lLmxlZnR9cmV0dXJuIDB9LHIueT1mdW5jdGlvbih0KXtpZigib2JqZWN0Ij09dHlwZW9mIHQpe2lmKCJvZmZzZXRZImluIHQpcmV0dXJuIHQub2Zmc2V0WTt2YXIgZT1uKHQpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybiB0LmNsaWVudFktZS50b3B9cmV0dXJuIDB9fSx7fV0sNDA1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInRvLXB4Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXsiZnVuY3Rpb24iPT10eXBlb2YgdCYmKHI9ISFlLGU9dCx0PXdpbmRvdyk7dmFyIGk9bigiZXgiLHQpLGE9ZnVuY3Rpb24odCl7ciYmdC5wcmV2ZW50RGVmYXVsdCgpO3ZhciBuPXQuZGVsdGFYfHwwLGE9dC5kZWx0YVl8fDAsbz10LmRlbHRhWnx8MCxzPXQuZGVsdGFNb2RlLGw9MTtzd2l0Y2gocyl7Y2FzZSAxOmw9aTticmVhaztjYXNlIDI6bD13aW5kb3cuaW5uZXJIZWlnaHR9aWYoYSo9bCxvKj1sLChuKj1sKXx8YXx8bylyZXR1cm4gZShuLGEsbyx0KX07cmV0dXJuIHQuYWRkRXZlbnRMaXN0ZW5lcigid2hlZWwiLGEpLGF9fSx7InRvLXB4Ijo1MDF9XSw0MDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgidHlwZWRhcnJheS1wb29sIik7ZnVuY3Rpb24gaSh0KXtyZXR1cm4iYSIrdH1mdW5jdGlvbiBhKHQpe3JldHVybiJkIit0fWZ1bmN0aW9uIG8odCxlKXtyZXR1cm4iYyIrdCsiXyIrZX1mdW5jdGlvbiBzKHQpe3JldHVybiJzIit0fWZ1bmN0aW9uIGwodCxlKXtyZXR1cm4idCIrdCsiXyIrZX1mdW5jdGlvbiBjKHQpe3JldHVybiJvIit0fWZ1bmN0aW9uIHUodCl7cmV0dXJuIngiK3R9ZnVuY3Rpb24gaCh0KXtyZXR1cm4icCIrdH1mdW5jdGlvbiBmKHQsZSl7cmV0dXJuImQiK3QrIl8iK2V9ZnVuY3Rpb24gcCh0KXtyZXR1cm4iaSIrdH1mdW5jdGlvbiBkKHQsZSl7cmV0dXJuInUiK3QrIl8iK2V9ZnVuY3Rpb24gZyh0KXtyZXR1cm4iYiIrdH1mdW5jdGlvbiBtKHQpe3JldHVybiJ5Iit0fWZ1bmN0aW9uIHYodCl7cmV0dXJuImUiK3R9ZnVuY3Rpb24geSh0KXtyZXR1cm4idiIrdH1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0KXt0aHJvdyBuZXcgRXJyb3IoIm5kYXJyYXktZXh0cmFjdC1jb250b3VyOiAiK3QpfSJvYmplY3QiIT10eXBlb2YgdCYmZSgiTXVzdCBzcGVjaWZ5IGFyZ3VtZW50cyIpO3ZhciByPXQub3JkZXI7QXJyYXkuaXNBcnJheShyKXx8ZSgiTXVzdCBzcGVjaWZ5IG9yZGVyIik7dmFyIFQ9dC5hcnJheUFyZ3VtZW50c3x8MTtUPDEmJmUoIk11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgYXJyYXkgYXJndW1lbnQiKTt2YXIgUz10LnNjYWxhckFyZ3VtZW50c3x8MDtTPDAmJmUoIlNjYWxhciBhcmcgY291bnQgbXVzdCBiZSA+IDAiKTsiZnVuY3Rpb24iIT10eXBlb2YgdC52ZXJ0ZXgmJmUoIk11c3Qgc3BlY2lmeSB2ZXJ0ZXggY3JlYXRpb24gZnVuY3Rpb24iKTsiZnVuY3Rpb24iIT10eXBlb2YgdC5jZWxsJiZlKCJNdXN0IHNwZWNpZnkgY2VsbCBjcmVhdGlvbiBmdW5jdGlvbiIpOyJmdW5jdGlvbiIhPXR5cGVvZiB0LnBoYXNlJiZlKCJNdXN0IHNwZWNpZnkgcGhhc2UgZnVuY3Rpb24iKTtmb3IodmFyIEU9dC5nZXR0ZXJzfHxbXSxDPW5ldyBBcnJheShUKSxMPTA7TDxUOysrTClFLmluZGV4T2YoTCk+PTA/Q1tMXT0hMDpDW0xdPSExO3JldHVybiBmdW5jdGlvbih0LGUscixULFMsRSl7dmFyIEM9RS5sZW5ndGgsTD1TLmxlbmd0aDtpZihMPDIpdGhyb3cgbmV3IEVycm9yKCJuZGFycmF5LWV4dHJhY3QtY29udG91cjogRGltZW5zaW9uIG11c3QgYmUgYXQgbGVhc3QgMiIpO2Zvcih2YXIgej0iZXh0cmFjdENvbnRvdXIiK1Muam9pbigiXyIpLFA9W10sST1bXSxPPVtdLEQ9MDtEPEM7KytEKU8ucHVzaChpKEQpKTtmb3IodmFyIEQ9MDtEPFQ7KytEKU8ucHVzaCh1KEQpKTtmb3IodmFyIEQ9MDtEPEw7KytEKUkucHVzaChzKEQpKyI9IitpKDApKyIuc2hhcGVbIitEKyJdfDAiKTtmb3IodmFyIEQ9MDtEPEM7KytEKXtJLnB1c2goYShEKSsiPSIraShEKSsiLmRhdGEiLGMoRCkrIj0iK2koRCkrIi5vZmZzZXR8MCIpO2Zvcih2YXIgUj0wO1I8TDsrK1IpSS5wdXNoKGwoRCxSKSsiPSIraShEKSsiLnN0cmlkZVsiK1IrIl18MCIpfWZvcih2YXIgRD0wO0Q8QzsrK0Qpe0kucHVzaChoKEQpKyI9IitjKEQpKSxJLnB1c2gobyhELDApKTtmb3IodmFyIFI9MTtSPDE8PEw7KytSKXtmb3IodmFyIEI9W10sRj0wO0Y8TDsrK0YpUiYxPDxGJiZCLnB1c2goIi0iK2woRCxGKSk7SS5wdXNoKGYoRCxSKSsiPSgiK0Iuam9pbigiIikrIil8MCIpLEkucHVzaChvKEQsUikrIj0wIil9fWZvcih2YXIgRD0wO0Q8QzsrK0QpZm9yKHZhciBSPTA7UjxMOysrUil7dmFyIE49W2woRCxTW1JdKV07Uj4wJiZOLnB1c2gobChELFNbUi0xXSkrIioiK3MoU1tSLTFdKSksSS5wdXNoKGQoRCxTW1JdKSsiPSgiK04uam9pbigiLSIpKyIpfDAiKX1mb3IodmFyIEQ9MDtEPEw7KytEKUkucHVzaChwKEQpKyI9MCIpO0kucHVzaChfKyI9MCIpO2Zvcih2YXIgaj1bIjIiXSxEPUwtMjtEPj0wOy0tRClqLnB1c2gocyhTW0RdKSk7SS5wdXNoKHcrIj0oIitqLmpvaW4oIioiKSsiKXwwIixiKyI9bWFsbG9jVWludDMyKCIrdysiKSIseCsiPW1hbGxvY1VpbnQzMigiK3crIikiLGsrIj0wIiksSS5wdXNoKGcoMCkrIj0wIik7Zm9yKHZhciBSPTE7UjwxPDxMOysrUil7Zm9yKHZhciBWPVtdLFU9W10sRj0wO0Y8TDsrK0YpUiYxPDxGJiYoMD09PVUubGVuZ3RoP1YucHVzaCgiMSIpOlYudW5zaGlmdChVLmpvaW4oIioiKSkpLFUucHVzaChzKFNbRl0pKTt2YXIgcT0iIjtWWzBdLmluZGV4T2YocyhTW0wtMl0pKTwwJiYocT0iLSIpO3ZhciBIPUEoTCxSLFMpO0kucHVzaCh2KEgpKyI9KC0iK1Yuam9pbigiLSIpKyIpfDAiLG0oSCkrIj0oIitxK1Yuam9pbigiLSIpKyIpfDAiLGcoSCkrIj0wIil9ZnVuY3Rpb24gRyh0LGUpe1AucHVzaCgiZm9yKCIscChTW3RdKSwiPSIsZSwiOyIscChTW3RdKSwiPCIscyhTW3RdKSwiOyIsIisrIixwKFNbdF0pLCIpeyIpfWZ1bmN0aW9uIFcodCl7Zm9yKHZhciBlPTA7ZTxDOysrZSlQLnB1c2goaChlKSwiKz0iLGQoZSxTW3RdKSwiOyIpO1AucHVzaCgifSIpfWZ1bmN0aW9uIFkoKXtmb3IodmFyIHQ9MTt0PDE8PEw7Kyt0KVAucHVzaChNLCI9Iix2KHQpLCI7Iix2KHQpLCI9IixtKHQpLCI7IixtKHQpLCI9IixNLCI7Iil9SS5wdXNoKHkoMCkrIj0wIixNKyI9MCIpLGZ1bmN0aW9uIHQoZSxyKXtpZihlPDApcmV0dXJuIHZvaWQgZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTxDOysrZSlFW2VdP1AucHVzaChvKGUsMCksIj0iLGEoZSksIi5nZXQoIixoKGUpLCIpOyIpOlAucHVzaChvKGUsMCksIj0iLGEoZSksIlsiLGgoZSksIl07Iik7Zm9yKHZhciByPVtdLGU9MDtlPEM7KytlKXIucHVzaChvKGUsMCkpO2Zvcih2YXIgZT0wO2U8VDsrK2Upci5wdXNoKHUoZSkpO1AucHVzaChnKDApLCI9IixiLCJbIixrLCJdPXBoYXNlKCIsci5qb2luKCksIik7Iik7Zm9yKHZhciBuPTE7bjwxPDxMOysrbilQLnB1c2goZyhuKSwiPSIsYiwiWyIsaywiKyIsdihuKSwiXTsiKTtmb3IodmFyIGk9W10sbj0xO248MTw8TDsrK24paS5wdXNoKCIoIitnKDApKyIhPT0iK2cobikrIikiKTtQLnB1c2goImlmKCIsaS5qb2luKCJ8fCIpLCIpeyIpO2Zvcih2YXIgcz1bXSxlPTA7ZTxMOysrZSlzLnB1c2gocChlKSk7Zm9yKHZhciBlPTA7ZTxDOysrZSl7cy5wdXNoKG8oZSwwKSk7Zm9yKHZhciBuPTE7bjwxPDxMOysrbilFW2VdP1AucHVzaChvKGUsbiksIj0iLGEoZSksIi5nZXQoIixoKGUpLCIrIixmKGUsbiksIik7Iik6UC5wdXNoKG8oZSxuKSwiPSIsYShlKSwiWyIsaChlKSwiKyIsZihlLG4pLCJdOyIpLHMucHVzaChvKGUsbikpfWZvcih2YXIgZT0wO2U8MTw8TDsrK2Upcy5wdXNoKGcoZSkpO2Zvcih2YXIgZT0wO2U8VDsrK2Upcy5wdXNoKHUoZSkpO1AucHVzaCgidmVydGV4KCIscy5qb2luKCksIik7Iix5KDApLCI9Iix4LCJbIixrLCJdPSIsXywiKys7Iik7Zm9yKHZhciBsPSgxPDxMKS0xLGM9ZyhsKSxuPTA7bjxMOysrbilpZigwPT0odCZ+KDE8PG4pKSl7Zm9yKHZhciBkPWxeMTw8bixtPWcoZCksdz1bXSxNPWQ7TT4wO009TS0xJmQpdy5wdXNoKHgrIlsiK2srIisiK3YoTSkrIl0iKTt3LnB1c2goeSgwKSk7Zm9yKHZhciBNPTA7TTxDOysrTSkxJm4/dy5wdXNoKG8oTSxsKSxvKE0sZCkpOncucHVzaChvKE0sZCksbyhNLGwpKTsxJm4/dy5wdXNoKGMsbSk6dy5wdXNoKG0sYyk7Zm9yKHZhciBNPTA7TTxUOysrTSl3LnB1c2godShNKSk7UC5wdXNoKCJpZigiLGMsIiE9PSIsbSwiKXsiLCJmYWNlKCIsdy5qb2luKCksIil9Iil9UC5wdXNoKCJ9IixrLCIrPTE7Iil9KHIpOyFmdW5jdGlvbih0KXtmb3IodmFyIGU9dC0xO2U+PTA7LS1lKUcoZSwwKTtmb3IodmFyIHI9W10sZT0wO2U8QzsrK2UpRVtlXT9yLnB1c2goYShlKSsiLmdldCgiK2goZSkrIikiKTpyLnB1c2goYShlKSsiWyIraChlKSsiXSIpO2Zvcih2YXIgZT0wO2U8VDsrK2Upci5wdXNoKHUoZSkpO1AucHVzaChiLCJbIixrLCIrK109cGhhc2UoIixyLmpvaW4oKSwiKTsiKTtmb3IodmFyIGU9MDtlPHQ7KytlKVcoZSk7Zm9yKHZhciBuPTA7bjxDOysrbilQLnB1c2goaChuKSwiKz0iLGQobixTW3RdKSwiOyIpfShlKTtQLnB1c2goImlmKCIscyhTW2VdKSwiPjApeyIscChTW2VdKSwiPTE7Iik7dChlLTEscnwxPDxTW2VdKTtmb3IodmFyIG49MDtuPEM7KytuKVAucHVzaChoKG4pLCIrPSIsZChuLFNbZV0pLCI7Iik7ZT09PUwtMSYmKFAucHVzaChrLCI9MDsiKSxZKCkpO0coZSwyKTt0KGUtMSxyKTtlPT09TC0xJiYoUC5wdXNoKCJpZigiLHAoU1tMLTFdKSwiJjEpeyIsaywiPTA7fSIpLFkoKSk7VyhlKTtQLnB1c2goIn0iKX0oTC0xLDApLFAucHVzaCgiZnJlZVVpbnQzMigiLHgsIik7ZnJlZVVpbnQzMigiLGIsIik7Iik7dmFyIFg9WyIndXNlIHN0cmljdCc7IiwiZnVuY3Rpb24gIix6LCIoIixPLmpvaW4oKSwiKXsiLCJ2YXIgIixJLmpvaW4oKSwiOyIsUC5qb2luKCIiKSwifSIsInJldHVybiAiLHpdLmpvaW4oIiIpO3JldHVybiBuZXcgRnVuY3Rpb24oInZlcnRleCIsImZhY2UiLCJwaGFzZSIsIm1hbGxvY1VpbnQzMiIsImZyZWVVaW50MzIiLFgpKHQsZSxyLG4ubWFsbG9jVWludDMyLG4uZnJlZVVpbnQzMil9KHQudmVydGV4LHQuY2VsbCx0LnBoYXNlLFMscixDKX07dmFyIHg9IlYiLGI9IlAiLF89Ik4iLHc9IlEiLGs9IlgiLE09IlQiO2Z1bmN0aW9uIEEodCxlLHIpe2Zvcih2YXIgbj0wLGk9MDtpPHQ7KytpKWUmMTw8aSYmKG58PTE8PHJbaV0pO3JldHVybiBufX0seyJ0eXBlZGFycmF5LXBvb2wiOjUwN31dLDQwNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJjd2lzZS9saWIvd3JhcHBlciIpKHthcmdzOlsiaW5kZXgiLCJhcnJheSIsInNjYWxhciJdLHByZTp7Ym9keToie30iLGFyZ3M6W10sdGhpc1ZhcnM6W10sbG9jYWxWYXJzOltdfSxib2R5Ontib2R5OiJ7X2lubGluZV8xX2FyZzFfPV9pbmxpbmVfMV9hcmcyXy5hcHBseSh2b2lkIDAsX2lubGluZV8xX2FyZzBfKX0iLGFyZ3M6W3tuYW1lOiJfaW5saW5lXzFfYXJnMF8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6Il9pbmxpbmVfMV9hcmcxXyIsbHZhbHVlOiEwLHJ2YWx1ZTohMSxjb3VudDoxfSx7bmFtZToiX2lubGluZV8xX2FyZzJfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9XSx0aGlzVmFyczpbXSxsb2NhbFZhcnM6W119LHBvc3Q6e2JvZHk6Int9IixhcmdzOltdLHRoaXNWYXJzOltdLGxvY2FsVmFyczpbXX0sZGVidWc6ITEsZnVuY05hbWU6ImN3aXNlIixibG9ja1NpemU6NjR9KTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbih0LGUpLHR9fSx7ImN3aXNlL2xpYi93cmFwcGVyIjoxMzZ9XSw0MDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtpZihBcnJheS5pc0FycmF5KHIpKXtpZihyLmxlbmd0aCE9PWUuZGltZW5zaW9uKXRocm93IG5ldyBFcnJvcigibmRhcnJheS1ncmFkaWVudDogaW52YWxpZCBib3VuZGFyeSBjb25kaXRpb25zIil9ZWxzZSByPW4oZS5kaW1lbnNpb24sInN0cmluZyI9PXR5cGVvZiByP3I6ImNsYW1wIik7aWYodC5kaW1lbnNpb24hPT1lLmRpbWVuc2lvbisxKXRocm93IG5ldyBFcnJvcigibmRhcnJheS1ncmFkaWVudDogb3V0cHV0IGRpbWVuc2lvbiBtdXN0IGJlICsxIGlucHV0IGRpbWVuc2lvbiIpO2lmKHQuc2hhcGVbZS5kaW1lbnNpb25dIT09ZS5kaW1lbnNpb24pdGhyb3cgbmV3IEVycm9yKCJuZGFycmF5LWdyYWRpZW50OiBvdXRwdXQgc2hhcGUgbXVzdCBtYXRjaCBpbnB1dCBzaGFwZSIpO2Zvcih2YXIgaT0wO2k8ZS5kaW1lbnNpb247KytpKWlmKHQuc2hhcGVbaV0hPT1lLnNoYXBlW2ldKXRocm93IG5ldyBFcnJvcigibmRhcnJheS1ncmFkaWVudDogc2hhcGUgbWlzbWF0Y2giKTtpZigwPT09ZS5zaXplKXJldHVybiB0O2lmKGUuZGltZW5zaW9uPD0wKXJldHVybiB0LnNldCgwKSx0O3JldHVybiBmdW5jdGlvbih0KXt2YXIgZT10LmpvaW4oKTtpZih2PW9bZV0pcmV0dXJuIHY7dmFyIHI9dC5sZW5ndGgsbj1bImZ1bmN0aW9uIGdyYWRpZW50KGRzdCxzcmMpe3ZhciBzPXNyYy5zaGFwZS5zbGljZSgpOyJdO2Z1bmN0aW9uIGkoZSl7Zm9yKHZhciBpPXItZS5sZW5ndGgsYT1bXSxvPVtdLHM9W10sbD0wO2w8cjsrK2wpZS5pbmRleE9mKGwrMSk+PTA/cy5wdXNoKCIwIik6ZS5pbmRleE9mKC0obCsxKSk+PTA/cy5wdXNoKCJzWyIrbCsiXS0xIik6KHMucHVzaCgiLTEiKSxhLnB1c2goIjEiKSxvLnB1c2goInNbIitsKyJdLTIiKSk7dmFyIGM9Ii5sbygiK2Euam9pbigpKyIpLmhpKCIrby5qb2luKCkrIikiO2lmKDA9PT1hLmxlbmd0aCYmKGM9IiIpLGk+MCl7bi5wdXNoKCJpZigxIik7Zm9yKHZhciBsPTA7bDxyOysrbCllLmluZGV4T2YobCsxKT49MHx8ZS5pbmRleE9mKC0obCsxKSk+PTB8fG4ucHVzaCgiJiZzWyIsbCwiXT4yIik7bi5wdXNoKCIpe2dyYWQiLGksIihzcmMucGljaygiLHMuam9pbigpLCIpIixjKTtmb3IodmFyIGw9MDtsPHI7KytsKWUuaW5kZXhPZihsKzEpPj0wfHxlLmluZGV4T2YoLShsKzEpKT49MHx8bi5wdXNoKCIsZHN0LnBpY2soIixzLmpvaW4oKSwiLCIsbCwiKSIsYyk7bi5wdXNoKCIpOyIpfWZvcih2YXIgbD0wO2w8ZS5sZW5ndGg7KytsKXt2YXIgdT1NYXRoLmFicyhlW2xdKS0xLGg9ImRzdC5waWNrKCIrcy5qb2luKCkrIiwiK3UrIikiK2M7c3dpdGNoKHRbdV0pe2Nhc2UiY2xhbXAiOnZhciBmPXMuc2xpY2UoKSxwPXMuc2xpY2UoKTtlW2xdPDA/Zlt1XT0ic1siK3UrIl0tMiI6cFt1XT0iMSIsMD09PWk/bi5wdXNoKCJpZihzWyIsdSwiXT4xKXtkc3Quc2V0KCIscy5qb2luKCksIiwiLHUsIiwwLjUqKHNyYy5nZXQoIixmLmpvaW4oKSwiKS1zcmMuZ2V0KCIscC5qb2luKCksIikpKX1lbHNle2RzdC5zZXQoIixzLmpvaW4oKSwiLCIsdSwiLDApfTsiKTpuLnB1c2goImlmKHNbIix1LCJdPjEpe2RpZmYoIixoLCIsc3JjLnBpY2soIixmLmpvaW4oKSwiKSIsYywiLHNyYy5waWNrKCIscC5qb2luKCksIikiLGMsIik7fWVsc2V7emVybygiLGgsIik7fTsiKTticmVhaztjYXNlIm1pcnJvciI6MD09PWk/bi5wdXNoKCJkc3Quc2V0KCIscy5qb2luKCksIiwiLHUsIiwwKTsiKTpuLnB1c2goInplcm8oIixoLCIpOyIpO2JyZWFrO2Nhc2Uid3JhcCI6dmFyIGQ9cy5zbGljZSgpLGc9cy5zbGljZSgpO2VbbF08MD8oZFt1XT0ic1siK3UrIl0tMiIsZ1t1XT0iMCIpOihkW3VdPSJzWyIrdSsiXS0xIixnW3VdPSIxIiksMD09PWk/bi5wdXNoKCJpZihzWyIsdSwiXT4yKXtkc3Quc2V0KCIscy5qb2luKCksIiwiLHUsIiwwLjUqKHNyYy5nZXQoIixkLmpvaW4oKSwiKS1zcmMuZ2V0KCIsZy5qb2luKCksIikpKX1lbHNle2RzdC5zZXQoIixzLmpvaW4oKSwiLCIsdSwiLDApfTsiKTpuLnB1c2goImlmKHNbIix1LCJdPjIpe2RpZmYoIixoLCIsc3JjLnBpY2soIixkLmpvaW4oKSwiKSIsYywiLHNyYy5waWNrKCIsZy5qb2luKCksIikiLGMsIik7fWVsc2V7emVybygiLGgsIik7fTsiKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigibmRhcnJheS1ncmFkaWVudDogSW52YWxpZCBib3VuZGFyeSBjb25kaXRpb24iKX19aT4wJiZuLnB1c2goIn07Iil9Zm9yKHZhciBzPTA7czwxPDxyOysrcyl7Zm9yKHZhciBoPVtdLGY9MDtmPHI7KytmKXMmMTw8ZiYmaC5wdXNoKGYrMSk7Zm9yKHZhciBwPTA7cDwxPDxoLmxlbmd0aDsrK3Ape2Zvcih2YXIgZD1oLnNsaWNlKCksZj0wO2Y8aC5sZW5ndGg7KytmKXAmMTw8ZiYmKGRbZl09LWRbZl0pO2koZCl9fW4ucHVzaCgicmV0dXJuIGRzdDt9O3JldHVybiBncmFkaWVudCIpO2Zvcih2YXIgZz1bImRpZmYiLCJ6ZXJvIl0sbT1bbCxjXSxzPTE7czw9cjsrK3MpZy5wdXNoKCJncmFkIitzKSxtLnB1c2godShzKSk7Zy5wdXNoKG4uam9pbigiIikpO3ZhciB2PUZ1bmN0aW9uLmFwcGx5KHZvaWQgMCxnKS5hcHBseSh2b2lkIDAsbSk7cmV0dXJuIGFbZV09dix2fShyKSh0LGUpfTt2YXIgbj10KCJkdXAiKSxpPXQoImN3aXNlLWNvbXBpbGVyIiksYT17fSxvPXt9LHM9e2JvZHk6IiIsYXJnczpbXSx0aGlzVmFyczpbXSxsb2NhbFZhcnM6W119LGw9aSh7YXJnczpbImFycmF5IiwiYXJyYXkiLCJhcnJheSJdLHByZTpzLHBvc3Q6cyxib2R5OnthcmdzOlt7bmFtZToib3V0IixsdmFsdWU6ITAscnZhbHVlOiExLGNvdW50OjF9LHtuYW1lOiJsZWZ0IixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9LHtuYW1lOiJyaWdodCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfV0sYm9keToib3V0PTAuNSoobGVmdC1yaWdodCkiLHRoaXNWYXJzOltdLGxvY2FsVmFyczpbXX0sZnVuY05hbWU6ImNkaWZmIn0pLGM9aSh7YXJnczpbImFycmF5Il0scHJlOnMscG9zdDpzLGJvZHk6e2FyZ3M6W3tuYW1lOiJvdXQiLGx2YWx1ZTohMCxydmFsdWU6ITEsY291bnQ6MX1dLGJvZHk6Im91dD0wIix0aGlzVmFyczpbXSxsb2NhbFZhcnM6W119LGZ1bmNOYW1lOiJ6ZXJvIn0pO2Z1bmN0aW9uIHUodCl7aWYodCBpbiBhKXJldHVybiBhW3RdO2Zvcih2YXIgZT1bXSxyPTA7cjx0OysrcillLnB1c2goIm91dCIsciwicz0wLjUqKGlucCIsciwibC1pbnAiLHIsInIpOyIpO3ZhciBvPVsiYXJyYXkiXSxsPVsianVuayJdO2ZvcihyPTA7cjx0Oysrcil7by5wdXNoKCJhcnJheSIpLGwucHVzaCgib3V0IityKyJzIik7dmFyIGM9bih0KTtjW3JdPS0xLG8ucHVzaCh7YXJyYXk6MCxvZmZzZXQ6Yy5zbGljZSgpfSksY1tyXT0xLG8ucHVzaCh7YXJyYXk6MCxvZmZzZXQ6Yy5zbGljZSgpfSksbC5wdXNoKCJpbnAiK3IrImwiLCJpbnAiK3IrInIiKX1yZXR1cm4gYVt0XT1pKHthcmdzOm8scHJlOnMscG9zdDpzLGJvZHk6e2JvZHk6ZS5qb2luKCIiKSxhcmdzOmwubWFwKGZ1bmN0aW9uKHQpe3JldHVybntuYW1lOnQsbHZhbHVlOjA9PT10LmluZGV4T2YoIm91dCIpLHJ2YWx1ZTowPT09dC5pbmRleE9mKCJpbnAiKSxjb3VudDoianVuayIhPT10fDB9fSksdGhpc1ZhcnM6W10sbG9jYWxWYXJzOltdfSxmdW5jTmFtZToiZmRUZW1wbGF0ZSIrdH0pfX0seyJjd2lzZS1jb21waWxlciI6MTMzLGR1cDoxNTR9XSw0MDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgibmRhcnJheS13YXJwIiksaT10KCJnbC1tYXRyaXgtaW52ZXJ0Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgYT1lLmRpbWVuc2lvbixvPWkoW10scik7cmV0dXJuIG4odCxlLGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTA7cjxhOysrcil7dFtyXT1vWyhhKzEpKmErcl07Zm9yKHZhciBuPTA7bjxhOysrbil0W3JdKz1vWyhhKzEpKm4rcl0qZVtuXX12YXIgaT1vWyhhKzEpKihhKzEpLTFdO2ZvcihuPTA7bjxhOysrbilpKz1vWyhhKzEpKm4rYV0qZVtuXTt2YXIgcz0xL2k7Zm9yKHI9MDtyPGE7KytyKXRbcl0qPXM7cmV0dXJuIHR9KSx0fX0seyJnbC1tYXRyaXgtaW52ZXJ0IjoyNjUsIm5kYXJyYXktd2FycCI6NDE2fV0sNDEwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt2YXIgcj1NYXRoLmZsb29yKGUpLG49ZS1yLGk9MDw9ciYmcjx0LnNoYXBlWzBdLGE9MDw9cisxJiZyKzE8dC5zaGFwZVswXTtyZXR1cm4oMS1uKSooaT8rdC5nZXQocik6MCkrbiooYT8rdC5nZXQocisxKTowKX1mdW5jdGlvbiBpKHQsZSxyKXt2YXIgbj1NYXRoLmZsb29yKGUpLGk9ZS1uLGE9MDw9biYmbjx0LnNoYXBlWzBdLG89MDw9bisxJiZuKzE8dC5zaGFwZVswXSxzPU1hdGguZmxvb3IociksbD1yLXMsYz0wPD1zJiZzPHQuc2hhcGVbMV0sdT0wPD1zKzEmJnMrMTx0LnNoYXBlWzFdLGg9YSYmYz90LmdldChuLHMpOjAsZj1hJiZ1P3QuZ2V0KG4scysxKTowO3JldHVybigxLWwpKigoMS1pKSpoK2kqKG8mJmM/dC5nZXQobisxLHMpOjApKStsKigoMS1pKSpmK2kqKG8mJnU/dC5nZXQobisxLHMrMSk6MCkpfWZ1bmN0aW9uIGEodCxlLHIsbil7dmFyIGk9TWF0aC5mbG9vcihlKSxhPWUtaSxvPTA8PWkmJmk8dC5zaGFwZVswXSxzPTA8PWkrMSYmaSsxPHQuc2hhcGVbMF0sbD1NYXRoLmZsb29yKHIpLGM9ci1sLHU9MDw9bCYmbDx0LnNoYXBlWzFdLGg9MDw9bCsxJiZsKzE8dC5zaGFwZVsxXSxmPU1hdGguZmxvb3IobikscD1uLWYsZD0wPD1mJiZmPHQuc2hhcGVbMl0sZz0wPD1mKzEmJmYrMTx0LnNoYXBlWzJdLG09byYmdSYmZD90LmdldChpLGwsZik6MCx2PW8mJmgmJmQ/dC5nZXQoaSxsKzEsZik6MCx5PXMmJnUmJmQ/dC5nZXQoaSsxLGwsZik6MCx4PXMmJmgmJmQ/dC5nZXQoaSsxLGwrMSxmKTowLGI9byYmdSYmZz90LmdldChpLGwsZisxKTowLF89byYmaCYmZz90LmdldChpLGwrMSxmKzEpOjA7cmV0dXJuKDEtcCkqKCgxLWMpKigoMS1hKSptK2EqeSkrYyooKDEtYSkqdithKngpKStwKigoMS1jKSooKDEtYSkqYithKihzJiZ1JiZnP3QuZ2V0KGkrMSxsLGYrMSk6MCkpK2MqKCgxLWEpKl8rYSoocyYmaCYmZz90LmdldChpKzEsbCsxLGYrMSk6MCkpKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyl7c3dpdGNoKHQuc2hhcGUubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIDA7Y2FzZSAxOnJldHVybiBuKHQsZSk7Y2FzZSAyOnJldHVybiBpKHQsZSxyKTtjYXNlIDM6cmV0dXJuIGEodCxlLHIsbyk7ZGVmYXVsdDpyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGUscixuPTB8dC5zaGFwZS5sZW5ndGgsaT1uZXcgQXJyYXkobiksYT1uZXcgQXJyYXkobiksbz1uZXcgQXJyYXkobikscz1uZXcgQXJyYXkobik7Zm9yKGU9MDtlPG47KytlKXI9K2FyZ3VtZW50c1tlKzFdLGlbZV09TWF0aC5mbG9vcihyKSxhW2VdPXItaVtlXSxvW2VdPTA8PWlbZV0mJmlbZV08dC5zaGFwZVtlXSxzW2VdPTA8PWlbZV0rMSYmaVtlXSsxPHQuc2hhcGVbZV07dmFyIGwsYyx1LGg9MDt0OmZvcihlPTA7ZTwxPDxuOysrZSl7Zm9yKGM9MSx1PXQub2Zmc2V0LGw9MDtsPG47KytsKWlmKGUmMTw8bCl7aWYoIXNbbF0pY29udGludWUgdDtjKj1hW2xdLHUrPXQuc3RyaWRlW2xdKihpW2xdKzEpfWVsc2V7aWYoIW9bbF0pY29udGludWUgdDtjKj0xLWFbbF0sdSs9dC5zdHJpZGVbbF0qaVtsXX1oKz1jKnQuZGF0YVt1XX1yZXR1cm4gaH0uYXBwbHkodm9pZCAwLGFyZ3VtZW50cyl9fSxlLmV4cG9ydHMuZDE9bixlLmV4cG9ydHMuZDI9aSxlLmV4cG9ydHMuZDM9YX0se31dLDQxMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJjd2lzZS1jb21waWxlciIpLGk9e2JvZHk6IiIsYXJnczpbXSx0aGlzVmFyczpbXSxsb2NhbFZhcnM6W119O2Z1bmN0aW9uIGEodCl7aWYoIXQpcmV0dXJuIGk7Zm9yKHZhciBlPTA7ZTx0LmFyZ3MubGVuZ3RoOysrZSl7dmFyIHI9dC5hcmdzW2VdO3QuYXJnc1tlXT0wPT09ZT97bmFtZTpyLGx2YWx1ZTohMCxydmFsdWU6ISF0LnJ2YWx1ZSxjb3VudDp0LmNvdW50fHwxfTp7bmFtZTpyLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX19cmV0dXJuIHQudGhpc1ZhcnN8fCh0LnRoaXNWYXJzPVtdKSx0LmxvY2FsVmFyc3x8KHQubG9jYWxWYXJzPVtdKSx0fWZ1bmN0aW9uIG8odCl7Zm9yKHZhciBlPVtdLHI9MDtyPHQuYXJncy5sZW5ndGg7KytyKWUucHVzaCgiYSIrcik7cmV0dXJuIG5ldyBGdW5jdGlvbigiUCIsWyJyZXR1cm4gZnVuY3Rpb24gIix0LmZ1bmNOYW1lLCJfbmRhcnJheW9wcygiLGUuam9pbigiLCIpLCIpIHtQKCIsZS5qb2luKCIsIiksIik7cmV0dXJuIGEwfSJdLmpvaW4oIiIpKShmdW5jdGlvbih0KXtyZXR1cm4gbih7YXJnczp0LmFyZ3MscHJlOmEodC5wcmUpLGJvZHk6YSh0LmJvZHkpLHBvc3Q6YSh0LnByb2MpLGZ1bmNOYW1lOnQuZnVuY05hbWV9KX0odCkpfXZhciBzPXthZGQ6IisiLHN1YjoiLSIsbXVsOiIqIixkaXY6Ii8iLG1vZDoiJSIsYmFuZDoiJiIsYm9yOiJ8IixieG9yOiJeIixsc2hpZnQ6Ijw8Iixyc2hpZnQ6Ij4+IixycnNoaWZ0OiI+Pj4ifTshZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gcyl7dmFyIGU9c1t0XTtyW3RdPW8oe2FyZ3M6WyJhcnJheSIsImFycmF5IiwiYXJyYXkiXSxib2R5OnthcmdzOlsiYSIsImIiLCJjIl0sYm9keToiYT1iIitlKyJjIn0sZnVuY05hbWU6dH0pLHJbdCsiZXEiXT1vKHthcmdzOlsiYXJyYXkiLCJhcnJheSJdLGJvZHk6e2FyZ3M6WyJhIiwiYiJdLGJvZHk6ImEiK2UrIj1iIn0scnZhbHVlOiEwLGZ1bmNOYW1lOnQrImVxIn0pLHJbdCsicyJdPW8oe2FyZ3M6WyJhcnJheSIsImFycmF5Iiwic2NhbGFyIl0sYm9keTp7YXJnczpbImEiLCJiIiwicyJdLGJvZHk6ImE9YiIrZSsicyJ9LGZ1bmNOYW1lOnQrInMifSksclt0KyJzZXEiXT1vKHthcmdzOlsiYXJyYXkiLCJzY2FsYXIiXSxib2R5OnthcmdzOlsiYSIsInMiXSxib2R5OiJhIitlKyI9cyJ9LHJ2YWx1ZTohMCxmdW5jTmFtZTp0KyJzZXEifSl9fSgpO3ZhciBsPXtub3Q6IiEiLGJub3Q6In4iLG5lZzoiLSIscmVjaXA6IjEuMC8ifTshZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gbCl7dmFyIGU9bFt0XTtyW3RdPW8oe2FyZ3M6WyJhcnJheSIsImFycmF5Il0sYm9keTp7YXJnczpbImEiLCJiIl0sYm9keToiYT0iK2UrImIifSxmdW5jTmFtZTp0fSksclt0KyJlcSJdPW8oe2FyZ3M6WyJhcnJheSJdLGJvZHk6e2FyZ3M6WyJhIl0sYm9keToiYT0iK2UrImEifSxydmFsdWU6ITAsY291bnQ6MixmdW5jTmFtZTp0KyJlcSJ9KX19KCk7dmFyIGM9e2FuZDoiJiYiLG9yOiJ8fCIsZXE6Ij09PSIsbmVxOiIhPT0iLGx0OiI8IixndDoiPiIsbGVxOiI8PSIsZ2VxOiI+PSJ9OyFmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiBjKXt2YXIgZT1jW3RdO3JbdF09byh7YXJnczpbImFycmF5IiwiYXJyYXkiLCJhcnJheSJdLGJvZHk6e2FyZ3M6WyJhIiwiYiIsImMiXSxib2R5OiJhPWIiK2UrImMifSxmdW5jTmFtZTp0fSksclt0KyJzIl09byh7YXJnczpbImFycmF5IiwiYXJyYXkiLCJzY2FsYXIiXSxib2R5OnthcmdzOlsiYSIsImIiLCJzIl0sYm9keToiYT1iIitlKyJzIn0sZnVuY05hbWU6dCsicyJ9KSxyW3QrImVxIl09byh7YXJnczpbImFycmF5IiwiYXJyYXkiXSxib2R5OnthcmdzOlsiYSIsImIiXSxib2R5OiJhPWEiK2UrImIifSxydmFsdWU6ITAsY291bnQ6MixmdW5jTmFtZTp0KyJlcSJ9KSxyW3QrInNlcSJdPW8oe2FyZ3M6WyJhcnJheSIsInNjYWxhciJdLGJvZHk6e2FyZ3M6WyJhIiwicyJdLGJvZHk6ImE9YSIrZSsicyJ9LHJ2YWx1ZTohMCxjb3VudDoyLGZ1bmNOYW1lOnQrInNlcSJ9KX19KCk7dmFyIHU9WyJhYnMiLCJhY29zIiwiYXNpbiIsImF0YW4iLCJjZWlsIiwiY29zIiwiZXhwIiwiZmxvb3IiLCJsb2ciLCJyb3VuZCIsInNpbiIsInNxcnQiLCJ0YW4iXTshZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PHUubGVuZ3RoOysrdCl7dmFyIGU9dVt0XTtyW2VdPW8oe2FyZ3M6WyJhcnJheSIsImFycmF5Il0scHJlOnthcmdzOltdLGJvZHk6InRoaXNfZj1NYXRoLiIrZSx0aGlzVmFyczpbInRoaXNfZiJdfSxib2R5OnthcmdzOlsiYSIsImIiXSxib2R5OiJhPXRoaXNfZihiKSIsdGhpc1ZhcnM6WyJ0aGlzX2YiXX0sZnVuY05hbWU6ZX0pLHJbZSsiZXEiXT1vKHthcmdzOlsiYXJyYXkiXSxwcmU6e2FyZ3M6W10sYm9keToidGhpc19mPU1hdGguIitlLHRoaXNWYXJzOlsidGhpc19mIl19LGJvZHk6e2FyZ3M6WyJhIl0sYm9keToiYT10aGlzX2YoYSkiLHRoaXNWYXJzOlsidGhpc19mIl19LHJ2YWx1ZTohMCxjb3VudDoyLGZ1bmNOYW1lOmUrImVxIn0pfX0oKTt2YXIgaD1bIm1heCIsIm1pbiIsImF0YW4yIiwicG93Il07IWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTA7dDxoLmxlbmd0aDsrK3Qpe3ZhciBlPWhbdF07cltlXT1vKHthcmdzOlsiYXJyYXkiLCJhcnJheSIsImFycmF5Il0scHJlOnthcmdzOltdLGJvZHk6InRoaXNfZj1NYXRoLiIrZSx0aGlzVmFyczpbInRoaXNfZiJdfSxib2R5OnthcmdzOlsiYSIsImIiLCJjIl0sYm9keToiYT10aGlzX2YoYixjKSIsdGhpc1ZhcnM6WyJ0aGlzX2YiXX0sZnVuY05hbWU6ZX0pLHJbZSsicyJdPW8oe2FyZ3M6WyJhcnJheSIsImFycmF5Iiwic2NhbGFyIl0scHJlOnthcmdzOltdLGJvZHk6InRoaXNfZj1NYXRoLiIrZSx0aGlzVmFyczpbInRoaXNfZiJdfSxib2R5OnthcmdzOlsiYSIsImIiLCJjIl0sYm9keToiYT10aGlzX2YoYixjKSIsdGhpc1ZhcnM6WyJ0aGlzX2YiXX0sZnVuY05hbWU6ZSsicyJ9KSxyW2UrImVxIl09byh7YXJnczpbImFycmF5IiwiYXJyYXkiXSxwcmU6e2FyZ3M6W10sYm9keToidGhpc19mPU1hdGguIitlLHRoaXNWYXJzOlsidGhpc19mIl19LGJvZHk6e2FyZ3M6WyJhIiwiYiJdLGJvZHk6ImE9dGhpc19mKGEsYikiLHRoaXNWYXJzOlsidGhpc19mIl19LHJ2YWx1ZTohMCxjb3VudDoyLGZ1bmNOYW1lOmUrImVxIn0pLHJbZSsic2VxIl09byh7YXJnczpbImFycmF5Iiwic2NhbGFyIl0scHJlOnthcmdzOltdLGJvZHk6InRoaXNfZj1NYXRoLiIrZSx0aGlzVmFyczpbInRoaXNfZiJdfSxib2R5OnthcmdzOlsiYSIsImIiXSxib2R5OiJhPXRoaXNfZihhLGIpIix0aGlzVmFyczpbInRoaXNfZiJdfSxydmFsdWU6ITAsY291bnQ6MixmdW5jTmFtZTplKyJzZXEifSl9fSgpO3ZhciBmPVsiYXRhbjIiLCJwb3ciXTshZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PGYubGVuZ3RoOysrdCl7dmFyIGU9Zlt0XTtyW2UrIm9wIl09byh7YXJnczpbImFycmF5IiwiYXJyYXkiLCJhcnJheSJdLHByZTp7YXJnczpbXSxib2R5OiJ0aGlzX2Y9TWF0aC4iK2UsdGhpc1ZhcnM6WyJ0aGlzX2YiXX0sYm9keTp7YXJnczpbImEiLCJiIiwiYyJdLGJvZHk6ImE9dGhpc19mKGMsYikiLHRoaXNWYXJzOlsidGhpc19mIl19LGZ1bmNOYW1lOmUrIm9wIn0pLHJbZSsib3BzIl09byh7YXJnczpbImFycmF5IiwiYXJyYXkiLCJzY2FsYXIiXSxwcmU6e2FyZ3M6W10sYm9keToidGhpc19mPU1hdGguIitlLHRoaXNWYXJzOlsidGhpc19mIl19LGJvZHk6e2FyZ3M6WyJhIiwiYiIsImMiXSxib2R5OiJhPXRoaXNfZihjLGIpIix0aGlzVmFyczpbInRoaXNfZiJdfSxmdW5jTmFtZTplKyJvcHMifSkscltlKyJvcGVxIl09byh7YXJnczpbImFycmF5IiwiYXJyYXkiXSxwcmU6e2FyZ3M6W10sYm9keToidGhpc19mPU1hdGguIitlLHRoaXNWYXJzOlsidGhpc19mIl19LGJvZHk6e2FyZ3M6WyJhIiwiYiJdLGJvZHk6ImE9dGhpc19mKGIsYSkiLHRoaXNWYXJzOlsidGhpc19mIl19LHJ2YWx1ZTohMCxjb3VudDoyLGZ1bmNOYW1lOmUrIm9wZXEifSkscltlKyJvcHNlcSJdPW8oe2FyZ3M6WyJhcnJheSIsInNjYWxhciJdLHByZTp7YXJnczpbXSxib2R5OiJ0aGlzX2Y9TWF0aC4iK2UsdGhpc1ZhcnM6WyJ0aGlzX2YiXX0sYm9keTp7YXJnczpbImEiLCJiIl0sYm9keToiYT10aGlzX2YoYixhKSIsdGhpc1ZhcnM6WyJ0aGlzX2YiXX0scnZhbHVlOiEwLGNvdW50OjIsZnVuY05hbWU6ZSsib3BzZXEifSl9fSgpLHIuYW55PW4oe2FyZ3M6WyJhcnJheSJdLHByZTppLGJvZHk6e2FyZ3M6W3tuYW1lOiJhIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9XSxib2R5OiJpZihhKXtyZXR1cm4gdHJ1ZX0iLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbXX0scG9zdDp7YXJnczpbXSxsb2NhbFZhcnM6W10sdGhpc1ZhcnM6W10sYm9keToicmV0dXJuIGZhbHNlIn0sZnVuY05hbWU6ImFueSJ9KSxyLmFsbD1uKHthcmdzOlsiYXJyYXkiXSxwcmU6aSxib2R5OnthcmdzOlt7bmFtZToieCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfV0sYm9keToiaWYoIXgpe3JldHVybiBmYWxzZX0iLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbXX0scG9zdDp7YXJnczpbXSxsb2NhbFZhcnM6W10sdGhpc1ZhcnM6W10sYm9keToicmV0dXJuIHRydWUifSxmdW5jTmFtZToiYWxsIn0pLHIuc3VtPW4oe2FyZ3M6WyJhcnJheSJdLHByZTp7YXJnczpbXSxsb2NhbFZhcnM6W10sdGhpc1ZhcnM6WyJ0aGlzX3MiXSxib2R5OiJ0aGlzX3M9MCJ9LGJvZHk6e2FyZ3M6W3tuYW1lOiJhIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9XSxib2R5OiJ0aGlzX3MrPWEiLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbInRoaXNfcyJdfSxwb3N0OnthcmdzOltdLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbInRoaXNfcyJdLGJvZHk6InJldHVybiB0aGlzX3MifSxmdW5jTmFtZToic3VtIn0pLHIucHJvZD1uKHthcmdzOlsiYXJyYXkiXSxwcmU6e2FyZ3M6W10sbG9jYWxWYXJzOltdLHRoaXNWYXJzOlsidGhpc19zIl0sYm9keToidGhpc19zPTEifSxib2R5OnthcmdzOlt7bmFtZToiYSIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfV0sYm9keToidGhpc19zKj1hIixsb2NhbFZhcnM6W10sdGhpc1ZhcnM6WyJ0aGlzX3MiXX0scG9zdDp7YXJnczpbXSxsb2NhbFZhcnM6W10sdGhpc1ZhcnM6WyJ0aGlzX3MiXSxib2R5OiJyZXR1cm4gdGhpc19zIn0sZnVuY05hbWU6InByb2QifSksci5ub3JtMnNxdWFyZWQ9bih7YXJnczpbImFycmF5Il0scHJlOnthcmdzOltdLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbInRoaXNfcyJdLGJvZHk6InRoaXNfcz0wIn0sYm9keTp7YXJnczpbe25hbWU6ImEiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6Mn1dLGJvZHk6InRoaXNfcys9YSphIixsb2NhbFZhcnM6W10sdGhpc1ZhcnM6WyJ0aGlzX3MiXX0scG9zdDp7YXJnczpbXSxsb2NhbFZhcnM6W10sdGhpc1ZhcnM6WyJ0aGlzX3MiXSxib2R5OiJyZXR1cm4gdGhpc19zIn0sZnVuY05hbWU6Im5vcm0yc3F1YXJlZCJ9KSxyLm5vcm0yPW4oe2FyZ3M6WyJhcnJheSJdLHByZTp7YXJnczpbXSxsb2NhbFZhcnM6W10sdGhpc1ZhcnM6WyJ0aGlzX3MiXSxib2R5OiJ0aGlzX3M9MCJ9LGJvZHk6e2FyZ3M6W3tuYW1lOiJhIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjJ9XSxib2R5OiJ0aGlzX3MrPWEqYSIsbG9jYWxWYXJzOltdLHRoaXNWYXJzOlsidGhpc19zIl19LHBvc3Q6e2FyZ3M6W10sbG9jYWxWYXJzOltdLHRoaXNWYXJzOlsidGhpc19zIl0sYm9keToicmV0dXJuIE1hdGguc3FydCh0aGlzX3MpIn0sZnVuY05hbWU6Im5vcm0yIn0pLHIubm9ybWluZj1uKHthcmdzOlsiYXJyYXkiXSxwcmU6e2FyZ3M6W10sbG9jYWxWYXJzOltdLHRoaXNWYXJzOlsidGhpc19zIl0sYm9keToidGhpc19zPTAifSxib2R5OnthcmdzOlt7bmFtZToiYSIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDo0fV0sYm9keToiaWYoLWE+dGhpc19zKXt0aGlzX3M9LWF9ZWxzZSBpZihhPnRoaXNfcyl7dGhpc19zPWF9Iixsb2NhbFZhcnM6W10sdGhpc1ZhcnM6WyJ0aGlzX3MiXX0scG9zdDp7YXJnczpbXSxsb2NhbFZhcnM6W10sdGhpc1ZhcnM6WyJ0aGlzX3MiXSxib2R5OiJyZXR1cm4gdGhpc19zIn0sZnVuY05hbWU6Im5vcm1pbmYifSksci5ub3JtMT1uKHthcmdzOlsiYXJyYXkiXSxwcmU6e2FyZ3M6W10sbG9jYWxWYXJzOltdLHRoaXNWYXJzOlsidGhpc19zIl0sYm9keToidGhpc19zPTAifSxib2R5OnthcmdzOlt7bmFtZToiYSIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDozfV0sYm9keToidGhpc19zKz1hPDA/LWE6YSIsbG9jYWxWYXJzOltdLHRoaXNWYXJzOlsidGhpc19zIl19LHBvc3Q6e2FyZ3M6W10sbG9jYWxWYXJzOltdLHRoaXNWYXJzOlsidGhpc19zIl0sYm9keToicmV0dXJuIHRoaXNfcyJ9LGZ1bmNOYW1lOiJub3JtMSJ9KSxyLnN1cD1uKHthcmdzOlsiYXJyYXkiXSxwcmU6e2JvZHk6InRoaXNfaD0tSW5maW5pdHkiLGFyZ3M6W10sdGhpc1ZhcnM6WyJ0aGlzX2giXSxsb2NhbFZhcnM6W119LGJvZHk6e2JvZHk6ImlmKF9pbmxpbmVfMV9hcmcwXz50aGlzX2gpdGhpc19oPV9pbmxpbmVfMV9hcmcwXyIsYXJnczpbe25hbWU6Il9pbmxpbmVfMV9hcmcwXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoyfV0sdGhpc1ZhcnM6WyJ0aGlzX2giXSxsb2NhbFZhcnM6W119LHBvc3Q6e2JvZHk6InJldHVybiB0aGlzX2giLGFyZ3M6W10sdGhpc1ZhcnM6WyJ0aGlzX2giXSxsb2NhbFZhcnM6W119fSksci5pbmY9bih7YXJnczpbImFycmF5Il0scHJlOntib2R5OiJ0aGlzX2g9SW5maW5pdHkiLGFyZ3M6W10sdGhpc1ZhcnM6WyJ0aGlzX2giXSxsb2NhbFZhcnM6W119LGJvZHk6e2JvZHk6ImlmKF9pbmxpbmVfMV9hcmcwXzx0aGlzX2gpdGhpc19oPV9pbmxpbmVfMV9hcmcwXyIsYXJnczpbe25hbWU6Il9pbmxpbmVfMV9hcmcwXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoyfV0sdGhpc1ZhcnM6WyJ0aGlzX2giXSxsb2NhbFZhcnM6W119LHBvc3Q6e2JvZHk6InJldHVybiB0aGlzX2giLGFyZ3M6W10sdGhpc1ZhcnM6WyJ0aGlzX2giXSxsb2NhbFZhcnM6W119fSksci5hcmdtaW49bih7YXJnczpbImluZGV4IiwiYXJyYXkiLCJzaGFwZSJdLHByZTp7Ym9keToie3RoaXNfdj1JbmZpbml0eTt0aGlzX2k9X2lubGluZV8wX2FyZzJfLnNsaWNlKDApfSIsYXJnczpbe25hbWU6Il9pbmxpbmVfMF9hcmcwXyIsbHZhbHVlOiExLHJ2YWx1ZTohMSxjb3VudDowfSx7bmFtZToiX2lubGluZV8wX2FyZzFfIixsdmFsdWU6ITEscnZhbHVlOiExLGNvdW50OjB9LHtuYW1lOiJfaW5saW5lXzBfYXJnMl8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX1dLHRoaXNWYXJzOlsidGhpc19pIiwidGhpc192Il0sbG9jYWxWYXJzOltdfSxib2R5Ontib2R5OiJ7aWYoX2lubGluZV8xX2FyZzFfPHRoaXNfdil7dGhpc192PV9pbmxpbmVfMV9hcmcxXztmb3IodmFyIF9pbmxpbmVfMV9rPTA7X2lubGluZV8xX2s8X2lubGluZV8xX2FyZzBfLmxlbmd0aDsrK19pbmxpbmVfMV9rKXt0aGlzX2lbX2lubGluZV8xX2tdPV9pbmxpbmVfMV9hcmcwX1tfaW5saW5lXzFfa119fX0iLGFyZ3M6W3tuYW1lOiJfaW5saW5lXzFfYXJnMF8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6Mn0se25hbWU6Il9pbmxpbmVfMV9hcmcxXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoyfV0sdGhpc1ZhcnM6WyJ0aGlzX2kiLCJ0aGlzX3YiXSxsb2NhbFZhcnM6WyJfaW5saW5lXzFfayJdfSxwb3N0Ontib2R5OiJ7cmV0dXJuIHRoaXNfaX0iLGFyZ3M6W10sdGhpc1ZhcnM6WyJ0aGlzX2kiXSxsb2NhbFZhcnM6W119fSksci5hcmdtYXg9bih7YXJnczpbImluZGV4IiwiYXJyYXkiLCJzaGFwZSJdLHByZTp7Ym9keToie3RoaXNfdj0tSW5maW5pdHk7dGhpc19pPV9pbmxpbmVfMF9hcmcyXy5zbGljZSgwKX0iLGFyZ3M6W3tuYW1lOiJfaW5saW5lXzBfYXJnMF8iLGx2YWx1ZTohMSxydmFsdWU6ITEsY291bnQ6MH0se25hbWU6Il9pbmxpbmVfMF9hcmcxXyIsbHZhbHVlOiExLHJ2YWx1ZTohMSxjb3VudDowfSx7bmFtZToiX2lubGluZV8wX2FyZzJfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9XSx0aGlzVmFyczpbInRoaXNfaSIsInRoaXNfdiJdLGxvY2FsVmFyczpbXX0sYm9keTp7Ym9keToie2lmKF9pbmxpbmVfMV9hcmcxXz50aGlzX3Ype3RoaXNfdj1faW5saW5lXzFfYXJnMV87Zm9yKHZhciBfaW5saW5lXzFfaz0wO19pbmxpbmVfMV9rPF9pbmxpbmVfMV9hcmcwXy5sZW5ndGg7KytfaW5saW5lXzFfayl7dGhpc19pW19pbmxpbmVfMV9rXT1faW5saW5lXzFfYXJnMF9bX2lubGluZV8xX2tdfX19IixhcmdzOlt7bmFtZToiX2lubGluZV8xX2FyZzBfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjJ9LHtuYW1lOiJfaW5saW5lXzFfYXJnMV8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6Mn1dLHRoaXNWYXJzOlsidGhpc19pIiwidGhpc192Il0sbG9jYWxWYXJzOlsiX2lubGluZV8xX2siXX0scG9zdDp7Ym9keToie3JldHVybiB0aGlzX2l9IixhcmdzOltdLHRoaXNWYXJzOlsidGhpc19pIl0sbG9jYWxWYXJzOltdfX0pLHIucmFuZG9tPW8oe2FyZ3M6WyJhcnJheSJdLHByZTp7YXJnczpbXSxib2R5OiJ0aGlzX2Y9TWF0aC5yYW5kb20iLHRoaXNWYXJzOlsidGhpc19mIl19LGJvZHk6e2FyZ3M6WyJhIl0sYm9keToiYT10aGlzX2YoKSIsdGhpc1ZhcnM6WyJ0aGlzX2YiXX0sZnVuY05hbWU6InJhbmRvbSJ9KSxyLmFzc2lnbj1vKHthcmdzOlsiYXJyYXkiLCJhcnJheSJdLGJvZHk6e2FyZ3M6WyJhIiwiYiJdLGJvZHk6ImE9YiJ9LGZ1bmNOYW1lOiJhc3NpZ24ifSksci5hc3NpZ25zPW8oe2FyZ3M6WyJhcnJheSIsInNjYWxhciJdLGJvZHk6e2FyZ3M6WyJhIiwiYiJdLGJvZHk6ImE9YiJ9LGZ1bmNOYW1lOiJhc3NpZ25zIn0pLHIuZXF1YWxzPW4oe2FyZ3M6WyJhcnJheSIsImFycmF5Il0scHJlOmksYm9keTp7YXJnczpbe25hbWU6IngiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6InkiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX1dLGJvZHk6ImlmKHghPT15KXtyZXR1cm4gZmFsc2V9Iixsb2NhbFZhcnM6W10sdGhpc1ZhcnM6W119LHBvc3Q6e2FyZ3M6W10sbG9jYWxWYXJzOltdLHRoaXNWYXJzOltdLGJvZHk6InJldHVybiB0cnVlIn0sZnVuY05hbWU6ImVxdWFscyJ9KX0seyJjd2lzZS1jb21waWxlciI6MTMzfV0sNDEyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIm5kYXJyYXkiKSxpPXQoIi4vZG9Db252ZXJ0LmpzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLGE9dCxvPTE7QXJyYXkuaXNBcnJheShhKTspci5wdXNoKGEubGVuZ3RoKSxvKj1hLmxlbmd0aCxhPWFbMF07cmV0dXJuIDA9PT1yLmxlbmd0aD9uKCk6KGV8fChlPW4obmV3IEZsb2F0NjRBcnJheShvKSxyKSksaShlLHQpLGUpfX0seyIuL2RvQ29udmVydC5qcyI6NDEzLG5kYXJyYXk6NDE3fV0sNDEzOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXQoImN3aXNlLWNvbXBpbGVyIikoe2FyZ3M6WyJhcnJheSIsInNjYWxhciIsImluZGV4Il0scHJlOntib2R5OiJ7fSIsYXJnczpbXSx0aGlzVmFyczpbXSxsb2NhbFZhcnM6W119LGJvZHk6e2JvZHk6IntcbnZhciBfaW5saW5lXzFfdj1faW5saW5lXzFfYXJnMV8sX2lubGluZV8xX2lcbmZvcihfaW5saW5lXzFfaT0wO19pbmxpbmVfMV9pPF9pbmxpbmVfMV9hcmcyXy5sZW5ndGgtMTsrK19pbmxpbmVfMV9pKSB7XG5faW5saW5lXzFfdj1faW5saW5lXzFfdltfaW5saW5lXzFfYXJnMl9bX2lubGluZV8xX2ldXVxufVxuX2lubGluZV8xX2FyZzBfPV9pbmxpbmVfMV92W19pbmxpbmVfMV9hcmcyX1tfaW5saW5lXzFfYXJnMl8ubGVuZ3RoLTFdXVxufSIsYXJnczpbe25hbWU6Il9pbmxpbmVfMV9hcmcwXyIsbHZhbHVlOiEwLHJ2YWx1ZTohMSxjb3VudDoxfSx7bmFtZToiX2lubGluZV8xX2FyZzFfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9LHtuYW1lOiJfaW5saW5lXzFfYXJnMl8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6NH1dLHRoaXNWYXJzOltdLGxvY2FsVmFyczpbIl9pbmxpbmVfMV9pIiwiX2lubGluZV8xX3YiXX0scG9zdDp7Ym9keToie30iLGFyZ3M6W10sdGhpc1ZhcnM6W10sbG9jYWxWYXJzOltdfSxmdW5jTmFtZToiY29udmVydCIsYmxvY2tTaXplOjY0fSl9LHsiY3dpc2UtY29tcGlsZXIiOjEzM31dLDQxNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJ0eXBlZGFycmF5LXBvb2wiKSxpPTMyO2Z1bmN0aW9uIGEodCl7c3dpdGNoKHQpe2Nhc2UidWludDgiOnJldHVybltuLm1hbGxvY1VpbnQ4LG4uZnJlZVVpbnQ4XTtjYXNlInVpbnQxNiI6cmV0dXJuW24ubWFsbG9jVWludDE2LG4uZnJlZVVpbnQxNl07Y2FzZSJ1aW50MzIiOnJldHVybltuLm1hbGxvY1VpbnQzMixuLmZyZWVVaW50MzJdO2Nhc2UiaW50OCI6cmV0dXJuW24ubWFsbG9jSW50OCxuLmZyZWVJbnQ4XTtjYXNlImludDE2IjpyZXR1cm5bbi5tYWxsb2NJbnQxNixuLmZyZWVJbnQxNl07Y2FzZSJpbnQzMiI6cmV0dXJuW24ubWFsbG9jSW50MzIsbi5mcmVlSW50MzJdO2Nhc2UiZmxvYXQzMiI6cmV0dXJuW24ubWFsbG9jRmxvYXQsbi5mcmVlRmxvYXRdO2Nhc2UiZmxvYXQ2NCI6cmV0dXJuW24ubWFsbG9jRG91YmxlLG4uZnJlZURvdWJsZV07ZGVmYXVsdDpyZXR1cm4gbnVsbH19ZnVuY3Rpb24gbyh0KXtmb3IodmFyIGU9W10scj0wO3I8dDsrK3IpZS5wdXNoKCJzIityKTtmb3Iocj0wO3I8dDsrK3IpZS5wdXNoKCJuIityKTtmb3Iocj0xO3I8dDsrK3IpZS5wdXNoKCJkIityKTtmb3Iocj0xO3I8dDsrK3IpZS5wdXNoKCJlIityKTtmb3Iocj0xO3I8dDsrK3IpZS5wdXNoKCJmIityKTtyZXR1cm4gZX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1bIid1c2Ugc3RyaWN0JyJdLG49WyJuZGFycmF5U29ydFdyYXBwZXIiLHQuam9pbigiZCIpLGVdLmpvaW4oIiIpO3IucHVzaChbImZ1bmN0aW9uICIsbiwiKCIsWyJhcnJheSJdLmpvaW4oIiwiKSwiKXsiXS5qb2luKCIiKSk7Zm9yKHZhciBzPVsiZGF0YT1hcnJheS5kYXRhLG9mZnNldD1hcnJheS5vZmZzZXR8MCxzaGFwZT1hcnJheS5zaGFwZSxzdHJpZGU9YXJyYXkuc3RyaWRlIl0sbD0wO2w8dC5sZW5ndGg7KytsKXMucHVzaChbInMiLGwsIj1zdHJpZGVbIixsLCJdfDAsbiIsbCwiPXNoYXBlWyIsbCwiXXwwIl0uam9pbigiIikpO3ZhciBjPW5ldyBBcnJheSh0Lmxlbmd0aCksdT1bXTtmb3IobD0wO2w8dC5sZW5ndGg7KytsKTAhPT0ocD10W2xdKSYmKDA9PT11Lmxlbmd0aD9jW3BdPSIxIjpjW3BdPXUuam9pbigiKiIpLHUucHVzaCgibiIrcCkpO3ZhciBoPS0xLGY9LTE7Zm9yKGw9MDtsPHQubGVuZ3RoOysrbCl7dmFyIHAsZD10W2xdOzAhPT1kJiYoaD4wP3MucHVzaChbImQiLGQsIj1zIixkLCItZCIsaCwiKm4iLGhdLmpvaW4oIiIpKTpzLnB1c2goWyJkIixkLCI9cyIsZF0uam9pbigiIikpLGg9ZCksMCE9KHA9dC5sZW5ndGgtMS1sKSYmKGY+MD9zLnB1c2goWyJlIixwLCI9cyIscCwiLWUiLGYsIipuIixmLCIsZiIscCwiPSIsY1twXSwiLWYiLGYsIipuIixmXS5qb2luKCIiKSk6cy5wdXNoKFsiZSIscCwiPXMiLHAsIixmIixwLCI9IixjW3BdXS5qb2luKCIiKSksZj1wKX1yLnB1c2goInZhciAiK3Muam9pbigiLCIpKTt2YXIgZz1bIjAiLCJuMC0xIiwiZGF0YSIsIm9mZnNldCJdLmNvbmNhdChvKHQubGVuZ3RoKSk7ci5wdXNoKFsiaWYobjA8PSIsaSwiKXsiLCJpbnNlcnRpb25Tb3J0KCIsZy5qb2luKCIsIiksIil9ZWxzZXsiLCJxdWlja1NvcnQoIixnLmpvaW4oIiwiKSwiKX0iXS5qb2luKCIiKSksci5wdXNoKCJ9cmV0dXJuICIrbik7dmFyIG09bmV3IEZ1bmN0aW9uKCJpbnNlcnRpb25Tb3J0IiwicXVpY2tTb3J0IixyLmpvaW4oIlxuIikpLHY9ZnVuY3Rpb24odCxlKXt2YXIgcj1bIid1c2Ugc3RyaWN0JyJdLG49WyJuZGFycmF5SW5zZXJ0aW9uU29ydCIsdC5qb2luKCJkIiksZV0uam9pbigiIiksaT1bImxlZnQiLCJyaWdodCIsImRhdGEiLCJvZmZzZXQiXS5jb25jYXQobyh0Lmxlbmd0aCkpLHM9YShlKSxsPVsiaSxqLGNwdHIscHRyPWxlZnQqczArb2Zmc2V0Il07aWYodC5sZW5ndGg+MSl7Zm9yKHZhciBjPVtdLHU9MTt1PHQubGVuZ3RoOysrdSlsLnB1c2goImkiK3UpLGMucHVzaCgibiIrdSk7cz9sLnB1c2goInNjcmF0Y2g9bWFsbG9jKCIrYy5qb2luKCIqIikrIikiKTpsLnB1c2goInNjcmF0Y2g9bmV3IEFycmF5KCIrYy5qb2luKCIqIikrIikiKSxsLnB1c2goImRwdHIiLCJzcHRyIiwiYSIsImIiKX1lbHNlIGwucHVzaCgic2NyYXRjaCIpO2Z1bmN0aW9uIGgodCl7cmV0dXJuImdlbmVyaWMiPT09ZT9bImRhdGEuZ2V0KCIsdCwiKSJdLmpvaW4oIiIpOlsiZGF0YVsiLHQsIl0iXS5qb2luKCIiKX1mdW5jdGlvbiBmKHQscil7cmV0dXJuImdlbmVyaWMiPT09ZT9bImRhdGEuc2V0KCIsdCwiLCIsciwiKSJdLmpvaW4oIiIpOlsiZGF0YVsiLHQsIl09IixyXS5qb2luKCIiKX1pZihyLnB1c2goWyJmdW5jdGlvbiAiLG4sIigiLGkuam9pbigiLCIpLCIpe3ZhciAiLGwuam9pbigiLCIpXS5qb2luKCIiKSwiZm9yKGk9bGVmdCsxO2k8PXJpZ2h0OysraSl7Iiwiaj1pO3B0cis9czAiLCJjcHRyPXB0ciIpLHQubGVuZ3RoPjEpe2ZvcihyLnB1c2goImRwdHI9MDtzcHRyPXB0ciIpLHU9dC5sZW5ndGgtMTt1Pj0wOy0tdSkwIT09KHA9dFt1XSkmJnIucHVzaChbImZvcihpIixwLCI9MDtpIixwLCI8biIscCwiOysraSIscCwiKXsiXS5qb2luKCIiKSk7Zm9yKHIucHVzaCgic2NyYXRjaFtkcHRyKytdPSIsaCgic3B0ciIpKSx1PTA7dTx0Lmxlbmd0aDsrK3UpMCE9PShwPXRbdV0pJiZyLnB1c2goInNwdHIrPWQiK3AsIn0iKTtmb3Ioci5wdXNoKCJfX2c6d2hpbGUoai0tXHgzZWxlZnQpeyIsImRwdHI9MCIsInNwdHI9Y3B0ci1zMCIpLHU9MTt1PHQubGVuZ3RoOysrdSkxPT09dSYmci5wdXNoKCJfX2w6Iiksci5wdXNoKFsiZm9yKGkiLHUsIj0wO2kiLHUsIjxuIix1LCI7KytpIix1LCIpeyJdLmpvaW4oIiIpKTtmb3Ioci5wdXNoKFsiYT0iLGgoInNwdHIiKSwiXG5iPXNjcmF0Y2hbZHB0cl1cbmlmKGE8Yil7YnJlYWsgX19nfVxuaWYoYT5iKXticmVhayBfX2x9Il0uam9pbigiIikpLHU9dC5sZW5ndGgtMTt1Pj0xOy0tdSlyLnB1c2goInNwdHIrPWUiK3UsImRwdHIrPWYiK3UsIn0iKTtmb3Ioci5wdXNoKCJkcHRyPWNwdHI7c3B0cj1jcHRyLXMwIiksdT10Lmxlbmd0aC0xO3U+PTA7LS11KTAhPT0ocD10W3VdKSYmci5wdXNoKFsiZm9yKGkiLHAsIj0wO2kiLHAsIjxuIixwLCI7KytpIixwLCIpeyJdLmpvaW4oIiIpKTtmb3Ioci5wdXNoKGYoImRwdHIiLGgoInNwdHIiKSkpLHU9MDt1PHQubGVuZ3RoOysrdSkwIT09KHA9dFt1XSkmJnIucHVzaChbImRwdHIrPWQiLHAsIjtzcHRyKz1kIixwXS5qb2luKCIiKSwifSIpO2ZvcihyLnB1c2goImNwdHItPXMwXG59Iiksci5wdXNoKCJkcHRyPWNwdHI7c3B0cj0wIiksdT10Lmxlbmd0aC0xO3U+PTA7LS11KTAhPT0ocD10W3VdKSYmci5wdXNoKFsiZm9yKGkiLHAsIj0wO2kiLHAsIjxuIixwLCI7KytpIixwLCIpeyJdLmpvaW4oIiIpKTtmb3Ioci5wdXNoKGYoImRwdHIiLCJzY3JhdGNoW3NwdHIrK10iKSksdT0wO3U8dC5sZW5ndGg7Kyt1KXt2YXIgcDswIT09KHA9dFt1XSkmJnIucHVzaCgiZHB0cis9ZCIrcCwifSIpfX1lbHNlIHIucHVzaCgic2NyYXRjaD0iK2goInB0ciIpLCJ3aGlsZSgoai0tXHgzZWxlZnQpJiYoIitoKCJjcHRyLXMwIikrIj5zY3JhdGNoKSl7IixmKCJjcHRyIixoKCJjcHRyLXMwIikpLCJjcHRyLT1zMCIsIn0iLGYoImNwdHIiLCJzY3JhdGNoIikpO3JldHVybiByLnB1c2goIn0iKSx0Lmxlbmd0aD4xJiZzJiZyLnB1c2goImZyZWUoc2NyYXRjaCkiKSxyLnB1c2goIn0gcmV0dXJuICIrbikscz9uZXcgRnVuY3Rpb24oIm1hbGxvYyIsImZyZWUiLHIuam9pbigiXG4iKSkoc1swXSxzWzFdKTpuZXcgRnVuY3Rpb24oci5qb2luKCJcbiIpKSgpfSh0LGUpLHk9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPVsiJ3VzZSBzdHJpY3QnIl0scz1bIm5kYXJyYXlRdWlja1NvcnQiLHQuam9pbigiZCIpLGVdLmpvaW4oIiIpLGw9WyJsZWZ0IiwicmlnaHQiLCJkYXRhIiwib2Zmc2V0Il0uY29uY2F0KG8odC5sZW5ndGgpKSxjPWEoZSksdT0wO24ucHVzaChbImZ1bmN0aW9uICIscywiKCIsbC5qb2luKCIsIiksIil7Il0uam9pbigiIikpO3ZhciBoPVsic2l4dGg9KChyaWdodC1sZWZ0KzEpLzYpfDAiLCJpbmRleDE9bGVmdCtzaXh0aCIsImluZGV4NT1yaWdodC1zaXh0aCIsImluZGV4Mz0obGVmdCtyaWdodCk+PjEiLCJpbmRleDI9aW5kZXgzLXNpeHRoIiwiaW5kZXg0PWluZGV4MytzaXh0aCIsImVsMT1pbmRleDEiLCJlbDI9aW5kZXgyIiwiZWwzPWluZGV4MyIsImVsND1pbmRleDQiLCJlbDU9aW5kZXg1IiwibGVzcz1sZWZ0KzEiLCJncmVhdD1yaWdodC0xIiwicGl2b3RzX2FyZV9lcXVhbD10cnVlIiwidG1wIiwidG1wMCIsIngiLCJ5IiwieiIsImsiLCJwdHIwIiwicHRyMSIsInB0cjIiLCJjb21wX3Bpdm90MT0wIiwiY29tcF9waXZvdDI9MCIsImNvbXA9MCJdO2lmKHQubGVuZ3RoPjEpe2Zvcih2YXIgZj1bXSxwPTE7cDx0Lmxlbmd0aDsrK3ApZi5wdXNoKCJuIitwKSxoLnB1c2goImkiK3ApO2ZvcihwPTA7cDw4OysrcCloLnB1c2goImJfcHRyIitwKTtoLnB1c2goInB0cjMiLCJwdHI0IiwicHRyNSIsInB0cjYiLCJwdHI3IiwicGl2b3RfcHRyIiwicHRyX3NoaWZ0IiwiZWxlbWVudFNpemU9IitmLmpvaW4oIioiKSksYz9oLnB1c2goInBpdm90MT1tYWxsb2MoZWxlbWVudFNpemUpIiwicGl2b3QyPW1hbGxvYyhlbGVtZW50U2l6ZSkiKTpoLnB1c2goInBpdm90MT1uZXcgQXJyYXkoZWxlbWVudFNpemUpLHBpdm90Mj1uZXcgQXJyYXkoZWxlbWVudFNpemUpIil9ZWxzZSBoLnB1c2goInBpdm90MSIsInBpdm90MiIpO2Z1bmN0aW9uIGQodCl7cmV0dXJuWyIob2Zmc2V0KyIsdCwiKnMwKSJdLmpvaW4oIiIpfWZ1bmN0aW9uIGcodCl7cmV0dXJuImdlbmVyaWMiPT09ZT9bImRhdGEuZ2V0KCIsdCwiKSJdLmpvaW4oIiIpOlsiZGF0YVsiLHQsIl0iXS5qb2luKCIiKX1mdW5jdGlvbiBtKHQscil7cmV0dXJuImdlbmVyaWMiPT09ZT9bImRhdGEuc2V0KCIsdCwiLCIsciwiKSJdLmpvaW4oIiIpOlsiZGF0YVsiLHQsIl09IixyXS5qb2luKCIiKX1mdW5jdGlvbiB2KGUscixpKXtpZigxPT09ZS5sZW5ndGgpbi5wdXNoKCJwdHIwPSIrZChlWzBdKSk7ZWxzZSBmb3IodmFyIGE9MDthPGUubGVuZ3RoOysrYSluLnB1c2goWyJiX3B0ciIsYSwiPXMwKiIsZVthXV0uam9pbigiIikpO2ZvcihyJiZuLnB1c2goInBpdm90X3B0cj0wIiksbi5wdXNoKCJwdHJfc2hpZnQ9b2Zmc2V0IiksYT10Lmxlbmd0aC0xO2E+PTA7LS1hKTAhPT0obz10W2FdKSYmbi5wdXNoKFsiZm9yKGkiLG8sIj0wO2kiLG8sIjxuIixvLCI7KytpIixvLCIpeyJdLmpvaW4oIiIpKTtpZihlLmxlbmd0aD4xKWZvcihhPTA7YTxlLmxlbmd0aDsrK2Epbi5wdXNoKFsicHRyIixhLCI9Yl9wdHIiLGEsIitwdHJfc2hpZnQiXS5qb2luKCIiKSk7Zm9yKG4ucHVzaChpKSxyJiZuLnB1c2goIisrcGl2b3RfcHRyIiksYT0wO2E8dC5sZW5ndGg7KythKXt2YXIgbzswIT09KG89dFthXSkmJihlLmxlbmd0aD4xP24ucHVzaCgicHRyX3NoaWZ0Kz1kIitvKTpuLnB1c2goInB0cjArPWQiK28pLG4ucHVzaCgifSIpKX19ZnVuY3Rpb24geShlLHIsaSxhKXtpZigxPT09ci5sZW5ndGgpbi5wdXNoKCJwdHIwPSIrZChyWzBdKSk7ZWxzZXtmb3IodmFyIG89MDtvPHIubGVuZ3RoOysrbyluLnB1c2goWyJiX3B0ciIsbywiPXMwKiIscltvXV0uam9pbigiIikpO24ucHVzaCgicHRyX3NoaWZ0PW9mZnNldCIpfWZvcihpJiZuLnB1c2goInBpdm90X3B0cj0wIiksZSYmbi5wdXNoKGUrIjoiKSxvPTE7bzx0Lmxlbmd0aDsrK28pbi5wdXNoKFsiZm9yKGkiLG8sIj0wO2kiLG8sIjxuIixvLCI7KytpIixvLCIpeyJdLmpvaW4oIiIpKTtpZihyLmxlbmd0aD4xKWZvcihvPTA7bzxyLmxlbmd0aDsrK28pbi5wdXNoKFsicHRyIixvLCI9Yl9wdHIiLG8sIitwdHJfc2hpZnQiXS5qb2luKCIiKSk7Zm9yKG4ucHVzaChhKSxvPXQubGVuZ3RoLTE7bz49MTstLW8paSYmbi5wdXNoKCJwaXZvdF9wdHIrPWYiK28pLHIubGVuZ3RoPjE/bi5wdXNoKCJwdHJfc2hpZnQrPWUiK28pOm4ucHVzaCgicHRyMCs9ZSIrbyksbi5wdXNoKCJ9Iil9ZnVuY3Rpb24geCgpe3QubGVuZ3RoPjEmJmMmJm4ucHVzaCgiZnJlZShwaXZvdDEpIiwiZnJlZShwaXZvdDIpIil9ZnVuY3Rpb24gYihlLHIpe3ZhciBpPSJlbCIrZSxhPSJlbCIrcjtpZih0Lmxlbmd0aD4xKXt2YXIgbz0iX19sIisgKyt1O3kobyxbaSxhXSwhMSxbImNvbXA9IixnKCJwdHIwIiksIi0iLGcoInB0cjEiKSwiXG4iLCJpZihjb21wPjApe3RtcDA9IixpLCI7IixpLCI9IixhLCI7IixhLCI9dG1wMDticmVhayAiLG8sIn1cbiIsImlmKGNvbXA8MCl7YnJlYWsgIixvLCJ9Il0uam9pbigiIikpfWVsc2Ugbi5wdXNoKFsiaWYoIixnKGQoaSkpLCI+IixnKGQoYSkpLCIpe3RtcDA9IixpLCI7IixpLCI9IixhLCI7IixhLCI9dG1wMH0iXS5qb2luKCIiKSl9ZnVuY3Rpb24gXyhlLHIpe3QubGVuZ3RoPjE/dihbZSxyXSwhMSxtKCJwdHIwIixnKCJwdHIxIikpKTpuLnB1c2gobShkKGUpLGcoZChyKSkpKX1mdW5jdGlvbiB3KGUscixpKXtpZih0Lmxlbmd0aD4xKXt2YXIgYT0iX19sIisgKyt1O3koYSxbcl0sITAsW2UsIj0iLGcoInB0cjAiKSwiLXBpdm90IixpLCJbcGl2b3RfcHRyXVxuIiwiaWYoIixlLCIhPT0wKXticmVhayAiLGEsIn0iXS5qb2luKCIiKSl9ZWxzZSBuLnB1c2goW2UsIj0iLGcoZChyKSksIi1waXZvdCIsaV0uam9pbigiIikpfWZ1bmN0aW9uIGsoZSxyKXt0Lmxlbmd0aD4xP3YoW2Uscl0sITEsWyJ0bXA9IixnKCJwdHIwIiksIlxuIixtKCJwdHIwIixnKCJwdHIxIikpLCJcbiIsbSgicHRyMSIsInRtcCIpXS5qb2luKCIiKSk6bi5wdXNoKFsicHRyMD0iLGQoZSksIlxuIiwicHRyMT0iLGQociksIlxuIiwidG1wPSIsZygicHRyMCIpLCJcbiIsbSgicHRyMCIsZygicHRyMSIpKSwiXG4iLG0oInB0cjEiLCJ0bXAiKV0uam9pbigiIikpfWZ1bmN0aW9uIE0oZSxyLGkpe3QubGVuZ3RoPjE/KHYoW2UscixpXSwhMSxbInRtcD0iLGcoInB0cjAiKSwiXG4iLG0oInB0cjAiLGcoInB0cjEiKSksIlxuIixtKCJwdHIxIixnKCJwdHIyIikpLCJcbiIsbSgicHRyMiIsInRtcCIpXS5qb2luKCIiKSksbi5wdXNoKCIrKyIrciwiLS0iK2kpKTpuLnB1c2goWyJwdHIwPSIsZChlKSwiXG4iLCJwdHIxPSIsZChyKSwiXG4iLCJwdHIyPSIsZChpKSwiXG4iLCIrKyIsciwiXG4iLCItLSIsaSwiXG4iLCJ0bXA9IixnKCJwdHIwIiksIlxuIixtKCJwdHIwIixnKCJwdHIxIikpLCJcbiIsbSgicHRyMSIsZygicHRyMiIpKSwiXG4iLG0oInB0cjIiLCJ0bXAiKV0uam9pbigiIikpfWZ1bmN0aW9uIEEodCxlKXtrKHQsZSksbi5wdXNoKCItLSIrZSl9ZnVuY3Rpb24gVChlLHIsaSl7dC5sZW5ndGg+MT92KFtlLHJdLCEwLFttKCJwdHIwIixnKCJwdHIxIikpLCJcbiIsbSgicHRyMSIsWyJwaXZvdCIsaSwiW3Bpdm90X3B0cl0iXS5qb2luKCIiKSldLmpvaW4oIiIpKTpuLnB1c2gobShkKGUpLGcoZChyKSkpLG0oZChyKSwicGl2b3QiK2kpKX1mdW5jdGlvbiBTKGUscil7bi5wdXNoKFsiaWYoKCIsciwiLSIsZSwiKTw9IixpLCIpe1xuIiwiaW5zZXJ0aW9uU29ydCgiLGUsIiwiLHIsIixkYXRhLG9mZnNldCwiLG8odC5sZW5ndGgpLmpvaW4oIiwiKSwiKVxuIiwifWVsc2V7XG4iLHMsIigiLGUsIiwiLHIsIixkYXRhLG9mZnNldCwiLG8odC5sZW5ndGgpLmpvaW4oIiwiKSwiKVxuIiwifSJdLmpvaW4oIiIpKX1mdW5jdGlvbiBFKGUscixpKXt0Lmxlbmd0aD4xPyhuLnB1c2goWyJfX2wiLCsrdSwiOndoaWxlKHRydWUpeyJdLmpvaW4oIiIpKSx2KFtlXSwhMCxbImlmKCIsZygicHRyMCIpLCIhPT1waXZvdCIsciwiW3Bpdm90X3B0cl0pe2JyZWFrIF9fbCIsdSwifSJdLmpvaW4oIiIpKSxuLnB1c2goaSwifSIpKTpuLnB1c2goWyJ3aGlsZSgiLGcoZChlKSksIj09PXBpdm90IixyLCIpeyIsaSwifSJdLmpvaW4oIiIpKX1yZXR1cm4gbi5wdXNoKCJ2YXIgIitoLmpvaW4oIiwiKSksYigxLDIpLGIoNCw1KSxiKDEsMyksYigyLDMpLGIoMSw0KSxiKDMsNCksYigyLDUpLGIoMiwzKSxiKDQsNSksdC5sZW5ndGg+MT92KFsiZWwxIiwiZWwyIiwiZWwzIiwiZWw0IiwiZWw1IiwiaW5kZXgxIiwiaW5kZXgzIiwiaW5kZXg1Il0sITAsWyJwaXZvdDFbcGl2b3RfcHRyXT0iLGcoInB0cjEiKSwiXG4iLCJwaXZvdDJbcGl2b3RfcHRyXT0iLGcoInB0cjMiKSwiXG4iLCJwaXZvdHNfYXJlX2VxdWFsPXBpdm90c19hcmVfZXF1YWwmJihwaXZvdDFbcGl2b3RfcHRyXT09PXBpdm90MltwaXZvdF9wdHJdKVxuIiwieD0iLGcoInB0cjAiKSwiXG4iLCJ5PSIsZygicHRyMiIpLCJcbiIsIno9IixnKCJwdHI0IiksIlxuIixtKCJwdHI1IiwieCIpLCJcbiIsbSgicHRyNiIsInkiKSwiXG4iLG0oInB0cjciLCJ6IildLmpvaW4oIiIpKTpuLnB1c2goWyJwaXZvdDE9IixnKGQoImVsMiIpKSwiXG4iLCJwaXZvdDI9IixnKGQoImVsNCIpKSwiXG4iLCJwaXZvdHNfYXJlX2VxdWFsPXBpdm90MT09PXBpdm90MlxuIiwieD0iLGcoZCgiZWwxIikpLCJcbiIsInk9IixnKGQoImVsMyIpKSwiXG4iLCJ6PSIsZyhkKCJlbDUiKSksIlxuIixtKGQoImluZGV4MSIpLCJ4IiksIlxuIixtKGQoImluZGV4MyIpLCJ5IiksIlxuIixtKGQoImluZGV4NSIpLCJ6IildLmpvaW4oIiIpKSxfKCJpbmRleDIiLCJsZWZ0IiksXygiaW5kZXg0IiwicmlnaHQiKSxuLnB1c2goImlmKHBpdm90c19hcmVfZXF1YWwpeyIpLG4ucHVzaCgiZm9yKGs9bGVzcztrPD1ncmVhdDsrK2speyIpLHcoImNvbXAiLCJrIiwxKSxuLnB1c2goImlmKGNvbXA9PT0wKXtjb250aW51ZX0iKSxuLnB1c2goImlmKGNvbXA8MCl7Iiksbi5wdXNoKCJpZihrIT09bGVzcyl7IiksaygiayIsImxlc3MiKSxuLnB1c2goIn0iKSxuLnB1c2goIisrbGVzcyIpLG4ucHVzaCgifWVsc2V7Iiksbi5wdXNoKCJ3aGlsZSh0cnVlKXsiKSx3KCJjb21wIiwiZ3JlYXQiLDEpLG4ucHVzaCgiaWYoY29tcD4wKXsiKSxuLnB1c2goImdyZWF0LS0iKSxuLnB1c2goIn1lbHNlIGlmKGNvbXA8MCl7IiksTSgiayIsImxlc3MiLCJncmVhdCIpLG4ucHVzaCgiYnJlYWsiKSxuLnB1c2goIn1lbHNleyIpLEEoImsiLCJncmVhdCIpLG4ucHVzaCgiYnJlYWsiKSxuLnB1c2goIn0iKSxuLnB1c2goIn0iKSxuLnB1c2goIn0iKSxuLnB1c2goIn0iKSxuLnB1c2goIn1lbHNleyIpLG4ucHVzaCgiZm9yKGs9bGVzcztrPD1ncmVhdDsrK2speyIpLHcoImNvbXBfcGl2b3QxIiwiayIsMSksbi5wdXNoKCJpZihjb21wX3Bpdm90MTwwKXsiKSxuLnB1c2goImlmKGshPT1sZXNzKXsiKSxrKCJrIiwibGVzcyIpLG4ucHVzaCgifSIpLG4ucHVzaCgiKytsZXNzIiksbi5wdXNoKCJ9ZWxzZXsiKSx3KCJjb21wX3Bpdm90MiIsImsiLDIpLG4ucHVzaCgiaWYoY29tcF9waXZvdDI+MCl7Iiksbi5wdXNoKCJ3aGlsZSh0cnVlKXsiKSx3KCJjb21wIiwiZ3JlYXQiLDIpLG4ucHVzaCgiaWYoY29tcD4wKXsiKSxuLnB1c2goImlmKC0tZ3JlYXQ8ayl7YnJlYWt9Iiksbi5wdXNoKCJjb250aW51ZSIpLG4ucHVzaCgifWVsc2V7IiksdygiY29tcCIsImdyZWF0IiwxKSxuLnB1c2goImlmKGNvbXA8MCl7IiksTSgiayIsImxlc3MiLCJncmVhdCIpLG4ucHVzaCgifWVsc2V7IiksQSgiayIsImdyZWF0Iiksbi5wdXNoKCJ9Iiksbi5wdXNoKCJicmVhayIpLG4ucHVzaCgifSIpLG4ucHVzaCgifSIpLG4ucHVzaCgifSIpLG4ucHVzaCgifSIpLG4ucHVzaCgifSIpLG4ucHVzaCgifSIpLFQoImxlZnQiLCIobGVzcy0xKSIsMSksVCgicmlnaHQiLCIoZ3JlYXQrMSkiLDIpLFMoImxlZnQiLCIobGVzcy0yKSIpLFMoIihncmVhdCsyKSIsInJpZ2h0Iiksbi5wdXNoKCJpZihwaXZvdHNfYXJlX2VxdWFsKXsiKSx4KCksbi5wdXNoKCJyZXR1cm4iKSxuLnB1c2goIn0iKSxuLnB1c2goImlmKGxlc3M8aW5kZXgxJiZncmVhdD5pbmRleDUpeyIpLEUoImxlc3MiLDEsIisrbGVzcyIpLEUoImdyZWF0IiwyLCItLWdyZWF0Iiksbi5wdXNoKCJmb3Ioaz1sZXNzO2s8PWdyZWF0Oysrayl7IiksdygiY29tcF9waXZvdDEiLCJrIiwxKSxuLnB1c2goImlmKGNvbXBfcGl2b3QxPT09MCl7Iiksbi5wdXNoKCJpZihrIT09bGVzcyl7IiksaygiayIsImxlc3MiKSxuLnB1c2goIn0iKSxuLnB1c2goIisrbGVzcyIpLG4ucHVzaCgifWVsc2V7IiksdygiY29tcF9waXZvdDIiLCJrIiwyKSxuLnB1c2goImlmKGNvbXBfcGl2b3QyPT09MCl7Iiksbi5wdXNoKCJ3aGlsZSh0cnVlKXsiKSx3KCJjb21wIiwiZ3JlYXQiLDIpLG4ucHVzaCgiaWYoY29tcD09PTApeyIpLG4ucHVzaCgiaWYoLS1ncmVhdDxrKXticmVha30iKSxuLnB1c2goImNvbnRpbnVlIiksbi5wdXNoKCJ9ZWxzZXsiKSx3KCJjb21wIiwiZ3JlYXQiLDEpLG4ucHVzaCgiaWYoY29tcDwwKXsiKSxNKCJrIiwibGVzcyIsImdyZWF0Iiksbi5wdXNoKCJ9ZWxzZXsiKSxBKCJrIiwiZ3JlYXQiKSxuLnB1c2goIn0iKSxuLnB1c2goImJyZWFrIiksbi5wdXNoKCJ9Iiksbi5wdXNoKCJ9Iiksbi5wdXNoKCJ9Iiksbi5wdXNoKCJ9Iiksbi5wdXNoKCJ9Iiksbi5wdXNoKCJ9IikseCgpLFMoImxlc3MiLCJncmVhdCIpLG4ucHVzaCgifXJldHVybiAiK3MpLHQubGVuZ3RoPjEmJmM/bmV3IEZ1bmN0aW9uKCJpbnNlcnRpb25Tb3J0IiwibWFsbG9jIiwiZnJlZSIsbi5qb2luKCJcbiIpKShyLGNbMF0sY1sxXSk6bmV3IEZ1bmN0aW9uKCJpbnNlcnRpb25Tb3J0IixuLmpvaW4oIlxuIikpKHIpfSh0LGUsdik7cmV0dXJuIG0odix5KX19LHsidHlwZWRhcnJheS1wb29sIjo1MDd9XSw0MTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9saWIvY29tcGlsZV9zb3J0LmpzIiksaT17fTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5vcmRlcixyPXQuZHR5cGUsYT1bZSxyXS5qb2luKCI6Iiksbz1pW2FdO3JldHVybiBvfHwoaVthXT1vPW4oZSxyKSksbyh0KSx0fX0seyIuL2xpYi9jb21waWxlX3NvcnQuanMiOjQxNH1dLDQxNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJuZGFycmF5LWxpbmVhci1pbnRlcnBvbGF0ZSIpLGk9dCgiY3dpc2UvbGliL3dyYXBwZXIiKSh7YXJnczpbImluZGV4IiwiYXJyYXkiLCJzY2FsYXIiLCJzY2FsYXIiLCJzY2FsYXIiXSxwcmU6e2JvZHk6Int0aGlzX3dhcnBlZD1uZXcgQXJyYXkoX2lubGluZV8zX2FyZzRfKX0iLGFyZ3M6W3tuYW1lOiJfaW5saW5lXzNfYXJnMF8iLGx2YWx1ZTohMSxydmFsdWU6ITEsY291bnQ6MH0se25hbWU6Il9pbmxpbmVfM19hcmcxXyIsbHZhbHVlOiExLHJ2YWx1ZTohMSxjb3VudDowfSx7bmFtZToiX2lubGluZV8zX2FyZzJfIixsdmFsdWU6ITEscnZhbHVlOiExLGNvdW50OjB9LHtuYW1lOiJfaW5saW5lXzNfYXJnM18iLGx2YWx1ZTohMSxydmFsdWU6ITEsY291bnQ6MH0se25hbWU6Il9pbmxpbmVfM19hcmc0XyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfV0sdGhpc1ZhcnM6WyJ0aGlzX3dhcnBlZCJdLGxvY2FsVmFyczpbXX0sYm9keTp7Ym9keToie19pbmxpbmVfNF9hcmcyXyh0aGlzX3dhcnBlZCxfaW5saW5lXzRfYXJnMF8pLF9pbmxpbmVfNF9hcmcxXz1faW5saW5lXzRfYXJnM18uYXBwbHkodm9pZCAwLHRoaXNfd2FycGVkKX0iLGFyZ3M6W3tuYW1lOiJfaW5saW5lXzRfYXJnMF8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6Il9pbmxpbmVfNF9hcmcxXyIsbHZhbHVlOiEwLHJ2YWx1ZTohMSxjb3VudDoxfSx7bmFtZToiX2lubGluZV80X2FyZzJfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9LHtuYW1lOiJfaW5saW5lXzRfYXJnM18iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6Il9pbmxpbmVfNF9hcmc0XyIsbHZhbHVlOiExLHJ2YWx1ZTohMSxjb3VudDowfV0sdGhpc1ZhcnM6WyJ0aGlzX3dhcnBlZCJdLGxvY2FsVmFyczpbXX0scG9zdDp7Ym9keToie30iLGFyZ3M6W10sdGhpc1ZhcnM6W10sbG9jYWxWYXJzOltdfSxkZWJ1ZzohMSxmdW5jTmFtZToid2FycE5EIixibG9ja1NpemU6NjR9KSxhPXQoImN3aXNlL2xpYi93cmFwcGVyIikoe2FyZ3M6WyJpbmRleCIsImFycmF5Iiwic2NhbGFyIiwic2NhbGFyIiwic2NhbGFyIl0scHJlOntib2R5OiJ7dGhpc193YXJwZWQ9WzBdfSIsYXJnczpbXSx0aGlzVmFyczpbInRoaXNfd2FycGVkIl0sbG9jYWxWYXJzOltdfSxib2R5Ontib2R5OiJ7X2lubGluZV83X2FyZzJfKHRoaXNfd2FycGVkLF9pbmxpbmVfN19hcmcwXyksX2lubGluZV83X2FyZzFfPV9pbmxpbmVfN19hcmczXyhfaW5saW5lXzdfYXJnNF8sdGhpc193YXJwZWRbMF0pfSIsYXJnczpbe25hbWU6Il9pbmxpbmVfN19hcmcwXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZToiX2lubGluZV83X2FyZzFfIixsdmFsdWU6ITAscnZhbHVlOiExLGNvdW50OjF9LHtuYW1lOiJfaW5saW5lXzdfYXJnMl8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6Il9pbmxpbmVfN19hcmczXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZToiX2lubGluZV83X2FyZzRfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9XSx0aGlzVmFyczpbInRoaXNfd2FycGVkIl0sbG9jYWxWYXJzOltdfSxwb3N0Ontib2R5OiJ7fSIsYXJnczpbXSx0aGlzVmFyczpbXSxsb2NhbFZhcnM6W119LGRlYnVnOiExLGZ1bmNOYW1lOiJ3YXJwMUQiLGJsb2NrU2l6ZTo2NH0pLG89dCgiY3dpc2UvbGliL3dyYXBwZXIiKSh7YXJnczpbImluZGV4IiwiYXJyYXkiLCJzY2FsYXIiLCJzY2FsYXIiLCJzY2FsYXIiXSxwcmU6e2JvZHk6Int0aGlzX3dhcnBlZD1bMCwwXX0iLGFyZ3M6W10sdGhpc1ZhcnM6WyJ0aGlzX3dhcnBlZCJdLGxvY2FsVmFyczpbXX0sYm9keTp7Ym9keToie19pbmxpbmVfMTBfYXJnMl8odGhpc193YXJwZWQsX2lubGluZV8xMF9hcmcwXyksX2lubGluZV8xMF9hcmcxXz1faW5saW5lXzEwX2FyZzNfKF9pbmxpbmVfMTBfYXJnNF8sdGhpc193YXJwZWRbMF0sdGhpc193YXJwZWRbMV0pfSIsYXJnczpbe25hbWU6Il9pbmxpbmVfMTBfYXJnMF8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6Il9pbmxpbmVfMTBfYXJnMV8iLGx2YWx1ZTohMCxydmFsdWU6ITEsY291bnQ6MX0se25hbWU6Il9pbmxpbmVfMTBfYXJnMl8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6Il9pbmxpbmVfMTBfYXJnM18iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6Il9pbmxpbmVfMTBfYXJnNF8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX1dLHRoaXNWYXJzOlsidGhpc193YXJwZWQiXSxsb2NhbFZhcnM6W119LHBvc3Q6e2JvZHk6Int9IixhcmdzOltdLHRoaXNWYXJzOltdLGxvY2FsVmFyczpbXX0sZGVidWc6ITEsZnVuY05hbWU6IndhcnAyRCIsYmxvY2tTaXplOjY0fSkscz10KCJjd2lzZS9saWIvd3JhcHBlciIpKHthcmdzOlsiaW5kZXgiLCJhcnJheSIsInNjYWxhciIsInNjYWxhciIsInNjYWxhciJdLHByZTp7Ym9keToie3RoaXNfd2FycGVkPVswLDAsMF19IixhcmdzOltdLHRoaXNWYXJzOlsidGhpc193YXJwZWQiXSxsb2NhbFZhcnM6W119LGJvZHk6e2JvZHk6IntfaW5saW5lXzEzX2FyZzJfKHRoaXNfd2FycGVkLF9pbmxpbmVfMTNfYXJnMF8pLF9pbmxpbmVfMTNfYXJnMV89X2lubGluZV8xM19hcmczXyhfaW5saW5lXzEzX2FyZzRfLHRoaXNfd2FycGVkWzBdLHRoaXNfd2FycGVkWzFdLHRoaXNfd2FycGVkWzJdKX0iLGFyZ3M6W3tuYW1lOiJfaW5saW5lXzEzX2FyZzBfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9LHtuYW1lOiJfaW5saW5lXzEzX2FyZzFfIixsdmFsdWU6ITAscnZhbHVlOiExLGNvdW50OjF9LHtuYW1lOiJfaW5saW5lXzEzX2FyZzJfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9LHtuYW1lOiJfaW5saW5lXzEzX2FyZzNfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9LHtuYW1lOiJfaW5saW5lXzEzX2FyZzRfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9XSx0aGlzVmFyczpbInRoaXNfd2FycGVkIl0sbG9jYWxWYXJzOltdfSxwb3N0Ontib2R5OiJ7fSIsYXJnczpbXSx0aGlzVmFyczpbXSxsb2NhbFZhcnM6W119LGRlYnVnOiExLGZ1bmNOYW1lOiJ3YXJwM0QiLGJsb2NrU2l6ZTo2NH0pO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7c3dpdGNoKGUuc2hhcGUubGVuZ3RoKXtjYXNlIDE6YSh0LHIsbi5kMSxlKTticmVhaztjYXNlIDI6byh0LHIsbi5kMixlKTticmVhaztjYXNlIDM6cyh0LHIsbi5kMyxlKTticmVhaztkZWZhdWx0OmkodCxyLG4uYmluZCh2b2lkIDAsZSksZS5zaGFwZS5sZW5ndGgpfXJldHVybiB0fX0seyJjd2lzZS9saWIvd3JhcHBlciI6MTM2LCJuZGFycmF5LWxpbmVhci1pbnRlcnBvbGF0ZSI6NDEwfV0sNDE3OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiaW90YS1hcnJheSIpLGk9dCgiaXMtYnVmZmVyIiksYT0idW5kZWZpbmVkIiE9dHlwZW9mIEZsb2F0NjRBcnJheTtmdW5jdGlvbiBvKHQsZSl7cmV0dXJuIHRbMF0tZVswXX1mdW5jdGlvbiBzKCl7dmFyIHQsZT10aGlzLnN0cmlkZSxyPW5ldyBBcnJheShlLmxlbmd0aCk7Zm9yKHQ9MDt0PHIubGVuZ3RoOysrdClyW3RdPVtNYXRoLmFicyhlW3RdKSx0XTtyLnNvcnQobyk7dmFyIG49bmV3IEFycmF5KHIubGVuZ3RoKTtmb3IodD0wO3Q8bi5sZW5ndGg7Kyt0KW5bdF09clt0XVsxXTtyZXR1cm4gbn1mdW5jdGlvbiBsKHQsZSl7dmFyIHI9WyJWaWV3IixlLCJkIix0XS5qb2luKCIiKTtlPDAmJihyPSJWaWV3X05pbCIrdCk7dmFyIGk9ImdlbmVyaWMiPT09dDtpZigtMT09PWUpe3ZhciBhPSJmdW5jdGlvbiAiK3IrIihhKXt0aGlzLmRhdGE9YTt9O3ZhciBwcm90bz0iK3IrIi5wcm90b3R5cGU7cHJvdG8uZHR5cGU9JyIrdCsiJztwcm90by5pbmRleD1mdW5jdGlvbigpe3JldHVybiAtMX07cHJvdG8uc2l6ZT0wO3Byb3RvLmRpbWVuc2lvbj0tMTtwcm90by5zaGFwZT1wcm90by5zdHJpZGU9cHJvdG8ub3JkZXI9W107cHJvdG8ubG89cHJvdG8uaGk9cHJvdG8udHJhbnNwb3NlPXByb3RvLnN0ZXA9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3ICIrcisiKHRoaXMuZGF0YSk7fTtwcm90by5nZXQ9cHJvdG8uc2V0PWZ1bmN0aW9uKCl7fTtwcm90by5waWNrPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9O3JldHVybiBmdW5jdGlvbiBjb25zdHJ1Y3RfIityKyIoYSl7cmV0dXJuIG5ldyAiK3IrIihhKTt9IjtyZXR1cm4gbmV3IEZ1bmN0aW9uKGEpKCl9aWYoMD09PWUpe2E9ImZ1bmN0aW9uICIrcisiKGEsZCkge3RoaXMuZGF0YSA9IGE7dGhpcy5vZmZzZXQgPSBkfTt2YXIgcHJvdG89IityKyIucHJvdG90eXBlO3Byb3RvLmR0eXBlPSciK3QrIic7cHJvdG8uaW5kZXg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vZmZzZXR9O3Byb3RvLmRpbWVuc2lvbj0wO3Byb3RvLnNpemU9MTtwcm90by5zaGFwZT1wcm90by5zdHJpZGU9cHJvdG8ub3JkZXI9W107cHJvdG8ubG89cHJvdG8uaGk9cHJvdG8udHJhbnNwb3NlPXByb3RvLnN0ZXA9ZnVuY3Rpb24gIityKyJfY29weSgpIHtyZXR1cm4gbmV3ICIrcisiKHRoaXMuZGF0YSx0aGlzLm9mZnNldCl9O3Byb3RvLnBpY2s9ZnVuY3Rpb24gIityKyJfcGljaygpe3JldHVybiBUcml2aWFsQXJyYXkodGhpcy5kYXRhKTt9O3Byb3RvLnZhbHVlT2Y9cHJvdG8uZ2V0PWZ1bmN0aW9uICIrcisiX2dldCgpe3JldHVybiAiKyhpPyJ0aGlzLmRhdGEuZ2V0KHRoaXMub2Zmc2V0KSI6InRoaXMuZGF0YVt0aGlzLm9mZnNldF0iKSsifTtwcm90by5zZXQ9ZnVuY3Rpb24gIityKyJfc2V0KHYpe3JldHVybiAiKyhpPyJ0aGlzLmRhdGEuc2V0KHRoaXMub2Zmc2V0LHYpIjoidGhpcy5kYXRhW3RoaXMub2Zmc2V0XT12IikrIn07cmV0dXJuIGZ1bmN0aW9uIGNvbnN0cnVjdF8iK3IrIihhLGIsYyxkKXtyZXR1cm4gbmV3ICIrcisiKGEsZCl9IjtyZXR1cm4gbmV3IEZ1bmN0aW9uKCJUcml2aWFsQXJyYXkiLGEpKGNbdF1bMF0pfWE9WyIndXNlIHN0cmljdCciXTt2YXIgbz1uKGUpLGw9by5tYXAoZnVuY3Rpb24odCl7cmV0dXJuImkiK3R9KSx1PSJ0aGlzLm9mZnNldCsiK28ubWFwKGZ1bmN0aW9uKHQpe3JldHVybiJ0aGlzLnN0cmlkZVsiK3QrIl0qaSIrdH0pLmpvaW4oIisiKSxoPW8ubWFwKGZ1bmN0aW9uKHQpe3JldHVybiJiIit0fSkuam9pbigiLCIpLGY9by5tYXAoZnVuY3Rpb24odCl7cmV0dXJuImMiK3R9KS5qb2luKCIsIik7YS5wdXNoKCJmdW5jdGlvbiAiK3IrIihhLCIraCsiLCIrZisiLGQpe3RoaXMuZGF0YT1hIiwidGhpcy5zaGFwZT1bIitoKyJdIiwidGhpcy5zdHJpZGU9WyIrZisiXSIsInRoaXMub2Zmc2V0PWR8MH0iLCJ2YXIgcHJvdG89IityKyIucHJvdG90eXBlIiwicHJvdG8uZHR5cGU9JyIrdCsiJyIsInByb3RvLmRpbWVuc2lvbj0iK2UpLGEucHVzaCgiT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3RvLCdzaXplJyx7Z2V0OmZ1bmN0aW9uICIrcisiX3NpemUoKXtyZXR1cm4gIitvLm1hcChmdW5jdGlvbih0KXtyZXR1cm4idGhpcy5zaGFwZVsiK3QrIl0ifSkuam9pbigiKiIpLCJ9fSkiKSwxPT09ZT9hLnB1c2goInByb3RvLm9yZGVyPVswXSIpOihhLnB1c2goIk9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm90bywnb3JkZXInLHtnZXQ6IiksZTw0PyhhLnB1c2goImZ1bmN0aW9uICIrcisiX29yZGVyKCl7IiksMj09PWU/YS5wdXNoKCJyZXR1cm4gKE1hdGguYWJzKHRoaXMuc3RyaWRlWzBdKT5NYXRoLmFicyh0aGlzLnN0cmlkZVsxXSkpP1sxLDBdOlswLDFdfX0pIik6Mz09PWUmJmEucHVzaCgidmFyIHMwPU1hdGguYWJzKHRoaXMuc3RyaWRlWzBdKSxzMT1NYXRoLmFicyh0aGlzLnN0cmlkZVsxXSksczI9TWF0aC5hYnModGhpcy5zdHJpZGVbMl0pO2lmKHMwPnMxKXtpZihzMT5zMil7cmV0dXJuIFsyLDEsMF07fWVsc2UgaWYoczA+czIpe3JldHVybiBbMSwyLDBdO31lbHNle3JldHVybiBbMSwwLDJdO319ZWxzZSBpZihzMD5zMil7cmV0dXJuIFsyLDAsMV07fWVsc2UgaWYoczI+czEpe3JldHVybiBbMCwxLDJdO31lbHNle3JldHVybiBbMCwyLDFdO319fSkiKSk6YS5wdXNoKCJPUkRFUn0pIikpLGEucHVzaCgicHJvdG8uc2V0PWZ1bmN0aW9uICIrcisiX3NldCgiK2wuam9pbigiLCIpKyIsdil7IiksaT9hLnB1c2goInJldHVybiB0aGlzLmRhdGEuc2V0KCIrdSsiLHYpfSIpOmEucHVzaCgicmV0dXJuIHRoaXMuZGF0YVsiK3UrIl09dn0iKSxhLnB1c2goInByb3RvLmdldD1mdW5jdGlvbiAiK3IrIl9nZXQoIitsLmpvaW4oIiwiKSsiKXsiKSxpP2EucHVzaCgicmV0dXJuIHRoaXMuZGF0YS5nZXQoIit1KyIpfSIpOmEucHVzaCgicmV0dXJuIHRoaXMuZGF0YVsiK3UrIl19IiksYS5wdXNoKCJwcm90by5pbmRleD1mdW5jdGlvbiAiK3IrIl9pbmRleCgiLGwuam9pbigpLCIpe3JldHVybiAiK3UrIn0iKSxhLnB1c2goInByb3RvLmhpPWZ1bmN0aW9uICIrcisiX2hpKCIrbC5qb2luKCIsIikrIil7cmV0dXJuIG5ldyAiK3IrIih0aGlzLmRhdGEsIitvLm1hcChmdW5jdGlvbih0KXtyZXR1cm5bIih0eXBlb2YgaSIsdCwiIT09J251bWJlcid8fGkiLHQsIjwwKT90aGlzLnNoYXBlWyIsdCwiXTppIix0LCJ8MCJdLmpvaW4oIiIpfSkuam9pbigiLCIpKyIsIitvLm1hcChmdW5jdGlvbih0KXtyZXR1cm4idGhpcy5zdHJpZGVbIit0KyJdIn0pLmpvaW4oIiwiKSsiLHRoaXMub2Zmc2V0KX0iKTt2YXIgcD1vLm1hcChmdW5jdGlvbih0KXtyZXR1cm4iYSIrdCsiPXRoaXMuc2hhcGVbIit0KyJdIn0pLGQ9by5tYXAoZnVuY3Rpb24odCl7cmV0dXJuImMiK3QrIj10aGlzLnN0cmlkZVsiK3QrIl0ifSk7YS5wdXNoKCJwcm90by5sbz1mdW5jdGlvbiAiK3IrIl9sbygiK2wuam9pbigiLCIpKyIpe3ZhciBiPXRoaXMub2Zmc2V0LGQ9MCwiK3Auam9pbigiLCIpKyIsIitkLmpvaW4oIiwiKSk7Zm9yKHZhciBnPTA7ZzxlOysrZylhLnB1c2goImlmKHR5cGVvZiBpIitnKyI9PT0nbnVtYmVyJyYmaSIrZysiPj0wKXtkPWkiK2crInwwO2IrPWMiK2crIipkO2EiK2crIi09ZH0iKTthLnB1c2goInJldHVybiBuZXcgIityKyIodGhpcy5kYXRhLCIrby5tYXAoZnVuY3Rpb24odCl7cmV0dXJuImEiK3R9KS5qb2luKCIsIikrIiwiK28ubWFwKGZ1bmN0aW9uKHQpe3JldHVybiJjIit0fSkuam9pbigiLCIpKyIsYil9IiksYS5wdXNoKCJwcm90by5zdGVwPWZ1bmN0aW9uICIrcisiX3N0ZXAoIitsLmpvaW4oIiwiKSsiKXt2YXIgIitvLm1hcChmdW5jdGlvbih0KXtyZXR1cm4iYSIrdCsiPXRoaXMuc2hhcGVbIit0KyJdIn0pLmpvaW4oIiwiKSsiLCIrby5tYXAoZnVuY3Rpb24odCl7cmV0dXJuImIiK3QrIj10aGlzLnN0cmlkZVsiK3QrIl0ifSkuam9pbigiLCIpKyIsYz10aGlzLm9mZnNldCxkPTAsY2VpbD1NYXRoLmNlaWwiKTtmb3IoZz0wO2c8ZTsrK2cpYS5wdXNoKCJpZih0eXBlb2YgaSIrZysiPT09J251bWJlcicpe2Q9aSIrZysifDA7aWYoZDwwKXtjKz1iIitnKyIqKGEiK2crIi0xKTthIitnKyI9Y2VpbCgtYSIrZysiL2QpfWVsc2V7YSIrZysiPWNlaWwoYSIrZysiL2QpfWIiK2crIio9ZH0iKTthLnB1c2goInJldHVybiBuZXcgIityKyIodGhpcy5kYXRhLCIrby5tYXAoZnVuY3Rpb24odCl7cmV0dXJuImEiK3R9KS5qb2luKCIsIikrIiwiK28ubWFwKGZ1bmN0aW9uKHQpe3JldHVybiJiIit0fSkuam9pbigiLCIpKyIsYyl9Iik7dmFyIG09bmV3IEFycmF5KGUpLHY9bmV3IEFycmF5KGUpO2ZvcihnPTA7ZzxlOysrZyltW2ddPSJhW2kiK2crIl0iLHZbZ109ImJbaSIrZysiXSI7YS5wdXNoKCJwcm90by50cmFuc3Bvc2U9ZnVuY3Rpb24gIityKyJfdHJhbnNwb3NlKCIrbCsiKXsiK2wubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrIj0oIit0KyI9PT11bmRlZmluZWQ/IitlKyI6Iit0KyJ8MCkifSkuam9pbigiOyIpLCJ2YXIgYT10aGlzLnNoYXBlLGI9dGhpcy5zdHJpZGU7cmV0dXJuIG5ldyAiK3IrIih0aGlzLmRhdGEsIittLmpvaW4oIiwiKSsiLCIrdi5qb2luKCIsIikrIix0aGlzLm9mZnNldCl9IiksYS5wdXNoKCJwcm90by5waWNrPWZ1bmN0aW9uICIrcisiX3BpY2soIitsKyIpe3ZhciBhPVtdLGI9W10sYz10aGlzLm9mZnNldCIpO2ZvcihnPTA7ZzxlOysrZylhLnB1c2goImlmKHR5cGVvZiBpIitnKyI9PT0nbnVtYmVyJyYmaSIrZysiPj0wKXtjPShjK3RoaXMuc3RyaWRlWyIrZysiXSppIitnKyIpfDB9ZWxzZXthLnB1c2godGhpcy5zaGFwZVsiK2crIl0pO2IucHVzaCh0aGlzLnN0cmlkZVsiK2crIl0pfSIpO3JldHVybiBhLnB1c2goInZhciBjdG9yPUNUT1JfTElTVFthLmxlbmd0aCsxXTtyZXR1cm4gY3Rvcih0aGlzLmRhdGEsYSxiLGMpfSIpLGEucHVzaCgicmV0dXJuIGZ1bmN0aW9uIGNvbnN0cnVjdF8iK3IrIihkYXRhLHNoYXBlLHN0cmlkZSxvZmZzZXQpe3JldHVybiBuZXcgIityKyIoZGF0YSwiK28ubWFwKGZ1bmN0aW9uKHQpe3JldHVybiJzaGFwZVsiK3QrIl0ifSkuam9pbigiLCIpKyIsIitvLm1hcChmdW5jdGlvbih0KXtyZXR1cm4ic3RyaWRlWyIrdCsiXSJ9KS5qb2luKCIsIikrIixvZmZzZXQpfSIpLG5ldyBGdW5jdGlvbigiQ1RPUl9MSVNUIiwiT1JERVIiLGEuam9pbigiXG4iKSkoY1t0XSxzKX12YXIgYz17ZmxvYXQzMjpbXSxmbG9hdDY0OltdLGludDg6W10saW50MTY6W10saW50MzI6W10sdWludDg6W10sdWludDE2OltdLHVpbnQzMjpbXSxhcnJheTpbXSx1aW50OF9jbGFtcGVkOltdLGJ1ZmZlcjpbXSxnZW5lcmljOltdfTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7aWYodm9pZCAwPT09dClyZXR1cm4oMCxjLmFycmF5WzBdKShbXSk7Im51bWJlciI9PXR5cGVvZiB0JiYodD1bdF0pLHZvaWQgMD09PWUmJihlPVt0Lmxlbmd0aF0pO3ZhciBvPWUubGVuZ3RoO2lmKHZvaWQgMD09PXIpe3I9bmV3IEFycmF5KG8pO2Zvcih2YXIgcz1vLTEsdT0xO3M+PTA7LS1zKXJbc109dSx1Kj1lW3NdfWlmKHZvaWQgMD09PW4pZm9yKG49MCxzPTA7czxvOysrcylyW3NdPDAmJihuLT0oZVtzXS0xKSpyW3NdKTtmb3IodmFyIGg9ZnVuY3Rpb24odCl7aWYoaSh0KSlyZXR1cm4iYnVmZmVyIjtpZihhKXN3aXRjaChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkpe2Nhc2UiW29iamVjdCBGbG9hdDY0QXJyYXldIjpyZXR1cm4iZmxvYXQ2NCI7Y2FzZSJbb2JqZWN0IEZsb2F0MzJBcnJheV0iOnJldHVybiJmbG9hdDMyIjtjYXNlIltvYmplY3QgSW50OEFycmF5XSI6cmV0dXJuImludDgiO2Nhc2UiW29iamVjdCBJbnQxNkFycmF5XSI6cmV0dXJuImludDE2IjtjYXNlIltvYmplY3QgSW50MzJBcnJheV0iOnJldHVybiJpbnQzMiI7Y2FzZSJbb2JqZWN0IFVpbnQ4QXJyYXldIjpyZXR1cm4idWludDgiO2Nhc2UiW29iamVjdCBVaW50MTZBcnJheV0iOnJldHVybiJ1aW50MTYiO2Nhc2UiW29iamVjdCBVaW50MzJBcnJheV0iOnJldHVybiJ1aW50MzIiO2Nhc2UiW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iOnJldHVybiJ1aW50OF9jbGFtcGVkIn1yZXR1cm4gQXJyYXkuaXNBcnJheSh0KT8iYXJyYXkiOiJnZW5lcmljIn0odCksZj1jW2hdO2YubGVuZ3RoPD1vKzE7KWYucHVzaChsKGgsZi5sZW5ndGgtMSkpO3JldHVybigwLGZbbysxXSkodCxlLHIsbil9fSx7ImlvdGEtYXJyYXkiOjM4NCwiaXMtYnVmZmVyIjozODZ9XSw0MTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZG91YmxlLWJpdHMiKSxpPU1hdGgucG93KDIsLTEwNzQpLGE9LTE+Pj4wO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKGlzTmFOKHQpfHxpc05hTihlKSlyZXR1cm4gTmFOO2lmKHQ9PT1lKXJldHVybiB0O2lmKDA9PT10KXJldHVybiBlPDA/LWk6aTt2YXIgcj1uLmhpKHQpLG89bi5sbyh0KTtlPnQ9PXQ+MD9vPT09YT8ocis9MSxvPTApOm8rPTE6MD09PW8/KG89YSxyLT0xKTpvLT0xO3JldHVybiBuLnBhY2sobyxyKX19LHsiZG91YmxlLWJpdHMiOjE1MX1dLDQxOTpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPU1hdGguUEksaT1jKDEyMCk7ZnVuY3Rpb24gYSh0LGUscixuKXtyZXR1cm5bIkMiLHQsZSxyLG4scixuXX1mdW5jdGlvbiBvKHQsZSxyLG4saSxhKXtyZXR1cm5bIkMiLHQvMysyLzMqcixlLzMrMi8zKm4saS8zKzIvMypyLGEvMysyLzMqbixpLGFdfWZ1bmN0aW9uIHModCxlLHIsYSxvLGMsdSxoLGYscCl7aWYocClrPXBbMF0sTT1wWzFdLF89cFsyXSx3PXBbM107ZWxzZXt2YXIgZD1sKHQsZSwtbyk7dD1kLngsZT1kLnk7dmFyIGc9KHQtKGg9KGQ9bChoLGYsLW8pKS54KSkvMixtPShlLShmPWQueSkpLzIsdj1nKmcvKHIqcikrbSptLyhhKmEpO3Y+MSYmKHIqPXY9TWF0aC5zcXJ0KHYpLGEqPXYpO3ZhciB5PXIqcix4PWEqYSxiPShjPT11Py0xOjEpKk1hdGguc3FydChNYXRoLmFicygoeSp4LXkqbSptLXgqZypnKS8oeSptKm0reCpnKmcpKSk7Yj09MS8wJiYoYj0xKTt2YXIgXz1iKnIqbS9hKyh0K2gpLzIsdz1iKi1hKmcvcisoZStmKS8yLGs9TWF0aC5hc2luKCgoZS13KS9hKS50b0ZpeGVkKDkpKSxNPU1hdGguYXNpbigoKGYtdykvYSkudG9GaXhlZCg5KSk7KGs9dDxfP24tazprKTwwJiYoaz0yKm4rayksKE09aDxfP24tTTpNKTwwJiYoTT0yKm4rTSksdSYmaz5NJiYoay09MipuKSwhdSYmTT5rJiYoTS09MipuKX1pZihNYXRoLmFicyhNLWspPmkpe3ZhciBBPU0sVD1oLFM9ZjtNPWsraSoodSYmTT5rPzE6LTEpO3ZhciBFPXMoaD1fK3IqTWF0aC5jb3MoTSksZj13K2EqTWF0aC5zaW4oTSkscixhLG8sMCx1LFQsUyxbTSxBLF8sd10pfXZhciBDPU1hdGgudGFuKChNLWspLzQpLEw9NC8zKnIqQyx6PTQvMyphKkMsUD1bMip0LSh0K0wqTWF0aC5zaW4oaykpLDIqZS0oZS16Kk1hdGguY29zKGspKSxoK0wqTWF0aC5zaW4oTSksZi16Kk1hdGguY29zKE0pLGgsZl07aWYocClyZXR1cm4gUDtFJiYoUD1QLmNvbmNhdChFKSk7Zm9yKHZhciBJPTA7STxQLmxlbmd0aDspe3ZhciBPPWwoUFtJXSxQW0krMV0sbyk7UFtJKytdPU8ueCxQW0krK109Ty55fXJldHVybiBQfWZ1bmN0aW9uIGwodCxlLHIpe3JldHVybnt4OnQqTWF0aC5jb3MociktZSpNYXRoLnNpbihyKSx5OnQqTWF0aC5zaW4ocikrZSpNYXRoLmNvcyhyKX19ZnVuY3Rpb24gYyh0KXtyZXR1cm4gdCoobi8xODApfWUuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGUscj1bXSxuPTAsaT0wLGw9MCx1PTAsaD1udWxsLGY9bnVsbCxwPTAsZD0wLGc9MCxtPXQubGVuZ3RoO2c8bTtnKyspe3ZhciB2PXRbZ10seT12WzBdO3N3aXRjaCh5KXtjYXNlIk0iOmw9dlsxXSx1PXZbMl07YnJlYWs7Y2FzZSJBIjoodj1zKHAsZCx2WzFdLHZbMl0sYyh2WzNdKSx2WzRdLHZbNV0sdls2XSx2WzddKSkudW5zaGlmdCgiQyIpLHYubGVuZ3RoPjcmJihyLnB1c2godi5zcGxpY2UoMCw3KSksdi51bnNoaWZ0KCJDIikpO2JyZWFrO2Nhc2UiUyI6dmFyIHg9cCxiPWQ7IkMiIT1lJiYiUyIhPWV8fCh4Kz14LW4sYis9Yi1pKSx2PVsiQyIseCxiLHZbMV0sdlsyXSx2WzNdLHZbNF1dO2JyZWFrO2Nhc2UiVCI6IlEiPT1lfHwiVCI9PWU/KGg9MipwLWgsZj0yKmQtZik6KGg9cCxmPWQpLHY9byhwLGQsaCxmLHZbMV0sdlsyXSk7YnJlYWs7Y2FzZSJRIjpoPXZbMV0sZj12WzJdLHY9byhwLGQsdlsxXSx2WzJdLHZbM10sdls0XSk7YnJlYWs7Y2FzZSJMIjp2PWEocCxkLHZbMV0sdlsyXSk7YnJlYWs7Y2FzZSJIIjp2PWEocCxkLHZbMV0sZCk7YnJlYWs7Y2FzZSJWIjp2PWEocCxkLHAsdlsxXSk7YnJlYWs7Y2FzZSJaIjp2PWEocCxkLGwsdSl9ZT15LHA9dlt2Lmxlbmd0aC0yXSxkPXZbdi5sZW5ndGgtMV0sdi5sZW5ndGg+ND8obj12W3YubGVuZ3RoLTRdLGk9dlt2Lmxlbmd0aC0zXSk6KG49cCxpPWQpLHIucHVzaCh2KX1yZXR1cm4gcn19LHt9XSw0MjA6W2Z1bmN0aW9uKHQsZSxyKXtyLnZlcnRleE5vcm1hbHM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj1lLmxlbmd0aCxpPW5ldyBBcnJheShuKSxhPXZvaWQgMD09PXI/MWUtNjpyLG89MDtvPG47KytvKWlbb109WzAsMCwwXTtmb3Iobz0wO288dC5sZW5ndGg7KytvKWZvcih2YXIgcz10W29dLGw9MCxjPXNbcy5sZW5ndGgtMV0sdT1zWzBdLGg9MDtoPHMubGVuZ3RoOysraCl7bD1jLGM9dSx1PXNbKGgrMSklcy5sZW5ndGhdO2Zvcih2YXIgZj1lW2xdLHA9ZVtjXSxkPWVbdV0sZz1uZXcgQXJyYXkoMyksbT0wLHY9bmV3IEFycmF5KDMpLHk9MCx4PTA7eDwzOysreClnW3hdPWZbeF0tcFt4XSxtKz1nW3hdKmdbeF0sdlt4XT1kW3hdLXBbeF0seSs9dlt4XSp2W3hdO2lmKG0qeT5hKXt2YXIgYj1pW2NdLF89MS9NYXRoLnNxcnQobSp5KTtmb3IoeD0wO3g8MzsrK3gpe3ZhciB3PSh4KzEpJTMsaz0oeCsyKSUzO2JbeF0rPV8qKHZbd10qZ1trXS12W2tdKmdbd10pfX19Zm9yKG89MDtvPG47KytvKXtiPWlbb107dmFyIE09MDtmb3IoeD0wO3g8MzsrK3gpTSs9Ylt4XSpiW3hdO2lmKE0+YSlmb3IoXz0xL01hdGguc3FydChNKSx4PTA7eDwzOysreCliW3hdKj1fO2Vsc2UgZm9yKHg9MDt4PDM7Kyt4KWJbeF09MH1yZXR1cm4gaX0sci5mYWNlTm9ybWFscz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPXQubGVuZ3RoLGk9bmV3IEFycmF5KG4pLGE9dm9pZCAwPT09cj8xZS02OnIsbz0wO288bjsrK28pe2Zvcih2YXIgcz10W29dLGw9bmV3IEFycmF5KDMpLGM9MDtjPDM7KytjKWxbY109ZVtzW2NdXTt2YXIgdT1uZXcgQXJyYXkoMyksaD1uZXcgQXJyYXkoMyk7Zm9yKGM9MDtjPDM7KytjKXVbY109bFsxXVtjXS1sWzBdW2NdLGhbY109bFsyXVtjXS1sWzBdW2NdO3ZhciBmPW5ldyBBcnJheSgzKSxwPTA7Zm9yKGM9MDtjPDM7KytjKXt2YXIgZD0oYysxKSUzLGc9KGMrMiklMztmW2NdPXVbZF0qaFtnXS11W2ddKmhbZF0scCs9ZltjXSpmW2NdfXA9cD5hPzEvTWF0aC5zcXJ0KHApOjA7Zm9yKGM9MDtjPDM7KytjKWZbY10qPXA7aVtvXT1mfXJldHVybiBpfX0se31dLDQyMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLGk9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxhPU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dHJ5e2lmKCFPYmplY3QuYXNzaWduKXJldHVybiExO3ZhciB0PW5ldyBTdHJpbmcoImFiYyIpO2lmKHRbNV09ImRlIiwiNSI9PT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0KVswXSlyZXR1cm4hMTtmb3IodmFyIGU9e30scj0wO3I8MTA7cisrKWVbIl8iK1N0cmluZy5mcm9tQ2hhckNvZGUocildPXI7aWYoIjAxMjM0NTY3ODkiIT09T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZSkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBlW3RdfSkuam9pbigiIikpcmV0dXJuITE7dmFyIG49e307cmV0dXJuImFiY2RlZmdoaWprbG1ub3BxcnN0Ii5zcGxpdCgiIikuZm9yRWFjaChmdW5jdGlvbih0KXtuW3RdPXR9KSwiYWJjZGVmZ2hpamtsbW5vcHFyc3QiPT09T2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSxuKSkuam9pbigiIil9Y2F0Y2godCl7cmV0dXJuITF9fSgpP09iamVjdC5hc3NpZ246ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsbyxzPWZ1bmN0aW9uKHQpe2lmKG51bGw9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0LmFzc2lnbiBjYW5ub3QgYmUgY2FsbGVkIHdpdGggbnVsbCBvciB1bmRlZmluZWQiKTtyZXR1cm4gT2JqZWN0KHQpfSh0KSxsPTE7bDxhcmd1bWVudHMubGVuZ3RoO2wrKyl7Zm9yKHZhciBjIGluIHI9T2JqZWN0KGFyZ3VtZW50c1tsXSkpaS5jYWxsKHIsYykmJihzW2NdPXJbY10pO2lmKG4pe289bihyKTtmb3IodmFyIHU9MDt1PG8ubGVuZ3RoO3UrKylhLmNhbGwocixvW3VdKSYmKHNbb1t1XV09cltvW3VdXSl9fXJldHVybiBzfX0se31dLDQyMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwsYyl7dmFyIHU9ZSthK2M7aWYoaD4wKXt2YXIgaD1NYXRoLnNxcnQodSsxKTt0WzBdPS41KihvLWwpL2gsdFsxXT0uNSoocy1uKS9oLHRbMl09LjUqKHItYSkvaCx0WzNdPS41Kmh9ZWxzZXt2YXIgZj1NYXRoLm1heChlLGEsYyksaD1NYXRoLnNxcnQoMipmLXUrMSk7ZT49Zj8odFswXT0uNSpoLHRbMV09LjUqKGkrcikvaCx0WzJdPS41KihzK24pL2gsdFszXT0uNSooby1sKS9oKTphPj1mPyh0WzBdPS41KihyK2kpL2gsdFsxXT0uNSpoLHRbMl09LjUqKGwrbykvaCx0WzNdPS41KihzLW4pL2gpOih0WzBdPS41KihuK3MpL2gsdFsxXT0uNSoobytsKS9oLHRbMl09LjUqaCx0WzNdPS41KihyLWkpL2gpfXJldHVybiB0fX0se31dLDQyMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9KHQ9dHx8e30pLmNlbnRlcnx8WzAsMCwwXSxyPXQucm90YXRpb258fFswLDAsMCwxXSxuPXQucmFkaXVzfHwxO2U9W10uc2xpY2UuY2FsbChlLDAsMyksdShyPVtdLnNsaWNlLmNhbGwociwwLDQpLHIpO3ZhciBpPW5ldyBoKHIsZSxNYXRoLmxvZyhuKSk7aS5zZXREaXN0YW5jZUxpbWl0cyh0Lnpvb21NaW4sdC56b29tTWF4KSwoImV5ZSJpbiB0fHwidXAiaW4gdCkmJmkubG9va0F0KDAsdC5leWUsdC5jZW50ZXIsdC51cCk7cmV0dXJuIGl9O3ZhciBuPXQoImZpbHRlcmVkLXZlY3RvciIpLGk9dCgiZ2wtbWF0NC9sb29rQXQiKSxhPXQoImdsLW1hdDQvZnJvbVF1YXQiKSxvPXQoImdsLW1hdDQvaW52ZXJ0Iikscz10KCIuL2xpYi9xdWF0RnJvbUZyYW1lIik7ZnVuY3Rpb24gbCh0LGUscil7cmV0dXJuIE1hdGguc3FydChNYXRoLnBvdyh0LDIpK01hdGgucG93KGUsMikrTWF0aC5wb3cociwyKSl9ZnVuY3Rpb24gYyh0LGUscixuKXtyZXR1cm4gTWF0aC5zcXJ0KE1hdGgucG93KHQsMikrTWF0aC5wb3coZSwyKStNYXRoLnBvdyhyLDIpK01hdGgucG93KG4sMikpfWZ1bmN0aW9uIHUodCxlKXt2YXIgcj1lWzBdLG49ZVsxXSxpPWVbMl0sYT1lWzNdLG89YyhyLG4saSxhKTtvPjFlLTY/KHRbMF09ci9vLHRbMV09bi9vLHRbMl09aS9vLHRbM109YS9vKToodFswXT10WzFdPXRbMl09MCx0WzNdPTEpfWZ1bmN0aW9uIGgodCxlLHIpe3RoaXMucmFkaXVzPW4oW3JdKSx0aGlzLmNlbnRlcj1uKGUpLHRoaXMucm90YXRpb249bih0KSx0aGlzLmNvbXB1dGVkUmFkaXVzPXRoaXMucmFkaXVzLmN1cnZlKDApLHRoaXMuY29tcHV0ZWRDZW50ZXI9dGhpcy5jZW50ZXIuY3VydmUoMCksdGhpcy5jb21wdXRlZFJvdGF0aW9uPXRoaXMucm90YXRpb24uY3VydmUoMCksdGhpcy5jb21wdXRlZFVwPVsuMSwwLDBdLHRoaXMuY29tcHV0ZWRFeWU9Wy4xLDAsMF0sdGhpcy5jb21wdXRlZE1hdHJpeD1bLjEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDBdLHRoaXMucmVjYWxjTWF0cml4KDApfXZhciBmPWgucHJvdG90eXBlO2YubGFzdFQ9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5tYXgodGhpcy5yYWRpdXMubGFzdFQoKSx0aGlzLmNlbnRlci5sYXN0VCgpLHRoaXMucm90YXRpb24ubGFzdFQoKSl9LGYucmVjYWxjTWF0cml4PWZ1bmN0aW9uKHQpe3RoaXMucmFkaXVzLmN1cnZlKHQpLHRoaXMuY2VudGVyLmN1cnZlKHQpLHRoaXMucm90YXRpb24uY3VydmUodCk7dmFyIGU9dGhpcy5jb21wdXRlZFJvdGF0aW9uO3UoZSxlKTt2YXIgcj10aGlzLmNvbXB1dGVkTWF0cml4O2EocixlKTt2YXIgbj10aGlzLmNvbXB1dGVkQ2VudGVyLGk9dGhpcy5jb21wdXRlZEV5ZSxvPXRoaXMuY29tcHV0ZWRVcCxzPU1hdGguZXhwKHRoaXMuY29tcHV0ZWRSYWRpdXNbMF0pO2lbMF09blswXStzKnJbMl0saVsxXT1uWzFdK3Mqcls2XSxpWzJdPW5bMl0rcypyWzEwXSxvWzBdPXJbMV0sb1sxXT1yWzVdLG9bMl09cls5XTtmb3IodmFyIGw9MDtsPDM7KytsKXtmb3IodmFyIGM9MCxoPTA7aDwzOysraCljKz1yW2wrNCpoXSppW2hdO3JbMTIrbF09LWN9fSxmLmdldE1hdHJpeD1mdW5jdGlvbih0LGUpe3RoaXMucmVjYWxjTWF0cml4KHQpO3ZhciByPXRoaXMuY29tcHV0ZWRNYXRyaXg7aWYoZSl7Zm9yKHZhciBuPTA7bjwxNjsrK24pZVtuXT1yW25dO3JldHVybiBlfXJldHVybiByfSxmLmlkbGU9ZnVuY3Rpb24odCl7dGhpcy5jZW50ZXIuaWRsZSh0KSx0aGlzLnJhZGl1cy5pZGxlKHQpLHRoaXMucm90YXRpb24uaWRsZSh0KX0sZi5mbHVzaD1mdW5jdGlvbih0KXt0aGlzLmNlbnRlci5mbHVzaCh0KSx0aGlzLnJhZGl1cy5mbHVzaCh0KSx0aGlzLnJvdGF0aW9uLmZsdXNoKHQpfSxmLnBhbj1mdW5jdGlvbih0LGUscixuKXtlPWV8fDAscj1yfHwwLG49bnx8MCx0aGlzLnJlY2FsY01hdHJpeCh0KTt2YXIgaT10aGlzLmNvbXB1dGVkTWF0cml4LGE9aVsxXSxvPWlbNV0scz1pWzldLGM9bChhLG8scyk7YS89YyxvLz1jLHMvPWM7dmFyIHU9aVswXSxoPWlbNF0sZj1pWzhdLHA9dSphK2gqbytmKnMsZD1sKHUtPWEqcCxoLT1vKnAsZi09cypwKTt1Lz1kLGgvPWQsZi89ZDt2YXIgZz1pWzJdLG09aVs2XSx2PWlbMTBdLHk9ZyphK20qbyt2KnMseD1nKnUrbSpoK3YqZixiPWwoZy09eSphK3gqdSxtLT15Km8reCpoLHYtPXkqcyt4KmYpO2cvPWIsbS89Yix2Lz1iO3ZhciBfPXUqZSthKnIsdz1oKmUrbypyLGs9ZiplK3Mqcjt0aGlzLmNlbnRlci5tb3ZlKHQsXyx3LGspO3ZhciBNPU1hdGguZXhwKHRoaXMuY29tcHV0ZWRSYWRpdXNbMF0pO009TWF0aC5tYXgoMWUtNCxNK24pLHRoaXMucmFkaXVzLnNldCh0LE1hdGgubG9nKE0pKX0sZi5yb3RhdGU9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5yZWNhbGNNYXRyaXgodCksZT1lfHwwLHI9cnx8MDt2YXIgaT10aGlzLmNvbXB1dGVkTWF0cml4LGE9aVswXSxvPWlbNF0scz1pWzhdLHU9aVsxXSxoPWlbNV0sZj1pWzldLHA9aVsyXSxkPWlbNl0sZz1pWzEwXSxtPWUqYStyKnUsdj1lKm8rcipoLHk9ZSpzK3IqZix4PS0oZCp5LWcqdiksYj0tKGcqbS1wKnkpLF89LShwKnYtZCptKSx3PU1hdGguc3FydChNYXRoLm1heCgwLDEtTWF0aC5wb3coeCwyKS1NYXRoLnBvdyhiLDIpLU1hdGgucG93KF8sMikpKSxrPWMoeCxiLF8sdyk7az4xZS02Pyh4Lz1rLGIvPWssXy89ayx3Lz1rKTooeD1iPV89MCx3PTEpO3ZhciBNPXRoaXMuY29tcHV0ZWRSb3RhdGlvbixBPU1bMF0sVD1NWzFdLFM9TVsyXSxFPU1bM10sQz1BKncrRSp4K1QqXy1TKmIsTD1UKncrRSpiK1MqeC1BKl8sej1TKncrRSpfK0EqYi1UKngsUD1FKnctQSp4LVQqYi1TKl87aWYobil7eD1wLGI9ZCxfPWc7dmFyIEk9TWF0aC5zaW4obikvbCh4LGIsXyk7eCo9SSxiKj1JLF8qPUksUD1QKih3PU1hdGguY29zKGUpKS0oQz1DKncrUCp4K0wqXy16KmIpKngtKEw9TCp3K1AqYit6KngtQypfKSpiLSh6PXoqdytQKl8rQypiLUwqeCkqX312YXIgTz1jKEMsTCx6LFApO08+MWUtNj8oQy89TyxMLz1PLHovPU8sUC89Tyk6KEM9TD16PTAsUD0xKSx0aGlzLnJvdGF0aW9uLnNldCh0LEMsTCx6LFApfSxmLmxvb2tBdD1mdW5jdGlvbih0LGUscixuKXt0aGlzLnJlY2FsY01hdHJpeCh0KSxyPXJ8fHRoaXMuY29tcHV0ZWRDZW50ZXIsZT1lfHx0aGlzLmNvbXB1dGVkRXllLG49bnx8dGhpcy5jb21wdXRlZFVwO3ZhciBhPXRoaXMuY29tcHV0ZWRNYXRyaXg7aShhLGUscixuKTt2YXIgbz10aGlzLmNvbXB1dGVkUm90YXRpb247cyhvLGFbMF0sYVsxXSxhWzJdLGFbNF0sYVs1XSxhWzZdLGFbOF0sYVs5XSxhWzEwXSksdShvLG8pLHRoaXMucm90YXRpb24uc2V0KHQsb1swXSxvWzFdLG9bMl0sb1szXSk7Zm9yKHZhciBsPTAsYz0wO2M8MzsrK2MpbCs9TWF0aC5wb3cocltjXS1lW2NdLDIpO3RoaXMucmFkaXVzLnNldCh0LC41Kk1hdGgubG9nKE1hdGgubWF4KGwsMWUtNikpKSx0aGlzLmNlbnRlci5zZXQodCxyWzBdLHJbMV0sclsyXSl9LGYudHJhbnNsYXRlPWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMuY2VudGVyLm1vdmUodCxlfHwwLHJ8fDAsbnx8MCl9LGYuc2V0TWF0cml4PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5jb21wdXRlZFJvdGF0aW9uO3MocixlWzBdLGVbMV0sZVsyXSxlWzRdLGVbNV0sZVs2XSxlWzhdLGVbOV0sZVsxMF0pLHUocixyKSx0aGlzLnJvdGF0aW9uLnNldCh0LHJbMF0sclsxXSxyWzJdLHJbM10pO3ZhciBuPXRoaXMuY29tcHV0ZWRNYXRyaXg7byhuLGUpO3ZhciBpPW5bMTVdO2lmKE1hdGguYWJzKGkpPjFlLTYpe3ZhciBhPW5bMTJdL2ksbD1uWzEzXS9pLGM9blsxNF0vaTt0aGlzLnJlY2FsY01hdHJpeCh0KTt2YXIgaD1NYXRoLmV4cCh0aGlzLmNvbXB1dGVkUmFkaXVzWzBdKTt0aGlzLmNlbnRlci5zZXQodCxhLW5bMl0qaCxsLW5bNl0qaCxjLW5bMTBdKmgpLHRoaXMucmFkaXVzLmlkbGUodCl9ZWxzZSB0aGlzLmNlbnRlci5pZGxlKHQpLHRoaXMucmFkaXVzLmlkbGUodCl9LGYuc2V0RGlzdGFuY2U9ZnVuY3Rpb24odCxlKXtlPjAmJnRoaXMucmFkaXVzLnNldCh0LE1hdGgubG9nKGUpKX0sZi5zZXREaXN0YW5jZUxpbWl0cz1mdW5jdGlvbih0LGUpe3Q9dD4wP01hdGgubG9nKHQpOi0xLzAsZT1lPjA/TWF0aC5sb2coZSk6MS8wLGU9TWF0aC5tYXgoZSx0KSx0aGlzLnJhZGl1cy5ib3VuZHNbMF1bMF09dCx0aGlzLnJhZGl1cy5ib3VuZHNbMV1bMF09ZX0sZi5nZXREaXN0YW5jZUxpbWl0cz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnJhZGl1cy5ib3VuZHM7cmV0dXJuIHQ/KHRbMF09TWF0aC5leHAoZVswXVswXSksdFsxXT1NYXRoLmV4cChlWzFdWzBdKSx0KTpbTWF0aC5leHAoZVswXVswXSksTWF0aC5leHAoZVsxXVswXSldfSxmLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlY2FsY01hdHJpeCh0aGlzLmxhc3RUKCkpLHtjZW50ZXI6dGhpcy5jb21wdXRlZENlbnRlci5zbGljZSgpLHJvdGF0aW9uOnRoaXMuY29tcHV0ZWRSb3RhdGlvbi5zbGljZSgpLGRpc3RhbmNlOk1hdGgubG9nKHRoaXMuY29tcHV0ZWRSYWRpdXNbMF0pLHpvb21NaW46dGhpcy5yYWRpdXMuYm91bmRzWzBdWzBdLHpvb21NYXg6dGhpcy5yYWRpdXMuYm91bmRzWzFdWzBdfX0sZi5mcm9tSlNPTj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmxhc3RUKCkscj10LmNlbnRlcjtyJiZ0aGlzLmNlbnRlci5zZXQoZSxyWzBdLHJbMV0sclsyXSk7dmFyIG49dC5yb3RhdGlvbjtuJiZ0aGlzLnJvdGF0aW9uLnNldChlLG5bMF0sblsxXSxuWzJdLG5bM10pO3ZhciBpPXQuZGlzdGFuY2U7aSYmaT4wJiZ0aGlzLnJhZGl1cy5zZXQoZSxNYXRoLmxvZyhpKSksdGhpcy5zZXREaXN0YW5jZUxpbWl0cyh0Lnpvb21NaW4sdC56b29tTWF4KX19LHsiLi9saWIvcXVhdEZyb21GcmFtZSI6NDIyLCJmaWx0ZXJlZC12ZWN0b3IiOjIxNSwiZ2wtbWF0NC9mcm9tUXVhdCI6MjUxLCJnbC1tYXQ0L2ludmVydCI6MjU0LCJnbC1tYXQ0L2xvb2tBdCI6MjU1fV0sNDI0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInJlcGVhdC1zdHJpbmciKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBuKHI9InVuZGVmaW5lZCIhPXR5cGVvZiByP3IrIiI6IiAiLGUpK3R9fSx7InJlcGVhdC1zdHJpbmciOjQ2NH1dLDQyNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7aWYoInN0cmluZyIhPXR5cGVvZiB0KXJldHVyblt0XTt2YXIgcj1bdF07InN0cmluZyI9PXR5cGVvZiBlfHxBcnJheS5pc0FycmF5KGUpP2U9e2JyYWNrZXRzOmV9OmV8fChlPXt9KTt2YXIgbj1lLmJyYWNrZXRzP0FycmF5LmlzQXJyYXkoZS5icmFja2V0cyk/ZS5icmFja2V0czpbZS5icmFja2V0c106WyJ7fSIsIltdIiwiKCkiXSxpPWUuZXNjYXBlfHwiX19fIixhPSEhZS5mbGF0O24uZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT1uZXcgUmVnRXhwKFsiXFwiLHRbMF0sIlteXFwiLHRbMF0sIlxcIix0WzFdLCJdKlxcIix0WzFdXS5qb2luKCIiKSksbj1bXTtmdW5jdGlvbiBhKGUsYSxvKXt2YXIgcz1yLnB1c2goZS5zbGljZSh0WzBdLmxlbmd0aCwtdFsxXS5sZW5ndGgpKS0xO3JldHVybiBuLnB1c2gocyksaStzfXIuZm9yRWFjaChmdW5jdGlvbih0LG4pe2Zvcih2YXIgaSxvPTA7dCE9aTspaWYoaT10LHQ9dC5yZXBsYWNlKGUsYSksbysrPjFlNCl0aHJvdyBFcnJvcigiUmVmZXJlbmNlcyBoYXZlIGNpcmN1bGFyIGRlcGVuZGVuY3kuIFBsZWFzZSwgY2hlY2sgdGhlbS4iKTtyW25dPXR9KSxuPW4ucmV2ZXJzZSgpLHI9ci5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIG4uZm9yRWFjaChmdW5jdGlvbihyKXtlPWUucmVwbGFjZShuZXcgUmVnRXhwKCIoXFwiK2krcisiKD8hWzAtOV0pKSIsImciKSx0WzBdKyIkMSIrdFsxXSl9KSxlfSl9KTt2YXIgbz1uZXcgUmVnRXhwKCJcXCIraSsiKFswLTldKykiKTtyZXR1cm4gYT9yOmZ1bmN0aW9uIHQoZSxyLG4pe2Zvcih2YXIgaSxhPVtdLHM9MDtpPW8uZXhlYyhlKTspe2lmKHMrKz4xZTQpdGhyb3cgRXJyb3IoIkNpcmN1bGFyIHJlZmVyZW5jZXMgaW4gcGFyZW50aGVzaXMiKTthLnB1c2goZS5zbGljZSgwLGkuaW5kZXgpKSxhLnB1c2godChyW2lbMV1dLHIpKSxlPWUuc2xpY2UoaS5pbmRleCtpWzBdLmxlbmd0aCl9cmV0dXJuIGEucHVzaChlKSxhfShyWzBdLHIpfWZ1bmN0aW9uIGkodCxlKXtpZihlJiZlLmZsYXQpe3ZhciByLG49ZSYmZS5lc2NhcGV8fCJfX18iLGk9dFswXTtpZighaSlyZXR1cm4iIjtmb3IodmFyIGE9bmV3IFJlZ0V4cCgiXFwiK24rIihbMC05XSspIiksbz0wO2khPXI7KXtpZihvKys+MWU0KXRocm93IEVycm9yKCJDaXJjdWxhciByZWZlcmVuY2VzIGluICIrdCk7cj1pLGk9aS5yZXBsYWNlKGEscyl9cmV0dXJuIGl9cmV0dXJuIHQucmVkdWNlKGZ1bmN0aW9uIHQoZSxyKXtyZXR1cm4gQXJyYXkuaXNBcnJheShyKSYmKHI9ci5yZWR1Y2UodCwiIikpLGUrcn0sIiIpO2Z1bmN0aW9uIHMoZSxyKXtpZihudWxsPT10W3JdKXRocm93IEVycm9yKCJSZWZlcmVuY2UgIityKyJpcyB1bmRlZmluZWQiKTtyZXR1cm4gdFtyXX19ZnVuY3Rpb24gYSh0LGUpe3JldHVybiBBcnJheS5pc0FycmF5KHQpP2kodCxlKTpuKHQsZSl9YS5wYXJzZT1uLGEuc3RyaW5naWZ5PWksZS5leHBvcnRzPWF9LHt9XSw0MjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgicGljay1ieS1hbGlhcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZTthcmd1bWVudHMubGVuZ3RoPjEmJih0PWFyZ3VtZW50cyk7InN0cmluZyI9PXR5cGVvZiB0P3Q9dC5zcGxpdCgvXHMvKS5tYXAocGFyc2VGbG9hdCk6Im51bWJlciI9PXR5cGVvZiB0JiYodD1bdF0pO3QubGVuZ3RoJiYibnVtYmVyIj09dHlwZW9mIHRbMF0/ZT0xPT09dC5sZW5ndGg/e3dpZHRoOnRbMF0saGVpZ2h0OnRbMF0seDowLHk6MH06Mj09PXQubGVuZ3RoP3t3aWR0aDp0WzBdLGhlaWdodDp0WzFdLHg6MCx5OjB9Ont4OnRbMF0seTp0WzFdLHdpZHRoOnRbMl0tdFswXXx8MCxoZWlnaHQ6dFszXS10WzFdfHwwfTp0JiYodD1uKHQse2xlZnQ6InggbCBsZWZ0IExlZnQiLHRvcDoieSB0IHRvcCBUb3AiLHdpZHRoOiJ3IHdpZHRoIFcgV2lkdGgiLGhlaWdodDoiaCBoZWlnaHQgVyBXaWR0aCIsYm90dG9tOiJiIGJvdHRvbSBCb3R0b20iLHJpZ2h0OiJyIHJpZ2h0IFJpZ2h0In0pLGU9e3g6dC5sZWZ0fHwwLHk6dC50b3B8fDB9LG51bGw9PXQud2lkdGg/dC5yaWdodD9lLndpZHRoPXQucmlnaHQtZS54OmUud2lkdGg9MDplLndpZHRoPXQud2lkdGgsbnVsbD09dC5oZWlnaHQ/dC5ib3R0b20/ZS5oZWlnaHQ9dC5ib3R0b20tZS55OmUuaGVpZ2h0PTA6ZS5oZWlnaHQ9dC5oZWlnaHQpO3JldHVybiBlfX0seyJwaWNrLWJ5LWFsaWFzIjo0MzJ9XSw0Mjc6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9W107cmV0dXJuIHQucmVwbGFjZShpLGZ1bmN0aW9uKHQscixpKXt2YXIgbz1yLnRvTG93ZXJDYXNlKCk7Zm9yKGk9ZnVuY3Rpb24odCl7dmFyIGU9dC5tYXRjaChhKTtyZXR1cm4gZT9lLm1hcChOdW1iZXIpOltdfShpKSwibSI9PW8mJmkubGVuZ3RoPjImJihlLnB1c2goW3JdLmNvbmNhdChpLnNwbGljZSgwLDIpKSksbz0ibCIscj0ibSI9PXI/ImwiOiJMIik7Oyl7aWYoaS5sZW5ndGg9PW5bb10pcmV0dXJuIGkudW5zaGlmdChyKSxlLnB1c2goaSk7aWYoaS5sZW5ndGg8bltvXSl0aHJvdyBuZXcgRXJyb3IoIm1hbGZvcm1lZCBwYXRoIGRhdGEiKTtlLnB1c2goW3JdLmNvbmNhdChpLnNwbGljZSgwLG5bb10pKSl9fSksZX07dmFyIG49e2E6NyxjOjYsaDoxLGw6MixtOjIscTo0LHM6NCx0OjIsdjoxLHo6MH0saT0vKFthc3R2enFtaGxjXSkoW15hc3R2enFtaGxjXSopL2lnO3ZhciBhPS8tP1swLTldKlwuP1swLTldKyg/OmVbLStdP1xkKyk/L2lnfSx7fV0sNDI4OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZXx8KGU9WzAsIiJdKSx0PVN0cmluZyh0KTt2YXIgcj1wYXJzZUZsb2F0KHQsMTApO3JldHVybiBlWzBdPXIsZVsxXT10Lm1hdGNoKC9bXGQuXC1cK10qXHMqKC4qKS8pWzFdfHwiIixlfX0se31dLDQyOTpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbih0KXsoZnVuY3Rpb24oKXt2YXIgcixuLGksYSxvLHM7InVuZGVmaW5lZCIhPXR5cGVvZiBwZXJmb3JtYW5jZSYmbnVsbCE9PXBlcmZvcm1hbmNlJiZwZXJmb3JtYW5jZS5ub3c/ZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuIHBlcmZvcm1hbmNlLm5vdygpfToidW5kZWZpbmVkIiE9dHlwZW9mIHQmJm51bGwhPT10JiZ0LmhydGltZT8oZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuKHIoKS1vKS8xZTZ9LG49dC5ocnRpbWUsYT0ocj1mdW5jdGlvbigpe3ZhciB0O3JldHVybiAxZTkqKHQ9bigpKVswXSt0WzFdfSkoKSxzPTFlOSp0LnVwdGltZSgpLG89YS1zKTpEYXRlLm5vdz8oZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuIERhdGUubm93KCktaX0saT1EYXRlLm5vdygpKTooZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRUaW1lKCktaX0saT0obmV3IERhdGUpLmdldFRpbWUoKSl9KS5jYWxsKHRoaXMpfSkuY2FsbCh0aGlzLHQoIl9wcm9jZXNzIikpfSx7X3Byb2Nlc3M6NDQ5fV0sNDMwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aDtpZihlPG4pe2Zvcih2YXIgcj0xLGE9MDthPGU7KythKWZvcih2YXIgbz0wO288YTsrK28paWYodFthXTx0W29dKXI9LXI7ZWxzZSBpZih0W2FdPT09dFtvXSlyZXR1cm4gMDtyZXR1cm4gcn1mb3IodmFyIHM9aS5tYWxsb2NVaW50OChlKSxhPTA7YTxlOysrYSlzW2FdPTA7Zm9yKHZhciByPTEsYT0wO2E8ZTsrK2EpaWYoIXNbYV0pe3ZhciBsPTE7c1thXT0xO2Zvcih2YXIgbz10W2FdO28hPT1hO289dFtvXSl7aWYoc1tvXSlyZXR1cm4gaS5mcmVlVWludDgocyksMDtsKz0xLHNbb109MX0xJmx8fChyPS1yKX1yZXR1cm4gaS5mcmVlVWludDgocykscn07dmFyIG49MzIsaT10KCJ0eXBlZGFycmF5LXBvb2wiKX0seyJ0eXBlZGFycmF5LXBvb2wiOjUwN31dLDQzMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJ0eXBlZGFycmF5LXBvb2wiKSxpPXQoImludmVydC1wZXJtdXRhdGlvbiIpO3IucmFuaz1mdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aDtzd2l0Y2goZSl7Y2FzZSAwOmNhc2UgMTpyZXR1cm4gMDtjYXNlIDI6cmV0dXJuIHRbMV19dmFyIHIsYSxvLHM9bi5tYWxsb2NVaW50MzIoZSksbD1uLm1hbGxvY1VpbnQzMihlKSxjPTA7Zm9yKGkodCxsKSxvPTA7bzxlOysrbylzW29dPXRbb107Zm9yKG89ZS0xO28+MDstLW8pYT1sW29dLHI9c1tvXSxzW29dPXNbYV0sc1thXT1yLGxbb109bFtyXSxsW3JdPWEsYz0oYytyKSpvO3JldHVybiBuLmZyZWVVaW50MzIobCksbi5mcmVlVWludDMyKHMpLGN9LHIudW5yYW5rPWZ1bmN0aW9uKHQsZSxyKXtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiByfHxbXTtjYXNlIDE6cmV0dXJuIHI/KHJbMF09MCxyKTpbMF07Y2FzZSAyOnJldHVybiByPyhlPyhyWzBdPTAsclsxXT0xKTooclswXT0xLHJbMV09MCkscik6ZT9bMCwxXTpbMSwwXX12YXIgbixpLGEsbz0xO2Zvcigocj1yfHxuZXcgQXJyYXkodCkpWzBdPTAsYT0xO2E8dDsrK2EpclthXT1hLG89byphfDA7Zm9yKGE9dC0xO2E+MDstLWEpZT1lLShuPWUvb3wwKSpvfDAsbz1vL2F8MCxpPTB8clthXSxyW2FdPTB8cltuXSxyW25dPTB8aTtyZXR1cm4gcn19LHsiaW52ZXJ0LXBlcm11dGF0aW9uIjozODMsInR5cGVkYXJyYXktcG9vbCI6NTA3fV0sNDMyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG4sYSxvPXt9O2lmKCJzdHJpbmciPT10eXBlb2YgZSYmKGU9aShlKSksQXJyYXkuaXNBcnJheShlKSl7dmFyIHM9e307Zm9yKGE9MDthPGUubGVuZ3RoO2ErKylzW2VbYV1dPSEwO2U9c31mb3IobiBpbiBlKWVbbl09aShlW25dKTt2YXIgbD17fTtmb3IobiBpbiBlKXt2YXIgYz1lW25dO2lmKEFycmF5LmlzQXJyYXkoYykpZm9yKGE9MDthPGMubGVuZ3RoO2ErKyl7dmFyIHU9Y1thXTtpZihyJiYobFt1XT0hMCksdSBpbiB0KXtpZihvW25dPXRbdV0scilmb3IodmFyIGg9YTtoPGMubGVuZ3RoO2grKylsW2NbaF1dPSEwO2JyZWFrfX1lbHNlIG4gaW4gdCYmKGVbbl0mJihvW25dPXRbbl0pLHImJihsW25dPSEwKSl9aWYocilmb3IobiBpbiB0KWxbbl18fChvW25dPXRbbl0pO3JldHVybiBvfTt2YXIgbj17fTtmdW5jdGlvbiBpKHQpe3JldHVybiBuW3RdP25bdF06KCJzdHJpbmciPT10eXBlb2YgdCYmKHQ9blt0XT10LnNwbGl0KC9ccyosXHMqfFxzKy8pKSx0KX19LHt9XSw0MzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTB8ZS5sZW5ndGgsaT10Lmxlbmd0aCxhPVtuZXcgQXJyYXkociksbmV3IEFycmF5KHIpXSxvPTA7bzxyOysrbylhWzBdW29dPVtdLGFbMV1bb109W107Zm9yKHZhciBvPTA7bzxpOysrbyl7dmFyIHM9dFtvXTthWzBdW3NbMF1dLnB1c2gocyksYVsxXVtzWzFdXS5wdXNoKHMpfWZvcih2YXIgbD1bXSxvPTA7bzxyOysrbylhWzBdW29dLmxlbmd0aCthWzFdW29dLmxlbmd0aD09PTAmJmwucHVzaChbb10pO2Z1bmN0aW9uIGModCxlKXt2YXIgcj1hW2VdW3RbZV1dO3Iuc3BsaWNlKHIuaW5kZXhPZih0KSwxKX1mdW5jdGlvbiB1KHQscixpKXtmb3IodmFyIG8scyxsLHU9MDt1PDI7Kyt1KWlmKGFbdV1bcl0ubGVuZ3RoPjApe289YVt1XVtyXVswXSxsPXU7YnJlYWt9cz1vWzFebF07Zm9yKHZhciBoPTA7aDwyOysraClmb3IodmFyIGY9YVtoXVtyXSxwPTA7cDxmLmxlbmd0aDsrK3Ape3ZhciBkPWZbcF0sZz1kWzFeaF0sbT1uKGVbdF0sZVtyXSxlW3NdLGVbZ10pO20+MCYmKG89ZCxzPWcsbD1oKX1yZXR1cm4gaT9zOihvJiZjKG8sbCkscyl9ZnVuY3Rpb24gaCh0LHIpe3ZhciBpPWFbcl1bdF1bMF0sbz1bdF07YyhpLHIpO2Zvcih2YXIgcz1pWzFecl07Oyl7Zm9yKDtzIT09dDspby5wdXNoKHMpLHM9dShvW28ubGVuZ3RoLTJdLHMsITEpO2lmKGFbMF1bdF0ubGVuZ3RoK2FbMV1bdF0ubGVuZ3RoPT09MClicmVhazt2YXIgbD1vW28ubGVuZ3RoLTFdLGg9dCxmPW9bMV0scD11KGwsaCwhMCk7aWYobihlW2xdLGVbaF0sZVtmXSxlW3BdKTwwKWJyZWFrO28ucHVzaCh0KSxzPXUobCxoKX1yZXR1cm4gb31mdW5jdGlvbiBmKHQsZSl7cmV0dXJuIGVbMV09PT1lW2UubGVuZ3RoLTFdfWZvcih2YXIgbz0wO288cjsrK28pZm9yKHZhciBwPTA7cDwyOysrcCl7Zm9yKHZhciBkPVtdO2FbcF1bb10ubGVuZ3RoPjA7KXthWzBdW29dLmxlbmd0aDt2YXIgZz1oKG8scCk7ZihkLGcpP2QucHVzaC5hcHBseShkLGcpOihkLmxlbmd0aD4wJiZsLnB1c2goZCksZD1nKX1kLmxlbmd0aD4wJiZsLnB1c2goZCl9cmV0dXJuIGx9O3ZhciBuPXQoImNvbXBhcmUtYW5nbGUiKX0seyJjb21wYXJlLWFuZ2xlIjoxMTR9XSw0MzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW4odCxlLmxlbmd0aCksaT1uZXcgQXJyYXkoZS5sZW5ndGgpLGE9bmV3IEFycmF5KGUubGVuZ3RoKSxvPVtdLHM9MDtzPGUubGVuZ3RoOysrcyl7dmFyIGw9cltzXS5sZW5ndGg7YVtzXT1sLGlbc109ITAsbDw9MSYmby5wdXNoKHMpfWZvcig7by5sZW5ndGg+MDspe3ZhciBjPW8ucG9wKCk7aVtjXT0hMTtmb3IodmFyIHU9cltjXSxzPTA7czx1Lmxlbmd0aDsrK3Mpe3ZhciBoPXVbc107MD09LS1hW2hdJiZvLnB1c2goaCl9fWZvcih2YXIgZj1uZXcgQXJyYXkoZS5sZW5ndGgpLHA9W10scz0wO3M8ZS5sZW5ndGg7KytzKWlmKGlbc10pe3ZhciBjPXAubGVuZ3RoO2Zbc109YyxwLnB1c2goZVtzXSl9ZWxzZSBmW3NdPS0xO2Zvcih2YXIgZD1bXSxzPTA7czx0Lmxlbmd0aDsrK3Mpe3ZhciBnPXRbc107aVtnWzBdXSYmaVtnWzFdXSYmZC5wdXNoKFtmW2dbMF1dLGZbZ1sxXV1dKX1yZXR1cm5bZCxwXX07dmFyIG49dCgiZWRnZXMtdG8tYWRqYWNlbmN5LWxpc3QiKX0seyJlZGdlcy10by1hZGphY2VuY3ktbGlzdCI6MTU2fV0sNDM1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWModCxlKTt0PXJbMF07Zm9yKHZhciBoPShlPXJbMV0pLmxlbmd0aCxmPSh0Lmxlbmd0aCxuKHQsZS5sZW5ndGgpKSxwPTA7cDxoOysrcClpZihmW3BdLmxlbmd0aCUyPT0xKXRocm93IG5ldyBFcnJvcigicGxhbmFyLWdyYXBoLXRvLXBvbHlsaW5lOiBncmFwaCBtdXN0IGJlIG1hbmlmb2xkIik7dmFyIGQ9aSh0LGUpO2Zvcih2YXIgZz0oZD1kLmZpbHRlcihmdW5jdGlvbih0KXtmb3IodmFyIHI9dC5sZW5ndGgsbj1bMF0saT0wO2k8cjsrK2kpe3ZhciBhPWVbdFtpXV0sbD1lW3RbKGkrMSklcl1dLGM9bygtYVswXSxhWzFdKSx1PW8oLWFbMF0sbFsxXSksaD1vKGxbMF0sYVsxXSksZj1vKGxbMF0sbFsxXSk7bj1zKG4scyhzKGMsdSkscyhoLGYpKSl9cmV0dXJuIG5bbi5sZW5ndGgtMV0+MH0pKS5sZW5ndGgsbT1uZXcgQXJyYXkoZyksdj1uZXcgQXJyYXkoZykscD0wO3A8ZzsrK3Ape21bcF09cDt2YXIgeT1uZXcgQXJyYXkoZykseD1kW3BdLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gZVt0XX0pLGI9YShbeF0pLF89MDt0OmZvcih2YXIgdz0wO3c8ZzsrK3cpaWYoeVt3XT0wLHAhPT13KXtmb3IodmFyIGs9ZFt3XSxNPWsubGVuZ3RoLEE9MDtBPE07KytBKXt2YXIgVD1iKGVba1tBXV0pO2lmKDAhPT1UKXtUPDAmJih5W3ddPTEsXys9MSk7Y29udGludWUgdH19eVt3XT0xLF8rPTF9dltwXT1bXyxwLHldfXYuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiBlWzBdLXRbMF19KTtmb3IodmFyIHA9MDtwPGc7KytwKWZvcih2YXIgeT12W3BdLFM9eVsxXSxFPXlbMl0sdz0wO3c8ZzsrK3cpRVt3XSYmKG1bd109Uyk7Zm9yKHZhciBDPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodCkscj0wO3I8dDsrK3IpZVtyXT1bXTtyZXR1cm4gZX0oZykscD0wO3A8ZzsrK3ApQ1twXS5wdXNoKG1bcF0pLENbbVtwXV0ucHVzaChwKTtmb3IodmFyIEw9e30sej11KGgsITEpLHA9MDtwPGc7KytwKWZvcih2YXIgaz1kW3BdLE09ay5sZW5ndGgsdz0wO3c8TTsrK3cpe3ZhciBQPWtbd10sST1rWyh3KzEpJU1dLE89TWF0aC5taW4oUCxJKSsiOiIrTWF0aC5tYXgoUCxJKTtpZihPIGluIEwpe3ZhciBEPUxbT107Q1tEXS5wdXNoKHApLENbcF0ucHVzaChEKSx6W1BdPXpbSV09ITB9ZWxzZSBMW09dPXB9ZnVuY3Rpb24gUih0KXtmb3IodmFyIGU9dC5sZW5ndGgscj0wO3I8ZTsrK3IpaWYoIXpbdFtyXV0pcmV0dXJuITE7cmV0dXJuITB9Zm9yKHZhciBCPVtdLEY9dShnLC0xKSxwPTA7cDxnOysrcCltW3BdIT09cHx8UihkW3BdKT9GW3BdPS0xOihCLnB1c2gocCksRltwXT0wKTt2YXIgcj1bXTtmb3IoO0IubGVuZ3RoPjA7KXt2YXIgTj1CLnBvcCgpLGo9Q1tOXTtsKGosZnVuY3Rpb24odCxlKXtyZXR1cm4gdC1lfSk7dmFyIFYsVT1qLmxlbmd0aCxxPUZbTl07aWYoMD09PXEpe3ZhciBrPWRbTl07Vj1ba119Zm9yKHZhciBwPTA7cDxVOysrcCl7dmFyIEg9altwXTtpZighKEZbSF0+PTApJiYoRltIXT0xXnEsQi5wdXNoKEgpLDA9PT1xKSl7dmFyIGs9ZFtIXTtSKGspfHwoay5yZXZlcnNlKCksVi5wdXNoKGspKX19MD09PXEmJnIucHVzaChWKX1yZXR1cm4gcn07dmFyIG49dCgiZWRnZXMtdG8tYWRqYWNlbmN5LWxpc3QiKSxpPXQoInBsYW5hci1kdWFsIiksYT10KCJwb2ludC1pbi1iaWctcG9seWdvbiIpLG89dCgidHdvLXByb2R1Y3QiKSxzPXQoInJvYnVzdC1zdW0iKSxsPXQoInVuaXEiKSxjPXQoIi4vbGliL3RyaW0tbGVhdmVzIik7ZnVuY3Rpb24gdSh0LGUpe2Zvcih2YXIgcj1uZXcgQXJyYXkodCksbj0wO248dDsrK24pcltuXT1lO3JldHVybiByfX0seyIuL2xpYi90cmltLWxlYXZlcyI6NDM0LCJlZGdlcy10by1hZGphY2VuY3ktbGlzdCI6MTU2LCJwbGFuYXItZHVhbCI6NDMzLCJwb2ludC1pbi1iaWctcG9seWdvbiI6NDM5LCJyb2J1c3Qtc3VtIjo0NzYsInR3by1wcm9kdWN0Ijo1MDUsdW5pcTo1MDl9XSw0MzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4vcXVhZCIpfSx7Ii4vcXVhZCI6NDM4fV0sNDM3OltmdW5jdGlvbih0LGUscil7YXJndW1lbnRzWzRdWzk4XVswXS5hcHBseShyLGFyZ3VtZW50cyl9LHtkdXA6OTh9XSw0Mzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiYmluYXJ5LXNlYXJjaC1ib3VuZHMiKSxpPXQoImNsYW1wIiksYT10KCJwYXJzZS1yZWN0Iiksbz10KCJhcnJheS1ib3VuZHMiKSxzPXQoInBpY2stYnktYWxpYXMiKSxsPXQoImRlZmluZWQiKSxjPXQoImZsYXR0ZW4tdmVydGV4LWRhdGEiKSx1PXQoImlzLW9iaiIpLGg9dCgiZHR5cGUiKSxmPXQoIm1hdGgtbG9nMiIpO2Z1bmN0aW9uIHAodCxlKXtmb3IodmFyIHI9ZVswXSxuPWVbMV0sYT0xLyhlWzJdLXIpLG89MS8oZVszXS1uKSxzPW5ldyBBcnJheSh0Lmxlbmd0aCksbD0wLGM9dC5sZW5ndGgvMjtsPGM7bCsrKXNbMipsXT1pKCh0WzIqbF0tcikqYSwwLDEpLHNbMipsKzFdPWkoKHRbMipsKzFdLW4pKm8sMCwxKTtyZXR1cm4gc31lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtlfHwoZT17fSksdD1jKHQsImZsb2F0NjQiKSxlPXMoZSx7Ym91bmRzOiJyYW5nZSBib3VuZHMgZGF0YUJveCBkYXRhYm94IixtYXhEZXB0aDoiZGVwdGggbWF4RGVwdGggbWF4ZGVwdGggbGV2ZWwgbWF4TGV2ZWwgbWF4bGV2ZWwgbGV2ZWxzIixkdHlwZToidHlwZSBkdHlwZSBmb3JtYXQgb3V0IGRzdCBvdXRwdXQgZGVzdGluYXRpb24ifSk7dmFyIHI9bChlLm1heERlcHRoLDI1NSksaT1sKGUuYm91bmRzLG8odCwyKSk7aVswXT09PWlbMl0mJmlbMl0rKyxpWzFdPT09aVszXSYmaVszXSsrO3ZhciBkLGc9cCh0LGkpLG09dC5sZW5ndGg+Pj4xO2UuZHR5cGV8fChlLmR0eXBlPSJhcnJheSIpLCJzdHJpbmciPT10eXBlb2YgZS5kdHlwZT9kPW5ldyhoKGUuZHR5cGUpKShtKTplLmR0eXBlJiYoZD1lLmR0eXBlLEFycmF5LmlzQXJyYXkoZCkmJihkLmxlbmd0aD1tKSk7Zm9yKHZhciB2PTA7djxtOysrdilkW3ZdPXY7dmFyIHk9W10seD1bXSxiPVtdLF89W107IWZ1bmN0aW9uIHQoZSxuLGksYSxvLHMpe2lmKCFhLmxlbmd0aClyZXR1cm4gbnVsbDt2YXIgbD15W29dfHwoeVtvXT1bXSk7dmFyIGM9YltvXXx8KGJbb109W10pO3ZhciB1PXhbb118fCh4W29dPVtdKTt2YXIgaD1sLmxlbmd0aDtvKys7aWYobz5yKXtmb3IodmFyIGY9MDtmPGEubGVuZ3RoO2YrKylsLnB1c2goYVtmXSksYy5wdXNoKHMpLHUucHVzaChudWxsLG51bGwsbnVsbCxudWxsKTtyZXR1cm4gaH1sLnB1c2goYVswXSk7Yy5wdXNoKHMpO2lmKGEubGVuZ3RoPD0xKXJldHVybiB1LnB1c2gobnVsbCxudWxsLG51bGwsbnVsbCksaDt2YXIgcD0uNSppO3ZhciBkPWUrcCxtPW4rcDt2YXIgdj1bXSxfPVtdLHc9W10saz1bXTtmb3IodmFyIE09MSxBPWEubGVuZ3RoO008QTtNKyspe3ZhciBUPWFbTV0sUz1nWzIqVF0sRT1nWzIqVCsxXTtTPGQ/RTxtP3YucHVzaChUKTpfLnB1c2goVCk6RTxtP3cucHVzaChUKTprLnB1c2goVCl9czw8PTI7dS5wdXNoKHQoZSxuLHAsdixvLHMpLHQoZSxtLHAsXyxvLHMrMSksdChkLG4scCx3LG8scysyKSx0KGQsbSxwLGssbyxzKzMpKTtyZXR1cm4gaH0oMCwwLDEsZCwwLDEpO2Zvcih2YXIgdz0wLGs9MDtrPHkubGVuZ3RoO2srKyl7dmFyIE09eVtrXTtpZihkLnNldClkLnNldChNLHcpO2Vsc2UgZm9yKHZhciBBPTAsVD1NLmxlbmd0aDtBPFQ7QSsrKWRbQSt3XT1NW0FdO3ZhciBTPXcreVtrXS5sZW5ndGg7X1trXT1bdyxTXSx3PVN9cmV0dXJuIGQucmFuZ2U9ZnVuY3Rpb24oKXt2YXIgZSxyPVtdLG89YXJndW1lbnRzLmxlbmd0aDtmb3IoO28tLTspcltvXT1hcmd1bWVudHNbb107aWYodShyW3IubGVuZ3RoLTFdKSl7dmFyIGM9ci5wb3AoKTtyLmxlbmd0aHx8bnVsbD09Yy54JiZudWxsPT1jLmwmJm51bGw9PWMubGVmdHx8KHI9W2NdLGU9e30pLGU9cyhjLHtsZXZlbDoibGV2ZWwgbWF4TGV2ZWwiLGQ6ImQgZGlhbSBkaWFtZXRlciByIHJhZGl1cyBweCBweFNpemUgcGl4ZWwgcGl4ZWxTaXplIG1heEQgc2l6ZSBtaW5TaXplIixsb2Q6ImxvZCBkZXRhaWxzIHJhbmdlcyBvZmZzZXRzIn0pfWVsc2UgZT17fTtyLmxlbmd0aHx8KHI9aSk7dmFyIGg9YS5hcHBseSh2b2lkIDAsciksZD1bTWF0aC5taW4oaC54LGgueCtoLndpZHRoKSxNYXRoLm1pbihoLnksaC55K2guaGVpZ2h0KSxNYXRoLm1heChoLngsaC54K2gud2lkdGgpLE1hdGgubWF4KGgueSxoLnkraC5oZWlnaHQpXSxnPWRbMF0sbT1kWzFdLHY9ZFsyXSx3PWRbM10saz1wKFtnLG0sdix3XSxpKSxNPWtbMF0sQT1rWzFdLFQ9a1syXSxTPWtbM10sQz1sKGUubGV2ZWwseS5sZW5ndGgpO2lmKG51bGwhPWUuZCl7dmFyIEw7Im51bWJlciI9PXR5cGVvZiBlLmQ/TD1bZS5kLGUuZF06ZS5kLmxlbmd0aCYmKEw9ZS5kKSxDPU1hdGgubWluKE1hdGgubWF4KE1hdGguY2VpbCgtZihNYXRoLmFicyhMWzBdKS8oaVsyXS1pWzBdKSkpLE1hdGguY2VpbCgtZihNYXRoLmFicyhMWzFdKS8oaVszXS1pWzFdKSkpKSxDKX1pZihDPU1hdGgubWluKEMseS5sZW5ndGgpLGUubG9kKXJldHVybiBmdW5jdGlvbih0LGUscixpLGEpe2Zvcih2YXIgbz1bXSxzPTA7czxhO3MrKyl7dmFyIGw9YltzXSxjPV9bc11bMF0sdT1FKHQsZSxzKSxoPUUocixpLHMpLGY9bi5nZShsLHUpLHA9bi5ndChsLGgsZixsLmxlbmd0aC0xKTtvW3NdPVtmK2MscCtjXX1yZXR1cm4gb30oTSxBLFQsUyxDKTt2YXIgej1bXTtyZXR1cm4gZnVuY3Rpb24gZShyLG4saSxhLG8scyl7aWYobnVsbCE9PW8mJm51bGwhPT1zKXt2YXIgbD1yK2ksYz1uK2k7aWYoIShNPmx8fEE+Y3x8VDxyfHxTPG58fGE+PUN8fG89PT1zKSl7dmFyIHU9eVthXTt2b2lkIDA9PT1zJiYocz11Lmxlbmd0aCk7Zm9yKHZhciBoPW87aDxzO2grKyl7dmFyIGY9dVtoXSxwPXRbMipmXSxkPXRbMipmKzFdO3A+PWcmJnA8PXYmJmQ+PW0mJmQ8PXcmJnoucHVzaChmKX12YXIgYj14W2FdLF89Yls0Km8rMF0saz1iWzQqbysxXSxFPWJbNCpvKzJdLEw9Yls0Km8rM10sUD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1udWxsLG49MDtudWxsPT09cjspaWYocj10WzQqZStuXSwrK24+dC5sZW5ndGgpcmV0dXJuIG51bGw7cmV0dXJuIHJ9KGIsbysxKSxJPS41KmksTz1hKzE7ZShyLG4sSSxPLF8sa3x8RXx8THx8UCksZShyLG4rSSxJLE8sayxFfHxMfHxQKSxlKHIrSSxuLEksTyxFLEx8fFApLGUocitJLG4rSSxJLE8sTCxQKX19fSgwLDAsMSwwLDAsMSksen0sZDtmdW5jdGlvbiBFKHQsZSxyKXtmb3IodmFyIG49MSxpPS41LGE9LjUsbz0uNSxzPTA7czxyO3MrKyluPDw9MixuKz10PGk/ZTxhPzA6MTplPGE/MjozLG8qPS41LGkrPXQ8aT8tbzpvLGErPWU8YT8tbzpvO3JldHVybiBufX19LHsiYXJyYXktYm91bmRzIjo1NiwiYmluYXJ5LXNlYXJjaC1ib3VuZHMiOjQzNyxjbGFtcDoxMDIsZGVmaW5lZDoxNDgsZHR5cGU6MTUzLCJmbGF0dGVuLXZlcnRleC1kYXRhIjoyMTYsImlzLW9iaiI6Mzg5LCJtYXRoLWxvZzIiOjM5OSwicGFyc2UtcmVjdCI6NDI2LCJwaWNrLWJ5LWFsaWFzIjo0MzJ9XSw0Mzk6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQubGVuZ3RoLHI9W10sYT1bXSxzPTA7czxlOysrcylmb3IodmFyIHU9dFtzXSxoPXUubGVuZ3RoLGY9aC0xLHA9MDtwPGg7Zj1wKyspe3ZhciBkPXVbZl0sZz11W3BdO2RbMF09PT1nWzBdP2EucHVzaChbZCxnXSk6ci5wdXNoKFtkLGddKX1pZigwPT09ci5sZW5ndGgpcmV0dXJuIDA9PT1hLmxlbmd0aD9jOihtPWwoYSksZnVuY3Rpb24odCl7cmV0dXJuIG0odFswXSx0WzFdKT8wOjF9KTt2YXIgbTt2YXIgdj1pKHIpLHk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIGk9by5sZShlLHJbMF0pO2lmKGk8MClyZXR1cm4gMTt2YXIgYT10W2ldO2lmKCFhKXtpZighKGk+MCYmZVtpXT09PXJbMF0pKXJldHVybiAxO2E9dFtpLTFdfWZvcih2YXIgcz0xO2E7KXt2YXIgbD1hLmtleSxjPW4ocixsWzBdLGxbMV0pO2lmKGxbMF1bMF08bFsxXVswXSlpZihjPDApYT1hLmxlZnQ7ZWxzZXtpZighKGM+MCkpcmV0dXJuIDA7cz0tMSxhPWEucmlnaHR9ZWxzZSBpZihjPjApYT1hLmxlZnQ7ZWxzZXtpZighKGM8MCkpcmV0dXJuIDA7cz0xLGE9YS5yaWdodH19cmV0dXJuIHN9fSh2LnNsYWJzLHYuY29vcmRpbmF0ZXMpO3JldHVybiAwPT09YS5sZW5ndGg/eTpmdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gdChyWzBdLHJbMV0pPzA6ZShyKX19KGwoYSkseSl9O3ZhciBuPXQoInJvYnVzdC1vcmllbnRhdGlvbiIpWzNdLGk9dCgic2xhYi1kZWNvbXBvc2l0aW9uIiksYT10KCJpbnRlcnZhbC10cmVlLTFkIiksbz10KCJiaW5hcnktc2VhcmNoLWJvdW5kcyIpO2Z1bmN0aW9uIHMoKXtyZXR1cm4hMH1mdW5jdGlvbiBsKHQpe2Zvcih2YXIgZT17fSxyPTA7cjx0Lmxlbmd0aDsrK3Ipe3ZhciBuPXRbcl0saT1uWzBdWzBdLG89blswXVsxXSxsPW5bMV1bMV0sYz1bTWF0aC5taW4obyxsKSxNYXRoLm1heChvLGwpXTtpIGluIGU/ZVtpXS5wdXNoKGMpOmVbaV09W2NdfXZhciB1PXt9LGg9T2JqZWN0LmtleXMoZSk7Zm9yKHI9MDtyPGgubGVuZ3RoOysrcil7dmFyIGY9ZVtoW3JdXTt1W2hbcl1dPWEoZil9cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLHIpe3ZhciBuPXRbZV07cmV0dXJuISFuJiYhIW4ucXVlcnlQb2ludChyLHMpfX0odSl9ZnVuY3Rpb24gYyh0KXtyZXR1cm4gMX19LHsiYmluYXJ5LXNlYXJjaC1ib3VuZHMiOjc5LCJpbnRlcnZhbC10cmVlLTFkIjozODIsInJvYnVzdC1vcmllbnRhdGlvbiI6NDcxLCJzbGFiLWRlY29tcG9zaXRpb24iOjQ4N31dLDQ0MDpbZnVuY3Rpb24odCxlLHIpe3ZhciBuLGk9dCgiLi9saWIvYnVpbGQtbG9nIiksYT10KCIuL2xpYi9lcHNpbG9uIiksbz10KCIuL2xpYi9pbnRlcnNlY3RlciIpLHM9dCgiLi9saWIvc2VnbWVudC1jaGFpbmVyIiksbD10KCIuL2xpYi9zZWdtZW50LXNlbGVjdG9yIiksYz10KCIuL2xpYi9nZW9qc29uIiksdT0hMSxoPWEoKTtmdW5jdGlvbiBmKHQsZSxyKXt2YXIgaT1uLnNlZ21lbnRzKHQpLGE9bi5zZWdtZW50cyhlKSxvPXIobi5jb21iaW5lKGksYSkpO3JldHVybiBuLnBvbHlnb24obyl9bj17YnVpbGRMb2c6ZnVuY3Rpb24odCl7cmV0dXJuITA9PT10P3U9aSgpOiExPT09dCYmKHU9ITEpLCExIT09dSYmdS5saXN0fSxlcHNpbG9uOmZ1bmN0aW9uKHQpe3JldHVybiBoLmVwc2lsb24odCl9LHNlZ21lbnRzOmZ1bmN0aW9uKHQpe3ZhciBlPW8oITAsaCx1KTtyZXR1cm4gdC5yZWdpb25zLmZvckVhY2goZS5hZGRSZWdpb24pLHtzZWdtZW50czplLmNhbGN1bGF0ZSh0LmludmVydGVkKSxpbnZlcnRlZDp0LmludmVydGVkfX0sY29tYmluZTpmdW5jdGlvbih0LGUpe3JldHVybntjb21iaW5lZDpvKCExLGgsdSkuY2FsY3VsYXRlKHQuc2VnbWVudHMsdC5pbnZlcnRlZCxlLnNlZ21lbnRzLGUuaW52ZXJ0ZWQpLGludmVydGVkMTp0LmludmVydGVkLGludmVydGVkMjplLmludmVydGVkfX0sc2VsZWN0VW5pb246ZnVuY3Rpb24odCl7cmV0dXJue3NlZ21lbnRzOmwudW5pb24odC5jb21iaW5lZCx1KSxpbnZlcnRlZDp0LmludmVydGVkMXx8dC5pbnZlcnRlZDJ9fSxzZWxlY3RJbnRlcnNlY3Q6ZnVuY3Rpb24odCl7cmV0dXJue3NlZ21lbnRzOmwuaW50ZXJzZWN0KHQuY29tYmluZWQsdSksaW52ZXJ0ZWQ6dC5pbnZlcnRlZDEmJnQuaW52ZXJ0ZWQyfX0sc2VsZWN0RGlmZmVyZW5jZTpmdW5jdGlvbih0KXtyZXR1cm57c2VnbWVudHM6bC5kaWZmZXJlbmNlKHQuY29tYmluZWQsdSksaW52ZXJ0ZWQ6dC5pbnZlcnRlZDEmJiF0LmludmVydGVkMn19LHNlbGVjdERpZmZlcmVuY2VSZXY6ZnVuY3Rpb24odCl7cmV0dXJue3NlZ21lbnRzOmwuZGlmZmVyZW5jZVJldih0LmNvbWJpbmVkLHUpLGludmVydGVkOiF0LmludmVydGVkMSYmdC5pbnZlcnRlZDJ9fSxzZWxlY3RYb3I6ZnVuY3Rpb24odCl7cmV0dXJue3NlZ21lbnRzOmwueG9yKHQuY29tYmluZWQsdSksaW52ZXJ0ZWQ6dC5pbnZlcnRlZDEhPT10LmludmVydGVkMn19LHBvbHlnb246ZnVuY3Rpb24odCl7cmV0dXJue3JlZ2lvbnM6cyh0LnNlZ21lbnRzLGgsdSksaW52ZXJ0ZWQ6dC5pbnZlcnRlZH19LHBvbHlnb25Gcm9tR2VvSlNPTjpmdW5jdGlvbih0KXtyZXR1cm4gYy50b1BvbHlnb24obix0KX0scG9seWdvblRvR2VvSlNPTjpmdW5jdGlvbih0KXtyZXR1cm4gYy5mcm9tUG9seWdvbihuLGgsdCl9LHVuaW9uOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGYodCxlLG4uc2VsZWN0VW5pb24pfSxpbnRlcnNlY3Q6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZih0LGUsbi5zZWxlY3RJbnRlcnNlY3QpfSxkaWZmZXJlbmNlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGYodCxlLG4uc2VsZWN0RGlmZmVyZW5jZSl9LGRpZmZlcmVuY2VSZXY6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZih0LGUsbi5zZWxlY3REaWZmZXJlbmNlUmV2KX0seG9yOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGYodCxlLG4uc2VsZWN0WG9yKX19LCJvYmplY3QiPT10eXBlb2Ygd2luZG93JiYod2luZG93LlBvbHlCb29sPW4pLGUuZXhwb3J0cz1ufSx7Ii4vbGliL2J1aWxkLWxvZyI6NDQxLCIuL2xpYi9lcHNpbG9uIjo0NDIsIi4vbGliL2dlb2pzb24iOjQ0MywiLi9saWIvaW50ZXJzZWN0ZXIiOjQ0NCwiLi9saWIvc2VnbWVudC1jaGFpbmVyIjo0NDYsIi4vbGliL3NlZ21lbnQtc2VsZWN0b3IiOjQ0N31dLDQ0MTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciB0LGU9MCxyPSExO2Z1bmN0aW9uIG4oZSxyKXtyZXR1cm4gdC5saXN0LnB1c2goe3R5cGU6ZSxkYXRhOnI/SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShyKSk6dm9pZCAwfSksdH1yZXR1cm4gdD17bGlzdDpbXSxzZWdtZW50SWQ6ZnVuY3Rpb24oKXtyZXR1cm4gZSsrfSxjaGVja0ludGVyc2VjdGlvbjpmdW5jdGlvbih0LGUpe3JldHVybiBuKCJjaGVjayIse3NlZzE6dCxzZWcyOmV9KX0sc2VnbWVudENob3A6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbigiZGl2X3NlZyIse3NlZzp0LHB0OmV9KSxuKCJjaG9wIix7c2VnOnQscHQ6ZX0pfSxzdGF0dXNSZW1vdmU6ZnVuY3Rpb24odCl7cmV0dXJuIG4oInBvcF9zZWciLHtzZWc6dH0pfSxzZWdtZW50VXBkYXRlOmZ1bmN0aW9uKHQpe3JldHVybiBuKCJzZWdfdXBkYXRlIix7c2VnOnR9KX0sc2VnbWVudE5ldzpmdW5jdGlvbih0LGUpe3JldHVybiBuKCJuZXdfc2VnIix7c2VnOnQscHJpbWFyeTplfSl9LHNlZ21lbnRSZW1vdmU6ZnVuY3Rpb24odCl7cmV0dXJuIG4oInJlbV9zZWciLHtzZWc6dH0pfSx0ZW1wU3RhdHVzOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gbigidGVtcF9zdGF0dXMiLHtzZWc6dCxhYm92ZTplLGJlbG93OnJ9KX0scmV3aW5kOmZ1bmN0aW9uKHQpe3JldHVybiBuKCJyZXdpbmQiLHtzZWc6dH0pfSxzdGF0dXM6ZnVuY3Rpb24odCxlLHIpe3JldHVybiBuKCJzdGF0dXMiLHtzZWc6dCxhYm92ZTplLGJlbG93OnJ9KX0sdmVydDpmdW5jdGlvbihlKXtyZXR1cm4gZT09PXI/dDoocj1lLG4oInZlcnQiLHt4OmV9KSl9LGxvZzpmdW5jdGlvbih0KXtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIHQmJih0PUpTT04uc3RyaW5naWZ5KHQsITEsIiAgIikpLG4oImxvZyIse3R4dDp0fSl9LHJlc2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG4oInJlc2V0Iil9LHNlbGVjdGVkOmZ1bmN0aW9uKHQpe3JldHVybiBuKCJzZWxlY3RlZCIse3NlZ3M6dH0pfSxjaGFpblN0YXJ0OmZ1bmN0aW9uKHQpe3JldHVybiBuKCJjaGFpbl9zdGFydCIse3NlZzp0fSl9LGNoYWluUmVtb3ZlSGVhZDpmdW5jdGlvbih0LGUpe3JldHVybiBuKCJjaGFpbl9yZW1faGVhZCIse2luZGV4OnQscHQ6ZX0pfSxjaGFpblJlbW92ZVRhaWw6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbigiY2hhaW5fcmVtX3RhaWwiLHtpbmRleDp0LHB0OmV9KX0sY2hhaW5OZXc6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbigiY2hhaW5fbmV3Iix7cHQxOnQscHQyOmV9KX0sY2hhaW5NYXRjaDpmdW5jdGlvbih0KXtyZXR1cm4gbigiY2hhaW5fbWF0Y2giLHtpbmRleDp0fSl9LGNoYWluQ2xvc2U6ZnVuY3Rpb24odCl7cmV0dXJuIG4oImNoYWluX2Nsb3NlIix7aW5kZXg6dH0pfSxjaGFpbkFkZEhlYWQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbigiY2hhaW5fYWRkX2hlYWQiLHtpbmRleDp0LHB0OmV9KX0sY2hhaW5BZGRUYWlsOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4oImNoYWluX2FkZF90YWlsIix7aW5kZXg6dCxwdDplfSl9LGNoYWluQ29ubmVjdDpmdW5jdGlvbih0LGUpe3JldHVybiBuKCJjaGFpbl9jb24iLHtpbmRleDE6dCxpbmRleDI6ZX0pfSxjaGFpblJldmVyc2U6ZnVuY3Rpb24odCl7cmV0dXJuIG4oImNoYWluX3JldiIse2luZGV4OnR9KX0sY2hhaW5Kb2luOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4oImNoYWluX2pvaW4iLHtpbmRleDE6dCxpbmRleDI6ZX0pfSxkb25lOmZ1bmN0aW9uKCl7cmV0dXJuIG4oImRvbmUiKX19fX0se31dLDQ0MjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXsibnVtYmVyIiE9dHlwZW9mIHQmJih0PTFlLTEwKTt2YXIgZT17ZXBzaWxvbjpmdW5jdGlvbihlKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGUmJih0PWUpLHR9LHBvaW50QWJvdmVPck9uTGluZTpmdW5jdGlvbihlLHIsbil7dmFyIGk9clswXSxhPXJbMV0sbz1uWzBdLHM9blsxXSxsPWVbMF07cmV0dXJuKG8taSkqKGVbMV0tYSktKHMtYSkqKGwtaSk+PS10fSxwb2ludEJldHdlZW46ZnVuY3Rpb24oZSxyLG4pe3ZhciBpPWVbMV0tclsxXSxhPW5bMF0tclswXSxvPWVbMF0tclswXSxzPW5bMV0tclsxXSxsPW8qYStpKnM7cmV0dXJuIShsPHR8fGwtKGEqYStzKnMpPi10KX0scG9pbnRzU2FtZVg6ZnVuY3Rpb24oZSxyKXtyZXR1cm4gTWF0aC5hYnMoZVswXS1yWzBdKTx0fSxwb2ludHNTYW1lWTpmdW5jdGlvbihlLHIpe3JldHVybiBNYXRoLmFicyhlWzFdLXJbMV0pPHR9LHBvaW50c1NhbWU6ZnVuY3Rpb24odCxyKXtyZXR1cm4gZS5wb2ludHNTYW1lWCh0LHIpJiZlLnBvaW50c1NhbWVZKHQscil9LHBvaW50c0NvbXBhcmU6ZnVuY3Rpb24odCxyKXtyZXR1cm4gZS5wb2ludHNTYW1lWCh0LHIpP2UucG9pbnRzU2FtZVkodCxyKT8wOnRbMV08clsxXT8tMToxOnRbMF08clswXT8tMToxfSxwb2ludHNDb2xsaW5lYXI6ZnVuY3Rpb24oZSxyLG4pe3ZhciBpPWVbMF0tclswXSxhPWVbMV0tclsxXSxvPXJbMF0tblswXSxzPXJbMV0tblsxXTtyZXR1cm4gTWF0aC5hYnMoaSpzLW8qYSk8dH0sbGluZXNJbnRlcnNlY3Q6ZnVuY3Rpb24oZSxyLG4saSl7dmFyIGE9clswXS1lWzBdLG89clsxXS1lWzFdLHM9aVswXS1uWzBdLGw9aVsxXS1uWzFdLGM9YSpsLW8qcztpZihNYXRoLmFicyhjKTx0KXJldHVybiExO3ZhciB1PWVbMF0tblswXSxoPWVbMV0tblsxXSxmPShzKmgtbCp1KS9jLHA9KGEqaC1vKnUpL2MsZD17YWxvbmdBOjAsYWxvbmdCOjAscHQ6W2VbMF0rZiphLGVbMV0rZipvXX07cmV0dXJuIGQuYWxvbmdBPWY8PS10Py0yOmY8dD8tMTpmLTE8PS10PzA6Zi0xPHQ/MToyLGQuYWxvbmdCPXA8PS10Py0yOnA8dD8tMTpwLTE8PS10PzA6cC0xPHQ/MToyLGR9LHBvaW50SW5zaWRlUmVnaW9uOmZ1bmN0aW9uKGUscil7Zm9yKHZhciBuPWVbMF0saT1lWzFdLGE9cltyLmxlbmd0aC0xXVswXSxvPXJbci5sZW5ndGgtMV1bMV0scz0hMSxsPTA7bDxyLmxlbmd0aDtsKyspe3ZhciBjPXJbbF1bMF0sdT1yW2xdWzFdO3UtaT50IT1vLWk+dCYmKGEtYykqKGktdSkvKG8tdSkrYy1uPnQmJihzPSFzKSxhPWMsbz11fXJldHVybiBzfX07cmV0dXJuIGV9fSx7fV0sNDQzOltmdW5jdGlvbih0LGUscil7dmFyIG49e3RvUG9seWdvbjpmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIoZSl7aWYoZS5sZW5ndGg8PTApcmV0dXJuIHQuc2VnbWVudHMoe2ludmVydGVkOiExLHJlZ2lvbnM6W119KTtmdW5jdGlvbiByKGUpe3ZhciByPWUuc2xpY2UoMCxlLmxlbmd0aC0xKTtyZXR1cm4gdC5zZWdtZW50cyh7aW52ZXJ0ZWQ6ITEscmVnaW9uczpbcl19KX1mb3IodmFyIG49cihlWzBdKSxpPTE7aTxlLmxlbmd0aDtpKyspbj10LnNlbGVjdERpZmZlcmVuY2UodC5jb21iaW5lKG4scihlW2ldKSkpO3JldHVybiBufWlmKCJQb2x5Z29uIj09PWUudHlwZSlyZXR1cm4gdC5wb2x5Z29uKHIoZS5jb29yZGluYXRlcykpO2lmKCJNdWx0aVBvbHlnb24iPT09ZS50eXBlKXtmb3IodmFyIG49dC5zZWdtZW50cyh7aW52ZXJ0ZWQ6ITEscmVnaW9uczpbXX0pLGk9MDtpPGUuY29vcmRpbmF0ZXMubGVuZ3RoO2krKyluPXQuc2VsZWN0VW5pb24odC5jb21iaW5lKG4scihlLmNvb3JkaW5hdGVzW2ldKSkpO3JldHVybiB0LnBvbHlnb24obil9dGhyb3cgbmV3IEVycm9yKCJQb2x5Qm9vbDogQ2Fubm90IGNvbnZlcnQgR2VvSlNPTiBvYmplY3QgdG8gUG9seUJvb2wgcG9seWdvbiIpfSxmcm9tUG9seWdvbjpmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LHIpe3JldHVybiBlLnBvaW50SW5zaWRlUmVnaW9uKFsuNSoodFswXVswXSt0WzFdWzBdKSwuNSoodFswXVsxXSt0WzFdWzFdKV0scil9ZnVuY3Rpb24gaSh0KXtyZXR1cm57cmVnaW9uOnQsY2hpbGRyZW46W119fXI9dC5wb2x5Z29uKHQuc2VnbWVudHMocikpO3ZhciBhPWkobnVsbCk7ZnVuY3Rpb24gbyh0LGUpe2Zvcih2YXIgcj0wO3I8dC5jaGlsZHJlbi5sZW5ndGg7cisrKXtpZihuKGUsKHM9dC5jaGlsZHJlbltyXSkucmVnaW9uKSlyZXR1cm4gdm9pZCBvKHMsZSl9dmFyIGE9aShlKTtmb3Iocj0wO3I8dC5jaGlsZHJlbi5sZW5ndGg7cisrKXt2YXIgcztuKChzPXQuY2hpbGRyZW5bcl0pLnJlZ2lvbixlKSYmKGEuY2hpbGRyZW4ucHVzaChzKSx0LmNoaWxkcmVuLnNwbGljZShyLDEpLHItLSl9dC5jaGlsZHJlbi5wdXNoKGEpfWZvcih2YXIgcz0wO3M8ci5yZWdpb25zLmxlbmd0aDtzKyspe3ZhciBsPXIucmVnaW9uc1tzXTtsLmxlbmd0aDwzfHxvKGEsbCl9ZnVuY3Rpb24gYyh0LGUpe2Zvcih2YXIgcj0wLG49dFt0Lmxlbmd0aC0xXVswXSxpPXRbdC5sZW5ndGgtMV1bMV0sYT1bXSxvPTA7bzx0Lmxlbmd0aDtvKyspe3ZhciBzPXRbb11bMF0sbD10W29dWzFdO2EucHVzaChbcyxsXSkscis9bCpuLXMqaSxuPXMsaT1sfXJldHVybiByPDAhPT1lJiZhLnJldmVyc2UoKSxhLnB1c2goW2FbMF1bMF0sYVswXVsxXV0pLGF9dmFyIHU9W107ZnVuY3Rpb24gaCh0KXt2YXIgZT1bYyh0LnJlZ2lvbiwhMSldO3UucHVzaChlKTtmb3IodmFyIHI9MDtyPHQuY2hpbGRyZW4ubGVuZ3RoO3IrKyllLnB1c2goZih0LmNoaWxkcmVuW3JdKSl9ZnVuY3Rpb24gZih0KXtmb3IodmFyIGU9MDtlPHQuY2hpbGRyZW4ubGVuZ3RoO2UrKyloKHQuY2hpbGRyZW5bZV0pO3JldHVybiBjKHQucmVnaW9uLCEwKX1mb3Iocz0wO3M8YS5jaGlsZHJlbi5sZW5ndGg7cysrKWgoYS5jaGlsZHJlbltzXSk7cmV0dXJuIHUubGVuZ3RoPD0wP3t0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczpbXX06MT09dS5sZW5ndGg/e3R5cGU6IlBvbHlnb24iLGNvb3JkaW5hdGVzOnVbMF19Ont0eXBlOiJNdWx0aVBvbHlnb24iLGNvb3JkaW5hdGVzOnV9fX07ZS5leHBvcnRzPW59LHt9XSw0NDQ6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCIuL2xpbmtlZC1saXN0Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBpKHQsZSxuKXtyZXR1cm57aWQ6cj9yLnNlZ21lbnRJZCgpOi0xLHN0YXJ0OnQsZW5kOmUsbXlGaWxsOnthYm92ZTpuLm15RmlsbC5hYm92ZSxiZWxvdzpuLm15RmlsbC5iZWxvd30sb3RoZXJGaWxsOm51bGx9fXZhciBhPW4uY3JlYXRlKCk7ZnVuY3Rpb24gbyh0LHIpe2EuaW5zZXJ0QmVmb3JlKHQsZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKHQscixuLGksYSxvKXt2YXIgcz1lLnBvaW50c0NvbXBhcmUocixhKTtyZXR1cm4gMCE9PXM/czplLnBvaW50c1NhbWUobixvKT8wOnQhPT1pP3Q/MTotMTplLnBvaW50QWJvdmVPck9uTGluZShuLGk/YTpvLGk/bzphKT8xOi0xfSh0LmlzU3RhcnQsdC5wdCxyLG4uaXNTdGFydCxuLnB0LG4ub3RoZXIucHQpPDB9KX1mdW5jdGlvbiBzKHQsZSl7dmFyIHI9ZnVuY3Rpb24odCxlKXt2YXIgcj1uLm5vZGUoe2lzU3RhcnQ6ITAscHQ6dC5zdGFydCxzZWc6dCxwcmltYXJ5OmUsb3RoZXI6bnVsbCxzdGF0dXM6bnVsbH0pO3JldHVybiBvKHIsdC5lbmQpLHJ9KHQsZSk7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyKXt2YXIgaT1uLm5vZGUoe2lzU3RhcnQ6ITEscHQ6ZS5lbmQsc2VnOmUscHJpbWFyeTpyLG90aGVyOnQsc3RhdHVzOm51bGx9KTt0Lm90aGVyPWksbyhpLHQucHQpfShyLHQsZSkscn1mdW5jdGlvbiBsKHQsZSl7dmFyIG49aShlLHQuc2VnLmVuZCx0LnNlZyk7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7ciYmci5zZWdtZW50Q2hvcCh0LnNlZyxlKSx0Lm90aGVyLnJlbW92ZSgpLHQuc2VnLmVuZD1lLHQub3RoZXIucHQ9ZSxvKHQub3RoZXIsdC5wdCl9KHQsZSkscyhuLHQucHJpbWFyeSl9ZnVuY3Rpb24gYyhpLG8pe3ZhciBzPW4uY3JlYXRlKCk7ZnVuY3Rpb24gYyh0KXtyZXR1cm4gcy5maW5kVHJhbnNpdGlvbihmdW5jdGlvbihyKXt2YXIgbixpLGEsbyxzLGw7cmV0dXJuIG49dCxpPXIuZXYsYT1uLnNlZy5zdGFydCxvPW4uc2VnLmVuZCxzPWkuc2VnLnN0YXJ0LGw9aS5zZWcuZW5kLChlLnBvaW50c0NvbGxpbmVhcihhLHMsbCk/ZS5wb2ludHNDb2xsaW5lYXIobyxzLGwpPzE6ZS5wb2ludEFib3ZlT3JPbkxpbmUobyxzLGwpPzE6LTE6ZS5wb2ludEFib3ZlT3JPbkxpbmUoYSxzLGwpPzE6LTEpPjB9KX1mdW5jdGlvbiB1KHQsbil7dmFyIGk9dC5zZWcsYT1uLnNlZyxvPWkuc3RhcnQscz1pLmVuZCxjPWEuc3RhcnQsdT1hLmVuZDtyJiZyLmNoZWNrSW50ZXJzZWN0aW9uKGksYSk7dmFyIGg9ZS5saW5lc0ludGVyc2VjdChvLHMsYyx1KTtpZighMT09PWgpe2lmKCFlLnBvaW50c0NvbGxpbmVhcihvLHMsYykpcmV0dXJuITE7aWYoZS5wb2ludHNTYW1lKG8sdSl8fGUucG9pbnRzU2FtZShzLGMpKXJldHVybiExO3ZhciBmPWUucG9pbnRzU2FtZShvLGMpLHA9ZS5wb2ludHNTYW1lKHMsdSk7aWYoZiYmcClyZXR1cm4gbjt2YXIgZD0hZiYmZS5wb2ludEJldHdlZW4obyxjLHUpLGc9IXAmJmUucG9pbnRCZXR3ZWVuKHMsYyx1KTtpZihmKXJldHVybiBnP2wobixzKTpsKHQsdSksbjtkJiYocHx8KGc/bChuLHMpOmwodCx1KSksbChuLG8pKX1lbHNlIDA9PT1oLmFsb25nQSYmKC0xPT09aC5hbG9uZ0I/bCh0LGMpOjA9PT1oLmFsb25nQj9sKHQsaC5wdCk6MT09PWguYWxvbmdCJiZsKHQsdSkpLDA9PT1oLmFsb25nQiYmKC0xPT09aC5hbG9uZ0E/bChuLG8pOjA9PT1oLmFsb25nQT9sKG4saC5wdCk6MT09PWguYWxvbmdBJiZsKG4scykpO3JldHVybiExfWZvcih2YXIgaD1bXTshYS5pc0VtcHR5KCk7KXt2YXIgZj1hLmdldEhlYWQoKTtpZihyJiZyLnZlcnQoZi5wdFswXSksZi5pc1N0YXJ0KXtyJiZyLnNlZ21lbnROZXcoZi5zZWcsZi5wcmltYXJ5KTt2YXIgcD1jKGYpLGQ9cC5iZWZvcmU/cC5iZWZvcmUuZXY6bnVsbCxnPXAuYWZ0ZXI/cC5hZnRlci5ldjpudWxsO2Z1bmN0aW9uIG0oKXtpZihkKXt2YXIgdD11KGYsZCk7aWYodClyZXR1cm4gdH1yZXR1cm4hIWcmJnUoZixnKX1yJiZyLnRlbXBTdGF0dXMoZi5zZWcsISFkJiZkLnNlZywhIWcmJmcuc2VnKTt2YXIgdix5LHg9bSgpO2lmKHgpdD8oeT1udWxsPT09Zi5zZWcubXlGaWxsLmJlbG93fHxmLnNlZy5teUZpbGwuYWJvdmUhPT1mLnNlZy5teUZpbGwuYmVsb3cpJiYoeC5zZWcubXlGaWxsLmFib3ZlPSF4LnNlZy5teUZpbGwuYWJvdmUpOnguc2VnLm90aGVyRmlsbD1mLnNlZy5teUZpbGwsciYmci5zZWdtZW50VXBkYXRlKHguc2VnKSxmLm90aGVyLnJlbW92ZSgpLGYucmVtb3ZlKCk7aWYoYS5nZXRIZWFkKCkhPT1mKXtyJiZyLnJld2luZChmLnNlZyk7Y29udGludWV9dD8oeT1udWxsPT09Zi5zZWcubXlGaWxsLmJlbG93fHxmLnNlZy5teUZpbGwuYWJvdmUhPT1mLnNlZy5teUZpbGwuYmVsb3csZi5zZWcubXlGaWxsLmJlbG93PWc/Zy5zZWcubXlGaWxsLmFib3ZlOmksZi5zZWcubXlGaWxsLmFib3ZlPXk/IWYuc2VnLm15RmlsbC5iZWxvdzpmLnNlZy5teUZpbGwuYmVsb3cpOm51bGw9PT1mLnNlZy5vdGhlckZpbGwmJih2PWc/Zi5wcmltYXJ5PT09Zy5wcmltYXJ5P2cuc2VnLm90aGVyRmlsbC5hYm92ZTpnLnNlZy5teUZpbGwuYWJvdmU6Zi5wcmltYXJ5P286aSxmLnNlZy5vdGhlckZpbGw9e2Fib3ZlOnYsYmVsb3c6dn0pLHImJnIuc3RhdHVzKGYuc2VnLCEhZCYmZC5zZWcsISFnJiZnLnNlZyksZi5vdGhlci5zdGF0dXM9cC5pbnNlcnQobi5ub2RlKHtldjpmfSkpfWVsc2V7dmFyIGI9Zi5zdGF0dXM7aWYobnVsbD09PWIpdGhyb3cgbmV3IEVycm9yKCJQb2x5Qm9vbDogWmVyby1sZW5ndGggc2VnbWVudCBkZXRlY3RlZDsgeW91ciBlcHNpbG9uIGlzIHByb2JhYmx5IHRvbyBzbWFsbCBvciB0b28gbGFyZ2UiKTtpZihzLmV4aXN0cyhiLnByZXYpJiZzLmV4aXN0cyhiLm5leHQpJiZ1KGIucHJldi5ldixiLm5leHQuZXYpLHImJnIuc3RhdHVzUmVtb3ZlKGIuZXYuc2VnKSxiLnJlbW92ZSgpLCFmLnByaW1hcnkpe3ZhciBfPWYuc2VnLm15RmlsbDtmLnNlZy5teUZpbGw9Zi5zZWcub3RoZXJGaWxsLGYuc2VnLm90aGVyRmlsbD1ffWgucHVzaChmLnNlZyl9YS5nZXRIZWFkKCkucmVtb3ZlKCl9cmV0dXJuIHImJnIuZG9uZSgpLGh9cmV0dXJuIHQ/e2FkZFJlZ2lvbjpmdW5jdGlvbih0KXtmb3IodmFyIG4saSxhLG89dFt0Lmxlbmd0aC0xXSxsPTA7bDx0Lmxlbmd0aDtsKyspe249byxvPXRbbF07dmFyIGM9ZS5wb2ludHNDb21wYXJlKG4sbyk7MCE9PWMmJnMoKGk9YzwwP246byxhPWM8MD9vOm4se2lkOnI/ci5zZWdtZW50SWQoKTotMSxzdGFydDppLGVuZDphLG15RmlsbDp7YWJvdmU6bnVsbCxiZWxvdzpudWxsfSxvdGhlckZpbGw6bnVsbH0pLCEwKX19LGNhbGN1bGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCExKX19OntjYWxjdWxhdGU6ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHQuZm9yRWFjaChmdW5jdGlvbih0KXtzKGkodC5zdGFydCx0LmVuZCx0KSwhMCl9KSxyLmZvckVhY2goZnVuY3Rpb24odCl7cyhpKHQuc3RhcnQsdC5lbmQsdCksITEpfSksYyhlLG4pfX19fSx7Ii4vbGlua2VkLWxpc3QiOjQ0NX1dLDQ0NTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz17Y3JlYXRlOmZ1bmN0aW9uKCl7dmFyIHQ9e3Jvb3Q6e3Jvb3Q6ITAsbmV4dDpudWxsfSxleGlzdHM6ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPT1lJiZlIT09dC5yb290fSxpc0VtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PT10LnJvb3QubmV4dH0sZ2V0SGVhZDpmdW5jdGlvbigpe3JldHVybiB0LnJvb3QubmV4dH0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKGUscil7Zm9yKHZhciBuPXQucm9vdCxpPXQucm9vdC5uZXh0O251bGwhPT1pOyl7aWYocihpKSlyZXR1cm4gZS5wcmV2PWkucHJldixlLm5leHQ9aSxpLnByZXYubmV4dD1lLHZvaWQoaS5wcmV2PWUpO249aSxpPWkubmV4dH1uLm5leHQ9ZSxlLnByZXY9bixlLm5leHQ9bnVsbH0sZmluZFRyYW5zaXRpb246ZnVuY3Rpb24oZSl7Zm9yKHZhciByPXQucm9vdCxuPXQucm9vdC5uZXh0O251bGwhPT1uJiYhZShuKTspcj1uLG49bi5uZXh0O3JldHVybntiZWZvcmU6cj09PXQucm9vdD9udWxsOnIsYWZ0ZXI6bixpbnNlcnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQucHJldj1yLHQubmV4dD1uLHIubmV4dD10LG51bGwhPT1uJiYobi5wcmV2PXQpLHR9fX19O3JldHVybiB0fSxub2RlOmZ1bmN0aW9uKHQpe3JldHVybiB0LnByZXY9bnVsbCx0Lm5leHQ9bnVsbCx0LnJlbW92ZT1mdW5jdGlvbigpe3QucHJldi5uZXh0PXQubmV4dCx0Lm5leHQmJih0Lm5leHQucHJldj10LnByZXYpLHQucHJldj1udWxsLHQubmV4dD1udWxsfSx0fX19LHt9XSw0NDY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPVtdLGk9W107cmV0dXJuIHQuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgYT10LnN0YXJ0LG89dC5lbmQ7aWYoZS5wb2ludHNTYW1lKGEsbykpY29uc29sZS53YXJuKCJQb2x5Qm9vbDogV2FybmluZzogWmVyby1sZW5ndGggc2VnbWVudCBkZXRlY3RlZDsgeW91ciBlcHNpbG9uIGlzIHByb2JhYmx5IHRvbyBzbWFsbCBvciB0b28gbGFyZ2UiKTtlbHNle3ImJnIuY2hhaW5TdGFydCh0KTtmb3IodmFyIHM9e2luZGV4OjAsbWF0Y2hlc19oZWFkOiExLG1hdGNoZXNfcHQxOiExfSxsPXtpbmRleDowLG1hdGNoZXNfaGVhZDohMSxtYXRjaGVzX3B0MTohMX0sYz1zLHU9MDt1PG4ubGVuZ3RoO3UrKyl7dmFyIGg9KG09blt1XSlbMF0sZj0obVsxXSxtW20ubGVuZ3RoLTFdKTtpZihtW20ubGVuZ3RoLTJdLGUucG9pbnRzU2FtZShoLGEpKXtpZihNKHUsITAsITApKWJyZWFrfWVsc2UgaWYoZS5wb2ludHNTYW1lKGgsbykpe2lmKE0odSwhMCwhMSkpYnJlYWt9ZWxzZSBpZihlLnBvaW50c1NhbWUoZixhKSl7aWYoTSh1LCExLCEwKSlicmVha31lbHNlIGlmKGUucG9pbnRzU2FtZShmLG8pJiZNKHUsITEsITEpKWJyZWFrfWlmKGM9PT1zKXJldHVybiBuLnB1c2goW2Esb10pLHZvaWQociYmci5jaGFpbk5ldyhhLG8pKTtpZihjPT09bCl7ciYmci5jaGFpbk1hdGNoKHMuaW5kZXgpO3ZhciBwPXMuaW5kZXgsZD1zLm1hdGNoZXNfcHQxP286YSxnPXMubWF0Y2hlc19oZWFkLG09bltwXSx2PWc/bVswXTptW20ubGVuZ3RoLTFdLHk9Zz9tWzFdOm1bbS5sZW5ndGgtMl0seD1nP21bbS5sZW5ndGgtMV06bVswXSxiPWc/bVttLmxlbmd0aC0yXTptWzFdO3JldHVybiBlLnBvaW50c0NvbGxpbmVhcih5LHYsZCkmJihnPyhyJiZyLmNoYWluUmVtb3ZlSGVhZChzLmluZGV4LGQpLG0uc2hpZnQoKSk6KHImJnIuY2hhaW5SZW1vdmVUYWlsKHMuaW5kZXgsZCksbS5wb3AoKSksdj15KSxlLnBvaW50c1NhbWUoeCxkKT8obi5zcGxpY2UocCwxKSxlLnBvaW50c0NvbGxpbmVhcihiLHgsdikmJihnPyhyJiZyLmNoYWluUmVtb3ZlVGFpbChzLmluZGV4LHYpLG0ucG9wKCkpOihyJiZyLmNoYWluUmVtb3ZlSGVhZChzLmluZGV4LHYpLG0uc2hpZnQoKSkpLHImJnIuY2hhaW5DbG9zZShzLmluZGV4KSx2b2lkIGkucHVzaChtKSk6dm9pZChnPyhyJiZyLmNoYWluQWRkSGVhZChzLmluZGV4LGQpLG0udW5zaGlmdChkKSk6KHImJnIuY2hhaW5BZGRUYWlsKHMuaW5kZXgsZCksbS5wdXNoKGQpKSl9dmFyIF89cy5pbmRleCx3PWwuaW5kZXg7ciYmci5jaGFpbkNvbm5lY3QoXyx3KTt2YXIgaz1uW19dLmxlbmd0aDxuW3ddLmxlbmd0aDtzLm1hdGNoZXNfaGVhZD9sLm1hdGNoZXNfaGVhZD9rPyhBKF8pLFQoXyx3KSk6KEEodyksVCh3LF8pKTpUKHcsXyk6bC5tYXRjaGVzX2hlYWQ/VChfLHcpOms/KEEoXyksVCh3LF8pKTooQSh3KSxUKF8sdykpfWZ1bmN0aW9uIE0odCxlLHIpe3JldHVybiBjLmluZGV4PXQsYy5tYXRjaGVzX2hlYWQ9ZSxjLm1hdGNoZXNfcHQxPXIsYz09PXM/KGM9bCwhMSk6KGM9bnVsbCwhMCl9ZnVuY3Rpb24gQSh0KXtyJiZyLmNoYWluUmV2ZXJzZSh0KSxuW3RdLnJldmVyc2UoKX1mdW5jdGlvbiBUKHQsaSl7dmFyIGE9blt0XSxvPW5baV0scz1hW2EubGVuZ3RoLTFdLGw9YVthLmxlbmd0aC0yXSxjPW9bMF0sdT1vWzFdO2UucG9pbnRzQ29sbGluZWFyKGwscyxjKSYmKHImJnIuY2hhaW5SZW1vdmVUYWlsKHQscyksYS5wb3AoKSxzPWwpLGUucG9pbnRzQ29sbGluZWFyKHMsYyx1KSYmKHImJnIuY2hhaW5SZW1vdmVIZWFkKGksYyksby5zaGlmdCgpKSxyJiZyLmNoYWluSm9pbih0LGkpLG5bdF09YS5jb25jYXQobyksbi5zcGxpY2UoaSwxKX19KSxpfX0se31dLDQ0NzpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlLHIpe3ZhciBuPVtdO3JldHVybiB0LmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGk9KHQubXlGaWxsLmFib3ZlPzg6MCkrKHQubXlGaWxsLmJlbG93PzQ6MCkrKHQub3RoZXJGaWxsJiZ0Lm90aGVyRmlsbC5hYm92ZT8yOjApKyh0Lm90aGVyRmlsbCYmdC5vdGhlckZpbGwuYmVsb3c/MTowKTswIT09ZVtpXSYmbi5wdXNoKHtpZDpyP3Iuc2VnbWVudElkKCk6LTEsc3RhcnQ6dC5zdGFydCxlbmQ6dC5lbmQsbXlGaWxsOnthYm92ZToxPT09ZVtpXSxiZWxvdzoyPT09ZVtpXX0sb3RoZXJGaWxsOm51bGx9KX0pLHImJnIuc2VsZWN0ZWQobiksbn12YXIgaT17dW5pb246ZnVuY3Rpb24odCxlKXtyZXR1cm4gbih0LFswLDIsMSwwLDIsMiwwLDAsMSwwLDEsMCwwLDAsMCwwXSxlKX0saW50ZXJzZWN0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odCxbMCwwLDAsMCwwLDIsMCwyLDAsMCwxLDEsMCwyLDEsMF0sZSl9LGRpZmZlcmVuY2U6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbih0LFswLDAsMCwwLDIsMCwyLDAsMSwxLDAsMCwwLDEsMiwwXSxlKX0sZGlmZmVyZW5jZVJldjpmdW5jdGlvbih0LGUpe3JldHVybiBuKHQsWzAsMiwxLDAsMCwwLDEsMSwwLDIsMCwyLDAsMCwwLDBdLGUpfSx4b3I6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbih0LFswLDIsMSwwLDIsMCwwLDEsMSwwLDAsMiwwLDEsMiwwXSxlKX19O2UuZXhwb3J0cz1pfSx7fV0sNDQ4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPW5ldyBGbG9hdDY0QXJyYXkoNCksaT1uZXcgRmxvYXQ2NEFycmF5KDQpLGE9bmV3IEZsb2F0NjRBcnJheSg0KTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyxzKXtuLmxlbmd0aDxvLmxlbmd0aCYmKG49bmV3IEZsb2F0NjRBcnJheShvLmxlbmd0aCksaT1uZXcgRmxvYXQ2NEFycmF5KG8ubGVuZ3RoKSxhPW5ldyBGbG9hdDY0QXJyYXkoby5sZW5ndGgpKTtmb3IodmFyIGw9MDtsPG8ubGVuZ3RoOysrbCluW2xdPXRbbF0tb1tsXSxpW2xdPWVbbF0tdFtsXSxhW2xdPXJbbF0tdFtsXTt2YXIgYz0wLHU9MCxoPTAsZj0wLHA9MCxkPTA7Zm9yKGw9MDtsPG8ubGVuZ3RoOysrbCl7dmFyIGc9aVtsXSxtPWFbbF0sdj1uW2xdO2MrPWcqZyx1Kz1nKm0saCs9bSptLGYrPXYqZyxwKz12Km0sZCs9dip2fXZhciB5LHgsYixfLHcsaz1NYXRoLmFicyhjKmgtdSp1KSxNPXUqcC1oKmYsQT11KmYtYypwO2lmKE0rQTw9aylpZihNPDApQTwwJiZmPDA/KEE9MCwtZj49Yz8oTT0xLHk9YysyKmYrZCk6eT1mKihNPS1mL2MpK2QpOihNPTAscD49MD8oQT0wLHk9ZCk6LXA+PWg/KEE9MSx5PWgrMipwK2QpOnk9cCooQT0tcC9oKStkKTtlbHNlIGlmKEE8MClBPTAsZj49MD8oTT0wLHk9ZCk6LWY+PWM/KE09MSx5PWMrMipmK2QpOnk9ZiooTT0tZi9jKStkO2Vsc2V7dmFyIFQ9MS9rO3k9KE0qPVQpKihjKk0rdSooQSo9VCkrMipmKStBKih1Kk0raCpBKzIqcCkrZH1lbHNlIE08MD8oYj1oK3ApPih4PXUrZik/KF89Yi14KT49KHc9Yy0yKnUraCk/KE09MSxBPTAseT1jKzIqZitkKTp5PShNPV8vdykqKGMqTSt1KihBPTEtTSkrMipmKStBKih1Kk0raCpBKzIqcCkrZDooTT0wLGI8PTA/KEE9MSx5PWgrMipwK2QpOnA+PTA/KEE9MCx5PWQpOnk9cCooQT0tcC9oKStkKTpBPDA/KGI9YytmKT4oeD11K3ApPyhfPWIteCk+PSh3PWMtMip1K2gpPyhBPTEsTT0wLHk9aCsyKnArZCk6eT0oTT0xLShBPV8vdykpKihjKk0rdSpBKzIqZikrQSoodSpNK2gqQSsyKnApK2Q6KEE9MCxiPD0wPyhNPTEseT1jKzIqZitkKTpmPj0wPyhNPTAseT1kKTp5PWYqKE09LWYvYykrZCk6KF89aCtwLXUtZik8PTA/KE09MCxBPTEseT1oKzIqcCtkKTpfPj0odz1jLTIqdStoKT8oTT0xLEE9MCx5PWMrMipmK2QpOnk9KE09Xy93KSooYypNK3UqKEE9MS1NKSsyKmYpK0EqKHUqTStoKkErMipwKStkO3ZhciBTPTEtTS1BO2ZvcihsPTA7bDxvLmxlbmd0aDsrK2wpc1tsXT1TKnRbbF0rTSplW2xdK0EqcltsXTtyZXR1cm4geTwwPzA6eX19LHt9XSw0NDk6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGE9ZS5leHBvcnRzPXt9O2Z1bmN0aW9uIG8oKXt0aHJvdyBuZXcgRXJyb3IoInNldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQiKX1mdW5jdGlvbiBzKCl7dGhyb3cgbmV3IEVycm9yKCJjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQiKX1mdW5jdGlvbiBsKHQpe2lmKG49PT1zZXRUaW1lb3V0KXJldHVybiBzZXRUaW1lb3V0KHQsMCk7aWYoKG49PT1vfHwhbikmJnNldFRpbWVvdXQpcmV0dXJuIG49c2V0VGltZW91dCxzZXRUaW1lb3V0KHQsMCk7dHJ5e3JldHVybiBuKHQsMCl9Y2F0Y2goZSl7dHJ5e3JldHVybiBuLmNhbGwobnVsbCx0LDApfWNhdGNoKGUpe3JldHVybiBuLmNhbGwodGhpcyx0LDApfX19IWZ1bmN0aW9uKCl7dHJ5e249ImZ1bmN0aW9uIj09dHlwZW9mIHNldFRpbWVvdXQ/c2V0VGltZW91dDpvfWNhdGNoKHQpe249b310cnl7aT0iZnVuY3Rpb24iPT10eXBlb2YgY2xlYXJUaW1lb3V0P2NsZWFyVGltZW91dDpzfWNhdGNoKHQpe2k9c319KCk7dmFyIGMsdT1bXSxoPSExLGY9LTE7ZnVuY3Rpb24gcCgpe2gmJmMmJihoPSExLGMubGVuZ3RoP3U9Yy5jb25jYXQodSk6Zj0tMSx1Lmxlbmd0aCYmZCgpKX1mdW5jdGlvbiBkKCl7aWYoIWgpe3ZhciB0PWwocCk7aD0hMDtmb3IodmFyIGU9dS5sZW5ndGg7ZTspe2ZvcihjPXUsdT1bXTsrK2Y8ZTspYyYmY1tmXS5ydW4oKTtmPS0xLGU9dS5sZW5ndGh9Yz1udWxsLGg9ITEsZnVuY3Rpb24odCl7aWYoaT09PWNsZWFyVGltZW91dClyZXR1cm4gY2xlYXJUaW1lb3V0KHQpO2lmKChpPT09c3x8IWkpJiZjbGVhclRpbWVvdXQpcmV0dXJuIGk9Y2xlYXJUaW1lb3V0LGNsZWFyVGltZW91dCh0KTt0cnl7aSh0KX1jYXRjaChlKXt0cnl7cmV0dXJuIGkuY2FsbChudWxsLHQpfWNhdGNoKGUpe3JldHVybiBpLmNhbGwodGhpcyx0KX19fSh0KX19ZnVuY3Rpb24gZyh0LGUpe3RoaXMuZnVuPXQsdGhpcy5hcnJheT1lfWZ1bmN0aW9uIG0oKXt9YS5uZXh0VGljaz1mdW5jdGlvbih0KXt2YXIgZT1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aC0xKTtpZihhcmd1bWVudHMubGVuZ3RoPjEpZm9yKHZhciByPTE7cjxhcmd1bWVudHMubGVuZ3RoO3IrKyllW3ItMV09YXJndW1lbnRzW3JdO3UucHVzaChuZXcgZyh0LGUpKSwxIT09dS5sZW5ndGh8fGh8fGwoZCl9LGcucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3RoaXMuZnVuLmFwcGx5KG51bGwsdGhpcy5hcnJheSl9LGEudGl0bGU9ImJyb3dzZXIiLGEuYnJvd3Nlcj0hMCxhLmVudj17fSxhLmFyZ3Y9W10sYS52ZXJzaW9uPSIiLGEudmVyc2lvbnM9e30sYS5vbj1tLGEuYWRkTGlzdGVuZXI9bSxhLm9uY2U9bSxhLm9mZj1tLGEucmVtb3ZlTGlzdGVuZXI9bSxhLnJlbW92ZUFsbExpc3RlbmVycz1tLGEuZW1pdD1tLGEucHJlcGVuZExpc3RlbmVyPW0sYS5wcmVwZW5kT25jZUxpc3RlbmVyPW0sYS5saXN0ZW5lcnM9ZnVuY3Rpb24odCl7cmV0dXJuW119LGEuYmluZGluZz1mdW5jdGlvbih0KXt0aHJvdyBuZXcgRXJyb3IoInByb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkIil9LGEuY3dkPWZ1bmN0aW9uKCl7cmV0dXJuIi8ifSxhLmNoZGlyPWZ1bmN0aW9uKHQpe3Rocm93IG5ldyBFcnJvcigicHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkIil9LGEudW1hc2s9ZnVuY3Rpb24oKXtyZXR1cm4gMH19LHt9XSw0NTA6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9dCgiZ2wtcXVhdC9zbGVycCIpfSx7ImdsLXF1YXQvc2xlcnAiOjI4MH1dLDQ1MTpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihyKXtmb3IodmFyIG49dCgicGVyZm9ybWFuY2Utbm93IiksaT0idW5kZWZpbmVkIj09dHlwZW9mIHdpbmRvdz9yOndpbmRvdyxhPVsibW96Iiwid2Via2l0Il0sbz0iQW5pbWF0aW9uRnJhbWUiLHM9aVsicmVxdWVzdCIrb10sbD1pWyJjYW5jZWwiK29dfHxpWyJjYW5jZWxSZXF1ZXN0IitvXSxjPTA7IXMmJmM8YS5sZW5ndGg7YysrKXM9aVthW2NdKyJSZXF1ZXN0IitvXSxsPWlbYVtjXSsiQ2FuY2VsIitvXXx8aVthW2NdKyJDYW5jZWxSZXF1ZXN0IitvXTtpZighc3x8IWwpe3ZhciB1PTAsaD0wLGY9W107cz1mdW5jdGlvbih0KXtpZigwPT09Zi5sZW5ndGgpe3ZhciBlPW4oKSxyPU1hdGgubWF4KDAsMWUzLzYwLShlLXUpKTt1PXIrZSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dmFyIHQ9Zi5zbGljZSgwKTtmLmxlbmd0aD0wO2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKWlmKCF0W2VdLmNhbmNlbGxlZCl0cnl7dFtlXS5jYWxsYmFjayh1KX1jYXRjaCh0KXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhyb3cgdH0sMCl9fSxNYXRoLnJvdW5kKHIpKX1yZXR1cm4gZi5wdXNoKHtoYW5kbGU6KytoLGNhbGxiYWNrOnQsY2FuY2VsbGVkOiExfSksaH0sbD1mdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPGYubGVuZ3RoO2UrKylmW2VdLmhhbmRsZT09PXQmJihmW2VdLmNhbmNlbGxlZD0hMCl9fWUuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gcy5jYWxsKGksdCl9LGUuZXhwb3J0cy5jYW5jZWw9ZnVuY3Rpb24oKXtsLmFwcGx5KGksYXJndW1lbnRzKX0sZS5leHBvcnRzLnBvbHlmaWxsPWZ1bmN0aW9uKHQpe3R8fCh0PWkpLHQucmVxdWVzdEFuaW1hdGlvbkZyYW1lPXMsdC5jYW5jZWxBbmltYXRpb25GcmFtZT1sfX0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0seyJwZXJmb3JtYW5jZS1ub3ciOjQyOX1dLDQ1MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJiaWctcmF0L2FkZCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxpPW5ldyBBcnJheShyKSxhPTA7YTxyOysrYSlpW2FdPW4odFthXSxlW2FdKTtyZXR1cm4gaX19LHsiYmlnLXJhdC9hZGQiOjYzfV0sNDUzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQubGVuZ3RoKSxyPTA7cjx0Lmxlbmd0aDsrK3IpZVtyXT1uKHRbcl0pO3JldHVybiBlfTt2YXIgbj10KCJiaWctcmF0Iil9LHsiYmlnLXJhdCI6NjZ9XSw0NTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiYmlnLXJhdCIpLGk9dCgiYmlnLXJhdC9tdWwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bihlKSxhPXQubGVuZ3RoLG89bmV3IEFycmF5KGEpLHM9MDtzPGE7KytzKW9bc109aSh0W3NdLHIpO3JldHVybiBvfX0seyJiaWctcmF0Ijo2NiwiYmlnLXJhdC9tdWwiOjc1fV0sNDU1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImJpZy1yYXQvc3ViIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQubGVuZ3RoLGk9bmV3IEFycmF5KHIpLGE9MDthPHI7KythKWlbYV09bih0W2FdLGVbYV0pO3JldHVybiBpfX0seyJiaWctcmF0L3N1YiI6Nzd9XSw0NTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiY29tcGFyZS1jZWxsIiksaT10KCJjb21wYXJlLW9yaWVudGVkLWNlbGwiKSxhPXQoImNlbGwtb3JpZW50YXRpb24iKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dC5zb3J0KGkpO2Zvcih2YXIgZT10Lmxlbmd0aCxyPTAsbz0wO288ZTsrK28pe3ZhciBzPXRbb10sbD1hKHMpO2lmKDAhPT1sKXtpZihyPjApe3ZhciBjPXRbci0xXTtpZigwPT09bihzLGMpJiZhKGMpIT09bCl7ci09MTtjb250aW51ZX19dFtyKytdPXN9fXJldHVybiB0Lmxlbmd0aD1yLHR9fSx7ImNlbGwtb3JpZW50YXRpb24iOjk5LCJjb21wYXJlLWNlbGwiOjExNSwiY29tcGFyZS1vcmllbnRlZC1jZWxsIjoxMTZ9XSw0NTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiYXJyYXktYm91bmRzIiksaT10KCJjb2xvci1ub3JtYWxpemUiKSxhPXQoInVwZGF0ZS1kaWZmIiksbz10KCJwaWNrLWJ5LWFsaWFzIikscz10KCJvYmplY3QtYXNzaWduIiksbD10KCJmbGF0dGVuLXZlcnRleC1kYXRhIiksYz10KCJ0by1mbG9hdDMyIiksdT1jLmZsb2F0MzIsaD1jLmZyYWN0MzI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ImZ1bmN0aW9uIj09dHlwZW9mIHQ/KGV8fChlPXt9KSxlLnJlZ2w9dCk6ZT10O2UubGVuZ3RoJiYoZS5wb3NpdGlvbnM9ZSk7aWYoISh0PWUucmVnbCkuaGFzRXh0ZW5zaW9uKCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIikpdGhyb3cgRXJyb3IoInJlZ2wtZXJyb3IyZDogYEFOR0xFX2luc3RhbmNlZF9hcnJheXNgIGV4dGVuc2lvbiBzaG91bGQgYmUgZW5hYmxlZCIpO3ZhciByLGMscCxkLGcsbSx2PXQuX2dsLHk9e2NvbG9yOiJibGFjayIsY2FwU2l6ZTo1LGxpbmVXaWR0aDoxLG9wYWNpdHk6MSx2aWV3cG9ydDpudWxsLHJhbmdlOm51bGwsb2Zmc2V0OjAsY291bnQ6MCxib3VuZHM6bnVsbCxwb3NpdGlvbnM6W10sZXJyb3JzOltdfSx4PVtdO3JldHVybiBkPXQuYnVmZmVyKHt1c2FnZToiZHluYW1pYyIsdHlwZToidWludDgiLGRhdGE6bmV3IFVpbnQ4QXJyYXkoMCl9KSxjPXQuYnVmZmVyKHt1c2FnZToiZHluYW1pYyIsdHlwZToiZmxvYXQiLGRhdGE6bmV3IFVpbnQ4QXJyYXkoMCl9KSxwPXQuYnVmZmVyKHt1c2FnZToiZHluYW1pYyIsdHlwZToiZmxvYXQiLGRhdGE6bmV3IFVpbnQ4QXJyYXkoMCl9KSxnPXQuYnVmZmVyKHt1c2FnZToiZHluYW1pYyIsdHlwZToiZmxvYXQiLGRhdGE6bmV3IFVpbnQ4QXJyYXkoMCl9KSxtPXQuYnVmZmVyKHt1c2FnZToic3RhdGljIix0eXBlOiJmbG9hdCIsZGF0YTpmfSksayhlKSxyPXQoe3ZlcnQ6IlxuXHRcdHByZWNpc2lvbiBoaWdocCBmbG9hdDtcblxuXHRcdGF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uLCBwb3NpdGlvbkZyYWN0O1xuXHRcdGF0dHJpYnV0ZSB2ZWM0IGVycm9yO1xuXHRcdGF0dHJpYnV0ZSB2ZWM0IGNvbG9yO1xuXG5cdFx0YXR0cmlidXRlIHZlYzIgZGlyZWN0aW9uLCBsaW5lT2Zmc2V0LCBjYXBPZmZzZXQ7XG5cblx0XHR1bmlmb3JtIHZlYzQgdmlld3BvcnQ7XG5cdFx0dW5pZm9ybSBmbG9hdCBsaW5lV2lkdGgsIGNhcFNpemU7XG5cdFx0dW5pZm9ybSB2ZWMyIHNjYWxlLCBzY2FsZUZyYWN0LCB0cmFuc2xhdGUsIHRyYW5zbGF0ZUZyYWN0O1xuXG5cdFx0dmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcblxuXHRcdHZvaWQgbWFpbigpIHtcblx0XHRcdGZyYWdDb2xvciA9IGNvbG9yIC8gMjU1LjtcblxuXHRcdFx0dmVjMiBwaXhlbE9mZnNldCA9IGxpbmVXaWR0aCAqIGxpbmVPZmZzZXQgKyAoY2FwU2l6ZSArIGxpbmVXaWR0aCkgKiBjYXBPZmZzZXQ7XG5cblx0XHRcdHZlYzIgZHh5ID0gLXN0ZXAoLjUsIGRpcmVjdGlvbi54eSkgKiBlcnJvci54eiArIHN0ZXAoZGlyZWN0aW9uLnh5LCB2ZWMyKC0uNSkpICogZXJyb3IueXc7XG5cblx0XHRcdHZlYzIgcG9zaXRpb24gPSBwb3NpdGlvbiArIGR4eTtcblxuXHRcdFx0dmVjMiBwb3MgPSAocG9zaXRpb24gKyB0cmFuc2xhdGUpICogc2NhbGVcblx0XHRcdFx0KyAocG9zaXRpb25GcmFjdCArIHRyYW5zbGF0ZUZyYWN0KSAqIHNjYWxlXG5cdFx0XHRcdCsgKHBvc2l0aW9uICsgdHJhbnNsYXRlKSAqIHNjYWxlRnJhY3Rcblx0XHRcdFx0KyAocG9zaXRpb25GcmFjdCArIHRyYW5zbGF0ZUZyYWN0KSAqIHNjYWxlRnJhY3Q7XG5cblx0XHRcdHBvcyArPSBwaXhlbE9mZnNldCAvIHZpZXdwb3J0Lnp3O1xuXG5cdFx0XHRnbF9Qb3NpdGlvbiA9IHZlYzQocG9zICogMi4gLSAxLiwgMCwgMSk7XG5cdFx0fVxuXHRcdCIsZnJhZzoiXG5cdFx0cHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG5cblx0XHR2YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xuXG5cdFx0dW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuXG5cdFx0dm9pZCBtYWluKCkge1xuXHRcdFx0Z2xfRnJhZ0NvbG9yID0gZnJhZ0NvbG9yO1xuXHRcdFx0Z2xfRnJhZ0NvbG9yLmEgKj0gb3BhY2l0eTtcblx0XHR9XG5cdFx0Iix1bmlmb3Jtczp7cmFuZ2U6dC5wcm9wKCJyYW5nZSIpLGxpbmVXaWR0aDp0LnByb3AoImxpbmVXaWR0aCIpLGNhcFNpemU6dC5wcm9wKCJjYXBTaXplIiksb3BhY2l0eTp0LnByb3AoIm9wYWNpdHkiKSxzY2FsZTp0LnByb3AoInNjYWxlIiksdHJhbnNsYXRlOnQucHJvcCgidHJhbnNsYXRlIiksc2NhbGVGcmFjdDp0LnByb3AoInNjYWxlRnJhY3QiKSx0cmFuc2xhdGVGcmFjdDp0LnByb3AoInRyYW5zbGF0ZUZyYWN0Iiksdmlld3BvcnQ6ZnVuY3Rpb24odCxlKXtyZXR1cm5bZS52aWV3cG9ydC54LGUudmlld3BvcnQueSx0LnZpZXdwb3J0V2lkdGgsdC52aWV3cG9ydEhlaWdodF19fSxhdHRyaWJ1dGVzOntjb2xvcjp7YnVmZmVyOmQsb2Zmc2V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIDQqZS5vZmZzZXR9LGRpdmlzb3I6MX0scG9zaXRpb246e2J1ZmZlcjpjLG9mZnNldDpmdW5jdGlvbih0LGUpe3JldHVybiA4KmUub2Zmc2V0fSxkaXZpc29yOjF9LHBvc2l0aW9uRnJhY3Q6e2J1ZmZlcjpwLG9mZnNldDpmdW5jdGlvbih0LGUpe3JldHVybiA4KmUub2Zmc2V0fSxkaXZpc29yOjF9LGVycm9yOntidWZmZXI6ZyxvZmZzZXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gMTYqZS5vZmZzZXR9LGRpdmlzb3I6MX0sZGlyZWN0aW9uOntidWZmZXI6bSxzdHJpZGU6MjQsb2Zmc2V0OjB9LGxpbmVPZmZzZXQ6e2J1ZmZlcjptLHN0cmlkZToyNCxvZmZzZXQ6OH0sY2FwT2Zmc2V0OntidWZmZXI6bSxzdHJpZGU6MjQsb2Zmc2V0OjE2fX0scHJpbWl0aXZlOiJ0cmlhbmdsZXMiLGJsZW5kOntlbmFibGU6ITAsY29sb3I6WzAsMCwwLDBdLGVxdWF0aW9uOntyZ2I6ImFkZCIsYWxwaGE6ImFkZCJ9LGZ1bmM6e3NyY1JHQjoic3JjIGFscGhhIixkc3RSR0I6Im9uZSBtaW51cyBzcmMgYWxwaGEiLHNyY0FscGhhOiJvbmUgbWludXMgZHN0IGFscGhhIixkc3RBbHBoYToib25lIn19LGRlcHRoOntlbmFibGU6ITF9LHNjaXNzb3I6e2VuYWJsZTohMCxib3g6dC5wcm9wKCJ2aWV3cG9ydCIpfSx2aWV3cG9ydDp0LnByb3AoInZpZXdwb3J0Iiksc3RlbmNpbDohMSxpbnN0YW5jZXM6dC5wcm9wKCJjb3VudCIpLGNvdW50OmYubGVuZ3RofSkscyhiLHt1cGRhdGU6ayxkcmF3Ol8sZGVzdHJveTpNLHJlZ2w6dCxnbDp2LGNhbnZhczp2LmNhbnZhcyxncm91cHM6eH0pLGI7ZnVuY3Rpb24gYih0KXt0P2sodCk6bnVsbD09PXQmJk0oKSxfKCl9ZnVuY3Rpb24gXyhlKXtpZigibnVtYmVyIj09dHlwZW9mIGUpcmV0dXJuIHcoZSk7ZSYmIUFycmF5LmlzQXJyYXkoZSkmJihlPVtlXSksdC5fcmVmcmVzaCgpLHguZm9yRWFjaChmdW5jdGlvbih0LHIpe3QmJihlJiYoZVtyXT90LmRyYXc9ITA6dC5kcmF3PSExKSx0LmRyYXc/dyhyKTp0LmRyYXc9ITApfSl9ZnVuY3Rpb24gdyh0KXsibnVtYmVyIj09dHlwZW9mIHQmJih0PXhbdF0pLG51bGwhPXQmJnQmJnQuY291bnQmJnQuY29sb3ImJnQub3BhY2l0eSYmdC5wb3NpdGlvbnMmJnQucG9zaXRpb25zLmxlbmd0aD4xJiYodC5zY2FsZVJhdGlvPVt0LnNjYWxlWzBdKnQudmlld3BvcnQud2lkdGgsdC5zY2FsZVsxXSp0LnZpZXdwb3J0LmhlaWdodF0scih0KSx0LmFmdGVyJiZ0LmFmdGVyKHQpKX1mdW5jdGlvbiBrKHQpe2lmKHQpe251bGwhPXQubGVuZ3RoPyJudW1iZXIiPT10eXBlb2YgdFswXSYmKHQ9W3twb3NpdGlvbnM6dH1dKTpBcnJheS5pc0FycmF5KHQpfHwodD1bdF0pO3ZhciBlPTAscj0wO2lmKGIuZ3JvdXBzPXg9dC5tYXAoZnVuY3Rpb24odCxjKXt2YXIgdT14W2NdO3JldHVybiB0PygiZnVuY3Rpb24iPT10eXBlb2YgdD90PXthZnRlcjp0fToibnVtYmVyIj09dHlwZW9mIHRbMF0mJih0PXtwb3NpdGlvbnM6dH0pLHQ9byh0LHtjb2xvcjoiY29sb3IgY29sb3JzIGZpbGwiLGNhcFNpemU6ImNhcFNpemUgY2FwIGNhcHNpemUgY2FwLXNpemUiLGxpbmVXaWR0aDoibGluZVdpZHRoIGxpbmUtd2lkdGggd2lkdGggbGluZSB0aGlja25lc3MiLG9wYWNpdHk6Im9wYWNpdHkgYWxwaGEiLHJhbmdlOiJyYW5nZSBkYXRhQm94Iix2aWV3cG9ydDoidmlld3BvcnQgdmlld0JveCIsZXJyb3JzOiJlcnJvcnMgZXJyb3IiLHBvc2l0aW9uczoicG9zaXRpb25zIHBvc2l0aW9uIGRhdGEgcG9pbnRzIn0pLHV8fCh4W2NdPXU9e2lkOmMsc2NhbGU6bnVsbCx0cmFuc2xhdGU6bnVsbCxzY2FsZUZyYWN0Om51bGwsdHJhbnNsYXRlRnJhY3Q6bnVsbCxkcmF3OiEwfSx0PXMoe30seSx0KSksYSh1LHQsW3tsaW5lV2lkdGg6ZnVuY3Rpb24odCl7cmV0dXJuLjUqK3R9LGNhcFNpemU6ZnVuY3Rpb24odCl7cmV0dXJuLjUqK3R9LG9wYWNpdHk6cGFyc2VGbG9hdCxlcnJvcnM6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bCh0KSxyKz10Lmxlbmd0aCx0fSxwb3NpdGlvbnM6ZnVuY3Rpb24odCxyKXtyZXR1cm4gdD1sKHQsImZsb2F0NjQiKSxyLmNvdW50PU1hdGguZmxvb3IodC5sZW5ndGgvMiksci5ib3VuZHM9bih0LDIpLHIub2Zmc2V0PWUsZSs9ci5jb3VudCx0fX0se2NvbG9yOmZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5jb3VudDtpZih0fHwodD0idHJhbnNwYXJlbnQiKSwhQXJyYXkuaXNBcnJheSh0KXx8Im51bWJlciI9PXR5cGVvZiB0WzBdKXt2YXIgbj10O3Q9QXJyYXkocik7Zm9yKHZhciBhPTA7YTxyO2ErKyl0W2FdPW59aWYodC5sZW5ndGg8cil0aHJvdyBFcnJvcigiTm90IGVub3VnaCBjb2xvcnMiKTtmb3IodmFyIG89bmV3IFVpbnQ4QXJyYXkoNCpyKSxzPTA7czxyO3MrKyl7dmFyIGw9aSh0W3NdLCJ1aW50OCIpO28uc2V0KGwsNCpzKX1yZXR1cm4gb30scmFuZ2U6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWUuYm91bmRzO3JldHVybiB0fHwodD1uKSxlLnNjYWxlPVsxLyh0WzJdLXRbMF0pLDEvKHRbM10tdFsxXSldLGUudHJhbnNsYXRlPVstdFswXSwtdFsxXV0sZS5zY2FsZUZyYWN0PWgoZS5zY2FsZSksZS50cmFuc2xhdGVGcmFjdD1oKGUudHJhbnNsYXRlKSx0fSx2aWV3cG9ydDpmdW5jdGlvbih0KXt2YXIgZTtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT9lPXt4OnRbMF0seTp0WzFdLHdpZHRoOnRbMl0tdFswXSxoZWlnaHQ6dFszXS10WzFdfTp0PyhlPXt4OnQueHx8dC5sZWZ0fHwwLHk6dC55fHx0LnRvcHx8MH0sdC5yaWdodD9lLndpZHRoPXQucmlnaHQtZS54OmUud2lkdGg9dC53fHx0LndpZHRofHwwLHQuYm90dG9tP2UuaGVpZ2h0PXQuYm90dG9tLWUueTplLmhlaWdodD10Lmh8fHQuaGVpZ2h0fHwwKTplPXt4OjAseTowLHdpZHRoOnYuZHJhd2luZ0J1ZmZlcldpZHRoLGhlaWdodDp2LmRyYXdpbmdCdWZmZXJIZWlnaHR9LGV9fV0pLHUpOnV9KSxlfHxyKXt2YXIgZj14LnJlZHVjZShmdW5jdGlvbih0LGUscil7cmV0dXJuIHQrKGU/ZS5jb3VudDowKX0sMCksbT1uZXcgRmxvYXQ2NEFycmF5KDIqZiksXz1uZXcgVWludDhBcnJheSg0KmYpLHc9bmV3IEZsb2F0MzJBcnJheSg0KmYpO3guZm9yRWFjaChmdW5jdGlvbih0LGUpe2lmKHQpe3ZhciByPXQucG9zaXRpb25zLG49dC5jb3VudCxpPXQub2Zmc2V0LGE9dC5jb2xvcixvPXQuZXJyb3JzO24mJihfLnNldChhLDQqaSksdy5zZXQobyw0KmkpLG0uc2V0KHIsMippKSl9fSksYyh1KG0pKSxwKGgobSkpLGQoXyksZyh3KX19fWZ1bmN0aW9uIE0oKXtjLmRlc3Ryb3koKSxwLmRlc3Ryb3koKSxkLmRlc3Ryb3koKSxnLmRlc3Ryb3koKSxtLmRlc3Ryb3koKX19O3ZhciBmPVtbMSwwLDAsMSwwLDBdLFsxLDAsMCwtMSwwLDBdLFstMSwwLDAsLTEsMCwwXSxbLTEsMCwwLC0xLDAsMF0sWy0xLDAsMCwxLDAsMF0sWzEsMCwwLDEsMCwwXSxbMSwwLC0xLDAsMCwxXSxbMSwwLC0xLDAsMCwtMV0sWzEsMCwxLDAsMCwtMV0sWzEsMCwxLDAsMCwtMV0sWzEsMCwxLDAsMCwxXSxbMSwwLC0xLDAsMCwxXSxbLTEsMCwtMSwwLDAsMV0sWy0xLDAsLTEsMCwwLC0xXSxbLTEsMCwxLDAsMCwtMV0sWy0xLDAsMSwwLDAsLTFdLFstMSwwLDEsMCwwLDFdLFstMSwwLC0xLDAsMCwxXSxbMCwxLDEsMCwwLDBdLFswLDEsLTEsMCwwLDBdLFswLC0xLC0xLDAsMCwwXSxbMCwtMSwtMSwwLDAsMF0sWzAsMSwxLDAsMCwwXSxbMCwtMSwxLDAsMCwwXSxbMCwxLDAsLTEsMSwwXSxbMCwxLDAsLTEsLTEsMF0sWzAsMSwwLDEsLTEsMF0sWzAsMSwwLDEsMSwwXSxbMCwxLDAsLTEsMSwwXSxbMCwxLDAsMSwtMSwwXSxbMCwtMSwwLC0xLDEsMF0sWzAsLTEsMCwtMSwtMSwwXSxbMCwtMSwwLDEsLTEsMF0sWzAsLTEsMCwxLDEsMF0sWzAsLTEsMCwtMSwxLDBdLFswLC0xLDAsMSwtMSwwXV19LHsiYXJyYXktYm91bmRzIjo1NiwiY29sb3Itbm9ybWFsaXplIjoxMDcsImZsYXR0ZW4tdmVydGV4LWRhdGEiOjIxNiwib2JqZWN0LWFzc2lnbiI6NDIxLCJwaWNrLWJ5LWFsaWFzIjo0MzIsInRvLWZsb2F0MzIiOjUwMCwidXBkYXRlLWRpZmYiOjUxMX1dLDQ1ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJjb2xvci1ub3JtYWxpemUiKSxpPXQoImFycmF5LWJvdW5kcyIpLGE9dCgib2JqZWN0LWFzc2lnbiIpLG89dCgiZ2xzbGlmeSIpLHM9dCgicGljay1ieS1hbGlhcyIpLGw9dCgiZmxhdHRlbi12ZXJ0ZXgtZGF0YSIpLGM9dCgiZWFyY3V0IiksdT10KCJhcnJheS1ub3JtYWxpemUiKSxoPXQoInRvLWZsb2F0MzIiKSxmPWguZmxvYXQzMixwPWguZnJhY3QzMixkPXQoImVzNi13ZWFrLW1hcCIpLGc9dCgicGFyc2UtcmVjdCIpO2Z1bmN0aW9uIG0odCxlKXtpZighKHRoaXMgaW5zdGFuY2VvZiBtKSlyZXR1cm4gbmV3IG0odCxlKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgdD8oZXx8KGU9e30pLGUucmVnbD10KTplPXQsZS5sZW5ndGgmJihlLnBvc2l0aW9ucz1lKSwhKHQ9ZS5yZWdsKS5oYXNFeHRlbnNpb24oIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKSl0aHJvdyBFcnJvcigicmVnbC1lcnJvcjJkOiBgQU5HTEVfaW5zdGFuY2VkX2FycmF5c2AgZXh0ZW5zaW9uIHNob3VsZCBiZSBlbmFibGVkIik7dGhpcy5nbD10Ll9nbCx0aGlzLnJlZ2w9dCx0aGlzLnBhc3Nlcz1bXSx0aGlzLnNoYWRlcnM9bS5zaGFkZXJzLmhhcyh0KT9tLnNoYWRlcnMuZ2V0KHQpOm0uc2hhZGVycy5zZXQodCxtLmNyZWF0ZVNoYWRlcnModCkpLmdldCh0KSx0aGlzLnVwZGF0ZShlKX1lLmV4cG9ydHM9bSxtLmRhc2hNdWx0PTIsbS5tYXhQYXR0ZXJuTGVuZ3RoPTI1NixtLnByZWNpc2lvblRocmVzaG9sZD0zZTYsbS5tYXhQb2ludHM9MWU0LG0ubWF4TGluZXM9MjA0OCxtLnNoYWRlcnM9bmV3IGQsbS5jcmVhdGVTaGFkZXJzPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dC5idWZmZXIoe3VzYWdlOiJzdGF0aWMiLHR5cGU6ImZsb2F0IixkYXRhOlswLDEsMCwwLDEsMSwxLDBdfSksbj17cHJpbWl0aXZlOiJ0cmlhbmdsZSBzdHJpcCIsaW5zdGFuY2VzOnQucHJvcCgiY291bnQiKSxjb3VudDo0LG9mZnNldDowLHVuaWZvcm1zOnttaXRlck1vZGU6ZnVuY3Rpb24odCxlKXtyZXR1cm4icm91bmQiPT09ZS5qb2luPzI6MX0sbWl0ZXJMaW1pdDp0LnByb3AoIm1pdGVyTGltaXQiKSxzY2FsZTp0LnByb3AoInNjYWxlIiksc2NhbGVGcmFjdDp0LnByb3AoInNjYWxlRnJhY3QiKSx0cmFuc2xhdGVGcmFjdDp0LnByb3AoInRyYW5zbGF0ZUZyYWN0IiksdHJhbnNsYXRlOnQucHJvcCgidHJhbnNsYXRlIiksdGhpY2tuZXNzOnQucHJvcCgidGhpY2tuZXNzIiksZGFzaFBhdHRlcm46dC5wcm9wKCJkYXNoVGV4dHVyZSIpLG9wYWNpdHk6dC5wcm9wKCJvcGFjaXR5IikscGl4ZWxSYXRpbzp0LmNvbnRleHQoInBpeGVsUmF0aW8iKSxpZDp0LnByb3AoImlkIiksZGFzaFNpemU6dC5wcm9wKCJkYXNoTGVuZ3RoIiksdmlld3BvcnQ6ZnVuY3Rpb24odCxlKXtyZXR1cm5bZS52aWV3cG9ydC54LGUudmlld3BvcnQueSx0LnZpZXdwb3J0V2lkdGgsdC52aWV3cG9ydEhlaWdodF19LGRlcHRoOnQucHJvcCgiZGVwdGgiKX0sYmxlbmQ6e2VuYWJsZTohMCxjb2xvcjpbMCwwLDAsMF0sZXF1YXRpb246e3JnYjoiYWRkIixhbHBoYToiYWRkIn0sZnVuYzp7c3JjUkdCOiJzcmMgYWxwaGEiLGRzdFJHQjoib25lIG1pbnVzIHNyYyBhbHBoYSIsc3JjQWxwaGE6Im9uZSBtaW51cyBkc3QgYWxwaGEiLGRzdEFscGhhOiJvbmUifX0sZGVwdGg6e2VuYWJsZTpmdW5jdGlvbih0LGUpe3JldHVybiFlLm92ZXJsYXl9fSxzdGVuY2lsOntlbmFibGU6ITF9LHNjaXNzb3I6e2VuYWJsZTohMCxib3g6dC5wcm9wKCJ2aWV3cG9ydCIpfSx2aWV3cG9ydDp0LnByb3AoInZpZXdwb3J0Iil9LGk9dChhKHt2ZXJ0Om8oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMiBhQ29vcmQsIGJDb29yZCwgYUNvb3JkRnJhY3QsIGJDb29yZEZyYWN0O1xuYXR0cmlidXRlIHZlYzQgY29sb3I7XG5hdHRyaWJ1dGUgZmxvYXQgbGluZUVuZCwgbGluZVRvcDtcblxudW5pZm9ybSB2ZWMyIHNjYWxlLCBzY2FsZUZyYWN0LCB0cmFuc2xhdGUsIHRyYW5zbGF0ZUZyYWN0O1xudW5pZm9ybSBmbG9hdCB0aGlja25lc3MsIHBpeGVsUmF0aW8sIGlkLCBkZXB0aDtcbnVuaWZvcm0gdmVjNCB2aWV3cG9ydDtcblxudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcbnZhcnlpbmcgdmVjMiB0YW5nZW50O1xuXG52ZWMyIHByb2plY3QodmVjMiBwb3NpdGlvbiwgdmVjMiBwb3NpdGlvbkZyYWN0LCB2ZWMyIHNjYWxlLCB2ZWMyIHNjYWxlRnJhY3QsIHZlYzIgdHJhbnNsYXRlLCB2ZWMyIHRyYW5zbGF0ZUZyYWN0KSB7XG5cdC8vIHRoZSBvcmRlciBpcyBpbXBvcnRhbnRcblx0cmV0dXJuIHBvc2l0aW9uICogc2NhbGUgKyB0cmFuc2xhdGVcbiAgICAgICArIHBvc2l0aW9uRnJhY3QgKiBzY2FsZSArIHRyYW5zbGF0ZUZyYWN0XG4gICAgICAgKyBwb3NpdGlvbiAqIHNjYWxlRnJhY3RcbiAgICAgICArIHBvc2l0aW9uRnJhY3QgKiBzY2FsZUZyYWN0O1xufVxuXG52b2lkIG1haW4oKSB7XG5cdGZsb2F0IGxpbmVTdGFydCA9IDEuIC0gbGluZUVuZDtcblx0ZmxvYXQgbGluZU9mZnNldCA9IGxpbmVUb3AgKiAyLiAtIDEuO1xuXG5cdHZlYzIgZGlmZiA9IChiQ29vcmQgKyBiQ29vcmRGcmFjdCAtIGFDb29yZCAtIGFDb29yZEZyYWN0KTtcblx0dGFuZ2VudCA9IG5vcm1hbGl6ZShkaWZmICogc2NhbGUgKiB2aWV3cG9ydC56dyk7XG5cdHZlYzIgbm9ybWFsID0gdmVjMigtdGFuZ2VudC55LCB0YW5nZW50LngpO1xuXG5cdHZlYzIgcG9zaXRpb24gPSBwcm9qZWN0KGFDb29yZCwgYUNvb3JkRnJhY3QsIHNjYWxlLCBzY2FsZUZyYWN0LCB0cmFuc2xhdGUsIHRyYW5zbGF0ZUZyYWN0KSAqIGxpbmVTdGFydFxuXHRcdCsgcHJvamVjdChiQ29vcmQsIGJDb29yZEZyYWN0LCBzY2FsZSwgc2NhbGVGcmFjdCwgdHJhbnNsYXRlLCB0cmFuc2xhdGVGcmFjdCkgKiBsaW5lRW5kXG5cblx0XHQrIHRoaWNrbmVzcyAqIG5vcm1hbCAqIC41ICogbGluZU9mZnNldCAvIHZpZXdwb3J0Lnp3O1xuXG5cdGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiAqIDIuMCAtIDEuMCwgZGVwdGgsIDEpO1xuXG5cdGZyYWdDb2xvciA9IGNvbG9yIC8gMjU1Ljtcbn1cbiJdKSxmcmFnOm8oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG51bmlmb3JtIHNhbXBsZXIyRCBkYXNoUGF0dGVybjtcblxudW5pZm9ybSBmbG9hdCBkYXNoU2l6ZSwgcGl4ZWxSYXRpbywgdGhpY2tuZXNzLCBvcGFjaXR5LCBpZDtcblxudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcbnZhcnlpbmcgdmVjMiB0YW5nZW50O1xuXG52b2lkIG1haW4oKSB7XG5cdGZsb2F0IGFscGhhID0gMS47XG5cblx0ZmxvYXQgdCA9IGZyYWN0KGRvdCh0YW5nZW50LCBnbF9GcmFnQ29vcmQueHkpIC8gZGFzaFNpemUpICogLjUgKyAuMjU7XG5cdGZsb2F0IGRhc2ggPSB0ZXh0dXJlMkQoZGFzaFBhdHRlcm4sIHZlYzIodCwgLjUpKS5yO1xuXG5cdGdsX0ZyYWdDb2xvciA9IGZyYWdDb2xvcjtcblx0Z2xfRnJhZ0NvbG9yLmEgKj0gYWxwaGEgKiBvcGFjaXR5ICogZGFzaDtcbn1cbiJdKSxhdHRyaWJ1dGVzOntsaW5lRW5kOntidWZmZXI6cixkaXZpc29yOjAsc3RyaWRlOjgsb2Zmc2V0OjB9LGxpbmVUb3A6e2J1ZmZlcjpyLGRpdmlzb3I6MCxzdHJpZGU6OCxvZmZzZXQ6NH0sYUNvb3JkOntidWZmZXI6dC5wcm9wKCJwb3NpdGlvbkJ1ZmZlciIpLHN0cmlkZTo4LG9mZnNldDo4LGRpdmlzb3I6MX0sYkNvb3JkOntidWZmZXI6dC5wcm9wKCJwb3NpdGlvbkJ1ZmZlciIpLHN0cmlkZTo4LG9mZnNldDoxNixkaXZpc29yOjF9LGFDb29yZEZyYWN0OntidWZmZXI6dC5wcm9wKCJwb3NpdGlvbkZyYWN0QnVmZmVyIiksc3RyaWRlOjgsb2Zmc2V0OjgsZGl2aXNvcjoxfSxiQ29vcmRGcmFjdDp7YnVmZmVyOnQucHJvcCgicG9zaXRpb25GcmFjdEJ1ZmZlciIpLHN0cmlkZTo4LG9mZnNldDoxNixkaXZpc29yOjF9LGNvbG9yOntidWZmZXI6dC5wcm9wKCJjb2xvckJ1ZmZlciIpLHN0cmlkZTo0LG9mZnNldDowLGRpdmlzb3I6MX19fSxuKSk7dHJ5e2U9dChhKHtjdWxsOntlbmFibGU6ITAsZmFjZToiYmFjayJ9LHZlcnQ6byhbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMyIGFDb29yZCwgYkNvb3JkLCBuZXh0Q29vcmQsIHByZXZDb29yZDtcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvciwgYkNvbG9yO1xuYXR0cmlidXRlIGZsb2F0IGxpbmVFbmQsIGxpbmVUb3A7XG5cbnVuaWZvcm0gdmVjMiBzY2FsZSwgdHJhbnNsYXRlO1xudW5pZm9ybSBmbG9hdCB0aGlja25lc3MsIHBpeGVsUmF0aW8sIGlkLCBkZXB0aDtcbnVuaWZvcm0gdmVjNCB2aWV3cG9ydDtcbnVuaWZvcm0gZmxvYXQgbWl0ZXJMaW1pdCwgbWl0ZXJNb2RlO1xuXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xudmFyeWluZyB2ZWM0IHN0YXJ0Q3V0b2ZmLCBlbmRDdXRvZmY7XG52YXJ5aW5nIHZlYzIgdGFuZ2VudDtcbnZhcnlpbmcgdmVjMiBzdGFydENvb3JkLCBlbmRDb29yZDtcbnZhcnlpbmcgZmxvYXQgZW5hYmxlU3RhcnRNaXRlciwgZW5hYmxlRW5kTWl0ZXI7XG5cbmNvbnN0IGZsb2F0IFJFVkVSU0VfVEhSRVNIT0xEID0gLS44NzU7XG5jb25zdCBmbG9hdCBNSU5fRElGRiA9IDFlLTY7XG5cbi8vIFRPRE86IHBvc3NpYmxlIG9wdGltaXphdGlvbnM6IGF2b2lkIG92ZXJjYWxjdWxhdGluZyBhbGwgZm9yIHZlcnRpY2VzIGFuZCBjYWxjIGp1c3Qgb25lIGluc3RlYWRcbi8vIFRPRE86IHByZWNhbGN1bGF0ZSBkb3QgcHJvZHVjdHMsIG5vcm1hbGl6ZSB0aGluZ3MgYmVmb3JlaGVhZCBldGMuXG4vLyBUT0RPOiByZWZhY3RvciB0byByZWN0YW5ndWxhciBhbGdvcml0aG1cblxuZmxvYXQgZGlzdFRvTGluZSh2ZWMyIHAsIHZlYzIgYSwgdmVjMiBiKSB7XG5cdHZlYzIgZGlmZiA9IGIgLSBhO1xuXHR2ZWMyIHBlcnAgPSBub3JtYWxpemUodmVjMigtZGlmZi55LCBkaWZmLngpKTtcblx0cmV0dXJuIGRvdChwIC0gYSwgcGVycCk7XG59XG5cbmJvb2wgaXNOYU4oIGZsb2F0IHZhbCApe1xuICByZXR1cm4gKCB2YWwgPCAwLjAgfHwgMC4wIDwgdmFsIHx8IHZhbCA9PSAwLjAgKSA/IGZhbHNlIDogdHJ1ZTtcbn1cblxudm9pZCBtYWluKCkge1xuXHR2ZWMyIGFDb29yZCA9IGFDb29yZCwgYkNvb3JkID0gYkNvb3JkLCBwcmV2Q29vcmQgPSBwcmV2Q29vcmQsIG5leHRDb29yZCA9IG5leHRDb29yZDtcblxuXHQvLyBhZGp1c3Qgc2NhbGUgZm9yIGhvcml6b250YWwgYmFyc1xuXHR2ZWMyIHNjYWxlID0gbWF4KHNjYWxlLCBNSU5fRElGRik7XG5cdHZlYzIgc2NhbGVSYXRpbyA9IHNjYWxlICogdmlld3BvcnQuenc7XG5cblx0dmVjMiBub3JtYWxXaWR0aCA9IHRoaWNrbmVzcyAvIHNjYWxlUmF0aW87XG5cblx0ZmxvYXQgbGluZVN0YXJ0ID0gMS4gLSBsaW5lRW5kO1xuXHRmbG9hdCBsaW5lQm90ID0gMS4gLSBsaW5lVG9wO1xuXG5cdGZyYWdDb2xvciA9IChsaW5lU3RhcnQgKiBhQ29sb3IgKyBsaW5lRW5kICogYkNvbG9yKSAvIDI1NS47XG5cblx0aWYgKGlzTmFOKGFDb29yZC54KSB8fCBpc05hTihhQ29vcmQueSkgfHwgaXNOYU4oYkNvb3JkLngpIHx8IGlzTmFOKGJDb29yZC55KSkgcmV0dXJuO1xuXG5cdGlmIChhQ29vcmQgPT0gcHJldkNvb3JkKSBwcmV2Q29vcmQgPSBhQ29vcmQgKyBub3JtYWxpemUoYkNvb3JkIC0gYUNvb3JkKTtcblx0aWYgKGJDb29yZCA9PSBuZXh0Q29vcmQpIG5leHRDb29yZCA9IGJDb29yZCAtIG5vcm1hbGl6ZShiQ29vcmQgLSBhQ29vcmQpO1xuXG5cdHZlYzIgcHJldkRpZmYgPSBhQ29vcmQgLSBwcmV2Q29vcmQ7XG5cdHZlYzIgY3VyckRpZmYgPSBiQ29vcmQgLSBhQ29vcmQ7XG5cdHZlYzIgbmV4dERpZmYgPSBuZXh0Q29vcmQgLSBiQ29vcmQ7XG5cblx0dmVjMiBwcmV2VGFuZ2VudCA9IG5vcm1hbGl6ZShwcmV2RGlmZiAqIHNjYWxlUmF0aW8pO1xuXHR2ZWMyIGN1cnJUYW5nZW50ID0gbm9ybWFsaXplKGN1cnJEaWZmICogc2NhbGVSYXRpbyk7XG5cdHZlYzIgbmV4dFRhbmdlbnQgPSBub3JtYWxpemUobmV4dERpZmYgKiBzY2FsZVJhdGlvKTtcblxuXHR2ZWMyIHByZXZOb3JtYWwgPSB2ZWMyKC1wcmV2VGFuZ2VudC55LCBwcmV2VGFuZ2VudC54KTtcblx0dmVjMiBjdXJyTm9ybWFsID0gdmVjMigtY3VyclRhbmdlbnQueSwgY3VyclRhbmdlbnQueCk7XG5cdHZlYzIgbmV4dE5vcm1hbCA9IHZlYzIoLW5leHRUYW5nZW50LnksIG5leHRUYW5nZW50LngpO1xuXG5cdHZlYzIgc3RhcnRKb2luRGlyZWN0aW9uID0gbm9ybWFsaXplKHByZXZUYW5nZW50IC0gY3VyclRhbmdlbnQpO1xuXHR2ZWMyIGVuZEpvaW5EaXJlY3Rpb24gPSBub3JtYWxpemUoY3VyclRhbmdlbnQgLSBuZXh0VGFuZ2VudCk7XG5cblx0Ly8gY29sbGFwc2VkL3VuaWRpcmVjdGlvbmFsIHNlZ21lbnQgY2FzZXNcblx0Ly8gRklYTUU6IHRoZXJlIHNob3VsZCBiZSBtb3JlIGVsZWdhbnQgc29sdXRpb25cblx0dmVjMiBwcmV2VGFuRGlmZiA9IGFicyhwcmV2VGFuZ2VudCAtIGN1cnJUYW5nZW50KTtcblx0dmVjMiBuZXh0VGFuRGlmZiA9IGFicyhuZXh0VGFuZ2VudCAtIGN1cnJUYW5nZW50KTtcblx0aWYgKG1heChwcmV2VGFuRGlmZi54LCBwcmV2VGFuRGlmZi55KSA8IE1JTl9ESUZGKSB7XG5cdFx0c3RhcnRKb2luRGlyZWN0aW9uID0gY3Vyck5vcm1hbDtcblx0fVxuXHRpZiAobWF4KG5leHRUYW5EaWZmLngsIG5leHRUYW5EaWZmLnkpIDwgTUlOX0RJRkYpIHtcblx0XHRlbmRKb2luRGlyZWN0aW9uID0gY3Vyck5vcm1hbDtcblx0fVxuXHRpZiAoYUNvb3JkID09IGJDb29yZCkge1xuXHRcdGVuZEpvaW5EaXJlY3Rpb24gPSBzdGFydEpvaW5EaXJlY3Rpb247XG5cdFx0Y3Vyck5vcm1hbCA9IHByZXZOb3JtYWw7XG5cdFx0Y3VyclRhbmdlbnQgPSBwcmV2VGFuZ2VudDtcblx0fVxuXG5cdHRhbmdlbnQgPSBjdXJyVGFuZ2VudDtcblxuXHQvL2NhbGN1bGF0ZSBqb2luIHNoaWZ0cyByZWxhdGl2ZSB0byBub3JtYWxzXG5cdGZsb2F0IHN0YXJ0Sm9pblNoaWZ0ID0gZG90KGN1cnJOb3JtYWwsIHN0YXJ0Sm9pbkRpcmVjdGlvbik7XG5cdGZsb2F0IGVuZEpvaW5TaGlmdCA9IGRvdChjdXJyTm9ybWFsLCBlbmRKb2luRGlyZWN0aW9uKTtcblxuXHRmbG9hdCBzdGFydE1pdGVyUmF0aW8gPSBhYnMoMS4gLyBzdGFydEpvaW5TaGlmdCk7XG5cdGZsb2F0IGVuZE1pdGVyUmF0aW8gPSBhYnMoMS4gLyBlbmRKb2luU2hpZnQpO1xuXG5cdHZlYzIgc3RhcnRKb2luID0gc3RhcnRKb2luRGlyZWN0aW9uICogc3RhcnRNaXRlclJhdGlvO1xuXHR2ZWMyIGVuZEpvaW4gPSBlbmRKb2luRGlyZWN0aW9uICogZW5kTWl0ZXJSYXRpbztcblxuXHR2ZWMyIHN0YXJ0VG9wSm9pbiwgc3RhcnRCb3RKb2luLCBlbmRUb3BKb2luLCBlbmRCb3RKb2luO1xuXHRzdGFydFRvcEpvaW4gPSBzaWduKHN0YXJ0Sm9pblNoaWZ0KSAqIHN0YXJ0Sm9pbiAqIC41O1xuXHRzdGFydEJvdEpvaW4gPSAtc3RhcnRUb3BKb2luO1xuXG5cdGVuZFRvcEpvaW4gPSBzaWduKGVuZEpvaW5TaGlmdCkgKiBlbmRKb2luICogLjU7XG5cdGVuZEJvdEpvaW4gPSAtZW5kVG9wSm9pbjtcblxuXHR2ZWMyIGFUb3BDb29yZCA9IGFDb29yZCArIG5vcm1hbFdpZHRoICogc3RhcnRUb3BKb2luO1xuXHR2ZWMyIGJUb3BDb29yZCA9IGJDb29yZCArIG5vcm1hbFdpZHRoICogZW5kVG9wSm9pbjtcblx0dmVjMiBhQm90Q29vcmQgPSBhQ29vcmQgKyBub3JtYWxXaWR0aCAqIHN0YXJ0Qm90Sm9pbjtcblx0dmVjMiBiQm90Q29vcmQgPSBiQ29vcmQgKyBub3JtYWxXaWR0aCAqIGVuZEJvdEpvaW47XG5cblx0Ly9taXRlciBhbnRpLWNsaXBwaW5nXG5cdGZsb2F0IGJhQ2xpcHBpbmcgPSBkaXN0VG9MaW5lKGJDb29yZCwgYUNvb3JkLCBhQm90Q29vcmQpIC8gZG90KG5vcm1hbGl6ZShub3JtYWxXaWR0aCAqIGVuZEJvdEpvaW4pLCBub3JtYWxpemUobm9ybWFsV2lkdGgueXggKiB2ZWMyKC1zdGFydEJvdEpvaW4ueSwgc3RhcnRCb3RKb2luLngpKSk7XG5cdGZsb2F0IGFiQ2xpcHBpbmcgPSBkaXN0VG9MaW5lKGFDb29yZCwgYkNvb3JkLCBiVG9wQ29vcmQpIC8gZG90KG5vcm1hbGl6ZShub3JtYWxXaWR0aCAqIHN0YXJ0Qm90Sm9pbiksIG5vcm1hbGl6ZShub3JtYWxXaWR0aC55eCAqIHZlYzIoLWVuZEJvdEpvaW4ueSwgZW5kQm90Sm9pbi54KSkpO1xuXG5cdC8vcHJldmVudCBjbG9zZSB0byByZXZlcnNlIGRpcmVjdGlvbiBzd2l0Y2hcblx0Ym9vbCBwcmV2UmV2ZXJzZSA9IGRvdChjdXJyVGFuZ2VudCwgcHJldlRhbmdlbnQpIDw9IFJFVkVSU0VfVEhSRVNIT0xEICYmIGFicyhkb3QoY3VyclRhbmdlbnQsIHByZXZOb3JtYWwpKSAqIG1pbihsZW5ndGgocHJldkRpZmYpLCBsZW5ndGgoY3VyckRpZmYpKSA8ICBsZW5ndGgobm9ybWFsV2lkdGggKiBjdXJyTm9ybWFsKTtcblx0Ym9vbCBuZXh0UmV2ZXJzZSA9IGRvdChjdXJyVGFuZ2VudCwgbmV4dFRhbmdlbnQpIDw9IFJFVkVSU0VfVEhSRVNIT0xEICYmIGFicyhkb3QoY3VyclRhbmdlbnQsIG5leHROb3JtYWwpKSAqIG1pbihsZW5ndGgobmV4dERpZmYpLCBsZW5ndGgoY3VyckRpZmYpKSA8ICBsZW5ndGgobm9ybWFsV2lkdGggKiBjdXJyTm9ybWFsKTtcblxuXHRpZiAocHJldlJldmVyc2UpIHtcblx0XHQvL21ha2Ugam9pbiByZWN0YW5ndWxhclxuXHRcdHZlYzIgbWl0ZXJTaGlmdCA9IG5vcm1hbFdpZHRoICogc3RhcnRKb2luRGlyZWN0aW9uICogbWl0ZXJMaW1pdCAqIC41O1xuXHRcdGZsb2F0IG5vcm1hbEFkanVzdCA9IDEuIC0gbWluKG1pdGVyTGltaXQgLyBzdGFydE1pdGVyUmF0aW8sIDEuKTtcblx0XHRhQm90Q29vcmQgPSBhQ29vcmQgKyBtaXRlclNoaWZ0IC0gbm9ybWFsQWRqdXN0ICogbm9ybWFsV2lkdGggKiBjdXJyTm9ybWFsICogLjU7XG5cdFx0YVRvcENvb3JkID0gYUNvb3JkICsgbWl0ZXJTaGlmdCArIG5vcm1hbEFkanVzdCAqIG5vcm1hbFdpZHRoICogY3Vyck5vcm1hbCAqIC41O1xuXHR9XG5cdGVsc2UgaWYgKCFuZXh0UmV2ZXJzZSAmJiBiYUNsaXBwaW5nID4gMC4gJiYgYmFDbGlwcGluZyA8IGxlbmd0aChub3JtYWxXaWR0aCAqIGVuZEJvdEpvaW4pKSB7XG5cdFx0Ly9oYW5kbGUgbWl0ZXIgY2xpcHBpbmdcblx0XHRiVG9wQ29vcmQgLT0gbm9ybWFsV2lkdGggKiBlbmRUb3BKb2luO1xuXHRcdGJUb3BDb29yZCArPSBub3JtYWxpemUoZW5kVG9wSm9pbiAqIG5vcm1hbFdpZHRoKSAqIGJhQ2xpcHBpbmc7XG5cdH1cblxuXHRpZiAobmV4dFJldmVyc2UpIHtcblx0XHQvL21ha2Ugam9pbiByZWN0YW5ndWxhclxuXHRcdHZlYzIgbWl0ZXJTaGlmdCA9IG5vcm1hbFdpZHRoICogZW5kSm9pbkRpcmVjdGlvbiAqIG1pdGVyTGltaXQgKiAuNTtcblx0XHRmbG9hdCBub3JtYWxBZGp1c3QgPSAxLiAtIG1pbihtaXRlckxpbWl0IC8gZW5kTWl0ZXJSYXRpbywgMS4pO1xuXHRcdGJCb3RDb29yZCA9IGJDb29yZCArIG1pdGVyU2hpZnQgLSBub3JtYWxBZGp1c3QgKiBub3JtYWxXaWR0aCAqIGN1cnJOb3JtYWwgKiAuNTtcblx0XHRiVG9wQ29vcmQgPSBiQ29vcmQgKyBtaXRlclNoaWZ0ICsgbm9ybWFsQWRqdXN0ICogbm9ybWFsV2lkdGggKiBjdXJyTm9ybWFsICogLjU7XG5cdH1cblx0ZWxzZSBpZiAoIXByZXZSZXZlcnNlICYmIGFiQ2xpcHBpbmcgPiAwLiAmJiBhYkNsaXBwaW5nIDwgbGVuZ3RoKG5vcm1hbFdpZHRoICogc3RhcnRCb3RKb2luKSkge1xuXHRcdC8vaGFuZGxlIG1pdGVyIGNsaXBwaW5nXG5cdFx0YUJvdENvb3JkIC09IG5vcm1hbFdpZHRoICogc3RhcnRCb3RKb2luO1xuXHRcdGFCb3RDb29yZCArPSBub3JtYWxpemUoc3RhcnRCb3RKb2luICogbm9ybWFsV2lkdGgpICogYWJDbGlwcGluZztcblx0fVxuXG5cdHZlYzIgYVRvcFBvc2l0aW9uID0gKGFUb3BDb29yZCkgKiBzY2FsZSArIHRyYW5zbGF0ZTtcblx0dmVjMiBhQm90UG9zaXRpb24gPSAoYUJvdENvb3JkKSAqIHNjYWxlICsgdHJhbnNsYXRlO1xuXG5cdHZlYzIgYlRvcFBvc2l0aW9uID0gKGJUb3BDb29yZCkgKiBzY2FsZSArIHRyYW5zbGF0ZTtcblx0dmVjMiBiQm90UG9zaXRpb24gPSAoYkJvdENvb3JkKSAqIHNjYWxlICsgdHJhbnNsYXRlO1xuXG5cdC8vcG9zaXRpb24gaXMgbm9ybWFsaXplZCAwLi4xIGNvb3JkIG9uIHRoZSBzY3JlZW5cblx0dmVjMiBwb3NpdGlvbiA9IChhVG9wUG9zaXRpb24gKiBsaW5lVG9wICsgYUJvdFBvc2l0aW9uICogbGluZUJvdCkgKiBsaW5lU3RhcnQgKyAoYlRvcFBvc2l0aW9uICogbGluZVRvcCArIGJCb3RQb3NpdGlvbiAqIGxpbmVCb3QpICogbGluZUVuZDtcblxuXHRzdGFydENvb3JkID0gYUNvb3JkICogc2NhbGVSYXRpbyArIHRyYW5zbGF0ZSAqIHZpZXdwb3J0Lnp3ICsgdmlld3BvcnQueHk7XG5cdGVuZENvb3JkID0gYkNvb3JkICogc2NhbGVSYXRpbyArIHRyYW5zbGF0ZSAqIHZpZXdwb3J0Lnp3ICsgdmlld3BvcnQueHk7XG5cblx0Z2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uICAqIDIuMCAtIDEuMCwgZGVwdGgsIDEpO1xuXG5cdGVuYWJsZVN0YXJ0TWl0ZXIgPSBzdGVwKGRvdChjdXJyVGFuZ2VudCwgcHJldlRhbmdlbnQpLCAuNSk7XG5cdGVuYWJsZUVuZE1pdGVyID0gc3RlcChkb3QoY3VyclRhbmdlbnQsIG5leHRUYW5nZW50KSwgLjUpO1xuXG5cdC8vYmV2ZWwgbWl0ZXIgY3V0b2Zmc1xuXHRpZiAobWl0ZXJNb2RlID09IDEuKSB7XG5cdFx0aWYgKGVuYWJsZVN0YXJ0TWl0ZXIgPT0gMS4pIHtcblx0XHRcdHZlYzIgc3RhcnRNaXRlcldpZHRoID0gdmVjMihzdGFydEpvaW5EaXJlY3Rpb24pICogdGhpY2tuZXNzICogbWl0ZXJMaW1pdCAqIC41O1xuXHRcdFx0c3RhcnRDdXRvZmYgPSB2ZWM0KGFDb29yZCwgYUNvb3JkKTtcblx0XHRcdHN0YXJ0Q3V0b2ZmLnp3ICs9IHZlYzIoLXN0YXJ0Sm9pbkRpcmVjdGlvbi55LCBzdGFydEpvaW5EaXJlY3Rpb24ueCkgLyBzY2FsZVJhdGlvO1xuXHRcdFx0c3RhcnRDdXRvZmYgPSBzdGFydEN1dG9mZiAqIHNjYWxlUmF0aW8ueHl4eSArIHRyYW5zbGF0ZS54eXh5ICogdmlld3BvcnQuend6dztcblx0XHRcdHN0YXJ0Q3V0b2ZmICs9IHZpZXdwb3J0Lnh5eHk7XG5cdFx0XHRzdGFydEN1dG9mZiArPSBzdGFydE1pdGVyV2lkdGgueHl4eTtcblx0XHR9XG5cblx0XHRpZiAoZW5hYmxlRW5kTWl0ZXIgPT0gMS4pIHtcblx0XHRcdHZlYzIgZW5kTWl0ZXJXaWR0aCA9IHZlYzIoZW5kSm9pbkRpcmVjdGlvbikgKiB0aGlja25lc3MgKiBtaXRlckxpbWl0ICogLjU7XG5cdFx0XHRlbmRDdXRvZmYgPSB2ZWM0KGJDb29yZCwgYkNvb3JkKTtcblx0XHRcdGVuZEN1dG9mZi56dyArPSB2ZWMyKC1lbmRKb2luRGlyZWN0aW9uLnksIGVuZEpvaW5EaXJlY3Rpb24ueCkgIC8gc2NhbGVSYXRpbztcblx0XHRcdGVuZEN1dG9mZiA9IGVuZEN1dG9mZiAqIHNjYWxlUmF0aW8ueHl4eSArIHRyYW5zbGF0ZS54eXh5ICogdmlld3BvcnQuend6dztcblx0XHRcdGVuZEN1dG9mZiArPSB2aWV3cG9ydC54eXh5O1xuXHRcdFx0ZW5kQ3V0b2ZmICs9IGVuZE1pdGVyV2lkdGgueHl4eTtcblx0XHR9XG5cdH1cblxuXHQvL3JvdW5kIG1pdGVyIGN1dG9mZnNcblx0ZWxzZSBpZiAobWl0ZXJNb2RlID09IDIuKSB7XG5cdFx0aWYgKGVuYWJsZVN0YXJ0TWl0ZXIgPT0gMS4pIHtcblx0XHRcdHZlYzIgc3RhcnRNaXRlcldpZHRoID0gdmVjMihzdGFydEpvaW5EaXJlY3Rpb24pICogdGhpY2tuZXNzICogYWJzKGRvdChzdGFydEpvaW5EaXJlY3Rpb24sIGN1cnJOb3JtYWwpKSAqIC41O1xuXHRcdFx0c3RhcnRDdXRvZmYgPSB2ZWM0KGFDb29yZCwgYUNvb3JkKTtcblx0XHRcdHN0YXJ0Q3V0b2ZmLnp3ICs9IHZlYzIoLXN0YXJ0Sm9pbkRpcmVjdGlvbi55LCBzdGFydEpvaW5EaXJlY3Rpb24ueCkgLyBzY2FsZVJhdGlvO1xuXHRcdFx0c3RhcnRDdXRvZmYgPSBzdGFydEN1dG9mZiAqIHNjYWxlUmF0aW8ueHl4eSArIHRyYW5zbGF0ZS54eXh5ICogdmlld3BvcnQuend6dztcblx0XHRcdHN0YXJ0Q3V0b2ZmICs9IHZpZXdwb3J0Lnh5eHk7XG5cdFx0XHRzdGFydEN1dG9mZiArPSBzdGFydE1pdGVyV2lkdGgueHl4eTtcblx0XHR9XG5cblx0XHRpZiAoZW5hYmxlRW5kTWl0ZXIgPT0gMS4pIHtcblx0XHRcdHZlYzIgZW5kTWl0ZXJXaWR0aCA9IHZlYzIoZW5kSm9pbkRpcmVjdGlvbikgKiB0aGlja25lc3MgKiBhYnMoZG90KGVuZEpvaW5EaXJlY3Rpb24sIGN1cnJOb3JtYWwpKSAqIC41O1xuXHRcdFx0ZW5kQ3V0b2ZmID0gdmVjNChiQ29vcmQsIGJDb29yZCk7XG5cdFx0XHRlbmRDdXRvZmYuencgKz0gdmVjMigtZW5kSm9pbkRpcmVjdGlvbi55LCBlbmRKb2luRGlyZWN0aW9uLngpICAvIHNjYWxlUmF0aW87XG5cdFx0XHRlbmRDdXRvZmYgPSBlbmRDdXRvZmYgKiBzY2FsZVJhdGlvLnh5eHkgKyB0cmFuc2xhdGUueHl4eSAqIHZpZXdwb3J0Lnp3enc7XG5cdFx0XHRlbmRDdXRvZmYgKz0gdmlld3BvcnQueHl4eTtcblx0XHRcdGVuZEN1dG9mZiArPSBlbmRNaXRlcldpZHRoLnh5eHk7XG5cdFx0fVxuXHR9XG59XG4iXSksZnJhZzpvKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudW5pZm9ybSBzYW1wbGVyMkQgZGFzaFBhdHRlcm47XG51bmlmb3JtIGZsb2F0IGRhc2hTaXplLCBwaXhlbFJhdGlvLCB0aGlja25lc3MsIG9wYWNpdHksIGlkLCBtaXRlck1vZGU7XG5cbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XG52YXJ5aW5nIHZlYzIgdGFuZ2VudDtcbnZhcnlpbmcgdmVjNCBzdGFydEN1dG9mZiwgZW5kQ3V0b2ZmO1xudmFyeWluZyB2ZWMyIHN0YXJ0Q29vcmQsIGVuZENvb3JkO1xudmFyeWluZyBmbG9hdCBlbmFibGVTdGFydE1pdGVyLCBlbmFibGVFbmRNaXRlcjtcblxuZmxvYXQgZGlzdFRvTGluZSh2ZWMyIHAsIHZlYzIgYSwgdmVjMiBiKSB7XG5cdHZlYzIgZGlmZiA9IGIgLSBhO1xuXHR2ZWMyIHBlcnAgPSBub3JtYWxpemUodmVjMigtZGlmZi55LCBkaWZmLngpKTtcblx0cmV0dXJuIGRvdChwIC0gYSwgcGVycCk7XG59XG5cbnZvaWQgbWFpbigpIHtcblx0ZmxvYXQgYWxwaGEgPSAxLiwgZGlzdFRvU3RhcnQsIGRpc3RUb0VuZDtcblx0ZmxvYXQgY3V0b2ZmID0gdGhpY2tuZXNzICogLjU7XG5cblx0Ly9iZXZlbCBtaXRlclxuXHRpZiAobWl0ZXJNb2RlID09IDEuKSB7XG5cdFx0aWYgKGVuYWJsZVN0YXJ0TWl0ZXIgPT0gMS4pIHtcblx0XHRcdGRpc3RUb1N0YXJ0ID0gZGlzdFRvTGluZShnbF9GcmFnQ29vcmQueHksIHN0YXJ0Q3V0b2ZmLnh5LCBzdGFydEN1dG9mZi56dyk7XG5cdFx0XHRpZiAoZGlzdFRvU3RhcnQgPCAtMS4pIHtcblx0XHRcdFx0ZGlzY2FyZDtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0YWxwaGEgKj0gbWluKG1heChkaXN0VG9TdGFydCArIDEuLCAwLiksIDEuKTtcblx0XHR9XG5cblx0XHRpZiAoZW5hYmxlRW5kTWl0ZXIgPT0gMS4pIHtcblx0XHRcdGRpc3RUb0VuZCA9IGRpc3RUb0xpbmUoZ2xfRnJhZ0Nvb3JkLnh5LCBlbmRDdXRvZmYueHksIGVuZEN1dG9mZi56dyk7XG5cdFx0XHRpZiAoZGlzdFRvRW5kIDwgLTEuKSB7XG5cdFx0XHRcdGRpc2NhcmQ7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGFscGhhICo9IG1pbihtYXgoZGlzdFRvRW5kICsgMS4sIDAuKSwgMS4pO1xuXHRcdH1cblx0fVxuXG5cdC8vIHJvdW5kIG1pdGVyXG5cdGVsc2UgaWYgKG1pdGVyTW9kZSA9PSAyLikge1xuXHRcdGlmIChlbmFibGVTdGFydE1pdGVyID09IDEuKSB7XG5cdFx0XHRkaXN0VG9TdGFydCA9IGRpc3RUb0xpbmUoZ2xfRnJhZ0Nvb3JkLnh5LCBzdGFydEN1dG9mZi54eSwgc3RhcnRDdXRvZmYuencpO1xuXHRcdFx0aWYgKGRpc3RUb1N0YXJ0IDwgMC4pIHtcblx0XHRcdFx0ZmxvYXQgcmFkaXVzID0gbGVuZ3RoKGdsX0ZyYWdDb29yZC54eSAtIHN0YXJ0Q29vcmQpO1xuXG5cdFx0XHRcdGlmKHJhZGl1cyA+IGN1dG9mZiArIC41KSB7XG5cdFx0XHRcdFx0ZGlzY2FyZDtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRhbHBoYSAtPSBzbW9vdGhzdGVwKGN1dG9mZiAtIC41LCBjdXRvZmYgKyAuNSwgcmFkaXVzKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoZW5hYmxlRW5kTWl0ZXIgPT0gMS4pIHtcblx0XHRcdGRpc3RUb0VuZCA9IGRpc3RUb0xpbmUoZ2xfRnJhZ0Nvb3JkLnh5LCBlbmRDdXRvZmYueHksIGVuZEN1dG9mZi56dyk7XG5cdFx0XHRpZiAoZGlzdFRvRW5kIDwgMC4pIHtcblx0XHRcdFx0ZmxvYXQgcmFkaXVzID0gbGVuZ3RoKGdsX0ZyYWdDb29yZC54eSAtIGVuZENvb3JkKTtcblxuXHRcdFx0XHRpZihyYWRpdXMgPiBjdXRvZmYgKyAuNSkge1xuXHRcdFx0XHRcdGRpc2NhcmQ7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YWxwaGEgLT0gc21vb3Roc3RlcChjdXRvZmYgLSAuNSwgY3V0b2ZmICsgLjUsIHJhZGl1cyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0ZmxvYXQgdCA9IGZyYWN0KGRvdCh0YW5nZW50LCBnbF9GcmFnQ29vcmQueHkpIC8gZGFzaFNpemUpICogLjUgKyAuMjU7XG5cdGZsb2F0IGRhc2ggPSB0ZXh0dXJlMkQoZGFzaFBhdHRlcm4sIHZlYzIodCwgLjUpKS5yO1xuXG5cdGdsX0ZyYWdDb2xvciA9IGZyYWdDb2xvcjtcblx0Z2xfRnJhZ0NvbG9yLmEgKj0gYWxwaGEgKiBvcGFjaXR5ICogZGFzaDtcbn1cbiJdKSxhdHRyaWJ1dGVzOntsaW5lRW5kOntidWZmZXI6cixkaXZpc29yOjAsc3RyaWRlOjgsb2Zmc2V0OjB9LGxpbmVUb3A6e2J1ZmZlcjpyLGRpdmlzb3I6MCxzdHJpZGU6OCxvZmZzZXQ6NH0sYUNvbG9yOntidWZmZXI6dC5wcm9wKCJjb2xvckJ1ZmZlciIpLHN0cmlkZTo0LG9mZnNldDowLGRpdmlzb3I6MX0sYkNvbG9yOntidWZmZXI6dC5wcm9wKCJjb2xvckJ1ZmZlciIpLHN0cmlkZTo0LG9mZnNldDo0LGRpdmlzb3I6MX0scHJldkNvb3JkOntidWZmZXI6dC5wcm9wKCJwb3NpdGlvbkJ1ZmZlciIpLHN0cmlkZTo4LG9mZnNldDowLGRpdmlzb3I6MX0sYUNvb3JkOntidWZmZXI6dC5wcm9wKCJwb3NpdGlvbkJ1ZmZlciIpLHN0cmlkZTo4LG9mZnNldDo4LGRpdmlzb3I6MX0sYkNvb3JkOntidWZmZXI6dC5wcm9wKCJwb3NpdGlvbkJ1ZmZlciIpLHN0cmlkZTo4LG9mZnNldDoxNixkaXZpc29yOjF9LG5leHRDb29yZDp7YnVmZmVyOnQucHJvcCgicG9zaXRpb25CdWZmZXIiKSxzdHJpZGU6OCxvZmZzZXQ6MjQsZGl2aXNvcjoxfX19LG4pKX1jYXRjaCh0KXtlPWl9cmV0dXJue2ZpbGw6dCh7cHJpbWl0aXZlOiJ0cmlhbmdsZSIsZWxlbWVudHM6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS50cmlhbmdsZXN9LG9mZnNldDowLHZlcnQ6byhbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uLCBwb3NpdGlvbkZyYWN0O1xuXG51bmlmb3JtIHZlYzQgY29sb3I7XG51bmlmb3JtIHZlYzIgc2NhbGUsIHNjYWxlRnJhY3QsIHRyYW5zbGF0ZSwgdHJhbnNsYXRlRnJhY3Q7XG51bmlmb3JtIGZsb2F0IHBpeGVsUmF0aW8sIGlkO1xudW5pZm9ybSB2ZWM0IHZpZXdwb3J0O1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xuXG5jb25zdCBmbG9hdCBNQVhfTElORVMgPSAyNTYuO1xuXG52b2lkIG1haW4oKSB7XG5cdGZsb2F0IGRlcHRoID0gKE1BWF9MSU5FUyAtIDQuIC0gaWQpIC8gKE1BWF9MSU5FUyk7XG5cblx0dmVjMiBwb3NpdGlvbiA9IHBvc2l0aW9uICogc2NhbGUgKyB0cmFuc2xhdGVcbiAgICAgICArIHBvc2l0aW9uRnJhY3QgKiBzY2FsZSArIHRyYW5zbGF0ZUZyYWN0XG4gICAgICAgKyBwb3NpdGlvbiAqIHNjYWxlRnJhY3RcbiAgICAgICArIHBvc2l0aW9uRnJhY3QgKiBzY2FsZUZyYWN0O1xuXG5cdGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiAqIDIuMCAtIDEuMCwgZGVwdGgsIDEpO1xuXG5cdGZyYWdDb2xvciA9IGNvbG9yIC8gMjU1Ljtcblx0ZnJhZ0NvbG9yLmEgKj0gb3BhY2l0eTtcbn1cbiJdKSxmcmFnOm8oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xuXG52b2lkIG1haW4oKSB7XG5cdGdsX0ZyYWdDb2xvciA9IGZyYWdDb2xvcjtcbn1cbiJdKSx1bmlmb3Jtczp7c2NhbGU6dC5wcm9wKCJzY2FsZSIpLGNvbG9yOnQucHJvcCgiZmlsbCIpLHNjYWxlRnJhY3Q6dC5wcm9wKCJzY2FsZUZyYWN0IiksdHJhbnNsYXRlRnJhY3Q6dC5wcm9wKCJ0cmFuc2xhdGVGcmFjdCIpLHRyYW5zbGF0ZTp0LnByb3AoInRyYW5zbGF0ZSIpLG9wYWNpdHk6dC5wcm9wKCJvcGFjaXR5IikscGl4ZWxSYXRpbzp0LmNvbnRleHQoInBpeGVsUmF0aW8iKSxpZDp0LnByb3AoImlkIiksdmlld3BvcnQ6ZnVuY3Rpb24odCxlKXtyZXR1cm5bZS52aWV3cG9ydC54LGUudmlld3BvcnQueSx0LnZpZXdwb3J0V2lkdGgsdC52aWV3cG9ydEhlaWdodF19fSxhdHRyaWJ1dGVzOntwb3NpdGlvbjp7YnVmZmVyOnQucHJvcCgicG9zaXRpb25CdWZmZXIiKSxzdHJpZGU6OCxvZmZzZXQ6OH0scG9zaXRpb25GcmFjdDp7YnVmZmVyOnQucHJvcCgicG9zaXRpb25GcmFjdEJ1ZmZlciIpLHN0cmlkZTo4LG9mZnNldDo4fX0sYmxlbmQ6bi5ibGVuZCxkZXB0aDp7ZW5hYmxlOiExfSxzY2lzc29yOm4uc2Npc3NvcixzdGVuY2lsOm4uc3RlbmNpbCx2aWV3cG9ydDpuLnZpZXdwb3J0fSkscmVjdDppLG1pdGVyOmV9fSxtLmRlZmF1bHRzPXtkYXNoZXM6bnVsbCxqb2luOiJtaXRlciIsbWl0ZXJMaW1pdDoxLHRoaWNrbmVzczoxMCxjYXA6InNxdWFyZSIsY29sb3I6ImJsYWNrIixvcGFjaXR5OjEsb3ZlcmxheTohMSx2aWV3cG9ydDpudWxsLHJhbmdlOm51bGwsY2xvc2U6ITEsZmlsbDpudWxsfSxtLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXtmb3IodmFyIHQsZT1bXSxyPWFyZ3VtZW50cy5sZW5ndGg7ci0tOyllW3JdPWFyZ3VtZW50c1tyXTtlLmxlbmd0aCYmKHQ9dGhpcykudXBkYXRlLmFwcGx5KHQsZSksdGhpcy5kcmF3KCl9LG0ucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcyxlPVtdLHI9YXJndW1lbnRzLmxlbmd0aDtyLS07KWVbcl09YXJndW1lbnRzW3JdO3JldHVybihlLmxlbmd0aD9lOnRoaXMucGFzc2VzKS5mb3JFYWNoKGZ1bmN0aW9uKGUscil7aWYoZSYmQXJyYXkuaXNBcnJheShlKSlyZXR1cm4obj10KS5kcmF3LmFwcGx5KG4sZSk7dmFyIG47KCJudW1iZXIiPT10eXBlb2YgZSYmKGU9dC5wYXNzZXNbZV0pLGUmJmUuY291bnQ+MSYmZS5vcGFjaXR5KSYmKHQucmVnbC5fcmVmcmVzaCgpLGUuZmlsbCYmZS50cmlhbmdsZXMmJmUudHJpYW5nbGVzLmxlbmd0aD4yJiZ0LnNoYWRlcnMuZmlsbChlKSxlLnRoaWNrbmVzcyYmKGUuc2NhbGVbMF0qZS52aWV3cG9ydC53aWR0aD5tLnByZWNpc2lvblRocmVzaG9sZHx8ZS5zY2FsZVsxXSplLnZpZXdwb3J0LmhlaWdodD5tLnByZWNpc2lvblRocmVzaG9sZD90LnNoYWRlcnMucmVjdChlKToicmVjdCI9PT1lLmpvaW58fCFlLmpvaW4mJihlLnRoaWNrbmVzczw9Mnx8ZS5jb3VudD49bS5tYXhQb2ludHMpP3Quc2hhZGVycy5yZWN0KGUpOnQuc2hhZGVycy5taXRlcihlKSkpfSksdGhpc30sbS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYodCl7bnVsbCE9dC5sZW5ndGg/Im51bWJlciI9PXR5cGVvZiB0WzBdJiYodD1be3Bvc2l0aW9uczp0fV0pOkFycmF5LmlzQXJyYXkodCl8fCh0PVt0XSk7dmFyIHI9dGhpcy5yZWdsLG89dGhpcy5nbDtpZih0LmZvckVhY2goZnVuY3Rpb24odCxoKXt2YXIgZD1lLnBhc3Nlc1toXTtpZih2b2lkIDAhPT10KWlmKG51bGwhPT10KXtpZigibnVtYmVyIj09dHlwZW9mIHRbMF0mJih0PXtwb3NpdGlvbnM6dH0pLHQ9cyh0LHtwb3NpdGlvbnM6InBvc2l0aW9ucyBwb2ludHMgZGF0YSBjb29yZHMiLHRoaWNrbmVzczoidGhpY2tuZXNzIGxpbmVXaWR0aCBsaW5lV2lkdGhzIGxpbmUtd2lkdGggbGluZXdpZHRoIHdpZHRoIHN0cm9rZS13aWR0aCBzdHJva2V3aWR0aCBzdHJva2VXaWR0aCIsam9pbjoibGluZUpvaW4gbGluZWpvaW4gam9pbiB0eXBlIG1vZGUiLG1pdGVyTGltaXQ6Im1pdGVybGltaXQgbWl0ZXJMaW1pdCIsZGFzaGVzOiJkYXNoIGRhc2hlcyBkYXNoYXJyYXkgZGFzaC1hcnJheSBkYXNoQXJyYXkiLGNvbG9yOiJjb2xvciBjb2xvdXIgc3Ryb2tlIGNvbG9ycyBjb2xvdXJzIHN0cm9rZS1jb2xvciBzdHJva2VDb2xvciIsZmlsbDoiZmlsbCBmaWxsLWNvbG9yIGZpbGxDb2xvciIsb3BhY2l0eToiYWxwaGEgb3BhY2l0eSIsb3ZlcmxheToib3ZlcmxheSBjcmVhc2Ugb3ZlcmxhcCBpbnRlcnNlY3QiLGNsb3NlOiJjbG9zZWQgY2xvc2UgY2xvc2VkLXBhdGggY2xvc2VQYXRoIixyYW5nZToicmFuZ2UgZGF0YUJveCIsdmlld3BvcnQ6InZpZXdwb3J0IHZpZXdCb3giLGhvbGU6ImhvbGVzIGhvbGUgaG9sbG93In0pLGR8fChlLnBhc3Nlc1toXT1kPXtpZDpoLHNjYWxlOm51bGwsc2NhbGVGcmFjdDpudWxsLHRyYW5zbGF0ZTpudWxsLHRyYW5zbGF0ZUZyYWN0Om51bGwsY291bnQ6MCxob2xlOltdLGRlcHRoOjAsZGFzaExlbmd0aDoxLGRhc2hUZXh0dXJlOnIudGV4dHVyZSh7Y2hhbm5lbHM6MSxkYXRhOm5ldyBVaW50OEFycmF5KFsyNTVdKSx3aWR0aDoxLGhlaWdodDoxLG1hZzoibGluZWFyIixtaW46ImxpbmVhciJ9KSxjb2xvckJ1ZmZlcjpyLmJ1ZmZlcih7dXNhZ2U6ImR5bmFtaWMiLHR5cGU6InVpbnQ4IixkYXRhOm5ldyBVaW50OEFycmF5fSkscG9zaXRpb25CdWZmZXI6ci5idWZmZXIoe3VzYWdlOiJkeW5hbWljIix0eXBlOiJmbG9hdCIsZGF0YTpuZXcgVWludDhBcnJheX0pLHBvc2l0aW9uRnJhY3RCdWZmZXI6ci5idWZmZXIoe3VzYWdlOiJkeW5hbWljIix0eXBlOiJmbG9hdCIsZGF0YTpuZXcgVWludDhBcnJheX0pfSx0PWEoe30sbS5kZWZhdWx0cyx0KSksbnVsbCE9dC50aGlja25lc3MmJihkLnRoaWNrbmVzcz1wYXJzZUZsb2F0KHQudGhpY2tuZXNzKSksbnVsbCE9dC5vcGFjaXR5JiYoZC5vcGFjaXR5PXBhcnNlRmxvYXQodC5vcGFjaXR5KSksbnVsbCE9dC5taXRlckxpbWl0JiYoZC5taXRlckxpbWl0PXBhcnNlRmxvYXQodC5taXRlckxpbWl0KSksbnVsbCE9dC5vdmVybGF5JiYoZC5vdmVybGF5PSEhdC5vdmVybGF5LGg8bS5tYXhMaW5lcyYmKGQuZGVwdGg9MioobS5tYXhMaW5lcy0xLWglbS5tYXhMaW5lcykvbS5tYXhMaW5lcy0xKSksbnVsbCE9dC5qb2luJiYoZC5qb2luPXQuam9pbiksbnVsbCE9dC5ob2xlJiYoZC5ob2xlPXQuaG9sZSksbnVsbCE9dC5maWxsJiYoZC5maWxsPXQuZmlsbD9uKHQuZmlsbCwidWludDgiKTpudWxsKSxudWxsIT10LnZpZXdwb3J0JiYoZC52aWV3cG9ydD1nKHQudmlld3BvcnQpKSxkLnZpZXdwb3J0fHwoZC52aWV3cG9ydD1nKFtvLmRyYXdpbmdCdWZmZXJXaWR0aCxvLmRyYXdpbmdCdWZmZXJIZWlnaHRdKSksbnVsbCE9dC5jbG9zZSYmKGQuY2xvc2U9dC5jbG9zZSksbnVsbD09PXQucG9zaXRpb25zJiYodC5wb3NpdGlvbnM9W10pLHQucG9zaXRpb25zKXt2YXIgdix5O2lmKHQucG9zaXRpb25zLngmJnQucG9zaXRpb25zLnkpe3ZhciB4PXQucG9zaXRpb25zLngsYj10LnBvc2l0aW9ucy55O3k9ZC5jb3VudD1NYXRoLm1heCh4Lmxlbmd0aCxiLmxlbmd0aCksdj1uZXcgRmxvYXQ2NEFycmF5KDIqeSk7Zm9yKHZhciBfPTA7Xzx5O18rKyl2WzIqX109eFtfXSx2WzIqXysxXT1iW19dfWVsc2Ugdj1sKHQucG9zaXRpb25zLCJmbG9hdDY0IikseT1kLmNvdW50PU1hdGguZmxvb3Iodi5sZW5ndGgvMik7dmFyIHc9ZC5ib3VuZHM9aSh2LDIpO2lmKGQuZmlsbCl7Zm9yKHZhciBrPVtdLE09e30sQT0wLFQ9MCxTPTAsRT1kLmNvdW50O1Q8RTtUKyspe3ZhciBDPXZbMipUXSxMPXZbMipUKzFdO2lzTmFOKEMpfHxpc05hTihMKXx8bnVsbD09Q3x8bnVsbD09TD8oQz12WzIqQV0sTD12WzIqQSsxXSxNW1RdPUEpOkE9VCxrW1MrK109QyxrW1MrK109TH1mb3IodmFyIHo9YyhrLGQuaG9sZXx8W10pLFA9MCxJPXoubGVuZ3RoO1A8STtQKyspbnVsbCE9TVt6W1BdXSYmKHpbUF09TVt6W1BdXSk7ZC50cmlhbmdsZXM9en12YXIgTz1uZXcgRmxvYXQ2NEFycmF5KHYpO3UoTywyLHcpO3ZhciBEPW5ldyBGbG9hdDY0QXJyYXkoMip5KzYpO2QuY2xvc2U/dlswXT09PXZbMip5LTJdJiZ2WzFdPT09dlsyKnktMV0/KERbMF09T1syKnktNF0sRFsxXT1PWzIqeS0zXSk6KERbMF09T1syKnktMl0sRFsxXT1PWzIqeS0xXSk6KERbMF09T1swXSxEWzFdPU9bMV0pLEQuc2V0KE8sMiksZC5jbG9zZT92WzBdPT09dlsyKnktMl0mJnZbMV09PT12WzIqeS0xXT8oRFsyKnkrMl09T1syXSxEWzIqeSszXT1PWzNdLGQuY291bnQtPTEpOihEWzIqeSsyXT1PWzBdLERbMip5KzNdPU9bMV0sRFsyKnkrNF09T1syXSxEWzIqeSs1XT1PWzNdKTooRFsyKnkrMl09T1syKnktMl0sRFsyKnkrM109T1syKnktMV0sRFsyKnkrNF09T1syKnktMl0sRFsyKnkrNV09T1syKnktMV0pLGQucG9zaXRpb25CdWZmZXIoZihEKSksZC5wb3NpdGlvbkZyYWN0QnVmZmVyKHAoRCkpfWlmKHQucmFuZ2U/ZC5yYW5nZT10LnJhbmdlOmQucmFuZ2V8fChkLnJhbmdlPWQuYm91bmRzKSwodC5yYW5nZXx8dC5wb3NpdGlvbnMpJiZkLmNvdW50KXt2YXIgUj1kLmJvdW5kcyxCPVJbMl0tUlswXSxGPVJbM10tUlsxXSxOPWQucmFuZ2VbMl0tZC5yYW5nZVswXSxqPWQucmFuZ2VbM10tZC5yYW5nZVsxXTtkLnNjYWxlPVtCL04sRi9qXSxkLnRyYW5zbGF0ZT1bLWQucmFuZ2VbMF0vTitSWzBdL058fDAsLWQucmFuZ2VbMV0vaitSWzFdL2p8fDBdLGQuc2NhbGVGcmFjdD1wKGQuc2NhbGUpLGQudHJhbnNsYXRlRnJhY3Q9cChkLnRyYW5zbGF0ZSl9aWYodC5kYXNoZXMpe3ZhciBWLFU9MDtpZighdC5kYXNoZXN8fHQuZGFzaGVzLmxlbmd0aDwyKVU9MSxWPW5ldyBVaW50OEFycmF5KFsyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1XSk7ZWxzZXtVPTA7Zm9yKHZhciBxPTA7cTx0LmRhc2hlcy5sZW5ndGg7KytxKVUrPXQuZGFzaGVzW3FdO1Y9bmV3IFVpbnQ4QXJyYXkoVSptLmRhc2hNdWx0KTtmb3IodmFyIEg9MCxHPTI1NSxXPTA7VzwyO1crKylmb3IodmFyIFk9MDtZPHQuZGFzaGVzLmxlbmd0aDsrK1kpe2Zvcih2YXIgWD0wLFo9dC5kYXNoZXNbWV0qbS5kYXNoTXVsdCouNTtYPFo7KytYKVZbSCsrXT1HO0dePTI1NX19ZC5kYXNoTGVuZ3RoPVUsZC5kYXNoVGV4dHVyZSh7Y2hhbm5lbHM6MSxkYXRhOlYsd2lkdGg6Vi5sZW5ndGgsaGVpZ2h0OjEsbWFnOiJsaW5lYXIiLG1pbjoibGluZWFyIn0sMCwwKX1pZih0LmNvbG9yKXt2YXIgJD1kLmNvdW50LEo9dC5jb2xvcjtKfHwoSj0idHJhbnNwYXJlbnQiKTt2YXIgSz1uZXcgVWludDhBcnJheSg0KiQrNCk7aWYoQXJyYXkuaXNBcnJheShKKSYmIm51bWJlciIhPXR5cGVvZiBKWzBdKXtmb3IodmFyIFE9MDtRPCQ7USsrKXt2YXIgdHQ9bihKW1FdLCJ1aW50OCIpO0suc2V0KHR0LDQqUSl9Sy5zZXQobihKWzBdLCJ1aW50OCIpLDQqJCl9ZWxzZSBmb3IodmFyIGV0PW4oSiwidWludDgiKSxydD0wO3J0PCQrMTtydCsrKUsuc2V0KGV0LDQqcnQpO2QuY29sb3JCdWZmZXIoe3VzYWdlOiJkeW5hbWljIix0eXBlOiJ1aW50OCIsZGF0YTpLfSl9fWVsc2UgZS5wYXNzZXNbaF09bnVsbH0pLHQubGVuZ3RoPHRoaXMucGFzc2VzLmxlbmd0aCl7Zm9yKHZhciBoPXQubGVuZ3RoO2g8dGhpcy5wYXNzZXMubGVuZ3RoO2grKyl7dmFyIGQ9ZS5wYXNzZXNbaF07ZCYmKGQuY29sb3JCdWZmZXIuZGVzdHJveSgpLGQucG9zaXRpb25CdWZmZXIuZGVzdHJveSgpLGQuZGFzaFRleHR1cmUuZGVzdHJveSgpKX10aGlzLnBhc3Nlcy5sZW5ndGg9dC5sZW5ndGh9cmV0dXJuIHRoaXMucGFzc2VzPXRoaXMucGFzc2VzLmZpbHRlcihCb29sZWFuKSx0aGlzfX0sbS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBhc3Nlcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuY29sb3JCdWZmZXIuZGVzdHJveSgpLHQucG9zaXRpb25CdWZmZXIuZGVzdHJveSgpLHQuZGFzaFRleHR1cmUuZGVzdHJveSgpfSksdGhpcy5wYXNzZXMubGVuZ3RoPTAsdGhpc319LHsiYXJyYXktYm91bmRzIjo1NiwiYXJyYXktbm9ybWFsaXplIjo1NywiY29sb3Itbm9ybWFsaXplIjoxMDcsZWFyY3V0OjE1NSwiZXM2LXdlYWstbWFwIjoyMDgsImZsYXR0ZW4tdmVydGV4LWRhdGEiOjIxNixnbHNsaWZ5OjM3Nywib2JqZWN0LWFzc2lnbiI6NDIxLCJwYXJzZS1yZWN0Ijo0MjYsInBpY2stYnktYWxpYXMiOjQzMiwidG8tZmxvYXQzMiI6NTAwfV0sNDU5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vc2NhdHRlciIpLGk9dCgib2JqZWN0LWFzc2lnbiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPW5ldyBuKHQsZSksYT1yLnJlbmRlci5iaW5kKHIpO3JldHVybiBpKGEse3JlbmRlcjphLHVwZGF0ZTpyLnVwZGF0ZS5iaW5kKHIpLGRyYXc6ci5kcmF3LmJpbmQociksZGVzdHJveTpyLmRlc3Ryb3kuYmluZChyKSxyZWdsOnIucmVnbCxnbDpyLmdsLGNhbnZhczpyLmdsLmNhbnZhcyxncm91cHM6ci5ncm91cHMsbWFya2VyczpyLm1hcmtlckNhY2hlLHBhbGV0dGU6ci5wYWxldHRlfSksYX19LHsiLi9zY2F0dGVyIjo0NjAsIm9iamVjdC1hc3NpZ24iOjQyMX1dLDQ2MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJjb2xvci1ub3JtYWxpemUiKSxpPXQoImFycmF5LWJvdW5kcyIpLGE9dCgiY29sb3ItaWQiKSxvPXQoInBvaW50LWNsdXN0ZXIiKSxzPXQoIm9iamVjdC1hc3NpZ24iKSxsPXQoImdsc2xpZnkiKSxjPXQoInBpY2stYnktYWxpYXMiKSx1PXQoInVwZGF0ZS1kaWZmIiksaD10KCJmbGF0dGVuLXZlcnRleC1kYXRhIiksZj10KCJpcy1pZXhwbG9yZXIiKSxwPXQoInRvLWZsb2F0MzIiKSxkPXAuZmxvYXQzMixnPXAuZnJhY3QzMixtPXQoInBhcnNlLXJlY3QiKTtmdW5jdGlvbiB2KHQsZSl7dmFyIHI9dGhpcztpZighKHRoaXMgaW5zdGFuY2VvZiB2KSlyZXR1cm4gbmV3IHYodCxlKTsiZnVuY3Rpb24iPT10eXBlb2YgdD8oZXx8KGU9e30pLGUucmVnbD10KTooZT10LHQ9bnVsbCksZSYmZS5sZW5ndGgmJihlLnBvc2l0aW9ucz1lKTt2YXIgbixpPSh0PWUucmVnbCkuX2dsLGE9W107dGhpcy50b29NYW55Q29sb3JzPWYsbj10LnRleHR1cmUoe2RhdGE6bmV3IFVpbnQ4QXJyYXkoMTAyMCksd2lkdGg6MjU1LGhlaWdodDoxLHR5cGU6InVpbnQ4Iixmb3JtYXQ6InJnYmEiLHdyYXBTOiJjbGFtcCIsd3JhcFQ6ImNsYW1wIixtYWc6Im5lYXJlc3QiLG1pbjoibmVhcmVzdCJ9KSxzKHRoaXMse3JlZ2w6dCxnbDppLGdyb3VwczpbXSxtYXJrZXJDYWNoZTpbbnVsbF0sbWFya2VyVGV4dHVyZXM6W251bGxdLHBhbGV0dGU6YSxwYWxldHRlSWRzOnt9LHBhbGV0dGVUZXh0dXJlOm4sbWF4Q29sb3JzOjI1NSxtYXhTaXplOjEwMCxjYW52YXM6aS5jYW52YXN9KSx0aGlzLnVwZGF0ZShlKTt2YXIgbz17dW5pZm9ybXM6e3BpeGVsUmF0aW86dC5jb250ZXh0KCJwaXhlbFJhdGlvIikscGFsZXR0ZTpuLHBhbGV0dGVTaXplOmZ1bmN0aW9uKHQsZSl7cmV0dXJuW3IudG9vTWFueUNvbG9ycz8wOjI1NSxuLmhlaWdodF19LHNjYWxlOnQucHJvcCgic2NhbGUiKSxzY2FsZUZyYWN0OnQucHJvcCgic2NhbGVGcmFjdCIpLHRyYW5zbGF0ZTp0LnByb3AoInRyYW5zbGF0ZSIpLHRyYW5zbGF0ZUZyYWN0OnQucHJvcCgidHJhbnNsYXRlRnJhY3QiKSxvcGFjaXR5OnQucHJvcCgib3BhY2l0eSIpLG1hcmtlcjp0LnByb3AoIm1hcmtlclRleHR1cmUiKX0sYXR0cmlidXRlczp7eDpmdW5jdGlvbih0LGUpe3JldHVybiBlLnhBdHRyfHx7YnVmZmVyOmUucG9zaXRpb25CdWZmZXIsc3RyaWRlOjgsb2Zmc2V0OjB9fSx5OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUueUF0dHJ8fHtidWZmZXI6ZS5wb3NpdGlvbkJ1ZmZlcixzdHJpZGU6OCxvZmZzZXQ6NH19LHhGcmFjdDpmdW5jdGlvbih0LGUpe3JldHVybiBlLnhBdHRyP3tjb25zdGFudDpbMCwwXX06e2J1ZmZlcjplLnBvc2l0aW9uRnJhY3RCdWZmZXIsc3RyaWRlOjgsb2Zmc2V0OjB9fSx5RnJhY3Q6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS55QXR0cj97Y29uc3RhbnQ6WzAsMF19OntidWZmZXI6ZS5wb3NpdGlvbkZyYWN0QnVmZmVyLHN0cmlkZTo4LG9mZnNldDo0fX0sc2l6ZTpmdW5jdGlvbih0LGUpe3JldHVybiBlLnNpemUubGVuZ3RoP3tidWZmZXI6ZS5zaXplQnVmZmVyLHN0cmlkZToyLG9mZnNldDowfTp7Y29uc3RhbnQ6W01hdGgucm91bmQoMjU1KmUuc2l6ZS9yLm1heFNpemUpXX19LGJvcmRlclNpemU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5ib3JkZXJTaXplLmxlbmd0aD97YnVmZmVyOmUuc2l6ZUJ1ZmZlcixzdHJpZGU6MixvZmZzZXQ6MX06e2NvbnN0YW50OltNYXRoLnJvdW5kKDI1NSplLmJvcmRlclNpemUvci5tYXhTaXplKV19fSxjb2xvcklkOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuY29sb3IubGVuZ3RoP3tidWZmZXI6ZS5jb2xvckJ1ZmZlcixzdHJpZGU6ci50b29NYW55Q29sb3JzPzg6NCxvZmZzZXQ6MH06e2NvbnN0YW50OnIudG9vTWFueUNvbG9ycz9hLnNsaWNlKDQqZS5jb2xvciw0KmUuY29sb3IrNCk6W2UuY29sb3JdfX0sYm9yZGVyQ29sb3JJZDpmdW5jdGlvbih0LGUpe3JldHVybiBlLmJvcmRlckNvbG9yLmxlbmd0aD97YnVmZmVyOmUuY29sb3JCdWZmZXIsc3RyaWRlOnIudG9vTWFueUNvbG9ycz84OjQsb2Zmc2V0OnIudG9vTWFueUNvbG9ycz80OjJ9Ontjb25zdGFudDpyLnRvb01hbnlDb2xvcnM/YS5zbGljZSg0KmUuYm9yZGVyQ29sb3IsNCplLmJvcmRlckNvbG9yKzQpOltlLmJvcmRlckNvbG9yXX19LGlzQWN0aXZlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuITA9PT1lLmFjdGl2YXRpb24/e2NvbnN0YW50OlsxXX06ZS5hY3RpdmF0aW9uP2UuYWN0aXZhdGlvbjp7Y29uc3RhbnQ6WzBdfX19LGJsZW5kOntlbmFibGU6ITAsY29sb3I6WzAsMCwwLDFdLGZ1bmM6e3NyY1JHQjoic3JjIGFscGhhIixkc3RSR0I6Im9uZSBtaW51cyBzcmMgYWxwaGEiLHNyY0FscGhhOiJvbmUgbWludXMgZHN0IGFscGhhIixkc3RBbHBoYToib25lIn19LHNjaXNzb3I6e2VuYWJsZTohMCxib3g6dC5wcm9wKCJ2aWV3cG9ydCIpfSx2aWV3cG9ydDp0LnByb3AoInZpZXdwb3J0Iiksc3RlbmNpbDp7ZW5hYmxlOiExfSxkZXB0aDp7ZW5hYmxlOiExfSxlbGVtZW50czp0LnByb3AoImVsZW1lbnRzIiksY291bnQ6dC5wcm9wKCJjb3VudCIpLG9mZnNldDp0LnByb3AoIm9mZnNldCIpLHByaW1pdGl2ZToicG9pbnRzIn0sYz1zKHt9LG8pO2MuZnJhZz1sKFsicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yLCBmcmFnQm9yZGVyQ29sb3I7XG52YXJ5aW5nIGZsb2F0IGZyYWdXaWR0aCwgZnJhZ0JvcmRlckNvbG9yTGV2ZWwsIGZyYWdDb2xvckxldmVsO1xuXG51bmlmb3JtIHNhbXBsZXIyRCBtYXJrZXI7XG51bmlmb3JtIGZsb2F0IHBpeGVsUmF0aW8sIG9wYWNpdHk7XG5cbmZsb2F0IHNtb290aFN0ZXAoZmxvYXQgeCwgZmxvYXQgeSkge1xuICByZXR1cm4gMS4wIC8gKDEuMCArIGV4cCg1MC4wKih4IC0geSkpKTtcbn1cblxudm9pZCBtYWluKCkge1xuICBmbG9hdCBkaXN0ID0gdGV4dHVyZTJEKG1hcmtlciwgZ2xfUG9pbnRDb29yZCkuciwgZGVsdGEgPSBmcmFnV2lkdGg7XG5cbiAgLy8gbWF4LWRpc3RhbmNlIGFscGhhXG4gIGlmIChkaXN0IDwgMC4wMDMpIGRpc2NhcmQ7XG5cbiAgLy8gbnVsbC1ib3JkZXIgY2FzZVxuICBpZiAoZnJhZ0JvcmRlckNvbG9yTGV2ZWwgPT0gZnJhZ0NvbG9yTGV2ZWwgfHwgZnJhZ0JvcmRlckNvbG9yLmEgPT0gMC4pIHtcbiAgICBmbG9hdCBjb2xvckFtdCA9IHNtb290aHN0ZXAoLjUgLSBkZWx0YSwgLjUgKyBkZWx0YSwgZGlzdCk7XG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChmcmFnQ29sb3IucmdiLCBjb2xvckFtdCAqIGZyYWdDb2xvci5hICogb3BhY2l0eSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZmxvYXQgYm9yZGVyQ29sb3JBbXQgPSBzbW9vdGhzdGVwKGZyYWdCb3JkZXJDb2xvckxldmVsIC0gZGVsdGEsIGZyYWdCb3JkZXJDb2xvckxldmVsICsgZGVsdGEsIGRpc3QpO1xuICBmbG9hdCBjb2xvckFtdCA9IHNtb290aHN0ZXAoZnJhZ0NvbG9yTGV2ZWwgLSBkZWx0YSwgZnJhZ0NvbG9yTGV2ZWwgKyBkZWx0YSwgZGlzdCk7XG5cbiAgdmVjNCBjb2xvciA9IGZyYWdCb3JkZXJDb2xvcjtcbiAgY29sb3IuYSAqPSBib3JkZXJDb2xvckFtdDtcbiAgY29sb3IgPSBtaXgoY29sb3IsIGZyYWdDb2xvciwgY29sb3JBbXQpO1xuICBjb2xvci5hICo9IG9wYWNpdHk7XG5cbiAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7XG59XG4iXSksYy52ZXJ0PWwoWyJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSBmbG9hdCB4LCB5LCB4RnJhY3QsIHlGcmFjdDtcbmF0dHJpYnV0ZSBmbG9hdCBzaXplLCBib3JkZXJTaXplO1xuYXR0cmlidXRlIHZlYzQgY29sb3JJZCwgYm9yZGVyQ29sb3JJZDtcbmF0dHJpYnV0ZSBmbG9hdCBpc0FjdGl2ZTtcblxudW5pZm9ybSB2ZWMyIHNjYWxlLCBzY2FsZUZyYWN0LCB0cmFuc2xhdGUsIHRyYW5zbGF0ZUZyYWN0LCBwYWxldHRlU2l6ZTtcbnVuaWZvcm0gZmxvYXQgcGl4ZWxSYXRpbztcbnVuaWZvcm0gc2FtcGxlcjJEIHBhbGV0dGU7XG5cbmNvbnN0IGZsb2F0IG1heFNpemUgPSAxMDAuO1xuY29uc3QgZmxvYXQgYm9yZGVyTGV2ZWwgPSAuNTtcblxudmFyeWluZyB2ZWM0IGZyYWdDb2xvciwgZnJhZ0JvcmRlckNvbG9yO1xudmFyeWluZyBmbG9hdCBmcmFnUG9pbnRTaXplLCBmcmFnQm9yZGVyUmFkaXVzLFxuICAgIGZyYWdXaWR0aCwgZnJhZ0JvcmRlckNvbG9yTGV2ZWwsIGZyYWdDb2xvckxldmVsO1xuXG52ZWMyIHBhbGV0dGVDb29yZChmbG9hdCBpZCkge1xuICByZXR1cm4gdmVjMihcbiAgICAobW9kKGlkLCBwYWxldHRlU2l6ZS54KSArIC41KSAvIHBhbGV0dGVTaXplLngsXG4gICAgKGZsb29yKGlkIC8gcGFsZXR0ZVNpemUueCkgKyAuNSkgLyBwYWxldHRlU2l6ZS55XG4gICk7XG59XG52ZWMyIHBhbGV0dGVDb29yZCh2ZWMyIGlkKSB7XG4gIHJldHVybiB2ZWMyKFxuICAgIChpZC54ICsgLjUpIC8gcGFsZXR0ZVNpemUueCxcbiAgICAoaWQueSArIC41KSAvIHBhbGV0dGVTaXplLnlcbiAgKTtcbn1cbnZlYzQgZ2V0Q29sb3IodmVjNCBpZCkge1xuICAvLyB6ZXJvLXBhbGV0dGUgbWVhbnMgd2UgZGVhbCB3aXRoIGRpcmVjdCBidWZmZXJcbiAgaWYgKHBhbGV0dGVTaXplLnggPT0gMC4pIHJldHVybiBpZCAvIDI1NS47XG4gIHJldHVybiB0ZXh0dXJlMkQocGFsZXR0ZSwgcGFsZXR0ZUNvb3JkKGlkLnh5KSk7XG59XG5cbnZvaWQgbWFpbigpIHtcbiAgaWYgKGlzQWN0aXZlID09IDAuKSByZXR1cm47XG5cbiAgdmVjMiBwb3NpdGlvbiA9IHZlYzIoeCwgeSk7XG4gIHZlYzIgcG9zaXRpb25GcmFjdCA9IHZlYzIoeEZyYWN0LCB5RnJhY3QpO1xuXG4gIHZlYzQgY29sb3IgPSBnZXRDb2xvcihjb2xvcklkKTtcbiAgdmVjNCBib3JkZXJDb2xvciA9IGdldENvbG9yKGJvcmRlckNvbG9ySWQpO1xuXG4gIGZsb2F0IHNpemUgPSBzaXplICogbWF4U2l6ZSAvIDI1NS47XG4gIGZsb2F0IGJvcmRlclNpemUgPSBib3JkZXJTaXplICogbWF4U2l6ZSAvIDI1NS47XG5cbiAgZ2xfUG9pbnRTaXplID0gMi4gKiBzaXplICogcGl4ZWxSYXRpbztcbiAgZnJhZ1BvaW50U2l6ZSA9IHNpemUgKiBwaXhlbFJhdGlvO1xuXG4gIHZlYzIgcG9zID0gKHBvc2l0aW9uICsgdHJhbnNsYXRlKSAqIHNjYWxlXG4gICAgICArIChwb3NpdGlvbkZyYWN0ICsgdHJhbnNsYXRlRnJhY3QpICogc2NhbGVcbiAgICAgICsgKHBvc2l0aW9uICsgdHJhbnNsYXRlKSAqIHNjYWxlRnJhY3RcbiAgICAgICsgKHBvc2l0aW9uRnJhY3QgKyB0cmFuc2xhdGVGcmFjdCkgKiBzY2FsZUZyYWN0O1xuXG4gIGdsX1Bvc2l0aW9uID0gdmVjNChwb3MgKiAyLiAtIDEuLCAwLCAxKTtcblxuICBmcmFnQ29sb3IgPSBjb2xvcjtcbiAgZnJhZ0JvcmRlckNvbG9yID0gYm9yZGVyQ29sb3I7XG4gIGZyYWdXaWR0aCA9IDEuIC8gZ2xfUG9pbnRTaXplO1xuXG4gIGZyYWdCb3JkZXJDb2xvckxldmVsID0gY2xhbXAoYm9yZGVyTGV2ZWwgLSBib3JkZXJMZXZlbCAqIGJvcmRlclNpemUgLyBzaXplLCAwLiwgMS4pO1xuICBmcmFnQ29sb3JMZXZlbCA9IGNsYW1wKGJvcmRlckxldmVsICsgKDEuIC0gYm9yZGVyTGV2ZWwpICogYm9yZGVyU2l6ZSAvIHNpemUsIDAuLCAxLik7XG59XG4iXSk7dHJ5e3RoaXMuZHJhd01hcmtlcj10KGMpfWNhdGNoKHQpe312YXIgdT1zKHt9LG8pO3UuZnJhZz1sKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudmFyeWluZyB2ZWM0IGZyYWdDb2xvciwgZnJhZ0JvcmRlckNvbG9yO1xuXG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG52YXJ5aW5nIGZsb2F0IGZyYWdCb3JkZXJSYWRpdXMsIGZyYWdXaWR0aDtcblxuZmxvYXQgc21vb3RoU3RlcChmbG9hdCBlZGdlMCwgZmxvYXQgZWRnZTEsIGZsb2F0IHgpIHtcblx0ZmxvYXQgdDtcblx0dCA9IGNsYW1wKCh4IC0gZWRnZTApIC8gKGVkZ2UxIC0gZWRnZTApLCAwLjAsIDEuMCk7XG5cdHJldHVybiB0ICogdCAqICgzLjAgLSAyLjAgKiB0KTtcbn1cblxudm9pZCBtYWluKCkge1xuXHRmbG9hdCByYWRpdXMsIGFscGhhID0gMS4wLCBkZWx0YSA9IGZyYWdXaWR0aDtcblxuXHRyYWRpdXMgPSBsZW5ndGgoMi4wICogZ2xfUG9pbnRDb29yZC54eSAtIDEuMCk7XG5cblx0aWYgKHJhZGl1cyA+IDEuMCArIGRlbHRhKSB7XG5cdFx0ZGlzY2FyZDtcblx0fVxuXG5cdGFscGhhIC09IHNtb290aHN0ZXAoMS4wIC0gZGVsdGEsIDEuMCArIGRlbHRhLCByYWRpdXMpO1xuXG5cdGZsb2F0IGJvcmRlclJhZGl1cyA9IGZyYWdCb3JkZXJSYWRpdXM7XG5cdGZsb2F0IHJhdGlvID0gc21vb3Roc3RlcChib3JkZXJSYWRpdXMgLSBkZWx0YSwgYm9yZGVyUmFkaXVzICsgZGVsdGEsIHJhZGl1cyk7XG5cdHZlYzQgY29sb3IgPSBtaXgoZnJhZ0NvbG9yLCBmcmFnQm9yZGVyQ29sb3IsIHJhdGlvKTtcblx0Y29sb3IuYSAqPSBhbHBoYSAqIG9wYWNpdHk7XG5cdGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xufVxuIl0pLHUudmVydD1sKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIGZsb2F0IHgsIHksIHhGcmFjdCwgeUZyYWN0O1xuYXR0cmlidXRlIGZsb2F0IHNpemUsIGJvcmRlclNpemU7XG5hdHRyaWJ1dGUgdmVjNCBjb2xvcklkLCBib3JkZXJDb2xvcklkO1xuYXR0cmlidXRlIGZsb2F0IGlzQWN0aXZlO1xuXG51bmlmb3JtIHZlYzIgc2NhbGUsIHNjYWxlRnJhY3QsIHRyYW5zbGF0ZSwgdHJhbnNsYXRlRnJhY3Q7XG51bmlmb3JtIGZsb2F0IHBpeGVsUmF0aW87XG51bmlmb3JtIHNhbXBsZXIyRCBwYWxldHRlO1xudW5pZm9ybSB2ZWMyIHBhbGV0dGVTaXplO1xuXG5jb25zdCBmbG9hdCBtYXhTaXplID0gMTAwLjtcblxudmFyeWluZyB2ZWM0IGZyYWdDb2xvciwgZnJhZ0JvcmRlckNvbG9yO1xudmFyeWluZyBmbG9hdCBmcmFnQm9yZGVyUmFkaXVzLCBmcmFnV2lkdGg7XG5cbnZlYzIgcGFsZXR0ZUNvb3JkKGZsb2F0IGlkKSB7XG4gIHJldHVybiB2ZWMyKFxuICAgIChtb2QoaWQsIHBhbGV0dGVTaXplLngpICsgLjUpIC8gcGFsZXR0ZVNpemUueCxcbiAgICAoZmxvb3IoaWQgLyBwYWxldHRlU2l6ZS54KSArIC41KSAvIHBhbGV0dGVTaXplLnlcbiAgKTtcbn1cbnZlYzIgcGFsZXR0ZUNvb3JkKHZlYzIgaWQpIHtcbiAgcmV0dXJuIHZlYzIoXG4gICAgKGlkLnggKyAuNSkgLyBwYWxldHRlU2l6ZS54LFxuICAgIChpZC55ICsgLjUpIC8gcGFsZXR0ZVNpemUueVxuICApO1xufVxuXG52ZWM0IGdldENvbG9yKHZlYzQgaWQpIHtcbiAgLy8gemVyby1wYWxldHRlIG1lYW5zIHdlIGRlYWwgd2l0aCBkaXJlY3QgYnVmZmVyXG4gIGlmIChwYWxldHRlU2l6ZS54ID09IDAuKSByZXR1cm4gaWQgLyAyNTUuO1xuICByZXR1cm4gdGV4dHVyZTJEKHBhbGV0dGUsIHBhbGV0dGVDb29yZChpZC54eSkpO1xufVxuXG52b2lkIG1haW4oKSB7XG4gIC8vIGlnbm9yZSBpbmFjdGl2ZSBwb2ludHNcbiAgaWYgKGlzQWN0aXZlID09IDAuKSByZXR1cm47XG5cbiAgdmVjMiBwb3NpdGlvbiA9IHZlYzIoeCwgeSk7XG4gIHZlYzIgcG9zaXRpb25GcmFjdCA9IHZlYzIoeEZyYWN0LCB5RnJhY3QpO1xuXG4gIHZlYzQgY29sb3IgPSBnZXRDb2xvcihjb2xvcklkKTtcbiAgdmVjNCBib3JkZXJDb2xvciA9IGdldENvbG9yKGJvcmRlckNvbG9ySWQpO1xuXG4gIGZsb2F0IHNpemUgPSBzaXplICogbWF4U2l6ZSAvIDI1NS47XG4gIGZsb2F0IGJvcmRlclNpemUgPSBib3JkZXJTaXplICogbWF4U2l6ZSAvIDI1NS47XG5cbiAgZ2xfUG9pbnRTaXplID0gKHNpemUgKyBib3JkZXJTaXplKSAqIHBpeGVsUmF0aW87XG5cbiAgdmVjMiBwb3MgPSAocG9zaXRpb24gKyB0cmFuc2xhdGUpICogc2NhbGVcbiAgICAgICsgKHBvc2l0aW9uRnJhY3QgKyB0cmFuc2xhdGVGcmFjdCkgKiBzY2FsZVxuICAgICAgKyAocG9zaXRpb24gKyB0cmFuc2xhdGUpICogc2NhbGVGcmFjdFxuICAgICAgKyAocG9zaXRpb25GcmFjdCArIHRyYW5zbGF0ZUZyYWN0KSAqIHNjYWxlRnJhY3Q7XG5cbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvcyAqIDIuIC0gMS4sIDAsIDEpO1xuXG4gIGZyYWdCb3JkZXJSYWRpdXMgPSAxLiAtIDIuICogYm9yZGVyU2l6ZSAvIChzaXplICsgYm9yZGVyU2l6ZSk7XG4gIGZyYWdDb2xvciA9IGNvbG9yO1xuICBmcmFnQm9yZGVyQ29sb3IgPSBib3JkZXJDb2xvci5hID09IDAuIHx8IGJvcmRlclNpemUgPT0gMC4gPyB2ZWM0KGNvbG9yLnJnYiwgMC4pIDogYm9yZGVyQ29sb3I7XG4gIGZyYWdXaWR0aCA9IDEuIC8gZ2xfUG9pbnRTaXplO1xufVxuIl0pLGYmJih1LmZyYWc9dS5mcmFnLnJlcGxhY2UoInNtb290aHN0ZXAiLCJzbW9vdGhTdGVwIikpLHRoaXMuZHJhd0NpcmNsZT10KHUpfWUuZXhwb3J0cz12LHYuZGVmYXVsdHM9e2NvbG9yOiJibGFjayIsYm9yZGVyQ29sb3I6InRyYW5zcGFyZW50Iixib3JkZXJTaXplOjAsc2l6ZToxMixvcGFjaXR5OjEsbWFya2VyOnZvaWQgMCx2aWV3cG9ydDpudWxsLHJhbmdlOm51bGwscGl4ZWxTaXplOm51bGwsY291bnQ6MCxvZmZzZXQ6MCxib3VuZHM6bnVsbCxwb3NpdGlvbnM6W10sc25hcDoxZTR9LHYucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe2Zvcih2YXIgdCxlPVtdLHI9YXJndW1lbnRzLmxlbmd0aDtyLS07KWVbcl09YXJndW1lbnRzW3JdO3JldHVybiBlLmxlbmd0aCYmKHQ9dGhpcykudXBkYXRlLmFwcGx5KHQsZSksdGhpcy5kcmF3KCksdGhpc30sdi5wcm90b3R5cGUuZHJhdz1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLGU9W10scj1hcmd1bWVudHMubGVuZ3RoO3ItLTspZVtyXT1hcmd1bWVudHNbcl07dmFyIG49dGhpcy5ncm91cHM7aWYoMT09PWUubGVuZ3RoJiZBcnJheS5pc0FycmF5KGVbMF0pJiYobnVsbD09PWVbMF1bMF18fEFycmF5LmlzQXJyYXkoZVswXVswXSkpJiYoZT1lWzBdKSx0aGlzLnJlZ2wuX3JlZnJlc2goKSxlLmxlbmd0aClmb3IodmFyIGk9MDtpPGUubGVuZ3RoO2krKyl0LmRyYXdJdGVtKGksZVtpXSk7ZWxzZSBuLmZvckVhY2goZnVuY3Rpb24oZSxyKXt0LmRyYXdJdGVtKHIpfSk7cmV0dXJuIHRoaXN9LHYucHJvdG90eXBlLmRyYXdJdGVtPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5ncm91cHMsbj1yW3RdO2lmKCJudW1iZXIiPT10eXBlb2YgZSYmKHQ9ZSxuPXJbZV0sZT1udWxsKSxuJiZuLmNvdW50JiZuLm9wYWNpdHkpe24uYWN0aXZhdGlvblswXSYmdGhpcy5kcmF3Q2lyY2xlKHRoaXMuZ2V0TWFya2VyRHJhd09wdGlvbnMoMCxuLGUpKTtmb3IodmFyIGk9W10sYT0xO2E8bi5hY3RpdmF0aW9uLmxlbmd0aDthKyspbi5hY3RpdmF0aW9uW2FdJiYoITA9PT1uLmFjdGl2YXRpb25bYV18fG4uYWN0aXZhdGlvblthXS5kYXRhLmxlbmd0aCkmJmkucHVzaC5hcHBseShpLHRoaXMuZ2V0TWFya2VyRHJhd09wdGlvbnMoYSxuLGUpKTtpLmxlbmd0aCYmdGhpcy5kcmF3TWFya2VyKGkpfX0sdi5wcm90b3R5cGUuZ2V0TWFya2VyRHJhd09wdGlvbnM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWUucmFuZ2UsaT1lLnRyZWUsYT1lLnZpZXdwb3J0LG89ZS5hY3RpdmF0aW9uLGw9ZS5zZWxlY3Rpb25CdWZmZXIsYz1lLmNvdW50O3RoaXMucmVnbDtpZighaSlyZXR1cm4gcj9bcyh7fSxlLHttYXJrZXJUZXh0dXJlOnRoaXMubWFya2VyVGV4dHVyZXNbdF0sYWN0aXZhdGlvbjpvW3RdLGNvdW50OnIubGVuZ3RoLGVsZW1lbnRzOnIsb2Zmc2V0OjB9KV06W3Moe30sZSx7bWFya2VyVGV4dHVyZTp0aGlzLm1hcmtlclRleHR1cmVzW3RdLGFjdGl2YXRpb246b1t0XSxvZmZzZXQ6MH0pXTt2YXIgdT1bXSxoPWkucmFuZ2Uobix7bG9kOiEwLHB4OlsoblsyXS1uWzBdKS9hLndpZHRoLChuWzNdLW5bMV0pL2EuaGVpZ2h0XX0pO2lmKHIpe2Zvcih2YXIgZj1vW3RdLmRhdGEscD1uZXcgVWludDhBcnJheShjKSxkPTA7ZDxyLmxlbmd0aDtkKyspe3ZhciBnPXJbZF07cFtnXT1mP2ZbZ106MX1sLnN1YmRhdGEocCl9Zm9yKHZhciBtPWgubGVuZ3RoO20tLTspe3ZhciB2PWhbbV0seT12WzBdLHg9dlsxXTt1LnB1c2gocyh7fSxlLHttYXJrZXJUZXh0dXJlOnRoaXMubWFya2VyVGV4dHVyZXNbdF0sYWN0aXZhdGlvbjpyP2w6b1t0XSxvZmZzZXQ6eSxjb3VudDp4LXl9KSl9cmV0dXJuIHV9LHYucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLGU9W10scj1hcmd1bWVudHMubGVuZ3RoO3ItLTspZVtyXT1hcmd1bWVudHNbcl07aWYoZS5sZW5ndGgpezE9PT1lLmxlbmd0aCYmQXJyYXkuaXNBcnJheShlWzBdKSYmKGU9ZVswXSk7dmFyIG49dGhpcy5ncm91cHMsYT10aGlzLmdsLGw9dGhpcy5yZWdsLGY9dGhpcy5tYXhTaXplLHA9dGhpcy5tYXhDb2xvcnMseT10aGlzLnBhbGV0dGU7dGhpcy5ncm91cHM9bj1lLm1hcChmdW5jdGlvbihlLHIpe3ZhciB4PW5bcl07aWYodm9pZCAwPT09ZSlyZXR1cm4geDtudWxsPT09ZT9lPXtwb3NpdGlvbnM6bnVsbH06ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZT17b25kcmF3OmV9OiJudW1iZXIiPT10eXBlb2YgZVswXSYmKGU9e3Bvc2l0aW9uczplfSksbnVsbD09PShlPWMoZSx7cG9zaXRpb25zOiJwb3NpdGlvbnMgZGF0YSBwb2ludHMiLHNuYXA6InNuYXAgY2x1c3RlciBsb2QgdHJlZSIsc2l6ZToic2l6ZXMgc2l6ZSByYWRpdXMiLGJvcmRlclNpemU6ImJvcmRlclNpemVzIGJvcmRlclNpemUgYm9yZGVyLXNpemUgYm9yZGVyc2l6ZSBib3JkZXJXaWR0aCBib3JkZXJXaWR0aHMgYm9yZGVyLXdpZHRoIGJvcmRlcndpZHRoIHN0cm9rZS13aWR0aCBzdHJva2VXaWR0aCBzdHJva2V3aWR0aCBvdXRsaW5lIixjb2xvcjoiY29sb3JzIGNvbG9yIGZpbGwgZmlsbC1jb2xvciBmaWxsQ29sb3IiLGJvcmRlckNvbG9yOiJib3JkZXJDb2xvcnMgYm9yZGVyQ29sb3Igc3Ryb2tlIHN0cm9rZS1jb2xvciBzdHJva2VDb2xvciIsbWFya2VyOiJtYXJrZXJzIG1hcmtlciBzaGFwZSIscmFuZ2U6InJhbmdlIGRhdGFCb3ggZGF0YWJveCIsdmlld3BvcnQ6InZpZXdwb3J0IHZpZXdQb3J0IHZpZXdCb3ggdmlld2JveCIsb3BhY2l0eToib3BhY2l0eSBhbHBoYSB0cmFuc3BhcmVuY3kiLGJvdW5kczoiYm91bmQgYm91bmRzIGJvdW5kYXJpZXMgbGltaXRzIn0pKS5wb3NpdGlvbnMmJihlLnBvc2l0aW9ucz1bXSkseHx8KG5bcl09eD17aWQ6cixzY2FsZTpudWxsLHRyYW5zbGF0ZTpudWxsLHNjYWxlRnJhY3Q6bnVsbCx0cmFuc2xhdGVGcmFjdDpudWxsLGFjdGl2YXRpb246W10sc2VsZWN0aW9uQnVmZmVyOmwuYnVmZmVyKHtkYXRhOm5ldyBVaW50OEFycmF5KDApLHVzYWdlOiJzdHJlYW0iLHR5cGU6InVpbnQ4In0pLHNpemVCdWZmZXI6bC5idWZmZXIoe2RhdGE6bmV3IFVpbnQ4QXJyYXkoMCksdXNhZ2U6ImR5bmFtaWMiLHR5cGU6InVpbnQ4In0pLGNvbG9yQnVmZmVyOmwuYnVmZmVyKHtkYXRhOm5ldyBVaW50OEFycmF5KDApLHVzYWdlOiJkeW5hbWljIix0eXBlOiJ1aW50OCJ9KSxwb3NpdGlvbkJ1ZmZlcjpsLmJ1ZmZlcih7ZGF0YTpuZXcgVWludDhBcnJheSgwKSx1c2FnZToiZHluYW1pYyIsdHlwZToiZmxvYXQifSkscG9zaXRpb25GcmFjdEJ1ZmZlcjpsLmJ1ZmZlcih7ZGF0YTpuZXcgVWludDhBcnJheSgwKSx1c2FnZToiZHluYW1pYyIsdHlwZToiZmxvYXQifSl9LGU9cyh7fSx2LmRlZmF1bHRzLGUpKSwhZS5wb3NpdGlvbnN8fCJtYXJrZXIiaW4gZXx8KGUubWFya2VyPXgubWFya2VyLGRlbGV0ZSB4Lm1hcmtlciksIWUubWFya2VyfHwicG9zaXRpb25zImluIGV8fChlLnBvc2l0aW9ucz14LnBvc2l0aW9ucyxkZWxldGUgeC5wb3NpdGlvbnMpO3ZhciBiPTAsXz0wO2lmKHUoeCxlLFt7c25hcDohMCxzaXplOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG51bGw9PXQmJih0PXYuZGVmYXVsdHMuc2l6ZSksYis9dCYmdC5sZW5ndGg/MTowLHR9LGJvcmRlclNpemU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbD09dCYmKHQ9di5kZWZhdWx0cy5ib3JkZXJTaXplKSxiKz10JiZ0Lmxlbmd0aD8xOjAsdH0sb3BhY2l0eTpwYXJzZUZsb2F0LGNvbG9yOmZ1bmN0aW9uKGUscil7cmV0dXJuIG51bGw9PWUmJihlPXYuZGVmYXVsdHMuY29sb3IpLGU9dC51cGRhdGVDb2xvcihlKSxfKyssZX0sYm9yZGVyQ29sb3I6ZnVuY3Rpb24oZSxyKXtyZXR1cm4gbnVsbD09ZSYmKGU9di5kZWZhdWx0cy5ib3JkZXJDb2xvciksZT10LnVwZGF0ZUNvbG9yKGUpLF8rKyxlfSxib3VuZHM6ZnVuY3Rpb24odCxlLHIpe3JldHVybiJyYW5nZSJpbiByfHwoci5yYW5nZT1udWxsKSx0fSxwb3NpdGlvbnM6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWUuc25hcCxhPWUucG9zaXRpb25CdWZmZXIscz1lLnBvc2l0aW9uRnJhY3RCdWZmZXIsYz1lLnNlbGVjdGlvbkJ1ZmZlcjtpZih0Lnh8fHQueSlyZXR1cm4gdC54Lmxlbmd0aD9lLnhBdHRyPXtidWZmZXI6bC5idWZmZXIodC54KSxvZmZzZXQ6MCxzdHJpZGU6NCxjb3VudDp0LngubGVuZ3RofTplLnhBdHRyPXtidWZmZXI6dC54LmJ1ZmZlcixvZmZzZXQ6NCp0Lngub2Zmc2V0fHwwLHN0cmlkZTo0Kih0Lnguc3RyaWRlfHwxKSxjb3VudDp0LnguY291bnR9LHQueS5sZW5ndGg/ZS55QXR0cj17YnVmZmVyOmwuYnVmZmVyKHQueSksb2Zmc2V0OjAsc3RyaWRlOjQsY291bnQ6dC55Lmxlbmd0aH06ZS55QXR0cj17YnVmZmVyOnQueS5idWZmZXIsb2Zmc2V0OjQqdC55Lm9mZnNldHx8MCxzdHJpZGU6NCoodC55LnN0cmlkZXx8MSksY291bnQ6dC55LmNvdW50fSxlLmNvdW50PU1hdGgubWF4KGUueEF0dHIuY291bnQsZS55QXR0ci5jb3VudCksdDt0PWgodCwiZmxvYXQ2NCIpO3ZhciB1PWUuY291bnQ9TWF0aC5mbG9vcih0Lmxlbmd0aC8yKSxmPWUuYm91bmRzPXU/aSh0LDIpOm51bGw7aWYoci5yYW5nZXx8ZS5yYW5nZXx8KGRlbGV0ZSBlLnJhbmdlLHIucmFuZ2U9Ziksci5tYXJrZXJ8fGUubWFya2VyfHwoZGVsZXRlIGUubWFya2VyLHIubWFya2VyPW51bGwpLG4mJighMD09PW58fHU+bik/ZS50cmVlPW8odCx7Ym91bmRzOmZ9KTpuJiZuLmxlbmd0aCYmKGUudHJlZT1uKSxlLnRyZWUpe3ZhciBwPXtwcmltaXRpdmU6InBvaW50cyIsdXNhZ2U6InN0YXRpYyIsZGF0YTplLnRyZWUsdHlwZToidWludDMyIn07ZS5lbGVtZW50cz9lLmVsZW1lbnRzKHApOmUuZWxlbWVudHM9bC5lbGVtZW50cyhwKX1yZXR1cm4gYSh7ZGF0YTpkKHQpLHVzYWdlOiJkeW5hbWljIn0pLHMoe2RhdGE6Zyh0KSx1c2FnZToiZHluYW1pYyJ9KSxjKHtkYXRhOm5ldyBVaW50OEFycmF5KHUpLHR5cGU6InVpbnQ4Iix1c2FnZToic3RyZWFtIn0pLHR9fSx7bWFya2VyOmZ1bmN0aW9uKGUscixuKXt2YXIgaT1yLmFjdGl2YXRpb247aWYoaS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0JiZ0LmRlc3Ryb3kmJnQuZGVzdHJveSgpfSksaS5sZW5ndGg9MCxlJiYibnVtYmVyIiE9dHlwZW9mIGVbMF0pe2Zvcih2YXIgYT1bXSxvPTAscz1NYXRoLm1pbihlLmxlbmd0aCxyLmNvdW50KTtvPHM7bysrKXt2YXIgYz10LmFkZE1hcmtlcihlW29dKTthW2NdfHwoYVtjXT1uZXcgVWludDhBcnJheShyLmNvdW50KSksYVtjXVtvXT0xfWZvcih2YXIgdT0wO3U8YS5sZW5ndGg7dSsrKWlmKGFbdV0pe3ZhciBoPXtkYXRhOmFbdV0sdHlwZToidWludDgiLHVzYWdlOiJzdGF0aWMifTtpW3VdP2lbdV0oaCk6aVt1XT1sLmJ1ZmZlcihoKSxpW3VdLmRhdGE9YVt1XX19ZWxzZXtpW3QuYWRkTWFya2VyKGUpXT0hMH1yZXR1cm4gZX0scmFuZ2U6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWUuYm91bmRzO2lmKG4pcmV0dXJuIHR8fCh0PW4pLGUuc2NhbGU9WzEvKHRbMl0tdFswXSksMS8odFszXS10WzFdKV0sZS50cmFuc2xhdGU9Wy10WzBdLC10WzFdXSxlLnNjYWxlRnJhY3Q9ZyhlLnNjYWxlKSxlLnRyYW5zbGF0ZUZyYWN0PWcoZS50cmFuc2xhdGUpLHR9LHZpZXdwb3J0OmZ1bmN0aW9uKHQpe3JldHVybiBtKHR8fFthLmRyYXdpbmdCdWZmZXJXaWR0aCxhLmRyYXdpbmdCdWZmZXJIZWlnaHRdKX19XSksYil7dmFyIHc9eC5jb3VudCxrPXguc2l6ZSxNPXguYm9yZGVyU2l6ZSxBPXguc2l6ZUJ1ZmZlcixUPW5ldyBVaW50OEFycmF5KDIqdyk7aWYoay5sZW5ndGh8fE0ubGVuZ3RoKWZvcih2YXIgUz0wO1M8dztTKyspVFsyKlNdPU1hdGgucm91bmQoMjU1KihudWxsPT1rW1NdP2s6a1tTXSkvZiksVFsyKlMrMV09TWF0aC5yb3VuZCgyNTUqKG51bGw9PU1bU10/TTpNW1NdKS9mKTtBKHtkYXRhOlQsdXNhZ2U6ImR5bmFtaWMifSl9aWYoXyl7dmFyIEUsQz14LmNvdW50LEw9eC5jb2xvcix6PXguYm9yZGVyQ29sb3IsUD14LmNvbG9yQnVmZmVyO2lmKHQudG9vTWFueUNvbG9ycyl7aWYoTC5sZW5ndGh8fHoubGVuZ3RoKXtFPW5ldyBVaW50OEFycmF5KDgqQyk7Zm9yKHZhciBJPTA7STxDO0krKyl7dmFyIE89TFtJXTtFWzgqSV09eVs0Kk9dLEVbOCpJKzFdPXlbNCpPKzFdLEVbOCpJKzJdPXlbNCpPKzJdLEVbOCpJKzNdPXlbNCpPKzNdO3ZhciBEPXpbSV07RVs4KkkrNF09eVs0KkRdLEVbOCpJKzVdPXlbNCpEKzFdLEVbOCpJKzZdPXlbNCpEKzJdLEVbOCpJKzddPXlbNCpEKzNdfX19ZWxzZSBpZihMLmxlbmd0aHx8ei5sZW5ndGgpe0U9bmV3IFVpbnQ4QXJyYXkoNCpDKzIpO2Zvcih2YXIgUj0wO1I8QztSKyspbnVsbCE9TFtSXSYmKEVbNCpSXT1MW1JdJXAsRVs0KlIrMV09TWF0aC5mbG9vcihMW1JdL3ApKSxudWxsIT16W1JdJiYoRVs0KlIrMl09eltSXSVwLEVbNCpSKzNdPU1hdGguZmxvb3IoeltSXS9wKSl9UCh7ZGF0YTpFfHxuZXcgVWludDhBcnJheSgwKSx0eXBlOiJ1aW50OCIsdXNhZ2U6ImR5bmFtaWMifSl9cmV0dXJuIHh9KX19LHYucHJvdG90eXBlLmFkZE1hcmtlcj1mdW5jdGlvbih0KXt2YXIgZSxyPXRoaXMubWFya2VyVGV4dHVyZXMsbj10aGlzLnJlZ2wsaT10aGlzLm1hcmtlckNhY2hlLGE9bnVsbD09dD8wOmkuaW5kZXhPZih0KTtpZihhPj0wKXJldHVybiBhO2lmKHQgaW5zdGFuY2VvZiBVaW50OEFycmF5fHx0IGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXkpZT10O2Vsc2V7ZT1uZXcgVWludDhBcnJheSh0Lmxlbmd0aCk7Zm9yKHZhciBvPTAscz10Lmxlbmd0aDtvPHM7bysrKWVbb109MjU1KnRbb119dmFyIGw9TWF0aC5mbG9vcihNYXRoLnNxcnQoZS5sZW5ndGgpKTtyZXR1cm4gYT1yLmxlbmd0aCxpLnB1c2godCksci5wdXNoKG4udGV4dHVyZSh7Y2hhbm5lbHM6MSxkYXRhOmUscmFkaXVzOmwsbWFnOiJsaW5lYXIiLG1pbjoibGluZWFyIn0pKSxhfSx2LnByb3RvdHlwZS51cGRhdGVDb2xvcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnBhbGV0dGVJZHMscj10aGlzLnBhbGV0dGUsaT10aGlzLm1heENvbG9ycztBcnJheS5pc0FycmF5KHQpfHwodD1bdF0pO3ZhciBvPVtdO2lmKCJudW1iZXIiPT10eXBlb2YgdFswXSl7dmFyIHM9W107aWYoQXJyYXkuaXNBcnJheSh0KSlmb3IodmFyIGw9MDtsPHQubGVuZ3RoO2wrPTQpcy5wdXNoKHQuc2xpY2UobCxsKzQpKTtlbHNlIGZvcih2YXIgYz0wO2M8dC5sZW5ndGg7Yys9NClzLnB1c2godC5zdWJhcnJheShjLGMrNCkpO3Q9c31mb3IodmFyIHU9MDt1PHQubGVuZ3RoO3UrKyl7dmFyIGg9dFt1XTtoPW4oaCwidWludDgiKTt2YXIgZj1hKGgsITEpO2lmKG51bGw9PWVbZl0pe3ZhciBwPXIubGVuZ3RoO2VbZl09TWF0aC5mbG9vcihwLzQpLHJbcF09aFswXSxyW3ArMV09aFsxXSxyW3ArMl09aFsyXSxyW3ArM109aFszXX1vW3VdPWVbZl19cmV0dXJuIXRoaXMudG9vTWFueUNvbG9ycyYmci5sZW5ndGg+aSppKjQmJih0aGlzLnRvb01hbnlDb2xvcnM9ITApLHRoaXMudXBkYXRlUGFsZXR0ZShyKSwxPT09by5sZW5ndGg/b1swXTpvfSx2LnByb3RvdHlwZS51cGRhdGVQYWxldHRlPWZ1bmN0aW9uKHQpe2lmKCF0aGlzLnRvb01hbnlDb2xvcnMpe3ZhciBlPXRoaXMubWF4Q29sb3JzLHI9dGhpcy5wYWxldHRlVGV4dHVyZSxuPU1hdGguY2VpbCguMjUqdC5sZW5ndGgvZSk7aWYobj4xKWZvcih2YXIgaT0uMjUqKHQ9dC5zbGljZSgpKS5sZW5ndGglZTtpPG4qZTtpKyspdC5wdXNoKDAsMCwwLDApO3IuaGVpZ2h0PG4mJnIucmVzaXplKGUsbiksci5zdWJpbWFnZSh7d2lkdGg6TWF0aC5taW4oLjI1KnQubGVuZ3RoLGUpLGhlaWdodDpuLGRhdGE6dH0sMCwwKX19LHYucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ncm91cHMuZm9yRWFjaChmdW5jdGlvbih0KXt0LnNpemVCdWZmZXIuZGVzdHJveSgpLHQucG9zaXRpb25CdWZmZXIuZGVzdHJveSgpLHQucG9zaXRpb25GcmFjdEJ1ZmZlci5kZXN0cm95KCksdC5jb2xvckJ1ZmZlci5kZXN0cm95KCksdC5hY3RpdmF0aW9uLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQmJnQuZGVzdHJveSYmdC5kZXN0cm95KCl9KSx0LnNlbGVjdGlvbkJ1ZmZlci5kZXN0cm95KCksdC5lbGVtZW50cyYmdC5lbGVtZW50cy5kZXN0cm95KCl9KSx0aGlzLmdyb3Vwcy5sZW5ndGg9MCx0aGlzLnBhbGV0dGVUZXh0dXJlLmRlc3Ryb3koKSx0aGlzLm1hcmtlclRleHR1cmVzLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQmJnQuZGVzdHJveSYmdC5kZXN0cm95KCl9KSx0aGlzfX0seyJhcnJheS1ib3VuZHMiOjU2LCJjb2xvci1pZCI6MTA1LCJjb2xvci1ub3JtYWxpemUiOjEwNywiZmxhdHRlbi12ZXJ0ZXgtZGF0YSI6MjE2LGdsc2xpZnk6Mzc3LCJpcy1pZXhwbG9yZXIiOjM4Nywib2JqZWN0LWFzc2lnbiI6NDIxLCJwYXJzZS1yZWN0Ijo0MjYsInBpY2stYnktYWxpYXMiOjQzMiwicG9pbnQtY2x1c3RlciI6NDM2LCJ0by1mbG9hdDMyIjo1MDAsInVwZGF0ZS1kaWZmIjo1MTF9XSw0NjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgicmVnbC1zY2F0dGVyMmQvc2NhdHRlciIpLGk9dCgicGljay1ieS1hbGlhcyIpLGE9dCgiYXJyYXktYm91bmRzIiksbz10KCJyYWYiKSxzPXQoImFycmF5LXJhbmdlIiksbD10KCJwYXJzZS1yZWN0IiksYz10KCJmbGF0dGVuLXZlcnRleC1kYXRhIik7ZnVuY3Rpb24gdSh0LGUpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHUpKXJldHVybiBuZXcgdSh0LGUpO3RoaXMudHJhY2VzPVtdLHRoaXMucGFzc2VzPXt9LHRoaXMucmVnbD10LHRoaXMuc2NhdHRlcj1uKHQpLHRoaXMuY2FudmFzPXRoaXMuc2NhdHRlci5jYW52YXN9ZnVuY3Rpb24gaCh0LGUscil7cmV0dXJuKG51bGwhPXQuaWQ/dC5pZDp0KTw8MTZ8KDI1NSZlKTw8OHwyNTUmcn1mdW5jdGlvbiBmKHQsZSxyKXt2YXIgbixpLGEsbyxzPXRbZV0sbD10W3JdO3JldHVybiBzLmxlbmd0aD4yPyhzWzBdLHNbMl0sbj1zWzFdLGk9c1szXSk6cy5sZW5ndGg/KG49c1swXSxpPXNbMV0pOihzLngsbj1zLnkscy54K3Mud2lkdGgsaT1zLnkrcy5oZWlnaHQpLGwubGVuZ3RoPjI/KGE9bFswXSxvPWxbMl0sbFsxXSxsWzNdKTpsLmxlbmd0aD8oYT1sWzBdLG89bFsxXSk6KGE9bC54LGwueSxvPWwueCtsLndpZHRoLGwueStsLmhlaWdodCksW2EsbixvLGldfWZ1bmN0aW9uIHAodCl7aWYoIm51bWJlciI9PXR5cGVvZiB0KXJldHVyblt0LHQsdCx0XTtpZigyPT09dC5sZW5ndGgpcmV0dXJuW3RbMF0sdFsxXSx0WzBdLHRbMV1dO3ZhciBlPWwodCk7cmV0dXJuW2UueCxlLnksZS54K2Uud2lkdGgsZS55K2UuaGVpZ2h0XX1lLmV4cG9ydHM9dSx1LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXtmb3IodmFyIHQsZT10aGlzLHI9W10sbj1hcmd1bWVudHMubGVuZ3RoO24tLTspcltuXT1hcmd1bWVudHNbbl07cmV0dXJuIHIubGVuZ3RoJiYodD10aGlzKS51cGRhdGUuYXBwbHkodCxyKSx0aGlzLnJlZ2wuYXR0cmlidXRlcy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI/dGhpcy5kcmF3KCk6KHRoaXMuZGlydHk/bnVsbD09dGhpcy5wbGFubmVkJiYodGhpcy5wbGFubmVkPW8oZnVuY3Rpb24oKXtlLmRyYXcoKSxlLmRpcnR5PSEwLGUucGxhbm5lZD1udWxsfSkpOih0aGlzLmRyYXcoKSx0aGlzLmRpcnR5PSEwLG8oZnVuY3Rpb24oKXtlLmRpcnR5PSExfSkpLHRoaXMpfSx1LnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9W10sZT1hcmd1bWVudHMubGVuZ3RoO2UtLTspdFtlXT1hcmd1bWVudHNbZV07aWYodC5sZW5ndGgpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXRoaXMudXBkYXRlSXRlbShyLHRbcl0pO3RoaXMudHJhY2VzPXRoaXMudHJhY2VzLmZpbHRlcihCb29sZWFuKTtmb3IodmFyIG4saT1bXSxhPTAsbz0wO288dGhpcy50cmFjZXMubGVuZ3RoO28rKyl7Zm9yKHZhciBzPXRoaXMudHJhY2VzW29dLGw9dGhpcy50cmFjZXNbb10ucGFzc2VzLGM9MDtjPGwubGVuZ3RoO2MrKylpLnB1c2godGhpcy5wYXNzZXNbbFtjXV0pO3MucGFzc09mZnNldD1hLGErPXMucGFzc2VzLmxlbmd0aH1yZXR1cm4obj10aGlzLnNjYXR0ZXIpLnVwZGF0ZS5hcHBseShuLGkpLHRoaXN9fSx1LnByb3RvdHlwZS51cGRhdGVJdGVtPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5yZWdsO2lmKG51bGw9PT1lKXJldHVybiB0aGlzLnRyYWNlc1t0XT1udWxsLHRoaXM7aWYoIWUpcmV0dXJuIHRoaXM7dmFyIG4sbz1pKGUse2RhdGE6ImRhdGEgaXRlbXMgY29sdW1ucyByb3dzIHZhbHVlcyBkaW1lbnNpb25zIHNhbXBsZXMgeCIsc25hcDoic25hcCBjbHVzdGVyIixzaXplOiJzaXplcyBzaXplIHJhZGl1cyIsY29sb3I6ImNvbG9ycyBjb2xvciBmaWxsIGZpbGwtY29sb3IgZmlsbENvbG9yIixvcGFjaXR5OiJvcGFjaXR5IGFscGhhIHRyYW5zcGFyZW5jeSBvcGFxdWUiLGJvcmRlclNpemU6ImJvcmRlclNpemVzIGJvcmRlclNpemUgYm9yZGVyLXNpemUgYm9yZGVyc2l6ZSBib3JkZXJXaWR0aCBib3JkZXJXaWR0aHMgYm9yZGVyLXdpZHRoIGJvcmRlcndpZHRoIHN0cm9rZS13aWR0aCBzdHJva2VXaWR0aCBzdHJva2V3aWR0aCBvdXRsaW5lIixib3JkZXJDb2xvcjoiYm9yZGVyQ29sb3JzIGJvcmRlckNvbG9yIGJvcmRlcmNvbG9yIHN0cm9rZSBzdHJva2UtY29sb3Igc3Ryb2tlQ29sb3IiLG1hcmtlcjoibWFya2VycyBtYXJrZXIgc2hhcGUiLHJhbmdlOiJyYW5nZSByYW5nZXMgZGF0YWJveCBkYXRhQm94Iix2aWV3cG9ydDoidmlld3BvcnQgdmlld0JveCB2aWV3Ym94Iixkb21haW46ImRvbWFpbiBkb21haW5zIGFyZWEgYXJlYXMiLHBhZGRpbmc6InBhZCBwYWRkaW5nIHBhZGRpbmdzIHBhZHMgbWFyZ2luIG1hcmdpbnMiLHRyYW5zcG9zZToidHJhbnNwb3NlIHRyYW5zcG9zZWQiLGRpYWdvbmFsOiJkaWFnb25hbCBkaWFnIHNob3dEaWFnb25hbCIsdXBwZXI6InVwcGVyIHVwIHRvcCB1cHBlcmhhbGYgdXBwZXJIYWxmIHNob3d1cHBlcmhhbGYgc2hvd1VwcGVyIHNob3dVcHBlckhhbGYiLGxvd2VyOiJsb3dlciBsb3cgYm90dG9tIGxvd2VyaGFsZiBsb3dlckhhbGYgc2hvd2xvd2VyaGFsZiBzaG93TG93ZXJIYWxmIHNob3dMb3dlciJ9KSxzPXRoaXMudHJhY2VzW3RdfHwodGhpcy50cmFjZXNbdF09e2lkOnQsYnVmZmVyOnIuYnVmZmVyKHt1c2FnZToiZHluYW1pYyIsdHlwZToiZmxvYXQiLGRhdGE6bmV3IFVpbnQ4QXJyYXl9KSxjb2xvcjoiYmxhY2siLG1hcmtlcjpudWxsLHNpemU6MTIsYm9yZGVyQ29sb3I6InRyYW5zcGFyZW50Iixib3JkZXJTaXplOjEsdmlld3BvcnQ6bChbci5fZ2wuZHJhd2luZ0J1ZmZlcldpZHRoLHIuX2dsLmRyYXdpbmdCdWZmZXJIZWlnaHRdKSxwYWRkaW5nOlswLDAsMCwwXSxvcGFjaXR5OjEsZGlhZ29uYWw6ITAsdXBwZXI6ITAsbG93ZXI6ITB9KTtpZihudWxsIT1vLmNvbG9yJiYocy5jb2xvcj1vLmNvbG9yKSxudWxsIT1vLnNpemUmJihzLnNpemU9by5zaXplKSxudWxsIT1vLm1hcmtlciYmKHMubWFya2VyPW8ubWFya2VyKSxudWxsIT1vLmJvcmRlckNvbG9yJiYocy5ib3JkZXJDb2xvcj1vLmJvcmRlckNvbG9yKSxudWxsIT1vLmJvcmRlclNpemUmJihzLmJvcmRlclNpemU9by5ib3JkZXJTaXplKSxudWxsIT1vLm9wYWNpdHkmJihzLm9wYWNpdHk9by5vcGFjaXR5KSxvLnZpZXdwb3J0JiYocy52aWV3cG9ydD1sKG8udmlld3BvcnQpKSxudWxsIT1vLmRpYWdvbmFsJiYocy5kaWFnb25hbD1vLmRpYWdvbmFsKSxudWxsIT1vLnVwcGVyJiYocy51cHBlcj1vLnVwcGVyKSxudWxsIT1vLmxvd2VyJiYocy5sb3dlcj1vLmxvd2VyKSxvLmRhdGEpe3MuYnVmZmVyKGMoby5kYXRhKSkscy5jb2x1bW5zPW8uZGF0YS5sZW5ndGgscy5jb3VudD1vLmRhdGFbMF0ubGVuZ3RoLHMuYm91bmRzPVtdO2Zvcih2YXIgdT0wO3U8cy5jb2x1bW5zO3UrKylzLmJvdW5kc1t1XT1hKG8uZGF0YVt1XSwxKX1vLnJhbmdlJiYocy5yYW5nZT1vLnJhbmdlLG49cy5yYW5nZSYmIm51bWJlciIhPXR5cGVvZiBzLnJhbmdlWzBdKSxvLmRvbWFpbiYmKHMuZG9tYWluPW8uZG9tYWluKTt2YXIgZD0hMTtudWxsIT1vLnBhZGRpbmcmJihBcnJheS5pc0FycmF5KG8ucGFkZGluZykmJm8ucGFkZGluZy5sZW5ndGg9PT1zLmNvbHVtbnMmJiJudW1iZXIiPT10eXBlb2Ygby5wYWRkaW5nW28ucGFkZGluZy5sZW5ndGgtMV0/KHMucGFkZGluZz1vLnBhZGRpbmcubWFwKHApLGQ9ITApOnMucGFkZGluZz1wKG8ucGFkZGluZykpO3ZhciBnPXMuY29sdW1ucyxtPXMuY291bnQsdj1zLnZpZXdwb3J0LndpZHRoLHk9cy52aWV3cG9ydC5oZWlnaHQseD1zLnZpZXdwb3J0LngsYj1zLnZpZXdwb3J0LnksXz12L2csdz15L2c7cy5wYXNzZXM9W107Zm9yKHZhciBrPTA7azxnO2srKylmb3IodmFyIE09MDtNPGc7TSsrKWlmKChzLmRpYWdvbmFsfHxNIT09aykmJihzLnVwcGVyfHwhKGs+TSkpJiYocy5sb3dlcnx8IShrPE0pKSl7dmFyIEE9aChzLmlkLGssTSksVD10aGlzLnBhc3Nlc1tBXXx8KHRoaXMucGFzc2VzW0FdPXt9KTtpZihvLmRhdGEmJihvLnRyYW5zcG9zZT9ULnBvc2l0aW9ucz17eDp7YnVmZmVyOnMuYnVmZmVyLG9mZnNldDpNLGNvdW50Om0sc3RyaWRlOmd9LHk6e2J1ZmZlcjpzLmJ1ZmZlcixvZmZzZXQ6ayxjb3VudDptLHN0cmlkZTpnfX06VC5wb3NpdGlvbnM9e3g6e2J1ZmZlcjpzLmJ1ZmZlcixvZmZzZXQ6TSptLGNvdW50Om19LHk6e2J1ZmZlcjpzLmJ1ZmZlcixvZmZzZXQ6ayptLGNvdW50Om19fSxULmJvdW5kcz1mKHMuYm91bmRzLGssTSkpLG8uZG9tYWlufHxvLnZpZXdwb3J0fHxvLmRhdGEpe3ZhciBTPWQ/ZihzLnBhZGRpbmcsayxNKTpzLnBhZGRpbmc7aWYocy5kb21haW4pe3ZhciBFPWYocy5kb21haW4sayxNKSxDPUVbMF0sTD1FWzFdLHo9RVsyXSxQPUVbM107VC52aWV3cG9ydD1beCtDKnYrU1swXSxiK0wqeStTWzFdLHgreip2LVNbMl0sYitQKnktU1szXV19ZWxzZSBULnZpZXdwb3J0PVt4K00qXytfKlNbMF0sYitrKncrdypTWzFdLHgrKE0rMSkqXy1fKlNbMl0sYisoaysxKSp3LXcqU1szXV19by5jb2xvciYmKFQuY29sb3I9cy5jb2xvciksby5zaXplJiYoVC5zaXplPXMuc2l6ZSksby5tYXJrZXImJihULm1hcmtlcj1zLm1hcmtlciksby5ib3JkZXJTaXplJiYoVC5ib3JkZXJTaXplPXMuYm9yZGVyU2l6ZSksby5ib3JkZXJDb2xvciYmKFQuYm9yZGVyQ29sb3I9cy5ib3JkZXJDb2xvciksby5vcGFjaXR5JiYoVC5vcGFjaXR5PXMub3BhY2l0eSksby5yYW5nZSYmKFQucmFuZ2U9bj9mKHMucmFuZ2UsayxNKTpzLnJhbmdlfHxULmJvdW5kcykscy5wYXNzZXMucHVzaChBKX1yZXR1cm4gdGhpc30sdS5wcm90b3R5cGUuZHJhdz1mdW5jdGlvbigpe2Zvcih2YXIgdCxlPVtdLHI9YXJndW1lbnRzLmxlbmd0aDtyLS07KWVbcl09YXJndW1lbnRzW3JdO2lmKGUubGVuZ3RoKXtmb3IodmFyIG49W10saT0wO2k8ZS5sZW5ndGg7aSsrKWlmKCJudW1iZXIiPT10eXBlb2YgZVtpXSl7dmFyIGE9dGhpcy50cmFjZXNbZVtpXV0sbz1hLnBhc3NlcyxsPWEucGFzc09mZnNldDtuLnB1c2guYXBwbHkobixzKGwsbCtvLmxlbmd0aCkpfWVsc2UgaWYoZVtpXS5sZW5ndGgpe3ZhciBjPWVbaV0sdT10aGlzLnRyYWNlc1tpXSxoPXUucGFzc2VzLGY9dS5wYXNzT2Zmc2V0O2g9aC5tYXAoZnVuY3Rpb24odCxlKXtuW2YrZV09Y30pfSh0PXRoaXMuc2NhdHRlcikuZHJhdy5hcHBseSh0LG4pfWVsc2UgdGhpcy5zY2F0dGVyLmRyYXcoKTtyZXR1cm4gdGhpc30sdS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRyYWNlcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuYnVmZmVyJiZ0LmJ1ZmZlci5kZXN0cm95JiZ0LmJ1ZmZlci5kZXN0cm95KCl9KSx0aGlzLnRyYWNlcz1udWxsLHRoaXMucGFzc2VzPW51bGwsdGhpcy5zY2F0dGVyLmRlc3Ryb3koKSx0aGlzfX0seyJhcnJheS1ib3VuZHMiOjU2LCJhcnJheS1yYW5nZSI6NTgsImZsYXR0ZW4tdmVydGV4LWRhdGEiOjQ2MiwicGFyc2UtcmVjdCI6NDI2LCJwaWNrLWJ5LWFsaWFzIjo0MzIscmFmOjQ1MSwicmVnbC1zY2F0dGVyMmQvc2NhdHRlciI6NDYwfV0sNDYyOltmdW5jdGlvbih0LGUscil7YXJndW1lbnRzWzRdWzQ4XVswXS5hcHBseShyLGFyZ3VtZW50cyl9LHtkdHlwZToxNTMsZHVwOjQ4fV0sNDYzOltmdW5jdGlvbih0LGUscil7dmFyIG4saTtuPXRoaXMsaT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLmlkPVYrKyx0aGlzLnR5cGU9dCx0aGlzLmRhdGE9ZX1mdW5jdGlvbiBlKHQpe3JldHVybiJbIitmdW5jdGlvbiB0KGUpe2lmKDA9PT1lLmxlbmd0aClyZXR1cm5bXTt2YXIgcj1lLmNoYXJBdCgwKSxuPWUuY2hhckF0KGUubGVuZ3RoLTEpO2lmKDE8ZS5sZW5ndGgmJnI9PT1uJiYoJyInPT09cnx8IiciPT09cikpcmV0dXJuWyciJytlLnN1YnN0cigxLGUubGVuZ3RoLTIpLnJlcGxhY2UoL1xcL2csIlxcXFwiKS5yZXBsYWNlKC8iL2csJ1xcIicpKyciJ107aWYocj0vXFsoZmFsc2V8dHJ1ZXxudWxsfFxkK3wnW14nXSonfCJbXiJdKiIpXF0vLmV4ZWMoZSkpcmV0dXJuIHQoZS5zdWJzdHIoMCxyLmluZGV4KSkuY29uY2F0KHQoclsxXSkpLmNvbmNhdCh0KGUuc3Vic3RyKHIuaW5kZXgrclswXS5sZW5ndGgpKSk7aWYoMT09PShyPWUuc3BsaXQoIi4iKSkubGVuZ3RoKXJldHVyblsnIicrZS5yZXBsYWNlKC9cXC9nLCJcXFxcIikucmVwbGFjZSgvIi9nLCdcXCInKSsnIiddO2ZvcihlPVtdLG49MDtuPHIubGVuZ3RoOysrbillPWUuY29uY2F0KHQocltuXSkpO3JldHVybiBlfSh0KS5qb2luKCJdWyIpKyJdIn1mdW5jdGlvbiByKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdD90LnNwbGl0KCk6dH1mdW5jdGlvbiBuKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdD9kb2N1bWVudC5xdWVyeVNlbGVjdG9yKHQpOnR9ZnVuY3Rpb24gaSh0KXt2YXIgZSxpLGEsbyxzPXR8fHt9O3Q9e307dmFyIGw9W10sYz1bXSx1PSJ1bmRlZmluZWQiPT10eXBlb2Ygd2luZG93PzE6d2luZG93LmRldmljZVBpeGVsUmF0aW8saD0hMSxmPWZ1bmN0aW9uKHQpe30scD1mdW5jdGlvbigpe307aWYoInN0cmluZyI9PXR5cGVvZiBzP2U9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzKToib2JqZWN0Ij09dHlwZW9mIHMmJigic3RyaW5nIj09dHlwZW9mIHMubm9kZU5hbWUmJiJmdW5jdGlvbiI9PXR5cGVvZiBzLmFwcGVuZENoaWxkJiYiZnVuY3Rpb24iPT10eXBlb2Ygcy5nZXRCb3VuZGluZ0NsaWVudFJlY3Q/ZT1zOiJmdW5jdGlvbiI9PXR5cGVvZiBzLmRyYXdBcnJheXN8fCJmdW5jdGlvbiI9PXR5cGVvZiBzLmRyYXdFbGVtZW50cz9hPShvPXMpLmNhbnZhczooImdsImluIHM/bz1zLmdsOiJjYW52YXMiaW4gcz9hPW4ocy5jYW52YXMpOiJjb250YWluZXIiaW4gcyYmKGk9bihzLmNvbnRhaW5lcikpLCJhdHRyaWJ1dGVzImluIHMmJih0PXMuYXR0cmlidXRlcyksImV4dGVuc2lvbnMiaW4gcyYmKGw9cihzLmV4dGVuc2lvbnMpKSwib3B0aW9uYWxFeHRlbnNpb25zImluIHMmJihjPXIocy5vcHRpb25hbEV4dGVuc2lvbnMpKSwib25Eb25lImluIHMmJihmPXMub25Eb25lKSwicHJvZmlsZSJpbiBzJiYoaD0hIXMucHJvZmlsZSksInBpeGVsUmF0aW8iaW4gcyYmKHU9K3MucGl4ZWxSYXRpbykpKSxlJiYoImNhbnZhcyI9PT1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk/YT1lOmk9ZSksIW8pe2lmKCFhKXtpZighKGU9ZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4oKXt2YXIgZT13aW5kb3cuaW5uZXJXaWR0aCxuPXdpbmRvdy5pbm5lckhlaWdodDt0IT09ZG9jdW1lbnQuYm9keSYmKGU9KG49dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSkucmlnaHQtbi5sZWZ0LG49bi5ib3R0b20tbi50b3ApLGkud2lkdGg9ciplLGkuaGVpZ2h0PXIqbixqKGkuc3R5bGUse3dpZHRoOmUrInB4IixoZWlnaHQ6bisicHgifSl9dmFyIGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7cmV0dXJuIGooaS5zdHlsZSx7Ym9yZGVyOjAsbWFyZ2luOjAscGFkZGluZzowLHRvcDowLGxlZnQ6MH0pLHQuYXBwZW5kQ2hpbGQoaSksdD09PWRvY3VtZW50LmJvZHkmJihpLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsaih0LnN0eWxlLHttYXJnaW46MCxwYWRkaW5nOjB9KSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsbiwhMSksbigpLHtjYW52YXM6aSxvbkRlc3Ryb3k6ZnVuY3Rpb24oKXt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIixuKSx0LnJlbW92ZUNoaWxkKGkpfX19KGl8fGRvY3VtZW50LmJvZHksMCx1KSkpcmV0dXJuIG51bGw7YT1lLmNhbnZhcyxwPWUub25EZXN0cm95fW89ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHIpe3RyeXtyZXR1cm4gdC5nZXRDb250ZXh0KHIsZSl9Y2F0Y2godCl7cmV0dXJuIG51bGx9fXJldHVybiByKCJ3ZWJnbCIpfHxyKCJleHBlcmltZW50YWwtd2ViZ2wiKXx8cigid2ViZ2wtZXhwZXJpbWVudGFsIil9KGEsdCl9cmV0dXJuIG8/e2dsOm8sY2FudmFzOmEsY29udGFpbmVyOmksZXh0ZW5zaW9uczpsLG9wdGlvbmFsRXh0ZW5zaW9uczpjLHBpeGVsUmF0aW86dSxwcm9maWxlOmgsb25Eb25lOmYsb25EZXN0cm95OnB9OihwKCksZigid2ViZ2wgbm90IHN1cHBvcnRlZCwgdHJ5IHVwZ3JhZGluZyB5b3VyIGJyb3dzZXIgb3IgZ3JhcGhpY3MgZHJpdmVycyBodHRwOi8vZ2V0LndlYmdsLm9yZyIpLG51bGwpfWZ1bmN0aW9uIGEodCxlKXtmb3IodmFyIHI9QXJyYXkodCksbj0wO248dDsrK24pcltuXT1lKG4pO3JldHVybiByfWZ1bmN0aW9uIG8odCl7dmFyIGUscjtyZXR1cm4gZT0oNjU1MzU8dCk8PDQsZXw9cj0oMjU1PCh0Pj4+PWUpKTw8MywoZXw9cj0oMTU8KHQ+Pj49cikpPDwyKXwocj0oMzwodD4+Pj1yKSk8PDEpfHQ+Pj5yPj4xfWZ1bmN0aW9uIHMoKXtmdW5jdGlvbiB0KHQpe3Q6e2Zvcih2YXIgZT0xNjsyNjg0MzU0NTY+PWU7ZSo9MTYpaWYodDw9ZSl7dD1lO2JyZWFrIHR9dD0wfXJldHVybiAwPChlPXJbbyh0KT4+Ml0pLmxlbmd0aD9lLnBvcCgpOm5ldyBBcnJheUJ1ZmZlcih0KX1mdW5jdGlvbiBlKHQpe3Jbbyh0LmJ5dGVMZW5ndGgpPj4yXS5wdXNoKHQpfXZhciByPWEoOCxmdW5jdGlvbigpe3JldHVybltdfSk7cmV0dXJue2FsbG9jOnQsZnJlZTplLGFsbG9jVHlwZTpmdW5jdGlvbihlLHIpe3ZhciBuPW51bGw7c3dpdGNoKGUpe2Nhc2UgNTEyMDpuPW5ldyBJbnQ4QXJyYXkodChyKSwwLHIpO2JyZWFrO2Nhc2UgNTEyMTpuPW5ldyBVaW50OEFycmF5KHQociksMCxyKTticmVhaztjYXNlIDUxMjI6bj1uZXcgSW50MTZBcnJheSh0KDIqciksMCxyKTticmVhaztjYXNlIDUxMjM6bj1uZXcgVWludDE2QXJyYXkodCgyKnIpLDAscik7YnJlYWs7Y2FzZSA1MTI0Om49bmV3IEludDMyQXJyYXkodCg0KnIpLDAscik7YnJlYWs7Y2FzZSA1MTI1Om49bmV3IFVpbnQzMkFycmF5KHQoNCpyKSwwLHIpO2JyZWFrO2Nhc2UgNTEyNjpuPW5ldyBGbG9hdDMyQXJyYXkodCg0KnIpLDAscik7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gbnVsbH1yZXR1cm4gbi5sZW5ndGghPT1yP24uc3ViYXJyYXkoMCxyKTpufSxmcmVlVHlwZTpmdW5jdGlvbih0KXtlKHQuYnVmZmVyKX19fWZ1bmN0aW9uIGwodCl7cmV0dXJuISF0JiYib2JqZWN0Ij09dHlwZW9mIHQmJkFycmF5LmlzQXJyYXkodC5zaGFwZSkmJkFycmF5LmlzQXJyYXkodC5zdHJpZGUpJiYibnVtYmVyIj09dHlwZW9mIHQub2Zmc2V0JiZ0LnNoYXBlLmxlbmd0aD09PXQuc3RyaWRlLmxlbmd0aCYmKEFycmF5LmlzQXJyYXkodC5kYXRhKXx8WSh0LmRhdGEpKX1mdW5jdGlvbiBjKHQsZSxyLG4saSxhKXtmb3IodmFyIG89MDtvPGU7KytvKWZvcih2YXIgcz10W29dLGw9MDtsPHI7KytsKWZvcih2YXIgYz1zW2xdLHU9MDt1PG47Kyt1KWlbYSsrXT1jW3VdfWZ1bmN0aW9uIHUodCl7cmV0dXJuIDB8JFtPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCldfWZ1bmN0aW9uIGgodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoOysrcil0W3JdPWVbcl19ZnVuY3Rpb24gZih0LGUscixuLGksYSxvKXtmb3IodmFyIHM9MCxsPTA7bDxyOysrbClmb3IodmFyIGM9MDtjPG47KytjKXRbcysrXT1lW2kqbCthKmMrb119ZnVuY3Rpb24gcCh0LGUscixuKXtmdW5jdGlvbiBpKGUpe3RoaXMuaWQ9YysrLHRoaXMuYnVmZmVyPXQuY3JlYXRlQnVmZmVyKCksdGhpcy50eXBlPWUsdGhpcy51c2FnZT0zNTA0NCx0aGlzLmJ5dGVMZW5ndGg9MCx0aGlzLmRpbWVuc2lvbj0xLHRoaXMuZHR5cGU9NTEyMSx0aGlzLnBlcnNpc3RlbnREYXRhPW51bGwsci5wcm9maWxlJiYodGhpcy5zdGF0cz17c2l6ZTowfSl9ZnVuY3Rpb24gYShlLHIsbil7ZS5ieXRlTGVuZ3RoPXIuYnl0ZUxlbmd0aCx0LmJ1ZmZlckRhdGEoZS50eXBlLHIsbil9ZnVuY3Rpb24gbyh0LGUscixuLGksbyl7aWYodC51c2FnZT1yLEFycmF5LmlzQXJyYXkoZSkpe2lmKHQuZHR5cGU9bnx8NTEyNiwwPGUubGVuZ3RoKWlmKEFycmF5LmlzQXJyYXkoZVswXSkpe2k9dHQoZSk7Zm9yKHZhciBzPW49MTtzPGkubGVuZ3RoOysrcyluKj1pW3NdO3QuZGltZW5zaW9uPW4sYSh0LGU9UShlLGksdC5kdHlwZSksciksbz90LnBlcnNpc3RlbnREYXRhPWU6Ry5mcmVlVHlwZShlKX1lbHNlIm51bWJlciI9PXR5cGVvZiBlWzBdPyh0LmRpbWVuc2lvbj1pLGgoaT1HLmFsbG9jVHlwZSh0LmR0eXBlLGUubGVuZ3RoKSxlKSxhKHQsaSxyKSxvP3QucGVyc2lzdGVudERhdGE9aTpHLmZyZWVUeXBlKGkpKTpZKGVbMF0pJiYodC5kaW1lbnNpb249ZVswXS5sZW5ndGgsdC5kdHlwZT1ufHx1KGVbMF0pfHw1MTI2LGEodCxlPVEoZSxbZS5sZW5ndGgsZVswXS5sZW5ndGhdLHQuZHR5cGUpLHIpLG8/dC5wZXJzaXN0ZW50RGF0YT1lOkcuZnJlZVR5cGUoZSkpfWVsc2UgaWYoWShlKSl0LmR0eXBlPW58fHUoZSksdC5kaW1lbnNpb249aSxhKHQsZSxyKSxvJiYodC5wZXJzaXN0ZW50RGF0YT1uZXcgVWludDhBcnJheShuZXcgVWludDhBcnJheShlLmJ1ZmZlcikpKTtlbHNlIGlmKGwoZSkpe2k9ZS5zaGFwZTt2YXIgYz1lLnN0cmlkZSxwPShzPWUub2Zmc2V0LDApLGQ9MCxnPTAsbT0wOzE9PT1pLmxlbmd0aD8ocD1pWzBdLGQ9MSxnPWNbMF0sbT0wKToyPT09aS5sZW5ndGgmJihwPWlbMF0sZD1pWzFdLGc9Y1swXSxtPWNbMV0pLHQuZHR5cGU9bnx8dShlLmRhdGEpfHw1MTI2LHQuZGltZW5zaW9uPWQsZihpPUcuYWxsb2NUeXBlKHQuZHR5cGUscCpkKSxlLmRhdGEscCxkLGcsbSxzKSxhKHQsaSxyKSxvP3QucGVyc2lzdGVudERhdGE9aTpHLmZyZWVUeXBlKGkpfX1mdW5jdGlvbiBzKHIpe2UuYnVmZmVyQ291bnQtLTtmb3IodmFyIGk9MDtpPG4uc3RhdGUubGVuZ3RoOysraSl7dmFyIGE9bi5zdGF0ZVtpXTthLmJ1ZmZlcj09PXImJih0LmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpKSxhLmJ1ZmZlcj1udWxsKX10LmRlbGV0ZUJ1ZmZlcihyLmJ1ZmZlciksci5idWZmZXI9bnVsbCxkZWxldGUgcFtyLmlkXX12YXIgYz0wLHA9e307aS5wcm90b3R5cGUuYmluZD1mdW5jdGlvbigpe3QuYmluZEJ1ZmZlcih0aGlzLnR5cGUsdGhpcy5idWZmZXIpfSxpLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7cyh0aGlzKX07dmFyIGQ9W107cmV0dXJuIHIucHJvZmlsZSYmKGUuZ2V0VG90YWxCdWZmZXJTaXplPWZ1bmN0aW9uKCl7dmFyIHQ9MDtyZXR1cm4gT2JqZWN0LmtleXMocCkuZm9yRWFjaChmdW5jdGlvbihlKXt0Kz1wW2VdLnN0YXRzLnNpemV9KSx0fSkse2NyZWF0ZTpmdW5jdGlvbihuLGEsYyxkKXtmdW5jdGlvbiBnKGUpe3ZhciBuPTM1MDQ0LGk9bnVsbCxhPTAscz0wLGM9MTtyZXR1cm4gQXJyYXkuaXNBcnJheShlKXx8WShlKXx8bChlKT9pPWU6Im51bWJlciI9PXR5cGVvZiBlP2E9MHxlOmUmJigiZGF0YSJpbiBlJiYoaT1lLmRhdGEpLCJ1c2FnZSJpbiBlJiYobj1LW2UudXNhZ2VdKSwidHlwZSJpbiBlJiYocz1KW2UudHlwZV0pLCJkaW1lbnNpb24iaW4gZSYmKGM9MHxlLmRpbWVuc2lvbiksImxlbmd0aCJpbiBlJiYoYT0wfGUubGVuZ3RoKSksbS5iaW5kKCksaT9vKG0saSxuLHMsYyxkKTooYSYmdC5idWZmZXJEYXRhKG0udHlwZSxhLG4pLG0uZHR5cGU9c3x8NTEyMSxtLnVzYWdlPW4sbS5kaW1lbnNpb249YyxtLmJ5dGVMZW5ndGg9YSksci5wcm9maWxlJiYobS5zdGF0cy5zaXplPW0uYnl0ZUxlbmd0aCpldFttLmR0eXBlXSksZ31lLmJ1ZmZlckNvdW50Kys7dmFyIG09bmV3IGkoYSk7cmV0dXJuIHBbbS5pZF09bSxjfHxnKG4pLGcuX3JlZ2xUeXBlPSJidWZmZXIiLGcuX2J1ZmZlcj1tLGcuc3ViZGF0YT1mdW5jdGlvbihlLHIpe3ZhciBuLGk9MHwocnx8MCk7aWYobS5iaW5kKCksWShlKSl0LmJ1ZmZlclN1YkRhdGEobS50eXBlLGksZSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KGUpKXtpZigwPGUubGVuZ3RoKWlmKCJudW1iZXIiPT10eXBlb2YgZVswXSl7dmFyIGE9Ry5hbGxvY1R5cGUobS5kdHlwZSxlLmxlbmd0aCk7aChhLGUpLHQuYnVmZmVyU3ViRGF0YShtLnR5cGUsaSxhKSxHLmZyZWVUeXBlKGEpfWVsc2UoQXJyYXkuaXNBcnJheShlWzBdKXx8WShlWzBdKSkmJihuPXR0KGUpLGE9UShlLG4sbS5kdHlwZSksdC5idWZmZXJTdWJEYXRhKG0udHlwZSxpLGEpLEcuZnJlZVR5cGUoYSkpfWVsc2UgaWYobChlKSl7bj1lLnNoYXBlO3ZhciBvPWUuc3RyaWRlLHM9YT0wLGM9MCxwPTA7MT09PW4ubGVuZ3RoPyhhPW5bMF0scz0xLGM9b1swXSxwPTApOjI9PT1uLmxlbmd0aCYmKGE9blswXSxzPW5bMV0sYz1vWzBdLHA9b1sxXSksbj1BcnJheS5pc0FycmF5KGUuZGF0YSk/bS5kdHlwZTp1KGUuZGF0YSksZihuPUcuYWxsb2NUeXBlKG4sYSpzKSxlLmRhdGEsYSxzLGMscCxlLm9mZnNldCksdC5idWZmZXJTdWJEYXRhKG0udHlwZSxpLG4pLEcuZnJlZVR5cGUobil9cmV0dXJuIGd9LHIucHJvZmlsZSYmKGcuc3RhdHM9bS5zdGF0cyksZy5kZXN0cm95PWZ1bmN0aW9uKCl7cyhtKX0sZ30sY3JlYXRlU3RyZWFtOmZ1bmN0aW9uKHQsZSl7dmFyIHI9ZC5wb3AoKTtyZXR1cm4gcnx8KHI9bmV3IGkodCkpLHIuYmluZCgpLG8ocixlLDM1MDQwLDAsMSwhMSkscn0sZGVzdHJveVN0cmVhbTpmdW5jdGlvbih0KXtkLnB1c2godCl9LGNsZWFyOmZ1bmN0aW9uKCl7WChwKS5mb3JFYWNoKHMpLGQuZm9yRWFjaChzKX0sZ2V0QnVmZmVyOmZ1bmN0aW9uKHQpe3JldHVybiB0JiZ0Ll9idWZmZXIgaW5zdGFuY2VvZiBpP3QuX2J1ZmZlcjpudWxsfSxyZXN0b3JlOmZ1bmN0aW9uKCl7WChwKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UuYnVmZmVyPXQuY3JlYXRlQnVmZmVyKCksdC5iaW5kQnVmZmVyKGUudHlwZSxlLmJ1ZmZlciksdC5idWZmZXJEYXRhKGUudHlwZSxlLnBlcnNpc3RlbnREYXRhfHxlLmJ5dGVMZW5ndGgsZS51c2FnZSl9KX0sX2luaXRCdWZmZXI6b319ZnVuY3Rpb24gZCh0LGUscixuKXtmdW5jdGlvbiBpKHQpe3RoaXMuaWQ9YysrLHNbdGhpcy5pZF09dGhpcyx0aGlzLmJ1ZmZlcj10LHRoaXMucHJpbVR5cGU9NCx0aGlzLnR5cGU9dGhpcy52ZXJ0Q291bnQ9MH1mdW5jdGlvbiBhKG4saSxhLG8scyxjLHUpe2lmKG4uYnVmZmVyLmJpbmQoKSxpKXt2YXIgaD11O3V8fFkoaSkmJighbChpKXx8WShpLmRhdGEpKXx8KGg9ZS5vZXNfZWxlbWVudF9pbmRleF91aW50PzUxMjU6NTEyMyksci5faW5pdEJ1ZmZlcihuLmJ1ZmZlcixpLGEsaCwzKX1lbHNlIHQuYnVmZmVyRGF0YSgzNDk2MyxjLGEpLG4uYnVmZmVyLmR0eXBlPWh8fDUxMjEsbi5idWZmZXIudXNhZ2U9YSxuLmJ1ZmZlci5kaW1lbnNpb249MyxuLmJ1ZmZlci5ieXRlTGVuZ3RoPWM7aWYoaD11LCF1KXtzd2l0Y2gobi5idWZmZXIuZHR5cGUpe2Nhc2UgNTEyMTpjYXNlIDUxMjA6aD01MTIxO2JyZWFrO2Nhc2UgNTEyMzpjYXNlIDUxMjI6aD01MTIzO2JyZWFrO2Nhc2UgNTEyNTpjYXNlIDUxMjQ6aD01MTI1fW4uYnVmZmVyLmR0eXBlPWh9bi50eXBlPWgsMD4oaT1zKSYmKGk9bi5idWZmZXIuYnl0ZUxlbmd0aCw1MTIzPT09aD9pPj49MTo1MTI1PT09aCYmKGk+Pj0yKSksbi52ZXJ0Q291bnQ9aSxpPW8sMD5vJiYoaT00LDE9PT0obz1uLmJ1ZmZlci5kaW1lbnNpb24pJiYoaT0wKSwyPT09byYmKGk9MSksMz09PW8mJihpPTQpKSxuLnByaW1UeXBlPWl9ZnVuY3Rpb24gbyh0KXtuLmVsZW1lbnRzQ291bnQtLSxkZWxldGUgc1t0LmlkXSx0LmJ1ZmZlci5kZXN0cm95KCksdC5idWZmZXI9bnVsbH12YXIgcz17fSxjPTAsdT17dWludDg6NTEyMSx1aW50MTY6NTEyM307ZS5vZXNfZWxlbWVudF9pbmRleF91aW50JiYodS51aW50MzI9NTEyNSksaS5wcm90b3R5cGUuYmluZD1mdW5jdGlvbigpe3RoaXMuYnVmZmVyLmJpbmQoKX07dmFyIGg9W107cmV0dXJue2NyZWF0ZTpmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHModCl7aWYodClpZigibnVtYmVyIj09dHlwZW9mIHQpYyh0KSxoLnByaW1UeXBlPTQsaC52ZXJ0Q291bnQ9MHx0LGgudHlwZT01MTIxO2Vsc2V7dmFyIGU9bnVsbCxyPTM1MDQ0LG49LTEsaT0tMSxvPTAsZj0wO0FycmF5LmlzQXJyYXkodCl8fFkodCl8fGwodCk/ZT10OigiZGF0YSJpbiB0JiYoZT10LmRhdGEpLCJ1c2FnZSJpbiB0JiYocj1LW3QudXNhZ2VdKSwicHJpbWl0aXZlImluIHQmJihuPXJ0W3QucHJpbWl0aXZlXSksImNvdW50ImluIHQmJihpPTB8dC5jb3VudCksInR5cGUiaW4gdCYmKGY9dVt0LnR5cGVdKSwibGVuZ3RoImluIHQ/bz0wfHQubGVuZ3RoOihvPWksNTEyMz09PWZ8fDUxMjI9PT1mP28qPTI6NTEyNSE9PWYmJjUxMjQhPT1mfHwobyo9NCkpKSxhKGgsZSxyLG4saSxvLGYpfWVsc2UgYygpLGgucHJpbVR5cGU9NCxoLnZlcnRDb3VudD0wLGgudHlwZT01MTIxO3JldHVybiBzfXZhciBjPXIuY3JlYXRlKG51bGwsMzQ5NjMsITApLGg9bmV3IGkoYy5fYnVmZmVyKTtyZXR1cm4gbi5lbGVtZW50c0NvdW50Kysscyh0KSxzLl9yZWdsVHlwZT0iZWxlbWVudHMiLHMuX2VsZW1lbnRzPWgscy5zdWJkYXRhPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGMuc3ViZGF0YSh0LGUpLHN9LHMuZGVzdHJveT1mdW5jdGlvbigpe28oaCl9LHN9LGNyZWF0ZVN0cmVhbTpmdW5jdGlvbih0KXt2YXIgZT1oLnBvcCgpO3JldHVybiBlfHwoZT1uZXcgaShyLmNyZWF0ZShudWxsLDM0OTYzLCEwLCExKS5fYnVmZmVyKSksYShlLHQsMzUwNDAsLTEsLTEsMCwwKSxlfSxkZXN0cm95U3RyZWFtOmZ1bmN0aW9uKHQpe2gucHVzaCh0KX0sZ2V0RWxlbWVudHM6ZnVuY3Rpb24odCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQuX2VsZW1lbnRzIGluc3RhbmNlb2YgaT90Ll9lbGVtZW50czpudWxsfSxjbGVhcjpmdW5jdGlvbigpe1gocykuZm9yRWFjaChvKX19fWZ1bmN0aW9uIGcodCl7Zm9yKHZhciBlPUcuYWxsb2NUeXBlKDUxMjMsdC5sZW5ndGgpLHI9MDtyPHQubGVuZ3RoOysrcilpZihpc05hTih0W3JdKSllW3JdPTY1NTM1O2Vsc2UgaWYoMS8wPT09dFtyXSllW3JdPTMxNzQ0O2Vsc2UgaWYoLTEvMD09PXRbcl0pZVtyXT02NDUxMjtlbHNle250WzBdPXRbcl07dmFyIG49KGE9aXRbMF0pPj4+MzE8PDE1LGk9KGE8PDE+Pj4yNCktMTI3LGE9YT4+MTMmMTAyMztlW3JdPS0yND5pP246LTE0Pmk/bisoYSsxMDI0Pj4tMTQtaSk6MTU8aT9uKzMxNzQ0Om4rKGkrMTU8PDEwKSthfXJldHVybiBlfWZ1bmN0aW9uIG0odCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCl8fFkodCl9ZnVuY3Rpb24gdih0KXtyZXR1cm4iW29iamVjdCAiK3QrIl0ifWZ1bmN0aW9uIHkodCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCkmJigwPT09dC5sZW5ndGh8fCJudW1iZXIiPT10eXBlb2YgdFswXSl9ZnVuY3Rpb24geCh0KXtyZXR1cm4hKCFBcnJheS5pc0FycmF5KHQpfHwwPT09dC5sZW5ndGh8fCFtKHRbMF0pKX1mdW5jdGlvbiBiKHQpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9ZnVuY3Rpb24gXyh0KXtpZighdClyZXR1cm4hMTt2YXIgZT1iKHQpO3JldHVybiAwPD1wdC5pbmRleE9mKGUpfHwoeSh0KXx8eCh0KXx8bCh0KSl9ZnVuY3Rpb24gdyh0LGUpezM2MTkzPT09dC50eXBlPyh0LmRhdGE9ZyhlKSxHLmZyZWVUeXBlKGUpKTp0LmRhdGE9ZX1mdW5jdGlvbiBrKHQsZSxyLG4saSxhKXtpZih0PSJ1bmRlZmluZWQiIT10eXBlb2YgZ3RbdF0/Z3RbdF06c3RbdF0qZHRbZV0sYSYmKHQqPTYpLGkpe2ZvcihuPTA7MTw9cjspbis9dCpyKnIsci89MjtyZXR1cm4gbn1yZXR1cm4gdCpyKm59ZnVuY3Rpb24gTSh0LGUscixuLGksYSxvKXtmdW5jdGlvbiBzKCl7dGhpcy5mb3JtYXQ9dGhpcy5pbnRlcm5hbGZvcm1hdD02NDA4LHRoaXMudHlwZT01MTIxLHRoaXMuZmxpcFk9dGhpcy5wcmVtdWx0aXBseUFscGhhPXRoaXMuY29tcHJlc3NlZD0hMSx0aGlzLnVucGFja0FsaWdubWVudD0xLHRoaXMuY29sb3JTcGFjZT0zNzQ0NCx0aGlzLmNoYW5uZWxzPXRoaXMuaGVpZ2h0PXRoaXMud2lkdGg9MH1mdW5jdGlvbiBjKHQsZSl7dC5pbnRlcm5hbGZvcm1hdD1lLmludGVybmFsZm9ybWF0LHQuZm9ybWF0PWUuZm9ybWF0LHQudHlwZT1lLnR5cGUsdC5jb21wcmVzc2VkPWUuY29tcHJlc3NlZCx0LnByZW11bHRpcGx5QWxwaGE9ZS5wcmVtdWx0aXBseUFscGhhLHQuZmxpcFk9ZS5mbGlwWSx0LnVucGFja0FsaWdubWVudD1lLnVucGFja0FsaWdubWVudCx0LmNvbG9yU3BhY2U9ZS5jb2xvclNwYWNlLHQud2lkdGg9ZS53aWR0aCx0LmhlaWdodD1lLmhlaWdodCx0LmNoYW5uZWxzPWUuY2hhbm5lbHN9ZnVuY3Rpb24gdSh0LGUpe2lmKCJvYmplY3QiPT10eXBlb2YgZSYmZSl7InByZW11bHRpcGx5QWxwaGEiaW4gZSYmKHQucHJlbXVsdGlwbHlBbHBoYT1lLnByZW11bHRpcGx5QWxwaGEpLCJmbGlwWSJpbiBlJiYodC5mbGlwWT1lLmZsaXBZKSwiYWxpZ25tZW50ImluIGUmJih0LnVucGFja0FsaWdubWVudD1lLmFsaWdubWVudCksImNvbG9yU3BhY2UiaW4gZSYmKHQuY29sb3JTcGFjZT1xW2UuY29sb3JTcGFjZV0pLCJ0eXBlImluIGUmJih0LnR5cGU9SFtlLnR5cGVdKTt2YXIgcj10LndpZHRoLG49dC5oZWlnaHQsaT10LmNoYW5uZWxzLGE9ITE7InNoYXBlImluIGU/KHI9ZS5zaGFwZVswXSxuPWUuc2hhcGVbMV0sMz09PWUuc2hhcGUubGVuZ3RoJiYoaT1lLnNoYXBlWzJdLGE9ITApKTooInJhZGl1cyJpbiBlJiYocj1uPWUucmFkaXVzKSwid2lkdGgiaW4gZSYmKHI9ZS53aWR0aCksImhlaWdodCJpbiBlJiYobj1lLmhlaWdodCksImNoYW5uZWxzImluIGUmJihpPWUuY2hhbm5lbHMsYT0hMCkpLHQud2lkdGg9MHxyLHQuaGVpZ2h0PTB8bix0LmNoYW5uZWxzPTB8aSxyPSExLCJmb3JtYXQiaW4gZSYmKHI9ZS5mb3JtYXQsbj10LmludGVybmFsZm9ybWF0PVdbcl0sdC5mb3JtYXQ9cHRbbl0sciBpbiBIJiYhKCJ0eXBlImluIGUpJiYodC50eXBlPUhbcl0pLHIgaW4gSiYmKHQuY29tcHJlc3NlZD0hMCkscj0hMCksIWEmJnI/dC5jaGFubmVscz1zdFt0LmZvcm1hdF06YSYmIXImJnQuY2hhbm5lbHMhPT1vdFt0LmZvcm1hdF0mJih0LmZvcm1hdD10LmludGVybmFsZm9ybWF0PW90W3QuY2hhbm5lbHNdKX19ZnVuY3Rpb24gaChlKXt0LnBpeGVsU3RvcmVpKDM3NDQwLGUuZmxpcFkpLHQucGl4ZWxTdG9yZWkoMzc0NDEsZS5wcmVtdWx0aXBseUFscGhhKSx0LnBpeGVsU3RvcmVpKDM3NDQzLGUuY29sb3JTcGFjZSksdC5waXhlbFN0b3JlaSgzMzE3LGUudW5wYWNrQWxpZ25tZW50KX1mdW5jdGlvbiBmKCl7cy5jYWxsKHRoaXMpLHRoaXMueU9mZnNldD10aGlzLnhPZmZzZXQ9MCx0aGlzLmRhdGE9bnVsbCx0aGlzLm5lZWRzRnJlZT0hMSx0aGlzLmVsZW1lbnQ9bnVsbCx0aGlzLm5lZWRzQ29weT0hMX1mdW5jdGlvbiBwKHQsZSl7dmFyIHI9bnVsbDtpZihfKGUpP3I9ZTplJiYodSh0LGUpLCJ4ImluIGUmJih0LnhPZmZzZXQ9MHxlLngpLCJ5ImluIGUmJih0LnlPZmZzZXQ9MHxlLnkpLF8oZS5kYXRhKSYmKHI9ZS5kYXRhKSksZS5jb3B5KXt2YXIgbj1pLnZpZXdwb3J0V2lkdGgsYT1pLnZpZXdwb3J0SGVpZ2h0O3Qud2lkdGg9dC53aWR0aHx8bi10LnhPZmZzZXQsdC5oZWlnaHQ9dC5oZWlnaHR8fGEtdC55T2Zmc2V0LHQubmVlZHNDb3B5PSEwfWVsc2UgaWYocil7aWYoWShyKSl0LmNoYW5uZWxzPXQuY2hhbm5lbHN8fDQsdC5kYXRhPXIsInR5cGUiaW4gZXx8NTEyMSE9PXQudHlwZXx8KHQudHlwZT0wfCRbT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHIpXSk7ZWxzZSBpZih5KHIpKXtzd2l0Y2godC5jaGFubmVscz10LmNoYW5uZWxzfHw0LGE9KG49cikubGVuZ3RoLHQudHlwZSl7Y2FzZSA1MTIxOmNhc2UgNTEyMzpjYXNlIDUxMjU6Y2FzZSA1MTI2OihhPUcuYWxsb2NUeXBlKHQudHlwZSxhKSkuc2V0KG4pLHQuZGF0YT1hO2JyZWFrO2Nhc2UgMzYxOTM6dC5kYXRhPWcobil9dC5hbGlnbm1lbnQ9MSx0Lm5lZWRzRnJlZT0hMH1lbHNlIGlmKGwocikpe249ci5kYXRhLEFycmF5LmlzQXJyYXkobil8fDUxMjEhPT10LnR5cGV8fCh0LnR5cGU9MHwkW09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChuKV0pO2E9ci5zaGFwZTt2YXIgbyxzLGMsaCxmPXIuc3RyaWRlOzM9PT1hLmxlbmd0aD8oYz1hWzJdLGg9ZlsyXSk6aD1jPTEsbz1hWzBdLHM9YVsxXSxhPWZbMF0sZj1mWzFdLHQuYWxpZ25tZW50PTEsdC53aWR0aD1vLHQuaGVpZ2h0PXMsdC5jaGFubmVscz1jLHQuZm9ybWF0PXQuaW50ZXJuYWxmb3JtYXQ9b3RbY10sdC5uZWVkc0ZyZWU9ITAsbz1oLHI9ci5vZmZzZXQsYz10LndpZHRoLGg9dC5oZWlnaHQscz10LmNoYW5uZWxzO2Zvcih2YXIgcD1HLmFsbG9jVHlwZSgzNjE5Mz09PXQudHlwZT81MTI2OnQudHlwZSxjKmgqcyksZD0wLHY9MDt2PGg7Kyt2KWZvcih2YXIgaz0wO2s8YzsrK2spZm9yKHZhciBNPTA7TTxzOysrTSlwW2QrK109blthKmsrZip2K28qTStyXTt3KHQscCl9ZWxzZSBpZihiKHIpPT09bHR8fGIocik9PT1jdCliKHIpPT09bHQ/dC5lbGVtZW50PXI6dC5lbGVtZW50PXIuY2FudmFzLHQud2lkdGg9dC5lbGVtZW50LndpZHRoLHQuaGVpZ2h0PXQuZWxlbWVudC5oZWlnaHQsdC5jaGFubmVscz00O2Vsc2UgaWYoYihyKT09PXV0KXQuZWxlbWVudD1yLHQud2lkdGg9ci53aWR0aCx0LmhlaWdodD1yLmhlaWdodCx0LmNoYW5uZWxzPTQ7ZWxzZSBpZihiKHIpPT09aHQpdC5lbGVtZW50PXIsdC53aWR0aD1yLm5hdHVyYWxXaWR0aCx0LmhlaWdodD1yLm5hdHVyYWxIZWlnaHQsdC5jaGFubmVscz00O2Vsc2UgaWYoYihyKT09PWZ0KXQuZWxlbWVudD1yLHQud2lkdGg9ci52aWRlb1dpZHRoLHQuaGVpZ2h0PXIudmlkZW9IZWlnaHQsdC5jaGFubmVscz00O2Vsc2UgaWYoeChyKSl7Zm9yKG49dC53aWR0aHx8clswXS5sZW5ndGgsYT10LmhlaWdodHx8ci5sZW5ndGgsZj10LmNoYW5uZWxzLGY9bShyWzBdWzBdKT9mfHxyWzBdWzBdLmxlbmd0aDpmfHwxLG89Wi5zaGFwZShyKSxjPTEsaD0wO2g8by5sZW5ndGg7KytoKWMqPW9baF07Yz1HLmFsbG9jVHlwZSgzNjE5Mz09PXQudHlwZT81MTI2OnQudHlwZSxjKSxaLmZsYXR0ZW4ocixvLCIiLGMpLHcodCxjKSx0LmFsaWdubWVudD0xLHQud2lkdGg9bix0LmhlaWdodD1hLHQuY2hhbm5lbHM9Zix0LmZvcm1hdD10LmludGVybmFsZm9ybWF0PW90W2ZdLHQubmVlZHNGcmVlPSEwfX1lbHNlIHQud2lkdGg9dC53aWR0aHx8MSx0LmhlaWdodD10LmhlaWdodHx8MSx0LmNoYW5uZWxzPXQuY2hhbm5lbHN8fDR9ZnVuY3Rpb24gZChlLHIsaSxhLG8pe3ZhciBzPWUuZWxlbWVudCxsPWUuZGF0YSxjPWUuaW50ZXJuYWxmb3JtYXQsdT1lLmZvcm1hdCxmPWUudHlwZSxwPWUud2lkdGgsZD1lLmhlaWdodDtoKGUpLHM/dC50ZXhTdWJJbWFnZTJEKHIsbyxpLGEsdSxmLHMpOmUuY29tcHJlc3NlZD90LmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKHIsbyxpLGEsYyxwLGQsbCk6ZS5uZWVkc0NvcHk/KG4oKSx0LmNvcHlUZXhTdWJJbWFnZTJEKHIsbyxpLGEsZS54T2Zmc2V0LGUueU9mZnNldCxwLGQpKTp0LnRleFN1YkltYWdlMkQocixvLGksYSxwLGQsdSxmLGwpfWZ1bmN0aW9uIHYoKXtyZXR1cm4gZHQucG9wKCl8fG5ldyBmfWZ1bmN0aW9uIE0odCl7dC5uZWVkc0ZyZWUmJkcuZnJlZVR5cGUodC5kYXRhKSxmLmNhbGwodCksZHQucHVzaCh0KX1mdW5jdGlvbiBBKCl7cy5jYWxsKHRoaXMpLHRoaXMuZ2VuTWlwbWFwcz0hMSx0aGlzLm1pcG1hcEhpbnQ9NDM1Mix0aGlzLm1pcG1hc2s9MCx0aGlzLmltYWdlcz1BcnJheSgxNil9ZnVuY3Rpb24gVCh0LGUscil7dmFyIG49dC5pbWFnZXNbMF09digpO3QubWlwbWFzaz0xLG4ud2lkdGg9dC53aWR0aD1lLG4uaGVpZ2h0PXQuaGVpZ2h0PXIsbi5jaGFubmVscz10LmNoYW5uZWxzPTR9ZnVuY3Rpb24gUyh0LGUpe3ZhciByPW51bGw7aWYoXyhlKSljKHI9dC5pbWFnZXNbMF09digpLHQpLHAocixlKSx0Lm1pcG1hc2s9MTtlbHNlIGlmKHUodCxlKSxBcnJheS5pc0FycmF5KGUubWlwbWFwKSlmb3IodmFyIG49ZS5taXBtYXAsaT0wO2k8bi5sZW5ndGg7KytpKWMocj10LmltYWdlc1tpXT12KCksdCksci53aWR0aD4+PWksci5oZWlnaHQ+Pj1pLHAocixuW2ldKSx0Lm1pcG1hc2t8PTE8PGk7ZWxzZSBjKHI9dC5pbWFnZXNbMF09digpLHQpLHAocixlKSx0Lm1pcG1hc2s9MTtjKHQsdC5pbWFnZXNbMF0pfWZ1bmN0aW9uIEUoZSxyKXtmb3IodmFyIGk9ZS5pbWFnZXMsYT0wO2E8aS5sZW5ndGgmJmlbYV07KythKXt2YXIgbz1pW2FdLHM9cixsPWEsYz1vLmVsZW1lbnQsdT1vLmRhdGEsZj1vLmludGVybmFsZm9ybWF0LHA9by5mb3JtYXQsZD1vLnR5cGUsZz1vLndpZHRoLG09by5oZWlnaHQsdj1vLmNoYW5uZWxzO2gobyksYz90LnRleEltYWdlMkQocyxsLHAscCxkLGMpOm8uY29tcHJlc3NlZD90LmNvbXByZXNzZWRUZXhJbWFnZTJEKHMsbCxmLGcsbSwwLHUpOm8ubmVlZHNDb3B5PyhuKCksdC5jb3B5VGV4SW1hZ2UyRChzLGwscCxvLnhPZmZzZXQsby55T2Zmc2V0LGcsbSwwKSk6KChvPSF1KSYmKHU9Ry56ZXJvLmFsbG9jVHlwZShkLGcqbSp2KSksdC50ZXhJbWFnZTJEKHMsbCxwLGcsbSwwLHAsZCx1KSxvJiZ1JiZHLnplcm8uZnJlZVR5cGUodSkpfX1mdW5jdGlvbiBDKCl7dmFyIHQ9Z3QucG9wKCl8fG5ldyBBO3MuY2FsbCh0KTtmb3IodmFyIGU9dC5taXBtYXNrPTA7MTY+ZTsrK2UpdC5pbWFnZXNbZV09bnVsbDtyZXR1cm4gdH1mdW5jdGlvbiBMKHQpe2Zvcih2YXIgZT10LmltYWdlcyxyPTA7cjxlLmxlbmd0aDsrK3IpZVtyXSYmTShlW3JdKSxlW3JdPW51bGw7Z3QucHVzaCh0KX1mdW5jdGlvbiB6KCl7dGhpcy5tYWdGaWx0ZXI9dGhpcy5taW5GaWx0ZXI9OTcyOCx0aGlzLndyYXBUPXRoaXMud3JhcFM9MzMwNzEsdGhpcy5hbmlzb3Ryb3BpYz0xLHRoaXMuZ2VuTWlwbWFwcz0hMSx0aGlzLm1pcG1hcEhpbnQ9NDM1Mn1mdW5jdGlvbiBQKHQsZSl7Im1pbiJpbiBlJiYodC5taW5GaWx0ZXI9VVtlLm1pbl0sMDw9YXQuaW5kZXhPZih0Lm1pbkZpbHRlcikmJiEoImZhY2VzImluIGUpJiYodC5nZW5NaXBtYXBzPSEwKSksIm1hZyJpbiBlJiYodC5tYWdGaWx0ZXI9VltlLm1hZ10pO3ZhciByPXQud3JhcFMsbj10LndyYXBUO2lmKCJ3cmFwImluIGUpe3ZhciBpPWUud3JhcDsic3RyaW5nIj09dHlwZW9mIGk/cj1uPU5baV06QXJyYXkuaXNBcnJheShpKSYmKHI9TltpWzBdXSxuPU5baVsxXV0pfWVsc2Uid3JhcFMiaW4gZSYmKHI9TltlLndyYXBTXSksIndyYXBUImluIGUmJihuPU5bZS53cmFwVF0pO2lmKHQud3JhcFM9cix0LndyYXBUPW4sImFuaXNvdHJvcGljImluIGUmJih0LmFuaXNvdHJvcGljPWUuYW5pc290cm9waWMpLCJtaXBtYXAiaW4gZSl7c3dpdGNoKHI9ITEsdHlwZW9mIGUubWlwbWFwKXtjYXNlInN0cmluZyI6dC5taXBtYXBIaW50PUZbZS5taXBtYXBdLHI9dC5nZW5NaXBtYXBzPSEwO2JyZWFrO2Nhc2UiYm9vbGVhbiI6cj10Lmdlbk1pcG1hcHM9ZS5taXBtYXA7YnJlYWs7Y2FzZSJvYmplY3QiOnQuZ2VuTWlwbWFwcz0hMSxyPSEwfSFyfHwibWluImluIGV8fCh0Lm1pbkZpbHRlcj05OTg0KX19ZnVuY3Rpb24gSShyLG4pe3QudGV4UGFyYW1ldGVyaShuLDEwMjQxLHIubWluRmlsdGVyKSx0LnRleFBhcmFtZXRlcmkobiwxMDI0MCxyLm1hZ0ZpbHRlciksdC50ZXhQYXJhbWV0ZXJpKG4sMTAyNDIsci53cmFwUyksdC50ZXhQYXJhbWV0ZXJpKG4sMTAyNDMsci53cmFwVCksZS5leHRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMmJnQudGV4UGFyYW1ldGVyaShuLDM0MDQ2LHIuYW5pc290cm9waWMpLHIuZ2VuTWlwbWFwcyYmKHQuaGludCgzMzE3MCxyLm1pcG1hcEhpbnQpLHQuZ2VuZXJhdGVNaXBtYXAobikpfWZ1bmN0aW9uIE8oZSl7cy5jYWxsKHRoaXMpLHRoaXMubWlwbWFzaz0wLHRoaXMuaW50ZXJuYWxmb3JtYXQ9NjQwOCx0aGlzLmlkPW10KyssdGhpcy5yZWZDb3VudD0xLHRoaXMudGFyZ2V0PWUsdGhpcy50ZXh0dXJlPXQuY3JlYXRlVGV4dHVyZSgpLHRoaXMudW5pdD0tMSx0aGlzLmJpbmRDb3VudD0wLHRoaXMudGV4SW5mbz1uZXcgeixvLnByb2ZpbGUmJih0aGlzLnN0YXRzPXtzaXplOjB9KX1mdW5jdGlvbiBEKGUpe3QuYWN0aXZlVGV4dHVyZSgzMzk4NCksdC5iaW5kVGV4dHVyZShlLnRhcmdldCxlLnRleHR1cmUpfWZ1bmN0aW9uIFIoKXt2YXIgZT14dFswXTtlP3QuYmluZFRleHR1cmUoZS50YXJnZXQsZS50ZXh0dXJlKTp0LmJpbmRUZXh0dXJlKDM1NTMsbnVsbCl9ZnVuY3Rpb24gQihlKXt2YXIgcj1lLnRleHR1cmUsbj1lLnVuaXQsaT1lLnRhcmdldDswPD1uJiYodC5hY3RpdmVUZXh0dXJlKDMzOTg0K24pLHQuYmluZFRleHR1cmUoaSxudWxsKSx4dFtuXT1udWxsKSx0LmRlbGV0ZVRleHR1cmUociksZS50ZXh0dXJlPW51bGwsZS5wYXJhbXM9bnVsbCxlLnBpeGVscz1udWxsLGUucmVmQ291bnQ9MCxkZWxldGUgdnRbZS5pZF0sYS50ZXh0dXJlQ291bnQtLX12YXIgRj17ImRvbid0IGNhcmUiOjQzNTIsImRvbnQgY2FyZSI6NDM1MixuaWNlOjQzNTQsZmFzdDo0MzUzfSxOPXtyZXBlYXQ6MTA0OTcsY2xhbXA6MzMwNzEsbWlycm9yOjMzNjQ4fSxWPXtuZWFyZXN0Ojk3MjgsbGluZWFyOjk3Mjl9LFU9aih7bWlwbWFwOjk5ODcsIm5lYXJlc3QgbWlwbWFwIG5lYXJlc3QiOjk5ODQsImxpbmVhciBtaXBtYXAgbmVhcmVzdCI6OTk4NSwibmVhcmVzdCBtaXBtYXAgbGluZWFyIjo5OTg2LCJsaW5lYXIgbWlwbWFwIGxpbmVhciI6OTk4N30sVikscT17bm9uZTowLGJyb3dzZXI6Mzc0NDR9LEg9e3VpbnQ4OjUxMjEscmdiYTQ6MzI4MTkscmdiNTY1OjMzNjM1LCJyZ2I1IGExIjozMjgyMH0sVz17YWxwaGE6NjQwNixsdW1pbmFuY2U6NjQwOSwibHVtaW5hbmNlIGFscGhhIjo2NDEwLHJnYjo2NDA3LHJnYmE6NjQwOCxyZ2JhNDozMjg1NCwicmdiNSBhMSI6MzI4NTUscmdiNTY1OjM2MTk0fSxKPXt9O2UuZXh0X3NyZ2ImJihXLnNyZ2I9MzU5MDQsVy5zcmdiYT0zNTkwNiksZS5vZXNfdGV4dHVyZV9mbG9hdCYmKEguZmxvYXQzMj1ILmZsb2F0PTUxMjYpLGUub2VzX3RleHR1cmVfaGFsZl9mbG9hdCYmKEguZmxvYXQxNj1IWyJoYWxmIGZsb2F0Il09MzYxOTMpLGUud2ViZ2xfZGVwdGhfdGV4dHVyZSYmKGooVyx7ZGVwdGg6NjQwMiwiZGVwdGggc3RlbmNpbCI6MzQwNDF9KSxqKEgse3VpbnQxNjo1MTIzLHVpbnQzMjo1MTI1LCJkZXB0aCBzdGVuY2lsIjozNDA0Mn0pKSxlLndlYmdsX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjJiZqKEoseyJyZ2IgczN0YyBkeHQxIjozMzc3NiwicmdiYSBzM3RjIGR4dDEiOjMzNzc3LCJyZ2JhIHMzdGMgZHh0MyI6MzM3NzgsInJnYmEgczN0YyBkeHQ1IjozMzc3OX0pLGUud2ViZ2xfY29tcHJlc3NlZF90ZXh0dXJlX2F0YyYmaihKLHsicmdiIGF0YyI6MzU5ODYsInJnYmEgYXRjIGV4cGxpY2l0IGFscGhhIjozNTk4NywicmdiYSBhdGMgaW50ZXJwb2xhdGVkIGFscGhhIjozNDc5OH0pLGUud2ViZ2xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjJiZqKEoseyJyZ2IgcHZydGMgNGJwcHYxIjozNTg0MCwicmdiIHB2cnRjIDJicHB2MSI6MzU4NDEsInJnYmEgcHZydGMgNGJwcHYxIjozNTg0MiwicmdiYSBwdnJ0YyAyYnBwdjEiOjM1ODQzfSksZS53ZWJnbF9jb21wcmVzc2VkX3RleHR1cmVfZXRjMSYmKEpbInJnYiBldGMxIl09MzYxOTYpO3ZhciBLPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQuZ2V0UGFyYW1ldGVyKDM0NDY3KSk7T2JqZWN0LmtleXMoSikuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT1KW3RdOzA8PUsuaW5kZXhPZihlKSYmKFdbdF09ZSl9KTt2YXIgUT1PYmplY3Qua2V5cyhXKTtyLnRleHR1cmVGb3JtYXRzPVE7dmFyIHR0PVtdO09iamVjdC5rZXlzKFcpLmZvckVhY2goZnVuY3Rpb24odCl7dHRbV1t0XV09dH0pO3ZhciBldD1bXTtPYmplY3Qua2V5cyhIKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2V0W0hbdF1dPXR9KTt2YXIgcnQ9W107T2JqZWN0LmtleXMoVikuZm9yRWFjaChmdW5jdGlvbih0KXtydFtWW3RdXT10fSk7dmFyIG50PVtdO09iamVjdC5rZXlzKFUpLmZvckVhY2goZnVuY3Rpb24odCl7bnRbVVt0XV09dH0pO3ZhciBpdD1bXTtPYmplY3Qua2V5cyhOKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2l0W05bdF1dPXR9KTt2YXIgcHQ9US5yZWR1Y2UoZnVuY3Rpb24odCxlKXt2YXIgcj1XW2VdO3JldHVybiA2NDA5PT09cnx8NjQwNj09PXJ8fDY0MDk9PT1yfHw2NDEwPT09cnx8NjQwMj09PXJ8fDM0MDQxPT09cj90W3JdPXI6MzI4NTU9PT1yfHwwPD1lLmluZGV4T2YoInJnYmEiKT90W3JdPTY0MDg6dFtyXT02NDA3LHR9LHt9KSxkdD1bXSxndD1bXSxtdD0wLHZ0PXt9LHl0PXIubWF4VGV4dHVyZVVuaXRzLHh0PUFycmF5KHl0KS5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0pO3JldHVybiBqKE8ucHJvdG90eXBlLHtiaW5kOmZ1bmN0aW9uKCl7dGhpcy5iaW5kQ291bnQrPTE7dmFyIGU9dGhpcy51bml0O2lmKDA+ZSl7Zm9yKHZhciByPTA7cjx5dDsrK3Ipe3ZhciBuPXh0W3JdO2lmKG4pe2lmKDA8bi5iaW5kQ291bnQpY29udGludWU7bi51bml0PS0xfXh0W3JdPXRoaXMsZT1yO2JyZWFrfW8ucHJvZmlsZSYmYS5tYXhUZXh0dXJlVW5pdHM8ZSsxJiYoYS5tYXhUZXh0dXJlVW5pdHM9ZSsxKSx0aGlzLnVuaXQ9ZSx0LmFjdGl2ZVRleHR1cmUoMzM5ODQrZSksdC5iaW5kVGV4dHVyZSh0aGlzLnRhcmdldCx0aGlzLnRleHR1cmUpfXJldHVybiBlfSx1bmJpbmQ6ZnVuY3Rpb24oKXstLXRoaXMuYmluZENvdW50fSxkZWNSZWY6ZnVuY3Rpb24oKXswPj0tLXRoaXMucmVmQ291bnQmJkIodGhpcyl9fSksby5wcm9maWxlJiYoYS5nZXRUb3RhbFRleHR1cmVTaXplPWZ1bmN0aW9uKCl7dmFyIHQ9MDtyZXR1cm4gT2JqZWN0LmtleXModnQpLmZvckVhY2goZnVuY3Rpb24oZSl7dCs9dnRbZV0uc3RhdHMuc2l6ZX0pLHR9KSx7Y3JlYXRlMkQ6ZnVuY3Rpb24oZSxyKXtmdW5jdGlvbiBuKHQsZSl7dmFyIHI9aS50ZXhJbmZvO3ouY2FsbChyKTt2YXIgYT1DKCk7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0P1QoYSwwfHQsIm51bWJlciI9PXR5cGVvZiBlPzB8ZTowfHQpOnQ/KFAocix0KSxTKGEsdCkpOlQoYSwxLDEpLHIuZ2VuTWlwbWFwcyYmKGEubWlwbWFzaz0oYS53aWR0aDw8MSktMSksaS5taXBtYXNrPWEubWlwbWFzayxjKGksYSksaS5pbnRlcm5hbGZvcm1hdD1hLmludGVybmFsZm9ybWF0LG4ud2lkdGg9YS53aWR0aCxuLmhlaWdodD1hLmhlaWdodCxEKGkpLEUoYSwzNTUzKSxJKHIsMzU1MyksUigpLEwoYSksby5wcm9maWxlJiYoaS5zdGF0cy5zaXplPWsoaS5pbnRlcm5hbGZvcm1hdCxpLnR5cGUsYS53aWR0aCxhLmhlaWdodCxyLmdlbk1pcG1hcHMsITEpKSxuLmZvcm1hdD10dFtpLmludGVybmFsZm9ybWF0XSxuLnR5cGU9ZXRbaS50eXBlXSxuLm1hZz1ydFtyLm1hZ0ZpbHRlcl0sbi5taW49bnRbci5taW5GaWx0ZXJdLG4ud3JhcFM9aXRbci53cmFwU10sbi53cmFwVD1pdFtyLndyYXBUXSxufXZhciBpPW5ldyBPKDM1NTMpO3JldHVybiB2dFtpLmlkXT1pLGEudGV4dHVyZUNvdW50KyssbihlLHIpLG4uc3ViaW1hZ2U9ZnVuY3Rpb24odCxlLHIsYSl7ZXw9MCxyfD0wLGF8PTA7dmFyIG89digpO3JldHVybiBjKG8saSksby53aWR0aD0wLG8uaGVpZ2h0PTAscChvLHQpLG8ud2lkdGg9by53aWR0aHx8KGkud2lkdGg+PmEpLWUsby5oZWlnaHQ9by5oZWlnaHR8fChpLmhlaWdodD4+YSktcixEKGkpLGQobywzNTUzLGUscixhKSxSKCksTShvKSxufSxuLnJlc2l6ZT1mdW5jdGlvbihlLHIpe3ZhciBhPTB8ZSxzPTB8cnx8YTtpZihhPT09aS53aWR0aCYmcz09PWkuaGVpZ2h0KXJldHVybiBuO24ud2lkdGg9aS53aWR0aD1hLG4uaGVpZ2h0PWkuaGVpZ2h0PXMsRChpKTtmb3IodmFyIGwsYz1pLmNoYW5uZWxzLHU9aS50eXBlLGg9MDtpLm1pcG1hc2s+Pmg7KytoKXt2YXIgZj1hPj5oLHA9cz4+aDtpZighZnx8IXApYnJlYWs7bD1HLnplcm8uYWxsb2NUeXBlKHUsZipwKmMpLHQudGV4SW1hZ2UyRCgzNTUzLGgsaS5mb3JtYXQsZixwLDAsaS5mb3JtYXQsaS50eXBlLGwpLGwmJkcuemVyby5mcmVlVHlwZShsKX1yZXR1cm4gUigpLG8ucHJvZmlsZSYmKGkuc3RhdHMuc2l6ZT1rKGkuaW50ZXJuYWxmb3JtYXQsaS50eXBlLGEscywhMSwhMSkpLG59LG4uX3JlZ2xUeXBlPSJ0ZXh0dXJlMmQiLG4uX3RleHR1cmU9aSxvLnByb2ZpbGUmJihuLnN0YXRzPWkuc3RhdHMpLG4uZGVzdHJveT1mdW5jdGlvbigpe2kuZGVjUmVmKCl9LG59LGNyZWF0ZUN1YmU6ZnVuY3Rpb24oZSxyLG4saSxzLGwpe2Z1bmN0aW9uIGgodCxlLHIsbixpLGEpe3ZhciBzLGw9Zi50ZXhJbmZvO2Zvcih6LmNhbGwobCkscz0wOzY+czsrK3MpZ1tzXT1DKCk7aWYoIm51bWJlciIhPXR5cGVvZiB0JiZ0KXtpZigib2JqZWN0Ij09dHlwZW9mIHQpaWYoZSlTKGdbMF0sdCksUyhnWzFdLGUpLFMoZ1syXSxyKSxTKGdbM10sbiksUyhnWzRdLGkpLFMoZ1s1XSxhKTtlbHNlIGlmKFAobCx0KSx1KGYsdCksImZhY2VzImluIHQpZm9yKHQ9dC5mYWNlcyxzPTA7Nj5zOysrcyljKGdbc10sZiksUyhnW3NdLHRbc10pO2Vsc2UgZm9yKHM9MDs2PnM7KytzKVMoZ1tzXSx0KX1lbHNlIGZvcih0PTB8dHx8MSxzPTA7Nj5zOysrcylUKGdbc10sdCx0KTtmb3IoYyhmLGdbMF0pLGYubWlwbWFzaz1sLmdlbk1pcG1hcHM/KGdbMF0ud2lkdGg8PDEpLTE6Z1swXS5taXBtYXNrLGYuaW50ZXJuYWxmb3JtYXQ9Z1swXS5pbnRlcm5hbGZvcm1hdCxoLndpZHRoPWdbMF0ud2lkdGgsaC5oZWlnaHQ9Z1swXS5oZWlnaHQsRChmKSxzPTA7Nj5zOysrcylFKGdbc10sMzQwNjkrcyk7Zm9yKEkobCwzNDA2NyksUigpLG8ucHJvZmlsZSYmKGYuc3RhdHMuc2l6ZT1rKGYuaW50ZXJuYWxmb3JtYXQsZi50eXBlLGgud2lkdGgsaC5oZWlnaHQsbC5nZW5NaXBtYXBzLCEwKSksaC5mb3JtYXQ9dHRbZi5pbnRlcm5hbGZvcm1hdF0saC50eXBlPWV0W2YudHlwZV0saC5tYWc9cnRbbC5tYWdGaWx0ZXJdLGgubWluPW50W2wubWluRmlsdGVyXSxoLndyYXBTPWl0W2wud3JhcFNdLGgud3JhcFQ9aXRbbC53cmFwVF0scz0wOzY+czsrK3MpTChnW3NdKTtyZXR1cm4gaH12YXIgZj1uZXcgTygzNDA2Nyk7dnRbZi5pZF09ZixhLmN1YmVDb3VudCsrO3ZhciBnPUFycmF5KDYpO3JldHVybiBoKGUscixuLGkscyxsKSxoLnN1YmltYWdlPWZ1bmN0aW9uKHQsZSxyLG4saSl7cnw9MCxufD0wLGl8PTA7dmFyIGE9digpO3JldHVybiBjKGEsZiksYS53aWR0aD0wLGEuaGVpZ2h0PTAscChhLGUpLGEud2lkdGg9YS53aWR0aHx8KGYud2lkdGg+PmkpLXIsYS5oZWlnaHQ9YS5oZWlnaHR8fChmLmhlaWdodD4+aSktbixEKGYpLGQoYSwzNDA2OSt0LHIsbixpKSxSKCksTShhKSxofSxoLnJlc2l6ZT1mdW5jdGlvbihlKXtpZigoZXw9MCkhPT1mLndpZHRoKXtoLndpZHRoPWYud2lkdGg9ZSxoLmhlaWdodD1mLmhlaWdodD1lLEQoZik7Zm9yKHZhciByPTA7Nj5yOysrcilmb3IodmFyIG49MDtmLm1pcG1hc2s+Pm47KytuKXQudGV4SW1hZ2UyRCgzNDA2OStyLG4sZi5mb3JtYXQsZT4+bixlPj5uLDAsZi5mb3JtYXQsZi50eXBlLG51bGwpO3JldHVybiBSKCksby5wcm9maWxlJiYoZi5zdGF0cy5zaXplPWsoZi5pbnRlcm5hbGZvcm1hdCxmLnR5cGUsaC53aWR0aCxoLmhlaWdodCwhMSwhMCkpLGh9fSxoLl9yZWdsVHlwZT0idGV4dHVyZUN1YmUiLGguX3RleHR1cmU9ZixvLnByb2ZpbGUmJihoLnN0YXRzPWYuc3RhdHMpLGguZGVzdHJveT1mdW5jdGlvbigpe2YuZGVjUmVmKCl9LGh9LGNsZWFyOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7ZTx5dDsrK2UpdC5hY3RpdmVUZXh0dXJlKDMzOTg0K2UpLHQuYmluZFRleHR1cmUoMzU1MyxudWxsKSx4dFtlXT1udWxsO1godnQpLmZvckVhY2goQiksYS5jdWJlQ291bnQ9MCxhLnRleHR1cmVDb3VudD0wfSxnZXRUZXh0dXJlOmZ1bmN0aW9uKHQpe3JldHVybiBudWxsfSxyZXN0b3JlOmZ1bmN0aW9uKCl7WCh2dCkuZm9yRWFjaChmdW5jdGlvbihlKXtlLnRleHR1cmU9dC5jcmVhdGVUZXh0dXJlKCksdC5iaW5kVGV4dHVyZShlLnRhcmdldCxlLnRleHR1cmUpO2Zvcih2YXIgcj0wOzMyPnI7KytyKWlmKDAhPShlLm1pcG1hc2smMTw8cikpaWYoMzU1Mz09PWUudGFyZ2V0KXQudGV4SW1hZ2UyRCgzNTUzLHIsZS5pbnRlcm5hbGZvcm1hdCxlLndpZHRoPj5yLGUuaGVpZ2h0Pj5yLDAsZS5pbnRlcm5hbGZvcm1hdCxlLnR5cGUsbnVsbCk7ZWxzZSBmb3IodmFyIG49MDs2Pm47KytuKXQudGV4SW1hZ2UyRCgzNDA2OStuLHIsZS5pbnRlcm5hbGZvcm1hdCxlLndpZHRoPj5yLGUuaGVpZ2h0Pj5yLDAsZS5pbnRlcm5hbGZvcm1hdCxlLnR5cGUsbnVsbCk7SShlLnRleEluZm8sZS50YXJnZXQpfSl9fX1mdW5jdGlvbiBBKHQsZSxyLG4saSxhKXtmdW5jdGlvbiBvKHQsZSxyKXt0aGlzLnRhcmdldD10LHRoaXMudGV4dHVyZT1lLHRoaXMucmVuZGVyYnVmZmVyPXI7dmFyIG49dD0wO2U/KHQ9ZS53aWR0aCxuPWUuaGVpZ2h0KTpyJiYodD1yLndpZHRoLG49ci5oZWlnaHQpLHRoaXMud2lkdGg9dCx0aGlzLmhlaWdodD1ufWZ1bmN0aW9uIHModCl7dCYmKHQudGV4dHVyZSYmdC50ZXh0dXJlLl90ZXh0dXJlLmRlY1JlZigpLHQucmVuZGVyYnVmZmVyJiZ0LnJlbmRlcmJ1ZmZlci5fcmVuZGVyYnVmZmVyLmRlY1JlZigpKX1mdW5jdGlvbiBsKHQsZSxyKXt0JiYodC50ZXh0dXJlP3QudGV4dHVyZS5fdGV4dHVyZS5yZWZDb3VudCs9MTp0LnJlbmRlcmJ1ZmZlci5fcmVuZGVyYnVmZmVyLnJlZkNvdW50Kz0xKX1mdW5jdGlvbiBjKGUscil7ciYmKHIudGV4dHVyZT90LmZyYW1lYnVmZmVyVGV4dHVyZTJEKDM2MTYwLGUsci50YXJnZXQsci50ZXh0dXJlLl90ZXh0dXJlLnRleHR1cmUsMCk6dC5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcigzNjE2MCxlLDM2MTYxLHIucmVuZGVyYnVmZmVyLl9yZW5kZXJidWZmZXIucmVuZGVyYnVmZmVyKSl9ZnVuY3Rpb24gdSh0KXt2YXIgZT0zNTUzLHI9bnVsbCxuPW51bGwsaT10O3JldHVybiJvYmplY3QiPT10eXBlb2YgdCYmKGk9dC5kYXRhLCJ0YXJnZXQiaW4gdCYmKGU9MHx0LnRhcmdldCkpLCJ0ZXh0dXJlMmQiPT09KHQ9aS5fcmVnbFR5cGUpP3I9aToidGV4dHVyZUN1YmUiPT09dD9yPWk6InJlbmRlcmJ1ZmZlciI9PT10JiYobj1pLGU9MzYxNjEpLG5ldyBvKGUscixuKX1mdW5jdGlvbiBoKHQsZSxyLGEscyl7cmV0dXJuIHI/KCh0PW4uY3JlYXRlMkQoe3dpZHRoOnQsaGVpZ2h0OmUsZm9ybWF0OmEsdHlwZTpzfSkpLl90ZXh0dXJlLnJlZkNvdW50PTAsbmV3IG8oMzU1Myx0LG51bGwpKTooKHQ9aS5jcmVhdGUoe3dpZHRoOnQsaGVpZ2h0OmUsZm9ybWF0OmF9KSkuX3JlbmRlcmJ1ZmZlci5yZWZDb3VudD0wLG5ldyBvKDM2MTYxLG51bGwsdCkpfWZ1bmN0aW9uIGYodCl7cmV0dXJuIHQmJih0LnRleHR1cmV8fHQucmVuZGVyYnVmZmVyKX1mdW5jdGlvbiBwKHQsZSxyKXt0JiYodC50ZXh0dXJlP3QudGV4dHVyZS5yZXNpemUoZSxyKTp0LnJlbmRlcmJ1ZmZlciYmdC5yZW5kZXJidWZmZXIucmVzaXplKGUscikpfWZ1bmN0aW9uIGQoKXt0aGlzLmlkPWsrKyxNW3RoaXMuaWRdPXRoaXMsdGhpcy5mcmFtZWJ1ZmZlcj10LmNyZWF0ZUZyYW1lYnVmZmVyKCksdGhpcy5oZWlnaHQ9dGhpcy53aWR0aD0wLHRoaXMuY29sb3JBdHRhY2htZW50cz1bXSx0aGlzLmRlcHRoU3RlbmNpbEF0dGFjaG1lbnQ9dGhpcy5zdGVuY2lsQXR0YWNobWVudD10aGlzLmRlcHRoQXR0YWNobWVudD1udWxsfWZ1bmN0aW9uIGcodCl7dC5jb2xvckF0dGFjaG1lbnRzLmZvckVhY2gocykscyh0LmRlcHRoQXR0YWNobWVudCkscyh0LnN0ZW5jaWxBdHRhY2htZW50KSxzKHQuZGVwdGhTdGVuY2lsQXR0YWNobWVudCl9ZnVuY3Rpb24gbShlKXt0LmRlbGV0ZUZyYW1lYnVmZmVyKGUuZnJhbWVidWZmZXIpLGUuZnJhbWVidWZmZXI9bnVsbCxhLmZyYW1lYnVmZmVyQ291bnQtLSxkZWxldGUgTVtlLmlkXX1mdW5jdGlvbiB2KGUpe3ZhciBuO3QuYmluZEZyYW1lYnVmZmVyKDM2MTYwLGUuZnJhbWVidWZmZXIpO3ZhciBpPWUuY29sb3JBdHRhY2htZW50cztmb3Iobj0wO248aS5sZW5ndGg7KytuKWMoMzYwNjQrbixpW25dKTtmb3Iobj1pLmxlbmd0aDtuPHIubWF4Q29sb3JBdHRhY2htZW50czsrK24pdC5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCwzNjA2NCtuLDM1NTMsbnVsbCwwKTt0LmZyYW1lYnVmZmVyVGV4dHVyZTJEKDM2MTYwLDMzMzA2LDM1NTMsbnVsbCwwKSx0LmZyYW1lYnVmZmVyVGV4dHVyZTJEKDM2MTYwLDM2MDk2LDM1NTMsbnVsbCwwKSx0LmZyYW1lYnVmZmVyVGV4dHVyZTJEKDM2MTYwLDM2MTI4LDM1NTMsbnVsbCwwKSxjKDM2MDk2LGUuZGVwdGhBdHRhY2htZW50KSxjKDM2MTI4LGUuc3RlbmNpbEF0dGFjaG1lbnQpLGMoMzMzMDYsZS5kZXB0aFN0ZW5jaWxBdHRhY2htZW50KSx0LmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoMzYxNjApLHQuYmluZEZyYW1lYnVmZmVyKDM2MTYwLHgubmV4dD94Lm5leHQuZnJhbWVidWZmZXI6bnVsbCkseC5jdXI9eC5uZXh0LHQuZ2V0RXJyb3IoKX1mdW5jdGlvbiB5KHQsZSl7ZnVuY3Rpb24gcih0LGUpe3ZhciBpLGE9MCxvPTAscz0hMCxjPSEwO2k9bnVsbDt2YXIgcD0hMCxkPSJyZ2JhIixtPSJ1aW50OCIseT0xLHg9bnVsbCx3PW51bGwsaz1udWxsLE09ITE7Im51bWJlciI9PXR5cGVvZiB0PyhhPTB8dCxvPTB8ZXx8YSk6dD8oInNoYXBlImluIHQ/KGE9KG89dC5zaGFwZSlbMF0sbz1vWzFdKTooInJhZGl1cyJpbiB0JiYoYT1vPXQucmFkaXVzKSwid2lkdGgiaW4gdCYmKGE9dC53aWR0aCksImhlaWdodCJpbiB0JiYobz10LmhlaWdodCkpLCgiY29sb3IiaW4gdHx8ImNvbG9ycyJpbiB0KSYmKGk9dC5jb2xvcnx8dC5jb2xvcnMsQXJyYXkuaXNBcnJheShpKSksaXx8KCJjb2xvckNvdW50ImluIHQmJih5PTB8dC5jb2xvckNvdW50KSwiY29sb3JUZXh0dXJlImluIHQmJihwPSEhdC5jb2xvclRleHR1cmUsZD0icmdiYTQiKSwiY29sb3JUeXBlImluIHQmJihtPXQuY29sb3JUeXBlLCFwKSYmKCJoYWxmIGZsb2F0Ij09PW18fCJmbG9hdDE2Ij09PW0/ZD0icmdiYTE2ZiI6ImZsb2F0IiE9PW0mJiJmbG9hdDMyIiE9PW18fChkPSJyZ2JhMzJmIikpLCJjb2xvckZvcm1hdCJpbiB0JiYoZD10LmNvbG9yRm9ybWF0LDA8PWIuaW5kZXhPZihkKT9wPSEwOjA8PV8uaW5kZXhPZihkKSYmKHA9ITEpKSksKCJkZXB0aFRleHR1cmUiaW4gdHx8ImRlcHRoU3RlbmNpbFRleHR1cmUiaW4gdCkmJihNPSEoIXQuZGVwdGhUZXh0dXJlJiYhdC5kZXB0aFN0ZW5jaWxUZXh0dXJlKSksImRlcHRoImluIHQmJigiYm9vbGVhbiI9PXR5cGVvZiB0LmRlcHRoP3M9dC5kZXB0aDooeD10LmRlcHRoLGM9ITEpKSwic3RlbmNpbCJpbiB0JiYoImJvb2xlYW4iPT10eXBlb2YgdC5zdGVuY2lsP2M9dC5zdGVuY2lsOih3PXQuc3RlbmNpbCxzPSExKSksImRlcHRoU3RlbmNpbCJpbiB0JiYoImJvb2xlYW4iPT10eXBlb2YgdC5kZXB0aFN0ZW5jaWw/cz1jPXQuZGVwdGhTdGVuY2lsOihrPXQuZGVwdGhTdGVuY2lsLGM9cz0hMSkpKTphPW89MTt2YXIgQT1udWxsLFQ9bnVsbCxTPW51bGwsRT1udWxsO2lmKEFycmF5LmlzQXJyYXkoaSkpQT1pLm1hcCh1KTtlbHNlIGlmKGkpQT1bdShpKV07ZWxzZSBmb3IoQT1BcnJheSh5KSxpPTA7aTx5OysraSlBW2ldPWgoYSxvLHAsZCxtKTtmb3IoYT1hfHxBWzBdLndpZHRoLG89b3x8QVswXS5oZWlnaHQseD9UPXUoeCk6cyYmIWMmJihUPWgoYSxvLE0sImRlcHRoIiwidWludDMyIikpLHc/Uz11KHcpOmMmJiFzJiYoUz1oKGEsbywhMSwic3RlbmNpbCIsInVpbnQ4IikpLGs/RT11KGspOiF4JiYhdyYmYyYmcyYmKEU9aChhLG8sTSwiZGVwdGggc3RlbmNpbCIsImRlcHRoIHN0ZW5jaWwiKSkscz1udWxsLGk9MDtpPEEubGVuZ3RoOysraSlsKEFbaV0pLEFbaV0mJkFbaV0udGV4dHVyZSYmKGM9eXRbQVtpXS50ZXh0dXJlLl90ZXh0dXJlLmZvcm1hdF0qeHRbQVtpXS50ZXh0dXJlLl90ZXh0dXJlLnR5cGVdLG51bGw9PT1zJiYocz1jKSk7cmV0dXJuIGwoVCksbChTKSxsKEUpLGcobiksbi53aWR0aD1hLG4uaGVpZ2h0PW8sbi5jb2xvckF0dGFjaG1lbnRzPUEsbi5kZXB0aEF0dGFjaG1lbnQ9VCxuLnN0ZW5jaWxBdHRhY2htZW50PVMsbi5kZXB0aFN0ZW5jaWxBdHRhY2htZW50PUUsci5jb2xvcj1BLm1hcChmKSxyLmRlcHRoPWYoVCksci5zdGVuY2lsPWYoUyksci5kZXB0aFN0ZW5jaWw9ZihFKSxyLndpZHRoPW4ud2lkdGgsci5oZWlnaHQ9bi5oZWlnaHQsdihuKSxyfXZhciBuPW5ldyBkO3JldHVybiBhLmZyYW1lYnVmZmVyQ291bnQrKyxyKHQsZSksaihyLHtyZXNpemU6ZnVuY3Rpb24odCxlKXt2YXIgaT0wfHQsYT0wfGV8fGk7aWYoaT09PW4ud2lkdGgmJmE9PT1uLmhlaWdodClyZXR1cm4gcjtmb3IodmFyIG89bi5jb2xvckF0dGFjaG1lbnRzLHM9MDtzPG8ubGVuZ3RoOysrcylwKG9bc10saSxhKTtyZXR1cm4gcChuLmRlcHRoQXR0YWNobWVudCxpLGEpLHAobi5zdGVuY2lsQXR0YWNobWVudCxpLGEpLHAobi5kZXB0aFN0ZW5jaWxBdHRhY2htZW50LGksYSksbi53aWR0aD1yLndpZHRoPWksbi5oZWlnaHQ9ci5oZWlnaHQ9YSx2KG4pLHJ9LF9yZWdsVHlwZToiZnJhbWVidWZmZXIiLF9mcmFtZWJ1ZmZlcjpuLGRlc3Ryb3k6ZnVuY3Rpb24oKXttKG4pLGcobil9LHVzZTpmdW5jdGlvbih0KXt4LnNldEZCTyh7ZnJhbWVidWZmZXI6cn0sdCl9fSl9dmFyIHg9e2N1cjpudWxsLG5leHQ6bnVsbCxkaXJ0eTohMSxzZXRGQk86bnVsbH0sYj1bInJnYmEiXSxfPVsicmdiYTQiLCJyZ2I1NjUiLCJyZ2I1IGExIl07ZS5leHRfc3JnYiYmXy5wdXNoKCJzcmdiYSIpLGUuZXh0X2NvbG9yX2J1ZmZlcl9oYWxmX2Zsb2F0JiZfLnB1c2goInJnYmExNmYiLCJyZ2IxNmYiKSxlLndlYmdsX2NvbG9yX2J1ZmZlcl9mbG9hdCYmXy5wdXNoKCJyZ2JhMzJmIik7dmFyIHc9WyJ1aW50OCJdO2Uub2VzX3RleHR1cmVfaGFsZl9mbG9hdCYmdy5wdXNoKCJoYWxmIGZsb2F0IiwiZmxvYXQxNiIpLGUub2VzX3RleHR1cmVfZmxvYXQmJncucHVzaCgiZmxvYXQiLCJmbG9hdDMyIik7dmFyIGs9MCxNPXt9O3JldHVybiBqKHgse2dldEZyYW1lYnVmZmVyOmZ1bmN0aW9uKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0JiYiZnJhbWVidWZmZXIiPT09dC5fcmVnbFR5cGUmJih0PXQuX2ZyYW1lYnVmZmVyKWluc3RhbmNlb2YgZD90Om51bGx9LGNyZWF0ZTp5LGNyZWF0ZUN1YmU6ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0KXt2YXIgaSxhPXtjb2xvcjpudWxsfSxvPTAscz1udWxsO2k9InJnYmEiO3ZhciBsPSJ1aW50OCIsYz0xO2lmKCJudW1iZXIiPT10eXBlb2YgdD9vPTB8dDp0Pygic2hhcGUiaW4gdD9vPXQuc2hhcGVbMF06KCJyYWRpdXMiaW4gdCYmKG89MHx0LnJhZGl1cyksIndpZHRoImluIHQ/bz0wfHQud2lkdGg6ImhlaWdodCJpbiB0JiYobz0wfHQuaGVpZ2h0KSksKCJjb2xvciJpbiB0fHwiY29sb3JzImluIHQpJiYocz10LmNvbG9yfHx0LmNvbG9ycyxBcnJheS5pc0FycmF5KHMpKSxzfHwoImNvbG9yQ291bnQiaW4gdCYmKGM9MHx0LmNvbG9yQ291bnQpLCJjb2xvclR5cGUiaW4gdCYmKGw9dC5jb2xvclR5cGUpLCJjb2xvckZvcm1hdCJpbiB0JiYoaT10LmNvbG9yRm9ybWF0KSksImRlcHRoImluIHQmJihhLmRlcHRoPXQuZGVwdGgpLCJzdGVuY2lsImluIHQmJihhLnN0ZW5jaWw9dC5zdGVuY2lsKSwiZGVwdGhTdGVuY2lsImluIHQmJihhLmRlcHRoU3RlbmNpbD10LmRlcHRoU3RlbmNpbCkpOm89MSxzKWlmKEFycmF5LmlzQXJyYXkocykpZm9yKHQ9W10saT0wO2k8cy5sZW5ndGg7KytpKXRbaV09c1tpXTtlbHNlIHQ9W3NdO2Vsc2UgZm9yKHQ9QXJyYXkoYykscz17cmFkaXVzOm8sZm9ybWF0OmksdHlwZTpsfSxpPTA7aTxjOysraSl0W2ldPW4uY3JlYXRlQ3ViZShzKTtmb3IoYS5jb2xvcj1BcnJheSh0Lmxlbmd0aCksaT0wO2k8dC5sZW5ndGg7KytpKWM9dFtpXSxvPW98fGMud2lkdGgsYS5jb2xvcltpXT17dGFyZ2V0OjM0MDY5LGRhdGE6dFtpXX07Zm9yKGk9MDs2Pmk7KytpKXtmb3IoYz0wO2M8dC5sZW5ndGg7KytjKWEuY29sb3JbY10udGFyZ2V0PTM0MDY5K2k7MDxpJiYoYS5kZXB0aD1yWzBdLmRlcHRoLGEuc3RlbmNpbD1yWzBdLnN0ZW5jaWwsYS5kZXB0aFN0ZW5jaWw9clswXS5kZXB0aFN0ZW5jaWwpLHJbaV0/cltpXShhKTpyW2ldPXkoYSl9cmV0dXJuIGooZSx7d2lkdGg6byxoZWlnaHQ6byxjb2xvcjp0fSl9dmFyIHI9QXJyYXkoNik7cmV0dXJuIGUodCksaihlLHtmYWNlczpyLHJlc2l6ZTpmdW5jdGlvbih0KXt2YXIgbj0wfHQ7aWYobj09PWUud2lkdGgpcmV0dXJuIGU7dmFyIGk9ZS5jb2xvcjtmb3IodD0wO3Q8aS5sZW5ndGg7Kyt0KWlbdF0ucmVzaXplKG4pO2Zvcih0PTA7Nj50OysrdClyW3RdLnJlc2l6ZShuKTtyZXR1cm4gZS53aWR0aD1lLmhlaWdodD1uLGV9LF9yZWdsVHlwZToiZnJhbWVidWZmZXJDdWJlIixkZXN0cm95OmZ1bmN0aW9uKCl7ci5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuZGVzdHJveSgpfSl9fSl9LGNsZWFyOmZ1bmN0aW9uKCl7WChNKS5mb3JFYWNoKG0pfSxyZXN0b3JlOmZ1bmN0aW9uKCl7WChNKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UuZnJhbWVidWZmZXI9dC5jcmVhdGVGcmFtZWJ1ZmZlcigpLHYoZSl9KX19KX1mdW5jdGlvbiBUKCl7dGhpcy53PXRoaXMuej10aGlzLnk9dGhpcy54PXRoaXMuc3RhdGU9MCx0aGlzLmJ1ZmZlcj1udWxsLHRoaXMuc2l6ZT0wLHRoaXMubm9ybWFsaXplZD0hMSx0aGlzLnR5cGU9NTEyNix0aGlzLmRpdmlzb3I9dGhpcy5zdHJpZGU9dGhpcy5vZmZzZXQ9MH1mdW5jdGlvbiBTKHQsZSxyLG4pe2Z1bmN0aW9uIGkodCxlLHIsbil7dGhpcy5uYW1lPXQsdGhpcy5pZD1lLHRoaXMubG9jYXRpb249cix0aGlzLmluZm89bn1mdW5jdGlvbiBhKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDsrK3IpaWYodFtyXS5pZD09PWUuaWQpcmV0dXJuIHZvaWQodFtyXS5sb2NhdGlvbj1lLmxvY2F0aW9uKTt0LnB1c2goZSl9ZnVuY3Rpb24gbyhyLG4saSl7aWYoIShvPShpPTM1NjMyPT09cj9jOnUpW25dKSl7dmFyIGE9ZS5zdHIobiksbz10LmNyZWF0ZVNoYWRlcihyKTt0LnNoYWRlclNvdXJjZShvLGEpLHQuY29tcGlsZVNoYWRlcihvKSxpW25dPW99cmV0dXJuIG99ZnVuY3Rpb24gcyh0LGUpe3RoaXMuaWQ9cCsrLHRoaXMuZnJhZ0lkPXQsdGhpcy52ZXJ0SWQ9ZSx0aGlzLnByb2dyYW09bnVsbCx0aGlzLnVuaWZvcm1zPVtdLHRoaXMuYXR0cmlidXRlcz1bXSxuLnByb2ZpbGUmJih0aGlzLnN0YXRzPXt1bmlmb3Jtc0NvdW50OjAsYXR0cmlidXRlc0NvdW50OjB9KX1mdW5jdGlvbiBsKHIscyl7dmFyIGwsYztsPW8oMzU2MzIsci5mcmFnSWQpLGM9bygzNTYzMyxyLnZlcnRJZCk7dmFyIHU9ci5wcm9ncmFtPXQuY3JlYXRlUHJvZ3JhbSgpO3QuYXR0YWNoU2hhZGVyKHUsbCksdC5hdHRhY2hTaGFkZXIodSxjKSx0LmxpbmtQcm9ncmFtKHUpO3ZhciBoPXQuZ2V0UHJvZ3JhbVBhcmFtZXRlcih1LDM1NzE4KTtuLnByb2ZpbGUmJihyLnN0YXRzLnVuaWZvcm1zQ291bnQ9aCk7dmFyIGY9ci51bmlmb3Jtcztmb3IobD0wO2w8aDsrK2wpaWYoYz10LmdldEFjdGl2ZVVuaWZvcm0odSxsKSlpZigxPGMuc2l6ZSlmb3IodmFyIHA9MDtwPGMuc2l6ZTsrK3Ape3ZhciBkPWMubmFtZS5yZXBsYWNlKCJbMF0iLCJbIitwKyJdIik7YShmLG5ldyBpKGQsZS5pZChkKSx0LmdldFVuaWZvcm1Mb2NhdGlvbih1LGQpLGMpKX1lbHNlIGEoZixuZXcgaShjLm5hbWUsZS5pZChjLm5hbWUpLHQuZ2V0VW5pZm9ybUxvY2F0aW9uKHUsYy5uYW1lKSxjKSk7Zm9yKGg9dC5nZXRQcm9ncmFtUGFyYW1ldGVyKHUsMzU3MjEpLG4ucHJvZmlsZSYmKHIuc3RhdHMuYXR0cmlidXRlc0NvdW50PWgpLGY9ci5hdHRyaWJ1dGVzLGw9MDtsPGg7KytsKShjPXQuZ2V0QWN0aXZlQXR0cmliKHUsbCkpJiZhKGYsbmV3IGkoYy5uYW1lLGUuaWQoYy5uYW1lKSx0LmdldEF0dHJpYkxvY2F0aW9uKHUsYy5uYW1lKSxjKSl9dmFyIGM9e30sdT17fSxoPXt9LGY9W10scD0wO3JldHVybiBuLnByb2ZpbGUmJihyLmdldE1heFVuaWZvcm1zQ291bnQ9ZnVuY3Rpb24oKXt2YXIgdD0wO3JldHVybiBmLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5zdGF0cy51bmlmb3Jtc0NvdW50PnQmJih0PWUuc3RhdHMudW5pZm9ybXNDb3VudCl9KSx0fSxyLmdldE1heEF0dHJpYnV0ZXNDb3VudD1mdW5jdGlvbigpe3ZhciB0PTA7cmV0dXJuIGYuZm9yRWFjaChmdW5jdGlvbihlKXtlLnN0YXRzLmF0dHJpYnV0ZXNDb3VudD50JiYodD1lLnN0YXRzLmF0dHJpYnV0ZXNDb3VudCl9KSx0fSkse2NsZWFyOmZ1bmN0aW9uKCl7dmFyIGU9dC5kZWxldGVTaGFkZXIuYmluZCh0KTtYKGMpLmZvckVhY2goZSksYz17fSxYKHUpLmZvckVhY2goZSksdT17fSxmLmZvckVhY2goZnVuY3Rpb24oZSl7dC5kZWxldGVQcm9ncmFtKGUucHJvZ3JhbSl9KSxmLmxlbmd0aD0wLGg9e30sci5zaGFkZXJDb3VudD0wfSxwcm9ncmFtOmZ1bmN0aW9uKHQsZSxuKXt2YXIgaT1oW2VdO2l8fChpPWhbZV09e30pO3ZhciBhPWlbdF07cmV0dXJuIGF8fChhPW5ldyBzKGUsdCksci5zaGFkZXJDb3VudCsrLGwoYSksaVt0XT1hLGYucHVzaChhKSksYX0scmVzdG9yZTpmdW5jdGlvbigpe2M9e30sdT17fTtmb3IodmFyIHQ9MDt0PGYubGVuZ3RoOysrdClsKGZbdF0pfSxzaGFkZXI6byxmcmFnOi0xLHZlcnQ6LTF9fWZ1bmN0aW9uIEUodCxlLHIsbixpLGEsbyl7ZnVuY3Rpb24gcyhpKXt2YXIgYTthPW51bGw9PT1lLm5leHQ/NTEyMTplLm5leHQuY29sb3JBdHRhY2htZW50c1swXS50ZXh0dXJlLl90ZXh0dXJlLnR5cGU7dmFyIG89MCxzPTAsbD1uLmZyYW1lYnVmZmVyV2lkdGgsYz1uLmZyYW1lYnVmZmVySGVpZ2h0LHU9bnVsbDtyZXR1cm4gWShpKT91PWk6aSYmKG89MHxpLngscz0wfGkueSxsPTB8KGkud2lkdGh8fG4uZnJhbWVidWZmZXJXaWR0aC1vKSxjPTB8KGkuaGVpZ2h0fHxuLmZyYW1lYnVmZmVySGVpZ2h0LXMpLHU9aS5kYXRhfHxudWxsKSxyKCksaT1sKmMqNCx1fHwoNTEyMT09PWE/dT1uZXcgVWludDhBcnJheShpKTo1MTI2PT09YSYmKHU9dXx8bmV3IEZsb2F0MzJBcnJheShpKSkpLHQucGl4ZWxTdG9yZWkoMzMzMyw0KSx0LnJlYWRQaXhlbHMobyxzLGwsYyw2NDA4LGEsdSksdX1yZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmcmFtZWJ1ZmZlciJpbiB0P2Z1bmN0aW9uKHQpe3ZhciByO3JldHVybiBlLnNldEZCTyh7ZnJhbWVidWZmZXI6dC5mcmFtZWJ1ZmZlcn0sZnVuY3Rpb24oKXtyPXModCl9KSxyfSh0KTpzKHQpfX1mdW5jdGlvbiBDKHQpe3JldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0KX1mdW5jdGlvbiBMKHQpe3JldHVybiBDKHQpLmpvaW4oIiIpfWZ1bmN0aW9uIHooKXtmdW5jdGlvbiB0KCl7dmFyIHQ9W10sZT1bXTtyZXR1cm4gaihmdW5jdGlvbigpe3QucHVzaC5hcHBseSh0LEMoYXJndW1lbnRzKSl9LHtkZWY6ZnVuY3Rpb24oKXt2YXIgbj0idiIrcisrO3JldHVybiBlLnB1c2gobiksMDxhcmd1bWVudHMubGVuZ3RoJiYodC5wdXNoKG4sIj0iKSx0LnB1c2guYXBwbHkodCxDKGFyZ3VtZW50cykpLHQucHVzaCgiOyIpKSxufSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiBMKFswPGUubGVuZ3RoPyJ2YXIgIitlKyI7IjoiIixMKHQpXSl9fSl9ZnVuY3Rpb24gZSgpe2Z1bmN0aW9uIGUodCxlKXtuKHQsZSwiPSIsci5kZWYodCxlKSwiOyIpfXZhciByPXQoKSxuPXQoKSxpPXIudG9TdHJpbmcsYT1uLnRvU3RyaW5nO3JldHVybiBqKGZ1bmN0aW9uKCl7ci5hcHBseShyLEMoYXJndW1lbnRzKSl9LHtkZWY6ci5kZWYsZW50cnk6cixleGl0Om4sc2F2ZTplLHNldDpmdW5jdGlvbih0LG4saSl7ZSh0LG4pLHIodCxuLCI9IixpLCI7Iil9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIGkoKSthKCl9fSl9dmFyIHI9MCxuPVtdLGk9W10sYT10KCksbz17fTtyZXR1cm57Z2xvYmFsOmEsbGluazpmdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPGkubGVuZ3RoOysrZSlpZihpW2VdPT09dClyZXR1cm4gbltlXTtyZXR1cm4gZT0iZyIrcisrLG4ucHVzaChlKSxpLnB1c2godCksZX0sYmxvY2s6dCxwcm9jOmZ1bmN0aW9uKHQscil7ZnVuY3Rpb24gbigpe3ZhciB0PSJhIitpLmxlbmd0aDtyZXR1cm4gaS5wdXNoKHQpLHR9dmFyIGk9W107cj1yfHwwO2Zvcih2YXIgYT0wO2E8cjsrK2EpbigpO3ZhciBzPShhPWUoKSkudG9TdHJpbmc7cmV0dXJuIG9bdF09aihhLHthcmc6bix0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiBMKFsiZnVuY3Rpb24oIixpLmpvaW4oKSwiKXsiLHMoKSwifSJdKX19KX0sc2NvcGU6ZSxjb25kOmZ1bmN0aW9uKCl7dmFyIHQ9TChhcmd1bWVudHMpLHI9ZSgpLG49ZSgpLGk9ci50b1N0cmluZyxhPW4udG9TdHJpbmc7cmV0dXJuIGoocix7dGhlbjpmdW5jdGlvbigpe3JldHVybiByLmFwcGx5KHIsQyhhcmd1bWVudHMpKSx0aGlzfSxlbHNlOmZ1bmN0aW9uKCl7cmV0dXJuIG4uYXBwbHkobixDKGFyZ3VtZW50cykpLHRoaXN9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7dmFyIGU9YSgpO3JldHVybiBlJiYoZT0iZWxzZXsiK2UrIn0iKSxMKFsiaWYoIix0LCIpeyIsaSgpLCJ9IixlXSl9fSl9LGNvbXBpbGU6ZnVuY3Rpb24oKXt2YXIgdD1bJyJ1c2Ugc3RyaWN0IjsnLGEsInJldHVybiB7Il07T2JqZWN0LmtleXMobykuZm9yRWFjaChmdW5jdGlvbihlKXt0LnB1c2goJyInLGUsJyI6JyxvW2VdLnRvU3RyaW5nKCksIiwiKX0pLHQucHVzaCgifSIpO3ZhciBlPUwodCkucmVwbGFjZSgvOy9nLCI7XG4iKS5yZXBsYWNlKC99L2csIn1cbiIpLnJlcGxhY2UoL3svZywie1xuIik7cmV0dXJuIEZ1bmN0aW9uLmFwcGx5KG51bGwsbi5jb25jYXQoZSkpLmFwcGx5KG51bGwsaSl9fX1mdW5jdGlvbiBQKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpfHxZKHQpfHxsKHQpfWZ1bmN0aW9uIEkodCl7cmV0dXJuIHQuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiJ2aWV3cG9ydCI9PT10Py0xOiJ2aWV3cG9ydCI9PT1lPzE6dDxlPy0xOjF9KX1mdW5jdGlvbiBPKHQsZSxyLG4pe3RoaXMudGhpc0RlcD10LHRoaXMuY29udGV4dERlcD1lLHRoaXMucHJvcERlcD1yLHRoaXMuYXBwZW5kPW59ZnVuY3Rpb24gRCh0KXtyZXR1cm4gdCYmISh0LnRoaXNEZXB8fHQuY29udGV4dERlcHx8dC5wcm9wRGVwKX1mdW5jdGlvbiBSKHQpe3JldHVybiBuZXcgTyghMSwhMSwhMSx0KX1mdW5jdGlvbiBCKHQsZSl7dmFyIHI9dC50eXBlO3JldHVybiAwPT09cj9uZXcgTyghMCwxPD0ocj10LmRhdGEubGVuZ3RoKSwyPD1yLGUpOjQ9PT1yP25ldyBPKChyPXQuZGF0YSkudGhpc0RlcCxyLmNvbnRleHREZXAsci5wcm9wRGVwLGUpOm5ldyBPKDM9PT1yLDI9PT1yLDE9PT1yLGUpfWZ1bmN0aW9uIEYodCxlLHIsbixpLG8scyxsLGMsdSxoLGYscCxkLGcpe2Z1bmN0aW9uIHYodCl7cmV0dXJuIHQucmVwbGFjZSgiLiIsIl8iKX1mdW5jdGlvbiB5KHQsZSxyKXt2YXIgbj12KHQpO250LnB1c2godCksZXRbbl09dHRbbl09ISFyLGl0W25dPWV9ZnVuY3Rpb24geCh0LGUscil7dmFyIG49dih0KTtudC5wdXNoKHQpLEFycmF5LmlzQXJyYXkocik/KHR0W25dPXIuc2xpY2UoKSxldFtuXT1yLnNsaWNlKCkpOnR0W25dPWV0W25dPXIsYXRbbl09ZX1mdW5jdGlvbiBiKCl7dmFyIHQ9eigpLHI9dC5saW5rLG49dC5nbG9iYWw7dC5pZD1sdCsrLHQuYmF0Y2hJZD0iMCI7dmFyIGk9cihvdCksYT10LnNoYXJlZD17cHJvcHM6ImEwIn07T2JqZWN0LmtleXMob3QpLmZvckVhY2goZnVuY3Rpb24odCl7YVt0XT1uLmRlZihpLCIuIix0KX0pO3ZhciBvPXQubmV4dD17fSxzPXQuY3VycmVudD17fTtPYmplY3Qua2V5cyhhdCkuZm9yRWFjaChmdW5jdGlvbih0KXtBcnJheS5pc0FycmF5KHR0W3RdKSYmKG9bdF09bi5kZWYoYS5uZXh0LCIuIix0KSxzW3RdPW4uZGVmKGEuY3VycmVudCwiLiIsdCkpfSk7dmFyIGw9dC5jb25zdGFudHM9e307T2JqZWN0LmtleXMoc3QpLmZvckVhY2goZnVuY3Rpb24odCl7bFt0XT1uLmRlZihKU09OLnN0cmluZ2lmeShzdFt0XSkpfSksdC5pbnZva2U9ZnVuY3Rpb24oZSxuKXtzd2l0Y2gobi50eXBlKXtjYXNlIDA6dmFyIGk9WyJ0aGlzIixhLmNvbnRleHQsYS5wcm9wcyx0LmJhdGNoSWRdO3JldHVybiBlLmRlZihyKG4uZGF0YSksIi5jYWxsKCIsaS5zbGljZSgwLE1hdGgubWF4KG4uZGF0YS5sZW5ndGgrMSw0KSksIikiKTtjYXNlIDE6cmV0dXJuIGUuZGVmKGEucHJvcHMsbi5kYXRhKTtjYXNlIDI6cmV0dXJuIGUuZGVmKGEuY29udGV4dCxuLmRhdGEpO2Nhc2UgMzpyZXR1cm4gZS5kZWYoInRoaXMiLG4uZGF0YSk7Y2FzZSA0OnJldHVybiBuLmRhdGEuYXBwZW5kKHQsZSksbi5kYXRhLnJlZn19LHQuYXR0cmliQ2FjaGU9e307dmFyIGM9e307cmV0dXJuIHQuc2NvcGVBdHRyaWI9ZnVuY3Rpb24odCl7aWYoKHQ9ZS5pZCh0KSlpbiBjKXJldHVybiBjW3RdO3ZhciBuPXUuc2NvcGVbdF07cmV0dXJuIG58fChuPXUuc2NvcGVbdF09bmV3IFopLGNbdF09cihuKX0sdH1mdW5jdGlvbiBfKHQsZSl7dmFyIHI9dC5zdGF0aWMsbj10LmR5bmFtaWM7aWYoImZyYW1lYnVmZmVyImluIHIpe3ZhciBpPXIuZnJhbWVidWZmZXI7cmV0dXJuIGk/KGk9bC5nZXRGcmFtZWJ1ZmZlcihpKSxSKGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5saW5rKGkpLG49dC5zaGFyZWQ7cmV0dXJuIGUuc2V0KG4uZnJhbWVidWZmZXIsIi5uZXh0IixyKSxuPW4uY29udGV4dCxlLnNldChuLCIuZnJhbWVidWZmZXJXaWR0aCIscisiLndpZHRoIiksZS5zZXQobiwiLmZyYW1lYnVmZmVySGVpZ2h0IixyKyIuaGVpZ2h0Iikscn0pKTpSKGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5zaGFyZWQ7cmV0dXJuIGUuc2V0KHIuZnJhbWVidWZmZXIsIi5uZXh0IiwibnVsbCIpLHI9ci5jb250ZXh0LGUuc2V0KHIsIi5mcmFtZWJ1ZmZlcldpZHRoIixyKyIuZHJhd2luZ0J1ZmZlcldpZHRoIiksZS5zZXQociwiLmZyYW1lYnVmZmVySGVpZ2h0IixyKyIuZHJhd2luZ0J1ZmZlckhlaWdodCIpLCJudWxsIn0pfWlmKCJmcmFtZWJ1ZmZlciJpbiBuKXt2YXIgYT1uLmZyYW1lYnVmZmVyO3JldHVybiBCKGEsZnVuY3Rpb24odCxlKXt2YXIgcj10Lmludm9rZShlLGEpLG49dC5zaGFyZWQsaT1uLmZyYW1lYnVmZmVyO3I9ZS5kZWYoaSwiLmdldEZyYW1lYnVmZmVyKCIsciwiKSIpO3JldHVybiBlLnNldChpLCIubmV4dCIsciksbj1uLmNvbnRleHQsZS5zZXQobiwiLmZyYW1lYnVmZmVyV2lkdGgiLHIrIj8iK3IrIi53aWR0aDoiK24rIi5kcmF3aW5nQnVmZmVyV2lkdGgiKSxlLnNldChuLCIuZnJhbWVidWZmZXJIZWlnaHQiLHIrIj8iK3IrIi5oZWlnaHQ6IituKyIuZHJhd2luZ0J1ZmZlckhlaWdodCIpLHJ9KX1yZXR1cm4gbnVsbH1mdW5jdGlvbiB3KHQpe2Z1bmN0aW9uIHIodCl7aWYodCBpbiBuKXt2YXIgcj1lLmlkKG5bdF0pO3JldHVybih0PVIoZnVuY3Rpb24oKXtyZXR1cm4gcn0pKS5pZD1yLHR9aWYodCBpbiBpKXt2YXIgYT1pW3RdO3JldHVybiBCKGEsZnVuY3Rpb24odCxlKXt2YXIgcj10Lmludm9rZShlLGEpO3JldHVybiBlLmRlZih0LnNoYXJlZC5zdHJpbmdzLCIuaWQoIixyLCIpIil9KX1yZXR1cm4gbnVsbH12YXIgbj10LnN0YXRpYyxpPXQuZHluYW1pYyxhPXIoImZyYWciKSxvPXIoInZlcnQiKSxzPW51bGw7cmV0dXJuIEQoYSkmJkQobyk/KHM9aC5wcm9ncmFtKG8uaWQsYS5pZCksdD1SKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubGluayhzKX0pKTp0PW5ldyBPKGEmJmEudGhpc0RlcHx8byYmby50aGlzRGVwLGEmJmEuY29udGV4dERlcHx8byYmby5jb250ZXh0RGVwLGEmJmEucHJvcERlcHx8byYmby5wcm9wRGVwLGZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPXQuc2hhcmVkLnNoYWRlcjtyZXR1cm4gcj1hP2EuYXBwZW5kKHQsZSk6ZS5kZWYoaSwiLiIsImZyYWciKSxuPW8/by5hcHBlbmQodCxlKTplLmRlZihpLCIuIiwidmVydCIpLGUuZGVmKGkrIi5wcm9ncmFtKCIrbisiLCIrcisiKSIpfSkse2ZyYWc6YSx2ZXJ0Om8scHJvZ1Zhcjp0LHByb2dyYW06c319ZnVuY3Rpb24gayh0LGUpe2Z1bmN0aW9uIHIodCxlKXtpZih0IGluIG4pe3ZhciByPTB8blt0XTtyZXR1cm4gUihmdW5jdGlvbih0LG4pe3JldHVybiBlJiYodC5PRkZTRVQ9cikscn0pfWlmKHQgaW4gaSl7dmFyIG89aVt0XTtyZXR1cm4gQihvLGZ1bmN0aW9uKHQscil7dmFyIG49dC5pbnZva2UocixvKTtyZXR1cm4gZSYmKHQuT0ZGU0VUPW4pLG59KX1yZXR1cm4gZSYmYT9SKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuT0ZGU0VUPSIwIiwwfSk6bnVsbH12YXIgbj10LnN0YXRpYyxpPXQuZHluYW1pYyxhPWZ1bmN0aW9uKCl7aWYoImVsZW1lbnRzImluIG4pe3ZhciB0PW4uZWxlbWVudHM7UCh0KT90PW8uZ2V0RWxlbWVudHMoby5jcmVhdGUodCwhMCkpOnQmJih0PW8uZ2V0RWxlbWVudHModCkpO3ZhciBlPVIoZnVuY3Rpb24oZSxyKXtpZih0KXt2YXIgbj1lLmxpbmsodCk7cmV0dXJuIGUuRUxFTUVOVFM9bn1yZXR1cm4gZS5FTEVNRU5UUz1udWxsfSk7cmV0dXJuIGUudmFsdWU9dCxlfWlmKCJlbGVtZW50cyJpbiBpKXt2YXIgcj1pLmVsZW1lbnRzO3JldHVybiBCKHIsZnVuY3Rpb24odCxlKXt2YXIgbj0oaT10LnNoYXJlZCkuaXNCdWZmZXJBcmdzLGk9aS5lbGVtZW50cyxhPXQuaW52b2tlKGUsciksbz1lLmRlZigibnVsbCIpO249ZS5kZWYobiwiKCIsYSwiKSIpLGE9dC5jb25kKG4pLnRoZW4obywiPSIsaSwiLmNyZWF0ZVN0cmVhbSgiLGEsIik7IikuZWxzZShvLCI9IixpLCIuZ2V0RWxlbWVudHMoIixhLCIpOyIpO3JldHVybiBlLmVudHJ5KGEpLGUuZXhpdCh0LmNvbmQobikudGhlbihpLCIuZGVzdHJveVN0cmVhbSgiLG8sIik7IikpLHQuRUxFTUVOVFM9b30pfXJldHVybiBudWxsfSgpLHM9cigib2Zmc2V0IiwhMCk7cmV0dXJue2VsZW1lbnRzOmEscHJpbWl0aXZlOmZ1bmN0aW9uKCl7aWYoInByaW1pdGl2ZSJpbiBuKXt2YXIgdD1uLnByaW1pdGl2ZTtyZXR1cm4gUihmdW5jdGlvbihlLHIpe3JldHVybiBydFt0XX0pfWlmKCJwcmltaXRpdmUiaW4gaSl7dmFyIGU9aS5wcmltaXRpdmU7cmV0dXJuIEIoZSxmdW5jdGlvbih0LHIpe3ZhciBuPXQuY29uc3RhbnRzLnByaW1UeXBlcyxpPXQuaW52b2tlKHIsZSk7cmV0dXJuIHIuZGVmKG4sIlsiLGksIl0iKX0pfXJldHVybiBhP0QoYSk/YS52YWx1ZT9SKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZGVmKHQuRUxFTUVOVFMsIi5wcmltVHlwZSIpfSk6UihmdW5jdGlvbigpe3JldHVybiA0fSk6bmV3IE8oYS50aGlzRGVwLGEuY29udGV4dERlcCxhLnByb3BEZXAsZnVuY3Rpb24odCxlKXt2YXIgcj10LkVMRU1FTlRTO3JldHVybiBlLmRlZihyLCI/IixyLCIucHJpbVR5cGU6Iiw0KX0pOm51bGx9KCksY291bnQ6ZnVuY3Rpb24oKXtpZigiY291bnQiaW4gbil7dmFyIHQ9MHxuLmNvdW50O3JldHVybiBSKGZ1bmN0aW9uKCl7cmV0dXJuIHR9KX1pZigiY291bnQiaW4gaSl7dmFyIGU9aS5jb3VudDtyZXR1cm4gQihlLGZ1bmN0aW9uKHQscil7cmV0dXJuIHQuaW52b2tlKHIsZSl9KX1yZXR1cm4gYT9EKGEpP2E/cz9uZXcgTyhzLnRoaXNEZXAscy5jb250ZXh0RGVwLHMucHJvcERlcCxmdW5jdGlvbih0LGUpe3JldHVybiBlLmRlZih0LkVMRU1FTlRTLCIudmVydENvdW50LSIsdC5PRkZTRVQpfSk6UihmdW5jdGlvbih0LGUpe3JldHVybiBlLmRlZih0LkVMRU1FTlRTLCIudmVydENvdW50Iil9KTpSKGZ1bmN0aW9uKCl7cmV0dXJuLTF9KTpuZXcgTyhhLnRoaXNEZXB8fHMudGhpc0RlcCxhLmNvbnRleHREZXB8fHMuY29udGV4dERlcCxhLnByb3BEZXB8fHMucHJvcERlcCxmdW5jdGlvbih0LGUpe3ZhciByPXQuRUxFTUVOVFM7cmV0dXJuIHQuT0ZGU0VUP2UuZGVmKHIsIj8iLHIsIi52ZXJ0Q291bnQtIix0Lk9GRlNFVCwiOi0xIik6ZS5kZWYociwiPyIsciwiLnZlcnRDb3VudDotMSIpfSk6bnVsbH0oKSxpbnN0YW5jZXM6cigiaW5zdGFuY2VzIiwhMSksb2Zmc2V0OnN9fWZ1bmN0aW9uIE0odCxyKXt2YXIgbj10LnN0YXRpYyxhPXQuZHluYW1pYyxvPXt9O3JldHVybiBPYmplY3Qua2V5cyhuKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciByPW5bdF0sYT1lLmlkKHQpLHM9bmV3IFo7aWYoUChyKSlzLnN0YXRlPTEscy5idWZmZXI9aS5nZXRCdWZmZXIoaS5jcmVhdGUociwzNDk2MiwhMSwhMCkpLHMudHlwZT0wO2Vsc2UgaWYoYz1pLmdldEJ1ZmZlcihyKSlzLnN0YXRlPTEscy5idWZmZXI9YyxzLnR5cGU9MDtlbHNlIGlmKCJjb25zdGFudCJpbiByKXt2YXIgbD1yLmNvbnN0YW50O3MuYnVmZmVyPSJudWxsIixzLnN0YXRlPTIsIm51bWJlciI9PXR5cGVvZiBsP3MueD1sOmJ0LmZvckVhY2goZnVuY3Rpb24odCxlKXtlPGwubGVuZ3RoJiYoc1t0XT1sW2VdKX0pfWVsc2V7dmFyIGM9UChyLmJ1ZmZlcik/aS5nZXRCdWZmZXIoaS5jcmVhdGUoci5idWZmZXIsMzQ5NjIsITEsITApKTppLmdldEJ1ZmZlcihyLmJ1ZmZlciksdT0wfHIub2Zmc2V0LGg9MHxyLnN0cmlkZSxmPTB8ci5zaXplLHA9ISFyLm5vcm1hbGl6ZWQsZD0wOyJ0eXBlImluIHImJihkPUpbci50eXBlXSkscj0wfHIuZGl2aXNvcixzLmJ1ZmZlcj1jLHMuc3RhdGU9MSxzLnNpemU9ZixzLm5vcm1hbGl6ZWQ9cCxzLnR5cGU9ZHx8Yy5kdHlwZSxzLm9mZnNldD11LHMuc3RyaWRlPWgscy5kaXZpc29yPXJ9b1t0XT1SKGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5hdHRyaWJDYWNoZTtpZihhIGluIHIpcmV0dXJuIHJbYV07dmFyIG49e2lzU3RyZWFtOiExfTtyZXR1cm4gT2JqZWN0LmtleXMocykuZm9yRWFjaChmdW5jdGlvbih0KXtuW3RdPXNbdF19KSxzLmJ1ZmZlciYmKG4uYnVmZmVyPXQubGluayhzLmJ1ZmZlciksbi50eXBlPW4udHlwZXx8bi5idWZmZXIrIi5kdHlwZSIpLHJbYV09bn0pfSksT2JqZWN0LmtleXMoYSkuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT1hW3RdO29bdF09QihlLGZ1bmN0aW9uKHQscil7ZnVuY3Rpb24gbih0KXtyKGxbdF0sIj0iLGksIi4iLHQsInwwOyIpfXZhciBpPXQuaW52b2tlKHIsZSksYT10LnNoYXJlZCxvPWEuaXNCdWZmZXJBcmdzLHM9YS5idWZmZXIsbD17aXNTdHJlYW06ci5kZWYoITEpfSxjPW5ldyBaO2Muc3RhdGU9MSxPYmplY3Qua2V5cyhjKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2xbdF09ci5kZWYoIiIrY1t0XSl9KTt2YXIgdT1sLmJ1ZmZlcixoPWwudHlwZTtyZXR1cm4gcigiaWYoIixvLCIoIixpLCIpKXsiLGwuaXNTdHJlYW0sIj10cnVlOyIsdSwiPSIscywiLmNyZWF0ZVN0cmVhbSgiLDM0OTYyLCIsIixpLCIpOyIsaCwiPSIsdSwiLmR0eXBlOyIsIn1lbHNleyIsdSwiPSIscywiLmdldEJ1ZmZlcigiLGksIik7IiwiaWYoIix1LCIpeyIsaCwiPSIsdSwiLmR0eXBlOyIsJ31lbHNlIGlmKCJjb25zdGFudCIgaW4gJyxpLCIpeyIsbC5zdGF0ZSwiPSIsMiwiOyIsImlmKHR5cGVvZiAiK2krJy5jb25zdGFudCA9PT0gIm51bWJlciIpeycsbFtidFswXV0sIj0iLGksIi5jb25zdGFudDsiLGJ0LnNsaWNlKDEpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gbFt0XX0pLmpvaW4oIj0iKSwiPTA7IiwifWVsc2V7IixidC5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gbFt0XSsiPSIraSsiLmNvbnN0YW50Lmxlbmd0aD4iK2UrIj8iK2krIi5jb25zdGFudFsiK2UrIl06MDsifSkuam9pbigiIiksIn19ZWxzZXsiLCJpZigiLG8sIigiLGksIi5idWZmZXIpKXsiLHUsIj0iLHMsIi5jcmVhdGVTdHJlYW0oIiwzNDk2MiwiLCIsaSwiLmJ1ZmZlcik7IiwifWVsc2V7Iix1LCI9IixzLCIuZ2V0QnVmZmVyKCIsaSwiLmJ1ZmZlcik7IiwifSIsaCwnPSJ0eXBlIiBpbiAnLGksIj8iLGEuZ2xUeXBlcywiWyIsaSwiLnR5cGVdOiIsdSwiLmR0eXBlOyIsbC5ub3JtYWxpemVkLCI9ISEiLGksIi5ub3JtYWxpemVkOyIpLG4oInNpemUiKSxuKCJvZmZzZXQiKSxuKCJzdHJpZGUiKSxuKCJkaXZpc29yIikscigifX0iKSxyLmV4aXQoImlmKCIsbC5pc1N0cmVhbSwiKXsiLHMsIi5kZXN0cm95U3RyZWFtKCIsdSwiKTsiLCJ9IiksbH0pfSksb31mdW5jdGlvbiBBKHQsZSxyLG4saSl7dmFyIG89Xyh0KSxzPWZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQpe2lmKHQgaW4gaSl7dmFyIHI9aVt0XTt0PSEwO3ZhciBuLG8scz0wfHIueCxsPTB8ci55O3JldHVybiJ3aWR0aCJpbiByP249MHxyLndpZHRoOnQ9ITEsImhlaWdodCJpbiByP289MHxyLmhlaWdodDp0PSExLG5ldyBPKCF0JiZlJiZlLnRoaXNEZXAsIXQmJmUmJmUuY29udGV4dERlcCwhdCYmZSYmZS5wcm9wRGVwLGZ1bmN0aW9uKHQsZSl7dmFyIGk9dC5zaGFyZWQuY29udGV4dCxhPW47IndpZHRoImluIHJ8fChhPWUuZGVmKGksIi4iLCJmcmFtZWJ1ZmZlcldpZHRoIiwiLSIscykpO3ZhciBjPW87cmV0dXJuImhlaWdodCJpbiByfHwoYz1lLmRlZihpLCIuIiwiZnJhbWVidWZmZXJIZWlnaHQiLCItIixsKSksW3MsbCxhLGNdfSl9aWYodCBpbiBhKXt2YXIgYz1hW3RdO3JldHVybiB0PUIoYyxmdW5jdGlvbih0LGUpe3ZhciByPXQuaW52b2tlKGUsYyksbj10LnNoYXJlZC5jb250ZXh0LGk9ZS5kZWYociwiLnh8MCIpLGE9ZS5kZWYociwiLnl8MCIpO3JldHVybltpLGEsZS5kZWYoJyJ3aWR0aCIgaW4gJyxyLCI/IixyLCIud2lkdGh8MDoiLCIoIixuLCIuIiwiZnJhbWVidWZmZXJXaWR0aCIsIi0iLGksIikiKSxyPWUuZGVmKCciaGVpZ2h0IiBpbiAnLHIsIj8iLHIsIi5oZWlnaHR8MDoiLCIoIixuLCIuIiwiZnJhbWVidWZmZXJIZWlnaHQiLCItIixhLCIpIildfSksZSYmKHQudGhpc0RlcD10LnRoaXNEZXB8fGUudGhpc0RlcCx0LmNvbnRleHREZXA9dC5jb250ZXh0RGVwfHxlLmNvbnRleHREZXAsdC5wcm9wRGVwPXQucHJvcERlcHx8ZS5wcm9wRGVwKSx0fXJldHVybiBlP25ldyBPKGUudGhpc0RlcCxlLmNvbnRleHREZXAsZS5wcm9wRGVwLGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5zaGFyZWQuY29udGV4dDtyZXR1cm5bMCwwLGUuZGVmKHIsIi4iLCJmcmFtZWJ1ZmZlcldpZHRoIiksZS5kZWYociwiLiIsImZyYW1lYnVmZmVySGVpZ2h0IildfSk6bnVsbH12YXIgaT10LnN0YXRpYyxhPXQuZHluYW1pYztpZih0PW4oInZpZXdwb3J0Iikpe3ZhciBvPXQ7dD1uZXcgTyh0LnRoaXNEZXAsdC5jb250ZXh0RGVwLHQucHJvcERlcCxmdW5jdGlvbih0LGUpe3ZhciByPW8uYXBwZW5kKHQsZSksbj10LnNoYXJlZC5jb250ZXh0O3JldHVybiBlLnNldChuLCIudmlld3BvcnRXaWR0aCIsclsyXSksZS5zZXQobiwiLnZpZXdwb3J0SGVpZ2h0IixyWzNdKSxyfSl9cmV0dXJue3ZpZXdwb3J0OnQsc2Npc3Nvcl9ib3g6bigic2Npc3Nvci5ib3giKX19KHQsbyksbD1rKHQpLGM9ZnVuY3Rpb24odCxlKXt2YXIgcj10LnN0YXRpYyxuPXQuZHluYW1pYyxpPXt9O3JldHVybiBudC5mb3JFYWNoKGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxhKXtpZih0IGluIHIpe3ZhciBzPWUoclt0XSk7aVtvXT1SKGZ1bmN0aW9uKCl7cmV0dXJuIHN9KX1lbHNlIGlmKHQgaW4gbil7dmFyIGw9blt0XTtpW29dPUIobCxmdW5jdGlvbih0LGUpe3JldHVybiBhKHQsZSx0Lmludm9rZShlLGwpKX0pfX12YXIgbz12KHQpO3N3aXRjaCh0KXtjYXNlImN1bGwuZW5hYmxlIjpjYXNlImJsZW5kLmVuYWJsZSI6Y2FzZSJkaXRoZXIiOmNhc2Uic3RlbmNpbC5lbmFibGUiOmNhc2UiZGVwdGguZW5hYmxlIjpjYXNlInNjaXNzb3IuZW5hYmxlIjpjYXNlInBvbHlnb25PZmZzZXQuZW5hYmxlIjpjYXNlInNhbXBsZS5hbHBoYSI6Y2FzZSJzYW1wbGUuZW5hYmxlIjpjYXNlImRlcHRoLm1hc2siOnJldHVybiBlKGZ1bmN0aW9uKHQpe3JldHVybiB0fSxmdW5jdGlvbih0LGUscil7cmV0dXJuIHJ9KTtjYXNlImRlcHRoLmZ1bmMiOnJldHVybiBlKGZ1bmN0aW9uKHQpe3JldHVybiBrdFt0XX0sZnVuY3Rpb24odCxlLHIpe3JldHVybiBlLmRlZih0LmNvbnN0YW50cy5jb21wYXJlRnVuY3MsIlsiLHIsIl0iKX0pO2Nhc2UiZGVwdGgucmFuZ2UiOnJldHVybiBlKGZ1bmN0aW9uKHQpe3JldHVybiB0fSxmdW5jdGlvbih0LGUscil7cmV0dXJuW2UuZGVmKCIrIixyLCJbMF0iKSxlPWUuZGVmKCIrIixyLCJbMV0iKV19KTtjYXNlImJsZW5kLmZ1bmMiOnJldHVybiBlKGZ1bmN0aW9uKHQpe3JldHVyblt3dFsic3JjUkdCImluIHQ/dC5zcmNSR0I6dC5zcmNdLHd0WyJkc3RSR0IiaW4gdD90LmRzdFJHQjp0LmRzdF0sd3RbInNyY0FscGhhImluIHQ/dC5zcmNBbHBoYTp0LnNyY10sd3RbImRzdEFscGhhImluIHQ/dC5kc3RBbHBoYTp0LmRzdF1dfSxmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LG4pe3JldHVybiBlLmRlZignIicsdCxuLCciIGluICcsciwiPyIsciwiLiIsdCxuLCI6IixyLCIuIix0KX10PXQuY29uc3RhbnRzLmJsZW5kRnVuY3M7dmFyIGk9bigic3JjIiwiUkdCIiksYT1uKCJkc3QiLCJSR0IiKSxvPShpPWUuZGVmKHQsIlsiLGksIl0iKSxlLmRlZih0LCJbIixuKCJzcmMiLCJBbHBoYSIpLCJdIikpO3JldHVybltpLGE9ZS5kZWYodCwiWyIsYSwiXSIpLG8sdD1lLmRlZih0LCJbIixuKCJkc3QiLCJBbHBoYSIpLCJdIildfSk7Y2FzZSJibGVuZC5lcXVhdGlvbiI6cmV0dXJuIGUoZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P1skW3RdLCRbdF1dOiJvYmplY3QiPT10eXBlb2YgdD9bJFt0LnJnYl0sJFt0LmFscGhhXV06dm9pZCAwfSxmdW5jdGlvbih0LGUscil7dmFyIG49dC5jb25zdGFudHMuYmxlbmRFcXVhdGlvbnMsaT1lLmRlZigpLGE9ZS5kZWYoKTtyZXR1cm4odD10LmNvbmQoInR5cGVvZiAiLHIsJz09PSJzdHJpbmciJykpLnRoZW4oaSwiPSIsYSwiPSIsbiwiWyIsciwiXTsiKSx0LmVsc2UoaSwiPSIsbiwiWyIsciwiLnJnYl07IixhLCI9IixuLCJbIixyLCIuYWxwaGFdOyIpLGUodCksW2ksYV19KTtjYXNlImJsZW5kLmNvbG9yIjpyZXR1cm4gZShmdW5jdGlvbih0KXtyZXR1cm4gYSg0LGZ1bmN0aW9uKGUpe3JldHVybit0W2VdfSl9LGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gYSg0LGZ1bmN0aW9uKHQpe3JldHVybiBlLmRlZigiKyIsciwiWyIsdCwiXSIpfSl9KTtjYXNlInN0ZW5jaWwubWFzayI6cmV0dXJuIGUoZnVuY3Rpb24odCl7cmV0dXJuIDB8dH0sZnVuY3Rpb24odCxlLHIpe3JldHVybiBlLmRlZihyLCJ8MCIpfSk7Y2FzZSJzdGVuY2lsLmZ1bmMiOnJldHVybiBlKGZ1bmN0aW9uKHQpe3JldHVybltrdFt0LmNtcHx8ImtlZXAiXSx0LnJlZnx8MCwibWFzayJpbiB0P3QubWFzazotMV19LGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm5bdD1lLmRlZignImNtcCIgaW4gJyxyLCI/Iix0LmNvbnN0YW50cy5jb21wYXJlRnVuY3MsIlsiLHIsIi5jbXBdIiwiOiIsNzY4MCksZS5kZWYociwiLnJlZnwwIiksZT1lLmRlZignIm1hc2siIGluICcsciwiPyIsciwiLm1hc2t8MDotMSIpXX0pO2Nhc2Uic3RlbmNpbC5vcEZyb250IjpjYXNlInN0ZW5jaWwub3BCYWNrIjpyZXR1cm4gZShmdW5jdGlvbihlKXtyZXR1cm5bInN0ZW5jaWwub3BCYWNrIj09PXQ/MTAyOToxMDI4LE10W2UuZmFpbHx8ImtlZXAiXSxNdFtlLnpmYWlsfHwia2VlcCJdLE10W2UuenBhc3N8fCJrZWVwIl1dfSxmdW5jdGlvbihlLHIsbil7ZnVuY3Rpb24gaSh0KXtyZXR1cm4gci5kZWYoJyInLHQsJyIgaW4gJyxuLCI/IixhLCJbIixuLCIuIix0LCJdOiIsNzY4MCl9dmFyIGE9ZS5jb25zdGFudHMuc3RlbmNpbE9wcztyZXR1cm5bInN0ZW5jaWwub3BCYWNrIj09PXQ/MTAyOToxMDI4LGkoImZhaWwiKSxpKCJ6ZmFpbCIpLGkoInpwYXNzIildfSk7Y2FzZSJwb2x5Z29uT2Zmc2V0Lm9mZnNldCI6cmV0dXJuIGUoZnVuY3Rpb24odCl7cmV0dXJuWzB8dC5mYWN0b3IsMHx0LnVuaXRzXX0sZnVuY3Rpb24odCxlLHIpe3JldHVybltlLmRlZihyLCIuZmFjdG9yfDAiKSxlPWUuZGVmKHIsIi51bml0c3wwIildfSk7Y2FzZSJjdWxsLmZhY2UiOnJldHVybiBlKGZ1bmN0aW9uKHQpe3ZhciBlPTA7cmV0dXJuImZyb250Ij09PXQ/ZT0xMDI4OiJiYWNrIj09PXQmJihlPTEwMjkpLGV9LGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZS5kZWYociwnPT09ImZyb250Ij8nLDEwMjgsIjoiLDEwMjkpfSk7Y2FzZSJsaW5lV2lkdGgiOnJldHVybiBlKGZ1bmN0aW9uKHQpe3JldHVybiB0fSxmdW5jdGlvbih0LGUscil7cmV0dXJuIHJ9KTtjYXNlImZyb250RmFjZSI6cmV0dXJuIGUoZnVuY3Rpb24odCl7cmV0dXJuIEF0W3RdfSxmdW5jdGlvbih0LGUscil7cmV0dXJuIGUuZGVmKHIrJz09PSJjdyI/MjMwNDoyMzA1Jyl9KTtjYXNlImNvbG9yTWFzayI6cmV0dXJuIGUoZnVuY3Rpb24odCl7cmV0dXJuIHQubWFwKGZ1bmN0aW9uKHQpe3JldHVybiEhdH0pfSxmdW5jdGlvbih0LGUscil7cmV0dXJuIGEoNCxmdW5jdGlvbih0KXtyZXR1cm4iISEiK3IrIlsiK3QrIl0ifSl9KTtjYXNlInNhbXBsZS5jb3ZlcmFnZSI6cmV0dXJuIGUoZnVuY3Rpb24odCl7cmV0dXJuWyJ2YWx1ZSJpbiB0P3QudmFsdWU6MSwhIXQuaW52ZXJ0XX0sZnVuY3Rpb24odCxlLHIpe3JldHVybltlLmRlZignInZhbHVlIiBpbiAnLHIsIj8rIixyLCIudmFsdWU6MSIpLGU9ZS5kZWYoIiEhIixyLCIuaW52ZXJ0IildfSl9fSksaX0odCksdT13KHQpLGg9cy52aWV3cG9ydDtyZXR1cm4gaCYmKGMudmlld3BvcnQ9aCksKHM9c1toPXYoInNjaXNzb3IuYm94IildKSYmKGNbaF09cyksKG89e2ZyYW1lYnVmZmVyOm8sZHJhdzpsLHNoYWRlcjp1LHN0YXRlOmMsZGlydHk6cz0wPE9iamVjdC5rZXlzKGMpLmxlbmd0aH0pLnByb2ZpbGU9ZnVuY3Rpb24odCl7dmFyIGUscj10LnN0YXRpYztpZih0PXQuZHluYW1pYywicHJvZmlsZSJpbiByKXt2YXIgbj0hIXIucHJvZmlsZTsoZT1SKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG59KSkuZW5hYmxlPW59ZWxzZSBpZigicHJvZmlsZSJpbiB0KXt2YXIgaT10LnByb2ZpbGU7ZT1CKGksZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5pbnZva2UoZSxpKX0pfXJldHVybiBlfSh0KSxvLnVuaWZvcm1zPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5zdGF0aWMsbj10LmR5bmFtaWMsaT17fTtyZXR1cm4gT2JqZWN0LmtleXMocikuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZSxuPXJbdF07aWYoIm51bWJlciI9PXR5cGVvZiBufHwiYm9vbGVhbiI9PXR5cGVvZiBuKWU9UihmdW5jdGlvbigpe3JldHVybiBufSk7ZWxzZSBpZigiZnVuY3Rpb24iPT10eXBlb2Ygbil7dmFyIG89bi5fcmVnbFR5cGU7InRleHR1cmUyZCI9PT1vfHwidGV4dHVyZUN1YmUiPT09bz9lPVIoZnVuY3Rpb24odCl7cmV0dXJuIHQubGluayhuKX0pOiJmcmFtZWJ1ZmZlciIhPT1vJiYiZnJhbWVidWZmZXJDdWJlIiE9PW98fChlPVIoZnVuY3Rpb24odCl7cmV0dXJuIHQubGluayhuLmNvbG9yWzBdKX0pKX1lbHNlIG0obikmJihlPVIoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2xvYmFsLmRlZigiWyIsYShuLmxlbmd0aCxmdW5jdGlvbih0KXtyZXR1cm4gblt0XX0pLCJdIil9KSk7ZS52YWx1ZT1uLGlbdF09ZX0pLE9iamVjdC5rZXlzKG4pLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9blt0XTtpW3RdPUIoZSxmdW5jdGlvbih0LHIpe3JldHVybiB0Lmludm9rZShyLGUpfSl9KSxpfShyKSxvLmF0dHJpYnV0ZXM9TShlKSxvLmNvbnRleHQ9ZnVuY3Rpb24odCl7dmFyIGU9dC5zdGF0aWMscj10LmR5bmFtaWMsbj17fTtyZXR1cm4gT2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgcj1lW3RdO25bdF09UihmdW5jdGlvbih0LGUpe3JldHVybiJudW1iZXIiPT10eXBlb2Ygcnx8ImJvb2xlYW4iPT10eXBlb2Ygcj8iIityOnQubGluayhyKX0pfSksT2JqZWN0LmtleXMocikuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT1yW3RdO25bdF09QihlLGZ1bmN0aW9uKHQscil7cmV0dXJuIHQuaW52b2tlKHIsZSl9KX0pLG59KG4pLG99ZnVuY3Rpb24gVCh0LGUscil7dmFyIG49dC5zaGFyZWQuY29udGV4dCxpPXQuc2NvcGUoKTtPYmplY3Qua2V5cyhyKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2Uuc2F2ZShuLCIuIithKSxpKG4sIi4iLGEsIj0iLHJbYV0uYXBwZW5kKHQsZSksIjsiKX0pLGUoaSl9ZnVuY3Rpb24gUyh0LGUscixuKXt2YXIgaSxhPShzPXQuc2hhcmVkKS5nbCxvPXMuZnJhbWVidWZmZXI7USYmKGk9ZS5kZWYocy5leHRlbnNpb25zLCIud2ViZ2xfZHJhd19idWZmZXJzIikpO3ZhciBzPShsPXQuY29uc3RhbnRzKS5kcmF3QnVmZmVyLGw9bC5iYWNrQnVmZmVyO3Q9cj9yLmFwcGVuZCh0LGUpOmUuZGVmKG8sIi5uZXh0Iiksbnx8ZSgiaWYoIix0LCIhPT0iLG8sIi5jdXIpeyIpLGUoImlmKCIsdCwiKXsiLGEsIi5iaW5kRnJhbWVidWZmZXIoIiwzNjE2MCwiLCIsdCwiLmZyYW1lYnVmZmVyKTsiKSxRJiZlKGksIi5kcmF3QnVmZmVyc1dFQkdMKCIscywiWyIsdCwiLmNvbG9yQXR0YWNobWVudHMubGVuZ3RoXSk7IiksZSgifWVsc2V7IixhLCIuYmluZEZyYW1lYnVmZmVyKCIsMzYxNjAsIixudWxsKTsiKSxRJiZlKGksIi5kcmF3QnVmZmVyc1dFQkdMKCIsbCwiKTsiKSxlKCJ9IixvLCIuY3VyPSIsdCwiOyIpLG58fGUoIn0iKX1mdW5jdGlvbiBFKHQsZSxyKXt2YXIgbj10LnNoYXJlZCxpPW4uZ2wsbz10LmN1cnJlbnQscz10Lm5leHQsbD1uLmN1cnJlbnQsYz1uLm5leHQsdT10LmNvbmQobCwiLmRpcnR5Iik7bnQuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgbixoO2lmKCEoKGU9dihlKSlpbiByLnN0YXRlKSlpZihlIGluIHMpe249c1tlXSxoPW9bZV07dmFyIGY9YSh0dFtlXS5sZW5ndGgsZnVuY3Rpb24odCl7cmV0dXJuIHUuZGVmKG4sIlsiLHQsIl0iKX0pO3UodC5jb25kKGYubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrIiE9PSIraCsiWyIrZSsiXSJ9KS5qb2luKCJ8fCIpKS50aGVuKGksIi4iLGF0W2VdLCIoIixmLCIpOyIsZi5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gaCsiWyIrZSsiXT0iK3R9KS5qb2luKCI7IiksIjsiKSl9ZWxzZSBuPXUuZGVmKGMsIi4iLGUpLGY9dC5jb25kKG4sIiE9PSIsbCwiLiIsZSksdShmKSxlIGluIGl0P2YodC5jb25kKG4pLnRoZW4oaSwiLmVuYWJsZSgiLGl0W2VdLCIpOyIpLmVsc2UoaSwiLmRpc2FibGUoIixpdFtlXSwiKTsiKSxsLCIuIixlLCI9IixuLCI7Iik6ZihpLCIuIixhdFtlXSwiKCIsbiwiKTsiLGwsIi4iLGUsIj0iLG4sIjsiKX0pLDA9PT1PYmplY3Qua2V5cyhyLnN0YXRlKS5sZW5ndGgmJnUobCwiLmRpcnR5PWZhbHNlOyIpLGUodSl9ZnVuY3Rpb24gQyh0LGUscixuKXt2YXIgaT10LnNoYXJlZCxhPXQuY3VycmVudCxvPWkuY3VycmVudCxzPWkuZ2w7SShPYmplY3Qua2V5cyhyKSkuZm9yRWFjaChmdW5jdGlvbihpKXt2YXIgbD1yW2ldO2lmKCFufHxuKGwpKXt2YXIgYz1sLmFwcGVuZCh0LGUpO2lmKGl0W2ldKXt2YXIgdT1pdFtpXTtEKGwpP2UocyxjPyIuZW5hYmxlKCI6Ii5kaXNhYmxlKCIsdSwiKTsiKTplKHQuY29uZChjKS50aGVuKHMsIi5lbmFibGUoIix1LCIpOyIpLmVsc2UocywiLmRpc2FibGUoIix1LCIpOyIpKSxlKG8sIi4iLGksIj0iLGMsIjsiKX1lbHNlIGlmKG0oYykpe3ZhciBoPWFbaV07ZShzLCIuIixhdFtpXSwiKCIsYywiKTsiLGMubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGgrIlsiK2UrIl09Iit0fSkuam9pbigiOyIpLCI7Iil9ZWxzZSBlKHMsIi4iLGF0W2ldLCIoIixjLCIpOyIsbywiLiIsaSwiPSIsYywiOyIpfX0pfWZ1bmN0aW9uIEwodCxlKXtLJiYodC5pbnN0YW5jaW5nPWUuZGVmKHQuc2hhcmVkLmV4dGVuc2lvbnMsIi5hbmdsZV9pbnN0YW5jZWRfYXJyYXlzIikpfWZ1bmN0aW9uIEYodCxlLHIsbixpKXtmdW5jdGlvbiBhKCl7cmV0dXJuInVuZGVmaW5lZCI9PXR5cGVvZiBwZXJmb3JtYW5jZT8iRGF0ZS5ub3coKSI6InBlcmZvcm1hbmNlLm5vdygpIn1mdW5jdGlvbiBvKHQpe3QoYz1lLmRlZigpLCI9IixhKCksIjsiKSwic3RyaW5nIj09dHlwZW9mIGk/dChmLCIuY291bnQrPSIsaSwiOyIpOnQoZiwiLmNvdW50Kys7IiksZCYmKG4/dCh1PWUuZGVmKCksIj0iLGcsIi5nZXROdW1QZW5kaW5nUXVlcmllcygpOyIpOnQoZywiLmJlZ2luUXVlcnkoIixmLCIpOyIpKX1mdW5jdGlvbiBzKHQpe3QoZiwiLmNwdVRpbWUrPSIsYSgpLCItIixjLCI7IiksZCYmKG4/dChnLCIucHVzaFNjb3BlU3RhdHMoIix1LCIsIixnLCIuZ2V0TnVtUGVuZGluZ1F1ZXJpZXMoKSwiLGYsIik7Iik6dChnLCIuZW5kUXVlcnkoKTsiKSl9ZnVuY3Rpb24gbCh0KXt2YXIgcj1lLmRlZihwLCIucHJvZmlsZSIpO2UocCwiLnByb2ZpbGU9Iix0LCI7IiksZS5leGl0KHAsIi5wcm9maWxlPSIsciwiOyIpfXZhciBjLHUsaD10LnNoYXJlZCxmPXQuc3RhdHMscD1oLmN1cnJlbnQsZz1oLnRpbWVyO2lmKHI9ci5wcm9maWxlKXtpZihEKHIpKXJldHVybiB2b2lkKHIuZW5hYmxlPyhvKGUpLHMoZS5leGl0KSxsKCJ0cnVlIikpOmwoImZhbHNlIikpO2wocj1yLmFwcGVuZCh0LGUpKX1lbHNlIHI9ZS5kZWYocCwiLnByb2ZpbGUiKTtvKGg9dC5ibG9jaygpKSxlKCJpZigiLHIsIil7IixoLCJ9Iikscyh0PXQuYmxvY2soKSksZS5leGl0KCJpZigiLHIsIil7Iix0LCJ9Iil9ZnVuY3Rpb24gTih0LGUscixuLGkpe2Z1bmN0aW9uIGEocixuLGkpe2Z1bmN0aW9uIGEoKXtlKCJpZighIix1LCIuYnVmZmVyKXsiLGwsIi5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSgiLGMsIik7fSIpO3ZhciByLGE9aS50eXBlO3I9aS5zaXplP2UuZGVmKGkuc2l6ZSwifHwiLG4pOm4sZSgiaWYoIix1LCIudHlwZSE9PSIsYSwifHwiLHUsIi5zaXplIT09IixyLCJ8fCIscC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHUrIi4iK3QrIiE9PSIraVt0XX0pLmpvaW4oInx8IiksIil7IixsLCIuYmluZEJ1ZmZlcigiLDM0OTYyLCIsIixoLCIuYnVmZmVyKTsiLGwsIi52ZXJ0ZXhBdHRyaWJQb2ludGVyKCIsW2MscixhLGkubm9ybWFsaXplZCxpLnN0cmlkZSxpLm9mZnNldF0sIik7Iix1LCIudHlwZT0iLGEsIjsiLHUsIi5zaXplPSIsciwiOyIscC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHUrIi4iK3QrIj0iK2lbdF0rIjsifSkuam9pbigiIiksIn0iKSxLJiYoYT1pLmRpdmlzb3IsZSgiaWYoIix1LCIuZGl2aXNvciE9PSIsYSwiKXsiLHQuaW5zdGFuY2luZywiLnZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRSgiLFtjLGFdLCIpOyIsdSwiLmRpdmlzb3I9IixhLCI7fSIpKX1mdW5jdGlvbiBzKCl7ZSgiaWYoIix1LCIuYnVmZmVyKXsiLGwsIi5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoIixjLCIpOyIsIn1pZigiLGJ0Lm1hcChmdW5jdGlvbih0LGUpe3JldHVybiB1KyIuIit0KyIhPT0iK2ZbZV19KS5qb2luKCJ8fCIpLCIpeyIsbCwiLnZlcnRleEF0dHJpYjRmKCIsYywiLCIsZiwiKTsiLGJ0Lm1hcChmdW5jdGlvbih0LGUpe3JldHVybiB1KyIuIit0KyI9IitmW2VdKyI7In0pLmpvaW4oIiIpLCJ9Iil9dmFyIGw9by5nbCxjPWUuZGVmKHIsIi5sb2NhdGlvbiIpLHU9ZS5kZWYoby5hdHRyaWJ1dGVzLCJbIixjLCJdIik7cj1pLnN0YXRlO3ZhciBoPWkuYnVmZmVyLGY9W2kueCxpLnksaS56LGkud10scD1bImJ1ZmZlciIsIm5vcm1hbGl6ZWQiLCJvZmZzZXQiLCJzdHJpZGUiXTsxPT09cj9hKCk6Mj09PXI/cygpOihlKCJpZigiLHIsIj09PSIsMSwiKXsiKSxhKCksZSgifWVsc2V7IikscygpLGUoIn0iKSl9dmFyIG89dC5zaGFyZWQ7bi5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciBvLHM9bi5uYW1lLGw9ci5hdHRyaWJ1dGVzW3NdO2lmKGwpe2lmKCFpKGwpKXJldHVybjtvPWwuYXBwZW5kKHQsZSl9ZWxzZXtpZighaShUdCkpcmV0dXJuO3ZhciBjPXQuc2NvcGVBdHRyaWIocyk7bz17fSxPYmplY3Qua2V5cyhuZXcgWikuZm9yRWFjaChmdW5jdGlvbih0KXtvW3RdPWUuZGVmKGMsIi4iLHQpfSl9YSh0LmxpbmsobiksZnVuY3Rpb24odCl7c3dpdGNoKHQpe2Nhc2UgMzU2NjQ6Y2FzZSAzNTY2NzpjYXNlIDM1NjcxOnJldHVybiAyO2Nhc2UgMzU2NjU6Y2FzZSAzNTY2ODpjYXNlIDM1NjcyOnJldHVybiAzO2Nhc2UgMzU2NjY6Y2FzZSAzNTY2OTpjYXNlIDM1NjczOnJldHVybiA0O2RlZmF1bHQ6cmV0dXJuIDF9fShuLmluZm8udHlwZSksbyl9KX1mdW5jdGlvbiBqKHQscixuLGksbyl7Zm9yKHZhciBzLGw9dC5zaGFyZWQsYz1sLmdsLHU9MDt1PGkubGVuZ3RoOysrdSl7dmFyIGgsZj0oZz1pW3VdKS5uYW1lLHA9Zy5pbmZvLnR5cGUsZD1uLnVuaWZvcm1zW2ZdLGc9dC5saW5rKGcpKyIubG9jYXRpb24iO2lmKGQpe2lmKCFvKGQpKWNvbnRpbnVlO2lmKEQoZCkpe2lmKGY9ZC52YWx1ZSwzNTY3OD09PXB8fDM1NjgwPT09cClyKGMsIi51bmlmb3JtMWkoIixnLCIsIiwocD10LmxpbmsoZi5fdGV4dHVyZXx8Zi5jb2xvclswXS5fdGV4dHVyZSkpKyIuYmluZCgpKTsiKSxyLmV4aXQocCwiLnVuYmluZCgpOyIpO2Vsc2UgaWYoMzU2NzQ9PT1wfHwzNTY3NT09PXB8fDM1Njc2PT09cClkPTIsMzU2NzU9PT1wP2Q9MzozNTY3Nj09PXAmJihkPTQpLHIoYywiLnVuaWZvcm1NYXRyaXgiLGQsImZ2KCIsZywiLGZhbHNlLCIsZj10Lmdsb2JhbC5kZWYoIm5ldyBGbG9hdDMyQXJyYXkoWyIrQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZikrIl0pIiksIik7Iik7ZWxzZXtzd2l0Y2gocCl7Y2FzZSA1MTI2OnM9IjFmIjticmVhaztjYXNlIDM1NjY0OnM9IjJmIjticmVhaztjYXNlIDM1NjY1OnM9IjNmIjticmVhaztjYXNlIDM1NjY2OnM9IjRmIjticmVhaztjYXNlIDM1NjcwOmNhc2UgNTEyNDpzPSIxaSI7YnJlYWs7Y2FzZSAzNTY3MTpjYXNlIDM1NjY3OnM9IjJpIjticmVhaztjYXNlIDM1NjcyOmNhc2UgMzU2Njg6cz0iM2kiO2JyZWFrO2Nhc2UgMzU2NzM6cz0iNGkiO2JyZWFrO2Nhc2UgMzU2Njk6cz0iNGkifXIoYywiLnVuaWZvcm0iLHMsIigiLGcsIiwiLG0oZik/QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZik6ZiwiKTsiKX1jb250aW51ZX1oPWQuYXBwZW5kKHQscil9ZWxzZXtpZighbyhUdCkpY29udGludWU7aD1yLmRlZihsLnVuaWZvcm1zLCJbIixlLmlkKGYpLCJdIil9c3dpdGNoKDM1Njc4PT09cD9yKCJpZigiLGgsIiYmIixoLCcuX3JlZ2xUeXBlPT09ImZyYW1lYnVmZmVyIil7JyxoLCI9IixoLCIuY29sb3JbMF07IiwifSIpOjM1NjgwPT09cCYmcigiaWYoIixoLCImJiIsaCwnLl9yZWdsVHlwZT09PSJmcmFtZWJ1ZmZlckN1YmUiKXsnLGgsIj0iLGgsIi5jb2xvclswXTsiLCJ9IiksZj0xLHApe2Nhc2UgMzU2Nzg6Y2FzZSAzNTY4MDpwPXIuZGVmKGgsIi5fdGV4dHVyZSIpLHIoYywiLnVuaWZvcm0xaSgiLGcsIiwiLHAsIi5iaW5kKCkpOyIpLHIuZXhpdChwLCIudW5iaW5kKCk7Iik7Y29udGludWU7Y2FzZSA1MTI0OmNhc2UgMzU2NzA6cz0iMWkiO2JyZWFrO2Nhc2UgMzU2Njc6Y2FzZSAzNTY3MTpzPSIyaSIsZj0yO2JyZWFrO2Nhc2UgMzU2Njg6Y2FzZSAzNTY3MjpzPSIzaSIsZj0zO2JyZWFrO2Nhc2UgMzU2Njk6Y2FzZSAzNTY3MzpzPSI0aSIsZj00O2JyZWFrO2Nhc2UgNTEyNjpzPSIxZiI7YnJlYWs7Y2FzZSAzNTY2NDpzPSIyZiIsZj0yO2JyZWFrO2Nhc2UgMzU2NjU6cz0iM2YiLGY9MzticmVhaztjYXNlIDM1NjY2OnM9IjRmIixmPTQ7YnJlYWs7Y2FzZSAzNTY3NDpzPSJNYXRyaXgyZnYiO2JyZWFrO2Nhc2UgMzU2NzU6cz0iTWF0cml4M2Z2IjticmVhaztjYXNlIDM1Njc2OnM9Ik1hdHJpeDRmdiJ9aWYocihjLCIudW5pZm9ybSIscywiKCIsZywiLCIpLCJNIj09PXMuY2hhckF0KDApKXtnPU1hdGgucG93KHAtMzU2NzQrMiwyKTt2YXIgdj10Lmdsb2JhbC5kZWYoIm5ldyBGbG9hdDMyQXJyYXkoIixnLCIpIik7cigiZmFsc2UsKEFycmF5LmlzQXJyYXkoIixoLCIpfHwiLGgsIiBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSk/IixoLCI6KCIsYShnLGZ1bmN0aW9uKHQpe3JldHVybiB2KyJbIit0KyJdPSIraCsiWyIrdCsiXSJ9KSwiLCIsdiwiKSIpfWVsc2UgcigxPGY/YShmLGZ1bmN0aW9uKHQpe3JldHVybiBoKyJbIit0KyJdIn0pOmgpO3IoIik7Iil9fWZ1bmN0aW9uIFYodCxlLHIsbil7ZnVuY3Rpb24gaShpKXt2YXIgYT1mW2ldO3JldHVybiBhP2EuY29udGV4dERlcCYmbi5jb250ZXh0RHluYW1pY3x8YS5wcm9wRGVwP2EuYXBwZW5kKHQscik6YS5hcHBlbmQodCxlKTplLmRlZihoLCIuIixpKX1mdW5jdGlvbiBhKCl7ZnVuY3Rpb24gdCgpe3IobCwiLmRyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFKCIsW2QsbSx2LGcrIjw8KCgiK3YrIi01MTIxKT4+MSkiLHNdLCIpOyIpfWZ1bmN0aW9uIGUoKXtyKGwsIi5kcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUoIixbZCxnLG0sc10sIik7Iil9cD95P3QoKToocigiaWYoIixwLCIpeyIpLHQoKSxyKCJ9ZWxzZXsiKSxlKCkscigifSIpKTplKCl9ZnVuY3Rpb24gbygpe2Z1bmN0aW9uIHQoKXtyKHUrIi5kcmF3RWxlbWVudHMoIitbZCxtLHYsZysiPDwoKCIrdisiLTUxMjEpPj4xKSJdKyIpOyIpfWZ1bmN0aW9uIGUoKXtyKHUrIi5kcmF3QXJyYXlzKCIrW2QsZyxtXSsiKTsiKX1wP3k/dCgpOihyKCJpZigiLHAsIil7IiksdCgpLHIoIn1lbHNleyIpLGUoKSxyKCJ9IikpOmUoKX12YXIgcyxsLGM9dC5zaGFyZWQsdT1jLmdsLGg9Yy5kcmF3LGY9bi5kcmF3LHA9ZnVuY3Rpb24oKXt2YXIgaT1mLmVsZW1lbnRzLGE9ZTtyZXR1cm4gaT8oKGkuY29udGV4dERlcCYmbi5jb250ZXh0RHluYW1pY3x8aS5wcm9wRGVwKSYmKGE9ciksaT1pLmFwcGVuZCh0LGEpKTppPWEuZGVmKGgsIi4iLCJlbGVtZW50cyIpLGkmJmEoImlmKCIraSsiKSIrdSsiLmJpbmRCdWZmZXIoMzQ5NjMsIitpKyIuYnVmZmVyLmJ1ZmZlcik7IiksaX0oKSxkPWkoInByaW1pdGl2ZSIpLGc9aSgib2Zmc2V0IiksbT1mdW5jdGlvbigpe3ZhciBpPWYuY291bnQsYT1lO3JldHVybiBpPygoaS5jb250ZXh0RGVwJiZuLmNvbnRleHREeW5hbWljfHxpLnByb3BEZXApJiYoYT1yKSxpPWkuYXBwZW5kKHQsYSkpOmk9YS5kZWYoaCwiLiIsImNvdW50IiksaX0oKTtpZigibnVtYmVyIj09dHlwZW9mIG0pe2lmKDA9PT1tKXJldHVybn1lbHNlIHIoImlmKCIsbSwiKXsiKSxyLmV4aXQoIn0iKTtLJiYocz1pKCJpbnN0YW5jZXMiKSxsPXQuaW5zdGFuY2luZyk7dmFyIHY9cCsiLnR5cGUiLHk9Zi5lbGVtZW50cyYmRChmLmVsZW1lbnRzKTtLJiYoIm51bWJlciIhPXR5cGVvZiBzfHwwPD1zKT8ic3RyaW5nIj09dHlwZW9mIHM/KHIoImlmKCIscywiPjApeyIpLGEoKSxyKCJ9ZWxzZSBpZigiLHMsIjwwKXsiKSxvKCkscigifSIpKTphKCk6bygpfWZ1bmN0aW9uIHEodCxlLHIsbixpKXtyZXR1cm4gaT0oZT1iKCkpLnByb2MoImJvZHkiLGkpLEsmJihlLmluc3RhbmNpbmc9aS5kZWYoZS5zaGFyZWQuZXh0ZW5zaW9ucywiLmFuZ2xlX2luc3RhbmNlZF9hcnJheXMiKSksdChlLGkscixuKSxlLmNvbXBpbGUoKS5ib2R5fWZ1bmN0aW9uIEgodCxlLHIsbil7TCh0LGUpLE4odCxlLHIsbi5hdHRyaWJ1dGVzLGZ1bmN0aW9uKCl7cmV0dXJuITB9KSxqKHQsZSxyLG4udW5pZm9ybXMsZnVuY3Rpb24oKXtyZXR1cm4hMH0pLFYodCxlLGUscil9ZnVuY3Rpb24gRyh0LGUscixuKXtmdW5jdGlvbiBpKCl7cmV0dXJuITB9dC5iYXRjaElkPSJhMSIsTCh0LGUpLE4odCxlLHIsbi5hdHRyaWJ1dGVzLGkpLGoodCxlLHIsbi51bmlmb3JtcyxpKSxWKHQsZSxlLHIpfWZ1bmN0aW9uIFcodCxlLHIsbil7ZnVuY3Rpb24gaSh0KXtyZXR1cm4gdC5jb250ZXh0RGVwJiZvfHx0LnByb3BEZXB9ZnVuY3Rpb24gYSh0KXtyZXR1cm4haSh0KX1MKHQsZSk7dmFyIG89ci5jb250ZXh0RGVwLHM9ZS5kZWYoKSxsPWUuZGVmKCk7dC5zaGFyZWQucHJvcHM9bCx0LmJhdGNoSWQ9czt2YXIgYz10LnNjb3BlKCksdT10LnNjb3BlKCk7ZShjLmVudHJ5LCJmb3IoIixzLCI9MDsiLHMsIjwiLCJhMSIsIjsrKyIscywiKXsiLGwsIj0iLCJhMCIsIlsiLHMsIl07Iix1LCJ9IixjLmV4aXQpLHIubmVlZHNDb250ZXh0JiZUKHQsdSxyLmNvbnRleHQpLHIubmVlZHNGcmFtZWJ1ZmZlciYmUyh0LHUsci5mcmFtZWJ1ZmZlciksQyh0LHUsci5zdGF0ZSxpKSxyLnByb2ZpbGUmJmkoci5wcm9maWxlKSYmRih0LHUsciwhMSwhMCksbj8oTih0LGMscixuLmF0dHJpYnV0ZXMsYSksTih0LHUscixuLmF0dHJpYnV0ZXMsaSksaih0LGMscixuLnVuaWZvcm1zLGEpLGoodCx1LHIsbi51bmlmb3JtcyxpKSxWKHQsYyx1LHIpKTooZT10Lmdsb2JhbC5kZWYoInt9Iiksbj1yLnNoYWRlci5wcm9nVmFyLmFwcGVuZCh0LHUpLGw9dS5kZWYobiwiLmlkIiksYz11LmRlZihlLCJbIixsLCJdIiksdSh0LnNoYXJlZC5nbCwiLnVzZVByb2dyYW0oIixuLCIucHJvZ3JhbSk7IiwiaWYoISIsYywiKXsiLGMsIj0iLGUsIlsiLGwsIl09Iix0LmxpbmsoZnVuY3Rpb24oZSl7cmV0dXJuIHEoRyx0LHIsZSwyKX0pLCIoIixuLCIpO30iLGMsIi5jYWxsKHRoaXMsYTBbIixzLCJdLCIscywiKTsiKSl9ZnVuY3Rpb24gWSh0LHIpe2Z1bmN0aW9uIG4oZSl7dmFyIG49ci5zaGFkZXJbZV07biYmaS5zZXQoYS5zaGFkZXIsIi4iK2Usbi5hcHBlbmQodCxpKSl9dmFyIGk9dC5wcm9jKCJzY29wZSIsMyk7dC5iYXRjaElkPSJhMiI7dmFyIGE9dC5zaGFyZWQsbz1hLmN1cnJlbnQ7VCh0LGksci5jb250ZXh0KSxyLmZyYW1lYnVmZmVyJiZyLmZyYW1lYnVmZmVyLmFwcGVuZCh0LGkpLEkoT2JqZWN0LmtleXMoci5zdGF0ZSkpLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIG49ci5zdGF0ZVtlXS5hcHBlbmQodCxpKTttKG4pP24uZm9yRWFjaChmdW5jdGlvbihyLG4pe2kuc2V0KHQubmV4dFtlXSwiWyIrbisiXSIscil9KTppLnNldChhLm5leHQsIi4iK2Usbil9KSxGKHQsaSxyLCEwLCEwKSxbImVsZW1lbnRzIiwib2Zmc2V0IiwiY291bnQiLCJpbnN0YW5jZXMiLCJwcmltaXRpdmUiXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciBuPXIuZHJhd1tlXTtuJiZpLnNldChhLmRyYXcsIi4iK2UsIiIrbi5hcHBlbmQodCxpKSl9KSxPYmplY3Qua2V5cyhyLnVuaWZvcm1zKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe2kuc2V0KGEudW5pZm9ybXMsIlsiK2UuaWQobikrIl0iLHIudW5pZm9ybXNbbl0uYXBwZW5kKHQsaSkpfSksT2JqZWN0LmtleXMoci5hdHRyaWJ1dGVzKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciBuPXIuYXR0cmlidXRlc1tlXS5hcHBlbmQodCxpKSxhPXQuc2NvcGVBdHRyaWIoZSk7T2JqZWN0LmtleXMobmV3IFopLmZvckVhY2goZnVuY3Rpb24odCl7aS5zZXQoYSwiLiIrdCxuW3RdKX0pfSksbigidmVydCIpLG4oImZyYWciKSwwPE9iamVjdC5rZXlzKHIuc3RhdGUpLmxlbmd0aCYmKGkobywiLmRpcnR5PXRydWU7IiksaS5leGl0KG8sIi5kaXJ0eT10cnVlOyIpKSxpKCJhMSgiLHQuc2hhcmVkLmNvbnRleHQsIixhMCwiLHQuYmF0Y2hJZCwiKTsiKX1mdW5jdGlvbiBYKHQsZSxyKXt2YXIgbj1lLnN0YXRpY1tyXTtpZihuJiZmdW5jdGlvbih0KXtpZigib2JqZWN0Ij09dHlwZW9mIHQmJiFtKHQpKXtmb3IodmFyIGU9T2JqZWN0LmtleXModCkscj0wO3I8ZS5sZW5ndGg7KytyKWlmKFUuaXNEeW5hbWljKHRbZVtyXV0pKXJldHVybiEwO3JldHVybiExfX0obikpe3ZhciBpPXQuZ2xvYmFsLGE9T2JqZWN0LmtleXMobiksbz0hMSxzPSExLGw9ITEsYz10Lmdsb2JhbC5kZWYoInt9Iik7YS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciByPW5bZV07aWYoVS5pc0R5bmFtaWMocikpImZ1bmN0aW9uIj09dHlwZW9mIHImJihyPW5bZV09VS51bmJveChyKSksZT1CKHIsbnVsbCksbz1vfHxlLnRoaXNEZXAsbD1sfHxlLnByb3BEZXAscz1zfHxlLmNvbnRleHREZXA7ZWxzZXtzd2l0Y2goaShjLCIuIixlLCI9IiksdHlwZW9mIHIpe2Nhc2UibnVtYmVyIjppKHIpO2JyZWFrO2Nhc2Uic3RyaW5nIjppKCciJyxyLCciJyk7YnJlYWs7Y2FzZSJvYmplY3QiOkFycmF5LmlzQXJyYXkocikmJmkoIlsiLHIuam9pbigpLCJdIik7YnJlYWs7ZGVmYXVsdDppKHQubGluayhyKSl9aSgiOyIpfX0pLGUuZHluYW1pY1tyXT1uZXcgVS5EeW5hbWljVmFyaWFibGUoNCx7dGhpc0RlcDpvLGNvbnRleHREZXA6cyxwcm9wRGVwOmwscmVmOmMsYXBwZW5kOmZ1bmN0aW9uKHQsZSl7YS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3ZhciBpPW5bcl07VS5pc0R5bmFtaWMoaSkmJihpPXQuaW52b2tlKGUsaSksZShjLCIuIixyLCI9IixpLCI7IikpfSl9fSksZGVsZXRlIGUuc3RhdGljW3JdfX12YXIgWj11LlJlY29yZCwkPXthZGQ6MzI3NzQsc3VidHJhY3Q6MzI3NzgsInJldmVyc2Ugc3VidHJhY3QiOjMyNzc5fTtyLmV4dF9ibGVuZF9taW5tYXgmJigkLm1pbj0zMjc3NSwkLm1heD0zMjc3Nik7dmFyIEs9ci5hbmdsZV9pbnN0YW5jZWRfYXJyYXlzLFE9ci53ZWJnbF9kcmF3X2J1ZmZlcnMsdHQ9e2RpcnR5OiEwLHByb2ZpbGU6Zy5wcm9maWxlfSxldD17fSxudD1bXSxpdD17fSxhdD17fTt5KCJkaXRoZXIiLDMwMjQpLHkoImJsZW5kLmVuYWJsZSIsMzA0MikseCgiYmxlbmQuY29sb3IiLCJibGVuZENvbG9yIixbMCwwLDAsMF0pLHgoImJsZW5kLmVxdWF0aW9uIiwiYmxlbmRFcXVhdGlvblNlcGFyYXRlIixbMzI3NzQsMzI3NzRdKSx4KCJibGVuZC5mdW5jIiwiYmxlbmRGdW5jU2VwYXJhdGUiLFsxLDAsMSwwXSkseSgiZGVwdGguZW5hYmxlIiwyOTI5LCEwKSx4KCJkZXB0aC5mdW5jIiwiZGVwdGhGdW5jIiw1MTMpLHgoImRlcHRoLnJhbmdlIiwiZGVwdGhSYW5nZSIsWzAsMV0pLHgoImRlcHRoLm1hc2siLCJkZXB0aE1hc2siLCEwKSx4KCJjb2xvck1hc2siLCJjb2xvck1hc2siLFshMCwhMCwhMCwhMF0pLHkoImN1bGwuZW5hYmxlIiwyODg0KSx4KCJjdWxsLmZhY2UiLCJjdWxsRmFjZSIsMTAyOSkseCgiZnJvbnRGYWNlIiwiZnJvbnRGYWNlIiwyMzA1KSx4KCJsaW5lV2lkdGgiLCJsaW5lV2lkdGgiLDEpLHkoInBvbHlnb25PZmZzZXQuZW5hYmxlIiwzMjgyMykseCgicG9seWdvbk9mZnNldC5vZmZzZXQiLCJwb2x5Z29uT2Zmc2V0IixbMCwwXSkseSgic2FtcGxlLmFscGhhIiwzMjkyNikseSgic2FtcGxlLmVuYWJsZSIsMzI5MjgpLHgoInNhbXBsZS5jb3ZlcmFnZSIsInNhbXBsZUNvdmVyYWdlIixbMSwhMV0pLHkoInN0ZW5jaWwuZW5hYmxlIiwyOTYwKSx4KCJzdGVuY2lsLm1hc2siLCJzdGVuY2lsTWFzayIsLTEpLHgoInN0ZW5jaWwuZnVuYyIsInN0ZW5jaWxGdW5jIixbNTE5LDAsLTFdKSx4KCJzdGVuY2lsLm9wRnJvbnQiLCJzdGVuY2lsT3BTZXBhcmF0ZSIsWzEwMjgsNzY4MCw3NjgwLDc2ODBdKSx4KCJzdGVuY2lsLm9wQmFjayIsInN0ZW5jaWxPcFNlcGFyYXRlIixbMTAyOSw3NjgwLDc2ODAsNzY4MF0pLHkoInNjaXNzb3IuZW5hYmxlIiwzMDg5KSx4KCJzY2lzc29yLmJveCIsInNjaXNzb3IiLFswLDAsdC5kcmF3aW5nQnVmZmVyV2lkdGgsdC5kcmF3aW5nQnVmZmVySGVpZ2h0XSkseCgidmlld3BvcnQiLCJ2aWV3cG9ydCIsWzAsMCx0LmRyYXdpbmdCdWZmZXJXaWR0aCx0LmRyYXdpbmdCdWZmZXJIZWlnaHRdKTt2YXIgb3Q9e2dsOnQsY29udGV4dDpwLHN0cmluZ3M6ZSxuZXh0OmV0LGN1cnJlbnQ6dHQsZHJhdzpmLGVsZW1lbnRzOm8sYnVmZmVyOmksc2hhZGVyOmgsYXR0cmlidXRlczp1LnN0YXRlLHVuaWZvcm1zOmMsZnJhbWVidWZmZXI6bCxleHRlbnNpb25zOnIsdGltZXI6ZCxpc0J1ZmZlckFyZ3M6UH0sc3Q9e3ByaW1UeXBlczpydCxjb21wYXJlRnVuY3M6a3QsYmxlbmRGdW5jczp3dCxibGVuZEVxdWF0aW9uczokLHN0ZW5jaWxPcHM6TXQsZ2xUeXBlczpKLG9yaWVudGF0aW9uVHlwZTpBdH07USYmKHN0LmJhY2tCdWZmZXI9WzEwMjldLHN0LmRyYXdCdWZmZXI9YShuLm1heERyYXdidWZmZXJzLGZ1bmN0aW9uKHQpe3JldHVybiAwPT09dD9bMF06YSh0LGZ1bmN0aW9uKHQpe3JldHVybiAzNjA2NCt0fSl9KSk7dmFyIGx0PTA7cmV0dXJue25leHQ6ZXQsY3VycmVudDp0dCxwcm9jczpmdW5jdGlvbigpe3ZhciB0PWIoKSxlPXQucHJvYygicG9sbCIpLHI9dC5wcm9jKCJyZWZyZXNoIiksaT10LmJsb2NrKCk7ZShpKSxyKGkpO3ZhciBvLHM9dC5zaGFyZWQsbD1zLmdsLGM9cy5uZXh0LHU9cy5jdXJyZW50O2kodSwiLmRpcnR5PWZhbHNlOyIpLFModCxlKSxTKHQscixudWxsLCEwKSxLJiYobz10LmxpbmsoSykpO2Zvcih2YXIgaD0wO2g8bi5tYXhBdHRyaWJ1dGVzOysraCl7dmFyIGY9ci5kZWYocy5hdHRyaWJ1dGVzLCJbIixoLCJdIikscD10LmNvbmQoZiwiLmJ1ZmZlciIpO3AudGhlbihsLCIuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoIixoLCIpOyIsbCwiLmJpbmRCdWZmZXIoIiwzNDk2MiwiLCIsZiwiLmJ1ZmZlci5idWZmZXIpOyIsbCwiLnZlcnRleEF0dHJpYlBvaW50ZXIoIixoLCIsIixmLCIuc2l6ZSwiLGYsIi50eXBlLCIsZiwiLm5vcm1hbGl6ZWQsIixmLCIuc3RyaWRlLCIsZiwiLm9mZnNldCk7IikuZWxzZShsLCIuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KCIsaCwiKTsiLGwsIi52ZXJ0ZXhBdHRyaWI0ZigiLGgsIiwiLGYsIi54LCIsZiwiLnksIixmLCIueiwiLGYsIi53KTsiLGYsIi5idWZmZXI9bnVsbDsiKSxyKHApLEsmJnIobywiLnZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRSgiLGgsIiwiLGYsIi5kaXZpc29yKTsiKX1yZXR1cm4gT2JqZWN0LmtleXMoaXQpLmZvckVhY2goZnVuY3Rpb24obil7dmFyIGE9aXRbbl0sbz1pLmRlZihjLCIuIixuKSxzPXQuYmxvY2soKTtzKCJpZigiLG8sIil7IixsLCIuZW5hYmxlKCIsYSwiKX1lbHNleyIsbCwiLmRpc2FibGUoIixhLCIpfSIsdSwiLiIsbiwiPSIsbywiOyIpLHIocyksZSgiaWYoIixvLCIhPT0iLHUsIi4iLG4sIil7IixzLCJ9Iil9KSxPYmplY3Qua2V5cyhhdCkuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgbyxzLGg9YXRbbl0sZj10dFtuXSxwPXQuYmxvY2soKTtwKGwsIi4iLGgsIigiKSxtKGYpPyhoPWYubGVuZ3RoLG89dC5nbG9iYWwuZGVmKGMsIi4iLG4pLHM9dC5nbG9iYWwuZGVmKHUsIi4iLG4pLHAoYShoLGZ1bmN0aW9uKHQpe3JldHVybiBvKyJbIit0KyJdIn0pLCIpOyIsYShoLGZ1bmN0aW9uKHQpe3JldHVybiBzKyJbIit0KyJdPSIrbysiWyIrdCsiXTsifSkuam9pbigiIikpLGUoImlmKCIsYShoLGZ1bmN0aW9uKHQpe3JldHVybiBvKyJbIit0KyJdIT09IitzKyJbIit0KyJdIn0pLmpvaW4oInx8IiksIil7IixwLCJ9IikpOihvPWkuZGVmKGMsIi4iLG4pLHM9aS5kZWYodSwiLiIsbikscChvLCIpOyIsdSwiLiIsbiwiPSIsbywiOyIpLGUoImlmKCIsbywiIT09IixzLCIpeyIscCwifSIpKSxyKHApfSksdC5jb21waWxlKCl9KCksY29tcGlsZTpmdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPWIoKTtyZXR1cm4gYS5zdGF0cz1hLmxpbmsoaSksT2JqZWN0LmtleXMoZS5zdGF0aWMpLmZvckVhY2goZnVuY3Rpb24odCl7WChhLGUsdCl9KSxfdC5mb3JFYWNoKGZ1bmN0aW9uKGUpe1goYSx0LGUpfSkscj1BKHQsZSxyLG4pLGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5wcm9jKCJkcmF3IiwxKTtMKHQsciksVCh0LHIsZS5jb250ZXh0KSxTKHQscixlLmZyYW1lYnVmZmVyKSxFKHQscixlKSxDKHQscixlLnN0YXRlKSxGKHQscixlLCExLCEwKTt2YXIgbj1lLnNoYWRlci5wcm9nVmFyLmFwcGVuZCh0LHIpO2lmKHIodC5zaGFyZWQuZ2wsIi51c2VQcm9ncmFtKCIsbiwiLnByb2dyYW0pOyIpLGUuc2hhZGVyLnByb2dyYW0pSCh0LHIsZSxlLnNoYWRlci5wcm9ncmFtKTtlbHNle3ZhciBpPXQuZ2xvYmFsLmRlZigie30iKSxhPXIuZGVmKG4sIi5pZCIpLG89ci5kZWYoaSwiWyIsYSwiXSIpO3IodC5jb25kKG8pLnRoZW4obywiLmNhbGwodGhpcyxhMCk7IikuZWxzZShvLCI9IixpLCJbIixhLCJdPSIsdC5saW5rKGZ1bmN0aW9uKHIpe3JldHVybiBxKEgsdCxlLHIsMSl9KSwiKCIsbiwiKTsiLG8sIi5jYWxsKHRoaXMsYTApOyIpKX0wPE9iamVjdC5rZXlzKGUuc3RhdGUpLmxlbmd0aCYmcih0LnNoYXJlZC5jdXJyZW50LCIuZGlydHk9dHJ1ZTsiKX0oYSxyKSxZKGEsciksZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHQpe3JldHVybiB0LmNvbnRleHREZXAmJml8fHQucHJvcERlcH12YXIgbj10LnByb2MoImJhdGNoIiwyKTt0LmJhdGNoSWQ9IjAiLEwodCxuKTt2YXIgaT0hMSxhPSEwO09iamVjdC5rZXlzKGUuY29udGV4dCkuZm9yRWFjaChmdW5jdGlvbih0KXtpPWl8fGUuY29udGV4dFt0XS5wcm9wRGVwfSksaXx8KFQodCxuLGUuY29udGV4dCksYT0hMSk7dmFyIG89ITE7aWYoKHM9ZS5mcmFtZWJ1ZmZlcik/KHMucHJvcERlcD9pPW89ITA6cy5jb250ZXh0RGVwJiZpJiYobz0hMCksb3x8Uyh0LG4scykpOlModCxuLG51bGwpLGUuc3RhdGUudmlld3BvcnQmJmUuc3RhdGUudmlld3BvcnQucHJvcERlcCYmKGk9ITApLEUodCxuLGUpLEModCxuLGUuc3RhdGUsZnVuY3Rpb24odCl7cmV0dXJuIXIodCl9KSxlLnByb2ZpbGUmJnIoZS5wcm9maWxlKXx8Rih0LG4sZSwhMSwiYTEiKSxlLmNvbnRleHREZXA9aSxlLm5lZWRzQ29udGV4dD1hLGUubmVlZHNGcmFtZWJ1ZmZlcj1vLChhPWUuc2hhZGVyLnByb2dWYXIpLmNvbnRleHREZXAmJml8fGEucHJvcERlcClXKHQsbixlLG51bGwpO2Vsc2UgaWYoYT1hLmFwcGVuZCh0LG4pLG4odC5zaGFyZWQuZ2wsIi51c2VQcm9ncmFtKCIsYSwiLnByb2dyYW0pOyIpLGUuc2hhZGVyLnByb2dyYW0pVyh0LG4sZSxlLnNoYWRlci5wcm9ncmFtKTtlbHNle3ZhciBzPXQuZ2xvYmFsLmRlZigie30iKSxsPShvPW4uZGVmKGEsIi5pZCIpLG4uZGVmKHMsIlsiLG8sIl0iKSk7bih0LmNvbmQobCkudGhlbihsLCIuY2FsbCh0aGlzLGEwLGExKTsiKS5lbHNlKGwsIj0iLHMsIlsiLG8sIl09Iix0LmxpbmsoZnVuY3Rpb24ocil7cmV0dXJuIHEoVyx0LGUsciwyKX0pLCIoIixhLCIpOyIsbCwiLmNhbGwodGhpcyxhMCxhMSk7IikpfTA8T2JqZWN0LmtleXMoZS5zdGF0ZSkubGVuZ3RoJiZuKHQuc2hhcmVkLmN1cnJlbnQsIi5kaXJ0eT10cnVlOyIpfShhLHIpLGEuY29tcGlsZSgpfX19ZnVuY3Rpb24gTih0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7KytyKWlmKHRbcl09PT1lKXJldHVybiByO3JldHVybi0xfXZhciBqPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPU9iamVjdC5rZXlzKGUpLG49MDtuPHIubGVuZ3RoOysrbil0W3Jbbl1dPWVbcltuXV07cmV0dXJuIHR9LFY9MCxVPXtEeW5hbWljVmFyaWFibGU6dCxkZWZpbmU6ZnVuY3Rpb24ocixuKXtyZXR1cm4gbmV3IHQocixlKG4rIiIpKX0saXNEeW5hbWljOmZ1bmN0aW9uKGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlJiYhZS5fcmVnbFR5cGV8fGUgaW5zdGFuY2VvZiB0fSx1bmJveDpmdW5jdGlvbihlLHIpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlP25ldyB0KDAsZSk6ZX0sYWNjZXNzb3I6ZX0scT17bmV4dDoiZnVuY3Rpb24iPT10eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lP2Z1bmN0aW9uKHQpe3JldHVybiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodCl9OmZ1bmN0aW9uKHQpe3JldHVybiBzZXRUaW1lb3V0KHQsMTYpfSxjYW5jZWw6ImZ1bmN0aW9uIj09dHlwZW9mIGNhbmNlbEFuaW1hdGlvbkZyYW1lP2Z1bmN0aW9uKHQpe3JldHVybiBjYW5jZWxBbmltYXRpb25GcmFtZSh0KX06Y2xlYXJUaW1lb3V0fSxIPSJ1bmRlZmluZWQiIT10eXBlb2YgcGVyZm9ybWFuY2UmJnBlcmZvcm1hbmNlLm5vdz9mdW5jdGlvbigpe3JldHVybiBwZXJmb3JtYW5jZS5ub3coKX06ZnVuY3Rpb24oKXtyZXR1cm4rbmV3IERhdGV9LEc9cygpO0cuemVybz1zKCk7dmFyIFc9ZnVuY3Rpb24odCxlKXt2YXIgcj0xO2UuZXh0X3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljJiYocj10LmdldFBhcmFtZXRlcigzNDA0NykpO3ZhciBuPTEsaT0xO2Uud2ViZ2xfZHJhd19idWZmZXJzJiYobj10LmdldFBhcmFtZXRlcigzNDg1MiksaT10LmdldFBhcmFtZXRlcigzNjA2MykpO3ZhciBhPSEhZS5vZXNfdGV4dHVyZV9mbG9hdDtpZihhKXthPXQuY3JlYXRlVGV4dHVyZSgpLHQuYmluZFRleHR1cmUoMzU1MyxhKSx0LnRleEltYWdlMkQoMzU1MywwLDY0MDgsMSwxLDAsNjQwOCw1MTI2LG51bGwpO3ZhciBvPXQuY3JlYXRlRnJhbWVidWZmZXIoKTtpZih0LmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxvKSx0LmZyYW1lYnVmZmVyVGV4dHVyZTJEKDM2MTYwLDM2MDY0LDM1NTMsYSwwKSx0LmJpbmRUZXh0dXJlKDM1NTMsbnVsbCksMzYwNTMhPT10LmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoMzYxNjApKWE9ITE7ZWxzZXt0LnZpZXdwb3J0KDAsMCwxLDEpLHQuY2xlYXJDb2xvcigxLDAsMCwxKSx0LmNsZWFyKDE2Mzg0KTt2YXIgcz1HLmFsbG9jVHlwZSg1MTI2LDQpO3QucmVhZFBpeGVscygwLDAsMSwxLDY0MDgsNTEyNixzKSx0LmdldEVycm9yKCk/YT0hMToodC5kZWxldGVGcmFtZWJ1ZmZlcihvKSx0LmRlbGV0ZVRleHR1cmUoYSksYT0xPT09c1swXSksRy5mcmVlVHlwZShzKX19cmV0dXJuIHM9ITAscz10LmNyZWF0ZVRleHR1cmUoKSxvPUcuYWxsb2NUeXBlKDUxMjEsMzYpLHQuYWN0aXZlVGV4dHVyZSgzMzk4NCksdC5iaW5kVGV4dHVyZSgzNDA2NyxzKSx0LnRleEltYWdlMkQoMzQwNjksMCw2NDA4LDMsMywwLDY0MDgsNTEyMSxvKSxHLmZyZWVUeXBlKG8pLHQuYmluZFRleHR1cmUoMzQwNjcsbnVsbCksdC5kZWxldGVUZXh0dXJlKHMpLHM9IXQuZ2V0RXJyb3IoKSx7Y29sb3JCaXRzOlt0LmdldFBhcmFtZXRlcigzNDEwKSx0LmdldFBhcmFtZXRlcigzNDExKSx0LmdldFBhcmFtZXRlcigzNDEyKSx0LmdldFBhcmFtZXRlcigzNDEzKV0sZGVwdGhCaXRzOnQuZ2V0UGFyYW1ldGVyKDM0MTQpLHN0ZW5jaWxCaXRzOnQuZ2V0UGFyYW1ldGVyKDM0MTUpLHN1YnBpeGVsQml0czp0LmdldFBhcmFtZXRlcigzNDA4KSxleHRlbnNpb25zOk9iamVjdC5rZXlzKGUpLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4hIWVbdF19KSxtYXhBbmlzb3Ryb3BpYzpyLG1heERyYXdidWZmZXJzOm4sbWF4Q29sb3JBdHRhY2htZW50czppLHBvaW50U2l6ZURpbXM6dC5nZXRQYXJhbWV0ZXIoMzM5MDEpLGxpbmVXaWR0aERpbXM6dC5nZXRQYXJhbWV0ZXIoMzM5MDIpLG1heFZpZXdwb3J0RGltczp0LmdldFBhcmFtZXRlcigzMzg2KSxtYXhDb21iaW5lZFRleHR1cmVVbml0czp0LmdldFBhcmFtZXRlcigzNTY2MSksbWF4Q3ViZU1hcFNpemU6dC5nZXRQYXJhbWV0ZXIoMzQwNzYpLG1heFJlbmRlcmJ1ZmZlclNpemU6dC5nZXRQYXJhbWV0ZXIoMzQwMjQpLG1heFRleHR1cmVVbml0czp0LmdldFBhcmFtZXRlcigzNDkzMCksbWF4VGV4dHVyZVNpemU6dC5nZXRQYXJhbWV0ZXIoMzM3OSksbWF4QXR0cmlidXRlczp0LmdldFBhcmFtZXRlcigzNDkyMSksbWF4VmVydGV4VW5pZm9ybXM6dC5nZXRQYXJhbWV0ZXIoMzYzNDcpLG1heFZlcnRleFRleHR1cmVVbml0czp0LmdldFBhcmFtZXRlcigzNTY2MCksbWF4VmFyeWluZ1ZlY3RvcnM6dC5nZXRQYXJhbWV0ZXIoMzYzNDgpLG1heEZyYWdtZW50VW5pZm9ybXM6dC5nZXRQYXJhbWV0ZXIoMzYzNDkpLGdsc2w6dC5nZXRQYXJhbWV0ZXIoMzU3MjQpLHJlbmRlcmVyOnQuZ2V0UGFyYW1ldGVyKDc5MzcpLHZlbmRvcjp0LmdldFBhcmFtZXRlcig3OTM2KSx2ZXJzaW9uOnQuZ2V0UGFyYW1ldGVyKDc5MzgpLHJlYWRGbG9hdDphLG5wb3RUZXh0dXJlQ3ViZTpzfX0sWT1mdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fHQgaW5zdGFuY2VvZiBVaW50MTZBcnJheXx8dCBpbnN0YW5jZW9mIFVpbnQzMkFycmF5fHx0IGluc3RhbmNlb2YgSW50OEFycmF5fHx0IGluc3RhbmNlb2YgSW50MTZBcnJheXx8dCBpbnN0YW5jZW9mIEludDMyQXJyYXl8fHQgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXl8fHQgaW5zdGFuY2VvZiBGbG9hdDY0QXJyYXl8fHQgaW5zdGFuY2VvZiBVaW50OENsYW1wZWRBcnJheX0sWD1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmtleXModCkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSl9LFo9e3NoYXBlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXTt0Lmxlbmd0aDt0PXRbMF0pZS5wdXNoKHQubGVuZ3RoKTtyZXR1cm4gZX0sZmxhdHRlbjpmdW5jdGlvbih0LGUscixuKXt2YXIgaT0xO2lmKGUubGVuZ3RoKWZvcih2YXIgYT0wO2E8ZS5sZW5ndGg7KythKWkqPWVbYV07ZWxzZSBpPTA7c3dpdGNoKHI9bnx8Ry5hbGxvY1R5cGUocixpKSxlLmxlbmd0aCl7Y2FzZSAwOmJyZWFrO2Nhc2UgMTpmb3Iobj1lWzBdLGU9MDtlPG47KytlKXJbZV09dFtlXTticmVhaztjYXNlIDI6Zm9yKG49ZVswXSxlPWVbMV0sYT1pPTA7YTxuOysrYSlmb3IodmFyIG89dFthXSxzPTA7czxlOysrcylyW2krK109b1tzXTticmVhaztjYXNlIDM6Yyh0LGVbMF0sZVsxXSxlWzJdLHIsMCk7YnJlYWs7ZGVmYXVsdDohZnVuY3Rpb24gdChlLHIsbixpLGEpe2Zvcih2YXIgbz0xLHM9bisxO3M8ci5sZW5ndGg7KytzKW8qPXJbc107dmFyIGw9cltuXTtpZig0PT1yLmxlbmd0aC1uKXt2YXIgdT1yW24rMV0saD1yW24rMl07Zm9yKHI9cltuKzNdLHM9MDtzPGw7KytzKWMoZVtzXSx1LGgscixpLGEpLGErPW99ZWxzZSBmb3Iocz0wO3M8bDsrK3MpdChlW3NdLHIsbisxLGksYSksYSs9b30odCxlLDAsciwwKX1yZXR1cm4gcn19LCQ9eyJbb2JqZWN0IEludDhBcnJheV0iOjUxMjAsIltvYmplY3QgSW50MTZBcnJheV0iOjUxMjIsIltvYmplY3QgSW50MzJBcnJheV0iOjUxMjQsIltvYmplY3QgVWludDhBcnJheV0iOjUxMjEsIltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIjo1MTIxLCJbb2JqZWN0IFVpbnQxNkFycmF5XSI6NTEyMywiW29iamVjdCBVaW50MzJBcnJheV0iOjUxMjUsIltvYmplY3QgRmxvYXQzMkFycmF5XSI6NTEyNiwiW29iamVjdCBGbG9hdDY0QXJyYXldIjo1MTIxLCJbb2JqZWN0IEFycmF5QnVmZmVyXSI6NTEyMX0sSj17aW50ODo1MTIwLGludDE2OjUxMjIsaW50MzI6NTEyNCx1aW50ODo1MTIxLHVpbnQxNjo1MTIzLHVpbnQzMjo1MTI1LGZsb2F0OjUxMjYsZmxvYXQzMjo1MTI2fSxLPXtkeW5hbWljOjM1MDQ4LHN0cmVhbTozNTA0MCxzdGF0aWM6MzUwNDR9LFE9Wi5mbGF0dGVuLHR0PVouc2hhcGUsZXQ9W107ZXRbNTEyMF09MSxldFs1MTIyXT0yLGV0WzUxMjRdPTQsZXRbNTEyMV09MSxldFs1MTIzXT0yLGV0WzUxMjVdPTQsZXRbNTEyNl09NDt2YXIgcnQ9e3BvaW50czowLHBvaW50OjAsbGluZXM6MSxsaW5lOjEsdHJpYW5nbGVzOjQsdHJpYW5nbGU6NCwibGluZSBsb29wIjoyLCJsaW5lIHN0cmlwIjozLCJ0cmlhbmdsZSBzdHJpcCI6NSwidHJpYW5nbGUgZmFuIjo2fSxudD1uZXcgRmxvYXQzMkFycmF5KDEpLGl0PW5ldyBVaW50MzJBcnJheShudC5idWZmZXIpLGF0PVs5OTg0LDk5ODYsOTk4NSw5OTg3XSxvdD1bMCw2NDA5LDY0MTAsNjQwNyw2NDA4XSxzdD17fTtzdFs2NDA5XT1zdFs2NDA2XT1zdFs2NDAyXT0xLHN0WzM0MDQxXT1zdFs2NDEwXT0yLHN0WzY0MDddPXN0WzM1OTA0XT0zLHN0WzY0MDhdPXN0WzM1OTA2XT00O3ZhciBsdD12KCJIVE1MQ2FudmFzRWxlbWVudCIpLGN0PXYoIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCIpLHV0PXYoIkltYWdlQml0bWFwIiksaHQ9digiSFRNTEltYWdlRWxlbWVudCIpLGZ0PXYoIkhUTUxWaWRlb0VsZW1lbnQiKSxwdD1PYmplY3Qua2V5cygkKS5jb25jYXQoW2x0LGN0LHV0LGh0LGZ0XSksZHQ9W107ZHRbNTEyMV09MSxkdFs1MTI2XT00LGR0WzM2MTkzXT0yLGR0WzUxMjNdPTIsZHRbNTEyNV09NDt2YXIgZ3Q9W107Z3RbMzI4NTRdPTIsZ3RbMzI4NTVdPTIsZ3RbMzYxOTRdPTIsZ3RbMzQwNDFdPTQsZ3RbMzM3NzZdPS41LGd0WzMzNzc3XT0uNSxndFszMzc3OF09MSxndFszMzc3OV09MSxndFszNTk4Nl09LjUsZ3RbMzU5ODddPTEsZ3RbMzQ3OThdPTEsZ3RbMzU4NDBdPS41LGd0WzM1ODQxXT0uMjUsZ3RbMzU4NDJdPS41LGd0WzM1ODQzXT0uMjUsZ3RbMzYxOTZdPS41O3ZhciBtdD1bXTttdFszMjg1NF09MixtdFszMjg1NV09MixtdFszNjE5NF09MixtdFszMzE4OV09MixtdFszNjE2OF09MSxtdFszNDA0MV09NCxtdFszNTkwN109NCxtdFszNDgzNl09MTYsbXRbMzQ4NDJdPTgsbXRbMzQ4NDNdPTY7dmFyIHZ0PWZ1bmN0aW9uKHQsZSxyLG4saSl7ZnVuY3Rpb24gYSh0KXt0aGlzLmlkPWMrKyx0aGlzLnJlZkNvdW50PTEsdGhpcy5yZW5kZXJidWZmZXI9dCx0aGlzLmZvcm1hdD0zMjg1NCx0aGlzLmhlaWdodD10aGlzLndpZHRoPTAsaS5wcm9maWxlJiYodGhpcy5zdGF0cz17c2l6ZTowfSl9ZnVuY3Rpb24gbyhlKXt2YXIgcj1lLnJlbmRlcmJ1ZmZlcjt0LmJpbmRSZW5kZXJidWZmZXIoMzYxNjEsbnVsbCksdC5kZWxldGVSZW5kZXJidWZmZXIociksZS5yZW5kZXJidWZmZXI9bnVsbCxlLnJlZkNvdW50PTAsZGVsZXRlIHVbZS5pZF0sbi5yZW5kZXJidWZmZXJDb3VudC0tfXZhciBzPXtyZ2JhNDozMjg1NCxyZ2I1NjU6MzYxOTQsInJnYjUgYTEiOjMyODU1LGRlcHRoOjMzMTg5LHN0ZW5jaWw6MzYxNjgsImRlcHRoIHN0ZW5jaWwiOjM0MDQxfTtlLmV4dF9zcmdiJiYocy5zcmdiYT0zNTkwNyksZS5leHRfY29sb3JfYnVmZmVyX2hhbGZfZmxvYXQmJihzLnJnYmExNmY9MzQ4NDIscy5yZ2IxNmY9MzQ4NDMpLGUud2ViZ2xfY29sb3JfYnVmZmVyX2Zsb2F0JiYocy5yZ2JhMzJmPTM0ODM2KTt2YXIgbD1bXTtPYmplY3Qua2V5cyhzKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2xbc1t0XV09dH0pO3ZhciBjPTAsdT17fTtyZXR1cm4gYS5wcm90b3R5cGUuZGVjUmVmPWZ1bmN0aW9uKCl7MD49LS10aGlzLnJlZkNvdW50JiZvKHRoaXMpfSxpLnByb2ZpbGUmJihuLmdldFRvdGFsUmVuZGVyYnVmZmVyU2l6ZT1mdW5jdGlvbigpe3ZhciB0PTA7cmV0dXJuIE9iamVjdC5rZXlzKHUpLmZvckVhY2goZnVuY3Rpb24oZSl7dCs9dVtlXS5zdGF0cy5zaXplfSksdH0pLHtjcmVhdGU6ZnVuY3Rpb24oZSxyKXtmdW5jdGlvbiBvKGUscil7dmFyIG49MCxhPTAsdT0zMjg1NDtpZigib2JqZWN0Ij09dHlwZW9mIGUmJmU/KCJzaGFwZSJpbiBlPyhuPTB8KGE9ZS5zaGFwZSlbMF0sYT0wfGFbMV0pOigicmFkaXVzImluIGUmJihuPWE9MHxlLnJhZGl1cyksIndpZHRoImluIGUmJihuPTB8ZS53aWR0aCksImhlaWdodCJpbiBlJiYoYT0wfGUuaGVpZ2h0KSksImZvcm1hdCJpbiBlJiYodT1zW2UuZm9ybWF0XSkpOiJudW1iZXIiPT10eXBlb2YgZT8obj0wfGUsYT0ibnVtYmVyIj09dHlwZW9mIHI/MHxyOm4pOmV8fChuPWE9MSksbiE9PWMud2lkdGh8fGEhPT1jLmhlaWdodHx8dSE9PWMuZm9ybWF0KXJldHVybiBvLndpZHRoPWMud2lkdGg9bixvLmhlaWdodD1jLmhlaWdodD1hLGMuZm9ybWF0PXUsdC5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLGMucmVuZGVyYnVmZmVyKSx0LnJlbmRlcmJ1ZmZlclN0b3JhZ2UoMzYxNjEsdSxuLGEpLGkucHJvZmlsZSYmKGMuc3RhdHMuc2l6ZT1tdFtjLmZvcm1hdF0qYy53aWR0aCpjLmhlaWdodCksby5mb3JtYXQ9bFtjLmZvcm1hdF0sb312YXIgYz1uZXcgYSh0LmNyZWF0ZVJlbmRlcmJ1ZmZlcigpKTtyZXR1cm4gdVtjLmlkXT1jLG4ucmVuZGVyYnVmZmVyQ291bnQrKyxvKGUsciksby5yZXNpemU9ZnVuY3Rpb24oZSxyKXt2YXIgbj0wfGUsYT0wfHJ8fG47cmV0dXJuIG49PT1jLndpZHRoJiZhPT09Yy5oZWlnaHQ/bzooby53aWR0aD1jLndpZHRoPW4sby5oZWlnaHQ9Yy5oZWlnaHQ9YSx0LmJpbmRSZW5kZXJidWZmZXIoMzYxNjEsYy5yZW5kZXJidWZmZXIpLHQucmVuZGVyYnVmZmVyU3RvcmFnZSgzNjE2MSxjLmZvcm1hdCxuLGEpLGkucHJvZmlsZSYmKGMuc3RhdHMuc2l6ZT1tdFtjLmZvcm1hdF0qYy53aWR0aCpjLmhlaWdodCksbyl9LG8uX3JlZ2xUeXBlPSJyZW5kZXJidWZmZXIiLG8uX3JlbmRlcmJ1ZmZlcj1jLGkucHJvZmlsZSYmKG8uc3RhdHM9Yy5zdGF0cyksby5kZXN0cm95PWZ1bmN0aW9uKCl7Yy5kZWNSZWYoKX0sb30sY2xlYXI6ZnVuY3Rpb24oKXtYKHUpLmZvckVhY2gobyl9LHJlc3RvcmU6ZnVuY3Rpb24oKXtYKHUpLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5yZW5kZXJidWZmZXI9dC5jcmVhdGVSZW5kZXJidWZmZXIoKSx0LmJpbmRSZW5kZXJidWZmZXIoMzYxNjEsZS5yZW5kZXJidWZmZXIpLHQucmVuZGVyYnVmZmVyU3RvcmFnZSgzNjE2MSxlLmZvcm1hdCxlLndpZHRoLGUuaGVpZ2h0KX0pLHQuYmluZFJlbmRlcmJ1ZmZlcigzNjE2MSxudWxsKX19fSx5dD1bXTt5dFs2NDA4XT00LHl0WzY0MDddPTM7dmFyIHh0PVtdO3h0WzUxMjFdPTEseHRbNTEyNl09NCx4dFszNjE5M109Mjt2YXIgYnQ9WyJ4IiwieSIsInoiLCJ3Il0sX3Q9ImJsZW5kLmZ1bmMgYmxlbmQuZXF1YXRpb24gc3RlbmNpbC5mdW5jIHN0ZW5jaWwub3BGcm9udCBzdGVuY2lsLm9wQmFjayBzYW1wbGUuY292ZXJhZ2Ugdmlld3BvcnQgc2Npc3Nvci5ib3ggcG9seWdvbk9mZnNldC5vZmZzZXQiLnNwbGl0KCIgIiksd3Q9ezA6MCwxOjEsemVybzowLG9uZToxLCJzcmMgY29sb3IiOjc2OCwib25lIG1pbnVzIHNyYyBjb2xvciI6NzY5LCJzcmMgYWxwaGEiOjc3MCwib25lIG1pbnVzIHNyYyBhbHBoYSI6NzcxLCJkc3QgY29sb3IiOjc3NCwib25lIG1pbnVzIGRzdCBjb2xvciI6Nzc1LCJkc3QgYWxwaGEiOjc3Miwib25lIG1pbnVzIGRzdCBhbHBoYSI6NzczLCJjb25zdGFudCBjb2xvciI6MzI3NjksIm9uZSBtaW51cyBjb25zdGFudCBjb2xvciI6MzI3NzAsImNvbnN0YW50IGFscGhhIjozMjc3MSwib25lIG1pbnVzIGNvbnN0YW50IGFscGhhIjozMjc3Miwic3JjIGFscGhhIHNhdHVyYXRlIjo3NzZ9LGt0PXtuZXZlcjo1MTIsbGVzczo1MTMsIjwiOjUxMyxlcXVhbDo1MTQsIj0iOjUxNCwiPT0iOjUxNCwiPT09Ijo1MTQsbGVxdWFsOjUxNSwiPD0iOjUxNSxncmVhdGVyOjUxNiwiPiI6NTE2LG5vdGVxdWFsOjUxNywiIT0iOjUxNywiIT09Ijo1MTcsZ2VxdWFsOjUxOCwiPj0iOjUxOCxhbHdheXM6NTE5fSxNdD17MDowLHplcm86MCxrZWVwOjc2ODAscmVwbGFjZTo3NjgxLGluY3JlbWVudDo3NjgyLGRlY3JlbWVudDo3NjgzLCJpbmNyZW1lbnQgd3JhcCI6MzQwNTUsImRlY3JlbWVudCB3cmFwIjozNDA1NixpbnZlcnQ6NTM4Nn0sQXQ9e2N3OjIzMDQsY2N3OjIzMDV9LFR0PW5ldyBPKCExLCExLCExLGZ1bmN0aW9uKCl7fSk7cmV0dXJuIGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtpZigwPT09Wi5sZW5ndGgpdyYmdy51cGRhdGUoKSxRPW51bGw7ZWxzZXtRPXEubmV4dChlKSxoKCk7Zm9yKHZhciB0PVoubGVuZ3RoLTE7MDw9dDstLXQpe3ZhciByPVpbdF07ciYmcih6LG51bGwsMCl9bS5mbHVzaCgpLHcmJncudXBkYXRlKCl9fWZ1bmN0aW9uIHIoKXshUSYmMDxaLmxlbmd0aCYmKFE9cS5uZXh0KGUpKX1mdW5jdGlvbiBuKCl7USYmKHEuY2FuY2VsKGUpLFE9bnVsbCl9ZnVuY3Rpb24gYSh0KXt0LnByZXZlbnREZWZhdWx0KCksbigpLCQuZm9yRWFjaChmdW5jdGlvbih0KXt0KCl9KX1mdW5jdGlvbiBvKHQpe20uZ2V0RXJyb3IoKSx5LnJlc3RvcmUoKSxELnJlc3RvcmUoKSxJLnJlc3RvcmUoKSxSLnJlc3RvcmUoKSxCLnJlc3RvcmUoKSxWLnJlc3RvcmUoKSx3JiZ3LnJlc3RvcmUoKSxHLnByb2NzLnJlZnJlc2goKSxyKCksSi5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QoKX0pfWZ1bmN0aW9uIHModCl7ZnVuY3Rpb24gZSh0KXt2YXIgZT17fSxyPXt9O3JldHVybiBPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciBpPXRbbl07VS5pc0R5bmFtaWMoaSk/cltuXT1VLnVuYm94KGksbik6ZVtuXT1pfSkse2R5bmFtaWM6cixzdGF0aWM6ZX19dmFyIHI9ZSh0LmNvbnRleHR8fHt9KSxuPWUodC51bmlmb3Jtc3x8e30pLGk9ZSh0LmF0dHJpYnV0ZXN8fHt9KSxhPWUoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0KXtpZih0IGluIHIpe3ZhciBlPXJbdF07ZGVsZXRlIHJbdF0sT2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbihuKXtyW3QrIi4iK25dPWVbbl19KX19dmFyIHI9aih7fSx0KTtyZXR1cm4gZGVsZXRlIHIudW5pZm9ybXMsZGVsZXRlIHIuYXR0cmlidXRlcyxkZWxldGUgci5jb250ZXh0LCJzdGVuY2lsImluIHImJnIuc3RlbmNpbC5vcCYmKHIuc3RlbmNpbC5vcEJhY2s9ci5zdGVuY2lsLm9wRnJvbnQ9ci5zdGVuY2lsLm9wLGRlbGV0ZSByLnN0ZW5jaWwub3ApLGUoImJsZW5kIiksZSgiZGVwdGgiKSxlKCJjdWxsIiksZSgic3RlbmNpbCIpLGUoInBvbHlnb25PZmZzZXQiKSxlKCJzY2lzc29yIiksZSgic2FtcGxlIikscn0odCkpO3Q9e2dwdVRpbWU6MCxjcHVUaW1lOjAsY291bnQ6MH07dmFyIG89KHI9Ry5jb21waWxlKGEsaSxuLHIsdCkpLmRyYXcscz1yLmJhdGNoLGw9ci5zY29wZSxjPVtdO3JldHVybiBqKGZ1bmN0aW9uKHQsZSl7dmFyIHI7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQpcmV0dXJuIGwuY2FsbCh0aGlzLG51bGwsdCwwKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgZSlpZigibnVtYmVyIj09dHlwZW9mIHQpZm9yKHI9MDtyPHQ7KytyKWwuY2FsbCh0aGlzLG51bGwsZSxyKTtlbHNle2lmKCFBcnJheS5pc0FycmF5KHQpKXJldHVybiBsLmNhbGwodGhpcyx0LGUsMCk7Zm9yKHI9MDtyPHQubGVuZ3RoOysrcilsLmNhbGwodGhpcyx0W3JdLGUscil9ZWxzZSBpZigibnVtYmVyIj09dHlwZW9mIHQpe2lmKDA8dClyZXR1cm4gcy5jYWxsKHRoaXMsZnVuY3Rpb24odCl7Zm9yKDtjLmxlbmd0aDx0OyljLnB1c2gobnVsbCk7cmV0dXJuIGN9KDB8dCksMHx0KX1lbHNle2lmKCFBcnJheS5pc0FycmF5KHQpKXJldHVybiBvLmNhbGwodGhpcyx0KTtpZih0Lmxlbmd0aClyZXR1cm4gcy5jYWxsKHRoaXMsdCx0Lmxlbmd0aCl9fSx7c3RhdHM6dH0pfWZ1bmN0aW9uIGwodCxlKXt2YXIgcj0wO0cucHJvY3MucG9sbCgpO3ZhciBuPWUuY29sb3I7biYmKG0uY2xlYXJDb2xvcigrblswXXx8MCwrblsxXXx8MCwrblsyXXx8MCwrblszXXx8MCkscnw9MTYzODQpLCJkZXB0aCJpbiBlJiYobS5jbGVhckRlcHRoKCtlLmRlcHRoKSxyfD0yNTYpLCJzdGVuY2lsImluIGUmJihtLmNsZWFyU3RlbmNpbCgwfGUuc3RlbmNpbCkscnw9MTAyNCksbS5jbGVhcihyKX1mdW5jdGlvbiBjKHQpe3JldHVybiBaLnB1c2godCkscigpLHtjYW5jZWw6ZnVuY3Rpb24oKXt2YXIgZT1OKFosdCk7WltlXT1mdW5jdGlvbiB0KCl7dmFyIGU9TihaLHQpO1pbZV09WltaLmxlbmd0aC0xXSwtLVoubGVuZ3RoLDA+PVoubGVuZ3RoJiZuKCl9fX19ZnVuY3Rpb24gdSgpe3ZhciB0PVkudmlld3BvcnQsZT1ZLnNjaXNzb3JfYm94O3RbMF09dFsxXT1lWzBdPWVbMV09MCx6LnZpZXdwb3J0V2lkdGg9ei5mcmFtZWJ1ZmZlcldpZHRoPXouZHJhd2luZ0J1ZmZlcldpZHRoPXRbMl09ZVsyXT1tLmRyYXdpbmdCdWZmZXJXaWR0aCx6LnZpZXdwb3J0SGVpZ2h0PXouZnJhbWVidWZmZXJIZWlnaHQ9ei5kcmF3aW5nQnVmZmVySGVpZ2h0PXRbM109ZVszXT1tLmRyYXdpbmdCdWZmZXJIZWlnaHR9ZnVuY3Rpb24gaCgpe3oudGljays9MSx6LnRpbWU9ZygpLHUoKSxHLnByb2NzLnBvbGwoKX1mdW5jdGlvbiBmKCl7dSgpLEcucHJvY3MucmVmcmVzaCgpLHcmJncudXBkYXRlKCl9ZnVuY3Rpb24gZygpe3JldHVybihIKCktaykvMWUzfWlmKCEodD1pKHQpKSlyZXR1cm4gbnVsbDt2YXIgbT10LmdsLHY9bS5nZXRDb250ZXh0QXR0cmlidXRlcygpO20uaXNDb250ZXh0TG9zdCgpO3ZhciB5PWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcihlKXt2YXIgcjtlPWUudG9Mb3dlckNhc2UoKTt0cnl7cj1uW2VdPXQuZ2V0RXh0ZW5zaW9uKGUpfWNhdGNoKHQpe31yZXR1cm4hIXJ9Zm9yKHZhciBuPXt9LGk9MDtpPGUuZXh0ZW5zaW9ucy5sZW5ndGg7KytpKXt2YXIgYT1lLmV4dGVuc2lvbnNbaV07aWYoIXIoYSkpcmV0dXJuIGUub25EZXN0cm95KCksZS5vbkRvbmUoJyInK2ErJyIgZXh0ZW5zaW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGN1cnJlbnQgV2ViR0wgY29udGV4dCwgdHJ5IHVwZ3JhZGluZyB5b3VyIHN5c3RlbSBvciBhIGRpZmZlcmVudCBicm93c2VyJyksbnVsbH1yZXR1cm4gZS5vcHRpb25hbEV4dGVuc2lvbnMuZm9yRWFjaChyKSx7ZXh0ZW5zaW9uczpuLHJlc3RvcmU6ZnVuY3Rpb24oKXtPYmplY3Qua2V5cyhuKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lmKCFyKHQpKXRocm93IEVycm9yKCIocmVnbCk6IGVycm9yIHJlc3RvcmluZyBleHRlbnNpb24gIit0KX0pfX19KG0sdCk7aWYoIXkpcmV0dXJuIG51bGw7dmFyIHg9ZnVuY3Rpb24oKXt2YXIgdD17IiI6MH0sZT1bIiJdO3JldHVybntpZDpmdW5jdGlvbihyKXt2YXIgbj10W3JdO3JldHVybiBufHwobj10W3JdPWUubGVuZ3RoLGUucHVzaChyKSxuKX0sc3RyOmZ1bmN0aW9uKHQpe3JldHVybiBlW3RdfX19KCksYj17YnVmZmVyQ291bnQ6MCxlbGVtZW50c0NvdW50OjAsZnJhbWVidWZmZXJDb3VudDowLHNoYWRlckNvdW50OjAsdGV4dHVyZUNvdW50OjAsY3ViZUNvdW50OjAscmVuZGVyYnVmZmVyQ291bnQ6MCxtYXhUZXh0dXJlVW5pdHM6MH0sXz15LmV4dGVuc2lvbnMsdz1mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIoKXt0aGlzLmVuZFF1ZXJ5SW5kZXg9dGhpcy5zdGFydFF1ZXJ5SW5kZXg9LTEsdGhpcy5zdW09MCx0aGlzLnN0YXRzPW51bGx9ZnVuY3Rpb24gbih0LGUsbil7dmFyIGk9cy5wb3AoKXx8bmV3IHI7aS5zdGFydFF1ZXJ5SW5kZXg9dCxpLmVuZFF1ZXJ5SW5kZXg9ZSxpLnN1bT0wLGkuc3RhdHM9bixsLnB1c2goaSl9dmFyIGk9ZS5leHRfZGlzam9pbnRfdGltZXJfcXVlcnk7aWYoIWkpcmV0dXJuIG51bGw7dmFyIGE9W10sbz1bXSxzPVtdLGw9W10sYz1bXSx1PVtdO3JldHVybntiZWdpblF1ZXJ5OmZ1bmN0aW9uKHQpe3ZhciBlPWEucG9wKCl8fGkuY3JlYXRlUXVlcnlFWFQoKTtpLmJlZ2luUXVlcnlFWFQoMzUwMDcsZSksby5wdXNoKGUpLG4oby5sZW5ndGgtMSxvLmxlbmd0aCx0KX0sZW5kUXVlcnk6ZnVuY3Rpb24oKXtpLmVuZFF1ZXJ5RVhUKDM1MDA3KX0scHVzaFNjb3BlU3RhdHM6bix1cGRhdGU6ZnVuY3Rpb24oKXt2YXIgdCxlO2lmKDAhPT0odD1vLmxlbmd0aCkpe3UubGVuZ3RoPU1hdGgubWF4KHUubGVuZ3RoLHQrMSksYy5sZW5ndGg9TWF0aC5tYXgoYy5sZW5ndGgsdCsxKSxjWzBdPTA7dmFyIHI9dVswXT0wO2ZvcihlPXQ9MDtlPG8ubGVuZ3RoOysrZSl7dmFyIG49b1tlXTtpLmdldFF1ZXJ5T2JqZWN0RVhUKG4sMzQ5MTkpPyhyKz1pLmdldFF1ZXJ5T2JqZWN0RVhUKG4sMzQ5MTgpLGEucHVzaChuKSk6b1t0KytdPW4sY1tlKzFdPXIsdVtlKzFdPXR9Zm9yKG8ubGVuZ3RoPXQsZT10PTA7ZTxsLmxlbmd0aDsrK2Upe3ZhciBoPShyPWxbZV0pLnN0YXJ0UXVlcnlJbmRleDtuPXIuZW5kUXVlcnlJbmRleCxyLnN1bSs9Y1tuXS1jW2hdLGg9dVtoXSwobj11W25dKT09PWg/KHIuc3RhdHMuZ3B1VGltZSs9ci5zdW0vMWU2LHMucHVzaChyKSk6KHIuc3RhcnRRdWVyeUluZGV4PWgsci5lbmRRdWVyeUluZGV4PW4sbFt0KytdPXIpfWwubGVuZ3RoPXR9fSxnZXROdW1QZW5kaW5nUXVlcmllczpmdW5jdGlvbigpe3JldHVybiBvLmxlbmd0aH0sY2xlYXI6ZnVuY3Rpb24oKXthLnB1c2guYXBwbHkoYSxvKTtmb3IodmFyIHQ9MDt0PGEubGVuZ3RoO3QrKylpLmRlbGV0ZVF1ZXJ5RVhUKGFbdF0pO28ubGVuZ3RoPTAsYS5sZW5ndGg9MH0scmVzdG9yZTpmdW5jdGlvbigpe28ubGVuZ3RoPTAsYS5sZW5ndGg9MH19fSgwLF8pLGs9SCgpLEM9bS5kcmF3aW5nQnVmZmVyV2lkdGgsTD1tLmRyYXdpbmdCdWZmZXJIZWlnaHQsej17dGljazowLHRpbWU6MCx2aWV3cG9ydFdpZHRoOkMsdmlld3BvcnRIZWlnaHQ6TCxmcmFtZWJ1ZmZlcldpZHRoOkMsZnJhbWVidWZmZXJIZWlnaHQ6TCxkcmF3aW5nQnVmZmVyV2lkdGg6QyxkcmF3aW5nQnVmZmVySGVpZ2h0OkwscGl4ZWxSYXRpbzp0LnBpeGVsUmF0aW99LFA9VyhtLF8pLEk9KEM9ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHQ9ci5tYXhBdHRyaWJ1dGVzLGU9QXJyYXkodCkscj0wO3I8dDsrK3IpZVtyXT1uZXcgVDtyZXR1cm57UmVjb3JkOlQsc2NvcGU6e30sc3RhdGU6ZX19KG0sXyxQKSxwKG0sYix0LEMpKSxPPWQobSxfLEksYiksRD1TKG0seCxiLHQpLFI9TShtLF8sUCxmdW5jdGlvbigpe0cucHJvY3MucG9sbCgpfSx6LGIsdCksQj12dChtLF8sMCxiLHQpLFY9QShtLF8sUCxSLEIsYiksRz1GKG0seCxfLFAsSSxPLDAsVix7fSxDLEQse2VsZW1lbnRzOm51bGwscHJpbWl0aXZlOjQsY291bnQ6LTEsb2Zmc2V0OjAsaW5zdGFuY2VzOi0xfSx6LHcsdCksWT0oeD1FKG0sVixHLnByb2NzLnBvbGwseiksRy5uZXh0KSxYPW0uY2FudmFzLFo9W10sJD1bXSxKPVtdLEs9W3Qub25EZXN0cm95XSxRPW51bGw7WCYmKFguYWRkRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0bG9zdCIsYSwhMSksWC5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRyZXN0b3JlZCIsbywhMSkpO3ZhciB0dD1WLnNldEZCTz1zKHtmcmFtZWJ1ZmZlcjpVLmRlZmluZS5jYWxsKG51bGwsMSwiZnJhbWVidWZmZXIiKX0pO3JldHVybiBmKCksdj1qKHMse2NsZWFyOmZ1bmN0aW9uKHQpe2lmKCJmcmFtZWJ1ZmZlciJpbiB0KWlmKHQuZnJhbWVidWZmZXImJiJmcmFtZWJ1ZmZlckN1YmUiPT09dC5mcmFtZWJ1ZmZlcl9yZWdsVHlwZSlmb3IodmFyIGU9MDs2PmU7KytlKXR0KGooe2ZyYW1lYnVmZmVyOnQuZnJhbWVidWZmZXIuZmFjZXNbZV19LHQpLGwpO2Vsc2UgdHQodCxsKTtlbHNlIGwoMCx0KX0scHJvcDpVLmRlZmluZS5iaW5kKG51bGwsMSksY29udGV4dDpVLmRlZmluZS5iaW5kKG51bGwsMiksdGhpczpVLmRlZmluZS5iaW5kKG51bGwsMyksZHJhdzpzKHt9KSxidWZmZXI6ZnVuY3Rpb24odCl7cmV0dXJuIEkuY3JlYXRlKHQsMzQ5NjIsITEsITEpfSxlbGVtZW50czpmdW5jdGlvbih0KXtyZXR1cm4gTy5jcmVhdGUodCwhMSl9LHRleHR1cmU6Ui5jcmVhdGUyRCxjdWJlOlIuY3JlYXRlQ3ViZSxyZW5kZXJidWZmZXI6Qi5jcmVhdGUsZnJhbWVidWZmZXI6Vi5jcmVhdGUsZnJhbWVidWZmZXJDdWJlOlYuY3JlYXRlQ3ViZSxhdHRyaWJ1dGVzOnYsZnJhbWU6YyxvbjpmdW5jdGlvbih0LGUpe3ZhciByO3N3aXRjaCh0KXtjYXNlImZyYW1lIjpyZXR1cm4gYyhlKTtjYXNlImxvc3QiOnI9JDticmVhaztjYXNlInJlc3RvcmUiOnI9SjticmVhaztjYXNlImRlc3Ryb3kiOnI9S31yZXR1cm4gci5wdXNoKGUpLHtjYW5jZWw6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PHIubGVuZ3RoOysrdClpZihyW3RdPT09ZSl7clt0XT1yW3IubGVuZ3RoLTFdLHIucG9wKCk7YnJlYWt9fX19LGxpbWl0czpQLGhhc0V4dGVuc2lvbjpmdW5jdGlvbih0KXtyZXR1cm4gMDw9UC5leHRlbnNpb25zLmluZGV4T2YodC50b0xvd2VyQ2FzZSgpKX0scmVhZDp4LGRlc3Ryb3k6ZnVuY3Rpb24oKXtaLmxlbmd0aD0wLG4oKSxYJiYoWC5yZW1vdmVFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRsb3N0IixhKSxYLnJlbW92ZUV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dHJlc3RvcmVkIixvKSksRC5jbGVhcigpLFYuY2xlYXIoKSxCLmNsZWFyKCksUi5jbGVhcigpLE8uY2xlYXIoKSxJLmNsZWFyKCksdyYmdy5jbGVhcigpLEsuZm9yRWFjaChmdW5jdGlvbih0KXt0KCl9KX0sX2dsOm0sX3JlZnJlc2g6Zixwb2xsOmZ1bmN0aW9uKCl7aCgpLHcmJncudXBkYXRlKCl9LG5vdzpnLHN0YXRzOmJ9KSx0Lm9uRG9uZShudWxsLHYpLHZ9fSwib2JqZWN0Ij09dHlwZW9mIHImJiJ1bmRlZmluZWQiIT10eXBlb2YgZT9lLmV4cG9ydHM9aSgpOm4uY3JlYXRlUkVHTD1pKCl9LHt9XSw0NjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG4saT0iIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZigic3RyaW5nIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcigiZXhwZWN0ZWQgYSBzdHJpbmciKTtpZigxPT09ZSlyZXR1cm4gdDtpZigyPT09ZSlyZXR1cm4gdCt0O3ZhciByPXQubGVuZ3RoKmU7aWYobiE9PXR8fCJ1bmRlZmluZWQiPT10eXBlb2YgbiluPXQsaT0iIjtlbHNlIGlmKGkubGVuZ3RoPj1yKXJldHVybiBpLnN1YnN0cigwLHIpO2Zvcig7cj5pLmxlbmd0aCYmZT4xOykxJmUmJihpKz10KSxlPj49MSx0Kz10O3JldHVybiBpPShpKz10KS5zdWJzdHIoMCxyKX19LHt9XSw0NjU6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24odCl7ZS5leHBvcnRzPXQucGVyZm9ybWFuY2UmJnQucGVyZm9ybWFuY2Uubm93P2Z1bmN0aW9uKCl7cmV0dXJuIHBlcmZvcm1hbmNlLm5vdygpfTpEYXRlLm5vd3x8ZnVuY3Rpb24oKXtyZXR1cm4rbmV3IERhdGV9fSkuY2FsbCh0aGlzLCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7fV0sNDY2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5sZW5ndGgscj10W3QubGVuZ3RoLTFdLG49ZSxpPWUtMjtpPj0wOy0taSl7dmFyIGE9cixvPXRbaV0scz0ocj1hK28pLWEsbD1vLXM7bCYmKHRbLS1uXT1yLHI9bCl9Zm9yKHZhciBjPTAsaT1uO2k8ZTsrK2kpe3ZhciBhPXRbaV0sbz1yLHM9KHI9YStvKS1hLGw9by1zO2wmJih0W2MrK109bCl9cmV0dXJuIHRbYysrXT1yLHQubGVuZ3RoPWMsdH19LHt9XSw0Njc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgidHdvLXByb2R1Y3QiKSxpPXQoInJvYnVzdC1zdW0iKSxhPXQoInJvYnVzdC1zY2FsZSIpLG89dCgicm9idXN0LWNvbXByZXNzIikscz02O2Z1bmN0aW9uIGwodCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KHQubGVuZ3RoLTEpLG49MTtuPHQubGVuZ3RoOysrbilmb3IodmFyIGk9cltuLTFdPW5ldyBBcnJheSh0Lmxlbmd0aC0xKSxhPTAsbz0wO2E8dC5sZW5ndGg7KythKWEhPT1lJiYoaVtvKytdPXRbbl1bYV0pO3JldHVybiByfWZ1bmN0aW9uIGModCl7aWYoMj09PXQubGVuZ3RoKXJldHVyblsic3VtKHByb2QoIix0WzBdWzBdLCIsIix0WzFdWzFdLCIpLHByb2QoLSIsdFswXVsxXSwiLCIsdFsxXVswXSwiKSkiXS5qb2luKCIiKTtmb3IodmFyIGU9W10scj0wO3I8dC5sZW5ndGg7KytyKWUucHVzaChbInNjYWxlKCIsYyhsKHQscikpLCIsIiwobj1yLDEmbj8iLSI6IiIpLHRbMF1bcl0sIikiXS5qb2luKCIiKSk7cmV0dXJuIGZ1bmN0aW9uIHQoZSl7aWYoMT09PWUubGVuZ3RoKXJldHVybiBlWzBdO2lmKDI9PT1lLmxlbmd0aClyZXR1cm5bInN1bSgiLGVbMF0sIiwiLGVbMV0sIikiXS5qb2luKCIiKTt2YXIgcj1lLmxlbmd0aD4+MTtyZXR1cm5bInN1bSgiLHQoZS5zbGljZSgwLHIpKSwiLCIsdChlLnNsaWNlKHIpKSwiKSJdLmpvaW4oIiIpfShlKTt2YXIgbn1mdW5jdGlvbiB1KHQpe3JldHVybiBuZXcgRnVuY3Rpb24oInN1bSIsInNjYWxlIiwicHJvZCIsImNvbXByZXNzIixbImZ1bmN0aW9uIHJvYnVzdERldGVybWluYW50Iix0LCIobSl7cmV0dXJuIGNvbXByZXNzKCIsYyhmdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQpLHI9MDtyPHQ7KytyKXtlW3JdPW5ldyBBcnJheSh0KTtmb3IodmFyIG49MDtuPHQ7KytuKWVbcl1bbl09WyJtWyIsciwiXVsiLG4sIl0iXS5qb2luKCIiKX1yZXR1cm4gZX0odCkpLCIpfTtyZXR1cm4gcm9idXN0RGV0ZXJtaW5hbnQiLHRdLmpvaW4oIiIpKShpLGEsbixvKX12YXIgaD1bZnVuY3Rpb24oKXtyZXR1cm5bMF19LGZ1bmN0aW9uKHQpe3JldHVyblt0WzBdWzBdXX1dOyFmdW5jdGlvbigpe2Zvcig7aC5sZW5ndGg8czspaC5wdXNoKHUoaC5sZW5ndGgpKTtmb3IodmFyIHQ9W10scj1bImZ1bmN0aW9uIHJvYnVzdERldGVybWluYW50KG0pe3N3aXRjaChtLmxlbmd0aCl7Il0sbj0wO248czsrK24pdC5wdXNoKCJkZXQiK24pLHIucHVzaCgiY2FzZSAiLG4sIjpyZXR1cm4gZGV0IixuLCIobSk7Iik7ci5wdXNoKCJ9dmFyIGRldD1DQUNIRVttLmxlbmd0aF07aWYoIWRldClkZXQ9Q0FDSEVbbS5sZW5ndGhdPWdlbihtLmxlbmd0aCk7cmV0dXJuIGRldChtKTt9cmV0dXJuIHJvYnVzdERldGVybWluYW50IiksdC5wdXNoKCJDQUNIRSIsImdlbiIsci5qb2luKCIiKSk7dmFyIGk9RnVuY3Rpb24uYXBwbHkodm9pZCAwLHQpO2ZvcihlLmV4cG9ydHM9aS5hcHBseSh2b2lkIDAsaC5jb25jYXQoW2gsdV0pKSxuPTA7bjxoLmxlbmd0aDsrK24pZS5leHBvcnRzW25dPWhbbl19KCl9LHsicm9idXN0LWNvbXByZXNzIjo0NjYsInJvYnVzdC1zY2FsZSI6NDczLCJyb2J1c3Qtc3VtIjo0NzYsInR3by1wcm9kdWN0Ijo1MDV9XSw0Njg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgidHdvLXByb2R1Y3QiKSxpPXQoInJvYnVzdC1zdW0iKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bih0WzBdLGVbMF0pLGE9MTthPHQubGVuZ3RoOysrYSlyPWkocixuKHRbYV0sZVthXSkpO3JldHVybiByfX0seyJyb2J1c3Qtc3VtIjo0NzYsInR3by1wcm9kdWN0Ijo1MDV9XSw0Njk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgidHdvLXByb2R1Y3QiKSxpPXQoInJvYnVzdC1zdW0iKSxhPXQoInJvYnVzdC1zdWJ0cmFjdCIpLG89dCgicm9idXN0LXNjYWxlIikscz02O2Z1bmN0aW9uIGwodCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KHQubGVuZ3RoLTEpLG49MTtuPHQubGVuZ3RoOysrbilmb3IodmFyIGk9cltuLTFdPW5ldyBBcnJheSh0Lmxlbmd0aC0xKSxhPTAsbz0wO2E8dC5sZW5ndGg7KythKWEhPT1lJiYoaVtvKytdPXRbbl1bYV0pO3JldHVybiByfWZ1bmN0aW9uIGModCl7aWYoMT09PXQubGVuZ3RoKXJldHVybiB0WzBdO2lmKDI9PT10Lmxlbmd0aClyZXR1cm5bInN1bSgiLHRbMF0sIiwiLHRbMV0sIikiXS5qb2luKCIiKTt2YXIgZT10Lmxlbmd0aD4+MTtyZXR1cm5bInN1bSgiLGModC5zbGljZSgwLGUpKSwiLCIsYyh0LnNsaWNlKGUpKSwiKSJdLmpvaW4oIiIpfWZ1bmN0aW9uIHUodCxlKXtpZigibSI9PT10LmNoYXJBdCgwKSl7aWYoInciPT09ZS5jaGFyQXQoMCkpe3ZhciByPXQuc3BsaXQoIlsiKTtyZXR1cm5bInciLGUuc3Vic3RyKDEpLCJtIixyWzBdLnN1YnN0cigxKV0uam9pbigiIil9cmV0dXJuWyJwcm9kKCIsdCwiLCIsZSwiKSJdLmpvaW4oIiIpfXJldHVybiB1KGUsdCl9ZnVuY3Rpb24gaCh0KXtpZigyPT09dC5sZW5ndGgpcmV0dXJuW1siZGlmZigiLHUodFswXVswXSx0WzFdWzFdKSwiLCIsdSh0WzFdWzBdLHRbMF1bMV0pLCIpIl0uam9pbigiIildO2Zvcih2YXIgZT1bXSxyPTA7cjx0Lmxlbmd0aDsrK3IpZS5wdXNoKFsic2NhbGUoIixjKGgobCh0LHIpKSksIiwiLChuPXIsITAmbj8iLSI6IiIpLHRbMF1bcl0sIikiXS5qb2luKCIiKSk7cmV0dXJuIGU7dmFyIG59ZnVuY3Rpb24gZih0LGUpe2Zvcih2YXIgcj1bXSxuPTA7bjxlLTI7KytuKXIucHVzaChbInByb2QobSIsdCwiWyIsbiwiXSxtIix0LCJbIixuLCJdKSJdLmpvaW4oIiIpKTtyZXR1cm4gYyhyKX1mdW5jdGlvbiBwKHQpe2Zvcih2YXIgZT1bXSxyPVtdLHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0KSxyPTA7cjx0Oysrcil7ZVtyXT1uZXcgQXJyYXkodCk7Zm9yKHZhciBuPTA7bjx0OysrbillW3JdW25dPVsibSIsbiwiWyIsdC1yLTIsIl0iXS5qb2luKCIiKX1yZXR1cm4gZX0odCksdT0wO3U8dDsrK3Upc1swXVt1XT0iMSIsc1t0LTFdW3VdPSJ3Iit1O2Zvcih1PTA7dTx0OysrdSkwPT0oMSZ1KT9lLnB1c2guYXBwbHkoZSxoKGwocyx1KSkpOnIucHVzaC5hcHBseShyLGgobChzLHUpKSk7dmFyIHA9YyhlKSxkPWMociksZz0iZXhhY3RJblNwaGVyZSIrdCxtPVtdO2Zvcih1PTA7dTx0OysrdSltLnB1c2goIm0iK3UpO3ZhciB2PVsiZnVuY3Rpb24gIixnLCIoIixtLmpvaW4oKSwiKXsiXTtmb3IodT0wO3U8dDsrK3Upe3YucHVzaCgidmFyIHciLHUsIj0iLGYodSx0KSwiOyIpO2Zvcih2YXIgeT0wO3k8dDsrK3kpeSE9PXUmJnYucHVzaCgidmFyIHciLHUsIm0iLHksIj1zY2FsZSh3Iix1LCIsbSIseSwiWzBdKTsiKX1yZXR1cm4gdi5wdXNoKCJ2YXIgcD0iLHAsIixuPSIsZCwiLGQ9ZGlmZihwLG4pO3JldHVybiBkW2QubGVuZ3RoLTFdO31yZXR1cm4gIixnKSxuZXcgRnVuY3Rpb24oInN1bSIsImRpZmYiLCJwcm9kIiwic2NhbGUiLHYuam9pbigiIikpKGksYSxuLG8pfXZhciBkPVtmdW5jdGlvbigpe3JldHVybiAwfSxmdW5jdGlvbigpe3JldHVybiAwfSxmdW5jdGlvbigpe3JldHVybiAwfV07IWZ1bmN0aW9uKCl7Zm9yKDtkLmxlbmd0aDw9czspZC5wdXNoKHAoZC5sZW5ndGgpKTtmb3IodmFyIHQ9W10scj1bInNsb3ciXSxuPTA7bjw9czsrK24pdC5wdXNoKCJhIituKSxyLnB1c2goIm8iK24pO3ZhciBpPVsiZnVuY3Rpb24gdGVzdEluU3BoZXJlKCIsdC5qb2luKCksIil7c3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMDpjYXNlIDE6cmV0dXJuIDA7Il07Zm9yKG49MjtuPD1zOysrbilpLnB1c2goImNhc2UgIixuLCI6cmV0dXJuIG8iLG4sIigiLHQuc2xpY2UoMCxuKS5qb2luKCksIik7Iik7aS5wdXNoKCJ9dmFyIHM9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpO2Zvcih2YXIgaT0wO2k8YXJndW1lbnRzLmxlbmd0aDsrK2kpe3NbaV09YXJndW1lbnRzW2ldfTtyZXR1cm4gc2xvdyhzKTt9cmV0dXJuIHRlc3RJblNwaGVyZSIpLHIucHVzaChpLmpvaW4oIiIpKTt2YXIgYT1GdW5jdGlvbi5hcHBseSh2b2lkIDAscik7Zm9yKGUuZXhwb3J0cz1hLmFwcGx5KHZvaWQgMCxbZnVuY3Rpb24odCl7dmFyIGU9ZFt0Lmxlbmd0aF07cmV0dXJuIGV8fChlPWRbdC5sZW5ndGhdPXAodC5sZW5ndGgpKSxlLmFwcGx5KHZvaWQgMCx0KX1dLmNvbmNhdChkKSksbj0wO248PXM7KytuKWUuZXhwb3J0c1tuXT1kW25dfSgpfSx7InJvYnVzdC1zY2FsZSI6NDczLCJyb2J1c3Qtc3VidHJhY3QiOjQ3NSwicm9idXN0LXN1bSI6NDc2LCJ0d28tcHJvZHVjdCI6NTA1fV0sNDcwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInJvYnVzdC1kZXRlcm1pbmFudCIpLGk9NjtmdW5jdGlvbiBhKHQpe2Zvcih2YXIgZT0icm9idXN0TGluZWFyU29sdmUiK3QrImQiLHI9WyJmdW5jdGlvbiAiLGUsIihBLGIpe3JldHVybiBbIl0saT0wO2k8dDsrK2kpe3IucHVzaCgiZGV0KFsiKTtmb3IodmFyIGE9MDthPHQ7KythKXthPjAmJnIucHVzaCgiLCIpLHIucHVzaCgiWyIpO2Zvcih2YXIgbz0wO288dDsrK28pbz4wJiZyLnB1c2goIiwiKSxvPT09aT9yLnB1c2goIitiWyIsYSwiXSIpOnIucHVzaCgiK0FbIixhLCJdWyIsbywiXSIpO3IucHVzaCgiXSIpfXIucHVzaCgiXSksIil9ci5wdXNoKCJkZXQoQSldfXJldHVybiAiLGUpO3ZhciBzPW5ldyBGdW5jdGlvbigiZGV0IixyLmpvaW4oIiIpKTtyZXR1cm4gcyh0PDY/blt0XTpuKX12YXIgbz1bZnVuY3Rpb24oKXtyZXR1cm5bMF19LGZ1bmN0aW9uKHQsZSl7cmV0dXJuW1tlWzBdXSxbdFswXVswXV1dfV07IWZ1bmN0aW9uKCl7Zm9yKDtvLmxlbmd0aDxpOylvLnB1c2goYShvLmxlbmd0aCkpO2Zvcih2YXIgdD1bXSxyPVsiZnVuY3Rpb24gZGlzcGF0Y2hMaW5lYXJTb2x2ZShBLGIpe3N3aXRjaChBLmxlbmd0aCl7Il0sbj0wO248aTsrK24pdC5wdXNoKCJzIituKSxyLnB1c2goImNhc2UgIixuLCI6cmV0dXJuIHMiLG4sIihBLGIpOyIpO3IucHVzaCgifXZhciBzPUNBQ0hFW0EubGVuZ3RoXTtpZighcylzPUNBQ0hFW0EubGVuZ3RoXT1nKEEubGVuZ3RoKTtyZXR1cm4gcyhBLGIpfXJldHVybiBkaXNwYXRjaExpbmVhclNvbHZlIiksdC5wdXNoKCJDQUNIRSIsImciLHIuam9pbigiIikpO3ZhciBzPUZ1bmN0aW9uLmFwcGx5KHZvaWQgMCx0KTtmb3IoZS5leHBvcnRzPXMuYXBwbHkodm9pZCAwLG8uY29uY2F0KFtvLGFdKSksbj0wO248aTsrK24pZS5leHBvcnRzW25dPW9bbl19KCl9LHsicm9idXN0LWRldGVybWluYW50Ijo0Njd9XSw0NzE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgidHdvLXByb2R1Y3QiKSxpPXQoInJvYnVzdC1zdW0iKSxhPXQoInJvYnVzdC1zY2FsZSIpLG89dCgicm9idXN0LXN1YnRyYWN0Iikscz01O2Z1bmN0aW9uIGwodCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KHQubGVuZ3RoLTEpLG49MTtuPHQubGVuZ3RoOysrbilmb3IodmFyIGk9cltuLTFdPW5ldyBBcnJheSh0Lmxlbmd0aC0xKSxhPTAsbz0wO2E8dC5sZW5ndGg7KythKWEhPT1lJiYoaVtvKytdPXRbbl1bYV0pO3JldHVybiByfWZ1bmN0aW9uIGModCl7aWYoMT09PXQubGVuZ3RoKXJldHVybiB0WzBdO2lmKDI9PT10Lmxlbmd0aClyZXR1cm5bInN1bSgiLHRbMF0sIiwiLHRbMV0sIikiXS5qb2luKCIiKTt2YXIgZT10Lmxlbmd0aD4+MTtyZXR1cm5bInN1bSgiLGModC5zbGljZSgwLGUpKSwiLCIsYyh0LnNsaWNlKGUpKSwiKSJdLmpvaW4oIiIpfWZ1bmN0aW9uIHUodCl7aWYoMj09PXQubGVuZ3RoKXJldHVybltbInN1bShwcm9kKCIsdFswXVswXSwiLCIsdFsxXVsxXSwiKSxwcm9kKC0iLHRbMF1bMV0sIiwiLHRbMV1bMF0sIikpIl0uam9pbigiIildO2Zvcih2YXIgZT1bXSxyPTA7cjx0Lmxlbmd0aDsrK3IpZS5wdXNoKFsic2NhbGUoIixjKHUobCh0LHIpKSksIiwiLChuPXIsMSZuPyItIjoiIiksdFswXVtyXSwiKSJdLmpvaW4oIiIpKTtyZXR1cm4gZTt2YXIgbn1mdW5jdGlvbiBoKHQpe2Zvcih2YXIgZT1bXSxyPVtdLHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0KSxyPTA7cjx0Oysrcil7ZVtyXT1uZXcgQXJyYXkodCk7Zm9yKHZhciBuPTA7bjx0OysrbillW3JdW25dPVsibSIsbiwiWyIsdC1yLTEsIl0iXS5qb2luKCIiKX1yZXR1cm4gZX0odCksaD1bXSxmPTA7Zjx0OysrZikwPT0oMSZmKT9lLnB1c2guYXBwbHkoZSx1KGwocyxmKSkpOnIucHVzaC5hcHBseShyLHUobChzLGYpKSksaC5wdXNoKCJtIitmKTt2YXIgcD1jKGUpLGQ9YyhyKSxnPSJvcmllbnRhdGlvbiIrdCsiRXhhY3QiLG09WyJmdW5jdGlvbiAiLGcsIigiLGguam9pbigpLCIpe3ZhciBwPSIscCwiLG49IixkLCIsZD1zdWIocCxuKTtyZXR1cm4gZFtkLmxlbmd0aC0xXTt9O3JldHVybiAiLGddLmpvaW4oIiIpO3JldHVybiBuZXcgRnVuY3Rpb24oInN1bSIsInByb2QiLCJzY2FsZSIsInN1YiIsbSkoaSxuLGEsbyl9dmFyIGY9aCgzKSxwPWgoNCksZD1bZnVuY3Rpb24oKXtyZXR1cm4gMH0sZnVuY3Rpb24oKXtyZXR1cm4gMH0sZnVuY3Rpb24odCxlKXtyZXR1cm4gZVswXS10WzBdfSxmdW5jdGlvbih0LGUscil7dmFyIG4saT0odFsxXS1yWzFdKSooZVswXS1yWzBdKSxhPSh0WzBdLXJbMF0pKihlWzFdLXJbMV0pLG89aS1hO2lmKGk+MCl7aWYoYTw9MClyZXR1cm4gbztuPWkrYX1lbHNle2lmKCEoaTwwKSlyZXR1cm4gbztpZihhPj0wKXJldHVybiBvO249LShpK2EpfXZhciBzPTMuMzMwNjY5MDczODc1NDcxNmUtMTYqbjtyZXR1cm4gbz49c3x8bzw9LXM/bzpmKHQsZSxyKX0sZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dFswXS1uWzBdLGE9ZVswXS1uWzBdLG89clswXS1uWzBdLHM9dFsxXS1uWzFdLGw9ZVsxXS1uWzFdLGM9clsxXS1uWzFdLHU9dFsyXS1uWzJdLGg9ZVsyXS1uWzJdLGY9clsyXS1uWzJdLGQ9YSpjLGc9bypsLG09bypzLHY9aSpjLHk9aSpsLHg9YSpzLGI9dSooZC1nKStoKihtLXYpK2YqKHkteCksXz03Ljc3MTU2MTE3MjM3NjEwM2UtMTYqKChNYXRoLmFicyhkKStNYXRoLmFicyhnKSkqTWF0aC5hYnModSkrKE1hdGguYWJzKG0pK01hdGguYWJzKHYpKSpNYXRoLmFicyhoKSsoTWF0aC5hYnMoeSkrTWF0aC5hYnMoeCkpKk1hdGguYWJzKGYpKTtyZXR1cm4gYj5ffHwtYj5fP2I6cCh0LGUscixuKX1dOyFmdW5jdGlvbigpe2Zvcig7ZC5sZW5ndGg8PXM7KWQucHVzaChoKGQubGVuZ3RoKSk7Zm9yKHZhciB0PVtdLHI9WyJzbG93Il0sbj0wO248PXM7KytuKXQucHVzaCgiYSIrbiksci5wdXNoKCJvIituKTt2YXIgaT1bImZ1bmN0aW9uIGdldE9yaWVudGF0aW9uKCIsdC5qb2luKCksIil7c3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMDpjYXNlIDE6cmV0dXJuIDA7Il07Zm9yKG49MjtuPD1zOysrbilpLnB1c2goImNhc2UgIixuLCI6cmV0dXJuIG8iLG4sIigiLHQuc2xpY2UoMCxuKS5qb2luKCksIik7Iik7aS5wdXNoKCJ9dmFyIHM9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpO2Zvcih2YXIgaT0wO2k8YXJndW1lbnRzLmxlbmd0aDsrK2kpe3NbaV09YXJndW1lbnRzW2ldfTtyZXR1cm4gc2xvdyhzKTt9cmV0dXJuIGdldE9yaWVudGF0aW9uIiksci5wdXNoKGkuam9pbigiIikpO3ZhciBhPUZ1bmN0aW9uLmFwcGx5KHZvaWQgMCxyKTtmb3IoZS5leHBvcnRzPWEuYXBwbHkodm9pZCAwLFtmdW5jdGlvbih0KXt2YXIgZT1kW3QubGVuZ3RoXTtyZXR1cm4gZXx8KGU9ZFt0Lmxlbmd0aF09aCh0Lmxlbmd0aCkpLGUuYXBwbHkodm9pZCAwLHQpfV0uY29uY2F0KGQpKSxuPTA7bjw9czsrK24pZS5leHBvcnRzW25dPWRbbl19KCl9LHsicm9idXN0LXNjYWxlIjo0NzMsInJvYnVzdC1zdWJ0cmFjdCI6NDc1LCJyb2J1c3Qtc3VtIjo0NzYsInR3by1wcm9kdWN0Ijo1MDV9XSw0NzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgicm9idXN0LXN1bSIpLGk9dCgicm9idXN0LXNjYWxlIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoMT09PXQubGVuZ3RoKXJldHVybiBpKGUsdFswXSk7aWYoMT09PWUubGVuZ3RoKXJldHVybiBpKHQsZVswXSk7aWYoMD09PXQubGVuZ3RofHwwPT09ZS5sZW5ndGgpcmV0dXJuWzBdO3ZhciByPVswXTtpZih0Lmxlbmd0aDxlLmxlbmd0aClmb3IodmFyIGE9MDthPHQubGVuZ3RoOysrYSlyPW4ocixpKGUsdFthXSkpO2Vsc2UgZm9yKHZhciBhPTA7YTxlLmxlbmd0aDsrK2Epcj1uKHIsaSh0LGVbYV0pKTtyZXR1cm4gcn19LHsicm9idXN0LXNjYWxlIjo0NzMsInJvYnVzdC1zdW0iOjQ3Nn1dLDQ3MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJ0d28tcHJvZHVjdCIpLGk9dCgidHdvLXN1bSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQubGVuZ3RoO2lmKDE9PT1yKXt2YXIgYT1uKHRbMF0sZSk7cmV0dXJuIGFbMF0/YTpbYVsxXV19dmFyIG89bmV3IEFycmF5KDIqcikscz1bLjEsLjFdLGw9Wy4xLC4xXSxjPTA7bih0WzBdLGUscyksc1swXSYmKG9bYysrXT1zWzBdKTtmb3IodmFyIHU9MTt1PHI7Kyt1KXtuKHRbdV0sZSxsKTt2YXIgaD1zWzFdO2koaCxsWzBdLHMpLHNbMF0mJihvW2MrK109c1swXSk7dmFyIGY9bFsxXSxwPXNbMV0sZD1mK3AsZz1kLWYsbT1wLWc7c1sxXT1kLG0mJihvW2MrK109bSl9c1sxXSYmKG9bYysrXT1zWzFdKTswPT09YyYmKG9bYysrXT0wKTtyZXR1cm4gby5sZW5ndGg9YyxvfX0seyJ0d28tcHJvZHVjdCI6NTA1LCJ0d28tc3VtIjo1MDZ9XSw0NzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhPW4odCxyLGkpLG89bihlLHIsaSk7aWYoYT4wJiZvPjB8fGE8MCYmbzwwKXJldHVybiExO3ZhciBzPW4ocix0LGUpLGw9bihpLHQsZSk7aWYocz4wJiZsPjB8fHM8MCYmbDwwKXJldHVybiExO2lmKDA9PT1hJiYwPT09byYmMD09PXMmJjA9PT1sKXJldHVybiBmdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGk9MDtpPDI7KytpKXt2YXIgYT10W2ldLG89ZVtpXSxzPU1hdGgubWluKGEsbyksbD1NYXRoLm1heChhLG8pLGM9cltpXSx1PW5baV0saD1NYXRoLm1pbihjLHUpLGY9TWF0aC5tYXgoYyx1KTtpZihmPHN8fGw8aClyZXR1cm4hMX1yZXR1cm4hMH0odCxlLHIsaSk7cmV0dXJuITB9O3ZhciBuPXQoInJvYnVzdC1vcmllbnRhdGlvbiIpWzNdfSx7InJvYnVzdC1vcmllbnRhdGlvbiI6NDcxfV0sNDc1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPTB8dC5sZW5ndGgsbj0wfGUubGVuZ3RoO2lmKDE9PT1yJiYxPT09bilyZXR1cm4gZnVuY3Rpb24odCxlKXt2YXIgcj10K2Usbj1yLXQsaT10LShyLW4pKyhlLW4pO2lmKGkpcmV0dXJuW2kscl07cmV0dXJuW3JdfSh0WzBdLC1lWzBdKTt2YXIgaSxhLG89bmV3IEFycmF5KHIrbikscz0wLGw9MCxjPTAsdT1NYXRoLmFicyxoPXRbbF0sZj11KGgpLHA9LWVbY10sZD11KHApO2Y8ZD8oYT1oLChsKz0xKTxyJiYoaD10W2xdLGY9dShoKSkpOihhPXAsKGMrPTEpPG4mJihwPS1lW2NdLGQ9dShwKSkpO2w8ciYmZjxkfHxjPj1uPyhpPWgsKGwrPTEpPHImJihoPXRbbF0sZj11KGgpKSk6KGk9cCwoYys9MSk8biYmKHA9LWVbY10sZD11KHApKSk7dmFyIGcsbSx2PWkrYSx5PXYtaSx4PWEteSxiPXgsXz12O2Zvcig7bDxyJiZjPG47KWY8ZD8oaT1oLChsKz0xKTxyJiYoaD10W2xdLGY9dShoKSkpOihpPXAsKGMrPTEpPG4mJihwPS1lW2NdLGQ9dShwKSkpLCh4PShhPWIpLSh5PSh2PWkrYSktaSkpJiYob1tzKytdPXgpLGI9Xy0oKGc9Xyt2KS0obT1nLV8pKSsodi1tKSxfPWc7Zm9yKDtsPHI7KSh4PShhPWIpLSh5PSh2PShpPWgpK2EpLWkpKSYmKG9bcysrXT14KSxiPV8tKChnPV8rdiktKG09Zy1fKSkrKHYtbSksXz1nLChsKz0xKTxyJiYoaD10W2xdKTtmb3IoO2M8bjspKHg9KGE9YiktKHk9KHY9KGk9cCkrYSktaSkpJiYob1tzKytdPXgpLGI9Xy0oKGc9Xyt2KS0obT1nLV8pKSsodi1tKSxfPWcsKGMrPTEpPG4mJihwPS1lW2NdKTtiJiYob1tzKytdPWIpO18mJihvW3MrK109Xyk7c3x8KG9bcysrXT0wKTtyZXR1cm4gby5sZW5ndGg9cyxvfX0se31dLDQ3NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj0wfHQubGVuZ3RoLG49MHxlLmxlbmd0aDtpZigxPT09ciYmMT09PW4pcmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIHI9dCtlLG49ci10LGk9dC0oci1uKSsoZS1uKTtpZihpKXJldHVybltpLHJdO3JldHVybltyXX0odFswXSxlWzBdKTt2YXIgaSxhLG89bmV3IEFycmF5KHIrbikscz0wLGw9MCxjPTAsdT1NYXRoLmFicyxoPXRbbF0sZj11KGgpLHA9ZVtjXSxkPXUocCk7ZjxkPyhhPWgsKGwrPTEpPHImJihoPXRbbF0sZj11KGgpKSk6KGE9cCwoYys9MSk8biYmKHA9ZVtjXSxkPXUocCkpKTtsPHImJmY8ZHx8Yz49bj8oaT1oLChsKz0xKTxyJiYoaD10W2xdLGY9dShoKSkpOihpPXAsKGMrPTEpPG4mJihwPWVbY10sZD11KHApKSk7dmFyIGcsbSx2PWkrYSx5PXYtaSx4PWEteSxiPXgsXz12O2Zvcig7bDxyJiZjPG47KWY8ZD8oaT1oLChsKz0xKTxyJiYoaD10W2xdLGY9dShoKSkpOihpPXAsKGMrPTEpPG4mJihwPWVbY10sZD11KHApKSksKHg9KGE9YiktKHk9KHY9aSthKS1pKSkmJihvW3MrK109eCksYj1fLSgoZz1fK3YpLShtPWctXykpKyh2LW0pLF89Zztmb3IoO2w8cjspKHg9KGE9YiktKHk9KHY9KGk9aCkrYSktaSkpJiYob1tzKytdPXgpLGI9Xy0oKGc9Xyt2KS0obT1nLV8pKSsodi1tKSxfPWcsKGwrPTEpPHImJihoPXRbbF0pO2Zvcig7YzxuOykoeD0oYT1iKS0oeT0odj0oaT1wKSthKS1pKSkmJihvW3MrK109eCksYj1fLSgoZz1fK3YpLShtPWctXykpKyh2LW0pLF89ZywoYys9MSk8biYmKHA9ZVtjXSk7YiYmKG9bcysrXT1iKTtfJiYob1tzKytdPV8pO3N8fChvW3MrK109MCk7cmV0dXJuIG8ubGVuZ3RoPXMsb319LHt9XSw0Nzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0PDA/LTE6dD4wPzE6MH19LHt9XSw0Nzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpKG4odCkpfTt2YXIgbj10KCJib3VuZGFyeS1jZWxscyIpLGk9dCgicmVkdWNlLXNpbXBsaWNpYWwtY29tcGxleCIpfSx7ImJvdW5kYXJ5LWNlbGxzIjo4MywicmVkdWNlLXNpbXBsaWNpYWwtY29tcGxleCI6NDU2fV0sNDc5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixzKXtyPXJ8fDAsInVuZGVmaW5lZCI9PXR5cGVvZiBzJiYocz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5sZW5ndGgscj0wLG49MDtuPGU7KytuKXI9MHxNYXRoLm1heChyLHRbbl0ubGVuZ3RoKTtyZXR1cm4gci0xfSh0KSk7aWYoMD09PXQubGVuZ3RofHxzPDEpcmV0dXJue2NlbGxzOltdLHZlcnRleElkczpbXSx2ZXJ0ZXhXZWlnaHRzOltdfTt2YXIgbD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPWkubWFsbG9jVWludDgociksYT0wO2E8cjsrK2EpblthXT10W2FdPGV8MDtyZXR1cm4gbn0oZSwrciksYz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxvPWUqKGUrMSkvMipyfDAscz1pLm1hbGxvY1VpbnQzMigyKm8pLGw9MCxjPTA7YzxyOysrYylmb3IodmFyIHU9dFtjXSxlPXUubGVuZ3RoLGg9MDtoPGU7KytoKWZvcih2YXIgZj0wO2Y8aDsrK2Ype3ZhciBwPXVbZl0sZD11W2hdO3NbbCsrXT0wfE1hdGgubWluKHAsZCksc1tsKytdPTB8TWF0aC5tYXgocCxkKX1hKG4ocyxbbC8yfDAsMl0pKTtmb3IodmFyIGc9MixjPTI7YzxsO2MrPTIpc1tjLTJdPT09c1tjXSYmc1tjLTFdPT09c1tjKzFdfHwoc1tnKytdPXNbY10sc1tnKytdPXNbYysxXSk7cmV0dXJuIG4ocyxbZy8yfDAsMl0pfSh0LHMpLHU9ZnVuY3Rpb24odCxlLHIsYSl7Zm9yKHZhciBvPXQuZGF0YSxzPXQuc2hhcGVbMF0sbD1pLm1hbGxvY0RvdWJsZShzKSxjPTAsdT0wO3U8czsrK3Upe3ZhciBoPW9bMip1XSxmPW9bMip1KzFdO2lmKHJbaF0hPT1yW2ZdKXt2YXIgcD1lW2hdLGQ9ZVtmXTtvWzIqY109aCxvWzIqYysxXT1mLGxbYysrXT0oZC1hKS8oZC1wKX19cmV0dXJuIHQuc2hhcGVbMF09YyxuKGwsW2NdKX0oYyxlLGwsK3IpLGg9ZnVuY3Rpb24odCxlKXt2YXIgcj1pLm1hbGxvY0ludDMyKDIqZSksbj10LnNoYXBlWzBdLGE9dC5kYXRhO3JbMF09MDtmb3IodmFyIG89MCxzPTA7czxuOysrcyl7dmFyIGw9YVsyKnNdO2lmKGwhPT1vKXtmb3IoclsyKm8rMV09czsrK288bDspclsyKm9dPXMsclsyKm8rMV09cztyWzIqb109c319clsyKm8rMV09bjtmb3IoOysrbzxlOylyWzIqb109clsyKm8rMV09bjtyZXR1cm4gcn0oYywwfGUubGVuZ3RoKSxmPW8ocykodCxjLmRhdGEsaCxsKSxwPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wfHQuc2hhcGVbMF0scj10LmRhdGEsbj1uZXcgQXJyYXkoZSksaT0wO2k8ZTsrK2kpbltpXT1bclsyKmldLHJbMippKzFdXTtyZXR1cm4gbn0oYyksZD1bXS5zbGljZS5jYWxsKHUuZGF0YSwwLHUuc2hhcGVbMF0pO3JldHVybiBpLmZyZWUobCksaS5mcmVlKGMuZGF0YSksaS5mcmVlKHUuZGF0YSksaS5mcmVlKGgpLHtjZWxsczpmLHZlcnRleElkczpwLHZlcnRleFdlaWdodHM6ZH19O3ZhciBuPXQoIm5kYXJyYXkiKSxpPXQoInR5cGVkYXJyYXktcG9vbCIpLGE9dCgibmRhcnJheS1zb3J0Iiksbz10KCIuL2xpYi9jb2RlZ2VuIil9LHsiLi9saWIvY29kZWdlbiI6NDgwLG5kYXJyYXk6NDE3LCJuZGFycmF5LXNvcnQiOjQxNSwidHlwZWRhcnJheS1wb29sIjo1MDd9XSw0ODA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPWFbdF07ZXx8KGU9YVt0XT1mdW5jdGlvbih0KXt2YXIgZT0wLHI9bmV3IEFycmF5KHQrMSk7clswXT1bW11dO2Zvcih2YXIgYT0xO2E8PXQ7KythKWZvcih2YXIgbz1yW2FdPWkoYSkscz0wO3M8by5sZW5ndGg7KytzKWU9TWF0aC5tYXgoZSxvW2FdLmxlbmd0aCk7dmFyIGw9WyJmdW5jdGlvbiBCKEMsRSxpLGopeyIsInZhciBhPU1hdGgubWluKGksail8MCxiPU1hdGgubWF4KGksail8MCxsPUNbMiphXSxoPUNbMiphKzFdOyIsIndoaWxlKGw8aCl7IiwidmFyIG09KGwraCk+PjEsdj1FWzIqbSsxXTsiLCJpZih2PT09Yil7cmV0dXJuIG19IiwiaWYoYjx2KXtoPW19ZWxzZXtsPW0rMX0iLCJ9IiwicmV0dXJuIGw7IiwifTsiLCJmdW5jdGlvbiBnZXRDb250b3VyIix0LCJkKEYsRSxDLFMpeyIsInZhciBuPUYubGVuZ3RoLFI9W107IiwiZm9yKHZhciBpPTA7aTxuOysraSl7dmFyIGM9RltpXSxsPWMubGVuZ3RoOyJdO2Z1bmN0aW9uIGModCl7aWYoISh0Lmxlbmd0aDw9MCkpe2wucHVzaCgiUi5wdXNoKCIpO2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7KytlKXt2YXIgcj10W2VdO2U+MCYmbC5wdXNoKCIsIiksbC5wdXNoKCJbIik7Zm9yKHZhciBuPTA7bjxyLmxlbmd0aDsrK24pe3ZhciBpPXJbbl07bj4wJiZsLnB1c2goIiwiKSxsLnB1c2goIkIoQyxFLGNbIixpWzBdLCJdLGNbIixpWzFdLCJdKSIpfWwucHVzaCgiXSIpfWwucHVzaCgiKTsiKX19Zm9yKHZhciBhPXQrMTthPjE7LS1hKXthPHQrMSYmbC5wdXNoKCJlbHNlICIpLGwucHVzaCgiaWYobD09PSIsYSwiKXsiKTtmb3IodmFyIHU9W10scz0wO3M8YTsrK3MpdS5wdXNoKCIoU1tjWyIrcysiXV08PCIrcysiKSIpO2wucHVzaCgidmFyIE09Iix1LmpvaW4oIisiKSwiO2lmKE09PT0wfHxNPT09IiwoMTw8YSktMSwiKXtjb250aW51ZX1zd2l0Y2goTSl7Iik7Zm9yKHZhciBvPXJbYS0xXSxzPTA7czxvLmxlbmd0aDsrK3MpbC5wdXNoKCJjYXNlICIscywiOiIpLGMob1tzXSksbC5wdXNoKCJicmVhazsiKTtsLnB1c2goIn19Iil9cmV0dXJuIGwucHVzaCgifXJldHVybiBSO307cmV0dXJuIGdldENvbnRvdXIiLHQsImQiKSxuZXcgRnVuY3Rpb24oInBvb2wiLGwuam9pbigiIikpKG4pfSh0KSk7cmV0dXJuIGV9O3ZhciBuPXQoInR5cGVkYXJyYXktcG9vbCIpLGk9dCgibWFyY2hpbmctc2ltcGxleC10YWJsZSIpLGE9e319LHsibWFyY2hpbmctc2ltcGxleC10YWJsZSI6Mzk0LCJ0eXBlZGFycmF5LXBvb2wiOjUwN31dLDQ4MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjsidXNlIHJlc3RyaWN0Ijt2YXIgbj10KCJiaXQtdHdpZGRsZSIpLGk9dCgidW5pb24tZmluZCIpO2Z1bmN0aW9uIGEodCxlKXt2YXIgcj10Lmxlbmd0aCxuPXQubGVuZ3RoLWUubGVuZ3RoLGk9TWF0aC5taW47aWYobilyZXR1cm4gbjtzd2l0Y2gocil7Y2FzZSAwOnJldHVybiAwO2Nhc2UgMTpyZXR1cm4gdFswXS1lWzBdO2Nhc2UgMjpyZXR1cm4ocz10WzBdK3RbMV0tZVswXS1lWzFdKXx8aSh0WzBdLHRbMV0pLWkoZVswXSxlWzFdKTtjYXNlIDM6dmFyIGE9dFswXSt0WzFdLG89ZVswXStlWzFdO2lmKHM9YSt0WzJdLShvK2VbMl0pKXJldHVybiBzO3ZhciBzLGw9aSh0WzBdLHRbMV0pLGM9aShlWzBdLGVbMV0pO3JldHVybihzPWkobCx0WzJdKS1pKGMsZVsyXSkpfHxpKGwrdFsyXSxhKS1pKGMrZVsyXSxvKTtkZWZhdWx0OnZhciB1PXQuc2xpY2UoMCk7dS5zb3J0KCk7dmFyIGg9ZS5zbGljZSgwKTtoLnNvcnQoKTtmb3IodmFyIGY9MDtmPHI7KytmKWlmKG49dVtmXS1oW2ZdKXJldHVybiBuO3JldHVybiAwfX1mdW5jdGlvbiBvKHQsZSl7cmV0dXJuIGEodFswXSxlWzBdKX1mdW5jdGlvbiBzKHQsZSl7aWYoZSl7Zm9yKHZhciByPXQubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9MDtpPHI7KytpKW5baV09W3RbaV0sZVtpXV07bi5zb3J0KG8pO2ZvcihpPTA7aTxyOysraSl0W2ldPW5baV1bMF0sZVtpXT1uW2ldWzFdO3JldHVybiB0fXJldHVybiB0LnNvcnQoYSksdH1mdW5jdGlvbiBsKHQpe2lmKDA9PT10Lmxlbmd0aClyZXR1cm5bXTtmb3IodmFyIGU9MSxyPXQubGVuZ3RoLG49MTtuPHI7KytuKXt2YXIgaT10W25dO2lmKGEoaSx0W24tMV0pKXtpZihuPT09ZSl7ZSsrO2NvbnRpbnVlfXRbZSsrXT1pfX1yZXR1cm4gdC5sZW5ndGg9ZSx0fWZ1bmN0aW9uIGModCxlKXtmb3IodmFyIHI9MCxuPXQubGVuZ3RoLTEsaT0tMTtyPD1uOyl7dmFyIG89cituPj4xLHM9YSh0W29dLGUpO3M8PTA/KDA9PT1zJiYoaT1vKSxyPW8rMSk6cz4wJiYobj1vLTEpfXJldHVybiBpfWZ1bmN0aW9uIHUodCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KHQubGVuZ3RoKSxpPTAsbz1yLmxlbmd0aDtpPG87KytpKXJbaV09W107Zm9yKHZhciBzPVtdLGw9KGk9MCxlLmxlbmd0aCk7aTxsOysraSlmb3IodmFyIHU9ZVtpXSxoPXUubGVuZ3RoLGY9MSxwPTE8PGg7ZjxwOysrZil7cy5sZW5ndGg9bi5wb3BDb3VudChmKTtmb3IodmFyIGQ9MCxnPTA7ZzxoOysrZylmJjE8PGcmJihzW2QrK109dVtnXSk7dmFyIG09Yyh0LHMpO2lmKCEobTwwKSlmb3IoO3JbbSsrXS5wdXNoKGkpLCEobT49dC5sZW5ndGh8fDAhPT1hKHRbbV0scykpOyk7fXJldHVybiByfWZ1bmN0aW9uIGgodCxlKXtpZihlPDApcmV0dXJuW107Zm9yKHZhciByPVtdLGk9KDE8PGUrMSktMSxhPTA7YTx0Lmxlbmd0aDsrK2EpZm9yKHZhciBvPXRbYV0sbD1pO2w8MTw8by5sZW5ndGg7bD1uLm5leHRDb21iaW5hdGlvbihsKSl7Zm9yKHZhciBjPW5ldyBBcnJheShlKzEpLHU9MCxoPTA7aDxvLmxlbmd0aDsrK2gpbCYxPDxoJiYoY1t1KytdPW9baF0pO3IucHVzaChjKX1yZXR1cm4gcyhyKX1yLmRpbWVuc2lvbj1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPU1hdGgubWF4LG49MCxpPXQubGVuZ3RoO248aTsrK24pZT1yKGUsdFtuXS5sZW5ndGgpO3JldHVybiBlLTF9LHIuY291bnRWZXJ0aWNlcz1mdW5jdGlvbih0KXtmb3IodmFyIGU9LTEscj1NYXRoLm1heCxuPTAsaT10Lmxlbmd0aDtuPGk7KytuKWZvcih2YXIgYT10W25dLG89MCxzPWEubGVuZ3RoO288czsrK28pZT1yKGUsYVtvXSk7cmV0dXJuIGUrMX0sci5jbG9uZUNlbGxzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodC5sZW5ndGgpLHI9MCxuPXQubGVuZ3RoO3I8bjsrK3IpZVtyXT10W3JdLnNsaWNlKDApO3JldHVybiBlfSxyLmNvbXBhcmVDZWxscz1hLHIubm9ybWFsaXplPXMsci51bmlxdWU9bCxyLmZpbmRDZWxsPWMsci5pbmNpZGVuY2U9dSxyLmR1YWw9ZnVuY3Rpb24odCxlKXtpZighZSlyZXR1cm4gdShsKGgodCwwKSksdCk7Zm9yKHZhciByPW5ldyBBcnJheShlKSxuPTA7bjxlOysrbilyW25dPVtdO249MDtmb3IodmFyIGk9dC5sZW5ndGg7bjxpOysrbilmb3IodmFyIGE9dFtuXSxvPTAscz1hLmxlbmd0aDtvPHM7KytvKXJbYVtvXV0ucHVzaChuKTtyZXR1cm4gcn0sci5leHBsb2RlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXSxyPTAsbj10Lmxlbmd0aDtyPG47KytyKWZvcih2YXIgaT10W3JdLGE9MHxpLmxlbmd0aCxvPTEsbD0xPDxhO288bDsrK28pe2Zvcih2YXIgYz1bXSx1PTA7dTxhOysrdSlvPj4+dSYxJiZjLnB1c2goaVt1XSk7ZS5wdXNoKGMpfXJldHVybiBzKGUpfSxyLnNrZWxldG9uPWgsci5ib3VuZGFyeT1mdW5jdGlvbih0KXtmb3IodmFyIGU9W10scj0wLG49dC5sZW5ndGg7cjxuOysrcilmb3IodmFyIGk9dFtyXSxhPTAsbz1pLmxlbmd0aDthPG87KythKXtmb3IodmFyIGw9bmV3IEFycmF5KGkubGVuZ3RoLTEpLGM9MCx1PTA7YzxvOysrYyljIT09YSYmKGxbdSsrXT1pW2NdKTtlLnB1c2gobCl9cmV0dXJuIHMoZSl9LHIuY29ubmVjdGVkQ29tcG9uZW50cz1mdW5jdGlvbih0LGUpe3JldHVybiBlP2Z1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW5ldyBpKGUpLG49MDtuPHQubGVuZ3RoOysrbilmb3IodmFyIGE9dFtuXSxvPTA7bzxhLmxlbmd0aDsrK28pZm9yKHZhciBzPW8rMTtzPGEubGVuZ3RoOysrcylyLmxpbmsoYVtvXSxhW3NdKTt2YXIgbD1bXSxjPXIucmFua3M7Zm9yKG49MDtuPGMubGVuZ3RoOysrbiljW25dPS0xO2ZvcihuPTA7bjx0Lmxlbmd0aDsrK24pe3ZhciB1PXIuZmluZCh0W25dWzBdKTtjW3VdPDA/KGNbdV09bC5sZW5ndGgsbC5wdXNoKFt0W25dLnNsaWNlKDApXSkpOmxbY1t1XV0ucHVzaCh0W25dLnNsaWNlKDApKX1yZXR1cm4gbH0odCxlKTpmdW5jdGlvbih0KXtmb3IodmFyIGU9bChzKGgodCwwKSkpLHI9bmV3IGkoZS5sZW5ndGgpLG49MDtuPHQubGVuZ3RoOysrbilmb3IodmFyIGE9dFtuXSxvPTA7bzxhLmxlbmd0aDsrK28pZm9yKHZhciB1PWMoZSxbYVtvXV0pLGY9bysxO2Y8YS5sZW5ndGg7KytmKXIubGluayh1LGMoZSxbYVtmXV0pKTt2YXIgcD1bXSxkPXIucmFua3M7Zm9yKG49MDtuPGQubGVuZ3RoOysrbilkW25dPS0xO2ZvcihuPTA7bjx0Lmxlbmd0aDsrK24pe3ZhciBnPXIuZmluZChjKGUsW3Rbbl1bMF1dKSk7ZFtnXTwwPyhkW2ddPXAubGVuZ3RoLHAucHVzaChbdFtuXS5zbGljZSgwKV0pKTpwW2RbZ11dLnB1c2godFtuXS5zbGljZSgwKSl9cmV0dXJuIHB9KHQpfX0seyJiaXQtdHdpZGRsZSI6ODAsInVuaW9uLWZpbmQiOjUwOH1dLDQ4MjpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVs4MF1bMF0uYXBwbHkocixhcmd1bWVudHMpfSx7ZHVwOjgwfV0sNDgzOltmdW5jdGlvbih0LGUscil7YXJndW1lbnRzWzRdWzQ4MV1bMF0uYXBwbHkocixhcmd1bWVudHMpfSx7ImJpdC10d2lkZGxlIjo0ODIsZHVwOjQ4MSwidW5pb24tZmluZCI6NDg0fV0sNDg0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiOyJ1c2UgcmVzdHJpY3QiO2Z1bmN0aW9uIG4odCl7dGhpcy5yb290cz1uZXcgQXJyYXkodCksdGhpcy5yYW5rcz1uZXcgQXJyYXkodCk7Zm9yKHZhciBlPTA7ZTx0OysrZSl0aGlzLnJvb3RzW2VdPWUsdGhpcy5yYW5rc1tlXT0wfWUuZXhwb3J0cz1uLG4ucHJvdG90eXBlLmxlbmd0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJvb3RzLmxlbmd0aH0sbi5wcm90b3R5cGUubWFrZVNldD1mdW5jdGlvbigpe3ZhciB0PXRoaXMucm9vdHMubGVuZ3RoO3JldHVybiB0aGlzLnJvb3RzLnB1c2godCksdGhpcy5yYW5rcy5wdXNoKDApLHR9LG4ucHJvdG90eXBlLmZpbmQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMucm9vdHM7ZVt0XSE9PXQ7KXt2YXIgcj1lW3RdO2VbdF09ZVtyXSx0PXJ9cmV0dXJuIHR9LG4ucHJvdG90eXBlLmxpbms9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmZpbmQodCksbj10aGlzLmZpbmQoZSk7aWYociE9PW4pe3ZhciBpPXRoaXMucmFua3MsYT10aGlzLnJvb3RzLG89aVtyXSxzPWlbbl07bzxzP2Fbcl09bjpzPG8/YVtuXT1yOihhW25dPXIsKytpW3JdKX19fSx7fV0sNDg1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBhPWUubGVuZ3RoLG89dC5sZW5ndGgscz1uZXcgQXJyYXkoYSksbD1uZXcgQXJyYXkoYSksYz1uZXcgQXJyYXkoYSksdT1uZXcgQXJyYXkoYSksaD0wO2g8YTsrK2gpc1toXT1sW2hdPS0xLGNbaF09MS8wLHVbaF09ITE7Zm9yKHZhciBoPTA7aDxvOysraCl7dmFyIGY9dFtoXTtpZigyIT09Zi5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJJbnB1dCBtdXN0IGJlIGEgZ3JhcGgiKTt2YXIgcD1mWzFdLGQ9ZlswXTstMSE9PWxbZF0/bFtkXT0tMjpsW2RdPXAsLTEhPT1zW3BdP3NbcF09LTI6c1twXT1kfWZ1bmN0aW9uIGcodCl7aWYodVt0XSlyZXR1cm4gMS8wO3ZhciByLGksYSxvLGMsaD1zW3RdLGY9bFt0XTtyZXR1cm4gaDwwfHxmPDA/MS8wOihyPWVbdF0saT1lW2hdLGE9ZVtmXSxvPU1hdGguYWJzKG4ocixpLGEpKSxjPU1hdGguc3FydChNYXRoLnBvdyhpWzBdLWFbMF0sMikrTWF0aC5wb3coaVsxXS1hWzFdLDIpKSxvL2MpfWZ1bmN0aW9uIG0odCxlKXt2YXIgcj1NW3RdLG49TVtlXTtNW3RdPW4sTVtlXT1yLEFbcl09ZSxBW25dPXR9ZnVuY3Rpb24gdih0KXtyZXR1cm4gY1tNW3RdXX1mdW5jdGlvbiB5KHQpe3JldHVybiAxJnQ/dC0xPj4xOih0Pj4xKS0xfWZ1bmN0aW9uIHgodCl7Zm9yKHZhciBlPXYodCk7Oyl7dmFyIHI9ZSxuPTIqdCsxLGk9MioodCsxKSxhPXQ7aWYobjxTKXt2YXIgbz12KG4pO288ciYmKGE9bixyPW8pfWlmKGk8Uyl7dmFyIHM9dihpKTtzPHImJihhPWkpfWlmKGE9PT10KXJldHVybiB0O20odCxhKSx0PWF9fWZ1bmN0aW9uIGIodCl7Zm9yKHZhciBlPXYodCk7dD4wOyl7dmFyIHI9eSh0KTtpZihyPj0wKXt2YXIgbj12KHIpO2lmKGU8bil7bSh0LHIpLHQ9cjtjb250aW51ZX19cmV0dXJuIHR9fWZ1bmN0aW9uIF8oKXtpZihTPjApe3ZhciB0PU1bMF07cmV0dXJuIG0oMCxTLTEpLFMtPTEseCgwKSx0fXJldHVybi0xfWZ1bmN0aW9uIHcodCxlKXt2YXIgcj1NW3RdO3JldHVybiBjW3JdPT09ZT90OihjW3JdPS0xLzAsYih0KSxfKCksY1tyXT1lLGIoKFMrPTEpLTEpKX1mdW5jdGlvbiBrKHQpe2lmKCF1W3RdKXt1W3RdPSEwO3ZhciBlPXNbdF0scj1sW3RdO3Nbcl0+PTAmJihzW3JdPWUpLGxbZV0+PTAmJihsW2VdPXIpLEFbZV0+PTAmJncoQVtlXSxnKGUpKSxBW3JdPj0wJiZ3KEFbcl0sZyhyKSl9fWZvcih2YXIgTT1bXSxBPW5ldyBBcnJheShhKSxoPTA7aDxhOysraCl7dmFyIFQ9Y1toXT1nKGgpO1Q8MS8wPyhBW2hdPU0ubGVuZ3RoLE0ucHVzaChoKSk6QVtoXT0tMX1mb3IodmFyIFM9TS5sZW5ndGgsaD1TPj4xO2g+PTA7LS1oKXgoaCk7Zm9yKDs7KXt2YXIgRT1fKCk7aWYoRTwwfHxjW0VdPnIpYnJlYWs7ayhFKX1mb3IodmFyIEM9W10saD0wO2g8YTsrK2gpdVtoXXx8KEFbaF09Qy5sZW5ndGgsQy5wdXNoKGVbaF0uc2xpY2UoKSkpO0MubGVuZ3RoO2Z1bmN0aW9uIEwodCxlKXtpZih0W2VdPDApcmV0dXJuIGU7dmFyIHI9ZSxuPWU7ZG97dmFyIGk9dFtuXTtpZighdVtuXXx8aTwwfHxpPT09bilicmVhaztpZihpPXRbbj1pXSwhdVtuXXx8aTwwfHxpPT09bilicmVhaztuPWkscj10W3JdfXdoaWxlKHIhPT1uKTtmb3IodmFyIGE9ZTthIT09bjthPXRbYV0pdFthXT1uO3JldHVybiBufXZhciB6PVtdO3JldHVybiB0LmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9TChzLHRbMF0pLHI9TChsLHRbMV0pO2lmKGU+PTAmJnI+PTAmJmUhPT1yKXt2YXIgbj1BW2VdLGk9QVtyXTtuIT09aSYmei5wdXNoKFtuLGldKX19KSxpLnVuaXF1ZShpLm5vcm1hbGl6ZSh6KSkse3Bvc2l0aW9uczpDLGVkZ2VzOnp9fTt2YXIgbj10KCJyb2J1c3Qtb3JpZW50YXRpb24iKSxpPXQoInNpbXBsaWNpYWwtY29tcGxleCIpfSx7InJvYnVzdC1vcmllbnRhdGlvbiI6NDcxLCJzaW1wbGljaWFsLWNvbXBsZXgiOjQ4M31dLDQ4NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixhLG8scztpZihlWzBdWzBdPGVbMV1bMF0pcj1lWzBdLGE9ZVsxXTtlbHNle2lmKCEoZVswXVswXT5lWzFdWzBdKSlyZXR1cm4gaShlLHQpO3I9ZVsxXSxhPWVbMF19aWYodFswXVswXTx0WzFdWzBdKW89dFswXSxzPXRbMV07ZWxzZXtpZighKHRbMF1bMF0+dFsxXVswXSkpcmV0dXJuLWkodCxlKTtvPXRbMV0scz10WzBdfXZhciBsPW4ocixhLHMpLGM9bihyLGEsbyk7aWYobDwwKXtpZihjPD0wKXJldHVybiBsfWVsc2UgaWYobD4wKXtpZihjPj0wKXJldHVybiBsfWVsc2UgaWYoYylyZXR1cm4gYztpZihsPW4ocyxvLGEpLGM9bihzLG8sciksbDwwKXtpZihjPD0wKXJldHVybiBsfWVsc2UgaWYobD4wKXtpZihjPj0wKXJldHVybiBsfWVsc2UgaWYoYylyZXR1cm4gYztyZXR1cm4gYVswXS1zWzBdfTt2YXIgbj10KCJyb2J1c3Qtb3JpZW50YXRpb24iKTtmdW5jdGlvbiBpKHQsZSl7dmFyIHIsaSxhLG87aWYoZVswXVswXTxlWzFdWzBdKXI9ZVswXSxpPWVbMV07ZWxzZXtpZighKGVbMF1bMF0+ZVsxXVswXSkpe3ZhciBzPU1hdGgubWluKHRbMF1bMV0sdFsxXVsxXSksbD1NYXRoLm1heCh0WzBdWzFdLHRbMV1bMV0pLGM9TWF0aC5taW4oZVswXVsxXSxlWzFdWzFdKSx1PU1hdGgubWF4KGVbMF1bMV0sZVsxXVsxXSk7cmV0dXJuIGw8Yz9sLWM6cz51P3MtdTpsLXV9cj1lWzFdLGk9ZVswXX10WzBdWzFdPHRbMV1bMV0/KGE9dFswXSxvPXRbMV0pOihhPXRbMV0sbz10WzBdKTt2YXIgaD1uKGkscixhKTtyZXR1cm4gaHx8KChoPW4oaSxyLG8pKXx8by1pKX19LHsicm9idXN0LW9yaWVudGF0aW9uIjo0NzF9XSw0ODc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPTIqZSxuPW5ldyBBcnJheShyKSxhPTA7YTxlOysrYSl7dmFyIGw9dFthXSxjPWxbMF1bMF08bFsxXVswXTtuWzIqYV09bmV3IGgobFswXVswXSxsLGMsYSksblsyKmErMV09bmV3IGgobFsxXVswXSxsLCFjLGEpfW4uc29ydChmdW5jdGlvbih0LGUpe3ZhciByPXQueC1lLng7cmV0dXJuIHJ8fCgocj10LmNyZWF0ZS1lLmNyZWF0ZSl8fE1hdGgubWluKHQuc2VnbWVudFswXVsxXSx0LnNlZ21lbnRbMV1bMV0pLU1hdGgubWluKGUuc2VnbWVudFswXVsxXSxlLnNlZ21lbnRbMV1bMV0pKX0pO2Zvcih2YXIgZj1pKG8pLHA9W10sZD1bXSxnPVtdLGE9MDthPHI7KXtmb3IodmFyIG09blthXS54LHY9W107YTxyOyl7dmFyIHk9blthXTtpZih5LnghPT1tKWJyZWFrO2ErPTEseS5zZWdtZW50WzBdWzBdPT09eS54JiZ5LnNlZ21lbnRbMV1bMF09PT15Lng/eS5jcmVhdGUmJih5LnNlZ21lbnRbMF1bMV08eS5zZWdtZW50WzFdWzFdPyh2LnB1c2gobmV3IHUoeS5zZWdtZW50WzBdWzFdLHkuaW5kZXgsITAsITApKSx2LnB1c2gobmV3IHUoeS5zZWdtZW50WzFdWzFdLHkuaW5kZXgsITEsITEpKSk6KHYucHVzaChuZXcgdSh5LnNlZ21lbnRbMV1bMV0seS5pbmRleCwhMCwhMSkpLHYucHVzaChuZXcgdSh5LnNlZ21lbnRbMF1bMV0seS5pbmRleCwhMSwhMCkpKSk6Zj15LmNyZWF0ZT9mLmluc2VydCh5LnNlZ21lbnQseS5pbmRleCk6Zi5yZW1vdmUoeS5zZWdtZW50KX1wLnB1c2goZi5yb290KSxkLnB1c2gobSksZy5wdXNoKHYpfXJldHVybiBuZXcgcyhwLGQsZyl9O3ZhciBuPXQoImJpbmFyeS1zZWFyY2gtYm91bmRzIiksaT10KCJmdW5jdGlvbmFsLXJlZC1ibGFjay10cmVlIiksYT10KCJyb2J1c3Qtb3JpZW50YXRpb24iKSxvPXQoIi4vbGliL29yZGVyLXNlZ21lbnRzIik7ZnVuY3Rpb24gcyh0LGUscil7dGhpcy5zbGFicz10LHRoaXMuY29vcmRpbmF0ZXM9ZSx0aGlzLmhvcml6b250YWw9cn1mdW5jdGlvbiBsKHQsZSl7cmV0dXJuIHQueS1lfWZ1bmN0aW9uIGModCxlKXtmb3IodmFyIHI9bnVsbDt0Oyl7dmFyIG4saSxvPXQua2V5O29bMF1bMF08b1sxXVswXT8obj1vWzBdLGk9b1sxXSk6KG49b1sxXSxpPW9bMF0pO3ZhciBzPWEobixpLGUpO2lmKHM8MCl0PXQubGVmdDtlbHNlIGlmKHM+MClpZihlWzBdIT09b1sxXVswXSlyPXQsdD10LnJpZ2h0O2Vsc2V7aWYobD1jKHQucmlnaHQsZSkpcmV0dXJuIGw7dD10LmxlZnR9ZWxzZXtpZihlWzBdIT09b1sxXVswXSlyZXR1cm4gdDt2YXIgbDtpZihsPWModC5yaWdodCxlKSlyZXR1cm4gbDt0PXQubGVmdH19cmV0dXJuIHJ9ZnVuY3Rpb24gdSh0LGUscixuKXt0aGlzLnk9dCx0aGlzLmluZGV4PWUsdGhpcy5zdGFydD1yLHRoaXMuY2xvc2VkPW59ZnVuY3Rpb24gaCh0LGUscixuKXt0aGlzLng9dCx0aGlzLnNlZ21lbnQ9ZSx0aGlzLmNyZWF0ZT1yLHRoaXMuaW5kZXg9bn1zLnByb3RvdHlwZS5jYXN0VXA9ZnVuY3Rpb24odCl7dmFyIGU9bi5sZSh0aGlzLmNvb3JkaW5hdGVzLHRbMF0pO2lmKGU8MClyZXR1cm4tMTt0aGlzLnNsYWJzW2VdO3ZhciByPWModGhpcy5zbGFic1tlXSx0KSxpPS0xO2lmKHImJihpPXIudmFsdWUpLHRoaXMuY29vcmRpbmF0ZXNbZV09PT10WzBdKXt2YXIgcz1udWxsO2lmKHImJihzPXIua2V5KSxlPjApe3ZhciB1PWModGhpcy5zbGFic1tlLTFdLHQpO3UmJihzP28odS5rZXkscyk+MCYmKHM9dS5rZXksaT11LnZhbHVlKTooaT11LnZhbHVlLHM9dS5rZXkpKX12YXIgaD10aGlzLmhvcml6b250YWxbZV07aWYoaC5sZW5ndGg+MCl7dmFyIGY9bi5nZShoLHRbMV0sbCk7aWYoZjxoLmxlbmd0aCl7dmFyIHA9aFtmXTtpZih0WzFdPT09cC55KXtpZihwLmNsb3NlZClyZXR1cm4gcC5pbmRleDtmb3IoO2Y8aC5sZW5ndGgtMSYmaFtmKzFdLnk9PT10WzFdOylpZigocD1oW2YrPTFdKS5jbG9zZWQpcmV0dXJuIHAuaW5kZXg7aWYocC55PT09dFsxXSYmIXAuc3RhcnQpe2lmKChmKz0xKT49aC5sZW5ndGgpcmV0dXJuIGk7cD1oW2ZdfX1pZihwLnN0YXJ0KWlmKHMpe3ZhciBkPWEoc1swXSxzWzFdLFt0WzBdLHAueV0pO3NbMF1bMF0+c1sxXVswXSYmKGQ9LWQpLGQ+MCYmKGk9cC5pbmRleCl9ZWxzZSBpPXAuaW5kZXg7ZWxzZSBwLnkhPT10WzFdJiYoaT1wLmluZGV4KX19fXJldHVybiBpfX0seyIuL2xpYi9vcmRlci1zZWdtZW50cyI6NDg2LCJiaW5hcnktc2VhcmNoLWJvdW5kcyI6NzksImZ1bmN0aW9uYWwtcmVkLWJsYWNrLXRyZWUiOjIxOSwicm9idXN0LW9yaWVudGF0aW9uIjo0NzF9XSw0ODg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgicm9idXN0LWRvdC1wcm9kdWN0IiksaT10KCJyb2J1c3Qtc3VtIik7ZnVuY3Rpb24gYSh0LGUpe3ZhciByPWkobih0LGUpLFtlW2UubGVuZ3RoLTFdXSk7cmV0dXJuIHJbci5sZW5ndGgtMV19ZnVuY3Rpb24gbyh0LGUscixuKXt2YXIgaT0tZS8obi1lKTtpPDA/aT0wOmk+MSYmKGk9MSk7Zm9yKHZhciBhPTEtaSxvPXQubGVuZ3RoLHM9bmV3IEFycmF5KG8pLGw9MDtsPG87KytsKXNbbF09aSp0W2xdK2EqcltsXTtyZXR1cm4gc31lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9W10sbj1bXSxpPWEodFt0Lmxlbmd0aC0xXSxlKSxzPXRbdC5sZW5ndGgtMV0sbD10WzBdLGM9MDtjPHQubGVuZ3RoOysrYyxzPWwpe3ZhciB1PWEobD10W2NdLGUpO2lmKGk8MCYmdT4wfHxpPjAmJnU8MCl7dmFyIGg9byhzLHUsbCxpKTtyLnB1c2goaCksbi5wdXNoKGguc2xpY2UoKSl9dTwwP24ucHVzaChsLnNsaWNlKCkpOnU+MD9yLnB1c2gobC5zbGljZSgpKTooci5wdXNoKGwuc2xpY2UoKSksbi5wdXNoKGwuc2xpY2UoKSkpLGk9dX1yZXR1cm57cG9zaXRpdmU6cixuZWdhdGl2ZTpufX0sZS5leHBvcnRzLnBvc2l0aXZlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLG49YSh0W3QubGVuZ3RoLTFdLGUpLGk9dFt0Lmxlbmd0aC0xXSxzPXRbMF0sbD0wO2w8dC5sZW5ndGg7KytsLGk9cyl7dmFyIGM9YShzPXRbbF0sZSk7KG48MCYmYz4wfHxuPjAmJmM8MCkmJnIucHVzaChvKGksYyxzLG4pKSxjPj0wJiZyLnB1c2gocy5zbGljZSgpKSxuPWN9cmV0dXJuIHJ9LGUuZXhwb3J0cy5uZWdhdGl2ZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxuPWEodFt0Lmxlbmd0aC0xXSxlKSxpPXRbdC5sZW5ndGgtMV0scz10WzBdLGw9MDtsPHQubGVuZ3RoOysrbCxpPXMpe3ZhciBjPWEocz10W2xdLGUpOyhuPDAmJmM+MHx8bj4wJiZjPDApJiZyLnB1c2gobyhpLGMscyxuKSksYzw9MCYmci5wdXNoKHMuc2xpY2UoKSksbj1jfXJldHVybiByfX0seyJyb2J1c3QtZG90LXByb2R1Y3QiOjQ2OCwicm9idXN0LXN1bSI6NDc2fV0sNDg5OltmdW5jdGlvbih0LGUscil7IWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciB0PXtub3Rfc3RyaW5nOi9bXnNdLyxub3RfYm9vbDovW150XS8sbm90X3R5cGU6L1teVF0vLG5vdF9wcmltaXRpdmU6L1tedl0vLG51bWJlcjovW2RpZWZnXS8sbnVtZXJpY19hcmc6L1tiY2RpZWZndXhYXS8sanNvbjovW2pdLyxub3RfanNvbjovW15qXS8sdGV4dDovXlteXHgyNV0rLyxtb2R1bG86L15ceDI1ezJ9LyxwbGFjZWhvbGRlcjovXlx4MjUoPzooWzEtOV1cZCopXCR8XCgoW15cKV0rKVwpKT8oXCspPygwfCdbXiRdKT8oLSk/KFxkKyk/KD86XC4oXGQrKSk/KFtiLWdpam9zdFR1dnhYXSkvLGtleTovXihbYS16X11bYS16X1xkXSopL2ksa2V5X2FjY2VzczovXlwuKFthLXpfXVthLXpfXGRdKikvaSxpbmRleF9hY2Nlc3M6L15cWyhcZCspXF0vLHNpZ246L15bXCtcLV0vfTtmdW5jdGlvbiBlKHIpe3JldHVybiBmdW5jdGlvbihyLG4pe3ZhciBpLGEsbyxzLGwsYyx1LGgsZixwPTEsZD1yLmxlbmd0aCxnPSIiO2ZvcihhPTA7YTxkO2ErKylpZigic3RyaW5nIj09dHlwZW9mIHJbYV0pZys9clthXTtlbHNlIGlmKEFycmF5LmlzQXJyYXkoclthXSkpe2lmKChzPXJbYV0pWzJdKWZvcihpPW5bcF0sbz0wO288c1syXS5sZW5ndGg7bysrKXtpZighaS5oYXNPd25Qcm9wZXJ0eShzWzJdW29dKSl0aHJvdyBuZXcgRXJyb3IoZSgnW3NwcmludGZdIHByb3BlcnR5ICIlcyIgZG9lcyBub3QgZXhpc3QnLHNbMl1bb10pKTtpPWlbc1syXVtvXV19ZWxzZSBpPXNbMV0/bltzWzFdXTpuW3ArK107aWYodC5ub3RfdHlwZS50ZXN0KHNbOF0pJiZ0Lm5vdF9wcmltaXRpdmUudGVzdChzWzhdKSYmaSBpbnN0YW5jZW9mIEZ1bmN0aW9uJiYoaT1pKCkpLHQubnVtZXJpY19hcmcudGVzdChzWzhdKSYmIm51bWJlciIhPXR5cGVvZiBpJiZpc05hTihpKSl0aHJvdyBuZXcgVHlwZUVycm9yKGUoIltzcHJpbnRmXSBleHBlY3RpbmcgbnVtYmVyIGJ1dCBmb3VuZCAlVCIsaSkpO3N3aXRjaCh0Lm51bWJlci50ZXN0KHNbOF0pJiYoaD1pPj0wKSxzWzhdKXtjYXNlImIiOmk9cGFyc2VJbnQoaSwxMCkudG9TdHJpbmcoMik7YnJlYWs7Y2FzZSJjIjppPVN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoaSwxMCkpO2JyZWFrO2Nhc2UiZCI6Y2FzZSJpIjppPXBhcnNlSW50KGksMTApO2JyZWFrO2Nhc2UiaiI6aT1KU09OLnN0cmluZ2lmeShpLG51bGwsc1s2XT9wYXJzZUludChzWzZdKTowKTticmVhaztjYXNlImUiOmk9c1s3XT9wYXJzZUZsb2F0KGkpLnRvRXhwb25lbnRpYWwoc1s3XSk6cGFyc2VGbG9hdChpKS50b0V4cG9uZW50aWFsKCk7YnJlYWs7Y2FzZSJmIjppPXNbN10/cGFyc2VGbG9hdChpKS50b0ZpeGVkKHNbN10pOnBhcnNlRmxvYXQoaSk7YnJlYWs7Y2FzZSJnIjppPXNbN10/U3RyaW5nKE51bWJlcihpLnRvUHJlY2lzaW9uKHNbN10pKSk6cGFyc2VGbG9hdChpKTticmVhaztjYXNlIm8iOmk9KHBhcnNlSW50KGksMTApPj4+MCkudG9TdHJpbmcoOCk7YnJlYWs7Y2FzZSJzIjppPVN0cmluZyhpKSxpPXNbN10/aS5zdWJzdHJpbmcoMCxzWzddKTppO2JyZWFrO2Nhc2UidCI6aT1TdHJpbmcoISFpKSxpPXNbN10/aS5zdWJzdHJpbmcoMCxzWzddKTppO2JyZWFrO2Nhc2UiVCI6aT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaSkuc2xpY2UoOCwtMSkudG9Mb3dlckNhc2UoKSxpPXNbN10/aS5zdWJzdHJpbmcoMCxzWzddKTppO2JyZWFrO2Nhc2UidSI6aT1wYXJzZUludChpLDEwKT4+PjA7YnJlYWs7Y2FzZSJ2IjppPWkudmFsdWVPZigpLGk9c1s3XT9pLnN1YnN0cmluZygwLHNbN10pOmk7YnJlYWs7Y2FzZSJ4IjppPShwYXJzZUludChpLDEwKT4+PjApLnRvU3RyaW5nKDE2KTticmVhaztjYXNlIlgiOmk9KHBhcnNlSW50KGksMTApPj4+MCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCl9dC5qc29uLnRlc3Qoc1s4XSk/Zys9aTooIXQubnVtYmVyLnRlc3Qoc1s4XSl8fGgmJiFzWzNdP2Y9IiI6KGY9aD8iKyI6Ii0iLGk9aS50b1N0cmluZygpLnJlcGxhY2UodC5zaWduLCIiKSksYz1zWzRdPyIwIj09PXNbNF0/IjAiOnNbNF0uY2hhckF0KDEpOiIgIix1PXNbNl0tKGYraSkubGVuZ3RoLGw9c1s2XSYmdT4wP2MucmVwZWF0KHUpOiIiLGcrPXNbNV0/ZitpK2w6IjAiPT09Yz9mK2wraTpsK2YraSl9cmV0dXJuIGd9KGZ1bmN0aW9uKGUpe2lmKGlbZV0pcmV0dXJuIGlbZV07dmFyIHIsbj1lLGE9W10sbz0wO2Zvcig7bjspe2lmKG51bGwhPT0ocj10LnRleHQuZXhlYyhuKSkpYS5wdXNoKHJbMF0pO2Vsc2UgaWYobnVsbCE9PShyPXQubW9kdWxvLmV4ZWMobikpKWEucHVzaCgiJSIpO2Vsc2V7aWYobnVsbD09PShyPXQucGxhY2Vob2xkZXIuZXhlYyhuKSkpdGhyb3cgbmV3IFN5bnRheEVycm9yKCJbc3ByaW50Zl0gdW5leHBlY3RlZCBwbGFjZWhvbGRlciIpO2lmKHJbMl0pe298PTE7dmFyIHM9W10sbD1yWzJdLGM9W107aWYobnVsbD09PShjPXQua2V5LmV4ZWMobCkpKXRocm93IG5ldyBTeW50YXhFcnJvcigiW3NwcmludGZdIGZhaWxlZCB0byBwYXJzZSBuYW1lZCBhcmd1bWVudCBrZXkiKTtmb3Iocy5wdXNoKGNbMV0pOyIiIT09KGw9bC5zdWJzdHJpbmcoY1swXS5sZW5ndGgpKTspaWYobnVsbCE9PShjPXQua2V5X2FjY2Vzcy5leGVjKGwpKSlzLnB1c2goY1sxXSk7ZWxzZXtpZihudWxsPT09KGM9dC5pbmRleF9hY2Nlc3MuZXhlYyhsKSkpdGhyb3cgbmV3IFN5bnRheEVycm9yKCJbc3ByaW50Zl0gZmFpbGVkIHRvIHBhcnNlIG5hbWVkIGFyZ3VtZW50IGtleSIpO3MucHVzaChjWzFdKX1yWzJdPXN9ZWxzZSBvfD0yO2lmKDM9PT1vKXRocm93IG5ldyBFcnJvcigiW3NwcmludGZdIG1peGluZyBwb3NpdGlvbmFsIGFuZCBuYW1lZCBwbGFjZWhvbGRlcnMgaXMgbm90ICh5ZXQpIHN1cHBvcnRlZCIpO2EucHVzaChyKX1uPW4uc3Vic3RyaW5nKHJbMF0ubGVuZ3RoKX1yZXR1cm4gaVtlXT1hfShyKSxhcmd1bWVudHMpfWZ1bmN0aW9uIG4odCxyKXtyZXR1cm4gZS5hcHBseShudWxsLFt0XS5jb25jYXQocnx8W10pKX12YXIgaT1PYmplY3QuY3JlYXRlKG51bGwpOyJ1bmRlZmluZWQiIT10eXBlb2YgciYmKHIuc3ByaW50Zj1lLHIudnNwcmludGY9biksInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJih3aW5kb3cuc3ByaW50Zj1lLHdpbmRvdy52c3ByaW50Zj1uKX0oKX0se31dLDQ5MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJwYXJlbnRoZXNpcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7aWYobnVsbD09dCl0aHJvdyBFcnJvcigiRmlyc3QgYXJndW1lbnQgc2hvdWxkIGJlIGEgc3RyaW5nIik7aWYobnVsbD09ZSl0aHJvdyBFcnJvcigiU2VwYXJhdG9yIHNob3VsZCBiZSBhIHN0cmluZyBvciBhIFJlZ0V4cCIpO3I/KCJzdHJpbmciPT10eXBlb2Ygcnx8QXJyYXkuaXNBcnJheShyKSkmJihyPXtpZ25vcmU6cn0pOnI9e30sbnVsbD09ci5lc2NhcGUmJihyLmVzY2FwZT0hMCksbnVsbD09ci5pZ25vcmU/ci5pZ25vcmU9WyJbXSIsIigpIiwie30iLCI8PiIsJyIiJywiJyciLCJgYCIsIlx1MjAxY1x1MjAxZCIsIlx4YWJceGJiIl06KCJzdHJpbmciPT10eXBlb2Ygci5pZ25vcmUmJihyLmlnbm9yZT1bci5pZ25vcmVdKSxyLmlnbm9yZT1yLmlnbm9yZS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIDE9PT10Lmxlbmd0aCYmKHQrPXQpLHR9KSk7dmFyIGk9bi5wYXJzZSh0LHtmbGF0OiEwLGJyYWNrZXRzOnIuaWdub3JlfSksYT1pWzBdLnNwbGl0KGUpO2lmKHIuZXNjYXBlKXtmb3IodmFyIG89W10scz0wO3M8YS5sZW5ndGg7cysrKXt2YXIgbD1hW3NdLGM9YVtzKzFdOyJcXCI9PT1sW2wubGVuZ3RoLTFdJiYiXFwiIT09bFtsLmxlbmd0aC0yXT8oby5wdXNoKGwrZStjKSxzKyspOm8ucHVzaChsKX1hPW99Zm9yKHM9MDtzPGEubGVuZ3RoO3MrKylpWzBdPWFbc10sYVtzXT1uLnN0cmluZ2lmeShpLHtmbGF0OiEwfSk7cmV0dXJuIGF9fSx7cGFyZW50aGVzaXM6NDI1fV0sNDkxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5sZW5ndGgscj1uZXcgQXJyYXkoZSksbj1uZXcgQXJyYXkoZSksaT1uZXcgQXJyYXkoZSksYT1uZXcgQXJyYXkoZSksbz1uZXcgQXJyYXkoZSkscz1uZXcgQXJyYXkoZSksbD0wO2w8ZTsrK2wpcltsXT0tMSxuW2xdPTAsaVtsXT0hMSxhW2xdPTAsb1tsXT0tMSxzW2xdPVtdO3ZhciBjLHU9MCxoPVtdLGY9W107ZnVuY3Rpb24gcChlKXt2YXIgbD1bZV0sYz1bZV07Zm9yKHJbZV09bltlXT11LGlbZV09ITAsdSs9MTtjLmxlbmd0aD4wOyl7ZT1jW2MubGVuZ3RoLTFdO3ZhciBwPXRbZV07aWYoYVtlXTxwLmxlbmd0aCl7Zm9yKHZhciBkPWFbZV07ZDxwLmxlbmd0aDsrK2Qpe3ZhciBnPXBbZF07aWYocltnXTwwKXtyW2ddPW5bZ109dSxpW2ddPSEwLHUrPTEsbC5wdXNoKGcpLGMucHVzaChnKTticmVha31pW2ddJiYobltlXT0wfE1hdGgubWluKG5bZV0sbltnXSkpLG9bZ10+PTAmJnNbZV0ucHVzaChvW2ddKX1hW2VdPWR9ZWxzZXtpZihuW2VdPT09cltlXSl7Zm9yKHZhciBtPVtdLHY9W10seT0wLGQ9bC5sZW5ndGgtMTtkPj0wOy0tZCl7dmFyIHg9bFtkXTtpZihpW3hdPSExLG0ucHVzaCh4KSx2LnB1c2goc1t4XSkseSs9c1t4XS5sZW5ndGgsb1t4XT1oLmxlbmd0aCx4PT09ZSl7bC5sZW5ndGg9ZDticmVha319aC5wdXNoKG0pO2Zvcih2YXIgYj1uZXcgQXJyYXkoeSksZD0wO2Q8di5sZW5ndGg7ZCsrKWZvcih2YXIgXz0wO188dltkXS5sZW5ndGg7XysrKWJbLS15XT12W2RdW19dO2YucHVzaChiKX1jLnBvcCgpfX19Zm9yKHZhciBsPTA7bDxlOysrbClyW2xdPDAmJnAobCk7Zm9yKHZhciBsPTA7bDxmLmxlbmd0aDtsKyspe3ZhciBkPWZbbF07aWYoMCE9PWQubGVuZ3RoKXtkLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC1lfSksYz1bZFswXV07Zm9yKHZhciBnPTE7ZzxkLmxlbmd0aDtnKyspZFtnXSE9PWRbZy0xXSYmYy5wdXNoKGRbZ10pO2ZbbF09Y319cmV0dXJue2NvbXBvbmVudHM6aCxhZGphY2VuY3lMaXN0OmZ9fX0se31dLDQ5MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQuc3BsaXQoIiIpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdCBpbiBuP25bdF06IiJ9KS5qb2luKCIiKX07dmFyIG49eyIgIjoiICIsMDoiXHUyMDcwIiwxOiJceGI5IiwyOiJceGIyIiwzOiJceGIzIiw0OiJcdTIwNzQiLDU6Ilx1MjA3NSIsNjoiXHUyMDc2Iiw3OiJcdTIwNzciLDg6Ilx1MjA3OCIsOToiXHUyMDc5IiwiKyI6Ilx1MjA3YSIsIi0iOiJcdTIwN2IiLGE6Ilx1MWQ0MyIsYjoiXHUxZDQ3IixjOiJcdTFkOWMiLGQ6Ilx1MWQ0OCIsZToiXHUxZDQ5IixmOiJcdTFkYTAiLGc6Ilx1MWQ0ZCIsaDoiXHUwMmIwIixpOiJcdTIwNzEiLGo6Ilx1MDJiMiIsazoiXHUxZDRmIixsOiJcdTAyZTEiLG06Ilx1MWQ1MCIsbjoiXHUyMDdmIixvOiJcdTFkNTIiLHA6Ilx1MWQ1NiIscjoiXHUwMmIzIixzOiJcdTAyZTIiLHQ6Ilx1MWQ1NyIsdToiXHUxZDU4Iix2OiJcdTFkNWIiLHc6Ilx1MDJiNyIseDoiXHUwMmUzIix5OiJcdTAyYjgiLHo6Ilx1MWRiYiJ9fSx7fV0sNDkzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKHQuZGltZW5zaW9uPD0wKXJldHVybntwb3NpdGlvbnM6W10sY2VsbHM6W119O2lmKDE9PT10LmRpbWVuc2lvbilyZXR1cm4gZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9YSh0LGUpLG49ci5sZW5ndGgsaT1uZXcgQXJyYXkobiksbz1uZXcgQXJyYXkobikscz0wO3M8bjsrK3MpaVtzXT1bcltzXV0sb1tzXT1bc107cmV0dXJue3Bvc2l0aW9uczppLGNlbGxzOm99fSh0LGUpO3ZhciByPXQub3JkZXIuam9pbigpKyItIit0LmR0eXBlLHM9b1tyXSxlPStlfHwwO3N8fChzPW9bcl09ZnVuY3Rpb24odCxlKXt2YXIgcj10Lmxlbmd0aCxhPVsiJ3VzZSBzdHJpY3QnOyJdLG89InN1cmZhY2VOZXRzIit0LmpvaW4oIl8iKSsiZCIrZTthLnB1c2goInZhciBjb250b3VyPWdlbkNvbnRvdXIoeyIsIm9yZGVyOlsiLHQuam9pbigpLCJdLCIsInNjYWxhckFyZ3VtZW50czogMywiLCJwaGFzZTpmdW5jdGlvbiBwaGFzZUZ1bmMocCxhLGIsYykgeyByZXR1cm4gKHAgPiBjKXwwIH0sIiksImdlbmVyaWMiPT09ZSYmYS5wdXNoKCJnZXR0ZXJzOlswXSwiKTtmb3IodmFyIHM9W10sbD1bXSxjPTA7YzxyOysrYylzLnB1c2goImQiK2MpLGwucHVzaCgiZCIrYyk7Zm9yKHZhciBjPTA7YzwxPDxyOysrYylzLnB1c2goInYiK2MpLGwucHVzaCgidiIrYyk7Zm9yKHZhciBjPTA7YzwxPDxyOysrYylzLnB1c2goInAiK2MpLGwucHVzaCgicCIrYyk7cy5wdXNoKCJhIiwiYiIsImMiKSxsLnB1c2goImEiLCJjIiksYS5wdXNoKCJ2ZXJ0ZXg6ZnVuY3Rpb24gdmVydGV4RnVuYygiLHMuam9pbigpLCIpeyIpO2Zvcih2YXIgdT1bXSxjPTA7YzwxPDxyOysrYyl1LnB1c2goIihwIitjKyI8PCIrYysiKSIpO2EucHVzaCgidmFyIG09KCIsdS5qb2luKCIrIiksIil8MDtpZihtPT09MHx8bT09PSIsKDE8PCgxPDxyKSktMSwiKXtyZXR1cm59Iik7dmFyIGg9W10sZj1bXTsxPDwoMTw8cik8PTEyOD8oYS5wdXNoKCJzd2l0Y2gobSl7IiksZj1hKTphLnB1c2goInN3aXRjaChtPj4+Nyl7Iik7Zm9yKHZhciBjPTA7YzwxPDwoMTw8cik7KytjKXtpZigxPDwoMTw8cik+MTI4JiZjJTEyOD09MCl7aC5sZW5ndGg+MCYmZi5wdXNoKCJ9fSIpO3ZhciBwPSJ2RXh0cmEiK2gubGVuZ3RoO2EucHVzaCgiY2FzZSAiLGM+Pj43LCI6IixwLCIobSYweDdmLCIsbC5qb2luKCksIik7YnJlYWs7IiksZj1bImZ1bmN0aW9uICIscCwiKG0sIixsLmpvaW4oKSwiKXtzd2l0Y2gobSl7Il0saC5wdXNoKGYpfWYucHVzaCgiY2FzZSAiLDEyNyZjLCI6Iik7Zm9yKHZhciBkPW5ldyBBcnJheShyKSxnPW5ldyBBcnJheShyKSxtPW5ldyBBcnJheShyKSx2PW5ldyBBcnJheShyKSx5PTAseD0wO3g8cjsrK3gpZFt4XT1bXSxnW3hdPVtdLG1beF09MCx2W3hdPTA7Zm9yKHZhciB4PTA7eDwxPDxyOysreClmb3IodmFyIGI9MDtiPHI7KytiKXt2YXIgXz14XjE8PGI7aWYoIShfPngpJiYhKGMmMTw8XykhPSEoYyYxPDx4KSl7dmFyIHc9MTtjJjE8PF8/Z1tiXS5wdXNoKCJ2IitfKyItdiIreCk6KGdbYl0ucHVzaCgidiIreCsiLXYiK18pLHc9LXcpLHc8MD8oZFtiXS5wdXNoKCItdiIreCsiLXYiK18pLG1bYl0rPTIpOihkW2JdLnB1c2goInYiK3grIit2IitfKSxtW2JdLT0yKSx5Kz0xO2Zvcih2YXIgaz0wO2s8cjsrK2spayE9PWImJihfJjE8PGs/dltrXSs9MTp2W2tdLT0xKX19Zm9yKHZhciBNPVtdLGI9MDtiPHI7KytiKWlmKDA9PT1kW2JdLmxlbmd0aClNLnB1c2goImQiK2IrIi0wLjUiKTtlbHNle3ZhciBBPSIiO21bYl08MD9BPW1bYl0rIipjIjptW2JdPjAmJihBPSIrIittW2JdKyIqYyIpO3ZhciBUPWRbYl0ubGVuZ3RoL3kqLjUsUz0uNSt2W2JdL3kqLjU7TS5wdXNoKCJkIitiKyItIitTKyItIitUKyIqKCIrZFtiXS5qb2luKCIrIikrQSsiKS8oIitnW2JdLmpvaW4oIisiKSsiKSIpfWYucHVzaCgiYS5wdXNoKFsiLE0uam9pbigpLCJdKTsiLCJicmVhazsiKX1hLnB1c2goIn19LCIpLGgubGVuZ3RoPjAmJmYucHVzaCgifX0iKTtmb3IodmFyIEU9W10sYz0wO2M8MTw8ci0xOysrYylFLnB1c2goInYiK2MpO0UucHVzaCgiYzAiLCJjMSIsInAwIiwicDEiLCJhIiwiYiIsImMiKSxhLnB1c2goImNlbGw6ZnVuY3Rpb24gY2VsbEZ1bmMoIixFLmpvaW4oKSwiKXsiKTt2YXIgQz1pKHItMSk7YS5wdXNoKCJpZihwMCl7Yi5wdXNoKCIsQy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIlsiK3QubWFwKGZ1bmN0aW9uKHQpe3JldHVybiJ2Iit0fSkrIl0ifSkuam9pbigpLCIpfWVsc2V7Yi5wdXNoKCIsQy5tYXAoZnVuY3Rpb24odCl7dmFyIGU9dC5zbGljZSgpO3JldHVybiBlLnJldmVyc2UoKSwiWyIrZS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuInYiK3R9KSsiXSJ9KS5qb2luKCksIil9fX0pO2Z1bmN0aW9uICIsbywiKGFycmF5LGxldmVsKXt2YXIgdmVydHM9W10sY2VsbHM9W107Y29udG91cihhcnJheSx2ZXJ0cyxjZWxscyxsZXZlbCk7cmV0dXJuIHtwb3NpdGlvbnM6dmVydHMsY2VsbHM6Y2VsbHN9O30gcmV0dXJuICIsbywiOyIpO2Zvcih2YXIgYz0wO2M8aC5sZW5ndGg7KytjKWEucHVzaChoW2NdLmpvaW4oIiIpKTtyZXR1cm4gbmV3IEZ1bmN0aW9uKCJnZW5Db250b3VyIixhLmpvaW4oIiIpKShuKX0odC5vcmRlcix0LmR0eXBlKSk7cmV0dXJuIHModCxlKX07dmFyIG49dCgibmRhcnJheS1leHRyYWN0LWNvbnRvdXIiKSxpPXQoInRyaWFuZ3VsYXRlLWh5cGVyY3ViZSIpLGE9dCgiemVyby1jcm9zc2luZ3MiKTt2YXIgbz17fX0seyJuZGFycmF5LWV4dHJhY3QtY29udG91ciI6NDA2LCJ0cmlhbmd1bGF0ZS1oeXBlcmN1YmUiOjUwMywiemVyby1jcm9zc2luZ3MiOjUzOX1dLDQ5NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkociwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCxlKXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB0O2lmKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QodCkpcmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIHI9W10sbj0hMCxpPSExLGE9dm9pZCAwO3RyeXtmb3IodmFyIG8scz10W1N5bWJvbC5pdGVyYXRvcl0oKTshKG49KG89cy5uZXh0KCkpLmRvbmUpJiYoci5wdXNoKG8udmFsdWUpLCFlfHxyLmxlbmd0aCE9PWUpO249ITApO31jYXRjaCh0KXtpPSEwLGE9dH1maW5hbGx5e3RyeXshbiYmcy5yZXR1cm4mJnMucmV0dXJuKCl9ZmluYWxseXtpZihpKXRocm93IGF9fXJldHVybiByfSh0LGUpO3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UiKX19KCksaT0yKk1hdGguUEksYT1mdW5jdGlvbih0LGUscixuLGksYSxvKXt2YXIgcz10LngsbD10Lnk7cmV0dXJue3g6bioocyo9ZSktaSoobCo9cikrYSx5OmkqcytuKmwrb319LG89ZnVuY3Rpb24odCxlKXt2YXIgcj00LzMqTWF0aC50YW4oZS80KSxuPU1hdGguY29zKHQpLGk9TWF0aC5zaW4odCksYT1NYXRoLmNvcyh0K2UpLG89TWF0aC5zaW4odCtlKTtyZXR1cm5be3g6bi1pKnIseTppK24qcn0se3g6YStvKnIseTpvLWEqcn0se3g6YSx5Om99XX0scz1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10Km4tZSpyPDA/LTE6MSxhPSh0KnIrZSpuKS8oTWF0aC5zcXJ0KHQqdCtlKmUpKk1hdGguc3FydCh0KnQrZSplKSk7cmV0dXJuIGE+MSYmKGE9MSksYTwtMSYmKGE9LTEpLGkqTWF0aC5hY29zKGEpfTtyLmRlZmF1bHQ9ZnVuY3Rpb24odCl7dmFyIGU9dC5weCxyPXQucHksbD10LmN4LGM9dC5jeSx1PXQucngsaD10LnJ5LGY9dC54QXhpc1JvdGF0aW9uLHA9dm9pZCAwPT09Zj8wOmYsZD10LmxhcmdlQXJjRmxhZyxnPXZvaWQgMD09PWQ/MDpkLG09dC5zd2VlcEZsYWcsdj12b2lkIDA9PT1tPzA6bSx5PVtdO2lmKDA9PT11fHwwPT09aClyZXR1cm5bXTt2YXIgeD1NYXRoLnNpbihwKmkvMzYwKSxiPU1hdGguY29zKHAqaS8zNjApLF89YiooZS1sKS8yK3gqKHItYykvMix3PS14KihlLWwpLzIrYiooci1jKS8yO2lmKDA9PT1fJiYwPT09dylyZXR1cm5bXTt1PU1hdGguYWJzKHUpLGg9TWF0aC5hYnMoaCk7dmFyIGs9TWF0aC5wb3coXywyKS9NYXRoLnBvdyh1LDIpK01hdGgucG93KHcsMikvTWF0aC5wb3coaCwyKTtrPjEmJih1Kj1NYXRoLnNxcnQoayksaCo9TWF0aC5zcXJ0KGspKTt2YXIgTT1mdW5jdGlvbih0LGUscixuLGEsbyxsLGMsdSxoLGYscCl7dmFyIGQ9TWF0aC5wb3coYSwyKSxnPU1hdGgucG93KG8sMiksbT1NYXRoLnBvdyhmLDIpLHY9TWF0aC5wb3cocCwyKSx5PWQqZy1kKnYtZyptO3k8MCYmKHk9MCkseS89ZCp2K2cqbTt2YXIgeD0oeT1NYXRoLnNxcnQoeSkqKGw9PT1jPy0xOjEpKSphL28qcCxiPXkqLW8vYSpmLF89aCp4LXUqYisodCtyKS8yLHc9dSp4K2gqYisoZStuKS8yLGs9KGYteCkvYSxNPShwLWIpL28sQT0oLWYteCkvYSxUPSgtcC1iKS9vLFM9cygxLDAsayxNKSxFPXMoayxNLEEsVCk7cmV0dXJuIDA9PT1jJiZFPjAmJihFLT1pKSwxPT09YyYmRTwwJiYoRSs9aSksW18sdyxTLEVdfShlLHIsbCxjLHUsaCxnLHYseCxiLF8sdyksQT1uKE0sNCksVD1BWzBdLFM9QVsxXSxFPUFbMl0sQz1BWzNdLEw9TWF0aC5tYXgoTWF0aC5jZWlsKE1hdGguYWJzKEMpLyhpLzQpKSwxKTtDLz1MO2Zvcih2YXIgej0wO3o8TDt6KyspeS5wdXNoKG8oRSxDKSksRSs9QztyZXR1cm4geS5tYXAoZnVuY3Rpb24odCl7dmFyIGU9YSh0WzBdLHUsaCxiLHgsVCxTKSxyPWUueCxuPWUueSxpPWEodFsxXSx1LGgsYix4LFQsUyksbz1pLngscz1pLnksbD1hKHRbMl0sdSxoLGIseCxULFMpO3JldHVybnt4MTpyLHkxOm4seDI6byx5MjpzLHg6bC54LHk6bC55fX0pfSxlLmV4cG9ydHM9ci5kZWZhdWx0fSx7fV0sNDk1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInBhcnNlLXN2Zy1wYXRoIiksaT10KCJhYnMtc3ZnLXBhdGgiKSxhPXQoIm5vcm1hbGl6ZS1zdmctcGF0aCIpLG89dCgiaXMtc3ZnLXBhdGgiKSxzPXQoImFzc2VydCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtBcnJheS5pc0FycmF5KHQpJiYxPT09dC5sZW5ndGgmJiJzdHJpbmciPT10eXBlb2YgdFswXSYmKHQ9dFswXSk7InN0cmluZyI9PXR5cGVvZiB0JiYocyhvKHQpLCJTdHJpbmcgaXMgbm90IGFuIFNWRyBwYXRoLiIpLHQ9bih0KSk7aWYocyhBcnJheS5pc0FycmF5KHQpLCJBcmd1bWVudCBzaG91bGQgYmUgYSBzdHJpbmcgb3IgYW4gYXJyYXkgb2YgcGF0aCBzZWdtZW50cy4iKSx0PWkodCksISh0PWEodCkpLmxlbmd0aClyZXR1cm5bMCwwLDAsMF07Zm9yKHZhciBlPVsxLzAsMS8wLC0xLzAsLTEvMF0scj0wLGw9dC5sZW5ndGg7cjxsO3IrKylmb3IodmFyIGM9dFtyXS5zbGljZSgxKSx1PTA7dTxjLmxlbmd0aDt1Kz0yKWNbdSswXTxlWzBdJiYoZVswXT1jW3UrMF0pLGNbdSsxXTxlWzFdJiYoZVsxXT1jW3UrMV0pLGNbdSswXT5lWzJdJiYoZVsyXT1jW3UrMF0pLGNbdSsxXT5lWzNdJiYoZVszXT1jW3UrMV0pO3JldHVybiBlfX0seyJhYnMtc3ZnLXBhdGgiOjUxLGFzc2VydDo1OSwiaXMtc3ZnLXBhdGgiOjM5MSwibm9ybWFsaXplLXN2Zy1wYXRoIjo0OTYsInBhcnNlLXN2Zy1wYXRoIjo0Mjd9XSw0OTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyPVtdLG89MCxzPTAsbD0wLGM9MCx1PW51bGwsaD1udWxsLGY9MCxwPTAsZD0wLGc9dC5sZW5ndGg7ZDxnO2QrKyl7dmFyIG09dFtkXSx2PW1bMF07c3dpdGNoKHYpe2Nhc2UiTSI6bD1tWzFdLGM9bVsyXTticmVhaztjYXNlIkEiOnZhciB5PW4oe3B4OmYscHk6cCxjeDptWzZdLGN5Om1bN10scng6bVsxXSxyeTptWzJdLHhBeGlzUm90YXRpb246bVszXSxsYXJnZUFyY0ZsYWc6bVs0XSxzd2VlcEZsYWc6bVs1XX0pO2lmKCF5Lmxlbmd0aCljb250aW51ZTtmb3IodmFyIHgsYj0wO2I8eS5sZW5ndGg7YisrKXg9eVtiXSxtPVsiQyIseC54MSx4LnkxLHgueDIseC55Mix4LngseC55XSxiPHkubGVuZ3RoLTEmJnIucHVzaChtKTticmVhaztjYXNlIlMiOnZhciBfPWYsdz1wOyJDIiE9ZSYmIlMiIT1lfHwoXys9Xy1vLHcrPXctcyksbT1bIkMiLF8sdyxtWzFdLG1bMl0sbVszXSxtWzRdXTticmVhaztjYXNlIlQiOiJRIj09ZXx8IlQiPT1lPyh1PTIqZi11LGg9MipwLWgpOih1PWYsaD1wKSxtPWEoZixwLHUsaCxtWzFdLG1bMl0pO2JyZWFrO2Nhc2UiUSI6dT1tWzFdLGg9bVsyXSxtPWEoZixwLG1bMV0sbVsyXSxtWzNdLG1bNF0pO2JyZWFrO2Nhc2UiTCI6bT1pKGYscCxtWzFdLG1bMl0pO2JyZWFrO2Nhc2UiSCI6bT1pKGYscCxtWzFdLHApO2JyZWFrO2Nhc2UiViI6bT1pKGYscCxmLG1bMV0pO2JyZWFrO2Nhc2UiWiI6bT1pKGYscCxsLGMpfWU9dixmPW1bbS5sZW5ndGgtMl0scD1tW20ubGVuZ3RoLTFdLG0ubGVuZ3RoPjQ/KG89bVttLmxlbmd0aC00XSxzPW1bbS5sZW5ndGgtM10pOihvPWYscz1wKSxyLnB1c2gobSl9cmV0dXJuIHJ9O3ZhciBuPXQoInN2Zy1hcmMtdG8tY3ViaWMtYmV6aWVyIik7ZnVuY3Rpb24gaSh0LGUscixuKXtyZXR1cm5bIkMiLHQsZSxyLG4scixuXX1mdW5jdGlvbiBhKHQsZSxyLG4saSxhKXtyZXR1cm5bIkMiLHQvMysyLzMqcixlLzMrMi8zKm4saS8zKzIvMypyLGEvMysyLzMqbixpLGFdfX0seyJzdmctYXJjLXRvLWN1YmljLWJlemllciI6NDk0fV0sNDk3OltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJzdmctcGF0aC1ib3VuZHMiKSxpPXQoInBhcnNlLXN2Zy1wYXRoIiksYT10KCJkcmF3LXN2Zy1wYXRoIiksbz10KCJpcy1zdmctcGF0aCIpLHM9dCgiYml0bWFwLXNkZiIpLGw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksYz1sLmdldENvbnRleHQoIjJkIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoIW8odCkpdGhyb3cgRXJyb3IoIkFyZ3VtZW50IHNob3VsZCBiZSB2YWxpZCBzdmcgcGF0aCBzdHJpbmciKTtlfHwoZT17fSk7dmFyIHUsaDtlLnNoYXBlPyh1PWUuc2hhcGVbMF0saD1lLnNoYXBlWzFdKToodT1sLndpZHRoPWUud3x8ZS53aWR0aHx8MjAwLGg9bC5oZWlnaHQ9ZS5ofHxlLmhlaWdodHx8MjAwKTt2YXIgZj1NYXRoLm1pbih1LGgpLHA9ZS5zdHJva2V8fDAsZD1lLnZpZXdib3h8fGUudmlld0JveHx8bih0KSxnPVt1LyhkWzJdLWRbMF0pLGgvKGRbM10tZFsxXSldLG09TWF0aC5taW4oZ1swXXx8MCxnWzFdfHwwKS8yO2MuZmlsbFN0eWxlPSJibGFjayIsYy5maWxsUmVjdCgwLDAsdSxoKSxjLmZpbGxTdHlsZT0id2hpdGUiLHAmJigibnVtYmVyIiE9dHlwZW9mIHAmJihwPTEpLGMuc3Ryb2tlU3R5bGU9cD4wPyJ3aGl0ZSI6ImJsYWNrIixjLmxpbmVXaWR0aD1NYXRoLmFicyhwKSk7aWYoYy50cmFuc2xhdGUoLjUqdSwuNSpoKSxjLnNjYWxlKG0sbSksci5QYXRoMkQpe3ZhciB2PW5ldyBQYXRoMkQodCk7Yy5maWxsKHYpLHAmJmMuc3Ryb2tlKHYpfWVsc2V7dmFyIHk9aSh0KTthKGMseSksYy5maWxsKCkscCYmYy5zdHJva2UoKX1yZXR1cm4gYy5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLHMoYyx7Y3V0b2ZmOm51bGwhPWUuY3V0b2ZmP2UuY3V0b2ZmOi41LHJhZGl1czpudWxsIT1lLnJhZGl1cz9lLnJhZGl1czouNSpmfSl9fSkuY2FsbCh0aGlzLCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7ImJpdG1hcC1zZGYiOjgxLCJkcmF3LXN2Zy1wYXRoIjoxNTIsImlzLXN2Zy1wYXRoIjozOTEsInBhcnNlLXN2Zy1wYXRoIjo0MjcsInN2Zy1wYXRoLWJvdW5kcyI6NDk1fV0sNDk4OltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24gdChlLHIsaSl7dmFyIGk9aXx8e307dmFyIG89YVtlXTtvfHwobz1hW2VdPXsiICI6e2RhdGE6bmV3IEZsb2F0MzJBcnJheSgwKSxzaGFwZTouMn19KTt2YXIgcz1vW3JdO2lmKCFzKWlmKHIubGVuZ3RoPD0xfHwhL1xkLy50ZXN0KHIpKXM9b1tyXT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5jZWxscyxyPXQucG9zaXRpb25zLG49bmV3IEZsb2F0MzJBcnJheSg2KmUubGVuZ3RoKSxpPTAsYT0wLG89MDtvPGUubGVuZ3RoOysrbylmb3IodmFyIHM9ZVtvXSxsPTA7bDwzOysrbCl7dmFyIGM9cltzW2xdXTtuW2krK109Y1swXSxuW2krK109Y1sxXSsxLjQsYT1NYXRoLm1heChjWzBdLGEpfXJldHVybntkYXRhOm4sc2hhcGU6YX19KG4ocix7dHJpYW5nbGVzOiEwLGZvbnQ6ZSx0ZXh0QWxpZ246aS50ZXh0QWxpZ258fCJsZWZ0Iix0ZXh0QmFzZWxpbmU6ImFscGhhYmV0aWMifSkpO2Vsc2V7Zm9yKHZhciBsPXIuc3BsaXQoLyhcZHxccykvKSxjPW5ldyBBcnJheShsLmxlbmd0aCksdT0wLGg9MCxmPTA7ZjxsLmxlbmd0aDsrK2YpY1tmXT10KGUsbFtmXSksdSs9Y1tmXS5kYXRhLmxlbmd0aCxoKz1jW2ZdLnNoYXBlLGY+MCYmKGgrPS4wMik7Zm9yKHZhciBwPW5ldyBGbG9hdDMyQXJyYXkodSksZD0wLGc9LS41KmgsZj0wO2Y8Yy5sZW5ndGg7KytmKXtmb3IodmFyIG09Y1tmXS5kYXRhLHY9MDt2PG0ubGVuZ3RoO3YrPTIpcFtkKytdPW1bdl0rZyxwW2QrK109bVt2KzFdO2crPWNbZl0uc2hhcGUrLjAyfXM9b1tyXT17ZGF0YTpwLHNoYXBlOmh9fXJldHVybiBzfTt2YXIgbj10KCJ2ZWN0b3JpemUtdGV4dCIpLGk9d2luZG93fHxyLmdsb2JhbHx8e30sYT1pLl9fVEVYVF9DQUNIRXx8e307aS5fX1RFWFRfQ0FDSEU9e319KS5jYWxsKHRoaXMsdCgiX3Byb2Nlc3MiKSl9LHtfcHJvY2Vzczo0NDksInZlY3Rvcml6ZS10ZXh0Ijo1MTV9XSw0OTk6W2Z1bmN0aW9uKHQsZSxyKXshZnVuY3Rpb24odCl7dmFyIHI9L15ccysvLG49L1xzKyQvLGk9MCxhPXQucm91bmQsbz10Lm1pbixzPXQubWF4LGw9dC5yYW5kb207ZnVuY3Rpb24gYyhlLGwpe2lmKGw9bHx8e30sKGU9ZXx8IiIpaW5zdGFuY2VvZiBjKXJldHVybiBlO2lmKCEodGhpcyBpbnN0YW5jZW9mIGMpKXJldHVybiBuZXcgYyhlLGwpO3ZhciB1PWZ1bmN0aW9uKGUpe3ZhciBpPXtyOjAsZzowLGI6MH0sYT0xLGw9bnVsbCxjPW51bGwsdT1udWxsLGg9ITEsZj0hMTsic3RyaW5nIj09dHlwZW9mIGUmJihlPWZ1bmN0aW9uKHQpe3Q9dC5yZXBsYWNlKHIsIiIpLnJlcGxhY2UobiwiIikudG9Mb3dlckNhc2UoKTt2YXIgZSxpPSExO2lmKFNbdF0pdD1TW3RdLGk9ITA7ZWxzZSBpZigidHJhbnNwYXJlbnQiPT10KXJldHVybntyOjAsZzowLGI6MCxhOjAsZm9ybWF0OiJuYW1lIn07aWYoZT1qLnJnYi5leGVjKHQpKXJldHVybntyOmVbMV0sZzplWzJdLGI6ZVszXX07aWYoZT1qLnJnYmEuZXhlYyh0KSlyZXR1cm57cjplWzFdLGc6ZVsyXSxiOmVbM10sYTplWzRdfTtpZihlPWouaHNsLmV4ZWModCkpcmV0dXJue2g6ZVsxXSxzOmVbMl0sbDplWzNdfTtpZihlPWouaHNsYS5leGVjKHQpKXJldHVybntoOmVbMV0sczplWzJdLGw6ZVszXSxhOmVbNF19O2lmKGU9ai5oc3YuZXhlYyh0KSlyZXR1cm57aDplWzFdLHM6ZVsyXSx2OmVbM119O2lmKGU9ai5oc3ZhLmV4ZWModCkpcmV0dXJue2g6ZVsxXSxzOmVbMl0sdjplWzNdLGE6ZVs0XX07aWYoZT1qLmhleDguZXhlYyh0KSlyZXR1cm57cjpQKGVbMV0pLGc6UChlWzJdKSxiOlAoZVszXSksYTpSKGVbNF0pLGZvcm1hdDppPyJuYW1lIjoiaGV4OCJ9O2lmKGU9ai5oZXg2LmV4ZWModCkpcmV0dXJue3I6UChlWzFdKSxnOlAoZVsyXSksYjpQKGVbM10pLGZvcm1hdDppPyJuYW1lIjoiaGV4In07aWYoZT1qLmhleDQuZXhlYyh0KSlyZXR1cm57cjpQKGVbMV0rIiIrZVsxXSksZzpQKGVbMl0rIiIrZVsyXSksYjpQKGVbM10rIiIrZVszXSksYTpSKGVbNF0rIiIrZVs0XSksZm9ybWF0Omk/Im5hbWUiOiJoZXg4In07aWYoZT1qLmhleDMuZXhlYyh0KSlyZXR1cm57cjpQKGVbMV0rIiIrZVsxXSksZzpQKGVbMl0rIiIrZVsyXSksYjpQKGVbM10rIiIrZVszXSksZm9ybWF0Omk/Im5hbWUiOiJoZXgifTtyZXR1cm4hMX0oZSkpOyJvYmplY3QiPT10eXBlb2YgZSYmKFYoZS5yKSYmVihlLmcpJiZWKGUuYik/KHA9ZS5yLGQ9ZS5nLGc9ZS5iLGk9e3I6MjU1KkwocCwyNTUpLGc6MjU1KkwoZCwyNTUpLGI6MjU1KkwoZywyNTUpfSxoPSEwLGY9IiUiPT09U3RyaW5nKGUucikuc3Vic3RyKC0xKT8icHJnYiI6InJnYiIpOlYoZS5oKSYmVihlLnMpJiZWKGUudik/KGw9TyhlLnMpLGM9TyhlLnYpLGk9ZnVuY3Rpb24oZSxyLG4pe2U9NipMKGUsMzYwKSxyPUwociwxMDApLG49TChuLDEwMCk7dmFyIGk9dC5mbG9vcihlKSxhPWUtaSxvPW4qKDEtcikscz1uKigxLWEqciksbD1uKigxLSgxLWEpKnIpLGM9aSU2O3JldHVybntyOjI1NSpbbixzLG8sbyxsLG5dW2NdLGc6MjU1KltsLG4sbixzLG8sb11bY10sYjoyNTUqW28sbyxsLG4sbixzXVtjXX19KGUuaCxsLGMpLGg9ITAsZj0iaHN2Iik6VihlLmgpJiZWKGUucykmJlYoZS5sKSYmKGw9TyhlLnMpLHU9TyhlLmwpLGk9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYTtmdW5jdGlvbiBvKHQsZSxyKXtyZXR1cm4gcjwwJiYocis9MSkscj4xJiYoci09MSkscjwxLzY/dCs2KihlLXQpKnI6cjwuNT9lOnI8Mi8zP3QrKGUtdCkqKDIvMy1yKSo2OnR9aWYodD1MKHQsMzYwKSxlPUwoZSwxMDApLHI9TChyLDEwMCksMD09PWUpbj1pPWE9cjtlbHNle3ZhciBzPXI8LjU/ciooMStlKTpyK2UtciplLGw9MipyLXM7bj1vKGwscyx0KzEvMyksaT1vKGwscyx0KSxhPW8obCxzLHQtMS8zKX1yZXR1cm57cjoyNTUqbixnOjI1NSppLGI6MjU1KmF9fShlLmgsbCx1KSxoPSEwLGY9ImhzbCIpLGUuaGFzT3duUHJvcGVydHkoImEiKSYmKGE9ZS5hKSk7dmFyIHAsZCxnO3JldHVybiBhPUMoYSkse29rOmgsZm9ybWF0OmUuZm9ybWF0fHxmLHI6bygyNTUscyhpLnIsMCkpLGc6bygyNTUscyhpLmcsMCkpLGI6bygyNTUscyhpLmIsMCkpLGE6YX19KGUpO3RoaXMuX29yaWdpbmFsSW5wdXQ9ZSx0aGlzLl9yPXUucix0aGlzLl9nPXUuZyx0aGlzLl9iPXUuYix0aGlzLl9hPXUuYSx0aGlzLl9yb3VuZEE9YSgxMDAqdGhpcy5fYSkvMTAwLHRoaXMuX2Zvcm1hdD1sLmZvcm1hdHx8dS5mb3JtYXQsdGhpcy5fZ3JhZGllbnRUeXBlPWwuZ3JhZGllbnRUeXBlLHRoaXMuX3I8MSYmKHRoaXMuX3I9YSh0aGlzLl9yKSksdGhpcy5fZzwxJiYodGhpcy5fZz1hKHRoaXMuX2cpKSx0aGlzLl9iPDEmJih0aGlzLl9iPWEodGhpcy5fYikpLHRoaXMuX29rPXUub2ssdGhpcy5fdGNfaWQ9aSsrfWZ1bmN0aW9uIHUodCxlLHIpe3Q9TCh0LDI1NSksZT1MKGUsMjU1KSxyPUwociwyNTUpO3ZhciBuLGksYT1zKHQsZSxyKSxsPW8odCxlLHIpLGM9KGErbCkvMjtpZihhPT1sKW49aT0wO2Vsc2V7dmFyIHU9YS1sO3N3aXRjaChpPWM+LjU/dS8oMi1hLWwpOnUvKGErbCksYSl7Y2FzZSB0Om49KGUtcikvdSsoZTxyPzY6MCk7YnJlYWs7Y2FzZSBlOm49KHItdCkvdSsyO2JyZWFrO2Nhc2UgcjpuPSh0LWUpL3UrNH1uLz02fXJldHVybntoOm4sczppLGw6Y319ZnVuY3Rpb24gaCh0LGUscil7dD1MKHQsMjU1KSxlPUwoZSwyNTUpLHI9TChyLDI1NSk7dmFyIG4saSxhPXModCxlLHIpLGw9byh0LGUsciksYz1hLHU9YS1sO2lmKGk9MD09PWE/MDp1L2EsYT09bCluPTA7ZWxzZXtzd2l0Y2goYSl7Y2FzZSB0Om49KGUtcikvdSsoZTxyPzY6MCk7YnJlYWs7Y2FzZSBlOm49KHItdCkvdSsyO2JyZWFrO2Nhc2UgcjpuPSh0LWUpL3UrNH1uLz02fXJldHVybntoOm4sczppLHY6Y319ZnVuY3Rpb24gZih0LGUscixuKXt2YXIgaT1bSShhKHQpLnRvU3RyaW5nKDE2KSksSShhKGUpLnRvU3RyaW5nKDE2KSksSShhKHIpLnRvU3RyaW5nKDE2KSldO3JldHVybiBuJiZpWzBdLmNoYXJBdCgwKT09aVswXS5jaGFyQXQoMSkmJmlbMV0uY2hhckF0KDApPT1pWzFdLmNoYXJBdCgxKSYmaVsyXS5jaGFyQXQoMCk9PWlbMl0uY2hhckF0KDEpP2lbMF0uY2hhckF0KDApK2lbMV0uY2hhckF0KDApK2lbMl0uY2hhckF0KDApOmkuam9pbigiIil9ZnVuY3Rpb24gcCh0LGUscixuKXtyZXR1cm5bSShEKG4pKSxJKGEodCkudG9TdHJpbmcoMTYpKSxJKGEoZSkudG9TdHJpbmcoMTYpKSxJKGEocikudG9TdHJpbmcoMTYpKV0uam9pbigiIil9ZnVuY3Rpb24gZCh0LGUpe2U9MD09PWU/MDplfHwxMDt2YXIgcj1jKHQpLnRvSHNsKCk7cmV0dXJuIHIucy09ZS8xMDAsci5zPXooci5zKSxjKHIpfWZ1bmN0aW9uIGcodCxlKXtlPTA9PT1lPzA6ZXx8MTA7dmFyIHI9Yyh0KS50b0hzbCgpO3JldHVybiByLnMrPWUvMTAwLHIucz16KHIucyksYyhyKX1mdW5jdGlvbiBtKHQpe3JldHVybiBjKHQpLmRlc2F0dXJhdGUoMTAwKX1mdW5jdGlvbiB2KHQsZSl7ZT0wPT09ZT8wOmV8fDEwO3ZhciByPWModCkudG9Ic2woKTtyZXR1cm4gci5sKz1lLzEwMCxyLmw9eihyLmwpLGMocil9ZnVuY3Rpb24geSh0LGUpe2U9MD09PWU/MDplfHwxMDt2YXIgcj1jKHQpLnRvUmdiKCk7cmV0dXJuIHIucj1zKDAsbygyNTUsci5yLWEoLWUvMTAwKjI1NSkpKSxyLmc9cygwLG8oMjU1LHIuZy1hKC1lLzEwMCoyNTUpKSksci5iPXMoMCxvKDI1NSxyLmItYSgtZS8xMDAqMjU1KSkpLGMocil9ZnVuY3Rpb24geCh0LGUpe2U9MD09PWU/MDplfHwxMDt2YXIgcj1jKHQpLnRvSHNsKCk7cmV0dXJuIHIubC09ZS8xMDAsci5sPXooci5sKSxjKHIpfWZ1bmN0aW9uIGIodCxlKXt2YXIgcj1jKHQpLnRvSHNsKCksbj0oci5oK2UpJTM2MDtyZXR1cm4gci5oPW48MD8zNjArbjpuLGMocil9ZnVuY3Rpb24gXyh0KXt2YXIgZT1jKHQpLnRvSHNsKCk7cmV0dXJuIGUuaD0oZS5oKzE4MCklMzYwLGMoZSl9ZnVuY3Rpb24gdyh0KXt2YXIgZT1jKHQpLnRvSHNsKCkscj1lLmg7cmV0dXJuW2ModCksYyh7aDoocisxMjApJTM2MCxzOmUucyxsOmUubH0pLGMoe2g6KHIrMjQwKSUzNjAsczplLnMsbDplLmx9KV19ZnVuY3Rpb24gayh0KXt2YXIgZT1jKHQpLnRvSHNsKCkscj1lLmg7cmV0dXJuW2ModCksYyh7aDoocis5MCklMzYwLHM6ZS5zLGw6ZS5sfSksYyh7aDoocisxODApJTM2MCxzOmUucyxsOmUubH0pLGMoe2g6KHIrMjcwKSUzNjAsczplLnMsbDplLmx9KV19ZnVuY3Rpb24gTSh0KXt2YXIgZT1jKHQpLnRvSHNsKCkscj1lLmg7cmV0dXJuW2ModCksYyh7aDoocis3MiklMzYwLHM6ZS5zLGw6ZS5sfSksYyh7aDoocisyMTYpJTM2MCxzOmUucyxsOmUubH0pXX1mdW5jdGlvbiBBKHQsZSxyKXtlPWV8fDYscj1yfHwzMDt2YXIgbj1jKHQpLnRvSHNsKCksaT0zNjAvcixhPVtjKHQpXTtmb3Iobi5oPShuLmgtKGkqZT4+MSkrNzIwKSUzNjA7LS1lOyluLmg9KG4uaCtpKSUzNjAsYS5wdXNoKGMobikpO3JldHVybiBhfWZ1bmN0aW9uIFQodCxlKXtlPWV8fDY7Zm9yKHZhciByPWModCkudG9Ic3YoKSxuPXIuaCxpPXIucyxhPXIudixvPVtdLHM9MS9lO2UtLTspby5wdXNoKGMoe2g6bixzOmksdjphfSkpLGE9KGErcyklMTtyZXR1cm4gb31jLnByb3RvdHlwZT17aXNEYXJrOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0QnJpZ2h0bmVzcygpPDEyOH0saXNMaWdodDpmdW5jdGlvbigpe3JldHVybiF0aGlzLmlzRGFyaygpfSxpc1ZhbGlkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29rfSxnZXRPcmlnaW5hbElucHV0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29yaWdpbmFsSW5wdXR9LGdldEZvcm1hdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9mb3JtYXR9LGdldEFscGhhOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2F9LGdldEJyaWdodG5lc3M6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnRvUmdiKCk7cmV0dXJuKDI5OSp0LnIrNTg3KnQuZysxMTQqdC5iKS8xZTN9LGdldEx1bWluYW5jZTpmdW5jdGlvbigpe3ZhciBlLHIsbixpPXRoaXMudG9SZ2IoKTtyZXR1cm4gZT1pLnIvMjU1LHI9aS5nLzI1NSxuPWkuYi8yNTUsLjIxMjYqKGU8PS4wMzkyOD9lLzEyLjkyOnQucG93KChlKy4wNTUpLzEuMDU1LDIuNCkpKy43MTUyKihyPD0uMDM5Mjg/ci8xMi45Mjp0LnBvdygocisuMDU1KS8xLjA1NSwyLjQpKSsuMDcyMioobjw9LjAzOTI4P24vMTIuOTI6dC5wb3coKG4rLjA1NSkvMS4wNTUsMi40KSl9LHNldEFscGhhOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9hPUModCksdGhpcy5fcm91bmRBPWEoMTAwKnRoaXMuX2EpLzEwMCx0aGlzfSx0b0hzdjpmdW5jdGlvbigpe3ZhciB0PWgodGhpcy5fcix0aGlzLl9nLHRoaXMuX2IpO3JldHVybntoOjM2MCp0Lmgsczp0LnMsdjp0LnYsYTp0aGlzLl9hfX0sdG9Ic3ZTdHJpbmc6ZnVuY3Rpb24oKXt2YXIgdD1oKHRoaXMuX3IsdGhpcy5fZyx0aGlzLl9iKSxlPWEoMzYwKnQuaCkscj1hKDEwMCp0LnMpLG49YSgxMDAqdC52KTtyZXR1cm4gMT09dGhpcy5fYT8iaHN2KCIrZSsiLCAiK3IrIiUsICIrbisiJSkiOiJoc3ZhKCIrZSsiLCAiK3IrIiUsICIrbisiJSwgIit0aGlzLl9yb3VuZEErIikifSx0b0hzbDpmdW5jdGlvbigpe3ZhciB0PXUodGhpcy5fcix0aGlzLl9nLHRoaXMuX2IpO3JldHVybntoOjM2MCp0Lmgsczp0LnMsbDp0LmwsYTp0aGlzLl9hfX0sdG9Ic2xTdHJpbmc6ZnVuY3Rpb24oKXt2YXIgdD11KHRoaXMuX3IsdGhpcy5fZyx0aGlzLl9iKSxlPWEoMzYwKnQuaCkscj1hKDEwMCp0LnMpLG49YSgxMDAqdC5sKTtyZXR1cm4gMT09dGhpcy5fYT8iaHNsKCIrZSsiLCAiK3IrIiUsICIrbisiJSkiOiJoc2xhKCIrZSsiLCAiK3IrIiUsICIrbisiJSwgIit0aGlzLl9yb3VuZEErIikifSx0b0hleDpmdW5jdGlvbih0KXtyZXR1cm4gZih0aGlzLl9yLHRoaXMuX2csdGhpcy5fYix0KX0sdG9IZXhTdHJpbmc6ZnVuY3Rpb24odCl7cmV0dXJuIiMiK3RoaXMudG9IZXgodCl9LHRvSGV4ODpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgbz1bSShhKHQpLnRvU3RyaW5nKDE2KSksSShhKGUpLnRvU3RyaW5nKDE2KSksSShhKHIpLnRvU3RyaW5nKDE2KSksSShEKG4pKV07aWYoaSYmb1swXS5jaGFyQXQoMCk9PW9bMF0uY2hhckF0KDEpJiZvWzFdLmNoYXJBdCgwKT09b1sxXS5jaGFyQXQoMSkmJm9bMl0uY2hhckF0KDApPT1vWzJdLmNoYXJBdCgxKSYmb1szXS5jaGFyQXQoMCk9PW9bM10uY2hhckF0KDEpKXJldHVybiBvWzBdLmNoYXJBdCgwKStvWzFdLmNoYXJBdCgwKStvWzJdLmNoYXJBdCgwKStvWzNdLmNoYXJBdCgwKTtyZXR1cm4gby5qb2luKCIiKX0odGhpcy5fcix0aGlzLl9nLHRoaXMuX2IsdGhpcy5fYSx0KX0sdG9IZXg4U3RyaW5nOmZ1bmN0aW9uKHQpe3JldHVybiIjIit0aGlzLnRvSGV4OCh0KX0sdG9SZ2I6ZnVuY3Rpb24oKXtyZXR1cm57cjphKHRoaXMuX3IpLGc6YSh0aGlzLl9nKSxiOmEodGhpcy5fYiksYTp0aGlzLl9hfX0sdG9SZ2JTdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gMT09dGhpcy5fYT8icmdiKCIrYSh0aGlzLl9yKSsiLCAiK2EodGhpcy5fZykrIiwgIithKHRoaXMuX2IpKyIpIjoicmdiYSgiK2EodGhpcy5fcikrIiwgIithKHRoaXMuX2cpKyIsICIrYSh0aGlzLl9iKSsiLCAiK3RoaXMuX3JvdW5kQSsiKSJ9LHRvUGVyY2VudGFnZVJnYjpmdW5jdGlvbigpe3JldHVybntyOmEoMTAwKkwodGhpcy5fciwyNTUpKSsiJSIsZzphKDEwMCpMKHRoaXMuX2csMjU1KSkrIiUiLGI6YSgxMDAqTCh0aGlzLl9iLDI1NSkpKyIlIixhOnRoaXMuX2F9fSx0b1BlcmNlbnRhZ2VSZ2JTdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gMT09dGhpcy5fYT8icmdiKCIrYSgxMDAqTCh0aGlzLl9yLDI1NSkpKyIlLCAiK2EoMTAwKkwodGhpcy5fZywyNTUpKSsiJSwgIithKDEwMCpMKHRoaXMuX2IsMjU1KSkrIiUpIjoicmdiYSgiK2EoMTAwKkwodGhpcy5fciwyNTUpKSsiJSwgIithKDEwMCpMKHRoaXMuX2csMjU1KSkrIiUsICIrYSgxMDAqTCh0aGlzLl9iLDI1NSkpKyIlLCAiK3RoaXMuX3JvdW5kQSsiKSJ9LHRvTmFtZTpmdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5fYT8idHJhbnNwYXJlbnQiOiEodGhpcy5fYTwxKSYmKEVbZih0aGlzLl9yLHRoaXMuX2csdGhpcy5fYiwhMCldfHwhMSl9LHRvRmlsdGVyOmZ1bmN0aW9uKHQpe3ZhciBlPSIjIitwKHRoaXMuX3IsdGhpcy5fZyx0aGlzLl9iLHRoaXMuX2EpLHI9ZSxuPXRoaXMuX2dyYWRpZW50VHlwZT8iR3JhZGllbnRUeXBlID0gMSwgIjoiIjtpZih0KXt2YXIgaT1jKHQpO3I9IiMiK3AoaS5fcixpLl9nLGkuX2IsaS5fYSl9cmV0dXJuInByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudCgiK24rInN0YXJ0Q29sb3JzdHI9IitlKyIsZW5kQ29sb3JzdHI9IityKyIpIn0sdG9TdHJpbmc6ZnVuY3Rpb24odCl7dmFyIGU9ISF0O3Q9dHx8dGhpcy5fZm9ybWF0O3ZhciByPSExLG49dGhpcy5fYTwxJiZ0aGlzLl9hPj0wO3JldHVybiBlfHwhbnx8ImhleCIhPT10JiYiaGV4NiIhPT10JiYiaGV4MyIhPT10JiYiaGV4NCIhPT10JiYiaGV4OCIhPT10JiYibmFtZSIhPT10PygicmdiIj09PXQmJihyPXRoaXMudG9SZ2JTdHJpbmcoKSksInByZ2IiPT09dCYmKHI9dGhpcy50b1BlcmNlbnRhZ2VSZ2JTdHJpbmcoKSksImhleCIhPT10JiYiaGV4NiIhPT10fHwocj10aGlzLnRvSGV4U3RyaW5nKCkpLCJoZXgzIj09PXQmJihyPXRoaXMudG9IZXhTdHJpbmcoITApKSwiaGV4NCI9PT10JiYocj10aGlzLnRvSGV4OFN0cmluZyghMCkpLCJoZXg4Ij09PXQmJihyPXRoaXMudG9IZXg4U3RyaW5nKCkpLCJuYW1lIj09PXQmJihyPXRoaXMudG9OYW1lKCkpLCJoc2wiPT09dCYmKHI9dGhpcy50b0hzbFN0cmluZygpKSwiaHN2Ij09PXQmJihyPXRoaXMudG9Ic3ZTdHJpbmcoKSkscnx8dGhpcy50b0hleFN0cmluZygpKToibmFtZSI9PT10JiYwPT09dGhpcy5fYT90aGlzLnRvTmFtZSgpOnRoaXMudG9SZ2JTdHJpbmcoKX0sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4gYyh0aGlzLnRvU3RyaW5nKCkpfSxfYXBwbHlNb2RpZmljYXRpb246ZnVuY3Rpb24odCxlKXt2YXIgcj10LmFwcGx5KG51bGwsW3RoaXNdLmNvbmNhdChbXS5zbGljZS5jYWxsKGUpKSk7cmV0dXJuIHRoaXMuX3I9ci5fcix0aGlzLl9nPXIuX2csdGhpcy5fYj1yLl9iLHRoaXMuc2V0QWxwaGEoci5fYSksdGhpc30sbGlnaHRlbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseU1vZGlmaWNhdGlvbih2LGFyZ3VtZW50cyl9LGJyaWdodGVuOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5TW9kaWZpY2F0aW9uKHksYXJndW1lbnRzKX0sZGFya2VuOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5TW9kaWZpY2F0aW9uKHgsYXJndW1lbnRzKX0sZGVzYXR1cmF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseU1vZGlmaWNhdGlvbihkLGFyZ3VtZW50cyl9LHNhdHVyYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5TW9kaWZpY2F0aW9uKGcsYXJndW1lbnRzKX0sZ3JleXNjYWxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5TW9kaWZpY2F0aW9uKG0sYXJndW1lbnRzKX0sc3BpbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseU1vZGlmaWNhdGlvbihiLGFyZ3VtZW50cyl9LF9hcHBseUNvbWJpbmF0aW9uOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuYXBwbHkobnVsbCxbdGhpc10uY29uY2F0KFtdLnNsaWNlLmNhbGwoZSkpKX0sYW5hbG9nb3VzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5Q29tYmluYXRpb24oQSxhcmd1bWVudHMpfSxjb21wbGVtZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5Q29tYmluYXRpb24oXyxhcmd1bWVudHMpfSxtb25vY2hyb21hdGljOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5Q29tYmluYXRpb24oVCxhcmd1bWVudHMpfSxzcGxpdGNvbXBsZW1lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlDb21iaW5hdGlvbihNLGFyZ3VtZW50cyl9LHRyaWFkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5Q29tYmluYXRpb24odyxhcmd1bWVudHMpfSx0ZXRyYWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlDb21iaW5hdGlvbihrLGFyZ3VtZW50cyl9fSxjLmZyb21SYXRpbz1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiPT10eXBlb2YgdCl7dmFyIHI9e307Zm9yKHZhciBuIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShuKSYmKHJbbl09ImEiPT09bj90W25dOk8odFtuXSkpO3Q9cn1yZXR1cm4gYyh0LGUpfSxjLmVxdWFscz1mdW5jdGlvbih0LGUpe3JldHVybiEoIXR8fCFlKSYmYyh0KS50b1JnYlN0cmluZygpPT1jKGUpLnRvUmdiU3RyaW5nKCl9LGMucmFuZG9tPWZ1bmN0aW9uKCl7cmV0dXJuIGMuZnJvbVJhdGlvKHtyOmwoKSxnOmwoKSxiOmwoKX0pfSxjLm1peD1mdW5jdGlvbih0LGUscil7cj0wPT09cj8wOnJ8fDUwO3ZhciBuPWModCkudG9SZ2IoKSxpPWMoZSkudG9SZ2IoKSxhPXIvMTAwO3JldHVybiBjKHtyOihpLnItbi5yKSphK24ucixnOihpLmctbi5nKSphK24uZyxiOihpLmItbi5iKSphK24uYixhOihpLmEtbi5hKSphK24uYX0pfSxjLnJlYWRhYmlsaXR5PWZ1bmN0aW9uKGUscil7dmFyIG49YyhlKSxpPWMocik7cmV0dXJuKHQubWF4KG4uZ2V0THVtaW5hbmNlKCksaS5nZXRMdW1pbmFuY2UoKSkrLjA1KS8odC5taW4obi5nZXRMdW1pbmFuY2UoKSxpLmdldEx1bWluYW5jZSgpKSsuMDUpfSxjLmlzUmVhZGFibGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYT1jLnJlYWRhYmlsaXR5KHQsZSk7c3dpdGNoKGk9ITEsKG49ZnVuY3Rpb24odCl7dmFyIGUscjtlPSgodD10fHx7bGV2ZWw6IkFBIixzaXplOiJzbWFsbCJ9KS5sZXZlbHx8IkFBIikudG9VcHBlckNhc2UoKSxyPSh0LnNpemV8fCJzbWFsbCIpLnRvTG93ZXJDYXNlKCksIkFBIiE9PWUmJiJBQUEiIT09ZSYmKGU9IkFBIik7InNtYWxsIiE9PXImJiJsYXJnZSIhPT1yJiYocj0ic21hbGwiKTtyZXR1cm57bGV2ZWw6ZSxzaXplOnJ9fShyKSkubGV2ZWwrbi5zaXplKXtjYXNlIkFBc21hbGwiOmNhc2UiQUFBbGFyZ2UiOmk9YT49NC41O2JyZWFrO2Nhc2UiQUFsYXJnZSI6aT1hPj0zO2JyZWFrO2Nhc2UiQUFBc21hbGwiOmk9YT49N31yZXR1cm4gaX0sYy5tb3N0UmVhZGFibGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYSxvLHM9bnVsbCxsPTA7aT0ocj1yfHx7fSkuaW5jbHVkZUZhbGxiYWNrQ29sb3JzLGE9ci5sZXZlbCxvPXIuc2l6ZTtmb3IodmFyIHU9MDt1PGUubGVuZ3RoO3UrKykobj1jLnJlYWRhYmlsaXR5KHQsZVt1XSkpPmwmJihsPW4scz1jKGVbdV0pKTtyZXR1cm4gYy5pc1JlYWRhYmxlKHQscyx7bGV2ZWw6YSxzaXplOm99KXx8IWk/czooci5pbmNsdWRlRmFsbGJhY2tDb2xvcnM9ITEsYy5tb3N0UmVhZGFibGUodCxbIiNmZmYiLCIjMDAwIl0scikpfTt2YXIgUz1jLm5hbWVzPXthbGljZWJsdWU6ImYwZjhmZiIsYW50aXF1ZXdoaXRlOiJmYWViZDciLGFxdWE6IjBmZiIsYXF1YW1hcmluZToiN2ZmZmQ0IixhenVyZToiZjBmZmZmIixiZWlnZToiZjVmNWRjIixiaXNxdWU6ImZmZTRjNCIsYmxhY2s6IjAwMCIsYmxhbmNoZWRhbG1vbmQ6ImZmZWJjZCIsYmx1ZToiMDBmIixibHVldmlvbGV0OiI4YTJiZTIiLGJyb3duOiJhNTJhMmEiLGJ1cmx5d29vZDoiZGViODg3IixidXJudHNpZW5uYToiZWE3ZTVkIixjYWRldGJsdWU6IjVmOWVhMCIsY2hhcnRyZXVzZToiN2ZmZjAwIixjaG9jb2xhdGU6ImQyNjkxZSIsY29yYWw6ImZmN2Y1MCIsY29ybmZsb3dlcmJsdWU6IjY0OTVlZCIsY29ybnNpbGs6ImZmZjhkYyIsY3JpbXNvbjoiZGMxNDNjIixjeWFuOiIwZmYiLGRhcmtibHVlOiIwMDAwOGIiLGRhcmtjeWFuOiIwMDhiOGIiLGRhcmtnb2xkZW5yb2Q6ImI4ODYwYiIsZGFya2dyYXk6ImE5YTlhOSIsZGFya2dyZWVuOiIwMDY0MDAiLGRhcmtncmV5OiJhOWE5YTkiLGRhcmtraGFraToiYmRiNzZiIixkYXJrbWFnZW50YToiOGIwMDhiIixkYXJrb2xpdmVncmVlbjoiNTU2YjJmIixkYXJrb3JhbmdlOiJmZjhjMDAiLGRhcmtvcmNoaWQ6Ijk5MzJjYyIsZGFya3JlZDoiOGIwMDAwIixkYXJrc2FsbW9uOiJlOTk2N2EiLGRhcmtzZWFncmVlbjoiOGZiYzhmIixkYXJrc2xhdGVibHVlOiI0ODNkOGIiLGRhcmtzbGF0ZWdyYXk6IjJmNGY0ZiIsZGFya3NsYXRlZ3JleToiMmY0ZjRmIixkYXJrdHVycXVvaXNlOiIwMGNlZDEiLGRhcmt2aW9sZXQ6Ijk0MDBkMyIsZGVlcHBpbms6ImZmMTQ5MyIsZGVlcHNreWJsdWU6IjAwYmZmZiIsZGltZ3JheToiNjk2OTY5IixkaW1ncmV5OiI2OTY5NjkiLGRvZGdlcmJsdWU6IjFlOTBmZiIsZmlyZWJyaWNrOiJiMjIyMjIiLGZsb3JhbHdoaXRlOiJmZmZhZjAiLGZvcmVzdGdyZWVuOiIyMjhiMjIiLGZ1Y2hzaWE6ImYwZiIsZ2FpbnNib3JvOiJkY2RjZGMiLGdob3N0d2hpdGU6ImY4ZjhmZiIsZ29sZDoiZmZkNzAwIixnb2xkZW5yb2Q6ImRhYTUyMCIsZ3JheToiODA4MDgwIixncmVlbjoiMDA4MDAwIixncmVlbnllbGxvdzoiYWRmZjJmIixncmV5OiI4MDgwODAiLGhvbmV5ZGV3OiJmMGZmZjAiLGhvdHBpbms6ImZmNjliNCIsaW5kaWFucmVkOiJjZDVjNWMiLGluZGlnbzoiNGIwMDgyIixpdm9yeToiZmZmZmYwIixraGFraToiZjBlNjhjIixsYXZlbmRlcjoiZTZlNmZhIixsYXZlbmRlcmJsdXNoOiJmZmYwZjUiLGxhd25ncmVlbjoiN2NmYzAwIixsZW1vbmNoaWZmb246ImZmZmFjZCIsbGlnaHRibHVlOiJhZGQ4ZTYiLGxpZ2h0Y29yYWw6ImYwODA4MCIsbGlnaHRjeWFuOiJlMGZmZmYiLGxpZ2h0Z29sZGVucm9keWVsbG93OiJmYWZhZDIiLGxpZ2h0Z3JheToiZDNkM2QzIixsaWdodGdyZWVuOiI5MGVlOTAiLGxpZ2h0Z3JleToiZDNkM2QzIixsaWdodHBpbms6ImZmYjZjMSIsbGlnaHRzYWxtb246ImZmYTA3YSIsbGlnaHRzZWFncmVlbjoiMjBiMmFhIixsaWdodHNreWJsdWU6Ijg3Y2VmYSIsbGlnaHRzbGF0ZWdyYXk6Ijc4OSIsbGlnaHRzbGF0ZWdyZXk6Ijc4OSIsbGlnaHRzdGVlbGJsdWU6ImIwYzRkZSIsbGlnaHR5ZWxsb3c6ImZmZmZlMCIsbGltZToiMGYwIixsaW1lZ3JlZW46IjMyY2QzMiIsbGluZW46ImZhZjBlNiIsbWFnZW50YToiZjBmIixtYXJvb246IjgwMDAwMCIsbWVkaXVtYXF1YW1hcmluZToiNjZjZGFhIixtZWRpdW1ibHVlOiIwMDAwY2QiLG1lZGl1bW9yY2hpZDoiYmE1NWQzIixtZWRpdW1wdXJwbGU6IjkzNzBkYiIsbWVkaXVtc2VhZ3JlZW46IjNjYjM3MSIsbWVkaXVtc2xhdGVibHVlOiI3YjY4ZWUiLG1lZGl1bXNwcmluZ2dyZWVuOiIwMGZhOWEiLG1lZGl1bXR1cnF1b2lzZToiNDhkMWNjIixtZWRpdW12aW9sZXRyZWQ6ImM3MTU4NSIsbWlkbmlnaHRibHVlOiIxOTE5NzAiLG1pbnRjcmVhbToiZjVmZmZhIixtaXN0eXJvc2U6ImZmZTRlMSIsbW9jY2FzaW46ImZmZTRiNSIsbmF2YWpvd2hpdGU6ImZmZGVhZCIsbmF2eToiMDAwMDgwIixvbGRsYWNlOiJmZGY1ZTYiLG9saXZlOiI4MDgwMDAiLG9saXZlZHJhYjoiNmI4ZTIzIixvcmFuZ2U6ImZmYTUwMCIsb3JhbmdlcmVkOiJmZjQ1MDAiLG9yY2hpZDoiZGE3MGQ2IixwYWxlZ29sZGVucm9kOiJlZWU4YWEiLHBhbGVncmVlbjoiOThmYjk4IixwYWxldHVycXVvaXNlOiJhZmVlZWUiLHBhbGV2aW9sZXRyZWQ6ImRiNzA5MyIscGFwYXlhd2hpcDoiZmZlZmQ1IixwZWFjaHB1ZmY6ImZmZGFiOSIscGVydToiY2Q4NTNmIixwaW5rOiJmZmMwY2IiLHBsdW06ImRkYTBkZCIscG93ZGVyYmx1ZToiYjBlMGU2IixwdXJwbGU6IjgwMDA4MCIscmViZWNjYXB1cnBsZToiNjYzMzk5IixyZWQ6ImYwMCIscm9zeWJyb3duOiJiYzhmOGYiLHJveWFsYmx1ZToiNDE2OWUxIixzYWRkbGVicm93bjoiOGI0NTEzIixzYWxtb246ImZhODA3MiIsc2FuZHlicm93bjoiZjRhNDYwIixzZWFncmVlbjoiMmU4YjU3IixzZWFzaGVsbDoiZmZmNWVlIixzaWVubmE6ImEwNTIyZCIsc2lsdmVyOiJjMGMwYzAiLHNreWJsdWU6Ijg3Y2VlYiIsc2xhdGVibHVlOiI2YTVhY2QiLHNsYXRlZ3JheToiNzA4MDkwIixzbGF0ZWdyZXk6IjcwODA5MCIsc25vdzoiZmZmYWZhIixzcHJpbmdncmVlbjoiMDBmZjdmIixzdGVlbGJsdWU6IjQ2ODJiNCIsdGFuOiJkMmI0OGMiLHRlYWw6IjAwODA4MCIsdGhpc3RsZToiZDhiZmQ4Iix0b21hdG86ImZmNjM0NyIsdHVycXVvaXNlOiI0MGUwZDAiLHZpb2xldDoiZWU4MmVlIix3aGVhdDoiZjVkZWIzIix3aGl0ZToiZmZmIix3aGl0ZXNtb2tlOiJmNWY1ZjUiLHllbGxvdzoiZmYwIix5ZWxsb3dncmVlbjoiOWFjZDMyIn0sRT1jLmhleE5hbWVzPWZ1bmN0aW9uKHQpe3ZhciBlPXt9O2Zvcih2YXIgciBpbiB0KXQuaGFzT3duUHJvcGVydHkocikmJihlW3Rbcl1dPXIpO3JldHVybiBlfShTKTtmdW5jdGlvbiBDKHQpe3JldHVybiB0PXBhcnNlRmxvYXQodCksKGlzTmFOKHQpfHx0PDB8fHQ+MSkmJih0PTEpLHR9ZnVuY3Rpb24gTChlLHIpeyhmdW5jdGlvbih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQmJi0xIT10LmluZGV4T2YoIi4iKSYmMT09PXBhcnNlRmxvYXQodCl9KShlKSYmKGU9IjEwMCUiKTt2YXIgbj1mdW5jdGlvbih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQmJi0xIT10LmluZGV4T2YoIiUiKX0oZSk7cmV0dXJuIGU9byhyLHMoMCxwYXJzZUZsb2F0KGUpKSksbiYmKGU9cGFyc2VJbnQoZSpyLDEwKS8xMDApLHQuYWJzKGUtcik8MWUtNj8xOmUlci9wYXJzZUZsb2F0KHIpfWZ1bmN0aW9uIHoodCl7cmV0dXJuIG8oMSxzKDAsdCkpfWZ1bmN0aW9uIFAodCl7cmV0dXJuIHBhcnNlSW50KHQsMTYpfWZ1bmN0aW9uIEkodCl7cmV0dXJuIDE9PXQubGVuZ3RoPyIwIit0OiIiK3R9ZnVuY3Rpb24gTyh0KXtyZXR1cm4gdDw9MSYmKHQ9MTAwKnQrIiUiKSx0fWZ1bmN0aW9uIEQoZSl7cmV0dXJuIHQucm91bmQoMjU1KnBhcnNlRmxvYXQoZSkpLnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBSKHQpe3JldHVybiBQKHQpLzI1NX12YXIgQixGLE4saj0oRj0iW1xcc3xcXChdKygiKyhCPSIoPzpbLVxcK10/XFxkKlxcLlxcZCslPyl8KD86Wy1cXCtdP1xcZCslPykiKSsiKVssfFxcc10rKCIrQisiKVssfFxcc10rKCIrQisiKVxccypcXCk/IixOPSJbXFxzfFxcKF0rKCIrQisiKVssfFxcc10rKCIrQisiKVssfFxcc10rKCIrQisiKVssfFxcc10rKCIrQisiKVxccypcXCk/Iix7Q1NTX1VOSVQ6bmV3IFJlZ0V4cChCKSxyZ2I6bmV3IFJlZ0V4cCgicmdiIitGKSxyZ2JhOm5ldyBSZWdFeHAoInJnYmEiK04pLGhzbDpuZXcgUmVnRXhwKCJoc2wiK0YpLGhzbGE6bmV3IFJlZ0V4cCgiaHNsYSIrTiksaHN2Om5ldyBSZWdFeHAoImhzdiIrRiksaHN2YTpuZXcgUmVnRXhwKCJoc3ZhIitOKSxoZXgzOi9eIz8oWzAtOWEtZkEtRl17MX0pKFswLTlhLWZBLUZdezF9KShbMC05YS1mQS1GXXsxfSkkLyxoZXg2Oi9eIz8oWzAtOWEtZkEtRl17Mn0pKFswLTlhLWZBLUZdezJ9KShbMC05YS1mQS1GXXsyfSkkLyxoZXg0Oi9eIz8oWzAtOWEtZkEtRl17MX0pKFswLTlhLWZBLUZdezF9KShbMC05YS1mQS1GXXsxfSkoWzAtOWEtZkEtRl17MX0pJC8saGV4ODovXiM/KFswLTlhLWZBLUZdezJ9KShbMC05YS1mQS1GXXsyfSkoWzAtOWEtZkEtRl17Mn0pKFswLTlhLWZBLUZdezJ9KSQvfSk7ZnVuY3Rpb24gVih0KXtyZXR1cm4hIWouQ1NTX1VOSVQuZXhlYyh0KX0idW5kZWZpbmVkIiE9dHlwZW9mIGUmJmUuZXhwb3J0cz9lLmV4cG9ydHM9Yzp3aW5kb3cudGlueWNvbG9yPWN9KE1hdGgpfSx7fV0sNTAwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7aWYodCBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSlyZXR1cm4gdDtpZigibnVtYmVyIj09dHlwZW9mIHQpcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoW3RdKVswXTt2YXIgZT1uZXcgRmxvYXQzMkFycmF5KHQpO3JldHVybiBlLnNldCh0KSxlfWUuZXhwb3J0cz1uLGUuZXhwb3J0cy5mbG9hdDMyPWUuZXhwb3J0cy5mbG9hdD1uLGUuZXhwb3J0cy5mcmFjdDMyPWUuZXhwb3J0cy5mcmFjdD1mdW5jdGlvbih0KXtpZigibnVtYmVyIj09dHlwZW9mIHQpcmV0dXJuIG4odC1uKHQpKTtmb3IodmFyIGU9bih0KSxyPTAsaT1lLmxlbmd0aDtyPGk7cisrKWVbcl09dFtyXS1lW3JdO3JldHVybiBlfX0se31dLDUwMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJwYXJzZS11bml0Iik7ZS5leHBvcnRzPW87dmFyIGk9OTY7ZnVuY3Rpb24gYSh0LGUpe3ZhciByPW4oZ2V0Q29tcHV0ZWRTdHlsZSh0KS5nZXRQcm9wZXJ0eVZhbHVlKGUpKTtyZXR1cm4gclswXSpvKHJbMV0sdCl9ZnVuY3Rpb24gbyh0LGUpe3N3aXRjaChlPWV8fGRvY3VtZW50LmJvZHksdD0odHx8InB4IikudHJpbSgpLnRvTG93ZXJDYXNlKCksZSE9PXdpbmRvdyYmZSE9PWRvY3VtZW50fHwoZT1kb2N1bWVudC5ib2R5KSx0KXtjYXNlIiUiOnJldHVybiBlLmNsaWVudEhlaWdodC8xMDA7Y2FzZSJjaCI6Y2FzZSJleCI6cmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7ci5zdHlsZVsiZm9udC1zaXplIl09IjEyOCIrdCxlLmFwcGVuZENoaWxkKHIpO3ZhciBuPWEociwiZm9udC1zaXplIikvMTI4O3JldHVybiBlLnJlbW92ZUNoaWxkKHIpLG59KHQsZSk7Y2FzZSJlbSI6cmV0dXJuIGEoZSwiZm9udC1zaXplIik7Y2FzZSJyZW0iOnJldHVybiBhKGRvY3VtZW50LmJvZHksImZvbnQtc2l6ZSIpO2Nhc2UidnciOnJldHVybiB3aW5kb3cuaW5uZXJXaWR0aC8xMDA7Y2FzZSJ2aCI6cmV0dXJuIHdpbmRvdy5pbm5lckhlaWdodC8xMDA7Y2FzZSJ2bWluIjpyZXR1cm4gTWF0aC5taW4od2luZG93LmlubmVyV2lkdGgsd2luZG93LmlubmVySGVpZ2h0KS8xMDA7Y2FzZSJ2bWF4IjpyZXR1cm4gTWF0aC5tYXgod2luZG93LmlubmVyV2lkdGgsd2luZG93LmlubmVySGVpZ2h0KS8xMDA7Y2FzZSJpbiI6cmV0dXJuIGk7Y2FzZSJjbSI6cmV0dXJuIGkvMi41NDtjYXNlIm1tIjpyZXR1cm4gaS8yNS40O2Nhc2UicHQiOnJldHVybiBpLzcyO2Nhc2UicGMiOnJldHVybiBpLzZ9cmV0dXJuIDF9fSx7InBhcnNlLXVuaXQiOjQyOH1dLDUwMjpbZnVuY3Rpb24odCxlLHIpe3ZhciBuO249dGhpcyxmdW5jdGlvbih0KXsidXNlIHN0cmljdCI7dmFyIGU9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LHI9ZnVuY3Rpb24odCl7aWYobnVsbD09KHI9dC50cmFuc2Zvcm0pKXJldHVybiBlO3ZhciByLG4saSxhPXIuc2NhbGVbMF0sbz1yLnNjYWxlWzFdLHM9ci50cmFuc2xhdGVbMF0sbD1yLnRyYW5zbGF0ZVsxXTtyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm4gZXx8KG49aT0wKSx0WzBdPShuKz10WzBdKSphK3MsdFsxXT0oaSs9dFsxXSkqbytsLHR9fSxuPWZ1bmN0aW9uKHQpe3ZhciBlPXQuYmJveDtmdW5jdGlvbiBuKHQpe2xbMF09dFswXSxsWzFdPXRbMV0scyhsKSxsWzBdPGMmJihjPWxbMF0pLGxbMF0+aCYmKGg9bFswXSksbFsxXTx1JiYodT1sWzFdKSxsWzFdPmYmJihmPWxbMV0pfWZ1bmN0aW9uIGkodCl7c3dpdGNoKHQudHlwZSl7Y2FzZSJHZW9tZXRyeUNvbGxlY3Rpb24iOnQuZ2VvbWV0cmllcy5mb3JFYWNoKGkpO2JyZWFrO2Nhc2UiUG9pbnQiOm4odC5jb29yZGluYXRlcyk7YnJlYWs7Y2FzZSJNdWx0aVBvaW50Ijp0LmNvb3JkaW5hdGVzLmZvckVhY2gobil9fWlmKCFlKXt2YXIgYSxvLHM9cih0KSxsPW5ldyBBcnJheSgyKSxjPTEvMCx1PWMsaD0tYyxmPS1jO2ZvcihvIGluIHQuYXJjcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0tMSxyPXQubGVuZ3RoOysrZTxyOylhPXRbZV0sbFswXT1hWzBdLGxbMV09YVsxXSxzKGwsZSksbFswXTxjJiYoYz1sWzBdKSxsWzBdPmgmJihoPWxbMF0pLGxbMV08dSYmKHU9bFsxXSksbFsxXT5mJiYoZj1sWzFdKX0pLHQub2JqZWN0cylpKHQub2JqZWN0c1tvXSk7ZT10LmJib3g9W2MsdSxoLGZdfXJldHVybiBlfSxpPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLG49dC5sZW5ndGgsaT1uLWU7aTwtLW47KXI9dFtpXSx0W2krK109dFtuXSx0W25dPXJ9O2Z1bmN0aW9uIGEodCxlKXt2YXIgcj1lLmlkLG49ZS5iYm94LGk9bnVsbD09ZS5wcm9wZXJ0aWVzP3t9OmUucHJvcGVydGllcyxhPW8odCxlKTtyZXR1cm4gbnVsbD09ciYmbnVsbD09bj97dHlwZToiRmVhdHVyZSIscHJvcGVydGllczppLGdlb21ldHJ5OmF9Om51bGw9PW4/e3R5cGU6IkZlYXR1cmUiLGlkOnIscHJvcGVydGllczppLGdlb21ldHJ5OmF9Ont0eXBlOiJGZWF0dXJlIixpZDpyLGJib3g6bixwcm9wZXJ0aWVzOmksZ2VvbWV0cnk6YX19ZnVuY3Rpb24gbyh0LGUpe3ZhciBuPXIodCksYT10LmFyY3M7ZnVuY3Rpb24gbyh0LGUpe2UubGVuZ3RoJiZlLnBvcCgpO2Zvcih2YXIgcj1hW3Q8MD9+dDp0XSxvPTAscz1yLmxlbmd0aDtvPHM7KytvKWUucHVzaChuKHJbb10uc2xpY2UoKSxvKSk7dDwwJiZpKGUscyl9ZnVuY3Rpb24gcyh0KXtyZXR1cm4gbih0LnNsaWNlKCkpfWZ1bmN0aW9uIGwodCl7Zm9yKHZhciBlPVtdLHI9MCxuPXQubGVuZ3RoO3I8bjsrK3Ipbyh0W3JdLGUpO3JldHVybiBlLmxlbmd0aDwyJiZlLnB1c2goZVswXS5zbGljZSgpKSxlfWZ1bmN0aW9uIGModCl7Zm9yKHZhciBlPWwodCk7ZS5sZW5ndGg8NDspZS5wdXNoKGVbMF0uc2xpY2UoKSk7cmV0dXJuIGV9ZnVuY3Rpb24gdSh0KXtyZXR1cm4gdC5tYXAoYyl9cmV0dXJuIGZ1bmN0aW9uIHQoZSl7dmFyIHIsbj1lLnR5cGU7c3dpdGNoKG4pe2Nhc2UiR2VvbWV0cnlDb2xsZWN0aW9uIjpyZXR1cm57dHlwZTpuLGdlb21ldHJpZXM6ZS5nZW9tZXRyaWVzLm1hcCh0KX07Y2FzZSJQb2ludCI6cj1zKGUuY29vcmRpbmF0ZXMpO2JyZWFrO2Nhc2UiTXVsdGlQb2ludCI6cj1lLmNvb3JkaW5hdGVzLm1hcChzKTticmVhaztjYXNlIkxpbmVTdHJpbmciOnI9bChlLmFyY3MpO2JyZWFrO2Nhc2UiTXVsdGlMaW5lU3RyaW5nIjpyPWUuYXJjcy5tYXAobCk7YnJlYWs7Y2FzZSJQb2x5Z29uIjpyPXUoZS5hcmNzKTticmVhaztjYXNlIk11bHRpUG9seWdvbiI6cj1lLmFyY3MubWFwKHUpO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIG51bGx9cmV0dXJue3R5cGU6bixjb29yZGluYXRlczpyfX0oZSl9dmFyIHM9ZnVuY3Rpb24odCxlKXt2YXIgcj17fSxuPXt9LGk9e30sYT1bXSxvPS0xO2Z1bmN0aW9uIHModCxlKXtmb3IodmFyIG4gaW4gdCl7dmFyIGk9dFtuXTtkZWxldGUgZVtpLnN0YXJ0XSxkZWxldGUgaS5zdGFydCxkZWxldGUgaS5lbmQsaS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JbdDwwP350OnRdPTF9KSxhLnB1c2goaSl9fXJldHVybiBlLmZvckVhY2goZnVuY3Rpb24ocixuKXt2YXIgaSxhPXQuYXJjc1tyPDA/fnI6cl07YS5sZW5ndGg8MyYmIWFbMV1bMF0mJiFhWzFdWzFdJiYoaT1lWysrb10sZVtvXT1yLGVbbl09aSl9KSxlLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHIsYSxvPWZ1bmN0aW9uKGUpe3ZhciByLG49dC5hcmNzW2U8MD9+ZTplXSxpPW5bMF07dC50cmFuc2Zvcm0/KHI9WzAsMF0sbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JbMF0rPXRbMF0sclsxXSs9dFsxXX0pKTpyPW5bbi5sZW5ndGgtMV07cmV0dXJuIGU8MD9bcixpXTpbaSxyXX0oZSkscz1vWzBdLGw9b1sxXTtpZihyPWlbc10paWYoZGVsZXRlIGlbci5lbmRdLHIucHVzaChlKSxyLmVuZD1sLGE9bltsXSl7ZGVsZXRlIG5bYS5zdGFydF07dmFyIGM9YT09PXI/cjpyLmNvbmNhdChhKTtuW2Muc3RhcnQ9ci5zdGFydF09aVtjLmVuZD1hLmVuZF09Y31lbHNlIG5bci5zdGFydF09aVtyLmVuZF09cjtlbHNlIGlmKHI9bltsXSlpZihkZWxldGUgbltyLnN0YXJ0XSxyLnVuc2hpZnQoZSksci5zdGFydD1zLGE9aVtzXSl7ZGVsZXRlIGlbYS5lbmRdO3ZhciB1PWE9PT1yP3I6YS5jb25jYXQocik7blt1LnN0YXJ0PWEuc3RhcnRdPWlbdS5lbmQ9ci5lbmRdPXV9ZWxzZSBuW3Iuc3RhcnRdPWlbci5lbmRdPXI7ZWxzZSBuWyhyPVtlXSkuc3RhcnQ9c109aVtyLmVuZD1sXT1yfSkscyhpLG4pLHMobixpKSxlLmZvckVhY2goZnVuY3Rpb24odCl7clt0PDA/fnQ6dF18fGEucHVzaChbdF0pfSksYX07ZnVuY3Rpb24gbCh0LGUscil7dmFyIG4saSxhO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSluPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpPVtdLGE9W107ZnVuY3Rpb24gbyh0KXt2YXIgZT10PDA/fnQ6dDsoYVtlXXx8KGFbZV09W10pKS5wdXNoKHtpOnQsZzpufSl9ZnVuY3Rpb24gcyh0KXt0LmZvckVhY2gobyl9ZnVuY3Rpb24gbCh0KXt0LmZvckVhY2gocyl9cmV0dXJuIGZ1bmN0aW9uIHQoZSl7c3dpdGNoKG49ZSxlLnR5cGUpe2Nhc2UiR2VvbWV0cnlDb2xsZWN0aW9uIjplLmdlb21ldHJpZXMuZm9yRWFjaCh0KTticmVhaztjYXNlIkxpbmVTdHJpbmciOnMoZS5hcmNzKTticmVhaztjYXNlIk11bHRpTGluZVN0cmluZyI6Y2FzZSJQb2x5Z29uIjpsKGUuYXJjcyk7YnJlYWs7Y2FzZSJNdWx0aVBvbHlnb24iOmUuYXJjcy5mb3JFYWNoKGwpfX0oZSksYS5mb3JFYWNoKG51bGw9PXI/ZnVuY3Rpb24odCl7aS5wdXNoKHRbMF0uaSl9OmZ1bmN0aW9uKHQpe3IodFswXS5nLHRbdC5sZW5ndGgtMV0uZykmJmkucHVzaCh0WzBdLmkpfSksaX0oMCxlLHIpO2Vsc2UgZm9yKGk9MCxuPW5ldyBBcnJheShhPXQuYXJjcy5sZW5ndGgpO2k8YTsrK2kpbltpXT1pO3JldHVybnt0eXBlOiJNdWx0aUxpbmVTdHJpbmciLGFyY3M6cyh0LG4pfX1mdW5jdGlvbiBjKHQsZSl7dmFyIHI9e30sbj1bXSxpPVtdO2Z1bmN0aW9uIGEodCl7dC5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UuZm9yRWFjaChmdW5jdGlvbihlKXsocltlPWU8MD9+ZTplXXx8KHJbZV09W10pKS5wdXNoKHQpfSl9KSxuLnB1c2godCl9ZnVuY3Rpb24gbChlKXtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9LTEsbj10Lmxlbmd0aCxpPXRbbi0xXSxhPTA7KytyPG47KWU9aSxpPXRbcl0sYSs9ZVswXSppWzFdLWVbMV0qaVswXTtyZXR1cm4gTWF0aC5hYnMoYSl9KG8odCx7dHlwZToiUG9seWdvbiIsYXJjczpbZV19KS5jb29yZGluYXRlc1swXSl9cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbiB0KGUpe3N3aXRjaChlLnR5cGUpe2Nhc2UiR2VvbWV0cnlDb2xsZWN0aW9uIjplLmdlb21ldHJpZXMuZm9yRWFjaCh0KTticmVhaztjYXNlIlBvbHlnb24iOmEoZS5hcmNzKTticmVhaztjYXNlIk11bHRpUG9seWdvbiI6ZS5hcmNzLmZvckVhY2goYSl9fSksbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lmKCF0Ll8pe3ZhciBlPVtdLG49W3RdO2Zvcih0Ll89MSxpLnB1c2goZSk7dD1uLnBvcCgpOyllLnB1c2godCksdC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuZm9yRWFjaChmdW5jdGlvbih0KXtyW3Q8MD9+dDp0XS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuX3x8KHQuXz0xLG4ucHVzaCh0KSl9KX0pfSl9fSksbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe2RlbGV0ZSB0Ll99KSx7dHlwZToiTXVsdGlQb2x5Z29uIixhcmNzOmkubWFwKGZ1bmN0aW9uKGUpe3ZhciBuLGk9W107aWYoZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuZm9yRWFjaChmdW5jdGlvbih0KXt0LmZvckVhY2goZnVuY3Rpb24odCl7clt0PDA/fnQ6dF0ubGVuZ3RoPDImJmkucHVzaCh0KX0pfSl9KSwobj0oaT1zKHQsaSkpLmxlbmd0aCk+MSlmb3IodmFyIGEsbyxjPTEsdT1sKGlbMF0pO2M8bjsrK2MpKGE9bChpW2NdKSk+dSYmKG89aVswXSxpWzBdPWlbY10saVtjXT1vLHU9YSk7cmV0dXJuIGl9KX19dmFyIHU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPXQubGVuZ3RoO3I8bjspe3ZhciBpPXIrbj4+PjE7dFtpXTxlP3I9aSsxOm49aX1yZXR1cm4gcn07dC5iYm94PW4sdC5mZWF0dXJlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIkdlb21ldHJ5Q29sbGVjdGlvbiI9PT1lLnR5cGU/e3R5cGU6IkZlYXR1cmVDb2xsZWN0aW9uIixmZWF0dXJlczplLmdlb21ldHJpZXMubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBhKHQsZSl9KX06YSh0LGUpfSx0Lm1lc2g9ZnVuY3Rpb24odCl7cmV0dXJuIG8odCxsLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9LHQubWVzaEFyY3M9bCx0Lm1lcmdlPWZ1bmN0aW9uKHQpe3JldHVybiBvKHQsYy5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSx0Lm1lcmdlQXJjcz1jLHQubmVpZ2hib3JzPWZ1bmN0aW9uKHQpe3ZhciBlPXt9LHI9dC5tYXAoZnVuY3Rpb24oKXtyZXR1cm5bXX0pO2Z1bmN0aW9uIG4odCxyKXt0LmZvckVhY2goZnVuY3Rpb24odCl7dDwwJiYodD1+dCk7dmFyIG49ZVt0XTtuP24ucHVzaChyKTplW3RdPVtyXX0pfWZ1bmN0aW9uIGkodCxlKXt0LmZvckVhY2goZnVuY3Rpb24odCl7bih0LGUpfSl9dmFyIGE9e0xpbmVTdHJpbmc6bixNdWx0aUxpbmVTdHJpbmc6aSxQb2x5Z29uOmksTXVsdGlQb2x5Z29uOmZ1bmN0aW9uKHQsZSl7dC5mb3JFYWNoKGZ1bmN0aW9uKHQpe2kodCxlKX0pfX07Zm9yKHZhciBvIGluIHQuZm9yRWFjaChmdW5jdGlvbiB0KGUscil7Ikdlb21ldHJ5Q29sbGVjdGlvbiI9PT1lLnR5cGU/ZS5nZW9tZXRyaWVzLmZvckVhY2goZnVuY3Rpb24oZSl7dChlLHIpfSk6ZS50eXBlIGluIGEmJmFbZS50eXBlXShlLmFyY3Mscil9KSxlKWZvcih2YXIgcz1lW29dLGw9cy5sZW5ndGgsYz0wO2M8bDsrK2MpZm9yKHZhciBoPWMrMTtoPGw7KytoKXt2YXIgZixwPXNbY10sZD1zW2hdOyhmPXJbcF0pW289dShmLGQpXSE9PWQmJmYuc3BsaWNlKG8sMCxkKSwoZj1yW2RdKVtvPXUoZixwKV0hPT1wJiZmLnNwbGljZShvLDAscCl9cmV0dXJuIHJ9LHQucXVhbnRpemU9ZnVuY3Rpb24odCxlKXtpZighKChlPU1hdGguZmxvb3IoZSkpPj0yKSl0aHJvdyBuZXcgRXJyb3IoIm4gbXVzdCBiZSBcdTIyNjUyIik7aWYodC50cmFuc2Zvcm0pdGhyb3cgbmV3IEVycm9yKCJhbHJlYWR5IHF1YW50aXplZCIpO3ZhciByLGk9bih0KSxhPWlbMF0sbz0oaVsyXS1hKS8oZS0xKXx8MSxzPWlbMV0sbD0oaVszXS1zKS8oZS0xKXx8MTtmdW5jdGlvbiBjKHQpe3RbMF09TWF0aC5yb3VuZCgodFswXS1hKS9vKSx0WzFdPU1hdGgucm91bmQoKHRbMV0tcykvbCl9ZnVuY3Rpb24gdSh0KXtzd2l0Y2godC50eXBlKXtjYXNlIkdlb21ldHJ5Q29sbGVjdGlvbiI6dC5nZW9tZXRyaWVzLmZvckVhY2godSk7YnJlYWs7Y2FzZSJQb2ludCI6Yyh0LmNvb3JkaW5hdGVzKTticmVhaztjYXNlIk11bHRpUG9pbnQiOnQuY29vcmRpbmF0ZXMuZm9yRWFjaChjKX19Zm9yKHIgaW4gdC5hcmNzLmZvckVhY2goZnVuY3Rpb24odCl7Zm9yKHZhciBlLHIsbixpPTEsYz0xLHU9dC5sZW5ndGgsaD10WzBdLGY9aFswXT1NYXRoLnJvdW5kKChoWzBdLWEpL28pLHA9aFsxXT1NYXRoLnJvdW5kKChoWzFdLXMpL2wpO2k8dTsrK2kpaD10W2ldLHI9TWF0aC5yb3VuZCgoaFswXS1hKS9vKSxuPU1hdGgucm91bmQoKGhbMV0tcykvbCkscj09PWYmJm49PT1wfHwoKGU9dFtjKytdKVswXT1yLWYsZj1yLGVbMV09bi1wLHA9bik7YzwyJiYoKGU9dFtjKytdKVswXT0wLGVbMV09MCksdC5sZW5ndGg9Y30pLHQub2JqZWN0cyl1KHQub2JqZWN0c1tyXSk7cmV0dXJuIHQudHJhbnNmb3JtPXtzY2FsZTpbbyxsXSx0cmFuc2xhdGU6W2Esc119LHR9LHQudHJhbnNmb3JtPXIsdC51bnRyYW5zZm9ybT1mdW5jdGlvbih0KXtpZihudWxsPT0ocj10LnRyYW5zZm9ybSkpcmV0dXJuIGU7dmFyIHIsbixpLGE9ci5zY2FsZVswXSxvPXIuc2NhbGVbMV0scz1yLnRyYW5zbGF0ZVswXSxsPXIudHJhbnNsYXRlWzFdO3JldHVybiBmdW5jdGlvbih0LGUpe2V8fChuPWk9MCk7dmFyIHI9TWF0aC5yb3VuZCgodFswXS1zKS9hKSxjPU1hdGgucm91bmQoKHRbMV0tbCkvbyk7cmV0dXJuIHRbMF09ci1uLG49cix0WzFdPWMtaSxpPWMsdH19LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0oIm9iamVjdCI9PXR5cGVvZiByJiYidW5kZWZpbmVkIiE9dHlwZW9mIGU/cjpuLnRvcG9qc29uPW4udG9wb2pzb258fHt9KX0se31dLDUwMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYodDwwKXJldHVybltdO2lmKDA9PT10KXJldHVybltbMF1dO2Zvcih2YXIgZT0wfE1hdGgucm91bmQoYSh0KzEpKSxyPVtdLG89MDtvPGU7KytvKXtmb3IodmFyIHM9bi51bnJhbmsodCxvKSxsPVswXSxjPTAsdT0wO3U8cy5sZW5ndGg7Kyt1KWMrPTE8PHNbdV0sbC5wdXNoKGMpO2kocyk8MSYmKGxbMF09YyxsW3RdPTApLHIucHVzaChsKX1yZXR1cm4gcn07dmFyIG49dCgicGVybXV0YXRpb24tcmFuayIpLGk9dCgicGVybXV0YXRpb24tcGFyaXR5IiksYT10KCJnYW1tYSIpfSx7Z2FtbWE6MjIwLCJwZXJtdXRhdGlvbi1wYXJpdHkiOjQzMCwicGVybXV0YXRpb24tcmFuayI6NDMxfV0sNTA0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT0odD10fHx7fSkuY2VudGVyfHxbMCwwLDBdLHI9dC51cHx8WzAsMSwwXSxuPXQucmlnaHR8fGgociksaT10LnJhZGl1c3x8MSxhPXQudGhldGF8fDAsdT10LnBoaXx8MDtpZihlPVtdLnNsaWNlLmNhbGwoZSwwLDMpLHI9W10uc2xpY2UuY2FsbChyLDAsMykscyhyLHIpLG49W10uc2xpY2UuY2FsbChuLDAsMykscyhuLG4pLCJleWUiaW4gdCl7dmFyIHA9dC5leWUsZD1bcFswXS1lWzBdLHBbMV0tZVsxXSxwWzJdLWVbMl1dO28obixkLHIpLGMoblswXSxuWzFdLG5bMl0pPDFlLTY/bj1oKHIpOnMobixuKSxpPWMoZFswXSxkWzFdLGRbMl0pO3ZhciBnPWwocixkKS9pLG09bChuLGQpL2k7dT1NYXRoLmFjb3MoZyksYT1NYXRoLmFjb3MobSl9cmV0dXJuIGk9TWF0aC5sb2coaSksbmV3IGYodC56b29tTWluLHQuem9vbU1heCxlLHIsbixpLGEsdSl9O3ZhciBuPXQoImZpbHRlcmVkLXZlY3RvciIpLGk9dCgiZ2wtbWF0NC9pbnZlcnQiKSxhPXQoImdsLW1hdDQvcm90YXRlIiksbz10KCJnbC12ZWMzL2Nyb3NzIikscz10KCJnbC12ZWMzL25vcm1hbGl6ZSIpLGw9dCgiZ2wtdmVjMy9kb3QiKTtmdW5jdGlvbiBjKHQsZSxyKXtyZXR1cm4gTWF0aC5zcXJ0KE1hdGgucG93KHQsMikrTWF0aC5wb3coZSwyKStNYXRoLnBvdyhyLDIpKX1mdW5jdGlvbiB1KHQpe3JldHVybiBNYXRoLm1pbigxLE1hdGgubWF4KC0xLHQpKX1mdW5jdGlvbiBoKHQpe3ZhciBlPU1hdGguYWJzKHRbMF0pLHI9TWF0aC5hYnModFsxXSksbj1NYXRoLmFicyh0WzJdKSxpPVswLDAsMF07ZT5NYXRoLm1heChyLG4pP2lbMl09MTpyPk1hdGgubWF4KGUsbik/aVswXT0xOmlbMV09MTtmb3IodmFyIGE9MCxvPTAsbD0wO2w8MzsrK2wpYSs9dFtsXSp0W2xdLG8rPWlbbF0qdFtsXTtmb3IobD0wO2w8MzsrK2wpaVtsXS09by9hKnRbbF07cmV0dXJuIHMoaSxpKSxpfWZ1bmN0aW9uIGYodCxlLHIsaSxhLG8scyxsKXt0aGlzLmNlbnRlcj1uKHIpLHRoaXMudXA9bihpKSx0aGlzLnJpZ2h0PW4oYSksdGhpcy5yYWRpdXM9bihbb10pLHRoaXMuYW5nbGU9bihbcyxsXSksdGhpcy5hbmdsZS5ib3VuZHM9W1stMS8wLC1NYXRoLlBJLzJdLFsxLzAsTWF0aC5QSS8yXV0sdGhpcy5zZXREaXN0YW5jZUxpbWl0cyh0LGUpLHRoaXMuY29tcHV0ZWRDZW50ZXI9dGhpcy5jZW50ZXIuY3VydmUoMCksdGhpcy5jb21wdXRlZFVwPXRoaXMudXAuY3VydmUoMCksdGhpcy5jb21wdXRlZFJpZ2h0PXRoaXMucmlnaHQuY3VydmUoMCksdGhpcy5jb21wdXRlZFJhZGl1cz10aGlzLnJhZGl1cy5jdXJ2ZSgwKSx0aGlzLmNvbXB1dGVkQW5nbGU9dGhpcy5hbmdsZS5jdXJ2ZSgwKSx0aGlzLmNvbXB1dGVkVG93YXJkPVswLDAsMF0sdGhpcy5jb21wdXRlZEV5ZT1bMCwwLDBdLHRoaXMuY29tcHV0ZWRNYXRyaXg9bmV3IEFycmF5KDE2KTtmb3IodmFyIGM9MDtjPDE2OysrYyl0aGlzLmNvbXB1dGVkTWF0cml4W2NdPS41O3RoaXMucmVjYWxjTWF0cml4KDApfXZhciBwPWYucHJvdG90eXBlO3Auc2V0RGlzdGFuY2VMaW1pdHM9ZnVuY3Rpb24odCxlKXt0PXQ+MD9NYXRoLmxvZyh0KTotMS8wLGU9ZT4wP01hdGgubG9nKGUpOjEvMCxlPU1hdGgubWF4KGUsdCksdGhpcy5yYWRpdXMuYm91bmRzWzBdWzBdPXQsdGhpcy5yYWRpdXMuYm91bmRzWzFdWzBdPWV9LHAuZ2V0RGlzdGFuY2VMaW1pdHM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5yYWRpdXMuYm91bmRzWzBdO3JldHVybiB0Pyh0WzBdPU1hdGguZXhwKGVbMF1bMF0pLHRbMV09TWF0aC5leHAoZVsxXVswXSksdCk6W01hdGguZXhwKGVbMF1bMF0pLE1hdGguZXhwKGVbMV1bMF0pXX0scC5yZWNhbGNNYXRyaXg9ZnVuY3Rpb24odCl7dGhpcy5jZW50ZXIuY3VydmUodCksdGhpcy51cC5jdXJ2ZSh0KSx0aGlzLnJpZ2h0LmN1cnZlKHQpLHRoaXMucmFkaXVzLmN1cnZlKHQpLHRoaXMuYW5nbGUuY3VydmUodCk7Zm9yKHZhciBlPXRoaXMuY29tcHV0ZWRVcCxyPXRoaXMuY29tcHV0ZWRSaWdodCxuPTAsaT0wLGE9MDthPDM7KythKWkrPWVbYV0qclthXSxuKz1lW2FdKmVbYV07dmFyIGw9TWF0aC5zcXJ0KG4pLHU9MDtmb3IoYT0wO2E8MzsrK2EpclthXS09ZVthXSppL24sdSs9clthXSpyW2FdLGVbYV0vPWw7dmFyIGg9TWF0aC5zcXJ0KHUpO2ZvcihhPTA7YTwzOysrYSlyW2FdLz1oO3ZhciBmPXRoaXMuY29tcHV0ZWRUb3dhcmQ7byhmLGUscikscyhmLGYpO3ZhciBwPU1hdGguZXhwKHRoaXMuY29tcHV0ZWRSYWRpdXNbMF0pLGQ9dGhpcy5jb21wdXRlZEFuZ2xlWzBdLGc9dGhpcy5jb21wdXRlZEFuZ2xlWzFdLG09TWF0aC5jb3MoZCksdj1NYXRoLnNpbihkKSx5PU1hdGguY29zKGcpLHg9TWF0aC5zaW4oZyksYj10aGlzLmNvbXB1dGVkQ2VudGVyLF89bSp5LHc9dip5LGs9eCxNPS1tKngsQT0tdip4LFQ9eSxTPXRoaXMuY29tcHV0ZWRFeWUsRT10aGlzLmNvbXB1dGVkTWF0cml4O2ZvcihhPTA7YTwzOysrYSl7dmFyIEM9XypyW2FdK3cqZlthXStrKmVbYV07RVs0KmErMV09TSpyW2FdK0EqZlthXStUKmVbYV0sRVs0KmErMl09QyxFWzQqYSszXT0wfXZhciBMPUVbMV0sej1FWzVdLFA9RVs5XSxJPUVbMl0sTz1FWzZdLEQ9RVsxMF0sUj16KkQtUCpPLEI9UCpJLUwqRCxGPUwqTy16KkksTj1jKFIsQixGKTtSLz1OLEIvPU4sRi89TixFWzBdPVIsRVs0XT1CLEVbOF09Rjtmb3IoYT0wO2E8MzsrK2EpU1thXT1iW2FdK0VbMis0KmFdKnA7Zm9yKGE9MDthPDM7KythKXt1PTA7Zm9yKHZhciBqPTA7ajwzOysrail1Kz1FW2ErNCpqXSpTW2pdO0VbMTIrYV09LXV9RVsxNV09MX0scC5nZXRNYXRyaXg9ZnVuY3Rpb24odCxlKXt0aGlzLnJlY2FsY01hdHJpeCh0KTt2YXIgcj10aGlzLmNvbXB1dGVkTWF0cml4O2lmKGUpe2Zvcih2YXIgbj0wO248MTY7KytuKWVbbl09cltuXTtyZXR1cm4gZX1yZXR1cm4gcn07dmFyIGQ9WzAsMCwwXTtwLnJvdGF0ZT1mdW5jdGlvbih0LGUscixuKXtpZih0aGlzLmFuZ2xlLm1vdmUodCxlLHIpLG4pe3RoaXMucmVjYWxjTWF0cml4KHQpO3ZhciBpPXRoaXMuY29tcHV0ZWRNYXRyaXg7ZFswXT1pWzJdLGRbMV09aVs2XSxkWzJdPWlbMTBdO2Zvcih2YXIgbz10aGlzLmNvbXB1dGVkVXAscz10aGlzLmNvbXB1dGVkUmlnaHQsbD10aGlzLmNvbXB1dGVkVG93YXJkLGM9MDtjPDM7KytjKWlbNCpjXT1vW2NdLGlbNCpjKzFdPXNbY10saVs0KmMrMl09bFtjXTthKGksaSxuLGQpO2ZvcihjPTA7YzwzOysrYylvW2NdPWlbNCpjXSxzW2NdPWlbNCpjKzFdO3RoaXMudXAuc2V0KHQsb1swXSxvWzFdLG9bMl0pLHRoaXMucmlnaHQuc2V0KHQsc1swXSxzWzFdLHNbMl0pfX0scC5wYW49ZnVuY3Rpb24odCxlLHIsbil7ZT1lfHwwLHI9cnx8MCxuPW58fDAsdGhpcy5yZWNhbGNNYXRyaXgodCk7dmFyIGk9dGhpcy5jb21wdXRlZE1hdHJpeCxhPShNYXRoLmV4cCh0aGlzLmNvbXB1dGVkUmFkaXVzWzBdKSxpWzFdKSxvPWlbNV0scz1pWzldLGw9YyhhLG8scyk7YS89bCxvLz1sLHMvPWw7dmFyIHU9aVswXSxoPWlbNF0sZj1pWzhdLHA9dSphK2gqbytmKnMsZD1jKHUtPWEqcCxoLT1vKnAsZi09cypwKSxnPSh1Lz1kKSplK2EqcixtPShoLz1kKSplK28qcix2PShmLz1kKSplK3Mqcjt0aGlzLmNlbnRlci5tb3ZlKHQsZyxtLHYpO3ZhciB5PU1hdGguZXhwKHRoaXMuY29tcHV0ZWRSYWRpdXNbMF0pO3k9TWF0aC5tYXgoMWUtNCx5K24pLHRoaXMucmFkaXVzLnNldCh0LE1hdGgubG9nKHkpKX0scC50cmFuc2xhdGU9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5jZW50ZXIubW92ZSh0LGV8fDAscnx8MCxufHwwKX0scC5zZXRNYXRyaXg9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGE9MTsibnVtYmVyIj09dHlwZW9mIHImJihhPTB8ciksKGE8MHx8YT4zKSYmKGE9MSk7dmFyIG89KGErMiklMztlfHwodGhpcy5yZWNhbGNNYXRyaXgodCksZT10aGlzLmNvbXB1dGVkTWF0cml4KTt2YXIgcz1lW2FdLGw9ZVthKzRdLGg9ZVthKzhdO2lmKG4pe3ZhciBmPU1hdGguYWJzKHMpLHA9TWF0aC5hYnMobCksZD1NYXRoLmFicyhoKSxnPU1hdGgubWF4KGYscCxkKTtmPT09Zz8ocz1zPDA/LTE6MSxsPWg9MCk6ZD09PWc/KGg9aDwwPy0xOjEscz1sPTApOihsPWw8MD8tMToxLHM9aD0wKX1lbHNle3ZhciBtPWMocyxsLGgpO3MvPW0sbC89bSxoLz1tfXZhciB2LHkseD1lW29dLGI9ZVtvKzRdLF89ZVtvKzhdLHc9eCpzK2IqbCtfKmgsaz1jKHgtPXMqdyxiLT1sKncsXy09aCp3KSxNPWwqKF8vPWspLWgqKGIvPWspLEE9aCooeC89ayktcypfLFQ9cypiLWwqeCxTPWMoTSxBLFQpO2lmKE0vPVMsQS89UyxULz1TLHRoaXMuY2VudGVyLmp1bXAodCxILEcsVyksdGhpcy5yYWRpdXMuaWRsZSh0KSx0aGlzLnVwLmp1bXAodCxzLGwsaCksdGhpcy5yaWdodC5qdW1wKHQseCxiLF8pLDI9PT1hKXt2YXIgRT1lWzFdLEM9ZVs1XSxMPWVbOV0sej1FKngrQypiK0wqXyxQPUUqTStDKkErTCpUO3Y9UjwwPy1NYXRoLlBJLzI6TWF0aC5QSS8yLHk9TWF0aC5hdGFuMihQLHopfWVsc2V7dmFyIEk9ZVsyXSxPPWVbNl0sRD1lWzEwXSxSPUkqcytPKmwrRCpoLEI9SSp4K08qYitEKl8sRj1JKk0rTypBK0QqVDt2PU1hdGguYXNpbih1KFIpKSx5PU1hdGguYXRhbjIoRixCKX10aGlzLmFuZ2xlLmp1bXAodCx5LHYpLHRoaXMucmVjYWxjTWF0cml4KHQpO3ZhciBOPWVbMl0saj1lWzZdLFY9ZVsxMF0sVT10aGlzLmNvbXB1dGVkTWF0cml4O2koVSxlKTt2YXIgcT1VWzE1XSxIPVVbMTJdL3EsRz1VWzEzXS9xLFc9VVsxNF0vcSxZPU1hdGguZXhwKHRoaXMuY29tcHV0ZWRSYWRpdXNbMF0pO3RoaXMuY2VudGVyLmp1bXAodCxILU4qWSxHLWoqWSxXLVYqWSl9LHAubGFzdFQ9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5tYXgodGhpcy5jZW50ZXIubGFzdFQoKSx0aGlzLnVwLmxhc3RUKCksdGhpcy5yaWdodC5sYXN0VCgpLHRoaXMucmFkaXVzLmxhc3RUKCksdGhpcy5hbmdsZS5sYXN0VCgpKX0scC5pZGxlPWZ1bmN0aW9uKHQpe3RoaXMuY2VudGVyLmlkbGUodCksdGhpcy51cC5pZGxlKHQpLHRoaXMucmlnaHQuaWRsZSh0KSx0aGlzLnJhZGl1cy5pZGxlKHQpLHRoaXMuYW5nbGUuaWRsZSh0KX0scC5mbHVzaD1mdW5jdGlvbih0KXt0aGlzLmNlbnRlci5mbHVzaCh0KSx0aGlzLnVwLmZsdXNoKHQpLHRoaXMucmlnaHQuZmx1c2godCksdGhpcy5yYWRpdXMuZmx1c2godCksdGhpcy5hbmdsZS5mbHVzaCh0KX0scC5zZXREaXN0YW5jZT1mdW5jdGlvbih0LGUpe2U+MCYmdGhpcy5yYWRpdXMuc2V0KHQsTWF0aC5sb2coZSkpfSxwLmxvb2tBdD1mdW5jdGlvbih0LGUscixuKXt0aGlzLnJlY2FsY01hdHJpeCh0KSxlPWV8fHRoaXMuY29tcHV0ZWRFeWUscj1yfHx0aGlzLmNvbXB1dGVkQ2VudGVyO3ZhciBpPShuPW58fHRoaXMuY29tcHV0ZWRVcClbMF0sYT1uWzFdLG89blsyXSxzPWMoaSxhLG8pO2lmKCEoczwxZS02KSl7aS89cyxhLz1zLG8vPXM7dmFyIGw9ZVswXS1yWzBdLGg9ZVsxXS1yWzFdLGY9ZVsyXS1yWzJdLHA9YyhsLGgsZik7aWYoIShwPDFlLTYpKXtsLz1wLGgvPXAsZi89cDt2YXIgZD10aGlzLmNvbXB1dGVkUmlnaHQsZz1kWzBdLG09ZFsxXSx2PWRbMl0seT1pKmcrYSptK28qdix4PWMoZy09eSppLG0tPXkqYSx2LT15Km8pO2lmKCEoeDwuMDEmJih4PWMoZz1hKmYtbypoLG09bypsLWkqZix2PWkqaC1hKmwpKTwxZS02KSl7Zy89eCxtLz14LHYvPXgsdGhpcy51cC5zZXQodCxpLGEsbyksdGhpcy5yaWdodC5zZXQodCxnLG0sdiksdGhpcy5jZW50ZXIuc2V0KHQsclswXSxyWzFdLHJbMl0pLHRoaXMucmFkaXVzLnNldCh0LE1hdGgubG9nKHApKTt2YXIgYj1hKnYtbyptLF89bypnLWkqdix3PWkqbS1hKmcsaz1jKGIsXyx3KSxNPWkqbCthKmgrbypmLEE9ZypsK20qaCt2KmYsVD0oYi89aykqbCsoXy89aykqaCsody89aykqZixTPU1hdGguYXNpbih1KE0pKSxFPU1hdGguYXRhbjIoVCxBKSxDPXRoaXMuYW5nbGUuX3N0YXRlLEw9Q1tDLmxlbmd0aC0xXSx6PUNbQy5sZW5ndGgtMl07TCU9MipNYXRoLlBJO3ZhciBQPU1hdGguYWJzKEwrMipNYXRoLlBJLUUpLEk9TWF0aC5hYnMoTC1FKSxPPU1hdGguYWJzKEwtMipNYXRoLlBJLUUpO1A8SSYmKEwrPTIqTWF0aC5QSSksTzxJJiYoTC09MipNYXRoLlBJKSx0aGlzLmFuZ2xlLmp1bXAodGhpcy5hbmdsZS5sYXN0VCgpLEwseiksdGhpcy5hbmdsZS5zZXQodCxFLFMpfX19fX0seyJmaWx0ZXJlZC12ZWN0b3IiOjIxNSwiZ2wtbWF0NC9pbnZlcnQiOjI1NCwiZ2wtbWF0NC9yb3RhdGUiOjI1OCwiZ2wtdmVjMy9jcm9zcyI6MzE0LCJnbC12ZWMzL2RvdCI6MzE3LCJnbC12ZWMzL25vcm1hbGl6ZSI6MzI4fV0sNTA1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGk9dCplLGE9bip0LG89YS0oYS10KSxzPXQtbyxsPW4qZSxjPWwtKGwtZSksdT1lLWMsaD1zKnUtKGktbypjLXMqYy1vKnUpO2lmKHIpcmV0dXJuIHJbMF09aCxyWzFdPWkscjtyZXR1cm5baCxpXX07dmFyIG49KyhNYXRoLnBvdygyLDI3KSsxKX0se31dLDUwNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQrZSxpPW4tdCxhPWUtaSxvPXQtKG4taSk7aWYocilyZXR1cm4gclswXT1vK2EsclsxXT1uLHI7cmV0dXJuW28rYSxuXX19LHt9XSw1MDc6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSxuKXsidXNlIHN0cmljdCI7dmFyIGk9dCgiYml0LXR3aWRkbGUiKSxhPXQoImR1cCIpO2UuX19UWVBFREFSUkFZX1BPT0x8fChlLl9fVFlQRURBUlJBWV9QT09MPXtVSU5UODphKFszMiwwXSksVUlOVDE2OmEoWzMyLDBdKSxVSU5UMzI6YShbMzIsMF0pLElOVDg6YShbMzIsMF0pLElOVDE2OmEoWzMyLDBdKSxJTlQzMjphKFszMiwwXSksRkxPQVQ6YShbMzIsMF0pLERPVUJMRTphKFszMiwwXSksREFUQTphKFszMiwwXSksVUlOVDhDOmEoWzMyLDBdKSxCVUZGRVI6YShbMzIsMF0pfSk7dmFyIG89InVuZGVmaW5lZCIhPXR5cGVvZiBVaW50OENsYW1wZWRBcnJheSxzPWUuX19UWVBFREFSUkFZX1BPT0w7cy5VSU5UOEN8fChzLlVJTlQ4Qz1hKFszMiwwXSkpLHMuQlVGRkVSfHwocy5CVUZGRVI9YShbMzIsMF0pKTt2YXIgbD1zLkRBVEEsYz1zLkJVRkZFUjtmdW5jdGlvbiB1KHQpe2lmKHQpe3ZhciBlPXQubGVuZ3RofHx0LmJ5dGVMZW5ndGgscj1pLmxvZzIoZSk7bFtyXS5wdXNoKHQpfX1mdW5jdGlvbiBoKHQpe3Q9aS5uZXh0UG93Mih0KTt2YXIgZT1pLmxvZzIodCkscj1sW2VdO3JldHVybiByLmxlbmd0aD4wP3IucG9wKCk6bmV3IEFycmF5QnVmZmVyKHQpfWZ1bmN0aW9uIGYodCl7cmV0dXJuIG5ldyBVaW50OEFycmF5KGgodCksMCx0KX1mdW5jdGlvbiBwKHQpe3JldHVybiBuZXcgVWludDE2QXJyYXkoaCgyKnQpLDAsdCl9ZnVuY3Rpb24gZCh0KXtyZXR1cm4gbmV3IFVpbnQzMkFycmF5KGgoNCp0KSwwLHQpfWZ1bmN0aW9uIGcodCl7cmV0dXJuIG5ldyBJbnQ4QXJyYXkoaCh0KSwwLHQpfWZ1bmN0aW9uIG0odCl7cmV0dXJuIG5ldyBJbnQxNkFycmF5KGgoMip0KSwwLHQpfWZ1bmN0aW9uIHYodCl7cmV0dXJuIG5ldyBJbnQzMkFycmF5KGgoNCp0KSwwLHQpfWZ1bmN0aW9uIHkodCl7cmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoaCg0KnQpLDAsdCl9ZnVuY3Rpb24geCh0KXtyZXR1cm4gbmV3IEZsb2F0NjRBcnJheShoKDgqdCksMCx0KX1mdW5jdGlvbiBiKHQpe3JldHVybiBvP25ldyBVaW50OENsYW1wZWRBcnJheShoKHQpLDAsdCk6Zih0KX1mdW5jdGlvbiBfKHQpe3JldHVybiBuZXcgRGF0YVZpZXcoaCh0KSwwLHQpfWZ1bmN0aW9uIHcodCl7dD1pLm5leHRQb3cyKHQpO3ZhciBlPWkubG9nMih0KSxyPWNbZV07cmV0dXJuIHIubGVuZ3RoPjA/ci5wb3AoKTpuZXcgbih0KX1yLmZyZWU9ZnVuY3Rpb24odCl7aWYobi5pc0J1ZmZlcih0KSljW2kubG9nMih0Lmxlbmd0aCldLnB1c2godCk7ZWxzZXtpZigiW29iamVjdCBBcnJheUJ1ZmZlcl0iIT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpJiYodD10LmJ1ZmZlciksIXQpcmV0dXJuO3ZhciBlPXQubGVuZ3RofHx0LmJ5dGVMZW5ndGgscj0wfGkubG9nMihlKTtsW3JdLnB1c2godCl9fSxyLmZyZWVVaW50OD1yLmZyZWVVaW50MTY9ci5mcmVlVWludDMyPXIuZnJlZUludDg9ci5mcmVlSW50MTY9ci5mcmVlSW50MzI9ci5mcmVlRmxvYXQzMj1yLmZyZWVGbG9hdD1yLmZyZWVGbG9hdDY0PXIuZnJlZURvdWJsZT1yLmZyZWVVaW50OENsYW1wZWQ9ci5mcmVlRGF0YVZpZXc9ZnVuY3Rpb24odCl7dSh0LmJ1ZmZlcil9LHIuZnJlZUFycmF5QnVmZmVyPXUsci5mcmVlQnVmZmVyPWZ1bmN0aW9uKHQpe2NbaS5sb2cyKHQubGVuZ3RoKV0ucHVzaCh0KX0sci5tYWxsb2M9ZnVuY3Rpb24odCxlKXtpZih2b2lkIDA9PT1lfHwiYXJyYXlidWZmZXIiPT09ZSlyZXR1cm4gaCh0KTtzd2l0Y2goZSl7Y2FzZSJ1aW50OCI6cmV0dXJuIGYodCk7Y2FzZSJ1aW50MTYiOnJldHVybiBwKHQpO2Nhc2UidWludDMyIjpyZXR1cm4gZCh0KTtjYXNlImludDgiOnJldHVybiBnKHQpO2Nhc2UiaW50MTYiOnJldHVybiBtKHQpO2Nhc2UiaW50MzIiOnJldHVybiB2KHQpO2Nhc2UiZmxvYXQiOmNhc2UiZmxvYXQzMiI6cmV0dXJuIHkodCk7Y2FzZSJkb3VibGUiOmNhc2UiZmxvYXQ2NCI6cmV0dXJuIHgodCk7Y2FzZSJ1aW50OF9jbGFtcGVkIjpyZXR1cm4gYih0KTtjYXNlImJ1ZmZlciI6cmV0dXJuIHcodCk7Y2FzZSJkYXRhIjpjYXNlImRhdGF2aWV3IjpyZXR1cm4gXyh0KTtkZWZhdWx0OnJldHVybiBudWxsfXJldHVybiBudWxsfSxyLm1hbGxvY0FycmF5QnVmZmVyPWgsci5tYWxsb2NVaW50OD1mLHIubWFsbG9jVWludDE2PXAsci5tYWxsb2NVaW50MzI9ZCxyLm1hbGxvY0ludDg9ZyxyLm1hbGxvY0ludDE2PW0sci5tYWxsb2NJbnQzMj12LHIubWFsbG9jRmxvYXQzMj1yLm1hbGxvY0Zsb2F0PXksci5tYWxsb2NGbG9hdDY0PXIubWFsbG9jRG91YmxlPXgsci5tYWxsb2NVaW50OENsYW1wZWQ9YixyLm1hbGxvY0RhdGFWaWV3PV8sci5tYWxsb2NCdWZmZXI9dyxyLmNsZWFyQ2FjaGU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PDMyOysrdClzLlVJTlQ4W3RdLmxlbmd0aD0wLHMuVUlOVDE2W3RdLmxlbmd0aD0wLHMuVUlOVDMyW3RdLmxlbmd0aD0wLHMuSU5UOFt0XS5sZW5ndGg9MCxzLklOVDE2W3RdLmxlbmd0aD0wLHMuSU5UMzJbdF0ubGVuZ3RoPTAscy5GTE9BVFt0XS5sZW5ndGg9MCxzLkRPVUJMRVt0XS5sZW5ndGg9MCxzLlVJTlQ4Q1t0XS5sZW5ndGg9MCxsW3RdLmxlbmd0aD0wLGNbdF0ubGVuZ3RoPTB9fSkuY2FsbCh0aGlzLCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30sdCgiYnVmZmVyIikuQnVmZmVyKX0seyJiaXQtdHdpZGRsZSI6ODAsYnVmZmVyOjkyLGR1cDoxNTR9XSw1MDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7InVzZSByZXN0cmljdCI7ZnVuY3Rpb24gbih0KXt0aGlzLnJvb3RzPW5ldyBBcnJheSh0KSx0aGlzLnJhbmtzPW5ldyBBcnJheSh0KTtmb3IodmFyIGU9MDtlPHQ7KytlKXRoaXMucm9vdHNbZV09ZSx0aGlzLnJhbmtzW2VdPTB9ZS5leHBvcnRzPW47dmFyIGk9bi5wcm90b3R5cGU7T2JqZWN0LmRlZmluZVByb3BlcnR5KGksImxlbmd0aCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJvb3RzLmxlbmd0aH19KSxpLm1ha2VTZXQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnJvb3RzLmxlbmd0aDtyZXR1cm4gdGhpcy5yb290cy5wdXNoKHQpLHRoaXMucmFua3MucHVzaCgwKSx0fSxpLmZpbmQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQscj10aGlzLnJvb3RzO3JbdF0hPT10Oyl0PXJbdF07Zm9yKDtyW2VdIT09dDspe3ZhciBuPXJbZV07cltlXT10LGU9bn1yZXR1cm4gdH0saS5saW5rPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5maW5kKHQpLG49dGhpcy5maW5kKGUpO2lmKHIhPT1uKXt2YXIgaT10aGlzLnJhbmtzLGE9dGhpcy5yb290cyxvPWlbcl0scz1pW25dO288cz9hW3JdPW46czxvP2Fbbl09cjooYVtuXT1yLCsraVtyXSl9fX0se31dLDUwOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiAwPT09dC5sZW5ndGg/dDplPyhyfHx0LnNvcnQoZSksZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MSxuPXQubGVuZ3RoLGk9dFswXSxhPXRbMF0sbz0xO288bjsrK28paWYoYT1pLGUoaT10W29dLGEpKXtpZihvPT09cil7cisrO2NvbnRpbnVlfXRbcisrXT1pfXJldHVybiB0Lmxlbmd0aD1yLHR9KHQsZSkpOihyfHx0LnNvcnQoKSxmdW5jdGlvbih0KXtmb3IodmFyIGU9MSxyPXQubGVuZ3RoLG49dFswXSxpPXRbMF0sYT0xO2E8cjsrK2EsaT1uKWlmKGk9biwobj10W2FdKSE9PWkpe2lmKGE9PT1lKXtlKys7Y29udGludWV9dFtlKytdPW59cmV0dXJuIHQubGVuZ3RoPWUsdH0odCkpfX0se31dLDUxMDpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPS9bXCdcIl0vO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdD8obi50ZXN0KHQuY2hhckF0KDApKSYmKHQ9dC5zdWJzdHIoMSkpLG4udGVzdCh0LmNoYXJBdCh0Lmxlbmd0aC0xKSkmJih0PXQuc3Vic3RyKDAsdC5sZW5ndGgtMSkpLHQpOiIifX0se31dLDUxMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe0FycmF5LmlzQXJyYXkocil8fChyPVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDIpKTtmb3IodmFyIG49MCxpPXIubGVuZ3RoO248aTtuKyspe3ZhciBhPXJbbl07Zm9yKHZhciBvIGluIGEpaWYoKHZvaWQgMD09PWVbb118fEFycmF5LmlzQXJyYXkoZVtvXSl8fHRbb10hPT1lW29dKSYmbyBpbiBlKXt2YXIgcztpZighMD09PWFbb10pcz1lW29dO2Vsc2V7aWYoITE9PT1hW29dKWNvbnRpbnVlO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBhW29dJiZ2b2lkIDA9PT0ocz1hW29dKGVbb10sdCxlKSkpY29udGludWV9dFtvXT1zfX1yZXR1cm4gdH19LHt9XSw1MTI6W2Z1bmN0aW9uKHQsZSxyKXsiZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmNyZWF0ZT9lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt0LnN1cGVyXz1lLHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTp0LGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pfTplLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt0LnN1cGVyXz1lO3ZhciByPWZ1bmN0aW9uKCl7fTtyLnByb3RvdHlwZT1lLnByb3RvdHlwZSx0LnByb3RvdHlwZT1uZXcgcix0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj10fX0se31dLDUxMzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdCYmIm9iamVjdCI9PXR5cGVvZiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgdC5jb3B5JiYiZnVuY3Rpb24iPT10eXBlb2YgdC5maWxsJiYiZnVuY3Rpb24iPT10eXBlb2YgdC5yZWFkVUludDh9fSx7fV0sNTE0OltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUsbil7dmFyIGk9LyVbc2RqJV0vZztyLmZvcm1hdD1mdW5jdGlvbih0KXtpZighdih0KSl7Zm9yKHZhciBlPVtdLHI9MDtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKWUucHVzaChzKGFyZ3VtZW50c1tyXSkpO3JldHVybiBlLmpvaW4oIiAiKX1yPTE7Zm9yKHZhciBuPWFyZ3VtZW50cyxhPW4ubGVuZ3RoLG89U3RyaW5nKHQpLnJlcGxhY2UoaSxmdW5jdGlvbih0KXtpZigiJSUiPT09dClyZXR1cm4iJSI7aWYocj49YSlyZXR1cm4gdDtzd2l0Y2godCl7Y2FzZSIlcyI6cmV0dXJuIFN0cmluZyhuW3IrK10pO2Nhc2UiJWQiOnJldHVybiBOdW1iZXIobltyKytdKTtjYXNlIiVqIjp0cnl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KG5bcisrXSl9Y2F0Y2godCl7cmV0dXJuIltDaXJjdWxhcl0ifWRlZmF1bHQ6cmV0dXJuIHR9fSksbD1uW3JdO3I8YTtsPW5bKytyXSlnKGwpfHwhYihsKT9vKz0iICIrbDpvKz0iICIrcyhsKTtyZXR1cm4gb30sci5kZXByZWNhdGU9ZnVuY3Rpb24odCxpKXtpZih5KG4ucHJvY2VzcykpcmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHIuZGVwcmVjYXRlKHQsaSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtpZighMD09PWUubm9EZXByZWNhdGlvbilyZXR1cm4gdDt2YXIgYT0hMTtyZXR1cm4gZnVuY3Rpb24oKXtpZighYSl7aWYoZS50aHJvd0RlcHJlY2F0aW9uKXRocm93IG5ldyBFcnJvcihpKTtlLnRyYWNlRGVwcmVjYXRpb24/Y29uc29sZS50cmFjZShpKTpjb25zb2xlLmVycm9yKGkpLGE9ITB9cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfX07dmFyIGEsbz17fTtmdW5jdGlvbiBzKHQsZSl7dmFyIG49e3NlZW46W10sc3R5bGl6ZTpjfTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD49MyYmKG4uZGVwdGg9YXJndW1lbnRzWzJdKSxhcmd1bWVudHMubGVuZ3RoPj00JiYobi5jb2xvcnM9YXJndW1lbnRzWzNdKSxkKGUpP24uc2hvd0hpZGRlbj1lOmUmJnIuX2V4dGVuZChuLGUpLHkobi5zaG93SGlkZGVuKSYmKG4uc2hvd0hpZGRlbj0hMSkseShuLmRlcHRoKSYmKG4uZGVwdGg9MikseShuLmNvbG9ycykmJihuLmNvbG9ycz0hMSkseShuLmN1c3RvbUluc3BlY3QpJiYobi5jdXN0b21JbnNwZWN0PSEwKSxuLmNvbG9ycyYmKG4uc3R5bGl6ZT1sKSx1KG4sdCxuLmRlcHRoKX1mdW5jdGlvbiBsKHQsZSl7dmFyIHI9cy5zdHlsZXNbZV07cmV0dXJuIHI/Ilx4MWJbIitzLmNvbG9yc1tyXVswXSsibSIrdCsiXHgxYlsiK3MuY29sb3JzW3JdWzFdKyJtIjp0fWZ1bmN0aW9uIGModCxlKXtyZXR1cm4gdH1mdW5jdGlvbiB1KHQsZSxuKXtpZih0LmN1c3RvbUluc3BlY3QmJmUmJmsoZS5pbnNwZWN0KSYmZS5pbnNwZWN0IT09ci5pbnNwZWN0JiYoIWUuY29uc3RydWN0b3J8fGUuY29uc3RydWN0b3IucHJvdG90eXBlIT09ZSkpe3ZhciBpPWUuaW5zcGVjdChuLHQpO3JldHVybiB2KGkpfHwoaT11KHQsaSxuKSksaX12YXIgYT1mdW5jdGlvbih0LGUpe2lmKHkoZSkpcmV0dXJuIHQuc3R5bGl6ZSgidW5kZWZpbmVkIiwidW5kZWZpbmVkIik7aWYodihlKSl7dmFyIHI9IiciK0pTT04uc3RyaW5naWZ5KGUpLnJlcGxhY2UoL14ifCIkL2csIiIpLnJlcGxhY2UoLycvZywiXFwnIikucmVwbGFjZSgvXFwiL2csJyInKSsiJyI7cmV0dXJuIHQuc3R5bGl6ZShyLCJzdHJpbmciKX1pZihtKGUpKXJldHVybiB0LnN0eWxpemUoIiIrZSwibnVtYmVyIik7aWYoZChlKSlyZXR1cm4gdC5zdHlsaXplKCIiK2UsImJvb2xlYW4iKTtpZihnKGUpKXJldHVybiB0LnN0eWxpemUoIm51bGwiLCJudWxsIil9KHQsZSk7aWYoYSlyZXR1cm4gYTt2YXIgbz1PYmplY3Qua2V5cyhlKSxzPWZ1bmN0aW9uKHQpe3ZhciBlPXt9O3JldHVybiB0LmZvckVhY2goZnVuY3Rpb24odCxyKXtlW3RdPSEwfSksZX0obyk7aWYodC5zaG93SGlkZGVuJiYobz1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlKSksdyhlKSYmKG8uaW5kZXhPZigibWVzc2FnZSIpPj0wfHxvLmluZGV4T2YoImRlc2NyaXB0aW9uIik+PTApKXJldHVybiBoKGUpO2lmKDA9PT1vLmxlbmd0aCl7aWYoayhlKSl7dmFyIGw9ZS5uYW1lPyI6ICIrZS5uYW1lOiIiO3JldHVybiB0LnN0eWxpemUoIltGdW5jdGlvbiIrbCsiXSIsInNwZWNpYWwiKX1pZih4KGUpKXJldHVybiB0LnN0eWxpemUoUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLCJyZWdleHAiKTtpZihfKGUpKXJldHVybiB0LnN0eWxpemUoRGF0ZS5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKSwiZGF0ZSIpO2lmKHcoZSkpcmV0dXJuIGgoZSl9dmFyIGMsYj0iIixNPSExLEE9WyJ7IiwifSJdOyhwKGUpJiYoTT0hMCxBPVsiWyIsIl0iXSksayhlKSkmJihiPSIgW0Z1bmN0aW9uIisoZS5uYW1lPyI6ICIrZS5uYW1lOiIiKSsiXSIpO3JldHVybiB4KGUpJiYoYj0iICIrUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpKSxfKGUpJiYoYj0iICIrRGF0ZS5wcm90b3R5cGUudG9VVENTdHJpbmcuY2FsbChlKSksdyhlKSYmKGI9IiAiK2goZSkpLDAhPT1vLmxlbmd0aHx8TSYmMCE9ZS5sZW5ndGg/bjwwP3goZSk/dC5zdHlsaXplKFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKSwicmVnZXhwIik6dC5zdHlsaXplKCJbT2JqZWN0XSIsInNwZWNpYWwiKToodC5zZWVuLnB1c2goZSksYz1NP2Z1bmN0aW9uKHQsZSxyLG4saSl7Zm9yKHZhciBhPVtdLG89MCxzPWUubGVuZ3RoO288czsrK28pUyhlLFN0cmluZyhvKSk/YS5wdXNoKGYodCxlLHIsbixTdHJpbmcobyksITApKTphLnB1c2goIiIpO3JldHVybiBpLmZvckVhY2goZnVuY3Rpb24oaSl7aS5tYXRjaCgvXlxkKyQvKXx8YS5wdXNoKGYodCxlLHIsbixpLCEwKSl9KSxhfSh0LGUsbixzLG8pOm8ubWFwKGZ1bmN0aW9uKHIpe3JldHVybiBmKHQsZSxuLHMscixNKX0pLHQuc2Vlbi5wb3AoKSxmdW5jdGlvbih0LGUscil7aWYodC5yZWR1Y2UoZnVuY3Rpb24odCxlKXtyZXR1cm4gMCxlLmluZGV4T2YoIlxuIik+PTAmJjAsdCtlLnJlcGxhY2UoL1x1MDAxYlxbXGRcZD9tL2csIiIpLmxlbmd0aCsxfSwwKT42MClyZXR1cm4gclswXSsoIiI9PT1lPyIiOmUrIlxuICIpKyIgIit0LmpvaW4oIixcbiAgIikrIiAiK3JbMV07cmV0dXJuIHJbMF0rZSsiICIrdC5qb2luKCIsICIpKyIgIityWzFdfShjLGIsQSkpOkFbMF0rYitBWzFdfWZ1bmN0aW9uIGgodCl7cmV0dXJuIlsiK0Vycm9yLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpKyJdIn1mdW5jdGlvbiBmKHQsZSxyLG4saSxhKXt2YXIgbyxzLGw7aWYoKGw9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLGkpfHx7dmFsdWU6ZVtpXX0pLmdldD9zPWwuc2V0P3Quc3R5bGl6ZSgiW0dldHRlci9TZXR0ZXJdIiwic3BlY2lhbCIpOnQuc3R5bGl6ZSgiW0dldHRlcl0iLCJzcGVjaWFsIik6bC5zZXQmJihzPXQuc3R5bGl6ZSgiW1NldHRlcl0iLCJzcGVjaWFsIikpLFMobixpKXx8KG89IlsiK2krIl0iKSxzfHwodC5zZWVuLmluZGV4T2YobC52YWx1ZSk8MD8ocz1nKHIpP3UodCxsLnZhbHVlLG51bGwpOnUodCxsLnZhbHVlLHItMSkpLmluZGV4T2YoIlxuIik+LTEmJihzPWE/cy5zcGxpdCgiXG4iKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIiAgIit0fSkuam9pbigiXG4iKS5zdWJzdHIoMik6IlxuIitzLnNwbGl0KCJcbiIpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4iICAgIit0fSkuam9pbigiXG4iKSk6cz10LnN0eWxpemUoIltDaXJjdWxhcl0iLCJzcGVjaWFsIikpLHkobykpe2lmKGEmJmkubWF0Y2goL15cZCskLykpcmV0dXJuIHM7KG89SlNPTi5zdHJpbmdpZnkoIiIraSkpLm1hdGNoKC9eIihbYS16QS1aX11bYS16QS1aXzAtOV0qKSIkLyk/KG89by5zdWJzdHIoMSxvLmxlbmd0aC0yKSxvPXQuc3R5bGl6ZShvLCJuYW1lIikpOihvPW8ucmVwbGFjZSgvJy9nLCJcXCciKS5yZXBsYWNlKC9cXCIvZywnIicpLnJlcGxhY2UoLyheInwiJCkvZywiJyIpLG89dC5zdHlsaXplKG8sInN0cmluZyIpKX1yZXR1cm4gbysiOiAiK3N9ZnVuY3Rpb24gcCh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KX1mdW5jdGlvbiBkKHQpe3JldHVybiJib29sZWFuIj09dHlwZW9mIHR9ZnVuY3Rpb24gZyh0KXtyZXR1cm4gbnVsbD09PXR9ZnVuY3Rpb24gbSh0KXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHR9ZnVuY3Rpb24gdih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHR9ZnVuY3Rpb24geSh0KXtyZXR1cm4gdm9pZCAwPT09dH1mdW5jdGlvbiB4KHQpe3JldHVybiBiKHQpJiYiW29iamVjdCBSZWdFeHBdIj09PU0odCl9ZnVuY3Rpb24gYih0KXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHQmJm51bGwhPT10fWZ1bmN0aW9uIF8odCl7cmV0dXJuIGIodCkmJiJbb2JqZWN0IERhdGVdIj09PU0odCl9ZnVuY3Rpb24gdyh0KXtyZXR1cm4gYih0KSYmKCJbb2JqZWN0IEVycm9yXSI9PT1NKHQpfHx0IGluc3RhbmNlb2YgRXJyb3IpfWZ1bmN0aW9uIGsodCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHR9ZnVuY3Rpb24gTSh0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfWZ1bmN0aW9uIEEodCl7cmV0dXJuIHQ8MTA/IjAiK3QudG9TdHJpbmcoMTApOnQudG9TdHJpbmcoMTApfXIuZGVidWdsb2c9ZnVuY3Rpb24odCl7aWYoeShhKSYmKGE9ZS5lbnYuTk9ERV9ERUJVR3x8IiIpLHQ9dC50b1VwcGVyQ2FzZSgpLCFvW3RdKWlmKG5ldyBSZWdFeHAoIlxcYiIrdCsiXFxiIiwiaSIpLnRlc3QoYSkpe3ZhciBuPWUucGlkO29bdF09ZnVuY3Rpb24oKXt2YXIgZT1yLmZvcm1hdC5hcHBseShyLGFyZ3VtZW50cyk7Y29uc29sZS5lcnJvcigiJXMgJWQ6ICVzIix0LG4sZSl9fWVsc2Ugb1t0XT1mdW5jdGlvbigpe307cmV0dXJuIG9bdF19LHIuaW5zcGVjdD1zLHMuY29sb3JzPXtib2xkOlsxLDIyXSxpdGFsaWM6WzMsMjNdLHVuZGVybGluZTpbNCwyNF0saW52ZXJzZTpbNywyN10sd2hpdGU6WzM3LDM5XSxncmV5Ols5MCwzOV0sYmxhY2s6WzMwLDM5XSxibHVlOlszNCwzOV0sY3lhbjpbMzYsMzldLGdyZWVuOlszMiwzOV0sbWFnZW50YTpbMzUsMzldLHJlZDpbMzEsMzldLHllbGxvdzpbMzMsMzldfSxzLnN0eWxlcz17c3BlY2lhbDoiY3lhbiIsbnVtYmVyOiJ5ZWxsb3ciLGJvb2xlYW46InllbGxvdyIsdW5kZWZpbmVkOiJncmV5IixudWxsOiJib2xkIixzdHJpbmc6ImdyZWVuIixkYXRlOiJtYWdlbnRhIixyZWdleHA6InJlZCJ9LHIuaXNBcnJheT1wLHIuaXNCb29sZWFuPWQsci5pc051bGw9ZyxyLmlzTnVsbE9yVW5kZWZpbmVkPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10fSxyLmlzTnVtYmVyPW0sci5pc1N0cmluZz12LHIuaXNTeW1ib2w9ZnVuY3Rpb24odCl7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0fSxyLmlzVW5kZWZpbmVkPXksci5pc1JlZ0V4cD14LHIuaXNPYmplY3Q9YixyLmlzRGF0ZT1fLHIuaXNFcnJvcj13LHIuaXNGdW5jdGlvbj1rLHIuaXNQcmltaXRpdmU9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PT10fHwiYm9vbGVhbiI9PXR5cGVvZiB0fHwibnVtYmVyIj09dHlwZW9mIHR8fCJzdHJpbmciPT10eXBlb2YgdHx8InN5bWJvbCI9PXR5cGVvZiB0fHwidW5kZWZpbmVkIj09dHlwZW9mIHR9LHIuaXNCdWZmZXI9dCgiLi9zdXBwb3J0L2lzQnVmZmVyIik7dmFyIFQ9WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXTtmdW5jdGlvbiBTKHQsZSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LGUpfXIubG9nPWZ1bmN0aW9uKCl7dmFyIHQsZTtjb25zb2xlLmxvZygiJXMgLSAlcyIsKHQ9bmV3IERhdGUsZT1bQSh0LmdldEhvdXJzKCkpLEEodC5nZXRNaW51dGVzKCkpLEEodC5nZXRTZWNvbmRzKCkpXS5qb2luKCI6IiksW3QuZ2V0RGF0ZSgpLFRbdC5nZXRNb250aCgpXSxlXS5qb2luKCIgIikpLHIuZm9ybWF0LmFwcGx5KHIsYXJndW1lbnRzKSl9LHIuaW5oZXJpdHM9dCgiaW5oZXJpdHMiKSxyLl9leHRlbmQ9ZnVuY3Rpb24odCxlKXtpZighZXx8IWIoZSkpcmV0dXJuIHQ7Zm9yKHZhciByPU9iamVjdC5rZXlzKGUpLG49ci5sZW5ndGg7bi0tOyl0W3Jbbl1dPWVbcltuXV07cmV0dXJuIHR9fSkuY2FsbCh0aGlzLHQoIl9wcm9jZXNzIiksInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHsiLi9zdXBwb3J0L2lzQnVmZmVyIjo1MTMsX3Byb2Nlc3M6NDQ5LGluaGVyaXRzOjUxMn1dLDUxNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXsib2JqZWN0Ij09dHlwZW9mIGUmJm51bGwhPT1lfHwoZT17fSk7cmV0dXJuIG4odCxlLmNhbnZhc3x8aSxlLmNvbnRleHR8fGEsZSl9O3ZhciBuPXQoIi4vbGliL3Z0ZXh0IiksaT1udWxsLGE9bnVsbDsidW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50JiYoKGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIikpLndpZHRoPTgxOTIsaS5oZWlnaHQ9MTAyNCxhPWkuZ2V0Q29udGV4dCgiMmQiKSl9LHsiLi9saWIvdnRleHQiOjUxNn1dLDUxNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGE9bi5zaXplfHw2NCxvPW4uZm9udHx8Im5vcm1hbCI7cmV0dXJuIHIuZm9udD1hKyJweCAiK28sci50ZXh0QWxpZ249InN0YXJ0IixyLnRleHRCYXNlbGluZT0iYWxwaGFiZXRpYyIsci5kaXJlY3Rpb249Imx0ciIsaChmdW5jdGlvbih0LGUscixuKXt2YXIgYT0wfE1hdGguY2VpbChlLm1lYXN1cmVUZXh0KHIpLndpZHRoKzIqbik7aWYoYT44MTkyKXRocm93IG5ldyBFcnJvcigidmVjdG9yaXplLXRleHQ6IFN0cmluZyB0b28gbG9uZyAoc29ycnksIHRoaXMgd2lsbCBnZXQgZml4ZWQgbGF0ZXIpIik7dmFyIG89MypuO3QuaGVpZ2h0PG8mJih0LmhlaWdodD1vKSxlLmZpbGxTdHlsZT0iIzAwMCIsZS5maWxsUmVjdCgwLDAsdC53aWR0aCx0LmhlaWdodCksZS5maWxsU3R5bGU9IiNmZmYiLGUuZmlsbFRleHQocixuLDIqbik7dmFyIHM9ZS5nZXRJbWFnZURhdGEoMCwwLGEsbyk7cmV0dXJuIGkocy5kYXRhLFtvLGEsNF0pLnBpY2soLTEsLTEsMCkudHJhbnNwb3NlKDEsMCl9KGUscix0LGEpLG4sYSl9LGUuZXhwb3J0cy5wcm9jZXNzUGl4ZWxzPWg7dmFyIG49dCgic3VyZmFjZS1uZXRzIiksaT10KCJuZGFycmF5IiksYT10KCJzaW1wbGlmeS1wbGFuYXItZ3JhcGgiKSxvPXQoImNsZWFuLXBzbGciKSxzPXQoImNkdDJkIiksbD10KCJwbGFuYXItZ3JhcGgtdG8tcG9seWxpbmUiKTtmdW5jdGlvbiBjKHQsZSl7dmFyIHI9bih0LDEyOCk7cmV0dXJuIGU/YShyLmNlbGxzLHIucG9zaXRpb25zLC4yNSk6e2VkZ2VzOnIuY2VsbHMscG9zaXRpb25zOnIucG9zaXRpb25zfX1mdW5jdGlvbiB1KHQsZSxyLG4pe3ZhciBpPWModCxuKSxhPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49ZS50ZXh0QWxpZ258fCJzdGFydCIsaT1lLnRleHRCYXNlbGluZXx8ImFscGhhYmV0aWMiLGE9WzE8PDMwLDE8PDMwXSxvPVswLDBdLHM9dC5sZW5ndGgsbD0wO2w8czsrK2wpZm9yKHZhciBjPXRbbF0sdT0wO3U8MjsrK3UpYVt1XT0wfE1hdGgubWluKGFbdV0sY1t1XSksb1t1XT0wfE1hdGgubWF4KG9bdV0sY1t1XSk7dmFyIGg9MDtzd2l0Y2gobil7Y2FzZSJjZW50ZXIiOmg9LS41KihhWzBdK29bMF0pO2JyZWFrO2Nhc2UicmlnaHQiOmNhc2UiZW5kIjpoPS1vWzBdO2JyZWFrO2Nhc2UibGVmdCI6Y2FzZSJzdGFydCI6aD0tYVswXTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidmVjdG9yaXplLXRleHQ6IFVucmVjb2duaXplZCB0ZXh0QWxpZ246ICciK24rIiciKX12YXIgZj0wO3N3aXRjaChpKXtjYXNlImhhbmdpbmciOmNhc2UidG9wIjpmPS1hWzFdO2JyZWFrO2Nhc2UibWlkZGxlIjpmPS0uNSooYVsxXStvWzFdKTticmVhaztjYXNlImFscGhhYmV0aWMiOmNhc2UiaWRlb2dyYXBoaWMiOmY9LTMqcjticmVhaztjYXNlImJvdHRvbSI6Zj0tb1sxXTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidmVjdG9yaXplLXRleHQ6IFVucmVjb2dpbml6ZWQgdGV4dEJhc2VsaW5lOiAnIitpKyInIil9dmFyIHA9MS9yO3JldHVybiJsaW5lSGVpZ2h0ImluIGU/cCo9K2UubGluZUhlaWdodDoid2lkdGgiaW4gZT9wPWUud2lkdGgvKG9bMF0tYVswXSk6ImhlaWdodCJpbiBlJiYocD1lLmhlaWdodC8ob1sxXS1hWzFdKSksdC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuW3AqKHRbMF0raCkscCoodFsxXStmKV19KX0oaS5wb3NpdGlvbnMsZSxyKSx1PWkuZWRnZXMsaD0iY2N3Ij09PWUub3JpZW50YXRpb247aWYobyhhLHUpLGUucG9seWdvbnN8fGUucG9seWdvbnx8ZS5wb2x5bGluZSl7Zm9yKHZhciBmPWwodSxhKSxwPW5ldyBBcnJheShmLmxlbmd0aCksZD0wO2Q8Zi5sZW5ndGg7KytkKXtmb3IodmFyIGc9ZltkXSxtPW5ldyBBcnJheShnLmxlbmd0aCksdj0wO3Y8Zy5sZW5ndGg7Kyt2KXtmb3IodmFyIHk9Z1t2XSx4PW5ldyBBcnJheSh5Lmxlbmd0aCksYj0wO2I8eS5sZW5ndGg7KytiKXhbYl09YVt5W2JdXS5zbGljZSgpO2gmJngucmV2ZXJzZSgpLG1bdl09eH1wW2RdPW19cmV0dXJuIHB9cmV0dXJuIGUudHJpYW5nbGVzfHxlLnRyaWFuZ3VsYXRlfHxlLnRyaWFuZ2xlP3tjZWxsczpzKGEsdSx7ZGVsYXVuYXk6ITEsZXh0ZXJpb3I6ITEsaW50ZXJpb3I6ITB9KSxwb3NpdGlvbnM6YX06e2VkZ2VzOnUscG9zaXRpb25zOmF9fWZ1bmN0aW9uIGgodCxlLHIpe3RyeXtyZXR1cm4gdSh0LGUsciwhMCl9Y2F0Y2godCl7fXRyeXtyZXR1cm4gdSh0LGUsciwhMSl9Y2F0Y2godCl7fXJldHVybiBlLnBvbHlnb25zfHxlLnBvbHlsaW5lfHxlLnBvbHlnb24/W106ZS50cmlhbmdsZXN8fGUudHJpYW5ndWxhdGV8fGUudHJpYW5nbGU/e2NlbGxzOltdLHBvc2l0aW9uczpbXX06e2VkZ2VzOltdLHBvc2l0aW9uczpbXX19fSx7Y2R0MmQ6OTMsImNsZWFuLXBzbGciOjEwMyxuZGFycmF5OjQxNywicGxhbmFyLWdyYXBoLXRvLXBvbHlsaW5lIjo0MzUsInNpbXBsaWZ5LXBsYW5hci1ncmFwaCI6NDg1LCJzdXJmYWNlLW5ldHMiOjQ5M31dLDUxNzpbZnVuY3Rpb24odCxlLHIpeyFmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtpZigidW5kZWZpbmVkIj09dHlwZW9mIHNlc3x8IXNlcy5va3x8c2VzLm9rKCkpeyJ1bmRlZmluZWQiIT10eXBlb2Ygc2VzJiYoc2VzLndlYWtNYXBQZXJtaXRIb3N0T2JqZWN0cz1tKTt2YXIgdD0hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgV2Vha01hcCl7dmFyIHI9V2Vha01hcDtpZigidW5kZWZpbmVkIiE9dHlwZW9mIG5hdmlnYXRvciYmL0ZpcmVmb3gvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkpO2Vsc2V7dmFyIG49bmV3IHIsaT1PYmplY3QuZnJlZXplKHt9KTtpZihuLnNldChpLDEpLDE9PT1uLmdldChpKSlyZXR1cm4gdm9pZChlLmV4cG9ydHM9V2Vha01hcCk7dD0hMH19T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTt2YXIgYT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyxvPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxzPU9iamVjdC5pc0V4dGVuc2libGUsbD0id2Vha21hcDoiLGM9bCsiaWRlbnQ6IitNYXRoLnJhbmRvbSgpKyJfX18iO2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgY3J5cHRvJiYiZnVuY3Rpb24iPT10eXBlb2YgY3J5cHRvLmdldFJhbmRvbVZhbHVlcyYmImZ1bmN0aW9uIj09dHlwZW9mIEFycmF5QnVmZmVyJiYiZnVuY3Rpb24iPT10eXBlb2YgVWludDhBcnJheSl7dmFyIHU9bmV3IEFycmF5QnVmZmVyKDI1KSxoPW5ldyBVaW50OEFycmF5KHUpO2NyeXB0by5nZXRSYW5kb21WYWx1ZXMoaCksYz1sKyJyYW5kOiIrQXJyYXkucHJvdG90eXBlLm1hcC5jYWxsKGgsZnVuY3Rpb24odCl7cmV0dXJuKHQlMzYpLnRvU3RyaW5nKDM2KX0pLmpvaW4oIiIpKyJfX18ifWlmKG8oT2JqZWN0LCJnZXRPd25Qcm9wZXJ0eU5hbWVzIix7dmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIGEodCkuZmlsdGVyKHYpfX0pLCJnZXRQcm9wZXJ0eU5hbWVzImluIE9iamVjdCl7dmFyIGY9T2JqZWN0LmdldFByb3BlcnR5TmFtZXM7byhPYmplY3QsImdldFByb3BlcnR5TmFtZXMiLHt2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gZih0KS5maWx0ZXIodil9fSl9IWZ1bmN0aW9uKCl7dmFyIHQ9T2JqZWN0LmZyZWV6ZTtvKE9iamVjdCwiZnJlZXplIix7dmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHkoZSksdChlKX19KTt2YXIgZT1PYmplY3Quc2VhbDtvKE9iamVjdCwic2VhbCIse3ZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB5KHQpLGUodCl9fSk7dmFyIHI9T2JqZWN0LnByZXZlbnRFeHRlbnNpb25zO28oT2JqZWN0LCJwcmV2ZW50RXh0ZW5zaW9ucyIse3ZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB5KHQpLHIodCl9fSl9KCk7dmFyIHA9ITEsZD0wLGc9ZnVuY3Rpb24oKXt0aGlzIGluc3RhbmNlb2YgZ3x8YigpO3ZhciB0PVtdLGU9W10scj1kKys7cmV0dXJuIE9iamVjdC5jcmVhdGUoZy5wcm90b3R5cGUse2dldF9fXzp7dmFsdWU6eChmdW5jdGlvbihuLGkpe3ZhciBhLG89eShuKTtyZXR1cm4gbz9yIGluIG8/b1tyXTppOihhPXQuaW5kZXhPZihuKSk+PTA/ZVthXTppfSl9LGhhc19fXzp7dmFsdWU6eChmdW5jdGlvbihlKXt2YXIgbj15KGUpO3JldHVybiBuP3IgaW4gbjp0LmluZGV4T2YoZSk+PTB9KX0sc2V0X19fOnt2YWx1ZTp4KGZ1bmN0aW9uKG4saSl7dmFyIGEsbz15KG4pO3JldHVybiBvP29bcl09aTooYT10LmluZGV4T2YobikpPj0wP2VbYV09aTooYT10Lmxlbmd0aCxlW2FdPWksdFthXT1uKSx0aGlzfSl9LGRlbGV0ZV9fXzp7dmFsdWU6eChmdW5jdGlvbihuKXt2YXIgaSxhLG89eShuKTtyZXR1cm4gbz9yIGluIG8mJmRlbGV0ZSBvW3JdOiEoKGk9dC5pbmRleE9mKG4pKTwwfHwoYT10Lmxlbmd0aC0xLHRbaV09dm9pZCAwLGVbaV09ZVthXSx0W2ldPXRbYV0sdC5sZW5ndGg9YSxlLmxlbmd0aD1hLDApKX0pfX0pfTtnLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKE9iamVjdC5wcm90b3R5cGUse2dldDp7dmFsdWU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5nZXRfX18odCxlKX0sd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfSxoYXM6e3ZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmhhc19fXyh0KX0sd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfSxzZXQ6e3ZhbHVlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuc2V0X19fKHQsZSl9LHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0sZGVsZXRlOnt2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kZWxldGVfX18odCl9LHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSwiZnVuY3Rpb24iPT10eXBlb2Ygcj9mdW5jdGlvbigpe2Z1bmN0aW9uIG4oKXt0aGlzIGluc3RhbmNlb2YgZ3x8YigpO3ZhciBlLG49bmV3IHIsaT12b2lkIDAsYT0hMTtyZXR1cm4gZT10P2Z1bmN0aW9uKHQsZSl7cmV0dXJuIG4uc2V0KHQsZSksbi5oYXModCl8fChpfHwoaT1uZXcgZyksaS5zZXQodCxlKSksdGhpc306ZnVuY3Rpb24odCxlKXtpZihhKXRyeXtuLnNldCh0LGUpfWNhdGNoKHIpe2l8fChpPW5ldyBnKSxpLnNldF9fXyh0LGUpfWVsc2Ugbi5zZXQodCxlKTtyZXR1cm4gdGhpc30sT2JqZWN0LmNyZWF0ZShnLnByb3RvdHlwZSx7Z2V0X19fOnt2YWx1ZTp4KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGk/bi5oYXModCk/bi5nZXQodCk6aS5nZXRfX18odCxlKTpuLmdldCh0LGUpfSl9LGhhc19fXzp7dmFsdWU6eChmdW5jdGlvbih0KXtyZXR1cm4gbi5oYXModCl8fCEhaSYmaS5oYXNfX18odCl9KX0sc2V0X19fOnt2YWx1ZTp4KGUpfSxkZWxldGVfX186e3ZhbHVlOngoZnVuY3Rpb24odCl7dmFyIGU9ISFuLmRlbGV0ZSh0KTtyZXR1cm4gaSYmaS5kZWxldGVfX18odCl8fGV9KX0scGVybWl0SG9zdE9iamVjdHNfX186e3ZhbHVlOngoZnVuY3Rpb24odCl7aWYodCE9PW0pdGhyb3cgbmV3IEVycm9yKCJib2d1cyBjYWxsIHRvIHBlcm1pdEhvc3RPYmplY3RzX19fIik7YT0hMH0pfX0pfXQmJiJ1bmRlZmluZWQiIT10eXBlb2YgUHJveHkmJihQcm94eT12b2lkIDApLG4ucHJvdG90eXBlPWcucHJvdG90eXBlLGUuZXhwb3J0cz1uLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShXZWFrTWFwLnByb3RvdHlwZSwiY29uc3RydWN0b3IiLHt2YWx1ZTpXZWFrTWFwLGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSl9KCk6KCJ1bmRlZmluZWQiIT10eXBlb2YgUHJveHkmJihQcm94eT12b2lkIDApLGUuZXhwb3J0cz1nKX1mdW5jdGlvbiBtKHQpe3QucGVybWl0SG9zdE9iamVjdHNfX18mJnQucGVybWl0SG9zdE9iamVjdHNfX18obSl9ZnVuY3Rpb24gdih0KXtyZXR1cm4hKHQuc3Vic3RyKDAsbC5sZW5ndGgpPT1sJiYiX19fIj09PXQuc3Vic3RyKHQubGVuZ3RoLTMpKX1mdW5jdGlvbiB5KHQpe2lmKHQhPT1PYmplY3QodCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiTm90IGFuIG9iamVjdDogIit0KTt2YXIgZT10W2NdO2lmKGUmJmUua2V5PT09dClyZXR1cm4gZTtpZihzKHQpKXtlPXtrZXk6dH07dHJ5e3JldHVybiBvKHQsYyx7dmFsdWU6ZSx3cml0YWJsZTohMSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMX0pLGV9Y2F0Y2godCl7cmV0dXJufX19ZnVuY3Rpb24geCh0KXtyZXR1cm4gdC5wcm90b3R5cGU9bnVsbCxPYmplY3QuZnJlZXplKHQpfWZ1bmN0aW9uIGIoKXtwfHwidW5kZWZpbmVkIj09dHlwZW9mIGNvbnNvbGV8fChwPSEwLGNvbnNvbGUud2FybigiV2Vha01hcCBzaG91bGQgYmUgaW52b2tlZCBhcyBuZXcgV2Vha01hcCgpLCBub3QgV2Vha01hcCgpLiBUaGlzIHdpbGwgYmUgYW4gZXJyb3IgaW4gdGhlIGZ1dHVyZS4iKSl9fSgpfSx7fV0sNTE4OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi9oaWRkZW4tc3RvcmUuanMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdD17fTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoKCJvYmplY3QiIT10eXBlb2YgZXx8bnVsbD09PWUpJiYiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoIldlYWttYXAtc2hpbTogS2V5IG11c3QgYmUgb2JqZWN0Iik7dmFyIHI9ZS52YWx1ZU9mKHQpO3JldHVybiByJiZyLmlkZW50aXR5PT09dD9yOm4oZSx0KX19fSx7Ii4vaGlkZGVuLXN0b3JlLmpzIjo1MTl9XSw1MTk6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj17aWRlbnRpdHk6ZX0sbj10LnZhbHVlT2Y7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJ2YWx1ZU9mIix7dmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHQhPT1lP24uYXBwbHkodGhpcyxhcmd1bWVudHMpOnJ9LHdyaXRhYmxlOiEwfSkscn19LHt9XSw1MjA6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCIuL2NyZWF0ZS1zdG9yZS5qcyIpO2UuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciB0PW4oKTtyZXR1cm57Z2V0OmZ1bmN0aW9uKGUscil7dmFyIG49dChlKTtyZXR1cm4gbi5oYXNPd25Qcm9wZXJ0eSgidmFsdWUiKT9uLnZhbHVlOnJ9LHNldDpmdW5jdGlvbihlLHIpe3JldHVybiB0KGUpLnZhbHVlPXIsdGhpc30saGFzOmZ1bmN0aW9uKGUpe3JldHVybiJ2YWx1ZSJpbiB0KGUpfSxkZWxldGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGRlbGV0ZSB0KGUpLnZhbHVlfX19fSx7Ii4vY3JlYXRlLXN0b3JlLmpzIjo1MTh9XSw1MjE6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCJnZXQtY2FudmFzLWNvbnRleHQiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG4oIndlYmdsIix0KX19LHsiZ2V0LWNhbnZhcy1jb250ZXh0IjoyMjF9XSw1MjI6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCIuLi9tYWluIiksaT10KCJvYmplY3QtYXNzaWduIiksYT1uLmluc3RhbmNlKCk7ZnVuY3Rpb24gbyh0KXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW3R8fCIiXXx8dGhpcy5yZWdpb25hbE9wdGlvbnNbIiJdfW8ucHJvdG90eXBlPW5ldyBuLmJhc2VDYWxlbmRhcixpKG8ucHJvdG90eXBlLHtuYW1lOiJDaGluZXNlIixqZEVwb2NoOjE3MjE0MjUuNSxoYXNZZWFyWmVybzohMSxtaW5Nb250aDowLGZpcnN0TW9udGg6MCxtaW5EYXk6MSxyZWdpb25hbE9wdGlvbnM6eyIiOntuYW1lOiJDaGluZXNlIixlcG9jaHM6WyJCRUMiLCJFQyJdLG1vbnRoTnVtYmVyczpmdW5jdGlvbih0LGUpe2lmKCJzdHJpbmciPT10eXBlb2YgdCl7dmFyIHI9dC5tYXRjaChsKTtyZXR1cm4gcj9yWzBdOiIifXZhciBuPXRoaXMuX3ZhbGlkYXRlWWVhcih0KSxpPXQubW9udGgoKSxhPSIiK3RoaXMudG9DaGluZXNlTW9udGgobixpKTtyZXR1cm4gZSYmYS5sZW5ndGg8MiYmKGE9IjAiK2EpLHRoaXMuaXNJbnRlcmNhbGFyeU1vbnRoKG4saSkmJihhKz0iaSIpLGF9LG1vbnRoTmFtZXM6ZnVuY3Rpb24odCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXt2YXIgZT10Lm1hdGNoKGMpO3JldHVybiBlP2VbMF06IiJ9dmFyIHI9dGhpcy5fdmFsaWRhdGVZZWFyKHQpLG49dC5tb250aCgpLGk9WyJcdTRlMDBcdTY3MDgiLCJcdTRlOGNcdTY3MDgiLCJcdTRlMDlcdTY3MDgiLCJcdTU2ZGJcdTY3MDgiLCJcdTRlOTRcdTY3MDgiLCJcdTUxNmRcdTY3MDgiLCJcdTRlMDNcdTY3MDgiLCJcdTUxNmJcdTY3MDgiLCJcdTRlNWRcdTY3MDgiLCJcdTUzNDFcdTY3MDgiLCJcdTUzNDFcdTRlMDBcdTY3MDgiLCJcdTUzNDFcdTRlOGNcdTY3MDgiXVt0aGlzLnRvQ2hpbmVzZU1vbnRoKHIsbiktMV07cmV0dXJuIHRoaXMuaXNJbnRlcmNhbGFyeU1vbnRoKHIsbikmJihpPSJcdTk1ZjAiK2kpLGl9LG1vbnRoTmFtZXNTaG9ydDpmdW5jdGlvbih0KXtpZigic3RyaW5nIj09dHlwZW9mIHQpe3ZhciBlPXQubWF0Y2godSk7cmV0dXJuIGU/ZVswXToiIn12YXIgcj10aGlzLl92YWxpZGF0ZVllYXIodCksbj10Lm1vbnRoKCksaT1bIlx1NGUwMCIsIlx1NGU4YyIsIlx1NGUwOSIsIlx1NTZkYiIsIlx1NGU5NCIsIlx1NTE2ZCIsIlx1NGUwMyIsIlx1NTE2YiIsIlx1NGU1ZCIsIlx1NTM0MSIsIlx1NTM0MVx1NGUwMCIsIlx1NTM0MVx1NGU4YyJdW3RoaXMudG9DaGluZXNlTW9udGgocixuKS0xXTtyZXR1cm4gdGhpcy5pc0ludGVyY2FsYXJ5TW9udGgocixuKSYmKGk9Ilx1OTVmMCIraSksaX0scGFyc2VNb250aDpmdW5jdGlvbih0LGUpe3Q9dGhpcy5fdmFsaWRhdGVZZWFyKHQpO3ZhciByLG49cGFyc2VJbnQoZSk7aWYoaXNOYU4obikpIlx1OTVmMCI9PT1lWzBdJiYocj0hMCxlPWUuc3Vic3RyaW5nKDEpKSwiXHU2NzA4Ij09PWVbZS5sZW5ndGgtMV0mJihlPWUuc3Vic3RyaW5nKDAsZS5sZW5ndGgtMSkpLG49MStbIlx1NGUwMCIsIlx1NGU4YyIsIlx1NGUwOSIsIlx1NTZkYiIsIlx1NGU5NCIsIlx1NTE2ZCIsIlx1NGUwMyIsIlx1NTE2YiIsIlx1NGU1ZCIsIlx1NTM0MSIsIlx1NTM0MVx1NGUwMCIsIlx1NTM0MVx1NGU4YyJdLmluZGV4T2YoZSk7ZWxzZXt2YXIgaT1lW2UubGVuZ3RoLTFdO3I9ImkiPT09aXx8IkkiPT09aX1yZXR1cm4gdGhpcy50b01vbnRoSW5kZXgodCxuLHIpfSxkYXlOYW1lczpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sZGF5TmFtZXNTaG9ydDpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLGRheU5hbWVzTWluOlsiU3UiLCJNbyIsIlR1IiwiV2UiLCJUaCIsIkZyIiwiU2EiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJ5eXl5L21tL2RkIixmaXJzdERheToxLGlzUlRMOiExfX0sX3ZhbGlkYXRlWWVhcjpmdW5jdGlvbih0LGUpe2lmKHQueWVhciYmKHQ9dC55ZWFyKCkpLCJudW1iZXIiIT10eXBlb2YgdHx8dDwxODg4fHx0PjIxMTEpdGhyb3cgZS5yZXBsYWNlKC9cezBcfS8sdGhpcy5sb2NhbC5uYW1lKTtyZXR1cm4gdH0sdG9Nb250aEluZGV4OmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLmludGVyY2FsYXJ5TW9udGgodCk7aWYociYmZSE9PWl8fGU8MXx8ZT4xMil0aHJvdyBuLmxvY2FsLmludmFsaWRNb250aC5yZXBsYWNlKC9cezBcfS8sdGhpcy5sb2NhbC5uYW1lKTtyZXR1cm4gaT8hciYmZTw9aT9lLTE6ZTplLTF9LHRvQ2hpbmVzZU1vbnRoOmZ1bmN0aW9uKHQsZSl7dC55ZWFyJiYoZT0odD10LnllYXIoKSkubW9udGgoKSk7dmFyIHI9dGhpcy5pbnRlcmNhbGFyeU1vbnRoKHQpO2lmKGU8MHx8ZT4ocj8xMjoxMSkpdGhyb3cgbi5sb2NhbC5pbnZhbGlkTW9udGgucmVwbGFjZSgvXHswXH0vLHRoaXMubG9jYWwubmFtZSk7cmV0dXJuIHI/ZTxyP2UrMTplOmUrMX0saW50ZXJjYWxhcnlNb250aDpmdW5jdGlvbih0KXtyZXR1cm4gdD10aGlzLl92YWxpZGF0ZVllYXIodCksaFt0LWhbMF1dPj4xM30saXNJbnRlcmNhbGFyeU1vbnRoOmZ1bmN0aW9uKHQsZSl7dC55ZWFyJiYoZT0odD10LnllYXIoKSkubW9udGgoKSk7dmFyIHI9dGhpcy5pbnRlcmNhbGFyeU1vbnRoKHQpO3JldHVybiEhciYmcj09PWV9LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiAwIT09dGhpcy5pbnRlcmNhbGFyeU1vbnRoKHQpfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaSxvPXRoaXMuX3ZhbGlkYXRlWWVhcih0LG4ubG9jYWwuaW52YWxpZHllYXIpLHM9ZltvLWZbMF1dLGw9cz4+OSY0MDk1LGM9cz4+NSYxNSx1PTMxJnM7KGk9YS5uZXdEYXRlKGwsYyx1KSkuYWRkKDQtKGkuZGF5T2ZXZWVrKCl8fDcpLCJkIik7dmFyIGg9dGhpcy50b0pEKHQsZSxyKS1pLnRvSkQoKTtyZXR1cm4gMStNYXRoLmZsb29yKGgvNyl9LG1vbnRoc0luWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZWFwWWVhcih0KT8xMzoxMn0sZGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXt0LnllYXImJihlPXQubW9udGgoKSx0PXQueWVhcigpKSx0PXRoaXMuX3ZhbGlkYXRlWWVhcih0KTt2YXIgcj1oW3QtaFswXV07aWYoZT4ocj4+MTM/MTI6MTEpKXRocm93IG4ubG9jYWwuaW52YWxpZE1vbnRoLnJlcGxhY2UoL1x7MFx9Lyx0aGlzLmxvY2FsLm5hbWUpO3JldHVybiByJjE8PDEyLWU/MzA6Mjl9LHdlZWtEYXk6ZnVuY3Rpb24odCxlLHIpe3JldHVybih0aGlzLmRheU9mV2Vlayh0LGUscil8fDcpPDZ9LHRvSkQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQscyxyLG4ubG9jYWwuaW52YWxpZERhdGUpO3Q9dGhpcy5fdmFsaWRhdGVZZWFyKGkueWVhcigpKSxlPWkubW9udGgoKSxyPWkuZGF5KCk7dmFyIG89dGhpcy5pc0ludGVyY2FsYXJ5TW9udGgodCxlKSxzPXRoaXMudG9DaGluZXNlTW9udGgodCxlKSxsPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGEsbyxzO2lmKCJvYmplY3QiPT10eXBlb2YgdClvPXQsYT1lfHx7fTtlbHNle3ZhciBsPSJudW1iZXIiPT10eXBlb2YgdCYmdD49MTg4OCYmdDw9MjExMTtpZighbCl0aHJvdyBuZXcgRXJyb3IoIkx1bmFyIHllYXIgb3V0c2lkZSByYW5nZSAxODg4LTIxMTEiKTt2YXIgYz0ibnVtYmVyIj09dHlwZW9mIGUmJmU+PTEmJmU8PTEyO2lmKCFjKXRocm93IG5ldyBFcnJvcigiTHVuYXIgbW9udGggb3V0c2lkZSByYW5nZSAxIC0gMTIiKTt2YXIgdSxwPSJudW1iZXIiPT10eXBlb2YgciYmcj49MSYmcjw9MzA7aWYoIXApdGhyb3cgbmV3IEVycm9yKCJMdW5hciBkYXkgb3V0c2lkZSByYW5nZSAxIC0gMzAiKTsib2JqZWN0Ij09dHlwZW9mIG4/KHU9ITEsYT1uKToodT0hIW4sYT1pfHx7fSksbz17eWVhcjp0LG1vbnRoOmUsZGF5OnIsaXNJbnRlcmNhbGFyeTp1fX1zPW8uZGF5LTE7dmFyIGQsZz1oW28ueWVhci1oWzBdXSxtPWc+PjEzO2Q9bT9vLm1vbnRoPm0/by5tb250aDpvLmlzSW50ZXJjYWxhcnk/by5tb250aDpvLm1vbnRoLTE6by5tb250aC0xO2Zvcih2YXIgdj0wO3Y8ZDt2Kyspe3ZhciB5PWcmMTw8MTItdj8zMDoyOTtzKz15fXZhciB4PWZbby55ZWFyLWZbMF1dLGI9bmV3IERhdGUoeD4+OSY0MDk1LCh4Pj41JjE1KS0xLCgzMSZ4KStzKTtyZXR1cm4gYS55ZWFyPWIuZ2V0RnVsbFllYXIoKSxhLm1vbnRoPTErYi5nZXRNb250aCgpLGEuZGF5PWIuZ2V0RGF0ZSgpLGF9KHQscyxyLG8pO3JldHVybiBhLnRvSkQobC55ZWFyLGwubW9udGgsbC5kYXkpfSxmcm9tSkQ6ZnVuY3Rpb24odCl7dmFyIGU9YS5mcm9tSkQodCkscj1mdW5jdGlvbih0LGUscixuKXt2YXIgaSxhO2lmKCJvYmplY3QiPT10eXBlb2YgdClpPXQsYT1lfHx7fTtlbHNle3ZhciBvPSJudW1iZXIiPT10eXBlb2YgdCYmdD49MTg4OCYmdDw9MjExMTtpZighbyl0aHJvdyBuZXcgRXJyb3IoIlNvbGFyIHllYXIgb3V0c2lkZSByYW5nZSAxODg4LTIxMTEiKTt2YXIgcz0ibnVtYmVyIj09dHlwZW9mIGUmJmU+PTEmJmU8PTEyO2lmKCFzKXRocm93IG5ldyBFcnJvcigiU29sYXIgbW9udGggb3V0c2lkZSByYW5nZSAxIC0gMTIiKTt2YXIgbD0ibnVtYmVyIj09dHlwZW9mIHImJnI+PTEmJnI8PTMxO2lmKCFsKXRocm93IG5ldyBFcnJvcigiU29sYXIgZGF5IG91dHNpZGUgcmFuZ2UgMSAtIDMxIik7aT17eWVhcjp0LG1vbnRoOmUsZGF5OnJ9LGE9bnx8e319dmFyIGM9ZltpLnllYXItZlswXV0sdT1pLnllYXI8PDl8aS5tb250aDw8NXxpLmRheTthLnllYXI9dT49Yz9pLnllYXI6aS55ZWFyLTEsYz1mW2EueWVhci1mWzBdXTt2YXIgcCxkPW5ldyBEYXRlKGM+PjkmNDA5NSwoYz4+NSYxNSktMSwzMSZjKSxnPW5ldyBEYXRlKGkueWVhcixpLm1vbnRoLTEsaS5kYXkpO3A9TWF0aC5yb3VuZCgoZy1kKS84NjRlNSk7dmFyIG0sdj1oW2EueWVhci1oWzBdXTtmb3IobT0wO208MTM7bSsrKXt2YXIgeT12JjE8PDEyLW0/MzA6Mjk7aWYocDx5KWJyZWFrO3AtPXl9dmFyIHg9dj4+MTM7IXh8fG08eD8oYS5pc0ludGVyY2FsYXJ5PSExLGEubW9udGg9MSttKTptPT09eD8oYS5pc0ludGVyY2FsYXJ5PSEwLGEubW9udGg9bSk6KGEuaXNJbnRlcmNhbGFyeT0hMSxhLm1vbnRoPW0pO3JldHVybiBhLmRheT0xK3AsYX0oZS55ZWFyKCksZS5tb250aCgpLGUuZGF5KCkpLG49dGhpcy50b01vbnRoSW5kZXgoci55ZWFyLHIubW9udGgsci5pc0ludGVyY2FsYXJ5KTtyZXR1cm4gdGhpcy5uZXdEYXRlKHIueWVhcixuLHIuZGF5KX0sZnJvbVN0cmluZzpmdW5jdGlvbih0KXt2YXIgZT10Lm1hdGNoKHMpLHI9dGhpcy5fdmFsaWRhdGVZZWFyKCtlWzFdKSxuPStlWzJdLGk9ISFlWzNdLGE9dGhpcy50b01vbnRoSW5kZXgocixuLGkpLG89K2VbNF07cmV0dXJuIHRoaXMubmV3RGF0ZShyLGEsbyl9LGFkZDpmdW5jdGlvbih0LGUscil7dmFyIG49dC55ZWFyKCksaT10Lm1vbnRoKCksYT10aGlzLmlzSW50ZXJjYWxhcnlNb250aChuLGkpLHM9dGhpcy50b0NoaW5lc2VNb250aChuLGkpLGw9T2JqZWN0LmdldFByb3RvdHlwZU9mKG8ucHJvdG90eXBlKS5hZGQuY2FsbCh0aGlzLHQsZSxyKTtpZigieSI9PT1yKXt2YXIgYz1sLnllYXIoKSx1PWwubW9udGgoKSxoPXRoaXMuaXNJbnRlcmNhbGFyeU1vbnRoKGMscyksZj1hJiZoP3RoaXMudG9Nb250aEluZGV4KGMscywhMCk6dGhpcy50b01vbnRoSW5kZXgoYyxzLCExKTtmIT09dSYmbC5tb250aChmKX1yZXR1cm4gbH19KTt2YXIgcz0vXlxzKigtP1xkXGRcZFxkfFxkXGQpWy0vXShcZD9cZCkoW2lJXT8pWy0vXShcZD9cZCkvbSxsPS9eXGQ/XGRbaUldPy9tLGM9L15cdTk1ZjA/XHU1MzQxP1tcdTRlMDBcdTRlOGNcdTRlMDlcdTU2ZGJcdTRlOTRcdTUxNmRcdTRlMDNcdTUxNmJcdTRlNWRdP1x1NjcwOC9tLHU9L15cdTk1ZjA/XHU1MzQxP1tcdTRlMDBcdTRlOGNcdTRlMDlcdTU2ZGJcdTRlOTRcdTUxNmRcdTRlMDNcdTUxNmJcdTRlNWRdPy9tO24uY2FsZW5kYXJzLmNoaW5lc2U9bzt2YXIgaD1bMTg4Nyw1NzgwLDU4MDIsMTkxNTcsMjc0Miw1MDM1OSwxMTk4LDI2NDYsNDYzNzgsNzQ2NiwzNDEyLDMwMTIyLDU0ODIsNjc5NDksMjM5Niw1Mjk0LDQzNTk3LDY3MzIsNjk1NCwzNjE4MSwyNzcyLDQ5NTQsMTg3ODEsMjM5Niw1NDQyNyw1Mjc0LDY3MzAsNDc3ODEsNTgwMCw2ODY4LDIxMjEwLDQ3OTAsNTk3MDMsMjM1MCw1MjcwLDQ2NjY3LDM0MDIsMzQ5NiwzODMyNSwxMzg4LDQ3ODIsMTg3MzUsMjM1MCw1MjM3NCw2ODA0LDc0OTgsNDQ0NTcsMjkwNiwxMzg4LDI5Mjk0LDQ3MDAsNjM3ODksNjQ0Miw2ODA0LDU2MTM4LDU4MDIsMjc3MiwzODIzNSwxMjEwLDQ2OTgsMjI4MjcsNTQxOCw2MzEyNSwzNDc2LDU4MDIsNDM3MDEsMjQ4NCw1MzAyLDI3MjIzLDI2NDYsNzA5NTQsNzQ2NiwzNDEyLDU0Njk4LDU0ODIsMjQxMiwzODA2Miw1Mjk0LDI2MzYsMzIwMzgsNjk1NCw2MDI0NSwyNzcyLDQ4MjYsNDMzNTcsMjM5NCw1Mjc0LDM5NTAxLDY3MzAsNzIzNTcsNTgwMCw1ODQ0LDUzOTc4LDQ3OTAsMjM1OCwzODAzOSw1MjcwLDg3NjI3LDM0MDIsMzQ5Niw1NDcwOCw1NDg0LDQ3ODIsNDMzMTEsMjM1MCwzMjIyLDI3OTc4LDc0OTgsNjg5NjUsMjkwNCw1NDg0LDQ1Njc3LDQ3MDAsNjQ0NCwzOTU3Myw2ODA0LDY5ODYsMTkyODUsMjc3Miw2MjgxMSwxMjEwLDQ2OTgsNDc0MDMsNTQxOCw1NzgwLDM4NTcwLDU1NDYsNzY0NjksMjQyMCw1MzAyLDUxNzk5LDI2NDYsNTQxNCwzNjUwMSwzNDEyLDU1NDYsMTg4NjksMjQxMiw1NDQ0Niw1Mjc2LDY3MzIsNDg0MjIsNjgyMiwyOTAwLDI4MDEwLDQ4MjYsOTI1MDksMjM5NCw1Mjc0LDU1ODgzLDY3MzAsNjgyMCw0Nzk1Niw1ODEyLDI3NzgsMTg3NzksMjM1OCw2MjYxNSw1MjcwLDU0NTAsNDY3NTcsMzQ5Miw1NTU2LDI3MzE4LDQ3MTgsNjc4ODcsMjM1MCwzMjIyLDUyNTU0LDc0OTgsMzQyOCwzODI1Miw1NDY4LDQ3MDAsMzEwMjIsNjQ0NCw2NDE0OSw2ODA0LDY5ODYsNDM4NjEsMjc3Miw1MzM4LDM1NDIxLDI2NTAsNzA5NTUsNTQxOCw1NzgwLDU0OTU0LDU1NDYsMjc0MCwzODA3NCw1MzAyLDI2NDYsMjk5OTEsMzM2Niw2MTAxMSwzNDEyLDU1NDYsNDM0NDUsMjQxMiw1Mjk0LDM1NDA2LDY3MzIsNzI5OTgsNjgyMCw2OTk2LDUyNTg2LDI3NzgsMjM5NiwzODA0NSw1Mjc0LDY2OTgsMjMzMzMsNjgyMCw2NDMzOCw1ODEyLDI3NDYsNDMzNTUsMjM1OCw1MjcwLDM5NDk5LDU0NTAsNzk1MjUsMzQ5Miw1NTQ4XSxmPVsxODg3LDk2NjczMiw5NjcyMzEsOTY3NzMzLDk2ODI2NSw5Njg3NjYsOTY5Mjk3LDk2OTc5OCw5NzAyOTgsOTcwODI5LDk3MTMzMCw5NzE4MzAsOTcyMzYyLDk3Mjg2Myw5NzMzOTUsOTczODk2LDk3NDM5Nyw5NzQ5MjgsOTc1NDI4LDk3NTkyOSw5NzY0NjEsOTc2OTYyLDk3NzQ2Miw5Nzc5OTQsOTc4NDk0LDk3OTAyNiw5Nzk1MjYsOTgwMDI2LDk4MDU1OCw5ODEwNTksOTgxNTU5LDk4MjA5MSw5ODI1OTMsOTgzMTI0LDk4MzYyNCw5ODQxMjQsOTg0NjU2LDk4NTE1Nyw5ODU2NTYsOTg2MTg5LDk4NjY5MCw5ODcxOTEsOTg3NzIyLDk4ODIyMiw5ODg3NTMsOTg5MjU0LDk4OTc1NCw5OTAyODYsOTkwNzg4LDk5MTI4OCw5OTE4MTksOTkyMzE5LDk5Mjg1MSw5OTMzNTIsOTkzODUxLDk5NDM4Myw5OTQ4ODUsOTk1Mzg1LDk5NTkxNyw5OTY0MTgsOTk2OTE4LDk5NzQ1MCw5OTc5NDksOTk4NDgxLDk5ODk4Miw5OTk0ODMsMTAwMDAxNCwxMDAwNTE1LDEwMDEwMTYsMTAwMTU0OCwxMDAyMDQ3LDEwMDI1NzgsMTAwMzA4MCwxMDAzNTgwLDEwMDQxMTEsMTAwNDYxMywxMDA1MTEzLDEwMDU2NDUsMTAwNjE0NiwxMDA2NjQ1LDEwMDcxNzcsMTAwNzY3OCwxMDA4MjA5LDEwMDg3MTAsMTAwOTIxMSwxMDA5NzQzLDEwMTAyNDMsMTAxMDc0MywxMDExMjc1LDEwMTE3NzUsMTAxMjMwNiwxMDEyODA3LDEwMTMzMDgsMTAxMzg0MCwxMDE0MzQxLDEwMTQ4NDEsMTAxNTM3MywxMDE1ODc0LDEwMTY0MDQsMTAxNjkwNSwxMDE3NDA1LDEwMTc5MzcsMTAxODQzOCwxMDE4OTM5LDEwMTk0NzEsMTAxOTk3MiwxMDIwNDcxLDEwMjEwMDIsMTAyMTUwMywxMDIyMDM1LDEwMjI1MzUsMTAyMzAzNiwxMDIzNTY4LDEwMjQwNjksMTAyNDU2OCwxMDI1MTAwLDEwMjU2MDEsMTAyNjEwMiwxMDI2NjMzLDEwMjcxMzMsMTAyNzY2NiwxMDI4MTY3LDEwMjg2NjYsMTAyOTE5OCwxMDI5Njk5LDEwMzAxOTksMTAzMDczMCwxMDMxMjMxLDEwMzE3NjMsMTAzMjI2NCwxMDMyNzY0LDEwMzMyOTYsMTAzMzc5NywxMDM0Mjk3LDEwMzQ4MjgsMTAzNTMyOSwxMDM1ODMwLDEwMzYzNjIsMTAzNjg2MSwxMDM3MzkzLDEwMzc4OTQsMTAzODM5NCwxMDM4OTI1LDEwMzk0MjcsMTAzOTkyNywxMDQwNDU5LDEwNDA5NTksMTA0MTQ5MSwxMDQxOTkyLDEwNDI0OTIsMTA0MzAyMywxMDQzNTI0LDEwNDQwMjQsMTA0NDU1NiwxMDQ1MDU3LDEwNDU1NTgsMTA0NjA5MCwxMDQ2NTkwLDEwNDcxMjEsMTA0NzYyMiwxMDQ4MTIyLDEwNDg2NTQsMTA0OTE1NCwxMDQ5NjU1LDEwNTAxODcsMTA1MDY4OSwxMDUxMjE5LDEwNTE3MjAsMTA1MjIyMCwxMDUyNzUxLDEwNTMyNTIsMTA1Mzc1MiwxMDU0Mjg0LDEwNTQ3ODYsMTA1NTI4NSwxMDU1ODE3LDEwNTYzMTcsMTA1Njg0OSwxMDU3MzQ5LDEwNTc4NTAsMTA1ODM4MiwxMDU4ODgzLDEwNTkzODMsMTA1OTkxNSwxMDYwNDE1LDEwNjA5NDcsMTA2MTQ0NywxMDYxOTQ3LDEwNjI0NzksMTA2Mjk4MSwxMDYzNDgwLDEwNjQwMTIsMTA2NDUxNCwxMDY1MDE0LDEwNjU1NDUsMTA2NjA0NSwxMDY2NTc3LDEwNjcwNzgsMTA2NzU3OCwxMDY4MTEwLDEwNjg2MTEsMTA2OTExMiwxMDY5NjQyLDEwNzAxNDIsMTA3MDY3NCwxMDcxMTc1LDEwNzE2NzUsMTA3MjIwNywxMDcyNzA5LDEwNzMyMDksMTA3Mzc0MCwxMDc0MjQxLDEwNzQ3NDEsMTA3NTI3MywxMDc1NzczLDEwNzYzMDUsMTA3NjgwNywxMDc3MzA4LDEwNzc4MzksMTA3ODM0MCwxMDc4ODQwLDEwNzkzNzIsMTA3OTg3MSwxMDgwNDAzLDEwODA5MDRdfSx7Ii4uL21haW4iOjUzNiwib2JqZWN0LWFzc2lnbiI6NDIxfV0sNTIzOltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi4vbWFpbiIpLGk9dCgib2JqZWN0LWFzc2lnbiIpO2Z1bmN0aW9uIGEodCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHwiIl18fHRoaXMucmVnaW9uYWxPcHRpb25zWyIiXX1hLnByb3RvdHlwZT1uZXcgbi5iYXNlQ2FsZW5kYXIsaShhLnByb3RvdHlwZSx7bmFtZToiQ29wdGljIixqZEVwb2NoOjE4MjUwMjkuNSxkYXlzUGVyTW9udGg6WzMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDVdLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDoxLG1pbkRheToxLHJlZ2lvbmFsT3B0aW9uczp7IiI6e25hbWU6IkNvcHRpYyIsZXBvY2hzOlsiQkFNIiwiQU0iXSxtb250aE5hbWVzOlsiVGhvdXQiLCJQYW9waSIsIkhhdGhvciIsIktvaWFrIiwiVG9iaSIsIk1lc2hpciIsIlBhcmVtaGF0IiwiUGFyZW1vdWRlIiwiUGFzaG9ucyIsIlBhb25pIiwiRXBpcCIsIk1lc29yaSIsIlBpIEtvZ2kgRW5hdm90Il0sbW9udGhOYW1lc1Nob3J0OlsiVGhvIiwiUGFvIiwiSGF0aCIsIktvaSIsIlRvYiIsIk1lc2giLCJQYXQiLCJQYWQiLCJQYXNoIiwiUGFvIiwiRXBpIiwiTWVzbyIsIlBpSyJdLGRheU5hbWVzOlsiVGt5cmlha2EiLCJQZXNuYXUiLCJQc2hvbWVudCIsIlBlZnRvb3UiLCJQdGlvdSIsIlBzb291IiwiUHNhYmJhdG9uIl0sZGF5TmFtZXNTaG9ydDpbIlRreSIsIlBlcyIsIlBzaCIsIlBlZiIsIlB0aSIsIlBzbyIsIlBzYSJdLGRheU5hbWVzTWluOlsiVGsiLCJQZXMiLCJQc2giLCJQZWYiLCJQdCIsIlBzbyIsIlBzYSJdLGRpZ2l0czpudWxsLGRhdGVGb3JtYXQ6ImRkL21tL3l5eXkiLGZpcnN0RGF5OjAsaXNSVEw6ITF9fSxsZWFwWWVhcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhcik7cmV0dXJuKHQ9ZS55ZWFyKCkrKGUueWVhcigpPDA/MTowKSklND09M3x8dCU0PT0tMX0sbW9udGhzSW5ZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhcnx8bi5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWRZZWFyKSwxM30sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gbi5hZGQoLW4uZGF5T2ZXZWVrKCksImQiKSxNYXRoLmZsb29yKChuLmRheU9mWWVhcigpLTEpLzcpKzF9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZE1vbnRoKTtyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbci5tb250aCgpLTFdKygxMz09PXIubW9udGgoKSYmdGhpcy5sZWFwWWVhcihyLnllYXIoKSk/MTowKX0sd2Vla0RheTpmdW5jdGlvbih0LGUscil7cmV0dXJuKHRoaXMuZGF5T2ZXZWVrKHQsZSxyKXx8Nyk8Nn0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSk7cmV0dXJuKHQ9aS55ZWFyKCkpPDAmJnQrKyxpLmRheSgpKzMwKihpLm1vbnRoKCktMSkrMzY1Kih0LTEpK01hdGguZmxvb3IodC80KSt0aGlzLmpkRXBvY2gtMX0sZnJvbUpEOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguZmxvb3IodCkrLjUtdGhpcy5qZEVwb2NoLHI9TWF0aC5mbG9vcigoZS1NYXRoLmZsb29yKChlKzM2NikvMTQ2MSkpLzM2NSkrMTtyPD0wJiZyLS0sZT1NYXRoLmZsb29yKHQpKy41LXRoaXMubmV3RGF0ZShyLDEsMSkudG9KRCgpO3ZhciBuPU1hdGguZmxvb3IoZS8zMCkrMSxpPWUtMzAqKG4tMSkrMTtyZXR1cm4gdGhpcy5uZXdEYXRlKHIsbixpKX19KSxuLmNhbGVuZGFycy5jb3B0aWM9YX0seyIuLi9tYWluIjo1MzYsIm9iamVjdC1hc3NpZ24iOjQyMX1dLDUyNDpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4uL21haW4iKSxpPXQoIm9iamVjdC1hc3NpZ24iKTtmdW5jdGlvbiBhKHQpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbdHx8IiJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl19YS5wcm90b3R5cGU9bmV3IG4uYmFzZUNhbGVuZGFyLGkoYS5wcm90b3R5cGUse25hbWU6IkRpc2N3b3JsZCIsamRFcG9jaDoxNzIxNDI1LjUsZGF5c1Blck1vbnRoOlsxNiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMl0saGFzWWVhclplcm86ITEsbWluTW9udGg6MSxmaXJzdE1vbnRoOjEsbWluRGF5OjEscmVnaW9uYWxPcHRpb25zOnsiIjp7bmFtZToiRGlzY3dvcmxkIixlcG9jaHM6WyJCVUMiLCJVQyJdLG1vbnRoTmFtZXM6WyJJY2siLCJPZmZsZSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJHcnVuZSIsIkF1Z3VzdCIsIlNwdW5lIiwiU2VrdG9iZXIiLCJFbWJlciIsIkRlY2VtYmVyIl0sbW9udGhOYW1lc1Nob3J0OlsiSWNrIiwiT2ZmIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiR3J1IiwiQXVnIiwiU3B1IiwiU2VrIiwiRW1iIiwiRGVjIl0sZGF5TmFtZXM6WyJTdW5kYXkiLCJPY3RlZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxkYXlOYW1lc1Nob3J0OlsiU3VuIiwiT2N0IiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sZGF5TmFtZXNNaW46WyJTdSIsIk9jIiwiTW8iLCJUdSIsIldlIiwiVGgiLCJGciIsIlNhIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDoieXl5eS9tbS9kZCIsZmlyc3REYXk6Mixpc1JUTDohMX19LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhciksITF9LG1vbnRoc0luWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpLDEzfSxkYXlzSW5ZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhciksNDAwfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLm5ld0RhdGUodCxlLHIpO3JldHVybiBuLmFkZCgtbi5kYXlPZldlZWsoKSwiZCIpLE1hdGguZmxvb3IoKG4uZGF5T2ZZZWFyKCktMSkvOCkrMX0sZGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkTW9udGgpO3JldHVybiB0aGlzLmRheXNQZXJNb250aFtyLm1vbnRoKCktMV19LGRheXNJbldlZWs6ZnVuY3Rpb24oKXtyZXR1cm4gOH0sZGF5T2ZXZWVrOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4odGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSkuZGF5KCkrMSklOH0sd2Vla0RheTpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5kYXlPZldlZWsodCxlLHIpO3JldHVybiBuPj0yJiZuPD02fSxleHRyYUluZm86ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZERhdGUpO3JldHVybntjZW50dXJ5Om9bTWF0aC5mbG9vcigoaS55ZWFyKCktMSkvMTAwKSsxXXx8IiJ9fSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKTtyZXR1cm4gdD1pLnllYXIoKSsoaS55ZWFyKCk8MD8xOjApLGU9aS5tb250aCgpLChyPWkuZGF5KCkpKyhlPjE/MTY6MCkrKGU+Mj8zMiooZS0yKTowKSs0MDAqKHQtMSkrdGhpcy5qZEVwb2NoLTF9LGZyb21KRDpmdW5jdGlvbih0KXt0PU1hdGguZmxvb3IodCsuNSktTWF0aC5mbG9vcih0aGlzLmpkRXBvY2gpLTE7dmFyIGU9TWF0aC5mbG9vcih0LzQwMCkrMTt0LT00MDAqKGUtMSksdCs9dD4xNT8xNjowO3ZhciByPU1hdGguZmxvb3IodC8zMikrMSxuPXQtMzIqKHItMSkrMTtyZXR1cm4gdGhpcy5uZXdEYXRlKGU8PTA/ZS0xOmUscixuKX19KTt2YXIgbz17MjA6IkZydWl0YmF0IiwyMToiQW5jaG92eSJ9O24uY2FsZW5kYXJzLmRpc2N3b3JsZD1hfSx7Ii4uL21haW4iOjUzNiwib2JqZWN0LWFzc2lnbiI6NDIxfV0sNTI1OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi4vbWFpbiIpLGk9dCgib2JqZWN0LWFzc2lnbiIpO2Z1bmN0aW9uIGEodCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHwiIl18fHRoaXMucmVnaW9uYWxPcHRpb25zWyIiXX1hLnByb3RvdHlwZT1uZXcgbi5iYXNlQ2FsZW5kYXIsaShhLnByb3RvdHlwZSx7bmFtZToiRXRoaW9waWFuIixqZEVwb2NoOjE3MjQyMjAuNSxkYXlzUGVyTW9udGg6WzMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDVdLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDoxLG1pbkRheToxLHJlZ2lvbmFsT3B0aW9uczp7IiI6e25hbWU6IkV0aGlvcGlhbiIsZXBvY2hzOlsiQkVFIiwiRUUiXSxtb250aE5hbWVzOlsiTWVza2VyZW0iLCJUaWtlbWV0IiwiSGlkYXIiLCJUYWhlc2FzIiwiVGlyIiwiWWVrYXRpdCIsIk1lZ2FiaXQiLCJNaWF6aWEiLCJHZW5ib3QiLCJTZW5lIiwiSGFtbGUiLCJOZWhhc2UiLCJQYWd1bWUiXSxtb250aE5hbWVzU2hvcnQ6WyJNZXMiLCJUaWsiLCJIaWQiLCJUYWgiLCJUaXIiLCJZZWsiLCJNZWciLCJNaWEiLCJHZW4iLCJTZW4iLCJIYW0iLCJOZWgiLCJQYWciXSxkYXlOYW1lczpbIkVodWQiLCJTZWdubyIsIk1ha3NlZ25vIiwiSXJvYiIsIkhhbXVzIiwiQXJiIiwiS2lkYW1lIl0sZGF5TmFtZXNTaG9ydDpbIkVodSIsIlNlZyIsIk1hayIsIklybyIsIkhhbSIsIkFyYiIsIktpZCJdLGRheU5hbWVzTWluOlsiRWgiLCJTZSIsIk1hIiwiSXIiLCJIYSIsIkFyIiwiS2kiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJkZC9tbS95eXl5IixmaXJzdERheTowLGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpO3JldHVybih0PWUueWVhcigpKyhlLnllYXIoKTwwPzE6MCkpJTQ9PTN8fHQlND09LTF9LG1vbnRoc0luWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXJ8fG4ucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkWWVhciksMTN9LHdlZWtPZlllYXI6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMubmV3RGF0ZSh0LGUscik7cmV0dXJuIG4uYWRkKC1uLmRheU9mV2VlaygpLCJkIiksTWF0aC5mbG9vcigobi5kYXlPZlllYXIoKS0xKS83KSsxfSxkYXlzSW5Nb250aDpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX3ZhbGlkYXRlKHQsZSx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRNb250aCk7cmV0dXJuIHRoaXMuZGF5c1Blck1vbnRoW3IubW9udGgoKS0xXSsoMTM9PT1yLm1vbnRoKCkmJnRoaXMubGVhcFllYXIoci55ZWFyKCkpPzE6MCl9LHdlZWtEYXk6ZnVuY3Rpb24odCxlLHIpe3JldHVybih0aGlzLmRheU9mV2Vlayh0LGUscil8fDcpPDZ9LHRvSkQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZERhdGUpO3JldHVybih0PWkueWVhcigpKTwwJiZ0KyssaS5kYXkoKSszMCooaS5tb250aCgpLTEpKzM2NSoodC0xKStNYXRoLmZsb29yKHQvNCkrdGhpcy5qZEVwb2NoLTF9LGZyb21KRDpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLmZsb29yKHQpKy41LXRoaXMuamRFcG9jaCxyPU1hdGguZmxvb3IoKGUtTWF0aC5mbG9vcigoZSszNjYpLzE0NjEpKS8zNjUpKzE7cjw9MCYmci0tLGU9TWF0aC5mbG9vcih0KSsuNS10aGlzLm5ld0RhdGUociwxLDEpLnRvSkQoKTt2YXIgbj1NYXRoLmZsb29yKGUvMzApKzEsaT1lLTMwKihuLTEpKzE7cmV0dXJuIHRoaXMubmV3RGF0ZShyLG4saSl9fSksbi5jYWxlbmRhcnMuZXRoaW9waWFuPWF9LHsiLi4vbWFpbiI6NTM2LCJvYmplY3QtYXNzaWduIjo0MjF9XSw1MjY6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCIuLi9tYWluIiksaT10KCJvYmplY3QtYXNzaWduIik7ZnVuY3Rpb24gYSh0KXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW3R8fCIiXXx8dGhpcy5yZWdpb25hbE9wdGlvbnNbIiJdfWZ1bmN0aW9uIG8odCxlKXtyZXR1cm4gdC1lKk1hdGguZmxvb3IodC9lKX1hLnByb3RvdHlwZT1uZXcgbi5iYXNlQ2FsZW5kYXIsaShhLnByb3RvdHlwZSx7bmFtZToiSGVicmV3IixqZEVwb2NoOjM0Nzk5NS41LGRheXNQZXJNb250aDpbMzAsMjksMzAsMjksMzAsMjksMzAsMjksMzAsMjksMzAsMjksMjldLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDo3LG1pbkRheToxLHJlZ2lvbmFsT3B0aW9uczp7IiI6e25hbWU6IkhlYnJldyIsZXBvY2hzOlsiQkFNIiwiQU0iXSxtb250aE5hbWVzOlsiTmlzYW4iLCJJeWFyIiwiU2l2YW4iLCJUYW1tdXoiLCJBdiIsIkVsdWwiLCJUaXNocmVpIiwiQ2hlc2h2YW4iLCJLaXNsZXYiLCJUZXZldCIsIlNoZXZhdCIsIkFkYXIiLCJBZGFyIElJIl0sbW9udGhOYW1lc1Nob3J0OlsiTmlzIiwiSXlhIiwiU2l2IiwiVGFtIiwiQXYiLCJFbHUiLCJUaXMiLCJDaGUiLCJLaXMiLCJUZXYiLCJTaGUiLCJBZGEiLCJBZDIiXSxkYXlOYW1lczpbIllvbSBSaXNob24iLCJZb20gU2hlbmkiLCJZb20gU2hsaXNoaSIsIllvbSBSZXZpJ2kiLCJZb20gQ2hhbWlzaGkiLCJZb20gU2hpc2hpIiwiWW9tIFNoYWJiYXQiXSxkYXlOYW1lc1Nob3J0OlsiUmlzIiwiU2hlIiwiU2hsIiwiUmV2IiwiQ2hhIiwiU2hpIiwiU2hhIl0sZGF5TmFtZXNNaW46WyJSaSIsIlNoZSIsIlNobCIsIlJlIiwiQ2giLCJTaGkiLCJTaGEiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJkZC9tbS95eXl5IixmaXJzdERheTowLGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpO3JldHVybiB0aGlzLl9sZWFwWWVhcihlLnllYXIoKSl9LF9sZWFwWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gbyg3Kih0PXQ8MD90KzE6dCkrMSwxOSk8N30sbW9udGhzSW5ZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhciksdGhpcy5fbGVhcFllYXIodC55ZWFyP3QueWVhcigpOnQpPzEzOjEyfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLm5ld0RhdGUodCxlLHIpO3JldHVybiBuLmFkZCgtbi5kYXlPZldlZWsoKSwiZCIpLE1hdGguZmxvb3IoKG4uZGF5T2ZZZWFyKCktMSkvNykrMX0sZGF5c0luWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdD10aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhcikueWVhcigpLHRoaXMudG9KRCgtMT09PXQ/MTp0KzEsNywxKS10aGlzLnRvSkQodCw3LDEpfSxkYXlzSW5Nb250aDpmdW5jdGlvbih0LGUpe3JldHVybiB0LnllYXImJihlPXQubW9udGgoKSx0PXQueWVhcigpKSx0aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkTW9udGgpLDEyPT09ZSYmdGhpcy5sZWFwWWVhcih0KT8zMDo4PT09ZSYmNT09PW8odGhpcy5kYXlzSW5ZZWFyKHQpLDEwKT8zMDo5PT09ZSYmMz09PW8odGhpcy5kYXlzSW5ZZWFyKHQpLDEwKT8yOTp0aGlzLmRheXNQZXJNb250aFtlLTFdfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gNiE9PXRoaXMuZGF5T2ZXZWVrKHQsZSxyKX0sZXh0cmFJbmZvOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKTtyZXR1cm57eWVhclR5cGU6KHRoaXMubGVhcFllYXIoaSk/ImVtYm9saXNtaWMiOiJjb21tb24iKSsiICIrWyJkZWZpY2llbnQiLCJyZWd1bGFyIiwiY29tcGxldGUiXVt0aGlzLmRheXNJblllYXIoaSklMTAtM119fSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKTt0PWkueWVhcigpLGU9aS5tb250aCgpLHI9aS5kYXkoKTt2YXIgYT10PD0wP3QrMTp0LG89dGhpcy5qZEVwb2NoK3RoaXMuX2RlbGF5MShhKSt0aGlzLl9kZWxheTIoYSkrcisxO2lmKGU8Nyl7Zm9yKHZhciBzPTc7czw9dGhpcy5tb250aHNJblllYXIodCk7cysrKW8rPXRoaXMuZGF5c0luTW9udGgodCxzKTtmb3Iocz0xO3M8ZTtzKyspbys9dGhpcy5kYXlzSW5Nb250aCh0LHMpfWVsc2UgZm9yKHM9NztzPGU7cysrKW8rPXRoaXMuZGF5c0luTW9udGgodCxzKTtyZXR1cm4gb30sX2RlbGF5MTpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLmZsb29yKCgyMzUqdC0yMzQpLzE5KSxyPTEyMDg0KzEzNzUzKmUsbj0yOSplK01hdGguZmxvb3Ioci8yNTkyMCk7cmV0dXJuIG8oMyoobisxKSw3KTwzJiZuKyssbn0sX2RlbGF5MjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9kZWxheTEodC0xKSxyPXRoaXMuX2RlbGF5MSh0KTtyZXR1cm4gdGhpcy5fZGVsYXkxKHQrMSktcj09MzU2PzI6ci1lPT0zODI/MTowfSxmcm9tSkQ6ZnVuY3Rpb24odCl7dD1NYXRoLmZsb29yKHQpKy41O2Zvcih2YXIgZT1NYXRoLmZsb29yKDk4NDk2Kih0LXRoaXMuamRFcG9jaCkvMzU5NzUzNTEpLTE7dD49dGhpcy50b0pEKC0xPT09ZT8xOmUrMSw3LDEpOyllKys7Zm9yKHZhciByPXQ8dGhpcy50b0pEKGUsMSwxKT83OjE7dD50aGlzLnRvSkQoZSxyLHRoaXMuZGF5c0luTW9udGgoZSxyKSk7KXIrKzt2YXIgbj10LXRoaXMudG9KRChlLHIsMSkrMTtyZXR1cm4gdGhpcy5uZXdEYXRlKGUscixuKX19KSxuLmNhbGVuZGFycy5oZWJyZXc9YX0seyIuLi9tYWluIjo1MzYsIm9iamVjdC1hc3NpZ24iOjQyMX1dLDUyNzpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4uL21haW4iKSxpPXQoIm9iamVjdC1hc3NpZ24iKTtmdW5jdGlvbiBhKHQpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbdHx8IiJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl19YS5wcm90b3R5cGU9bmV3IG4uYmFzZUNhbGVuZGFyLGkoYS5wcm90b3R5cGUse25hbWU6IklzbGFtaWMiLGpkRXBvY2g6MTk0ODQzOS41LGRheXNQZXJNb250aDpbMzAsMjksMzAsMjksMzAsMjksMzAsMjksMzAsMjksMzAsMjldLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDoxLG1pbkRheToxLHJlZ2lvbmFsT3B0aW9uczp7IiI6e25hbWU6IklzbGFtaWMiLGVwb2NoczpbIkJIIiwiQUgiXSxtb250aE5hbWVzOlsiTXVoYXJyYW0iLCJTYWZhciIsIlJhYmknIGFsLWF3d2FsIiwiUmFiaScgYWwtdGhhbmkiLCJKdW1hZGEgYWwtYXd3YWwiLCJKdW1hZGEgYWwtdGhhbmkiLCJSYWphYiIsIlNoYSdhYmFuIiwiUmFtYWRhbiIsIlNoYXd3YWwiLCJEaHUgYWwtUWknZGFoIiwiRGh1IGFsLUhpamphaCJdLG1vbnRoTmFtZXNTaG9ydDpbIk11aCIsIlNhZiIsIlJhYjEiLCJSYWIyIiwiSnVtMSIsIkp1bTIiLCJSYWoiLCJTaGEnIiwiUmFtIiwiU2hhdyIsIkRodVEiLCJEaHVIIl0sZGF5TmFtZXM6WyJZYXdtIGFsLWFoYWQiLCJZYXdtIGFsLWl0aG5heW4iLCJZYXdtIGF0aC10aHVsYWF0aGFhJyIsIllhd20gYWwtYXJiaSdhYSciLCJZYXdtIGFsLWtoYW1cdTAxMmJzIiwiWWF3bSBhbC1qdW0nYSIsIllhd20gYXMtc2FidCJdLGRheU5hbWVzU2hvcnQ6WyJBaGEiLCJJdGgiLCJUaHUiLCJBcmIiLCJLaGEiLCJKdW0iLCJTYWIiXSxkYXlOYW1lc01pbjpbIkFoIiwiSXQiLCJUaCIsIkFyIiwiS2giLCJKdSIsIlNhIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDoieXl5eS9tbS9kZCIsZmlyc3REYXk6Nixpc1JUTDohMX19LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3JldHVybigxMSp0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhcikueWVhcigpKzE0KSUzMDwxMX0sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gbi5hZGQoLW4uZGF5T2ZXZWVrKCksImQiKSxNYXRoLmZsb29yKChuLmRheU9mWWVhcigpLTEpLzcpKzF9LGRheXNJblllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVhcFllYXIodCk/MzU1OjM1NH0sZGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkTW9udGgpO3JldHVybiB0aGlzLmRheXNQZXJNb250aFtyLm1vbnRoKCktMV0rKDEyPT09ci5tb250aCgpJiZ0aGlzLmxlYXBZZWFyKHIueWVhcigpKT8xOjApfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gNSE9PXRoaXMuZGF5T2ZXZWVrKHQsZSxyKX0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSk7cmV0dXJuIHQ9aS55ZWFyKCksZT1pLm1vbnRoKCksdD10PD0wP3QrMTp0LChyPWkuZGF5KCkpK01hdGguY2VpbCgyOS41KihlLTEpKSszNTQqKHQtMSkrTWF0aC5mbG9vcigoMysxMSp0KS8zMCkrdGhpcy5qZEVwb2NoLTF9LGZyb21KRDpmdW5jdGlvbih0KXt0PU1hdGguZmxvb3IodCkrLjU7dmFyIGU9TWF0aC5mbG9vcigoMzAqKHQtdGhpcy5qZEVwb2NoKSsxMDY0NikvMTA2MzEpO2U9ZTw9MD9lLTE6ZTt2YXIgcj1NYXRoLm1pbigxMixNYXRoLmNlaWwoKHQtMjktdGhpcy50b0pEKGUsMSwxKSkvMjkuNSkrMSksbj10LXRoaXMudG9KRChlLHIsMSkrMTtyZXR1cm4gdGhpcy5uZXdEYXRlKGUscixuKX19KSxuLmNhbGVuZGFycy5pc2xhbWljPWF9LHsiLi4vbWFpbiI6NTM2LCJvYmplY3QtYXNzaWduIjo0MjF9XSw1Mjg6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCIuLi9tYWluIiksaT10KCJvYmplY3QtYXNzaWduIik7ZnVuY3Rpb24gYSh0KXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW3R8fCIiXXx8dGhpcy5yZWdpb25hbE9wdGlvbnNbIiJdfWEucHJvdG90eXBlPW5ldyBuLmJhc2VDYWxlbmRhcixpKGEucHJvdG90eXBlLHtuYW1lOiJKdWxpYW4iLGpkRXBvY2g6MTcyMTQyMy41LGRheXNQZXJNb250aDpbMzEsMjgsMzEsMzAsMzEsMzAsMzEsMzEsMzAsMzEsMzAsMzFdLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDoxLG1pbkRheToxLHJlZ2lvbmFsT3B0aW9uczp7IiI6e25hbWU6Ikp1bGlhbiIsZXBvY2hzOlsiQkMiLCJBRCJdLG1vbnRoTmFtZXM6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLG1vbnRoTmFtZXNTaG9ydDpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdLGRheU5hbWVzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxkYXlOYW1lc1Nob3J0OlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sZGF5TmFtZXNNaW46WyJTdSIsIk1vIiwiVHUiLCJXZSIsIlRoIiwiRnIiLCJTYSJdLGRpZ2l0czpudWxsLGRhdGVGb3JtYXQ6Im1tL2RkL3l5eXkiLGZpcnN0RGF5OjAsaXNSVEw6ITF9fSxsZWFwWWVhcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhcik7cmV0dXJuKHQ9ZS55ZWFyKCk8MD9lLnllYXIoKSsxOmUueWVhcigpKSU0PT0wfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLm5ld0RhdGUodCxlLHIpO3JldHVybiBuLmFkZCg0LShuLmRheU9mV2VlaygpfHw3KSwiZCIpLE1hdGguZmxvb3IoKG4uZGF5T2ZZZWFyKCktMSkvNykrMX0sZGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkTW9udGgpO3JldHVybiB0aGlzLmRheXNQZXJNb250aFtyLm1vbnRoKCktMV0rKDI9PT1yLm1vbnRoKCkmJnRoaXMubGVhcFllYXIoci55ZWFyKCkpPzE6MCl9LHdlZWtEYXk6ZnVuY3Rpb24odCxlLHIpe3JldHVybih0aGlzLmRheU9mV2Vlayh0LGUscil8fDcpPDZ9LHRvSkQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZERhdGUpO3JldHVybiB0PWkueWVhcigpLGU9aS5tb250aCgpLHI9aS5kYXkoKSx0PDAmJnQrKyxlPD0yJiYodC0tLGUrPTEyKSxNYXRoLmZsb29yKDM2NS4yNSoodCs0NzE2KSkrTWF0aC5mbG9vcigzMC42MDAxKihlKzEpKStyLTE1MjQuNX0sZnJvbUpEOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguZmxvb3IodCsuNSkrMTUyNCxyPU1hdGguZmxvb3IoKGUtMTIyLjEpLzM2NS4yNSksbj1NYXRoLmZsb29yKDM2NS4yNSpyKSxpPU1hdGguZmxvb3IoKGUtbikvMzAuNjAwMSksYT1pLU1hdGguZmxvb3IoaTwxND8xOjEzKSxvPXItTWF0aC5mbG9vcihhPjI/NDcxNjo0NzE1KSxzPWUtbi1NYXRoLmZsb29yKDMwLjYwMDEqaSk7cmV0dXJuIG88PTAmJm8tLSx0aGlzLm5ld0RhdGUobyxhLHMpfX0pLG4uY2FsZW5kYXJzLmp1bGlhbj1hfSx7Ii4uL21haW4iOjUzNiwib2JqZWN0LWFzc2lnbiI6NDIxfV0sNTI5OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi4vbWFpbiIpLGk9dCgib2JqZWN0LWFzc2lnbiIpO2Z1bmN0aW9uIGEodCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHwiIl18fHRoaXMucmVnaW9uYWxPcHRpb25zWyIiXX1mdW5jdGlvbiBvKHQsZSl7cmV0dXJuIHQtZSpNYXRoLmZsb29yKHQvZSl9ZnVuY3Rpb24gcyh0LGUpe3JldHVybiBvKHQtMSxlKSsxfWEucHJvdG90eXBlPW5ldyBuLmJhc2VDYWxlbmRhcixpKGEucHJvdG90eXBlLHtuYW1lOiJNYXlhbiIsamRFcG9jaDo1ODQyODIuNSxoYXNZZWFyWmVybzohMCxtaW5Nb250aDowLGZpcnN0TW9udGg6MCxtaW5EYXk6MCxyZWdpb25hbE9wdGlvbnM6eyIiOntuYW1lOiJNYXlhbiIsZXBvY2hzOlsiIiwiIl0sbW9udGhOYW1lczpbIjAiLCIxIiwiMiIsIjMiLCI0IiwiNSIsIjYiLCI3IiwiOCIsIjkiLCIxMCIsIjExIiwiMTIiLCIxMyIsIjE0IiwiMTUiLCIxNiIsIjE3Il0sbW9udGhOYW1lc1Nob3J0OlsiMCIsIjEiLCIyIiwiMyIsIjQiLCI1IiwiNiIsIjciLCI4IiwiOSIsIjEwIiwiMTEiLCIxMiIsIjEzIiwiMTQiLCIxNSIsIjE2IiwiMTciXSxkYXlOYW1lczpbIjAiLCIxIiwiMiIsIjMiLCI0IiwiNSIsIjYiLCI3IiwiOCIsIjkiLCIxMCIsIjExIiwiMTIiLCIxMyIsIjE0IiwiMTUiLCIxNiIsIjE3IiwiMTgiLCIxOSJdLGRheU5hbWVzU2hvcnQ6WyIwIiwiMSIsIjIiLCIzIiwiNCIsIjUiLCI2IiwiNyIsIjgiLCI5IiwiMTAiLCIxMSIsIjEyIiwiMTMiLCIxNCIsIjE1IiwiMTYiLCIxNyIsIjE4IiwiMTkiXSxkYXlOYW1lc01pbjpbIjAiLCIxIiwiMiIsIjMiLCI0IiwiNSIsIjYiLCI3IiwiOCIsIjkiLCIxMCIsIjExIiwiMTIiLCIxMyIsIjE0IiwiMTUiLCIxNiIsIjE3IiwiMTgiLCIxOSJdLGRpZ2l0czpudWxsLGRhdGVGb3JtYXQ6IllZWVkubS5kIixmaXJzdERheTowLGlzUlRMOiExLGhhYWJNb250aHM6WyJQb3AiLCJVbyIsIlppcCIsIlpvdHoiLCJUemVjIiwiWHVsIiwiWWF4a2luIiwiTW9sIiwiQ2hlbiIsIllheCIsIlphYyIsIkNlaCIsIk1hYyIsIkthbmtpbiIsIk11YW4iLCJQYXgiLCJLYXlhYiIsIkN1bWt1IiwiVWF5ZWIiXSx0em9sa2luTW9udGhzOlsiSW1peCIsIklrIiwiQWtiYWwiLCJLYW4iLCJDaGljY2hhbiIsIkNpbWkiLCJNYW5payIsIkxhbWF0IiwiTXVsdWMiLCJPYyIsIkNodWVuIiwiRWIiLCJCZW4iLCJJeCIsIk1lbiIsIkNpYiIsIkNhYmFuIiwiRXR6bmFiIiwiQ2F1YWMiLCJBaGF1Il19fSxsZWFwWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpLCExfSxmb3JtYXRZZWFyOmZ1bmN0aW9uKHQpe3Q9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpLnllYXIoKTt2YXIgZT1NYXRoLmZsb29yKHQvNDAwKTtyZXR1cm4gdCU9NDAwLHQrPXQ8MD80MDA6MCxlKyIuIitNYXRoLmZsb29yKHQvMjApKyIuIit0JTIwfSxmb3JZZWFyOmZ1bmN0aW9uKHQpe2lmKCh0PXQuc3BsaXQoIi4iKSkubGVuZ3RoPDMpdGhyb3ciSW52YWxpZCBNYXlhbiB5ZWFyIjtmb3IodmFyIGU9MCxyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXBhcnNlSW50KHRbcl0sMTApO2lmKE1hdGguYWJzKG4pPjE5fHxyPjAmJm48MCl0aHJvdyJJbnZhbGlkIE1heWFuIHllYXIiO2U9MjAqZStufXJldHVybiBlfSxtb250aHNJblllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKSwxOH0sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZERhdGUpLDB9LGRheXNJblllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKSwzNjB9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQsZSx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRNb250aCksMjB9LGRheXNJbldlZWs6ZnVuY3Rpb24oKXtyZXR1cm4gNX0sZGF5T2ZXZWVrOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSkuZGF5KCl9LHdlZWtEYXk6ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKSwhMH0sZXh0cmFJbmZvOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKS50b0pEKCksYT10aGlzLl90b0hhYWIoaSksbz10aGlzLl90b1R6b2xraW4oaSk7cmV0dXJue2hhYWJNb250aE5hbWU6dGhpcy5sb2NhbC5oYWFiTW9udGhzW2FbMF0tMV0saGFhYk1vbnRoOmFbMF0saGFhYkRheTphWzFdLHR6b2xraW5EYXlOYW1lOnRoaXMubG9jYWwudHpvbGtpbk1vbnRoc1tvWzBdLTFdLHR6b2xraW5EYXk6b1swXSx0em9sa2luVHJlY2VuYTpvWzFdfX0sX3RvSGFhYjpmdW5jdGlvbih0KXt2YXIgZT1vKCh0LT10aGlzLmpkRXBvY2gpKzgrMzQwLDM2NSk7cmV0dXJuW01hdGguZmxvb3IoZS8yMCkrMSxvKGUsMjApXX0sX3RvVHpvbGtpbjpmdW5jdGlvbih0KXtyZXR1cm5bcygodC09dGhpcy5qZEVwb2NoKSsyMCwyMCkscyh0KzQsMTMpXX0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSk7cmV0dXJuIGkuZGF5KCkrMjAqaS5tb250aCgpKzM2MCppLnllYXIoKSt0aGlzLmpkRXBvY2h9LGZyb21KRDpmdW5jdGlvbih0KXt0PU1hdGguZmxvb3IodCkrLjUtdGhpcy5qZEVwb2NoO3ZhciBlPU1hdGguZmxvb3IodC8zNjApO3QlPTM2MCx0Kz10PDA/MzYwOjA7dmFyIHI9TWF0aC5mbG9vcih0LzIwKSxuPXQlMjA7cmV0dXJuIHRoaXMubmV3RGF0ZShlLHIsbil9fSksbi5jYWxlbmRhcnMubWF5YW49YX0seyIuLi9tYWluIjo1MzYsIm9iamVjdC1hc3NpZ24iOjQyMX1dLDUzMDpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4uL21haW4iKSxpPXQoIm9iamVjdC1hc3NpZ24iKTtmdW5jdGlvbiBhKHQpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbdHx8IiJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl19YS5wcm90b3R5cGU9bmV3IG4uYmFzZUNhbGVuZGFyO3ZhciBvPW4uaW5zdGFuY2UoImdyZWdvcmlhbiIpO2koYS5wcm90b3R5cGUse25hbWU6Ik5hbmFrc2hhaGkiLGpkRXBvY2g6MjI1NzY3My41LGRheXNQZXJNb250aDpbMzEsMzEsMzEsMzEsMzEsMzAsMzAsMzAsMzAsMzAsMzAsMzBdLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDoxLG1pbkRheToxLHJlZ2lvbmFsT3B0aW9uczp7IiI6e25hbWU6Ik5hbmFrc2hhaGkiLGVwb2NoczpbIkJOIiwiQU4iXSxtb250aE5hbWVzOlsiQ2hldCIsIlZhaXNha2giLCJKZXRoIiwiSGFyaCIsIlNhd2FuIiwiQmhhZG9uIiwiQXNzdSIsIkthdGFrIiwiTWFnaGFyIiwiUG9oIiwiTWFnaCIsIlBoYWd1biJdLG1vbnRoTmFtZXNTaG9ydDpbIkNoZSIsIlZhaSIsIkpldCIsIkhhciIsIlNhdyIsIkJoYSIsIkFzcyIsIkthdCIsIk1nciIsIlBvaCIsIk1naCIsIlBoYSJdLGRheU5hbWVzOlsiU29tdmFhciIsIk1hbmdhbHZhciIsIkJ1ZGh2YWFyIiwiVmVlcnZhYXIiLCJTaHVrYXJ2YWFyIiwiU2FuaWNoYXJ2YWFyIiwiRXR2YWFyIl0sZGF5TmFtZXNTaG9ydDpbIlNvbSIsIk1hbmdhbCIsIkJ1ZGgiLCJWZWVyIiwiU2h1a2FyIiwiU2FuaWNoYXIiLCJFdCJdLGRheU5hbWVzTWluOlsiU28iLCJNYSIsIkJ1IiwiVmUiLCJTaCIsIlNhIiwiRXQiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJkZC1tbS15eXl5IixmaXJzdERheTowLGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXJ8fG4ucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkWWVhcik7cmV0dXJuIG8ubGVhcFllYXIoZS55ZWFyKCkrKGUueWVhcigpPDE/MTowKSsxNDY5KX0sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gbi5hZGQoMS0obi5kYXlPZldlZWsoKXx8NyksImQiKSxNYXRoLmZsb29yKChuLmRheU9mWWVhcigpLTEpLzcpKzF9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZE1vbnRoKTtyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbci5tb250aCgpLTFdKygxMj09PXIubW9udGgoKSYmdGhpcy5sZWFwWWVhcihyLnllYXIoKSk/MTowKX0sd2Vla0RheTpmdW5jdGlvbih0LGUscil7cmV0dXJuKHRoaXMuZGF5T2ZXZWVrKHQsZSxyKXx8Nyk8Nn0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkTW9udGgpOyh0PWkueWVhcigpKTwwJiZ0Kys7Zm9yKHZhciBhPWkuZGF5KCkscz0xO3M8aS5tb250aCgpO3MrKylhKz10aGlzLmRheXNQZXJNb250aFtzLTFdO3JldHVybiBhK28udG9KRCh0KzE0NjgsMywxMyl9LGZyb21KRDpmdW5jdGlvbih0KXt0PU1hdGguZmxvb3IodCsuNSk7Zm9yKHZhciBlPU1hdGguZmxvb3IoKHQtKHRoaXMuamRFcG9jaC0xKSkvMzY2KTt0Pj10aGlzLnRvSkQoZSsxLDEsMSk7KWUrKztmb3IodmFyIHI9dC1NYXRoLmZsb29yKHRoaXMudG9KRChlLDEsMSkrLjUpKzEsbj0xO3I+dGhpcy5kYXlzSW5Nb250aChlLG4pOylyLT10aGlzLmRheXNJbk1vbnRoKGUsbiksbisrO3JldHVybiB0aGlzLm5ld0RhdGUoZSxuLHIpfX0pLG4uY2FsZW5kYXJzLm5hbmFrc2hhaGk9YX0seyIuLi9tYWluIjo1MzYsIm9iamVjdC1hc3NpZ24iOjQyMX1dLDUzMTpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4uL21haW4iKSxpPXQoIm9iamVjdC1hc3NpZ24iKTtmdW5jdGlvbiBhKHQpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbdHx8IiJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl19YS5wcm90b3R5cGU9bmV3IG4uYmFzZUNhbGVuZGFyLGkoYS5wcm90b3R5cGUse25hbWU6Ik5lcGFsaSIsamRFcG9jaDoxNzAwNzA5LjUsZGF5c1Blck1vbnRoOlszMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0saGFzWWVhclplcm86ITEsbWluTW9udGg6MSxmaXJzdE1vbnRoOjEsbWluRGF5OjEsZGF5c1BlclllYXI6MzY1LHJlZ2lvbmFsT3B0aW9uczp7IiI6e25hbWU6Ik5lcGFsaSIsZXBvY2hzOlsiQkJTIiwiQUJTIl0sbW9udGhOYW1lczpbIkJhaXNha2giLCJKZXN0aGEiLCJBc2hhZGgiLCJTaHJhd2FuIiwiQmhhZHJhIiwiQXNod2luIiwiS2FydGlrIiwiTWFuZ3NpciIsIlBhdXNoIiwiTWFuZ2giLCJGYWxndW4iLCJDaGFpdHJhIl0sbW9udGhOYW1lc1Nob3J0OlsiQmFpIiwiSmUiLCJBcyIsIlNocmEiLCJCaGEiLCJBc2giLCJLYXIiLCJNYW5nIiwiUGF1IiwiTWEiLCJGYWwiLCJDaGFpIl0sZGF5TmFtZXM6WyJBYWl0YWJhYXIiLCJTb21iYWFyIiwiTWFuZ2xiYWFyIiwiQnVkaGFiYWFyIiwiQmloaWJhYXIiLCJTaHVrcmFiYWFyIiwiU2hhbmliYWFyIl0sZGF5TmFtZXNTaG9ydDpbIkFhaXRhIiwiU29tIiwiTWFuZ2wiLCJCdWRoYSIsIkJpaGkiLCJTaHVrcmEiLCJTaGFuaSJdLGRheU5hbWVzTWluOlsiQWFpIiwiU28iLCJNYW4iLCJCdSIsIkJpIiwiU2h1IiwiU2hhIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDoiZGQvbW0veXl5eSIsZmlyc3REYXk6MSxpc1JUTDohMX19LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRheXNJblllYXIodCkhPT10aGlzLmRheXNQZXJZZWFyfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLm5ld0RhdGUodCxlLHIpO3JldHVybiBuLmFkZCgtbi5kYXlPZldlZWsoKSwiZCIpLE1hdGguZmxvb3IoKG4uZGF5T2ZZZWFyKCktMSkvNykrMX0sZGF5c0luWWVhcjpmdW5jdGlvbih0KXtpZih0PXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKS55ZWFyKCksInVuZGVmaW5lZCI9PXR5cGVvZiB0aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW3RdKXJldHVybiB0aGlzLmRheXNQZXJZZWFyO2Zvcih2YXIgZT0wLHI9dGhpcy5taW5Nb250aDtyPD0xMjtyKyspZSs9dGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVt0XVtyXTtyZXR1cm4gZX0sZGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC55ZWFyJiYoZT10Lm1vbnRoKCksdD10LnllYXIoKSksdGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZE1vbnRoKSwidW5kZWZpbmVkIj09dHlwZW9mIHRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbdF0/dGhpcy5kYXlzUGVyTW9udGhbZS0xXTp0aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW3RdW2VdfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gNiE9PXRoaXMuZGF5T2ZXZWVrKHQsZSxyKX0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSk7dD1pLnllYXIoKSxlPWkubW9udGgoKSxyPWkuZGF5KCk7dmFyIGE9bi5pbnN0YW5jZSgpLG89MCxzPWUsbD10O3RoaXMuX2NyZWF0ZU1pc3NpbmdDYWxlbmRhckRhdGEodCk7dmFyIGM9dC0ocz45fHw5PT09cyYmcj49dGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVtsXVswXT81Njo1Nyk7Zm9yKDkhPT1lJiYobz1yLHMtLSk7OSE9PXM7KXM8PTAmJihzPTEyLGwtLSksbys9dGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVtsXVtzXSxzLS07cmV0dXJuIDk9PT1lPyhvKz1yLXRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbbF1bMF0pPDAmJihvKz1hLmRheXNJblllYXIoYykpOm8rPXRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbbF1bOV0tdGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVtsXVswXSxhLm5ld0RhdGUoYywxLDEpLmFkZChvLCJkIikudG9KRCgpfSxmcm9tSkQ6ZnVuY3Rpb24odCl7dmFyIGU9bi5pbnN0YW5jZSgpLmZyb21KRCh0KSxyPWUueWVhcigpLGk9ZS5kYXlPZlllYXIoKSxhPXIrNTY7dGhpcy5fY3JlYXRlTWlzc2luZ0NhbGVuZGFyRGF0YShhKTtmb3IodmFyIG89OSxzPXRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbYV1bMF0sbD10aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW2FdW29dLXMrMTtpPmw7KSsrbz4xMiYmKG89MSxhKyspLGwrPXRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbYV1bb107dmFyIGM9dGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVthXVtvXS0obC1pKTtyZXR1cm4gdGhpcy5uZXdEYXRlKGEsbyxjKX0sX2NyZWF0ZU1pc3NpbmdDYWxlbmRhckRhdGE6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5kYXlzUGVyTW9udGguc2xpY2UoMCk7ZS51bnNoaWZ0KDE3KTtmb3IodmFyIHI9dC0xO3I8dCsyO3IrKykidW5kZWZpbmVkIj09dHlwZW9mIHRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbcl0mJih0aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW3JdPWUpfSxORVBBTElfQ0FMRU5EQVJfREFUQTp7MTk3MDpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDE5NzE6WzE4LDMxLDMxLDMyLDMxLDMyLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTcyOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMF0sMTk3MzpbMTksMzAsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMjksMzFdLDE5NzQ6WzE5LDMxLDMxLDMyLDMwLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTc1OlsxOCwzMSwzMSwzMiwzMiwzMCwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMTk3NjpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDE5Nzc6WzE4LDMxLDMyLDMxLDMyLDMxLDMxLDI5LDMwLDI5LDMwLDI5LDMxXSwxOTc4OlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMTk3OTpbMTgsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDE5ODA6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwxOTgxOlsxOCwzMSwzMSwzMSwzMiwzMSwzMSwyOSwzMCwzMCwyOSwzMCwzMF0sMTk4MjpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDE5ODM6WzE4LDMxLDMxLDMyLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTg0OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMTk4NTpbMTgsMzEsMzEsMzEsMzIsMzEsMzEsMjksMzAsMzAsMjksMzAsMzBdLDE5ODY6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTg3OlsxOCwzMSwzMiwzMSwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMTk4ODpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDE5ODk6WzE4LDMxLDMxLDMxLDMyLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTkwOlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMTk5MTpbMTgsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDE5OTI6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDI5LDMxXSwxOTkzOlsxOCwzMSwzMSwzMSwzMiwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMTk5NDpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDE5OTU6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMwXSwxOTk2OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwyOSwzMV0sMTk5NzpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDE5OTg6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTk5OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjAwMDpbMTcsMzAsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMjksMzFdLDIwMDE6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDAyOlsxOCwzMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjAwMzpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwMDQ6WzE3LDMwLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDI5LDMxXSwyMDA1OlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjAwNjpbMTgsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwMDc6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDA4OlsxNywzMSwzMSwzMSwzMiwzMSwzMSwyOSwzMCwzMCwyOSwyOSwzMV0sMjAwOTpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwMTA6WzE4LDMxLDMxLDMyLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDExOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjAxMjpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMjksMzAsMzAsMjksMzAsMzBdLDIwMTM6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDE0OlsxOCwzMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjAxNTpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwMTY6WzE3LDMxLDMxLDMxLDMyLDMxLDMxLDI5LDMwLDMwLDI5LDMwLDMwXSwyMDE3OlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjAxODpbMTgsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwMTk6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDI5LDMxXSwyMDIwOlsxNywzMSwzMSwzMSwzMiwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjAyMTpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwMjI6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMwXSwyMDIzOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwyOSwzMV0sMjAyNDpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwMjU6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDI2OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjAyNzpbMTcsMzAsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMjksMzFdLDIwMjg6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDI5OlsxOCwzMSwzMSwzMiwzMSwzMiwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjAzMDpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMzAsMzAsMzAsMzFdLDIwMzE6WzE3LDMxLDMyLDMxLDMyLDMxLDMxLDMxLDMxLDMxLDMxLDMxLDMxXSwyMDMyOlsxNywzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMl0sMjAzMzpbMTgsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwMzQ6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDM1OlsxNywzMCwzMiwzMSwzMiwzMSwzMSwyOSwzMCwzMCwyOSwyOSwzMV0sMjAzNjpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwMzc6WzE4LDMxLDMxLDMyLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDM4OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjAzOTpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMjksMzAsMzAsMjksMzAsMzBdLDIwNDA6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDQxOlsxOCwzMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjA0MjpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwNDM6WzE3LDMxLDMxLDMxLDMyLDMxLDMxLDI5LDMwLDMwLDI5LDMwLDMwXSwyMDQ0OlsxNywzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA0NTpbMTgsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwNDY6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDQ3OlsxNywzMSwzMSwzMSwzMiwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA0ODpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwNDk6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMwXSwyMDUwOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwyOSwzMV0sMjA1MTpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwNTI6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDUzOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMF0sMjA1NDpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMjksMzFdLDIwNTU6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDMwLDI5LDMwXSwyMDU2OlsxNywzMSwzMSwzMiwzMSwzMiwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjA1NzpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwNTg6WzE3LDMwLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDI5LDMxXSwyMDU5OlsxNywzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA2MDpbMTcsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwNjE6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDYyOlsxNywzMCwzMiwzMSwzMiwzMSwzMSwyOSwzMCwyOSwzMCwyOSwzMV0sMjA2MzpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwNjQ6WzE3LDMxLDMxLDMyLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDY1OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjA2NjpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMjksMzAsMzAsMjksMjksMzFdLDIwNjc6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDY4OlsxNywzMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjA2OTpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwNzA6WzE3LDMxLDMxLDMxLDMyLDMxLDMxLDI5LDMwLDMwLDI5LDMwLDMwXSwyMDcxOlsxNywzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA3MjpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwNzM6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDc0OlsxNywzMSwzMSwzMSwzMiwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA3NTpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwNzY6WzE2LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMwXSwyMDc3OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwyOSwzMV0sMjA3ODpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwNzk6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDgwOlsxNiwzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMF0sMjA4MTpbMTcsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMzAsMjksMzAsMzAsMzBdLDIwODI6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDgzOlsxNywzMSwzMSwzMiwzMSwzMSwzMCwzMCwzMCwyOSwzMCwzMCwzMF0sMjA4NDpbMTcsMzEsMzEsMzIsMzEsMzEsMzAsMzAsMzAsMjksMzAsMzAsMzBdLDIwODU6WzE3LDMxLDMyLDMxLDMyLDMxLDMxLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDg2OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwzMCwzMF0sMjA4NzpbMTYsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMzAsMjksMzAsMzAsMzBdLDIwODg6WzE2LDMwLDMxLDMyLDMyLDMwLDMxLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDg5OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwzMCwzMF0sMjA5MDpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMzAsMzBdLDIwOTE6WzE2LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDkyOlsxNiwzMSwzMSwzMiwzMiwzMSwzMCwzMCwzMCwyOSwzMCwzMCwzMF0sMjA5MzpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMzAsMzBdLDIwOTQ6WzE3LDMxLDMxLDMyLDMxLDMxLDMwLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDk1OlsxNywzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwzMCwzMCwzMF0sMjA5NjpbMTcsMzAsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwOTc6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDk4OlsxNywzMSwzMSwzMiwzMSwzMSwzMSwyOSwzMCwyOSwzMCwzMCwzMV0sMjA5OTpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMjksMzAsMzAsMzBdLDIxMDA6WzE3LDMxLDMyLDMxLDMyLDMwLDMxLDMwLDI5LDMwLDI5LDMwLDMwXX19KSxuLmNhbGVuZGFycy5uZXBhbGk9YX0seyIuLi9tYWluIjo1MzYsIm9iamVjdC1hc3NpZ24iOjQyMX1dLDUzMjpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4uL21haW4iKSxpPXQoIm9iamVjdC1hc3NpZ24iKTtmdW5jdGlvbiBhKHQpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbdHx8IiJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl19ZnVuY3Rpb24gbyh0LGUpe3JldHVybiB0LWUqTWF0aC5mbG9vcih0L2UpfWEucHJvdG90eXBlPW5ldyBuLmJhc2VDYWxlbmRhcixpKGEucHJvdG90eXBlLHtuYW1lOiJQZXJzaWFuIixqZEVwb2NoOjE5NDgzMjAuNSxkYXlzUGVyTW9udGg6WzMxLDMxLDMxLDMxLDMxLDMxLDMwLDMwLDMwLDMwLDMwLDI5XSxoYXNZZWFyWmVybzohMSxtaW5Nb250aDoxLGZpcnN0TW9udGg6MSxtaW5EYXk6MSxyZWdpb25hbE9wdGlvbnM6eyIiOntuYW1lOiJQZXJzaWFuIixlcG9jaHM6WyJCUCIsIkFQIl0sbW9udGhOYW1lczpbIkZhcnZhcmRpbiIsIk9yZGliZWhlc2h0IiwiS2hvcmRhZCIsIlRpciIsIk1vcmRhZCIsIlNoYWhyaXZhciIsIk1laHIiLCJBYmFuIiwiQXphciIsIkRheSIsIkJhaG1hbiIsIkVzZmFuZCJdLG1vbnRoTmFtZXNTaG9ydDpbIkZhciIsIk9yZCIsIktobyIsIlRpciIsIk1vciIsIlNoYSIsIk1laCIsIkFiYSIsIkF6YSIsIkRheSIsIkJhaCIsIkVzZiJdLGRheU5hbWVzOlsiWWVrc2hhbWJlIiwiRG9zaGFtYmUiLCJTZXNoYW1iZSIsIkNoXHhlNmhhcnNoYW1iZSIsIlBhbmpzaGFtYmUiLCJKb20nZSIsIlNoYW1iZSJdLGRheU5hbWVzU2hvcnQ6WyJZZWsiLCJEbyIsIlNlIiwiQ2hceGU2IiwiUGFuaiIsIkpvbSIsIlNoYSJdLGRheU5hbWVzTWluOlsiWWUiLCJEbyIsIlNlIiwiQ2giLCJQYSIsIkpvIiwiU2giXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJ5eXl5L21tL2RkIixmaXJzdERheTo2LGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpO3JldHVybiA2ODIqKChlLnllYXIoKS0oZS55ZWFyKCk+MD80NzQ6NDczKSklMjgyMCs0NzQrMzgpJTI4MTY8NjgyfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLm5ld0RhdGUodCxlLHIpO3JldHVybiBuLmFkZCgtKG4uZGF5T2ZXZWVrKCkrMSklNywiZCIpLE1hdGguZmxvb3IoKG4uZGF5T2ZZZWFyKCktMSkvNykrMX0sZGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkTW9udGgpO3JldHVybiB0aGlzLmRheXNQZXJNb250aFtyLm1vbnRoKCktMV0rKDEyPT09ci5tb250aCgpJiZ0aGlzLmxlYXBZZWFyKHIueWVhcigpKT8xOjApfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gNSE9PXRoaXMuZGF5T2ZXZWVrKHQsZSxyKX0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSk7dD1pLnllYXIoKSxlPWkubW9udGgoKSxyPWkuZGF5KCk7dmFyIGE9dC0odD49MD80NzQ6NDczKSxzPTQ3NCtvKGEsMjgyMCk7cmV0dXJuIHIrKGU8PTc/MzEqKGUtMSk6MzAqKGUtMSkrNikrTWF0aC5mbG9vcigoNjgyKnMtMTEwKS8yODE2KSszNjUqKHMtMSkrMTAyOTk4MypNYXRoLmZsb29yKGEvMjgyMCkrdGhpcy5qZEVwb2NoLTF9LGZyb21KRDpmdW5jdGlvbih0KXt2YXIgZT0odD1NYXRoLmZsb29yKHQpKy41KS10aGlzLnRvSkQoNDc1LDEsMSkscj1NYXRoLmZsb29yKGUvMTAyOTk4Myksbj1vKGUsMTAyOTk4MyksaT0yODIwO2lmKDEwMjk5ODIhPT1uKXt2YXIgYT1NYXRoLmZsb29yKG4vMzY2KSxzPW8obiwzNjYpO2k9TWF0aC5mbG9vcigoMjEzNCphKzI4MTYqcysyODE1KS8xMDI4NTIyKSthKzF9dmFyIGw9aSsyODIwKnIrNDc0O2w9bDw9MD9sLTE6bDt2YXIgYz10LXRoaXMudG9KRChsLDEsMSkrMSx1PWM8PTE4Nj9NYXRoLmNlaWwoYy8zMSk6TWF0aC5jZWlsKChjLTYpLzMwKSxoPXQtdGhpcy50b0pEKGwsdSwxKSsxO3JldHVybiB0aGlzLm5ld0RhdGUobCx1LGgpfX0pLG4uY2FsZW5kYXJzLnBlcnNpYW49YSxuLmNhbGVuZGFycy5qYWxhbGk9YX0seyIuLi9tYWluIjo1MzYsIm9iamVjdC1hc3NpZ24iOjQyMX1dLDUzMzpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4uL21haW4iKSxpPXQoIm9iamVjdC1hc3NpZ24iKSxhPW4uaW5zdGFuY2UoKTtmdW5jdGlvbiBvKHQpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbdHx8IiJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl19by5wcm90b3R5cGU9bmV3IG4uYmFzZUNhbGVuZGFyLGkoby5wcm90b3R5cGUse25hbWU6IlRhaXdhbiIsamRFcG9jaDoyNDE5NDAyLjUseWVhcnNPZmZzZXQ6MTkxMSxkYXlzUGVyTW9udGg6WzMxLDI4LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXSxoYXNZZWFyWmVybzohMSxtaW5Nb250aDoxLGZpcnN0TW9udGg6MSxtaW5EYXk6MSxyZWdpb25hbE9wdGlvbnM6eyIiOntuYW1lOiJUYWl3YW4iLGVwb2NoczpbIkJST0MiLCJST0MiXSxtb250aE5hbWVzOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSxtb250aE5hbWVzU2hvcnQ6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXSxkYXlOYW1lczpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sZGF5TmFtZXNTaG9ydDpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLGRheU5hbWVzTWluOlsiU3UiLCJNbyIsIlR1IiwiV2UiLCJUaCIsIkZyIiwiU2EiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJ5eXl5L21tL2RkIixmaXJzdERheToxLGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpO3Q9dGhpcy5fdDJnWWVhcihlLnllYXIoKSk7cmV0dXJuIGEubGVhcFllYXIodCl9LHdlZWtPZlllYXI6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKTt0PXRoaXMuX3QyZ1llYXIoaS55ZWFyKCkpO3JldHVybiBhLndlZWtPZlllYXIodCxpLm1vbnRoKCksaS5kYXkoKSl9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZE1vbnRoKTtyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbci5tb250aCgpLTFdKygyPT09ci5tb250aCgpJiZ0aGlzLmxlYXBZZWFyKHIueWVhcigpKT8xOjApfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4odGhpcy5kYXlPZldlZWsodCxlLHIpfHw3KTw2fSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKTt0PXRoaXMuX3QyZ1llYXIoaS55ZWFyKCkpO3JldHVybiBhLnRvSkQodCxpLm1vbnRoKCksaS5kYXkoKSl9LGZyb21KRDpmdW5jdGlvbih0KXt2YXIgZT1hLmZyb21KRCh0KSxyPXRoaXMuX2cydFllYXIoZS55ZWFyKCkpO3JldHVybiB0aGlzLm5ld0RhdGUocixlLm1vbnRoKCksZS5kYXkoKSl9LF90MmdZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0K3RoaXMueWVhcnNPZmZzZXQrKHQ+PS10aGlzLnllYXJzT2Zmc2V0JiZ0PD0tMT8xOjApfSxfZzJ0WWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdC10aGlzLnllYXJzT2Zmc2V0LSh0Pj0xJiZ0PD10aGlzLnllYXJzT2Zmc2V0PzE6MCl9fSksbi5jYWxlbmRhcnMudGFpd2FuPW99LHsiLi4vbWFpbiI6NTM2LCJvYmplY3QtYXNzaWduIjo0MjF9XSw1MzQ6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCIuLi9tYWluIiksaT10KCJvYmplY3QtYXNzaWduIiksYT1uLmluc3RhbmNlKCk7ZnVuY3Rpb24gbyh0KXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW3R8fCIiXXx8dGhpcy5yZWdpb25hbE9wdGlvbnNbIiJdfW8ucHJvdG90eXBlPW5ldyBuLmJhc2VDYWxlbmRhcixpKG8ucHJvdG90eXBlLHtuYW1lOiJUaGFpIixqZEVwb2NoOjE1MjMwOTguNSx5ZWFyc09mZnNldDo1NDMsZGF5c1Blck1vbnRoOlszMSwyOCwzMSwzMCwzMSwzMCwzMSwzMSwzMCwzMSwzMCwzMV0saGFzWWVhclplcm86ITEsbWluTW9udGg6MSxmaXJzdE1vbnRoOjEsbWluRGF5OjEscmVnaW9uYWxPcHRpb25zOnsiIjp7bmFtZToiVGhhaSIsZXBvY2hzOlsiQkJFIiwiQkUiXSxtb250aE5hbWVzOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSxtb250aE5hbWVzU2hvcnQ6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXSxkYXlOYW1lczpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sZGF5TmFtZXNTaG9ydDpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLGRheU5hbWVzTWluOlsiU3UiLCJNbyIsIlR1IiwiV2UiLCJUaCIsIkZyIiwiU2EiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJkZC9tbS95eXl5IixmaXJzdERheTowLGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpO3Q9dGhpcy5fdDJnWWVhcihlLnllYXIoKSk7cmV0dXJuIGEubGVhcFllYXIodCl9LHdlZWtPZlllYXI6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKTt0PXRoaXMuX3QyZ1llYXIoaS55ZWFyKCkpO3JldHVybiBhLndlZWtPZlllYXIodCxpLm1vbnRoKCksaS5kYXkoKSl9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZE1vbnRoKTtyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbci5tb250aCgpLTFdKygyPT09ci5tb250aCgpJiZ0aGlzLmxlYXBZZWFyKHIueWVhcigpKT8xOjApfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4odGhpcy5kYXlPZldlZWsodCxlLHIpfHw3KTw2fSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKTt0PXRoaXMuX3QyZ1llYXIoaS55ZWFyKCkpO3JldHVybiBhLnRvSkQodCxpLm1vbnRoKCksaS5kYXkoKSl9LGZyb21KRDpmdW5jdGlvbih0KXt2YXIgZT1hLmZyb21KRCh0KSxyPXRoaXMuX2cydFllYXIoZS55ZWFyKCkpO3JldHVybiB0aGlzLm5ld0RhdGUocixlLm1vbnRoKCksZS5kYXkoKSl9LF90MmdZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0LXRoaXMueWVhcnNPZmZzZXQtKHQ+PTEmJnQ8PXRoaXMueWVhcnNPZmZzZXQ/MTowKX0sX2cydFllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQrdGhpcy55ZWFyc09mZnNldCsodD49LXRoaXMueWVhcnNPZmZzZXQmJnQ8PS0xPzE6MCl9fSksbi5jYWxlbmRhcnMudGhhaT1vfSx7Ii4uL21haW4iOjUzNiwib2JqZWN0LWFzc2lnbiI6NDIxfV0sNTM1OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi4vbWFpbiIpLGk9dCgib2JqZWN0LWFzc2lnbiIpO2Z1bmN0aW9uIGEodCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHwiIl18fHRoaXMucmVnaW9uYWxPcHRpb25zWyIiXX1hLnByb3RvdHlwZT1uZXcgbi5iYXNlQ2FsZW5kYXIsaShhLnByb3RvdHlwZSx7bmFtZToiVW1tQWxRdXJhIixoYXNZZWFyWmVybzohMSxtaW5Nb250aDoxLGZpcnN0TW9udGg6MSxtaW5EYXk6MSxyZWdpb25hbE9wdGlvbnM6eyIiOntuYW1lOiJVbW0gYWwtUXVyYSIsZXBvY2hzOlsiQkgiLCJBSCJdLG1vbnRoTmFtZXM6WyJBbC1NdWhhcnJhbSIsIlNhZmFyIiwiUmFiaScgYWwtYXd3YWwiLCJSYWJpJyBBbC1UaGFuaSIsIkp1bWFkYSBBbC1Bd3dhbCIsIkp1bWFkYSBBbC1UaGFuaSIsIlJhamFiIiwiU2hhJ2FiYW4iLCJSYW1hZGFuIiwiU2hhd3dhbCIsIkRodSBhbC1RaSdkYWgiLCJEaHUgYWwtSGlqamFoIl0sbW9udGhOYW1lc1Nob3J0OlsiTXVoIiwiU2FmIiwiUmFiMSIsIlJhYjIiLCJKdW0xIiwiSnVtMiIsIlJhaiIsIlNoYSciLCJSYW0iLCJTaGF3IiwiRGh1USIsIkRodUgiXSxkYXlOYW1lczpbIllhd20gYWwtQWhhZCIsIllhd20gYWwtSXRobmFpbiIsIllhd20gYWwtVGhhbFx1MDEwMXRoXHUwMTAxXHUyMDE5IiwiWWF3bSBhbC1BcmJhXHUyMDE4XHUwMTAxXHUyMDE5IiwiWWF3bSBhbC1LaGFtXHUwMTJicyIsIllhd20gYWwtSnVtXHUyMDE4YSIsIllhd20gYWwtU2FidCJdLGRheU5hbWVzTWluOlsiQWgiLCJJdGgiLCJUaCIsIkFyIiwiS2giLCJKdSIsIlNhIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDoieXl5eS9tbS9kZCIsZmlyc3REYXk6Nixpc1JUTDohMH19LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKTtyZXR1cm4gMzU1PT09dGhpcy5kYXlzSW5ZZWFyKGUueWVhcigpKX0sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gbi5hZGQoLW4uZGF5T2ZXZWVrKCksImQiKSxNYXRoLmZsb29yKChuLmRheU9mWWVhcigpLTEpLzcpKzF9LGRheXNJblllYXI6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj0xO3I8PTEyO3IrKyllKz10aGlzLmRheXNJbk1vbnRoKHQscik7cmV0dXJuIGV9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXRoaXMuX3ZhbGlkYXRlKHQsZSx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRNb250aCkudG9KRCgpLTI0ZTUrLjUsaT0wLGE9MDthPG8ubGVuZ3RoO2ErKyl7aWYob1thXT5yKXJldHVybiBvW2ldLW9baS0xXTtpKyt9cmV0dXJuIDMwfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gNSE9PXRoaXMuZGF5T2ZXZWVrKHQsZSxyKX0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSksYT0xMiooaS55ZWFyKCktMSkraS5tb250aCgpLTE1MjkyO3JldHVybiBpLmRheSgpK29bYS0xXS0xKzI0ZTUtLjV9LGZyb21KRDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dC0yNGU1Ky41LHI9MCxuPTA7bjxvLmxlbmd0aCYmIShvW25dPmUpO24rKylyKys7dmFyIGk9cisxNTI5MixhPU1hdGguZmxvb3IoKGktMSkvMTIpLHM9YSsxLGw9aS0xMiphLGM9ZS1vW3ItMV0rMTtyZXR1cm4gdGhpcy5uZXdEYXRlKHMsbCxjKX0saXNWYWxpZDpmdW5jdGlvbih0LGUscil7dmFyIGk9bi5iYXNlQ2FsZW5kYXIucHJvdG90eXBlLmlzVmFsaWQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBpJiYoaT0odD1udWxsIT10LnllYXI/dC55ZWFyOnQpPj0xMjc2JiZ0PD0xNTAwKSxpfSxfdmFsaWRhdGU6ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGE9bi5iYXNlQ2FsZW5kYXIucHJvdG90eXBlLl92YWxpZGF0ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aWYoYS55ZWFyPDEyNzZ8fGEueWVhcj4xNTAwKXRocm93IGkucmVwbGFjZSgvXHswXH0vLHRoaXMubG9jYWwubmFtZSk7cmV0dXJuIGF9fSksbi5jYWxlbmRhcnMudW1tYWxxdXJhPWE7dmFyIG89WzIwLDUwLDc5LDEwOSwxMzgsMTY4LDE5NywyMjcsMjU2LDI4NiwzMTUsMzQ1LDM3NCw0MDQsNDMzLDQ2Myw0OTIsNTIyLDU1MSw1ODEsNjExLDY0MSw2NzAsNzAwLDcyOSw3NTksNzg4LDgxOCw4NDcsODc3LDkwNiw5MzYsOTY1LDk5NSwxMDI0LDEwNTQsMTA4MywxMTEzLDExNDIsMTE3MiwxMjAxLDEyMzEsMTI2MCwxMjkwLDEzMjAsMTM1MCwxMzc5LDE0MDksMTQzOCwxNDY4LDE0OTcsMTUyNywxNTU2LDE1ODYsMTYxNSwxNjQ1LDE2NzQsMTcwNCwxNzMzLDE3NjMsMTc5MiwxODIyLDE4NTEsMTg4MSwxOTEwLDE5NDAsMTk2OSwxOTk5LDIwMjgsMjA1OCwyMDg3LDIxMTcsMjE0NiwyMTc2LDIyMDUsMjIzNSwyMjY0LDIyOTQsMjMyMywyMzUzLDIzODMsMjQxMywyNDQyLDI0NzIsMjUwMSwyNTMxLDI1NjAsMjU5MCwyNjE5LDI2NDksMjY3OCwyNzA4LDI3MzcsMjc2NywyNzk2LDI4MjYsMjg1NSwyODg1LDI5MTQsMjk0NCwyOTczLDMwMDMsMzAzMiwzMDYyLDMwOTEsMzEyMSwzMTUwLDMxODAsMzIwOSwzMjM5LDMyNjgsMzI5OCwzMzI3LDMzNTcsMzM4NiwzNDE2LDM0NDYsMzQ3NiwzNTA1LDM1MzUsMzU2NCwzNTk0LDM2MjMsMzY1MywzNjgyLDM3MTIsMzc0MSwzNzcxLDM4MDAsMzgzMCwzODU5LDM4ODksMzkxOCwzOTQ4LDM5NzcsNDAwNyw0MDM2LDQwNjYsNDA5NSw0MTI1LDQxNTUsNDE4NSw0MjE0LDQyNDQsNDI3Myw0MzAzLDQzMzIsNDM2Miw0MzkxLDQ0MjEsNDQ1MCw0NDgwLDQ1MDksNDUzOSw0NTY4LDQ1OTgsNDYyNyw0NjU3LDQ2ODYsNDcxNiw0NzQ1LDQ3NzUsNDgwNCw0ODM0LDQ4NjMsNDg5Myw0OTIyLDQ5NTIsNDk4MSw1MDExLDUwNDAsNTA3MCw1MDk5LDUxMjksNTE1OCw1MTg4LDUyMTgsNTI0OCw1Mjc3LDUzMDcsNTMzNiw1MzY2LDUzOTUsNTQyNSw1NDU0LDU0ODQsNTUxMyw1NTQzLDU1NzIsNTYwMiw1NjMxLDU2NjEsNTY5MCw1NzIwLDU3NDksNTc3OSw1ODA4LDU4MzgsNTg2Nyw1ODk3LDU5MjYsNTk1Niw1OTg1LDYwMTUsNjA0NCw2MDc0LDYxMDMsNjEzMyw2MTYyLDYxOTIsNjIyMSw2MjUxLDYyODEsNjMxMSw2MzQwLDYzNzAsNjM5OSw2NDI5LDY0NTgsNjQ4OCw2NTE3LDY1NDcsNjU3Niw2NjA2LDY2MzUsNjY2NSw2Njk0LDY3MjQsNjc1Myw2NzgzLDY4MTIsNjg0Miw2ODcxLDY5MDEsNjkzMCw2OTYwLDY5ODksNzAxOSw3MDQ4LDcwNzgsNzEwNyw3MTM3LDcxNjYsNzE5Niw3MjI1LDcyNTUsNzI4NCw3MzE0LDczNDQsNzM3NCw3NDAzLDc0MzMsNzQ2Miw3NDkyLDc1MjEsNzU1MSw3NTgwLDc2MTAsNzYzOSw3NjY5LDc2OTgsNzcyOCw3NzU3LDc3ODcsNzgxNiw3ODQ2LDc4NzUsNzkwNSw3OTM0LDc5NjQsNzk5Myw4MDIzLDgwNTMsODA4Myw4MTEyLDgxNDIsODE3MSw4MjAxLDgyMzAsODI2MCw4Mjg5LDgzMTksODM0OCw4Mzc4LDg0MDcsODQzNyw4NDY2LDg0OTYsODUyNSw4NTU1LDg1ODQsODYxNCw4NjQzLDg2NzMsODcwMiw4NzMyLDg3NjEsODc5MSw4ODIxLDg4NTAsODg4MCw4OTA5LDg5MzgsODk2OCw4OTk3LDkwMjcsOTA1Niw5MDg2LDkxMTUsOTE0NSw5MTc1LDkyMDUsOTIzNCw5MjY0LDkyOTMsOTMyMiw5MzUyLDkzODEsOTQxMCw5NDQwLDk0NzAsOTQ5OSw5NTI5LDk1NTksOTU4OSw5NjE4LDk2NDgsOTY3Nyw5NzA2LDk3MzYsOTc2NSw5Nzk0LDk4MjQsOTg1Myw5ODgzLDk5MTMsOTk0Myw5OTcyLDEwMDAyLDEwMDMyLDEwMDYxLDEwMDkwLDEwMTIwLDEwMTQ5LDEwMTc4LDEwMjA4LDEwMjM3LDEwMjY3LDEwMjk3LDEwMzI2LDEwMzU2LDEwMzg2LDEwNDE1LDEwNDQ1LDEwNDc0LDEwNTA0LDEwNTMzLDEwNTYyLDEwNTkyLDEwNjIxLDEwNjUxLDEwNjgwLDEwNzEwLDEwNzQwLDEwNzcwLDEwNzk5LDEwODI5LDEwODU4LDEwODg4LDEwOTE3LDEwOTQ3LDEwOTc2LDExMDA1LDExMDM1LDExMDY0LDExMDk0LDExMTI0LDExMTUzLDExMTgzLDExMjEzLDExMjQyLDExMjcyLDExMzAxLDExMzMxLDExMzYwLDExMzg5LDExNDE5LDExNDQ4LDExNDc4LDExNTA3LDExNTM3LDExNTY3LDExNTk2LDExNjI2LDExNjU1LDExNjg1LDExNzE1LDExNzQ0LDExNzc0LDExODAzLDExODMyLDExODYyLDExODkxLDExOTIxLDExOTUwLDExOTgwLDEyMDEwLDEyMDM5LDEyMDY5LDEyMDk5LDEyMTI4LDEyMTU4LDEyMTg3LDEyMjE2LDEyMjQ2LDEyMjc1LDEyMzA0LDEyMzM0LDEyMzY0LDEyMzkzLDEyNDIzLDEyNDUzLDEyNDgzLDEyNTEyLDEyNTQyLDEyNTcxLDEyNjAwLDEyNjMwLDEyNjU5LDEyNjg4LDEyNzE4LDEyNzQ3LDEyNzc3LDEyODA3LDEyODM3LDEyODY2LDEyODk2LDEyOTI2LDEyOTU1LDEyOTg0LDEzMDE0LDEzMDQzLDEzMDcyLDEzMTAyLDEzMTMxLDEzMTYxLDEzMTkxLDEzMjIwLDEzMjUwLDEzMjgwLDEzMzEwLDEzMzM5LDEzMzY4LDEzMzk4LDEzNDI3LDEzNDU2LDEzNDg2LDEzNTE1LDEzNTQ1LDEzNTc0LDEzNjA0LDEzNjM0LDEzNjY0LDEzNjkzLDEzNzIzLDEzNzUyLDEzNzgyLDEzODExLDEzODQwLDEzODcwLDEzODk5LDEzOTI5LDEzOTU4LDEzOTg4LDE0MDE4LDE0MDQ3LDE0MDc3LDE0MTA3LDE0MTM2LDE0MTY2LDE0MTk1LDE0MjI0LDE0MjU0LDE0MjgzLDE0MzEzLDE0MzQyLDE0MzcyLDE0NDAxLDE0NDMxLDE0NDYxLDE0NDkwLDE0NTIwLDE0NTUwLDE0NTc5LDE0NjA5LDE0NjM4LDE0NjY3LDE0Njk3LDE0NzI2LDE0NzU2LDE0Nzg1LDE0ODE1LDE0ODQ0LDE0ODc0LDE0OTA0LDE0OTMzLDE0OTYzLDE0OTkzLDE1MDIxLDE1MDUxLDE1MDgxLDE1MTEwLDE1MTQwLDE1MTY5LDE1MTk5LDE1MjI4LDE1MjU4LDE1Mjg3LDE1MzE3LDE1MzQ3LDE1Mzc3LDE1NDA2LDE1NDM2LDE1NDY1LDE1NDk0LDE1NTI0LDE1NTUzLDE1NTgyLDE1NjEyLDE1NjQxLDE1NjcxLDE1NzAxLDE1NzMxLDE1NzYwLDE1NzkwLDE1ODIwLDE1ODQ5LDE1ODc4LDE1OTA4LDE1OTM3LDE1OTY2LDE1OTk2LDE2MDI1LDE2MDU1LDE2MDg1LDE2MTE0LDE2MTQ0LDE2MTc0LDE2MjA0LDE2MjMzLDE2MjYyLDE2MjkyLDE2MzIxLDE2MzUwLDE2MzgwLDE2NDA5LDE2NDM5LDE2NDY4LDE2NDk4LDE2NTI4LDE2NTU4LDE2NTg3LDE2NjE3LDE2NjQ2LDE2Njc2LDE2NzA1LDE2NzM0LDE2NzY0LDE2NzkzLDE2ODIzLDE2ODUyLDE2ODgyLDE2OTEyLDE2OTQxLDE2OTcxLDE3MDAxLDE3MDMwLDE3MDYwLDE3MDg5LDE3MTE4LDE3MTQ4LDE3MTc3LDE3MjA3LDE3MjM2LDE3MjY2LDE3Mjk1LDE3MzI1LDE3MzU1LDE3Mzg0LDE3NDE0LDE3NDQ0LDE3NDczLDE3NTAyLDE3NTMyLDE3NTYxLDE3NTkxLDE3NjIwLDE3NjUwLDE3Njc5LDE3NzA5LDE3NzM4LDE3NzY4LDE3Nzk4LDE3ODI3LDE3ODU3LDE3ODg2LDE3OTE2LDE3OTQ1LDE3OTc1LDE4MDA0LDE4MDM0LDE4MDYzLDE4MDkzLDE4MTIyLDE4MTUyLDE4MTgxLDE4MjExLDE4MjQxLDE4MjcwLDE4MzAwLDE4MzMwLDE4MzU5LDE4Mzg4LDE4NDE4LDE4NDQ3LDE4NDc2LDE4NTA2LDE4NTM1LDE4NTY1LDE4NTk1LDE4NjI1LDE4NjU0LDE4Njg0LDE4NzE0LDE4NzQzLDE4NzcyLDE4ODAyLDE4ODMxLDE4ODYwLDE4ODkwLDE4OTE5LDE4OTQ5LDE4OTc5LDE5MDA4LDE5MDM4LDE5MDY4LDE5MDk4LDE5MTI3LDE5MTU2LDE5MTg2LDE5MjE1LDE5MjQ0LDE5Mjc0LDE5MzAzLDE5MzMzLDE5MzYyLDE5MzkyLDE5NDIyLDE5NDUyLDE5NDgxLDE5NTExLDE5NTQwLDE5NTcwLDE5NTk5LDE5NjI4LDE5NjU4LDE5Njg3LDE5NzE3LDE5NzQ2LDE5Nzc2LDE5ODA2LDE5ODM2LDE5ODY1LDE5ODk1LDE5OTI0LDE5OTU0LDE5OTgzLDIwMDEyLDIwMDQyLDIwMDcxLDIwMTAxLDIwMTMwLDIwMTYwLDIwMTkwLDIwMjE5LDIwMjQ5LDIwMjc5LDIwMzA4LDIwMzM4LDIwMzY3LDIwMzk2LDIwNDI2LDIwNDU1LDIwNDg1LDIwNTE0LDIwNTQ0LDIwNTczLDIwNjAzLDIwNjMzLDIwNjYyLDIwNjkyLDIwNzIxLDIwNzUxLDIwNzgwLDIwODEwLDIwODM5LDIwODY5LDIwODk4LDIwOTI4LDIwOTU3LDIwOTg3LDIxMDE2LDIxMDQ2LDIxMDc2LDIxMTA1LDIxMTM1LDIxMTY0LDIxMTk0LDIxMjIzLDIxMjUzLDIxMjgyLDIxMzEyLDIxMzQxLDIxMzcxLDIxNDAwLDIxNDMwLDIxNDU5LDIxNDg5LDIxNTE5LDIxNTQ4LDIxNTc4LDIxNjA3LDIxNjM3LDIxNjY2LDIxNjk2LDIxNzI1LDIxNzU0LDIxNzg0LDIxODEzLDIxODQzLDIxODczLDIxOTAyLDIxOTMyLDIxOTYyLDIxOTkxLDIyMDIxLDIyMDUwLDIyMDgwLDIyMTA5LDIyMTM4LDIyMTY4LDIyMTk3LDIyMjI3LDIyMjU2LDIyMjg2LDIyMzE2LDIyMzQ2LDIyMzc1LDIyNDA1LDIyNDM0LDIyNDY0LDIyNDkzLDIyNTIyLDIyNTUyLDIyNTgxLDIyNjExLDIyNjQwLDIyNjcwLDIyNzAwLDIyNzMwLDIyNzU5LDIyNzg5LDIyODE4LDIyODQ4LDIyODc3LDIyOTA2LDIyOTM2LDIyOTY1LDIyOTk0LDIzMDI0LDIzMDU0LDIzMDgzLDIzMTEzLDIzMTQzLDIzMTczLDIzMjAyLDIzMjMyLDIzMjYxLDIzMjkwLDIzMzIwLDIzMzQ5LDIzMzc5LDIzNDA4LDIzNDM4LDIzNDY3LDIzNDk3LDIzNTI3LDIzNTU2LDIzNTg2LDIzNjE2LDIzNjQ1LDIzNjc0LDIzNzA0LDIzNzMzLDIzNzYzLDIzNzkyLDIzODIyLDIzODUxLDIzODgxLDIzOTEwLDIzOTQwLDIzOTcwLDIzOTk5LDI0MDI5LDI0MDU4LDI0MDg4LDI0MTE3LDI0MTQ3LDI0MTc2LDI0MjA2LDI0MjM1LDI0MjY1LDI0Mjk0LDI0MzI0LDI0MzUzLDI0MzgzLDI0NDEzLDI0NDQyLDI0NDcyLDI0NTAxLDI0NTMxLDI0NTYwLDI0NTkwLDI0NjE5LDI0NjQ4LDI0Njc4LDI0NzA3LDI0NzM3LDI0NzY3LDI0Nzk2LDI0ODI2LDI0ODU2LDI0ODg1LDI0OTE1LDI0OTQ0LDI0OTc0LDI1MDAzLDI1MDMyLDI1MDYyLDI1MDkxLDI1MTIxLDI1MTUwLDI1MTgwLDI1MjEwLDI1MjQwLDI1MjY5LDI1Mjk5LDI1MzI4LDI1MzU4LDI1Mzg3LDI1NDE2LDI1NDQ2LDI1NDc1LDI1NTA1LDI1NTM0LDI1NTY0LDI1NTk0LDI1NjI0LDI1NjUzLDI1NjgzLDI1NzEyLDI1NzQyLDI1NzcxLDI1ODAwLDI1ODMwLDI1ODU5LDI1ODg4LDI1OTE4LDI1OTQ4LDI1OTc3LDI2MDA3LDI2MDM3LDI2MDY3LDI2MDk2LDI2MTI2LDI2MTU1LDI2MTg0LDI2MjE0LDI2MjQzLDI2MjcyLDI2MzAyLDI2MzMyLDI2MzYxLDI2MzkxLDI2NDIxLDI2NDUxLDI2NDgwLDI2NTEwLDI2NTM5LDI2NTY4LDI2NTk4LDI2NjI3LDI2NjU2LDI2Njg2LDI2NzE1LDI2NzQ1LDI2Nzc1LDI2ODA1LDI2ODM0LDI2ODY0LDI2ODkzLDI2OTIzLDI2OTUyLDI2OTgyLDI3MDExLDI3MDQxLDI3MDcwLDI3MDk5LDI3MTI5LDI3MTU5LDI3MTg4LDI3MjE4LDI3MjQ4LDI3Mjc3LDI3MzA3LDI3MzM2LDI3MzY2LDI3Mzk1LDI3NDI1LDI3NDU0LDI3NDg0LDI3NTEzLDI3NTQyLDI3NTcyLDI3NjAyLDI3NjMxLDI3NjYxLDI3NjkxLDI3NzIwLDI3NzUwLDI3Nzc5LDI3ODA5LDI3ODM4LDI3ODY4LDI3ODk3LDI3OTI2LDI3OTU2LDI3OTg1LDI4MDE1LDI4MDQ1LDI4MDc0LDI4MTA0LDI4MTM0LDI4MTYzLDI4MTkzLDI4MjIyLDI4MjUyLDI4MjgxLDI4MzEwLDI4MzQwLDI4MzY5LDI4Mzk5LDI4NDI4LDI4NDU4LDI4NDg4LDI4NTE3LDI4NTQ3LDI4NTc3LDI4NjA3LDI4NjM2LDI4NjY1LDI4Njk1LDI4NzI0LDI4NzU0LDI4NzgzLDI4ODEzLDI4ODQzLDI4ODcyLDI4OTAxLDI4OTMxLDI4OTYwLDI4OTkwLDI5MDE5LDI5MDQ5LDI5MDc4LDI5MTA4LDI5MTM3LDI5MTY3LDI5MTk2LDI5MjI2LDI5MjU1LDI5Mjg1LDI5MzE1LDI5MzQ1LDI5Mzc1LDI5NDA0LDI5NDM0LDI5NDYzLDI5NDkyLDI5NTIyLDI5NTUxLDI5NTgwLDI5NjEwLDI5NjQwLDI5NjY5LDI5Njk5LDI5NzI5LDI5NzU5LDI5Nzg4LDI5ODE4LDI5ODQ3LDI5ODc2LDI5OTA2LDI5OTM1LDI5OTY0LDI5OTk0LDMwMDIzLDMwMDUzLDMwMDgyLDMwMTEyLDMwMTQxLDMwMTcxLDMwMjAwLDMwMjMwLDMwMjU5LDMwMjg5LDMwMzE4LDMwMzQ4LDMwMzc4LDMwNDA4LDMwNDM3LDMwNDY3LDMwNDk2LDMwNTI2LDMwNTU1LDMwNTg1LDMwNjE0LDMwNjQ0LDMwNjczLDMwNzAzLDMwNzMyLDMwNzYyLDMwNzkxLDMwODIxLDMwODUwLDMwODgwLDMwOTA5LDMwOTM5LDMwOTY4LDMwOTk4LDMxMDI3LDMxMDU3LDMxMDg2LDMxMTE2LDMxMTQ1LDMxMTc1LDMxMjA0LDMxMjM0LDMxMjYzLDMxMjkzLDMxMzIyLDMxMzUyLDMxMzgxLDMxNDExLDMxNDQxLDMxNDcxLDMxNTAwLDMxNTMwLDMxNTU5LDMxNTg5LDMxNjE4LDMxNjQ4LDMxNjc2LDMxNzA2LDMxNzM2LDMxNzY2LDMxNzk1LDMxODI1LDMxODU0LDMxODg0LDMxOTEzLDMxOTQzLDMxOTcyLDMyMDAyLDMyMDMxLDMyMDYxLDMyMDkwLDMyMTIwLDMyMTUwLDMyMTgwLDMyMjA5LDMyMjM5LDMyMjY4LDMyMjk4LDMyMzI3LDMyMzU3LDMyMzg2LDMyNDE2LDMyNDQ1LDMyNDc1LDMyNTA0LDMyNTM0LDMyNTYzLDMyNTkzLDMyNjIyLDMyNjUyLDMyNjgxLDMyNzExLDMyNzQwLDMyNzcwLDMyNzk5LDMyODI5LDMyODU4LDMyODg4LDMyOTE3LDMyOTQ3LDMyOTc2LDMzMDA2LDMzMDM1LDMzMDY1LDMzMDk0LDMzMTI0LDMzMTUzLDMzMTgzLDMzMjEzLDMzMjQzLDMzMjcyLDMzMzAyLDMzMzMxLDMzMzYxLDMzMzkwLDMzNDIwLDMzNDUwLDMzNDc5LDMzNTA5LDMzNTM5LDMzNTY4LDMzNTk4LDMzNjI3LDMzNjU3LDMzNjg2LDMzNzE2LDMzNzQ1LDMzNzc1LDMzODA0LDMzODM0LDMzODYzLDMzODkzLDMzOTIyLDMzOTUyLDMzOTgxLDM0MDExLDM0MDQwLDM0MDY5LDM0MDk5LDM0MTI4LDM0MTU4LDM0MTg3LDM0MjE3LDM0MjQ3LDM0Mjc3LDM0MzA2LDM0MzM2LDM0MzY1LDM0Mzk1LDM0NDI0LDM0NDU0LDM0NDgzLDM0NTEyLDM0NTQyLDM0NTcxLDM0NjAxLDM0NjMxLDM0NjYwLDM0NjkwLDM0NzE5LDM0NzQ5LDM0Nzc4LDM0ODA4LDM0ODM3LDM0ODY3LDM0ODk2LDM0OTI2LDM0OTU1LDM0OTg1LDM1MDE1LDM1MDQ0LDM1MDc0LDM1MTAzLDM1MTMzLDM1MTYyLDM1MTkyLDM1MjIyLDM1MjUxLDM1MjgwLDM1MzEwLDM1MzQwLDM1MzcwLDM1Mzk5LDM1NDI5LDM1NDU4LDM1NDg4LDM1NTE3LDM1NTQ3LDM1NTc2LDM1NjA1LDM1NjM1LDM1NjY1LDM1Njk0LDM1NzIzLDM1NzUzLDM1NzgyLDM1ODExLDM1ODQxLDM1ODcxLDM1OTAxLDM1OTMwLDM1OTYwLDM1OTg5LDM2MDE5LDM2MDQ4LDM2MDc4LDM2MTA3LDM2MTM2LDM2MTY2LDM2MTk1LDM2MjI1LDM2MjU0LDM2Mjg0LDM2MzE0LDM2MzQzLDM2MzczLDM2NDAzLDM2NDMzLDM2NDYyLDM2NDkyLDM2NTIxLDM2NTUxLDM2NTgwLDM2NjEwLDM2NjM5LDM2NjY5LDM2Njk4LDM2NzI4LDM2NzU3LDM2Nzg2LDM2ODE2LDM2ODQ1LDM2ODc1LDM2OTA0LDM2OTM0LDM2OTYzLDM2OTkzLDM3MDIyLDM3MDUyLDM3MDgxLDM3MTExLDM3MTQxLDM3MTcwLDM3MjAwLDM3MjI5LDM3MjU5LDM3Mjg4LDM3MzE4LDM3MzQ3LDM3Mzc3LDM3NDA2LDM3NDM2LDM3NDY1LDM3NDk1LDM3NTI0LDM3NTU0LDM3NTg0LDM3NjEzLDM3NjQzLDM3NjcyLDM3NzAxLDM3NzMxLDM3NzYwLDM3NzkwLDM3ODE5LDM3ODQ5LDM3ODc4LDM3OTA4LDM3OTM4LDM3OTY3LDM3OTk3LDM4MDI3LDM4MDU2LDM4MDg1LDM4MTE1LDM4MTQ0LDM4MTc0LDM4MjAzLDM4MjMzLDM4MjYyLDM4MjkyLDM4MzIyLDM4MzUxLDM4MzgxLDM4NDEwLDM4NDQwLDM4NDY5LDM4NDk5LDM4NTI4LDM4NTU4LDM4NTg3LDM4NjE3LDM4NjQ2LDM4Njc2LDM4NzA1LDM4NzM1LDM4NzY0LDM4Nzk0LDM4ODIzLDM4ODUzLDM4ODgyLDM4OTEyLDM4OTQxLDM4OTcxLDM5MDAxLDM5MDMwLDM5MDU5LDM5MDg5LDM5MTE4LDM5MTQ4LDM5MTc4LDM5MjA4LDM5MjM3LDM5MjY3LDM5Mjk3LDM5MzI2LDM5MzU1LDM5Mzg1LDM5NDE0LDM5NDQ0LDM5NDczLDM5NTAzLDM5NTMyLDM5NTYyLDM5NTkyLDM5NjIxLDM5NjUwLDM5NjgwLDM5NzA5LDM5NzM5LDM5NzY4LDM5Nzk4LDM5ODI3LDM5ODU3LDM5ODg2LDM5OTE2LDM5OTQ2LDM5OTc1LDQwMDA1LDQwMDM1LDQwMDY0LDQwMDk0LDQwMTIzLDQwMTUzLDQwMTgyLDQwMjEyLDQwMjQxLDQwMjcxLDQwMzAwLDQwMzMwLDQwMzU5LDQwMzg5LDQwNDE4LDQwNDQ4LDQwNDc3LDQwNTA3LDQwNTM2LDQwNTY2LDQwNTk1LDQwNjI1LDQwNjU1LDQwNjg1LDQwNzE0LDQwNzQ0LDQwNzczLDQwODAzLDQwODMyLDQwODYyLDQwODkyLDQwOTIxLDQwOTUxLDQwOTgwLDQxMDA5LDQxMDM5LDQxMDY4LDQxMDk4LDQxMTI3LDQxMTU3LDQxMTg2LDQxMjE2LDQxMjQ1LDQxMjc1LDQxMzA0LDQxMzM0LDQxMzY0LDQxMzkzLDQxNDIyLDQxNDUyLDQxNDgxLDQxNTExLDQxNTQwLDQxNTcwLDQxNTk5LDQxNjI5LDQxNjU4LDQxNjg4LDQxNzE4LDQxNzQ4LDQxNzc3LDQxODA3LDQxODM2LDQxODY1LDQxODk0LDQxOTI0LDQxOTUzLDQxOTgzLDQyMDEyLDQyMDQyLDQyMDcyLDQyMTAyLDQyMTMxLDQyMTYxLDQyMTkwLDQyMjIwLDQyMjQ5LDQyMjc5LDQyMzA4LDQyMzM3LDQyMzY3LDQyMzk3LDQyNDI2LDQyNDU2LDQyNDg1LDQyNTE1LDQyNTQ1LDQyNTc0LDQyNjA0LDQyNjMzLDQyNjYyLDQyNjkyLDQyNzIxLDQyNzUxLDQyNzgwLDQyODEwLDQyODM5LDQyODY5LDQyODk5LDQyOTI5LDQyOTU4LDQyOTg4LDQzMDE3LDQzMDQ2LDQzMDc2LDQzMTA1LDQzMTM1LDQzMTY0LDQzMTk0LDQzMjIzLDQzMjUzLDQzMjgzLDQzMzEyLDQzMzQyLDQzMzcxLDQzNDAxLDQzNDMwLDQzNDYwLDQzNDg5LDQzNTE5LDQzNTQ4LDQzNTc4LDQzNjA3LDQzNjM3LDQzNjY2LDQzNjk2LDQzNzI2LDQzNzU1LDQzNzg1LDQzODE0LDQzODQ0LDQzODczLDQzOTAzLDQzOTMyLDQzOTYyLDQzOTkxLDQ0MDIxLDQ0MDUwLDQ0MDgwLDQ0MTA5LDQ0MTM5LDQ0MTY5LDQ0MTk4LDQ0MjI4LDQ0MjU4LDQ0Mjg3LDQ0MzE3LDQ0MzQ2LDQ0Mzc1LDQ0NDA1LDQ0NDM0LDQ0NDY0LDQ0NDkzLDQ0NTIzLDQ0NTUzLDQ0NTgyLDQ0NjEyLDQ0NjQxLDQ0NjcxLDQ0NzAwLDQ0NzMwLDQ0NzU5LDQ0Nzg4LDQ0ODE4LDQ0ODQ3LDQ0ODc3LDQ0OTA2LDQ0OTM2LDQ0OTY2LDQ0OTk2LDQ1MDI1LDQ1MDU1LDQ1MDg0LDQ1MTE0LDQ1MTQzLDQ1MTcyLDQ1MjAyLDQ1MjMxLDQ1MjYxLDQ1MjkwLDQ1MzIwLDQ1MzUwLDQ1MzgwLDQ1NDA5LDQ1NDM5LDQ1NDY4LDQ1NDk4LDQ1NTI3LDQ1NTU2LDQ1NTg2LDQ1NjE1LDQ1NjQ0LDQ1Njc0LDQ1NzA0LDQ1NzMzLDQ1NzYzLDQ1NzkzLDQ1ODIzLDQ1ODUyLDQ1ODgyLDQ1OTExLDQ1OTQwLDQ1OTcwLDQ1OTk5LDQ2MDI4LDQ2MDU4LDQ2MDg4LDQ2MTE3LDQ2MTQ3LDQ2MTc3LDQ2MjA2LDQ2MjM2LDQ2MjY1LDQ2Mjk1LDQ2MzI0LDQ2MzU0LDQ2MzgzLDQ2NDEzLDQ2NDQyLDQ2NDcyLDQ2NTAxLDQ2NTMxLDQ2NTYwLDQ2NTkwLDQ2NjIwLDQ2NjQ5LDQ2Njc5LDQ2NzA4LDQ2NzM4LDQ2NzY3LDQ2Nzk3LDQ2ODI2LDQ2ODU2LDQ2ODg1LDQ2OTE1LDQ2OTQ0LDQ2OTc0LDQ3MDAzLDQ3MDMzLDQ3MDYzLDQ3MDkyLDQ3MTIyLDQ3MTUxLDQ3MTgxLDQ3MjEwLDQ3MjQwLDQ3MjY5LDQ3Mjk4LDQ3MzI4LDQ3MzU3LDQ3Mzg3LDQ3NDE3LDQ3NDQ2LDQ3NDc2LDQ3NTA2LDQ3NTM1LDQ3NTY1LDQ3NTk0LDQ3NjI0LDQ3NjUzLDQ3NjgyLDQ3NzEyLDQ3NzQxLDQ3NzcxLDQ3ODAwLDQ3ODMwLDQ3ODYwLDQ3ODkwLDQ3OTE5LDQ3OTQ5LDQ3OTc4LDQ4MDA4LDQ4MDM3LDQ4MDY2LDQ4MDk2LDQ4MTI1LDQ4MTU1LDQ4MTg0LDQ4MjE0LDQ4MjQ0LDQ4MjczLDQ4MzAzLDQ4MzMzLDQ4MzYyLDQ4MzkyLDQ4NDIxLDQ4NDUwLDQ4NDgwLDQ4NTA5LDQ4NTM4LDQ4NTY4LDQ4NTk4LDQ4NjI3LDQ4NjU3LDQ4Njg3LDQ4NzE3LDQ4NzQ2LDQ4Nzc2LDQ4ODA1LDQ4ODM0LDQ4ODY0LDQ4ODkzLDQ4OTIyLDQ4OTUyLDQ4OTgyLDQ5MDExLDQ5MDQxLDQ5MDcxLDQ5MTAwLDQ5MTMwLDQ5MTYwLDQ5MTg5LDQ5MjE4LDQ5MjQ4LDQ5Mjc3LDQ5MzA2LDQ5MzM2LDQ5MzY1LDQ5Mzk1LDQ5NDI1LDQ5NDU1LDQ5NDg0LDQ5NTE0LDQ5NTQzLDQ5NTczLDQ5NjAyLDQ5NjMyLDQ5NjYxLDQ5NjkwLDQ5NzIwLDQ5NzQ5LDQ5Nzc5LDQ5ODA5LDQ5ODM4LDQ5ODY4LDQ5ODk4LDQ5OTI3LDQ5OTU3LDQ5OTg2LDUwMDE2LDUwMDQ1LDUwMDc1LDUwMTA0LDUwMTMzLDUwMTYzLDUwMTkyLDUwMjIyLDUwMjUyLDUwMjgxLDUwMzExLDUwMzQwLDUwMzcwLDUwNDAwLDUwNDI5LDUwNDU5LDUwNDg4LDUwNTE4LDUwNTQ3LDUwNTc2LDUwNjA2LDUwNjM1LDUwNjY1LDUwNjk0LDUwNzI0LDUwNzU0LDUwNzg0LDUwODEzLDUwODQzLDUwODcyLDUwOTAyLDUwOTMxLDUwOTYwLDUwOTkwLDUxMDE5LDUxMDQ5LDUxMDc4LDUxMTA4LDUxMTM4LDUxMTY3LDUxMTk3LDUxMjI3LDUxMjU2LDUxMjg2LDUxMzE1LDUxMzQ1LDUxMzc0LDUxNDAzLDUxNDMzLDUxNDYyLDUxNDkyLDUxNTIyLDUxNTUyLDUxNTgyLDUxNjExLDUxNjQxLDUxNjcwLDUxNjk5LDUxNzI5LDUxNzU4LDUxNzg3LDUxODE2LDUxODQ2LDUxODc2LDUxOTA2LDUxOTM2LDUxOTY1LDUxOTk1LDUyMDI1LDUyMDU0LDUyMDgzLDUyMTEzLDUyMTQyLDUyMTcxLDUyMjAwLDUyMjMwLDUyMjYwLDUyMjkwLDUyMzE5LDUyMzQ5LDUyMzc5LDUyNDA4LDUyNDM4LDUyNDY3LDUyNDk3LDUyNTI2LDUyNTU1LDUyNTg1LDUyNjE0LDUyNjQ0LDUyNjczLDUyNzAzLDUyNzMzLDUyNzYyLDUyNzkyLDUyODIyLDUyODUxLDUyODgxLDUyOTEwLDUyOTM5LDUyOTY5LDUyOTk4LDUzMDI4LDUzMDU3LDUzMDg3LDUzMTE2LDUzMTQ2LDUzMTc2LDUzMjA1LDUzMjM1LDUzMjY0LDUzMjk0LDUzMzI0LDUzMzUzLDUzMzgzLDUzNDEyLDUzNDQxLDUzNDcxLDUzNTAwLDUzNTMwLDUzNTU5LDUzNTg5LDUzNjE5LDUzNjQ4LDUzNjc4LDUzNzA4LDUzNzM3LDUzNzY3LDUzNzk2LDUzODI1LDUzODU1LDUzODg0LDUzOTEzLDUzOTQzLDUzOTczLDU0MDAzLDU0MDMyLDU0MDYyLDU0MDkyLDU0MTIxLDU0MTUxLDU0MTgwLDU0MjA5LDU0MjM5LDU0MjY4LDU0Mjk3LDU0MzI3LDU0MzU3LDU0Mzg3LDU0NDE2LDU0NDQ2LDU0NDc2LDU0NTA1LDU0NTM1LDU0NTY0LDU0NTkzLDU0NjIzLDU0NjUyLDU0NjgxLDU0NzExLDU0NzQxLDU0NzcwLDU0ODAwLDU0ODMwLDU0ODU5LDU0ODg5LDU0OTE5LDU0OTQ4LDU0OTc3LDU1MDA3LDU1MDM2LDU1MDY2LDU1MDk1LDU1MTI1LDU1MTU0LDU1MTg0LDU1MjEzLDU1MjQzLDU1MjczLDU1MzAyLDU1MzMyLDU1MzYxLDU1MzkxLDU1NDIwLDU1NDUwLDU1NDc5LDU1NTA4LDU1NTM4LDU1NTY3LDU1NTk3LDU1NjI3LDU1NjU3LDU1Njg2LDU1NzE2LDU1NzQ1LDU1Nzc1LDU1ODA0LDU1ODM0LDU1ODYzLDU1ODkyLDU1OTIyLDU1OTUxLDU1OTgxLDU2MDExLDU2MDQwLDU2MDcwLDU2MTAwLDU2MTI5LDU2MTU5LDU2MTg4LDU2MjE4LDU2MjQ3LDU2Mjc2LDU2MzA2LDU2MzM1LDU2MzY1LDU2Mzk0LDU2NDI0LDU2NDU0LDU2NDgzLDU2NTEzLDU2NTQzLDU2NTcyLDU2NjAxLDU2NjMxLDU2NjYwLDU2NjkwLDU2NzE5LDU2NzQ5LDU2Nzc4LDU2ODA4LDU2ODM3LDU2ODY3LDU2ODk3LDU2OTI2LDU2OTU2LDU2OTg1LDU3MDE1LDU3MDQ0LDU3MDc0LDU3MTAzLDU3MTMzLDU3MTYyLDU3MTkyLDU3MjIxLDU3MjUxLDU3MjgwLDU3MzEwLDU3MzQwLDU3MzY5LDU3Mzk5LDU3NDI5LDU3NDU4LDU3NDg3LDU3NTE3LDU3NTQ2LDU3NTc2LDU3NjA1LDU3NjM0LDU3NjY0LDU3Njk0LDU3NzIzLDU3NzUzLDU3NzgzLDU3ODEzLDU3ODQyLDU3ODcxLDU3OTAxLDU3OTMwLDU3OTU5LDU3OTg5LDU4MDE4LDU4MDQ4LDU4MDc3LDU4MTA3LDU4MTM3LDU4MTY3LDU4MTk2LDU4MjI2LDU4MjU1LDU4Mjg1LDU4MzE0LDU4MzQzLDU4MzczLDU4NDAyLDU4NDMyLDU4NDYxLDU4NDkxLDU4NTIxLDU4NTUxLDU4NTgwLDU4NjEwLDU4NjM5LDU4NjY5LDU4Njk4LDU4NzI3LDU4NzU3LDU4Nzg2LDU4ODE2LDU4ODQ1LDU4ODc1LDU4OTA1LDU4OTM0LDU4OTY0LDU4OTk0LDU5MDIzLDU5MDUzLDU5MDgyLDU5MTExLDU5MTQxLDU5MTcwLDU5MjAwLDU5MjI5LDU5MjU5LDU5Mjg4LDU5MzE4LDU5MzQ4LDU5Mzc3LDU5NDA3LDU5NDM2LDU5NDY2LDU5NDk1LDU5NTI1LDU5NTU0LDU5NTg0LDU5NjEzLDU5NjQzLDU5NjcyLDU5NzAyLDU5NzMxLDU5NzYxLDU5NzkxLDU5ODIwLDU5ODUwLDU5ODc5LDU5OTA5LDU5OTM5LDU5OTY4LDU5OTk3LDYwMDI3LDYwMDU2LDYwMDg2LDYwMTE1LDYwMTQ1LDYwMTc0LDYwMjA0LDYwMjM0LDYwMjY0LDYwMjkzLDYwMzIzLDYwMzUyLDYwMzgxLDYwNDExLDYwNDQwLDYwNDY5LDYwNDk5LDYwNTI4LDYwNTU4LDYwNTg4LDYwNjE4LDYwNjQ4LDYwNjc3LDYwNzA3LDYwNzM2LDYwNzY1LDYwNzk1LDYwODI0LDYwODUzLDYwODgzLDYwOTEyLDYwOTQyLDYwOTcyLDYxMDAyLDYxMDMxLDYxMDYxLDYxMDkwLDYxMTIwLDYxMTQ5LDYxMTc5LDYxMjA4LDYxMjM3LDYxMjY3LDYxMjk2LDYxMzI2LDYxMzU2LDYxMzg1LDYxNDE1LDYxNDQ1LDYxNDc0LDYxNTA0LDYxNTMzLDYxNTYzLDYxNTkyLDYxNjIxLDYxNjUxLDYxNjgwLDYxNzEwLDYxNzM5LDYxNzY5LDYxNzk5LDYxODI4LDYxODU4LDYxODg4LDYxOTE3LDYxOTQ3LDYxOTc2LDYyMDA2LDYyMDM1LDYyMDY0LDYyMDk0LDYyMTIzLDYyMTUzLDYyMTgyLDYyMjEyLDYyMjQyLDYyMjcxLDYyMzAxLDYyMzMxLDYyMzYwLDYyMzkwLDYyNDE5LDYyNDQ4LDYyNDc4LDYyNTA3LDYyNTM3LDYyNTY2LDYyNTk2LDYyNjI1LDYyNjU1LDYyNjg1LDYyNzE1LDYyNzQ0LDYyNzc0LDYyODAzLDYyODMyLDYyODYyLDYyODkxLDYyOTIxLDYyOTUwLDYyOTgwLDYzMDA5LDYzMDM5LDYzMDY5LDYzMDk5LDYzMTI4LDYzMTU3LDYzMTg3LDYzMjE2LDYzMjQ2LDYzMjc1LDYzMzA1LDYzMzM0LDYzMzYzLDYzMzkzLDYzNDIzLDYzNDUzLDYzNDgyLDYzNTEyLDYzNTQxLDYzNTcxLDYzNjAwLDYzNjMwLDYzNjU5LDYzNjg5LDYzNzE4LDYzNzQ3LDYzNzc3LDYzODA3LDYzODM2LDYzODY2LDYzODk1LDYzOTI1LDYzOTU1LDYzOTg0LDY0MDE0LDY0MDQzLDY0MDczLDY0MTAyLDY0MTMxLDY0MTYxLDY0MTkwLDY0MjIwLDY0MjQ5LDY0Mjc5LDY0MzA5LDY0MzM5LDY0MzY4LDY0Mzk4LDY0NDI3LDY0NDU3LDY0NDg2LDY0NTE1LDY0NTQ1LDY0NTc0LDY0NjAzLDY0NjMzLDY0NjYzLDY0NjkyLDY0NzIyLDY0NzUyLDY0NzgyLDY0ODExLDY0ODQxLDY0ODcwLDY0ODk5LDY0OTI5LDY0OTU4LDY0OTg3LDY1MDE3LDY1MDQ3LDY1MDc2LDY1MTA2LDY1MTM2LDY1MTY2LDY1MTk1LDY1MjI1LDY1MjU0LDY1MjgzLDY1MzEzLDY1MzQyLDY1MzcxLDY1NDAxLDY1NDMxLDY1NDYwLDY1NDkwLDY1NTIwLDY1NTQ5LDY1NTc5LDY1NjA4LDY1NjM4LDY1NjY3LDY1Njk3LDY1NzI2LDY1NzU1LDY1Nzg1LDY1ODE1LDY1ODQ0LDY1ODc0LDY1OTAzLDY1OTMzLDY1OTYzLDY1OTkyLDY2MDIyLDY2MDUxLDY2MDgxLDY2MTEwLDY2MTQwLDY2MTY5LDY2MTk5LDY2MjI4LDY2MjU4LDY2Mjg3LDY2MzE3LDY2MzQ2LDY2Mzc2LDY2NDA1LDY2NDM1LDY2NDY1LDY2NDk0LDY2NTI0LDY2NTUzLDY2NTgzLDY2NjEyLDY2NjQxLDY2NjcxLDY2NzAwLDY2NzMwLDY2NzYwLDY2Nzg5LDY2ODE5LDY2ODQ5LDY2ODc4LDY2OTA4LDY2OTM3LDY2OTY3LDY2OTk2LDY3MDI1LDY3MDU1LDY3MDg0LDY3MTE0LDY3MTQzLDY3MTczLDY3MjAzLDY3MjMzLDY3MjYyLDY3MjkyLDY3MzIxLDY3MzUxLDY3MzgwLDY3NDA5LDY3NDM5LDY3NDY4LDY3NDk3LDY3NTI3LDY3NTU3LDY3NTg3LDY3NjE3LDY3NjQ2LDY3Njc2LDY3NzA1LDY3NzM1LDY3NzY0LDY3NzkzLDY3ODIzLDY3ODUyLDY3ODgyLDY3OTExLDY3OTQxLDY3OTcxLDY4ZTMsNjgwMzAsNjgwNjAsNjgwODksNjgxMTksNjgxNDgsNjgxNzcsNjgyMDcsNjgyMzYsNjgyNjYsNjgyOTUsNjgzMjUsNjgzNTQsNjgzODQsNjg0MTQsNjg0NDMsNjg0NzMsNjg1MDIsNjg1MzIsNjg1NjEsNjg1OTEsNjg2MjAsNjg2NTAsNjg2NzksNjg3MDgsNjg3MzgsNjg3NjgsNjg3OTcsNjg4MjcsNjg4NTcsNjg4ODYsNjg5MTYsNjg5NDYsNjg5NzUsNjkwMDQsNjkwMzQsNjkwNjMsNjkwOTIsNjkxMjIsNjkxNTIsNjkxODEsNjkyMTEsNjkyNDAsNjkyNzAsNjkzMDAsNjkzMzAsNjkzNTksNjkzODgsNjk0MTgsNjk0NDcsNjk0NzYsNjk1MDYsNjk1MzUsNjk1NjUsNjk1OTUsNjk2MjQsNjk2NTQsNjk2ODQsNjk3MTMsNjk3NDMsNjk3NzIsNjk4MDIsNjk4MzEsNjk4NjEsNjk4OTAsNjk5MTksNjk5NDksNjk5NzgsNzAwMDgsNzAwMzgsNzAwNjcsNzAwOTcsNzAxMjYsNzAxNTYsNzAxODYsNzAyMTUsNzAyNDUsNzAyNzQsNzAzMDMsNzAzMzMsNzAzNjIsNzAzOTIsNzA0MjEsNzA0NTEsNzA0ODEsNzA1MTAsNzA1NDAsNzA1NzAsNzA1OTksNzA2MjksNzA2NTgsNzA2ODcsNzA3MTcsNzA3NDYsNzA3NzYsNzA4MDUsNzA4MzUsNzA4NjQsNzA4OTQsNzA5MjQsNzA5NTQsNzA5ODMsNzEwMTMsNzEwNDIsNzEwNzEsNzExMDEsNzExMzAsNzExNTksNzExODksNzEyMTgsNzEyNDgsNzEyNzgsNzEzMDgsNzEzMzcsNzEzNjcsNzEzOTcsNzE0MjYsNzE0NTUsNzE0ODUsNzE1MTQsNzE1NDMsNzE1NzMsNzE2MDIsNzE2MzIsNzE2NjIsNzE2OTEsNzE3MjEsNzE3NTEsNzE3ODEsNzE4MTAsNzE4MzksNzE4NjksNzE4OTgsNzE5MjcsNzE5NTcsNzE5ODYsNzIwMTYsNzIwNDYsNzIwNzUsNzIxMDUsNzIxMzUsNzIxNjQsNzIxOTQsNzIyMjMsNzIyNTMsNzIyODIsNzIzMTEsNzIzNDEsNzIzNzAsNzI0MDAsNzI0MjksNzI0NTksNzI0ODksNzI1MTgsNzI1NDgsNzI1NzcsNzI2MDcsNzI2MzcsNzI2NjYsNzI2OTUsNzI3MjUsNzI3NTQsNzI3ODQsNzI4MTMsNzI4NDMsNzI4NzIsNzI5MDIsNzI5MzEsNzI5NjEsNzI5OTEsNzMwMjAsNzMwNTAsNzMwODAsNzMxMDksNzMxMzksNzMxNjgsNzMxOTcsNzMyMjcsNzMyNTYsNzMyODYsNzMzMTUsNzMzNDUsNzMzNzUsNzM0MDQsNzM0MzQsNzM0NjQsNzM0OTMsNzM1MjMsNzM1NTIsNzM1ODEsNzM2MTEsNzM2NDAsNzM2NjksNzM2OTksNzM3MjksNzM3NTgsNzM3ODgsNzM4MTgsNzM4NDgsNzM4NzcsNzM5MDcsNzM5MzYsNzM5NjUsNzM5OTUsNzQwMjQsNzQwNTMsNzQwODMsNzQxMTMsNzQxNDIsNzQxNzIsNzQyMDIsNzQyMzEsNzQyNjEsNzQyOTEsNzQzMjAsNzQzNDksNzQzNzksNzQ0MDgsNzQ0MzcsNzQ0NjcsNzQ0OTcsNzQ1MjYsNzQ1NTYsNzQ1ODYsNzQ2MTUsNzQ2NDUsNzQ2NzUsNzQ3MDQsNzQ3MzMsNzQ3NjMsNzQ3OTIsNzQ4MjIsNzQ4NTEsNzQ4ODEsNzQ5MTAsNzQ5NDAsNzQ5NjksNzQ5OTksNzUwMjksNzUwNTgsNzUwODgsNzUxMTcsNzUxNDcsNzUxNzYsNzUyMDYsNzUyMzUsNzUyNjQsNzUyOTQsNzUzMjMsNzUzNTMsNzUzODMsNzU0MTIsNzU0NDIsNzU0NzIsNzU1MDEsNzU1MzEsNzU1NjAsNzU1OTAsNzU2MTksNzU2NDgsNzU2NzgsNzU3MDcsNzU3MzcsNzU3NjYsNzU3OTYsNzU4MjYsNzU4NTYsNzU4ODUsNzU5MTUsNzU5NDQsNzU5NzQsNzYwMDMsNzYwMzIsNzYwNjIsNzYwOTEsNzYxMjEsNzYxNTAsNzYxODAsNzYyMTAsNzYyMzksNzYyNjksNzYyOTksNzYzMjgsNzYzNTgsNzYzODcsNzY0MTYsNzY0NDYsNzY0NzUsNzY1MDUsNzY1MzQsNzY1NjQsNzY1OTMsNzY2MjMsNzY2NTMsNzY2ODIsNzY3MTIsNzY3NDEsNzY3NzEsNzY4MDEsNzY4MzAsNzY4NTksNzY4ODksNzY5MTgsNzY5NDgsNzY5NzcsNzcwMDcsNzcwMzYsNzcwNjYsNzcwOTYsNzcxMjUsNzcxNTUsNzcxODUsNzcyMTQsNzcyNDMsNzcyNzMsNzczMDIsNzczMzIsNzczNjEsNzczOTAsNzc0MjAsNzc0NTAsNzc0NzksNzc1MDksNzc1MzksNzc1NjksNzc1OTgsNzc2MjcsNzc2NTcsNzc2ODYsNzc3MTUsNzc3NDUsNzc3NzQsNzc4MDQsNzc4MzMsNzc4NjMsNzc4OTMsNzc5MjMsNzc5NTIsNzc5ODIsNzgwMTEsNzgwNDEsNzgwNzAsNzgwOTksNzgxMjksNzgxNTgsNzgxODgsNzgyMTcsNzgyNDcsNzgyNzcsNzgzMDcsNzgzMzYsNzgzNjYsNzgzOTUsNzg0MjUsNzg0NTQsNzg0ODMsNzg1MTMsNzg1NDIsNzg1NzIsNzg2MDEsNzg2MzEsNzg2NjEsNzg2OTAsNzg3MjAsNzg3NTAsNzg3NzksNzg4MDgsNzg4MzgsNzg4NjcsNzg4OTcsNzg5MjYsNzg5NTYsNzg5ODUsNzkwMTUsNzkwNDQsNzkwNzQsNzkxMDQsNzkxMzMsNzkxNjMsNzkxOTIsNzkyMjIsNzkyNTEsNzkyODEsNzkzMTAsNzkzNDAsNzkzNjksNzkzOTksNzk0MjgsNzk0NTgsNzk0ODcsNzk1MTcsNzk1NDYsNzk1NzYsNzk2MDYsNzk2MzUsNzk2NjUsNzk2OTUsNzk3MjQsNzk3NTMsNzk3ODMsNzk4MTIsNzk4NDEsNzk4NzEsNzk5MDAsNzk5MzAsNzk5NjAsNzk5OTBdfSx7Ii4uL21haW4iOjUzNiwib2JqZWN0LWFzc2lnbiI6NDIxfV0sNTM2OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgib2JqZWN0LWFzc2lnbiIpO2Z1bmN0aW9uIGkoKXt0aGlzLnJlZ2lvbmFsT3B0aW9ucz1bXSx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl09e2ludmFsaWRDYWxlbmRhcjoiQ2FsZW5kYXIgezB9IG5vdCBmb3VuZCIsaW52YWxpZERhdGU6IkludmFsaWQgezB9IGRhdGUiLGludmFsaWRNb250aDoiSW52YWxpZCB7MH0gbW9udGgiLGludmFsaWRZZWFyOiJJbnZhbGlkIHswfSB5ZWFyIixkaWZmZXJlbnRDYWxlbmRhcnM6IkNhbm5vdCBtaXggezB9IGFuZCB7MX0gZGF0ZXMifSx0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zWyIiXSx0aGlzLmNhbGVuZGFycz17fSx0aGlzLl9sb2NhbENhbHM9e319ZnVuY3Rpb24gYSh0LGUscixuKXtpZih0aGlzLl9jYWxlbmRhcj10LHRoaXMuX3llYXI9ZSx0aGlzLl9tb250aD1yLHRoaXMuX2RheT1uLDA9PT10aGlzLl9jYWxlbmRhci5fdmFsaWRhdGVMZXZlbCYmIXRoaXMuX2NhbGVuZGFyLmlzVmFsaWQodGhpcy5feWVhcix0aGlzLl9tb250aCx0aGlzLl9kYXkpKXRocm93KGMubG9jYWwuaW52YWxpZERhdGV8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkRGF0ZSkucmVwbGFjZSgvXHswXH0vLHRoaXMuX2NhbGVuZGFyLmxvY2FsLm5hbWUpfWZ1bmN0aW9uIG8odCxlKXtyZXR1cm4iMDAwMDAwIi5zdWJzdHJpbmcoMCxlLSh0PSIiK3QpLmxlbmd0aCkrdH1mdW5jdGlvbiBzKCl7dGhpcy5zaG9ydFllYXJDdXRvZmY9IisxMCJ9ZnVuY3Rpb24gbCh0KXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW3RdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl19bihpLnByb3RvdHlwZSx7aW5zdGFuY2U6ZnVuY3Rpb24odCxlKXt0PSh0fHwiZ3JlZ29yaWFuIikudG9Mb3dlckNhc2UoKSxlPWV8fCIiO3ZhciByPXRoaXMuX2xvY2FsQ2Fsc1t0KyItIitlXTtpZighciYmdGhpcy5jYWxlbmRhcnNbdF0mJihyPW5ldyB0aGlzLmNhbGVuZGFyc1t0XShlKSx0aGlzLl9sb2NhbENhbHNbdCsiLSIrZV09ciksIXIpdGhyb3codGhpcy5sb2NhbC5pbnZhbGlkQ2FsZW5kYXJ8fHRoaXMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkQ2FsZW5kYXIpLnJlcGxhY2UoL1x7MFx9Lyx0KTtyZXR1cm4gcn0sbmV3RGF0ZTpmdW5jdGlvbih0LGUscixuLGkpe3JldHVybihuPShudWxsIT10JiZ0LnllYXI/dC5jYWxlbmRhcigpOiJzdHJpbmciPT10eXBlb2Ygbj90aGlzLmluc3RhbmNlKG4saSk6bil8fHRoaXMuaW5zdGFuY2UoKSkubmV3RGF0ZSh0LGUscil9LHN1YnN0aXR1dGVEaWdpdHM6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybihlKyIiKS5yZXBsYWNlKC9bMC05XS9nLGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSl9fSxzdWJzdGl0dXRlQ2hpbmVzZURpZ2l0czpmdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbihyKXtmb3IodmFyIG49IiIsaT0wO3I+MDspe3ZhciBhPXIlMTA7bj0oMD09PWE/IiI6dFthXStlW2ldKStuLGkrKyxyPU1hdGguZmxvb3Ioci8xMCl9cmV0dXJuIDA9PT1uLmluZGV4T2YodFsxXStlWzFdKSYmKG49bi5zdWJzdHIoMSkpLG58fHRbMF19fX0pLG4oYS5wcm90b3R5cGUse25ld0RhdGU6ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLl9jYWxlbmRhci5uZXdEYXRlKG51bGw9PXQ/dGhpczp0LGUscil9LHllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMuX3llYXI6dGhpcy5zZXQodCwieSIpfSxtb250aDpmdW5jdGlvbih0KXtyZXR1cm4gMD09PWFyZ3VtZW50cy5sZW5ndGg/dGhpcy5fbW9udGg6dGhpcy5zZXQodCwibSIpfSxkYXk6ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMuX2RheTp0aGlzLnNldCh0LCJkIil9LGRhdGU6ZnVuY3Rpb24odCxlLHIpe2lmKCF0aGlzLl9jYWxlbmRhci5pc1ZhbGlkKHQsZSxyKSl0aHJvdyhjLmxvY2FsLmludmFsaWREYXRlfHxjLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZERhdGUpLnJlcGxhY2UoL1x7MFx9Lyx0aGlzLl9jYWxlbmRhci5sb2NhbC5uYW1lKTtyZXR1cm4gdGhpcy5feWVhcj10LHRoaXMuX21vbnRoPWUsdGhpcy5fZGF5PXIsdGhpc30sbGVhcFllYXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIubGVhcFllYXIodGhpcyl9LGVwb2NoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmVwb2NoKHRoaXMpfSxmb3JtYXRZZWFyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmZvcm1hdFllYXIodGhpcyl9LG1vbnRoT2ZZZWFyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLm1vbnRoT2ZZZWFyKHRoaXMpfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLndlZWtPZlllYXIodGhpcyl9LGRheXNJblllYXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIuZGF5c0luWWVhcih0aGlzKX0sZGF5T2ZZZWFyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmRheU9mWWVhcih0aGlzKX0sZGF5c0luTW9udGg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIuZGF5c0luTW9udGgodGhpcyl9LGRheU9mV2VlazpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWxlbmRhci5kYXlPZldlZWsodGhpcyl9LHdlZWtEYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIud2Vla0RheSh0aGlzKX0sZXh0cmFJbmZvOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmV4dHJhSW5mbyh0aGlzKX0sYWRkOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmFkZCh0aGlzLHQsZSl9LHNldDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9jYWxlbmRhci5zZXQodGhpcyx0LGUpfSxjb21wYXJlVG86ZnVuY3Rpb24odCl7aWYodGhpcy5fY2FsZW5kYXIubmFtZSE9PXQuX2NhbGVuZGFyLm5hbWUpdGhyb3coYy5sb2NhbC5kaWZmZXJlbnRDYWxlbmRhcnN8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5kaWZmZXJlbnRDYWxlbmRhcnMpLnJlcGxhY2UoL1x7MFx9Lyx0aGlzLl9jYWxlbmRhci5sb2NhbC5uYW1lKS5yZXBsYWNlKC9cezFcfS8sdC5fY2FsZW5kYXIubG9jYWwubmFtZSk7dmFyIGU9dGhpcy5feWVhciE9PXQuX3llYXI/dGhpcy5feWVhci10Ll95ZWFyOnRoaXMuX21vbnRoIT09dC5fbW9udGg/dGhpcy5tb250aE9mWWVhcigpLXQubW9udGhPZlllYXIoKTp0aGlzLl9kYXktdC5fZGF5O3JldHVybiAwPT09ZT8wOmU8MD8tMToxfSxjYWxlbmRhcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWxlbmRhcn0sdG9KRDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWxlbmRhci50b0pEKHRoaXMpfSxmcm9tSkQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmZyb21KRCh0KX0sdG9KU0RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIudG9KU0RhdGUodGhpcyl9LGZyb21KU0RhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmZyb21KU0RhdGUodCl9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMueWVhcigpPDA/Ii0iOiIiKStvKE1hdGguYWJzKHRoaXMueWVhcigpKSw0KSsiLSIrbyh0aGlzLm1vbnRoKCksMikrIi0iK28odGhpcy5kYXkoKSwyKX19KSxuKHMucHJvdG90eXBlLHtfdmFsaWRhdGVMZXZlbDowLG5ld0RhdGU6ZnVuY3Rpb24odCxlLHIpe3JldHVybiBudWxsPT10P3RoaXMudG9kYXkoKToodC55ZWFyJiYodGhpcy5fdmFsaWRhdGUodCxlLHIsYy5sb2NhbC5pbnZhbGlkRGF0ZXx8Yy5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWREYXRlKSxyPXQuZGF5KCksZT10Lm1vbnRoKCksdD10LnllYXIoKSksbmV3IGEodGhpcyx0LGUscikpfSx0b2RheTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZyb21KU0RhdGUobmV3IERhdGUpfSxlcG9jaDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LGMubG9jYWwuaW52YWxpZFllYXJ8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkWWVhcikueWVhcigpPDA/dGhpcy5sb2NhbC5lcG9jaHNbMF06dGhpcy5sb2NhbC5lcG9jaHNbMV19LGZvcm1hdFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LGMubG9jYWwuaW52YWxpZFllYXJ8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkWWVhcik7cmV0dXJuKGUueWVhcigpPDA/Ii0iOiIiKStvKE1hdGguYWJzKGUueWVhcigpKSw0KX0sbW9udGhzSW5ZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksYy5sb2NhbC5pbnZhbGlkWWVhcnx8Yy5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWRZZWFyKSwxMn0sbW9udGhPZlllYXI6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksYy5sb2NhbC5pbnZhbGlkTW9udGh8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkTW9udGgpO3JldHVybihyLm1vbnRoKCkrdGhpcy5tb250aHNJblllYXIociktdGhpcy5maXJzdE1vbnRoKSV0aGlzLm1vbnRoc0luWWVhcihyKSt0aGlzLm1pbk1vbnRofSxmcm9tTW9udGhPZlllYXI6ZnVuY3Rpb24odCxlKXt2YXIgcj0oZSt0aGlzLmZpcnN0TW9udGgtMip0aGlzLm1pbk1vbnRoKSV0aGlzLm1vbnRoc0luWWVhcih0KSt0aGlzLm1pbk1vbnRoO3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHIsdGhpcy5taW5EYXksYy5sb2NhbC5pbnZhbGlkTW9udGh8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkTW9udGgpLHJ9LGRheXNJblllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LGMubG9jYWwuaW52YWxpZFllYXJ8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkWWVhcik7cmV0dXJuIHRoaXMubGVhcFllYXIoZSk/MzY2OjM2NX0sZGF5T2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLl92YWxpZGF0ZSh0LGUscixjLmxvY2FsLmludmFsaWREYXRlfHxjLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZERhdGUpO3JldHVybiBuLnRvSkQoKS10aGlzLm5ld0RhdGUobi55ZWFyKCksdGhpcy5mcm9tTW9udGhPZlllYXIobi55ZWFyKCksdGhpcy5taW5Nb250aCksdGhpcy5taW5EYXkpLnRvSkQoKSsxfSxkYXlzSW5XZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIDd9LGRheU9mV2VlazpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5fdmFsaWRhdGUodCxlLHIsYy5sb2NhbC5pbnZhbGlkRGF0ZXx8Yy5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWREYXRlKTtyZXR1cm4oTWF0aC5mbG9vcih0aGlzLnRvSkQobikpKzIpJXRoaXMuZGF5c0luV2VlaygpfSxleHRyYUluZm86ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LGUscixjLmxvY2FsLmludmFsaWREYXRlfHxjLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZERhdGUpLHt9fSxhZGQ6ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksYy5sb2NhbC5pbnZhbGlkRGF0ZXx8Yy5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWREYXRlKSx0aGlzLl9jb3JyZWN0QWRkKHQsdGhpcy5fYWRkKHQsZSxyKSxlLHIpfSxfYWRkOmZ1bmN0aW9uKHQsZSxyKXtpZih0aGlzLl92YWxpZGF0ZUxldmVsKyssImQiPT09cnx8InciPT09cil7dmFyIG49dC50b0pEKCkrZSooInciPT09cj90aGlzLmRheXNJbldlZWsoKToxKSxpPXQuY2FsZW5kYXIoKS5mcm9tSkQobik7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlTGV2ZWwtLSxbaS55ZWFyKCksaS5tb250aCgpLGkuZGF5KCldfXRyeXt2YXIgYT10LnllYXIoKSsoInkiPT09cj9lOjApLG89dC5tb250aE9mWWVhcigpKygibSI9PT1yP2U6MCk7aT10LmRheSgpOyJ5Ij09PXI/KHQubW9udGgoKSE9PXRoaXMuZnJvbU1vbnRoT2ZZZWFyKGEsbykmJihvPXRoaXMubmV3RGF0ZShhLHQubW9udGgoKSx0aGlzLm1pbkRheSkubW9udGhPZlllYXIoKSksbz1NYXRoLm1pbihvLHRoaXMubW9udGhzSW5ZZWFyKGEpKSxpPU1hdGgubWluKGksdGhpcy5kYXlzSW5Nb250aChhLHRoaXMuZnJvbU1vbnRoT2ZZZWFyKGEsbykpKSk6Im0iPT09ciYmKCFmdW5jdGlvbih0KXtmb3IoO288dC5taW5Nb250aDspYS0tLG8rPXQubW9udGhzSW5ZZWFyKGEpO2Zvcih2YXIgZT10Lm1vbnRoc0luWWVhcihhKTtvPmUtMSt0Lm1pbk1vbnRoOylhKyssby09ZSxlPXQubW9udGhzSW5ZZWFyKGEpfSh0aGlzKSxpPU1hdGgubWluKGksdGhpcy5kYXlzSW5Nb250aChhLHRoaXMuZnJvbU1vbnRoT2ZZZWFyKGEsbykpKSk7dmFyIHM9W2EsdGhpcy5mcm9tTW9udGhPZlllYXIoYSxvKSxpXTtyZXR1cm4gdGhpcy5fdmFsaWRhdGVMZXZlbC0tLHN9Y2F0Y2godCl7dGhyb3cgdGhpcy5fdmFsaWRhdGVMZXZlbC0tLHR9fSxfY29ycmVjdEFkZDpmdW5jdGlvbih0LGUscixuKXtpZighKHRoaXMuaGFzWWVhclplcm98fCJ5IiE9PW4mJiJtIiE9PW58fDAhPT1lWzBdJiZ0LnllYXIoKT4wPT1lWzBdPjApKXt2YXIgaT17eTpbMSwxLCJ5Il0sbTpbMSx0aGlzLm1vbnRoc0luWWVhcigtMSksIm0iXSx3Olt0aGlzLmRheXNJbldlZWsoKSx0aGlzLmRheXNJblllYXIoLTEpLCJkIl0sZDpbMSx0aGlzLmRheXNJblllYXIoLTEpLCJkIl19W25dLGE9cjwwPy0xOjE7ZT10aGlzLl9hZGQodCxyKmlbMF0rYSppWzFdLGlbMl0pfXJldHVybiB0LmRhdGUoZVswXSxlWzFdLGVbMl0pfSxzZXQ6ZnVuY3Rpb24odCxlLHIpe3RoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxjLmxvY2FsLmludmFsaWREYXRlfHxjLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZERhdGUpO3ZhciBuPSJ5Ij09PXI/ZTp0LnllYXIoKSxpPSJtIj09PXI/ZTp0Lm1vbnRoKCksYT0iZCI9PT1yP2U6dC5kYXkoKTtyZXR1cm4ieSIhPT1yJiYibSIhPT1yfHwoYT1NYXRoLm1pbihhLHRoaXMuZGF5c0luTW9udGgobixpKSkpLHQuZGF0ZShuLGksYSl9LGlzVmFsaWQ6ZnVuY3Rpb24odCxlLHIpe3RoaXMuX3ZhbGlkYXRlTGV2ZWwrKzt2YXIgbj10aGlzLmhhc1llYXJaZXJvfHwwIT09dDtpZihuKXt2YXIgaT10aGlzLm5ld0RhdGUodCxlLHRoaXMubWluRGF5KTtuPWU+PXRoaXMubWluTW9udGgmJmUtdGhpcy5taW5Nb250aDx0aGlzLm1vbnRoc0luWWVhcihpKSYmcj49dGhpcy5taW5EYXkmJnItdGhpcy5taW5EYXk8dGhpcy5kYXlzSW5Nb250aChpKX1yZXR1cm4gdGhpcy5fdmFsaWRhdGVMZXZlbC0tLG59LHRvSlNEYXRlOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLl92YWxpZGF0ZSh0LGUscixjLmxvY2FsLmludmFsaWREYXRlfHxjLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZERhdGUpO3JldHVybiBjLmluc3RhbmNlKCkuZnJvbUpEKHRoaXMudG9KRChuKSkudG9KU0RhdGUoKX0sZnJvbUpTRGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5mcm9tSkQoYy5pbnN0YW5jZSgpLmZyb21KU0RhdGUodCkudG9KRCgpKX0sX3ZhbGlkYXRlOmZ1bmN0aW9uKHQsZSxyLG4pe2lmKHQueWVhcil7aWYoMD09PXRoaXMuX3ZhbGlkYXRlTGV2ZWwmJnRoaXMubmFtZSE9PXQuY2FsZW5kYXIoKS5uYW1lKXRocm93KGMubG9jYWwuZGlmZmVyZW50Q2FsZW5kYXJzfHxjLnJlZ2lvbmFsT3B0aW9uc1siIl0uZGlmZmVyZW50Q2FsZW5kYXJzKS5yZXBsYWNlKC9cezBcfS8sdGhpcy5sb2NhbC5uYW1lKS5yZXBsYWNlKC9cezFcfS8sdC5jYWxlbmRhcigpLmxvY2FsLm5hbWUpO3JldHVybiB0fXRyeXtpZih0aGlzLl92YWxpZGF0ZUxldmVsKyssMT09PXRoaXMuX3ZhbGlkYXRlTGV2ZWwmJiF0aGlzLmlzVmFsaWQodCxlLHIpKXRocm93IG4ucmVwbGFjZSgvXHswXH0vLHRoaXMubG9jYWwubmFtZSk7dmFyIGk9dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gdGhpcy5fdmFsaWRhdGVMZXZlbC0tLGl9Y2F0Y2godCl7dGhyb3cgdGhpcy5fdmFsaWRhdGVMZXZlbC0tLHR9fX0pLGwucHJvdG90eXBlPW5ldyBzLG4obC5wcm90b3R5cGUse25hbWU6IkdyZWdvcmlhbiIsamRFcG9jaDoxNzIxNDI1LjUsZGF5c1Blck1vbnRoOlszMSwyOCwzMSwzMCwzMSwzMCwzMSwzMSwzMCwzMSwzMCwzMV0saGFzWWVhclplcm86ITEsbWluTW9udGg6MSxmaXJzdE1vbnRoOjEsbWluRGF5OjEscmVnaW9uYWxPcHRpb25zOnsiIjp7bmFtZToiR3JlZ29yaWFuIixlcG9jaHM6WyJCQ0UiLCJDRSJdLG1vbnRoTmFtZXM6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLG1vbnRoTmFtZXNTaG9ydDpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdLGRheU5hbWVzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxkYXlOYW1lc1Nob3J0OlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sZGF5TmFtZXNNaW46WyJTdSIsIk1vIiwiVHUiLCJXZSIsIlRoIiwiRnIiLCJTYSJdLGRpZ2l0czpudWxsLGRhdGVGb3JtYXQ6Im1tL2RkL3l5eXkiLGZpcnN0RGF5OjAsaXNSVEw6ITF9fSxsZWFwWWVhcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksYy5sb2NhbC5pbnZhbGlkWWVhcnx8Yy5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWRZZWFyKTtyZXR1cm4odD1lLnllYXIoKSsoZS55ZWFyKCk8MD8xOjApKSU0PT0wJiYodCUxMDAhPTB8fHQlNDAwPT0wKX0sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gbi5hZGQoNC0obi5kYXlPZldlZWsoKXx8NyksImQiKSxNYXRoLmZsb29yKChuLmRheU9mWWVhcigpLTEpLzcpKzF9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LGMubG9jYWwuaW52YWxpZE1vbnRofHxjLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZE1vbnRoKTtyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbci5tb250aCgpLTFdKygyPT09ci5tb250aCgpJiZ0aGlzLmxlYXBZZWFyKHIueWVhcigpKT8xOjApfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4odGhpcy5kYXlPZldlZWsodCxlLHIpfHw3KTw2fSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLl92YWxpZGF0ZSh0LGUscixjLmxvY2FsLmludmFsaWREYXRlfHxjLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZERhdGUpO3Q9bi55ZWFyKCksZT1uLm1vbnRoKCkscj1uLmRheSgpLHQ8MCYmdCsrLGU8MyYmKGUrPTEyLHQtLSk7dmFyIGk9TWF0aC5mbG9vcih0LzEwMCksYT0yLWkrTWF0aC5mbG9vcihpLzQpO3JldHVybiBNYXRoLmZsb29yKDM2NS4yNSoodCs0NzE2KSkrTWF0aC5mbG9vcigzMC42MDAxKihlKzEpKStyK2EtMTUyNC41fSxmcm9tSkQ6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5mbG9vcih0Ky41KSxyPU1hdGguZmxvb3IoKGUtMTg2NzIxNi4yNSkvMzY1MjQuMjUpLG49KHI9ZSsxK3ItTWF0aC5mbG9vcihyLzQpKSsxNTI0LGk9TWF0aC5mbG9vcigobi0xMjIuMSkvMzY1LjI1KSxhPU1hdGguZmxvb3IoMzY1LjI1KmkpLG89TWF0aC5mbG9vcigobi1hKS8zMC42MDAxKSxzPW4tYS1NYXRoLmZsb29yKDMwLjYwMDEqbyksbD1vLShvPjEzLjU/MTM6MSksYz1pLShsPjIuNT80NzE2OjQ3MTUpO3JldHVybiBjPD0wJiZjLS0sdGhpcy5uZXdEYXRlKGMsbCxzKX0sdG9KU0RhdGU6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLGMubG9jYWwuaW52YWxpZERhdGV8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkRGF0ZSksaT1uZXcgRGF0ZShuLnllYXIoKSxuLm1vbnRoKCktMSxuLmRheSgpKTtyZXR1cm4gaS5zZXRIb3VycygwKSxpLnNldE1pbnV0ZXMoMCksaS5zZXRTZWNvbmRzKDApLGkuc2V0TWlsbGlzZWNvbmRzKDApLGkuc2V0SG91cnMoaS5nZXRIb3VycygpPjEyP2kuZ2V0SG91cnMoKSsyOjApLGl9LGZyb21KU0RhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubmV3RGF0ZSh0LmdldEZ1bGxZZWFyKCksdC5nZXRNb250aCgpKzEsdC5nZXREYXRlKCkpfX0pO3ZhciBjPWUuZXhwb3J0cz1uZXcgaTtjLmNkYXRlPWEsYy5iYXNlQ2FsZW5kYXI9cyxjLmNhbGVuZGFycy5ncmVnb3JpYW49bH0seyJvYmplY3QtYXNzaWduIjo0MjF9XSw1Mzc6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCJvYmplY3QtYXNzaWduIiksaT10KCIuL21haW4iKTtuKGkucmVnaW9uYWxPcHRpb25zWyIiXSx7aW52YWxpZEFyZ3VtZW50czoiSW52YWxpZCBhcmd1bWVudHMiLGludmFsaWRGb3JtYXQ6IkNhbm5vdCBmb3JtYXQgYSBkYXRlIGZyb20gYW5vdGhlciBjYWxlbmRhciIsbWlzc2luZ051bWJlckF0OiJNaXNzaW5nIG51bWJlciBhdCBwb3NpdGlvbiB7MH0iLHVua25vd25OYW1lQXQ6IlVua25vd24gbmFtZSBhdCBwb3NpdGlvbiB7MH0iLHVuZXhwZWN0ZWRMaXRlcmFsQXQ6IlVuZXhwZWN0ZWQgbGl0ZXJhbCBhdCBwb3NpdGlvbiB7MH0iLHVuZXhwZWN0ZWRUZXh0OiJBZGRpdGlvbmFsIHRleHQgZm91bmQgYXQgZW5kIn0pLGkubG9jYWw9aS5yZWdpb25hbE9wdGlvbnNbIiJdLG4oaS5jZGF0ZS5wcm90b3R5cGUse2Zvcm1hdERhdGU6ZnVuY3Rpb24odCxlKXtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIHQmJihlPXQsdD0iIiksdGhpcy5fY2FsZW5kYXIuZm9ybWF0RGF0ZSh0fHwiIix0aGlzLGUpfX0pLG4oaS5iYXNlQ2FsZW5kYXIucHJvdG90eXBlLHtVTklYX0VQT0NIOmkuaW5zdGFuY2UoKS5uZXdEYXRlKDE5NzAsMSwxKS50b0pEKCksU0VDU19QRVJfREFZOjg2NDAwLFRJQ0tTX0VQT0NIOmkuaW5zdGFuY2UoKS5qZEVwb2NoLFRJQ0tTX1BFUl9EQVk6ODY0ZTksQVRPTToieXl5eS1tbS1kZCIsQ09PS0lFOiJELCBkZCBNIHl5eXkiLEZVTEw6IkRELCBNTSBkLCB5eXl5IixJU09fODYwMToieXl5eS1tbS1kZCIsSlVMSUFOOiJKIixSRkNfODIyOiJELCBkIE0geXkiLFJGQ184NTA6IkRELCBkZC1NLXl5IixSRkNfMTAzNjoiRCwgZCBNIHl5IixSRkNfMTEyMzoiRCwgZCBNIHl5eXkiLFJGQ18yODIyOiJELCBkIE0geXl5eSIsUlNTOiJELCBkIE0geXkiLFRJQ0tTOiIhIixUSU1FU1RBTVA6IkAiLFczQzoieXl5eS1tbS1kZCIsZm9ybWF0RGF0ZTpmdW5jdGlvbih0LGUscil7aWYoInN0cmluZyIhPXR5cGVvZiB0JiYocj1lLGU9dCx0PSIiKSwhZSlyZXR1cm4iIjtpZihlLmNhbGVuZGFyKCkhPT10aGlzKXRocm93IGkubG9jYWwuaW52YWxpZEZvcm1hdHx8aS5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWRGb3JtYXQ7dD10fHx0aGlzLmxvY2FsLmRhdGVGb3JtYXQ7Zm9yKHZhciBuLGEsbyxzLGw9KHI9cnx8e30pLmRheU5hbWVzU2hvcnR8fHRoaXMubG9jYWwuZGF5TmFtZXNTaG9ydCxjPXIuZGF5TmFtZXN8fHRoaXMubG9jYWwuZGF5TmFtZXMsdT1yLm1vbnRoTnVtYmVyc3x8dGhpcy5sb2NhbC5tb250aE51bWJlcnMsaD1yLm1vbnRoTmFtZXNTaG9ydHx8dGhpcy5sb2NhbC5tb250aE5hbWVzU2hvcnQsZj1yLm1vbnRoTmFtZXN8fHRoaXMubG9jYWwubW9udGhOYW1lcyxwPShyLmNhbGN1bGF0ZVdlZWt8fHRoaXMubG9jYWwuY2FsY3VsYXRlV2VlayxmdW5jdGlvbihlLHIpe2Zvcih2YXIgbj0xO3crbjx0Lmxlbmd0aCYmdC5jaGFyQXQodytuKT09PWU7KW4rKztyZXR1cm4gdys9bi0xLE1hdGguZmxvb3Iobi8ocnx8MSkpPjF9KSxkPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPSIiK2U7aWYocCh0LG4pKWZvcig7aS5sZW5ndGg8cjspaT0iMCIraTtyZXR1cm4gaX0sZz10aGlzLG09ZnVuY3Rpb24odCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHU/dS5jYWxsKGcsdCxwKCJtIikpOngoZCgibSIsdC5tb250aCgpLDIpKX0sdj1mdW5jdGlvbih0LGUpe3JldHVybiBlPyJmdW5jdGlvbiI9PXR5cGVvZiBmP2YuY2FsbChnLHQpOmZbdC5tb250aCgpLWcubWluTW9udGhdOiJmdW5jdGlvbiI9PXR5cGVvZiBoP2guY2FsbChnLHQpOmhbdC5tb250aCgpLWcubWluTW9udGhdfSx5PXRoaXMubG9jYWwuZGlnaXRzLHg9ZnVuY3Rpb24odCl7cmV0dXJuIHIubG9jYWxOdW1iZXJzJiZ5P3kodCk6dH0sYj0iIixfPSExLHc9MDt3PHQubGVuZ3RoO3crKylpZihfKSInIiE9PXQuY2hhckF0KHcpfHxwKCInIik/Yis9dC5jaGFyQXQodyk6Xz0hMTtlbHNlIHN3aXRjaCh0LmNoYXJBdCh3KSl7Y2FzZSJkIjpiKz14KGQoImQiLGUuZGF5KCksMikpO2JyZWFrO2Nhc2UiRCI6Yis9KG49IkQiLGE9ZS5kYXlPZldlZWsoKSxvPWwscz1jLHAobik/c1thXTpvW2FdKTticmVhaztjYXNlIm8iOmIrPWQoIm8iLGUuZGF5T2ZZZWFyKCksMyk7YnJlYWs7Y2FzZSJ3IjpiKz1kKCJ3IixlLndlZWtPZlllYXIoKSwyKTticmVhaztjYXNlIm0iOmIrPW0oZSk7YnJlYWs7Y2FzZSJNIjpiKz12KGUscCgiTSIpKTticmVhaztjYXNlInkiOmIrPXAoInkiLDIpP2UueWVhcigpOihlLnllYXIoKSUxMDA8MTA/IjAiOiIiKStlLnllYXIoKSUxMDA7YnJlYWs7Y2FzZSJZIjpwKCJZIiwyKSxiKz1lLmZvcm1hdFllYXIoKTticmVhaztjYXNlIkoiOmIrPWUudG9KRCgpO2JyZWFrO2Nhc2UiQCI6Yis9KGUudG9KRCgpLXRoaXMuVU5JWF9FUE9DSCkqdGhpcy5TRUNTX1BFUl9EQVk7YnJlYWs7Y2FzZSIhIjpiKz0oZS50b0pEKCktdGhpcy5USUNLU19FUE9DSCkqdGhpcy5USUNLU19QRVJfREFZO2JyZWFrO2Nhc2UiJyI6cCgiJyIpP2IrPSInIjpfPSEwO2JyZWFrO2RlZmF1bHQ6Yis9dC5jaGFyQXQodyl9cmV0dXJuIGJ9LHBhcnNlRGF0ZTpmdW5jdGlvbih0LGUscil7aWYobnVsbD09ZSl0aHJvdyBpLmxvY2FsLmludmFsaWRBcmd1bWVudHN8fGkucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkQXJndW1lbnRzO2lmKCIiPT09KGU9Im9iamVjdCI9PXR5cGVvZiBlP2UudG9TdHJpbmcoKTplKyIiKSlyZXR1cm4gbnVsbDt0PXR8fHRoaXMubG9jYWwuZGF0ZUZvcm1hdDt2YXIgbj0ocj1yfHx7fSkuc2hvcnRZZWFyQ3V0b2ZmfHx0aGlzLnNob3J0WWVhckN1dG9mZjtuPSJzdHJpbmciIT10eXBlb2Ygbj9uOnRoaXMudG9kYXkoKS55ZWFyKCklMTAwK3BhcnNlSW50KG4sMTApO2Zvcih2YXIgYT1yLmRheU5hbWVzU2hvcnR8fHRoaXMubG9jYWwuZGF5TmFtZXNTaG9ydCxvPXIuZGF5TmFtZXN8fHRoaXMubG9jYWwuZGF5TmFtZXMscz1yLnBhcnNlTW9udGh8fHRoaXMubG9jYWwucGFyc2VNb250aCxsPXIubW9udGhOdW1iZXJzfHx0aGlzLmxvY2FsLm1vbnRoTnVtYmVycyxjPXIubW9udGhOYW1lc1Nob3J0fHx0aGlzLmxvY2FsLm1vbnRoTmFtZXNTaG9ydCx1PXIubW9udGhOYW1lc3x8dGhpcy5sb2NhbC5tb250aE5hbWVzLGg9LTEsZj0tMSxwPS0xLGQ9LTEsZz0tMSxtPSExLHY9ITEseT1mdW5jdGlvbihlLHIpe2Zvcih2YXIgbj0xO1Qrbjx0Lmxlbmd0aCYmdC5jaGFyQXQoVCtuKT09PWU7KW4rKztyZXR1cm4gVCs9bi0xLE1hdGguZmxvb3Iobi8ocnx8MSkpPjF9LHg9ZnVuY3Rpb24odCxyKXt2YXIgbj15KHQsciksYT1bMiwzLG4/NDoyLG4/NDoyLDEwLDExLDIwXVsib3lZSkAhIi5pbmRleE9mKHQpKzFdLG89bmV3IFJlZ0V4cCgiXi0/XFxkezEsIithKyJ9Iikscz1lLnN1YnN0cmluZyhBKS5tYXRjaChvKTtpZighcyl0aHJvdyhpLmxvY2FsLm1pc3NpbmdOdW1iZXJBdHx8aS5yZWdpb25hbE9wdGlvbnNbIiJdLm1pc3NpbmdOdW1iZXJBdCkucmVwbGFjZSgvXHswXH0vLEEpO3JldHVybiBBKz1zWzBdLmxlbmd0aCxwYXJzZUludChzWzBdLDEwKX0sYj10aGlzLF89ZnVuY3Rpb24oKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgbCl7eSgibSIpO3ZhciB0PWwuY2FsbChiLGUuc3Vic3RyaW5nKEEpKTtyZXR1cm4gQSs9dC5sZW5ndGgsdH1yZXR1cm4geCgibSIpfSx3PWZ1bmN0aW9uKHQscixuLGEpe2Zvcih2YXIgbz15KHQsYSk/bjpyLHM9MDtzPG8ubGVuZ3RoO3MrKylpZihlLnN1YnN0cihBLG9bc10ubGVuZ3RoKS50b0xvd2VyQ2FzZSgpPT09b1tzXS50b0xvd2VyQ2FzZSgpKXJldHVybiBBKz1vW3NdLmxlbmd0aCxzK2IubWluTW9udGg7dGhyb3coaS5sb2NhbC51bmtub3duTmFtZUF0fHxpLnJlZ2lvbmFsT3B0aW9uc1siIl0udW5rbm93bk5hbWVBdCkucmVwbGFjZSgvXHswXH0vLEEpfSxrPWZ1bmN0aW9uKCl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHUpe3ZhciB0PXkoIk0iKT91LmNhbGwoYixlLnN1YnN0cmluZyhBKSk6Yy5jYWxsKGIsZS5zdWJzdHJpbmcoQSkpO3JldHVybiBBKz10Lmxlbmd0aCx0fXJldHVybiB3KCJNIixjLHUpfSxNPWZ1bmN0aW9uKCl7aWYoZS5jaGFyQXQoQSkhPT10LmNoYXJBdChUKSl0aHJvdyhpLmxvY2FsLnVuZXhwZWN0ZWRMaXRlcmFsQXR8fGkucmVnaW9uYWxPcHRpb25zWyIiXS51bmV4cGVjdGVkTGl0ZXJhbEF0KS5yZXBsYWNlKC9cezBcfS8sQSk7QSsrfSxBPTAsVD0wO1Q8dC5sZW5ndGg7VCsrKWlmKHYpIiciIT09dC5jaGFyQXQoVCl8fHkoIiciKT9NKCk6dj0hMTtlbHNlIHN3aXRjaCh0LmNoYXJBdChUKSl7Y2FzZSJkIjpkPXgoImQiKTticmVhaztjYXNlIkQiOncoIkQiLGEsbyk7YnJlYWs7Y2FzZSJvIjpnPXgoIm8iKTticmVhaztjYXNlInciOngoInciKTticmVhaztjYXNlIm0iOnA9XygpO2JyZWFrO2Nhc2UiTSI6cD1rKCk7YnJlYWs7Y2FzZSJ5Ijp2YXIgUz1UO209IXkoInkiLDIpLFQ9UyxmPXgoInkiLDIpO2JyZWFrO2Nhc2UiWSI6Zj14KCJZIiwyKTticmVhaztjYXNlIkoiOmg9eCgiSiIpKy41LCIuIj09PWUuY2hhckF0KEEpJiYoQSsrLHgoIkoiKSk7YnJlYWs7Y2FzZSJAIjpoPXgoIkAiKS90aGlzLlNFQ1NfUEVSX0RBWSt0aGlzLlVOSVhfRVBPQ0g7YnJlYWs7Y2FzZSIhIjpoPXgoIiEiKS90aGlzLlRJQ0tTX1BFUl9EQVkrdGhpcy5USUNLU19FUE9DSDticmVhaztjYXNlIioiOkE9ZS5sZW5ndGg7YnJlYWs7Y2FzZSInIjp5KCInIik/TSgpOnY9ITA7YnJlYWs7ZGVmYXVsdDpNKCl9aWYoQTxlLmxlbmd0aCl0aHJvdyBpLmxvY2FsLnVuZXhwZWN0ZWRUZXh0fHxpLnJlZ2lvbmFsT3B0aW9uc1siIl0udW5leHBlY3RlZFRleHQ7aWYoLTE9PT1mP2Y9dGhpcy50b2RheSgpLnllYXIoKTpmPDEwMCYmbSYmKGYrPS0xPT09bj8xOTAwOnRoaXMudG9kYXkoKS55ZWFyKCktdGhpcy50b2RheSgpLnllYXIoKSUxMDAtKGY8PW4/MDoxMDApKSwic3RyaW5nIj09dHlwZW9mIHAmJihwPXMuY2FsbCh0aGlzLGYscCkpLGc+LTEpe3A9MSxkPWc7Zm9yKHZhciBFPXRoaXMuZGF5c0luTW9udGgoZixwKTtkPkU7RT10aGlzLmRheXNJbk1vbnRoKGYscCkpcCsrLGQtPUV9cmV0dXJuIGg+LTE/dGhpcy5mcm9tSkQoaCk6dGhpcy5uZXdEYXRlKGYscCxkKX0sZGV0ZXJtaW5lRGF0ZTpmdW5jdGlvbih0LGUscixuLGkpe3ImJiJvYmplY3QiIT10eXBlb2YgciYmKGk9bixuPXIscj1udWxsKSwic3RyaW5nIiE9dHlwZW9mIG4mJihpPW4sbj0iIik7dmFyIGE9dGhpcztyZXR1cm4gZT1lP2UubmV3RGF0ZSgpOm51bGwsdD1udWxsPT10P2U6InN0cmluZyI9PXR5cGVvZiB0P2Z1bmN0aW9uKHQpe3RyeXtyZXR1cm4gYS5wYXJzZURhdGUobix0LGkpfWNhdGNoKHQpe31mb3IodmFyIGU9KCh0PXQudG9Mb3dlckNhc2UoKSkubWF0Y2goL15jLykmJnI/ci5uZXdEYXRlKCk6bnVsbCl8fGEudG9kYXkoKSxvPS8oWystXT9bMC05XSspXHMqKGR8d3xtfHkpPy9nLHM9by5leGVjKHQpO3M7KWUuYWRkKHBhcnNlSW50KHNbMV0sMTApLHNbMl18fCJkIikscz1vLmV4ZWModCk7cmV0dXJuIGV9KHQpOiJudW1iZXIiPT10eXBlb2YgdD9pc05hTih0KXx8dD09PTEvMHx8dD09PS0xLzA/ZTphLnRvZGF5KCkuYWRkKHQsImQiKTphLm5ld0RhdGUodCl9fSl9LHsiLi9tYWluIjo1MzYsIm9iamVjdC1hc3NpZ24iOjQyMX1dLDUzODpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz10KCJjd2lzZS1jb21waWxlciIpKHthcmdzOlsiYXJyYXkiLHtvZmZzZXQ6WzFdLGFycmF5OjB9LCJzY2FsYXIiLCJzY2FsYXIiLCJpbmRleCJdLHByZTp7Ym9keToie30iLGFyZ3M6W10sdGhpc1ZhcnM6W10sbG9jYWxWYXJzOltdfSxwb3N0Ontib2R5OiJ7fSIsYXJnczpbXSx0aGlzVmFyczpbXSxsb2NhbFZhcnM6W119LGJvZHk6e2JvZHk6IntcbiAgICAgICAgdmFyIF9pbmxpbmVfMV9kYSA9IF9pbmxpbmVfMV9hcmcwXyAtIF9pbmxpbmVfMV9hcmczX1xuICAgICAgICB2YXIgX2lubGluZV8xX2RiID0gX2lubGluZV8xX2FyZzFfIC0gX2lubGluZV8xX2FyZzNfXG4gICAgICAgIGlmKChfaW5saW5lXzFfZGEgPj0gMCkgIT09IChfaW5saW5lXzFfZGIgPj0gMCkpIHtcbiAgICAgICAgICBfaW5saW5lXzFfYXJnMl8ucHVzaChfaW5saW5lXzFfYXJnNF9bMF0gKyAwLjUgKyAwLjUgKiAoX2lubGluZV8xX2RhICsgX2lubGluZV8xX2RiKSAvIChfaW5saW5lXzFfZGEgLSBfaW5saW5lXzFfZGIpKVxuICAgICAgICB9XG4gICAgICB9IixhcmdzOlt7bmFtZToiX2lubGluZV8xX2FyZzBfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9LHtuYW1lOiJfaW5saW5lXzFfYXJnMV8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6Il9pbmxpbmVfMV9hcmcyXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZToiX2lubGluZV8xX2FyZzNfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjJ9LHtuYW1lOiJfaW5saW5lXzFfYXJnNF8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX1dLHRoaXNWYXJzOltdLGxvY2FsVmFyczpbIl9pbmxpbmVfMV9kYSIsIl9pbmxpbmVfMV9kYiJdfSxmdW5jTmFtZToiemVyb0Nyb3NzaW5ncyJ9KX0seyJjd2lzZS1jb21waWxlciI6MTMzfV0sNTM5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPVtdO3JldHVybiBlPStlfHwwLG4odC5oaSh0LnNoYXBlWzBdLTEpLHIsZSkscn07dmFyIG49dCgiLi9saWIvemMtY29yZSIpfSx7Ii4vbGliL3pjLWNvcmUiOjUzOH1dLDU0MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9W3twYXRoOiIiLGJhY2tvZmY6MH0se3BhdGg6Ik0tMi40LC0zVjNMMC42LDBaIixiYWNrb2ZmOi42fSx7cGF0aDoiTS0zLjcsLTIuNVYyLjVMMS4zLDBaIixiYWNrb2ZmOjEuM30se3BhdGg6Ik0tNC40NSwtM0wtMS42NSwtMC4yVjAuMkwtNC40NSwzTDEuNTUsMFoiLGJhY2tvZmY6MS41NX0se3BhdGg6Ik0tMi4yLC0yLjJMLTAuMiwtMC4yVjAuMkwtMi4yLDIuMkwtMS40LDNMMS42LDBMLTEuNCwtM1oiLGJhY2tvZmY6MS42fSx7cGF0aDoiTS00LjQsLTIuMUwtMC42LC0wLjJWMC4yTC00LjQsMi4xTC00LDNMMiwwTC00LC0zWiIsYmFja29mZjoyfSx7cGF0aDoiTTIsMEEyLDIgMCAxLDEgMCwtMkEyLDIgMCAwLDEgMiwwWiIsYmFja29mZjowLG5vUm90YXRlOiEwfSx7cGF0aDoiTTIsMlYtMkgtMlYyWiIsYmFja29mZjowLG5vUm90YXRlOiEwfV19LHt9XSw1NDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9hcnJvd19wYXRocyIpLGk9dCgiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RhbnRzIiksbz10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIikudGVtcGxhdGVkQXJyYXk7ZS5leHBvcnRzPW8oImFubm90YXRpb24iLHt2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjSWZBdXRvcmFuZ2UrYXJyYXlkcmF3In0sdGV4dDp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToiY2FsY0lmQXV0b3JhbmdlK2FycmF5ZHJhdyJ9LHRleHRhbmdsZTp7dmFsVHlwZToiYW5nbGUiLGRmbHQ6MCxlZGl0VHlwZToiY2FsY0lmQXV0b3JhbmdlK2FycmF5ZHJhdyJ9LGZvbnQ6aSh7ZWRpdFR5cGU6ImNhbGNJZkF1dG9yYW5nZSthcnJheWRyYXciLGNvbG9yRWRpdFR5cGU6ImFycmF5ZHJhdyJ9KSx3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MSxkZmx0Om51bGwsZWRpdFR5cGU6ImNhbGNJZkF1dG9yYW5nZSthcnJheWRyYXcifSxoZWlnaHQ6e3ZhbFR5cGU6Im51bWJlciIsbWluOjEsZGZsdDpudWxsLGVkaXRUeXBlOiJjYWxjSWZBdXRvcmFuZ2UrYXJyYXlkcmF3In0sb3BhY2l0eTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjEsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LGFsaWduOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJsZWZ0IiwiY2VudGVyIiwicmlnaHQiXSxkZmx0OiJjZW50ZXIiLGVkaXRUeXBlOiJhcnJheWRyYXcifSx2YWxpZ246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInRvcCIsIm1pZGRsZSIsImJvdHRvbSJdLGRmbHQ6Im1pZGRsZSIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LGJnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OiJyZ2JhKDAsMCwwLDApIixlZGl0VHlwZToiYXJyYXlkcmF3In0sYm9yZGVyY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OiJyZ2JhKDAsMCwwLDApIixlZGl0VHlwZToiYXJyYXlkcmF3In0sYm9yZGVycGFkOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZToiY2FsY0lmQXV0b3JhbmdlK2FycmF5ZHJhdyJ9LGJvcmRlcndpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZToiY2FsY0lmQXV0b3JhbmdlK2FycmF5ZHJhdyJ9LHNob3dhcnJvdzp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsY0lmQXV0b3JhbmdlK2FycmF5ZHJhdyJ9LGFycm93Y29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToiYXJyYXlkcmF3In0sYXJyb3doZWFkOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46MCxtYXg6bi5sZW5ndGgsZGZsdDoxLGVkaXRUeXBlOiJhcnJheWRyYXcifSxzdGFydGFycm93aGVhZDp7dmFsVHlwZToiaW50ZWdlciIsbWluOjAsbWF4Om4ubGVuZ3RoLGRmbHQ6MSxlZGl0VHlwZToiYXJyYXlkcmF3In0sYXJyb3dzaWRlOnt2YWxUeXBlOiJmbGFnbGlzdCIsZmxhZ3M6WyJlbmQiLCJzdGFydCJdLGV4dHJhczpbIm5vbmUiXSxkZmx0OiJlbmQiLGVkaXRUeXBlOiJhcnJheWRyYXcifSxhcnJvd3NpemU6e3ZhbFR5cGU6Im51bWJlciIsbWluOi4zLGRmbHQ6MSxlZGl0VHlwZToiY2FsY0lmQXV0b3JhbmdlK2FycmF5ZHJhdyJ9LHN0YXJ0YXJyb3dzaXplOnt2YWxUeXBlOiJudW1iZXIiLG1pbjouMyxkZmx0OjEsZWRpdFR5cGU6ImNhbGNJZkF1dG9yYW5nZSthcnJheWRyYXcifSxhcnJvd3dpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjouMSxlZGl0VHlwZToiY2FsY0lmQXV0b3JhbmdlK2FycmF5ZHJhdyJ9LHN0YW5kb2ZmOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZToiY2FsY0lmQXV0b3JhbmdlK2FycmF5ZHJhdyJ9LHN0YXJ0c3RhbmRvZmY6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDowLGVkaXRUeXBlOiJjYWxjSWZBdXRvcmFuZ2UrYXJyYXlkcmF3In0sYXg6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGNJZkF1dG9yYW5nZSthcnJheWRyYXcifSxheTp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsY0lmQXV0b3JhbmdlK2FycmF5ZHJhdyJ9LGF4cmVmOnt2YWxUeXBlOiJlbnVtZXJhdGVkIixkZmx0OiJwaXhlbCIsdmFsdWVzOlsicGl4ZWwiLGEuaWRSZWdleC54LnRvU3RyaW5nKCldLGVkaXRUeXBlOiJjYWxjIn0sYXlyZWY6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLGRmbHQ6InBpeGVsIix2YWx1ZXM6WyJwaXhlbCIsYS5pZFJlZ2V4LnkudG9TdHJpbmcoKV0sZWRpdFR5cGU6ImNhbGMifSx4cmVmOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJwYXBlciIsYS5pZFJlZ2V4LngudG9TdHJpbmcoKV0sZWRpdFR5cGU6ImNhbGMifSx4Ont2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjSWZBdXRvcmFuZ2UrYXJyYXlkcmF3In0seGFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYXV0byIsImxlZnQiLCJjZW50ZXIiLCJyaWdodCJdLGRmbHQ6ImF1dG8iLGVkaXRUeXBlOiJjYWxjSWZBdXRvcmFuZ2UrYXJyYXlkcmF3In0seHNoaWZ0Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxlZGl0VHlwZToiY2FsY0lmQXV0b3JhbmdlK2FycmF5ZHJhdyJ9LHlyZWY6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInBhcGVyIixhLmlkUmVnZXgueS50b1N0cmluZygpXSxlZGl0VHlwZToiY2FsYyJ9LHk6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGNJZkF1dG9yYW5nZSthcnJheWRyYXcifSx5YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhdXRvIiwidG9wIiwibWlkZGxlIiwiYm90dG9tIl0sZGZsdDoiYXV0byIsZWRpdFR5cGU6ImNhbGNJZkF1dG9yYW5nZSthcnJheWRyYXcifSx5c2hpZnQ6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowLGVkaXRUeXBlOiJjYWxjSWZBdXRvcmFuZ2UrYXJyYXlkcmF3In0sY2xpY2t0b3Nob3c6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbITEsIm9ub2ZmIiwib25vdXQiXSxkZmx0OiExLGVkaXRUeXBlOiJhcnJheWRyYXcifSx4Y2xpY2s6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LHljbGljazp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiYXJyYXlkcmF3In0saG92ZXJ0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJhcnJheWRyYXcifSxob3ZlcmxhYmVsOntiZ2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LGJvcmRlcmNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LGZvbnQ6aSh7ZWRpdFR5cGU6ImFycmF5ZHJhdyJ9KSxlZGl0VHlwZToiYXJyYXlkcmF3In0sY2FwdHVyZWV2ZW50czp7dmFsVHlwZToiYm9vbGVhbiIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LGVkaXRUeXBlOiJjYWxjIixfZGVwcmVjYXRlZDp7cmVmOnt2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJjYWxjIn19fSl9LHsiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6NzIyLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RhbnRzIjo3MzcsIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6NzU4LCIuL2Fycm93X3BhdGhzIjo1NDB9XSw1NDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGE9dCgiLi9kcmF3IikuZHJhdztmdW5jdGlvbiBvKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQ7bi5maWx0ZXJWaXNpYmxlKGUuYW5ub3RhdGlvbnMpLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHIsbixhLG8scz1pLmdldEZyb21JZCh0LGUueHJlZiksbD1pLmdldEZyb21JZCh0LGUueXJlZiksYz0zKmUuYXJyb3dzaXplKmUuYXJyb3d3aWR0aHx8MCx1PTMqZS5zdGFydGFycm93c2l6ZSplLmFycm93d2lkdGh8fDA7cyYmcy5hdXRvcmFuZ2UmJihyPWMrZS54c2hpZnQsbj1jLWUueHNoaWZ0LGE9dStlLnhzaGlmdCxvPXUtZS54c2hpZnQsZS5heHJlZj09PWUueHJlZj8oaS5leHBhbmQocyxbcy5yMmMoZS54KV0se3BwYWRwbHVzOnIscHBhZG1pbnVzOm59KSxpLmV4cGFuZChzLFtzLnIyYyhlLmF4KV0se3BwYWRwbHVzOk1hdGgubWF4KGUuX3hwYWRwbHVzLGEpLHBwYWRtaW51czpNYXRoLm1heChlLl94cGFkbWludXMsbyl9KSk6KGE9ZS5heD9hK2UuYXg6YSxvPWUuYXg/by1lLmF4Om8saS5leHBhbmQocyxbcy5yMmMoZS54KV0se3BwYWRwbHVzOk1hdGgubWF4KGUuX3hwYWRwbHVzLHIsYSkscHBhZG1pbnVzOk1hdGgubWF4KGUuX3hwYWRtaW51cyxuLG8pfSkpKSxsJiZsLmF1dG9yYW5nZSYmKHI9Yy1lLnlzaGlmdCxuPWMrZS55c2hpZnQsYT11LWUueXNoaWZ0LG89dStlLnlzaGlmdCxlLmF5cmVmPT09ZS55cmVmPyhpLmV4cGFuZChsLFtsLnIyYyhlLnkpXSx7cHBhZHBsdXM6cixwcGFkbWludXM6bn0pLGkuZXhwYW5kKGwsW2wucjJjKGUuYXkpXSx7cHBhZHBsdXM6TWF0aC5tYXgoZS5feXBhZHBsdXMsYSkscHBhZG1pbnVzOk1hdGgubWF4KGUuX3lwYWRtaW51cyxvKX0pKTooYT1lLmF5P2ErZS5heTphLG89ZS5heT9vLWUuYXk6byxpLmV4cGFuZChsLFtsLnIyYyhlLnkpXSx7cHBhZHBsdXM6TWF0aC5tYXgoZS5feXBhZHBsdXMscixhKSxwcGFkbWludXM6TWF0aC5tYXgoZS5feXBhZG1pbnVzLG4sbyl9KSkpfSl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj1uLmZpbHRlclZpc2libGUoZS5hbm5vdGF0aW9ucyk7aWYoci5sZW5ndGgmJnQuX2Z1bGxEYXRhLmxlbmd0aCl7dmFyIHM9e307Zm9yKHZhciBsIGluIHIuZm9yRWFjaChmdW5jdGlvbih0KXtzW3QueHJlZl09MSxzW3QueXJlZl09MX0pLHMpe3ZhciBjPWkuZ2V0RnJvbUlkKHQsbCk7aWYoYyYmYy5hdXRvcmFuZ2UpcmV0dXJuIG4uc3luY09yQXN5bmMoW2Esb10sdCl9fX19LHsiLi4vLi4vbGliIjo2ODQsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3MzIsIi4vZHJhdyI6NTQ3fV0sNTQzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcmVnaXN0cnkiKSxhPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKS5hcnJheUVkaXRvcjtmdW5jdGlvbiBvKHQsZSl7dmFyIHIsbixpLGEsbyxsLGMsdT10Ll9mdWxsTGF5b3V0LmFubm90YXRpb25zLGg9W10sZj1bXSxwPVtdLGQ9KGV8fFtdKS5sZW5ndGg7Zm9yKHI9MDtyPHUubGVuZ3RoO3IrKylpZihhPShpPXVbcl0pLmNsaWNrdG9zaG93KXtmb3Iobj0wO248ZDtuKyspaWYobD0obz1lW25dKS54YXhpcyxjPW8ueWF4aXMsbC5faWQ9PT1pLnhyZWYmJmMuX2lkPT09aS55cmVmJiZsLmQycihvLngpPT09cyhpLl94Y2xpY2ssbCkmJmMuZDJyKG8ueSk9PT1zKGkuX3ljbGljayxjKSl7KGkudmlzaWJsZT8ib25vdXQiPT09YT9mOnA6aCkucHVzaChyKTticmVha31uPT09ZCYmaS52aXNpYmxlJiYib25vdXQiPT09YSYmZi5wdXNoKHIpfXJldHVybntvbjpoLG9mZjpmLGV4cGxpY2l0T2ZmOnB9fWZ1bmN0aW9uIHModCxlKXtyZXR1cm4ibG9nIj09PWUudHlwZT9lLmwycih0KTplLmQycih0KX1lLmV4cG9ydHM9e2hhc0NsaWNrVG9TaG93OmZ1bmN0aW9uKHQsZSl7dmFyIHI9byh0LGUpO3JldHVybiByLm9uLmxlbmd0aD4wfHxyLmV4cGxpY2l0T2ZmLmxlbmd0aD4wfSxvbkNsaWNrOmZ1bmN0aW9uKHQsZSl7dmFyIHIscyxsPW8odCxlKSxjPWwub24sdT1sLm9mZi5jb25jYXQobC5leHBsaWNpdE9mZiksaD17fSxmPXQuX2Z1bGxMYXlvdXQuYW5ub3RhdGlvbnM7aWYoIWMubGVuZ3RoJiYhdS5sZW5ndGgpcmV0dXJuO2ZvcihyPTA7cjxjLmxlbmd0aDtyKyspKHM9YSh0LmxheW91dCwiYW5ub3RhdGlvbnMiLGZbY1tyXV0pKS5tb2RpZnlJdGVtKCJ2aXNpYmxlIiwhMCksbi5leHRlbmRGbGF0KGgscy5nZXRVcGRhdGVPYmooKSk7Zm9yKHI9MDtyPHUubGVuZ3RoO3IrKykocz1hKHQubGF5b3V0LCJhbm5vdGF0aW9ucyIsZlt1W3JdXSkpLm1vZGlmeUl0ZW0oInZpc2libGUiLCExKSxuLmV4dGVuZEZsYXQoaCxzLmdldFVwZGF0ZU9iaigpKTtyZXR1cm4gaS5jYWxsKCJ1cGRhdGUiLHQse30saCl9fX0seyIuLi8uLi9saWIiOjY4NCwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6NzIyLCIuLi8uLi9yZWdpc3RyeSI6ODE3fV0sNTQ0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vY29sb3IiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7YSgib3BhY2l0eSIpO3ZhciBvPWEoImJnY29sb3IiKSxzPWEoImJvcmRlcmNvbG9yIiksbD1pLm9wYWNpdHkocyk7YSgiYm9yZGVycGFkIik7dmFyIGM9YSgiYm9yZGVyd2lkdGgiKSx1PWEoInNob3dhcnJvdyIpO2lmKGEoInRleHQiLHU/IiAiOnIuX2RmbHRUaXRsZS5hbm5vdGF0aW9uKSxhKCJ0ZXh0YW5nbGUiKSxuLmNvZXJjZUZvbnQoYSwiZm9udCIsci5mb250KSxhKCJ3aWR0aCIpLGEoImFsaWduIiksYSgiaGVpZ2h0IikmJmEoInZhbGlnbiIpLHUpe3ZhciBoLGYscD1hKCJhcnJvd3NpZGUiKTstMSE9PXAuaW5kZXhPZigiZW5kIikmJihoPWEoImFycm93aGVhZCIpLGY9YSgiYXJyb3dzaXplIikpLC0xIT09cC5pbmRleE9mKCJzdGFydCIpJiYoYSgic3RhcnRhcnJvd2hlYWQiLGgpLGEoInN0YXJ0YXJyb3dzaXplIixmKSksYSgiYXJyb3djb2xvciIsbD9lLmJvcmRlcmNvbG9yOmkuZGVmYXVsdExpbmUpLGEoImFycm93d2lkdGgiLDIqKGwmJmN8fDEpKSxhKCJzdGFuZG9mZiIpLGEoInN0YXJ0c3RhbmRvZmYiKX12YXIgZD1hKCJob3ZlcnRleHQiKSxnPXIuaG92ZXJsYWJlbHx8e307aWYoZCl7dmFyIG09YSgiaG92ZXJsYWJlbC5iZ2NvbG9yIixnLmJnY29sb3J8fChpLm9wYWNpdHkobyk/aS5yZ2Iobyk6aS5kZWZhdWx0TGluZSkpLHY9YSgiaG92ZXJsYWJlbC5ib3JkZXJjb2xvciIsZy5ib3JkZXJjb2xvcnx8aS5jb250cmFzdChtKSk7bi5jb2VyY2VGb250KGEsImhvdmVybGFiZWwuZm9udCIse2ZhbWlseTpnLmZvbnQuZmFtaWx5LHNpemU6Zy5mb250LnNpemUsY29sb3I6Zy5mb250LmNvbG9yfHx2fSl9YSgiY2FwdHVyZWV2ZW50cyIsISFkKX19LHsiLi4vLi4vbGliIjo2ODQsIi4uL2NvbG9yIjo1NTh9XSw1NDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL2xpYi90b19sb2dfcmFuZ2UiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7ZT1lfHx7fTt2YXIgbz0ibG9nIj09PXImJiJsaW5lYXIiPT09ZS50eXBlLHM9ImxpbmVhciI9PT1yJiYibG9nIj09PWUudHlwZTtpZihvfHxzKWZvcih2YXIgbCxjLHU9dC5fZnVsbExheW91dC5hbm5vdGF0aW9ucyxoPWUuX2lkLmNoYXJBdCgwKSxmPTA7Zjx1Lmxlbmd0aDtmKyspbD11W2ZdLGM9ImFubm90YXRpb25zWyIrZisiXS4iLGxbaCsicmVmIl09PT1lLl9pZCYmcChoKSxsWyJhIitoKyJyZWYiXT09PWUuX2lkJiZwKCJhIitoKTtmdW5jdGlvbiBwKHQpe3ZhciByPWxbdF0scz1udWxsO3M9bz9pKHIsZS5yYW5nZSk6TWF0aC5wb3coMTAsciksbihzKXx8KHM9bnVsbCksYShjK3Qscyl9fX0seyIuLi8uLi9saWIvdG9fbG9nX3JhbmdlIjo3MTAsImZhc3QtaXNudW1lcmljIjoyMTR9XSw1NDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGE9dCgiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIiksbz10KCIuL2NvbW1vbl9kZWZhdWx0cyIpLHM9dCgiLi9hdHRyaWJ1dGVzIik7ZnVuY3Rpb24gbCh0LGUscil7ZnVuY3Rpb24gYShyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUscyxyLGkpfXZhciBsPWEoInZpc2libGUiKSxjPWEoImNsaWNrdG9zaG93Iik7aWYobHx8Yyl7byh0LGUscixhKTtmb3IodmFyIHU9ZS5zaG93YXJyb3csaD1bIngiLCJ5Il0sZj1bLTEwLC0zMF0scD17X2Z1bGxMYXlvdXQ6cn0sZD0wO2Q8MjtkKyspe3ZhciBnPWhbZF0sbT1pLmNvZXJjZVJlZih0LGUscCxnLCIiLCJwYXBlciIpO2lmKGkuY29lcmNlUG9zaXRpb24oZSxwLGEsbSxnLC41KSx1KXt2YXIgdj0iYSIrZyx5PWkuY29lcmNlUmVmKHQsZSxwLHYsInBpeGVsIik7InBpeGVsIiE9PXkmJnkhPT1tJiYoeT1lW3ZdPSJwaXhlbCIpO3ZhciB4PSJwaXhlbCI9PT15P2ZbZF06LjQ7aS5jb2VyY2VQb3NpdGlvbihlLHAsYSx5LHYseCl9YShnKyJhbmNob3IiKSxhKGcrInNoaWZ0Iil9aWYobi5ub25lT3JBbGwodCxlLFsieCIsInkiXSksdSYmbi5ub25lT3JBbGwodCxlLFsiYXgiLCJheSJdKSxjKXt2YXIgYj1hKCJ4Y2xpY2siKSxfPWEoInljbGljayIpO2UuX3hjbGljaz12b2lkIDA9PT1iP2UueDppLmNsZWFuUG9zaXRpb24oYixwLGUueHJlZiksZS5feWNsaWNrPXZvaWQgMD09PV8/ZS55OmkuY2xlYW5Qb3NpdGlvbihfLHAsZS55cmVmKX19fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2EodCxlLHtuYW1lOiJhbm5vdGF0aW9ucyIsaGFuZGxlSXRlbURlZmF1bHRzOmx9KX19LHsiLi4vLi4vbGliIjo2ODQsIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyI6NzI4LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzMyLCIuL2F0dHJpYnV0ZXMiOjU0MSwiLi9jb21tb25fZGVmYXVsdHMiOjU0NH1dLDU0NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vLi4vcmVnaXN0cnkiKSxhPXQoIi4uLy4uL3Bsb3RzL3Bsb3RzIiksbz10KCIuLi8uLi9saWIiKSxzPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksbD10KCIuLi9jb2xvciIpLGM9dCgiLi4vZHJhd2luZyIpLHU9dCgiLi4vZngiKSxoPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLGY9dCgiLi4vLi4vbGliL3NldGN1cnNvciIpLHA9dCgiLi4vZHJhZ2VsZW1lbnQiKSxkPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKS5hcnJheUVkaXRvcixnPXQoIi4vZHJhd19hcnJvd19oZWFkIik7ZnVuY3Rpb24gbSh0LGUpe3ZhciByPXQuX2Z1bGxMYXlvdXQuYW5ub3RhdGlvbnNbZV18fHt9O3YodCxyLGUsITEscy5nZXRGcm9tSWQodCxyLnhyZWYpLHMuZ2V0RnJvbUlkKHQsci55cmVmKSl9ZnVuY3Rpb24gdih0LGUscixhLHMsbSl7dmFyIHYseSx4PXQuX2Z1bGxMYXlvdXQsYj10Ll9mdWxsTGF5b3V0Ll9zaXplLF89dC5fY29udGV4dC5lZGl0czthPyh2PSJhbm5vdGF0aW9uLSIrYSx5PWErIi5hbm5vdGF0aW9ucyIpOih2PSJhbm5vdGF0aW9uIix5PSJhbm5vdGF0aW9ucyIpO3ZhciB3PWQodC5sYXlvdXQseSxlKSxrPXcubW9kaWZ5QmFzZSxNPXcubW9kaWZ5SXRlbSxBPXcuZ2V0VXBkYXRlT2JqO3guX2luZm9sYXllci5zZWxlY3RBbGwoIi4iK3YrJ1tkYXRhLWluZGV4PSInK3IrJyJdJykucmVtb3ZlKCk7dmFyIFQ9ImNsaXAiK3guX3VpZCsiX2FubiIrcjtpZihlLl9pbnB1dCYmITEhPT1lLnZpc2libGUpe3ZhciBTPXt4Ont9LHk6e319LEU9K2UudGV4dGFuZ2xlfHwwLEM9eC5faW5mb2xheWVyLmFwcGVuZCgiZyIpLmNsYXNzZWQodiwhMCkuYXR0cigiZGF0YS1pbmRleCIsU3RyaW5nKHIpKS5zdHlsZSgib3BhY2l0eSIsZS5vcGFjaXR5KSxMPUMuYXBwZW5kKCJnIikuY2xhc3NlZCgiYW5ub3RhdGlvbi10ZXh0LWciLCEwKSx6PV9bZS5zaG93YXJyb3c/ImFubm90YXRpb25UYWlsIjoiYW5ub3RhdGlvblBvc2l0aW9uIl0sUD1lLmNhcHR1cmVldmVudHN8fF8uYW5ub3RhdGlvblRleHR8fHosST1MLmFwcGVuZCgiZyIpLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsUD8iYWxsIjpudWxsKS5jYWxsKGYsInBvaW50ZXIiKS5vbigiY2xpY2siLGZ1bmN0aW9uKCl7dC5fZHJhZ2dpbmc9ITE7dmFyIGk9e2luZGV4OnIsYW5ub3RhdGlvbjplLl9pbnB1dCxmdWxsQW5ub3RhdGlvbjplLGV2ZW50Om4uZXZlbnR9O2EmJihpLnN1YnBsb3RJZD1hKSx0LmVtaXQoInBsb3RseV9jbGlja2Fubm90YXRpb24iLGkpfSk7ZS5ob3ZlcnRleHQmJkkub24oIm1vdXNlb3ZlciIsZnVuY3Rpb24oKXt2YXIgcj1lLmhvdmVybGFiZWwsbj1yLmZvbnQsaT10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGE9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt1LmxvbmVIb3Zlcih7eDA6aS5sZWZ0LWEubGVmdCx4MTppLnJpZ2h0LWEubGVmdCx5OihpLnRvcCtpLmJvdHRvbSkvMi1hLnRvcCx0ZXh0OmUuaG92ZXJ0ZXh0LGNvbG9yOnIuYmdjb2xvcixib3JkZXJDb2xvcjpyLmJvcmRlcmNvbG9yLGZvbnRGYW1pbHk6bi5mYW1pbHksZm9udFNpemU6bi5zaXplLGZvbnRDb2xvcjpuLmNvbG9yfSx7Y29udGFpbmVyOnguX2hvdmVybGF5ZXIubm9kZSgpLG91dGVyQ29udGFpbmVyOnguX3BhcGVyLm5vZGUoKSxnZDp0fSl9KS5vbigibW91c2VvdXQiLGZ1bmN0aW9uKCl7dS5sb25lVW5ob3Zlcih4Ll9ob3ZlcmxheWVyLm5vZGUoKSl9KTt2YXIgTz1lLmJvcmRlcndpZHRoLEQ9ZS5ib3JkZXJwYWQsUj1PK0QsQj1JLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwiYmciKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixPKyJweCIpLmNhbGwobC5zdHJva2UsZS5ib3JkZXJjb2xvcikuY2FsbChsLmZpbGwsZS5iZ2NvbG9yKSxGPWUud2lkdGh8fGUuaGVpZ2h0LE49eC5fdG9wY2xpcHMuc2VsZWN0QWxsKCIjIitUKS5kYXRhKEY/WzBdOltdKTtOLmVudGVyKCkuYXBwZW5kKCJjbGlwUGF0aCIpLmNsYXNzZWQoImFubmNsaXAiLCEwKS5hdHRyKCJpZCIsVCkuYXBwZW5kKCJyZWN0IiksTi5leGl0KCkucmVtb3ZlKCk7dmFyIGo9ZS5mb250LFY9SS5hcHBlbmQoInRleHQiKS5jbGFzc2VkKCJhbm5vdGF0aW9uLXRleHQiLCEwKS50ZXh0KGUudGV4dCk7Xy5hbm5vdGF0aW9uVGV4dD9WLmNhbGwoaC5tYWtlRWRpdGFibGUse2RlbGVnYXRlOkksZ2Q6dH0pLmNhbGwoVSkub24oImVkaXQiLGZ1bmN0aW9uKHIpe2UudGV4dD1yLHRoaXMuY2FsbChVKSxNKCJ0ZXh0IixyKSxzJiZzLmF1dG9yYW5nZSYmayhzLl9uYW1lKyIuYXV0b3JhbmdlIiwhMCksbSYmbS5hdXRvcmFuZ2UmJmsobS5fbmFtZSsiLmF1dG9yYW5nZSIsITApLGkuY2FsbCgicmVsYXlvdXQiLHQsQSgpKX0pOlYuY2FsbChVKX1lbHNlIG4uc2VsZWN0QWxsKCIjIitUKS5yZW1vdmUoKTtmdW5jdGlvbiBVKHIpe3JldHVybiByLmNhbGwoYy5mb250LGopLmF0dHIoeyJ0ZXh0LWFuY2hvciI6e2xlZnQ6InN0YXJ0IixyaWdodDoiZW5kIn1bZS5hbGlnbl18fCJtaWRkbGUifSksaC5jb252ZXJ0VG9Uc3BhbnMocix0LHEpLHJ9ZnVuY3Rpb24gcSgpe3ZhciByPVYuc2VsZWN0QWxsKCJhIik7MT09PXIuc2l6ZSgpJiZyLnRleHQoKT09PVYudGV4dCgpJiZJLmluc2VydCgiYSIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoeyJ4bGluazp4bGluazpocmVmIjpyLmF0dHIoInhsaW5rOmhyZWYiKSwieGxpbms6eGxpbms6c2hvdyI6ci5hdHRyKCJ4bGluazpzaG93Iil9KS5zdHlsZSh7Y3Vyc29yOiJwb2ludGVyIn0pLm5vZGUoKS5hcHBlbmRDaGlsZChCLm5vZGUoKSk7dmFyIG49SS5zZWxlY3QoIi5hbm5vdGF0aW9uLXRleHQtbWF0aC1ncm91cCIpLHU9IW4uZW1wdHkoKSxkPWMuYkJveCgodT9uOlYpLm5vZGUoKSksdj1kLndpZHRoLHk9ZC5oZWlnaHQsdz1lLndpZHRofHx2LFA9ZS5oZWlnaHR8fHksRD1NYXRoLnJvdW5kKHcrMipSKSxqPU1hdGgucm91bmQoUCsyKlIpO2Z1bmN0aW9uIFUodCxlKXtyZXR1cm4iYXV0byI9PT1lJiYoZT10PDEvMz8ibGVmdCI6dD4yLzM/InJpZ2h0IjoiY2VudGVyIikse2NlbnRlcjowLG1pZGRsZTowLGxlZnQ6LjUsYm90dG9tOi0uNSxyaWdodDotLjUsdG9wOi41fVtlXX1lLl93PXcsZS5faD1QO2Zvcih2YXIgcT0hMSxIPVsieCIsInkiXSxHPTA7RzxILmxlbmd0aDtHKyspe3ZhciBXLFksWCxaLCQsSj1IW0ddLEs9ZVtKKyJyZWYiXXx8SixRPWVbImEiK0orInJlZiJdLHR0PXt4OnMseTptfVtKXSxldD0oRSsoIngiPT09Sj8wOi05MCkpKk1hdGguUEkvMTgwLHJ0PUQqTWF0aC5jb3MoZXQpLG50PWoqTWF0aC5zaW4oZXQpLGl0PU1hdGguYWJzKHJ0KStNYXRoLmFicyhudCksYXQ9ZVtKKyJhbmNob3IiXSxvdD1lW0orInNoaWZ0Il0qKCJ4Ij09PUo/MTotMSksc3Q9U1tKXTtpZih0dCl7dmFyIGx0PXR0LnIyZnJhY3Rpb24oZVtKXSk7aWYoKHQuX2RyYWdnaW5nfHwhdHQuYXV0b3JhbmdlKSYmKGx0PDB8fGx0PjEpJiYoUT09PUs/KChsdD10dC5yMmZyYWN0aW9uKGVbImEiK0pdKSk8MHx8bHQ+MSkmJihxPSEwKTpxPSEwLHEpKWNvbnRpbnVlO1c9dHQuX29mZnNldCt0dC5yMnAoZVtKXSksWj0uNX1lbHNlIngiPT09Sj8oWD1lW0pdLFc9Yi5sK2IudypYKTooWD0xLWVbSl0sVz1iLnQrYi5oKlgpLFo9ZS5zaG93YXJyb3c/LjU6WDtpZihlLnNob3dhcnJvdyl7c3QuaGVhZD1XO3ZhciBjdD1lWyJhIitKXTskPXJ0KlUoLjUsZS54YW5jaG9yKS1udCpVKC41LGUueWFuY2hvciksUT09PUs/KHN0LnRhaWw9dHQuX29mZnNldCt0dC5yMnAoY3QpLFk9JCk6KHN0LnRhaWw9VytjdCxZPSQrY3QpLHN0LnRleHQ9c3QudGFpbCskO3ZhciB1dD14WyJ4Ij09PUo/IndpZHRoIjoiaGVpZ2h0Il07aWYoInBhcGVyIj09PUsmJihzdC5oZWFkPW8uY29uc3RyYWluKHN0LmhlYWQsMSx1dC0xKSksInBpeGVsIj09PVEpe3ZhciBodD0tTWF0aC5tYXgoc3QudGFpbC0zLHN0LnRleHQpLGZ0PU1hdGgubWluKHN0LnRhaWwrMyxzdC50ZXh0KS11dDtodD4wPyhzdC50YWlsKz1odCxzdC50ZXh0Kz1odCk6ZnQ+MCYmKHN0LnRhaWwtPWZ0LHN0LnRleHQtPWZ0KX1zdC50YWlsKz1vdCxzdC5oZWFkKz1vdH1lbHNlIFk9JD1pdCpVKFosYXQpLHN0LnRleHQ9VyskO3N0LnRleHQrPW90LCQrPW90LFkrPW90LGVbIl8iK0orInBhZHBsdXMiXT1pdC8yK1ksZVsiXyIrSisicGFkbWludXMiXT1pdC8yLVksZVsiXyIrSisic2l6ZSJdPWl0LGVbIl8iK0orInNoaWZ0Il09JH1pZihxKUkucmVtb3ZlKCk7ZWxzZXt2YXIgcHQ9MCxkdD0wO2lmKCJsZWZ0IiE9PWUuYWxpZ24mJihwdD0ody12KSooImNlbnRlciI9PT1lLmFsaWduPy41OjEpKSwidG9wIiE9PWUudmFsaWduJiYoZHQ9KFAteSkqKCJtaWRkbGUiPT09ZS52YWxpZ24/LjU6MSkpLHUpbi5zZWxlY3QoInN2ZyIpLmF0dHIoe3g6UitwdC0xLHk6UitkdH0pLmNhbGwoYy5zZXRDbGlwVXJsLEY/VDpudWxsKTtlbHNle3ZhciBndD1SK2R0LWQudG9wLG10PVIrcHQtZC5sZWZ0O1YuY2FsbChoLnBvc2l0aW9uVGV4dCxtdCxndCkuY2FsbChjLnNldENsaXBVcmwsRj9UOm51bGwpfU4uc2VsZWN0KCJyZWN0IikuY2FsbChjLnNldFJlY3QsUixSLHcsUCksQi5jYWxsKGMuc2V0UmVjdCxPLzIsTy8yLEQtTyxqLU8pLEkuY2FsbChjLnNldFRyYW5zbGF0ZSxNYXRoLnJvdW5kKFMueC50ZXh0LUQvMiksTWF0aC5yb3VuZChTLnkudGV4dC1qLzIpKSxMLmF0dHIoe3RyYW5zZm9ybToicm90YXRlKCIrRSsiLCIrUy54LnRleHQrIiwiK1MueS50ZXh0KyIpIn0pO3ZhciB2dCx5dD1mdW5jdGlvbihyLG4pe0Muc2VsZWN0QWxsKCIuYW5ub3RhdGlvbi1hcnJvdy1nIikucmVtb3ZlKCk7dmFyIHU9Uy54LmhlYWQsaD1TLnkuaGVhZCxmPVMueC50YWlsK3IsZD1TLnkudGFpbCtuLHY9Uy54LnRleHQrcix5PVMueS50ZXh0K24seD1vLnJvdGF0aW9uWFlNYXRyaXgoRSx2LHkpLHc9by5hcHBseTJEVHJhbnNmb3JtKHgpLFQ9by5hcHBseTJEVHJhbnNmb3JtMih4KSx6PStCLmF0dHIoIndpZHRoIiksUD0rQi5hdHRyKCJoZWlnaHQiKSxPPXYtLjUqeixEPU8reixSPXktLjUqUCxGPVIrUCxOPVtbTyxSLE8sRl0sW08sRixELEZdLFtELEYsRCxSXSxbRCxSLE8sUl1dLm1hcChUKTtpZighTi5yZWR1Y2UoZnVuY3Rpb24odCxlKXtyZXR1cm4gdF4hIW8uc2VnbWVudHNJbnRlcnNlY3QodSxoLHUrMWU2LGgrMWU2LGVbMF0sZVsxXSxlWzJdLGVbM10pfSwhMSkpe04uZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT1vLnNlZ21lbnRzSW50ZXJzZWN0KGYsZCx1LGgsdFswXSx0WzFdLHRbMl0sdFszXSk7ZSYmKGY9ZS54LGQ9ZS55KX0pO3ZhciBqPWUuYXJyb3d3aWR0aCxWPWUuYXJyb3djb2xvcixVPWUuYXJyb3dzaWRlLHE9Qy5hcHBlbmQoImciKS5zdHlsZSh7b3BhY2l0eTpsLm9wYWNpdHkoVil9KS5jbGFzc2VkKCJhbm5vdGF0aW9uLWFycm93LWciLCEwKSxIPXEuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0iK2YrIiwiK2QrIkwiK3UrIiwiK2gpLnN0eWxlKCJzdHJva2Utd2lkdGgiLGorInB4IikuY2FsbChsLnN0cm9rZSxsLnJnYihWKSk7aWYoZyhILFUsZSksXy5hbm5vdGF0aW9uUG9zaXRpb24mJkgubm9kZSgpLnBhcmVudE5vZGUmJiFhKXt2YXIgRz11LFc9aDtpZihlLnN0YW5kb2ZmKXt2YXIgWT1NYXRoLnNxcnQoTWF0aC5wb3codS1mLDIpK01hdGgucG93KGgtZCwyKSk7Rys9ZS5zdGFuZG9mZiooZi11KS9ZLFcrPWUuc3RhbmRvZmYqKGQtaCkvWX12YXIgWCxaLCQ9cS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJhbm5vdGF0aW9uLWFycm93IiwhMCkuY2xhc3NlZCgiYW5uZHJhZyIsITApLmNsYXNzZWQoImN1cnNvci1tb3ZlIiwhMCkuYXR0cih7ZDoiTTMsM0gtM1YtM0gzWk0wLDBMIisoZi1HKSsiLCIrKGQtVyksdHJhbnNmb3JtOiJ0cmFuc2xhdGUoIitHKyIsIitXKyIpIn0pLnN0eWxlKCJzdHJva2Utd2lkdGgiLGorNisicHgiKS5jYWxsKGwuc3Ryb2tlLCJyZ2JhKDAsMCwwLDApIikuY2FsbChsLmZpbGwsInJnYmEoMCwwLDAsMCkiKTtwLmluaXQoe2VsZW1lbnQ6JC5ub2RlKCksZ2Q6dCxwcmVwRm46ZnVuY3Rpb24oKXt2YXIgdD1jLmdldFRyYW5zbGF0ZShJKTtYPXQueCxaPXQueSxzJiZzLmF1dG9yYW5nZSYmayhzLl9uYW1lKyIuYXV0b3JhbmdlIiwhMCksbSYmbS5hdXRvcmFuZ2UmJmsobS5fbmFtZSsiLmF1dG9yYW5nZSIsITApfSxtb3ZlRm46ZnVuY3Rpb24odCxyKXt2YXIgbj13KFgsWiksaT1uWzBdK3QsYT1uWzFdK3I7SS5jYWxsKGMuc2V0VHJhbnNsYXRlLGksYSksTSgieCIscz9zLnAycihzLnIycChlLngpK3QpOmUueCt0L2IudyksTSgieSIsbT9tLnAycihtLnIycChlLnkpK3IpOmUueS1yL2IuaCksZS5heHJlZj09PWUueHJlZiYmTSgiYXgiLHMucDJyKHMucjJwKGUuYXgpK3QpKSxlLmF5cmVmPT09ZS55cmVmJiZNKCJheSIsbS5wMnIobS5yMnAoZS5heSkrcikpLHEuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdCsiLCIrcisiKSIpLEwuYXR0cih7dHJhbnNmb3JtOiJyb3RhdGUoIitFKyIsIitpKyIsIithKyIpIn0pfSxkb25lRm46ZnVuY3Rpb24oKXtpLmNhbGwoInJlbGF5b3V0Iix0LEEoKSk7dmFyIGU9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLmpzLW5vdGVzLWJveC1wYW5lbCIpO2UmJmUucmVkcmF3KGUuc2VsZWN0ZWRPYmopfX0pfX19O2lmKGUuc2hvd2Fycm93JiZ5dCgwLDApLHopcC5pbml0KHtlbGVtZW50Okkubm9kZSgpLGdkOnQscHJlcEZuOmZ1bmN0aW9uKCl7dnQ9TC5hdHRyKCJ0cmFuc2Zvcm0iKX0sbW92ZUZuOmZ1bmN0aW9uKHQscil7dmFyIG49InBvaW50ZXIiO2lmKGUuc2hvd2Fycm93KWUuYXhyZWY9PT1lLnhyZWY/TSgiYXgiLHMucDJyKHMucjJwKGUuYXgpK3QpKTpNKCJheCIsZS5heCt0KSxlLmF5cmVmPT09ZS55cmVmP00oImF5IixtLnAycihtLnIycChlLmF5KStyKSk6TSgiYXkiLGUuYXkrcikseXQodCxyKTtlbHNle2lmKGEpcmV0dXJuO3ZhciBpLG87aWYocylpPXMucDJyKHMucjJwKGUueCkrdCk7ZWxzZXt2YXIgbD1lLl94c2l6ZS9iLncsYz1lLngrKGUuX3hzaGlmdC1lLnhzaGlmdCkvYi53LWwvMjtpPXAuYWxpZ24oYyt0L2IudyxsLDAsMSxlLnhhbmNob3IpfWlmKG0pbz1tLnAycihtLnIycChlLnkpK3IpO2Vsc2V7dmFyIHU9ZS5feXNpemUvYi5oLGg9ZS55LShlLl95c2hpZnQrZS55c2hpZnQpL2IuaC11LzI7bz1wLmFsaWduKGgtci9iLmgsdSwwLDEsZS55YW5jaG9yKX1NKCJ4IixpKSxNKCJ5IixvKSxzJiZtfHwobj1wLmdldEN1cnNvcihzPy41OmksbT8uNTpvLGUueGFuY2hvcixlLnlhbmNob3IpKX1MLmF0dHIoe3RyYW5zZm9ybToidHJhbnNsYXRlKCIrdCsiLCIrcisiKSIrdnR9KSxmKEksbil9LGRvbmVGbjpmdW5jdGlvbigpe2YoSSksaS5jYWxsKCJyZWxheW91dCIsdCxBKCkpO3ZhciBlPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5qcy1ub3Rlcy1ib3gtcGFuZWwiKTtlJiZlLnJlZHJhdyhlLnNlbGVjdGVkT2JqKX19KX19fWUuZXhwb3J0cz17ZHJhdzpmdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0O2UuX2luZm9sYXllci5zZWxlY3RBbGwoIi5hbm5vdGF0aW9uIikucmVtb3ZlKCk7Zm9yKHZhciByPTA7cjxlLmFubm90YXRpb25zLmxlbmd0aDtyKyspZS5hbm5vdGF0aW9uc1tyXS52aXNpYmxlJiZtKHQscik7cmV0dXJuIGEucHJldmlvdXNQcm9taXNlcyh0KX0sZHJhd09uZTptLGRyYXdSYXc6dn19LHsiLi4vLi4vbGliIjo2ODQsIi4uLy4uL2xpYi9zZXRjdXJzb3IiOjcwNCwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo3MDgsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjcyMiwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjczMiwiLi4vLi4vcGxvdHMvcGxvdHMiOjc5NSwiLi4vLi4vcmVnaXN0cnkiOjgxNywiLi4vY29sb3IiOjU1OCwiLi4vZHJhZ2VsZW1lbnQiOjU4MCwiLi4vZHJhd2luZyI6NTgzLCIuLi9meCI6NjAwLCIuL2RyYXdfYXJyb3dfaGVhZCI6NTQ4LGQzOjE0N31dLDU0ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vY29sb3IiKSxhPXQoIi4vYXJyb3dfcGF0aHMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBvLHMsbCxjLHU9dC5ub2RlKCksaD1hW3IuYXJyb3doZWFkfHwwXSxmPWFbci5zdGFydGFycm93aGVhZHx8MF0scD0oci5hcnJvd3dpZHRofHwxKSooci5hcnJvd3NpemV8fDEpLGQ9KHIuYXJyb3d3aWR0aHx8MSkqKHIuc3RhcnRhcnJvd3NpemV8fDEpLGc9ZS5pbmRleE9mKCJzdGFydCIpPj0wLG09ZS5pbmRleE9mKCJlbmQiKT49MCx2PWguYmFja29mZipwK3Iuc3RhbmRvZmYseT1mLmJhY2tvZmYqZCtyLnN0YXJ0c3RhbmRvZmY7aWYoImxpbmUiPT09dS5ub2RlTmFtZSl7bz17eDordC5hdHRyKCJ4MSIpLHk6K3QuYXR0cigieTEiKX0scz17eDordC5hdHRyKCJ4MiIpLHk6K3QuYXR0cigieTIiKX07dmFyIHg9by54LXMueCxiPW8ueS1zLnk7aWYoYz0obD1NYXRoLmF0YW4yKGIseCkpK01hdGguUEksdiYmeSYmdit5Pk1hdGguc3FydCh4KngrYipiKSlyZXR1cm4gdm9pZCB6KCk7aWYodil7aWYodip2PngqeCtiKmIpcmV0dXJuIHZvaWQgeigpO3ZhciBfPXYqTWF0aC5jb3MobCksdz12Kk1hdGguc2luKGwpO3MueCs9XyxzLnkrPXcsdC5hdHRyKHt4MjpzLngseTI6cy55fSl9aWYoeSl7aWYoeSp5PngqeCtiKmIpcmV0dXJuIHZvaWQgeigpO3ZhciBrPXkqTWF0aC5jb3MobCksTT15Kk1hdGguc2luKGwpO28ueC09ayxvLnktPU0sdC5hdHRyKHt4MTpvLngseTE6by55fSl9fWVsc2UgaWYoInBhdGgiPT09dS5ub2RlTmFtZSl7dmFyIEE9dS5nZXRUb3RhbExlbmd0aCgpLFQ9IiI7aWYoQTx2K3kpcmV0dXJuIHZvaWQgeigpO3ZhciBTPXUuZ2V0UG9pbnRBdExlbmd0aCgwKSxFPXUuZ2V0UG9pbnRBdExlbmd0aCguMSk7bD1NYXRoLmF0YW4yKFMueS1FLnksUy54LUUueCksbz11LmdldFBvaW50QXRMZW5ndGgoTWF0aC5taW4oeSxBKSksVD0iMHB4LCIreSsicHgsIjt2YXIgQz11LmdldFBvaW50QXRMZW5ndGgoQSksTD11LmdldFBvaW50QXRMZW5ndGgoQS0uMSk7Yz1NYXRoLmF0YW4yKEMueS1MLnksQy54LUwueCkscz11LmdldFBvaW50QXRMZW5ndGgoTWF0aC5tYXgoMCxBLXYpKSxUKz1BLShUP3krdjp2KSsicHgsIitBKyJweCIsdC5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsVCl9ZnVuY3Rpb24geigpe3Quc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIwcHgsMTAwcHgiKX1mdW5jdGlvbiBQKGUsYSxvLHMpe2UucGF0aCYmKGUubm9Sb3RhdGUmJihvPTApLG4uc2VsZWN0KHUucGFyZW50Tm9kZSkuYXBwZW5kKCJwYXRoIikuYXR0cih7Y2xhc3M6dC5hdHRyKCJjbGFzcyIpLGQ6ZS5wYXRoLHRyYW5zZm9ybToidHJhbnNsYXRlKCIrYS54KyIsIithLnkrIikiKyhvPyJyb3RhdGUoIisxODAqby9NYXRoLlBJKyIpIjoiIikrInNjYWxlKCIrcysiKSJ9KS5zdHlsZSh7ZmlsbDppLnJnYihyLmFycm93Y29sb3IpLCJzdHJva2Utd2lkdGgiOjB9KSl9ZyYmUChmLG8sbCxkKSxtJiZQKGgscyxjLHApfX0seyIuLi9jb2xvciI6NTU4LCIuL2Fycm93X3BhdGhzIjo1NDAsZDM6MTQ3fV0sNTQ5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vZHJhdyIpLGk9dCgiLi9jbGljayIpO2UuZXhwb3J0cz17bW9kdWxlVHlwZToiY29tcG9uZW50IixuYW1lOiJhbm5vdGF0aW9ucyIsbGF5b3V0QXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlMYXlvdXREZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksaW5jbHVkZUJhc2VQbG90OnQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9pbmNsdWRlX2NvbXBvbmVudHMiKSgiYW5ub3RhdGlvbnMiKSxjYWxjQXV0b3JhbmdlOnQoIi4vY2FsY19hdXRvcmFuZ2UiKSxkcmF3Om4uZHJhdyxkcmF3T25lOm4uZHJhd09uZSxkcmF3UmF3Om4uZHJhd1JhdyxoYXNDbGlja1RvU2hvdzppLmhhc0NsaWNrVG9TaG93LG9uQ2xpY2s6aS5vbkNsaWNrLGNvbnZlcnRDb29yZHM6dCgiLi9jb252ZXJ0X2Nvb3JkcyIpfX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vaW5jbHVkZV9jb21wb25lbnRzIjo3NDIsIi4vYXR0cmlidXRlcyI6NTQxLCIuL2NhbGNfYXV0b3JhbmdlIjo1NDIsIi4vY2xpY2siOjU0MywiLi9jb252ZXJ0X2Nvb3JkcyI6NTQ1LCIuL2RlZmF1bHRzIjo1NDYsIi4vZHJhdyI6NTQ3fV0sNTUwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2Fubm90YXRpb25zL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbCxhPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKS50ZW1wbGF0ZWRBcnJheTtlLmV4cG9ydHM9aShhKCJhbm5vdGF0aW9uIix7dmlzaWJsZTpuLnZpc2libGUseDp7dmFsVHlwZToiYW55In0seTp7dmFsVHlwZToiYW55In0sejp7dmFsVHlwZToiYW55In0sYXg6e3ZhbFR5cGU6Im51bWJlciJ9LGF5Ont2YWxUeXBlOiJudW1iZXIifSx4YW5jaG9yOm4ueGFuY2hvcix4c2hpZnQ6bi54c2hpZnQseWFuY2hvcjpuLnlhbmNob3IseXNoaWZ0Om4ueXNoaWZ0LHRleHQ6bi50ZXh0LHRleHRhbmdsZTpuLnRleHRhbmdsZSxmb250Om4uZm9udCx3aWR0aDpuLndpZHRoLGhlaWdodDpuLmhlaWdodCxvcGFjaXR5Om4ub3BhY2l0eSxhbGlnbjpuLmFsaWduLHZhbGlnbjpuLnZhbGlnbixiZ2NvbG9yOm4uYmdjb2xvcixib3JkZXJjb2xvcjpuLmJvcmRlcmNvbG9yLGJvcmRlcnBhZDpuLmJvcmRlcnBhZCxib3JkZXJ3aWR0aDpuLmJvcmRlcndpZHRoLHNob3dhcnJvdzpuLnNob3dhcnJvdyxhcnJvd2NvbG9yOm4uYXJyb3djb2xvcixhcnJvd2hlYWQ6bi5hcnJvd2hlYWQsc3RhcnRhcnJvd2hlYWQ6bi5zdGFydGFycm93aGVhZCxhcnJvd3NpZGU6bi5hcnJvd3NpZGUsYXJyb3dzaXplOm4uYXJyb3dzaXplLHN0YXJ0YXJyb3dzaXplOm4uc3RhcnRhcnJvd3NpemUsYXJyb3d3aWR0aDpuLmFycm93d2lkdGgsc3RhbmRvZmY6bi5zdGFuZG9mZixzdGFydHN0YW5kb2ZmOm4uc3RhcnRzdGFuZG9mZixob3ZlcnRleHQ6bi5ob3ZlcnRleHQsaG92ZXJsYWJlbDpuLmhvdmVybGFiZWwsY2FwdHVyZWV2ZW50czpuLmNhcHR1cmVldmVudHN9KSwiY2FsYyIsImZyb20tcm9vdCIpfSx7Ii4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjcxNSwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6NzIyLCIuLi9hbm5vdGF0aW9ucy9hdHRyaWJ1dGVzIjo1NDF9XSw1NTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpO2Z1bmN0aW9uIGEodCxlKXt2YXIgcj1lLmZ1bGxTY2VuZUxheW91dC5kb21haW4sYT1lLmZ1bGxMYXlvdXQuX3NpemUsbz17cGRhdGE6bnVsbCx0eXBlOiJsaW5lYXIiLGF1dG9yYW5nZTohMSxyYW5nZTpbLTEvMCwxLzBdfTt0Ll94YT17fSxuLmV4dGVuZEZsYXQodC5feGEsbyksaS5zZXRDb252ZXJ0KHQuX3hhKSx0Ll94YS5fb2Zmc2V0PWEubCtyLnhbMF0qYS53LHQuX3hhLmwycD1mdW5jdGlvbigpe3JldHVybi41KigxK3QuX3BkYXRhWzBdL3QuX3BkYXRhWzNdKSphLncqKHIueFsxXS1yLnhbMF0pfSx0Ll95YT17fSxuLmV4dGVuZEZsYXQodC5feWEsbyksaS5zZXRDb252ZXJ0KHQuX3lhKSx0Ll95YS5fb2Zmc2V0PWEudCsoMS1yLnlbMV0pKmEuaCx0Ll95YS5sMnA9ZnVuY3Rpb24oKXtyZXR1cm4uNSooMS10Ll9wZGF0YVsxXS90Ll9wZGF0YVszXSkqYS5oKihyLnlbMV0tci55WzBdKX19ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LmZ1bGxTY2VuZUxheW91dC5hbm5vdGF0aW9ucyxyPTA7cjxlLmxlbmd0aDtyKyspYShlW3JdLHQpO3QuZnVsbExheW91dC5faW5mb2xheWVyLnNlbGVjdEFsbCgiLmFubm90YXRpb24tIit0LmlkKS5yZW1vdmUoKX19LHsiLi4vLi4vbGliIjo2ODQsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3MzJ9XSw1NTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGE9dCgiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIiksbz10KCIuLi9hbm5vdGF0aW9ucy9jb21tb25fZGVmYXVsdHMiKSxzPXQoIi4vYXR0cmlidXRlcyIpO2Z1bmN0aW9uIGwodCxlLHIsYSl7ZnVuY3Rpb24gbChyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUscyxyLGkpfWZ1bmN0aW9uIGModCl7dmFyIG49dCsiYXhpcyIsYT17X2Z1bGxMYXlvdXQ6e319O3JldHVybiBhLl9mdWxsTGF5b3V0W25dPXJbbl0saS5jb2VyY2VQb3NpdGlvbihlLGEsbCx0LHQsLjUpfWwoInZpc2libGUiKSYmKG8odCxlLGEuZnVsbExheW91dCxsKSxjKCJ4IiksYygieSIpLGMoInoiKSxuLm5vbmVPckFsbCh0LGUsWyJ4IiwieSIsInoiXSksZS54cmVmPSJ4IixlLnlyZWY9InkiLGUuenJlZj0ieiIsbCgieGFuY2hvciIpLGwoInlhbmNob3IiKSxsKCJ4c2hpZnQiKSxsKCJ5c2hpZnQiKSxlLnNob3dhcnJvdyYmKGUuYXhyZWY9InBpeGVsIixlLmF5cmVmPSJwaXhlbCIsbCgiYXgiLC0xMCksbCgiYXkiLC0zMCksbi5ub25lT3JBbGwodCxlLFsiYXgiLCJheSJdKSkpfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7YSh0LGUse25hbWU6ImFubm90YXRpb25zIixoYW5kbGVJdGVtRGVmYXVsdHM6bCxmdWxsTGF5b3V0OnIuZnVsbExheW91dH0pfX0seyIuLi8uLi9saWIiOjY4NCwiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIjo3MjgsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3MzIsIi4uL2Fubm90YXRpb25zL2NvbW1vbl9kZWZhdWx0cyI6NTQ0LCIuL2F0dHJpYnV0ZXMiOjU1MH1dLDU1MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9hbm5vdGF0aW9ucy9kcmF3IikuZHJhd1JhdyxpPXQoIi4uLy4uL3Bsb3RzL2dsM2QvcHJvamVjdCIpLGE9WyJ4IiwieSIsInoiXTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuZnVsbFNjZW5lTGF5b3V0LHI9dC5kYXRhU2NhbGUsbz1lLmFubm90YXRpb25zLHM9MDtzPG8ubGVuZ3RoO3MrKyl7Zm9yKHZhciBsPW9bc10sYz0hMSx1PTA7dTwzO3UrKyl7dmFyIGg9YVt1XSxmPWxbaF0scD1lW2grImF4aXMiXS5yMmZyYWN0aW9uKGYpO2lmKHA8MHx8cD4xKXtjPSEwO2JyZWFrfX1jP3QuZnVsbExheW91dC5faW5mb2xheWVyLnNlbGVjdCgiLmFubm90YXRpb24tIit0LmlkKydbZGF0YS1pbmRleD0iJytzKyciXScpLnJlbW92ZSgpOihsLl9wZGF0YT1pKHQuZ2xwbG90LmNhbWVyYVBhcmFtcyxbZS54YXhpcy5yMmwobC54KSpyWzBdLGUueWF4aXMucjJsKGwueSkqclsxXSxlLnpheGlzLnIybChsLnopKnJbMl1dKSxuKHQuZ3JhcGhEaXYsbCxzLHQuaWQsbC5feGEsbC5feWEpKX19fSx7Ii4uLy4uL3Bsb3RzL2dsM2QvcHJvamVjdCI6NzgzLCIuLi9hbm5vdGF0aW9ucy9kcmF3Ijo1NDd9XSw1NTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz17bW9kdWxlVHlwZToiY29tcG9uZW50IixuYW1lOiJhbm5vdGF0aW9uczNkIixzY2hlbWE6e3N1YnBsb3RzOntzY2VuZTp7YW5ub3RhdGlvbnM6dCgiLi9hdHRyaWJ1dGVzIil9fX0sbGF5b3V0QXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxoYW5kbGVEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksaW5jbHVkZUJhc2VQbG90OmZ1bmN0aW9uKHQsZSl7dmFyIHI9bi5zdWJwbG90c1JlZ2lzdHJ5LmdsM2Q7aWYoIXIpcmV0dXJuO2Zvcih2YXIgYT1yLmF0dHJSZWdleCxvPU9iamVjdC5rZXlzKHQpLHM9MDtzPG8ubGVuZ3RoO3MrKyl7dmFyIGw9b1tzXTthLnRlc3QobCkmJih0W2xdLmFubm90YXRpb25zfHxbXSkubGVuZ3RoJiYoaS5wdXNoVW5pcXVlKGUuX2Jhc2VQbG90TW9kdWxlcyxyKSxpLnB1c2hVbmlxdWUoZS5fc3VicGxvdHMuZ2wzZCxsKSl9fSxjb252ZXJ0OnQoIi4vY29udmVydCIpLGRyYXc6dCgiLi9kcmF3Iil9fSx7Ii4uLy4uL2xpYiI6Njg0LCIuLi8uLi9yZWdpc3RyeSI6ODE3LCIuL2F0dHJpYnV0ZXMiOjU1MCwiLi9jb252ZXJ0Ijo1NTEsIi4vZGVmYXVsdHMiOjU1MiwiLi9kcmF3Ijo1NTN9XSw1NTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIndvcmxkLWNhbGVuZGFycy9kaXN0L21haW4iKSx0KCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9wbHVzIiksdCgid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL2NoaW5lc2UiKSx0KCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvY29wdGljIiksdCgid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL2Rpc2N3b3JsZCIpLHQoIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9ldGhpb3BpYW4iKSx0KCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvaGVicmV3IiksdCgid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL2lzbGFtaWMiKSx0KCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvanVsaWFuIiksdCgid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL21heWFuIiksdCgid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL25hbmFrc2hhaGkiKSx0KCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvbmVwYWxpIiksdCgid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL3BlcnNpYW4iKSx0KCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvdGFpd2FuIiksdCgid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL3RoYWkiKSx0KCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvdW1tYWxxdXJhIil9LHsid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL2NoaW5lc2UiOjUyMiwid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL2NvcHRpYyI6NTIzLCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvZGlzY3dvcmxkIjo1MjQsIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9ldGhpb3BpYW4iOjUyNSwid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL2hlYnJldyI6NTI2LCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvaXNsYW1pYyI6NTI3LCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvanVsaWFuIjo1MjgsIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9tYXlhbiI6NTI5LCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvbmFuYWtzaGFoaSI6NTMwLCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvbmVwYWxpIjo1MzEsIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9wZXJzaWFuIjo1MzIsIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy90YWl3YW4iOjUzMywid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL3RoYWkiOjUzNCwid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL3VtbWFscXVyYSI6NTM1LCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9tYWluIjo1MzYsIndvcmxkLWNhbGVuZGFycy9kaXN0L3BsdXMiOjUzN31dLDU1NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2NhbGVuZGFycyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIiksbz1hLkVQT0NISkQscz1hLk9ORURBWSxsPXt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6T2JqZWN0LmtleXMobi5jYWxlbmRhcnMpLGVkaXRUeXBlOiJjYWxjIixkZmx0OiJncmVnb3JpYW4ifSxjPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBhPXt9O3JldHVybiBhW3JdPWwsaS5jb2VyY2UodCxlLGEscixuKX0sdT0iIyMiLGg9e2Q6ezA6ImRkIiwiLSI6ImQifSxlOnswOiJkIiwiLSI6ImQifSxhOnswOiJEIiwiLSI6IkQifSxBOnswOiJERCIsIi0iOiJERCJ9LGo6ezA6Im9vIiwiLSI6Im8ifSxXOnswOiJ3dyIsIi0iOiJ3In0sbTp7MDoibW0iLCItIjoibSJ9LGI6ezA6Ik0iLCItIjoiTSJ9LEI6ezA6Ik1NIiwiLSI6Ik1NIn0seTp7MDoieXkiLCItIjoieXkifSxZOnswOiJ5eXl5IiwiLSI6Inl5eXkifSxVOnUsdzp1LGM6ezA6IkQgTSBkICVYIHl5eXkiLCItIjoiRCBNIGQgJVggeXl5eSJ9LHg6ezA6Im1tL2RkL3l5eXkiLCItIjoibW0vZGQveXl5eSJ9fTt2YXIgZj17fTtmdW5jdGlvbiBwKHQpe3ZhciBlPWZbdF07cmV0dXJuIGV8fChlPWZbdF09bi5pbnN0YW5jZSh0KSl9ZnVuY3Rpb24gZCh0KXtyZXR1cm4gaS5leHRlbmRGbGF0KHt9LGwse2Rlc2NyaXB0aW9uOnR9KX1mdW5jdGlvbiBnKHQpe3JldHVybiJTZXRzIHRoZSBjYWxlbmRhciBzeXN0ZW0gdG8gdXNlIHdpdGggYCIrdCsiYCBkYXRlIGRhdGEuIn12YXIgbT17eGNhbGVuZGFyOmQoZygieCIpKX0sdj1pLmV4dGVuZEZsYXQoe30sbSx7eWNhbGVuZGFyOmQoZygieSIpKX0pLHk9aS5leHRlbmRGbGF0KHt9LHYse3pjYWxlbmRhcjpkKGcoInoiKSl9KSx4PWQoWyJTZXRzIHRoZSBjYWxlbmRhciBzeXN0ZW0gdG8gdXNlIGZvciBgcmFuZ2VgIGFuZCBgdGljazBgIiwiaWYgdGhpcyBpcyBhIGRhdGUgYXhpcy4gVGhpcyBkb2VzIG5vdCBzZXQgdGhlIGNhbGVuZGFyIGZvciIsImludGVycHJldGluZyBkYXRhIG9uIHRoaXMgYXhpcywgdGhhdCdzIHNwZWNpZmllZCBpbiB0aGUgdHJhY2UiLCJvciB2aWEgdGhlIGdsb2JhbCBgbGF5b3V0LmNhbGVuZGFyYCJdLmpvaW4oIiAiKSk7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJjb21wb25lbnQiLG5hbWU6ImNhbGVuZGFycyIsc2NoZW1hOnt0cmFjZXM6e3NjYXR0ZXI6dixiYXI6dixib3g6dixoZWF0bWFwOnYsY29udG91cjp2LGhpc3RvZ3JhbTp2LGhpc3RvZ3JhbTJkOnYsaGlzdG9ncmFtMmRjb250b3VyOnYsc2NhdHRlcjNkOnksc3VyZmFjZTp5LG1lc2gzZDp5LHNjYXR0ZXJnbDp2LG9obGM6bSxjYW5kbGVzdGljazptfSxsYXlvdXQ6e2NhbGVuZGFyOmQoWyJTZXRzIHRoZSBkZWZhdWx0IGNhbGVuZGFyIHN5c3RlbSB0byB1c2UgZm9yIGludGVycHJldGluZyBhbmQiLCJkaXNwbGF5aW5nIGRhdGVzIHRocm91Z2hvdXQgdGhlIHBsb3QuIl0uam9pbigiICIpKX0sc3VicGxvdHM6e3hheGlzOntjYWxlbmRhcjp4fSx5YXhpczp7Y2FsZW5kYXI6eH0sc2NlbmU6e3hheGlzOntjYWxlbmRhcjp4fSx5YXhpczp7Y2FsZW5kYXI6eH0semF4aXM6e2NhbGVuZGFyOnh9fSxwb2xhcjp7cmFkaWFsYXhpczp7Y2FsZW5kYXI6eH19fSx0cmFuc2Zvcm1zOntmaWx0ZXI6e3ZhbHVlY2FsZW5kYXI6ZChbIlNldHMgdGhlIGNhbGVuZGFyIHN5c3RlbSB0byB1c2UgZm9yIGB2YWx1ZWAsIGlmIGl0IGlzIGEgZGF0ZS4iXS5qb2luKCIgIikpLHRhcmdldGNhbGVuZGFyOmQoWyJTZXRzIHRoZSBjYWxlbmRhciBzeXN0ZW0gdG8gdXNlIGZvciBgdGFyZ2V0YCwgaWYgaXQgaXMgYW4iLCJhcnJheSBvZiBkYXRlcy4gSWYgYHRhcmdldGAgaXMgYSBzdHJpbmcgKGVnICp4Kikgd2UgdXNlIHRoZSIsImNvcnJlc3BvbmRpbmcgdHJhY2UgYXR0cmlidXRlIChlZyBgeGNhbGVuZGFyYCkgaWYgaXQgZXhpc3RzLCIsImV2ZW4gaWYgYHRhcmdldGNhbGVuZGFyYCBpcyBwcm92aWRlZC4iXS5qb2luKCIgIikpfX19LGxheW91dEF0dHJpYnV0ZXM6bCxoYW5kbGVEZWZhdWx0czpjLGhhbmRsZVRyYWNlRGVmYXVsdHM6ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPTA7aTxyLmxlbmd0aDtpKyspYyh0LGUscltpXSsiY2FsZW5kYXIiLG4uY2FsZW5kYXIpfSxDQU5PTklDQUxfU1VOREFZOntjaGluZXNlOiIyMDAwLTAxLTAyIixjb3B0aWM6IjIwMDAtMDEtMDMiLGRpc2N3b3JsZDoiMjAwMC0wMS0wMyIsZXRoaW9waWFuOiIyMDAwLTAxLTA1IixoZWJyZXc6IjUwMDAtMDEtMDEiLGlzbGFtaWM6IjEwMDAtMDEtMDIiLGp1bGlhbjoiMjAwMC0wMS0wMyIsbWF5YW46IjUwMDAtMDEtMDEiLG5hbmFrc2hhaGk6IjEwMDAtMDEtMDUiLG5lcGFsaToiMjAwMC0wMS0wNSIscGVyc2lhbjoiMTAwMC0wMS0wMSIsamFsYWxpOiIxMDAwLTAxLTAxIix0YWl3YW46IjEwMDAtMDEtMDQiLHRoYWk6IjIwMDAtMDEtMDQiLHVtbWFscXVyYToiMTQwMC0wMS0wNiJ9LENBTk9OSUNBTF9USUNLOntjaGluZXNlOiIyMDAwLTAxLTAxIixjb3B0aWM6IjIwMDAtMDEtMDEiLGRpc2N3b3JsZDoiMjAwMC0wMS0wMSIsZXRoaW9waWFuOiIyMDAwLTAxLTAxIixoZWJyZXc6IjUwMDAtMDEtMDEiLGlzbGFtaWM6IjEwMDAtMDEtMDEiLGp1bGlhbjoiMjAwMC0wMS0wMSIsbWF5YW46IjUwMDAtMDEtMDEiLG5hbmFrc2hhaGk6IjEwMDAtMDEtMDEiLG5lcGFsaToiMjAwMC0wMS0wMSIscGVyc2lhbjoiMTAwMC0wMS0wMSIsamFsYWxpOiIxMDAwLTAxLTAxIix0YWl3YW46IjEwMDAtMDEtMDEiLHRoYWk6IjIwMDAtMDEtMDEiLHVtbWFscXVyYToiMTQwMC0wMS0wMSJ9LERGTFRSQU5HRTp7Y2hpbmVzZTpbIjIwMDAtMDEtMDEiLCIyMDAxLTAxLTAxIl0sY29wdGljOlsiMTcwMC0wMS0wMSIsIjE3MDEtMDEtMDEiXSxkaXNjd29ybGQ6WyIxODAwLTAxLTAxIiwiMTgwMS0wMS0wMSJdLGV0aGlvcGlhbjpbIjIwMDAtMDEtMDEiLCIyMDAxLTAxLTAxIl0saGVicmV3OlsiNTcwMC0wMS0wMSIsIjU3MDEtMDEtMDEiXSxpc2xhbWljOlsiMTQwMC0wMS0wMSIsIjE0MDEtMDEtMDEiXSxqdWxpYW46WyIyMDAwLTAxLTAxIiwiMjAwMS0wMS0wMSJdLG1heWFuOlsiNTIwMC0wMS0wMSIsIjUyMDEtMDEtMDEiXSxuYW5ha3NoYWhpOlsiMDUwMC0wMS0wMSIsIjA1MDEtMDEtMDEiXSxuZXBhbGk6WyIyMDAwLTAxLTAxIiwiMjAwMS0wMS0wMSJdLHBlcnNpYW46WyIxNDAwLTAxLTAxIiwiMTQwMS0wMS0wMSJdLGphbGFsaTpbIjE0MDAtMDEtMDEiLCIxNDAxLTAxLTAxIl0sdGFpd2FuOlsiMDEwMC0wMS0wMSIsIjAxMDEtMDEtMDEiXSx0aGFpOlsiMjUwMC0wMS0wMSIsIjI1MDEtMDEtMDEiXSx1bW1hbHF1cmE6WyIxNDAwLTAxLTAxIiwiMTQwMS0wMS0wMSJdfSxnZXRDYWw6cCx3b3JsZENhbEZtdDpmdW5jdGlvbih0LGUscil7Zm9yKHZhciBuLGksYSxsLGMsZj1NYXRoLmZsb29yKChlKy4wNSkvcykrbyxkPXAocikuZnJvbUpEKGYpLGc9MDstMSE9PShnPXQuaW5kZXhPZigiJSIsZykpOykiMCI9PT0obj10LmNoYXJBdChnKzEpKXx8Ii0iPT09bnx8Il8iPT09bj8oYT0zLGk9dC5jaGFyQXQoZysyKSwiXyI9PT1uJiYobj0iLSIpKTooaT1uLG49IjAiLGE9MiksKGw9aFtpXSk/KGM9bD09PXU/dTpkLmZvcm1hdERhdGUobFtuXSksdD10LnN1YnN0cigwLGcpK2MrdC5zdWJzdHIoZythKSxnKz1jLmxlbmd0aCk6Zys9YTtyZXR1cm4gdH19fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjY2MSwiLi4vLi4vbGliIjo2ODQsIi4vY2FsZW5kYXJzIjo1NTV9XSw1NTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ci5kZWZhdWx0cz1bIiMxZjc3YjQiLCIjZmY3ZjBlIiwiIzJjYTAyYyIsIiNkNjI3MjgiLCIjOTQ2N2JkIiwiIzhjNTY0YiIsIiNlMzc3YzIiLCIjN2Y3ZjdmIiwiI2JjYmQyMiIsIiMxN2JlY2YiXSxyLmRlZmF1bHRMaW5lPSIjNDQ0IixyLmxpZ2h0TGluZT0iI2VlZSIsci5iYWNrZ3JvdW5kPSIjZmZmIixyLmJvcmRlckxpbmU9IiNCRUM4RDkiLHIubGlnaHRGcmFjdGlvbj0xZTMvMTF9LHt9XSw1NTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgidGlueWNvbG9yMiIpLGk9dCgiZmFzdC1pc251bWVyaWMiKSxhPWUuZXhwb3J0cz17fSxvPXQoIi4vYXR0cmlidXRlcyIpO2EuZGVmYXVsdHM9by5kZWZhdWx0czt2YXIgcz1hLmRlZmF1bHRMaW5lPW8uZGVmYXVsdExpbmU7YS5saWdodExpbmU9by5saWdodExpbmU7dmFyIGw9YS5iYWNrZ3JvdW5kPW8uYmFja2dyb3VuZDtmdW5jdGlvbiBjKHQpe2lmKGkodCl8fCJzdHJpbmciIT10eXBlb2YgdClyZXR1cm4gdDt2YXIgZT10LnRyaW0oKTtpZigicmdiIiE9PWUuc3Vic3RyKDAsMykpcmV0dXJuIHQ7dmFyIHI9ZS5tYXRjaCgvXnJnYmE/XHMqXCgoW14oKV0qKVwpJC8pO2lmKCFyKXJldHVybiB0O3ZhciBuPXJbMV0udHJpbSgpLnNwbGl0KC9ccypbXHMsXVxzKi8pLGE9ImEiPT09ZS5jaGFyQXQoMykmJjQ9PT1uLmxlbmd0aDtpZighYSYmMyE9PW4ubGVuZ3RoKXJldHVybiB0O2Zvcih2YXIgbz0wO288bi5sZW5ndGg7bysrKXtpZighbltvXS5sZW5ndGgpcmV0dXJuIHQ7aWYobltvXT1OdW1iZXIobltvXSksIShuW29dPj0wKSlyZXR1cm4gdDtpZigzPT09byluW29dPjEmJihuW29dPTEpO2Vsc2UgaWYobltvXT49MSlyZXR1cm4gdH12YXIgcz1NYXRoLnJvdW5kKDI1NSpuWzBdKSsiLCAiK01hdGgucm91bmQoMjU1Km5bMV0pKyIsICIrTWF0aC5yb3VuZCgyNTUqblsyXSk7cmV0dXJuIGE/InJnYmEoIitzKyIsICIrblszXSsiKSI6InJnYigiK3MrIikifWEudGlueVJHQj1mdW5jdGlvbih0KXt2YXIgZT10LnRvUmdiKCk7cmV0dXJuInJnYigiK01hdGgucm91bmQoZS5yKSsiLCAiK01hdGgucm91bmQoZS5nKSsiLCAiK01hdGgucm91bmQoZS5iKSsiKSJ9LGEucmdiPWZ1bmN0aW9uKHQpe3JldHVybiBhLnRpbnlSR0Iobih0KSl9LGEub3BhY2l0eT1mdW5jdGlvbih0KXtyZXR1cm4gdD9uKHQpLmdldEFscGhhKCk6MH0sYS5hZGRPcGFjaXR5PWZ1bmN0aW9uKHQsZSl7dmFyIHI9bih0KS50b1JnYigpO3JldHVybiJyZ2JhKCIrTWF0aC5yb3VuZChyLnIpKyIsICIrTWF0aC5yb3VuZChyLmcpKyIsICIrTWF0aC5yb3VuZChyLmIpKyIsICIrZSsiKSJ9LGEuY29tYmluZT1mdW5jdGlvbih0LGUpe3ZhciByPW4odCkudG9SZ2IoKTtpZigxPT09ci5hKXJldHVybiBuKHQpLnRvUmdiU3RyaW5nKCk7dmFyIGk9bihlfHxsKS50b1JnYigpLGE9MT09PWkuYT9pOntyOjI1NSooMS1pLmEpK2kucippLmEsZzoyNTUqKDEtaS5hKStpLmcqaS5hLGI6MjU1KigxLWkuYSkraS5iKmkuYX0sbz17cjphLnIqKDEtci5hKStyLnIqci5hLGc6YS5nKigxLXIuYSkrci5nKnIuYSxiOmEuYiooMS1yLmEpK3IuYipyLmF9O3JldHVybiBuKG8pLnRvUmdiU3RyaW5nKCl9LGEuY29udHJhc3Q9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPW4odCk7cmV0dXJuIDEhPT1pLmdldEFscGhhKCkmJihpPW4oYS5jb21iaW5lKHQsbCkpKSwoaS5pc0RhcmsoKT9lP2kubGlnaHRlbihlKTpsOnI/aS5kYXJrZW4ocik6cykudG9TdHJpbmcoKX0sYS5zdHJva2U9ZnVuY3Rpb24odCxlKXt2YXIgcj1uKGUpO3Quc3R5bGUoe3N0cm9rZTphLnRpbnlSR0IociksInN0cm9rZS1vcGFjaXR5IjpyLmdldEFscGhhKCl9KX0sYS5maWxsPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bihlKTt0LnN0eWxlKHtmaWxsOmEudGlueVJHQihyKSwiZmlsbC1vcGFjaXR5IjpyLmdldEFscGhhKCl9KX0sYS5jbGVhbj1mdW5jdGlvbih0KXtpZih0JiYib2JqZWN0Ij09dHlwZW9mIHQpe3ZhciBlLHIsbixpLG89T2JqZWN0LmtleXModCk7Zm9yKGU9MDtlPG8ubGVuZ3RoO2UrKylpZihpPXRbbj1vW2VdXSwiY29sb3IiPT09bi5zdWJzdHIobi5sZW5ndGgtNSkpaWYoQXJyYXkuaXNBcnJheShpKSlmb3Iocj0wO3I8aS5sZW5ndGg7cisrKWlbcl09YyhpW3JdKTtlbHNlIHRbbl09YyhpKTtlbHNlIGlmKCJjb2xvcnNjYWxlIj09PW4uc3Vic3RyKG4ubGVuZ3RoLTEwKSYmQXJyYXkuaXNBcnJheShpKSlmb3Iocj0wO3I8aS5sZW5ndGg7cisrKUFycmF5LmlzQXJyYXkoaVtyXSkmJihpW3JdWzFdPWMoaVtyXVsxXSkpO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShpKSl7dmFyIHM9aVswXTtpZighQXJyYXkuaXNBcnJheShzKSYmcyYmIm9iamVjdCI9PXR5cGVvZiBzKWZvcihyPTA7cjxpLmxlbmd0aDtyKyspYS5jbGVhbihpW3JdKX1lbHNlIGkmJiJvYmplY3QiPT10eXBlb2YgaSYmYS5jbGVhbihpKX19fSx7Ii4vYXR0cmlidXRlcyI6NTU3LCJmYXN0LWlzbnVtZXJpYyI6MjE0LHRpbnljb2xvcjI6NDk5fV0sNTU5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxvPXQoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbDtlLmV4cG9ydHM9byh7dGhpY2tuZXNzbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZnJhY3Rpb24iLCJwaXhlbHMiXSxkZmx0OiJwaXhlbHMifSx0aGlja25lc3M6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDozMH0sbGVubW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZnJhY3Rpb24iLCJwaXhlbHMiXSxkZmx0OiJmcmFjdGlvbiJ9LGxlbjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjF9LHg6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxLjAyLG1pbjotMixtYXg6M30seGFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibGVmdCIsImNlbnRlciIsInJpZ2h0Il0sZGZsdDoibGVmdCJ9LHhwYWQ6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxMH0seTp7dmFsVHlwZToibnVtYmVyIixkZmx0Oi41LG1pbjotMixtYXg6M30seWFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidG9wIiwibWlkZGxlIiwiYm90dG9tIl0sZGZsdDoibWlkZGxlIn0seXBhZDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEwfSxvdXRsaW5lY29sb3I6bi5saW5lY29sb3Isb3V0bGluZXdpZHRoOm4ubGluZXdpZHRoLGJvcmRlcmNvbG9yOm4ubGluZWNvbG9yLGJvcmRlcndpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MH0sYmdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6InJnYmEoMCwwLDAsMCkifSx0aWNrbW9kZTpuLnRpY2ttb2RlLG50aWNrczpuLm50aWNrcyx0aWNrMDpuLnRpY2swLGR0aWNrOm4uZHRpY2ssdGlja3ZhbHM6bi50aWNrdmFscyx0aWNrdGV4dDpuLnRpY2t0ZXh0LHRpY2tzOmEoe30sbi50aWNrcyx7ZGZsdDoiIn0pLHRpY2tsZW46bi50aWNrbGVuLHRpY2t3aWR0aDpuLnRpY2t3aWR0aCx0aWNrY29sb3I6bi50aWNrY29sb3Isc2hvd3RpY2tsYWJlbHM6bi5zaG93dGlja2xhYmVscyx0aWNrZm9udDppKHt9KSx0aWNrYW5nbGU6bi50aWNrYW5nbGUsdGlja2Zvcm1hdDpuLnRpY2tmb3JtYXQsdGlja2Zvcm1hdHN0b3BzOm4udGlja2Zvcm1hdHN0b3BzLHRpY2twcmVmaXg6bi50aWNrcHJlZml4LHNob3d0aWNrcHJlZml4Om4uc2hvd3RpY2twcmVmaXgsdGlja3N1ZmZpeDpuLnRpY2tzdWZmaXgsc2hvd3RpY2tzdWZmaXg6bi5zaG93dGlja3N1ZmZpeCxzZXBhcmF0ZXRob3VzYW5kczpuLnNlcGFyYXRldGhvdXNhbmRzLGV4cG9uZW50Zm9ybWF0Om4uZXhwb25lbnRmb3JtYXQsc2hvd2V4cG9uZW50Om4uc2hvd2V4cG9uZW50LHRpdGxlOnt2YWxUeXBlOiJzdHJpbmcifSx0aXRsZWZvbnQ6aSh7fSksdGl0bGVzaWRlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJyaWdodCIsInRvcCIsImJvdHRvbSJdLGRmbHQ6InRvcCJ9fSwiY29sb3JiYXJzIiwiZnJvbS1yb290Iil9LHsiLi4vLi4vbGliL2V4dGVuZCI6NjczLCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo3MTUsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyI6NzQ0LCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjc1OH1dLDU2MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9jb2xvcnNjYWxlIiksaT10KCIuL2RyYXciKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiByKXJldHVybiByKHQsZSk7dmFyIGE9ZVswXS50cmFjZSxvPSJjYiIrYS51aWQscz1yLmNvbnRhaW5lcixsPXM/YVtzXTphO2lmKHQuX2Z1bGxMYXlvdXQuX2luZm9sYXllci5zZWxlY3RBbGwoIi4iK28pLnJlbW92ZSgpLGwmJmwuc2hvd3NjYWxlKXt2YXIgYz1sW3IubWluXSx1PWxbci5tYXhdLGg9ZVswXS50LmNiPWkodCxvKSxmPW4ubWFrZUNvbG9yU2NhbGVGdW5jKG4uZXh0cmFjdFNjYWxlKGwuY29sb3JzY2FsZSxjLHUpLHtub051bWVyaWNDaGVjazohMH0pO2guZmlsbGNvbG9yKGYpLmZpbGxsZXZlbHMoe3N0YXJ0OmMsZW5kOnUsc2l6ZToodS1jKS8yNTR9KS5vcHRpb25zKGwuY29sb3JiYXIpKCl9fX0seyIuLi9jb2xvcnNjYWxlIjo1NzMsIi4vZHJhdyI6NTYzfV0sNTYxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17Y246e2NvbG9yYmFyOiJjb2xvcmJhciIsY2JiZzoiY2JiZyIsY2JmaWxsOiJjYmZpbGwiLGNiZmlsbHM6ImNiZmlsbHMiLGNibGluZToiY2JsaW5lIixjYmxpbmVzOiJjYmxpbmVzIixjYmF4aXM6ImNiYXhpcyIsY2J0aXRsZXVuc2hpZnQ6ImNidGl0bGV1bnNoaWZ0IixjYnRpdGxlOiJjYnRpdGxlIixjYm91dGxpbmU6ImNib3V0bGluZSIsY3Jpc3A6ImNyaXNwIixqc1BsYWNlaG9sZGVyOiJqcy1wbGFjZWhvbGRlciJ9fX0se31dLDU2MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKSxhPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi90aWNrX3ZhbHVlX2RlZmF1bHRzIiksbz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vdGlja19tYXJrX2RlZmF1bHRzIikscz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vdGlja19sYWJlbF9kZWZhdWx0cyIpLGw9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgYz1pLm5ld0NvbnRhaW5lcihlLCJjb2xvcmJhciIpLHU9dC5jb2xvcmJhcnx8e307ZnVuY3Rpb24gaCh0LGUpe3JldHVybiBuLmNvZXJjZSh1LGMsbCx0LGUpfXZhciBmPWgoInRoaWNrbmVzc21vZGUiKTtoKCJ0aGlja25lc3MiLCJmcmFjdGlvbiI9PT1mPzMwLyhyLndpZHRoLXIubWFyZ2luLmwtci5tYXJnaW4ucik6MzApO3ZhciBwPWgoImxlbm1vZGUiKTtoKCJsZW4iLCJmcmFjdGlvbiI9PT1wPzE6ci5oZWlnaHQtci5tYXJnaW4udC1yLm1hcmdpbi5iKSxoKCJ4IiksaCgieGFuY2hvciIpLGgoInhwYWQiKSxoKCJ5IiksaCgieWFuY2hvciIpLGgoInlwYWQiKSxuLm5vbmVPckFsbCh1LGMsWyJ4IiwieSJdKSxoKCJvdXRsaW5lY29sb3IiKSxoKCJvdXRsaW5ld2lkdGgiKSxoKCJib3JkZXJjb2xvciIpLGgoImJvcmRlcndpZHRoIiksaCgiYmdjb2xvciIpLGEodSxjLGgsImxpbmVhciIpO3ZhciBkPXtvdXRlclRpY2tzOiExLGZvbnQ6ci5mb250fTtzKHUsYyxoLCJsaW5lYXIiLGQpLG8odSxjLGgsImxpbmVhciIsZCksaCgidGl0bGUiLHIuX2RmbHRUaXRsZS5jb2xvcmJhciksbi5jb2VyY2VGb250KGgsInRpdGxlZm9udCIsci5mb250KSxoKCJ0aXRsZXNpZGUiKX19LHsiLi4vLi4vbGliIjo2ODQsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjcyMiwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3RpY2tfbGFiZWxfZGVmYXVsdHMiOjc1MSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3RpY2tfbWFya19kZWZhdWx0cyI6NzUyLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vdGlja192YWx1ZV9kZWZhdWx0cyI6NzUzLCIuL2F0dHJpYnV0ZXMiOjU1OX1dLDU2MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgidGlueWNvbG9yMiIpLGE9dCgiLi4vLi4vcGxvdHMvcGxvdHMiKSxvPXQoIi4uLy4uL3JlZ2lzdHJ5Iikscz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGw9dCgiLi4vZHJhZ2VsZW1lbnQiKSxjPXQoIi4uLy4uL2xpYiIpLHU9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsaD10KCIuLi8uLi9saWIvc2V0Y3Vyc29yIiksZj10KCIuLi9kcmF3aW5nIikscD10KCIuLi9jb2xvciIpLGQ9dCgiLi4vdGl0bGVzIiksZz10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSxtPXQoIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiKSx2PW0uTElORV9TUEFDSU5HLHk9bS5GUk9NX1RMLHg9bS5GUk9NX0JSLGI9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZGVmYXVsdHMiKSxfPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9wb3NpdGlvbl9kZWZhdWx0cyIpLHc9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzIiksaz10KCIuL2F0dHJpYnV0ZXMiKSxNPXQoIi4vY29uc3RhbnRzIikuY247ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9e307ZnVuY3Rpb24gbSgpe3ZhciBrPXQuX2Z1bGxMYXlvdXQsVD1rLl9zaXplO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiByLmZpbGxjb2xvcnx8ImZ1bmN0aW9uIj09dHlwZW9mIHIubGluZS5jb2xvcil7dmFyIFMsRSxDPW4uZXh0ZW50KCgiZnVuY3Rpb24iPT10eXBlb2Ygci5maWxsY29sb3I/ci5maWxsY29sb3I6ci5saW5lLmNvbG9yKS5kb21haW4oKSksTD1bXSx6PVtdLFA9ImZ1bmN0aW9uIj09dHlwZW9mIHIubGluZS5jb2xvcj9yLmxpbmUuY29sb3I6ZnVuY3Rpb24oKXtyZXR1cm4gci5saW5lLmNvbG9yfSxJPSJmdW5jdGlvbiI9PXR5cGVvZiByLmZpbGxjb2xvcj9yLmZpbGxjb2xvcjpmdW5jdGlvbigpe3JldHVybiByLmZpbGxjb2xvcn0sTz1yLmxldmVscy5lbmQrci5sZXZlbHMuc2l6ZS8xMDAsRD1yLmxldmVscy5zaXplLFI9MS4wMDEqQ1swXS0uMDAxKkNbMV0sQj0xLjAwMSpDWzFdLS4wMDEqQ1swXTtmb3IoRT0wO0U8MWU1JiYoUz1yLmxldmVscy5zdGFydCtFKkQsIShEPjA/Uz49TzpTPD1PKSk7RSsrKVM+UiYmUzxCJiZMLnB1c2goUyk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHIuZmlsbGNvbG9yKWlmKHIuZmlsbGxldmVscylmb3IoTz1yLmZpbGxsZXZlbHMuZW5kK3IuZmlsbGxldmVscy5zaXplLzEwMCxEPXIuZmlsbGxldmVscy5zaXplLEU9MDtFPDFlNSYmKFM9ci5maWxsbGV2ZWxzLnN0YXJ0K0UqRCwhKEQ+MD9TPj1POlM8PU8pKTtFKyspUz5DWzBdJiZTPENbMV0mJnoucHVzaChTKTtlbHNlKHo9TC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQtci5sZXZlbHMuc2l6ZS8yfSkpLnB1c2goelt6Lmxlbmd0aC0xXStyLmxldmVscy5zaXplKTtlbHNlIHIuZmlsbGNvbG9yJiYic3RyaW5nIj09dHlwZW9mIHIuZmlsbGNvbG9yJiYoej1bMF0pO3IubGV2ZWxzLnNpemU8MCYmKEwucmV2ZXJzZSgpLHoucmV2ZXJzZSgpKTt2YXIgRixOPVQuaCxqPVQudyxWPU1hdGgucm91bmQoci50aGlja25lc3MqKCJmcmFjdGlvbiI9PT1yLnRoaWNrbmVzc21vZGU/ajoxKSksVT1WL1QudyxxPU1hdGgucm91bmQoci5sZW4qKCJmcmFjdGlvbiI9PT1yLmxlbm1vZGU/TjoxKSksSD1xL1QuaCxHPXIueHBhZC9ULncsVz0oci5ib3JkZXJ3aWR0aCtyLm91dGxpbmV3aWR0aCkvMixZPXIueXBhZC9ULmgsWD1NYXRoLnJvdW5kKHIueCpULncrci54cGFkKSxaPXIueC1VKih7bWlkZGxlOi41LHJpZ2h0OjF9W3IueGFuY2hvcl18fDApLCQ9ci55K0gqKCh7dG9wOi0uNSxib3R0b206LjV9W3IueWFuY2hvcl18fDApLS41KSxKPU1hdGgucm91bmQoVC5oKigxLSQpKSxLPUotcSxRPXt0eXBlOiJsaW5lYXIiLHJhbmdlOkMsdGlja21vZGU6ci50aWNrbW9kZSxudGlja3M6ci5udGlja3MsdGljazA6ci50aWNrMCxkdGljazpyLmR0aWNrLHRpY2t2YWxzOnIudGlja3ZhbHMsdGlja3RleHQ6ci50aWNrdGV4dCx0aWNrczpyLnRpY2tzLHRpY2tsZW46ci50aWNrbGVuLHRpY2t3aWR0aDpyLnRpY2t3aWR0aCx0aWNrY29sb3I6ci50aWNrY29sb3Isc2hvd3RpY2tsYWJlbHM6ci5zaG93dGlja2xhYmVscyx0aWNrZm9udDpyLnRpY2tmb250LHRpY2thbmdsZTpyLnRpY2thbmdsZSx0aWNrZm9ybWF0OnIudGlja2Zvcm1hdCxleHBvbmVudGZvcm1hdDpyLmV4cG9uZW50Zm9ybWF0LHNlcGFyYXRldGhvdXNhbmRzOnIuc2VwYXJhdGV0aG91c2FuZHMsc2hvd2V4cG9uZW50OnIuc2hvd2V4cG9uZW50LHNob3d0aWNrcHJlZml4OnIuc2hvd3RpY2twcmVmaXgsdGlja3ByZWZpeDpyLnRpY2twcmVmaXgsc2hvd3RpY2tzdWZmaXg6ci5zaG93dGlja3N1ZmZpeCx0aWNrc3VmZml4OnIudGlja3N1ZmZpeCx0aXRsZTpyLnRpdGxlLHRpdGxlZm9udDpyLnRpdGxlZm9udCxzaG93bGluZTohMCxhbmNob3I6ImZyZWUiLHBvc2l0aW9uOjF9LHR0PXt0eXBlOiJsaW5lYXIiLF9pZDoieSIrZX0sZXQ9e2xldHRlcjoieSIsZm9udDprLmZvbnQsbm9Ib3ZlcjohMCxjYWxlbmRhcjprLmNhbGVuZGFyfTtpZihiKFEsdHQsbXQsZXQsayksXyhRLHR0LG10LGV0KSx0dC5wb3NpdGlvbj1yLngrRytVLG0uYXhpcz10dCwtMSE9PVsidG9wIiwiYm90dG9tIl0uaW5kZXhPZihyLnRpdGxlc2lkZSkmJih0dC50aXRsZXNpZGU9ci50aXRsZXNpZGUsdHQudGl0bGV4PXIueCtHLHR0LnRpdGxleT0kKygidG9wIj09PXIudGl0bGVzaWRlP0gtWTpZKSksci5saW5lLmNvbG9yJiYiYXV0byI9PT1yLnRpY2ttb2RlKXt0dC50aWNrbW9kZT0ibGluZWFyIix0dC50aWNrMD1yLmxldmVscy5zdGFydDt2YXIgcnQ9ci5sZXZlbHMuc2l6ZSxudD1jLmNvbnN0cmFpbigoSi1LKS81MCw0LDE1KSsxLGl0PShDWzFdLUNbMF0pLygoci5udGlja3N8fG50KSpydCk7aWYoaXQ+MSl7dmFyIGF0PU1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2coaXQpL01hdGguTE4xMCkpO3J0Kj1hdCpjLnJvdW5kVXAoaXQvYXQsWzIsNSwxMF0pLChNYXRoLmFicyhyLmxldmVscy5zdGFydCkvci5sZXZlbHMuc2l6ZSsxZS02KSUxPDJlLTYmJih0dC50aWNrMD0wKX10dC5kdGljaz1ydH10dC5kb21haW49WyQrWSwkK0gtWV0sdHQuc2V0U2NhbGUoKTt2YXIgb3Q9Yy5lbnN1cmVTaW5nbGUoay5faW5mb2xheWVyLCJnIixlLGZ1bmN0aW9uKHQpe3QuY2xhc3NlZChNLmNvbG9yYmFyLCEwKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9bi5zZWxlY3QodGhpcyk7dC5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKE0uY2JiZywhMCksdC5hcHBlbmQoImciKS5jbGFzc2VkKE0uY2JmaWxscywhMCksdC5hcHBlbmQoImciKS5jbGFzc2VkKE0uY2JsaW5lcywhMCksdC5hcHBlbmQoImciKS5jbGFzc2VkKE0uY2JheGlzLCEwKS5jbGFzc2VkKE0uY3Jpc3AsITApLHQuYXBwZW5kKCJnIikuY2xhc3NlZChNLmNidGl0bGV1bnNoaWZ0LCEwKS5hcHBlbmQoImciKS5jbGFzc2VkKE0uY2J0aXRsZSwhMCksdC5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKE0uY2JvdXRsaW5lLCEwKSx0LnNlbGVjdCgiLmNidGl0bGUiKS5kYXR1bSgwKX0pfSk7b3QuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrTWF0aC5yb3VuZChULmwpKyIsIitNYXRoLnJvdW5kKFQudCkrIikiKTt2YXIgc3Q9b3Quc2VsZWN0KCIuY2J0aXRsZXVuc2hpZnQiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoLSIrTWF0aC5yb3VuZChULmwpKyIsLSIrTWF0aC5yb3VuZChULnQpKyIpIik7dHQuX2F4aXNsYXllcj1vdC5zZWxlY3QoIi5jYmF4aXMiKTt2YXIgbHQ9MDtpZigtMSE9PVsidG9wIiwiYm90dG9tIl0uaW5kZXhPZihyLnRpdGxlc2lkZSkpe3ZhciBjdCx1dD1ULmwrKHIueCtHKSpULncsaHQ9dHQudGl0bGVmb250LnNpemU7Y3Q9InRvcCI9PT1yLnRpdGxlc2lkZT8oMS0oJCtILVkpKSpULmgrVC50KzMrLjc1Kmh0OigxLSgkK1kpKSpULmgrVC50LTMtLjI1Kmh0LHZ0KHR0Ll9pZCsidGl0bGUiLHthdHRyaWJ1dGVzOnt4OnV0LHk6Y3QsInRleHQtYW5jaG9yIjoic3RhcnQifX0pfXZhciBmdCxwdCxkdCxndD1jLnN5bmNPckFzeW5jKFthLnByZXZpb3VzUHJvbWlzZXMsZnVuY3Rpb24oKXtpZigtMSE9PVsidG9wIiwiYm90dG9tIl0uaW5kZXhPZihyLnRpdGxlc2lkZSkpe3ZhciBlPW90LnNlbGVjdCgiLmNidGl0bGUiKSxhPWUuc2VsZWN0KCJ0ZXh0Iiksbz1bLXIub3V0bGluZXdpZHRoLzIsci5vdXRsaW5ld2lkdGgvMl0sbD1lLnNlbGVjdCgiLmgiK3R0Ll9pZCsidGl0bGUtbWF0aC1ncm91cCIpLm5vZGUoKSx1PTE1LjY7aWYoYS5ub2RlKCkmJih1PXBhcnNlSW50KGEubm9kZSgpLnN0eWxlLmZvbnRTaXplLDEwKSp2KSxsPyhsdD1mLmJCb3gobCkuaGVpZ2h0KT51JiYob1sxXS09KGx0LXUpLzIpOmEubm9kZSgpJiYhYS5jbGFzc2VkKE0uanNQbGFjZWhvbGRlcikmJihsdD1mLmJCb3goYS5ub2RlKCkpLmhlaWdodCksbHQpe2lmKGx0Kz01LCJ0b3AiPT09ci50aXRsZXNpZGUpdHQuZG9tYWluWzFdLT1sdC9ULmgsb1sxXSo9LTE7ZWxzZXt0dC5kb21haW5bMF0rPWx0L1QuaDt2YXIgaD1nLmxpbmVDb3VudChhKTtvWzFdKz0oMS1oKSp1fWUuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrbysiKSIpLHR0LnNldFNjYWxlKCl9fW90LnNlbGVjdEFsbCgiLmNiZmlsbHMsLmNibGluZXMiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwiK01hdGgucm91bmQoVC5oKigxLXR0LmRvbWFpblsxXSkpKyIpIiksdHQuX2F4aXNsYXllci5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwiK01hdGgucm91bmQoLVQudCkrIikiKTt2YXIgcD1vdC5zZWxlY3QoIi5jYmZpbGxzIikuc2VsZWN0QWxsKCJyZWN0LmNiZmlsbCIpLmRhdGEoeik7cC5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoTS5jYmZpbGwsITApLnN0eWxlKCJzdHJva2UiLCJub25lIikscC5leGl0KCkucmVtb3ZlKCkscC5lYWNoKGZ1bmN0aW9uKHQsZSl7dmFyIHI9WzA9PT1lP0NbMF06KHpbZV0reltlLTFdKS8yLGU9PT16Lmxlbmd0aC0xP0NbMV06KHpbZV0reltlKzFdKS8yXS5tYXAodHQuYzJwKS5tYXAoTWF0aC5yb3VuZCk7ZSE9PXoubGVuZ3RoLTEmJihyWzFdKz1yWzFdPnJbMF0/MTotMSk7dmFyIGE9SSh0KS5yZXBsYWNlKCJlLSIsIiIpLG89aShhKS50b0hleFN0cmluZygpO24uc2VsZWN0KHRoaXMpLmF0dHIoe3g6WCx3aWR0aDpNYXRoLm1heChWLDIpLHk6bi5taW4ociksaGVpZ2h0Ok1hdGgubWF4KG4ubWF4KHIpLW4ubWluKHIpLDIpLGZpbGw6b30pfSk7dmFyIGQ9b3Quc2VsZWN0KCIuY2JsaW5lcyIpLnNlbGVjdEFsbCgicGF0aC5jYmxpbmUiKS5kYXRhKHIubGluZS5jb2xvciYmci5saW5lLndpZHRoP0w6W10pO3JldHVybiBkLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZChNLmNibGluZSwhMCksZC5leGl0KCkucmVtb3ZlKCksZC5lYWNoKGZ1bmN0aW9uKHQpe24uc2VsZWN0KHRoaXMpLmF0dHIoImQiLCJNIitYKyIsIisoTWF0aC5yb3VuZCh0dC5jMnAodCkpK3IubGluZS53aWR0aC8yJTEpKyJoIitWKS5jYWxsKGYubGluZUdyb3VwU3R5bGUsci5saW5lLndpZHRoLFAodCksci5saW5lLmRhc2gpfSksdHQuX2F4aXNsYXllci5zZWxlY3RBbGwoImcuIit0dC5faWQrInRpY2sscGF0aCIpLnJlbW92ZSgpLHR0Ll9wb3M9WCtWKyhyLm91dGxpbmV3aWR0aHx8MCkvMi0oIm91dHNpZGUiPT09ci50aWNrcz8xOjApLHR0LnNpZGU9InJpZ2h0IixjLnN5bmNPckFzeW5jKFtmdW5jdGlvbigpe3JldHVybiBzLmRvVGlja3NTaW5nbGUodCx0dCwhMCl9LGZ1bmN0aW9uKCl7aWYoLTE9PT1bInRvcCIsImJvdHRvbSJdLmluZGV4T2Yoci50aXRsZXNpZGUpKXt2YXIgZT10dC50aXRsZWZvbnQuc2l6ZSxpPXR0Ll9vZmZzZXQrdHQuX2xlbmd0aC8yLGE9VC5sKyh0dC5wb3NpdGlvbnx8MCkqVC53KygicmlnaHQiPT09dHQuc2lkZT8xMCtlKih0dC5zaG93dGlja2xhYmVscz8xOi41KTotMTAtZSoodHQuc2hvd3RpY2tsYWJlbHM/LjU6MCkpO3Z0KCJoIit0dC5faWQrInRpdGxlIix7YXZvaWQ6e3NlbGVjdGlvbjpuLnNlbGVjdCh0KS5zZWxlY3RBbGwoImcuIit0dC5faWQrInRpY2siKSxzaWRlOnIudGl0bGVzaWRlLG9mZnNldExlZnQ6VC5sLG9mZnNldFRvcDowLG1heFNoaWZ0Omsud2lkdGh9LGF0dHJpYnV0ZXM6e3g6YSx5OmksInRleHQtYW5jaG9yIjoibWlkZGxlIn0sdHJhbnNmb3JtOntyb3RhdGU6Ii05MCIsb2Zmc2V0OjB9fSl9fV0pfSxhLnByZXZpb3VzUHJvbWlzZXMsZnVuY3Rpb24oKXt2YXIgbj1WK3Iub3V0bGluZXdpZHRoLzIrZi5iQm94KHR0Ll9heGlzbGF5ZXIubm9kZSgpKS53aWR0aDtpZigoRj1zdC5zZWxlY3QoInRleHQiKSkubm9kZSgpJiYhRi5jbGFzc2VkKE0uanNQbGFjZWhvbGRlcikpe3ZhciBpLG89c3Quc2VsZWN0KCIuaCIrdHQuX2lkKyJ0aXRsZS1tYXRoLWdyb3VwIikubm9kZSgpO2k9byYmLTEhPT1bInRvcCIsImJvdHRvbSJdLmluZGV4T2Yoci50aXRsZXNpZGUpP2YuYkJveChvKS53aWR0aDpmLmJCb3goc3Qubm9kZSgpKS5yaWdodC1YLVQubCxuPU1hdGgubWF4KG4saSl9dmFyIHM9MipyLnhwYWQrbityLmJvcmRlcndpZHRoK3Iub3V0bGluZXdpZHRoLzIsbD1KLUs7b3Quc2VsZWN0KCIuY2JiZyIpLmF0dHIoe3g6WC1yLnhwYWQtKHIuYm9yZGVyd2lkdGgrci5vdXRsaW5ld2lkdGgpLzIseTpLLVcsd2lkdGg6TWF0aC5tYXgocywyKSxoZWlnaHQ6TWF0aC5tYXgobCsyKlcsMil9KS5jYWxsKHAuZmlsbCxyLmJnY29sb3IpLmNhbGwocC5zdHJva2Usci5ib3JkZXJjb2xvcikuc3R5bGUoeyJzdHJva2Utd2lkdGgiOnIuYm9yZGVyd2lkdGh9KSxvdC5zZWxlY3RBbGwoIi5jYm91dGxpbmUiKS5hdHRyKHt4OlgseTpLK3IueXBhZCsoInRvcCI9PT1yLnRpdGxlc2lkZT9sdDowKSx3aWR0aDpNYXRoLm1heChWLDIpLGhlaWdodDpNYXRoLm1heChsLTIqci55cGFkLWx0LDIpfSkuY2FsbChwLnN0cm9rZSxyLm91dGxpbmVjb2xvcikuc3R5bGUoe2ZpbGw6Ik5vbmUiLCJzdHJva2Utd2lkdGgiOnIub3V0bGluZXdpZHRofSk7dmFyIGM9KHtjZW50ZXI6LjUscmlnaHQ6MX1bci54YW5jaG9yXXx8MCkqcztvdC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoVC5sLWMpKyIsIitULnQrIikiKTt2YXIgdT17fSxoPXlbci55YW5jaG9yXSxkPXhbci55YW5jaG9yXTsicGl4ZWxzIj09PXIubGVubW9kZT8odS55PXIueSx1LnQ9bCpoLHUuYj1sKmQpOih1LnQ9dS5iPTAsdS55dD1yLnkrci5sZW4qaCx1LnliPXIueS1yLmxlbipkKTt2YXIgZz15W3IueGFuY2hvcl0sbT14W3IueGFuY2hvcl07aWYoInBpeGVscyI9PT1yLnRoaWNrbmVzc21vZGUpdS54PXIueCx1Lmw9cypnLHUucj1zKm07ZWxzZXt2YXIgdj1zLVY7dS5sPXYqZyx1LnI9diptLHUueGw9ci54LXIudGhpY2tuZXNzKmcsdS54cj1yLngrci50aGlja25lc3MqbX1hLmF1dG9NYXJnaW4odCxlLHUpfV0sdCk7aWYoZ3QmJmd0LnRoZW4mJih0Ll9wcm9taXNlc3x8W10pLnB1c2goZ3QpLHQuX2NvbnRleHQuZWRpdHMuY29sb3JiYXJQb3NpdGlvbilsLmluaXQoe2VsZW1lbnQ6b3Qubm9kZSgpLGdkOnQscHJlcEZuOmZ1bmN0aW9uKCl7ZnQ9b3QuYXR0cigidHJhbnNmb3JtIiksaChvdCl9LG1vdmVGbjpmdW5jdGlvbih0LGUpe290LmF0dHIoInRyYW5zZm9ybSIsZnQrIiB0cmFuc2xhdGUoIit0KyIsIitlKyIpIikscHQ9bC5hbGlnbihaK3QvVC53LFUsMCwxLHIueGFuY2hvciksZHQ9bC5hbGlnbigkLWUvVC5oLEgsMCwxLHIueWFuY2hvcik7dmFyIG49bC5nZXRDdXJzb3IocHQsZHQsci54YW5jaG9yLHIueWFuY2hvcik7aChvdCxuKX0sZG9uZUZuOmZ1bmN0aW9uKCl7aChvdCksdm9pZCAwIT09cHQmJnZvaWQgMCE9PWR0JiZvLmNhbGwoInJlc3R5bGUiLHQseyJjb2xvcmJhci54IjpwdCwiY29sb3JiYXIueSI6ZHR9LEEoKS5pbmRleCl9fSk7cmV0dXJuIGd0fWZ1bmN0aW9uIG10KHQsZSl7cmV0dXJuIGMuY29lcmNlKFEsdHQsdyx0LGUpfWZ1bmN0aW9uIHZ0KGUscil7dmFyIG49QSgpLGk9ImNvbG9yYmFyLnRpdGxlIixhPW4uX21vZHVsZS5jb2xvcmJhci5jb250YWluZXI7YSYmKGk9YSsiLiIraSk7dmFyIG89e3Byb3BDb250YWluZXI6dHQscHJvcE5hbWU6aSx0cmFjZUluZGV4Om4uaW5kZXgscGxhY2Vob2xkZXI6ay5fZGZsdFRpdGxlLmNvbG9yYmFyLGNvbnRhaW5lckdyb3VwOm90LnNlbGVjdCgiLmNidGl0bGUiKX0scz0iaCI9PT1lLmNoYXJBdCgwKT9lLnN1YnN0cigxKToiaCIrZTtvdC5zZWxlY3RBbGwoIi4iK3MrIiwuIitzKyItbWF0aC1ncm91cCIpLnJlbW92ZSgpLGQuZHJhdyh0LGUsdShvLHJ8fHt9KSl9ay5faW5mb2xheWVyLnNlbGVjdEFsbCgiZy4iK2UpLnJlbW92ZSgpfWZ1bmN0aW9uIEEoKXt2YXIgcixuLGk9ZS5zdWJzdHIoMik7Zm9yKHI9MDtyPHQuX2Z1bGxEYXRhLmxlbmd0aDtyKyspaWYoKG49dC5fZnVsbERhdGFbcl0pLnVpZD09PWkpcmV0dXJuIG59cmV0dXJuIE9iamVjdC5rZXlzKGspLmZvckVhY2goZnVuY3Rpb24odCl7clt0XT1udWxsfSksci5maWxsY29sb3I9bnVsbCxyLmxpbmU9e2NvbG9yOm51bGwsd2lkdGg6bnVsbCxkYXNoOm51bGx9LHIubGV2ZWxzPXtzdGFydDpudWxsLGVuZDpudWxsLHNpemU6bnVsbH0sci5maWxsbGV2ZWxzPW51bGwsT2JqZWN0LmtleXMocikuZm9yRWFjaChmdW5jdGlvbih0KXttW3RdPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyW3RdPWMuaXNQbGFpbk9iamVjdChyW3RdKT9jLmV4dGVuZEZsYXQoclt0XSxlKTplLG0pOnJbdF19fSksbS5vcHRpb25zPWZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKGUpeyJmdW5jdGlvbiI9PXR5cGVvZiBtW2VdJiZtW2VdKHRbZV0pfSksbX0sbS5fb3B0cz1yLG19fSx7Ii4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiOjY1NiwiLi4vLi4vbGliIjo2ODQsIi4uLy4uL2xpYi9leHRlbmQiOjY3MywiLi4vLi4vbGliL3NldGN1cnNvciI6NzA0LCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjcwOCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjczMiwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZGVmYXVsdHMiOjczNCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzIjo3NDQsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9wb3NpdGlvbl9kZWZhdWx0cyI6NzQ3LCIuLi8uLi9wbG90cy9wbG90cyI6Nzk1LCIuLi8uLi9yZWdpc3RyeSI6ODE3LCIuLi9jb2xvciI6NTU4LCIuLi9kcmFnZWxlbWVudCI6NTgwLCIuLi9kcmF3aW5nIjo1ODMsIi4uL3RpdGxlcyI6NjQ5LCIuL2F0dHJpYnV0ZXMiOjU1OSwiLi9jb25zdGFudHMiOjU2MSxkMzoxNDcsdGlueWNvbG9yMjo0OTl9XSw1NjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuLmlzUGxhaW5PYmplY3QodC5jb2xvcmJhcil9fSx7Ii4uLy4uL2xpYiI6Njg0fV0sNTY1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vc2NhbGVzLmpzIik7T2JqZWN0LmtleXMobik7ZnVuY3Rpb24gaSh0KXtyZXR1cm4iYCIrdCsiYCJ9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dD10fHwiIjt2YXIgcixhPShlPWV8fHt9KS5jTGV0dGVyfHwiYyIsbz0oIm9ubHlJZk51bWVyaWNhbCJpbiBlP2Uub25seUlmTnVtZXJpY2FsOkJvb2xlYW4odCksIm5vU2NhbGUiaW4gZT9lLm5vU2NhbGU6Im1hcmtlci5saW5lIj09PXQpLHM9InNob3dTY2FsZURmbHQiaW4gZT9lLnNob3dTY2FsZURmbHQ6InoiPT09YSxsPSJzdHJpbmciPT10eXBlb2YgZS5jb2xvcnNjYWxlRGZsdD9uW2UuY29sb3JzY2FsZURmbHRdOm51bGwsYz1lLmVkaXRUeXBlT3ZlcnJpZGV8fCIiLHU9dD90KyIuIjoiIjsiY29sb3JBdHRyImluIGU/KHI9ZS5jb2xvckF0dHIsZS5jb2xvckF0dHIpOmkodSsocj17ejoieiIsYzoiY29sb3IifVthXSkpO3ZhciBoPWErImF1dG8iLGY9YSsibWluIixwPWErIm1heCIsZD0oaSh1K2YpLGkodStwKSx7fSk7ZFtmXT1kW3BdPXZvaWQgMDt2YXIgZz17fTtnW2hdPSExO3ZhciBtPXt9O3JldHVybiJjb2xvciI9PT1yJiYobS5jb2xvcj17dmFsVHlwZToiY29sb3IiLGFycmF5T2s6ITAsZWRpdFR5cGU6Y3x8InN0eWxlIn0pLG1baF09e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMiLGltcGxpZWRFZGl0czpkfSxtW2ZdPXt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6bnVsbCxlZGl0VHlwZTpjfHwicGxvdCIsaW1wbGllZEVkaXRzOmd9LG1bcF09e3ZhbFR5cGU6Im51bWJlciIsZGZsdDpudWxsLGVkaXRUeXBlOmN8fCJwbG90IixpbXBsaWVkRWRpdHM6Z30sbS5jb2xvcnNjYWxlPXt2YWxUeXBlOiJjb2xvcnNjYWxlIixlZGl0VHlwZToiY2FsYyIsZGZsdDpsLGltcGxpZWRFZGl0czp7YXV0b2NvbG9yc2NhbGU6ITF9fSxtLmF1dG9jb2xvcnNjYWxlPXt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExIT09ZS5hdXRvQ29sb3JEZmx0LGVkaXRUeXBlOiJjYWxjIixpbXBsaWVkRWRpdHM6e2NvbG9yc2NhbGU6dm9pZCAwfX0sbS5yZXZlcnNlc2NhbGU9e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6ImNhbGMifSxvfHwobS5zaG93c2NhbGU9e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6cyxlZGl0VHlwZToiY2FsYyJ9KSxtfX0seyIuL3NjYWxlcy5qcyI6NTc3fV0sNTY2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9zY2FsZXMiKSxhPXQoIi4vZmxpcF9zY2FsZSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvKXt2YXIgcz10LGw9dC5faW5wdXQsYz10Ll9mdWxsSW5wdXQsdT10LnVwZGF0ZVN0eWxlO2Z1bmN0aW9uIGgoZSxuLGkpe3ZvaWQgMD09PWkmJihpPW4pLHU/dSh0Ll9pbnB1dCxyP3IrIi4iK2U6ZSxuKTpsW2VdPW4sc1tlXT1pLGMmJnQhPT10Ll9mdWxsSW5wdXQmJih1P3UodC5fZnVsbElucHV0LHI/cisiLiIrZTplLGkpOmNbZV09aSl9ciYmKHM9bi5uZXN0ZWRQcm9wZXJ0eShzLHIpLmdldCgpLGw9bi5uZXN0ZWRQcm9wZXJ0eShsLHIpLmdldCgpLGM9bi5uZXN0ZWRQcm9wZXJ0eShjLHIpLmdldCgpfHx7fSk7dmFyIGY9bysiYXV0byIscD1vKyJtaW4iLGQ9bysibWF4IixnPXNbZl0sbT1zW3BdLHY9c1tkXSx5PXMuY29sb3JzY2FsZTshMT09PWcmJnZvaWQgMCE9PW18fChtPW4uYWdnTnVtcyhNYXRoLm1pbixudWxsLGUpKSwhMT09PWcmJnZvaWQgMCE9PXZ8fCh2PW4uYWdnTnVtcyhNYXRoLm1heCxudWxsLGUpKSxtPT09diYmKG0tPS41LHYrPS41KSxoKHAsbSksaChkLHYpLGgoZiwhMSE9PWd8fHZvaWQgMD09PW0mJnZvaWQgMD09PXYpLHMuYXV0b2NvbG9yc2NhbGUmJihoKCJjb2xvcnNjYWxlIix5PW0qdjwwP2kuUmRCdTptPj0wP2kuUmVkczppLkJsdWVzLHMucmV2ZXJzZXNjYWxlP2EoeSk6eSksbC5hdXRvY29sb3JzY2FsZXx8aCgiYXV0b2NvbG9yc2NhbGUiLCExKSl9fSx7Ii4uLy4uL2xpYiI6Njg0LCIuL2ZsaXBfc2NhbGUiOjU3MCwiLi9zY2FsZXMiOjU3N31dLDU2NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL3NjYWxlcyIpO2UuZXhwb3J0cz1uLlJkQnV9LHsiLi9zY2FsZXMiOjU3N31dLDU2ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi9jb2xvcmJhci9oYXNfY29sb3JiYXIiKSxvPXQoIi4uL2NvbG9yYmFyL2RlZmF1bHRzIikscz10KCIuL2lzX3ZhbGlkX3NjYWxlIiksbD10KCIuL2ZsaXBfc2NhbGUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYyx1KXt2YXIgaCxmPXUucHJlZml4LHA9dS5jTGV0dGVyLGQ9Zi5zbGljZSgwLGYubGVuZ3RoLTEpLGc9Zj9pLm5lc3RlZFByb3BlcnR5KHQsZCkuZ2V0KCl8fHt9OnQsbT1mP2kubmVzdGVkUHJvcGVydHkoZSxkKS5nZXQoKXx8e306ZSx2PWdbcCsibWluIl0seT1nW3ArIm1heCJdLHg9Zy5jb2xvcnNjYWxlO2MoZitwKyJhdXRvIiwhKG4odikmJm4oeSkmJnY8eSkpLGMoZitwKyJtaW4iKSxjKGYrcCsibWF4Iiksdm9pZCAwIT09eCYmKGg9IXMoeCkpLGMoZisiYXV0b2NvbG9yc2NhbGUiLGgpO3ZhciBiLF89YyhmKyJjb2xvcnNjYWxlIik7KGMoZisicmV2ZXJzZXNjYWxlIikmJihtLmNvbG9yc2NhbGU9bChfKSksIm1hcmtlci5saW5lLiIhPT1mKSYmKGYmJihiPWEoZykpLGMoZisic2hvd3NjYWxlIixiKSYmbyhnLG0scikpfX0seyIuLi8uLi9saWIiOjY4NCwiLi4vY29sb3JiYXIvZGVmYXVsdHMiOjU2MiwiLi4vY29sb3JiYXIvaGFzX2NvbG9yYmFyIjo1NjQsIi4vZmxpcF9zY2FsZSI6NTcwLCIuL2lzX3ZhbGlkX3NjYWxlIjo1NzQsImZhc3QtaXNudW1lcmljIjoyMTR9XSw1Njk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49dC5sZW5ndGgsaT1uZXcgQXJyYXkobiksYT1uZXcgQXJyYXkobiksbz0wO288bjtvKyspe3ZhciBzPXRbb107aVtvXT1lK3NbMF0qKHItZSksYVtvXT1zWzFdfXJldHVybntkb21haW46aSxyYW5nZTphfX19LHt9XSw1NzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyPXQubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9ci0xLGE9MDtpPj0wO2ktLSxhKyspZT10W2ldLG5bYV09WzEtZVswXSxlWzFdXTtyZXR1cm4gbn19LHt9XSw1NzE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9zY2FsZXMiKSxpPXQoIi4vZGVmYXVsdF9zY2FsZSIpLGE9dCgiLi9pc192YWxpZF9zY2FsZV9hcnJheSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKGV8fChlPWkpLCF0KXJldHVybiBlO2Z1bmN0aW9uIHIoKXt0cnl7dD1uW3RdfHxKU09OLnBhcnNlKHQpfWNhdGNoKHIpe3Q9ZX19cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0JiYocigpLCJzdHJpbmciPT10eXBlb2YgdCYmcigpKSxhKHQpP3Q6ZX19LHsiLi9kZWZhdWx0X3NjYWxlIjo1NjcsIi4vaXNfdmFsaWRfc2NhbGVfYXJyYXkiOjU3NSwiLi9zY2FsZXMiOjU3N31dLDU3MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuL2lzX3ZhbGlkX3NjYWxlIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZT9pLm5lc3RlZFByb3BlcnR5KHQsZSkuZ2V0KCl8fHt9OnQsbz1yLmNvbG9yLHM9ITE7aWYoaS5pc0FycmF5T3JUeXBlZEFycmF5KG8pKWZvcih2YXIgbD0wO2w8by5sZW5ndGg7bCsrKWlmKG4ob1tsXSkpe3M9ITA7YnJlYWt9cmV0dXJuIGkuaXNQbGFpbk9iamVjdChyKSYmKHN8fCEwPT09ci5zaG93c2NhbGV8fG4oci5jbWluKSYmbihyLmNtYXgpfHxhKHIuY29sb3JzY2FsZSl8fGkuaXNQbGFpbk9iamVjdChyLmNvbG9yYmFyKSl9fSx7Ii4uLy4uL2xpYiI6Njg0LCIuL2lzX3ZhbGlkX3NjYWxlIjo1NzQsImZhc3QtaXNudW1lcmljIjoyMTR9XSw1NzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ci5zY2FsZXM9dCgiLi9zY2FsZXMiKSxyLmRlZmF1bHRTY2FsZT10KCIuL2RlZmF1bHRfc2NhbGUiKSxyLmF0dHJpYnV0ZXM9dCgiLi9hdHRyaWJ1dGVzIiksci5oYW5kbGVEZWZhdWx0cz10KCIuL2RlZmF1bHRzIiksci5jYWxjPXQoIi4vY2FsYyIpLHIuaGFzQ29sb3JzY2FsZT10KCIuL2hhc19jb2xvcnNjYWxlIiksci5pc1ZhbGlkU2NhbGU9dCgiLi9pc192YWxpZF9zY2FsZSIpLHIuZ2V0U2NhbGU9dCgiLi9nZXRfc2NhbGUiKSxyLmZsaXBTY2FsZT10KCIuL2ZsaXBfc2NhbGUiKSxyLmV4dHJhY3RTY2FsZT10KCIuL2V4dHJhY3Rfc2NhbGUiKSxyLm1ha2VDb2xvclNjYWxlRnVuYz10KCIuL21ha2VfY29sb3Jfc2NhbGVfZnVuYyIpfSx7Ii4vYXR0cmlidXRlcyI6NTY1LCIuL2NhbGMiOjU2NiwiLi9kZWZhdWx0X3NjYWxlIjo1NjcsIi4vZGVmYXVsdHMiOjU2OCwiLi9leHRyYWN0X3NjYWxlIjo1NjksIi4vZmxpcF9zY2FsZSI6NTcwLCIuL2dldF9zY2FsZSI6NTcxLCIuL2hhc19jb2xvcnNjYWxlIjo1NzIsIi4vaXNfdmFsaWRfc2NhbGUiOjU3NCwiLi9tYWtlX2NvbG9yX3NjYWxlX2Z1bmMiOjU3NiwiLi9zY2FsZXMiOjU3N31dLDU3NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL3NjYWxlcyIpLGk9dCgiLi9pc192YWxpZF9zY2FsZV9hcnJheSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwIT09blt0XXx8aSh0KX19LHsiLi9pc192YWxpZF9zY2FsZV9hcnJheSI6NTc1LCIuL3NjYWxlcyI6NTc3fV0sNTc1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInRpbnljb2xvcjIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9MDtpZighQXJyYXkuaXNBcnJheSh0KXx8dC5sZW5ndGg8MilyZXR1cm4hMTtpZighdFswXXx8IXRbdC5sZW5ndGgtMV0pcmV0dXJuITE7aWYoMCE9K3RbMF1bMF18fDEhPSt0W3QubGVuZ3RoLTFdWzBdKXJldHVybiExO2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgaT10W3JdO2lmKDIhPT1pLmxlbmd0aHx8K2lbMF08ZXx8IW4oaVsxXSkuaXNWYWxpZCgpKXJldHVybiExO2U9K2lbMF19cmV0dXJuITB9fSx7dGlueWNvbG9yMjo0OTl9XSw1NzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoInRpbnljb2xvcjIiKSxhPXQoImZhc3QtaXNudW1lcmljIiksbz10KCIuLi9jb2xvciIpO2Z1bmN0aW9uIHModCl7dmFyIGU9e3I6dFswXSxnOnRbMV0sYjp0WzJdLGE6dFszXX07cmV0dXJuIGkoZSkudG9SZ2JTdHJpbmcoKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtlPWV8fHt9O2Zvcih2YXIgcj10LmRvbWFpbixsPXQucmFuZ2UsYz1sLmxlbmd0aCx1PW5ldyBBcnJheShjKSxoPTA7aDxjO2grKyl7dmFyIGY9aShsW2hdKS50b1JnYigpO3VbaF09W2YucixmLmcsZi5iLGYuYV19dmFyIHAsZD1uLnNjYWxlLmxpbmVhcigpLmRvbWFpbihyKS5yYW5nZSh1KS5jbGFtcCghMCksZz1lLm5vTnVtZXJpY0NoZWNrLG09ZS5yZXR1cm5BcnJheTtyZXR1cm4ocD1nJiZtP2Q6Zz9mdW5jdGlvbih0KXtyZXR1cm4gcyhkKHQpKX06bT9mdW5jdGlvbih0KXtyZXR1cm4gYSh0KT9kKHQpOmkodCkuaXNWYWxpZCgpP3Q6by5kZWZhdWx0TGluZX06ZnVuY3Rpb24odCl7cmV0dXJuIGEodCk/cyhkKHQpKTppKHQpLmlzVmFsaWQoKT90Om8uZGVmYXVsdExpbmV9KS5kb21haW49ZC5kb21haW4scC5yYW5nZT1mdW5jdGlvbigpe3JldHVybiBsfSxwfX0seyIuLi9jb2xvciI6NTU4LGQzOjE0NywiZmFzdC1pc251bWVyaWMiOjIxNCx0aW55Y29sb3IyOjQ5OX1dLDU3NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e0dyZXlzOltbMCwicmdiKDAsMCwwKSJdLFsxLCJyZ2IoMjU1LDI1NSwyNTUpIl1dLFlsR25CdTpbWzAsInJnYig4LDI5LDg4KSJdLFsuMTI1LCJyZ2IoMzcsNTIsMTQ4KSJdLFsuMjUsInJnYigzNCw5NCwxNjgpIl0sWy4zNzUsInJnYigyOSwxNDUsMTkyKSJdLFsuNSwicmdiKDY1LDE4MiwxOTYpIl0sWy42MjUsInJnYigxMjcsMjA1LDE4NykiXSxbLjc1LCJyZ2IoMTk5LDIzMywxODApIl0sWy44NzUsInJnYigyMzcsMjQ4LDIxNykiXSxbMSwicmdiKDI1NSwyNTUsMjE3KSJdXSxHcmVlbnM6W1swLCJyZ2IoMCw2OCwyNykiXSxbLjEyNSwicmdiKDAsMTA5LDQ0KSJdLFsuMjUsInJnYigzNSwxMzksNjkpIl0sWy4zNzUsInJnYig2NSwxNzEsOTMpIl0sWy41LCJyZ2IoMTE2LDE5NiwxMTgpIl0sWy42MjUsInJnYigxNjEsMjE3LDE1NSkiXSxbLjc1LCJyZ2IoMTk5LDIzMywxOTIpIl0sWy44NzUsInJnYigyMjksMjQ1LDIyNCkiXSxbMSwicmdiKDI0NywyNTIsMjQ1KSJdXSxZbE9yUmQ6W1swLCJyZ2IoMTI4LDAsMzgpIl0sWy4xMjUsInJnYigxODksMCwzOCkiXSxbLjI1LCJyZ2IoMjI3LDI2LDI4KSJdLFsuMzc1LCJyZ2IoMjUyLDc4LDQyKSJdLFsuNSwicmdiKDI1MywxNDEsNjApIl0sWy42MjUsInJnYigyNTQsMTc4LDc2KSJdLFsuNzUsInJnYigyNTQsMjE3LDExOCkiXSxbLjg3NSwicmdiKDI1NSwyMzcsMTYwKSJdLFsxLCJyZ2IoMjU1LDI1NSwyMDQpIl1dLEJsdWVyZWQ6W1swLCJyZ2IoMCwwLDI1NSkiXSxbMSwicmdiKDI1NSwwLDApIl1dLFJkQnU6W1swLCJyZ2IoNSwxMCwxNzIpIl0sWy4zNSwicmdiKDEwNiwxMzcsMjQ3KSJdLFsuNSwicmdiKDE5MCwxOTAsMTkwKSJdLFsuNiwicmdiKDIyMCwxNzAsMTMyKSJdLFsuNywicmdiKDIzMCwxNDUsOTApIl0sWzEsInJnYigxNzgsMTAsMjgpIl1dLFJlZHM6W1swLCJyZ2IoMjIwLDIyMCwyMjApIl0sWy4yLCJyZ2IoMjQ1LDE5NSwxNTcpIl0sWy40LCJyZ2IoMjQ1LDE2MCwxMDUpIl0sWzEsInJnYigxNzgsMTAsMjgpIl1dLEJsdWVzOltbMCwicmdiKDUsMTAsMTcyKSJdLFsuMzUsInJnYig0MCw2MCwxOTApIl0sWy41LCJyZ2IoNzAsMTAwLDI0NSkiXSxbLjYsInJnYig5MCwxMjAsMjQ1KSJdLFsuNywicmdiKDEwNiwxMzcsMjQ3KSJdLFsxLCJyZ2IoMjIwLDIyMCwyMjApIl1dLFBpY25pYzpbWzAsInJnYigwLDAsMjU1KSJdLFsuMSwicmdiKDUxLDE1MywyNTUpIl0sWy4yLCJyZ2IoMTAyLDIwNCwyNTUpIl0sWy4zLCJyZ2IoMTUzLDIwNCwyNTUpIl0sWy40LCJyZ2IoMjA0LDIwNCwyNTUpIl0sWy41LCJyZ2IoMjU1LDI1NSwyNTUpIl0sWy42LCJyZ2IoMjU1LDIwNCwyNTUpIl0sWy43LCJyZ2IoMjU1LDE1MywyNTUpIl0sWy44LCJyZ2IoMjU1LDEwMiwyMDQpIl0sWy45LCJyZ2IoMjU1LDEwMiwxMDIpIl0sWzEsInJnYigyNTUsMCwwKSJdXSxSYWluYm93OltbMCwicmdiKDE1MCwwLDkwKSJdLFsuMTI1LCJyZ2IoMCwwLDIwMCkiXSxbLjI1LCJyZ2IoMCwyNSwyNTUpIl0sWy4zNzUsInJnYigwLDE1MiwyNTUpIl0sWy41LCJyZ2IoNDQsMjU1LDE1MCkiXSxbLjYyNSwicmdiKDE1MSwyNTUsMCkiXSxbLjc1LCJyZ2IoMjU1LDIzNCwwKSJdLFsuODc1LCJyZ2IoMjU1LDExMSwwKSJdLFsxLCJyZ2IoMjU1LDAsMCkiXV0sUG9ydGxhbmQ6W1swLCJyZ2IoMTIsNTEsMTMxKSJdLFsuMjUsInJnYigxMCwxMzYsMTg2KSJdLFsuNSwicmdiKDI0MiwyMTEsNTYpIl0sWy43NSwicmdiKDI0MiwxNDMsNTYpIl0sWzEsInJnYigyMTcsMzAsMzApIl1dLEpldDpbWzAsInJnYigwLDAsMTMxKSJdLFsuMTI1LCJyZ2IoMCw2MCwxNzApIl0sWy4zNzUsInJnYig1LDI1NSwyNTUpIl0sWy42MjUsInJnYigyNTUsMjU1LDApIl0sWy44NzUsInJnYigyNTAsMCwwKSJdLFsxLCJyZ2IoMTI4LDAsMCkiXV0sSG90OltbMCwicmdiKDAsMCwwKSJdLFsuMywicmdiKDIzMCwwLDApIl0sWy42LCJyZ2IoMjU1LDIxMCwwKSJdLFsxLCJyZ2IoMjU1LDI1NSwyNTUpIl1dLEJsYWNrYm9keTpbWzAsInJnYigwLDAsMCkiXSxbLjIsInJnYigyMzAsMCwwKSJdLFsuNCwicmdiKDIzMCwyMTAsMCkiXSxbLjcsInJnYigyNTUsMjU1LDI1NSkiXSxbMSwicmdiKDE2MCwyMDAsMjU1KSJdXSxFYXJ0aDpbWzAsInJnYigwLDAsMTMwKSJdLFsuMSwicmdiKDAsMTgwLDE4MCkiXSxbLjIsInJnYig0MCwyMTAsNDApIl0sWy40LCJyZ2IoMjMwLDIzMCw1MCkiXSxbLjYsInJnYigxMjAsNzAsMjApIl0sWzEsInJnYigyNTUsMjU1LDI1NSkiXV0sRWxlY3RyaWM6W1swLCJyZ2IoMCwwLDApIl0sWy4xNSwicmdiKDMwLDAsMTAwKSJdLFsuNCwicmdiKDEyMCwwLDEwMCkiXSxbLjYsInJnYigxNjAsOTAsMCkiXSxbLjgsInJnYigyMzAsMjAwLDApIl0sWzEsInJnYigyNTUsMjUwLDIyMCkiXV0sVmlyaWRpczpbWzAsIiM0NDAxNTQiXSxbLjA2Mjc0NTA5ODAzOTIxNTY5LCIjNDgxODZhIl0sWy4xMjU0OTAxOTYwNzg0MzEzNywiIzQ3MmQ3YiJdLFsuMTg4MjM1Mjk0MTE3NjQ3MDYsIiM0MjQwODYiXSxbLjI1MDk4MDM5MjE1Njg2Mjc0LCIjM2I1MjhiIl0sWy4zMTM3MjU0OTAxOTYwNzg0LCIjMzM2MzhkIl0sWy4zNzY0NzA1ODgyMzUyOTQxLCIjMmM3MjhlIl0sWy40MzkyMTU2ODYyNzQ1MDk4LCIjMjY4MjhlIl0sWy41MDE5NjA3ODQzMTM3MjU1LCIjMjE5MThjIl0sWy41NjQ3MDU4ODIzNTI5NDEyLCIjMWZhMDg4Il0sWy42Mjc0NTA5ODAzOTIxNTY5LCIjMjhhZTgwIl0sWy42OTAxOTYwNzg0MzEzNzI1LCIjM2ZiYzczIl0sWy43NTI5NDExNzY0NzA1ODgyLCIjNWVjOTYyIl0sWy44MTU2ODYyNzQ1MDk4MDM5LCIjODRkNDRiIl0sWy44Nzg0MzEzNzI1NDkwMTk2LCIjYWRkYzMwIl0sWy45NDExNzY0NzA1ODgyMzUzLCIjZDhlMjE5Il0sWzEsIiNmZGU3MjUiXV0sQ2l2aWRpczpbWzAsInJnYigwLDMyLDc2KSJdLFsuMDU4ODI0LCJyZ2IoMCw0MiwxMDIpIl0sWy4xMTc2NDcsInJnYigwLDUyLDExMCkiXSxbLjE3NjQ3MSwicmdiKDM5LDYzLDEwOCkiXSxbLjIzNTI5NCwicmdiKDYwLDc0LDEwNykiXSxbLjI5NDExOCwicmdiKDc2LDg1LDEwNykiXSxbLjM1Mjk0MSwicmdiKDkxLDk1LDEwOSkiXSxbLjQxMTc2NSwicmdiKDEwNCwxMDYsMTEyKSJdLFsuNDcwNTg4LCJyZ2IoMTE3LDExNywxMTcpIl0sWy41Mjk0MTIsInJnYigxMzEsMTI5LDEyMCkiXSxbLjU4ODIzNSwicmdiKDE0NiwxNDAsMTIwKSJdLFsuNjQ3MDU5LCJyZ2IoMTYxLDE1MiwxMTgpIl0sWy43MDU4ODIsInJnYigxNzYsMTY1LDExNCkiXSxbLjc2NDcwNiwicmdiKDE5MiwxNzcsMTA5KSJdLFsuODIzNTI5LCJyZ2IoMjA5LDE5MSwxMDIpIl0sWy44ODIzNTMsInJnYigyMjUsMjA0LDkyKSJdLFsuOTQxMTc2LCJyZ2IoMjQzLDIxOSw3OSkiXSxbMSwicmdiKDI1NSwyMzMsNjkpIl1dfX0se31dLDU3ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT0odC1yKS8obi1yKSxvPWErZS8obi1yKSxzPShhK28pLzI7cmV0dXJuImxlZnQiPT09aXx8ImJvdHRvbSI9PT1pP2E6ImNlbnRlciI9PT1pfHwibWlkZGxlIj09PWk/czoicmlnaHQiPT09aXx8InRvcCI9PT1pP286YTwyLzMtcz9hOm8+NC8zLXM/bzpzfX0se31dLDU3OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPVtbInN3LXJlc2l6ZSIsInMtcmVzaXplIiwic2UtcmVzaXplIl0sWyJ3LXJlc2l6ZSIsIm1vdmUiLCJlLXJlc2l6ZSJdLFsibnctcmVzaXplIiwibi1yZXNpemUiLCJuZS1yZXNpemUiXV07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe3JldHVybiB0PSJsZWZ0Ij09PXI/MDoiY2VudGVyIj09PXI/MToicmlnaHQiPT09cj8yOm4uY29uc3RyYWluKE1hdGguZmxvb3IoMyp0KSwwLDIpLGU9ImJvdHRvbSI9PT1hPzA6Im1pZGRsZSI9PT1hPzE6InRvcCI9PT1hPzI6bi5jb25zdHJhaW4oTWF0aC5mbG9vcigzKmUpLDAsMiksaVtlXVt0XX19LHsiLi4vLi4vbGliIjo2ODR9XSw1ODA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgibW91c2UtZXZlbnQtb2Zmc2V0IiksaT10KCJoYXMtaG92ZXIiKSxhPXQoImhhcy1wYXNzaXZlLWV2ZW50cyIpLG89dCgiLi4vLi4vcmVnaXN0cnkiKSxzPXQoIi4uLy4uL2xpYiIpLGw9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0YW50cyIpLGM9dCgiLi4vLi4vY29uc3RhbnRzL2ludGVyYWN0aW9ucyIpLHU9ZS5leHBvcnRzPXt9O3UuYWxpZ249dCgiLi9hbGlnbiIpLHUuZ2V0Q3Vyc29yPXQoIi4vY3Vyc29yIik7dmFyIGg9dCgiLi91bmhvdmVyIik7ZnVuY3Rpb24gZigpe3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3QuY2xhc3NOYW1lPSJkcmFnY292ZXIiO3ZhciBlPXQuc3R5bGU7cmV0dXJuIGUucG9zaXRpb249ImZpeGVkIixlLmxlZnQ9MCxlLnJpZ2h0PTAsZS50b3A9MCxlLmJvdHRvbT0wLGUuekluZGV4PTk5OTk5OTk5OSxlLmJhY2tncm91bmQ9Im5vbmUiLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodCksdH1mdW5jdGlvbiBwKHQpe3JldHVybiBuKHQuY2hhbmdlZFRvdWNoZXM/dC5jaGFuZ2VkVG91Y2hlc1swXTp0LGRvY3VtZW50LmJvZHkpfXUudW5ob3Zlcj1oLndyYXBwZWQsdS51bmhvdmVyUmF3PWgucmF3LHUuaW5pdD1mdW5jdGlvbih0KXt2YXIgZSxyLG4saCxkLGcsbSx2LHk9dC5nZCx4PTEsYj1jLkRCTENMSUNLREVMQVksXz10LmVsZW1lbnQ7eS5fbW91c2VEb3duVGltZXx8KHkuX21vdXNlRG93blRpbWU9MCksXy5zdHlsZS5wb2ludGVyRXZlbnRzPSJhbGwiLF8ub25tb3VzZWRvd249ayxhPyhfLl9vbnRvdWNoc3RhcnQmJl8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsXy5fb250b3VjaHN0YXJ0KSxfLl9vbnRvdWNoc3RhcnQ9ayxfLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLGsse3Bhc3NpdmU6ITF9KSk6Xy5vbnRvdWNoc3RhcnQ9azt2YXIgdz10LmNsYW1wRm58fGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gTWF0aC5hYnModCk8ciYmKHQ9MCksTWF0aC5hYnMoZSk8ciYmKGU9MCksW3QsZV19O2Z1bmN0aW9uIGsoYSl7YS5wcmV2ZW50RGVmYXVsdCgpLHkuX2RyYWdnZWQ9ITEseS5fZHJhZ2dpbmc9ITA7dmFyIG89cChhKTtlPW9bMF0scj1vWzFdLG09YS50YXJnZXQsZz1hLHY9Mj09PWEuYnV0dG9uc3x8YS5jdHJsS2V5LChuPShuZXcgRGF0ZSkuZ2V0VGltZSgpKS15Ll9tb3VzZURvd25UaW1lPGI/eCs9MTooeD0xLHkuX21vdXNlRG93blRpbWU9biksdC5wcmVwRm4mJnQucHJlcEZuKGEsZSxyKSxpJiYhdj8oZD1mKCkpLnN0eWxlLmN1cnNvcj13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShfKS5jdXJzb3I6aXx8KGQ9ZG9jdW1lbnQsaD13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpLmN1cnNvcixkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuY3Vyc29yPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKF8pLmN1cnNvciksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIixNKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIixBKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLE0pLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoZW5kIixBKX1mdW5jdGlvbiBNKG4pe24ucHJldmVudERlZmF1bHQoKTt2YXIgaT1wKG4pLGE9dC5taW5EcmFnfHxsLk1JTkRSQUcsbz13KGlbMF0tZSxpWzFdLXIsYSkscz1vWzBdLGM9b1sxXTsoc3x8YykmJih5Ll9kcmFnZ2VkPSEwLHUudW5ob3Zlcih5KSkseS5fZHJhZ2dlZCYmdC5tb3ZlRm4mJiF2JiZ0Lm1vdmVGbihzLGMpfWZ1bmN0aW9uIEEoZSl7aWYoZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIixNKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZXVwIixBKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLE0pLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNoZW5kIixBKSxlLnByZXZlbnREZWZhdWx0KCksaT9zLnJlbW92ZUVsZW1lbnQoZCk6aCYmKGQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLmN1cnNvcj1oLGg9bnVsbCkseS5fZHJhZ2dpbmcpe2lmKHkuX2RyYWdnaW5nPSExLChuZXcgRGF0ZSkuZ2V0VGltZSgpLXkuX21vdXNlRG93blRpbWU+YiYmKHg9TWF0aC5tYXgoeC0xLDEpKSx5Ll9kcmFnZ2VkKXQuZG9uZUZuJiZ0LmRvbmVGbigpO2Vsc2UgaWYodC5jbGlja0ZuJiZ0LmNsaWNrRm4oeCxnKSwhdil7dmFyIHI7dHJ5e3I9bmV3IE1vdXNlRXZlbnQoImNsaWNrIixlKX1jYXRjaCh0KXt2YXIgbj1wKGUpOyhyPWRvY3VtZW50LmNyZWF0ZUV2ZW50KCJNb3VzZUV2ZW50cyIpKS5pbml0TW91c2VFdmVudCgiY2xpY2siLGUuYnViYmxlcyxlLmNhbmNlbGFibGUsZS52aWV3LGUuZGV0YWlsLGUuc2NyZWVuWCxlLnNjcmVlblksblswXSxuWzFdLGUuY3RybEtleSxlLmFsdEtleSxlLnNoaWZ0S2V5LGUubWV0YUtleSxlLmJ1dHRvbixlLnJlbGF0ZWRUYXJnZXQpfW0uZGlzcGF0Y2hFdmVudChyKX0hZnVuY3Rpb24odCl7dC5fZHJhZ2dpbmc9ITEsdC5fcmVwbG90UGVuZGluZyYmby5jYWxsKCJwbG90Iix0KX0oeSkseS5fZHJhZ2dlZD0hMX1lbHNlIHkuX2RyYWdnZWQ9ITF9fSx1LmNvdmVyU2xpcD1mfSx7Ii4uLy4uL2NvbnN0YW50cy9pbnRlcmFjdGlvbnMiOjY2MCwiLi4vLi4vbGliIjo2ODQsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdGFudHMiOjczNywiLi4vLi4vcmVnaXN0cnkiOjgxNywiLi9hbGlnbiI6NTc4LCIuL2N1cnNvciI6NTc5LCIuL3VuaG92ZXIiOjU4MSwiaGFzLWhvdmVyIjozNzgsImhhcy1wYXNzaXZlLWV2ZW50cyI6Mzc5LCJtb3VzZS1ldmVudC1vZmZzZXQiOjQwM31dLDU4MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIvZXZlbnRzIiksaT10KCIuLi8uLi9saWIvdGhyb3R0bGUiKSxhPXQoIi4uLy4uL2xpYi9nZXRfZ3JhcGhfZGl2Iiksbz10KCIuLi9meC9jb25zdGFudHMiKSxzPWUuZXhwb3J0cz17fTtzLndyYXBwZWQ9ZnVuY3Rpb24odCxlLHIpeyh0PWEodCkpLl9mdWxsTGF5b3V0JiZpLmNsZWFyKHQuX2Z1bGxMYXlvdXQuX3VpZCtvLkhPVkVSSUQpLHMucmF3KHQsZSxyKX0scy5yYXc9ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9mdWxsTGF5b3V0LGk9dC5faG92ZXJkYXRhO2V8fChlPXt9KSxlLnRhcmdldCYmITE9PT1uLnRyaWdnZXJIYW5kbGVyKHQsInBsb3RseV9iZWZvcmVob3ZlciIsZSl8fChyLl9ob3ZlcmxheWVyLnNlbGVjdEFsbCgiZyIpLnJlbW92ZSgpLHIuX2hvdmVybGF5ZXIuc2VsZWN0QWxsKCJsaW5lIikucmVtb3ZlKCksci5faG92ZXJsYXllci5zZWxlY3RBbGwoImNpcmNsZSIpLnJlbW92ZSgpLHQuX2hvdmVyZGF0YT12b2lkIDAsZS50YXJnZXQmJmkmJnQuZW1pdCgicGxvdGx5X3VuaG92ZXIiLHtldmVudDplLHBvaW50czppfSkpfX0seyIuLi8uLi9saWIvZXZlbnRzIjo2NzIsIi4uLy4uL2xpYi9nZXRfZ3JhcGhfZGl2Ijo2NzksIi4uLy4uL2xpYi90aHJvdHRsZSI6NzA5LCIuLi9meC9jb25zdGFudHMiOjU5NX1dLDU4MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLmRhc2g9e3ZhbFR5cGU6InN0cmluZyIsdmFsdWVzOlsic29saWQiLCJkb3QiLCJkYXNoIiwibG9uZ2Rhc2giLCJkYXNoZG90IiwibG9uZ2Rhc2hkb3QiXSxkZmx0OiJzb2xpZCIsZWRpdFR5cGU6InN0eWxlIn19LHt9XSw1ODM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoImZhc3QtaXNudW1lcmljIiksYT10KCJ0aW55Y29sb3IyIiksbz10KCIuLi8uLi9yZWdpc3RyeSIpLHM9dCgiLi4vY29sb3IiKSxsPXQoIi4uL2NvbG9yc2NhbGUiKSxjPXQoIi4uLy4uL2xpYiIpLHU9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksaD10KCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyIpLGY9dCgiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCIpLkxJTkVfU1BBQ0lORyxwPXQoIi4uLy4uL2NvbnN0YW50cy9pbnRlcmFjdGlvbnMiKS5ERVNFTEVDVERJTSxkPXQoIi4uLy4uL3RyYWNlcy9zY2F0dGVyL3N1YnR5cGVzIiksZz10KCIuLi8uLi90cmFjZXMvc2NhdHRlci9tYWtlX2J1YmJsZV9zaXplX2Z1bmMiKSxtPWUuZXhwb3J0cz17fTttLmZvbnQ9ZnVuY3Rpb24odCxlLHIsbil7Yy5pc1BsYWluT2JqZWN0KGUpJiYobj1lLmNvbG9yLHI9ZS5zaXplLGU9ZS5mYW1pbHkpLGUmJnQuc3R5bGUoImZvbnQtZmFtaWx5IixlKSxyKzEmJnQuc3R5bGUoImZvbnQtc2l6ZSIscisicHgiKSxuJiZ0LmNhbGwocy5maWxsLG4pfSxtLnNldFBvc2l0aW9uPWZ1bmN0aW9uKHQsZSxyKXt0LmF0dHIoIngiLGUpLmF0dHIoInkiLHIpfSxtLnNldFNpemU9ZnVuY3Rpb24odCxlLHIpe3QuYXR0cigid2lkdGgiLGUpLmF0dHIoImhlaWdodCIscil9LG0uc2V0UmVjdD1mdW5jdGlvbih0LGUscixuLGkpe3QuY2FsbChtLnNldFBvc2l0aW9uLGUscikuY2FsbChtLnNldFNpemUsbixpKX0sbS50cmFuc2xhdGVQb2ludD1mdW5jdGlvbih0LGUscixuKXt2YXIgYT1yLmMycCh0LngpLG89bi5jMnAodC55KTtyZXR1cm4hIShpKGEpJiZpKG8pJiZlLm5vZGUoKSkmJigidGV4dCI9PT1lLm5vZGUoKS5ub2RlTmFtZT9lLmF0dHIoIngiLGEpLmF0dHIoInkiLG8pOmUuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrYSsiLCIrbysiKSIpLCEwKX0sbS50cmFuc2xhdGVQb2ludHM9ZnVuY3Rpb24odCxlLHIpe3QuZWFjaChmdW5jdGlvbih0KXt2YXIgaT1uLnNlbGVjdCh0aGlzKTttLnRyYW5zbGF0ZVBvaW50KHQsaSxlLHIpfSl9LG0uaGlkZU91dHNpZGVSYW5nZVBvaW50PWZ1bmN0aW9uKHQsZSxyLG4saSxhKXtlLmF0dHIoImRpc3BsYXkiLHIuaXNQdFdpdGhpblJhbmdlKHQsaSkmJm4uaXNQdFdpdGhpblJhbmdlKHQsYSk/bnVsbDoibm9uZSIpfSxtLmhpZGVPdXRzaWRlUmFuZ2VQb2ludHM9ZnVuY3Rpb24odCxlKXtpZihlLl9oYXNDbGlwT25BeGlzRmFsc2Upe3ZhciByPWUueGF4aXMsaT1lLnlheGlzO3QuZWFjaChmdW5jdGlvbihlKXt2YXIgYT1lWzBdLnRyYWNlLG89YS54Y2FsZW5kYXIscz1hLnljYWxlbmRhcixsPSJiYXIiPT09YS50eXBlPyIuYmFydGV4dCI6Ii5wb2ludCwudGV4dHBvaW50Ijt0LnNlbGVjdEFsbChsKS5lYWNoKGZ1bmN0aW9uKHQpe20uaGlkZU91dHNpZGVSYW5nZVBvaW50KHQsbi5zZWxlY3QodGhpcykscixpLG8scyl9KX0pfX0sbS5jcmlzcFJvdW5kPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZSYmaShlKT90Ll9jb250ZXh0LnN0YXRpY1Bsb3Q/ZTplPDE/MTpNYXRoLnJvdW5kKGUpOnJ8fDB9LG0uc2luZ2xlTGluZVN0eWxlPWZ1bmN0aW9uKHQsZSxyLG4saSl7ZS5zdHlsZSgiZmlsbCIsIm5vbmUiKTt2YXIgYT0oKCh0fHxbXSlbMF18fHt9KS50cmFjZXx8e30pLmxpbmV8fHt9LG89cnx8YS53aWR0aHx8MCxsPWl8fGEuZGFzaHx8IiI7cy5zdHJva2UoZSxufHxhLmNvbG9yKSxtLmRhc2hMaW5lKGUsbCxvKX0sbS5saW5lR3JvdXBTdHlsZT1mdW5jdGlvbih0LGUscixpKXt0LnN0eWxlKCJmaWxsIiwibm9uZSIpLmVhY2goZnVuY3Rpb24odCl7dmFyIGE9KCgodHx8W10pWzBdfHx7fSkudHJhY2V8fHt9KS5saW5lfHx7fSxvPWV8fGEud2lkdGh8fDAsbD1pfHxhLmRhc2h8fCIiO24uc2VsZWN0KHRoaXMpLmNhbGwocy5zdHJva2Uscnx8YS5jb2xvcikuY2FsbChtLmRhc2hMaW5lLGwsbyl9KX0sbS5kYXNoTGluZT1mdW5jdGlvbih0LGUscil7cj0rcnx8MCxlPW0uZGFzaFN0eWxlKGUsciksdC5zdHlsZSh7InN0cm9rZS1kYXNoYXJyYXkiOmUsInN0cm9rZS13aWR0aCI6cisicHgifSl9LG0uZGFzaFN0eWxlPWZ1bmN0aW9uKHQsZSl7ZT0rZXx8MTt2YXIgcj1NYXRoLm1heChlLDMpO3JldHVybiJzb2xpZCI9PT10P3Q9IiI6ImRvdCI9PT10P3Q9cisicHgsIityKyJweCI6ImRhc2giPT09dD90PTMqcisicHgsIiszKnIrInB4IjoibG9uZ2Rhc2giPT09dD90PTUqcisicHgsIis1KnIrInB4IjoiZGFzaGRvdCI9PT10P3Q9MypyKyJweCwiK3IrInB4LCIrcisicHgsIityKyJweCI6ImxvbmdkYXNoZG90Ij09PXQmJih0PTUqcisicHgsIisyKnIrInB4LCIrcisicHgsIisyKnIrInB4IiksdH0sbS5zaW5nbGVGaWxsU3R5bGU9ZnVuY3Rpb24odCl7dmFyIGU9KCgobi5zZWxlY3QodC5ub2RlKCkpLmRhdGEoKVswXXx8W10pWzBdfHx7fSkudHJhY2V8fHt9KS5maWxsY29sb3I7ZSYmdC5jYWxsKHMuZmlsbCxlKX0sbS5maWxsR3JvdXBTdHlsZT1mdW5jdGlvbih0KXt0LnN0eWxlKCJzdHJva2Utd2lkdGgiLDApLmVhY2goZnVuY3Rpb24oZSl7dmFyIHI9bi5zZWxlY3QodGhpcyk7dHJ5e3IuY2FsbChzLmZpbGwsZVswXS50cmFjZS5maWxsY29sb3IpfWNhdGNoKGUpe2MuZXJyb3IoZSx0KSxyLnJlbW92ZSgpfX0pfTt2YXIgdj10KCIuL3N5bWJvbF9kZWZzIik7bS5zeW1ib2xOYW1lcz1bXSxtLnN5bWJvbEZ1bmNzPVtdLG0uc3ltYm9sTmVlZExpbmVzPXt9LG0uc3ltYm9sTm9Eb3Q9e30sbS5zeW1ib2xOb0ZpbGw9e30sbS5zeW1ib2xMaXN0PVtdLE9iamVjdC5rZXlzKHYpLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9dlt0XTttLnN5bWJvbExpc3Q9bS5zeW1ib2xMaXN0LmNvbmNhdChbZS5uLHQsZS5uKzEwMCx0KyItb3BlbiJdKSxtLnN5bWJvbE5hbWVzW2Uubl09dCxtLnN5bWJvbEZ1bmNzW2Uubl09ZS5mLGUubmVlZExpbmUmJihtLnN5bWJvbE5lZWRMaW5lc1tlLm5dPSEwKSxlLm5vRG90P20uc3ltYm9sTm9Eb3RbZS5uXT0hMDptLnN5bWJvbExpc3Q9bS5zeW1ib2xMaXN0LmNvbmNhdChbZS5uKzIwMCx0KyItZG90IixlLm4rMzAwLHQrIi1vcGVuLWRvdCJdKSxlLm5vRmlsbCYmKG0uc3ltYm9sTm9GaWxsW2Uubl09ITApfSk7dmFyIHk9bS5zeW1ib2xOYW1lcy5sZW5ndGgseD0iTTAsMC41TDAuNSwwTDAsLTAuNUwtMC41LDBaIjtmdW5jdGlvbiBiKHQsZSl7dmFyIHI9dCUxMDA7cmV0dXJuIG0uc3ltYm9sRnVuY3Nbcl0oZSkrKHQ+PTIwMD94OiIiKX1tLnN5bWJvbE51bWJlcj1mdW5jdGlvbih0KXtpZigic3RyaW5nIj09dHlwZW9mIHQpe3ZhciBlPTA7dC5pbmRleE9mKCItb3BlbiIpPjAmJihlPTEwMCx0PXQucmVwbGFjZSgiLW9wZW4iLCIiKSksdC5pbmRleE9mKCItZG90Iik+MCYmKGUrPTIwMCx0PXQucmVwbGFjZSgiLWRvdCIsIiIpKSwodD1tLnN5bWJvbE5hbWVzLmluZGV4T2YodCkpPj0wJiYodCs9ZSl9cmV0dXJuIHQlMTAwPj15fHx0Pj00MDA/MDpNYXRoLmZsb29yKE1hdGgubWF4KHQsMCkpfTt2YXIgXz17eDE6MSx4MjowLHkxOjAseTI6MH0sdz17eDE6MCx4MjowLHkxOjEseTI6MH07bS5ncmFkaWVudD1mdW5jdGlvbih0LGUscixpLG8sbCl7dmFyIHU9ZS5fZnVsbExheW91dC5fZGVmcy5zZWxlY3QoIi5ncmFkaWVudHMiKS5zZWxlY3RBbGwoIiMiK3IpLmRhdGEoW2krbytsXSxjLmlkZW50aXR5KTt1LmV4aXQoKS5yZW1vdmUoKSx1LmVudGVyKCkuYXBwZW5kKCJyYWRpYWwiPT09aT8icmFkaWFsR3JhZGllbnQiOiJsaW5lYXJHcmFkaWVudCIpLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1uLnNlbGVjdCh0aGlzKTsiaG9yaXpvbnRhbCI9PT1pP3QuYXR0cihfKToidmVydGljYWwiPT09aSYmdC5hdHRyKHcpLHQuYXR0cigiaWQiLHIpO3ZhciBlPWEobyksYz1hKGwpO3QuYXBwZW5kKCJzdG9wIikuYXR0cih7b2Zmc2V0OiIwJSIsInN0b3AtY29sb3IiOnMudGlueVJHQihjKSwic3RvcC1vcGFjaXR5IjpjLmdldEFscGhhKCl9KSx0LmFwcGVuZCgic3RvcCIpLmF0dHIoe29mZnNldDoiMTAwJSIsInN0b3AtY29sb3IiOnMudGlueVJHQihlKSwic3RvcC1vcGFjaXR5IjplLmdldEFscGhhKCl9KX0pLHQuc3R5bGUoe2ZpbGw6InVybCgjIityKyIpIiwiZmlsbC1vcGFjaXR5IjpudWxsfSl9LG0uaW5pdEdyYWRpZW50cz1mdW5jdGlvbih0KXtjLmVuc3VyZVNpbmdsZSh0Ll9mdWxsTGF5b3V0Ll9kZWZzLCJnIiwiZ3JhZGllbnRzIikuc2VsZWN0QWxsKCJsaW5lYXJHcmFkaWVudCxyYWRpYWxHcmFkaWVudCIpLnJlbW92ZSgpfSxtLnBvaW50U3R5bGU9ZnVuY3Rpb24odCxlLHIpe2lmKHQuc2l6ZSgpKXt2YXIgaT1tLm1ha2VQb2ludFN0eWxlRm5zKGUpO3QuZWFjaChmdW5jdGlvbih0KXttLnNpbmdsZVBvaW50U3R5bGUodCxuLnNlbGVjdCh0aGlzKSxlLGkscil9KX19LG0uc2luZ2xlUG9pbnRTdHlsZT1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPXIubWFya2VyLG89YS5saW5lO2lmKGUuc3R5bGUoIm9wYWNpdHkiLG4uc2VsZWN0ZWRPcGFjaXR5Rm4/bi5zZWxlY3RlZE9wYWNpdHlGbih0KTp2b2lkIDA9PT10Lm1vP2Eub3BhY2l0eTp0Lm1vKSxuLm1zMm1yYyl7dmFyIGw7bD0idmFyaW91cyI9PT10Lm1zfHwidmFyaW91cyI9PT1hLnNpemU/MzpuLm1zMm1yYyh0Lm1zKSx0Lm1yYz1sLG4uc2VsZWN0ZWRTaXplRm4mJihsPXQubXJjPW4uc2VsZWN0ZWRTaXplRm4odCkpO3ZhciB1PW0uc3ltYm9sTnVtYmVyKHQubXh8fGEuc3ltYm9sKXx8MDt0Lm9tPXUlMjAwPj0xMDAsZS5hdHRyKCJkIixiKHUsbCkpfXZhciBoLGYscCxkPSExO2lmKHQuc28pcD1vLm91dGxpZXJ3aWR0aCxmPW8ub3V0bGllcmNvbG9yLGg9YS5vdXRsaWVyY29sb3I7ZWxzZXt2YXIgZz0ob3x8e30pLndpZHRoO3A9KHQubWx3KzF8fGcrMXx8KHQudHJhY2U/KHQudHJhY2UubWFya2VyLmxpbmV8fHt9KS53aWR0aDowKSsxKS0xfHwwLGY9Im1sYyJpbiB0P3QubWxjYz1uLmxpbmVTY2FsZSh0Lm1sYyk6Yy5pc0FycmF5T3JUeXBlZEFycmF5KG8uY29sb3IpP3MuZGVmYXVsdExpbmU6by5jb2xvcixjLmlzQXJyYXlPclR5cGVkQXJyYXkoYS5jb2xvcikmJihoPXMuZGVmYXVsdExpbmUsZD0hMCksaD0ibWMiaW4gdD90Lm1jYz1uLm1hcmtlclNjYWxlKHQubWMpOmEuY29sb3J8fCJyZ2JhKDAsMCwwLDApIixuLnNlbGVjdGVkQ29sb3JGbiYmKGg9bi5zZWxlY3RlZENvbG9yRm4odCkpfWlmKHQub20pZS5jYWxsKHMuc3Ryb2tlLGgpLnN0eWxlKHsic3Ryb2tlLXdpZHRoIjoocHx8MSkrInB4IixmaWxsOiJub25lIn0pO2Vsc2V7ZS5zdHlsZSgic3Ryb2tlLXdpZHRoIixwKyJweCIpO3ZhciB2PWEuZ3JhZGllbnQseT10Lm1ndDtpZih5P2Q9ITA6eT12JiZ2LnR5cGUseSYmIm5vbmUiIT09eSl7dmFyIHg9dC5tZ2M7eD9kPSEwOng9di5jb2xvcjt2YXIgXz0iZyIraS5fZnVsbExheW91dC5fdWlkKyItIityLnVpZDtkJiYoXys9Ii0iK3QuaSksZS5jYWxsKG0uZ3JhZGllbnQsaSxfLHksaCx4KX1lbHNlIGUuY2FsbChzLmZpbGwsaCk7cCYmZS5jYWxsKHMuc3Ryb2tlLGYpfX0sbS5tYWtlUG9pbnRTdHlsZUZucz1mdW5jdGlvbih0KXt2YXIgZT17fSxyPXQubWFya2VyO3JldHVybiBlLm1hcmtlclNjYWxlPW0udHJ5Q29sb3JzY2FsZShyLCIiKSxlLmxpbmVTY2FsZT1tLnRyeUNvbG9yc2NhbGUociwibGluZSIpLG8udHJhY2VJcyh0LCJzeW1ib2xzIikmJihlLm1zMm1yYz1kLmlzQnViYmxlKHQpP2codCk6ZnVuY3Rpb24oKXtyZXR1cm4oci5zaXplfHw2KS8yfSksdC5zZWxlY3RlZHBvaW50cyYmYy5leHRlbmRGbGF0KGUsbS5tYWtlU2VsZWN0ZWRQb2ludFN0eWxlRm5zKHQpKSxlfSxtLm1ha2VTZWxlY3RlZFBvaW50U3R5bGVGbnM9ZnVuY3Rpb24odCl7dmFyIGU9e30scj10LnNlbGVjdGVkfHx7fSxuPXQudW5zZWxlY3RlZHx8e30saT10Lm1hcmtlcnx8e30sYT1yLm1hcmtlcnx8e30scz1uLm1hcmtlcnx8e30sbD1pLm9wYWNpdHksdT1hLm9wYWNpdHksaD1zLm9wYWNpdHksZj12b2lkIDAhPT11LGQ9dm9pZCAwIT09aDsoYy5pc0FycmF5T3JUeXBlZEFycmF5KGwpfHxmfHxkKSYmKGUuc2VsZWN0ZWRPcGFjaXR5Rm49ZnVuY3Rpb24odCl7dmFyIGU9dm9pZCAwPT09dC5tbz9pLm9wYWNpdHk6dC5tbztyZXR1cm4gdC5zZWxlY3RlZD9mP3U6ZTpkP2g6cCplfSk7dmFyIGc9aS5jb2xvcixtPWEuY29sb3Isdj1zLmNvbG9yOyhtfHx2KSYmKGUuc2VsZWN0ZWRDb2xvckZuPWZ1bmN0aW9uKHQpe3ZhciBlPXQubWNjfHxnO3JldHVybiB0LnNlbGVjdGVkP218fGU6dnx8ZX0pO3ZhciB5PWkuc2l6ZSx4PWEuc2l6ZSxiPXMuc2l6ZSxfPXZvaWQgMCE9PXgsdz12b2lkIDAhPT1iO3JldHVybiBvLnRyYWNlSXModCwic3ltYm9scyIpJiYoX3x8dykmJihlLnNlbGVjdGVkU2l6ZUZuPWZ1bmN0aW9uKHQpe3ZhciBlPXQubXJjfHx5LzI7cmV0dXJuIHQuc2VsZWN0ZWQ/Xz94LzI6ZTp3P2IvMjplfSksZX0sbS5tYWtlU2VsZWN0ZWRUZXh0U3R5bGVGbnM9ZnVuY3Rpb24odCl7dmFyIGU9e30scj10LnNlbGVjdGVkfHx7fSxuPXQudW5zZWxlY3RlZHx8e30saT10LnRleHRmb250fHx7fSxhPXIudGV4dGZvbnR8fHt9LG89bi50ZXh0Zm9udHx8e30sbD1pLmNvbG9yLGM9YS5jb2xvcix1PW8uY29sb3I7cmV0dXJuIGUuc2VsZWN0ZWRUZXh0Q29sb3JGbj1mdW5jdGlvbih0KXt2YXIgZT10LnRjfHxsO3JldHVybiB0LnNlbGVjdGVkP2N8fGU6dXx8KGM/ZTpzLmFkZE9wYWNpdHkoZSxwKSl9LGV9LG0uc2VsZWN0ZWRQb2ludFN0eWxlPWZ1bmN0aW9uKHQsZSl7aWYodC5zaXplKCkmJmUuc2VsZWN0ZWRwb2ludHMpe3ZhciByPW0ubWFrZVNlbGVjdGVkUG9pbnRTdHlsZUZucyhlKSxpPWUubWFya2VyfHx7fSxhPVtdO3Iuc2VsZWN0ZWRPcGFjaXR5Rm4mJmEucHVzaChmdW5jdGlvbih0LGUpe3Quc3R5bGUoIm9wYWNpdHkiLHIuc2VsZWN0ZWRPcGFjaXR5Rm4oZSkpfSksci5zZWxlY3RlZENvbG9yRm4mJmEucHVzaChmdW5jdGlvbih0LGUpe3MuZmlsbCh0LHIuc2VsZWN0ZWRDb2xvckZuKGUpKX0pLHIuc2VsZWN0ZWRTaXplRm4mJmEucHVzaChmdW5jdGlvbih0LGUpe3ZhciBuPWUubXh8fGkuc3ltYm9sfHwwLGE9ci5zZWxlY3RlZFNpemVGbihlKTt0LmF0dHIoImQiLGIobS5zeW1ib2xOdW1iZXIobiksYSkpLGUubXJjMj1hfSksYS5sZW5ndGgmJnQuZWFjaChmdW5jdGlvbih0KXtmb3IodmFyIGU9bi5zZWxlY3QodGhpcykscj0wO3I8YS5sZW5ndGg7cisrKWFbcl0oZSx0KX0pfX0sbS50cnlDb2xvcnNjYWxlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZT9jLm5lc3RlZFByb3BlcnR5KHQsZSkuZ2V0KCk6dDtpZihyKXt2YXIgbj1yLmNvbG9yc2NhbGUsaT1yLmNvbG9yO2lmKG4mJmMuaXNBcnJheU9yVHlwZWRBcnJheShpKSlyZXR1cm4gbC5tYWtlQ29sb3JTY2FsZUZ1bmMobC5leHRyYWN0U2NhbGUobixyLmNtaW4sci5jbWF4KSl9cmV0dXJuIGMuaWRlbnRpdHl9O3ZhciBrPXtzdGFydDoxLGVuZDotMSxtaWRkbGU6MCxib3R0b206MSx0b3A6LTF9O2Z1bmN0aW9uIE0odCxlLHIsaSl7dmFyIGE9bi5zZWxlY3QodC5ub2RlKCkucGFyZW50Tm9kZSksbz0tMSE9PWUuaW5kZXhPZigidG9wIik/InRvcCI6LTEhPT1lLmluZGV4T2YoImJvdHRvbSIpPyJib3R0b20iOiJtaWRkbGUiLHM9LTEhPT1lLmluZGV4T2YoImxlZnQiKT8iZW5kIjotMSE9PWUuaW5kZXhPZigicmlnaHQiKT8ic3RhcnQiOiJtaWRkbGUiLGw9aT9pLy44KzE6MCxjPSh1LmxpbmVDb3VudCh0KS0xKSpmKzEsaD1rW3NdKmwscD0uNzUqcitrW29dKmwrKGtbb10tMSkqYypyLzI7dC5hdHRyKCJ0ZXh0LWFuY2hvciIscyksYS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitoKyIsIitwKyIpIil9ZnVuY3Rpb24gQSh0LGUpe3ZhciByPXQudHN8fGUudGV4dGZvbnQuc2l6ZTtyZXR1cm4gaShyKSYmcj4wP3I6MH1tLnRleHRQb2ludFN0eWxlPWZ1bmN0aW9uKHQsZSxyKXtpZih0LnNpemUoKSl7dmFyIGk7aWYoZS5zZWxlY3RlZHBvaW50cyl7dmFyIGE9bS5tYWtlU2VsZWN0ZWRUZXh0U3R5bGVGbnMoZSk7aT1hLnNlbGVjdGVkVGV4dENvbG9yRm59dC5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBhPW4uc2VsZWN0KHRoaXMpLG89Yy5leHRyYWN0T3B0aW9uKHQsZSwidHgiLCJ0ZXh0Iik7aWYob3x8MD09PW8pe3ZhciBzPXQudHB8fGUudGV4dHBvc2l0aW9uLGw9QSh0LGUpLGg9aT9pKHQpOnQudGN8fGUudGV4dGZvbnQuY29sb3I7YS5jYWxsKG0uZm9udCx0LnRmfHxlLnRleHRmb250LmZhbWlseSxsLGgpLnRleHQobykuY2FsbCh1LmNvbnZlcnRUb1RzcGFucyxyKS5jYWxsKE0scyxsLHQubXJjKX1lbHNlIGEucmVtb3ZlKCl9KX19LG0uc2VsZWN0ZWRUZXh0U3R5bGU9ZnVuY3Rpb24odCxlKXtpZih0LnNpemUoKSYmZS5zZWxlY3RlZHBvaW50cyl7dmFyIHI9bS5tYWtlU2VsZWN0ZWRUZXh0U3R5bGVGbnMoZSk7dC5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBpPW4uc2VsZWN0KHRoaXMpLGE9ci5zZWxlY3RlZFRleHRDb2xvckZuKHQpLG89dC50cHx8ZS50ZXh0cG9zaXRpb24sbD1BKHQsZSk7cy5maWxsKGksYSksTShpLG8sbCx0Lm1yYzJ8fHQubXJjKX0pfX07dmFyIFQ9LjU7ZnVuY3Rpb24gUyh0LGUscixpKXt2YXIgYT10WzBdLWVbMF0sbz10WzFdLWVbMV0scz1yWzBdLWVbMF0sbD1yWzFdLWVbMV0sYz1NYXRoLnBvdyhhKmErbypvLFQvMiksdT1NYXRoLnBvdyhzKnMrbCpsLFQvMiksaD0odSp1KmEtYypjKnMpKmksZj0odSp1Km8tYypjKmwpKmkscD0zKnUqKGMrdSksZD0zKmMqKGMrdSk7cmV0dXJuW1tuLnJvdW5kKGVbMF0rKHAmJmgvcCksMiksbi5yb3VuZChlWzFdKyhwJiZmL3ApLDIpXSxbbi5yb3VuZChlWzBdLShkJiZoL2QpLDIpLG4ucm91bmQoZVsxXS0oZCYmZi9kKSwyKV1dfW0uc21vb3Rob3Blbj1mdW5jdGlvbih0LGUpe2lmKHQubGVuZ3RoPDMpcmV0dXJuIk0iK3Quam9pbigiTCIpO3ZhciByLG49Ik0iK3RbMF0saT1bXTtmb3Iocj0xO3I8dC5sZW5ndGgtMTtyKyspaS5wdXNoKFModFtyLTFdLHRbcl0sdFtyKzFdLGUpKTtmb3Iobis9IlEiK2lbMF1bMF0rIiAiK3RbMV0scj0yO3I8dC5sZW5ndGgtMTtyKyspbis9IkMiK2lbci0yXVsxXSsiICIraVtyLTFdWzBdKyIgIit0W3JdO3JldHVybiBuKz0iUSIraVt0Lmxlbmd0aC0zXVsxXSsiICIrdFt0Lmxlbmd0aC0xXX0sbS5zbW9vdGhjbG9zZWQ9ZnVuY3Rpb24odCxlKXtpZih0Lmxlbmd0aDwzKXJldHVybiJNIit0LmpvaW4oIkwiKSsiWiI7dmFyIHIsbj0iTSIrdFswXSxpPXQubGVuZ3RoLTEsYT1bUyh0W2ldLHRbMF0sdFsxXSxlKV07Zm9yKHI9MTtyPGk7cisrKWEucHVzaChTKHRbci0xXSx0W3JdLHRbcisxXSxlKSk7Zm9yKGEucHVzaChTKHRbaS0xXSx0W2ldLHRbMF0sZSkpLHI9MTtyPD1pO3IrKyluKz0iQyIrYVtyLTFdWzFdKyIgIithW3JdWzBdKyIgIit0W3JdO3JldHVybiBuKz0iQyIrYVtpXVsxXSsiICIrYVswXVswXSsiICIrdFswXSsiWiJ9O3ZhciBFPXtodjpmdW5jdGlvbih0LGUpe3JldHVybiJIIituLnJvdW5kKGVbMF0sMikrIlYiK24ucm91bmQoZVsxXSwyKX0sdmg6ZnVuY3Rpb24odCxlKXtyZXR1cm4iViIrbi5yb3VuZChlWzFdLDIpKyJIIituLnJvdW5kKGVbMF0sMil9LGh2aDpmdW5jdGlvbih0LGUpe3JldHVybiJIIituLnJvdW5kKCh0WzBdK2VbMF0pLzIsMikrIlYiK24ucm91bmQoZVsxXSwyKSsiSCIrbi5yb3VuZChlWzBdLDIpfSx2aHY6ZnVuY3Rpb24odCxlKXtyZXR1cm4iViIrbi5yb3VuZCgodFsxXStlWzFdKS8yLDIpKyJIIituLnJvdW5kKGVbMF0sMikrIlYiK24ucm91bmQoZVsxXSwyKX19LEM9ZnVuY3Rpb24odCxlKXtyZXR1cm4iTCIrbi5yb3VuZChlWzBdLDIpKyIsIituLnJvdW5kKGVbMV0sMil9O20uc3RlcHM9ZnVuY3Rpb24odCl7dmFyIGU9RVt0XXx8QztyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKHZhciByPSJNIituLnJvdW5kKHRbMF1bMF0sMikrIiwiK24ucm91bmQodFswXVsxXSwyKSxpPTE7aTx0Lmxlbmd0aDtpKyspcis9ZSh0W2ktMV0sdFtpXSk7cmV0dXJuIHJ9fSxtLm1ha2VUZXN0ZXI9ZnVuY3Rpb24oKXt2YXIgdD1jLmVuc3VyZVNpbmdsZUJ5SWQobi5zZWxlY3QoImJvZHkiKSwic3ZnIiwianMtcGxvdGx5LXRlc3RlciIsZnVuY3Rpb24odCl7dC5hdHRyKGguc3ZnQXR0cnMpLnN0eWxlKHtwb3NpdGlvbjoiYWJzb2x1dGUiLGxlZnQ6Ii0xMDAwMHB4Iix0b3A6Ii0xMDAwMHB4Iix3aWR0aDoiOTAwMHB4IixoZWlnaHQ6IjkwMDBweCIsInotaW5kZXgiOiIxIn0pfSksZT1jLmVuc3VyZVNpbmdsZSh0LCJwYXRoIiwianMtcmVmZXJlbmNlLXBvaW50IixmdW5jdGlvbih0KXt0LmF0dHIoImQiLCJNMCwwSDFWMUgwWiIpLnN0eWxlKHsic3Ryb2tlLXdpZHRoIjowLGZpbGw6ImJsYWNrIn0pfSk7bS50ZXN0ZXI9dCxtLnRlc3RyZWY9ZX0sbS5zYXZlZEJCb3hlcz17fTt2YXIgTD0wO2Z1bmN0aW9uIHoodCl7dmFyIGU9dC5nZXRBdHRyaWJ1dGUoImRhdGEtdW5mb3JtYXR0ZWQiKTtpZihudWxsIT09ZSlyZXR1cm4gZSt0LmdldEF0dHJpYnV0ZSgiZGF0YS1tYXRoIikrdC5nZXRBdHRyaWJ1dGUoInRleHQtYW5jaG9yIikrdC5nZXRBdHRyaWJ1dGUoInN0eWxlIil9bS5iQm94PWZ1bmN0aW9uKHQsZSxyKXt2YXIgaSxhLG87aWYocnx8KHI9eih0KSkscil7aWYoaT1tLnNhdmVkQkJveGVzW3JdKXJldHVybiBjLmV4dGVuZEZsYXQoe30saSl9ZWxzZSBpZigxPT09dC5jaGlsZE5vZGVzLmxlbmd0aCl7dmFyIHM9dC5jaGlsZE5vZGVzWzBdO2lmKHI9eihzKSl7dmFyIGw9K3MuZ2V0QXR0cmlidXRlKCJ4Iil8fDAsaD0rcy5nZXRBdHRyaWJ1dGUoInkiKXx8MCxmPXMuZ2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iKTtpZighZil7dmFyIHA9bS5iQm94KHMsITEscik7cmV0dXJuIGwmJihwLmxlZnQrPWwscC5yaWdodCs9bCksaCYmKHAudG9wKz1oLHAuYm90dG9tKz1oKSxwfWlmKHIrPSJ+IitsKyJ+IitoKyJ+IitmLGk9bS5zYXZlZEJCb3hlc1tyXSlyZXR1cm4gYy5leHRlbmRGbGF0KHt9LGkpfX1lP2E9dDoobz1tLnRlc3Rlci5ub2RlKCksYT10LmNsb25lTm9kZSghMCksby5hcHBlbmRDaGlsZChhKSksbi5zZWxlY3QoYSkuYXR0cigidHJhbnNmb3JtIixudWxsKS5jYWxsKHUucG9zaXRpb25UZXh0LDAsMCk7dmFyIGQ9YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxnPW0udGVzdHJlZi5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7ZXx8by5yZW1vdmVDaGlsZChhKTt2YXIgdj17aGVpZ2h0OmQuaGVpZ2h0LHdpZHRoOmQud2lkdGgsbGVmdDpkLmxlZnQtZy5sZWZ0LHRvcDpkLnRvcC1nLnRvcCxyaWdodDpkLnJpZ2h0LWcubGVmdCxib3R0b206ZC5ib3R0b20tZy50b3B9O3JldHVybiBMPj0xZTQmJihtLnNhdmVkQkJveGVzPXt9LEw9MCksciYmKG0uc2F2ZWRCQm94ZXNbcl09diksTCsrLGMuZXh0ZW5kRmxhdCh7fSx2KX0sbS5zZXRDbGlwVXJsPWZ1bmN0aW9uKHQsZSl7aWYoZSl7aWYodm9pZCAwPT09bS5iYXNlVXJsKXt2YXIgcj1uLnNlbGVjdCgiYmFzZSIpO3Iuc2l6ZSgpJiZyLmF0dHIoImhyZWYiKT9tLmJhc2VVcmw9d2luZG93LmxvY2F0aW9uLmhyZWYuc3BsaXQoIiMiKVswXTptLmJhc2VVcmw9IiJ9dC5hdHRyKCJjbGlwLXBhdGgiLCJ1cmwoIittLmJhc2VVcmwrIiMiK2UrIikiKX1lbHNlIHQuYXR0cigiY2xpcC1wYXRoIixudWxsKX0sbS5nZXRUcmFuc2xhdGU9ZnVuY3Rpb24odCl7dmFyIGU9KHRbdC5hdHRyPyJhdHRyIjoiZ2V0QXR0cmlidXRlIl0oInRyYW5zZm9ybSIpfHwiIikucmVwbGFjZSgvLipcYnRyYW5zbGF0ZVwoKC0/XGQqXC4/XGQqKVteLVxkXSooLT9cZCpcLj9cZCopW15cZF0uKi8sZnVuY3Rpb24odCxlLHIpe3JldHVybltlLHJdLmpvaW4oIiAiKX0pLnNwbGl0KCIgIik7cmV0dXJue3g6K2VbMF18fDAseTorZVsxXXx8MH19LG0uc2V0VHJhbnNsYXRlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10LmF0dHI/ImF0dHIiOiJnZXRBdHRyaWJ1dGUiLGk9dC5hdHRyPyJhdHRyIjoic2V0QXR0cmlidXRlIixhPXRbbl0oInRyYW5zZm9ybSIpfHwiIjtyZXR1cm4gZT1lfHwwLHI9cnx8MCxhPWEucmVwbGFjZSgvKFxidHJhbnNsYXRlXCguKj9cKTs/KS8sIiIpLnRyaW0oKSxhPShhKz0iIHRyYW5zbGF0ZSgiK2UrIiwgIityKyIpIikudHJpbSgpLHRbaV0oInRyYW5zZm9ybSIsYSksYX0sbS5nZXRTY2FsZT1mdW5jdGlvbih0KXt2YXIgZT0odFt0LmF0dHI/ImF0dHIiOiJnZXRBdHRyaWJ1dGUiXSgidHJhbnNmb3JtIil8fCIiKS5yZXBsYWNlKC8uKlxic2NhbGVcKChcZCpcLj9cZCopW15cZF0qKFxkKlwuP1xkKilbXlxkXS4qLyxmdW5jdGlvbih0LGUscil7cmV0dXJuW2Uscl0uam9pbigiICIpfSkuc3BsaXQoIiAiKTtyZXR1cm57eDorZVswXXx8MSx5OitlWzFdfHwxfX0sbS5zZXRTY2FsZT1mdW5jdGlvbih0LGUscil7dmFyIG49dC5hdHRyPyJhdHRyIjoiZ2V0QXR0cmlidXRlIixpPXQuYXR0cj8iYXR0ciI6InNldEF0dHJpYnV0ZSIsYT10W25dKCJ0cmFuc2Zvcm0iKXx8IiI7cmV0dXJuIGU9ZXx8MSxyPXJ8fDEsYT1hLnJlcGxhY2UoLyhcYnNjYWxlXCguKj9cKTs/KS8sIiIpLnRyaW0oKSxhPShhKz0iIHNjYWxlKCIrZSsiLCAiK3IrIikiKS50cmltKCksdFtpXSgidHJhbnNmb3JtIixhKSxhfTt2YXIgUD0vXHMqc2MuKi87bS5zZXRQb2ludEdyb3VwU2NhbGU9ZnVuY3Rpb24odCxlLHIpe2lmKGU9ZXx8MSxyPXJ8fDEsdCl7dmFyIG49MT09PWUmJjE9PT1yPyIiOiIgc2NhbGUoIitlKyIsIityKyIpIjt0LmVhY2goZnVuY3Rpb24oKXt2YXIgdD0odGhpcy5nZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIpfHwiIikucmVwbGFjZShQLCIiKTt0PSh0Kz1uKS50cmltKCksdGhpcy5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsdCl9KX19O3ZhciBJPS90cmFuc2xhdGVcKFteKV0qXClccyokLzttLnNldFRleHRQb2ludHNTY2FsZT1mdW5jdGlvbih0LGUscil7dCYmdC5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQsaT1uLnNlbGVjdCh0aGlzKSxhPWkuc2VsZWN0KCJ0ZXh0Iik7aWYoYS5ub2RlKCkpe3ZhciBvPXBhcnNlRmxvYXQoYS5hdHRyKCJ4Iil8fDApLHM9cGFyc2VGbG9hdChhLmF0dHIoInkiKXx8MCksbD0oaS5hdHRyKCJ0cmFuc2Zvcm0iKXx8IiIpLm1hdGNoKEkpO3Q9MT09PWUmJjE9PT1yP1tdOlsidHJhbnNsYXRlKCIrbysiLCIrcysiKSIsInNjYWxlKCIrZSsiLCIrcisiKSIsInRyYW5zbGF0ZSgiKy1vKyIsIistcysiKSJdLGwmJnQucHVzaChsKSxpLmF0dHIoInRyYW5zZm9ybSIsdC5qb2luKCIgIikpfX0pfX0seyIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50Ijo2NTYsIi4uLy4uL2NvbnN0YW50cy9pbnRlcmFjdGlvbnMiOjY2MCwiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiOjY2MywiLi4vLi4vbGliIjo2ODQsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6NzA4LCIuLi8uLi9yZWdpc3RyeSI6ODE3LCIuLi8uLi90cmFjZXMvc2NhdHRlci9tYWtlX2J1YmJsZV9zaXplX2Z1bmMiOjEwMzEsIi4uLy4uL3RyYWNlcy9zY2F0dGVyL3N1YnR5cGVzIjoxMDM3LCIuLi9jb2xvciI6NTU4LCIuLi9jb2xvcnNjYWxlIjo1NzMsIi4vc3ltYm9sX2RlZnMiOjU4NCxkMzoxNDcsImZhc3QtaXNudW1lcmljIjoyMTQsdGlueWNvbG9yMjo0OTl9XSw1ODQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKTtlLmV4cG9ydHM9e2NpcmNsZTp7bjowLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpO3JldHVybiJNIitlKyIsMEEiK2UrIiwiK2UrIiAwIDEsMSAwLC0iK2UrIkEiK2UrIiwiK2UrIiAwIDAsMSAiK2UrIiwwWiJ9fSxzcXVhcmU6e246MSxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKTtyZXR1cm4iTSIrZSsiLCIrZSsiSC0iK2UrIlYtIitlKyJIIitlKyJaIn19LGRpYW1vbmQ6e246MixmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMS4zKnQsMik7cmV0dXJuIk0iK2UrIiwwTDAsIitlKyJMLSIrZSsiLDBMMCwtIitlKyJaIn19LGNyb3NzOntuOjMsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKC40KnQsMikscj1uLnJvdW5kKDEuMip0LDIpO3JldHVybiJNIityKyIsIitlKyJIIitlKyJWIityKyJILSIrZSsiViIrZSsiSC0iK3IrIlYtIitlKyJILSIrZSsiVi0iK3IrIkgiK2UrIlYtIitlKyJIIityKyJaIn19LHg6e246NCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoLjgqdC9NYXRoLnNxcnQoMiksMikscj0ibCIrZSsiLCIrZSxpPSJsIitlKyIsLSIrZSxhPSJsLSIrZSsiLC0iK2Usbz0ibC0iK2UrIiwiK2U7cmV0dXJuIk0wLCIrZStyK2krYStpK2ErbythK28rcitvK3IrIloifX0sInRyaWFuZ2xlLXVwIjp7bjo1LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgyKnQvTWF0aC5zcXJ0KDMpLDIpO3JldHVybiJNLSIrZSsiLCIrbi5yb3VuZCh0LzIsMikrIkgiK2UrIkwwLC0iK24ucm91bmQodCwyKSsiWiJ9fSwidHJpYW5nbGUtZG93biI6e246NixmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMip0L01hdGguc3FydCgzKSwyKTtyZXR1cm4iTS0iK2UrIiwtIituLnJvdW5kKHQvMiwyKSsiSCIrZSsiTDAsIituLnJvdW5kKHQsMikrIloifX0sInRyaWFuZ2xlLWxlZnQiOntuOjcsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDIqdC9NYXRoLnNxcnQoMyksMik7cmV0dXJuIk0iK24ucm91bmQodC8yLDIpKyIsLSIrZSsiViIrZSsiTC0iK24ucm91bmQodCwyKSsiLDBaIn19LCJ0cmlhbmdsZS1yaWdodCI6e246OCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMip0L01hdGguc3FydCgzKSwyKTtyZXR1cm4iTS0iK24ucm91bmQodC8yLDIpKyIsLSIrZSsiViIrZSsiTCIrbi5yb3VuZCh0LDIpKyIsMFoifX0sInRyaWFuZ2xlLW5lIjp7bjo5LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCguNip0LDIpLHI9bi5yb3VuZCgxLjIqdCwyKTtyZXR1cm4iTS0iK3IrIiwtIitlKyJIIitlKyJWIityKyJaIn19LCJ0cmlhbmdsZS1zZSI6e246MTAsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKC42KnQsMikscj1uLnJvdW5kKDEuMip0LDIpO3JldHVybiJNIitlKyIsLSIrcisiViIrZSsiSC0iK3IrIloifX0sInRyaWFuZ2xlLXN3Ijp7bjoxMSxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoLjYqdCwyKSxyPW4ucm91bmQoMS4yKnQsMik7cmV0dXJuIk0iK3IrIiwiK2UrIkgtIitlKyJWLSIrcisiWiJ9fSwidHJpYW5nbGUtbnciOntuOjEyLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCguNip0LDIpLHI9bi5yb3VuZCgxLjIqdCwyKTtyZXR1cm4iTS0iK2UrIiwiK3IrIlYtIitlKyJIIityKyJaIn19LHBlbnRhZ29uOntuOjEzLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCguOTUxKnQsMikscj1uLnJvdW5kKC41ODgqdCwyKSxpPW4ucm91bmQoLXQsMiksYT1uLnJvdW5kKC0uMzA5KnQsMik7cmV0dXJuIk0iK2UrIiwiK2ErIkwiK3IrIiwiK24ucm91bmQoLjgwOSp0LDIpKyJILSIrcisiTC0iK2UrIiwiK2ErIkwwLCIraSsiWiJ9fSxoZXhhZ29uOntuOjE0LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpLHI9bi5yb3VuZCh0LzIsMiksaT1uLnJvdW5kKHQqTWF0aC5zcXJ0KDMpLzIsMik7cmV0dXJuIk0iK2krIiwtIityKyJWIityKyJMMCwiK2UrIkwtIitpKyIsIityKyJWLSIrcisiTDAsLSIrZSsiWiJ9fSxoZXhhZ29uMjp7bjoxNSxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKSxyPW4ucm91bmQodC8yLDIpLGk9bi5yb3VuZCh0Kk1hdGguc3FydCgzKS8yLDIpO3JldHVybiJNLSIrcisiLCIraSsiSCIrcisiTCIrZSsiLDBMIityKyIsLSIraSsiSC0iK3IrIkwtIitlKyIsMFoifX0sb2N0YWdvbjp7bjoxNixmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoLjkyNCp0LDIpLHI9bi5yb3VuZCguMzgzKnQsMik7cmV0dXJuIk0tIityKyIsLSIrZSsiSCIrcisiTCIrZSsiLC0iK3IrIlYiK3IrIkwiK3IrIiwiK2UrIkgtIityKyJMLSIrZSsiLCIrcisiVi0iK3IrIloifX0sc3Rhcjp7bjoxNyxmOmZ1bmN0aW9uKHQpe3ZhciBlPTEuNCp0LHI9bi5yb3VuZCguMjI1KmUsMiksaT1uLnJvdW5kKC45NTEqZSwyKSxhPW4ucm91bmQoLjM2MyplLDIpLG89bi5yb3VuZCguNTg4KmUsMikscz1uLnJvdW5kKC1lLDIpLGw9bi5yb3VuZCgtLjMwOSplLDIpLGM9bi5yb3VuZCguMTE4KmUsMiksdT1uLnJvdW5kKC44MDkqZSwyKTtyZXR1cm4iTSIrcisiLCIrbCsiSCIraSsiTCIrYSsiLCIrYysiTCIrbysiLCIrdSsiTDAsIituLnJvdW5kKC4zODIqZSwyKSsiTC0iK28rIiwiK3UrIkwtIithKyIsIitjKyJMLSIraSsiLCIrbCsiSC0iK3IrIkwwLCIrcysiWiJ9fSxoZXhhZ3JhbTp7bjoxOCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoLjY2KnQsMikscj1uLnJvdW5kKC4zOCp0LDIpLGk9bi5yb3VuZCguNzYqdCwyKTtyZXR1cm4iTS0iK2krIiwwbC0iK3IrIiwtIitlKyJoIitpKyJsIityKyIsLSIrZSsibCIrcisiLCIrZSsiaCIraSsibC0iK3IrIiwiK2UrImwiK3IrIiwiK2UrImgtIitpKyJsLSIrcisiLCIrZSsibC0iK3IrIiwtIitlKyJoLSIraSsiWiJ9fSwic3Rhci10cmlhbmdsZS11cCI6e246MTksZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQqTWF0aC5zcXJ0KDMpKi44LDIpLHI9bi5yb3VuZCguOCp0LDIpLGk9bi5yb3VuZCgxLjYqdCwyKSxhPW4ucm91bmQoNCp0LDIpLG89IkEgIithKyIsIithKyIgMCAwIDEgIjtyZXR1cm4iTS0iK2UrIiwiK3IrbytlKyIsIityK28rIjAsLSIraStvKyItIitlKyIsIityKyJaIn19LCJzdGFyLXRyaWFuZ2xlLWRvd24iOntuOjIwLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0Kk1hdGguc3FydCgzKSouOCwyKSxyPW4ucm91bmQoLjgqdCwyKSxpPW4ucm91bmQoMS42KnQsMiksYT1uLnJvdW5kKDQqdCwyKSxvPSJBICIrYSsiLCIrYSsiIDAgMCAxICI7cmV0dXJuIk0iK2UrIiwtIityK28rIi0iK2UrIiwtIityK28rIjAsIitpK28rZSsiLC0iK3IrIloifX0sInN0YXItc3F1YXJlIjp7bjoyMSxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMS4xKnQsMikscj1uLnJvdW5kKDIqdCwyKSxpPSJBICIrcisiLCIrcisiIDAgMCAxICI7cmV0dXJuIk0tIitlKyIsLSIrZStpKyItIitlKyIsIitlK2krZSsiLCIrZStpK2UrIiwtIitlK2krIi0iK2UrIiwtIitlKyJaIn19LCJzdGFyLWRpYW1vbmQiOntuOjIyLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgxLjQqdCwyKSxyPW4ucm91bmQoMS45KnQsMiksaT0iQSAiK3IrIiwiK3IrIiAwIDAgMSAiO3JldHVybiJNLSIrZSsiLDAiK2krIjAsIitlK2krZSsiLDAiK2krIjAsLSIrZStpKyItIitlKyIsMFoifX0sImRpYW1vbmQtdGFsbCI6e246MjMsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKC43KnQsMikscj1uLnJvdW5kKDEuNCp0LDIpO3JldHVybiJNMCwiK3IrIkwiK2UrIiwwTDAsLSIrcisiTC0iK2UrIiwwWiJ9fSwiZGlhbW9uZC13aWRlIjp7bjoyNCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMS40KnQsMikscj1uLnJvdW5kKC43KnQsMik7cmV0dXJuIk0wLCIrcisiTCIrZSsiLDBMMCwtIityKyJMLSIrZSsiLDBaIn19LGhvdXJnbGFzczp7bjoyNSxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKTtyZXR1cm4iTSIrZSsiLCIrZSsiSC0iK2UrIkwiK2UrIiwtIitlKyJILSIrZSsiWiJ9LG5vRG90OiEwfSxib3d0aWU6e246MjYsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQsMik7cmV0dXJuIk0iK2UrIiwiK2UrIlYtIitlKyJMLSIrZSsiLCIrZSsiVi0iK2UrIloifSxub0RvdDohMH0sImNpcmNsZS1jcm9zcyI6e246MjcsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQsMik7cmV0dXJuIk0wLCIrZSsiVi0iK2UrIk0iK2UrIiwwSC0iK2UrIk0iK2UrIiwwQSIrZSsiLCIrZSsiIDAgMSwxIDAsLSIrZSsiQSIrZSsiLCIrZSsiIDAgMCwxICIrZSsiLDBaIn0sbmVlZExpbmU6ITAsbm9Eb3Q6ITB9LCJjaXJjbGUteCI6e246MjgsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQsMikscj1uLnJvdW5kKHQvTWF0aC5zcXJ0KDIpLDIpO3JldHVybiJNIityKyIsIityKyJMLSIrcisiLC0iK3IrIk0iK3IrIiwtIityKyJMLSIrcisiLCIrcisiTSIrZSsiLDBBIitlKyIsIitlKyIgMCAxLDEgMCwtIitlKyJBIitlKyIsIitlKyIgMCAwLDEgIitlKyIsMFoifSxuZWVkTGluZTohMCxub0RvdDohMH0sInNxdWFyZS1jcm9zcyI6e246MjksZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQsMik7cmV0dXJuIk0wLCIrZSsiVi0iK2UrIk0iK2UrIiwwSC0iK2UrIk0iK2UrIiwiK2UrIkgtIitlKyJWLSIrZSsiSCIrZSsiWiJ9LG5lZWRMaW5lOiEwLG5vRG90OiEwfSwic3F1YXJlLXgiOntuOjMwLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpO3JldHVybiJNIitlKyIsIitlKyJMLSIrZSsiLC0iK2UrIk0iK2UrIiwtIitlKyJMLSIrZSsiLCIrZSsiTSIrZSsiLCIrZSsiSC0iK2UrIlYtIitlKyJIIitlKyJaIn0sbmVlZExpbmU6ITAsbm9Eb3Q6ITB9LCJkaWFtb25kLWNyb3NzIjp7bjozMSxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMS4zKnQsMik7cmV0dXJuIk0iK2UrIiwwTDAsIitlKyJMLSIrZSsiLDBMMCwtIitlKyJaTTAsLSIrZSsiViIrZSsiTS0iK2UrIiwwSCIrZX0sbmVlZExpbmU6ITAsbm9Eb3Q6ITB9LCJkaWFtb25kLXgiOntuOjMyLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgxLjMqdCwyKSxyPW4ucm91bmQoLjY1KnQsMik7cmV0dXJuIk0iK2UrIiwwTDAsIitlKyJMLSIrZSsiLDBMMCwtIitlKyJaTS0iK3IrIiwtIityKyJMIityKyIsIityKyJNLSIrcisiLCIrcisiTCIrcisiLC0iK3J9LG5lZWRMaW5lOiEwLG5vRG90OiEwfSwiY3Jvc3MtdGhpbiI6e246MzMsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDEuNCp0LDIpO3JldHVybiJNMCwiK2UrIlYtIitlKyJNIitlKyIsMEgtIitlfSxuZWVkTGluZTohMCxub0RvdDohMCxub0ZpbGw6ITB9LCJ4LXRoaW4iOntuOjM0LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpO3JldHVybiJNIitlKyIsIitlKyJMLSIrZSsiLC0iK2UrIk0iK2UrIiwtIitlKyJMLSIrZSsiLCIrZX0sbmVlZExpbmU6ITAsbm9Eb3Q6ITAsbm9GaWxsOiEwfSxhc3Rlcmlzazp7bjozNSxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMS4yKnQsMikscj1uLnJvdW5kKC44NSp0LDIpO3JldHVybiJNMCwiK2UrIlYtIitlKyJNIitlKyIsMEgtIitlKyJNIityKyIsIityKyJMLSIrcisiLC0iK3IrIk0iK3IrIiwtIityKyJMLSIrcisiLCIrcn0sbmVlZExpbmU6ITAsbm9Eb3Q6ITAsbm9GaWxsOiEwfSxoYXNoOntuOjM2LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LzIsMikscj1uLnJvdW5kKHQsMik7cmV0dXJuIk0iK2UrIiwiK3IrIlYtIityKyJtLSIrcisiLDBWIityKyJNIityKyIsIitlKyJILSIrcisibTAsLSIrcisiSCIrcn0sbmVlZExpbmU6ITAsbm9GaWxsOiEwfSwieS11cCI6e246MzcsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDEuMip0LDIpLHI9bi5yb3VuZCgxLjYqdCwyKSxpPW4ucm91bmQoLjgqdCwyKTtyZXR1cm4iTS0iK2UrIiwiK2krIkwwLDBNIitlKyIsIitpKyJMMCwwTTAsLSIrcisiTDAsMCJ9LG5lZWRMaW5lOiEwLG5vRG90OiEwLG5vRmlsbDohMH0sInktZG93biI6e246MzgsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDEuMip0LDIpLHI9bi5yb3VuZCgxLjYqdCwyKSxpPW4ucm91bmQoLjgqdCwyKTtyZXR1cm4iTS0iK2UrIiwtIitpKyJMMCwwTSIrZSsiLC0iK2krIkwwLDBNMCwiK3IrIkwwLDAifSxuZWVkTGluZTohMCxub0RvdDohMCxub0ZpbGw6ITB9LCJ5LWxlZnQiOntuOjM5LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgxLjIqdCwyKSxyPW4ucm91bmQoMS42KnQsMiksaT1uLnJvdW5kKC44KnQsMik7cmV0dXJuIk0iK2krIiwiK2UrIkwwLDBNIitpKyIsLSIrZSsiTDAsME0tIityKyIsMEwwLDAifSxuZWVkTGluZTohMCxub0RvdDohMCxub0ZpbGw6ITB9LCJ5LXJpZ2h0Ijp7bjo0MCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMS4yKnQsMikscj1uLnJvdW5kKDEuNip0LDIpLGk9bi5yb3VuZCguOCp0LDIpO3JldHVybiJNLSIraSsiLCIrZSsiTDAsME0tIitpKyIsLSIrZSsiTDAsME0iK3IrIiwwTDAsMCJ9LG5lZWRMaW5lOiEwLG5vRG90OiEwLG5vRmlsbDohMH0sImxpbmUtZXciOntuOjQxLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgxLjQqdCwyKTtyZXR1cm4iTSIrZSsiLDBILSIrZX0sbmVlZExpbmU6ITAsbm9Eb3Q6ITAsbm9GaWxsOiEwfSwibGluZS1ucyI6e246NDIsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDEuNCp0LDIpO3JldHVybiJNMCwiK2UrIlYtIitlfSxuZWVkTGluZTohMCxub0RvdDohMCxub0ZpbGw6ITB9LCJsaW5lLW5lIjp7bjo0MyxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKTtyZXR1cm4iTSIrZSsiLC0iK2UrIkwtIitlKyIsIitlfSxuZWVkTGluZTohMCxub0RvdDohMCxub0ZpbGw6ITB9LCJsaW5lLW53Ijp7bjo0NCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKTtyZXR1cm4iTSIrZSsiLCIrZSsiTC0iK2UrIiwtIitlfSxuZWVkTGluZTohMCxub0RvdDohMCxub0ZpbGw6ITB9fX0se2QzOjE0N31dLDU4NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e3Zpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGVkaXRUeXBlOiJjYWxjIn0sdHlwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsicGVyY2VudCIsImNvbnN0YW50Iiwic3FydCIsImRhdGEiXSxlZGl0VHlwZToiY2FsYyJ9LHN5bW1ldHJpYzp7dmFsVHlwZToiYm9vbGVhbiIsZWRpdFR5cGU6ImNhbGMifSxhcnJheTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxhcnJheW1pbnVzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHZhbHVlOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MTAsZWRpdFR5cGU6ImNhbGMifSx2YWx1ZW1pbnVzOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MTAsZWRpdFR5cGU6ImNhbGMifSx0cmFjZXJlZjp7dmFsVHlwZToiaW50ZWdlciIsbWluOjAsZGZsdDowLGVkaXRUeXBlOiJzdHlsZSJ9LHRyYWNlcmVmbWludXM6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZToic3R5bGUifSxjb3B5X3lzdHlsZTp7dmFsVHlwZToiYm9vbGVhbiIsZWRpdFR5cGU6InBsb3QifSxjb3B5X3pzdHlsZTp7dmFsVHlwZToiYm9vbGVhbiIsZWRpdFR5cGU6InN0eWxlIn0sY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToic3R5bGUifSx0aGlja25lc3M6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoyLGVkaXRUeXBlOiJzdHlsZSJ9LHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGVkaXRUeXBlOiJwbG90In0sZWRpdFR5cGU6ImNhbGMiLF9kZXByZWNhdGVkOntvcGFjaXR5Ont2YWxUeXBlOiJudW1iZXIiLGVkaXRUeXBlOiJzdHlsZSJ9fX19LHt9XSw1ODY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLG89dCgiLi9jb21wdXRlX2Vycm9yIik7ZnVuY3Rpb24gcyh0LGUscixpKXt2YXIgcz1lWyJlcnJvcl8iK2ldfHx7fSxsPVtdO2lmKHMudmlzaWJsZSYmLTEhPT1bImxpbmVhciIsImxvZyJdLmluZGV4T2Yoci50eXBlKSl7Zm9yKHZhciBjPW8ocyksdT0wO3U8dC5sZW5ndGg7dSsrKXt2YXIgaD10W3VdLGY9aFtpXTtpZihuKHIuYzJsKGYpKSl7dmFyIHA9YyhmLHUpO2lmKG4ocFswXSkmJm4ocFsxXSkpe3ZhciBkPWhbaSsicyJdPWYtcFswXSxnPWhbaSsiaCJdPWYrcFsxXTtsLnB1c2goZCxnKX19fWEuZXhwYW5kKHIsbCx7cGFkZGVkOiEwfSl9fWUuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5jYWxjZGF0YSxyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl0sbz1uWzBdLnRyYWNlO2lmKGkudHJhY2VJcyhvLCJlcnJvckJhcnNPSyIpKXt2YXIgbD1hLmdldEZyb21JZCh0LG8ueGF4aXMpLGM9YS5nZXRGcm9tSWQodCxvLnlheGlzKTtzKG4sbyxsLCJ4IikscyhuLG8sYywieSIpfX19fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3MzIsIi4uLy4uL3JlZ2lzdHJ5Ijo4MTcsIi4vY29tcHV0ZV9lcnJvciI6NTg3LCJmYXN0LWlzbnVtZXJpYyI6MjE0fV0sNTg3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtyZXR1cm4icGVyY2VudCI9PT10P2Z1bmN0aW9uKHQpe3JldHVybiBNYXRoLmFicyh0KmUvMTAwKX06ImNvbnN0YW50Ij09PXQ/ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5hYnMoZSl9OiJzcXJ0Ij09PXQ/ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguc3FydChNYXRoLmFicyh0KSl9OnZvaWQgMH1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC50eXBlLHI9dC5zeW1tZXRyaWM7aWYoImRhdGEiPT09ZSl7dmFyIGk9dC5hcnJheXx8W107aWYocilyZXR1cm4gZnVuY3Rpb24odCxlKXt2YXIgcj0raVtlXTtyZXR1cm5bcixyXX07dmFyIGE9dC5hcnJheW1pbnVzfHxbXTtyZXR1cm4gZnVuY3Rpb24odCxlKXt2YXIgcj0raVtlXSxuPSthW2VdO3JldHVybiBpc05hTihyKSYmaXNOYU4obik/W05hTixOYU5dOltufHwwLHJ8fDBdfX12YXIgbz1uKGUsdC52YWx1ZSkscz1uKGUsdC52YWx1ZW1pbnVzKTtyZXR1cm4gcnx8dm9pZCAwPT09dC52YWx1ZW1pbnVzP2Z1bmN0aW9uKHQpe3ZhciBlPW8odCk7cmV0dXJuW2UsZV19OmZ1bmN0aW9uKHQpe3JldHVybltzKHQpLG8odCldfX19LHt9XSw1ODg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYT10KCIuLi8uLi9saWIiKSxvPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKSxzPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixsKXt2YXIgYz0iZXJyb3JfIitsLmF4aXMsdT1vLm5ld0NvbnRhaW5lcihlLGMpLGg9dFtjXXx8e307ZnVuY3Rpb24gZih0LGUpe3JldHVybiBhLmNvZXJjZShoLHUscyx0LGUpfWlmKCExIT09ZigidmlzaWJsZSIsdm9pZCAwIT09aC5hcnJheXx8dm9pZCAwIT09aC52YWx1ZXx8InNxcnQiPT09aC50eXBlKSl7dmFyIHA9ZigidHlwZSIsImFycmF5ImluIGg/ImRhdGEiOiJwZXJjZW50IiksZD0hMDsic3FydCIhPT1wJiYoZD1mKCJzeW1tZXRyaWMiLCEoKCJkYXRhIj09PXA/ImFycmF5bWludXMiOiJ2YWx1ZW1pbnVzIilpbiBoKSkpLCJkYXRhIj09PXA/KGYoImFycmF5IiksZigidHJhY2VyZWYiKSxkfHwoZigiYXJyYXltaW51cyIpLGYoInRyYWNlcmVmbWludXMiKSkpOiJwZXJjZW50IiE9PXAmJiJjb25zdGFudCIhPT1wfHwoZigidmFsdWUiKSxkfHxmKCJ2YWx1ZW1pbnVzIikpO3ZhciBnPSJjb3B5XyIrbC5pbmhlcml0KyJzdHlsZSI7aWYobC5pbmhlcml0KShlWyJlcnJvcl8iK2wuaW5oZXJpdF18fHt9KS52aXNpYmxlJiZmKGcsIShoLmNvbG9yfHxuKGgudGhpY2tuZXNzKXx8bihoLndpZHRoKSkpO2wuaW5oZXJpdCYmdVtnXXx8KGYoImNvbG9yIixyKSxmKCJ0aGlja25lc3MiKSxmKCJ3aWR0aCIsaS50cmFjZUlzKGUsImdsM2QiKT8wOjQpKX19fSx7Ii4uLy4uL2xpYiI6Njg0LCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo3MjIsIi4uLy4uL3JlZ2lzdHJ5Ijo4MTcsIi4vYXR0cmlidXRlcyI6NTg1LCJmYXN0LWlzbnVtZXJpYyI6MjE0fV0sNTg5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsLGE9dCgiLi9hdHRyaWJ1dGVzIiksbz17ZXJyb3JfeDpuLmV4dGVuZEZsYXQoe30sYSksZXJyb3JfeTpuLmV4dGVuZEZsYXQoe30sYSl9O2RlbGV0ZSBvLmVycm9yX3guY29weV96c3R5bGUsZGVsZXRlIG8uZXJyb3JfeS5jb3B5X3pzdHlsZSxkZWxldGUgby5lcnJvcl95LmNvcHlfeXN0eWxlO3ZhciBzPXtlcnJvcl94Om4uZXh0ZW5kRmxhdCh7fSxhKSxlcnJvcl95Om4uZXh0ZW5kRmxhdCh7fSxhKSxlcnJvcl96Om4uZXh0ZW5kRmxhdCh7fSxhKX07ZGVsZXRlIHMuZXJyb3JfeC5jb3B5X3lzdHlsZSxkZWxldGUgcy5lcnJvcl95LmNvcHlfeXN0eWxlLGRlbGV0ZSBzLmVycm9yX3ouY29weV95c3R5bGUsZGVsZXRlIHMuZXJyb3Jfei5jb3B5X3pzdHlsZSxlLmV4cG9ydHM9e21vZHVsZVR5cGU6ImNvbXBvbmVudCIsbmFtZToiZXJyb3JiYXJzIixzY2hlbWE6e3RyYWNlczp7c2NhdHRlcjpvLGJhcjpvLGhpc3RvZ3JhbTpvLHNjYXR0ZXIzZDppKHMsImNhbGMiLCJuZXN0ZWQiKSxzY2F0dGVyZ2w6aShvLCJjYWxjIiwibmVzdGVkIil9fSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY2FsYzp0KCIuL2NhbGMiKSxtYWtlQ29tcHV0ZUVycm9yOnQoIi4vY29tcHV0ZV9lcnJvciIpLHBsb3Q6dCgiLi9wbG90Iiksc3R5bGU6dCgiLi9zdHlsZSIpLGhvdmVySW5mbzpmdW5jdGlvbih0LGUscil7KGUuZXJyb3JfeXx8e30pLnZpc2libGUmJihyLnllcnI9dC55aC10LnksZS5lcnJvcl95LnN5bW1ldHJpY3x8KHIueWVycm5lZz10LnktdC55cykpOyhlLmVycm9yX3h8fHt9KS52aXNpYmxlJiYoci54ZXJyPXQueGgtdC54LGUuZXJyb3JfeC5zeW1tZXRyaWN8fChyLnhlcnJuZWc9dC54LXQueHMpKX19fSx7Ii4uLy4uL2xpYiI6Njg0LCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo3MTUsIi4vYXR0cmlidXRlcyI6NTg1LCIuL2NhbGMiOjU4NiwiLi9jb21wdXRlX2Vycm9yIjo1ODcsIi4vZGVmYXVsdHMiOjU4OCwiLi9wbG90Ijo1OTAsIi4vc3R5bGUiOjU5MX1dLDU5MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiZmFzdC1pc251bWVyaWMiKSxhPXQoIi4uL2RyYXdpbmciKSxvPXQoIi4uLy4uL3RyYWNlcy9zY2F0dGVyL3N1YnR5cGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgcz1lLnhheGlzLGw9ZS55YXhpcyxjPXImJnIuZHVyYXRpb24+MDt0LmVhY2goZnVuY3Rpb24odCl7dmFyIHUsaD10WzBdLnRyYWNlLGY9aC5lcnJvcl94fHx7fSxwPWguZXJyb3JfeXx8e307aC5pZHMmJih1PWZ1bmN0aW9uKHQpe3JldHVybiB0LmlkfSk7dmFyIGQ9by5oYXNNYXJrZXJzKGgpJiZoLm1hcmtlci5tYXhkaXNwbGF5ZWQ+MDtwLnZpc2libGV8fGYudmlzaWJsZXx8KHQ9W10pO3ZhciBnPW4uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgiZy5lcnJvcmJhciIpLmRhdGEodCx1KTtpZihnLmV4aXQoKS5yZW1vdmUoKSx0Lmxlbmd0aCl7Zi52aXNpYmxlfHxnLnNlbGVjdEFsbCgicGF0aC54ZXJyb3IiKS5yZW1vdmUoKSxwLnZpc2libGV8fGcuc2VsZWN0QWxsKCJwYXRoLnllcnJvciIpLnJlbW92ZSgpLGcuc3R5bGUoIm9wYWNpdHkiLDEpO3ZhciBtPWcuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJlcnJvcmJhciIsITApO2MmJm0uc3R5bGUoIm9wYWNpdHkiLDApLnRyYW5zaXRpb24oKS5kdXJhdGlvbihyLmR1cmF0aW9uKS5zdHlsZSgib3BhY2l0eSIsMSksYS5zZXRDbGlwVXJsKGcsZS5sYXllckNsaXBJZCksZy5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHRoaXMpLGE9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXt4OmUuYzJwKHQueCkseTpyLmMycCh0LnkpfTt2b2lkIDAhPT10LnloJiYobi55aD1yLmMycCh0LnloKSxuLnlzPXIuYzJwKHQueXMpLGkobi55cyl8fChuLm5vWVM9ITAsbi55cz1yLmMycCh0LnlzLCEwKSkpO3ZvaWQgMCE9PXQueGgmJihuLnhoPWUuYzJwKHQueGgpLG4ueHM9ZS5jMnAodC54cyksaShuLnhzKXx8KG4ubm9YUz0hMCxuLnhzPWUuYzJwKHQueHMsITApKSk7cmV0dXJuIG59KHQscyxsKTtpZighZHx8dC52aXMpe3ZhciBvLHU9ZS5zZWxlY3QoInBhdGgueWVycm9yIik7aWYocC52aXNpYmxlJiZpKGEueCkmJmkoYS55aCkmJmkoYS55cykpe3ZhciBoPXAud2lkdGg7bz0iTSIrKGEueC1oKSsiLCIrYS55aCsiaCIrMipoKyJtLSIraCsiLDBWIithLnlzLGEubm9ZU3x8KG8rPSJtLSIraCsiLDBoIisyKmgpLCF1LnNpemUoKT91PWUuYXBwZW5kKCJwYXRoIikuc3R5bGUoInZlY3Rvci1lZmZlY3QiLCJub24tc2NhbGluZy1zdHJva2UiKS5jbGFzc2VkKCJ5ZXJyb3IiLCEwKTpjJiYodT11LnRyYW5zaXRpb24oKS5kdXJhdGlvbihyLmR1cmF0aW9uKS5lYXNlKHIuZWFzaW5nKSksdS5hdHRyKCJkIixvKX1lbHNlIHUucmVtb3ZlKCk7dmFyIGc9ZS5zZWxlY3QoInBhdGgueGVycm9yIik7aWYoZi52aXNpYmxlJiZpKGEueSkmJmkoYS54aCkmJmkoYS54cykpe3ZhciBtPShmLmNvcHlfeXN0eWxlP3A6Zikud2lkdGg7bz0iTSIrYS54aCsiLCIrKGEueS1tKSsidiIrMiptKyJtMCwtIittKyJIIithLnhzLGEubm9YU3x8KG8rPSJtMCwtIittKyJ2IisyKm0pLCFnLnNpemUoKT9nPWUuYXBwZW5kKCJwYXRoIikuc3R5bGUoInZlY3Rvci1lZmZlY3QiLCJub24tc2NhbGluZy1zdHJva2UiKS5jbGFzc2VkKCJ4ZXJyb3IiLCEwKTpjJiYoZz1nLnRyYW5zaXRpb24oKS5kdXJhdGlvbihyLmR1cmF0aW9uKS5lYXNlKHIuZWFzaW5nKSksZy5hdHRyKCJkIixvKX1lbHNlIGcucmVtb3ZlKCl9fSl9fSl9fSx7Ii4uLy4uL3RyYWNlcy9zY2F0dGVyL3N1YnR5cGVzIjoxMDM3LCIuLi9kcmF3aW5nIjo1ODMsZDM6MTQ3LCJmYXN0LWlzbnVtZXJpYyI6MjE0fV0sNTkxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCIuLi9jb2xvciIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt0LmVhY2goZnVuY3Rpb24odCl7dmFyIGU9dFswXS50cmFjZSxyPWUuZXJyb3JfeXx8e30sYT1lLmVycm9yX3h8fHt9LG89bi5zZWxlY3QodGhpcyk7by5zZWxlY3RBbGwoInBhdGgueWVycm9yIikuc3R5bGUoInN0cm9rZS13aWR0aCIsci50aGlja25lc3MrInB4IikuY2FsbChpLnN0cm9rZSxyLmNvbG9yKSxhLmNvcHlfeXN0eWxlJiYoYT1yKSxvLnNlbGVjdEFsbCgicGF0aC54ZXJyb3IiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixhLnRoaWNrbmVzcysicHgiKS5jYWxsKGkuc3Ryb2tlLGEuY29sb3IpfSl9fSx7Ii4uL2NvbG9yIjo1NTgsZDM6MTQ3fV0sNTkyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpO2UuZXhwb3J0cz17aG92ZXJsYWJlbDp7Ymdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGFycmF5T2s6ITAsZWRpdFR5cGU6Im5vbmUifSxib3JkZXJjb2xvcjp7dmFsVHlwZToiY29sb3IiLGFycmF5T2s6ITAsZWRpdFR5cGU6Im5vbmUifSxmb250Om4oe2FycmF5T2s6ITAsZWRpdFR5cGU6Im5vbmUifSksbmFtZWxlbmd0aDp7dmFsVHlwZToiaW50ZWdlciIsbWluOi0xLGFycmF5T2s6ITAsZWRpdFR5cGU6Im5vbmUifSxlZGl0VHlwZToiY2FsYyJ9fX0seyIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjc1OH1dLDU5MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3JlZ2lzdHJ5Iik7ZnVuY3Rpb24gYSh0LGUscixpKXtpPWl8fG4uaWRlbnRpdHksQXJyYXkuaXNBcnJheSh0KSYmKGVbMF1bcl09aSh0KSl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuY2FsY2RhdGEscj10Ll9mdWxsTGF5b3V0O2Z1bmN0aW9uIG8odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBuLmNvZXJjZUhvdmVyaW5mbyh7aG92ZXJpbmZvOmV9LHtfbW9kdWxlOnQuX21vZHVsZX0scil9fWZvcih2YXIgcz0wO3M8ZS5sZW5ndGg7cysrKXt2YXIgbD1lW3NdLGM9bFswXS50cmFjZTtpZighaS50cmFjZUlzKGMsInBpZSIpKXt2YXIgdT1pLnRyYWNlSXMoYywiMmRNYXAiKT9hOm4uZmlsbEFycmF5O3UoYy5ob3ZlcmluZm8sbCwiaGkiLG8oYykpLGMuaG92ZXJsYWJlbCYmKHUoYy5ob3ZlcmxhYmVsLmJnY29sb3IsbCwiaGJnIiksdShjLmhvdmVybGFiZWwuYm9yZGVyY29sb3IsbCwiaGJjIiksdShjLmhvdmVybGFiZWwuZm9udC5zaXplLGwsImh0cyIpLHUoYy5ob3ZlcmxhYmVsLmZvbnQuY29sb3IsbCwiaHRjIiksdShjLmhvdmVybGFiZWwuZm9udC5mYW1pbHksbCwiaHRmIiksdShjLmhvdmVybGFiZWwubmFtZWxlbmd0aCxsLCJobmwiKSl9fX19LHsiLi4vLi4vbGliIjo2ODQsIi4uLy4uL3JlZ2lzdHJ5Ijo4MTd9XSw1OTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4vaG92ZXIiKS5ob3ZlcjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBhPW4uZ2V0Q29tcG9uZW50TWV0aG9kKCJhbm5vdGF0aW9ucyIsIm9uQ2xpY2siKSh0LHQuX2hvdmVyZGF0YSk7ZnVuY3Rpb24gbygpe3QuZW1pdCgicGxvdGx5X2NsaWNrIix7cG9pbnRzOnQuX2hvdmVyZGF0YSxldmVudDplfSl9dm9pZCAwIT09ciYmaSh0LGUsciwhMCksdC5faG92ZXJkYXRhJiZlJiZlLnRhcmdldCYmKGEmJmEudGhlbj9hLnRoZW4obyk6bygpLGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uJiZlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpKX19LHsiLi4vLi4vcmVnaXN0cnkiOjgxNywiLi9ob3ZlciI6NTk4fV0sNTk1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17WUFOR0xFOjYwLEhPVkVSQVJST1dTSVpFOjYsSE9WRVJURVhUUEFEOjMsSE9WRVJGT05UU0laRToxMyxIT1ZFUkZPTlQ6IkFyaWFsLCBzYW5zLXNlcmlmIixIT1ZFUk1JTlRJTUU6NTAsSE9WRVJJRDoiLWhvdmVyIn19LHt9XSw1OTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2F0dHJpYnV0ZXMiKSxhPXQoIi4vaG92ZXJsYWJlbF9kZWZhdWx0cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvKXthKHQsZSxmdW5jdGlvbihyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaSxyLGEpfSxvLmhvdmVybGFiZWwpfX0seyIuLi8uLi9saWIiOjY4NCwiLi9hdHRyaWJ1dGVzIjo1OTIsIi4vaG92ZXJsYWJlbF9kZWZhdWx0cyI6NTk5fV0sNTk3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpO3IuZ2V0U3VicGxvdD1mdW5jdGlvbih0KXtyZXR1cm4gdC5zdWJwbG90fHx0LnhheGlzK3QueWF4aXN8fHQuZ2VvfSxyLmlzVHJhY2VJblN1YnBsb3RzPWZ1bmN0aW9uKHQsZSl7aWYoInNwbG9tIj09PXQudHlwZSl7Zm9yKHZhciBuPXQueGF4ZXN8fFtdLGk9dC55YXhlc3x8W10sYT0wO2E8bi5sZW5ndGg7YSsrKWZvcih2YXIgbz0wO288aS5sZW5ndGg7bysrKWlmKC0xIT09ZS5pbmRleE9mKG5bYV0raVtvXSkpcmV0dXJuITA7cmV0dXJuITF9cmV0dXJuLTEhPT1lLmluZGV4T2Yoci5nZXRTdWJwbG90KHQpKX0sci5mbGF0PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheSh0Lmxlbmd0aCksbj0wO248dC5sZW5ndGg7bisrKXJbbl09ZTtyZXR1cm4gcn0sci5wMmM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KHQubGVuZ3RoKSxuPTA7bjx0Lmxlbmd0aDtuKyspcltuXT10W25dLnAyYyhlKTtyZXR1cm4gcn0sci5nZXREaXN0YW5jZUZ1bmN0aW9uPWZ1bmN0aW9uKHQsZSxuLGkpe3JldHVybiJjbG9zZXN0Ij09PXQ/aXx8ci5xdWFkcmF0dXJlKGUsbik6IngiPT09dD9lOm59LHIuZ2V0Q2xvc2VzdD1mdW5jdGlvbih0LGUscil7aWYoITEhPT1yLmluZGV4KXIuaW5kZXg+PTAmJnIuaW5kZXg8dC5sZW5ndGg/ci5kaXN0YW5jZT0wOnIuaW5kZXg9ITE7ZWxzZSBmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGk9ZSh0W25dKTtpPD1yLmRpc3RhbmNlJiYoci5pbmRleD1uLHIuZGlzdGFuY2U9aSl9cmV0dXJuIHJ9LHIuaW5ib3g9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0KmU8MHx8MD09PXQ/cjoxLzB9LHIucXVhZHJhdHVyZT1mdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbihyKXt2YXIgbj10KHIpLGk9ZShyKTtyZXR1cm4gTWF0aC5zcXJ0KG4qbitpKmkpfX0sci5tYWtlRXZlbnREYXRhPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT0iaW5kZXgiaW4gdD90LmluZGV4OnQucG9pbnROdW1iZXIsYT17ZGF0YTplLl9pbnB1dCxmdWxsRGF0YTplLGN1cnZlTnVtYmVyOmUuaW5kZXgscG9pbnROdW1iZXI6aX07aWYoZS5faW5kZXhUb1BvaW50cyl7dmFyIG89ZS5faW5kZXhUb1BvaW50c1tpXTsxPT09by5sZW5ndGg/YS5wb2ludEluZGV4PW9bMF06YS5wb2ludEluZGljZXM9b31lbHNlIGEucG9pbnRJbmRleD1pO3JldHVybiBlLl9tb2R1bGUuZXZlbnREYXRhP2E9ZS5fbW9kdWxlLmV2ZW50RGF0YShhLHQsZSxuLGkpOigieFZhbCJpbiB0P2EueD10LnhWYWw6IngiaW4gdCYmKGEueD10LngpLCJ5VmFsImluIHQ/YS55PXQueVZhbDoieSJpbiB0JiYoYS55PXQueSksdC54YSYmKGEueGF4aXM9dC54YSksdC55YSYmKGEueWF4aXM9dC55YSksdm9pZCAwIT09dC56TGFiZWxWYWwmJihhLno9dC56TGFiZWxWYWwpKSxyLmFwcGVuZEFycmF5UG9pbnRWYWx1ZShhLGUsaSksYX0sci5hcHBlbmRBcnJheVBvaW50VmFsdWU9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPWUuX2FycmF5QXR0cnM7aWYoaSlmb3IodmFyIHM9MDtzPGkubGVuZ3RoO3MrKyl7dmFyIGw9aVtzXSxjPWEobCk7aWYodm9pZCAwPT09dFtjXSl7dmFyIHU9byhuLm5lc3RlZFByb3BlcnR5KGUsbCkuZ2V0KCkscik7dm9pZCAwIT09dSYmKHRbY109dSl9fX0sci5hcHBlbmRBcnJheU11bHRpUG9pbnRWYWx1ZXM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPWUuX2FycmF5QXR0cnM7aWYoaSlmb3IodmFyIHM9MDtzPGkubGVuZ3RoO3MrKyl7dmFyIGw9aVtzXSxjPWEobCk7aWYodm9pZCAwPT09dFtjXSl7Zm9yKHZhciB1PW4ubmVzdGVkUHJvcGVydHkoZSxsKS5nZXQoKSxoPW5ldyBBcnJheShyLmxlbmd0aCksZj0wO2Y8ci5sZW5ndGg7ZisrKWhbZl09byh1LHJbZl0pO3RbY109aH19fTt2YXIgaT17aWRzOiJpZCIsbG9jYXRpb25zOiJsb2NhdGlvbiIsbGFiZWxzOiJsYWJlbCIsdmFsdWVzOiJ2YWx1ZSIsIm1hcmtlci5jb2xvcnMiOiJjb2xvciJ9O2Z1bmN0aW9uIGEodCl7cmV0dXJuIGlbdF18fHR9ZnVuY3Rpb24gbyh0LGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpP0FycmF5LmlzQXJyYXkodCkmJkFycmF5LmlzQXJyYXkodFtlWzBdXSk/dFtlWzBdXVtlWzFdXTp2b2lkIDA6dFtlXX19LHsiLi4vLi4vbGliIjo2ODR9XSw1OTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoImZhc3QtaXNudW1lcmljIiksYT10KCJ0aW55Y29sb3IyIiksbz10KCIuLi8uLi9saWIiKSxzPXQoIi4uLy4uL2xpYi9ldmVudHMiKSxsPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLGM9dCgiLi4vLi4vbGliL292ZXJyaWRlX2N1cnNvciIpLHU9dCgiLi4vZHJhd2luZyIpLGg9dCgiLi4vY29sb3IiKSxmPXQoIi4uL2RyYWdlbGVtZW50IikscD10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGQ9dCgiLi4vLi4vcmVnaXN0cnkiKSxnPXQoIi4vaGVscGVycyIpLG09dCgiLi9jb25zdGFudHMiKSx2PW0uWUFOR0xFLHk9TWF0aC5QSSp2LzE4MCx4PTEvTWF0aC5zaW4oeSksYj1NYXRoLmNvcyh5KSxfPU1hdGguc2luKHkpLHc9bS5IT1ZFUkFSUk9XU0laRSxrPW0uSE9WRVJURVhUUEFEO2Z1bmN0aW9uIE0odCxlLHIpe3ZhciBpPWUuaG92ZXJtb2RlLGE9ZS5yb3RhdGVMYWJlbHMscz1lLmJnQ29sb3IsYz1lLmNvbnRhaW5lcixmPWUub3V0ZXJDb250YWluZXIscD1lLmNvbW1vbkxhYmVsT3B0c3x8e30sZD1lLmZvbnRGYW1pbHl8fG0uSE9WRVJGT05ULGc9ZS5mb250U2l6ZXx8bS5IT1ZFUkZPTlRTSVpFLHk9dFswXSx4PXkueGEsYj15LnlhLF89InkiPT09aT8ieUxhYmVsIjoieExhYmVsIixNPXlbX10sQT0oU3RyaW5nKE0pfHwiIikuc3BsaXQoIiAiKVswXSxUPWYubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLFM9VC50b3AsRT1ULndpZHRoLEM9VC5oZWlnaHQsTD12b2lkIDAhPT1NJiZ5LmRpc3RhbmNlPD1lLmhvdmVyZGlzdGFuY2UmJigieCI9PT1pfHwieSI9PT1pKTtpZihMKXt2YXIgeixQLEk9ITA7Zm9yKHo9MDt6PHQubGVuZ3RoO3orKyl7SSYmdm9pZCAwPT09dFt6XS56TGFiZWwmJihJPSExKSxQPXRbel0uaG92ZXJpbmZvfHx0W3pdLnRyYWNlLmhvdmVyaW5mbzt2YXIgTz1BcnJheS5pc0FycmF5KFApP1A6UC5zcGxpdCgiKyIpO2lmKC0xPT09Ty5pbmRleE9mKCJhbGwiKSYmLTE9PT1PLmluZGV4T2YoaSkpe0w9ITE7YnJlYWt9fUkmJihMPSExKX12YXIgRD1jLnNlbGVjdEFsbCgiZy5heGlzdGV4dCIpLmRhdGEoTD9bMF06W10pO0QuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJheGlzdGV4dCIsITApLEQuZXhpdCgpLnJlbW92ZSgpLEQuZWFjaChmdW5jdGlvbigpe3ZhciBlPW4uc2VsZWN0KHRoaXMpLGE9by5lbnN1cmVTaW5nbGUoZSwicGF0aCIsIiIsZnVuY3Rpb24odCl7dC5zdHlsZSh7InN0cm9rZS13aWR0aCI6IjFweCJ9KX0pLHM9by5lbnN1cmVTaW5nbGUoZSwidGV4dCIsIiIsZnVuY3Rpb24odCl7dC5hdHRyKCJkYXRhLW5vdGV4IiwxKX0pLGM9cC5iZ2NvbG9yfHxoLmRlZmF1bHRMaW5lLGY9cC5ib3JkZXJjb2xvcnx8aC5jb250cmFzdChjKTthLnN0eWxlKHtmaWxsOmMsc3Ryb2tlOmZ9KSxzLnRleHQoTSkuY2FsbCh1LmZvbnQscC5mb250LmZhbWlseXx8ZCxwLmZvbnQuc2l6ZXx8ZyxwLmZvbnQuY29sb3J8fGguYmFja2dyb3VuZCkuY2FsbChsLnBvc2l0aW9uVGV4dCwwLDApLmNhbGwobC5jb252ZXJ0VG9Uc3BhbnMsciksZS5hdHRyKCJ0cmFuc2Zvcm0iLCIiKTt2YXIgbT1zLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZigieCI9PT1pKXtzLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuY2FsbChsLnBvc2l0aW9uVGV4dCwwLCJ0b3AiPT09eC5zaWRlP1MtbS5ib3R0b20tdy1rOlMtbS50b3ArdytrKTt2YXIgdj0idG9wIj09PXguc2lkZT8iLSI6IiI7YS5hdHRyKCJkIiwiTTAsMEwiK3crIiwiK3YrdysiSCIrKGsrbS53aWR0aC8yKSsidiIrdisoMiprK20uaGVpZ2h0KSsiSC0iKyhrK20ud2lkdGgvMikrIlYiK3YrdysiSC0iK3crIloiKSxlLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyh4Ll9vZmZzZXQrKHkueDAreS54MSkvMikrIiwiKyhiLl9vZmZzZXQrKCJ0b3AiPT09eC5zaWRlPzA6Yi5fbGVuZ3RoKSkrIikiKX1lbHNle3MuYXR0cigidGV4dC1hbmNob3IiLCJyaWdodCI9PT1iLnNpZGU/InN0YXJ0IjoiZW5kIikuY2FsbChsLnBvc2l0aW9uVGV4dCwoInJpZ2h0Ij09PWIuc2lkZT8xOi0xKSooayt3KSxTLW0udG9wLW0uaGVpZ2h0LzIpO3ZhciBUPSJyaWdodCI9PT1iLnNpZGU/IiI6Ii0iO2EuYXR0cigiZCIsIk0wLDBMIitUK3crIiwiK3crIlYiKyhrK20uaGVpZ2h0LzIpKyJoIitUKygyKmsrbS53aWR0aCkrIlYtIisoayttLmhlaWdodC8yKSsiSCIrVCt3KyJWLSIrdysiWiIpLGUuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKHguX29mZnNldCsoInJpZ2h0Ij09PWIuc2lkZT94Ll9sZW5ndGg6MCkpKyIsIisoYi5fb2Zmc2V0Kyh5LnkwK3kueTEpLzIpKyIpIil9dD10LmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwIT09dC56TGFiZWxWYWx8fCh0W19dfHwiIikuc3BsaXQoIiAiKVswXT09PUF9KX0pO3ZhciBSPWMuc2VsZWN0QWxsKCJnLmhvdmVydGV4dCIpLmRhdGEodCxmdW5jdGlvbih0KXtyZXR1cm5bdC50cmFjZS5pbmRleCx0LmluZGV4LHQueDAsdC55MCx0Lm5hbWUsdC5hdHRyLHQueGEsdC55YXx8IiJdLmpvaW4oIiwiKX0pO3JldHVybiBSLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiaG92ZXJ0ZXh0IiwhMCkuZWFjaChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpO3QuYXBwZW5kKCJyZWN0IikuY2FsbChoLmZpbGwsaC5hZGRPcGFjaXR5KHMsLjgpKSx0LmFwcGVuZCgidGV4dCIpLmNsYXNzZWQoIm5hbWUiLCEwKSx0LmFwcGVuZCgicGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLCIxcHgiKSx0LmFwcGVuZCgidGV4dCIpLmNsYXNzZWQoIm51bXMiLCEwKS5jYWxsKHUuZm9udCxkLGcpfSksUi5leGl0KCkucmVtb3ZlKCksUi5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHRoaXMpLmF0dHIoInRyYW5zZm9ybSIsIiIpLG89IiIsYz0iIixmPWgub3BhY2l0eSh0LmNvbG9yKT90LmNvbG9yOmguZGVmYXVsdExpbmUscD1oLmNvbWJpbmUoZixzKSxtPXQuYm9yZGVyQ29sb3J8fGguY29udHJhc3QocCk7aWYodm9pZCAwIT09dC5uYW1lT3ZlcnJpZGUmJih0Lm5hbWU9dC5uYW1lT3ZlcnJpZGUpLHQubmFtZSl7bz1sLnBsYWluVGV4dCh0Lm5hbWV8fCIiKTt2YXIgeT1NYXRoLnJvdW5kKHQubmFtZUxlbmd0aCk7eT4tMSYmby5sZW5ndGg+eSYmKG89eT4zP28uc3Vic3RyKDAseS0zKSsiLi4uIjpvLnN1YnN0cigwLHkpKX12b2lkIDAhPT10LnpMYWJlbD8odm9pZCAwIT09dC54TGFiZWwmJihjKz0ieDogIit0LnhMYWJlbCsiPGJyPiIpLHZvaWQgMCE9PXQueUxhYmVsJiYoYys9Ink6ICIrdC55TGFiZWwrIjxicj4iKSxjKz0oYz8iejogIjoiIikrdC56TGFiZWwpOkwmJnRbaSsiTGFiZWwiXT09PU0/Yz10WygieCI9PT1pPyJ5IjoieCIpKyJMYWJlbCJdfHwiIjp2b2lkIDA9PT10LnhMYWJlbD92b2lkIDAhPT10LnlMYWJlbCYmKGM9dC55TGFiZWwpOmM9dm9pZCAwPT09dC55TGFiZWw/dC54TGFiZWw6IigiK3QueExhYmVsKyIsICIrdC55TGFiZWwrIikiLCF0LnRleHQmJjAhPT10LnRleHR8fEFycmF5LmlzQXJyYXkodC50ZXh0KXx8KGMrPShjPyI8YnI+IjoiIikrdC50ZXh0KSx2b2lkIDAhPT10LmV4dHJhVGV4dCYmKGMrPShjPyI8YnI+IjoiIikrdC5leHRyYVRleHQpLCIiPT09YyYmKCIiPT09byYmZS5yZW1vdmUoKSxjPW8pO3ZhciB4PWUuc2VsZWN0KCJ0ZXh0Lm51bXMiKS5jYWxsKHUuZm9udCx0LmZvbnRGYW1pbHl8fGQsdC5mb250U2l6ZXx8Zyx0LmZvbnRDb2xvcnx8bSkudGV4dChjKS5hdHRyKCJkYXRhLW5vdGV4IiwxKS5jYWxsKGwucG9zaXRpb25UZXh0LDAsMCkuY2FsbChsLmNvbnZlcnRUb1RzcGFucyxyKSxiPWUuc2VsZWN0KCJ0ZXh0Lm5hbWUiKSxfPTA7byYmbyE9PWM/KGIuY2FsbCh1LmZvbnQsdC5mb250RmFtaWx5fHxkLHQuZm9udFNpemV8fGcscCkudGV4dChvKS5hdHRyKCJkYXRhLW5vdGV4IiwxKS5jYWxsKGwucG9zaXRpb25UZXh0LDAsMCkuY2FsbChsLmNvbnZlcnRUb1RzcGFucyxyKSxfPWIubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoKzIqayk6KGIucmVtb3ZlKCksZS5zZWxlY3QoInJlY3QiKS5yZW1vdmUoKSksZS5zZWxlY3QoInBhdGgiKS5zdHlsZSh7ZmlsbDpwLHN0cm9rZTptfSk7dmFyIEEsVCx6PXgubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLFA9dC54YS5fb2Zmc2V0Kyh0LngwK3QueDEpLzIsST10LnlhLl9vZmZzZXQrKHQueTArdC55MSkvMixPPU1hdGguYWJzKHQueDEtdC54MCksRD1NYXRoLmFicyh0LnkxLXQueTApLFI9ei53aWR0aCt3K2srXzt0LnR5MD1TLXoudG9wLHQuYng9ei53aWR0aCsyKmssdC5ieT16LmhlaWdodCsyKmssdC5hbmNob3I9InN0YXJ0Iix0LnR4d2lkdGg9ei53aWR0aCx0LnR4MndpZHRoPV8sdC5vZmZzZXQ9MCxhPyh0LnBvcz1QLEE9SStELzIrUjw9QyxUPUktRC8yLVI+PTAsInRvcCIhPT10LmlkZWFsQWxpZ24mJkF8fCFUP0E/KEkrPUQvMix0LmFuY2hvcj0ic3RhcnQiKTp0LmFuY2hvcj0ibWlkZGxlIjooSS09RC8yLHQuYW5jaG9yPSJlbmQiKSk6KHQucG9zPUksQT1QK08vMitSPD1FLFQ9UC1PLzItUj49MCwibGVmdCIhPT10LmlkZWFsQWxpZ24mJkF8fCFUP0E/KFArPU8vMix0LmFuY2hvcj0ic3RhcnQiKTp0LmFuY2hvcj0ibWlkZGxlIjooUC09Ty8yLHQuYW5jaG9yPSJlbmQiKSkseC5hdHRyKCJ0ZXh0LWFuY2hvciIsdC5hbmNob3IpLF8mJmIuYXR0cigidGV4dC1hbmNob3IiLHQuYW5jaG9yKSxlLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK1ArIiwiK0krIikiKyhhPyJyb3RhdGUoIit2KyIpIjoiIikpfSksUn1mdW5jdGlvbiBBKHQsZSl7dC5lYWNoKGZ1bmN0aW9uKHQpe3ZhciByPW4uc2VsZWN0KHRoaXMpO2lmKHQuZGVsKXIucmVtb3ZlKCk7ZWxzZXt2YXIgaT0iZW5kIj09PXQuYW5jaG9yPy0xOjEsYT1yLnNlbGVjdCgidGV4dC5udW1zIiksbz17c3RhcnQ6MSxlbmQ6LTEsbWlkZGxlOjB9W3QuYW5jaG9yXSxzPW8qKHcrayksYz1zK28qKHQudHh3aWR0aCtrKSxoPTAsZj10Lm9mZnNldDsibWlkZGxlIj09PXQuYW5jaG9yJiYocy09dC50eDJ3aWR0aC8yLGMrPXQudHh3aWR0aC8yK2spLGUmJihmKj0tXyxoPXQub2Zmc2V0KmIpLHIuc2VsZWN0KCJwYXRoIikuYXR0cigiZCIsIm1pZGRsZSI9PT10LmFuY2hvcj8iTS0iKyh0LmJ4LzIrdC50eDJ3aWR0aC8yKSsiLCIrKGYtdC5ieS8yKSsiaCIrdC5ieCsidiIrdC5ieSsiaC0iK3QuYngrIloiOiJNMCwwTCIrKGkqdytoKSsiLCIrKHcrZikrInYiKyh0LmJ5LzItdykrImgiK2kqdC5ieCsidi0iK3QuYnkrIkgiKyhpKncraCkrIlYiKyhmLXcpKyJaIiksYS5jYWxsKGwucG9zaXRpb25UZXh0LHMraCxmK3QudHkwLXQuYnkvMitrKSx0LnR4MndpZHRoJiYoci5zZWxlY3QoInRleHQubmFtZSIpLmNhbGwobC5wb3NpdGlvblRleHQsYytvKmsraCxmK3QudHkwLXQuYnkvMitrKSxyLnNlbGVjdCgicmVjdCIpLmNhbGwodS5zZXRSZWN0LGMrKG8tMSkqdC50eDJ3aWR0aC8yK2gsZi10LmJ5LzItMSx0LnR4MndpZHRoLHQuYnkrMikpfX0pfWZ1bmN0aW9uIFQodCxlKXt2YXIgcj10LmluZGV4LG49dC50cmFjZXx8e30saT10LmNkWzBdLGE9dC5jZFtyXXx8e30scz1BcnJheS5pc0FycmF5KHIpP2Z1bmN0aW9uKHQsZSl7cmV0dXJuIG8uY2FzdE9wdGlvbihpLHIsdCl8fG8uZXh0cmFjdE9wdGlvbih7fSxuLCIiLGUpfTpmdW5jdGlvbih0LGUpe3JldHVybiBvLmV4dHJhY3RPcHRpb24oYSxuLHQsZSl9O2Z1bmN0aW9uIGwoZSxyLG4pe3ZhciBpPXMocixuKTtpJiYodFtlXT1pKX1pZihsKCJob3ZlcmluZm8iLCJoaSIsImhvdmVyaW5mbyIpLGwoImNvbG9yIiwiaGJnIiwiaG92ZXJsYWJlbC5iZ2NvbG9yIiksbCgiYm9yZGVyQ29sb3IiLCJoYmMiLCJob3ZlcmxhYmVsLmJvcmRlcmNvbG9yIiksbCgiZm9udEZhbWlseSIsImh0ZiIsImhvdmVybGFiZWwuZm9udC5mYW1pbHkiKSxsKCJmb250U2l6ZSIsImh0cyIsImhvdmVybGFiZWwuZm9udC5zaXplIiksbCgiZm9udENvbG9yIiwiaHRjIiwiaG92ZXJsYWJlbC5mb250LmNvbG9yIiksbCgibmFtZUxlbmd0aCIsImhubCIsImhvdmVybGFiZWwubmFtZWxlbmd0aCIpLHQucG9zcmVmPSJ5Ij09PWU/dC54YS5fb2Zmc2V0Kyh0LngwK3QueDEpLzI6dC55YS5fb2Zmc2V0Kyh0LnkwK3QueTEpLzIsdC54MD1vLmNvbnN0cmFpbih0LngwLDAsdC54YS5fbGVuZ3RoKSx0LngxPW8uY29uc3RyYWluKHQueDEsMCx0LnhhLl9sZW5ndGgpLHQueTA9by5jb25zdHJhaW4odC55MCwwLHQueWEuX2xlbmd0aCksdC55MT1vLmNvbnN0cmFpbih0LnkxLDAsdC55YS5fbGVuZ3RoKSx2b2lkIDAhPT10LnhMYWJlbFZhbCYmKHQueExhYmVsPSJ4TGFiZWwiaW4gdD90LnhMYWJlbDpwLmhvdmVyTGFiZWxUZXh0KHQueGEsdC54TGFiZWxWYWwpLHQueFZhbD10LnhhLmMyZCh0LnhMYWJlbFZhbCkpLHZvaWQgMCE9PXQueUxhYmVsVmFsJiYodC55TGFiZWw9InlMYWJlbCJpbiB0P3QueUxhYmVsOnAuaG92ZXJMYWJlbFRleHQodC55YSx0LnlMYWJlbFZhbCksdC55VmFsPXQueWEuYzJkKHQueUxhYmVsVmFsKSksdm9pZCAwIT09dC56TGFiZWxWYWwmJnZvaWQgMD09PXQuekxhYmVsJiYodC56TGFiZWw9U3RyaW5nKHQuekxhYmVsVmFsKSksIShpc05hTih0LnhlcnIpfHwibG9nIj09PXQueGEudHlwZSYmdC54ZXJyPD0wKSl7dmFyIGM9cC50aWNrVGV4dCh0LnhhLHQueGEuYzJsKHQueGVyciksImhvdmVyIikudGV4dDt2b2lkIDAhPT10LnhlcnJuZWc/dC54TGFiZWwrPSIgKyIrYysiIC8gLSIrcC50aWNrVGV4dCh0LnhhLHQueGEuYzJsKHQueGVycm5lZyksImhvdmVyIikudGV4dDp0LnhMYWJlbCs9IiBceGIxICIrYywieCI9PT1lJiYodC5kaXN0YW5jZSs9MSl9aWYoIShpc05hTih0LnllcnIpfHwibG9nIj09PXQueWEudHlwZSYmdC55ZXJyPD0wKSl7dmFyIHU9cC50aWNrVGV4dCh0LnlhLHQueWEuYzJsKHQueWVyciksImhvdmVyIikudGV4dDt2b2lkIDAhPT10LnllcnJuZWc/dC55TGFiZWwrPSIgKyIrdSsiIC8gLSIrcC50aWNrVGV4dCh0LnlhLHQueWEuYzJsKHQueWVycm5lZyksImhvdmVyIikudGV4dDp0LnlMYWJlbCs9IiBceGIxICIrdSwieSI9PT1lJiYodC5kaXN0YW5jZSs9MSl9dmFyIGg9dC5ob3ZlcmluZm98fHQudHJhY2UuaG92ZXJpbmZvO3JldHVybiJhbGwiIT09aCYmKC0xPT09KGg9QXJyYXkuaXNBcnJheShoKT9oOmguc3BsaXQoIisiKSkuaW5kZXhPZigieCIpJiYodC54TGFiZWw9dm9pZCAwKSwtMT09PWguaW5kZXhPZigieSIpJiYodC55TGFiZWw9dm9pZCAwKSwtMT09PWguaW5kZXhPZigieiIpJiYodC56TGFiZWw9dm9pZCAwKSwtMT09PWguaW5kZXhPZigidGV4dCIpJiYodC50ZXh0PXZvaWQgMCksLTE9PT1oLmluZGV4T2YoIm5hbWUiKSYmKHQubmFtZT12b2lkIDApKSx0fWZ1bmN0aW9uIFModCxlKXt2YXIgcixuLGk9ZS5jb250YWluZXIsbz1lLmZ1bGxMYXlvdXQscz1lLmV2ZW50LGw9ISF0LmhMaW5lUG9pbnQsYz0hIXQudkxpbmVQb2ludDtpZihpLnNlbGVjdEFsbCgiLnNwaWtlbGluZSIpLnJlbW92ZSgpLGN8fGwpe3ZhciBmPWguY29tYmluZShvLnBsb3RfYmdjb2xvcixvLnBhcGVyX2JnY29sb3IpO2lmKGwpe3ZhciBwLGQsZz10LmhMaW5lUG9pbnQ7cj1nJiZnLnhhLCJjdXJzb3IiPT09KG49ZyYmZy55YSkuc3Bpa2VzbmFwPyhwPXMucG9pbnRlclgsZD1zLnBvaW50ZXJZKToocD1yLl9vZmZzZXQrZy54LGQ9bi5fb2Zmc2V0K2cueSk7dmFyIG0sdix5PWEucmVhZGFiaWxpdHkoZy5jb2xvcixmKTwxLjU/aC5jb250cmFzdChmKTpnLmNvbG9yLHg9bi5zcGlrZW1vZGUsYj1uLnNwaWtldGhpY2tuZXNzLF89bi5zcGlrZWNvbG9yfHx5LHc9bi5fYm91bmRpbmdCb3gsaz0ody5sZWZ0K3cucmlnaHQpLzI8cD93LnJpZ2h0OncubGVmdDstMT09PXguaW5kZXhPZigidG9heGlzIikmJi0xPT09eC5pbmRleE9mKCJhY3Jvc3MiKXx8KC0xIT09eC5pbmRleE9mKCJ0b2F4aXMiKSYmKG09ayx2PXApLC0xIT09eC5pbmRleE9mKCJhY3Jvc3MiKSYmKG09bi5fY291bnRlclNwYW5bMF0sdj1uLl9jb3VudGVyU3BhblsxXSksaS5pbnNlcnQoImxpbmUiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKHt4MTptLHgyOnYseTE6ZCx5MjpkLCJzdHJva2Utd2lkdGgiOmIsc3Ryb2tlOl8sInN0cm9rZS1kYXNoYXJyYXkiOnUuZGFzaFN0eWxlKG4uc3Bpa2VkYXNoLGIpfSkuY2xhc3NlZCgic3Bpa2VsaW5lIiwhMCkuY2xhc3NlZCgiY3Jpc3AiLCEwKSxpLmluc2VydCgibGluZSIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoe3gxOm0seDI6dix5MTpkLHkyOmQsInN0cm9rZS13aWR0aCI6YisyLHN0cm9rZTpmfSkuY2xhc3NlZCgic3Bpa2VsaW5lIiwhMCkuY2xhc3NlZCgiY3Jpc3AiLCEwKSksLTEhPT14LmluZGV4T2YoIm1hcmtlciIpJiZpLmluc2VydCgiY2lyY2xlIiwiOmZpcnN0LWNoaWxkIikuYXR0cih7Y3g6aysoInJpZ2h0IiE9PW4uc2lkZT9iOi1iKSxjeTpkLHI6YixmaWxsOl99KS5jbGFzc2VkKCJzcGlrZWxpbmUiLCEwKX1pZihjKXt2YXIgTSxBLFQ9dC52TGluZVBvaW50O3I9VCYmVC54YSxuPVQmJlQueWEsImN1cnNvciI9PT1yLnNwaWtlc25hcD8oTT1zLnBvaW50ZXJYLEE9cy5wb2ludGVyWSk6KE09ci5fb2Zmc2V0K1QueCxBPW4uX29mZnNldCtULnkpO3ZhciBTLEUsQz1hLnJlYWRhYmlsaXR5KFQuY29sb3IsZik8MS41P2guY29udHJhc3QoZik6VC5jb2xvcixMPXIuc3Bpa2Vtb2RlLHo9ci5zcGlrZXRoaWNrbmVzcyxQPXIuc3Bpa2Vjb2xvcnx8QyxJPXIuX2JvdW5kaW5nQm94LE89KEkudG9wK0kuYm90dG9tKS8yPEE/SS5ib3R0b206SS50b3A7LTE9PT1MLmluZGV4T2YoInRvYXhpcyIpJiYtMT09PUwuaW5kZXhPZigiYWNyb3NzIil8fCgtMSE9PUwuaW5kZXhPZigidG9heGlzIikmJihTPU8sRT1BKSwtMSE9PUwuaW5kZXhPZigiYWNyb3NzIikmJihTPXIuX2NvdW50ZXJTcGFuWzBdLEU9ci5fY291bnRlclNwYW5bMV0pLGkuaW5zZXJ0KCJsaW5lIiwiOmZpcnN0LWNoaWxkIikuYXR0cih7eDE6TSx4MjpNLHkxOlMseTI6RSwic3Ryb2tlLXdpZHRoIjp6LHN0cm9rZTpQLCJzdHJva2UtZGFzaGFycmF5Ijp1LmRhc2hTdHlsZShyLnNwaWtlZGFzaCx6KX0pLmNsYXNzZWQoInNwaWtlbGluZSIsITApLmNsYXNzZWQoImNyaXNwIiwhMCksaS5pbnNlcnQoImxpbmUiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKHt4MTpNLHgyOk0seTE6Uyx5MjpFLCJzdHJva2Utd2lkdGgiOnorMixzdHJva2U6Zn0pLmNsYXNzZWQoInNwaWtlbGluZSIsITApLmNsYXNzZWQoImNyaXNwIiwhMCkpLC0xIT09TC5pbmRleE9mKCJtYXJrZXIiKSYmaS5pbnNlcnQoImNpcmNsZSIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoe2N4Ok0sY3k6Ty0oInRvcCIhPT1yLnNpZGU/ejoteikscjp6LGZpbGw6UH0pLmNsYXNzZWQoInNwaWtlbGluZSIsITApfX19ZnVuY3Rpb24gRSh0LGUpe3JldHVybiFlfHwoZS52TGluZVBvaW50IT09dC5fc3Bpa2Vwb2ludHMudkxpbmVQb2ludHx8ZS5oTGluZVBvaW50IT09dC5fc3Bpa2Vwb2ludHMuaExpbmVQb2ludCl9ci5ob3Zlcj1mdW5jdGlvbih0LGUscixhKXt0PW8uZ2V0R3JhcGhEaXYodCksby50aHJvdHRsZSh0Ll9mdWxsTGF5b3V0Ll91aWQrbS5IT1ZFUklELG0uSE9WRVJNSU5USU1FLGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHQsZSxyLGEpe3J8fChyPSJ4eSIpO3ZhciBsPUFycmF5LmlzQXJyYXkocik/cjpbcl0sdT10Ll9mdWxsTGF5b3V0LG09dS5fcGxvdHN8fFtdLHY9bVtyXSx5PXUuX2hhcygiY2FydGVzaWFuIik7aWYodil7dmFyIGI9di5vdmVybGF5cy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuaWR9KTtsPWwuY29uY2F0KGIpfWZvcih2YXIgXz1sLmxlbmd0aCx3PW5ldyBBcnJheShfKSxrPW5ldyBBcnJheShfKSxDPSExLEw9MDtMPF87TCsrKXt2YXIgej1sW0xdLFA9bVt6XTtpZihQKUM9ITAsd1tMXT1wLmdldEZyb21JZCh0LFAueGF4aXMuX2lkKSxrW0xdPXAuZ2V0RnJvbUlkKHQsUC55YXhpcy5faWQpO2Vsc2V7dmFyIEk9dVt6XS5fc3VicGxvdDt3W0xdPUkueGF4aXMsa1tMXT1JLnlheGlzfX12YXIgTz1lLmhvdmVybW9kZXx8dS5ob3Zlcm1vZGU7TyYmIUMmJihPPSJjbG9zZXN0Iik7aWYoLTE9PT1bIngiLCJ5IiwiY2xvc2VzdCJdLmluZGV4T2YoTyl8fCF0LmNhbGNkYXRhfHx0LnF1ZXJ5U2VsZWN0b3IoIi56b29tYm94Iil8fHQuX2RyYWdnaW5nKXJldHVybiBmLnVuaG92ZXJSYXcodCxlKTt2YXIgRCxSLEIsRixOLGosVixVLHEsSCxHLFcsWSxYPS0xPT09dS5ob3ZlcmRpc3RhbmNlPzEvMDp1LmhvdmVyZGlzdGFuY2UsWj0tMT09PXUuc3Bpa2VkaXN0YW5jZT8xLzA6dS5zcGlrZWRpc3RhbmNlLCQ9W10sSj1bXSxLPXtoTGluZVBvaW50Om51bGwsdkxpbmVQb2ludDpudWxsfTtpZihBcnJheS5pc0FycmF5KGUpKWZvcihPPSJhcnJheSIsQj0wO0I8ZS5sZW5ndGg7QisrKSJza2lwIiE9PShOPXQuY2FsY2RhdGFbZVtCXS5jdXJ2ZU51bWJlcnx8MF0pWzBdLnRyYWNlLmhvdmVyaW5mbyYmSi5wdXNoKE4pO2Vsc2V7Zm9yKEY9MDtGPHQuY2FsY2RhdGEubGVuZ3RoO0YrKylOPXQuY2FsY2RhdGFbRl0sInNraXAiIT09KGo9TlswXS50cmFjZSkuaG92ZXJpbmZvJiZnLmlzVHJhY2VJblN1YnBsb3RzKGosbCkmJkoucHVzaChOKTt2YXIgUSx0dCxldD0hZS50YXJnZXQ7aWYoZXQpUT0ieHB4ImluIGU/ZS54cHg6d1swXS5fbGVuZ3RoLzIsdHQ9InlweCJpbiBlP2UueXB4OmtbMF0uX2xlbmd0aC8yO2Vsc2V7aWYoITE9PT1zLnRyaWdnZXJIYW5kbGVyKHQsInBsb3RseV9iZWZvcmVob3ZlciIsZSkpcmV0dXJuO3ZhciBydD1lLnRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZihRPWUuY2xpZW50WC1ydC5sZWZ0LHR0PWUuY2xpZW50WS1ydC50b3AsUTwwfHxRPndbMF0uX2xlbmd0aHx8dHQ8MHx8dHQ+a1swXS5fbGVuZ3RoKXJldHVybiBmLnVuaG92ZXJSYXcodCxlKX1pZihlLnBvaW50ZXJYPVErd1swXS5fb2Zmc2V0LGUucG9pbnRlclk9dHQra1swXS5fb2Zmc2V0LEQ9Inh2YWwiaW4gZT9nLmZsYXQobCxlLnh2YWwpOmcucDJjKHcsUSksUj0ieXZhbCJpbiBlP2cuZmxhdChsLGUueXZhbCk6Zy5wMmMoayx0dCksIWkoRFswXSl8fCFpKFJbMF0pKXJldHVybiBvLndhcm4oIkZ4LmhvdmVyIGZhaWxlZCIsZSx0KSxmLnVuaG92ZXJSYXcodCxlKX12YXIgbnQ9MS8wO2ZvcihGPTA7RjxKLmxlbmd0aDtGKyspaWYoKE49SltGXSkmJk5bMF0mJk5bMF0udHJhY2UmJiEwPT09TlswXS50cmFjZS52aXNpYmxlJiYoaj1OWzBdLnRyYWNlLC0xPT09WyJjYXJwZXQiLCJjb250b3VyY2FycGV0Il0uaW5kZXhPZihqLl9tb2R1bGUubmFtZSkpKXtpZigic3Bsb20iPT09ai50eXBlP1Y9bFtVPTBdOihWPWcuZ2V0U3VicGxvdChqKSxVPWwuaW5kZXhPZihWKSkscT1PLFc9e2NkOk4sdHJhY2U6aix4YTp3W1VdLHlhOmtbVV0sbWF4SG92ZXJEaXN0YW5jZTpYLG1heFNwaWtlRGlzdGFuY2U6WixpbmRleDohMSxkaXN0YW5jZTpNYXRoLm1pbihudCxYKSxzcGlrZURpc3RhbmNlOjEvMCx4U3Bpa2U6dm9pZCAwLHlTcGlrZTp2b2lkIDAsY29sb3I6aC5kZWZhdWx0TGluZSxuYW1lOmoubmFtZSx4MDp2b2lkIDAseDE6dm9pZCAwLHkwOnZvaWQgMCx5MTp2b2lkIDAseExhYmVsVmFsOnZvaWQgMCx5TGFiZWxWYWw6dm9pZCAwLHpMYWJlbFZhbDp2b2lkIDAsdGV4dDp2b2lkIDB9LHVbVl0mJihXLnN1YnBsb3Q9dVtWXS5fc3VicGxvdCksWT0kLmxlbmd0aCwiYXJyYXkiPT09cSl7dmFyIGl0PWVbRl07InBvaW50TnVtYmVyImluIGl0PyhXLmluZGV4PWl0LnBvaW50TnVtYmVyLHE9ImNsb3Nlc3QiKToocT0iIiwieHZhbCJpbiBpdCYmKEg9aXQueHZhbCxxPSJ4IiksInl2YWwiaW4gaXQmJihHPWl0Lnl2YWwscT1xPyJjbG9zZXN0IjoieSIpKX1lbHNlIEg9RFtVXSxHPVJbVV07aWYoMCE9PVgpaWYoai5fbW9kdWxlJiZqLl9tb2R1bGUuaG92ZXJQb2ludHMpe3ZhciBhdD1qLl9tb2R1bGUuaG92ZXJQb2ludHMoVyxILEcscSx1Ll9ob3ZlcmxheWVyKTtpZihhdClmb3IodmFyIG90LHN0PTA7c3Q8YXQubGVuZ3RoO3N0Kyspb3Q9YXRbc3RdLGkob3QueDApJiZpKG90LnkwKSYmJC5wdXNoKFQob3QsTykpfWVsc2Ugby5sb2coIlVucmVjb2duaXplZCB0cmFjZSB0eXBlIGluIGhvdmVyOiIsaik7aWYoImNsb3Nlc3QiPT09TyYmJC5sZW5ndGg+WSYmKCQuc3BsaWNlKDAsWSksbnQ9JFswXS5kaXN0YW5jZSkseSYmMCE9PVomJjA9PT0kLmxlbmd0aCl7Vy5kaXN0YW5jZT1aLFcuaW5kZXg9ITE7dmFyIGx0PWouX21vZHVsZS5ob3ZlclBvaW50cyhXLEgsRywiY2xvc2VzdCIsdS5faG92ZXJsYXllcik7aWYobHQmJihsdD1sdC5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQuc3Bpa2VEaXN0YW5jZTw9Wn0pKSxsdCYmbHQubGVuZ3RoKXt2YXIgY3QsdXQ9bHQuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LnhhLnNob3dzcGlrZXN9KTtpZih1dC5sZW5ndGgpe3ZhciBodD11dFswXTtpKGh0LngwKSYmaShodC55MCkmJihjdD1ndChodCksKCFLLnZMaW5lUG9pbnR8fEsudkxpbmVQb2ludC5zcGlrZURpc3RhbmNlPmN0LnNwaWtlRGlzdGFuY2UpJiYoSy52TGluZVBvaW50PWN0KSl9dmFyIGZ0PWx0LmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC55YS5zaG93c3Bpa2VzfSk7aWYoZnQubGVuZ3RoKXt2YXIgcHQ9ZnRbMF07aShwdC54MCkmJmkocHQueTApJiYoY3Q9Z3QocHQpLCghSy5oTGluZVBvaW50fHxLLmhMaW5lUG9pbnQuc3Bpa2VEaXN0YW5jZT5jdC5zcGlrZURpc3RhbmNlKSYmKEsuaExpbmVQb2ludD1jdCkpfX19fWZ1bmN0aW9uIGR0KHQsZSl7Zm9yKHZhciByLG49bnVsbCxpPTEvMCxhPTA7YTx0Lmxlbmd0aDthKyspKHI9dFthXS5zcGlrZURpc3RhbmNlKTxpJiZyPD1lJiYobj10W2FdLGk9cik7cmV0dXJuIG59ZnVuY3Rpb24gZ3QodCl7cmV0dXJuIHQ/e3hhOnQueGEseWE6dC55YSx4OnZvaWQgMCE9PXQueFNwaWtlP3QueFNwaWtlOih0LngwK3QueDEpLzIseTp2b2lkIDAhPT10LnlTcGlrZT90LnlTcGlrZToodC55MCt0LnkxKS8yLGRpc3RhbmNlOnQuZGlzdGFuY2Usc3Bpa2VEaXN0YW5jZTp0LnNwaWtlRGlzdGFuY2UsY3VydmVOdW1iZXI6dC50cmFjZS5pbmRleCxjb2xvcjp0LmNvbG9yLHBvaW50TnVtYmVyOnQuaW5kZXh9Om51bGx9dmFyIG10PXtmdWxsTGF5b3V0OnUsY29udGFpbmVyOnUuX2hvdmVybGF5ZXIsb3V0ZXJDb250YWluZXI6dS5fcGFwZXJkaXYsZXZlbnQ6ZX0sdnQ9dC5fc3Bpa2Vwb2ludHMseXQ9e3ZMaW5lUG9pbnQ6Sy52TGluZVBvaW50LGhMaW5lUG9pbnQ6Sy5oTGluZVBvaW50fTtpZih0Ll9zcGlrZXBvaW50cz15dCx5JiYwIT09WiYmMCE9PSQubGVuZ3RoKXt2YXIgeHQ9JC5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQueWEuc2hvd3NwaWtlc30pLGJ0PWR0KHh0LFopO0suaExpbmVQb2ludD1ndChidCk7dmFyIF90PSQuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LnhhLnNob3dzcGlrZXN9KSx3dD1kdChfdCxaKTtLLnZMaW5lUG9pbnQ9Z3Qod3QpfWlmKDA9PT0kLmxlbmd0aCl7dmFyIGt0PWYudW5ob3ZlclJhdyh0LGUpO3JldHVybiF5fHxudWxsPT09Sy5oTGluZVBvaW50JiZudWxsPT09Sy52TGluZVBvaW50fHxFKHZ0KSYmUyhLLG10KSxrdH15JiZFKHZ0KSYmUyhLLG10KTskLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5kaXN0YW5jZS1lLmRpc3RhbmNlfSk7dmFyIE10PXQuX2hvdmVyZGF0YSxBdD1bXTtmb3IoQj0wO0I8JC5sZW5ndGg7QisrKXt2YXIgVHQ9JFtCXTtBdC5wdXNoKGcubWFrZUV2ZW50RGF0YShUdCxUdC50cmFjZSxUdC5jZCkpfXQuX2hvdmVyZGF0YT1BdDt2YXIgU3Q9InkiPT09TyYmSi5sZW5ndGg+MSxFdD1oLmNvbWJpbmUodS5wbG90X2JnY29sb3J8fGguYmFja2dyb3VuZCx1LnBhcGVyX2JnY29sb3IpLEN0PXtob3Zlcm1vZGU6Tyxyb3RhdGVMYWJlbHM6U3QsYmdDb2xvcjpFdCxjb250YWluZXI6dS5faG92ZXJsYXllcixvdXRlckNvbnRhaW5lcjp1Ll9wYXBlcmRpdixjb21tb25MYWJlbE9wdHM6dS5ob3ZlcmxhYmVsLGhvdmVyZGlzdGFuY2U6dS5ob3ZlcmRpc3RhbmNlfSxMdD1NKCQsQ3QsdCk7aWYoZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYSxvLHMsbCxjLHU9MCxoPXQubWFwKGZ1bmN0aW9uKHQsbil7dmFyIGk9dFtlXTtyZXR1cm5be2k6bixkcDowLHBvczp0LnBvcyxwb3NyZWY6dC5wb3NyZWYsc2l6ZTp0LmJ5KigieCI9PT1pLl9pZC5jaGFyQXQoMCk/eDoxKS8yLHBtaW46MCxwbWF4OiJ4Ij09PWkuX2lkLmNoYXJBdCgwKT9yLndpZHRoOnIuaGVpZ2h0fV19KS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF0ucG9zcmVmLWVbMF0ucG9zcmVmfSk7ZnVuY3Rpb24gZih0KXt2YXIgZT10WzBdLHI9dFt0Lmxlbmd0aC0xXTtpZihpPWUucG1pbi1lLnBvcy1lLmRwK2Uuc2l6ZSxhPXIucG9zK3IuZHArci5zaXplLWUucG1heCxpPi4wMSl7Zm9yKHM9dC5sZW5ndGgtMTtzPj0wO3MtLSl0W3NdLmRwKz1pO249ITF9aWYoIShhPC4wMSkpe2lmKGk8LS4wMSl7Zm9yKHM9dC5sZW5ndGgtMTtzPj0wO3MtLSl0W3NdLmRwLT1hO249ITF9aWYobil7dmFyIGM9MDtmb3Iobz0wO288dC5sZW5ndGg7bysrKShsPXRbb10pLnBvcytsLmRwK2wuc2l6ZT5lLnBtYXgmJmMrKztmb3Iobz10Lmxlbmd0aC0xO28+PTAmJiEoYzw9MCk7by0tKShsPXRbb10pLnBvcz5lLnBtYXgtMSYmKGwuZGVsPSEwLGMtLSk7Zm9yKG89MDtvPHQubGVuZ3RoJiYhKGM8PTApO28rKylpZigobD10W29dKS5wb3M8ZS5wbWluKzEpZm9yKGwuZGVsPSEwLGMtLSxhPTIqbC5zaXplLHM9dC5sZW5ndGgtMTtzPj0wO3MtLSl0W3NdLmRwLT1hO2ZvcihvPXQubGVuZ3RoLTE7bz49MCYmIShjPD0wKTtvLS0pKGw9dFtvXSkucG9zK2wuZHArbC5zaXplPmUucG1heCYmKGwuZGVsPSEwLGMtLSl9fX1mb3IoOyFuJiZ1PD10Lmxlbmd0aDspe2Zvcih1Kyssbj0hMCxvPTA7bzxoLmxlbmd0aC0xOyl7dmFyIHA9aFtvXSxkPWhbbysxXSxnPXBbcC5sZW5ndGgtMV0sbT1kWzBdO2lmKChpPWcucG9zK2cuZHArZy5zaXplLW0ucG9zLW0uZHArbS5zaXplKT4uMDEmJmcucG1pbj09PW0ucG1pbiYmZy5wbWF4PT09bS5wbWF4KXtmb3Iocz1kLmxlbmd0aC0xO3M+PTA7cy0tKWRbc10uZHArPWk7Zm9yKHAucHVzaC5hcHBseShwLGQpLGguc3BsaWNlKG8rMSwxKSxjPTAscz1wLmxlbmd0aC0xO3M+PTA7cy0tKWMrPXBbc10uZHA7Zm9yKGE9Yy9wLmxlbmd0aCxzPXAubGVuZ3RoLTE7cz49MDtzLS0pcFtzXS5kcC09YTtuPSExfWVsc2UgbysrfWguZm9yRWFjaChmKX1mb3Iobz1oLmxlbmd0aC0xO28+PTA7by0tKXt2YXIgdj1oW29dO2ZvcihzPXYubGVuZ3RoLTE7cz49MDtzLS0pe3ZhciB5PXZbc10sYj10W3kuaV07Yi5vZmZzZXQ9eS5kcCxiLmRlbD15LmRlbH19fSgkLFN0PyJ4YSI6InlhIix1KSxBKEx0LFN0KSxlLnRhcmdldCYmZS50YXJnZXQudGFnTmFtZSl7dmFyIHp0PWQuZ2V0Q29tcG9uZW50TWV0aG9kKCJhbm5vdGF0aW9ucyIsImhhc0NsaWNrVG9TaG93IikodCxBdCk7YyhuLnNlbGVjdChlLnRhcmdldCksenQ/InBvaW50ZXIiOiIiKX1pZighZS50YXJnZXR8fGF8fCFmdW5jdGlvbih0LGUscil7aWYoIXJ8fHIubGVuZ3RoIT09dC5faG92ZXJkYXRhLmxlbmd0aClyZXR1cm4hMDtmb3IodmFyIG49ci5sZW5ndGgtMTtuPj0wO24tLSl7dmFyIGk9cltuXSxhPXQuX2hvdmVyZGF0YVtuXTtpZihpLmN1cnZlTnVtYmVyIT09YS5jdXJ2ZU51bWJlcnx8U3RyaW5nKGkucG9pbnROdW1iZXIpIT09U3RyaW5nKGEucG9pbnROdW1iZXIpKXJldHVybiEwfXJldHVybiExfSh0LDAsTXQpKXJldHVybjtNdCYmdC5lbWl0KCJwbG90bHlfdW5ob3ZlciIse2V2ZW50OmUscG9pbnRzOk10fSk7dC5lbWl0KCJwbG90bHlfaG92ZXIiLHtldmVudDplLHBvaW50czp0Ll9ob3ZlcmRhdGEseGF4ZXM6dyx5YXhlczprLHh2YWxzOkQseXZhbHM6Un0pfSh0LGUscixhKX0pfSxyLmxvbmVIb3Zlcj1mdW5jdGlvbih0LGUpe3ZhciByPXtjb2xvcjp0LmNvbG9yfHxoLmRlZmF1bHRMaW5lLHgwOnQueDB8fHQueHx8MCx4MTp0LngxfHx0Lnh8fDAseTA6dC55MHx8dC55fHwwLHkxOnQueTF8fHQueXx8MCx4TGFiZWw6dC54TGFiZWwseUxhYmVsOnQueUxhYmVsLHpMYWJlbDp0LnpMYWJlbCx0ZXh0OnQudGV4dCxuYW1lOnQubmFtZSxpZGVhbEFsaWduOnQuaWRlYWxBbGlnbixib3JkZXJDb2xvcjp0LmJvcmRlckNvbG9yLGZvbnRGYW1pbHk6dC5mb250RmFtaWx5LGZvbnRTaXplOnQuZm9udFNpemUsZm9udENvbG9yOnQuZm9udENvbG9yLHRyYWNlOntpbmRleDowLGhvdmVyaW5mbzoiIn0seGE6e19vZmZzZXQ6MH0seWE6e19vZmZzZXQ6MH0saW5kZXg6MH0saT1uLnNlbGVjdChlLmNvbnRhaW5lciksYT1lLm91dGVyQ29udGFpbmVyP24uc2VsZWN0KGUub3V0ZXJDb250YWluZXIpOmksbz17aG92ZXJtb2RlOiJjbG9zZXN0Iixyb3RhdGVMYWJlbHM6ITEsYmdDb2xvcjplLmJnQ29sb3J8fGguYmFja2dyb3VuZCxjb250YWluZXI6aSxvdXRlckNvbnRhaW5lcjphfSxzPU0oW3JdLG8sZS5nZCk7cmV0dXJuIEEocyxvLnJvdGF0ZUxhYmVscykscy5ub2RlKCl9fSx7Ii4uLy4uL2xpYiI6Njg0LCIuLi8uLi9saWIvZXZlbnRzIjo2NzIsIi4uLy4uL2xpYi9vdmVycmlkZV9jdXJzb3IiOjY5NSwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo3MDgsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3MzIsIi4uLy4uL3JlZ2lzdHJ5Ijo4MTcsIi4uL2NvbG9yIjo1NTgsIi4uL2RyYWdlbGVtZW50Ijo1ODAsIi4uL2RyYXdpbmciOjU4MywiLi9jb25zdGFudHMiOjU5NSwiLi9oZWxwZXJzIjo1OTcsZDM6MTQ3LCJmYXN0LWlzbnVtZXJpYyI6MjE0LHRpbnljb2xvcjI6NDk5fV0sNTk5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpKXtyKCJob3ZlcmxhYmVsLmJnY29sb3IiLChpPWl8fHt9KS5iZ2NvbG9yKSxyKCJob3ZlcmxhYmVsLmJvcmRlcmNvbG9yIixpLmJvcmRlcmNvbG9yKSxyKCJob3ZlcmxhYmVsLm5hbWVsZW5ndGgiLGkubmFtZWxlbmd0aCksbi5jb2VyY2VGb250KHIsImhvdmVybGFiZWwuZm9udCIsaS5mb250KX19LHsiLi4vLi4vbGliIjo2ODR9XSw2MDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vZHJhZ2VsZW1lbnQiKSxvPXQoIi4vaGVscGVycyIpLHM9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpO2UuZXhwb3J0cz17bW9kdWxlVHlwZToiY29tcG9uZW50IixuYW1lOiJmeCIsY29uc3RhbnRzOnQoIi4vY29uc3RhbnRzIiksc2NoZW1hOntsYXlvdXQ6c30sYXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxsYXlvdXRBdHRyaWJ1dGVzOnMsc3VwcGx5TGF5b3V0R2xvYmFsRGVmYXVsdHM6dCgiLi9sYXlvdXRfZ2xvYmFsX2RlZmF1bHRzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLHN1cHBseUxheW91dERlZmF1bHRzOnQoIi4vbGF5b3V0X2RlZmF1bHRzIiksY2FsYzp0KCIuL2NhbGMiKSxnZXREaXN0YW5jZUZ1bmN0aW9uOm8uZ2V0RGlzdGFuY2VGdW5jdGlvbixnZXRDbG9zZXN0Om8uZ2V0Q2xvc2VzdCxpbmJveDpvLmluYm94LHF1YWRyYXR1cmU6by5xdWFkcmF0dXJlLGFwcGVuZEFycmF5UG9pbnRWYWx1ZTpvLmFwcGVuZEFycmF5UG9pbnRWYWx1ZSxjYXN0SG92ZXJPcHRpb246ZnVuY3Rpb24odCxlLHIpe3JldHVybiBpLmNhc3RPcHRpb24odCxlLCJob3ZlcmxhYmVsLiIrcil9LGNhc3RIb3ZlcmluZm86ZnVuY3Rpb24odCxlLHIpe3JldHVybiBpLmNhc3RPcHRpb24odCxyLCJob3ZlcmluZm8iLGZ1bmN0aW9uKHIpe3JldHVybiBpLmNvZXJjZUhvdmVyaW5mbyh7aG92ZXJpbmZvOnJ9LHtfbW9kdWxlOnQuX21vZHVsZX0sZSl9KX0saG92ZXI6dCgiLi9ob3ZlciIpLmhvdmVyLHVuaG92ZXI6YS51bmhvdmVyLGxvbmVIb3Zlcjp0KCIuL2hvdmVyIikubG9uZUhvdmVyLGxvbmVVbmhvdmVyOmZ1bmN0aW9uKHQpe3ZhciBlPWkuaXNEM1NlbGVjdGlvbih0KT90Om4uc2VsZWN0KHQpO2Uuc2VsZWN0QWxsKCJnLmhvdmVydGV4dCIpLnJlbW92ZSgpLGUuc2VsZWN0QWxsKCIuc3Bpa2VsaW5lIikucmVtb3ZlKCl9LGNsaWNrOnQoIi4vY2xpY2siKX19LHsiLi4vLi4vbGliIjo2ODQsIi4uL2RyYWdlbGVtZW50Ijo1ODAsIi4vYXR0cmlidXRlcyI6NTkyLCIuL2NhbGMiOjU5MywiLi9jbGljayI6NTk0LCIuL2NvbnN0YW50cyI6NTk1LCIuL2RlZmF1bHRzIjo1OTYsIi4vaGVscGVycyI6NTk3LCIuL2hvdmVyIjo1OTgsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjYwMSwiLi9sYXlvdXRfZGVmYXVsdHMiOjYwMiwiLi9sYXlvdXRfZ2xvYmFsX2RlZmF1bHRzIjo2MDMsZDM6MTQ3fV0sNjAxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vY29uc3RhbnRzIiksaT10KCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKSh7ZWRpdFR5cGU6Im5vbmUifSk7aS5mYW1pbHkuZGZsdD1uLkhPVkVSRk9OVCxpLnNpemUuZGZsdD1uLkhPVkVSRk9OVFNJWkUsZS5leHBvcnRzPXtkcmFnbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiem9vbSIsInBhbiIsInNlbGVjdCIsImxhc3NvIiwib3JiaXQiLCJ0dXJudGFibGUiXSxkZmx0OiJ6b29tIixlZGl0VHlwZToibW9kZWJhciJ9LGhvdmVybW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsieCIsInkiLCJjbG9zZXN0IiwhMV0sZWRpdFR5cGU6Im1vZGViYXIifSxob3ZlcmRpc3RhbmNlOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46LTEsZGZsdDoyMCxlZGl0VHlwZToibm9uZSJ9LHNwaWtlZGlzdGFuY2U6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjotMSxkZmx0OjIwLGVkaXRUeXBlOiJub25lIn0saG92ZXJsYWJlbDp7Ymdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJub25lIn0sYm9yZGVyY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToibm9uZSJ9LGZvbnQ6aSxuYW1lbGVuZ3RoOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46LTEsZGZsdDoxNSxlZGl0VHlwZToibm9uZSJ9LGVkaXRUeXBlOiJub25lIn0sc2VsZWN0ZGlyZWN0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJoIiwidiIsImQiLCJhbnkiXSxkZmx0OiJhbnkiLGVkaXRUeXBlOiJub25lIn19fSx7Ii4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6NzU4LCIuL2NvbnN0YW50cyI6NTk1fV0sNjAyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gYShyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaSxyLGEpfXZhciBvOyJzZWxlY3QiPT09YSgiZHJhZ21vZGUiKSYmYSgic2VsZWN0ZGlyZWN0aW9uIiksZS5faGFzKCJjYXJ0ZXNpYW4iKT8oZS5faXNIb3Jpej1mdW5jdGlvbih0KXtmb3IodmFyIGU9ITAscj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO2lmKCJoIiE9PW4ub3JpZW50YXRpb24pe2U9ITE7YnJlYWt9fXJldHVybiBlfShyKSxvPWUuX2lzSG9yaXo/InkiOiJ4Iik6bz0iY2xvc2VzdCIsYSgiaG92ZXJtb2RlIixvKSYmKGEoImhvdmVyZGlzdGFuY2UiKSxhKCJzcGlrZWRpc3RhbmNlIikpO3ZhciBzPWUuX2hhcygibWFwYm94IiksbD1lLl9oYXMoImdlbyIpLGM9ZS5fYmFzZVBsb3RNb2R1bGVzLmxlbmd0aDsiem9vbSI9PT1lLmRyYWdtb2RlJiYoKHN8fGwpJiYxPT09Y3x8cyYmbCYmMj09PWMpJiYoZS5kcmFnbW9kZT0icGFuIil9fSx7Ii4uLy4uL2xpYiI6Njg0LCIuL2xheW91dF9hdHRyaWJ1dGVzIjo2MDF9XSw2MDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2hvdmVybGFiZWxfZGVmYXVsdHMiKSxhPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpKHQsZSxmdW5jdGlvbihyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsYSxyLGkpfSl9fSx7Ii4uLy4uL2xpYiI6Njg0LCIuL2hvdmVybGFiZWxfZGVmYXVsdHMiOjU5OSwiLi9sYXlvdXRfYXR0cmlidXRlcyI6NjAxfV0sNjA0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vbGliL3JlZ2V4IikuY291bnRlcixhPXQoIi4uLy4uL3Bsb3RzL2RvbWFpbiIpLmF0dHJpYnV0ZXMsbz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RhbnRzIikuaWRSZWdleCxzPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKSxsPXtyb3dzOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46MSxlZGl0VHlwZToicGxvdCJ9LHJvd29yZGVyOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0b3AgdG8gYm90dG9tIiwiYm90dG9tIHRvIHRvcCJdLGRmbHQ6InRvcCB0byBib3R0b20iLGVkaXRUeXBlOiJwbG90In0sY29sdW1uczp7dmFsVHlwZToiaW50ZWdlciIsbWluOjEsZWRpdFR5cGU6InBsb3QifSxzdWJwbG90czp7dmFsVHlwZToiaW5mb19hcnJheSIsZnJlZUxlbmd0aDohMCxkaW1lbnNpb25zOjIsaXRlbXM6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbaSgieHkiKS50b1N0cmluZygpLCIiXSxlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJwbG90In0seGF4ZXM6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGZyZWVMZW5ndGg6ITAsaXRlbXM6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbby54LnRvU3RyaW5nKCksIiJdLGVkaXRUeXBlOiJwbG90In0sZWRpdFR5cGU6InBsb3QifSx5YXhlczp7dmFsVHlwZToiaW5mb19hcnJheSIsZnJlZUxlbmd0aDohMCxpdGVtczp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOltvLnkudG9TdHJpbmcoKSwiIl0sZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToicGxvdCJ9LHBhdHRlcm46e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImluZGVwZW5kZW50IiwiY291cGxlZCJdLGRmbHQ6ImNvdXBsZWQiLGVkaXRUeXBlOiJwbG90In0seGdhcDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxlZGl0VHlwZToicGxvdCJ9LHlnYXA6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZWRpdFR5cGU6InBsb3QifSxkb21haW46YSh7bmFtZToiZ3JpZCIsZWRpdFR5cGU6InBsb3QiLG5vR3JpZENlbGw6ITB9LHt9KSx4c2lkZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYm90dG9tIiwiYm90dG9tIHBsb3QiLCJ0b3AgcGxvdCIsInRvcCJdLGRmbHQ6ImJvdHRvbSBwbG90IixlZGl0VHlwZToicGxvdCJ9LHlzaWRlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJsZWZ0IiwibGVmdCBwbG90IiwicmlnaHQgcGxvdCIsInJpZ2h0Il0sZGZsdDoibGVmdCBwbG90IixlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJwbG90In07ZnVuY3Rpb24gYyh0LGUscil7dmFyIG49ZVtyKyJheGVzIl0saT1PYmplY3Qua2V5cygodC5fc3Bsb21BeGVzfHx7fSlbcl18fHt9KTtyZXR1cm4gQXJyYXkuaXNBcnJheShuKT9uOmkubGVuZ3RoP2k6dm9pZCAwfWZ1bmN0aW9uIHUodCxlLHIsbixpLGEpe3ZhciBvPWUodCsiZ2FwIixyKSxzPWUoImRvbWFpbi4iK3QpO2UodCsic2lkZSIsbik7Zm9yKHZhciBsPW5ldyBBcnJheShpKSxjPXNbMF0sdT0oc1sxXS1jKS8oaS1vKSxoPXUqKDEtbyksZj0wO2Y8aTtmKyspe3ZhciBwPWMrdSpmO2xbYT9pLTEtZjpmXT1bcCxwK2hdfXJldHVybiBsfWZ1bmN0aW9uIGgodCxlLHIsbixpKXt2YXIgYSxvPW5ldyBBcnJheShyKTtmdW5jdGlvbiBzKHQscil7LTEhPT1lLmluZGV4T2YocikmJnZvaWQgMD09PW5bcl0/KG9bdF09cixuW3JdPXQpOm9bdF09IiJ9aWYoQXJyYXkuaXNBcnJheSh0KSlmb3IoYT0wO2E8cjthKyspcyhhLHRbYV0pO2Vsc2UgZm9yKHMoMCxpKSxhPTE7YTxyO2ErKylzKGEsaSsoYSsxKSk7cmV0dXJuIG99ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJjb21wb25lbnQiLG5hbWU6ImdyaWQiLHNjaGVtYTp7bGF5b3V0OntncmlkOmx9fSxsYXlvdXRBdHRyaWJ1dGVzOmwsc2l6ZURlZmF1bHRzOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5ncmlkfHx7fSxpPWMoZSxyLCJ4IiksYT1jKGUsciwieSIpO2lmKHQuZ3JpZHx8aXx8YSl7dmFyIG8saCxmPUFycmF5LmlzQXJyYXkoci5zdWJwbG90cykmJkFycmF5LmlzQXJyYXkoci5zdWJwbG90c1swXSkscD1BcnJheS5pc0FycmF5KGkpLGQ9QXJyYXkuaXNBcnJheShhKSxnPXAmJmkhPT1yLnhheGVzJiZkJiZhIT09ci55YXhlcztmPyhvPXIuc3VicGxvdHMubGVuZ3RoLGg9ci5zdWJwbG90c1swXS5sZW5ndGgpOihkJiYobz1hLmxlbmd0aCkscCYmKGg9aS5sZW5ndGgpKTt2YXIgbT1zLm5ld0NvbnRhaW5lcihlLCJncmlkIiksdj1NKCJyb3dzIixvKSx5PU0oImNvbHVtbnMiLGgpO2lmKHYqeT4xKXtmfHxwfHxkfHwiaW5kZXBlbmRlbnQiPT09TSgicGF0dGVybiIpJiYoZj0hMCksbS5faGFzU3VicGxvdEdyaWQ9Zjt2YXIgeCxiLF89InRvcCB0byBib3R0b20iPT09TSgicm93b3JkZXIiKSx3PWY/LjI6LjEsaz1mPy4zOi4xO2cmJmUuX3NwbG9tR3JpZERmbHQmJih4PWUuX3NwbG9tR3JpZERmbHQueHNpZGUsYj1lLl9zcGxvbUdyaWREZmx0LnlzaWRlKSxtLl9kb21haW5zPXt4OnUoIngiLE0sdyx4LHkpLHk6dSgieSIsTSxrLGIsdixfKX19ZWxzZSBkZWxldGUgZS5ncmlkfWZ1bmN0aW9uIE0odCxlKXtyZXR1cm4gbi5jb2VyY2UocixtLGwsdCxlKX19LGNvbnRlbnREZWZhdWx0czpmdW5jdGlvbih0LGUpe3ZhciByPWUuZ3JpZDtpZihyJiZyLl9kb21haW5zKXt2YXIgbixpLGEsbyxzLGwsdSxmPXQuZ3JpZHx8e30scD1lLl9zdWJwbG90cyxkPXIuX2hhc1N1YnBsb3RHcmlkLGc9ci5yb3dzLG09ci5jb2x1bW5zLHY9ImluZGVwZW5kZW50Ij09PXIucGF0dGVybix5PXIuX2F4aXNNYXA9e307aWYoZCl7dmFyIHg9Zi5zdWJwbG90c3x8W107bD1yLnN1YnBsb3RzPW5ldyBBcnJheShnKTt2YXIgYj0xO2ZvcihuPTA7bjxnO24rKyl7dmFyIF89bFtuXT1uZXcgQXJyYXkobSksdz14W25dfHxbXTtmb3IoaT0wO2k8bTtpKyspaWYodj8ocz0xPT09Yj8ieHkiOiJ4IitiKyJ5IitiLGIrKyk6cz13W2ldLF9baV09IiIsLTEhPT1wLmNhcnRlc2lhbi5pbmRleE9mKHMpKXtpZih1PXMuaW5kZXhPZigieSIpLGE9cy5zbGljZSgwLHUpLG89cy5zbGljZSh1KSx2b2lkIDAhPT15W2FdJiZ5W2FdIT09aXx8dm9pZCAwIT09eVtvXSYmeVtvXSE9PW4pY29udGludWU7X1tpXT1zLHlbYV09aSx5W29dPW59fX1lbHNle3ZhciBrPWMoZSxmLCJ4IiksTT1jKGUsZiwieSIpO3IueGF4ZXM9aChrLHAueGF4aXMsbSx5LCJ4Iiksci55YXhlcz1oKE0scC55YXhpcyxnLHksInkiKX12YXIgQT1yLl9hbmNob3JzPXt9LFQ9InRvcCB0byBib3R0b20iPT09ci5yb3dvcmRlcjtmb3IodmFyIFMgaW4geSl7dmFyIEUsQyxMLHo9Uy5jaGFyQXQoMCksUD1yW3orInNpZGUiXTtpZihQLmxlbmd0aDw4KUFbU109ImZyZWUiO2Vsc2UgaWYoIngiPT09eil7aWYoInQiPT09UC5jaGFyQXQoMCk9PT1UPyhFPTAsQz0xLEw9Zyk6KEU9Zy0xLEM9LTEsTD0tMSksZCl7dmFyIEk9eVtTXTtmb3Iobj1FO24hPT1MO24rPUMpaWYoKHM9bFtuXVtJXSkmJih1PXMuaW5kZXhPZigieSIpLHMuc2xpY2UoMCx1KT09PVMpKXtBW1NdPXMuc2xpY2UodSk7YnJlYWt9fWVsc2UgZm9yKG49RTtuIT09TDtuKz1DKWlmKG89ci55YXhlc1tuXSwtMSE9PXAuY2FydGVzaWFuLmluZGV4T2YoUytvKSl7QVtTXT1vO2JyZWFrfX1lbHNlIGlmKCJsIj09PVAuY2hhckF0KDApPyhFPTAsQz0xLEw9bSk6KEU9bS0xLEM9LTEsTD0tMSksZCl7dmFyIE89eVtTXTtmb3Iobj1FO24hPT1MO24rPUMpaWYoKHM9bFtPXVtuXSkmJih1PXMuaW5kZXhPZigieSIpLHMuc2xpY2UodSk9PT1TKSl7QVtTXT1zLnNsaWNlKDAsdSk7YnJlYWt9fWVsc2UgZm9yKG49RTtuIT09TDtuKz1DKWlmKGE9ci54YXhlc1tuXSwtMSE9PXAuY2FydGVzaWFuLmluZGV4T2YoYStTKSl7QVtTXT1hO2JyZWFrfX19fX19LHsiLi4vLi4vbGliIjo2ODQsIi4uLy4uL2xpYi9yZWdleCI6NzAwLCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo3MjIsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdGFudHMiOjczNywiLi4vLi4vcGxvdHMvZG9tYWluIjo3NTd9XSw2MDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0YW50cyIpLGk9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLnRlbXBsYXRlZEFycmF5O2UuZXhwb3J0cz1pKCJpbWFnZSIse3Zpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LHNvdXJjZTp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToiYXJyYXlkcmF3In0sbGF5ZXI6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImJlbG93IiwiYWJvdmUiXSxkZmx0OiJhYm92ZSIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LHNpemV4Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxlZGl0VHlwZToiYXJyYXlkcmF3In0sc2l6ZXk6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowLGVkaXRUeXBlOiJhcnJheWRyYXcifSxzaXppbmc6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImZpbGwiLCJjb250YWluIiwic3RyZXRjaCJdLGRmbHQ6ImNvbnRhaW4iLGVkaXRUeXBlOiJhcnJheWRyYXcifSxvcGFjaXR5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MSxlZGl0VHlwZToiYXJyYXlkcmF3In0seDp7dmFsVHlwZToiYW55IixkZmx0OjAsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LHk6e3ZhbFR5cGU6ImFueSIsZGZsdDowLGVkaXRUeXBlOiJhcnJheWRyYXcifSx4YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJsZWZ0IiwiY2VudGVyIiwicmlnaHQiXSxkZmx0OiJsZWZ0IixlZGl0VHlwZToiYXJyYXlkcmF3In0seWFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidG9wIiwibWlkZGxlIiwiYm90dG9tIl0sZGZsdDoidG9wIixlZGl0VHlwZToiYXJyYXlkcmF3In0seHJlZjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsicGFwZXIiLG4uaWRSZWdleC54LnRvU3RyaW5nKCldLGRmbHQ6InBhcGVyIixlZGl0VHlwZToiYXJyYXlkcmF3In0seXJlZjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsicGFwZXIiLG4uaWRSZWdleC55LnRvU3RyaW5nKCldLGRmbHQ6InBhcGVyIixlZGl0VHlwZToiYXJyYXlkcmF3In0sZWRpdFR5cGU6ImFycmF5ZHJhdyJ9KX0seyIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo3MjIsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdGFudHMiOjczN31dLDYwNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vbGliL3RvX2xvZ19yYW5nZSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXtlPWV8fHt9O3ZhciBvPSJsb2ciPT09ciYmImxpbmVhciI9PT1lLnR5cGUscz0ibGluZWFyIj09PXImJiJsb2ciPT09ZS50eXBlO2lmKG98fHMpZm9yKHZhciBsLGMsdT10Ll9mdWxsTGF5b3V0LmltYWdlcyxoPWUuX2lkLmNoYXJBdCgwKSxmPTA7Zjx1Lmxlbmd0aDtmKyspaWYoYz0iaW1hZ2VzWyIrZisiXS4iLChsPXVbZl0pW2grInJlZiJdPT09ZS5faWQpe3ZhciBwPWxbaF0sZD1sWyJzaXplIitoXSxnPW51bGwsbT1udWxsO2lmKG8pe2c9aShwLGUucmFuZ2UpO3ZhciB2PWQvTWF0aC5wb3coMTAsZykvMjttPTIqTWF0aC5sb2coditNYXRoLnNxcnQoMSt2KnYpKS9NYXRoLkxOMTB9ZWxzZSBtPShnPU1hdGgucG93KDEwLHApKSooTWF0aC5wb3coMTAsZC8yKS1NYXRoLnBvdygxMCwtZC8yKSk7bihnKT9uKG0pfHwobT1udWxsKTooZz1udWxsLG09bnVsbCksYShjK2gsZyksYShjKyJzaXplIitoLG0pfX19LHsiLi4vLi4vbGliL3RvX2xvZ19yYW5nZSI6NzEwLCJmYXN0LWlzbnVtZXJpYyI6MjE0fV0sNjA3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxhPXQoIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyIpLG89dCgiLi9hdHRyaWJ1dGVzIik7ZnVuY3Rpb24gcyh0LGUscil7ZnVuY3Rpb24gYShyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsbyxyLGkpfXZhciBzPWEoInNvdXJjZSIpO2lmKCFhKCJ2aXNpYmxlIiwhIXMpKXJldHVybiBlO2EoImxheWVyIiksYSgieGFuY2hvciIpLGEoInlhbmNob3IiKSxhKCJzaXpleCIpLGEoInNpemV5IiksYSgic2l6aW5nIiksYSgib3BhY2l0eSIpO2Zvcih2YXIgbD17X2Z1bGxMYXlvdXQ6cn0sYz1bIngiLCJ5Il0sdT0wO3U8Mjt1Kyspe3ZhciBoPWNbdV0sZj1pLmNvZXJjZVJlZih0LGUsbCxoLCJwYXBlciIpO2kuY29lcmNlUG9zaXRpb24oZSxsLGEsZixoLDApfXJldHVybiBlfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2EodCxlLHtuYW1lOiJpbWFnZXMiLGhhbmRsZUl0ZW1EZWZhdWx0czpzfSl9fSx7Ii4uLy4uL2xpYiI6Njg0LCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiOjcyOCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjczMiwiLi9hdHRyaWJ1dGVzIjo2MDV9XSw2MDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uL2RyYXdpbmciKSxhPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksbz10KCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZSxyLHM9dC5fZnVsbExheW91dCxsPVtdLGM9e30sdT1bXTtmb3Iocj0wO3I8cy5pbWFnZXMubGVuZ3RoO3IrKyl7dmFyIGg9cy5pbWFnZXNbcl07aWYoaC52aXNpYmxlKWlmKCJiZWxvdyI9PT1oLmxheWVyJiYicGFwZXIiIT09aC54cmVmJiYicGFwZXIiIT09aC55cmVmKXtlPWgueHJlZitoLnlyZWY7dmFyIGY9cy5fcGxvdHNbZV07aWYoIWYpe3UucHVzaChoKTtjb250aW51ZX1mLm1haW5wbG90JiYoZT1mLm1haW5wbG90LmlkKSxjW2VdfHwoY1tlXT1bXSksY1tlXS5wdXNoKGgpfWVsc2UiYWJvdmUiPT09aC5sYXllcj9sLnB1c2goaCk6dS5wdXNoKGgpfXZhciBwPXt4OntsZWZ0OntzaXppbmc6InhNaW4iLG9mZnNldDowfSxjZW50ZXI6e3NpemluZzoieE1pZCIsb2Zmc2V0Oi0uNX0scmlnaHQ6e3NpemluZzoieE1heCIsb2Zmc2V0Oi0xfX0seTp7dG9wOntzaXppbmc6IllNaW4iLG9mZnNldDowfSxtaWRkbGU6e3NpemluZzoiWU1pZCIsb2Zmc2V0Oi0uNX0sYm90dG9tOntzaXppbmc6IllNYXgiLG9mZnNldDotMX19fTtmdW5jdGlvbiBkKGUpe3ZhciByPW4uc2VsZWN0KHRoaXMpO2lmKCF0aGlzLmltZ3x8dGhpcy5pbWcuc3JjIT09ZS5zb3VyY2Upe3IuYXR0cigieG1sbnMiLG8uc3ZnKTt2YXIgaT1uZXcgUHJvbWlzZShmdW5jdGlvbih0KXt2YXIgbj1uZXcgSW1hZ2U7ZnVuY3Rpb24gaSgpe3IucmVtb3ZlKCksdCgpfXRoaXMuaW1nPW4sbi5zZXRBdHRyaWJ1dGUoImNyb3NzT3JpZ2luIiwiYW5vbnltb3VzIiksbi5vbmVycm9yPWksbi5vbmxvYWQ9ZnVuY3Rpb24oKXt2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtlLndpZHRoPXRoaXMud2lkdGgsZS5oZWlnaHQ9dGhpcy5oZWlnaHQsZS5nZXRDb250ZXh0KCIyZCIpLmRyYXdJbWFnZSh0aGlzLDAsMCk7dmFyIG49ZS50b0RhdGFVUkwoImltYWdlL3BuZyIpO3IuYXR0cigieGxpbms6aHJlZiIsbiksdCgpfSxyLm9uKCJlcnJvciIsaSksbi5zcmM9ZS5zb3VyY2V9LmJpbmQodGhpcykpO3QuX3Byb21pc2VzLnB1c2goaSl9fWZ1bmN0aW9uIGcoZSl7dmFyIHI9bi5zZWxlY3QodGhpcyksbz1hLmdldEZyb21JZCh0LGUueHJlZiksbD1hLmdldEZyb21JZCh0LGUueXJlZiksYz1zLl9zaXplLHU9bz9NYXRoLmFicyhvLmwycChlLnNpemV4KS1vLmwycCgwKSk6ZS5zaXpleCpjLncsaD1sP01hdGguYWJzKGwubDJwKGUuc2l6ZXkpLWwubDJwKDApKTplLnNpemV5KmMuaCxmPXUqcC54W2UueGFuY2hvcl0ub2Zmc2V0LGQ9aCpwLnlbZS55YW5jaG9yXS5vZmZzZXQsZz1wLnhbZS54YW5jaG9yXS5zaXppbmcrcC55W2UueWFuY2hvcl0uc2l6aW5nLG09KG8/by5yMnAoZS54KStvLl9vZmZzZXQ6ZS54KmMudytjLmwpK2Ysdj0obD9sLnIycChlLnkpK2wuX29mZnNldDpjLmgtZS55KmMuaCtjLnQpK2Q7c3dpdGNoKGUuc2l6aW5nKXtjYXNlImZpbGwiOmcrPSIgc2xpY2UiO2JyZWFrO2Nhc2Uic3RyZXRjaCI6Zz0ibm9uZSJ9ci5hdHRyKHt4Om0seTp2LHdpZHRoOnUsaGVpZ2h0OmgscHJlc2VydmVBc3BlY3RSYXRpbzpnLG9wYWNpdHk6ZS5vcGFjaXR5fSk7dmFyIHk9KG8/by5faWQ6IiIpKyhsP2wuX2lkOiIiKTtyLmNhbGwoaS5zZXRDbGlwVXJsLHk/ImNsaXAiK3MuX3VpZCt5Om51bGwpfXZhciBtPXMuX2ltYWdlTG93ZXJMYXllci5zZWxlY3RBbGwoImltYWdlIikuZGF0YSh1KSx2PXMuX2ltYWdlVXBwZXJMYXllci5zZWxlY3RBbGwoImltYWdlIikuZGF0YShsKTttLmVudGVyKCkuYXBwZW5kKCJpbWFnZSIpLHYuZW50ZXIoKS5hcHBlbmQoImltYWdlIiksbS5leGl0KCkucmVtb3ZlKCksdi5leGl0KCkucmVtb3ZlKCksbS5lYWNoKGZ1bmN0aW9uKHQpe2QuYmluZCh0aGlzKSh0KSxnLmJpbmQodGhpcykodCl9KSx2LmVhY2goZnVuY3Rpb24odCl7ZC5iaW5kKHRoaXMpKHQpLGcuYmluZCh0aGlzKSh0KX0pO3ZhciB5PU9iamVjdC5rZXlzKHMuX3Bsb3RzKTtmb3Iocj0wO3I8eS5sZW5ndGg7cisrKXtlPXlbcl07dmFyIHg9cy5fcGxvdHNbZV07aWYoeC5pbWFnZWxheWVyKXt2YXIgYj14LmltYWdlbGF5ZXIuc2VsZWN0QWxsKCJpbWFnZSIpLmRhdGEoY1tlXXx8W10pO2IuZW50ZXIoKS5hcHBlbmQoImltYWdlIiksYi5leGl0KCkucmVtb3ZlKCksYi5lYWNoKGZ1bmN0aW9uKHQpe2QuYmluZCh0aGlzKSh0KSxnLmJpbmQodGhpcykodCl9KX19fX0seyIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyI6NjYzLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzMyLCIuLi9kcmF3aW5nIjo1ODMsZDM6MTQ3fV0sNjA5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bW9kdWxlVHlwZToiY29tcG9uZW50IixuYW1lOiJpbWFnZXMiLGxheW91dEF0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGluY2x1ZGVCYXNlUGxvdDp0KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vaW5jbHVkZV9jb21wb25lbnRzIikoImltYWdlcyIpLGRyYXc6dCgiLi9kcmF3IiksY29udmVydENvb3Jkczp0KCIuL2NvbnZlcnRfY29vcmRzIil9fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9pbmNsdWRlX2NvbXBvbmVudHMiOjc0MiwiLi9hdHRyaWJ1dGVzIjo2MDUsIi4vY29udmVydF9jb29yZHMiOjYwNiwiLi9kZWZhdWx0cyI6NjA3LCIuL2RyYXciOjYwOH1dLDYxMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLmlzUmlnaHRBbmNob3I9ZnVuY3Rpb24odCl7cmV0dXJuInJpZ2h0Ij09PXQueGFuY2hvcnx8ImF1dG8iPT09dC54YW5jaG9yJiZ0Lng+PTIvM30sci5pc0NlbnRlckFuY2hvcj1mdW5jdGlvbih0KXtyZXR1cm4iY2VudGVyIj09PXQueGFuY2hvcnx8ImF1dG8iPT09dC54YW5jaG9yJiZ0Lng+MS8zJiZ0Lng8Mi8zfSxyLmlzQm90dG9tQW5jaG9yPWZ1bmN0aW9uKHQpe3JldHVybiJib3R0b20iPT09dC55YW5jaG9yfHwiYXV0byI9PT10LnlhbmNob3ImJnQueTw9MS8zfSxyLmlzTWlkZGxlQW5jaG9yPWZ1bmN0aW9uKHQpe3JldHVybiJtaWRkbGUiPT09dC55YW5jaG9yfHwiYXV0byI9PT10LnlhbmNob3ImJnQueT4xLzMmJnQueTwyLzN9fSx7fV0sNjExOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLGk9dCgiLi4vY29sb3IvYXR0cmlidXRlcyIpO2UuZXhwb3J0cz17Ymdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJsZWdlbmQifSxib3JkZXJjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6aS5kZWZhdWx0TGluZSxlZGl0VHlwZToibGVnZW5kIn0sYm9yZGVyd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDowLGVkaXRUeXBlOiJsZWdlbmQifSxmb250Om4oe2VkaXRUeXBlOiJsZWdlbmQifSksb3JpZW50YXRpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInYiLCJoIl0sZGZsdDoidiIsZWRpdFR5cGU6ImxlZ2VuZCJ9LHRyYWNlb3JkZXI6e3ZhbFR5cGU6ImZsYWdsaXN0IixmbGFnczpbInJldmVyc2VkIiwiZ3JvdXBlZCJdLGV4dHJhczpbIm5vcm1hbCJdLGVkaXRUeXBlOiJsZWdlbmQifSx0cmFjZWdyb3VwZ2FwOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MTAsZWRpdFR5cGU6ImxlZ2VuZCJ9LHg6e3ZhbFR5cGU6Im51bWJlciIsbWluOi0yLG1heDozLGRmbHQ6MS4wMixlZGl0VHlwZToibGVnZW5kIn0seGFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYXV0byIsImxlZnQiLCJjZW50ZXIiLCJyaWdodCJdLGRmbHQ6ImxlZnQiLGVkaXRUeXBlOiJsZWdlbmQifSx5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjotMixtYXg6MyxkZmx0OjEsZWRpdFR5cGU6ImxlZ2VuZCJ9LHlhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImF1dG8iLCJ0b3AiLCJtaWRkbGUiLCJib3R0b20iXSxkZmx0OiJhdXRvIixlZGl0VHlwZToibGVnZW5kIn0sZWRpdFR5cGU6ImxlZ2VuZCJ9fSx7Ii4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6NzU4LCIuLi9jb2xvci9hdHRyaWJ1dGVzIjo1NTd9XSw2MTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtzY3JvbGxCYXJXaWR0aDo2LHNjcm9sbEJhck1pbkhlaWdodDoyMCxzY3JvbGxCYXJDb2xvcjoiIzgwOEJBNCIsc2Nyb2xsQmFyTWFyZ2luOjR9fSx7fV0sNjEzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3JlZ2lzdHJ5IiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKSxvPXQoIi4vYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vcGxvdHMvbGF5b3V0X2F0dHJpYnV0ZXMiKSxsPXQoIi4vaGVscGVycyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBjLHUsaCxmLHA9dC5sZWdlbmR8fHt9LGQ9MCxnPSJub3JtYWwiLG09MDttPHIubGVuZ3RoO20rKyl7dmFyIHY9clttXTtsLmxlZ2VuZEdldHNUcmFjZSh2KSYmKGQrKyxuLnRyYWNlSXModiwicGllIikmJmQrKyksKG4udHJhY2VJcyh2LCJiYXIiKSYmInN0YWNrIj09PWUuYmFybW9kZXx8LTEhPT1bInRvbmV4dHgiLCJ0b25leHR5Il0uaW5kZXhPZih2LmZpbGwpKSYmKGc9bC5pc0dyb3VwZWQoe3RyYWNlb3JkZXI6Z30pPyJncm91cGVkK3JldmVyc2VkIjoicmV2ZXJzZWQiKSx2b2lkIDAhPT12LmxlZ2VuZGdyb3VwJiYiIiE9PXYubGVnZW5kZ3JvdXAmJihnPWwuaXNSZXZlcnNlZCh7dHJhY2VvcmRlcjpnfSk/InJldmVyc2VkK2dyb3VwZWQiOiJncm91cGVkIil9aWYoITEhPT1pLmNvZXJjZSh0LGUscywic2hvd2xlZ2VuZCIsZD4xKSl7dmFyIHk9YS5uZXdDb250YWluZXIoZSwibGVnZW5kIik7aWYoYigiYmdjb2xvciIsZS5wYXBlcl9iZ2NvbG9yKSxiKCJib3JkZXJjb2xvciIpLGIoImJvcmRlcndpZHRoIiksaS5jb2VyY2VGb250KGIsImZvbnQiLGUuZm9udCksYigib3JpZW50YXRpb24iKSwiaCI9PT15Lm9yaWVudGF0aW9uKXt2YXIgeD10LnhheGlzO3gmJngucmFuZ2VzbGlkZXImJngucmFuZ2VzbGlkZXIudmlzaWJsZT8oYz0wLGg9ImxlZnQiLHU9MS4xLGY9ImJvdHRvbSIpOihjPTAsaD0ibGVmdCIsdT0tLjEsZj0idG9wIil9YigidHJhY2VvcmRlciIsZyksbC5pc0dyb3VwZWQoZS5sZWdlbmQpJiZiKCJ0cmFjZWdyb3VwZ2FwIiksYigieCIsYyksYigieGFuY2hvciIsaCksYigieSIsdSksYigieWFuY2hvciIsZiksaS5ub25lT3JBbGwocCx5LFsieCIsInkiXSl9ZnVuY3Rpb24gYih0LGUpe3JldHVybiBpLmNvZXJjZShwLHksbyx0LGUpfX19LHsiLi4vLi4vbGliIjo2ODQsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjcyMiwiLi4vLi4vcGxvdHMvbGF5b3V0X2F0dHJpYnV0ZXMiOjc4NiwiLi4vLi4vcmVnaXN0cnkiOjgxNywiLi9hdHRyaWJ1dGVzIjo2MTEsIi4vaGVscGVycyI6NjE3fV0sNjE0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL3Bsb3RzL3Bsb3RzIiksbz10KCIuLi8uLi9yZWdpc3RyeSIpLHM9dCgiLi4vLi4vbGliL2V2ZW50cyIpLGw9dCgiLi4vZHJhZ2VsZW1lbnQiKSxjPXQoIi4uL2RyYXdpbmciKSx1PXQoIi4uL2NvbG9yIiksaD10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSxmPXQoIi4vaGFuZGxlX2NsaWNrIikscD10KCIuL2NvbnN0YW50cyIpLGQ9dCgiLi4vLi4vY29uc3RhbnRzL2ludGVyYWN0aW9ucyIpLGc9dCgiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCIpLG09Zy5MSU5FX1NQQUNJTkcsdj1nLkZST01fVEwseT1nLkZST01fQlIseD10KCIuL2dldF9sZWdlbmRfZGF0YSIpLGI9dCgiLi9zdHlsZSIpLF89dCgiLi9oZWxwZXJzIiksdz10KCIuL2FuY2hvcl91dGlscyIpLGs9ZC5EQkxDTElDS0RFTEFZO2Z1bmN0aW9uIE0odCxlLHIsbixpKXt2YXIgYT1yLmRhdGEoKVswXVswXS50cmFjZSxvPXtldmVudDppLG5vZGU6ci5ub2RlKCksY3VydmVOdW1iZXI6YS5pbmRleCxleHBhbmRlZEluZGV4OmEuX2V4cGFuZGVkSW5kZXgsZGF0YTp0LmRhdGEsbGF5b3V0OnQubGF5b3V0LGZyYW1lczp0Ll90cmFuc2l0aW9uRGF0YS5fZnJhbWVzLGNvbmZpZzp0Ll9jb250ZXh0LGZ1bGxEYXRhOnQuX2Z1bGxEYXRhLGZ1bGxMYXlvdXQ6dC5fZnVsbExheW91dH07aWYoYS5fZ3JvdXAmJihvLmdyb3VwPWEuX2dyb3VwKSwicGllIj09PWEudHlwZSYmKG8ubGFiZWw9ci5kYXR1bSgpWzBdLmxhYmVsKSwhMSE9PXMudHJpZ2dlckhhbmRsZXIodCwicGxvdGx5X2xlZ2VuZGNsaWNrIixvKSlpZigxPT09billLl9jbGlja1RpbWVvdXQ9c2V0VGltZW91dChmdW5jdGlvbigpe2Yocix0LG4pfSxrKTtlbHNlIGlmKDI9PT1uKXtlLl9jbGlja1RpbWVvdXQmJmNsZWFyVGltZW91dChlLl9jbGlja1RpbWVvdXQpLHQuX2xlZ2VuZE1vdXNlRG93blRpbWU9MCwhMSE9PXMudHJpZ2dlckhhbmRsZXIodCwicGxvdGx5X2xlZ2VuZGRvdWJsZWNsaWNrIixvKSYmZihyLHQsbil9fWZ1bmN0aW9uIEEodCxlLHIpe3ZhciBuPXQuZGF0YSgpWzBdWzBdLGE9ZS5fZnVsbExheW91dCxzPW4udHJhY2UsbD1vLnRyYWNlSXMocywicGllIiksdT1zLmluZGV4LGY9bD9uLmxhYmVsOnMubmFtZSxwPWUuX2NvbnRleHQuZWRpdHMubGVnZW5kVGV4dCYmIWwsZD1pLmVuc3VyZVNpbmdsZSh0LCJ0ZXh0IiwibGVnZW5kdGV4dCIpO2Z1bmN0aW9uIGcocil7aC5jb252ZXJ0VG9Uc3BhbnMocixlLGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5kYXRhKClbMF1bMF07aWYoIXIudHJhY2Uuc2hvd2xlZ2VuZClyZXR1cm4gdm9pZCB0LnJlbW92ZSgpO3ZhciBuLGksYT10LnNlbGVjdCgiZ1tjbGFzcyo9bWF0aC1ncm91cF0iKSxvPWEubm9kZSgpLHM9ZS5fZnVsbExheW91dC5sZWdlbmQuZm9udC5zaXplKm07aWYobyl7dmFyIGw9Yy5iQm94KG8pO249bC5oZWlnaHQsaT1sLndpZHRoLGMuc2V0VHJhbnNsYXRlKGEsMCxuLzQpfWVsc2V7dmFyIHU9dC5zZWxlY3QoIi5sZWdlbmR0ZXh0IiksZj1oLmxpbmVDb3VudCh1KSxwPXUubm9kZSgpO249cypmLGk9cD9jLmJCb3gocCkud2lkdGg6MDt2YXIgZD1zKiguMysoMS1mKS8yKTtoLnBvc2l0aW9uVGV4dCh1LDQwLGQpfW49TWF0aC5tYXgobiwxNikrMyxyLmhlaWdodD1uLHIud2lkdGg9aX0odCxlKX0pfWQuYXR0cigidGV4dC1hbmNob3IiLCJzdGFydCIpLmNsYXNzZWQoInVzZXItc2VsZWN0LW5vbmUiLCEwKS5jYWxsKGMuZm9udCxhLmxlZ2VuZC5mb250KS50ZXh0KHA/VChmLHIpOmYpLHA/ZC5jYWxsKGgubWFrZUVkaXRhYmxlLHtnZDplLHRleHQ6Zn0pLmNhbGwoZykub24oImVkaXQiLGZ1bmN0aW9uKHQpe3RoaXMudGV4dChUKHQscikpLmNhbGwoZyk7dmFyIGE9bi50cmFjZS5fZnVsbElucHV0fHx7fSxzPXt9O2lmKG8uaGFzVHJhbnNmb3JtKGEsImdyb3VwYnkiKSl7dmFyIGw9by5nZXRUcmFuc2Zvcm1JbmRpY2VzKGEsImdyb3VwYnkiKSxjPWxbbC5sZW5ndGgtMV0saD1pLmtleWVkQ29udGFpbmVyKGEsInRyYW5zZm9ybXNbIitjKyJdLnN0eWxlcyIsInRhcmdldCIsInZhbHVlLm5hbWUiKTtoLnNldChuLnRyYWNlLl9ncm91cCx0KSxzPWguY29uc3RydWN0VXBkYXRlKCl9ZWxzZSBzLm5hbWU9dDtyZXR1cm4gby5jYWxsKCJyZXN0eWxlIixlLHMsdSl9KTpnKGQpfWZ1bmN0aW9uIFQodCxlKXt2YXIgcj1NYXRoLm1heCg0LGUpO2lmKHQmJnQudHJpbSgpLmxlbmd0aD49ci8yKXJldHVybiB0O2Zvcih2YXIgbj1yLSh0PXR8fCIiKS5sZW5ndGg7bj4wO24tLSl0Kz0iICI7cmV0dXJuIHR9ZnVuY3Rpb24gUyh0LGUpe3ZhciByLGE9MSxvPWkuZW5zdXJlU2luZ2xlKHQsInJlY3QiLCJsZWdlbmR0b2dnbGUiLGZ1bmN0aW9uKHQpe3Quc3R5bGUoImN1cnNvciIsInBvaW50ZXIiKS5hdHRyKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLmNhbGwodS5maWxsLCJyZ2JhKDAsMCwwLDApIil9KTtvLm9uKCJtb3VzZWRvd24iLGZ1bmN0aW9uKCl7KHI9KG5ldyBEYXRlKS5nZXRUaW1lKCkpLWUuX2xlZ2VuZE1vdXNlRG93blRpbWU8az9hKz0xOihhPTEsZS5fbGVnZW5kTW91c2VEb3duVGltZT1yKX0pLG8ub24oIm1vdXNldXAiLGZ1bmN0aW9uKCl7aWYoIWUuX2RyYWdnZWQmJiFlLl9lZGl0aW5nKXt2YXIgcj1lLl9mdWxsTGF5b3V0LmxlZ2VuZDsobmV3IERhdGUpLmdldFRpbWUoKS1lLl9sZWdlbmRNb3VzZURvd25UaW1lPmsmJihhPU1hdGgubWF4KGEtMSwxKSksTShlLHIsdCxhLG4uZXZlbnQpfX0pfWZ1bmN0aW9uIEUodCxlLHIpe3ZhciBpPXQuX2Z1bGxMYXlvdXQsYT1pLmxlZ2VuZCxvPWEuYm9yZGVyd2lkdGgscz1fLmlzR3JvdXBlZChhKSxsPTA7aWYoYS5fd2lkdGg9MCxhLl9oZWlnaHQ9MCxfLmlzVmVydGljYWwoYSkpcyYmZS5lYWNoKGZ1bmN0aW9uKHQsZSl7Yy5zZXRUcmFuc2xhdGUodGhpcywwLGUqYS50cmFjZWdyb3VwZ2FwKX0pLHIuZWFjaChmdW5jdGlvbih0KXt2YXIgZT10WzBdLHI9ZS5oZWlnaHQsbj1lLndpZHRoO2Muc2V0VHJhbnNsYXRlKHRoaXMsbyw1K28rYS5faGVpZ2h0K3IvMiksYS5faGVpZ2h0Kz1yLGEuX3dpZHRoPU1hdGgubWF4KGEuX3dpZHRoLG4pfSksYS5fd2lkdGgrPTQ1KzIqbyxhLl9oZWlnaHQrPTEwKzIqbyxzJiYoYS5faGVpZ2h0Kz0oYS5fbGdyb3Vwc0xlbmd0aC0xKSphLnRyYWNlZ3JvdXBnYXApLGw9NDA7ZWxzZSBpZihzKXtmb3IodmFyIHU9W2EuX3dpZHRoXSxoPWUuZGF0YSgpLGY9MCxwPWgubGVuZ3RoO2Y8cDtmKyspe3ZhciBkPWhbZl0ubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdLndpZHRofSksZz00MCtNYXRoLm1heC5hcHBseShudWxsLGQpO2EuX3dpZHRoKz1hLnRyYWNlZ3JvdXBnYXArZyx1LnB1c2goYS5fd2lkdGgpfWUuZWFjaChmdW5jdGlvbih0LGUpe2Muc2V0VHJhbnNsYXRlKHRoaXMsdVtlXSwwKX0pLGUuZWFjaChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgiZy50cmFjZXMiKSxlPTA7dC5lYWNoKGZ1bmN0aW9uKHQpe3ZhciByPXRbMF0uaGVpZ2h0O2Muc2V0VHJhbnNsYXRlKHRoaXMsMCw1K28rZStyLzIpLGUrPXJ9KSxhLl9oZWlnaHQ9TWF0aC5tYXgoYS5faGVpZ2h0LGUpfSksYS5faGVpZ2h0Kz0xMCsyKm8sYS5fd2lkdGgrPTIqb31lbHNle3ZhciBtLHY9MCx5PTAseD0wLGI9MCx3PTAsaz1hLnRyYWNlZ3JvdXBnYXB8fDU7ci5lYWNoKGZ1bmN0aW9uKHQpe3g9TWF0aC5tYXgoNDArdFswXS53aWR0aCx4KSx3Kz00MCt0WzBdLndpZHRoK2t9KSxtPWkud2lkdGgtKGkubWFyZ2luLnIraS5tYXJnaW4ubCk+byt3LWssci5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0scj1tPzQwK3RbMF0ud2lkdGg6eDtvK2IraytyPmkud2lkdGgtKGkubWFyZ2luLnIraS5tYXJnaW4ubCkmJihiPTAsdis9eSxhLl9oZWlnaHQ9YS5faGVpZ2h0K3kseT0wKSxjLnNldFRyYW5zbGF0ZSh0aGlzLG8rYiw1K28rZS5oZWlnaHQvMit2KSxhLl93aWR0aCs9aytyLGEuX2hlaWdodD1NYXRoLm1heChhLl9oZWlnaHQsZS5oZWlnaHQpLGIrPWsrcix5PU1hdGgubWF4KGUuaGVpZ2h0LHkpfSksYS5fd2lkdGgrPTIqbyxhLl9oZWlnaHQrPTEwKzIqb31hLl93aWR0aD1NYXRoLmNlaWwoYS5fd2lkdGgpLGEuX2hlaWdodD1NYXRoLmNlaWwoYS5faGVpZ2h0KSxyLmVhY2goZnVuY3Rpb24oZSl7dmFyIHI9ZVswXSxpPW4uc2VsZWN0KHRoaXMpLnNlbGVjdCgiLmxlZ2VuZHRvZ2dsZSIpO2Muc2V0UmVjdChpLDAsLXIuaGVpZ2h0LzIsKHQuX2NvbnRleHQuZWRpdHMubGVnZW5kVGV4dD8wOmEuX3dpZHRoKStsLHIuaGVpZ2h0KX0pfWZ1bmN0aW9uIEModCl7dmFyIGU9dC5fZnVsbExheW91dC5sZWdlbmQscj0ibGVmdCI7dy5pc1JpZ2h0QW5jaG9yKGUpP3I9InJpZ2h0Ijp3LmlzQ2VudGVyQW5jaG9yKGUpJiYocj0iY2VudGVyIik7dmFyIG49InRvcCI7dy5pc0JvdHRvbUFuY2hvcihlKT9uPSJib3R0b20iOncuaXNNaWRkbGVBbmNob3IoZSkmJihuPSJtaWRkbGUiKSxhLmF1dG9NYXJnaW4odCwibGVnZW5kIix7eDplLngseTplLnksbDplLl93aWR0aCp2W3JdLHI6ZS5fd2lkdGgqeVtyXSxiOmUuX2hlaWdodCp5W25dLHQ6ZS5faGVpZ2h0KnZbbl19KX1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dCxyPSJsZWdlbmQiK2UuX3VpZDtpZihlLl9pbmZvbGF5ZXImJnQuY2FsY2RhdGEpe3QuX2xlZ2VuZE1vdXNlRG93blRpbWV8fCh0Ll9sZWdlbmRNb3VzZURvd25UaW1lPTApO3ZhciBzPWUubGVnZW5kLGg9ZS5zaG93bGVnZW5kJiZ4KHQuY2FsY2RhdGEscyksZj1lLmhpZGRlbmxhYmVsc3x8W107aWYoIWUuc2hvd2xlZ2VuZHx8IWgubGVuZ3RoKXJldHVybiBlLl9pbmZvbGF5ZXIuc2VsZWN0QWxsKCIubGVnZW5kIikucmVtb3ZlKCksZS5fdG9wZGVmcy5zZWxlY3QoIiMiK3IpLnJlbW92ZSgpLHZvaWQgYS5hdXRvTWFyZ2luKHQsImxlZ2VuZCIpO2Zvcih2YXIgZD0wLGc9MDtnPGgubGVuZ3RoO2crKylmb3IodmFyIG09MDttPGhbZ10ubGVuZ3RoO20rKyl7dmFyIF89aFtnXVttXVswXSxrPV8udHJhY2UsVD1vLnRyYWNlSXMoaywicGllIik/Xy5sYWJlbDprLm5hbWU7ZD1NYXRoLm1heChkLFQmJlQubGVuZ3RofHwwKX12YXIgTD0hMSx6PWkuZW5zdXJlU2luZ2xlKGUuX2luZm9sYXllciwiZyIsImxlZ2VuZCIsZnVuY3Rpb24odCl7dC5hdHRyKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLEw9ITB9KSxQPWkuZW5zdXJlU2luZ2xlQnlJZChlLl90b3BkZWZzLCJjbGlwUGF0aCIscixmdW5jdGlvbih0KXt0LmFwcGVuZCgicmVjdCIpfSksST1pLmVuc3VyZVNpbmdsZSh6LCJyZWN0IiwiYmciLGZ1bmN0aW9uKHQpe3QuYXR0cigic2hhcGUtcmVuZGVyaW5nIiwiY3Jpc3BFZGdlcyIpfSk7SS5jYWxsKHUuc3Ryb2tlLHMuYm9yZGVyY29sb3IpLmNhbGwodS5maWxsLHMuYmdjb2xvcikuc3R5bGUoInN0cm9rZS13aWR0aCIscy5ib3JkZXJ3aWR0aCsicHgiKTt2YXIgTz1pLmVuc3VyZVNpbmdsZSh6LCJnIiwic2Nyb2xsYm94IiksRD1pLmVuc3VyZVNpbmdsZSh6LCJyZWN0Iiwic2Nyb2xsYmFyIixmdW5jdGlvbih0KXt0LmF0dHIoe3J4OjIwLHJ5OjMsd2lkdGg6MCxoZWlnaHQ6MH0pLmNhbGwodS5maWxsLCIjODA4QkE0Iil9KSxSPU8uc2VsZWN0QWxsKCJnLmdyb3VwcyIpLmRhdGEoaCk7Ui5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiZ3JvdXBzIiksUi5leGl0KCkucmVtb3ZlKCk7dmFyIEI9Ui5zZWxlY3RBbGwoImcudHJhY2VzIikuZGF0YShpLmlkZW50aXR5KTtCLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJ0cmFjZXMiKSxCLmV4aXQoKS5yZW1vdmUoKSxCLmNhbGwoYix0KS5zdHlsZSgib3BhY2l0eSIsZnVuY3Rpb24odCl7dmFyIGU9dFswXS50cmFjZTtyZXR1cm4gby50cmFjZUlzKGUsInBpZSIpPy0xIT09Zi5pbmRleE9mKHRbMF0ubGFiZWwpPy41OjE6ImxlZ2VuZG9ubHkiPT09ZS52aXNpYmxlPy41OjF9KS5lYWNoKGZ1bmN0aW9uKCl7bi5zZWxlY3QodGhpcykuY2FsbChBLHQsZCkuY2FsbChTLHQpfSksTCYmKEUodCxSLEIpLEModCkpO3ZhciBGPWUud2lkdGgsTj1lLmhlaWdodDtFKHQsUixCKSxzLl9oZWlnaHQ+Tj9mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LmxlZ2VuZCxyPSJsZWZ0Ijt3LmlzUmlnaHRBbmNob3IoZSk/cj0icmlnaHQiOncuaXNDZW50ZXJBbmNob3IoZSkmJihyPSJjZW50ZXIiKTthLmF1dG9NYXJnaW4odCwibGVnZW5kIix7eDplLngseTouNSxsOmUuX3dpZHRoKnZbcl0scjplLl93aWR0aCp5W3JdLGI6MCx0OjB9KX0odCk6Qyh0KTt2YXIgaj1lLl9zaXplLFY9ai5sK2oudypzLngsVT1qLnQrai5oKigxLXMueSk7dy5pc1JpZ2h0QW5jaG9yKHMpP1YtPXMuX3dpZHRoOncuaXNDZW50ZXJBbmNob3IocykmJihWLT1zLl93aWR0aC8yKSx3LmlzQm90dG9tQW5jaG9yKHMpP1UtPXMuX2hlaWdodDp3LmlzTWlkZGxlQW5jaG9yKHMpJiYoVS09cy5faGVpZ2h0LzIpO3ZhciBxPXMuX3dpZHRoLEg9ai53O3E+SD8oVj1qLmwscT1IKTooVitxPkYmJihWPUYtcSksVjwwJiYoVj0wKSxxPU1hdGgubWluKEYtVixzLl93aWR0aCkpO3ZhciBHLFcsWSxYLFo9cy5faGVpZ2h0LCQ9ai5oO2lmKFo+JD8oVT1qLnQsWj0kKTooVStaPk4mJihVPU4tWiksVTwwJiYoVT0wKSxaPU1hdGgubWluKE4tVSxzLl9oZWlnaHQpKSxjLnNldFRyYW5zbGF0ZSh6LFYsVSksRC5vbigiLmRyYWciLG51bGwpLHoub24oIndoZWVsIixudWxsKSxzLl9oZWlnaHQ8PVp8fHQuX2NvbnRleHQuc3RhdGljUGxvdClJLmF0dHIoe3dpZHRoOnEtcy5ib3JkZXJ3aWR0aCxoZWlnaHQ6Wi1zLmJvcmRlcndpZHRoLHg6cy5ib3JkZXJ3aWR0aC8yLHk6cy5ib3JkZXJ3aWR0aC8yfSksYy5zZXRUcmFuc2xhdGUoTywwLDApLFAuc2VsZWN0KCJyZWN0IikuYXR0cih7d2lkdGg6cS0yKnMuYm9yZGVyd2lkdGgsaGVpZ2h0OlotMipzLmJvcmRlcndpZHRoLHg6cy5ib3JkZXJ3aWR0aCx5OnMuYm9yZGVyd2lkdGh9KSxjLnNldENsaXBVcmwoTyxyKSxjLnNldFJlY3QoRCwwLDAsMCwwKSxkZWxldGUgcy5fc2Nyb2xsWTtlbHNle3ZhciBKLEssUT1NYXRoLm1heChwLnNjcm9sbEJhck1pbkhlaWdodCxaKlovcy5faGVpZ2h0KSx0dD1aLVEtMipwLnNjcm9sbEJhck1hcmdpbixldD1zLl9oZWlnaHQtWixydD10dC9ldCxudD1NYXRoLm1pbihzLl9zY3JvbGxZfHwwLGV0KTtJLmF0dHIoe3dpZHRoOnEtMipzLmJvcmRlcndpZHRoK3Auc2Nyb2xsQmFyV2lkdGgrcC5zY3JvbGxCYXJNYXJnaW4saGVpZ2h0Olotcy5ib3JkZXJ3aWR0aCx4OnMuYm9yZGVyd2lkdGgvMix5OnMuYm9yZGVyd2lkdGgvMn0pLFAuc2VsZWN0KCJyZWN0IikuYXR0cih7d2lkdGg6cS0yKnMuYm9yZGVyd2lkdGgrcC5zY3JvbGxCYXJXaWR0aCtwLnNjcm9sbEJhck1hcmdpbixoZWlnaHQ6Wi0yKnMuYm9yZGVyd2lkdGgseDpzLmJvcmRlcndpZHRoLHk6cy5ib3JkZXJ3aWR0aCtudH0pLGMuc2V0Q2xpcFVybChPLHIpLGF0KG50LFEscnQpLHoub24oIndoZWVsIixmdW5jdGlvbigpe2F0KG50PWkuY29uc3RyYWluKHMuX3Njcm9sbFkrbi5ldmVudC5kZWx0YVkvdHQqZXQsMCxldCksUSxydCksMCE9PW50JiZudCE9PWV0JiZuLmV2ZW50LnByZXZlbnREZWZhdWx0KCl9KTt2YXIgaXQ9bi5iZWhhdmlvci5kcmFnKCkub24oImRyYWdzdGFydCIsZnVuY3Rpb24oKXtKPW4uZXZlbnQuc291cmNlRXZlbnQuY2xpZW50WSxLPW50fSkub24oImRyYWciLGZ1bmN0aW9uKCl7dmFyIHQ9bi5ldmVudC5zb3VyY2VFdmVudDsyPT09dC5idXR0b25zfHx0LmN0cmxLZXl8fGF0KG50PWkuY29uc3RyYWluKCh0LmNsaWVudFktSikvcnQrSywwLGV0KSxRLHJ0KX0pO0QuY2FsbChpdCl9aWYodC5fY29udGV4dC5lZGl0cy5sZWdlbmRQb3NpdGlvbil6LmNsYXNzZWQoImN1cnNvci1tb3ZlIiwhMCksbC5pbml0KHtlbGVtZW50Onoubm9kZSgpLGdkOnQscHJlcEZuOmZ1bmN0aW9uKCl7dmFyIHQ9Yy5nZXRUcmFuc2xhdGUoeik7WT10LngsWD10Lnl9LG1vdmVGbjpmdW5jdGlvbih0LGUpe3ZhciByPVkrdCxuPVgrZTtjLnNldFRyYW5zbGF0ZSh6LHIsbiksRz1sLmFsaWduKHIsMCxqLmwsai5sK2oudyxzLnhhbmNob3IpLFc9bC5hbGlnbihuLDAsai50K2ouaCxqLnQscy55YW5jaG9yKX0sZG9uZUZuOmZ1bmN0aW9uKCl7dm9pZCAwIT09RyYmdm9pZCAwIT09VyYmby5jYWxsKCJyZWxheW91dCIsdCx7ImxlZ2VuZC54IjpHLCJsZWdlbmQueSI6V30pfSxjbGlja0ZuOmZ1bmN0aW9uKHIsbil7dmFyIGk9ZS5faW5mb2xheWVyLnNlbGVjdEFsbCgiZy50cmFjZXMiKS5maWx0ZXIoZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybiBuLmNsaWVudFg+PXQubGVmdCYmbi5jbGllbnRYPD10LnJpZ2h0JiZuLmNsaWVudFk+PXQudG9wJiZuLmNsaWVudFk8PXQuYm90dG9tfSk7aS5zaXplKCk+MCYmTSh0LHosaSxyLG4pfX0pfWZ1bmN0aW9uIGF0KGUscixuKXtzLl9zY3JvbGxZPXQuX2Z1bGxMYXlvdXQubGVnZW5kLl9zY3JvbGxZPWUsYy5zZXRUcmFuc2xhdGUoTywwLC1lKSxjLnNldFJlY3QoRCxxLHAuc2Nyb2xsQmFyTWFyZ2luK2UqbixwLnNjcm9sbEJhcldpZHRoLHIpLFAuc2VsZWN0KCJyZWN0IikuYXR0cih7eTpzLmJvcmRlcndpZHRoK2V9KX19fSx7Ii4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiOjY1NiwiLi4vLi4vY29uc3RhbnRzL2ludGVyYWN0aW9ucyI6NjYwLCIuLi8uLi9saWIiOjY4NCwiLi4vLi4vbGliL2V2ZW50cyI6NjcyLCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjcwOCwiLi4vLi4vcGxvdHMvcGxvdHMiOjc5NSwiLi4vLi4vcmVnaXN0cnkiOjgxNywiLi4vY29sb3IiOjU1OCwiLi4vZHJhZ2VsZW1lbnQiOjU4MCwiLi4vZHJhd2luZyI6NTgzLCIuL2FuY2hvcl91dGlscyI6NjEwLCIuL2NvbnN0YW50cyI6NjEyLCIuL2dldF9sZWdlbmRfZGF0YSI6NjE1LCIuL2hhbmRsZV9jbGljayI6NjE2LCIuL2hlbHBlcnMiOjYxNywiLi9zdHlsZSI6NjE5LGQzOjE0N31dLDYxNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi9oZWxwZXJzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsYSxvPXt9LHM9W10sbD0hMSxjPXt9LHU9MDtmdW5jdGlvbiBoKHQscil7aWYoIiIhPT10JiZpLmlzR3JvdXBlZChlKSktMT09PXMuaW5kZXhPZih0KT8ocy5wdXNoKHQpLGw9ITAsb1t0XT1bW3JdXSk6b1t0XS5wdXNoKFtyXSk7ZWxzZXt2YXIgbj0ifn5pIit1O3MucHVzaChuKSxvW25dPVtbcl1dLHUrK319Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGY9dFtyXSxwPWZbMF0sZD1wLnRyYWNlLGc9ZC5sZWdlbmRncm91cDtpZihpLmxlZ2VuZEdldHNUcmFjZShkKSYmZC5zaG93bGVnZW5kKWlmKG4udHJhY2VJcyhkLCJwaWUiKSlmb3IoY1tnXXx8KGNbZ109e30pLGE9MDthPGYubGVuZ3RoO2ErKyl7dmFyIG09ZlthXS5sYWJlbDtjW2ddW21dfHwoaChnLHtsYWJlbDptLGNvbG9yOmZbYV0uY29sb3IsaTpmW2FdLmksdHJhY2U6ZH0pLGNbZ11bbV09ITApfWVsc2UgaChnLHApfWlmKCFzLmxlbmd0aClyZXR1cm5bXTt2YXIgdix5LHg9cy5sZW5ndGg7aWYobCYmaS5pc0dyb3VwZWQoZSkpZm9yKHk9bmV3IEFycmF5KHgpLHI9MDtyPHg7cisrKXY9b1tzW3JdXSx5W3JdPWkuaXNSZXZlcnNlZChlKT92LnJldmVyc2UoKTp2O2Vsc2V7Zm9yKHk9W25ldyBBcnJheSh4KV0scj0wO3I8eDtyKyspdj1vW3Nbcl1dWzBdLHlbMF1baS5pc1JldmVyc2VkKGUpP3gtci0xOnJdPXY7eD0xfXJldHVybiBlLl9sZ3JvdXBzTGVuZ3RoPXgseX19LHsiLi4vLi4vcmVnaXN0cnkiOjgxNywiLi9oZWxwZXJzIjo2MTd9XSw2MTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9yZWdpc3RyeSIpLGE9ITA7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtpZighZS5fZHJhZ2dlZCYmIWUuX2VkaXRpbmcpe3ZhciBvLHMsbCxjLHUsaD1lLl9mdWxsTGF5b3V0LmhpZGRlbmxhYmVscz9lLl9mdWxsTGF5b3V0LmhpZGRlbmxhYmVscy5zbGljZSgpOltdLGY9dC5kYXRhKClbMF1bMF0scD1lLl9mdWxsRGF0YSxkPWYudHJhY2UsZz1kLmxlZ2VuZGdyb3VwLG09e30sdj1bXSx5PVtdLHg9W107aWYoMT09PXImJmEmJmUuZGF0YSYmZS5fY29udGV4dC5zaG93VGlwcz8obi5ub3RpZmllcihuLl8oZSwiRG91YmxlLWNsaWNrIG9uIGxlZ2VuZCB0byBpc29sYXRlIG9uZSB0cmFjZSIpLCJsb25nIiksYT0hMSk6YT0hMSxpLnRyYWNlSXMoZCwicGllIikpe3ZhciBiPWYubGFiZWwsXz1oLmluZGV4T2YoYik7MT09PXI/LTE9PT1fP2gucHVzaChiKTpoLnNwbGljZShfLDEpOjI9PT1yJiYoaD1bXSxlLmNhbGNkYXRhWzBdLmZvckVhY2goZnVuY3Rpb24odCl7YiE9PXQubGFiZWwmJmgucHVzaCh0LmxhYmVsKX0pLGUuX2Z1bGxMYXlvdXQuaGlkZGVubGFiZWxzJiZlLl9mdWxsTGF5b3V0LmhpZGRlbmxhYmVscy5sZW5ndGg9PT1oLmxlbmd0aCYmLTE9PT1fJiYoaD1bXSkpLGkuY2FsbCgicmVsYXlvdXQiLGUsImhpZGRlbmxhYmVscyIsaCl9ZWxzZXt2YXIgdyxrPWcmJmcubGVuZ3RoLE09W107aWYoaylmb3Iobz0wO288cC5sZW5ndGg7bysrKSh3PXBbb10pLnZpc2libGUmJncubGVnZW5kZ3JvdXA9PT1nJiZNLnB1c2gobyk7aWYoMT09PXIpe3ZhciBBO3N3aXRjaChkLnZpc2libGUpe2Nhc2UhMDpBPSJsZWdlbmRvbmx5IjticmVhaztjYXNlITE6QT0hMTticmVhaztjYXNlImxlZ2VuZG9ubHkiOkE9ITB9aWYoaylmb3Iobz0wO288cC5sZW5ndGg7bysrKSExIT09cFtvXS52aXNpYmxlJiZwW29dLmxlZ2VuZGdyb3VwPT09ZyYmUChwW29dLEEpO2Vsc2UgUChkLEEpfWVsc2UgaWYoMj09PXIpe3ZhciBULFMsRT0hMDtmb3Iobz0wO288cC5sZW5ndGg7bysrKWlmKCEocFtvXT09PWQpJiYhKFQ9ayYmcFtvXS5sZWdlbmRncm91cD09PWcpJiYhMD09PXBbb10udmlzaWJsZSYmIWkudHJhY2VJcyhwW29dLCJub3RMZWdlbmRJc29sYXRhYmxlIikpe0U9ITE7YnJlYWt9Zm9yKG89MDtvPHAubGVuZ3RoO28rKylpZighMSE9PXBbb10udmlzaWJsZSYmIWkudHJhY2VJcyhwW29dLCJub3RMZWdlbmRJc29sYXRhYmxlIikpc3dpdGNoKGQudmlzaWJsZSl7Y2FzZSJsZWdlbmRvbmx5IjpQKHBbb10sITApO2JyZWFrO2Nhc2UhMDpTPSEhRXx8ImxlZ2VuZG9ubHkiLFQ9cFtvXT09PWR8fGsmJnBbb10ubGVnZW5kZ3JvdXA9PT1nLFAocFtvXSwhIVR8fFMpfX1mb3Iobz0wO288eS5sZW5ndGg7bysrKWlmKGw9eVtvXSl7dmFyIEM9bC5jb25zdHJ1Y3RVcGRhdGUoKSxMPU9iamVjdC5rZXlzKEMpO2ZvcihzPTA7czxMLmxlbmd0aDtzKyspYz1MW3NdLChtW2NdPW1bY118fFtdKVt4W29dXT1DW2NdfWZvcih1PU9iamVjdC5rZXlzKG0pLG89MDtvPHUubGVuZ3RoO28rKylmb3IoYz11W29dLHM9MDtzPHYubGVuZ3RoO3MrKyltW2NdLmhhc093blByb3BlcnR5KHMpfHwobVtjXVtzXT12b2lkIDApO2kuY2FsbCgicmVzdHlsZSIsZSxtLHYpfX1mdW5jdGlvbiB6KHQsZSxyKXt2YXIgbj12LmluZGV4T2YodCksaT1tW2VdO3JldHVybiBpfHwoaT1tW2VdPVtdKSwtMT09PXYuaW5kZXhPZih0KSYmKHYucHVzaCh0KSxuPXYubGVuZ3RoLTEpLGlbbl09cixufWZ1bmN0aW9uIFAodCxlKXt2YXIgcj10Ll9mdWxsSW5wdXQ7aWYoaS5oYXNUcmFuc2Zvcm0ociwiZ3JvdXBieSIpKXt2YXIgYT15W3IuaW5kZXhdO2lmKCFhKXt2YXIgbz1pLmdldFRyYW5zZm9ybUluZGljZXMociwiZ3JvdXBieSIpLHM9b1tvLmxlbmd0aC0xXTthPW4ua2V5ZWRDb250YWluZXIociwidHJhbnNmb3Jtc1siK3MrIl0uc3R5bGVzIiwidGFyZ2V0IiwidmFsdWUudmlzaWJsZSIpLHlbci5pbmRleF09YX12YXIgbD1hLmdldCh0Ll9ncm91cCk7dm9pZCAwPT09bCYmKGw9ITApLCExIT09bCYmYS5zZXQodC5fZ3JvdXAsZSkseFtyLmluZGV4XT16KHIuaW5kZXgsInZpc2libGUiLCExIT09ci52aXNpYmxlKX1lbHNle3ZhciBjPSExIT09ci52aXNpYmxlJiZlO3ooci5pbmRleCwidmlzaWJsZSIsYyl9fX19LHsiLi4vLi4vbGliIjo2ODQsIi4uLy4uL3JlZ2lzdHJ5Ijo4MTd9XSw2MTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ci5sZWdlbmRHZXRzVHJhY2U9ZnVuY3Rpb24odCl7cmV0dXJuIHQudmlzaWJsZSYmdm9pZCAwIT09dC5zaG93bGVnZW5kfSxyLmlzR3JvdXBlZD1mdW5jdGlvbih0KXtyZXR1cm4tMSE9PSh0LnRyYWNlb3JkZXJ8fCIiKS5pbmRleE9mKCJncm91cGVkIil9LHIuaXNWZXJ0aWNhbD1mdW5jdGlvbih0KXtyZXR1cm4iaCIhPT10Lm9yaWVudGF0aW9ufSxyLmlzUmV2ZXJzZWQ9ZnVuY3Rpb24odCl7cmV0dXJuLTEhPT0odC50cmFjZW9yZGVyfHwiIikuaW5kZXhPZigicmV2ZXJzZWQiKX19LHt9XSw2MTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJjb21wb25lbnQiLG5hbWU6ImxlZ2VuZCIsbGF5b3V0QXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlMYXlvdXREZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksZHJhdzp0KCIuL2RyYXciKSxzdHlsZTp0KCIuL3N0eWxlIil9fSx7Ii4vYXR0cmlidXRlcyI6NjExLCIuL2RlZmF1bHRzIjo2MTMsIi4vZHJhdyI6NjE0LCIuL3N0eWxlIjo2MTl9XSw2MTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYT10KCIuLi8uLi9saWIiKSxvPXQoIi4uL2RyYXdpbmciKSxzPXQoIi4uL2NvbG9yIiksbD10KCIuLi8uLi90cmFjZXMvc2NhdHRlci9zdWJ0eXBlcyIpLGM9dCgiLi4vLi4vdHJhY2VzL3BpZS9zdHlsZV9vbmUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt0LmVhY2goZnVuY3Rpb24odCl7dmFyIGU9bi5zZWxlY3QodGhpcykscj1hLmVuc3VyZVNpbmdsZShlLCJnIiwibGF5ZXJzIik7ci5zdHlsZSgib3BhY2l0eSIsdFswXS50cmFjZS5vcGFjaXR5KSxyLnNlbGVjdEFsbCgiZy5sZWdlbmRmaWxsIikuZGF0YShbdF0pLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgibGVnZW5kZmlsbCIsITApLHIuc2VsZWN0QWxsKCJnLmxlZ2VuZGxpbmVzIikuZGF0YShbdF0pLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgibGVnZW5kbGluZXMiLCEwKTt2YXIgaT1yLnNlbGVjdEFsbCgiZy5sZWdlbmRzeW1ib2xzIikuZGF0YShbdF0pO2kuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJsZWdlbmRzeW1ib2xzIiwhMCksaS5zZWxlY3RBbGwoImcubGVnZW5kcG9pbnRzIikuZGF0YShbdF0pLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgibGVnZW5kcG9pbnRzIiwhMCl9KS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0udHJhY2Uscj1lLm1hcmtlcnx8e30sYT1yLmxpbmV8fHt9LG89bi5zZWxlY3QodGhpcykuc2VsZWN0KCJnLmxlZ2VuZHBvaW50cyIpLnNlbGVjdEFsbCgicGF0aC5sZWdlbmRiYXIiKS5kYXRhKGkudHJhY2VJcyhlLCJiYXIiKT9bdF06W10pO28uZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJsZWdlbmRiYXIiLCEwKS5hdHRyKCJkIiwiTTYsNkgtNlYtNkg2WiIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgyMCwwKSIpLG8uZXhpdCgpLnJlbW92ZSgpLG8uZWFjaChmdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0aGlzKSxpPXRbMF0sbz0oaS5tbHcrMXx8YS53aWR0aCsxKS0xO2Uuc3R5bGUoInN0cm9rZS13aWR0aCIsbysicHgiKS5jYWxsKHMuZmlsbCxpLm1jfHxyLmNvbG9yKSxvJiZlLmNhbGwocy5zdHJva2UsaS5tbGN8fGEuY29sb3IpfSl9KS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0udHJhY2Uscj1uLnNlbGVjdCh0aGlzKS5zZWxlY3QoImcubGVnZW5kcG9pbnRzIikuc2VsZWN0QWxsKCJwYXRoLmxlZ2VuZGJveCIpLmRhdGEoaS50cmFjZUlzKGUsImJveC12aW9saW4iKSYmZS52aXNpYmxlP1t0XTpbXSk7ci5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoImxlZ2VuZGJveCIsITApLmF0dHIoImQiLCJNNiw2SC02Vi02SDZaIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDIwLDApIiksci5leGl0KCkucmVtb3ZlKCksci5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9ZS5saW5lLndpZHRoLHI9bi5zZWxlY3QodGhpcyk7ci5zdHlsZSgic3Ryb2tlLXdpZHRoIix0KyJweCIpLmNhbGwocy5maWxsLGUuZmlsbGNvbG9yKSx0JiZzLnN0cm9rZShyLGUubGluZS5jb2xvcil9KX0pLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9dFswXS50cmFjZSxyPW4uc2VsZWN0KHRoaXMpLnNlbGVjdCgiZy5sZWdlbmRwb2ludHMiKS5zZWxlY3RBbGwoInBhdGgubGVnZW5kcGllIikuZGF0YShpLnRyYWNlSXMoZSwicGllIikmJmUudmlzaWJsZT9bdF06W10pO3IuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJsZWdlbmRwaWUiLCEwKS5hdHRyKCJkIiwiTTYsNkgtNlYtNkg2WiIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgyMCwwKSIpLHIuZXhpdCgpLnJlbW92ZSgpLHIuc2l6ZSgpJiZyLmNhbGwoYyx0WzBdLGUpfSkuZWFjaChmdW5jdGlvbih0KXt2YXIgZT10WzBdLnRyYWNlLHI9ZS52aXNpYmxlJiZlLmZpbGwmJiJub25lIiE9PWUuZmlsbCxpPWwuaGFzTGluZXMoZSksYT1lLmNvbnRvdXJzO2EmJiJjb25zdHJhaW50Ij09PWEudHlwZSYmKGk9YS5zaG93bGluZXMscj0iPSIhPT1hLl9vcGVyYXRpb24pO3ZhciBzPW4uc2VsZWN0KHRoaXMpLnNlbGVjdCgiLmxlZ2VuZGZpbGwiKS5zZWxlY3RBbGwoInBhdGgiKS5kYXRhKHI/W3RdOltdKTtzLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZCgianMtZmlsbCIsITApLHMuZXhpdCgpLnJlbW92ZSgpLHMuYXR0cigiZCIsIk01LDBoMzB2NmgtMzB6IikuY2FsbChvLmZpbGxHcm91cFN0eWxlKTt2YXIgYz1uLnNlbGVjdCh0aGlzKS5zZWxlY3QoIi5sZWdlbmRsaW5lcyIpLnNlbGVjdEFsbCgicGF0aCIpLmRhdGEoaT9bdF06W10pO2MuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJqcy1saW5lIiwhMCkuYXR0cigiZCIsIk01LDBoMzAiKSxjLmV4aXQoKS5yZW1vdmUoKSxjLmNhbGwoby5saW5lR3JvdXBTdHlsZSl9KS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciByLGkscz10WzBdLGM9cy50cmFjZSx1PWwuaGFzTWFya2VycyhjKSxoPWwuaGFzVGV4dChjKSxmPWwuaGFzTGluZXMoYyk7ZnVuY3Rpb24gcCh0LGUscil7dmFyIG49YS5uZXN0ZWRQcm9wZXJ0eShjLHQpLmdldCgpLGk9QXJyYXkuaXNBcnJheShuKSYmZT9lKG4pOm47aWYocil7aWYoaTxyWzBdKXJldHVybiByWzBdO2lmKGk+clsxXSlyZXR1cm4gclsxXX1yZXR1cm4gaX1mdW5jdGlvbiBkKHQpe3JldHVybiB0WzBdfWlmKHV8fGh8fGYpe3ZhciBnPXt9LG09e307dSYmKGcubWM9cCgibWFya2VyLmNvbG9yIixkKSxnLm14PXAoIm1hcmtlci5zeW1ib2wiLGQpLGcubW89cCgibWFya2VyLm9wYWNpdHkiLGEubWVhbixbLjIsMV0pLGcubXM9cCgibWFya2VyLnNpemUiLGEubWVhbixbMiwxNl0pLGcubWxjPXAoIm1hcmtlci5saW5lLmNvbG9yIixkKSxnLm1sdz1wKCJtYXJrZXIubGluZS53aWR0aCIsYS5tZWFuLFswLDVdKSxtLm1hcmtlcj17c2l6ZXJlZjoxLHNpemVtaW46MSxzaXplbW9kZToiZGlhbWV0ZXIifSksZiYmKG0ubGluZT17d2lkdGg6cCgibGluZS53aWR0aCIsZCxbMCwxMF0pfSksaCYmKGcudHg9IkFhIixnLnRwPXAoInRleHRwb3NpdGlvbiIsZCksZy50cz0xMCxnLnRjPXAoInRleHRmb250LmNvbG9yIixkKSxnLnRmPXAoInRleHRmb250LmZhbWlseSIsZCkpLHI9W2EubWluRXh0ZW5kKHMsZyldLChpPWEubWluRXh0ZW5kKGMsbSkpLnNlbGVjdGVkcG9pbnRzPW51bGx9dmFyIHY9bi5zZWxlY3QodGhpcykuc2VsZWN0KCJnLmxlZ2VuZHBvaW50cyIpLHk9di5zZWxlY3RBbGwoInBhdGguc2NhdHRlcnB0cyIpLmRhdGEodT9yOltdKTt5LmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZCgic2NhdHRlcnB0cyIsITApLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgyMCwwKSIpLHkuZXhpdCgpLnJlbW92ZSgpLHkuY2FsbChvLnBvaW50U3R5bGUsaSxlKSx1JiYoclswXS5tcmM9Myk7dmFyIHg9di5zZWxlY3RBbGwoImcucG9pbnR0ZXh0IikuZGF0YShoP3I6W10pO3guZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJwb2ludHRleHQiLCEwKS5hcHBlbmQoInRleHQiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMjAsMCkiKSx4LmV4aXQoKS5yZW1vdmUoKSx4LnNlbGVjdEFsbCgidGV4dCIpLmNhbGwoby50ZXh0UG9pbnRTdHlsZSxpLGUpfSkuZWFjaChmdW5jdGlvbih0KXt2YXIgZT10WzBdLnRyYWNlLHI9bi5zZWxlY3QodGhpcykuc2VsZWN0KCJnLmxlZ2VuZHBvaW50cyIpLnNlbGVjdEFsbCgicGF0aC5sZWdlbmRjYW5kbGUiKS5kYXRhKCJjYW5kbGVzdGljayI9PT1lLnR5cGUmJmUudmlzaWJsZT9bdCx0XTpbXSk7ci5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoImxlZ2VuZGNhbmRsZSIsITApLmF0dHIoImQiLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU/Ik0tMTUsMEgtOE0tOCw2Vi02SDhaIjoiTTE1LDBIOE04LC02VjZILThaIn0pLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgyMCwwKSIpLnN0eWxlKCJzdHJva2UtbWl0ZXJsaW1pdCIsMSksci5leGl0KCkucmVtb3ZlKCksci5lYWNoKGZ1bmN0aW9uKHQscil7dmFyIGk9ZVtyPyJpbmNyZWFzaW5nIjoiZGVjcmVhc2luZyJdLGE9aS5saW5lLndpZHRoLG89bi5zZWxlY3QodGhpcyk7by5zdHlsZSgic3Ryb2tlLXdpZHRoIixhKyJweCIpLmNhbGwocy5maWxsLGkuZmlsbGNvbG9yKSxhJiZzLnN0cm9rZShvLGkubGluZS5jb2xvcil9KX0pLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9dFswXS50cmFjZSxyPW4uc2VsZWN0KHRoaXMpLnNlbGVjdCgiZy5sZWdlbmRwb2ludHMiKS5zZWxlY3RBbGwoInBhdGgubGVnZW5kb2hsYyIpLmRhdGEoIm9obGMiPT09ZS50eXBlJiZlLnZpc2libGU/W3QsdF06W10pO3IuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJsZWdlbmRvaGxjIiwhMCkuYXR0cigiZCIsZnVuY3Rpb24odCxlKXtyZXR1cm4gZT8iTS0xNSwwSDBNLTgsLTZWMCI6Ik0xNSwwSDBNOCw2VjAifSkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDIwLDApIikuc3R5bGUoInN0cm9rZS1taXRlcmxpbWl0IiwxKSxyLmV4aXQoKS5yZW1vdmUoKSxyLmVhY2goZnVuY3Rpb24odCxyKXt2YXIgaT1lW3I/ImluY3JlYXNpbmciOiJkZWNyZWFzaW5nIl0sYT1pLmxpbmUud2lkdGgsbD1uLnNlbGVjdCh0aGlzKTtsLnN0eWxlKCJmaWxsIiwibm9uZSIpLmNhbGwoby5kYXNoTGluZSxpLmxpbmUuZGFzaCxhKSxhJiZzLnN0cm9rZShsLGkubGluZS5jb2xvcil9KX0pfX0seyIuLi8uLi9saWIiOjY4NCwiLi4vLi4vcmVnaXN0cnkiOjgxNywiLi4vLi4vdHJhY2VzL3BpZS9zdHlsZV9vbmUiOjEwMDEsIi4uLy4uL3RyYWNlcy9zY2F0dGVyL3N1YnR5cGVzIjoxMDM3LCIuLi9jb2xvciI6NTU4LCIuLi9kcmF3aW5nIjo1ODMsZDM6MTQ3fV0sNjIwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3JlZ2lzdHJ5IiksaT10KCIuLi8uLi9wbG90cy9wbG90cyIpLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIiksbz10KCIuLi8uLi9saWIiKSxzPXQoIi4uLy4uLy4uL2J1aWxkL3Bsb3RpY29uIiksbD1vLl8sYz1lLmV4cG9ydHM9e307ZnVuY3Rpb24gdSh0LGUpe3ZhciByLGksbz1lLmN1cnJlbnRUYXJnZXQscz1vLmdldEF0dHJpYnV0ZSgiZGF0YS1hdHRyIiksbD1vLmdldEF0dHJpYnV0ZSgiZGF0YS12YWwiKXx8ITAsYz10Ll9mdWxsTGF5b3V0LHU9e30saD1hLmxpc3QodCxudWxsLCEwKSxmPSJvbiI7aWYoInpvb20iPT09cyl7dmFyIHAsZD0iaW4iPT09bD8uNToyLGc9KDErZCkvMixtPSgxLWQpLzI7Zm9yKGk9MDtpPGgubGVuZ3RoO2krKylpZighKHI9aFtpXSkuZml4ZWRyYW5nZSlpZihwPXIuX25hbWUsImF1dG8iPT09bCl1W3ArIi5hdXRvcmFuZ2UiXT0hMDtlbHNlIGlmKCJyZXNldCI9PT1sKXtpZih2b2lkIDA9PT1yLl9yYW5nZUluaXRpYWwpdVtwKyIuYXV0b3JhbmdlIl09ITA7ZWxzZXt2YXIgdj1yLl9yYW5nZUluaXRpYWwuc2xpY2UoKTt1W3ArIi5yYW5nZVswXSJdPXZbMF0sdVtwKyIucmFuZ2VbMV0iXT12WzFdfXZvaWQgMCE9PXIuX3Nob3dTcGlrZUluaXRpYWwmJih1W3ArIi5zaG93c3Bpa2VzIl09ci5fc2hvd1NwaWtlSW5pdGlhbCwib24iIT09Znx8ci5fc2hvd1NwaWtlSW5pdGlhbHx8KGY9Im9mZiIpKX1lbHNle3ZhciB5PVtyLnIybChyLnJhbmdlWzBdKSxyLnIybChyLnJhbmdlWzFdKV0seD1bZyp5WzBdK20qeVsxXSxnKnlbMV0rbSp5WzBdXTt1W3ArIi5yYW5nZVswXSJdPXIubDJyKHhbMF0pLHVbcCsiLnJhbmdlWzFdIl09ci5sMnIoeFsxXSl9Yy5fY2FydGVzaWFuU3Bpa2VzRW5hYmxlZD1mfWVsc2V7aWYoImhvdmVybW9kZSIhPT1zfHwieCIhPT1sJiYieSIhPT1sKXtpZigiaG92ZXJtb2RlIj09PXMmJiJjbG9zZXN0Ij09PWwpe2ZvcihpPTA7aTxoLmxlbmd0aDtpKyspcj1oW2ldLCJvbiIhPT1mfHxyLnNob3dzcGlrZXN8fChmPSJvZmYiKTtjLl9jYXJ0ZXNpYW5TcGlrZXNFbmFibGVkPWZ9fWVsc2UgbD1jLl9pc0hvcml6PyJ5IjoieCIsby5zZXRBdHRyaWJ1dGUoImRhdGEtdmFsIixsKTt1W3NdPWx9bi5jYWxsKCJyZWxheW91dCIsdCx1KX1mdW5jdGlvbiBoKHQsZSl7Zm9yKHZhciByPWUuY3VycmVudFRhcmdldCxpPXIuZ2V0QXR0cmlidXRlKCJkYXRhLWF0dHIiKSxhPXIuZ2V0QXR0cmlidXRlKCJkYXRhLXZhbCIpfHwhMCxvPXQuX2Z1bGxMYXlvdXQuX3N1YnBsb3RzLmdsM2Qscz17fSxsPWkuc3BsaXQoIi4iKSxjPTA7YzxvLmxlbmd0aDtjKyspc1tvW2NdKyIuIitsWzFdXT1hO3ZhciB1PSJwYW4iPT09YT9hOiJ6b29tIjtzLmRyYWdtb2RlPXUsbi5jYWxsKCJyZWxheW91dCIsdCxzKX1mdW5jdGlvbiBmKHQsZSl7Zm9yKHZhciByPWUuY3VycmVudFRhcmdldC5nZXRBdHRyaWJ1dGUoImRhdGEtYXR0ciIpLGk9dC5fZnVsbExheW91dCxhPWkuX3N1YnBsb3RzLmdsM2Qscz17fSxsPTA7bDxhLmxlbmd0aDtsKyspe3ZhciBjPWFbbF0sdT1jKyIuY2FtZXJhIixoPWlbY10uX3NjZW5lOyJyZXNldERlZmF1bHQiPT09cj9zW3VdPW51bGw6InJlc2V0TGFzdFNhdmUiPT09ciYmKHNbdV09by5leHRlbmREZWVwKHt9LGguY2FtZXJhSW5pdGlhbCkpfW4uY2FsbCgicmVsYXlvdXQiLHQscyl9ZnVuY3Rpb24gcCh0LGUpe3ZhciByPWUuY3VycmVudFRhcmdldCxpPXIuX3ByZXZpb3VzVmFsfHwhMSxhPXQubGF5b3V0LHM9dC5fZnVsbExheW91dCxsPXMuX3N1YnBsb3RzLmdsM2QsYz1bInhheGlzIiwieWF4aXMiLCJ6YXhpcyJdLHU9WyJzaG93c3Bpa2VzIiwic3Bpa2VzaWRlcyIsInNwaWtldGhpY2tuZXNzIiwic3Bpa2Vjb2xvciJdLGg9e30sZj17fSxwPXt9O2lmKGkpcD1vLmV4dGVuZERlZXAoYSxpKSxyLl9wcmV2aW91c1ZhbD1udWxsO2Vsc2V7cD17ImFsbGF4ZXMuc2hvd3NwaWtlcyI6ITF9O2Zvcih2YXIgZD0wO2Q8bC5sZW5ndGg7ZCsrKXt2YXIgZz1sW2RdLG09c1tnXSx2PWhbZ109e307di5ob3Zlcm1vZGU9bS5ob3Zlcm1vZGUscFtnKyIuaG92ZXJtb2RlIl09ITE7Zm9yKHZhciB5PTA7eTwzO3krKyl7dmFyIHg9Y1t5XTtmPXZbeF09e307Zm9yKHZhciBiPTA7Yjx1Lmxlbmd0aDtiKyspe3ZhciBfPXVbYl07ZltfXT1tW3hdW19dfX19ci5fcHJldmlvdXNWYWw9by5leHRlbmREZWVwKHt9LGgpfW4uY2FsbCgicmVsYXlvdXQiLHQscCl9ZnVuY3Rpb24gZCh0LGUpe2Zvcih2YXIgcj1lLmN1cnJlbnRUYXJnZXQsaT1yLmdldEF0dHJpYnV0ZSgiZGF0YS1hdHRyIiksYT1yLmdldEF0dHJpYnV0ZSgiZGF0YS12YWwiKXx8ITAsbz10Ll9mdWxsTGF5b3V0LHM9by5fc3VicGxvdHMuZ2VvLGw9MDtsPHMubGVuZ3RoO2wrKyl7dmFyIGM9c1tsXSx1PW9bY107aWYoInpvb20iPT09aSl7dmFyIGg9dS5wcm9qZWN0aW9uLnNjYWxlLGY9ImluIj09PWE/MipoOi41Kmg7bi5jYWxsKCJyZWxheW91dCIsdCxjKyIucHJvamVjdGlvbi5zY2FsZSIsZil9ZWxzZSJyZXNldCI9PT1pJiZtKHQsImdlbyIpfX1mdW5jdGlvbiBnKHQpe3ZhciBlLHI9dC5fZnVsbExheW91dDtlPXIuX2hhcygiY2FydGVzaWFuIik/ci5faXNIb3Jpej8ieSI6IngiOiJjbG9zZXN0Ijt2YXIgaT0hdC5fZnVsbExheW91dC5ob3Zlcm1vZGUmJmU7bi5jYWxsKCJyZWxheW91dCIsdCwiaG92ZXJtb2RlIixpKX1mdW5jdGlvbiBtKHQsZSl7Zm9yKHZhciByPXQuX2Z1bGxMYXlvdXQsaT1yLl9zdWJwbG90c1tlXSxhPXt9LG89MDtvPGkubGVuZ3RoO28rKylmb3IodmFyIHM9aVtvXSxsPXJbc10uX3N1YnBsb3Qudmlld0luaXRpYWwsYz1PYmplY3Qua2V5cyhsKSx1PTA7dTxjLmxlbmd0aDt1Kyspe3ZhciBoPWNbdV07YVtzKyIuIitoXT1sW2hdfW4uY2FsbCgicmVsYXlvdXQiLHQsYSl9Yy50b0ltYWdlPXtuYW1lOiJ0b0ltYWdlIix0aXRsZTpmdW5jdGlvbih0KXt2YXIgZT0odC5fY29udGV4dC50b0ltYWdlQnV0dG9uT3B0aW9uc3x8e30pLmZvcm1hdHx8InBuZyI7cmV0dXJuIGwodCwicG5nIj09PWU/IkRvd25sb2FkIHBsb3QgYXMgYSBwbmciOiJEb3dubG9hZCBwbG90Iil9LGljb246cy5jYW1lcmEsY2xpY2s6ZnVuY3Rpb24odCl7dmFyIGU9dC5fY29udGV4dC50b0ltYWdlQnV0dG9uT3B0aW9ucyxyPXtmb3JtYXQ6ZS5mb3JtYXR8fCJwbmcifTtvLm5vdGlmaWVyKGwodCwiVGFraW5nIHNuYXBzaG90IC0gdGhpcyBtYXkgdGFrZSBhIGZldyBzZWNvbmRzIiksImxvbmciKSwic3ZnIiE9PXIuZm9ybWF0JiZvLmlzSUUoKSYmKG8ubm90aWZpZXIobCh0LCJJRSBvbmx5IHN1cHBvcnRzIHN2Zy4gIENoYW5naW5nIGZvcm1hdCB0byBzdmcuIiksImxvbmciKSxyLmZvcm1hdD0ic3ZnIiksWyJmaWxlbmFtZSIsIndpZHRoIiwiaGVpZ2h0Iiwic2NhbGUiXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2VbdF0mJihyW3RdPWVbdF0pfSksbi5jYWxsKCJkb3dubG9hZEltYWdlIix0LHIpLnRoZW4oZnVuY3Rpb24oZSl7by5ub3RpZmllcihsKHQsIlNuYXBzaG90IHN1Y2NlZWRlZCIpKyIgLSAiK2UsImxvbmciKX0pLmNhdGNoKGZ1bmN0aW9uKCl7by5ub3RpZmllcihsKHQsIlNvcnJ5LCB0aGVyZSB3YXMgYSBwcm9ibGVtIGRvd25sb2FkaW5nIHlvdXIgc25hcHNob3QhIiksImxvbmciKX0pfX0sYy5zZW5kRGF0YVRvQ2xvdWQ9e25hbWU6InNlbmREYXRhVG9DbG91ZCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwiRWRpdCBpbiBDaGFydCBTdHVkaW8iKX0saWNvbjpzLmRpc2ssY2xpY2s6ZnVuY3Rpb24odCl7aS5zZW5kRGF0YVRvQ2xvdWQodCl9fSxjLnpvb20yZD17bmFtZToiem9vbTJkIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LCJab29tIil9LGF0dHI6ImRyYWdtb2RlIix2YWw6Inpvb20iLGljb246cy56b29tYm94LGNsaWNrOnV9LGMucGFuMmQ9e25hbWU6InBhbjJkIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LCJQYW4iKX0sYXR0cjoiZHJhZ21vZGUiLHZhbDoicGFuIixpY29uOnMucGFuLGNsaWNrOnV9LGMuc2VsZWN0MmQ9e25hbWU6InNlbGVjdDJkIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LCJCb3ggU2VsZWN0Iil9LGF0dHI6ImRyYWdtb2RlIix2YWw6InNlbGVjdCIsaWNvbjpzLnNlbGVjdGJveCxjbGljazp1fSxjLmxhc3NvMmQ9e25hbWU6Imxhc3NvMmQiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBsKHQsIkxhc3NvIFNlbGVjdCIpfSxhdHRyOiJkcmFnbW9kZSIsdmFsOiJsYXNzbyIsaWNvbjpzLmxhc3NvLGNsaWNrOnV9LGMuem9vbUluMmQ9e25hbWU6Inpvb21JbjJkIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LCJab29tIGluIil9LGF0dHI6Inpvb20iLHZhbDoiaW4iLGljb246cy56b29tX3BsdXMsY2xpY2s6dX0sYy56b29tT3V0MmQ9e25hbWU6Inpvb21PdXQyZCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwiWm9vbSBvdXQiKX0sYXR0cjoiem9vbSIsdmFsOiJvdXQiLGljb246cy56b29tX21pbnVzLGNsaWNrOnV9LGMuYXV0b1NjYWxlMmQ9e25hbWU6ImF1dG9TY2FsZTJkIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LCJBdXRvc2NhbGUiKX0sYXR0cjoiem9vbSIsdmFsOiJhdXRvIixpY29uOnMuYXV0b3NjYWxlLGNsaWNrOnV9LGMucmVzZXRTY2FsZTJkPXtuYW1lOiJyZXNldFNjYWxlMmQiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBsKHQsIlJlc2V0IGF4ZXMiKX0sYXR0cjoiem9vbSIsdmFsOiJyZXNldCIsaWNvbjpzLmhvbWUsY2xpY2s6dX0sYy5ob3ZlckNsb3Nlc3RDYXJ0ZXNpYW49e25hbWU6ImhvdmVyQ2xvc2VzdENhcnRlc2lhbiIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwiU2hvdyBjbG9zZXN0IGRhdGEgb24gaG92ZXIiKX0sYXR0cjoiaG92ZXJtb2RlIix2YWw6ImNsb3Nlc3QiLGljb246cy50b29sdGlwX2Jhc2ljLGdyYXZpdHk6Im5lIixjbGljazp1fSxjLmhvdmVyQ29tcGFyZUNhcnRlc2lhbj17bmFtZToiaG92ZXJDb21wYXJlQ2FydGVzaWFuIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LCJDb21wYXJlIGRhdGEgb24gaG92ZXIiKX0sYXR0cjoiaG92ZXJtb2RlIix2YWw6ZnVuY3Rpb24odCl7cmV0dXJuIHQuX2Z1bGxMYXlvdXQuX2lzSG9yaXo/InkiOiJ4In0saWNvbjpzLnRvb2x0aXBfY29tcGFyZSxncmF2aXR5OiJuZSIsY2xpY2s6dX0sYy56b29tM2Q9e25hbWU6Inpvb20zZCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwiWm9vbSIpfSxhdHRyOiJzY2VuZS5kcmFnbW9kZSIsdmFsOiJ6b29tIixpY29uOnMuem9vbWJveCxjbGljazpofSxjLnBhbjNkPXtuYW1lOiJwYW4zZCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwiUGFuIil9LGF0dHI6InNjZW5lLmRyYWdtb2RlIix2YWw6InBhbiIsaWNvbjpzLnBhbixjbGljazpofSxjLm9yYml0Um90YXRpb249e25hbWU6Im9yYml0Um90YXRpb24iLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBsKHQsIk9yYml0YWwgcm90YXRpb24iKX0sYXR0cjoic2NlbmUuZHJhZ21vZGUiLHZhbDoib3JiaXQiLGljb246c1siM2Rfcm90YXRlIl0sY2xpY2s6aH0sYy50YWJsZVJvdGF0aW9uPXtuYW1lOiJ0YWJsZVJvdGF0aW9uIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LCJUdXJudGFibGUgcm90YXRpb24iKX0sYXR0cjoic2NlbmUuZHJhZ21vZGUiLHZhbDoidHVybnRhYmxlIixpY29uOnNbInotYXhpcyJdLGNsaWNrOmh9LGMucmVzZXRDYW1lcmFEZWZhdWx0M2Q9e25hbWU6InJlc2V0Q2FtZXJhRGVmYXVsdDNkIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LCJSZXNldCBjYW1lcmEgdG8gZGVmYXVsdCIpfSxhdHRyOiJyZXNldERlZmF1bHQiLGljb246cy5ob21lLGNsaWNrOmZ9LGMucmVzZXRDYW1lcmFMYXN0U2F2ZTNkPXtuYW1lOiJyZXNldENhbWVyYUxhc3RTYXZlM2QiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBsKHQsIlJlc2V0IGNhbWVyYSB0byBsYXN0IHNhdmUiKX0sYXR0cjoicmVzZXRMYXN0U2F2ZSIsaWNvbjpzLm1vdmllLGNsaWNrOmZ9LGMuaG92ZXJDbG9zZXN0M2Q9e25hbWU6ImhvdmVyQ2xvc2VzdDNkIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LCJUb2dnbGUgc2hvdyBjbG9zZXN0IGRhdGEgb24gaG92ZXIiKX0sYXR0cjoiaG92ZXJtb2RlIix2YWw6bnVsbCx0b2dnbGU6ITAsaWNvbjpzLnRvb2x0aXBfYmFzaWMsZ3Jhdml0eToibmUiLGNsaWNrOnB9LGMuem9vbUluR2VvPXtuYW1lOiJ6b29tSW5HZW8iLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBsKHQsIlpvb20gaW4iKX0sYXR0cjoiem9vbSIsdmFsOiJpbiIsaWNvbjpzLnpvb21fcGx1cyxjbGljazpkfSxjLnpvb21PdXRHZW89e25hbWU6Inpvb21PdXRHZW8iLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBsKHQsIlpvb20gb3V0Iil9LGF0dHI6Inpvb20iLHZhbDoib3V0IixpY29uOnMuem9vbV9taW51cyxjbGljazpkfSxjLnJlc2V0R2VvPXtuYW1lOiJyZXNldEdlbyIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwiUmVzZXQiKX0sYXR0cjoicmVzZXQiLHZhbDpudWxsLGljb246cy5hdXRvc2NhbGUsY2xpY2s6ZH0sYy5ob3ZlckNsb3Nlc3RHZW89e25hbWU6ImhvdmVyQ2xvc2VzdEdlbyIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwiVG9nZ2xlIHNob3cgY2xvc2VzdCBkYXRhIG9uIGhvdmVyIil9LGF0dHI6ImhvdmVybW9kZSIsdmFsOm51bGwsdG9nZ2xlOiEwLGljb246cy50b29sdGlwX2Jhc2ljLGdyYXZpdHk6Im5lIixjbGljazpnfSxjLmhvdmVyQ2xvc2VzdEdsMmQ9e25hbWU6ImhvdmVyQ2xvc2VzdEdsMmQiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBsKHQsIlRvZ2dsZSBzaG93IGNsb3Nlc3QgZGF0YSBvbiBob3ZlciIpfSxhdHRyOiJob3Zlcm1vZGUiLHZhbDpudWxsLHRvZ2dsZTohMCxpY29uOnMudG9vbHRpcF9iYXNpYyxncmF2aXR5OiJuZSIsY2xpY2s6Z30sYy5ob3ZlckNsb3Nlc3RQaWU9e25hbWU6ImhvdmVyQ2xvc2VzdFBpZSIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwiVG9nZ2xlIHNob3cgY2xvc2VzdCBkYXRhIG9uIGhvdmVyIil9LGF0dHI6ImhvdmVybW9kZSIsdmFsOiJjbG9zZXN0IixpY29uOnMudG9vbHRpcF9iYXNpYyxncmF2aXR5OiJuZSIsY2xpY2s6Z30sYy50b2dnbGVIb3Zlcj17bmFtZToidG9nZ2xlSG92ZXIiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBsKHQsIlRvZ2dsZSBzaG93IGNsb3Nlc3QgZGF0YSBvbiBob3ZlciIpfSxhdHRyOiJob3Zlcm1vZGUiLHZhbDpudWxsLHRvZ2dsZTohMCxpY29uOnMudG9vbHRpcF9iYXNpYyxncmF2aXR5OiJuZSIsY2xpY2s6ZnVuY3Rpb24odCxlKXtnKHQpLHAodCxlKX19LGMucmVzZXRWaWV3cz17bmFtZToicmVzZXRWaWV3cyIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwiUmVzZXQgdmlld3MiKX0saWNvbjpzLmhvbWUsY2xpY2s6ZnVuY3Rpb24odCxlKXt2YXIgcj1lLmN1cnJlbnRUYXJnZXQ7ci5zZXRBdHRyaWJ1dGUoImRhdGEtYXR0ciIsInpvb20iKSxyLnNldEF0dHJpYnV0ZSgiZGF0YS12YWwiLCJyZXNldCIpLHUodCxlKSxyLnNldEF0dHJpYnV0ZSgiZGF0YS1hdHRyIiwicmVzZXRMYXN0U2F2ZSIpLGYodCxlKSxtKHQsImdlbyIpLG0odCwibWFwYm94Iil9fSxjLnRvZ2dsZVNwaWtlbGluZXM9e25hbWU6InRvZ2dsZVNwaWtlbGluZXMiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBsKHQsIlRvZ2dsZSBTcGlrZSBMaW5lcyIpfSxpY29uOnMuc3Bpa2VsaW5lLGF0dHI6Il9jYXJ0ZXNpYW5TcGlrZXNFbmFibGVkIix2YWw6Im9uIixjbGljazpmdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0O2UuX2NhcnRlc2lhblNwaWtlc0VuYWJsZWQ9Im9uIj09PWUuX2NhcnRlc2lhblNwaWtlc0VuYWJsZWQ/Im9mZiI6Im9uIjt2YXIgcj1mdW5jdGlvbih0KXtmb3IodmFyIGUscixuPXQuX2Z1bGxMYXlvdXQsaT1hLmxpc3QodCxudWxsLCEwKSxvPXt9LHM9MDtzPGkubGVuZ3RoO3MrKyllPWlbc10scj1lLl9uYW1lLG9bcisiLnNob3dzcGlrZXMiXT0ib24iPT09bi5fY2FydGVzaWFuU3Bpa2VzRW5hYmxlZHx8ZS5fc2hvd1NwaWtlSW5pdGlhbDtyZXR1cm4gb30odCk7bi5jYWxsKCJyZWxheW91dCIsdCxyKX19LGMucmVzZXRWaWV3TWFwYm94PXtuYW1lOiJyZXNldFZpZXdNYXBib3giLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBsKHQsIlJlc2V0IHZpZXciKX0sYXR0cjoicmVzZXQiLGljb246cy5ob21lLGNsaWNrOmZ1bmN0aW9uKHQpe20odCwibWFwYm94Iil9fX0seyIuLi8uLi8uLi9idWlsZC9wbG90aWNvbiI6MiwiLi4vLi4vbGliIjo2ODQsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyI6NzM1LCIuLi8uLi9wbG90cy9wbG90cyI6Nzk1LCIuLi8uLi9yZWdpc3RyeSI6ODE3fV0sNjIxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3IubWFuYWdlPXQoIi4vbWFuYWdlIil9LHsiLi9tYW5hZ2UiOjYyMn1dLDYyMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiKSxpPXQoIi4uLy4uL3RyYWNlcy9zY2F0dGVyL3N1YnR5cGVzIiksYT10KCIuLi8uLi9yZWdpc3RyeSIpLG89dCgiLi9tb2RlYmFyIikscz10KCIuL2J1dHRvbnMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dCxyPXQuX2NvbnRleHQsbD1lLl9tb2RlQmFyO2lmKHIuZGlzcGxheU1vZGVCYXIpe2lmKCFBcnJheS5pc0FycmF5KHIubW9kZUJhckJ1dHRvbnNUb1JlbW92ZSkpdGhyb3cgbmV3IEVycm9yKFsiKm1vZGVCYXJCdXR0b25zVG9SZW1vdmUqIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyIsIm11c3QgYmUgYW4gYXJyYXkuIl0uam9pbigiICIpKTtpZighQXJyYXkuaXNBcnJheShyLm1vZGVCYXJCdXR0b25zVG9BZGQpKXRocm93IG5ldyBFcnJvcihbIiptb2RlQmFyQnV0dG9uc1RvQWRkKiBjb25maWd1cmF0aW9uIG9wdGlvbnMiLCJtdXN0IGJlIGFuIGFycmF5LiJdLmpvaW4oIiAiKSk7dmFyIGMsdT1yLm1vZGVCYXJCdXR0b25zO2M9QXJyYXkuaXNBcnJheSh1KSYmdS5sZW5ndGg/ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspZm9yKHZhciByPXRbZV0sbj0wO248ci5sZW5ndGg7bisrKXt2YXIgaT1yW25dO2lmKCJzdHJpbmciPT10eXBlb2YgaSl7aWYodm9pZCAwPT09c1tpXSl0aHJvdyBuZXcgRXJyb3IoWyIqbW9kZUJhckJ1dHRvbnMqIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyIsImludmFsaWQgYnV0dG9uIG5hbWUiXS5qb2luKCIgIikpO3RbZV1bbl09c1tpXX19cmV0dXJuIHR9KHUpOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbz10Ll9mdWxsTGF5b3V0LGw9dC5fZnVsbERhdGEsYz1vLl9oYXMoImNhcnRlc2lhbiIpLHU9by5faGFzKCJnbDNkIiksaD1vLl9oYXMoImdlbyIpLGY9by5faGFzKCJwaWUiKSxwPW8uX2hhcygiZ2wyZCIpLGQ9by5faGFzKCJ0ZXJuYXJ5IiksZz1vLl9oYXMoIm1hcGJveCIpLG09by5faGFzKCJwb2xhciIpLHY9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW4ubGlzdCh7X2Z1bGxMYXlvdXQ6dH0sbnVsbCwhMCkscj0wO3I8ZS5sZW5ndGg7cisrKWlmKCFlW3JdLmZpeGVkcmFuZ2UpcmV0dXJuITE7cmV0dXJuITB9KG8pLHk9W107ZnVuY3Rpb24geCh0KXtpZih0Lmxlbmd0aCl7Zm9yKHZhciByPVtdLG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGk9dFtuXTstMT09PWUuaW5kZXhPZihpKSYmci5wdXNoKHNbaV0pfXkucHVzaChyKX19eChbInRvSW1hZ2UiLCJzZW5kRGF0YVRvQ2xvdWQiXSk7dmFyIGI9W10sXz1bXSx3PVtdLGs9W107KGN8fHB8fGZ8fGQpK2grdStnK20+MT8oXz1bInRvZ2dsZUhvdmVyIl0sdz1bInJlc2V0Vmlld3MiXSk6aD8oYj1bInpvb21JbkdlbyIsInpvb21PdXRHZW8iXSxfPVsiaG92ZXJDbG9zZXN0R2VvIl0sdz1bInJlc2V0R2VvIl0pOnU/KF89WyJob3ZlckNsb3Nlc3QzZCJdLHc9WyJyZXNldENhbWVyYURlZmF1bHQzZCIsInJlc2V0Q2FtZXJhTGFzdFNhdmUzZCJdKTpnPyhfPVsidG9nZ2xlSG92ZXIiXSx3PVsicmVzZXRWaWV3TWFwYm94Il0pOl89cD9bImhvdmVyQ2xvc2VzdEdsMmQiXTpmP1siaG92ZXJDbG9zZXN0UGllIl06WyJ0b2dnbGVIb3ZlciJdO2MmJihfPVsidG9nZ2xlU3Bpa2VsaW5lcyIsImhvdmVyQ2xvc2VzdENhcnRlc2lhbiIsImhvdmVyQ29tcGFyZUNhcnRlc2lhbiJdKTshYyYmIXB8fHZ8fChiPVsiem9vbUluMmQiLCJ6b29tT3V0MmQiLCJhdXRvU2NhbGUyZCJdLCJyZXNldFZpZXdzIiE9PXdbMF0mJih3PVsicmVzZXRTY2FsZTJkIl0pKTt1P2s9WyJ6b29tM2QiLCJwYW4zZCIsIm9yYml0Um90YXRpb24iLCJ0YWJsZVJvdGF0aW9uIl06KGN8fHApJiYhdnx8ZD9rPVsiem9vbTJkIiwicGFuMmQiXTpnfHxoP2s9WyJwYW4yZCJdOm0mJihrPVsiem9vbTJkIl0pOyhmdW5jdGlvbih0KXtmb3IodmFyIGU9ITEscj0wO3I8dC5sZW5ndGgmJiFlO3IrKyl7dmFyIG49dFtyXTtuLl9tb2R1bGUmJm4uX21vZHVsZS5zZWxlY3RQb2ludHMmJihhLnRyYWNlSXMobiwic2NhdHRlci1saWtlIik/KGkuaGFzTWFya2VycyhuKXx8aS5oYXNUZXh0KG4pKSYmKGU9ITApOmEudHJhY2VJcyhuLCJib3gtdmlvbGluIikmJiJhbGwiIT09bi5ib3hwb2ludHMmJiJhbGwiIT09bi5wb2ludHN8fChlPSEwKSl9cmV0dXJuIGV9KShsKSYmay5wdXNoKCJzZWxlY3QyZCIsImxhc3NvMmQiKTtyZXR1cm4geChrKSx4KGIuY29uY2F0KHcpKSx4KF8pLGZ1bmN0aW9uKHQsZSl7aWYoZS5sZW5ndGgpaWYoQXJyYXkuaXNBcnJheShlWzBdKSlmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl0LnB1c2goZVtyXSk7ZWxzZSB0LnB1c2goZSk7cmV0dXJuIHR9KHkscil9KHQsci5tb2RlQmFyQnV0dG9uc1RvUmVtb3ZlLHIubW9kZUJhckJ1dHRvbnNUb0FkZCksbD9sLnVwZGF0ZSh0LGMpOmUuX21vZGVCYXI9byh0LGMpfWVsc2UgbCYmKGwuZGVzdHJveSgpLGRlbGV0ZSBlLl9tb2RlQmFyKX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIjo3MzUsIi4uLy4uL3JlZ2lzdHJ5Ijo4MTcsIi4uLy4uL3RyYWNlcy9zY2F0dGVyL3N1YnR5cGVzIjoxMDM3LCIuL2J1dHRvbnMiOjYyMCwiLi9tb2RlYmFyIjo2MjN9XSw2MjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoImZhc3QtaXNudW1lcmljIiksYT10KCIuLi8uLi9saWIiKSxvPXQoIi4uLy4uLy4uL2J1aWxkL3Bsb3RpY29uIik7ZnVuY3Rpb24gcyh0KXt0aGlzLmNvbnRhaW5lcj10LmNvbnRhaW5lcix0aGlzLmVsZW1lbnQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy51cGRhdGUodC5ncmFwaEluZm8sdC5idXR0b25zKSx0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLmVsZW1lbnQpfXZhciBsPXMucHJvdG90eXBlO2wudXBkYXRlPWZ1bmN0aW9uKHQsZSl7dGhpcy5ncmFwaEluZm89dDt2YXIgcj10aGlzLmdyYXBoSW5mby5fY29udGV4dDsiaG92ZXIiPT09ci5kaXNwbGF5TW9kZUJhcj90aGlzLmVsZW1lbnQuY2xhc3NOYW1lPSJtb2RlYmFyIG1vZGViYXItLWhvdmVyIjp0aGlzLmVsZW1lbnQuY2xhc3NOYW1lPSJtb2RlYmFyIjt2YXIgbj0hdGhpcy5oYXNCdXR0b25zKGUpLGk9dGhpcy5oYXNMb2dvIT09ci5kaXNwbGF5bG9nbyxhPXRoaXMubG9jYWxlIT09ci5sb2NhbGU7dGhpcy5sb2NhbGU9ci5sb2NhbGUsKG58fGl8fGEpJiYodGhpcy5yZW1vdmVBbGxCdXR0b25zKCksdGhpcy51cGRhdGVCdXR0b25zKGUpLHIuZGlzcGxheWxvZ28mJih0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5nZXRMb2dvKCkpLHRoaXMuaGFzTG9nbz0hMCkpLHRoaXMudXBkYXRlQWN0aXZlQnV0dG9uKCl9LGwudXBkYXRlQnV0dG9ucz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuYnV0dG9ucz10LHRoaXMuYnV0dG9uRWxlbWVudHM9W10sdGhpcy5idXR0b25zTmFtZXM9W10sdGhpcy5idXR0b25zLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIHI9ZS5jcmVhdGVHcm91cCgpO3QuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgbj10Lm5hbWU7aWYoIW4pdGhyb3cgbmV3IEVycm9yKCJtdXN0IHByb3ZpZGUgYnV0dG9uICduYW1lJyBpbiBidXR0b24gY29uZmlnIik7aWYoLTEhPT1lLmJ1dHRvbnNOYW1lcy5pbmRleE9mKG4pKXRocm93IG5ldyBFcnJvcigiYnV0dG9uIG5hbWUgJyIrbisiJyBpcyB0YWtlbiIpO2UuYnV0dG9uc05hbWVzLnB1c2gobik7dmFyIGk9ZS5jcmVhdGVCdXR0b24odCk7ZS5idXR0b25FbGVtZW50cy5wdXNoKGkpLHIuYXBwZW5kQ2hpbGQoaSl9KSxlLmVsZW1lbnQuYXBwZW5kQ2hpbGQocil9KX0sbC5jcmVhdGVHcm91cD1mdW5jdGlvbigpe3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiB0LmNsYXNzTmFtZT0ibW9kZWJhci1ncm91cCIsdH0sbC5jcmVhdGVCdXR0b249ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtyLnNldEF0dHJpYnV0ZSgicmVsIiwidG9vbHRpcCIpLHIuY2xhc3NOYW1lPSJtb2RlYmFyLWJ0biI7dmFyIGk9dC50aXRsZTt2b2lkIDA9PT1pP2k9dC5uYW1lOiJmdW5jdGlvbiI9PXR5cGVvZiBpJiYoaT1pKHRoaXMuZ3JhcGhJbmZvKSksKGl8fDA9PT1pKSYmci5zZXRBdHRyaWJ1dGUoImRhdGEtdGl0bGUiLGkpLHZvaWQgMCE9PXQuYXR0ciYmci5zZXRBdHRyaWJ1dGUoImRhdGEtYXR0ciIsdC5hdHRyKTt2YXIgYT10LnZhbDtpZih2b2lkIDAhPT1hJiYoImZ1bmN0aW9uIj09dHlwZW9mIGEmJihhPWEodGhpcy5ncmFwaEluZm8pKSxyLnNldEF0dHJpYnV0ZSgiZGF0YS12YWwiLGEpKSwiZnVuY3Rpb24iIT10eXBlb2YgdC5jbGljayl0aHJvdyBuZXcgRXJyb3IoIm11c3QgcHJvdmlkZSBidXR0b24gJ2NsaWNrJyBmdW5jdGlvbiBpbiBidXR0b24gY29uZmlnIik7ci5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZnVuY3Rpb24ocil7dC5jbGljayhlLmdyYXBoSW5mbyxyKSxlLnVwZGF0ZUFjdGl2ZUJ1dHRvbihyLmN1cnJlbnRUYXJnZXQpfSksci5zZXRBdHRyaWJ1dGUoImRhdGEtdG9nZ2xlIix0LnRvZ2dsZXx8ITEpLHQudG9nZ2xlJiZuLnNlbGVjdChyKS5jbGFzc2VkKCJhY3RpdmUiLCEwKTt2YXIgcz10Lmljb247cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHM/ci5hcHBlbmRDaGlsZChzKCkpOnIuYXBwZW5kQ2hpbGQodGhpcy5jcmVhdGVJY29uKHN8fG8ucXVlc3Rpb24pKSxyLnNldEF0dHJpYnV0ZSgiZGF0YS1ncmF2aXR5Iix0LmdyYXZpdHl8fCJuIikscn0sbC5jcmVhdGVJY29uPWZ1bmN0aW9uKHQpe3ZhciBlPWkodC5oZWlnaHQpP051bWJlcih0LmhlaWdodCk6dC5hc2NlbnQtdC5kZXNjZW50LHI9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhyLCJzdmciKSxhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhyLCJwYXRoIik7cmV0dXJuIG4uc2V0QXR0cmlidXRlKCJoZWlnaHQiLCIxZW0iKSxuLnNldEF0dHJpYnV0ZSgid2lkdGgiLHQud2lkdGgvZSsiZW0iKSxuLnNldEF0dHJpYnV0ZSgidmlld0JveCIsWzAsMCx0LndpZHRoLGVdLmpvaW4oIiAiKSksYS5zZXRBdHRyaWJ1dGUoImQiLHQucGF0aCksdC50cmFuc2Zvcm0/YS5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsdC50cmFuc2Zvcm0pOnZvaWQgMCE9PXQuYXNjZW50JiZhLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIiwibWF0cml4KDEgMCAwIC0xIDAgIit0LmFzY2VudCsiKSIpLG4uYXBwZW5kQ2hpbGQoYSksbn0sbC51cGRhdGVBY3RpdmVCdXR0b249ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5ncmFwaEluZm8uX2Z1bGxMYXlvdXQscj12b2lkIDAhPT10P3QuZ2V0QXR0cmlidXRlKCJkYXRhLWF0dHIiKTpudWxsO3RoaXMuYnV0dG9uRWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgaT10LmdldEF0dHJpYnV0ZSgiZGF0YS12YWwiKXx8ITAsbz10LmdldEF0dHJpYnV0ZSgiZGF0YS1hdHRyIikscz0idHJ1ZSI9PT10LmdldEF0dHJpYnV0ZSgiZGF0YS10b2dnbGUiKSxsPW4uc2VsZWN0KHQpO2lmKHMpbz09PXImJmwuY2xhc3NlZCgiYWN0aXZlIiwhbC5jbGFzc2VkKCJhY3RpdmUiKSk7ZWxzZXt2YXIgYz1udWxsPT09bz9vOmEubmVzdGVkUHJvcGVydHkoZSxvKS5nZXQoKTtsLmNsYXNzZWQoImFjdGl2ZSIsYz09PWkpfX0pfSxsLmhhc0J1dHRvbnM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5idXR0b25zO2lmKCFlKXJldHVybiExO2lmKHQubGVuZ3RoIT09ZS5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDsrK3Ipe2lmKHRbcl0ubGVuZ3RoIT09ZVtyXS5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBuPTA7bjx0W3JdLmxlbmd0aDtuKyspaWYodFtyXVtuXS5uYW1lIT09ZVtyXVtuXS5uYW1lKXJldHVybiExfXJldHVybiEwfSxsLmdldExvZ289ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmNyZWF0ZUdyb3VwKCksZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7cmV0dXJuIGUuaHJlZj0iaHR0cHM6Ly9wbG90Lmx5LyIsZS50YXJnZXQ9Il9ibGFuayIsZS5zZXRBdHRyaWJ1dGUoImRhdGEtdGl0bGUiLGEuXyh0aGlzLmdyYXBoSW5mbywiUHJvZHVjZWQgd2l0aCBQbG90bHkiKSksZS5jbGFzc05hbWU9Im1vZGViYXItYnRuIHBsb3RseWpzaWNvbiBtb2RlYmFyLWJ0bi0tbG9nbyIsZS5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZUljb24oby5wbG90bHlsb2dvKSksdC5hcHBlbmRDaGlsZChlKSx0fSxsLnJlbW92ZUFsbEJ1dHRvbnM9ZnVuY3Rpb24oKXtmb3IoO3RoaXMuZWxlbWVudC5maXJzdENoaWxkOyl0aGlzLmVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy5lbGVtZW50LmZpcnN0Q2hpbGQpO3RoaXMuaGFzTG9nbz0hMX0sbC5kZXN0cm95PWZ1bmN0aW9uKCl7YS5yZW1vdmVFbGVtZW50KHRoaXMuY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoIi5tb2RlYmFyIikpfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9mdWxsTGF5b3V0LGk9bmV3IHMoe2dyYXBoSW5mbzp0LGNvbnRhaW5lcjpyLl9wYXBlcmRpdi5ub2RlKCksYnV0dG9uczplfSk7cmV0dXJuIHIuX3ByaXZhdGVwbG90JiZuLnNlbGVjdChpLmVsZW1lbnQpLmFwcGVuZCgic3BhbiIpLmNsYXNzZWQoImJhZGdlLXByaXZhdGUgZmxvYXQtLWxlZnQiLCEwKS50ZXh0KCJQUklWQVRFIiksaX19LHsiLi4vLi4vLi4vYnVpbGQvcGxvdGljb24iOjIsIi4uLy4uL2xpYiI6Njg0LGQzOjE0NywiZmFzdC1pc251bWVyaWMiOjIxNH1dLDYyNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKSxpPXQoIi4uL2NvbG9yL2F0dHJpYnV0ZXMiKSxhPSgwLHQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKS50ZW1wbGF0ZWRBcnJheSkoImJ1dHRvbiIse3Zpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6InBsb3QifSxzdGVwOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJtb250aCIsInllYXIiLCJkYXkiLCJob3VyIiwibWludXRlIiwic2Vjb25kIiwiYWxsIl0sZGZsdDoibW9udGgiLGVkaXRUeXBlOiJwbG90In0sc3RlcG1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImJhY2t3YXJkIiwidG9kYXRlIl0sZGZsdDoiYmFja3dhcmQiLGVkaXRUeXBlOiJwbG90In0sY291bnQ6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxLGVkaXRUeXBlOiJwbG90In0sbGFiZWw6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToicGxvdCJ9KTtlLmV4cG9ydHM9e3Zpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGVkaXRUeXBlOiJwbG90In0sYnV0dG9uczphLHg6e3ZhbFR5cGU6Im51bWJlciIsbWluOi0yLG1heDozLGVkaXRUeXBlOiJwbG90In0seGFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYXV0byIsImxlZnQiLCJjZW50ZXIiLCJyaWdodCJdLGRmbHQ6ImxlZnQiLGVkaXRUeXBlOiJwbG90In0seTp7dmFsVHlwZToibnVtYmVyIixtaW46LTIsbWF4OjMsZWRpdFR5cGU6InBsb3QifSx5YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhdXRvIiwidG9wIiwibWlkZGxlIiwiYm90dG9tIl0sZGZsdDoiYm90dG9tIixlZGl0VHlwZToicGxvdCJ9LGZvbnQ6bih7ZWRpdFR5cGU6InBsb3QifSksYmdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6aS5saWdodExpbmUsZWRpdFR5cGU6InBsb3QifSxhY3RpdmVjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJwbG90In0sYm9yZGVyY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmkuZGVmYXVsdExpbmUsZWRpdFR5cGU6InBsb3QifSxib3JkZXJ3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToicGxvdCJ9fSx7Ii4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjcyMiwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIjo3NTgsIi4uL2NvbG9yL2F0dHJpYnV0ZXMiOjU1N31dLDYyNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e3lQYWQ6LjAyLG1pbkJ1dHRvbldpZHRoOjMwLHJ4OjMscnk6MyxsaWdodEFtb3VudDoyNSxkYXJrQW1vdW50OjEwfX0se31dLDYyNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uL2NvbG9yIiksYT10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIiksbz10KCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiKSxzPXQoIi4vYXR0cmlidXRlcyIpLGw9dCgiLi9jb25zdGFudHMiKTtmdW5jdGlvbiBjKHQsZSxyLGkpe3ZhciBhPWkuY2FsZW5kYXI7ZnVuY3Rpb24gbyhyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUscy5idXR0b25zLHIsaSl9aWYobygidmlzaWJsZSIpKXt2YXIgbD1vKCJzdGVwIik7ImFsbCIhPT1sJiYoIWF8fCJncmVnb3JpYW4iPT09YXx8Im1vbnRoIiE9PWwmJiJ5ZWFyIiE9PWw/bygic3RlcG1vZGUiKTplLnN0ZXBtb2RlPSJiYWNrd2FyZCIsbygiY291bnQiKSksbygibGFiZWwiKX19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHUsaCl7dmFyIGY9dC5yYW5nZXNlbGVjdG9yfHx7fSxwPWEubmV3Q29udGFpbmVyKGUsInJhbmdlc2VsZWN0b3IiKTtmdW5jdGlvbiBkKHQsZSl7cmV0dXJuIG4uY29lcmNlKGYscCxzLHQsZSl9aWYoZCgidmlzaWJsZSIsbyhmLHAse25hbWU6ImJ1dHRvbnMiLGhhbmRsZUl0ZW1EZWZhdWx0czpjLGNhbGVuZGFyOmh9KS5sZW5ndGg+MCkpe3ZhciBnPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49ci5maWx0ZXIoZnVuY3Rpb24ocil7cmV0dXJuIGVbcl0uYW5jaG9yPT09dC5faWR9KSxpPTAsYT0wO2E8bi5sZW5ndGg7YSsrKXt2YXIgbz1lW25bYV1dLmRvbWFpbjtvJiYoaT1NYXRoLm1heChvWzFdLGkpKX1yZXR1cm5bdC5kb21haW5bMF0saStsLnlQYWRdfShlLHIsdSk7ZCgieCIsZ1swXSksZCgieSIsZ1sxXSksbi5ub25lT3JBbGwodCxlLFsieCIsInkiXSksZCgieGFuY2hvciIpLGQoInlhbmNob3IiKSxuLmNvZXJjZUZvbnQoZCwiZm9udCIsci5mb250KTt2YXIgbT1kKCJiZ2NvbG9yIik7ZCgiYWN0aXZlY29sb3IiLGkuY29udHJhc3QobSxsLmxpZ2h0QW1vdW50LGwuZGFya0Ftb3VudCkpLGQoImJvcmRlcmNvbG9yIiksZCgiYm9yZGVyd2lkdGgiKX19fSx7Ii4uLy4uL2xpYiI6Njg0LCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo3MjIsIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyI6NzI4LCIuLi9jb2xvciI6NTU4LCIuL2F0dHJpYnV0ZXMiOjYyNCwiLi9jb25zdGFudHMiOjYyNX1dLDYyNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vLi4vcmVnaXN0cnkiKSxhPXQoIi4uLy4uL3Bsb3RzL3Bsb3RzIiksbz10KCIuLi9jb2xvciIpLHM9dCgiLi4vZHJhd2luZyIpLGw9dCgiLi4vLi4vbGliIiksYz10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSx1PXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyIpLGg9dCgiLi4vbGVnZW5kL2FuY2hvcl91dGlscyIpLGY9dCgiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCIpLHA9Zi5MSU5FX1NQQUNJTkcsZD1mLkZST01fVEwsZz1mLkZST01fQlIsbT10KCIuL2NvbnN0YW50cyIpLHY9dCgiLi9nZXRfdXBkYXRlX29iamVjdCIpO2Z1bmN0aW9uIHkodCl7cmV0dXJuIHQuX2lkfWZ1bmN0aW9uIHgodCxlLHIpe3ZhciBuPWwuZW5zdXJlU2luZ2xlKHQsInJlY3QiLCJzZWxlY3Rvci1yZWN0IixmdW5jdGlvbih0KXt0LmF0dHIoInNoYXBlLXJlbmRlcmluZyIsImNyaXNwRWRnZXMiKX0pO24uYXR0cih7cng6bS5yeCxyeTptLnJ5fSksbi5jYWxsKG8uc3Ryb2tlLGUuYm9yZGVyY29sb3IpLmNhbGwoby5maWxsLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuX2lzQWN0aXZlfHxlLl9pc0hvdmVyZWQ/dC5hY3RpdmVjb2xvcjp0LmJnY29sb3J9KGUscikpLnN0eWxlKCJzdHJva2Utd2lkdGgiLGUuYm9yZGVyd2lkdGgrInB4Iil9ZnVuY3Rpb24gYih0LGUscixuKXt2YXIgaTtsLmVuc3VyZVNpbmdsZSh0LCJ0ZXh0Iiwic2VsZWN0b3ItdGV4dCIsZnVuY3Rpb24odCl7dC5jbGFzc2VkKCJ1c2VyLXNlbGVjdC1ub25lIiwhMCkuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKX0pLmNhbGwocy5mb250LGUuZm9udCkudGV4dCgoaT1yLGkubGFiZWw/aS5sYWJlbDoiYWxsIj09PWkuc3RlcD8iYWxsIjppLmNvdW50K2kuc3RlcC5jaGFyQXQoMCkpKS5jYWxsKGZ1bmN0aW9uKHQpe2MuY29udmVydFRvVHNwYW5zKHQsbil9KX1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dC5faW5mb2xheWVyLnNlbGVjdEFsbCgiLnJhbmdlc2VsZWN0b3IiKS5kYXRhKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT11Lmxpc3QodCwieCIsITApLHI9W10sbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgaT1lW25dO2kucmFuZ2VzZWxlY3RvciYmaS5yYW5nZXNlbGVjdG9yLnZpc2libGUmJnIucHVzaChpKX1yZXR1cm4gcn0odCkseSk7ZS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInJhbmdlc2VsZWN0b3IiLCEwKSxlLmV4aXQoKS5yZW1vdmUoKSxlLnN0eWxlKHtjdXJzb3I6InBvaW50ZXIiLCJwb2ludGVyLWV2ZW50cyI6ImFsbCJ9KSxlLmVhY2goZnVuY3Rpb24oZSl7dmFyIHI9bi5zZWxlY3QodGhpcyksbz1lLHU9by5yYW5nZXNlbGVjdG9yLGY9ci5zZWxlY3RBbGwoImcuYnV0dG9uIikuZGF0YShsLmZpbHRlclZpc2libGUodS5idXR0b25zKSk7Zi5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImJ1dHRvbiIsITApLGYuZXhpdCgpLnJlbW92ZSgpLGYuZWFjaChmdW5jdGlvbihlKXt2YXIgcj1uLnNlbGVjdCh0aGlzKSxhPXYobyxlKTtlLl9pc0FjdGl2ZT1mdW5jdGlvbih0LGUscil7aWYoImFsbCI9PT1lLnN0ZXApcmV0dXJuITA9PT10LmF1dG9yYW5nZTt2YXIgbj1PYmplY3Qua2V5cyhyKTtyZXR1cm4gdC5yYW5nZVswXT09PXJbblswXV0mJnQucmFuZ2VbMV09PT1yW25bMV1dfShvLGUsYSksci5jYWxsKHgsdSxlKSxyLmNhbGwoYix1LGUsdCksci5vbigiY2xpY2siLGZ1bmN0aW9uKCl7dC5fZHJhZ2dlZHx8aS5jYWxsKCJyZWxheW91dCIsdCxhKX0pLHIub24oIm1vdXNlb3ZlciIsZnVuY3Rpb24oKXtlLl9pc0hvdmVyZWQ9ITAsci5jYWxsKHgsdSxlKX0pLHIub24oIm1vdXNlb3V0IixmdW5jdGlvbigpe2UuX2lzSG92ZXJlZD0hMSxyLmNhbGwoeCx1LGUpfSl9KSxmdW5jdGlvbih0LGUscixpLG8pe3ZhciBsPTAsdT0wLGY9ci5ib3JkZXJ3aWR0aDtlLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1uLnNlbGVjdCh0aGlzKSxlPXQuc2VsZWN0KCIuc2VsZWN0b3ItdGV4dCIpLGk9ci5mb250LnNpemUqcCxhPU1hdGgubWF4KGkqYy5saW5lQ291bnQoZSksMTYpKzM7dT1NYXRoLm1heCh1LGEpfSksZS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9bi5zZWxlY3QodGhpcyksZT10LnNlbGVjdCgiLnNlbGVjdG9yLXJlY3QiKSxpPXQuc2VsZWN0KCIuc2VsZWN0b3ItdGV4dCIpLGE9aS5ub2RlKCkmJnMuYkJveChpLm5vZGUoKSkud2lkdGgsbz1yLmZvbnQuc2l6ZSpwLGg9Yy5saW5lQ291bnQoaSksZD1NYXRoLm1heChhKzEwLG0ubWluQnV0dG9uV2lkdGgpO3QuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKGYrbCkrIiwiK2YrIikiKSxlLmF0dHIoe3g6MCx5OjAsd2lkdGg6ZCxoZWlnaHQ6dX0pLGMucG9zaXRpb25UZXh0KGksZC8yLHUvMi0oaC0xKSpvLzIrMyksbCs9ZCs1fSk7dmFyIHY9dC5fZnVsbExheW91dC5fc2l6ZSx5PXYubCt2Lncqci54LHg9di50K3YuaCooMS1yLnkpLGI9ImxlZnQiO2guaXNSaWdodEFuY2hvcihyKSYmKHktPWwsYj0icmlnaHQiKTtoLmlzQ2VudGVyQW5jaG9yKHIpJiYoeS09bC8yLGI9ImNlbnRlciIpO3ZhciBfPSJ0b3AiO2guaXNCb3R0b21BbmNob3IocikmJih4LT11LF89ImJvdHRvbSIpO2guaXNNaWRkbGVBbmNob3IocikmJih4LT11LzIsXz0ibWlkZGxlIik7bD1NYXRoLmNlaWwobCksdT1NYXRoLmNlaWwodSkseT1NYXRoLnJvdW5kKHkpLHg9TWF0aC5yb3VuZCh4KSxhLmF1dG9NYXJnaW4odCxpKyItcmFuZ2Utc2VsZWN0b3IiLHt4OnIueCx5OnIueSxsOmwqZFtiXSxyOmwqZ1tiXSxiOnUqZ1tfXSx0OnUqZFtfXX0pLG8uYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIreSsiLCIreCsiKSIpfSh0LGYsdSxvLl9uYW1lLHIpfSl9fSx7Ii4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiOjY1NiwiLi4vLi4vbGliIjo2ODQsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6NzA4LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiOjczNSwiLi4vLi4vcGxvdHMvcGxvdHMiOjc5NSwiLi4vLi4vcmVnaXN0cnkiOjgxNywiLi4vY29sb3IiOjU1OCwiLi4vZHJhd2luZyI6NTgzLCIuLi9sZWdlbmQvYW5jaG9yX3V0aWxzIjo2MTAsIi4vY29uc3RhbnRzIjo2MjUsIi4vZ2V0X3VwZGF0ZV9vYmplY3QiOjYyOCxkMzoxNDd9XSw2Mjg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9uYW1lLGk9e307aWYoImFsbCI9PT1lLnN0ZXApaVtyKyIuYXV0b3JhbmdlIl09ITA7ZWxzZXt2YXIgYT1mdW5jdGlvbih0LGUpe3ZhciByLGk9dC5yYW5nZSxhPW5ldyBEYXRlKHQucjJsKGlbMV0pKSxvPWUuc3RlcCxzPWUuY291bnQ7c3dpdGNoKGUuc3RlcG1vZGUpe2Nhc2UiYmFja3dhcmQiOnI9dC5sMnIoK24udGltZVtvXS51dGMub2Zmc2V0KGEsLXMpKTticmVhaztjYXNlInRvZGF0ZSI6dmFyIGw9bi50aW1lW29dLnV0Yy5vZmZzZXQoYSwtcyk7cj10Lmwycigrbi50aW1lW29dLnV0Yy5jZWlsKGwpKX12YXIgYz1pWzFdO3JldHVybltyLGNdfSh0LGUpO2lbcisiLnJhbmdlWzBdIl09YVswXSxpW3IrIi5yYW5nZVsxXSJdPWFbMV19cmV0dXJuIGl9fSx7ZDM6MTQ3fV0sNjI5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bW9kdWxlVHlwZToiY29tcG9uZW50IixuYW1lOiJyYW5nZXNlbGVjdG9yIixzY2hlbWE6e3N1YnBsb3RzOnt4YXhpczp7cmFuZ2VzZWxlY3Rvcjp0KCIuL2F0dHJpYnV0ZXMiKX19fSxsYXlvdXRBdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLGhhbmRsZURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxkcmF3OnQoIi4vZHJhdyIpfX0seyIuL2F0dHJpYnV0ZXMiOjYyNCwiLi9kZWZhdWx0cyI6NjI2LCIuL2RyYXciOjYyN31dLDYzMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9jb2xvci9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPXtiZ2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpuLmJhY2tncm91bmQsZWRpdFR5cGU6InBsb3QifSxib3JkZXJjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6bi5kZWZhdWx0TGluZSxlZGl0VHlwZToicGxvdCJ9LGJvcmRlcndpZHRoOnt2YWxUeXBlOiJpbnRlZ2VyIixkZmx0OjAsbWluOjAsZWRpdFR5cGU6InBsb3QifSxhdXRvcmFuZ2U6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMiLGltcGxpZWRFZGl0czp7InJhbmdlWzBdIjp2b2lkIDAsInJhbmdlWzFdIjp2b2lkIDB9fSxyYW5nZTp7dmFsVHlwZToiaW5mb19hcnJheSIsaXRlbXM6W3t2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjIixpbXBsaWVkRWRpdHM6eyJeYXV0b3JhbmdlIjohMX19LHt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjIixpbXBsaWVkRWRpdHM6eyJeYXV0b3JhbmdlIjohMX19XSxlZGl0VHlwZToiY2FsYyIsaW1wbGllZEVkaXRzOnthdXRvcmFuZ2U6ITF9fSx0aGlja25lc3M6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDouMTUsbWluOjAsbWF4OjEsZWRpdFR5cGU6InBsb3QifSx2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifX0seyIuLi9jb2xvci9hdHRyaWJ1dGVzIjo1NTd9XSw2MzE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIikubGlzdCxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hdXRvcmFuZ2UiKS5nZXRBdXRvUmFuZ2UsYT10KCIuL2NvbnN0YW50cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9bih0LCJ4IiwhMCkscj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbz1lW3JdLHM9b1thLm5hbWVdO3MmJnMudmlzaWJsZSYmcy5hdXRvcmFuZ2UmJm8uX21pbi5sZW5ndGgmJm8uX21heC5sZW5ndGgmJihzLl9pbnB1dC5hdXRvcmFuZ2U9ITAscy5faW5wdXQucmFuZ2U9cy5yYW5nZT1pKG8pKX19fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hdXRvcmFuZ2UiOjczMSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIjo3MzUsIi4vY29uc3RhbnRzIjo2MzJ9XSw2MzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtuYW1lOiJyYW5nZXNsaWRlciIsY29udGFpbmVyQ2xhc3NOYW1lOiJyYW5nZXNsaWRlci1jb250YWluZXIiLGJnQ2xhc3NOYW1lOiJyYW5nZXNsaWRlci1iZyIscmFuZ2VQbG90Q2xhc3NOYW1lOiJyYW5nZXNsaWRlci1yYW5nZXBsb3QiLG1hc2tNaW5DbGFzc05hbWU6InJhbmdlc2xpZGVyLW1hc2stbWluIixtYXNrTWF4Q2xhc3NOYW1lOiJyYW5nZXNsaWRlci1tYXNrLW1heCIsc2xpZGVCb3hDbGFzc05hbWU6InJhbmdlc2xpZGVyLXNsaWRlYm94IixncmFiYmVyTWluQ2xhc3NOYW1lOiJyYW5nZXNsaWRlci1ncmFiYmVyLW1pbiIsZ3JhYkFyZWFNaW5DbGFzc05hbWU6InJhbmdlc2xpZGVyLWdyYWJhcmVhLW1pbiIsaGFuZGxlTWluQ2xhc3NOYW1lOiJyYW5nZXNsaWRlci1oYW5kbGUtbWluIixncmFiYmVyTWF4Q2xhc3NOYW1lOiJyYW5nZXNsaWRlci1ncmFiYmVyLW1heCIsZ3JhYkFyZWFNYXhDbGFzc05hbWU6InJhbmdlc2xpZGVyLWdyYWJhcmVhLW1heCIsaGFuZGxlTWF4Q2xhc3NOYW1lOiJyYW5nZXNsaWRlci1oYW5kbGUtbWF4IixtYXNrTWluT3BwQXhpc0NsYXNzTmFtZToicmFuZ2VzbGlkZXItbWFzay1taW4tb3BwLWF4aXMiLG1hc2tNYXhPcHBBeGlzQ2xhc3NOYW1lOiJyYW5nZXNsaWRlci1tYXNrLW1heC1vcHAtYXhpcyIsbWFza0NvbG9yOiJyZ2JhKDAsMCwwLDAuNCkiLG1hc2tPcHBBeGlzQ29sb3I6InJnYmEoMCwwLDAsMC4yKSIsc2xpZGVCb3hGaWxsOiJ0cmFuc3BhcmVudCIsc2xpZGVCb3hDdXJzb3I6ImV3LXJlc2l6ZSIsZ3JhYkFyZWFGaWxsOiJ0cmFuc3BhcmVudCIsZ3JhYkFyZWFDdXJzb3I6ImNvbC1yZXNpemUiLGdyYWJBcmVhV2lkdGg6MTAsaGFuZGxlV2lkdGg6NCxoYW5kbGVSYWRpdXM6MSxoYW5kbGVTdHJva2VXaWR0aDoxLGV4dHJhUGFkOjE1fX0se31dLDYzMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKSxhPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyIpLG89dCgiLi9hdHRyaWJ1dGVzIikscz10KCIuL29wcGF4aXNfYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGw9dFtyXSxjPWVbcl07aWYobC5yYW5nZXNsaWRlcnx8ZS5fcmVxdWVzdFJhbmdlc2xpZGVyW2MuX2lkXSl7bi5pc1BsYWluT2JqZWN0KGwucmFuZ2VzbGlkZXIpfHwobC5yYW5nZXNsaWRlcj17fSk7dmFyIHUsaCxmPWwucmFuZ2VzbGlkZXIscD1pLm5ld0NvbnRhaW5lcihjLCJyYW5nZXNsaWRlciIpO2lmKHcoInZpc2libGUiKSl7dygiYmdjb2xvciIsZS5wbG90X2JnY29sb3IpLHcoImJvcmRlcmNvbG9yIiksdygiYm9yZGVyd2lkdGgiKSx3KCJ0aGlja25lc3MiKSxjLl9yYW5nZXNsaWRlckF1dG9yYW5nZT13KCJhdXRvcmFuZ2UiLCFjLmlzVmFsaWRSYW5nZShmLnJhbmdlKSksdygicmFuZ2UiKTt2YXIgZD1lLl9zdWJwbG90cztpZihkKWZvcih2YXIgZz1kLmNhcnRlc2lhbi5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQuc3Vic3RyKDAsdC5pbmRleE9mKCJ5IikpPT09YS5uYW1lMmlkKHIpfSkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnN1YnN0cih0LmluZGV4T2YoInkiKSx0Lmxlbmd0aCl9KSxtPW4uc2ltcGxlTWFwKGcsYS5pZDJuYW1lKSx2PTA7djxtLmxlbmd0aDt2Kyspe3ZhciB5PW1bdl07dT1mW3ldfHx7fSxoPWkubmV3Q29udGFpbmVyKHAseSwieWF4aXMiKTt2YXIgeCxiPWVbeV07dS5yYW5nZSYmYi5pc1ZhbGlkUmFuZ2UodS5yYW5nZSkmJih4PSJmaXhlZCIpO3ZhciBfPWsoInJhbmdlbW9kZSIseCk7Im1hdGNoIiE9PV8mJmsoInJhbmdlIixiLnJhbmdlLnNsaWNlKCkpLGIuX3Jhbmdlc2xpZGVyQXV0b3JhbmdlPSJhdXRvIj09PV99cC5faW5wdXQ9Zn19ZnVuY3Rpb24gdyh0LGUpe3JldHVybiBuLmNvZXJjZShmLHAsbyx0LGUpfWZ1bmN0aW9uIGsodCxlKXtyZXR1cm4gbi5jb2VyY2UodSxoLHMsdCxlKX19fSx7Ii4uLy4uL2xpYiI6Njg0LCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo3MjIsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyI6NzM1LCIuL2F0dHJpYnV0ZXMiOjYzMCwiLi9vcHBheGlzX2F0dHJpYnV0ZXMiOjYzNn1dLDYzNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vLi4vcmVnaXN0cnkiKSxhPXQoIi4uLy4uL3Bsb3RzL3Bsb3RzIiksbz10KCIuLi8uLi9saWIiKSxzPXQoIi4uL2RyYXdpbmciKSxsPXQoIi4uL2NvbG9yIiksYz10KCIuLi90aXRsZXMiKSx1PXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiIpLGg9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxmPXQoIi4uL2RyYWdlbGVtZW50IikscD10KCIuLi8uLi9saWIvc2V0Y3Vyc29yIiksZD10KCIuL2NvbnN0YW50cyIpO2Z1bmN0aW9uIGcodCxlLHIsbil7dmFyIGk9by5lbnN1cmVTaW5nbGUodCwicmVjdCIsZC5iZ0NsYXNzTmFtZSxmdW5jdGlvbih0KXt0LmF0dHIoe3g6MCx5OjAsInNoYXBlLXJlbmRlcmluZyI6ImNyaXNwRWRnZXMifSl9KSxhPW4uYm9yZGVyd2lkdGglMj09MD9uLmJvcmRlcndpZHRoOm4uYm9yZGVyd2lkdGgtMSxsPS1uLl9vZmZzZXRTaGlmdCxjPXMuY3Jpc3BSb3VuZChlLG4uYm9yZGVyd2lkdGgpO2kuYXR0cih7d2lkdGg6bi5fd2lkdGgrYSxoZWlnaHQ6bi5faGVpZ2h0K2EsdHJhbnNmb3JtOiJ0cmFuc2xhdGUoIitsKyIsIitsKyIpIixmaWxsOm4uYmdjb2xvcixzdHJva2U6bi5ib3JkZXJjb2xvciwic3Ryb2tlLXdpZHRoIjpjfSl9ZnVuY3Rpb24gbSh0LGUscixuKXt2YXIgaT1lLl9mdWxsTGF5b3V0O28uZW5zdXJlU2luZ2xlQnlJZChpLl90b3BkZWZzLCJjbGlwUGF0aCIsbi5fY2xpcElkLGZ1bmN0aW9uKHQpe3QuYXBwZW5kKCJyZWN0IikuYXR0cih7eDowLHk6MH0pfSkuc2VsZWN0KCJyZWN0IikuYXR0cih7d2lkdGg6bi5fd2lkdGgsaGVpZ2h0Om4uX2hlaWdodH0pfWZ1bmN0aW9uIHYodCxlLHIsaSl7dmFyIGwsYz1oLmdldFN1YnBsb3RzKGUsciksZj1lLmNhbGNkYXRhLHA9dC5zZWxlY3RBbGwoImcuIitkLnJhbmdlUGxvdENsYXNzTmFtZSkuZGF0YShjLG8uaWRlbnRpdHkpO3AuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsZnVuY3Rpb24odCl7cmV0dXJuIGQucmFuZ2VQbG90Q2xhc3NOYW1lKyIgIit0fSkuY2FsbChzLnNldENsaXBVcmwsaS5fY2xpcElkKSxwLm9yZGVyKCkscC5leGl0KCkucmVtb3ZlKCkscC5lYWNoKGZ1bmN0aW9uKHQsbyl7dmFyIHM9bi5zZWxlY3QodGhpcyksYz0wPT09byxwPWguZ2V0RnJvbUlkKGUsdCwieSIpLGQ9cC5fbmFtZSxnPWlbZF0sbT17ZGF0YTpbXSxsYXlvdXQ6e3hheGlzOnt0eXBlOnIudHlwZSxkb21haW46WzAsMV0scmFuZ2U6aS5yYW5nZS5zbGljZSgpLGNhbGVuZGFyOnIuY2FsZW5kYXJ9LHdpZHRoOmkuX3dpZHRoLGhlaWdodDppLl9oZWlnaHQsbWFyZ2luOnt0OjAsYjowLGw6MCxyOjB9fSxfY29udGV4dDplLl9jb250ZXh0fTttLmxheW91dFtkXT17dHlwZTpwLnR5cGUsZG9tYWluOlswLDFdLHJhbmdlOiJtYXRjaCIhPT1nLnJhbmdlbW9kZT9nLnJhbmdlLnNsaWNlKCk6cC5yYW5nZS5zbGljZSgpLGNhbGVuZGFyOnAuY2FsZW5kYXJ9LGEuc3VwcGx5RGVmYXVsdHMobSk7dmFyIHY9e2lkOnQscGxvdGdyb3VwOnMseGF4aXM6bS5fZnVsbExheW91dC54YXhpcyx5YXhpczptLl9mdWxsTGF5b3V0W2RdLGlzUmFuZ2VQbG90OiEwfTtjP2w9djoodi5tYWlucGxvdD0ieHkiLHYubWFpbnBsb3RpbmZvPWwpLHUucmFuZ2VQbG90KGUsdixmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBpPXRbbl0sYT1pWzBdLnRyYWNlO2EueGF4aXMrYS55YXhpcz09PWUmJnIucHVzaChpKX1yZXR1cm4gcn0oZix0KSl9KX1mdW5jdGlvbiB5KHQsZSxyLG4saSl7KG8uZW5zdXJlU2luZ2xlKHQsInJlY3QiLGQubWFza01pbkNsYXNzTmFtZSxmdW5jdGlvbih0KXt0LmF0dHIoe3g6MCx5OjAsInNoYXBlLXJlbmRlcmluZyI6ImNyaXNwRWRnZXMifSl9KS5hdHRyKCJoZWlnaHQiLG4uX2hlaWdodCkuY2FsbChsLmZpbGwsZC5tYXNrQ29sb3IpLG8uZW5zdXJlU2luZ2xlKHQsInJlY3QiLGQubWFza01heENsYXNzTmFtZSxmdW5jdGlvbih0KXt0LmF0dHIoe3k6MCwic2hhcGUtcmVuZGVyaW5nIjoiY3Jpc3BFZGdlcyJ9KX0pLmF0dHIoImhlaWdodCIsbi5faGVpZ2h0KS5jYWxsKGwuZmlsbCxkLm1hc2tDb2xvciksIm1hdGNoIiE9PWkucmFuZ2Vtb2RlKSYmKG8uZW5zdXJlU2luZ2xlKHQsInJlY3QiLGQubWFza01pbk9wcEF4aXNDbGFzc05hbWUsZnVuY3Rpb24odCl7dC5hdHRyKHt5OjAsInNoYXBlLXJlbmRlcmluZyI6ImNyaXNwRWRnZXMifSl9KS5hdHRyKCJ3aWR0aCIsbi5fd2lkdGgpLmNhbGwobC5maWxsLGQubWFza09wcEF4aXNDb2xvciksby5lbnN1cmVTaW5nbGUodCwicmVjdCIsZC5tYXNrTWF4T3BwQXhpc0NsYXNzTmFtZSxmdW5jdGlvbih0KXt0LmF0dHIoe3k6MCwic2hhcGUtcmVuZGVyaW5nIjoiY3Jpc3BFZGdlcyJ9KX0pLmF0dHIoIndpZHRoIixuLl93aWR0aCkuc3R5bGUoImJvcmRlci10b3AiLGQubWFza09wcEJvcmRlcikuY2FsbChsLmZpbGwsZC5tYXNrT3BwQXhpc0NvbG9yKSl9ZnVuY3Rpb24geCh0LGUscixuKXtlLl9jb250ZXh0LnN0YXRpY1Bsb3R8fG8uZW5zdXJlU2luZ2xlKHQsInJlY3QiLGQuc2xpZGVCb3hDbGFzc05hbWUsZnVuY3Rpb24odCl7dC5hdHRyKHt5OjAsY3Vyc29yOmQuc2xpZGVCb3hDdXJzb3IsInNoYXBlLXJlbmRlcmluZyI6ImNyaXNwRWRnZXMifSl9KS5hdHRyKHtoZWlnaHQ6bi5faGVpZ2h0LGZpbGw6ZC5zbGlkZUJveEZpbGx9KX1mdW5jdGlvbiBiKHQsZSxyLG4pe3ZhciBpPW8uZW5zdXJlU2luZ2xlKHQsImciLGQuZ3JhYmJlck1pbkNsYXNzTmFtZSksYT1vLmVuc3VyZVNpbmdsZSh0LCJnIixkLmdyYWJiZXJNYXhDbGFzc05hbWUpLHM9e3g6MCx3aWR0aDpkLmhhbmRsZVdpZHRoLHJ4OmQuaGFuZGxlUmFkaXVzLGZpbGw6bC5iYWNrZ3JvdW5kLHN0cm9rZTpsLmRlZmF1bHRMaW5lLCJzdHJva2Utd2lkdGgiOmQuaGFuZGxlU3Ryb2tlV2lkdGgsInNoYXBlLXJlbmRlcmluZyI6ImNyaXNwRWRnZXMifSxjPXt5Ok1hdGgucm91bmQobi5faGVpZ2h0LzQpLGhlaWdodDpNYXRoLnJvdW5kKG4uX2hlaWdodC8yKX07aWYoby5lbnN1cmVTaW5nbGUoaSwicmVjdCIsZC5oYW5kbGVNaW5DbGFzc05hbWUsZnVuY3Rpb24odCl7dC5hdHRyKHMpfSkuYXR0cihjKSxvLmVuc3VyZVNpbmdsZShhLCJyZWN0IixkLmhhbmRsZU1heENsYXNzTmFtZSxmdW5jdGlvbih0KXt0LmF0dHIocyl9KS5hdHRyKGMpLCFlLl9jb250ZXh0LnN0YXRpY1Bsb3Qpe3ZhciB1PXt3aWR0aDpkLmdyYWJBcmVhV2lkdGgseDowLHk6MCxmaWxsOmQuZ3JhYkFyZWFGaWxsLGN1cnNvcjpkLmdyYWJBcmVhQ3Vyc29yfTtvLmVuc3VyZVNpbmdsZShpLCJyZWN0IixkLmdyYWJBcmVhTWluQ2xhc3NOYW1lLGZ1bmN0aW9uKHQpe3QuYXR0cih1KX0pLmF0dHIoImhlaWdodCIsbi5faGVpZ2h0KSxvLmVuc3VyZVNpbmdsZShhLCJyZWN0IixkLmdyYWJBcmVhTWF4Q2xhc3NOYW1lLGZ1bmN0aW9uKHQpe3QuYXR0cih1KX0pLmF0dHIoImhlaWdodCIsbi5faGVpZ2h0KX19ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj1mdW5jdGlvbih0KXt2YXIgZT1oLmxpc3Qoe19mdWxsTGF5b3V0OnR9LCJ4IiwhMCkscj1kLm5hbWUsbj1bXTtpZih0Ll9oYXMoImdsMmQiKSlyZXR1cm4gbjtmb3IodmFyIGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIGE9ZVtpXTthW3JdJiZhW3JdLnZpc2libGUmJm4ucHVzaChhKX1yZXR1cm4gbn0oZSk7dmFyIHM9ZS5faW5mb2xheWVyLnNlbGVjdEFsbCgiZy4iK2QuY29udGFpbmVyQ2xhc3NOYW1lKS5kYXRhKHIsZnVuY3Rpb24odCl7cmV0dXJuIHQuX25hbWV9KTtzLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChkLmNvbnRhaW5lckNsYXNzTmFtZSwhMCkuYXR0cigicG9pbnRlci1ldmVudHMiLCJhbGwiKSxzLmV4aXQoKS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciByPXRbZC5uYW1lXTtlLl90b3BkZWZzLnNlbGVjdCgiIyIrci5fY2xpcElkKS5yZW1vdmUoKX0pLnJlbW92ZSgpLDAhPT1yLmxlbmd0aCYmcy5lYWNoKGZ1bmN0aW9uKHIpe3ZhciBzPW4uc2VsZWN0KHRoaXMpLGw9cltkLm5hbWVdLHU9ZVtoLmlkMm5hbWUoci5hbmNob3IpXSxfPWxbaC5pZDJuYW1lKHIuYW5jaG9yKV07aWYobC5yYW5nZSl7dmFyIHc9bC5yYW5nZSxrPXIucmFuZ2U7d1swXT1yLmwycihNYXRoLm1pbihyLnIybCh3WzBdKSxyLnIybChrWzBdKSkpLHdbMV09ci5sMnIoTWF0aC5tYXgoci5yMmwod1sxXSksci5yMmwoa1sxXSkpKSxsLl9pbnB1dC5yYW5nZT13LnNsaWNlKCl9ci5jbGVhblJhbmdlKCJyYW5nZXNsaWRlci5yYW5nZSIpO2Zvcih2YXIgTT1lLm1hcmdpbixBPWUuX3NpemUsVD1yLmRvbWFpbixTPShyLl9ib3VuZGluZ0JveHx8e30pLmhlaWdodHx8MCxFPTEvMCxDPWguZ2V0U3VicGxvdHModCxyKSxMPTA7TDxDLmxlbmd0aDtMKyspe3ZhciB6PWguZ2V0RnJvbUlkKHQsQ1tMXS5zdWJzdHIoQ1tMXS5pbmRleE9mKCJ5IikpKTtFPU1hdGgubWluKEUsei5kb21haW5bMF0pfWwuX2lkPWQubmFtZStyLl9pZCxsLl9jbGlwSWQ9bC5faWQrIi0iK2UuX3VpZCxsLl93aWR0aD1BLncqKFRbMV0tVFswXSksbC5faGVpZ2h0PShlLmhlaWdodC1NLmItTS50KSpsLnRoaWNrbmVzcyxsLl9vZmZzZXRTaGlmdD1NYXRoLmZsb29yKGwuYm9yZGVyd2lkdGgvMik7dmFyIFA9TWF0aC5yb3VuZChNLmwrQS53KlRbMF0pLEk9TWF0aC5yb3VuZChBLnQrQS5oKigxLUUpK1MrbC5fb2Zmc2V0U2hpZnQrZC5leHRyYVBhZCk7cy5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitQKyIsIitJKyIpIik7dmFyIE89ci5yMmwobC5yYW5nZVswXSksRD1yLnIybChsLnJhbmdlWzFdKSxSPUQtTztpZihsLnAyZD1mdW5jdGlvbih0KXtyZXR1cm4gdC9sLl93aWR0aCpSK099LGwuZDJwPWZ1bmN0aW9uKHQpe3JldHVybih0LU8pL1IqbC5fd2lkdGh9LGwuX3JsPVtPLERdLCJtYXRjaCIhPT1fLnJhbmdlbW9kZSl7dmFyIEI9dS5yMmwoXy5yYW5nZVswXSksRj11LnIybChfLnJhbmdlWzFdKS1CO2wuZDJwT3BwQXhpcz1mdW5jdGlvbih0KXtyZXR1cm4odC1CKS9GKmwuX2hlaWdodH19cy5jYWxsKGcsdCxyLGwpLmNhbGwobSx0LHIsbCkuY2FsbCh2LHQscixsKS5jYWxsKHksdCxyLGwsXykuY2FsbCh4LHQscixsKS5jYWxsKGIsdCxyLGwpLGZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBzPXQuc2VsZWN0KCJyZWN0LiIrZC5zbGlkZUJveENsYXNzTmFtZSkubm9kZSgpLGw9dC5zZWxlY3QoInJlY3QuIitkLmdyYWJBcmVhTWluQ2xhc3NOYW1lKS5ub2RlKCksYz10LnNlbGVjdCgicmVjdC4iK2QuZ3JhYkFyZWFNYXhDbGFzc05hbWUpLm5vZGUoKTt0Lm9uKCJtb3VzZWRvd24iLGZ1bmN0aW9uKCl7dmFyIHU9bi5ldmVudCxoPXUudGFyZ2V0LGQ9dS5jbGllbnRYLGc9ZC10Lm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0LG09YS5kMnAoci5fcmxbMF0pLHY9YS5kMnAoci5fcmxbMV0pLHk9Zi5jb3ZlclNsaXAoKTtmdW5jdGlvbiB4KHQpe3ZhciB1LGYseCxiPSt0LmNsaWVudFgtZDtzd2l0Y2goaCl7Y2FzZSBzOng9ImV3LXJlc2l6ZSIsdT1tK2IsZj12K2I7YnJlYWs7Y2FzZSBsOng9ImNvbC1yZXNpemUiLHU9bStiLGY9djticmVhaztjYXNlIGM6eD0iY29sLXJlc2l6ZSIsdT1tLGY9ditiO2JyZWFrO2RlZmF1bHQ6eD0iZXctcmVzaXplIix1PWcsZj1nK2J9aWYoZjx1KXt2YXIgXz1mO2Y9dSx1PV99YS5fcGl4ZWxNaW49dSxhLl9waXhlbE1heD1mLHAobi5zZWxlY3QoeSkseCksZnVuY3Rpb24odCxlLHIsbil7ZnVuY3Rpb24gYSh0KXtyZXR1cm4gci5sMnIoby5jb25zdHJhaW4odCxuLl9ybFswXSxuLl9ybFsxXSkpfXZhciBzPWEobi5wMmQobi5fcGl4ZWxNaW4pKSxsPWEobi5wMmQobi5fcGl4ZWxNYXgpKTt3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uKCl7aS5jYWxsKCJyZWxheW91dCIsZSxyLl9uYW1lKyIucmFuZ2UiLFtzLGxdKX0pfSgwLGUscixhKX15LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIseCkseS5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIixmdW5jdGlvbiB0KCl7eS5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHgpO3kucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsdCk7by5yZW1vdmVFbGVtZW50KHkpfSl9KX0ocyx0LHIsbCksZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBzPWQuaGFuZGxlV2lkdGgvMjtmdW5jdGlvbiBsKHQpe3JldHVybiBvLmNvbnN0cmFpbih0LDAsbi5fd2lkdGgpfWZ1bmN0aW9uIGModCl7cmV0dXJuIG8uY29uc3RyYWluKHQsMCxuLl9oZWlnaHQpfWZ1bmN0aW9uIHUodCl7cmV0dXJuIG8uY29uc3RyYWluKHQsLXMsbi5fd2lkdGgrcyl9dmFyIGg9bChuLmQycChyLl9ybFswXSkpLGY9bChuLmQycChyLl9ybFsxXSkpO2lmKHQuc2VsZWN0KCJyZWN0LiIrZC5zbGlkZUJveENsYXNzTmFtZSkuYXR0cigieCIsaCkuYXR0cigid2lkdGgiLGYtaCksdC5zZWxlY3QoInJlY3QuIitkLm1hc2tNaW5DbGFzc05hbWUpLmF0dHIoIndpZHRoIixoKSx0LnNlbGVjdCgicmVjdC4iK2QubWFza01heENsYXNzTmFtZSkuYXR0cigieCIsZikuYXR0cigid2lkdGgiLG4uX3dpZHRoLWYpLCJtYXRjaCIhPT1hLnJhbmdlbW9kZSl7dmFyIHA9bi5faGVpZ2h0LWMobi5kMnBPcHBBeGlzKGkuX3JsWzFdKSksZz1uLl9oZWlnaHQtYyhuLmQycE9wcEF4aXMoaS5fcmxbMF0pKTt0LnNlbGVjdCgicmVjdC4iK2QubWFza01pbk9wcEF4aXNDbGFzc05hbWUpLmF0dHIoIngiLGgpLmF0dHIoImhlaWdodCIscCkuYXR0cigid2lkdGgiLGYtaCksdC5zZWxlY3QoInJlY3QuIitkLm1hc2tNYXhPcHBBeGlzQ2xhc3NOYW1lKS5hdHRyKCJ4IixoKS5hdHRyKCJ5IixnKS5hdHRyKCJoZWlnaHQiLG4uX2hlaWdodC1nKS5hdHRyKCJ3aWR0aCIsZi1oKSx0LnNlbGVjdCgicmVjdC4iK2Quc2xpZGVCb3hDbGFzc05hbWUpLmF0dHIoInkiLHApLmF0dHIoImhlaWdodCIsZy1wKX12YXIgbT1NYXRoLnJvdW5kKHUoaC1zKSktLjUsdj1NYXRoLnJvdW5kKHUoZi1zKSkrLjU7dC5zZWxlY3QoImcuIitkLmdyYWJiZXJNaW5DbGFzc05hbWUpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK20rIiwwLjUpIiksdC5zZWxlY3QoImcuIitkLmdyYWJiZXJNYXhDbGFzc05hbWUpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3YrIiwwLjUpIil9KHMsMCxyLGwsdSxfKSwiYm90dG9tIj09PXIuc2lkZSYmYy5kcmF3KHQsci5faWQrInRpdGxlIix7cHJvcENvbnRhaW5lcjpyLHByb3BOYW1lOnIuX25hbWUrIi50aXRsZSIscGxhY2Vob2xkZXI6ZS5fZGZsdFRpdGxlLngsYXR0cmlidXRlczp7eDpyLl9vZmZzZXQrci5fbGVuZ3RoLzIseTpJK2wuX2hlaWdodCtsLl9vZmZzZXRTaGlmdCsxMCsxLjUqci50aXRsZWZvbnQuc2l6ZSwidGV4dC1hbmNob3IiOiJtaWRkbGUifX0pLGEuYXV0b01hcmdpbih0LGwuX2lkLHt4OlRbMF0seTpFLGw6MCxyOjAsdDowLGI6bC5faGVpZ2h0K00uYitTLHBhZDpkLmV4dHJhUGFkKzIqbC5fb2Zmc2V0U2hpZnR9KX0pfX0seyIuLi8uLi9saWIiOjY4NCwiLi4vLi4vbGliL3NldGN1cnNvciI6NzA0LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjc0MywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjczMiwiLi4vLi4vcGxvdHMvcGxvdHMiOjc5NSwiLi4vLi4vcmVnaXN0cnkiOjgxNywiLi4vY29sb3IiOjU1OCwiLi4vZHJhZ2VsZW1lbnQiOjU4MCwiLi4vZHJhd2luZyI6NTgzLCIuLi90aXRsZXMiOjY0OSwiLi9jb25zdGFudHMiOjYzMixkMzoxNDd9XSw2MzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2F0dHJpYnV0ZXMiKSxhPXQoIi4vb3BwYXhpc19hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJjb21wb25lbnQiLG5hbWU6InJhbmdlc2xpZGVyIixzY2hlbWE6e3N1YnBsb3RzOnt4YXhpczp7cmFuZ2VzbGlkZXI6bi5leHRlbmRGbGF0KHt9LGkse3lheGlzOmF9KX19fSxsYXlvdXRBdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLGhhbmRsZURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjYWxjQXV0b3JhbmdlOnQoIi4vY2FsY19hdXRvcmFuZ2UiKSxkcmF3OnQoIi4vZHJhdyIpfX0seyIuLi8uLi9saWIiOjY4NCwiLi9hdHRyaWJ1dGVzIjo2MzAsIi4vY2FsY19hdXRvcmFuZ2UiOjYzMSwiLi9kZWZhdWx0cyI6NjMzLCIuL2RyYXciOjYzNCwiLi9vcHBheGlzX2F0dHJpYnV0ZXMiOjYzNn1dLDYzNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e19pc1N1YnBsb3RPYmo6ITAscmFuZ2Vtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhdXRvIiwiZml4ZWQiLCJtYXRjaCJdLGRmbHQ6Im1hdGNoIixlZGl0VHlwZToiY2FsYyJ9LHJhbmdlOnt2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6InBsb3QifSx7dmFsVHlwZToiYW55IixlZGl0VHlwZToicGxvdCJ9XSxlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJjYWxjIn19LHt9XSw2Mzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vYW5ub3RhdGlvbnMvYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvYXR0cmlidXRlcyIpLmxpbmUsYT10KCIuLi9kcmF3aW5nL2F0dHJpYnV0ZXMiKS5kYXNoLG89dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQscz10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIikudGVtcGxhdGVkQXJyYXk7ZS5leHBvcnRzPXMoInNoYXBlIix7dmlzaWJsZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsY0lmQXV0b3JhbmdlK2FycmF5ZHJhdyJ9LHR5cGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImNpcmNsZSIsInJlY3QiLCJwYXRoIiwibGluZSJdLGVkaXRUeXBlOiJjYWxjSWZBdXRvcmFuZ2UrYXJyYXlkcmF3In0sbGF5ZXI6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImJlbG93IiwiYWJvdmUiXSxkZmx0OiJhYm92ZSIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LHhyZWY6byh7fSxuLnhyZWYse30pLHhzaXplbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsic2NhbGVkIiwicGl4ZWwiXSxkZmx0OiJzY2FsZWQiLGVkaXRUeXBlOiJjYWxjSWZBdXRvcmFuZ2UrYXJyYXlkcmF3In0seGFuY2hvcjp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsY0lmQXV0b3JhbmdlK2FycmF5ZHJhdyJ9LHgwOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjSWZBdXRvcmFuZ2UrYXJyYXlkcmF3In0seDE6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGNJZkF1dG9yYW5nZSthcnJheWRyYXcifSx5cmVmOm8oe30sbi55cmVmLHt9KSx5c2l6ZW1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInNjYWxlZCIsInBpeGVsIl0sZGZsdDoic2NhbGVkIixlZGl0VHlwZToiY2FsY0lmQXV0b3JhbmdlK2FycmF5ZHJhdyJ9LHlhbmNob3I6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGNJZkF1dG9yYW5nZSthcnJheWRyYXcifSx5MDp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsY0lmQXV0b3JhbmdlK2FycmF5ZHJhdyJ9LHkxOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjSWZBdXRvcmFuZ2UrYXJyYXlkcmF3In0scGF0aDp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToiY2FsY0lmQXV0b3JhbmdlK2FycmF5ZHJhdyJ9LG9wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxLGVkaXRUeXBlOiJhcnJheWRyYXcifSxsaW5lOntjb2xvcjpvKHt9LGkuY29sb3Ise2VkaXRUeXBlOiJhcnJheWRyYXcifSksd2lkdGg6byh7fSxpLndpZHRoLHtlZGl0VHlwZToiY2FsY0lmQXV0b3JhbmdlK2FycmF5ZHJhdyJ9KSxkYXNoOm8oe30sYSx7ZWRpdFR5cGU6ImFycmF5ZHJhdyJ9KSxlZGl0VHlwZToiY2FsY0lmQXV0b3JhbmdlK2FycmF5ZHJhdyJ9LGZpbGxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6InJnYmEoMCwwLDAsMCkiLGVkaXRUeXBlOiJhcnJheWRyYXcifSxlZGl0VHlwZToiYXJyYXlkcmF3In0pfSx7Ii4uLy4uL2xpYi9leHRlbmQiOjY3MywiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6NzIyLCIuLi8uLi90cmFjZXMvc2NhdHRlci9hdHRyaWJ1dGVzIjoxMDE1LCIuLi9hbm5vdGF0aW9ucy9hdHRyaWJ1dGVzIjo1NDEsIi4uL2RyYXdpbmcvYXR0cmlidXRlcyI6NTgyfV0sNjM4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxhPXQoIi4vY29uc3RhbnRzIiksbz10KCIuL2hlbHBlcnMiKTtmdW5jdGlvbiBzKHQpe3JldHVybiBjKHQubGluZS53aWR0aCx0LnhzaXplbW9kZSx0LngwLHQueDEsdC5wYXRoLCExKX1mdW5jdGlvbiBsKHQpe3JldHVybiBjKHQubGluZS53aWR0aCx0LnlzaXplbW9kZSx0LnkwLHQueTEsdC5wYXRoLCEwKX1mdW5jdGlvbiBjKHQsZSxyLGkscyxsKXt2YXIgYz10LzIsdT1sO2lmKCJwaXhlbCI9PT1lKXt2YXIgaD1zP28uZXh0cmFjdFBhdGhDb29yZHMocyxsP2EucGFyYW1Jc1k6YS5wYXJhbUlzWCk6W3IsaV0sZj1uLmFnZ051bXMoTWF0aC5tYXgsbnVsbCxoKSxwPW4uYWdnTnVtcyhNYXRoLm1pbixudWxsLGgpLGQ9cDwwP01hdGguYWJzKHApK2M6YyxnPWY+MD9mK2M6YztyZXR1cm57cHBhZDpjLHBwYWRwbHVzOnU/ZDpnLHBwYWRtaW51czp1P2c6ZH19cmV0dXJue3BwYWQ6Y319ZnVuY3Rpb24gdSh0LGUscixuLGkpe3ZhciBzPSJjYXRlZ29yeSI9PT10LnR5cGU/dC5yMmM6dC5kMmM7aWYodm9pZCAwIT09ZSlyZXR1cm5bcyhlKSxzKHIpXTtpZihuKXt2YXIgbCxjLHUsaCxmPTEvMCxwPS0xLzAsZD1uLm1hdGNoKGEuc2VnbWVudFJFKTtmb3IoImRhdGUiPT09dC50eXBlJiYocz1vLmRlY29kZURhdGUocykpLGw9MDtsPGQubGVuZ3RoO2wrKyl2b2lkIDAhPT0oYz1pW2RbbF0uY2hhckF0KDApXS5kcmF3bikmJighKHU9ZFtsXS5zdWJzdHIoMSkubWF0Y2goYS5wYXJhbVJFKSl8fHUubGVuZ3RoPGN8fCgoaD1zKHVbY10pKTxmJiYoZj1oKSxoPnAmJihwPWgpKSk7cmV0dXJuIHA+PWY/W2YscF06dm9pZCAwfX1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dCxyPW4uZmlsdGVyVmlzaWJsZShlLnNoYXBlcyk7aWYoci5sZW5ndGgmJnQuX2Z1bGxEYXRhLmxlbmd0aClmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKyl7dmFyIGMsaCxmPXJbb107aWYoInBhcGVyIiE9PWYueHJlZil7dmFyIHA9InBpeGVsIj09PWYueHNpemVtb2RlP2YueGFuY2hvcjpmLngwLGQ9InBpeGVsIj09PWYueHNpemVtb2RlP2YueGFuY2hvcjpmLngxOyhoPXUoYz1pLmdldEZyb21JZCh0LGYueHJlZikscCxkLGYucGF0aCxhLnBhcmFtSXNYKSkmJmkuZXhwYW5kKGMsaCxzKGYpKX1pZigicGFwZXIiIT09Zi55cmVmKXt2YXIgZz0icGl4ZWwiPT09Zi55c2l6ZW1vZGU/Zi55YW5jaG9yOmYueTAsbT0icGl4ZWwiPT09Zi55c2l6ZW1vZGU/Zi55YW5jaG9yOmYueTE7KGg9dShjPWkuZ2V0RnJvbUlkKHQsZi55cmVmKSxnLG0sZi5wYXRoLGEucGFyYW1Jc1kpKSYmaS5leHBhbmQoYyxoLGwoZikpfX19fSx7Ii4uLy4uL2xpYiI6Njg0LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzMyLCIuL2NvbnN0YW50cyI6NjM5LCIuL2hlbHBlcnMiOjY0Mn1dLDYzOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e3NlZ21lbnRSRTovW01MSFZRQ1RTWl1bXk1MSFZRQ1RTWl0qL2cscGFyYW1SRTovW15ccyxdKy9nLHBhcmFtSXNYOntNOnswOiEwLGRyYXduOjB9LEw6ezA6ITAsZHJhd246MH0sSDp7MDohMCxkcmF3bjowfSxWOnt9LFE6ezA6ITAsMjohMCxkcmF3bjoyfSxDOnswOiEwLDI6ITAsNDohMCxkcmF3bjo0fSxUOnswOiEwLGRyYXduOjB9LFM6ezA6ITAsMjohMCxkcmF3bjoyfSxaOnt9fSxwYXJhbUlzWTp7TTp7MTohMCxkcmF3bjoxfSxMOnsxOiEwLGRyYXduOjF9LEg6e30sVjp7MDohMCxkcmF3bjowfSxROnsxOiEwLDM6ITAsZHJhd246M30sQzp7MTohMCwzOiEwLDU6ITAsZHJhd246NX0sVDp7MTohMCxkcmF3bjoxfSxTOnsxOiEwLDM6ITAsZHJhd246NX0sWjp7fX0sbnVtUGFyYW1zOntNOjIsTDoyLEg6MSxWOjEsUTo0LEM6NixUOjIsUzo0LFo6MH19fSx7fV0sNjQwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxhPXQoIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyIpLG89dCgiLi9hdHRyaWJ1dGVzIikscz10KCIuL2hlbHBlcnMiKTtmdW5jdGlvbiBsKHQsZSxyKXtmdW5jdGlvbiBhKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxvLHIsaSl9aWYoYSgidmlzaWJsZSIpKXthKCJsYXllciIpLGEoIm9wYWNpdHkiKSxhKCJmaWxsY29sb3IiKSxhKCJsaW5lLmNvbG9yIiksYSgibGluZS53aWR0aCIpLGEoImxpbmUuZGFzaCIpO2Zvcih2YXIgbD1hKCJ0eXBlIix0LnBhdGg/InBhdGgiOiJyZWN0IiksYz1hKCJ4c2l6ZW1vZGUiKSx1PWEoInlzaXplbW9kZSIpLGg9WyJ4IiwieSJdLGY9MDtmPDI7ZisrKXt2YXIgcCxkLGcsbT1oW2ZdLHY9bSsiYW5jaG9yIix5PSJ4Ij09PW0/Yzp1LHg9e19mdWxsTGF5b3V0OnJ9LGI9aS5jb2VyY2VSZWYodCxlLHgsbSwiIiwicGFwZXIiKTtpZigicGFwZXIiIT09Yj8ocD1pLmdldEZyb21JZCh4LGIpLGc9cy5yYW5nZVRvU2hhcGVQb3NpdGlvbihwKSxkPXMuc2hhcGVQb3NpdGlvblRvUmFuZ2UocCkpOmQ9Zz1uLmlkZW50aXR5LCJwYXRoIiE9PWwpe3ZhciBfPW0rIjAiLHc9bSsiMSIsaz10W19dLE09dFt3XTt0W19dPWQodFtfXSwhMCksdFt3XT1kKHRbd10sITApLCJwaXhlbCI9PT15PyhhKF8sMCksYSh3LDEwKSk6KGkuY29lcmNlUG9zaXRpb24oZSx4LGEsYixfLC4yNSksaS5jb2VyY2VQb3NpdGlvbihlLHgsYSxiLHcsLjc1KSksZVtfXT1nKGVbX10pLGVbd109ZyhlW3ddKSx0W19dPWssdFt3XT1NfWlmKCJwaXhlbCI9PT15KXt2YXIgQT10W3ZdO3Rbdl09ZCh0W3ZdLCEwKSxpLmNvZXJjZVBvc2l0aW9uKGUseCxhLGIsdiwuMjUpLGVbdl09ZyhlW3ZdKSx0W3ZdPUF9fSJwYXRoIj09PWw/YSgicGF0aCIpOm4ubm9uZU9yQWxsKHQsZSxbIngwIiwieDEiLCJ5MCIsInkxIl0pfX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXthKHQsZSx7bmFtZToic2hhcGVzIixoYW5kbGVJdGVtRGVmYXVsdHM6bH0pfX0seyIuLi8uLi9saWIiOjY4NCwiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIjo3MjgsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3MzIsIi4vYXR0cmlidXRlcyI6NjM3LCIuL2hlbHBlcnMiOjY0Mn1dLDY0MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLG89dCgiLi4vY29sb3IiKSxzPXQoIi4uL2RyYXdpbmciKSxsPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKS5hcnJheUVkaXRvcixjPXQoIi4uL2RyYWdlbGVtZW50IiksdT10KCIuLi8uLi9saWIvc2V0Y3Vyc29yIiksaD10KCIuL2NvbnN0YW50cyIpLGY9dCgiLi9oZWxwZXJzIik7ZnVuY3Rpb24gcCh0LGUpe3QuX2Z1bGxMYXlvdXQuX3BhcGVyZGl2LnNlbGVjdEFsbCgnLnNoYXBlbGF5ZXIgW2RhdGEtaW5kZXg9IicrZSsnIl0nKS5yZW1vdmUoKTt2YXIgcj10Ll9mdWxsTGF5b3V0LnNoYXBlc1tlXXx8e307aWYoci5faW5wdXQmJiExIT09ci52aXNpYmxlKWlmKCJiZWxvdyIhPT1yLmxheWVyKXYodC5fZnVsbExheW91dC5fc2hhcGVVcHBlckxheWVyKTtlbHNlIGlmKCJwYXBlciI9PT1yLnhyZWZ8fCJwYXBlciI9PT1yLnlyZWYpdih0Ll9mdWxsTGF5b3V0Ll9zaGFwZUxvd2VyTGF5ZXIpO2Vsc2V7dmFyIHA9dC5fZnVsbExheW91dC5fcGxvdHNbci54cmVmK3IueXJlZl07aWYocCl2KChwLm1haW5wbG90aW5mb3x8cCkuc2hhcGVsYXllcik7ZWxzZSB2KHQuX2Z1bGxMYXlvdXQuX3NoYXBlTG93ZXJMYXllcil9ZnVuY3Rpb24gdihwKXt2YXIgdj17ImRhdGEtaW5kZXgiOmUsImZpbGwtcnVsZSI6ImV2ZW5vZGQiLGQ6Zyh0LHIpfSx5PXIubGluZS53aWR0aD9yLmxpbmUuY29sb3I6InJnYmEoMCwwLDAsMCkiLHg9cC5hcHBlbmQoInBhdGgiKS5hdHRyKHYpLnN0eWxlKCJvcGFjaXR5IixyLm9wYWNpdHkpLmNhbGwoby5zdHJva2UseSkuY2FsbChvLmZpbGwsci5maWxsY29sb3IpLmNhbGwocy5kYXNoTGluZSxyLmxpbmUuZGFzaCxyLmxpbmUud2lkdGgpO2QoeCx0LHIpLHQuX2NvbnRleHQuZWRpdHMuc2hhcGVQb3NpdGlvbiYmZnVuY3Rpb24odCxlLHIsbyxwKXt2YXIgdix5LHgsYixfLHcsayxNLEEsVCxTLEUsQyxMLHosUCxJPTEwLE89MTAsRD0icGl4ZWwiPT09ci54c2l6ZW1vZGUsUj0icGl4ZWwiPT09ci55c2l6ZW1vZGUsQj0ibGluZSI9PT1yLnR5cGUsRj0icGF0aCI9PT1yLnR5cGUsTj1sKHQubGF5b3V0LCJzaGFwZXMiLHIpLGo9Ti5tb2RpZnlJdGVtLFY9YS5nZXRGcm9tSWQodCxyLnhyZWYpLFU9YS5nZXRGcm9tSWQodCxyLnlyZWYpLHE9Zi5nZXREYXRhVG9QaXhlbCh0LFYpLEg9Zi5nZXREYXRhVG9QaXhlbCh0LFUsITApLEc9Zi5nZXRQaXhlbFRvRGF0YSh0LFYpLFc9Zi5nZXRQaXhlbFRvRGF0YSh0LFUsITApLFk9Qj9mdW5jdGlvbigpe3ZhciB0PU1hdGgubWF4KHIubGluZS53aWR0aCwxMCksbj1wLmFwcGVuZCgiZyIpLmF0dHIoImRhdGEtaW5kZXgiLG8pO24uYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsZS5hdHRyKCJkIikpLnN0eWxlKHtjdXJzb3I6Im1vdmUiLCJzdHJva2Utd2lkdGgiOnQsInN0cm9rZS1vcGFjaXR5IjoiMCJ9KTt2YXIgaT17ImZpbGwtb3BhY2l0eSI6IjAifSxhPXQvMj4xMD90LzI6MTA7cmV0dXJuIG4uYXBwZW5kKCJjaXJjbGUiKS5hdHRyKHsiZGF0YS1saW5lLXBvaW50Ijoic3RhcnQtcG9pbnQiLGN4OkQ/cShyLnhhbmNob3IpK3IueDA6cShyLngwKSxjeTpSP0goci55YW5jaG9yKS1yLnkwOkgoci55MCkscjphfSkuc3R5bGUoaSkuY2xhc3NlZCgiY3Vyc29yLWdyYWIiLCEwKSxuLmFwcGVuZCgiY2lyY2xlIikuYXR0cih7ImRhdGEtbGluZS1wb2ludCI6ImVuZC1wb2ludCIsY3g6RD9xKHIueGFuY2hvcikrci54MTpxKHIueDEpLGN5OlI/SChyLnlhbmNob3IpLXIueTE6SChyLnkxKSxyOmF9KS5zdHlsZShpKS5jbGFzc2VkKCJjdXJzb3ItZ3JhYiIsITApLG59KCk6ZSxYPXtlbGVtZW50Olkubm9kZSgpLGdkOnQscHJlcEZuOmZ1bmN0aW9uKG4pe0QmJihfPXEoci54YW5jaG9yKSk7UiYmKHc9SChyLnlhbmNob3IpKTsicGF0aCI9PT1yLnR5cGU/ej1yLnBhdGg6KHY9RD9yLngwOnEoci54MCkseT1SP3IueTA6SChyLnkwKSx4PUQ/ci54MTpxKHIueDEpLGI9Uj9yLnkxOkgoci55MSkpO3Y8eD8oQT12LEM9IngwIixUPXgsTD0ieDEiKTooQT14LEM9IngxIixUPXYsTD0ieDAiKTshUiYmeTxifHxSJiZ5PmI/KGs9eSxTPSJ5MCIsTT1iLEU9InkxIik6KGs9YixTPSJ5MSIsTT15LEU9InkwIik7WihuKSxLKHAsciksZnVuY3Rpb24odCxlLHIpe3ZhciBuPWUueHJlZixpPWUueXJlZixvPWEuZ2V0RnJvbUlkKHIsbiksbD1hLmdldEZyb21JZChyLGkpLGM9IiI7InBhcGVyIj09PW58fG8uYXV0b3JhbmdlfHwoYys9bik7InBhcGVyIj09PWl8fGwuYXV0b3JhbmdlfHwoYys9aSk7dC5jYWxsKHMuc2V0Q2xpcFVybCxjPyJjbGlwIityLl9mdWxsTGF5b3V0Ll91aWQrYzpudWxsKX0oZSxyLHQpLFgubW92ZUZuPSJtb3ZlIj09PVA/JDpKfSxkb25lRm46ZnVuY3Rpb24oKXt1KGUpLFEocCksZChlLHQsciksbi5jYWxsKCJyZWxheW91dCIsdCxOLmdldFVwZGF0ZU9iaigpKX0sY2xpY2tGbjpmdW5jdGlvbigpe1EocCl9fTtmdW5jdGlvbiBaKHQpe2lmKEIpUD0icGF0aCI9PT10LnRhcmdldC50YWdOYW1lPyJtb3ZlIjoic3RhcnQtcG9pbnQiPT09dC50YXJnZXQuYXR0cmlidXRlc1siZGF0YS1saW5lLXBvaW50Il0udmFsdWU/InJlc2l6ZS1vdmVyLXN0YXJ0LXBvaW50IjoicmVzaXplLW92ZXItZW5kLXBvaW50IjtlbHNle3ZhciByPVguZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPXIucmlnaHQtci5sZWZ0LGk9ci5ib3R0b20tci50b3AsYT10LmNsaWVudFgtci5sZWZ0LG89dC5jbGllbnRZLXIudG9wLHM9IUYmJm4+SSYmaT5PJiYhdC5zaGlmdEtleT9jLmdldEN1cnNvcihhL24sMS1vL2kpOiJtb3ZlIjt1KGUscyksUD1zLnNwbGl0KCItIilbMF19fWZ1bmN0aW9uICQobixpKXtpZigicGF0aCI9PT1yLnR5cGUpe3ZhciBhPWZ1bmN0aW9uKHQpe3JldHVybiB0fSxvPWEscz1hO0Q/aigieGFuY2hvciIsci54YW5jaG9yPUcoXytuKSk6KG89ZnVuY3Rpb24odCl7cmV0dXJuIEcocSh0KStuKX0sViYmImRhdGUiPT09Vi50eXBlJiYobz1mLmVuY29kZURhdGUobykpKSxSP2ooInlhbmNob3IiLHIueWFuY2hvcj1XKHcraSkpOihzPWZ1bmN0aW9uKHQpe3JldHVybiBXKEgodCkraSl9LFUmJiJkYXRlIj09PVUudHlwZSYmKHM9Zi5lbmNvZGVEYXRlKHMpKSksaigicGF0aCIsci5wYXRoPW0oeixvLHMpKX1lbHNlIEQ/aigieGFuY2hvciIsci54YW5jaG9yPUcoXytuKSk6KGooIngwIixyLngwPUcodituKSksaigieDEiLHIueDE9Ryh4K24pKSksUj9qKCJ5YW5jaG9yIixyLnlhbmNob3I9Vyh3K2kpKTooaigieTAiLHIueTA9Vyh5K2kpKSxqKCJ5MSIsci55MT1XKGIraSkpKTtlLmF0dHIoImQiLGcodCxyKSksSyhwLHIpfWZ1bmN0aW9uIEoobixpKXtpZihGKXt2YXIgYT1mdW5jdGlvbih0KXtyZXR1cm4gdH0sbz1hLHM9YTtEP2ooInhhbmNob3IiLHIueGFuY2hvcj1HKF8rbikpOihvPWZ1bmN0aW9uKHQpe3JldHVybiBHKHEodCkrbil9LFYmJiJkYXRlIj09PVYudHlwZSYmKG89Zi5lbmNvZGVEYXRlKG8pKSksUj9qKCJ5YW5jaG9yIixyLnlhbmNob3I9Vyh3K2kpKToocz1mdW5jdGlvbih0KXtyZXR1cm4gVyhIKHQpK2kpfSxVJiYiZGF0ZSI9PT1VLnR5cGUmJihzPWYuZW5jb2RlRGF0ZShzKSkpLGooInBhdGgiLHIucGF0aD1tKHosbyxzKSl9ZWxzZSBpZihCKXtpZigicmVzaXplLW92ZXItc3RhcnQtcG9pbnQiPT09UCl7dmFyIGw9dituLGM9Uj95LWk6eStpO2ooIngwIixyLngwPUQ/bDpHKGwpKSxqKCJ5MCIsci55MD1SP2M6VyhjKSl9ZWxzZSBpZigicmVzaXplLW92ZXItZW5kLXBvaW50Ij09PVApe3ZhciB1PXgrbixoPVI/Yi1pOmIraTtqKCJ4MSIsci54MT1EP3U6Ryh1KSksaigieTEiLHIueTE9Uj9oOlcoaCkpfX1lbHNle3ZhciBkPX5QLmluZGV4T2YoIm4iKT9rK2k6ayxOPX5QLmluZGV4T2YoInMiKT9NK2k6TSxZPX5QLmluZGV4T2YoInciKT9BK246QSxYPX5QLmluZGV4T2YoImUiKT9UK246VDt+UC5pbmRleE9mKCJuIikmJlImJihkPWstaSksflAuaW5kZXhPZigicyIpJiZSJiYoTj1NLWkpLCghUiYmTi1kPk98fFImJmQtTj5PKSYmKGooUyxyW1NdPVI/ZDpXKGQpKSxqKEUscltFXT1SP046VyhOKSkpLFgtWT5JJiYoaihDLHJbQ109RD9ZOkcoWSkpLGooTCxyW0xdPUQ/WDpHKFgpKSl9ZS5hdHRyKCJkIixnKHQscikpLEsocCxyKX1mdW5jdGlvbiBLKHQsZSl7KER8fFIpJiZmdW5jdGlvbigpe3ZhciByPSJwYXRoIiE9PWUudHlwZSxuPXQuc2VsZWN0QWxsKCIudmlzdWFsLWN1ZSIpLmRhdGEoWzBdKTtuLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuYXR0cih7ZmlsbDoiI2ZmZiIsImZpbGwtcnVsZSI6ImV2ZW5vZGQiLHN0cm9rZToiIzAwMCIsInN0cm9rZS13aWR0aCI6MX0pLmNsYXNzZWQoInZpc3VhbC1jdWUiLCEwKTt2YXIgYT1xKEQ/ZS54YW5jaG9yOmkubWlkUmFuZ2Uocj9bZS54MCxlLngxXTpmLmV4dHJhY3RQYXRoQ29vcmRzKGUucGF0aCxoLnBhcmFtSXNYKSkpLG89SChSP2UueWFuY2hvcjppLm1pZFJhbmdlKHI/W2UueTAsZS55MV06Zi5leHRyYWN0UGF0aENvb3JkcyhlLnBhdGgsaC5wYXJhbUlzWSkpKTtpZihhPWYucm91bmRQb3NpdGlvbkZvclNoYXJwU3Ryb2tlUmVuZGVyaW5nKGEsMSksbz1mLnJvdW5kUG9zaXRpb25Gb3JTaGFycFN0cm9rZVJlbmRlcmluZyhvLDEpLEQmJlIpe3ZhciBzPSJNIisoYS0xLTEpKyIsIisoby0xLTEpKyJoLTh2Mmg4IHY4aDJ2LTggaDh2LTJoLTggdi04aC0yIFoiO24uYXR0cigiZCIscyl9ZWxzZSBpZihEKXt2YXIgbD0iTSIrKGEtMS0xKSsiLCIrKG8tOS0xKSsidjE4IGgyIHYtMTggWiI7bi5hdHRyKCJkIixsKX1lbHNle3ZhciBjPSJNIisoYS05LTEpKyIsIisoby0xLTEpKyJoMTggdjIgaC0xOCBaIjtuLmF0dHIoImQiLGMpfX0oKX1mdW5jdGlvbiBRKHQpe3Quc2VsZWN0QWxsKCIudmlzdWFsLWN1ZSIpLnJlbW92ZSgpfWMuaW5pdChYKSxZLm5vZGUoKS5vbm1vdXNlbW92ZT1afSh0LHgscixlLHApfX1mdW5jdGlvbiBkKHQsZSxyKXt2YXIgbj0oci54cmVmK3IueXJlZikucmVwbGFjZSgvcGFwZXIvZywiIik7dC5jYWxsKHMuc2V0Q2xpcFVybCxuPyJjbGlwIitlLl9mdWxsTGF5b3V0Ll91aWQrbjpudWxsKX1mdW5jdGlvbiBnKHQsZSl7dmFyIHIsbixvLHMsbCxjLHUscCxkPWUudHlwZSxnPWEuZ2V0RnJvbUlkKHQsZS54cmVmKSxtPWEuZ2V0RnJvbUlkKHQsZS55cmVmKSx2PXQuX2Z1bGxMYXlvdXQuX3NpemU7aWYoZz8ocj1mLnNoYXBlUG9zaXRpb25Ub1JhbmdlKGcpLG49ZnVuY3Rpb24odCl7cmV0dXJuIGcuX29mZnNldCtnLnIycChyKHQsITApKX0pOm49ZnVuY3Rpb24odCl7cmV0dXJuIHYubCt2LncqdH0sbT8obz1mLnNoYXBlUG9zaXRpb25Ub1JhbmdlKG0pLHM9ZnVuY3Rpb24odCl7cmV0dXJuIG0uX29mZnNldCttLnIycChvKHQsITApKX0pOnM9ZnVuY3Rpb24odCl7cmV0dXJuIHYudCt2LmgqKDEtdCl9LCJwYXRoIj09PWQpcmV0dXJuIGcmJiJkYXRlIj09PWcudHlwZSYmKG49Zi5kZWNvZGVEYXRlKG4pKSxtJiYiZGF0ZSI9PT1tLnR5cGUmJihzPWYuZGVjb2RlRGF0ZShzKSksZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQucGF0aCxhPXQueHNpemVtb2RlLG89dC55c2l6ZW1vZGUscz10LnhhbmNob3IsbD10LnlhbmNob3I7cmV0dXJuIG4ucmVwbGFjZShoLnNlZ21lbnRSRSxmdW5jdGlvbih0KXt2YXIgbj0wLGM9dC5jaGFyQXQoMCksdT1oLnBhcmFtSXNYW2NdLGY9aC5wYXJhbUlzWVtjXSxwPWgubnVtUGFyYW1zW2NdLGQ9dC5zdWJzdHIoMSkucmVwbGFjZShoLnBhcmFtUkUsZnVuY3Rpb24odCl7cmV0dXJuIHVbbl0/dD0icGl4ZWwiPT09YT9lKHMpK051bWJlcih0KTplKHQpOmZbbl0mJih0PSJwaXhlbCI9PT1vP3IobCktTnVtYmVyKHQpOnIodCkpLCsrbj5wJiYodD0iWCIpLHR9KTtyZXR1cm4gbj5wJiYoZD1kLnJlcGxhY2UoL1tccyxdKlguKi8sIiIpLGkubG9nKCJJZ25vcmluZyBleHRyYSBwYXJhbXMgaW4gc2VnbWVudCAiK3QpKSxjK2R9KX0oZSxuLHMpO2lmKCJwaXhlbCI9PT1lLnhzaXplbW9kZSl7dmFyIHk9bihlLnhhbmNob3IpO2w9eStlLngwLGM9eStlLngxfWVsc2UgbD1uKGUueDApLGM9bihlLngxKTtpZigicGl4ZWwiPT09ZS55c2l6ZW1vZGUpe3ZhciB4PXMoZS55YW5jaG9yKTt1PXgtZS55MCxwPXgtZS55MX1lbHNlIHU9cyhlLnkwKSxwPXMoZS55MSk7aWYoImxpbmUiPT09ZClyZXR1cm4iTSIrbCsiLCIrdSsiTCIrYysiLCIrcDtpZigicmVjdCI9PT1kKXJldHVybiJNIitsKyIsIit1KyJIIitjKyJWIitwKyJIIitsKyJaIjt2YXIgYj0obCtjKS8yLF89KHUrcCkvMix3PU1hdGguYWJzKGItbCksaz1NYXRoLmFicyhfLXUpLE09IkEiK3crIiwiK2ssQT1iK3crIiwiK187cmV0dXJuIk0iK0ErTSsiIDAgMSwxICIrKGIrIiwiKyhfLWspKStNKyIgMCAwLDEgIitBKyJaIn1mdW5jdGlvbiBtKHQsZSxyKXtyZXR1cm4gdC5yZXBsYWNlKGguc2VnbWVudFJFLGZ1bmN0aW9uKHQpe3ZhciBuPTAsaT10LmNoYXJBdCgwKSxhPWgucGFyYW1Jc1hbaV0sbz1oLnBhcmFtSXNZW2ldLHM9aC5udW1QYXJhbXNbaV07cmV0dXJuIGkrdC5zdWJzdHIoMSkucmVwbGFjZShoLnBhcmFtUkUsZnVuY3Rpb24odCl7cmV0dXJuIG4+PXM/dDooYVtuXT90PWUodCk6b1tuXSYmKHQ9cih0KSksbisrLHQpfSl9KX1lLmV4cG9ydHM9e2RyYXc6ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dDtmb3IodmFyIHIgaW4gZS5fc2hhcGVVcHBlckxheWVyLnNlbGVjdEFsbCgicGF0aCIpLnJlbW92ZSgpLGUuX3NoYXBlTG93ZXJMYXllci5zZWxlY3RBbGwoInBhdGgiKS5yZW1vdmUoKSxlLl9wbG90cyl7dmFyIG49ZS5fcGxvdHNbcl0uc2hhcGVsYXllcjtuJiZuLnNlbGVjdEFsbCgicGF0aCIpLnJlbW92ZSgpfWZvcih2YXIgaT0wO2k8ZS5zaGFwZXMubGVuZ3RoO2krKyllLnNoYXBlc1tpXS52aXNpYmxlJiZwKHQsaSl9LGRyYXdPbmU6cH19LHsiLi4vLi4vbGliIjo2ODQsIi4uLy4uL2xpYi9zZXRjdXJzb3IiOjcwNCwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6NzIyLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzMyLCIuLi8uLi9yZWdpc3RyeSI6ODE3LCIuLi9jb2xvciI6NTU4LCIuLi9kcmFnZWxlbWVudCI6NTgwLCIuLi9kcmF3aW5nIjo1ODMsIi4vY29uc3RhbnRzIjo2MzksIi4vaGVscGVycyI6NjQyfV0sNjQyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vY29uc3RhbnRzIiksaT10KCIuLi8uLi9saWIiKTtyLnJhbmdlVG9TaGFwZVBvc2l0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiJsb2ciPT09dC50eXBlP3QucjJkOmZ1bmN0aW9uKHQpe3JldHVybiB0fX0sci5zaGFwZVBvc2l0aW9uVG9SYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4ibG9nIj09PXQudHlwZT90LmQycjpmdW5jdGlvbih0KXtyZXR1cm4gdH19LHIuZGVjb2RlRGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSYmKGU9ZS5yZXBsYWNlKCJfIiwiICIpKSx0KGUpfX0sci5lbmNvZGVEYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdChlKS5yZXBsYWNlKCIgIiwiXyIpfX0sci5leHRyYWN0UGF0aENvb3Jkcz1mdW5jdGlvbih0LGUpe3ZhciByPVtdO3JldHVybiB0Lm1hdGNoKG4uc2VnbWVudFJFKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBhPWVbdC5jaGFyQXQoMCldLmRyYXduO2lmKHZvaWQgMCE9PWEpe3ZhciBvPXQuc3Vic3RyKDEpLm1hdGNoKG4ucGFyYW1SRSk7IW98fG8ubGVuZ3RoPGF8fHIucHVzaChpLmNsZWFuTnVtYmVyKG9bYV0pKX19KSxyfSxyLmdldERhdGFUb1BpeGVsPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaSxhPXQuX2Z1bGxMYXlvdXQuX3NpemU7aWYoZSl7dmFyIG89ci5zaGFwZVBvc2l0aW9uVG9SYW5nZShlKTtpPWZ1bmN0aW9uKHQpe3JldHVybiBlLl9vZmZzZXQrZS5yMnAobyh0LCEwKSl9LCJkYXRlIj09PWUudHlwZSYmKGk9ci5kZWNvZGVEYXRlKGkpKX1lbHNlIGk9bj9mdW5jdGlvbih0KXtyZXR1cm4gYS50K2EuaCooMS10KX06ZnVuY3Rpb24odCl7cmV0dXJuIGEubCthLncqdH07cmV0dXJuIGl9LHIuZ2V0UGl4ZWxUb0RhdGE9ZnVuY3Rpb24odCxlLG4pe3ZhciBpLGE9dC5fZnVsbExheW91dC5fc2l6ZTtpZihlKXt2YXIgbz1yLnJhbmdlVG9TaGFwZVBvc2l0aW9uKGUpO2k9ZnVuY3Rpb24odCl7cmV0dXJuIG8oZS5wMnIodC1lLl9vZmZzZXQpKX19ZWxzZSBpPW4/ZnVuY3Rpb24odCl7cmV0dXJuIDEtKHQtYS50KS9hLmh9OmZ1bmN0aW9uKHQpe3JldHVybih0LWEubCkvYS53fTtyZXR1cm4gaX0sci5yb3VuZFBvc2l0aW9uRm9yU2hhcnBTdHJva2VSZW5kZXJpbmc9ZnVuY3Rpb24odCxlKXt2YXIgcj0xPT09TWF0aC5yb3VuZChlJTIpLG49TWF0aC5yb3VuZCh0KTtyZXR1cm4gcj9uKy41Om59fSx7Ii4uLy4uL2xpYiI6Njg0LCIuL2NvbnN0YW50cyI6NjM5fV0sNjQzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vZHJhdyIpO2UuZXhwb3J0cz17bW9kdWxlVHlwZToiY29tcG9uZW50IixuYW1lOiJzaGFwZXMiLGxheW91dEF0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGluY2x1ZGVCYXNlUGxvdDp0KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vaW5jbHVkZV9jb21wb25lbnRzIikoInNoYXBlcyIpLGNhbGNBdXRvcmFuZ2U6dCgiLi9jYWxjX2F1dG9yYW5nZSIpLGRyYXc6bi5kcmF3LGRyYXdPbmU6bi5kcmF3T25lfX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vaW5jbHVkZV9jb21wb25lbnRzIjo3NDIsIi4vYXR0cmlidXRlcyI6NjM3LCIuL2NhbGNfYXV0b3JhbmdlIjo2MzgsIi4vZGVmYXVsdHMiOjY0MCwiLi9kcmF3Ijo2NDF9XSw2NDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9wbG90cy9wYWRfYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZERlZXBBbGwsbz10KCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGwscz10KCIuLi8uLi9wbG90cy9hbmltYXRpb25fYXR0cmlidXRlcyIpLGw9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLnRlbXBsYXRlZEFycmF5LGM9dCgiLi9jb25zdGFudHMiKSx1PWwoInN0ZXAiLHt2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSxtZXRob2Q6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInJlc3R5bGUiLCJyZWxheW91dCIsImFuaW1hdGUiLCJ1cGRhdGUiLCJza2lwIl0sZGZsdDoicmVzdHlsZSJ9LGFyZ3M6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGZyZWVMZW5ndGg6ITAsaXRlbXM6W3t2YWxUeXBlOiJhbnkifSx7dmFsVHlwZToiYW55In0se3ZhbFR5cGU6ImFueSJ9XX0sbGFiZWw6e3ZhbFR5cGU6InN0cmluZyJ9LHZhbHVlOnt2YWxUeXBlOiJzdHJpbmcifSxleGVjdXRlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfX0pO2UuZXhwb3J0cz1vKGwoInNsaWRlciIse3Zpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LGFjdGl2ZTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjB9LHN0ZXBzOnUsbGVubW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZnJhY3Rpb24iLCJwaXhlbHMiXSxkZmx0OiJmcmFjdGlvbiJ9LGxlbjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjF9LHg6e3ZhbFR5cGU6Im51bWJlciIsbWluOi0yLG1heDozLGRmbHQ6MH0scGFkOmEoe30saSx7fSx7dDp7ZGZsdDoyMH19KSx4YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhdXRvIiwibGVmdCIsImNlbnRlciIsInJpZ2h0Il0sZGZsdDoibGVmdCJ9LHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOi0yLG1heDozLGRmbHQ6MH0seWFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYXV0byIsInRvcCIsIm1pZGRsZSIsImJvdHRvbSJdLGRmbHQ6InRvcCJ9LHRyYW5zaXRpb246e2R1cmF0aW9uOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MTUwfSxlYXNpbmc6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpzLnRyYW5zaXRpb24uZWFzaW5nLnZhbHVlcyxkZmx0OiJjdWJpYy1pbi1vdXQifX0sY3VycmVudHZhbHVlOnt2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSx4YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJsZWZ0IiwiY2VudGVyIiwicmlnaHQiXSxkZmx0OiJsZWZ0In0sb2Zmc2V0Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MTB9LHByZWZpeDp7dmFsVHlwZToic3RyaW5nIn0sc3VmZml4Ont2YWxUeXBlOiJzdHJpbmcifSxmb250Om4oe30pfSxmb250Om4oe30pLGFjdGl2ZWJnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmMuZ3JpcEJnQWN0aXZlQ29sb3J9LGJnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmMucmFpbEJnQ29sb3J9LGJvcmRlcmNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpjLnJhaWxCb3JkZXJDb2xvcn0sYm9yZGVyd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDpjLnJhaWxCb3JkZXJXaWR0aH0sdGlja2xlbjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OmMudGlja0xlbmd0aH0sdGlja2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpjLnRpY2tDb2xvcn0sdGlja3dpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MX0sbWlub3J0aWNrbGVuOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6Yy5taW5vclRpY2tMZW5ndGh9fSksImFycmF5ZHJhdyIsImZyb20tcm9vdCIpfSx7Ii4uLy4uL2xpYi9leHRlbmQiOjY3MywiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6NzE1LCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo3MjIsIi4uLy4uL3Bsb3RzL2FuaW1hdGlvbl9hdHRyaWJ1dGVzIjo3MjcsIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6NzU4LCIuLi8uLi9wbG90cy9wYWRfYXR0cmlidXRlcyI6Nzk0LCIuL2NvbnN0YW50cyI6NjQ1fV0sNjQ1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bmFtZToic2xpZGVycyIsY29udGFpbmVyQ2xhc3NOYW1lOiJzbGlkZXItY29udGFpbmVyIixncm91cENsYXNzTmFtZToic2xpZGVyLWdyb3VwIixpbnB1dEFyZWFDbGFzczoic2xpZGVyLWlucHV0LWFyZWEiLHJhaWxSZWN0Q2xhc3M6InNsaWRlci1yYWlsLXJlY3QiLHJhaWxUb3VjaFJlY3RDbGFzczoic2xpZGVyLXJhaWwtdG91Y2gtcmVjdCIsZ3JpcFJlY3RDbGFzczoic2xpZGVyLWdyaXAtcmVjdCIsdGlja1JlY3RDbGFzczoic2xpZGVyLXRpY2stcmVjdCIsaW5wdXRQcm94eUNsYXNzOiJzbGlkZXItaW5wdXQtcHJveHkiLGxhYmVsc0NsYXNzOiJzbGlkZXItbGFiZWxzIixsYWJlbEdyb3VwQ2xhc3M6InNsaWRlci1sYWJlbC1ncm91cCIsbGFiZWxDbGFzczoic2xpZGVyLWxhYmVsIixjdXJyZW50VmFsdWVDbGFzczoic2xpZGVyLWN1cnJlbnQtdmFsdWUiLHJhaWxIZWlnaHQ6NSxtZW51SW5kZXhBdHRyTmFtZToic2xpZGVyLWFjdGl2ZS1pbmRleCIsYXV0b01hcmdpbklkUm9vdDoic2xpZGVyLSIsbWluV2lkdGg6MzAsbWluSGVpZ2h0OjMwLHRleHRQYWRYOjQwLGFycm93T2Zmc2V0WDo0LHJhaWxSYWRpdXM6MixyYWlsV2lkdGg6NSxyYWlsQm9yZGVyOjQscmFpbEJvcmRlcldpZHRoOjEscmFpbEJvcmRlckNvbG9yOiIjYmVjOGQ5IixyYWlsQmdDb2xvcjoiI2Y4ZmFmYyIscmFpbEluc2V0Ojgsc3RlcEluc2V0OjEwLGdyaXBSYWRpdXM6MTAsZ3JpcFdpZHRoOjIwLGdyaXBIZWlnaHQ6MjAsZ3JpcEJvcmRlcjoyMCxncmlwQm9yZGVyV2lkdGg6MSxncmlwQm9yZGVyQ29sb3I6IiNiZWM4ZDkiLGdyaXBCZ0NvbG9yOiIjZjZmOGZhIixncmlwQmdBY3RpdmVDb2xvcjoiI2RiZGRlMCIsbGFiZWxQYWRkaW5nOjgsbGFiZWxPZmZzZXQ6MCx0aWNrV2lkdGg6MSx0aWNrQ29sb3I6IiMzMzMiLHRpY2tPZmZzZXQ6MjUsdGlja0xlbmd0aDo3LG1pbm9yVGlja09mZnNldDoyNSxtaW5vclRpY2tDb2xvcjoiIzMzMyIsbWlub3JUaWNrTGVuZ3RoOjQsY3VycmVudFZhbHVlUGFkZGluZzo4LGN1cnJlbnRWYWx1ZUluc2V0OjB9fSx7fV0sNjQ2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIiksYT10KCIuL2F0dHJpYnV0ZXMiKSxvPXQoIi4vY29uc3RhbnRzIikubmFtZSxzPWEuc3RlcHM7ZnVuY3Rpb24gbCh0LGUscil7ZnVuY3Rpb24gbyhyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsYSxyLGkpfWZvcih2YXIgcz1pKHQsZSx7bmFtZToic3RlcHMiLGhhbmRsZUl0ZW1EZWZhdWx0czpjfSksbD0wLHU9MDt1PHMubGVuZ3RoO3UrKylzW3VdLnZpc2libGUmJmwrKztpZihsPDI/ZS52aXNpYmxlPSExOm8oInZpc2libGUiKSl7ZS5fc3RlcENvdW50PWw7dmFyIGg9ZS5fdmlzaWJsZVN0ZXBzPW4uZmlsdGVyVmlzaWJsZShzKTsoc1tvKCJhY3RpdmUiKV18fHt9KS52aXNpYmxlfHwoZS5hY3RpdmU9aFswXS5faW5kZXgpLG8oIngiKSxvKCJ5Iiksbi5ub25lT3JBbGwodCxlLFsieCIsInkiXSksbygieGFuY2hvciIpLG8oInlhbmNob3IiKSxvKCJsZW4iKSxvKCJsZW5tb2RlIiksbygicGFkLnQiKSxvKCJwYWQuciIpLG8oInBhZC5iIiksbygicGFkLmwiKSxuLmNvZXJjZUZvbnQobywiZm9udCIsci5mb250KSxvKCJjdXJyZW50dmFsdWUudmlzaWJsZSIpJiYobygiY3VycmVudHZhbHVlLnhhbmNob3IiKSxvKCJjdXJyZW50dmFsdWUucHJlZml4IiksbygiY3VycmVudHZhbHVlLnN1ZmZpeCIpLG8oImN1cnJlbnR2YWx1ZS5vZmZzZXQiKSxuLmNvZXJjZUZvbnQobywiY3VycmVudHZhbHVlLmZvbnQiLGUuZm9udCkpLG8oInRyYW5zaXRpb24uZHVyYXRpb24iKSxvKCJ0cmFuc2l0aW9uLmVhc2luZyIpLG8oImJnY29sb3IiKSxvKCJhY3RpdmViZ2NvbG9yIiksbygiYm9yZGVyY29sb3IiKSxvKCJib3JkZXJ3aWR0aCIpLG8oInRpY2tsZW4iKSxvKCJ0aWNrd2lkdGgiKSxvKCJ0aWNrY29sb3IiKSxvKCJtaW5vcnRpY2tsZW4iKX19ZnVuY3Rpb24gYyh0LGUpe2Z1bmN0aW9uIHIocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLHMscixpKX1pZigic2tpcCI9PT10Lm1ldGhvZHx8QXJyYXkuaXNBcnJheSh0LmFyZ3MpP3IoInZpc2libGUiKTplLnZpc2libGU9ITEpe3IoIm1ldGhvZCIpLHIoImFyZ3MiKTt2YXIgaT1yKCJsYWJlbCIsInN0ZXAtIitlLl9pbmRleCk7cigidmFsdWUiLGkpLHIoImV4ZWN1dGUiKX19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aSh0LGUse25hbWU6byxoYW5kbGVJdGVtRGVmYXVsdHM6bH0pfX0seyIuLi8uLi9saWIiOjY4NCwiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIjo3MjgsIi4vYXR0cmlidXRlcyI6NjQ0LCIuL2NvbnN0YW50cyI6NjQ1fV0sNjQ3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCIuLi8uLi9wbG90cy9wbG90cyIpLGE9dCgiLi4vY29sb3IiKSxvPXQoIi4uL2RyYXdpbmciKSxzPXQoIi4uLy4uL2xpYiIpLGw9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksYz10KCIuLi9sZWdlbmQvYW5jaG9yX3V0aWxzIiksdT10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIikuYXJyYXlFZGl0b3IsaD10KCIuL2NvbnN0YW50cyIpLGY9dCgiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCIpLHA9Zi5MSU5FX1NQQUNJTkcsZD1mLkZST01fVEwsZz1mLkZST01fQlI7ZnVuY3Rpb24gbSh0KXtyZXR1cm4gaC5hdXRvTWFyZ2luSWRSb290K3QuX2luZGV4fWZ1bmN0aW9uIHYodCl7cmV0dXJuIHQuX2luZGV4fWZ1bmN0aW9uIHkodCxlKXt2YXIgcj1vLnRlc3Rlci5zZWxlY3RBbGwoImcuIitoLmxhYmVsR3JvdXBDbGFzcykuZGF0YShlLl92aXNpYmxlU3RlcHMpO3IuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKGgubGFiZWxHcm91cENsYXNzLCEwKTt2YXIgYT0wLHM9MDtyLmVhY2goZnVuY3Rpb24odCl7dmFyIHI9XyhuLnNlbGVjdCh0aGlzKSx7c3RlcDp0fSxlKS5ub2RlKCk7aWYocil7dmFyIGk9by5iQm94KHIpO3M9TWF0aC5tYXgocyxpLmhlaWdodCksYT1NYXRoLm1heChhLGkud2lkdGgpfX0pLHIucmVtb3ZlKCk7dmFyIHU9ZS5fZGltcz17fTt1LmlucHV0QXJlYVdpZHRoPU1hdGgubWF4KGgucmFpbFdpZHRoLGguZ3JpcEhlaWdodCk7dmFyIGY9dC5fZnVsbExheW91dC5fc2l6ZTt1Lmx4PWYubCtmLncqZS54LHUubHk9Zi50K2YuaCooMS1lLnkpLCJmcmFjdGlvbiI9PT1lLmxlbm1vZGU/dS5vdXRlckxlbmd0aD1NYXRoLnJvdW5kKGYudyplLmxlbik6dS5vdXRlckxlbmd0aD1lLmxlbix1LmlucHV0QXJlYVN0YXJ0PTAsdS5pbnB1dEFyZWFMZW5ndGg9TWF0aC5yb3VuZCh1Lm91dGVyTGVuZ3RoLWUucGFkLmwtZS5wYWQucik7dmFyIHA9KHUuaW5wdXRBcmVhTGVuZ3RoLTIqaC5zdGVwSW5zZXQpLyhlLl9zdGVwQ291bnQtMSksdj1hK2gubGFiZWxQYWRkaW5nO2lmKHUubGFiZWxTdHJpZGU9TWF0aC5tYXgoMSxNYXRoLmNlaWwodi9wKSksdS5sYWJlbEhlaWdodD1zLHUuY3VycmVudFZhbHVlTWF4V2lkdGg9MCx1LmN1cnJlbnRWYWx1ZUhlaWdodD0wLHUuY3VycmVudFZhbHVlVG90YWxIZWlnaHQ9MCx1LmN1cnJlbnRWYWx1ZU1heExpbmVzPTEsZS5jdXJyZW50dmFsdWUudmlzaWJsZSl7dmFyIHk9by50ZXN0ZXIuYXBwZW5kKCJnIik7ci5lYWNoKGZ1bmN0aW9uKHQpe3ZhciByPXgoeSxlLHQubGFiZWwpLG49ci5ub2RlKCkmJm8uYkJveChyLm5vZGUoKSl8fHt3aWR0aDowLGhlaWdodDowfSxpPWwubGluZUNvdW50KHIpO3UuY3VycmVudFZhbHVlTWF4V2lkdGg9TWF0aC5tYXgodS5jdXJyZW50VmFsdWVNYXhXaWR0aCxNYXRoLmNlaWwobi53aWR0aCkpLHUuY3VycmVudFZhbHVlSGVpZ2h0PU1hdGgubWF4KHUuY3VycmVudFZhbHVlSGVpZ2h0LE1hdGguY2VpbChuLmhlaWdodCkpLHUuY3VycmVudFZhbHVlTWF4TGluZXM9TWF0aC5tYXgodS5jdXJyZW50VmFsdWVNYXhMaW5lcyxpKX0pLHUuY3VycmVudFZhbHVlVG90YWxIZWlnaHQ9dS5jdXJyZW50VmFsdWVIZWlnaHQrZS5jdXJyZW50dmFsdWUub2Zmc2V0LHkucmVtb3ZlKCl9dS5oZWlnaHQ9dS5jdXJyZW50VmFsdWVUb3RhbEhlaWdodCtoLnRpY2tPZmZzZXQrZS50aWNrbGVuK2gubGFiZWxPZmZzZXQrdS5sYWJlbEhlaWdodCtlLnBhZC50K2UucGFkLmI7dmFyIGI9ImxlZnQiO2MuaXNSaWdodEFuY2hvcihlKSYmKHUubHgtPXUub3V0ZXJMZW5ndGgsYj0icmlnaHQiKSxjLmlzQ2VudGVyQW5jaG9yKGUpJiYodS5seC09dS5vdXRlckxlbmd0aC8yLGI9ImNlbnRlciIpO3ZhciB3PSJ0b3AiO2MuaXNCb3R0b21BbmNob3IoZSkmJih1Lmx5LT11LmhlaWdodCx3PSJib3R0b20iKSxjLmlzTWlkZGxlQW5jaG9yKGUpJiYodS5seS09dS5oZWlnaHQvMix3PSJtaWRkbGUiKSx1Lm91dGVyTGVuZ3RoPU1hdGguY2VpbCh1Lm91dGVyTGVuZ3RoKSx1LmhlaWdodD1NYXRoLmNlaWwodS5oZWlnaHQpLHUubHg9TWF0aC5yb3VuZCh1Lmx4KSx1Lmx5PU1hdGgucm91bmQodS5seSk7dmFyIGs9e3k6ZS55LGI6dS5oZWlnaHQqZ1t3XSx0OnUuaGVpZ2h0KmRbd119OyJmcmFjdGlvbiI9PT1lLmxlbm1vZGU/KGsubD0wLGsueGw9ZS54LWUubGVuKmRbYl0say5yPTAsay54cj1lLngrZS5sZW4qZ1tiXSk6KGsueD1lLngsay5sPXUub3V0ZXJMZW5ndGgqZFtiXSxrLnI9dS5vdXRlckxlbmd0aCpnW2JdKSxpLmF1dG9NYXJnaW4odCxtKGUpLGspfWZ1bmN0aW9uIHgodCxlLHIpe2lmKGUuY3VycmVudHZhbHVlLnZpc2libGUpe3ZhciBuLGksYT1lLl9kaW1zO3N3aXRjaChlLmN1cnJlbnR2YWx1ZS54YW5jaG9yKXtjYXNlInJpZ2h0IjpuPWEuaW5wdXRBcmVhTGVuZ3RoLWguY3VycmVudFZhbHVlSW5zZXQtYS5jdXJyZW50VmFsdWVNYXhXaWR0aCxpPSJsZWZ0IjticmVhaztjYXNlImNlbnRlciI6bj0uNSphLmlucHV0QXJlYUxlbmd0aCxpPSJtaWRkbGUiO2JyZWFrO2RlZmF1bHQ6bj1oLmN1cnJlbnRWYWx1ZUluc2V0LGk9ImxlZnQifXZhciBjPXMuZW5zdXJlU2luZ2xlKHQsInRleHQiLGgubGFiZWxDbGFzcyxmdW5jdGlvbih0KXt0LmNsYXNzZWQoInVzZXItc2VsZWN0LW5vbmUiLCEwKS5hdHRyKHsidGV4dC1hbmNob3IiOmksImRhdGEtbm90ZXgiOjF9KX0pLHU9ZS5jdXJyZW50dmFsdWUucHJlZml4P2UuY3VycmVudHZhbHVlLnByZWZpeDoiIjtpZigic3RyaW5nIj09dHlwZW9mIHIpdSs9cjtlbHNlIHUrPWUuc3RlcHNbZS5hY3RpdmVdLmxhYmVsO2UuY3VycmVudHZhbHVlLnN1ZmZpeCYmKHUrPWUuY3VycmVudHZhbHVlLnN1ZmZpeCksYy5jYWxsKG8uZm9udCxlLmN1cnJlbnR2YWx1ZS5mb250KS50ZXh0KHUpLmNhbGwobC5jb252ZXJ0VG9Uc3BhbnMsZS5fZ2QpO3ZhciBmPWwubGluZUNvdW50KGMpLGQ9KGEuY3VycmVudFZhbHVlTWF4TGluZXMrMS1mKSplLmN1cnJlbnR2YWx1ZS5mb250LnNpemUqcDtyZXR1cm4gbC5wb3NpdGlvblRleHQoYyxuLGQpLGN9fWZ1bmN0aW9uIGIodCxlLHIpe3MuZW5zdXJlU2luZ2xlKHQsInJlY3QiLGguZ3JpcFJlY3RDbGFzcyxmdW5jdGlvbihuKXtuLmNhbGwoQSxlLHQscikuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYWxsIil9KS5hdHRyKHt3aWR0aDpoLmdyaXBXaWR0aCxoZWlnaHQ6aC5ncmlwSGVpZ2h0LHJ4OmguZ3JpcFJhZGl1cyxyeTpoLmdyaXBSYWRpdXN9KS5jYWxsKGEuc3Ryb2tlLHIuYm9yZGVyY29sb3IpLmNhbGwoYS5maWxsLHIuYmdjb2xvcikuc3R5bGUoInN0cm9rZS13aWR0aCIsci5ib3JkZXJ3aWR0aCsicHgiKX1mdW5jdGlvbiBfKHQsZSxyKXt2YXIgbj1zLmVuc3VyZVNpbmdsZSh0LCJ0ZXh0IixoLmxhYmVsQ2xhc3MsZnVuY3Rpb24odCl7dC5jbGFzc2VkKCJ1c2VyLXNlbGVjdC1ub25lIiwhMCkuYXR0cih7InRleHQtYW5jaG9yIjoibWlkZGxlIiwiZGF0YS1ub3RleCI6MX0pfSk7cmV0dXJuIG4uY2FsbChvLmZvbnQsci5mb250KS50ZXh0KGUuc3RlcC5sYWJlbCkuY2FsbChsLmNvbnZlcnRUb1RzcGFucyxyLl9nZCksbn1mdW5jdGlvbiB3KHQsZSl7dmFyIHI9cy5lbnN1cmVTaW5nbGUodCwiZyIsaC5sYWJlbHNDbGFzcyksaT1lLl9kaW1zLGE9ci5zZWxlY3RBbGwoImcuIitoLmxhYmVsR3JvdXBDbGFzcykuZGF0YShpLmxhYmVsU3RlcHMpO2EuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKGgubGFiZWxHcm91cENsYXNzLCEwKSxhLmV4aXQoKS5yZW1vdmUoKSxhLmVhY2goZnVuY3Rpb24odCl7dmFyIHI9bi5zZWxlY3QodGhpcyk7ci5jYWxsKF8sdCxlKSxvLnNldFRyYW5zbGF0ZShyLEUoZSx0LmZyYWN0aW9uKSxoLnRpY2tPZmZzZXQrZS50aWNrbGVuK2UuZm9udC5zaXplKnAraC5sYWJlbE9mZnNldCtpLmN1cnJlbnRWYWx1ZVRvdGFsSGVpZ2h0KX0pfWZ1bmN0aW9uIGsodCxlLHIsbixpKXt2YXIgYT1NYXRoLnJvdW5kKG4qKHIuX3N0ZXBDb3VudC0xKSksbz1yLl92aXNpYmxlU3RlcHNbYV0uX2luZGV4O28hPT1yLmFjdGl2ZSYmTSh0LGUscixvLCEwLGkpfWZ1bmN0aW9uIE0odCxlLHIsbixhLG8pe3ZhciBzPXIuYWN0aXZlO3IuYWN0aXZlPW4sdSh0LmxheW91dCxoLm5hbWUscikuYXBwbHlVcGRhdGUoImFjdGl2ZSIsbik7dmFyIGw9ci5zdGVwc1tyLmFjdGl2ZV07ZS5jYWxsKFMscixvKSxlLmNhbGwoeCxyKSx0LmVtaXQoInBsb3RseV9zbGlkZXJjaGFuZ2UiLHtzbGlkZXI6cixzdGVwOnIuc3RlcHNbci5hY3RpdmVdLGludGVyYWN0aW9uOmEscHJldmlvdXNBY3RpdmU6c30pLGwmJmwubWV0aG9kJiZhJiYoZS5fbmV4dE1ldGhvZD8oZS5fbmV4dE1ldGhvZC5zdGVwPWwsZS5fbmV4dE1ldGhvZC5kb0NhbGxiYWNrPWEsZS5fbmV4dE1ldGhvZC5kb1RyYW5zaXRpb249byk6KGUuX25leHRNZXRob2Q9e3N0ZXA6bCxkb0NhbGxiYWNrOmEsZG9UcmFuc2l0aW9uOm99LGUuX25leHRNZXRob2RSYWY9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpe3ZhciByPWUuX25leHRNZXRob2Quc3RlcDtyLm1ldGhvZCYmKHIuZXhlY3V0ZSYmaS5leGVjdXRlQVBJQ29tbWFuZCh0LHIubWV0aG9kLHIuYXJncyksZS5fbmV4dE1ldGhvZD1udWxsLGUuX25leHRNZXRob2RSYWY9bnVsbCl9KSkpfWZ1bmN0aW9uIEEodCxlLHIpe3ZhciBpPXIubm9kZSgpLG89bi5zZWxlY3QoZSk7ZnVuY3Rpb24gcygpe3JldHVybiByLmRhdGEoKVswXX10Lm9uKCJtb3VzZWRvd24iLGZ1bmN0aW9uKCl7dmFyIHQ9cygpO2UuZW1pdCgicGxvdGx5X3NsaWRlcnN0YXJ0Iix7c2xpZGVyOnR9KTt2YXIgbD1yLnNlbGVjdCgiLiIraC5ncmlwUmVjdENsYXNzKTtuLmV2ZW50LnN0b3BQcm9wYWdhdGlvbigpLG4uZXZlbnQucHJldmVudERlZmF1bHQoKSxsLmNhbGwoYS5maWxsLHQuYWN0aXZlYmdjb2xvcik7dmFyIGM9Qyh0LG4ubW91c2UoaSlbMF0pO2soZSxyLHQsYywhMCksdC5fZHJhZ2dpbmc9ITAsby5vbigibW91c2Vtb3ZlIixmdW5jdGlvbigpe3ZhciB0PXMoKSxhPUModCxuLm1vdXNlKGkpWzBdKTtrKGUscix0LGEsITEpfSksby5vbigibW91c2V1cCIsZnVuY3Rpb24oKXt2YXIgdD1zKCk7dC5fZHJhZ2dpbmc9ITEsbC5jYWxsKGEuZmlsbCx0LmJnY29sb3IpLG8ub24oIm1vdXNldXAiLG51bGwpLG8ub24oIm1vdXNlbW92ZSIsbnVsbCksZS5lbWl0KCJwbG90bHlfc2xpZGVyZW5kIix7c2xpZGVyOnQsc3RlcDp0LnN0ZXBzW3QuYWN0aXZlXX0pfSl9KX1mdW5jdGlvbiBUKHQsZSl7dmFyIHI9dC5zZWxlY3RBbGwoInJlY3QuIitoLnRpY2tSZWN0Q2xhc3MpLmRhdGEoZS5fdmlzaWJsZVN0ZXBzKSxpPWUuX2RpbXM7ci5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoaC50aWNrUmVjdENsYXNzLCEwKSxyLmV4aXQoKS5yZW1vdmUoKSxyLmF0dHIoe3dpZHRoOmUudGlja3dpZHRoKyJweCIsInNoYXBlLXJlbmRlcmluZyI6ImNyaXNwRWRnZXMifSksci5lYWNoKGZ1bmN0aW9uKHQscil7dmFyIHM9ciVpLmxhYmVsU3RyaWRlPT0wLGw9bi5zZWxlY3QodGhpcyk7bC5hdHRyKHtoZWlnaHQ6cz9lLnRpY2tsZW46ZS5taW5vcnRpY2tsZW59KS5jYWxsKGEuZmlsbCxlLnRpY2tjb2xvciksby5zZXRUcmFuc2xhdGUobCxFKGUsci8oZS5fc3RlcENvdW50LTEpKS0uNSplLnRpY2t3aWR0aCwocz9oLnRpY2tPZmZzZXQ6aC5taW5vclRpY2tPZmZzZXQpK2kuY3VycmVudFZhbHVlVG90YWxIZWlnaHQpfSl9ZnVuY3Rpb24gUyh0LGUscil7Zm9yKHZhciBuPXQuc2VsZWN0KCJyZWN0LiIraC5ncmlwUmVjdENsYXNzKSxpPTAsYT0wO2E8ZS5fc3RlcENvdW50O2ErKylpZihlLl92aXNpYmxlU3RlcHNbYV0uX2luZGV4PT09ZS5hY3RpdmUpe2k9YTticmVha312YXIgbz1FKGUsaS8oZS5fc3RlcENvdW50LTEpKTtpZighZS5faW52b2tpbmdDb21tYW5kKXt2YXIgcz1uO3ImJmUudHJhbnNpdGlvbi5kdXJhdGlvbj4wJiYocz1zLnRyYW5zaXRpb24oKS5kdXJhdGlvbihlLnRyYW5zaXRpb24uZHVyYXRpb24pLmVhc2UoZS50cmFuc2l0aW9uLmVhc2luZykpLHMuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKG8tLjUqaC5ncmlwV2lkdGgpKyIsIitlLl9kaW1zLmN1cnJlbnRWYWx1ZVRvdGFsSGVpZ2h0KyIpIil9fWZ1bmN0aW9uIEUodCxlKXt2YXIgcj10Ll9kaW1zO3JldHVybiByLmlucHV0QXJlYVN0YXJ0K2guc3RlcEluc2V0KyhyLmlucHV0QXJlYUxlbmd0aC0yKmguc3RlcEluc2V0KSpNYXRoLm1pbigxLE1hdGgubWF4KDAsZSkpfWZ1bmN0aW9uIEModCxlKXt2YXIgcj10Ll9kaW1zO3JldHVybiBNYXRoLm1pbigxLE1hdGgubWF4KDAsKGUtaC5zdGVwSW5zZXQtci5pbnB1dEFyZWFTdGFydCkvKHIuaW5wdXRBcmVhTGVuZ3RoLTIqaC5zdGVwSW5zZXQtMipyLmlucHV0QXJlYVN0YXJ0KSkpfWZ1bmN0aW9uIEwodCxlLHIpe3ZhciBuPXIuX2RpbXMsaT1zLmVuc3VyZVNpbmdsZSh0LCJyZWN0IixoLnJhaWxUb3VjaFJlY3RDbGFzcyxmdW5jdGlvbihuKXtuLmNhbGwoQSxlLHQscikuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYWxsIil9KTtpLmF0dHIoe3dpZHRoOm4uaW5wdXRBcmVhTGVuZ3RoLGhlaWdodDpNYXRoLm1heChuLmlucHV0QXJlYVdpZHRoLGgudGlja09mZnNldCtyLnRpY2tsZW4rbi5sYWJlbEhlaWdodCl9KS5jYWxsKGEuZmlsbCxyLmJnY29sb3IpLmF0dHIoIm9wYWNpdHkiLDApLG8uc2V0VHJhbnNsYXRlKGksMCxuLmN1cnJlbnRWYWx1ZVRvdGFsSGVpZ2h0KX1mdW5jdGlvbiB6KHQsZSl7dmFyIHI9ZS5fZGltcyxuPXIuaW5wdXRBcmVhTGVuZ3RoLTIqaC5yYWlsSW5zZXQsaT1zLmVuc3VyZVNpbmdsZSh0LCJyZWN0IixoLnJhaWxSZWN0Q2xhc3MpO2kuYXR0cih7d2lkdGg6bixoZWlnaHQ6aC5yYWlsV2lkdGgscng6aC5yYWlsUmFkaXVzLHJ5OmgucmFpbFJhZGl1cywic2hhcGUtcmVuZGVyaW5nIjoiY3Jpc3BFZGdlcyJ9KS5jYWxsKGEuc3Ryb2tlLGUuYm9yZGVyY29sb3IpLmNhbGwoYS5maWxsLGUuYmdjb2xvcikuc3R5bGUoInN0cm9rZS13aWR0aCIsZS5ib3JkZXJ3aWR0aCsicHgiKSxvLnNldFRyYW5zbGF0ZShpLGgucmFpbEluc2V0LC41KihyLmlucHV0QXJlYVdpZHRoLWgucmFpbFdpZHRoKStyLmN1cnJlbnRWYWx1ZVRvdGFsSGVpZ2h0KX1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dCxyPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXRbaC5uYW1lXSxuPVtdLGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIGE9cltpXTthLnZpc2libGUmJihhLl9nZD1lLG4ucHVzaChhKSl9cmV0dXJuIG59KGUsdCksYT1lLl9pbmZvbGF5ZXIuc2VsZWN0QWxsKCJnLiIraC5jb250YWluZXJDbGFzc05hbWUpLmRhdGEoci5sZW5ndGg+MD9bMF06W10pO2Z1bmN0aW9uIHMoZSl7ZS5fY29tbWFuZE9ic2VydmVyJiYoZS5fY29tbWFuZE9ic2VydmVyLnJlbW92ZSgpLGRlbGV0ZSBlLl9jb21tYW5kT2JzZXJ2ZXIpLGkuYXV0b01hcmdpbih0LG0oZSkpfWlmKGEuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKGguY29udGFpbmVyQ2xhc3NOYW1lLCEwKS5zdHlsZSgiY3Vyc29yIiwiZXctcmVzaXplIiksYS5leGl0KCkuZWFjaChmdW5jdGlvbigpe24uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgiZy4iK2guZ3JvdXBDbGFzc05hbWUpLmVhY2gocyl9KS5yZW1vdmUoKSwwIT09ci5sZW5ndGgpe3ZhciBsPWEuc2VsZWN0QWxsKCJnLiIraC5ncm91cENsYXNzTmFtZSkuZGF0YShyLHYpO2wuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKGguZ3JvdXBDbGFzc05hbWUsITApLGwuZXhpdCgpLmVhY2gocykucmVtb3ZlKCk7Zm9yKHZhciBjPTA7YzxyLmxlbmd0aDtjKyspe3ZhciB1PXJbY107eSh0LHUpfWwuZWFjaChmdW5jdGlvbihlKXt2YXIgcj1uLnNlbGVjdCh0aGlzKTshZnVuY3Rpb24odCl7dmFyIGU9dC5fZGltcztlLmxhYmVsU3RlcHM9W107Zm9yKHZhciByPXQuX3N0ZXBDb3VudCxuPTA7bjxyO24rPWUubGFiZWxTdHJpZGUpZS5sYWJlbFN0ZXBzLnB1c2goe2ZyYWN0aW9uOm4vKHItMSksc3RlcDp0Ll92aXNpYmxlU3RlcHNbbl19KX0oZSksaS5tYW5hZ2VDb21tYW5kT2JzZXJ2ZXIodCxlLGUuX3Zpc2libGVTdGVwcyxmdW5jdGlvbihlKXt2YXIgbj1yLmRhdGEoKVswXTtuLmFjdGl2ZSE9PWUuaW5kZXgmJihuLl9kcmFnZ2luZ3x8TSh0LHIsbixlLmluZGV4LCExLCEwKSl9KSxmdW5jdGlvbih0LGUscil7KHIuc3RlcHNbci5hY3RpdmVdfHx7fSkudmlzaWJsZXx8KHIuYWN0aXZlPXIuX3Zpc2libGVTdGVwc1swXS5faW5kZXgpO2UuY2FsbCh4LHIpLmNhbGwoeixyKS5jYWxsKHcscikuY2FsbChULHIpLmNhbGwoTCx0LHIpLmNhbGwoYix0LHIpO3ZhciBuPXIuX2RpbXM7by5zZXRUcmFuc2xhdGUoZSxuLmx4K3IucGFkLmwsbi5seStyLnBhZC50KSxlLmNhbGwoUyxyLCExKSxlLmNhbGwoeCxyKX0odCxuLnNlbGVjdCh0aGlzKSxlKX0pfX19LHsiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCI6NjU2LCIuLi8uLi9saWIiOjY4NCwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo3MDgsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjcyMiwiLi4vLi4vcGxvdHMvcGxvdHMiOjc5NSwiLi4vY29sb3IiOjU1OCwiLi4vZHJhd2luZyI6NTgzLCIuLi9sZWdlbmQvYW5jaG9yX3V0aWxzIjo2MTAsIi4vY29uc3RhbnRzIjo2NDUsZDM6MTQ3fV0sNjQ4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vY29uc3RhbnRzIik7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJjb21wb25lbnQiLG5hbWU6bi5uYW1lLGxheW91dEF0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGRyYXc6dCgiLi9kcmF3Iil9fSx7Ii4vYXR0cmlidXRlcyI6NjQ0LCIuL2NvbnN0YW50cyI6NjQ1LCIuL2RlZmF1bHRzIjo2NDYsIi4vZHJhdyI6NjQ3fV0sNjQ5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCJmYXN0LWlzbnVtZXJpYyIpLGE9dCgiLi4vLi4vcGxvdHMvcGxvdHMiKSxvPXQoIi4uLy4uL3JlZ2lzdHJ5Iikscz10KCIuLi8uLi9saWIiKSxsPXQoIi4uL2RyYXdpbmciKSxjPXQoIi4uL2NvbG9yIiksdT10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSxoPXQoIi4uLy4uL2NvbnN0YW50cy9pbnRlcmFjdGlvbnMiKTtlLmV4cG9ydHM9e2RyYXc6ZnVuY3Rpb24odCxlLHIpe3ZhciBwLGQ9ci5wcm9wQ29udGFpbmVyLGc9ci5wcm9wTmFtZSxtPXIucGxhY2Vob2xkZXIsdj1yLnRyYWNlSW5kZXgseT1yLmF2b2lkfHx7fSx4PXIuYXR0cmlidXRlcyxiPXIudHJhbnNmb3JtLF89ci5jb250YWluZXJHcm91cCx3PXQuX2Z1bGxMYXlvdXQsaz1kLnRpdGxlZm9udHx8e30sTT1rLmZhbWlseSxBPWsuc2l6ZSxUPWsuY29sb3IsUz0xLEU9ITEsQz0oZC50aXRsZXx8IiIpLnRyaW0oKTsidGl0bGUiPT09Zz9wPSJ0aXRsZVRleHQiOi0xIT09Zy5pbmRleE9mKCJheGlzIik/cD0iYXhpc1RpdGxlVGV4dCI6Zy5pbmRleE9mKCEwKSYmKHA9ImNvbG9yYmFyVGl0bGVUZXh0Iik7dmFyIEw9dC5fY29udGV4dC5lZGl0c1twXTsiIj09PUM/Uz0wOkMucmVwbGFjZShmLCIgJSAiKT09PW0ucmVwbGFjZShmLCIgJSAiKSYmKFM9LjIsRT0hMCxMfHwoQz0iIikpO3ZhciB6PUN8fEw7X3x8KF89cy5lbnN1cmVTaW5nbGUody5faW5mb2xheWVyLCJnIiwiZy0iK2UpKTt2YXIgUD1fLnNlbGVjdEFsbCgidGV4dCIpLmRhdGEoej9bMF06W10pO2lmKFAuZW50ZXIoKS5hcHBlbmQoInRleHQiKSxQLnRleHQoQykuYXR0cigiY2xhc3MiLGUpLFAuZXhpdCgpLnJlbW92ZSgpLCF6KXJldHVybiBfO2Z1bmN0aW9uIEkodCl7cy5zeW5jT3JBc3luYyhbTyxEXSx0KX1mdW5jdGlvbiBPKGUpe3ZhciByO3JldHVybiBiPyhyPSIiLGIucm90YXRlJiYocis9InJvdGF0ZSgiK1tiLnJvdGF0ZSx4LngseC55XSsiKSIpLGIub2Zmc2V0JiYocis9InRyYW5zbGF0ZSgwLCAiK2Iub2Zmc2V0KyIpIikpOnI9bnVsbCxlLmF0dHIoInRyYW5zZm9ybSIsciksZS5zdHlsZSh7ImZvbnQtZmFtaWx5IjpNLCJmb250LXNpemUiOm4ucm91bmQoQSwyKSsicHgiLGZpbGw6Yy5yZ2IoVCksb3BhY2l0eTpTKmMub3BhY2l0eShUKSwiZm9udC13ZWlnaHQiOmEuZm9udFdlaWdodH0pLmF0dHIoeCkuY2FsbCh1LmNvbnZlcnRUb1RzcGFucyx0KSxhLnByZXZpb3VzUHJvbWlzZXModCl9ZnVuY3Rpb24gRCh0KXt2YXIgZT1uLnNlbGVjdCh0Lm5vZGUoKS5wYXJlbnROb2RlKTtpZih5JiZ5LnNlbGVjdGlvbiYmeS5zaWRlJiZDKXtlLmF0dHIoInRyYW5zZm9ybSIsbnVsbCk7dmFyIHI9MCxhPXtsZWZ0OiJyaWdodCIscmlnaHQ6ImxlZnQiLHRvcDoiYm90dG9tIixib3R0b206InRvcCJ9W3kuc2lkZV0sbz0tMSE9PVsibGVmdCIsInRvcCJdLmluZGV4T2YoeS5zaWRlKT8tMToxLGM9aSh5LnBhZCk/eS5wYWQ6Mix1PWwuYkJveChlLm5vZGUoKSksaD17bGVmdDowLHRvcDowLHJpZ2h0Oncud2lkdGgsYm90dG9tOncuaGVpZ2h0fSxmPXkubWF4U2hpZnR8fChoW3kuc2lkZV0tdVt5LnNpZGVdKSooImxlZnQiPT09eS5zaWRlfHwidG9wIj09PXkuc2lkZT8tMToxKTtpZihmPDApcj1mO2Vsc2V7dmFyIHA9eS5vZmZzZXRMZWZ0fHwwLGQ9eS5vZmZzZXRUb3B8fDA7dS5sZWZ0LT1wLHUucmlnaHQtPXAsdS50b3AtPWQsdS5ib3R0b20tPWQseS5zZWxlY3Rpb24uZWFjaChmdW5jdGlvbigpe3ZhciB0PWwuYkJveCh0aGlzKTtzLmJCb3hJbnRlcnNlY3QodSx0LGMpJiYocj1NYXRoLm1heChyLG8qKHRbeS5zaWRlXS11W2FdKStjKSl9KSxyPU1hdGgubWluKGYscil9aWYocj4wfHxmPDApe3ZhciBnPXtsZWZ0OlstciwwXSxyaWdodDpbciwwXSx0b3A6WzAsLXJdLGJvdHRvbTpbMCxyXX1beS5zaWRlXTtlLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2crIikiKX19fVAuY2FsbChJKSxMJiYoQz9QLm9uKCIub3BhY2l0eSIsbnVsbCk6KFM9MCxFPSEwLFAudGV4dChtKS5vbigibW91c2VvdmVyLm9wYWNpdHkiLGZ1bmN0aW9uKCl7bi5zZWxlY3QodGhpcykudHJhbnNpdGlvbigpLmR1cmF0aW9uKGguU0hPV19QTEFDRUhPTERFUikuc3R5bGUoIm9wYWNpdHkiLDEpfSkub24oIm1vdXNlb3V0Lm9wYWNpdHkiLGZ1bmN0aW9uKCl7bi5zZWxlY3QodGhpcykudHJhbnNpdGlvbigpLmR1cmF0aW9uKGguSElERV9QTEFDRUhPTERFUikuc3R5bGUoIm9wYWNpdHkiLDApfSkpLFAuY2FsbCh1Lm1ha2VFZGl0YWJsZSx7Z2Q6dH0pLm9uKCJlZGl0IixmdW5jdGlvbihlKXt2b2lkIDAhPT12P28uY2FsbCgicmVzdHlsZSIsdCxnLGUsdik6by5jYWxsKCJyZWxheW91dCIsdCxnLGUpfSkub24oImNhbmNlbCIsZnVuY3Rpb24oKXt0aGlzLnRleHQodGhpcy5hdHRyKCJkYXRhLXVuZm9ybWF0dGVkIikpLmNhbGwoSSl9KS5vbigiaW5wdXQiLGZ1bmN0aW9uKHQpe3RoaXMudGV4dCh0fHwiICIpLmNhbGwodS5wb3NpdGlvblRleHQseC54LHgueSl9KSk7cmV0dXJuIFAuY2xhc3NlZCgianMtcGxhY2Vob2xkZXIiLEUpLF99fTt2YXIgZj0vIFtYWV1bMC05XSogL30seyIuLi8uLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zIjo2NjAsIi4uLy4uL2xpYiI6Njg0LCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjcwOCwiLi4vLi4vcGxvdHMvcGxvdHMiOjc5NSwiLi4vLi4vcmVnaXN0cnkiOjgxNywiLi4vY29sb3IiOjU1OCwiLi4vZHJhd2luZyI6NTgzLGQzOjE0NywiZmFzdC1pc251bWVyaWMiOjIxNH1dLDY1MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKSxpPXQoIi4uL2NvbG9yL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LG89dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsLHM9dCgiLi4vLi4vcGxvdHMvcGFkX2F0dHJpYnV0ZXMiKSxsPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKS50ZW1wbGF0ZWRBcnJheSxjPWwoImJ1dHRvbiIse3Zpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4ifSxtZXRob2Q6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInJlc3R5bGUiLCJyZWxheW91dCIsImFuaW1hdGUiLCJ1cGRhdGUiLCJza2lwIl0sZGZsdDoicmVzdHlsZSJ9LGFyZ3M6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGZyZWVMZW5ndGg6ITAsaXRlbXM6W3t2YWxUeXBlOiJhbnkifSx7dmFsVHlwZToiYW55In0se3ZhbFR5cGU6ImFueSJ9XX0sbGFiZWw6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIn0sZXhlY3V0ZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH19KTtlLmV4cG9ydHM9byhsKCJ1cGRhdGVtZW51Iix7X2FycmF5QXR0clJlZ2V4cHM6Wy9edXBkYXRlbWVudXNcWygwfFsxLTldWzAtOV0rKVxdXC5idXR0b25zL10sdmlzaWJsZTp7dmFsVHlwZToiYm9vbGVhbiJ9LHR5cGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImRyb3Bkb3duIiwiYnV0dG9ucyJdLGRmbHQ6ImRyb3Bkb3duIn0sZGlyZWN0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJsZWZ0IiwicmlnaHQiLCJ1cCIsImRvd24iXSxkZmx0OiJkb3duIn0sYWN0aXZlOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46LTEsZGZsdDowfSxzaG93YWN0aXZlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSxidXR0b25zOmMseDp7dmFsVHlwZToibnVtYmVyIixtaW46LTIsbWF4OjMsZGZsdDotLjA1fSx4YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhdXRvIiwibGVmdCIsImNlbnRlciIsInJpZ2h0Il0sZGZsdDoicmlnaHQifSx5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjotMixtYXg6MyxkZmx0OjF9LHlhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImF1dG8iLCJ0b3AiLCJtaWRkbGUiLCJib3R0b20iXSxkZmx0OiJ0b3AifSxwYWQ6YSh7fSxzLHt9KSxmb250Om4oe30pLGJnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIn0sYm9yZGVyY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmkuYm9yZGVyTGluZX0sYm9yZGVyd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxLGVkaXRUeXBlOiJhcnJheWRyYXcifX0pLCJhcnJheWRyYXciLCJmcm9tLXJvb3QiKX0seyIuLi8uLi9saWIvZXh0ZW5kIjo2NzMsIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjcxNSwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6NzIyLCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjc1OCwiLi4vLi4vcGxvdHMvcGFkX2F0dHJpYnV0ZXMiOjc5NCwiLi4vY29sb3IvYXR0cmlidXRlcyI6NTU3fV0sNjUxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bmFtZToidXBkYXRlbWVudXMiLGNvbnRhaW5lckNsYXNzTmFtZToidXBkYXRlbWVudS1jb250YWluZXIiLGhlYWRlckdyb3VwQ2xhc3NOYW1lOiJ1cGRhdGVtZW51LWhlYWRlci1ncm91cCIsaGVhZGVyQ2xhc3NOYW1lOiJ1cGRhdGVtZW51LWhlYWRlciIsaGVhZGVyQXJyb3dDbGFzc05hbWU6InVwZGF0ZW1lbnUtaGVhZGVyLWFycm93Iixkcm9wZG93bkJ1dHRvbkdyb3VwQ2xhc3NOYW1lOiJ1cGRhdGVtZW51LWRyb3Bkb3duLWJ1dHRvbi1ncm91cCIsZHJvcGRvd25CdXR0b25DbGFzc05hbWU6InVwZGF0ZW1lbnUtZHJvcGRvd24tYnV0dG9uIixidXR0b25DbGFzc05hbWU6InVwZGF0ZW1lbnUtYnV0dG9uIixpdGVtUmVjdENsYXNzTmFtZToidXBkYXRlbWVudS1pdGVtLXJlY3QiLGl0ZW1UZXh0Q2xhc3NOYW1lOiJ1cGRhdGVtZW51LWl0ZW0tdGV4dCIsbWVudUluZGV4QXR0ck5hbWU6InVwZGF0ZW1lbnUtYWN0aXZlLWluZGV4IixhdXRvTWFyZ2luSWRSb290OiJ1cGRhdGVtZW51LSIsYmxhbmtIZWFkZXJPcHRzOntsYWJlbDoiICAifSxtaW5XaWR0aDozMCxtaW5IZWlnaHQ6MzAsdGV4dFBhZFg6MjQsYXJyb3dQYWRYOjE2LHJ4OjIscnk6Mix0ZXh0T2Zmc2V0WDoxMix0ZXh0T2Zmc2V0WTozLGFycm93T2Zmc2V0WDo0LGdhcEJ1dHRvbkhlYWRlcjo1LGdhcEJ1dHRvbjoyLGFjdGl2ZUNvbG9yOiIjRjRGQUZGIixob3ZlckNvbG9yOiIjRjRGQUZGIixhcnJvd1N5bWJvbDp7bGVmdDoiXHUyNWM0IixyaWdodDoiXHUyNWJhIix1cDoiXHUyNWIyIixkb3duOiJcdTI1YmMifX19LHt9XSw2NTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiKSxhPXQoIi4vYXR0cmlidXRlcyIpLG89dCgiLi9jb25zdGFudHMiKS5uYW1lLHM9YS5idXR0b25zO2Z1bmN0aW9uIGwodCxlLHIpe2Z1bmN0aW9uIG8ocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGEscixpKX1vKCJ2aXNpYmxlIixpKHQsZSx7bmFtZToiYnV0dG9ucyIsaGFuZGxlSXRlbURlZmF1bHRzOmN9KS5sZW5ndGg+MCkmJihvKCJhY3RpdmUiKSxvKCJkaXJlY3Rpb24iKSxvKCJ0eXBlIiksbygic2hvd2FjdGl2ZSIpLG8oIngiKSxvKCJ5Iiksbi5ub25lT3JBbGwodCxlLFsieCIsInkiXSksbygieGFuY2hvciIpLG8oInlhbmNob3IiKSxvKCJwYWQudCIpLG8oInBhZC5yIiksbygicGFkLmIiKSxvKCJwYWQubCIpLG4uY29lcmNlRm9udChvLCJmb250IixyLmZvbnQpLG8oImJnY29sb3IiLHIucGFwZXJfYmdjb2xvciksbygiYm9yZGVyY29sb3IiKSxvKCJib3JkZXJ3aWR0aCIpKX1mdW5jdGlvbiBjKHQsZSl7ZnVuY3Rpb24gcihyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUscyxyLGkpfXIoInZpc2libGUiLCJza2lwIj09PXQubWV0aG9kfHxBcnJheS5pc0FycmF5KHQuYXJncykpJiYocigibWV0aG9kIikscigiYXJncyIpLHIoImxhYmVsIikscigiZXhlY3V0ZSIpKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpKHQsZSx7bmFtZTpvLGhhbmRsZUl0ZW1EZWZhdWx0czpsfSl9fSx7Ii4uLy4uL2xpYiI6Njg0LCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiOjcyOCwiLi9hdHRyaWJ1dGVzIjo2NTAsIi4vY29uc3RhbnRzIjo2NTF9XSw2NTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL3Bsb3RzL3Bsb3RzIiksYT10KCIuLi9jb2xvciIpLG89dCgiLi4vZHJhd2luZyIpLHM9dCgiLi4vLi4vbGliIiksbD10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSxjPXQoIi4uL2xlZ2VuZC9hbmNob3JfdXRpbHMiKSx1PXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKS5hcnJheUVkaXRvcixoPXQoIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiKS5MSU5FX1NQQUNJTkcsZj10KCIuL2NvbnN0YW50cyIpLHA9dCgiLi9zY3JvbGxib3giKTtmdW5jdGlvbiBkKHQpe3JldHVybiB0Ll9pbmRleH1mdW5jdGlvbiBnKHQsZSl7cmV0dXJuK3QuYXR0cihmLm1lbnVJbmRleEF0dHJOYW1lKT09PWUuX2luZGV4fWZ1bmN0aW9uIG0odCxlLHIsbixpLGEsbyxzKXtlLmFjdGl2ZT1vLHUodC5sYXlvdXQsZi5uYW1lLGUpLmFwcGx5VXBkYXRlKCJhY3RpdmUiLG8pLCJidXR0b25zIj09PWUudHlwZT95KHQsbixudWxsLG51bGwsZSk6ImRyb3Bkb3duIj09PWUudHlwZSYmKGkuYXR0cihmLm1lbnVJbmRleEF0dHJOYW1lLCItMSIpLHYodCxuLGksYSxlKSxzfHx5KHQsbixpLGEsZSkpfWZ1bmN0aW9uIHYodCxlLHIsbixpKXt2YXIgYT1zLmVuc3VyZVNpbmdsZShlLCJnIixmLmhlYWRlckNsYXNzTmFtZSxmdW5jdGlvbih0KXt0LnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpfSksbD1pLl9kaW1zLGM9aS5hY3RpdmUsdT1pLmJ1dHRvbnNbY118fGYuYmxhbmtIZWFkZXJPcHRzLGg9e3k6aS5wYWQudCx5UGFkOjAseDppLnBhZC5sLHhQYWQ6MCxpbmRleDowfSxwPXt3aWR0aDpsLmhlYWRlcldpZHRoLGhlaWdodDpsLmhlYWRlckhlaWdodH07YS5jYWxsKHgsaSx1LHQpLmNhbGwoUyxpLGgscCkscy5lbnN1cmVTaW5nbGUoZSwidGV4dCIsZi5oZWFkZXJBcnJvd0NsYXNzTmFtZSxmdW5jdGlvbih0KXt0LmNsYXNzZWQoInVzZXItc2VsZWN0LW5vbmUiLCEwKS5hdHRyKCJ0ZXh0LWFuY2hvciIsImVuZCIpLmNhbGwoby5mb250LGkuZm9udCkudGV4dChmLmFycm93U3ltYm9sW2kuZGlyZWN0aW9uXSl9KS5hdHRyKHt4OmwuaGVhZGVyV2lkdGgtZi5hcnJvd09mZnNldFgraS5wYWQubCx5OmwuaGVhZGVySGVpZ2h0LzIrZi50ZXh0T2Zmc2V0WStpLnBhZC50fSksYS5vbigiY2xpY2siLGZ1bmN0aW9uKCl7ci5jYWxsKEUsU3RyaW5nKGcocixpKT8tMTppLl9pbmRleCkpLHkodCxlLHIsbixpKX0pLGEub24oIm1vdXNlb3ZlciIsZnVuY3Rpb24oKXthLmNhbGwoayl9KSxhLm9uKCJtb3VzZW91dCIsZnVuY3Rpb24oKXthLmNhbGwoTSxpKX0pLG8uc2V0VHJhbnNsYXRlKGUsbC5seCxsLmx5KX1mdW5jdGlvbiB5KHQsZSxyLGEsbyl7cnx8KHI9ZSkuYXR0cigicG9pbnRlci1ldmVudHMiLCJhbGwiKTt2YXIgbD1mdW5jdGlvbih0KXtyZXR1cm4tMT09K3QuYXR0cihmLm1lbnVJbmRleEF0dHJOYW1lKX0ocikmJiJidXR0b25zIiE9PW8udHlwZT9bXTpvLmJ1dHRvbnMsYz0iZHJvcGRvd24iPT09by50eXBlP2YuZHJvcGRvd25CdXR0b25DbGFzc05hbWU6Zi5idXR0b25DbGFzc05hbWUsdT1yLnNlbGVjdEFsbCgiZy4iK2MpLmRhdGEocy5maWx0ZXJWaXNpYmxlKGwpKSxoPXUuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKGMsITApLHA9dS5leGl0KCk7ImRyb3Bkb3duIj09PW8udHlwZT8oaC5hdHRyKCJvcGFjaXR5IiwiMCIpLnRyYW5zaXRpb24oKS5hdHRyKCJvcGFjaXR5IiwiMSIpLHAudHJhbnNpdGlvbigpLmF0dHIoIm9wYWNpdHkiLCIwIikucmVtb3ZlKCkpOnAucmVtb3ZlKCk7dmFyIGQ9MCxnPTAsdj1vLl9kaW1zLHk9LTEhPT1bInVwIiwiZG93biJdLmluZGV4T2Yoby5kaXJlY3Rpb24pOyJkcm9wZG93biI9PT1vLnR5cGUmJih5P2c9di5oZWFkZXJIZWlnaHQrZi5nYXBCdXR0b25IZWFkZXI6ZD12LmhlYWRlcldpZHRoK2YuZ2FwQnV0dG9uSGVhZGVyKSwiZHJvcGRvd24iPT09by50eXBlJiYidXAiPT09by5kaXJlY3Rpb24mJihnPS1mLmdhcEJ1dHRvbkhlYWRlcitmLmdhcEJ1dHRvbi12Lm9wZW5IZWlnaHQpLCJkcm9wZG93biI9PT1vLnR5cGUmJiJsZWZ0Ij09PW8uZGlyZWN0aW9uJiYoZD0tZi5nYXBCdXR0b25IZWFkZXIrZi5nYXBCdXR0b24tdi5vcGVuV2lkdGgpO3ZhciBiPXt4OnYubHgrZCtvLnBhZC5sLHk6di5seStnK28ucGFkLnQseVBhZDpmLmdhcEJ1dHRvbix4UGFkOmYuZ2FwQnV0dG9uLGluZGV4OjB9LF89e2w6Yi54K28uYm9yZGVyd2lkdGgsdDpiLnkrby5ib3JkZXJ3aWR0aH07dS5lYWNoKGZ1bmN0aW9uKHMsbCl7dmFyIGM9bi5zZWxlY3QodGhpcyk7Yy5jYWxsKHgsbyxzLHQpLmNhbGwoUyxvLGIpLGMub24oImNsaWNrIixmdW5jdGlvbigpe24uZXZlbnQuZGVmYXVsdFByZXZlbnRlZHx8KG0odCxvLDAsZSxyLGEsbCkscy5leGVjdXRlJiZpLmV4ZWN1dGVBUElDb21tYW5kKHQscy5tZXRob2Qscy5hcmdzKSx0LmVtaXQoInBsb3RseV9idXR0b25jbGlja2VkIix7bWVudTpvLGJ1dHRvbjpzLGFjdGl2ZTpvLmFjdGl2ZX0pKX0pLGMub24oIm1vdXNlb3ZlciIsZnVuY3Rpb24oKXtjLmNhbGwoayl9KSxjLm9uKCJtb3VzZW91dCIsZnVuY3Rpb24oKXtjLmNhbGwoTSxvKSx1LmNhbGwodyxvKX0pfSksdS5jYWxsKHcsbykseT8oXy53PU1hdGgubWF4KHYub3BlbldpZHRoLHYuaGVhZGVyV2lkdGgpLF8uaD1iLnktXy50KTooXy53PWIueC1fLmwsXy5oPU1hdGgubWF4KHYub3BlbkhlaWdodCx2LmhlYWRlckhlaWdodCkpLF8uZGlyZWN0aW9uPW8uZGlyZWN0aW9uLGEmJih1LnNpemUoKT9mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG8scyxsLGM9aS5kaXJlY3Rpb24sdT0idXAiPT09Y3x8ImRvd24iPT09YyxoPWkuX2RpbXMscD1pLmFjdGl2ZTtpZih1KWZvcihzPTAsbD0wO2w8cDtsKyspcys9aC5oZWlnaHRzW2xdK2YuZ2FwQnV0dG9uO2Vsc2UgZm9yKG89MCxsPTA7bDxwO2wrKylvKz1oLndpZHRoc1tsXStmLmdhcEJ1dHRvbjtuLmVuYWJsZShhLG8scyksbi5oYmFyJiZuLmhiYXIuYXR0cigib3BhY2l0eSIsIjAiKS50cmFuc2l0aW9uKCkuYXR0cigib3BhY2l0eSIsIjEiKTtuLnZiYXImJm4udmJhci5hdHRyKCJvcGFjaXR5IiwiMCIpLnRyYW5zaXRpb24oKS5hdHRyKCJvcGFjaXR5IiwiMSIpfSgwLDAsMCxhLG8sXyk6ZnVuY3Rpb24odCl7dmFyIGU9ISF0LmhiYXIscj0hIXQudmJhcjtlJiZ0LmhiYXIudHJhbnNpdGlvbigpLmF0dHIoIm9wYWNpdHkiLCIwIikuZWFjaCgiZW5kIixmdW5jdGlvbigpe2U9ITEscnx8dC5kaXNhYmxlKCl9KTtyJiZ0LnZiYXIudHJhbnNpdGlvbigpLmF0dHIoIm9wYWNpdHkiLCIwIikuZWFjaCgiZW5kIixmdW5jdGlvbigpe3I9ITEsZXx8dC5kaXNhYmxlKCl9KX0oYSkpfWZ1bmN0aW9uIHgodCxlLHIsbil7dC5jYWxsKGIsZSkuY2FsbChfLGUscixuKX1mdW5jdGlvbiBiKHQsZSl7cy5lbnN1cmVTaW5nbGUodCwicmVjdCIsZi5pdGVtUmVjdENsYXNzTmFtZSxmdW5jdGlvbih0KXt0LmF0dHIoe3J4OmYucngscnk6Zi5yeSwic2hhcGUtcmVuZGVyaW5nIjoiY3Jpc3BFZGdlcyJ9KX0pLmNhbGwoYS5zdHJva2UsZS5ib3JkZXJjb2xvcikuY2FsbChhLmZpbGwsZS5iZ2NvbG9yKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixlLmJvcmRlcndpZHRoKyJweCIpfWZ1bmN0aW9uIF8odCxlLHIsbil7cy5lbnN1cmVTaW5nbGUodCwidGV4dCIsZi5pdGVtVGV4dENsYXNzTmFtZSxmdW5jdGlvbih0KXt0LmNsYXNzZWQoInVzZXItc2VsZWN0LW5vbmUiLCEwKS5hdHRyKHsidGV4dC1hbmNob3IiOiJzdGFydCIsImRhdGEtbm90ZXgiOjF9KX0pLmNhbGwoby5mb250LGUuZm9udCkudGV4dChyLmxhYmVsKS5jYWxsKGwuY29udmVydFRvVHNwYW5zLG4pfWZ1bmN0aW9uIHcodCxlKXt2YXIgcj1lLmFjdGl2ZTt0LmVhY2goZnVuY3Rpb24odCxpKXt2YXIgbz1uLnNlbGVjdCh0aGlzKTtpPT09ciYmZS5zaG93YWN0aXZlJiZvLnNlbGVjdCgicmVjdC4iK2YuaXRlbVJlY3RDbGFzc05hbWUpLmNhbGwoYS5maWxsLGYuYWN0aXZlQ29sb3IpfSl9ZnVuY3Rpb24gayh0KXt0LnNlbGVjdCgicmVjdC4iK2YuaXRlbVJlY3RDbGFzc05hbWUpLmNhbGwoYS5maWxsLGYuaG92ZXJDb2xvcil9ZnVuY3Rpb24gTSh0LGUpe3Quc2VsZWN0KCJyZWN0LiIrZi5pdGVtUmVjdENsYXNzTmFtZSkuY2FsbChhLmZpbGwsZS5iZ2NvbG9yKX1mdW5jdGlvbiBBKHQsZSl7dmFyIHI9ZS5fZGltcz17d2lkdGgxOjAsaGVpZ2h0MTowLGhlaWdodHM6W10sd2lkdGhzOltdLHRvdGFsV2lkdGg6MCx0b3RhbEhlaWdodDowLG9wZW5XaWR0aDowLG9wZW5IZWlnaHQ6MCxseDowLGx5OjB9LGE9by50ZXN0ZXIuc2VsZWN0QWxsKCJnLiIrZi5kcm9wZG93bkJ1dHRvbkNsYXNzTmFtZSkuZGF0YShzLmZpbHRlclZpc2libGUoZS5idXR0b25zKSk7YS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoZi5kcm9wZG93bkJ1dHRvbkNsYXNzTmFtZSwhMCk7dmFyIHU9LTEhPT1bInVwIiwiZG93biJdLmluZGV4T2YoZS5kaXJlY3Rpb24pO2EuZWFjaChmdW5jdGlvbihpLGEpe3ZhciBzPW4uc2VsZWN0KHRoaXMpO3MuY2FsbCh4LGUsaSx0KTt2YXIgYz1zLnNlbGVjdCgiLiIrZi5pdGVtVGV4dENsYXNzTmFtZSkscD1jLm5vZGUoKSYmby5iQm94KGMubm9kZSgpKS53aWR0aCxkPU1hdGgubWF4KHArZi50ZXh0UGFkWCxmLm1pbldpZHRoKSxnPWUuZm9udC5zaXplKmgsbT1sLmxpbmVDb3VudChjKSx2PU1hdGgubWF4KGcqbSxmLm1pbkhlaWdodCkrZi50ZXh0T2Zmc2V0WTt2PU1hdGguY2VpbCh2KSxkPU1hdGguY2VpbChkKSxyLndpZHRoc1thXT1kLHIuaGVpZ2h0c1thXT12LHIuaGVpZ2h0MT1NYXRoLm1heChyLmhlaWdodDEsdiksci53aWR0aDE9TWF0aC5tYXgoci53aWR0aDEsZCksdT8oci50b3RhbFdpZHRoPU1hdGgubWF4KHIudG90YWxXaWR0aCxkKSxyLm9wZW5XaWR0aD1yLnRvdGFsV2lkdGgsci50b3RhbEhlaWdodCs9ditmLmdhcEJ1dHRvbixyLm9wZW5IZWlnaHQrPXYrZi5nYXBCdXR0b24pOihyLnRvdGFsV2lkdGgrPWQrZi5nYXBCdXR0b24sci5vcGVuV2lkdGgrPWQrZi5nYXBCdXR0b24sci50b3RhbEhlaWdodD1NYXRoLm1heChyLnRvdGFsSGVpZ2h0LHYpLHIub3BlbkhlaWdodD1yLnRvdGFsSGVpZ2h0KX0pLHU/ci50b3RhbEhlaWdodC09Zi5nYXBCdXR0b246ci50b3RhbFdpZHRoLT1mLmdhcEJ1dHRvbixyLmhlYWRlcldpZHRoPXIud2lkdGgxK2YuYXJyb3dQYWRYLHIuaGVhZGVySGVpZ2h0PXIuaGVpZ2h0MSwiZHJvcGRvd24iPT09ZS50eXBlJiYodT8oci53aWR0aDErPWYuYXJyb3dQYWRYLHIudG90YWxIZWlnaHQ9ci5oZWlnaHQxKTpyLnRvdGFsV2lkdGg9ci53aWR0aDEsci50b3RhbFdpZHRoKz1mLmFycm93UGFkWCksYS5yZW1vdmUoKTt2YXIgcD1yLnRvdGFsV2lkdGgrZS5wYWQubCtlLnBhZC5yLGQ9ci50b3RhbEhlaWdodCtlLnBhZC50K2UucGFkLmIsZz10Ll9mdWxsTGF5b3V0Ll9zaXplO3IubHg9Zy5sK2cudyplLngsci5seT1nLnQrZy5oKigxLWUueSk7dmFyIG09ImxlZnQiO2MuaXNSaWdodEFuY2hvcihlKSYmKHIubHgtPXAsbT0icmlnaHQiKSxjLmlzQ2VudGVyQW5jaG9yKGUpJiYoci5seC09cC8yLG09ImNlbnRlciIpO3ZhciB2PSJ0b3AiO2MuaXNCb3R0b21BbmNob3IoZSkmJihyLmx5LT1kLHY9ImJvdHRvbSIpLGMuaXNNaWRkbGVBbmNob3IoZSkmJihyLmx5LT1kLzIsdj0ibWlkZGxlIiksci50b3RhbFdpZHRoPU1hdGguY2VpbChyLnRvdGFsV2lkdGgpLHIudG90YWxIZWlnaHQ9TWF0aC5jZWlsKHIudG90YWxIZWlnaHQpLHIubHg9TWF0aC5yb3VuZChyLmx4KSxyLmx5PU1hdGgucm91bmQoci5seSksaS5hdXRvTWFyZ2luKHQsVChlKSx7eDplLngseTplLnksbDpwKih7cmlnaHQ6MSxjZW50ZXI6LjV9W21dfHwwKSxyOnAqKHtsZWZ0OjEsY2VudGVyOi41fVttXXx8MCksYjpkKih7dG9wOjEsbWlkZGxlOi41fVt2XXx8MCksdDpkKih7Ym90dG9tOjEsbWlkZGxlOi41fVt2XXx8MCl9KX1mdW5jdGlvbiBUKHQpe3JldHVybiBmLmF1dG9NYXJnaW5JZFJvb3QrdC5faW5kZXh9ZnVuY3Rpb24gUyh0LGUscixuKXtuPW58fHt9O3ZhciBpPXQuc2VsZWN0KCIuIitmLml0ZW1SZWN0Q2xhc3NOYW1lKSxhPXQuc2VsZWN0KCIuIitmLml0ZW1UZXh0Q2xhc3NOYW1lKSxzPWUuYm9yZGVyd2lkdGgsYz1yLmluZGV4LHU9ZS5fZGltcztvLnNldFRyYW5zbGF0ZSh0LHMrci54LHMrci55KTt2YXIgcD0tMSE9PVsidXAiLCJkb3duIl0uaW5kZXhPZihlLmRpcmVjdGlvbiksZD1uLmhlaWdodHx8KHA/dS5oZWlnaHRzW2NdOnUuaGVpZ2h0MSk7aS5hdHRyKHt4OjAseTowLHdpZHRoOm4ud2lkdGh8fChwP3Uud2lkdGgxOnUud2lkdGhzW2NdKSxoZWlnaHQ6ZH0pO3ZhciBnPWUuZm9udC5zaXplKmgsbT0obC5saW5lQ291bnQoYSktMSkqZy8yO2wucG9zaXRpb25UZXh0KGEsZi50ZXh0T2Zmc2V0WCxkLzItbStmLnRleHRPZmZzZXRZKSxwP3IueSs9dS5oZWlnaHRzW2NdK3IueVBhZDpyLngrPXUud2lkdGhzW2NdK3IueFBhZCxyLmluZGV4Kyt9ZnVuY3Rpb24gRSh0LGUpe3QuYXR0cihmLm1lbnVJbmRleEF0dHJOYW1lLGV8fCItMSIpLnNlbGVjdEFsbCgiZy4iK2YuZHJvcGRvd25CdXR0b25DbGFzc05hbWUpLnJlbW92ZSgpfWUuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9cy5maWx0ZXJWaXNpYmxlKGVbZi5uYW1lXSk7ZnVuY3Rpb24gYShlKXtpLmF1dG9NYXJnaW4odCxUKGUpKX12YXIgbz1lLl9tZW51bGF5ZXIuc2VsZWN0QWxsKCJnLiIrZi5jb250YWluZXJDbGFzc05hbWUpLmRhdGEoci5sZW5ndGg+MD9bMF06W10pO2lmKG8uZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKGYuY29udGFpbmVyQ2xhc3NOYW1lLCEwKS5zdHlsZSgiY3Vyc29yIiwicG9pbnRlciIpLG8uZXhpdCgpLmVhY2goZnVuY3Rpb24oKXtuLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoImcuIitmLmhlYWRlckdyb3VwQ2xhc3NOYW1lKS5lYWNoKGEpfSkucmVtb3ZlKCksMCE9PXIubGVuZ3RoKXt2YXIgbD1vLnNlbGVjdEFsbCgiZy4iK2YuaGVhZGVyR3JvdXBDbGFzc05hbWUpLmRhdGEocixkKTtsLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChmLmhlYWRlckdyb3VwQ2xhc3NOYW1lLCEwKTtmb3IodmFyIGM9cy5lbnN1cmVTaW5nbGUobywiZyIsZi5kcm9wZG93bkJ1dHRvbkdyb3VwQ2xhc3NOYW1lLGZ1bmN0aW9uKHQpe3Quc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYWxsIil9KSx1PTA7dTxyLmxlbmd0aDt1Kyspe3ZhciBoPXJbdV07QSh0LGgpfXZhciB4PSJ1cGRhdGVtZW51cyIrZS5fdWlkLGI9bmV3IHAodCxjLHgpO2wuZW50ZXIoKS5zaXplKCkmJihjLm5vZGUoKS5wYXJlbnROb2RlLmFwcGVuZENoaWxkKGMubm9kZSgpKSxjLmNhbGwoRSkpLGwuZXhpdCgpLmVhY2goZnVuY3Rpb24odCl7Yy5jYWxsKEUpLGEodCl9KS5yZW1vdmUoKSxsLmVhY2goZnVuY3Rpb24oZSl7dmFyIHI9bi5zZWxlY3QodGhpcyksYT0iZHJvcGRvd24iPT09ZS50eXBlP2M6bnVsbDtpLm1hbmFnZUNvbW1hbmRPYnNlcnZlcih0LGUsZS5idXR0b25zLGZ1bmN0aW9uKG4pe20odCxlLGUuYnV0dG9uc1tuLmluZGV4XSxyLGEsYixuLmluZGV4LCEwKX0pLCJkcm9wZG93biI9PT1lLnR5cGU/KHYodCxyLGMsYixlKSxnKGMsZSkmJnkodCxyLGMsYixlKSk6eSh0LHIsbnVsbCxudWxsLGUpfSl9fX0seyIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50Ijo2NTYsIi4uLy4uL2xpYiI6Njg0LCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjcwOCwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6NzIyLCIuLi8uLi9wbG90cy9wbG90cyI6Nzk1LCIuLi9jb2xvciI6NTU4LCIuLi9kcmF3aW5nIjo1ODMsIi4uL2xlZ2VuZC9hbmNob3JfdXRpbHMiOjYxMCwiLi9jb25zdGFudHMiOjY1MSwiLi9zY3JvbGxib3giOjY1NSxkMzoxNDd9XSw2NTQ6W2Z1bmN0aW9uKHQsZSxyKXthcmd1bWVudHNbNF1bNjQ4XVswXS5hcHBseShyLGFyZ3VtZW50cyl9LHsiLi9hdHRyaWJ1dGVzIjo2NTAsIi4vY29uc3RhbnRzIjo2NTEsIi4vZGVmYXVsdHMiOjY1MiwiLi9kcmF3Ijo2NTMsZHVwOjY0OH1dLDY1NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9czt2YXIgbj10KCJkMyIpLGk9dCgiLi4vY29sb3IiKSxhPXQoIi4uL2RyYXdpbmciKSxvPXQoIi4uLy4uL2xpYiIpO2Z1bmN0aW9uIHModCxlLHIpe3RoaXMuZ2Q9dCx0aGlzLmNvbnRhaW5lcj1lLHRoaXMuaWQ9cix0aGlzLnBvc2l0aW9uPW51bGwsdGhpcy50cmFuc2xhdGVYPW51bGwsdGhpcy50cmFuc2xhdGVZPW51bGwsdGhpcy5oYmFyPW51bGwsdGhpcy52YmFyPW51bGwsdGhpcy5iZz10aGlzLmNvbnRhaW5lci5zZWxlY3RBbGwoInJlY3Quc2Nyb2xsYm94LWJnIikuZGF0YShbMF0pLHRoaXMuYmcuZXhpdCgpLm9uKCIuZHJhZyIsbnVsbCkub24oIndoZWVsIixudWxsKS5yZW1vdmUoKSx0aGlzLmJnLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuY2xhc3NlZCgic2Nyb2xsYm94LWJnIiwhMCkuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYWxsIikuYXR0cih7b3BhY2l0eTowLHg6MCx5OjAsd2lkdGg6MCxoZWlnaHQ6MH0pfXMuYmFyV2lkdGg9MixzLmJhckxlbmd0aD0yMCxzLmJhclJhZGl1cz0yLHMuYmFyUGFkPTEscy5iYXJDb2xvcj0iIzgwOEJBNCIscy5wcm90b3R5cGUuZW5hYmxlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbz10aGlzLmdkLl9mdWxsTGF5b3V0LGw9by53aWR0aCxjPW8uaGVpZ2h0O3RoaXMucG9zaXRpb249dDt2YXIgdSxoLGYscCxkPXRoaXMucG9zaXRpb24ubCxnPXRoaXMucG9zaXRpb24udyxtPXRoaXMucG9zaXRpb24udCx2PXRoaXMucG9zaXRpb24uaCx5PXRoaXMucG9zaXRpb24uZGlyZWN0aW9uLHg9ImRvd24iPT09eSxiPSJsZWZ0Ij09PXksXz0idXAiPT09eSx3PWcsaz12O3h8fGJ8fCJyaWdodCI9PT15fHxffHwodGhpcy5wb3NpdGlvbi5kaXJlY3Rpb249ImRvd24iLHg9ITApLHh8fF8/KGg9KHU9ZCkrdyx4PyhmPW0saz0ocD1NYXRoLm1pbihmK2ssYykpLWYpOms9KHA9bStrKS0oZj1NYXRoLm1heChwLWssMCkpKToocD0oZj1tKStrLGI/dz0oaD1kK3cpLSh1PU1hdGgubWF4KGgtdywwKSk6KHU9ZCx3PShoPU1hdGgubWluKHUrdyxsKSktdSkpLHRoaXMuX2JveD17bDp1LHQ6Zix3OncsaDprfTt2YXIgTT1nPncsQT1zLmJhckxlbmd0aCsyKnMuYmFyUGFkLFQ9cy5iYXJXaWR0aCsyKnMuYmFyUGFkLFM9ZCxFPW0rdjtFK1Q+YyYmKEU9Yy1UKTt2YXIgQz10aGlzLmNvbnRhaW5lci5zZWxlY3RBbGwoInJlY3Quc2Nyb2xsYmFyLWhvcml6b250YWwiKS5kYXRhKE0/WzBdOltdKTtDLmV4aXQoKS5vbigiLmRyYWciLG51bGwpLnJlbW92ZSgpLEMuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKCJzY3JvbGxiYXItaG9yaXpvbnRhbCIsITApLmNhbGwoaS5maWxsLHMuYmFyQ29sb3IpLE0/KHRoaXMuaGJhcj1DLmF0dHIoe3J4OnMuYmFyUmFkaXVzLHJ5OnMuYmFyUmFkaXVzLHg6Uyx5OkUsd2lkdGg6QSxoZWlnaHQ6VH0pLHRoaXMuX2hiYXJYTWluPVMrQS8yLHRoaXMuX2hiYXJUcmFuc2xhdGVNYXg9dy1BKTooZGVsZXRlIHRoaXMuaGJhcixkZWxldGUgdGhpcy5faGJhclhNaW4sZGVsZXRlIHRoaXMuX2hiYXJUcmFuc2xhdGVNYXgpO3ZhciBMPXY+ayx6PXMuYmFyV2lkdGgrMipzLmJhclBhZCxQPXMuYmFyTGVuZ3RoKzIqcy5iYXJQYWQsST1kK2csTz1tO0krej5sJiYoST1sLXopO3ZhciBEPXRoaXMuY29udGFpbmVyLnNlbGVjdEFsbCgicmVjdC5zY3JvbGxiYXItdmVydGljYWwiKS5kYXRhKEw/WzBdOltdKTtELmV4aXQoKS5vbigiLmRyYWciLG51bGwpLnJlbW92ZSgpLEQuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKCJzY3JvbGxiYXItdmVydGljYWwiLCEwKS5jYWxsKGkuZmlsbCxzLmJhckNvbG9yKSxMPyh0aGlzLnZiYXI9RC5hdHRyKHtyeDpzLmJhclJhZGl1cyxyeTpzLmJhclJhZGl1cyx4OkkseTpPLHdpZHRoOnosaGVpZ2h0OlB9KSx0aGlzLl92YmFyWU1pbj1PK1AvMix0aGlzLl92YmFyVHJhbnNsYXRlTWF4PWstUCk6KGRlbGV0ZSB0aGlzLnZiYXIsZGVsZXRlIHRoaXMuX3ZiYXJZTWluLGRlbGV0ZSB0aGlzLl92YmFyVHJhbnNsYXRlTWF4KTt2YXIgUj10aGlzLmlkLEI9dS0uNSxGPUw/aCt6Ky41OmgrLjUsTj1mLS41LGo9TT9wK1QrLjU6cCsuNSxWPW8uX3RvcGRlZnMuc2VsZWN0QWxsKCIjIitSKS5kYXRhKE18fEw/WzBdOltdKTtpZihWLmV4aXQoKS5yZW1vdmUoKSxWLmVudGVyKCkuYXBwZW5kKCJjbGlwUGF0aCIpLmF0dHIoImlkIixSKS5hcHBlbmQoInJlY3QiKSxNfHxMPyh0aGlzLl9jbGlwUmVjdD1WLnNlbGVjdCgicmVjdCIpLmF0dHIoe3g6TWF0aC5mbG9vcihCKSx5Ok1hdGguZmxvb3IoTiksd2lkdGg6TWF0aC5jZWlsKEYpLU1hdGguZmxvb3IoQiksaGVpZ2h0Ok1hdGguY2VpbChqKS1NYXRoLmZsb29yKE4pfSksdGhpcy5jb250YWluZXIuY2FsbChhLnNldENsaXBVcmwsUiksdGhpcy5iZy5hdHRyKHt4OmQseTptLHdpZHRoOmcsaGVpZ2h0OnZ9KSk6KHRoaXMuYmcuYXR0cih7d2lkdGg6MCxoZWlnaHQ6MH0pLHRoaXMuY29udGFpbmVyLm9uKCJ3aGVlbCIsbnVsbCkub24oIi5kcmFnIixudWxsKS5jYWxsKGEuc2V0Q2xpcFVybCxudWxsKSxkZWxldGUgdGhpcy5fY2xpcFJlY3QpLE18fEwpe3ZhciBVPW4uYmVoYXZpb3IuZHJhZygpLm9uKCJkcmFnc3RhcnQiLGZ1bmN0aW9uKCl7bi5ldmVudC5zb3VyY2VFdmVudC5wcmV2ZW50RGVmYXVsdCgpfSkub24oImRyYWciLHRoaXMuX29uQm94RHJhZy5iaW5kKHRoaXMpKTt0aGlzLmNvbnRhaW5lci5vbigid2hlZWwiLG51bGwpLm9uKCJ3aGVlbCIsdGhpcy5fb25Cb3hXaGVlbC5iaW5kKHRoaXMpKS5vbigiLmRyYWciLG51bGwpLmNhbGwoVSk7dmFyIHE9bi5iZWhhdmlvci5kcmFnKCkub24oImRyYWdzdGFydCIsZnVuY3Rpb24oKXtuLmV2ZW50LnNvdXJjZUV2ZW50LnByZXZlbnREZWZhdWx0KCksbi5ldmVudC5zb3VyY2VFdmVudC5zdG9wUHJvcGFnYXRpb24oKX0pLm9uKCJkcmFnIix0aGlzLl9vbkJhckRyYWcuYmluZCh0aGlzKSk7TSYmdGhpcy5oYmFyLm9uKCIuZHJhZyIsbnVsbCkuY2FsbChxKSxMJiZ0aGlzLnZiYXIub24oIi5kcmFnIixudWxsKS5jYWxsKHEpfXRoaXMuc2V0VHJhbnNsYXRlKGUscil9LHMucHJvdG90eXBlLmRpc2FibGU9ZnVuY3Rpb24oKXsodGhpcy5oYmFyfHx0aGlzLnZiYXIpJiYodGhpcy5iZy5hdHRyKHt3aWR0aDowLGhlaWdodDowfSksdGhpcy5jb250YWluZXIub24oIndoZWVsIixudWxsKS5vbigiLmRyYWciLG51bGwpLmNhbGwoYS5zZXRDbGlwVXJsLG51bGwpLGRlbGV0ZSB0aGlzLl9jbGlwUmVjdCksdGhpcy5oYmFyJiYodGhpcy5oYmFyLm9uKCIuZHJhZyIsbnVsbCksdGhpcy5oYmFyLnJlbW92ZSgpLGRlbGV0ZSB0aGlzLmhiYXIsZGVsZXRlIHRoaXMuX2hiYXJYTWluLGRlbGV0ZSB0aGlzLl9oYmFyVHJhbnNsYXRlTWF4KSx0aGlzLnZiYXImJih0aGlzLnZiYXIub24oIi5kcmFnIixudWxsKSx0aGlzLnZiYXIucmVtb3ZlKCksZGVsZXRlIHRoaXMudmJhcixkZWxldGUgdGhpcy5fdmJhcllNaW4sZGVsZXRlIHRoaXMuX3ZiYXJUcmFuc2xhdGVNYXgpfSxzLnByb3RvdHlwZS5fb25Cb3hEcmFnPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy50cmFuc2xhdGVYLGU9dGhpcy50cmFuc2xhdGVZO3RoaXMuaGJhciYmKHQtPW4uZXZlbnQuZHgpLHRoaXMudmJhciYmKGUtPW4uZXZlbnQuZHkpLHRoaXMuc2V0VHJhbnNsYXRlKHQsZSl9LHMucHJvdG90eXBlLl9vbkJveFdoZWVsPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy50cmFuc2xhdGVYLGU9dGhpcy50cmFuc2xhdGVZO3RoaXMuaGJhciYmKHQrPW4uZXZlbnQuZGVsdGFZKSx0aGlzLnZiYXImJihlKz1uLmV2ZW50LmRlbHRhWSksdGhpcy5zZXRUcmFuc2xhdGUodCxlKX0scy5wcm90b3R5cGUuX29uQmFyRHJhZz1mdW5jdGlvbigpe3ZhciB0PXRoaXMudHJhbnNsYXRlWCxlPXRoaXMudHJhbnNsYXRlWTtpZih0aGlzLmhiYXIpe3ZhciByPXQrdGhpcy5faGJhclhNaW4saT1yK3RoaXMuX2hiYXJUcmFuc2xhdGVNYXg7dD0oby5jb25zdHJhaW4obi5ldmVudC54LHIsaSktcikvKGktcikqKHRoaXMucG9zaXRpb24udy10aGlzLl9ib3gudyl9aWYodGhpcy52YmFyKXt2YXIgYT1lK3RoaXMuX3ZiYXJZTWluLHM9YSt0aGlzLl92YmFyVHJhbnNsYXRlTWF4O2U9KG8uY29uc3RyYWluKG4uZXZlbnQueSxhLHMpLWEpLyhzLWEpKih0aGlzLnBvc2l0aW9uLmgtdGhpcy5fYm94LmgpfXRoaXMuc2V0VHJhbnNsYXRlKHQsZSl9LHMucHJvdG90eXBlLnNldFRyYW5zbGF0ZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMucG9zaXRpb24udy10aGlzLl9ib3gudyxuPXRoaXMucG9zaXRpb24uaC10aGlzLl9ib3guaDtpZih0PW8uY29uc3RyYWluKHR8fDAsMCxyKSxlPW8uY29uc3RyYWluKGV8fDAsMCxuKSx0aGlzLnRyYW5zbGF0ZVg9dCx0aGlzLnRyYW5zbGF0ZVk9ZSx0aGlzLmNvbnRhaW5lci5jYWxsKGEuc2V0VHJhbnNsYXRlLHRoaXMuX2JveC5sLXRoaXMucG9zaXRpb24ubC10LHRoaXMuX2JveC50LXRoaXMucG9zaXRpb24udC1lKSx0aGlzLl9jbGlwUmVjdCYmdGhpcy5fY2xpcFJlY3QuYXR0cih7eDpNYXRoLmZsb29yKHRoaXMucG9zaXRpb24ubCt0LS41KSx5Ok1hdGguZmxvb3IodGhpcy5wb3NpdGlvbi50K2UtLjUpfSksdGhpcy5oYmFyKXt2YXIgaT10L3I7dGhpcy5oYmFyLmNhbGwoYS5zZXRUcmFuc2xhdGUsdCtpKnRoaXMuX2hiYXJUcmFuc2xhdGVNYXgsZSl9aWYodGhpcy52YmFyKXt2YXIgcz1lL247dGhpcy52YmFyLmNhbGwoYS5zZXRUcmFuc2xhdGUsdCxlK3MqdGhpcy5fdmJhclRyYW5zbGF0ZU1heCl9fX0seyIuLi8uLi9saWIiOjY4NCwiLi4vY29sb3IiOjU1OCwiLi4vZHJhd2luZyI6NTgzLGQzOjE0N31dLDY1NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e0ZST01fQkw6e2xlZnQ6MCxjZW50ZXI6LjUscmlnaHQ6MSxib3R0b206MCxtaWRkbGU6LjUsdG9wOjF9LEZST01fVEw6e2xlZnQ6MCxjZW50ZXI6LjUscmlnaHQ6MSxib3R0b206MSxtaWRkbGU6LjUsdG9wOjB9LEZST01fQlI6e2xlZnQ6MSxjZW50ZXI6LjUscmlnaHQ6MCxib3R0b206MCxtaWRkbGU6LjUsdG9wOjF9LExJTkVfU1BBQ0lORzoxLjMsTUlEX1NISUZUOi4zNSxPUFBPU0lURV9TSURFOntsZWZ0OiJyaWdodCIscmlnaHQ6ImxlZnQiLHRvcDoiYm90dG9tIixib3R0b206InRvcCJ9fX0se31dLDY1NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e0NPTVBBUklTT05fT1BTOlsiPSIsIiE9IiwiPCIsIj49IiwiPiIsIjw9Il0sQ09NUEFSSVNPTl9PUFMyOlsiPSIsIjwiLCI+PSIsIj4iLCI8PSJdLElOVEVSVkFMX09QUzpbIltdIiwiKCkiLCJbKSIsIihdIiwiXVsiLCIpKCIsIl0oIiwiKVsiXSxTRVRfT1BTOlsie30iLCJ9eyJdLENPTlNUUkFJTlRfUkVEVUNUSU9OOnsiPSI6Ij0iLCI8IjoiPCIsIjw9IjoiPCIsIj4iOiI+IiwiPj0iOiI+IiwiW10iOiJbXSIsIigpIjoiW10iLCJbKSI6IltdIiwiKF0iOiJbXSIsIl1bIjoiXVsiLCIpKCI6Il1bIiwiXSgiOiJdWyIsIilbIjoiXVsifX19LHt9XSw2NTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtzb2xpZDpbW10sMF0sZG90OltbLjUsMV0sMjAwXSxkYXNoOltbLjUsMV0sNTBdLGxvbmdkYXNoOltbLjUsMV0sMTBdLGRhc2hkb3Q6W1suNSwuNjI1LC44NzUsMV0sNTBdLGxvbmdkYXNoZG90OltbLjUsLjcsLjgsMV0sMTBdfX0se31dLDY1OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2NpcmNsZToiXHUyNWNmIiwiY2lyY2xlLW9wZW4iOiJcdTI1Y2IiLHNxdWFyZToiXHUyNWEwIiwic3F1YXJlLW9wZW4iOiJcdTI1YTEiLGRpYW1vbmQ6Ilx1MjVjNiIsImRpYW1vbmQtb3BlbiI6Ilx1MjVjNyIsY3Jvc3M6IisiLHg6Ilx1Mjc0YyJ9fSx7fV0sNjYwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17U0hPV19QTEFDRUhPTERFUjoxMDAsSElERV9QTEFDRUhPTERFUjoxZTMsREJMQ0xJQ0tERUxBWTozMDAsREVTRUxFQ1RESU06LjJ9fSx7fV0sNjYxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17QkFETlVNOnZvaWQgMCxGUF9TQUZFOk51bWJlci5NQVhfVkFMVUUvMWU0LE9ORUFWR1lFQVI6MzE1NTc2ZTUsT05FQVZHTU9OVEg6MjYyOThlNSxPTkVEQVk6ODY0ZTUsT05FSE9VUjozNmU1LE9ORU1JTjo2ZTQsT05FU0VDOjFlMyxFUE9DSEpEOjI0NDA1ODcuNSxBTE1PU1RfRVFVQUw6MS0xZS02LE1JTlVTX1NJR046Ilx1MjIxMiJ9fSx7fV0sNjYyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17ZW50aXR5VG9Vbmljb2RlOnttdToiXHUwM2JjIiwiIzk1NiI6Ilx1MDNiYyIsYW1wOiImIiwiIzI4IjoiJiIsbHQ6IjwiLCIjNjAiOiI8IixndDoiPiIsIiM2MiI6Ij4iLG5ic3A6Ilx4YTAiLCIjMTYwIjoiXHhhMCIsdGltZXM6Ilx4ZDciLCIjMjE1IjoiXHhkNyIscGx1c21uOiJceGIxIiwiIzE3NyI6Ilx4YjEiLGRlZzoiXHhiMCIsIiMxNzYiOiJceGIwIn19fSx7fV0sNjYzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3IueG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIixyLnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHIueGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHIuc3ZnQXR0cnM9e3htbG5zOnIuc3ZnLCJ4bWxuczp4bGluayI6ci54bGlua319LHt9XSw2NjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ci52ZXJzaW9uPSIxLjM5LjIiLHQoImVzNi1wcm9taXNlIikucG9seWZpbGwoKSx0KCIuLi9idWlsZC9wbG90Y3NzIiksdCgiLi9mb250cy9tYXRoamF4X2NvbmZpZyIpO2Zvcih2YXIgbj10KCIuL3JlZ2lzdHJ5IiksaT1yLnJlZ2lzdGVyPW4ucmVnaXN0ZXIsYT10KCIuL3Bsb3RfYXBpIiksbz1PYmplY3Qua2V5cyhhKSxzPTA7czxvLmxlbmd0aDtzKyspe3ZhciBsPW9bc107cltsXT1hW2xdLGkoe21vZHVsZVR5cGU6ImFwaU1ldGhvZCIsbmFtZTpsLGZuOmFbbF19KX1pKHQoIi4vdHJhY2VzL3NjYXR0ZXIiKSksaShbdCgiLi9jb21wb25lbnRzL2Z4IiksdCgiLi9jb21wb25lbnRzL2xlZ2VuZCIpLHQoIi4vY29tcG9uZW50cy9hbm5vdGF0aW9ucyIpLHQoIi4vY29tcG9uZW50cy9hbm5vdGF0aW9uczNkIiksdCgiLi9jb21wb25lbnRzL3NoYXBlcyIpLHQoIi4vY29tcG9uZW50cy9pbWFnZXMiKSx0KCIuL2NvbXBvbmVudHMvdXBkYXRlbWVudXMiKSx0KCIuL2NvbXBvbmVudHMvc2xpZGVycyIpLHQoIi4vY29tcG9uZW50cy9yYW5nZXNsaWRlciIpLHQoIi4vY29tcG9uZW50cy9yYW5nZXNlbGVjdG9yIiksdCgiLi9jb21wb25lbnRzL2dyaWQiKSx0KCIuL2NvbXBvbmVudHMvZXJyb3JiYXJzIildKSxpKFt0KCIuL2xvY2FsZS1lbiIpLHQoIi4vbG9jYWxlLWVuLXVzIildKSxyLkljb25zPXQoIi4uL2J1aWxkL3Bsb3RpY29uIiksci5QbG90cz10KCIuL3Bsb3RzL3Bsb3RzIiksci5GeD10KCIuL2NvbXBvbmVudHMvZngiKSxyLlNuYXBzaG90PXQoIi4vc25hcHNob3QiKSxyLlBsb3RTY2hlbWE9dCgiLi9wbG90X2FwaS9wbG90X3NjaGVtYSIpLHIuUXVldWU9dCgiLi9saWIvcXVldWUiKSxyLmQzPXQoImQzIil9LHsiLi4vYnVpbGQvcGxvdGNzcyI6MSwiLi4vYnVpbGQvcGxvdGljb24iOjIsIi4vY29tcG9uZW50cy9hbm5vdGF0aW9ucyI6NTQ5LCIuL2NvbXBvbmVudHMvYW5ub3RhdGlvbnMzZCI6NTU0LCIuL2NvbXBvbmVudHMvZXJyb3JiYXJzIjo1ODksIi4vY29tcG9uZW50cy9meCI6NjAwLCIuL2NvbXBvbmVudHMvZ3JpZCI6NjA0LCIuL2NvbXBvbmVudHMvaW1hZ2VzIjo2MDksIi4vY29tcG9uZW50cy9sZWdlbmQiOjYxOCwiLi9jb21wb25lbnRzL3Jhbmdlc2VsZWN0b3IiOjYyOSwiLi9jb21wb25lbnRzL3Jhbmdlc2xpZGVyIjo2MzUsIi4vY29tcG9uZW50cy9zaGFwZXMiOjY0MywiLi9jb21wb25lbnRzL3NsaWRlcnMiOjY0OCwiLi9jb21wb25lbnRzL3VwZGF0ZW1lbnVzIjo2NTQsIi4vZm9udHMvbWF0aGpheF9jb25maWciOjY2NSwiLi9saWIvcXVldWUiOjY5OSwiLi9sb2NhbGUtZW4iOjcxMywiLi9sb2NhbGUtZW4tdXMiOjcxMiwiLi9wbG90X2FwaSI6NzE3LCIuL3Bsb3RfYXBpL3Bsb3Rfc2NoZW1hIjo3MjEsIi4vcGxvdHMvcGxvdHMiOjc5NSwiLi9yZWdpc3RyeSI6ODE3LCIuL3NuYXBzaG90Ijo4MjIsIi4vdHJhY2VzL3NjYXR0ZXIiOjEwMjYsZDM6MTQ3LCJlczYtcHJvbWlzZSI6MjAyfV0sNjY1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiOyJ1bmRlZmluZWQiIT10eXBlb2YgTWF0aEpheD8oci5NYXRoSmF4PSEwLE1hdGhKYXguSHViLkNvbmZpZyh7bWVzc2FnZVN0eWxlOiJub25lIixza2lwU3RhcnR1cFR5cGVzZXQ6ITAsZGlzcGxheUFsaWduOiJsZWZ0Iix0ZXgyamF4OntpbmxpbmVNYXRoOltbIiQiLCIkIl0sWyJcXCgiLCJcXCkiXV19fSksTWF0aEpheC5IdWIuQ29uZmlndXJlZCgpKTpyLk1hdGhKYXg9ITF9LHt9XSw2NjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49TWF0aC5QSTtyLmRlZzJyYWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQvMTgwKm59LHIucmFkMmRlZz1mdW5jdGlvbih0KXtyZXR1cm4gdC9uKjE4MH0sci53cmFwMzYwPWZ1bmN0aW9uKHQpe3ZhciBlPXQlMzYwO3JldHVybiBlPDA/ZSszNjA6ZX0sci53cmFwMTgwPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmFicyh0KT4xODAmJih0LT0zNjAqTWF0aC5yb3VuZCh0LzM2MCkpLHR9fSx7fV0sNjY3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNLGE9L15bJyIlLCQjXHMnXSt8WywgXXxbJyIlLCQjXHMnXSskL2c7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdCYmKHQ9dC5yZXBsYWNlKGEsIiIpKSxuKHQpP051bWJlcih0KTppfX0seyIuLi9jb25zdGFudHMvbnVtZXJpY2FsIjo2NjEsImZhc3QtaXNudW1lcmljIjoyMTR9XSw2Njg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQ7ZS5fZ2xjYW52YXMmJmUuX2dsY2FudmFzLnNpemUoKSYmZS5fZ2xjYW52YXMuZWFjaChmdW5jdGlvbih0KXt0LnJlZ2wmJnQucmVnbC5jbGVhcih7Y29sb3I6ITAsZGVwdGg6ITB9KX0pfX0se31dLDY2OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgidGlueWNvbG9yMiIpLGE9dCgiLi4vcGxvdHMvYXR0cmlidXRlcyIpLG89dCgiLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2dldF9zY2FsZSIpLHM9KE9iamVjdC5rZXlzKHQoIi4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9zY2FsZXMiKSksdCgiLi9uZXN0ZWRfcHJvcGVydHkiKSksbD10KCIuL3JlZ2V4IikuY291bnRlcixjPXQoIi4uL2NvbnN0YW50cy9pbnRlcmFjdGlvbnMiKS5ERVNFTEVDVERJTSx1PXQoIi4vYW5nbGVzIikud3JhcDE4MCxoPXQoIi4vaXNfYXJyYXkiKS5pc0FycmF5T3JUeXBlZEFycmF5O2Z1bmN0aW9uIGYodCxlKXt2YXIgbj1yLnZhbE9iamVjdE1ldGFbZS52YWxUeXBlXTtpZihlLmFycmF5T2smJmgodCkpcmV0dXJuITA7aWYobi52YWxpZGF0ZUZ1bmN0aW9uKXJldHVybiBuLnZhbGlkYXRlRnVuY3Rpb24odCxlKTt2YXIgaT17fSxhPWksbz17c2V0OmZ1bmN0aW9uKHQpe2E9dH19O3JldHVybiBuLmNvZXJjZUZ1bmN0aW9uKHQsbyxpLGUpLGEhPT1pfXIudmFsT2JqZWN0TWV0YT17ZGF0YV9hcnJheTp7Y29lcmNlRnVuY3Rpb246ZnVuY3Rpb24odCxlLHIpe2godCk/ZS5zZXQodCk6dm9pZCAwIT09ciYmZS5zZXQocil9fSxlbnVtZXJhdGVkOntjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbih0LGUscixuKXtuLmNvZXJjZU51bWJlciYmKHQ9K3QpLC0xPT09bi52YWx1ZXMuaW5kZXhPZih0KT9lLnNldChyKTplLnNldCh0KX0sdmFsaWRhdGVGdW5jdGlvbjpmdW5jdGlvbih0LGUpe2UuY29lcmNlTnVtYmVyJiYodD0rdCk7Zm9yKHZhciByPWUudmFsdWVzLG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIGk9U3RyaW5nKHJbbl0pO2lmKCIvIj09PWkuY2hhckF0KDApJiYiLyI9PT1pLmNoYXJBdChpLmxlbmd0aC0xKSl7aWYobmV3IFJlZ0V4cChpLnN1YnN0cigxLGkubGVuZ3RoLTIpKS50ZXN0KHQpKXJldHVybiEwfWVsc2UgaWYodD09PXJbbl0pcmV0dXJuITB9cmV0dXJuITF9fSxib29sZWFuOntjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbih0LGUscil7ITA9PT10fHwhMT09PXQ/ZS5zZXQodCk6ZS5zZXQocil9fSxudW1iZXI6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxyLGkpeyFuKHQpfHx2b2lkIDAhPT1pLm1pbiYmdDxpLm1pbnx8dm9pZCAwIT09aS5tYXgmJnQ+aS5tYXg/ZS5zZXQocik6ZS5zZXQoK3QpfX0saW50ZWdlcjp7Y29lcmNlRnVuY3Rpb246ZnVuY3Rpb24odCxlLHIsaSl7dCUxfHwhbih0KXx8dm9pZCAwIT09aS5taW4mJnQ8aS5taW58fHZvaWQgMCE9PWkubWF4JiZ0PmkubWF4P2Uuc2V0KHIpOmUuc2V0KCt0KX19LHN0cmluZzp7Y29lcmNlRnVuY3Rpb246ZnVuY3Rpb24odCxlLHIsbil7aWYoInN0cmluZyIhPXR5cGVvZiB0KXt2YXIgaT0ibnVtYmVyIj09dHlwZW9mIHQ7ITAhPT1uLnN0cmljdCYmaT9lLnNldChTdHJpbmcodCkpOmUuc2V0KHIpfWVsc2Ugbi5ub0JsYW5rJiYhdD9lLnNldChyKTplLnNldCh0KX19LGNvbG9yOntjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbih0LGUscil7aSh0KS5pc1ZhbGlkKCk/ZS5zZXQodCk6ZS5zZXQocil9fSxjb2xvcmxpc3Q6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxyKXtBcnJheS5pc0FycmF5KHQpJiZ0Lmxlbmd0aCYmdC5ldmVyeShmdW5jdGlvbih0KXtyZXR1cm4gaSh0KS5pc1ZhbGlkKCl9KT9lLnNldCh0KTplLnNldChyKX19LGNvbG9yc2NhbGU6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxyKXtlLnNldChvKHQscikpfX0sYW5nbGU6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxyKXsiYXV0byI9PT10P2Uuc2V0KCJhdXRvIik6bih0KT9lLnNldCh1KCt0KSk6ZS5zZXQocil9fSxzdWJwbG90aWQ6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPW4ucmVnZXh8fGwocik7InN0cmluZyI9PXR5cGVvZiB0JiZpLnRlc3QodCk/ZS5zZXQodCk6ZS5zZXQocil9LHZhbGlkYXRlRnVuY3Rpb246ZnVuY3Rpb24odCxlKXt2YXIgcj1lLmRmbHQ7cmV0dXJuIHQ9PT1yfHwic3RyaW5nIj09dHlwZW9mIHQmJiEhbChyKS50ZXN0KHQpfX0sZmxhZ2xpc3Q6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxyLG4pe2lmKCJzdHJpbmciPT10eXBlb2YgdClpZigtMT09PShuLmV4dHJhc3x8W10pLmluZGV4T2YodCkpe2Zvcih2YXIgaT10LnNwbGl0KCIrIiksYT0wO2E8aS5sZW5ndGg7KXt2YXIgbz1pW2FdOy0xPT09bi5mbGFncy5pbmRleE9mKG8pfHxpLmluZGV4T2Yobyk8YT9pLnNwbGljZShhLDEpOmErK31pLmxlbmd0aD9lLnNldChpLmpvaW4oIisiKSk6ZS5zZXQocil9ZWxzZSBlLnNldCh0KTtlbHNlIGUuc2V0KHIpfX0sYW55Ontjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbih0LGUscil7dm9pZCAwPT09dD9lLnNldChyKTplLnNldCh0KX19LGluZm9fYXJyYXk6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxuLGkpe2Z1bmN0aW9uIGEodCxlLG4pe3ZhciBpLGE9e3NldDpmdW5jdGlvbih0KXtpPXR9fTtyZXR1cm4gdm9pZCAwPT09biYmKG49ZS5kZmx0KSxyLnZhbE9iamVjdE1ldGFbZS52YWxUeXBlXS5jb2VyY2VGdW5jdGlvbih0LGEsbixlKSxpfXZhciBvPTI9PT1pLmRpbWVuc2lvbnN8fCIxLTIiPT09aS5kaW1lbnNpb25zJiZBcnJheS5pc0FycmF5KHQpJiZBcnJheS5pc0FycmF5KHRbMF0pO2lmKEFycmF5LmlzQXJyYXkodCkpe3ZhciBzLGwsYyx1LGgsZixwPWkuaXRlbXMsZD1bXSxnPUFycmF5LmlzQXJyYXkocCksbT1nJiZvJiZBcnJheS5pc0FycmF5KHBbMF0pLHY9byYmZyYmIW0seT1nJiYhdj9wLmxlbmd0aDp0Lmxlbmd0aDtpZihuPUFycmF5LmlzQXJyYXkobik/bjpbXSxvKWZvcihzPTA7czx5O3MrKylmb3IoZFtzXT1bXSxjPUFycmF5LmlzQXJyYXkodFtzXSk/dFtzXTpbXSxoPXY/cC5sZW5ndGg6Zz9wW3NdLmxlbmd0aDpjLmxlbmd0aCxsPTA7bDxoO2wrKyl1PXY/cFtsXTpnP3Bbc11bbF06cCx2b2lkIDAhPT0oZj1hKGNbbF0sdSwobltzXXx8W10pW2xdKSkmJihkW3NdW2xdPWYpO2Vsc2UgZm9yKHM9MDtzPHk7cysrKXZvaWQgMCE9PShmPWEodFtzXSxnP3Bbc106cCxuW3NdKSkmJihkW3NdPWYpO2Uuc2V0KGQpfWVsc2UgZS5zZXQobil9LHZhbGlkYXRlRnVuY3Rpb246ZnVuY3Rpb24odCxlKXtpZighQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4hMTt2YXIgcj1lLml0ZW1zLG49QXJyYXkuaXNBcnJheShyKSxpPTI9PT1lLmRpbWVuc2lvbnM7aWYoIWUuZnJlZUxlbmd0aCYmdC5sZW5ndGghPT1yLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIGE9MDthPHQubGVuZ3RoO2ErKylpZihpKXtpZighQXJyYXkuaXNBcnJheSh0W2FdKXx8IWUuZnJlZUxlbmd0aCYmdFthXS5sZW5ndGghPT1yW2FdLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIG89MDtvPHRbYV0ubGVuZ3RoO28rKylpZighZih0W2FdW29dLG4/clthXVtvXTpyKSlyZXR1cm4hMX1lbHNlIGlmKCFmKHRbYV0sbj9yW2FdOnIpKXJldHVybiExO3JldHVybiEwfX19LHIuY29lcmNlPWZ1bmN0aW9uKHQsZSxuLGksYSl7dmFyIG89cyhuLGkpLmdldCgpLGw9cyh0LGkpLGM9cyhlLGkpLHU9bC5nZXQoKSxwPWUuX3RlbXBsYXRlO2lmKHZvaWQgMD09PXUmJnAmJih1PXMocCxpKS5nZXQoKSxwPTApLHZvaWQgMD09PWEmJihhPW8uZGZsdCksby5hcnJheU9rJiZoKHUpKXJldHVybiBjLnNldCh1KSx1O3ZhciBkPXIudmFsT2JqZWN0TWV0YVtvLnZhbFR5cGVdLmNvZXJjZUZ1bmN0aW9uO2QodSxjLGEsbyk7dmFyIGc9Yy5nZXQoKTtyZXR1cm4gcCYmZz09PWEmJiFmKHUsbykmJihkKHU9cyhwLGkpLmdldCgpLGMsYSxvKSxnPWMuZ2V0KCkpLGd9LHIuY29lcmNlMj1mdW5jdGlvbih0LGUsbixpLGEpe3ZhciBvPXModCxpKSxsPXIuY29lcmNlKHQsZSxuLGksYSksYz1vLmdldCgpO3JldHVybiBudWxsIT1jJiZsfSxyLmNvZXJjZUZvbnQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXt9O3JldHVybiByPXJ8fHt9LG4uZmFtaWx5PXQoZSsiLmZhbWlseSIsci5mYW1pbHkpLG4uc2l6ZT10KGUrIi5zaXplIixyLnNpemUpLG4uY29sb3I9dChlKyIuY29sb3IiLHIuY29sb3IpLG59LHIuY29lcmNlSG92ZXJpbmZvPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaSxvPWUuX21vZHVsZS5hdHRyaWJ1dGVzLHM9by5ob3ZlcmluZm8/bzphLGw9cy5ob3ZlcmluZm87aWYoMT09PW4uX2RhdGFMZW5ndGgpe3ZhciBjPSJhbGwiPT09bC5kZmx0P2wuZmxhZ3Muc2xpY2UoKTpsLmRmbHQuc3BsaXQoIisiKTtjLnNwbGljZShjLmluZGV4T2YoIm5hbWUiKSwxKSxpPWMuam9pbigiKyIpfXJldHVybiByLmNvZXJjZSh0LGUscywiaG92ZXJpbmZvIixpKX0sci5jb2VyY2VTZWxlY3Rpb25NYXJrZXJPcGFjaXR5PWZ1bmN0aW9uKHQsZSl7aWYodC5tYXJrZXIpe3ZhciByLG4saT10Lm1hcmtlci5vcGFjaXR5O2lmKHZvaWQgMCE9PWkpaChpKXx8dC5zZWxlY3RlZHx8dC51bnNlbGVjdGVkfHwocj1pLG49YyppKSxlKCJzZWxlY3RlZC5tYXJrZXIub3BhY2l0eSIsciksZSgidW5zZWxlY3RlZC5tYXJrZXIub3BhY2l0eSIsbil9fSxyLnZhbGlkYXRlPWZ9LHsiLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2dldF9zY2FsZSI6NTcxLCIuLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvc2NhbGVzIjo1NzcsIi4uL2NvbnN0YW50cy9pbnRlcmFjdGlvbnMiOjY2MCwiLi4vcGxvdHMvYXR0cmlidXRlcyI6NzI5LCIuL2FuZ2xlcyI6NjY2LCIuL2lzX2FycmF5Ijo2ODUsIi4vbmVzdGVkX3Byb3BlcnR5Ijo2OTIsIi4vcmVnZXgiOjcwMCwiZmFzdC1pc251bWVyaWMiOjIxNCx0aW55Y29sb3IyOjQ5OX1dLDY3MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixpLGE9dCgiZDMiKSxvPXQoImZhc3QtaXNudW1lcmljIikscz10KCIuL2xvZ2dlcnMiKSxsPXQoIi4vbW9kIiksYz10KCIuLi9jb25zdGFudHMvbnVtZXJpY2FsIiksdT1jLkJBRE5VTSxoPWMuT05FREFZLGY9Yy5PTkVIT1VSLHA9Yy5PTkVNSU4sZD1jLk9ORVNFQyxnPWMuRVBPQ0hKRCxtPXQoIi4uL3JlZ2lzdHJ5Iiksdj1hLnRpbWUuZm9ybWF0LnV0Yyx5PS9eXHMqKC0/XGRcZFxkXGR8XGRcZCkoLShcZD9cZCkoLShcZD9cZCkoWyBUdF0oWzAxXT9cZHwyWzAtM10pKDooWzAtNV1cZCkoOihbMC01XVxkKFwuXGQrKT8pKT8oWnx6fFsrXC1dXGRcZDo/XGRcZCk/KT8pPyk/KT9ccyokL20seD0vXlxzKigtP1xkXGRcZFxkfFxkXGQpKC0oXGQ/XGRpPykoLShcZD9cZCkoWyBUdF0oWzAxXT9cZHwyWzAtM10pKDooWzAtNV1cZCkoOihbMC01XVxkKFwuXGQrKT8pKT8oWnx6fFsrXC1dXGRcZDo/XGRcZCk/KT8pPyk/KT9ccyokL20sYj0obmV3IERhdGUpLmdldEZ1bGxZZWFyKCktNzA7ZnVuY3Rpb24gXyh0KXtyZXR1cm4gdCYmbS5jb21wb25lbnRzUmVnaXN0cnkuY2FsZW5kYXJzJiYic3RyaW5nIj09dHlwZW9mIHQmJiJncmVnb3JpYW4iIT09dH1mdW5jdGlvbiB3KHQsZSl7cmV0dXJuIFN0cmluZyh0K01hdGgucG93KDEwLGUpKS5zdWJzdHIoMSl9ci5kYXRlVGljazA9ZnVuY3Rpb24odCxlKXtyZXR1cm4gXyh0KT9lP20uZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJDQU5PTklDQUxfU1VOREFZIilbdF06bS5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsIkNBTk9OSUNBTF9USUNLIilbdF06ZT8iMjAwMC0wMS0wMiI6IjIwMDAtMDEtMDEifSxyLmRmbHRSYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gXyh0KT9tLmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwiREZMVFJBTkdFIilbdF06WyIyMDAwLTAxLTAxIiwiMjAwMS0wMS0wMSJdfSxyLmlzSlNEYXRlPWZ1bmN0aW9uKHQpe3JldHVybiJvYmplY3QiPT10eXBlb2YgdCYmbnVsbCE9PXQmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LmdldFRpbWV9LHIuZGF0ZVRpbWUybXM9ZnVuY3Rpb24odCxlKXtpZihyLmlzSlNEYXRlKHQpKXt2YXIgYT10LmdldFRpbWV6b25lT2Zmc2V0KCkqcCxvPSh0LmdldFVUQ01pbnV0ZXMoKS10LmdldE1pbnV0ZXMoKSkqcCsodC5nZXRVVENTZWNvbmRzKCktdC5nZXRTZWNvbmRzKCkpKmQrKHQuZ2V0VVRDTWlsbGlzZWNvbmRzKCktdC5nZXRNaWxsaXNlY29uZHMoKSk7aWYobyl7dmFyIHM9MypwO2E9YS1zLzIrbChvLWErcy8yLHMpfXJldHVybih0PU51bWJlcih0KS1hKT49biYmdDw9aT90OnV9aWYoInN0cmluZyIhPXR5cGVvZiB0JiYibnVtYmVyIiE9dHlwZW9mIHQpcmV0dXJuIHU7dD1TdHJpbmcodCk7dmFyIGM9XyhlKSx2PXQuY2hhckF0KDApOyFjfHwiRyIhPT12JiYiZyIhPT12fHwodD10LnN1YnN0cigxKSxlPSIiKTt2YXIgdz1jJiYiY2hpbmVzZSI9PT1lLnN1YnN0cigwLDcpLGs9dC5tYXRjaCh3P3g6eSk7aWYoIWspcmV0dXJuIHU7dmFyIE09a1sxXSxBPWtbM118fCIxIixUPU51bWJlcihrWzVdfHwxKSxTPU51bWJlcihrWzddfHwwKSxFPU51bWJlcihrWzldfHwwKSxDPU51bWJlcihrWzExXXx8MCk7aWYoYyl7aWYoMj09PU0ubGVuZ3RoKXJldHVybiB1O3ZhciBMO009TnVtYmVyKE0pO3RyeXt2YXIgej1tLmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwiZ2V0Q2FsIikoZSk7aWYodyl7dmFyIFA9ImkiPT09QS5jaGFyQXQoQS5sZW5ndGgtMSk7QT1wYXJzZUludChBLDEwKSxMPXoubmV3RGF0ZShNLHoudG9Nb250aEluZGV4KE0sQSxQKSxUKX1lbHNlIEw9ei5uZXdEYXRlKE0sTnVtYmVyKEEpLFQpfWNhdGNoKHQpe3JldHVybiB1fXJldHVybiBMPyhMLnRvSkQoKS1nKSpoK1MqZitFKnArQypkOnV9TT0yPT09TS5sZW5ndGg/KE51bWJlcihNKSsyZTMtYiklMTAwK2I6TnVtYmVyKE0pLEEtPTE7dmFyIEk9bmV3IERhdGUoRGF0ZS5VVEMoMmUzLEEsVCxTLEUpKTtyZXR1cm4gSS5zZXRVVENGdWxsWWVhcihNKSxJLmdldFVUQ01vbnRoKCkhPT1BP3U6SS5nZXRVVENEYXRlKCkhPT1UP3U6SS5nZXRUaW1lKCkrQypkfSxuPXIuTUlOX01TPXIuZGF0ZVRpbWUybXMoIi05OTk5IiksaT1yLk1BWF9NUz1yLmRhdGVUaW1lMm1zKCI5OTk5LTEyLTMxIDIzOjU5OjU5Ljk5OTkiKSxyLmlzRGF0ZVRpbWU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gci5kYXRlVGltZTJtcyh0LGUpIT09dX07dmFyIGs9OTAqaCxNPTMqZixBPTUqcDtmdW5jdGlvbiBUKHQsZSxyLG4saSl7aWYoKGV8fHJ8fG58fGkpJiYodCs9IiAiK3coZSwyKSsiOiIrdyhyLDIpLChufHxpKSYmKHQrPSI6Iit3KG4sMiksaSkpKXtmb3IodmFyIGE9NDtpJTEwPT0wOylhLT0xLGkvPTEwO3QrPSIuIit3KGksYSl9cmV0dXJuIHR9ci5tczJEYXRlVGltZT1mdW5jdGlvbih0LGUscil7aWYoIm51bWJlciIhPXR5cGVvZiB0fHwhKHQ+PW4mJnQ8PWkpKXJldHVybiB1O2V8fChlPTApO3ZhciBhLG8scyxjLHkseCxiPU1hdGguZmxvb3IoMTAqbCh0Ky4wNSwxKSksdz1NYXRoLnJvdW5kKHQtYi8xMCk7aWYoXyhyKSl7dmFyIFM9TWF0aC5mbG9vcih3L2gpK2csRT1NYXRoLmZsb29yKGwodCxoKSk7dHJ5e2E9bS5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImdldENhbCIpKHIpLmZyb21KRChTKS5mb3JtYXREYXRlKCJ5eXl5LW1tLWRkIil9Y2F0Y2godCl7YT12KCJHJVktJW0tJWQiKShuZXcgRGF0ZSh3KSl9aWYoIi0iPT09YS5jaGFyQXQoMCkpZm9yKDthLmxlbmd0aDwxMTspYT0iLTAiK2Euc3Vic3RyKDEpO2Vsc2UgZm9yKDthLmxlbmd0aDwxMDspYT0iMCIrYTtvPWU8az9NYXRoLmZsb29yKEUvZik6MCxzPWU8az9NYXRoLmZsb29yKEUlZi9wKTowLGM9ZTxNP01hdGguZmxvb3IoRSVwL2QpOjAseT1lPEE/RSVkKjEwK2I6MH1lbHNlIHg9bmV3IERhdGUodyksYT12KCIlWS0lbS0lZCIpKHgpLG89ZTxrP3guZ2V0VVRDSG91cnMoKTowLHM9ZTxrP3guZ2V0VVRDTWludXRlcygpOjAsYz1lPE0/eC5nZXRVVENTZWNvbmRzKCk6MCx5PWU8QT8xMCp4LmdldFVUQ01pbGxpc2Vjb25kcygpK2I6MDtyZXR1cm4gVChhLG8scyxjLHkpfSxyLm1zMkRhdGVUaW1lTG9jYWw9ZnVuY3Rpb24odCl7aWYoISh0Pj1uK2gmJnQ8PWktaCkpcmV0dXJuIHU7dmFyIGU9TWF0aC5mbG9vcigxMCpsKHQrLjA1LDEpKSxyPW5ldyBEYXRlKE1hdGgucm91bmQodC1lLzEwKSk7cmV0dXJuIFQoYS50aW1lLmZvcm1hdCgiJVktJW0tJWQiKShyKSxyLmdldEhvdXJzKCksci5nZXRNaW51dGVzKCksci5nZXRTZWNvbmRzKCksMTAqci5nZXRVVENNaWxsaXNlY29uZHMoKStlKX0sci5jbGVhbkRhdGU9ZnVuY3Rpb24odCxlLG4pe2lmKHIuaXNKU0RhdGUodCl8fCJudW1iZXIiPT10eXBlb2YgdCl7aWYoXyhuKSlyZXR1cm4gcy5lcnJvcigiSlMgRGF0ZXMgYW5kIG1pbGxpc2Vjb25kcyBhcmUgaW5jb21wYXRpYmxlIHdpdGggd29ybGQgY2FsZW5kYXJzIix0KSxlO2lmKCEodD1yLm1zMkRhdGVUaW1lTG9jYWwoK3QpKSYmdm9pZCAwIT09ZSlyZXR1cm4gZX1lbHNlIGlmKCFyLmlzRGF0ZVRpbWUodCxuKSlyZXR1cm4gcy5lcnJvcigidW5yZWNvZ25pemVkIGRhdGUiLHQpLGU7cmV0dXJuIHR9O3ZhciBTPS8lXGQ/Zi9nO2Z1bmN0aW9uIEUodCxlLHIsbil7dD10LnJlcGxhY2UoUyxmdW5jdGlvbih0KXt2YXIgcj1NYXRoLm1pbigrdC5jaGFyQXQoMSl8fDYsNik7cmV0dXJuKGUvMWUzJTErMikudG9GaXhlZChyKS5zdWJzdHIoMikucmVwbGFjZSgvMCskLywiIil8fCIwIn0pO3ZhciBpPW5ldyBEYXRlKE1hdGguZmxvb3IoZSsuMDUpKTtpZihfKG4pKXRyeXt0PW0uZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJ3b3JsZENhbEZtdCIpKHQsZSxuKX1jYXRjaCh0KXtyZXR1cm4iSW52YWxpZCJ9cmV0dXJuIHIodCkoaSl9dmFyIEM9WzU5LDU5LjksNTkuOTksNTkuOTk5LDU5Ljk5OTldO3IuZm9ybWF0RGF0ZT1mdW5jdGlvbih0LGUscixuLGksYSl7aWYoaT1fKGkpJiZpLCFlKWlmKCJ5Ij09PXIpZT1hLnllYXI7ZWxzZSBpZigibSI9PT1yKWU9YS5tb250aDtlbHNle2lmKCJkIiE9PXIpcmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIHI9bCh0Ky4wNSxoKSxuPXcoTWF0aC5mbG9vcihyL2YpLDIpKyI6Iit3KGwoTWF0aC5mbG9vcihyL3ApLDYwKSwyKTtpZigiTSIhPT1lKXtvKGUpfHwoZT0wKTt2YXIgaT0oMTAwK01hdGgubWluKGwodC9kLDYwKSxDW2VdKSkudG9GaXhlZChlKS5zdWJzdHIoMSk7ZT4wJiYoaT1pLnJlcGxhY2UoLzArJC8sIiIpLnJlcGxhY2UoL1tcLl0kLywiIikpLG4rPSI6IitpfXJldHVybiBufSh0LHIpKyJcbiIrRShhLmRheU1vbnRoWWVhcix0LG4saSk7ZT1hLmRheU1vbnRoKyJcbiIrYS55ZWFyfXJldHVybiBFKGUsdCxuLGkpfTt2YXIgTD0zKmg7ci5pbmNyZW1lbnRNb250aD1mdW5jdGlvbih0LGUscil7cj1fKHIpJiZyO3ZhciBuPWwodCxoKTtpZih0PU1hdGgucm91bmQodC1uKSxyKXRyeXt2YXIgaT1NYXRoLnJvdW5kKHQvaCkrZyxhPW0uZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJnZXRDYWwiKShyKSxvPWEuZnJvbUpEKGkpO3JldHVybiBlJTEyP2EuYWRkKG8sZSwibSIpOmEuYWRkKG8sZS8xMiwieSIpLChvLnRvSkQoKS1nKSpoK259Y2F0Y2goZSl7cy5lcnJvcigiaW52YWxpZCBtcyAiK3QrIiBpbiBjYWxlbmRhciAiK3IpfXZhciBjPW5ldyBEYXRlKHQrTCk7cmV0dXJuIGMuc2V0VVRDTW9udGgoYy5nZXRVVENNb250aCgpK2UpK24tTH0sci5maW5kRXhhY3REYXRlcz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcixuLGk9MCxhPTAscz0wLGw9MCxjPV8oZSkmJm0uZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJnZXRDYWwiKShlKSx1PTA7dTx0Lmxlbmd0aDt1KyspaWYobj10W3VdLG8obikpe2lmKCEobiVoKSlpZihjKXRyeXsxPT09KHI9Yy5mcm9tSkQobi9oK2cpKS5kYXkoKT8xPT09ci5tb250aCgpP2krKzphKys6cysrfWNhdGNoKHQpe31lbHNlIDE9PT0ocj1uZXcgRGF0ZShuKSkuZ2V0VVRDRGF0ZSgpPzA9PT1yLmdldFVUQ01vbnRoKCk/aSsrOmErKzpzKyt9ZWxzZSBsKys7cys9YSs9aTt2YXIgZj10Lmxlbmd0aC1sO3JldHVybntleGFjdFllYXJzOmkvZixleGFjdE1vbnRoczphL2YsZXhhY3REYXlzOnMvZn19fSx7Ii4uL2NvbnN0YW50cy9udW1lcmljYWwiOjY2MSwiLi4vcmVnaXN0cnkiOjgxNywiLi9sb2dnZXJzIjo2ODksIi4vbW9kIjo2OTEsZDM6MTQ3LCJmYXN0LWlzbnVtZXJpYyI6MjE0fV0sNjcxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBBcnJheS5pc0FycmF5KHQpfHwodD1bXSksdC5sZW5ndGg9ZSx0fX0se31dLDY3MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJldmVudHMiKS5FdmVudEVtaXR0ZXIsaT17aW5pdDpmdW5jdGlvbih0KXtpZih0Ll9ldiBpbnN0YW5jZW9mIG4pcmV0dXJuIHQ7dmFyIGU9bmV3IG4scj1uZXcgbjtyZXR1cm4gdC5fZXY9ZSx0Ll9pbnRlcm5hbEV2PXIsdC5vbj1lLm9uLmJpbmQoZSksdC5vbmNlPWUub25jZS5iaW5kKGUpLHQucmVtb3ZlTGlzdGVuZXI9ZS5yZW1vdmVMaXN0ZW5lci5iaW5kKGUpLHQucmVtb3ZlQWxsTGlzdGVuZXJzPWUucmVtb3ZlQWxsTGlzdGVuZXJzLmJpbmQoZSksdC5faW50ZXJuYWxPbj1yLm9uLmJpbmQociksdC5faW50ZXJuYWxPbmNlPXIub25jZS5iaW5kKHIpLHQuX3JlbW92ZUludGVybmFsTGlzdGVuZXI9ci5yZW1vdmVMaXN0ZW5lci5iaW5kKHIpLHQuX3JlbW92ZUFsbEludGVybmFsTGlzdGVuZXJzPXIucmVtb3ZlQWxsTGlzdGVuZXJzLmJpbmQociksdC5lbWl0PWZ1bmN0aW9uKG4saSl7InVuZGVmaW5lZCIhPXR5cGVvZiBqUXVlcnkmJmpRdWVyeSh0KS50cmlnZ2VyKG4saSksZS5lbWl0KG4saSksci5lbWl0KG4saSl9LHR9LHRyaWdnZXJIYW5kbGVyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpOyJ1bmRlZmluZWQiIT10eXBlb2YgalF1ZXJ5JiYobj1qUXVlcnkodCkudHJpZ2dlckhhbmRsZXIoZSxyKSk7dmFyIGE9dC5fZXY7aWYoIWEpcmV0dXJuIG47dmFyIG8scz1hLl9ldmVudHNbZV07aWYoIXMpcmV0dXJuIG47ZnVuY3Rpb24gbCh0KXtyZXR1cm4gdC5saXN0ZW5lcj8oYS5yZW1vdmVMaXN0ZW5lcihlLHQubGlzdGVuZXIpLHQuZmlyZWQ/dm9pZCAwOih0LmZpcmVkPSEwLHQubGlzdGVuZXIuYXBwbHkoYSxbcl0pKSk6dC5hcHBseShhLFtyXSl9Zm9yKHM9QXJyYXkuaXNBcnJheShzKT9zOltzXSxvPTA7bzxzLmxlbmd0aC0xO28rKylsKHNbb10pO3JldHVybiBpPWwoc1tvXSksdm9pZCAwIT09bj9uOml9LHB1cmdlOmZ1bmN0aW9uKHQpe3JldHVybiBkZWxldGUgdC5fZXYsZGVsZXRlIHQub24sZGVsZXRlIHQub25jZSxkZWxldGUgdC5yZW1vdmVMaXN0ZW5lcixkZWxldGUgdC5yZW1vdmVBbGxMaXN0ZW5lcnMsZGVsZXRlIHQuZW1pdCxkZWxldGUgdC5fZXYsZGVsZXRlIHQuX2ludGVybmFsRXYsZGVsZXRlIHQuX2ludGVybmFsT24sZGVsZXRlIHQuX2ludGVybmFsT25jZSxkZWxldGUgdC5fcmVtb3ZlSW50ZXJuYWxMaXN0ZW5lcixkZWxldGUgdC5fcmVtb3ZlQWxsSW50ZXJuYWxMaXN0ZW5lcnMsdH19O2UuZXhwb3J0cz1pfSx7ZXZlbnRzOjIxMn1dLDY3MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2lzX3BsYWluX29iamVjdC5qcyIpLGk9QXJyYXkuaXNBcnJheTtmdW5jdGlvbiBhKHQsZSxyLG8pe3ZhciBzLGwsYyx1LGgsZixwPXRbMF0sZD10Lmxlbmd0aDtpZigyPT09ZCYmaShwKSYmaSh0WzFdKSYmMD09PXAubGVuZ3RoKXtpZihmdW5jdGlvbih0LGUpe3ZhciByLG47Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKyl7aWYobnVsbCE9PShuPXRbcl0pJiYib2JqZWN0Ij09dHlwZW9mIG4pcmV0dXJuITE7dm9pZCAwIT09biYmKGVbcl09bil9cmV0dXJuITB9KHRbMV0scCkpcmV0dXJuIHA7cC5zcGxpY2UoMCxwLmxlbmd0aCl9Zm9yKHZhciBnPTE7ZzxkO2crKylmb3IobCBpbiBzPXRbZ10pYz1wW2xdLHU9c1tsXSxvJiZpKHUpP3BbbF09dTplJiZ1JiYobih1KXx8KGg9aSh1KSkpPyhoPyhoPSExLGY9YyYmaShjKT9jOltdKTpmPWMmJm4oYyk/Yzp7fSxwW2xdPWEoW2YsdV0sZSxyLG8pKTooInVuZGVmaW5lZCIhPXR5cGVvZiB1fHxyKSYmKHBbbF09dSk7cmV0dXJuIHB9ci5leHRlbmRGbGF0PWZ1bmN0aW9uKCl7cmV0dXJuIGEoYXJndW1lbnRzLCExLCExLCExKX0sci5leHRlbmREZWVwPWZ1bmN0aW9uKCl7cmV0dXJuIGEoYXJndW1lbnRzLCEwLCExLCExKX0sci5leHRlbmREZWVwQWxsPWZ1bmN0aW9uKCl7cmV0dXJuIGEoYXJndW1lbnRzLCEwLCEwLCExKX0sci5leHRlbmREZWVwTm9BcnJheXM9ZnVuY3Rpb24oKXtyZXR1cm4gYShhcmd1bWVudHMsITAsITEsITApfX0seyIuL2lzX3BsYWluX29iamVjdC5qcyI6Njg2fV0sNjc0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9e30scj1bXSxuPTAsaT0wO2k8dC5sZW5ndGg7aSsrKXt2YXIgYT10W2ldOzEhPT1lW2FdJiYoZVthXT0xLHJbbisrXT1hKX1yZXR1cm4gcn19LHt9XSw2NzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtyZXR1cm4hMD09PXQudmlzaWJsZX1mdW5jdGlvbiBpKHQpe3JldHVybiEwPT09dFswXS50cmFjZS52aXNpYmxlfWUuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGUscj0oZT10LEFycmF5LmlzQXJyYXkoZSkmJkFycmF5LmlzQXJyYXkoZVswXSkmJmVbMF1bMF0mJmVbMF1bMF0udHJhY2U/aTpuKSxhPVtdLG89MDtvPHQubGVuZ3RoO28rKyl7dmFyIHM9dFtvXTtyKHMpJiZhLnB1c2gocyl9cmV0dXJuIGF9fSx7fV0sNjc2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImNvdW50cnktcmVnZXgiKSxpPXQoIi4uL2xpYiIpLGE9T2JqZWN0LmtleXMobiksbz17IklTTy0zIjppLmlkZW50aXR5LCJVU0Etc3RhdGVzIjppLmlkZW50aXR5LCJjb3VudHJ5IG5hbWVzIjpmdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPGEubGVuZ3RoO2UrKyl7dmFyIHI9YVtlXSxvPW5ldyBSZWdFeHAobltyXSk7aWYoby50ZXN0KHQudHJpbSgpLnRvTG93ZXJDYXNlKCkpKXJldHVybiByfXJldHVybiBpLmxvZygiVW5yZWNvZ25pemVkIGNvdW50cnkgbmFtZTogIit0KyIuIiksITF9fTtyLmxvY2F0aW9uVG9GZWF0dXJlPWZ1bmN0aW9uKHQsZSxyKXtpZighZXx8InN0cmluZyIhPXR5cGVvZiBlKXJldHVybiExO3ZhciBuPWZ1bmN0aW9uKHQsZSl7cmV0dXJuKDAsb1t0XSkoZSl9KHQsZSk7aWYobil7Zm9yKHZhciBhPTA7YTxyLmxlbmd0aDthKyspe3ZhciBzPXJbYV07aWYocy5pZD09PW4pcmV0dXJuIHN9aS5sb2coWyJMb2NhdGlvbiB3aXRoIGlkIixuLCJkb2VzIG5vdCBoYXZlIGEgbWF0Y2hpbmcgdG9wb2pzb24gZmVhdHVyZSBhdCB0aGlzIHJlc29sdXRpb24uIl0uam9pbigiICIpKX1yZXR1cm4hMX19LHsiLi4vbGliIjo2ODQsImNvdW50cnktcmVnZXgiOjEyMX1dLDY3NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNO3IuY2FsY1RyYWNlVG9MaW5lQ29vcmRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10WzBdLnRyYWNlLmNvbm5lY3RnYXBzLHI9W10saT1bXSxhPTA7YTx0Lmxlbmd0aDthKyspe3ZhciBvPXRbYV0ubG9ubGF0O29bMF0hPT1uP2kucHVzaChvKTohZSYmaS5sZW5ndGg+MCYmKHIucHVzaChpKSxpPVtdKX1yZXR1cm4gaS5sZW5ndGg+MCYmci5wdXNoKGkpLHJ9LHIubWFrZUxpbmU9ZnVuY3Rpb24odCl7cmV0dXJuIDE9PT10Lmxlbmd0aD97dHlwZToiTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6dFswXX06e3R5cGU6Ik11bHRpTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6dH19LHIubWFrZVBvbHlnb249ZnVuY3Rpb24odCl7aWYoMT09PXQubGVuZ3RoKXJldHVybnt0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczp0fTtmb3IodmFyIGU9bmV3IEFycmF5KHQubGVuZ3RoKSxyPTA7cjx0Lmxlbmd0aDtyKyspZVtyXT1bdFtyXV07cmV0dXJue3R5cGU6Ik11bHRpUG9seWdvbiIsY29vcmRpbmF0ZXM6ZX19LHIubWFrZUJsYW5rPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6IlBvaW50Iixjb29yZGluYXRlczpbXX19fSx7Ii4uL2NvbnN0YW50cy9udW1lcmljYWwiOjY2MX1dLDY3ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixpLGEsbz10KCIuL21vZCIpO2Z1bmN0aW9uIHModCxlLHIsbixpLGEsbyxzKXt2YXIgbD1yLXQsYz1pLXQsdT1vLWksaD1uLWUsZj1hLWUscD1zLWEsZD1sKnAtdSpoO2lmKDA9PT1kKXJldHVybiBudWxsO3ZhciBnPShjKnAtdSpmKS9kLG09KGMqaC1sKmYpL2Q7cmV0dXJuIG08MHx8bT4xfHxnPDB8fGc+MT9udWxsOnt4OnQrbCpnLHk6ZStoKmd9fWZ1bmN0aW9uIGwodCxlLHIsbixpKXt2YXIgYT1uKnQraSplO2lmKGE8MClyZXR1cm4gbipuK2kqaTtpZihhPnIpe3ZhciBvPW4tdCxzPWktZTtyZXR1cm4gbypvK3Mqc312YXIgbD1uKmUtaSp0O3JldHVybiBsKmwvcn1yLnNlZ21lbnRzSW50ZXJzZWN0PXMsci5zZWdtZW50RGlzdGFuY2U9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxjKXtpZihzKHQsZSxyLG4saSxhLG8sYykpcmV0dXJuIDA7dmFyIHU9ci10LGg9bi1lLGY9by1pLHA9Yy1hLGQ9dSp1K2gqaCxnPWYqZitwKnAsbT1NYXRoLm1pbihsKHUsaCxkLGktdCxhLWUpLGwodSxoLGQsby10LGMtZSksbChmLHAsZyx0LWksZS1hKSxsKGYscCxnLHItaSxuLWEpKTtyZXR1cm4gTWF0aC5zcXJ0KG0pfSxyLmdldFRleHRMb2NhdGlvbj1mdW5jdGlvbih0LGUscixzKXtpZih0PT09aSYmcz09PWF8fChuPXt9LGk9dCxhPXMpLG5bcl0pcmV0dXJuIG5bcl07dmFyIGw9dC5nZXRQb2ludEF0TGVuZ3RoKG8oci1zLzIsZSkpLGM9dC5nZXRQb2ludEF0TGVuZ3RoKG8ocitzLzIsZSkpLHU9TWF0aC5hdGFuKChjLnktbC55KS8oYy54LWwueCkpLGg9dC5nZXRQb2ludEF0TGVuZ3RoKG8ocixlKSksZj17eDooNCpoLngrbC54K2MueCkvNix5Oig0KmgueStsLnkrYy55KS82LHRoZXRhOnV9O3JldHVybiBuW3JdPWYsZn0sci5jbGVhckxvY2F0aW9uQ2FjaGU9ZnVuY3Rpb24oKXtpPW51bGx9LHIuZ2V0VmlzaWJsZVNlZ21lbnQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYT1lLmxlZnQsbz1lLnJpZ2h0LHM9ZS50b3AsbD1lLmJvdHRvbSxjPTAsdT10LmdldFRvdGFsTGVuZ3RoKCksaD11O2Z1bmN0aW9uIGYoZSl7dmFyIHI9dC5nZXRQb2ludEF0TGVuZ3RoKGUpOzA9PT1lP249cjplPT09dSYmKGk9cik7dmFyIGM9ci54PGE/YS1yLng6ci54Pm8/ci54LW86MCxoPXIueTxzP3Mtci55OnIueT5sP3IueS1sOjA7cmV0dXJuIE1hdGguc3FydChjKmMraCpoKX1mb3IodmFyIHA9ZihjKTtwOyl7aWYoKGMrPXArcik+aClyZXR1cm47cD1mKGMpfWZvcihwPWYoaCk7cDspe2lmKGM+KGgtPXArcikpcmV0dXJuO3A9ZihoKX1yZXR1cm57bWluOmMsbWF4OmgsbGVuOmgtYyx0b3RhbDp1LGlzQ2xvc2VkOjA9PT1jJiZoPT09dSYmTWF0aC5hYnMobi54LWkueCk8LjEmJk1hdGguYWJzKG4ueS1pLnkpPC4xfX0sci5maW5kUG9pbnRPblBhdGg9ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpLGEsbyxzPShuPW58fHt9KS5wYXRoTGVuZ3RofHx0LmdldFRvdGFsTGVuZ3RoKCksbD1uLnRvbGVyYW5jZXx8LjAwMSxjPW4uaXRlcmF0aW9uTGltaXR8fDMwLHU9dC5nZXRQb2ludEF0TGVuZ3RoKDApW3JdPnQuZ2V0UG9pbnRBdExlbmd0aChzKVtyXT8tMToxLGg9MCxmPTAscD1zO2g8Yzspe2lmKGk9KGYrcCkvMixvPShhPXQuZ2V0UG9pbnRBdExlbmd0aChpKSlbcl0tZSxNYXRoLmFicyhvKTxsKXJldHVybiBhO3Uqbz4wP3A9aTpmPWksaCsrfXJldHVybiBhfX0seyIuL21vZCI6NjkxfV0sNjc5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZTtpZigic3RyaW5nIj09dHlwZW9mIHQpe2lmKG51bGw9PT0oZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0KSkpdGhyb3cgbmV3IEVycm9yKCJObyBET00gZWxlbWVudCB3aXRoIGlkICciK3QrIicgZXhpc3RzIG9uIHRoZSBwYWdlLiIpO3JldHVybiBlfWlmKG51bGw9PXQpdGhyb3cgbmV3IEVycm9yKCJET00gZWxlbWVudCBwcm92aWRlZCBpcyBudWxsIG9yIHVuZGVmaW5lZCIpO3JldHVybiB0fX0se31dLDY4MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgidGlueWNvbG9yMiIpLGE9dCgiY29sb3Itbm9ybWFsaXplIiksbz10KCIuLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKSxzPXQoIi4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyIpLmRlZmF1bHRMaW5lLGw9dCgiLi9pc19hcnJheSIpLmlzQXJyYXlPclR5cGVkQXJyYXksYz1hKHMpLHU9MTtmdW5jdGlvbiBoKHQsZSl7dmFyIHI9dDtyZXR1cm4gclszXSo9ZSxyfWZ1bmN0aW9uIGYodCl7aWYobih0KSlyZXR1cm4gYzt2YXIgZT1hKHQpO3JldHVybiBlLmxlbmd0aD9lOmN9ZnVuY3Rpb24gcCh0KXtyZXR1cm4gbih0KT90OnV9ZS5leHBvcnRzPXtmb3JtYXRDb2xvcjpmdW5jdGlvbih0LGUscil7dmFyIG4saSxzLGQsZyxtPXQuY29sb3Isdj1sKG0pLHk9bChlKSx4PVtdO2lmKG49dm9pZCAwIT09dC5jb2xvcnNjYWxlP28ubWFrZUNvbG9yU2NhbGVGdW5jKG8uZXh0cmFjdFNjYWxlKHQuY29sb3JzY2FsZSx0LmNtaW4sdC5jbWF4KSk6ZixpPXY/ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09dFtlXT9jOmEobih0W2VdKSl9OmYscz15P2Z1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PXRbZV0/dTpwKHRbZV0pfTpwLHZ8fHkpZm9yKHZhciBiPTA7YjxyO2IrKylkPWkobSxiKSxnPXMoZSxiKSx4W2JdPWgoZCxnKTtlbHNlIHg9aChhKG0pLGUpO3JldHVybiB4fSxwYXJzZUNvbG9yU2NhbGU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9MSksdC5tYXAoZnVuY3Rpb24odCl7dmFyIHI9dFswXSxuPWkodFsxXSkudG9SZ2IoKTtyZXR1cm57aW5kZXg6cixyZ2I6W24ucixuLmcsbi5iLGVdfX0pfX19LHsiLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIjo1NTcsIi4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSI6NTczLCIuL2lzX2FycmF5Ijo2ODUsImNvbG9yLW5vcm1hbGl6ZSI6MTA3LCJmYXN0LWlzbnVtZXJpYyI6MjE0LHRpbnljb2xvcjI6NDk5fV0sNjgxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vaWRlbnRpdHkiKTtmdW5jdGlvbiBpKHQpe3JldHVyblt0XX1lLmV4cG9ydHM9e2tleUZ1bjpmdW5jdGlvbih0KXtyZXR1cm4gdC5rZXl9LHJlcGVhdDppLGRlc2NlbmQ6bix3cmFwOmksdW53cmFwOmZ1bmN0aW9uKHQpe3JldHVybiB0WzBdfX19LHsiLi9pZGVudGl0eSI6NjgzfV0sNjgyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInN1cGVyc2NyaXB0LXRleHQiKSxpPXQoIi4uL2NvbnN0YW50cy9zdHJpbmdfbWFwcGluZ3MiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIiIrZnVuY3Rpb24odCl7Zm9yKHZhciBlPWkuZW50aXR5VG9Vbmljb2RlLHI9MDsocj10LmluZGV4T2YoIiYiLHIpKT49MDspe3ZhciBuPXQuaW5kZXhPZigiOyIscik7aWYobjxyKXIrPTE7ZWxzZXt2YXIgYT1lW3Quc2xpY2UocisxLG4pXTt0PWE/dC5zbGljZSgwLHIpK2ErdC5zbGljZShuKzEpOnQuc2xpY2UoMCxyKSt0LnNsaWNlKG4rMSl9fXJldHVybiB0fShmdW5jdGlvbih0KXtyZXR1cm4gdC5yZXBsYWNlKC9cPC4qXD4vZywiIil9KGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wOyhlPXQuaW5kZXhPZigiPHN1cD4iLGUpKT49MDspe3ZhciByPXQuaW5kZXhPZigiPC9zdXA+IixlKTtpZihyPGUpYnJlYWs7dD10LnNsaWNlKDAsZSkrbih0LnNsaWNlKGUrNSxyKSkrdC5zbGljZShyKzYpfXJldHVybiB0fSh0LnJlcGxhY2UoL1w8YnJcPi9nLCJcbiIpKSkpfX0seyIuLi9jb25zdGFudHMvc3RyaW5nX21hcHBpbmdzIjo2NjIsInN1cGVyc2NyaXB0LXRleHQiOjQ5Mn1dLDY4MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHR9fSx7fV0sNjg0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCJmYXN0LWlzbnVtZXJpYyIpLGE9dCgiLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLG89YS5GUF9TQUZFLHM9YS5CQUROVU0sbD1lLmV4cG9ydHM9e307bC5uZXN0ZWRQcm9wZXJ0eT10KCIuL25lc3RlZF9wcm9wZXJ0eSIpLGwua2V5ZWRDb250YWluZXI9dCgiLi9rZXllZF9jb250YWluZXIiKSxsLnJlbGF0aXZlQXR0cj10KCIuL3JlbGF0aXZlX2F0dHIiKSxsLmlzUGxhaW5PYmplY3Q9dCgiLi9pc19wbGFpbl9vYmplY3QiKSxsLm1vZD10KCIuL21vZCIpLGwudG9Mb2dSYW5nZT10KCIuL3RvX2xvZ19yYW5nZSIpLGwucmVsaW5rUHJpdmF0ZUtleXM9dCgiLi9yZWxpbmtfcHJpdmF0ZSIpLGwuZW5zdXJlQXJyYXk9dCgiLi9lbnN1cmVfYXJyYXkiKTt2YXIgYz10KCIuL2lzX2FycmF5Iik7bC5pc1R5cGVkQXJyYXk9Yy5pc1R5cGVkQXJyYXksbC5pc0FycmF5T3JUeXBlZEFycmF5PWMuaXNBcnJheU9yVHlwZWRBcnJheSxsLmlzQXJyYXkxRD1jLmlzQXJyYXkxRDt2YXIgdT10KCIuL2NvZXJjZSIpO2wudmFsT2JqZWN0TWV0YT11LnZhbE9iamVjdE1ldGEsbC5jb2VyY2U9dS5jb2VyY2UsbC5jb2VyY2UyPXUuY29lcmNlMixsLmNvZXJjZUZvbnQ9dS5jb2VyY2VGb250LGwuY29lcmNlSG92ZXJpbmZvPXUuY29lcmNlSG92ZXJpbmZvLGwuY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eT11LmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHksbC52YWxpZGF0ZT11LnZhbGlkYXRlO3ZhciBoPXQoIi4vZGF0ZXMiKTtsLmRhdGVUaW1lMm1zPWguZGF0ZVRpbWUybXMsbC5pc0RhdGVUaW1lPWguaXNEYXRlVGltZSxsLm1zMkRhdGVUaW1lPWgubXMyRGF0ZVRpbWUsbC5tczJEYXRlVGltZUxvY2FsPWgubXMyRGF0ZVRpbWVMb2NhbCxsLmNsZWFuRGF0ZT1oLmNsZWFuRGF0ZSxsLmlzSlNEYXRlPWguaXNKU0RhdGUsbC5mb3JtYXREYXRlPWguZm9ybWF0RGF0ZSxsLmluY3JlbWVudE1vbnRoPWguaW5jcmVtZW50TW9udGgsbC5kYXRlVGljazA9aC5kYXRlVGljazAsbC5kZmx0UmFuZ2U9aC5kZmx0UmFuZ2UsbC5maW5kRXhhY3REYXRlcz1oLmZpbmRFeGFjdERhdGVzLGwuTUlOX01TPWguTUlOX01TLGwuTUFYX01TPWguTUFYX01TO3ZhciBmPXQoIi4vc2VhcmNoIik7bC5maW5kQmluPWYuZmluZEJpbixsLnNvcnRlckFzYz1mLnNvcnRlckFzYyxsLnNvcnRlckRlcz1mLnNvcnRlckRlcyxsLmRpc3RpbmN0VmFscz1mLmRpc3RpbmN0VmFscyxsLnJvdW5kVXA9Zi5yb3VuZFVwO3ZhciBwPXQoIi4vc3RhdHMiKTtsLmFnZ051bXM9cC5hZ2dOdW1zLGwubGVuPXAubGVuLGwubWVhbj1wLm1lYW4sbC5taWRSYW5nZT1wLm1pZFJhbmdlLGwudmFyaWFuY2U9cC52YXJpYW5jZSxsLnN0ZGV2PXAuc3RkZXYsbC5pbnRlcnA9cC5pbnRlcnA7dmFyIGQ9dCgiLi9tYXRyaXgiKTtsLmluaXQyZEFycmF5PWQuaW5pdDJkQXJyYXksbC50cmFuc3Bvc2VSYWdnZWQ9ZC50cmFuc3Bvc2VSYWdnZWQsbC5kb3Q9ZC5kb3QsbC50cmFuc2xhdGlvbk1hdHJpeD1kLnRyYW5zbGF0aW9uTWF0cml4LGwucm90YXRpb25NYXRyaXg9ZC5yb3RhdGlvbk1hdHJpeCxsLnJvdGF0aW9uWFlNYXRyaXg9ZC5yb3RhdGlvblhZTWF0cml4LGwuYXBwbHkyRFRyYW5zZm9ybT1kLmFwcGx5MkRUcmFuc2Zvcm0sbC5hcHBseTJEVHJhbnNmb3JtMj1kLmFwcGx5MkRUcmFuc2Zvcm0yO3ZhciBnPXQoIi4vYW5nbGVzIik7bC5kZWcycmFkPWcuZGVnMnJhZCxsLnJhZDJkZWc9Zy5yYWQyZGVnLGwud3JhcDM2MD1nLndyYXAzNjAsbC53cmFwMTgwPWcud3JhcDE4MDt2YXIgbT10KCIuL2dlb21ldHJ5MmQiKTtsLnNlZ21lbnRzSW50ZXJzZWN0PW0uc2VnbWVudHNJbnRlcnNlY3QsbC5zZWdtZW50RGlzdGFuY2U9bS5zZWdtZW50RGlzdGFuY2UsbC5nZXRUZXh0TG9jYXRpb249bS5nZXRUZXh0TG9jYXRpb24sbC5jbGVhckxvY2F0aW9uQ2FjaGU9bS5jbGVhckxvY2F0aW9uQ2FjaGUsbC5nZXRWaXNpYmxlU2VnbWVudD1tLmdldFZpc2libGVTZWdtZW50LGwuZmluZFBvaW50T25QYXRoPW0uZmluZFBvaW50T25QYXRoO3ZhciB2PXQoIi4vZXh0ZW5kIik7bC5leHRlbmRGbGF0PXYuZXh0ZW5kRmxhdCxsLmV4dGVuZERlZXA9di5leHRlbmREZWVwLGwuZXh0ZW5kRGVlcEFsbD12LmV4dGVuZERlZXBBbGwsbC5leHRlbmREZWVwTm9BcnJheXM9di5leHRlbmREZWVwTm9BcnJheXM7dmFyIHk9dCgiLi9sb2dnZXJzIik7bC5sb2c9eS5sb2csbC53YXJuPXkud2FybixsLmVycm9yPXkuZXJyb3I7dmFyIHg9dCgiLi9yZWdleCIpO2wuY291bnRlclJlZ2V4PXguY291bnRlcjt2YXIgYj10KCIuL3Rocm90dGxlIik7ZnVuY3Rpb24gXyh0KXt2YXIgZT17fTtmb3IodmFyIHIgaW4gdClmb3IodmFyIG49dFtyXSxpPTA7aTxuLmxlbmd0aDtpKyspZVtuW2ldXT0rcjtyZXR1cm4gZX1sLnRocm90dGxlPWIudGhyb3R0bGUsbC50aHJvdHRsZURvbmU9Yi5kb25lLGwuY2xlYXJUaHJvdHRsZT1iLmNsZWFyLGwuZ2V0R3JhcGhEaXY9dCgiLi9nZXRfZ3JhcGhfZGl2IiksbC5fPXQoIi4vbG9jYWxpemUiKSxsLm5vdGlmaWVyPXQoIi4vbm90aWZpZXIiKSxsLmZpbHRlclVuaXF1ZT10KCIuL2ZpbHRlcl91bmlxdWUiKSxsLmZpbHRlclZpc2libGU9dCgiLi9maWx0ZXJfdmlzaWJsZSIpLGwucHVzaFVuaXF1ZT10KCIuL3B1c2hfdW5pcXVlIiksbC5jbGVhbk51bWJlcj10KCIuL2NsZWFuX251bWJlciIpLGwuZW5zdXJlTnVtYmVyPWZ1bmN0aW9uKHQpe3JldHVybiBpKHQpPyh0PU51bWJlcih0KSk8LW98fHQ+bz9zOmkodCk/TnVtYmVyKHQpOnM6c30sbC5pc0luZGV4PWZ1bmN0aW9uKHQsZSl7cmV0dXJuISh2b2lkIDAhPT1lJiZ0Pj1lKSYmKGkodCkmJnQ+PTAmJnQlMT09MCl9LGwubm9vcD10KCIuL25vb3AiKSxsLmlkZW50aXR5PXQoIi4vaWRlbnRpdHkiKSxsLnN3YXBBdHRycz1mdW5jdGlvbih0LGUscixuKXtyfHwocj0ieCIpLG58fChuPSJ5Iik7Zm9yKHZhciBpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBhPWVbaV0sbz1sLm5lc3RlZFByb3BlcnR5KHQsYS5yZXBsYWNlKCI/IixyKSkscz1sLm5lc3RlZFByb3BlcnR5KHQsYS5yZXBsYWNlKCI/IixuKSksYz1vLmdldCgpO28uc2V0KHMuZ2V0KCkpLHMuc2V0KGMpfX0sbC5yYWlzZVRvVG9wPWZ1bmN0aW9uKHQpe3QucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0KX0sbC5jYW5jZWxUcmFuc2l0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiB0LnRyYW5zaXRpb24oKS5kdXJhdGlvbigwKX0sbC5jb25zdHJhaW49ZnVuY3Rpb24odCxlLHIpe3JldHVybiBlPnI/TWF0aC5tYXgocixNYXRoLm1pbihlLHQpKTpNYXRoLm1heChlLE1hdGgubWluKHIsdCkpfSxsLmJCb3hJbnRlcnNlY3Q9ZnVuY3Rpb24odCxlLHIpe3JldHVybiByPXJ8fDAsdC5sZWZ0PD1lLnJpZ2h0K3ImJmUubGVmdDw9dC5yaWdodCtyJiZ0LnRvcDw9ZS5ib3R0b20rciYmZS50b3A8PXQuYm90dG9tK3J9LGwuc2ltcGxlTWFwPWZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT10Lmxlbmd0aCxhPW5ldyBBcnJheShpKSxvPTA7bzxpO28rKylhW29dPWUodFtvXSxyLG4pO3JldHVybiBhfSxsLnJhbmRzdHI9ZnVuY3Rpb24gdChlLHIsbixpKXtpZihufHwobj0xNiksdm9pZCAwPT09ciYmKHI9MjQpLHI8PTApcmV0dXJuIjAiO3ZhciBhLG8scz1NYXRoLmxvZyhNYXRoLnBvdygyLHIpKS9NYXRoLmxvZyhuKSxjPSIiO2ZvcihhPTI7cz09PTEvMDthKj0yKXM9TWF0aC5sb2coTWF0aC5wb3coMixyL2EpKS9NYXRoLmxvZyhuKSphO3ZhciB1PXMtTWF0aC5mbG9vcihzKTtmb3IoYT0wO2E8TWF0aC5mbG9vcihzKTthKyspYz1NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbikudG9TdHJpbmcobikrYzt1JiYobz1NYXRoLnBvdyhuLHUpLGM9TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKm8pLnRvU3RyaW5nKG4pK2MpO3ZhciBoPXBhcnNlSW50KGMsbik7cmV0dXJuIGUmJmVbY118fGghPT0xLzAmJmg+PU1hdGgucG93KDIscik/aT4xMD8obC53YXJuKCJyYW5kc3RyIGZhaWxlZCB1bmlxdWVuZXNzIiksYyk6dChlLHIsbiwoaXx8MCkrMSk6Y30sbC5PcHRpb25Db250cm9sPWZ1bmN0aW9uKHQsZSl7dHx8KHQ9e30pLGV8fChlPSJvcHQiKTt2YXIgcj17b3B0aW9uTGlzdDpbXSxfbmV3b3B0aW9uOmZ1bmN0aW9uKG4pe25bZV09dCxyW24ubmFtZV09bixyLm9wdGlvbkxpc3QucHVzaChuKX19O3JldHVybiByWyJfIitlXT10LHJ9LGwuc21vb3RoPWZ1bmN0aW9uKHQsZSl7aWYoKGU9TWF0aC5yb3VuZChlKXx8MCk8MilyZXR1cm4gdDt2YXIgcixuLGksYSxvPXQubGVuZ3RoLHM9MipvLGw9MiplLTEsYz1uZXcgQXJyYXkobCksdT1uZXcgQXJyYXkobyk7Zm9yKHI9MDtyPGw7cisrKWNbcl09KDEtTWF0aC5jb3MoTWF0aC5QSSoocisxKS9lKSkvKDIqZSk7Zm9yKHI9MDtyPG87cisrKXtmb3IoYT0wLG49MDtuPGw7bisrKShpPXIrbisxLWUpPC1vP2ktPXMqTWF0aC5yb3VuZChpL3MpOmk+PXMmJihpLT1zKk1hdGguZmxvb3IoaS9zKSksaTwwP2k9LTEtaTppPj1vJiYoaT1zLTEtaSksYSs9dFtpXSpjW25dO3Vbcl09YX1yZXR1cm4gdX0sbC5zeW5jT3JBc3luYz1mdW5jdGlvbih0LGUscil7dmFyIG47ZnVuY3Rpb24gaSgpe3JldHVybiBsLnN5bmNPckFzeW5jKHQsZSxyKX1mb3IoO3QubGVuZ3RoOylpZigobj0oMCx0LnNwbGljZSgwLDEpWzBdKShlKSkmJm4udGhlbilyZXR1cm4gbi50aGVuKGkpLnRoZW4odm9pZCAwLGwucHJvbWlzZUVycm9yKTtyZXR1cm4gciYmcihlKX0sbC5zdHJpcFRyYWlsaW5nU2xhc2g9ZnVuY3Rpb24odCl7cmV0dXJuIi8iPT09dC5zdWJzdHIoLTEpP3Quc3Vic3RyKDAsdC5sZW5ndGgtMSk6dH0sbC5ub25lT3JBbGw9ZnVuY3Rpb24odCxlLHIpe2lmKHQpe3ZhciBuLGk9ITEsYT0hMDtmb3Iobj0wO248ci5sZW5ndGg7bisrKW51bGwhPXRbcltuXV0/aT0hMDphPSExO2lmKGkmJiFhKWZvcihuPTA7bjxyLmxlbmd0aDtuKyspdFtyW25dXT1lW3Jbbl1dfX0sbC5tZXJnZUFycmF5PWZ1bmN0aW9uKHQsZSxyKXtpZihsLmlzQXJyYXlPclR5cGVkQXJyYXkodCkpZm9yKHZhciBuPU1hdGgubWluKHQubGVuZ3RoLGUubGVuZ3RoKSxpPTA7aTxuO2krKyllW2ldW3JdPXRbaV19LGwuZmlsbEFycmF5PWZ1bmN0aW9uKHQsZSxyLG4pe2lmKG49bnx8bC5pZGVudGl0eSxsLmlzQXJyYXlPclR5cGVkQXJyYXkodCkpZm9yKHZhciBpPTA7aTxlLmxlbmd0aDtpKyspZVtpXVtyXT1uKHRbaV0pfSxsLmNhc3RPcHRpb249ZnVuY3Rpb24odCxlLHIsbil7bj1ufHxsLmlkZW50aXR5O3ZhciBpPWwubmVzdGVkUHJvcGVydHkodCxyKS5nZXQoKTtyZXR1cm4gbC5pc0FycmF5T3JUeXBlZEFycmF5KGkpP0FycmF5LmlzQXJyYXkoZSkmJmwuaXNBcnJheU9yVHlwZWRBcnJheShpW2VbMF1dKT9uKGlbZVswXV1bZVsxXV0pOm4oaVtlXSk6aX0sbC5leHRyYWN0T3B0aW9uPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKHIgaW4gdClyZXR1cm4gdFtyXTt2YXIgaT1sLm5lc3RlZFByb3BlcnR5KGUsbikuZ2V0KCk7cmV0dXJuIEFycmF5LmlzQXJyYXkoaSk/dm9pZCAwOml9LGwudGFnU2VsZWN0ZWQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYT1lLnNlbGVjdGVkcG9pbnRzLG89ZS5faW5kZXhUb1BvaW50cztvJiYobj1fKG8pKTtmb3IodmFyIHM9MDtzPGEubGVuZ3RoO3MrKyl7dmFyIGM9YVtzXTtpZihsLmlzSW5kZXgoYykpe3ZhciB1PW4/bltjXTpjLGg9cj9yW3VdOnU7dm9pZCAwIT09KGk9aCkmJmk8dC5sZW5ndGgmJih0W2hdLnNlbGVjdGVkPTEpfX19LGwuc2VsSW5kaWNlczJzZWxQb2ludHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5zZWxlY3RlZHBvaW50cyxyPXQuX2luZGV4VG9Qb2ludHM7aWYocil7Zm9yKHZhciBuPV8ociksaT1bXSxhPTA7YTxlLmxlbmd0aDthKyspe3ZhciBvPWVbYV07aWYobC5pc0luZGV4KG8pKXt2YXIgcz1uW29dO2wuaXNJbmRleChzKSYmaS5wdXNoKHMpfX1yZXR1cm4gaX1yZXR1cm4gZX0sbC5nZXRUYXJnZXRBcnJheT1mdW5jdGlvbih0LGUpe3ZhciByPWUudGFyZ2V0O2lmKCJzdHJpbmciPT10eXBlb2YgciYmcil7dmFyIG49bC5uZXN0ZWRQcm9wZXJ0eSh0LHIpLmdldCgpO3JldHVybiEhQXJyYXkuaXNBcnJheShuKSYmbn1yZXR1cm4hIUFycmF5LmlzQXJyYXkocikmJnJ9LGwubWluRXh0ZW5kPWZ1bmN0aW9uKHQsZSl7dmFyIHI9e307Im9iamVjdCIhPXR5cGVvZiBlJiYoZT17fSk7dmFyIG4saSxhLG89T2JqZWN0LmtleXModCk7Zm9yKG49MDtuPG8ubGVuZ3RoO24rKylhPXRbaT1vW25dXSwiXyIhPT1pLmNoYXJBdCgwKSYmImZ1bmN0aW9uIiE9dHlwZW9mIGEmJigibW9kdWxlIj09PWk/cltpXT1hOkFycmF5LmlzQXJyYXkoYSk/cltpXT1hLnNsaWNlKDAsMyk6cltpXT1hJiYib2JqZWN0Ij09dHlwZW9mIGE/bC5taW5FeHRlbmQodFtpXSxlW2ldKTphKTtmb3Iobz1PYmplY3Qua2V5cyhlKSxuPTA7bjxvLmxlbmd0aDtuKyspIm9iamVjdCI9PXR5cGVvZihhPWVbaT1vW25dXSkmJmkgaW4gciYmIm9iamVjdCI9PXR5cGVvZiByW2ldfHwocltpXT1hKTtyZXR1cm4gcn0sbC50aXRsZUNhc2U9ZnVuY3Rpb24odCl7cmV0dXJuIHQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrdC5zdWJzdHIoMSl9LGwuY29udGFpbnNBbnk9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKylpZigtMSE9PXQuaW5kZXhPZihlW3JdKSlyZXR1cm4hMDtyZXR1cm4hMX0sbC5pc1Bsb3REaXY9ZnVuY3Rpb24odCl7dmFyIGU9bi5zZWxlY3QodCk7cmV0dXJuIGUubm9kZSgpaW5zdGFuY2VvZiBIVE1MRWxlbWVudCYmZS5zaXplKCkmJmUuY2xhc3NlZCgianMtcGxvdGx5LXBsb3QiKX0sbC5yZW1vdmVFbGVtZW50PWZ1bmN0aW9uKHQpe3ZhciBlPXQmJnQucGFyZW50Tm9kZTtlJiZlLnJlbW92ZUNoaWxkKHQpfSxsLmFkZFN0eWxlUnVsZT1mdW5jdGlvbih0LGUpe2lmKCFsLnN0eWxlU2hlZXQpe3ZhciByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7ci5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiIikpLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQociksbC5zdHlsZVNoZWV0PXIuc2hlZXR9dmFyIG49bC5zdHlsZVNoZWV0O24uaW5zZXJ0UnVsZT9uLmluc2VydFJ1bGUodCsieyIrZSsifSIsMCk6bi5hZGRSdWxlP24uYWRkUnVsZSh0LGUsMCk6bC53YXJuKCJhZGRTdHlsZVJ1bGUgZmFpbGVkIil9LGwuaXNJRT1mdW5jdGlvbigpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93Lm5hdmlnYXRvci5tc1NhdmVCbG9ifSxsLmlzRDNTZWxlY3Rpb249ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LmNsYXNzZWR9LGwuZW5zdXJlU2luZ2xlPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXQuc2VsZWN0KGUrKHI/Ii4iK3I6IiIpKTtpZihpLnNpemUoKSlyZXR1cm4gaTt2YXIgYT10LmFwcGVuZChlKS5jbGFzc2VkKHIsITApO3JldHVybiBuJiZhLmNhbGwobiksYX0sbC5lbnN1cmVTaW5nbGVCeUlkPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXQuc2VsZWN0KGUrIiMiK3IpO2lmKGkuc2l6ZSgpKXJldHVybiBpO3ZhciBhPXQuYXBwZW5kKGUpLmF0dHIoImlkIixyKTtyZXR1cm4gbiYmYS5jYWxsKG4pLGF9LGwub2JqZWN0RnJvbVBhdGg9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsbj10LnNwbGl0KCIuIiksaT1yPXt9LGE9MDthPG4ubGVuZ3RoO2ErKyl7dmFyIG89blthXSxzPW51bGwsbD1uW2FdLm1hdGNoKC8oLiopXFsoWzAtOV0rKVxdLyk7bD8obz1sWzFdLHM9bFsyXSxyPXJbb109W10sYT09PW4ubGVuZ3RoLTE/cltzXT1lOnJbc109e30scj1yW3NdKTooYT09PW4ubGVuZ3RoLTE/cltvXT1lOnJbb109e30scj1yW29dKX1yZXR1cm4gaX07dmFyIHc9L14oW15cW1wuXSspXC4oLispPy8saz0vXihbXlwuXSspXFsoWzAtOV0rKVxdKFwuKT8oLispPy87bC5leHBhbmRPYmplY3RQYXRocz1mdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhLG8scztpZigib2JqZWN0Ij09dHlwZW9mIHQmJiFBcnJheS5pc0FycmF5KHQpKWZvcihyIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShyKSYmKChlPXIubWF0Y2godykpPyhpPXRbcl0sbj1lWzFdLGRlbGV0ZSB0W3JdLHRbbl09bC5leHRlbmREZWVwTm9BcnJheXModFtuXXx8e30sbC5vYmplY3RGcm9tUGF0aChyLGwuZXhwYW5kT2JqZWN0UGF0aHMoaSkpW25dKSk6KGU9ci5tYXRjaChrKSk/KGk9dFtyXSxuPWVbMV0sYT1wYXJzZUludChlWzJdKSxkZWxldGUgdFtyXSx0W25dPXRbbl18fFtdLCIuIj09PWVbM10/KHM9ZVs0XSxvPXRbbl1bYV09dFtuXVthXXx8e30sbC5leHRlbmREZWVwTm9BcnJheXMobyxsLm9iamVjdEZyb21QYXRoKHMsbC5leHBhbmRPYmplY3RQYXRocyhpKSkpKTp0W25dW2FdPWwuZXhwYW5kT2JqZWN0UGF0aHMoaSkpOnRbcl09bC5leHBhbmRPYmplY3RQYXRocyh0W3JdKSk7cmV0dXJuIHR9LGwubnVtU2VwYXJhdGU9ZnVuY3Rpb24odCxlLHIpe2lmKHJ8fChyPSExKSwic3RyaW5nIiE9dHlwZW9mIGV8fDA9PT1lLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIlNlcGFyYXRvciBzdHJpbmcgcmVxdWlyZWQgZm9yIGZvcm1hdHRpbmchIik7Im51bWJlciI9PXR5cGVvZiB0JiYodD1TdHJpbmcodCkpO3ZhciBuPS8oXGQrKShcZHszfSkvLGk9ZS5jaGFyQXQoMCksYT1lLmNoYXJBdCgxKSxvPXQuc3BsaXQoIi4iKSxzPW9bMF0sbD1vLmxlbmd0aD4xP2krb1sxXToiIjtpZihhJiYoby5sZW5ndGg+MXx8cy5sZW5ndGg+NHx8cikpZm9yKDtuLnRlc3Qocyk7KXM9cy5yZXBsYWNlKG4sIiQxIithKyIkMiIpO3JldHVybiBzK2x9O3ZhciBNPS8leyhbXlxzJXt9XSopfS9nLEE9L15cdyokLztsLnRlbXBsYXRlU3RyaW5nPWZ1bmN0aW9uKHQsZSl7dmFyIHI9e307cmV0dXJuIHQucmVwbGFjZShNLGZ1bmN0aW9uKHQsbil7cmV0dXJuIEEudGVzdChuKT9lW25dfHwiIjoocltuXT1yW25dfHxsLm5lc3RlZFByb3BlcnR5KGUsbikuZ2V0LHJbbl0oKXx8IiIpfSl9O2wuc3VicGxvdFNvcnQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9TWF0aC5taW4odC5sZW5ndGgsZS5sZW5ndGgpKzEsbj0wLGk9MCxhPTA7YTxyO2ErKyl7dmFyIG89dC5jaGFyQ29kZUF0KGEpfHwwLHM9ZS5jaGFyQ29kZUF0KGEpfHwwLGw9bz49NDgmJm88PTU3LGM9cz49NDgmJnM8PTU3O2lmKGwmJihuPTEwKm4rby00OCksYyYmKGk9MTAqaStzLTQ4KSwhbHx8IWMpe2lmKG4hPT1pKXJldHVybiBuLWk7aWYobyE9PXMpcmV0dXJuIG8tc319cmV0dXJuIGktbn07dmFyIFQ9MmU5O2wuc2VlZFBzZXVkb1JhbmRvbT1mdW5jdGlvbigpe1Q9MmU5fSxsLnBzZXVkb1JhbmRvbT1mdW5jdGlvbigpe3ZhciB0PVQ7cmV0dXJuIFQ9KDY5MDY5KlQrMSklNDI5NDk2NzI5NixNYXRoLmFicyhULXQpPDQyOTQ5NjcyOT9sLnBzZXVkb1JhbmRvbSgpOlQvNDI5NDk2NzI5Nn19LHsiLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NjYxLCIuL2FuZ2xlcyI6NjY2LCIuL2NsZWFuX251bWJlciI6NjY3LCIuL2NvZXJjZSI6NjY5LCIuL2RhdGVzIjo2NzAsIi4vZW5zdXJlX2FycmF5Ijo2NzEsIi4vZXh0ZW5kIjo2NzMsIi4vZmlsdGVyX3VuaXF1ZSI6Njc0LCIuL2ZpbHRlcl92aXNpYmxlIjo2NzUsIi4vZ2VvbWV0cnkyZCI6Njc4LCIuL2dldF9ncmFwaF9kaXYiOjY3OSwiLi9pZGVudGl0eSI6NjgzLCIuL2lzX2FycmF5Ijo2ODUsIi4vaXNfcGxhaW5fb2JqZWN0Ijo2ODYsIi4va2V5ZWRfY29udGFpbmVyIjo2ODcsIi4vbG9jYWxpemUiOjY4OCwiLi9sb2dnZXJzIjo2ODksIi4vbWF0cml4Ijo2OTAsIi4vbW9kIjo2OTEsIi4vbmVzdGVkX3Byb3BlcnR5Ijo2OTIsIi4vbm9vcCI6NjkzLCIuL25vdGlmaWVyIjo2OTQsIi4vcHVzaF91bmlxdWUiOjY5OCwiLi9yZWdleCI6NzAwLCIuL3JlbGF0aXZlX2F0dHIiOjcwMSwiLi9yZWxpbmtfcHJpdmF0ZSI6NzAyLCIuL3NlYXJjaCI6NzAzLCIuL3N0YXRzIjo3MDYsIi4vdGhyb3R0bGUiOjcwOSwiLi90b19sb2dfcmFuZ2UiOjcxMCxkMzoxNDcsImZhc3QtaXNudW1lcmljIjoyMTR9XSw2ODU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49InVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmQXJyYXlCdWZmZXIuaXNWaWV3P0FycmF5QnVmZmVyOntpc1ZpZXc6ZnVuY3Rpb24oKXtyZXR1cm4hMX19LGk9InVuZGVmaW5lZCI9PXR5cGVvZiBEYXRhVmlldz9mdW5jdGlvbigpe306RGF0YVZpZXc7ZnVuY3Rpb24gYSh0KXtyZXR1cm4gbi5pc1ZpZXcodCkmJiEodCBpbnN0YW5jZW9mIGkpfWZ1bmN0aW9uIG8odCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCl8fGEodCl9ZS5leHBvcnRzPXtpc1R5cGVkQXJyYXk6YSxpc0FycmF5T3JUeXBlZEFycmF5Om8saXNBcnJheTFEOmZ1bmN0aW9uKHQpe3JldHVybiFvKHRbMF0pfX19LHt9XSw2ODY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB3aW5kb3cmJndpbmRvdy5wcm9jZXNzJiZ3aW5kb3cucHJvY2Vzcy52ZXJzaW9ucz8iW29iamVjdCBPYmplY3RdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KToiW29iamVjdCBPYmplY3RdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KSYmT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpPT09T2JqZWN0LnByb3RvdHlwZX19LHt9XSw2ODc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9uZXN0ZWRfcHJvcGVydHkiKSxpPS9eXHcqJC87ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvLHMsbDtyPXJ8fCJuYW1lIixhPWF8fCJ2YWx1ZSI7dmFyIGM9e307ZSYmZS5sZW5ndGg/KGw9bih0LGUpLHM9bC5nZXQoKSk6cz10LGU9ZXx8IiI7dmFyIHU9e307aWYocylmb3Iobz0wO288cy5sZW5ndGg7bysrKXVbc1tvXVtyXV09bzt2YXIgaD1pLnRlc3QoYSksZj17c2V0OmZ1bmN0aW9uKHQsZSl7dmFyIGk9bnVsbD09PWU/NDowO2lmKCFzKXtpZighbHx8ND09PWkpcmV0dXJuO3M9W10sbC5zZXQocyl9dmFyIG89dVt0XTtpZih2b2lkIDA9PT1vKXtpZig0PT09aSlyZXR1cm47aXw9MyxvPXMubGVuZ3RoLHVbdF09b31lbHNlIGUhPT0oaD9zW29dW2FdOm4oc1tvXSxhKS5nZXQoKSkmJihpfD0yKTt2YXIgcD1zW29dPXNbb118fHt9O3JldHVybiBwW3JdPXQsaD9wW2FdPWU6bihwLGEpLnNldChlKSxudWxsIT09ZSYmKGkmPS01KSxjW29dPWNbb118aSxmfSxnZXQ6ZnVuY3Rpb24odCl7aWYocyl7dmFyIGU9dVt0XTtyZXR1cm4gdm9pZCAwPT09ZT92b2lkIDA6aD9zW2VdW2FdOm4oc1tlXSxhKS5nZXQoKX19LHJlbmFtZTpmdW5jdGlvbih0LGUpe3ZhciBuPXVbdF07cmV0dXJuIHZvaWQgMD09PW4/ZjooY1tuXT0xfGNbbl0sdVtlXT1uLGRlbGV0ZSB1W3RdLHNbbl1bcl09ZSxmKX0scmVtb3ZlOmZ1bmN0aW9uKHQpe3ZhciBlPXVbdF07aWYodm9pZCAwPT09ZSlyZXR1cm4gZjt2YXIgaT1zW2VdO2lmKE9iamVjdC5rZXlzKGkpLmxlbmd0aD4yKXJldHVybiBjW2VdPTJ8Y1tlXSxmLnNldCh0LG51bGwpO2lmKGgpe2ZvcihvPWU7bzxzLmxlbmd0aDtvKyspY1tvXT0zfGNbb107Zm9yKG89ZTtvPHMubGVuZ3RoO28rKyl1W3Nbb11bcl1dLS07cy5zcGxpY2UoZSwxKSxkZWxldGUgdVt0XX1lbHNlIG4oaSxhKS5zZXQobnVsbCksY1tlXT02fGNbZV07cmV0dXJuIGZ9LGNvbnN0cnVjdFVwZGF0ZTpmdW5jdGlvbigpe2Zvcih2YXIgdCxpLG89e30sbD1PYmplY3Qua2V5cyhjKSx1PTA7dTxsLmxlbmd0aDt1KyspaT1sW3VdLHQ9ZSsiWyIraSsiXSIsc1tpXT8oMSZjW2ldJiYob1t0KyIuIityXT1zW2ldW3JdKSwyJmNbaV0mJihvW3QrIi4iK2FdPWg/NCZjW2ldP251bGw6c1tpXVthXTo0JmNbaV0/bnVsbDpuKHNbaV0sYSkuZ2V0KCkpKTpvW3RdPW51bGw7cmV0dXJuIG99fTtyZXR1cm4gZn19LHsiLi9uZXN0ZWRfcHJvcGVydHkiOjY5Mn1dLDY4ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9yZWdpc3RyeSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Ll9jb250ZXh0LmxvY2FsZSxpPTA7aTwyO2krKyl7Zm9yKHZhciBhPXQuX2NvbnRleHQubG9jYWxlcyxvPTA7bzwyO28rKyl7dmFyIHM9KGFbcl18fHt9KS5kaWN0aW9uYXJ5O2lmKHMpe3ZhciBsPXNbZV07aWYobClyZXR1cm4gbH1hPW4ubG9jYWxlUmVnaXN0cnl9dmFyIGM9ci5zcGxpdCgiLSIpWzBdO2lmKGM9PT1yKWJyZWFrO3I9Y31yZXR1cm4gZX19LHsiLi4vcmVnaXN0cnkiOjgxN31dLDY4OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9wbG90X2FwaS9wbG90X2NvbmZpZyIpLGk9ZS5leHBvcnRzPXt9O2Z1bmN0aW9uIGEodCxlKXtpZih0LmFwcGx5KXQuYXBwbHkodCxlKTtlbHNlIGZvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXQoZVtyXSl9aS5sb2c9ZnVuY3Rpb24oKXtpZihuLmxvZ2dpbmc+MSl7Zm9yKHZhciB0PVsiTE9HOiJdLGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXQucHVzaChhcmd1bWVudHNbZV0pO2EoY29uc29sZS50cmFjZXx8Y29uc29sZS5sb2csdCl9fSxpLndhcm49ZnVuY3Rpb24oKXtpZihuLmxvZ2dpbmc+MCl7Zm9yKHZhciB0PVsiV0FSTjoiXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0LnB1c2goYXJndW1lbnRzW2VdKTthKGNvbnNvbGUudHJhY2V8fGNvbnNvbGUubG9nLHQpfX0saS5lcnJvcj1mdW5jdGlvbigpe2lmKG4ubG9nZ2luZz4wKXtmb3IodmFyIHQ9WyJFUlJPUjoiXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0LnB1c2goYXJndW1lbnRzW2VdKTthKGNvbnNvbGUuZXJyb3IsdCl9fX0seyIuLi9wbG90X2FwaS9wbG90X2NvbmZpZyI6NzIwfV0sNjkwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3IuaW5pdDJkQXJyYXk9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KHQpLG49MDtuPHQ7bisrKXJbbl09bmV3IEFycmF5KGUpO3JldHVybiByfSxyLnRyYW5zcG9zZVJhZ2dlZD1mdW5jdGlvbih0KXt2YXIgZSxyLG49MCxpPXQubGVuZ3RoO2ZvcihlPTA7ZTxpO2UrKyluPU1hdGgubWF4KG4sdFtlXS5sZW5ndGgpO3ZhciBhPW5ldyBBcnJheShuKTtmb3IoZT0wO2U8bjtlKyspZm9yKGFbZV09bmV3IEFycmF5KGkpLHI9MDtyPGk7cisrKWFbZV1bcl09dFtyXVtlXTtyZXR1cm4gYX0sci5kb3Q9ZnVuY3Rpb24odCxlKXtpZighdC5sZW5ndGh8fCFlLmxlbmd0aHx8dC5sZW5ndGghPT1lLmxlbmd0aClyZXR1cm4gbnVsbDt2YXIgbixpLGE9dC5sZW5ndGg7aWYodFswXS5sZW5ndGgpZm9yKG49bmV3IEFycmF5KGEpLGk9MDtpPGE7aSsrKW5baV09ci5kb3QodFtpXSxlKTtlbHNlIGlmKGVbMF0ubGVuZ3RoKXt2YXIgbz1yLnRyYW5zcG9zZVJhZ2dlZChlKTtmb3Iobj1uZXcgQXJyYXkoby5sZW5ndGgpLGk9MDtpPG8ubGVuZ3RoO2krKyluW2ldPXIuZG90KHQsb1tpXSl9ZWxzZSBmb3Iobj0wLGk9MDtpPGE7aSsrKW4rPXRbaV0qZVtpXTtyZXR1cm4gbn0sci50cmFuc2xhdGlvbk1hdHJpeD1mdW5jdGlvbih0LGUpe3JldHVybltbMSwwLHRdLFswLDEsZV0sWzAsMCwxXV19LHIucm90YXRpb25NYXRyaXg9ZnVuY3Rpb24odCl7dmFyIGU9dCpNYXRoLlBJLzE4MDtyZXR1cm5bW01hdGguY29zKGUpLC1NYXRoLnNpbihlKSwwXSxbTWF0aC5zaW4oZSksTWF0aC5jb3MoZSksMF0sWzAsMCwxXV19LHIucm90YXRpb25YWU1hdHJpeD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHIuZG90KHIuZG90KHIudHJhbnNsYXRpb25NYXRyaXgoZSxuKSxyLnJvdGF0aW9uTWF0cml4KHQpKSxyLnRyYW5zbGF0aW9uTWF0cml4KC1lLC1uKSl9LHIuYXBwbHkyRFRyYW5zZm9ybT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHM7Mz09PWUubGVuZ3RoJiYoZT1lWzBdKTt2YXIgbj0xPT09YXJndW1lbnRzLmxlbmd0aD9lWzBdOltlWzBdLGVbMV1dO3JldHVybiByLmRvdCh0LFtuWzBdLG5bMV0sMV0pLnNsaWNlKDAsMil9fSxyLmFwcGx5MkRUcmFuc2Zvcm0yPWZ1bmN0aW9uKHQpe3ZhciBlPXIuYXBwbHkyRFRyYW5zZm9ybSh0KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUodC5zbGljZSgwLDIpKS5jb25jYXQoZSh0LnNsaWNlKDIsNCkpKX19fSx7fV0sNjkxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQlZTtyZXR1cm4gcjwwP3IrZTpyfX0se31dLDY5MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi9pc19hcnJheSIpLmlzQXJyYXlPclR5cGVkQXJyYXk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYobihlKSllPVN0cmluZyhlKTtlbHNlIGlmKCJzdHJpbmciIT10eXBlb2YgZXx8IlstMV0iPT09ZS5zdWJzdHIoZS5sZW5ndGgtNCkpdGhyb3ciYmFkIHByb3BlcnR5IHN0cmluZyI7Zm9yKHZhciByLGEsbyxsPTAsYz1lLnNwbGl0KCIuIik7bDxjLmxlbmd0aDspe2lmKHI9U3RyaW5nKGNbbF0pLm1hdGNoKC9eKFteXFtcXV0qKSgoXFtcLT9bMC05XSpcXSkrKSQvKSl7aWYoclsxXSljW2xdPXJbMV07ZWxzZXtpZigwIT09bCl0aHJvdyJiYWQgcHJvcGVydHkgc3RyaW5nIjtjLnNwbGljZSgwLDEpfWZvcihhPXJbMl0uc3Vic3RyKDEsclsyXS5sZW5ndGgtMikuc3BsaXQoIl1bIiksbz0wO288YS5sZW5ndGg7bysrKWwrKyxjLnNwbGljZShsLDAsTnVtYmVyKGFbb10pKX1sKyt9cmV0dXJuIm9iamVjdCIhPXR5cGVvZiB0P2Z1bmN0aW9uKHQsZSxyKXtyZXR1cm57c2V0OmZ1bmN0aW9uKCl7dGhyb3ciYmFkIGNvbnRhaW5lciJ9LGdldDpmdW5jdGlvbigpe30sYXN0cjplLHBhcnRzOnIsb2JqOnR9fSh0LGUsYyk6e3NldDpzKHQsYyxlKSxnZXQ6ZnVuY3Rpb24gdChlLHIpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuLGEsbyxzLGwsYz1lO2ZvcihzPTA7czxyLmxlbmd0aC0xO3MrKyl7aWYoLTE9PT0obj1yW3NdKSl7Zm9yKGE9ITAsbz1bXSxsPTA7bDxjLmxlbmd0aDtsKyspb1tsXT10KGNbbF0sci5zbGljZShzKzEpKSgpLG9bbF0hPT1vWzBdJiYoYT0hMSk7cmV0dXJuIGE/b1swXTpvfWlmKCJudW1iZXIiPT10eXBlb2YgbiYmIWkoYykpcmV0dXJuO2lmKCJvYmplY3QiIT10eXBlb2YoYz1jW25dKXx8bnVsbD09PWMpcmV0dXJufWlmKCJvYmplY3QiPT10eXBlb2YgYyYmbnVsbCE9PWMmJm51bGwhPT0obz1jW3Jbc11dKSlyZXR1cm4gb319KHQsYyksYXN0cjplLHBhcnRzOmMsb2JqOnR9fTt2YXIgYT0vKF58XC4pYXJnc1xbLztmdW5jdGlvbiBvKHQsZSl7cmV0dXJuIHZvaWQgMD09PXR8fG51bGw9PT10JiYhZS5tYXRjaChhKX1mdW5jdGlvbiBzKHQsZSxyKXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGEscyxoPXQsZj0iIixwPVtbdCxmXV0sZD1vKG4scik7Zm9yKHM9MDtzPGUubGVuZ3RoLTE7cysrKXtpZigibnVtYmVyIj09dHlwZW9mKGE9ZVtzXSkmJiFpKGgpKXRocm93ImFycmF5IGluZGV4IGJ1dCBjb250YWluZXIgaXMgbm90IGFuIGFycmF5IjtpZigtMT09PWEpe2lmKGQ9IWMoaCxlLnNsaWNlKHMrMSksbixyKSlicmVhaztyZXR1cm59aWYoIXUoaCxhLGVbcysxXSxkKSlicmVhaztpZigib2JqZWN0IiE9dHlwZW9mKGg9aFthXSl8fG51bGw9PT1oKXRocm93ImNvbnRhaW5lciBpcyBub3QgYW4gb2JqZWN0IjtmPWwoZixhKSxwLnB1c2goW2gsZl0pfWlmKGQpe2lmKHM9PT1lLmxlbmd0aC0xJiYoZGVsZXRlIGhbZVtzXV0sQXJyYXkuaXNBcnJheShoKSYmK2Vbc109PWgubGVuZ3RoLTEpKWZvcig7aC5sZW5ndGgmJnZvaWQgMD09PWhbaC5sZW5ndGgtMV07KWgucG9wKCl9ZWxzZSBoW2Vbc11dPW59fWZ1bmN0aW9uIGwodCxlKXt2YXIgcj1lO3JldHVybiBuKGUpP3I9IlsiK2UrIl0iOnQmJihyPSIuIitlKSx0K3J9ZnVuY3Rpb24gYyh0LGUscixuKXt2YXIgYSxsPWkociksYz0hMCxoPXIsZj1uLnJlcGxhY2UoIi0xIiwwKSxwPSFsJiZvKHIsZiksZD1lWzBdO2ZvcihhPTA7YTx0Lmxlbmd0aDthKyspZj1uLnJlcGxhY2UoIi0xIixhKSxsJiYocD1vKGg9clthJXIubGVuZ3RoXSxmKSkscCYmKGM9ITEpLHUodCxhLGQscCkmJnModFthXSxlLG4ucmVwbGFjZSgiLTEiLGEpKShoKTtyZXR1cm4gY31mdW5jdGlvbiB1KHQsZSxyLG4pe2lmKHZvaWQgMD09PXRbZV0pe2lmKG4pcmV0dXJuITE7dFtlXT0ibnVtYmVyIj09dHlwZW9mIHI/W106e319cmV0dXJuITB9fSx7Ii4vaXNfYXJyYXkiOjY4NSwiZmFzdC1pc251bWVyaWMiOjIxNH1dLDY5MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt9fSx7fV0sNjk0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCJmYXN0LWlzbnVtZXJpYyIpLGE9W107ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoLTE9PT1hLmluZGV4T2YodCkpe2EucHVzaCh0KTt2YXIgcj0xZTM7aShlKT9yPWU6ImxvbmciPT09ZSYmKHI9M2UzKTt2YXIgbz1uLnNlbGVjdCgiYm9keSIpLnNlbGVjdEFsbCgiLnBsb3RseS1ub3RpZmllciIpLmRhdGEoWzBdKTtvLmVudGVyKCkuYXBwZW5kKCJkaXYiKS5jbGFzc2VkKCJwbG90bHktbm90aWZpZXIiLCEwKSxvLnNlbGVjdEFsbCgiLm5vdGlmaWVyLW5vdGUiKS5kYXRhKGEpLmVudGVyKCkuYXBwZW5kKCJkaXYiKS5jbGFzc2VkKCJub3RpZmllci1ub3RlIiwhMCkuc3R5bGUoIm9wYWNpdHkiLDApLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9bi5zZWxlY3QodGhpcyk7ZS5hcHBlbmQoImJ1dHRvbiIpLmNsYXNzZWQoIm5vdGlmaWVyLWNsb3NlIiwhMCkuaHRtbCgiJnRpbWVzOyIpLm9uKCJjbGljayIsZnVuY3Rpb24oKXtlLnRyYW5zaXRpb24oKS5jYWxsKHMpfSk7Zm9yKHZhciBpPWUuYXBwZW5kKCJwIiksYT10LnNwbGl0KC88YnJccypcLz8+L2cpLG89MDtvPGEubGVuZ3RoO28rKylvJiZpLmFwcGVuZCgiYnIiKSxpLmFwcGVuZCgic3BhbiIpLnRleHQoYVtvXSk7ZS50cmFuc2l0aW9uKCkuZHVyYXRpb24oNzAwKS5zdHlsZSgib3BhY2l0eSIsMSkudHJhbnNpdGlvbigpLmRlbGF5KHIpLmNhbGwocyl9KX1mdW5jdGlvbiBzKHQpe3QuZHVyYXRpb24oNzAwKS5zdHlsZSgib3BhY2l0eSIsMCkuZWFjaCgiZW5kIixmdW5jdGlvbih0KXt2YXIgZT1hLmluZGV4T2YodCk7LTEhPT1lJiZhLnNwbGljZShlLDEpLG4uc2VsZWN0KHRoaXMpLnJlbW92ZSgpfSl9fX0se2QzOjE0NywiZmFzdC1pc251bWVyaWMiOjIxNH1dLDY5NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL3NldGN1cnNvciIpLGk9ImRhdGEtc2F2ZWRjdXJzb3IiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuYXR0cihpKTtpZihlKXtpZighcil7Zm9yKHZhciBhPSh0LmF0dHIoImNsYXNzIil8fCIiKS5zcGxpdCgiICIpLG89MDtvPGEubGVuZ3RoO28rKyl7dmFyIHM9YVtvXTswPT09cy5pbmRleE9mKCJjdXJzb3ItIikmJnQuYXR0cihpLHMuc3Vic3RyKDcpKS5jbGFzc2VkKHMsITEpfXQuYXR0cihpKXx8dC5hdHRyKGksIiEhIil9bih0LGUpfWVsc2UgciYmKHQuYXR0cihpLG51bGwpLCIhISI9PT1yP24odCk6bih0LHIpKX19LHsiLi9zZXRjdXJzb3IiOjcwNH1dLDY5NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL21hdHJpeCIpLmRvdCxpPXQoIi4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU0sYT1lLmV4cG9ydHM9e307YS50ZXN0ZXI9ZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0WzBdWzBdKSlyZXR1cm4gYS5tdWx0aXRlc3Rlcih0KTt2YXIgZSxyPXQuc2xpY2UoKSxuPXJbMF1bMF0sbz1uLHM9clswXVsxXSxsPXM7Zm9yKHIucHVzaChyWzBdKSxlPTE7ZTxyLmxlbmd0aDtlKyspbj1NYXRoLm1pbihuLHJbZV1bMF0pLG89TWF0aC5tYXgobyxyW2VdWzBdKSxzPU1hdGgubWluKHMscltlXVsxXSksbD1NYXRoLm1heChsLHJbZV1bMV0pO3ZhciBjLHU9ITE7NT09PXIubGVuZ3RoJiYoclswXVswXT09PXJbMV1bMF0/clsyXVswXT09PXJbM11bMF0mJnJbMF1bMV09PT1yWzNdWzFdJiZyWzFdWzFdPT09clsyXVsxXSYmKHU9ITAsYz1mdW5jdGlvbih0KXtyZXR1cm4gdFswXT09PXJbMF1bMF19KTpyWzBdWzFdPT09clsxXVsxXSYmclsyXVsxXT09PXJbM11bMV0mJnJbMF1bMF09PT1yWzNdWzBdJiZyWzFdWzBdPT09clsyXVswXSYmKHU9ITAsYz1mdW5jdGlvbih0KXtyZXR1cm4gdFsxXT09PXJbMF1bMV19KSk7dmFyIGg9ITAsZj1yWzBdO2ZvcihlPTE7ZTxyLmxlbmd0aDtlKyspaWYoZlswXSE9PXJbZV1bMF18fGZbMV0hPT1yW2VdWzFdKXtoPSExO2JyZWFrfXJldHVybnt4bWluOm4seG1heDpvLHltaW46cyx5bWF4OmwscHRzOnIsY29udGFpbnM6dT9mdW5jdGlvbih0LGUpe3ZhciByPXRbMF0sYT10WzFdO3JldHVybiEocj09PWl8fHI8bnx8cj5vfHxhPT09aXx8YTxzfHxhPmx8fGUmJmModCkpfTpmdW5jdGlvbih0LGUpe3ZhciBhPXRbMF0sYz10WzFdO2lmKGE9PT1pfHxhPG58fGE+b3x8Yz09PWl8fGM8c3x8Yz5sKXJldHVybiExO3ZhciB1LGgsZixwLGQsZz1yLmxlbmd0aCxtPXJbMF1bMF0sdj1yWzBdWzFdLHk9MDtmb3IodT0xO3U8Zzt1KyspaWYoaD1tLGY9dixtPXJbdV1bMF0sdj1yW3VdWzFdLCEoYTwocD1NYXRoLm1pbihoLG0pKXx8YT5NYXRoLm1heChoLG0pfHxjPk1hdGgubWF4KGYsdikpKWlmKGM8TWF0aC5taW4oZix2KSlhIT09cCYmeSsrO2Vsc2V7aWYoYz09PShkPW09PT1oP2M6ZisoYS1oKSoodi1mKS8obS1oKSkpcmV0dXJuIDEhPT11fHwhZTtjPD1kJiZhIT09cCYmeSsrfXJldHVybiB5JTI9PTF9LGlzUmVjdDp1LGRlZ2VuZXJhdGU6aH19LGEubXVsdGl0ZXN0ZXI9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLHI9dFswXVswXVswXSxuPXIsaT10WzBdWzBdWzFdLG89aSxzPTA7czx0Lmxlbmd0aDtzKyspe3ZhciBsPWEudGVzdGVyKHRbc10pO2wuc3VidHJhY3Q9dFtzXS5zdWJ0cmFjdCxlLnB1c2gobCkscj1NYXRoLm1pbihyLGwueG1pbiksbj1NYXRoLm1heChuLGwueG1heCksaT1NYXRoLm1pbihpLGwueW1pbiksbz1NYXRoLm1heChvLGwueW1heCl9cmV0dXJue3htaW46cix4bWF4Om4seW1pbjppLHltYXg6byxwdHM6W10sY29udGFpbnM6ZnVuY3Rpb24odCxyKXtmb3IodmFyIG49ITEsaT0wO2k8ZS5sZW5ndGg7aSsrKWVbaV0uY29udGFpbnModCxyKSYmKG49ITE9PT1lW2ldLnN1YnRyYWN0KTtyZXR1cm4gbn0saXNSZWN0OiExLGRlZ2VuZXJhdGU6ITF9fTt2YXIgbz1hLmlzU2VnbWVudEJlbnQ9ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGEsbyxzLGw9dFtlXSxjPVt0W3JdWzBdLWxbMF0sdFtyXVsxXS1sWzFdXSx1PW4oYyxjKSxoPU1hdGguc3FydCh1KSxmPVstY1sxXS9oLGNbMF0vaF07Zm9yKGE9ZSsxO2E8cjthKyspaWYobz1bdFthXVswXS1sWzBdLHRbYV1bMV0tbFsxXV0sKHM9bihvLGMpKTwwfHxzPnV8fE1hdGguYWJzKG4obyxmKSk+aSlyZXR1cm4hMDtyZXR1cm4hMX07YS5maWx0ZXI9ZnVuY3Rpb24odCxlKXt2YXIgcj1bdFswXV0sbj0wLGk9MDtmdW5jdGlvbiBhKGEpe3QucHVzaChhKTt2YXIgcz1yLmxlbmd0aCxsPW47ci5zcGxpY2UoaSsxKTtmb3IodmFyIGM9bCsxO2M8dC5sZW5ndGg7YysrKShjPT09dC5sZW5ndGgtMXx8byh0LGwsYysxLGUpKSYmKHIucHVzaCh0W2NdKSxyLmxlbmd0aDxzLTImJihuPWMsaT1yLmxlbmd0aC0xKSxsPWMpfXQubGVuZ3RoPjEmJmEodC5wb3AoKSk7cmV0dXJue2FkZFB0OmEscmF3OnQsZmlsdGVyZWQ6cn19fSx7Ii4uL2NvbnN0YW50cy9udW1lcmljYWwiOjY2MSwiLi9tYXRyaXgiOjY5MH1dLDY5NzpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9zaG93X25vX3dlYmdsX21zZyIpLGk9dCgicmVnbCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBhPXQuX2Z1bGxMYXlvdXQsbz0hMDtyZXR1cm4gYS5fZ2xjYW52YXMuZWFjaChmdW5jdGlvbihuKXtpZighbi5yZWdsJiYoIW4ucGlja3x8YS5faGFzKCJwYXJjb29yZHMiKSkpdHJ5e24ucmVnbD1pKHtjYW52YXM6dGhpcyxhdHRyaWJ1dGVzOnthbnRpYWxpYXM6IW4ucGljayxwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6ITB9LHBpeGVsUmF0aW86dC5fY29udGV4dC5wbG90R2xQaXhlbFJhdGlvfHxyLmRldmljZVBpeGVsUmF0aW8sZXh0ZW5zaW9uczplfHxbXX0pfWNhdGNoKHQpe289ITF9fSksb3x8bih7Y29udGFpbmVyOmEuX2dsY29udGFpbmVyLm5vZGUoKX0pLG99fSkuY2FsbCh0aGlzLCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7Ii4vc2hvd19ub193ZWJnbF9tc2ciOjcwNSxyZWdsOjQ2M31dLDY5ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZihlIGluc3RhbmNlb2YgUmVnRXhwKXt2YXIgcixuPWUudG9TdHJpbmcoKTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKWlmKHRbcl1pbnN0YW5jZW9mIFJlZ0V4cCYmdFtyXS50b1N0cmluZygpPT09bilyZXR1cm4gdDt0LnB1c2goZSl9ZWxzZSFlJiYwIT09ZXx8LTEhPT10LmluZGV4T2YoZSl8fHQucHVzaChlKTtyZXR1cm4gdH19LHt9XSw2OTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vbGliIiksaT10KCIuLi9wbG90X2FwaS9wbG90X2NvbmZpZyIpO3ZhciBhPXthZGQ6ZnVuY3Rpb24odCxlLHIsbixhKXt2YXIgbyxzO3QudW5kb1F1ZXVlPXQudW5kb1F1ZXVlfHx7aW5kZXg6MCxxdWV1ZTpbXSxzZXF1ZW5jZTohMX0scz10LnVuZG9RdWV1ZS5pbmRleCx0LmF1dG9wbGF5P3QudW5kb1F1ZXVlLmluU2VxdWVuY2V8fCh0LmF1dG9wbGF5PSExKTooIXQudW5kb1F1ZXVlLnNlcXVlbmNlfHx0LnVuZG9RdWV1ZS5iZWdpblNlcXVlbmNlPyhvPXt1bmRvOntjYWxsczpbXSxhcmdzOltdfSxyZWRvOntjYWxsczpbXSxhcmdzOltdfX0sdC51bmRvUXVldWUucXVldWUuc3BsaWNlKHMsdC51bmRvUXVldWUucXVldWUubGVuZ3RoLXMsbyksdC51bmRvUXVldWUuaW5kZXgrPTEpOm89dC51bmRvUXVldWUucXVldWVbcy0xXSx0LnVuZG9RdWV1ZS5iZWdpblNlcXVlbmNlPSExLG8mJihvLnVuZG8uY2FsbHMudW5zaGlmdChlKSxvLnVuZG8uYXJncy51bnNoaWZ0KHIpLG8ucmVkby5jYWxscy5wdXNoKG4pLG8ucmVkby5hcmdzLnB1c2goYSkpLHQudW5kb1F1ZXVlLnF1ZXVlLmxlbmd0aD5pLnF1ZXVlTGVuZ3RoJiYodC51bmRvUXVldWUucXVldWUuc2hpZnQoKSx0LnVuZG9RdWV1ZS5pbmRleC0tKSl9LHN0YXJ0U2VxdWVuY2U6ZnVuY3Rpb24odCl7dC51bmRvUXVldWU9dC51bmRvUXVldWV8fHtpbmRleDowLHF1ZXVlOltdLHNlcXVlbmNlOiExfSx0LnVuZG9RdWV1ZS5zZXF1ZW5jZT0hMCx0LnVuZG9RdWV1ZS5iZWdpblNlcXVlbmNlPSEwfSxzdG9wU2VxdWVuY2U6ZnVuY3Rpb24odCl7dC51bmRvUXVldWU9dC51bmRvUXVldWV8fHtpbmRleDowLHF1ZXVlOltdLHNlcXVlbmNlOiExfSx0LnVuZG9RdWV1ZS5zZXF1ZW5jZT0hMSx0LnVuZG9RdWV1ZS5iZWdpblNlcXVlbmNlPSExfSx1bmRvOmZ1bmN0aW9uKHQpe3ZhciBlLHI7aWYodC5mcmFtZXdvcmsmJnQuZnJhbWV3b3JrLmlzUG9sYXIpdC5mcmFtZXdvcmsudW5kbygpO2Vsc2UgaWYoISh2b2lkIDA9PT10LnVuZG9RdWV1ZXx8aXNOYU4odC51bmRvUXVldWUuaW5kZXgpfHx0LnVuZG9RdWV1ZS5pbmRleDw9MCkpe2Zvcih0LnVuZG9RdWV1ZS5pbmRleC0tLGU9dC51bmRvUXVldWUucXVldWVbdC51bmRvUXVldWUuaW5kZXhdLHQudW5kb1F1ZXVlLmluU2VxdWVuY2U9ITAscj0wO3I8ZS51bmRvLmNhbGxzLmxlbmd0aDtyKyspYS5wbG90RG8odCxlLnVuZG8uY2FsbHNbcl0sZS51bmRvLmFyZ3Nbcl0pO3QudW5kb1F1ZXVlLmluU2VxdWVuY2U9ITEsdC5hdXRvcGxheT0hMX19LHJlZG86ZnVuY3Rpb24odCl7dmFyIGUscjtpZih0LmZyYW1ld29yayYmdC5mcmFtZXdvcmsuaXNQb2xhcil0LmZyYW1ld29yay5yZWRvKCk7ZWxzZSBpZighKHZvaWQgMD09PXQudW5kb1F1ZXVlfHxpc05hTih0LnVuZG9RdWV1ZS5pbmRleCl8fHQudW5kb1F1ZXVlLmluZGV4Pj10LnVuZG9RdWV1ZS5xdWV1ZS5sZW5ndGgpKXtmb3IoZT10LnVuZG9RdWV1ZS5xdWV1ZVt0LnVuZG9RdWV1ZS5pbmRleF0sdC51bmRvUXVldWUuaW5TZXF1ZW5jZT0hMCxyPTA7cjxlLnJlZG8uY2FsbHMubGVuZ3RoO3IrKylhLnBsb3REbyh0LGUucmVkby5jYWxsc1tyXSxlLnJlZG8uYXJnc1tyXSk7dC51bmRvUXVldWUuaW5TZXF1ZW5jZT0hMSx0LmF1dG9wbGF5PSExLHQudW5kb1F1ZXVlLmluZGV4Kyt9fX07YS5wbG90RG89ZnVuY3Rpb24odCxlLHIpe3QuYXV0b3BsYXk9ITAscj1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcixpPVtdLGE9MDthPGUubGVuZ3RoO2ErKylyPWVbYV0saVthXT1yPT09dD9yOiJvYmplY3QiPT10eXBlb2Ygcj9BcnJheS5pc0FycmF5KHIpP24uZXh0ZW5kRGVlcChbXSxyKTpuLmV4dGVuZERlZXBBbGwoe30scik6cjtyZXR1cm4gaX0odCxyKSxlLmFwcGx5KG51bGwscil9LGUuZXhwb3J0cz1hfSx7Ii4uL2xpYiI6Njg0LCIuLi9wbG90X2FwaS9wbG90X2NvbmZpZyI6NzIwfV0sNzAwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3IuY291bnRlcj1mdW5jdGlvbih0LGUscil7dmFyIG49KGV8fCIiKSsocj8iIjoiJCIpO3JldHVybiJ4eSI9PT10P25ldyBSZWdFeHAoIl54KFsyLTldfFsxLTldWzAtOV0rKT95KFsyLTldfFsxLTldWzAtOV0rKT8iK24pOm5ldyBSZWdFeHAoIl4iK3QrIihbMi05XXxbMS05XVswLTldKyk/IituKX19LHt9XSw3MDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49L14oLiopKFwuW15cLlxbXF1dK3xcW1xkXF0pJC8saT0vXlteXC5cW1xdXSskLztlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IoO2U7KXt2YXIgcj10Lm1hdGNoKG4pO2lmKHIpdD1yWzFdO2Vsc2V7aWYoIXQubWF0Y2goaSkpdGhyb3cgbmV3IEVycm9yKCJiYWQgcmVsYXRpdmVBdHRyIGNhbGw6IitbdCxlXSk7dD0iIn1pZigiXiIhPT1lLmNoYXJBdCgwKSlicmVhaztlPWUuc2xpY2UoMSl9cmV0dXJuIHQmJiJbIiE9PWUuY2hhckF0KDApP3QrIi4iK2U6dCtlfX0se31dLDcwMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2lzX2FycmF5IikuaXNBcnJheU9yVHlwZWRBcnJheSxpPXQoIi4vaXNfcGxhaW5fb2JqZWN0Iik7ZS5leHBvcnRzPWZ1bmN0aW9uIHQoZSxyKXtmb3IodmFyIGEgaW4gcil7dmFyIG89clthXSxzPWVbYV07aWYocyE9PW8paWYoIl8iPT09YS5jaGFyQXQoMCl8fCJmdW5jdGlvbiI9PXR5cGVvZiBvKXtpZihhIGluIGUpY29udGludWU7ZVthXT1vfWVsc2UgaWYobihvKSYmbihzKSYmaShvWzBdKSl7aWYoImN1c3RvbWRhdGEiPT09YXx8ImlkcyI9PT1hKWNvbnRpbnVlO2Zvcih2YXIgbD1NYXRoLm1pbihvLmxlbmd0aCxzLmxlbmd0aCksYz0wO2M8bDtjKyspc1tjXSE9PW9bY10mJmkob1tjXSkmJmkoc1tjXSkmJnQoc1tjXSxvW2NdKX1lbHNlIGkobykmJmkocykmJih0KHMsbyksT2JqZWN0LmtleXMocykubGVuZ3RofHxkZWxldGUgZVthXSl9fX0seyIuL2lzX2FycmF5Ijo2ODUsIi4vaXNfcGxhaW5fb2JqZWN0Ijo2ODZ9XSw3MDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4vbG9nZ2VycyIpO2Z1bmN0aW9uIGEodCxlKXtyZXR1cm4gdDxlfWZ1bmN0aW9uIG8odCxlKXtyZXR1cm4gdDw9ZX1mdW5jdGlvbiBzKHQsZSl7cmV0dXJuIHQ+ZX1mdW5jdGlvbiBsKHQsZSl7cmV0dXJuIHQ+PWV9ci5maW5kQmluPWZ1bmN0aW9uKHQsZSxyKXtpZihuKGUuc3RhcnQpKXJldHVybiByP01hdGguY2VpbCgodC1lLnN0YXJ0KS9lLnNpemUtMWUtOSktMTpNYXRoLmZsb29yKCh0LWUuc3RhcnQpL2Uuc2l6ZSsxZS05KTt2YXIgYyx1LGg9MCxmPWUubGVuZ3RoLHA9MCxkPWY+MT8oZVtmLTFdLWVbMF0pLyhmLTEpOjE7Zm9yKHU9ZD49MD9yP2E6bzpyP2w6cyx0Kz0xZS05KmQqKHI/LTE6MSkqKGQ+PTA/MTotMSk7aDxmJiZwKys8MTAwOyl1KGVbYz1NYXRoLmZsb29yKChoK2YpLzIpXSx0KT9oPWMrMTpmPWM7cmV0dXJuIHA+OTAmJmkubG9nKCJMb25nIGJpbmFyeSBzZWFyY2guLi4iKSxoLTF9LHIuc29ydGVyQXNjPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtZX0sci5zb3J0ZXJEZXM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS10fSxyLmRpc3RpbmN0VmFscz1mdW5jdGlvbih0KXt2YXIgZT10LnNsaWNlKCk7ZS5zb3J0KHIuc29ydGVyQXNjKTtmb3IodmFyIG49ZS5sZW5ndGgtMSxpPWVbbl0tZVswXXx8MSxhPWkvKG58fDEpLzFlNCxvPVtlWzBdXSxzPTA7czxuO3MrKyllW3MrMV0+ZVtzXSthJiYoaT1NYXRoLm1pbihpLGVbcysxXS1lW3NdKSxvLnB1c2goZVtzKzFdKSk7cmV0dXJue3ZhbHM6byxtaW5EaWZmOml9fSxyLnJvdW5kVXA9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbixpPTAsYT1lLmxlbmd0aC0xLG89MCxzPXI/MDoxLGw9cj8xOjAsYz1yP01hdGguY2VpbDpNYXRoLmZsb29yO2k8YSYmbysrPDEwMDspZVtuPWMoKGkrYSkvMildPD10P2k9bitzOmE9bi1sO3JldHVybiBlW2ldfX0seyIuL2xvZ2dlcnMiOjY4OSwiZmFzdC1pc251bWVyaWMiOjIxNH1dLDcwNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXsodC5hdHRyKCJjbGFzcyIpfHwiIikuc3BsaXQoIiAiKS5mb3JFYWNoKGZ1bmN0aW9uKGUpezA9PT1lLmluZGV4T2YoImN1cnNvci0iKSYmdC5jbGFzc2VkKGUsITEpfSksZSYmdC5jbGFzc2VkKCJjdXJzb3ItIitlLCEwKX19LHt9XSw3MDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vY29tcG9uZW50cy9jb2xvciIpLGk9ZnVuY3Rpb24oKXt9O2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdCkiZnVuY3Rpb24iPT10eXBlb2YgdFtlXSYmKHRbZV09aSk7dC5kZXN0cm95PWZ1bmN0aW9uKCl7dC5jb250YWluZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0LmNvbnRhaW5lcil9O3ZhciByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3IuY2xhc3NOYW1lPSJuby13ZWJnbCIsci5zdHlsZS5jdXJzb3I9InBvaW50ZXIiLHIuc3R5bGUuZm9udFNpemU9IjI0cHgiLHIuc3R5bGUuY29sb3I9bi5kZWZhdWx0c1swXSxyLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsci5zdHlsZS5sZWZ0PXIuc3R5bGUudG9wPSIwcHgiLHIuc3R5bGUud2lkdGg9ci5zdHlsZS5oZWlnaHQ9IjEwMCUiLHIuc3R5bGVbImJhY2tncm91bmQtY29sb3IiXT1uLmxpZ2h0TGluZSxyLnN0eWxlWyJ6LWluZGV4Il09MzA7dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgicCIpO3JldHVybiBhLnRleHRDb250ZW50PSJXZWJHTCBpcyBub3Qgc3VwcG9ydGVkIGJ5IHlvdXIgYnJvd3NlciAtIHZpc2l0IGh0dHBzOi8vZ2V0LndlYmdsLm9yZyBmb3IgbW9yZSBpbmZvIixhLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIsYS5zdHlsZS50b3A9IjUwJSIsYS5zdHlsZS5sZWZ0PSI1MCUiLGEuc3R5bGUuaGVpZ2h0PSIzMCUiLGEuc3R5bGUud2lkdGg9IjUwJSIsYS5zdHlsZS5tYXJnaW49Ii0xNSUgMCAwIC0yNSUiLHIuYXBwZW5kQ2hpbGQoYSksdC5jb250YWluZXIuYXBwZW5kQ2hpbGQociksdC5jb250YWluZXIuc3R5bGUuYmFja2dyb3VuZD0iI0ZGRkZGRiIsdC5jb250YWluZXIub25jbGljaz1mdW5jdGlvbigpe3dpbmRvdy5vcGVuKCJodHRwczovL2dldC53ZWJnbC5vcmciKX0sITF9fSx7Ii4uL2NvbXBvbmVudHMvY29sb3IiOjU1OH1dLDcwNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi9pc19hcnJheSIpLmlzQXJyYXlPclR5cGVkQXJyYXk7ci5hZ2dOdW1zPWZ1bmN0aW9uKHQsZSxhLG8pe3ZhciBzLGw7aWYoKCFvfHxvPmEubGVuZ3RoKSYmKG89YS5sZW5ndGgpLG4oZSl8fChlPSExKSxpKGFbMF0pKXtmb3IobD1uZXcgQXJyYXkobykscz0wO3M8bztzKyspbFtzXT1yLmFnZ051bXModCxlLGFbc10pO2E9bH1mb3Iocz0wO3M8bztzKyspbihlKT9uKGFbc10pJiYoZT10KCtlLCthW3NdKSk6ZT1hW3NdO3JldHVybiBlfSxyLmxlbj1mdW5jdGlvbih0KXtyZXR1cm4gci5hZ2dOdW1zKGZ1bmN0aW9uKHQpe3JldHVybiB0KzF9LDAsdCl9LHIubWVhbj1mdW5jdGlvbih0LGUpe3JldHVybiBlfHwoZT1yLmxlbih0KSksci5hZ2dOdW1zKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrZX0sMCx0KS9lfSxyLm1pZFJhbmdlPWZ1bmN0aW9uKHQpe2lmKHZvaWQgMCE9PXQmJjAhPT10Lmxlbmd0aClyZXR1cm4oci5hZ2dOdW1zKE1hdGgubWF4LG51bGwsdCkrci5hZ2dOdW1zKE1hdGgubWluLG51bGwsdCkpLzJ9LHIudmFyaWFuY2U9ZnVuY3Rpb24odCxlLGkpe3JldHVybiBlfHwoZT1yLmxlbih0KSksbihpKXx8KGk9ci5tZWFuKHQsZSkpLHIuYWdnTnVtcyhmdW5jdGlvbih0LGUpe3JldHVybiB0K01hdGgucG93KGUtaSwyKX0sMCx0KS9lfSxyLnN0ZGV2PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gTWF0aC5zcXJ0KHIudmFyaWFuY2UodCxlLG4pKX0sci5pbnRlcnA9ZnVuY3Rpb24odCxlKXtpZighbihlKSl0aHJvdyJuIHNob3VsZCBiZSBhIGZpbml0ZSBudW1iZXIiO2lmKChlPWUqdC5sZW5ndGgtLjUpPDApcmV0dXJuIHRbMF07aWYoZT50Lmxlbmd0aC0xKXJldHVybiB0W3QubGVuZ3RoLTFdO3ZhciByPWUlMTtyZXR1cm4gcip0W01hdGguY2VpbChlKV0rKDEtcikqdFtNYXRoLmZsb29yKGUpXX19LHsiLi9pc19hcnJheSI6Njg1LCJmYXN0LWlzbnVtZXJpYyI6MjE0fV0sNzA3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImNvbG9yLW5vcm1hbGl6ZSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdD9uKHQpOlswLDAsMCwxXX19LHsiY29sb3Itbm9ybWFsaXplIjoxMDd9XSw3MDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uL2xpYiIpLGE9dCgiLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiKSxvPXQoIi4uL2NvbnN0YW50cy9zdHJpbmdfbWFwcGluZ3MiKSxzPXQoIi4uL2NvbnN0YW50cy9hbGlnbm1lbnQiKS5MSU5FX1NQQUNJTkc7ZnVuY3Rpb24gbCh0LGUpe3JldHVybiB0Lm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVtlXX12YXIgYz0vKFteJF0qKShbJF0rW14kXSpbJF0rKShbXiRdKikvO3IuY29udmVydFRvVHNwYW5zPWZ1bmN0aW9uKHQsZSxvKXt2YXIgdj10LnRleHQoKSxDPSF0LmF0dHIoImRhdGEtbm90ZXgiKSYmInVuZGVmaW5lZCIhPXR5cGVvZiBNYXRoSmF4JiZ2Lm1hdGNoKGMpLEw9bi5zZWxlY3QodC5ub2RlKCkucGFyZW50Tm9kZSk7aWYoIUwuZW1wdHkoKSl7dmFyIHo9dC5hdHRyKCJjbGFzcyIpP3QuYXR0cigiY2xhc3MiKS5zcGxpdCgiICIpWzBdOiJ0ZXh0IjtyZXR1cm4geis9Ii1tYXRoIixMLnNlbGVjdEFsbCgic3ZnLiIreikucmVtb3ZlKCksTC5zZWxlY3RBbGwoImcuIit6KyItZ3JvdXAiKS5yZW1vdmUoKSx0LnN0eWxlKCJkaXNwbGF5IixudWxsKS5hdHRyKHsiZGF0YS11bmZvcm1hdHRlZCI6diwiZGF0YS1tYXRoIjoiTiJ9KSxDPyhlJiZlLl9wcm9taXNlc3x8W10pLnB1c2gobmV3IFByb21pc2UoZnVuY3Rpb24oZSl7dC5zdHlsZSgiZGlzcGxheSIsIm5vbmUiKTt2YXIgcj1wYXJzZUludCh0Lm5vZGUoKS5zdHlsZS5mb250U2l6ZSwxMCksYT17Zm9udFNpemU6cn07IWZ1bmN0aW9uKHQsZSxyKXt2YXIgYT0ibWF0aC1vdXRwdXQtIitpLnJhbmRzdHIoe30sNjQpLG89bi5zZWxlY3QoImJvZHkiKS5hcHBlbmQoImRpdiIpLmF0dHIoe2lkOmF9KS5zdHlsZSh7dmlzaWJpbGl0eToiaGlkZGVuIixwb3NpdGlvbjoiYWJzb2x1dGUifSkuc3R5bGUoeyJmb250LXNpemUiOmUuZm9udFNpemUrInB4In0pLnRleHQoKHM9dCxzLnJlcGxhY2UodSwiXFxsdCAiKS5yZXBsYWNlKGgsIlxcZ3QgIikpKTt2YXIgcztNYXRoSmF4Lkh1Yi5RdWV1ZShbIlR5cGVzZXQiLE1hdGhKYXguSHViLG8ubm9kZSgpXSxmdW5jdGlvbigpe3ZhciBlPW4uc2VsZWN0KCJib2R5Iikuc2VsZWN0KCIjTWF0aEpheF9TVkdfZ2x5cGhzIik7aWYoby5zZWxlY3QoIi5NYXRoSmF4X1NWRyIpLmVtcHR5KCl8fCFvLnNlbGVjdCgic3ZnIikubm9kZSgpKWkubG9nKCJUaGVyZSB3YXMgYW4gZXJyb3IgaW4gdGhlIHRleCBzeW50YXguIix0KSxyKCk7ZWxzZXt2YXIgYT1vLnNlbGVjdCgic3ZnIikubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3Ioby5zZWxlY3QoIi5NYXRoSmF4X1NWRyIpLGUsYSl9by5yZW1vdmUoKX0pfShDWzJdLGEsZnVuY3Rpb24obixpLGEpe0wuc2VsZWN0QWxsKCJzdmcuIit6KS5yZW1vdmUoKSxMLnNlbGVjdEFsbCgiZy4iK3orIi1ncm91cCIpLnJlbW92ZSgpO3ZhciBzPW4mJm4uc2VsZWN0KCJzdmciKTtpZighc3x8IXMubm9kZSgpKXJldHVybiBQKCksdm9pZCBlKCk7dmFyIGM9TC5hcHBlbmQoImciKS5jbGFzc2VkKHorIi1ncm91cCIsITApLmF0dHIoeyJwb2ludGVyLWV2ZW50cyI6Im5vbmUiLCJkYXRhLXVuZm9ybWF0dGVkIjp2LCJkYXRhLW1hdGgiOiJZIn0pO2Mubm9kZSgpLmFwcGVuZENoaWxkKHMubm9kZSgpKSxpJiZpLm5vZGUoKSYmcy5ub2RlKCkuaW5zZXJ0QmVmb3JlKGkubm9kZSgpLmNsb25lTm9kZSghMCkscy5ub2RlKCkuZmlyc3RDaGlsZCkscy5hdHRyKHtjbGFzczp6LGhlaWdodDphLmhlaWdodCxwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJ4TWluWU1pbiBtZWV0In0pLnN0eWxlKHtvdmVyZmxvdzoidmlzaWJsZSIsInBvaW50ZXItZXZlbnRzIjoibm9uZSJ9KTt2YXIgdT10Lm5vZGUoKS5zdHlsZS5maWxsfHwiYmxhY2siO3Muc2VsZWN0KCJnIikuYXR0cih7ZmlsbDp1LHN0cm9rZTp1fSk7dmFyIGg9bChzLCJ3aWR0aCIpLGY9bChzLCJoZWlnaHQiKSxwPSt0LmF0dHIoIngiKS1oKntzdGFydDowLG1pZGRsZTouNSxlbmQ6MX1bdC5hdHRyKCJ0ZXh0LWFuY2hvciIpfHwic3RhcnQiXSxkPS0ocnx8bCh0LCJoZWlnaHQiKSkvNDsieSI9PT16WzBdPyhjLmF0dHIoe3RyYW5zZm9ybToicm90YXRlKCIrWy05MCwrdC5hdHRyKCJ4IiksK3QuYXR0cigieSIpXSsiKSB0cmFuc2xhdGUoIitbLWgvMixkLWYvMl0rIikifSkscy5hdHRyKHt4Oit0LmF0dHIoIngiKSx5Oit0LmF0dHIoInkiKX0pKToibCI9PT16WzBdP3MuYXR0cih7eDp0LmF0dHIoIngiKSx5OmQtZi8yfSk6ImEiPT09elswXT9zLmF0dHIoe3g6MCx5OmR9KTpzLmF0dHIoe3g6cCx5Oit0LmF0dHIoInkiKStkLWYvMn0pLG8mJm8uY2FsbCh0LGMpLGUoYyl9KX0pKTpQKCksdH1mdW5jdGlvbiBQKCl7TC5lbXB0eSgpfHwoej10LmF0dHIoImNsYXNzIikrIi1tYXRoIixMLnNlbGVjdCgic3ZnLiIreikucmVtb3ZlKCkpLHQudGV4dCgiIikuc3R5bGUoIndoaXRlLXNwYWNlIiwicHJlIiksZnVuY3Rpb24odCxlKXtlPShyPWUsZnVuY3Rpb24odCxlKXtpZighdClyZXR1cm4iIjtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTt0PXQucmVwbGFjZShuLnJlZ0V4cCxuLnN1Yil9cmV0dXJuIHR9KHIseSkpLnJlcGxhY2UoeCwiICIpO3ZhciByO3ZhciBvLGw9ITEsYz1bXSx1PS0xO2Z1bmN0aW9uIGgoKXt1Kys7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGEuc3ZnLCJ0c3BhbiIpO24uc2VsZWN0KGUpLmF0dHIoe2NsYXNzOiJsaW5lIixkeTp1KnMrImVtIn0pLHQuYXBwZW5kQ2hpbGQoZSksbz1lO3ZhciByPWM7aWYoYz1be25vZGU6ZX1dLHIubGVuZ3RoPjEpZm9yKHZhciBpPTE7aTxyLmxlbmd0aDtpKyspdihyW2ldKX1mdW5jdGlvbiB2KHQpe3ZhciBlLHI9dC50eXBlLGk9e307aWYoImEiPT09cil7ZT0iYSI7dmFyIHM9dC50YXJnZXQsbD10LmhyZWYsdT10LnBvcHVwO2wmJihpPXsieGxpbms6eGxpbms6c2hvdyI6Il9ibGFuayI9PT1zfHwiXyIhPT1zLmNoYXJBdCgwKT8ibmV3IjoicmVwbGFjZSIsdGFyZ2V0OnMsInhsaW5rOnhsaW5rOmhyZWYiOmx9LHUmJihpLm9uY2xpY2s9J3dpbmRvdy5vcGVuKHRoaXMuaHJlZi5iYXNlVmFsLHRoaXMudGFyZ2V0LmJhc2VWYWwsIicrdSsnIik7cmV0dXJuIGZhbHNlOycpKX1lbHNlIGU9InRzcGFuIjt0LnN0eWxlJiYoaS5zdHlsZT10LnN0eWxlKTt2YXIgaD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoYS5zdmcsZSk7aWYoInN1cCI9PT1yfHwic3ViIj09PXIpe0MobyxnKSxvLmFwcGVuZENoaWxkKGgpO3ZhciBmPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhhLnN2ZywidHNwYW4iKTtDKGYsZyksbi5zZWxlY3QoZikuYXR0cigiZHkiLGRbcl0pLGkuZHk9cFtyXSxvLmFwcGVuZENoaWxkKGgpLG8uYXBwZW5kQ2hpbGQoZil9ZWxzZSBvLmFwcGVuZENoaWxkKGgpO24uc2VsZWN0KGgpLmF0dHIoaSksbz10Lm5vZGU9aCxjLnB1c2godCl9ZnVuY3Rpb24gQyh0LGUpe3QuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZSkpfWZ1bmN0aW9uIEwodCl7aWYoMSE9PWMubGVuZ3RoKXt2YXIgcj1jLnBvcCgpO3QhPT1yLnR5cGUmJmkubG9nKCJTdGFydCB0YWcgPCIrci50eXBlKyI+IGRvZXNudCBtYXRjaCBlbmQgdGFnIDwiK3QrIj4uIFByZXRlbmRpbmcgaXQgZGlkIG1hdGNoLiIsZSksbz1jW2MubGVuZ3RoLTFdLm5vZGV9ZWxzZSBpLmxvZygiSWdub3JpbmcgdW5leHBlY3RlZCBlbmQgdGFnIDwvIit0KyI+LiIsZSl9dy50ZXN0KGUpP2goKToobz10LGM9W3tub2RlOnR9XSk7Zm9yKHZhciB6PWUuc3BsaXQoYiksUD0wO1A8ei5sZW5ndGg7UCsrKXt2YXIgST16W1BdLE89SS5tYXRjaChfKSxEPU8mJk9bMl0udG9Mb3dlckNhc2UoKSxSPWZbRF07aWYoImJyIj09PUQpaCgpO2Vsc2UgaWYodm9pZCAwPT09UilDKG8sSSk7ZWxzZSBpZihPWzFdKUwoRCk7ZWxzZXt2YXIgQj1PWzRdLEY9e3R5cGU6RH0sTj1TKEIsayk7aWYoTj8oTj1OLnJlcGxhY2UoRSwiJDEgZmlsbDoiKSxSJiYoTis9IjsiK1IpKTpSJiYoTj1SKSxOJiYoRi5zdHlsZT1OKSwiYSI9PT1EKXtsPSEwO3ZhciBqPVMoQixNKTtpZihqKXt2YXIgVj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7Vi5ocmVmPWosLTEhPT1tLmluZGV4T2YoVi5wcm90b2NvbCkmJihGLmhyZWY9ZW5jb2RlVVJJKGRlY29kZVVSSShqKSksRi50YXJnZXQ9UyhCLEEpfHwiX2JsYW5rIixGLnBvcHVwPVMoQixUKSl9fXYoRil9fXJldHVybiBsfSh0Lm5vZGUoKSx2KSYmdC5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhbGwiKSxyLnBvc2l0aW9uVGV4dCh0KSxvJiZvLmNhbGwodCl9fTt2YXIgdT0vKDx8Jmx0O3wmIzYwOykvZyxoPS8oPnwmZ3Q7fCYjNjI7KS9nO3ZhciBmPXtzdXA6ImZvbnQtc2l6ZTo3MCUiLHN1YjoiZm9udC1zaXplOjcwJSIsYjoiZm9udC13ZWlnaHQ6Ym9sZCIsaToiZm9udC1zdHlsZTppdGFsaWMiLGE6ImN1cnNvcjpwb2ludGVyIixzcGFuOiIiLGVtOiJmb250LXN0eWxlOml0YWxpYztmb250LXdlaWdodDpib2xkIn0scD17c3ViOiIwLjNlbSIsc3VwOiItMC42ZW0ifSxkPXtzdWI6Ii0wLjIxZW0iLHN1cDoiMC40MmVtIn0sZz0iXHUyMDBiIixtPVsiaHR0cDoiLCJodHRwczoiLCJtYWlsdG86IiwiIix2b2lkIDAsIjoiXSx2PW5ldyBSZWdFeHAoIjwvPygiK09iamVjdC5rZXlzKGYpLmpvaW4oInwiKSsiKSggW14+XSopPy8/PiIsImciKSx5PU9iamVjdC5rZXlzKG8uZW50aXR5VG9Vbmljb2RlKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJue3JlZ0V4cDpuZXcgUmVnRXhwKCImIit0KyI7IiwiZyIpLHN1YjpvLmVudGl0eVRvVW5pY29kZVt0XX19KSx4PS8oXHJcbj98XG4pL2csYj0vKDxbXjw+XSo+KS8sXz0vPChcLz8pKFteID5dKikoXHMrKC4qKSk/Pi9pLHc9LzxicihccysuKik/Pi9pLGs9LyhefFtccyInXSlzdHlsZVxzKj1ccyooIihbXiJdKik7PyJ8JyhbXiddKik7PycpL2ksTT0vKF58W1xzIiddKWhyZWZccyo9XHMqKCIoW14iXSopInwnKFteJ10qKScpL2ksQT0vKF58W1xzIiddKXRhcmdldFxzKj1ccyooIihbXiJcc10qKSJ8JyhbXidcc10qKScpL2ksVD0vKF58W1xzIiddKXBvcHVwXHMqPVxzKigiKFtcdz0sXSopInwnKFtcdz0sXSopJykvaTtmdW5jdGlvbiBTKHQsZSl7aWYoIXQpcmV0dXJuIG51bGw7dmFyIHI9dC5tYXRjaChlKTtyZXR1cm4gciYmKHJbM118fHJbNF0pfXZhciBFPS8oXnw7KVxzKmNvbG9yOi87ZnVuY3Rpb24gQyh0LGUscil7dmFyIG4saSxhLG89ci5ob3Jpem9udGFsQWxpZ24scz1yLnZlcnRpY2FsQWxpZ258fCJ0b3AiLGw9dC5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksYz1lLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm4gaT0iYm90dG9tIj09PXM/ZnVuY3Rpb24oKXtyZXR1cm4gbC5ib3R0b20tbi5oZWlnaHR9OiJtaWRkbGUiPT09cz9mdW5jdGlvbigpe3JldHVybiBsLnRvcCsobC5oZWlnaHQtbi5oZWlnaHQpLzJ9OmZ1bmN0aW9uKCl7cmV0dXJuIGwudG9wfSxhPSJyaWdodCI9PT1vP2Z1bmN0aW9uKCl7cmV0dXJuIGwucmlnaHQtbi53aWR0aH06ImNlbnRlciI9PT1vP2Z1bmN0aW9uKCl7cmV0dXJuIGwubGVmdCsobC53aWR0aC1uLndpZHRoKS8yfTpmdW5jdGlvbigpe3JldHVybiBsLmxlZnR9LGZ1bmN0aW9uKCl7cmV0dXJuIG49dGhpcy5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdGhpcy5zdHlsZSh7dG9wOmkoKS1jLnRvcCsicHgiLGxlZnQ6YSgpLWMubGVmdCsicHgiLCJ6LWluZGV4IjoxZTN9KSx0aGlzfX1yLnBsYWluVGV4dD1mdW5jdGlvbih0KXtyZXR1cm4odHx8IiIpLnJlcGxhY2UodiwiICIpfSxyLmxpbmVDb3VudD1mdW5jdGlvbih0KXtyZXR1cm4gdC5zZWxlY3RBbGwoInRzcGFuLmxpbmUiKS5zaXplKCl8fDF9LHIucG9zaXRpb25UZXh0PWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdC5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9bi5zZWxlY3QodGhpcyk7ZnVuY3Rpb24gaShlLHIpe3JldHVybiB2b2lkIDA9PT1yP251bGw9PT0ocj10LmF0dHIoZSkpJiYodC5hdHRyKGUsMCkscj0wKTp0LmF0dHIoZSxyKSxyfXZhciBhPWkoIngiLGUpLG89aSgieSIscik7InRleHQiPT09dGhpcy5ub2RlTmFtZSYmdC5zZWxlY3RBbGwoInRzcGFuLmxpbmUiKS5hdHRyKHt4OmEseTpvfSl9KX0sci5tYWtlRWRpdGFibGU9ZnVuY3Rpb24odCxlKXt2YXIgcj1lLmdkLGk9ZS5kZWxlZ2F0ZSxhPW4uZGlzcGF0Y2goImVkaXQiLCJpbnB1dCIsImNhbmNlbCIpLG89aXx8dDtpZih0LnN0eWxlKHsicG9pbnRlci1ldmVudHMiOmk/Im5vbmUiOiJhbGwifSksMSE9PXQuc2l6ZSgpKXRocm93IG5ldyBFcnJvcigiYm9vIik7ZnVuY3Rpb24gcygpeyFmdW5jdGlvbigpe3ZhciBpPW4uc2VsZWN0KHIpLnNlbGVjdCgiLnN2Zy1jb250YWluZXIiKSxvPWkuYXBwZW5kKCJkaXYiKSxzPXQubm9kZSgpLnN0eWxlLGM9cGFyc2VGbG9hdChzLmZvbnRTaXplfHwxMiksdT1lLnRleHQ7dm9pZCAwPT09dSYmKHU9dC5hdHRyKCJkYXRhLXVuZm9ybWF0dGVkIikpO28uY2xhc3NlZCgicGx1Z2luLWVkaXRhYmxlIGVkaXRhYmxlIiwhMCkuc3R5bGUoe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsImZvbnQtZmFtaWx5IjpzLmZvbnRGYW1pbHl8fCJBcmlhbCIsImZvbnQtc2l6ZSI6Yyxjb2xvcjplLmZpbGx8fHMuZmlsbHx8ImJsYWNrIixvcGFjaXR5OjEsImJhY2tncm91bmQtY29sb3IiOmUuYmFja2dyb3VuZHx8InRyYW5zcGFyZW50IixvdXRsaW5lOiIjZmZmZmZmMzMgMXB4IHNvbGlkIixtYXJnaW46Wy1jLzgrMSwwLDAsLTFdLmpvaW4oInB4ICIpKyJweCIscGFkZGluZzoiMCIsImJveC1zaXppbmciOiJib3JkZXItYm94In0pLmF0dHIoe2NvbnRlbnRlZGl0YWJsZTohMH0pLnRleHQodSkuY2FsbChDKHQsaSxlKSkub24oImJsdXIiLGZ1bmN0aW9uKCl7ci5fZWRpdGluZz0hMSx0LnRleHQodGhpcy50ZXh0Q29udGVudCkuc3R5bGUoe29wYWNpdHk6MX0pO3ZhciBlLGk9bi5zZWxlY3QodGhpcykuYXR0cigiY2xhc3MiKTsoZT1pPyIuIitpLnNwbGl0KCIgIilbMF0rIi1tYXRoLWdyb3VwIjoiW2NsYXNzKj0tbWF0aC1ncm91cF0iKSYmbi5zZWxlY3QodC5ub2RlKCkucGFyZW50Tm9kZSkuc2VsZWN0KGUpLnN0eWxlKHtvcGFjaXR5OjB9KTt2YXIgbz10aGlzLnRleHRDb250ZW50O24uc2VsZWN0KHRoaXMpLnRyYW5zaXRpb24oKS5kdXJhdGlvbigwKS5yZW1vdmUoKSxuLnNlbGVjdChkb2N1bWVudCkub24oIm1vdXNldXAiLG51bGwpLGEuZWRpdC5jYWxsKHQsbyl9KS5vbigiZm9jdXMiLGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyLl9lZGl0aW5nPSEwLG4uc2VsZWN0KGRvY3VtZW50KS5vbigibW91c2V1cCIsZnVuY3Rpb24oKXtpZihuLmV2ZW50LnRhcmdldD09PXQpcmV0dXJuITE7ZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PW8ubm9kZSgpJiZvLm5vZGUoKS5ibHVyKCl9KX0pLm9uKCJrZXl1cCIsZnVuY3Rpb24oKXsyNz09PW4uZXZlbnQud2hpY2g/KHIuX2VkaXRpbmc9ITEsdC5zdHlsZSh7b3BhY2l0eToxfSksbi5zZWxlY3QodGhpcykuc3R5bGUoe29wYWNpdHk6MH0pLm9uKCJibHVyIixmdW5jdGlvbigpe3JldHVybiExfSkudHJhbnNpdGlvbigpLnJlbW92ZSgpLGEuY2FuY2VsLmNhbGwodCx0aGlzLnRleHRDb250ZW50KSk6KGEuaW5wdXQuY2FsbCh0LHRoaXMudGV4dENvbnRlbnQpLG4uc2VsZWN0KHRoaXMpLmNhbGwoQyh0LGksZSkpKX0pLm9uKCJrZXlkb3duIixmdW5jdGlvbigpezEzPT09bi5ldmVudC53aGljaCYmdGhpcy5ibHVyKCl9KS5jYWxsKGwpfSgpLHQuc3R5bGUoe29wYWNpdHk6MH0pO3ZhciBpLHM9by5hdHRyKCJjbGFzcyIpOyhpPXM/Ii4iK3Muc3BsaXQoIiAiKVswXSsiLW1hdGgtZ3JvdXAiOiJbY2xhc3MqPS1tYXRoLWdyb3VwXSIpJiZuLnNlbGVjdCh0Lm5vZGUoKS5wYXJlbnROb2RlKS5zZWxlY3QoaSkuc3R5bGUoe29wYWNpdHk6MH0pfWZ1bmN0aW9uIGwodCl7dmFyIGU9dC5ub2RlKCkscj1kb2N1bWVudC5jcmVhdGVSYW5nZSgpO3Iuc2VsZWN0Tm9kZUNvbnRlbnRzKGUpO3ZhciBuPXdpbmRvdy5nZXRTZWxlY3Rpb24oKTtuLnJlbW92ZUFsbFJhbmdlcygpLG4uYWRkUmFuZ2UociksZS5mb2N1cygpfXJldHVybiBlLmltbWVkaWF0ZT9zKCk6by5vbigiY2xpY2siLHMpLG4ucmViaW5kKHQsYSwib24iKX19LHsiLi4vY29uc3RhbnRzL2FsaWdubWVudCI6NjU2LCIuLi9jb25zdGFudHMvc3RyaW5nX21hcHBpbmdzIjo2NjIsIi4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIjo2NjMsIi4uL2xpYiI6Njg0LGQzOjE0N31dLDcwOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17fTtmdW5jdGlvbiBpKHQpe3QmJm51bGwhPT10LnRpbWVyJiYoY2xlYXJUaW1lb3V0KHQudGltZXIpLHQudGltZXI9bnVsbCl9ci50aHJvdHRsZT1mdW5jdGlvbih0LGUscil7dmFyIGE9blt0XSxvPURhdGUubm93KCk7aWYoIWEpe2Zvcih2YXIgcyBpbiBuKW5bc10udHM8by02ZTQmJmRlbGV0ZSBuW3NdO2E9blt0XT17dHM6MCx0aW1lcjpudWxsfX1mdW5jdGlvbiBsKCl7cigpLGEudHM9RGF0ZS5ub3coKSxhLm9uRG9uZSYmKGEub25Eb25lKCksYS5vbkRvbmU9bnVsbCl9aShhKSxvPmEudHMrZT9sKCk6YS50aW1lcj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bCgpLGEudGltZXI9bnVsbH0sZSl9LHIuZG9uZT1mdW5jdGlvbih0KXt2YXIgZT1uW3RdO3JldHVybiBlJiZlLnRpbWVyP25ldyBQcm9taXNlKGZ1bmN0aW9uKHQpe3ZhciByPWUub25Eb25lO2Uub25Eb25lPWZ1bmN0aW9uKCl7ciYmcigpLHQoKSxlLm9uRG9uZT1udWxsfX0pOlByb21pc2UucmVzb2x2ZSgpfSxyLmNsZWFyPWZ1bmN0aW9uKHQpe2lmKHQpaShuW3RdKSxkZWxldGUgblt0XTtlbHNlIGZvcih2YXIgZSBpbiBuKXIuY2xlYXIoZSl9fSx7fV0sNzEwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYodD4wKXJldHVybiBNYXRoLmxvZyh0KS9NYXRoLkxOMTA7dmFyIHI9TWF0aC5sb2coTWF0aC5taW4oZVswXSxlWzFdKSkvTWF0aC5MTjEwO3JldHVybiBuKHIpfHwocj1NYXRoLmxvZyhNYXRoLm1heChlWzBdLGVbMV0pKS9NYXRoLkxOMTAtNikscn19LHsiZmFzdC1pc251bWVyaWMiOjIxNH1dLDcxMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lLmV4cG9ydHM9e30saT10KCIuLi9wbG90cy9nZW8vY29uc3RhbnRzIikubG9jYXRpb25tb2RlVG9MYXllcixhPXQoInRvcG9qc29uLWNsaWVudCIpLmZlYXR1cmU7bi5nZXRUb3BvanNvbk5hbWU9ZnVuY3Rpb24odCl7cmV0dXJuW3Quc2NvcGUucmVwbGFjZSgvIC9nLCItIiksIl8iLHQucmVzb2x1dGlvbi50b1N0cmluZygpLCJtIl0uam9pbigiIil9LG4uZ2V0VG9wb2pzb25QYXRoPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrZSsiLmpzb24ifSxuLmdldFRvcG9qc29uRmVhdHVyZXM9ZnVuY3Rpb24odCxlKXt2YXIgcj1pW3QubG9jYXRpb25tb2RlXSxuPWUub2JqZWN0c1tyXTtyZXR1cm4gYShlLG4pLmZlYXR1cmVzfX0seyIuLi9wbG90cy9nZW8vY29uc3RhbnRzIjo3NjAsInRvcG9qc29uLWNsaWVudCI6NTAyfV0sNzEyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bW9kdWxlVHlwZToibG9jYWxlIixuYW1lOiJlbi1VUyIsZGljdGlvbmFyeTp7IkNsaWNrIHRvIGVudGVyIENvbG9yc2NhbGUgdGl0bGUiOiJDbGljayB0byBlbnRlciBDb2xvcnNjYWxlIHRpdGxlIn0sZm9ybWF0OntkYXRlOiIlbS8lZC8lWSJ9fX0se31dLDcxMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e21vZHVsZVR5cGU6ImxvY2FsZSIsbmFtZToiZW4iLGRpY3Rpb25hcnk6eyJDbGljayB0byBlbnRlciBDb2xvcnNjYWxlIHRpdGxlIjoiQ2xpY2sgdG8gZW50ZXIgQ29sb3Vyc2NhbGUgdGl0bGUifSxmb3JtYXQ6e2RheXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLHNob3J0RGF5czpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLG1vbnRoczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sc2hvcnRNb250aHM6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXSxwZXJpb2RzOlsiQU0iLCJQTSJdLGRhdGVUaW1lOiIlYSAlYiAlZSAlWCAlWSIsZGF0ZToiJWQvJW0vJVkiLHRpbWU6IiVIOiVNOiVTIixkZWNpbWFsOiIuIix0aG91c2FuZHM6IiwiLGdyb3VwaW5nOlszXSxjdXJyZW5jeTpbIiQiLCIiXSx5ZWFyOiIlWSIsbW9udGg6IiViICVZIixkYXlNb250aDoiJWIgJS1kIixkYXlNb250aFllYXI6IiViICUtZCwgJVkifX19LHt9XSw3MTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vcmVnaXN0cnkiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHIsaT1uLmxheW91dEFycmF5Q29udGFpbmVycyxhPW4ubGF5b3V0QXJyYXlSZWdleGVzLG89dC5zcGxpdCgiWyIpWzBdLHM9MDtzPGEubGVuZ3RoO3MrKylpZigocj10Lm1hdGNoKGFbc10pKSYmMD09PXIuaW5kZXgpe2U9clswXTticmVha31pZihlfHwoZT1pW2kuaW5kZXhPZihvKV0pLCFlKXJldHVybiExO3ZhciBsPXQuc3Vic3RyKGUubGVuZ3RoKTtyZXR1cm4gbD8hIShyPWwubWF0Y2goL15cWygwfFsxLTldWzAtOV0qKVxdKFwuKC4rKSk/JC8pKSYme2FycmF5OmUsaW5kZXg6TnVtYmVyKHJbMV0pLHByb3BlcnR5OnJbM118fCIifTp7YXJyYXk6ZSxpbmRleDoiIixwcm9wZXJ0eToiIn19fSx7Ii4uL3JlZ2lzdHJ5Ijo4MTd9XSw3MTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vbGliIiksaT1uLmV4dGVuZEZsYXQsYT1uLmlzUGxhaW5PYmplY3Qsbz17dmFsVHlwZToiZmxhZ2xpc3QiLGV4dHJhczpbIm5vbmUiXSxmbGFnczpbImNhbGMiLCJjYWxjSWZBdXRvcmFuZ2UiLCJjbGVhckF4aXNUeXBlcyIsInBsb3QiLCJzdHlsZSIsImNvbG9yYmFycyJdfSxzPXt2YWxUeXBlOiJmbGFnbGlzdCIsZXh0cmFzOlsibm9uZSJdLGZsYWdzOlsiY2FsYyIsImNhbGNJZkF1dG9yYW5nZSIsInBsb3QiLCJsZWdlbmQiLCJ0aWNrcyIsImF4cmFuZ2UiLCJsYXlvdXRzdHlsZSIsIm1vZGViYXIiLCJjYW1lcmEiLCJhcnJheWRyYXciXX0sbD1vLmZsYWdzLnNsaWNlKCkuY29uY2F0KFsiY2xlYXJDYWxjIiwiZnVsbFJlcGxvdCJdKSxjPXMuZmxhZ3Muc2xpY2UoKS5jb25jYXQoImxheW91dFJlcGxvdCIpO2Z1bmN0aW9uIHUodCl7Zm9yKHZhciBlPXt9LHI9MDtyPHQubGVuZ3RoO3IrKyllW3Rbcl1dPSExO3JldHVybiBlfWZ1bmN0aW9uIGgodCxlLHIpe3ZhciBuPWkoe30sdCk7Zm9yKHZhciBvIGluIG4pe3ZhciBzPW5bb107YShzKSYmKG5bb109ZihzLGUscixvKSl9cmV0dXJuImZyb20tcm9vdCI9PT1yJiYobi5lZGl0VHlwZT1lKSxufWZ1bmN0aW9uIGYodCxlLHIsbil7aWYodC52YWxUeXBlKXt2YXIgYT1pKHt9LHQpO2lmKGEuZWRpdFR5cGU9ZSxBcnJheS5pc0FycmF5KHQuaXRlbXMpKXthLml0ZW1zPW5ldyBBcnJheSh0Lml0ZW1zLmxlbmd0aCk7Zm9yKHZhciBvPTA7bzx0Lml0ZW1zLmxlbmd0aDtvKyspYS5pdGVtc1tvXT1mKHQuaXRlbXNbb10sZSwiZnJvbS1yb290Iil9cmV0dXJuIGF9cmV0dXJuIGgodCxlLCJfIj09PW4uY2hhckF0KDApPyJuZXN0ZWQiOiJmcm9tLXJvb3QiKX1lLmV4cG9ydHM9e3RyYWNlczpvLGxheW91dDpzLHRyYWNlRmxhZ3M6ZnVuY3Rpb24oKXtyZXR1cm4gdShsKX0sbGF5b3V0RmxhZ3M6ZnVuY3Rpb24oKXtyZXR1cm4gdShjKX0sdXBkYXRlOmZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5lZGl0VHlwZTtpZihyJiYibm9uZSIhPT1yKWZvcih2YXIgbj1yLnNwbGl0KCIrIiksaT0wO2k8bi5sZW5ndGg7aSsrKXRbbltpXV09ITB9LG92ZXJyaWRlQWxsOmh9fSx7Ii4uL2xpYiI6Njg0fV0sNzE2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCJnbC1tYXQ0L2Zyb21RdWF0IiksYT10KCIuLi9yZWdpc3RyeSIpLG89dCgiLi4vbGliIikscz10KCIuLi9wbG90cy9wbG90cyIpLGw9dCgiLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIiksYz1sLmNsZWFuSWQsdT1sLmdldEZyb21UcmFjZSxoPXQoIi4uL2NvbXBvbmVudHMvY29sb3IiKTtmdW5jdGlvbiBmKHQsZSl7dmFyIHI9dFtlXSxuPWUuY2hhckF0KDApO3ImJiJwYXBlciIhPT1yJiYodFtlXT1jKHIsbikpfWZ1bmN0aW9uIHAodCl7aWYoIW8uaXNQbGFpbk9iamVjdCh0KSlyZXR1cm4hMTt2YXIgZT10Lm5hbWU7cmV0dXJuIGRlbGV0ZSB0Lm5hbWUsZGVsZXRlIHQuc2hvd2xlZ2VuZCwoInN0cmluZyI9PXR5cGVvZiBlfHwibnVtYmVyIj09dHlwZW9mIGUpJiZTdHJpbmcoZSl9ZnVuY3Rpb24gZCh0LGUscixuKXtpZihyJiYhbilyZXR1cm4gdDtpZihuJiYhcilyZXR1cm4gZTtpZighdC50cmltKCkpcmV0dXJuIGU7aWYoIWUudHJpbSgpKXJldHVybiB0O3ZhciBpLGE9TWF0aC5taW4odC5sZW5ndGgsZS5sZW5ndGgpO2ZvcihpPTA7aTxhJiZ0LmNoYXJBdChpKT09PWUuY2hhckF0KGkpO2krKyk7cmV0dXJuIHQuc3Vic3RyKDAsaSkudHJpbSgpfWZ1bmN0aW9uIGcodCl7dmFyIGU9Im1pZGRsZSIscj0iY2VudGVyIjtyZXR1cm4tMSE9PXQuaW5kZXhPZigidG9wIik/ZT0idG9wIjotMSE9PXQuaW5kZXhPZigiYm90dG9tIikmJihlPSJib3R0b20iKSwtMSE9PXQuaW5kZXhPZigibGVmdCIpP3I9ImxlZnQiOi0xIT09dC5pbmRleE9mKCJyaWdodCIpJiYocj0icmlnaHQiKSxlKyIgIityfWZ1bmN0aW9uIG0odCxlKXtyZXR1cm4gZSBpbiB0JiYib2JqZWN0Ij09dHlwZW9mIHRbZV0mJjA9PT1PYmplY3Qua2V5cyh0W2VdKS5sZW5ndGh9ci5jbGVhclByb21pc2VRdWV1ZT1mdW5jdGlvbih0KXtBcnJheS5pc0FycmF5KHQuX3Byb21pc2VzKSYmdC5fcHJvbWlzZXMubGVuZ3RoPjAmJm8ubG9nKCJDbGVhcmluZyBwcmV2aW91cyByZWplY3RlZCBwcm9taXNlcyBmcm9tIHF1ZXVlLiIpLHQuX3Byb21pc2VzPVtdfSxyLmNsZWFuTGF5b3V0PWZ1bmN0aW9uKHQpe3ZhciBlLHI7dHx8KHQ9e30pLHQueGF4aXMxJiYodC54YXhpc3x8KHQueGF4aXM9dC54YXhpczEpLGRlbGV0ZSB0LnhheGlzMSksdC55YXhpczEmJih0LnlheGlzfHwodC55YXhpcz10LnlheGlzMSksZGVsZXRlIHQueWF4aXMxKSx0LnNjZW5lMSYmKHQuc2NlbmV8fCh0LnNjZW5lPXQuc2NlbmUxKSxkZWxldGUgdC5zY2VuZTEpO3ZhciBuPShzLnN1YnBsb3RzUmVnaXN0cnkuY2FydGVzaWFufHx7fSkuYXR0clJlZ2V4LGE9KHMuc3VicGxvdHNSZWdpc3RyeS5nbDNkfHx7fSkuYXR0clJlZ2V4LGw9T2JqZWN0LmtleXModCk7Zm9yKGU9MDtlPGwubGVuZ3RoO2UrKyl7dmFyIHU9bFtlXTtpZihuJiZuLnRlc3QodSkpe3ZhciBwPXRbdV07cC5hbmNob3ImJiJmcmVlIiE9PXAuYW5jaG9yJiYocC5hbmNob3I9YyhwLmFuY2hvcikpLHAub3ZlcmxheWluZyYmKHAub3ZlcmxheWluZz1jKHAub3ZlcmxheWluZykpLHAudHlwZXx8KHAuaXNkYXRlP3AudHlwZT0iZGF0ZSI6cC5pc2xvZz9wLnR5cGU9ImxvZyI6ITE9PT1wLmlzZGF0ZSYmITE9PT1wLmlzbG9nJiYocC50eXBlPSJsaW5lYXIiKSksIndpdGh6ZXJvIiE9PXAuYXV0b3JhbmdlJiYidG96ZXJvIiE9PXAuYXV0b3JhbmdlfHwocC5hdXRvcmFuZ2U9ITAscC5yYW5nZW1vZGU9InRvemVybyIpLGRlbGV0ZSBwLmlzbG9nLGRlbGV0ZSBwLmlzZGF0ZSxkZWxldGUgcC5jYXRlZ29yaWVzLG0ocCwiZG9tYWluIikmJmRlbGV0ZSBwLmRvbWFpbix2b2lkIDAhPT1wLmF1dG90aWNrJiYodm9pZCAwPT09cC50aWNrbW9kZSYmKHAudGlja21vZGU9cC5hdXRvdGljaz8iYXV0byI6ImxpbmVhciIpLGRlbGV0ZSBwLmF1dG90aWNrKX1lbHNlIGlmKGEmJmEudGVzdCh1KSl7dmFyIGQ9dFt1XSxnPWQuY2FtZXJhcG9zaXRpb247aWYoQXJyYXkuaXNBcnJheShnKSYmND09PWdbMF0ubGVuZ3RoKXt2YXIgdj1nWzBdLHk9Z1sxXSx4PWdbMl0sYj1pKFtdLHYpLF89W107Zm9yKHI9MDtyPDM7KytyKV9bcl09eVtyXSt4KmJbMis0KnJdO2QuY2FtZXJhPXtleWU6e3g6X1swXSx5Ol9bMV0sejpfWzJdfSxjZW50ZXI6e3g6eVswXSx5OnlbMV0sejp5WzJdfSx1cDp7eDpiWzFdLHk6Yls1XSx6OmJbOV19fSxkZWxldGUgZC5jYW1lcmFwb3NpdGlvbn19fXZhciB3PUFycmF5LmlzQXJyYXkodC5hbm5vdGF0aW9ucyk/dC5hbm5vdGF0aW9ucy5sZW5ndGg6MDtmb3IoZT0wO2U8dztlKyspe3ZhciBrPXQuYW5ub3RhdGlvbnNbZV07by5pc1BsYWluT2JqZWN0KGspJiYoay5yZWYmJigicGFwZXIiPT09ay5yZWY/KGsueHJlZj0icGFwZXIiLGsueXJlZj0icGFwZXIiKToiZGF0YSI9PT1rLnJlZiYmKGsueHJlZj0ieCIsay55cmVmPSJ5IiksZGVsZXRlIGsucmVmKSxmKGssInhyZWYiKSxmKGssInlyZWYiKSl9dmFyIE09QXJyYXkuaXNBcnJheSh0LnNoYXBlcyk/dC5zaGFwZXMubGVuZ3RoOjA7Zm9yKGU9MDtlPE07ZSsrKXt2YXIgQT10LnNoYXBlc1tlXTtvLmlzUGxhaW5PYmplY3QoQSkmJihmKEEsInhyZWYiKSxmKEEsInlyZWYiKSl9dmFyIFQ9dC5sZWdlbmQ7cmV0dXJuIFQmJihULng+Mz8oVC54PTEuMDIsVC54YW5jaG9yPSJsZWZ0Iik6VC54PC0yJiYoVC54PS0uMDIsVC54YW5jaG9yPSJyaWdodCIpLFQueT4zPyhULnk9MS4wMixULnlhbmNob3I9ImJvdHRvbSIpOlQueTwtMiYmKFQueT0tLjAyLFQueWFuY2hvcj0idG9wIikpLCJyb3RhdGUiPT09dC5kcmFnbW9kZSYmKHQuZHJhZ21vZGU9Im9yYml0IiksaC5jbGVhbih0KSx0fSxyLmNsZWFuRGF0YT1mdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKyl7dmFyIG4saT10W2VdO2lmKCJoaXN0b2dyYW15Ij09PWkudHlwZSYmInhiaW5zImluIGkmJiEoInliaW5zImluIGkpJiYoaS55Ymlucz1pLnhiaW5zLGRlbGV0ZSBpLnhiaW5zKSxpLmVycm9yX3kmJiJvcGFjaXR5ImluIGkuZXJyb3JfeSl7dmFyIGw9aC5kZWZhdWx0cyx1PWkuZXJyb3JfeS5jb2xvcnx8KGEudHJhY2VJcyhpLCJiYXIiKT9oLmRlZmF1bHRMaW5lOmxbZSVsLmxlbmd0aF0pO2kuZXJyb3JfeS5jb2xvcj1oLmFkZE9wYWNpdHkoaC5yZ2IodSksaC5vcGFjaXR5KHUpKmkuZXJyb3JfeS5vcGFjaXR5KSxkZWxldGUgaS5lcnJvcl95Lm9wYWNpdHl9aWYoImJhcmRpciJpbiBpJiYoImgiIT09aS5iYXJkaXJ8fCFhLnRyYWNlSXMoaSwiYmFyIikmJiJoaXN0b2dyYW0iIT09aS50eXBlLnN1YnN0cigwLDkpfHwoaS5vcmllbnRhdGlvbj0iaCIsci5zd2FwWFlEYXRhKGkpKSxkZWxldGUgaS5iYXJkaXIpLCJoaXN0b2dyYW15Ij09PWkudHlwZSYmci5zd2FwWFlEYXRhKGkpLCJoaXN0b2dyYW14IiE9PWkudHlwZSYmImhpc3RvZ3JhbXkiIT09aS50eXBlfHwoaS50eXBlPSJoaXN0b2dyYW0iKSwic2NsImluIGkmJihpLmNvbG9yc2NhbGU9aS5zY2wsZGVsZXRlIGkuc2NsKSwicmV2ZXJzZXNjbCJpbiBpJiYoaS5yZXZlcnNlc2NhbGU9aS5yZXZlcnNlc2NsLGRlbGV0ZSBpLnJldmVyc2VzY2wpLGkueGF4aXMmJihpLnhheGlzPWMoaS54YXhpcywieCIpKSxpLnlheGlzJiYoaS55YXhpcz1jKGkueWF4aXMsInkiKSksYS50cmFjZUlzKGksImdsM2QiKSYmaS5zY2VuZSYmKGkuc2NlbmU9cy5zdWJwbG90c1JlZ2lzdHJ5LmdsM2QuY2xlYW5JZChpLnNjZW5lKSksIWEudHJhY2VJcyhpLCJwaWUiKSYmIWEudHJhY2VJcyhpLCJiYXIiKSlpZihBcnJheS5pc0FycmF5KGkudGV4dHBvc2l0aW9uKSlmb3Iobj0wO248aS50ZXh0cG9zaXRpb24ubGVuZ3RoO24rKylpLnRleHRwb3NpdGlvbltuXT1nKGkudGV4dHBvc2l0aW9uW25dKTtlbHNlIGkudGV4dHBvc2l0aW9uJiYoaS50ZXh0cG9zaXRpb249ZyhpLnRleHRwb3NpdGlvbikpO3ZhciBmPWEuZ2V0TW9kdWxlKGkpO2lmKGYmJmYuY29sb3JiYXIpe3ZhciB2PWYuY29sb3JiYXIuY29udGFpbmVyLHk9dj9pW3ZdOmk7eSYmeS5jb2xvcnNjYWxlJiYoIllJR25CdSI9PT15LmNvbG9yc2NhbGUmJih5LmNvbG9yc2NhbGU9IllsR25CdSIpLCJZSU9yUmQiPT09eS5jb2xvcnNjYWxlJiYoeS5jb2xvcnNjYWxlPSJZbE9yUmQiKSl9aWYoInN1cmZhY2UiPT09aS50eXBlJiZvLmlzUGxhaW5PYmplY3QoaS5jb250b3Vycykpe3ZhciB4PVsieCIsInkiLCJ6Il07Zm9yKG49MDtuPHgubGVuZ3RoO24rKyl7dmFyIGI9aS5jb250b3Vyc1t4W25dXTtvLmlzUGxhaW5PYmplY3QoYikmJihiLmhpZ2hsaWdodENvbG9yJiYoYi5oaWdobGlnaHRjb2xvcj1iLmhpZ2hsaWdodENvbG9yLGRlbGV0ZSBiLmhpZ2hsaWdodENvbG9yKSxiLmhpZ2hsaWdodFdpZHRoJiYoYi5oaWdobGlnaHR3aWR0aD1iLmhpZ2hsaWdodFdpZHRoLGRlbGV0ZSBiLmhpZ2hsaWdodFdpZHRoKSl9fWlmKCJjYW5kbGVzdGljayI9PT1pLnR5cGV8fCJvaGxjIj09PWkudHlwZSl7dmFyIF89ITEhPT0oaS5pbmNyZWFzaW5nfHx7fSkuc2hvd2xlZ2VuZCx3PSExIT09KGkuZGVjcmVhc2luZ3x8e30pLnNob3dsZWdlbmQsaz1wKGkuaW5jcmVhc2luZyksTT1wKGkuZGVjcmVhc2luZyk7aWYoITEhPT1rJiYhMSE9PU0pe3ZhciBBPWQoayxNLF8sdyk7QSYmKGkubmFtZT1BKX1lbHNlIWsmJiFNfHxpLm5hbWV8fChpLm5hbWU9a3x8TSl9aWYoQXJyYXkuaXNBcnJheShpLnRyYW5zZm9ybXMpKXt2YXIgVD1pLnRyYW5zZm9ybXM7Zm9yKG49MDtuPFQubGVuZ3RoO24rKyl7dmFyIFM9VFtuXTtpZihvLmlzUGxhaW5PYmplY3QoUykpc3dpdGNoKFMudHlwZSl7Y2FzZSJmaWx0ZXIiOlMuZmlsdGVyc3JjJiYoUy50YXJnZXQ9Uy5maWx0ZXJzcmMsZGVsZXRlIFMuZmlsdGVyc3JjKSxTLmNhbGVuZGFyJiYoUy52YWx1ZWNhbGVuZGFyfHwoUy52YWx1ZWNhbGVuZGFyPVMuY2FsZW5kYXIpLGRlbGV0ZSBTLmNhbGVuZGFyKTticmVhaztjYXNlImdyb3VwYnkiOmlmKFMuc3R5bGVzPVMuc3R5bGVzfHxTLnN0eWxlLFMuc3R5bGVzJiYhQXJyYXkuaXNBcnJheShTLnN0eWxlcykpe3ZhciBFPVMuc3R5bGVzLEM9T2JqZWN0LmtleXMoRSk7Uy5zdHlsZXM9W107Zm9yKHZhciBMPTA7TDxDLmxlbmd0aDtMKyspUy5zdHlsZXMucHVzaCh7dGFyZ2V0OkNbTF0sdmFsdWU6RVtDW0xdXX0pfX19fW0oaSwibGluZSIpJiZkZWxldGUgaS5saW5lLCJtYXJrZXIiaW4gaSYmKG0oaS5tYXJrZXIsImxpbmUiKSYmZGVsZXRlIGkubWFya2VyLmxpbmUsbShpLCJtYXJrZXIiKSYmZGVsZXRlIGkubWFya2VyKSxoLmNsZWFuKGkpfX0sci5zd2FwWFlEYXRhPWZ1bmN0aW9uKHQpe3ZhciBlO2lmKG8uc3dhcEF0dHJzKHQsWyI/IiwiPzAiLCJkPyIsIj9iaW5zIiwibmJpbnM/IiwiYXV0b2Jpbj8iLCI/c3JjIiwiZXJyb3JfPyJdKSxBcnJheS5pc0FycmF5KHQueikmJkFycmF5LmlzQXJyYXkodC56WzBdKSYmKHQudHJhbnNwb3NlP2RlbGV0ZSB0LnRyYW5zcG9zZTp0LnRyYW5zcG9zZT0hMCksdC5lcnJvcl94JiZ0LmVycm9yX3kpe3ZhciByPXQuZXJyb3JfeSxuPSJjb3B5X3lzdHlsZSJpbiByP3IuY29weV95c3R5bGU6IShyLmNvbG9yfHxyLnRoaWNrbmVzc3x8ci53aWR0aCk7by5zd2FwQXR0cnModCxbImVycm9yXz8uY29weV95c3R5bGUiXSksbiYmby5zd2FwQXR0cnModCxbImVycm9yXz8uY29sb3IiLCJlcnJvcl8/LnRoaWNrbmVzcyIsImVycm9yXz8ud2lkdGgiXSl9aWYoInN0cmluZyI9PXR5cGVvZiB0LmhvdmVyaW5mbyl7dmFyIGk9dC5ob3ZlcmluZm8uc3BsaXQoIisiKTtmb3IoZT0wO2U8aS5sZW5ndGg7ZSsrKSJ4Ij09PWlbZV0/aVtlXT0ieSI6InkiPT09aVtlXSYmKGlbZV09IngiKTt0LmhvdmVyaW5mbz1pLmpvaW4oIisiKX19LHIuY29lcmNlVHJhY2VJbmRpY2VzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4oZSk/W2VdOkFycmF5LmlzQXJyYXkoZSkmJmUubGVuZ3RoP2U6dC5kYXRhLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiBlfSl9LHIubWFuYWdlQXJyYXlDb250YWluZXJzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10Lm9iaixhPXQucGFydHMscz1hLmxlbmd0aCxsPWFbcy0xXSxjPW4obCk7aWYoYyYmbnVsbD09PWUpe3ZhciB1PWEuc2xpY2UoMCxzLTEpLmpvaW4oIi4iKTtvLm5lc3RlZFByb3BlcnR5KGksdSkuZ2V0KCkuc3BsaWNlKGwsMSl9ZWxzZSBjJiZ2b2lkIDA9PT10LmdldCgpPyh2b2lkIDA9PT10LmdldCgpJiYoclt0LmFzdHJdPW51bGwpLHQuc2V0KGUpKTp0LnNldChlKX07dmFyIHY9LyhcLlteXFtcXVwuXSt8XFtbXlxbXF1cLl0rXF0pJC87ZnVuY3Rpb24geSh0KXt2YXIgZT10LnNlYXJjaCh2KTtpZihlPjApcmV0dXJuIHQuc3Vic3RyKDAsZSl9ci5oYXNQYXJlbnQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9eShlKTtyOyl7aWYociBpbiB0KXJldHVybiEwO3I9eShyKX1yZXR1cm4hMX07dmFyIHg9WyJ4IiwieSIsInoiXTtyLmNsZWFyQXhpc1R5cGVzPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKylmb3IodmFyIGk9dC5fZnVsbERhdGFbbl0sYT0wO2E8MzthKyspe3ZhciBzPXUodCxpLHhbYV0pO2lmKHMmJiJsb2ciIT09cy50eXBlKXt2YXIgbD1zLl9uYW1lLGM9cy5faWQuc3Vic3RyKDEpO2lmKCJzY2VuZSI9PT1jLnN1YnN0cigwLDUpKXtpZih2b2lkIDAhPT1yW2NdKWNvbnRpbnVlO2w9YysiLiIrbH12YXIgaD1sKyIudHlwZSI7dm9pZCAwPT09cltsXSYmdm9pZCAwPT09cltoXSYmby5uZXN0ZWRQcm9wZXJ0eSh0LmxheW91dCxoKS5zZXQobnVsbCl9fX19LHsiLi4vY29tcG9uZW50cy9jb2xvciI6NTU4LCIuLi9saWIiOjY4NCwiLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIjo3MzUsIi4uL3Bsb3RzL3Bsb3RzIjo3OTUsIi4uL3JlZ2lzdHJ5Ijo4MTcsImZhc3QtaXNudW1lcmljIjoyMTQsImdsLW1hdDQvZnJvbVF1YXQiOjI1MX1dLDcxNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL3Bsb3RfYXBpIik7ci5wbG90PW4ucGxvdCxyLm5ld1Bsb3Q9bi5uZXdQbG90LHIucmVzdHlsZT1uLnJlc3R5bGUsci5yZWxheW91dD1uLnJlbGF5b3V0LHIucmVkcmF3PW4ucmVkcmF3LHIudXBkYXRlPW4udXBkYXRlLHIucmVhY3Q9bi5yZWFjdCxyLmV4dGVuZFRyYWNlcz1uLmV4dGVuZFRyYWNlcyxyLnByZXBlbmRUcmFjZXM9bi5wcmVwZW5kVHJhY2VzLHIuYWRkVHJhY2VzPW4uYWRkVHJhY2VzLHIuZGVsZXRlVHJhY2VzPW4uZGVsZXRlVHJhY2VzLHIubW92ZVRyYWNlcz1uLm1vdmVUcmFjZXMsci5wdXJnZT1uLnB1cmdlLHIuYWRkRnJhbWVzPW4uYWRkRnJhbWVzLHIuZGVsZXRlRnJhbWVzPW4uZGVsZXRlRnJhbWVzLHIuYW5pbWF0ZT1uLmFuaW1hdGUsci5zZXRQbG90Q29uZmlnPW4uc2V0UGxvdENvbmZpZyxyLnRvSW1hZ2U9dCgiLi90b19pbWFnZSIpLHIudmFsaWRhdGU9dCgiLi92YWxpZGF0ZSIpLHIuZG93bmxvYWRJbWFnZT10KCIuLi9zbmFwc2hvdC9kb3dubG9hZCIpO3ZhciBpPXQoIi4vdGVtcGxhdGVfYXBpIik7ci5tYWtlVGVtcGxhdGU9aS5tYWtlVGVtcGxhdGUsci52YWxpZGF0ZVRlbXBsYXRlPWkudmFsaWRhdGVUZW1wbGF0ZX0seyIuLi9zbmFwc2hvdC9kb3dubG9hZCI6ODE5LCIuL3Bsb3RfYXBpIjo3MTksIi4vdGVtcGxhdGVfYXBpIjo3MjQsIi4vdG9faW1hZ2UiOjcyNSwiLi92YWxpZGF0ZSI6NzI2fV0sNzE4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2xpYi9uZXN0ZWRfcHJvcGVydHkiKSxpPXQoIi4uL2xpYi9pc19wbGFpbl9vYmplY3QiKSxhPXQoIi4uL2xpYi9ub29wIiksbz10KCIuLi9saWIvbG9nZ2VycyIpLHM9dCgiLi4vbGliL3NlYXJjaCIpLnNvcnRlckFzYyxsPXQoIi4uL3JlZ2lzdHJ5Iik7ci5jb250YWluZXJBcnJheU1hdGNoPXQoIi4vY29udGFpbmVyX2FycmF5X21hdGNoIik7dmFyIGM9ci5pc0FkZFZhbD1mdW5jdGlvbih0KXtyZXR1cm4iYWRkIj09PXR8fGkodCl9LHU9ci5pc1JlbW92ZVZhbD1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09PXR8fCJyZW1vdmUiPT09dH07ci5hcHBseUNvbnRhaW5lckFycmF5Q2hhbmdlcz1mdW5jdGlvbih0LGUscixpKXt2YXIgaD1lLmFzdHIsZj1sLmdldENvbXBvbmVudE1ldGhvZChoLCJzdXBwbHlMYXlvdXREZWZhdWx0cyIpLHA9bC5nZXRDb21wb25lbnRNZXRob2QoaCwiZHJhdyIpLGQ9bC5nZXRDb21wb25lbnRNZXRob2QoaCwiZHJhd09uZSIpLGc9aS5yZXBsb3R8fGkucmVjYWxjfHxmPT09YXx8cD09PWEsbT10LmxheW91dCx2PXQuX2Z1bGxMYXlvdXQ7aWYoclsiIl0pe09iamVjdC5rZXlzKHIpLmxlbmd0aD4xJiZvLndhcm4oIkZ1bGwgYXJyYXkgZWRpdHMgYXJlIGluY29tcGF0aWJsZSB3aXRoIG90aGVyIGVkaXRzIixoKTt2YXIgeT1yWyIiXVsiIl07aWYodSh5KSllLnNldChudWxsKTtlbHNle2lmKCFBcnJheS5pc0FycmF5KHkpKXJldHVybiBvLndhcm4oIlVucmVjb2duaXplZCBmdWxsIGFycmF5IGVkaXQgdmFsdWUiLGgseSksITA7ZS5zZXQoeSl9cmV0dXJuIWcmJihmKG0sdikscCh0KSwhMCl9dmFyIHgsYixfLHcsayxNLEEsVD1PYmplY3Qua2V5cyhyKS5tYXAoTnVtYmVyKS5zb3J0KHMpLFM9ZS5nZXQoKSxFPVN8fFtdLEM9bih2LGgpLmdldCgpLEw9W10sej0tMSxQPUUubGVuZ3RoO2Zvcih4PTA7eDxULmxlbmd0aDt4KyspaWYodz1yW189VFt4XV0saz1PYmplY3Qua2V5cyh3KSxNPXdbIiJdLEE9YyhNKSxfPDB8fF8+RS5sZW5ndGgtKEE/MDoxKSlvLndhcm4oImluZGV4IG91dCBvZiByYW5nZSIsaCxfKTtlbHNlIGlmKHZvaWQgMCE9PU0pay5sZW5ndGg+MSYmby53YXJuKCJJbnNlcnRpb24gJiByZW1vdmFsIGFyZSBpbmNvbXBhdGlibGUgd2l0aCBlZGl0cyB0byB0aGUgc2FtZSBpbmRleC4iLGgsXyksdShNKT9MLnB1c2goXyk6QT8oImFkZCI9PT1NJiYoTT17fSksRS5zcGxpY2UoXywwLE0pLEMmJkMuc3BsaWNlKF8sMCx7fSkpOm8ud2FybigiVW5yZWNvZ25pemVkIGZ1bGwgb2JqZWN0IGVkaXQgdmFsdWUiLGgsXyxNKSwtMT09PXomJih6PV8pO2Vsc2UgZm9yKGI9MDtiPGsubGVuZ3RoO2IrKyluKEVbX10sa1tiXSkuc2V0KHdba1tiXV0pO2Zvcih4PUwubGVuZ3RoLTE7eD49MDt4LS0pRS5zcGxpY2UoTFt4XSwxKSxDJiZDLnNwbGljZShMW3hdLDEpO2lmKEUubGVuZ3RoP1N8fGUuc2V0KEUpOmUuc2V0KG51bGwpLGcpcmV0dXJuITE7aWYoZihtLHYpLGQhPT1hKXt2YXIgSTtpZigtMT09PXopST1UO2Vsc2V7Zm9yKFA9TWF0aC5tYXgoRS5sZW5ndGgsUCksST1bXSx4PTA7eDxULmxlbmd0aCYmISgoXz1UW3hdKT49eik7eCsrKUkucHVzaChfKTtmb3IoeD16O3g8UDt4KyspSS5wdXNoKHgpfWZvcih4PTA7eDxJLmxlbmd0aDt4KyspZCh0LElbeF0pfWVsc2UgcCh0KTtyZXR1cm4hMH19LHsiLi4vbGliL2lzX3BsYWluX29iamVjdCI6Njg2LCIuLi9saWIvbG9nZ2VycyI6Njg5LCIuLi9saWIvbmVzdGVkX3Byb3BlcnR5Ijo2OTIsIi4uL2xpYi9ub29wIjo2OTMsIi4uL2xpYi9zZWFyY2giOjcwMywiLi4vcmVnaXN0cnkiOjgxNywiLi9jb250YWluZXJfYXJyYXlfbWF0Y2giOjcxNH1dLDcxOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiZmFzdC1pc251bWVyaWMiKSxhPXQoImhhcy1ob3ZlciIpLG89dCgiLi4vbGliIikscz10KCIuLi9saWIvZXZlbnRzIiksbD10KCIuLi9saWIvcXVldWUiKSxjPXQoIi4uL3JlZ2lzdHJ5IiksdT10KCIuL3Bsb3Rfc2NoZW1hIiksaD10KCIuLi9wbG90cy9wbG90cyIpLGY9dCgiLi4vcGxvdHMvcG9sYXIvbGVnYWN5IikscD10KCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGQ9dCgiLi4vY29tcG9uZW50cy9kcmF3aW5nIiksZz10KCIuLi9jb21wb25lbnRzL2NvbG9yIiksbT10KCIuLi9jb21wb25lbnRzL2NvbG9yYmFyL2Nvbm5lY3QiKSx2PXQoIi4uL3Bsb3RzL2NhcnRlc2lhbi9ncmFwaF9pbnRlcmFjdCIpLmluaXRJbnRlcmFjdGlvbnMseT10KCIuLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyIpLHg9dCgiLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksYj10KCIuL3Bsb3RfY29uZmlnIiksXz10KCIuL21hbmFnZV9hcnJheXMiKSx3PXQoIi4vaGVscGVycyIpLGs9dCgiLi9zdWJyb3V0aW5lcyIpLE09dCgiLi9lZGl0X3R5cGVzIiksQT10KCIuLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RhbnRzIikuQVhfTkFNRV9QQVRURVJOLFQ9MDtmdW5jdGlvbiBTKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQ7ZS5fcmVkcmF3RnJvbUF1dG9NYXJnaW5Db3VudD9lLl9yZWRyYXdGcm9tQXV0b01hcmdpbkNvdW50LS06dC5lbWl0KCJwbG90bHlfYWZ0ZXJwbG90Iil9ZnVuY3Rpb24gRSh0LGUpe3RyeXt0Ll9mdWxsTGF5b3V0Ll9wYXBlci5zdHlsZSgiYmFja2dyb3VuZCIsZSl9Y2F0Y2godCl7by5lcnJvcih0KX19ZnVuY3Rpb24gQyh0LGUpe0UodCxnLmNvbWJpbmUoZSwid2hpdGUiKSl9ZnVuY3Rpb24gTCh0LGUpe3QuX2NvbnRleHR8fCh0Ll9jb250ZXh0PW8uZXh0ZW5kRGVlcCh7fSxiKSk7dmFyIHIsbixpLHM9dC5fY29udGV4dDtpZihlKXtmb3Iobj1PYmplY3Qua2V5cyhlKSxyPTA7cjxuLmxlbmd0aDtyKyspImVkaXRhYmxlIiE9PShpPW5bcl0pJiYiZWRpdHMiIT09aSYmaSBpbiBzJiYoInNldEJhY2tncm91bmQiPT09aSYmIm9wYXF1ZSI9PT1lW2ldP3NbaV09QzpzW2ldPWVbaV0pO2UucGxvdDNkUGl4ZWxSYXRpbyYmIXMucGxvdEdsUGl4ZWxSYXRpbyYmKHMucGxvdEdsUGl4ZWxSYXRpbz1zLnBsb3QzZFBpeGVsUmF0aW8pO3ZhciBsPWUuZWRpdGFibGU7aWYodm9pZCAwIT09bClmb3Iocy5lZGl0YWJsZT1sLG49T2JqZWN0LmtleXMocy5lZGl0cykscj0wO3I8bi5sZW5ndGg7cisrKXMuZWRpdHNbbltyXV09bDtpZihlLmVkaXRzKWZvcihuPU9iamVjdC5rZXlzKGUuZWRpdHMpLHI9MDtyPG4ubGVuZ3RoO3IrKykoaT1uW3JdKWluIHMuZWRpdHMmJihzLmVkaXRzW2ldPWUuZWRpdHNbaV0pfXMuc3RhdGljUGxvdCYmKHMuZWRpdGFibGU9ITEscy5lZGl0cz17fSxzLmF1dG9zaXphYmxlPSExLHMuc2Nyb2xsWm9vbT0hMSxzLmRvdWJsZUNsaWNrPSExLHMuc2hvd1RpcHM9ITEscy5zaG93TGluaz0hMSxzLmRpc3BsYXlNb2RlQmFyPSExKSwiaG92ZXIiIT09cy5kaXNwbGF5TW9kZUJhcnx8YXx8KHMuZGlzcGxheU1vZGVCYXI9ITApLCJ0cmFuc3BhcmVudCIhPT1zLnNldEJhY2tncm91bmQmJiJmdW5jdGlvbiI9PXR5cGVvZiBzLnNldEJhY2tncm91bmR8fChzLnNldEJhY2tncm91bmQ9RSl9ZnVuY3Rpb24geih0LGUpe3ZhciByLG4saT1lKzEsYT1bXTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKShuPXRbcl0pPDA/YS5wdXNoKGkrbik6YS5wdXNoKG4pO3JldHVybiBhfWZ1bmN0aW9uIFAodCxlLHIpe3ZhciBuLGk7Zm9yKG49MDtuPGUubGVuZ3RoO24rKyl7aWYoKGk9ZVtuXSkhPT1wYXJzZUludChpLDEwKSl0aHJvdyBuZXcgRXJyb3IoImFsbCB2YWx1ZXMgaW4gIityKyIgbXVzdCBiZSBpbnRlZ2VycyIpO2lmKGk+PXQuZGF0YS5sZW5ndGh8fGk8LXQuZGF0YS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKHIrIiBtdXN0IGJlIHZhbGlkIGluZGljZXMgZm9yIGdkLmRhdGEuIik7aWYoZS5pbmRleE9mKGksbisxKT4tMXx8aT49MCYmZS5pbmRleE9mKC10LmRhdGEubGVuZ3RoK2kpPi0xfHxpPDAmJmUuaW5kZXhPZih0LmRhdGEubGVuZ3RoK2kpPi0xKXRocm93IG5ldyBFcnJvcigiZWFjaCBpbmRleCBpbiAiK3IrIiBtdXN0IGJlIHVuaXF1ZS4iKX19ZnVuY3Rpb24gSSh0LGUscil7aWYoIUFycmF5LmlzQXJyYXkodC5kYXRhKSl0aHJvdyBuZXcgRXJyb3IoImdkLmRhdGEgbXVzdCBiZSBhbiBhcnJheS4iKTtpZigidW5kZWZpbmVkIj09dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yKCJjdXJyZW50SW5kaWNlcyBpcyBhIHJlcXVpcmVkIGFyZ3VtZW50LiIpO2lmKEFycmF5LmlzQXJyYXkoZSl8fChlPVtlXSksUCh0LGUsImN1cnJlbnRJbmRpY2VzIiksInVuZGVmaW5lZCI9PXR5cGVvZiByfHxBcnJheS5pc0FycmF5KHIpfHwocj1bcl0pLCJ1bmRlZmluZWQiIT10eXBlb2YgciYmUCh0LHIsIm5ld0luZGljZXMiKSwidW5kZWZpbmVkIiE9dHlwZW9mIHImJmUubGVuZ3RoIT09ci5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJjdXJyZW50IGFuZCBuZXcgaW5kaWNlcyBtdXN0IGJlIG9mIGVxdWFsIGxlbmd0aC4iKX1mdW5jdGlvbiBPKHQsZSxyLG4sYSl7IWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPW8uaXNQbGFpbk9iamVjdChuKTtpZighQXJyYXkuaXNBcnJheSh0LmRhdGEpKXRocm93IG5ldyBFcnJvcigiZ2QuZGF0YSBtdXN0IGJlIGFuIGFycmF5Iik7aWYoIW8uaXNQbGFpbk9iamVjdChlKSl0aHJvdyBuZXcgRXJyb3IoInVwZGF0ZSBtdXN0IGJlIGEga2V5OnZhbHVlIG9iamVjdCIpO2lmKCJ1bmRlZmluZWQiPT10eXBlb2Ygcil0aHJvdyBuZXcgRXJyb3IoImluZGljZXMgbXVzdCBiZSBhbiBpbnRlZ2VyIG9yIGFycmF5IG9mIGludGVnZXJzIik7Zm9yKHZhciBhIGluIFAodCxyLCJpbmRpY2VzIiksZSl7aWYoIUFycmF5LmlzQXJyYXkoZVthXSl8fGVbYV0ubGVuZ3RoIT09ci5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJhdHRyaWJ1dGUgIithKyIgbXVzdCBiZSBhbiBhcnJheSBvZiBsZW5ndGggZXF1YWwgdG8gaW5kaWNlcyBhcnJheSBsZW5ndGgiKTtpZihpJiYoIShhIGluIG4pfHwhQXJyYXkuaXNBcnJheShuW2FdKXx8blthXS5sZW5ndGghPT1lW2FdLmxlbmd0aCkpdGhyb3cgbmV3IEVycm9yKCJ3aGVuIG1heFBvaW50cyBpcyBzZXQgYXMgYSBrZXk6dmFsdWUgb2JqZWN0IGl0IG11c3QgY29udGFpbiBhIDE6MSBjb3JyaXNwb25kZW5jZSB3aXRoIHRoZSBrZXlzIGFuZCBudW1iZXIgb2YgdHJhY2VzIGluIHRoZSB1cGRhdGUgb2JqZWN0Iil9fSh0LGUscixuKTtmb3IodmFyIHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGEscyxsLGMsdSxoPW8uaXNQbGFpbk9iamVjdChuKSxmPVtdO2Zvcih2YXIgcCBpbiBBcnJheS5pc0FycmF5KHIpfHwocj1bcl0pLHI9eihyLHQuZGF0YS5sZW5ndGgtMSksZSlmb3IodmFyIGQ9MDtkPHIubGVuZ3RoO2QrKyl7aWYoYT10LmRhdGFbcltkXV0scz0obD1vLm5lc3RlZFByb3BlcnR5KGEscCkpLmdldCgpLGM9ZVtwXVtkXSwhby5pc0FycmF5T3JUeXBlZEFycmF5KGMpKXRocm93IG5ldyBFcnJvcigiYXR0cmlidXRlOiAiK3ArIiBpbmRleDogIitkKyIgbXVzdCBiZSBhbiBhcnJheSIpO2lmKCFvLmlzQXJyYXlPclR5cGVkQXJyYXkocykpdGhyb3cgbmV3IEVycm9yKCJjYW5ub3QgZXh0ZW5kIG1pc3Npbmcgb3Igbm9uLWFycmF5IGF0dHJpYnV0ZTogIitwKTtpZihzLmNvbnN0cnVjdG9yIT09Yy5jb25zdHJ1Y3Rvcil0aHJvdyBuZXcgRXJyb3IoImNhbm5vdCBleHRlbmQgYXJyYXkgd2l0aCBhbiBhcnJheSBvZiBhIGRpZmZlcmVudCB0eXBlOiAiK3ApO3U9aD9uW3BdW2RdOm4saSh1KXx8KHU9LTEpLGYucHVzaCh7cHJvcDpsLHRhcmdldDpzLGluc2VydDpjLG1heHA6TWF0aC5mbG9vcih1KX0pfXJldHVybiBmfSh0LGUscixuKSxsPXt9LGM9e30sdT0wO3U8cy5sZW5ndGg7dSsrKXt2YXIgaD1zW3VdLnByb3AsZj1zW3VdLm1heHAscD1hKHNbdV0udGFyZ2V0LHNbdV0uaW5zZXJ0LGYpO2guc2V0KHBbMF0pLEFycmF5LmlzQXJyYXkobFtoLmFzdHJdKXx8KGxbaC5hc3RyXT1bXSksbFtoLmFzdHJdLnB1c2gocFsxXSksQXJyYXkuaXNBcnJheShjW2guYXN0cl0pfHwoY1toLmFzdHJdPVtdKSxjW2guYXN0cl0ucHVzaChzW3VdLnRhcmdldC5sZW5ndGgpfXJldHVybnt1cGRhdGU6bCxtYXhQb2ludHM6Y319ZnVuY3Rpb24gRCh0LGUpe3ZhciByPW5ldyB0LmNvbnN0cnVjdG9yKHQubGVuZ3RoK2UubGVuZ3RoKTtyZXR1cm4gci5zZXQodCksci5zZXQoZSx0Lmxlbmd0aCkscn1mdW5jdGlvbiBSKHQpe3JldHVybiB2b2lkIDA9PT10P251bGw6dH1mdW5jdGlvbiBCKHQsZSxyKXt2YXIgbixpLGE9dC5fZnVsbExheW91dCxzPXQuX2Z1bGxEYXRhLGw9dC5kYXRhLGY9TS50cmFjZUZsYWdzKCksZD17fSxnPXt9O2Z1bmN0aW9uIG0oKXtyZXR1cm4gci5tYXAoZnVuY3Rpb24oKXt9KX1mdW5jdGlvbiB2KHQpe3ZhciBlPXAuaWQybmFtZSh0KTstMT09PWkuaW5kZXhPZihlKSYmaS5wdXNoKGUpfWZ1bmN0aW9uIHkodCl7cmV0dXJuIkxBWU9VVCIrdCsiLmF1dG9yYW5nZSJ9ZnVuY3Rpb24geCh0KXtyZXR1cm4iTEFZT1VUIit0KyIucmFuZ2UifWZ1bmN0aW9uIGIobixpLGEpe3ZhciBzO0FycmF5LmlzQXJyYXkobik/bi5mb3JFYWNoKGZ1bmN0aW9uKHQpe2IodCxpLGEpfSk6biBpbiBlfHx3Lmhhc1BhcmVudChlLG4pfHwocz0iTEFZT1VUIj09PW4uc3Vic3RyKDAsNik/by5uZXN0ZWRQcm9wZXJ0eSh0LmxheW91dCxuLnJlcGxhY2UoIkxBWU9VVCIsIiIpKTpvLm5lc3RlZFByb3BlcnR5KGxbclthXV0sbiksbiBpbiBnfHwoZ1tuXT1tKCkpLHZvaWQgMD09PWdbbl1bYV0mJihnW25dW2FdPVIocy5nZXQoKSkpLHZvaWQgMCE9PWkmJnMuc2V0KGkpKX1mb3IodmFyIF8gaW4gZSl7aWYody5oYXNQYXJlbnQoZSxfKSl0aHJvdyBuZXcgRXJyb3IoImNhbm5vdCBzZXQgIitfKyJhbmQgYSBwYXJlbnQgYXR0cmlidXRlIHNpbXVsdGFuZW91c2x5Iik7dmFyIGssQSxULFMsRSxDLEw9ZVtfXTtpZihkW19dPUwsIkxBWU9VVCIhPT1fLnN1YnN0cigwLDYpKXtmb3IoZ1tfXT1tKCksbj0wO248ci5sZW5ndGg7bisrKWlmKGs9bFtyW25dXSxBPXNbcltuXV0sUz0oVD1vLm5lc3RlZFByb3BlcnR5KGssXykpLmdldCgpLHZvaWQgMCE9PShFPUFycmF5LmlzQXJyYXkoTCk/TFtuJUwubGVuZ3RoXTpMKSl7dmFyIHo9VC5wYXJ0c1tULnBhcnRzLmxlbmd0aC0xXSxQPV8uc3Vic3RyKDAsXy5sZW5ndGgtei5sZW5ndGgtMSksST1QP1ArIi4iOiIiLE89UD9vLm5lc3RlZFByb3BlcnR5KEEsUCkuZ2V0KCk6QTtpZigoQz11LmdldFRyYWNlVmFsT2JqZWN0KEEsVC5wYXJ0cykpJiZDLmltcGxpZWRFZGl0cyYmbnVsbCE9PUUpZm9yKHZhciBEIGluIEMuaW1wbGllZEVkaXRzKWIoby5yZWxhdGl2ZUF0dHIoXyxEKSxDLmltcGxpZWRFZGl0c1tEXSxuKTtlbHNlIGlmKCJ0aGlja25lc3Ntb2RlIiE9PXomJiJsZW5tb2RlIiE9PXp8fFM9PT1FfHwiZnJhY3Rpb24iIT09RSYmInBpeGVscyIhPT1FfHwhTyl7aWYoInR5cGUiPT09XyYmInBpZSI9PT1FIT0oInBpZSI9PT1TKSl7dmFyIEI9IngiLEY9InkiOyJiYXIiIT09RSYmImJhciIhPT1TfHwiaCIhPT1rLm9yaWVudGF0aW9ufHwoQj0ieSIsRj0ieCIpLG8uc3dhcEF0dHJzKGssWyI/IiwiP3NyYyJdLCJsYWJlbHMiLEIpLG8uc3dhcEF0dHJzKGssWyJkPyIsIj8wIl0sImxhYmVsIixCKSxvLnN3YXBBdHRycyhrLFsiPyIsIj9zcmMiXSwidmFsdWVzIixGKSwicGllIj09PVM/KG8ubmVzdGVkUHJvcGVydHkoaywibWFya2VyLmNvbG9yIikuc2V0KG8ubmVzdGVkUHJvcGVydHkoaywibWFya2VyLmNvbG9ycyIpLmdldCgpKSxhLl9waWVsYXllci5zZWxlY3RBbGwoImcudHJhY2UiKS5yZW1vdmUoKSk6Yy50cmFjZUlzKGssImNhcnRlc2lhbiIpJiZvLm5lc3RlZFByb3BlcnR5KGssIm1hcmtlci5jb2xvcnMiKS5zZXQoby5uZXN0ZWRQcm9wZXJ0eShrLCJtYXJrZXIuY29sb3IiKS5nZXQoKSl9fWVsc2V7dmFyIE49YS5fc2l6ZSxqPU8ub3JpZW50LFY9InRvcCI9PT1qfHwiYm90dG9tIj09PWo7aWYoInRoaWNrbmVzc21vZGUiPT09eil7dmFyIFU9Vj9OLmg6Ti53O2IoSSsidGhpY2tuZXNzIixPLnRoaWNrbmVzcyooImZyYWN0aW9uIj09PUU/MS9VOlUpLG4pfWVsc2V7dmFyIHE9Vj9OLnc6Ti5oO2IoSSsibGVuIixPLmxlbiooImZyYWN0aW9uIj09PUU/MS9xOnEpLG4pfX1nW19dW25dPVIoUyk7aWYoLTEhPT1bInN3YXB4eSIsInN3YXB4eWF4ZXMiLCJvcmllbnRhdGlvbiIsIm9yaWVudGF0aW9uYXhlcyJdLmluZGV4T2YoXykpe2lmKCJvcmllbnRhdGlvbiI9PT1fKXtULnNldChFKTt2YXIgSD1rLngmJiFrLnk/ImgiOiJ2IjtpZigoVC5nZXQoKXx8SCk9PT1BLm9yaWVudGF0aW9uKWNvbnRpbnVlfWVsc2Uib3JpZW50YXRpb25heGVzIj09PV8mJihrLm9yaWVudGF0aW9uPXt2OiJoIixoOiJ2In1bQS5vcmllbnRhdGlvbl0pO3cuc3dhcFhZRGF0YShrKSxmLmNhbGM9Zi5jbGVhckF4aXNUeXBlcz0hMH1lbHNlLTEhPT1oLmRhdGFBcnJheUNvbnRhaW5lcnMuaW5kZXhPZihULnBhcnRzWzBdKT8ody5tYW5hZ2VBcnJheUNvbnRhaW5lcnMoVCxFLGcpLGYuY2FsYz0hMCk6KEM/Qy5hcnJheU9rJiYoby5pc0FycmF5T3JUeXBlZEFycmF5KEUpfHxvLmlzQXJyYXlPclR5cGVkQXJyYXkoUykpP2YuY2FsYz0hMDpNLnVwZGF0ZShmLEMpOmYuY2FsYz0hMCxULnNldChFKSl9aWYoLTEhPT1bInN3YXB4eWF4ZXMiLCJvcmllbnRhdGlvbmF4ZXMiXS5pbmRleE9mKF8pJiZwLnN3YXAodCxyKSwib3JpZW50YXRpb25heGVzIj09PV8pe3ZhciBHPW8ubmVzdGVkUHJvcGVydHkodC5sYXlvdXQsImhvdmVybW9kZSIpOyJ4Ij09PUcuZ2V0KCk/Ry5zZXQoInkiKToieSI9PT1HLmdldCgpJiZHLnNldCgieCIpfWlmKC0xIT09WyJvcmllbnRhdGlvbiIsInR5cGUiXS5pbmRleE9mKF8pKXtmb3IoaT1bXSxuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBXPWxbcltuXV07Yy50cmFjZUlzKFcsImNhcnRlc2lhbiIpJiYodihXLnhheGlzfHwieCIpLHYoVy55YXhpc3x8InkiKSwidHlwZSI9PT1fJiZiKFsiYXV0b2JpbngiLCJhdXRvYmlueSJdLCEwLG4pKX1iKGkubWFwKHkpLCEwLDApLGIoaS5tYXAoeCksWzAsMV0sMCl9fWVsc2UgVD1vLm5lc3RlZFByb3BlcnR5KHQubGF5b3V0LF8ucmVwbGFjZSgiTEFZT1VUIiwiIikpLGdbX109W1IoVC5nZXQoKSldLFQuc2V0KEFycmF5LmlzQXJyYXkoTCk/TFswXTpMKSxmLmNhbGM9ITB9dmFyIFk9ITEsWD1wLmxpc3QodCk7Zm9yKG49MDtuPFgubGVuZ3RoO24rKylpZihYW25dLmF1dG9yYW5nZSl7WT0hMDticmVha31yZXR1cm4oZi5jYWxjfHxmLmNhbGNJZkF1dG9yYW5nZSYmWSkmJihmLmNsZWFyQ2FsYz0hMCksKGYuY2FsY3x8Zi5wbG90fHxmLmNhbGNJZkF1dG9yYW5nZSkmJihmLmZ1bGxSZXBsb3Q9ITApLHtmbGFnczpmLHVuZG9pdDpnLHJlZG9pdDpkLHRyYWNlczpyLGV2ZW50RGF0YTpvLmV4dGVuZERlZXBOb0FycmF5cyhbXSxbZCxyXSl9fWZ1bmN0aW9uIEYodCxlKXt2YXIgcj1lP2Z1bmN0aW9uKHQpe3JldHVybiBrLmRvVGlja3NSZWxheW91dCh0LGUpfTprLmRvVGlja3NSZWxheW91dDt0LnB1c2gocixrLmRyYXdEYXRhLGsuZmluYWxEcmF3KX1yLnBsb3Q9ZnVuY3Rpb24odCxlLGksYSl7dmFyIGw7aWYodD1vLmdldEdyYXBoRGl2KHQpLHMuaW5pdCh0KSxvLmlzUGxhaW5PYmplY3QoZSkpe3ZhciB1PWU7ZT11LmRhdGEsaT11LmxheW91dCxhPXUuY29uZmlnLGw9dS5mcmFtZXN9aWYoITE9PT1zLnRyaWdnZXJIYW5kbGVyKHQsInBsb3RseV9iZWZvcmVwbG90IixbZSxpLGFdKSlyZXR1cm4gUHJvbWlzZS5yZWplY3QoKTtlfHxpfHxvLmlzUGxvdERpdih0KXx8by53YXJuKCJDYWxsaW5nIFBsb3RseS5wbG90IGFzIGlmIHJlZHJhd2luZyBidXQgdGhpcyBjb250YWluZXIgZG9lc24ndCB5ZXQgaGF2ZSBhIHBsb3QuIix0KSxMKHQsYSksaXx8KGk9e30pLG4uc2VsZWN0KHQpLmNsYXNzZWQoImpzLXBsb3RseS1wbG90IiwhMCksZC5tYWtlVGVzdGVyKCksZGVsZXRlIGQuYmFzZVVybCxBcnJheS5pc0FycmF5KHQuX3Byb21pc2VzKXx8KHQuX3Byb21pc2VzPVtdKTt2YXIgZz0wPT09KHQuZGF0YXx8W10pLmxlbmd0aCYmQXJyYXkuaXNBcnJheShlKTtpZihBcnJheS5pc0FycmF5KGUpJiYody5jbGVhbkRhdGEoZSksZz90LmRhdGE9ZTp0LmRhdGEucHVzaC5hcHBseSh0LmRhdGEsZSksdC5lbXB0eT0hMSksdC5sYXlvdXQmJiFnfHwodC5sYXlvdXQ9dy5jbGVhbkxheW91dChpKSksdC5fZHJhZ2dpbmcmJiF0Ll90cmFuc2l0aW9uaW5nKXJldHVybiB0Ll9yZXBsb3RQZW5kaW5nPSEwLFByb21pc2UucmVqZWN0KCk7dC5fcmVwbG90UGVuZGluZz0hMSxoLnN1cHBseURlZmF1bHRzKHQpO3ZhciB5PXQuX2Z1bGxMYXlvdXQsYj15Ll9oYXMoImNhcnRlc2lhbiIpO2lmKCF5Ll9oYXMoInBvbGFyIikmJmUmJmVbMF0mJmVbMF0ucilyZXR1cm4gby5sb2coIkxlZ2FjeSBwb2xhciBjaGFydHMgYXJlIGRlcHJlY2F0ZWQhIiksZnVuY3Rpb24odCxlLHIpe3ZhciBpPW4uc2VsZWN0KHQpLnNlbGVjdEFsbCgiLnBsb3QtY29udGFpbmVyIikuZGF0YShbMF0pO2kuZW50ZXIoKS5pbnNlcnQoImRpdiIsIjpmaXJzdC1jaGlsZCIpLmNsYXNzZWQoInBsb3QtY29udGFpbmVyIHBsb3RseSIsITApO3ZhciBhPWkuc2VsZWN0QWxsKCIuc3ZnLWNvbnRhaW5lciIpLmRhdGEoWzBdKTthLmVudGVyKCkuYXBwZW5kKCJkaXYiKS5jbGFzc2VkKCJzdmctY29udGFpbmVyIiwhMCkuc3R5bGUoInBvc2l0aW9uIiwicmVsYXRpdmUiKSxhLmh0bWwoIiIpLGUmJih0LmRhdGE9ZSk7ciYmKHQubGF5b3V0PXIpO2YubWFuYWdlci5maWxsTGF5b3V0KHQpLGEuc3R5bGUoe3dpZHRoOnQuX2Z1bGxMYXlvdXQud2lkdGgrInB4IixoZWlnaHQ6dC5fZnVsbExheW91dC5oZWlnaHQrInB4In0pLHQuZnJhbWV3b3JrPWYubWFuYWdlci5mcmFtZXdvcmsodCksdC5mcmFtZXdvcmsoe2RhdGE6dC5kYXRhLGxheW91dDp0LmxheW91dH0sYS5ub2RlKCkpLHQuZnJhbWV3b3JrLnNldFVuZG9Qb2ludCgpO3ZhciBzPXQuZnJhbWV3b3JrLnN2ZygpLGw9MSxjPXQuX2Z1bGxMYXlvdXQudGl0bGU7IiIhPT1jJiZjfHwobD0wKTt2YXIgdT1mdW5jdGlvbigpe3RoaXMuY2FsbCh4LmNvbnZlcnRUb1RzcGFucyx0KX0scD1zLnNlbGVjdCgiLnRpdGxlLWdyb3VwIHRleHQiKS5jYWxsKHUpO2lmKHQuX2NvbnRleHQuZWRpdHMudGl0bGVUZXh0KXt2YXIgZD1vLl8odCwiQ2xpY2sgdG8gZW50ZXIgUGxvdCB0aXRsZSIpO2MmJmMhPT1kfHwobD0uMixwLmF0dHIoeyJkYXRhLXVuZm9ybWF0dGVkIjpkfSkudGV4dChkKS5zdHlsZSh7b3BhY2l0eTpsfSkub24oIm1vdXNlb3Zlci5vcGFjaXR5IixmdW5jdGlvbigpe24uc2VsZWN0KHRoaXMpLnRyYW5zaXRpb24oKS5kdXJhdGlvbigxMDApLnN0eWxlKCJvcGFjaXR5IiwxKX0pLm9uKCJtb3VzZW91dC5vcGFjaXR5IixmdW5jdGlvbigpe24uc2VsZWN0KHRoaXMpLnRyYW5zaXRpb24oKS5kdXJhdGlvbigxZTMpLnN0eWxlKCJvcGFjaXR5IiwwKX0pKTt2YXIgZz1mdW5jdGlvbigpe3RoaXMuY2FsbCh4Lm1ha2VFZGl0YWJsZSx7Z2Q6dH0pLm9uKCJlZGl0IixmdW5jdGlvbihlKXt0LmZyYW1ld29yayh7bGF5b3V0Ont0aXRsZTplfX0pLHRoaXMudGV4dChlKS5jYWxsKHUpLHRoaXMuY2FsbChnKX0pLm9uKCJjYW5jZWwiLGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5hdHRyKCJkYXRhLXVuZm9ybWF0dGVkIik7dGhpcy50ZXh0KHQpLmNhbGwodSl9KX07cC5jYWxsKGcpfXJldHVybiB0Ll9jb250ZXh0LnNldEJhY2tncm91bmQodCx0Ll9mdWxsTGF5b3V0LnBhcGVyX2JnY29sb3IpLGguYWRkTGlua3ModCksUHJvbWlzZS5yZXNvbHZlKCl9KHQsZSxpKTt5Ll9yZXBsb3R0aW5nPSEwLGcmJlcodCksdC5mcmFtZXdvcmshPT1XJiYodC5mcmFtZXdvcms9VyxXKHQpKSxkLmluaXRHcmFkaWVudHModCksZyYmcC5zYXZlU2hvd1NwaWtlSW5pdGlhbCh0KTt2YXIgXz0hdC5jYWxjZGF0YXx8dC5jYWxjZGF0YS5sZW5ndGghPT0odC5fZnVsbERhdGF8fFtdKS5sZW5ndGg7XyYmaC5kb0NhbGNkYXRhKHQpO2Zvcih2YXIgTT0wO008dC5jYWxjZGF0YS5sZW5ndGg7TSsrKXQuY2FsY2RhdGFbTV1bMF0udHJhY2U9dC5fZnVsbERhdGFbTV07dmFyIEE9SlNPTi5zdHJpbmdpZnkoeS5fc2l6ZSk7ZnVuY3Rpb24gVCgpe3ZhciBlLHIsbixpPXQuY2FsY2RhdGE7Zm9yKGguY2xlYXJBdXRvTWFyZ2luSWRzKHQpLGsuZHJhd01hcmdpblB1c2hlcnModCkscC5hbGxvd0F1dG9NYXJnaW4odCksZT0wO2U8aS5sZW5ndGg7ZSsrKXt2YXIgYT0obj0ocj1pW2VdKVswXS50cmFjZSkuX21vZHVsZS5jb2xvcmJhcjshMD09PW4udmlzaWJsZSYmYT9tKHQscixhKTpoLmF1dG9NYXJnaW4odCwiY2IiK24udWlkKX1yZXR1cm4gaC5kb0F1dG9NYXJnaW4odCksaC5wcmV2aW91c1Byb21pc2VzKHQpfWZ1bmN0aW9uIEUoKXt0Ll90cmFuc2l0aW9uaW5nfHwoay5kb0F1dG9SYW5nZUFuZENvbnN0cmFpbnRzKHQpLGcmJnAuc2F2ZVJhbmdlSW5pdGlhbCh0KSl9dmFyIEM9W2gucHJldmlvdXNQcm9taXNlcyxmdW5jdGlvbigpe2lmKGwpcmV0dXJuIHIuYWRkRnJhbWVzKHQsbCl9LGZ1bmN0aW9uKCl7Zm9yKHZhciBlPXkuX2Jhc2VQbG90TW9kdWxlcyxyPTA7cjxlLmxlbmd0aDtyKyspZVtyXS5kcmF3RnJhbWV3b3JrJiZlW3JdLmRyYXdGcmFtZXdvcmsodCk7cmV0dXJuIXkuX2dsY2FudmFzJiZ5Ll9oYXMoImdsIikmJih5Ll9nbGNhbnZhcz15Ll9nbGNvbnRhaW5lci5zZWxlY3RBbGwoIi5nbC1jYW52YXMiKS5kYXRhKFt7a2V5OiJjb250ZXh0TGF5ZXIiLGNvbnRleHQ6ITAscGljazohMX0se2tleToiZm9jdXNMYXllciIsY29udGV4dDohMSxwaWNrOiExfSx7a2V5OiJwaWNrTGF5ZXIiLGNvbnRleHQ6ITEscGljazohMH1dLGZ1bmN0aW9uKHQpe3JldHVybiB0LmtleX0pLHkuX2dsY2FudmFzLmVudGVyKCkuYXBwZW5kKCJjYW52YXMiKS5hdHRyKCJjbGFzcyIsZnVuY3Rpb24odCl7cmV0dXJuImdsLWNhbnZhcyBnbC1jYW52YXMtIit0LmtleS5yZXBsYWNlKCJMYXllciIsIiIpfSkuc3R5bGUoe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOjAsbGVmdDowLHdpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUiLG92ZXJmbG93OiJ2aXNpYmxlIiwicG9pbnRlci1ldmVudHMiOiJub25lIn0pKSx5Ll9nbGNhbnZhcyYmeS5fZ2xjYW52YXMuYXR0cigid2lkdGgiLHkud2lkdGgpLmF0dHIoImhlaWdodCIseS5oZWlnaHQpLGgucHJldmlvdXNQcm9taXNlcyh0KX0sVCxmdW5jdGlvbigpe2lmKEpTT04uc3RyaW5naWZ5KHkuX3NpemUpIT09QSlyZXR1cm4gby5zeW5jT3JBc3luYyhbVCxrLmxheW91dFN0eWxlc10sdCl9XTtiJiZDLnB1c2goZnVuY3Rpb24oKXtpZihfKXJldHVybiBoLmRvU2V0UG9zaXRpb25zKHQpLGMuZ2V0Q29tcG9uZW50TWV0aG9kKCJlcnJvcmJhcnMiLCJjYWxjIikodCksby5zeW5jT3JBc3luYyhbYy5nZXRDb21wb25lbnRNZXRob2QoInNoYXBlcyIsImNhbGNBdXRvcmFuZ2UiKSxjLmdldENvbXBvbmVudE1ldGhvZCgiYW5ub3RhdGlvbnMiLCJjYWxjQXV0b3JhbmdlIiksRSxjLmdldENvbXBvbmVudE1ldGhvZCgicmFuZ2VzbGlkZXIiLCJjYWxjQXV0b3JhbmdlIildLHQpO0UoKX0pLEMucHVzaChrLmxheW91dFN0eWxlcyksYiYmQy5wdXNoKGZ1bmN0aW9uKCl7cmV0dXJuIHAuZG9UaWNrcyh0LGc/IiI6InJlZHJhdyIpfSksQy5wdXNoKGsuZHJhd0RhdGEsay5maW5hbERyYXcsdixoLmFkZExpbmtzLGgucmVob3ZlcixoLmRvQXV0b01hcmdpbixoLnByZXZpb3VzUHJvbWlzZXMpO3ZhciB6PW8uc3luY09yQXN5bmMoQyx0KTtyZXR1cm4geiYmei50aGVufHwoej1Qcm9taXNlLnJlc29sdmUoKSksei50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIFModCksdH0pfSxyLnNldFBsb3RDb25maWc9ZnVuY3Rpb24odCl7cmV0dXJuIG8uZXh0ZW5kRmxhdChiLHQpfSxyLnJlZHJhdz1mdW5jdGlvbih0KXtpZih0PW8uZ2V0R3JhcGhEaXYodCksIW8uaXNQbG90RGl2KHQpKXRocm93IG5ldyBFcnJvcigiVGhpcyBlbGVtZW50IGlzIG5vdCBhIFBsb3RseSBwbG90OiAiK3QpO3JldHVybiB3LmNsZWFuRGF0YSh0LmRhdGEpLHcuY2xlYW5MYXlvdXQodC5sYXlvdXQpLHQuY2FsY2RhdGE9dm9pZCAwLHIucGxvdCh0KS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIHQuZW1pdCgicGxvdGx5X3JlZHJhdyIpLHR9KX0sci5uZXdQbG90PWZ1bmN0aW9uKHQsZSxuLGkpe3JldHVybiB0PW8uZ2V0R3JhcGhEaXYodCksaC5jbGVhblBsb3QoW10se30sdC5fZnVsbERhdGF8fFtdLHQuX2Z1bGxMYXlvdXR8fHt9LHQuY2FsY2RhdGF8fFtdKSxoLnB1cmdlKHQpLHIucGxvdCh0LGUsbixpKX0sci5leHRlbmRUcmFjZXM9ZnVuY3Rpb24gdChlLG4saSxhKXt2YXIgcz1PKGU9by5nZXRHcmFwaERpdihlKSxuLGksYSxmdW5jdGlvbih0LGUscil7dmFyIG4saTtpZihvLmlzVHlwZWRBcnJheSh0KSlpZihyPDApe3ZhciBhPW5ldyB0LmNvbnN0cnVjdG9yKDApLHM9RCh0LGUpO3I8MD8obj1zLGk9YSk6KG49YSxpPXMpfWVsc2UgaWYobj1uZXcgdC5jb25zdHJ1Y3RvcihyKSxpPW5ldyB0LmNvbnN0cnVjdG9yKHQubGVuZ3RoK2UubGVuZ3RoLXIpLHI9PT1lLmxlbmd0aCluLnNldChlKSxpLnNldCh0KTtlbHNlIGlmKHI8ZS5sZW5ndGgpe3ZhciBsPWUubGVuZ3RoLXI7bi5zZXQoZS5zdWJhcnJheShsKSksaS5zZXQodCksaS5zZXQoZS5zdWJhcnJheSgwLGwpLHQubGVuZ3RoKX1lbHNle3ZhciBjPXItZS5sZW5ndGgsdT10Lmxlbmd0aC1jO24uc2V0KHQuc3ViYXJyYXkodSkpLG4uc2V0KGUsYyksaS5zZXQodC5zdWJhcnJheSgwLHUpKX1lbHNlIG49dC5jb25jYXQoZSksaT1yPj0wJiZyPG4ubGVuZ3RoP24uc3BsaWNlKDAsbi5sZW5ndGgtcik6W107cmV0dXJuW24saV19KSxjPXIucmVkcmF3KGUpLHU9W2Uscy51cGRhdGUsaSxzLm1heFBvaW50c107cmV0dXJuIGwuYWRkKGUsci5wcmVwZW5kVHJhY2VzLHUsdCxhcmd1bWVudHMpLGN9LHIucHJlcGVuZFRyYWNlcz1mdW5jdGlvbiB0KGUsbixpLGEpe3ZhciBzPU8oZT1vLmdldEdyYXBoRGl2KGUpLG4saSxhLGZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpO2lmKG8uaXNUeXBlZEFycmF5KHQpKWlmKHI8PTApe3ZhciBhPW5ldyB0LmNvbnN0cnVjdG9yKDApLHM9RChlLHQpO3I8MD8obj1zLGk9YSk6KG49YSxpPXMpfWVsc2UgaWYobj1uZXcgdC5jb25zdHJ1Y3RvcihyKSxpPW5ldyB0LmNvbnN0cnVjdG9yKHQubGVuZ3RoK2UubGVuZ3RoLXIpLHI9PT1lLmxlbmd0aCluLnNldChlKSxpLnNldCh0KTtlbHNlIGlmKHI8ZS5sZW5ndGgpe3ZhciBsPWUubGVuZ3RoLXI7bi5zZXQoZS5zdWJhcnJheSgwLGwpKSxpLnNldChlLnN1YmFycmF5KGwpKSxpLnNldCh0LGwpfWVsc2V7dmFyIGM9ci1lLmxlbmd0aDtuLnNldChlKSxuLnNldCh0LnN1YmFycmF5KDAsYyksZS5sZW5ndGgpLGkuc2V0KHQuc3ViYXJyYXkoYykpfWVsc2Ugbj1lLmNvbmNhdCh0KSxpPXI+PTAmJnI8bi5sZW5ndGg/bi5zcGxpY2UocixuLmxlbmd0aCk6W107cmV0dXJuW24saV19KSxjPXIucmVkcmF3KGUpLHU9W2Uscy51cGRhdGUsaSxzLm1heFBvaW50c107cmV0dXJuIGwuYWRkKGUsci5leHRlbmRUcmFjZXMsdSx0LGFyZ3VtZW50cyksY30sci5hZGRUcmFjZXM9ZnVuY3Rpb24gdChlLG4saSl7ZT1vLmdldEdyYXBoRGl2KGUpO3ZhciBhLHMsYz1bXSx1PXIuZGVsZXRlVHJhY2VzLGg9dCxmPVtlLGNdLHA9W2Usbl07Zm9yKGZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpO2lmKCFBcnJheS5pc0FycmF5KHQuZGF0YSkpdGhyb3cgbmV3IEVycm9yKCJnZC5kYXRhIG11c3QgYmUgYW4gYXJyYXkuIik7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcigidHJhY2VzIG11c3QgYmUgZGVmaW5lZC4iKTtmb3IoQXJyYXkuaXNBcnJheShlKXx8KGU9W2VdKSxuPTA7bjxlLmxlbmd0aDtuKyspaWYoIm9iamVjdCIhPXR5cGVvZihpPWVbbl0pfHxBcnJheS5pc0FycmF5KGkpfHxudWxsPT09aSl0aHJvdyBuZXcgRXJyb3IoImFsbCB2YWx1ZXMgaW4gdHJhY2VzIGFycmF5IG11c3QgYmUgbm9uLWFycmF5IG9iamVjdHMiKTtpZigidW5kZWZpbmVkIj09dHlwZW9mIHJ8fEFycmF5LmlzQXJyYXkocil8fChyPVtyXSksInVuZGVmaW5lZCIhPXR5cGVvZiByJiZyLmxlbmd0aCE9PWUubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiaWYgaW5kaWNlcyBpcyBzcGVjaWZpZWQsIHRyYWNlcy5sZW5ndGggbXVzdCBlcXVhbCBpbmRpY2VzLmxlbmd0aCIpfShlLG4saSksQXJyYXkuaXNBcnJheShuKXx8KG49W25dKSxuPW4ubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBvLmV4dGVuZEZsYXQoe30sdCl9KSx3LmNsZWFuRGF0YShuKSxhPTA7YTxuLmxlbmd0aDthKyspZS5kYXRhLnB1c2goblthXSk7Zm9yKGE9MDthPG4ubGVuZ3RoO2ErKyljLnB1c2goLW4ubGVuZ3RoK2EpO2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgaSlyZXR1cm4gcz1yLnJlZHJhdyhlKSxsLmFkZChlLHUsZixoLHApLHM7QXJyYXkuaXNBcnJheShpKXx8KGk9W2ldKTt0cnl7SShlLGMsaSl9Y2F0Y2godCl7dGhyb3cgZS5kYXRhLnNwbGljZShlLmRhdGEubGVuZ3RoLW4ubGVuZ3RoLG4ubGVuZ3RoKSx0fXJldHVybiBsLnN0YXJ0U2VxdWVuY2UoZSksbC5hZGQoZSx1LGYsaCxwKSxzPXIubW92ZVRyYWNlcyhlLGMsaSksbC5zdG9wU2VxdWVuY2UoZSksc30sci5kZWxldGVUcmFjZXM9ZnVuY3Rpb24gdChlLG4pe2U9by5nZXRHcmFwaERpdihlKTt2YXIgaSxhLHM9W10sYz1yLmFkZFRyYWNlcyx1PXQsaD1bZSxzLG5dLGY9W2Usbl07aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBuKXRocm93IG5ldyBFcnJvcigiaW5kaWNlcyBtdXN0IGJlIGFuIGludGVnZXIgb3IgYXJyYXkgb2YgaW50ZWdlcnMuIik7Zm9yKEFycmF5LmlzQXJyYXkobil8fChuPVtuXSksUChlLG4sImluZGljZXMiKSwobj16KG4sZS5kYXRhLmxlbmd0aC0xKSkuc29ydChvLnNvcnRlckRlcyksaT0wO2k8bi5sZW5ndGg7aSs9MSlhPWUuZGF0YS5zcGxpY2UobltpXSwxKVswXSxzLnB1c2goYSk7dmFyIHA9ci5yZWRyYXcoZSk7cmV0dXJuIGwuYWRkKGUsYyxoLHUsZikscH0sci5tb3ZlVHJhY2VzPWZ1bmN0aW9uIHQoZSxuLGkpe3ZhciBhLHM9W10sYz1bXSx1PXQsaD10LGY9W2U9by5nZXRHcmFwaERpdihlKSxpLG5dLHA9W2UsbixpXTtpZihJKGUsbixpKSxuPUFycmF5LmlzQXJyYXkobik/bjpbbl0sInVuZGVmaW5lZCI9PXR5cGVvZiBpKWZvcihpPVtdLGE9MDthPG4ubGVuZ3RoO2ErKylpLnB1c2goLW4ubGVuZ3RoK2EpO2ZvcihpPUFycmF5LmlzQXJyYXkoaSk/aTpbaV0sbj16KG4sZS5kYXRhLmxlbmd0aC0xKSxpPXooaSxlLmRhdGEubGVuZ3RoLTEpLGE9MDthPGUuZGF0YS5sZW5ndGg7YSsrKS0xPT09bi5pbmRleE9mKGEpJiZzLnB1c2goZS5kYXRhW2FdKTtmb3IoYT0wO2E8bi5sZW5ndGg7YSsrKWMucHVzaCh7bmV3SW5kZXg6aVthXSx0cmFjZTplLmRhdGFbblthXV19KTtmb3IoYy5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubmV3SW5kZXgtZS5uZXdJbmRleH0pLGE9MDthPGMubGVuZ3RoO2ErPTEpcy5zcGxpY2UoY1thXS5uZXdJbmRleCwwLGNbYV0udHJhY2UpO2UuZGF0YT1zO3ZhciBkPXIucmVkcmF3KGUpO3JldHVybiBsLmFkZChlLHUsZixoLHApLGR9LHIucmVzdHlsZT1mdW5jdGlvbiB0KGUsbixpLGEpe2U9by5nZXRHcmFwaERpdihlKSx3LmNsZWFyUHJvbWlzZVF1ZXVlKGUpO3ZhciBzPXt9O2lmKCJzdHJpbmciPT10eXBlb2YgbilzW25dPWk7ZWxzZXtpZighby5pc1BsYWluT2JqZWN0KG4pKXJldHVybiBvLndhcm4oIlJlc3R5bGUgZmFpbC4iLG4saSxhKSxQcm9taXNlLnJlamVjdCgpO3M9by5leHRlbmRGbGF0KHt9LG4pLHZvaWQgMD09PWEmJihhPWkpfU9iamVjdC5rZXlzKHMpLmxlbmd0aCYmKGUuY2hhbmdlZD0hMCk7dmFyIGM9dy5jb2VyY2VUcmFjZUluZGljZXMoZSxhKSx1PUIoZSxzLGMpLGY9dS5mbGFncztmLmNsZWFyQ2FsYyYmKGUuY2FsY2RhdGE9dm9pZCAwKSxmLmNsZWFyQXhpc1R5cGVzJiZ3LmNsZWFyQXhpc1R5cGVzKGUsYyx7fSk7dmFyIHA9W107Zi5mdWxsUmVwbG90P3AucHVzaChyLnBsb3QpOihwLnB1c2goaC5wcmV2aW91c1Byb21pc2VzKSxoLnN1cHBseURlZmF1bHRzKGUpLGYuc3R5bGUmJnAucHVzaChrLmRvVHJhY2VTdHlsZSksZi5jb2xvcmJhcnMmJnAucHVzaChrLmRvQ29sb3JCYXJzKSxwLnB1c2goUykpLHAucHVzaChoLnJlaG92ZXIpLGwuYWRkKGUsdCxbZSx1LnVuZG9pdCx1LnRyYWNlc10sdCxbZSx1LnJlZG9pdCx1LnRyYWNlc10pO3ZhciBkPW8uc3luY09yQXN5bmMocCxlKTtyZXR1cm4gZCYmZC50aGVufHwoZD1Qcm9taXNlLnJlc29sdmUoKSksZC50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIGUuZW1pdCgicGxvdGx5X3Jlc3R5bGUiLHUuZXZlbnREYXRhKSxlfSl9LHIucmVsYXlvdXQ9ZnVuY3Rpb24gdChlLHIsbil7aWYoZT1vLmdldEdyYXBoRGl2KGUpLHcuY2xlYXJQcm9taXNlUXVldWUoZSksZS5mcmFtZXdvcmsmJmUuZnJhbWV3b3JrLmlzUG9sYXIpcmV0dXJuIFByb21pc2UucmVzb2x2ZShlKTt2YXIgaT17fTtpZigic3RyaW5nIj09dHlwZW9mIHIpaVtyXT1uO2Vsc2V7aWYoIW8uaXNQbGFpbk9iamVjdChyKSlyZXR1cm4gby53YXJuKCJSZWxheW91dCBmYWlsLiIscixuKSxQcm9taXNlLnJlamVjdCgpO2k9by5leHRlbmRGbGF0KHt9LHIpfU9iamVjdC5rZXlzKGkpLmxlbmd0aCYmKGUuY2hhbmdlZD0hMCk7dmFyIGE9VShlLGkpLHM9YS5mbGFncztzLmNhbGMmJihlLmNhbGNkYXRhPXZvaWQgMCk7dmFyIGM9W2gucHJldmlvdXNQcm9taXNlc107cy5sYXlvdXRSZXBsb3Q/Yy5wdXNoKGsubGF5b3V0UmVwbG90KTpPYmplY3Qua2V5cyhpKS5sZW5ndGgmJihoLnN1cHBseURlZmF1bHRzKGUpLHMubGVnZW5kJiZjLnB1c2goay5kb0xlZ2VuZCkscy5sYXlvdXRzdHlsZSYmYy5wdXNoKGsubGF5b3V0U3R5bGVzKSxzLmF4cmFuZ2UmJkYoYyxhLnJhbmdlc0FsdGVyZWQpLHMudGlja3MmJmMucHVzaChrLmRvVGlja3NSZWxheW91dCkscy5tb2RlYmFyJiZjLnB1c2goay5kb01vZGVCYXIpLHMuY2FtZXJhJiZjLnB1c2goay5kb0NhbWVyYSksYy5wdXNoKFMpKSxjLnB1c2goaC5yZWhvdmVyKSxsLmFkZChlLHQsW2UsYS51bmRvaXRdLHQsW2UsYS5yZWRvaXRdKTt2YXIgdT1vLnN5bmNPckFzeW5jKGMsZSk7cmV0dXJuIHUmJnUudGhlbnx8KHU9UHJvbWlzZS5yZXNvbHZlKGUpKSx1LnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gZS5lbWl0KCJwbG90bHlfcmVsYXlvdXQiLGEuZXZlbnREYXRhKSxlfSl9O3ZhciBOPS9eW3h5el1heGlzWzAtOV0qXC5yYW5nZShcW1swfDFdXF0pPyQvLGo9L15beHl6XWF4aXNbMC05XSpcLmF1dG9yYW5nZSQvLFY9L15beHl6XWF4aXNbMC05XSpcLmRvbWFpbihcW1swfDFdXF0pPyQvO2Z1bmN0aW9uIFUodCxlKXt2YXIgcixuLGksYT10LmxheW91dCxzPXQuX2Z1bGxMYXlvdXQsbD1PYmplY3Qua2V5cyhlKSxoPXAubGlzdCh0KSxmPXt9O2ZvcihuPTA7bjxsLmxlbmd0aDtuKyspaWYoMD09PWxbbl0uaW5kZXhPZigiYWxsYXhlcyIpKXtmb3IoaT0wO2k8aC5sZW5ndGg7aSsrKXt2YXIgZD1oW2ldLl9pZC5zdWJzdHIoMSksZz0tMSE9PWQuaW5kZXhPZigic2NlbmUiKT9kKyIuIjoiIixtPWxbbl0ucmVwbGFjZSgiYWxsYXhlcyIsZytoW2ldLl9uYW1lKTtlW21dfHwoZVttXT1lW2xbbl1dKX1kZWxldGUgZVtsW25dXX12YXIgdj1NLmxheW91dEZsYWdzKCkseT17fSx4PXt9O2Z1bmN0aW9uIGIodCxyKXtpZihBcnJheS5pc0FycmF5KHQpKXQuZm9yRWFjaChmdW5jdGlvbih0KXtiKHQscil9KTtlbHNlIGlmKCEodCBpbiBlfHx3Lmhhc1BhcmVudChlLHQpKSl7dmFyIG49by5uZXN0ZWRQcm9wZXJ0eShhLHQpO3QgaW4geHx8KHhbdF09UihuLmdldCgpKSksdm9pZCAwIT09ciYmbi5zZXQocil9fXZhciBrLFQ9e307ZnVuY3Rpb24gUyh0KXt2YXIgZT1wLm5hbWUyaWQodC5zcGxpdCgiLiIpWzBdKTtyZXR1cm4gVFtlXT0xLGV9Zm9yKHZhciBFIGluIGUpe2lmKHcuaGFzUGFyZW50KGUsRSkpdGhyb3cgbmV3IEVycm9yKCJjYW5ub3Qgc2V0ICIrRSsiYW5kIGEgcGFyZW50IGF0dHJpYnV0ZSBzaW11bHRhbmVvdXNseSIpO2Zvcih2YXIgQz1vLm5lc3RlZFByb3BlcnR5KGEsRSksTD1lW0VdLHo9Qy5wYXJ0cy5sZW5ndGgtMTt6PjAmJiJzdHJpbmciIT10eXBlb2YgQy5wYXJ0c1t6XTspei0tO3ZhciBQPUMucGFydHNbel0sST1DLnBhcnRzW3otMV0rIi4iK1AsTz1DLnBhcnRzLnNsaWNlKDAseikuam9pbigiLiIpLEQ9by5uZXN0ZWRQcm9wZXJ0eSh0LmxheW91dCxPKS5nZXQoKSxCPW8ubmVzdGVkUHJvcGVydHkocyxPKS5nZXQoKSxGPUMuZ2V0KCk7aWYodm9pZCAwIT09TCl7eVtFXT1MLHhbRV09InJldmVyc2UiPT09UD9MOlIoRik7dmFyIFU9dS5nZXRMYXlvdXRWYWxPYmplY3QocyxDLnBhcnRzKTtpZihVJiZVLmltcGxpZWRFZGl0cyYmbnVsbCE9PUwpZm9yKHZhciBHIGluIFUuaW1wbGllZEVkaXRzKWIoby5yZWxhdGl2ZUF0dHIoRSxHKSxVLmltcGxpZWRFZGl0c1tHXSk7aWYoLTEhPT1bIndpZHRoIiwiaGVpZ2h0Il0uaW5kZXhPZihFKSYmbnVsbD09PUwpc1tFXT10Ll9pbml0aWFsQXV0b1NpemVbRV07ZWxzZSBpZihJLm1hdGNoKE4pKVMoSSksby5uZXN0ZWRQcm9wZXJ0eShzLE8rIi5faW5wdXRSYW5nZSIpLnNldChudWxsKTtlbHNlIGlmKEkubWF0Y2goaikpe1MoSSksby5uZXN0ZWRQcm9wZXJ0eShzLE8rIi5faW5wdXRSYW5nZSIpLnNldChudWxsKTt2YXIgVz1vLm5lc3RlZFByb3BlcnR5KHMsTykuZ2V0KCk7Vy5faW5wdXREb21haW4mJihXLl9pbnB1dC5kb21haW49Vy5faW5wdXREb21haW4uc2xpY2UoKSl9ZWxzZSBJLm1hdGNoKFYpJiZvLm5lc3RlZFByb3BlcnR5KHMsTysiLl9pbnB1dERvbWFpbiIpLnNldChudWxsKTtpZigidHlwZSI9PT1QKXt2YXIgWT1ELFg9ImxpbmVhciI9PT1CLnR5cGUmJiJsb2ciPT09TCxaPSJsb2ciPT09Qi50eXBlJiYibGluZWFyIj09PUw7aWYoWHx8Wil7aWYoWSYmWS5yYW5nZSlpZihCLmF1dG9yYW5nZSlYJiYoWS5yYW5nZT1ZLnJhbmdlWzFdPlkucmFuZ2VbMF0/WzEsMl06WzIsMV0pO2Vsc2V7dmFyICQ9WS5yYW5nZVswXSxKPVkucmFuZ2VbMV07WD8oJDw9MCYmSjw9MCYmYihPKyIuYXV0b3JhbmdlIiwhMCksJDw9MD8kPUovMWU2Oko8PTAmJihKPSQvMWU2KSxiKE8rIi5yYW5nZVswXSIsTWF0aC5sb2coJCkvTWF0aC5MTjEwKSxiKE8rIi5yYW5nZVsxXSIsTWF0aC5sb2coSikvTWF0aC5MTjEwKSk6KGIoTysiLnJhbmdlWzBdIixNYXRoLnBvdygxMCwkKSksYihPKyIucmFuZ2VbMV0iLE1hdGgucG93KDEwLEopKSl9ZWxzZSBiKE8rIi5hdXRvcmFuZ2UiLCEwKTtBcnJheS5pc0FycmF5KHMuX3N1YnBsb3RzLnBvbGFyKSYmcy5fc3VicGxvdHMucG9sYXIubGVuZ3RoJiZzW0MucGFydHNbMF1dJiYicmFkaWFsYXhpcyI9PT1DLnBhcnRzWzFdJiZkZWxldGUgc1tDLnBhcnRzWzBdXS5fc3VicGxvdC52aWV3SW5pdGlhbFsicmFkaWFsYXhpcy5yYW5nZSJdLGMuZ2V0Q29tcG9uZW50TWV0aG9kKCJhbm5vdGF0aW9ucyIsImNvbnZlcnRDb29yZHMiKSh0LEIsTCxiKSxjLmdldENvbXBvbmVudE1ldGhvZCgiaW1hZ2VzIiwiY29udmVydENvb3JkcyIpKHQsQixMLGIpfWVsc2UgYihPKyIuYXV0b3JhbmdlIiwhMCksYihPKyIucmFuZ2UiLG51bGwpO28ubmVzdGVkUHJvcGVydHkocyxPKyIuX2lucHV0UmFuZ2UiKS5zZXQobnVsbCl9ZWxzZSBpZihQLm1hdGNoKEEpKXt2YXIgSz1vLm5lc3RlZFByb3BlcnR5KHMsRSkuZ2V0KCksUT0oTHx8e30pLnR5cGU7USYmIi0iIT09UXx8KFE9ImxpbmVhciIpLGMuZ2V0Q29tcG9uZW50TWV0aG9kKCJhbm5vdGF0aW9ucyIsImNvbnZlcnRDb29yZHMiKSh0LEssUSxiKSxjLmdldENvbXBvbmVudE1ldGhvZCgiaW1hZ2VzIiwiY29udmVydENvb3JkcyIpKHQsSyxRLGIpfXZhciB0dD1fLmNvbnRhaW5lckFycmF5TWF0Y2goRSk7aWYodHQpe3I9dHQuYXJyYXksbj10dC5pbmRleDt2YXIgZXQ9dHQucHJvcGVydHkscnQ9KG8ubmVzdGVkUHJvcGVydHkoYSxyKXx8W10pW25dfHx7fSxudD1ydCxpdD1VfHx7ZWRpdFR5cGU6ImNhbGMifSxhdD0tMSE9PWl0LmVkaXRUeXBlLmluZGV4T2YoImNhbGNJZkF1dG9yYW5nZSIpOyIiPT09bj8oYXQ/di5jYWxjPSEwOk0udXBkYXRlKHYsaXQpLGF0PSExKToiIj09PWV0JiYobnQ9TCxfLmlzQWRkVmFsKEwpP3hbRV09bnVsbDpfLmlzUmVtb3ZlVmFsKEwpPyh4W0VdPXJ0LG50PXJ0KTpvLndhcm4oInVucmVjb2duaXplZCBmdWxsIG9iamVjdCB2YWx1ZSIsZSkpLGF0JiYoSCh0LG50LCJ4Iil8fEgodCxudCwieSIpKT92LmNhbGM9ITA6TS51cGRhdGUodixpdCksZltyXXx8KGZbcl09e30pO3ZhciBvdD1mW3JdW25dO290fHwob3Q9ZltyXVtuXT17fSksb3RbZXRdPUwsZGVsZXRlIGVbRV19ZWxzZSJyZXZlcnNlIj09PVA/KEQucmFuZ2U/RC5yYW5nZS5yZXZlcnNlKCk6KGIoTysiLmF1dG9yYW5nZSIsITApLEQucmFuZ2U9WzEsMF0pLEIuYXV0b3JhbmdlP3YuY2FsYz0hMDp2LnBsb3Q9ITApOihzLl9oYXMoInNjYXR0ZXItbGlrZSIpJiZzLl9oYXMoInJlZ2wiKSYmImRyYWdtb2RlIj09PUUmJigibGFzc28iPT09THx8InNlbGVjdCI9PT1MKSYmImxhc3NvIiE9PUYmJiJzZWxlY3QiIT09Rj92LnBsb3Q9ITA6VT9NLnVwZGF0ZSh2LFUpOnYuY2FsYz0hMCxDLnNldChMKSl9fWZvcihyIGluIGYpe18uYXBwbHlDb250YWluZXJBcnJheUNoYW5nZXModCxvLm5lc3RlZFByb3BlcnR5KGEsciksZltyXSx2KXx8KHYucGxvdD0hMCl9dmFyIHN0PXMuX2F4aXNDb25zdHJhaW50R3JvdXBzfHxbXTtmb3IoayBpbiBUKWZvcihuPTA7bjxzdC5sZW5ndGg7bisrKXt2YXIgbHQ9c3Rbbl07aWYobHRba10pZm9yKHZhciBjdCBpbiB2LmNhbGM9ITAsbHQpVFtjdF18fChwLmdldEZyb21JZCh0LGN0KS5fY29uc3RyYWludFNocmlua2FibGU9ITApfXJldHVybihxKHQpfHxlLmhlaWdodHx8ZS53aWR0aCkmJih2LnBsb3Q9ITApLCh2LnBsb3R8fHYuY2FsYykmJih2LmxheW91dFJlcGxvdD0hMCkse2ZsYWdzOnYscmFuZ2VzQWx0ZXJlZDpULHVuZG9pdDp4LHJlZG9pdDp5LGV2ZW50RGF0YTpvLmV4dGVuZERlZXAoe30seSl9fWZ1bmN0aW9uIHEodCl7dmFyIGU9dC5fZnVsbExheW91dCxyPWUud2lkdGgsbj1lLmhlaWdodDtyZXR1cm4gdC5sYXlvdXQuYXV0b3NpemUmJmgucGxvdEF1dG9TaXplKHQsdC5sYXlvdXQsZSksZS53aWR0aCE9PXJ8fGUuaGVpZ2h0IT09bn1mdW5jdGlvbiBIKHQsZSxyKXtpZighby5pc1BsYWluT2JqZWN0KGUpKXJldHVybiExO3ZhciBuPWVbcisicmVmIl18fHIsaT1wLmdldEZyb21JZCh0LG4pO3JldHVybiBpfHxuLmNoYXJBdCgwKSE9PXJ8fChpPXAuZ2V0RnJvbUlkKHQscikpLChpfHx7fSkuYXV0b3JhbmdlfWZ1bmN0aW9uIEcodCxlLHIsbil7dmFyIGksYSxzPW4uZ2V0VmFsT2JqZWN0LGw9bi5mbGFncyxjPW4uaW1tdXRhYmxlLHU9bi5pbkFycmF5LGg9bi5hcnJheUluZGV4LGY9bi5nZCxwPW4uYXV0b3JhbmdlZDtmdW5jdGlvbiBkKCl7dmFyIHQ9aS5lZGl0VHlwZTstMSE9PXQuaW5kZXhPZigiY2FsY0lmQXV0b3JhbmdlIikmJihwfHx2b2lkIDA9PT1wJiYoSChmLGUsIngiKXx8SChmLGUsInkiKSkpP2wuY2FsYz0hMDp1JiYtMSE9PXQuaW5kZXhPZigiYXJyYXlkcmF3Iik/by5wdXNoVW5pcXVlKGwuYXJyYXlzW3VdLGgpOk0udXBkYXRlKGwsaSl9ZnVuY3Rpb24gZyh0KXtyZXR1cm4iZGF0YV9hcnJheSI9PT10LnZhbFR5cGV8fHQuYXJyYXlPa31mb3IoYSBpbiB0KXtpZihsLmNhbGMpcmV0dXJuO3ZhciBtPXRbYV0sdj1lW2FdO2lmKCJfIiE9PWEuY2hhckF0KDApJiYiZnVuY3Rpb24iIT10eXBlb2YgbSYmbSE9PXYpe2lmKCJ0aWNrMCI9PT1hfHwiZHRpY2siPT09YSl7dmFyIHk9ZS50aWNrbW9kZTtpZigiYXV0byI9PT15fHwiYXJyYXkiPT09eXx8IXkpY29udGludWV9aWYoKCJyYW5nZSIhPT1hfHwhZS5hdXRvcmFuZ2UpJiYoInptaW4iIT09YSYmInptYXgiIT09YXx8ImNvbnRvdXJjYXJwZXQiIT09ZS50eXBlKSl7dmFyIHg9ci5jb25jYXQoYSk7aWYoKGk9cyh4KSkmJighaS5fY29tcGFyZUFzSlNPTnx8SlNPTi5zdHJpbmdpZnkobSkhPT1KU09OLnN0cmluZ2lmeSh2KSkpe3ZhciBiLF89aS52YWxUeXBlLHc9ZyhpKSxrPUFycmF5LmlzQXJyYXkobSksQT1BcnJheS5pc0FycmF5KHYpO2lmKGsmJkEpe3ZhciBUPSJfaW5wdXRfIithLFM9dFtUXSxFPWVbVF07aWYoQXJyYXkuaXNBcnJheShTKSYmUz09PUUpY29udGludWV9aWYodm9pZCAwPT09dil3JiZrP2wuY2FsYz0hMDpkKCk7ZWxzZSBpZihpLl9pc0xpbmtlZFRvQXJyYXkpe3ZhciBDPVtdLEw9ITE7dXx8KGwuYXJyYXlzW2FdPUMpO3ZhciB6PU1hdGgubWluKG0ubGVuZ3RoLHYubGVuZ3RoKSxQPU1hdGgubWF4KG0ubGVuZ3RoLHYubGVuZ3RoKTtpZih6IT09UCl7aWYoImFycmF5ZHJhdyIhPT1pLmVkaXRUeXBlKXtkKCk7Y29udGludWV9TD0hMH1mb3IoYj0wO2I8ejtiKyspRyhtW2JdLHZbYl0seC5jb25jYXQoYiksby5leHRlbmRGbGF0KHtpbkFycmF5OmEsYXJyYXlJbmRleDpifSxuKSk7aWYoTClmb3IoYj16O2I8UDtiKyspQy5wdXNoKGIpfWVsc2UhXyYmby5pc1BsYWluT2JqZWN0KG0pP0cobSx2LHgsbik6dz9rJiZBP2MmJihsLmNhbGM9ITApOmshPT1BP2wuY2FsYz0hMDpkKCk6ayYmQSYmbS5sZW5ndGg9PT12Lmxlbmd0aCYmU3RyaW5nKG0pPT09U3RyaW5nKHYpfHxkKCl9fX19Zm9yKGEgaW4gZSlpZighKGEgaW4gdHx8Il8iPT09YS5jaGFyQXQoMCl8fCJmdW5jdGlvbiI9PXR5cGVvZiBlW2FdKSl7aWYoZyhpPXMoci5jb25jYXQoYSkpKSYmQXJyYXkuaXNBcnJheShlW2FdKSlyZXR1cm4gdm9pZChsLmNhbGM9ITApO2QoKX19ZnVuY3Rpb24gVyh0KXt2YXIgZT1uLnNlbGVjdCh0KSxyPXQuX2Z1bGxMYXlvdXQ7aWYoci5fY29udGFpbmVyPWUuc2VsZWN0QWxsKCIucGxvdC1jb250YWluZXIiKS5kYXRhKFswXSksci5fY29udGFpbmVyLmVudGVyKCkuaW5zZXJ0KCJkaXYiLCI6Zmlyc3QtY2hpbGQiKS5jbGFzc2VkKCJwbG90LWNvbnRhaW5lciIsITApLmNsYXNzZWQoInBsb3RseSIsITApLHIuX3BhcGVyZGl2PXIuX2NvbnRhaW5lci5zZWxlY3RBbGwoIi5zdmctY29udGFpbmVyIikuZGF0YShbMF0pLHIuX3BhcGVyZGl2LmVudGVyKCkuYXBwZW5kKCJkaXYiKS5jbGFzc2VkKCJzdmctY29udGFpbmVyIiwhMCkuc3R5bGUoInBvc2l0aW9uIiwicmVsYXRpdmUiKSxyLl9nbGNvbnRhaW5lcj1yLl9wYXBlcmRpdi5zZWxlY3RBbGwoIi5nbC1jb250YWluZXIiKS5kYXRhKFt7fV0pLHIuX2dsY29udGFpbmVyLmVudGVyKCkuYXBwZW5kKCJkaXYiKS5jbGFzc2VkKCJnbC1jb250YWluZXIiLCEwKSxyLl9wYXBlcmRpdi5zZWxlY3RBbGwoIi5tYWluLXN2ZyIpLnJlbW92ZSgpLHIuX3BhcGVyPXIuX3BhcGVyZGl2Lmluc2VydCgic3ZnIiwiOmZpcnN0LWNoaWxkIikuY2xhc3NlZCgibWFpbi1zdmciLCEwKSxyLl90b3BwYXBlcj1yLl9wYXBlcmRpdi5hcHBlbmQoInN2ZyIpLmNsYXNzZWQoIm1haW4tc3ZnIiwhMCksIXIuX3VpZCl7dmFyIGk9e307bi5zZWxlY3RBbGwoImRlZnMiKS5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5pZCYmKGlbdGhpcy5pZC5zcGxpdCgiLSIpWzFdXT0xKX0pLHIuX3VpZD1vLnJhbmRzdHIoaSl9ci5fcGFwZXJkaXYuc2VsZWN0QWxsKCIubWFpbi1zdmciKS5hdHRyKHkuc3ZnQXR0cnMpLHIuX2RlZnM9ci5fcGFwZXIuYXBwZW5kKCJkZWZzIikuYXR0cigiaWQiLCJkZWZzLSIrci5fdWlkKSxyLl9jbGlwcz1yLl9kZWZzLmFwcGVuZCgiZyIpLmNsYXNzZWQoImNsaXBzIiwhMCksci5fdG9wZGVmcz1yLl90b3BwYXBlci5hcHBlbmQoImRlZnMiKS5hdHRyKCJpZCIsInRvcGRlZnMtIityLl91aWQpLHIuX3RvcGNsaXBzPXIuX3RvcGRlZnMuYXBwZW5kKCJnIikuY2xhc3NlZCgiY2xpcHMiLCEwKSxyLl9iZ0xheWVyPXIuX3BhcGVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoImJnbGF5ZXIiLCEwKSxyLl9kcmFnZ2Vycz1yLl9wYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJkcmFnbGF5ZXIiLCEwKTt2YXIgYT1yLl9wYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJsYXllci1iZWxvdyIsITApO3IuX2ltYWdlTG93ZXJMYXllcj1hLmFwcGVuZCgiZyIpLmNsYXNzZWQoImltYWdlbGF5ZXIiLCEwKSxyLl9zaGFwZUxvd2VyTGF5ZXI9YS5hcHBlbmQoImciKS5jbGFzc2VkKCJzaGFwZWxheWVyIiwhMCksci5fY2FydGVzaWFubGF5ZXI9ci5fcGFwZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgiY2FydGVzaWFubGF5ZXIiLCEwKSxyLl9wb2xhcmxheWVyPXIuX3BhcGVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoInBvbGFybGF5ZXIiLCEwKSxyLl90ZXJuYXJ5bGF5ZXI9ci5fcGFwZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgidGVybmFyeWxheWVyIiwhMCksci5fZ2VvbGF5ZXI9ci5fcGFwZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgiZ2VvbGF5ZXIiLCEwKSxyLl9waWVsYXllcj1yLl9wYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJwaWVsYXllciIsITApLHIuX2dsaW1hZ2VzPXIuX3BhcGVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoImdsaW1hZ2VzIiwhMCk7dmFyIHM9ci5fdG9wcGFwZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgibGF5ZXItYWJvdmUiLCEwKTtyLl9pbWFnZVVwcGVyTGF5ZXI9cy5hcHBlbmQoImciKS5jbGFzc2VkKCJpbWFnZWxheWVyIiwhMCksci5fc2hhcGVVcHBlckxheWVyPXMuYXBwZW5kKCJnIikuY2xhc3NlZCgic2hhcGVsYXllciIsITApLHIuX2luZm9sYXllcj1yLl90b3BwYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJpbmZvbGF5ZXIiLCEwKSxyLl9tZW51bGF5ZXI9ci5fdG9wcGFwZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgibWVudWxheWVyIiwhMCksci5fem9vbWxheWVyPXIuX3RvcHBhcGVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoInpvb21sYXllciIsITApLHIuX2hvdmVybGF5ZXI9ci5fdG9wcGFwZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgiaG92ZXJsYXllciIsITApLHQuZW1pdCgicGxvdGx5X2ZyYW1ld29yayIpfXIudXBkYXRlPWZ1bmN0aW9uIHQoZSxuLGksYSl7aWYoZT1vLmdldEdyYXBoRGl2KGUpLHcuY2xlYXJQcm9taXNlUXVldWUoZSksZS5mcmFtZXdvcmsmJmUuZnJhbWV3b3JrLmlzUG9sYXIpcmV0dXJuIFByb21pc2UucmVzb2x2ZShlKTtvLmlzUGxhaW5PYmplY3Qobil8fChuPXt9KSxvLmlzUGxhaW5PYmplY3QoaSl8fChpPXt9KSxPYmplY3Qua2V5cyhuKS5sZW5ndGgmJihlLmNoYW5nZWQ9ITApLE9iamVjdC5rZXlzKGkpLmxlbmd0aCYmKGUuY2hhbmdlZD0hMCk7dmFyIHM9dy5jb2VyY2VUcmFjZUluZGljZXMoZSxhKSxjPUIoZSxvLmV4dGVuZEZsYXQoe30sbikscyksdT1jLmZsYWdzLGY9VShlLG8uZXh0ZW5kRmxhdCh7fSxpKSkscD1mLmZsYWdzOyh1LmNsZWFyQ2FsY3x8cC5jYWxjKSYmKGUuY2FsY2RhdGE9dm9pZCAwKSx1LmNsZWFyQXhpc1R5cGVzJiZ3LmNsZWFyQXhpc1R5cGVzKGUscyxpKTt2YXIgZD1bXTtpZih1LmZ1bGxSZXBsb3QmJnAubGF5b3V0UmVwbG90KXt2YXIgZz1lLmRhdGEsbT1lLmxheW91dDtlLmRhdGE9dm9pZCAwLGUubGF5b3V0PXZvaWQgMCxkLnB1c2goZnVuY3Rpb24oKXtyZXR1cm4gci5wbG90KGUsZyxtKX0pfWVsc2UgdS5mdWxsUmVwbG90P2QucHVzaChyLnBsb3QpOnAubGF5b3V0UmVwbG90P2QucHVzaChrLmxheW91dFJlcGxvdCk6KGQucHVzaChoLnByZXZpb3VzUHJvbWlzZXMpLGguc3VwcGx5RGVmYXVsdHMoZSksdS5zdHlsZSYmZC5wdXNoKGsuZG9UcmFjZVN0eWxlKSx1LmNvbG9yYmFycyYmZC5wdXNoKGsuZG9Db2xvckJhcnMpLHAubGVnZW5kJiZkLnB1c2goay5kb0xlZ2VuZCkscC5sYXlvdXRzdHlsZSYmZC5wdXNoKGsubGF5b3V0U3R5bGVzKSxwLmF4cmFuZ2UmJkYoZCxmLnJhbmdlc0FsdGVyZWQpLHAudGlja3MmJmQucHVzaChrLmRvVGlja3NSZWxheW91dCkscC5tb2RlYmFyJiZkLnB1c2goay5kb01vZGVCYXIpLHAuY2FtZXJhJiZkLnB1c2goay5kb0NhbWVyYSksZC5wdXNoKFMpKTtkLnB1c2goaC5yZWhvdmVyKSxsLmFkZChlLHQsW2UsYy51bmRvaXQsZi51bmRvaXQsYy50cmFjZXNdLHQsW2UsYy5yZWRvaXQsZi5yZWRvaXQsYy50cmFjZXNdKTt2YXIgdj1vLnN5bmNPckFzeW5jKGQsZSk7cmV0dXJuIHYmJnYudGhlbnx8KHY9UHJvbWlzZS5yZXNvbHZlKGUpKSx2LnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gZS5lbWl0KCJwbG90bHlfdXBkYXRlIix7ZGF0YTpjLmV2ZW50RGF0YSxsYXlvdXQ6Zi5ldmVudERhdGF9KSxlfSl9LHIucmVhY3Q9ZnVuY3Rpb24odCxlLG4saSl7dmFyIGEsczt2YXIgbD0odD1vLmdldEdyYXBoRGl2KHQpKS5fZnVsbERhdGEsZj10Ll9mdWxsTGF5b3V0O2lmKG8uaXNQbG90RGl2KHQpJiZsJiZmKXtpZihvLmlzUGxhaW5PYmplY3QoZSkpe3ZhciBkPWU7ZT1kLmRhdGEsbj1kLmxheW91dCxpPWQuY29uZmlnLGE9ZC5mcmFtZXN9dmFyIGc9ITE7aWYoaSl7dmFyIG09by5leHRlbmREZWVwKHt9LHQuX2NvbnRleHQpO3QuX2NvbnRleHQ9dm9pZCAwLEwodCxpKSxnPWZ1bmN0aW9uIHQoZSxyKXt2YXIgbjtmb3IobiBpbiBlKXt2YXIgaT1lW25dLGE9cltuXTtpZihpIT09YSlpZihvLmlzUGxhaW5PYmplY3QoaSkmJm8uaXNQbGFpbk9iamVjdChhKSl7aWYodChpLGEpKXJldHVybiEwfWVsc2V7aWYoIUFycmF5LmlzQXJyYXkoaSl8fCFBcnJheS5pc0FycmF5KGEpKXJldHVybiEwO2lmKGkubGVuZ3RoIT09YS5sZW5ndGgpcmV0dXJuITA7Zm9yKHZhciBzPTA7czxpLmxlbmd0aDtzKyspaWYoaVtzXSE9PWFbc10pe2lmKCFvLmlzUGxhaW5PYmplY3QoaVtzXSl8fCFvLmlzUGxhaW5PYmplY3QoYVtzXSkpcmV0dXJuITA7aWYodChpW3NdLGFbc10pKXJldHVybiEwfX19fShtLHQuX2NvbnRleHQpfXQuZGF0YT1lfHxbXSx3LmNsZWFuRGF0YSh0LmRhdGEpLHQubGF5b3V0PW58fHt9LHcuY2xlYW5MYXlvdXQodC5sYXlvdXQpLGguc3VwcGx5RGVmYXVsdHModCx7c2tpcFVwZGF0ZUNhbGM6ITB9KTt2YXIgdj10Ll9mdWxsRGF0YSx5PXQuX2Z1bGxMYXlvdXQseD12b2lkIDA9PT15LmRhdGFyZXZpc2lvbixiPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKGUubGVuZ3RoIT09ci5sZW5ndGgpcmV0dXJue2Z1bGxSZXBsb3Q6ITAsY2FsYzohMH07dmFyIGksYSxvPU0udHJhY2VGbGFncygpO28uYXJyYXlzPXt9O3ZhciBzPXtnZXRWYWxPYmplY3Q6ZnVuY3Rpb24odCl7cmV0dXJuIHUuZ2V0VHJhY2VWYWxPYmplY3QoYSx0KX0sZmxhZ3M6byxpbW11dGFibGU6bixnZDp0fSxsPXt9O2ZvcihpPTA7aTxlLmxlbmd0aDtpKyspYT1yW2ldLl9mdWxsSW5wdXQsbFthLnVpZF18fChsW2EudWlkXT0xLHMuYXV0b3JhbmdlZD0hIWEueGF4aXMmJihwLmdldEZyb21JZCh0LGEueGF4aXMpLmF1dG9yYW5nZXx8cC5nZXRGcm9tSWQodCxhLnlheGlzKS5hdXRvcmFuZ2UpLEcoZVtpXS5fZnVsbElucHV0LGEsW10scykpOyhvLmNhbGN8fG8ucGxvdHx8by5jYWxjSWZBdXRvcmFuZ2UpJiYoby5mdWxsUmVwbG90PSEwKTtyZXR1cm4gb30odCxsLHYseCksXz1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1NLmxheW91dEZsYWdzKCk7aS5hcnJheXM9e30sRyhlLHIsW10se2dldFZhbE9iamVjdDpmdW5jdGlvbih0KXtyZXR1cm4gdS5nZXRMYXlvdXRWYWxPYmplY3Qocix0KX0sZmxhZ3M6aSxpbW11dGFibGU6bixnZDp0fSksKGkucGxvdHx8aS5jYWxjKSYmKGkubGF5b3V0UmVwbG90PSEwKTtyZXR1cm4gaX0odCxmLHkseCk7cSh0KSYmKF8ubGF5b3V0UmVwbG90PSEwKSxiLmNhbGN8fF8uY2FsYz90LmNhbGNkYXRhPXZvaWQgMDpoLnN1cHBseURlZmF1bHRzVXBkYXRlQ2FsYyh0LmNhbGNkYXRhLHYpO3ZhciBBPVtdO2lmKGEmJih0Ll90cmFuc2l0aW9uRGF0YT17fSxoLmNyZWF0ZVRyYW5zaXRpb25EYXRhKHQpLEEucHVzaChmdW5jdGlvbigpe3JldHVybiByLmFkZEZyYW1lcyh0LGEpfSkpLGIuZnVsbFJlcGxvdHx8Xy5sYXlvdXRSZXBsb3R8fGcpdC5fZnVsbExheW91dC5fc2tpcERlZmF1bHRzPSEwLEEucHVzaChyLnBsb3QpO2Vsc2V7Zm9yKHZhciBUIGluIF8uYXJyYXlzKXt2YXIgRT1fLmFycmF5c1tUXTtpZihFLmxlbmd0aCl7dmFyIEM9Yy5nZXRDb21wb25lbnRNZXRob2QoVCwiZHJhd09uZSIpO2lmKEMhPT1vLm5vb3ApZm9yKHZhciB6PTA7ejxFLmxlbmd0aDt6KyspQyh0LEVbel0pO2Vsc2V7dmFyIFA9Yy5nZXRDb21wb25lbnRNZXRob2QoVCwiZHJhdyIpO2lmKFA9PT1vLm5vb3ApdGhyb3cgbmV3IEVycm9yKCJjYW5ub3QgZHJhdyBjb21wb25lbnRzOiAiK1QpO1AodCl9fX1BLnB1c2goaC5wcmV2aW91c1Byb21pc2VzKSxiLnN0eWxlJiZBLnB1c2goay5kb1RyYWNlU3R5bGUpLGIuY29sb3JiYXJzJiZBLnB1c2goay5kb0NvbG9yQmFycyksXy5sZWdlbmQmJkEucHVzaChrLmRvTGVnZW5kKSxfLmxheW91dHN0eWxlJiZBLnB1c2goay5sYXlvdXRTdHlsZXMpLF8uYXhyYW5nZSYmRihBKSxfLnRpY2tzJiZBLnB1c2goay5kb1RpY2tzUmVsYXlvdXQpLF8ubW9kZWJhciYmQS5wdXNoKGsuZG9Nb2RlQmFyKSxfLmNhbWVyYSYmQS5wdXNoKGsuZG9DYW1lcmEpLEEucHVzaChTKX1BLnB1c2goaC5yZWhvdmVyKSwocz1vLnN5bmNPckFzeW5jKEEsdCkpJiZzLnRoZW58fChzPVByb21pc2UucmVzb2x2ZSh0KSl9ZWxzZSBzPXIubmV3UGxvdCh0LGUsbixpKTtyZXR1cm4gcy50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIHQuZW1pdCgicGxvdGx5X3JlYWN0Iix7ZGF0YTplLGxheW91dDpufSksdH0pfSxyLmFuaW1hdGU9ZnVuY3Rpb24odCxlLHIpe2lmKHQ9by5nZXRHcmFwaERpdih0KSwhby5pc1Bsb3REaXYodCkpdGhyb3cgbmV3IEVycm9yKCJUaGlzIGVsZW1lbnQgaXMgbm90IGEgUGxvdGx5IHBsb3Q6ICIrdCsiLiBJdCdzIGxpa2VseSB0aGF0IHlvdSd2ZSBmYWlsZWQgdG8gY3JlYXRlIGEgcGxvdCBiZWZvcmUgYW5pbWF0aW5nIGl0LiBGb3IgbW9yZSBkZXRhaWxzLCBzZWUgaHR0cHM6Ly9wbG90Lmx5L2phdmFzY3JpcHQvYW5pbWF0aW9ucy8iKTt2YXIgbj10Ll90cmFuc2l0aW9uRGF0YTtuLl9mcmFtZVF1ZXVlfHwobi5fZnJhbWVRdWV1ZT1bXSk7dmFyIGk9KHI9aC5zdXBwbHlBbmltYXRpb25EZWZhdWx0cyhyKSkudHJhbnNpdGlvbixhPXIuZnJhbWU7ZnVuY3Rpb24gcyh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheShpKT90Pj1pLmxlbmd0aD9pWzBdOmlbdF06aX1mdW5jdGlvbiBsKHQpe3JldHVybiBBcnJheS5pc0FycmF5KGEpP3Q+PWEubGVuZ3RoP2FbMF06YVt0XTphfWZ1bmN0aW9uIGModCxlKXt2YXIgcj0wO3JldHVybiBmdW5jdGlvbigpe2lmKHQmJisrcj09PWUpcmV0dXJuIHQoKX19cmV0dXJuIHZvaWQgMD09PW4uX2ZyYW1lV2FpdGluZ0NudCYmKG4uX2ZyYW1lV2FpdGluZ0NudD0wKSxuZXcgUHJvbWlzZShmdW5jdGlvbihhLHUpe2Z1bmN0aW9uIGYoKXtuLl9jdXJyZW50RnJhbWUmJm4uX2N1cnJlbnRGcmFtZS5vbkNvbXBsZXRlJiZuLl9jdXJyZW50RnJhbWUub25Db21wbGV0ZSgpO3ZhciBlPW4uX2N1cnJlbnRGcmFtZT1uLl9mcmFtZVF1ZXVlLnNoaWZ0KCk7aWYoZSl7dmFyIHI9ZS5uYW1lP2UubmFtZS50b1N0cmluZygpOm51bGw7dC5fZnVsbExheW91dC5fY3VycmVudEZyYW1lPXIsbi5fbGFzdEZyYW1lQXQ9RGF0ZS5ub3coKSxuLl90aW1lVG9OZXh0PWUuZnJhbWVPcHRzLmR1cmF0aW9uLGgudHJhbnNpdGlvbih0LGUuZnJhbWUuZGF0YSxlLmZyYW1lLmxheW91dCx3LmNvZXJjZVRyYWNlSW5kaWNlcyh0LGUuZnJhbWUudHJhY2VzKSxlLmZyYW1lT3B0cyxlLnRyYW5zaXRpb25PcHRzKS50aGVuKGZ1bmN0aW9uKCl7ZS5vbkNvbXBsZXRlJiZlLm9uQ29tcGxldGUoKX0pLHQuZW1pdCgicGxvdGx5X2FuaW1hdGluZ2ZyYW1lIix7bmFtZTpyLGZyYW1lOmUuZnJhbWUsYW5pbWF0aW9uOntmcmFtZTplLmZyYW1lT3B0cyx0cmFuc2l0aW9uOmUudHJhbnNpdGlvbk9wdHN9fSl9ZWxzZSB0LmVtaXQoInBsb3RseV9hbmltYXRlZCIpLHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZShuLl9hbmltYXRpb25SYWYpLG4uX2FuaW1hdGlvblJhZj1udWxsfWZ1bmN0aW9uIHAoKXt0LmVtaXQoInBsb3RseV9hbmltYXRpbmciKSxuLl9sYXN0RnJhbWVBdD0tMS8wLG4uX3RpbWVUb05leHQ9MCxuLl9ydW5uaW5nVHJhbnNpdGlvbnM9MCxuLl9jdXJyZW50RnJhbWU9bnVsbDt2YXIgZT1mdW5jdGlvbigpe24uX2FuaW1hdGlvblJhZj13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGUpLERhdGUubm93KCktbi5fbGFzdEZyYW1lQXQ+bi5fdGltZVRvTmV4dCYmZigpfTtlKCl9dmFyIGQsZyxtPTA7ZnVuY3Rpb24gdih0KXtyZXR1cm4gQXJyYXkuaXNBcnJheShpKT9tPj1pLmxlbmd0aD90LnRyYW5zaXRpb25PcHRzPWlbbV06dC50cmFuc2l0aW9uT3B0cz1pWzBdOnQudHJhbnNpdGlvbk9wdHM9aSxtKyssdH12YXIgeT1bXSx4PW51bGw9PWUsYj1BcnJheS5pc0FycmF5KGUpO2lmKCF4JiYhYiYmby5pc1BsYWluT2JqZWN0KGUpKXkucHVzaCh7dHlwZToib2JqZWN0IixkYXRhOnYoby5leHRlbmRGbGF0KHt9LGUpKX0pO2Vsc2UgaWYoeHx8LTEhPT1bInN0cmluZyIsIm51bWJlciJdLmluZGV4T2YodHlwZW9mIGUpKWZvcihkPTA7ZDxuLl9mcmFtZXMubGVuZ3RoO2QrKykoZz1uLl9mcmFtZXNbZF0pJiYoeHx8U3RyaW5nKGcuZ3JvdXApPT09U3RyaW5nKGUpKSYmeS5wdXNoKHt0eXBlOiJieW5hbWUiLG5hbWU6U3RyaW5nKGcubmFtZSksZGF0YTp2KHtuYW1lOmcubmFtZX0pfSk7ZWxzZSBpZihiKWZvcihkPTA7ZDxlLmxlbmd0aDtkKyspe3ZhciBfPWVbZF07LTEhPT1bIm51bWJlciIsInN0cmluZyJdLmluZGV4T2YodHlwZW9mIF8pPyhfPVN0cmluZyhfKSx5LnB1c2goe3R5cGU6ImJ5bmFtZSIsbmFtZTpfLGRhdGE6dih7bmFtZTpffSl9KSk6by5pc1BsYWluT2JqZWN0KF8pJiZ5LnB1c2goe3R5cGU6Im9iamVjdCIsZGF0YTp2KG8uZXh0ZW5kRmxhdCh7fSxfKSl9KX1mb3IoZD0wO2Q8eS5sZW5ndGg7ZCsrKWlmKCJieW5hbWUiPT09KGc9eVtkXSkudHlwZSYmIW4uX2ZyYW1lSGFzaFtnLmRhdGEubmFtZV0pcmV0dXJuIG8ud2FybignYW5pbWF0ZSBmYWlsdXJlOiBmcmFtZSBub3QgZm91bmQ6ICInK2cuZGF0YS5uYW1lKyciJyksdm9pZCB1KCk7LTEhPT1bIm5leHQiLCJpbW1lZGlhdGUiXS5pbmRleE9mKHIubW9kZSkmJmZ1bmN0aW9uKCl7aWYoMCE9PW4uX2ZyYW1lUXVldWUubGVuZ3RoKXtmb3IoO24uX2ZyYW1lUXVldWUubGVuZ3RoOyl7dmFyIGU9bi5fZnJhbWVRdWV1ZS5wb3AoKTtlLm9uSW50ZXJydXB0JiZlLm9uSW50ZXJydXB0KCl9dC5lbWl0KCJwbG90bHlfYW5pbWF0aW9uaW50ZXJydXB0ZWQiLFtdKX19KCksInJldmVyc2UiPT09ci5kaXJlY3Rpb24mJnkucmV2ZXJzZSgpO3ZhciBrPXQuX2Z1bGxMYXlvdXQuX2N1cnJlbnRGcmFtZTtpZihrJiZyLmZyb21jdXJyZW50KXt2YXIgTT0tMTtmb3IoZD0wO2Q8eS5sZW5ndGg7ZCsrKWlmKCJieW5hbWUiPT09KGc9eVtkXSkudHlwZSYmZy5uYW1lPT09ayl7TT1kO2JyZWFrfWlmKE0+MCYmTTx5Lmxlbmd0aC0xKXt2YXIgQT1bXTtmb3IoZD0wO2Q8eS5sZW5ndGg7ZCsrKWc9eVtkXSwoImJ5bmFtZSIhPT15W2RdLnR5cGV8fGQ+TSkmJkEucHVzaChnKTt5PUF9fXkubGVuZ3RoPjA/ZnVuY3Rpb24oZSl7aWYoMCE9PWUubGVuZ3RoKXtmb3IodmFyIGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIG87bz0iYnluYW1lIj09PWVbaV0udHlwZT9oLmNvbXB1dGVGcmFtZSh0LGVbaV0ubmFtZSk6ZVtpXS5kYXRhO3ZhciBmPWwoaSksZD1zKGkpO2QuZHVyYXRpb249TWF0aC5taW4oZC5kdXJhdGlvbixmLmR1cmF0aW9uKTt2YXIgZz17ZnJhbWU6byxuYW1lOmVbaV0ubmFtZSxmcmFtZU9wdHM6Zix0cmFuc2l0aW9uT3B0czpkfTtpPT09ZS5sZW5ndGgtMSYmKGcub25Db21wbGV0ZT1jKGEsMiksZy5vbkludGVycnVwdD11KSxuLl9mcmFtZVF1ZXVlLnB1c2goZyl9ImltbWVkaWF0ZSI9PT1yLm1vZGUmJihuLl9sYXN0RnJhbWVBdD0tMS8wKSxuLl9hbmltYXRpb25SYWZ8fHAoKX19KHkpOih0LmVtaXQoInBsb3RseV9hbmltYXRlZCIpLGEoKSl9KX0sci5hZGRGcmFtZXM9ZnVuY3Rpb24odCxlLHIpe2lmKHQ9by5nZXRHcmFwaERpdih0KSxudWxsPT1lKXJldHVybiBQcm9taXNlLnJlc29sdmUoKTtpZighby5pc1Bsb3REaXYodCkpdGhyb3cgbmV3IEVycm9yKCJUaGlzIGVsZW1lbnQgaXMgbm90IGEgUGxvdGx5IHBsb3Q6ICIrdCsiLiBJdCdzIGxpa2VseSB0aGF0IHlvdSd2ZSBmYWlsZWQgdG8gY3JlYXRlIGEgcGxvdCBiZWZvcmUgYWRkaW5nIGZyYW1lcy4gRm9yIG1vcmUgZGV0YWlscywgc2VlIGh0dHBzOi8vcGxvdC5seS9qYXZhc2NyaXB0L2FuaW1hdGlvbnMvIik7dmFyIG4saSxhLHMsYz10Ll90cmFuc2l0aW9uRGF0YS5fZnJhbWVzLHU9dC5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lSGFzaDtpZighQXJyYXkuaXNBcnJheShlKSl0aHJvdyBuZXcgRXJyb3IoImFkZEZyYW1lcyBmYWlsdXJlOiBmcmFtZUxpc3QgbXVzdCBiZSBhbiBBcnJheSBvZiBmcmFtZSBkZWZpbml0aW9ucyIrZSk7dmFyIGY9Yy5sZW5ndGgrMiplLmxlbmd0aCxwPVtdLGQ9e307Zm9yKG49ZS5sZW5ndGgtMTtuPj0wO24tLSlpZihvLmlzUGxhaW5PYmplY3QoZVtuXSkpe3ZhciBnPWVbbl0ubmFtZSxtPSh1W2ddfHxkW2ddfHx7fSkubmFtZSx2PWVbbl0ubmFtZSx5PXVbbV18fGRbbV07bSYmdiYmIm51bWJlciI9PXR5cGVvZiB2JiZ5JiZUPDUmJihUKyssby53YXJuKCdhZGRGcmFtZXM6IG92ZXJ3cml0aW5nIGZyYW1lICInKyh1W21dfHxkW21dKS5uYW1lKyciIHdpdGggYSBmcmFtZSB3aG9zZSBuYW1lIG9mIHR5cGUgIm51bWJlciIgYWxzbyBlcXVhdGVzIHRvICInK20rJyIuIFRoaXMgaXMgdmFsaWQgYnV0IG1heSBwb3RlbnRpYWxseSBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3Igc2luY2UgYWxsIHBsb3RseS5qcyBmcmFtZSBuYW1lcyBhcmUgc3RvcmVkIGludGVybmFsbHkgYXMgc3RyaW5ncy4nKSw1PT09VCYmby53YXJuKCJhZGRGcmFtZXM6IFRoaXMgQVBJIGNhbGwgaGFzIHlpZWxkZWQgdG9vIG1hbnkgb2YgdGhlc2Ugd2FybmluZ3MuIEZvciB0aGUgcmVzdCBvZiB0aGlzIGNhbGwsIGZ1cnRoZXIgd2FybmluZ3MgYWJvdXQgbnVtZXJpYyBmcmFtZSBuYW1lcyB3aWxsIGJlIHN1cHByZXNzZWQuIikpLGRbZ109e25hbWU6Z30scC5wdXNoKHtmcmFtZTpoLnN1cHBseUZyYW1lRGVmYXVsdHMoZVtuXSksaW5kZXg6ciYmdm9pZCAwIT09cltuXSYmbnVsbCE9PXJbbl0/cltuXTpmK259KX1wLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5pbmRleD5lLmluZGV4Py0xOnQuaW5kZXg8ZS5pbmRleD8xOjB9KTt2YXIgeD1bXSxiPVtdLF89Yy5sZW5ndGg7Zm9yKG49cC5sZW5ndGgtMTtuPj0wO24tLSl7aWYoIm51bWJlciI9PXR5cGVvZihpPXBbbl0uZnJhbWUpLm5hbWUmJm8ud2FybigiV2FybmluZzogYWRkRnJhbWVzIGFjY2VwdHMgZnJhbWVzIHdpdGggbnVtZXJpYyBuYW1lcywgYnV0IHRoZSBudW1iZXJzIGFyZWltcGxpY2l0bHkgY2FzdCB0byBzdHJpbmdzIiksIWkubmFtZSlmb3IoO3VbaS5uYW1lPSJmcmFtZSAiK3QuX3RyYW5zaXRpb25EYXRhLl9jb3VudGVyKytdOyk7aWYodVtpLm5hbWVdKXtmb3IoYT0wO2E8Yy5sZW5ndGgmJihjW2FdfHx7fSkubmFtZSE9PWkubmFtZTthKyspO3gucHVzaCh7dHlwZToicmVwbGFjZSIsaW5kZXg6YSx2YWx1ZTppfSksYi51bnNoaWZ0KHt0eXBlOiJyZXBsYWNlIixpbmRleDphLHZhbHVlOmNbYV19KX1lbHNlIHM9TWF0aC5tYXgoMCxNYXRoLm1pbihwW25dLmluZGV4LF8pKSx4LnB1c2goe3R5cGU6Imluc2VydCIsaW5kZXg6cyx2YWx1ZTppfSksYi51bnNoaWZ0KHt0eXBlOiJkZWxldGUiLGluZGV4OnN9KSxfKyt9dmFyIHc9aC5tb2RpZnlGcmFtZXMsaz1oLm1vZGlmeUZyYW1lcyxNPVt0LGJdLEE9W3QseF07cmV0dXJuIGwmJmwuYWRkKHQsdyxNLGssQSksaC5tb2RpZnlGcmFtZXModCx4KX0sci5kZWxldGVGcmFtZXM9ZnVuY3Rpb24odCxlKXtpZih0PW8uZ2V0R3JhcGhEaXYodCksIW8uaXNQbG90RGl2KHQpKXRocm93IG5ldyBFcnJvcigiVGhpcyBlbGVtZW50IGlzIG5vdCBhIFBsb3RseSBwbG90OiAiK3QpO3ZhciByLG4saT10Ll90cmFuc2l0aW9uRGF0YS5fZnJhbWVzLGE9W10scz1bXTtpZighZSlmb3IoZT1bXSxyPTA7cjxpLmxlbmd0aDtyKyspZS5wdXNoKHIpO2ZvcigoZT1lLnNsaWNlKDApKS5zb3J0KCkscj1lLmxlbmd0aC0xO3I+PTA7ci0tKW49ZVtyXSxhLnB1c2goe3R5cGU6ImRlbGV0ZSIsaW5kZXg6bn0pLHMudW5zaGlmdCh7dHlwZToiaW5zZXJ0IixpbmRleDpuLHZhbHVlOmlbbl19KTt2YXIgYz1oLm1vZGlmeUZyYW1lcyx1PWgubW9kaWZ5RnJhbWVzLGY9W3Qsc10scD1bdCxhXTtyZXR1cm4gbCYmbC5hZGQodCxjLGYsdSxwKSxoLm1vZGlmeUZyYW1lcyh0LGEpfSxyLnB1cmdlPWZ1bmN0aW9uKHQpe3ZhciBlPSh0PW8uZ2V0R3JhcGhEaXYodCkpLl9mdWxsTGF5b3V0fHx7fSxyPXQuX2Z1bGxEYXRhfHxbXSxuPXQuY2FsY2RhdGF8fFtdO3JldHVybiBoLmNsZWFuUGxvdChbXSx7fSxyLGUsbiksaC5wdXJnZSh0KSxzLnB1cmdlKHQpLGUuX2NvbnRhaW5lciYmZS5fY29udGFpbmVyLnJlbW92ZSgpLGRlbGV0ZSB0Ll9jb250ZXh0LHR9fSx7Ii4uL2NvbXBvbmVudHMvY29sb3IiOjU1OCwiLi4vY29tcG9uZW50cy9jb2xvcmJhci9jb25uZWN0Ijo1NjAsIi4uL2NvbXBvbmVudHMvZHJhd2luZyI6NTgzLCIuLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyI6NjYzLCIuLi9saWIiOjY4NCwiLi4vbGliL2V2ZW50cyI6NjcyLCIuLi9saWIvcXVldWUiOjY5OSwiLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo3MDgsIi4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3MzIsIi4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdGFudHMiOjczNywiLi4vcGxvdHMvY2FydGVzaWFuL2dyYXBoX2ludGVyYWN0Ijo3NDEsIi4uL3Bsb3RzL3Bsb3RzIjo3OTUsIi4uL3Bsb3RzL3BvbGFyL2xlZ2FjeSI6ODAzLCIuLi9yZWdpc3RyeSI6ODE3LCIuL2VkaXRfdHlwZXMiOjcxNSwiLi9oZWxwZXJzIjo3MTYsIi4vbWFuYWdlX2FycmF5cyI6NzE4LCIuL3Bsb3RfY29uZmlnIjo3MjAsIi4vcGxvdF9zY2hlbWEiOjcyMSwiLi9zdWJyb3V0aW5lcyI6NzIzLGQzOjE0NywiZmFzdC1pc251bWVyaWMiOjIxNCwiaGFzLWhvdmVyIjozNzh9XSw3MjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtzdGF0aWNQbG90OiExLHBsb3RseVNlcnZlclVSTDoiaHR0cHM6Ly9wbG90Lmx5IixlZGl0YWJsZTohMSxlZGl0czp7YW5ub3RhdGlvblBvc2l0aW9uOiExLGFubm90YXRpb25UYWlsOiExLGFubm90YXRpb25UZXh0OiExLGF4aXNUaXRsZVRleHQ6ITEsY29sb3JiYXJQb3NpdGlvbjohMSxjb2xvcmJhclRpdGxlVGV4dDohMSxsZWdlbmRQb3NpdGlvbjohMSxsZWdlbmRUZXh0OiExLHNoYXBlUG9zaXRpb246ITEsdGl0bGVUZXh0OiExfSxhdXRvc2l6YWJsZTohMSxxdWV1ZUxlbmd0aDowLGZpbGxGcmFtZTohMSxmcmFtZU1hcmdpbnM6MCxzY3JvbGxab29tOiExLGRvdWJsZUNsaWNrOiJyZXNldCthdXRvc2l6ZSIsc2hvd1RpcHM6ITAsc2hvd0F4aXNEcmFnSGFuZGxlczohMCxzaG93QXhpc1JhbmdlRW50cnlCb3hlczohMCxzaG93TGluazohMSxzZW5kRGF0YTohMCxsaW5rVGV4dDoiRWRpdCBjaGFydCIsc2hvd1NvdXJjZXM6ITEsZGlzcGxheU1vZGVCYXI6ImhvdmVyIixtb2RlQmFyQnV0dG9uc1RvUmVtb3ZlOltdLG1vZGVCYXJCdXR0b25zVG9BZGQ6W10sbW9kZUJhckJ1dHRvbnM6ITEsdG9JbWFnZUJ1dHRvbk9wdGlvbnM6e30sZGlzcGxheWxvZ286ITAscGxvdEdsUGl4ZWxSYXRpbzoyLHNldEJhY2tncm91bmQ6InRyYW5zcGFyZW50Iix0b3BvanNvblVSTDoiaHR0cHM6Ly9jZG4ucGxvdC5seS8iLG1hcGJveEFjY2Vzc1Rva2VuOm51bGwsbG9nZ2luZzoxLGdsb2JhbFRyYW5zZm9ybXM6W10sbG9jYWxlOiJlbi1VUyIsbG9jYWxlczp7fX19LHt9XSw3MjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vcmVnaXN0cnkiKSxpPXQoIi4uL2xpYiIpLGE9dCgiLi4vcGxvdHMvYXR0cmlidXRlcyIpLG89dCgiLi4vcGxvdHMvbGF5b3V0X2F0dHJpYnV0ZXMiKSxzPXQoIi4uL3Bsb3RzL2ZyYW1lX2F0dHJpYnV0ZXMiKSxsPXQoIi4uL3Bsb3RzL2FuaW1hdGlvbl9hdHRyaWJ1dGVzIiksYz10KCIuLi9wbG90cy9wb2xhci9sZWdhY3kvYXJlYV9hdHRyaWJ1dGVzIiksdT10KCIuLi9wbG90cy9wb2xhci9sZWdhY3kvYXhpc19hdHRyaWJ1dGVzIiksaD10KCIuL2VkaXRfdHlwZXMiKSxmPWkuZXh0ZW5kRmxhdCxwPWkuZXh0ZW5kRGVlcEFsbCxkPWkuaXNQbGFpbk9iamVjdCxnPSJfaXNTdWJwbG90T2JqIixtPSJfaXNMaW5rZWRUb0FycmF5Iix2PVtnLG0sIl9hcnJheUF0dHJSZWdleHBzIiwiX2RlcHJlY2F0ZWQiXTtmdW5jdGlvbiB5KHQsZSxyKXtpZighdClyZXR1cm4hMTtpZih0Ll9pc0xpbmtlZFRvQXJyYXkpaWYoeChlW3JdKSlyKys7ZWxzZSBpZihyPGUubGVuZ3RoKXJldHVybiExO2Zvcig7cjxlLmxlbmd0aDtyKyspe3ZhciBuPXRbZVtyXV07aWYoIWQobikpYnJlYWs7aWYodD1uLHI9PT1lLmxlbmd0aC0xKWJyZWFrO2lmKHQuX2lzTGlua2VkVG9BcnJheSl7aWYoIXgoZVsrK3JdKSlyZXR1cm4hMX1lbHNlIGlmKCJpbmZvX2FycmF5Ij09PXQudmFsVHlwZSl7dmFyIGk9ZVsrK3JdO2lmKCF4KGkpKXJldHVybiExO3ZhciBhPXQuaXRlbXM7aWYoQXJyYXkuaXNBcnJheShhKSl7aWYoaT49YS5sZW5ndGgpcmV0dXJuITE7aWYoMj09PXQuZGltZW5zaW9ucyl7aWYocisrLGUubGVuZ3RoPT09cilyZXR1cm4gdDt2YXIgbz1lW3JdO2lmKCF4KG8pKXJldHVybiExO3Q9YVtpXVtvXX1lbHNlIHQ9YVtpXX1lbHNlIHQ9YX19cmV0dXJuIHR9ZnVuY3Rpb24geCh0KXtyZXR1cm4gdD09PU1hdGgucm91bmQodCkmJnQ+PTB9ZnVuY3Rpb24gYih0KXtyZXR1cm4gZnVuY3Rpb24odCl7ci5jcmF3bCh0LGZ1bmN0aW9uKHQsZSxuKXtyLmlzVmFsT2JqZWN0KHQpPyJkYXRhX2FycmF5Ij09PXQudmFsVHlwZT8odC5yb2xlPSJkYXRhIixuW2UrInNyYyJdPXt2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJub25lIn0pOiEwPT09dC5hcnJheU9rJiYobltlKyJzcmMiXT17dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToibm9uZSJ9KTpkKHQpJiYodC5yb2xlPSJvYmplY3QiKX0pfSh0KSxmdW5jdGlvbih0KXtyLmNyYXdsKHQsZnVuY3Rpb24odCxlLHIpe2lmKCF0KXJldHVybjt2YXIgbj10W21dO2lmKCFuKXJldHVybjtkZWxldGUgdFttXSxyW2VdPXtpdGVtczp7fX0scltlXS5pdGVtc1tuXT10LHJbZV0ucm9sZT0ib2JqZWN0In0pfSh0KSxmdW5jdGlvbih0KXshZnVuY3Rpb24gdChlKXtmb3IodmFyIHIgaW4gZSlpZihkKGVbcl0pKXQoZVtyXSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KGVbcl0pKWZvcih2YXIgbj0wO248ZVtyXS5sZW5ndGg7bisrKXQoZVtyXVtuXSk7ZWxzZSBlW3JdaW5zdGFuY2VvZiBSZWdFeHAmJihlW3JdPWVbcl0udG9TdHJpbmcoKSl9KHQpfSh0KSx0fWZ1bmN0aW9uIF8odCxlLHIpe3ZhciBuPWkubmVzdGVkUHJvcGVydHkodCxyKSxhPXAoe30sZS5sYXlvdXRBdHRyaWJ1dGVzKTthW2ddPSEwLG4uc2V0KGEpfWZ1bmN0aW9uIHcodCxlLHIpe3ZhciBuPWkubmVzdGVkUHJvcGVydHkodCxyKTtuLnNldChwKG4uZ2V0KCl8fHt9LGUpKX1yLklTX1NVQlBMT1RfT0JKPWcsci5JU19MSU5LRURfVE9fQVJSQVk9bSxyLkRFUFJFQ0FURUQ9Il9kZXByZWNhdGVkIixyLlVOREVSU0NPUkVfQVRUUlM9dixyLmdldD1mdW5jdGlvbigpe3ZhciB0PXt9O24uYWxsVHlwZXMuY29uY2F0KCJhcmVhIikuZm9yRWFjaChmdW5jdGlvbihlKXt0W2VdPWZ1bmN0aW9uKHQpe3ZhciBlLHI7ImFyZWEiPT09dD8oZT17YXR0cmlidXRlczpjfSxyPXt9KTooZT1uLm1vZHVsZXNbdF0uX21vZHVsZSxyPWUuYmFzZVBsb3RNb2R1bGUpO3ZhciBpPXt0eXBlOm51bGx9O3AoaSxhKSxwKGksZS5hdHRyaWJ1dGVzKSxyLmF0dHJpYnV0ZXMmJnAoaSxyLmF0dHJpYnV0ZXMpO2kudHlwZT10O3ZhciBvPXttZXRhOmUubWV0YXx8e30sYXR0cmlidXRlczpiKGkpfTtpZihlLmxheW91dEF0dHJpYnV0ZXMpe3ZhciBzPXt9O3AocyxlLmxheW91dEF0dHJpYnV0ZXMpLG8ubGF5b3V0QXR0cmlidXRlcz1iKHMpfXJldHVybiBvfShlKX0pO3ZhciBlLHI9e307cmV0dXJuIE9iamVjdC5rZXlzKG4udHJhbnNmb3Jtc1JlZ2lzdHJ5KS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JbdF09ZnVuY3Rpb24odCl7dmFyIGU9bi50cmFuc2Zvcm1zUmVnaXN0cnlbdF0scj1wKHt9LGUuYXR0cmlidXRlcyk7cmV0dXJuIE9iamVjdC5rZXlzKG4uY29tcG9uZW50c1JlZ2lzdHJ5KS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciBpPW4uY29tcG9uZW50c1JlZ2lzdHJ5W2VdO2kuc2NoZW1hJiZpLnNjaGVtYS50cmFuc2Zvcm1zJiZpLnNjaGVtYS50cmFuc2Zvcm1zW3RdJiZPYmplY3Qua2V5cyhpLnNjaGVtYS50cmFuc2Zvcm1zW3RdKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3cocixpLnNjaGVtYS50cmFuc2Zvcm1zW3RdW2VdLGUpfSl9KSx7YXR0cmlidXRlczpiKHIpfX0odCl9KSx7ZGVmczp7dmFsT2JqZWN0czppLnZhbE9iamVjdE1ldGEsbWV0YUtleXM6di5jb25jYXQoWyJkZXNjcmlwdGlvbiIsInJvbGUiLCJlZGl0VHlwZSIsImltcGxpZWRFZGl0cyJdKSxlZGl0VHlwZTp7dHJhY2VzOmgudHJhY2VzLGxheW91dDpoLmxheW91dH0saW1wbGllZEVkaXRzOnt9fSx0cmFjZXM6dCxsYXlvdXQ6ZnVuY3Rpb24oKXt2YXIgdCxlLHI9e307Zm9yKHQgaW4gcChyLG8pLG4uc3VicGxvdHNSZWdpc3RyeSlpZigoZT1uLnN1YnBsb3RzUmVnaXN0cnlbdF0pLmxheW91dEF0dHJpYnV0ZXMpaWYoQXJyYXkuaXNBcnJheShlLmF0dHIpKWZvcih2YXIgaT0wO2k8ZS5hdHRyLmxlbmd0aDtpKyspXyhyLGUsZS5hdHRyW2ldKTtlbHNle3ZhciBhPSJzdWJwbG90Ij09PWUuYXR0cj9lLm5hbWU6ZS5hdHRyO18ocixlLGEpfWZvcih0IGluIHI9ZnVuY3Rpb24odCl7cmV0dXJuIGYodCx7cmFkaWFsYXhpczp1LnJhZGlhbGF4aXMsYW5ndWxhcmF4aXM6dS5hbmd1bGFyYXhpc30pLGYodCx1LmxheW91dCksdH0ociksbi5jb21wb25lbnRzUmVnaXN0cnkpe3ZhciBzPShlPW4uY29tcG9uZW50c1JlZ2lzdHJ5W3RdKS5zY2hlbWE7aWYocyYmKHMuc3VicGxvdHN8fHMubGF5b3V0KSl7dmFyIGw9cy5zdWJwbG90cztpZihsJiZsLnhheGlzJiYhbC55YXhpcylmb3IodmFyIGMgaW4gbC54YXhpcylkZWxldGUgci55YXhpc1tjXX1lbHNlIGUubGF5b3V0QXR0cmlidXRlcyYmdyhyLGUubGF5b3V0QXR0cmlidXRlcyxlLm5hbWUpfXJldHVybntsYXlvdXRBdHRyaWJ1dGVzOmIocil9fSgpLHRyYW5zZm9ybXM6cixmcmFtZXM6KGU9e2ZyYW1lczppLmV4dGVuZERlZXBBbGwoe30scyl9LGIoZSksZS5mcmFtZXMpLGFuaW1hdGlvbjpiKGwpfX0sci5jcmF3bD1mdW5jdGlvbih0LGUsbixpKXt2YXIgYT1ufHwwO2k9aXx8IiIsT2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgbz10W25dO2lmKC0xPT09di5pbmRleE9mKG4pKXt2YXIgcz0oaT9pKyIuIjoiIikrbjtlKG8sbix0LGEscyksci5pc1ZhbE9iamVjdChvKXx8ZChvKSYmImltcGxpZWRFZGl0cyIhPT1uJiZyLmNyYXdsKG8sZSxhKzEscyl9fSl9LHIuaXNWYWxPYmplY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJnZvaWQgMCE9PXQudmFsVHlwZX0sci5maW5kQXJyYXlBdHRyaWJ1dGVzPWZ1bmN0aW9uKHQpe3ZhciBlLG4sbz1bXSxzPVtdLGw9W107ZnVuY3Rpb24gYyh0LHIsYSxjKXtzPXMuc2xpY2UoMCxjKS5jb25jYXQoW3JdKSxsPWwuc2xpY2UoMCxjKS5jb25jYXQoW3QmJnQuX2lzTGlua2VkVG9BcnJheV0pLHQmJigiZGF0YV9hcnJheSI9PT10LnZhbFR5cGV8fCEwPT09dC5hcnJheU9rKSYmISgiY29sb3JiYXIiPT09c1tjLTFdJiYoInRpY2t0ZXh0Ij09PXJ8fCJ0aWNrdmFscyI9PT1yKSkmJmZ1bmN0aW9uIHQoZSxyLGEpe3ZhciBjPWVbc1tyXV07dmFyIHU9YStzW3JdO2lmKHI9PT1zLmxlbmd0aC0xKWkuaXNBcnJheU9yVHlwZWRBcnJheShjKSYmby5wdXNoKG4rdSk7ZWxzZSBpZihsW3JdKXtpZihBcnJheS5pc0FycmF5KGMpKWZvcih2YXIgaD0wO2g8Yy5sZW5ndGg7aCsrKWkuaXNQbGFpbk9iamVjdChjW2hdKSYmdChjW2hdLHIrMSx1KyJbIitoKyJdLiIpfWVsc2UgaS5pc1BsYWluT2JqZWN0KGMpJiZ0KGMscisxLHUrIi4iKX0oZSwwLCIiKX1lPXQsbj0iIixyLmNyYXdsKGEsYyksdC5fbW9kdWxlJiZ0Ll9tb2R1bGUuYXR0cmlidXRlcyYmci5jcmF3bCh0Ll9tb2R1bGUuYXR0cmlidXRlcyxjKTt2YXIgdT10LnRyYW5zZm9ybXM7aWYodSlmb3IodmFyIGg9MDtoPHUubGVuZ3RoO2grKyl7dmFyIGY9dVtoXSxwPWYuX21vZHVsZTtwJiYobj0idHJhbnNmb3Jtc1siK2grIl0uIixlPWYsci5jcmF3bChwLmF0dHJpYnV0ZXMsYykpfXJldHVybiBvfSxyLmdldFRyYWNlVmFsT2JqZWN0PWZ1bmN0aW9uKHQsZSl7dmFyIHIsaSxvPWVbMF0scz0xO2lmKCJ0cmFuc2Zvcm1zIj09PW8pe2lmKDE9PT1lLmxlbmd0aClyZXR1cm4gYS50cmFuc2Zvcm1zO3ZhciBsPXQudHJhbnNmb3JtcztpZighQXJyYXkuaXNBcnJheShsKXx8IWwubGVuZ3RoKXJldHVybiExO3ZhciB1PWVbMV07aWYoIXgodSl8fHU+PWwubGVuZ3RoKXJldHVybiExO2k9KHI9KG4udHJhbnNmb3Jtc1JlZ2lzdHJ5W2xbdV0udHlwZV18fHt9KS5hdHRyaWJ1dGVzKSYmcltlWzJdXSxzPTN9ZWxzZSBpZigiYXJlYSI9PT10LnR5cGUpaT1jW29dO2Vsc2V7dmFyIGg9dC5fbW9kdWxlO2lmKGh8fChoPShuLm1vZHVsZXNbdC50eXBlfHxhLnR5cGUuZGZsdF18fHt9KS5fbW9kdWxlKSwhaClyZXR1cm4hMTtpZighKGk9KHI9aC5hdHRyaWJ1dGVzKSYmcltvXSkpe3ZhciBmPWguYmFzZVBsb3RNb2R1bGU7ZiYmZi5hdHRyaWJ1dGVzJiYoaT1mLmF0dHJpYnV0ZXNbb10pfWl8fChpPWFbb10pfXJldHVybiB5KGksZSxzKX0sci5nZXRMYXlvdXRWYWxPYmplY3Q9ZnVuY3Rpb24odCxlKXtyZXR1cm4geShmdW5jdGlvbih0LGUpe3ZhciByLGksYSxzLGw9dC5fYmFzZVBsb3RNb2R1bGVzO2lmKGwpe3ZhciBjO2ZvcihyPTA7cjxsLmxlbmd0aDtyKyspe2lmKChhPWxbcl0pLmF0dHJSZWdleCYmYS5hdHRyUmVnZXgudGVzdChlKSl7aWYoYS5sYXlvdXRBdHRyT3ZlcnJpZGVzKXJldHVybiBhLmxheW91dEF0dHJPdmVycmlkZXM7IWMmJmEubGF5b3V0QXR0cmlidXRlcyYmKGM9YS5sYXlvdXRBdHRyaWJ1dGVzKX12YXIgaD1hLmJhc2VMYXlvdXRBdHRyT3ZlcnJpZGVzO2lmKGgmJmUgaW4gaClyZXR1cm4gaFtlXX1pZihjKXJldHVybiBjfXZhciBmPXQuX21vZHVsZXM7aWYoZilmb3Iocj0wO3I8Zi5sZW5ndGg7cisrKWlmKChzPWZbcl0ubGF5b3V0QXR0cmlidXRlcykmJmUgaW4gcylyZXR1cm4gc1tlXTtmb3IoaSBpbiBuLmNvbXBvbmVudHNSZWdpc3RyeSlpZighKGE9bi5jb21wb25lbnRzUmVnaXN0cnlbaV0pLnNjaGVtYSYmZT09PWEubmFtZSlyZXR1cm4gYS5sYXlvdXRBdHRyaWJ1dGVzO2lmKGUgaW4gbylyZXR1cm4gb1tlXTtpZigicmFkaWFsYXhpcyI9PT1lfHwiYW5ndWxhcmF4aXMiPT09ZSlyZXR1cm4gdVtlXTtyZXR1cm4gdS5sYXlvdXRbZV18fCExfSh0LGVbMF0pLGUsMSl9fSx7Ii4uL2xpYiI6Njg0LCIuLi9wbG90cy9hbmltYXRpb25fYXR0cmlidXRlcyI6NzI3LCIuLi9wbG90cy9hdHRyaWJ1dGVzIjo3MjksIi4uL3Bsb3RzL2ZyYW1lX2F0dHJpYnV0ZXMiOjc1OSwiLi4vcGxvdHMvbGF5b3V0X2F0dHJpYnV0ZXMiOjc4NiwiLi4vcGxvdHMvcG9sYXIvbGVnYWN5L2FyZWFfYXR0cmlidXRlcyI6ODAxLCIuLi9wbG90cy9wb2xhci9sZWdhY3kvYXhpc19hdHRyaWJ1dGVzIjo4MDIsIi4uL3JlZ2lzdHJ5Ijo4MTcsIi4vZWRpdF90eXBlcyI6NzE1fV0sNzIyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2xpYiIpLGk9dCgiLi4vcGxvdHMvYXR0cmlidXRlcyIpLGE9InRlbXBsYXRlaXRlbW5hbWUiLG89e25hbWU6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6Im5vbmUifX07ZnVuY3Rpb24gcyh0KXtyZXR1cm4gdCYmInN0cmluZyI9PXR5cGVvZiB0fWZ1bmN0aW9uIGwodCl7dmFyIGU9dC5sZW5ndGgtMTtyZXR1cm4icyIhPT10LmNoYXJBdChlKSYmbi53YXJuKCJiYWQgYXJndW1lbnQgdG8gYXJyYXlEZWZhdWx0S2V5OiAiK3QpLHQuc3Vic3RyKDAsdC5sZW5ndGgtMSkrImRlZmF1bHRzIn1vW2FdPXt2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJjYWxjIn0sci50ZW1wbGF0ZWRBcnJheT1mdW5jdGlvbih0LGUpe3JldHVybiBlLl9pc0xpbmtlZFRvQXJyYXk9dCxlLm5hbWU9by5uYW1lLGVbYV09b1thXSxlfSxyLnRyYWNlVGVtcGxhdGVyPWZ1bmN0aW9uKHQpe3ZhciBlLHIsYT17fTtmb3IoZSBpbiB0KXI9dFtlXSxBcnJheS5pc0FycmF5KHIpJiZyLmxlbmd0aCYmKGFbZV09MCk7cmV0dXJue25ld1RyYWNlOmZ1bmN0aW9uKG8pe3ZhciBzPXt0eXBlOmU9bi5jb2VyY2Uobyx7fSxpLCJ0eXBlIiksX3RlbXBsYXRlOm51bGx9O2lmKGUgaW4gYSl7cj10W2VdO3ZhciBsPWFbZV0lci5sZW5ndGg7YVtlXSsrLHMuX3RlbXBsYXRlPXJbbF19cmV0dXJuIHN9fX0sci5uZXdDb250YWluZXI9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXQuX3RlbXBsYXRlLGE9aSYmKGlbZV18fHImJmlbcl0pO3JldHVybiBuLmlzUGxhaW5PYmplY3QoYSl8fChhPW51bGwpLHRbZV09e190ZW1wbGF0ZTphfX0sci5hcnJheVRlbXBsYXRlcj1mdW5jdGlvbih0LGUscil7dmFyIG49dC5fdGVtcGxhdGUsaT1uJiZuW2woZSldLG89biYmbltlXTtBcnJheS5pc0FycmF5KG8pJiZvLmxlbmd0aHx8KG89W10pO3ZhciBjPXt9O3JldHVybntuZXdJdGVtOmZ1bmN0aW9uKHQpe3ZhciBlPXtuYW1lOnQubmFtZSxfaW5wdXQ6dH0sbj1lW2FdPXRbYV07aWYoIXMobikpcmV0dXJuIGUuX3RlbXBsYXRlPWksZTtmb3IodmFyIGw9MDtsPG8ubGVuZ3RoO2wrKyl7dmFyIHU9b1tsXTtpZih1Lm5hbWU9PT1uKXJldHVybiBjW25dPTEsZS5fdGVtcGxhdGU9dSxlfXJldHVybiBlW3JdPXRbcl18fCExLGUuX3RlbXBsYXRlPSExLGV9LGRlZmF1bHRJdGVtczpmdW5jdGlvbigpe2Zvcih2YXIgdD1bXSxlPTA7ZTxvLmxlbmd0aDtlKyspe3ZhciByPW9bZV0sbj1yLm5hbWU7aWYocyhuKSYmIWNbbl0pe3ZhciBpPXtfdGVtcGxhdGU6cixuYW1lOm4sX2lucHV0OntfdGVtcGxhdGVpdGVtbmFtZTpufX07aVthXT1yW2FdLHQucHVzaChpKSxjW25dPTF9fXJldHVybiB0fX19LHIuYXJyYXlEZWZhdWx0S2V5PWwsci5hcnJheUVkaXRvcj1mdW5jdGlvbih0LGUscil7dmFyIGk9KG4ubmVzdGVkUHJvcGVydHkodCxlKS5nZXQoKXx8W10pLmxlbmd0aCxvPXIuX2luZGV4LHM9bz49aSYmKHIuX2lucHV0fHx7fSkuX3RlbXBsYXRlaXRlbW5hbWU7cyYmKG89aSk7dmFyIGwsYz1lKyJbIitvKyJdIjtmdW5jdGlvbiB1KCl7bD17fSxzJiYobFtjXT17fSxsW2NdW2FdPXMpfWZ1bmN0aW9uIGgodCxlKXtzP24ubmVzdGVkUHJvcGVydHkobFtjXSx0KS5zZXQoZSk6bFtjKyIuIit0XT1lfWZ1bmN0aW9uIGYoKXt2YXIgdD1sO3JldHVybiB1KCksdH1yZXR1cm4gdSgpLHttb2RpZnlCYXNlOmZ1bmN0aW9uKHQsZSl7bFt0XT1lfSxtb2RpZnlJdGVtOmgsZ2V0VXBkYXRlT2JqOmYsYXBwbHlVcGRhdGU6ZnVuY3Rpb24oZSxyKXtlJiZoKGUscik7dmFyIGk9ZigpO2Zvcih2YXIgYSBpbiBpKW4ubmVzdGVkUHJvcGVydHkodCxhKS5zZXQoaVthXSl9fX19LHsiLi4vbGliIjo2ODQsIi4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjcyOX1dLDcyMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vcmVnaXN0cnkiKSxhPXQoIi4uL3Bsb3RzL3Bsb3RzIiksbz10KCIuLi9saWIiKSxzPXQoIi4uL2xpYi9jbGVhcl9nbF9jYW52YXNlcyIpLGw9dCgiLi4vY29tcG9uZW50cy9jb2xvciIpLGM9dCgiLi4vY29tcG9uZW50cy9kcmF3aW5nIiksdT10KCIuLi9jb21wb25lbnRzL3RpdGxlcyIpLGg9dCgiLi4vY29tcG9uZW50cy9tb2RlYmFyIiksZj10KCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLHA9dCgiLi4vY29uc3RhbnRzL2FsaWdubWVudCIpLGQ9dCgiLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0cmFpbnRzIiksZz1kLmVuZm9yY2UsbT1kLmNsZWFuLHY9dCgiLi4vcGxvdHMvY2FydGVzaWFuL2F1dG9yYW5nZSIpLmRvQXV0b1JhbmdlO2Z1bmN0aW9uIHkodCl7dmFyIGUsaT10Ll9mdWxsTGF5b3V0LGE9aS5fc2l6ZSxzPWEucCx1PWYubGlzdCh0LCIiLCEwKSxkPWkuX2hhcygiY2FydGVzaWFuIik7ZnVuY3Rpb24gZyh0LGUscil7dmFyIG49dC5fbHcvMjtyZXR1cm4ieCI9PT10Ll9pZC5jaGFyQXQoMCk/ZT8idG9wIj09PXI/ZS5fb2Zmc2V0LXMtbjplLl9vZmZzZXQrZS5fbGVuZ3RoK3MrbjphLnQrYS5oKigxLSh0LnBvc2l0aW9ufHwwKSkrbiUxOmU/InJpZ2h0Ij09PXI/ZS5fb2Zmc2V0K2UuX2xlbmd0aCtzK246ZS5fb2Zmc2V0LXMtbjphLmwrYS53Kih0LnBvc2l0aW9ufHwwKStuJTF9Zm9yKGU9MDtlPHUubGVuZ3RoO2UrKyl7dmFyIG09dVtlXTttLnNldFNjYWxlKCk7dmFyIHY9bS5fYW5jaG9yQXhpczttLl9saW5lcG9zaXRpb25zPXt9LG0uX2x3PWMuY3Jpc3BSb3VuZCh0LG0ubGluZXdpZHRoLDEpLG0uX21haW5MaW5lUG9zaXRpb249ZyhtLHYsbS5zaWRlKSxtLl9tYWluTWlycm9yUG9zaXRpb249bS5taXJyb3ImJnY/ZyhtLHYscC5PUFBPU0lURV9TSURFW20uc2lkZV0pOm51bGwsbS5fbWFpblN1YnBsb3Q9eChtLGkpfWkuX3BhcGVyZGl2LnN0eWxlKHt3aWR0aDppLndpZHRoKyJweCIsaGVpZ2h0OmkuaGVpZ2h0KyJweCJ9KS5zZWxlY3RBbGwoIi5tYWluLXN2ZyIpLmNhbGwoYy5zZXRTaXplLGkud2lkdGgsaS5oZWlnaHQpLHQuX2NvbnRleHQuc2V0QmFja2dyb3VuZCh0LGkucGFwZXJfYmdjb2xvcik7dmFyIHk9aS5fcGFwZXIuc2VsZWN0QWxsKCJnLnN1YnBsb3QiKSxfPVtdLGs9W107eS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPWkuX3Bsb3RzW3RdO2lmKGUubWFpbnBsb3QpcmV0dXJuIGUuYmcmJmUuYmcucmVtb3ZlKCksdm9pZChlLmJnPXZvaWQgMCk7dmFyIHI9ZS54YXhpcy5kb21haW4sbj1lLnlheGlzLmRvbWFpbixhPWUucGxvdGdyb3VwO2lmKGZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIGk9cltuXVswXSxhPXJbbl1bMV07aWYoIShpWzBdPj10WzFdfHxpWzFdPD10WzBdKSYmYVswXTxlWzFdJiZhWzFdPmVbMF0pcmV0dXJuITB9cmV0dXJuITF9KHIsbixrKSl7dmFyIHM9YS5ub2RlKCksbD1lLmJnPW8uZW5zdXJlU2luZ2xlKGEsInJlY3QiLCJiZyIpO3MuaW5zZXJ0QmVmb3JlKGwubm9kZSgpLHMuY2hpbGROb2Rlc1swXSl9ZWxzZSBhLnNlbGVjdCgicmVjdC5iZyIpLnJlbW92ZSgpLF8ucHVzaCh0KSxrLnB1c2goW3Isbl0pfSk7dmFyIE09aS5fYmdMYXllci5zZWxlY3RBbGwoIi5iZyIpLmRhdGEoXyk7cmV0dXJuIE0uZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKCJiZyIsITApLE0uZXhpdCgpLnJlbW92ZSgpLE0uZWFjaChmdW5jdGlvbih0KXtpLl9wbG90c1t0XS5iZz1uLnNlbGVjdCh0aGlzKX0pLHkuZWFjaChmdW5jdGlvbih0KXt2YXIgZT1pLl9wbG90c1t0XSxyPWUueGF4aXMsbj1lLnlheGlzO2UuYmcmJmQmJmUuYmcuY2FsbChjLnNldFJlY3Qsci5fb2Zmc2V0LXMsbi5fb2Zmc2V0LXMsci5fbGVuZ3RoKzIqcyxuLl9sZW5ndGgrMipzKS5jYWxsKGwuZmlsbCxpLnBsb3RfYmdjb2xvcikuc3R5bGUoInN0cm9rZS13aWR0aCIsMCk7dmFyIGEsaCxmPWUuY2xpcElkPSJjbGlwIitpLl91aWQrdCsicGxvdCIscD1vLmVuc3VyZVNpbmdsZUJ5SWQoaS5fY2xpcHMsImNsaXBQYXRoIixmLGZ1bmN0aW9uKHQpe3QuY2xhc3NlZCgicGxvdGNsaXAiLCEwKS5hcHBlbmQoInJlY3QiKX0pO2lmKGUuY2xpcFJlY3Q9cC5zZWxlY3QoInJlY3QiKS5hdHRyKHt3aWR0aDpyLl9sZW5ndGgsaGVpZ2h0Om4uX2xlbmd0aH0pLGMuc2V0VHJhbnNsYXRlKGUucGxvdCxyLl9vZmZzZXQsbi5fb2Zmc2V0KSxlLl9oYXNDbGlwT25BeGlzRmFsc2U/KGE9bnVsbCxoPWYpOihhPWYsaD1udWxsKSxjLnNldENsaXBVcmwoZS5wbG90LGEpLGUubGF5ZXJDbGlwSWQ9aCxkKXt2YXIgbSx2LHkseCxfLGssTSxBLFQsUyxFLEMsTCx6PSJNMCwwIjtiKHIsdCkmJihfPXcociwibGVmdCIsbix1KSxtPXIuX29mZnNldC0oXz9zK186MCksaz13KHIsInJpZ2h0IixuLHUpLHY9ci5fb2Zmc2V0K3IuX2xlbmd0aCsoaz9zK2s6MCkseT1nKHIsbiwiYm90dG9tIikseD1nKHIsbiwidG9wIiksKEw9IXIuX2FuY2hvckF4aXN8fHQhPT1yLl9tYWluU3VicGxvdCkmJnIudGlja3MmJiJhbGx0aWNrcyI9PT1yLm1pcnJvciYmKHIuX2xpbmVwb3NpdGlvbnNbdF09W3kseF0pLHo9RChyLEksZnVuY3Rpb24odCl7cmV0dXJuIk0iK3IuX29mZnNldCsiLCIrdCsiaCIrci5fbGVuZ3RofSksTCYmci5zaG93bGluZSYmKCJhbGwiPT09ci5taXJyb3J8fCJhbGx0aWNrcyI9PT1yLm1pcnJvcikmJih6Kz1JKHkpK0koeCkpLGUueGxpbmVzLnN0eWxlKCJzdHJva2Utd2lkdGgiLHIuX2x3KyJweCIpLmNhbGwobC5zdHJva2Usci5zaG93bGluZT9yLmxpbmVjb2xvcjoicmdiYSgwLDAsMCwwKSIpKSxlLnhsaW5lcy5hdHRyKCJkIix6KTt2YXIgUD0iTTAsMCI7YihuLHQpJiYoRT13KG4sImJvdHRvbSIscix1KSxNPW4uX29mZnNldCtuLl9sZW5ndGgrKEU/czowKSxDPXcobiwidG9wIixyLHUpLEE9bi5fb2Zmc2V0LShDP3M6MCksVD1nKG4sciwibGVmdCIpLFM9ZyhuLHIsInJpZ2h0IiksKEw9IW4uX2FuY2hvckF4aXN8fHQhPT1yLl9tYWluU3VicGxvdCkmJm4udGlja3MmJiJhbGx0aWNrcyI9PT1uLm1pcnJvciYmKG4uX2xpbmVwb3NpdGlvbnNbdF09W1QsU10pLFA9RChuLE8sZnVuY3Rpb24odCl7cmV0dXJuIk0iK3QrIiwiK24uX29mZnNldCsidiIrbi5fbGVuZ3RofSksTCYmbi5zaG93bGluZSYmKCJhbGwiPT09bi5taXJyb3J8fCJhbGx0aWNrcyI9PT1uLm1pcnJvcikmJihQKz1PKFQpK08oUykpLGUueWxpbmVzLnN0eWxlKCJzdHJva2Utd2lkdGgiLG4uX2x3KyJweCIpLmNhbGwobC5zdHJva2Usbi5zaG93bGluZT9uLmxpbmVjb2xvcjoicmdiYSgwLDAsMCwwKSIpKSxlLnlsaW5lcy5hdHRyKCJkIixQKX1mdW5jdGlvbiBJKHQpe3JldHVybiJNIittKyIsIit0KyJIIit2fWZ1bmN0aW9uIE8odCl7cmV0dXJuIk0iK3QrIiwiK0ErIlYiK019ZnVuY3Rpb24gRChlLHIsbil7aWYoIWUuc2hvd2xpbmV8fHQhPT1lLl9tYWluU3VicGxvdClyZXR1cm4iIjtpZighZS5fYW5jaG9yQXhpcylyZXR1cm4gbihlLl9tYWluTGluZVBvc2l0aW9uKTt2YXIgaT1yKGUuX21haW5MaW5lUG9zaXRpb24pO3JldHVybiBlLm1pcnJvciYmKGkrPXIoZS5fbWFpbk1pcnJvclBvc2l0aW9uKSksaX19KSxmLm1ha2VDbGlwUGF0aHModCksci5kcmF3TWFpblRpdGxlKHQpLGgubWFuYWdlKHQpLHQuX3Byb21pc2VzLmxlbmd0aCYmUHJvbWlzZS5hbGwodC5fcHJvbWlzZXMpfWZ1bmN0aW9uIHgodCxlKXt2YXIgcj1lLl9zdWJwbG90cyxuPXIuY2FydGVzaWFuLmNvbmNhdChyLmdsMmR8fFtdKSxpPXtfZnVsbExheW91dDplfSxhPSJ4Ij09PXQuX2lkLmNoYXJBdCgwKSxvPXQuX21haW5BeGlzLl9hbmNob3JBeGlzLHM9IiIsbD0iIixjPSIiO2lmKG8mJihjPW8uX21haW5BeGlzLl9pZCxzPWE/dC5faWQrYzpjK3QuX2lkKSwhc3x8IWUuX3Bsb3RzW3NdKXtzPSIiO2Zvcih2YXIgdT0wO3U8bi5sZW5ndGg7dSsrKXt2YXIgaD1uW3VdLHA9aC5pbmRleE9mKCJ5IiksZD1hP2guc3Vic3RyKDAscCk6aC5zdWJzdHIocCksZz1hP2guc3Vic3RyKHApOmguc3Vic3RyKDAscCk7aWYoZD09PXQuX2lkKXtsfHwobD1oKTt2YXIgbT1mLmdldEZyb21JZChpLGcpO2lmKGMmJm0ub3ZlcmxheWluZz09PWMpe3M9aDticmVha319fX1yZXR1cm4gc3x8bH1mdW5jdGlvbiBiKHQsZSl7cmV0dXJuKHQudGlja3N8fHQuc2hvd2xpbmUpJiYoZT09PXQuX21haW5TdWJwbG90fHwiYWxsIj09PXQubWlycm9yfHwiYWxsdGlja3MiPT09dC5taXJyb3IpfWZ1bmN0aW9uIF8odCxlLHIpe2lmKCFyLnNob3dsaW5lfHwhci5fbHcpcmV0dXJuITE7aWYoImFsbCI9PT1yLm1pcnJvcnx8ImFsbHRpY2tzIj09PXIubWlycm9yKXJldHVybiEwO3ZhciBuPXIuX2FuY2hvckF4aXM7aWYoIW4pcmV0dXJuITE7dmFyIGk9cC5GUk9NX0JMW2VdO3JldHVybiByLnNpZGU9PT1lP24uZG9tYWluW2ldPT09dC5kb21haW5baV06ci5taXJyb3ImJm4uZG9tYWluWzEtaV09PT10LmRvbWFpblsxLWldfWZ1bmN0aW9uIHcodCxlLHIsbil7aWYoXyh0LGUscikpcmV0dXJuIHIuX2x3O2Zvcih2YXIgaT0wO2k8bi5sZW5ndGg7aSsrKXt2YXIgYT1uW2ldO2lmKGEuX21haW5BeGlzPT09ci5fbWFpbkF4aXMmJl8odCxlLGEpKXJldHVybiBhLl9sd31yZXR1cm4gMH1yLmxheW91dFN0eWxlcz1mdW5jdGlvbih0KXtyZXR1cm4gby5zeW5jT3JBc3luYyhbYS5kb0F1dG9NYXJnaW4seV0sdCl9LHIuZHJhd01haW5UaXRsZT1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0O3UuZHJhdyh0LCJndGl0bGUiLHtwcm9wQ29udGFpbmVyOmUscHJvcE5hbWU6InRpdGxlIixwbGFjZWhvbGRlcjplLl9kZmx0VGl0bGUucGxvdCxhdHRyaWJ1dGVzOnt4OmUud2lkdGgvMix5OmUuX3NpemUudC8yLCJ0ZXh0LWFuY2hvciI6Im1pZGRsZSJ9fSl9LHIuZG9UcmFjZVN0eWxlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8dC5jYWxjZGF0YS5sZW5ndGg7ZSsrKXt2YXIgcj10LmNhbGNkYXRhW2VdLG49KCgoclswXXx8e30pLnRyYWNlfHx7fSkuX21vZHVsZXx8e30pLmFycmF5c1RvQ2FsY2RhdGE7biYmbihyLHJbMF0udHJhY2UpfXJldHVybiBhLnN0eWxlKHQpLGkuZ2V0Q29tcG9uZW50TWV0aG9kKCJsZWdlbmQiLCJkcmF3IikodCksYS5wcmV2aW91c1Byb21pc2VzKHQpfSxyLmRvQ29sb3JCYXJzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8dC5jYWxjZGF0YS5sZW5ndGg7ZSsrKXt2YXIgcj10LmNhbGNkYXRhW2VdWzBdO2lmKChyLnR8fHt9KS5jYil7dmFyIG49ci50cmFjZSxvPXIudC5jYjtpLnRyYWNlSXMobiwiY29udG91ciIpJiZvLmxpbmUoe3dpZHRoOiExIT09bi5jb250b3Vycy5zaG93bGluZXM/bi5saW5lLndpZHRoOjAsZGFzaDpuLmxpbmUuZGFzaCxjb2xvcjoibGluZSI9PT1uLmNvbnRvdXJzLmNvbG9yaW5nP28uX29wdHMubGluZS5jb2xvcjpuLmxpbmUuY29sb3J9KTt2YXIgcz1uLl9tb2R1bGUuY29sb3JiYXIuY29udGFpbmVyLGw9KHM/bltzXTpuKS5jb2xvcmJhcjtvLm9wdGlvbnMobCkoKX19cmV0dXJuIGEucHJldmlvdXNQcm9taXNlcyh0KX0sci5sYXlvdXRSZXBsb3Q9ZnVuY3Rpb24odCl7dmFyIGU9dC5sYXlvdXQ7cmV0dXJuIHQubGF5b3V0PXZvaWQgMCxpLmNhbGwoInBsb3QiLHQsIiIsZSl9LHIuZG9MZWdlbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGkuZ2V0Q29tcG9uZW50TWV0aG9kKCJsZWdlbmQiLCJkcmF3IikodCksYS5wcmV2aW91c1Byb21pc2VzKHQpfSxyLmRvVGlja3NSZWxheW91dD1mdW5jdGlvbih0LGUpe3JldHVybiBlP2YuZG9UaWNrcyh0LE9iamVjdC5rZXlzKGUpLCEwKTpmLmRvVGlja3ModCwicmVkcmF3IiksdC5fZnVsbExheW91dC5faGFzT25seUxhcmdlU3Bsb21zJiYocyh0KSxpLnN1YnBsb3RzUmVnaXN0cnkuc3Bsb20ucGxvdCh0KSksci5kcmF3TWFpblRpdGxlKHQpLGEucHJldmlvdXNQcm9taXNlcyh0KX0sci5kb01vZGVCYXI9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dDtoLm1hbmFnZSh0KTtmb3IodmFyIHI9MDtyPGUuX2Jhc2VQbG90TW9kdWxlcy5sZW5ndGg7cisrKXt2YXIgbj1lLl9iYXNlUGxvdE1vZHVsZXNbcl0udXBkYXRlRng7biYmbihlKX1yZXR1cm4gYS5wcmV2aW91c1Byb21pc2VzKHQpfSxyLmRvQ2FtZXJhPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0LHI9ZS5fc3VicGxvdHMuZ2wzZCxuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBpPWVbcltuXV07aS5fc2NlbmUuc2V0Q2FtZXJhKGkuY2FtZXJhKX19LHIuZHJhd0RhdGE9ZnVuY3Rpb24odCl7dmFyIGUscj10Ll9mdWxsTGF5b3V0LG49dC5jYWxjZGF0YTtmb3IoZT0wO2U8bi5sZW5ndGg7ZSsrKXt2YXIgbz1uW2VdWzBdLnRyYWNlOyEwPT09by52aXNpYmxlJiZvLl9tb2R1bGUuY29sb3JiYXJ8fHIuX2luZm9sYXllci5zZWxlY3QoIi5jYiIrby51aWQpLnJlbW92ZSgpfXModCk7dmFyIGw9ci5fYmFzZVBsb3RNb2R1bGVzO2ZvcihlPTA7ZTxsLmxlbmd0aDtlKyspbFtlXS5wbG90KHQpO3JldHVybiBhLnN0eWxlKHQpLGkuZ2V0Q29tcG9uZW50TWV0aG9kKCJzaGFwZXMiLCJkcmF3IikodCksaS5nZXRDb21wb25lbnRNZXRob2QoImFubm90YXRpb25zIiwiZHJhdyIpKHQpLHIuX3JlcGxvdHRpbmc9ITEsYS5wcmV2aW91c1Byb21pc2VzKHQpfSxyLmRvQXV0b1JhbmdlQW5kQ29uc3RyYWludHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPWYubGlzdCh0LCIiLCEwKSxyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07bSh0LG4pLHYobil9Zyh0KX0sci5maW5hbERyYXc9ZnVuY3Rpb24odCl7aS5nZXRDb21wb25lbnRNZXRob2QoInNoYXBlcyIsImRyYXciKSh0KSxpLmdldENvbXBvbmVudE1ldGhvZCgiaW1hZ2VzIiwiZHJhdyIpKHQpLGkuZ2V0Q29tcG9uZW50TWV0aG9kKCJhbm5vdGF0aW9ucyIsImRyYXciKSh0KSxpLmdldENvbXBvbmVudE1ldGhvZCgicmFuZ2VzbGlkZXIiLCJkcmF3IikodCksaS5nZXRDb21wb25lbnRNZXRob2QoInJhbmdlc2VsZWN0b3IiLCJkcmF3IikodCl9LHIuZHJhd01hcmdpblB1c2hlcnM9ZnVuY3Rpb24odCl7aS5nZXRDb21wb25lbnRNZXRob2QoImxlZ2VuZCIsImRyYXciKSh0KSxpLmdldENvbXBvbmVudE1ldGhvZCgicmFuZ2VzZWxlY3RvciIsImRyYXciKSh0KSxpLmdldENvbXBvbmVudE1ldGhvZCgic2xpZGVycyIsImRyYXciKSh0KSxpLmdldENvbXBvbmVudE1ldGhvZCgidXBkYXRlbWVudXMiLCJkcmF3IikodCl9fSx7Ii4uL2NvbXBvbmVudHMvY29sb3IiOjU1OCwiLi4vY29tcG9uZW50cy9kcmF3aW5nIjo1ODMsIi4uL2NvbXBvbmVudHMvbW9kZWJhciI6NjIxLCIuLi9jb21wb25lbnRzL3RpdGxlcyI6NjQ5LCIuLi9jb25zdGFudHMvYWxpZ25tZW50Ijo2NTYsIi4uL2xpYiI6Njg0LCIuLi9saWIvY2xlYXJfZ2xfY2FudmFzZXMiOjY2OCwiLi4vcGxvdHMvY2FydGVzaWFuL2F1dG9yYW5nZSI6NzMxLCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzMyLCIuLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RyYWludHMiOjczOSwiLi4vcGxvdHMvcGxvdHMiOjc5NSwiLi4vcmVnaXN0cnkiOjgxNyxkMzoxNDd9XSw3MjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vbGliIiksaT1uLmlzUGxhaW5PYmplY3QsYT10KCIuL3Bsb3Rfc2NoZW1hIiksbz10KCIuLi9wbG90cy9wbG90cyIpLHM9dCgiLi4vcGxvdHMvYXR0cmlidXRlcyIpLGw9dCgiLi9wbG90X3RlbXBsYXRlIiksYz10KCIuL3Bsb3RfY29uZmlnIik7ZnVuY3Rpb24gdSh0LGUpe3Q9bi5leHRlbmREZWVwKHt9LHQpO3ZhciByLGEsbz1PYmplY3Qua2V5cyh0KS5zb3J0KCk7ZnVuY3Rpb24gcyhlLHIsbil7aWYoaShyKSYmaShlKSl1KGUscik7ZWxzZSBpZihBcnJheS5pc0FycmF5KHIpJiZBcnJheS5pc0FycmF5KGUpKXt2YXIgbz1sLmFycmF5VGVtcGxhdGVyKHtfdGVtcGxhdGU6dH0sbik7Zm9yKGE9MDthPHIubGVuZ3RoO2ErKyl7dmFyIHM9clthXSxjPW8ubmV3SXRlbShzKS5fdGVtcGxhdGU7YyYmdShjLHMpfXZhciBoPW8uZGVmYXVsdEl0ZW1zKCk7Zm9yKGE9MDthPGgubGVuZ3RoO2ErKylyLnB1c2goaFthXS5fdGVtcGxhdGUpO2ZvcihhPTA7YTxyLmxlbmd0aDthKyspZGVsZXRlIHJbYV0udGVtcGxhdGVpdGVtbmFtZX19Zm9yKHI9MDtyPG8ubGVuZ3RoO3IrKyl7dmFyIGM9b1tyXSxmPXRbY107aWYoYyBpbiBlP3MoZixlW2NdLGMpOmVbY109ZixoKGMpPT09Yylmb3IodmFyIHAgaW4gZSl7dmFyIGQ9aChwKTtwPT09ZHx8ZCE9PWN8fHAgaW4gdHx8cyhmLGVbcF0sYyl9fX1mdW5jdGlvbiBoKHQpe3JldHVybiB0LnJlcGxhY2UoL1swLTldKyQvLCIiKX1mdW5jdGlvbiBmKHQsZSxyLGEsbyl7dmFyIHM9byYmcihvKTtmb3IodmFyIGMgaW4gdCl7dmFyIHU9dFtjXSxkPXAodCxjLGEpLGc9cCh0LGMsbyksbT1yKGcpO2lmKCFtKXt2YXIgdj1oKGMpO3YhPT1jJiYobT1yKGc9cCh0LHYsbykpKX1pZigoIXN8fHMhPT1tKSYmISghbXx8bS5fbm9UZW1wbGF0aW5nfHwiZGF0YV9hcnJheSI9PT1tLnZhbFR5cGV8fG0uYXJyYXlPayYmQXJyYXkuaXNBcnJheSh1KSkpaWYoIW0udmFsVHlwZSYmaSh1KSlmKHUsZSxyLGQsZyk7ZWxzZSBpZihtLl9pc0xpbmtlZFRvQXJyYXkmJkFycmF5LmlzQXJyYXkodSkpZm9yKHZhciB5PSExLHg9MCxiPXt9LF89MDtfPHUubGVuZ3RoO18rKyl7dmFyIHc9dVtfXTtpZihpKHcpKXt2YXIgaz13Lm5hbWU7aWYoayliW2tdfHwoZih3LGUscixwKHUseCxkKSxwKHUseCxnKSkseCsrLGJba109MSk7ZWxzZSBpZigheSl7dmFyIE09cCh0LGwuYXJyYXlEZWZhdWx0S2V5KGMpLGEpLEE9cCh1LHgsZCk7Zih3LGUscixBLHAodSx4LGcpKTt2YXIgVD1uLm5lc3RlZFByb3BlcnR5KGUsQSk7bi5uZXN0ZWRQcm9wZXJ0eShlLE0pLnNldChULmdldCgpKSxULnNldChudWxsKSx5PSEwfX19ZWxzZXtuLm5lc3RlZFByb3BlcnR5KGUsZCkuc2V0KHUpfX19ZnVuY3Rpb24gcCh0LGUscil7cmV0dXJuIHI/QXJyYXkuaXNBcnJheSh0KT9yKyJbIitlKyJdIjpyKyIuIitlOmV9ZnVuY3Rpb24gZCh0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKylpZihpKHRbZV0pKXJldHVybiEwfWZ1bmN0aW9uIGcodCl7dmFyIGU7c3dpdGNoKHQuY29kZSl7Y2FzZSJkYXRhIjplPSJUaGUgdGVtcGxhdGUgaGFzIG5vIGtleSBkYXRhLiI7YnJlYWs7Y2FzZSJsYXlvdXQiOmU9IlRoZSB0ZW1wbGF0ZSBoYXMgbm8ga2V5IGxheW91dC4iO2JyZWFrO2Nhc2UibWlzc2luZyI6ZT10LnBhdGg/IlRoZXJlIGFyZSBubyB0ZW1wbGF0ZXMgZm9yIGl0ZW0gIit0LnBhdGgrIiB3aXRoIG5hbWUgIit0LnRlbXBsYXRlaXRlbW5hbWU6IlRoZXJlIGFyZSBubyB0ZW1wbGF0ZXMgZm9yIHRyYWNlICIrdC5pbmRleCsiLCBvZiB0eXBlICIrdC50cmFjZVR5cGUrIi4iO2JyZWFrO2Nhc2UidW51c2VkIjplPXQucGF0aD8iVGhlIHRlbXBsYXRlIGl0ZW0gYXQgIit0LnBhdGgrIiB3YXMgbm90IHVzZWQgaW4gY29uc3RydWN0aW5nIHRoZSBwbG90LiI6dC5kYXRhQ291bnQ/IlNvbWUgb2YgdGhlIHRlbXBsYXRlcyBvZiB0eXBlICIrdC50cmFjZVR5cGUrIiB3ZXJlIG5vdCB1c2VkLiBUaGUgdGVtcGxhdGUgaGFzICIrdC50ZW1wbGF0ZUNvdW50KyIgdHJhY2VzLCB0aGUgZGF0YSBvbmx5IGhhcyAiK3QuZGF0YUNvdW50KyIgb2YgdGhpcyB0eXBlLiI6IlRoZSB0ZW1wbGF0ZSBoYXMgIit0LnRlbXBsYXRlQ291bnQrIiB0cmFjZXMgb2YgdHlwZSAiK3QudHJhY2VUeXBlKyIgYnV0IHRoZXJlIGFyZSBub25lIGluIHRoZSBkYXRhLiI7YnJlYWs7Y2FzZSJyZXVzZWQiOmU9IlNvbWUgb2YgdGhlIHRlbXBsYXRlcyBvZiB0eXBlICIrdC50cmFjZVR5cGUrIiB3ZXJlIHVzZWQgbW9yZSB0aGFuIG9uY2UuIFRoZSB0ZW1wbGF0ZSBoYXMgIit0LnRlbXBsYXRlQ291bnQrIiB0cmFjZXMsIHRoZSBkYXRhIGhhcyAiK3QuZGF0YUNvdW50KyIgb2YgdGhpcyB0eXBlLiJ9cmV0dXJuIHQubXNnPWUsdH1yLm1ha2VUZW1wbGF0ZT1mdW5jdGlvbih0KXt0PW4uZXh0ZW5kRGVlcCh7X2NvbnRleHQ6Y30sdCksby5zdXBwbHlEZWZhdWx0cyh0KTt2YXIgZT10LmRhdGF8fFtdLHI9dC5sYXlvdXR8fHt9O3IuX2Jhc2VQbG90TW9kdWxlcz10Ll9mdWxsTGF5b3V0Ll9iYXNlUGxvdE1vZHVsZXMsci5fbW9kdWxlcz10Ll9mdWxsTGF5b3V0Ll9tb2R1bGVzO3ZhciBsPXtkYXRhOnt9LGxheW91dDp7fX07ZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXt9O2YodCxlLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGEuZ2V0VHJhY2VWYWxPYmplY3QodCxuLm5lc3RlZFByb3BlcnR5KHt9LGUpLnBhcnRzKX0uYmluZChudWxsLHQpKTt2YXIgcj1uLmNvZXJjZSh0LHt9LHMsInR5cGUiKSxpPWwuZGF0YVtyXTtpfHwoaT1sLmRhdGFbcl09W10pLGkucHVzaChlKX0pLGYocixsLmxheW91dCxmdW5jdGlvbih0LGUpe3JldHVybiBhLmdldExheW91dFZhbE9iamVjdCh0LG4ubmVzdGVkUHJvcGVydHkoe30sZSkucGFydHMpfS5iaW5kKG51bGwscikpLGRlbGV0ZSBsLmxheW91dC50ZW1wbGF0ZTt2YXIgaD1yLnRlbXBsYXRlO2lmKGkoaCkpe3ZhciBwLGQsZyxtLHYseSx4PWgubGF5b3V0O2koeCkmJnUoeCxsLmxheW91dCk7dmFyIGI9aC5kYXRhO2lmKGkoYikpe2ZvcihkIGluIGwuZGF0YSlpZihnPWJbZF0sQXJyYXkuaXNBcnJheShnKSl7Zm9yKHk9KHY9bC5kYXRhW2RdKS5sZW5ndGgsbT1nLmxlbmd0aCxwPTA7cDx5O3ArKyl1KGdbcCVtXSx2W3BdKTtmb3IocD15O3A8bTtwKyspdi5wdXNoKG4uZXh0ZW5kRGVlcCh7fSxnW3BdKSl9Zm9yKGQgaW4gYilkIGluIGwuZGF0YXx8KGwuZGF0YVtkXT1uLmV4dGVuZERlZXAoW10sYltkXSkpfX1yZXR1cm4gbH0sci52YWxpZGF0ZVRlbXBsYXRlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bi5leHRlbmREZWVwKHt9LHtfY29udGV4dDpjLGRhdGE6dC5kYXRhLGxheW91dDp0LmxheW91dH0pLGE9ci5sYXlvdXR8fHt9O2koZSl8fChlPWEudGVtcGxhdGV8fHt9KTt2YXIgcz1lLmxheW91dCxsPWUuZGF0YSx1PVtdO3IubGF5b3V0PWEsci5sYXlvdXQudGVtcGxhdGU9ZSxvLnN1cHBseURlZmF1bHRzKHIpO3ZhciBmPXIuX2Z1bGxMYXlvdXQsbT1yLl9mdWxsRGF0YSx2PXt9O2lmKGkocyk/KCFmdW5jdGlvbiB0KGUscil7Zm9yKHZhciBuIGluIGUpaWYoIl8iIT09bi5jaGFyQXQoMCkmJmkoZVtuXSkpe3ZhciBhLG89aChuKSxzPVtdO2ZvcihhPTA7YTxyLmxlbmd0aDthKyspcy5wdXNoKHAoZSxuLHJbYV0pKSxvIT09biYmcy5wdXNoKHAoZSxvLHJbYV0pKTtmb3IoYT0wO2E8cy5sZW5ndGg7YSsrKXZbc1thXV09MTt0KGVbbl0scyl9fShmLFsibGF5b3V0Il0pLGZ1bmN0aW9uIHQoZSxyKXtmb3IodmFyIG4gaW4gZSlpZigtMT09PW4uaW5kZXhPZigiZGVmYXVsdHMiKSYmaShlW25dKSl7dmFyIGE9cChlLG4scik7dlthXT90KGVbbl0sYSk6dS5wdXNoKHtjb2RlOiJ1bnVzZWQiLHBhdGg6YX0pfX0ocywibGF5b3V0IikpOnUucHVzaCh7Y29kZToibGF5b3V0In0pLGkobCkpe2Zvcih2YXIgeSx4PXt9LGI9MDtiPG0ubGVuZ3RoO2IrKyl7dmFyIF89bVtiXTt4W3k9Xy50eXBlXT0oeFt5XXx8MCkrMSxfLl9mdWxsSW5wdXQuX3RlbXBsYXRlfHx1LnB1c2goe2NvZGU6Im1pc3NpbmciLGluZGV4Ol8uX2Z1bGxJbnB1dC5pbmRleCx0cmFjZVR5cGU6eX0pfWZvcih5IGluIGwpe3ZhciB3PWxbeV0ubGVuZ3RoLGs9eFt5XXx8MDt3Pms/dS5wdXNoKHtjb2RlOiJ1bnVzZWQiLHRyYWNlVHlwZTp5LHRlbXBsYXRlQ291bnQ6dyxkYXRhQ291bnQ6a30pOms+dyYmdS5wdXNoKHtjb2RlOiJyZXVzZWQiLHRyYWNlVHlwZTp5LHRlbXBsYXRlQ291bnQ6dyxkYXRhQ291bnQ6a30pfX1lbHNlIHUucHVzaCh7Y29kZToiZGF0YSJ9KTtpZihmdW5jdGlvbiB0KGUscil7Zm9yKHZhciBuIGluIGUpaWYoIl8iIT09bi5jaGFyQXQoMCkpe3ZhciBhPWVbbl0sbz1wKGUsbixyKTtpKGEpPyhBcnJheS5pc0FycmF5KGUpJiYhMT09PWEuX3RlbXBsYXRlJiZhLnRlbXBsYXRlaXRlbW5hbWUmJnUucHVzaCh7Y29kZToibWlzc2luZyIscGF0aDpvLHRlbXBsYXRlaXRlbW5hbWU6YS50ZW1wbGF0ZWl0ZW1uYW1lfSksdChhLG8pKTpBcnJheS5pc0FycmF5KGEpJiZkKGEpJiZ0KGEsbyl9fSh7ZGF0YTptLGxheW91dDpmfSwiIiksdS5sZW5ndGgpcmV0dXJuIHUubWFwKGcpfX0seyIuLi9saWIiOjY4NCwiLi4vcGxvdHMvYXR0cmlidXRlcyI6NzI5LCIuLi9wbG90cy9wbG90cyI6Nzk1LCIuL3Bsb3RfY29uZmlnIjo3MjAsIi4vcGxvdF9zY2hlbWEiOjcyMSwiLi9wbG90X3RlbXBsYXRlIjo3MjJ9XSw3MjU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9wbG90X2FwaSIpLGk9dCgiLi4vbGliIiksYT10KCIuLi9zbmFwc2hvdC9oZWxwZXJzIiksbz10KCIuLi9zbmFwc2hvdC90b3N2ZyIpLHM9dCgiLi4vc25hcHNob3Qvc3ZndG9pbWciKSxsPXtmb3JtYXQ6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInBuZyIsImpwZWciLCJ3ZWJwIiwic3ZnIl0sZGZsdDoicG5nIn0sd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjF9LGhlaWdodDp7dmFsVHlwZToibnVtYmVyIixtaW46MX0sc2NhbGU6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxfSxzZXRCYWNrZ3JvdW5kOnt2YWxUeXBlOiJhbnkiLGRmbHQ6ITF9LGltYWdlRGF0YU9ubHk6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9fSxjPS9eZGF0YTppbWFnZVwvXHcrO2Jhc2U2NCwvO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLHUsaDtmdW5jdGlvbiBmKHQpe3JldHVybiEodCBpbiBlKXx8aS52YWxpZGF0ZShlW3RdLGxbdF0pfWlmKGU9ZXx8e30saS5pc1BsYWluT2JqZWN0KHQpPyhyPXQuZGF0YXx8W10sdT10LmxheW91dHx8e30saD10LmNvbmZpZ3x8e30pOih0PWkuZ2V0R3JhcGhEaXYodCkscj1pLmV4dGVuZERlZXAoW10sdC5kYXRhKSx1PWkuZXh0ZW5kRGVlcCh7fSx0LmxheW91dCksaD10Ll9jb250ZXh0KSwhZigid2lkdGgiKXx8IWYoImhlaWdodCIpKXRocm93IG5ldyBFcnJvcigiSGVpZ2h0IGFuZCB3aWR0aCBzaG91bGQgYmUgcGl4ZWwgdmFsdWVzLiIpO2lmKCFmKCJmb3JtYXQiKSl0aHJvdyBuZXcgRXJyb3IoIkltYWdlIGZvcm1hdCBpcyBub3QganBlZywgcG5nLCBzdmcgb3Igd2VicC4iKTt2YXIgcD17fTtmdW5jdGlvbiBkKHQscil7cmV0dXJuIGkuY29lcmNlKGUscCxsLHQscil9dmFyIGc9ZCgiZm9ybWF0IiksbT1kKCJ3aWR0aCIpLHY9ZCgiaGVpZ2h0IikseT1kKCJzY2FsZSIpLHg9ZCgic2V0QmFja2dyb3VuZCIpLGI9ZCgiaW1hZ2VEYXRhT25seSIpLF89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Xy5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLF8uc3R5bGUubGVmdD0iLTUwMDBweCIsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChfKTt2YXIgdz1pLmV4dGVuZEZsYXQoe30sdSk7bSYmKHcud2lkdGg9bSksdiYmKHcuaGVpZ2h0PXYpO3ZhciBrPWkuZXh0ZW5kRmxhdCh7fSxoLHtzdGF0aWNQbG90OiEwLHNldEJhY2tncm91bmQ6eH0pLE09YS5nZXRSZWRyYXdGdW5jKF8pO2Z1bmN0aW9uIEEoKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24odCl7c2V0VGltZW91dCh0LGEuZ2V0RGVsYXkoXy5fZnVsbExheW91dCkpfSl9ZnVuY3Rpb24gVCgpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih0LGUpe3ZhciByPW8oXyxnLHkpLGE9Xy5fZnVsbExheW91dC53aWR0aCxsPV8uX2Z1bGxMYXlvdXQuaGVpZ2h0O2lmKG4ucHVyZ2UoXyksZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChfKSwic3ZnIj09PWcpcmV0dXJuIHQoYj9yOiJkYXRhOmltYWdlL3N2Zyt4bWwsIitlbmNvZGVVUklDb21wb25lbnQocikpO3ZhciBjPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO2MuaWQ9aS5yYW5kc3RyKCkscyh7Zm9ybWF0Omcsd2lkdGg6YSxoZWlnaHQ6bCxzY2FsZTp5LGNhbnZhczpjLHN2ZzpyLHByb21pc2U6ITB9KS50aGVuKHQpLmNhdGNoKGUpfSl9cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHQsZSl7bi5wbG90KF8scix3LGspLnRoZW4oTSkudGhlbihBKS50aGVuKFQpLnRoZW4oZnVuY3Rpb24oZSl7dChmdW5jdGlvbih0KXtyZXR1cm4gYj90LnJlcGxhY2UoYywiIik6dH0oZSkpfSkuY2F0Y2goZnVuY3Rpb24odCl7ZSh0KX0pfSl9fSx7Ii4uL2xpYiI6Njg0LCIuLi9zbmFwc2hvdC9oZWxwZXJzIjo4MjEsIi4uL3NuYXBzaG90L3N2Z3RvaW1nIjo4MjMsIi4uL3NuYXBzaG90L3Rvc3ZnIjo4MjUsIi4vcGxvdF9hcGkiOjcxOX1dLDcyNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9saWIiKSxpPXQoIi4uL3Bsb3RzL3Bsb3RzIiksYT10KCIuL3Bsb3Rfc2NoZW1hIiksbz10KCIuL3Bsb3RfY29uZmlnIikscz1uLmlzUGxhaW5PYmplY3QsbD1BcnJheS5pc0FycmF5LGM9bi5pc0FycmF5T3JUeXBlZEFycmF5O2Z1bmN0aW9uIHUodCxlLHIsaSxhLG8pe289b3x8W107Zm9yKHZhciBoPU9iamVjdC5rZXlzKHQpLGY9MDtmPGgubGVuZ3RoO2YrKyl7dmFyIG09aFtmXTtpZigidHJhbnNmb3JtcyIhPT1tKXt2YXIgdj1vLnNsaWNlKCk7di5wdXNoKG0pO3ZhciB5PXRbbV0seD1lW21dLGI9ZyhyLG0pLF89ImluZm9fYXJyYXkiPT09KGJ8fHt9KS52YWxUeXBlLHc9ImNvbG9yc2NhbGUiPT09KGJ8fHt9KS52YWxUeXBlLGs9KGJ8fHt9KS5pdGVtcztpZihkKHIsbSkpaWYocyh5KSYmcyh4KSl1KHkseCxiLGksYSx2KTtlbHNlIGlmKF8mJmwoeSkpe3kubGVuZ3RoPngubGVuZ3RoJiZpLnB1c2gocCgidW51c2VkIixhLHYuY29uY2F0KHgubGVuZ3RoKSkpO3ZhciBNLEEsVCxTLEUsQz14Lmxlbmd0aCxMPUFycmF5LmlzQXJyYXkoayk7aWYoTCYmKEM9TWF0aC5taW4oQyxrLmxlbmd0aCkpLDI9PT1iLmRpbWVuc2lvbnMpZm9yKEE9MDtBPEM7QSsrKWlmKGwoeVtBXSkpe3lbQV0ubGVuZ3RoPnhbQV0ubGVuZ3RoJiZpLnB1c2gocCgidW51c2VkIixhLHYuY29uY2F0KEEseFtBXS5sZW5ndGgpKSk7dmFyIHo9eFtBXS5sZW5ndGg7Zm9yKE09MDtNPChMP01hdGgubWluKHosa1tBXS5sZW5ndGgpOnopO00rKylUPUw/a1tBXVtNXTprLFM9eVtBXVtNXSxFPXhbQV1bTV0sbi52YWxpZGF0ZShTLFQpP0UhPT1TJiZFIT09K1MmJmkucHVzaChwKCJkeW5hbWljIixhLHYuY29uY2F0KEEsTSksUyxFKSk6aS5wdXNoKHAoInZhbHVlIixhLHYuY29uY2F0KEEsTSksUykpfWVsc2UgaS5wdXNoKHAoImFycmF5IixhLHYuY29uY2F0KEEpLHlbQV0pKTtlbHNlIGZvcihBPTA7QTxDO0ErKylUPUw/a1tBXTprLFM9eVtBXSxFPXhbQV0sbi52YWxpZGF0ZShTLFQpP0UhPT1TJiZFIT09K1MmJmkucHVzaChwKCJkeW5hbWljIixhLHYuY29uY2F0KEEpLFMsRSkpOmkucHVzaChwKCJ2YWx1ZSIsYSx2LmNvbmNhdChBKSxTKSl9ZWxzZSBpZihiLml0ZW1zJiYhXyYmbCh5KSl7dmFyIFAsSSxPPWtbT2JqZWN0LmtleXMoaylbMF1dLEQ9W107Zm9yKFA9MDtQPHgubGVuZ3RoO1ArKyl7dmFyIFI9eFtQXS5faW5kZXh8fFA7aWYoKEk9di5zbGljZSgpKS5wdXNoKFIpLHMoeVtSXSkmJnMoeFtQXSkpe0QucHVzaChSKTt2YXIgQj15W1JdLEY9eFtQXTtzKEIpJiYhMSE9PUIudmlzaWJsZSYmITE9PT1GLnZpc2libGU/aS5wdXNoKHAoImludmlzaWJsZSIsYSxJKSk6dShCLEYsTyxpLGEsSSl9fWZvcihQPTA7UDx5Lmxlbmd0aDtQKyspKEk9di5zbGljZSgpKS5wdXNoKFApLHMoeVtQXSk/LTE9PT1ELmluZGV4T2YoUCkmJmkucHVzaChwKCJ1bnVzZWQiLGEsSSkpOmkucHVzaChwKCJvYmplY3QiLGEsSSx5W1BdKSl9ZWxzZSFzKHkpJiZzKHgpP2kucHVzaChwKCJvYmplY3QiLGEsdix5KSk6Yyh5KXx8IWMoeCl8fF98fHc/bSBpbiBlP24udmFsaWRhdGUoeSxiKT8iZW51bWVyYXRlZCI9PT1iLnZhbFR5cGUmJihiLmNvZXJjZU51bWJlciYmeSE9PSt4fHx5IT09eCkmJmkucHVzaChwKCJkeW5hbWljIixhLHYseSx4KSk6aS5wdXNoKHAoInZhbHVlIixhLHYseSkpOmkucHVzaChwKCJ1bnVzZWQiLGEsdix5KSk6aS5wdXNoKHAoImFycmF5IixhLHYseSkpO2Vsc2UgaS5wdXNoKHAoInNjaGVtYSIsYSx2KSl9fXJldHVybiBpfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGMsaD1hLmdldCgpLGY9W10sZD17X2NvbnRleHQ6bi5leHRlbmRGbGF0KHt9LG8pfTtsKHQpPyhkLmRhdGE9bi5leHRlbmREZWVwKFtdLHQpLHI9dCk6KGQuZGF0YT1bXSxyPVtdLGYucHVzaChwKCJhcnJheSIsImRhdGEiKSkpLHMoZSk/KGQubGF5b3V0PW4uZXh0ZW5kRGVlcCh7fSxlKSxjPWUpOihkLmxheW91dD17fSxjPXt9LGFyZ3VtZW50cy5sZW5ndGg+MSYmZi5wdXNoKHAoIm9iamVjdCIsImxheW91dCIpKSksaS5zdXBwbHlEZWZhdWx0cyhkKTtmb3IodmFyIGc9ZC5fZnVsbERhdGEsbT1yLmxlbmd0aCx2PTA7djxtO3YrKyl7dmFyIHk9clt2XSx4PVsiZGF0YSIsdl07aWYocyh5KSl7dmFyIGI9Z1t2XSxfPWIudHlwZSx3PWgudHJhY2VzW19dLmF0dHJpYnV0ZXM7dy50eXBlPXt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6W19dfSwhMT09PWIudmlzaWJsZSYmITEhPT15LnZpc2libGUmJmYucHVzaChwKCJpbnZpc2libGUiLHgpKSx1KHksYix3LGYseCk7dmFyIGs9eS50cmFuc2Zvcm1zLE09Yi50cmFuc2Zvcm1zO2lmKGspe2woayl8fGYucHVzaChwKCJhcnJheSIseCxbInRyYW5zZm9ybXMiXSkpLHgucHVzaCgidHJhbnNmb3JtcyIpO2Zvcih2YXIgQT0wO0E8ay5sZW5ndGg7QSsrKXt2YXIgVD1bInRyYW5zZm9ybXMiLEFdLFM9a1tBXS50eXBlO2lmKHMoa1tBXSkpe3ZhciBFPWgudHJhbnNmb3Jtc1tTXT9oLnRyYW5zZm9ybXNbU10uYXR0cmlidXRlczp7fTtFLnR5cGU9e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpPYmplY3Qua2V5cyhoLnRyYW5zZm9ybXMpfSx1KGtbQV0sTVtBXSxFLGYseCxUKX1lbHNlIGYucHVzaChwKCJvYmplY3QiLHgsVCkpfX19ZWxzZSBmLnB1c2gocCgib2JqZWN0Iix4KSl9cmV0dXJuIHUoYyxkLl9mdWxsTGF5b3V0LGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBpPWVbcl0udHlwZSxhPXQudHJhY2VzW2ldLmxheW91dEF0dHJpYnV0ZXM7YSYmbi5leHRlbmRGbGF0KHQubGF5b3V0LmxheW91dEF0dHJpYnV0ZXMsYSl9cmV0dXJuIHQubGF5b3V0LmxheW91dEF0dHJpYnV0ZXN9KGgsZyksZiwibGF5b3V0IiksMD09PWYubGVuZ3RoP3ZvaWQgMDpmfTt2YXIgaD17b2JqZWN0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuKCJsYXlvdXQiPT09dCYmIiI9PT1lPyJUaGUgbGF5b3V0IGFyZ3VtZW50IjoiZGF0YSI9PT10WzBdJiYiIj09PWU/IlRyYWNlICIrdFsxXSsiIGluIHRoZSBkYXRhIGFyZ3VtZW50IjpmKHQpKyJrZXkgIitlKSsiIG11c3QgYmUgbGlua2VkIHRvIGFuIG9iamVjdCBjb250YWluZXIifSxhcnJheTpmdW5jdGlvbih0LGUpe3JldHVybigiZGF0YSI9PT10PyJUaGUgZGF0YSBhcmd1bWVudCI6Zih0KSsia2V5ICIrZSkrIiBtdXN0IGJlIGxpbmtlZCB0byBhbiBhcnJheSBjb250YWluZXIifSxzY2hlbWE6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZih0KSsia2V5ICIrZSsiIGlzIG5vdCBwYXJ0IG9mIHRoZSBzY2hlbWEifSx1bnVzZWQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXMocik/ImNvbnRhaW5lciI6ImtleSI7cmV0dXJuIGYodCkrbisiICIrZSsiIGRpZCBub3QgZ2V0IGNvZXJjZWQifSxkeW5hbWljOmZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybltmKHQpKyJrZXkiLGUsIihzZXQgdG8gJyIrcisiJykiLCJnb3QgcmVzZXQgdG8iLCInIituKyInIiwiZHVyaW5nIGRlZmF1bHRzLiJdLmpvaW4oIiAiKX0saW52aXNpYmxlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuKGU/Zih0KSsiaXRlbSAiK2U6IlRyYWNlICIrdFsxXSkrIiBnb3QgZGVmYXVsdGVkIHRvIGJlIG5vdCB2aXNpYmxlIn0sdmFsdWU6ZnVuY3Rpb24odCxlLHIpe3JldHVybltmKHQpKyJrZXkgIitlLCJpcyBzZXQgdG8gYW4gaW52YWxpZCB2YWx1ZSAoIityKyIpIl0uam9pbigiICIpfX07ZnVuY3Rpb24gZih0KXtyZXR1cm4gbCh0KT8iSW4gZGF0YSB0cmFjZSAiK3RbMV0rIiwgIjoiSW4gIit0KyIsICJ9ZnVuY3Rpb24gcCh0LGUscixpLGEpe3ZhciBvLHM7cj1yfHwiIixsKGUpPyhvPWVbMF0scz1lWzFdKToobz1lLHM9bnVsbCk7dmFyIGM9ZnVuY3Rpb24odCl7aWYoIWwodCkpcmV0dXJuIFN0cmluZyh0KTtmb3IodmFyIGU9IiIscj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdOyJudW1iZXIiPT10eXBlb2Ygbj9lPWUuc3Vic3RyKDAsZS5sZW5ndGgtMSkrIlsiK24rIl0iOmUrPW4scjx0Lmxlbmd0aC0xJiYoZSs9Ii4iKX1yZXR1cm4gZX0ociksdT1oW3RdKGUsYyxpLGEpO3JldHVybiBuLmxvZyh1KSx7Y29kZTp0LGNvbnRhaW5lcjpvLHRyYWNlOnMscGF0aDpyLGFzdHI6Yyxtc2c6dX19ZnVuY3Rpb24gZCh0LGUpe3ZhciByPXYoZSksbj1yLmtleU1pbnVzSWQsaT1yLmlkO3JldHVybiEhKG4gaW4gdCYmdFtuXS5faXNTdWJwbG90T2JqJiZpKXx8ZSBpbiB0fWZ1bmN0aW9uIGcodCxlKXtyZXR1cm4gZSBpbiB0P3RbZV06dFt2KGUpLmtleU1pbnVzSWRdfXZhciBtPW4uY291bnRlclJlZ2V4KCIoW2Etel0rKSIpO2Z1bmN0aW9uIHYodCl7dmFyIGU9dC5tYXRjaChtKTtyZXR1cm57a2V5TWludXNJZDplJiZlWzFdLGlkOmUmJmVbMl19fX0seyIuLi9saWIiOjY4NCwiLi4vcGxvdHMvcGxvdHMiOjc5NSwiLi9wbG90X2NvbmZpZyI6NzIwLCIuL3Bsb3Rfc2NoZW1hIjo3MjF9XSw3Mjc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIixkZmx0OiJhZnRlcmFsbCIsdmFsdWVzOlsiaW1tZWRpYXRlIiwibmV4dCIsImFmdGVyYWxsIl19LGRpcmVjdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZm9yd2FyZCIsInJldmVyc2UiXSxkZmx0OiJmb3J3YXJkIn0sZnJvbWN1cnJlbnQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGZyYW1lOntkdXJhdGlvbjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjUwMH0scmVkcmF3Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfX0sdHJhbnNpdGlvbjp7ZHVyYXRpb246e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDo1MDB9LGVhc2luZzp7dmFsVHlwZToiZW51bWVyYXRlZCIsZGZsdDoiY3ViaWMtaW4tb3V0Iix2YWx1ZXM6WyJsaW5lYXIiLCJxdWFkIiwiY3ViaWMiLCJzaW4iLCJleHAiLCJjaXJjbGUiLCJlbGFzdGljIiwiYmFjayIsImJvdW5jZSIsImxpbmVhci1pbiIsInF1YWQtaW4iLCJjdWJpYy1pbiIsInNpbi1pbiIsImV4cC1pbiIsImNpcmNsZS1pbiIsImVsYXN0aWMtaW4iLCJiYWNrLWluIiwiYm91bmNlLWluIiwibGluZWFyLW91dCIsInF1YWQtb3V0IiwiY3ViaWMtb3V0Iiwic2luLW91dCIsImV4cC1vdXQiLCJjaXJjbGUtb3V0IiwiZWxhc3RpYy1vdXQiLCJiYWNrLW91dCIsImJvdW5jZS1vdXQiLCJsaW5lYXItaW4tb3V0IiwicXVhZC1pbi1vdXQiLCJjdWJpYy1pbi1vdXQiLCJzaW4taW4tb3V0IiwiZXhwLWluLW91dCIsImNpcmNsZS1pbi1vdXQiLCJlbGFzdGljLWluLW91dCIsImJhY2staW4tb3V0IiwiYm91bmNlLWluLW91dCJdfX19fSx7fV0sNzI4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2xpYiIpLGk9dCgiLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGEsbyxzPXIubmFtZSxsPXIuaW5jbHVzaW9uQXR0cnx8InZpc2libGUiLGM9ZVtzXSx1PW4uaXNBcnJheU9yVHlwZWRBcnJheSh0W3NdKT90W3NdOltdLGg9ZVtzXT1bXSxmPWkuYXJyYXlUZW1wbGF0ZXIoZSxzLGwpO2ZvcihhPTA7YTx1Lmxlbmd0aDthKyspe3ZhciBwPXVbYV07bi5pc1BsYWluT2JqZWN0KHApP289Zi5uZXdJdGVtKHApOihvPWYubmV3SXRlbSh7fSkpW2xdPSExLG8uX2luZGV4PWEsITEhPT1vW2xdJiZyLmhhbmRsZUl0ZW1EZWZhdWx0cyhwLG8sZSxyKSxoLnB1c2gobyl9dmFyIGQ9Zi5kZWZhdWx0SXRlbXMoKTtmb3IoYT0wO2E8ZC5sZW5ndGg7YSsrKShvPWRbYV0pLl9pbmRleD1oLmxlbmd0aCxyLmhhbmRsZUl0ZW1EZWZhdWx0cyh7fSxvLGUscix7fSksaC5wdXNoKG8pO2lmKG4uaXNBcnJheU9yVHlwZWRBcnJheShjKSl7dmFyIGc9TWF0aC5taW4oYy5sZW5ndGgsaC5sZW5ndGgpO2ZvcihhPTA7YTxnO2ErKyluLnJlbGlua1ByaXZhdGVLZXlzKGhbYV0sY1thXSl9cmV0dXJuIGh9fSx7Ii4uL2xpYiI6Njg0LCIuLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo3MjJ9XSw3Mjk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vY29tcG9uZW50cy9meC9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPXt0eXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6W10sZGZsdDoic2NhdHRlciIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMiLF9ub1RlbXBsYXRpbmc6ITB9LHZpc2libGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbITAsITEsImxlZ2VuZG9ubHkiXSxkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn0sc2hvd2xlZ2VuZDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToic3R5bGUifSxsZWdlbmRncm91cDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJzdHlsZSJ9LG9wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxLGVkaXRUeXBlOiJzdHlsZSJ9LG5hbWU6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6InN0eWxlIn0sdWlkOnt2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJwbG90In0saWRzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGN1c3RvbWRhdGE6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sc2VsZWN0ZWRwb2ludHM6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMifSxob3ZlcmluZm86e3ZhbFR5cGU6ImZsYWdsaXN0IixmbGFnczpbIngiLCJ5IiwieiIsInRleHQiLCJuYW1lIl0sZXh0cmFzOlsiYWxsIiwibm9uZSIsInNraXAiXSxhcnJheU9rOiEwLGRmbHQ6ImFsbCIsZWRpdFR5cGU6Im5vbmUifSxob3ZlcmxhYmVsOm4uaG92ZXJsYWJlbCxzdHJlYW06e3Rva2VuOnt2YWxUeXBlOiJzdHJpbmciLG5vQmxhbms6ITAsc3RyaWN0OiEwLGVkaXRUeXBlOiJjYWxjIn0sbWF4cG9pbnRzOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxZTQsZGZsdDo1MDAsZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9LHRyYW5zZm9ybXM6e19pc0xpbmtlZFRvQXJyYXk6InRyYW5zZm9ybSIsZWRpdFR5cGU6ImNhbGMifX19LHsiLi4vY29tcG9uZW50cy9meC9hdHRyaWJ1dGVzIjo1OTJ9XSw3MzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXt4YXhpczp7dmFsVHlwZToic3VicGxvdGlkIixkZmx0OiJ4IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHlheGlzOnt2YWxUeXBlOiJzdWJwbG90aWQiLGRmbHQ6InkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn19fSx7fV0sNzMxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5GUF9TQUZFO2Z1bmN0aW9uIG8odCl7dmFyIGUscixuLGEsbyxsLGMsdSxoPVtdLGY9dC5fbWluWzBdLnZhbCxwPXQuX21heFswXS52YWwsZD0wLGc9ITEsbT1zKHQpO2ZvcihlPTE7ZTx0Ll9taW4ubGVuZ3RoJiZmPT09cDtlKyspZj1NYXRoLm1pbihmLHQuX21pbltlXS52YWwpO2ZvcihlPTE7ZTx0Ll9tYXgubGVuZ3RoJiZmPT09cDtlKyspcD1NYXRoLm1heChwLHQuX21heFtlXS52YWwpO2lmKHQucmFuZ2Upe3ZhciB2PWkuc2ltcGxlTWFwKHQucmFuZ2UsdC5yMmwpO2c9dlsxXTx2WzBdfWZvcigicmV2ZXJzZWQiPT09dC5hdXRvcmFuZ2UmJihnPSEwLHQuYXV0b3JhbmdlPSEwKSxlPTA7ZTx0Ll9taW4ubGVuZ3RoO2UrKylmb3Iobj10Ll9taW5bZV0scj0wO3I8dC5fbWF4Lmxlbmd0aDtyKyspdT0oYT10Ll9tYXhbcl0pLnZhbC1uLnZhbCxjPXQuX2xlbmd0aC1tKG4pLW0oYSksdT4wJiZjPjAmJnUvYz5kJiYobz1uLGw9YSxkPXUvYyk7aWYoZj09PXApe3ZhciB5PWYtMSx4PWYrMTtoPSJ0b3plcm8iPT09dC5yYW5nZW1vZGU/ZjwwP1t5LDBdOlswLHhdOiJub25uZWdhdGl2ZSI9PT10LnJhbmdlbW9kZT9bTWF0aC5tYXgoMCx5KSxNYXRoLm1heCgwLHgpXTpbeSx4XX1lbHNlIGQmJigibGluZWFyIiE9PXQudHlwZSYmIi0iIT09dC50eXBlfHwoInRvemVybyI9PT10LnJhbmdlbW9kZT8oby52YWw+PTAmJihvPXt2YWw6MCxwYWQ6MH0pLGwudmFsPD0wJiYobD17dmFsOjAscGFkOjB9KSk6Im5vbm5lZ2F0aXZlIj09PXQucmFuZ2Vtb2RlJiYoby52YWwtZCptKG8pPDAmJihvPXt2YWw6MCxwYWQ6MH0pLGwudmFsPDAmJihsPXt2YWw6MSxwYWQ6MH0pKSxkPShsLnZhbC1vLnZhbCkvKHQuX2xlbmd0aC1tKG8pLW0obCkpKSxoPVtvLnZhbC1kKm0obyksbC52YWwrZCptKGwpXSk7cmV0dXJuIGhbMF09PT1oWzFdJiYoInRvemVybyI9PT10LnJhbmdlbW9kZT9oPWhbMF08MD9baFswXSwwXTpoWzBdPjA/WzAsaFswXV06WzAsMV06KGg9W2hbMF0tMSxoWzBdKzFdLCJub25uZWdhdGl2ZSI9PT10LnJhbmdlbW9kZSYmKGhbMF09TWF0aC5tYXgoMCxoWzBdKSkpKSxnJiZoLnJldmVyc2UoKSxpLnNpbXBsZU1hcChoLHQubDJyfHxOdW1iZXIpfWZ1bmN0aW9uIHModCl7dmFyIGU9dC5fbGVuZ3RoLzIwO3JldHVybiJkb21haW4iPT09dC5jb25zdHJhaW4mJnQuX2lucHV0RG9tYWluJiYoZSo9KHQuX2lucHV0RG9tYWluWzFdLXQuX2lucHV0RG9tYWluWzBdKS8odC5kb21haW5bMV0tdC5kb21haW5bMF0pKSxmdW5jdGlvbih0KXtyZXR1cm4gdC5wYWQrKHQuZXh0cmFwYWQ/ZTowKX19ZnVuY3Rpb24gbCh0KXtyZXR1cm4gbih0KSYmTWF0aC5hYnModCk8YX1mdW5jdGlvbiBjKHQsZSl7cmV0dXJuIHQ8PWV9ZnVuY3Rpb24gdSh0LGUpe3JldHVybiB0Pj1lfWUuZXhwb3J0cz17Z2V0QXV0b1JhbmdlOm8sbWFrZVBhZEZuOnMsZG9BdXRvUmFuZ2U6ZnVuY3Rpb24odCl7dC5fbGVuZ3RofHx0LnNldFNjYWxlKCk7dmFyIGUscj10Ll9taW4mJnQuX21heCYmdC5fbWluLmxlbmd0aCYmdC5fbWF4Lmxlbmd0aDt0LmF1dG9yYW5nZSYmciYmKHQucmFuZ2U9byh0KSx0Ll9yPXQucmFuZ2Uuc2xpY2UoKSx0Ll9ybD1pLnNpbXBsZU1hcCh0Ll9yLHQucjJsKSwoZT10Ll9pbnB1dCkucmFuZ2U9dC5yYW5nZS5zbGljZSgpLGUuYXV0b3JhbmdlPXQuYXV0b3JhbmdlKTtpZih0Ll9hbmNob3JBeGlzJiZ0Ll9hbmNob3JBeGlzLnJhbmdlc2xpZGVyKXt2YXIgbj10Ll9hbmNob3JBeGlzLnJhbmdlc2xpZGVyW3QuX25hbWVdO24mJiJhdXRvIj09PW4ucmFuZ2Vtb2RlJiYobi5yYW5nZT1yP28odCk6dC5fcmFuZ2VJbml0aWFsP3QuX3JhbmdlSW5pdGlhbC5zbGljZSgpOnQucmFuZ2Uuc2xpY2UoKSksKGU9dC5fYW5jaG9yQXhpcy5faW5wdXQpLnJhbmdlc2xpZGVyW3QuX25hbWVdPWkuZXh0ZW5kRmxhdCh7fSxuKX19LGV4cGFuZDpmdW5jdGlvbih0LGUscil7aWYoIWZ1bmN0aW9uKHQpe3JldHVybiB0LmF1dG9yYW5nZXx8dC5fcmFuZ2VzbGlkZXJBdXRvcmFuZ2V9KHQpfHwhZSlyZXR1cm47dC5fbWlufHwodC5fbWluPVtdKTt0Ll9tYXh8fCh0Ll9tYXg9W10pO3J8fChyPXt9KTt0Ll9tfHx0LnNldFNjYWxlKCk7dmFyIGksbyxzLGgsZixwLGQsZyxtLHYseSx4LGI9ZS5sZW5ndGgsXz1yLnBhZGRlZHx8ITEsdz1yLnRvemVybyYmKCJsaW5lYXIiPT09dC50eXBlfHwiLSI9PT10LnR5cGUpLGs9ImxvZyI9PT10LnR5cGUsTT0hMTtmdW5jdGlvbiBBKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIE09ITAsZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgubWF4KE51bWJlcih0W2VdfHwwKSwwKX07dmFyIGU9TWF0aC5tYXgoTnVtYmVyKHR8fDApLDApO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX12YXIgVD1BKCh0Ll9tPjA/ci5wcGFkcGx1czpyLnBwYWRtaW51cyl8fHIucHBhZHx8MCksUz1BKCh0Ll9tPjA/ci5wcGFkbWludXM6ci5wcGFkcGx1cyl8fHIucHBhZHx8MCksRT1BKHIudnBhZHBsdXN8fHIudnBhZCksQz1BKHIudnBhZG1pbnVzfHxyLnZwYWQpO2lmKCFNKXtpZih5PTEvMCx4PS0xLzAsaylmb3IoaT0wO2k8YjtpKyspKGg9ZVtpXSk8eSYmaD4wJiYoeT1oKSxoPngmJmg8YSYmKHg9aCk7ZWxzZSBmb3IoaT0wO2k8YjtpKyspKGg9ZVtpXSk8eSYmaD4tYSYmKHk9aCksaD54JiZoPGEmJih4PWgpO2U9W3kseF0sYj0yfWZ1bmN0aW9uIEwocil7aWYoZj1lW3JdLG4oZikpZm9yKGc9VChyKSxtPVMocikseT1mLUMocikseD1mK0UociksayYmeTx4LzEwJiYoeT14LzEwKSxwPXQuYzJsKHkpLGQ9dC5jMmwoeCksdyYmKHA9TWF0aC5taW4oMCxwKSxkPU1hdGgubWF4KDAsZCkpLHM9MDtzPDI7cysrKXt2YXIgaT1zP2Q6cDtpZihsKGkpKXt2YXIgYT1zP3QuX21heDp0Ll9taW4sYj1zP2c6bSxNPXM/dTpjO2Zvcih2PSEwLG89MDtvPGEubGVuZ3RoJiZ2O28rKyl7aWYoaD1hW29dLE0oaC52YWwsaSkmJmgucGFkPj1iJiYoaC5leHRyYXBhZHx8IV8pKXt2PSExO2JyZWFrfU0oaSxoLnZhbCkmJmgucGFkPD1iJiYoX3x8IWguZXh0cmFwYWQpJiYoYS5zcGxpY2UobywxKSxvLS0pfWlmKHYpe3ZhciBBPXcmJjA9PT1pO2EucHVzaCh7dmFsOmkscGFkOkE/MDpiLGV4dHJhcGFkOiFBJiZffSl9fX19dmFyIHo9TWF0aC5taW4oNixiKTtmb3IoaT0wO2k8ejtpKyspTChpKTtmb3IoaT1iLTE7aT49ejtpLS0pTChpKX19fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjY2MSwiLi4vLi4vbGliIjo2ODQsImZhc3QtaXNudW1lcmljIjoyMTR9XSw3MzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoImZhc3QtaXNudW1lcmljIiksYT10KCIuLi8uLi9wbG90cy9wbG90cyIpLG89dCgiLi4vLi4vcmVnaXN0cnkiKSxzPXQoIi4uLy4uL2xpYiIpLGw9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksYz10KCIuLi8uLi9jb21wb25lbnRzL3RpdGxlcyIpLHU9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGg9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksZj10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikscD1mLk9ORUFWR1lFQVIsZD1mLk9ORUFWR01PTlRILGc9Zi5PTkVEQVksbT1mLk9ORUhPVVIsdj1mLk9ORU1JTix5PWYuT05FU0VDLHg9Zi5NSU5VU19TSUdOLGI9Zi5CQUROVU0sXz10KCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50IikuTUlEX1NISUZULHc9dCgiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCIpLkxJTkVfU1BBQ0lORyxrPWUuZXhwb3J0cz17fTtrLnNldENvbnZlcnQ9dCgiLi9zZXRfY29udmVydCIpO3ZhciBNPXQoIi4vYXhpc19hdXRvdHlwZSIpLEE9dCgiLi9heGlzX2lkcyIpO2suaWQybmFtZT1BLmlkMm5hbWUsay5uYW1lMmlkPUEubmFtZTJpZCxrLmNsZWFuSWQ9QS5jbGVhbklkLGsubGlzdD1BLmxpc3Qsay5saXN0SWRzPUEubGlzdElkcyxrLmdldEZyb21JZD1BLmdldEZyb21JZCxrLmdldEZyb21UcmFjZT1BLmdldEZyb21UcmFjZTt2YXIgVD10KCIuL2F1dG9yYW5nZSIpO2suZXhwYW5kPVQuZXhwYW5kLGsuZ2V0QXV0b1JhbmdlPVQuZ2V0QXV0b1JhbmdlLGsuY29lcmNlUmVmPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbz1uLmNoYXJBdChuLmxlbmd0aC0xKSxsPXIuX2Z1bGxMYXlvdXQuX3N1YnBsb3RzW28rImF4aXMiXSxjPW4rInJlZiIsdT17fTtyZXR1cm4gaXx8KGk9bFswXXx8YSksYXx8KGE9aSksdVtjXT17dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOmwuY29uY2F0KGE/W2FdOltdKSxkZmx0Oml9LHMuY29lcmNlKHQsZSx1LGMpfSxrLmNvZXJjZVBvc2l0aW9uPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbyxsO2lmKCJwYXBlciI9PT1ufHwicGl4ZWwiPT09bilvPXMuZW5zdXJlTnVtYmVyLGw9cihpLGEpO2Vsc2V7dmFyIGM9ay5nZXRGcm9tSWQoZSxuKTtsPXIoaSxhPWMuZnJhY3Rpb24ycihhKSksbz1jLmNsZWFuUG9zfXRbaV09byhsKX0say5jbGVhblBvc2l0aW9uPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4oInBhcGVyIj09PXJ8fCJwaXhlbCI9PT1yP3MuZW5zdXJlTnVtYmVyOmsuZ2V0RnJvbUlkKGUscikuY2xlYW5Qb3MpKHQpfTt2YXIgUz1rLmdldERhdGFDb252ZXJzaW9ucz1mdW5jdGlvbih0LGUscixuKXt2YXIgaSxhPSJ4Ij09PXJ8fCJ5Ij09PXJ8fCJ6Ij09PXI/cjpuO2lmKEFycmF5LmlzQXJyYXkoYSkpe2lmKGk9e3R5cGU6TShuKSxfY2F0ZWdvcmllczpbXX0say5zZXRDb252ZXJ0KGkpLCJjYXRlZ29yeSI9PT1pLnR5cGUpZm9yKHZhciBvPTA7bzxuLmxlbmd0aDtvKyspaS5kMmMobltvXSl9ZWxzZSBpPWsuZ2V0RnJvbVRyYWNlKHQsZSxhKTtyZXR1cm4gaT97ZDJjOmkuZDJjLGMyZDppLmMyZH06ImlkcyI9PT1hP3tkMmM6QyxjMmQ6Q306e2QyYzpFLGMyZDpFfX07ZnVuY3Rpb24gRSh0KXtyZXR1cm4rdH1mdW5jdGlvbiBDKHQpe3JldHVybiBTdHJpbmcodCl9ay5nZXREYXRhVG9Db29yZEZ1bmM9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIFModCxlLHIsbikuZDJjfSxrLmNvdW50ZXJMZXR0ZXI9ZnVuY3Rpb24odCl7dmFyIGU9dC5jaGFyQXQoMCk7cmV0dXJuIngiPT09ZT8ieSI6InkiPT09ZT8ieCI6dm9pZCAwfSxrLm1pbkR0aWNrPWZ1bmN0aW9uKHQsZSxyLG4pey0xPT09WyJsb2ciLCJjYXRlZ29yeSJdLmluZGV4T2YodC50eXBlKSYmbj92b2lkIDA9PT10Ll9taW5EdGljaz8odC5fbWluRHRpY2s9ZSx0Ll9mb3JjZVRpY2swPXIpOnQuX21pbkR0aWNrJiYoKHQuX21pbkR0aWNrL2UrMWUtNiklMTwyZS02JiYoKHItdC5fZm9yY2VUaWNrMCkvZSUxKzEuMDAwMDAxKSUxPDJlLTY/KHQuX21pbkR0aWNrPWUsdC5fZm9yY2VUaWNrMD1yKTooKGUvdC5fbWluRHRpY2srMWUtNiklMT4yZS02fHwoKHItdC5fZm9yY2VUaWNrMCkvdC5fbWluRHRpY2slMSsxLjAwMDAwMSklMT4yZS02KSYmKHQuX21pbkR0aWNrPTApKTp0Ll9taW5EdGljaz0wfSxrLnNhdmVSYW5nZUluaXRpYWw9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9ay5saXN0KHQsIiIsITApLG49ITEsaT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgYT1yW2ldLG89dm9pZCAwPT09YS5fcmFuZ2VJbml0aWFsLHM9b3x8IShhLnJhbmdlWzBdPT09YS5fcmFuZ2VJbml0aWFsWzBdJiZhLnJhbmdlWzFdPT09YS5fcmFuZ2VJbml0aWFsWzFdKTsobyYmITE9PT1hLmF1dG9yYW5nZXx8ZSYmcykmJihhLl9yYW5nZUluaXRpYWw9YS5yYW5nZS5zbGljZSgpLG49ITApfXJldHVybiBufSxrLnNhdmVTaG93U3Bpa2VJbml0aWFsPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWsubGlzdCh0LCIiLCEwKSxuPSExLGk9Im9uIixhPTA7YTxyLmxlbmd0aDthKyspe3ZhciBvPXJbYV0scz12b2lkIDA9PT1vLl9zaG93U3Bpa2VJbml0aWFsLGw9c3x8IShvLnNob3dzcGlrZXM9PT1vLl9zaG93c3Bpa2VzKTsoc3x8ZSYmbCkmJihvLl9zaG93U3Bpa2VJbml0aWFsPW8uc2hvd3NwaWtlcyxuPSEwKSwib24iIT09aXx8by5zaG93c3Bpa2VzfHwoaT0ib2ZmIil9cmV0dXJuIHQuX2Z1bGxMYXlvdXQuX2NhcnRlc2lhblNwaWtlc0VuYWJsZWQ9aSxufSxrLmF1dG9CaW49ZnVuY3Rpb24odCxlLHIsbixhKXt2YXIgbyxsLGM9cy5hZ2dOdW1zKE1hdGgubWluLG51bGwsdCksdT1zLmFnZ051bXMoTWF0aC5tYXgsbnVsbCx0KTtpZihhfHwoYT1lLmNhbGVuZGFyKSwiY2F0ZWdvcnkiPT09ZS50eXBlKXJldHVybntzdGFydDpjLS41LGVuZDp1Ky41LHNpemU6MSxfZGF0YVNwYW46dS1jfTtpZihyKW89KHUtYykvcjtlbHNle3ZhciBoPXMuZGlzdGluY3RWYWxzKHQpLGY9TWF0aC5wb3coMTAsTWF0aC5mbG9vcihNYXRoLmxvZyhoLm1pbkRpZmYpL01hdGguTE4xMCkpLHA9ZipzLnJvdW5kVXAoaC5taW5EaWZmL2YsWy45LDEuOSw0LjksOS45XSwhMCk7bz1NYXRoLm1heChwLDIqcy5zdGRldih0KS9NYXRoLnBvdyh0Lmxlbmd0aCxuPy4yNTouNCkpLGkobyl8fChvPTEpfWw9ImxvZyI9PT1lLnR5cGU/e3R5cGU6ImxpbmVhciIscmFuZ2U6W2MsdV19Ont0eXBlOmUudHlwZSxyYW5nZTpzLnNpbXBsZU1hcChbYyx1XSxlLmMyciwwLGEpLGNhbGVuZGFyOmF9LGsuc2V0Q29udmVydChsKSxrLmF1dG9UaWNrcyhsLG8pO3ZhciBkLG09ay50aWNrSW5jcmVtZW50KGsudGlja0ZpcnN0KGwpLGwuZHRpY2ssInJldmVyc2UiLGEpO2lmKCJudW1iZXIiPT10eXBlb2YgbC5kdGljaylkPShtPWZ1bmN0aW9uKHQsZSxyLG4sYSl7dmFyIG89MCxzPTAsbD0wLGM9MDtmdW5jdGlvbiB1KGUpe3JldHVybigxKzEwMCooZS10KS9yLmR0aWNrKSUxMDA8Mn1mb3IodmFyIGg9MDtoPGUubGVuZ3RoO2grKyllW2hdJTE9PTA/bCsrOmkoZVtoXSl8fGMrKyx1KGVbaF0pJiZvKyssdShlW2hdK3IuZHRpY2svMikmJnMrKzt2YXIgZj1lLmxlbmd0aC1jO2lmKGw9PT1mJiYiZGF0ZSIhPT1yLnR5cGUpci5kdGljazwxP3Q9bi0uNSpyLmR0aWNrOih0LT0uNSkrci5kdGljazxuJiYodCs9ci5kdGljayk7ZWxzZSBpZihzPC4xKmYmJihvPi4zKmZ8fHUobil8fHUoYSkpKXt2YXIgcD1yLmR0aWNrLzI7dCs9dCtwPG4/cDotcH1yZXR1cm4gdH0obSx0LGwsYyx1KSkrKDErTWF0aC5mbG9vcigodS1tKS9sLmR0aWNrKSkqbC5kdGljaztlbHNlIGZvcigiTSI9PT1sLmR0aWNrLmNoYXJBdCgwKSYmKG09ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT1zLmZpbmRFeGFjdERhdGVzKGUsaSk7aWYoYS5leGFjdERheXM+Ljgpe3ZhciBvPU51bWJlcihyLnN1YnN0cigxKSk7YS5leGFjdFllYXJzPi44JiZvJTEyPT0wP3Q9ay50aWNrSW5jcmVtZW50KHQsIk02IiwicmV2ZXJzZSIpKzEuNSpnOmEuZXhhY3RNb250aHM+Ljg/dD1rLnRpY2tJbmNyZW1lbnQodCwiTTEiLCJyZXZlcnNlIikrMTUuNSpnOnQtPWcvMjt2YXIgbD1rLnRpY2tJbmNyZW1lbnQodCxyKTtpZihsPD1uKXJldHVybiBsfXJldHVybiB0fShtLHQsbC5kdGljayxjLGEpKSxkPW0sMDtkPD11OylkPWsudGlja0luY3JlbWVudChkLGwuZHRpY2ssITEsYSksMDtyZXR1cm57c3RhcnQ6ZS5jMnIobSwwLGEpLGVuZDplLmMycihkLDAsYSksc2l6ZTpsLmR0aWNrLF9kYXRhU3Bhbjp1LWN9fSxrLnByZXBUaWNrcz1mdW5jdGlvbih0KXt2YXIgZT1zLnNpbXBsZU1hcCh0LnJhbmdlLHQucjJsKTtpZigiYXV0byI9PT10LnRpY2ttb2RlfHwhdC5kdGljayl7dmFyIHIsbj10Lm50aWNrcztufHwoImNhdGVnb3J5Ij09PXQudHlwZT8ocj10LnRpY2tmb250PzEuMioodC50aWNrZm9udC5zaXplfHwxMik6MTUsbj10Ll9sZW5ndGgvcik6KHI9InkiPT09dC5faWQuY2hhckF0KDApPzQwOjgwLG49cy5jb25zdHJhaW4odC5fbGVuZ3RoL3IsNCw5KSsxKSwicmFkaWFsYXhpcyI9PT10Ll9uYW1lJiYobio9MikpLCJhcnJheSI9PT10LnRpY2ttb2RlJiYobio9MTAwKSxrLmF1dG9UaWNrcyh0LE1hdGguYWJzKGVbMV0tZVswXSkvbiksdC5fbWluRHRpY2s+MCYmdC5kdGljazwyKnQuX21pbkR0aWNrJiYodC5kdGljaz10Ll9taW5EdGljayx0LnRpY2swPXQubDJyKHQuX2ZvcmNlVGljazApKX10LnRpY2swfHwodC50aWNrMD0iZGF0ZSI9PT10LnR5cGU/IjIwMDAtMDEtMDEiOjApLEYodCl9LGsuY2FsY1RpY2tzPWZ1bmN0aW9uKHQpe2sucHJlcFRpY2tzKHQpO3ZhciBlPXMuc2ltcGxlTWFwKHQucmFuZ2UsdC5yMmwpO2lmKCJhcnJheSI9PT10LnRpY2ttb2RlKXJldHVybiBmdW5jdGlvbih0KXt2YXIgZSxyLG49dC50aWNrdmFscyxpPXQudGlja3RleHQsYT1uZXcgQXJyYXkobi5sZW5ndGgpLG89cy5zaW1wbGVNYXAodC5yYW5nZSx0LnIybCksbD0xLjAwMDEqb1swXS0xZS00Km9bMV0sYz0xLjAwMDEqb1sxXS0xZS00Km9bMF0sdT1NYXRoLm1pbihsLGMpLGg9TWF0aC5tYXgobCxjKSxmPTA7QXJyYXkuaXNBcnJheShpKXx8KGk9W10pO3ZhciBwPSJjYXRlZ29yeSI9PT10LnR5cGU/dC5kMmxfbm9hZGQ6dC5kMmw7ImxvZyI9PT10LnR5cGUmJiJMIiE9PVN0cmluZyh0LmR0aWNrKS5jaGFyQXQoMCkmJih0LmR0aWNrPSJMIitNYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubWluKHQucmFuZ2VbMF0sdC5yYW5nZVsxXSkpLTEpKTtmb3Iocj0wO3I8bi5sZW5ndGg7cisrKShlPXAobltyXSkpPnUmJmU8aCYmKHZvaWQgMD09PWlbcl0/YVtmXT1rLnRpY2tUZXh0KHQsZSk6YVtmXT1OKHQsZSxTdHJpbmcoaVtyXSkpLGYrKyk7ZjxuLmxlbmd0aCYmYS5zcGxpY2UoZixuLmxlbmd0aC1mKTtyZXR1cm4gYX0odCk7dC5fdG1pbj1rLnRpY2tGaXJzdCh0KTt2YXIgcj0xLjAwMDEqZVswXS0xZS00KmVbMV0sbj0xLjAwMDEqZVsxXS0xZS00KmVbMF0saT1lWzFdPGVbMF07aWYodC5fdG1pbjxyIT09aSlyZXR1cm5bXTt2YXIgYT1bXTsiY2F0ZWdvcnkiPT09dC50eXBlJiYobj1pP01hdGgubWF4KC0uNSxuKTpNYXRoLm1pbih0Ll9jYXRlZ29yaWVzLmxlbmd0aC0uNSxuKSk7Zm9yKHZhciBvPW51bGwsbD1NYXRoLm1heCgxZTMsdC5fbGVuZ3RofHwwKSxjPXQuX3RtaW47KGk/Yz49bjpjPD1uKSYmIShhLmxlbmd0aD5sfHxjPT09byk7Yz1rLnRpY2tJbmNyZW1lbnQoYyx0LmR0aWNrLGksdC5jYWxlbmRhcikpbz1jLGEucHVzaChjKTsiYW5ndWxhciI9PT10Ll9pZCYmMzYwPT09TWF0aC5hYnMoZVsxXS1lWzBdKSYmYS5wb3AoKSx0Ll90bWF4PWFbYS5sZW5ndGgtMV0sdC5fcHJldkRhdGVIZWFkPSIiLHQuX2luQ2FsY1RpY2tzPSEwO2Zvcih2YXIgdT1uZXcgQXJyYXkoYS5sZW5ndGgpLGg9MDtoPGEubGVuZ3RoO2grKyl1W2hdPWsudGlja1RleHQodCxhW2hdKTtyZXR1cm4gdC5faW5DYWxjVGlja3M9ITEsdX07dmFyIEw9WzIsNSwxMF0sej1bMSwyLDMsNiwxMl0sUD1bMSwyLDUsMTAsMTUsMzBdLEk9WzEsMiwzLDcsMTRdLE89Wy0uMDQ2LDAsLjMwMSwuNDc3LC42MDIsLjY5OSwuNzc4LC44NDUsLjkwMywuOTU0LDFdLEQ9Wy0uMzAxLDAsLjMwMSwuNjk5LDFdLFI9WzE1LDMwLDQ1LDkwLDE4MF07ZnVuY3Rpb24gQih0LGUscil7cmV0dXJuIGUqcy5yb3VuZFVwKHQvZSxyKX1mdW5jdGlvbiBGKHQpe3ZhciBlPXQuZHRpY2s7aWYodC5fdGlja2V4cG9uZW50PTAsaShlKXx8InN0cmluZyI9PXR5cGVvZiBlfHwoZT0xKSwiY2F0ZWdvcnkiPT09dC50eXBlJiYodC5fdGlja3JvdW5kPW51bGwpLCJkYXRlIj09PXQudHlwZSl7dmFyIHI9dC5yMmwodC50aWNrMCksbj10LmwycihyKS5yZXBsYWNlKC8oXi18aSkvZywiIiksYT1uLmxlbmd0aDtpZigiTSI9PT1TdHJpbmcoZSkuY2hhckF0KDApKWE+MTB8fCIwMS0wMSIhPT1uLnN1YnN0cig1KT90Ll90aWNrcm91bmQ9ImQiOnQuX3RpY2tyb3VuZD0rZS5zdWJzdHIoMSklMTI9PTA/InkiOiJtIjtlbHNlIGlmKGU+PWcmJmE8PTEwfHxlPj0xNSpnKXQuX3RpY2tyb3VuZD0iZCI7ZWxzZSBpZihlPj12JiZhPD0xNnx8ZT49bSl0Ll90aWNrcm91bmQ9Ik0iO2Vsc2UgaWYoZT49eSYmYTw9MTl8fGU+PXYpdC5fdGlja3JvdW5kPSJTIjtlbHNle3ZhciBvPXQubDJyKHIrZSkucmVwbGFjZSgvXi0vLCIiKS5sZW5ndGg7dC5fdGlja3JvdW5kPU1hdGgubWF4KGEsbyktMjB9fWVsc2UgaWYoaShlKXx8IkwiPT09ZS5jaGFyQXQoMCkpe3ZhciBzPXQucmFuZ2UubWFwKHQucjJkfHxOdW1iZXIpO2koZSl8fChlPU51bWJlcihlLnN1YnN0cigxKSkpLHQuX3RpY2tyb3VuZD0yLU1hdGguZmxvb3IoTWF0aC5sb2coZSkvTWF0aC5MTjEwKy4wMSk7dmFyIGw9TWF0aC5tYXgoTWF0aC5hYnMoc1swXSksTWF0aC5hYnMoc1sxXSkpLGM9TWF0aC5mbG9vcihNYXRoLmxvZyhsKS9NYXRoLkxOMTArLjAxKTtNYXRoLmFicyhjKT4zJiYoVih0LmV4cG9uZW50Zm9ybWF0KSYmIVUoYyk/dC5fdGlja2V4cG9uZW50PTMqTWF0aC5yb3VuZCgoYy0xKS8zKTp0Ll90aWNrZXhwb25lbnQ9Yyl9ZWxzZSB0Ll90aWNrcm91bmQ9bnVsbH1mdW5jdGlvbiBOKHQsZSxyKXt2YXIgbj10LnRpY2tmb250fHx7fTtyZXR1cm57eDplLGR4OjAsZHk6MCx0ZXh0OnJ8fCIiLGZvbnRTaXplOm4uc2l6ZSxmb250Om4uZmFtaWx5LGZvbnRDb2xvcjpuLmNvbG9yfX1rLmF1dG9UaWNrcz1mdW5jdGlvbih0LGUpe3ZhciByO2Z1bmN0aW9uIG4odCl7cmV0dXJuIE1hdGgucG93KHQsTWF0aC5mbG9vcihNYXRoLmxvZyhlKS9NYXRoLkxOMTApKX1pZigiZGF0ZSI9PT10LnR5cGUpe3QudGljazA9cy5kYXRlVGljazAodC5jYWxlbmRhcik7dmFyIGE9MiplO2E+cD8oZS89cCxyPW4oMTApLHQuZHRpY2s9Ik0iKzEyKkIoZSxyLEwpKTphPmQ/KGUvPWQsdC5kdGljaz0iTSIrQihlLDEseikpOmE+Zz8odC5kdGljaz1CKGUsZyxJKSx0LnRpY2swPXMuZGF0ZVRpY2swKHQuY2FsZW5kYXIsITApKTphPm0/dC5kdGljaz1CKGUsbSx6KTphPnY/dC5kdGljaz1CKGUsdixQKTphPnk/dC5kdGljaz1CKGUseSxQKToocj1uKDEwKSx0LmR0aWNrPUIoZSxyLEwpKX1lbHNlIGlmKCJsb2ciPT09dC50eXBlKXt0LnRpY2swPTA7dmFyIG89cy5zaW1wbGVNYXAodC5yYW5nZSx0LnIybCk7aWYoZT4uNyl0LmR0aWNrPU1hdGguY2VpbChlKTtlbHNlIGlmKE1hdGguYWJzKG9bMV0tb1swXSk8MSl7dmFyIGw9MS41Kk1hdGguYWJzKChvWzFdLW9bMF0pL2UpO2U9TWF0aC5hYnMoTWF0aC5wb3coMTAsb1sxXSktTWF0aC5wb3coMTAsb1swXSkpL2wscj1uKDEwKSx0LmR0aWNrPSJMIitCKGUscixMKX1lbHNlIHQuZHRpY2s9ZT4uMz8iRDIiOiJEMSJ9ZWxzZSJjYXRlZ29yeSI9PT10LnR5cGU/KHQudGljazA9MCx0LmR0aWNrPU1hdGguY2VpbChNYXRoLm1heChlLDEpKSk6ImFuZ3VsYXIiPT09dC5faWQ/KHQudGljazA9MCxyPTEsdC5kdGljaz1CKGUscixSKSk6KHQudGljazA9MCxyPW4oMTApLHQuZHRpY2s9QihlLHIsTCkpO2lmKDA9PT10LmR0aWNrJiYodC5kdGljaz0xKSwhaSh0LmR0aWNrKSYmInN0cmluZyIhPXR5cGVvZiB0LmR0aWNrKXt2YXIgYz10LmR0aWNrO3Rocm93IHQuZHRpY2s9MSwiYXguZHRpY2sgZXJyb3I6ICIrU3RyaW5nKGMpfX0say50aWNrSW5jcmVtZW50PWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvPXI/LTE6MTtpZihpKGUpKXJldHVybiB0K28qZTt2YXIgbD1lLmNoYXJBdCgwKSxjPW8qTnVtYmVyKGUuc3Vic3RyKDEpKTtpZigiTSI9PT1sKXJldHVybiBzLmluY3JlbWVudE1vbnRoKHQsYyxhKTtpZigiTCI9PT1sKXJldHVybiBNYXRoLmxvZyhNYXRoLnBvdygxMCx0KStjKS9NYXRoLkxOMTA7aWYoIkQiPT09bCl7dmFyIHU9IkQyIj09PWU/RDpPLGg9dCsuMDEqbyxmPXMucm91bmRVcChzLm1vZChoLDEpLHUscik7cmV0dXJuIE1hdGguZmxvb3IoaCkrTWF0aC5sb2cobi5yb3VuZChNYXRoLnBvdygxMCxmKSwxKSkvTWF0aC5MTjEwfXRocm93InVucmVjb2duaXplZCBkdGljayAiK1N0cmluZyhlKX0say50aWNrRmlyc3Q9ZnVuY3Rpb24odCl7dmFyIGU9dC5yMmx8fE51bWJlcixyPXMuc2ltcGxlTWFwKHQucmFuZ2UsZSksYT1yWzFdPHJbMF0sbz1hP01hdGguZmxvb3I6TWF0aC5jZWlsLGw9MS4wMDAxKnJbMF0tMWUtNCpyWzFdLGM9dC5kdGljayx1PWUodC50aWNrMCk7aWYoaShjKSl7dmFyIGg9bygobC11KS9jKSpjK3U7cmV0dXJuImNhdGVnb3J5Ij09PXQudHlwZSYmKGg9cy5jb25zdHJhaW4oaCwwLHQuX2NhdGVnb3JpZXMubGVuZ3RoLTEpKSxofXZhciBmPWMuY2hhckF0KDApLHA9TnVtYmVyKGMuc3Vic3RyKDEpKTtpZigiTSI9PT1mKXtmb3IodmFyIGQsZyxtLHY9MCx5PXU7djwxMDspe2lmKCgoZD1rLnRpY2tJbmNyZW1lbnQoeSxjLGEsdC5jYWxlbmRhcikpLWwpKih5LWwpPD0wKXJldHVybiBhP01hdGgubWluKHksZCk6TWF0aC5tYXgoeSxkKTtnPShsLSh5K2QpLzIpLyhkLXkpLG09ZisoTWF0aC5hYnMoTWF0aC5yb3VuZChnKSl8fDEpKnAseT1rLnRpY2tJbmNyZW1lbnQoeSxtLGc8MD8hYTphLHQuY2FsZW5kYXIpLHYrK31yZXR1cm4gcy5lcnJvcigidGlja0ZpcnN0IGRpZCBub3QgY29udmVyZ2UiLHQpLHl9aWYoIkwiPT09ZilyZXR1cm4gTWF0aC5sb2cobygoTWF0aC5wb3coMTAsbCktdSkvcCkqcCt1KS9NYXRoLkxOMTA7aWYoIkQiPT09Zil7dmFyIHg9IkQyIj09PWM/RDpPLGI9cy5yb3VuZFVwKHMubW9kKGwsMSkseCxhKTtyZXR1cm4gTWF0aC5mbG9vcihsKStNYXRoLmxvZyhuLnJvdW5kKE1hdGgucG93KDEwLGIpLDEpKS9NYXRoLkxOMTB9dGhyb3cidW5yZWNvZ25pemVkIGR0aWNrICIrU3RyaW5nKGMpfSxrLnRpY2tUZXh0PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixhLG89Tih0LGUpLGw9ImFycmF5Ij09PXQudGlja21vZGUsYz1yfHxsLHU9ImNhdGVnb3J5Ij09PXQudHlwZT90LmQybF9ub2FkZDp0LmQybDtpZihsJiZBcnJheS5pc0FycmF5KHQudGlja3RleHQpKXt2YXIgaD1zLnNpbXBsZU1hcCh0LnJhbmdlLHQucjJsKSxmPU1hdGguYWJzKGhbMV0taFswXSkvMWU0O2ZvcihhPTA7YTx0LnRpY2t0ZXh0Lmxlbmd0aCYmIShNYXRoLmFicyhlLXUodC50aWNrdmFsc1thXSkpPGYpO2ErKyk7aWYoYTx0LnRpY2t0ZXh0Lmxlbmd0aClyZXR1cm4gby50ZXh0PVN0cmluZyh0LnRpY2t0ZXh0W2FdKSxvfWZ1bmN0aW9uIHAobil7dmFyIGk7cmV0dXJuIHZvaWQgMD09PW58fChyPyJub25lIj09PW46KGk9e2ZpcnN0OnQuX3RtaW4sbGFzdDp0Ll90bWF4fVtuXSwiYWxsIiE9PW4mJmUhPT1pKSl9cmV0dXJuIG49cj8ibmV2ZXIiOiJub25lIiE9PXQuZXhwb25lbnRmb3JtYXQmJnAodC5zaG93ZXhwb25lbnQpPyJoaWRlIjoiIiwiZGF0ZSI9PT10LnR5cGU/ZnVuY3Rpb24odCxlLHIsbil7dmFyIGE9dC5fdGlja3JvdW5kLG89ciYmdC5ob3ZlcmZvcm1hdHx8ay5nZXRUaWNrRm9ybWF0KHQpO24mJihhPWkoYSk/NDp7eToibSIsbToiZCIsZDoiTSIsTToiUyIsUzo0fVthXSk7dmFyIGwsYz1zLmZvcm1hdERhdGUoZS54LG8sYSx0Ll9kYXRlRm9ybWF0LHQuY2FsZW5kYXIsdC5fZXh0cmFGb3JtYXQpLHU9Yy5pbmRleE9mKCJcbiIpOy0xIT09dSYmKGw9Yy5zdWJzdHIodSsxKSxjPWMuc3Vic3RyKDAsdSkpO24mJigiMDA6MDA6MDAiPT09Y3x8IjAwOjAwIj09PWM/KGM9bCxsPSIiKTo4PT09Yy5sZW5ndGgmJihjPWMucmVwbGFjZSgvOjAwJC8sIiIpKSk7bCYmKHI/ImQiPT09YT9jKz0iLCAiK2w6Yz1sKyhjPyIsICIrYzoiIik6dC5faW5DYWxjVGlja3MmJmw9PT10Ll9wcmV2RGF0ZUhlYWR8fChjKz0iPGJyPiIrbCx0Ll9wcmV2RGF0ZUhlYWQ9bCkpO2UudGV4dD1jfSh0LG8scixjKToibG9nIj09PXQudHlwZT9mdW5jdGlvbih0LGUscixuLGEpe3ZhciBvPXQuZHRpY2ssbD1lLngsYz10LnRpY2tmb3JtYXQ7Im5ldmVyIj09PWEmJihhPSIiKTshbnx8InN0cmluZyI9PXR5cGVvZiBvJiYiTCI9PT1vLmNoYXJBdCgwKXx8KG89IkwzIik7aWYoY3x8InN0cmluZyI9PXR5cGVvZiBvJiYiTCI9PT1vLmNoYXJBdCgwKSllLnRleHQ9cShNYXRoLnBvdygxMCxsKSx0LGEsbik7ZWxzZSBpZihpKG8pfHwiRCI9PT1vLmNoYXJBdCgwKSYmcy5tb2QobCsuMDEsMSk8LjEpe3ZhciB1PU1hdGgucm91bmQobCk7LTEhPT1bImUiLCJFIiwicG93ZXIiXS5pbmRleE9mKHQuZXhwb25lbnRmb3JtYXQpfHxWKHQuZXhwb25lbnRmb3JtYXQpJiZVKHUpPyhlLnRleHQ9MD09PXU/MToxPT09dT8iMTAiOnU+MT8iMTA8c3VwPiIrdSsiPC9zdXA+IjoiMTA8c3VwPiIreCstdSsiPC9zdXA+IixlLmZvbnRTaXplKj0xLjI1KTooZS50ZXh0PXEoTWF0aC5wb3coMTAsbCksdCwiIiwiZmFrZWhvdmVyIiksIkQxIj09PW8mJiJ5Ij09PXQuX2lkLmNoYXJBdCgwKSYmKGUuZHktPWUuZm9udFNpemUvNikpfWVsc2V7aWYoIkQiIT09by5jaGFyQXQoMCkpdGhyb3cidW5yZWNvZ25pemVkIGR0aWNrICIrU3RyaW5nKG8pO2UudGV4dD1TdHJpbmcoTWF0aC5yb3VuZChNYXRoLnBvdygxMCxzLm1vZChsLDEpKSkpLGUuZm9udFNpemUqPS43NX1pZigiRDEiPT09dC5kdGljayl7dmFyIGg9U3RyaW5nKGUudGV4dCkuY2hhckF0KDApOyIwIiE9PWgmJiIxIiE9PWh8fCgieSI9PT10Ll9pZC5jaGFyQXQoMCk/ZS5keC09ZS5mb250U2l6ZS80OihlLmR5Kz1lLmZvbnRTaXplLzIsZS5keCs9KHQucmFuZ2VbMV0+dC5yYW5nZVswXT8xOi0xKSplLmZvbnRTaXplKihsPDA/LjU6LjI1KSkpfX0odCxvLDAsYyxuKToiY2F0ZWdvcnkiPT09dC50eXBlP2Z1bmN0aW9uKHQsZSl7dmFyIHI9dC5fY2F0ZWdvcmllc1tNYXRoLnJvdW5kKGUueCldO3ZvaWQgMD09PXImJihyPSIiKTtlLnRleHQ9U3RyaW5nKHIpfSh0LG8pOiJhbmd1bGFyIj09PXQuX2lkP2Z1bmN0aW9uKHQsZSxyLG4saSl7aWYoInJhZGlhbnMiIT09dC50aGV0YXVuaXR8fHIpZS50ZXh0PXEoZS54LHQsaSxuKTtlbHNle3ZhciBhPWUueC8xODA7aWYoMD09PWEpZS50ZXh0PSIwIjtlbHNle3ZhciBvPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUodCxlKXtyZXR1cm4gTWF0aC5hYnModC1lKTw9MWUtNn12YXIgcj1mdW5jdGlvbih0KXt2YXIgcj0xO2Zvcig7IWUoTWF0aC5yb3VuZCh0KnIpL3IsdCk7KXIqPTEwO3JldHVybiByfSh0KSxuPXQqcixpPU1hdGguYWJzKGZ1bmN0aW9uIHQocixuKXtyZXR1cm4gZShuLDApP3I6dChuLHIlbil9KG4scikpO3JldHVybltNYXRoLnJvdW5kKG4vaSksTWF0aC5yb3VuZChyL2kpXX0oYSk7aWYob1sxXT49MTAwKWUudGV4dD1xKHMuZGVnMnJhZChlLngpLHQsaSxuKTtlbHNle3ZhciBsPWUueDwwOzE9PT1vWzFdPzE9PT1vWzBdP2UudGV4dD0iXHUwM2MwIjplLnRleHQ9b1swXSsiXHUwM2MwIjplLnRleHQ9WyI8c3VwPiIsb1swXSwiPC9zdXA+IiwiXHUyMDQ0IiwiPHN1Yj4iLG9bMV0sIjwvc3ViPiIsIlx1MDNjMCJdLmpvaW4oIiIpLGwmJihlLnRleHQ9eCtlLnRleHQpfX19fSh0LG8scixjLG4pOmZ1bmN0aW9uKHQsZSxyLG4saSl7Im5ldmVyIj09PWk/aT0iIjoiYWxsIj09PXQuc2hvd2V4cG9uZW50JiZNYXRoLmFicyhlLngvdC5kdGljayk8MWUtNiYmKGk9ImhpZGUiKTtlLnRleHQ9cShlLngsdCxpLG4pfSh0LG8sMCxjLG4pLHQudGlja3ByZWZpeCYmIXAodC5zaG93dGlja3ByZWZpeCkmJihvLnRleHQ9dC50aWNrcHJlZml4K28udGV4dCksdC50aWNrc3VmZml4JiYhcCh0LnNob3d0aWNrc3VmZml4KSYmKG8udGV4dCs9dC50aWNrc3VmZml4KSxvfSxrLmhvdmVyTGFiZWxUZXh0PWZ1bmN0aW9uKHQsZSxyKXtpZihyIT09YiYmciE9PWUpcmV0dXJuIGsuaG92ZXJMYWJlbFRleHQodCxlKSsiIC0gIitrLmhvdmVyTGFiZWxUZXh0KHQscik7dmFyIG49ImxvZyI9PT10LnR5cGUmJmU8PTAsaT1rLnRpY2tUZXh0KHQsdC5jMmwobj8tZTplKSwiaG92ZXIiKS50ZXh0O3JldHVybiBuPzA9PT1lPyIwIjp4K2k6aX07dmFyIGo9WyJmIiwicCIsIm4iLCJcdTAzYmMiLCJtIiwiIiwiayIsIk0iLCJHIiwiVCJdO2Z1bmN0aW9uIFYodCl7cmV0dXJuIlNJIj09PXR8fCJCIj09PXR9ZnVuY3Rpb24gVSh0KXtyZXR1cm4gdD4xNHx8dDwtMTV9ZnVuY3Rpb24gcSh0LGUscixuKXt2YXIgYT10PDAsbz1lLl90aWNrcm91bmQsbD1yfHxlLmV4cG9uZW50Zm9ybWF0fHwiQiIsYz1lLl90aWNrZXhwb25lbnQsdT1rLmdldFRpY2tGb3JtYXQoZSksaD1lLnNlcGFyYXRldGhvdXNhbmRzO2lmKG4pe3ZhciBmPXtleHBvbmVudGZvcm1hdDpsLGR0aWNrOiJub25lIj09PWUuc2hvd2V4cG9uZW50P2UuZHRpY2s6aSh0KSYmTWF0aC5hYnModCl8fDEscmFuZ2U6Im5vbmUiPT09ZS5zaG93ZXhwb25lbnQ/ZS5yYW5nZS5tYXAoZS5yMmQpOlswLHR8fDFdfTtGKGYpLG89KE51bWJlcihmLl90aWNrcm91bmQpfHwwKSs0LGM9Zi5fdGlja2V4cG9uZW50LGUuaG92ZXJmb3JtYXQmJih1PWUuaG92ZXJmb3JtYXQpfWlmKHUpcmV0dXJuIGUuX251bUZvcm1hdCh1KSh0KS5yZXBsYWNlKC8tL2cseCk7dmFyIHAsZD1NYXRoLnBvdygxMCwtbykvMjtpZigibm9uZSI9PT1sJiYoYz0wKSwodD1NYXRoLmFicyh0KSk8ZCl0PSIwIixhPSExO2Vsc2V7aWYodCs9ZCxjJiYodCo9TWF0aC5wb3coMTAsLWMpLG8rPWMpLDA9PT1vKXQ9U3RyaW5nKE1hdGguZmxvb3IodCkpO2Vsc2UgaWYobzwwKXt0PSh0PVN0cmluZyhNYXRoLnJvdW5kKHQpKSkuc3Vic3RyKDAsdC5sZW5ndGgrbyk7Zm9yKHZhciBnPW87ZzwwO2crKyl0Kz0iMCJ9ZWxzZXt2YXIgbT0odD1TdHJpbmcodCkpLmluZGV4T2YoIi4iKSsxO20mJih0PXQuc3Vic3RyKDAsbStvKS5yZXBsYWNlKC9cLj8wKyQvLCIiKSl9dD1zLm51bVNlcGFyYXRlKHQsZS5fc2VwYXJhdG9ycyxoKX1jJiYiaGlkZSIhPT1sJiYoVihsKSYmVShjKSYmKGw9InBvd2VyIikscD1jPDA/eCstYzoicG93ZXIiIT09bD8iKyIrYzpTdHJpbmcoYyksImUiPT09bD90Kz0iZSIrcDoiRSI9PT1sP3QrPSJFIitwOiJwb3dlciI9PT1sP3QrPSJceGQ3MTA8c3VwPiIrcCsiPC9zdXA+IjoiQiI9PT1sJiY5PT09Yz90Kz0iQiI6VihsKSYmKHQrPWpbYy8zKzVdKSk7cmV0dXJuIGE/eCt0OnR9ZnVuY3Rpb24gSCh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKS0xPT09dC5pbmRleE9mKGVbcl0pJiZ0LnB1c2goZVtyXSl9ZnVuY3Rpb24gRyh0LGUscil7dmFyIG4saSxhPVtdLG89W10sbD10LmxheW91dDtmb3Iobj0wO248ZS5sZW5ndGg7bisrKWEucHVzaChrLmdldEZyb21JZCh0LGVbbl0pKTtmb3Iobj0wO248ci5sZW5ndGg7bisrKW8ucHVzaChrLmdldEZyb21JZCh0LHJbbl0pKTt2YXIgYz1PYmplY3Qua2V5cyhhWzBdKSx1PVsiYW5jaG9yIiwiZG9tYWluIiwib3ZlcmxheWluZyIsInBvc2l0aW9uIiwic2lkZSIsInRpY2thbmdsZSJdLGg9WyJsaW5lYXIiLCJsb2ciXTtmb3Iobj0wO248Yy5sZW5ndGg7bisrKXt2YXIgZj1jW25dLHA9YVswXVtmXSxkPW9bMF1bZl0sZz0hMCxtPSExLHY9ITE7aWYoIl8iIT09Zi5jaGFyQXQoMCkmJiJmdW5jdGlvbiIhPXR5cGVvZiBwJiYtMT09PXUuaW5kZXhPZihmKSl7Zm9yKGk9MTtpPGEubGVuZ3RoJiZnO2krKyl7dmFyIHk9YVtpXVtmXTsidHlwZSI9PT1mJiYtMSE9PWguaW5kZXhPZihwKSYmLTEhPT1oLmluZGV4T2YoeSkmJnAhPT15P209ITA6eSE9PXAmJihnPSExKX1mb3IoaT0xO2k8by5sZW5ndGgmJmc7aSsrKXt2YXIgeD1vW2ldW2ZdOyJ0eXBlIj09PWYmJi0xIT09aC5pbmRleE9mKGQpJiYtMSE9PWguaW5kZXhPZih4KSYmZCE9PXg/dj0hMDpvW2ldW2ZdIT09ZCYmKGc9ITEpfWcmJihtJiYobFthWzBdLl9uYW1lXS50eXBlPSJsaW5lYXIiKSx2JiYobFtvWzBdLl9uYW1lXS50eXBlPSJsaW5lYXIiKSxXKGwsZixhLG8sdC5fZnVsbExheW91dC5fZGZsdFRpdGxlKSl9fWZvcihuPTA7bjx0Ll9mdWxsTGF5b3V0LmFubm90YXRpb25zLmxlbmd0aDtuKyspe3ZhciBiPXQuX2Z1bGxMYXlvdXQuYW5ub3RhdGlvbnNbbl07LTEhPT1lLmluZGV4T2YoYi54cmVmKSYmLTEhPT1yLmluZGV4T2YoYi55cmVmKSYmcy5zd2FwQXR0cnMobC5hbm5vdGF0aW9uc1tuXSxbIj8iXSl9fWZ1bmN0aW9uIFcodCxlLHIsbixpKXt2YXIgYSxvPXMubmVzdGVkUHJvcGVydHksbD1vKHRbclswXS5fbmFtZV0sZSkuZ2V0KCksYz1vKHRbblswXS5fbmFtZV0sZSkuZ2V0KCk7Zm9yKCJ0aXRsZSI9PT1lJiYobD09PWkueCYmKGw9aS55KSxjPT09aS55JiYoYz1pLngpKSxhPTA7YTxyLmxlbmd0aDthKyspbyh0LHJbYV0uX25hbWUrIi4iK2UpLnNldChjKTtmb3IoYT0wO2E8bi5sZW5ndGg7YSsrKW8odCxuW2FdLl9uYW1lKyIuIitlKS5zZXQobCl9ay5nZXRUaWNrRm9ybWF0PWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpLGEsbyxzLGw7ZnVuY3Rpb24gYyh0KXtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIHQ/dDpOdW1iZXIodC5yZXBsYWNlKCJNIiwiIikpKmR9ZnVuY3Rpb24gdSh0LGUpe3ZhciByPVsiTCIsIkQiXTtpZih0eXBlb2YgdD09dHlwZW9mIGUpe2lmKCJudW1iZXIiPT10eXBlb2YgdClyZXR1cm4gdC1lO3ZhciBuPXIuaW5kZXhPZih0LmNoYXJBdCgwKSksaT1yLmluZGV4T2YoZS5jaGFyQXQoMCkpO3JldHVybiBuPT09aT9OdW1iZXIodC5yZXBsYWNlKC8oTHxEKS9nLCIiKSktTnVtYmVyKGUucmVwbGFjZSgvKEx8RCkvZywiIikpOm4taX1yZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQ/MTotMX1mdW5jdGlvbiBoKHQsZSl7dmFyIHI9bnVsbD09PWVbMF0sbj1udWxsPT09ZVsxXSxpPXUodCxlWzBdKT49MCxhPXUodCxlWzFdKTw9MDtyZXR1cm4ocnx8aSkmJihufHxhKX1pZih0LnRpY2tmb3JtYXRzdG9wcyYmdC50aWNrZm9ybWF0c3RvcHMubGVuZ3RoPjApc3dpdGNoKHQudHlwZSl7Y2FzZSJkYXRlIjpjYXNlImxpbmVhciI6Zm9yKGU9MDtlPHQudGlja2Zvcm1hdHN0b3BzLmxlbmd0aDtlKyspaWYoKG49dC50aWNrZm9ybWF0c3RvcHNbZV0pLmVuYWJsZWQmJihpPXQuZHRpY2ssYT1uLmR0aWNrcmFuZ2Usbz12b2lkIDAsdm9pZCAwLHZvaWQgMCxvPWN8fGZ1bmN0aW9uKHQpe3JldHVybiB0fSxzPWFbMF0sbD1hWzFdLCghcyYmIm51bWJlciIhPXR5cGVvZiBzfHxvKHMpPD1vKGkpKSYmKCFsJiYibnVtYmVyIiE9dHlwZW9mIGx8fG8obCk+PW8oaSkpKSl7cj1uO2JyZWFrfWJyZWFrO2Nhc2UibG9nIjpmb3IoZT0wO2U8dC50aWNrZm9ybWF0c3RvcHMubGVuZ3RoO2UrKylpZigobj10LnRpY2tmb3JtYXRzdG9wc1tlXSkuZW5hYmxlZCYmaCh0LmR0aWNrLG4uZHRpY2tyYW5nZSkpe3I9bjticmVha319cmV0dXJuIHI/ci52YWx1ZTp0LnRpY2tmb3JtYXR9LGsuZ2V0U3VicGxvdHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9mdWxsTGF5b3V0Ll9zdWJwbG90cyxuPXIuY2FydGVzaWFuLmNvbmNhdChyLmdsMmR8fFtdKSxpPWU/ay5maW5kU3VicGxvdHNXaXRoQXhpcyhuLGUpOm47cmV0dXJuIGkuc29ydChmdW5jdGlvbih0LGUpe3ZhciByPXQuc3Vic3RyKDEpLnNwbGl0KCJ5Iiksbj1lLnN1YnN0cigxKS5zcGxpdCgieSIpO3JldHVybiByWzBdPT09blswXT8rclsxXS0rblsxXTorclswXS0rblswXX0pLGl9LGsuZmluZFN1YnBsb3RzV2l0aEF4aXM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bmV3IFJlZ0V4cCgieCI9PT1lLl9pZC5jaGFyQXQoMCk/Il4iK2UuX2lkKyJ5IjplLl9pZCsiJCIpLG49W10saT0wO2k8dC5sZW5ndGg7aSsrKXt2YXIgYT10W2ldO3IudGVzdChhKSYmbi5wdXNoKGEpfXJldHVybiBufSxrLm1ha2VDbGlwUGF0aHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dDtpZighZS5faGFzT25seUxhcmdlU3Bsb21zKXt2YXIgcixpLGE9e19vZmZzZXQ6MCxfbGVuZ3RoOmUud2lkdGgsX2lkOiIifSxvPXtfb2Zmc2V0OjAsX2xlbmd0aDplLmhlaWdodCxfaWQ6IiJ9LHM9ay5saXN0KHQsIngiLCEwKSxsPWsubGlzdCh0LCJ5IiwhMCksYz1bXTtmb3Iocj0wO3I8cy5sZW5ndGg7cisrKWZvcihjLnB1c2goe3g6c1tyXSx5Om99KSxpPTA7aTxsLmxlbmd0aDtpKyspMD09PXImJmMucHVzaCh7eDphLHk6bFtpXX0pLGMucHVzaCh7eDpzW3JdLHk6bFtpXX0pO3ZhciB1PWUuX2NsaXBzLnNlbGVjdEFsbCgiLmF4ZXNjbGlwIikuZGF0YShjLGZ1bmN0aW9uKHQpe3JldHVybiB0LnguX2lkK3QueS5faWR9KTt1LmVudGVyKCkuYXBwZW5kKCJjbGlwUGF0aCIpLmNsYXNzZWQoImF4ZXNjbGlwIiwhMCkuYXR0cigiaWQiLGZ1bmN0aW9uKHQpe3JldHVybiJjbGlwIitlLl91aWQrdC54Ll9pZCt0LnkuX2lkfSkuYXBwZW5kKCJyZWN0IiksdS5leGl0KCkucmVtb3ZlKCksdS5lYWNoKGZ1bmN0aW9uKHQpe24uc2VsZWN0KHRoaXMpLnNlbGVjdCgicmVjdCIpLmF0dHIoe3g6dC54Ll9vZmZzZXR8fDAseTp0LnkuX29mZnNldHx8MCx3aWR0aDp0LnguX2xlbmd0aHx8MSxoZWlnaHQ6dC55Ll9sZW5ndGh8fDF9KX0pfX0say5kb1RpY2tzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10Ll9mdWxsTGF5b3V0OyJyZWRyYXciPT09ZSYmbi5fcGFwZXIuc2VsZWN0QWxsKCJnLnN1YnBsb3QiKS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPW4uX3Bsb3RzW3RdLHI9ZS54YXhpcyxpPWUueWF4aXM7ZS54YXhpc2xheWVyLnNlbGVjdEFsbCgiLiIrci5faWQrInRpY2siKS5yZW1vdmUoKSxlLnlheGlzbGF5ZXIuc2VsZWN0QWxsKCIuIitpLl9pZCsidGljayIpLnJlbW92ZSgpLGUuZ3JpZGxheWVyJiZlLmdyaWRsYXllci5zZWxlY3RBbGwoInBhdGgiKS5yZW1vdmUoKSxlLnplcm9saW5lbGF5ZXImJmUuemVyb2xpbmVsYXllci5zZWxlY3RBbGwoInBhdGgiKS5yZW1vdmUoKSxuLl9pbmZvbGF5ZXIuc2VsZWN0KCIuZy0iK3IuX2lkKyJ0aXRsZSIpLnJlbW92ZSgpLG4uX2luZm9sYXllci5zZWxlY3QoIi5nLSIraS5faWQrInRpdGxlIikucmVtb3ZlKCl9KTt2YXIgaT1lJiYicmVkcmF3IiE9PWU/ZTprLmxpc3RJZHModCk7cy5zeW5jT3JBc3luYyhpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtpZihlKXt2YXIgbj1rLmRvVGlja3NTaW5nbGUodCxlLHIpLGk9ay5nZXRGcm9tSWQodCxlKTtyZXR1cm4gaS5fcj1pLnJhbmdlLnNsaWNlKCksaS5fcmw9cy5zaW1wbGVNYXAoaS5fcixpLnIybCksbn19fSkpfSxrLmRvVGlja3NTaW5nbGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBmLHA9dC5fZnVsbExheW91dCxkPSExO3MuaXNQbGFpbk9iamVjdChlKT8oZj1lLGQ9ITApOmY9ay5nZXRGcm9tSWQodCxlKSxmLnNldFNjYWxlKCk7dmFyIGcsbSx2LHkseCxiLE09Zi5faWQsVD1NLmNoYXJBdCgwKSxTPWsuY291bnRlckxldHRlcihNKSxFPWYuX3ZhbHM9ay5jYWxjVGlja3MoZiksQz1mdW5jdGlvbih0KXtyZXR1cm5bdC50ZXh0LHQueCxmLm1pcnJvcix0LmZvbnQsdC5mb250U2l6ZSx0LmZvbnRDb2xvcl0uam9pbigiXyIpfSxMPU0rInRpY2siLHo9TSsiZ3JpZCIsUD1NKyJ6bCIsST0oZi5saW5ld2lkdGh8fDEpLzIsTz0ib3V0c2lkZSI9PT1mLnRpY2tzP2YudGlja2xlbjowLEQ9MCxSPWguY3Jpc3BSb3VuZCh0LGYuZ3JpZHdpZHRoLDEpLEI9aC5jcmlzcFJvdW5kKHQsZi56ZXJvbGluZXdpZHRoLFIpLEY9aC5jcmlzcFJvdW5kKHQsZi50aWNrd2lkdGgsMSk7aWYoZi5fY291bnRlcmFuZ2xlJiYib3V0c2lkZSI9PT1mLnRpY2tzKXt2YXIgTj1mLl9jb3VudGVyYW5nbGUqTWF0aC5QSS8xODA7Tz1mLnRpY2tsZW4qTWF0aC5jb3MoTikrMSxEPWYudGlja2xlbipNYXRoLnNpbihOKX1pZihmLnNob3d0aWNrbGFiZWxzJiYoIm91dHNpZGUiPT09Zi50aWNrc3x8Zi5zaG93bGluZSkmJihPKz0uMipmLnRpY2tmb250LnNpemUpLCJ4Ij09PVQpZz1bImJvdHRvbSIsInRvcCJdLG09Zi5fdHJhbnNmbnx8ZnVuY3Rpb24odCl7cmV0dXJuInRyYW5zbGF0ZSgiKyhmLl9vZmZzZXQrZi5sMnAodC54KSkrIiwwKSJ9LHY9ZnVuY3Rpb24odCxlKXtpZihmLl9jb3VudGVyYW5nbGUpe3ZhciByPWYuX2NvdW50ZXJhbmdsZSpNYXRoLlBJLzE4MDtyZXR1cm4iTTAsIit0KyJsIitNYXRoLnNpbihyKSplKyIsIitNYXRoLmNvcyhyKSplfXJldHVybiJNMCwiK3QrInYiK2V9O2Vsc2UgaWYoInkiPT09VClnPVsibGVmdCIsInJpZ2h0Il0sbT1mLl90cmFuc2ZufHxmdW5jdGlvbih0KXtyZXR1cm4idHJhbnNsYXRlKDAsIisoZi5fb2Zmc2V0K2YubDJwKHQueCkpKyIpIn0sdj1mdW5jdGlvbih0LGUpe2lmKGYuX2NvdW50ZXJhbmdsZSl7dmFyIHI9Zi5fY291bnRlcmFuZ2xlKk1hdGguUEkvMTgwO3JldHVybiJNIit0KyIsMGwiK01hdGguY29zKHIpKmUrIiwiKy1NYXRoLnNpbihyKSplfXJldHVybiJNIit0KyIsMGgiK2V9O2Vsc2V7aWYoImFuZ3VsYXIiIT09TSlyZXR1cm4gdm9pZCBzLndhcm4oIlVucmVjb2duaXplZCBkb1RpY2tzIGF4aXM6IixNKTtnPVsibGVmdCIsInJpZ2h0Il0sbT1mLl90cmFuc2ZuLHY9ZnVuY3Rpb24odCxlKXtyZXR1cm4iTSIrdCsiLDBoIitlfX12YXIgaj1mLnNpZGV8fGdbMF0sVj1bLTEsMSxqPT09Z1sxXT8xOi0xXTtpZigiaW5zaWRlIiE9PWYudGlja3M9PSgieCI9PT1UKSYmKFY9Vi5tYXAoZnVuY3Rpb24odCl7cmV0dXJuLXR9KSksZi52aXNpYmxlKXtmLl90aWNrRmlsdGVyJiYoRT1FLmZpbHRlcihmLl90aWNrRmlsdGVyKSk7dmFyIFU9RS5maWx0ZXIoWik7aWYoImFuZ3VsYXIiPT09Zi5faWQmJihVPUUpLGQpe2lmKCQoZi5fYXhpc2xheWVyLHYoZi5fcG9zK0kqVlsyXSxWWzJdKmYudGlja2xlbikpLGYuX2NvdW50ZXJheGlzKXR0KHtncmlkbGF5ZXI6Zi5fZ3JpZGxheWVyLHplcm9saW5lbGF5ZXI6Zi5femVyb2xpbmVsYXllcn0sZi5fY291bnRlcmF4aXMpO3JldHVybiBKKGYuX2F4aXNsYXllcixmLl9wb3MpfWlmKHAuX2hhcygiY2FydGVzaWFuIikpe3k9ay5nZXRTdWJwbG90cyh0LGYpO3ZhciBxPXt9O3kubWFwKGZ1bmN0aW9uKHQpe3ZhciBlPXAuX3Bsb3RzW3RdLHI9ZVtTKyJheGlzIl0sbj1yLl9tYWluQXhpcy5faWQ7cVtuXXx8KHFbbl09MSx0dChlLHIsdCkpfSk7dmFyIEg9Zi5fbWFpblN1YnBsb3QsRz1wLl9wbG90c1tIXSxXPVtdO2lmKGYudGlja3Mpe3ZhciBZPVZbMl0sWD12KGYuX21haW5MaW5lUG9zaXRpb24rSSpZLFkqZi50aWNrbGVuKTtmLl9hbmNob3JBeGlzJiZmLm1pcnJvciYmITAhPT1mLm1pcnJvciYmKFgrPXYoZi5fbWFpbk1pcnJvclBvc2l0aW9uLUkqWSwtWSpmLnRpY2tsZW4pKSwkKEdbVCsiYXhpc2xheWVyIl0sWCksVz1PYmplY3Qua2V5cyhmLl9saW5lcG9zaXRpb25zfHx7fSl9cmV0dXJuIFcubWFwKGZ1bmN0aW9uKHQpe3ZhciBlPXAuX3Bsb3RzW3RdW1QrImF4aXNsYXllciJdLHI9Zi5fbGluZXBvc2l0aW9uc1t0XXx8W107ZnVuY3Rpb24gbih0KXt2YXIgZT1WW3RdO3JldHVybiB2KHJbdF0rSSplLGUqZi50aWNrbGVuKX0kKGUsbigwKStuKDEpKX0pLEooR1tUKyJheGlzbGF5ZXIiXSxmLl9tYWluTGluZVBvc2l0aW9uKX19ZnVuY3Rpb24gWih0KXt2YXIgZT1mLmwycCh0LngpO3JldHVybiBlPjEmJmU8Zi5fbGVuZ3RoLTF9ZnVuY3Rpb24gJCh0LGUpe3ZhciByPXQuc2VsZWN0QWxsKCJwYXRoLiIrTCkuZGF0YSgiaW5zaWRlIj09PWYudGlja3M/VTpFLEMpO2UmJmYudGlja3M/KHIuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKEwsMSkuY2xhc3NlZCgidGlja3MiLDEpLmNsYXNzZWQoImNyaXNwIiwxKS5jYWxsKHUuc3Ryb2tlLGYudGlja2NvbG9yKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixGKyJweCIpLmF0dHIoImQiLGUpLHIuYXR0cigidHJhbnNmb3JtIixtKSxyLmV4aXQoKS5yZW1vdmUoKSk6ci5yZW1vdmUoKX1mdW5jdGlvbiBKKGUscil7aWYoeD1lLnNlbGVjdEFsbCgiZy4iK0wpLmRhdGEoRSxDKSwhaShyKSlyZXR1cm4geC5yZW1vdmUoKSx2b2lkIEsoKTtpZighZi5zaG93dGlja2xhYmVscylyZXR1cm4geC5yZW1vdmUoKSxLKCksdm9pZCB6KCk7dmFyIG8sYyx1LGQsZzsieCI9PT1UPyhvPWZ1bmN0aW9uKHQpe3JldHVybiB0LmR4K0QqZ30sZD1yKyhPK0kpKihnPSJib3R0b20iPT09aj8xOi0xKSxjPWZ1bmN0aW9uKHQpe3JldHVybiB0LmR5K2QrdC5mb250U2l6ZSooImJvdHRvbSI9PT1qPzE6LS4yKX0sdT1mdW5jdGlvbih0KXtyZXR1cm4gaSh0KSYmMCE9PXQmJjE4MCE9PXQ/dCpnPDA/ImVuZCI6InN0YXJ0IjoibWlkZGxlIn0pOiJ5Ij09PVQ/KGc9InJpZ2h0Ij09PWo/MTotMSxjPWZ1bmN0aW9uKHQpe3JldHVybiB0LmR5K3QuZm9udFNpemUqXy1EKmd9LG89ZnVuY3Rpb24odCl7cmV0dXJuIHQuZHgrcisoTytJKyg5MD09PU1hdGguYWJzKGYudGlja2FuZ2xlKT90LmZvbnRTaXplLzI6MCkpKmd9LHU9ZnVuY3Rpb24odCl7cmV0dXJuIGkodCkmJjkwPT09TWF0aC5hYnModCk/Im1pZGRsZSI6InJpZ2h0Ij09PWo/InN0YXJ0IjoiZW5kIn0pOiJhbmd1bGFyIj09PU0mJihmLl9sYWJlbFNoaWZ0PUQsZi5fbGFiZWxTdGFuZG9mZj1PLGYuX3BhZD1JLG89Zi5fbGFiZWx4LGM9Zi5fbGFiZWx5LHU9Zi5fbGFiZWxhbmNob3IpO3ZhciB2PTAsaz0wLEE9W107ZnVuY3Rpb24gUyh0LGUpe3QuZWFjaChmdW5jdGlvbih0KXt2YXIgcj11KGUsdCksYT1uLnNlbGVjdCh0aGlzKSxzPWEuc2VsZWN0KCIudGV4dC1tYXRoLWdyb3VwIiksZj1tLmNhbGwoYS5ub2RlKCksdCkrKGkoZSkmJjAhPStlPyIgcm90YXRlKCIrZSsiLCIrbyh0KSsiLCIrKGModCktdC5mb250U2l6ZS8yKSsiKSI6IiIpLHA9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPSh0LTEpKmU7aWYoIngiPT09VCl7aWYocjwtNjB8fDYwPHIpcmV0dXJuLS41Km47aWYoInRvcCI9PT1qKXJldHVybi1ufWVsc2V7aWYoKHIqPSJsZWZ0Ij09PWo/MTotMSk8LTMwKXJldHVybi1uO2lmKHI8MzApcmV0dXJuLS41Km59cmV0dXJuIDB9KGwubGluZUNvdW50KGEpLHcqdC5mb250U2l6ZSxpKGUpPytlOjApO2lmKHAmJihmKz0iIHRyYW5zbGF0ZSgwLCAiK3ArIikiKSxzLmVtcHR5KCkpYS5zZWxlY3QoInRleHQiKS5hdHRyKHt0cmFuc2Zvcm06ZiwidGV4dC1hbmNob3IiOnJ9KTtlbHNle3ZhciBkPWguYkJveChzLm5vZGUoKSkud2lkdGgqe2VuZDotLjUsc3RhcnQ6LjV9W3JdO3MuYXR0cigidHJhbnNmb3JtIixmKyhkPyJ0cmFuc2xhdGUoIitkKyIsMCkiOiIiKSl9fSl9ZnVuY3Rpb24geigpe2lmKGYuc2hvd3RpY2tsYWJlbHMpe3ZhciByPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbj1lLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtmLl9ib3VuZGluZ0JveD17d2lkdGg6bi53aWR0aCxoZWlnaHQ6bi5oZWlnaHQsbGVmdDpuLmxlZnQtci5sZWZ0LHJpZ2h0Om4ucmlnaHQtci5sZWZ0LHRvcDpuLnRvcC1yLnRvcCxib3R0b206bi5ib3R0b20tci50b3B9fWVsc2V7dmFyIGksYT1wLl9zaXplOyJ4Ij09PVQ/KGk9ImZyZWUiPT09Zi5hbmNob3I/YS50K2EuaCooMS1mLnBvc2l0aW9uKTphLnQrYS5oKigxLWYuX2FuY2hvckF4aXMuZG9tYWluW3tib3R0b206MCx0b3A6MX1bZi5zaWRlXV0pLGYuX2JvdW5kaW5nQm94PXt0b3A6aSxib3R0b206aSxsZWZ0OmYuX29mZnNldCxyaWdodDpmLl9vZmZzZXQrZi5fbGVuZ3RoLHdpZHRoOmYuX2xlbmd0aCxoZWlnaHQ6MH0pOihpPSJmcmVlIj09PWYuYW5jaG9yP2EubCthLncqZi5wb3NpdGlvbjphLmwrYS53KmYuX2FuY2hvckF4aXMuZG9tYWluW3tsZWZ0OjAscmlnaHQ6MX1bZi5zaWRlXV0sZi5fYm91bmRpbmdCb3g9e2xlZnQ6aSxyaWdodDppLGJvdHRvbTpmLl9vZmZzZXQrZi5fbGVuZ3RoLHRvcDpmLl9vZmZzZXQsaGVpZ2h0OmYuX2xlbmd0aCx3aWR0aDowfSl9aWYoeSl7dmFyIG89Zi5fY291bnRlclNwYW49WzEvMCwtMS8wXTtmb3IoYj0wO2I8eS5sZW5ndGg7YisrKXt2YXIgcz1wLl9wbG90c1t5W2JdXVsieCI9PT1UPyJ5YXhpcyI6InhheGlzIl07bChvLFtzLl9vZmZzZXQscy5fb2Zmc2V0K3MuX2xlbmd0aF0pfSJmcmVlIj09PWYuYW5jaG9yJiZsKG8sIngiPT09VD9bZi5fYm91bmRpbmdCb3guYm90dG9tLGYuX2JvdW5kaW5nQm94LnRvcF06W2YuX2JvdW5kaW5nQm94LnJpZ2h0LGYuX2JvdW5kaW5nQm94LmxlZnRdKX1mdW5jdGlvbiBsKHQsZSl7dFswXT1NYXRoLm1pbih0WzBdLGVbMF0pLHRbMV09TWF0aC5tYXgodFsxXSxlWzFdKX19eC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoTCwxKS5hcHBlbmQoInRleHQiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmVhY2goZnVuY3Rpb24oZSl7dmFyIHI9bi5zZWxlY3QodGhpcyksaT10Ll9wcm9taXNlcy5sZW5ndGg7ci5jYWxsKGwucG9zaXRpb25UZXh0LG8oZSksYyhlKSkuY2FsbChoLmZvbnQsZS5mb250LGUuZm9udFNpemUsZS5mb250Q29sb3IpLnRleHQoZS50ZXh0KS5jYWxsKGwuY29udmVydFRvVHNwYW5zLHQpLChpPXQuX3Byb21pc2VzW2ldKT9BLnB1c2godC5fcHJvbWlzZXMucG9wKCkudGhlbihmdW5jdGlvbigpe1MocixmLnRpY2thbmdsZSl9KSk6UyhyLGYudGlja2FuZ2xlKX0pLHguZXhpdCgpLnJlbW92ZSgpLHguZWFjaChmdW5jdGlvbih0KXt2PU1hdGgubWF4KHYsdC5mb250U2l6ZSl9KSwiYW5ndWxhciI9PT1NJiZ4LmVhY2goZnVuY3Rpb24odCl7bi5zZWxlY3QodGhpcykuc2VsZWN0KCJ0ZXh0IikuY2FsbChsLnBvc2l0aW9uVGV4dCxvKHQpLGModCkpfSksUyh4LGYuX2xhc3RhbmdsZXx8Zi50aWNrYW5nbGUpO3ZhciBQPXMuc3luY09yQXN5bmMoW2Z1bmN0aW9uKCl7cmV0dXJuIEEubGVuZ3RoJiZQcm9taXNlLmFsbChBKX0sZnVuY3Rpb24oKXtpZihTKHgsZi50aWNrYW5nbGUpLCJ4Ij09PVQmJiFpKGYudGlja2FuZ2xlKSYmKCJsb2ciIT09Zi50eXBlfHwiRCIhPT1TdHJpbmcoZi5kdGljaykuY2hhckF0KDApKSl7dmFyIHQ9W107Zm9yKHguZWFjaChmdW5jdGlvbihlKXt2YXIgcj1uLnNlbGVjdCh0aGlzKSxpPXIuc2VsZWN0KCIudGV4dC1tYXRoLWdyb3VwIiksYT1mLmwycChlLngpO2kuZW1wdHkoKSYmKGk9ci5zZWxlY3QoInRleHQiKSk7dmFyIG89aC5iQm94KGkubm9kZSgpKTt0LnB1c2goe3RvcDowLGJvdHRvbToxMCxoZWlnaHQ6MTAsbGVmdDphLW8ud2lkdGgvMixyaWdodDphK28ud2lkdGgvMisyLHdpZHRoOm8ud2lkdGgrMn0pfSksYj0wO2I8dC5sZW5ndGgtMTtiKyspaWYocy5iQm94SW50ZXJzZWN0KHRbYl0sdFtiKzFdKSl7az0zMDticmVha31rJiYoTWF0aC5hYnMoKEVbRS5sZW5ndGgtMV0ueC1FWzBdLngpKmYuX20pLyhFLmxlbmd0aC0xKTwyLjUqdiYmKGs9OTApLFMoeCxrKSksZi5fbGFzdGFuZ2xlPWt9cmV0dXJuIEsoKSxNKyIgZG9uZSJ9LHosZnVuY3Rpb24oKXt2YXIgZT1mLl9uYW1lKyIuYXV0b21hcmdpbiI7aWYoIngiPT09VHx8InkiPT09VClpZihmLmF1dG9tYXJnaW4pe3ZhciByPWYuc2lkZVswXSxuPXt4OjAseTowLHI6MCxsOjAsdDowLGI6MH07IngiPT09VD8obi55PSJmcmVlIj09PWYuYW5jaG9yP2YucG9zaXRpb246Zi5fYW5jaG9yQXhpcy5kb21haW5bInQiPT09cj8xOjBdLG5bcl0rPWYuX2JvdW5kaW5nQm94LmhlaWdodCk6KG4ueD0iZnJlZSI9PT1mLmFuY2hvcj9mLnBvc2l0aW9uOmYuX2FuY2hvckF4aXMuZG9tYWluWyJyIj09PXI/MTowXSxuW3JdKz1mLl9ib3VuZGluZ0JveC53aWR0aCksZi50aXRsZSE9PXAuX2RmbHRUaXRsZVtUXSYmKG5bcl0rPWYudGl0bGVmb250LnNpemUpLGEuYXV0b01hcmdpbih0LGUsbil9ZWxzZSBhLmF1dG9NYXJnaW4odCxlKX1dKTtyZXR1cm4gUCYmUC50aGVuJiZ0Ll9wcm9taXNlcy5wdXNoKFApLFB9ZnVuY3Rpb24gSygpe2lmKCEocnx8Zi5yYW5nZXNsaWRlciYmZi5yYW5nZXNsaWRlci52aXNpYmxlJiZmLl9ib3VuZGluZ0JveCYmImJvdHRvbSI9PT1mLnNpZGUpKXt2YXIgZSxuLGksYSxvPXtzZWxlY3Rpb246eCxzaWRlOmYuc2lkZX0scz1NLmNoYXJBdCgwKSxsPXQuX2Z1bGxMYXlvdXQuX3NpemUsdT1mLnRpdGxlZm9udC5zaXplO2lmKHguc2l6ZSgpKXt2YXIgZD1oLmdldFRyYW5zbGF0ZSh4Lm5vZGUoKS5wYXJlbnROb2RlKTtvLm9mZnNldExlZnQ9ZC54LG8ub2Zmc2V0VG9wPWQueX12YXIgZz0xMCsxLjUqdSsoZi5saW5ld2lkdGg/Zi5saW5ld2lkdGgtMTowKTsieCI9PT1zPyhuPSJmcmVlIj09PWYuYW5jaG9yP3tfb2Zmc2V0OmwudCsoMS0oZi5wb3NpdGlvbnx8MCkpKmwuaCxfbGVuZ3RoOjB9OkEuZ2V0RnJvbUlkKHQsZi5hbmNob3IpLGk9Zi5fb2Zmc2V0K2YuX2xlbmd0aC8yLGE9InRvcCI9PT1mLnNpZGU/LWctdSooZi5zaG93dGlja2xhYmVscz8xOjApOm4uX2xlbmd0aCtnK3UqKGYuc2hvd3RpY2tsYWJlbHM/MS41Oi41KSxhKz1uLl9vZmZzZXQsby5zaWRlfHwoby5zaWRlPSJib3R0b20iKSk6KG49ImZyZWUiPT09Zi5hbmNob3I/e19vZmZzZXQ6bC5sKyhmLnBvc2l0aW9ufHwwKSpsLncsX2xlbmd0aDowfTpBLmdldEZyb21JZCh0LGYuYW5jaG9yKSxhPWYuX29mZnNldCtmLl9sZW5ndGgvMixpPSJyaWdodCI9PT1mLnNpZGU/bi5fbGVuZ3RoK2crdSooZi5zaG93dGlja2xhYmVscz8xOi41KTotZy11KihmLnNob3d0aWNrbGFiZWxzPy41OjApLGkrPW4uX29mZnNldCxlPXtyb3RhdGU6Ii05MCIsb2Zmc2V0OjB9LG8uc2lkZXx8KG8uc2lkZT0ibGVmdCIpKSxjLmRyYXcodCxNKyJ0aXRsZSIse3Byb3BDb250YWluZXI6Zixwcm9wTmFtZTpmLl9uYW1lKyIudGl0bGUiLHBsYWNlaG9sZGVyOnAuX2RmbHRUaXRsZVtzXSxhdm9pZDpvLHRyYW5zZm9ybTplLGF0dHJpYnV0ZXM6e3g6aSx5OmEsInRleHQtYW5jaG9yIjoibWlkZGxlIn19KX19ZnVuY3Rpb24gUSh0LGUpe3JldHVybiEwPT09dC52aXNpYmxlJiZ0LnhheGlzK3QueWF4aXM9PT1lJiYoISghby50cmFjZUlzKHQsImJhciIpfHx0Lm9yaWVudGF0aW9uIT09e3g6ImgiLHk6InYifVtUXSl8fHQuZmlsbCYmdC5maWxsLmNoYXJBdCh0LmZpbGwubGVuZ3RoLTEpPT09VCl9ZnVuY3Rpb24gdHQoZSxyLGkpe2lmKCFwLl9oYXNPbmx5TGFyZ2VTcGxvbXMpe3ZhciBhPWUuZ3JpZGxheWVyLnNlbGVjdEFsbCgiLiIrTSksbz1lLnplcm9saW5lbGF5ZXIsbD1lWyJoaWRlZ3JpZCIrVF0/W106VSxjPWYuX2dyaWRwYXRofHwoIngiPT09VD8iTTAsIityLl9vZmZzZXQrInYiOiJNIityLl9vZmZzZXQrIiwwaCIpK3IuX2xlbmd0aCxoPWEuc2VsZWN0QWxsKCJwYXRoLiIreikuZGF0YSghMT09PWYuc2hvd2dyaWQ/W106bCxDKTtpZihoLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZCh6LDEpLmNsYXNzZWQoImNyaXNwIiwxKS5hdHRyKCJkIixjKS5lYWNoKGZ1bmN0aW9uKHQpe2YuemVyb2xpbmUmJigibGluZWFyIj09PWYudHlwZXx8Ii0iPT09Zi50eXBlKSYmTWF0aC5hYnModC54KTxmLmR0aWNrLzEwMCYmbi5zZWxlY3QodGhpcykucmVtb3ZlKCl9KSxoLmF0dHIoInRyYW5zZm9ybSIsbSkuY2FsbCh1LnN0cm9rZSxmLmdyaWRjb2xvcnx8IiNkZGQiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixSKyJweCIpLCJmdW5jdGlvbiI9PXR5cGVvZiBjJiZoLmF0dHIoImQiLGMpLGguZXhpdCgpLnJlbW92ZSgpLG8pe2Zvcih2YXIgZD0hMSxnPTA7Zzx0Ll9mdWxsRGF0YS5sZW5ndGg7ZysrKWlmKFEodC5fZnVsbERhdGFbZ10saSkpe2Q9ITA7YnJlYWt9dmFyIHY9cy5zaW1wbGVNYXAoZi5yYW5nZSxmLnIybCkseT12WzBdKnZbMV08PTAmJmYuemVyb2xpbmUmJigibGluZWFyIj09PWYudHlwZXx8Ii0iPT09Zi50eXBlKSYmbC5sZW5ndGgmJihkfHxaKHt4OjB9KXx8IWYuc2hvd2xpbmUpLHg9by5zZWxlY3RBbGwoInBhdGguIitQKS5kYXRhKHk/W3t4OjAsaWQ6TX1dOltdKTt4LmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZChQLDEpLmNsYXNzZWQoInpsIiwxKS5jbGFzc2VkKCJjcmlzcCIsMSkuYXR0cigiZCIsYykuZWFjaChmdW5jdGlvbigpe28uc2VsZWN0QWxsKCJwYXRoIikuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiBBLmlkU29ydCh0LmlkLGUuaWQpfSl9KSx4LmF0dHIoInRyYW5zZm9ybSIsbSkuY2FsbCh1LnN0cm9rZSxmLnplcm9saW5lY29sb3J8fHUuZGVmYXVsdExpbmUpLnN0eWxlKCJzdHJva2Utd2lkdGgiLEIrInB4IikseC5leGl0KCkucmVtb3ZlKCl9fX19LGsuYWxsb3dBdXRvTWFyZ2luPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1rLmxpc3QodCwiIiwhMCkscj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdO24uYXV0b21hcmdpbiYmYS5hbGxvd0F1dG9NYXJnaW4odCxuLl9uYW1lKyIuYXV0b21hcmdpbiIpLG4ucmFuZ2VzbGlkZXImJm4ucmFuZ2VzbGlkZXIudmlzaWJsZSYmYS5hbGxvd0F1dG9NYXJnaW4odCwicmFuZ2VzbGlkZXIiK24uX2lkKX19LGsuc3dhcD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1mdW5jdGlvbih0LGUpe3ZhciByLG4saT1bXTtmb3Iocj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgYT1bXSxvPXQuX2Z1bGxEYXRhW2Vbcl1dLnhheGlzLHM9dC5fZnVsbERhdGFbZVtyXV0ueWF4aXM7aWYobyYmcyl7Zm9yKG49MDtuPGkubGVuZ3RoO24rKyktMT09PWlbbl0ueC5pbmRleE9mKG8pJiYtMT09PWlbbl0ueS5pbmRleE9mKHMpfHxhLnB1c2gobik7aWYoYS5sZW5ndGgpe3ZhciBsLGM9aVthWzBdXTtpZihhLmxlbmd0aD4xKWZvcihuPTE7bjxhLmxlbmd0aDtuKyspbD1pW2Fbbl1dLEgoYy54LGwueCksSChjLnksbC55KTtIKGMueCxbb10pLEgoYy55LFtzXSl9ZWxzZSBpLnB1c2goe3g6W29dLHk6W3NdfSl9fXJldHVybiBpfSh0LGUpLG49MDtuPHIubGVuZ3RoO24rKylHKHQscltuXS54LHJbbl0ueSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjU1OCwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo1ODMsIi4uLy4uL2NvbXBvbmVudHMvdGl0bGVzIjo2NDksIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiOjY1NiwiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NjYxLCIuLi8uLi9saWIiOjY4NCwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo3MDgsIi4uLy4uL3Bsb3RzL3Bsb3RzIjo3OTUsIi4uLy4uL3JlZ2lzdHJ5Ijo4MTcsIi4vYXV0b3JhbmdlIjo3MzEsIi4vYXhpc19hdXRvdHlwZSI6NzMzLCIuL2F4aXNfaWRzIjo3MzUsIi4vc2V0X2NvbnZlcnQiOjc1MCxkMzoxNDcsImZhc3QtaXNudW1lcmljIjoyMTR9XSw3MzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsYT0wLG89MCxzPU1hdGgubWF4KDEsKHQubGVuZ3RoLTEpLzFlMyksbD0wO2w8dC5sZW5ndGg7bCs9cylyPXRbTWF0aC5yb3VuZChsKV0saS5pc0RhdGVUaW1lKHIsZSkmJihhKz0xKSxuKHIpJiYobys9MSk7cmV0dXJuIGE+MipvfSh0LGUpPyJkYXRlIjpmdW5jdGlvbih0KXtmb3IodmFyIGUscj1NYXRoLm1heCgxLCh0Lmxlbmd0aC0xKS8xZTMpLG49MCxvPTAscz0wO3M8dC5sZW5ndGg7cys9cillPXRbTWF0aC5yb3VuZChzKV0saS5jbGVhbk51bWJlcihlKSE9PWE/bisrOiJzdHJpbmciPT10eXBlb2YgZSYmIiIhPT1lJiYiTm9uZSIhPT1lJiZvKys7cmV0dXJuIG8+MipufSh0KT8iY2F0ZWdvcnkiOmZ1bmN0aW9uKHQpe2lmKCF0KXJldHVybiExO2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKWlmKG4odFtlXSkpcmV0dXJuITA7cmV0dXJuITF9KHQpPyJsaW5lYXIiOiItIn19LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NjYxLCIuLi8uLi9saWIiOjY4NCwiZmFzdC1pc251bWVyaWMiOjIxNH1dLDczNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksbz10KCIuL3RpY2tfdmFsdWVfZGVmYXVsdHMiKSxzPXQoIi4vdGlja19tYXJrX2RlZmF1bHRzIiksbD10KCIuL3RpY2tfbGFiZWxfZGVmYXVsdHMiKSxjPXQoIi4vY2F0ZWdvcnlfb3JkZXJfZGVmYXVsdHMiKSx1PXQoIi4vbGluZV9ncmlkX2RlZmF1bHRzIiksaD10KCIuL3NldF9jb252ZXJ0Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGYscCl7dmFyIGQ9Zi5sZXR0ZXIsZz1lLl9pZCxtPWYuZm9udHx8e30sdj1yKCJ2aXNpYmxlIiwhZi5jaGVhdGVyb25seSkseT1lLnR5cGU7ImRhdGUiPT09eSYmbi5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZURlZmF1bHRzIikodCxlLCJjYWxlbmRhciIsZi5jYWxlbmRhcik7aChlLHApO3ZhciB4PXIoImF1dG9yYW5nZSIsIWUuaXNWYWxpZFJhbmdlKHQucmFuZ2UpKTtpZihlLl9yYW5nZXNsaWRlckF1dG9yYW5nZT0hMSx4JiZyKCJyYW5nZW1vZGUiKSxyKCJyYW5nZSIpLGUuY2xlYW5SYW5nZSgpLGModCxlLHIsZiksImNhdGVnb3J5Ij09PXl8fGYubm9Ib3Zlcnx8cigiaG92ZXJmb3JtYXQiKSwhdilyZXR1cm4gZTt2YXIgYj1yKCJjb2xvciIpLF89YiE9PWEuY29sb3IuZGZsdD9iOm0uY29sb3I7cmV0dXJuIHIoInRpdGxlIiwoKHAuX3NwbG9tQXhlc3x8e30pW2RdfHx7fSlbZ118fHAuX2RmbHRUaXRsZVtkXSksaS5jb2VyY2VGb250KHIsInRpdGxlZm9udCIse2ZhbWlseTptLmZhbWlseSxzaXplOk1hdGgucm91bmQoMS4yKm0uc2l6ZSksY29sb3I6X30pLG8odCxlLHIseSksbCh0LGUscix5LGYpLHModCxlLHIsZiksdSh0LGUscix7ZGZsdENvbG9yOmIsYmdDb2xvcjpmLmJnQ29sb3Isc2hvd0dyaWQ6Zi5zaG93R3JpZCxhdHRyaWJ1dGVzOmF9KSwoZS5zaG93bGluZXx8ZS50aWNrcykmJnIoIm1pcnJvciIpLGYuYXV0b21hcmdpbiYmcigiYXV0b21hcmdpbiIpLGV9fSx7Ii4uLy4uL2xpYiI6Njg0LCIuLi8uLi9yZWdpc3RyeSI6ODE3LCIuL2NhdGVnb3J5X29yZGVyX2RlZmF1bHRzIjo3MzYsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjc0NCwiLi9saW5lX2dyaWRfZGVmYXVsdHMiOjc0NiwiLi9zZXRfY29udmVydCI6NzUwLCIuL3RpY2tfbGFiZWxfZGVmYXVsdHMiOjc1MSwiLi90aWNrX21hcmtfZGVmYXVsdHMiOjc1MiwiLi90aWNrX3ZhbHVlX2RlZmF1bHRzIjo3NTN9XSw3MzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4vY29uc3RhbnRzIik7ci5pZDJuYW1lPWZ1bmN0aW9uKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdCYmdC5tYXRjaChpLkFYX0lEX1BBVFRFUk4pKXt2YXIgZT10LnN1YnN0cigxKTtyZXR1cm4iMSI9PT1lJiYoZT0iIiksdC5jaGFyQXQoMCkrImF4aXMiK2V9fSxyLm5hbWUyaWQ9ZnVuY3Rpb24odCl7aWYodC5tYXRjaChpLkFYX05BTUVfUEFUVEVSTikpe3ZhciBlPXQuc3Vic3RyKDUpO3JldHVybiIxIj09PWUmJihlPSIiKSx0LmNoYXJBdCgwKStlfX0sci5jbGVhbklkPWZ1bmN0aW9uKHQsZSl7aWYodC5tYXRjaChpLkFYX0lEX1BBVFRFUk4pJiYoIWV8fHQuY2hhckF0KDApPT09ZSkpe3ZhciByPXQuc3Vic3RyKDEpLnJlcGxhY2UoL14wKy8sIiIpO3JldHVybiIxIj09PXImJihyPSIiKSx0LmNoYXJBdCgwKStyfX0sci5saXN0PWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT10Ll9mdWxsTGF5b3V0O2lmKCFpKXJldHVybltdO3ZhciBhLG89ci5saXN0SWRzKHQsZSkscz1uZXcgQXJyYXkoby5sZW5ndGgpO2ZvcihhPTA7YTxvLmxlbmd0aDthKyspe3ZhciBsPW9bYV07c1thXT1pW2wuY2hhckF0KDApKyJheGlzIitsLnN1YnN0cigxKV19aWYoIW4pe3ZhciBjPWkuX3N1YnBsb3RzLmdsM2R8fFtdO2ZvcihhPTA7YTxjLmxlbmd0aDthKyspe3ZhciB1PWlbY1thXV07ZT9zLnB1c2godVtlKyJheGlzIl0pOnMucHVzaCh1LnhheGlzLHUueWF4aXMsdS56YXhpcyl9fXJldHVybiBzfSxyLmxpc3RJZHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9mdWxsTGF5b3V0O2lmKCFyKXJldHVybltdO3ZhciBuPXIuX3N1YnBsb3RzO3JldHVybiBlP25bZSsiYXhpcyJdOm4ueGF4aXMuY29uY2F0KG4ueWF4aXMpfSxyLmdldEZyb21JZD1mdW5jdGlvbih0LGUsbil7dmFyIGk9dC5fZnVsbExheW91dDtyZXR1cm4ieCI9PT1uP2U9ZS5yZXBsYWNlKC95WzAtOV0qLywiIik6InkiPT09biYmKGU9ZS5yZXBsYWNlKC94WzAtOV0qLywiIikpLGlbci5pZDJuYW1lKGUpXX0sci5nZXRGcm9tVHJhY2U9ZnVuY3Rpb24odCxlLGkpe3ZhciBhPXQuX2Z1bGxMYXlvdXQsbz1udWxsO2lmKG4udHJhY2VJcyhlLCJnbDNkIikpe3ZhciBzPWUuc2NlbmU7InNjZW5lIj09PXMuc3Vic3RyKDAsNSkmJihvPWFbc11baSsiYXhpcyJdKX1lbHNlIG89ci5nZXRGcm9tSWQodCxlW2krImF4aXMiXXx8aSk7cmV0dXJuIG99LHIuaWRTb3J0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5jaGFyQXQoMCksbj1lLmNoYXJBdCgwKTtyZXR1cm4gciE9PW4/cj5uPzE6LTE6Kyh0LnN1YnN0cigxKXx8MSktKyhlLnN1YnN0cigxKXx8MSl9fSx7Ii4uLy4uL3JlZ2lzdHJ5Ijo4MTcsIi4vY29uc3RhbnRzIjo3Mzd9XSw3MzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKCJjYXRlZ29yeSI9PT1lLnR5cGUpe3ZhciBpLGE9dC5jYXRlZ29yeWFycmF5LG89QXJyYXkuaXNBcnJheShhKSYmYS5sZW5ndGg+MDtvJiYoaT0iYXJyYXkiKTt2YXIgcyxsPXIoImNhdGVnb3J5b3JkZXIiLGkpOyJhcnJheSI9PT1sJiYocz1yKCJjYXRlZ29yeWFycmF5IikpLG98fCJhcnJheSIhPT1sfHwobD1lLmNhdGVnb3J5b3JkZXI9InRyYWNlIiksInRyYWNlIj09PWw/ZS5faW5pdGlhbENhdGVnb3JpZXM9W106ImFycmF5Ij09PWw/ZS5faW5pdGlhbENhdGVnb3JpZXM9cy5zbGljZSgpOihzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLGE9ZS5kYXRhQXR0cnx8dC5faWQuY2hhckF0KDApLG89e307aWYoZS5heERhdGEpcj1lLmF4RGF0YTtlbHNlIGZvcihyPVtdLG49MDtuPGUuZGF0YS5sZW5ndGg7bisrKXt2YXIgcz1lLmRhdGFbbl07c1thKyJheGlzIl09PT10Ll9pZCYmci5wdXNoKHMpfWZvcihuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBsPXJbbl1bYV07Zm9yKGk9MDtpPGwubGVuZ3RoO2krKyl7dmFyIGM9bFtpXTtudWxsIT1jJiYob1tjXT0xKX19cmV0dXJuIE9iamVjdC5rZXlzKG8pfShlLG4pLnNvcnQoKSwiY2F0ZWdvcnkgYXNjZW5kaW5nIj09PWw/ZS5faW5pdGlhbENhdGVnb3JpZXM9czoiY2F0ZWdvcnkgZGVzY2VuZGluZyI9PT1sJiYoZS5faW5pdGlhbENhdGVnb3JpZXM9cy5yZXZlcnNlKCkpKX19fSx7fV0sNzM3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYi9yZWdleCIpLmNvdW50ZXI7ZS5leHBvcnRzPXtpZFJlZ2V4Ont4Om4oIngiKSx5Om4oInkiKX0sYXR0clJlZ2V4Om4oIlt4eV1heGlzIikseEF4aXNNYXRjaDpuKCJ4YXhpcyIpLHlBeGlzTWF0Y2g6bigieWF4aXMiKSxBWF9JRF9QQVRURVJOOi9eW3h5el1bMC05XSokLyxBWF9OQU1FX1BBVFRFUk46L15beHl6XWF4aXNbMC05XSokLyxTVUJQTE9UX1BBVFRFUk46L154KFswLTldKil5KFswLTldKikkLyxNSU5EUkFHOjgsTUlOU0VMRUNUOjEyLE1JTlpPT006MjAsRFJBR0dFUlNJWkU6MjAsQkVORFBYOjEuNSxSRURSQVdERUxBWTo1MCxTRUxFQ1RERUxBWToxMDAsU0VMRUNUSUQ6Ii1zZWxlY3QiLERGTFRSQU5HRVg6Wy0xLDZdLERGTFRSQU5HRVk6Wy0xLDRdLHRyYWNlTGF5ZXJDbGFzc2VzOlsiaGVhdG1hcGxheWVyIiwiY29udG91cmNhcnBldGxheWVyIiwiY29udG91cmxheWVyIiwiYmFybGF5ZXIiLCJjYXJwZXRsYXllciIsInZpb2xpbmxheWVyIiwiYm94bGF5ZXIiLCJvaGxjbGF5ZXIiLCJzY2F0dGVyY2FycGV0bGF5ZXIiLCJzY2F0dGVybGF5ZXIiXSxsYXllclZhbHVlMmxheWVyQ2xhc3M6eyJhYm92ZSB0cmFjZXMiOiJhYm92ZSIsImJlbG93IHRyYWNlcyI6ImJlbG93In19fSx7Ii4uLy4uL2xpYi9yZWdleCI6NzAwfV0sNzM4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9heGlzX2lkcyIpLmlkMm5hbWU7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEsbyl7dmFyIHM9by5fYXhpc0NvbnN0cmFpbnRHcm91cHMsbD1lLl9pZCxjPWwuY2hhckF0KDApO2lmKCFlLmZpeGVkcmFuZ2UmJihyKCJjb25zdHJhaW4iKSxuLmNvZXJjZSh0LGUse2NvbnN0cmFpbnRvd2FyZDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOiJ4Ij09PWM/WyJsZWZ0IiwiY2VudGVyIiwicmlnaHQiXTpbImJvdHRvbSIsIm1pZGRsZSIsInRvcCJdLGRmbHQ6IngiPT09Yz8iY2VudGVyIjoibWlkZGxlIn19LCJjb25zdHJhaW50b3dhcmQiKSx0LnNjYWxlYW5jaG9yKSl7dmFyIHU9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGEsbyxzLGwsYz1uW2koZSldLnR5cGUsdT1bXTtmb3Iobz0wO288ci5sZW5ndGg7bysrKShzPXJbb10pIT09ZSYmKChsPW5baShzKV0pLnR5cGUhPT1jfHxsLmZpeGVkcmFuZ2V8fHUucHVzaChzKSk7Zm9yKGE9MDthPHQubGVuZ3RoO2ErKylpZih0W2FdW2VdKXt2YXIgaD10W2FdLGY9W107Zm9yKG89MDtvPHUubGVuZ3RoO28rKylzPXVbb10saFtzXXx8Zi5wdXNoKHMpO3JldHVybntsaW5rYWJsZUF4ZXM6Zix0aGlzR3JvdXA6aH19cmV0dXJue2xpbmthYmxlQXhlczp1LHRoaXNHcm91cDpudWxsfX0ocyxsLGEsbyksaD1uLmNvZXJjZSh0LGUse3NjYWxlYW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6dS5saW5rYWJsZUF4ZXN9fSwic2NhbGVhbmNob3IiKTtpZihoKXt2YXIgZj1yKCJzY2FsZXJhdGlvIik7Znx8KGY9ZS5zY2FsZXJhdGlvPTEpLGZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGEsbyxzLGwsYztudWxsPT09ZT8oKGU9e30pW3JdPTEsYz10Lmxlbmd0aCx0LnB1c2goZSkpOmM9dC5pbmRleE9mKGUpO3ZhciB1PU9iamVjdC5rZXlzKGUpO2ZvcihhPTA7YTx0Lmxlbmd0aDthKyspaWYocz10W2FdLGEhPT1jJiZzW25dKXt2YXIgaD1zW25dO2ZvcihvPTA7bzx1Lmxlbmd0aDtvKyspbD11W29dLHNbbF09aCppKmVbbF07cmV0dXJuIHZvaWQgdC5zcGxpY2UoYywxKX1pZigxIT09aSlmb3Iobz0wO288dS5sZW5ndGg7bysrKWVbdVtvXV0qPWk7ZVtuXT0xfShzLHUudGhpc0dyb3VwLGwsaCxmKX1lbHNlLTEhPT1hLmluZGV4T2YodC5zY2FsZWFuY2hvcikmJm4ud2FybigiaWdub3JlZCAiK2UuX25hbWUrJy5zY2FsZWFuY2hvcjogIicrdC5zY2FsZWFuY2hvcisnIiB0byBhdm9pZCBlaXRoZXIgYW4gaW5maW5pdGUgbG9vcCBhbmQgcG9zc2libHkgaW5jb25zaXN0ZW50IHNjYWxlcmF0aW9zLCBvciBiZWNhdXNlIHRoZSB0YXJnZXRheGlzIGhhcyBmaXhlZCByYW5nZS4nKX19fSx7Ii4uLy4uL2xpYiI6Njg0LCIuL2F4aXNfaWRzIjo3MzV9XSw3Mzk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9heGlzX2lkcyIpLmlkMm5hbWUsaT10KCIuL3NjYWxlX3pvb20iKSxhPXQoIi4vYXV0b3JhbmdlIikubWFrZVBhZEZuLG89dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkFMTU9TVF9FUVVBTCxzPXQoIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiKS5GUk9NX0JMO2Z1bmN0aW9uIGwodCxlKXt2YXIgcj10Ll9pbnB1dERvbWFpbixuPXNbdC5jb25zdHJhaW50b3dhcmRdLGk9clswXSsoclsxXS1yWzBdKSpuO3QuZG9tYWluPXQuX2lucHV0LmRvbWFpbj1baSsoclswXS1pKS9lLGkrKHJbMV0taSkvZV19ci5lbmZvcmNlPWZ1bmN0aW9uKHQpe3ZhciBlLHIscyxjLHUsaCxmLHA9dC5fZnVsbExheW91dCxkPXAuX2F4aXNDb25zdHJhaW50R3JvdXBzfHxbXTtmb3IoZT0wO2U8ZC5sZW5ndGg7ZSsrKXt2YXIgZz1kW2VdLG09T2JqZWN0LmtleXMoZyksdj0xLzAseT0wLHg9MS8wLGI9e30sXz17fSx3PSExO2ZvcihyPTA7cjxtLmxlbmd0aDtyKyspX1tzPW1bcl1dPWM9cFtuKHMpXSxjLl9pbnB1dERvbWFpbj9jLmRvbWFpbj1jLl9pbnB1dERvbWFpbi5zbGljZSgpOmMuX2lucHV0RG9tYWluPWMuZG9tYWluLnNsaWNlKCksYy5faW5wdXRSYW5nZXx8KGMuX2lucHV0UmFuZ2U9Yy5yYW5nZS5zbGljZSgpKSxjLnNldFNjYWxlKCksYltzXT11PU1hdGguYWJzKGMuX20pL2dbc10sdj1NYXRoLm1pbih2LHUpLCJkb21haW4iIT09Yy5jb25zdHJhaW4mJmMuX2NvbnN0cmFpbnRTaHJpbmthYmxlfHwoeD1NYXRoLm1pbih4LHUpKSxkZWxldGUgYy5fY29uc3RyYWludFNocmlua2FibGUseT1NYXRoLm1heCh5LHUpLCJkb21haW4iPT09Yy5jb25zdHJhaW4mJih3PSEwKTtpZighKHY+byp5KXx8dylmb3Iocj0wO3I8bS5sZW5ndGg7cisrKWlmKHU9YltzPW1bcl1dLGg9KGM9X1tzXSkuY29uc3RyYWluLHUhPT14fHwiZG9tYWluIj09PWgpaWYoZj11L3gsInJhbmdlIj09PWgpaShjLGYpO2Vsc2V7dmFyIGs9Yy5faW5wdXREb21haW4sTT0oYy5kb21haW5bMV0tYy5kb21haW5bMF0pLyhrWzFdLWtbMF0pLEE9KGMucjJsKGMucmFuZ2VbMV0pLWMucjJsKGMucmFuZ2VbMF0pKS8oYy5yMmwoYy5faW5wdXRSYW5nZVsxXSktYy5yMmwoYy5faW5wdXRSYW5nZVswXSkpO2lmKChmLz1NKSpBPDEpe2MuZG9tYWluPWMuX2lucHV0LmRvbWFpbj1rLnNsaWNlKCksaShjLGYpO2NvbnRpbnVlfWlmKEE8MSYmKGMucmFuZ2U9Yy5faW5wdXQucmFuZ2U9Yy5faW5wdXRSYW5nZS5zbGljZSgpLGYqPUEpLGMuYXV0b3JhbmdlJiZjLl9taW4ubGVuZ3RoJiZjLl9tYXgubGVuZ3RoKXt2YXIgVD1jLnIybChjLnJhbmdlWzBdKSxTPWMucjJsKGMucmFuZ2VbMV0pLEU9KFQrUykvMixDPUUsTD1FLHo9TWF0aC5hYnMoUy1FKSxQPUUteipmKjEuMDAwMSxJPUUreipmKjEuMDAwMSxPPWEoYyk7bChjLGYpLGMuc2V0U2NhbGUoKTt2YXIgRCxSLEI9TWF0aC5hYnMoYy5fbSk7Zm9yKFI9MDtSPGMuX21pbi5sZW5ndGg7UisrKShEPWMuX21pbltSXS52YWwtTyhjLl9taW5bUl0pL0IpPlAmJkQ8QyYmKEM9RCk7Zm9yKFI9MDtSPGMuX21heC5sZW5ndGg7UisrKShEPWMuX21heFtSXS52YWwrTyhjLl9tYXhbUl0pL0IpPEkmJkQ+TCYmKEw9RCk7Zi89KEwtQykvKDIqeiksQz1jLmwycihDKSxMPWMubDJyKEwpLGMucmFuZ2U9Yy5faW5wdXQucmFuZ2U9VDxTP1tDLExdOltMLENdfWwoYyxmKX19fSxyLmNsZWFuPWZ1bmN0aW9uKHQsZSl7aWYoZS5faW5wdXREb21haW4pe2Zvcih2YXIgcj0hMSxuPWUuX2lkLGk9dC5fZnVsbExheW91dC5fYXhpc0NvbnN0cmFpbnRHcm91cHMsYT0wO2E8aS5sZW5ndGg7YSsrKWlmKGlbYV1bbl0pe3I9ITA7YnJlYWt9ciYmImRvbWFpbiI9PT1lLmNvbnN0cmFpbnx8KGUuX2lucHV0LmRvbWFpbj1lLmRvbWFpbj1lLl9pbnB1dERvbWFpbixkZWxldGUgZS5faW5wdXREb21haW4pfX19LHsiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCI6NjU2LCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo2NjEsIi4vYXV0b3JhbmdlIjo3MzEsIi4vYXhpc19pZHMiOjczNSwiLi9zY2FsZV96b29tIjo3NDh9XSw3NDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoInRpbnljb2xvcjIiKSxhPXQoImhhcy1wYXNzaXZlLWV2ZW50cyIpLG89dCgiLi4vLi4vcmVnaXN0cnkiKSxzPXQoIi4uLy4uL2xpYiIpLGw9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksYz10KCIuLi8uLi9saWIvY2xlYXJfZ2xfY2FudmFzZXMiKSx1PXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxoPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGY9dCgiLi4vLi4vY29tcG9uZW50cy9meCIpLHA9dCgiLi4vLi4vbGliL3NldGN1cnNvciIpLGQ9dCgiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudCIpLGc9dCgiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCIpLkZST01fVEwsbT10KCIuLi9wbG90cyIpLHY9dCgiLi9heGVzIikuZG9UaWNrc1NpbmdsZSx5PXQoIi4vYXhpc19pZHMiKS5nZXRGcm9tSWQseD10KCIuL3NlbGVjdCIpLnByZXBTZWxlY3QsYj10KCIuL3NlbGVjdCIpLmNsZWFyU2VsZWN0LF89dCgiLi9zY2FsZV96b29tIiksdz10KCIuL2NvbnN0YW50cyIpLGs9dy5NSU5EUkFHLE09dy5NSU5aT09NLEE9ITA7ZnVuY3Rpb24gVCh0LGUscixuKXt2YXIgaT1zLmVuc3VyZVNpbmdsZSh0LmRyYWdsYXllcixlLHIsZnVuY3Rpb24oZSl7ZS5jbGFzc2VkKCJkcmFnIiwhMCkuc3R5bGUoe2ZpbGw6InRyYW5zcGFyZW50Iiwic3Ryb2tlLXdpZHRoIjowfSkuYXR0cigiZGF0YS1zdWJwbG90Iix0LmlkKX0pO3JldHVybiBpLmNhbGwocCxuKSxpLm5vZGUoKX1mdW5jdGlvbiBTKHQsZSxyLGksYSxvLHMpe3ZhciBsPVQodCwicmVjdCIsZSxyKTtyZXR1cm4gbi5zZWxlY3QobCkuY2FsbChoLnNldFJlY3QsaSxhLG8scyksbH1mdW5jdGlvbiBFKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspaWYoIXRbcl0uZml4ZWRyYW5nZSlyZXR1cm4gZTtyZXR1cm4iIn1mdW5jdGlvbiBDKHQsZSxyLG4saSl7dmFyIGEsbyxzLGw7Zm9yKGE9MDthPHQubGVuZ3RoO2ErKykobz10W2FdKS5maXhlZHJhbmdlfHwocz1vLl9ybFswXSxsPW8uX3JsWzFdLXMsby5yYW5nZT1bby5sMnIocytsKmUpLG8ubDJyKHMrbCpyKV0sbltvLl9uYW1lKyIucmFuZ2VbMF0iXT1vLnJhbmdlWzBdLG5bby5fbmFtZSsiLnJhbmdlWzFdIl09by5yYW5nZVsxXSk7aWYoaSYmaS5sZW5ndGgpe3ZhciBjPShlKygxLXIpKS8yO0MoaSxjLDEtYyxuKX19ZnVuY3Rpb24gTCh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZml4ZWRyYW5nZXx8KG4ucmFuZ2U9W24ubDJyKG4uX3JsWzBdLWUvbi5fbSksbi5sMnIobi5fcmxbMV0tZS9uLl9tKV0pfX1mdW5jdGlvbiB6KHQpe3JldHVybiAxLSh0Pj0wP01hdGgubWluKHQsLjkpOjEvKDEvTWF0aC5tYXgodCwtLjMpKzMuMjIyKSl9ZnVuY3Rpb24gUCh0LGUscixuLGkpe3JldHVybiB0LmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiem9vbWJveCIpLnN0eWxlKHtmaWxsOmU+LjI/InJnYmEoMCwwLDAsMCkiOiJyZ2JhKDI1NSwyNTUsMjU1LDApIiwic3Ryb2tlLXdpZHRoIjowfSkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrcisiLCAiK24rIikiKS5hdHRyKCJkIixpKyJaIil9ZnVuY3Rpb24gSSh0LGUscil7cmV0dXJuIHQuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJ6b29tYm94LWNvcm5lcnMiKS5zdHlsZSh7ZmlsbDp1LmJhY2tncm91bmQsc3Ryb2tlOnUuZGVmYXVsdExpbmUsInN0cm9rZS13aWR0aCI6MSxvcGFjaXR5OjB9KS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitlKyIsICIrcisiKSIpLmF0dHIoImQiLCJNMCwwWiIpfWZ1bmN0aW9uIE8odCxlLHIsbixpLGEpe3QuYXR0cigiZCIsbisiTSIrci5sKyIsIityLnQrInYiK3IuaCsiaCIrci53KyJ2LSIrci5oKyJoLSIrci53KyJaIiksRCh0LGUsaSxhKX1mdW5jdGlvbiBEKHQsZSxyLG4pe3J8fCh0LnRyYW5zaXRpb24oKS5zdHlsZSgiZmlsbCIsbj4uMj8icmdiYSgwLDAsMCwwLjQpIjoicmdiYSgyNTUsMjU1LDI1NSwwLjMpIikuZHVyYXRpb24oMjAwKSxlLnRyYW5zaXRpb24oKS5zdHlsZSgib3BhY2l0eSIsMSkuZHVyYXRpb24oMjAwKSl9ZnVuY3Rpb24gUih0KXtuLnNlbGVjdCh0KS5zZWxlY3RBbGwoIi56b29tYm94LC5qcy16b29tYm94LWJhY2tkcm9wLC5qcy16b29tYm94LW1lbnUsLnpvb21ib3gtY29ybmVycyIpLnJlbW92ZSgpfWZ1bmN0aW9uIEIodCl7QSYmdC5kYXRhJiZ0Ll9jb250ZXh0LnNob3dUaXBzJiYocy5ub3RpZmllcihzLl8odCwiRG91YmxlLWNsaWNrIHRvIHpvb20gYmFjayBvdXQiKSwibG9uZyIpLEE9ITEpfWZ1bmN0aW9uIEYodCl7cmV0dXJuImxhc3NvIj09PXR8fCJzZWxlY3QiPT09dH1mdW5jdGlvbiBOKHQpe3ZhciBlPU1hdGguZmxvb3IoTWF0aC5taW4odC5iLXQudCx0LnItdC5sLE0pLzIpO3JldHVybiJNIisodC5sLTMuNSkrIiwiKyh0LnQtLjUrZSkrImgzdiIrLWUrImgiK2UrInYtM2gtIisoZSszKSsiWk0iKyh0LnIrMy41KSsiLCIrKHQudC0uNStlKSsiaC0zdiIrLWUrImgiKy1lKyJ2LTNoIisoZSszKSsiWk0iKyh0LnIrMy41KSsiLCIrKHQuYisuNS1lKSsiaC0zdiIrZSsiaCIrLWUrInYzaCIrKGUrMykrIlpNIisodC5sLTMuNSkrIiwiKyh0LmIrLjUtZSkrImgzdiIrZSsiaCIrZSsidjNoLSIrKGUrMykrIloifWZ1bmN0aW9uIGoodCxlKXtpZihhKXt2YXIgcj12b2lkIDAhPT10Lm9ud2hlZWw/IndoZWVsIjoibW91c2V3aGVlbCI7dC5fb253aGVlbCYmdC5yZW1vdmVFdmVudExpc3RlbmVyKHIsdC5fb253aGVlbCksdC5fb253aGVlbD1lLHQuYWRkRXZlbnRMaXN0ZW5lcihyLGUse3Bhc3NpdmU6ITF9KX1lbHNlIHZvaWQgMCE9PXQub253aGVlbD90Lm9ud2hlZWw9ZTp2b2lkIDAhPT10Lm9ubW91c2V3aGVlbCYmKHQub25tb3VzZXdoZWVsPWUpfWZ1bmN0aW9uIFYodCl7dmFyIGU9W107Zm9yKHZhciByIGluIHQpZS5wdXNoKHRbcl0pO3JldHVybiBlfWUuZXhwb3J0cz17bWFrZURyYWdCb3g6ZnVuY3Rpb24odCxlLHIsYSx1LHAsQSxUKXt2YXIgRCxVLHEsSCxHLFcsWSxYLFosJCxKLEssUSx0dCxldCxydCxudCxpdCxhdCxvdCxzdCxsdD10Ll9mdWxsTGF5b3V0Ll96b29tbGF5ZXIsY3Q9QStUPT09Im5zZXciLHV0PTE9PT0oQStUKS5sZW5ndGg7ZnVuY3Rpb24gaHQoKXtpZihEPWUueGF4aXMsVT1lLnlheGlzLFo9RC5fbGVuZ3RoLCQ9VS5fbGVuZ3RoLFk9RC5fb2Zmc2V0LFg9VS5fb2Zmc2V0LChxPXt9KVtELl9pZF09RCwoSD17fSlbVS5faWRdPVUsQSYmVClmb3IodmFyIHI9ZS5vdmVybGF5cyxuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBpPXJbbl0ueGF4aXM7cVtpLl9pZF09aTt2YXIgYT1yW25dLnlheGlzO0hbYS5faWRdPWF9Rz1WKHEpLFc9VihIKSxLPUUoRyxUKSxRPUUoVyxBKSx0dD0hUSYmIUssSj1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuLGksYSxvLGw9dC5fZnVsbExheW91dC5fYXhpc0NvbnN0cmFpbnRHcm91cHMsYz0hMSx1PXt9LGg9e30sZj0wO2Y8bC5sZW5ndGg7ZisrKXt2YXIgcD1sW2ZdO2ZvcihuIGluIGUpaWYocFtuXSl7Zm9yKGEgaW4gcCkoIngiPT09YS5jaGFyQXQoMCk/ZTpyKVthXXx8KHVbYV09MSk7Zm9yKGkgaW4gcilwW2ldJiYoYz0hMCl9Zm9yKGkgaW4gcilpZihwW2ldKWZvcihvIGluIHApKCJ4Ij09PW8uY2hhckF0KDApP2U6cilbb118fChoW29dPTEpfWMmJihzLmV4dGVuZEZsYXQodSxoKSxoPXt9KTt2YXIgZD17fSxnPVtdO2ZvcihhIGluIHUpe3ZhciBtPXkodCxhKTtnLnB1c2gobSksZFttLl9pZF09bX12YXIgdj17fSx4PVtdO2ZvcihvIGluIGgpe3ZhciBiPXkodCxvKTt4LnB1c2goYiksdltiLl9pZF09Yn1yZXR1cm57eGFIYXNoOmQseWFIYXNoOnYseGF4ZXM6Zyx5YXhlczp4LGlzU3VicGxvdENvbnN0cmFpbmVkOmN9fSh0LHEsSCksZXQ9Si5pc1N1YnBsb3RDb25zdHJhaW5lZCxydD1UfHxldCxudD1BfHxldDt2YXIgbz10Ll9mdWxsTGF5b3V0O2l0PW8uX2hhcygic2NhdHRlcmdsIiksYXQ9by5faGFzT25seUxhcmdlU3Bsb21zLG90PWF0fHxvLl9oYXMoInNwbG9tIiksc3Q9by5faGFzKCJzdmciKX1odCgpO3ZhciBmdD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ/Im5zZXciPT09dD9yPyIiOiJwYW4iPT09ZT8ibW92ZSI6ImNyb3NzaGFpciI6dC50b0xvd2VyQ2FzZSgpKyItcmVzaXplIjoicG9pbnRlciJ9KFErSyx0Ll9mdWxsTGF5b3V0LmRyYWdtb2RlLGN0KSxwdD1TKGUsQStUKyJkcmFnIixmdCxyLGEsdSxwKTtpZih0dCYmIWN0KXJldHVybiBwdC5vbm1vdXNlZG93bj1udWxsLHB0LnN0eWxlLnBvaW50ZXJFdmVudHM9Im5vbmUiLHB0O3ZhciBkdCxndCxtdCx2dCx5dCx4dCxidCxfdCx3dCxrdCxNdD17ZWxlbWVudDpwdCxnZDp0LHBsb3RpbmZvOmV9O2Z1bmN0aW9uIEF0KCl7TXQucGxvdGluZm8uc2VsZWN0aW9uPSExLGIobHQpfWZ1bmN0aW9uIFR0KHIsaSl7aWYoUih0KSwyIT09cnx8dXR8fGZ1bmN0aW9uKCl7aWYoIXQuX3RyYW5zaXRpb25pbmdXaXRoRHVyYXRpb24pe3ZhciBlLHIsbixpPXQuX2NvbnRleHQuZG91YmxlQ2xpY2ssYT0oSz9HOltdKS5jb25jYXQoUT9XOltdKSxzPXt9O2lmKCJyZXNldCthdXRvc2l6ZSI9PT1pKWZvcihpPSJhdXRvc2l6ZSIscj0wO3I8YS5sZW5ndGg7cisrKWlmKChlPWFbcl0pLl9yYW5nZUluaXRpYWwmJihlLnJhbmdlWzBdIT09ZS5fcmFuZ2VJbml0aWFsWzBdfHxlLnJhbmdlWzFdIT09ZS5fcmFuZ2VJbml0aWFsWzFdKXx8IWUuX3JhbmdlSW5pdGlhbCYmIWUuYXV0b3JhbmdlKXtpPSJyZXNldCI7YnJlYWt9aWYoImF1dG9zaXplIj09PWkpZm9yKHI9MDtyPGEubGVuZ3RoO3IrKykoZT1hW3JdKS5maXhlZHJhbmdlfHwoc1tlLl9uYW1lKyIuYXV0b3JhbmdlIl09ITApO2Vsc2UgaWYoInJlc2V0Ij09PWkpZm9yKChLfHxldCkmJihhPWEuY29uY2F0KEoueGF4ZXMpKSxRJiYhZXQmJihhPWEuY29uY2F0KEoueWF4ZXMpKSxldCYmKEs/UXx8KGE9YS5jb25jYXQoVykpOmE9YS5jb25jYXQoRykpLHI9MDtyPGEubGVuZ3RoO3IrKykoZT1hW3JdKS5fcmFuZ2VJbml0aWFsPyhuPWUuX3JhbmdlSW5pdGlhbCxzW2UuX25hbWUrIi5yYW5nZVswXSJdPW5bMF0sc1tlLl9uYW1lKyIucmFuZ2VbMV0iXT1uWzFdKTpzW2UuX25hbWUrIi5hdXRvcmFuZ2UiXT0hMDt0LmVtaXQoInBsb3RseV9kb3VibGVjbGljayIsbnVsbCksby5jYWxsKCJyZWxheW91dCIsdCxzKX19KCksY3QpZi5jbGljayh0LGksZS5pZCk7ZWxzZSBpZigxPT09ciYmdXQpe3ZhciBhPUE/VTpELHM9InMiPT09QXx8InciPT09VD8wOjEsYz1hLl9uYW1lKyIucmFuZ2VbIitzKyJdIix1PWZ1bmN0aW9uKHQsZSl7dmFyIHIsaT10LnJhbmdlW2VdLGE9TWF0aC5hYnMoaS10LnJhbmdlWzEtZV0pO3JldHVybiJkYXRlIj09PXQudHlwZT9pOiJsb2ciPT09dC50eXBlPyhyPU1hdGguY2VpbChNYXRoLm1heCgwLC1NYXRoLmxvZyhhKS9NYXRoLkxOMTApKSszLG4uZm9ybWF0KCIuIityKyJnIikoTWF0aC5wb3coMTAsaSkpKToocj1NYXRoLmZsb29yKE1hdGgubG9nKE1hdGguYWJzKGkpKS9NYXRoLkxOMTApLU1hdGguZmxvb3IoTWF0aC5sb2coYSkvTWF0aC5MTjEwKSs0LG4uZm9ybWF0KCIuIitTdHJpbmcocikrImciKShpKSl9KGEscyksaD0ibGVmdCIscD0ibWlkZGxlIjtpZihhLmZpeGVkcmFuZ2UpcmV0dXJuO0E/KHA9Im4iPT09QT8idG9wIjoiYm90dG9tIiwicmlnaHQiPT09YS5zaWRlJiYoaD0icmlnaHQiKSk6ImUiPT09VCYmKGg9InJpZ2h0IiksdC5fY29udGV4dC5zaG93QXhpc1JhbmdlRW50cnlCb3hlcyYmbi5zZWxlY3QocHQpLmNhbGwobC5tYWtlRWRpdGFibGUse2dkOnQsaW1tZWRpYXRlOiEwLGJhY2tncm91bmQ6dC5fZnVsbExheW91dC5wYXBlcl9iZ2NvbG9yLHRleHQ6U3RyaW5nKHUpLGZpbGw6YS50aWNrZm9udD9hLnRpY2tmb250LmNvbG9yOiIjNDQ0Iixob3Jpem9udGFsQWxpZ246aCx2ZXJ0aWNhbEFsaWduOnB9KS5vbigiZWRpdCIsZnVuY3Rpb24oZSl7dmFyIHI9YS5kMnIoZSk7dm9pZCAwIT09ciYmby5jYWxsKCJyZWxheW91dCIsdCxjLHIpfSl9fU10LnByZXBGbj1mdW5jdGlvbihlLHIsbil7dmFyIGE9dC5fZnVsbExheW91dC5kcmFnbW9kZTtodCgpLHR0fHwoY3Q/ZS5zaGlmdEtleT8icGFuIj09PWE/YT0iem9vbSI6RihhKXx8KGE9InBhbiIpOmUuY3RybEtleSYmKGE9InBhbiIpOmE9InBhbiIpLE10Lm1pbkRyYWc9Imxhc3NvIj09PWE/MTp2b2lkIDAsRihhKT8oTXQueGF4ZXM9RyxNdC55YXhlcz1XLHgoZSxyLG4sTXQsYSkpOihNdC5jbGlja0ZuPVR0LEF0KCksdHR8fCgiem9vbSI9PT1hPyhNdC5tb3ZlRm49RXQsTXQuZG9uZUZuPUN0LE10Lm1pbkRyYWc9MSxmdW5jdGlvbihlLHIsbil7dmFyIGE9cHQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7ZHQ9ci1hLmxlZnQsZ3Q9bi1hLnRvcCxtdD17bDpkdCxyOmR0LHc6MCx0Omd0LGI6Z3QsaDowfSx2dD10Ll9obXBpeGNvdW50P3QuX2htbHVtY291bnQvdC5faG1waXhjb3VudDppKHQuX2Z1bGxMYXlvdXQucGxvdF9iZ2NvbG9yKS5nZXRMdW1pbmFuY2UoKSx4dD0hMSxidD0ieHkiLGt0PSExLF90PVAobHQsdnQsWSxYLHl0PSJNMCwwSCIrWisiViIrJCsiSDBWMCIpLHd0PUkobHQsWSxYKX0oMCxyLG4pKToicGFuIj09PWEmJihNdC5tb3ZlRm49UnQsTXQuZG9uZUZuPUZ0KSkpfSxkLmluaXQoTXQpO3ZhciBTdD17fTtmdW5jdGlvbiBFdChlLHIpe2lmKHQuX3RyYW5zaXRpb25pbmdXaXRoRHVyYXRpb24pcmV0dXJuITE7dmFyIG49TWF0aC5tYXgoMCxNYXRoLm1pbihaLGUrZHQpKSxpPU1hdGgubWF4KDAsTWF0aC5taW4oJCxyK2d0KSksYT1NYXRoLmFicyhuLWR0KSxvPU1hdGguYWJzKGktZ3QpO2Z1bmN0aW9uIHMoKXtidD0iIixtdC5yPW10LmwsbXQudD1tdC5iLHd0LmF0dHIoImQiLCJNMCwwWiIpfW10Lmw9TWF0aC5taW4oZHQsbiksbXQucj1NYXRoLm1heChkdCxuKSxtdC50PU1hdGgubWluKGd0LGkpLG10LmI9TWF0aC5tYXgoZ3QsaSksZXQ/YT5NfHxvPk0/KGJ0PSJ4eSIsYS9aPm8vJD8obz1hKiQvWixndD5pP210LnQ9Z3QtbzptdC5iPWd0K28pOihhPW8qWi8kLGR0Pm4/bXQubD1kdC1hOm10LnI9ZHQrYSksd3QuYXR0cigiZCIsTihtdCkpKTpzKCk6IVF8fG88TWF0aC5taW4oTWF0aC5tYXgoLjYqYSxrKSxNKT9hPGt8fCFLP3MoKToobXQudD0wLG10LmI9JCxidD0ieCIsd3QuYXR0cigiZCIsZnVuY3Rpb24odCxlKXtyZXR1cm4iTSIrKHQubC0uNSkrIiwiKyhlLU0tLjUpKyJoLTN2IisoMipNKzEpKyJoM1pNIisodC5yKy41KSsiLCIrKGUtTS0uNSkrImgzdiIrKDIqTSsxKSsiaC0zWiJ9KG10LGd0KSkpOiFLfHxhPE1hdGgubWluKC42Km8sTSk/KG10Lmw9MCxtdC5yPVosYnQ9InkiLHd0LmF0dHIoImQiLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIk0iKyhlLU0tLjUpKyIsIisodC50LS41KSsidi0zaCIrKDIqTSsxKSsidjNaTSIrKGUtTS0uNSkrIiwiKyh0LmIrLjUpKyJ2M2giKygyKk0rMSkrInYtM1oifShtdCxkdCkpKTooYnQ9Inh5Iix3dC5hdHRyKCJkIixOKG10KSkpLG10Lnc9bXQuci1tdC5sLG10Lmg9bXQuYi1tdC50LGJ0JiYoa3Q9ITApLHQuX2RyYWdnZWQ9a3QsTyhfdCx3dCxtdCx5dCx4dCx2dCkseHQ9ITB9ZnVuY3Rpb24gQ3QoKXtpZihNYXRoLm1pbihtdC5oLG10LncpPDIqaylyZXR1cm4gUih0KTsieHkiIT09YnQmJiJ4IiE9PWJ0fHxDKEcsbXQubC9aLG10LnIvWixTdCxKLnhheGVzKSwieHkiIT09YnQmJiJ5IiE9PWJ0fHxDKFcsKCQtbXQuYikvJCwoJC1tdC50KS8kLFN0LEoueWF4ZXMpLFIodCksRnQoKSxCKHQpfXZhciBMdCx6dCxQdD1bMCwwLFosJF0sSXQ9bnVsbCxPdD13LlJFRFJBV0RFTEFZLER0PWUubWFpbnBsb3Q/dC5fZnVsbExheW91dC5fcGxvdHNbZS5tYWlucGxvdF06ZTtmdW5jdGlvbiBSdChlLHIpe2lmKCF0Ll90cmFuc2l0aW9uaW5nV2l0aER1cmF0aW9uKXtpZigiZXciPT09S3x8Im5zIj09PVEpcmV0dXJuIEsmJkwoRyxlKSxRJiZMKFcsciksTnQoW0s/LWU6MCxRPy1yOjAsWiwkXSksdm9pZCBCdChRLEspO2lmKGV0JiZLJiZRKXt2YXIgbj0idyI9PT1LPT0oIm4iPT09USk/MTotMSxpPShlL1orbipyLyQpLzI7ZT1pKloscj1uKmkqJH0idyI9PT1LP2U9bChHLDAsZSk6ImUiPT09Sz9lPWwoRywxLC1lKTpLfHwoZT0wKSwibiI9PT1RP3I9bChXLDEscik6InMiPT09UT9yPWwoVywwLC1yKTpRfHwocj0wKTt2YXIgYT0idyI9PT1LP2U6MCxvPSJuIj09PVE/cjowO2lmKGV0KXt2YXIgcztpZighSyYmMT09PVEubGVuZ3RoKXtmb3Iocz0wO3M8Ry5sZW5ndGg7cysrKUdbc10ucmFuZ2U9R1tzXS5fci5zbGljZSgpLF8oR1tzXSwxLXIvJCk7YT0oZT1yKlovJCkvMn1pZighUSYmMT09PUsubGVuZ3RoKXtmb3Iocz0wO3M8Vy5sZW5ndGg7cysrKVdbc10ucmFuZ2U9V1tzXS5fci5zbGljZSgpLF8oV1tzXSwxLWUvWik7bz0ocj1lKiQvWikvMn19TnQoW2EsbyxaLWUsJC1yXSksQnQoUSxLKX1mdW5jdGlvbiBsKHQsZSxyKXtmb3IodmFyIG4saSxhPTEtZSxvPTA7bzx0Lmxlbmd0aDtvKyspe3ZhciBzPXRbb107aWYoIXMuZml4ZWRyYW5nZSl7bj1zLGk9cy5fcmxbYV0rKHMuX3JsW2VdLXMuX3JsW2FdKS96KHIvcy5fbGVuZ3RoKTt2YXIgbD1zLmwycihpKTshMSE9PWwmJnZvaWQgMCE9PWwmJihzLnJhbmdlW2VdPWwpfX1yZXR1cm4gbi5fbGVuZ3RoKihuLl9ybFtlXS1pKS8obi5fcmxbZV0tbi5fcmxbYV0pfX1mdW5jdGlvbiBCdChlLHIpe3ZhciBuLGk9W107ZnVuY3Rpb24gYSh0KXtmb3Iobj0wO248dC5sZW5ndGg7bisrKXRbbl0uZml4ZWRyYW5nZXx8aS5wdXNoKHRbbl0uX2lkKX1mb3IocnQmJihhKEcpLGEoSi54YXhlcykpLG50JiYoYShXKSxhKEoueWF4ZXMpKSxTdD17fSxuPTA7bjxpLmxlbmd0aDtuKyspe3ZhciBzPWlbbl07dih0LHMsITApO3ZhciBsPXkodCxzKTtTdFtsLl9uYW1lKyIucmFuZ2VbMF0iXT1sLnJhbmdlWzBdLFN0W2wuX25hbWUrIi5yYW5nZVsxXSJdPWwucmFuZ2VbMV19ZnVuY3Rpb24gYyhhLG8scyl7Zm9yKG49MDtuPGEubGVuZ3RoO24rKyl7dmFyIGw9YVtuXTtpZigociYmLTEhPT1pLmluZGV4T2YobC54cmVmKXx8ZSYmLTEhPT1pLmluZGV4T2YobC55cmVmKSkmJihvKHQsbikscykpcmV0dXJufX1jKHQuX2Z1bGxMYXlvdXQuYW5ub3RhdGlvbnN8fFtdLG8uZ2V0Q29tcG9uZW50TWV0aG9kKCJhbm5vdGF0aW9ucyIsImRyYXdPbmUiKSksYyh0Ll9mdWxsTGF5b3V0LnNoYXBlc3x8W10sby5nZXRDb21wb25lbnRNZXRob2QoInNoYXBlcyIsImRyYXdPbmUiKSksYyh0Ll9mdWxsTGF5b3V0LmltYWdlc3x8W10sby5nZXRDb21wb25lbnRNZXRob2QoImltYWdlcyIsImRyYXciKSwhMCl9ZnVuY3Rpb24gRnQoKXtOdChbMCwwLFosJF0pLHMuc3luY09yQXN5bmMoW20ucHJldmlvdXNQcm9taXNlcyxmdW5jdGlvbigpe28uY2FsbCgicmVsYXlvdXQiLHQsU3QpfV0sdCl9ZnVuY3Rpb24gTnQoZSl7dmFyIHIsbixpLGEsbD10Ll9mdWxsTGF5b3V0LHU9bC5fcGxvdHMsZj1sLl9zdWJwbG90cy5jYXJ0ZXNpYW47aWYoKG90fHxpdCkmJmModCksIW90fHwoby5zdWJwbG90c1JlZ2lzdHJ5LnNwbG9tLmRyYWcodCksIWF0KSl7aWYoaXQpZm9yKHI9MDtyPGYubGVuZ3RoO3IrKyl7aT0obj11W2Zbcl1dKS54YXhpcyxhPW4ueWF4aXM7dmFyIHA9bi5fc2NlbmU7aWYocCl7dmFyIGQ9cy5zaW1wbGVNYXAoaS5yYW5nZSxpLnIybCksZz1zLnNpbXBsZU1hcChhLnJhbmdlLGEucjJsKTtwLnVwZGF0ZSh7cmFuZ2U6W2RbMF0sZ1swXSxkWzFdLGdbMV1dfSl9fWlmKHN0KXt2YXIgbT1lWzJdL0QuX2xlbmd0aCx2PWVbM10vVS5fbGVuZ3RoO2ZvcihyPTA7cjxmLmxlbmd0aDtyKyspe2k9KG49dVtmW3JdXSkueGF4aXMsYT1uLnlheGlzO3ZhciB5LHgsYixfLHc9cnQmJiFpLmZpeGVkcmFuZ2UmJnFbaS5faWRdLGs9bnQmJiFhLmZpeGVkcmFuZ2UmJkhbYS5faWRdO2lmKHc/KHk9bSxiPVQ/ZVswXTpVdChpLHkpKTpiPVZ0KGkseT1qdChpLG0sdikpLGs/KHg9dixfPUE/ZVsxXTpVdChhLHgpKTpfPVZ0KGEseD1qdChhLG0sdikpLHl8fHgpe3l8fCh5PTEpLHh8fCh4PTEpO3ZhciBNPWkuX29mZnNldC1iL3ksUz1hLl9vZmZzZXQtXy94O24uY2xpcFJlY3QuY2FsbChoLnNldFRyYW5zbGF0ZSxiLF8pLmNhbGwoaC5zZXRTY2FsZSx5LHgpLG4ucGxvdC5jYWxsKGguc2V0VHJhbnNsYXRlLE0sUykuY2FsbChoLnNldFNjYWxlLDEveSwxL3gpLHk9PT1MdCYmeD09PXp0fHwoaC5zZXRQb2ludEdyb3VwU2NhbGUobi56b29tU2NhbGVQdHMseSx4KSxoLnNldFRleHRQb2ludHNTY2FsZShuLnpvb21TY2FsZVR4dCx5LHgpKSxoLmhpZGVPdXRzaWRlUmFuZ2VQb2ludHMobi5jbGlwT25BeGlzRmFsc2VUcmFjZXMsbiksTHQ9eSx6dD14fX19fX1mdW5jdGlvbiBqdCh0LGUscil7cmV0dXJuIHQuZml4ZWRyYW5nZT8wOnJ0JiZKLnhhSGFzaFt0Ll9pZF0/ZTpudCYmKGV0P0oueGFIYXNoOkoueWFIYXNoKVt0Ll9pZF0/cjowfWZ1bmN0aW9uIFZ0KHQsZSl7cmV0dXJuIGU/KHQucmFuZ2U9dC5fci5zbGljZSgpLF8odCxlKSxVdCh0LGUpKTowfWZ1bmN0aW9uIFV0KHQsZSl7cmV0dXJuIHQuX2xlbmd0aCooMS1lKSpnW3QuY29uc3RyYWludG93YXJkfHwibWlkZGxlIl19cmV0dXJuIEEubGVuZ3RoKlQubGVuZ3RoIT0xJiZqKHB0LGZ1bmN0aW9uKGUpe2lmKHQuX2NvbnRleHQuc2Nyb2xsWm9vbXx8dC5fZnVsbExheW91dC5fZW5hYmxlc2Nyb2xsem9vbSl7aWYoQXQoKSx0Ll90cmFuc2l0aW9uaW5nV2l0aER1cmF0aW9uKXJldHVybiBlLnByZXZlbnREZWZhdWx0KCksdm9pZCBlLnN0b3BQcm9wYWdhdGlvbigpO3ZhciByPXQucXVlcnlTZWxlY3RvcigiLnBsb3RseSIpO2lmKGh0KCksIShyLnNjcm9sbEhlaWdodC1yLmNsaWVudEhlaWdodD4xMHx8ci5zY3JvbGxXaWR0aC1yLmNsaWVudFdpZHRoPjEwKSl7Y2xlYXJUaW1lb3V0KEl0KTt2YXIgbj0tZS5kZWx0YVk7aWYoaXNGaW5pdGUobil8fChuPWUud2hlZWxEZWx0YS8xMCksaXNGaW5pdGUobikpe3ZhciBpLGE9TWF0aC5leHAoLU1hdGgubWluKE1hdGgubWF4KG4sLTIwKSwyMCkvMjAwKSxvPUR0LmRyYWdsYXllci5zZWxlY3QoIi5uc2V3ZHJhZyIpLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxsPShlLmNsaWVudFgtby5sZWZ0KS9vLndpZHRoLGM9KG8uYm90dG9tLWUuY2xpZW50WSkvby5oZWlnaHQ7aWYocnQpe2ZvcihUfHwobD0uNSksaT0wO2k8Ry5sZW5ndGg7aSsrKXUoR1tpXSxsLGEpO1B0WzJdKj1hLFB0WzBdKz1QdFsyXSpsKigxL2EtMSl9aWYobnQpe2ZvcihBfHwoYz0uNSksaT0wO2k8Vy5sZW5ndGg7aSsrKXUoV1tpXSxjLGEpO1B0WzNdKj1hLFB0WzFdKz1QdFszXSooMS1jKSooMS9hLTEpfU50KFB0KSxCdChBLFQpLEl0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXtQdD1bMCwwLFosJF0sRnQoKX0sT3QpLGUucHJldmVudERlZmF1bHQoKX1lbHNlIHMubG9nKCJEaWQgbm90IGZpbmQgd2hlZWwgbW90aW9uIGF0dHJpYnV0ZXM6ICIsZSl9fWZ1bmN0aW9uIHUodCxlLHIpe2lmKCF0LmZpeGVkcmFuZ2Upe3ZhciBuPXMuc2ltcGxlTWFwKHQucmFuZ2UsdC5yMmwpLGk9blswXSsoblsxXS1uWzBdKSplO3QucmFuZ2U9bi5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHQubDJyKGkrKGUtaSkqcil9KX19fSkscHR9LG1ha2VEcmFnZ2VyOlQsbWFrZVJlY3REcmFnZ2VyOlMsbWFrZVpvb21ib3g6UCxtYWtlQ29ybmVyczpJLHVwZGF0ZVpvb21ib3g6Tyx4eUNvcm5lcnM6Tix0cmFuc2l0aW9uWm9vbWJveDpELHJlbW92ZVpvb21ib3g6UixzaG93RG91YmxlQ2xpY2tOb3RpZmllcjpCLGF0dGFjaFdoZWVsRXZlbnRIYW5kbGVyOmp9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjU1OCwiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudCI6NTgwLCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjU4MywiLi4vLi4vY29tcG9uZW50cy9meCI6NjAwLCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50Ijo2NTYsIi4uLy4uL2xpYiI6Njg0LCIuLi8uLi9saWIvY2xlYXJfZ2xfY2FudmFzZXMiOjY2OCwiLi4vLi4vbGliL3NldGN1cnNvciI6NzA0LCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjcwOCwiLi4vLi4vcmVnaXN0cnkiOjgxNywiLi4vcGxvdHMiOjc5NSwiLi9heGVzIjo3MzIsIi4vYXhpc19pZHMiOjczNSwiLi9jb25zdGFudHMiOjczNywiLi9zY2FsZV96b29tIjo3NDgsIi4vc2VsZWN0Ijo3NDksZDM6MTQ3LCJoYXMtcGFzc2l2ZS1ldmVudHMiOjM3OSx0aW55Y29sb3IyOjQ5OX1dLDc0MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9meCIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudCIpLG89dCgiLi4vLi4vbGliL3NldGN1cnNvciIpLHM9dCgiLi9kcmFnYm94IikubWFrZURyYWdCb3gsbD10KCIuL2NvbnN0YW50cyIpLkRSQUdHRVJTSVpFO3IuaW5pdEludGVyYWN0aW9ucz1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0O2lmKHQuX2NvbnRleHQuc3RhdGljUGxvdCluLnNlbGVjdCh0KS5zZWxlY3RBbGwoIi5kcmFnIikucmVtb3ZlKCk7ZWxzZSBpZihlLl9oYXMoImNhcnRlc2lhbiIpfHxlLl9oYXMoImdsMmQiKXx8ZS5faGFzKCJzcGxvbSIpKXtPYmplY3Qua2V5cyhlLl9wbG90c3x8e30pLnNvcnQoZnVuY3Rpb24odCxyKXtpZigoZS5fcGxvdHNbdF0ubWFpbnBsb3QmJiEwKT09PShlLl9wbG90c1tyXS5tYWlucGxvdCYmITApKXt2YXIgbj10LnNwbGl0KCJ5IiksaT1yLnNwbGl0KCJ5Iik7cmV0dXJuIG5bMF09PT1pWzBdP051bWJlcihuWzFdfHwxKS1OdW1iZXIoaVsxXXx8MSk6TnVtYmVyKG5bMF18fDEpLU51bWJlcihpWzBdfHwxKX1yZXR1cm4gZS5fcGxvdHNbdF0ubWFpbnBsb3Q/MTotMX0pLmZvckVhY2goZnVuY3Rpb24ocil7dmFyIG49ZS5fcGxvdHNbcl0sbz1uLnhheGlzLGM9bi55YXhpcztpZighbi5tYWlucGxvdCl7dmFyIHU9cyh0LG4sby5fb2Zmc2V0LGMuX29mZnNldCxvLl9sZW5ndGgsYy5fbGVuZ3RoLCJucyIsImV3Iik7dS5vbm1vdXNlbW92ZT1mdW5jdGlvbihlKXt0Ll9mdWxsTGF5b3V0Ll9yZWhvdmVyPWZ1bmN0aW9uKCl7dC5fZnVsbExheW91dC5faG92ZXJzdWJwbG90PT09ciYmaS5ob3Zlcih0LGUscil9LGkuaG92ZXIodCxlLHIpLHQuX2Z1bGxMYXlvdXQuX2xhc3Rob3Zlcj11LHQuX2Z1bGxMYXlvdXQuX2hvdmVyc3VicGxvdD1yfSx1Lm9ubW91c2VvdXQ9ZnVuY3Rpb24oZSl7dC5fZHJhZ2dpbmd8fCh0Ll9mdWxsTGF5b3V0Ll9ob3ZlcnN1YnBsb3Q9bnVsbCxhLnVuaG92ZXIodCxlKSl9LHQuX2NvbnRleHQuc2hvd0F4aXNEcmFnSGFuZGxlcyYmKHModCxuLG8uX29mZnNldC1sLGMuX29mZnNldC1sLGwsbCwibiIsInciKSxzKHQsbixvLl9vZmZzZXQrby5fbGVuZ3RoLGMuX29mZnNldC1sLGwsbCwibiIsImUiKSxzKHQsbixvLl9vZmZzZXQtbCxjLl9vZmZzZXQrYy5fbGVuZ3RoLGwsbCwicyIsInciKSxzKHQsbixvLl9vZmZzZXQrby5fbGVuZ3RoLGMuX29mZnNldCtjLl9sZW5ndGgsbCxsLCJzIiwiZSIpKX1pZih0Ll9jb250ZXh0LnNob3dBeGlzRHJhZ0hhbmRsZXMpe2lmKHI9PT1vLl9tYWluU3VicGxvdCl7dmFyIGg9by5fbWFpbkxpbmVQb3NpdGlvbjsidG9wIj09PW8uc2lkZSYmKGgtPWwpLHModCxuLG8uX29mZnNldCsuMSpvLl9sZW5ndGgsaCwuOCpvLl9sZW5ndGgsbCwiIiwiZXciKSxzKHQsbixvLl9vZmZzZXQsaCwuMSpvLl9sZW5ndGgsbCwiIiwidyIpLHModCxuLG8uX29mZnNldCsuOSpvLl9sZW5ndGgsaCwuMSpvLl9sZW5ndGgsbCwiIiwiZSIpfWlmKHI9PT1jLl9tYWluU3VicGxvdCl7dmFyIGY9Yy5fbWFpbkxpbmVQb3NpdGlvbjsicmlnaHQiIT09Yy5zaWRlJiYoZi09bCkscyh0LG4sZixjLl9vZmZzZXQrLjEqYy5fbGVuZ3RoLGwsLjgqYy5fbGVuZ3RoLCJucyIsIiIpLHModCxuLGYsYy5fb2Zmc2V0Ky45KmMuX2xlbmd0aCxsLC4xKmMuX2xlbmd0aCwicyIsIiIpLHModCxuLGYsYy5fb2Zmc2V0LGwsLjEqYy5fbGVuZ3RoLCJuIiwiIil9fX0pO3ZhciBvPWUuX2hvdmVybGF5ZXIubm9kZSgpO28ub25tb3VzZW1vdmU9ZnVuY3Rpb24ocil7ci50YXJnZXQ9dC5fZnVsbExheW91dC5fbGFzdGhvdmVyLGkuaG92ZXIodCxyLGUuX2hvdmVyc3VicGxvdCl9LG8ub25jbGljaz1mdW5jdGlvbihlKXtlLnRhcmdldD10Ll9mdWxsTGF5b3V0Ll9sYXN0aG92ZXIsaS5jbGljayh0LGUpfSxvLm9ubW91c2Vkb3duPWZ1bmN0aW9uKGUpe3QuX2Z1bGxMYXlvdXQuX2xhc3Rob3Zlci5vbm1vdXNlZG93bihlKX0sci51cGRhdGVGeChlKX19LHIudXBkYXRlRng9ZnVuY3Rpb24odCl7dmFyIGU9InBhbiI9PT10LmRyYWdtb2RlPyJtb3ZlIjoiY3Jvc3NoYWlyIjtvKHQuX2RyYWdnZXJzLGUpfX0seyIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50Ijo1ODAsIi4uLy4uL2NvbXBvbmVudHMvZngiOjYwMCwiLi4vLi4vbGliL3NldGN1cnNvciI6NzA0LCIuL2NvbnN0YW50cyI6NzM3LCIuL2RyYWdib3giOjc0MCxkMzoxNDd9XSw3NDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxyKXt2YXIgYT1lW3RdO2lmKEFycmF5LmlzQXJyYXkoYSkpZm9yKHZhciBvPW4uc3VicGxvdHNSZWdpc3RyeS5jYXJ0ZXNpYW4scz1vLmlkUmVnZXgsbD1yLl9zdWJwbG90cyxjPWwueGF4aXMsdT1sLnlheGlzLGg9bC5jYXJ0ZXNpYW4sZj1yLl9oYXMoImNhcnRlc2lhbiIpfHxyLl9oYXMoImdsMmQiKSxwPTA7cDxhLmxlbmd0aDtwKyspe3ZhciBkPWFbcF07aWYoaS5pc1BsYWluT2JqZWN0KGQpKXt2YXIgZz1kLnhyZWYsbT1kLnlyZWYsdj1zLngudGVzdChnKSx5PXMueS50ZXN0KG0pO2lmKHZ8fHkpe2Z8fGkucHVzaFVuaXF1ZShyLl9iYXNlUGxvdE1vZHVsZXMsbyk7dmFyIHg9ITE7diYmLTE9PT1jLmluZGV4T2YoZykmJihjLnB1c2goZykseD0hMCkseSYmLTE9PT11LmluZGV4T2YobSkmJih1LnB1c2gobSkseD0hMCkseCYmdiYmeSYmaC5wdXNoKGcrbSl9fX19fX0seyIuLi8uLi9saWIiOjY4NCwiLi4vLi4vcmVnaXN0cnkiOjgxN31dLDc0MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vLi4vcmVnaXN0cnkiKSxhPXQoIi4uLy4uL2xpYiIpLG89dCgiLi4vcGxvdHMiKSxzPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGw9dCgiLi4vZ2V0X2RhdGEiKS5nZXRNb2R1bGVDYWxjRGF0YSxjPXQoIi4vYXhpc19pZHMiKSx1PXQoIi4vY29uc3RhbnRzIiksaD10KCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyIpLGY9YS5lbnN1cmVTaW5nbGU7ZnVuY3Rpb24gcCh0LGUscil7cmV0dXJuIGEuZW5zdXJlU2luZ2xlKHQsZSxyLGZ1bmN0aW9uKHQpe3QuZGF0dW0ocil9KX1mdW5jdGlvbiBkKHQsZSxyLGEsbyl7Zm9yKHZhciBjLGgsZixwPXUudHJhY2VMYXllckNsYXNzZXMsZD10Ll9mdWxsTGF5b3V0LGc9ZC5fbW9kdWxlcyxtPVtdLHY9W10seT0wO3k8Zy5sZW5ndGg7eSsrKXt2YXIgeD0oYz1nW3ldKS5uYW1lLGI9aS5tb2R1bGVzW3hdLmNhdGVnb3JpZXM7aWYoYi5zdmcpe3ZhciBfPWMubGF5ZXJOYW1lfHx4KyJsYXllciIsdz1jLnBsb3Q7Zj0oaD1sKHIsdykpWzBdLHI9aFsxXSxmLmxlbmd0aCYmbS5wdXNoKHtpOnAuaW5kZXhPZihfKSxjbGFzc05hbWU6XyxwbG90TWV0aG9kOncsY2RNb2R1bGU6Zn0pLGIuem9vbVNjYWxlJiZ2LnB1c2goIi4iK18pfX1tLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5pLWUuaX0pO3ZhciBrPWUucGxvdC5zZWxlY3RBbGwoImcubWxheWVyIikuZGF0YShtLGZ1bmN0aW9uKHQpe3JldHVybiB0LmNsYXNzTmFtZX0pO2lmKGsuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsZnVuY3Rpb24odCl7cmV0dXJuIHQuY2xhc3NOYW1lfSkuY2xhc3NlZCgibWxheWVyIiwhMCksay5leGl0KCkucmVtb3ZlKCksay5vcmRlcigpLGsuZWFjaChmdW5jdGlvbihyKXt2YXIgaT1uLnNlbGVjdCh0aGlzKSxsPXIuY2xhc3NOYW1lO3IucGxvdE1ldGhvZCh0LGUsci5jZE1vZHVsZSxpLGEsbyksInNjYXR0ZXJsYXllciIhPT1sJiYiYmFybGF5ZXIiIT09bCYmcy5zZXRDbGlwVXJsKGksZS5sYXllckNsaXBJZCl9KSxkLl9oYXMoInNjYXR0ZXJnbCIpJiYoYz1pLmdldE1vZHVsZSgic2NhdHRlcmdsIiksZj1sKHIsYylbMF0sYy5wbG90KHQsZSxmKSksIXQuX2NvbnRleHQuc3RhdGljUGxvdCYmKGUuX2hhc0NsaXBPbkF4aXNGYWxzZSYmKGUuY2xpcE9uQXhpc0ZhbHNlVHJhY2VzPWUucGxvdC5zZWxlY3RBbGwoIi5zY2F0dGVybGF5ZXIsIC5iYXJsYXllciIpLnNlbGVjdEFsbCgiLnRyYWNlIikpLHYubGVuZ3RoKSl7dmFyIE09ZS5wbG90LnNlbGVjdEFsbCh2LmpvaW4oIiwiKSkuc2VsZWN0QWxsKCIudHJhY2UiKTtlLnpvb21TY2FsZVB0cz1NLnNlbGVjdEFsbCgicGF0aC5wb2ludCIpLGUuem9vbVNjYWxlVHh0PU0uc2VsZWN0QWxsKCIudGV4dHBvaW50Iil9fWZ1bmN0aW9uIGcodCxlKXt2YXIgcj1lLnBsb3Rncm91cCxuPWUuaWQsaT11LmxheWVyVmFsdWUybGF5ZXJDbGFzc1tlLnhheGlzLmxheWVyXSxhPXUubGF5ZXJWYWx1ZTJsYXllckNsYXNzW2UueWF4aXMubGF5ZXJdLG89dC5fZnVsbExheW91dC5faGFzT25seUxhcmdlU3Bsb21zO2lmKGUubWFpbnBsb3Qpe3ZhciBzPWUubWFpbnBsb3RpbmZvLGw9cy5wbG90Z3JvdXAsaD1uKyIteCIsZD1uKyIteSI7ZS5ncmlkbGF5ZXI9cy5ncmlkbGF5ZXIsZS56ZXJvbGluZWxheWVyPXMuemVyb2xpbmVsYXllcixmKHMub3ZlcmxpbmVzQmVsb3csInBhdGgiLGgpLGYocy5vdmVybGluZXNCZWxvdywicGF0aCIsZCksZihzLm92ZXJheGVzQmVsb3csImciLGgpLGYocy5vdmVyYXhlc0JlbG93LCJnIixkKSxlLnBsb3Q9ZihzLm92ZXJwbG90LCJnIixuKSxmKHMub3ZlcmxpbmVzQWJvdmUsInBhdGgiLGgpLGYocy5vdmVybGluZXNBYm92ZSwicGF0aCIsZCksZihzLm92ZXJheGVzQWJvdmUsImciLGgpLGYocy5vdmVyYXhlc0Fib3ZlLCJnIixkKSxlLnhsaW5lcz1sLnNlbGVjdCgiLm92ZXJsaW5lcy0iK2kpLnNlbGVjdCgiLiIraCksZS55bGluZXM9bC5zZWxlY3QoIi5vdmVybGluZXMtIithKS5zZWxlY3QoIi4iK2QpLGUueGF4aXNsYXllcj1sLnNlbGVjdCgiLm92ZXJheGVzLSIraSkuc2VsZWN0KCIuIitoKSxlLnlheGlzbGF5ZXI9bC5zZWxlY3QoIi5vdmVyYXhlcy0iK2EpLnNlbGVjdCgiLiIrZCl9ZWxzZSBpZihvKWUucGxvdD1mKHIsImciLCJwbG90IiksZS54bGluZXM9ZihyLCJwYXRoIiwieGxpbmVzLWFib3ZlIiksZS55bGluZXM9ZihyLCJwYXRoIiwieWxpbmVzLWFib3ZlIiksZS54YXhpc2xheWVyPWYociwiZyIsInhheGlzbGF5ZXItYWJvdmUiKSxlLnlheGlzbGF5ZXI9ZihyLCJnIiwieWF4aXNsYXllci1hYm92ZSIpO2Vsc2V7dmFyIGc9ZihyLCJnIiwibGF5ZXItc3VicGxvdCIpO2Uuc2hhcGVsYXllcj1mKGcsImciLCJzaGFwZWxheWVyIiksZS5pbWFnZWxheWVyPWYoZywiZyIsImltYWdlbGF5ZXIiKSxlLmdyaWRsYXllcj1mKHIsImciLCJncmlkbGF5ZXIiKSxlLnplcm9saW5lbGF5ZXI9ZihyLCJnIiwiemVyb2xpbmVsYXllciIpLGYociwicGF0aCIsInhsaW5lcy1iZWxvdyIpLGYociwicGF0aCIsInlsaW5lcy1iZWxvdyIpLGUub3ZlcmxpbmVzQmVsb3c9ZihyLCJnIiwib3ZlcmxpbmVzLWJlbG93IiksZihyLCJnIiwieGF4aXNsYXllci1iZWxvdyIpLGYociwiZyIsInlheGlzbGF5ZXItYmVsb3ciKSxlLm92ZXJheGVzQmVsb3c9ZihyLCJnIiwib3ZlcmF4ZXMtYmVsb3ciKSxlLnBsb3Q9ZihyLCJnIiwicGxvdCIpLGUub3ZlcnBsb3Q9ZihyLCJnIiwib3ZlcnBsb3QiKSxlLnhsaW5lcz1mKHIsInBhdGgiLCJ4bGluZXMtYWJvdmUiKSxlLnlsaW5lcz1mKHIsInBhdGgiLCJ5bGluZXMtYWJvdmUiKSxlLm92ZXJsaW5lc0Fib3ZlPWYociwiZyIsIm92ZXJsaW5lcy1hYm92ZSIpLGYociwiZyIsInhheGlzbGF5ZXItYWJvdmUiKSxmKHIsImciLCJ5YXhpc2xheWVyLWFib3ZlIiksZS5vdmVyYXhlc0Fib3ZlPWYociwiZyIsIm92ZXJheGVzLWFib3ZlIiksZS54bGluZXM9ci5zZWxlY3QoIi54bGluZXMtIitpKSxlLnlsaW5lcz1yLnNlbGVjdCgiLnlsaW5lcy0iK2EpLGUueGF4aXNsYXllcj1yLnNlbGVjdCgiLnhheGlzbGF5ZXItIitpKSxlLnlheGlzbGF5ZXI9ci5zZWxlY3QoIi55YXhpc2xheWVyLSIrYSl9b3x8KHAoZS5ncmlkbGF5ZXIsImciLGUueGF4aXMuX2lkKSxwKGUuZ3JpZGxheWVyLCJnIixlLnlheGlzLl9pZCksZS5ncmlkbGF5ZXIuc2VsZWN0QWxsKCJnIikuc29ydChjLmlkU29ydCkpLGUueGxpbmVzLnN0eWxlKCJmaWxsIiwibm9uZSIpLmNsYXNzZWQoImNyaXNwIiwhMCksZS55bGluZXMuc3R5bGUoImZpbGwiLCJub25lIikuY2xhc3NlZCgiY3Jpc3AiLCEwKX1mdW5jdGlvbiBtKHQsZSl7aWYodCl7dmFyIHI9e307Zm9yKHZhciBpIGluIHQuZWFjaChmdW5jdGlvbih0KXtuLnNlbGVjdCh0aGlzKS5yZW1vdmUoKSx2KHQsZSksclt0XT0hMH0pLGUuX3Bsb3RzKWZvcih2YXIgYT1lLl9wbG90c1tpXS5vdmVybGF5c3x8W10sbz0wO288YS5sZW5ndGg7bysrKXt2YXIgcz1hW29dO3Jbcy5pZF0mJnMucGxvdC5zZWxlY3RBbGwoIi50cmFjZSIpLnJlbW92ZSgpfX19ZnVuY3Rpb24gdih0LGUpe2UuX2RyYWdnZXJzLnNlbGVjdEFsbCgiZy4iK3QpLnJlbW92ZSgpLGUuX2RlZnMuc2VsZWN0KCIjY2xpcCIrZS5fdWlkK3QrInBsb3QiKS5yZW1vdmUoKX1yLm5hbWU9ImNhcnRlc2lhbiIsci5hdHRyPVsieGF4aXMiLCJ5YXhpcyJdLHIuaWRSb290PVsieCIsInkiXSxyLmlkUmVnZXg9dS5pZFJlZ2V4LHIuYXR0clJlZ2V4PXUuYXR0clJlZ2V4LHIuYXR0cmlidXRlcz10KCIuL2F0dHJpYnV0ZXMiKSxyLmxheW91dEF0dHJpYnV0ZXM9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLHIuc3VwcGx5TGF5b3V0RGVmYXVsdHM9dCgiLi9sYXlvdXRfZGVmYXVsdHMiKSxyLnRyYW5zaXRpb25BeGVzPXQoIi4vdHJhbnNpdGlvbl9heGVzIiksci5maW5hbGl6ZVN1YnBsb3RzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLG89ZS5fc3VicGxvdHMscz1vLnhheGlzLGw9by55YXhpcyxoPW8uY2FydGVzaWFuLGY9aC5jb25jYXQoby5nbDJkfHxbXSkscD17fSxkPXt9O2ZvcihyPTA7cjxmLmxlbmd0aDtyKyspe3ZhciBnPWZbcl0uc3BsaXQoInkiKTtwW2dbMF1dPTEsZFsieSIrZ1sxXV09MX1mb3Iocj0wO3I8cy5sZW5ndGg7cisrKXBbbj1zW3JdXXx8KGk9KHRbYy5pZDJuYW1lKG4pXXx8e30pLmFuY2hvcix1LmlkUmVnZXgueS50ZXN0KGkpfHwoaT0ieSIpLGgucHVzaChuK2kpLGYucHVzaChuK2kpLGRbaV18fChkW2ldPTEsYS5wdXNoVW5pcXVlKGwsaSkpKTtmb3Iocj0wO3I8bC5sZW5ndGg7cisrKWRbaT1sW3JdXXx8KG49KHRbYy5pZDJuYW1lKGkpXXx8e30pLmFuY2hvcix1LmlkUmVnZXgueC50ZXN0KG4pfHwobj0ieCIpLGgucHVzaChuK2kpLGYucHVzaChuK2kpLHBbbl18fChwW25dPTEsYS5wdXNoVW5pcXVlKHMsbikpKTtpZighZi5sZW5ndGgpe2Zvcih2YXIgbSBpbiBuPSIiLGk9IiIsdCl7aWYodS5hdHRyUmVnZXgudGVzdChtKSkieCI9PT1tLmNoYXJBdCgwKT8oIW58fCttLnN1YnN0cig1KTwrbi5zdWJzdHIoNSkpJiYobj1tKTooIWl8fCttLnN1YnN0cig1KTwraS5zdWJzdHIoNSkpJiYoaT1tKX1uPW4/Yy5uYW1lMmlkKG4pOiJ4IixpPWk/Yy5uYW1lMmlkKGkpOiJ5IixzLnB1c2gobiksbC5wdXNoKGkpLGgucHVzaChuK2kpfX0sci5wbG90PWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGE9dC5fZnVsbExheW91dCxvPWEuX3N1YnBsb3RzLmNhcnRlc2lhbixzPXQuY2FsY2RhdGE7aWYobnVsbCE9PWUpe2lmKCFBcnJheS5pc0FycmF5KGUpKWZvcihlPVtdLGk9MDtpPHMubGVuZ3RoO2krKyllLnB1c2goaSk7Zm9yKGk9MDtpPG8ubGVuZ3RoO2krKyl7Zm9yKHZhciBsLGM9b1tpXSx1PWEuX3Bsb3RzW2NdLGg9W10sZj0wO2Y8cy5sZW5ndGg7ZisrKXt2YXIgcD1zW2ZdLGc9cFswXS50cmFjZTtnLnhheGlzK2cueWF4aXM9PT1jJiYoKC0xIT09ZS5pbmRleE9mKGcuaW5kZXgpfHxnLmNhcnBldCkmJihsJiZsWzBdLnRyYWNlLnhheGlzK2xbMF0udHJhY2UueWF4aXM9PT1jJiYtMSE9PVsidG9uZXh0eCIsInRvbmV4dHkiLCJ0b25leHQiXS5pbmRleE9mKGcuZmlsbCkmJi0xPT09aC5pbmRleE9mKGwpJiZoLnB1c2gobCksaC5wdXNoKHApKSxsPXApfWQodCx1LGgscixuKX19fSxyLmNsZWFuPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGEsbyxzPW4uX3Bsb3RzfHx7fSxsPWUuX3Bsb3RzfHx7fSx1PW4uX3N1YnBsb3RzfHx7fTtpZihuLl9oYXNPbmx5TGFyZ2VTcGxvbXMmJiFlLl9oYXNPbmx5TGFyZ2VTcGxvbXMpZm9yKG8gaW4gcykoaT1zW29dKS5wbG90Z3JvdXAmJmkucGxvdGdyb3VwLnJlbW92ZSgpO3ZhciBoPW4uX2hhcyYmbi5faGFzKCJnbCIpLGY9ZS5faGFzJiZlLl9oYXMoImdsIik7aWYoaCYmIWYpZm9yKG8gaW4gcykoaT1zW29dKS5fc2NlbmUmJmkuX3NjZW5lLmRlc3Ryb3koKTtpZih1LnhheGlzJiZ1LnlheGlzKXt2YXIgcD1jLmxpc3RJZHMoe19mdWxsTGF5b3V0Om59KTtmb3IoYT0wO2E8cC5sZW5ndGg7YSsrKXt2YXIgZD1wW2FdO2VbYy5pZDJuYW1lKGQpXXx8bi5faW5mb2xheWVyLnNlbGVjdEFsbCgiLmctIitkKyJ0aXRsZSIpLnJlbW92ZSgpfX12YXIgZz1uLl9oYXMmJm4uX2hhcygiY2FydGVzaWFuIikseT1lLl9oYXMmJmUuX2hhcygiY2FydGVzaWFuIik7aWYoZyYmIXkpbShuLl9jYXJ0ZXNpYW5sYXllci5zZWxlY3RBbGwoIi5zdWJwbG90Iiksbiksbi5fZGVmcy5zZWxlY3RBbGwoIi5heGVzY2xpcCIpLnJlbW92ZSgpLGRlbGV0ZSBuLl9heGlzQ29uc3RyYWludEdyb3VwcztlbHNlIGlmKHUuY2FydGVzaWFuKWZvcihhPTA7YTx1LmNhcnRlc2lhbi5sZW5ndGg7YSsrKXt2YXIgeD11LmNhcnRlc2lhblthXTtpZighbFt4XSl7dmFyIGI9Ii4iK3grIiwuIit4KyIteCwuIit4KyIteSI7bi5fY2FydGVzaWFubGF5ZXIuc2VsZWN0QWxsKGIpLnJlbW92ZSgpLHYoeCxuKX19fSxyLmRyYXdGcmFtZXdvcms9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dCxyPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj1bXSxuPVtdO2Zvcih2YXIgaSBpbiBlLl9wbG90cyl7dmFyIGE9ZS5fcGxvdHNbaV0sbz1hLnhheGlzLl9tYWluQXhpcyxzPWEueWF4aXMuX21haW5BeGlzLGw9by5faWQrcy5faWQ7bCE9PWkmJmUuX3Bsb3RzW2xdPyhhLm1haW5wbG90PWwsYS5tYWlucGxvdGluZm89ZS5fcGxvdHNbbF0sbi5wdXNoKGkpKTooci5wdXNoKGkpLGEubWFpbnBsb3Q9dm9pZCAwKX1yZXR1cm4gcj1yLmNvbmNhdChuKX0odCksaT1lLl9jYXJ0ZXNpYW5sYXllci5zZWxlY3RBbGwoIi5zdWJwbG90IikuZGF0YShyLGEuaWRlbnRpdHkpO2kuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsZnVuY3Rpb24odCl7cmV0dXJuInN1YnBsb3QgIit0fSksaS5vcmRlcigpLGkuZXhpdCgpLmNhbGwobSxlKSxpLmVhY2goZnVuY3Rpb24ocil7dmFyIGk9ZS5fcGxvdHNbcl07KGkucGxvdGdyb3VwPW4uc2VsZWN0KHRoaXMpLGkub3ZlcmxheXM9W10sZyh0LGkpLGkubWFpbnBsb3QpJiZlLl9wbG90c1tpLm1haW5wbG90XS5vdmVybGF5cy5wdXNoKGkpO2kuZHJhZ2xheWVyPWYoZS5fZHJhZ2dlcnMsImciLHIpfSl9LHIucmFuZ2VQbG90PWZ1bmN0aW9uKHQsZSxyKXtnKHQsZSksZCh0LGUsciksby5zdHlsZSh0KX0sci50b1NWRz1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0Ll9nbGltYWdlcyxyPW4uc2VsZWN0KHQpLnNlbGVjdEFsbCgiLnN2Zy1jb250YWluZXIiKTtyLmZpbHRlcihmdW5jdGlvbih0LGUpe3JldHVybiBlPT09ci5zaXplKCktMX0pLnNlbGVjdEFsbCgiLmdsLWNhbnZhcy1jb250ZXh0LCAuZ2wtY2FudmFzLWZvY3VzIikuZWFjaChmdW5jdGlvbigpe3ZhciB0PXRoaXMudG9EYXRhVVJMKCJpbWFnZS9wbmciKTtlLmFwcGVuZCgic3ZnOmltYWdlIikuYXR0cih7eG1sbnM6aC5zdmcsInhsaW5rOmhyZWYiOnQscHJlc2VydmVBc3BlY3RSYXRpbzoibm9uZSIseDowLHk6MCx3aWR0aDp0aGlzLndpZHRoLGhlaWdodDp0aGlzLmhlaWdodH0pfSl9LHIudXBkYXRlRng9dCgiLi9ncmFwaF9pbnRlcmFjdCIpLnVwZGF0ZUZ4fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NTgzLCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyI6NjYzLCIuLi8uLi9saWIiOjY4NCwiLi4vLi4vcmVnaXN0cnkiOjgxNywiLi4vZ2V0X2RhdGEiOjc2OCwiLi4vcGxvdHMiOjc5NSwiLi9hdHRyaWJ1dGVzIjo3MzAsIi4vYXhpc19pZHMiOjczNSwiLi9jb25zdGFudHMiOjczNywiLi9ncmFwaF9pbnRlcmFjdCI6NzQxLCIuL2xheW91dF9hdHRyaWJ1dGVzIjo3NDQsIi4vbGF5b3V0X2RlZmF1bHRzIjo3NDUsIi4vdHJhbnNpdGlvbl9heGVzIjo3NTQsZDM6MTQ3fV0sNzQ0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2ZvbnRfYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlcyIpLmRhc2gsbz10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxzPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKS50ZW1wbGF0ZWRBcnJheSxsPXQoIi4vY29uc3RhbnRzIik7ZS5leHBvcnRzPXt2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixlZGl0VHlwZToicGxvdCJ9LGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDppLmRlZmF1bHRMaW5lLGVkaXRUeXBlOiJ0aWNrcyJ9LHRpdGxlOnt2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJ0aWNrcyJ9LHRpdGxlZm9udDpuKHtlZGl0VHlwZToidGlja3MifSksdHlwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiLSIsImxpbmVhciIsImxvZyIsImRhdGUiLCJjYXRlZ29yeSJdLGRmbHQ6Ii0iLGVkaXRUeXBlOiJjYWxjIixfbm9UZW1wbGF0aW5nOiEwfSxhdXRvcmFuZ2U6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbITAsITEsInJldmVyc2VkIl0sZGZsdDohMCxlZGl0VHlwZToiY2FsYyIsaW1wbGllZEVkaXRzOnsicmFuZ2VbMF0iOnZvaWQgMCwicmFuZ2VbMV0iOnZvaWQgMH19LHJhbmdlbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibm9ybWFsIiwidG96ZXJvIiwibm9ubmVnYXRpdmUiXSxkZmx0OiJub3JtYWwiLGVkaXRUeXBlOiJwbG90In0scmFuZ2U6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGl0ZW1zOlt7dmFsVHlwZToiYW55IixlZGl0VHlwZToiYXhyYW5nZSIsaW1wbGllZEVkaXRzOnsiXmF1dG9yYW5nZSI6ITF9fSx7dmFsVHlwZToiYW55IixlZGl0VHlwZToiYXhyYW5nZSIsaW1wbGllZEVkaXRzOnsiXmF1dG9yYW5nZSI6ITF9fV0sZWRpdFR5cGU6ImF4cmFuZ2UiLGltcGxpZWRFZGl0czp7YXV0b3JhbmdlOiExfX0sZml4ZWRyYW5nZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToiY2FsYyJ9LHNjYWxlYW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6W2wuaWRSZWdleC54LnRvU3RyaW5nKCksbC5pZFJlZ2V4LnkudG9TdHJpbmcoKV0sZWRpdFR5cGU6InBsb3QifSxzY2FsZXJhdGlvOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZToicGxvdCJ9LGNvbnN0cmFpbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsicmFuZ2UiLCJkb21haW4iXSxkZmx0OiJyYW5nZSIsZWRpdFR5cGU6InBsb3QifSxjb25zdHJhaW50b3dhcmQ6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImxlZnQiLCJjZW50ZXIiLCJyaWdodCIsInRvcCIsIm1pZGRsZSIsImJvdHRvbSJdLGVkaXRUeXBlOiJwbG90In0sdGlja21vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImF1dG8iLCJsaW5lYXIiLCJhcnJheSJdLGVkaXRUeXBlOiJ0aWNrcyIsaW1wbGllZEVkaXRzOnt0aWNrMDp2b2lkIDAsZHRpY2s6dm9pZCAwfX0sbnRpY2tzOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6InRpY2tzIn0sdGljazA6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6InRpY2tzIixpbXBsaWVkRWRpdHM6e3RpY2ttb2RlOiJsaW5lYXIifX0sZHRpY2s6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6InRpY2tzIixpbXBsaWVkRWRpdHM6e3RpY2ttb2RlOiJsaW5lYXIifX0sdGlja3ZhbHM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJ0aWNrcyJ9LHRpY2t0ZXh0Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToidGlja3MifSx0aWNrczp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsib3V0c2lkZSIsImluc2lkZSIsIiJdLGVkaXRUeXBlOiJ0aWNrcyJ9LG1pcnJvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlshMCwidGlja3MiLCExLCJhbGwiLCJhbGx0aWNrcyJdLGRmbHQ6ITEsZWRpdFR5cGU6InRpY2tzK2xheW91dHN0eWxlIn0sdGlja2xlbjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjUsZWRpdFR5cGU6InRpY2tzIn0sdGlja3dpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZToidGlja3MifSx0aWNrY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmkuZGVmYXVsdExpbmUsZWRpdFR5cGU6InRpY2tzIn0sc2hvd3RpY2tsYWJlbHM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6InRpY2tzIn0sYXV0b21hcmdpbjp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToidGlja3MifSxzaG93c3Bpa2VzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJtb2RlYmFyIn0sc3Bpa2Vjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6bnVsbCxlZGl0VHlwZToibm9uZSJ9LHNwaWtldGhpY2tuZXNzOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MyxlZGl0VHlwZToibm9uZSJ9LHNwaWtlZGFzaDpvKHt9LGEse2RmbHQ6ImRhc2giLGVkaXRUeXBlOiJub25lIn0pLHNwaWtlbW9kZTp7dmFsVHlwZToiZmxhZ2xpc3QiLGZsYWdzOlsidG9heGlzIiwiYWNyb3NzIiwibWFya2VyIl0sZGZsdDoidG9heGlzIixlZGl0VHlwZToibm9uZSJ9LHNwaWtlc25hcDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZGF0YSIsImN1cnNvciJdLGRmbHQ6ImRhdGEiLGVkaXRUeXBlOiJub25lIn0sdGlja2ZvbnQ6bih7ZWRpdFR5cGU6InRpY2tzIn0pLHRpY2thbmdsZTp7dmFsVHlwZToiYW5nbGUiLGRmbHQ6ImF1dG8iLGVkaXRUeXBlOiJ0aWNrcyJ9LHRpY2twcmVmaXg6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToidGlja3MifSxzaG93dGlja3ByZWZpeDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYWxsIiwiZmlyc3QiLCJsYXN0Iiwibm9uZSJdLGRmbHQ6ImFsbCIsZWRpdFR5cGU6InRpY2tzIn0sdGlja3N1ZmZpeDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJ0aWNrcyJ9LHNob3d0aWNrc3VmZml4Ont2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhbGwiLCJmaXJzdCIsImxhc3QiLCJub25lIl0sZGZsdDoiYWxsIixlZGl0VHlwZToidGlja3MifSxzaG93ZXhwb25lbnQ6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImFsbCIsImZpcnN0IiwibGFzdCIsIm5vbmUiXSxkZmx0OiJhbGwiLGVkaXRUeXBlOiJ0aWNrcyJ9LGV4cG9uZW50Zm9ybWF0Ont2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJub25lIiwiZSIsIkUiLCJwb3dlciIsIlNJIiwiQiJdLGRmbHQ6IkIiLGVkaXRUeXBlOiJ0aWNrcyJ9LHNlcGFyYXRldGhvdXNhbmRzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJ0aWNrcyJ9LHRpY2tmb3JtYXQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToidGlja3MifSx0aWNrZm9ybWF0c3RvcHM6cygidGlja2Zvcm1hdHN0b3AiLHtlbmFibGVkOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJ0aWNrcyJ9LGR0aWNrcmFuZ2U6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGl0ZW1zOlt7dmFsVHlwZToiYW55IixlZGl0VHlwZToidGlja3MifSx7dmFsVHlwZToiYW55IixlZGl0VHlwZToidGlja3MifV0sZWRpdFR5cGU6InRpY2tzIn0sdmFsdWU6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToidGlja3MifSxlZGl0VHlwZToidGlja3MifSksaG92ZXJmb3JtYXQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToibm9uZSJ9LHNob3dsaW5lOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJsYXlvdXRzdHlsZSJ9LGxpbmVjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6aS5kZWZhdWx0TGluZSxlZGl0VHlwZToibGF5b3V0c3R5bGUifSxsaW5ld2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxLGVkaXRUeXBlOiJ0aWNrcytsYXlvdXRzdHlsZSJ9LHNob3dncmlkOnt2YWxUeXBlOiJib29sZWFuIixlZGl0VHlwZToidGlja3MifSxncmlkY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmkubGlnaHRMaW5lLGVkaXRUeXBlOiJ0aWNrcyJ9LGdyaWR3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEsZWRpdFR5cGU6InRpY2tzIn0semVyb2xpbmU6e3ZhbFR5cGU6ImJvb2xlYW4iLGVkaXRUeXBlOiJ0aWNrcyJ9LHplcm9saW5lY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmkuZGVmYXVsdExpbmUsZWRpdFR5cGU6InRpY2tzIn0semVyb2xpbmV3aWR0aDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjEsZWRpdFR5cGU6InRpY2tzIn0sYW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJmcmVlIixsLmlkUmVnZXgueC50b1N0cmluZygpLGwuaWRSZWdleC55LnRvU3RyaW5nKCldLGVkaXRUeXBlOiJwbG90In0sc2lkZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidG9wIiwiYm90dG9tIiwibGVmdCIsInJpZ2h0Il0sZWRpdFR5cGU6InBsb3QifSxvdmVybGF5aW5nOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJmcmVlIixsLmlkUmVnZXgueC50b1N0cmluZygpLGwuaWRSZWdleC55LnRvU3RyaW5nKCldLGVkaXRUeXBlOiJwbG90In0sbGF5ZXI6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImFib3ZlIHRyYWNlcyIsImJlbG93IHRyYWNlcyJdLGRmbHQ6ImFib3ZlIHRyYWNlcyIsZWRpdFR5cGU6InBsb3QifSxkb21haW46e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGl0ZW1zOlt7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxlZGl0VHlwZToicGxvdCJ9LHt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGVkaXRUeXBlOiJwbG90In1dLGRmbHQ6WzAsMV0sZWRpdFR5cGU6InBsb3QifSxwb3NpdGlvbjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjAsZWRpdFR5cGU6InBsb3QifSxjYXRlZ29yeW9yZGVyOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0cmFjZSIsImNhdGVnb3J5IGFzY2VuZGluZyIsImNhdGVnb3J5IGRlc2NlbmRpbmciLCJhcnJheSJdLGRmbHQ6InRyYWNlIixlZGl0VHlwZToiY2FsYyJ9LGNhdGVnb3J5YXJyYXk6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMiLF9kZXByZWNhdGVkOnthdXRvdGljazp7dmFsVHlwZToiYm9vbGVhbiIsZWRpdFR5cGU6InRpY2tzIn19fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiOjU1NywiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nL2F0dHJpYnV0ZXMiOjU4MiwiLi4vLi4vbGliL2V4dGVuZCI6NjczLCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo3MjIsIi4uL2ZvbnRfYXR0cmlidXRlcyI6NzU4LCIuL2NvbnN0YW50cyI6NzM3fV0sNzQ1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3JlZ2lzdHJ5IiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxvPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKSxzPXQoIi4uL2xheW91dF9hdHRyaWJ1dGVzIiksbD10KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksYz10KCIuL3R5cGVfZGVmYXVsdHMiKSx1PXQoIi4vYXhpc19kZWZhdWx0cyIpLGg9dCgiLi9jb25zdHJhaW50X2RlZmF1bHRzIiksZj10KCIuL3Bvc2l0aW9uX2RlZmF1bHRzIikscD10KCIuL2F4aXNfaWRzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgZCxnPXt9LG09e30sdj17fSx5PXt9O2ZvcihkPTA7ZDxyLmxlbmd0aDtkKyspe3ZhciB4PXJbZF07aWYobi50cmFjZUlzKHgsImNhcnRlc2lhbiIpfHxuLnRyYWNlSXMoeCwiZ2wyZCIpKXt2YXIgYj1wLmlkMm5hbWUoeC54YXhpcyksXz1wLmlkMm5hbWUoeC55YXhpcyk7aWYobi50cmFjZUlzKHgsImNhcnBldCIpJiYoImNhcnBldCIhPT14LnR5cGV8fHguX2NoZWF0ZXIpfHxiJiYobVtiXT0xKSwiY2FycGV0Ij09PXgudHlwZSYmeC5fY2hlYXRlciYmYiYmKGdbYl09MSksbi50cmFjZUlzKHgsIjJkTWFwIikmJih2W2JdPSEwLHZbX109ITApLG4udHJhY2VJcyh4LCJvcmllbnRlZCIpKXlbImgiPT09eC5vcmllbnRhdGlvbj9fOmJdPSEwfX12YXIgdz1lLl9zdWJwbG90cyxrPXcueGF4aXMsTT13LnlheGlzLEE9aS5zaW1wbGVNYXAoayxwLmlkMm5hbWUpLFQ9aS5zaW1wbGVNYXAoTSxwLmlkMm5hbWUpLFM9QS5jb25jYXQoVCksRT1hLmJhY2tncm91bmQ7ay5sZW5ndGgmJk0ubGVuZ3RoJiYoRT1pLmNvZXJjZSh0LGUscywicGxvdF9iZ2NvbG9yIikpO3ZhciBDLEwseixQLEk9YS5jb21iaW5lKEUsZS5wYXBlcl9iZ2NvbG9yKTtmdW5jdGlvbiBPKHQsZSl7cmV0dXJuIGkuY29lcmNlKHosUCxsLHQsZSl9ZnVuY3Rpb24gRCh0LGUpe3JldHVybiBpLmNvZXJjZTIoeixQLGwsdCxlKX1mdW5jdGlvbiBSKHQpe3JldHVybiJ4Ij09PXQ/TTprfXZhciBCPXt4OlIoIngiKSx5OlIoInkiKX07ZnVuY3Rpb24gRihlLHIpe2Zvcih2YXIgbj0ieCI9PT1lP0E6VCxpPVtdLGE9MDthPG4ubGVuZ3RoO2ErKyl7dmFyIG89blthXTtvPT09cnx8KHRbb118fHt9KS5vdmVybGF5aW5nfHxpLnB1c2gocC5uYW1lMmlkKG8pKX1yZXR1cm4gaX1mb3IoZD0wO2Q8Uy5sZW5ndGg7ZCsrKXtMPShDPVNbZF0pLmNoYXJBdCgwKSxpLmlzUGxhaW5PYmplY3QodFtDXSl8fCh0W0NdPXt9KSx6PXRbQ10sUD1vLm5ld0NvbnRhaW5lcihlLEMsTCsiYXhpcyIpLGMoeixQLE8scixDKTt2YXIgTj1GKEwsQyksaj17bGV0dGVyOkwsZm9udDplLmZvbnQsb3V0ZXJUaWNrczp2W0NdLHNob3dHcmlkOiF5W0NdLGRhdGE6cixiZ0NvbG9yOkksY2FsZW5kYXI6ZS5jYWxlbmRhcixhdXRvbWFyZ2luOiEwLGNoZWF0ZXJvbmx5OiJ4Ij09PUwmJmdbQ10mJiFtW0NdfTt1KHosUCxPLGosZSk7dmFyIFY9RCgic3Bpa2Vjb2xvciIpLFU9RCgic3Bpa2V0aGlja25lc3MiKSxxPUQoInNwaWtlZGFzaCIpLEg9RCgic3Bpa2Vtb2RlIiksRz1EKCJzcGlrZXNuYXAiKTtPKCJzaG93c3Bpa2VzIiwhIShWfHxVfHxxfHxIfHxHKSl8fChkZWxldGUgUC5zcGlrZWNvbG9yLGRlbGV0ZSBQLnNwaWtldGhpY2tuZXNzLGRlbGV0ZSBQLnNwaWtlZGFzaCxkZWxldGUgUC5zcGlrZW1vZGUsZGVsZXRlIFAuc3Bpa2VzbmFwKTt2YXIgVz17bGV0dGVyOkwsY291bnRlckF4ZXM6QltMXSxvdmVybGF5YWJsZUF4ZXM6TixncmlkOmUuZ3JpZH07Zih6LFAsTyxXKSxQLl9pbnB1dD16fXZhciBZPW4uZ2V0Q29tcG9uZW50TWV0aG9kKCJyYW5nZXNsaWRlciIsImhhbmRsZURlZmF1bHRzIiksWD1uLmdldENvbXBvbmVudE1ldGhvZCgicmFuZ2VzZWxlY3RvciIsImhhbmRsZURlZmF1bHRzIik7Zm9yKGQ9MDtkPEEubGVuZ3RoO2QrKylDPUFbZF0sej10W0NdLFA9ZVtDXSxZKHQsZSxDKSwiZGF0ZSI9PT1QLnR5cGUmJlgoeixQLGUsVCxQLmNhbGVuZGFyKSxPKCJmaXhlZHJhbmdlIik7Zm9yKGQ9MDtkPFQubGVuZ3RoO2QrKyl7Qz1UW2RdLHo9dFtDXSxQPWVbQ107dmFyIFo9ZVtwLmlkMm5hbWUoUC5hbmNob3IpXTtPKCJmaXhlZHJhbmdlIixaJiZaLnJhbmdlc2xpZGVyJiZaLnJhbmdlc2xpZGVyLnZpc2libGUpfWUuX2F4aXNDb25zdHJhaW50R3JvdXBzPVtdO3ZhciAkPUIueC5jb25jYXQoQi55KTtmb3IoZD0wO2Q8Uy5sZW5ndGg7ZCsrKUw9KEM9U1tkXSkuY2hhckF0KDApLHo9dFtDXSxQPWVbQ10saCh6LFAsTywkLGUpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo1NTgsIi4uLy4uL2xpYiI6Njg0LCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo3MjIsIi4uLy4uL3JlZ2lzdHJ5Ijo4MTcsIi4uL2xheW91dF9hdHRyaWJ1dGVzIjo3ODYsIi4vYXhpc19kZWZhdWx0cyI6NzM0LCIuL2F4aXNfaWRzIjo3MzUsIi4vY29uc3RyYWludF9kZWZhdWx0cyI6NzM4LCIuL2xheW91dF9hdHRyaWJ1dGVzIjo3NDQsIi4vcG9zaXRpb25fZGVmYXVsdHMiOjc0NywiLi90eXBlX2RlZmF1bHRzIjo3NTV9XSw3NDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgidGlueWNvbG9yMiIpLm1peCxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyIpLmxpZ2h0RnJhY3Rpb24sYT10KCIuLi8uLi9saWIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyl7dmFyIHM9KG89b3x8e30pLmRmbHRDb2xvcjtmdW5jdGlvbiBsKHIsbil7cmV0dXJuIGEuY29lcmNlMih0LGUsby5hdHRyaWJ1dGVzLHIsbil9dmFyIGM9bCgibGluZWNvbG9yIixzKSx1PWwoImxpbmV3aWR0aCIpO3IoInNob3dsaW5lIixvLnNob3dMaW5lfHwhIWN8fCEhdSl8fChkZWxldGUgZS5saW5lY29sb3IsZGVsZXRlIGUubGluZXdpZHRoKTt2YXIgaD1sKCJncmlkY29sb3IiLG4ocyxvLmJnQ29sb3Isby5ibGVuZHx8aSkudG9SZ2JTdHJpbmcoKSksZj1sKCJncmlkd2lkdGgiKTtpZihyKCJzaG93Z3JpZCIsby5zaG93R3JpZHx8ISFofHwhIWYpfHwoZGVsZXRlIGUuZ3JpZGNvbG9yLGRlbGV0ZSBlLmdyaWR3aWR0aCksIW8ubm9aZXJvTGluZSl7dmFyIHA9bCgiemVyb2xpbmVjb2xvciIscyksZD1sKCJ6ZXJvbGluZXdpZHRoIik7cigiemVyb2xpbmUiLG8uc2hvd0dyaWR8fCEhcHx8ISFkKXx8KGRlbGV0ZSBlLnplcm9saW5lY29sb3IsZGVsZXRlIGUuemVyb2xpbmV3aWR0aCl9fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiOjU1NywiLi4vLi4vbGliIjo2ODQsdGlueWNvbG9yMjo0OTl9XSw3NDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXt2YXIgbyxzLGwsYyx1PWEuY291bnRlckF4ZXN8fFtdLGg9YS5vdmVybGF5YWJsZUF4ZXN8fFtdLGY9YS5sZXR0ZXIscD1hLmdyaWQ7cCYmKHM9cC5fZG9tYWluc1tmXVtwLl9heGlzTWFwW2UuX2lkXV0sbz1wLl9hbmNob3JzW2UuX2lkXSxzJiYobD1wW2YrInNpZGUiXS5zcGxpdCgiICIpWzBdLGM9cC5kb21haW5bZl1bInJpZ2h0Ij09PWx8fCJ0b3AiPT09bD8xOjBdKSkscz1zfHxbMCwxXSxvPW98fChuKHQucG9zaXRpb24pPyJmcmVlIjp1WzBdfHwiZnJlZSIpLGw9bHx8KCJ4Ij09PWY/ImJvdHRvbSI6ImxlZnQiKSxjPWN8fDAsImZyZWUiPT09aS5jb2VyY2UodCxlLHthbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImZyZWUiXS5jb25jYXQodSksZGZsdDpvfX0sImFuY2hvciIpJiZyKCJwb3NpdGlvbiIsYyksaS5jb2VyY2UodCxlLHtzaWRlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6IngiPT09Zj9bImJvdHRvbSIsInRvcCJdOlsibGVmdCIsInJpZ2h0Il0sZGZsdDpsfX0sInNpZGUiKTt2YXIgZD0hMTtpZihoLmxlbmd0aCYmKGQ9aS5jb2VyY2UodCxlLHtvdmVybGF5aW5nOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyExXS5jb25jYXQoaCksZGZsdDohMX19LCJvdmVybGF5aW5nIikpLCFkKXt2YXIgZz1yKCJkb21haW4iLHMpO2dbMF0+Z1sxXS0uMDEmJihlLmRvbWFpbj1zKSxpLm5vbmVPckFsbCh0LmRvbWFpbixlLmRvbWFpbixzKX1yZXR1cm4gcigibGF5ZXIiKSxlfX0seyIuLi8uLi9saWIiOjY4NCwiZmFzdC1pc251bWVyaWMiOjIxNH1dLDc0ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50IikuRlJPTV9CTDtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZvaWQgMD09PXImJihyPW5bdC5jb25zdHJhaW50b3dhcmR8fCJjZW50ZXIiXSk7dmFyIGk9W3QucjJsKHQucmFuZ2VbMF0pLHQucjJsKHQucmFuZ2VbMV0pXSxhPWlbMF0rKGlbMV0taVswXSkqcjt0LnJhbmdlPXQuX2lucHV0LnJhbmdlPVt0LmwycihhKyhpWzBdLWEpKmUpLHQubDJyKGErKGlbMV0tYSkqZSldfX0seyIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50Ijo2NTZ9XSw3NDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgicG9seWJvb2xqcyIpLGk9dCgiLi4vLi4vcmVnaXN0cnkiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSxzPXQoIi4uLy4uL2xpYi9wb2x5Z29uIiksbD10KCIuLi8uLi9saWIvdGhyb3R0bGUiKSxjPXQoIi4uLy4uL2NvbXBvbmVudHMvZngvaGVscGVycyIpLm1ha2VFdmVudERhdGEsdT10KCIuL2F4aXNfaWRzIikuZ2V0RnJvbUlkLGg9dCgiLi4vc29ydF9tb2R1bGVzIikuc29ydE1vZHVsZXMsZj10KCIuL2NvbnN0YW50cyIpLHA9Zi5NSU5TRUxFQ1QsZD1zLmZpbHRlcixnPXMudGVzdGVyLG09cy5tdWx0aXRlc3RlcjtmdW5jdGlvbiB2KHQpe3JldHVybiB0Ll9pZH1mdW5jdGlvbiB5KHQsZSxyKXt2YXIgbixhLG8scztpZihyKXt2YXIgbD1yLnBvaW50c3x8W107Zm9yKG49MDtuPGUubGVuZ3RoO24rKykocz1lW25dLmNkWzBdLnRyYWNlKS5zZWxlY3RlZHBvaW50cz1bXSxzLl9pbnB1dC5zZWxlY3RlZHBvaW50cz1bXTtmb3Iobj0wO248bC5sZW5ndGg7bisrKXt2YXIgYz1sW25dLHU9Yy5kYXRhLGY9Yy5mdWxsRGF0YTtjLnBvaW50SW5kaWNlcz8oW10ucHVzaC5hcHBseSh1LnNlbGVjdGVkcG9pbnRzLGMucG9pbnRJbmRpY2VzKSxbXS5wdXNoLmFwcGx5KGYuc2VsZWN0ZWRwb2ludHMsYy5wb2ludEluZGljZXMpKToodS5zZWxlY3RlZHBvaW50cy5wdXNoKGMucG9pbnRJbmRleCksZi5zZWxlY3RlZHBvaW50cy5wdXNoKGMucG9pbnRJbmRleCkpfX1lbHNlIGZvcihuPTA7bjxlLmxlbmd0aDtuKyspZGVsZXRlKHM9ZVtuXS5jZFswXS50cmFjZSkuc2VsZWN0ZWRwb2ludHMsZGVsZXRlIHMuX2lucHV0LnNlbGVjdGVkcG9pbnRzO3ZhciBwPXt9O2ZvcihuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciBkPShvPWVbbl0pLl9tb2R1bGUubmFtZTtwW2RdP3BbZF0ucHVzaChvKTpwW2RdPVtvXX12YXIgZz1PYmplY3Qua2V5cyhwKS5zb3J0KGgpO2ZvcihuPTA7bjxnLmxlbmd0aDtuKyspe3ZhciBtPXBbZ1tuXV0sdj1tLmxlbmd0aCx5PW1bMF0seD15LmNkWzBdLnRyYWNlLGI9eS5fbW9kdWxlLF89Yi5zdHlsZU9uU2VsZWN0fHxiLnN0eWxlO2lmKGkudHJhY2VJcyh4LCJyZWdsIikpe3ZhciB3PW5ldyBBcnJheSh2KTtmb3IoYT0wO2E8djthKyspd1thXT1tW2FdLmNkO18odCx3KX1lbHNlIGZvcihhPTA7YTx2O2ErKylfKHQsbVthXS5jZCl9fWZ1bmN0aW9uIHgodCxlKXtpZihBcnJheS5pc0FycmF5KHQpKWZvcih2YXIgcj1lLmNkLG49ZS5jZFswXS50cmFjZSxpPTA7aTx0Lmxlbmd0aDtpKyspdFtpXT1jKHRbaV0sbixyKTtyZXR1cm4gdH1mdW5jdGlvbiBiKHQpe3Quc2VsZWN0QWxsKCIuc2VsZWN0LW91dGxpbmUiKS5yZW1vdmUoKX1lLmV4cG9ydHM9e3ByZXBTZWxlY3Q6ZnVuY3Rpb24odCxlLHIsaSxzKXt2YXIgYyxoLF8sdyxrLE0sQSxULFMsRT1pLmdkLEM9RS5fZnVsbExheW91dCxMPUMuX3pvb21sYXllcix6PWkuZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxQPWkucGxvdGluZm8sST1QLnhheGlzLl9vZmZzZXQsTz1QLnlheGlzLl9vZmZzZXQsRD1lLXoubGVmdCxSPXItei50b3AsQj1ELEY9UixOPSJNIitEKyIsIitSLGo9aS54YXhlc1swXS5fbGVuZ3RoLFY9aS55YXhlc1swXS5fbGVuZ3RoLFU9aS54YXhlcy5tYXAodikscT1pLnlheGVzLm1hcCh2KSxIPWkueGF4ZXMuY29uY2F0KGkueWF4ZXMpLEc9dC5hbHRLZXksVz1DLl9sYXN0U2VsZWN0ZWRTdWJwbG90JiZDLl9sYXN0U2VsZWN0ZWRTdWJwbG90PT09UC5pZDtXJiYodC5zaGlmdEtleXx8dC5hbHRLZXkpJiZQLnNlbGVjdGlvbiYmUC5zZWxlY3Rpb24ucG9seWdvbnMmJiFpLnBvbHlnb25zPyhpLnBvbHlnb25zPVAuc2VsZWN0aW9uLnBvbHlnb25zLGkubWVyZ2VkUG9seWdvbnM9UC5zZWxlY3Rpb24ubWVyZ2VkUG9seWdvbnMpOighdC5zaGlmdEtleSYmIXQuYWx0S2V5fHwodC5zaGlmdEtleXx8dC5hbHRLZXkpJiYhUC5zZWxlY3Rpb24pJiYoUC5zZWxlY3Rpb249e30sUC5zZWxlY3Rpb24ucG9seWdvbnM9aS5wb2x5Z29ucz1bXSxQLnNlbGVjdGlvbi5tZXJnZWRQb2x5Z29ucz1pLm1lcmdlZFBvbHlnb25zPVtdKSxXfHwoYihMKSxDLl9sYXN0U2VsZWN0ZWRTdWJwbG90PVAuaWQpLCJsYXNzbyI9PT1zJiYoYz1kKFtbRCxSXV0sZi5CRU5EUFgpKTt2YXIgWT1MLnNlbGVjdEFsbCgicGF0aC5zZWxlY3Qtb3V0bGluZS0iK1AuaWQpLmRhdGEoWzEsMl0pO1kuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsZnVuY3Rpb24odCl7cmV0dXJuInNlbGVjdC1vdXRsaW5lIHNlbGVjdC1vdXRsaW5lLSIrdCsiIHNlbGVjdC1vdXRsaW5lLSIrUC5pZH0pLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK0krIiwgIitPKyIpIikuYXR0cigiZCIsTisiWiIpO3ZhciBYLFo9TC5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsInpvb21ib3gtY29ybmVycyIpLnN0eWxlKHtmaWxsOmEuYmFja2dyb3VuZCxzdHJva2U6YS5kZWZhdWx0TGluZSwic3Ryb2tlLXdpZHRoIjoxfSkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrSSsiLCAiK08rIikiKS5hdHRyKCJkIiwiTTAsMFoiKSwkPVtdLEo9Qy5fdWlkK2YuU0VMRUNUSUQsSz1bXTtmb3Ioaz0wO2s8RS5jYWxjZGF0YS5sZW5ndGg7aysrKWlmKCEwPT09KEE9KE09RS5jYWxjZGF0YVtrXSlbMF0udHJhY2UpLnZpc2libGUmJkEuX21vZHVsZSYmQS5fbW9kdWxlLnNlbGVjdFBvaW50cylpZihpLnN1YnBsb3QpQS5zdWJwbG90IT09aS5zdWJwbG90JiZBLmdlbyE9PWkuc3VicGxvdHx8JC5wdXNoKHtfbW9kdWxlOkEuX21vZHVsZSxjZDpNLHhheGlzOmkueGF4ZXNbMF0seWF4aXM6aS55YXhlc1swXX0pO2Vsc2UgaWYoInNwbG9tIj09PUEudHlwZSYmQS5feGF4ZXNbVVswXV0mJkEuX3lheGVzW3FbMF1dKSQucHVzaCh7X21vZHVsZTpBLl9tb2R1bGUsY2Q6TSx4YXhpczppLnhheGVzWzBdLHlheGlzOmkueWF4ZXNbMF19KTtlbHNle2lmKC0xPT09VS5pbmRleE9mKEEueGF4aXMpKWNvbnRpbnVlO2lmKC0xPT09cS5pbmRleE9mKEEueWF4aXMpKWNvbnRpbnVlOyQucHVzaCh7X21vZHVsZTpBLl9tb2R1bGUsY2Q6TSx4YXhpczp1KEUsQS54YXhpcykseWF4aXM6dShFLEEueWF4aXMpfSl9ZnVuY3Rpb24gUSh0KXt2YXIgZT0ieSI9PT10Ll9pZC5jaGFyQXQoMCk/MTowO3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gdC5wMmQocltlXSl9fWZ1bmN0aW9uIHR0KHQsZSl7cmV0dXJuIHQtZX1YPVAuZmlsbFJhbmdlSXRlbXM/UC5maWxsUmFuZ2VJdGVtczoic2VsZWN0Ij09PXM/ZnVuY3Rpb24odCxlKXt2YXIgcj10LnJhbmdlPXt9O2ZvcihrPTA7azxILmxlbmd0aDtrKyspe3ZhciBuPUhba10saT1uLl9pZC5jaGFyQXQoMCk7cltuLl9pZF09W24ucDJkKGVbaSsibWluIl0pLG4ucDJkKGVbaSsibWF4Il0pXS5zb3J0KHR0KX19OmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10Lmxhc3NvUG9pbnRzPXt9O2ZvcihrPTA7azxILmxlbmd0aDtrKyspe3ZhciBpPUhba107bltpLl9pZF09ci5maWx0ZXJlZC5tYXAoUShpKSl9fSxpLm1vdmVGbj1mdW5jdGlvbih0LGUpe0I9TWF0aC5tYXgoMCxNYXRoLm1pbihqLHQrRCkpLEY9TWF0aC5tYXgoMCxNYXRoLm1pbihWLGUrUikpO3ZhciByPU1hdGguYWJzKEItRCksYT1NYXRoLmFicyhGLVIpO2lmKCJzZWxlY3QiPT09cyl7dmFyIG89Qy5zZWxlY3RkaXJlY3Rpb247ImgiPT09KG89ImFueSI9PT1DLnNlbGVjdGRpcmVjdGlvbj9hPE1hdGgubWluKC42KnIscCk/ImgiOnI8TWF0aC5taW4oLjYqYSxwKT8idiI6ImQiOkMuc2VsZWN0ZGlyZWN0aW9uKT8oKHc9W1tELDBdLFtELFZdLFtCLFZdLFtCLDBdXSkueG1pbj1NYXRoLm1pbihELEIpLHcueG1heD1NYXRoLm1heChELEIpLHcueW1pbj1NYXRoLm1pbigwLFYpLHcueW1heD1NYXRoLm1heCgwLFYpLFouYXR0cigiZCIsIk0iK3cueG1pbisiLCIrKFItcCkrImgtNHYiKzIqcCsiaDRaTSIrKHcueG1heC0xKSsiLCIrKFItcCkrImg0diIrMipwKyJoLTRaIikpOiJ2Ij09PW8/KCh3PVtbMCxSXSxbMCxGXSxbaixGXSxbaixSXV0pLnhtaW49TWF0aC5taW4oMCxqKSx3LnhtYXg9TWF0aC5tYXgoMCxqKSx3LnltaW49TWF0aC5taW4oUixGKSx3LnltYXg9TWF0aC5tYXgoUixGKSxaLmF0dHIoImQiLCJNIisoRC1wKSsiLCIrdy55bWluKyJ2LTRoIisyKnArInY0Wk0iKyhELXApKyIsIisody55bWF4LTEpKyJ2NGgiKzIqcCsidi00WiIpKToiZCI9PT1vJiYoKHc9W1tELFJdLFtELEZdLFtCLEZdLFtCLFJdXSkueG1pbj1NYXRoLm1pbihELEIpLHcueG1heD1NYXRoLm1heChELEIpLHcueW1pbj1NYXRoLm1pbihSLEYpLHcueW1heD1NYXRoLm1heChSLEYpLFouYXR0cigiZCIsIk0wLDBaIikpfWVsc2UibGFzc28iPT09cyYmKGMuYWRkUHQoW0IsRl0pLHc9Yy5maWx0ZXJlZCk7aS5wb2x5Z29ucyYmaS5wb2x5Z29ucy5sZW5ndGg/KF89ZnVuY3Rpb24odCxlLHIpe3JldHVybiByP24uZGlmZmVyZW5jZSh7cmVnaW9uczp0LGludmVydGVkOiExfSx7cmVnaW9uczpbZV0saW52ZXJ0ZWQ6ITF9KS5yZWdpb25zOm4udW5pb24oe3JlZ2lvbnM6dCxpbnZlcnRlZDohMX0se3JlZ2lvbnM6W2VdLGludmVydGVkOiExfSkucmVnaW9uc30oaS5tZXJnZWRQb2x5Z29ucyx3LEcpLHcuc3VidHJhY3Q9RyxoPW0oaS5wb2x5Z29ucy5jb25jYXQoW3ddKSkpOihfPVt3XSxoPWcodykpO3ZhciB1PVtdO2ZvcihrPTA7azxfLmxlbmd0aDtrKyspe3ZhciBkPV9ba107dS5wdXNoKGQuam9pbigiTCIpKyJMIitkWzBdKX1ZLmF0dHIoImQiLCJNIit1LmpvaW4oIk0iKSsiWiIpLGwudGhyb3R0bGUoSixmLlNFTEVDVERFTEFZLGZ1bmN0aW9uKCl7Sz1bXTt2YXIgdCxlLHI9W107Zm9yKGs9MDtrPCQubGVuZ3RoO2srKylpZihlPShUPSRba10pLl9tb2R1bGUuc2VsZWN0UG9pbnRzKFQsaCksci5wdXNoKGUpLHQ9eChlLFQpLEsubGVuZ3RoKWZvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKUsucHVzaCh0W25dKTtlbHNlIEs9dDt5KEUsJCxTPXtwb2ludHM6S30pLFgoUyx3LGMpLGkuZ2QuZW1pdCgicGxvdGx5X3NlbGVjdGluZyIsUyl9KX0saS5jbGlja0ZuPWZ1bmN0aW9uKHQsZSl7Wi5yZW1vdmUoKSxsLmRvbmUoSikudGhlbihmdW5jdGlvbigpe2lmKGwuY2xlYXIoSiksMj09PXQpe2ZvcihZLnJlbW92ZSgpLGs9MDtrPCQubGVuZ3RoO2srKykoVD0kW2tdKS5fbW9kdWxlLnNlbGVjdFBvaW50cyhULCExKTt5KEUsJCksRS5lbWl0KCJwbG90bHlfZGVzZWxlY3QiLG51bGwpfWVsc2UgRS5lbWl0KCJwbG90bHlfc2VsZWN0ZWQiLHZvaWQgMCk7by5jbGljayhFLGUpfSl9LGkuZG9uZUZuPWZ1bmN0aW9uKCl7Wi5yZW1vdmUoKSxsLmRvbmUoSikudGhlbihmdW5jdGlvbigpe2wuY2xlYXIoSiksaS5nZC5lbWl0KCJwbG90bHlfc2VsZWN0ZWQiLFMpLHcmJmkucG9seWdvbnMmJih3LnN1YnRyYWN0PUcsaS5wb2x5Z29ucy5wdXNoKHcpLGkubWVyZ2VkUG9seWdvbnMubGVuZ3RoPTAsW10ucHVzaC5hcHBseShpLm1lcmdlZFBvbHlnb25zLF8pKX0pfX0sY2xlYXJTZWxlY3Q6Yn19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NTU4LCIuLi8uLi9jb21wb25lbnRzL2Z4Ijo2MDAsIi4uLy4uL2NvbXBvbmVudHMvZngvaGVscGVycyI6NTk3LCIuLi8uLi9saWIvcG9seWdvbiI6Njk2LCIuLi8uLi9saWIvdGhyb3R0bGUiOjcwOSwiLi4vLi4vcmVnaXN0cnkiOjgxNywiLi4vc29ydF9tb2R1bGVzIjo4MDgsIi4vYXhpc19pZHMiOjczNSwiLi9jb25zdGFudHMiOjczNyxwb2x5Ym9vbGpzOjQ0MH1dLDc1MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiZmFzdC1pc251bWVyaWMiKSxhPXQoIi4uLy4uL2xpYiIpLG89YS5jbGVhbk51bWJlcixzPWEubXMyRGF0ZVRpbWUsbD1hLmRhdGVUaW1lMm1zLGM9YS5lbnN1cmVOdW1iZXIsdT10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIiksaD11LkZQX1NBRkUsZj11LkJBRE5VTSxwPXQoIi4vY29uc3RhbnRzIiksZD10KCIuL2F4aXNfaWRzIik7ZnVuY3Rpb24gZyh0KXtyZXR1cm4gTWF0aC5wb3coMTAsdCl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZT1lfHx7fTt2YXIgcj0odC5faWR8fCJ4IikuY2hhckF0KDApLHU9MTA7ZnVuY3Rpb24gbShlLHIpe2lmKGU+MClyZXR1cm4gTWF0aC5sb2coZSkvTWF0aC5MTjEwO2lmKGU8PTAmJnImJnQucmFuZ2UmJjI9PT10LnJhbmdlLmxlbmd0aCl7dmFyIG49dC5yYW5nZVswXSxpPXQucmFuZ2VbMV07cmV0dXJuLjUqKG4raS0zKnUqTWF0aC5hYnMobi1pKSl9cmV0dXJuIGZ9ZnVuY3Rpb24gdihlLHIsbil7dmFyIGE9bChlLG58fHQuY2FsZW5kYXIpO2lmKGE9PT1mKXtpZighaShlKSlyZXR1cm4gZjthPWwobmV3IERhdGUoK2UpKX1yZXR1cm4gYX1mdW5jdGlvbiB5KGUscixuKXtyZXR1cm4gcyhlLHIsbnx8dC5jYWxlbmRhcil9ZnVuY3Rpb24geChlKXtyZXR1cm4gdC5fY2F0ZWdvcmllc1tNYXRoLnJvdW5kKGUpXX1mdW5jdGlvbiBiKGUpe2lmKHQuX2NhdGVnb3JpZXNNYXApe3ZhciByPXQuX2NhdGVnb3JpZXNNYXBbZV07aWYodm9pZCAwIT09cilyZXR1cm4gcn1pZihpKGUpKXJldHVybitlfWZ1bmN0aW9uIF8oZSl7cmV0dXJuIGkoZSk/bi5yb3VuZCh0Ll9iK3QuX20qZSwyKTpmfWZ1bmN0aW9uIHcoZSl7cmV0dXJuKGUtdC5fYikvdC5fbX10LmMybD0ibG9nIj09PXQudHlwZT9tOmMsdC5sMmM9ImxvZyI9PT10LnR5cGU/ZzpjLHQubDJwPV8sdC5wMmw9dyx0LmMycD0ibG9nIj09PXQudHlwZT9mdW5jdGlvbih0LGUpe3JldHVybiBfKG0odCxlKSl9Ol8sdC5wMmM9ImxvZyI9PT10LnR5cGU/ZnVuY3Rpb24odCl7cmV0dXJuIGcodyh0KSl9OncsLTEhPT1bImxpbmVhciIsIi0iXS5pbmRleE9mKHQudHlwZSk/KHQuZDJyPXQucjJkPXQuZDJjPXQucjJjPXQuZDJsPXQucjJsPW8sdC5jMmQ9dC5jMnI9dC5sMmQ9dC5sMnI9Yyx0LmQycD10LnIycD1mdW5jdGlvbihlKXtyZXR1cm4gdC5sMnAobyhlKSl9LHQucDJkPXQucDJyPXcsdC5jbGVhblBvcz1jKToibG9nIj09PXQudHlwZT8odC5kMnI9dC5kMmw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbShvKHQpLGUpfSx0LnIyZD10LnIyYz1mdW5jdGlvbih0KXtyZXR1cm4gZyhvKHQpKX0sdC5kMmM9dC5yMmw9byx0LmMyZD10Lmwycj1jLHQuYzJyPW0sdC5sMmQ9Zyx0LmQycD1mdW5jdGlvbihlLHIpe3JldHVybiB0LmwycCh0LmQycihlLHIpKX0sdC5wMmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGcodyh0KSl9LHQucjJwPWZ1bmN0aW9uKGUpe3JldHVybiB0LmwycChvKGUpKX0sdC5wMnI9dyx0LmNsZWFuUG9zPWMpOiJkYXRlIj09PXQudHlwZT8odC5kMnI9dC5yMmQ9YS5pZGVudGl0eSx0LmQyYz10LnIyYz10LmQybD10LnIybD12LHQuYzJkPXQuYzJyPXQubDJkPXQubDJyPXksdC5kMnA9dC5yMnA9ZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0LmwycCh2KGUsMCxuKSl9LHQucDJkPXQucDJyPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4geSh3KHQpLGUscil9LHQuY2xlYW5Qb3M9ZnVuY3Rpb24oZSl7cmV0dXJuIGEuY2xlYW5EYXRlKGUsZix0LmNhbGVuZGFyKX0pOiJjYXRlZ29yeSI9PT10LnR5cGUmJih0LmQyYz10LmQybD1mdW5jdGlvbihlKXtpZihudWxsIT1lKXtpZih2b2lkIDA9PT10Ll9jYXRlZ29yaWVzTWFwJiYodC5fY2F0ZWdvcmllc01hcD17fSksdm9pZCAwIT09dC5fY2F0ZWdvcmllc01hcFtlXSlyZXR1cm4gdC5fY2F0ZWdvcmllc01hcFtlXTt0Ll9jYXRlZ29yaWVzLnB1c2goZSk7dmFyIHI9dC5fY2F0ZWdvcmllcy5sZW5ndGgtMTtyZXR1cm4gdC5fY2F0ZWdvcmllc01hcFtlXT1yLHJ9cmV0dXJuIGZ9LHQucjJkPXQuYzJkPXQubDJkPXgsdC5kMnI9dC5kMmxfbm9hZGQ9Yix0LnIyYz1mdW5jdGlvbihlKXt2YXIgcj1iKGUpO3JldHVybiB2b2lkIDAhPT1yP3I6dC5mcmFjdGlvbjJyKC41KX0sdC5sMnI9dC5jMnI9Yyx0LnIybD1iLHQuZDJwPWZ1bmN0aW9uKGUpe3JldHVybiB0LmwycCh0LnIyYyhlKSl9LHQucDJkPWZ1bmN0aW9uKHQpe3JldHVybiB4KHcodCkpfSx0LnIycD10LmQycCx0LnAycj13LHQuY2xlYW5Qb3M9ZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0JiYiIiE9PXQ/dDpjKHQpfSksdC5mcmFjdGlvbjJyPWZ1bmN0aW9uKGUpe3ZhciByPXQucjJsKHQucmFuZ2VbMF0pLG49dC5yMmwodC5yYW5nZVsxXSk7cmV0dXJuIHQubDJyKHIrZSoobi1yKSl9LHQucjJmcmFjdGlvbj1mdW5jdGlvbihlKXt2YXIgcj10LnIybCh0LnJhbmdlWzBdKSxuPXQucjJsKHQucmFuZ2VbMV0pO3JldHVybih0LnIybChlKS1yKS8obi1yKX0sdC5jbGVhblJhbmdlPWZ1bmN0aW9uKGUsbil7bnx8KG49e30pLGV8fChlPSJyYW5nZSIpO3ZhciBvLHMsbD1hLm5lc3RlZFByb3BlcnR5KHQsZSkuZ2V0KCk7aWYocz0ocz0iZGF0ZSI9PT10LnR5cGU/YS5kZmx0UmFuZ2UodC5jYWxlbmRhcik6InkiPT09cj9wLkRGTFRSQU5HRVk6bi5kZmx0UmFuZ2V8fHAuREZMVFJBTkdFWCkuc2xpY2UoKSxsJiYyPT09bC5sZW5ndGgpZm9yKCJkYXRlIj09PXQudHlwZSYmKGxbMF09YS5jbGVhbkRhdGUobFswXSxmLHQuY2FsZW5kYXIpLGxbMV09YS5jbGVhbkRhdGUobFsxXSxmLHQuY2FsZW5kYXIpKSxvPTA7bzwyO28rKylpZigiZGF0ZSI9PT10LnR5cGUpe2lmKCFhLmlzRGF0ZVRpbWUobFtvXSx0LmNhbGVuZGFyKSl7dFtlXT1zO2JyZWFrfWlmKHQucjJsKGxbMF0pPT09dC5yMmwobFsxXSkpe3ZhciBjPWEuY29uc3RyYWluKHQucjJsKGxbMF0pLGEuTUlOX01TKzFlMyxhLk1BWF9NUy0xZTMpO2xbMF09dC5sMnIoYy0xZTMpLGxbMV09dC5sMnIoYysxZTMpO2JyZWFrfX1lbHNle2lmKCFpKGxbb10pKXtpZighaShsWzEtb10pKXt0W2VdPXM7YnJlYWt9bFtvXT1sWzEtb10qKG8/MTA6LjEpfWlmKGxbb108LWg/bFtvXT0taDpsW29dPmgmJihsW29dPWgpLGxbMF09PT1sWzFdKXt2YXIgdT1NYXRoLm1heCgxLE1hdGguYWJzKDFlLTYqbFswXSkpO2xbMF0tPXUsbFsxXSs9dX19ZWxzZSBhLm5lc3RlZFByb3BlcnR5KHQsZSkuc2V0KHMpfSx0LnNldFNjYWxlPWZ1bmN0aW9uKG4pe3ZhciBpPWUuX3NpemU7aWYodC5fY2F0ZWdvcmllc3x8KHQuX2NhdGVnb3JpZXM9W10pLHQuX2NhdGVnb3JpZXNNYXB8fCh0Ll9jYXRlZ29yaWVzTWFwPXt9KSx0Lm92ZXJsYXlpbmcpe3ZhciBhPWQuZ2V0RnJvbUlkKHtfZnVsbExheW91dDplfSx0Lm92ZXJsYXlpbmcpO3QuZG9tYWluPWEuZG9tYWlufXZhciBvPW4mJnQuX3I/Il9yIjoicmFuZ2UiLHM9dC5jYWxlbmRhcjt0LmNsZWFuUmFuZ2Uobyk7dmFyIGw9dC5yMmwodFtvXVswXSxzKSxjPXQucjJsKHRbb11bMV0scyk7aWYoInkiPT09cj8odC5fb2Zmc2V0PWkudCsoMS10LmRvbWFpblsxXSkqaS5oLHQuX2xlbmd0aD1pLmgqKHQuZG9tYWluWzFdLXQuZG9tYWluWzBdKSx0Ll9tPXQuX2xlbmd0aC8obC1jKSx0Ll9iPS10Ll9tKmMpOih0Ll9vZmZzZXQ9aS5sK3QuZG9tYWluWzBdKmkudyx0Ll9sZW5ndGg9aS53Kih0LmRvbWFpblsxXS10LmRvbWFpblswXSksdC5fbT10Ll9sZW5ndGgvKGMtbCksdC5fYj0tdC5fbSpsKSwhaXNGaW5pdGUodC5fbSl8fCFpc0Zpbml0ZSh0Ll9iKSl0aHJvdyBlLl9yZXBsb3R0aW5nPSExLG5ldyBFcnJvcigiU29tZXRoaW5nIHdlbnQgd3Jvbmcgd2l0aCBheGlzIHNjYWxpbmciKX0sdC5tYWtlQ2FsY2RhdGE9ZnVuY3Rpb24oZSxyKXt2YXIgbixpLG8scyxsPXQudHlwZSxjPSJkYXRlIj09PWwmJmVbcisiY2FsZW5kYXIiXTtpZihyIGluIGUpe2lmKG49ZVtyXSxzPWUuX2xlbmd0aHx8bi5sZW5ndGgsYS5pc1R5cGVkQXJyYXkobikmJigibGluZWFyIj09PWx8fCJsb2ciPT09bCkpe2lmKHM9PT1uLmxlbmd0aClyZXR1cm4gbjtpZihuLnN1YmFycmF5KXJldHVybiBuLnN1YmFycmF5KDAscyl9Zm9yKGk9bmV3IEFycmF5KHMpLG89MDtvPHM7bysrKWlbb109dC5kMmMobltvXSwwLGMpfWVsc2V7dmFyIHU9cisiMCJpbiBlP3QuZDJjKGVbcisiMCJdLDAsYyk6MCxoPWVbImQiK3JdP051bWJlcihlWyJkIityXSk6MTtmb3Iobj1lW3t4OiJ5Iix5OiJ4In1bcl1dLHM9ZS5fbGVuZ3RofHxuLmxlbmd0aCxpPW5ldyBBcnJheShzKSxvPTA7bzxzO28rKylpW29dPXUrbypofXJldHVybiBpfSx0LmlzVmFsaWRSYW5nZT1mdW5jdGlvbihlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKSYmMj09PWUubGVuZ3RoJiZpKHQucjJsKGVbMF0pKSYmaSh0LnIybChlWzFdKSl9LHQuaXNQdFdpdGhpblJhbmdlPWZ1bmN0aW9uKGUsbil7dmFyIGk9dC5jMmwoZVtyXSxudWxsLG4pLGE9dC5yMmwodC5yYW5nZVswXSksbz10LnIybCh0LnJhbmdlWzFdKTtyZXR1cm4gYTxvP2E8PWkmJmk8PW86bzw9aSYmaTw9YX0sdC5jbGVhckNhbGM9ZnVuY3Rpb24oKXt0Ll9taW49W10sdC5fbWF4PVtdLHQuX2NhdGVnb3JpZXM9KHQuX2luaXRpYWxDYXRlZ29yaWVzfHxbXSkuc2xpY2UoKSx0Ll9jYXRlZ29yaWVzTWFwPXt9O2Zvcih2YXIgZT0wO2U8dC5fY2F0ZWdvcmllcy5sZW5ndGg7ZSsrKXQuX2NhdGVnb3JpZXNNYXBbdC5fY2F0ZWdvcmllc1tlXV09ZX07dmFyIGs9ZS5fZDNsb2NhbGU7ImRhdGUiPT09dC50eXBlJiYodC5fZGF0ZUZvcm1hdD1rP2sudGltZUZvcm1hdC51dGM6bi50aW1lLmZvcm1hdC51dGMsdC5fZXh0cmFGb3JtYXQ9ZS5fZXh0cmFGb3JtYXQpLHQuX3NlcGFyYXRvcnM9ZS5zZXBhcmF0b3JzLHQuX251bUZvcm1hdD1rP2subnVtYmVyRm9ybWF0Om4uZm9ybWF0LGRlbGV0ZSB0Ll9taW5EdGljayxkZWxldGUgdC5fZm9yY2VUaWNrMH19LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NjYxLCIuLi8uLi9saWIiOjY4NCwiLi9heGlzX2lkcyI6NzM1LCIuL2NvbnN0YW50cyI6NzM3LGQzOjE0NywiZmFzdC1pc251bWVyaWMiOjIxNH1dLDc1MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxhPXQoIi4uL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyIpO2Z1bmN0aW9uIG8odCxlKXtmdW5jdGlvbiByKHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxpLnRpY2tmb3JtYXRzdG9wcyxyLGEpfXIoImVuYWJsZWQiKSYmKHIoImR0aWNrcmFuZ2UiKSxyKCJ2YWx1ZSIpKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyxsKXt2YXIgYz1mdW5jdGlvbih0KXt2YXIgZT1bInNob3dleHBvbmVudCIsInNob3d0aWNrcHJlZml4Iiwic2hvd3RpY2tzdWZmaXgiXS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMCE9PXRbZV19KTtpZihlLmV2ZXJ5KGZ1bmN0aW9uKHIpe3JldHVybiB0W3JdPT09dFtlWzBdXX0pfHwxPT09ZS5sZW5ndGgpcmV0dXJuIHRbZVswXV19KHQpO2lmKHIoInRpY2twcmVmaXgiKSYmcigic2hvd3RpY2twcmVmaXgiLGMpLHIoInRpY2tzdWZmaXgiLGwudGlja1N1ZmZpeERmbHQpJiZyKCJzaG93dGlja3N1ZmZpeCIsYykscigic2hvd3RpY2tsYWJlbHMiKSl7dmFyIHU9bC5mb250fHx7fSxoPWUuY29sb3IhPT1pLmNvbG9yLmRmbHQ/ZS5jb2xvcjp1LmNvbG9yO2lmKG4uY29lcmNlRm9udChyLCJ0aWNrZm9udCIse2ZhbWlseTp1LmZhbWlseSxzaXplOnUuc2l6ZSxjb2xvcjpofSkscigidGlja2FuZ2xlIiksImNhdGVnb3J5IiE9PXMpe3ZhciBmPXIoInRpY2tmb3JtYXQiKSxwPXQudGlja2Zvcm1hdHN0b3BzO0FycmF5LmlzQXJyYXkocCkmJnAubGVuZ3RoJiZhKHQsZSx7bmFtZToidGlja2Zvcm1hdHN0b3BzIixpbmNsdXNpb25BdHRyOiJlbmFibGVkIixoYW5kbGVJdGVtRGVmYXVsdHM6b30pLGZ8fCJkYXRlIj09PXN8fChyKCJzaG93ZXhwb25lbnQiLGMpLHIoImV4cG9uZW50Zm9ybWF0Iikscigic2VwYXJhdGV0aG91c2FuZHMiKSl9fX19LHsiLi4vLi4vbGliIjo2ODQsIi4uL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyI6NzI4LCIuL2xheW91dF9hdHRyaWJ1dGVzIjo3NDR9XSw3NTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2xheW91dF9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvPW4uY29lcmNlMih0LGUsaSwidGlja2xlbiIpLHM9bi5jb2VyY2UyKHQsZSxpLCJ0aWNrd2lkdGgiKSxsPW4uY29lcmNlMih0LGUsaSwidGlja2NvbG9yIixlLmNvbG9yKTtyKCJ0aWNrcyIsYS5vdXRlclRpY2tzfHxvfHxzfHxsPyJvdXRzaWRlIjoiIil8fChkZWxldGUgZS50aWNrbGVuLGRlbGV0ZSBlLnRpY2t3aWR0aCxkZWxldGUgZS50aWNrY29sb3IpfX0seyIuLi8uLi9saWIiOjY4NCwiLi9sYXlvdXRfYXR0cmlidXRlcyI6NzQ0fV0sNzUzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5PTkVEQVk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8pe3ZhciBzOyJhcnJheSIhPT10LnRpY2ttb2RlfHwibG9nIiE9PW8mJiJkYXRlIiE9PW8/cz1yKCJ0aWNrbW9kZSIsQXJyYXkuaXNBcnJheSh0LnRpY2t2YWxzKT8iYXJyYXkiOnQuZHRpY2s/ImxpbmVhciI6ImF1dG8iKTpzPWUudGlja21vZGU9ImF1dG8iO2lmKCJhdXRvIj09PXMpcigibnRpY2tzIik7ZWxzZSBpZigibGluZWFyIj09PXMpe3ZhciBsPSJkYXRlIj09PW8/YToxLGM9cigiZHRpY2siLGwpO2lmKG4oYykpZS5kdGljaz1jPjA/TnVtYmVyKGMpOmw7ZWxzZSBpZigic3RyaW5nIiE9dHlwZW9mIGMpZS5kdGljaz1sO2Vsc2V7dmFyIHU9Yy5jaGFyQXQoMCksaD1jLnN1YnN0cigxKTsoKGg9bihoKT9OdW1iZXIoaCk6MCk8PTB8fCEoImRhdGUiPT09byYmIk0iPT09dSYmaD09PU1hdGgucm91bmQoaCl8fCJsb2ciPT09byYmIkwiPT09dXx8ImxvZyI9PT1vJiYiRCI9PT11JiYoMT09PWh8fDI9PT1oKSkpJiYoZS5kdGljaz1sKX12YXIgZj0iZGF0ZSI9PT1vP2kuZGF0ZVRpY2swKGUuY2FsZW5kYXIpOjAscD1yKCJ0aWNrMCIsZik7ImRhdGUiPT09bz9lLnRpY2swPWkuY2xlYW5EYXRlKHAsZik6bihwKSYmIkQxIiE9PWMmJiJEMiIhPT1jP2UudGljazA9TnVtYmVyKHApOmUudGljazA9Zn1lbHNle3ZvaWQgMD09PXIoInRpY2t2YWxzIik/ZS50aWNrbW9kZT0iYXV0byI6cigidGlja3RleHQiKX19fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjY2MSwiLi4vLi4vbGliIjo2ODQsImZhc3QtaXNudW1lcmljIjoyMTR9XSw3NTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxvPXQoIi4vYXhlcyIpLHM9dCgiLi9jb25zdGFudHMiKS5hdHRyUmVnZXg7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGwpe3ZhciBjPXQuX2Z1bGxMYXlvdXQsdT1bXTt2YXIgaCxmLHAsZCxnPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpLGE9e307Zm9yKGUgaW4gdClpZigocj1lLnNwbGl0KCIuIikpWzBdLm1hdGNoKHMpKXt2YXIgbz1lLmNoYXJBdCgwKSxsPXJbMF07aWYobj1jW2xdLGk9e30sQXJyYXkuaXNBcnJheSh0W2VdKT9pLnRvPXRbZV0uc2xpY2UoMCk6QXJyYXkuaXNBcnJheSh0W2VdLnJhbmdlKSYmKGkudG89dFtlXS5yYW5nZS5zbGljZSgwKSksIWkudG8pY29udGludWU7aS5heGlzTmFtZT1sLGkubGVuZ3RoPW4uX2xlbmd0aCx1LnB1c2gobyksYVtvXT1pfXJldHVybiBhfShlKSxtPU9iamVjdC5rZXlzKGcpLHY9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYSxvPXQuX3Bsb3RzLHM9W107Zm9yKG4gaW4gbyl7dmFyIGw9b1tuXTtpZigtMT09PXMuaW5kZXhPZihsKSl7dmFyIGM9bC54YXhpcy5faWQsdT1sLnlheGlzLl9pZCxoPWwueGF4aXMucmFuZ2UsZj1sLnlheGlzLnJhbmdlO2wueGF4aXMuX3I9bC54YXhpcy5yYW5nZS5zbGljZSgpLGwueWF4aXMuX3I9bC55YXhpcy5yYW5nZS5zbGljZSgpLGk9cltjXT9yW2NdLnRvOmgsYT1yW3VdP3JbdV0udG86ZixoWzBdPT09aVswXSYmaFsxXT09PWlbMV0mJmZbMF09PT1hWzBdJiZmWzFdPT09YVsxXXx8LTE9PT1lLmluZGV4T2YoYykmJi0xPT09ZS5pbmRleE9mKHUpfHxzLnB1c2gobCl9fXJldHVybiBzfShjLG0sZyk7aWYoIXYubGVuZ3RoKXJldHVybiBmdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSxyLG4pe2Zvcih2YXIgaT0wO2k8ZS5sZW5ndGg7aSsrKWlmKHIodCxpKSxuKXJldHVybn1lKGMuYW5ub3RhdGlvbnN8fFtdLGkuZ2V0Q29tcG9uZW50TWV0aG9kKCJhbm5vdGF0aW9ucyIsImRyYXdPbmUiKSksZShjLnNoYXBlc3x8W10saS5nZXRDb21wb25lbnRNZXRob2QoInNoYXBlcyIsImRyYXdPbmUiKSksZShjLmltYWdlc3x8W10saS5nZXRDb21wb25lbnRNZXRob2QoImltYWdlcyIsImRyYXciKSwhMCl9KCksITE7ZnVuY3Rpb24geSh0KXt2YXIgZT10LnhheGlzLHI9dC55YXhpcztjLl9kZWZzLnNlbGVjdCgiIyIrdC5jbGlwSWQrIj4gcmVjdCIpLmNhbGwoYS5zZXRUcmFuc2xhdGUsMCwwKS5jYWxsKGEuc2V0U2NhbGUsMSwxKSx0LnBsb3QuY2FsbChhLnNldFRyYW5zbGF0ZSxlLl9vZmZzZXQsci5fb2Zmc2V0KS5jYWxsKGEuc2V0U2NhbGUsMSwxKTt2YXIgbj10LnBsb3Quc2VsZWN0QWxsKCIuc2NhdHRlcmxheWVyIC50cmFjZSIpO24uc2VsZWN0QWxsKCIucG9pbnQiKS5jYWxsKGEuc2V0UG9pbnRHcm91cFNjYWxlLDEsMSksbi5zZWxlY3RBbGwoIi50ZXh0cG9pbnQiKS5jYWxsKGEuc2V0VGV4dFBvaW50c1NjYWxlLDEsMSksbi5jYWxsKGEuaGlkZU91dHNpZGVSYW5nZVBvaW50cyx0KX1mdW5jdGlvbiB4KGUscil7dmFyIG4scyxsLHU9Z1tlLnhheGlzLl9pZF0saD1nW2UueWF4aXMuX2lkXSxmPVtdO2lmKHUpe3M9KG49dC5fZnVsbExheW91dFt1LmF4aXNOYW1lXSkuX3IsbD11LnRvLGZbMF09KHNbMF0qKDEtcikrcipsWzBdLXNbMF0pLyhzWzFdLXNbMF0pKmUueGF4aXMuX2xlbmd0aDt2YXIgcD1zWzFdLXNbMF0sZD1sWzFdLWxbMF07bi5yYW5nZVswXT1zWzBdKigxLXIpK3IqbFswXSxuLnJhbmdlWzFdPXNbMV0qKDEtcikrcipsWzFdLGZbMl09ZS54YXhpcy5fbGVuZ3RoKigxLXIrcipkL3ApfWVsc2UgZlswXT0wLGZbMl09ZS54YXhpcy5fbGVuZ3RoO2lmKGgpe3M9KG49dC5fZnVsbExheW91dFtoLmF4aXNOYW1lXSkuX3IsbD1oLnRvLGZbMV09KHNbMV0qKDEtcikrcipsWzFdLXNbMV0pLyhzWzBdLXNbMV0pKmUueWF4aXMuX2xlbmd0aDt2YXIgbT1zWzFdLXNbMF0sdj1sWzFdLWxbMF07bi5yYW5nZVswXT1zWzBdKigxLXIpK3IqbFswXSxuLnJhbmdlWzFdPXNbMV0qKDEtcikrcipsWzFdLGZbM109ZS55YXhpcy5fbGVuZ3RoKigxLXIrcip2L20pfWVsc2UgZlsxXT0wLGZbM109ZS55YXhpcy5fbGVuZ3RoOyFmdW5jdGlvbihlLHIpe3ZhciBuLGE9W107Zm9yKGE9W2UuX2lkLHIuX2lkXSxuPTA7bjxhLmxlbmd0aDtuKyspby5kb1RpY2tzU2luZ2xlKHQsYVtuXSwhMCk7ZnVuY3Rpb24gcyhlLHIsaSl7Zm9yKG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIG89ZVtuXTtpZigtMT09PWEuaW5kZXhPZihvLnhyZWYpJiYtMT09PWEuaW5kZXhPZihvLnlyZWYpfHxyKHQsbiksaSlyZXR1cm59fXMoYy5hbm5vdGF0aW9uc3x8W10saS5nZXRDb21wb25lbnRNZXRob2QoImFubm90YXRpb25zIiwiZHJhd09uZSIpKSxzKGMuc2hhcGVzfHxbXSxpLmdldENvbXBvbmVudE1ldGhvZCgic2hhcGVzIiwiZHJhd09uZSIpKSxzKGMuaW1hZ2VzfHxbXSxpLmdldENvbXBvbmVudE1ldGhvZCgiaW1hZ2VzIiwiZHJhdyIpLCEwKX0oZS54YXhpcyxlLnlheGlzKTt2YXIgeT1lLnhheGlzLHg9ZS55YXhpcyxiPSEhdSxfPSEhaCx3PWI/eS5fbGVuZ3RoL2ZbMl06MSxrPV8/eC5fbGVuZ3RoL2ZbM106MSxNPWI/ZlswXTowLEE9Xz9mWzFdOjAsVD1iP2ZbMF0vZlsyXSp5Ll9sZW5ndGg6MCxTPV8/ZlsxXS9mWzNdKnguX2xlbmd0aDowLEU9eS5fb2Zmc2V0LVQsQz14Ll9vZmZzZXQtUztlLmNsaXBSZWN0LmNhbGwoYS5zZXRUcmFuc2xhdGUsTSxBKS5jYWxsKGEuc2V0U2NhbGUsMS93LDEvayksZS5wbG90LmNhbGwoYS5zZXRUcmFuc2xhdGUsRSxDKS5jYWxsKGEuc2V0U2NhbGUsdyxrKSxhLnNldFBvaW50R3JvdXBTY2FsZShlLnpvb21TY2FsZVB0cywxL3csMS9rKSxhLnNldFRleHRQb2ludHNTY2FsZShlLnpvb21TY2FsZVR4dCwxL3csMS9rKX1sJiYoaD1sKCkpO3ZhciBiPW4uZWFzZShyLmVhc2luZyk7cmV0dXJuIHQuX3RyYW5zaXRpb25EYXRhLl9pbnRlcnJ1cHRDYWxsYmFja3MucHVzaChmdW5jdGlvbigpe3JldHVybiB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUoZCksZD1udWxsLGZ1bmN0aW9uKCl7Zm9yKHZhciBlPXt9LHI9MDtyPG0ubGVuZ3RoO3IrKyl7dmFyIG49dC5fZnVsbExheW91dFttW3JdKyJheGlzIl07ZVtuLl9uYW1lKyIucmFuZ2VbMF0iXT1uLnJhbmdlWzBdLGVbbi5fbmFtZSsiLnJhbmdlWzFdIl09bi5yYW5nZVsxXSxuLnJhbmdlPW4uX3Iuc2xpY2UoKX1yZXR1cm4gaS5jYWxsKCJyZWxheW91dCIsdCxlKS50aGVuKGZ1bmN0aW9uKCl7Zm9yKHZhciB0PTA7dDx2Lmxlbmd0aDt0KyspeSh2W3RdKX0pfSgpfSksZj1EYXRlLm5vdygpLGQ9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiBlKCl7cD1EYXRlLm5vdygpO2Zvcih2YXIgbj1NYXRoLm1pbigxLChwLWYpL3IuZHVyYXRpb24pLGE9YihuKSxvPTA7bzx2Lmxlbmd0aDtvKyspeCh2W29dLGEpO3AtZj5yLmR1cmF0aW9uPyhmdW5jdGlvbigpe2Zvcih2YXIgZT17fSxyPTA7cjxtLmxlbmd0aDtyKyspe3ZhciBuPXQuX2Z1bGxMYXlvdXRbZ1ttW3JdXS5heGlzTmFtZV0sYT1nW21bcl1dLnRvO2Vbbi5fbmFtZSsiLnJhbmdlWzBdIl09YVswXSxlW24uX25hbWUrIi5yYW5nZVsxXSJdPWFbMV0sbi5yYW5nZT1hLnNsaWNlKCl9aCYmaCgpLGkuY2FsbCgicmVsYXlvdXQiLHQsZSkudGhlbihmdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8di5sZW5ndGg7dCsrKXkodlt0XSl9KX0oKSxkPXdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZShlKSk6ZD13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGUpfSksUHJvbWlzZS5yZXNvbHZlKCl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NTgzLCIuLi8uLi9yZWdpc3RyeSI6ODE3LCIuL2F4ZXMiOjczMiwiLi9jb25zdGFudHMiOjczNyxkMzoxNDd9XSw3NTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4vYXhpc19hdXRvdHlwZSIpLGE9dCgiLi9heGlzX2lkcyIpLm5hbWUyaWQ7ZnVuY3Rpb24gbyh0KXtyZXR1cm57djoieCIsaDoieSJ9W3Qub3JpZW50YXRpb258fCJ2Il19ZnVuY3Rpb24gcyh0LGUpe3ZhciByPW8odCksaT1uLnRyYWNlSXModCwiYm94LXZpb2xpbiIpLGE9bi50cmFjZUlzKHQuX2Z1bGxJbnB1dHx8e30sImNhbmRsZXN0aWNrIik7cmV0dXJuIGkmJiFhJiZlPT09ciYmdm9pZCAwPT09dFtyXSYmdm9pZCAwPT09dFtyKyIwIl19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGwsYyl7YyYmKGUuX25hbWU9YyxlLl9pZD1hKGMpKSwiLSI9PT1yKCJ0eXBlIikmJighZnVuY3Rpb24odCxlKXtpZigiLSIhPT10LnR5cGUpcmV0dXJuO3ZhciByPXQuX2lkLGE9ci5jaGFyQXQoMCk7LTEhPT1yLmluZGV4T2YoInNjZW5lIikmJihyPWEpO3ZhciBsPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGk9dFtuXTtpZigic3Bsb20iPT09aS50eXBlJiZpLl9sZW5ndGg+MCYmaVsiXyIrcisiYXhlcyJdW2VdKXJldHVybiBpO2lmKChpW3IrImF4aXMiXXx8cik9PT1lKXtpZihzKGkscikpcmV0dXJuIGk7aWYoKGlbcl18fFtdKS5sZW5ndGh8fGlbcisiMCJdKXJldHVybiBpfX19KGUscixhKTtpZighbClyZXR1cm47aWYoImhpc3RvZ3JhbSI9PT1sLnR5cGUmJmE9PT17djoieSIsaDoieCJ9W2wub3JpZW50YXRpb258fCJ2Il0pcmV0dXJuIHZvaWQodC50eXBlPSJsaW5lYXIiKTt2YXIgYyx1PWErImNhbGVuZGFyIixoPWxbdV07aWYocyhsLGEpKXt2YXIgZj1vKGwpLHA9W107Zm9yKGM9MDtjPGUubGVuZ3RoO2MrKyl7dmFyIGQ9ZVtjXTtuLnRyYWNlSXMoZCwiYm94LXZpb2xpbiIpJiYoZFthKyJheGlzIl18fGEpPT09ciYmKHZvaWQgMCE9PWRbZl0/cC5wdXNoKGRbZl1bMF0pOnZvaWQgMCE9PWQubmFtZT9wLnB1c2goZC5uYW1lKTpwLnB1c2goInRleHQiKSxkW3VdIT09aCYmKGg9dm9pZCAwKSl9dC50eXBlPWkocCxoKX1lbHNlIGlmKCJzcGxvbSI9PT1sLnR5cGUpe3ZhciBnPWwuZGltZW5zaW9ucztmb3IoYz0wO2M8Zy5sZW5ndGg7YysrKXt2YXIgbT1nW2NdO2lmKG0udmlzaWJsZSl7dC50eXBlPWkobS52YWx1ZXMsaCk7YnJlYWt9fX1lbHNlIHQudHlwZT1pKGxbYV18fFtsW2ErIjAiXV0saCl9KGUsbCksIi0iPT09ZS50eXBlP2UudHlwZT0ibGluZWFyIjp0LnR5cGU9ZS50eXBlKX19LHsiLi4vLi4vcmVnaXN0cnkiOjgxNywiLi9heGlzX2F1dG90eXBlIjo3MzMsIi4vYXhpc19pZHMiOjczNX1dLDc1NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9yZWdpc3RyeSIpLGk9dCgiLi4vbGliIik7ZnVuY3Rpb24gYSh0LGUscil7dmFyIG4sYSxvLHM9ITE7aWYoImRhdGEiPT09ZS50eXBlKW49dC5fZnVsbERhdGFbbnVsbCE9PWUudHJhY2VzP2UudHJhY2VzWzBdOjBdO2Vsc2V7aWYoImxheW91dCIhPT1lLnR5cGUpcmV0dXJuITE7bj10Ll9mdWxsTGF5b3V0fXJldHVybiBhPWkubmVzdGVkUHJvcGVydHkobixlLnByb3ApLmdldCgpLChvPXJbZS50eXBlXT1yW2UudHlwZV18fHt9KS5oYXNPd25Qcm9wZXJ0eShlLnByb3ApJiZvW2UucHJvcF0hPT1hJiYocz0hMCksb1tlLnByb3BdPWEse2NoYW5nZWQ6cyx2YWx1ZTphfX1mdW5jdGlvbiBvKHQsZSl7dmFyIHI9W10sbj1lWzBdLGE9e307aWYoInN0cmluZyI9PXR5cGVvZiBuKWFbbl09ZVsxXTtlbHNle2lmKCFpLmlzUGxhaW5PYmplY3QobikpcmV0dXJuIHI7YT1ufXJldHVybiBsKGEsZnVuY3Rpb24odCxlLG4pe3IucHVzaCh7dHlwZToibGF5b3V0Iixwcm9wOnQsdmFsdWU6bn0pfSwiIiwwKSxyfWZ1bmN0aW9uIHModCxlKXt2YXIgcixuLGEsbyxzPVtdO2lmKG49ZVswXSxhPWVbMV0scj1lWzJdLG89e30sInN0cmluZyI9PXR5cGVvZiBuKW9bbl09YTtlbHNle2lmKCFpLmlzUGxhaW5PYmplY3QobikpcmV0dXJuIHM7bz1uLHZvaWQgMD09PXImJihyPWEpfXJldHVybiB2b2lkIDA9PT1yJiYocj1udWxsKSxsKG8sZnVuY3Rpb24oZSxuLGkpe3ZhciBhO2lmKEFycmF5LmlzQXJyYXkoaSkpe3ZhciBvPU1hdGgubWluKGkubGVuZ3RoLHQuZGF0YS5sZW5ndGgpO3ImJihvPU1hdGgubWluKG8sci5sZW5ndGgpKSxhPVtdO2Zvcih2YXIgbD0wO2w8bztsKyspYVtsXT1yP3JbbF06bH1lbHNlIGE9cj9yLnNsaWNlKDApOm51bGw7aWYobnVsbD09PWEpQXJyYXkuaXNBcnJheShpKSYmKGk9aVswXSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KGEpKXtpZighQXJyYXkuaXNBcnJheShpKSl7dmFyIGM9aTtpPVtdO2Zvcih2YXIgdT0wO3U8YS5sZW5ndGg7dSsrKWlbdV09Y31pLmxlbmd0aD1NYXRoLm1pbihhLmxlbmd0aCxpLmxlbmd0aCl9cy5wdXNoKHt0eXBlOiJkYXRhIixwcm9wOmUsdHJhY2VzOmEsdmFsdWU6aX0pfSwiIiwwKSxzfWZ1bmN0aW9uIGwodCxlLHIsbil7T2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihhKXt2YXIgbz10W2FdO2lmKCJfIiE9PWFbMF0pe3ZhciBzPXIrKG4+MD8iLiI6IiIpK2E7aS5pc1BsYWluT2JqZWN0KG8pP2wobyxlLHMsbisxKTplKHMsYSxvKX19KX1yLm1hbmFnZUNvbW1hbmRPYnNlcnZlcj1mdW5jdGlvbih0LGUsbixvKXt2YXIgcz17fSxsPSEwO2UmJmUuX2NvbW1hbmRPYnNlcnZlciYmKHM9ZS5fY29tbWFuZE9ic2VydmVyKSxzLmNhY2hlfHwocy5jYWNoZT17fSkscy5sb29rdXBUYWJsZT17fTt2YXIgYz1yLmhhc1NpbXBsZUFQSUNvbW1hbmRCaW5kaW5ncyh0LG4scy5sb29rdXBUYWJsZSk7aWYoZSYmZS5fY29tbWFuZE9ic2VydmVyKXtpZihjKXJldHVybiBzO2lmKGUuX2NvbW1hbmRPYnNlcnZlci5yZW1vdmUpcmV0dXJuIGUuX2NvbW1hbmRPYnNlcnZlci5yZW1vdmUoKSxlLl9jb21tYW5kT2JzZXJ2ZXI9bnVsbCxzfWlmKGMpe2EodCxjLHMuY2FjaGUpLHMuY2hlY2s9ZnVuY3Rpb24oKXtpZihsKXt2YXIgZT1hKHQsYyxzLmNhY2hlKTtyZXR1cm4gZS5jaGFuZ2VkJiZvJiZ2b2lkIDAhPT1zLmxvb2t1cFRhYmxlW2UudmFsdWVdJiYocy5kaXNhYmxlKCksUHJvbWlzZS5yZXNvbHZlKG8oe3ZhbHVlOmUudmFsdWUsdHlwZTpjLnR5cGUscHJvcDpjLnByb3AsdHJhY2VzOmMudHJhY2VzLGluZGV4OnMubG9va3VwVGFibGVbZS52YWx1ZV19KSkudGhlbihzLmVuYWJsZSxzLmVuYWJsZSkpLGUuY2hhbmdlZH19O2Zvcih2YXIgdT1bInBsb3RseV9yZWxheW91dCIsInBsb3RseV9yZWRyYXciLCJwbG90bHlfcmVzdHlsZSIsInBsb3RseV91cGRhdGUiLCJwbG90bHlfYW5pbWF0aW5nZnJhbWUiLCJwbG90bHlfYWZ0ZXJwbG90Il0saD0wO2g8dS5sZW5ndGg7aCsrKXQuX2ludGVybmFsT24odVtoXSxzLmNoZWNrKTtzLnJlbW92ZT1mdW5jdGlvbigpe2Zvcih2YXIgZT0wO2U8dS5sZW5ndGg7ZSsrKXQuX3JlbW92ZUludGVybmFsTGlzdGVuZXIodVtlXSxzLmNoZWNrKX19ZWxzZSBpLmxvZygiVW5hYmxlIHRvIGF1dG9tYXRpY2FsbHkgYmluZCBwbG90IHVwZGF0ZXMgdG8gQVBJIGNvbW1hbmQiKSxzLmxvb2t1cFRhYmxlPXt9LHMucmVtb3ZlPWZ1bmN0aW9uKCl7fTtyZXR1cm4gcy5kaXNhYmxlPWZ1bmN0aW9uKCl7bD0hMX0scy5lbmFibGU9ZnVuY3Rpb24oKXtsPSEwfSxlJiYoZS5fY29tbWFuZE9ic2VydmVyPXMpLHN9LHIuaGFzU2ltcGxlQVBJQ29tbWFuZEJpbmRpbmdzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaSxhLG89ZS5sZW5ndGg7Zm9yKGk9MDtpPG87aSsrKXt2YXIgcyxsPWVbaV0sYz1sLm1ldGhvZCx1PWwuYXJncztpZihBcnJheS5pc0FycmF5KHUpfHwodT1bXSksIWMpcmV0dXJuITE7dmFyIGg9ci5jb21wdXRlQVBJQ29tbWFuZEJpbmRpbmdzKHQsYyx1KTtpZigxIT09aC5sZW5ndGgpcmV0dXJuITE7aWYoYSl7aWYoKHM9aFswXSkudHlwZSE9PWEudHlwZSlyZXR1cm4hMTtpZihzLnByb3AhPT1hLnByb3ApcmV0dXJuITE7aWYoQXJyYXkuaXNBcnJheShhLnRyYWNlcykpe2lmKCFBcnJheS5pc0FycmF5KHMudHJhY2VzKSlyZXR1cm4hMTtzLnRyYWNlcy5zb3J0KCk7Zm9yKHZhciBmPTA7ZjxhLnRyYWNlcy5sZW5ndGg7ZisrKWlmKGEudHJhY2VzW2ZdIT09cy50cmFjZXNbZl0pcmV0dXJuITF9ZWxzZSBpZihzLnByb3AhPT1hLnByb3ApcmV0dXJuITF9ZWxzZSBhPWhbMF0sQXJyYXkuaXNBcnJheShhLnRyYWNlcykmJmEudHJhY2VzLnNvcnQoKTt2YXIgcD0ocz1oWzBdKS52YWx1ZTtpZihBcnJheS5pc0FycmF5KHApKXtpZigxIT09cC5sZW5ndGgpcmV0dXJuITE7cD1wWzBdfW4mJihuW3BdPWkpfXJldHVybiBhfSxyLmV4ZWN1dGVBUElDb21tYW5kPWZ1bmN0aW9uKHQsZSxyKXtpZigic2tpcCI9PT1lKXJldHVybiBQcm9taXNlLnJlc29sdmUoKTt2YXIgYT1uLmFwaU1ldGhvZFJlZ2lzdHJ5W2VdLG89W3RdO0FycmF5LmlzQXJyYXkocil8fChyPVtdKTtmb3IodmFyIHM9MDtzPHIubGVuZ3RoO3MrKylvLnB1c2gocltzXSk7cmV0dXJuIGEuYXBwbHkobnVsbCxvKS5jYXRjaChmdW5jdGlvbih0KXtyZXR1cm4gaS53YXJuKCJBUEkgY2FsbCB0byBQbG90bHkuIitlKyIgcmVqZWN0ZWQuIix0KSxQcm9taXNlLnJlamVjdCh0KX0pfSxyLmNvbXB1dGVBUElDb21tYW5kQmluZGluZ3M9ZnVuY3Rpb24odCxlLHIpe3ZhciBuO3N3aXRjaChBcnJheS5pc0FycmF5KHIpfHwocj1bXSksZSl7Y2FzZSJyZXN0eWxlIjpuPXModCxyKTticmVhaztjYXNlInJlbGF5b3V0IjpuPW8odCxyKTticmVhaztjYXNlInVwZGF0ZSI6bj1zKHQsW3JbMF0sclsyXV0pLmNvbmNhdChvKHQsW3JbMV1dKSk7YnJlYWs7Y2FzZSJhbmltYXRlIjpuPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZVswXSkmJjE9PT1lWzBdLmxlbmd0aCYmLTEhPT1bInN0cmluZyIsIm51bWJlciJdLmluZGV4T2YodHlwZW9mIGVbMF1bMF0pP1t7dHlwZToibGF5b3V0Iixwcm9wOiJfY3VycmVudEZyYW1lIix2YWx1ZTplWzBdWzBdLnRvU3RyaW5nKCl9XTpbXX0oMCxyKTticmVhaztkZWZhdWx0Om49W119cmV0dXJuIG59fSx7Ii4uL2xpYiI6Njg0LCIuLi9yZWdpc3RyeSI6ODE3fV0sNzU3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0O3IuYXR0cmlidXRlcz1mdW5jdGlvbih0LGUpe2U9ZXx8e307dmFyIHI9e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGVkaXRUeXBlOih0PXR8fHt9KS5lZGl0VHlwZSxpdGVtczpbe3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZWRpdFR5cGU6dC5lZGl0VHlwZX0se3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZWRpdFR5cGU6dC5lZGl0VHlwZX1dLGRmbHQ6WzAsMV19LGk9KHQubmFtZSYmdC5uYW1lLHQudHJhY2UsZS5kZXNjcmlwdGlvbiYmZS5kZXNjcmlwdGlvbix7eDpuKHt9LHIse30pLHk6bih7fSxyLHt9KSxlZGl0VHlwZTp0LmVkaXRUeXBlfSk7cmV0dXJuIHQubm9HcmlkQ2VsbHx8KGkucm93PXt2YWxUeXBlOiJpbnRlZ2VyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6dC5lZGl0VHlwZX0saS5jb2x1bW49e3ZhbFR5cGU6ImludGVnZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZTp0LmVkaXRUeXBlfSksaX0sci5kZWZhdWx0cz1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1uJiZuLnh8fFswLDFdLGE9biYmbi55fHxbMCwxXSxvPWUuZ3JpZDtpZihvKXt2YXIgcz1yKCJkb21haW4uY29sdW1uIik7dm9pZCAwIT09cyYmKHM8by5jb2x1bW5zP2k9by5fZG9tYWlucy54W3NdOmRlbGV0ZSB0LmRvbWFpbi5jb2x1bW4pO3ZhciBsPXIoImRvbWFpbi5yb3ciKTt2b2lkIDAhPT1sJiYobDxvLnJvd3M/YT1vLl9kb21haW5zLnlbbF06ZGVsZXRlIHQuZG9tYWluLnJvdyl9cigiZG9tYWluLngiLGkpLHIoImRvbWFpbi55IixhKX19LHsiLi4vbGliL2V4dGVuZCI6NjczfV0sNzU4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmVkaXRUeXBlLHI9dC5jb2xvckVkaXRUeXBlO3ZvaWQgMD09PXImJihyPWUpO3ZhciBuPXtmYW1pbHk6e3ZhbFR5cGU6InN0cmluZyIsbm9CbGFuazohMCxzdHJpY3Q6ITAsZWRpdFR5cGU6ZX0sc2l6ZTp7dmFsVHlwZToibnVtYmVyIixtaW46MSxlZGl0VHlwZTplfSxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOnJ9LGVkaXRUeXBlOmV9O3JldHVybiB0LmFycmF5T2smJihuLmZhbWlseS5hcnJheU9rPSEwLG4uc2l6ZS5hcnJheU9rPSEwLG4uY29sb3IuYXJyYXlPaz0hMCksbn19LHt9XSw3NTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtfaXNMaW5rZWRUb0FycmF5OiJmcmFtZXNfZW50cnkiLGdyb3VwOnt2YWxUeXBlOiJzdHJpbmcifSxuYW1lOnt2YWxUeXBlOiJzdHJpbmcifSx0cmFjZXM6e3ZhbFR5cGU6ImFueSJ9LGJhc2VmcmFtZTp7dmFsVHlwZToic3RyaW5nIn0sZGF0YTp7dmFsVHlwZToiYW55In0sbGF5b3V0Ont2YWxUeXBlOiJhbnkifX19LHt9XSw3NjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ci5wcm9qTmFtZXM9e2VxdWlyZWN0YW5ndWxhcjoiZXF1aXJlY3Rhbmd1bGFyIixtZXJjYXRvcjoibWVyY2F0b3IiLG9ydGhvZ3JhcGhpYzoib3J0aG9ncmFwaGljIiwibmF0dXJhbCBlYXJ0aCI6Im5hdHVyYWxFYXJ0aCIsa2F2cmF5c2tpeTc6ImthdnJheXNraXk3IixtaWxsZXI6Im1pbGxlciIscm9iaW5zb246InJvYmluc29uIixlY2tlcnQ0OiJlY2tlcnQ0IiwiYXppbXV0aGFsIGVxdWFsIGFyZWEiOiJhemltdXRoYWxFcXVhbEFyZWEiLCJhemltdXRoYWwgZXF1aWRpc3RhbnQiOiJhemltdXRoYWxFcXVpZGlzdGFudCIsImNvbmljIGVxdWFsIGFyZWEiOiJjb25pY0VxdWFsQXJlYSIsImNvbmljIGNvbmZvcm1hbCI6ImNvbmljQ29uZm9ybWFsIiwiY29uaWMgZXF1aWRpc3RhbnQiOiJjb25pY0VxdWlkaXN0YW50Iixnbm9tb25pYzoiZ25vbW9uaWMiLHN0ZXJlb2dyYXBoaWM6InN0ZXJlb2dyYXBoaWMiLG1vbGx3ZWlkZToibW9sbHdlaWRlIixoYW1tZXI6ImhhbW1lciIsInRyYW5zdmVyc2UgbWVyY2F0b3IiOiJ0cmFuc3ZlcnNlTWVyY2F0b3IiLCJhbGJlcnMgdXNhIjoiYWxiZXJzVXNhIiwid2lua2VsIHRyaXBlbCI6IndpbmtlbDMiLGFpdG9mZjoiYWl0b2ZmIixzaW51c29pZGFsOiJzaW51c29pZGFsIn0sci5heGVzTmFtZXM9WyJsb25heGlzIiwibGF0YXhpcyJdLHIubG9uYXhpc1NwYW49e29ydGhvZ3JhcGhpYzoxODAsImF6aW11dGhhbCBlcXVhbCBhcmVhIjozNjAsImF6aW11dGhhbCBlcXVpZGlzdGFudCI6MzYwLCJjb25pYyBjb25mb3JtYWwiOjE4MCxnbm9tb25pYzoxNjAsc3RlcmVvZ3JhcGhpYzoxODAsInRyYW5zdmVyc2UgbWVyY2F0b3IiOjE4MCwiKiI6MzYwfSxyLmxhdGF4aXNTcGFuPXsiY29uaWMgY29uZm9ybWFsIjoxNTAsc3RlcmVvZ3JhcGhpYzoxNzkuNSwiKiI6MTgwfSxyLnNjb3BlRGVmYXVsdHM9e3dvcmxkOntsb25heGlzUmFuZ2U6Wy0xODAsMTgwXSxsYXRheGlzUmFuZ2U6Wy05MCw5MF0scHJvalR5cGU6ImVxdWlyZWN0YW5ndWxhciIscHJvalJvdGF0ZTpbMCwwLDBdfSx1c2E6e2xvbmF4aXNSYW5nZTpbLTE4MCwtNTBdLGxhdGF4aXNSYW5nZTpbMTUsODBdLHByb2pUeXBlOiJhbGJlcnMgdXNhIn0sZXVyb3BlOntsb25heGlzUmFuZ2U6Wy0zMCw2MF0sbGF0YXhpc1JhbmdlOlszMCw4NV0scHJvalR5cGU6ImNvbmljIGNvbmZvcm1hbCIscHJvalJvdGF0ZTpbMTUsMCwwXSxwcm9qUGFyYWxsZWxzOlswLDYwXX0sYXNpYTp7bG9uYXhpc1JhbmdlOlsyMiwxNjBdLGxhdGF4aXNSYW5nZTpbLTE1LDU1XSxwcm9qVHlwZToibWVyY2F0b3IiLHByb2pSb3RhdGU6WzAsMCwwXX0sYWZyaWNhOntsb25heGlzUmFuZ2U6Wy0zMCw2MF0sbGF0YXhpc1JhbmdlOlstNDAsNDBdLHByb2pUeXBlOiJtZXJjYXRvciIscHJvalJvdGF0ZTpbMCwwLDBdfSwibm9ydGggYW1lcmljYSI6e2xvbmF4aXNSYW5nZTpbLTE4MCwtNDVdLGxhdGF4aXNSYW5nZTpbNSw4NV0scHJvalR5cGU6ImNvbmljIGNvbmZvcm1hbCIscHJvalJvdGF0ZTpbLTEwMCwwLDBdLHByb2pQYXJhbGxlbHM6WzI5LjUsNDUuNV19LCJzb3V0aCBhbWVyaWNhIjp7bG9uYXhpc1JhbmdlOlstMTAwLC0zMF0sbGF0YXhpc1JhbmdlOlstNjAsMTVdLHByb2pUeXBlOiJtZXJjYXRvciIscHJvalJvdGF0ZTpbMCwwLDBdfX0sci5jbGlwUGFkPS4wMDEsci5wcmVjaXNpb249LjEsci5sYW5kQ29sb3I9IiNGMERDODIiLHIud2F0ZXJDb2xvcj0iIzMzOTlGRiIsci5sb2NhdGlvbm1vZGVUb0xheWVyPXsiSVNPLTMiOiJjb3VudHJpZXMiLCJVU0Etc3RhdGVzIjoic3VidW5pdHMiLCJjb3VudHJ5IG5hbWVzIjoiY291bnRyaWVzIn0sci5zcGhlcmVTVkc9e3R5cGU6IlNwaGVyZSJ9LHIuZmlsbExheWVycz17b2NlYW46MSxsYW5kOjEsbGFrZXM6MX0sci5saW5lTGF5ZXJzPXtzdWJ1bml0czoxLGNvdW50cmllczoxLGNvYXN0bGluZXM6MSxyaXZlcnM6MSxmcmFtZToxfSxyLmxheWVycz1bImJnIiwib2NlYW4iLCJsYW5kIiwibGFrZXMiLCJzdWJ1bml0cyIsImNvdW50cmllcyIsImNvYXN0bGluZXMiLCJyaXZlcnMiLCJsYXRheGlzIiwibG9uYXhpcyIsImZyYW1lIiwiYmFja3Bsb3QiLCJmcm9udHBsb3QiXSxyLmxheWVyc0ZvckNob3JvcGxldGg9WyJiZyIsIm9jZWFuIiwibGFuZCIsInN1YnVuaXRzIiwiY291bnRyaWVzIiwiY29hc3RsaW5lcyIsImxhdGF4aXMiLCJsb25heGlzIiwiZnJhbWUiLCJiYWNrcGxvdCIsInJpdmVycyIsImxha2VzIiwiZnJvbnRwbG90Il0sci5sYXllck5hbWVUb0FkamVjdGl2ZT17b2NlYW46Im9jZWFuIixsYW5kOiJsYW5kIixsYWtlczoibGFrZSIsc3VidW5pdHM6InN1YnVuaXQiLGNvdW50cmllczoiY291bnRyeSIsY29hc3RsaW5lczoiY29hc3RsaW5lIixyaXZlcnM6InJpdmVyIixmcmFtZToiZnJhbWUifX0se31dLDc2MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vLi4vcmVnaXN0cnkiKSxhPXQoIi4uLy4uL2xpYiIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLHM9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksbD10KCIuLi8uLi9jb21wb25lbnRzL2Z4IiksYz10KCIuLi9wbG90cyIpLHU9dCgiLi4vY2FydGVzaWFuL2F4ZXMiKSxoPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQiKSxmPXQoIi4uL2NhcnRlc2lhbi9zZWxlY3QiKS5wcmVwU2VsZWN0LHA9dCgiLi96b29tIiksZD10KCIuL2NvbnN0YW50cyIpLGc9dCgiLi4vLi4vbGliL3RvcG9qc29uX3V0aWxzIiksbT10KCJ0b3BvanNvbi1jbGllbnQiKS5mZWF0dXJlO2Z1bmN0aW9uIHYodCl7dGhpcy5pZD10LmlkLHRoaXMuZ3JhcGhEaXY9dC5ncmFwaERpdix0aGlzLmNvbnRhaW5lcj10LmNvbnRhaW5lcix0aGlzLnRvcG9qc29uVVJMPXQudG9wb2pzb25VUkwsdGhpcy5pc1N0YXRpYz10LnN0YXRpY1Bsb3QsdGhpcy50b3BvanNvbk5hbWU9bnVsbCx0aGlzLnRvcG9qc29uPW51bGwsdGhpcy5wcm9qZWN0aW9uPW51bGwsdGhpcy52aWV3SW5pdGlhbD1udWxsLHRoaXMuZml0U2NhbGU9bnVsbCx0aGlzLmJvdW5kcz1udWxsLHRoaXMubWlkUHQ9bnVsbCx0aGlzLmhhc0Nob3JvcGxldGg9ITEsdGhpcy50cmFjZUhhc2g9e30sdGhpcy5sYXllcnM9e30sdGhpcy5iYXNlUGF0aHM9e30sdGhpcy5kYXRhUGF0aHM9e30sdGhpcy5kYXRhUG9pbnRzPXt9LHRoaXMuY2xpcERlZj1udWxsLHRoaXMuY2xpcFJlY3Q9bnVsbCx0aGlzLmJnUmVjdD1udWxsLHRoaXMubWFrZUZyYW1ld29yaygpfXQoIi4vcHJvamVjdGlvbnMiKShuKTt2YXIgeT12LnByb3RvdHlwZTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyB2KHQpfSx5LnBsb3Q9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMsaT1lW3RoaXMuaWRdLGE9Zy5nZXRUb3BvanNvbk5hbWUoaSk7bnVsbD09PW4udG9wb2pzb258fGEhPT1uLnRvcG9qc29uTmFtZT8obi50b3BvanNvbk5hbWU9YSx2b2lkIDA9PT1QbG90bHlHZW9Bc3NldHMudG9wb2pzb25bbi50b3BvanNvbk5hbWVdP3IucHVzaChuLmZldGNoVG9wb2pzb24oKS50aGVuKGZ1bmN0aW9uKHIpe1Bsb3RseUdlb0Fzc2V0cy50b3BvanNvbltuLnRvcG9qc29uTmFtZV09cixuLnRvcG9qc29uPXIsbi51cGRhdGUodCxlKX0pKToobi50b3BvanNvbj1QbG90bHlHZW9Bc3NldHMudG9wb2pzb25bbi50b3BvanNvbk5hbWVdLG4udXBkYXRlKHQsZSkpKTpuLnVwZGF0ZSh0LGUpfSx5LmZldGNoVG9wb2pzb249ZnVuY3Rpb24oKXt2YXIgdD1nLmdldFRvcG9qc29uUGF0aCh0aGlzLnRvcG9qc29uVVJMLHRoaXMudG9wb2pzb25OYW1lKTtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oZSxyKXtuLmpzb24odCxmdW5jdGlvbihuLGkpe2lmKG4pcmV0dXJuIDQwND09PW4uc3RhdHVzP3IobmV3IEVycm9yKFsicGxvdGx5LmpzIGNvdWxkIG5vdCBmaW5kIHRvcG9qc29uIGZpbGUgYXQiLHQsIi4iLCJNYWtlIHN1cmUgdGhlICp0b3BvanNvblVSTCogcGxvdCBjb25maWcgb3B0aW9uIiwiaXMgc2V0IHByb3Blcmx5LiJdLmpvaW4oIiAiKSkpOnIobmV3IEVycm9yKFsidW5leHBlY3RlZCBlcnJvciB3aGlsZSBmZXRjaGluZyB0b3BvanNvbiBmaWxlIGF0Iix0XS5qb2luKCIgIikpKTtlKGkpfSl9KX0seS51cGRhdGU9ZnVuY3Rpb24odCxlKXt2YXIgcj1lW3RoaXMuaWRdO2lmKCF0aGlzLnVwZGF0ZVByb2plY3Rpb24oZSxyKSl7dGhpcy5oYXNDaG9yb3BsZXRoPSExO2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKWlmKCJjaG9yb3BsZXRoIj09PXRbbl1bMF0udHJhY2UudHlwZSl7dGhpcy5oYXNDaG9yb3BsZXRoPSEwO2JyZWFrfXRoaXMudmlld0luaXRpYWx8fHRoaXMuc2F2ZVZpZXdJbml0aWFsKHIpLHRoaXMudXBkYXRlQmFzZUxheWVycyhlLHIpLHRoaXMudXBkYXRlRGltcyhlLHIpLHRoaXMudXBkYXRlRngoZSxyKSxjLmdlbmVyYWxVcGRhdGVQZXJUcmFjZU1vZHVsZSh0aGlzLmdyYXBoRGl2LHRoaXMsdCxyKTt2YXIgaT10aGlzLmxheWVycy5mcm9udHBsb3Quc2VsZWN0KCIuc2NhdHRlcmxheWVyIik7dGhpcy5kYXRhUG9pbnRzLnBvaW50PWkuc2VsZWN0QWxsKCIucG9pbnQiKSx0aGlzLmRhdGFQb2ludHMudGV4dD1pLnNlbGVjdEFsbCgidGV4dCIpLHRoaXMuZGF0YVBhdGhzLmxpbmU9aS5zZWxlY3RBbGwoIi5qcy1saW5lIik7dmFyIGE9dGhpcy5sYXllcnMuYmFja3Bsb3Quc2VsZWN0KCIuY2hvcm9wbGV0aGxheWVyIik7dGhpcy5kYXRhUGF0aHMuY2hvcm9wbGV0aD1hLnNlbGVjdEFsbCgicGF0aCIpLHRoaXMucmVuZGVyKCl9fSx5LnVwZGF0ZVByb2plY3Rpb249ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9zaXplLG89ZS5kb21haW4scz1lLnByb2plY3Rpb24sbD1zLnJvdGF0aW9ufHx7fSxjPWUuY2VudGVyfHx7fSx1PXRoaXMucHJvamVjdGlvbj1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5wcm9qZWN0aW9uLnR5cGUscj1uLmdlb1tkLnByb2pOYW1lc1tlXV0oKSxpPXQuX2lzQ2xpcHBlZD9kLmxvbmF4aXNTcGFuW2VdLzI6bnVsbCxhPVsiY2VudGVyIiwicm90YXRlIiwicGFyYWxsZWxzIiwiY2xpcEV4dGVudCJdLG89ZnVuY3Rpb24odCl7cmV0dXJuIHQ/cjpbXX0scz0wO3M8YS5sZW5ndGg7cysrKXt2YXIgbD1hW3NdOyJmdW5jdGlvbiIhPXR5cGVvZiByW2xdJiYocltsXT1vKX1yLmlzTG9uTGF0T3ZlckVkZ2VzPWZ1bmN0aW9uKHQpe2lmKG51bGw9PT1yKHQpKXJldHVybiEwO2lmKGkpe3ZhciBlPXIucm90YXRlKCk7cmV0dXJuIG4uZ2VvLmRpc3RhbmNlKHQsWy1lWzBdLC1lWzFdXSk+aSpNYXRoLlBJLzE4MH1yZXR1cm4hMX0sci5nZXRQYXRoPWZ1bmN0aW9uKCl7cmV0dXJuIG4uZ2VvLnBhdGgoKS5wcm9qZWN0aW9uKHIpfSxyLmdldEJvdW5kcz1mdW5jdGlvbih0KXtyZXR1cm4gci5nZXRQYXRoKCkuYm91bmRzKHQpfSxyLmZpdEV4dGVudD1mdW5jdGlvbih0LGUpe3ZhciBuPXRbMV1bMF0tdFswXVswXSxpPXRbMV1bMV0tdFswXVsxXSxhPXIuY2xpcEV4dGVudCYmci5jbGlwRXh0ZW50KCk7ci5zY2FsZSgxNTApLnRyYW5zbGF0ZShbMCwwXSksYSYmci5jbGlwRXh0ZW50KG51bGwpO3ZhciBvPXIuZ2V0Qm91bmRzKGUpLHM9TWF0aC5taW4obi8ob1sxXVswXS1vWzBdWzBdKSxpLyhvWzFdWzFdLW9bMF1bMV0pKSxsPSt0WzBdWzBdKyhuLXMqKG9bMV1bMF0rb1swXVswXSkpLzIsYz0rdFswXVsxXSsoaS1zKihvWzFdWzFdK29bMF1bMV0pKS8yO3JldHVybiBhJiZyLmNsaXBFeHRlbnQoYSksci5zY2FsZSgxNTAqcykudHJhbnNsYXRlKFtsLGNdKX0sci5wcmVjaXNpb24oZC5wcmVjaXNpb24pLGkmJnIuY2xpcEFuZ2xlKGktZC5jbGlwUGFkKTtyZXR1cm4gcn0oZSk7dS5jZW50ZXIoW2MubG9uLWwubG9uLGMubGF0LWwubGF0XSkucm90YXRlKFstbC5sb24sLWwubGF0LGwucm9sbF0pLnBhcmFsbGVscyhzLnBhcmFsbGVscyk7dmFyIGg9W1tyLmwrci53Km8ueFswXSxyLnQrci5oKigxLW8ueVsxXSldLFtyLmwrci53Km8ueFsxXSxyLnQrci5oKigxLW8ueVswXSldXSxmPWUubG9uYXhpcyxwPWUubGF0YXhpcyxnPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZC5jbGlwUGFkLG49dFswXStyLGk9dFsxXS1yLGE9ZVswXStyLG89ZVsxXS1yO24+MCYmaTwwJiYoaSs9MzYwKTt2YXIgcz0oaS1uKS80O3JldHVybnt0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczpbW1tuLGFdLFtuLG9dLFtuK3Msb10sW24rMipzLG9dLFtuKzMqcyxvXSxbaSxvXSxbaSxhXSxbaS1zLGFdLFtpLTIqcyxhXSxbaS0zKnMsYV0sW24sYV1dXX19KGYucmFuZ2UscC5yYW5nZSk7dS5maXRFeHRlbnQoaCxnKTt2YXIgbT10aGlzLmJvdW5kcz11LmdldEJvdW5kcyhnKSx2PXRoaXMuZml0U2NhbGU9dS5zY2FsZSgpLHk9dS50cmFuc2xhdGUoKTtpZighaXNGaW5pdGUobVswXVswXSl8fCFpc0Zpbml0ZShtWzBdWzFdKXx8IWlzRmluaXRlKG1bMV1bMF0pfHwhaXNGaW5pdGUobVsxXVsxXSl8fGlzTmFOKHlbMF0pfHxpc05hTih5WzBdKSl7Zm9yKHZhciB4PXRoaXMuZ3JhcGhEaXYsYj1bInByb2plY3Rpb24ucm90YXRpb24iLCJjZW50ZXIiLCJsb25heGlzLnJhbmdlIiwibGF0YXhpcy5yYW5nZSJdLF89IkludmFsaWQgZ2VvIHNldHRpbmdzLCByZWxheW91dCdpbmcgdG8gZGVmYXVsdCB2aWV3LiIsdz17fSxrPTA7azxiLmxlbmd0aDtrKyspd1t0aGlzLmlkKyIuIitiW2tdXT1udWxsO3JldHVybiB0aGlzLnZpZXdJbml0aWFsPW51bGwsYS53YXJuKF8pLHguX3Byb21pc2VzLnB1c2goaS5jYWxsKCJyZWxheW91dCIseCx3KSksX312YXIgTT10aGlzLm1pZFB0PVsobVswXVswXSttWzFdWzBdKS8yLChtWzBdWzFdK21bMV1bMV0pLzJdO2lmKHUuc2NhbGUocy5zY2FsZSp2KS50cmFuc2xhdGUoW3lbMF0rKE1bMF0teVswXSkseVsxXSsoTVsxXS15WzFdKV0pLmNsaXBFeHRlbnQobSksZS5faXNBbGJlcnNVc2Epe3ZhciBBPXUoW2MubG9uLGMubGF0XSksVD11LnRyYW5zbGF0ZSgpO3UudHJhbnNsYXRlKFtUWzBdLShBWzBdLVRbMF0pLFRbMV0tKEFbMV0tVFsxXSldKX19LHkudXBkYXRlQmFzZUxheWVycz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMsaT1yLnRvcG9qc29uLGE9ci5sYXllcnMsbD1yLmJhc2VQYXRocztmdW5jdGlvbiBjKHQpe3JldHVybiJsb25heGlzIj09PXR8fCJsYXRheGlzIj09PXR9ZnVuY3Rpb24gdSh0KXtyZXR1cm4gQm9vbGVhbihkLmxpbmVMYXllcnNbdF0pfWZ1bmN0aW9uIGgodCl7cmV0dXJuIEJvb2xlYW4oZC5maWxsTGF5ZXJzW3RdKX12YXIgZj0odGhpcy5oYXNDaG9yb3BsZXRoP2QubGF5ZXJzRm9yQ2hvcm9wbGV0aDpkLmxheWVycykuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB1KHQpfHxoKHQpP2VbInNob3ciK3RdOiFjKHQpfHxlW3RdLnNob3dncmlkfSkscD1yLmZyYW1ld29yay5zZWxlY3RBbGwoIi5sYXllciIpLmRhdGEoZixTdHJpbmcpO3AuZXhpdCgpLmVhY2goZnVuY3Rpb24odCl7ZGVsZXRlIGFbdF0sZGVsZXRlIGxbdF0sbi5zZWxlY3QodGhpcykucmVtb3ZlKCl9KSxwLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLGZ1bmN0aW9uKHQpe3JldHVybiJsYXllciAiK3R9KS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPWFbdF09bi5zZWxlY3QodGhpcyk7ImJnIj09PXQ/ci5iZ1JlY3Q9ZS5hcHBlbmQoInJlY3QiKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhbGwiKTpjKHQpP2xbdF09ZS5hcHBlbmQoInBhdGgiKS5zdHlsZSgiZmlsbCIsIm5vbmUiKToiYmFja3Bsb3QiPT09dD9lLmFwcGVuZCgiZyIpLmNsYXNzZWQoImNob3JvcGxldGhsYXllciIsITApOiJmcm9udHBsb3QiPT09dD9lLmFwcGVuZCgiZyIpLmNsYXNzZWQoInNjYXR0ZXJsYXllciIsITApOnUodCk/bFt0XT1lLmFwcGVuZCgicGF0aCIpLnN0eWxlKCJmaWxsIiwibm9uZSIpLnN0eWxlKCJzdHJva2UtbWl0ZXJsaW1pdCIsMik6aCh0KSYmKGxbdF09ZS5hcHBlbmQoInBhdGgiKS5zdHlsZSgic3Ryb2tlIiwibm9uZSIpKX0pLHAub3JkZXIoKSxwLmVhY2goZnVuY3Rpb24odCl7dmFyIHI9bFt0XSxhPWQubGF5ZXJOYW1lVG9BZGplY3RpdmVbdF07ImZyYW1lIj09PXQ/ci5kYXR1bShkLnNwaGVyZVNWRyk6dSh0KXx8aCh0KT9yLmRhdHVtKG0oaSxpLm9iamVjdHNbdF0pKTpjKHQpJiZyLmRhdHVtKGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVt0XS5kdGljayxpPWQuc2NvcGVEZWZhdWx0c1tlLnNjb3BlXSxhPWkubG9uYXhpc1JhbmdlLG89aS5sYXRheGlzUmFuZ2Uscz0ibG9uYXhpcyI9PT10P1tyXTpbMCxyXTtyZXR1cm4gbi5nZW8uZ3JhdGljdWxlKCkuZXh0ZW50KFtbYVswXSxvWzBdXSxbYVsxXSxvWzFdXV0pLnN0ZXAocyl9KHQsZSkpLmNhbGwoby5zdHJva2UsZVt0XS5ncmlkY29sb3IpLmNhbGwocy5kYXNoTGluZSwiIixlW3RdLmdyaWR3aWR0aCksdSh0KT9yLmNhbGwoby5zdHJva2UsZVthKyJjb2xvciJdKS5jYWxsKHMuZGFzaExpbmUsIiIsZVthKyJ3aWR0aCJdKTpoKHQpJiZyLmNhbGwoby5maWxsLGVbYSsiY29sb3IiXSl9KX0seS51cGRhdGVEaW1zPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5ib3VuZHMsbj0oZS5mcmFtZXdpZHRofHwwKS8yLGk9clswXVswXS1uLGE9clswXVsxXS1uLGw9clsxXVswXS1pK24sYz1yWzFdWzFdLWErbjtzLnNldFJlY3QodGhpcy5jbGlwUmVjdCxpLGEsbCxjKSx0aGlzLmJnUmVjdC5jYWxsKHMuc2V0UmVjdCxpLGEsbCxjKS5jYWxsKG8uZmlsbCxlLmJnY29sb3IpLHRoaXMueGF4aXMuX29mZnNldD1pLHRoaXMueGF4aXMuX2xlbmd0aD1sLHRoaXMueWF4aXMuX29mZnNldD1hLHRoaXMueWF4aXMuX2xlbmd0aD1jfSx5LnVwZGF0ZUZ4PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcyxhPXIuZ3JhcGhEaXYsbz1yLmJnUmVjdCxzPXQuZHJhZ21vZGU7aWYoIXIuaXNTdGF0aWMpe2lmKCJwYW4iPT09cylvLm5vZGUoKS5vbm1vdXNlZG93bj1udWxsLG8uY2FsbChwKHIsZSkpLG8ub24oImRibGNsaWNrLnpvb20iLGZ1bmN0aW9uKCl7dmFyIHQ9ci52aWV3SW5pdGlhbCxlPXt9O2Zvcih2YXIgbiBpbiB0KWVbci5pZCsiLiIrbl09dFtuXTtpLmNhbGwoInJlbGF5b3V0IixhLGUpLGEuZW1pdCgicGxvdGx5X2RvdWJsZWNsaWNrIixudWxsKX0pO2Vsc2UgaWYoInNlbGVjdCI9PT1zfHwibGFzc28iPT09cyl7dmFyIGM7by5vbigiLnpvb20iLG51bGwpLCJzZWxlY3QiPT09cz9jPWZ1bmN0aW9uKHQsZSl7KHQucmFuZ2U9e30pW3IuaWRdPVtkKFtlLnhtaW4sZS55bWluXSksZChbZS54bWF4LGUueW1heF0pXX06Imxhc3NvIj09PXMmJihjPWZ1bmN0aW9uKHQsZSxuKXsodC5sYXNzb1BvaW50cz17fSlbci5pZF09bi5maWx0ZXJlZC5tYXAoZCl9KTt2YXIgdT17ZWxlbWVudDpyLmJnUmVjdC5ub2RlKCksZ2Q6YSxwbG90aW5mbzp7eGF4aXM6ci54YXhpcyx5YXhpczpyLnlheGlzLGZpbGxSYW5nZUl0ZW1zOmN9LHhheGVzOltyLnhheGlzXSx5YXhlczpbci55YXhpc10sc3VicGxvdDpyLmlkLGNsaWNrRm46ZnVuY3Rpb24oZSl7Mj09PWUmJnQuX3pvb21sYXllci5zZWxlY3RBbGwoIi5zZWxlY3Qtb3V0bGluZSIpLnJlbW92ZSgpfSxwcmVwRm46ZnVuY3Rpb24odCxlLHIpe2YodCxlLHIsdSxzKX19O2guaW5pdCh1KX1vLm9uKCJtb3VzZW1vdmUiLGZ1bmN0aW9uKCl7dmFyIHQ9ci5wcm9qZWN0aW9uLmludmVydChuLm1vdXNlKHRoaXMpKTtpZighdHx8aXNOYU4odFswXSl8fGlzTmFOKHRbMV0pKXJldHVybiBoLnVuaG92ZXIoYSxuLmV2ZW50KTtyLnhheGlzLnAyYz1mdW5jdGlvbigpe3JldHVybiB0WzBdfSxyLnlheGlzLnAyYz1mdW5jdGlvbigpe3JldHVybiB0WzFdfSxsLmhvdmVyKGEsbi5ldmVudCxyLmlkKX0pLG8ub24oIm1vdXNlb3V0IixmdW5jdGlvbigpe2gudW5ob3ZlcihhLG4uZXZlbnQpfSksby5vbigiY2xpY2siLGZ1bmN0aW9uKCl7bC5jbGljayhhLG4uZXZlbnQpfSl9ZnVuY3Rpb24gZCh0KXtyZXR1cm4gci5wcm9qZWN0aW9uLmludmVydChbdFswXStyLnhheGlzLl9vZmZzZXQsdFsxXStyLnlheGlzLl9vZmZzZXRdKX19LHkubWFrZUZyYW1ld29yaz1mdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10LmdyYXBoRGl2Ll9mdWxsTGF5b3V0LHI9ImNsaXAiK2UuX3VpZCt0LmlkO3QuY2xpcERlZj1lLl9jbGlwcy5hcHBlbmQoImNsaXBQYXRoIikuYXR0cigiaWQiLHIpLHQuY2xpcFJlY3Q9dC5jbGlwRGVmLmFwcGVuZCgicmVjdCIpLHQuZnJhbWV3b3JrPW4uc2VsZWN0KHQuY29udGFpbmVyKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImdlbyAiK3QuaWQpLmNhbGwocy5zZXRDbGlwVXJsLHIpLHQucHJvamVjdD1mdW5jdGlvbihlKXt2YXIgcj10LnByb2plY3Rpb24oZSk7cmV0dXJuIHI/W3JbMF0tdC54YXhpcy5fb2Zmc2V0LHJbMV0tdC55YXhpcy5fb2Zmc2V0XTpbbnVsbCxudWxsXX0sdC54YXhpcz17X2lkOiJ4IixjMnA6ZnVuY3Rpb24oZSl7cmV0dXJuIHQucHJvamVjdChlKVswXX19LHQueWF4aXM9e19pZDoieSIsYzJwOmZ1bmN0aW9uKGUpe3JldHVybiB0LnByb2plY3QoZSlbMV19fSx0Lm1vY2tBeGlzPXt0eXBlOiJsaW5lYXIiLHNob3dleHBvbmVudDoiYWxsIixleHBvbmVudGZvcm1hdDoiQiJ9LHUuc2V0Q29udmVydCh0Lm1vY2tBeGlzLGUpfSx5LnNhdmVWaWV3SW5pdGlhbD1mdW5jdGlvbih0KXt2YXIgZT10LmNlbnRlcnx8e30scj10LnByb2plY3Rpb24sbj1yLnJvdGF0aW9ufHx7fTt0Ll9pc1Njb3BlZD90aGlzLnZpZXdJbml0aWFsPXsiY2VudGVyLmxvbiI6ZS5sb24sImNlbnRlci5sYXQiOmUubGF0LCJwcm9qZWN0aW9uLnNjYWxlIjpyLnNjYWxlfTp0Ll9pc0NsaXBwZWQ/dGhpcy52aWV3SW5pdGlhbD17InByb2plY3Rpb24uc2NhbGUiOnIuc2NhbGUsInByb2plY3Rpb24ucm90YXRpb24ubG9uIjpuLmxvbiwicHJvamVjdGlvbi5yb3RhdGlvbi5sYXQiOm4ubGF0fTp0aGlzLnZpZXdJbml0aWFsPXsiY2VudGVyLmxvbiI6ZS5sb24sImNlbnRlci5sYXQiOmUubGF0LCJwcm9qZWN0aW9uLnNjYWxlIjpyLnNjYWxlLCJwcm9qZWN0aW9uLnJvdGF0aW9uLmxvbiI6bi5sb259fSx5LnJlbmRlcj1mdW5jdGlvbigpe3ZhciB0LGU9dGhpcy5wcm9qZWN0aW9uLHI9ZS5nZXRQYXRoKCk7ZnVuY3Rpb24gbih0KXt2YXIgcj1lKHQubG9ubGF0KTtyZXR1cm4gcj8idHJhbnNsYXRlKCIrclswXSsiLCIrclsxXSsiKSI6bnVsbH1mdW5jdGlvbiBpKHQpe3JldHVybiBlLmlzTG9uTGF0T3ZlckVkZ2VzKHQubG9ubGF0KT8ibm9uZSI6bnVsbH1mb3IodCBpbiB0aGlzLmJhc2VQYXRocyl0aGlzLmJhc2VQYXRoc1t0XS5hdHRyKCJkIixyKTtmb3IodCBpbiB0aGlzLmRhdGFQYXRocyl0aGlzLmRhdGFQYXRoc1t0XS5hdHRyKCJkIixmdW5jdGlvbih0KXtyZXR1cm4gcih0Lmdlb2pzb24pfSk7Zm9yKHQgaW4gdGhpcy5kYXRhUG9pbnRzKXRoaXMuZGF0YVBvaW50c1t0XS5hdHRyKCJkaXNwbGF5IixpKS5hdHRyKCJ0cmFuc2Zvcm0iLG4pfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo1NTgsIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQiOjU4MCwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo1ODMsIi4uLy4uL2NvbXBvbmVudHMvZngiOjYwMCwiLi4vLi4vbGliIjo2ODQsIi4uLy4uL2xpYi90b3BvanNvbl91dGlscyI6NzExLCIuLi8uLi9yZWdpc3RyeSI6ODE3LCIuLi9jYXJ0ZXNpYW4vYXhlcyI6NzMyLCIuLi9jYXJ0ZXNpYW4vc2VsZWN0Ijo3NDksIi4uL3Bsb3RzIjo3OTUsIi4vY29uc3RhbnRzIjo3NjAsIi4vcHJvamVjdGlvbnMiOjc2NiwiLi96b29tIjo3NjcsZDM6MTQ3LCJ0b3BvanNvbi1jbGllbnQiOjUwMn1dLDc2MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2dlbyIpLGk9dCgiLi4vLi4vcGxvdHMvZ2V0X2RhdGEiKS5nZXRTdWJwbG90Q2FsY0RhdGEsYT10KCIuLi8uLi9saWIiKS5jb3VudGVyUmVnZXgsbz0iZ2VvIjtyLm5hbWU9byxyLmF0dHI9byxyLmlkUm9vdD1vLHIuaWRSZWdleD1yLmF0dHJSZWdleD1hKG8pLHIuYXR0cmlidXRlcz10KCIuL2xheW91dC9hdHRyaWJ1dGVzIiksci5sYXlvdXRBdHRyaWJ1dGVzPXQoIi4vbGF5b3V0L2xheW91dF9hdHRyaWJ1dGVzIiksci5zdXBwbHlMYXlvdXREZWZhdWx0cz10KCIuL2xheW91dC9kZWZhdWx0cyIpLHIucGxvdD1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9dC5jYWxjZGF0YSxhPWUuX3N1YnBsb3RzLmdlbzt2b2lkIDA9PT13aW5kb3cuUGxvdGx5R2VvQXNzZXRzJiYod2luZG93LlBsb3RseUdlb0Fzc2V0cz17dG9wb2pzb246e319KTtmb3IodmFyIHM9MDtzPGEubGVuZ3RoO3MrKyl7dmFyIGw9YVtzXSxjPWkocixvLGwpLHU9ZVtsXS5fc3VicGxvdDt1fHwodT1uKHtpZDpsLGdyYXBoRGl2OnQsY29udGFpbmVyOmUuX2dlb2xheWVyLm5vZGUoKSx0b3BvanNvblVSTDp0Ll9jb250ZXh0LnRvcG9qc29uVVJMLHN0YXRpY1Bsb3Q6dC5fY29udGV4dC5zdGF0aWNQbG90fSksZVtsXS5fc3VicGxvdD11KSx1LnBsb3QoYyxlLHQuX3Byb21pc2VzKX19LHIuY2xlYW49ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPW4uX3N1YnBsb3RzLmdlb3x8W10sYT0wO2E8aS5sZW5ndGg7YSsrKXt2YXIgbz1pW2FdLHM9bltvXS5fc3VicGxvdDshZVtvXSYmcyYmKHMuZnJhbWV3b3JrLnJlbW92ZSgpLHMuY2xpcERlZi5yZW1vdmUoKSl9fSxyLnVwZGF0ZUZ4PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll9zdWJwbG90cy5nZW8scj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj10W2Vbcl1dO24uX3N1YnBsb3QudXBkYXRlRngodCxuKX19fSx7Ii4uLy4uL2xpYiI6Njg0LCIuLi8uLi9wbG90cy9nZXRfZGF0YSI6NzY4LCIuL2dlbyI6NzYxLCIuL2xheW91dC9hdHRyaWJ1dGVzIjo3NjMsIi4vbGF5b3V0L2RlZmF1bHRzIjo3NjQsIi4vbGF5b3V0L2xheW91dF9hdHRyaWJ1dGVzIjo3NjV9XSw3NjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtnZW86e3ZhbFR5cGU6InN1YnBsb3RpZCIsZGZsdDoiZ2VvIixlZGl0VHlwZToiY2FsYyJ9fX0se31dLDc2NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9zdWJwbG90X2RlZmF1bHRzIiksaT10KCIuLi9jb25zdGFudHMiKSxhPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxvPWkuYXhlc05hbWVzO2Z1bmN0aW9uIHModCxlLHIpe3ZhciBuPXIoInJlc29sdXRpb24iKSxhPXIoInNjb3BlIikscz1pLnNjb3BlRGVmYXVsdHNbYV0sbD1yKCJwcm9qZWN0aW9uLnR5cGUiLHMucHJvalR5cGUpLGM9ZS5faXNBbGJlcnNVc2E9ImFsYmVycyB1c2EiPT09bDtjJiYoYT1lLnNjb3BlPSJ1c2EiKTt2YXIgdT1lLl9pc1Njb3BlZD0id29ybGQiIT09YSxoPWUuX2lzQ29uaWM9LTEhPT1sLmluZGV4T2YoImNvbmljIik7ZS5faXNDbGlwcGVkPSEhaS5sb25heGlzU3BhbltsXTtmb3IodmFyIGY9MDtmPG8ubGVuZ3RoO2YrKyl7dmFyIHAsZD1vW2ZdLGc9WzMwLDEwXVtmXTtpZih1KXA9c1tkKyJSYW5nZSJdO2Vsc2V7dmFyIG09aVtkKyJTcGFuIl0sdj0obVtsXXx8bVsiKiJdKS8yLHk9cigicHJvamVjdGlvbi5yb3RhdGlvbi4iK2Quc3Vic3RyKDAsMykscy5wcm9qUm90YXRlW2ZdKTtwPVt5LXYseSt2XX12YXIgeD1yKGQrIi5yYW5nZSIscCk7cihkKyIudGljazAiLHhbMF0pLHIoZCsiLmR0aWNrIixnKSxyKGQrIi5zaG93Z3JpZCIpJiYocihkKyIuZ3JpZGNvbG9yIikscihkKyIuZ3JpZHdpZHRoIikpfXZhciBiPWUubG9uYXhpcy5yYW5nZSxfPWUubGF0YXhpcy5yYW5nZSx3PWJbMF0saz1iWzFdO3c+MCYmazwwJiYoays9MzYwKTt2YXIgTSxBLFQsUz0odytrKS8yO2lmKCFjKXt2YXIgRT11P3MucHJvalJvdGF0ZTpbUywwLDBdO009cigicHJvamVjdGlvbi5yb3RhdGlvbi5sb24iLEVbMF0pLHIoInByb2plY3Rpb24ucm90YXRpb24ubGF0IixFWzFdKSxyKCJwcm9qZWN0aW9uLnJvdGF0aW9uLnJvbGwiLEVbMl0pLHIoInNob3djb2FzdGxpbmVzIiwhdSkmJihyKCJjb2FzdGxpbmVjb2xvciIpLHIoImNvYXN0bGluZXdpZHRoIikpLHIoInNob3dvY2VhbiIpJiZyKCJvY2VhbmNvbG9yIil9KGM/KEE9LTk2LjYsVD0zOC43KTooQT11P1M6TSxUPShfWzBdK19bMV0pLzIpLHIoImNlbnRlci5sb24iLEEpLHIoImNlbnRlci5sYXQiLFQpLGgpJiZyKCJwcm9qZWN0aW9uLnBhcmFsbGVscyIscy5wcm9qUGFyYWxsZWxzfHxbMCw2MF0pO3IoInByb2plY3Rpb24uc2NhbGUiKSxyKCJzaG93bGFuZCIpJiZyKCJsYW5kY29sb3IiKSxyKCJzaG93bGFrZXMiKSYmcigibGFrZWNvbG9yIikscigic2hvd3JpdmVycyIpJiYocigicml2ZXJjb2xvciIpLHIoInJpdmVyd2lkdGgiKSkscigic2hvd2NvdW50cmllcyIsdSYmInVzYSIhPT1hKSYmKHIoImNvdW50cnljb2xvciIpLHIoImNvdW50cnl3aWR0aCIpKSwoInVzYSI9PT1hfHwibm9ydGggYW1lcmljYSI9PT1hJiY1MD09PW4pJiYocigic2hvd3N1YnVuaXRzIiwhMCkscigic3VidW5pdGNvbG9yIikscigic3VidW5pdHdpZHRoIikpLHV8fHIoInNob3dmcmFtZSIsITApJiYocigiZnJhbWVjb2xvciIpLHIoImZyYW1ld2lkdGgiKSkscigiYmdjb2xvciIpfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7bih0LGUscix7dHlwZToiZ2VvIixhdHRyaWJ1dGVzOmEsaGFuZGxlRGVmYXVsdHM6cyxwYXJ0aXRpb246InkifSl9fSx7Ii4uLy4uL3N1YnBsb3RfZGVmYXVsdHMiOjgwOSwiLi4vY29uc3RhbnRzIjo3NjAsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjc2NX1dLDc2NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL2RvbWFpbiIpLmF0dHJpYnV0ZXMsYT10KCIuLi9jb25zdGFudHMiKSxvPXQoIi4uLy4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbCxzPXtyYW5nZTp7dmFsVHlwZToiaW5mb19hcnJheSIsaXRlbXM6W3t2YWxUeXBlOiJudW1iZXIifSx7dmFsVHlwZToibnVtYmVyIn1dfSxzaG93Z3JpZDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sdGljazA6e3ZhbFR5cGU6Im51bWJlciJ9LGR0aWNrOnt2YWxUeXBlOiJudW1iZXIifSxncmlkY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0Om4ubGlnaHRMaW5lfSxncmlkd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxfX07ZS5leHBvcnRzPW8oe2RvbWFpbjppKHtuYW1lOiJnZW8ifSx7fSkscmVzb2x1dGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsxMTAsNTBdLGRmbHQ6MTEwLGNvZXJjZU51bWJlcjohMH0sc2NvcGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpPYmplY3Qua2V5cyhhLnNjb3BlRGVmYXVsdHMpLGRmbHQ6IndvcmxkIn0scHJvamVjdGlvbjp7dHlwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOk9iamVjdC5rZXlzKGEucHJvak5hbWVzKX0scm90YXRpb246e2xvbjp7dmFsVHlwZToibnVtYmVyIn0sbGF0Ont2YWxUeXBlOiJudW1iZXIifSxyb2xsOnt2YWxUeXBlOiJudW1iZXIifX0scGFyYWxsZWxzOnt2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6Im51bWJlciJ9LHt2YWxUeXBlOiJudW1iZXIifV19LHNjYWxlOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MX19LGNlbnRlcjp7bG9uOnt2YWxUeXBlOiJudW1iZXIifSxsYXQ6e3ZhbFR5cGU6Im51bWJlciJ9fSxzaG93Y29hc3RsaW5lczp7dmFsVHlwZToiYm9vbGVhbiJ9LGNvYXN0bGluZWNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpuLmRlZmF1bHRMaW5lfSxjb2FzdGxpbmV3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjF9LHNob3dsYW5kOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxsYW5kY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmEubGFuZENvbG9yfSxzaG93b2NlYW46e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LG9jZWFuY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmEud2F0ZXJDb2xvcn0sc2hvd2xha2VzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxsYWtlY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmEud2F0ZXJDb2xvcn0sc2hvd3JpdmVyczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0scml2ZXJjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6YS53YXRlckNvbG9yfSxyaXZlcndpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MX0sc2hvd2NvdW50cmllczp7dmFsVHlwZToiYm9vbGVhbiJ9LGNvdW50cnljb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6bi5kZWZhdWx0TGluZX0sY291bnRyeXdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MX0sc2hvd3N1YnVuaXRzOnt2YWxUeXBlOiJib29sZWFuIn0sc3VidW5pdGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpuLmRlZmF1bHRMaW5lfSxzdWJ1bml0d2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxfSxzaG93ZnJhbWU6e3ZhbFR5cGU6ImJvb2xlYW4ifSxmcmFtZWNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpuLmRlZmF1bHRMaW5lfSxmcmFtZXdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MX0sYmdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6bi5iYWNrZ3JvdW5kfSxsb25heGlzOnMsbGF0YXhpczpzfSwicGxvdCIsImZyb20tcm9vdCIpfSx7Ii4uLy4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyI6NTU3LCIuLi8uLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo3MTUsIi4uLy4uL2RvbWFpbiI6NzU3LCIuLi9jb25zdGFudHMiOjc2MH1dLDc2NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0LGUpe3JldHVybnt0eXBlOiJGZWF0dXJlIixpZDp0LmlkLHByb3BlcnRpZXM6dC5wcm9wZXJ0aWVzLGdlb21ldHJ5OnIodC5nZW9tZXRyeSxlKX19ZnVuY3Rpb24gcihlLG4pe2lmKCFlKXJldHVybiBudWxsO2lmKCJHZW9tZXRyeUNvbGxlY3Rpb24iPT09ZS50eXBlKXJldHVybnt0eXBlOiJHZW9tZXRyeUNvbGxlY3Rpb24iLGdlb21ldHJpZXM6b2JqZWN0Lmdlb21ldHJpZXMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiByKHQsbil9KX07aWYoIWMuaGFzT3duUHJvcGVydHkoZS50eXBlKSlyZXR1cm4gbnVsbDt2YXIgaT1jW2UudHlwZV07cmV0dXJuIHQuZ2VvLnN0cmVhbShlLG4oaSkpLGkucmVzdWx0KCl9dC5nZW8ucHJvamVjdD1mdW5jdGlvbih0LGUpe3ZhciBpPWUuc3RyZWFtO2lmKCFpKXRocm93IG5ldyBFcnJvcigibm90IHlldCBzdXBwb3J0ZWQiKTtyZXR1cm4odCYmbi5oYXNPd25Qcm9wZXJ0eSh0LnR5cGUpP25bdC50eXBlXTpyKSh0LGkpfTt2YXIgbj17RmVhdHVyZTplLEZlYXR1cmVDb2xsZWN0aW9uOmZ1bmN0aW9uKHQscil7cmV0dXJue3R5cGU6IkZlYXR1cmVDb2xsZWN0aW9uIixmZWF0dXJlczp0LmZlYXR1cmVzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gZSh0LHIpfSl9fX0saT1bXSxhPVtdLG89e3BvaW50OmZ1bmN0aW9uKHQsZSl7aS5wdXNoKFt0LGVdKX0scmVzdWx0OmZ1bmN0aW9uKCl7dmFyIHQ9aS5sZW5ndGg/aS5sZW5ndGg8Mj97dHlwZToiUG9pbnQiLGNvb3JkaW5hdGVzOmlbMF19Ont0eXBlOiJNdWx0aVBvaW50Iixjb29yZGluYXRlczppfTpudWxsO3JldHVybiBpPVtdLHR9fSxzPXtsaW5lU3RhcnQ6dSxwb2ludDpmdW5jdGlvbih0LGUpe2kucHVzaChbdCxlXSl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtpLmxlbmd0aCYmKGEucHVzaChpKSxpPVtdKX0scmVzdWx0OmZ1bmN0aW9uKCl7dmFyIHQ9YS5sZW5ndGg/YS5sZW5ndGg8Mj97dHlwZToiTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6YVswXX06e3R5cGU6Ik11bHRpTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6YX06bnVsbDtyZXR1cm4gYT1bXSx0fX0sbD17cG9seWdvblN0YXJ0OnUsbGluZVN0YXJ0OnUscG9pbnQ6ZnVuY3Rpb24odCxlKXtpLnB1c2goW3QsZV0pfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dmFyIHQ9aS5sZW5ndGg7aWYodCl7ZG97aS5wdXNoKGlbMF0uc2xpY2UoKSl9d2hpbGUoKyt0PDQpO2EucHVzaChpKSxpPVtdfX0scG9seWdvbkVuZDp1LHJlc3VsdDpmdW5jdGlvbigpe2lmKCFhLmxlbmd0aClyZXR1cm4gbnVsbDt2YXIgdD1bXSxlPVtdO3JldHVybiBhLmZvckVhY2goZnVuY3Rpb24ocil7IWZ1bmN0aW9uKHQpe2lmKChlPXQubGVuZ3RoKTw0KXJldHVybiExO2Zvcih2YXIgZSxyPTAsbj10W2UtMV1bMV0qdFswXVswXS10W2UtMV1bMF0qdFswXVsxXTsrK3I8ZTspbis9dFtyLTFdWzFdKnRbcl1bMF0tdFtyLTFdWzBdKnRbcl1bMV07cmV0dXJuIG48PTB9KHIpP2UucHVzaChyKTp0LnB1c2goW3JdKX0pLGUuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgcj1lWzBdO3Quc29tZShmdW5jdGlvbih0KXtpZihmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1lWzBdLG49ZVsxXSxpPSExLGE9MCxvPXQubGVuZ3RoLHM9by0xO2E8bztzPWErKyl7dmFyIGw9dFthXSxjPWxbMF0sdT1sWzFdLGg9dFtzXSxmPWhbMF0scD1oWzFdO3U+bl5wPm4mJnI8KGYtYykqKG4tdSkvKHAtdSkrYyYmKGk9IWkpfXJldHVybiBpfSh0WzBdLHIpKXJldHVybiB0LnB1c2goZSksITB9KXx8dC5wdXNoKFtlXSl9KSxhPVtdLHQubGVuZ3RoP3QubGVuZ3RoPjE/e3R5cGU6Ik11bHRpUG9seWdvbiIsY29vcmRpbmF0ZXM6dH06e3R5cGU6IlBvbHlnb24iLGNvb3JkaW5hdGVzOnRbMF19Om51bGx9fSxjPXtQb2ludDpvLE11bHRpUG9pbnQ6byxMaW5lU3RyaW5nOnMsTXVsdGlMaW5lU3RyaW5nOnMsUG9seWdvbjpsLE11bHRpUG9seWdvbjpsLFNwaGVyZTpsfTtmdW5jdGlvbiB1KCl7fXZhciBoPTFlLTYsZj1oKmgscD1NYXRoLlBJLGQ9cC8yLGc9KE1hdGguc3FydChwKSxwLzE4MCksbT0xODAvcDtmdW5jdGlvbiB2KHQpe3JldHVybiB0PjE/ZDp0PC0xPy1kOk1hdGguYXNpbih0KX1mdW5jdGlvbiB5KHQpe3JldHVybiB0PjE/MDp0PC0xP3A6TWF0aC5hY29zKHQpfXZhciB4PXQuZ2VvLnByb2plY3Rpb24sYj10Lmdlby5wcm9qZWN0aW9uTXV0YXRvcjtmdW5jdGlvbiBfKHQsZSl7dmFyIHI9KDIrZCkqTWF0aC5zaW4oZSk7ZS89Mjtmb3IodmFyIG49MCxpPTEvMDtuPDEwJiZNYXRoLmFicyhpKT5oO24rKyl7dmFyIGE9TWF0aC5jb3MoZSk7ZS09aT0oZStNYXRoLnNpbihlKSooYSsyKS1yKS8oMiphKigxK2EpKX1yZXR1cm5bMi9NYXRoLnNxcnQocCooNCtwKSkqdCooMStNYXRoLmNvcyhlKSksMipNYXRoLnNxcnQocC8oNCtwKSkqTWF0aC5zaW4oZSldfXQuZ2VvLmludGVycnVwdD1mdW5jdGlvbihlKXt2YXIgcixuPVtbW1stcCwwXSxbMCxkXSxbcCwwXV1dLFtbWy1wLDBdLFswLC1kXSxbcCwwXV1dXTtmdW5jdGlvbiBpKHQscil7Zm9yKHZhciBpPXI8MD8tMToxLGE9blsrKHI8MCldLG89MCxzPWEubGVuZ3RoLTE7bzxzJiZ0PmFbb11bMl1bMF07KytvKTt2YXIgbD1lKHQtYVtvXVsxXVswXSxyKTtyZXR1cm4gbFswXSs9ZShhW29dWzFdWzBdLGkqcj5pKmFbb11bMF1bMV0/YVtvXVswXVsxXTpyKVswXSxsfWUuaW52ZXJ0JiYoaS5pbnZlcnQ9ZnVuY3Rpb24odCxhKXtmb3IodmFyIG89clsrKGE8MCldLHM9blsrKGE8MCldLGM9MCx1PW8ubGVuZ3RoO2M8dTsrK2Mpe3ZhciBoPW9bY107aWYoaFswXVswXTw9dCYmdDxoWzFdWzBdJiZoWzBdWzFdPD1hJiZhPGhbMV1bMV0pe3ZhciBmPWUuaW52ZXJ0KHQtZShzW2NdWzFdWzBdLDApWzBdLGEpO3JldHVybiBmWzBdKz1zW2NdWzFdWzBdLGwoaShmWzBdLGZbMV0pLFt0LGFdKT9mOm51bGx9fX0pO3ZhciBhPXQuZ2VvLnByb2plY3Rpb24oaSksbz1hLnN0cmVhbTtmdW5jdGlvbiBzKHQsZSl7Zm9yKHZhciByLG4saSxhPS0xLG89dC5sZW5ndGgscz10WzBdLGw9W107KythPG87KXtuPSgocj10W2FdKVswXS1zWzBdKS9lLGk9KHJbMV0tc1sxXSkvZTtmb3IodmFyIGM9MDtjPGU7KytjKWwucHVzaChbc1swXStjKm4sc1sxXStjKmldKTtzPXJ9cmV0dXJuIGwucHVzaChyKSxsfWZ1bmN0aW9uIGwodCxlKXtyZXR1cm4gTWF0aC5hYnModFswXS1lWzBdKTxoJiZNYXRoLmFicyh0WzFdLWVbMV0pPGh9cmV0dXJuIGEuc3RyZWFtPWZ1bmN0aW9uKGUpe3ZhciByPWEucm90YXRlKCksaT1vKGUpLGw9KGEucm90YXRlKFswLDBdKSxvKGUpKTtyZXR1cm4gYS5yb3RhdGUociksaS5zcGhlcmU9ZnVuY3Rpb24oKXt0Lmdlby5zdHJlYW0oZnVuY3Rpb24oKXtmb3IodmFyIGU9MWUtNixyPVtdLGk9MCxhPW5bMF0ubGVuZ3RoO2k8YTsrK2kpe3ZhciBvPW5bMF1baV0sbD0xODAqb1swXVswXS9wLGM9MTgwKm9bMF1bMV0vcCx1PTE4MCpvWzFdWzFdL3AsaD0xODAqb1syXVswXS9wLGY9MTgwKm9bMl1bMV0vcDtyLnB1c2gocyhbW2wrZSxjK2VdLFtsK2UsdS1lXSxbaC1lLHUtZV0sW2gtZSxmK2VdXSwzMCkpfWZvcih2YXIgaT1uWzFdLmxlbmd0aC0xO2k+PTA7LS1pKXt2YXIgbz1uWzFdW2ldLGw9MTgwKm9bMF1bMF0vcCxjPTE4MCpvWzBdWzFdL3AsdT0xODAqb1sxXVsxXS9wLGg9MTgwKm9bMl1bMF0vcCxmPTE4MCpvWzJdWzFdL3A7ci5wdXNoKHMoW1toLWUsZi1lXSxbaC1lLHUrZV0sW2wrZSx1K2VdLFtsK2UsYy1lXV0sMzApKX1yZXR1cm57dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6W3QubWVyZ2UocildfX0oKSxsKX0saX0sYS5sb2Jlcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuW1t0WzBdWzBdKnAvMTgwLHRbMF1bMV0qcC8xODBdLFt0WzFdWzBdKnAvMTgwLHRbMV1bMV0qcC8xODBdLFt0WzJdWzBdKnAvMTgwLHRbMl1bMV0qcC8xODBdXX0pfSkscj1uLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAoZnVuY3Rpb24odCl7dmFyIHIsbj1lKHRbMF1bMF0sdFswXVsxXSlbMF0saT1lKHRbMl1bMF0sdFsyXVsxXSlbMF0sYT1lKHRbMV1bMF0sdFswXVsxXSlbMV0sbz1lKHRbMV1bMF0sdFsxXVsxXSlbMV07cmV0dXJuIGE+byYmKHI9YSxhPW8sbz1yKSxbW24sYV0sW2ksb11dfSl9KSxhKTpuLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuW1sxODAqdFswXVswXS9wLDE4MCp0WzBdWzFdL3BdLFsxODAqdFsxXVswXS9wLDE4MCp0WzFdWzFdL3BdLFsxODAqdFsyXVswXS9wLDE4MCp0WzJdWzFdL3BdXX0pfSl9LGF9LF8uaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9LjUqZSpNYXRoLnNxcnQoKDQrcCkvcCksbj12KHIpLGk9TWF0aC5jb3Mobik7cmV0dXJuW3QvKDIvTWF0aC5zcXJ0KHAqKDQrcCkpKigxK2kpKSx2KChuK3IqKGkrMikpLygyK2QpKV19LCh0Lmdlby5lY2tlcnQ0PWZ1bmN0aW9uKCl7cmV0dXJuIHgoXyl9KS5yYXc9Xzt2YXIgdz10Lmdlby5hemltdXRoYWxFcXVhbEFyZWEucmF3O2Z1bmN0aW9uIGsodCxlKXtpZihhcmd1bWVudHMubGVuZ3RoPDImJihlPXQpLDE9PT1lKXJldHVybiB3O2lmKGU9PT0xLzApcmV0dXJuIE07ZnVuY3Rpb24gcihyLG4pe3ZhciBpPXcoci9lLG4pO3JldHVybiBpWzBdKj10LGl9cmV0dXJuIHIuaW52ZXJ0PWZ1bmN0aW9uKHIsbil7dmFyIGk9dy5pbnZlcnQoci90LG4pO3JldHVybiBpWzBdKj1lLGl9LHJ9ZnVuY3Rpb24gTSh0LGUpe3JldHVyblt0Kk1hdGguY29zKGUpL01hdGguY29zKGUvPTIpLDIqTWF0aC5zaW4oZSldfWZ1bmN0aW9uIEEodCxlKXtyZXR1cm5bMyp0LygyKnApKk1hdGguc3FydChwKnAvMy1lKmUpLGVdfWZ1bmN0aW9uIFQodCxlKXtyZXR1cm5bdCwxLjI1Kk1hdGgubG9nKE1hdGgudGFuKHAvNCsuNCplKSldfWZ1bmN0aW9uIFModCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciByLG49dCpNYXRoLnNpbihlKSxpPTMwO2Rve2UtPXI9KGUrTWF0aC5zaW4oZSktbikvKDErTWF0aC5jb3MoZSkpfXdoaWxlKE1hdGguYWJzKHIpPmgmJi0taT4wKTtyZXR1cm4gZS8yfX1NLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciByPTIqdihlLzIpO3JldHVyblt0Kk1hdGguY29zKHIvMikvTWF0aC5jb3Mocikscl19LCh0Lmdlby5oYW1tZXI9ZnVuY3Rpb24oKXt2YXIgdD0yLGU9YihrKSxyPWUodCk7cmV0dXJuIHIuY29lZmZpY2llbnQ9ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ZSh0PStyKTp0fSxyfSkucmF3PWssQS5pbnZlcnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm5bMi8zKnAqdC9NYXRoLnNxcnQocCpwLzMtZSplKSxlXX0sKHQuZ2VvLmthdnJheXNraXk3PWZ1bmN0aW9uKCl7cmV0dXJuIHgoQSl9KS5yYXc9QSxULmludmVydD1mdW5jdGlvbih0LGUpe3JldHVyblt0LDIuNSpNYXRoLmF0YW4oTWF0aC5leHAoLjgqZSkpLS42MjUqcF19LCh0Lmdlby5taWxsZXI9ZnVuY3Rpb24oKXtyZXR1cm4geChUKX0pLnJhdz1ULFMocCk7dmFyIEU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPVMocik7ZnVuY3Rpb24gaShyLGkpe3JldHVyblt0KnIqTWF0aC5jb3MoaT1uKGkpKSxlKk1hdGguc2luKGkpXX1yZXR1cm4gaS5pbnZlcnQ9ZnVuY3Rpb24obixpKXt2YXIgYT12KGkvZSk7cmV0dXJuW24vKHQqTWF0aC5jb3MoYSkpLHYoKDIqYStNYXRoLnNpbigyKmEpKS9yKV19LGl9KE1hdGguU1FSVDIvZCxNYXRoLlNRUlQyLHApO2Z1bmN0aW9uIEModCxlKXt2YXIgcj1lKmUsbj1yKnI7cmV0dXJuW3QqKC44NzA3LS4xMzE5NzkqcituKihuKiguMDAzOTcxKnItLjAwMTUyOSpuKS0uMDEzNzkxKSksZSooMS4wMDcyMjYrciooLjAxNTA4NStuKiguMDI4ODc0KnItLjA0NDQ3NS0uMDA1OTE2Km4pKSldfSh0Lmdlby5tb2xsd2VpZGU9ZnVuY3Rpb24oKXtyZXR1cm4geChFKX0pLnJhdz1FLEMuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj1lLGk9MjU7ZG97dmFyIGE9bipuLG89YSphO24tPXI9KG4qKDEuMDA3MjI2K2EqKC4wMTUwODUrbyooLjAyODg3NCphLS4wNDQ0NzUtLjAwNTkxNipvKSkpLWUpLygxLjAwNzIyNithKiguMDQ1MjU1K28qKC4yNTk4NjYqYS0uMzExMzI1LS4wMDU5MTYqMTEqbykpKX13aGlsZShNYXRoLmFicyhyKT5oJiYtLWk+MCk7cmV0dXJuW3QvKC44NzA3KyhhPW4qbikqKGEqKGEqYSphKiguMDAzOTcxLS4wMDE1MjkqYSktLjAxMzc5MSktLjEzMTk3OSkpLG5dfSwodC5nZW8ubmF0dXJhbEVhcnRoPWZ1bmN0aW9uKCl7cmV0dXJuIHgoQyl9KS5yYXc9Qzt2YXIgTD1bWy45OTg2LC0uMDYyXSxbMSwwXSxbLjk5ODYsLjA2Ml0sWy45OTU0LC4xMjRdLFsuOTksLjE4Nl0sWy45ODIyLC4yNDhdLFsuOTczLC4zMV0sWy45NiwuMzcyXSxbLjk0MjcsLjQzNF0sWy45MjE2LC40OTU4XSxbLjg5NjIsLjU1NzFdLFsuODY3OSwuNjE3Nl0sWy44MzUsLjY3NjldLFsuNzk4NiwuNzM0Nl0sWy43NTk3LC43OTAzXSxbLjcxODYsLjg0MzVdLFsuNjczMiwuODkzNl0sWy42MjEzLC45Mzk0XSxbLjU3MjIsLjk3NjFdLFsuNTMyMiwxXV07ZnVuY3Rpb24geih0LGUpe3ZhciByLG49TWF0aC5taW4oMTgsMzYqTWF0aC5hYnMoZSkvcCksaT1NYXRoLmZsb29yKG4pLGE9bi1pLG89KHI9TFtpXSlbMF0scz1yWzFdLGw9KHI9TFsrK2ldKVswXSxjPXJbMV0sdT0ocj1MW01hdGgubWluKDE5LCsraSldKVswXSxoPXJbMV07cmV0dXJuW3QqKGwrYSoodS1vKS8yK2EqYSoodS0yKmwrbykvMiksKGU+MD9kOi1kKSooYythKihoLXMpLzIrYSphKihoLTIqYytzKS8yKV19ZnVuY3Rpb24gUCh0LGUpe3JldHVyblt0Kk1hdGguY29zKGUpLGVdfWZ1bmN0aW9uIEkodCxlKXt2YXIgcixuPU1hdGguY29zKGUpLGk9KHI9eShuKk1hdGguY29zKHQvPTIpKSk/ci9NYXRoLnNpbihyKToxO3JldHVyblsyKm4qTWF0aC5zaW4odCkqaSxNYXRoLnNpbihlKSppXX1mdW5jdGlvbiBPKHQsZSl7dmFyIHI9SSh0LGUpO3JldHVyblsoclswXSt0L2QpLzIsKHJbMV0rZSkvMl19TC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3RbMV0qPTEuMDE0NH0pLHouaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS9kLG49OTAqcixpPU1hdGgubWluKDE4LE1hdGguYWJzKG4vNSkpLGE9TWF0aC5tYXgoMCxNYXRoLmZsb29yKGkpKTtkb3t2YXIgbz1MW2FdWzFdLHM9TFthKzFdWzFdLGw9TFtNYXRoLm1pbigxOSxhKzIpXVsxXSxjPWwtbyx1PWwtMipzK28saD0yKihNYXRoLmFicyhyKS1zKS9jLHA9dS9jLHY9aCooMS1wKmgqKDEtMipwKmgpKTtpZih2Pj0wfHwxPT09YSl7bj0oZT49MD81Oi01KSooditpKTt2YXIgeSx4PTUwO2Rve3Y9KGk9TWF0aC5taW4oMTgsTWF0aC5hYnMobikvNSkpLShhPU1hdGguZmxvb3IoaSkpLG89TFthXVsxXSxzPUxbYSsxXVsxXSxsPUxbTWF0aC5taW4oMTksYSsyKV1bMV0sbi09KHk9KGU+PTA/ZDotZCkqKHMrdioobC1vKS8yK3YqdioobC0yKnMrbykvMiktZSkqbX13aGlsZShNYXRoLmFicyh5KT5mJiYtLXg+MCk7YnJlYWt9fXdoaWxlKC0tYT49MCk7dmFyIGI9TFthXVswXSxfPUxbYSsxXVswXSx3PUxbTWF0aC5taW4oMTksYSsyKV1bMF07cmV0dXJuW3QvKF8rdioody1iKS8yK3Yqdioody0yKl8rYikvMiksbipnXX0sKHQuZ2VvLnJvYmluc29uPWZ1bmN0aW9uKCl7cmV0dXJuIHgoeil9KS5yYXc9eixQLmludmVydD1mdW5jdGlvbih0LGUpe3JldHVyblt0L01hdGguY29zKGUpLGVdfSwodC5nZW8uc2ludXNvaWRhbD1mdW5jdGlvbigpe3JldHVybiB4KFApfSkucmF3PVAsSS5pbnZlcnQ9ZnVuY3Rpb24odCxlKXtpZighKHQqdCs0KmUqZT5wKnAraCkpe3ZhciByPXQsbj1lLGk9MjU7ZG97dmFyIGEsbz1NYXRoLnNpbihyKSxzPU1hdGguc2luKHIvMiksbD1NYXRoLmNvcyhyLzIpLGM9TWF0aC5zaW4obiksdT1NYXRoLmNvcyhuKSxmPU1hdGguc2luKDIqbiksZD1jKmMsZz11KnUsbT1zKnMsdj0xLWcqbCpsLHg9dj95KHUqbCkqTWF0aC5zcXJ0KGE9MS92KTphPTAsYj0yKngqdSpzLXQsXz14KmMtZSx3PWEqKGcqbSt4KnUqbCpkKSxrPWEqKC41Km8qZi0yKngqYypzKSxNPS4yNSphKihmKnMteCpjKmcqbyksQT1hKihkKmwreCptKnUpLFQ9aypNLUEqdztpZighVClicmVhazt2YXIgUz0oXyprLWIqQSkvVCxFPShiKk0tXyp3KS9UO3ItPVMsbi09RX13aGlsZSgoTWF0aC5hYnMoUyk+aHx8TWF0aC5hYnMoRSk+aCkmJi0taT4wKTtyZXR1cm5bcixuXX19LCh0Lmdlby5haXRvZmY9ZnVuY3Rpb24oKXtyZXR1cm4geChJKX0pLnJhdz1JLE8uaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dCxuPWUsaT0yNTtkb3t2YXIgYSxvPU1hdGguY29zKG4pLHM9TWF0aC5zaW4obiksbD1NYXRoLnNpbigyKm4pLGM9cypzLHU9bypvLGY9TWF0aC5zaW4ocikscD1NYXRoLmNvcyhyLzIpLGc9TWF0aC5zaW4oci8yKSxtPWcqZyx2PTEtdSpwKnAseD12P3kobypwKSpNYXRoLnNxcnQoYT0xL3YpOmE9MCxiPS41KigyKngqbypnK3IvZCktdCxfPS41Kih4KnMrbiktZSx3PS41KmEqKHUqbSt4Km8qcCpjKSsuNS9kLGs9YSooZipsLzQteCpzKmcpLE09LjEyNSphKihsKmcteCpzKnUqZiksQT0uNSphKihjKnAreCptKm8pKy41LFQ9aypNLUEqdyxTPShfKmstYipBKS9ULEU9KGIqTS1fKncpL1Q7ci09UyxuLT1FfXdoaWxlKChNYXRoLmFicyhTKT5ofHxNYXRoLmFicyhFKT5oKSYmLS1pPjApO3JldHVybltyLG5dfSwodC5nZW8ud2lua2VsMz1mdW5jdGlvbigpe3JldHVybiB4KE8pfSkucmF3PU99fSx7fV0sNzY3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCIuLi8uLi9saWIiKSxhPU1hdGguUEkvMTgwLG89MTgwL01hdGguUEkscz17Y3Vyc29yOiJwb2ludGVyIn0sbD17Y3Vyc29yOiJhdXRvIn07ZnVuY3Rpb24gYyh0LGUpe3JldHVybiBuLmJlaGF2aW9yLnpvb20oKS50cmFuc2xhdGUoZS50cmFuc2xhdGUoKSkuc2NhbGUoZS5zY2FsZSgpKX1mdW5jdGlvbiB1KHQsZSxyKXt2YXIgbj10LmlkLGE9dC5ncmFwaERpdixvPWEubGF5b3V0W25dLHM9YS5fZnVsbExheW91dFtuXSxsPXt9O2Z1bmN0aW9uIGModCxlKXt2YXIgcj1pLm5lc3RlZFByb3BlcnR5KHMsdCk7ci5nZXQoKSE9PWUmJihyLnNldChlKSxpLm5lc3RlZFByb3BlcnR5KG8sdCkuc2V0KGUpLGxbbisiLiIrdF09ZSl9cihjKSxjKCJwcm9qZWN0aW9uLnNjYWxlIixlLnNjYWxlKCkvdC5maXRTY2FsZSksYS5lbWl0KCJwbG90bHlfcmVsYXlvdXQiLGwpfWZ1bmN0aW9uIGgodCxlKXt2YXIgcj1jKDAsZSk7ZnVuY3Rpb24gaShyKXt2YXIgbj1lLmludmVydCh0Lm1pZFB0KTtyKCJjZW50ZXIubG9uIixuWzBdKSxyKCJjZW50ZXIubGF0IixuWzFdKX1yZXR1cm4gci5vbigiem9vbXN0YXJ0IixmdW5jdGlvbigpe24uc2VsZWN0KHRoaXMpLnN0eWxlKHMpfSkub24oInpvb20iLGZ1bmN0aW9uKCl7ZS5zY2FsZShuLmV2ZW50LnNjYWxlKS50cmFuc2xhdGUobi5ldmVudC50cmFuc2xhdGUpLHQucmVuZGVyKCl9KS5vbigiem9vbWVuZCIsZnVuY3Rpb24oKXtuLnNlbGVjdCh0aGlzKS5zdHlsZShsKSx1KHQsZSxpKX0pLHJ9ZnVuY3Rpb24gZih0LGUpe3ZhciByLGksYSxvLGgsZixwLGQsZyxtPWMoMCxlKSx2PTI7ZnVuY3Rpb24geSh0KXtyZXR1cm4gZS5pbnZlcnQodCl9ZnVuY3Rpb24geChyKXt2YXIgbj1lLnJvdGF0ZSgpLGk9ZS5pbnZlcnQodC5taWRQdCk7cigicHJvamVjdGlvbi5yb3RhdGlvbi5sb24iLC1uWzBdKSxyKCJjZW50ZXIubG9uIixpWzBdKSxyKCJjZW50ZXIubGF0IixpWzFdKX1yZXR1cm4gbS5vbigiem9vbXN0YXJ0IixmdW5jdGlvbigpe24uc2VsZWN0KHRoaXMpLnN0eWxlKHMpLHI9bi5tb3VzZSh0aGlzKSxpPWUucm90YXRlKCksYT1lLnRyYW5zbGF0ZSgpLG89aSxoPXkocil9KS5vbigiem9vbSIsZnVuY3Rpb24oKXtpZihmPW4ubW91c2UodGhpcyksZnVuY3Rpb24odCl7dmFyIHI9eSh0KTtpZighcilyZXR1cm4hMDt2YXIgbj1lKHIpO3JldHVybiBNYXRoLmFicyhuWzBdLXRbMF0pPnZ8fE1hdGguYWJzKG5bMV0tdFsxXSk+dn0ocikpcmV0dXJuIG0uc2NhbGUoZS5zY2FsZSgpKSx2b2lkIG0udHJhbnNsYXRlKGUudHJhbnNsYXRlKCkpO2Uuc2NhbGUobi5ldmVudC5zY2FsZSksZS50cmFuc2xhdGUoW2FbMF0sbi5ldmVudC50cmFuc2xhdGVbMV1dKSxoP3koZikmJihkPXkoZikscD1bb1swXSsoZFswXS1oWzBdKSxpWzFdLGlbMl1dLGUucm90YXRlKHApLG89cCk6aD15KHI9ZiksZz0hMCx0LnJlbmRlcigpfSkub24oInpvb21lbmQiLGZ1bmN0aW9uKCl7bi5zZWxlY3QodGhpcykuc3R5bGUobCksZyYmdSh0LGUseCl9KSxtfWZ1bmN0aW9uIHAodCxlKXt2YXIgcixpPXtyOmUucm90YXRlKCksazplLnNjYWxlKCl9LGg9YygwLGUpLGY9ZnVuY3Rpb24odCl7dmFyIGU9MCxyPWFyZ3VtZW50cy5sZW5ndGgsaT1bXTtmb3IoOysrZTxyOylpLnB1c2goYXJndW1lbnRzW2VdKTt2YXIgYT1uLmRpc3BhdGNoLmFwcGx5KG51bGwsaSk7cmV0dXJuIGEub2Y9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gZnVuY3Rpb24oaSl7dmFyIG87dHJ5e289aS5zb3VyY2VFdmVudD1uLmV2ZW50LGkudGFyZ2V0PXQsbi5ldmVudD1pLGFbaS50eXBlXS5hcHBseShlLHIpfWZpbmFsbHl7bi5ldmVudD1vfX19LGF9KGgsInpvb21zdGFydCIsInpvb20iLCJ6b29tZW5kIikscD0wLG09aC5vbjtmdW5jdGlvbiB4KHQpe3ZhciByPWUucm90YXRlKCk7dCgicHJvamVjdGlvbi5yb3RhdGlvbi5sb24iLC1yWzBdKSx0KCJwcm9qZWN0aW9uLnJvdGF0aW9uLmxhdCIsLXJbMV0pfXJldHVybiBoLm9uKCJ6b29tc3RhcnQiLGZ1bmN0aW9uKCl7bi5zZWxlY3QodGhpcykuc3R5bGUocyk7dmFyIHQsbCxjLHUseCxiLF8sdyxrLE0sQSxUPW4ubW91c2UodGhpcyksUz1lLnJvdGF0ZSgpLEU9UyxDPWUudHJhbnNsYXRlKCksTD0obD0uNSoodD1TKVswXSphLGM9LjUqdFsxXSphLHU9LjUqdFsyXSphLHg9TWF0aC5zaW4obCksYj1NYXRoLmNvcyhsKSxfPU1hdGguc2luKGMpLHc9TWF0aC5jb3MoYyksaz1NYXRoLnNpbih1KSxNPU1hdGguY29zKHUpLFtiKncqTSt4Kl8qayx4KncqTS1iKl8qayxiKl8qTSt4KncqayxiKncqay14Kl8qTV0pO3I9ZChlLFQpLG0uY2FsbChoLCJ6b29tIixmdW5jdGlvbigpe3ZhciB0LGEscyxsLGMsdSxoLHAsbSx4LGI9bi5tb3VzZSh0aGlzKTtpZihlLnNjYWxlKGkuaz1uLmV2ZW50LnNjYWxlKSxyKXtpZihkKGUsYikpe2Uucm90YXRlKFMpLnRyYW5zbGF0ZShDKTt2YXIgXz1kKGUsYiksdz1mdW5jdGlvbih0LGUpe2lmKCF0fHwhZSlyZXR1cm47dmFyIHI9ZnVuY3Rpb24odCxlKXtyZXR1cm5bdFsxXSplWzJdLXRbMl0qZVsxXSx0WzJdKmVbMF0tdFswXSplWzJdLHRbMF0qZVsxXS10WzFdKmVbMF1dfSh0LGUpLG49TWF0aC5zcXJ0KHkocixyKSksaT0uNSpNYXRoLmFjb3MoTWF0aC5tYXgoLTEsTWF0aC5taW4oMSx5KHQsZSkpKSksYT1NYXRoLnNpbihpKS9uO3JldHVybiBuJiZbTWF0aC5jb3MoaSksclsyXSphLC1yWzFdKmEsclswXSphXX0ocixfKSxrPWZ1bmN0aW9uKHQpe3JldHVybltNYXRoLmF0YW4yKDIqKHRbMF0qdFsxXSt0WzJdKnRbM10pLDEtMioodFsxXSp0WzFdK3RbMl0qdFsyXSkpKm8sTWF0aC5hc2luKE1hdGgubWF4KC0xLE1hdGgubWluKDEsMioodFswXSp0WzJdLXRbM10qdFsxXSkpKSkqbyxNYXRoLmF0YW4yKDIqKHRbMF0qdFszXSt0WzFdKnRbMl0pLDEtMioodFsyXSp0WzJdK3RbM10qdFszXSkpKm9dfSgoYT13LHM9KHQ9TClbMF0sbD10WzFdLGM9dFsyXSx1PXRbM10saD1hWzBdLHA9YVsxXSxtPWFbMl0seD1hWzNdLFtzKmgtbCpwLWMqbS11KngscypwK2wqaCtjKngtdSptLHMqbS1sKngrYypoK3UqcCxzKngrbCptLWMqcCt1KmhdKSksTT1pLnI9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXYoZSwyLHRbMF0pO249dihuLDEsdFsxXSksbj12KG4sMCx0WzJdLXJbMl0pO3ZhciBpLGEscz1lWzBdLGw9ZVsxXSxjPWVbMl0sdT1uWzBdLGg9blsxXSxmPW5bMl0scD1NYXRoLmF0YW4yKGwscykqbyxkPU1hdGguc3FydChzKnMrbCpsKTtNYXRoLmFicyhoKT5kPyhhPShoPjA/OTA6LTkwKS1wLGk9MCk6KGE9TWF0aC5hc2luKGgvZCkqby1wLGk9TWF0aC5zcXJ0KGQqZC1oKmgpKTt2YXIgbT0xODAtYS0yKnAseT0oTWF0aC5hdGFuMihmLHUpLU1hdGguYXRhbjIoYyxpKSkqbyx4PShNYXRoLmF0YW4yKGYsdSktTWF0aC5hdGFuMihjLC1pKSkqbyxiPWcoclswXSxyWzFdLGEseSksXz1nKHJbMF0sclsxXSxtLHgpO3JldHVybiBiPD1fP1thLHksclsyXV06W20seCxyWzJdXX0oayxyLEUpO2lzRmluaXRlKE1bMF0pJiZpc0Zpbml0ZShNWzFdKSYmaXNGaW5pdGUoTVsyXSl8fChNPUUpLGUucm90YXRlKE0pLEU9TX19ZWxzZSByPWQoZSxUPWIpO2Yub2YodGhpcyxhcmd1bWVudHMpKHt0eXBlOiJ6b29tIn0pfSksQT1mLm9mKHRoaXMsYXJndW1lbnRzKSxwKyt8fEEoe3R5cGU6Inpvb21zdGFydCJ9KX0pLm9uKCJ6b29tZW5kIixmdW5jdGlvbigpe3ZhciByO24uc2VsZWN0KHRoaXMpLnN0eWxlKGwpLG0uY2FsbChoLCJ6b29tIixudWxsKSxyPWYub2YodGhpcyxhcmd1bWVudHMpLC0tcHx8cih7dHlwZToiem9vbWVuZCJ9KSx1KHQsZSx4KX0pLm9uKCJ6b29tLnJlZHJhdyIsZnVuY3Rpb24oKXt0LnJlbmRlcigpfSksbi5yZWJpbmQoaCxmLCJvbiIpfWZ1bmN0aW9uIGQodCxlKXt2YXIgcj10LmludmVydChlKTtyZXR1cm4gciYmaXNGaW5pdGUoclswXSkmJmlzRmluaXRlKHJbMV0pJiZmdW5jdGlvbih0KXt2YXIgZT10WzBdKmEscj10WzFdKmEsbj1NYXRoLmNvcyhyKTtyZXR1cm5bbipNYXRoLmNvcyhlKSxuKk1hdGguc2luKGUpLE1hdGguc2luKHIpXX0ocil9ZnVuY3Rpb24gZyh0LGUscixuKXt2YXIgaT1tKHItdCksYT1tKG4tZSk7cmV0dXJuIE1hdGguc3FydChpKmkrYSphKX1mdW5jdGlvbiBtKHQpe3JldHVybih0JTM2MCs1NDApJTM2MC0xODB9ZnVuY3Rpb24gdih0LGUscil7dmFyIG49ciphLGk9dC5zbGljZSgpLG89MD09PWU/MTowLHM9Mj09PWU/MToyLGw9TWF0aC5jb3MobiksYz1NYXRoLnNpbihuKTtyZXR1cm4gaVtvXT10W29dKmwtdFtzXSpjLGlbc109dFtzXSpsK3Rbb10qYyxpfWZ1bmN0aW9uIHkodCxlKXtmb3IodmFyIHI9MCxuPTAsaT10Lmxlbmd0aDtuPGk7KytuKXIrPXRbbl0qZVtuXTtyZXR1cm4gcn1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10LnByb2plY3Rpb247cmV0dXJuKGUuX2lzU2NvcGVkP2g6ZS5faXNDbGlwcGVkP3A6ZikodCxyKX19LHsiLi4vLi4vbGliIjo2ODQsZDM6MTQ3fV0sNzY4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3JlZ2lzdHJ5IiksaT10KCIuL2NhcnRlc2lhbi9jb25zdGFudHMiKS5TVUJQTE9UX1BBVFRFUk47ci5nZXRTdWJwbG90Q2FsY0RhdGE9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPW4uc3VicGxvdHNSZWdpc3RyeVtlXTtpZighaSlyZXR1cm5bXTtmb3IodmFyIGE9aS5hdHRyLG89W10scz0wO3M8dC5sZW5ndGg7cysrKXt2YXIgbD10W3NdO2xbMF0udHJhY2VbYV09PT1yJiZvLnB1c2gobCl9cmV0dXJuIG99LHIuZ2V0TW9kdWxlQ2FsY0RhdGE9ZnVuY3Rpb24odCxlKXt2YXIgcixpPVtdLGE9W107aWYoIShyPSJzdHJpbmciPT10eXBlb2YgZT9uLmdldE1vZHVsZShlKS5wbG90OiJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6ZS5wbG90KSlyZXR1cm5baSx0XTtmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyl7dmFyIHM9dFtvXSxsPXNbMF0udHJhY2U7ITA9PT1sLnZpc2libGUmJihsLl9tb2R1bGUucGxvdD09PXI/aS5wdXNoKHMpOmEucHVzaChzKSl9cmV0dXJuW2ksYV19LHIuZ2V0U3VicGxvdERhdGE9ZnVuY3Rpb24odCxlLHIpe2lmKCFuLnN1YnBsb3RzUmVnaXN0cnlbZV0pcmV0dXJuW107dmFyIGEsbyxzLGw9bi5zdWJwbG90c1JlZ2lzdHJ5W2VdLmF0dHIsYz1bXTtpZigiZ2wyZCI9PT1lKXt2YXIgdT1yLm1hdGNoKGkpO289IngiK3VbMV0scz0ieSIrdVsyXX1mb3IodmFyIGg9MDtoPHQubGVuZ3RoO2grKylhPXRbaF0sImdsMmQiPT09ZSYmbi50cmFjZUlzKGEsImdsMmQiKT9hW2xbMF1dPT09byYmYVtsWzFdXT09PXMmJmMucHVzaChhKTphW2xdPT09ciYmYy5wdXNoKGEpO3JldHVybiBjfSxyLmdldFVpZHNGcm9tQ2FsY0RhdGE9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXt9LHI9MDtyPHQubGVuZ3RoO3IrKyl7ZVt0W3JdWzBdLnRyYWNlLnVpZF09MX1yZXR1cm4gZX19LHsiLi4vcmVnaXN0cnkiOjgxNywiLi9jYXJ0ZXNpYW4vY29uc3RhbnRzIjo3Mzd9XSw3Njk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgibW91c2UtY2hhbmdlIiksaT10KCJtb3VzZS13aGVlbCIpLGE9dCgibW91c2UtZXZlbnQtb2Zmc2V0Iiksbz10KCIuLi9jYXJ0ZXNpYW4vY29uc3RhbnRzIikscz10KCJoYXMtcGFzc2l2ZS1ldmVudHMiKTtmdW5jdGlvbiBsKHQsZSl7dGhpcy5lbGVtZW50PXQsdGhpcy5wbG90PWUsdGhpcy5tb3VzZUxpc3RlbmVyPW51bGwsdGhpcy53aGVlbExpc3RlbmVyPW51bGwsdGhpcy5sYXN0SW5wdXRUaW1lPURhdGUubm93KCksdGhpcy5sYXN0UG9zPVswLDBdLHRoaXMuYm94RW5hYmxlZD0hMSx0aGlzLmJveEluaXRlZD0hMSx0aGlzLmJveFN0YXJ0PVswLDBdLHRoaXMuYm94RW5kPVswLDBdLHRoaXMuZHJhZ1N0YXJ0PVswLDBdfWUuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10Lm1vdXNlQ29udGFpbmVyLHI9dC5nbHBsb3QsYz1uZXcgbChlLHIpO2Z1bmN0aW9uIHUoKXt0LnhheGlzLmF1dG9yYW5nZT0hMSx0LnlheGlzLmF1dG9yYW5nZT0hMX1mdW5jdGlvbiBoKGUsbixpKXt2YXIgYSxzLGw9dC5jYWxjRGF0YUJveCgpLGg9ci52aWV3Qm94LGY9Yy5sYXN0UG9zWzBdLHA9Yy5sYXN0UG9zWzFdLGQ9by5NSU5EUkFHKnIucGl4ZWxSYXRpbyxnPW8uTUlOWk9PTSpyLnBpeGVsUmF0aW87ZnVuY3Rpb24gbShlLHIsbil7dmFyIGk9TWF0aC5taW4ocixuKSxhPU1hdGgubWF4KHIsbik7aSE9PWE/KGxbZV09aSxsW2UrMl09YSxjLmRhdGFCb3g9bCx0LnNldFJhbmdlcyhsKSk6KHQuc2VsZWN0Qm94LnNlbGVjdEJveD1bMCwwLDEsMV0sdC5nbHBsb3Quc2V0RGlydHkoKSl9c3dpdGNoKG4qPXIucGl4ZWxSYXRpbyxpKj1yLnBpeGVsUmF0aW8saT1oWzNdLWhbMV0taSx0LmZ1bGxMYXlvdXQuZHJhZ21vZGUpe2Nhc2Uiem9vbSI6aWYoZSl7dmFyIHY9bi8oaFsyXS1oWzBdKSoobFsyXS1sWzBdKStsWzBdLHk9aS8oaFszXS1oWzFdKSoobFszXS1sWzFdKStsWzFdO2MuYm94SW5pdGVkfHwoYy5ib3hTdGFydFswXT12LGMuYm94U3RhcnRbMV09eSxjLmRyYWdTdGFydFswXT1uLGMuZHJhZ1N0YXJ0WzFdPWkpLGMuYm94RW5kWzBdPXYsYy5ib3hFbmRbMV09eSxjLmJveEluaXRlZD0hMCxjLmJveEVuYWJsZWR8fGMuYm94U3RhcnRbMF09PT1jLmJveEVuZFswXSYmYy5ib3hTdGFydFsxXT09PWMuYm94RW5kWzFdfHwoYy5ib3hFbmFibGVkPSEwKTt2YXIgeD1NYXRoLmFicyhjLmRyYWdTdGFydFswXS1uKTxnLGI9TWF0aC5hYnMoYy5kcmFnU3RhcnRbMV0taSk8ZztpZighZnVuY3Rpb24oKXtmb3IodmFyIGU9dC5ncmFwaERpdi5fZnVsbExheW91dC5fYXhpc0NvbnN0cmFpbnRHcm91cHMscj10LnhheGlzLl9pZCxuPXQueWF4aXMuX2lkLGk9MDtpPGUubGVuZ3RoO2krKylpZigtMSE9PWVbaV1bcl0pe2lmKC0xIT09ZVtpXVtuXSlyZXR1cm4hMDticmVha31yZXR1cm4hMX0oKXx8eCYmYil4JiYoYy5ib3hFbmRbMF09Yy5ib3hTdGFydFswXSksYiYmKGMuYm94RW5kWzFdPWMuYm94U3RhcnRbMV0pO2Vsc2V7YT1jLmJveEVuZFswXS1jLmJveFN0YXJ0WzBdLHM9Yy5ib3hFbmRbMV0tYy5ib3hTdGFydFsxXTt2YXIgXz0obFszXS1sWzFdKS8obFsyXS1sWzBdKTtNYXRoLmFicyhhKl8pPk1hdGguYWJzKHMpPyhjLmJveEVuZFsxXT1jLmJveFN0YXJ0WzFdK01hdGguYWJzKGEpKl8qKHM+PTA/MTotMSksYy5ib3hFbmRbMV08bFsxXT8oYy5ib3hFbmRbMV09bFsxXSxjLmJveEVuZFswXT1jLmJveFN0YXJ0WzBdKyhsWzFdLWMuYm94U3RhcnRbMV0pL01hdGguYWJzKF8pKTpjLmJveEVuZFsxXT5sWzNdJiYoYy5ib3hFbmRbMV09bFszXSxjLmJveEVuZFswXT1jLmJveFN0YXJ0WzBdKyhsWzNdLWMuYm94U3RhcnRbMV0pL01hdGguYWJzKF8pKSk6KGMuYm94RW5kWzBdPWMuYm94U3RhcnRbMF0rTWF0aC5hYnMocykvXyooYT49MD8xOi0xKSxjLmJveEVuZFswXTxsWzBdPyhjLmJveEVuZFswXT1sWzBdLGMuYm94RW5kWzFdPWMuYm94U3RhcnRbMV0rKGxbMF0tYy5ib3hTdGFydFswXSkqTWF0aC5hYnMoXykpOmMuYm94RW5kWzBdPmxbMl0mJihjLmJveEVuZFswXT1sWzJdLGMuYm94RW5kWzFdPWMuYm94U3RhcnRbMV0rKGxbMl0tYy5ib3hTdGFydFswXSkqTWF0aC5hYnMoXykpKX19ZWxzZSBjLmJveEVuYWJsZWQ/KGE9Yy5ib3hTdGFydFswXSE9PWMuYm94RW5kWzBdLHM9Yy5ib3hTdGFydFsxXSE9PWMuYm94RW5kWzFdLGF8fHM/KGEmJihtKDAsYy5ib3hTdGFydFswXSxjLmJveEVuZFswXSksdC54YXhpcy5hdXRvcmFuZ2U9ITEpLHMmJihtKDEsYy5ib3hTdGFydFsxXSxjLmJveEVuZFsxXSksdC55YXhpcy5hdXRvcmFuZ2U9ITEpLHQucmVsYXlvdXRDYWxsYmFjaygpKTp0LmdscGxvdC5zZXREaXJ0eSgpLGMuYm94RW5hYmxlZD0hMSxjLmJveEluaXRlZD0hMSk6Yy5ib3hJbml0ZWQmJihjLmJveEluaXRlZD0hMSk7YnJlYWs7Y2FzZSJwYW4iOmMuYm94RW5hYmxlZD0hMSxjLmJveEluaXRlZD0hMSxlPyhjLnBhbm5pbmd8fChjLmRyYWdTdGFydFswXT1uLGMuZHJhZ1N0YXJ0WzFdPWkpLE1hdGguYWJzKGMuZHJhZ1N0YXJ0WzBdLW4pPGQmJihuPWMuZHJhZ1N0YXJ0WzBdKSxNYXRoLmFicyhjLmRyYWdTdGFydFsxXS1pKTxkJiYoaT1jLmRyYWdTdGFydFsxXSksYT0oZi1uKSoobFsyXS1sWzBdKS8oci52aWV3Qm94WzJdLXIudmlld0JveFswXSkscz0ocC1pKSoobFszXS1sWzFdKS8oci52aWV3Qm94WzNdLXIudmlld0JveFsxXSksbFswXSs9YSxsWzJdKz1hLGxbMV0rPXMsbFszXSs9cyx0LnNldFJhbmdlcyhsKSxjLnBhbm5pbmc9ITAsYy5sYXN0SW5wdXRUaW1lPURhdGUubm93KCksdSgpLHQuY2FtZXJhQ2hhbmdlZCgpLHQuaGFuZGxlQW5ub3RhdGlvbnMoKSk6Yy5wYW5uaW5nJiYoYy5wYW5uaW5nPSExLHQucmVsYXlvdXRDYWxsYmFjaygpKX1jLmxhc3RQb3NbMF09bixjLmxhc3RQb3NbMV09aX1yZXR1cm4gYy5tb3VzZUxpc3RlbmVyPW4oZSxoKSxlLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLGZ1bmN0aW9uKHQpe3ZhciByPWEodC5jaGFuZ2VkVG91Y2hlc1swXSxlKTtoKDAsclswXSxyWzFdKSxoKDEsclswXSxyWzFdKSx0LnByZXZlbnREZWZhdWx0KCl9LCEhcyYme3Bhc3NpdmU6ITF9KSxlLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsZnVuY3Rpb24odCl7dC5wcmV2ZW50RGVmYXVsdCgpO3ZhciByPWEodC5jaGFuZ2VkVG91Y2hlc1swXSxlKTtoKDEsclswXSxyWzFdKSx0LnByZXZlbnREZWZhdWx0KCl9LCEhcyYme3Bhc3NpdmU6ITF9KSxlLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoZW5kIixmdW5jdGlvbih0KXtoKDAsYy5sYXN0UG9zWzBdLGMubGFzdFBvc1sxXSksdC5wcmV2ZW50RGVmYXVsdCgpfSwhIXMmJntwYXNzaXZlOiExfSksYy53aGVlbExpc3RlbmVyPWkoZSxmdW5jdGlvbihlLG4pe2lmKCF0LnNjcm9sbFpvb20pcmV0dXJuITE7dmFyIGk9dC5jYWxjRGF0YUJveCgpLGE9ci52aWV3Qm94LG89Yy5sYXN0UG9zWzBdLHM9Yy5sYXN0UG9zWzFdLGw9TWF0aC5leHAoNSpuLyhhWzNdLWFbMV0pKSxoPW8vKGFbMl0tYVswXSkqKGlbMl0taVswXSkraVswXSxmPXMvKGFbM10tYVsxXSkqKGlbM10taVsxXSkraVsxXTtyZXR1cm4gaVswXT0oaVswXS1oKSpsK2gsaVsyXT0oaVsyXS1oKSpsK2gsaVsxXT0oaVsxXS1mKSpsK2YsaVszXT0oaVszXS1mKSpsK2YsdC5zZXRSYW5nZXMoaSksYy5sYXN0SW5wdXRUaW1lPURhdGUubm93KCksdSgpLHQuY2FtZXJhQ2hhbmdlZCgpLHQuaGFuZGxlQW5ub3RhdGlvbnMoKSx0LnJlbGF5b3V0Q2FsbGJhY2soKSwhMH0sITApLGN9fSx7Ii4uL2NhcnRlc2lhbi9jb25zdGFudHMiOjczNywiaGFzLXBhc3NpdmUtZXZlbnRzIjozNzksIm1vdXNlLWNoYW5nZSI6NDAyLCJtb3VzZS1ldmVudC1vZmZzZXQiOjQwMywibW91c2Utd2hlZWwiOjQwNX1dLDc3MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9jYXJ0ZXNpYW4vYXhlcyIpLGk9dCgiLi4vLi4vbGliL2h0bWwydW5pY29kZSIpLGE9dCgiLi4vLi4vbGliL3N0cjJyZ2JhcnJheSIpO2Z1bmN0aW9uIG8odCl7dGhpcy5zY2VuZT10LHRoaXMuZ2w9dC5nbCx0aGlzLnBpeGVsUmF0aW89dC5waXhlbFJhdGlvLHRoaXMuc2NyZWVuQm94PVswLDAsMSwxXSx0aGlzLnZpZXdCb3g9WzAsMCwxLDFdLHRoaXMuZGF0YUJveD1bLTEsLTEsMSwxXSx0aGlzLmJvcmRlckxpbmVFbmFibGU9WyExLCExLCExLCExXSx0aGlzLmJvcmRlckxpbmVXaWR0aD1bMSwxLDEsMV0sdGhpcy5ib3JkZXJMaW5lQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy50aWNrcz1bW10sW11dLHRoaXMudGlja0VuYWJsZT1bITAsITAsITEsITFdLHRoaXMudGlja1BhZD1bMTUsMTUsMTUsMTVdLHRoaXMudGlja0FuZ2xlPVswLDAsMCwwXSx0aGlzLnRpY2tDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLnRpY2tNYXJrTGVuZ3RoPVswLDAsMCwwXSx0aGlzLnRpY2tNYXJrV2lkdGg9WzAsMCwwLDBdLHRoaXMudGlja01hcmtDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmxhYmVscz1bIngiLCJ5Il0sdGhpcy5sYWJlbEVuYWJsZT1bITAsITAsITEsITFdLHRoaXMubGFiZWxBbmdsZT1bMCxNYXRoLlBJLzIsMCwzKk1hdGguUEkvMl0sdGhpcy5sYWJlbFBhZD1bMTUsMTUsMTUsMTVdLHRoaXMubGFiZWxTaXplPVsxMiwxMl0sdGhpcy5sYWJlbEZvbnQ9WyJzYW5zLXNlcmlmIiwic2Fucy1zZXJpZiJdLHRoaXMubGFiZWxDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLnRpdGxlPSIiLHRoaXMudGl0bGVFbmFibGU9ITAsdGhpcy50aXRsZUNlbnRlcj1bMCwwLDAsMF0sdGhpcy50aXRsZUFuZ2xlPTAsdGhpcy50aXRsZUNvbG9yPVswLDAsMCwxXSx0aGlzLnRpdGxlRm9udD0ic2Fucy1zZXJpZiIsdGhpcy50aXRsZVNpemU9MTgsdGhpcy5ncmlkTGluZUVuYWJsZT1bITAsITBdLHRoaXMuZ3JpZExpbmVDb2xvcj1bWzAsMCwwLC41XSxbMCwwLDAsLjVdXSx0aGlzLmdyaWRMaW5lV2lkdGg9WzEsMV0sdGhpcy56ZXJvTGluZUVuYWJsZT1bITAsITBdLHRoaXMuemVyb0xpbmVXaWR0aD1bMSwxXSx0aGlzLnplcm9MaW5lQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMuYm9yZGVyQ29sb3I9ITEsdGhpcy5iYWNrZ3JvdW5kQ29sb3I9WzAsMCwwLDBdLHRoaXMuc3RhdGljPXRoaXMuc2NlbmUuc3RhdGljUGxvdH12YXIgcz1vLnByb3RvdHlwZSxsPVsieGF4aXMiLCJ5YXhpcyJdO3MubWVyZ2U9ZnVuY3Rpb24odCl7dmFyIGUscixuLG8scyxjLHUsaCxmLHAsZDtmb3IodGhpcy50aXRsZUVuYWJsZT0hMSx0aGlzLmJhY2tncm91bmRDb2xvcj1hKHQucGxvdF9iZ2NvbG9yKSxwPTA7cDwyOysrcCl7dmFyIGc9KGU9bFtwXSkuY2hhckF0KDApO2ZvcihuPShyPXRbdGhpcy5zY2VuZVtlXS5fbmFtZV0pLnRpdGxlPT09dGhpcy5zY2VuZS5mdWxsTGF5b3V0Ll9kZmx0VGl0bGVbZ10/IiI6ci50aXRsZSxkPTA7ZDw9MjtkKz0yKXRoaXMubGFiZWxFbmFibGVbcCtkXT0hMSx0aGlzLmxhYmVsc1twK2RdPWkobiksdGhpcy5sYWJlbENvbG9yW3ArZF09YShyLnRpdGxlZm9udC5jb2xvciksdGhpcy5sYWJlbEZvbnRbcCtkXT1yLnRpdGxlZm9udC5mYW1pbHksdGhpcy5sYWJlbFNpemVbcCtkXT1yLnRpdGxlZm9udC5zaXplLHRoaXMubGFiZWxQYWRbcCtkXT10aGlzLmdldExhYmVsUGFkKGUsciksdGhpcy50aWNrRW5hYmxlW3ArZF09ITEsdGhpcy50aWNrQ29sb3JbcCtkXT1hKChyLnRpY2tmb250fHx7fSkuY29sb3IpLHRoaXMudGlja0FuZ2xlW3ArZF09ImF1dG8iPT09ci50aWNrYW5nbGU/MDpNYXRoLlBJKi1yLnRpY2thbmdsZS8xODAsdGhpcy50aWNrUGFkW3ArZF09dGhpcy5nZXRUaWNrUGFkKHIpLHRoaXMudGlja01hcmtMZW5ndGhbcCtkXT0wLHRoaXMudGlja01hcmtXaWR0aFtwK2RdPXIudGlja3dpZHRofHwwLHRoaXMudGlja01hcmtDb2xvcltwK2RdPWEoci50aWNrY29sb3IpLHRoaXMuYm9yZGVyTGluZUVuYWJsZVtwK2RdPSExLHRoaXMuYm9yZGVyTGluZUNvbG9yW3ArZF09YShyLmxpbmVjb2xvciksdGhpcy5ib3JkZXJMaW5lV2lkdGhbcCtkXT1yLmxpbmV3aWR0aHx8MDt1PXRoaXMuaGFzU2hhcmVkQXhpcyhyKSxzPXRoaXMuaGFzQXhpc0luRGZsdFBvcyhlLHIpJiYhdSxjPXRoaXMuaGFzQXhpc0luQWx0clBvcyhlLHIpJiYhdSxvPXIubWlycm9yfHwhMSxoPXU/LTEhPT1TdHJpbmcobykuaW5kZXhPZigiYWxsIik6ISFvLGY9dT8iYWxsdGlja3MiPT09bzotMSE9PVN0cmluZyhvKS5pbmRleE9mKCJ0aWNrcyIpLHM/dGhpcy5sYWJlbEVuYWJsZVtwXT0hMDpjJiYodGhpcy5sYWJlbEVuYWJsZVtwKzJdPSEwKSxzP3RoaXMudGlja0VuYWJsZVtwXT1yLnNob3d0aWNrbGFiZWxzOmMmJih0aGlzLnRpY2tFbmFibGVbcCsyXT1yLnNob3d0aWNrbGFiZWxzKSwoc3x8aCkmJih0aGlzLmJvcmRlckxpbmVFbmFibGVbcF09ci5zaG93bGluZSksKGN8fGgpJiYodGhpcy5ib3JkZXJMaW5lRW5hYmxlW3ArMl09ci5zaG93bGluZSksKHN8fGYpJiYodGhpcy50aWNrTWFya0xlbmd0aFtwXT10aGlzLmdldFRpY2tNYXJrTGVuZ3RoKHIpKSwoY3x8ZikmJih0aGlzLnRpY2tNYXJrTGVuZ3RoW3ArMl09dGhpcy5nZXRUaWNrTWFya0xlbmd0aChyKSksdGhpcy5ncmlkTGluZUVuYWJsZVtwXT1yLnNob3dncmlkLHRoaXMuZ3JpZExpbmVDb2xvcltwXT1hKHIuZ3JpZGNvbG9yKSx0aGlzLmdyaWRMaW5lV2lkdGhbcF09ci5ncmlkd2lkdGgsdGhpcy56ZXJvTGluZUVuYWJsZVtwXT1yLnplcm9saW5lLHRoaXMuemVyb0xpbmVDb2xvcltwXT1hKHIuemVyb2xpbmVjb2xvciksdGhpcy56ZXJvTGluZVdpZHRoW3BdPXIuemVyb2xpbmV3aWR0aH19LHMuaGFzU2hhcmVkQXhpcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnNjZW5lLHI9ZS5mdWxsTGF5b3V0Ll9zdWJwbG90cy5nbDJkO3JldHVybiAwIT09bi5maW5kU3VicGxvdHNXaXRoQXhpcyhyLHQpLmluZGV4T2YoZS5pZCl9LHMuaGFzQXhpc0luRGZsdFBvcz1mdW5jdGlvbih0LGUpe3ZhciByPWUuc2lkZTtyZXR1cm4ieGF4aXMiPT09dD8iYm90dG9tIj09PXI6InlheGlzIj09PXQ/ImxlZnQiPT09cjp2b2lkIDB9LHMuaGFzQXhpc0luQWx0clBvcz1mdW5jdGlvbih0LGUpe3ZhciByPWUuc2lkZTtyZXR1cm4ieGF4aXMiPT09dD8idG9wIj09PXI6InlheGlzIj09PXQ/InJpZ2h0Ij09PXI6dm9pZCAwfSxzLmdldExhYmVsUGFkPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS50aXRsZWZvbnQuc2l6ZSxuPWUuc2hvd3RpY2tsYWJlbHM7cmV0dXJuInhheGlzIj09PXQ/InRvcCI9PT1lLnNpZGU/ciooMS41KyhuPzE6MCkpLTEwOnIqKDEuNSsobj8uNTowKSktMTA6InlheGlzIj09PXQ/InJpZ2h0Ij09PWUuc2lkZT8xMCtyKigxLjUrKG4/MTouNSkpOjEwK3IqKDEuNSsobj8uNTowKSk6dm9pZCAwfSxzLmdldFRpY2tQYWQ9ZnVuY3Rpb24odCl7cmV0dXJuIm91dHNpZGUiPT09dC50aWNrcz8xMCt0LnRpY2tsZW46MTV9LHMuZ2V0VGlja01hcmtMZW5ndGg9ZnVuY3Rpb24odCl7aWYoIXQudGlja3MpcmV0dXJuIDA7dmFyIGU9dC50aWNrbGVuO3JldHVybiJpbnNpZGUiPT09dC50aWNrcz8tZTplfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBvKHQpfX0seyIuLi8uLi9saWIvaHRtbDJ1bmljb2RlIjo2ODIsIi4uLy4uL2xpYi9zdHIycmdiYXJyYXkiOjcwNywiLi4vY2FydGVzaWFuL2F4ZXMiOjczMn1dLDc3MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGwsaT10KCIuL3NjZW5lMmQiKSxhPXQoIi4uL2xheW91dF9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyIpLHM9dCgiLi4vY2FydGVzaWFuL2NvbnN0YW50cyIpLGw9dCgiLi4vY2FydGVzaWFuIiksYz10KCIuLi8uLi9jb21wb25lbnRzL2Z4L2xheW91dF9hdHRyaWJ1dGVzIiksdT10KCIuLi9nZXRfZGF0YSIpLmdldFN1YnBsb3REYXRhO3IubmFtZT0iZ2wyZCIsci5hdHRyPVsieGF4aXMiLCJ5YXhpcyJdLHIuaWRSb290PVsieCIsInkiXSxyLmlkUmVnZXg9cy5pZFJlZ2V4LHIuYXR0clJlZ2V4PXMuYXR0clJlZ2V4LHIuYXR0cmlidXRlcz10KCIuLi9jYXJ0ZXNpYW4vYXR0cmlidXRlcyIpLHIuc3VwcGx5TGF5b3V0RGVmYXVsdHM9ZnVuY3Rpb24odCxlLHIpe2UuX2hhcygiY2FydGVzaWFuIil8fGwuc3VwcGx5TGF5b3V0RGVmYXVsdHModCxlLHIpfSxyLmxheW91dEF0dHJPdmVycmlkZXM9bihsLmxheW91dEF0dHJpYnV0ZXMsInBsb3QiLCJmcm9tLXJvb3QiKSxyLmJhc2VMYXlvdXRBdHRyT3ZlcnJpZGVzPW4oe3Bsb3RfYmdjb2xvcjphLnBsb3RfYmdjb2xvcixob3ZlcmxhYmVsOmMuaG92ZXJsYWJlbH0sInBsb3QiLCJuZXN0ZWQiKSxyLnBsb3Q9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX2Z1bGxMYXlvdXQscj10Ll9mdWxsRGF0YSxuPWUuX3N1YnBsb3RzLmdsMmQsYT0wO2E8bi5sZW5ndGg7YSsrKXt2YXIgbz1uW2FdLHM9ZS5fcGxvdHNbb10sbD11KHIsImdsMmQiLG8pLGM9cy5fc2NlbmUyZDt2b2lkIDA9PT1jJiYoYz1uZXcgaSh7aWQ6byxncmFwaERpdjp0LGNvbnRhaW5lcjp0LnF1ZXJ5U2VsZWN0b3IoIi5nbC1jb250YWluZXIiKSxzdGF0aWNQbG90OnQuX2NvbnRleHQuc3RhdGljUGxvdCxwbG90R2xQaXhlbFJhdGlvOnQuX2NvbnRleHQucGxvdEdsUGl4ZWxSYXRpb30sZSkscy5fc2NlbmUyZD1jKSxjLnBsb3QobCx0LmNhbGNkYXRhLGUsdC5sYXlvdXQpfX0sci5jbGVhbj1mdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGk9bi5fc3VicGxvdHMuZ2wyZHx8W10sYT0wO2E8aS5sZW5ndGg7YSsrKXt2YXIgbz1pW2FdLHM9bi5fcGxvdHNbb107aWYocy5fc2NlbmUyZCkwPT09dSh0LCJnbDJkIixvKS5sZW5ndGgmJihzLl9zY2VuZTJkLmRlc3Ryb3koKSxkZWxldGUgbi5fcGxvdHNbb10pfWwuY2xlYW4uYXBwbHkodGhpcyxhcmd1bWVudHMpfSxyLmRyYXdGcmFtZXdvcms9ZnVuY3Rpb24odCl7dC5fY29udGV4dC5zdGF0aWNQbG90fHxsLmRyYXdGcmFtZXdvcmsodCl9LHIudG9TVkc9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX2Z1bGxMYXlvdXQscj1lLl9zdWJwbG90cy5nbDJkLG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIGk9ZS5fcGxvdHNbcltuXV0uX3NjZW5lMmQsYT1pLnRvSW1hZ2UoInBuZyIpO2UuX2dsaW1hZ2VzLmFwcGVuZCgic3ZnOmltYWdlIikuYXR0cih7eG1sbnM6by5zdmcsInhsaW5rOmhyZWYiOmEseDowLHk6MCx3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIixwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJub25lIn0pLGkuZGVzdHJveSgpfX0sci51cGRhdGVGeD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5fc3VicGxvdHMuZ2wyZCxyPTA7cjxlLmxlbmd0aDtyKyspe3QuX3Bsb3RzW2Vbcl1dLl9zY2VuZTJkLnVwZGF0ZUZ4KHQuZHJhZ21vZGUpfX19LHsiLi4vLi4vY29tcG9uZW50cy9meC9sYXlvdXRfYXR0cmlidXRlcyI6NjAxLCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyI6NjYzLCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo3MTUsIi4uL2NhcnRlc2lhbiI6NzQzLCIuLi9jYXJ0ZXNpYW4vYXR0cmlidXRlcyI6NzMwLCIuLi9jYXJ0ZXNpYW4vY29uc3RhbnRzIjo3MzcsIi4uL2dldF9kYXRhIjo3NjgsIi4uL2xheW91dF9hdHRyaWJ1dGVzIjo3ODYsIi4vc2NlbmUyZCI6NzcyfV0sNzcyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuLGksYT10KCIuLi8uLi9yZWdpc3RyeSIpLG89dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxzPXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSxsPXQoImdsLXBsb3QyZCIpLGM9dCgiZ2wtc3Bpa2VzMmQiKSx1PXQoImdsLXNlbGVjdC1ib3giKSxoPXQoIndlYmdsLWNvbnRleHQiKSxmPXQoIi4vY29udmVydCIpLHA9dCgiLi9jYW1lcmEiKSxkPXQoIi4uLy4uL2xpYi9odG1sMnVuaWNvZGUiKSxnPXQoIi4uLy4uL2xpYi9zaG93X25vX3dlYmdsX21zZyIpLG09dCgiLi4vY2FydGVzaWFuL2NvbnN0cmFpbnRzIiksdj1tLmVuZm9yY2UseT1tLmNsZWFuLHg9dCgiLi4vY2FydGVzaWFuL2F1dG9yYW5nZSIpLmRvQXV0b1JhbmdlLGI9WyJ4YXhpcyIsInlheGlzIl0sXz10KCIuLi9jYXJ0ZXNpYW4vY29uc3RhbnRzIikuU1VCUExPVF9QQVRURVJOO2Z1bmN0aW9uIHcodCxlKXt0aGlzLmNvbnRhaW5lcj10LmNvbnRhaW5lcix0aGlzLmdyYXBoRGl2PXQuZ3JhcGhEaXYsdGhpcy5waXhlbFJhdGlvPXQucGxvdEdsUGl4ZWxSYXRpb3x8d2luZG93LmRldmljZVBpeGVsUmF0aW8sdGhpcy5pZD10LmlkLHRoaXMuc3RhdGljUGxvdD0hIXQuc3RhdGljUGxvdCx0aGlzLnNjcm9sbFpvb209dGhpcy5ncmFwaERpdi5fY29udGV4dC5zY3JvbGxab29tLHRoaXMuZnVsbERhdGE9bnVsbCx0aGlzLnVwZGF0ZVJlZnMoZSksdGhpcy5tYWtlRnJhbWV3b3JrKCksdGhpcy5zdG9wcGVkfHwodGhpcy5nbHBsb3RPcHRpb25zPWYodGhpcyksdGhpcy5nbHBsb3RPcHRpb25zLm1lcmdlKGUpLHRoaXMuZ2xwbG90PWwodGhpcy5nbHBsb3RPcHRpb25zKSx0aGlzLmNhbWVyYT1wKHRoaXMpLHRoaXMudHJhY2VzPXt9LHRoaXMuc3Bpa2VzPWModGhpcy5nbHBsb3QpLHRoaXMuc2VsZWN0Qm94PXUodGhpcy5nbHBsb3Qse2lubmVyRmlsbDohMSxvdXRlckZpbGw6ITB9KSx0aGlzLmxhc3RCdXR0b25TdGF0ZT0wLHRoaXMucGlja1Jlc3VsdD1udWxsLHRoaXMuaXNNb3VzZU92ZXI9ITAsdGhpcy5zdG9wcGVkPSExLHRoaXMucmVkcmF3PXRoaXMuZHJhdy5iaW5kKHRoaXMpLHRoaXMucmVkcmF3KCkpfWUuZXhwb3J0cz13O3ZhciBrPXcucHJvdG90eXBlO2subWFrZUZyYW1ld29yaz1mdW5jdGlvbigpe2lmKHRoaXMuc3RhdGljUGxvdCl7aWYoIShpfHwobj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSxpPWgoe2NhbnZhczpuLHByZXNlcnZlRHJhd2luZ0J1ZmZlcjohMSxwcmVtdWx0aXBsaWVkQWxwaGE6ITAsYW50aWFsaWFzOiEwfSkpKSl0aHJvdyBuZXcgRXJyb3IoIkVycm9yIGNyZWF0aW5nIHN0YXRpYyBjYW52YXMvY29udGV4dCBmb3IgaW1hZ2Ugc2VydmVyIik7dGhpcy5jYW52YXM9bix0aGlzLmdsPWl9ZWxzZXt2YXIgdD10aGlzLmNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCIuZ2wtY2FudmFzLWZvY3VzIiksZT1oKHtjYW52YXM6dCxwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6ITAscHJlbXVsdGlwbGllZEFscGhhOiEwfSk7aWYoIWUpcmV0dXJuIGcodGhpcyksdm9pZCh0aGlzLnN0b3BwZWQ9ITApO3RoaXMuY2FudmFzPXQsdGhpcy5nbD1lfXZhciByPXRoaXMuY2FudmFzO3Iuc3R5bGUud2lkdGg9IjEwMCUiLHIuc3R5bGUuaGVpZ2h0PSIxMDAlIixyLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsci5zdHlsZS50b3A9IjBweCIsci5zdHlsZS5sZWZ0PSIwcHgiLHIuc3R5bGVbInBvaW50ZXItZXZlbnRzIl09Im5vbmUiLHRoaXMudXBkYXRlU2l6ZShyKSxyLmNsYXNzTmFtZSs9IiB1c2VyLXNlbGVjdC1ub25lIjt2YXIgYT10aGlzLnN2Z0NvbnRhaW5lcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwic3ZnIik7YS5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGEuc3R5bGUudG9wPWEuc3R5bGUubGVmdD0iMHB4IixhLnN0eWxlLndpZHRoPWEuc3R5bGUuaGVpZ2h0PSIxMDAlIixhLnN0eWxlWyJ6LWluZGV4Il09MjAsYS5zdHlsZVsicG9pbnRlci1ldmVudHMiXT0ibm9uZSI7dmFyIG89dGhpcy5tb3VzZUNvbnRhaW5lcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtvLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsby5zdHlsZVsicG9pbnRlci1ldmVudHMiXT0iYXV0byIsdGhpcy5waWNrQ2FudmFzPXRoaXMuY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoIi5nbC1jYW52YXMtcGljayIpO3ZhciBzPXRoaXMuY29udGFpbmVyO3MuYXBwZW5kQ2hpbGQoYSkscy5hcHBlbmRDaGlsZChvKTt2YXIgbD10aGlzO28uYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdXQiLGZ1bmN0aW9uKCl7bC5pc01vdXNlT3Zlcj0hMSxsLnVuaG92ZXIoKX0pLG8uYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdmVyIixmdW5jdGlvbigpe2wuaXNNb3VzZU92ZXI9ITB9KX0say50b0ltYWdlPWZ1bmN0aW9uKHQpe3R8fCh0PSJwbmciKSx0aGlzLnN0b3BwZWQ9ITAsdGhpcy5zdGF0aWNQbG90JiZ0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZChuKSx0aGlzLnVwZGF0ZVNpemUodGhpcy5jYW52YXMpO3ZhciBlPXRoaXMuZ2xwbG90LmdsLHI9ZS5kcmF3aW5nQnVmZmVyV2lkdGgsaT1lLmRyYXdpbmdCdWZmZXJIZWlnaHQ7ZS5jbGVhckNvbG9yKDEsMSwxLDApLGUuY2xlYXIoZS5DT0xPUl9CVUZGRVJfQklUfGUuREVQVEhfQlVGRkVSX0JJVCksdGhpcy5nbHBsb3Quc2V0RGlydHkoKSx0aGlzLmdscGxvdC5kcmF3KCksZS5iaW5kRnJhbWVidWZmZXIoZS5GUkFNRUJVRkZFUixudWxsKTt2YXIgYT1uZXcgVWludDhBcnJheShyKmkqNCk7ZS5yZWFkUGl4ZWxzKDAsMCxyLGksZS5SR0JBLGUuVU5TSUdORURfQllURSxhKTtmb3IodmFyIG89MCxzPWktMTtvPHM7KytvLC0tcylmb3IodmFyIGw9MDtsPHI7KytsKWZvcih2YXIgYz0wO2M8NDsrK2Mpe3ZhciB1PWFbNCoocipvK2wpK2NdO2FbNCoocipvK2wpK2NdPWFbNCoocipzK2wpK2NdLGFbNCoocipzK2wpK2NdPXV9dmFyIGg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7aC53aWR0aD1yLGguaGVpZ2h0PWk7dmFyIGYscD1oLmdldENvbnRleHQoIjJkIiksZD1wLmNyZWF0ZUltYWdlRGF0YShyLGkpO3N3aXRjaChkLmRhdGEuc2V0KGEpLHAucHV0SW1hZ2VEYXRhKGQsMCwwKSx0KXtjYXNlImpwZWciOmY9aC50b0RhdGFVUkwoImltYWdlL2pwZWciKTticmVhaztjYXNlIndlYnAiOmY9aC50b0RhdGFVUkwoImltYWdlL3dlYnAiKTticmVhaztkZWZhdWx0OmY9aC50b0RhdGFVUkwoImltYWdlL3BuZyIpfXJldHVybiB0aGlzLnN0YXRpY1Bsb3QmJnRoaXMuY29udGFpbmVyLnJlbW92ZUNoaWxkKG4pLGZ9LGsudXBkYXRlU2l6ZT1mdW5jdGlvbih0KXt0fHwodD10aGlzLmNhbnZhcyk7dmFyIGU9dGhpcy5waXhlbFJhdGlvLHI9dGhpcy5mdWxsTGF5b3V0LG49ci53aWR0aCxpPXIuaGVpZ2h0LGE9MHxNYXRoLmNlaWwoZSpuKSxvPTB8TWF0aC5jZWlsKGUqaSk7cmV0dXJuIHQud2lkdGg9PT1hJiZ0LmhlaWdodD09PW98fCh0LndpZHRoPWEsdC5oZWlnaHQ9byksdH0say5jb21wdXRlVGlja01hcmtzPWZ1bmN0aW9uKCl7dGhpcy54YXhpcy5zZXRTY2FsZSgpLHRoaXMueWF4aXMuc2V0U2NhbGUoKTtmb3IodmFyIHQ9W28uY2FsY1RpY2tzKHRoaXMueGF4aXMpLG8uY2FsY1RpY2tzKHRoaXMueWF4aXMpXSxlPTA7ZTwyOysrZSlmb3IodmFyIHI9MDtyPHRbZV0ubGVuZ3RoOysrcil0W2VdW3JdLnRleHQ9ZCh0W2VdW3JdLnRleHQrIiIpO3JldHVybiB0fSxrLnVwZGF0ZVJlZnM9ZnVuY3Rpb24odCl7dGhpcy5mdWxsTGF5b3V0PXQ7dmFyIGU9dGhpcy5pZC5tYXRjaChfKSxyPSJ4YXhpcyIrZVsxXSxuPSJ5YXhpcyIrZVsyXTt0aGlzLnhheGlzPXRoaXMuZnVsbExheW91dFtyXSx0aGlzLnlheGlzPXRoaXMuZnVsbExheW91dFtuXX0say5yZWxheW91dENhbGxiYWNrPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5ncmFwaERpdixlPXRoaXMueGF4aXMscj10aGlzLnlheGlzLG49dC5sYXlvdXQ7bi54YXhpcy5hdXRvcmFuZ2U9ZS5hdXRvcmFuZ2Usbi54YXhpcy5yYW5nZT1lLnJhbmdlLnNsaWNlKDApLG4ueWF4aXMuYXV0b3JhbmdlPXIuYXV0b3JhbmdlLG4ueWF4aXMucmFuZ2U9ci5yYW5nZS5zbGljZSgwKTt2YXIgaT17bGFzdElucHV0VGltZTp0aGlzLmNhbWVyYS5sYXN0SW5wdXRUaW1lfTtpW2UuX25hbWVdPWUucmFuZ2Uuc2xpY2UoMCksaVtyLl9uYW1lXT1yLnJhbmdlLnNsaWNlKDApLHQuZW1pdCgicGxvdGx5X3JlbGF5b3V0IixpKX0say5jYW1lcmFDaGFuZ2VkPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jYW1lcmE7dGhpcy5nbHBsb3Quc2V0RGF0YUJveCh0aGlzLmNhbGNEYXRhQm94KCkpO3ZhciBlPXRoaXMuY29tcHV0ZVRpY2tNYXJrcygpOyhmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wO3I8MjsrK3Ipe3ZhciBuPXRbcl0saT1lW3JdO2lmKG4ubGVuZ3RoIT09aS5sZW5ndGgpcmV0dXJuITA7Zm9yKHZhciBhPTA7YTxuLmxlbmd0aDsrK2EpaWYoblthXS54IT09aVthXS54KXJldHVybiEwfXJldHVybiExfSkoZSx0aGlzLmdscGxvdE9wdGlvbnMudGlja3MpJiYodGhpcy5nbHBsb3RPcHRpb25zLnRpY2tzPWUsdGhpcy5nbHBsb3RPcHRpb25zLmRhdGFCb3g9dC5kYXRhQm94LHRoaXMuZ2xwbG90LnVwZGF0ZSh0aGlzLmdscGxvdE9wdGlvbnMpLHRoaXMuaGFuZGxlQW5ub3RhdGlvbnMoKSl9LGsuaGFuZGxlQW5ub3RhdGlvbnM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5ncmFwaERpdixlPXRoaXMuZnVsbExheW91dC5hbm5vdGF0aW9ucyxyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07bi54cmVmPT09dGhpcy54YXhpcy5faWQmJm4ueXJlZj09PXRoaXMueWF4aXMuX2lkJiZhLmdldENvbXBvbmVudE1ldGhvZCgiYW5ub3RhdGlvbnMiLCJkcmF3T25lIikodCxyKX19LGsuZGVzdHJveT1mdW5jdGlvbigpe2lmKHRoaXMuZ2xwbG90KXt2YXIgdD10aGlzLnRyYWNlczt0JiZPYmplY3Qua2V5cyh0KS5tYXAoZnVuY3Rpb24oZSl7dFtlXS5kaXNwb3NlKCksZGVsZXRlIHRbZV19KSx0aGlzLmdscGxvdC5kaXNwb3NlKCksdGhpcy5jb250YWluZXIucmVtb3ZlQ2hpbGQodGhpcy5zdmdDb250YWluZXIpLHRoaXMuY29udGFpbmVyLnJlbW92ZUNoaWxkKHRoaXMubW91c2VDb250YWluZXIpLHRoaXMuZnVsbERhdGE9bnVsbCx0aGlzLmdscGxvdD1udWxsLHRoaXMuc3RvcHBlZD0hMCx0aGlzLmNhbWVyYS5tb3VzZUxpc3RlbmVyLmVuYWJsZWQ9ITEsdGhpcy5tb3VzZUNvbnRhaW5lci5yZW1vdmVFdmVudExpc3RlbmVyKCJ3aGVlbCIsdGhpcy5jYW1lcmEud2hlZWxMaXN0ZW5lciksdGhpcy5jYW1lcmE9bnVsbH19LGsucGxvdD1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5nbHBsb3Q7dGhpcy51cGRhdGVSZWZzKHIpLHRoaXMueGF4aXMuY2xlYXJDYWxjKCksdGhpcy55YXhpcy5jbGVhckNhbGMoKSx0aGlzLnVwZGF0ZVRyYWNlcyh0LGUpLHRoaXMudXBkYXRlRngoci5kcmFnbW9kZSk7dmFyIGk9ci53aWR0aCxhPXIuaGVpZ2h0O3RoaXMudXBkYXRlU2l6ZSh0aGlzLmNhbnZhcyk7dmFyIG89dGhpcy5nbHBsb3RPcHRpb25zO28ubWVyZ2Uociksby5zY3JlZW5Cb3g9WzAsMCxpLGFdO3ZhciBzPXtfZnVsbExheW91dDp7X2F4aXNDb25zdHJhaW50R3JvdXBzOnRoaXMuZ3JhcGhEaXYuX2Z1bGxMYXlvdXQuX2F4aXNDb25zdHJhaW50R3JvdXBzLHhheGlzOnRoaXMueGF4aXMseWF4aXM6dGhpcy55YXhpc319O3kocyx0aGlzLnhheGlzKSx5KHMsdGhpcy55YXhpcyk7dmFyIGwsYyx1PXIuX3NpemUsaD10aGlzLnhheGlzLmRvbWFpbixmPXRoaXMueWF4aXMuZG9tYWluO2ZvcihvLnZpZXdCb3g9W3UubCtoWzBdKnUudyx1LmIrZlswXSp1LmgsaS11LnItKDEtaFsxXSkqdS53LGEtdS50LSgxLWZbMV0pKnUuaF0sdGhpcy5tb3VzZUNvbnRhaW5lci5zdHlsZS53aWR0aD11LncqKGhbMV0taFswXSkrInB4Iix0aGlzLm1vdXNlQ29udGFpbmVyLnN0eWxlLmhlaWdodD11LmgqKGZbMV0tZlswXSkrInB4Iix0aGlzLm1vdXNlQ29udGFpbmVyLmhlaWdodD11LmgqKGZbMV0tZlswXSksdGhpcy5tb3VzZUNvbnRhaW5lci5zdHlsZS5sZWZ0PXUubCtoWzBdKnUudysicHgiLHRoaXMubW91c2VDb250YWluZXIuc3R5bGUudG9wPXUudCsoMS1mWzFdKSp1LmgrInB4IixjPTA7YzwyOysrYykobD10aGlzW2JbY11dKS5fbGVuZ3RoPW8udmlld0JveFtjKzJdLW8udmlld0JveFtjXSx4KGwpLGwuc2V0U2NhbGUoKTt2KHMpLG8udGlja3M9dGhpcy5jb21wdXRlVGlja01hcmtzKCksby5kYXRhQm94PXRoaXMuY2FsY0RhdGFCb3goKSxvLm1lcmdlKHIpLG4udXBkYXRlKG8pLHRoaXMuZ2xwbG90LmRyYXcoKX0say5jYWxjRGF0YUJveD1mdW5jdGlvbigpe3ZhciB0PXRoaXMueGF4aXMsZT10aGlzLnlheGlzLHI9dC5yYW5nZSxuPWUucmFuZ2UsaT10LnIybCxhPWUucjJsO3JldHVybltpKHJbMF0pLGEoblswXSksaShyWzFdKSxhKG5bMV0pXX0say5zZXRSYW5nZXM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy54YXhpcyxyPXRoaXMueWF4aXMsbj1lLmwycixpPXIubDJyO2UucmFuZ2U9W24odFswXSksbih0WzJdKV0sci5yYW5nZT1baSh0WzFdKSxpKHRbM10pXX0say51cGRhdGVUcmFjZXM9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGksYT1PYmplY3Qua2V5cyh0aGlzLnRyYWNlcyk7dGhpcy5mdWxsRGF0YT10O3Q6Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyl7dmFyIG89YVtyXSxzPXRoaXMudHJhY2VzW29dO2ZvcihuPTA7bjx0Lmxlbmd0aDtuKyspaWYoKGk9dFtuXSkudWlkPT09byYmaS50eXBlPT09cy50eXBlKWNvbnRpbnVlIHQ7cy5kaXNwb3NlKCksZGVsZXRlIHRoaXMudHJhY2VzW29dfWZvcihyPTA7cjx0Lmxlbmd0aDtyKyspe2k9dFtyXTt2YXIgbD1lW3JdLGM9dGhpcy50cmFjZXNbaS51aWRdO2M/Yy51cGRhdGUoaSxsKTooYz1pLl9tb2R1bGUucGxvdCh0aGlzLGksbCksdGhpcy50cmFjZXNbaS51aWRdPWMpfXRoaXMuZ2xwbG90Lm9iamVjdHMuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0Ll90cmFjZS5pbmRleC1lLl90cmFjZS5pbmRleH0pfSxrLnVwZGF0ZUZ4PWZ1bmN0aW9uKHQpeyJsYXNzbyI9PT10fHwic2VsZWN0Ij09PXQ/KHRoaXMucGlja0NhbnZhcy5zdHlsZVsicG9pbnRlci1ldmVudHMiXT0ibm9uZSIsdGhpcy5tb3VzZUNvbnRhaW5lci5zdHlsZVsicG9pbnRlci1ldmVudHMiXT0ibm9uZSIpOih0aGlzLnBpY2tDYW52YXMuc3R5bGVbInBvaW50ZXItZXZlbnRzIl09ImF1dG8iLHRoaXMubW91c2VDb250YWluZXIuc3R5bGVbInBvaW50ZXItZXZlbnRzIl09ImF1dG8iKSx0aGlzLm1vdXNlQ29udGFpbmVyLnN0eWxlLmN1cnNvcj0icGFuIj09PXQ/Im1vdmUiOiJ6b29tIj09PXQ/ImNyb3NzaGFpciI6bnVsbH0say5lbWl0UG9pbnRBY3Rpb249ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsbj10LnRyYWNlLnVpZCxpPXQucG9pbnRJbmRleCxhPTA7YTx0aGlzLmZ1bGxEYXRhLmxlbmd0aDthKyspdGhpcy5mdWxsRGF0YVthXS51aWQ9PT1uJiYocj10aGlzLmZ1bGxEYXRhW2FdKTt2YXIgbz17eDp0LnRyYWNlQ29vcmRbMF0seTp0LnRyYWNlQ29vcmRbMV0sY3VydmVOdW1iZXI6ci5pbmRleCxwb2ludE51bWJlcjppLGRhdGE6ci5faW5wdXQsZnVsbERhdGE6dGhpcy5mdWxsRGF0YSx4YXhpczp0aGlzLnhheGlzLHlheGlzOnRoaXMueWF4aXN9O3MuYXBwZW5kQXJyYXlQb2ludFZhbHVlKG8scixpKSx0aGlzLmdyYXBoRGl2LmVtaXQoZSx7cG9pbnRzOltvXX0pfSxrLmRyYXc9ZnVuY3Rpb24oKXtpZighdGhpcy5zdG9wcGVkKXtyZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5yZWRyYXcpO3ZhciB0PXRoaXMuZ2xwbG90LGU9dGhpcy5jYW1lcmEscj1lLm1vdXNlTGlzdGVuZXIsbj0xPT09dGhpcy5sYXN0QnV0dG9uU3RhdGUmJjA9PT1yLmJ1dHRvbnMsaT10aGlzLmZ1bGxMYXlvdXQ7dGhpcy5sYXN0QnV0dG9uU3RhdGU9ci5idXR0b25zLHRoaXMuY2FtZXJhQ2hhbmdlZCgpO3ZhciBhLG89ci54KnQucGl4ZWxSYXRpbyxsPXRoaXMuY2FudmFzLmhlaWdodC10LnBpeGVsUmF0aW8qci55O2lmKGUuYm94RW5hYmxlZCYmInpvb20iPT09aS5kcmFnbW9kZSl7dGhpcy5zZWxlY3RCb3guZW5hYmxlZD0hMDtmb3IodmFyIGM9dGhpcy5zZWxlY3RCb3guc2VsZWN0Qm94PVtNYXRoLm1pbihlLmJveFN0YXJ0WzBdLGUuYm94RW5kWzBdKSxNYXRoLm1pbihlLmJveFN0YXJ0WzFdLGUuYm94RW5kWzFdKSxNYXRoLm1heChlLmJveFN0YXJ0WzBdLGUuYm94RW5kWzBdKSxNYXRoLm1heChlLmJveFN0YXJ0WzFdLGUuYm94RW5kWzFdKV0sdT0wO3U8Mjt1KyspZS5ib3hTdGFydFt1XT09PWUuYm94RW5kW3VdJiYoY1t1XT10LmRhdGFCb3hbdV0sY1t1KzJdPXQuZGF0YUJveFt1KzJdKTt0LnNldERpcnR5KCl9ZWxzZSBpZighZS5wYW5uaW5nJiZ0aGlzLmlzTW91c2VPdmVyKXt0aGlzLnNlbGVjdEJveC5lbmFibGVkPSExO3ZhciBoPWkuX3NpemUsZj10aGlzLnhheGlzLmRvbWFpbixwPXRoaXMueWF4aXMuZG9tYWluLGQ9KGE9dC5waWNrKG8vdC5waXhlbFJhdGlvK2gubCtmWzBdKmgudyxsL3QucGl4ZWxSYXRpby0oaC50KygxLXBbMV0pKmguaCkpKSYmYS5vYmplY3QuX3RyYWNlLmhhbmRsZVBpY2soYSk7aWYoZCYmbiYmdGhpcy5lbWl0UG9pbnRBY3Rpb24oZCwicGxvdGx5X2NsaWNrIiksYSYmInNraXAiIT09YS5vYmplY3QuX3RyYWNlLmhvdmVyaW5mbyYmaS5ob3Zlcm1vZGUmJmQmJighdGhpcy5sYXN0UGlja1Jlc3VsdHx8dGhpcy5sYXN0UGlja1Jlc3VsdC50cmFjZVVpZCE9PWQudHJhY2UudWlkfHx0aGlzLmxhc3RQaWNrUmVzdWx0LmRhdGFDb29yZFswXSE9PWQuZGF0YUNvb3JkWzBdfHx0aGlzLmxhc3RQaWNrUmVzdWx0LmRhdGFDb29yZFsxXSE9PWQuZGF0YUNvb3JkWzFdKSl7dmFyIGc9ZDt0aGlzLmxhc3RQaWNrUmVzdWx0PXt0cmFjZVVpZDpkLnRyYWNlP2QudHJhY2UudWlkOm51bGwsZGF0YUNvb3JkOmQuZGF0YUNvb3JkLnNsaWNlKCl9LHRoaXMuc3Bpa2VzLnVwZGF0ZSh7Y2VudGVyOmEuZGF0YUNvb3JkfSksZy5zY3JlZW5Db29yZD1bKCh0LnZpZXdCb3hbMl0tdC52aWV3Qm94WzBdKSooYS5kYXRhQ29vcmRbMF0tdC5kYXRhQm94WzBdKS8odC5kYXRhQm94WzJdLXQuZGF0YUJveFswXSkrdC52aWV3Qm94WzBdKS90LnBpeGVsUmF0aW8sKHRoaXMuY2FudmFzLmhlaWdodC0odC52aWV3Qm94WzNdLXQudmlld0JveFsxXSkqKGEuZGF0YUNvb3JkWzFdLXQuZGF0YUJveFsxXSkvKHQuZGF0YUJveFszXS10LmRhdGFCb3hbMV0pLXQudmlld0JveFsxXSkvdC5waXhlbFJhdGlvXSx0aGlzLmVtaXRQb2ludEFjdGlvbihkLCJwbG90bHlfaG92ZXIiKTt2YXIgbT10aGlzLmZ1bGxEYXRhW2cudHJhY2UuaW5kZXhdfHx7fSx2PWcucG9pbnRJbmRleCx5PXMuY2FzdEhvdmVyaW5mbyhtLGksdik7aWYoeSYmImFsbCIhPT15KXt2YXIgeD15LnNwbGl0KCIrIik7LTE9PT14LmluZGV4T2YoIngiKSYmKGcudHJhY2VDb29yZFswXT12b2lkIDApLC0xPT09eC5pbmRleE9mKCJ5IikmJihnLnRyYWNlQ29vcmRbMV09dm9pZCAwKSwtMT09PXguaW5kZXhPZigieiIpJiYoZy50cmFjZUNvb3JkWzJdPXZvaWQgMCksLTE9PT14LmluZGV4T2YoInRleHQiKSYmKGcudGV4dExhYmVsPXZvaWQgMCksLTE9PT14LmluZGV4T2YoIm5hbWUiKSYmKGcubmFtZT12b2lkIDApfXMubG9uZUhvdmVyKHt4Omcuc2NyZWVuQ29vcmRbMF0seTpnLnNjcmVlbkNvb3JkWzFdLHhMYWJlbDp0aGlzLmhvdmVyRm9ybWF0dGVyKCJ4YXhpcyIsZy50cmFjZUNvb3JkWzBdKSx5TGFiZWw6dGhpcy5ob3ZlckZvcm1hdHRlcigieWF4aXMiLGcudHJhY2VDb29yZFsxXSksekxhYmVsOmcudHJhY2VDb29yZFsyXSx0ZXh0OmcudGV4dExhYmVsLG5hbWU6Zy5uYW1lLGNvbG9yOnMuY2FzdEhvdmVyT3B0aW9uKG0sdiwiYmdjb2xvciIpfHxnLmNvbG9yLGJvcmRlckNvbG9yOnMuY2FzdEhvdmVyT3B0aW9uKG0sdiwiYm9yZGVyY29sb3IiKSxmb250RmFtaWx5OnMuY2FzdEhvdmVyT3B0aW9uKG0sdiwiZm9udC5mYW1pbHkiKSxmb250U2l6ZTpzLmNhc3RIb3Zlck9wdGlvbihtLHYsImZvbnQuc2l6ZSIpLGZvbnRDb2xvcjpzLmNhc3RIb3Zlck9wdGlvbihtLHYsImZvbnQuY29sb3IiKX0se2NvbnRhaW5lcjp0aGlzLnN2Z0NvbnRhaW5lcixnZDp0aGlzLmdyYXBoRGl2fSl9fWF8fHRoaXMudW5ob3ZlcigpLHQuZHJhdygpfX0say51bmhvdmVyPWZ1bmN0aW9uKCl7dGhpcy5sYXN0UGlja1Jlc3VsdCYmKHRoaXMuc3Bpa2VzLnVwZGF0ZSh7fSksdGhpcy5sYXN0UGlja1Jlc3VsdD1udWxsLHRoaXMuZ3JhcGhEaXYuZW1pdCgicGxvdGx5X3VuaG92ZXIiKSxzLmxvbmVVbmhvdmVyKHRoaXMuc3ZnQ29udGFpbmVyKSl9LGsuaG92ZXJGb3JtYXR0ZXI9ZnVuY3Rpb24odCxlKXtpZih2b2lkIDAhPT1lKXt2YXIgcj10aGlzW3RdO3JldHVybiBvLnRpY2tUZXh0KHIsci5jMmwoZSksImhvdmVyIikudGV4dH19fSx7Ii4uLy4uL2NvbXBvbmVudHMvZngiOjYwMCwiLi4vLi4vbGliL2h0bWwydW5pY29kZSI6NjgyLCIuLi8uLi9saWIvc2hvd19ub193ZWJnbF9tc2ciOjcwNSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjczMiwiLi4vLi4vcmVnaXN0cnkiOjgxNywiLi4vY2FydGVzaWFuL2F1dG9yYW5nZSI6NzMxLCIuLi9jYXJ0ZXNpYW4vY29uc3RhbnRzIjo3MzcsIi4uL2NhcnRlc2lhbi9jb25zdHJhaW50cyI6NzM5LCIuL2NhbWVyYSI6NzY5LCIuL2NvbnZlcnQiOjc3MCwiZ2wtcGxvdDJkIjoyNzUsImdsLXNlbGVjdC1ib3giOjI4NSwiZ2wtc3Bpa2VzMmQiOjI5NCwid2ViZ2wtY29udGV4dCI6NTIxfV0sNzczOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3Q9dHx8ZG9jdW1lbnQuYm9keSxlPWV8fHt9O3ZhciByPVsuMDEsMS8wXTsiZGlzdGFuY2VMaW1pdHMiaW4gZSYmKHJbMF09ZS5kaXN0YW5jZUxpbWl0c1swXSxyWzFdPWUuZGlzdGFuY2VMaW1pdHNbMV0pOyJ6b29tTWluImluIGUmJihyWzBdPWUuem9vbU1pbik7Inpvb21NYXgiaW4gZSYmKHJbMV09ZS56b29tTWF4KTt2YXIgYz1pKHtjZW50ZXI6ZS5jZW50ZXJ8fFswLDAsMF0sdXA6ZS51cHx8WzAsMSwwXSxleWU6ZS5leWV8fFswLDAsMTBdLG1vZGU6ZS5tb2RlfHwib3JiaXQiLGRpc3RhbmNlTGltaXRzOnJ9KSx1PVswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwXSxoPTAsZj10LmNsaWVudFdpZHRoLHA9dC5jbGllbnRIZWlnaHQsZD17a2V5QmluZGluZ01vZGU6InJvdGF0ZSIsdmlldzpjLGVsZW1lbnQ6dCxkZWxheTplLmRlbGF5fHwxNixyb3RhdGVTcGVlZDplLnJvdGF0ZVNwZWVkfHwxLHpvb21TcGVlZDplLnpvb21TcGVlZHx8MSx0cmFuc2xhdGVTcGVlZDplLnRyYW5zbGF0ZVNwZWVkfHwxLGZsaXBYOiEhZS5mbGlwWCxmbGlwWTohIWUuZmxpcFksbW9kZXM6Yy5tb2Rlcyx0aWNrOmZ1bmN0aW9uKCl7dmFyIGU9bigpLHI9dGhpcy5kZWxheSxpPWUtMipyO2MuaWRsZShlLXIpLGMucmVjYWxjTWF0cml4KGkpLGMuZmx1c2goZS0oMTAwKzIqcikpO2Zvcih2YXIgYT0hMCxvPWMuY29tcHV0ZWRNYXRyaXgscz0wO3M8MTY7KytzKWE9YSYmdVtzXT09PW9bc10sdVtzXT1vW3NdO3ZhciBsPXQuY2xpZW50V2lkdGg9PT1mJiZ0LmNsaWVudEhlaWdodD09PXA7cmV0dXJuIGY9dC5jbGllbnRXaWR0aCxwPXQuY2xpZW50SGVpZ2h0LGE/IWw6KGg9TWF0aC5leHAoYy5jb21wdXRlZFJhZGl1c1swXSksITApfSxsb29rQXQ6ZnVuY3Rpb24odCxlLHIpe2MubG9va0F0KGMubGFzdFQoKSx0LGUscil9LHJvdGF0ZTpmdW5jdGlvbih0LGUscil7Yy5yb3RhdGUoYy5sYXN0VCgpLHQsZSxyKX0scGFuOmZ1bmN0aW9uKHQsZSxyKXtjLnBhbihjLmxhc3RUKCksdCxlLHIpfSx0cmFuc2xhdGU6ZnVuY3Rpb24odCxlLHIpe2MudHJhbnNsYXRlKGMubGFzdFQoKSx0LGUscil9fTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhkLHttYXRyaXg6e2dldDpmdW5jdGlvbigpe3JldHVybiBjLmNvbXB1dGVkTWF0cml4fSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGMuc2V0TWF0cml4KGMubGFzdFQoKSx0KSxjLmNvbXB1dGVkTWF0cml4fSxlbnVtZXJhYmxlOiEwfSxtb2RlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYy5nZXRNb2RlKCl9LHNldDpmdW5jdGlvbih0KXt2YXIgZT1jLmNvbXB1dGVkVXAuc2xpY2UoKSxyPWMuY29tcHV0ZWRFeWUuc2xpY2UoKSxpPWMuY29tcHV0ZWRDZW50ZXIuc2xpY2UoKTtpZihjLnNldE1vZGUodCksInR1cm50YWJsZSI9PT10KXt2YXIgYT1uKCk7Yy5fYWN0aXZlLmxvb2tBdChhLHIsaSxlKSxjLl9hY3RpdmUubG9va0F0KGErNTAwLHIsaSxbMCwwLDFdKSxjLl9hY3RpdmUuZmx1c2goYSl9cmV0dXJuIGMuZ2V0TW9kZSgpfSxlbnVtZXJhYmxlOiEwfSxjZW50ZXI6e2dldDpmdW5jdGlvbigpe3JldHVybiBjLmNvbXB1dGVkQ2VudGVyfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGMubG9va0F0KGMubGFzdFQoKSxudWxsLHQpLGMuY29tcHV0ZWRDZW50ZXJ9LGVudW1lcmFibGU6ITB9LGV5ZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGMuY29tcHV0ZWRFeWV9LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gYy5sb29rQXQoYy5sYXN0VCgpLHQpLGMuY29tcHV0ZWRFeWV9LGVudW1lcmFibGU6ITB9LHVwOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYy5jb21wdXRlZFVwfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGMubG9va0F0KGMubGFzdFQoKSxudWxsLG51bGwsdCksYy5jb21wdXRlZFVwfSxlbnVtZXJhYmxlOiEwfSxkaXN0YW5jZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGh9LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gYy5zZXREaXN0YW5jZShjLmxhc3RUKCksdCksdH0sZW51bWVyYWJsZTohMH0sZGlzdGFuY2VMaW1pdHM6e2dldDpmdW5jdGlvbigpe3JldHVybiBjLmdldERpc3RhbmNlTGltaXRzKHIpfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGMuc2V0RGlzdGFuY2VMaW1pdHModCksdH0sZW51bWVyYWJsZTohMH19KSx0LmFkZEV2ZW50TGlzdGVuZXIoImNvbnRleHRtZW51IixmdW5jdGlvbih0KXtyZXR1cm4gdC5wcmV2ZW50RGVmYXVsdCgpLCExfSk7dmFyIGc9MCxtPTAsdj17c2hpZnQ6ITEsY29udHJvbDohMSxhbHQ6ITEsbWV0YTohMX07ZnVuY3Rpb24geShlLHIsaSxhKXt2YXIgbz1kLmtleUJpbmRpbmdNb2RlO2lmKCExIT09byl7dmFyIHM9InJvdGF0ZSI9PT1vLGw9InBhbiI9PT1vLHU9Inpvb20iPT09byxmPSEhYS5jb250cm9sLHA9ISFhLmFsdCx5PSEhYS5zaGlmdCx4PSEhKDEmZSksYj0hISgyJmUpLF89ISEoNCZlKSx3PTEvdC5jbGllbnRIZWlnaHQsaz13KihyLWcpLE09dyooaS1tKSxBPWQuZmxpcFg/MTotMSxUPWQuZmxpcFk/MTotMSxTPW4oKSxFPU1hdGguUEkqZC5yb3RhdGVTcGVlZDtpZigocyYmeCYmIWYmJiFwJiYheXx8eCYmIWYmJiFwJiZ5KSYmYy5yb3RhdGUoUyxBKkUqaywtVCpFKk0sMCksKGwmJngmJiFmJiYhcCYmIXl8fGJ8fHgmJmYmJiFwJiYheSkmJmMucGFuKFMsLWQudHJhbnNsYXRlU3BlZWQqaypoLGQudHJhbnNsYXRlU3BlZWQqTSpoLDApLHUmJngmJiFmJiYhcCYmIXl8fF98fHgmJiFmJiZwJiYheSl7dmFyIEM9LWQuem9vbVNwZWVkKk0vd2luZG93LmlubmVySGVpZ2h0KihTLWMubGFzdFQoKSkqMTAwO2MucGFuKFMsMCwwLGgqKE1hdGguZXhwKEMpLTEpKX1yZXR1cm4gZz1yLG09aSx2PWEsITB9fXJldHVybiBkLm1vdXNlTGlzdGVuZXI9YSh0LHkpLHQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsZnVuY3Rpb24oZSl7dmFyIHI9cyhlLmNoYW5nZWRUb3VjaGVzWzBdLHQpO3koMCxyWzBdLHJbMV0sdikseSgxLHJbMF0sclsxXSx2KSxlLnByZXZlbnREZWZhdWx0KCl9LCEhbCYme3Bhc3NpdmU6ITF9KSx0LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsZnVuY3Rpb24oZSl7dmFyIHI9cyhlLmNoYW5nZWRUb3VjaGVzWzBdLHQpO3koMSxyWzBdLHJbMV0sdiksZS5wcmV2ZW50RGVmYXVsdCgpfSwhIWwmJntwYXNzaXZlOiExfSksdC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIsZnVuY3Rpb24odCl7eSgwLGcsbSx2KSx0LnByZXZlbnREZWZhdWx0KCl9LCEhbCYme3Bhc3NpdmU6ITF9KSxkLndoZWVsTGlzdGVuZXI9byh0LGZ1bmN0aW9uKHQsZSl7aWYoITEhPT1kLmtleUJpbmRpbmdNb2RlKXt2YXIgcj1kLmZsaXBYPzE6LTEsaT1kLmZsaXBZPzE6LTEsYT1uKCk7aWYoTWF0aC5hYnModCk+TWF0aC5hYnMoZSkpYy5yb3RhdGUoYSwwLDAsLXQqcipNYXRoLlBJKmQucm90YXRlU3BlZWQvd2luZG93LmlubmVyV2lkdGgpO2Vsc2V7dmFyIG89LWQuem9vbVNwZWVkKmkqZS93aW5kb3cuaW5uZXJIZWlnaHQqKGEtYy5sYXN0VCgpKS8yMDtjLnBhbihhLDAsMCxoKihNYXRoLmV4cChvKS0xKSl9fX0sITApLGR9O3ZhciBuPXQoInJpZ2h0LW5vdyIpLGk9dCgiM2QtdmlldyIpLGE9dCgibW91c2UtY2hhbmdlIiksbz10KCJtb3VzZS13aGVlbCIpLHM9dCgibW91c2UtZXZlbnQtb2Zmc2V0IiksbD10KCJoYXMtcGFzc2l2ZS1ldmVudHMiKX0seyIzZC12aWV3Ijo0MywiaGFzLXBhc3NpdmUtZXZlbnRzIjozNzksIm1vdXNlLWNoYW5nZSI6NDAyLCJtb3VzZS1ldmVudC1vZmZzZXQiOjQwMywibW91c2Utd2hlZWwiOjQwNSwicmlnaHQtbm93Ijo0NjV9XSw3NzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsLGk9dCgiLi4vLi4vY29tcG9uZW50cy9meC9sYXlvdXRfYXR0cmlidXRlcyIpLGE9dCgiLi9zY2VuZSIpLG89dCgiLi4vZ2V0X2RhdGEiKS5nZXRTdWJwbG90RGF0YSxzPXQoIi4uLy4uL2xpYiIpLGw9dCgiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiKTtyLm5hbWU9ImdsM2QiLHIuYXR0cj0ic2NlbmUiLHIuaWRSb290PSJzY2VuZSIsci5pZFJlZ2V4PXIuYXR0clJlZ2V4PXMuY291bnRlclJlZ2V4KCJzY2VuZSIpLHIuYXR0cmlidXRlcz10KCIuL2xheW91dC9hdHRyaWJ1dGVzIiksci5sYXlvdXRBdHRyaWJ1dGVzPXQoIi4vbGF5b3V0L2xheW91dF9hdHRyaWJ1dGVzIiksci5iYXNlTGF5b3V0QXR0ck92ZXJyaWRlcz1uKHtob3ZlcmxhYmVsOmkuaG92ZXJsYWJlbH0sInBsb3QiLCJuZXN0ZWQiKSxyLnN1cHBseUxheW91dERlZmF1bHRzPXQoIi4vbGF5b3V0L2RlZmF1bHRzIiksci5wbG90PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0LHI9dC5fZnVsbERhdGEsbj1lLl9zdWJwbG90cy5nbDNkLGk9MDtpPG4ubGVuZ3RoO2krKyl7dmFyIGw9bltpXSxjPW8ociwiZ2wzZCIsbCksdT1lW2xdLGg9dS5fc2NlbmU7aHx8KGg9bmV3IGEoe2lkOmwsZ3JhcGhEaXY6dCxjb250YWluZXI6dC5xdWVyeVNlbGVjdG9yKCIuZ2wtY29udGFpbmVyIiksc3RhdGljUGxvdDp0Ll9jb250ZXh0LnN0YXRpY1Bsb3QscGxvdEdsUGl4ZWxSYXRpbzp0Ll9jb250ZXh0LnBsb3RHbFBpeGVsUmF0aW99LGUpLHUuX3NjZW5lPWgpLGguY2FtZXJhSW5pdGlhbHx8KGguY2FtZXJhSW5pdGlhbD1zLmV4dGVuZERlZXAoe30sdS5jYW1lcmEpKSxoLnBsb3QoYyxlLHQubGF5b3V0KX19LHIuY2xlYW49ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPW4uX3N1YnBsb3RzLmdsM2R8fFtdLGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIG89aVthXTshZVtvXSYmbltvXS5fc2NlbmUmJihuW29dLl9zY2VuZS5kZXN0cm95KCksbi5faW5mb2xheWVyJiZuLl9pbmZvbGF5ZXIuc2VsZWN0QWxsKCIuYW5ub3RhdGlvbi0iK28pLnJlbW92ZSgpKX19LHIudG9TVkc9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX2Z1bGxMYXlvdXQscj1lLl9zdWJwbG90cy5nbDNkLG49ZS5fc2l6ZSxpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBhPWVbcltpXV0sbz1hLmRvbWFpbixzPWEuX3NjZW5lLGM9cy50b0ltYWdlKCJwbmciKTtlLl9nbGltYWdlcy5hcHBlbmQoInN2ZzppbWFnZSIpLmF0dHIoe3htbG5zOmwuc3ZnLCJ4bGluazpocmVmIjpjLHg6bi5sK24udypvLnhbMF0seTpuLnQrbi5oKigxLW8ueVsxXSksd2lkdGg6bi53KihvLnhbMV0tby54WzBdKSxoZWlnaHQ6bi5oKihvLnlbMV0tby55WzBdKSxwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJub25lIn0pLHMuZGVzdHJveSgpfX0sci5jbGVhbklkPWZ1bmN0aW9uKHQpe2lmKHQubWF0Y2goL15zY2VuZVswLTldKiQvKSl7dmFyIGU9dC5zdWJzdHIoNSk7cmV0dXJuIjEiPT09ZSYmKGU9IiIpLCJzY2VuZSIrZX19LHIudXBkYXRlRng9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX3N1YnBsb3RzLmdsM2Qscj0wO3I8ZS5sZW5ndGg7cisrKXt0W2Vbcl1dLl9zY2VuZS51cGRhdGVGeCh0LmRyYWdtb2RlLHQuaG92ZXJtb2RlKX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvZngvbGF5b3V0X2F0dHJpYnV0ZXMiOjYwMSwiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiOjY2MywiLi4vLi4vbGliIjo2ODQsIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjcxNSwiLi4vZ2V0X2RhdGEiOjc2OCwiLi9sYXlvdXQvYXR0cmlidXRlcyI6Nzc1LCIuL2xheW91dC9kZWZhdWx0cyI6Nzc5LCIuL2xheW91dC9sYXlvdXRfYXR0cmlidXRlcyI6NzgwLCIuL3NjZW5lIjo3ODR9XSw3NzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtzY2VuZTp7dmFsVHlwZToic3VicGxvdGlkIixkZmx0OiJzY2VuZSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifX19LHt9XSw3NzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGk9dCgiLi4vLi4vY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxvPXQoIi4uLy4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbDtlLmV4cG9ydHM9byh7dmlzaWJsZTppLnZpc2libGUsc2hvd3NwaWtlczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH0sc3Bpa2VzaWRlczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH0sc3Bpa2V0aGlja25lc3M6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoyfSxzcGlrZWNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpuLmRlZmF1bHRMaW5lfSxzaG93YmFja2dyb3VuZDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sYmFja2dyb3VuZGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDoicmdiYSgyMDQsIDIwNCwgMjA0LCAwLjUpIn0sc2hvd2F4ZXNsYWJlbHM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LGNvbG9yOmkuY29sb3IsY2F0ZWdvcnlvcmRlcjppLmNhdGVnb3J5b3JkZXIsY2F0ZWdvcnlhcnJheTppLmNhdGVnb3J5YXJyYXksdGl0bGU6aS50aXRsZSx0aXRsZWZvbnQ6aS50aXRsZWZvbnQsdHlwZTppLnR5cGUsYXV0b3JhbmdlOmkuYXV0b3JhbmdlLHJhbmdlbW9kZTppLnJhbmdlbW9kZSxyYW5nZTppLnJhbmdlLHRpY2ttb2RlOmkudGlja21vZGUsbnRpY2tzOmkubnRpY2tzLHRpY2swOmkudGljazAsZHRpY2s6aS5kdGljayx0aWNrdmFsczppLnRpY2t2YWxzLHRpY2t0ZXh0OmkudGlja3RleHQsdGlja3M6aS50aWNrcyxtaXJyb3I6aS5taXJyb3IsdGlja2xlbjppLnRpY2tsZW4sdGlja3dpZHRoOmkudGlja3dpZHRoLHRpY2tjb2xvcjppLnRpY2tjb2xvcixzaG93dGlja2xhYmVsczppLnNob3d0aWNrbGFiZWxzLHRpY2tmb250OmkudGlja2ZvbnQsdGlja2FuZ2xlOmkudGlja2FuZ2xlLHRpY2twcmVmaXg6aS50aWNrcHJlZml4LHNob3d0aWNrcHJlZml4Omkuc2hvd3RpY2twcmVmaXgsdGlja3N1ZmZpeDppLnRpY2tzdWZmaXgsc2hvd3RpY2tzdWZmaXg6aS5zaG93dGlja3N1ZmZpeCxzaG93ZXhwb25lbnQ6aS5zaG93ZXhwb25lbnQsZXhwb25lbnRmb3JtYXQ6aS5leHBvbmVudGZvcm1hdCxzZXBhcmF0ZXRob3VzYW5kczppLnNlcGFyYXRldGhvdXNhbmRzLHRpY2tmb3JtYXQ6aS50aWNrZm9ybWF0LHRpY2tmb3JtYXRzdG9wczppLnRpY2tmb3JtYXRzdG9wcyxob3ZlcmZvcm1hdDppLmhvdmVyZm9ybWF0LHNob3dsaW5lOmkuc2hvd2xpbmUsbGluZWNvbG9yOmkubGluZWNvbG9yLGxpbmV3aWR0aDppLmxpbmV3aWR0aCxzaG93Z3JpZDppLnNob3dncmlkLGdyaWRjb2xvcjphKHt9LGkuZ3JpZGNvbG9yLHtkZmx0OiJyZ2IoMjA0LCAyMDQsIDIwNCkifSksZ3JpZHdpZHRoOmkuZ3JpZHdpZHRoLHplcm9saW5lOmkuemVyb2xpbmUsemVyb2xpbmVjb2xvcjppLnplcm9saW5lY29sb3IsemVyb2xpbmV3aWR0aDppLnplcm9saW5ld2lkdGh9LCJwbG90IiwiZnJvbS1yb290Iil9LHsiLi4vLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NTU4LCIuLi8uLi8uLi9saWIvZXh0ZW5kIjo2NzMsIi4uLy4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjcxNSwiLi4vLi4vY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzIjo3NDR9XSw3Nzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgidGlueWNvbG9yMiIpLm1peCxpPXQoIi4uLy4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLG89dCgiLi9heGlzX2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL2NhcnRlc2lhbi90eXBlX2RlZmF1bHRzIiksbD10KCIuLi8uLi9jYXJ0ZXNpYW4vYXhpc19kZWZhdWx0cyIpLGM9WyJ4YXhpcyIsInlheGlzIiwiemF4aXMiXTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciB1LGg7ZnVuY3Rpb24gZih0LGUpe3JldHVybiBpLmNvZXJjZSh1LGgsbyx0LGUpfWZvcih2YXIgcD0wO3A8Yy5sZW5ndGg7cCsrKXt2YXIgZD1jW3BdO3U9dFtkXXx8e30sKGg9YS5uZXdDb250YWluZXIoZSxkKSkuX2lkPWRbMF0rci5zY2VuZSxoLl9uYW1lPWQscyh1LGgsZixyLmRhdGEpLGwodSxoLGYse2ZvbnQ6ci5mb250LGxldHRlcjpkWzBdLGRhdGE6ci5kYXRhLHNob3dHcmlkOiEwLGJnQ29sb3I6ci5iZ0NvbG9yLGNhbGVuZGFyOnIuY2FsZW5kYXJ9LHIuZnVsbExheW91dCksZigiZ3JpZGNvbG9yIixuKGguY29sb3Isci5iZ0NvbG9yLDEzNjAwLzE4NykudG9SZ2JTdHJpbmcoKSksZigidGl0bGUiLGRbMF0pLGguc2V0U2NhbGU9aS5ub29wLGYoInNob3dzcGlrZXMiKSYmKGYoInNwaWtlc2lkZXMiKSxmKCJzcGlrZXRoaWNrbmVzcyIpLGYoInNwaWtlY29sb3IiLGguY29sb3IpKSxmKCJzaG93YXhlc2xhYmVscyIpLGYoInNob3diYWNrZ3JvdW5kIikmJmYoImJhY2tncm91bmRjb2xvciIpfX19LHsiLi4vLi4vLi4vbGliIjo2ODQsIi4uLy4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjcyMiwiLi4vLi4vY2FydGVzaWFuL2F4aXNfZGVmYXVsdHMiOjczNCwiLi4vLi4vY2FydGVzaWFuL3R5cGVfZGVmYXVsdHMiOjc1NSwiLi9heGlzX2F0dHJpYnV0ZXMiOjc3Nix0aW55Y29sb3IyOjQ5OX1dLDc3ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi8uLi9saWIvaHRtbDJ1bmljb2RlIiksaT10KCIuLi8uLi8uLi9saWIvc3RyMnJnYmFycmF5IiksYT1bInhheGlzIiwieWF4aXMiLCJ6YXhpcyJdO2Z1bmN0aW9uIG8oKXt0aGlzLmJvdW5kcz1bWy0xMCwtMTAsLTEwXSxbMTAsMTAsMTBdXSx0aGlzLnRpY2tzPVtbXSxbXSxbXV0sdGhpcy50aWNrRW5hYmxlPVshMCwhMCwhMF0sdGhpcy50aWNrRm9udD1bInNhbnMtc2VyaWYiLCJzYW5zLXNlcmlmIiwic2Fucy1zZXJpZiJdLHRoaXMudGlja1NpemU9WzEyLDEyLDEyXSx0aGlzLnRpY2tBbmdsZT1bMCwwLDBdLHRoaXMudGlja0NvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy50aWNrUGFkPVsxOCwxOCwxOF0sdGhpcy5sYWJlbHM9WyJ4IiwieSIsInoiXSx0aGlzLmxhYmVsRW5hYmxlPVshMCwhMCwhMF0sdGhpcy5sYWJlbEZvbnQ9WyJPcGVuIFNhbnMiLCJPcGVuIFNhbnMiLCJPcGVuIFNhbnMiXSx0aGlzLmxhYmVsU2l6ZT1bMjAsMjAsMjBdLHRoaXMubGFiZWxBbmdsZT1bMCwwLDBdLHRoaXMubGFiZWxDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMubGFiZWxQYWQ9WzMwLDMwLDMwXSx0aGlzLmxpbmVFbmFibGU9WyEwLCEwLCEwXSx0aGlzLmxpbmVNaXJyb3I9WyExLCExLCExXSx0aGlzLmxpbmVXaWR0aD1bMSwxLDFdLHRoaXMubGluZUNvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5saW5lVGlja0VuYWJsZT1bITAsITAsITBdLHRoaXMubGluZVRpY2tNaXJyb3I9WyExLCExLCExXSx0aGlzLmxpbmVUaWNrTGVuZ3RoPVsxMCwxMCwxMF0sdGhpcy5saW5lVGlja1dpZHRoPVsxLDEsMV0sdGhpcy5saW5lVGlja0NvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5ncmlkRW5hYmxlPVshMCwhMCwhMF0sdGhpcy5ncmlkV2lkdGg9WzEsMSwxXSx0aGlzLmdyaWRDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMuemVyb0VuYWJsZT1bITAsITAsITBdLHRoaXMuemVyb0xpbmVDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMuemVyb0xpbmVXaWR0aD1bMiwyLDJdLHRoaXMuYmFja2dyb3VuZEVuYWJsZT1bITAsITAsITBdLHRoaXMuYmFja2dyb3VuZENvbG9yPVtbLjgsLjgsLjgsLjVdLFsuOCwuOCwuOCwuNV0sWy44LC44LC44LC41XV0sdGhpcy5fZGVmYXVsdFRpY2tQYWQ9dGhpcy50aWNrUGFkLnNsaWNlKCksdGhpcy5fZGVmYXVsdExhYmVsUGFkPXRoaXMubGFiZWxQYWQuc2xpY2UoKSx0aGlzLl9kZWZhdWx0TGluZVRpY2tMZW5ndGg9dGhpcy5saW5lVGlja0xlbmd0aC5zbGljZSgpfW8ucHJvdG90eXBlLm1lcmdlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8MzsrK2Upe3ZhciByPXRbYVtlXV07ci52aXNpYmxlPyh0aGlzLmxhYmVsc1tlXT1uKHIudGl0bGUpLCJ0aXRsZWZvbnQiaW4gciYmKHIudGl0bGVmb250LmNvbG9yJiYodGhpcy5sYWJlbENvbG9yW2VdPWkoci50aXRsZWZvbnQuY29sb3IpKSxyLnRpdGxlZm9udC5mYW1pbHkmJih0aGlzLmxhYmVsRm9udFtlXT1yLnRpdGxlZm9udC5mYW1pbHkpLHIudGl0bGVmb250LnNpemUmJih0aGlzLmxhYmVsU2l6ZVtlXT1yLnRpdGxlZm9udC5zaXplKSksInNob3dsaW5lImluIHImJih0aGlzLmxpbmVFbmFibGVbZV09ci5zaG93bGluZSksImxpbmVjb2xvciJpbiByJiYodGhpcy5saW5lQ29sb3JbZV09aShyLmxpbmVjb2xvcikpLCJsaW5ld2lkdGgiaW4gciYmKHRoaXMubGluZVdpZHRoW2VdPXIubGluZXdpZHRoKSwic2hvd2dyaWQiaW4gciYmKHRoaXMuZ3JpZEVuYWJsZVtlXT1yLnNob3dncmlkKSwiZ3JpZGNvbG9yImluIHImJih0aGlzLmdyaWRDb2xvcltlXT1pKHIuZ3JpZGNvbG9yKSksImdyaWR3aWR0aCJpbiByJiYodGhpcy5ncmlkV2lkdGhbZV09ci5ncmlkd2lkdGgpLCJsb2ciPT09ci50eXBlP3RoaXMuemVyb0VuYWJsZVtlXT0hMToiemVyb2xpbmUiaW4gciYmKHRoaXMuemVyb0VuYWJsZVtlXT1yLnplcm9saW5lKSwiemVyb2xpbmVjb2xvciJpbiByJiYodGhpcy56ZXJvTGluZUNvbG9yW2VdPWkoci56ZXJvbGluZWNvbG9yKSksInplcm9saW5ld2lkdGgiaW4gciYmKHRoaXMuemVyb0xpbmVXaWR0aFtlXT1yLnplcm9saW5ld2lkdGgpLCJ0aWNrcyJpbiByJiZyLnRpY2tzP3RoaXMubGluZVRpY2tFbmFibGVbZV09ITA6dGhpcy5saW5lVGlja0VuYWJsZVtlXT0hMSwidGlja2xlbiJpbiByJiYodGhpcy5saW5lVGlja0xlbmd0aFtlXT10aGlzLl9kZWZhdWx0TGluZVRpY2tMZW5ndGhbZV09ci50aWNrbGVuKSwidGlja2NvbG9yImluIHImJih0aGlzLmxpbmVUaWNrQ29sb3JbZV09aShyLnRpY2tjb2xvcikpLCJ0aWNrd2lkdGgiaW4gciYmKHRoaXMubGluZVRpY2tXaWR0aFtlXT1yLnRpY2t3aWR0aCksInRpY2thbmdsZSJpbiByJiYodGhpcy50aWNrQW5nbGVbZV09ImF1dG8iPT09ci50aWNrYW5nbGU/MDpNYXRoLlBJKi1yLnRpY2thbmdsZS8xODApLCJzaG93dGlja2xhYmVscyJpbiByJiYodGhpcy50aWNrRW5hYmxlW2VdPXIuc2hvd3RpY2tsYWJlbHMpLCJ0aWNrZm9udCJpbiByJiYoci50aWNrZm9udC5jb2xvciYmKHRoaXMudGlja0NvbG9yW2VdPWkoci50aWNrZm9udC5jb2xvcikpLHIudGlja2ZvbnQuZmFtaWx5JiYodGhpcy50aWNrRm9udFtlXT1yLnRpY2tmb250LmZhbWlseSksci50aWNrZm9udC5zaXplJiYodGhpcy50aWNrU2l6ZVtlXT1yLnRpY2tmb250LnNpemUpKSwibWlycm9yImluIHI/LTEhPT1bInRpY2tzIiwiYWxsIiwiYWxsdGlja3MiXS5pbmRleE9mKHIubWlycm9yKT8odGhpcy5saW5lVGlja01pcnJvcltlXT0hMCx0aGlzLmxpbmVNaXJyb3JbZV09ITApOiEwPT09ci5taXJyb3I/KHRoaXMubGluZVRpY2tNaXJyb3JbZV09ITEsdGhpcy5saW5lTWlycm9yW2VdPSEwKToodGhpcy5saW5lVGlja01pcnJvcltlXT0hMSx0aGlzLmxpbmVNaXJyb3JbZV09ITEpOnRoaXMubGluZU1pcnJvcltlXT0hMSwic2hvd2JhY2tncm91bmQiaW4gciYmITEhPT1yLnNob3diYWNrZ3JvdW5kPyh0aGlzLmJhY2tncm91bmRFbmFibGVbZV09ITAsdGhpcy5iYWNrZ3JvdW5kQ29sb3JbZV09aShyLmJhY2tncm91bmRjb2xvcikpOnRoaXMuYmFja2dyb3VuZEVuYWJsZVtlXT0hMSk6KHRoaXMudGlja0VuYWJsZVtlXT0hMSx0aGlzLmxhYmVsRW5hYmxlW2VdPSExLHRoaXMubGluZUVuYWJsZVtlXT0hMSx0aGlzLmxpbmVUaWNrRW5hYmxlW2VdPSExLHRoaXMuZ3JpZEVuYWJsZVtlXT0hMSx0aGlzLnplcm9FbmFibGVbZV09ITEsdGhpcy5iYWNrZ3JvdW5kRW5hYmxlW2VdPSExKX19LGUuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1uZXcgbztyZXR1cm4gZS5tZXJnZSh0KSxlfX0seyIuLi8uLi8uLi9saWIvaHRtbDJ1bmljb2RlIjo2ODIsIi4uLy4uLy4uL2xpYi9zdHIycmdiYXJyYXkiOjcwN31dLDc3OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi8uLi9saWIiKSxpPXQoIi4uLy4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxhPXQoIi4uLy4uLy4uL3JlZ2lzdHJ5Iiksbz10KCIuLi8uLi9zdWJwbG90X2RlZmF1bHRzIikscz10KCIuL2F4aXNfZGVmYXVsdHMiKSxsPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKTtmdW5jdGlvbiBjKHQsZSxyLG4pe2Zvcih2YXIgbz1yKCJiZ2NvbG9yIiksbD1pLmNvbWJpbmUobyxuLnBhcGVyX2JnY29sb3IpLGM9WyJ1cCIsImNlbnRlciIsImV5ZSJdLHU9MDt1PGMubGVuZ3RoO3UrKylyKCJjYW1lcmEuIitjW3VdKyIueCIpLHIoImNhbWVyYS4iK2NbdV0rIi55IikscigiY2FtZXJhLiIrY1t1XSsiLnoiKTt2YXIgaD0hIXIoImFzcGVjdHJhdGlvLngiKSYmISFyKCJhc3BlY3RyYXRpby55IikmJiEhcigiYXNwZWN0cmF0aW8ueiIpLGY9cigiYXNwZWN0bW9kZSIsaD8ibWFudWFsIjoiYXV0byIpO2h8fCh0LmFzcGVjdHJhdGlvPWUuYXNwZWN0cmF0aW89e3g6MSx5OjEsejoxfSwibWFudWFsIj09PWYmJihlLmFzcGVjdG1vZGU9ImF1dG8iKSx0LmFzcGVjdG1vZGU9ZS5hc3BlY3Rtb2RlKSxzKHQsZSx7Zm9udDpuLmZvbnQsc2NlbmU6bi5pZCxkYXRhOm4uZnVsbERhdGEsYmdDb2xvcjpsLGNhbGVuZGFyOm4uY2FsZW5kYXIsZnVsbExheW91dDpuLmZ1bGxMYXlvdXR9KSxhLmdldENvbXBvbmVudE1ldGhvZCgiYW5ub3RhdGlvbnMzZCIsImhhbmRsZURlZmF1bHRzIikodCxlLG4pLHIoImRyYWdtb2RlIixuLmdldERmbHRGcm9tTGF5b3V0KCJkcmFnbW9kZSIpKSxyKCJob3Zlcm1vZGUiLG4uZ2V0RGZsdEZyb21MYXlvdXQoImhvdmVybW9kZSIpKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPWUuX2Jhc2VQbG90TW9kdWxlcy5sZW5ndGg+MTtvKHQsZSxyLHt0eXBlOiJnbDNkIixhdHRyaWJ1dGVzOmwsaGFuZGxlRGVmYXVsdHM6YyxmdWxsTGF5b3V0OmUsZm9udDplLmZvbnQsZnVsbERhdGE6cixnZXREZmx0RnJvbUxheW91dDpmdW5jdGlvbihlKXtpZighaSlyZXR1cm4gbi52YWxpZGF0ZSh0W2VdLGxbZV0pP3RbZV06dm9pZCAwfSxwYXBlcl9iZ2NvbG9yOmUucGFwZXJfYmdjb2xvcixjYWxlbmRhcjplLmNhbGVuZGFyfSl9fSx7Ii4uLy4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjU1OCwiLi4vLi4vLi4vbGliIjo2ODQsIi4uLy4uLy4uL3JlZ2lzdHJ5Ijo4MTcsIi4uLy4uL3N1YnBsb3RfZGVmYXVsdHMiOjgwOSwiLi9heGlzX2RlZmF1bHRzIjo3NzcsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjc4MH1dLDc4MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2F4aXNfYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vZG9tYWluIikuYXR0cmlidXRlcyxhPXQoIi4uLy4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LG89dCgiLi4vLi4vLi4vbGliIikuY291bnRlclJlZ2V4O2Z1bmN0aW9uIHModCxlLHIpe3JldHVybnt4Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6dCxlZGl0VHlwZToiY2FtZXJhIn0seTp7dmFsVHlwZToibnVtYmVyIixkZmx0OmUsZWRpdFR5cGU6ImNhbWVyYSJ9LHo6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDpyLGVkaXRUeXBlOiJjYW1lcmEifSxlZGl0VHlwZToiY2FtZXJhIn19ZS5leHBvcnRzPXtfYXJyYXlBdHRyUmVnZXhwczpbbygic2NlbmUiLCIuYW5ub3RhdGlvbnMiLCEwKV0sYmdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6InJnYmEoMCwwLDAsMCkiLGVkaXRUeXBlOiJwbG90In0sY2FtZXJhOnt1cDphKHMoMCwwLDEpLHt9KSxjZW50ZXI6YShzKDAsMCwwKSx7fSksZXllOmEocygxLjI1LDEuMjUsMS4yNSkse30pLGVkaXRUeXBlOiJjYW1lcmEifSxkb21haW46aSh7bmFtZToic2NlbmUiLGVkaXRUeXBlOiJwbG90In0pLGFzcGVjdG1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImF1dG8iLCJjdWJlIiwiZGF0YSIsIm1hbnVhbCJdLGRmbHQ6ImF1dG8iLGVkaXRUeXBlOiJwbG90IixpbXBsaWVkRWRpdHM6eyJhc3BlY3RyYXRpby54Ijp2b2lkIDAsImFzcGVjdHJhdGlvLnkiOnZvaWQgMCwiYXNwZWN0cmF0aW8ueiI6dm9pZCAwfX0sYXNwZWN0cmF0aW86e3g6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZWRpdFR5cGU6InBsb3QiLGltcGxpZWRFZGl0czp7Il5hc3BlY3Rtb2RlIjoibWFudWFsIn19LHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZWRpdFR5cGU6InBsb3QiLGltcGxpZWRFZGl0czp7Il5hc3BlY3Rtb2RlIjoibWFudWFsIn19LHo6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZWRpdFR5cGU6InBsb3QiLGltcGxpZWRFZGl0czp7Il5hc3BlY3Rtb2RlIjoibWFudWFsIn19LGVkaXRUeXBlOiJwbG90IixpbXBsaWVkRWRpdHM6e2FzcGVjdG1vZGU6Im1hbnVhbCJ9fSx4YXhpczpuLHlheGlzOm4semF4aXM6bixkcmFnbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsib3JiaXQiLCJ0dXJudGFibGUiLCJ6b29tIiwicGFuIiwhMV0sZGZsdDoidHVybnRhYmxlIixlZGl0VHlwZToicGxvdCJ9LGhvdmVybW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiY2xvc2VzdCIsITFdLGRmbHQ6ImNsb3Nlc3QiLGVkaXRUeXBlOiJtb2RlYmFyIn0sZWRpdFR5cGU6InBsb3QiLF9kZXByZWNhdGVkOntjYW1lcmFwb3NpdGlvbjp7dmFsVHlwZToiaW5mb19hcnJheSIsZWRpdFR5cGU6ImNhbWVyYSJ9fX19LHsiLi4vLi4vLi4vbGliIjo2ODQsIi4uLy4uLy4uL2xpYi9leHRlbmQiOjY3MywiLi4vLi4vZG9tYWluIjo3NTcsIi4vYXhpc19hdHRyaWJ1dGVzIjo3NzZ9XSw3ODE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vLi4vbGliL3N0cjJyZ2JhcnJheSIpLGk9WyJ4YXhpcyIsInlheGlzIiwiemF4aXMiXTtmdW5jdGlvbiBhKCl7dGhpcy5lbmFibGVkPVshMCwhMCwhMF0sdGhpcy5jb2xvcnM9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmRyYXdTaWRlcz1bITAsITAsITBdLHRoaXMubGluZVdpZHRoPVsxLDEsMV19YS5wcm90b3R5cGUubWVyZ2U9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTwzOysrZSl7dmFyIHI9dFtpW2VdXTtyLnZpc2libGU/KHRoaXMuZW5hYmxlZFtlXT1yLnNob3dzcGlrZXMsdGhpcy5jb2xvcnNbZV09bihyLnNwaWtlY29sb3IpLHRoaXMuZHJhd1NpZGVzW2VdPXIuc3Bpa2VzaWRlcyx0aGlzLmxpbmVXaWR0aFtlXT1yLnNwaWtldGhpY2tuZXNzKToodGhpcy5lbmFibGVkW2VdPSExLHRoaXMuZHJhd1NpZGVzW2VdPSExKX19LGUuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1uZXcgYTtyZXR1cm4gZS5tZXJnZSh0KSxlfX0seyIuLi8uLi8uLi9saWIvc3RyMnJnYmFycmF5Ijo3MDd9XSw3ODI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LmF4ZXNPcHRpb25zLHI9dC5nbHBsb3QuYXhlc1BpeGVscyxsPXQuZnVsbFNjZW5lTGF5b3V0LGM9W1tdLFtdLFtdXSx1PTA7dTwzOysrdSl7dmFyIGg9bFtvW3VdXTtpZihoLl9sZW5ndGg9KHJbdV0uaGktclt1XS5sbykqclt1XS5waXhlbHNQZXJEYXRhVW5pdC90LmRhdGFTY2FsZVt1XSxNYXRoLmFicyhoLl9sZW5ndGgpPT09MS8wKWNbdV09W107ZWxzZXtoLl9pbnB1dF9yYW5nZT1oLnJhbmdlLnNsaWNlKCksaC5yYW5nZVswXT1yW3VdLmxvL3QuZGF0YVNjYWxlW3VdLGgucmFuZ2VbMV09clt1XS5oaS90LmRhdGFTY2FsZVt1XSxoLl9tPTEvKHQuZGF0YVNjYWxlW3VdKnJbdV0ucGl4ZWxzUGVyRGF0YVVuaXQpLGgucmFuZ2VbMF09PT1oLnJhbmdlWzFdJiYoaC5yYW5nZVswXS09MSxoLnJhbmdlWzFdKz0xKTt2YXIgZj1oLnRpY2ttb2RlO2lmKCJhdXRvIj09PWgudGlja21vZGUpe2gudGlja21vZGU9ImxpbmVhciI7dmFyIHA9aC5udGlja3N8fGkuY29uc3RyYWluKGguX2xlbmd0aC80MCw0LDkpO24uYXV0b1RpY2tzKGgsTWF0aC5hYnMoaC5yYW5nZVsxXS1oLnJhbmdlWzBdKS9wKX1mb3IodmFyIGQ9bi5jYWxjVGlja3MoaCksZz0wO2c8ZC5sZW5ndGg7KytnKWRbZ10ueD1kW2ddLngqdC5kYXRhU2NhbGVbdV0sZFtnXS50ZXh0PWEoZFtnXS50ZXh0KTtjW3VdPWQsaC50aWNrbW9kZT1mfX1lLnRpY2tzPWM7Zm9yKHZhciB1PTA7dTwzOysrdSl7c1t1XT0uNSoodC5nbHBsb3QuYm91bmRzWzBdW3VdK3QuZ2xwbG90LmJvdW5kc1sxXVt1XSk7Zm9yKHZhciBnPTA7ZzwyOysrZyllLmJvdW5kc1tnXVt1XT10LmdscGxvdC5ib3VuZHNbZ11bdV19dC5jb250b3VyTGV2ZWxzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkoMykscj0wO3I8MzsrK3Ipe2Zvcih2YXIgbj10W3JdLGk9bmV3IEFycmF5KG4ubGVuZ3RoKSxhPTA7YTxuLmxlbmd0aDsrK2EpaVthXT1uW2FdLng7ZVtyXT1pfXJldHVybiBlfShjKX07dmFyIG49dCgiLi4vLi4vY2FydGVzaWFuL2F4ZXMiKSxpPXQoIi4uLy4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vLi4vbGliL2h0bWwydW5pY29kZSIpLG89WyJ4YXhpcyIsInlheGlzIiwiemF4aXMiXSxzPVswLDAsMF19LHsiLi4vLi4vLi4vbGliIjo2ODQsIi4uLy4uLy4uL2xpYi9odG1sMnVuaWNvZGUiOjY4MiwiLi4vLi4vY2FydGVzaWFuL2F4ZXMiOjczMn1dLDc4MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7dmFyIHIsbixpPVswLDAsMCwwXTtmb3Iocj0wO3I8NDsrK3IpZm9yKG49MDtuPDQ7KytuKWlbbl0rPXRbNCpyK25dKmVbcl07cmV0dXJuIGl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odC5wcm9qZWN0aW9uLG4odC52aWV3LG4odC5tb2RlbCxbZVswXSxlWzFdLGVbMl0sMV0pKSl9fSx7fV0sNzg0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuLGksYT10KCJnbC1wbG90M2QiKSxvPXQoIndlYmdsLWNvbnRleHQiKSxzPXQoImhhcy1wYXNzaXZlLWV2ZW50cyIpLGw9dCgiLi4vLi4vcmVnaXN0cnkiKSxjPXQoIi4uLy4uL2xpYiIpLHU9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxoPXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSxmPXQoIi4uLy4uL2xpYi9zdHIycmdiYXJyYXkiKSxwPXQoIi4uLy4uL2xpYi9zaG93X25vX3dlYmdsX21zZyIpLGQ9dCgiLi9jYW1lcmEiKSxnPXQoIi4vcHJvamVjdCIpLG09dCgiLi9sYXlvdXQvY29udmVydCIpLHY9dCgiLi9sYXlvdXQvc3Bpa2VzIikseT10KCIuL2xheW91dC90aWNrX21hcmtzIik7ZnVuY3Rpb24geCh0LGUscixsKXt2YXIgZj17Y2FudmFzOnIsZ2w6bCxjb250YWluZXI6dC5jb250YWluZXIsYXhlczp0LmF4ZXNPcHRpb25zLHNwaWtlczp0LnNwaWtlT3B0aW9ucyxwaWNrUmFkaXVzOjEwLHNuYXBUb0RhdGE6ITAsYXV0b1NjYWxlOiEwLGF1dG9Cb3VuZHM6ITF9O2lmKHQuc3RhdGljTW9kZSl7aWYoIShpfHwobj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSxpPW8oe2NhbnZhczpuLHByZXNlcnZlRHJhd2luZ0J1ZmZlcjohMCxwcmVtdWx0aXBsaWVkQWxwaGE6ITAsYW50aWFsaWFzOiEwfSkpKSl0aHJvdyBuZXcgRXJyb3IoImVycm9yIGNyZWF0aW5nIHN0YXRpYyBjYW52YXMvY29udGV4dCBmb3IgaW1hZ2Ugc2VydmVyIik7Zi5waXhlbFJhdGlvPXQucGl4ZWxSYXRpbyxmLmdsPWksZi5jYW52YXM9bn10cnl7dC5nbHBsb3Q9YShmKX1jYXRjaChlKXtyZXR1cm4gcCh0KX12YXIgbT1mdW5jdGlvbih0KXtpZighMSE9PXQuZnVsbFNjZW5lTGF5b3V0LmRyYWdtb2RlKXt2YXIgZT17fTtlW3QuaWQrIi5jYW1lcmEiXT1NKHQuY2FtZXJhKSx0LnNhdmVDYW1lcmEodC5ncmFwaERpdi5sYXlvdXQpLHQuZ3JhcGhEaXYuZW1pdCgicGxvdGx5X3JlbGF5b3V0IixlKX19O2lmKHQuZ2xwbG90LmNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIixtLmJpbmQobnVsbCx0KSksdC5nbHBsb3QuY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoIndoZWVsIixtLmJpbmQobnVsbCx0KSwhIXMmJntwYXNzaXZlOiExfSksdC5zdGF0aWNNb2RlfHx0LmdscGxvdC5jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0bG9zdCIsZnVuY3Rpb24odCl7Yy53YXJuKCJMb3N0IFdlYkdMIGNvbnRleHQuIiksdC5wcmV2ZW50RGVmYXVsdCgpfSksIXQuY2FtZXJhKXt2YXIgdj10LmZ1bGxTY2VuZUxheW91dC5jYW1lcmE7dC5jYW1lcmE9ZCh0LmNvbnRhaW5lcix7Y2VudGVyOlt2LmNlbnRlci54LHYuY2VudGVyLnksdi5jZW50ZXIuel0sZXllOlt2LmV5ZS54LHYuZXllLnksdi5leWUuel0sdXA6W3YudXAueCx2LnVwLnksdi51cC56XSx6b29tTWluOi4xLHpvb21NYXg6MTAwLG1vZGU6Im9yYml0In0pfXJldHVybiB0LmdscGxvdC5jYW1lcmE9dC5jYW1lcmEsdC5nbHBsb3Qub25jb250ZXh0bG9zcz1mdW5jdGlvbigpe3QucmVjb3ZlckNvbnRleHQoKX0sdC5nbHBsb3Qub25yZW5kZXI9ZnVuY3Rpb24odCl7dmFyIGUscj10LnN2Z0NvbnRhaW5lcixuPXQuY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGk9bi53aWR0aCxhPW4uaGVpZ2h0O3Iuc2V0QXR0cmlidXRlTlMobnVsbCwidmlld0JveCIsIjAgMCAiK2krIiAiK2EpLHIuc2V0QXR0cmlidXRlTlMobnVsbCwid2lkdGgiLGkpLHIuc2V0QXR0cmlidXRlTlMobnVsbCwiaGVpZ2h0IixhKSx5KHQpLHQuZ2xwbG90LmF4ZXMudXBkYXRlKHQuYXhlc09wdGlvbnMpO2Zvcih2YXIgbyxzPU9iamVjdC5rZXlzKHQudHJhY2VzKSxsPW51bGwsYz10LmdscGxvdC5zZWxlY3Rpb24sZj0wO2Y8cy5sZW5ndGg7KytmKSJza2lwIiE9PShlPXQudHJhY2VzW3NbZl1dKS5kYXRhLmhvdmVyaW5mbyYmZS5oYW5kbGVQaWNrKGMpJiYobD1lKSxlLnNldENvbnRvdXJMZXZlbHMmJmUuc2V0Q29udG91ckxldmVscygpO2Z1bmN0aW9uIHAoZSxyKXt2YXIgbj10LmZ1bGxTY2VuZUxheW91dFtlXTtyZXR1cm4gdS50aWNrVGV4dChuLG4uZDJsKHIpLCJob3ZlciIpLnRleHR9aWYobnVsbCE9PWwpe3ZhciBkPWcodC5nbHBsb3QuY2FtZXJhUGFyYW1zLGMuZGF0YUNvb3JkaW5hdGUpO2U9bC5kYXRhO3ZhciBtLHY9Yy5pbmRleCx4PWguY2FzdEhvdmVyaW5mbyhlLHQuZnVsbExheW91dCx2KSxiPXguc3BsaXQoIisiKSxfPSJhbGwiPT09eCx3PXAoInhheGlzIixjLnRyYWNlQ29vcmRpbmF0ZVswXSksaz1wKCJ5YXhpcyIsYy50cmFjZUNvb3JkaW5hdGVbMV0pLE09cCgiemF4aXMiLGMudHJhY2VDb29yZGluYXRlWzJdKTtpZihffHwoLTE9PT1iLmluZGV4T2YoIngiKSYmKHc9dm9pZCAwKSwtMT09PWIuaW5kZXhPZigieSIpJiYoaz12b2lkIDApLC0xPT09Yi5pbmRleE9mKCJ6IikmJihNPXZvaWQgMCksLTE9PT1iLmluZGV4T2YoInRleHQiKSYmKGMudGV4dExhYmVsPXZvaWQgMCksLTE9PT1iLmluZGV4T2YoIm5hbWUiKSYmKGwubmFtZT12b2lkIDApKSwiY29uZSI9PT1lLnR5cGV8fCJzdHJlYW10dWJlIj09PWUudHlwZSl7dmFyIEE9W107KF98fC0xIT09Yi5pbmRleE9mKCJ1IikpJiZBLnB1c2goInU6ICIrcCgieGF4aXMiLGMudHJhY2VDb29yZGluYXRlWzNdKSksKF98fC0xIT09Yi5pbmRleE9mKCJ2IikpJiZBLnB1c2goInY6ICIrcCgieWF4aXMiLGMudHJhY2VDb29yZGluYXRlWzRdKSksKF98fC0xIT09Yi5pbmRleE9mKCJ3IikpJiZBLnB1c2goInc6ICIrcCgiemF4aXMiLGMudHJhY2VDb29yZGluYXRlWzVdKSksKF98fC0xIT09Yi5pbmRleE9mKCJub3JtIikpJiZBLnB1c2goIm5vcm06ICIrYy50cmFjZUNvb3JkaW5hdGVbNl0udG9QcmVjaXNpb24oMykpLCJzdHJlYW10dWJlIiE9PWUudHlwZXx8IV8mJi0xPT09Yi5pbmRleE9mKCJkaXZlcmdlbmNlIil8fEEucHVzaCgiZGl2ZXJnZW5jZTogIitjLnRyYWNlQ29vcmRpbmF0ZVs3XS50b1ByZWNpc2lvbigzKSksYy50ZXh0TGFiZWwmJkEucHVzaChjLnRleHRMYWJlbCksbT1BLmpvaW4oIjxicj4iKX1lbHNlIG09Yy50ZXh0TGFiZWw7dC5mdWxsU2NlbmVMYXlvdXQuaG92ZXJtb2RlJiZoLmxvbmVIb3Zlcih7eDooLjUrLjUqZFswXS9kWzNdKSppLHk6KC41LS41KmRbMV0vZFszXSkqYSx4TGFiZWw6dyx5TGFiZWw6ayx6TGFiZWw6TSx0ZXh0Om0sbmFtZTpsLm5hbWUsY29sb3I6aC5jYXN0SG92ZXJPcHRpb24oZSx2LCJiZ2NvbG9yIil8fGwuY29sb3IsYm9yZGVyQ29sb3I6aC5jYXN0SG92ZXJPcHRpb24oZSx2LCJib3JkZXJjb2xvciIpLGZvbnRGYW1pbHk6aC5jYXN0SG92ZXJPcHRpb24oZSx2LCJmb250LmZhbWlseSIpLGZvbnRTaXplOmguY2FzdEhvdmVyT3B0aW9uKGUsdiwiZm9udC5zaXplIiksZm9udENvbG9yOmguY2FzdEhvdmVyT3B0aW9uKGUsdiwiZm9udC5jb2xvciIpfSx7Y29udGFpbmVyOnIsZ2Q6dC5ncmFwaERpdn0pO3ZhciBUPXt4OmMudHJhY2VDb29yZGluYXRlWzBdLHk6Yy50cmFjZUNvb3JkaW5hdGVbMV0sejpjLnRyYWNlQ29vcmRpbmF0ZVsyXSxkYXRhOmUuX2lucHV0LGZ1bGxEYXRhOmUsY3VydmVOdW1iZXI6ZS5pbmRleCxwb2ludE51bWJlcjp2fTtlLl9tb2R1bGUuZXZlbnREYXRhJiYoVD1lLl9tb2R1bGUuZXZlbnREYXRhKFQsYyxlLHt9LHYpKSxoLmFwcGVuZEFycmF5UG9pbnRWYWx1ZShULGUsdik7dmFyIFM9e3BvaW50czpbVF19O2MuYnV0dG9ucyYmYy5kaXN0YW5jZTw1P3QuZ3JhcGhEaXYuZW1pdCgicGxvdGx5X2NsaWNrIixTKTp0LmdyYXBoRGl2LmVtaXQoInBsb3RseV9ob3ZlciIsUyksbz1TfWVsc2UgaC5sb25lVW5ob3ZlcihyKSx0LmdyYXBoRGl2LmVtaXQoInBsb3RseV91bmhvdmVyIixvKTt0LmRyYXdBbm5vdGF0aW9ucyh0KX0uYmluZChudWxsLHQpLHQudHJhY2VzPXt9LCEwfWZ1bmN0aW9uIGIodCxlKXt2YXIgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxuPXQuY29udGFpbmVyO3RoaXMuZ3JhcGhEaXY9dC5ncmFwaERpdjt2YXIgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwic3ZnIik7aS5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGkuc3R5bGUudG9wPWkuc3R5bGUubGVmdD0iMHB4IixpLnN0eWxlLndpZHRoPWkuc3R5bGUuaGVpZ2h0PSIxMDAlIixpLnN0eWxlWyJ6LWluZGV4Il09MjAsaS5zdHlsZVsicG9pbnRlci1ldmVudHMiXT0ibm9uZSIsci5hcHBlbmRDaGlsZChpKSx0aGlzLnN2Z0NvbnRhaW5lcj1pLHIuaWQ9dC5pZCxyLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsci5zdHlsZS50b3A9ci5zdHlsZS5sZWZ0PSIwcHgiLHIuc3R5bGUud2lkdGg9ci5zdHlsZS5oZWlnaHQ9IjEwMCUiLG4uYXBwZW5kQ2hpbGQociksdGhpcy5mdWxsTGF5b3V0PWUsdGhpcy5pZD10LmlkfHwic2NlbmUiLHRoaXMuZnVsbFNjZW5lTGF5b3V0PWVbdGhpcy5pZF0sdGhpcy5wbG90QXJncz1bW10se30se31dLHRoaXMuYXhlc09wdGlvbnM9bShlW3RoaXMuaWRdKSx0aGlzLnNwaWtlT3B0aW9ucz12KGVbdGhpcy5pZF0pLHRoaXMuY29udGFpbmVyPXIsdGhpcy5zdGF0aWNNb2RlPSEhdC5zdGF0aWNQbG90LHRoaXMucGl4ZWxSYXRpbz10LnBsb3RHbFBpeGVsUmF0aW98fDIsdGhpcy5kYXRhU2NhbGU9WzEsMSwxXSx0aGlzLmNvbnRvdXJMZXZlbHM9W1tdLFtdLFtdXSx0aGlzLmNvbnZlcnRBbm5vdGF0aW9ucz1sLmdldENvbXBvbmVudE1ldGhvZCgiYW5ub3RhdGlvbnMzZCIsImNvbnZlcnQiKSx0aGlzLmRyYXdBbm5vdGF0aW9ucz1sLmdldENvbXBvbmVudE1ldGhvZCgiYW5ub3RhdGlvbnMzZCIsImRyYXciKSx4KHRoaXMpfXZhciBfPWIucHJvdG90eXBlO18ucmVjb3ZlckNvbnRleHQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dGhpcy5nbHBsb3QuZ2wscj10aGlzLmdscGxvdC5jYW52YXM7dGhpcy5nbHBsb3QuZGlzcG9zZSgpLHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiBuKCl7ZS5pc0NvbnRleHRMb3N0KCk/cmVxdWVzdEFuaW1hdGlvbkZyYW1lKG4pOngodCx0LmZ1bGxMYXlvdXQscixlKT90LnBsb3QuYXBwbHkodCx0LnBsb3RBcmdzKTpjLmVycm9yKCJDYXRhc3Ryb3BoaWMgYW5kIHVucmVjb3ZlcmFibGUgV2ViR0wgZXJyb3IuIENvbnRleHQgbG9zdC4iKX0pfTt2YXIgdz1bInhheGlzIiwieWF4aXMiLCJ6YXhpcyJdO2Z1bmN0aW9uIGsodCxlLHIpe2Zvcih2YXIgbj10LmZ1bGxTY2VuZUxheW91dCxpPTA7aTwzO2krKyl7dmFyIGE9d1tpXSxvPWEuY2hhckF0KDApLHM9blthXSxsPWVbb10sdT1lW28rImNhbGVuZGFyIl0saD1lWyJfIitvKyJsZW5ndGgiXTtpZihjLmlzQXJyYXlPclR5cGVkQXJyYXkobCkpZm9yKHZhciBmLHA9MDtwPChofHxsLmxlbmd0aCk7cCsrKWlmKGMuaXNBcnJheU9yVHlwZWRBcnJheShsW3BdKSlmb3IodmFyIGQ9MDtkPGxbcF0ubGVuZ3RoOysrZClmPXMuZDJsKGxbcF1bZF0sMCx1KSwhaXNOYU4oZikmJmlzRmluaXRlKGYpJiYoclswXVtpXT1NYXRoLm1pbihyWzBdW2ldLGYpLHJbMV1baV09TWF0aC5tYXgoclsxXVtpXSxmKSk7ZWxzZSBmPXMuZDJsKGxbcF0sMCx1KSwhaXNOYU4oZikmJmlzRmluaXRlKGYpJiYoclswXVtpXT1NYXRoLm1pbihyWzBdW2ldLGYpLHJbMV1baV09TWF0aC5tYXgoclsxXVtpXSxmKSk7ZWxzZSByWzBdW2ldPU1hdGgubWluKHJbMF1baV0sMCksclsxXVtpXT1NYXRoLm1heChyWzFdW2ldLGgtMSl9fWZ1bmN0aW9uIE0odCl7cmV0dXJue3VwOnt4OnQudXBbMF0seTp0LnVwWzFdLHo6dC51cFsyXX0sY2VudGVyOnt4OnQuY2VudGVyWzBdLHk6dC5jZW50ZXJbMV0sejp0LmNlbnRlclsyXX0sZXllOnt4OnQuZXllWzBdLHk6dC5leWVbMV0sejp0LmV5ZVsyXX19fV8ucGxvdD1mdW5jdGlvbih0LGUscil7aWYodGhpcy5wbG90QXJncz1bdCxlLHJdLCF0aGlzLmdscGxvdC5jb250ZXh0TG9zdCl7dmFyIG4saSxhLG8scyxsLGM9ZVt0aGlzLmlkXSx1PXJbdGhpcy5pZF07Yy5iZ2NvbG9yP3RoaXMuZ2xwbG90LmNsZWFyQ29sb3I9ZihjLmJnY29sb3IpOnRoaXMuZ2xwbG90LmNsZWFyQ29sb3I9WzAsMCwwLDBdLHRoaXMuZ2xwbG90LnNuYXBUb0RhdGE9ITAsdGhpcy5mdWxsTGF5b3V0PWUsdGhpcy5mdWxsU2NlbmVMYXlvdXQ9Yyx0aGlzLmdscGxvdExheW91dD1jLHRoaXMuYXhlc09wdGlvbnMubWVyZ2UoYyksdGhpcy5zcGlrZU9wdGlvbnMubWVyZ2UoYyksdGhpcy5zZXRDYW1lcmEoYy5jYW1lcmEpLHRoaXMudXBkYXRlRngoYy5kcmFnbW9kZSxjLmhvdmVybW9kZSksdGhpcy5nbHBsb3QudXBkYXRlKHt9KSx0aGlzLnNldENvbnZlcnQocyksdD9BcnJheS5pc0FycmF5KHQpfHwodD1bdF0pOnQ9W107dmFyIGg9W1sxLzAsMS8wLDEvMF0sWy0xLzAsLTEvMCwtMS8wXV07Zm9yKGE9MDthPHQubGVuZ3RoOysrYSkhMD09PShuPXRbYV0pLnZpc2libGUmJmsodGhpcyxuLGgpO3ZhciBwPVsxLDEsMV07Zm9yKG89MDtvPDM7KytvKWhbMF1bb10+aFsxXVtvXT9wW29dPTE6aFsxXVtvXT09PWhbMF1bb10/cFtvXT0xOnBbb109MS8oaFsxXVtvXS1oWzBdW29dKTtmb3IodGhpcy5kYXRhU2NhbGU9cCx0aGlzLmNvbnZlcnRBbm5vdGF0aW9ucyh0aGlzKSxhPTA7YTx0Lmxlbmd0aDsrK2EpITA9PT0obj10W2FdKS52aXNpYmxlJiYoKGk9dGhpcy50cmFjZXNbbi51aWRdKT9pLmRhdGEudHlwZT09PW4udHlwZT9pLnVwZGF0ZShuKTooaS5kaXNwb3NlKCksaT1uLl9tb2R1bGUucGxvdCh0aGlzLG4pLHRoaXMudHJhY2VzW24udWlkXT1pKTooaT1uLl9tb2R1bGUucGxvdCh0aGlzLG4pLHRoaXMudHJhY2VzW24udWlkXT1pKSxpLm5hbWU9bi5uYW1lKTt2YXIgZD1PYmplY3Qua2V5cyh0aGlzLnRyYWNlcyk7dDpmb3IoYT0wO2E8ZC5sZW5ndGg7KythKXtmb3Iobz0wO288dC5sZW5ndGg7KytvKWlmKHRbb10udWlkPT09ZFthXSYmITA9PT10W29dLnZpc2libGUpY29udGludWUgdDsoaT10aGlzLnRyYWNlc1tkW2FdXSkuZGlzcG9zZSgpLGRlbGV0ZSB0aGlzLnRyYWNlc1tkW2FdXX10aGlzLmdscGxvdC5vYmplY3RzLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5fdHJhY2UuZGF0YS5pbmRleC1lLl90cmFjZS5kYXRhLmluZGV4fSk7dmFyIGc9W1swLDAsMF0sWzAsMCwwXV0sbT1bXSx2PXt9O2ZvcihhPTA7YTwzOysrYSl7aWYoKGw9KHM9Y1t3W2FdXSkudHlwZSlpbiB2Pyh2W2xdLmFjYyo9cFthXSx2W2xdLmNvdW50Kz0xKTp2W2xdPXthY2M6cFthXSxjb3VudDoxfSxzLmF1dG9yYW5nZSl7Z1swXVthXT0xLzAsZ1sxXVthXT0tMS8wO3ZhciB5PXRoaXMuZ2xwbG90Lm9iamVjdHMseD10aGlzLmZ1bGxTY2VuZUxheW91dC5hbm5vdGF0aW9uc3x8W10sYj1zLl9uYW1lLmNoYXJBdCgwKTtmb3Iobz0wO288eS5sZW5ndGg7bysrKXt2YXIgXz15W29dLE09Xy5ib3VuZHMsQT1fLl90cmFjZS5kYXRhLl9wYWR8fDA7Z1swXVthXT1NYXRoLm1pbihnWzBdW2FdLE1bMF1bYV0vcFthXS1BKSxnWzFdW2FdPU1hdGgubWF4KGdbMV1bYV0sTVsxXVthXS9wW2FdK0EpfWZvcihvPTA7bzx4Lmxlbmd0aDtvKyspe3ZhciBUPXhbb107aWYoVC52aXNpYmxlKXt2YXIgUz1zLnIybChUW2JdKTtnWzBdW2FdPU1hdGgubWluKGdbMF1bYV0sUyksZ1sxXVthXT1NYXRoLm1heChnWzFdW2FdLFMpfX1pZigicmFuZ2Vtb2RlImluIHMmJiJ0b3plcm8iPT09cy5yYW5nZW1vZGUmJihnWzBdW2FdPU1hdGgubWluKGdbMF1bYV0sMCksZ1sxXVthXT1NYXRoLm1heChnWzFdW2FdLDApKSxnWzBdW2FdPmdbMV1bYV0pZ1swXVthXT0tMSxnWzFdW2FdPTE7ZWxzZXt2YXIgRT1nWzFdW2FdLWdbMF1bYV07Z1swXVthXS09RS8zMixnWzFdW2FdKz1FLzMyfX1lbHNle3ZhciBDPXMucmFuZ2U7Z1swXVthXT1zLnIybChDWzBdKSxnWzFdW2FdPXMucjJsKENbMV0pfWdbMF1bYV09PT1nWzFdW2FdJiYoZ1swXVthXS09MSxnWzFdW2FdKz0xKSxtW2FdPWdbMV1bYV0tZ1swXVthXSx0aGlzLmdscGxvdC5ib3VuZHNbMF1bYV09Z1swXVthXSpwW2FdLHRoaXMuZ2xwbG90LmJvdW5kc1sxXVthXT1nWzFdW2FdKnBbYV19dmFyIEw9WzEsMSwxXTtmb3IoYT0wO2E8MzsrK2Epe3ZhciB6PXZbbD0ocz1jW3dbYV1dKS50eXBlXTtMW2FdPU1hdGgucG93KHouYWNjLDEvei5jb3VudCkvcFthXX12YXIgUDtpZigiYXV0byI9PT1jLmFzcGVjdG1vZGUpUD1NYXRoLm1heC5hcHBseShudWxsLEwpL01hdGgubWluLmFwcGx5KG51bGwsTCk8PTQ/TDpbMSwxLDFdO2Vsc2UgaWYoImN1YmUiPT09Yy5hc3BlY3Rtb2RlKVA9WzEsMSwxXTtlbHNlIGlmKCJkYXRhIj09PWMuYXNwZWN0bW9kZSlQPUw7ZWxzZXtpZigibWFudWFsIiE9PWMuYXNwZWN0bW9kZSl0aHJvdyBuZXcgRXJyb3IoInNjZW5lLmpzIGFzcGVjdFJhdGlvIHdhcyBub3Qgb25lIG9mIHRoZSBlbnVtZXJhdGVkIHR5cGVzIik7dmFyIEk9Yy5hc3BlY3RyYXRpbztQPVtJLngsSS55LEkuel19Yy5hc3BlY3RyYXRpby54PXUuYXNwZWN0cmF0aW8ueD1QWzBdLGMuYXNwZWN0cmF0aW8ueT11LmFzcGVjdHJhdGlvLnk9UFsxXSxjLmFzcGVjdHJhdGlvLno9dS5hc3BlY3RyYXRpby56PVBbMl0sdGhpcy5nbHBsb3QuYXNwZWN0PVA7dmFyIE89Yy5kb21haW58fG51bGwsRD1lLl9zaXplfHxudWxsO2lmKE8mJkQpe3ZhciBSPXRoaXMuY29udGFpbmVyLnN0eWxlO1IucG9zaXRpb249ImFic29sdXRlIixSLmxlZnQ9RC5sK08ueFswXSpELncrInB4IixSLnRvcD1ELnQrKDEtTy55WzFdKSpELmgrInB4IixSLndpZHRoPUQudyooTy54WzFdLU8ueFswXSkrInB4IixSLmhlaWdodD1ELmgqKE8ueVsxXS1PLnlbMF0pKyJweCJ9dGhpcy5nbHBsb3QucmVkcmF3KCl9fSxfLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLmdscGxvdCYmKHRoaXMuY2FtZXJhLm1vdXNlTGlzdGVuZXIuZW5hYmxlZD0hMSx0aGlzLmNvbnRhaW5lci5yZW1vdmVFdmVudExpc3RlbmVyKCJ3aGVlbCIsdGhpcy5jYW1lcmEud2hlZWxMaXN0ZW5lciksdGhpcy5jYW1lcmE9dGhpcy5nbHBsb3QuY2FtZXJhPW51bGwsdGhpcy5nbHBsb3QuZGlzcG9zZSgpLHRoaXMuY29udGFpbmVyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5jb250YWluZXIpLHRoaXMuZ2xwbG90PW51bGwpfSxfLmdldENhbWVyYT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdscGxvdC5jYW1lcmEudmlldy5yZWNhbGNNYXRyaXgodGhpcy5jYW1lcmEudmlldy5sYXN0VCgpKSxNKHRoaXMuZ2xwbG90LmNhbWVyYSl9LF8uc2V0Q2FtZXJhPWZ1bmN0aW9uKHQpe3ZhciBlO3RoaXMuZ2xwbG90LmNhbWVyYS5sb29rQXQuYXBwbHkodGhpcyxbWyhlPXQpLmV5ZS54LGUuZXllLnksZS5leWUuel0sW2UuY2VudGVyLngsZS5jZW50ZXIueSxlLmNlbnRlci56XSxbZS51cC54LGUudXAueSxlLnVwLnpdXSl9LF8uc2F2ZUNhbWVyYT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmdldENhbWVyYSgpLHI9Yy5uZXN0ZWRQcm9wZXJ0eSh0LHRoaXMuaWQrIi5jYW1lcmEiKSxuPXIuZ2V0KCksaT0hMTtmdW5jdGlvbiBhKHQsZSxyLG4pe3ZhciBpPVsidXAiLCJjZW50ZXIiLCJleWUiXSxhPVsieCIsInkiLCJ6Il07cmV0dXJuIGVbaVtyXV0mJnRbaVtyXV1bYVtuXV09PT1lW2lbcl1dW2Fbbl1dfWlmKHZvaWQgMD09PW4paT0hMDtlbHNlIGZvcih2YXIgbz0wO288MztvKyspZm9yKHZhciBzPTA7czwzO3MrKylpZighYShlLG4sbyxzKSl7aT0hMDticmVha31yZXR1cm4gaSYmci5zZXQoZSksaX0sXy51cGRhdGVGeD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuY2FtZXJhO3ImJigib3JiaXQiPT09dD8oci5tb2RlPSJvcmJpdCIsci5rZXlCaW5kaW5nTW9kZT0icm90YXRlIik6InR1cm50YWJsZSI9PT10PyhyLnVwPVswLDAsMV0sci5tb2RlPSJ0dXJudGFibGUiLHIua2V5QmluZGluZ01vZGU9InJvdGF0ZSIpOnIua2V5QmluZGluZ01vZGU9dCksdGhpcy5mdWxsU2NlbmVMYXlvdXQuaG92ZXJtb2RlPWV9LF8udG9JbWFnZT1mdW5jdGlvbih0KXt0fHwodD0icG5nIiksdGhpcy5zdGF0aWNNb2RlJiZ0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZChuKSx0aGlzLmdscGxvdC5yZWRyYXcoKTt2YXIgZT10aGlzLmdscGxvdC5nbCxyPWUuZHJhd2luZ0J1ZmZlcldpZHRoLGk9ZS5kcmF3aW5nQnVmZmVySGVpZ2h0O2UuYmluZEZyYW1lYnVmZmVyKGUuRlJBTUVCVUZGRVIsbnVsbCk7dmFyIGE9bmV3IFVpbnQ4QXJyYXkocippKjQpO2UucmVhZFBpeGVscygwLDAscixpLGUuUkdCQSxlLlVOU0lHTkVEX0JZVEUsYSk7Zm9yKHZhciBvPTAscz1pLTE7bzxzOysrbywtLXMpZm9yKHZhciBsPTA7bDxyOysrbClmb3IodmFyIGM9MDtjPDQ7KytjKXt2YXIgdT1hWzQqKHIqbytsKStjXTthWzQqKHIqbytsKStjXT1hWzQqKHIqcytsKStjXSxhWzQqKHIqcytsKStjXT11fXZhciBoPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO2gud2lkdGg9cixoLmhlaWdodD1pO3ZhciBmLHA9aC5nZXRDb250ZXh0KCIyZCIpLGQ9cC5jcmVhdGVJbWFnZURhdGEocixpKTtzd2l0Y2goZC5kYXRhLnNldChhKSxwLnB1dEltYWdlRGF0YShkLDAsMCksdCl7Y2FzZSJqcGVnIjpmPWgudG9EYXRhVVJMKCJpbWFnZS9qcGVnIik7YnJlYWs7Y2FzZSJ3ZWJwIjpmPWgudG9EYXRhVVJMKCJpbWFnZS93ZWJwIik7YnJlYWs7ZGVmYXVsdDpmPWgudG9EYXRhVVJMKCJpbWFnZS9wbmciKX1yZXR1cm4gdGhpcy5zdGF0aWNNb2RlJiZ0aGlzLmNvbnRhaW5lci5yZW1vdmVDaGlsZChuKSxmfSxfLnNldENvbnZlcnQ9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PDM7dCsrKXt2YXIgZT10aGlzLmZ1bGxTY2VuZUxheW91dFt3W3RdXTt1LnNldENvbnZlcnQoZSx0aGlzLmZ1bGxMYXlvdXQpLGUuc2V0U2NhbGU9Yy5ub29wfX0sZS5leHBvcnRzPWJ9LHsiLi4vLi4vY29tcG9uZW50cy9meCI6NjAwLCIuLi8uLi9saWIiOjY4NCwiLi4vLi4vbGliL3Nob3dfbm9fd2ViZ2xfbXNnIjo3MDUsIi4uLy4uL2xpYi9zdHIycmdiYXJyYXkiOjcwNywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjczMiwiLi4vLi4vcmVnaXN0cnkiOjgxNywiLi9jYW1lcmEiOjc3MywiLi9sYXlvdXQvY29udmVydCI6Nzc4LCIuL2xheW91dC9zcGlrZXMiOjc4MSwiLi9sYXlvdXQvdGlja19tYXJrcyI6NzgyLCIuL3Byb2plY3QiOjc4MywiZ2wtcGxvdDNkIjoyNzcsImhhcy1wYXNzaXZlLWV2ZW50cyI6Mzc5LCJ3ZWJnbC1jb250ZXh0Ijo1MjF9XSw3ODU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe249bnx8dC5sZW5ndGg7Zm9yKHZhciBpPW5ldyBBcnJheShuKSxhPTA7YTxuO2ErKylpW2FdPVt0W2FdLGVbYV0sclthXV07cmV0dXJuIGl9fSx7fV0sNzg2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vZm9udF9hdHRyaWJ1dGVzIiksaT10KCIuLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiKSxhPW4oe2VkaXRUeXBlOiJjYWxjIn0pO2EuZmFtaWx5LmRmbHQ9JyJPcGVuIFNhbnMiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZicsYS5zaXplLmRmbHQ9MTIsYS5jb2xvci5kZmx0PWkuZGVmYXVsdExpbmUsZS5leHBvcnRzPXtmb250OmEsdGl0bGU6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImxheW91dHN0eWxlIn0sdGl0bGVmb250Om4oe2VkaXRUeXBlOiJsYXlvdXRzdHlsZSJ9KSxhdXRvc2l6ZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToibm9uZSJ9LHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjoxMCxkZmx0OjcwMCxlZGl0VHlwZToicGxvdCJ9LGhlaWdodDp7dmFsVHlwZToibnVtYmVyIixtaW46MTAsZGZsdDo0NTAsZWRpdFR5cGU6InBsb3QifSxtYXJnaW46e2w6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDo4MCxlZGl0VHlwZToicGxvdCJ9LHI6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDo4MCxlZGl0VHlwZToicGxvdCJ9LHQ6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxMDAsZWRpdFR5cGU6InBsb3QifSxiOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6ODAsZWRpdFR5cGU6InBsb3QifSxwYWQ6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDowLGVkaXRUeXBlOiJwbG90In0sYXV0b2V4cGFuZDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJwbG90In0scGFwZXJfYmdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6aS5iYWNrZ3JvdW5kLGVkaXRUeXBlOiJwbG90In0scGxvdF9iZ2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDppLmJhY2tncm91bmQsZWRpdFR5cGU6ImxheW91dHN0eWxlIn0sc2VwYXJhdG9yczp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToicGxvdCJ9LGhpZGVzb3VyY2VzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJwbG90In0sc2hvd2xlZ2VuZDp7dmFsVHlwZToiYm9vbGVhbiIsZWRpdFR5cGU6ImxlZ2VuZCJ9LGNvbG9yd2F5Ont2YWxUeXBlOiJjb2xvcmxpc3QiLGRmbHQ6aS5kZWZhdWx0cyxlZGl0VHlwZToiY2FsYyJ9LGRhdGFyZXZpc2lvbjp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYyJ9LHRlbXBsYXRlOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjIn19fSx7Ii4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyI6NTU3LCIuL2ZvbnRfYXR0cmlidXRlcyI6NzU4fV0sNzg3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17cmVxdWlyZWRWZXJzaW9uOiIwLjQ1LjAiLHN0eWxlVXJsUHJlZml4OiJtYXBib3g6Ly9zdHlsZXMvbWFwYm94LyIsc3R5bGVVcmxTdWZmaXg6InY5Iixjb250cm9sQ29udGFpbmVyQ2xhc3NOYW1lOiJtYXBib3hnbC1jb250cm9sLWNvbnRhaW5lciIsd3JvbmdWZXJzaW9uRXJyb3JNc2c6WyJZb3VyIGN1c3RvbSBwbG90bHkuanMgYnVuZGxlIGlzIG5vdCB1c2luZyB0aGUgY29ycmVjdCBtYXBib3gtZ2wgdmVyc2lvbiIsIlBsZWFzZSBpbnN0YWxsIG1hcGJveC1nbEAwLjQ1LjAuIl0uam9pbigiXG4iKSxub0FjY2Vzc1Rva2VuRXJyb3JNc2c6WyJNaXNzaW5nIE1hcGJveCBhY2Nlc3MgdG9rZW4uIiwiTWFwYm94IHRyYWNlIHR5cGUgcmVxdWlyZSBhIE1hcGJveCBhY2Nlc3MgdG9rZW4gdG8gYmUgcmVnaXN0ZXJlZC4iLCJGb3IgZXhhbXBsZToiLCIgIFBsb3RseS5wbG90KGdkLCBkYXRhLCBsYXlvdXQsIHsgbWFwYm94QWNjZXNzVG9rZW46ICdteS1hY2Nlc3MtdG9rZW4nIH0pOyIsIk1vcmUgaW5mbyBoZXJlOiBodHRwczovL3d3dy5tYXBib3guY29tL2hlbHAvZGVmaW5lLWFjY2Vzcy10b2tlbi8iXS5qb2luKCJcbiIpLG1hcE9uRXJyb3JNc2c6Ik1hcGJveCBlcnJvci4iLHN0eWxlUnVsZXM6e21hcDoib3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlOyIsIm1pc3NpbmctY3NzIjoiZGlzcGxheTpub25lIn19fSx7fV0sNzg4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuc3BsaXQoIiAiKSxpPXJbMF0sYT1yWzFdLG89bi5pc0FycmF5T3JUeXBlZEFycmF5KGUpP24ubWVhbihlKTplLHM9LjUrby8xMDAsbD0xLjUrby8xMDAsYz1bIiIsIiJdLHU9WzAsMF07c3dpdGNoKGkpe2Nhc2UidG9wIjpjWzBdPSJ0b3AiLHVbMV09LWw7YnJlYWs7Y2FzZSJib3R0b20iOmNbMF09ImJvdHRvbSIsdVsxXT1sfXN3aXRjaChhKXtjYXNlImxlZnQiOmNbMV09InJpZ2h0Iix1WzBdPS1zO2JyZWFrO2Nhc2UicmlnaHQiOmNbMV09ImxlZnQiLHVbMF09c31yZXR1cm57YW5jaG9yOmNbMF0mJmNbMV0/Yy5qb2luKCItIik6Y1swXT9jWzBdOmNbMV0/Y1sxXToiY2VudGVyIixvZmZzZXQ6dX19fSx7Ii4uLy4uL2xpYiI6Njg0fV0sNzg5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIm1hcGJveC1nbCIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9wbG90cy9nZXRfZGF0YSIpLmdldFN1YnBsb3RDYWxjRGF0YSxvPXQoIi4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIikscz10KCIuL21hcGJveCIpLGw9dCgiLi9jb25zdGFudHMiKTtmb3IodmFyIGMgaW4gbC5zdHlsZVJ1bGVzKWkuYWRkU3R5bGVSdWxlKCIubWFwYm94Z2wtIitjLGwuc3R5bGVSdWxlc1tjXSk7ci5uYW1lPSJtYXBib3giLHIuYXR0cj0ic3VicGxvdCIsci5pZFJvb3Q9Im1hcGJveCIsci5pZFJlZ2V4PXIuYXR0clJlZ2V4PWkuY291bnRlclJlZ2V4KCJtYXBib3giKSxyLmF0dHJpYnV0ZXM9e3N1YnBsb3Q6e3ZhbFR5cGU6InN1YnBsb3RpZCIsZGZsdDoibWFwYm94IixlZGl0VHlwZToiY2FsYyJ9fSxyLmxheW91dEF0dHJpYnV0ZXM9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLHIuc3VwcGx5TGF5b3V0RGVmYXVsdHM9dCgiLi9sYXlvdXRfZGVmYXVsdHMiKSxyLnBsb3Q9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dCxyPXQuY2FsY2RhdGEsbz1lLl9zdWJwbG90cy5tYXBib3g7aWYobi52ZXJzaW9uIT09bC5yZXF1aXJlZFZlcnNpb24pdGhyb3cgbmV3IEVycm9yKGwud3JvbmdWZXJzaW9uRXJyb3JNc2cpO3ZhciBjPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fZnVsbExheW91dDtpZigiIj09PXQuX2NvbnRleHQubWFwYm94QWNjZXNzVG9rZW4pcmV0dXJuIiI7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciBpPXJbZVtuXV07aWYoaS5hY2Nlc3N0b2tlbilyZXR1cm4gaS5hY2Nlc3N0b2tlbn10aHJvdyBuZXcgRXJyb3IobC5ub0FjY2Vzc1Rva2VuRXJyb3JNc2cpfSh0LG8pO24uYWNjZXNzVG9rZW49Yztmb3IodmFyIHU9MDt1PG8ubGVuZ3RoO3UrKyl7dmFyIGg9b1t1XSxmPWEociwibWFwYm94IixoKSxwPWVbaF0sZD1wLl9zdWJwbG90O2R8fChkPXMoe2dkOnQsY29udGFpbmVyOmUuX2dsY29udGFpbmVyLm5vZGUoKSxpZDpoLGZ1bGxMYXlvdXQ6ZSxzdGF0aWNQbG90OnQuX2NvbnRleHQuc3RhdGljUGxvdH0pLGVbaF0uX3N1YnBsb3Q9ZCksZC52aWV3SW5pdGlhbHx8KGQudmlld0luaXRpYWw9e2NlbnRlcjppLmV4dGVuZEZsYXQoe30scC5jZW50ZXIpLHpvb206cC56b29tLGJlYXJpbmc6cC5iZWFyaW5nLHBpdGNoOnAucGl0Y2h9KSxkLnBsb3QoZixlLHQuX3Byb21pc2VzKX19LHIuY2xlYW49ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPW4uX3N1YnBsb3RzLm1hcGJveHx8W10sYT0wO2E8aS5sZW5ndGg7YSsrKXt2YXIgbz1pW2FdOyFlW29dJiZuW29dLl9zdWJwbG90JiZuW29dLl9zdWJwbG90LmRlc3Ryb3koKX19LHIudG9TVkc9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX2Z1bGxMYXlvdXQscj1lLl9zdWJwbG90cy5tYXBib3gsbj1lLl9zaXplLGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIGE9ZVtyW2ldXSxzPWEuZG9tYWluLGw9YS5fc3VicGxvdCxjPWwudG9JbWFnZSgicG5nIik7ZS5fZ2xpbWFnZXMuYXBwZW5kKCJzdmc6aW1hZ2UiKS5hdHRyKHt4bWxuczpvLnN2ZywieGxpbms6aHJlZiI6Yyx4Om4ubCtuLncqcy54WzBdLHk6bi50K24uaCooMS1zLnlbMV0pLHdpZHRoOm4udyoocy54WzFdLXMueFswXSksaGVpZ2h0Om4uaCoocy55WzFdLXMueVswXSkscHJlc2VydmVBc3BlY3RSYXRpbzoibm9uZSJ9KSxsLmRlc3Ryb3koKX19LHIudXBkYXRlRng9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX3N1YnBsb3RzLm1hcGJveCxyPTA7cjxlLmxlbmd0aDtyKyspe3RbZVtyXV0uX3N1YnBsb3QudXBkYXRlRngodCl9fX0seyIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyI6NjYzLCIuLi8uLi9saWIiOjY4NCwiLi4vLi4vcGxvdHMvZ2V0X2RhdGEiOjc2OCwiLi9jb25zdGFudHMiOjc4NywiLi9sYXlvdXRfYXR0cmlidXRlcyI6NzkxLCIuL2xheW91dF9kZWZhdWx0cyI6NzkyLCIuL21hcGJveCI6NzkzLCJtYXBib3gtZ2wiOjM5M31dLDc5MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vY29udmVydF90ZXh0X29wdHMiKTtmdW5jdGlvbiBhKHQsZSl7dGhpcy5tYXBib3g9dCx0aGlzLm1hcD10Lm1hcCx0aGlzLnVpZD10LnVpZCsiLWxheWVyIitlLHRoaXMuaWRTb3VyY2U9dGhpcy51aWQrIi1zb3VyY2UiLHRoaXMuaWRMYXllcj10aGlzLnVpZCsiLWxheWVyIix0aGlzLnNvdXJjZVR5cGU9bnVsbCx0aGlzLnNvdXJjZT1udWxsLHRoaXMubGF5ZXJUeXBlPW51bGwsdGhpcy5iZWxvdz1udWxsLHRoaXMudmlzaWJsZT0hMX12YXIgbz1hLnByb3RvdHlwZTtmdW5jdGlvbiBzKHQpe3ZhciBlPXQuc291cmNlO3JldHVybiB0LnZpc2libGUmJihuLmlzUGxhaW5PYmplY3QoZSl8fCJzdHJpbmciPT10eXBlb2YgZSYmZS5sZW5ndGg+MCl9ZnVuY3Rpb24gbCh0KXt2YXIgZT17fSxyPXt9O3N3aXRjaCh0LnR5cGUpe2Nhc2UiY2lyY2xlIjpuLmV4dGVuZEZsYXQocix7ImNpcmNsZS1yYWRpdXMiOnQuY2lyY2xlLnJhZGl1cywiY2lyY2xlLWNvbG9yIjp0LmNvbG9yLCJjaXJjbGUtb3BhY2l0eSI6dC5vcGFjaXR5fSk7YnJlYWs7Y2FzZSJsaW5lIjpuLmV4dGVuZEZsYXQocix7ImxpbmUtd2lkdGgiOnQubGluZS53aWR0aCwibGluZS1jb2xvciI6dC5jb2xvciwibGluZS1vcGFjaXR5Ijp0Lm9wYWNpdHl9KTticmVhaztjYXNlImZpbGwiOm4uZXh0ZW5kRmxhdChyLHsiZmlsbC1jb2xvciI6dC5jb2xvciwiZmlsbC1vdXRsaW5lLWNvbG9yIjp0LmZpbGwub3V0bGluZWNvbG9yLCJmaWxsLW9wYWNpdHkiOnQub3BhY2l0eX0pO2JyZWFrO2Nhc2Uic3ltYm9sIjp2YXIgYT10LnN5bWJvbCxvPWkoYS50ZXh0cG9zaXRpb24sYS5pY29uc2l6ZSk7bi5leHRlbmRGbGF0KGUseyJpY29uLWltYWdlIjphLmljb24rIi0xNSIsImljb24tc2l6ZSI6YS5pY29uc2l6ZS8xMCwidGV4dC1maWVsZCI6YS50ZXh0LCJ0ZXh0LXNpemUiOmEudGV4dGZvbnQuc2l6ZSwidGV4dC1hbmNob3IiOm8uYW5jaG9yLCJ0ZXh0LW9mZnNldCI6by5vZmZzZXR9KSxuLmV4dGVuZEZsYXQocix7Imljb24tY29sb3IiOnQuY29sb3IsInRleHQtY29sb3IiOmEudGV4dGZvbnQuY29sb3IsInRleHQtb3BhY2l0eSI6dC5vcGFjaXR5fSl9cmV0dXJue2xheW91dDplLHBhaW50OnJ9fW8udXBkYXRlPWZ1bmN0aW9uKHQpe3RoaXMudmlzaWJsZT90aGlzLm5lZWRzTmV3U291cmNlKHQpPyh0aGlzLnJlbW92ZUxheWVyKCksdGhpcy51cGRhdGVTb3VyY2UodCksdGhpcy51cGRhdGVMYXllcih0KSk6dGhpcy5uZWVkc05ld0xheWVyKHQpP3RoaXMudXBkYXRlTGF5ZXIodCk6dGhpcy51cGRhdGVTdHlsZSh0KToodGhpcy51cGRhdGVTb3VyY2UodCksdGhpcy51cGRhdGVMYXllcih0KSksdGhpcy52aXNpYmxlPXModCl9LG8ubmVlZHNOZXdTb3VyY2U9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc291cmNlVHlwZSE9PXQuc291cmNldHlwZXx8dGhpcy5zb3VyY2UhPT10LnNvdXJjZXx8dGhpcy5sYXllclR5cGUhPT10LnR5cGV9LG8ubmVlZHNOZXdMYXllcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sYXllclR5cGUhPT10LnR5cGV8fHRoaXMuYmVsb3chPT10LmJlbG93fSxvLnVwZGF0ZVNvdXJjZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLm1hcDtpZihlLmdldFNvdXJjZSh0aGlzLmlkU291cmNlKSYmZS5yZW1vdmVTb3VyY2UodGhpcy5pZFNvdXJjZSksdGhpcy5zb3VyY2VUeXBlPXQuc291cmNldHlwZSx0aGlzLnNvdXJjZT10LnNvdXJjZSxzKHQpKXt2YXIgcj1mdW5jdGlvbih0KXt2YXIgZSxyPXQuc291cmNldHlwZSxuPXQuc291cmNlLGk9e3R5cGU6cn07Imdlb2pzb24iPT09cj9lPSJkYXRhIjoidmVjdG9yIj09PXImJihlPSJzdHJpbmciPT10eXBlb2Ygbj8idXJsIjoidGlsZXMiKTtyZXR1cm4gaVtlXT1uLGl9KHQpO2UuYWRkU291cmNlKHRoaXMuaWRTb3VyY2Uscil9fSxvLnVwZGF0ZUxheWVyPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubWFwLHI9bCh0KTt0aGlzLnJlbW92ZUxheWVyKCksdGhpcy5sYXllclR5cGU9dC50eXBlLHModCkmJmUuYWRkTGF5ZXIoe2lkOnRoaXMuaWRMYXllcixzb3VyY2U6dGhpcy5pZFNvdXJjZSwic291cmNlLWxheWVyIjp0LnNvdXJjZWxheWVyfHwiIix0eXBlOnQudHlwZSxsYXlvdXQ6ci5sYXlvdXQscGFpbnQ6ci5wYWludH0sdC5iZWxvdyl9LG8udXBkYXRlU3R5bGU9ZnVuY3Rpb24odCl7aWYocyh0KSl7dmFyIGU9bCh0KTt0aGlzLm1hcGJveC5zZXRPcHRpb25zKHRoaXMuaWRMYXllciwic2V0TGF5b3V0UHJvcGVydHkiLGUubGF5b3V0KSx0aGlzLm1hcGJveC5zZXRPcHRpb25zKHRoaXMuaWRMYXllciwic2V0UGFpbnRQcm9wZXJ0eSIsZS5wYWludCl9fSxvLnJlbW92ZUxheWVyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tYXA7dC5nZXRMYXllcih0aGlzLmlkTGF5ZXIpJiZ0LnJlbW92ZUxheWVyKHRoaXMuaWRMYXllcil9LG8uZGlzcG9zZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMubWFwO3QucmVtb3ZlTGF5ZXIodGhpcy5pZExheWVyKSx0LnJlbW92ZVNvdXJjZSh0aGlzLmlkU291cmNlKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1uZXcgYSh0LGUpO3JldHVybiBuLnVwZGF0ZShyKSxufX0seyIuLi8uLi9saWIiOjY4NCwiLi9jb252ZXJ0X3RleHRfb3B0cyI6Nzg4fV0sNzkxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLmRlZmF1bHRMaW5lLGE9dCgiLi4vZG9tYWluIikuYXR0cmlidXRlcyxvPXQoIi4uL2ZvbnRfYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvYXR0cmlidXRlcyIpLnRleHRwb3NpdGlvbixsPXQoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbCxjPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKS50ZW1wbGF0ZWRBcnJheSx1PW8oe30pO3UuZmFtaWx5LmRmbHQ9Ik9wZW4gU2FucyBSZWd1bGFyLCBBcmlhbCBVbmljb2RlIE1TIFJlZ3VsYXIiLGUuZXhwb3J0cz1sKHtfYXJyYXlBdHRyUmVnZXhwczpbbi5jb3VudGVyUmVnZXgoIm1hcGJveCIsIi5sYXllcnMiLCEwKV0sZG9tYWluOmEoe25hbWU6Im1hcGJveCJ9KSxhY2Nlc3N0b2tlbjp7dmFsVHlwZToic3RyaW5nIixub0JsYW5rOiEwLHN0cmljdDohMH0sc3R5bGU6e3ZhbFR5cGU6ImFueSIsdmFsdWVzOlsiYmFzaWMiLCJzdHJlZXRzIiwib3V0ZG9vcnMiLCJsaWdodCIsImRhcmsiLCJzYXRlbGxpdGUiLCJzYXRlbGxpdGUtc3RyZWV0cyJdLGRmbHQ6ImJhc2ljIn0sY2VudGVyOntsb246e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowfSxsYXQ6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowfX0sem9vbTp7dmFsVHlwZToibnVtYmVyIixkZmx0OjF9LGJlYXJpbmc6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowfSxwaXRjaDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjB9LGxheWVyczpjKCJsYXllciIse3Zpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LHNvdXJjZXR5cGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImdlb2pzb24iLCJ2ZWN0b3IiXSxkZmx0OiJnZW9qc29uIn0sc291cmNlOnt2YWxUeXBlOiJhbnkifSxzb3VyY2VsYXllcjp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIifSx0eXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJjaXJjbGUiLCJsaW5lIiwiZmlsbCIsInN5bWJvbCJdLGRmbHQ6ImNpcmNsZSJ9LGJlbG93Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiJ9LGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDppfSxvcGFjaXR5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MX0sY2lyY2xlOntyYWRpdXM6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxNX19LGxpbmU6e3dpZHRoOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6Mn19LGZpbGw6e291dGxpbmVjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6aX19LHN5bWJvbDp7aWNvbjp7dmFsVHlwZToic3RyaW5nIixkZmx0OiJtYXJrZXIifSxpY29uc2l6ZTp7dmFsVHlwZToibnVtYmVyIixkZmx0OjEwfSx0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiJ9LHRleHRmb250OnUsdGV4dHBvc2l0aW9uOm4uZXh0ZW5kRmxhdCh7fSxzLHthcnJheU9rOiExfSl9fSl9LCJwbG90IiwiZnJvbS1yb290Iil9LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NTU4LCIuLi8uLi9saWIiOjY4NCwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6NzE1LCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo3MjIsIi4uLy4uL3RyYWNlcy9zY2F0dGVyL2F0dHJpYnV0ZXMiOjEwMTUsIi4uL2RvbWFpbiI6NzU3LCIuLi9mb250X2F0dHJpYnV0ZXMiOjc1OH1dLDc5MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uL3N1YnBsb3RfZGVmYXVsdHMiKSxhPXQoIi4uL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyIpLG89dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpO2Z1bmN0aW9uIHModCxlLHIsbil7cigiYWNjZXNzdG9rZW4iLG4uYWNjZXNzVG9rZW4pLHIoInN0eWxlIikscigiY2VudGVyLmxvbiIpLHIoImNlbnRlci5sYXQiKSxyKCJ6b29tIikscigiYmVhcmluZyIpLHIoInBpdGNoIiksYSh0LGUse25hbWU6ImxheWVycyIsaGFuZGxlSXRlbURlZmF1bHRzOmx9KSxlLl9pbnB1dD10fWZ1bmN0aW9uIGwodCxlKXtmdW5jdGlvbiByKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxvLmxheWVycyxyLGkpfWlmKHIoInZpc2libGUiKSl7dmFyIGk9cigic291cmNldHlwZSIpO3IoInNvdXJjZSIpLCJ2ZWN0b3IiPT09aSYmcigic291cmNlbGF5ZXIiKTt2YXIgYT1yKCJ0eXBlIik7cigiYmVsb3ciKSxyKCJjb2xvciIpLHIoIm9wYWNpdHkiKSwiY2lyY2xlIj09PWEmJnIoImNpcmNsZS5yYWRpdXMiKSwibGluZSI9PT1hJiZyKCJsaW5lLndpZHRoIiksImZpbGwiPT09YSYmcigiZmlsbC5vdXRsaW5lY29sb3IiKSwic3ltYm9sIj09PWEmJihyKCJzeW1ib2wuaWNvbiIpLHIoInN5bWJvbC5pY29uc2l6ZSIpLHIoInN5bWJvbC50ZXh0Iiksbi5jb2VyY2VGb250KHIsInN5bWJvbC50ZXh0Zm9udCIpLHIoInN5bWJvbC50ZXh0cG9zaXRpb24iKSl9fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7aSh0LGUscix7dHlwZToibWFwYm94IixhdHRyaWJ1dGVzOm8saGFuZGxlRGVmYXVsdHM6cyxwYXJ0aXRpb246InkiLGFjY2Vzc1Rva2VuOmUuX21hcGJveEFjY2Vzc1Rva2VufSl9fSx7Ii4uLy4uL2xpYiI6Njg0LCIuLi9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiOjcyOCwiLi4vc3VicGxvdF9kZWZhdWx0cyI6ODA5LCIuL2xheW91dF9hdHRyaWJ1dGVzIjo3OTF9XSw3OTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgibWFwYm94LWdsIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2Z4IiksYT10KCIuLi8uLi9saWIiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQiKSxzPXQoIi4uL2NhcnRlc2lhbi9zZWxlY3QiKS5wcmVwU2VsZWN0LGw9dCgiLi9jb25zdGFudHMiKSxjPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSx1PXQoIi4vbGF5ZXJzIik7ZnVuY3Rpb24gaCh0KXt0aGlzLmlkPXQuaWQsdGhpcy5nZD10LmdkLHRoaXMuY29udGFpbmVyPXQuY29udGFpbmVyLHRoaXMuaXNTdGF0aWM9dC5zdGF0aWNQbG90O3ZhciBlPXQuZnVsbExheW91dDt0aGlzLnVpZD1lLl91aWQrIi0iK3RoaXMuaWQsdGhpcy5vcHRzPWVbdGhpcy5pZF0sdGhpcy5kaXY9bnVsbCx0aGlzLnhheGlzPW51bGwsdGhpcy55YXhpcz1udWxsLHRoaXMuY3JlYXRlRnJhbWV3b3JrKGUpLHRoaXMubWFwPW51bGwsdGhpcy5hY2Nlc3NUb2tlbj1udWxsLHRoaXMuc3R5bGVPYmo9bnVsbCx0aGlzLnRyYWNlSGFzaD17fSx0aGlzLmxheWVyTGlzdD1bXX12YXIgZj1oLnByb3RvdHlwZTtmdW5jdGlvbiBwKHQpe3ZhciBlPWMuc3R5bGUudmFsdWVzLHI9Yy5zdHlsZS5kZmx0LG49e307cmV0dXJuIGEuaXNQbGFpbk9iamVjdCh0KT8obi5pZD10LmlkLG4uc3R5bGU9dCk6InN0cmluZyI9PXR5cGVvZiB0PyhuLmlkPXQsbi5zdHlsZT0tMSE9PWUuaW5kZXhPZih0KT9kKHQpOnQpOihuLmlkPXIsbi5zdHlsZT1kKHIpKSxuLnRyYW5zaXRpb249e2R1cmF0aW9uOjAsZGVsYXk6MH0sbn1mdW5jdGlvbiBkKHQpe3JldHVybiBsLnN0eWxlVXJsUHJlZml4K3QrIi0iK2wuc3R5bGVVcmxTdWZmaXh9ZnVuY3Rpb24gZyh0KXtyZXR1cm5bdC5sb24sdC5sYXRdfWUuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGgodCl9LGYucGxvdD1mdW5jdGlvbih0LGUscil7dmFyIG4saT10aGlzLGE9aS5vcHRzPWVbdGhpcy5pZF07aS5tYXAmJmEuYWNjZXNzdG9rZW4hPT1pLmFjY2Vzc1Rva2VuJiYoaS5tYXAucmVtb3ZlKCksaS5tYXA9bnVsbCxpLnN0eWxlT2JqPW51bGwsaS50cmFjZUhhc2g9W10saS5sYXllckxpc3Q9e30pLG49aS5tYXA/bmV3IFByb21pc2UoZnVuY3Rpb24ocixuKXtpLnVwZGF0ZU1hcCh0LGUscixuKX0pOm5ldyBQcm9taXNlKGZ1bmN0aW9uKHIsbil7aS5jcmVhdGVNYXAodCxlLHIsbil9KSxyLnB1c2gobil9LGYuY3JlYXRlTWFwPWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvPXRoaXMscz1vLmdkLGM9by5vcHRzLHU9by5zdHlsZU9iaj1wKGMuc3R5bGUpO28uYWNjZXNzVG9rZW49Yy5hY2Nlc3N0b2tlbjt2YXIgaD1vLm1hcD1uZXcgbi5NYXAoe2NvbnRhaW5lcjpvLmRpdixzdHlsZTp1LnN0eWxlLGNlbnRlcjpnKGMuY2VudGVyKSx6b29tOmMuem9vbSxiZWFyaW5nOmMuYmVhcmluZyxwaXRjaDpjLnBpdGNoLGludGVyYWN0aXZlOiFvLmlzU3RhdGljLHByZXNlcnZlRHJhd2luZ0J1ZmZlcjpvLmlzU3RhdGljLGRvdWJsZUNsaWNrWm9vbTohMSxib3hab29tOiExfSksZj1sLmNvbnRyb2xDb250YWluZXJDbGFzc05hbWUsZD1vLmRpdi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGYpWzBdO2lmKG8uZGl2LnJlbW92ZUNoaWxkKGQpLGguX2NhbnZhcy5zdHlsZS5sZWZ0PSIwcHgiLGguX2NhbnZhcy5zdHlsZS50b3A9IjBweCIsby5yZWplY3RPbkVycm9yKGEpLGgub25jZSgibG9hZCIsZnVuY3Rpb24oKXtvLnVwZGF0ZURhdGEodCksby51cGRhdGVMYXlvdXQoZSksby5yZXNvbHZlT25SZW5kZXIocil9KSwhby5pc1N0YXRpYyl7dmFyIG09ITE7aC5vbigibW92ZWVuZCIsZnVuY3Rpb24odCl7aWYoby5tYXApe3ZhciBlPW8uZ2V0VmlldygpO2MuX2lucHV0LmNlbnRlcj1jLmNlbnRlcj1lLmNlbnRlcixjLl9pbnB1dC56b29tPWMuem9vbT1lLnpvb20sYy5faW5wdXQuYmVhcmluZz1jLmJlYXJpbmc9ZS5iZWFyaW5nLGMuX2lucHV0LnBpdGNoPWMucGl0Y2g9ZS5waXRjaCwodC5vcmlnaW5hbEV2ZW50fHxtKSYmeShlKSxtPSExfX0pLGgub24oIndoZWVsIixmdW5jdGlvbigpe209ITB9KSxoLm9uKCJtb3VzZW1vdmUiLGZ1bmN0aW9uKHQpe3ZhciBlPW8uZGl2LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3QuY2xpZW50WD10LnBvaW50LngrZS5sZWZ0LHQuY2xpZW50WT10LnBvaW50LnkrZS50b3AsdC50YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGV9LG8ueGF4aXMucDJjPWZ1bmN0aW9uKCl7cmV0dXJuIHQubG5nTGF0LmxuZ30sby55YXhpcy5wMmM9ZnVuY3Rpb24oKXtyZXR1cm4gdC5sbmdMYXQubGF0fSxpLmhvdmVyKHMsdCxvLmlkKX0pLGgub24oImNsaWNrIixmdW5jdGlvbih0KXtpLmNsaWNrKHMsdC5vcmlnaW5hbEV2ZW50KX0pLGgub24oImRyYWdzdGFydCIsdiksaC5vbigiem9vbXN0YXJ0Iix2KSxoLm9uKCJkYmxjbGljayIsZnVuY3Rpb24oKXtzLmVtaXQoInBsb3RseV9kb3VibGVjbGljayIsbnVsbCk7dmFyIHQ9by52aWV3SW5pdGlhbDtoLnNldENlbnRlcihnKHQuY2VudGVyKSksaC5zZXRab29tKHQuem9vbSksaC5zZXRCZWFyaW5nKHQuYmVhcmluZyksaC5zZXRQaXRjaCh0LnBpdGNoKTt2YXIgZT1vLmdldFZpZXcoKTtjLl9pbnB1dC5jZW50ZXI9Yy5jZW50ZXI9ZS5jZW50ZXIsYy5faW5wdXQuem9vbT1jLnpvb209ZS56b29tLGMuX2lucHV0LmJlYXJpbmc9Yy5iZWFyaW5nPWUuYmVhcmluZyxjLl9pbnB1dC5waXRjaD1jLnBpdGNoPWUucGl0Y2gseShlKX0pLG8uY2xlYXJTZWxlY3Q9ZnVuY3Rpb24oKXtzLl9mdWxsTGF5b3V0Ll96b29tbGF5ZXIuc2VsZWN0QWxsKCIuc2VsZWN0LW91dGxpbmUiKS5yZW1vdmUoKX19ZnVuY3Rpb24gdigpe2kubG9uZVVuaG92ZXIoZS5fdG9wcGFwZXIpfWZ1bmN0aW9uIHkodCl7dmFyIGU9by5pZCxyPXt9O2Zvcih2YXIgbiBpbiB0KXJbZSsiLiIrbl09dFtuXTtzLmVtaXQoInBsb3RseV9yZWxheW91dCIscil9fSxmLnVwZGF0ZU1hcD1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10aGlzLGE9aS5tYXA7aS5yZWplY3RPbkVycm9yKG4pO3ZhciBvPXAoaS5vcHRzLnN0eWxlKTtpLnN0eWxlT2JqLmlkIT09by5pZD8oaS5zdHlsZU9iaj1vLGEuc2V0U3R5bGUoby5zdHlsZSksYS5vbmNlKCJzdHlsZWRhdGEiLGZ1bmN0aW9uKCl7aS50cmFjZUhhc2g9e30saS51cGRhdGVEYXRhKHQpLGkudXBkYXRlTGF5b3V0KGUpLGkucmVzb2x2ZU9uUmVuZGVyKHIpfSkpOihpLnVwZGF0ZURhdGEodCksaS51cGRhdGVMYXlvdXQoZSksaS5yZXNvbHZlT25SZW5kZXIocikpfSxmLnVwZGF0ZURhdGE9ZnVuY3Rpb24odCl7dmFyIGUscixuLGksYT10aGlzLnRyYWNlSGFzaDtmb3Iobj0wO248dC5sZW5ndGg7bisrKXt2YXIgbz10W25dOyhlPWFbKHI9b1swXS50cmFjZSkudWlkXSk/ZS51cGRhdGUobyk6ci5fbW9kdWxlJiYoYVtyLnVpZF09ci5fbW9kdWxlLnBsb3QodGhpcyxvKSl9dmFyIHM9T2JqZWN0LmtleXMoYSk7dDpmb3Iobj0wO248cy5sZW5ndGg7bisrKXt2YXIgbD1zW25dO2ZvcihpPTA7aTx0Lmxlbmd0aDtpKyspaWYobD09PShyPXRbaV1bMF0udHJhY2UpLnVpZCljb250aW51ZSB0OyhlPWFbbF0pLmRpc3Bvc2UoKSxkZWxldGUgYVtsXX19LGYudXBkYXRlTGF5b3V0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubWFwLHI9dGhpcy5vcHRzO2Uuc2V0Q2VudGVyKGcoci5jZW50ZXIpKSxlLnNldFpvb20oci56b29tKSxlLnNldEJlYXJpbmcoci5iZWFyaW5nKSxlLnNldFBpdGNoKHIucGl0Y2gpLHRoaXMudXBkYXRlTGF5ZXJzKCksdGhpcy51cGRhdGVGcmFtZXdvcmsodCksdGhpcy51cGRhdGVGeCh0KSx0aGlzLm1hcC5yZXNpemUoKX0sZi5yZXNvbHZlT25SZW5kZXI9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5tYXA7ZS5vbigicmVuZGVyIixmdW5jdGlvbiByKCl7ZS5sb2FkZWQoKSYmKGUub2ZmKCJyZW5kZXIiLHIpLHNldFRpbWVvdXQodCwwKSl9KX0sZi5yZWplY3RPbkVycm9yPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubWFwO2Z1bmN0aW9uIHIoKXt0KG5ldyBFcnJvcihsLm1hcE9uRXJyb3JNc2cpKX1lLm9uY2UoImVycm9yIixyKSxlLm9uY2UoInN0eWxlLmVycm9yIixyKSxlLm9uY2UoInNvdXJjZS5lcnJvciIsciksZS5vbmNlKCJ0aWxlLmVycm9yIixyKSxlLm9uY2UoImxheWVyLmVycm9yIixyKX0sZi5jcmVhdGVGcmFtZXdvcms9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyPWUuZGl2PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3IuaWQ9ZS51aWQsci5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGUuY29udGFpbmVyLmFwcGVuZENoaWxkKHIpLGUueGF4aXM9e19pZDoieCIsYzJwOmZ1bmN0aW9uKHQpe3JldHVybiBlLnByb2plY3QodCkueH19LGUueWF4aXM9e19pZDoieSIsYzJwOmZ1bmN0aW9uKHQpe3JldHVybiBlLnByb2plY3QodCkueX19LGUudXBkYXRlRnJhbWV3b3JrKHQpfSxmLnVwZGF0ZUZ4PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMscj1lLm1hcCxuPWUuZ2Q7aWYoIWUuaXNTdGF0aWMpe3ZhciBpLGE9dC5kcmFnbW9kZTtpZihpPSJzZWxlY3QiPT09YT9mdW5jdGlvbih0LHIpeyh0LnJhbmdlPXt9KVtlLmlkXT1bYyhbci54bWluLHIueW1pbl0pLGMoW3IueG1heCxyLnltYXhdKV19OmZ1bmN0aW9uKHQscixuKXsodC5sYXNzb1BvaW50cz17fSlbZS5pZF09bi5maWx0ZXJlZC5tYXAoYyl9LCJzZWxlY3QiPT09YXx8Imxhc3NvIj09PWEpe3IuZHJhZ1Bhbi5kaXNhYmxlKCksci5vbigiem9vbXN0YXJ0IixlLmNsZWFyU2VsZWN0KTt2YXIgbD17ZWxlbWVudDplLmRpdixnZDpuLHBsb3RpbmZvOnt4YXhpczplLnhheGlzLHlheGlzOmUueWF4aXMsZmlsbFJhbmdlSXRlbXM6aX0seGF4ZXM6W2UueGF4aXNdLHlheGVzOltlLnlheGlzXSxzdWJwbG90OmUuaWQscHJlcEZuOmZ1bmN0aW9uKHQsZSxyKXtzKHQsZSxyLGwsYSl9fTtvLmluaXQobCl9ZWxzZSByLmRyYWdQYW4uZW5hYmxlKCksci5vZmYoInpvb21zdGFydCIsZS5jbGVhclNlbGVjdCksZS5kaXYub25tb3VzZWRvd249bnVsbH1mdW5jdGlvbiBjKHQpe3ZhciByPWUubWFwLnVucHJvamVjdCh0KTtyZXR1cm5bci5sbmcsci5sYXRdfX0sZi51cGRhdGVGcmFtZXdvcms9ZnVuY3Rpb24odCl7dmFyIGU9dFt0aGlzLmlkXS5kb21haW4scj10Ll9zaXplLG49dGhpcy5kaXYuc3R5bGU7bi53aWR0aD1yLncqKGUueFsxXS1lLnhbMF0pKyJweCIsbi5oZWlnaHQ9ci5oKihlLnlbMV0tZS55WzBdKSsicHgiLG4ubGVmdD1yLmwrZS54WzBdKnIudysicHgiLG4udG9wPXIudCsoMS1lLnlbMV0pKnIuaCsicHgiLHRoaXMueGF4aXMuX29mZnNldD1yLmwrZS54WzBdKnIudyx0aGlzLnhheGlzLl9sZW5ndGg9ci53KihlLnhbMV0tZS54WzBdKSx0aGlzLnlheGlzLl9vZmZzZXQ9ci50KygxLWUueVsxXSkqci5oLHRoaXMueWF4aXMuX2xlbmd0aD1yLmgqKGUueVsxXS1lLnlbMF0pfSxmLnVwZGF0ZUxheWVycz1mdW5jdGlvbigpe3ZhciB0LGU9dGhpcy5vcHRzLmxheWVycyxyPXRoaXMubGF5ZXJMaXN0O2lmKGUubGVuZ3RoIT09ci5sZW5ndGgpe2Zvcih0PTA7dDxyLmxlbmd0aDt0Kyspclt0XS5kaXNwb3NlKCk7Zm9yKHI9dGhpcy5sYXllckxpc3Q9W10sdD0wO3Q8ZS5sZW5ndGg7dCsrKXIucHVzaCh1KHRoaXMsdCxlW3RdKSl9ZWxzZSBmb3IodD0wO3Q8ZS5sZW5ndGg7dCsrKXJbdF0udXBkYXRlKGVbdF0pfSxmLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLm1hcCYmKHRoaXMubWFwLnJlbW92ZSgpLHRoaXMubWFwPW51bGwsdGhpcy5jb250YWluZXIucmVtb3ZlQ2hpbGQodGhpcy5kaXYpKX0sZi50b0ltYWdlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwLnN0b3AoKSx0aGlzLm1hcC5nZXRDYW52YXMoKS50b0RhdGFVUkwoKX0sZi5zZXRPcHRpb25zPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG4gaW4gcil0aGlzLm1hcFtlXSh0LG4scltuXSl9LGYucHJvamVjdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5tYXAucHJvamVjdChuZXcgbi5MbmdMYXQodFswXSx0WzFdKSl9LGYuZ2V0Vmlldz1mdW5jdGlvbigpe3ZhciB0PXRoaXMubWFwLGU9dC5nZXRDZW50ZXIoKTtyZXR1cm57Y2VudGVyOntsb246ZS5sbmcsbGF0OmUubGF0fSx6b29tOnQuZ2V0Wm9vbSgpLGJlYXJpbmc6dC5nZXRCZWFyaW5nKCkscGl0Y2g6dC5nZXRQaXRjaCgpfX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudCI6NTgwLCIuLi8uLi9jb21wb25lbnRzL2Z4Ijo2MDAsIi4uLy4uL2xpYiI6Njg0LCIuLi9jYXJ0ZXNpYW4vc2VsZWN0Ijo3NDksIi4vY29uc3RhbnRzIjo3ODcsIi4vbGF5ZXJzIjo3OTAsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjc5MSwibWFwYm94LWdsIjozOTN9XSw3OTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXt0Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxlZGl0VHlwZToiYXJyYXlkcmF3In0scjp7dmFsVHlwZToibnVtYmVyIixkZmx0OjAsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LGI6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowLGVkaXRUeXBlOiJhcnJheWRyYXcifSxsOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxlZGl0VHlwZToiYXJyYXlkcmF3In0sZWRpdFR5cGU6ImFycmF5ZHJhdyJ9fSx7fV0sNzk1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCJmYXN0LWlzbnVtZXJpYyIpLGE9dCgiLi4vcmVnaXN0cnkiKSxvPXQoIi4uL3Bsb3RfYXBpL3Bsb3Rfc2NoZW1hIikscz10KCIuLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIiksbD10KCIuLi9saWIiKSxjPXQoIi4uL2NvbXBvbmVudHMvY29sb3IiKSx1PXQoIi4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU0saD10KCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiKSxmPXQoIi4vc29ydF9tb2R1bGVzIikuc29ydEJhc2VQbG90TW9kdWxlcyxwPXQoIi4vYW5pbWF0aW9uX2F0dHJpYnV0ZXMiKSxkPXQoIi4vZnJhbWVfYXR0cmlidXRlcyIpLGc9bC5yZWxpbmtQcml2YXRlS2V5cyxtPWwuXyx2PWUuZXhwb3J0cz17fTtsLmV4dGVuZEZsYXQodixhKSx2LmF0dHJpYnV0ZXM9dCgiLi9hdHRyaWJ1dGVzIiksdi5hdHRyaWJ1dGVzLnR5cGUudmFsdWVzPXYuYWxsVHlwZXMsdi5mb250QXR0cnM9dCgiLi9mb250X2F0dHJpYnV0ZXMiKSx2LmxheW91dEF0dHJpYnV0ZXM9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLHYuZm9udFdlaWdodD0ibm9ybWFsIjt2YXIgeT12LnRyYW5zZm9ybXNSZWdpc3RyeSx4PXQoIi4vY29tbWFuZCIpO3YuZXhlY3V0ZUFQSUNvbW1hbmQ9eC5leGVjdXRlQVBJQ29tbWFuZCx2LmNvbXB1dGVBUElDb21tYW5kQmluZGluZ3M9eC5jb21wdXRlQVBJQ29tbWFuZEJpbmRpbmdzLHYubWFuYWdlQ29tbWFuZE9ic2VydmVyPXgubWFuYWdlQ29tbWFuZE9ic2VydmVyLHYuaGFzU2ltcGxlQVBJQ29tbWFuZEJpbmRpbmdzPXguaGFzU2ltcGxlQVBJQ29tbWFuZEJpbmRpbmdzLHYucmVkcmF3VGV4dD1mdW5jdGlvbih0KXtpZighKCh0PWwuZ2V0R3JhcGhEaXYodCkpLmRhdGEmJnQuZGF0YVswXSYmdC5kYXRhWzBdLnIpKXJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihlKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7YS5nZXRDb21wb25lbnRNZXRob2QoImFubm90YXRpb25zIiwiZHJhdyIpKHQpLGEuZ2V0Q29tcG9uZW50TWV0aG9kKCJsZWdlbmQiLCJkcmF3IikodCksKHQuY2FsY2RhdGF8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3RbMF0mJnRbMF0udCYmdFswXS50LmNiJiZ0WzBdLnQuY2IoKX0pLGUodi5wcmV2aW91c1Byb21pc2VzKHQpKX0sMzAwKX0pfSx2LnJlc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gdD1sLmdldEdyYXBoRGl2KHQpLG5ldyBQcm9taXNlKGZ1bmN0aW9uKGUscil7ZnVuY3Rpb24gbih0KXt2YXIgZT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0KS5kaXNwbGF5O3JldHVybiFlfHwibm9uZSI9PT1lfXQmJiFuKHQpfHxyKG5ldyBFcnJvcigiUmVzaXplIG11c3QgYmUgcGFzc2VkIGEgZGlzcGxheWVkIHBsb3QgZGl2IGVsZW1lbnQuIikpLHQuX3JlZHJhd1RpbWVyJiZjbGVhclRpbWVvdXQodC5fcmVkcmF3VGltZXIpLHQuX3JlZHJhd1RpbWVyPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtpZighdC5sYXlvdXR8fHQubGF5b3V0LndpZHRoJiZ0LmxheW91dC5oZWlnaHR8fG4odCkpZSh0KTtlbHNle2RlbGV0ZSB0LmxheW91dC53aWR0aCxkZWxldGUgdC5sYXlvdXQuaGVpZ2h0O3ZhciByPXQuY2hhbmdlZDt0LmF1dG9wbGF5PSEwLGEuY2FsbCgicmVsYXlvdXQiLHQse2F1dG9zaXplOiEwfSkudGhlbihmdW5jdGlvbigpe3QuY2hhbmdlZD1yLGUodCl9KX19LDEwMCl9KX0sdi5wcmV2aW91c1Byb21pc2VzPWZ1bmN0aW9uKHQpe2lmKCh0Ll9wcm9taXNlc3x8W10pLmxlbmd0aClyZXR1cm4gUHJvbWlzZS5hbGwodC5fcHJvbWlzZXMpLnRoZW4oZnVuY3Rpb24oKXt0Ll9wcm9taXNlcz1bXX0pfSx2LmFkZExpbmtzPWZ1bmN0aW9uKHQpe2lmKHQuX2NvbnRleHQuc2hvd0xpbmt8fHQuX2NvbnRleHQuc2hvd1NvdXJjZXMpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj1sLmVuc3VyZVNpbmdsZShlLl9wYXBlciwidGV4dCIsImpzLXBsb3QtbGluay1jb250YWluZXIiLGZ1bmN0aW9uKHQpe3Quc3R5bGUoeyJmb250LWZhbWlseSI6JyJPcGVuIFNhbnMiLCBBcmlhbCwgc2Fucy1zZXJpZicsImZvbnQtc2l6ZSI6IjEycHgiLGZpbGw6Yy5kZWZhdWx0TGluZSwicG9pbnRlci1ldmVudHMiOiJhbGwifSkuZWFjaChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpO3QuYXBwZW5kKCJ0c3BhbiIpLmNsYXNzZWQoImpzLWxpbmstdG8tdG9vbCIsITApLHQuYXBwZW5kKCJ0c3BhbiIpLmNsYXNzZWQoImpzLWxpbmstc3BhY2VyIiwhMCksdC5hcHBlbmQoInRzcGFuIikuY2xhc3NlZCgianMtc291cmNlbGlua3MiLCEwKX0pfSksaT1yLm5vZGUoKSxhPXt5OmUuX3BhcGVyLmF0dHIoImhlaWdodCIpLTl9O2RvY3VtZW50LmJvZHkuY29udGFpbnMoaSkmJmkuZ2V0Q29tcHV0ZWRUZXh0TGVuZ3RoKCk+PWUud2lkdGgtMjA/KGFbInRleHQtYW5jaG9yIl09InN0YXJ0IixhLng9NSk6KGFbInRleHQtYW5jaG9yIl09ImVuZCIsYS54PWUuX3BhcGVyLmF0dHIoIndpZHRoIiktNyksci5hdHRyKGEpO3ZhciBvPXIuc2VsZWN0KCIuanMtbGluay10by10b29sIikscz1yLnNlbGVjdCgiLmpzLWxpbmstc3BhY2VyIiksdT1yLnNlbGVjdCgiLmpzLXNvdXJjZWxpbmtzIik7dC5fY29udGV4dC5zaG93U291cmNlcyYmdC5fY29udGV4dC5zaG93U291cmNlcyh0KSx0Ll9jb250ZXh0LnNob3dMaW5rJiZmdW5jdGlvbih0LGUpe2UudGV4dCgiIik7dmFyIHI9ZS5hcHBlbmQoImEiKS5hdHRyKHsieGxpbms6eGxpbms6aHJlZiI6IiMiLGNsYXNzOiJsaW5rLS1pbXB0IGxpbmstLWVtYmVkdmlldyIsImZvbnQtd2VpZ2h0IjoiYm9sZCJ9KS50ZXh0KHQuX2NvbnRleHQubGlua1RleHQrIiAiK1N0cmluZy5mcm9tQ2hhckNvZGUoMTg3KSk7aWYodC5fY29udGV4dC5zZW5kRGF0YSlyLm9uKCJjbGljayIsZnVuY3Rpb24oKXt2LnNlbmREYXRhVG9DbG91ZCh0KX0pO2Vsc2V7dmFyIG49d2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLnNwbGl0KCIvIiksaT13aW5kb3cubG9jYXRpb24uc2VhcmNoO3IuYXR0cih7InhsaW5rOnhsaW5rOnNob3ciOiJuZXciLCJ4bGluazp4bGluazpocmVmIjoiLyIrblsyXS5zcGxpdCgiLiIpWzBdKyIvIituWzFdK2l9KX19KHQsbykscy50ZXh0KG8udGV4dCgpJiZ1LnRleHQoKT8iIC0gIjoiIil9fSx2LnNlbmREYXRhVG9DbG91ZD1mdW5jdGlvbih0KXt0LmVtaXQoInBsb3RseV9iZWZvcmVleHBvcnQiKTt2YXIgZT0od2luZG93LlBMT1RMWUVOVnx8e30pLkJBU0VfVVJMfHx0Ll9jb250ZXh0LnBsb3RseVNlcnZlclVSTCxyPW4uc2VsZWN0KHQpLmFwcGVuZCgiZGl2IikuYXR0cigiaWQiLCJoaWRkZW5mb3JtIikuc3R5bGUoImRpc3BsYXkiLCJub25lIiksaT1yLmFwcGVuZCgiZm9ybSIpLmF0dHIoe2FjdGlvbjplKyIvZXh0ZXJuYWwiLG1ldGhvZDoicG9zdCIsdGFyZ2V0OiJfYmxhbmsifSk7cmV0dXJuIGkuYXBwZW5kKCJpbnB1dCIpLmF0dHIoe3R5cGU6InRleHQiLG5hbWU6ImRhdGEifSkubm9kZSgpLnZhbHVlPXYuZ3JhcGhKc29uKHQsITEsImtlZXBkYXRhIiksaS5ub2RlKCkuc3VibWl0KCksci5yZW1vdmUoKSx0LmVtaXQoInBsb3RseV9hZnRlcmV4cG9ydCIpLCExfTt2YXIgYixfPVsiZGF5cyIsInNob3J0RGF5cyIsIm1vbnRocyIsInNob3J0TW9udGhzIiwicGVyaW9kcyIsImRhdGVUaW1lIiwiZGF0ZSIsInRpbWUiLCJkZWNpbWFsIiwidGhvdXNhbmRzIiwiZ3JvdXBpbmciLCJjdXJyZW5jeSJdLHc9WyJ5ZWFyIiwibW9udGgiLCJkYXlNb250aCIsImRheU1vbnRoWWVhciJdO2Z1bmN0aW9uIGsodCxlKXt2YXIgcj10Ll9jb250ZXh0LmxvY2FsZSxuPSExLGk9e307ZnVuY3Rpb24gbyh0KXtmb3IodmFyIHI9ITAsYT0wO2E8ZS5sZW5ndGg7YSsrKXt2YXIgbz1lW2FdO2lbb118fCh0W29dP2lbb109dFtvXTpyPSExKX1yJiYobj0hMCl9Zm9yKHZhciBzPTA7czwyO3MrKyl7Zm9yKHZhciBsPXQuX2NvbnRleHQubG9jYWxlcyxjPTA7YzwyO2MrKyl7dmFyIHU9KGxbcl18fHt9KS5mb3JtYXQ7aWYodSYmKG8odSksbikpYnJlYWs7bD1hLmxvY2FsZVJlZ2lzdHJ5fXZhciBoPXIuc3BsaXQoIi0iKVswXTtpZihufHxoPT09cilicmVhaztyPWh9cmV0dXJuIG58fG8oYS5sb2NhbGVSZWdpc3RyeS5lbi5mb3JtYXQpLGl9ZnVuY3Rpb24gTSh0LGUscixuKXtmb3IodmFyIGk9dC50cmFuc2Zvcm1zLGE9W3RdLG89MDtvPGkubGVuZ3RoO28rKyl7dmFyIHM9aVtvXSxsPXlbcy50eXBlXTtsJiZsLnRyYW5zZm9ybSYmKGE9bC50cmFuc2Zvcm0oYSx7dHJhbnNmb3JtOnMsZnVsbFRyYWNlOnQsZnVsbERhdGE6ZSxsYXlvdXQ6cixmdWxsTGF5b3V0Om4sdHJhbnNmb3JtSW5kZXg6b30pKX1yZXR1cm4gYX1mdW5jdGlvbiBBKHQpe3QuX3B1c2htYXJnaW58fCh0Ll9wdXNobWFyZ2luPXt9KSx0Ll9wdXNobWFyZ2luSWRzfHwodC5fcHVzaG1hcmdpbklkcz17fSl9ZnVuY3Rpb24gVCh0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKyl0W2VdLmNsZWFyQ2FsYygpfXYuc3VwcGx5RGVmYXVsdHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lJiZlLnNraXBVcGRhdGVDYWxjLGk9dC5fZnVsbExheW91dHx8e307aWYoaS5fc2tpcERlZmF1bHRzKWRlbGV0ZSBpLl9za2lwRGVmYXVsdHM7ZWxzZXt2YXIgbyxzPXQuX2Z1bGxMYXlvdXQ9e30sYz10LmxheW91dHx8e30sdT10Ll9mdWxsRGF0YXx8W10scD10Ll9mdWxsRGF0YT1bXSxkPXQuZGF0YXx8W10seT10LmNhbGNkYXRhfHxbXSx4PXQuX2NvbnRleHR8fHt9O3QuX3RyYW5zaXRpb25EYXRhfHx2LmNyZWF0ZVRyYW5zaXRpb25EYXRhKHQpLHMuX2RmbHRUaXRsZT17cGxvdDptKHQsIkNsaWNrIHRvIGVudGVyIFBsb3QgdGl0bGUiKSx4Om0odCwiQ2xpY2sgdG8gZW50ZXIgWCBheGlzIHRpdGxlIikseTptKHQsIkNsaWNrIHRvIGVudGVyIFkgYXhpcyB0aXRsZSIpLGNvbG9yYmFyOm0odCwiQ2xpY2sgdG8gZW50ZXIgQ29sb3JzY2FsZSB0aXRsZSIpLGFubm90YXRpb246bSh0LCJuZXcgdGV4dCIpfSxzLl90cmFjZVdvcmQ9bSh0LCJ0cmFjZSIpO3ZhciBNPWsodCxfKTtpZihzLl9tYXBib3hBY2Nlc3NUb2tlbj14Lm1hcGJveEFjY2Vzc1Rva2VuLGkuX2luaXRpYWxBdXRvU2l6ZUlzRG9uZSl7dmFyIEE9aS53aWR0aCxUPWkuaGVpZ2h0O3Yuc3VwcGx5TGF5b3V0R2xvYmFsRGVmYXVsdHMoYyxzLE0pLGMud2lkdGh8fChzLndpZHRoPUEpLGMuaGVpZ2h0fHwocy5oZWlnaHQ9VCksdi5zYW5pdGl6ZU1hcmdpbnMocyl9ZWxzZXt2LnN1cHBseUxheW91dEdsb2JhbERlZmF1bHRzKGMscyxNKTt2YXIgUz0hYy53aWR0aHx8IWMuaGVpZ2h0LEU9cy5hdXRvc2l6ZSxDPXguYXV0b3NpemFibGU7UyYmKEV8fEMpP3YucGxvdEF1dG9TaXplKHQsYyxzKTpTJiZ2LnNhbml0aXplTWFyZ2lucyhzKSwhRSYmUyYmKGMud2lkdGg9cy53aWR0aCxjLmhlaWdodD1zLmhlaWdodCl9cy5fZDNsb2NhbGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5kZWNpbWFsPWUuY2hhckF0KDApLHQudGhvdXNhbmRzPWUuY2hhckF0KDEpLG4ubG9jYWxlKHQpfShNLHMuc2VwYXJhdG9ycykscy5fZXh0cmFGb3JtYXQ9ayh0LHcpLHMuX2luaXRpYWxBdXRvU2l6ZUlzRG9uZT0hMCxzLl9kYXRhTGVuZ3RoPWQubGVuZ3RoLHMuX21vZHVsZXM9W10scy5fYmFzZVBsb3RNb2R1bGVzPVtdO3ZhciBMPXMuX3N1YnBsb3RzPWZ1bmN0aW9uKCl7dmFyIHQsZSxyPXt9O2lmKCFiKXtiPVtdO3ZhciBuPWEuc3VicGxvdHNSZWdpc3RyeTtmb3IodmFyIGkgaW4gbil7dmFyIG89bltpXSxzPW8uYXR0cjtpZihzJiYoYi5wdXNoKGkpLEFycmF5LmlzQXJyYXkocykpKWZvcihlPTA7ZTxzLmxlbmd0aDtlKyspbC5wdXNoVW5pcXVlKGIsc1tlXSl9fWZvcih0PTA7dDxiLmxlbmd0aDt0KyspcltiW3RdXT1bXTtyZXR1cm4gcn0oKSx6PXMuX3NwbG9tQXhlcz17eDp7fSx5Ont9fSxQPXMuX3NwbG9tU3VicGxvdHM9e307cy5fc3Bsb21HcmlkRGZsdD17fSxzLl9yZXF1ZXN0UmFuZ2VzbGlkZXI9e30scy5fdHJhY2VVaWRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPWUubGVuZ3RoLGE9W107Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG89dFtyXS5fZnVsbElucHV0O28hPT1uJiZhLnB1c2gobyksbj1vfXZhciBzPWEubGVuZ3RoLGM9bmV3IEFycmF5KGkpLHU9e307ZnVuY3Rpb24gaCh0LGUpe2NbZV09dCx1W3RdPTF9ZnVuY3Rpb24gZih0LGUpe2lmKHQmJiJzdHJpbmciPT10eXBlb2YgdCYmIXVbdF0pcmV0dXJuIGgodCxlKSwhMH1mb3Iocj0wO3I8aTtyKyspZihlW3JdLnVpZCxyKXx8cjxzJiZmKGFbcl0udWlkLHIpfHxoKGwucmFuZHN0cih1KSxyKTtyZXR1cm4gY30odSxkKSxzLl9nbG9iYWxUcmFuc2Zvcm1zPSh0Ll9jb250ZXh0fHx7fSkuZ2xvYmFsVHJhbnNmb3Jtcyx2LnN1cHBseURhdGFEZWZhdWx0cyhkLHAsYyxzKTt2YXIgST1PYmplY3Qua2V5cyh6LngpLE89T2JqZWN0LmtleXMoei55KTtpZihJLmxlbmd0aD4xJiZPLmxlbmd0aD4xKXtmb3IoYS5nZXRDb21wb25lbnRNZXRob2QoImdyaWQiLCJzaXplRGVmYXVsdHMiKShjLHMpLG89MDtvPEkubGVuZ3RoO28rKylsLnB1c2hVbmlxdWUoTC54YXhpcyxJW29dKTtmb3Iobz0wO288Ty5sZW5ndGg7bysrKWwucHVzaFVuaXF1ZShMLnlheGlzLE9bb10pO2Zvcih2YXIgRCBpbiBQKWwucHVzaFVuaXF1ZShMLmNhcnRlc2lhbixEKX1zLl9oYXM9di5faGFzUGxvdFR5cGUuYmluZChzKTt2YXIgUj1zLl9tb2R1bGVzO2ZvcihvPTA7bzxSLmxlbmd0aDtvKyspe3ZhciBCPVJbb107Qi5jbGVhbkRhdGEmJkIuY2xlYW5EYXRhKHApfWlmKHUubGVuZ3RoPT09cC5sZW5ndGgpZm9yKG89MDtvPHAubGVuZ3RoO28rKylnKHBbb10sdVtvXSk7di5zdXBwbHlMYXlvdXRNb2R1bGVEZWZhdWx0cyhjLHMscCx0Ll90cmFuc2l0aW9uRGF0YSkscy5faGFzT25seUxhcmdlU3Bsb21zPTE9PT1zLl9iYXNlUGxvdE1vZHVsZXMubGVuZ3RoJiYic3Bsb20iPT09cy5fYmFzZVBsb3RNb2R1bGVzWzBdLm5hbWUmJkkubGVuZ3RoPjE1JiZPLmxlbmd0aD4xNSYmMD09PXMuc2hhcGVzLmxlbmd0aCYmMD09PXMuaW1hZ2VzLmxlbmd0aCxzLl9oYXNDYXJ0ZXNpYW49cy5faGFzKCJjYXJ0ZXNpYW4iKSxzLl9oYXNHZW89cy5faGFzKCJnZW8iKSxzLl9oYXNHTDNEPXMuX2hhcygiZ2wzZCIpLHMuX2hhc0dMMkQ9cy5faGFzKCJnbDJkIikscy5faGFzVGVybmFyeT1zLl9oYXMoInRlcm5hcnkiKSxzLl9oYXNQaWU9cy5faGFzKCJwaWUiKSx2LmxpbmtTdWJwbG90cyhwLHMsdSxpKSx2LmNsZWFuUGxvdChwLHMsdSxpLHkpLGcocyxpKSx2LmRvQXV0b01hcmdpbih0KTt2YXIgRj1oLmxpc3QodCk7Zm9yKG89MDtvPEYubGVuZ3RoO28rKyl7RltvXS5zZXRTY2FsZSgpfXJ8fHkubGVuZ3RoIT09cC5sZW5ndGh8fHYuc3VwcGx5RGVmYXVsdHNVcGRhdGVDYWxjKHkscCkscy5fYmFzZVBsb3RNb2R1bGVzLnNvcnQoZil9fSx2LnN1cHBseURlZmF1bHRzVXBkYXRlQ2FsYz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdLGk9dFtyXVswXTtpZihpJiZpLnRyYWNlKXt2YXIgYT1pLnRyYWNlO2lmKGEuX2hhc0NhbGNUcmFuc2Zvcm0pe3ZhciBvLHMsYyx1PWEuX2FycmF5QXR0cnM7Zm9yKG89MDtvPHUubGVuZ3RoO28rKylzPXVbb10sYz1sLm5lc3RlZFByb3BlcnR5KGEscykuZ2V0KCkuc2xpY2UoKSxsLm5lc3RlZFByb3BlcnR5KG4scykuc2V0KGMpfWkudHJhY2U9bn19fSx2LmNyZWF0ZVRyYW5zaXRpb25EYXRhPWZ1bmN0aW9uKHQpe3QuX3RyYW5zaXRpb25EYXRhfHwodC5fdHJhbnNpdGlvbkRhdGE9e30pLHQuX3RyYW5zaXRpb25EYXRhLl9mcmFtZXN8fCh0Ll90cmFuc2l0aW9uRGF0YS5fZnJhbWVzPVtdKSx0Ll90cmFuc2l0aW9uRGF0YS5fZnJhbWVIYXNofHwodC5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lSGFzaD17fSksdC5fdHJhbnNpdGlvbkRhdGEuX2NvdW50ZXJ8fCh0Ll90cmFuc2l0aW9uRGF0YS5fY291bnRlcj0wKSx0Ll90cmFuc2l0aW9uRGF0YS5faW50ZXJydXB0Q2FsbGJhY2tzfHwodC5fdHJhbnNpdGlvbkRhdGEuX2ludGVycnVwdENhbGxiYWNrcz1bXSl9LHYuX2hhc1Bsb3RUeXBlPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dGhpcy5fYmFzZVBsb3RNb2R1bGVzfHxbXTtmb3IoZT0wO2U8ci5sZW5ndGg7ZSsrKWlmKHJbZV0ubmFtZT09PXQpcmV0dXJuITA7dmFyIG49dGhpcy5fbW9kdWxlc3x8W107Zm9yKGU9MDtlPG4ubGVuZ3RoO2UrKyl7dmFyIGk9bltlXS5uYW1lO2lmKGk9PT10KXJldHVybiEwO3ZhciBvPWEubW9kdWxlc1tpXTtpZihvJiZvLmNhdGVnb3JpZXNbdF0pcmV0dXJuITB9cmV0dXJuITF9LHYuY2xlYW5QbG90PWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGEsbyxzPW4uX2Jhc2VQbG90TW9kdWxlc3x8W107Zm9yKGE9MDthPHMubGVuZ3RoO2ErKyl7dmFyIGw9c1thXTtsLmNsZWFuJiZsLmNsZWFuKHQsZSxyLG4saSl9dmFyIGM9bi5faGFzJiZuLl9oYXMoImdsIiksdT1lLl9oYXMmJmUuX2hhcygiZ2wiKTtjJiYhdSYmdm9pZCAwIT09bi5fZ2xjb250YWluZXImJihuLl9nbGNvbnRhaW5lci5zZWxlY3RBbGwoIi5nbC1jYW52YXMiKS5yZW1vdmUoKSxuLl9nbGNvbnRhaW5lci5zZWxlY3RBbGwoIi5uby13ZWJnbCIpLnJlbW92ZSgpLG4uX2dsY2FudmFzPW51bGwpO3ZhciBoPSEhbi5faW5mb2xheWVyO3Q6Zm9yKGE9MDthPHIubGVuZ3RoO2ErKyl7dmFyIGY9clthXS51aWQ7Zm9yKG89MDtvPHQubGVuZ3RoO28rKyl7aWYoZj09PXRbb10udWlkKWNvbnRpbnVlIHR9aCYmbi5faW5mb2xheWVyLnNlbGVjdCgiLmNiIitmKS5yZW1vdmUoKX1uLl96b29tbGF5ZXImJm4uX3pvb21sYXllci5zZWxlY3RBbGwoIi5zZWxlY3Qtb3V0bGluZSIpLnJlbW92ZSgpfSx2LmxpbmtTdWJwbG90cz1mdW5jdGlvbih0LGUscixuKXt2YXIgaSxhLG8scyxsPW4uX3Bsb3RzfHx7fSxjPWUuX3Bsb3RzPXt9LHU9ZS5fc3VicGxvdHMsZj17X2Z1bGxEYXRhOnQsX2Z1bGxMYXlvdXQ6ZX0scD11LmNhcnRlc2lhbi5jb25jYXQodS5nbDJkfHxbXSk7Zm9yKGk9MDtpPHAubGVuZ3RoO2krKyl7dmFyIGQsZz1sW289cFtpXV0sbT1oLmdldEZyb21JZChmLG8sIngiKSx2PWguZ2V0RnJvbUlkKGYsbywieSIpO2ZvcihnPygoZD1jW29dPWcpLnhheGlzLmxheWVyIT09bS5sYXllciYmKGQueGxpbmVzLmF0dHIoImQiLG51bGwpLGQueGF4aXNsYXllci5zZWxlY3RBbGwoIioiKS5yZW1vdmUoKSksZC55YXhpcy5sYXllciE9PXYubGF5ZXImJihkLnlsaW5lcy5hdHRyKCJkIixudWxsKSxkLnlheGlzbGF5ZXIuc2VsZWN0QWxsKCIqIikucmVtb3ZlKCkpKTooZD1jW29dPXt9KS5pZD1vLGQueGF4aXM9bSxkLnlheGlzPXYsZC5faGFzQ2xpcE9uQXhpc0ZhbHNlPSExLGE9MDthPHQubGVuZ3RoO2ErKyl7dmFyIHk9dFthXTtpZih5LnhheGlzPT09ZC54YXhpcy5faWQmJnkueWF4aXM9PT1kLnlheGlzLl9pZCYmITE9PT15LmNsaXBvbmF4aXMpe2QuX2hhc0NsaXBPbkF4aXNGYWxzZT0hMDticmVha319fXZhciB4PWgubGlzdChmLG51bGwsITApO2ZvcihpPTA7aTx4Lmxlbmd0aDtpKyspe3ZhciBiPW51bGw7KHM9eFtpXSkub3ZlcmxheWluZyYmKGI9aC5nZXRGcm9tSWQoZixzLm92ZXJsYXlpbmcpKSYmYi5vdmVybGF5aW5nJiYocy5vdmVybGF5aW5nPSExLGI9bnVsbCkscy5fbWFpbkF4aXM9Ynx8cyxiJiYocy5kb21haW49Yi5kb21haW4uc2xpY2UoKSkscy5fYW5jaG9yQXhpcz0iZnJlZSI9PT1zLmFuY2hvcj9udWxsOmguZ2V0RnJvbUlkKGYscy5hbmNob3IpfX0sdi5jbGVhckV4cGFuZGVkVHJhY2VEZWZhdWx0Q29sb3JzPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbjtmb3Iocj1bXSwoZT10Ll9tb2R1bGUuX2NvbG9yQXR0cnMpfHwodC5fbW9kdWxlLl9jb2xvckF0dHJzPWU9W10sby5jcmF3bCh0Ll9tb2R1bGUuYXR0cmlidXRlcyxmdW5jdGlvbih0LG4saSxhKXtyW2FdPW4sci5sZW5ndGg9YSsxLCJjb2xvciI9PT10LnZhbFR5cGUmJnZvaWQgMD09PXQuZGZsdCYmZS5wdXNoKHIuam9pbigiLiIpKX0pKSxuPTA7bjxlLmxlbmd0aDtuKyspe2wubmVzdGVkUHJvcGVydHkodCwiX2lucHV0LiIrZVtuXSkuZ2V0KCl8fGwubmVzdGVkUHJvcGVydHkodCxlW25dKS5zZXQobnVsbCl9fSx2LnN1cHBseURhdGFEZWZhdWx0cz1mdW5jdGlvbih0LGUscixuKXt2YXIgaSxvLGMsdT1uLl9tb2R1bGVzLGg9bi5fYmFzZVBsb3RNb2R1bGVzLGY9MCxwPTA7ZnVuY3Rpb24gZCh0KXtlLnB1c2godCk7dmFyIHI9dC5fbW9kdWxlO3ImJighMD09PXQudmlzaWJsZSYmbC5wdXNoVW5pcXVlKHUsciksbC5wdXNoVW5pcXVlKGgsdC5fbW9kdWxlLmJhc2VQbG90TW9kdWxlKSxmKyssITEhPT10Ll9pbnB1dC52aXNpYmxlJiZwKyspfW4uX3RyYW5zZm9ybU1vZHVsZXM9W107dmFyIG09e30seT1bXSx4PShyLnRlbXBsYXRlfHx7fSkuZGF0YXx8e30sYj1zLnRyYWNlVGVtcGxhdGVyKHgpO2ZvcihpPTA7aTx0Lmxlbmd0aDtpKyspe2lmKGM9dFtpXSwobz1iLm5ld1RyYWNlKGMpKS51aWQ9bi5fdHJhY2VVaWRzW2ldLHYuc3VwcGx5VHJhY2VEZWZhdWx0cyhjLG8scCxuLGkpLG8udWlkPW4uX3RyYWNlVWlkc1tpXSxvLmluZGV4PWksby5faW5wdXQ9YyxvLl9leHBhbmRlZEluZGV4PWYsby50cmFuc2Zvcm1zJiZvLnRyYW5zZm9ybXMubGVuZ3RoKWZvcih2YXIgXz1NKG8sZSxyLG4pLHc9MDt3PF8ubGVuZ3RoO3crKyl7dmFyIGs9X1t3XSxBPXtfdGVtcGxhdGU6by5fdGVtcGxhdGUsdHlwZTpvLnR5cGUsdWlkOm8udWlkK3d9O3Yuc3VwcGx5VHJhY2VEZWZhdWx0cyhrLEEsZixuLGkpLGcoQSxrKSxBLmluZGV4PWksQS5faW5wdXQ9YyxBLl9mdWxsSW5wdXQ9byxBLl9leHBhbmRlZEluZGV4PWYsQS5fZXhwYW5kZWRJbnB1dD1rLGQoQSl9ZWxzZSBvLl9mdWxsSW5wdXQ9byxvLl9leHBhbmRlZElucHV0PW8sZChvKTthLnRyYWNlSXMobywiY2FycGV0QXhpcyIpJiYobVtvLmNhcnBldF09byksYS50cmFjZUlzKG8sImNhcnBldERlcGVuZGVudCIpJiZ5LnB1c2goaSl9Zm9yKGk9MDtpPHkubGVuZ3RoO2krKylpZigobz1lW3lbaV1dKS52aXNpYmxlKXt2YXIgVD1tW28uY2FycGV0XTtvLl9jYXJwZXQ9VCxUJiZULnZpc2libGU/KG8ueGF4aXM9VC54YXhpcyxvLnlheGlzPVQueWF4aXMpOm8udmlzaWJsZT0hMX19LHYuc3VwcGx5QW5pbWF0aW9uRGVmYXVsdHM9ZnVuY3Rpb24odCl7dmFyIGU7dD10fHx7fTt2YXIgcj17fTtmdW5jdGlvbiBuKGUsbil7cmV0dXJuIGwuY29lcmNlKHR8fHt9LHIscCxlLG4pfWlmKG4oIm1vZGUiKSxuKCJkaXJlY3Rpb24iKSxuKCJmcm9tY3VycmVudCIpLEFycmF5LmlzQXJyYXkodC5mcmFtZSkpZm9yKHIuZnJhbWU9W10sZT0wO2U8dC5mcmFtZS5sZW5ndGg7ZSsrKXIuZnJhbWVbZV09di5zdXBwbHlBbmltYXRpb25GcmFtZURlZmF1bHRzKHQuZnJhbWVbZV18fHt9KTtlbHNlIHIuZnJhbWU9di5zdXBwbHlBbmltYXRpb25GcmFtZURlZmF1bHRzKHQuZnJhbWV8fHt9KTtpZihBcnJheS5pc0FycmF5KHQudHJhbnNpdGlvbikpZm9yKHIudHJhbnNpdGlvbj1bXSxlPTA7ZTx0LnRyYW5zaXRpb24ubGVuZ3RoO2UrKylyLnRyYW5zaXRpb25bZV09di5zdXBwbHlBbmltYXRpb25UcmFuc2l0aW9uRGVmYXVsdHModC50cmFuc2l0aW9uW2VdfHx7fSk7ZWxzZSByLnRyYW5zaXRpb249di5zdXBwbHlBbmltYXRpb25UcmFuc2l0aW9uRGVmYXVsdHModC50cmFuc2l0aW9ufHx7fSk7cmV0dXJuIHJ9LHYuc3VwcGx5QW5pbWF0aW9uRnJhbWVEZWZhdWx0cz1mdW5jdGlvbih0KXt2YXIgZT17fTtmdW5jdGlvbiByKHIsbil7cmV0dXJuIGwuY29lcmNlKHR8fHt9LGUscC5mcmFtZSxyLG4pfXJldHVybiByKCJkdXJhdGlvbiIpLHIoInJlZHJhdyIpLGV9LHYuc3VwcGx5QW5pbWF0aW9uVHJhbnNpdGlvbkRlZmF1bHRzPWZ1bmN0aW9uKHQpe3ZhciBlPXt9O2Z1bmN0aW9uIHIocixuKXtyZXR1cm4gbC5jb2VyY2UodHx8e30sZSxwLnRyYW5zaXRpb24scixuKX1yZXR1cm4gcigiZHVyYXRpb24iKSxyKCJlYXNpbmciKSxlfSx2LnN1cHBseUZyYW1lRGVmYXVsdHM9ZnVuY3Rpb24odCl7dmFyIGU9e307ZnVuY3Rpb24gcihyLG4pe3JldHVybiBsLmNvZXJjZSh0LGUsZCxyLG4pfXJldHVybiByKCJncm91cCIpLHIoIm5hbWUiKSxyKCJ0cmFjZXMiKSxyKCJiYXNlZnJhbWUiKSxyKCJkYXRhIikscigibGF5b3V0IiksZX0sdi5zdXBwbHlUcmFjZURlZmF1bHRzPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIG8scz1uLmNvbG9yd2F5fHxjLmRlZmF1bHRzLHU9c1tyJXMubGVuZ3RoXTtmdW5jdGlvbiBoKHIsbil7cmV0dXJuIGwuY29lcmNlKHQsZSx2LmF0dHJpYnV0ZXMscixuKX12YXIgZj1oKCJ2aXNpYmxlIik7aCgidHlwZSIpLGgoIm5hbWUiLG4uX3RyYWNlV29yZCsiICIraSk7dmFyIHA9di5nZXRNb2R1bGUoZSk7aWYoZS5fbW9kdWxlPXAscCl7dmFyIGQ9cC5iYXNlUGxvdE1vZHVsZSxnPWQuYXR0cixtPWQuYXR0cmlidXRlcztpZihnJiZtKXt2YXIgeT1uLl9zdWJwbG90cyx4PSIiO2lmKCJnbDJkIiE9PWQubmFtZXx8Zil7aWYoQXJyYXkuaXNBcnJheShnKSlmb3Iobz0wO288Zy5sZW5ndGg7bysrKXt2YXIgYj1nW29dLF89bC5jb2VyY2UodCxlLG0sYik7eVtiXSYmbC5wdXNoVW5pcXVlKHlbYl0sXykseCs9X31lbHNlIHg9bC5jb2VyY2UodCxlLG0sZyk7eVtkLm5hbWVdJiZsLnB1c2hVbmlxdWUoeVtkLm5hbWVdLHgpfX19cmV0dXJuIGYmJihoKCJjdXN0b21kYXRhIiksaCgiaWRzIiksYS50cmFjZUlzKGUsInNob3dMZWdlbmQiKSYmKGgoInNob3dsZWdlbmQiKSxoKCJsZWdlbmRncm91cCIpKSxhLmdldENvbXBvbmVudE1ldGhvZCgiZngiLCJzdXBwbHlEZWZhdWx0cyIpKHQsZSx1LG4pLHAmJihwLnN1cHBseURlZmF1bHRzKHQsZSx1LG4pLGwuY29lcmNlSG92ZXJpbmZvKHQsZSxuKSksYS50cmFjZUlzKGUsIm5vT3BhY2l0eSIpfHxoKCJvcGFjaXR5IiksYS50cmFjZUlzKGUsIm5vdExlZ2VuZElzb2xhdGFibGUiKSYmKGUudmlzaWJsZT0hIWUudmlzaWJsZSkscCYmcC5zZWxlY3RQb2ludHMmJmgoInNlbGVjdGVkcG9pbnRzIiksdi5zdXBwbHlUcmFuc2Zvcm1EZWZhdWx0cyh0LGUsbikpLGV9LHYuc3VwcGx5VHJhbnNmb3JtRGVmYXVsdHM9ZnVuY3Rpb24odCxlLHIpe2lmKGUuX2xlbmd0aHx8ZnVuY3Rpb24odCl7dmFyIGU9dC50cmFuc2Zvcm1zO2lmKEFycmF5LmlzQXJyYXkoZSkmJmUubGVuZ3RoKWZvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj15W2Vbcl0udHlwZV07aWYobiYmbi5tYWtlc0RhdGEpcmV0dXJuITB9cmV0dXJuITF9KHQpKXt2YXIgbj1yLl9nbG9iYWxUcmFuc2Zvcm1zfHxbXSxpPXIuX3RyYW5zZm9ybU1vZHVsZXN8fFtdO2lmKEFycmF5LmlzQXJyYXkodC50cmFuc2Zvcm1zKXx8MCE9PW4ubGVuZ3RoKWZvcih2YXIgYT10LnRyYW5zZm9ybXN8fFtdLG89bi5jb25jYXQoYSkscz1lLnRyYW5zZm9ybXM9W10sYz0wO2M8by5sZW5ndGg7YysrKXt2YXIgdSxoPW9bY10sZj1oLnR5cGUscD15W2ZdLGQ9IShoLl9tb2R1bGUmJmguX21vZHVsZT09PXApLGc9cCYmImZ1bmN0aW9uIj09dHlwZW9mIHAudHJhbnNmb3JtO3B8fGwud2FybigiVW5yZWNvZ25pemVkIHRyYW5zZm9ybSB0eXBlICIrZisiLiIpLHAmJnAuc3VwcGx5RGVmYXVsdHMmJihkfHxnKT8oKHU9cC5zdXBwbHlEZWZhdWx0cyhoLGUscix0KSkudHlwZT1mLHUuX21vZHVsZT1wLGwucHVzaFVuaXF1ZShpLHApKTp1PWwuZXh0ZW5kRmxhdCh7fSxoKSxzLnB1c2godSl9fX0sdi5zdXBwbHlMYXlvdXRHbG9iYWxEZWZhdWx0cz1mdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbihyLG4pe3JldHVybiBsLmNvZXJjZSh0LGUsdi5sYXlvdXRBdHRyaWJ1dGVzLHIsbil9dmFyIGk9dC50ZW1wbGF0ZTtsLmlzUGxhaW5PYmplY3QoaSkmJihlLnRlbXBsYXRlPWksZS5fdGVtcGxhdGU9aS5sYXlvdXQsZS5fZGF0YVRlbXBsYXRlPWkuZGF0YSk7dmFyIG89bC5jb2VyY2VGb250KG4sImZvbnQiKTtuKCJ0aXRsZSIsZS5fZGZsdFRpdGxlLnBsb3QpLGwuY29lcmNlRm9udChuLCJ0aXRsZWZvbnQiLHtmYW1pbHk6by5mYW1pbHksc2l6ZTpNYXRoLnJvdW5kKDEuNCpvLnNpemUpLGNvbG9yOm8uY29sb3J9KSxuKCJhdXRvc2l6ZSIsISh0LndpZHRoJiZ0LmhlaWdodCkpLG4oIndpZHRoIiksbigiaGVpZ2h0IiksbigibWFyZ2luLmwiKSxuKCJtYXJnaW4uciIpLG4oIm1hcmdpbi50IiksbigibWFyZ2luLmIiKSxuKCJtYXJnaW4ucGFkIiksbigibWFyZ2luLmF1dG9leHBhbmQiKSx0LndpZHRoJiZ0LmhlaWdodCYmdi5zYW5pdGl6ZU1hcmdpbnMoZSksYS5nZXRDb21wb25lbnRNZXRob2QoImdyaWQiLCJzaXplRGVmYXVsdHMiKSh0LGUpLG4oInBhcGVyX2JnY29sb3IiKSxuKCJzZXBhcmF0b3JzIixyLmRlY2ltYWwrci50aG91c2FuZHMpLG4oImhpZGVzb3VyY2VzIiksbigiY29sb3J3YXkiKSxuKCJkYXRhcmV2aXNpb24iKSxhLmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwiaGFuZGxlRGVmYXVsdHMiKSh0LGUsImNhbGVuZGFyIiksYS5nZXRDb21wb25lbnRNZXRob2QoImZ4Iiwic3VwcGx5TGF5b3V0R2xvYmFsRGVmYXVsdHMiKSh0LGUsbil9LHYucGxvdEF1dG9TaXplPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixhLG89dC5fY29udGV4dHx8e30scz1vLmZyYW1lTWFyZ2lucyxjPWwuaXNQbG90RGl2KHQpO2lmKGMmJnQuZW1pdCgicGxvdGx5X2F1dG9zaXplIiksby5maWxsRnJhbWUpbj13aW5kb3cuaW5uZXJXaWR0aCxhPXdpbmRvdy5pbm5lckhlaWdodCxkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93PSJoaWRkZW4iO2Vsc2UgaWYoaShzKSYmcz4wKXt2YXIgdT1mdW5jdGlvbih0KXt2YXIgZSxyPXtsZWZ0OjAscmlnaHQ6MCxib3R0b206MCx0b3A6MH07aWYodClmb3IoZSBpbiB0KXQuaGFzT3duUHJvcGVydHkoZSkmJihyLmxlZnQrPXRbZV0ubGVmdHx8MCxyLnJpZ2h0Kz10W2VdLnJpZ2h0fHwwLHIuYm90dG9tKz10W2VdLmJvdHRvbXx8MCxyLnRvcCs9dFtlXS50b3B8fDApO3JldHVybiByfSh0Ll9ib3VuZGluZ0JveE1hcmdpbnMpLGg9dS5sZWZ0K3UucmlnaHQsZj11LmJvdHRvbSt1LnRvcCxwPTEtMipzLGQ9ci5fY29udGFpbmVyJiZyLl9jb250YWluZXIubm9kZT9yLl9jb250YWluZXIubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOnt3aWR0aDpyLndpZHRoLGhlaWdodDpyLmhlaWdodH07bj1NYXRoLnJvdW5kKHAqKGQud2lkdGgtaCkpLGE9TWF0aC5yb3VuZChwKihkLmhlaWdodC1mKSl9ZWxzZXt2YXIgZz1jP3dpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHQpOnt9O249cGFyc2VGbG9hdChnLndpZHRoKXx8ci53aWR0aCxhPXBhcnNlRmxvYXQoZy5oZWlnaHQpfHxyLmhlaWdodH12YXIgbT12LmxheW91dEF0dHJpYnV0ZXMud2lkdGgubWluLHk9di5sYXlvdXRBdHRyaWJ1dGVzLmhlaWdodC5taW47bjxtJiYobj1tKSxhPHkmJihhPXkpO3ZhciB4PSFlLndpZHRoJiZNYXRoLmFicyhyLndpZHRoLW4pPjEsYj0hZS5oZWlnaHQmJk1hdGguYWJzKHIuaGVpZ2h0LWEpPjE7KGJ8fHgpJiYoeCYmKHIud2lkdGg9biksYiYmKHIuaGVpZ2h0PWEpKSx0Ll9pbml0aWFsQXV0b1NpemV8fCh0Ll9pbml0aWFsQXV0b1NpemU9e3dpZHRoOm4saGVpZ2h0OmF9KSx2LnNhbml0aXplTWFyZ2lucyhyKX0sdi5zdXBwbHlMYXlvdXRNb2R1bGVEZWZhdWx0cz1mdW5jdGlvbih0LGUscixuKXt2YXIgaSxvLHMsYz1hLmNvbXBvbmVudHNSZWdpc3RyeSx1PWUuX2Jhc2VQbG90TW9kdWxlcyxoPWEuc3VicGxvdHNSZWdpc3RyeS5jYXJ0ZXNpYW47Zm9yKGkgaW4gYykocz1jW2ldKS5pbmNsdWRlQmFzZVBsb3QmJnMuaW5jbHVkZUJhc2VQbG90KHQsZSk7Zm9yKHZhciBmIGluIHUubGVuZ3RofHx1LnB1c2goaCksZS5faGFzKCJjYXJ0ZXNpYW4iKSYmKGEuZ2V0Q29tcG9uZW50TWV0aG9kKCJncmlkIiwiY29udGVudERlZmF1bHRzIikodCxlKSxoLmZpbmFsaXplU3VicGxvdHModCxlKSksZS5fc3VicGxvdHMpZS5fc3VicGxvdHNbZl0uc29ydChsLnN1YnBsb3RTb3J0KTtmb3Iobz0wO288dS5sZW5ndGg7bysrKShzPXVbb10pLnN1cHBseUxheW91dERlZmF1bHRzJiZzLnN1cHBseUxheW91dERlZmF1bHRzKHQsZSxyKTt2YXIgcD1lLl9tb2R1bGVzO2ZvcihvPTA7bzxwLmxlbmd0aDtvKyspKHM9cFtvXSkuc3VwcGx5TGF5b3V0RGVmYXVsdHMmJnMuc3VwcGx5TGF5b3V0RGVmYXVsdHModCxlLHIpO3ZhciBkPWUuX3RyYW5zZm9ybU1vZHVsZXM7Zm9yKG89MDtvPGQubGVuZ3RoO28rKykocz1kW29dKS5zdXBwbHlMYXlvdXREZWZhdWx0cyYmcy5zdXBwbHlMYXlvdXREZWZhdWx0cyh0LGUscixuKTtmb3IoaSBpbiBjKShzPWNbaV0pLnN1cHBseUxheW91dERlZmF1bHRzJiZzLnN1cHBseUxheW91dERlZmF1bHRzKHQsZSxyKX0sdi5wdXJnZT1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0fHx7fTt2b2lkIDAhPT1lLl9nbGNvbnRhaW5lciYmKGUuX2dsY29udGFpbmVyLnNlbGVjdEFsbCgiLmdsLWNhbnZhcyIpLnJlbW92ZSgpLGUuX2dsY29udGFpbmVyLnJlbW92ZSgpLGUuX2dsY2FudmFzPW51bGwpLHZvaWQgMCE9PWUuX2dlb2NvbnRhaW5lciYmZS5fZ2VvY29udGFpbmVyLnJlbW92ZSgpLGUuX21vZGVCYXImJmUuX21vZGVCYXIuZGVzdHJveSgpLHQuX3RyYW5zaXRpb25EYXRhJiYodC5fdHJhbnNpdGlvbkRhdGEuX2ludGVycnVwdENhbGxiYWNrcyYmKHQuX3RyYW5zaXRpb25EYXRhLl9pbnRlcnJ1cHRDYWxsYmFja3MubGVuZ3RoPTApLHQuX3RyYW5zaXRpb25EYXRhLl9hbmltYXRpb25SYWYmJndpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0Ll90cmFuc2l0aW9uRGF0YS5fYW5pbWF0aW9uUmFmKSksbC5jbGVhclRocm90dGxlKCksZGVsZXRlIHQuZGF0YSxkZWxldGUgdC5sYXlvdXQsZGVsZXRlIHQuX2Z1bGxEYXRhLGRlbGV0ZSB0Ll9mdWxsTGF5b3V0LGRlbGV0ZSB0LmNhbGNkYXRhLGRlbGV0ZSB0LmZyYW1ld29yayxkZWxldGUgdC5lbXB0eSxkZWxldGUgdC5maWQsZGVsZXRlIHQudW5kb3F1ZXVlLGRlbGV0ZSB0LnVuZG9udW0sZGVsZXRlIHQuYXV0b3BsYXksZGVsZXRlIHQuY2hhbmdlZCxkZWxldGUgdC5fcHJvbWlzZXMsZGVsZXRlIHQuX3JlZHJhd1RpbWVyLGRlbGV0ZSB0LmZpcnN0c2NhdHRlcixkZWxldGUgdC5faG1sdW1jb3VudCxkZWxldGUgdC5faG1waXhjb3VudCxkZWxldGUgdC5fdHJhbnNpdGlvbkRhdGEsZGVsZXRlIHQuX3RyYW5zaXRpb25pbmcsZGVsZXRlIHQuX2luaXRpYWxBdXRvU2l6ZSxkZWxldGUgdC5fdHJhbnNpdGlvbmluZ1dpdGhEdXJhdGlvbixkZWxldGUgdC5fZHJhZ2dpbmcsZGVsZXRlIHQuX2RyYWdnZWQsZGVsZXRlIHQuX2hvdmVyZGF0YSxkZWxldGUgdC5fc25hcHNob3RJblByb2dyZXNzLGRlbGV0ZSB0Ll9lZGl0aW5nLGRlbGV0ZSB0Ll9yZXBsb3RQZW5kaW5nLGRlbGV0ZSB0Ll9tb3VzZURvd25UaW1lLGRlbGV0ZSB0Ll9sZWdlbmRNb3VzZURvd25UaW1lLHQucmVtb3ZlQWxsTGlzdGVuZXJzJiZ0LnJlbW92ZUFsbExpc3RlbmVycygpfSx2LnN0eWxlPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dC5fZnVsbExheW91dC5fbW9kdWxlcyxuPVtdO2ZvcihlPTA7ZTxyLmxlbmd0aDtlKyspe3ZhciBpPXJbZV07aS5zdHlsZSYmbC5wdXNoVW5pcXVlKG4saS5zdHlsZSl9Zm9yKGU9MDtlPG4ubGVuZ3RoO2UrKyluW2VdKHQpfSx2LnNhbml0aXplTWFyZ2lucz1mdW5jdGlvbih0KXtpZih0JiZ0Lm1hcmdpbil7dmFyIGUscj10LndpZHRoLG49dC5oZWlnaHQsaT10Lm1hcmdpbixhPXItKGkubCtpLnIpLG89bi0oaS50K2kuYik7YTwwJiYoZT0oci0xKS8oaS5sK2kuciksaS5sPU1hdGguZmxvb3IoZSppLmwpLGkucj1NYXRoLmZsb29yKGUqaS5yKSksbzwwJiYoZT0obi0xKS8oaS50K2kuYiksaS50PU1hdGguZmxvb3IoZSppLnQpLGkuYj1NYXRoLmZsb29yKGUqaS5iKSl9fSx2LmNsZWFyQXV0b01hcmdpbklkcz1mdW5jdGlvbih0KXt0Ll9mdWxsTGF5b3V0Ll9wdXNobWFyZ2luSWRzPXt9fSx2LmFsbG93QXV0b01hcmdpbj1mdW5jdGlvbih0LGUpe3QuX2Z1bGxMYXlvdXQuX3B1c2htYXJnaW5JZHNbZV09MX0sdi5hdXRvTWFyZ2luPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10Ll9mdWxsTGF5b3V0O0Eobik7dmFyIGk9bi5fcHVzaG1hcmdpbixhPW4uX3B1c2htYXJnaW5JZHM7aWYoITEhPT1uLm1hcmdpbi5hdXRvZXhwYW5kKXtpZihyKXt2YXIgbz1yLnBhZDtpZih2b2lkIDA9PT1vKXt2YXIgcz1uLm1hcmdpbjtvPU1hdGgubWluKDEyLHMubCxzLnIscy50LHMuYil9ci5sK3Iucj4uNSpuLndpZHRoJiYoci5sPXIucj0wKSxyLmIrci50Pi41Km4uaGVpZ2h0JiYoci5iPXIudD0wKTt2YXIgbD12b2lkIDAhPT1yLnhsP3IueGw6ci54LGM9dm9pZCAwIT09ci54cj9yLnhyOnIueCx1PXZvaWQgMCE9PXIueXQ/ci55dDpyLnksaD12b2lkIDAhPT1yLnliP3IueWI6ci55O2lbZV09e2w6e3ZhbDpsLHNpemU6ci5sK299LHI6e3ZhbDpjLHNpemU6ci5yK299LGI6e3ZhbDpoLHNpemU6ci5iK299LHQ6e3ZhbDp1LHNpemU6ci50K299fSxhW2VdPTF9ZWxzZSBkZWxldGUgaVtlXSxkZWxldGUgYVtlXTtuLl9yZXBsb3R0aW5nfHx2LmRvQXV0b01hcmdpbih0KX19LHYuZG9BdXRvTWFyZ2luPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQ7ZS5fc2l6ZXx8KGUuX3NpemU9e30pLEEoZSk7dmFyIHI9ZS5fc2l6ZSxuPUpTT04uc3RyaW5naWZ5KHIpLG89TWF0aC5tYXgoZS5tYXJnaW4ubHx8MCwwKSxzPU1hdGgubWF4KGUubWFyZ2luLnJ8fDAsMCksbD1NYXRoLm1heChlLm1hcmdpbi50fHwwLDApLGM9TWF0aC5tYXgoZS5tYXJnaW4uYnx8MCwwKSx1PWUuX3B1c2htYXJnaW4saD1lLl9wdXNobWFyZ2luSWRzO2lmKCExIT09ZS5tYXJnaW4uYXV0b2V4cGFuZCl7Zm9yKHZhciBmIGluIHUpaFtmXXx8ZGVsZXRlIHVbZl07Zm9yKHZhciBwIGluIHUuYmFzZT17bDp7dmFsOjAsc2l6ZTpvfSxyOnt2YWw6MSxzaXplOnN9LHQ6e3ZhbDoxLHNpemU6bH0sYjp7dmFsOjAsc2l6ZTpjfX0sdSl7dmFyIGQ9dVtwXS5sfHx7fSxnPXVbcF0uYnx8e30sbT1kLnZhbCx2PWQuc2l6ZSx5PWcudmFsLHg9Zy5zaXplO2Zvcih2YXIgYiBpbiB1KXtpZihpKHYpJiZ1W2JdLnIpe3ZhciBfPXVbYl0uci52YWwsdz11W2JdLnIuc2l6ZTtpZihfPm0pe3ZhciBrPSh2Kl8rKHctZS53aWR0aCkqbSkvKF8tbSksTT0odyooMS1tKSsodi1lLndpZHRoKSooMS1fKSkvKF8tbSk7az49MCYmTT49MCYmaytNPm8rcyYmKG89ayxzPU0pfX1pZihpKHgpJiZ1W2JdLnQpe3ZhciBUPXVbYl0udC52YWwsUz11W2JdLnQuc2l6ZTtpZihUPnkpe3ZhciBFPSh4KlQrKFMtZS5oZWlnaHQpKnkpLyhULXkpLEM9KFMqKDEteSkrKHgtZS5oZWlnaHQpKigxLVQpKS8oVC15KTtFPj0wJiZDPj0wJiZFK0M+YytsJiYoYz1FLGw9Qyl9fX19fWlmKHIubD1NYXRoLnJvdW5kKG8pLHIucj1NYXRoLnJvdW5kKHMpLHIudD1NYXRoLnJvdW5kKGwpLHIuYj1NYXRoLnJvdW5kKGMpLHIucD1NYXRoLnJvdW5kKGUubWFyZ2luLnBhZCksci53PU1hdGgucm91bmQoZS53aWR0aCktci5sLXIucixyLmg9TWF0aC5yb3VuZChlLmhlaWdodCktci50LXIuYiwhZS5fcmVwbG90dGluZyYmInt9IiE9PW4mJm4hPT1KU09OLnN0cmluZ2lmeShlLl9zaXplKSlyZXR1cm4iX3JlZHJhd0Zyb21BdXRvTWFyZ2luQ291bnQiaW4gZT9lLl9yZWRyYXdGcm9tQXV0b01hcmdpbkNvdW50Kys6ZS5fcmVkcmF3RnJvbUF1dG9NYXJnaW5Db3VudD0xLGEuY2FsbCgicGxvdCIsdCl9LHYuZ3JhcGhKc29uPWZ1bmN0aW9uKHQsZSxyLG4saSl7KGkmJmUmJiF0Ll9mdWxsRGF0YXx8aSYmIWUmJiF0Ll9mdWxsTGF5b3V0KSYmdi5zdXBwbHlEZWZhdWx0cyh0KTt2YXIgYT1pP3QuX2Z1bGxEYXRhOnQuZGF0YSxvPWk/dC5fZnVsbExheW91dDp0LmxheW91dCxzPSh0Ll90cmFuc2l0aW9uRGF0YXx8e30pLl9mcmFtZXM7ZnVuY3Rpb24gYyh0KXtpZigiZnVuY3Rpb24iPT10eXBlb2YgdClyZXR1cm4gbnVsbDtpZihsLmlzUGxhaW5PYmplY3QodCkpe3ZhciBlLG4saT17fTtmb3IoZSBpbiB0KWlmKCJmdW5jdGlvbiIhPXR5cGVvZiB0W2VdJiYtMT09PVsiXyIsIlsiXS5pbmRleE9mKGUuY2hhckF0KDApKSl7aWYoImtlZXBkYXRhIj09PXIpe2lmKCJzcmMiPT09ZS5zdWJzdHIoZS5sZW5ndGgtMykpY29udGludWV9ZWxzZSBpZigia2VlcHN0cmVhbSI9PT1yKXtpZigic3RyaW5nIj09dHlwZW9mKG49dFtlKyJzcmMiXSkmJm4uaW5kZXhPZigiOiIpPjAmJiFsLmlzUGxhaW5PYmplY3QodC5zdHJlYW0pKWNvbnRpbnVlfWVsc2UgaWYoImtlZXBhbGwiIT09ciYmInN0cmluZyI9PXR5cGVvZihuPXRbZSsic3JjIl0pJiZuLmluZGV4T2YoIjoiKT4wKWNvbnRpbnVlO2lbZV09Yyh0W2VdKX1yZXR1cm4gaX1yZXR1cm4gQXJyYXkuaXNBcnJheSh0KT90Lm1hcChjKTpsLmlzSlNEYXRlKHQpP2wubXMyRGF0ZVRpbWVMb2NhbCgrdCk6dH12YXIgdT17ZGF0YTooYXx8W10pLm1hcChmdW5jdGlvbih0KXt2YXIgcj1jKHQpO3JldHVybiBlJiZkZWxldGUgci5maXQscn0pfTtyZXR1cm4gZXx8KHUubGF5b3V0PWMobykpLHQuZnJhbWV3b3JrJiZ0LmZyYW1ld29yay5pc1BvbGFyJiYodT10LmZyYW1ld29yay5nZXRDb25maWcoKSkscyYmKHUuZnJhbWVzPWMocykpLCJvYmplY3QiPT09bj91OkpTT04uc3RyaW5naWZ5KHUpfSx2Lm1vZGlmeUZyYW1lcz1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxhPXQuX3RyYW5zaXRpb25EYXRhLl9mcmFtZXMsbz10Ll90cmFuc2l0aW9uRGF0YS5fZnJhbWVIYXNoO2ZvcihyPTA7cjxlLmxlbmd0aDtyKyspc3dpdGNoKChuPWVbcl0pLnR5cGUpe2Nhc2UicmVwbGFjZSI6aT1uLnZhbHVlO3ZhciBzPShhW24uaW5kZXhdfHx7fSkubmFtZSxsPWkubmFtZTthW24uaW5kZXhdPW9bbF09aSxsIT09cyYmKGRlbGV0ZSBvW3NdLG9bbF09aSk7YnJlYWs7Y2FzZSJpbnNlcnQiOm9bKGk9bi52YWx1ZSkubmFtZV09aSxhLnNwbGljZShuLmluZGV4LDAsaSk7YnJlYWs7Y2FzZSJkZWxldGUiOmRlbGV0ZSBvWyhpPWFbbi5pbmRleF0pLm5hbWVdLGEuc3BsaWNlKG4uaW5kZXgsMSl9cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpfSx2LmNvbXB1dGVGcmFtZT1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxhLG89dC5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lSGFzaDtpZighZSl0aHJvdyBuZXcgRXJyb3IoImNvbXB1dGVGcmFtZSBtdXN0IGJlIGdpdmVuIGEgc3RyaW5nIGZyYW1lIG5hbWUiKTt2YXIgcz1vW2UudG9TdHJpbmcoKV07aWYoIXMpcmV0dXJuITE7Zm9yKHZhciBsPVtzXSxjPVtzLm5hbWVdO3MuYmFzZWZyYW1lJiYocz1vW3MuYmFzZWZyYW1lLnRvU3RyaW5nKCldKSYmLTE9PT1jLmluZGV4T2Yocy5uYW1lKTspbC5wdXNoKHMpLGMucHVzaChzLm5hbWUpO2Zvcih2YXIgdT17fTtzPWwucG9wKCk7KWlmKHMubGF5b3V0JiYodS5sYXlvdXQ9di5leHRlbmRMYXlvdXQodS5sYXlvdXQscy5sYXlvdXQpKSxzLmRhdGEpe2lmKHUuZGF0YXx8KHUuZGF0YT1bXSksIShuPXMudHJhY2VzKSlmb3Iobj1bXSxyPTA7cjxzLmRhdGEubGVuZ3RoO3IrKyluW3JdPXI7Zm9yKHUudHJhY2VzfHwodS50cmFjZXM9W10pLHI9MDtyPHMuZGF0YS5sZW5ndGg7cisrKW51bGwhPShpPW5bcl0pJiYoLTE9PT0oYT11LnRyYWNlcy5pbmRleE9mKGkpKSYmKGE9dS5kYXRhLmxlbmd0aCx1LnRyYWNlc1thXT1pKSx1LmRhdGFbYV09di5leHRlbmRUcmFjZSh1LmRhdGFbYV0scy5kYXRhW3JdKSl9cmV0dXJuIHV9LHYucmVjb21wdXRlRnJhbWVIYXNoPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll90cmFuc2l0aW9uRGF0YS5fZnJhbWVIYXNoPXt9LHI9dC5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lcyxuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBpPXJbbl07aSYmaS5uYW1lJiYoZVtpLm5hbWVdPWkpfX0sdi5leHRlbmRPYmplY3RXaXRoQ29udGFpbmVycz1mdW5jdGlvbih0LGUscil7dmFyIG4saSxhLG8scyxjLHUsaD1sLmV4dGVuZERlZXBOb0FycmF5cyh7fSxlfHx7fSksZj1sLmV4cGFuZE9iamVjdFBhdGhzKGgpLHA9e307aWYociYmci5sZW5ndGgpZm9yKGE9MDthPHIubGVuZ3RoO2ErKyl2b2lkIDA9PT0oaT0obj1sLm5lc3RlZFByb3BlcnR5KGYsclthXSkpLmdldCgpKT9sLm5lc3RlZFByb3BlcnR5KHAsclthXSkuc2V0KG51bGwpOihuLnNldChudWxsKSxsLm5lc3RlZFByb3BlcnR5KHAsclthXSkuc2V0KGkpKTtpZih0PWwuZXh0ZW5kRGVlcE5vQXJyYXlzKHR8fHt9LGYpLHImJnIubGVuZ3RoKWZvcihhPTA7YTxyLmxlbmd0aDthKyspaWYoYz1sLm5lc3RlZFByb3BlcnR5KHAsclthXSkuZ2V0KCkpe2Zvcih1PShzPWwubmVzdGVkUHJvcGVydHkodCxyW2FdKSkuZ2V0KCksQXJyYXkuaXNBcnJheSh1KXx8KHU9W10scy5zZXQodSkpLG89MDtvPGMubGVuZ3RoO28rKyl7dmFyIGQ9Y1tvXTt1W29dPW51bGw9PT1kP251bGw6di5leHRlbmRPYmplY3RXaXRoQ29udGFpbmVycyh1W29dLGQpfXMuc2V0KHUpfXJldHVybiB0fSx2LmRhdGFBcnJheUNvbnRhaW5lcnM9WyJ0cmFuc2Zvcm1zIiwiZGltZW5zaW9ucyJdLHYubGF5b3V0QXJyYXlDb250YWluZXJzPWEubGF5b3V0QXJyYXlDb250YWluZXJzLHYuZXh0ZW5kVHJhY2U9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdi5leHRlbmRPYmplY3RXaXRoQ29udGFpbmVycyh0LGUsdi5kYXRhQXJyYXlDb250YWluZXJzKX0sdi5leHRlbmRMYXlvdXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdi5leHRlbmRPYmplY3RXaXRoQ29udGFpbmVycyh0LGUsdi5sYXlvdXRBcnJheUNvbnRhaW5lcnMpfSx2LnRyYW5zaXRpb249ZnVuY3Rpb24odCxlLHIsbixpLG8pe3ZhciBzLGMsdT1BcnJheS5pc0FycmF5KGUpP2UubGVuZ3RoOjAsaD1uLnNsaWNlKDAsdSksZj1bXTt2YXIgcD0hMTtmb3Iocz0wO3M8aC5sZW5ndGg7cysrKXtjPWhbc107dC5fZnVsbERhdGFbY10uX21vZHVsZX12YXIgZD1bdi5wcmV2aW91c1Byb21pc2VzLGZ1bmN0aW9uKCl7aWYodC5fdHJhbnNpdGlvbkRhdGEpcmV0dXJuIHQuX3RyYW5zaXRpb25pbmc9ITEsZnVuY3Rpb24odCl7dmFyIGU9UHJvbWlzZS5yZXNvbHZlKCk7aWYoIXQpcmV0dXJuIGU7Zm9yKDt0Lmxlbmd0aDspZT1lLnRoZW4odC5zaGlmdCgpKTtyZXR1cm4gZX0odC5fdHJhbnNpdGlvbkRhdGEuX2ludGVycnVwdENhbGxiYWNrcyl9LGZ1bmN0aW9uKCl7dmFyIG47Zm9yKG49MDtuPGgubGVuZ3RoO24rKyl7dmFyIGk9aFtuXSxvPXQuX2Z1bGxEYXRhW2ldLl9tb2R1bGU7byYmKG8uYW5pbWF0YWJsZSYmZi5wdXNoKGkpLHQuZGF0YVtoW25dXT12LmV4dGVuZFRyYWNlKHQuZGF0YVtoW25dXSxlW25dKSl9dmFyIHM9bC5leHBhbmRPYmplY3RQYXRocyhsLmV4dGVuZERlZXBOb0FycmF5cyh7fSxyKSksYz0vXlt4eV1heGlzWzAtOV0qJC87Zm9yKHZhciB1IGluIHMpYy50ZXN0KHUpJiZkZWxldGUgc1t1XS5yYW5nZTtyZXR1cm4gdi5leHRlbmRMYXlvdXQodC5sYXlvdXQscyksZGVsZXRlIHQuY2FsY2RhdGEsdi5zdXBwbHlEZWZhdWx0cyh0KSx2LmRvQ2FsY2RhdGEodCksdi5kb1NldFBvc2l0aW9ucyh0KSxhLmdldENvbXBvbmVudE1ldGhvZCgiZXJyb3JiYXJzIiwiY2FsYyIpKHQpLFByb21pc2UucmVzb2x2ZSgpfSx2LnJlaG92ZXIsZnVuY3Rpb24oKXtyZXR1cm4gdC5lbWl0KCJwbG90bHlfdHJhbnNpdGlvbmluZyIsW10pLG5ldyBQcm9taXNlKGZ1bmN0aW9uKGUpe3QuX3RyYW5zaXRpb25pbmc9ITAsby5kdXJhdGlvbj4wJiYodC5fdHJhbnNpdGlvbmluZ1dpdGhEdXJhdGlvbj0hMCksdC5fdHJhbnNpdGlvbkRhdGEuX2ludGVycnVwdENhbGxiYWNrcy5wdXNoKGZ1bmN0aW9uKCl7cD0hMH0pLGkucmVkcmF3JiZ0Ll90cmFuc2l0aW9uRGF0YS5faW50ZXJydXB0Q2FsbGJhY2tzLnB1c2goZnVuY3Rpb24oKXtyZXR1cm4gYS5jYWxsKCJyZWRyYXciLHQpfSksdC5fdHJhbnNpdGlvbkRhdGEuX2ludGVycnVwdENhbGxiYWNrcy5wdXNoKGZ1bmN0aW9uKCl7dC5lbWl0KCJwbG90bHlfdHJhbnNpdGlvbmludGVycnVwdGVkIixbXSl9KTt2YXIgbixzLGM9MCx1PTA7ZnVuY3Rpb24gaCgpe3JldHVybiBjKyssZnVuY3Rpb24oKXt2YXIgcjt1KysscHx8dSE9PWN8fChyPWUsdC5fdHJhbnNpdGlvbkRhdGEmJihmdW5jdGlvbih0KXtpZih0KWZvcig7dC5sZW5ndGg7KXQuc2hpZnQoKX0odC5fdHJhbnNpdGlvbkRhdGEuX2ludGVycnVwdENhbGxiYWNrcyksUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbigpe2lmKGkucmVkcmF3KXJldHVybiBhLmNhbGwoInJlZHJhdyIsdCl9KS50aGVuKGZ1bmN0aW9uKCl7dC5fdHJhbnNpdGlvbmluZz0hMSx0Ll90cmFuc2l0aW9uaW5nV2l0aER1cmF0aW9uPSExLHQuZW1pdCgicGxvdGx5X3RyYW5zaXRpb25lZCIsW10pfSkudGhlbihyKSkpfX12YXIgZD10Ll9mdWxsTGF5b3V0Ll9iYXNlUGxvdE1vZHVsZXMsZz0hMTtpZihyKWZvcihzPTA7czxkLmxlbmd0aDtzKyspaWYoZFtzXS50cmFuc2l0aW9uQXhlcyl7dmFyIG09bC5leHBhbmRPYmplY3RQYXRocyhyKTtnPWRbc10udHJhbnNpdGlvbkF4ZXModCxtLG8saCl8fGd9Zm9yKGc/KChuPWwuZXh0ZW5kRmxhdCh7fSxvKSkuZHVyYXRpb249MCxmPW51bGwpOm49byxzPTA7czxkLmxlbmd0aDtzKyspZFtzXS5wbG90KHQsZixuLGgpO3NldFRpbWVvdXQoaCgpKX0pfV0sZz1sLnN5bmNPckFzeW5jKGQsdCk7cmV0dXJuIGcmJmcudGhlbnx8KGc9UHJvbWlzZS5yZXNvbHZlKCkpLGcudGhlbihmdW5jdGlvbigpe3JldHVybiB0fSl9LHYuZG9DYWxjZGF0YT1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxzLGw9aC5saXN0KHQpLGM9dC5fZnVsbERhdGEsZj10Ll9mdWxsTGF5b3V0LHA9bmV3IEFycmF5KGMubGVuZ3RoKSxkPSh0LmNhbGNkYXRhfHxbXSkuc2xpY2UoMCk7Zm9yKHQuY2FsY2RhdGE9cCx0LmZpcnN0c2NhdHRlcj0hMCxmLl9udW1Cb3hlcz0wLGYuX251bVZpb2xpbnM9MCxmLl92aW9saW5TY2FsZUdyb3VwU3RhdHM9e30sdC5faG1waXhjb3VudD0wLHQuX2htbHVtY291bnQ9MCxmLl9waWVjb2xvcm1hcD17fSxmLl9waWVjb2xvcndheT1udWxsLGYuX3BpZWRlZmF1bHRjb2xvcmNvdW50PTAsaT0wO2k8Yy5sZW5ndGg7aSsrKUFycmF5LmlzQXJyYXkoZSkmJi0xPT09ZS5pbmRleE9mKGkpJiYocFtpXT1kW2ldKTtmb3IoaT0wO2k8Yy5sZW5ndGg7aSsrKShyPWNbaV0pLl9hcnJheUF0dHJzPW8uZmluZEFycmF5QXR0cmlidXRlcyhyKTt2YXIgZz1mLl9zdWJwbG90cy5wb2xhcnx8W107Zm9yKGk9MDtpPGcubGVuZ3RoO2krKylsLnB1c2goZltnW2ldXS5yYWRpYWxheGlzLGZbZ1tpXV0uYW5ndWxhcmF4aXMpO1QobCk7dmFyIG09ITE7Zm9yKGk9MDtpPGMubGVuZ3RoO2krKylpZighMD09PShyPWNbaV0pLnZpc2libGUmJnIudHJhbnNmb3Jtcyl7aWYoKG49ci5fbW9kdWxlKSYmbi5jYWxjKXt2YXIgdj1uLmNhbGModCxyKTt2WzBdJiZ2WzBdLnQmJnZbMF0udC5fc2NlbmUmJmRlbGV0ZSB2WzBdLnQuX3NjZW5lLmRpcnR5fWZvcihzPTA7czxyLnRyYW5zZm9ybXMubGVuZ3RoO3MrKyl7dmFyIHg9ci50cmFuc2Zvcm1zW3NdOyhuPXlbeC50eXBlXSkmJm4uY2FsY1RyYW5zZm9ybSYmKHIuX2hhc0NhbGNUcmFuc2Zvcm09ITAsbT0hMCxuLmNhbGNUcmFuc2Zvcm0odCxyLHgpKX19ZnVuY3Rpb24gYihlLGkpe2lmKHI9Y1tlXSwhIShuPXIuX21vZHVsZSkuaXNDb250YWluZXI9PT1pKXt2YXIgYT1bXTtpZighMD09PXIudmlzaWJsZSl7ZGVsZXRlIHIuX2luZGV4VG9Qb2ludHM7dmFyIG89ci50cmFuc2Zvcm1zfHxbXTtmb3Iocz1vLmxlbmd0aC0xO3M+PTA7cy0tKWlmKG9bc10uZW5hYmxlZCl7ci5faW5kZXhUb1BvaW50cz1vW3NdLl9pbmRleFRvUG9pbnRzO2JyZWFrfW4mJm4uY2FsYyYmKGE9bi5jYWxjKHQscikpfUFycmF5LmlzQXJyYXkoYSkmJmFbMF18fChhPVt7eDp1LHk6dX1dKSxhWzBdLnR8fChhWzBdLnQ9e30pLGFbMF0udHJhY2U9cixwW2VdPWF9fWZvcihtJiZUKGwpLGk9MDtpPGMubGVuZ3RoO2krKyliKGksITApO2ZvcihpPTA7aTxjLmxlbmd0aDtpKyspYihpLCExKTthLmdldENvbXBvbmVudE1ldGhvZCgiZngiLCJjYWxjIikodCl9LHYuZG9TZXRQb3NpdGlvbnM9ZnVuY3Rpb24odCl7dmFyIGUscixuPXQuX2Z1bGxMYXlvdXQsaT1uLl9zdWJwbG90cy5jYXJ0ZXNpYW4sYT1uLl9tb2R1bGVzLG89W107Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKylsLnB1c2hVbmlxdWUobyxhW3JdLnNldFBvc2l0aW9ucyk7aWYoby5sZW5ndGgpZm9yKGU9MDtlPGkubGVuZ3RoO2UrKyl7dmFyIHM9bi5fcGxvdHNbaVtlXV07Zm9yKHI9MDtyPG8ubGVuZ3RoO3IrKylvW3JdKHQscyl9fSx2LnJlaG92ZXI9ZnVuY3Rpb24odCl7dC5fZnVsbExheW91dC5fcmVob3ZlciYmdC5fZnVsbExheW91dC5fcmVob3ZlcigpfSx2LmdlbmVyYWxVcGRhdGVQZXJUcmFjZU1vZHVsZT1mdW5jdGlvbih0LGUscixuKXt2YXIgaSxhPWUudHJhY2VIYXNoLG89e307Zm9yKGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIHM9cltpXSxjPXNbMF0udHJhY2U7Yy52aXNpYmxlJiYob1tjLnR5cGVdPW9bYy50eXBlXXx8W10sb1tjLnR5cGVdLnB1c2gocykpfWZvcih2YXIgdSBpbiBhKWlmKCFvW3VdKXt2YXIgaD1hW3VdWzBdO2hbMF0udHJhY2UudmlzaWJsZT0hMSxvW3VdPVtoXX1mb3IodmFyIGYgaW4gbyl7dmFyIHA9b1tmXTtwWzBdWzBdLnRyYWNlLl9tb2R1bGUucGxvdCh0LGUsbC5maWx0ZXJWaXNpYmxlKHApLG4pfWUudHJhY2VIYXNoPW99fSx7Ii4uL2NvbXBvbmVudHMvY29sb3IiOjU1OCwiLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NjYxLCIuLi9saWIiOjY4NCwiLi4vcGxvdF9hcGkvcGxvdF9zY2hlbWEiOjcyMSwiLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6NzIyLCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiOjczNSwiLi4vcmVnaXN0cnkiOjgxNywiLi9hbmltYXRpb25fYXR0cmlidXRlcyI6NzI3LCIuL2F0dHJpYnV0ZXMiOjcyOSwiLi9jb21tYW5kIjo3NTYsIi4vZm9udF9hdHRyaWJ1dGVzIjo3NTgsIi4vZnJhbWVfYXR0cmlidXRlcyI6NzU5LCIuL2xheW91dF9hdHRyaWJ1dGVzIjo3ODYsIi4vc29ydF9tb2R1bGVzIjo4MDgsZDM6MTQ3LCJmYXN0LWlzbnVtZXJpYyI6MjE0fV0sNzk2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cjoic3VicGxvdCIsbmFtZToicG9sYXIiLGF4aXNOYW1lczpbImFuZ3VsYXJheGlzIiwicmFkaWFsYXhpcyJdLGF4aXNOYW1lMmRhdGFBcnJheTp7YW5ndWxhcmF4aXM6InRoZXRhIixyYWRpYWxheGlzOiJyIn0sbGF5ZXJOYW1lczpbImRyYWdsYXllciIsInBsb3RiZyIsImJhY2twbG90IiwiYW5ndWxhci1ncmlkIiwicmFkaWFsLWdyaWQiLCJmcm9udHBsb3QiLCJhbmd1bGFyLWF4aXMiLCJyYWRpYWwtYXhpcyIsImFuZ3VsYXItbGluZSIsInJhZGlhbC1saW5lIl0scmFkaWFsRHJhZ0JveFNpemU6NTAsYW5ndWxhckRyYWdCb3hTaXplOjMwLGNvcm5lckxlbjoyNSxjb3JuZXJIYWxmV2lkdGg6MixNSU5EUkFHOjgsTUlOWk9PTToyMCxPRkZFREdFOjIwfX0se31dLDc5NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKTtyLnNldENvbnZlcnRBbmd1bGFyPWZ1bmN0aW9uKHQpe3ZhciBlLHIsaT17Y2xvY2t3aXNlOi0xLGNvdW50ZXJjbG9ja3dpc2U6MX1bdC5kaXJlY3Rpb25dLGE9bi5kZWcycmFkKHQucm90YXRpb24pO2Z1bmN0aW9uIG8oKXtyZXR1cm4gdC5wZXJpb2Q/TWF0aC5tYXgodC5wZXJpb2QsdC5fY2F0ZWdvcmllcy5sZW5ndGgpOnQuX2NhdGVnb3JpZXMubGVuZ3RofWZ1bmN0aW9uIHModCl7cmV0dXJuKHQtYSkvaX0ibGluZWFyIj09PXQudHlwZT8oZT1mdW5jdGlvbih0LGUpe3JldHVybiJkZWdyZWVzIj09PWU/bi5kZWcycmFkKHQpOnR9LHI9ZnVuY3Rpb24odCxlKXtyZXR1cm4iZGVncmVlcyI9PT1lP24ucmFkMmRlZyh0KTp0fSk6ImNhdGVnb3J5Ij09PXQudHlwZSYmKGU9ZnVuY3Rpb24odCl7dmFyIGU9bygpO3JldHVybiAyKnQqTWF0aC5QSS9lfSxyPWZ1bmN0aW9uKHQpe3JldHVybiB0Km8oKS9NYXRoLlBJLzJ9KSx0LnVuVHJhbnNmb3JtUmFkPXMsdC5fYzJyYWQ9ZSx0LmMycmFkPWZ1bmN0aW9uKHQscil7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBpKnQrYX0oZSh0LHIpKX0sdC5yYWQyYz1mdW5jdGlvbih0LGUpe3JldHVybiByKHModCksZSl9LHQuYzJkZWc9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gbi5yYWQyZGVnKHQuYzJyYWQoZSxyKSl9LHQuZGVnMmM9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5yYWQyYyhuLmRlZzJyYWQoZSkscil9fX0seyIuLi8uLi9saWIiOjY4NH1dLDc5ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9nZXRfZGF0YSIpLmdldFN1YnBsb3RDYWxjRGF0YSxpPXQoIi4uLy4uL2xpYiIpLmNvdW50ZXJSZWdleCxhPXQoIi4vcG9sYXIiKSxvPXQoIi4vY29uc3RhbnRzIikscz1vLmF0dHIsbD1vLm5hbWUsYz1pKGwpLHU9e307dVtzXT17dmFsVHlwZToic3VicGxvdGlkIixkZmx0OmwsZWRpdFR5cGU6ImNhbGMifSxlLmV4cG9ydHM9e2F0dHI6cyxuYW1lOmwsaWRSb290OmwsaWRSZWdleDpjLGF0dHJSZWdleDpjLGF0dHJpYnV0ZXM6dSxsYXlvdXRBdHRyaWJ1dGVzOnQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxzdXBwbHlMYXlvdXREZWZhdWx0czp0KCIuL2xheW91dF9kZWZhdWx0cyIpLHBsb3Q6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX2Z1bGxMYXlvdXQscj10LmNhbGNkYXRhLGk9ZS5fc3VicGxvdHNbbF0sbz0wO288aS5sZW5ndGg7bysrKXt2YXIgcz1pW29dLGM9bihyLGwscyksdT1lW3NdLl9zdWJwbG90O3V8fCh1PWEodCxzKSxlW3NdLl9zdWJwbG90PXUpLHUucGxvdChjLGUsdC5fcHJvbWlzZXMpfX0sY2xlYW46ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPW4uX3N1YnBsb3RzW2xdfHxbXSxhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBvPWlbYV0scz1uW29dLl9zdWJwbG90O2lmKCFlW29dJiZzKWZvcih2YXIgYyBpbiBzLmZyYW1ld29yay5yZW1vdmUoKSxzLmxheWVyc1sicmFkaWFsLWF4aXMtdGl0bGUiXS5yZW1vdmUoKSxzLmNsaXBQYXRocylzLmNsaXBQYXRoc1tjXS5yZW1vdmUoKX19LHRvU1ZHOnQoIi4uL2NhcnRlc2lhbiIpLnRvU1ZHfX0seyIuLi8uLi9saWIiOjY4NCwiLi4vY2FydGVzaWFuIjo3NDMsIi4uL2dldF9kYXRhIjo3NjgsIi4vY29uc3RhbnRzIjo3OTYsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjc5OSwiLi9sYXlvdXRfZGVmYXVsdHMiOjgwMCwiLi9wb2xhciI6ODA3fV0sNzk5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyIpLGk9dCgiLi4vY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzIiksYT10KCIuLi9kb21haW4iKS5hdHRyaWJ1dGVzLG89dCgiLi4vLi4vbGliIikuZXh0ZW5kRmxhdCxzPXQoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbCxsPXMoe2NvbG9yOmkuY29sb3Isc2hvd2xpbmU6byh7fSxpLnNob3dsaW5lLHtkZmx0OiEwfSksbGluZWNvbG9yOmkubGluZWNvbG9yLGxpbmV3aWR0aDppLmxpbmV3aWR0aCxzaG93Z3JpZDpvKHt9LGkuc2hvd2dyaWQse2RmbHQ6ITB9KSxncmlkY29sb3I6aS5ncmlkY29sb3IsZ3JpZHdpZHRoOmkuZ3JpZHdpZHRofSwicGxvdCIsImZyb20tcm9vdCIpLGM9cyh7dGlja21vZGU6aS50aWNrbW9kZSxudGlja3M6aS5udGlja3MsdGljazA6aS50aWNrMCxkdGljazppLmR0aWNrLHRpY2t2YWxzOmkudGlja3ZhbHMsdGlja3RleHQ6aS50aWNrdGV4dCx0aWNrczppLnRpY2tzLHRpY2tsZW46aS50aWNrbGVuLHRpY2t3aWR0aDppLnRpY2t3aWR0aCx0aWNrY29sb3I6aS50aWNrY29sb3Isc2hvd3RpY2tsYWJlbHM6aS5zaG93dGlja2xhYmVscyxzaG93dGlja3ByZWZpeDppLnNob3d0aWNrcHJlZml4LHRpY2twcmVmaXg6aS50aWNrcHJlZml4LHNob3d0aWNrc3VmZml4Omkuc2hvd3RpY2tzdWZmaXgsdGlja3N1ZmZpeDppLnRpY2tzdWZmaXgsc2hvd2V4cG9uZW50Omkuc2hvd2V4cG9uZW50LGV4cG9uZW50Zm9ybWF0OmkuZXhwb25lbnRmb3JtYXQsc2VwYXJhdGV0aG91c2FuZHM6aS5zZXBhcmF0ZXRob3VzYW5kcyx0aWNrZm9udDppLnRpY2tmb250LHRpY2thbmdsZTppLnRpY2thbmdsZSx0aWNrZm9ybWF0OmkudGlja2Zvcm1hdCx0aWNrZm9ybWF0c3RvcHM6aS50aWNrZm9ybWF0c3RvcHMsbGF5ZXI6aS5sYXllcn0sInBsb3QiLCJmcm9tLXJvb3QiKSx1PXt2aXNpYmxlOm8oe30saS52aXNpYmxlLHtkZmx0OiEwfSksdHlwZTppLnR5cGUsYXV0b3JhbmdlOmkuYXV0b3JhbmdlLHJhbmdlbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidG96ZXJvIiwibm9ubmVnYXRpdmUiLCJub3JtYWwiXSxkZmx0OiJ0b3plcm8iLGVkaXRUeXBlOiJjYWxjIn0scmFuZ2U6aS5yYW5nZSxjYXRlZ29yeW9yZGVyOmkuY2F0ZWdvcnlvcmRlcixjYXRlZ29yeWFycmF5OmkuY2F0ZWdvcnlhcnJheSxhbmdsZTp7dmFsVHlwZToiYW5nbGUiLGVkaXRUeXBlOiJwbG90In0sc2lkZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiY2xvY2t3aXNlIiwiY291bnRlcmNsb2Nrd2lzZSJdLGRmbHQ6ImNsb2Nrd2lzZSIsZWRpdFR5cGU6InBsb3QifSx0aXRsZTpvKHt9LGkudGl0bGUse2VkaXRUeXBlOiJwbG90IixkZmx0OiIifSksdGl0bGVmb250OnMoaS50aXRsZWZvbnQsInBsb3QiLCJmcm9tLXJvb3QiKSxob3ZlcmZvcm1hdDppLmhvdmVyZm9ybWF0LGVkaXRUeXBlOiJjYWxjIn07byh1LGwsYyk7dmFyIGg9e3Zpc2libGU6byh7fSxpLnZpc2libGUse2RmbHQ6ITB9KSx0eXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyItIiwibGluZWFyIiwiY2F0ZWdvcnkiXSxkZmx0OiItIixlZGl0VHlwZToiY2FsYyIsX25vVGVtcGxhdGluZzohMH0sY2F0ZWdvcnlvcmRlcjppLmNhdGVnb3J5b3JkZXIsY2F0ZWdvcnlhcnJheTppLmNhdGVnb3J5YXJyYXksdGhldGF1bml0Ont2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJyYWRpYW5zIiwiZGVncmVlcyJdLGRmbHQ6ImRlZ3JlZXMiLGVkaXRUeXBlOiJjYWxjIn0scGVyaW9kOnt2YWxUeXBlOiJudW1iZXIiLGVkaXRUeXBlOiJjYWxjIixtaW46MH0sZGlyZWN0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJjb3VudGVyY2xvY2t3aXNlIiwiY2xvY2t3aXNlIl0sZGZsdDoiY291bnRlcmNsb2Nrd2lzZSIsZWRpdFR5cGU6ImNhbGMifSxyb3RhdGlvbjp7dmFsVHlwZToiYW5nbGUiLGVkaXRUeXBlOiJjYWxjIn0saG92ZXJmb3JtYXQ6aS5ob3ZlcmZvcm1hdCxlZGl0VHlwZToiY2FsYyJ9O28oaCxsLGMpLGUuZXhwb3J0cz17ZG9tYWluOmEoe25hbWU6InBvbGFyIixlZGl0VHlwZToicGxvdCJ9KSxzZWN0b3I6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGl0ZW1zOlt7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToicGxvdCJ9LHt2YWxUeXBlOiJudW1iZXIiLGVkaXRUeXBlOiJwbG90In1dLGRmbHQ6WzAsMzYwXSxlZGl0VHlwZToicGxvdCJ9LGJnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToicGxvdCIsZGZsdDpuLmJhY2tncm91bmR9LHJhZGlhbGF4aXM6dSxhbmd1bGFyYXhpczpoLGdyaWRzaGFwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiY2lyY3VsYXIiLCJsaW5lYXIiXSxkZmx0OiJjaXJjdWxhciIsZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToiY2FsYyJ9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyI6NTU3LCIuLi8uLi9saWIiOjY4NCwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6NzE1LCIuLi9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXMiOjc0NCwiLi4vZG9tYWluIjo3NTd9XSw4MDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksYT10KCIuLi9zdWJwbG90X2RlZmF1bHRzIiksbz10KCIuLi9nZXRfZGF0YSIpLmdldFN1YnBsb3REYXRhLHM9dCgiLi4vY2FydGVzaWFuL3RpY2tfdmFsdWVfZGVmYXVsdHMiKSxsPXQoIi4uL2NhcnRlc2lhbi90aWNrX21hcmtfZGVmYXVsdHMiKSxjPXQoIi4uL2NhcnRlc2lhbi90aWNrX2xhYmVsX2RlZmF1bHRzIiksdT10KCIuLi9jYXJ0ZXNpYW4vY2F0ZWdvcnlfb3JkZXJfZGVmYXVsdHMiKSxoPXQoIi4uL2NhcnRlc2lhbi9saW5lX2dyaWRfZGVmYXVsdHMiKSxmPXQoIi4uL2NhcnRlc2lhbi9heGlzX2F1dG90eXBlIikscD10KCIuLi9jYXJ0ZXNpYW4vc2V0X2NvbnZlcnQiKSxkPXQoIi4vaGVscGVycyIpLnNldENvbnZlcnRBbmd1bGFyLGc9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLG09dCgiLi9jb25zdGFudHMiKSx2PW0uYXhpc05hbWVzO2Z1bmN0aW9uIHkodCxlLHIsYSl7dmFyIGY9cigiYmdjb2xvciIpO2EuYmdDb2xvcj1pLmNvbWJpbmUoZixhLnBhcGVyX2JnY29sb3IpO3ZhciB5LGI9cigic2VjdG9yIiksXz1vKGEuZnVsbERhdGEsbS5uYW1lLGEuaWQpLHc9YS5sYXlvdXRPdXQ7ZnVuY3Rpb24gayh0LGUpe3JldHVybiByKHkrIi4iK3QsZSl9Zm9yKHZhciBNPTA7TTx2Lmxlbmd0aDtNKyspe3k9dltNXSxuLmlzUGxhaW5PYmplY3QodFt5XSl8fCh0W3ldPXt9KTt2YXIgQT10W3ldLFQ9ZVt5XT17fTtULl9pZD1ULl9uYW1lPXk7dmFyIFM9bS5heGlzTmFtZTJkYXRhQXJyYXlbeV0sRT14KEEsVCxrLF8sUyk7dShBLFQsayx7YXhEYXRhOl8sZGF0YUF0dHI6U30pO3ZhciBDLEwsej1rKCJ2aXNpYmxlIik7c3dpdGNoKHAoVCx3KSx6JiYoTD0oQz1rKCJjb2xvciIpKT09PUEuY29sb3I/QzphLmZvbnQuY29sb3IpLFQuX209MSx5KXtjYXNlInJhZGlhbGF4aXMiOnZhciBQPWsoImF1dG9yYW5nZSIsIVQuaXNWYWxpZFJhbmdlKEEucmFuZ2UpKTtBLmF1dG9yYW5nZT1QLFAmJmsoInJhbmdlbW9kZSIpLCJyZXZlcnNlZCI9PT1QJiYoVC5fbT0tMSksaygicmFuZ2UiKSxULmNsZWFuUmFuZ2UoInJhbmdlIix7ZGZsdFJhbmdlOlswLDFdfSkseiYmKGsoInNpZGUiKSxrKCJhbmdsZSIsYlswXSksaygidGl0bGUiKSxuLmNvZXJjZUZvbnQoaywidGl0bGVmb250Iix7ZmFtaWx5OmEuZm9udC5mYW1pbHksc2l6ZTpNYXRoLnJvdW5kKDEuMiphLmZvbnQuc2l6ZSksY29sb3I6TH0pKTticmVhaztjYXNlImFuZ3VsYXJheGlzIjppZigiZGF0ZSI9PT1FKXtuLmxvZygiUG9sYXIgcGxvdHMgZG8gbm90IHN1cHBvcnQgZGF0ZSBhbmd1bGFyIGF4ZXMgeWV0LiIpO2Zvcih2YXIgST0wO0k8Xy5sZW5ndGg7SSsrKV9bSV0udmlzaWJsZT0hMTtFPUEudHlwZT1ULnR5cGU9ImxpbmVhciJ9aygibGluZWFyIj09PUU/InRoZXRhdW5pdCI6InBlcmlvZCIpO3ZhciBPPWsoImRpcmVjdGlvbiIpO2soInJvdGF0aW9uIix7Y291bnRlcmNsb2Nrd2lzZTowLGNsb2Nrd2lzZTo5MH1bT10pLGQoVCl9aWYoeilzKEEsVCxrLFQudHlwZSksYyhBLFQsayxULnR5cGUse3RpY2tTdWZmaXhEZmx0OiJkZWdyZWVzIj09PVQudGhldGF1bml0PyJceGIwIjp2b2lkIDB9KSxsKEEsVCxrLHtvdXRlclRpY2tzOiEwfSksaygic2hvd3RpY2tsYWJlbHMiKSYmKG4uY29lcmNlRm9udChrLCJ0aWNrZm9udCIse2ZhbWlseTphLmZvbnQuZmFtaWx5LHNpemU6YS5mb250LnNpemUsY29sb3I6TH0pLGsoInRpY2thbmdsZSIpLGsoInRpY2tmb3JtYXQiKSksaChBLFQsayx7ZGZsdENvbG9yOkMsYmdDb2xvcjphLmJnQ29sb3IsYmxlbmQ6NjAsc2hvd0xpbmU6ITAsc2hvd0dyaWQ6ITAsbm9aZXJvTGluZTohMCxhdHRyaWJ1dGVzOmdbeV19KSxrKCJsYXllciIpOyJjYXRlZ29yeSIhPT1FJiZrKCJob3ZlcmZvcm1hdCIpLFQuX2lucHV0PUF9ImNhdGVnb3J5Ij09PWUuYW5ndWxhcmF4aXMudHlwZSYmcigiZ3JpZHNoYXBlIil9ZnVuY3Rpb24geCh0LGUscixuLGkpe2lmKCItIj09PXIoInR5cGUiKSl7Zm9yKHZhciBhLG89MDtvPG4ubGVuZ3RoO28rKylpZihuW29dLnZpc2libGUpe2E9bltvXTticmVha31hJiYoZS50eXBlPWYoYVtpXSwiZ3JlZ29yaWFuIikpLCItIj09PWUudHlwZT9lLnR5cGU9ImxpbmVhciI6dC50eXBlPWUudHlwZX1yZXR1cm4gZS50eXBlfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7YSh0LGUscix7dHlwZTptLm5hbWUsYXR0cmlidXRlczpnLGhhbmRsZURlZmF1bHRzOnksZm9udDplLmZvbnQscGFwZXJfYmdjb2xvcjplLnBhcGVyX2JnY29sb3IsZnVsbERhdGE6cixsYXlvdXRPdXQ6ZX0pfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo1NTgsIi4uLy4uL2xpYiI6Njg0LCIuLi9jYXJ0ZXNpYW4vYXhpc19hdXRvdHlwZSI6NzMzLCIuLi9jYXJ0ZXNpYW4vY2F0ZWdvcnlfb3JkZXJfZGVmYXVsdHMiOjczNiwiLi4vY2FydGVzaWFuL2xpbmVfZ3JpZF9kZWZhdWx0cyI6NzQ2LCIuLi9jYXJ0ZXNpYW4vc2V0X2NvbnZlcnQiOjc1MCwiLi4vY2FydGVzaWFuL3RpY2tfbGFiZWxfZGVmYXVsdHMiOjc1MSwiLi4vY2FydGVzaWFuL3RpY2tfbWFya19kZWZhdWx0cyI6NzUyLCIuLi9jYXJ0ZXNpYW4vdGlja192YWx1ZV9kZWZhdWx0cyI6NzUzLCIuLi9nZXRfZGF0YSI6NzY4LCIuLi9zdWJwbG90X2RlZmF1bHRzIjo4MDksIi4vY29uc3RhbnRzIjo3OTYsIi4vaGVscGVycyI6Nzk3LCIuL2xheW91dF9hdHRyaWJ1dGVzIjo3OTl9XSw4MDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vLi4vdHJhY2VzL3NjYXR0ZXIvYXR0cmlidXRlcyIpLGk9bi5tYXJrZXI7ZS5leHBvcnRzPXtyOm4ucix0Om4udCxtYXJrZXI6e2NvbG9yOmkuY29sb3Isc2l6ZTppLnNpemUsc3ltYm9sOmkuc3ltYm9sLG9wYWNpdHk6aS5vcGFjaXR5LGVkaXRUeXBlOiJjYWxjIn19fSx7Ii4uLy4uLy4uL3RyYWNlcy9zY2F0dGVyL2F0dHJpYnV0ZXMiOjEwMTV9XSw4MDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxhPXQoIi4uLy4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbCxvPWkoe30sbi5kb21haW4se30pO2Z1bmN0aW9uIHModCxlKXtyZXR1cm4gaSh7fSxlLHtzaG93bGluZTp7dmFsVHlwZToiYm9vbGVhbiJ9LHNob3d0aWNrbGFiZWxzOnt2YWxUeXBlOiJib29sZWFuIn0sdGlja29yaWVudGF0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJob3Jpem9udGFsIiwidmVydGljYWwiXX0sdGlja2xlbjp7dmFsVHlwZToibnVtYmVyIixtaW46MH0sdGlja2NvbG9yOnt2YWxUeXBlOiJjb2xvciJ9LHRpY2tzdWZmaXg6e3ZhbFR5cGU6InN0cmluZyJ9LGVuZHBhZGRpbmc6e3ZhbFR5cGU6Im51bWJlciJ9LHZpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4ifX0pfWUuZXhwb3J0cz1hKHtyYWRpYWxheGlzOnMoMCx7cmFuZ2U6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGl0ZW1zOlt7dmFsVHlwZToibnVtYmVyIn0se3ZhbFR5cGU6Im51bWJlciJ9XX0sZG9tYWluOm8sb3JpZW50YXRpb246e3ZhbFR5cGU6Im51bWJlciJ9fSksYW5ndWxhcmF4aXM6cygwLHtyYW5nZTp7dmFsVHlwZToiaW5mb19hcnJheSIsaXRlbXM6W3t2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MH0se3ZhbFR5cGU6Im51bWJlciIsZGZsdDozNjB9XX0sZG9tYWluOm99KSxsYXlvdXQ6e2RpcmVjdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiY2xvY2t3aXNlIiwiY291bnRlcmNsb2Nrd2lzZSJdfSxvcmllbnRhdGlvbjp7dmFsVHlwZToiYW5nbGUifX19LCJwbG90IiwibmVzdGVkIil9LHsiLi4vLi4vLi4vbGliL2V4dGVuZCI6NjczLCIuLi8uLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo3MTUsIi4uLy4uL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyI6NzQ0fV0sODAzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiOyhlLmV4cG9ydHM9dCgiLi9taWNyb3BvbGFyIikpLm1hbmFnZXI9dCgiLi9taWNyb3BvbGFyX21hbmFnZXIiKX0seyIuL21pY3JvcG9sYXIiOjgwNCwiLi9taWNyb3BvbGFyX21hbmFnZXIiOjgwNX1dLDgwNDpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoImQzIiksaT10KCIuLi8uLi8uLi9saWIiKS5leHRlbmREZWVwQWxsLGE9dCgiLi4vLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCIpLk1JRF9TSElGVCxvPWUuZXhwb3J0cz17dmVyc2lvbjoiMC4yLjIifTtvLkF4aXM9ZnVuY3Rpb24oKXt2YXIgdCxlLHIscyxsPXtkYXRhOltdLGxheW91dDp7fX0sYz17fSx1PXt9LGg9bi5kaXNwYXRjaCgiaG92ZXIiKSxmPXt9O3JldHVybiBmLnJlbmRlcj1mdW5jdGlvbihjKXtyZXR1cm4gZnVuY3Rpb24oYyl7ZT1jfHxlO3ZhciBoPWwuZGF0YSxmPWwubGF5b3V0Oygic3RyaW5nIj09dHlwZW9mIGV8fGUubm9kZU5hbWUpJiYoZT1uLnNlbGVjdChlKSksZS5kYXR1bShoKS5lYWNoKGZ1bmN0aW9uKGUsbCl7dmFyIGM9ZS5zbGljZSgpO3U9e2RhdGE6by51dGlsLmNsb25lSnNvbihjKSxsYXlvdXQ6by51dGlsLmNsb25lSnNvbihmKX07dmFyIGg9MDtjLmZvckVhY2goZnVuY3Rpb24odCxlKXt0LmNvbG9yfHwodC5jb2xvcj1mLmRlZmF1bHRDb2xvclJhbmdlW2hdLGg9KGgrMSklZi5kZWZhdWx0Q29sb3JSYW5nZS5sZW5ndGgpLHQuc3Ryb2tlQ29sb3J8fCh0LnN0cm9rZUNvbG9yPSJMaW5lUGxvdCI9PT10Lmdlb21ldHJ5P3QuY29sb3I6bi5yZ2IodC5jb2xvcikuZGFya2VyKCkudG9TdHJpbmcoKSksdS5kYXRhW2VdLmNvbG9yPXQuY29sb3IsdS5kYXRhW2VdLnN0cm9rZUNvbG9yPXQuc3Ryb2tlQ29sb3IsdS5kYXRhW2VdLnN0cm9rZURhc2g9dC5zdHJva2VEYXNoLHUuZGF0YVtlXS5zdHJva2VTaXplPXQuc3Ryb2tlU2l6ZX0pO3ZhciBwPWMuZmlsdGVyKGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC52aXNpYmxlO3JldHVybiJ1bmRlZmluZWQiPT10eXBlb2Ygcnx8ITA9PT1yfSksZD0hMSxnPXAubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGQ9ZHx8InVuZGVmaW5lZCIhPXR5cGVvZiB0Lmdyb3VwSWQsdH0pO2lmKGQpe3ZhciBtPW4ubmVzdCgpLmtleShmdW5jdGlvbih0LGUpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgdC5ncm91cElkP3QuZ3JvdXBJZDoidW5zdGFja2VkIn0pLmVudHJpZXMoZyksdj1bXSx5PW0ubWFwKGZ1bmN0aW9uKHQsZSl7aWYoInVuc3RhY2tlZCI9PT10LmtleSlyZXR1cm4gdC52YWx1ZXM7dmFyIHI9dC52YWx1ZXNbMF0uci5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gMH0pO3JldHVybiB0LnZhbHVlcy5mb3JFYWNoKGZ1bmN0aW9uKHQsZSxuKXt0LnlTdGFjaz1bcl0sdi5wdXNoKHIpLHI9by51dGlsLnN1bUFycmF5cyh0LnIscil9KSx0LnZhbHVlc30pO3A9bi5tZXJnZSh5KX1wLmZvckVhY2goZnVuY3Rpb24odCxlKXt0LnQ9QXJyYXkuaXNBcnJheSh0LnRbMF0pP3QudDpbdC50XSx0LnI9QXJyYXkuaXNBcnJheSh0LnJbMF0pP3QucjpbdC5yXX0pO3ZhciB4PU1hdGgubWluKGYud2lkdGgtZi5tYXJnaW4ubGVmdC1mLm1hcmdpbi5yaWdodCxmLmhlaWdodC1mLm1hcmdpbi50b3AtZi5tYXJnaW4uYm90dG9tKS8yO3g9TWF0aC5tYXgoMTAseCk7dmFyIGIsXz1bZi5tYXJnaW4ubGVmdCt4LGYubWFyZ2luLnRvcCt4XTtiPWQ/WzAsbi5tYXgoby51dGlsLnN1bUFycmF5cyhvLnV0aWwuYXJyYXlMYXN0KHApLnJbMF0sby51dGlsLmFycmF5TGFzdCh2KSkpXTpuLmV4dGVudChvLnV0aWwuZmxhdHRlbkFycmF5KHAubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQucn0pKSksZi5yYWRpYWxBeGlzLmRvbWFpbiE9by5EQVRBRVhURU5UJiYoYlswXT0wKSxyPW4uc2NhbGUubGluZWFyKCkuZG9tYWluKGYucmFkaWFsQXhpcy5kb21haW4hPW8uREFUQUVYVEVOVCYmZi5yYWRpYWxBeGlzLmRvbWFpbj9mLnJhZGlhbEF4aXMuZG9tYWluOmIpLnJhbmdlKFswLHhdKSx1LmxheW91dC5yYWRpYWxBeGlzLmRvbWFpbj1yLmRvbWFpbigpO3ZhciB3LGs9by51dGlsLmZsYXR0ZW5BcnJheShwLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiB0LnR9KSksTT0ic3RyaW5nIj09dHlwZW9mIGtbMF07TSYmKGs9by51dGlsLmRlZHVwbGljYXRlKGspLHc9ay5zbGljZSgpLGs9bi5yYW5nZShrLmxlbmd0aCkscD1wLm1hcChmdW5jdGlvbih0LGUpe3ZhciByPXQ7cmV0dXJuIHQudD1ba10sZCYmKHIueVN0YWNrPXQueVN0YWNrKSxyfSkpO3ZhciBBPXAuZmlsdGVyKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIkxpbmVQbG90Ij09PXQuZ2VvbWV0cnl8fCJEb3RQbG90Ij09PXQuZ2VvbWV0cnl9KS5sZW5ndGg9PT1wLmxlbmd0aCxUPW51bGw9PT1mLm5lZWRzRW5kU3BhY2luZz9NfHwhQTpmLm5lZWRzRW5kU3BhY2luZyxTPWYuYW5ndWxhckF4aXMuZG9tYWluJiZmLmFuZ3VsYXJBeGlzLmRvbWFpbiE9by5EQVRBRVhURU5UJiYhTSYmZi5hbmd1bGFyQXhpcy5kb21haW5bMF0+PTA/Zi5hbmd1bGFyQXhpcy5kb21haW46bi5leHRlbnQoayksRT1NYXRoLmFicyhrWzFdLWtbMF0pO0EmJiFNJiYoRT0wKTt2YXIgQz1TLnNsaWNlKCk7VCYmTSYmKENbMV0rPUUpO3ZhciBMPWYuYW5ndWxhckF4aXMudGlja3NDb3VudHx8NDtMPjgmJihMPUwvKEwvOCkrTCU4KSxmLmFuZ3VsYXJBeGlzLnRpY2tzU3RlcCYmKEw9KENbMV0tQ1swXSkvTCk7dmFyIHo9Zi5hbmd1bGFyQXhpcy50aWNrc1N0ZXB8fChDWzFdLUNbMF0pLyhMKihmLm1pbm9yVGlja3MrMSkpO3cmJih6PU1hdGgubWF4KE1hdGgucm91bmQoeiksMSkpLENbMl18fChDWzJdPXopO3ZhciBQPW4ucmFuZ2UuYXBwbHkodGhpcyxDKTtpZihQPVAubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHBhcnNlRmxvYXQodC50b1ByZWNpc2lvbigxMikpfSkscz1uLnNjYWxlLmxpbmVhcigpLmRvbWFpbihDLnNsaWNlKDAsMikpLnJhbmdlKCJjbG9ja3dpc2UiPT09Zi5kaXJlY3Rpb24/WzAsMzYwXTpbMzYwLDBdKSx1LmxheW91dC5hbmd1bGFyQXhpcy5kb21haW49cy5kb21haW4oKSx1LmxheW91dC5hbmd1bGFyQXhpcy5lbmRQYWRkaW5nPVQ/RTowLCJ1bmRlZmluZWQiPT10eXBlb2YodD1uLnNlbGVjdCh0aGlzKS5zZWxlY3QoInN2Zy5jaGFydC1yb290IikpfHx0LmVtcHR5KCkpe3ZhciBJPShuZXcgRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcoIjxzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyBjbGFzcz0nY2hhcnQtcm9vdCc+JyArICc8ZyBjbGFzcz0nb3V0ZXItZ3JvdXAnPicgKyAnPGcgY2xhc3M9J2NoYXJ0LWdyb3VwJz4nICsgJzxjaXJjbGUgY2xhc3M9J2JhY2tncm91bmQtY2lyY2xlJz48L2NpcmNsZT4nICsgJzxnIGNsYXNzPSdnZW9tZXRyeS1ncm91cCc+PC9nPicgKyAnPGcgY2xhc3M9J3JhZGlhbCBheGlzLWdyb3VwJz4nICsgJzxjaXJjbGUgY2xhc3M9J291dHNpZGUtY2lyY2xlJz48L2NpcmNsZT4nICsgJzwvZz4nICsgJzxnIGNsYXNzPSdhbmd1bGFyIGF4aXMtZ3JvdXAnPjwvZz4nICsgJzxnIGNsYXNzPSdndWlkZXMtZ3JvdXAnPjxsaW5lPjwvbGluZT48Y2lyY2xlIHI9JzAnPjwvY2lyY2xlPjwvZz4nICsgJzwvZz4nICsgJzxnIGNsYXNzPSdsZWdlbmQtZ3JvdXAnPjwvZz4nICsgJzxnIGNsYXNzPSd0b29sdGlwcy1ncm91cCc+PC9nPicgKyAnPGcgY2xhc3M9J3RpdGxlLWdyb3VwJz48dGV4dD48L3RleHQ+PC9nPicgKyAnPC9nPicgKyAnPC9zdmc+IiwiYXBwbGljYXRpb24veG1sIiksTz10aGlzLmFwcGVuZENoaWxkKHRoaXMub3duZXJEb2N1bWVudC5pbXBvcnROb2RlKEkuZG9jdW1lbnRFbGVtZW50LCEwKSk7dD1uLnNlbGVjdChPKX10LnNlbGVjdCgiLmd1aWRlcy1ncm91cCIpLnN0eWxlKHsicG9pbnRlci1ldmVudHMiOiJub25lIn0pLHQuc2VsZWN0KCIuYW5ndWxhci5heGlzLWdyb3VwIikuc3R5bGUoeyJwb2ludGVyLWV2ZW50cyI6Im5vbmUifSksdC5zZWxlY3QoIi5yYWRpYWwuYXhpcy1ncm91cCIpLnN0eWxlKHsicG9pbnRlci1ldmVudHMiOiJub25lIn0pO3ZhciBELFI9dC5zZWxlY3QoIi5jaGFydC1ncm91cCIpLEI9e2ZpbGw6Im5vbmUiLHN0cm9rZTpmLnRpY2tDb2xvcn0sRj17ImZvbnQtc2l6ZSI6Zi5mb250LnNpemUsImZvbnQtZmFtaWx5IjpmLmZvbnQuZmFtaWx5LGZpbGw6Zi5mb250LmNvbG9yLCJ0ZXh0LXNoYWRvdyI6WyItMXB4IDBweCIsIjFweCAtMXB4IiwiLTFweCAxcHgiLCIxcHggMXB4Il0ubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIiAiK3QrIiAwICIrZi5mb250Lm91dGxpbmVDb2xvcn0pLmpvaW4oIiwiKX07aWYoZi5zaG93TGVnZW5kKXtEPXQuc2VsZWN0KCIubGVnZW5kLWdyb3VwIikuYXR0cih7dHJhbnNmb3JtOiJ0cmFuc2xhdGUoIitbeCxmLm1hcmdpbi50b3BdKyIpIn0pLnN0eWxlKHtkaXNwbGF5OiJibG9jayJ9KTt2YXIgTj1wLm1hcChmdW5jdGlvbih0LGUpe3ZhciByPW8udXRpbC5jbG9uZUpzb24odCk7cmV0dXJuIHIuc3ltYm9sPSJEb3RQbG90Ij09PXQuZ2VvbWV0cnk/dC5kb3RUeXBlfHwiY2lyY2xlIjoiTGluZVBsb3QiIT10Lmdlb21ldHJ5PyJzcXVhcmUiOiJsaW5lIixyLnZpc2libGVJbkxlZ2VuZD0idW5kZWZpbmVkIj09dHlwZW9mIHQudmlzaWJsZUluTGVnZW5kfHx0LnZpc2libGVJbkxlZ2VuZCxyLmNvbG9yPSJMaW5lUGxvdCI9PT10Lmdlb21ldHJ5P3Quc3Ryb2tlQ29sb3I6dC5jb2xvcixyfSk7by5MZWdlbmQoKS5jb25maWcoe2RhdGE6cC5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5uYW1lfHwiRWxlbWVudCIrZX0pLGxlZ2VuZENvbmZpZzppKHt9LG8uTGVnZW5kLmRlZmF1bHRDb25maWcoKS5sZWdlbmRDb25maWcse2NvbnRhaW5lcjpELGVsZW1lbnRzOk4scmV2ZXJzZU9yZGVyOmYubGVnZW5kLnJldmVyc2VPcmRlcn0pfSkoKTt2YXIgaj1ELm5vZGUoKS5nZXRCQm94KCk7eD1NYXRoLm1pbihmLndpZHRoLWoud2lkdGgtZi5tYXJnaW4ubGVmdC1mLm1hcmdpbi5yaWdodCxmLmhlaWdodC1mLm1hcmdpbi50b3AtZi5tYXJnaW4uYm90dG9tKS8yLHg9TWF0aC5tYXgoMTAseCksXz1bZi5tYXJnaW4ubGVmdCt4LGYubWFyZ2luLnRvcCt4XSxyLnJhbmdlKFswLHhdKSx1LmxheW91dC5yYWRpYWxBeGlzLmRvbWFpbj1yLmRvbWFpbigpLEQuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrW19bMF0reCxfWzFdLXhdKyIpIil9ZWxzZSBEPXQuc2VsZWN0KCIubGVnZW5kLWdyb3VwIikuc3R5bGUoe2Rpc3BsYXk6Im5vbmUifSk7dC5hdHRyKHt3aWR0aDpmLndpZHRoLGhlaWdodDpmLmhlaWdodH0pLnN0eWxlKHtvcGFjaXR5OmYub3BhY2l0eX0pLFIuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrXysiKSIpLnN0eWxlKHtjdXJzb3I6ImNyb3NzaGFpciJ9KTt2YXIgVj1bKGYud2lkdGgtKGYubWFyZ2luLmxlZnQrZi5tYXJnaW4ucmlnaHQrMip4KyhqP2oud2lkdGg6MCkpKS8yLChmLmhlaWdodC0oZi5tYXJnaW4udG9wK2YubWFyZ2luLmJvdHRvbSsyKngpKS8yXTtpZihWWzBdPU1hdGgubWF4KDAsVlswXSksVlsxXT1NYXRoLm1heCgwLFZbMV0pLHQuc2VsZWN0KCIub3V0ZXItZ3JvdXAiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitWKyIpIiksZi50aXRsZSl7dmFyIFU9dC5zZWxlY3QoImcudGl0bGUtZ3JvdXAgdGV4dCIpLnN0eWxlKEYpLnRleHQoZi50aXRsZSkscT1VLm5vZGUoKS5nZXRCQm94KCk7VS5hdHRyKHt4Ol9bMF0tcS53aWR0aC8yLHk6X1sxXS14LTIwfSl9dmFyIEg9dC5zZWxlY3QoIi5yYWRpYWwuYXhpcy1ncm91cCIpO2lmKGYucmFkaWFsQXhpcy5ncmlkTGluZXNWaXNpYmxlKXt2YXIgRz1ILnNlbGVjdEFsbCgiY2lyY2xlLmdyaWQtY2lyY2xlIikuZGF0YShyLnRpY2tzKDUpKTtHLmVudGVyKCkuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKHtjbGFzczoiZ3JpZC1jaXJjbGUifSkuc3R5bGUoQiksRy5hdHRyKCJyIixyKSxHLmV4aXQoKS5yZW1vdmUoKX1ILnNlbGVjdCgiY2lyY2xlLm91dHNpZGUtY2lyY2xlIikuYXR0cih7cjp4fSkuc3R5bGUoQik7dmFyIFc9dC5zZWxlY3QoImNpcmNsZS5iYWNrZ3JvdW5kLWNpcmNsZSIpLmF0dHIoe3I6eH0pLnN0eWxlKHtmaWxsOmYuYmFja2dyb3VuZENvbG9yLHN0cm9rZTpmLnN0cm9rZX0pO2Z1bmN0aW9uIFkodCxlKXtyZXR1cm4gcyh0KSUzNjArZi5vcmllbnRhdGlvbn1pZihmLnJhZGlhbEF4aXMudmlzaWJsZSl7dmFyIFg9bi5zdmcuYXhpcygpLnNjYWxlKHIpLnRpY2tzKDUpLnRpY2tTaXplKDUpO0guY2FsbChYKS5hdHRyKHt0cmFuc2Zvcm06InJvdGF0ZSgiK2YucmFkaWFsQXhpcy5vcmllbnRhdGlvbisiKSJ9KSxILnNlbGVjdEFsbCgiLmRvbWFpbiIpLnN0eWxlKEIpLEguc2VsZWN0QWxsKCJnPnRleHQiKS50ZXh0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMudGV4dENvbnRlbnQrZi5yYWRpYWxBeGlzLnRpY2tzU3VmZml4fSkuc3R5bGUoRikuc3R5bGUoeyJ0ZXh0LWFuY2hvciI6InN0YXJ0In0pLmF0dHIoe3g6MCx5OjAsZHg6MCxkeTowLHRyYW5zZm9ybTpmdW5jdGlvbih0LGUpe3JldHVybiJob3Jpem9udGFsIj09PWYucmFkaWFsQXhpcy50aWNrT3JpZW50YXRpb24/InJvdGF0ZSgiKy1mLnJhZGlhbEF4aXMub3JpZW50YXRpb24rIikgdHJhbnNsYXRlKCIrWzAsRlsiZm9udC1zaXplIl1dKyIpIjoidHJhbnNsYXRlKCIrWzAsRlsiZm9udC1zaXplIl1dKyIpIn19KSxILnNlbGVjdEFsbCgiZz5saW5lIikuc3R5bGUoe3N0cm9rZToiYmxhY2sifSl9dmFyIFo9dC5zZWxlY3QoIi5hbmd1bGFyLmF4aXMtZ3JvdXAiKS5zZWxlY3RBbGwoImcuYW5ndWxhci10aWNrIikuZGF0YShQKSwkPVouZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJhbmd1bGFyLXRpY2siLCEwKTtaLmF0dHIoe3RyYW5zZm9ybTpmdW5jdGlvbih0LGUpe3JldHVybiJyb3RhdGUoIitZKHQpKyIpIn19KS5zdHlsZSh7ZGlzcGxheTpmLmFuZ3VsYXJBeGlzLnZpc2libGU/ImJsb2NrIjoibm9uZSJ9KSxaLmV4aXQoKS5yZW1vdmUoKSwkLmFwcGVuZCgibGluZSIpLmNsYXNzZWQoImdyaWQtbGluZSIsITApLmNsYXNzZWQoIm1ham9yIixmdW5jdGlvbih0LGUpe3JldHVybiBlJShmLm1pbm9yVGlja3MrMSk9PTB9KS5jbGFzc2VkKCJtaW5vciIsZnVuY3Rpb24odCxlKXtyZXR1cm4hKGUlKGYubWlub3JUaWNrcysxKT09MCl9KS5zdHlsZShCKSwkLnNlbGVjdEFsbCgiLm1pbm9yIikuc3R5bGUoe3N0cm9rZTpmLm1pbm9yVGlja0NvbG9yfSksWi5zZWxlY3QoImxpbmUuZ3JpZC1saW5lIikuYXR0cih7eDE6Zi50aWNrTGVuZ3RoP3gtZi50aWNrTGVuZ3RoOjAseDI6eH0pLnN0eWxlKHtkaXNwbGF5OmYuYW5ndWxhckF4aXMuZ3JpZExpbmVzVmlzaWJsZT8iYmxvY2siOiJub25lIn0pLCQuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZCgiYXhpcy10ZXh0IiwhMCkuc3R5bGUoRik7dmFyIEo9Wi5zZWxlY3QoInRleHQuYXhpcy10ZXh0IikuYXR0cih7eDp4K2YubGFiZWxPZmZzZXQsZHk6YSsiZW0iLHRyYW5zZm9ybTpmdW5jdGlvbih0LGUpe3ZhciByPVkodCksbj14K2YubGFiZWxPZmZzZXQsaT1mLmFuZ3VsYXJBeGlzLnRpY2tPcmllbnRhdGlvbjtyZXR1cm4iaG9yaXpvbnRhbCI9PWk/InJvdGF0ZSgiKy1yKyIgIituKyIgMCkiOiJyYWRpYWwiPT1pP3I8MjcwJiZyPjkwPyJyb3RhdGUoMTgwICIrbisiIDApIjpudWxsOiJyb3RhdGUoIisocjw9MTgwJiZyPjA/LTkwOjkwKSsiICIrbisiIDApIn19KS5zdHlsZSh7InRleHQtYW5jaG9yIjoibWlkZGxlIixkaXNwbGF5OmYuYW5ndWxhckF4aXMubGFiZWxzVmlzaWJsZT8iYmxvY2siOiJub25lIn0pLnRleHQoZnVuY3Rpb24odCxlKXtyZXR1cm4gZSUoZi5taW5vclRpY2tzKzEpIT0wPyIiOnc/d1t0XStmLmFuZ3VsYXJBeGlzLnRpY2tzU3VmZml4OnQrZi5hbmd1bGFyQXhpcy50aWNrc1N1ZmZpeH0pLnN0eWxlKEYpO2YuYW5ndWxhckF4aXMucmV3cml0ZVRpY2tzJiZKLnRleHQoZnVuY3Rpb24odCxlKXtyZXR1cm4gZSUoZi5taW5vclRpY2tzKzEpIT0wPyIiOmYuYW5ndWxhckF4aXMucmV3cml0ZVRpY2tzKHRoaXMudGV4dENvbnRlbnQsZSl9KTt2YXIgSz1uLm1heChSLnNlbGVjdEFsbCgiLmFuZ3VsYXItdGljayB0ZXh0IilbMF0ubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuZ2V0Q1RNKCkuZSt0LmdldEJCb3goKS53aWR0aH0pKTtELmF0dHIoe3RyYW5zZm9ybToidHJhbnNsYXRlKCIrW3grSyxmLm1hcmdpbi50b3BdKyIpIn0pO3ZhciBRPXQuc2VsZWN0KCJnLmdlb21ldHJ5LWdyb3VwIikuc2VsZWN0QWxsKCJnIikuc2l6ZSgpPjAsdHQ9dC5zZWxlY3QoImcuZ2VvbWV0cnktZ3JvdXAiKS5zZWxlY3RBbGwoImcuZ2VvbWV0cnkiKS5kYXRhKHApO2lmKHR0LmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cih7Y2xhc3M6ZnVuY3Rpb24odCxlKXtyZXR1cm4iZ2VvbWV0cnkgZ2VvbWV0cnkiK2V9fSksdHQuZXhpdCgpLnJlbW92ZSgpLHBbMF18fFEpe3ZhciBldD1bXTtwLmZvckVhY2goZnVuY3Rpb24odCxlKXt2YXIgbj17fTtuLnJhZGlhbFNjYWxlPXIsbi5hbmd1bGFyU2NhbGU9cyxuLmNvbnRhaW5lcj10dC5maWx0ZXIoZnVuY3Rpb24odCxyKXtyZXR1cm4gcj09ZX0pLG4uZ2VvbWV0cnk9dC5nZW9tZXRyeSxuLm9yaWVudGF0aW9uPWYub3JpZW50YXRpb24sbi5kaXJlY3Rpb249Zi5kaXJlY3Rpb24sbi5pbmRleD1lLGV0LnB1c2goe2RhdGE6dCxnZW9tZXRyeUNvbmZpZzpufSl9KTt2YXIgcnQ9bi5uZXN0KCkua2V5KGZ1bmN0aW9uKHQsZSl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiB0LmRhdGEuZ3JvdXBJZHx8InVuc3RhY2tlZCJ9KS5lbnRyaWVzKGV0KSxudD1bXTtydC5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7InVuc3RhY2tlZCI9PT10LmtleT9udD1udC5jb25jYXQodC52YWx1ZXMubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuW3RdfSkpOm50LnB1c2godC52YWx1ZXMpfSksbnQuZm9yRWFjaChmdW5jdGlvbih0LGUpe3ZhciByO3I9QXJyYXkuaXNBcnJheSh0KT90WzBdLmdlb21ldHJ5Q29uZmlnLmdlb21ldHJ5OnQuZ2VvbWV0cnlDb25maWcuZ2VvbWV0cnk7dmFyIG49dC5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gaShvW3JdLmRlZmF1bHRDb25maWcoKSx0KX0pO29bcl0oKS5jb25maWcobikoKX0pfXZhciBpdCxhdCxvdD10LnNlbGVjdCgiLmd1aWRlcy1ncm91cCIpLHN0PXQuc2VsZWN0KCIudG9vbHRpcHMtZ3JvdXAiKSxsdD1vLnRvb2x0aXBQYW5lbCgpLmNvbmZpZyh7Y29udGFpbmVyOnN0LGZvbnRTaXplOjh9KSgpLGN0PW8udG9vbHRpcFBhbmVsKCkuY29uZmlnKHtjb250YWluZXI6c3QsZm9udFNpemU6OH0pKCksdXQ9by50b29sdGlwUGFuZWwoKS5jb25maWcoe2NvbnRhaW5lcjpzdCxoYXNUaWNrOiEwfSkoKTtpZighTSl7dmFyIGh0PW90LnNlbGVjdCgibGluZSIpLmF0dHIoe3gxOjAseTE6MCx5MjowfSkuc3R5bGUoe3N0cm9rZToiZ3JleSIsInBvaW50ZXItZXZlbnRzIjoibm9uZSJ9KTtSLm9uKCJtb3VzZW1vdmUuYW5ndWxhci1ndWlkZSIsZnVuY3Rpb24odCxlKXt2YXIgcj1vLnV0aWwuZ2V0TW91c2VQb3MoVykuYW5nbGU7aHQuYXR0cih7eDI6LXgsdHJhbnNmb3JtOiJyb3RhdGUoIityKyIpIn0pLnN0eWxlKHtvcGFjaXR5Oi41fSk7dmFyIG49KHIrMTgwKzM2MC1mLm9yaWVudGF0aW9uKSUzNjA7aXQ9cy5pbnZlcnQobik7dmFyIGk9by51dGlsLmNvbnZlcnRUb0NhcnRlc2lhbih4KzEyLHIrMTgwKTtsdC50ZXh0KG8udXRpbC5yb3VuZChpdCkpLm1vdmUoW2lbMF0rX1swXSxpWzFdK19bMV1dKX0pLm9uKCJtb3VzZW91dC5hbmd1bGFyLWd1aWRlIixmdW5jdGlvbih0LGUpe290LnNlbGVjdCgibGluZSIpLnN0eWxlKHtvcGFjaXR5OjB9KX0pfXZhciBmdD1vdC5zZWxlY3QoImNpcmNsZSIpLnN0eWxlKHtzdHJva2U6ImdyZXkiLGZpbGw6Im5vbmUifSk7Ui5vbigibW91c2Vtb3ZlLnJhZGlhbC1ndWlkZSIsZnVuY3Rpb24odCxlKXt2YXIgbj1vLnV0aWwuZ2V0TW91c2VQb3MoVykucmFkaXVzO2Z0LmF0dHIoe3I6bn0pLnN0eWxlKHtvcGFjaXR5Oi41fSksYXQ9ci5pbnZlcnQoby51dGlsLmdldE1vdXNlUG9zKFcpLnJhZGl1cyk7dmFyIGk9by51dGlsLmNvbnZlcnRUb0NhcnRlc2lhbihuLGYucmFkaWFsQXhpcy5vcmllbnRhdGlvbik7Y3QudGV4dChvLnV0aWwucm91bmQoYXQpKS5tb3ZlKFtpWzBdK19bMF0saVsxXStfWzFdXSl9KS5vbigibW91c2VvdXQucmFkaWFsLWd1aWRlIixmdW5jdGlvbih0LGUpe2Z0LnN0eWxlKHtvcGFjaXR5OjB9KSx1dC5oaWRlKCksbHQuaGlkZSgpLGN0LmhpZGUoKX0pLHQuc2VsZWN0QWxsKCIuZ2VvbWV0cnktZ3JvdXAgLm1hcmsiKS5vbigibW91c2VvdmVyLnRvb2x0aXAiLGZ1bmN0aW9uKGUscil7dmFyIGk9bi5zZWxlY3QodGhpcyksYT10aGlzLnN0eWxlLmZpbGwscz0iYmxhY2siLGw9dGhpcy5zdHlsZS5vcGFjaXR5fHwxO2lmKGkuYXR0cih7ImRhdGEtb3BhY2l0eSI6bH0pLGEmJiJub25lIiE9PWEpe2kuYXR0cih7ImRhdGEtZmlsbCI6YX0pLHM9bi5oc2woYSkuZGFya2VyKCkudG9TdHJpbmcoKSxpLnN0eWxlKHtmaWxsOnMsb3BhY2l0eToxfSk7dmFyIGM9e3Q6by51dGlsLnJvdW5kKGVbMF0pLHI6by51dGlsLnJvdW5kKGVbMV0pfTtNJiYoYy50PXdbZVswXV0pO3ZhciB1PSJ0OiAiK2MudCsiLCByOiAiK2MucixoPXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksZj10Lm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxwPVtoLmxlZnQraC53aWR0aC8yLVZbMF0tZi5sZWZ0LGgudG9wK2guaGVpZ2h0LzItVlsxXS1mLnRvcF07dXQuY29uZmlnKHtjb2xvcjpzfSkudGV4dCh1KSx1dC5tb3ZlKHApfWVsc2UgYT10aGlzLnN0eWxlLnN0cm9rZXx8ImJsYWNrIixpLmF0dHIoeyJkYXRhLXN0cm9rZSI6YX0pLHM9bi5oc2woYSkuZGFya2VyKCkudG9TdHJpbmcoKSxpLnN0eWxlKHtzdHJva2U6cyxvcGFjaXR5OjF9KX0pLm9uKCJtb3VzZW1vdmUudG9vbHRpcCIsZnVuY3Rpb24odCxlKXtpZigwIT1uLmV2ZW50LndoaWNoKXJldHVybiExO24uc2VsZWN0KHRoaXMpLmF0dHIoImRhdGEtZmlsbCIpJiZ1dC5zaG93KCl9KS5vbigibW91c2VvdXQudG9vbHRpcCIsZnVuY3Rpb24odCxlKXt1dC5oaWRlKCk7dmFyIHI9bi5zZWxlY3QodGhpcyksaT1yLmF0dHIoImRhdGEtZmlsbCIpO2k/ci5zdHlsZSh7ZmlsbDppLG9wYWNpdHk6ci5hdHRyKCJkYXRhLW9wYWNpdHkiKX0pOnIuc3R5bGUoe3N0cm9rZTpyLmF0dHIoImRhdGEtc3Ryb2tlIiksb3BhY2l0eTpyLmF0dHIoImRhdGEtb3BhY2l0eSIpfSl9KX0pfShjKSx0aGlzfSxmLmNvbmZpZz1mdW5jdGlvbih0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gbDt2YXIgZT1vLnV0aWwuY2xvbmVKc29uKHQpO3JldHVybiBlLmRhdGEuZm9yRWFjaChmdW5jdGlvbih0LGUpe2wuZGF0YVtlXXx8KGwuZGF0YVtlXT17fSksaShsLmRhdGFbZV0sby5BeGlzLmRlZmF1bHRDb25maWcoKS5kYXRhWzBdKSxpKGwuZGF0YVtlXSx0KX0pLGkobC5sYXlvdXQsby5BeGlzLmRlZmF1bHRDb25maWcoKS5sYXlvdXQpLGkobC5sYXlvdXQsZS5sYXlvdXQpLHRoaXN9LGYuZ2V0TGl2ZUNvbmZpZz1mdW5jdGlvbigpe3JldHVybiB1fSxmLmdldGlucHV0Q29uZmlnPWZ1bmN0aW9uKCl7cmV0dXJuIGN9LGYucmFkaWFsU2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIHJ9LGYuYW5ndWxhclNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBzfSxmLnN2Zz1mdW5jdGlvbigpe3JldHVybiB0fSxuLnJlYmluZChmLGgsIm9uIiksZn0sby5BeGlzLmRlZmF1bHRDb25maWc9ZnVuY3Rpb24odCxlKXtyZXR1cm57ZGF0YTpbe3Q6WzEsMiwzLDRdLHI6WzEwLDExLDEyLDEzXSxuYW1lOiJMaW5lMSIsZ2VvbWV0cnk6IkxpbmVQbG90Iixjb2xvcjpudWxsLHN0cm9rZURhc2g6InNvbGlkIixzdHJva2VDb2xvcjpudWxsLHN0cm9rZVNpemU6IjEiLHZpc2libGVJbkxlZ2VuZDohMCxvcGFjaXR5OjF9XSxsYXlvdXQ6e2RlZmF1bHRDb2xvclJhbmdlOm4uc2NhbGUuY2F0ZWdvcnkxMCgpLnJhbmdlKCksdGl0bGU6bnVsbCxoZWlnaHQ6NDUwLHdpZHRoOjUwMCxtYXJnaW46e3RvcDo0MCxyaWdodDo0MCxib3R0b206NDAsbGVmdDo0MH0sZm9udDp7c2l6ZToxMixjb2xvcjoiZ3JheSIsb3V0bGluZUNvbG9yOiJ3aGl0ZSIsZmFtaWx5OiJUYWhvbWEsIHNhbnMtc2VyaWYifSxkaXJlY3Rpb246ImNsb2Nrd2lzZSIsb3JpZW50YXRpb246MCxsYWJlbE9mZnNldDoxMCxyYWRpYWxBeGlzOntkb21haW46bnVsbCxvcmllbnRhdGlvbjotNDUsdGlja3NTdWZmaXg6IiIsdmlzaWJsZTohMCxncmlkTGluZXNWaXNpYmxlOiEwLHRpY2tPcmllbnRhdGlvbjoiaG9yaXpvbnRhbCIscmV3cml0ZVRpY2tzOm51bGx9LGFuZ3VsYXJBeGlzOntkb21haW46WzAsMzYwXSx0aWNrc1N1ZmZpeDoiIix2aXNpYmxlOiEwLGdyaWRMaW5lc1Zpc2libGU6ITAsbGFiZWxzVmlzaWJsZTohMCx0aWNrT3JpZW50YXRpb246Imhvcml6b250YWwiLHJld3JpdGVUaWNrczpudWxsLHRpY2tzQ291bnQ6bnVsbCx0aWNrc1N0ZXA6bnVsbH0sbWlub3JUaWNrczowLHRpY2tMZW5ndGg6bnVsbCx0aWNrQ29sb3I6InNpbHZlciIsbWlub3JUaWNrQ29sb3I6IiNlZWUiLGJhY2tncm91bmRDb2xvcjoibm9uZSIsbmVlZHNFbmRTcGFjaW5nOm51bGwsc2hvd0xlZ2VuZDohMCxsZWdlbmQ6e3JldmVyc2VPcmRlcjohMX0sb3BhY2l0eToxfX19LG8udXRpbD17fSxvLkRBVEFFWFRFTlQ9ImRhdGFFeHRlbnQiLG8uQVJFQT0iQXJlYUNoYXJ0IixvLkxJTkU9IkxpbmVQbG90IixvLkRPVD0iRG90UGxvdCIsby5CQVI9IkJhckNoYXJ0IixvLnV0aWwuX292ZXJyaWRlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByIGluIHQpciBpbiBlJiYoZVtyXT10W3JdKX0sby51dGlsLl9leHRlbmQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIgaW4gdCllW3JdPXRbcl19LG8udXRpbC5fcm5kU25kPWZ1bmN0aW9uKCl7cmV0dXJuIDIqTWF0aC5yYW5kb20oKS0xKygyKk1hdGgucmFuZG9tKCktMSkrKDIqTWF0aC5yYW5kb20oKS0xKX0sby51dGlsLmRhdGFGcm9tRXF1YXRpb24yPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZXx8NjtyZXR1cm4gbi5yYW5nZSgwLDM2MCtyLHIpLm1hcChmdW5jdGlvbihlLHIpe3ZhciBuPWUqTWF0aC5QSS8xODA7cmV0dXJuW2UsdChuKV19KX0sby51dGlsLmRhdGFGcm9tRXF1YXRpb249ZnVuY3Rpb24odCxlLHIpe3ZhciBpPWV8fDYsYT1bXSxvPVtdO24ucmFuZ2UoMCwzNjAraSxpKS5mb3JFYWNoKGZ1bmN0aW9uKGUscil7dmFyIG49ZSpNYXRoLlBJLzE4MCxpPXQobik7YS5wdXNoKGUpLG8ucHVzaChpKX0pO3ZhciBzPXt0OmEscjpvfTtyZXR1cm4gciYmKHMubmFtZT1yKSxzfSxvLnV0aWwuZW5zdXJlQXJyYXk9ZnVuY3Rpb24odCxlKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIHQpcmV0dXJuIG51bGw7dmFyIHI9W10uY29uY2F0KHQpO3JldHVybiBuLnJhbmdlKGUpLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiByW2VdfHxyWzBdfSl9LG8udXRpbC5maWxsQXJyYXlzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKGUsbil7dFtlXT1vLnV0aWwuZW5zdXJlQXJyYXkodFtlXSxyKX0pLHR9LG8udXRpbC5jbG9uZUpzb249ZnVuY3Rpb24odCl7cmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodCkpfSxvLnV0aWwudmFsaWRhdGVLZXlzPWZ1bmN0aW9uKHQsZSl7InN0cmluZyI9PXR5cGVvZiBlJiYoZT1lLnNwbGl0KCIuIikpO3ZhciByPWUuc2hpZnQoKTtyZXR1cm4gdFtyXSYmKCFlLmxlbmd0aHx8b2JqSGFzS2V5cyh0W3JdLGUpKX0sby51dGlsLnN1bUFycmF5cz1mdW5jdGlvbih0LGUpe3JldHVybiBuLnppcCh0LGUpLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiBuLnN1bSh0KX0pfSxvLnV0aWwuYXJyYXlMYXN0PWZ1bmN0aW9uKHQpe3JldHVybiB0W3QubGVuZ3RoLTFdfSxvLnV0aWwuYXJyYXlFcXVhbD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1NYXRoLm1heCh0Lmxlbmd0aCxlLmxlbmd0aCwxKTtyLS0gPj0wJiZ0W3JdPT09ZVtyXTspO3JldHVybi0yPT09cn0sby51dGlsLmZsYXR0ZW5BcnJheT1mdW5jdGlvbih0KXtmb3IodmFyIGU9W107IW8udXRpbC5hcnJheUVxdWFsKGUsdCk7KWU9dCx0PVtdLmNvbmNhdC5hcHBseShbXSx0KTtyZXR1cm4gdH0sby51dGlsLmRlZHVwbGljYXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0LmZpbHRlcihmdW5jdGlvbih0LGUscil7cmV0dXJuIHIuaW5kZXhPZih0KT09ZX0pfSxvLnV0aWwuY29udmVydFRvQ2FydGVzaWFuPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZSpNYXRoLlBJLzE4MDtyZXR1cm5bdCpNYXRoLmNvcyhyKSx0Kk1hdGguc2luKHIpXX0sby51dGlsLnJvdW5kPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZXx8MixuPU1hdGgucG93KDEwLHIpO3JldHVybiBNYXRoLnJvdW5kKHQqbikvbn0sby51dGlsLmdldE1vdXNlUG9zPWZ1bmN0aW9uKHQpe3ZhciBlPW4ubW91c2UodC5ub2RlKCkpLHI9ZVswXSxpPWVbMV0sYT17fTtyZXR1cm4gYS54PXIsYS55PWksYS5wb3M9ZSxhLmFuZ2xlPTE4MCooTWF0aC5hdGFuMihpLHIpK01hdGguUEkpL01hdGguUEksYS5yYWRpdXM9TWF0aC5zcXJ0KHIqcitpKmkpLGF9LG8udXRpbC5kdXBsaWNhdGVzQ291bnQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9e30sbj17fSxpPTAsYT10Lmxlbmd0aDtpPGE7aSsrKShlPXRbaV0paW4gcj8ocltlXSsrLG5bZV09cltlXSk6cltlXT0xO3JldHVybiBufSxvLnV0aWwuZHVwbGljYXRlcz1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmtleXMoby51dGlsLmR1cGxpY2F0ZXNDb3VudCh0KSl9LG8udXRpbC50cmFuc2xhdG9yPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKG4pe3ZhciBpPXIuc2xpY2UoKTtyPWUsZT1pfXZhciBhPWUucmVkdWNlKGZ1bmN0aW9uKHQsZSl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiB0KXJldHVybiB0W2VdfSx0KTsidW5kZWZpbmVkIiE9dHlwZW9mIGEmJihlLnJlZHVjZShmdW5jdGlvbih0LHIsbil7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiB0KXJldHVybiBuPT09ZS5sZW5ndGgtMSYmZGVsZXRlIHRbcl0sdFtyXX0sdCksci5yZWR1Y2UoZnVuY3Rpb24odCxlLG4pe3JldHVybiJ1bmRlZmluZWQiPT10eXBlb2YgdFtlXSYmKHRbZV09e30pLG49PT1yLmxlbmd0aC0xJiYodFtlXT1hKSx0W2VdfSx0KSl9LG8uUG9seUNoYXJ0PWZ1bmN0aW9uKCl7dmFyIHQ9W28uUG9seUNoYXJ0LmRlZmF1bHRDb25maWcoKV0sZT1uLmRpc3BhdGNoKCJob3ZlciIpLHI9e3NvbGlkOiJub25lIixkYXNoOls1LDJdLGRvdDpbMiw1XX07ZnVuY3Rpb24gYSgpe3ZhciBlPXRbMF0uZ2VvbWV0cnlDb25maWcsaT1lLmNvbnRhaW5lcjsic3RyaW5nIj09dHlwZW9mIGkmJihpPW4uc2VsZWN0KGkpKSxpLmRhdHVtKHQpLmVhY2goZnVuY3Rpb24odCxpKXt2YXIgYT0hIXRbMF0uZGF0YS55U3RhY2ssbz10Lm1hcChmdW5jdGlvbih0LGUpe3JldHVybiBhP24uemlwKHQuZGF0YS50WzBdLHQuZGF0YS5yWzBdLHQuZGF0YS55U3RhY2tbMF0pOm4uemlwKHQuZGF0YS50WzBdLHQuZGF0YS5yWzBdKX0pLHM9ZS5hbmd1bGFyU2NhbGUsbD1lLnJhZGlhbFNjYWxlLmRvbWFpbigpWzBdLGM9e2JhcjpmdW5jdGlvbihyLGksYSl7dmFyIG89dFthXS5kYXRhLGw9ZS5yYWRpYWxTY2FsZShyWzFdKS1lLnJhZGlhbFNjYWxlKDApLGM9ZS5yYWRpYWxTY2FsZShyWzJdfHwwKSx1PW8uYmFyV2lkdGg7bi5zZWxlY3QodGhpcykuYXR0cih7Y2xhc3M6Im1hcmsgYmFyIixkOiJNIitbW2wrYywtdS8yXSxbbCtjLHUvMl0sW2MsdS8yXSxbYywtdS8yXV0uam9pbigiTCIpKyJaIix0cmFuc2Zvcm06ZnVuY3Rpb24odCxyKXtyZXR1cm4icm90YXRlKCIrKGUub3JpZW50YXRpb24rcyh0WzBdKSkrIikifX0pfX07Yy5kb3Q9ZnVuY3Rpb24ocixpLGEpe3ZhciBvPXJbMl0/W3JbMF0sclsxXStyWzJdXTpyLHM9bi5zdmcuc3ltYm9sKCkuc2l6ZSh0W2FdLmRhdGEuZG90U2l6ZSkudHlwZSh0W2FdLmRhdGEuZG90VHlwZSkocixpKTtuLnNlbGVjdCh0aGlzKS5hdHRyKHtjbGFzczoibWFyayBkb3QiLGQ6cyx0cmFuc2Zvcm06ZnVuY3Rpb24odCxyKXt2YXIgbixpLGEscz0obj1mdW5jdGlvbih0LHIpe3ZhciBuPWUucmFkaWFsU2NhbGUodFsxXSksaT0oZS5hbmd1bGFyU2NhbGUodFswXSkrZS5vcmllbnRhdGlvbikqTWF0aC5QSS8xODA7cmV0dXJue3I6bix0Oml9fShvKSxpPW4ucipNYXRoLmNvcyhuLnQpLGE9bi5yKk1hdGguc2luKG4udCkse3g6aSx5OmF9KTtyZXR1cm4idHJhbnNsYXRlKCIrW3MueCxzLnldKyIpIn19KX07dmFyIHU9bi5zdmcubGluZS5yYWRpYWwoKS5pbnRlcnBvbGF0ZSh0WzBdLmRhdGEubGluZUludGVycG9sYXRpb24pLnJhZGl1cyhmdW5jdGlvbih0KXtyZXR1cm4gZS5yYWRpYWxTY2FsZSh0WzFdKX0pLmFuZ2xlKGZ1bmN0aW9uKHQpe3JldHVybiBlLmFuZ3VsYXJTY2FsZSh0WzBdKSpNYXRoLlBJLzE4MH0pO2MubGluZT1mdW5jdGlvbihyLGksYSl7dmFyIHM9clsyXT9vW2FdLm1hcChmdW5jdGlvbih0LGUpe3JldHVyblt0WzBdLHRbMV0rdFsyXV19KTpvW2FdO2lmKG4uc2VsZWN0KHRoaXMpLmVhY2goYy5kb3QpLnN0eWxlKHtvcGFjaXR5OmZ1bmN0aW9uKGUscil7cmV0dXJuK3RbYV0uZGF0YS5kb3RWaXNpYmxlfSxmaWxsOmQuc3Ryb2tlKHIsaSxhKX0pLmF0dHIoe2NsYXNzOiJtYXJrIGRvdCJ9KSwhKGk+MCkpe3ZhciBsPW4uc2VsZWN0KHRoaXMucGFyZW50Tm9kZSkuc2VsZWN0QWxsKCJwYXRoLmxpbmUiKS5kYXRhKFswXSk7bC5lbnRlcigpLmluc2VydCgicGF0aCIpLGwuYXR0cih7Y2xhc3M6ImxpbmUiLGQ6dShzKSx0cmFuc2Zvcm06ZnVuY3Rpb24odCxyKXtyZXR1cm4icm90YXRlKCIrKGUub3JpZW50YXRpb24rOTApKyIpIn0sInBvaW50ZXItZXZlbnRzIjoibm9uZSJ9KS5zdHlsZSh7ZmlsbDpmdW5jdGlvbih0LGUpe3JldHVybiBkLmZpbGwocixpLGEpfSwiZmlsbC1vcGFjaXR5IjowLHN0cm9rZTpmdW5jdGlvbih0LGUpe3JldHVybiBkLnN0cm9rZShyLGksYSl9LCJzdHJva2Utd2lkdGgiOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGRbInN0cm9rZS13aWR0aCJdKHIsaSxhKX0sInN0cm9rZS1kYXNoYXJyYXkiOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGRbInN0cm9rZS1kYXNoYXJyYXkiXShyLGksYSl9LG9wYWNpdHk6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZC5vcGFjaXR5KHIsaSxhKX0sZGlzcGxheTpmdW5jdGlvbih0LGUpe3JldHVybiBkLmRpc3BsYXkocixpLGEpfX0pfX07dmFyIGg9ZS5hbmd1bGFyU2NhbGUucmFuZ2UoKSxmPU1hdGguYWJzKGhbMV0taFswXSkvb1swXS5sZW5ndGgqTWF0aC5QSS8xODAscD1uLnN2Zy5hcmMoKS5zdGFydEFuZ2xlKGZ1bmN0aW9uKHQpe3JldHVybi1mLzJ9KS5lbmRBbmdsZShmdW5jdGlvbih0KXtyZXR1cm4gZi8yfSkuaW5uZXJSYWRpdXMoZnVuY3Rpb24odCl7cmV0dXJuIGUucmFkaWFsU2NhbGUobCsodFsyXXx8MCkpfSkub3V0ZXJSYWRpdXMoZnVuY3Rpb24odCl7cmV0dXJuIGUucmFkaWFsU2NhbGUobCsodFsyXXx8MCkpK2UucmFkaWFsU2NhbGUodFsxXSl9KTtjLmFyYz1mdW5jdGlvbih0LHIsaSl7bi5zZWxlY3QodGhpcykuYXR0cih7Y2xhc3M6Im1hcmsgYXJjIixkOnAsdHJhbnNmb3JtOmZ1bmN0aW9uKHQscil7cmV0dXJuInJvdGF0ZSgiKyhlLm9yaWVudGF0aW9uK3ModFswXSkrOTApKyIpIn19KX07dmFyIGQ9e2ZpbGw6ZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0W25dLmRhdGEuY29sb3J9LHN0cm9rZTpmdW5jdGlvbihlLHIsbil7cmV0dXJuIHRbbl0uZGF0YS5zdHJva2VDb2xvcn0sInN0cm9rZS13aWR0aCI6ZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0W25dLmRhdGEuc3Ryb2tlU2l6ZSsicHgifSwic3Ryb2tlLWRhc2hhcnJheSI6ZnVuY3Rpb24oZSxuLGkpe3JldHVybiByW3RbaV0uZGF0YS5zdHJva2VEYXNoXX0sb3BhY2l0eTpmdW5jdGlvbihlLHIsbil7cmV0dXJuIHRbbl0uZGF0YS5vcGFjaXR5fSxkaXNwbGF5OmZ1bmN0aW9uKGUscixuKXtyZXR1cm4idW5kZWZpbmVkIj09dHlwZW9mIHRbbl0uZGF0YS52aXNpYmxlfHx0W25dLmRhdGEudmlzaWJsZT8iYmxvY2siOiJub25lIn19LGc9bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJnLmxheWVyIikuZGF0YShvKTtnLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cih7Y2xhc3M6ImxheWVyIn0pO3ZhciBtPWcuc2VsZWN0QWxsKCJwYXRoLm1hcmsiKS5kYXRhKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHR9KTttLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuYXR0cih7Y2xhc3M6Im1hcmsifSksbS5zdHlsZShkKS5lYWNoKGNbZS5nZW9tZXRyeVR5cGVdKSxtLmV4aXQoKS5yZW1vdmUoKSxnLmV4aXQoKS5yZW1vdmUoKX0pfXJldHVybiBhLmNvbmZpZz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZS5mb3JFYWNoKGZ1bmN0aW9uKGUscil7dFtyXXx8KHRbcl09e30pLGkodFtyXSxvLlBvbHlDaGFydC5kZWZhdWx0Q29uZmlnKCkpLGkodFtyXSxlKX0pLHRoaXMpOnR9LGEuZ2V0Q29sb3JTY2FsZT1mdW5jdGlvbigpe30sbi5yZWJpbmQoYSxlLCJvbiIpLGF9LG8uUG9seUNoYXJ0LmRlZmF1bHRDb25maWc9ZnVuY3Rpb24oKXtyZXR1cm57ZGF0YTp7bmFtZToiZ2VvbTEiLHQ6W1sxLDIsMyw0XV0scjpbWzEsMiwzLDRdXSxkb3RUeXBlOiJjaXJjbGUiLGRvdFNpemU6NjQsZG90VmlzaWJsZTohMSxiYXJXaWR0aDoyMCxjb2xvcjoiI2ZmYTUwMCIsc3Ryb2tlU2l6ZToxLHN0cm9rZUNvbG9yOiJzaWx2ZXIiLHN0cm9rZURhc2g6InNvbGlkIixvcGFjaXR5OjEsaW5kZXg6MCx2aXNpYmxlOiEwLHZpc2libGVJbkxlZ2VuZDohMH0sZ2VvbWV0cnlDb25maWc6e2dlb21ldHJ5OiJMaW5lUGxvdCIsZ2VvbWV0cnlUeXBlOiJhcmMiLGRpcmVjdGlvbjoiY2xvY2t3aXNlIixvcmllbnRhdGlvbjowLGNvbnRhaW5lcjoiYm9keSIscmFkaWFsU2NhbGU6bnVsbCxhbmd1bGFyU2NhbGU6bnVsbCxjb2xvclNjYWxlOm4uc2NhbGUuY2F0ZWdvcnkyMCgpfX19LG8uQmFyQ2hhcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gby5Qb2x5Q2hhcnQoKX0sby5CYXJDaGFydC5kZWZhdWx0Q29uZmlnPWZ1bmN0aW9uKCl7cmV0dXJue2dlb21ldHJ5Q29uZmlnOntnZW9tZXRyeVR5cGU6ImJhciJ9fX0sby5BcmVhQ2hhcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gby5Qb2x5Q2hhcnQoKX0sby5BcmVhQ2hhcnQuZGVmYXVsdENvbmZpZz1mdW5jdGlvbigpe3JldHVybntnZW9tZXRyeUNvbmZpZzp7Z2VvbWV0cnlUeXBlOiJhcmMifX19LG8uRG90UGxvdD1mdW5jdGlvbigpe3JldHVybiBvLlBvbHlDaGFydCgpfSxvLkRvdFBsb3QuZGVmYXVsdENvbmZpZz1mdW5jdGlvbigpe3JldHVybntnZW9tZXRyeUNvbmZpZzp7Z2VvbWV0cnlUeXBlOiJkb3QiLGRvdFR5cGU6ImNpcmNsZSJ9fX0sby5MaW5lUGxvdD1mdW5jdGlvbigpe3JldHVybiBvLlBvbHlDaGFydCgpfSxvLkxpbmVQbG90LmRlZmF1bHRDb25maWc9ZnVuY3Rpb24oKXtyZXR1cm57Z2VvbWV0cnlDb25maWc6e2dlb21ldHJ5VHlwZToibGluZSJ9fX0sby5MZWdlbmQ9ZnVuY3Rpb24oKXt2YXIgdD1vLkxlZ2VuZC5kZWZhdWx0Q29uZmlnKCksZT1uLmRpc3BhdGNoKCJob3ZlciIpO2Z1bmN0aW9uIHIoKXt2YXIgZT10LmxlZ2VuZENvbmZpZyxhPXQuZGF0YS5tYXAoZnVuY3Rpb24odCxyKXtyZXR1cm5bXS5jb25jYXQodCkubWFwKGZ1bmN0aW9uKHQsbil7dmFyIGE9aSh7fSxlLmVsZW1lbnRzW3JdKTtyZXR1cm4gYS5uYW1lPXQsYS5jb2xvcj1bXS5jb25jYXQoZS5lbGVtZW50c1tyXS5jb2xvcilbbl0sYX0pfSksbz1uLm1lcmdlKGEpO289by5maWx0ZXIoZnVuY3Rpb24odCxyKXtyZXR1cm4gZS5lbGVtZW50c1tyXSYmKGUuZWxlbWVudHNbcl0udmlzaWJsZUluTGVnZW5kfHwidW5kZWZpbmVkIj09dHlwZW9mIGUuZWxlbWVudHNbcl0udmlzaWJsZUluTGVnZW5kKX0pLGUucmV2ZXJzZU9yZGVyJiYobz1vLnJldmVyc2UoKSk7dmFyIHM9ZS5jb250YWluZXI7KCJzdHJpbmciPT10eXBlb2Ygc3x8cy5ub2RlTmFtZSkmJihzPW4uc2VsZWN0KHMpKTt2YXIgbD1vLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiB0LmNvbG9yfSksYz1lLmZvbnRTaXplLHU9bnVsbD09ZS5pc0NvbnRpbnVvdXM/Im51bWJlciI9PXR5cGVvZiBvWzBdOmUuaXNDb250aW51b3VzLGg9dT9lLmhlaWdodDpjKm8ubGVuZ3RoLGY9cy5jbGFzc2VkKCJsZWdlbmQtZ3JvdXAiLCEwKS5zZWxlY3RBbGwoInN2ZyIpLmRhdGEoWzBdKSxwPWYuZW50ZXIoKS5hcHBlbmQoInN2ZyIpLmF0dHIoe3dpZHRoOjMwMCxoZWlnaHQ6aCtjLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInhtbG5zOnhsaW5rIjoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIsdmVyc2lvbjoiMS4xIn0pO3AuYXBwZW5kKCJnIikuY2xhc3NlZCgibGVnZW5kLWF4aXMiLCEwKSxwLmFwcGVuZCgiZyIpLmNsYXNzZWQoImxlZ2VuZC1tYXJrcyIsITApO3ZhciBkPW4ucmFuZ2Uoby5sZW5ndGgpLGc9bi5zY2FsZVt1PyJsaW5lYXIiOiJvcmRpbmFsIl0oKS5kb21haW4oZCkucmFuZ2UobCksbT1uLnNjYWxlW3U/ImxpbmVhciI6Im9yZGluYWwiXSgpLmRvbWFpbihkKVt1PyJyYW5nZSI6InJhbmdlUG9pbnRzIl0oWzAsaF0pO2lmKHUpe3ZhciB2PWYuc2VsZWN0KCIubGVnZW5kLW1hcmtzIikuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJsaW5lYXJHcmFkaWVudCIpLmF0dHIoe2lkOiJncmFkMSIseDE6IjAlIix5MToiMCUiLHgyOiIwJSIseTI6IjEwMCUifSkuc2VsZWN0QWxsKCJzdG9wIikuZGF0YShsKTt2LmVudGVyKCkuYXBwZW5kKCJzdG9wIiksdi5hdHRyKHtvZmZzZXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS8obC5sZW5ndGgtMSkqMTAwKyIlIn19KS5zdHlsZSh7InN0b3AtY29sb3IiOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHR9fSksZi5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKCJsZWdlbmQtbWFyayIsITApLmF0dHIoe2hlaWdodDplLmhlaWdodCx3aWR0aDplLmNvbG9yQmFuZFdpZHRoLGZpbGw6InVybCgjZ3JhZDEpIn0pfWVsc2V7dmFyIHk9Zi5zZWxlY3QoIi5sZWdlbmQtbWFya3MiKS5zZWxlY3RBbGwoInBhdGgubGVnZW5kLW1hcmsiKS5kYXRhKG8pO3kuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJsZWdlbmQtbWFyayIsITApLHkuYXR0cih7dHJhbnNmb3JtOmZ1bmN0aW9uKHQsZSl7cmV0dXJuInRyYW5zbGF0ZSgiK1tjLzIsbShlKStjLzJdKyIpIn0sZDpmdW5jdGlvbih0LGUpe3ZhciByLGksYSxvPXQuc3ltYm9sO3JldHVybiBhPTMqKGk9YyksImxpbmUiPT09KHI9byk/Ik0iK1tbLWkvMiwtaS8xMl0sW2kvMiwtaS8xMl0sW2kvMixpLzEyXSxbLWkvMixpLzEyXV0rIloiOi0xIT1uLnN2Zy5zeW1ib2xUeXBlcy5pbmRleE9mKHIpP24uc3ZnLnN5bWJvbCgpLnR5cGUocikuc2l6ZShhKSgpOm4uc3ZnLnN5bWJvbCgpLnR5cGUoInNxdWFyZSIpLnNpemUoYSkoKX0sZmlsbDpmdW5jdGlvbih0LGUpe3JldHVybiBnKGUpfX0pLHkuZXhpdCgpLnJlbW92ZSgpfXZhciB4PW4uc3ZnLmF4aXMoKS5zY2FsZShtKS5vcmllbnQoInJpZ2h0IiksYj1mLnNlbGVjdCgiZy5sZWdlbmQtYXhpcyIpLmF0dHIoe3RyYW5zZm9ybToidHJhbnNsYXRlKCIrW3U/ZS5jb2xvckJhbmRXaWR0aDpjLGMvMl0rIikifSkuY2FsbCh4KTtyZXR1cm4gYi5zZWxlY3RBbGwoIi5kb21haW4iKS5zdHlsZSh7ZmlsbDoibm9uZSIsc3Ryb2tlOiJub25lIn0pLGIuc2VsZWN0QWxsKCJsaW5lIikuc3R5bGUoe2ZpbGw6Im5vbmUiLHN0cm9rZTp1P2UudGV4dENvbG9yOiJub25lIn0pLGIuc2VsZWN0QWxsKCJ0ZXh0Iikuc3R5bGUoe2ZpbGw6ZS50ZXh0Q29sb3IsImZvbnQtc2l6ZSI6ZS5mb250U2l6ZX0pLnRleHQoZnVuY3Rpb24odCxlKXtyZXR1cm4gb1tlXS5uYW1lfSkscn1yZXR1cm4gci5jb25maWc9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGkodCxlKSx0aGlzKTp0fSxuLnJlYmluZChyLGUsIm9uIikscn0sby5MZWdlbmQuZGVmYXVsdENvbmZpZz1mdW5jdGlvbih0LGUpe3JldHVybntkYXRhOlsiYSIsImIiLCJjIl0sbGVnZW5kQ29uZmlnOntlbGVtZW50czpbe3N5bWJvbDoibGluZSIsY29sb3I6InJlZCJ9LHtzeW1ib2w6InNxdWFyZSIsY29sb3I6InllbGxvdyJ9LHtzeW1ib2w6ImRpYW1vbmQiLGNvbG9yOiJsaW1lZ3JlZW4ifV0saGVpZ2h0OjE1MCxjb2xvckJhbmRXaWR0aDozMCxmb250U2l6ZToxMixjb250YWluZXI6ImJvZHkiLGlzQ29udGludW91czpudWxsLHRleHRDb2xvcjoiZ3JleSIscmV2ZXJzZU9yZGVyOiExfX19LG8udG9vbHRpcFBhbmVsPWZ1bmN0aW9uKCl7dmFyIHQsZSxyLGE9e2NvbnRhaW5lcjpudWxsLGhhc1RpY2s6ITEsZm9udFNpemU6MTIsY29sb3I6IndoaXRlIixwYWRkaW5nOjV9LHM9InRvb2x0aXAtIitvLnRvb2x0aXBQYW5lbC51aWQrKyxsPTEwLGM9ZnVuY3Rpb24oKXt2YXIgbj0odD1hLmNvbnRhaW5lci5zZWxlY3RBbGwoImcuIitzKS5kYXRhKFswXSkpLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChzLCEwKS5zdHlsZSh7InBvaW50ZXItZXZlbnRzIjoibm9uZSIsZGlzcGxheToibm9uZSJ9KTtyZXR1cm4gcj1uLmFwcGVuZCgicGF0aCIpLnN0eWxlKHtmaWxsOiJ3aGl0ZSIsImZpbGwtb3BhY2l0eSI6Ljl9KS5hdHRyKHtkOiJNMCAwIn0pLGU9bi5hcHBlbmQoInRleHQiKS5hdHRyKHtkeDphLnBhZGRpbmcrbCxkeTouMyorYS5mb250U2l6ZX0pLGN9O3JldHVybiBjLnRleHQ9ZnVuY3Rpb24oaSl7dmFyIG89bi5oc2woYS5jb2xvcikubCxzPW8+PS41PyIjYWFhIjoid2hpdGUiLHU9bz49LjU/ImJsYWNrIjoid2hpdGUiLGg9aXx8IiI7ZS5zdHlsZSh7ZmlsbDp1LCJmb250LXNpemUiOmEuZm9udFNpemUrInB4In0pLnRleHQoaCk7dmFyIGY9YS5wYWRkaW5nLHA9ZS5ub2RlKCkuZ2V0QkJveCgpLGQ9e2ZpbGw6YS5jb2xvcixzdHJva2U6cywic3Ryb2tlLXdpZHRoIjoiMnB4In0sZz1wLndpZHRoKzIqZitsLG09cC5oZWlnaHQrMipmO3JldHVybiByLmF0dHIoe2Q6Ik0iK1tbbCwtbS8yXSxbbCwtbS80XSxbYS5oYXNUaWNrPzA6bCwwXSxbbCxtLzRdLFtsLG0vMl0sW2csbS8yXSxbZywtbS8yXV0uam9pbigiTCIpKyJaIn0pLnN0eWxlKGQpLHQuYXR0cih7dHJhbnNmb3JtOiJ0cmFuc2xhdGUoIitbbCwtbS8yKzIqZl0rIikifSksdC5zdHlsZSh7ZGlzcGxheToiYmxvY2sifSksY30sYy5tb3ZlPWZ1bmN0aW9uKGUpe2lmKHQpcmV0dXJuIHQuYXR0cih7dHJhbnNmb3JtOiJ0cmFuc2xhdGUoIitbZVswXSxlWzFdXSsiKSJ9KS5zdHlsZSh7ZGlzcGxheToiYmxvY2sifSksY30sYy5oaWRlPWZ1bmN0aW9uKCl7aWYodClyZXR1cm4gdC5zdHlsZSh7ZGlzcGxheToibm9uZSJ9KSxjfSxjLnNob3c9ZnVuY3Rpb24oKXtpZih0KXJldHVybiB0LnN0eWxlKHtkaXNwbGF5OiJibG9jayJ9KSxjfSxjLmNvbmZpZz1mdW5jdGlvbih0KXtyZXR1cm4gaShhLHQpLGN9LGN9LG8udG9vbHRpcFBhbmVsLnVpZD0xLG8uYWRhcHRlcj17fSxvLmFkYXB0ZXIucGxvdGx5PWZ1bmN0aW9uKCl7dmFyIHQ9e2NvbnZlcnQ6ZnVuY3Rpb24odCxlKXt2YXIgcj17fTtpZih0LmRhdGEmJihyLmRhdGE9dC5kYXRhLm1hcChmdW5jdGlvbih0LHIpe3ZhciBuPWkoe30sdCk7cmV0dXJuW1tuLFsibWFya2VyIiwiY29sb3IiXSxbImNvbG9yIl1dLFtuLFsibWFya2VyIiwib3BhY2l0eSJdLFsib3BhY2l0eSJdXSxbbixbIm1hcmtlciIsImxpbmUiLCJjb2xvciJdLFsic3Ryb2tlQ29sb3IiXV0sW24sWyJtYXJrZXIiLCJsaW5lIiwiZGFzaCJdLFsic3Ryb2tlRGFzaCJdXSxbbixbIm1hcmtlciIsImxpbmUiLCJ3aWR0aCJdLFsic3Ryb2tlU2l6ZSJdXSxbbixbIm1hcmtlciIsInN5bWJvbCJdLFsiZG90VHlwZSJdXSxbbixbIm1hcmtlciIsInNpemUiXSxbImRvdFNpemUiXV0sW24sWyJtYXJrZXIiLCJiYXJXaWR0aCJdLFsiYmFyV2lkdGgiXV0sW24sWyJsaW5lIiwiaW50ZXJwb2xhdGlvbiJdLFsibGluZUludGVycG9sYXRpb24iXV0sW24sWyJzaG93bGVnZW5kIl0sWyJ2aXNpYmxlSW5MZWdlbmQiXV1dLmZvckVhY2goZnVuY3Rpb24odCxyKXtvLnV0aWwudHJhbnNsYXRvci5hcHBseShudWxsLHQuY29uY2F0KGUpKX0pLGV8fGRlbGV0ZSBuLm1hcmtlcixlJiZkZWxldGUgbi5ncm91cElkLGU/KCJMaW5lUGxvdCI9PT1uLmdlb21ldHJ5PyhuLnR5cGU9InNjYXR0ZXIiLCEwPT09bi5kb3RWaXNpYmxlPyhkZWxldGUgbi5kb3RWaXNpYmxlLG4ubW9kZT0ibGluZXMrbWFya2VycyIpOm4ubW9kZT0ibGluZXMiKToiRG90UGxvdCI9PT1uLmdlb21ldHJ5PyhuLnR5cGU9InNjYXR0ZXIiLG4ubW9kZT0ibWFya2VycyIpOiJBcmVhQ2hhcnQiPT09bi5nZW9tZXRyeT9uLnR5cGU9ImFyZWEiOiJCYXJDaGFydCI9PT1uLmdlb21ldHJ5JiYobi50eXBlPSJiYXIiKSxkZWxldGUgbi5nZW9tZXRyeSk6KCJzY2F0dGVyIj09PW4udHlwZT8ibGluZXMiPT09bi5tb2RlP24uZ2VvbWV0cnk9IkxpbmVQbG90IjoibWFya2VycyI9PT1uLm1vZGU/bi5nZW9tZXRyeT0iRG90UGxvdCI6ImxpbmVzK21hcmtlcnMiPT09bi5tb2RlJiYobi5nZW9tZXRyeT0iTGluZVBsb3QiLG4uZG90VmlzaWJsZT0hMCk6ImFyZWEiPT09bi50eXBlP24uZ2VvbWV0cnk9IkFyZWFDaGFydCI6ImJhciI9PT1uLnR5cGUmJihuLmdlb21ldHJ5PSJCYXJDaGFydCIpLGRlbGV0ZSBuLm1vZGUsZGVsZXRlIG4udHlwZSksbn0pLCFlJiZ0LmxheW91dCYmInN0YWNrIj09PXQubGF5b3V0LmJhcm1vZGUpKXt2YXIgYT1vLnV0aWwuZHVwbGljYXRlcyhyLmRhdGEubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuZ2VvbWV0cnl9KSk7ci5kYXRhLmZvckVhY2goZnVuY3Rpb24odCxlKXt2YXIgbj1hLmluZGV4T2YodC5nZW9tZXRyeSk7LTEhPW4mJihyLmRhdGFbZV0uZ3JvdXBJZD1uKX0pfWlmKHQubGF5b3V0KXt2YXIgcz1pKHt9LHQubGF5b3V0KTtpZihbW3MsWyJwbG90X2JnY29sb3IiXSxbImJhY2tncm91bmRDb2xvciJdXSxbcyxbInNob3dsZWdlbmQiXSxbInNob3dMZWdlbmQiXV0sW3MsWyJyYWRpYWxheGlzIl0sWyJyYWRpYWxBeGlzIl1dLFtzLFsiYW5ndWxhcmF4aXMiXSxbImFuZ3VsYXJBeGlzIl1dLFtzLmFuZ3VsYXJheGlzLFsic2hvd2xpbmUiXSxbImdyaWRMaW5lc1Zpc2libGUiXV0sW3MuYW5ndWxhcmF4aXMsWyJzaG93dGlja2xhYmVscyJdLFsibGFiZWxzVmlzaWJsZSJdXSxbcy5hbmd1bGFyYXhpcyxbIm50aWNrcyJdLFsidGlja3NDb3VudCJdXSxbcy5hbmd1bGFyYXhpcyxbInRpY2tvcmllbnRhdGlvbiJdLFsidGlja09yaWVudGF0aW9uIl1dLFtzLmFuZ3VsYXJheGlzLFsidGlja3N1ZmZpeCJdLFsidGlja3NTdWZmaXgiXV0sW3MuYW5ndWxhcmF4aXMsWyJyYW5nZSJdLFsiZG9tYWluIl1dLFtzLmFuZ3VsYXJheGlzLFsiZW5kcGFkZGluZyJdLFsiZW5kUGFkZGluZyJdXSxbcy5yYWRpYWxheGlzLFsic2hvd2xpbmUiXSxbImdyaWRMaW5lc1Zpc2libGUiXV0sW3MucmFkaWFsYXhpcyxbInRpY2tvcmllbnRhdGlvbiJdLFsidGlja09yaWVudGF0aW9uIl1dLFtzLnJhZGlhbGF4aXMsWyJ0aWNrc3VmZml4Il0sWyJ0aWNrc1N1ZmZpeCJdXSxbcy5yYWRpYWxheGlzLFsicmFuZ2UiXSxbImRvbWFpbiJdXSxbcy5hbmd1bGFyQXhpcyxbInNob3dsaW5lIl0sWyJncmlkTGluZXNWaXNpYmxlIl1dLFtzLmFuZ3VsYXJBeGlzLFsic2hvd3RpY2tsYWJlbHMiXSxbImxhYmVsc1Zpc2libGUiXV0sW3MuYW5ndWxhckF4aXMsWyJudGlja3MiXSxbInRpY2tzQ291bnQiXV0sW3MuYW5ndWxhckF4aXMsWyJ0aWNrb3JpZW50YXRpb24iXSxbInRpY2tPcmllbnRhdGlvbiJdXSxbcy5hbmd1bGFyQXhpcyxbInRpY2tzdWZmaXgiXSxbInRpY2tzU3VmZml4Il1dLFtzLmFuZ3VsYXJBeGlzLFsicmFuZ2UiXSxbImRvbWFpbiJdXSxbcy5hbmd1bGFyQXhpcyxbImVuZHBhZGRpbmciXSxbImVuZFBhZGRpbmciXV0sW3MucmFkaWFsQXhpcyxbInNob3dsaW5lIl0sWyJncmlkTGluZXNWaXNpYmxlIl1dLFtzLnJhZGlhbEF4aXMsWyJ0aWNrb3JpZW50YXRpb24iXSxbInRpY2tPcmllbnRhdGlvbiJdXSxbcy5yYWRpYWxBeGlzLFsidGlja3N1ZmZpeCJdLFsidGlja3NTdWZmaXgiXV0sW3MucmFkaWFsQXhpcyxbInJhbmdlIl0sWyJkb21haW4iXV0sW3MuZm9udCxbIm91dGxpbmVjb2xvciJdLFsib3V0bGluZUNvbG9yIl1dLFtzLmxlZ2VuZCxbInRyYWNlb3JkZXIiXSxbInJldmVyc2VPcmRlciJdXSxbcyxbImxhYmVsb2Zmc2V0Il0sWyJsYWJlbE9mZnNldCJdXSxbcyxbImRlZmF1bHRjb2xvcnJhbmdlIl0sWyJkZWZhdWx0Q29sb3JSYW5nZSJdXV0uZm9yRWFjaChmdW5jdGlvbih0LHIpe28udXRpbC50cmFuc2xhdG9yLmFwcGx5KG51bGwsdC5jb25jYXQoZSkpfSksZT8oInVuZGVmaW5lZCIhPXR5cGVvZiBzLnRpY2tMZW5ndGgmJihzLmFuZ3VsYXJheGlzLnRpY2tsZW49cy50aWNrTGVuZ3RoLGRlbGV0ZSBzLnRpY2tMZW5ndGgpLHMudGlja0NvbG9yJiYocy5hbmd1bGFyYXhpcy50aWNrY29sb3I9cy50aWNrQ29sb3IsZGVsZXRlIHMudGlja0NvbG9yKSk6KHMuYW5ndWxhckF4aXMmJiJ1bmRlZmluZWQiIT10eXBlb2Ygcy5hbmd1bGFyQXhpcy50aWNrbGVuJiYocy50aWNrTGVuZ3RoPXMuYW5ndWxhckF4aXMudGlja2xlbikscy5hbmd1bGFyQXhpcyYmInVuZGVmaW5lZCIhPXR5cGVvZiBzLmFuZ3VsYXJBeGlzLnRpY2tjb2xvciYmKHMudGlja0NvbG9yPXMuYW5ndWxhckF4aXMudGlja2NvbG9yKSkscy5sZWdlbmQmJiJib29sZWFuIiE9dHlwZW9mIHMubGVnZW5kLnJldmVyc2VPcmRlciYmKHMubGVnZW5kLnJldmVyc2VPcmRlcj0ibm9ybWFsIiE9cy5sZWdlbmQucmV2ZXJzZU9yZGVyKSxzLmxlZ2VuZCYmImJvb2xlYW4iPT10eXBlb2Ygcy5sZWdlbmQudHJhY2VvcmRlciYmKHMubGVnZW5kLnRyYWNlb3JkZXI9cy5sZWdlbmQudHJhY2VvcmRlcj8icmV2ZXJzZWQiOiJub3JtYWwiLGRlbGV0ZSBzLmxlZ2VuZC5yZXZlcnNlT3JkZXIpLHMubWFyZ2luJiYidW5kZWZpbmVkIiE9dHlwZW9mIHMubWFyZ2luLnQpe3ZhciBsPVsidCIsInIiLCJiIiwibCIsInBhZCJdLGM9WyJ0b3AiLCJyaWdodCIsImJvdHRvbSIsImxlZnQiLCJwYWQiXSx1PXt9O24uZW50cmllcyhzLm1hcmdpbikuZm9yRWFjaChmdW5jdGlvbih0LGUpe3VbY1tsLmluZGV4T2YodC5rZXkpXV09dC52YWx1ZX0pLHMubWFyZ2luPXV9ZSYmKGRlbGV0ZSBzLm5lZWRzRW5kU3BhY2luZyxkZWxldGUgcy5taW5vclRpY2tDb2xvcixkZWxldGUgcy5taW5vclRpY2tzLGRlbGV0ZSBzLmFuZ3VsYXJheGlzLnRpY2tzQ291bnQsZGVsZXRlIHMuYW5ndWxhcmF4aXMudGlja3NDb3VudCxkZWxldGUgcy5hbmd1bGFyYXhpcy50aWNrc1N0ZXAsZGVsZXRlIHMuYW5ndWxhcmF4aXMucmV3cml0ZVRpY2tzLGRlbGV0ZSBzLmFuZ3VsYXJheGlzLm50aWNrcyxkZWxldGUgcy5yYWRpYWxheGlzLnRpY2tzQ291bnQsZGVsZXRlIHMucmFkaWFsYXhpcy50aWNrc0NvdW50LGRlbGV0ZSBzLnJhZGlhbGF4aXMudGlja3NTdGVwLGRlbGV0ZSBzLnJhZGlhbGF4aXMucmV3cml0ZVRpY2tzLGRlbGV0ZSBzLnJhZGlhbGF4aXMubnRpY2tzKSxyLmxheW91dD1zfXJldHVybiByfX07cmV0dXJuIHR9fSx7Ii4uLy4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiOjY1NiwiLi4vLi4vLi4vbGliIjo2ODQsZDM6MTQ3fV0sODA1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCIuLi8uLi8uLi9saWIiKSxhPXQoIi4uLy4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxvPXQoIi4vbWljcm9wb2xhciIpLHM9dCgiLi91bmRvX21hbmFnZXIiKSxsPWkuZXh0ZW5kRGVlcEFsbCxjPWUuZXhwb3J0cz17fTtjLmZyYW1ld29yaz1mdW5jdGlvbih0KXt2YXIgZSxyLGksYSx1LGg9bmV3IHM7ZnVuY3Rpb24gZihyLHMpe3JldHVybiBzJiYodT1zKSxuLnNlbGVjdChuLnNlbGVjdCh1KS5ub2RlKCkucGFyZW50Tm9kZSkuc2VsZWN0QWxsKCIuc3ZnLWNvbnRhaW5lcj4qOm5vdCguY2hhcnQtcm9vdCkiKS5yZW1vdmUoKSxlPWU/bChlLHIpOnIsaXx8KGk9by5BeGlzKCkpLGE9by5hZGFwdGVyLnBsb3RseSgpLmNvbnZlcnQoZSksaS5jb25maWcoYSkucmVuZGVyKHUpLHQuZGF0YT1lLmRhdGEsdC5sYXlvdXQ9ZS5sYXlvdXQsYy5maWxsTGF5b3V0KHQpLGV9cmV0dXJuIGYuaXNQb2xhcj0hMCxmLnN2Zz1mdW5jdGlvbigpe3JldHVybiBpLnN2ZygpfSxmLmdldENvbmZpZz1mdW5jdGlvbigpe3JldHVybiBlfSxmLmdldExpdmVDb25maWc9ZnVuY3Rpb24oKXtyZXR1cm4gby5hZGFwdGVyLnBsb3RseSgpLmNvbnZlcnQoaS5nZXRMaXZlQ29uZmlnKCksITApfSxmLmdldExpdmVTY2FsZXM9ZnVuY3Rpb24oKXtyZXR1cm57dDppLmFuZ3VsYXJTY2FsZSgpLHI6aS5yYWRpYWxTY2FsZSgpfX0sZi5zZXRVbmRvUG9pbnQ9ZnVuY3Rpb24oKXt2YXIgdCxuLGk9dGhpcyxhPW8udXRpbC5jbG9uZUpzb24oZSk7dD1hLG49cixoLmFkZCh7dW5kbzpmdW5jdGlvbigpe24mJmkobil9LHJlZG86ZnVuY3Rpb24oKXtpKHQpfX0pLHI9by51dGlsLmNsb25lSnNvbihhKX0sZi51bmRvPWZ1bmN0aW9uKCl7aC51bmRvKCl9LGYucmVkbz1mdW5jdGlvbigpe2gucmVkbygpfSxmfSxjLmZpbGxMYXlvdXQ9ZnVuY3Rpb24odCl7dmFyIGU9bi5zZWxlY3QodCkuc2VsZWN0QWxsKCIucGxvdC1jb250YWluZXIiKSxyPWUuc2VsZWN0QWxsKCIuc3ZnLWNvbnRhaW5lciIpLGk9dC5mcmFtZXdvcmsmJnQuZnJhbWV3b3JrLnN2ZyYmdC5mcmFtZXdvcmsuc3ZnKCksbz17d2lkdGg6ODAwLGhlaWdodDo2MDAscGFwZXJfYmdjb2xvcjphLmJhY2tncm91bmQsX2NvbnRhaW5lcjplLF9wYXBlcmRpdjpyLF9wYXBlcjppfTt0Ll9mdWxsTGF5b3V0PWwobyx0LmxheW91dCl9fSx7Ii4uLy4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjU1OCwiLi4vLi4vLi4vbGliIjo2ODQsIi4vbWljcm9wb2xhciI6ODA0LCIuL3VuZG9fbWFuYWdlciI6ODA2LGQzOjE0N31dLDgwNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdCxlPVtdLHI9LTEsbj0hMTtmdW5jdGlvbiBpKHQsZSl7cmV0dXJuIHQ/KG49ITAsdFtlXSgpLG49ITEsdGhpcyk6dGhpc31yZXR1cm57YWRkOmZ1bmN0aW9uKHQpe3JldHVybiBuP3RoaXM6KGUuc3BsaWNlKHIrMSxlLmxlbmd0aC1yKSxlLnB1c2godCkscj1lLmxlbmd0aC0xLHRoaXMpfSxzZXRDYWxsYmFjazpmdW5jdGlvbihlKXt0PWV9LHVuZG86ZnVuY3Rpb24oKXt2YXIgbj1lW3JdO3JldHVybiBuPyhpKG4sInVuZG8iKSxyLT0xLHQmJnQobi51bmRvKSx0aGlzKTp0aGlzfSxyZWRvOmZ1bmN0aW9uKCl7dmFyIG49ZVtyKzFdO3JldHVybiBuPyhpKG4sInJlZG8iKSxyKz0xLHQmJnQobi5yZWRvKSx0aGlzKTp0aGlzfSxjbGVhcjpmdW5jdGlvbigpe2U9W10scj0tMX0saGFzVW5kbzpmdW5jdGlvbigpe3JldHVybi0xIT09cn0saGFzUmVkbzpmdW5jdGlvbigpe3JldHVybiByPGUubGVuZ3RoLTF9LGdldENvbW1hbmRzOmZ1bmN0aW9uKCl7cmV0dXJuIGV9LGdldFByZXZpb3VzQ29tbWFuZDpmdW5jdGlvbigpe3JldHVybiBlW3ItMV19LGdldEluZGV4OmZ1bmN0aW9uKCl7cmV0dXJuIHJ9fX19LHt9XSw4MDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoInRpbnljb2xvcjIiKSxhPXQoIi4uLy4uL3JlZ2lzdHJ5Iiksbz10KCIuLi8uLi9saWIiKSxzPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxsPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGM9dCgiLi4vcGxvdHMiKSx1PXQoIi4uL2NhcnRlc2lhbi9heGVzIiksaD10KCIuLi9jYXJ0ZXNpYW4vYXV0b3JhbmdlIikuZG9BdXRvUmFuZ2UsZj10KCIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50IikscD10KCIuLi9jYXJ0ZXNpYW4vZHJhZ2JveCIpLGQ9dCgiLi4vLi4vY29tcG9uZW50cy9meCIpLGc9dCgiLi4vLi4vY29tcG9uZW50cy90aXRsZXMiKSxtPXQoIi4uL2NhcnRlc2lhbi9zZWxlY3QiKS5wcmVwU2VsZWN0LHY9dCgiLi4vY2FydGVzaWFuL3NlbGVjdCIpLmNsZWFyU2VsZWN0LHk9dCgiLi4vLi4vbGliL3NldGN1cnNvciIpLHg9dCgiLi4vLi4vbGliL3BvbHlnb24iKS50ZXN0ZXIsYj10KCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50IikuTUlEX1NISUZULF89by5fLHc9by5kZWcycmFkLGs9by5yYWQyZGVnLE09by53cmFwMzYwLEE9by53cmFwMTgwLFQ9dCgiLi9oZWxwZXJzIikuc2V0Q29udmVydEFuZ3VsYXIsUz10KCIuL2NvbnN0YW50cyIpO2Z1bmN0aW9uIEUodCxlKXt0aGlzLmlkPWUsdGhpcy5nZD10LHRoaXMuX2hhc0NsaXBPbkF4aXNGYWxzZT1udWxsLHRoaXMudmFuZ2xlcz1udWxsLHRoaXMucmFkaWFsQXhpc0FuZ2xlPW51bGwsdGhpcy50cmFjZUhhc2g9e30sdGhpcy5sYXllcnM9e30sdGhpcy5jbGlwUGF0aHM9e30sdGhpcy5jbGlwSWRzPXt9LHRoaXMudmlld0luaXRpYWw9e307dmFyIHI9dC5fZnVsbExheW91dCxuPSJjbGlwIityLl91aWQrZTt0aGlzLmNsaXBJZHMuZm9yVHJhY2VzPW4rIi1mb3ItdHJhY2VzIix0aGlzLmNsaXBQYXRocy5mb3JUcmFjZXM9ci5fY2xpcHMuYXBwZW5kKCJjbGlwUGF0aCIpLmF0dHIoImlkIix0aGlzLmNsaXBJZHMuZm9yVHJhY2VzKSx0aGlzLmNsaXBQYXRocy5mb3JUcmFjZXMuYXBwZW5kKCJwYXRoIiksdGhpcy5mcmFtZXdvcms9ci5fcG9sYXJsYXllci5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsZSksdGhpcy5yYWRpYWxUaWNrTGF5b3V0PW51bGwsdGhpcy5hbmd1bGFyVGlja0xheW91dD1udWxsfXZhciBDPUUucHJvdG90eXBlO2Z1bmN0aW9uIEwodCxlLHIpe3Uuc2V0Q29udmVydCh0LHIpLHQuX21pbj1lLl9taW4sdC5fbWF4PWUuX21heCx0LnNldFNjYWxlKCl9ZnVuY3Rpb24geih0KXt2YXIgZT10LnRpY2tzK1N0cmluZyh0LnRpY2tsZW4pK1N0cmluZyh0LnNob3d0aWNrbGFiZWxzKTtyZXR1cm4ic2lkZSJpbiB0JiYoZSs9dC5zaWRlKSxlfWZ1bmN0aW9uIFAodCxlKXtpZihVKGUpKXJldHVybiEwO3ZhciByPU0oZVswXSksbj1NKGVbMV0pO3I+biYmKG4rPTM2MCk7dmFyIGk9TShrKHQpKSxhPWkrMzYwO3JldHVybiBpPj1yJiZpPD1ufHxhPj1yJiZhPD1ufWZ1bmN0aW9uIEkodCxlKXtyZXR1cm4gZVtEKGUsZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGguYWJzKE8odCxlKSl9KV19ZnVuY3Rpb24gTyh0LGUpe3ZhciByPWUtdDtyZXR1cm4gTWF0aC5hdGFuMihNYXRoLnNpbihyKSxNYXRoLmNvcyhyKSl9ZnVuY3Rpb24gRCh0LGUpe2U9ZXx8by5pZGVudGl0eTtmb3IodmFyIHIsbj0xLzAsaT0wO2k8dC5sZW5ndGg7aSsrKXt2YXIgYT1lKHRbaV0pO2E8biYmKG49YSxyPWkpfXJldHVybiByfWZ1bmN0aW9uIFIodCxlLHIsbil7dmFyIGksYSxvPW5bMF0scz1uWzFdLGw9VyhNYXRoLnNpbihlKS1NYXRoLnNpbih0KSksYz1XKE1hdGguY29zKGUpLU1hdGguY29zKHQpKSx1PU1hdGgudGFuKHIpLGg9VygxL3UpLGY9bC9jLHA9cy1mKm87cmV0dXJuIGg/bCYmYz9hPXUqKGk9cC8odS1mKSk6Yz8oaT1zKmgsYT1zKTooaT1vLGE9byp1KTpsJiZjPyhpPTAsYT1wKTpjPyhpPTAsYT1zKTppPWE9TmFOLFtpLGFdfWZ1bmN0aW9uIEIodCxlLHIsbil7dmFyIGk9LWUqcixhPWUqZSsxLG89MiooZSppLXIpLHM9aSppK3Iqci10KnQsbD1NYXRoLnNxcnQobypvLTQqYSpzKSxjPSgtbytsKS8oMiphKSx1PSgtby1sKS8oMiphKTtyZXR1cm5bW2MsZSpjK2krbl0sW3UsZSp1K2krbl1dfWZ1bmN0aW9uIEYodCxlLHIpe3JldHVybiBVKGUpP2Z1bmN0aW9uKHQsZSl7dmFyIHIsbj1lLmxlbmd0aCxpPW5ldyBBcnJheShuKzEpO2ZvcihyPTA7cjxuO3IrKyl7dmFyIGE9ZVtyXTtpW3JdPVt0Kk1hdGguY29zKGEpLHQqTWF0aC5zaW4oYSldfXJldHVybiBpW3JdPWlbMF0uc2xpY2UoKSxpfSh0LHIpOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGE9ci5sZW5ndGgscz1bXTtmdW5jdGlvbiBsKGUpe3JldHVyblt0Kk1hdGguY29zKGUpLHQqTWF0aC5zaW4oZSldfWZ1bmN0aW9uIGModCxlLHIpe3JldHVybiBSKHQsZSxyLGwodCkpfWZ1bmN0aW9uIHUodCl7cmV0dXJuIG8ubW9kKHQsYSl9dmFyIGg9dyhlWzBdKSxmPXcoZVsxXSkscD1EKHIsZnVuY3Rpb24odCl7cmV0dXJuIFAodCxlKT9NYXRoLmFicyhPKHQsaCkpOjEvMH0pLGQ9YyhyW3BdLHJbdShwLTEpXSxoKTtmb3Iocy5wdXNoKGQpLG49cCxpPTA7aTxhO24rKyxpKyspe3ZhciBnPXJbdShuKV07aWYoIVAoZyxlKSlicmVhaztzLnB1c2gobChnKSl9dmFyIG09RChyLGZ1bmN0aW9uKHQpe3JldHVybiBQKHQsZSk/TWF0aC5hYnMoTyh0LGYpKToxLzB9KSx2PWMoclttXSxyW3UobSsxKV0sZik7cmV0dXJuIHMucHVzaCh2KSxzLnB1c2goWzAsMF0pLHMucHVzaChzWzBdLnNsaWNlKCkpLHN9KHQsZSxyKX1mdW5jdGlvbiBOKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPW5ldyBBcnJheShlKSxuPTA7bjxlO24rKyl7dmFyIGk9dFtuXTtyW25dPVtpWzBdLC1pWzFdXX1yZXR1cm4gcn1mdW5jdGlvbiBqKHQsZSxyKXt2YXIgbjtpZihyKW49Ik0iK04oRih0LGUscikpLmpvaW4oIkwiKTtlbHNlIGlmKFUoZSkpbj1sLnN5bWJvbEZ1bmNzWzBdKHQpO2Vsc2V7dmFyIGk9TWF0aC5hYnMoZVsxXS1lWzBdKTw9MTgwP1swLDAsMF06WzAsMSwwXTtuPSJNIitbdCpNYXRoLmNvcyh3KGVbMF0pKSwtdCpNYXRoLnNpbih3KGVbMF0pKV0rIkEiK1t0LHRdKyIgIitpKyIgIitbdCpNYXRoLmNvcyh3KGVbMV0pKSwtdCpNYXRoLnNpbih3KGVbMV0pKV19cmV0dXJuIG59ZnVuY3Rpb24gVih0LGUscil7dmFyIG49aih0LGUscik7cmV0dXJuIFUoZSl8fHI/bjpuKyJMMCwwWiJ9ZnVuY3Rpb24gVSh0KXtyZXR1cm4gMzYwPT09TWF0aC5hYnModFsxXS10WzBdKX1mdW5jdGlvbiBxKHQsZSxyKXtyZXR1cm4gZT8odC5hdHRyKCJkaXNwbGF5IixudWxsKSx0LmF0dHIocikpOnQmJnQuYXR0cigiZGlzcGxheSIsIm5vbmUiKSx0fWZ1bmN0aW9uIEgodCxlKXtyZXR1cm4idHJhbnNsYXRlKCIrdCsiLCIrZSsiKSJ9ZnVuY3Rpb24gRyh0KXtyZXR1cm4icm90YXRlKCIrdCsiKSJ9ZnVuY3Rpb24gVyh0KXtyZXR1cm4gTWF0aC5hYnModCk+MWUtMTA/dDowfWZ1bmN0aW9uIFkodCl7cmV0dXJuIE1hdGguYWJzKHQpPDFlLTEwPzA6dD4wPzE6LTF9ZnVuY3Rpb24gWCh0KXtyZXR1cm4gWShNYXRoLmNvcyh0KSl9ZnVuY3Rpb24gWih0KXtyZXR1cm4gWShNYXRoLnNpbih0KSl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBFKHQsZSl9LEMucGxvdD1mdW5jdGlvbih0LGUpe3ZhciByPWVbdGhpcy5pZF07dGhpcy5faGFzQ2xpcE9uQXhpc0ZhbHNlPSExO2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXtpZighMT09PXRbbl1bMF0udHJhY2UuY2xpcG9uYXhpcyl7dGhpcy5faGFzQ2xpcE9uQXhpc0ZhbHNlPSEwO2JyZWFrfX10aGlzLnVwZGF0ZUxheWVycyhlLHIpLHRoaXMudXBkYXRlTGF5b3V0KGUsciksYy5nZW5lcmFsVXBkYXRlUGVyVHJhY2VNb2R1bGUodGhpcy5nZCx0aGlzLHQsciksdGhpcy51cGRhdGVGeChlLHIpfSxDLnVwZGF0ZUxheWVycz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMubGF5ZXJzLGk9ZS5yYWRpYWxheGlzLGE9ZS5hbmd1bGFyYXhpcyxvPVMubGF5ZXJOYW1lcyxzPW8uaW5kZXhPZigiZnJvbnRwbG90IiksbD1vLnNsaWNlKDAscyksYz0iYmVsb3cgdHJhY2VzIj09PWEubGF5ZXIsdT0iYmVsb3cgdHJhY2VzIj09PWkubGF5ZXI7YyYmbC5wdXNoKCJhbmd1bGFyLWF4aXMiKSx1JiZsLnB1c2goInJhZGlhbC1heGlzIiksYyYmbC5wdXNoKCJhbmd1bGFyLWxpbmUiKSx1JiZsLnB1c2goInJhZGlhbC1saW5lIiksbC5wdXNoKCJmcm9udHBsb3QiKSxjfHxsLnB1c2goImFuZ3VsYXItYXhpcyIpLHV8fGwucHVzaCgicmFkaWFsLWF4aXMiKSxjfHxsLnB1c2goImFuZ3VsYXItbGluZSIpLHV8fGwucHVzaCgicmFkaWFsLWxpbmUiKTt2YXIgaD10aGlzLmZyYW1ld29yay5zZWxlY3RBbGwoIi5wb2xhcnN1YmxheWVyIikuZGF0YShsLFN0cmluZyk7aC5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIixmdW5jdGlvbih0KXtyZXR1cm4icG9sYXJzdWJsYXllciAiK3R9KS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXJbdF09bi5zZWxlY3QodGhpcyk7c3dpdGNoKHQpe2Nhc2UiZnJvbnRwbG90IjplLmFwcGVuZCgiZyIpLmNsYXNzZWQoInNjYXR0ZXJsYXllciIsITApO2JyZWFrO2Nhc2UiYmFja3Bsb3QiOmUuYXBwZW5kKCJnIikuY2xhc3NlZCgibWFwbGF5ZXIiLCEwKTticmVhaztjYXNlInBsb3RiZyI6ci5iZz1lLmFwcGVuZCgicGF0aCIpO2JyZWFrO2Nhc2UicmFkaWFsLWdyaWQiOmUuc3R5bGUoImZpbGwiLCJub25lIiksZS5hcHBlbmQoImciKS5jbGFzc2VkKCJ4IiwxKTticmVhaztjYXNlImFuZ3VsYXItZ3JpZCI6ZS5zdHlsZSgiZmlsbCIsIm5vbmUiKSxlLmFwcGVuZCgiZyIpLmNsYXNzZWQoImFuZ3VsYXIiLDEpO2JyZWFrO2Nhc2UicmFkaWFsLWxpbmUiOmUuYXBwZW5kKCJsaW5lIikuc3R5bGUoImZpbGwiLCJub25lIik7YnJlYWs7Y2FzZSJhbmd1bGFyLWxpbmUiOmUuYXBwZW5kKCJwYXRoIikuc3R5bGUoImZpbGwiLCJub25lIil9fSksaC5vcmRlcigpfSxDLnVwZGF0ZUxheW91dD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMsbj1yLmxheWVycyxpPXQuX3NpemUsYT1lLmRvbWFpbi54LGM9ZS5kb21haW4ueTtyLnhPZmZzZXQ9aS5sK2kudyphWzBdLHIueU9mZnNldD1pLnQraS5oKigxLWNbMV0pO3ZhciBoLGYscCxkLGcsbT1yLnhMZW5ndGg9aS53KihhWzFdLWFbMF0pLHY9ci55TGVuZ3RoPWkuaCooY1sxXS1jWzBdKSx5PXIuc2VjdG9yPWUuc2VjdG9yLHg9ci5zZWN0b3JCQm94PWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpLGE9dFswXSxvPXRbMV0tYSxzPU0oYSksbD1zK28sYz1NYXRoLmNvcyh3KHMpKSx1PU1hdGguc2luKHcocykpLGg9TWF0aC5jb3ModyhsKSksZj1NYXRoLnNpbih3KGwpKTtpPXM8PTkwJiZsPj05MHx8cz45MCYmbD49NDUwPzE6dTw9MCYmZjw9MD8wOk1hdGgubWF4KHUsZik7ZT1zPD0xODAmJmw+PTE4MHx8cz4xODAmJmw+PTU0MD8tMTpjPj0wJiZoPj0wPzA6TWF0aC5taW4oYyxoKTtyPXM8PTI3MCYmbD49MjcwfHxzPjI3MCYmbD49NjMwPy0xOnU+PTAmJmY+PTA/MDpNYXRoLm1pbih1LGYpO249bD49MzYwPzE6Yzw9MCYmaDw9MD8wOk1hdGgubWF4KGMsaCk7cmV0dXJuW2UscixuLGldfSh5KSxiPXhbMl0teFswXSxfPXhbM10teFsxXSxrPXYvbSxBPU1hdGguYWJzKF8vYik7az5BPyhoPW0sZz0odi0oZj1tKkEpKS9pLmgvMixwPVthWzBdLGFbMV1dLGQ9W2NbMF0rZyxjWzFdLWddKTooZj12LGc9KG0tKGg9di9BKSkvaS53LzIscD1bYVswXStnLGFbMV0tZ10sZD1bY1swXSxjWzFdXSksci54TGVuZ3RoMj1oLHIueUxlbmd0aDI9ZixyLnhEb21haW4yPXAsci55RG9tYWluMj1kO3ZhciBUPXIueE9mZnNldDI9aS5sK2kudypwWzBdLFM9ci55T2Zmc2V0Mj1pLnQraS5oKigxLWRbMV0pLEU9ci5yYWRpdXM9aC9iLEM9ci5jeD1ULUUqeFswXSxMPXIuY3k9UytFKnhbM10sej1yLmN4eD1DLVQsUD1yLmN5eT1MLVMsST17YW5jaG9yOiJmcmVlIixwb3NpdGlvbjowLF9jb3VudGVyYXhpczohMCxhdXRvbWFyZ2luOiExfTtyLnJhZGlhbEF4aXM9by5leHRlbmRGbGF0KHt9LGUucmFkaWFsYXhpcyxJLHtfYXhpc2xheWVyOm5bInJhZGlhbC1heGlzIl0sX2dyaWRsYXllcjpuWyJyYWRpYWwtZ3JpZCJdLF9pZDoieCIsX3BvczowLHNpZGU6e2NvdW50ZXJjbG9ja3dpc2U6InRvcCIsY2xvY2t3aXNlOiJib3R0b20ifVtlLnJhZGlhbGF4aXMuc2lkZV0sZG9tYWluOlswLEUvaS53XX0pLHIuYW5ndWxhckF4aXM9by5leHRlbmRGbGF0KHt9LGUuYW5ndWxhcmF4aXMsSSx7X2F4aXNsYXllcjpuWyJhbmd1bGFyLWF4aXMiXSxfZ3JpZGxheWVyOm5bImFuZ3VsYXItZ3JpZCJdLF9pZDoiYW5ndWxhciIsX3BvczowLHNpZGU6InJpZ2h0Iixkb21haW46WzAsTWF0aC5QSV0sYXV0b3JhbmdlOiExfSksci5kb0F1dG9SYW5nZSh0LGUpLHIudXBkYXRlQW5ndWxhckF4aXModCxlKSxyLnVwZGF0ZVJhZGlhbEF4aXModCxlKSxyLnVwZGF0ZVJhZGlhbEF4aXNUaXRsZSh0LGUpO3ZhciBPPXIucmFkaWFsQXhpcy5yYW5nZSxEPU9bMV0tT1swXSxSPXIueGF4aXM9e3R5cGU6ImxpbmVhciIsX2lkOiJ4IixyYW5nZTpbeFswXSpELHhbMl0qRF0sZG9tYWluOnB9O3Uuc2V0Q29udmVydChSLHQpLFIuc2V0U2NhbGUoKTt2YXIgQj1yLnlheGlzPXt0eXBlOiJsaW5lYXIiLF9pZDoieSIscmFuZ2U6W3hbMV0qRCx4WzNdKkRdLGRvbWFpbjpkfTt1LnNldENvbnZlcnQoQix0KSxCLnNldFNjYWxlKCksUi5pc1B0V2l0aGluUmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIHIuaXNQdFdpdGhpblNlY3Rvcih0KX0sQi5pc1B0V2l0aGluUmFuZ2U9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sci5jbGlwUGF0aHMuZm9yVHJhY2VzLnNlbGVjdCgicGF0aCIpLmF0dHIoImQiLFYoRSx5LHIudmFuZ2xlcykpLmF0dHIoInRyYW5zZm9ybSIsSCh6LFApKSxuLmZyb250cGxvdC5hdHRyKCJ0cmFuc2Zvcm0iLEgoVCxTKSkuY2FsbChsLnNldENsaXBVcmwsci5faGFzQ2xpcE9uQXhpc0ZhbHNlP251bGw6ci5jbGlwSWRzLmZvclRyYWNlcyksbi5iZy5hdHRyKCJkIixWKEUseSxyLnZhbmdsZXMpKS5hdHRyKCJ0cmFuc2Zvcm0iLEgoQyxMKSkuY2FsbChzLmZpbGwsZS5iZ2NvbG9yKSxyLmZyYW1ld29yay5zZWxlY3RBbGwoIi5jcmlzcCIpLmNsYXNzZWQoImNyaXNwIiwwKX0sQy5kb0F1dG9SYW5nZT1mdW5jdGlvbih0LGUpe3ZhciByPWUucmFkaWFsYXhpcyxuPXRoaXMucmFkaWFsQXhpcztMKG4scix0KSxoKG4pLHIucmFuZ2U9bi5yYW5nZS5zbGljZSgpLHIuX2lucHV0LnJhbmdlPW4ucmFuZ2Uuc2xpY2UoKX0sQy51cGRhdGVSYWRpYWxBeGlzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcyxuPXIuZ2QsaT1yLmxheWVycyxhPXIucmFkaXVzLG89ci5jeCxsPXIuY3ksYz1lLnJhZGlhbGF4aXMsaD1lLnNlY3RvcixmPU0oaFswXSkscD1yLnJhZGlhbEF4aXM7ci5maWxsVmlld0luaXRpYWxLZXkoInJhZGlhbGF4aXMuYW5nbGUiLGMuYW5nbGUpLHIuZmlsbFZpZXdJbml0aWFsS2V5KCJyYWRpYWxheGlzLnJhbmdlIixwLnJhbmdlLnNsaWNlKCkpLCJhdXRvIj09PXAudGlja2FuZ2xlJiZmPjkwJiZmPD0yNzAmJihwLnRpY2thbmdsZT0xODApLHAuX3RyYW5zZm49ZnVuY3Rpb24odCl7cmV0dXJuInRyYW5zbGF0ZSgiK3AubDJwKHQueCkrIiwwKSJ9LHAuX2dyaWRwYXRoPWZ1bmN0aW9uKHQpe3JldHVybiBqKHAucjJwKHQueCksaCxyLnZhbmdsZXMpfTt2YXIgZD16KGMpO3IucmFkaWFsVGlja0xheW91dCE9PWQmJihpWyJyYWRpYWwtYXhpcyJdLnNlbGVjdEFsbCgiLnh0aWNrIikucmVtb3ZlKCksci5yYWRpYWxUaWNrTGF5b3V0PWQpLHUuZG9UaWNrc1NpbmdsZShuLHAsITApO3ZhciBnPXIucmFkaWFsQXhpc0FuZ2xlPXIudmFuZ2xlcz9rKEkodyhjLmFuZ2xlKSxyLnZhbmdsZXMpKTpjLmFuZ2xlLG09SChvLGwpK0coLWcpO3EoaVsicmFkaWFsLWF4aXMiXSxjLnNob3d0aWNrbGFiZWxzfHxjLnRpY2tzLHt0cmFuc2Zvcm06bX0pLHEoaVsicmFkaWFsLWdyaWQiXSxjLnNob3dncmlkLHt0cmFuc2Zvcm06SChvLGwpfSkuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigidHJhbnNmb3JtIixudWxsKSxxKGlbInJhZGlhbC1saW5lIl0uc2VsZWN0KCJsaW5lIiksYy5zaG93bGluZSx7eDE6MCx5MTowLHgyOmEseTI6MCx0cmFuc2Zvcm06bX0pLmF0dHIoInN0cm9rZS13aWR0aCIsYy5saW5ld2lkdGgpLmNhbGwocy5zdHJva2UsYy5saW5lY29sb3IpfSxDLnVwZGF0ZVJhZGlhbEF4aXNUaXRsZT1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5nZCxpPXRoaXMucmFkaXVzLGE9dGhpcy5jeCxvPXRoaXMuY3kscz1lLnJhZGlhbGF4aXMsYz10aGlzLmlkKyJ0aXRsZSIsdT12b2lkIDAhPT1yP3I6dGhpcy5yYWRpYWxBeGlzQW5nbGUsaD13KHUpLGY9TWF0aC5jb3MoaCkscD1NYXRoLnNpbihoKSxkPTA7aWYocy50aXRsZSl7dmFyIG09bC5iQm94KHRoaXMubGF5ZXJzWyJyYWRpYWwtYXhpcyJdLm5vZGUoKSkuaGVpZ2h0LHY9cy50aXRsZWZvbnQuc2l6ZTtkPSJjb3VudGVyY2xvY2t3aXNlIj09PXMuc2lkZT8tbS0uNCp2Om0rLjgqdn10aGlzLmxheWVyc1sicmFkaWFsLWF4aXMtdGl0bGUiXT1nLmRyYXcobixjLHtwcm9wQ29udGFpbmVyOnMscHJvcE5hbWU6dGhpcy5pZCsiLnJhZGlhbGF4aXMudGl0bGUiLHBsYWNlaG9sZGVyOl8obiwiQ2xpY2sgdG8gZW50ZXIgcmFkaWFsIGF4aXMgdGl0bGUiKSxhdHRyaWJ1dGVzOnt4OmEraS8yKmYrZCpwLHk6by1pLzIqcCtkKmYsInRleHQtYW5jaG9yIjoibWlkZGxlIn0sdHJhbnNmb3JtOntyb3RhdGU6LXV9fSl9LEMudXBkYXRlQW5ndWxhckF4aXM9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmdkLGk9dGhpcy5sYXllcnMsYT10aGlzLnJhZGl1cyxvPXRoaXMuY3gsbD10aGlzLmN5LGM9ZS5hbmd1bGFyYXhpcyxoPWUuc2VjdG9yLGY9aC5tYXAodykscD10aGlzLmFuZ3VsYXJBeGlzO2Z1bmN0aW9uIGQodCl7cmV0dXJuIHAuYzJyYWQodC54LCJkZWdyZWVzIil9ZnVuY3Rpb24gZyh0KXtyZXR1cm5bYSpNYXRoLmNvcyh0KSxhKk1hdGguc2luKHQpXX1pZih0aGlzLmZpbGxWaWV3SW5pdGlhbEtleSgiYW5ndWxhcmF4aXMucm90YXRpb24iLGMucm90YXRpb24pLCJsaW5lYXIiPT09cC50eXBlKVUoaCk/cC5yYW5nZT1oLnNsaWNlKCk6cC5yYW5nZT1mLm1hcChwLnVuVHJhbnNmb3JtUmFkKS5tYXAoayksInJhZGlhbnMiPT09cC50aGV0YXVuaXQmJihwLnRpY2swPWsocC50aWNrMCkscC5kdGljaz1rKHAuZHRpY2spKTtlbHNlIGlmKCJjYXRlZ29yeSI9PT1wLnR5cGUpe3ZhciBtPWMucGVyaW9kP01hdGgubWF4KGMucGVyaW9kLGMuX2NhdGVnb3JpZXMubGVuZ3RoKTpjLl9jYXRlZ29yaWVzLmxlbmd0aDtwLnJhbmdlPVswLG1dLHAuX3RpY2tGaWx0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIFAoZCh0KSxoKX19TChwLGMsdCkscC5fdHJhbnNmbj1mdW5jdGlvbih0KXt2YXIgZT1kKHQpLHI9ZyhlKSxpPUgobytyWzBdLGwtclsxXSksYT1uLnNlbGVjdCh0aGlzKTtyZXR1cm4gYSYmYS5ub2RlKCkmJmEuY2xhc3NlZCgidGlja3MiKSYmKGkrPUcoLWsoZSkpKSxpfSxwLl9ncmlkcGF0aD1mdW5jdGlvbih0KXt2YXIgZT1nKGQodCkpO3JldHVybiJNMCwwTCIrLWVbMF0rIiwiK2VbMV19O3ZhciB2PSJvdXRzaWRlIiE9PWMudGlja3M/Ljc6LjU7cC5fbGFiZWx4PWZ1bmN0aW9uKHQpe3ZhciBlPWQodCkscj1wLl9sYWJlbFN0YW5kb2ZmLG49cC5fcGFkO3JldHVybigwPT09WihlKT8wOk1hdGguY29zKGUpKihyK24rdip0LmZvbnRTaXplKSkrWChlKSoodC5keCtyK24pfSxwLl9sYWJlbHk9ZnVuY3Rpb24odCl7dmFyIGU9ZCh0KSxyPXAuX2xhYmVsU3RhbmRvZmYsbj1wLl9sYWJlbFNoaWZ0LGk9cC5fcGFkO3JldHVybiB0LmR5K3QuZm9udFNpemUqYi1uKy1NYXRoLnNpbihlKSoocitpK3YqdC5mb250U2l6ZSl9LHAuX2xhYmVsYW5jaG9yPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZChlKTtyZXR1cm4gMD09PVoocik/WChyKT4wPyJzdGFydCI6ImVuZCI6Im1pZGRsZSJ9O3ZhciB5LHg9eihjKTt0aGlzLmFuZ3VsYXJUaWNrTGF5b3V0IT09eCYmKGlbImFuZ3VsYXItYXhpcyJdLnNlbGVjdEFsbCgiLmFuZ3VsYXJ0aWNrIikucmVtb3ZlKCksdGhpcy5hbmd1bGFyVGlja0xheW91dD14KSx1LmRvVGlja3NTaW5nbGUocixwLCEwKSwibGluZWFyIj09PWUuZ3JpZHNoYXBlP08oKHk9cC5fdmFscy5tYXAoZCkpWzBdLHlbMV0pPDAmJih5PXkuc2xpY2UoKS5yZXZlcnNlKCkpOnk9bnVsbCx0aGlzLnZhbmdsZXM9eSxxKGlbImFuZ3VsYXItbGluZSJdLnNlbGVjdCgicGF0aCIpLGMuc2hvd2xpbmUse2Q6VihhLGgseSksdHJhbnNmb3JtOkgobyxsKX0pLmF0dHIoInN0cm9rZS13aWR0aCIsYy5saW5ld2lkdGgpLmNhbGwocy5zdHJva2UsYy5saW5lY29sb3IpfSxDLnVwZGF0ZUZ4PWZ1bmN0aW9uKHQsZSl7dGhpcy5nZC5fY29udGV4dC5zdGF0aWNQbG90fHwodGhpcy51cGRhdGVBbmd1bGFyRHJhZyh0LGUpLHRoaXMudXBkYXRlUmFkaWFsRHJhZyh0LGUpLHRoaXMudXBkYXRlTWFpbkRyYWcodCxlKSl9LEMudXBkYXRlTWFpbkRyYWc9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLHM9ci5nZCxsPXIubGF5ZXJzLGM9dC5fem9vbWxheWVyLHU9Uy5NSU5aT09NLGg9Uy5PRkZFREdFLGc9ci5yYWRpdXMseT1yLmN4LHg9ci5jeSxiPXIuY3h4LF89ci5jeXksdz1lLnNlY3RvcixrPXIudmFuZ2xlcyxNPVMuY29ybmVySGFsZldpZHRoLEE9Uy5jb3JuZXJMZW4vMixUPXAubWFrZURyYWdnZXIobCwicGF0aCIsIm1haW5kcmFnIiwiY3Jvc3NoYWlyIik7bi5zZWxlY3QoVCkuYXR0cigiZCIsVihnLHcsaykpLmF0dHIoInRyYW5zZm9ybSIsSCh5LHgpKTt2YXIgRSxDLEwseixQLEksTixqLFUscT17ZWxlbWVudDpULGdkOnMsc3VicGxvdDpyLmlkLHBsb3RpbmZvOnt4YXhpczpyLnhheGlzLHlheGlzOnIueWF4aXN9LHhheGVzOltyLnhheGlzXSx5YXhlczpbci55YXhpc119O2Z1bmN0aW9uIEcodCxlKXtyZXR1cm4gTWF0aC5zcXJ0KHQqdCtlKmUpfWZ1bmN0aW9uIFkodCxlKXtyZXR1cm4gRyh0LWIsZS1fKX1mdW5jdGlvbiBYKHQsZSl7cmV0dXJuIE1hdGguYXRhbjIoXy1lLHQtYil9ZnVuY3Rpb24gWih0LGUpe3JldHVyblt0Kk1hdGguY29zKGUpLHQqTWF0aC5zaW4oLWUpXX1mdW5jdGlvbiAkKHQpe3JldHVybiBWKHQsdyxrKX1mdW5jdGlvbiBKKHQsZSl7aWYoMD09PXQpcmV0dXJuICQoMipNKTt2YXIgcj1BL3Qsbj1lLXIsaT1lK3IsYT1NYXRoLm1heCgwLE1hdGgubWluKHQsZykpLG89YS1NLHM9YStNO3JldHVybiJNIitaKG8sbikrIkEiK1tvLG9dKyIgMCwwLDAgIitaKG8saSkrIkwiK1oocyxpKSsiQSIrW3Msc10rIiAwLDAsMSAiK1oocyxuKSsiWiJ9ZnVuY3Rpb24gSyh0LGUscil7aWYoMD09PXQpcmV0dXJuICQoMipNKTt2YXIgbixpLGE9Wih0LGUpLG89Wih0LHIpLHM9VygoYVswXStvWzBdKS8yKSxsPVcoKGFbMV0rb1sxXSkvMik7aWYocyYmbCl7dmFyIGM9bC9zLHU9LTEvYyxoPUIoTSxjLHMsbCk7bj1CKEEsdSxoWzBdWzBdLGhbMF1bMV0pLGk9QihBLHUsaFsxXVswXSxoWzFdWzFdKX1lbHNle3ZhciBmLHA7bD8oZj1BLHA9TSk6KGY9TSxwPUEpLG49W1tzLWYsbC1wXSxbcytmLGwtcF1dLGk9W1tzLWYsbCtwXSxbcytmLGwrcF1dfXJldHVybiJNIituLmpvaW4oIkwiKSsiTCIraS5yZXZlcnNlKCkuam9pbigiTCIpKyJaIn1mdW5jdGlvbiBRKHQsZSl7cmV0dXJuIGU9TWF0aC5taW4oZSxnKSx0PGg/dD0wOmctdDxoP3Q9ZzplPGg/ZT0wOmctZTxoJiYoZT1nKSxNYXRoLmFicyhlLXQpPnU/KHQ8ZT8oTD10LHo9ZSk6KEw9ZSx6PXQpLCEwKTooTD1udWxsLHo9bnVsbCwhMSl9ZnVuY3Rpb24gdHQodCxlKXt0PXR8fFAsZT1lfHwiTTAsMFoiLGouYXR0cigiZCIsdCksVS5hdHRyKCJkIixlKSxwLnRyYW5zaXRpb25ab29tYm94KGosVSxJLE4pLEk9ITB9ZnVuY3Rpb24gZXQodCxlKXt2YXIgcixuLGk9RSt0LGE9QytlLG89WShFLEMpLHM9TWF0aC5taW4oWShpLGEpLGcpLGw9WChFLEMpO1EobyxzKSYmKHI9UCskKHopKyQoTCksbj1KKEwsbCkrSih6LGwpKSx0dChyLG4pfWZ1bmN0aW9uIHJ0KHQpe3ZhciBlPUQoayxmdW5jdGlvbihlKXt2YXIgcj1PKGUsdCk7cmV0dXJuIHI+MD9yOjEvMH0pLHI9by5tb2QoZSsxLGsubGVuZ3RoKTtyZXR1cm5ba1tlXSxrW3JdXX1mdW5jdGlvbiBudCh0LGUscixuKXt2YXIgaT1SKHIsbixyLFt0LWIsXy1lXSk7cmV0dXJuIEcoaVswXSxpWzFdKX1mdW5jdGlvbiBpdCh0LGUpe3ZhciByLG4saT1FK3QsYT1DK2Usbz1YKEUsQykscz1YKGksYSksbD1ydChvKSxjPXJ0KHMpO1EobnQoRSxDLGxbMF0sbFsxXSksTWF0aC5taW4obnQoaSxhLGNbMF0sY1sxXSksZykpJiYocj1QKyQoeikrJChMKSxuPVtLKEwsbFswXSxsWzFdKSxLKHosbFswXSxsWzFdKV0uam9pbigiICIpKSx0dChyLG4pfWZ1bmN0aW9uIGF0KCl7aWYocC5yZW1vdmVab29tYm94KHMpLG51bGwhPT1MJiZudWxsIT09eil7cC5zaG93RG91YmxlQ2xpY2tOb3RpZmllcihzKTt2YXIgdD1yLnJhZGlhbEF4aXMucmFuZ2UsZT10WzFdLXRbMF0sbj17fTtuW3IuaWQrIi5yYWRpYWxheGlzLnJhbmdlIl09W3RbMF0rTCplL2csdFswXSt6KmUvZ10sYS5jYWxsKCJyZWxheW91dCIscyxuKX19cS5wcmVwRm49ZnVuY3Rpb24odCxlLG4pe3ZhciBhPXMuX2Z1bGxMYXlvdXQuZHJhZ21vZGUsbz1ULmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2lmKEU9ZS1vLmxlZnQsQz1uLW8udG9wLGspe3ZhciBsPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49MS8wLGk9MS8wLGE9Rih0LGUsciksbz0wO288YS5sZW5ndGg7bysrKXt2YXIgcz1hW29dO249TWF0aC5taW4obixzWzBdKSxpPU1hdGgubWluKGksLXNbMV0pfXJldHVybltuLGldfShnLHcsayk7RSs9YitsWzBdLEMrPV8rbFsxXX1zd2l0Y2goYSl7Y2FzZSJ6b29tIjpxLm1vdmVGbj1rP2l0OmV0LHEuZG9uZUZuPWF0LGZ1bmN0aW9uKCl7TD1udWxsLHo9bnVsbCxQPSQoZyksST0hMTt2YXIgdD1zLl9mdWxsTGF5b3V0W3IuaWRdO049aSh0LmJnY29sb3IpLmdldEx1bWluYW5jZSgpLChqPXAubWFrZVpvb21ib3goYyxOLHkseCxQKSkuYXR0cigiZmlsbC1ydWxlIiwiZXZlbm9kZCIpLFU9cC5tYWtlQ29ybmVycyhjLHkseCksdihjKX0oKTticmVhaztjYXNlInNlbGVjdCI6Y2FzZSJsYXNzbyI6bSh0LGUsbixxLGEpfX0scS5jbGlja0ZuPWZ1bmN0aW9uKHQsZSl7aWYocC5yZW1vdmVab29tYm94KHMpLDI9PT10KXt2YXIgbj17fTtmb3IodmFyIGkgaW4gci52aWV3SW5pdGlhbCluW3IuaWQrIi4iK2ldPXIudmlld0luaXRpYWxbaV07cy5lbWl0KCJwbG90bHlfZG91YmxlY2xpY2siLG51bGwpLGEuY2FsbCgicmVsYXlvdXQiLHMsbil9ZC5jbGljayhzLGUsci5pZCl9LFQub25tb3VzZW1vdmU9ZnVuY3Rpb24odCl7ZC5ob3ZlcihzLHQsci5pZCkscy5fZnVsbExheW91dC5fbGFzdGhvdmVyPVQscy5fZnVsbExheW91dC5faG92ZXJzdWJwbG90PXIuaWR9LFQub25tb3VzZW91dD1mdW5jdGlvbih0KXtzLl9kcmFnZ2luZ3x8Zi51bmhvdmVyKHMsdCl9LGYuaW5pdChxKX0sQy51cGRhdGVSYWRpYWxEcmFnPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcyxpPXIuZ2Qscz1yLmxheWVycyxsPXIucmFkaXVzLGM9ci5jeCxoPXIuY3ksZD1yLnJhZGlhbEF4aXMsZz1lLnJhZGlhbGF4aXMsbT13KHIucmFkaWFsQXhpc0FuZ2xlKSx5PWQucmFuZ2Uuc2xpY2UoKSx4PXlbMV0teVswXSxiPVMucmFkaWFsRHJhZ0JveFNpemUsXz1iLzI7aWYoZy52aXNpYmxlKXt2YXIgTSxBLFQsRT1wLm1ha2VSZWN0RHJhZ2dlcihzLCJyYWRpYWxkcmFnIiwiY3Jvc3NoYWlyIiwtXywtXyxiLGIpLEM9e2VsZW1lbnQ6RSxnZDppfSxMPWMrKGwrXykqTWF0aC5jb3MobSksej1oLShsK18pKk1hdGguc2luKG0pO24uc2VsZWN0KEUpLmF0dHIoInRyYW5zZm9ybSIsSChMLHopKSxDLnByZXBGbj1mdW5jdGlvbigpe009bnVsbCxBPW51bGwsVD1udWxsLEMubW92ZUZuPVAsQy5kb25lRm49Tyx2KHQuX3pvb21sYXllcil9LEMuY2xhbXBGbj1mdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLnNxcnQodCp0K2UqZSk8Uy5NSU5EUkFHJiYodD0wLGU9MCksW3QsZV19LGYuaW5pdChDKX1mdW5jdGlvbiBQKHQsZSl7aWYoTSlNKHQsZSk7ZWxzZXt2YXIgcj1bdCwtZV0sbj1bTWF0aC5jb3MobSksTWF0aC5zaW4obSldLGk9TWF0aC5hYnMoby5kb3QocixuKS9NYXRoLnNxcnQoby5kb3QocixyKSkpO2lzTmFOKGkpfHwoTT1pPC41P0Q6Uil9fWZ1bmN0aW9uIE8oKXtudWxsIT09QT9hLmNhbGwoInJlbGF5b3V0IixpLHIuaWQrIi5yYWRpYWxheGlzLmFuZ2xlIixBKTpudWxsIT09VCYmYS5jYWxsKCJyZWxheW91dCIsaSxyLmlkKyIucmFkaWFsYXhpcy5yYW5nZVsxXSIsVCl9ZnVuY3Rpb24gRCh0LGUpe3ZhciBuPUwrdCxpPXorZTtBPU1hdGguYXRhbjIoaC1pLG4tYyksci52YW5nbGVzJiYoQT1JKEEsci52YW5nbGVzKSksQT1rKEEpO3ZhciBhPUgoYyxoKStHKC1BKTtzWyJyYWRpYWwtYXhpcyJdLmF0dHIoInRyYW5zZm9ybSIsYSksc1sicmFkaWFsLWxpbmUiXS5zZWxlY3QoImxpbmUiKS5hdHRyKCJ0cmFuc2Zvcm0iLGEpO3ZhciBvPXIuZ2QuX2Z1bGxMYXlvdXQsbD1vW3IuaWRdO3IudXBkYXRlUmFkaWFsQXhpc1RpdGxlKG8sbCxBKX1mdW5jdGlvbiBSKHQsZSl7dmFyIG49by5kb3QoW3QsLWVdLFtNYXRoLmNvcyhtKSxNYXRoLnNpbihtKV0pLGY9eVsxXS14Km4vbCouNzU7aWYoeD4wPT1mPnlbMF0pe1Q9ZC5yYW5nZVsxXT1mLHUuZG9UaWNrc1NpbmdsZShpLHIucmFkaWFsQXhpcywhMCksc1sicmFkaWFsLWdyaWQiXS5hdHRyKCJ0cmFuc2Zvcm0iLEgoYyxoKSkuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigidHJhbnNmb3JtIixudWxsKTt2YXIgcD1ULXlbMF0sZz1yLnNlY3RvckJCb3g7Zm9yKHZhciB2IGluIHIueGF4aXMucmFuZ2U9W2dbMF0qcCxnWzJdKnBdLHIueWF4aXMucmFuZ2U9W2dbMV0qcCxnWzNdKnBdLHIueGF4aXMuc2V0U2NhbGUoKSxyLnlheGlzLnNldFNjYWxlKCksci50cmFjZUhhc2gpe3ZhciBiPXIudHJhY2VIYXNoW3ZdLF89by5maWx0ZXJWaXNpYmxlKGIpLHc9YlswXVswXS50cmFjZS5fbW9kdWxlLGs9aS5fZnVsbExheW91dFtyLmlkXTtpZih3LnBsb3QoaSxyLF8sayksIWEudHJhY2VJcyh2LCJnbCIpKWZvcih2YXIgTT0wO008Xy5sZW5ndGg7TSsrKXcuc3R5bGUoaSxfW01dKX19fX0sQy51cGRhdGVBbmd1bGFyRHJhZz1mdW5jdGlvbih0LGUpe3ZhciByLGk9dGhpcyxzPWkuZ2QsYz1pLmxheWVycyxoPWkucmFkaXVzLGQ9aS5jeCxnPWkuY3ksbT1pLmN4eCx4PWkuY3l5LGI9ZS5zZWN0b3IsXz1TLmFuZ3VsYXJEcmFnQm94U2l6ZSxNPXAubWFrZURyYWdnZXIoYywicGF0aCIsImFuZ3VsYXJkcmFnIiwibW92ZSIpLEU9e2VsZW1lbnQ6TSxnZDpzfTtpZihpLnZhbmdsZXMpe3ZhciBDPU4oRihoK18sYixpLnZhbmdsZXMpKSxMPU4oRihoLGIsaS52YW5nbGVzKSk7cj0iTSIrQy5yZXZlcnNlKCkuam9pbigiTCIpKyJNIitMLmpvaW4oIkwiKX1lbHNlIHI9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYSxvPU1hdGguYWJzKHJbMV0tclswXSk8PTE4MD8wOjE7ZnVuY3Rpb24gcyh0LGUpe3JldHVyblt0Kk1hdGguY29zKGUpLC10Kk1hdGguc2luKGUpXX1mdW5jdGlvbiBsKHQsZSxyKXtyZXR1cm4iQSIrW3QsdF0rIiAiK1swLG8scl0rIiAiK3ModCxlKX1yZXR1cm4gVShyKT8obj0wLGE9MipNYXRoLlBJLGk9TWF0aC5QSSwiTSIrcyh0LG4pK2wodCxpLDApK2wodCxhLDApKyJaTSIrcyhlLG4pK2woZSxpLDEpK2woZSxhLDEpKyJaIik6KG49dyhyWzBdKSxhPXcoclsxXSksIk0iK3ModCxuKSsiTCIrcyhlLG4pK2woZSxhLDApKyJMIitzKHQsYSkrbCh0LG4sMSkrIloiKX0oaCxoK18sYik7ZnVuY3Rpb24geih0LGUpe3JldHVybiBNYXRoLmF0YW4yKHgrXy1lLHQtbS1fKX1uLnNlbGVjdChNKS5hdHRyKCJkIixyKS5hdHRyKCJ0cmFuc2Zvcm0iLEgoZCxnKSkuY2FsbCh5LCJtb3ZlIik7dmFyIFAsSSxPLEQsUixCLGosVj1jLmZyb250cGxvdC5zZWxlY3QoIi5zY2F0dGVybGF5ZXIiKS5zZWxlY3RBbGwoIi50cmFjZSIpLHE9Vi5zZWxlY3RBbGwoIi5wb2ludCIpLFc9Vi5zZWxlY3RBbGwoIi50ZXh0cG9pbnQiKTtmdW5jdGlvbiBZKHQsZSl7dmFyIHI9aS5nZC5fZnVsbExheW91dCxoPXJbaS5pZF0sZj16KFArdCxJK2UpLHA9ayhmLWopO2lmKEQ9TytwLGMuZnJvbnRwbG90LmF0dHIoInRyYW5zZm9ybSIsSChpLnhPZmZzZXQyLGkueU9mZnNldDIpK0coWy1wLG0seF0pKSxpLnZhbmdsZXMpe1I9aS5yYWRpYWxBeGlzQW5nbGUrcDt2YXIgdj1IKGQsZykrRygtcCkseT1IKGQsZykrRygtUik7Yy5iZy5hdHRyKCJ0cmFuc2Zvcm0iLHYpLGNbInJhZGlhbC1ncmlkIl0uYXR0cigidHJhbnNmb3JtIix2KSxjWyJhbmd1bGFyLWxpbmUiXS5zZWxlY3QoInBhdGgiKS5hdHRyKCJ0cmFuc2Zvcm0iLHYpLGNbInJhZGlhbC1heGlzIl0uYXR0cigidHJhbnNmb3JtIix5KSxjWyJyYWRpYWwtbGluZSJdLnNlbGVjdCgibGluZSIpLmF0dHIoInRyYW5zZm9ybSIseSksaS51cGRhdGVSYWRpYWxBeGlzVGl0bGUocixoLFIpfWVsc2UgaS5jbGlwUGF0aHMuZm9yVHJhY2VzLnNlbGVjdCgicGF0aCIpLmF0dHIoInRyYW5zZm9ybSIsSChtLHgpK0cocCkpO3EuZWFjaChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpLGU9bC5nZXRUcmFuc2xhdGUodCk7dC5hdHRyKCJ0cmFuc2Zvcm0iLEgoZS54LGUueSkrRyhbcF0pKX0pLFcuZWFjaChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpLGU9dC5zZWxlY3QoInRleHQiKSxyPWwuZ2V0VHJhbnNsYXRlKHQpO3QuYXR0cigidHJhbnNmb3JtIixHKFtwLGUuYXR0cigieCIpLGUuYXR0cigieSIpXSkrSChyLngsci55KSl9KTt2YXIgXz1pLmFuZ3VsYXJBeGlzO2Zvcih2YXIgTSBpbiBfLnJvdGF0aW9uPUEoRCksImxpbmVhciIhPT1fLnR5cGV8fFUoYil8fChfLnJhbmdlPUIubWFwKHcpLm1hcChfLnVuVHJhbnNmb3JtUmFkKS5tYXAoaykpLFQoXyksdS5kb1RpY2tzU2luZ2xlKHMsXywhMCksaS5faGFzQ2xpcE9uQXhpc0ZhbHNlJiYhVShiKSYmKGkuc2VjdG9yPVtCWzBdLXAsQlsxXS1wXSxWLmNhbGwobC5oaWRlT3V0c2lkZVJhbmdlUG9pbnRzLGkpKSxpLnRyYWNlSGFzaClpZihhLnRyYWNlSXMoTSwiZ2wiKSl7dmFyIFM9aS50cmFjZUhhc2hbTV0sRT1vLmZpbHRlclZpc2libGUoUyk7U1swXVswXS50cmFjZS5fbW9kdWxlLnBsb3QocyxpLEUsaCl9fWZ1bmN0aW9uIFgoKXtXLnNlbGVjdCgidGV4dCIpLmF0dHIoInRyYW5zZm9ybSIsbnVsbCk7dmFyIHQ9e307dFtpLmlkKyIuYW5ndWxhcmF4aXMucm90YXRpb24iXT1ELGkudmFuZ2xlcyYmKHRbaS5pZCsiLnJhZGlhbGF4aXMuYW5nbGUiXT1SKSxhLmNhbGwoInJlbGF5b3V0IixzLHQpfUUucHJlcEZuPWZ1bmN0aW9uKGUscixuKXt2YXIgYT10W2kuaWRdO0I9YS5zZWN0b3Iuc2xpY2UoKSxPPWEuYW5ndWxhcmF4aXMucm90YXRpb247dmFyIG89TS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtQPXItby5sZWZ0LEk9bi1vLnRvcCxqPXooUCxJKSxFLm1vdmVGbj1ZLEUuZG9uZUZuPVgsdih0Ll96b29tbGF5ZXIpfSxpLnZhbmdsZXMmJiFVKGIpJiYoRS5wcmVwRm49by5ub29wLHkobi5zZWxlY3QoTSksbnVsbCkpLGYuaW5pdChFKX0sQy5pc1B0V2l0aGluU2VjdG9yPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc2VjdG9yO2lmKCFQKHQucmFkLGUpKXJldHVybiExO3ZhciByLG4saT10aGlzLnZhbmdsZXMsYT10aGlzLnJhZGlhbEF4aXMsbz1hLnJhbmdlLHM9YS5jMnIodC5yKTtpZihvWzFdPj1vWzBdPyhyPW9bMF0sbj1vWzFdKToocj1vWzFdLG49b1swXSksaSl7dmFyIGw9eChGKHIsZSxpKSksYz14KEYobixlLGkpKSx1PVtzKk1hdGguY29zKHQucmFkKSxzKk1hdGguc2luKHQucmFkKV07cmV0dXJuIGMuY29udGFpbnModSkmJiFsLmNvbnRhaW5zKHUpfXJldHVybiBzPj1yJiZzPD1ufSxDLmZpbGxWaWV3SW5pdGlhbEtleT1mdW5jdGlvbih0LGUpe3QgaW4gdGhpcy52aWV3SW5pdGlhbHx8KHRoaXMudmlld0luaXRpYWxbdF09ZSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjU1OCwiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudCI6NTgwLCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjU4MywiLi4vLi4vY29tcG9uZW50cy9meCI6NjAwLCIuLi8uLi9jb21wb25lbnRzL3RpdGxlcyI6NjQ5LCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50Ijo2NTYsIi4uLy4uL2xpYiI6Njg0LCIuLi8uLi9saWIvcG9seWdvbiI6Njk2LCIuLi8uLi9saWIvc2V0Y3Vyc29yIjo3MDQsIi4uLy4uL3JlZ2lzdHJ5Ijo4MTcsIi4uL2NhcnRlc2lhbi9hdXRvcmFuZ2UiOjczMSwiLi4vY2FydGVzaWFuL2F4ZXMiOjczMiwiLi4vY2FydGVzaWFuL2RyYWdib3giOjc0MCwiLi4vY2FydGVzaWFuL3NlbGVjdCI6NzQ5LCIuLi9wbG90cyI6Nzk1LCIuL2NvbnN0YW50cyI6Nzk2LCIuL2hlbHBlcnMiOjc5NyxkMzoxNDcsdGlueWNvbG9yMjo0OTl9XSw4MDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3JldHVybiJzcGxvbSI9PT10Py0xOiJzcGxvbSI9PT1lPzE6MH1lLmV4cG9ydHM9e3NvcnRCYXNlUGxvdE1vZHVsZXM6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbih0Lm5hbWUsZS5uYW1lKX0sc29ydE1vZHVsZXM6bn19LHt9XSw4MDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vbGliIiksaT10KCIuLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIiksYT10KCIuL2RvbWFpbiIpLmRlZmF1bHRzO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvKXt2YXIgcyxsLGM9by50eXBlLHU9by5hdHRyaWJ1dGVzLGg9by5oYW5kbGVEZWZhdWx0cyxmPW8ucGFydGl0aW9ufHwieCIscD1lLl9zdWJwbG90c1tjXSxkPXAubGVuZ3RoLGc9ZCYmcFswXS5yZXBsYWNlKC9cZCskLywiIik7ZnVuY3Rpb24gbSh0LGUpe3JldHVybiBuLmNvZXJjZShzLGwsdSx0LGUpfWZvcih2YXIgdj0wO3Y8ZDt2Kyspe3ZhciB5PXBbdl07cz10W3ldP3RbeV06dFt5XT17fSxsPWkubmV3Q29udGFpbmVyKGUseSxnKTt2YXIgeD17fTt4W2ZdPVt2L2QsKHYrMSkvZF0sYShsLGUsbSx4KSxvLmlkPXksaChzLGwsbSxvKX19fSx7Ii4uL2xpYiI6Njg0LCIuLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo3MjIsIi4vZG9tYWluIjo3NTd9XSw4MTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi90ZXJuYXJ5IiksaT10KCIuLi8uLi9wbG90cy9nZXRfZGF0YSIpLmdldFN1YnBsb3RDYWxjRGF0YSxhPXQoIi4uLy4uL2xpYiIpLmNvdW50ZXJSZWdleDtyLm5hbWU9InRlcm5hcnkiLHIuYXR0cj0ic3VicGxvdCIsci5pZFJvb3Q9InRlcm5hcnkiLHIuaWRSZWdleD1yLmF0dHJSZWdleD1hKCJ0ZXJuYXJ5Iiksci5hdHRyaWJ1dGVzPXQoIi4vbGF5b3V0L2F0dHJpYnV0ZXMiKSxyLmxheW91dEF0dHJpYnV0ZXM9dCgiLi9sYXlvdXQvbGF5b3V0X2F0dHJpYnV0ZXMiKSxyLnN1cHBseUxheW91dERlZmF1bHRzPXQoIi4vbGF5b3V0L2RlZmF1bHRzIiksci5wbG90PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0LHI9dC5jYWxjZGF0YSxhPWUuX3N1YnBsb3RzLnRlcm5hcnksbz0wO288YS5sZW5ndGg7bysrKXt2YXIgcz1hW29dLGw9aShyLCJ0ZXJuYXJ5IixzKSxjPWVbc10uX3N1YnBsb3Q7Y3x8KGM9bmV3IG4oe2lkOnMsZ3JhcGhEaXY6dCxjb250YWluZXI6ZS5fdGVybmFyeWxheWVyLm5vZGUoKX0sZSksZVtzXS5fc3VicGxvdD1jKSxjLnBsb3QobCxlLHQuX3Byb21pc2VzKX19LHIuY2xlYW49ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPW4uX3N1YnBsb3RzLnRlcm5hcnl8fFtdLGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIG89aVthXSxzPW5bb10uX3N1YnBsb3Q7IWVbb10mJnMmJihzLnBsb3RDb250YWluZXIucmVtb3ZlKCkscy5jbGlwRGVmLnJlbW92ZSgpLHMuY2xpcERlZlJlbGF0aXZlLnJlbW92ZSgpLHMubGF5ZXJzWyJhLXRpdGxlIl0ucmVtb3ZlKCkscy5sYXllcnNbImItdGl0bGUiXS5yZW1vdmUoKSxzLmxheWVyc1siYy10aXRsZSJdLnJlbW92ZSgpKX19fSx7Ii4uLy4uL2xpYiI6Njg0LCIuLi8uLi9wbG90cy9nZXRfZGF0YSI6NzY4LCIuL2xheW91dC9hdHRyaWJ1dGVzIjo4MTEsIi4vbGF5b3V0L2RlZmF1bHRzIjo4MTQsIi4vbGF5b3V0L2xheW91dF9hdHRyaWJ1dGVzIjo4MTUsIi4vdGVybmFyeSI6ODE2fV0sODExOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17c3VicGxvdDp7dmFsVHlwZToic3VicGxvdGlkIixkZmx0OiJ0ZXJuYXJ5IixlZGl0VHlwZToiY2FsYyJ9fX0se31dLDgxMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz17dGl0bGU6bi50aXRsZSx0aXRsZWZvbnQ6bi50aXRsZWZvbnQsY29sb3I6bi5jb2xvcix0aWNrbW9kZTpuLnRpY2ttb2RlLG50aWNrczppKHt9LG4ubnRpY2tzLHtkZmx0OjYsbWluOjF9KSx0aWNrMDpuLnRpY2swLGR0aWNrOm4uZHRpY2ssdGlja3ZhbHM6bi50aWNrdmFscyx0aWNrdGV4dDpuLnRpY2t0ZXh0LHRpY2tzOm4udGlja3MsdGlja2xlbjpuLnRpY2tsZW4sdGlja3dpZHRoOm4udGlja3dpZHRoLHRpY2tjb2xvcjpuLnRpY2tjb2xvcixzaG93dGlja2xhYmVsczpuLnNob3d0aWNrbGFiZWxzLHNob3d0aWNrcHJlZml4Om4uc2hvd3RpY2twcmVmaXgsdGlja3ByZWZpeDpuLnRpY2twcmVmaXgsc2hvd3RpY2tzdWZmaXg6bi5zaG93dGlja3N1ZmZpeCx0aWNrc3VmZml4Om4udGlja3N1ZmZpeCxzaG93ZXhwb25lbnQ6bi5zaG93ZXhwb25lbnQsZXhwb25lbnRmb3JtYXQ6bi5leHBvbmVudGZvcm1hdCxzZXBhcmF0ZXRob3VzYW5kczpuLnNlcGFyYXRldGhvdXNhbmRzLHRpY2tmb250Om4udGlja2ZvbnQsdGlja2FuZ2xlOm4udGlja2FuZ2xlLHRpY2tmb3JtYXQ6bi50aWNrZm9ybWF0LHRpY2tmb3JtYXRzdG9wczpuLnRpY2tmb3JtYXRzdG9wcyxob3ZlcmZvcm1hdDpuLmhvdmVyZm9ybWF0LHNob3dsaW5lOmkoe30sbi5zaG93bGluZSx7ZGZsdDohMH0pLGxpbmVjb2xvcjpuLmxpbmVjb2xvcixsaW5ld2lkdGg6bi5saW5ld2lkdGgsc2hvd2dyaWQ6aSh7fSxuLnNob3dncmlkLHtkZmx0OiEwfSksZ3JpZGNvbG9yOm4uZ3JpZGNvbG9yLGdyaWR3aWR0aDpuLmdyaWR3aWR0aCxsYXllcjpuLmxheWVyLG1pbjp7dmFsVHlwZToibnVtYmVyIixkZmx0OjAsbWluOjB9fX0seyIuLi8uLi8uLi9saWIvZXh0ZW5kIjo2NzMsIi4uLy4uL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyI6NzQ0fV0sODEzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uLy4uL2xpYiIpLGk9dCgiLi9heGlzX2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2NhcnRlc2lhbi90aWNrX2xhYmVsX2RlZmF1bHRzIiksbz10KCIuLi8uLi9jYXJ0ZXNpYW4vdGlja19tYXJrX2RlZmF1bHRzIikscz10KCIuLi8uLi9jYXJ0ZXNpYW4vdGlja192YWx1ZV9kZWZhdWx0cyIpLGw9dCgiLi4vLi4vY2FydGVzaWFuL2xpbmVfZ3JpZF9kZWZhdWx0cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gYyhyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaSxyLGEpfWUudHlwZT0ibGluZWFyIjt2YXIgdT1jKCJjb2xvciIpLGg9dSE9PWkuY29sb3IuZGZsdD91OnIuZm9udC5jb2xvcixmPWUuX25hbWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkscD0iQ29tcG9uZW50ICIrZixkPWMoInRpdGxlIixwKTtlLl9ob3ZlcnRpdGxlPWQ9PT1wP2Q6ZixuLmNvZXJjZUZvbnQoYywidGl0bGVmb250Iix7ZmFtaWx5OnIuZm9udC5mYW1pbHksc2l6ZTpNYXRoLnJvdW5kKDEuMipyLmZvbnQuc2l6ZSksY29sb3I6aH0pLGMoIm1pbiIpLHModCxlLGMsImxpbmVhciIpLGEodCxlLGMsImxpbmVhciIse30pLG8odCxlLGMse291dGVyVGlja3M6ITB9KSxjKCJzaG93dGlja2xhYmVscyIpJiYobi5jb2VyY2VGb250KGMsInRpY2tmb250Iix7ZmFtaWx5OnIuZm9udC5mYW1pbHksc2l6ZTpyLmZvbnQuc2l6ZSxjb2xvcjpofSksYygidGlja2FuZ2xlIiksYygidGlja2Zvcm1hdCIpKSxsKHQsZSxjLHtkZmx0Q29sb3I6dSxiZ0NvbG9yOnIuYmdDb2xvcixibGVuZDo2MCxzaG93TGluZTohMCxzaG93R3JpZDohMCxub1plcm9MaW5lOiEwLGF0dHJpYnV0ZXM6aX0pLGMoImhvdmVyZm9ybWF0IiksYygibGF5ZXIiKX19LHsiLi4vLi4vLi4vbGliIjo2ODQsIi4uLy4uL2NhcnRlc2lhbi9saW5lX2dyaWRfZGVmYXVsdHMiOjc0NiwiLi4vLi4vY2FydGVzaWFuL3RpY2tfbGFiZWxfZGVmYXVsdHMiOjc1MSwiLi4vLi4vY2FydGVzaWFuL3RpY2tfbWFya19kZWZhdWx0cyI6NzUyLCIuLi8uLi9jYXJ0ZXNpYW4vdGlja192YWx1ZV9kZWZhdWx0cyI6NzUzLCIuL2F4aXNfYXR0cmlidXRlcyI6ODEyfV0sODE0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxpPXQoIi4uLy4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKSxhPXQoIi4uLy4uL3N1YnBsb3RfZGVmYXVsdHMiKSxvPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxzPXQoIi4vYXhpc19kZWZhdWx0cyIpLGw9WyJhYXhpcyIsImJheGlzIiwiY2F4aXMiXTtmdW5jdGlvbiBjKHQsZSxyLGEpe3ZhciBvLGMsdSxoPXIoImJnY29sb3IiKSxmPXIoInN1bSIpO2EuYmdDb2xvcj1uLmNvbWJpbmUoaCxhLnBhcGVyX2JnY29sb3IpO2Zvcih2YXIgcD0wO3A8bC5sZW5ndGg7cCsrKWM9dFtvPWxbcF1dfHx7fSwodT1pLm5ld0NvbnRhaW5lcihlLG8pKS5fbmFtZT1vLHMoYyx1LGEpO3ZhciBkPWUuYWF4aXMsZz1lLmJheGlzLG09ZS5jYXhpcztkLm1pbitnLm1pbittLm1pbj49ZiYmKGQubWluPTAsZy5taW49MCxtLm1pbj0wLHQuYWF4aXMmJmRlbGV0ZSB0LmFheGlzLm1pbix0LmJheGlzJiZkZWxldGUgdC5iYXhpcy5taW4sdC5jYXhpcyYmZGVsZXRlIHQuY2F4aXMubWluKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2EodCxlLHIse3R5cGU6InRlcm5hcnkiLGF0dHJpYnV0ZXM6byxoYW5kbGVEZWZhdWx0czpjLGZvbnQ6ZS5mb250LHBhcGVyX2JnY29sb3I6ZS5wYXBlcl9iZ2NvbG9yfSl9fSx7Ii4uLy4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjU1OCwiLi4vLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6NzIyLCIuLi8uLi9zdWJwbG90X2RlZmF1bHRzIjo4MDksIi4vYXhpc19kZWZhdWx0cyI6ODEzLCIuL2xheW91dF9hdHRyaWJ1dGVzIjo4MTV9XSw4MTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9kb21haW4iKS5hdHRyaWJ1dGVzLGE9dCgiLi9heGlzX2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbDtlLmV4cG9ydHM9byh7ZG9tYWluOmkoe25hbWU6InRlcm5hcnkifSksYmdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6bi5iYWNrZ3JvdW5kfSxzdW06e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxLG1pbjowfSxhYXhpczphLGJheGlzOmEsY2F4aXM6YX0sInBsb3QiLCJmcm9tLXJvb3QiKX0seyIuLi8uLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiOjU1NywiLi4vLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6NzE1LCIuLi8uLi9kb21haW4iOjc1NywiLi9heGlzX2F0dHJpYnV0ZXMiOjgxMn1dLDgxNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgidGlueWNvbG9yMiIpLGE9dCgiLi4vLi4vcmVnaXN0cnkiKSxvPXQoIi4uLy4uL2xpYiIpLHM9by5fLGw9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGM9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksdT10KCIuLi9jYXJ0ZXNpYW4vc2V0X2NvbnZlcnQiKSxoPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGY9dCgiLi4vcGxvdHMiKSxwPXQoIi4uL2NhcnRlc2lhbi9heGVzIiksZD10KCIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50IiksZz10KCIuLi8uLi9jb21wb25lbnRzL2Z4IiksbT10KCIuLi8uLi9jb21wb25lbnRzL3RpdGxlcyIpLHY9dCgiLi4vY2FydGVzaWFuL3NlbGVjdCIpLnByZXBTZWxlY3QseT10KCIuLi9jYXJ0ZXNpYW4vc2VsZWN0IikuY2xlYXJTZWxlY3QseD10KCIuLi9jYXJ0ZXNpYW4vY29uc3RhbnRzIik7ZnVuY3Rpb24gYih0LGUpe3RoaXMuaWQ9dC5pZCx0aGlzLmdyYXBoRGl2PXQuZ3JhcGhEaXYsdGhpcy5pbml0KGUpLHRoaXMubWFrZUZyYW1ld29yayhlKX1lLmV4cG9ydHM9Yjt2YXIgXz1iLnByb3RvdHlwZTtfLmluaXQ9ZnVuY3Rpb24odCl7dGhpcy5jb250YWluZXI9dC5fdGVybmFyeWxheWVyLHRoaXMuZGVmcz10Ll9kZWZzLHRoaXMubGF5b3V0SWQ9dC5fdWlkLHRoaXMudHJhY2VIYXNoPXt9LHRoaXMubGF5ZXJzPXt9fSxfLnBsb3Q9ZnVuY3Rpb24odCxlKXt2YXIgcj1lW3RoaXMuaWRdLG49ZS5fc2l6ZTt0aGlzLl9oYXNDbGlwT25BeGlzRmFsc2U9ITE7Zm9yKHZhciBpPTA7aTx0Lmxlbmd0aDtpKyspe2lmKCExPT09dFtpXVswXS50cmFjZS5jbGlwb25heGlzKXt0aGlzLl9oYXNDbGlwT25BeGlzRmFsc2U9ITA7YnJlYWt9fXRoaXMudXBkYXRlTGF5ZXJzKHIpLHRoaXMuYWRqdXN0TGF5b3V0KHIsbiksZi5nZW5lcmFsVXBkYXRlUGVyVHJhY2VNb2R1bGUodGhpcy5ncmFwaERpdix0aGlzLHQsciksdGhpcy5sYXllcnMucGxvdGJnLnNlbGVjdCgicGF0aCIpLmNhbGwobC5maWxsLHIuYmdjb2xvcil9LF8ubWFrZUZyYW1ld29yaz1mdW5jdGlvbih0KXt2YXIgZT10W3RoaXMuaWRdLHI9dGhpcy5jbGlwSWQ9ImNsaXAiK3RoaXMubGF5b3V0SWQrdGhpcy5pZCxuPXRoaXMuY2xpcElkUmVsYXRpdmU9ImNsaXAtcmVsYXRpdmUiK3RoaXMubGF5b3V0SWQrdGhpcy5pZDt0aGlzLmNsaXBEZWY9by5lbnN1cmVTaW5nbGVCeUlkKHQuX2NsaXBzLCJjbGlwUGF0aCIscixmdW5jdGlvbih0KXt0LmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNMCwwWiIpfSksdGhpcy5jbGlwRGVmUmVsYXRpdmU9by5lbnN1cmVTaW5nbGVCeUlkKHQuX2NsaXBzLCJjbGlwUGF0aCIsbixmdW5jdGlvbih0KXt0LmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNMCwwWiIpfSksdGhpcy5wbG90Q29udGFpbmVyPW8uZW5zdXJlU2luZ2xlKHRoaXMuY29udGFpbmVyLCJnIix0aGlzLmlkKSx0aGlzLnVwZGF0ZUxheWVycyhlKSxjLnNldENsaXBVcmwodGhpcy5sYXllcnMuYmFja3Bsb3QsciksYy5zZXRDbGlwVXJsKHRoaXMubGF5ZXJzLmdyaWRzLHIpfSxfLnVwZGF0ZUxheWVycz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmxheWVycyxyPVsiZHJhZ2xheWVyIiwicGxvdGJnIiwiYmFja3Bsb3QiLCJncmlkcyJdOyJiZWxvdyB0cmFjZXMiPT09dC5hYXhpcy5sYXllciYmci5wdXNoKCJhYXhpcyIsImFsaW5lIiksImJlbG93IHRyYWNlcyI9PT10LmJheGlzLmxheWVyJiZyLnB1c2goImJheGlzIiwiYmxpbmUiKSwiYmVsb3cgdHJhY2VzIj09PXQuY2F4aXMubGF5ZXImJnIucHVzaCgiY2F4aXMiLCJjbGluZSIpLHIucHVzaCgiZnJvbnRwbG90IiksImFib3ZlIHRyYWNlcyI9PT10LmFheGlzLmxheWVyJiZyLnB1c2goImFheGlzIiwiYWxpbmUiKSwiYWJvdmUgdHJhY2VzIj09PXQuYmF4aXMubGF5ZXImJnIucHVzaCgiYmF4aXMiLCJibGluZSIpLCJhYm92ZSB0cmFjZXMiPT09dC5jYXhpcy5sYXllciYmci5wdXNoKCJjYXhpcyIsImNsaW5lIik7dmFyIGk9dGhpcy5wbG90Q29udGFpbmVyLnNlbGVjdEFsbCgiZy50b3BsZXZlbCIpLmRhdGEocixTdHJpbmcpLGE9WyJhZ3JpZCIsImJncmlkIiwiY2dyaWQiXTtpLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLGZ1bmN0aW9uKHQpe3JldHVybiJ0b3BsZXZlbCAiK3R9KS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciByPW4uc2VsZWN0KHRoaXMpO2VbdF09ciwiZnJvbnRwbG90Ij09PXQ/ci5hcHBlbmQoImciKS5jbGFzc2VkKCJzY2F0dGVybGF5ZXIiLCEwKToiYmFja3Bsb3QiPT09dD9yLmFwcGVuZCgiZyIpLmNsYXNzZWQoIm1hcGxheWVyIiwhMCk6InBsb3RiZyI9PT10P3IuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0wLDBaIik6ImFsaW5lIj09PXR8fCJibGluZSI9PT10fHwiY2xpbmUiPT09dD9yLmFwcGVuZCgicGF0aCIpOiJncmlkcyI9PT10JiZhLmZvckVhY2goZnVuY3Rpb24odCl7ZVt0XT1yLmFwcGVuZCgiZyIpLmNsYXNzZWQoImdyaWQgIit0LCEwKTt2YXIgbj0iYmdyaWQiPT09dD8ieCI6InkiO2VbdF0uYXBwZW5kKCJnIikuY2xhc3NlZChuLCEwKX0pfSksaS5vcmRlcigpfTt2YXIgdz1NYXRoLnNxcnQoNC8zKTtfLmFkanVzdExheW91dD1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxhLG8scyxmPXRoaXMscD10LmRvbWFpbixkPShwLnhbMF0rcC54WzFdKS8yLGc9KHAueVswXStwLnlbMV0pLzIsbT1wLnhbMV0tcC54WzBdLHY9cC55WzFdLXAueVswXSx5PW0qZS53LHg9diplLmgsYj10LnN1bSxfPXQuYWF4aXMubWluLGs9dC5iYXhpcy5taW4sTT10LmNheGlzLm1pbjt5PncqeD9pPShhPXgpKnc6YT0oaT15KS93LG89bSppL3kscz12KmEveCxyPWUubCtlLncqZC1pLzIsbj1lLnQrZS5oKigxLWcpLWEvMixmLngwPXIsZi55MD1uLGYudz1pLGYuaD1hLGYuc3VtPWIsZi54YXhpcz17dHlwZToibGluZWFyIixyYW5nZTpbXysyKk0tYixiLV8tMiprXSxkb21haW46W2Qtby8yLGQrby8yXSxfaWQ6IngifSx1KGYueGF4aXMsZi5ncmFwaERpdi5fZnVsbExheW91dCksZi54YXhpcy5zZXRTY2FsZSgpLGYueGF4aXMuaXNQdFdpdGhpblJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiB0LmE+PWYuYWF4aXMucmFuZ2VbMF0mJnQuYTw9Zi5hYXhpcy5yYW5nZVsxXSYmdC5iPj1mLmJheGlzLnJhbmdlWzFdJiZ0LmI8PWYuYmF4aXMucmFuZ2VbMF0mJnQuYz49Zi5jYXhpcy5yYW5nZVsxXSYmdC5jPD1mLmNheGlzLnJhbmdlWzBdfSxmLnlheGlzPXt0eXBlOiJsaW5lYXIiLHJhbmdlOltfLGItay1NXSxkb21haW46W2ctcy8yLGcrcy8yXSxfaWQ6InkifSx1KGYueWF4aXMsZi5ncmFwaERpdi5fZnVsbExheW91dCksZi55YXhpcy5zZXRTY2FsZSgpLGYueWF4aXMuaXNQdFdpdGhpblJhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuITB9O3ZhciBBPWYueWF4aXMuZG9tYWluWzBdLFQ9Zi5hYXhpcz1oKHt9LHQuYWF4aXMse3Zpc2libGU6ITAscmFuZ2U6W18sYi1rLU1dLHNpZGU6ImxlZnQiLF9jb3VudGVyYW5nbGU6MzAsdGlja2FuZ2xlOigrdC5hYXhpcy50aWNrYW5nbGV8fDApLTMwLGRvbWFpbjpbQSxBK3Mqd10sX2F4aXNsYXllcjpmLmxheWVycy5hYXhpcyxfZ3JpZGxheWVyOmYubGF5ZXJzLmFncmlkLF9wb3M6MCxfaWQ6InkiLF9sZW5ndGg6aSxfZ3JpZHBhdGg6Ik0wLDBsIithKyIsLSIraS8yLGF1dG9tYXJnaW46ITF9KTt1KFQsZi5ncmFwaERpdi5fZnVsbExheW91dCksVC5zZXRTY2FsZSgpO3ZhciBTPWYuYmF4aXM9aCh7fSx0LmJheGlzLHt2aXNpYmxlOiEwLHJhbmdlOltiLV8tTSxrXSxzaWRlOiJib3R0b20iLF9jb3VudGVyYW5nbGU6MzAsZG9tYWluOmYueGF4aXMuZG9tYWluLF9heGlzbGF5ZXI6Zi5sYXllcnMuYmF4aXMsX2dyaWRsYXllcjpmLmxheWVycy5iZ3JpZCxfY291bnRlcmF4aXM6Zi5hYXhpcyxfcG9zOjAsX2lkOiJ4IixfbGVuZ3RoOmksX2dyaWRwYXRoOiJNMCwwbC0iK2kvMisiLC0iK2EsYXV0b21hcmdpbjohMX0pO3UoUyxmLmdyYXBoRGl2Ll9mdWxsTGF5b3V0KSxTLnNldFNjYWxlKCksVC5fY291bnRlcmF4aXM9Uzt2YXIgRT1mLmNheGlzPWgoe30sdC5jYXhpcyx7dmlzaWJsZTohMCxyYW5nZTpbYi1fLWssTV0sc2lkZToicmlnaHQiLF9jb3VudGVyYW5nbGU6MzAsdGlja2FuZ2xlOigrdC5jYXhpcy50aWNrYW5nbGV8fDApKzMwLGRvbWFpbjpbQSxBK3Mqd10sX2F4aXNsYXllcjpmLmxheWVycy5jYXhpcyxfZ3JpZGxheWVyOmYubGF5ZXJzLmNncmlkLF9jb3VudGVyYXhpczpmLmJheGlzLF9wb3M6MCxfaWQ6InkiLF9sZW5ndGg6aSxfZ3JpZHBhdGg6Ik0wLDBsLSIrYSsiLCIraS8yLGF1dG9tYXJnaW46ITF9KTt1KEUsZi5ncmFwaERpdi5fZnVsbExheW91dCksRS5zZXRTY2FsZSgpO3ZhciBDPSJNIityKyIsIisobithKSsiaCIraSsibC0iK2kvMisiLC0iK2ErIloiO2YuY2xpcERlZi5zZWxlY3QoInBhdGgiKS5hdHRyKCJkIixDKSxmLmxheWVycy5wbG90Ymcuc2VsZWN0KCJwYXRoIikuYXR0cigiZCIsQyk7dmFyIEw9Ik0wLCIrYSsiaCIraSsibC0iK2kvMisiLC0iK2ErIloiO2YuY2xpcERlZlJlbGF0aXZlLnNlbGVjdCgicGF0aCIpLmF0dHIoImQiLEwpO3ZhciB6PSJ0cmFuc2xhdGUoIityKyIsIituKyIpIjtmLnBsb3RDb250YWluZXIuc2VsZWN0QWxsKCIuc2NhdHRlcmxheWVyLC5tYXBsYXllciIpLmF0dHIoInRyYW5zZm9ybSIseiksZi5jbGlwRGVmUmVsYXRpdmUuc2VsZWN0KCJwYXRoIikuYXR0cigidHJhbnNmb3JtIixudWxsKTt2YXIgUD0idHJhbnNsYXRlKCIrKHItUy5fb2Zmc2V0KSsiLCIrKG4rYSkrIikiO2YubGF5ZXJzLmJheGlzLmF0dHIoInRyYW5zZm9ybSIsUCksZi5sYXllcnMuYmdyaWQuYXR0cigidHJhbnNmb3JtIixQKTt2YXIgST0idHJhbnNsYXRlKCIrKHIraS8yKSsiLCIrbisiKXJvdGF0ZSgzMCl0cmFuc2xhdGUoMCwiKy1ULl9vZmZzZXQrIikiO2YubGF5ZXJzLmFheGlzLmF0dHIoInRyYW5zZm9ybSIsSSksZi5sYXllcnMuYWdyaWQuYXR0cigidHJhbnNmb3JtIixJKTt2YXIgTz0idHJhbnNsYXRlKCIrKHIraS8yKSsiLCIrbisiKXJvdGF0ZSgtMzApdHJhbnNsYXRlKDAsIistRS5fb2Zmc2V0KyIpIjtmLmxheWVycy5jYXhpcy5hdHRyKCJ0cmFuc2Zvcm0iLE8pLGYubGF5ZXJzLmNncmlkLmF0dHIoInRyYW5zZm9ybSIsTyksZi5kcmF3QXhlcyghMCksZi5wbG90Q29udGFpbmVyLnNlbGVjdEFsbCgiLmNyaXNwIikuY2xhc3NlZCgiY3Jpc3AiLCExKSxmLmxheWVycy5hbGluZS5zZWxlY3QoInBhdGgiKS5hdHRyKCJkIixULnNob3dsaW5lPyJNIityKyIsIisobithKSsibCIraS8yKyIsLSIrYToiTTAsMCIpLmNhbGwobC5zdHJva2UsVC5saW5lY29sb3J8fCIjMDAwIikuc3R5bGUoInN0cm9rZS13aWR0aCIsKFQubGluZXdpZHRofHwwKSsicHgiKSxmLmxheWVycy5ibGluZS5zZWxlY3QoInBhdGgiKS5hdHRyKCJkIixTLnNob3dsaW5lPyJNIityKyIsIisobithKSsiaCIraToiTTAsMCIpLmNhbGwobC5zdHJva2UsUy5saW5lY29sb3J8fCIjMDAwIikuc3R5bGUoInN0cm9rZS13aWR0aCIsKFMubGluZXdpZHRofHwwKSsicHgiKSxmLmxheWVycy5jbGluZS5zZWxlY3QoInBhdGgiKS5hdHRyKCJkIixFLnNob3dsaW5lPyJNIisocitpLzIpKyIsIituKyJsIitpLzIrIiwiK2E6Ik0wLDAiKS5jYWxsKGwuc3Ryb2tlLEUubGluZWNvbG9yfHwiIzAwMCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLChFLmxpbmV3aWR0aHx8MCkrInB4IiksZi5ncmFwaERpdi5fY29udGV4dC5zdGF0aWNQbG90fHxmLmluaXRJbnRlcmFjdGlvbnMoKSxjLnNldENsaXBVcmwoZi5sYXllcnMuZnJvbnRwbG90LGYuX2hhc0NsaXBPbkF4aXNGYWxzZT9udWxsOmYuY2xpcElkKX0sXy5kcmF3QXhlcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmdyYXBoRGl2LHI9dGhpcy5pZC5zdWJzdHIoNykrInRpdGxlIixuPXRoaXMuYWF4aXMsaT10aGlzLmJheGlzLGE9dGhpcy5jYXhpcztpZihwLmRvVGlja3NTaW5nbGUoZSxuLCEwKSxwLmRvVGlja3NTaW5nbGUoZSxpLCEwKSxwLmRvVGlja3NTaW5nbGUoZSxhLCEwKSx0KXt2YXIgbz1NYXRoLm1heChuLnNob3d0aWNrbGFiZWxzP24udGlja2ZvbnQuc2l6ZS8yOjAsKGEuc2hvd3RpY2tsYWJlbHM/Ljc1KmEudGlja2ZvbnQuc2l6ZTowKSsoIm91dHNpZGUiPT09YS50aWNrcz8uODcqYS50aWNrbGVuOjApKTt0aGlzLmxheWVyc1siYS10aXRsZSJdPW0uZHJhdyhlLCJhIityLHtwcm9wQ29udGFpbmVyOm4scHJvcE5hbWU6dGhpcy5pZCsiLmFheGlzLnRpdGxlIixwbGFjZWhvbGRlcjpzKGUsIkNsaWNrIHRvIGVudGVyIENvbXBvbmVudCBBIHRpdGxlIiksYXR0cmlidXRlczp7eDp0aGlzLngwK3RoaXMudy8yLHk6dGhpcy55MC1uLnRpdGxlZm9udC5zaXplLzMtbywidGV4dC1hbmNob3IiOiJtaWRkbGUifX0pO3ZhciBsPShpLnNob3d0aWNrbGFiZWxzP2kudGlja2ZvbnQuc2l6ZTowKSsoIm91dHNpZGUiPT09aS50aWNrcz9pLnRpY2tsZW46MCkrMzt0aGlzLmxheWVyc1siYi10aXRsZSJdPW0uZHJhdyhlLCJiIityLHtwcm9wQ29udGFpbmVyOmkscHJvcE5hbWU6dGhpcy5pZCsiLmJheGlzLnRpdGxlIixwbGFjZWhvbGRlcjpzKGUsIkNsaWNrIHRvIGVudGVyIENvbXBvbmVudCBCIHRpdGxlIiksYXR0cmlidXRlczp7eDp0aGlzLngwLWwseTp0aGlzLnkwK3RoaXMuaCsuODMqaS50aXRsZWZvbnQuc2l6ZStsLCJ0ZXh0LWFuY2hvciI6Im1pZGRsZSJ9fSksdGhpcy5sYXllcnNbImMtdGl0bGUiXT1tLmRyYXcoZSwiYyIrcix7cHJvcENvbnRhaW5lcjphLHByb3BOYW1lOnRoaXMuaWQrIi5jYXhpcy50aXRsZSIscGxhY2Vob2xkZXI6cyhlLCJDbGljayB0byBlbnRlciBDb21wb25lbnQgQyB0aXRsZSIpLGF0dHJpYnV0ZXM6e3g6dGhpcy54MCt0aGlzLncrbCx5OnRoaXMueTArdGhpcy5oKy44MyphLnRpdGxlZm9udC5zaXplK2wsInRleHQtYW5jaG9yIjoibWlkZGxlIn19KX19O3ZhciBrPXguTUlOWk9PTS8yKy44NyxNPSJtLTAuODcsLjVoIitrKyJ2M2gtIisoays1LjIpKyJsIisoay8yKzIuNikrIiwtIisoLjg3KmsrNC41KSsibDIuNiwxLjVsLSIray8yKyIsIisuODcqaysiWiIsQT0ibTAuODcsLjVoLSIraysidjNoIisoays1LjIpKyJsLSIrKGsvMisyLjYpKyIsLSIrKC44NyprKzQuNSkrImwtMi42LDEuNWwiK2svMisiLCIrLjg3KmsrIloiLFQ9Im0wLDFsIitrLzIrIiwiKy44NyprKyJsMi42LC0xLjVsLSIrKGsvMisyLjYpKyIsLSIrKC44NyprKzQuNSkrImwtIisoay8yKzIuNikrIiwiKyguODcqays0LjUpKyJsMi42LDEuNWwiK2svMisiLC0iKy44NyprKyJaIixTPSJtMC41LDAuNWg1di0yaC01di01aC0ydjVoLTV2Mmg1djVoMloiLEU9ITA7ZnVuY3Rpb24gQyh0KXtuLnNlbGVjdCh0KS5zZWxlY3RBbGwoIi56b29tYm94LC5qcy16b29tYm94LWJhY2tkcm9wLC5qcy16b29tYm94LW1lbnUsLnpvb21ib3gtY29ybmVycyIpLnJlbW92ZSgpfV8uaW5pdEludGVyYWN0aW9ucz1mdW5jdGlvbigpe3ZhciB0LGUscixuLHUsaCxmLHAsbSxiLF89dGhpcyxrPV8ubGF5ZXJzLnBsb3RiZy5zZWxlY3QoInBhdGgiKS5ub2RlKCksTD1fLmdyYXBoRGl2LHo9TC5fZnVsbExheW91dC5fem9vbWxheWVyLFA9e2VsZW1lbnQ6ayxnZDpMLHBsb3RpbmZvOnt4YXhpczpfLnhheGlzLHlheGlzOl8ueWF4aXN9LHN1YnBsb3Q6Xy5pZCxwcmVwRm46ZnVuY3Rpb24oYSxvLHMpe1AueGF4ZXM9W18ueGF4aXNdLFAueWF4ZXM9W18ueWF4aXNdO3ZhciBjPUwuX2Z1bGxMYXlvdXQuZHJhZ21vZGU7YS5zaGlmdEtleSYmKGM9InBhbiI9PT1jPyJ6b29tIjoicGFuIiksUC5taW5EcmFnPSJsYXNzbyI9PT1jPzE6dm9pZCAwLCJ6b29tIj09PWM/KFAubW92ZUZuPVIsUC5kb25lRm49QixmdW5jdGlvbihhLG8scyl7dmFyIGM9ay5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt0PW8tYy5sZWZ0LGU9cy1jLnRvcCxyPXthOl8uYWF4aXMucmFuZ2VbMF0sYjpfLmJheGlzLnJhbmdlWzFdLGM6Xy5jYXhpcy5yYW5nZVsxXX0sdT1yLG49Xy5hYXhpcy5yYW5nZVsxXS1yLmEsaD1pKF8uZ3JhcGhEaXYuX2Z1bGxMYXlvdXRbXy5pZF0uYmdjb2xvcikuZ2V0THVtaW5hbmNlKCksZj0iTTAsIitfLmgrIkwiK18udy8yKyIsIDBMIitfLncrIiwiK18uaCsiWiIscD0hMSxtPXouYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJ6b29tYm94IikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrXy54MCsiLCAiK18ueTArIikiKS5zdHlsZSh7ZmlsbDpoPi4yPyJyZ2JhKDAsMCwwLDApIjoicmdiYSgyNTUsMjU1LDI1NSwwKSIsInN0cm9rZS13aWR0aCI6MH0pLmF0dHIoImQiLGYpLGI9ei5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsInpvb21ib3gtY29ybmVycyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK18ueDArIiwgIitfLnkwKyIpIikuc3R5bGUoe2ZpbGw6bC5iYWNrZ3JvdW5kLHN0cm9rZTpsLmRlZmF1bHRMaW5lLCJzdHJva2Utd2lkdGgiOjEsb3BhY2l0eTowfSkuYXR0cigiZCIsIk0wLDBaIikseSh6KX0oMCxvLHMpKToicGFuIj09PWM/KFAubW92ZUZuPUYsUC5kb25lRm49TixyPXthOl8uYWF4aXMucmFuZ2VbMF0sYjpfLmJheGlzLnJhbmdlWzFdLGM6Xy5jYXhpcy5yYW5nZVsxXX0sdT1yLHkoeikpOiJzZWxlY3QiIT09YyYmImxhc3NvIiE9PWN8fHYoYSxvLHMsUCxjKX0sY2xpY2tGbjpmdW5jdGlvbih0LGUpe2lmKEMoTCksMj09PXQpe3ZhciByPXt9O3JbXy5pZCsiLmFheGlzLm1pbiJdPTAscltfLmlkKyIuYmF4aXMubWluIl09MCxyW18uaWQrIi5jYXhpcy5taW4iXT0wLEwuZW1pdCgicGxvdGx5X2RvdWJsZWNsaWNrIixudWxsKSxhLmNhbGwoInJlbGF5b3V0IixMLHIpfWcuY2xpY2soTCxlLF8uaWQpfX07ZnVuY3Rpb24gSSh0LGUpe3JldHVybiAxLWUvXy5ofWZ1bmN0aW9uIE8odCxlKXtyZXR1cm4gMS0odCsoXy5oLWUpL01hdGguc3FydCgzKSkvXy53fWZ1bmN0aW9uIEQodCxlKXtyZXR1cm4odC0oXy5oLWUpL01hdGguc3FydCgzKSkvXy53fWZ1bmN0aW9uIFIoaSxhKXt2YXIgbz10K2kscz1lK2EsbD1NYXRoLm1heCgwLE1hdGgubWluKDEsSSgwLGUpLEkoMCxzKSkpLGM9TWF0aC5tYXgoMCxNYXRoLm1pbigxLE8odCxlKSxPKG8scykpKSxkPU1hdGgubWF4KDAsTWF0aC5taW4oMSxEKHQsZSksRChvLHMpKSksZz0obC8yK2QpKl8udyx2PSgxLWwvMi1jKSpfLncseT0oZyt2KS8yLGs9di1nLEU9KDEtbCkqXy5oLEM9RS1rL3c7azx4Lk1JTlpPT00/KHU9cixtLmF0dHIoImQiLGYpLGIuYXR0cigiZCIsIk0wLDBaIikpOih1PXthOnIuYStsKm4sYjpyLmIrYypuLGM6ci5jK2Qqbn0sbS5hdHRyKCJkIixmKyJNIitnKyIsIitFKyJIIit2KyJMIit5KyIsIitDKyJMIitnKyIsIitFKyJaIiksYi5hdHRyKCJkIiwiTSIrdCsiLCIrZStTKyJNIitnKyIsIitFK00rIk0iK3YrIiwiK0UrQSsiTSIreSsiLCIrQytUKSkscHx8KG0udHJhbnNpdGlvbigpLnN0eWxlKCJmaWxsIixoPi4yPyJyZ2JhKDAsMCwwLDAuNCkiOiJyZ2JhKDI1NSwyNTUsMjU1LDAuMykiKS5kdXJhdGlvbigyMDApLGIudHJhbnNpdGlvbigpLnN0eWxlKCJvcGFjaXR5IiwxKS5kdXJhdGlvbigyMDApLHA9ITApfWZ1bmN0aW9uIEIoKXtpZihDKEwpLHUhPT1yKXt2YXIgdD17fTt0W18uaWQrIi5hYXhpcy5taW4iXT11LmEsdFtfLmlkKyIuYmF4aXMubWluIl09dS5iLHRbXy5pZCsiLmNheGlzLm1pbiJdPXUuYyxhLmNhbGwoInJlbGF5b3V0IixMLHQpLEUmJkwuZGF0YSYmTC5fY29udGV4dC5zaG93VGlwcyYmKG8ubm90aWZpZXIocyhMLCJEb3VibGUtY2xpY2sgdG8gem9vbSBiYWNrIG91dCIpLCJsb25nIiksRT0hMSl9fWZ1bmN0aW9uIEYodCxlKXt2YXIgbj10L18ueGF4aXMuX20saT1lL18ueWF4aXMuX20sYT1bKHU9e2E6ci5hLWksYjpyLmIrKG4raSkvMixjOnIuYy0obi1pKS8yfSkuYSx1LmIsdS5jXS5zb3J0KCksbz1hLmluZGV4T2YodS5hKSxzPWEuaW5kZXhPZih1LmIpLGw9YS5pbmRleE9mKHUuYyk7YVswXTwwJiYoYVsxXSthWzBdLzI8MD8oYVsyXSs9YVswXSthWzFdLGFbMF09YVsxXT0wKTooYVsyXSs9YVswXS8yLGFbMV0rPWFbMF0vMixhWzBdPTApLHU9e2E6YVtvXSxiOmFbc10sYzphW2xdfSxlPShyLmEtdS5hKSpfLnlheGlzLl9tLHQ9KHIuYy11LmMtci5iK3UuYikqXy54YXhpcy5fbSk7dmFyIGg9InRyYW5zbGF0ZSgiKyhfLngwK3QpKyIsIisoXy55MCtlKSsiKSI7Xy5wbG90Q29udGFpbmVyLnNlbGVjdEFsbCgiLnNjYXR0ZXJsYXllciwubWFwbGF5ZXIiKS5hdHRyKCJ0cmFuc2Zvcm0iLGgpO3ZhciBmPSJ0cmFuc2xhdGUoIistdCsiLCIrLWUrIikiO18uY2xpcERlZlJlbGF0aXZlLnNlbGVjdCgicGF0aCIpLmF0dHIoInRyYW5zZm9ybSIsZiksXy5hYXhpcy5yYW5nZT1bdS5hLF8uc3VtLXUuYi11LmNdLF8uYmF4aXMucmFuZ2U9W18uc3VtLXUuYS11LmMsdS5iXSxfLmNheGlzLnJhbmdlPVtfLnN1bS11LmEtdS5iLHUuY10sXy5kcmF3QXhlcyghMSksXy5wbG90Q29udGFpbmVyLnNlbGVjdEFsbCgiLmNyaXNwIikuY2xhc3NlZCgiY3Jpc3AiLCExKSxfLl9oYXNDbGlwT25BeGlzRmFsc2UmJl8ucGxvdENvbnRhaW5lci5zZWxlY3QoIi5zY2F0dGVybGF5ZXIiKS5zZWxlY3RBbGwoIi50cmFjZSIpLmNhbGwoYy5oaWRlT3V0c2lkZVJhbmdlUG9pbnRzLF8pfWZ1bmN0aW9uIE4oKXt2YXIgdD17fTt0W18uaWQrIi5hYXhpcy5taW4iXT11LmEsdFtfLmlkKyIuYmF4aXMubWluIl09dS5iLHRbXy5pZCsiLmNheGlzLm1pbiJdPXUuYyxhLmNhbGwoInJlbGF5b3V0IixMLHQpfWsub25tb3VzZW1vdmU9ZnVuY3Rpb24odCl7Zy5ob3ZlcihMLHQsXy5pZCksTC5fZnVsbExheW91dC5fbGFzdGhvdmVyPWssTC5fZnVsbExheW91dC5faG92ZXJzdWJwbG90PV8uaWR9LGsub25tb3VzZW91dD1mdW5jdGlvbih0KXtMLl9kcmFnZ2luZ3x8ZC51bmhvdmVyKEwsdCl9LGQuaW5pdChQKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NTU4LCIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50Ijo1ODAsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NTgzLCIuLi8uLi9jb21wb25lbnRzL2Z4Ijo2MDAsIi4uLy4uL2NvbXBvbmVudHMvdGl0bGVzIjo2NDksIi4uLy4uL2xpYiI6Njg0LCIuLi8uLi9saWIvZXh0ZW5kIjo2NzMsIi4uLy4uL3JlZ2lzdHJ5Ijo4MTcsIi4uL2NhcnRlc2lhbi9heGVzIjo3MzIsIi4uL2NhcnRlc2lhbi9jb25zdGFudHMiOjczNywiLi4vY2FydGVzaWFuL3NlbGVjdCI6NzQ5LCIuLi9jYXJ0ZXNpYW4vc2V0X2NvbnZlcnQiOjc1MCwiLi4vcGxvdHMiOjc5NSxkMzoxNDcsdGlueWNvbG9yMjo0OTl9XSw4MTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9saWIvbG9nZ2VycyIpLGk9dCgiLi9saWIvbm9vcCIpLGE9dCgiLi9saWIvcHVzaF91bmlxdWUiKSxvPXQoIi4vbGliL2lzX3BsYWluX29iamVjdCIpLHM9dCgiLi9saWIvZXh0ZW5kIiksbD10KCIuL3Bsb3RzL2F0dHJpYnV0ZXMiKSxjPXQoIi4vcGxvdHMvbGF5b3V0X2F0dHJpYnV0ZXMiKSx1PXMuZXh0ZW5kRmxhdCxoPXMuZXh0ZW5kRGVlcEFsbDtmdW5jdGlvbiBmKHQpe3ZhciBlPXQubmFtZSxpPXQuY2F0ZWdvcmllcyxhPXQubWV0YTtpZihyLm1vZHVsZXNbZV0pbi5sb2coIlR5cGUgIitlKyIgYWxyZWFkeSByZWdpc3RlcmVkIik7ZWxzZXtyLnN1YnBsb3RzUmVnaXN0cnlbdC5iYXNlUGxvdE1vZHVsZS5uYW1lXXx8ZnVuY3Rpb24odCl7dmFyIGU9dC5uYW1lO2lmKHIuc3VicGxvdHNSZWdpc3RyeVtlXSlyZXR1cm4gdm9pZCBuLmxvZygiUGxvdCB0eXBlICIrZSsiIGFscmVhZHkgcmVnaXN0ZXJlZC4iKTtmb3IodmFyIGkgaW4gbSh0KSxyLnN1YnBsb3RzUmVnaXN0cnlbZV09dCxyLmNvbXBvbmVudHNSZWdpc3RyeSl4KGksdC5uYW1lKX0odC5iYXNlUGxvdE1vZHVsZSk7Zm9yKHZhciBvPXt9LHM9MDtzPGkubGVuZ3RoO3MrKylvW2lbc11dPSEwLHIuYWxsQ2F0ZWdvcmllc1tpW3NdXT0hMDtmb3IodmFyIGwgaW4gci5tb2R1bGVzW2VdPXtfbW9kdWxlOnQsY2F0ZWdvcmllczpvfSxhJiZPYmplY3Qua2V5cyhhKS5sZW5ndGgmJihyLm1vZHVsZXNbZV0ubWV0YT1hKSxyLmFsbFR5cGVzLnB1c2goZSksci5jb21wb25lbnRzUmVnaXN0cnkpdihsLGUpO3QubGF5b3V0QXR0cmlidXRlcyYmdShyLnRyYWNlTGF5b3V0QXR0cmlidXRlcyx0LmxheW91dEF0dHJpYnV0ZXMpfX1mdW5jdGlvbiBwKHQpe2lmKCJzdHJpbmciIT10eXBlb2YgdC5uYW1lKXRocm93IG5ldyBFcnJvcigiQ29tcG9uZW50IG1vZHVsZSAqbmFtZSogbXVzdCBiZSBhIHN0cmluZy4iKTt2YXIgZT10Lm5hbWU7Zm9yKHZhciBuIGluIHIuY29tcG9uZW50c1JlZ2lzdHJ5W2VdPXQsdC5sYXlvdXRBdHRyaWJ1dGVzJiYodC5sYXlvdXRBdHRyaWJ1dGVzLl9pc0xpbmtlZFRvQXJyYXkmJmEoci5sYXlvdXRBcnJheUNvbnRhaW5lcnMsZSksbSh0KSksci5tb2R1bGVzKXYoZSxuKTtmb3IodmFyIGkgaW4gci5zdWJwbG90c1JlZ2lzdHJ5KXgoZSxpKTtmb3IodmFyIG8gaW4gci50cmFuc2Zvcm1zUmVnaXN0cnkpeShlLG8pO3Quc2NoZW1hJiZ0LnNjaGVtYS5sYXlvdXQmJmgoYyx0LnNjaGVtYS5sYXlvdXQpfWZ1bmN0aW9uIGQodCl7aWYoInN0cmluZyIhPXR5cGVvZiB0Lm5hbWUpdGhyb3cgbmV3IEVycm9yKCJUcmFuc2Zvcm0gbW9kdWxlICpuYW1lKiBtdXN0IGJlIGEgc3RyaW5nLiIpO3ZhciBlPSJUcmFuc2Zvcm0gbW9kdWxlICIrdC5uYW1lLGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQudHJhbnNmb3JtLGE9ImZ1bmN0aW9uIj09dHlwZW9mIHQuY2FsY1RyYW5zZm9ybTtpZighaSYmIWEpdGhyb3cgbmV3IEVycm9yKGUrIiBpcyBtaXNzaW5nIGEgKnRyYW5zZm9ybSogb3IgKmNhbGNUcmFuc2Zvcm0qIG1ldGhvZC4iKTtmb3IodmFyIHMgaW4gaSYmYSYmbi5sb2coW2UrIiBoYXMgYm90aCBhICp0cmFuc2Zvcm0qIGFuZCAqY2FsY1RyYW5zZm9ybSogbWV0aG9kcy4iLCJQbGVhc2Ugbm90ZSB0aGF0IGFsbCAqdHJhbnNmb3JtKiBtZXRob2RzIGFyZSBleGVjdXRlZCIsImJlZm9yZSBhbGwgKmNhbGNUcmFuc2Zvcm0qIG1ldGhvZHMuIl0uam9pbigiICIpKSxvKHQuYXR0cmlidXRlcyl8fG4ubG9nKGUrIiByZWdpc3RlcmVkIHdpdGhvdXQgYW4gKmF0dHJpYnV0ZXMqIG9iamVjdC4iKSwiZnVuY3Rpb24iIT10eXBlb2YgdC5zdXBwbHlEZWZhdWx0cyYmbi5sb2coZSsiIHJlZ2lzdGVyZWQgd2l0aG91dCBhICpzdXBwbHlEZWZhdWx0cyogbWV0aG9kLiIpLHIudHJhbnNmb3Jtc1JlZ2lzdHJ5W3QubmFtZV09dCxyLmNvbXBvbmVudHNSZWdpc3RyeSl5KHMsdC5uYW1lKX1mdW5jdGlvbiBnKHQpe3ZhciBlPXQubmFtZSxuPWUuc3BsaXQoIi0iKVswXSxpPXQuZGljdGlvbmFyeSxhPXQuZm9ybWF0LG89aSYmT2JqZWN0LmtleXMoaSkubGVuZ3RoLHM9YSYmT2JqZWN0LmtleXMoYSkubGVuZ3RoLGw9ci5sb2NhbGVSZWdpc3RyeSxjPWxbZV07aWYoY3x8KGxbZV09Yz17fSksbiE9PWUpe3ZhciB1PWxbbl07dXx8KGxbbl09dT17fSksbyYmdS5kaWN0aW9uYXJ5PT09Yy5kaWN0aW9uYXJ5JiYodS5kaWN0aW9uYXJ5PWkpLHMmJnUuZm9ybWF0PT09Yy5mb3JtYXQmJih1LmZvcm1hdD1hKX1vJiYoYy5kaWN0aW9uYXJ5PWkpLHMmJihjLmZvcm1hdD1hKX1mdW5jdGlvbiBtKHQpe2lmKHQubGF5b3V0QXR0cmlidXRlcyl7dmFyIGU9dC5sYXlvdXRBdHRyaWJ1dGVzLl9hcnJheUF0dHJSZWdleHBzO2lmKGUpZm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspYShyLmxheW91dEFycmF5UmVnZXhlcyxlW25dKX19ZnVuY3Rpb24gdih0LGUpe3ZhciBuPXIuY29tcG9uZW50c1JlZ2lzdHJ5W3RdLnNjaGVtYTtpZihuJiZuLnRyYWNlcyl7dmFyIGk9bi50cmFjZXNbZV07aSYmaChyLm1vZHVsZXNbZV0uX21vZHVsZS5hdHRyaWJ1dGVzLGkpfX1mdW5jdGlvbiB5KHQsZSl7dmFyIG49ci5jb21wb25lbnRzUmVnaXN0cnlbdF0uc2NoZW1hO2lmKG4mJm4udHJhbnNmb3Jtcyl7dmFyIGk9bi50cmFuc2Zvcm1zW2VdO2kmJmgoci50cmFuc2Zvcm1zUmVnaXN0cnlbZV0uYXR0cmlidXRlcyxpKX19ZnVuY3Rpb24geCh0LGUpe3ZhciBuPXIuY29tcG9uZW50c1JlZ2lzdHJ5W3RdLnNjaGVtYTtpZihuJiZuLnN1YnBsb3RzKXt2YXIgaT1yLnN1YnBsb3RzUmVnaXN0cnlbZV0sYT1pLmxheW91dEF0dHJpYnV0ZXMsbz0ic3VicGxvdCI9PT1pLmF0dHI/aS5uYW1lOmkuYXR0cjtBcnJheS5pc0FycmF5KG8pJiYobz1vWzBdKTt2YXIgcz1uLnN1YnBsb3RzW29dO2EmJnMmJmgoYSxzKX19ZnVuY3Rpb24gYih0KXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHQmJih0PXQudHlwZSksdH1yLm1vZHVsZXM9e30sci5hbGxDYXRlZ29yaWVzPXt9LHIuYWxsVHlwZXM9W10sci5zdWJwbG90c1JlZ2lzdHJ5PXt9LHIudHJhbnNmb3Jtc1JlZ2lzdHJ5PXt9LHIuY29tcG9uZW50c1JlZ2lzdHJ5PXt9LHIubGF5b3V0QXJyYXlDb250YWluZXJzPVtdLHIubGF5b3V0QXJyYXlSZWdleGVzPVtdLHIudHJhY2VMYXlvdXRBdHRyaWJ1dGVzPXt9LHIubG9jYWxlUmVnaXN0cnk9e30sci5hcGlNZXRob2RSZWdpc3RyeT17fSxyLnJlZ2lzdGVyPWZ1bmN0aW9uKHQpe2lmKCF0KXRocm93IG5ldyBFcnJvcigiTm8gYXJndW1lbnQgcGFzc2VkIHRvIFBsb3RseS5yZWdpc3Rlci4iKTt0JiYhQXJyYXkuaXNBcnJheSh0KSYmKHQ9W3RdKTtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKyl7dmFyIG49dFtlXTtpZighbil0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgbW9kdWxlIHdhcyBhdHRlbXB0ZWQgdG8gYmUgcmVnaXN0ZXJlZCEiKTtzd2l0Y2gobi5tb2R1bGVUeXBlKXtjYXNlInRyYWNlIjpmKG4pO2JyZWFrO2Nhc2UidHJhbnNmb3JtIjpkKG4pO2JyZWFrO2Nhc2UiY29tcG9uZW50IjpwKG4pO2JyZWFrO2Nhc2UibG9jYWxlIjpnKG4pO2JyZWFrO2Nhc2UiYXBpTWV0aG9kIjp2YXIgaT1uLm5hbWU7ci5hcGlNZXRob2RSZWdpc3RyeVtpXT1uLmZuO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIG1vZHVsZSB3YXMgYXR0ZW1wdGVkIHRvIGJlIHJlZ2lzdGVyZWQhIil9fX0sci5nZXRNb2R1bGU9ZnVuY3Rpb24odCl7dmFyIGU9ci5tb2R1bGVzW2IodCldO3JldHVybiEhZSYmZS5fbW9kdWxlfSxyLnRyYWNlSXM9ZnVuY3Rpb24odCxlKXtpZigidmFyaW91cyI9PT0odD1iKHQpKSlyZXR1cm4hMTt2YXIgaT1yLm1vZHVsZXNbdF07cmV0dXJuIGl8fCh0JiYiYXJlYSIhPT10JiZuLmxvZygiVW5yZWNvZ25pemVkIHRyYWNlIHR5cGUgIit0KyIuIiksaT1yLm1vZHVsZXNbbC50eXBlLmRmbHRdKSwhIWkuY2F0ZWdvcmllc1tlXX0sci5nZXRUcmFuc2Zvcm1JbmRpY2VzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLG49dC50cmFuc2Zvcm1zfHxbXSxpPTA7aTxuLmxlbmd0aDtpKyspbltpXS50eXBlPT09ZSYmci5wdXNoKGkpO3JldHVybiByfSxyLmhhc1RyYW5zZm9ybT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LnRyYW5zZm9ybXN8fFtdLG49MDtuPHIubGVuZ3RoO24rKylpZihyW25dLnR5cGU9PT1lKXJldHVybiEwO3JldHVybiExfSxyLmdldENvbXBvbmVudE1ldGhvZD1mdW5jdGlvbih0LGUpe3ZhciBuPXIuY29tcG9uZW50c1JlZ2lzdHJ5W3RdO3JldHVybiBuJiZuW2VdfHxpfSxyLmNhbGw9ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHNbMF0sZT1bXS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTtyZXR1cm4gci5hcGlNZXRob2RSZWdpc3RyeVt0XS5hcHBseShudWxsLGUpfX0seyIuL2xpYi9leHRlbmQiOjY3MywiLi9saWIvaXNfcGxhaW5fb2JqZWN0Ijo2ODYsIi4vbGliL2xvZ2dlcnMiOjY4OSwiLi9saWIvbm9vcCI6NjkzLCIuL2xpYi9wdXNoX3VuaXF1ZSI6Njk4LCIuL3Bsb3RzL2F0dHJpYnV0ZXMiOjcyOSwiLi9wbG90cy9sYXlvdXRfYXR0cmlidXRlcyI6Nzg2fV0sODE4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2xpYiIpLGk9bi5leHRlbmRGbGF0LGE9bi5leHRlbmREZWVwO2Z1bmN0aW9uIG8odCl7dmFyIGU7c3dpdGNoKHQpe2Nhc2UidGhlbWVzX190aHVtYiI6ZT17YXV0b3NpemU6ITAsd2lkdGg6MTUwLGhlaWdodDoxNTAsdGl0bGU6IiIsc2hvd2xlZ2VuZDohMSxtYXJnaW46e2w6NSxyOjUsdDo1LGI6NSxwYWQ6MH0sYW5ub3RhdGlvbnM6W119O2JyZWFrO2Nhc2UidGh1bWJuYWlsIjplPXt0aXRsZToiIixoaWRlc291cmNlczohMCxzaG93bGVnZW5kOiExLGJvcmRlcndpZHRoOjAsYm9yZGVyY29sb3I6IiIsbWFyZ2luOntsOjEscjoxLHQ6MSxiOjEscGFkOjB9LGFubm90YXRpb25zOltdfTticmVhaztkZWZhdWx0OmU9e319cmV0dXJuIGV9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI7dC5mcmFtZXdvcmsmJnQuZnJhbWV3b3JrLmlzUG9sYXImJih0PXQuZnJhbWV3b3JrLmdldENvbmZpZygpKTt2YXIgbixzPXQuZGF0YSxsPXQubGF5b3V0LGM9YShbXSxzKSx1PWEoe30sbCxvKGUudGlsZUNsYXNzKSksaD10Ll9jb250ZXh0fHx7fTtpZihlLndpZHRoJiYodS53aWR0aD1lLndpZHRoKSxlLmhlaWdodCYmKHUuaGVpZ2h0PWUuaGVpZ2h0KSwidGh1bWJuYWlsIj09PWUudGlsZUNsYXNzfHwidGhlbWVzX190aHVtYiI9PT1lLnRpbGVDbGFzcyl7dS5hbm5vdGF0aW9ucz1bXTt2YXIgZj1PYmplY3Qua2V5cyh1KTtmb3Iocj0wO3I8Zi5sZW5ndGg7cisrKW49ZltyXSxbInhheGlzIiwieWF4aXMiLCJ6YXhpcyJdLmluZGV4T2Yobi5zbGljZSgwLDUpKT4tMSYmKHVbZltyXV0udGl0bGU9IiIpO2ZvcihyPTA7cjxjLmxlbmd0aDtyKyspe3ZhciBwPWNbcl07cC5zaG93c2NhbGU9ITEscC5tYXJrZXImJihwLm1hcmtlci5zaG93c2NhbGU9ITEpLCJwaWUiPT09cC50eXBlJiYocC50ZXh0cG9zaXRpb249Im5vbmUiKX19aWYoQXJyYXkuaXNBcnJheShlLmFubm90YXRpb25zKSlmb3Iocj0wO3I8ZS5hbm5vdGF0aW9ucy5sZW5ndGg7cisrKXUuYW5ub3RhdGlvbnMucHVzaChlLmFubm90YXRpb25zW3JdKTt2YXIgZD1PYmplY3Qua2V5cyh1KS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQubWF0Y2goL15zY2VuZVxkKiQvKX0pO2lmKGQubGVuZ3RoKXt2YXIgZz17fTtmb3IoInRodW1ibmFpbCI9PT1lLnRpbGVDbGFzcyYmKGc9e3RpdGxlOiIiLHNob3dheGVzbGFiZWxzOiExLHNob3d0aWNrbGFiZWxzOiExLGxpbmV0aWNrZW5hYmxlOiExfSkscj0wO3I8ZC5sZW5ndGg7cisrKXt2YXIgbT11W2Rbcl1dO20ueGF4aXN8fChtLnhheGlzPXt9KSxtLnlheGlzfHwobS55YXhpcz17fSksbS56YXhpc3x8KG0uemF4aXM9e30pLGkobS54YXhpcyxnKSxpKG0ueWF4aXMsZyksaShtLnpheGlzLGcpLG0uX3NjZW5lPW51bGx9fXZhciB2PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2UudGlsZUNsYXNzJiYodi5jbGFzc05hbWU9ZS50aWxlQ2xhc3MpO3ZhciB5PXtnZDp2LHRkOnYsbGF5b3V0OnUsZGF0YTpjLGNvbmZpZzp7c3RhdGljUGxvdDp2b2lkIDA9PT1lLnN0YXRpY1Bsb3R8fGUuc3RhdGljUGxvdCxwbG90R2xQaXhlbFJhdGlvOnZvaWQgMD09PWUucGxvdEdsUGl4ZWxSYXRpbz8yOmUucGxvdEdsUGl4ZWxSYXRpbyxkaXNwbGF5bG9nbzplLmRpc3BsYXlsb2dvfHwhMSxzaG93TGluazplLnNob3dMaW5rfHwhMSxzaG93VGlwczplLnNob3dUaXBzfHwhMSxtYXBib3hBY2Nlc3NUb2tlbjpoLm1hcGJveEFjY2Vzc1Rva2VufX07cmV0dXJuInRyYW5zcGFyZW50IiE9PWUuc2V0QmFja2dyb3VuZCYmKHkuY29uZmlnLnNldEJhY2tncm91bmQ9ZS5zZXRCYWNrZ3JvdW5kfHwib3BhcXVlIikseS5nZC5kZWZhdWx0TGF5b3V0PW8oZS50aWxlQ2xhc3MpLHl9fSx7Ii4uL2xpYiI6Njg0fV0sODE5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3Bsb3RfYXBpL3RvX2ltYWdlIiksaT10KCIuLi9saWIiKSxhPXQoIi4vZmlsZXNhdmVyIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuKGU9ZXx8e30pLmZvcm1hdD1lLmZvcm1hdHx8InBuZyIsbmV3IFByb21pc2UoZnVuY3Rpb24ocixvKXt0Ll9zbmFwc2hvdEluUHJvZ3Jlc3MmJm8obmV3IEVycm9yKCJTbmFwc2hvdHRpbmcgYWxyZWFkeSBpbiBwcm9ncmVzcy4iKSksaS5pc0lFKCkmJiJzdmciIT09ZS5mb3JtYXQmJm8obmV3IEVycm9yKCJTb3JyeSBJRSBkb2VzIG5vdCBzdXBwb3J0IGRvd25sb2FkaW5nIGZyb20gY2FudmFzLiBUcnkge2Zvcm1hdDonc3ZnJ30gaW5zdGVhZC4iKSksdC5fc25hcHNob3RJblByb2dyZXNzPSEwO3ZhciBzPW4odCxlKSxsPWUuZmlsZW5hbWV8fHQuZm58fCJuZXdwbG90IjtsKz0iLiIrZS5mb3JtYXQscy50aGVuKGZ1bmN0aW9uKGUpe3JldHVybiB0Ll9zbmFwc2hvdEluUHJvZ3Jlc3M9ITEsYShlLGwpfSkudGhlbihmdW5jdGlvbih0KXtyKHQpfSkuY2F0Y2goZnVuY3Rpb24oZSl7dC5fc25hcHNob3RJblByb2dyZXNzPSExLG8oZSl9KX0pfX0seyIuLi9saWIiOjY4NCwiLi4vcGxvdF9hcGkvdG9faW1hZ2UiOjcyNSwiLi9maWxlc2F2ZXIiOjgyMH1dLDgyMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIiksbj0iZG93bmxvYWQiaW4gcixpPS9WZXJzaW9uXC9bXGRcLl0rLipTYWZhcmkvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGEsbyl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBuYXZpZ2F0b3ImJi9NU0lFIFsxLTldXC4vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJm8obmV3IEVycm9yKCJJRSA8IDEwIHVuc3VwcG9ydGVkIikpLGkmJihkb2N1bWVudC5sb2NhdGlvbi5ocmVmPSJkYXRhOmFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIrdC5zbGljZSh0LnNlYXJjaCgvWyw7XS8pKSxhKGUpKSxlfHwoZT0iZG93bmxvYWQiKSxuJiYoci5ocmVmPXQsci5kb3dubG9hZD1lLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQociksci5jbGljaygpLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQociksYShlKSksInVuZGVmaW5lZCIhPXR5cGVvZiBuYXZpZ2F0b3ImJm5hdmlnYXRvci5tc1NhdmVCbG9iKXt2YXIgcz10LnNwbGl0KC9eZGF0YTppbWFnZVwvc3ZnXCt4bWwsLylbMV0sbD1kZWNvZGVVUklDb21wb25lbnQocyk7bmF2aWdhdG9yLm1zU2F2ZUJsb2IobmV3IEJsb2IoW2xdKSxlKSxhKGUpfW8obmV3IEVycm9yKCJkb3dubG9hZCBlcnJvciIpKX0pfX0se31dLDgyMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLmdldERlbGF5PWZ1bmN0aW9uKHQpe3JldHVybiB0Ll9oYXMmJih0Ll9oYXMoImdsM2QiKXx8dC5faGFzKCJnbDJkIil8fHQuX2hhcygibWFwYm94IikpPzUwMDowfSxyLmdldFJlZHJhd0Z1bmM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dHx8e307aWYoISghKGUuX2hhcyYmZS5faGFzKCJwb2xhciIpKSYmdC5kYXRhJiZ0LmRhdGFbMF0mJnQuZGF0YVswXS5yKSlyZXR1cm4gZnVuY3Rpb24oKXsodC5jYWxjZGF0YXx8W10pLmZvckVhY2goZnVuY3Rpb24odCl7dFswXSYmdFswXS50JiZ0WzBdLnQuY2ImJnRbMF0udC5jYigpfSl9fX0se31dLDgyMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2hlbHBlcnMiKSxpPXtnZXREZWxheTpuLmdldERlbGF5LGdldFJlZHJhd0Z1bmM6bi5nZXRSZWRyYXdGdW5jLGNsb25lOnQoIi4vY2xvbmVwbG90IiksdG9TVkc6dCgiLi90b3N2ZyIpLHN2Z1RvSW1nOnQoIi4vc3ZndG9pbWciKSx0b0ltYWdlOnQoIi4vdG9pbWFnZSIpLGRvd25sb2FkSW1hZ2U6dCgiLi9kb3dubG9hZCIpfTtlLmV4cG9ydHM9aX0seyIuL2Nsb25lcGxvdCI6ODE4LCIuL2Rvd25sb2FkIjo4MTksIi4vaGVscGVycyI6ODIxLCIuL3N2Z3RvaW1nIjo4MjMsIi4vdG9pbWFnZSI6ODI0LCIuL3Rvc3ZnIjo4MjV9XSw4MjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vbGliIiksaT10KCJldmVudHMiKS5FdmVudEVtaXR0ZXI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZW1pdHRlcnx8bmV3IGkscj1uZXcgUHJvbWlzZShmdW5jdGlvbihpLGEpe3ZhciBvPXdpbmRvdy5JbWFnZSxzPXQuc3ZnLGw9dC5mb3JtYXR8fCJwbmciO2lmKG4uaXNJRSgpJiYic3ZnIiE9PWwpe3ZhciBjPW5ldyBFcnJvcigiU29ycnkgSUUgZG9lcyBub3Qgc3VwcG9ydCBkb3dubG9hZGluZyBmcm9tIGNhbnZhcy4gVHJ5IHtmb3JtYXQ6J3N2Zyd9IGluc3RlYWQuIik7cmV0dXJuIGEoYyksdC5wcm9taXNlP3I6ZS5lbWl0KCJlcnJvciIsYyl9dmFyIHU9dC5jYW52YXMsaD10LnNjYWxlfHwxLGY9dC53aWR0aHx8MzAwLHA9dC5oZWlnaHR8fDE1MCxkPWgqZixnPWgqcCxtPXUuZ2V0Q29udGV4dCgiMmQiKSx2PW5ldyBvLHk9ImRhdGE6aW1hZ2Uvc3ZnK3htbCwiK2VuY29kZVVSSUNvbXBvbmVudChzKTt1LndpZHRoPWQsdS5oZWlnaHQ9Zyx2Lm9ubG9hZD1mdW5jdGlvbigpe3ZhciByO3N3aXRjaCgic3ZnIiE9PWwmJm0uZHJhd0ltYWdlKHYsMCwwLGQsZyksbCl7Y2FzZSJqcGVnIjpyPXUudG9EYXRhVVJMKCJpbWFnZS9qcGVnIik7YnJlYWs7Y2FzZSJwbmciOnI9dS50b0RhdGFVUkwoImltYWdlL3BuZyIpO2JyZWFrO2Nhc2Uid2VicCI6cj11LnRvRGF0YVVSTCgiaW1hZ2Uvd2VicCIpO2JyZWFrO2Nhc2Uic3ZnIjpyPXk7YnJlYWs7ZGVmYXVsdDp2YXIgbj0iSW1hZ2UgZm9ybWF0IGlzIG5vdCBqcGVnLCBwbmcsIHN2ZyBvciB3ZWJwLiI7aWYoYShuZXcgRXJyb3IobikpLCF0LnByb21pc2UpcmV0dXJuIGUuZW1pdCgiZXJyb3IiLG4pfWkociksdC5wcm9taXNlfHxlLmVtaXQoInN1Y2Nlc3MiLHIpfSx2Lm9uZXJyb3I9ZnVuY3Rpb24ocil7aWYoYShyKSwhdC5wcm9taXNlKXJldHVybiBlLmVtaXQoImVycm9yIixyKX0sdi5zcmM9eX0pO3JldHVybiB0LnByb21pc2U/cjplfX0seyIuLi9saWIiOjY4NCxldmVudHM6MjEyfV0sODI0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImV2ZW50cyIpLkV2ZW50RW1pdHRlcixpPXQoIi4uL3JlZ2lzdHJ5IiksYT10KCIuLi9saWIiKSxvPXQoIi4vaGVscGVycyIpLHM9dCgiLi9jbG9uZXBsb3QiKSxsPXQoIi4vdG9zdmciKSxjPXQoIi4vc3ZndG9pbWciKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1uZXcgbix1PXModCx7Zm9ybWF0OiJwbmcifSksaD11LmdkO2guc3R5bGUucG9zaXRpb249ImFic29sdXRlIixoLnN0eWxlLmxlZnQ9Ii01MDAwcHgiLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaCk7dmFyIGY9by5nZXRSZWRyYXdGdW5jKGgpO3JldHVybiBpLmNhbGwoInBsb3QiLGgsdS5kYXRhLHUubGF5b3V0LHUuY29uZmlnKS50aGVuKGYpLnRoZW4oZnVuY3Rpb24oKXt2YXIgdD1vLmdldERlbGF5KGguX2Z1bGxMYXlvdXQpO3NldFRpbWVvdXQoZnVuY3Rpb24oKXt2YXIgdD1sKGgpLG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7bi5pZD1hLnJhbmRzdHIoKSwocj1jKHtmb3JtYXQ6ZS5mb3JtYXQsd2lkdGg6aC5fZnVsbExheW91dC53aWR0aCxoZWlnaHQ6aC5fZnVsbExheW91dC5oZWlnaHQsY2FudmFzOm4sZW1pdHRlcjpyLHN2Zzp0fSkpLmNsZWFuPWZ1bmN0aW9uKCl7aCYmZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChoKX19LHQpfSkuY2F0Y2goZnVuY3Rpb24odCl7ci5lbWl0KCJlcnJvciIsdCl9KSxyfX0seyIuLi9saWIiOjY4NCwiLi4vcmVnaXN0cnkiOjgxNywiLi9jbG9uZXBsb3QiOjgxOCwiLi9oZWxwZXJzIjo4MjEsIi4vc3ZndG9pbWciOjgyMywiLi90b3N2ZyI6ODI1LGV2ZW50czoyMTJ9XSw4MjU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uL2xpYiIpLGE9dCgiLi4vY29tcG9uZW50cy9kcmF3aW5nIiksbz10KCIuLi9jb21wb25lbnRzL2NvbG9yIikscz10KCIuLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyIpLGw9LyIvZyxjPW5ldyBSZWdFeHAoJygiVE9CRVNUUklQUEVEKXwoVE9CRVNUUklQUEVEIiknLCJnIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgdSxoPXQuX2Z1bGxMYXlvdXQsZj1oLl9wYXBlcixwPWguX3RvcHBhcGVyLGQ9aC53aWR0aCxnPWguaGVpZ2h0O2YuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuY2FsbChhLnNldFJlY3QsMCwwLGQsZykuY2FsbChvLmZpbGwsaC5wYXBlcl9iZ2NvbG9yKTt2YXIgbT1oLl9iYXNlUGxvdE1vZHVsZXN8fFtdO2Zvcih1PTA7dTxtLmxlbmd0aDt1Kyspe3ZhciB2PW1bdV07di50b1NWRyYmdi50b1NWRyh0KX1pZihwKXt2YXIgeT1wLm5vZGUoKS5jaGlsZE5vZGVzLHg9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoeSk7Zm9yKHU9MDt1PHgubGVuZ3RoO3UrKyl7dmFyIGI9eFt1XTtiLmNoaWxkTm9kZXMubGVuZ3RoJiZmLm5vZGUoKS5hcHBlbmRDaGlsZChiKX19aC5fZHJhZ2dlcnMmJmguX2RyYWdnZXJzLnJlbW92ZSgpLGYubm9kZSgpLnN0eWxlLmJhY2tncm91bmQ9IiIsZi5zZWxlY3RBbGwoInRleHQiKS5hdHRyKHsiZGF0YS11bmZvcm1hdHRlZCI6bnVsbCwiZGF0YS1tYXRoIjpudWxsfSkuZWFjaChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpO2lmKCJoaWRkZW4iIT09dGhpcy5zdHlsZS52aXNpYmlsaXR5JiYibm9uZSIhPT10aGlzLnN0eWxlLmRpc3BsYXkpe3Quc3R5bGUoe3Zpc2liaWxpdHk6bnVsbCxkaXNwbGF5Om51bGx9KTt2YXIgZT10aGlzLnN0eWxlLmZvbnRGYW1pbHk7ZSYmLTEhPT1lLmluZGV4T2YoJyInKSYmdC5zdHlsZSgiZm9udC1mYW1pbHkiLGUucmVwbGFjZShsLCJUT0JFU1RSSVBQRUQiKSl9ZWxzZSB0LnJlbW92ZSgpfSksZi5zZWxlY3RBbGwoIi5wb2ludCwuc2NhdHRlcnB0cyIpLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1uLnNlbGVjdCh0aGlzKSxlPXRoaXMuc3R5bGUuZmlsbDtlJiYtMSE9PWUuaW5kZXhPZigidXJsKCIpJiZ0LnN0eWxlKCJmaWxsIixlLnJlcGxhY2UobCwiVE9CRVNUUklQUEVEIikpfSksInBkZiIhPT1lJiYiZXBzIiE9PWV8fGYuc2VsZWN0QWxsKCIjTWF0aEpheF9TVkdfZ2x5cGhzIHBhdGgiKS5hdHRyKCJzdHJva2Utd2lkdGgiLDApLGYubm9kZSgpLnNldEF0dHJpYnV0ZU5TKHMueG1sbnMsInhtbG5zIixzLnN2ZyksZi5ub2RlKCkuc2V0QXR0cmlidXRlTlMocy54bWxucywieG1sbnM6eGxpbmsiLHMueGxpbmspLCJzdmciPT09ZSYmciYmKGYuYXR0cigid2lkdGgiLHIqZCksZi5hdHRyKCJoZWlnaHQiLHIqZyksZi5hdHRyKCJ2aWV3Qm94IiwiMCAwICIrZCsiICIrZykpO3ZhciBfPShuZXcgd2luZG93LlhNTFNlcmlhbGl6ZXIpLnNlcmlhbGl6ZVRvU3RyaW5nKGYubm9kZSgpKTtyZXR1cm4gXz1mdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCgiYm9keSIpLmFwcGVuZCgiZGl2Iikuc3R5bGUoe2Rpc3BsYXk6Im5vbmUifSkuaHRtbCgiIikscj10LnJlcGxhY2UoLygmW147XSo7KS9naSxmdW5jdGlvbih0KXtyZXR1cm4iJmx0OyI9PT10PyImIzYwOyI6IiZydDsiPT09dD8iJiM2MjsiOi0xIT09dC5pbmRleE9mKCI8Iil8fC0xIT09dC5pbmRleE9mKCI+Iik/IiI6ZS5odG1sKHQpLnRleHQoKX0pO3JldHVybiBlLnJlbW92ZSgpLHJ9KF8pLF89KF89Xy5yZXBsYWNlKC8mKD8hXHcrO3xcI1swLTldKzt8IFwjeFswLTlBLUZdKzspL2csIiZhbXA7IikpLnJlcGxhY2UoYywiJyIpLGkuaXNJRSgpJiYoXz0oXz0oXz1fLnJlcGxhY2UoLyIvZ2ksIiciKSkucmVwbGFjZSgvKFwoJyMpKFteJ10qKSgnXCkpL2dpLCcoIiMkMiIpJykpLnJlcGxhY2UoLyhcXCcpL2dpLCciJykpLF99fSx7Ii4uL2NvbXBvbmVudHMvY29sb3IiOjU1OCwiLi4vY29tcG9uZW50cy9kcmF3aW5nIjo1ODMsIi4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIjo2NjMsIi4uL2xpYiI6Njg0LGQzOjE0N31dLDgyNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKS5tZXJnZUFycmF5O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXRbcl0uaT1yO24oZS50ZXh0LHQsInR4IiksbihlLmhvdmVydGV4dCx0LCJodHgiKTt2YXIgaT1lLm1hcmtlcjtpZihpKXtuKGkub3BhY2l0eSx0LCJtbyIpLG4oaS5jb2xvcix0LCJtYyIpO3ZhciBhPWkubGluZTthJiYobihhLmNvbG9yLHQsIm1sYyIpLG4oYS53aWR0aCx0LCJtbHciKSl9fX0seyIuLi8uLi9saWIiOjY4NH1dLDgyNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsbD1vKHtlZGl0VHlwZToiY2FsYyIsYXJyYXlPazohMH0pLGM9cyh7fSxuLm1hcmtlci5saW5lLndpZHRoLHtkZmx0OjB9KSx1PXMoe3dpZHRoOmMsZWRpdFR5cGU6ImNhbGMifSxpKCJtYXJrZXIubGluZSIpKSxoPXMoe2xpbmU6dSxlZGl0VHlwZToiY2FsYyJ9LGkoIm1hcmtlciIpLHtjb2xvcmJhcjphLG9wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsYXJyYXlPazohMCxkZmx0OjEsbWluOjAsbWF4OjEsZWRpdFR5cGU6InN0eWxlIn19KTtlLmV4cG9ydHM9e3g6bi54LHgwOm4ueDAsZHg6bi5keCx5Om4ueSx5MDpuLnkwLGR5Om4uZHksdGV4dDpuLnRleHQsaG92ZXJ0ZXh0Om4uaG92ZXJ0ZXh0LHRleHRwb3NpdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiaW5zaWRlIiwib3V0c2lkZSIsImF1dG8iLCJub25lIl0sZGZsdDoibm9uZSIsYXJyYXlPazohMCxlZGl0VHlwZToiY2FsYyJ9LHRleHRmb250OnMoe30sbCx7fSksaW5zaWRldGV4dGZvbnQ6cyh7fSxsLHt9KSxvdXRzaWRldGV4dGZvbnQ6cyh7fSxsLHt9KSxjb25zdHJhaW50ZXh0Ont2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJpbnNpZGUiLCJvdXRzaWRlIiwiYm90aCIsIm5vbmUiXSxkZmx0OiJib3RoIixlZGl0VHlwZToiY2FsYyJ9LGNsaXBvbmF4aXM6cyh7fSxuLmNsaXBvbmF4aXMse30pLG9yaWVudGF0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ2IiwiaCJdLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0sYmFzZTp7dmFsVHlwZToiYW55IixkZmx0Om51bGwsYXJyYXlPazohMCxlZGl0VHlwZToiY2FsYyJ9LG9mZnNldDp7dmFsVHlwZToibnVtYmVyIixkZmx0Om51bGwsYXJyYXlPazohMCxlZGl0VHlwZToiY2FsYyJ9LHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6bnVsbCxtaW46MCxhcnJheU9rOiEwLGVkaXRUeXBlOiJjYWxjIn0sbWFya2VyOmgsc2VsZWN0ZWQ6e21hcmtlcjp7b3BhY2l0eTpuLnNlbGVjdGVkLm1hcmtlci5vcGFjaXR5LGNvbG9yOm4uc2VsZWN0ZWQubWFya2VyLmNvbG9yLGVkaXRUeXBlOiJzdHlsZSJ9LHRleHRmb250Om4uc2VsZWN0ZWQudGV4dGZvbnQsZWRpdFR5cGU6InN0eWxlIn0sdW5zZWxlY3RlZDp7bWFya2VyOntvcGFjaXR5Om4udW5zZWxlY3RlZC5tYXJrZXIub3BhY2l0eSxjb2xvcjpuLnVuc2VsZWN0ZWQubWFya2VyLmNvbG9yLGVkaXRUeXBlOiJzdHlsZSJ9LHRleHRmb250Om4udW5zZWxlY3RlZC50ZXh0Zm9udCxlZGl0VHlwZToic3R5bGUifSxyOm4ucix0Om4udCxfZGVwcmVjYXRlZDp7YmFyZGlyOnt2YWxUeXBlOiJlbnVtZXJhdGVkIixlZGl0VHlwZToiY2FsYyIsdmFsdWVzOlsidiIsImgiXX19fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXMiOjU1OSwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiOjU2NSwiLi4vLi4vbGliL2V4dGVuZCI6NjczLCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjc1OCwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIjoxMDE1fV0sODI4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9saWIiKS5pc0FycmF5T3JUeXBlZEFycmF5LGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oYXNfY29sb3JzY2FsZSIpLHM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiKSxsPXQoIi4vYXJyYXlzX3RvX2NhbGNkYXRhIiksYz10KCIuLi9zY2F0dGVyL2NhbGNfc2VsZWN0aW9uIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsdSxoLGYscCxkPWEuZ2V0RnJvbUlkKHQsZS54YXhpc3x8IngiKSxnPWEuZ2V0RnJvbUlkKHQsZS55YXhpc3x8InkiKTsiaCI9PT0oZS5vcmllbnRhdGlvbnx8KGUueCYmIWUueT8iaCI6InYiKSk/KHI9ZCxoPWQubWFrZUNhbGNkYXRhKGUsIngiKSx1PWcubWFrZUNhbGNkYXRhKGUsInkiKSxwPWUueGNhbGVuZGFyKToocj1nLGg9Zy5tYWtlQ2FsY2RhdGEoZSwieSIpLHU9ZC5tYWtlQ2FsY2RhdGEoZSwieCIpLHA9ZS55Y2FsZW5kYXIpO3ZhciBtPU1hdGgubWluKHUubGVuZ3RoLGgubGVuZ3RoKSx2PW5ldyBBcnJheShtKTtmb3IoZj0wO2Y8bTtmKyspdltmXT17cDp1W2ZdLHM6aFtmXX0sZS5pZHMmJih2W2ZdLmlkPVN0cmluZyhlLmlkc1tmXSkpO3ZhciB5LHg9ZS5iYXNlO2lmKGkoeCkpe2ZvcihmPTA7ZjxNYXRoLm1pbih4Lmxlbmd0aCx2Lmxlbmd0aCk7ZisrKXk9ci5kMmMoeFtmXSwwLHApLG4oeSk/KHZbZl0uYj0reSx2W2ZdLmhhc0I9MSk6dltmXS5iPTA7Zm9yKDtmPHYubGVuZ3RoO2YrKyl2W2ZdLmI9MH1lbHNle3k9ci5kMmMoeCwwLHApO3ZhciBiPW4oeSk7Zm9yKHk9Yj95OjAsZj0wO2Y8di5sZW5ndGg7ZisrKXZbZl0uYj15LGImJih2W2ZdLmhhc0I9MSl9cmV0dXJuIG8oZSwibWFya2VyIikmJnMoZSxlLm1hcmtlci5jb2xvciwibWFya2VyIiwiYyIpLG8oZSwibWFya2VyLmxpbmUiKSYmcyhlLGUubWFya2VyLmxpbmUuY29sb3IsIm1hcmtlci5saW5lIiwiYyIpLGwodixlKSxjKHYsZSksdn19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiOjU2NiwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hhc19jb2xvcnNjYWxlIjo1NzIsIi4uLy4uL2xpYiI6Njg0LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzMyLCIuLi9zY2F0dGVyL2NhbGNfc2VsZWN0aW9uIjoxMDE3LCIuL2FycmF5c190b19jYWxjZGF0YSI6ODI2LCJmYXN0LWlzbnVtZXJpYyI6MjE0fV0sODI5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGE9dCgiLi4vLi4vcmVnaXN0cnkiKSxvPXQoIi4uL3NjYXR0ZXIveHlfZGVmYXVsdHMiKSxzPXQoIi4uL2Jhci9zdHlsZV9kZWZhdWx0cyIpLGw9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGMpe2Z1bmN0aW9uIHUocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGwscixpKX12YXIgaD1uLmNvZXJjZUZvbnQ7aWYobyh0LGUsYyx1KSl7dSgib3JpZW50YXRpb24iLGUueCYmIWUueT8iaCI6InYiKSx1KCJiYXNlIiksdSgib2Zmc2V0IiksdSgid2lkdGgiKSx1KCJ0ZXh0IiksdSgiaG92ZXJ0ZXh0Iik7dmFyIGY9dSgidGV4dHBvc2l0aW9uIikscD1BcnJheS5pc0FycmF5KGYpfHwiYXV0byI9PT1mLGQ9cHx8Imluc2lkZSI9PT1mLGc9cHx8Im91dHNpZGUiPT09ZjtpZihkfHxnKXt2YXIgbT1oKHUsInRleHRmb250IixjLmZvbnQpO2QmJmgodSwiaW5zaWRldGV4dGZvbnQiLG0pLGcmJmgodSwib3V0c2lkZXRleHRmb250IixtKSx1KCJjb25zdHJhaW50ZXh0IiksdSgic2VsZWN0ZWQudGV4dGZvbnQuY29sb3IiKSx1KCJ1bnNlbGVjdGVkLnRleHRmb250LmNvbG9yIiksdSgiY2xpcG9uYXhpcyIpfXModCxlLHUscixjKTt2YXIgdj1hLmdldENvbXBvbmVudE1ldGhvZCgiZXJyb3JiYXJzIiwic3VwcGx5RGVmYXVsdHMiKTt2KHQsZSxpLmRlZmF1bHRMaW5lLHtheGlzOiJ5In0pLHYodCxlLGkuZGVmYXVsdExpbmUse2F4aXM6IngiLGluaGVyaXQ6InkifSksbi5jb2VyY2VTZWxlY3Rpb25NYXJrZXJPcGFjaXR5KGUsdSl9ZWxzZSBlLnZpc2libGU9ITF9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjU1OCwiLi4vLi4vbGliIjo2ODQsIi4uLy4uL3JlZ2lzdHJ5Ijo4MTcsIi4uL2Jhci9zdHlsZV9kZWZhdWx0cyI6ODM5LCIuLi9zY2F0dGVyL3h5X2RlZmF1bHRzIjoxMDM5LCIuL2F0dHJpYnV0ZXMiOjgyN31dLDgzMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2Z4IiksaT10KCIuLi8uLi9yZWdpc3RyeSIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLG89dCgiLi4vc2NhdHRlci9maWxsX2hvdmVyX3RleHQiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyl7dmFyIGwsYyx1LGgsZixwLGQsZz10LmNkLG09Z1swXS50cmFjZSx2PWdbMF0udCx5PSJjbG9zZXN0Ij09PXMseD10Lm1heEhvdmVyRGlzdGFuY2UsYj10Lm1heFNwaWtlRGlzdGFuY2U7ZnVuY3Rpb24gXyh0KXtyZXR1cm4gdFt1XS10LncvMn1mdW5jdGlvbiB3KHQpe3JldHVybiB0W3VdK3Qudy8yfXZhciBrPXk/XzpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5taW4oXyh0KSx0LnAtdi5iYXJkZWx0YS8yKX0sTT15P3c6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWF4KHcodCksdC5wK3YuYmFyZGVsdGEvMil9O2Z1bmN0aW9uIEEodCxlKXtyZXR1cm4gbi5pbmJveCh0LWwsZS1sLHgrTWF0aC5taW4oMSxNYXRoLmFicyhlLXQpL2QpLTEpfWZ1bmN0aW9uIFQodCl7cmV0dXJuIEEoayh0KSxNKHQpKX1mdW5jdGlvbiBTKHQpe3JldHVybiBuLmluYm94KHQuYi1jLHRbaF0tYyx4Kyh0W2hdLWMpLyh0W2hdLXQuYiktMSl9ImgiPT09bS5vcmllbnRhdGlvbj8obD1yLGM9ZSx1PSJ5IixoPSJ4IixmPVMscD1UKToobD1lLGM9cix1PSJ4IixoPSJ5IixwPVMsZj1UKTt2YXIgRT10W3UrImEiXSxDPXRbaCsiYSJdO2Q9TWF0aC5hYnMoRS5yMmMoRS5yYW5nZVsxXSktRS5yMmMoRS5yYW5nZVswXSkpO3ZhciBMPW4uZ2V0RGlzdGFuY2VGdW5jdGlvbihzLGYscCxmdW5jdGlvbih0KXtyZXR1cm4oZih0KStwKHQpKS8yfSk7aWYobi5nZXRDbG9zZXN0KGcsTCx0KSwhMSE9PXQuaW5kZXgpe3l8fChrPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1pbihfKHQpLHQucC12LmJhcmdyb3Vwd2lkdGgvMil9LE09ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWF4KHcodCksdC5wK3YuYmFyZ3JvdXB3aWR0aC8yKX0pO3ZhciB6PWdbdC5pbmRleF0sUD16Lm1jY3x8bS5tYXJrZXIuY29sb3IsST16Lm1sY2N8fG0ubWFya2VyLmxpbmUuY29sb3IsTz16Lm1sd3x8bS5tYXJrZXIubGluZS53aWR0aDthLm9wYWNpdHkoUCk/dC5jb2xvcj1QOmEub3BhY2l0eShJKSYmTyYmKHQuY29sb3I9SSk7dmFyIEQ9bS5iYXNlP3ouYit6LnM6ei5zO3RbaCsiMCJdPXRbaCsiMSJdPUMuYzJwKHpbaF0sITApLHRbaCsiTGFiZWxWYWwiXT1EO3ZhciBSPXYuZXh0ZW50c1t2LmV4dGVudHMucm91bmQoei5wKV07cmV0dXJuIHRbdSsiMCJdPUUuYzJwKHk/ayh6KTpSWzBdLCEwKSx0W3UrIjEiXT1FLmMycCh5P00oeik6UlsxXSwhMCksdFt1KyJMYWJlbFZhbCJdPXoucCx0LnNwaWtlRGlzdGFuY2U9KFMoeikrZnVuY3Rpb24odCl7cmV0dXJuIEEoXyh0KSx3KHQpKX0oeikpLzIrYi14LHRbdSsiU3Bpa2UiXT1FLmMycCh6LnAsITApLG8oeixtLHQpLGkuZ2V0Q29tcG9uZW50TWV0aG9kKCJlcnJvcmJhcnMiLCJob3ZlckluZm8iKSh6LG0sdCksW3RdfX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NTU4LCIuLi8uLi9jb21wb25lbnRzL2Z4Ijo2MDAsIi4uLy4uL3JlZ2lzdHJ5Ijo4MTcsIi4uL3NjYXR0ZXIvZmlsbF9ob3Zlcl90ZXh0IjoxMDIyfV0sODMxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXt9O24uYXR0cmlidXRlcz10KCIuL2F0dHJpYnV0ZXMiKSxuLmxheW91dEF0dHJpYnV0ZXM9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLG4uc3VwcGx5RGVmYXVsdHM9dCgiLi9kZWZhdWx0cyIpLG4uc3VwcGx5TGF5b3V0RGVmYXVsdHM9dCgiLi9sYXlvdXRfZGVmYXVsdHMiKSxuLmNhbGM9dCgiLi9jYWxjIiksbi5zZXRQb3NpdGlvbnM9dCgiLi9zZXRfcG9zaXRpb25zIiksbi5jb2xvcmJhcj10KCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhciIpLG4uYXJyYXlzVG9DYWxjZGF0YT10KCIuL2FycmF5c190b19jYWxjZGF0YSIpLG4ucGxvdD10KCIuL3Bsb3QiKSxuLnN0eWxlPXQoIi4vc3R5bGUiKS5zdHlsZSxuLnN0eWxlT25TZWxlY3Q9dCgiLi9zdHlsZSIpLnN0eWxlT25TZWxlY3Qsbi5ob3ZlclBvaW50cz10KCIuL2hvdmVyIiksbi5zZWxlY3RQb2ludHM9dCgiLi9zZWxlY3QiKSxuLm1vZHVsZVR5cGU9InRyYWNlIixuLm5hbWU9ImJhciIsbi5iYXNlUGxvdE1vZHVsZT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxuLmNhdGVnb3JpZXM9WyJjYXJ0ZXNpYW4iLCJzdmciLCJiYXIiLCJvcmllbnRlZCIsImVycm9yQmFyc09LIiwic2hvd0xlZ2VuZCIsInpvb21TY2FsZSJdLG4ubWV0YT17fSxlLmV4cG9ydHM9bn0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjc0MywiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiOjEwMzIsIi4vYXJyYXlzX3RvX2NhbGNkYXRhIjo4MjYsIi4vYXR0cmlidXRlcyI6ODI3LCIuL2NhbGMiOjgyOCwiLi9kZWZhdWx0cyI6ODI5LCIuL2hvdmVyIjo4MzAsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjgzMiwiLi9sYXlvdXRfZGVmYXVsdHMiOjgzMywiLi9wbG90Ijo4MzQsIi4vc2VsZWN0Ijo4MzUsIi4vc2V0X3Bvc2l0aW9ucyI6ODM2LCIuL3N0eWxlIjo4Mzh9XSw4MzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtiYXJtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJzdGFjayIsImdyb3VwIiwib3ZlcmxheSIsInJlbGF0aXZlIl0sZGZsdDoiZ3JvdXAiLGVkaXRUeXBlOiJjYWxjIn0sYmFybm9ybTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiIiwiZnJhY3Rpb24iLCJwZXJjZW50Il0sZGZsdDoiIixlZGl0VHlwZToiY2FsYyJ9LGJhcmdhcDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxlZGl0VHlwZToiY2FsYyJ9LGJhcmdyb3VwZ2FwOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MCxlZGl0VHlwZToiY2FsYyJ9fX0se31dLDgzMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxhPXQoIi4uLy4uL2xpYiIpLG89dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gcyhyLG4pe3JldHVybiBhLmNvZXJjZSh0LGUsbyxyLG4pfWZvcih2YXIgbD0hMSxjPSExLHU9ITEsaD17fSxmPTA7ZjxyLmxlbmd0aDtmKyspe3ZhciBwPXJbZl07aWYobi50cmFjZUlzKHAsImJhciIpKXtpZihsPSEwLCJvdmVybGF5IiE9PXQuYmFybW9kZSYmInN0YWNrIiE9PXQuYmFybW9kZSl7dmFyIGQ9cC54YXhpcytwLnlheGlzO2hbZF0mJih1PSEwKSxoW2RdPSEwfWlmKHAudmlzaWJsZSYmImhpc3RvZ3JhbSI9PT1wLnR5cGUpImNhdGVnb3J5IiE9PWkuZ2V0RnJvbUlkKHtfZnVsbExheW91dDplfSxwWyJ2Ij09PXAub3JpZW50YXRpb24/InhheGlzIjoieWF4aXMiXSkudHlwZSYmKGM9ITApfX1sJiYoIm92ZXJsYXkiIT09cygiYmFybW9kZSIpJiZzKCJiYXJub3JtIikscygiYmFyZ2FwIixjJiYhdT8wOi4yKSxzKCJiYXJncm91cGdhcCIpKX19LHsiLi4vLi4vbGliIjo2ODQsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3MzIsIi4uLy4uL3JlZ2lzdHJ5Ijo4MTcsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjgzMn1dLDgzNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiZmFzdC1pc251bWVyaWMiKSxhPXQoInRpbnljb2xvcjIiKSxvPXQoIi4uLy4uL2xpYiIpLHM9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksbD10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksYz10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSx1PXQoIi4uLy4uL3JlZ2lzdHJ5IiksaD10KCIuL2F0dHJpYnV0ZXMiKSxmPWgudGV4dCxwPWgudGV4dHBvc2l0aW9uLGQ9aC50ZXh0Zm9udCxnPWguaW5zaWRldGV4dGZvbnQsbT1oLm91dHNpZGV0ZXh0Zm9udCx2PTM7ZnVuY3Rpb24geSh0LGUscixuLGksYSl7dmFyIG87cmV0dXJuIGk8MT9vPSJzY2FsZSgiK2krIikgIjooaT0xLG89IiIpLCJ0cmFuc2xhdGUoIisoci1pKnQpKyIgIisobi1pKmUpKyIpIitvKyhhPyJyb3RhdGUoIithKyIgIit0KyIgIitlKyIpICI6IiIpfWZ1bmN0aW9uIHgodCxlLHIsbil7dmFyIG89YigoZT1lfHx7fSkuZmFtaWx5LHIpLHM9YihlLnNpemUsciksbD1iKGUuY29sb3Iscik7cmV0dXJue2ZhbWlseTpfKHQuZmFtaWx5LG8sbi5mYW1pbHkpLHNpemU6ZnVuY3Rpb24odCxlLHIpe2lmKGkoZSkpe2U9K2U7dmFyIG49dC5taW4sYT10Lm1heCxvPXZvaWQgMCE9PW4mJmU8bnx8dm9pZCAwIT09YSYmZT5hO2lmKCFvKXJldHVybiBlfXJldHVybiB2b2lkIDAhPT1yP3I6dC5kZmx0fSh0LnNpemUscyxuLnNpemUpLGNvbG9yOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gYShlKS5pc1ZhbGlkKCk/ZTp2b2lkIDAhPT1yP3I6dC5kZmx0fSh0LmNvbG9yLGwsbi5jb2xvcil9fWZ1bmN0aW9uIGIodCxlKXt2YXIgcjtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT9lPHQubGVuZ3RoJiYocj10W2VdKTpyPXQscn1mdW5jdGlvbiBfKHQsZSxyKXtpZigic3RyaW5nIj09dHlwZW9mIGUpe2lmKGV8fCF0Lm5vQmxhbmspcmV0dXJuIGV9ZWxzZSBpZigibnVtYmVyIj09dHlwZW9mIGUmJiF0LnN0cmljdClyZXR1cm4gU3RyaW5nKGUpO3JldHVybiB2b2lkIDAhPT1yP3I6dC5kZmx0fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXt2YXIgaD1lLnhheGlzLHc9ZS55YXhpcyxrPXQuX2Z1bGxMYXlvdXQsTT1hLnNlbGVjdEFsbCgiZy50cmFjZS5iYXJzIikuZGF0YShyLGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdLnRyYWNlLnVpZH0pO00uZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInRyYWNlIGJhcnMiKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInBvaW50cyIpLE0uZXhpdCgpLnJlbW92ZSgpLE0ub3JkZXIoKSxNLmVhY2goZnVuY3Rpb24ocil7dmFyIGE9clswXSx1PWEudCxNPWEudHJhY2UsQT1uLnNlbGVjdCh0aGlzKTtlLmlzUmFuZ2VQbG90fHwoYS5ub2RlMz1BKTt2YXIgVD11LnBvZmZzZXQsUz1BcnJheS5pc0FycmF5KFQpLEU9QS5zZWxlY3QoImcucG9pbnRzIikuc2VsZWN0QWxsKCJnLnBvaW50IikuZGF0YShvLmlkZW50aXR5KTtFLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgicG9pbnQiLCEwKSxFLmV4aXQoKS5yZW1vdmUoKSxFLmVhY2goZnVuY3Rpb24oYSx1KXt2YXIgQSxFLEMsTCx6PW4uc2VsZWN0KHRoaXMpLFA9YS5wKyhTP1RbdV06VCksST1QK2EudyxPPWEuYixEPU8rYS5zO2lmKCJoIj09PU0ub3JpZW50YXRpb24/KEM9dy5jMnAoUCwhMCksTD13LmMycChJLCEwKSxBPWguYzJwKE8sITApLEU9aC5jMnAoRCwhMCksYS5jdD1bRSwoQytMKS8yXSk6KEE9aC5jMnAoUCwhMCksRT1oLmMycChJLCEwKSxDPXcuYzJwKE8sITApLEw9dy5jMnAoRCwhMCksYS5jdD1bKEErRSkvMixMXSksaShBKSYmaShFKSYmaShDKSYmaShMKSYmQSE9PUUmJkMhPT1MKXt2YXIgUj0oYS5tbHcrMXx8TS5tYXJrZXIubGluZS53aWR0aCsxfHwoYS50cmFjZT9hLnRyYWNlLm1hcmtlci5saW5lLndpZHRoOjApKzEpLTEsQj1uLnJvdW5kKFIvMiUxLDIpO2lmKCF0Ll9jb250ZXh0LnN0YXRpY1Bsb3Qpe3ZhciBGPWwub3BhY2l0eShhLm1jfHxNLm1hcmtlci5jb2xvcik8MXx8Uj4uMDE/TjpmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLmFicyh0LWUpPj0yP04odCk6dD5lP01hdGguY2VpbCh0KTpNYXRoLmZsb29yKHQpfTtBPUYoQSxFKSxFPUYoRSxBKSxDPUYoQyxMKSxMPUYoTCxDKX1vLmVuc3VyZVNpbmdsZSh6LCJwYXRoIikuc3R5bGUoInZlY3Rvci1lZmZlY3QiLCJub24tc2NhbGluZy1zdHJva2UiKS5hdHRyKCJkIiwiTSIrQSsiLCIrQysiViIrTCsiSCIrRSsiViIrQysiWiIpLmNhbGwoYy5zZXRDbGlwVXJsLGUubGF5ZXJDbGlwSWQpLGZ1bmN0aW9uKHQsZSxyLG4saSxhLGwsdSl7dmFyIGg7ZnVuY3Rpb24gdyhlLHIsbil7dmFyIGk9by5lbnN1cmVTaW5nbGUoZSwidGV4dCIpLnRleHQocikuYXR0cih7Y2xhc3M6ImJhcnRleHQgYmFydGV4dC0iK2gsdHJhbnNmb3JtOiIiLCJ0ZXh0LWFuY2hvciI6Im1pZGRsZSIsImRhdGEtbm90ZXgiOjF9KS5jYWxsKGMuZm9udCxuKS5jYWxsKHMuY29udmVydFRvVHNwYW5zLHQpO3JldHVybiBpfXZhciBrPXJbMF0udHJhY2UsTT1rLm9yaWVudGF0aW9uLEE9ZnVuY3Rpb24odCxlKXt2YXIgcj1iKHQudGV4dCxlKTtyZXR1cm4gXyhmLHIpfShrLG4pO2lmKGg9ZnVuY3Rpb24odCxlKXt2YXIgcj1iKHQudGV4dHBvc2l0aW9uLGUpO3JldHVybiBmdW5jdGlvbih0LGUscil7cmV0dXJuIHQuY29lcmNlTnVtYmVyJiYoZT0rZSksLTEhPT10LnZhbHVlcy5pbmRleE9mKGUpP2U6dm9pZCAwIT09cj9yOnQuZGZsdH0ocCxyKX0oayxuKSwhQXx8Im5vbmUiPT09aClyZXR1cm4gdm9pZCBlLnNlbGVjdCgidGV4dCIpLnJlbW92ZSgpO3ZhciBULFMsRSxDLEwseixQPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4geChkLHQudGV4dGZvbnQsZSxyKX0oayxuLHQuX2Z1bGxMYXlvdXQuZm9udCksST1mdW5jdGlvbih0LGUscil7cmV0dXJuIHgoZyx0Lmluc2lkZXRleHRmb250LGUscil9KGssbixQKSxPPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4geChtLHQub3V0c2lkZXRleHRmb250LGUscil9KGssbixQKSxEPXQuX2Z1bGxMYXlvdXQuYmFybW9kZSxSPSJyZWxhdGl2ZSI9PT1ELEI9InN0YWNrIj09PUR8fFIsRj1yW25dLE49IUJ8fEYuX291dG1vc3Qsaj1NYXRoLmFicyhhLWkpLTIqdixWPU1hdGguYWJzKHUtbCktMip2OyJvdXRzaWRlIj09PWgmJihOfHwoaD0iaW5zaWRlIikpO2lmKCJhdXRvIj09PWgpaWYoTil7aD0iaW5zaWRlIixUPXcoZSxBLEkpLFM9Yy5iQm94KFQubm9kZSgpKSxFPVMud2lkdGgsQz1TLmhlaWdodDt2YXIgVT1FPjAmJkM+MCxxPUU8PWomJkM8PVYsSD1FPD1WJiZDPD1qLEc9ImgiPT09TT9qPj1FKihWL0MpOlY+PUMqKGovRSk7VSYmKHF8fEh8fEcpP2g9Imluc2lkZSI6KGg9Im91dHNpZGUiLFQucmVtb3ZlKCksVD1udWxsKX1lbHNlIGg9Imluc2lkZSI7aWYoIVQmJihUPXcoZSxBLCJvdXRzaWRlIj09PWg/TzpJKSxTPWMuYkJveChULm5vZGUoKSksRT1TLndpZHRoLEM9Uy5oZWlnaHQsRTw9MHx8Qzw9MCkpcmV0dXJuIHZvaWQgVC5yZW1vdmUoKTsib3V0c2lkZSI9PT1oPyh6PSJib3RoIj09PWsuY29uc3RyYWludGV4dHx8Im91dHNpZGUiPT09ay5jb25zdHJhaW50ZXh0LEw9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7dmFyIHMsbD0iaCI9PT1hP01hdGguYWJzKG4tcik6TWF0aC5hYnMoZS10KTtsPjIqdiYmKHM9dik7dmFyIGM9MTtvJiYoYz0iaCI9PT1hP01hdGgubWluKDEsbC9pLmhlaWdodCk6TWF0aC5taW4oMSxsL2kud2lkdGgpKTt2YXIgdSxoLGYscCxkPShpLmxlZnQraS5yaWdodCkvMixnPShpLnRvcCtpLmJvdHRvbSkvMjt1PWMqaS53aWR0aCxoPWMqaS5oZWlnaHQsImgiPT09YT9lPHQ/KGY9ZS1zLXUvMixwPShyK24pLzIpOihmPWUrcyt1LzIscD0ocituKS8yKTpuPnI/KGY9KHQrZSkvMixwPW4rcytoLzIpOihmPSh0K2UpLzIscD1uLXMtaC8yKTtyZXR1cm4geShkLGcsZixwLGMsITEpfShpLGEsbCx1LFMsTSx6KSk6KHo9ImJvdGgiPT09ay5jb25zdHJhaW50ZXh0fHwiaW5zaWRlIj09PWsuY29uc3RyYWludGV4dCxMPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe3ZhciBzLGwsYyx1LGgsZixwLGQ9aS53aWR0aCxnPWkuaGVpZ2h0LG09KGkubGVmdCtpLnJpZ2h0KS8yLHg9KGkudG9wK2kuYm90dG9tKS8yLGI9TWF0aC5hYnMoZS10KSxfPU1hdGguYWJzKG4tcik7Yj4yKnYmJl8+Mip2PyhiLT0yKihoPXYpLF8tPTIqaCk6aD0wO2Q8PWImJmc8PV8/KGY9ITEscD0xKTpkPD1fJiZnPD1iPyhmPSEwLHA9MSk6ZDxnPT1iPF8/KGY9ITEscD1vP01hdGgubWluKGIvZCxfL2cpOjEpOihmPSEwLHA9bz9NYXRoLm1pbihfL2QsYi9nKToxKTtmJiYoZj05MCk7Zj8ocz1wKmcsbD1wKmQpOihzPXAqZCxsPXAqZyk7ImgiPT09YT9lPHQ/KGM9ZStoK3MvMix1PShyK24pLzIpOihjPWUtaC1zLzIsdT0ocituKS8yKTpuPnI/KGM9KHQrZSkvMix1PW4taC1sLzIpOihjPSh0K2UpLzIsdT1uK2grbC8yKTtyZXR1cm4geShtLHgsYyx1LHAsZil9KGksYSxsLHUsUyxNLHopKTtULmF0dHIoInRyYW5zZm9ybSIsTCl9KHQseixyLHUsQSxFLEMsTCksZS5sYXllckNsaXBJZCYmYy5oaWRlT3V0c2lkZVJhbmdlUG9pbnQoclt1XSx6LnNlbGVjdCgidGV4dCIpLGgsdyxNLnhjYWxlbmRhcixNLnljYWxlbmRhcil9ZWxzZSB6LnJlbW92ZSgpO2Z1bmN0aW9uIE4odCl7cmV0dXJuIDA9PT1rLmJhcmdhcCYmMD09PWsuYmFyZ3JvdXBnYXA/bi5yb3VuZChNYXRoLnJvdW5kKHQpLUIsMik6dH19KTt2YXIgQz0hMT09PXJbMF0udHJhY2UuY2xpcG9uYXhpcztjLnNldENsaXBVcmwoQSxDP251bGw6ZS5sYXllckNsaXBJZCl9KSx1LmdldENvbXBvbmVudE1ldGhvZCgiZXJyb3JiYXJzIiwicGxvdCIpKE0sZSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjU1OCwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo1ODMsIi4uLy4uL2xpYiI6Njg0LCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjcwOCwiLi4vLi4vcmVnaXN0cnkiOjgxNywiLi9hdHRyaWJ1dGVzIjo4MjcsZDM6MTQ3LCJmYXN0LWlzbnVtZXJpYyI6MjE0LHRpbnljb2xvcjI6NDk5fV0sODM1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLG49dC5jZCxpPXQueGF4aXMsYT10LnlheGlzLG89W107aWYoITE9PT1lKWZvcihyPTA7cjxuLmxlbmd0aDtyKyspbltyXS5zZWxlY3RlZD0wO2Vsc2UgZm9yKHI9MDtyPG4ubGVuZ3RoO3IrKyl7dmFyIHM9bltyXTtlLmNvbnRhaW5zKHMuY3QpPyhvLnB1c2goe3BvaW50TnVtYmVyOnIseDppLmMyZChzLngpLHk6YS5jMmQocy55KX0pLHMuc2VsZWN0ZWQ9MSk6cy5zZWxlY3RlZD0wfXJldHVybiBvfX0se31dLDgzNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vbGliIikuaXNBcnJheU9yVHlwZWRBcnJheSxhPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU0sbz10KCIuLi8uLi9yZWdpc3RyeSIpLHM9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxsPXQoIi4vc2lldmUuanMiKTtmdW5jdGlvbiBjKHQsZSxyLGkpe2lmKGkubGVuZ3RoKXt2YXIgbyxjLGIsXyx3PXQuX2Z1bGxMYXlvdXQuYmFybW9kZSxrPSJncm91cCI9PT13O2lmKCJvdmVybGF5Ij09PXcpdSh0LGUscixpKTtlbHNlIGlmKGspe2ZvcihvPVtdLGM9W10sYj0wO2I8aS5sZW5ndGg7YisrKXZvaWQgMD09PShfPWlbYl0pWzBdLnRyYWNlLm9mZnNldD9jLnB1c2goXyk6by5wdXNoKF8pO2MubGVuZ3RoJiZmdW5jdGlvbih0LGUscixuKXt2YXIgaT10Ll9mdWxsTGF5b3V0LmJhcm5vcm0sYT1uZXcgbChuLCExLCFpKTsoZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYSxvLHM9dC5fZnVsbExheW91dCxsPXMuYmFyZ2FwLGM9cy5iYXJncm91cGdhcCx1PXIucG9zaXRpb25zLGg9ci5kaXN0aW5jdFBvc2l0aW9ucyxnPXIubWluRGlmZixtPXIudHJhY2VzLHY9dS5sZW5ndGghPT1oLmxlbmd0aCx5PW0ubGVuZ3RoLHg9ZyooMS1sKSxiPXY/eC95OngsXz1iKigxLWMpO2ZvcihuPTA7bjx5O24rKyl7aT1tW25dLGE9aVswXTt2YXIgdz12PygoMipuKzEteSkqYi1fKS8yOi1fLzI7KG89YS50KS5iYXJ3aWR0aD1fLG8ucG9mZnNldD13LG8uYmFyZ3JvdXB3aWR0aD14LG8uYmFyZGVsdGE9Z31yLmJpbldpZHRoPW1bMF1bMF0udC5iYXJ3aWR0aC8xMDAsZihyKSxwKHQsZSxyKSxkKHQsZSxyLHYpfSkodCxlLGEpLGk/KHYodCxyLGEpLHkodCxyLGEpKTptKHQscixhKX0odCxlLHIsYyksby5sZW5ndGgmJnUodCxlLHIsbyl9ZWxzZXtmb3Iobz1bXSxjPVtdLGI9MDtiPGkubGVuZ3RoO2IrKyl2b2lkIDA9PT0oXz1pW2JdKVswXS50cmFjZS5iYXNlP2MucHVzaChfKTpvLnB1c2goXyk7Yy5sZW5ndGgmJmZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBvPXQuX2Z1bGxMYXlvdXQuYmFybW9kZSxjPSJzdGFjayI9PT1vLHU9InJlbGF0aXZlIj09PW8sZj10Ll9mdWxsTGF5b3V0LmJhcm5vcm0scD1uZXcgbChpLHUsIShmfHxjfHx1KSk7aCh0LGUscCksZnVuY3Rpb24odCxlLHIpe3ZhciBpLG8sbCxjLHU9dC5fZnVsbExheW91dC5iYXJub3JtLGg9eChlKSxmPXIudHJhY2VzLHA9W251bGwsbnVsbF07Zm9yKGk9MDtpPGYubGVuZ3RoO2krKylmb3Iobz1mW2ldLGw9MDtsPG8ubGVuZ3RoO2wrKylpZigoYz1vW2xdKS5zIT09YSl7dmFyIGQ9ci5wdXQoYy5wLGMuYitjLnMpLG09ZCtjLmIrYy5zO2MuYj1kLGNbaF09bSx1fHwobihlLmMybChtKSkmJmcocCxtKSxjLmhhc0ImJm4oZS5jMmwoZCkpJiZnKHAsZCkpfXV8fHMuZXhwYW5kKGUscCx7dG96ZXJvOiEwLHBhZGRlZDohMH0pfSh0LHIscCk7Zm9yKHZhciBkPTA7ZDxpLmxlbmd0aDtkKyspZm9yKHZhciBtPWlbZF0sdj0wO3Y8bS5sZW5ndGg7disrKXt2YXIgYj1tW3ZdO2lmKGIucyE9PWEpe3ZhciBfPWIuYitiLnM9PT1wLmdldChiLnAsYi5zKTtfJiYoYi5fb3V0bW9zdD0hMCl9fWYmJnkodCxyLHApfSh0LGUscixjKSxvLmxlbmd0aCYmdSh0LGUscixvKX0hZnVuY3Rpb24odCxlKXt2YXIgcixpLGEsbz1lLl9pZC5jaGFyQXQoMCkscz17fSxsPTEvMCxjPS0xLzA7Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKylmb3IoYT10W3JdLGk9MDtpPGEubGVuZ3RoO2krKyl7dmFyIHU9YVtpXS5wO24odSkmJihsPU1hdGgubWluKGwsdSksYz1NYXRoLm1heChjLHUpKX12YXIgaD0xZTQvKGMtbCksZj1zLnJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybiBTdHJpbmcoTWF0aC5yb3VuZChoKih0LWwpKSl9O2ZvcihyPTA7cjx0Lmxlbmd0aDtyKyspZm9yKChhPXRbcl0pWzBdLnQuZXh0ZW50cz1zLGk9MDtpPGEubGVuZ3RoO2krKyl7dmFyIHA9YVtpXSxkPXBbb10tcC53LzI7aWYobihkKSl7dmFyIGc9cFtvXStwLncvMixtPWYocC5wKTtzW21dP3NbbV09W01hdGgubWluKGQsc1ttXVswXSksTWF0aC5tYXgoZyxzW21dWzFdKV06c1ttXT1bZCxnXX19fShpLGUpfX1mdW5jdGlvbiB1KHQsZSxyLG4pe2Zvcih2YXIgaT10Ll9mdWxsTGF5b3V0LmJhcm5vcm0sYT0haSxvPTA7bzxuLmxlbmd0aDtvKyspe3ZhciBzPW5bb10sYz1uZXcgbChbc10sITEsYSk7aCh0LGUsYyksaT8odih0LHIsYykseSh0LHIsYykpOm0odCxyLGMpfX1mdW5jdGlvbiBoKHQsZSxyKXt2YXIgbixpLGE9dC5fZnVsbExheW91dCxvPWEuYmFyZ2FwLHM9YS5iYXJncm91cGdhcCxsPXIubWluRGlmZixjPXIudHJhY2VzLHU9bCooMS1vKSxoPXUqKDEtcyksZz0taC8yO2ZvcihuPTA7bjxjLmxlbmd0aDtuKyspKGk9Y1tuXVswXS50KS5iYXJ3aWR0aD1oLGkucG9mZnNldD1nLGkuYmFyZ3JvdXB3aWR0aD11LGkuYmFyZGVsdGE9bDtyLmJpbldpZHRoPWNbMF1bMF0udC5iYXJ3aWR0aC8xMDAsZihyKSxwKHQsZSxyKSxkKHQsZSxyKX1mdW5jdGlvbiBmKHQpe3ZhciBlLHIsYSxvLHMsbCxjPXQudHJhY2VzO2ZvcihlPTA7ZTxjLmxlbmd0aDtlKyspe289KGE9KHI9Y1tlXSlbMF0pLnRyYWNlLGw9YS50O3ZhciB1LGg9by5vZmZzZXQsZj1sLnBvZmZzZXQ7aWYoaShoKSl7Zm9yKHU9aC5zbGljZSgwLHIubGVuZ3RoKSxzPTA7czx1Lmxlbmd0aDtzKyspbih1W3NdKXx8KHVbc109Zik7Zm9yKHM9dS5sZW5ndGg7czxyLmxlbmd0aDtzKyspdS5wdXNoKGYpO2wucG9mZnNldD11fWVsc2Ugdm9pZCAwIT09aCYmKGwucG9mZnNldD1oKTt2YXIgcD1vLndpZHRoLGQ9bC5iYXJ3aWR0aDtpZihpKHApKXt2YXIgZz1wLnNsaWNlKDAsci5sZW5ndGgpO2ZvcihzPTA7czxnLmxlbmd0aDtzKyspbihnW3NdKXx8KGdbc109ZCk7Zm9yKHM9Zy5sZW5ndGg7czxyLmxlbmd0aDtzKyspZy5wdXNoKGQpO2lmKGwuYmFyd2lkdGg9Zyx2b2lkIDA9PT1oKXtmb3IodT1bXSxzPTA7czxyLmxlbmd0aDtzKyspdS5wdXNoKGYrKGQtZ1tzXSkvMik7bC5wb2Zmc2V0PXV9fWVsc2Ugdm9pZCAwIT09cCYmKGwuYmFyd2lkdGg9cCx2b2lkIDA9PT1oJiYobC5wb2Zmc2V0PWYrKGQtcCkvMikpfX1mdW5jdGlvbiBwKHQsZSxyKXtmb3IodmFyIG49ci50cmFjZXMsaT14KGUpLGE9MDthPG4ubGVuZ3RoO2ErKylmb3IodmFyIG89blthXSxzPW9bMF0udCxsPXMucG9mZnNldCxjPUFycmF5LmlzQXJyYXkobCksdT1zLmJhcndpZHRoLGg9QXJyYXkuaXNBcnJheSh1KSxmPTA7ZjxvLmxlbmd0aDtmKyspe3ZhciBwPW9bZl0sZD1wLnc9aD91W2ZdOnU7cFtpXT1wLnArKGM/bFtmXTpsKStkLzJ9fWZ1bmN0aW9uIGQodCxlLHIsbil7dmFyIGk9ci50cmFjZXMsYT1yLmRpc3RpbmN0UG9zaXRpb25zLG89YVswXSxsPXIubWluRGlmZixjPWwvMjtzLm1pbkR0aWNrKGUsbCxvLG4pO2Zvcih2YXIgdT1NYXRoLm1pbi5hcHBseShNYXRoLGEpLWMsaD1NYXRoLm1heC5hcHBseShNYXRoLGEpK2MsZj0wO2Y8aS5sZW5ndGg7ZisrKXt2YXIgcD1pW2ZdLGQ9cFswXSxnPWQudHJhY2U7aWYodm9pZCAwIT09Zy53aWR0aHx8dm9pZCAwIT09Zy5vZmZzZXQpZm9yKHZhciBtPWQudCx2PW0ucG9mZnNldCx5PW0uYmFyd2lkdGgseD1BcnJheS5pc0FycmF5KHYpLGI9QXJyYXkuaXNBcnJheSh5KSxfPTA7XzxwLmxlbmd0aDtfKyspe3ZhciB3PXBbX10saz14P3ZbX106dixNPWI/eVtfXTp5LEE9dy5wK2ssVD1BK007dT1NYXRoLm1pbih1LEEpLGg9TWF0aC5tYXgoaCxUKX19cy5leHBhbmQoZSxbdSxoXSx7cGFkZGVkOiExfSl9ZnVuY3Rpb24gZyh0LGUpe24odFswXSk/dFswXT1NYXRoLm1pbih0WzBdLGUpOnRbMF09ZSxuKHRbMV0pP3RbMV09TWF0aC5tYXgodFsxXSxlKTp0WzFdPWV9ZnVuY3Rpb24gbSh0LGUscil7Zm9yKHZhciBpPXIudHJhY2VzLGE9eChlKSxvPVtudWxsLG51bGxdLGw9MDtsPGkubGVuZ3RoO2wrKylmb3IodmFyIGM9aVtsXSx1PTA7dTxjLmxlbmd0aDt1Kyspe3ZhciBoPWNbdV0sZj1oLmIscD1mK2gucztoW2FdPXAsbihlLmMybChwKSkmJmcobyxwKSxoLmhhc0ImJm4oZS5jMmwoZikpJiZnKG8sZil9cy5leHBhbmQoZSxvLHt0b3plcm86ITAscGFkZGVkOiEwfSl9ZnVuY3Rpb24gdih0LGUscil7Zm9yKHZhciBuPXIudHJhY2VzLGk9MDtpPG4ubGVuZ3RoO2krKylmb3IodmFyIG89bltpXSxzPTA7czxvLmxlbmd0aDtzKyspe3ZhciBsPW9bc107bC5zIT09YSYmci5wdXQobC5wLGwuYitsLnMpfX1mdW5jdGlvbiB5KHQsZSxyKXt2YXIgaT1yLnRyYWNlcyxvPXgoZSksbD0iZnJhY3Rpb24iPT09dC5fZnVsbExheW91dC5iYXJub3JtPzE6MTAwLGM9bC8xZTksdT1lLmwyYyhlLmMybCgwKSksaD0ic3RhY2siPT09dC5fZnVsbExheW91dC5iYXJtb2RlP2w6dSxmPVt1LGhdLHA9ITE7ZnVuY3Rpb24gZCh0KXtuKGUuYzJsKHQpKSYmKHQ8dS1jfHx0PmgrY3x8IW4odSkpJiYocD0hMCxnKGYsdCkpfWZvcih2YXIgbT0wO208aS5sZW5ndGg7bSsrKWZvcih2YXIgdj1pW21dLHk9MDt5PHYubGVuZ3RoO3krKyl7dmFyIGI9dlt5XTtpZihiLnMhPT1hKXt2YXIgXz1NYXRoLmFicyhsL3IuZ2V0KGIucCxiLnMpKTtiLmIqPV8sYi5zKj1fO3ZhciB3PWIuYixrPXcrYi5zO2Jbb109ayxkKGspLGIuaGFzQiYmZCh3KX19cy5leHBhbmQoZSxmLHt0b3plcm86ITAscGFkZGVkOnB9KX1mdW5jdGlvbiB4KHQpe3JldHVybiB0Ll9pZC5jaGFyQXQoMCl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj1lLnhheGlzLGk9ZS55YXhpcyxhPXQuX2Z1bGxEYXRhLHM9dC5jYWxjZGF0YSxsPVtdLHU9W107Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyl7dmFyIGg9YVtyXTshMD09PWgudmlzaWJsZSYmby50cmFjZUlzKGgsImJhciIpJiZoLnhheGlzPT09bi5faWQmJmgueWF4aXM9PT1pLl9pZCYmKCJoIj09PWgub3JpZW50YXRpb24/bC5wdXNoKHNbcl0pOnUucHVzaChzW3JdKSl9Yyh0LG4saSx1KSxjKHQsaSxuLGwpfX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo2NjEsIi4uLy4uL2xpYiI6Njg0LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzMyLCIuLi8uLi9yZWdpc3RyeSI6ODE3LCIuL3NpZXZlLmpzIjo4MzcsImZhc3QtaXNudW1lcmljIjoyMTR9XSw4Mzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWE7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNO2Z1bmN0aW9uIGEodCxlLHIpe3RoaXMudHJhY2VzPXQsdGhpcy5zZXBhcmF0ZU5lZ2F0aXZlVmFsdWVzPWUsdGhpcy5kb250TWVyZ2VPdmVybGFwcGluZ0RhdGE9cjtmb3IodmFyIGE9MS8wLG89W10scz0wO3M8dC5sZW5ndGg7cysrKXtmb3IodmFyIGw9dFtzXSxjPTA7YzxsLmxlbmd0aDtjKyspe3ZhciB1PWxbY107dS5wIT09aSYmby5wdXNoKHUucCl9bFswXSYmbFswXS53aWR0aDEmJihhPU1hdGgubWluKGxbMF0ud2lkdGgxLGEpKX10aGlzLnBvc2l0aW9ucz1vO3ZhciBoPW4uZGlzdGluY3RWYWxzKG8pO3RoaXMuZGlzdGluY3RQb3NpdGlvbnM9aC52YWxzLDE9PT1oLnZhbHMubGVuZ3RoJiZhIT09MS8wP3RoaXMubWluRGlmZj1hOnRoaXMubWluRGlmZj1NYXRoLm1pbihoLm1pbkRpZmYsYSksdGhpcy5iaW5XaWR0aD10aGlzLm1pbkRpZmYsdGhpcy5iaW5zPXt9fWEucHJvdG90eXBlLnB1dD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuZ2V0TGFiZWwodCxlKSxuPXRoaXMuYmluc1tyXXx8MDtyZXR1cm4gdGhpcy5iaW5zW3JdPW4rZSxufSxhLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmdldExhYmVsKHQsZSk7cmV0dXJuIHRoaXMuYmluc1tyXXx8MH0sYS5wcm90b3R5cGUuZ2V0TGFiZWw9ZnVuY3Rpb24odCxlKXtyZXR1cm4oZTwwJiZ0aGlzLnNlcGFyYXRlTmVnYXRpdmVWYWx1ZXM/InYiOiJeIikrKHRoaXMuZG9udE1lcmdlT3ZlcmxhcHBpbmdEYXRhP3Q6TWF0aC5yb3VuZCh0L3RoaXMuYmluV2lkdGgpKX19LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NjYxLCIuLi8uLi9saWIiOjY4NH1dLDgzODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksYT10KCIuLi8uLi9yZWdpc3RyeSIpO2Z1bmN0aW9uIG8odCxlLHIpe3ZhciBhPXQuc2VsZWN0QWxsKCJwYXRoIiksbz10LnNlbGVjdEFsbCgidGV4dCIpO2kucG9pbnRTdHlsZShhLGUsciksby5lYWNoKGZ1bmN0aW9uKHQpe3ZhciByLGE9bi5zZWxlY3QodGhpcyk7ZnVuY3Rpb24gbyhlKXt2YXIgbj1yW2VdO3JldHVybiBBcnJheS5pc0FycmF5KG4pP25bdC5pXTpufWEuY2xhc3NlZCgiYmFydGV4dC1pbnNpZGUiKT9yPWUuaW5zaWRldGV4dGZvbnQ6YS5jbGFzc2VkKCJiYXJ0ZXh0LW91dHNpZGUiKSYmKHI9ZS5vdXRzaWRldGV4dGZvbnQpLHJ8fChyPWUudGV4dGZvbnQpLGkuZm9udChhLG8oImZhbWlseSIpLG8oInNpemUiKSxvKCJjb2xvciIpKX0pfWUuZXhwb3J0cz17c3R5bGU6ZnVuY3Rpb24odCxlKXt2YXIgcj1lP2VbMF0ubm9kZTM6bi5zZWxlY3QodCkuc2VsZWN0QWxsKCJnLnRyYWNlLmJhcnMiKSxpPXIuc2l6ZSgpLHM9dC5fZnVsbExheW91dDtyLnN0eWxlKCJvcGFjaXR5IixmdW5jdGlvbih0KXtyZXR1cm4gdFswXS50cmFjZS5vcGFjaXR5fSkuZWFjaChmdW5jdGlvbih0KXsoInN0YWNrIj09PXMuYmFybW9kZSYmaT4xfHwwPT09cy5iYXJnYXAmJjA9PT1zLmJhcmdyb3VwZ2FwJiYhdFswXS50cmFjZS5tYXJrZXIubGluZS53aWR0aCkmJm4uc2VsZWN0KHRoaXMpLmF0dHIoInNoYXBlLXJlbmRlcmluZyIsImNyaXNwRWRnZXMiKX0pLHIuc2VsZWN0QWxsKCJnLnBvaW50cyIpLmVhY2goZnVuY3Rpb24oZSl7byhuLnNlbGVjdCh0aGlzKSxlWzBdLnRyYWNlLHQpfSksYS5nZXRDb21wb25lbnRNZXRob2QoImVycm9yYmFycyIsInN0eWxlIikocil9LHN0eWxlT25TZWxlY3Q6ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLm5vZGUzLG49ZVswXS50cmFjZTtuLnNlbGVjdGVkcG9pbnRzPyhpLnNlbGVjdGVkUG9pbnRTdHlsZShyLnNlbGVjdEFsbCgicGF0aCIpLG4pLGkuc2VsZWN0ZWRUZXh0U3R5bGUoci5zZWxlY3RBbGwoInRleHQiKSxuKSk6byhyLG4sdCl9fX0seyIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjU4MywiLi4vLi4vcmVnaXN0cnkiOjgxNyxkMzoxNDd9XSw4Mzk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hhc19jb2xvcnNjYWxlIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyxzKXtyKCJtYXJrZXIuY29sb3IiLG8pLGkodCwibWFya2VyIikmJmEodCxlLHMscix7cHJlZml4OiJtYXJrZXIuIixjTGV0dGVyOiJjIn0pLHIoIm1hcmtlci5saW5lLmNvbG9yIixuLmRlZmF1bHRMaW5lKSxpKHQsIm1hcmtlci5saW5lIikmJmEodCxlLHMscix7cHJlZml4OiJtYXJrZXIubGluZS4iLGNMZXR0ZXI6ImMifSkscigibWFya2VyLmxpbmUud2lkdGgiKSxyKCJtYXJrZXIub3BhY2l0eSIpLHIoInNlbGVjdGVkLm1hcmtlci5jb2xvciIpLHIoInVuc2VsZWN0ZWQubWFya2VyLmNvbG9yIil9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjU1OCwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIjo1NjgsIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oYXNfY29sb3JzY2FsZSI6NTcyfV0sODQwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxvPW4ubWFya2VyLHM9by5saW5lO2UuZXhwb3J0cz17eTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSx4Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHgwOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0seTA6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSxuYW1lOnt2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0sdGV4dDphKHt9LG4udGV4dCx7fSksd2hpc2tlcndpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6LjUsZWRpdFR5cGU6ImNhbGNJZkF1dG9yYW5nZSJ9LG5vdGNoZWQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGVkaXRUeXBlOiJjYWxjSWZBdXRvcmFuZ2UifSxub3RjaHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDouNSxkZmx0Oi4yNSxlZGl0VHlwZToiY2FsY0lmQXV0b3JhbmdlIn0sYm94cG9pbnRzOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhbGwiLCJvdXRsaWVycyIsInN1c3BlY3RlZG91dGxpZXJzIiwhMV0sZGZsdDoib3V0bGllcnMiLGVkaXRUeXBlOiJjYWxjSWZBdXRvcmFuZ2UifSxib3htZWFuOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyEwLCJzZCIsITFdLGRmbHQ6ITEsZWRpdFR5cGU6ImNhbGNJZkF1dG9yYW5nZSJ9LGppdHRlcjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxlZGl0VHlwZToiY2FsY0lmQXV0b3JhbmdlIn0scG9pbnRwb3M6e3ZhbFR5cGU6Im51bWJlciIsbWluOi0yLG1heDoyLGVkaXRUeXBlOiJjYWxjSWZBdXRvcmFuZ2UifSxvcmllbnRhdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidiIsImgiXSxlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LG1hcmtlcjp7b3V0bGllcmNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDoicmdiYSgwLCAwLCAwLCAwKSIsZWRpdFR5cGU6InN0eWxlIn0sc3ltYm9sOmEoe30sby5zeW1ib2wse2FycmF5T2s6ITEsZWRpdFR5cGU6InBsb3QifSksb3BhY2l0eTphKHt9LG8ub3BhY2l0eSx7YXJyYXlPazohMSxkZmx0OjEsZWRpdFR5cGU6InN0eWxlIn0pLHNpemU6YSh7fSxvLnNpemUse2FycmF5T2s6ITEsZWRpdFR5cGU6ImNhbGNJZkF1dG9yYW5nZSJ9KSxjb2xvcjphKHt9LG8uY29sb3Ise2FycmF5T2s6ITEsZWRpdFR5cGU6InN0eWxlIn0pLGxpbmU6e2NvbG9yOmEoe30scy5jb2xvcix7YXJyYXlPazohMSxkZmx0OmkuZGVmYXVsdExpbmUsZWRpdFR5cGU6InN0eWxlIn0pLHdpZHRoOmEoe30scy53aWR0aCx7YXJyYXlPazohMSxkZmx0OjAsZWRpdFR5cGU6InN0eWxlIn0pLG91dGxpZXJjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJzdHlsZSJ9LG91dGxpZXJ3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEsZWRpdFR5cGU6InN0eWxlIn0sZWRpdFR5cGU6InN0eWxlIn0sZWRpdFR5cGU6InBsb3QifSxsaW5lOntjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJzdHlsZSJ9LHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MixlZGl0VHlwZToic3R5bGUifSxlZGl0VHlwZToicGxvdCJ9LGZpbGxjb2xvcjpuLmZpbGxjb2xvcixzZWxlY3RlZDp7bWFya2VyOm4uc2VsZWN0ZWQubWFya2VyLGVkaXRUeXBlOiJzdHlsZSJ9LHVuc2VsZWN0ZWQ6e21hcmtlcjpuLnVuc2VsZWN0ZWQubWFya2VyLGVkaXRUeXBlOiJzdHlsZSJ9LGhvdmVyb246e3ZhbFR5cGU6ImZsYWdsaXN0IixmbGFnczpbImJveGVzIiwicG9pbnRzIl0sZGZsdDoiYm94ZXMrcG9pbnRzIixlZGl0VHlwZToic3R5bGUifX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIjo1NTcsIi4uLy4uL2xpYi9leHRlbmQiOjY3MywiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIjoxMDE1fV0sODQxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9saWIiKSxhPWkuXyxvPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIik7ZnVuY3Rpb24gcyh0LGUscil7dmFyIG49e3RleHQ6InR4In07Zm9yKHZhciBpIGluIG4pQXJyYXkuaXNBcnJheShlW2ldKSYmKHRbbltpXV09ZVtpXVtyXSl9ZnVuY3Rpb24gbCh0LGUpe3JldHVybiB0LnYtZS52fWZ1bmN0aW9uIGModCl7cmV0dXJuIHQudn1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcix1LGgsZixwLGQ9dC5fZnVsbExheW91dCxnPW8uZ2V0RnJvbUlkKHQsZS54YXhpc3x8IngiKSxtPW8uZ2V0RnJvbUlkKHQsZS55YXhpc3x8InkiKSx2PVtdLHk9InZpb2xpbiI9PT1lLnR5cGU/Il9udW1WaW9saW5zIjoiX251bUJveGVzIjsiaCI9PT1lLm9yaWVudGF0aW9uPyh1PWcsaD0ieCIsZj1tLHA9InkiKToodT1tLGg9InkiLGY9ZyxwPSJ4Iik7dmFyIHg9dS5tYWtlQ2FsY2RhdGEoZSxoKSxiPWZ1bmN0aW9uKHQsZSxyLGEsbyl7aWYoZSBpbiB0KXJldHVybiByLm1ha2VDYWxjZGF0YSh0LGUpO3ZhciBzO3M9ZSsiMCJpbiB0P3RbZSsiMCJdOiJuYW1lImluIHQmJigiY2F0ZWdvcnkiPT09ci50eXBlfHxuKHQubmFtZSkmJi0xIT09WyJsaW5lYXIiLCJsb2ciXS5pbmRleE9mKHIudHlwZSl8fGkuaXNEYXRlVGltZSh0Lm5hbWUpJiYiZGF0ZSI9PT1yLnR5cGUpP3QubmFtZTpvO3ZhciBsPXIuZDJjKHMsMCx0W2UrImNhbGVuZGFyIl0pO3JldHVybiBhLm1hcChmdW5jdGlvbigpe3JldHVybiBsfSl9KGUscCxmLHgsZFt5XSksXz1pLmRpc3RpbmN0VmFscyhiKSx3PV8udmFscyxrPV8ubWluRGlmZi8yLE09ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkocisxKSxpPTA7aTxyO2krKyluW2ldPXRbaV0tZTtyZXR1cm4gbltyXT10W3ItMV0rZSxufSh3LGspLEE9dy5sZW5ndGgsVD1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQpLHI9MDtyPHQ7cisrKWVbcl09W107cmV0dXJuIGV9KEEpO2ZvcihyPTA7cjxlLl9sZW5ndGg7cisrKXt2YXIgUz14W3JdO2lmKG4oUykpe3ZhciBFPWkuZmluZEJpbihiW3JdLE0pO2lmKEU+PTAmJkU8QSl7dmFyIEM9e3Y6UyxpOnJ9O3MoQyxlLHIpLFRbRV0ucHVzaChDKX19fWZvcihyPTA7cjxBO3IrKylpZihUW3JdLmxlbmd0aD4wKXt2YXIgTD1UW3JdLnNvcnQobCksej1MLm1hcChjKSxQPXoubGVuZ3RoLEk9e3Bvczp3W3JdLHB0czpMfTtJLm1pbj16WzBdLEkubWF4PXpbUC0xXSxJLm1lYW49aS5tZWFuKHosUCksSS5zZD1pLnN0ZGV2KHosUCxJLm1lYW4pLEkucTE9aS5pbnRlcnAoeiwuMjUpLEkubWVkPWkuaW50ZXJwKHosLjUpLEkucTM9aS5pbnRlcnAoeiwuNzUpLEkubGY9TWF0aC5taW4oSS5xMSx6W01hdGgubWluKGkuZmluZEJpbigyLjUqSS5xMS0xLjUqSS5xMyx6LCEwKSsxLFAtMSldKSxJLnVmPU1hdGgubWF4KEkucTMseltNYXRoLm1heChpLmZpbmRCaW4oMi41KkkucTMtMS41KkkucTEseiksMCldKSxJLmxvPTQqSS5xMS0zKkkucTMsSS51bz00KkkucTMtMypJLnExO3ZhciBPPTEuNTcqKEkucTMtSS5xMSkvTWF0aC5zcXJ0KFApO0kubG49SS5tZWQtTyxJLnVuPUkubWVkK08sdi5wdXNoKEkpfXJldHVybiBmdW5jdGlvbih0LGUpe2lmKGkuaXNBcnJheU9yVHlwZWRBcnJheShlLnNlbGVjdGVkcG9pbnRzKSlmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7Zm9yKHZhciBuPXRbcl0ucHRzfHxbXSxhPXt9LG89MDtvPG4ubGVuZ3RoO28rKylhW25bb10uaV09bztpLnRhZ1NlbGVjdGVkKG4sZSxhKX19KHYsZSksby5leHBhbmQodSx4LHtwYWRkZWQ6ITB9KSx2Lmxlbmd0aD4wPyh2WzBdLnQ9e251bTpkW3ldLGRQb3M6ayxwb3NMZXR0ZXI6cCx2YWxMZXR0ZXI6aCxsYWJlbHM6e21lZDphKHQsIm1lZGlhbjoiKSxtaW46YSh0LCJtaW46IikscTE6YSh0LCJxMToiKSxxMzphKHQsInEzOiIpLG1heDphKHQsIm1heDoiKSxtZWFuOiJzZCI9PT1lLmJveG1lYW4/YSh0LCJtZWFuIFx4YjEgXHUwM2MzOiIpOmEodCwibWVhbjoiKSxsZjphKHQsImxvd2VyIGZlbmNlOiIpLHVmOmEodCwidXBwZXIgZmVuY2U6Iil9fSxkW3ldKyssdik6W3t0OntlbXB0eTohMH19XX19LHsiLi4vLi4vbGliIjo2ODQsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3MzIsImZhc3QtaXNudW1lcmljIjoyMTR9XSw4NDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9yZWdpc3RyeSIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLG89dCgiLi9hdHRyaWJ1dGVzIik7ZnVuY3Rpb24gcyh0LGUscixuKXt2YXIgYSxvLHM9cigieSIpLGw9cigieCIpLGM9bCYmbC5sZW5ndGg7aWYocyYmcy5sZW5ndGgpYT0idiIsYz9vPU1hdGgubWluKGwubGVuZ3RoLHMubGVuZ3RoKToocigieDAiKSxvPXMubGVuZ3RoKTtlbHNle2lmKCFjKXJldHVybiB2b2lkKGUudmlzaWJsZT0hMSk7YT0iaCIscigieTAiKSxvPWwubGVuZ3RofWUuX2xlbmd0aD1vLGkuZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJoYW5kbGVUcmFjZURlZmF1bHRzIikodCxlLFsieCIsInkiXSxuKSxyKCJvcmllbnRhdGlvbiIsYSl9ZnVuY3Rpb24gbCh0LGUscixpKXt2YXIgYT1pLnByZWZpeCxzPW4uY29lcmNlMih0LGUsbywibWFya2VyLm91dGxpZXJjb2xvciIpLGw9cigibWFya2VyLmxpbmUub3V0bGllcmNvbG9yIiksYz1yKGErInBvaW50cyIsc3x8bD8ic3VzcGVjdGVkb3V0bGllcnMiOnZvaWQgMCk7Yz8ocigiaml0dGVyIiwiYWxsIj09PWM/LjM6MCkscigicG9pbnRwb3MiLCJhbGwiPT09Yz8tMS41OjApLHIoIm1hcmtlci5zeW1ib2wiKSxyKCJtYXJrZXIub3BhY2l0eSIpLHIoIm1hcmtlci5zaXplIikscigibWFya2VyLmNvbG9yIixlLmxpbmUuY29sb3IpLHIoIm1hcmtlci5saW5lLmNvbG9yIikscigibWFya2VyLmxpbmUud2lkdGgiKSwic3VzcGVjdGVkb3V0bGllcnMiPT09YyYmKHIoIm1hcmtlci5saW5lLm91dGxpZXJjb2xvciIsZS5tYXJrZXIuY29sb3IpLHIoIm1hcmtlci5saW5lLm91dGxpZXJ3aWR0aCIpKSxyKCJzZWxlY3RlZC5tYXJrZXIuY29sb3IiKSxyKCJ1bnNlbGVjdGVkLm1hcmtlci5jb2xvciIpLHIoInNlbGVjdGVkLm1hcmtlci5zaXplIikscigidW5zZWxlY3RlZC5tYXJrZXIuc2l6ZSIpLHIoInRleHQiKSk6ZGVsZXRlIGUubWFya2VyLHIoImhvdmVyb24iKSxuLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHkoZSxyKX1lLmV4cG9ydHM9e3N1cHBseURlZmF1bHRzOmZ1bmN0aW9uKHQsZSxyLGkpe2Z1bmN0aW9uIGMocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLG8scixpKX1zKHQsZSxjLGkpLCExIT09ZS52aXNpYmxlJiYoYygibGluZS5jb2xvciIsKHQubWFya2VyfHx7fSkuY29sb3J8fHIpLGMoImxpbmUud2lkdGgiKSxjKCJmaWxsY29sb3IiLGEuYWRkT3BhY2l0eShlLmxpbmUuY29sb3IsLjUpKSxjKCJ3aGlza2Vyd2lkdGgiKSxjKCJib3htZWFuIiksYygibm90Y2hlZCIsdm9pZCAwIT09dC5ub3RjaHdpZHRoKSYmYygibm90Y2h3aWR0aCIpLGwodCxlLGMse3ByZWZpeDoiYm94In0pKX0saGFuZGxlU2FtcGxlRGVmYXVsdHM6cyxoYW5kbGVQb2ludHNEZWZhdWx0czpsfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo1NTgsIi4uLy4uL2xpYiI6Njg0LCIuLi8uLi9yZWdpc3RyeSI6ODE3LCIuL2F0dHJpYnV0ZXMiOjg0MH1dLDg0MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2Z4Iiksbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIikscz10KCIuLi9zY2F0dGVyL2ZpbGxfaG92ZXJfdGV4dCIpO2Z1bmN0aW9uIGwodCxlLHIscyl7dmFyIGwsYyx1LGgsZixwLGQsZyxtLHYseSx4LGI9dC5jZCxfPXQueGEsdz10LnlhLGs9YlswXS50cmFjZSxNPWJbMF0udCxBPSJ2aW9saW4iPT09ay50eXBlLFQ9W10sUz1NLmJkUG9zLEU9TS53SG92ZXIsQz1mdW5jdGlvbih0KXtyZXR1cm4gdC5wb3MrTS5iUG9zLXB9O0EmJiJib3RoIiE9PWsuc2lkZT8oInBvc2l0aXZlIj09PWsuc2lkZSYmKG09ZnVuY3Rpb24odCl7dmFyIGU9Qyh0KTtyZXR1cm4gYS5pbmJveChlLGUrRSx2KX0pLCJuZWdhdGl2ZSI9PT1rLnNpZGUmJihtPWZ1bmN0aW9uKHQpe3ZhciBlPUModCk7cmV0dXJuIGEuaW5ib3goZS1FLGUsdil9KSk6bT1mdW5jdGlvbih0KXt2YXIgZT1DKHQpO3JldHVybiBhLmluYm94KGUtRSxlK0Usdil9LHg9QT9mdW5jdGlvbih0KXtyZXR1cm4gYS5pbmJveCh0LnNwYW5bMF0tZix0LnNwYW5bMV0tZix2KX06ZnVuY3Rpb24odCl7cmV0dXJuIGEuaW5ib3godC5taW4tZix0Lm1heC1mLHYpfSwiaCI9PT1rLm9yaWVudGF0aW9uPyhmPWUscD1yLGQ9eCxnPW0sbD0ieSIsdT13LGM9IngiLGg9Xyk6KGY9cixwPWUsZD1tLGc9eCxsPSJ4Iix1PV8sYz0ieSIsaD13KTt2YXIgTD1NYXRoLm1pbigxLFMvTWF0aC5hYnModS5yMmModS5yYW5nZVsxXSktdS5yMmModS5yYW5nZVswXSkpKTtmdW5jdGlvbiB6KHQpe3JldHVybihkKHQpK2codCkpLzJ9dj10Lm1heEhvdmVyRGlzdGFuY2UtTCx5PXQubWF4U3Bpa2VEaXN0YW5jZS1MO3ZhciBQPWEuZ2V0RGlzdGFuY2VGdW5jdGlvbihzLGQsZyx6KTtpZihhLmdldENsb3Nlc3QoYixQLHQpLCExPT09dC5pbmRleClyZXR1cm5bXTt2YXIgST1iW3QuaW5kZXhdLE89ay5saW5lLmNvbG9yLEQ9KGsubWFya2VyfHx7fSkuY29sb3I7by5vcGFjaXR5KE8pJiZrLmxpbmUud2lkdGg/dC5jb2xvcj1POm8ub3BhY2l0eShEKSYmay5ib3hwb2ludHM/dC5jb2xvcj1EOnQuY29sb3I9ay5maWxsY29sb3IsdFtsKyIwIl09dS5jMnAoSS5wb3MrTS5iUG9zLVMsITApLHRbbCsiMSJdPXUuYzJwKEkucG9zK00uYlBvcytTLCEwKSx0W2wrIkxhYmVsVmFsIl09SS5wb3M7dmFyIFI9bCsiU3Bpa2UiO3Quc3Bpa2VEaXN0YW5jZT16KEkpKnkvdix0W1JdPXUuYzJwKEkucG9zLCEwKTt2YXIgQj17fSxGPVsibWVkIiwibWluIiwicTEiLCJxMyIsIm1heCJdOyhrLmJveG1lYW58fChrLm1lYW5saW5lfHx7fSkudmlzaWJsZSkmJkYucHVzaCgibWVhbiIpLChrLmJveHBvaW50c3x8ay5wb2ludHMpJiZGLnB1c2goImxmIiwidWYiKTtmb3IodmFyIE49MDtOPEYubGVuZ3RoO04rKyl7dmFyIGo9RltOXTtpZihqIGluIEkmJiEoSVtqXWluIEIpKXtCW0lbal1dPSEwO3ZhciBWPUlbal0sVT1oLmMycChWLCEwKSxxPWkuZXh0ZW5kRmxhdCh7fSx0KTtxW2MrIjAiXT1xW2MrIjEiXT1VLHFbYysiTGFiZWxWYWwiXT1WLHFbYysiTGFiZWwiXT0oTS5sYWJlbHM/TS5sYWJlbHNbal0rIiAiOiIiKStuLmhvdmVyTGFiZWxUZXh0KGgsViksIm1lYW4iPT09aiYmInNkImluIEkmJiJzZCI9PT1rLmJveG1lYW4mJihxW2MrImVyciJdPUkuc2QpLHQubmFtZT0iIix0LnNwaWtlRGlzdGFuY2U9dm9pZCAwLHRbUl09dm9pZCAwLFQucHVzaChxKX19cmV0dXJuIFR9ZnVuY3Rpb24gYyh0LGUscil7Zm9yKHZhciBuLG8sbCxjPXQuY2QsdT10LnhhLGg9dC55YSxmPWNbMF0udHJhY2UscD11LmMycChlKSxkPWguYzJwKHIpLGc9YS5xdWFkcmF0dXJlKGZ1bmN0aW9uKHQpe3ZhciBlPU1hdGgubWF4KDMsdC5tcmN8fDApO3JldHVybiBNYXRoLm1heChNYXRoLmFicyh1LmMycCh0LngpLXApLWUsMS0zL2UpfSxmdW5jdGlvbih0KXt2YXIgZT1NYXRoLm1heCgzLHQubXJjfHwwKTtyZXR1cm4gTWF0aC5tYXgoTWF0aC5hYnMoaC5jMnAodC55KS1kKS1lLDEtMy9lKX0pLG09ITEsdj0wO3Y8Yy5sZW5ndGg7disrKXtvPWNbdl07Zm9yKHZhciB5PTA7eTwoby5wdHN8fFtdKS5sZW5ndGg7eSsrKXt2YXIgeD1nKGw9by5wdHNbeV0pO3g8PXQuZGlzdGFuY2UmJih0LmRpc3RhbmNlPXgsbT1bdix5XSl9fWlmKCFtKXJldHVybiExO2w9KG89Y1ttWzBdXSkucHRzW21bMV1dO3ZhciBiPXUuYzJwKGwueCwhMCksXz1oLmMycChsLnksITApLHc9bC5tcmN8fDE7bj1pLmV4dGVuZEZsYXQoe30sdCx7aW5kZXg6bC5pLGNvbG9yOihmLm1hcmtlcnx8e30pLmNvbG9yLG5hbWU6Zi5uYW1lLHgwOmItdyx4MTpiK3cseExhYmVsVmFsOmwueCx5MDpfLXcseTE6Xyt3LHlMYWJlbFZhbDpsLnksc3Bpa2VEaXN0YW5jZTp0LmRpc3RhbmNlfSk7dmFyIGs9ImgiPT09Zi5vcmllbnRhdGlvbj8ieSI6IngiLE09ImgiPT09Zi5vcmllbnRhdGlvbj9oOnU7cmV0dXJuIG5baysiU3Bpa2UiXT1NLmMycChvLnBvcywhMCkscyhsLGYsbiksbn1lLmV4cG9ydHM9e2hvdmVyUG9pbnRzOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGE9dC5jZFswXS50cmFjZS5ob3Zlcm9uLG89W107cmV0dXJuLTEhPT1hLmluZGV4T2YoImJveGVzIikmJihvPW8uY29uY2F0KGwodCxlLHIsbikpKSwtMSE9PWEuaW5kZXhPZigicG9pbnRzIikmJihpPWModCxlLHIpKSwiY2xvc2VzdCI9PT1uP2k/W2ldOm86aT8oby5wdXNoKGkpLG8pOm99LGhvdmVyT25Cb3hlczpsLGhvdmVyT25Qb2ludHM6Y319LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NTU4LCIuLi8uLi9jb21wb25lbnRzL2Z4Ijo2MDAsIi4uLy4uL2xpYiI6Njg0LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzMyLCIuLi9zY2F0dGVyL2ZpbGxfaG92ZXJfdGV4dCI6MTAyMn1dLDg0NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17fTtuLmF0dHJpYnV0ZXM9dCgiLi9hdHRyaWJ1dGVzIiksbi5sYXlvdXRBdHRyaWJ1dGVzPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxuLnN1cHBseURlZmF1bHRzPXQoIi4vZGVmYXVsdHMiKS5zdXBwbHlEZWZhdWx0cyxuLnN1cHBseUxheW91dERlZmF1bHRzPXQoIi4vbGF5b3V0X2RlZmF1bHRzIikuc3VwcGx5TGF5b3V0RGVmYXVsdHMsbi5jYWxjPXQoIi4vY2FsYyIpLG4uc2V0UG9zaXRpb25zPXQoIi4vc2V0X3Bvc2l0aW9ucyIpLnNldFBvc2l0aW9ucyxuLnBsb3Q9dCgiLi9wbG90IikucGxvdCxuLnN0eWxlPXQoIi4vc3R5bGUiKS5zdHlsZSxuLnN0eWxlT25TZWxlY3Q9dCgiLi9zdHlsZSIpLnN0eWxlT25TZWxlY3Qsbi5ob3ZlclBvaW50cz10KCIuL2hvdmVyIikuaG92ZXJQb2ludHMsbi5zZWxlY3RQb2ludHM9dCgiLi9zZWxlY3QiKSxuLm1vZHVsZVR5cGU9InRyYWNlIixuLm5hbWU9ImJveCIsbi5iYXNlUGxvdE1vZHVsZT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxuLmNhdGVnb3JpZXM9WyJjYXJ0ZXNpYW4iLCJzdmciLCJzeW1ib2xzIiwib3JpZW50ZWQiLCJib3gtdmlvbGluIiwic2hvd0xlZ2VuZCIsImJveExheW91dCIsInpvb21TY2FsZSJdLG4ubWV0YT17fSxlLmV4cG9ydHM9bn0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjc0MywiLi9hdHRyaWJ1dGVzIjo4NDAsIi4vY2FsYyI6ODQxLCIuL2RlZmF1bHRzIjo4NDIsIi4vaG92ZXIiOjg0MywiLi9sYXlvdXRfYXR0cmlidXRlcyI6ODQ1LCIuL2xheW91dF9kZWZhdWx0cyI6ODQ2LCIuL3Bsb3QiOjg0NywiLi9zZWxlY3QiOjg0OCwiLi9zZXRfcG9zaXRpb25zIjo4NDksIi4vc3R5bGUiOjg1MH1dLDg0NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2JveG1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImdyb3VwIiwib3ZlcmxheSJdLGRmbHQ6Im92ZXJsYXkiLGVkaXRUeXBlOiJjYWxjIn0sYm94Z2FwOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6LjMsZWRpdFR5cGU6ImNhbGMifSxib3hncm91cGdhcDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0Oi4zLGVkaXRUeXBlOiJjYWxjIn19fSx7fV0sODQ2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3JlZ2lzdHJ5IiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKTtmdW5jdGlvbiBvKHQsZSxyLGksYSl7Zm9yKHZhciBvLHM9YSsiTGF5b3V0IixsPTA7bDxyLmxlbmd0aDtsKyspaWYobi50cmFjZUlzKHJbbF0scykpe289ITA7YnJlYWt9byYmKGkoYSsibW9kZSIpLGkoYSsiZ2FwIiksaShhKyJncm91cGdhcCIpKX1lLmV4cG9ydHM9e3N1cHBseUxheW91dERlZmF1bHRzOmZ1bmN0aW9uKHQsZSxyKXtvKDAsMCxyLGZ1bmN0aW9uKHIsbil7cmV0dXJuIGkuY29lcmNlKHQsZSxhLHIsbil9LCJib3giKX0sX3N1cHBseTpvfX0seyIuLi8uLi9saWIiOjY4NCwiLi4vLi4vcmVnaXN0cnkiOjgxNywiLi9sYXlvdXRfYXR0cmlidXRlcyI6ODQ1fV0sODQ3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLG89NSxzPS4wMTtmdW5jdGlvbiBsKHQsZSxyLGEpe3ZhciBvLHMsbD1lLnBvcyxjPWUudmFsLHU9YS5iUG9zLGg9YS53ZFBvc3x8MCxmPWEuYlBvc1B4T2Zmc2V0fHwwLHA9ci53aGlza2Vyd2lkdGh8fDAsZD1yLm5vdGNoZWR8fCExLGc9ZD8xLTIqci5ub3RjaHdpZHRoOjE7QXJyYXkuaXNBcnJheShhLmJkUG9zKT8obz1hLmJkUG9zWzBdLHM9YS5iZFBvc1sxXSk6KG89YS5iZFBvcyxzPWEuYmRQb3MpO3ZhciBtPXQuc2VsZWN0QWxsKCJwYXRoLmJveCIpLmRhdGEoInZpb2xpbiIhPT1yLnR5cGV8fHIuYm94P2kuaWRlbnRpdHk6W10pO20uZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5zdHlsZSgidmVjdG9yLWVmZmVjdCIsIm5vbi1zY2FsaW5nLXN0cm9rZSIpLmF0dHIoImNsYXNzIiwiYm94IiksbS5leGl0KCkucmVtb3ZlKCksbS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXQucG9zLGE9bC5jMnAoZSt1LCEwKStmLG09bC5jMnAoZSt1LW8sITApK2Ysdj1sLmMycChlK3UrcywhMCkrZix5PWwuYzJwKGUrdS1oLCEwKStmLHg9bC5jMnAoZSt1K2gsITApK2YsYj1sLmMycChlK3UtbypnLCEwKStmLF89bC5jMnAoZSt1K3MqZywhMCkrZix3PWMuYzJwKHQucTEsITApLGs9Yy5jMnAodC5xMywhMCksTT1pLmNvbnN0cmFpbihjLmMycCh0Lm1lZCwhMCksTWF0aC5taW4odyxrKSsxLE1hdGgubWF4KHcsayktMSksQT12b2lkIDA9PT10LmxmfHwhMT09PXIuYm94cG9pbnRzLFQ9Yy5jMnAoQT90Lm1pbjp0LmxmLCEwKSxTPWMuYzJwKEE/dC5tYXg6dC51ZiwhMCksRT1jLmMycCh0LmxuLCEwKSxDPWMuYzJwKHQudW4sITApOyJoIj09PXIub3JpZW50YXRpb24/bi5zZWxlY3QodGhpcykuYXR0cigiZCIsIk0iK00rIiwiK2IrIlYiK18rIk0iK3crIiwiK20rIlYiK3YrKGQ/IkgiK0UrIkwiK00rIiwiK18rIkwiK0MrIiwiK3Y6IiIpKyJIIitrKyJWIittKyhkPyJIIitDKyJMIitNKyIsIitiKyJMIitFKyIsIittOiIiKSsiWk0iK3crIiwiK2ErIkgiK1QrIk0iK2srIiwiK2ErIkgiK1MrKDA9PT1wPyIiOiJNIitUKyIsIit5KyJWIit4KyJNIitTKyIsIit5KyJWIit4KSk6bi5zZWxlY3QodGhpcykuYXR0cigiZCIsIk0iK2IrIiwiK00rIkgiK18rIk0iK20rIiwiK3crIkgiK3YrKGQ/IlYiK0UrIkwiK18rIiwiK00rIkwiK3YrIiwiK0M6IiIpKyJWIitrKyJIIittKyhkPyJWIitDKyJMIitiKyIsIitNKyJMIittKyIsIitFOiIiKSsiWk0iK2ErIiwiK3crIlYiK1QrIk0iK2ErIiwiK2srIlYiK1MrKDA9PT1wPyIiOiJNIit5KyIsIitUKyJIIit4KyJNIit5KyIsIitTKyJIIit4KSl9KX1mdW5jdGlvbiBjKHQsZSxyLG4pe3ZhciBsPWUueCxjPWUueSx1PW4uYmRQb3MsaD1uLmJQb3MsZj1yLmJveHBvaW50c3x8ci5wb2ludHM7aS5zZWVkUHNldWRvUmFuZG9tKCk7dmFyIHA9dC5zZWxlY3RBbGwoImcucG9pbnRzIikuZGF0YShmP2Z1bmN0aW9uKHQpe3JldHVybiB0LmZvckVhY2goZnVuY3Rpb24odCl7dC50PW4sdC50cmFjZT1yfSksdH06W10pO3AuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInBvaW50cyIpLHAuZXhpdCgpLnJlbW92ZSgpO3ZhciBkPXAuc2VsZWN0QWxsKCJwYXRoIikuZGF0YShmdW5jdGlvbih0KXt2YXIgZSxuLGE9ImFsbCI9PT1mP3QucHRzOnQucHRzLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZS52PHQubGZ8fGUudj50LnVmfSksbD1NYXRoLm1heCgodC5tYXgtdC5taW4pLzEwLHQucTMtdC5xMSksYz0xZS05KmwscD1sKnMsZD1bXSxnPTA7aWYoci5qaXR0ZXIpe2lmKDA9PT1sKWZvcihnPTEsZD1uZXcgQXJyYXkoYS5sZW5ndGgpLGU9MDtlPGEubGVuZ3RoO2UrKylkW2VdPTE7ZWxzZSBmb3IoZT0wO2U8YS5sZW5ndGg7ZSsrKXt2YXIgbT1NYXRoLm1heCgwLGUtbyksdj1hW21dLnYseT1NYXRoLm1pbihhLmxlbmd0aC0xLGUrbykseD1hW3ldLnY7ImFsbCIhPT1mJiYoYVtlXS52PHQubGY/eD1NYXRoLm1pbih4LHQubGYpOnY9TWF0aC5tYXgodix0LnVmKSk7dmFyIGI9TWF0aC5zcXJ0KHAqKHktbSkvKHgtditjKSl8fDA7Yj1pLmNvbnN0cmFpbihNYXRoLmFicyhiKSwwLDEpLGQucHVzaChiKSxnPU1hdGgubWF4KGIsZyl9bj0yKnIuaml0dGVyLyhnfHwxKX1mb3IoZT0wO2U8YS5sZW5ndGg7ZSsrKXt2YXIgXz1hW2VdLHc9Xy52LGs9ci5qaXR0ZXI/bipkW2VdKihpLnBzZXVkb1JhbmRvbSgpLS41KTowLE09dC5wb3MraCt1KihyLnBvaW50cG9zK2spOyJoIj09PXIub3JpZW50YXRpb24/KF8ueT1NLF8ueD13KTooXy54PU0sXy55PXcpLCJzdXNwZWN0ZWRvdXRsaWVycyI9PT1mJiZ3PHQudW8mJnc+dC5sbyYmKF8uc289ITApfXJldHVybiBhfSk7ZC5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoInBvaW50IiwhMCksZC5leGl0KCkucmVtb3ZlKCksZC5jYWxsKGEudHJhbnNsYXRlUG9pbnRzLGwsYyl9ZnVuY3Rpb24gdSh0LGUscixhKXt2YXIgbyxzLGw9ZS5wb3MsYz1lLnZhbCx1PWEuYlBvcyxoPWEuYlBvc1B4T2Zmc2V0fHwwLGY9ci5ib3htZWFufHwoci5tZWFubGluZXx8e30pLnZpc2libGU7QXJyYXkuaXNBcnJheShhLmJkUG9zKT8obz1hLmJkUG9zWzBdLHM9YS5iZFBvc1sxXSk6KG89YS5iZFBvcyxzPWEuYmRQb3MpO3ZhciBwPXQuc2VsZWN0QWxsKCJwYXRoLm1lYW4iKS5kYXRhKCJib3giPT09ci50eXBlJiZyLmJveG1lYW58fCJ2aW9saW4iPT09ci50eXBlJiZyLmJveCYmci5tZWFubGluZT9pLmlkZW50aXR5OltdKTtwLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJtZWFuIikuc3R5bGUoe2ZpbGw6Im5vbmUiLCJ2ZWN0b3ItZWZmZWN0Ijoibm9uLXNjYWxpbmctc3Ryb2tlIn0pLHAuZXhpdCgpLnJlbW92ZSgpLHAuZWFjaChmdW5jdGlvbih0KXt2YXIgZT1sLmMycCh0LnBvcyt1LCEwKStoLGk9bC5jMnAodC5wb3MrdS1vLCEwKStoLGE9bC5jMnAodC5wb3MrdStzLCEwKStoLHA9Yy5jMnAodC5tZWFuLCEwKSxkPWMuYzJwKHQubWVhbi10LnNkLCEwKSxnPWMuYzJwKHQubWVhbit0LnNkLCEwKTsiaCI9PT1yLm9yaWVudGF0aW9uP24uc2VsZWN0KHRoaXMpLmF0dHIoImQiLCJNIitwKyIsIitpKyJWIithKygic2QiPT09Zj8ibTAsMEwiK2QrIiwiK2UrIkwiK3ArIiwiK2krIkwiK2crIiwiK2UrIloiOiIiKSk6bi5zZWxlY3QodGhpcykuYXR0cigiZCIsIk0iK2krIiwiK3ArIkgiK2ErKCJzZCI9PT1mPyJtMCwwTCIrZSsiLCIrZCsiTCIraSsiLCIrcCsiTCIrZSsiLCIrZysiWiI6IiIpKX0pfWUuZXhwb3J0cz17cGxvdDpmdW5jdGlvbih0LGUscixpKXt2YXIgYT10Ll9mdWxsTGF5b3V0LG89ZS54YXhpcyxzPWUueWF4aXMsaD1pLnNlbGVjdEFsbCgiZy50cmFjZS5ib3hlcyIpLmRhdGEocixmdW5jdGlvbih0KXtyZXR1cm4gdFswXS50cmFjZS51aWR9KTtoLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJ0cmFjZSBib3hlcyIpLGguZXhpdCgpLnJlbW92ZSgpLGgub3JkZXIoKSxoLmVhY2goZnVuY3Rpb24odCl7dmFyIHI9dFswXSxpPXIudCxoPXIudHJhY2UsZj1uLnNlbGVjdCh0aGlzKTtlLmlzUmFuZ2VQbG90fHwoci5ub2RlMz1mKTt2YXIgcCxkLGc9YS5fbnVtQm94ZXMsbT0xLWEuYm94Z2FwLHY9Imdyb3VwIj09PWEuYm94bW9kZSYmZz4xLHk9aS5kUG9zKm0qKDEtYS5ib3hncm91cGdhcCkvKHY/ZzoxKSx4PXY/MippLmRQb3MqKChpLm51bSsuNSkvZy0uNSkqbTowLGI9eSpoLndoaXNrZXJ3aWR0aDshMCE9PWgudmlzaWJsZXx8aS5lbXB0eT9mLnJlbW92ZSgpOigiaCI9PT1oLm9yaWVudGF0aW9uPyhwPXMsZD1vKToocD1vLGQ9cyksaS5iUG9zPXgsaS5iZFBvcz15LGkud2RQb3M9YixpLndIb3Zlcj1pLmRQb3MqKHY/bS9nOjEpLGwoZix7cG9zOnAsdmFsOmR9LGgsaSksYyhmLHt4Om8seTpzfSxoLGkpLHUoZix7cG9zOnAsdmFsOmR9LGgsaSkpfSl9LHBsb3RCb3hBbmRXaGlza2VyczpsLHBsb3RQb2ludHM6YyxwbG90Qm94TWVhbjp1fX0seyIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjU4MywiLi4vLi4vbGliIjo2ODQsZDM6MTQ3fV0sODQ4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLG4saT10LmNkLGE9dC54YXhpcyxvPXQueWF4aXMscz1bXTtpZighMT09PWUpZm9yKHI9MDtyPGkubGVuZ3RoO3IrKylmb3Iobj0wO248KGlbcl0ucHRzfHxbXSkubGVuZ3RoO24rKylpW3JdLnB0c1tuXS5zZWxlY3RlZD0wO2Vsc2UgZm9yKHI9MDtyPGkubGVuZ3RoO3IrKylmb3Iobj0wO248KGlbcl0ucHRzfHxbXSkubGVuZ3RoO24rKyl7dmFyIGw9aVtyXS5wdHNbbl0sYz1hLmMycChsLngpLHU9by5jMnAobC55KTtlLmNvbnRhaW5zKFtjLHVdKT8ocy5wdXNoKHtwb2ludE51bWJlcjpsLmkseDphLmMyZChsLngpLHk6by5jMmQobC55KX0pLGwuc2VsZWN0ZWQ9MSk6bC5zZWxlY3RlZD0wfXJldHVybiBzfX0se31dLDg0OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGk9dCgiLi4vLi4vbGliIiksYT1bInYiLCJoIl07ZnVuY3Rpb24gbyh0LGUscixhLG8pe3ZhciBzLGwsYyx1PWUuY2FsY2RhdGEsaD1lLl9mdWxsTGF5b3V0LGY9W10scD0idmlvbGluIj09PXQ/Il9udW1WaW9saW5zIjoiX251bUJveGVzIjtmb3Iocz0wO3M8ci5sZW5ndGg7cysrKWZvcihjPXVbcltzXV0sbD0wO2w8Yy5sZW5ndGg7bCsrKWYucHVzaChjW2xdLnBvcyk7aWYoZi5sZW5ndGgpe3ZhciBkPWkuZGlzdGluY3RWYWxzKGYpLGc9ZC5taW5EaWZmLzI7Zm9yKGYubGVuZ3RoPT09ZC52YWxzLmxlbmd0aCYmKGhbcF09MSksbi5taW5EdGljayhhLGQubWluRGlmZixkLnZhbHNbMF0sITApLHM9MDtzPHIubGVuZ3RoO3MrKykoYz11W3Jbc11dKVswXS50LmRQb3M9Zzt2YXIgbT0oMS1oW3QrImdhcCJdKSooMS1oW3QrImdyb3VwZ2FwIl0pKmcvaFtwXTtuLmV4cGFuZChhLGQudmFscyx7dnBhZG1pbnVzOmcrb1swXSptLHZwYWRwbHVzOmcrb1sxXSptfSl9fWUuZXhwb3J0cz17c2V0UG9zaXRpb25zOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuY2FsY2RhdGEsbj1lLnhheGlzLGk9ZS55YXhpcyxzPTA7czxhLmxlbmd0aDtzKyspe2Zvcih2YXIgbD1hW3NdLGM9ImgiPT09bD9pOm4sdT1bXSxoPTAsZj0wLHA9MDtwPHIubGVuZ3RoO3ArKyl7dmFyIGQ9cltwXSxnPWRbMF0udCxtPWRbMF0udHJhY2U7ITAhPT1tLnZpc2libGV8fCJib3giIT09bS50eXBlJiYiY2FuZGxlc3RpY2siIT09bS50eXBlfHxnLmVtcHR5fHwobS5vcmllbnRhdGlvbnx8InYiKSE9PWx8fG0ueGF4aXMhPT1uLl9pZHx8bS55YXhpcyE9PWkuX2lkfHwodS5wdXNoKHApLG0uYm94cG9pbnRzJiYoaD1NYXRoLm1heChoLG0uaml0dGVyLW0ucG9pbnRwb3MtMSksZj1NYXRoLm1heChmLG0uaml0dGVyK20ucG9pbnRwb3MtMSkpKX1vKCJib3giLHQsdSxjLFtoLGZdKX19LHNldFBvc2l0aW9uT2Zmc2V0Om99fSx7Ii4uLy4uL2xpYiI6Njg0LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzMyfV0sODUwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKTtlLmV4cG9ydHM9e3N0eWxlOmZ1bmN0aW9uKHQsZSl7dmFyIHI9ZT9lWzBdLm5vZGUzOm4uc2VsZWN0KHQpLnNlbGVjdEFsbCgiZy50cmFjZS5ib3hlcyIpO3Iuc3R5bGUoIm9wYWNpdHkiLGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdLnRyYWNlLm9wYWNpdHl9KSxyLmVhY2goZnVuY3Rpb24oZSl7dmFyIHI9bi5zZWxlY3QodGhpcyksbz1lWzBdLnRyYWNlLHM9by5saW5lLndpZHRoO2Z1bmN0aW9uIGwodCxlLHIsbil7dC5zdHlsZSgic3Ryb2tlLXdpZHRoIixlKyJweCIpLmNhbGwoaS5zdHJva2UscikuY2FsbChpLmZpbGwsbil9dmFyIGM9ci5zZWxlY3RBbGwoInBhdGguYm94Iik7aWYoImNhbmRsZXN0aWNrIj09PW8udHlwZSljLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9bi5zZWxlY3QodGhpcykscj1vW3QuZGlyXTtsKGUsci5saW5lLndpZHRoLHIubGluZS5jb2xvcixyLmZpbGxjb2xvciksZS5zdHlsZSgib3BhY2l0eSIsby5zZWxlY3RlZHBvaW50cyYmIXQuc2VsZWN0ZWQ/LjM6MSl9KTtlbHNle2woYyxzLG8ubGluZS5jb2xvcixvLmZpbGxjb2xvciksci5zZWxlY3RBbGwoInBhdGgubWVhbiIpLnN0eWxlKHsic3Ryb2tlLXdpZHRoIjpzLCJzdHJva2UtZGFzaGFycmF5IjoyKnMrInB4LCIrcysicHgifSkuY2FsbChpLnN0cm9rZSxvLmxpbmUuY29sb3IpO3ZhciB1PXIuc2VsZWN0QWxsKCJwYXRoLnBvaW50Iik7YS5wb2ludFN0eWxlKHUsbyx0KX19KX0sc3R5bGVPblNlbGVjdDpmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0ubm9kZTMsbj1lWzBdLnRyYWNlLGk9ci5zZWxlY3RBbGwoInBhdGgucG9pbnQiKTtuLnNlbGVjdGVkcG9pbnRzP2Euc2VsZWN0ZWRQb2ludFN0eWxlKGksbik6YS5wb2ludFN0eWxlKGksbix0KX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjU1OCwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo1ODMsZDM6MTQ3fV0sODUxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLmV4dGVuZEZsYXQsaT10KCIuLi9vaGxjL2F0dHJpYnV0ZXMiKSxhPXQoIi4uL2JveC9hdHRyaWJ1dGVzIik7ZnVuY3Rpb24gbyh0KXtyZXR1cm57bGluZTp7Y29sb3I6bih7fSxhLmxpbmUuY29sb3Ise2RmbHQ6dH0pLHdpZHRoOmEubGluZS53aWR0aCxlZGl0VHlwZToic3R5bGUifSxmaWxsY29sb3I6YS5maWxsY29sb3IsZWRpdFR5cGU6InN0eWxlIn19ZS5leHBvcnRzPXt4OmkueCxvcGVuOmkub3BlbixoaWdoOmkuaGlnaCxsb3c6aS5sb3csY2xvc2U6aS5jbG9zZSxsaW5lOnt3aWR0aDpuKHt9LGEubGluZS53aWR0aCx7fSksZWRpdFR5cGU6InN0eWxlIn0saW5jcmVhc2luZzpvKGkuaW5jcmVhc2luZy5saW5lLmNvbG9yLmRmbHQpLGRlY3JlYXNpbmc6byhpLmRlY3JlYXNpbmcubGluZS5jb2xvci5kZmx0KSx0ZXh0OmkudGV4dCx3aGlza2Vyd2lkdGg6bih7fSxhLndoaXNrZXJ3aWR0aCx7ZGZsdDowfSl9fSx7Ii4uLy4uL2xpYiI6Njg0LCIuLi9ib3gvYXR0cmlidXRlcyI6ODQwLCIuLi9vaGxjL2F0dHJpYnV0ZXMiOjk3MH1dLDg1MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksYT10KCIuLi9vaGxjL2NhbGMiKS5jYWxjQ29tbW9uO2Z1bmN0aW9uIG8odCxlLHIsbil7cmV0dXJue21pbjpyLHExOk1hdGgubWluKHQsbiksbWVkOm4scTM6TWF0aC5tYXgodCxuKSxtYXg6ZX19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fZnVsbExheW91dCxzPWkuZ2V0RnJvbUlkKHQsZS54YXhpcyksbD1pLmdldEZyb21JZCh0LGUueWF4aXMpLGM9cy5tYWtlQ2FsY2RhdGEoZSwieCIpLHU9YSh0LGUsYyxsLG8pO3JldHVybiB1Lmxlbmd0aD8obi5leHRlbmRGbGF0KHVbMF0udCx7bnVtOnIuX251bUJveGVzLGRQb3M6bi5kaXN0aW5jdFZhbHMoYykubWluRGlmZi8yLHBvc0xldHRlcjoieCIsdmFsTGV0dGVyOiJ5In0pLHIuX251bUJveGVzKyssdSk6W3t0OntlbXB0eTohMH19XX19LHsiLi4vLi4vbGliIjo2ODQsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3MzIsIi4uL29obGMvY2FsYyI6OTcxfV0sODUzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGE9dCgiLi4vb2hsYy9vaGxjX2RlZmF1bHRzIiksbz10KCIuL2F0dHJpYnV0ZXMiKTtmdW5jdGlvbiBzKHQsZSxyLG4pe3ZhciBhPXIobisiLmxpbmUuY29sb3IiKTtyKG4rIi5saW5lLndpZHRoIixlLmxpbmUud2lkdGgpLHIobisiLmZpbGxjb2xvciIsaS5hZGRPcGFjaXR5KGEsLjUpKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSl7ZnVuY3Rpb24gbChyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsbyxyLGkpfWEodCxlLGwsaSk/KGwoImxpbmUud2lkdGgiKSxzKHQsZSxsLCJpbmNyZWFzaW5nIikscyh0LGUsbCwiZGVjcmVhc2luZyIpLGwoInRleHQiKSxsKCJ3aGlza2Vyd2lkdGgiKSxpLl9yZXF1ZXN0UmFuZ2VzbGlkZXJbZS54YXhpc109ITApOmUudmlzaWJsZT0hMX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NTU4LCIuLi8uLi9saWIiOjY4NCwiLi4vb2hsYy9vaGxjX2RlZmF1bHRzIjo5NzUsIi4vYXR0cmlidXRlcyI6ODUxfV0sODU0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bW9kdWxlVHlwZToidHJhY2UiLG5hbWU6ImNhbmRsZXN0aWNrIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxjYXRlZ29yaWVzOlsiY2FydGVzaWFuIiwic3ZnIiwic2hvd0xlZ2VuZCIsImNhbmRsZXN0aWNrIiwiYm94TGF5b3V0Il0sbWV0YTp7fSxhdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLGxheW91dEF0dHJpYnV0ZXM6dCgiLi4vYm94L2xheW91dF9hdHRyaWJ1dGVzIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi4vYm94L2xheW91dF9kZWZhdWx0cyIpLnN1cHBseUxheW91dERlZmF1bHRzLHNldFBvc2l0aW9uczp0KCIuLi9ib3gvc2V0X3Bvc2l0aW9ucyIpLnNldFBvc2l0aW9ucyxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY2FsYzp0KCIuL2NhbGMiKSxwbG90OnQoIi4uL2JveC9wbG90IikucGxvdCxsYXllck5hbWU6ImJveGxheWVyIixzdHlsZTp0KCIuLi9ib3gvc3R5bGUiKS5zdHlsZSxob3ZlclBvaW50czp0KCIuLi9vaGxjL2hvdmVyIiksc2VsZWN0UG9pbnRzOnQoIi4uL29obGMvc2VsZWN0Iil9fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbiI6NzQzLCIuLi9ib3gvbGF5b3V0X2F0dHJpYnV0ZXMiOjg0NSwiLi4vYm94L2xheW91dF9kZWZhdWx0cyI6ODQ2LCIuLi9ib3gvcGxvdCI6ODQ3LCIuLi9ib3gvc2V0X3Bvc2l0aW9ucyI6ODQ5LCIuLi9ib3gvc3R5bGUiOjg1MCwiLi4vb2hsYy9ob3ZlciI6OTczLCIuLi9vaGxjL3NlbGVjdCI6OTc3LCIuL2F0dHJpYnV0ZXMiOjg1MSwiLi9jYWxjIjo4NTIsIi4vZGVmYXVsdHMiOjg1M31dLDg1NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2F4aXNfZGVmYXVsdHMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSxhKXtpKCJhIil8fChpKCJkYSIpLGkoImEwIikpLGkoImIiKXx8KGkoImRiIiksaSgiYjAiKSksZnVuY3Rpb24odCxlLHIsaSl7WyJhYXhpcyIsImJheGlzIl0uZm9yRWFjaChmdW5jdGlvbihhKXt2YXIgbz1hLmNoYXJBdCgwKSxzPXRbYV18fHt9LGw9e30sYz17dGlja2ZvbnQ6IngiLGlkOm8rImF4aXMiLGxldHRlcjpvLGZvbnQ6ZS5mb250LG5hbWU6YSxkYXRhOnRbb10sY2FsZW5kYXI6ZS5jYWxlbmRhcixkZmx0Q29sb3I6aSxiZ0NvbG9yOnIucGFwZXJfYmdjb2xvcixmdWxsTGF5b3V0OnJ9O24ocyxsLGMpLGwuX2NhdGVnb3JpZXM9bC5fY2F0ZWdvcmllc3x8W10sZVthXT1sLHRbYV18fCItIj09PXMudHlwZXx8KHRbYV09e3R5cGU6cy50eXBlfSl9KX0odCxlLHIsYSl9fSx7Ii4vYXhpc19kZWZhdWx0cyI6ODYwfV0sODU2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLmlzQXJyYXlPclR5cGVkQXJyYXk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbiB0KGUscil7aWYoIW4oZSl8fHI+PTEwKXJldHVybiBudWxsO3ZhciBpPTEvMDt2YXIgYT0tMS8wO3ZhciBvPWUubGVuZ3RoO2Zvcih2YXIgcz0wO3M8bztzKyspe3ZhciBsPWVbc107aWYobihsKSl7dmFyIGM9dChsLHIrMSk7YyYmKGk9TWF0aC5taW4oY1swXSxpKSxhPU1hdGgubWF4KGNbMV0sYSkpfWVsc2UgaT1NYXRoLm1pbihsLGkpLGE9TWF0aC5tYXgobCxhKX1yZXR1cm5baSxhXX0odCwwKX19LHsiLi4vLi4vbGliIjo2ODR9XSw4NTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIiksaT10KCIuL2F4aXNfYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIiksbz1uKHtlZGl0VHlwZToiY2FsYyJ9KTtvLmZhbWlseS5kZmx0PSciT3BlbiBTYW5zIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYnLG8uc2l6ZS5kZmx0PTEyLG8uY29sb3IuZGZsdD1hLmRlZmF1bHRMaW5lLGUuZXhwb3J0cz17Y2FycGV0Ont2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJjYWxjIn0seDp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSx5Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LGE6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sYTA6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowLGVkaXRUeXBlOiJjYWxjIn0sZGE6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxLGVkaXRUeXBlOiJjYWxjIn0sYjp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxiMDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjAsZWRpdFR5cGU6ImNhbGMifSxkYjp7dmFsVHlwZToibnVtYmVyIixkZmx0OjEsZWRpdFR5cGU6ImNhbGMifSxjaGVhdGVyc2xvcGU6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxLGVkaXRUeXBlOiJjYWxjIn0sYWF4aXM6aSxiYXhpczppLGZvbnQ6byxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6YS5kZWZhdWx0TGluZSxlZGl0VHlwZToicGxvdCJ9fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiOjU1NywiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIjo3NTgsIi4vYXhpc19hdHRyaWJ1dGVzIjo4NTl9XSw4NTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIikuaXNBcnJheU9yVHlwZWRBcnJheTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGEsbyxzLGwsYyx1LGgsZixwLGQsZyxtLHYseT1uKHIpPyJhIjoiYiIseD0oImEiPT09eT90LmFheGlzOnQuYmF4aXMpLnNtb290aGluZyxiPSJhIj09PXk/dC5hMmk6dC5iMmosXz0iYSI9PT15P3I6aSx3PSJhIj09PXk/aTpyLGs9ImEiPT09eT9lLmEubGVuZ3RoOmUuYi5sZW5ndGgsTT0iYSI9PT15P2UuYi5sZW5ndGg6ZS5hLmxlbmd0aCxBPU1hdGguZmxvb3IoImEiPT09eT90LmIyaih3KTp0LmEyaSh3KSksVD0iYSI9PT15P2Z1bmN0aW9uKGUpe3JldHVybiB0LmV2YWx4eShbXSxlLEEpfTpmdW5jdGlvbihlKXtyZXR1cm4gdC5ldmFseHkoW10sQSxlKX07eCYmKHM9TWF0aC5tYXgoMCxNYXRoLm1pbihNLTIsQSkpLGw9QS1zLG89ImEiPT09eT9mdW5jdGlvbihlLHIpe3JldHVybiB0LmR4eWRpKFtdLGUscyxyLGwpfTpmdW5jdGlvbihlLHIpe3JldHVybiB0LmR4eWRqKFtdLHMsZSxsLHIpfSk7dmFyIFM9YihfWzBdKSxFPWIoX1sxXSksQz1TPEU/MTotMSxMPTFlLTgqKEUtUyksej1DPjA/TWF0aC5mbG9vcjpNYXRoLmNlaWwsUD1DPjA/TWF0aC5jZWlsOk1hdGguZmxvb3IsST1DPjA/TWF0aC5taW46TWF0aC5tYXgsTz1DPjA/TWF0aC5tYXg6TWF0aC5taW4sRD16KFMrTCksUj1QKEUtTCksQj1bW2g9VChTKV1dO2ZvcihhPUQ7YSpDPFIqQzthKz1DKWM9W10sZz1PKFMsYSksdj0obT1JKEUsYStDKSktZyx1PU1hdGgubWF4KDAsTWF0aC5taW4oay0yLE1hdGguZmxvb3IoLjUqKGcrbSkpKSksZj1UKG0pLHgmJihwPW8odSxnLXUpLGQ9byh1LG0tdSksYy5wdXNoKFtoWzBdK3BbMF0vMyp2LGhbMV0rcFsxXS8zKnZdKSxjLnB1c2goW2ZbMF0tZFswXS8zKnYsZlsxXS1kWzFdLzMqdl0pKSxjLnB1c2goZiksQi5wdXNoKGMpLGg9ZjtyZXR1cm4gQn19LHsiLi4vLi4vbGliIjo2ODR9XSw4NTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsO2UuZXhwb3J0cz17Y29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToiY2FsYyJ9LHNtb290aGluZzp7dmFsVHlwZToibnVtYmVyIixkZmx0OjEsbWluOjAsbWF4OjEuMyxlZGl0VHlwZToiY2FsYyJ9LHRpdGxlOnt2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJjYWxjIn0sdGl0bGVmb250Om4oe2VkaXRUeXBlOiJjYWxjIn0pLHRpdGxlb2Zmc2V0Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MTAsZWRpdFR5cGU6ImNhbGMifSx0eXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyItIiwibGluZWFyIiwiZGF0ZSIsImNhdGVnb3J5Il0sZGZsdDoiLSIsZWRpdFR5cGU6ImNhbGMifSxhdXRvcmFuZ2U6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbITAsITEsInJldmVyc2VkIl0sZGZsdDohMCxlZGl0VHlwZToiY2FsYyJ9LHJhbmdlbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibm9ybWFsIiwidG96ZXJvIiwibm9ubmVnYXRpdmUiXSxkZmx0OiJub3JtYWwiLGVkaXRUeXBlOiJjYWxjIn0scmFuZ2U6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGVkaXRUeXBlOiJjYWxjIixpdGVtczpbe3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMifSx7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYyJ9XX0sZml4ZWRyYW5nZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToiY2FsYyJ9LGNoZWF0ZXJ0eXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJpbmRleCIsInZhbHVlIl0sZGZsdDoidmFsdWUiLGVkaXRUeXBlOiJjYWxjIn0sdGlja21vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImxpbmVhciIsImFycmF5Il0sZGZsdDoiYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sbnRpY2tzOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6ImNhbGMifSx0aWNrdmFsczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSx0aWNrdGV4dDp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxzaG93dGlja2xhYmVsczp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsic3RhcnQiLCJlbmQiLCJib3RoIiwibm9uZSJdLGRmbHQ6InN0YXJ0IixlZGl0VHlwZToiY2FsYyJ9LHRpY2tmb250Om4oe2VkaXRUeXBlOiJjYWxjIn0pLHRpY2thbmdsZTp7dmFsVHlwZToiYW5nbGUiLGRmbHQ6ImF1dG8iLGVkaXRUeXBlOiJjYWxjIn0sdGlja3ByZWZpeDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJjYWxjIn0sc2hvd3RpY2twcmVmaXg6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImFsbCIsImZpcnN0IiwibGFzdCIsIm5vbmUiXSxkZmx0OiJhbGwiLGVkaXRUeXBlOiJjYWxjIn0sdGlja3N1ZmZpeDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJjYWxjIn0sc2hvd3RpY2tzdWZmaXg6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImFsbCIsImZpcnN0IiwibGFzdCIsIm5vbmUiXSxkZmx0OiJhbGwiLGVkaXRUeXBlOiJjYWxjIn0sc2hvd2V4cG9uZW50Ont2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhbGwiLCJmaXJzdCIsImxhc3QiLCJub25lIl0sZGZsdDoiYWxsIixlZGl0VHlwZToiY2FsYyJ9LGV4cG9uZW50Zm9ybWF0Ont2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJub25lIiwiZSIsIkUiLCJwb3dlciIsIlNJIiwiQiJdLGRmbHQ6IkIiLGVkaXRUeXBlOiJjYWxjIn0sc2VwYXJhdGV0aG91c2FuZHM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6ImNhbGMifSx0aWNrZm9ybWF0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6ImNhbGMifSx0aWNrZm9ybWF0c3RvcHM6byhhLnRpY2tmb3JtYXRzdG9wcywiY2FsYyIsImZyb20tcm9vdCIpLGNhdGVnb3J5b3JkZXI6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInRyYWNlIiwiY2F0ZWdvcnkgYXNjZW5kaW5nIiwiY2F0ZWdvcnkgZGVzY2VuZGluZyIsImFycmF5Il0sZGZsdDoidHJhY2UiLGVkaXRUeXBlOiJjYWxjIn0sY2F0ZWdvcnlhcnJheTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxsYWJlbHBhZGRpbmc6e3ZhbFR5cGU6ImludGVnZXIiLGRmbHQ6MTAsZWRpdFR5cGU6ImNhbGMifSxsYWJlbHByZWZpeDp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToiY2FsYyJ9LGxhYmVsc3VmZml4Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6ImNhbGMifSxzaG93bGluZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToiY2FsYyJ9LGxpbmVjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6aS5kZWZhdWx0TGluZSxlZGl0VHlwZToiY2FsYyJ9LGxpbmV3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEsZWRpdFR5cGU6ImNhbGMifSxncmlkY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToiY2FsYyJ9LGdyaWR3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEsZWRpdFR5cGU6ImNhbGMifSxzaG93Z3JpZDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYyJ9LG1pbm9yZ3JpZGNvdW50Ont2YWxUeXBlOiJpbnRlZ2VyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6ImNhbGMifSxtaW5vcmdyaWR3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEsZWRpdFR5cGU6ImNhbGMifSxtaW5vcmdyaWRjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6aS5saWdodExpbmUsZWRpdFR5cGU6ImNhbGMifSxzdGFydGxpbmU6e3ZhbFR5cGU6ImJvb2xlYW4iLGVkaXRUeXBlOiJjYWxjIn0sc3RhcnRsaW5lY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToiY2FsYyJ9LHN0YXJ0bGluZXdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MSxlZGl0VHlwZToiY2FsYyJ9LGVuZGxpbmU6e3ZhbFR5cGU6ImJvb2xlYW4iLGVkaXRUeXBlOiJjYWxjIn0sZW5kbGluZXdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MSxlZGl0VHlwZToiY2FsYyJ9LGVuZGxpbmVjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJjYWxjIn0sdGljazA6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDowLGVkaXRUeXBlOiJjYWxjIn0sZHRpY2s6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxLGVkaXRUeXBlOiJjYWxjIn0sYXJyYXl0aWNrMDp7dmFsVHlwZToiaW50ZWdlciIsbWluOjAsZGZsdDowLGVkaXRUeXBlOiJjYWxjIn0sYXJyYXlkdGljazp7dmFsVHlwZToiaW50ZWdlciIsbWluOjEsZGZsdDoxLGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiOjU1NywiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6NzE1LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXMiOjc0NCwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIjo3NTh9XSw4NjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIikuYWRkT3BhY2l0eSxhPXQoIi4uLy4uL3JlZ2lzdHJ5Iiksbz10KCIuLi8uLi9saWIiKSxzPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi90aWNrX3ZhbHVlX2RlZmF1bHRzIiksbD10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vdGlja19sYWJlbF9kZWZhdWx0cyIpLGM9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2NhdGVnb3J5X29yZGVyX2RlZmF1bHRzIiksdT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vc2V0X2NvbnZlcnQiKSxoPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2F1dG90eXBlIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgZj1yLmxldHRlcixwPXIuZm9udHx8e30sZD1uW2YrImF4aXMiXTtmdW5jdGlvbiBnKHIsbil7cmV0dXJuIG8uY29lcmNlKHQsZSxkLHIsbil9ZnVuY3Rpb24gbShyLG4pe3JldHVybiBvLmNvZXJjZTIodCxlLGQscixuKX1yLm5hbWUmJihlLl9uYW1lPXIubmFtZSxlLl9pZD1yLm5hbWUpO3ZhciB2PWcoInR5cGUiKTsoIi0iPT09diYmKHIuZGF0YSYmZnVuY3Rpb24odCxlKXtpZigiLSIhPT10LnR5cGUpcmV0dXJuO3ZhciByPXQuX2lkLmNoYXJBdCgwKSxuPXRbcisiY2FsZW5kYXIiXTt0LnR5cGU9aChlLG4pfShlLHIuZGF0YSksIi0iPT09ZS50eXBlP2UudHlwZT0ibGluZWFyIjp2PXQudHlwZT1lLnR5cGUpLGcoInNtb290aGluZyIpLGcoImNoZWF0ZXJ0eXBlIiksZygic2hvd3RpY2tsYWJlbHMiKSxnKCJsYWJlbHByZWZpeCIsZisiID0gIiksZygibGFiZWxzdWZmaXgiKSxnKCJzaG93dGlja3ByZWZpeCIpLGcoInNob3d0aWNrc3VmZml4IiksZygic2VwYXJhdGV0aG91c2FuZHMiKSxnKCJ0aWNrZm9ybWF0IiksZygiZXhwb25lbnRmb3JtYXQiKSxnKCJzaG93ZXhwb25lbnQiKSxnKCJjYXRlZ29yeW9yZGVyIiksZygidGlja21vZGUiKSxnKCJ0aWNrdmFscyIpLGcoInRpY2t0ZXh0IiksZygidGljazAiKSxnKCJkdGljayIpLCJhcnJheSI9PT1lLnRpY2ttb2RlJiYoZygiYXJyYXl0aWNrMCIpLGcoImFycmF5ZHRpY2siKSksZygibGFiZWxwYWRkaW5nIiksZS5faG92ZXJ0aXRsZT1mLCJkYXRlIj09PXYpJiZhLmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwiaGFuZGxlRGVmYXVsdHMiKSh0LGUsImNhbGVuZGFyIixyLmNhbGVuZGFyKTt1KGUsci5mdWxsTGF5b3V0KSxlLmMycD1vLmlkZW50aXR5O3ZhciB5PWcoImNvbG9yIixyLmRmbHRDb2xvcikseD15PT09dC5jb2xvcj95OnAuY29sb3I7ZygidGl0bGUiKSxvLmNvZXJjZUZvbnQoZywidGl0bGVmb250Iix7ZmFtaWx5OnAuZmFtaWx5LHNpemU6TWF0aC5yb3VuZCgxLjIqcC5zaXplKSxjb2xvcjp4fSksZygidGl0bGVvZmZzZXQiKSxnKCJ0aWNrYW5nbGUiKSxnKCJhdXRvcmFuZ2UiLCFlLmlzVmFsaWRSYW5nZSh0LnJhbmdlKSkmJmcoInJhbmdlbW9kZSIpLGcoInJhbmdlIiksZS5jbGVhblJhbmdlKCksZygiZml4ZWRyYW5nZSIpLHModCxlLGcsdiksbCh0LGUsZyx2LHIpLGModCxlLGcse2RhdGE6ci5kYXRhLGRhdGFBdHRyOmZ9KTt2YXIgYj1tKCJncmlkY29sb3IiLGkoeSwuMykpLF89bSgiZ3JpZHdpZHRoIiksdz1nKCJzaG93Z3JpZCIpO3d8fChkZWxldGUgZS5ncmlkY29sb3IsZGVsZXRlIGUuZ3JpZHdpZHRoKTt2YXIgaz1tKCJzdGFydGxpbmVjb2xvciIseSksTT1tKCJzdGFydGxpbmV3aWR0aCIsXyk7Zygic3RhcnRsaW5lIixlLnNob3dncmlkfHwhIWt8fCEhTSl8fChkZWxldGUgZS5zdGFydGxpbmVjb2xvcixkZWxldGUgZS5zdGFydGxpbmV3aWR0aCk7dmFyIEE9bSgiZW5kbGluZWNvbG9yIix5KSxUPW0oImVuZGxpbmV3aWR0aCIsXyk7cmV0dXJuIGcoImVuZGxpbmUiLGUuc2hvd2dyaWR8fCEhQXx8ISFUKXx8KGRlbGV0ZSBlLmVuZGxpbmVjb2xvcixkZWxldGUgZS5lbmRsaW5ld2lkdGgpLHc/KGcoIm1pbm9yZ3JpZGNvdW50IiksZygibWlub3Jncmlkd2lkdGgiLF8pLGcoIm1pbm9yZ3JpZGNvbG9yIixpKGIsLjA2KSksZS5taW5vcmdyaWRjb3VudHx8KGRlbGV0ZSBlLm1pbm9yZ3JpZHdpZHRoLGRlbGV0ZSBlLm1pbm9yZ3JpZGNvbG9yKSk6KGRlbGV0ZSBlLmdyaWRjb2xvcixkZWxldGUgZS5ncmlkV2lkdGgpLCJub25lIj09PWUuc2hvd3RpY2tsYWJlbHMmJihkZWxldGUgZS50aWNrZm9udCxkZWxldGUgZS50aWNrYW5nbGUsZGVsZXRlIGUuc2hvd2V4cG9uZW50LGRlbGV0ZSBlLmV4cG9uZW50Zm9ybWF0LGRlbGV0ZSBlLnRpY2tmb3JtYXQsZGVsZXRlIGUuc2hvd3RpY2tzdWZmaXgsZGVsZXRlIGUuc2hvd3RpY2twcmVmaXgpLGUuc2hvd3RpY2tzdWZmaXh8fGRlbGV0ZSBlLnRpY2tzdWZmaXgsZS5zaG93dGlja3ByZWZpeHx8ZGVsZXRlIGUudGlja3ByZWZpeCxnKCJ0aWNrbW9kZSIpLCghZS50aXRsZXx8ZS50aXRsZSYmMD09PWUudGl0bGUubGVuZ3RoKSYmKGRlbGV0ZSBlLnRpdGxlZm9udCxkZWxldGUgZS50aXRsZW9mZnNldCksZX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NTU4LCIuLi8uLi9saWIiOjY4NCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfYXV0b3R5cGUiOjczMywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2NhdGVnb3J5X29yZGVyX2RlZmF1bHRzIjo3MzYsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9zZXRfY29udmVydCI6NzUwLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vdGlja19sYWJlbF9kZWZhdWx0cyI6NzUxLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vdGlja192YWx1ZV9kZWZhdWx0cyI6NzUzLCIuLi8uLi9yZWdpc3RyeSI6ODE3LCIuL2F0dHJpYnV0ZXMiOjg1N31dLDg2MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGk9dCgiLi4vLi4vbGliIikuaXNBcnJheTFELGE9dCgiLi9jaGVhdGVyX2Jhc2lzIiksbz10KCIuL2FycmF5X21pbm1heCIpLHM9dCgiLi9jYWxjX2dyaWRsaW5lcyIpLGw9dCgiLi9jYWxjX2xhYmVscyIpLGM9dCgiLi9jYWxjX2NsaXBwYXRoIiksdT10KCIuLi9oZWF0bWFwL2NsZWFuXzJkX2FycmF5IiksaD10KCIuL3Ntb290aF9maWxsXzJkX2FycmF5IiksZj10KCIuLi9oZWF0bWFwL2NvbnZlcnRfY29sdW1uX3h5eiIpLHA9dCgiLi9zZXRfY29udmVydCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPW4uZ2V0RnJvbUlkKHQsZS54YXhpcyksZD1uLmdldEZyb21JZCh0LGUueWF4aXMpLGc9ZS5hYXhpcyxtPWUuYmF4aXMsdj1lLngseT1lLnkseD1bXTt2JiZpKHYpJiZ4LnB1c2goIngiKSx5JiZpKHkpJiZ4LnB1c2goInkiKSx4Lmxlbmd0aCYmZihlLGcsbSwiYSIsImIiLHgpO3ZhciBiPWUuX2E9ZS5fYXx8ZS5hLF89ZS5fYj1lLl9ifHxlLmI7dj1lLl94fHxlLngseT1lLl95fHxlLnk7dmFyIHc9e307aWYoZS5fY2hlYXRlcil7dmFyIGs9ImluZGV4Ij09PWcuY2hlYXRlcnR5cGU/Yi5sZW5ndGg6YixNPSJpbmRleCI9PT1tLmNoZWF0ZXJ0eXBlP18ubGVuZ3RoOl87dj1hKGssTSxlLmNoZWF0ZXJzbG9wZSl9ZS5feD12PXUodiksZS5feT15PXUoeSksaCh2LGIsXyksaCh5LGIsXykscChlKSxlLnNldFNjYWxlKCk7dmFyIEE9byh2KSxUPW8oeSksUz0uNSooQVsxXS1BWzBdKSxFPS41KihBWzFdK0FbMF0pLEM9LjUqKFRbMV0tVFswXSksTD0uNSooVFsxXStUWzBdKTtyZXR1cm4gQT1bRS0xLjMqUyxFKzEuMypTXSxUPVtMLTEuMypDLEwrMS4zKkNdLG4uZXhwYW5kKHIsQSx7cGFkZGVkOiEwfSksbi5leHBhbmQoZCxULHtwYWRkZWQ6ITB9KSxzKGUsImEiLCJiIikscyhlLCJiIiwiYSIpLGwoZSxnKSxsKGUsbSksdy5jbGlwc2VnbWVudHM9YyhlLl94Y3RybCxlLl95Y3RybCxnLG0pLHcueD12LHcueT15LHcuYT1iLHcuYj1fLFt3XX19LHsiLi4vLi4vbGliIjo2ODQsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3MzIsIi4uL2hlYXRtYXAvY2xlYW5fMmRfYXJyYXkiOjkyNywiLi4vaGVhdG1hcC9jb252ZXJ0X2NvbHVtbl94eXoiOjkyOSwiLi9hcnJheV9taW5tYXgiOjg1NiwiLi9jYWxjX2NsaXBwYXRoIjo4NjIsIi4vY2FsY19ncmlkbGluZXMiOjg2MywiLi9jYWxjX2xhYmVscyI6ODY0LCIuL2NoZWF0ZXJfYmFzaXMiOjg2NiwiLi9zZXRfY29udmVydCI6ODc5LCIuL3Ntb290aF9maWxsXzJkX2FycmF5Ijo4ODB9XSw4NjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGEsbyxzPVtdLGw9ISFyLnNtb290aGluZyxjPSEhbi5zbW9vdGhpbmcsdT10WzBdLmxlbmd0aC0xLGg9dC5sZW5ndGgtMTtmb3IoaT0wLGE9W10sbz1bXTtpPD11O2krKylhW2ldPXRbMF1baV0sb1tpXT1lWzBdW2ldO2ZvcihzLnB1c2goe3g6YSx5Om8sYmljdWJpYzpsfSksaT0wLGE9W10sbz1bXTtpPD1oO2krKylhW2ldPXRbaV1bdV0sb1tpXT1lW2ldW3VdO2ZvcihzLnB1c2goe3g6YSx5Om8sYmljdWJpYzpjfSksaT11LGE9W10sbz1bXTtpPj0wO2ktLSlhW3UtaV09dFtoXVtpXSxvW3UtaV09ZVtoXVtpXTtmb3Iocy5wdXNoKHt4OmEseTpvLGJpY3ViaWM6bH0pLGk9aCxhPVtdLG89W107aT49MDtpLS0pYVtoLWldPXRbaV1bMF0sb1toLWldPWVbaV1bMF07cmV0dXJuIHMucHVzaCh7eDphLHk6byxiaWN1YmljOmN9KSxzfX0se31dLDg2MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGk9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgYSxvLHMsbCxjLHUsaCxmLHAsZCxnLG0sdix5LHg9dFsiXyIrZV0sYj10W2UrImF4aXMiXSxfPWIuX2dyaWRsaW5lcz1bXSx3PWIuX21pbm9yZ3JpZGxpbmVzPVtdLGs9Yi5fYm91bmRhcnlsaW5lcz1bXSxNPXRbIl8iK3JdLEE9dFtyKyJheGlzIl07ImFycmF5Ij09PWIudGlja21vZGUmJihiLnRpY2t2YWxzPXguc2xpY2UoKSk7dmFyIFQ9dC5feGN0cmwsUz10Ll95Y3RybCxFPVRbMF0ubGVuZ3RoLEM9VC5sZW5ndGgsTD10Ll9hLmxlbmd0aCx6PXQuX2IubGVuZ3RoO24ucHJlcFRpY2tzKGIpLCJhcnJheSI9PT1iLnRpY2ttb2RlJiZkZWxldGUgYi50aWNrdmFsczt2YXIgUD1iLnNtb290aGluZz8zOjE7ZnVuY3Rpb24gSShuKXt2YXIgaSxhLG8scyxsLGMsdSxoLHAsZCxnLG0sdj1bXSx5PVtdLHg9e307aWYoImIiPT09ZSlmb3IoYT10LmIyaihuKSxvPU1hdGguZmxvb3IoTWF0aC5tYXgoMCxNYXRoLm1pbih6LTIsYSkpKSxzPWEtbyx4Lmxlbmd0aD16LHguY3Jvc3NMZW5ndGg9TCx4Lnh5PWZ1bmN0aW9uKGUpe3JldHVybiB0LmV2YWx4eShbXSxlLGEpfSx4LmR4eT1mdW5jdGlvbihlLHIpe3JldHVybiB0LmR4eWRpKFtdLGUsbyxyLHMpfSxpPTA7aTxMO2krKyljPU1hdGgubWluKEwtMixpKSx1PWktYyxoPXQuZXZhbHh5KFtdLGksYSksQS5zbW9vdGhpbmcmJmk+MCYmKHA9dC5keHlkaShbXSxpLTEsbywwLHMpLHYucHVzaChsWzBdK3BbMF0vMykseS5wdXNoKGxbMV0rcFsxXS8zKSxkPXQuZHh5ZGkoW10saS0xLG8sMSxzKSx2LnB1c2goaFswXS1kWzBdLzMpLHkucHVzaChoWzFdLWRbMV0vMykpLHYucHVzaChoWzBdKSx5LnB1c2goaFsxXSksbD1oO2Vsc2UgZm9yKGk9dC5hMmkobiksYz1NYXRoLmZsb29yKE1hdGgubWF4KDAsTWF0aC5taW4oTC0yLGkpKSksdT1pLWMseC5sZW5ndGg9TCx4LmNyb3NzTGVuZ3RoPXoseC54eT1mdW5jdGlvbihlKXtyZXR1cm4gdC5ldmFseHkoW10saSxlKX0seC5keHk9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5keHlkaihbXSxjLGUsdSxyKX0sYT0wO2E8ejthKyspbz1NYXRoLm1pbih6LTIsYSkscz1hLW8saD10LmV2YWx4eShbXSxpLGEpLEEuc21vb3RoaW5nJiZhPjAmJihnPXQuZHh5ZGooW10sYyxhLTEsdSwwKSx2LnB1c2gobFswXStnWzBdLzMpLHkucHVzaChsWzFdK2dbMV0vMyksbT10LmR4eWRqKFtdLGMsYS0xLHUsMSksdi5wdXNoKGhbMF0tbVswXS8zKSx5LnB1c2goaFsxXS1tWzFdLzMpKSx2LnB1c2goaFswXSkseS5wdXNoKGhbMV0pLGw9aDtyZXR1cm4geC5heGlzTGV0dGVyPWUseC5heGlzPWIseC5jcm9zc0F4aXM9QSx4LnZhbHVlPW4seC5jb25zdHZhcj1yLHguaW5kZXg9Zix4Lng9dix4Lnk9eSx4LnNtb290aGluZz1BLnNtb290aGluZyx4fWZ1bmN0aW9uIE8obil7dmFyIGksYSxvLHMsbCxjPVtdLHU9W10saD17fTtpZihoLmxlbmd0aD14Lmxlbmd0aCxoLmNyb3NzTGVuZ3RoPU0ubGVuZ3RoLCJiIj09PWUpZm9yKG89TWF0aC5tYXgoMCxNYXRoLm1pbih6LTIsbikpLGw9TWF0aC5taW4oMSxNYXRoLm1heCgwLG4tbykpLGgueHk9ZnVuY3Rpb24oZSl7cmV0dXJuIHQuZXZhbHh5KFtdLGUsbil9LGguZHh5PWZ1bmN0aW9uKGUscil7cmV0dXJuIHQuZHh5ZGkoW10sZSxvLHIsbCl9LGk9MDtpPEU7aSsrKWNbaV09VFtuKlBdW2ldLHVbaV09U1tuKlBdW2ldO2Vsc2UgZm9yKGE9TWF0aC5tYXgoMCxNYXRoLm1pbihMLTIsbikpLHM9TWF0aC5taW4oMSxNYXRoLm1heCgwLG4tYSkpLGgueHk9ZnVuY3Rpb24oZSl7cmV0dXJuIHQuZXZhbHh5KFtdLG4sZSl9LGguZHh5PWZ1bmN0aW9uKGUscil7cmV0dXJuIHQuZHh5ZGooW10sYSxlLHMscil9LGk9MDtpPEM7aSsrKWNbaV09VFtpXVtuKlBdLHVbaV09U1tpXVtuKlBdO3JldHVybiBoLmF4aXNMZXR0ZXI9ZSxoLmF4aXM9YixoLmNyb3NzQXhpcz1BLGgudmFsdWU9eFtuXSxoLmNvbnN0dmFyPXIsaC5pbmRleD1uLGgueD1jLGgueT11LGguc21vb3RoaW5nPUEuc21vb3RoaW5nLGh9aWYoImFycmF5Ij09PWIudGlja21vZGUpe2ZvcihsPTVlLTE1LHU9KGM9W01hdGguZmxvb3IoKHgubGVuZ3RoLTEtYi5hcnJheXRpY2swKS9iLmFycmF5ZHRpY2sqKDErbCkpLE1hdGguY2VpbCgtYi5hcnJheXRpY2swL2IuYXJyYXlkdGljay8oMStsKSldLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC1lfSkpWzBdLTEsaD1jWzFdKzEsZj11O2Y8aDtmKyspKG89Yi5hcnJheXRpY2swK2IuYXJyYXlkdGljaypmKTwwfHxvPngubGVuZ3RoLTF8fF8ucHVzaChpKE8obykse2NvbG9yOmIuZ3JpZGNvbG9yLHdpZHRoOmIuZ3JpZHdpZHRofSkpO2ZvcihmPXU7ZjxoO2YrKylpZihzPWIuYXJyYXl0aWNrMCtiLmFycmF5ZHRpY2sqZixnPU1hdGgubWluKHMrYi5hcnJheWR0aWNrLHgubGVuZ3RoLTEpLCEoczwwfHxzPngubGVuZ3RoLTF8fGc8MHx8Zz54Lmxlbmd0aC0xKSlmb3IobT14W3NdLHY9eFtnXSxhPTA7YTxiLm1pbm9yZ3JpZGNvdW50O2ErKykoeT1nLXMpPD0wfHwoZD1tKyh2LW0pKihhKzEpLyhiLm1pbm9yZ3JpZGNvdW50KzEpKihiLmFycmF5ZHRpY2sveSkpPHhbMF18fGQ+eFt4Lmxlbmd0aC0xXXx8dy5wdXNoKGkoSShkKSx7Y29sb3I6Yi5taW5vcmdyaWRjb2xvcix3aWR0aDpiLm1pbm9yZ3JpZHdpZHRofSkpO2Iuc3RhcnRsaW5lJiZrLnB1c2goaShPKDApLHtjb2xvcjpiLnN0YXJ0bGluZWNvbG9yLHdpZHRoOmIuc3RhcnRsaW5ld2lkdGh9KSksYi5lbmRsaW5lJiZrLnB1c2goaShPKHgubGVuZ3RoLTEpLHtjb2xvcjpiLmVuZGxpbmVjb2xvcix3aWR0aDpiLmVuZGxpbmV3aWR0aH0pKX1lbHNle2ZvcihsPTVlLTE1LHU9KGM9W01hdGguZmxvb3IoKHhbeC5sZW5ndGgtMV0tYi50aWNrMCkvYi5kdGljayooMStsKSksTWF0aC5jZWlsKCh4WzBdLWIudGljazApL2IuZHRpY2svKDErbCkpXS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtZX0pKVswXSxoPWNbMV0sZj11O2Y8PWg7ZisrKXA9Yi50aWNrMCtiLmR0aWNrKmYsXy5wdXNoKGkoSShwKSx7Y29sb3I6Yi5ncmlkY29sb3Isd2lkdGg6Yi5ncmlkd2lkdGh9KSk7Zm9yKGY9dS0xO2Y8aCsxO2YrKylmb3IocD1iLnRpY2swK2IuZHRpY2sqZixhPTA7YTxiLm1pbm9yZ3JpZGNvdW50O2ErKykoZD1wK2IuZHRpY2sqKGErMSkvKGIubWlub3JncmlkY291bnQrMSkpPHhbMF18fGQ+eFt4Lmxlbmd0aC0xXXx8dy5wdXNoKGkoSShkKSx7Y29sb3I6Yi5taW5vcmdyaWRjb2xvcix3aWR0aDpiLm1pbm9yZ3JpZHdpZHRofSkpO2Iuc3RhcnRsaW5lJiZrLnB1c2goaShJKHhbMF0pLHtjb2xvcjpiLnN0YXJ0bGluZWNvbG9yLHdpZHRoOmIuc3RhcnRsaW5ld2lkdGh9KSksYi5lbmRsaW5lJiZrLnB1c2goaShJKHhbeC5sZW5ndGgtMV0pLHtjb2xvcjpiLmVuZGxpbmVjb2xvcix3aWR0aDpiLmVuZGxpbmV3aWR0aH0pKX19fSx7Ii4uLy4uL2xpYi9leHRlbmQiOjY3MywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjczMn1dLDg2NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGk9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsYSxvLHM9ZS5fbGFiZWxzPVtdLGw9ZS5fZ3JpZGxpbmVzO2ZvcihyPTA7cjxsLmxlbmd0aDtyKyspbz1sW3JdLC0xIT09WyJzdGFydCIsImJvdGgiXS5pbmRleE9mKGUuc2hvd3RpY2tsYWJlbHMpJiYoYT1uLnRpY2tUZXh0KGUsby52YWx1ZSksaShhLHtwcmVmaXg6dm9pZCAwLHN1ZmZpeDp2b2lkIDAsZW5kQW5jaG9yOiEwLHh5Om8ueHkoMCksZHh5Om8uZHh5KDAsMCksYXhpczpvLmF4aXMsbGVuZ3RoOm8uY3Jvc3NBeGlzLmxlbmd0aCxmb250Om8uYXhpcy50aWNrZm9udCxpc0ZpcnN0OjA9PT1yLGlzTGFzdDpyPT09bC5sZW5ndGgtMX0pLHMucHVzaChhKSksLTEhPT1bImVuZCIsImJvdGgiXS5pbmRleE9mKGUuc2hvd3RpY2tsYWJlbHMpJiYoYT1uLnRpY2tUZXh0KGUsby52YWx1ZSksaShhLHtlbmRBbmNob3I6ITEseHk6by54eShvLmNyb3NzTGVuZ3RoLTEpLGR4eTpvLmR4eShvLmNyb3NzTGVuZ3RoLTIsMSksYXhpczpvLmF4aXMsbGVuZ3RoOm8uY3Jvc3NBeGlzLmxlbmd0aCxmb250Om8uYXhpcy50aWNrZm9udCxpc0ZpcnN0OjA9PT1yLGlzTGFzdDpyPT09bC5sZW5ndGgtMX0pLHMucHVzaChhKSl9fSx7Ii4uLy4uL2xpYi9leHRlbmQiOjY3MywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjczMn1dLDg2NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dFswXS1lWzBdLGE9dFsxXS1lWzFdLG89clswXS1lWzBdLHM9clsxXS1lWzFdLGw9TWF0aC5wb3coaSppK2EqYSwuMjUpLGM9TWF0aC5wb3cobypvK3MqcywuMjUpLHU9KGMqYyppLWwqbCpvKSpuLGg9KGMqYyphLWwqbCpzKSpuLGY9YyoobCtjKSozLHA9bCoobCtjKSozO3JldHVybltbZVswXSsoZiYmdS9mKSxlWzFdKyhmJiZoL2YpXSxbZVswXS0ocCYmdS9wKSxlWzFdLShwJiZoL3ApXV19fSx7fV0sODY2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLmlzQXJyYXlPclR5cGVkQXJyYXk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaSxhLG8scyxsLGMsdT1bXSxoPW4odCk/dC5sZW5ndGg6dCxmPW4oZSk/ZS5sZW5ndGg6ZSxwPW4odCk/dDpudWxsLGQ9bihlKT9lOm51bGw7cCYmKG89KHAubGVuZ3RoLTEpLyhwW3AubGVuZ3RoLTFdLXBbMF0pLyhoLTEpKSxkJiYocz0oZC5sZW5ndGgtMSkvKGRbZC5sZW5ndGgtMV0tZFswXSkvKGYtMSkpO3ZhciBnPTEvMCxtPS0xLzA7Zm9yKGE9MDthPGY7YSsrKWZvcih1W2FdPVtdLGw9ZD8oZFthXS1kWzBdKSpzOmEvKGYtMSksaT0wO2k8aDtpKyspYz0ocD8ocFtpXS1wWzBdKSpvOmkvKGgtMSkpLWwqcixnPU1hdGgubWluKGMsZyksbT1NYXRoLm1heChjLG0pLHVbYV1baV09Yzt2YXIgdj0xLyhtLWcpLHk9LWcqdjtmb3IoYT0wO2E8ZjthKyspZm9yKGk9MDtpPGg7aSsrKXVbYV1baV09dip1W2FdW2ldK3k7cmV0dXJuIHV9fSx7Ii4uLy4uL2xpYiI6Njg0fV0sODY3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vY2F0bXVsbF9yb20iKSxpPXQoIi4uLy4uL2xpYiIpLmVuc3VyZUFycmF5O2Z1bmN0aW9uIGEodCxlLHIpe3ZhciBuPS0uNSpyWzBdKzEuNSplWzBdLGk9LS41KnJbMV0rMS41KmVbMV07cmV0dXJuWygyKm4rdFswXSkvMywoMippK3RbMV0pLzNdfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvLHMsbCl7dmFyIGMsdSxoLGYscCxkLGcsbSx2LHkseD1yWzBdLmxlbmd0aCxiPXIubGVuZ3RoLF89cz8zKngtMjp4LHc9bD8zKmItMjpiO2Zvcih0PWkodCx3KSxlPWkoZSx3KSxoPTA7aDx3O2grKyl0W2hdPWkodFtoXSxfKSxlW2hdPWkoZVtoXSxfKTtmb3IodT0wLGY9MDt1PGI7dSsrLGYrPWw/MzoxKWZvcihwPXRbZl0sZD1lW2ZdLGc9clt1XSxtPW9bdV0sYz0wLGg9MDtjPHg7YysrLGgrPXM/MzoxKXBbaF09Z1tjXSxkW2hdPW1bY107aWYocylmb3IodT0wLGY9MDt1PGI7dSsrLGYrPWw/MzoxKXtmb3IoYz0xLGg9MztjPHgtMTtjKyssaCs9Myl2PW4oW3JbdV1bYy0xXSxvW3VdW2MtMV1dLFtyW3VdW2NdLG9bdV1bY11dLFtyW3VdW2MrMV0sb1t1XVtjKzFdXSxzKSx0W2ZdW2gtMV09dlswXVswXSxlW2ZdW2gtMV09dlswXVsxXSx0W2ZdW2grMV09dlsxXVswXSxlW2ZdW2grMV09dlsxXVsxXTt5PWEoW3RbZl1bMF0sZVtmXVswXV0sW3RbZl1bMl0sZVtmXVsyXV0sW3RbZl1bM10sZVtmXVszXV0pLHRbZl1bMV09eVswXSxlW2ZdWzFdPXlbMV0seT1hKFt0W2ZdW18tMV0sZVtmXVtfLTFdXSxbdFtmXVtfLTNdLGVbZl1bXy0zXV0sW3RbZl1bXy00XSxlW2ZdW18tNF1dKSx0W2ZdW18tMl09eVswXSxlW2ZdW18tMl09eVsxXX1pZihsKWZvcihoPTA7aDxfO2grKyl7Zm9yKGY9MztmPHctMztmKz0zKXY9bihbdFtmLTNdW2hdLGVbZi0zXVtoXV0sW3RbZl1baF0sZVtmXVtoXV0sW3RbZiszXVtoXSxlW2YrM11baF1dLGwpLHRbZi0xXVtoXT12WzBdWzBdLGVbZi0xXVtoXT12WzBdWzFdLHRbZisxXVtoXT12WzFdWzBdLGVbZisxXVtoXT12WzFdWzFdO3k9YShbdFswXVtoXSxlWzBdW2hdXSxbdFsyXVtoXSxlWzJdW2hdXSxbdFszXVtoXSxlWzNdW2hdXSksdFsxXVtoXT15WzBdLGVbMV1baF09eVsxXSx5PWEoW3Rbdy0xXVtoXSxlW3ctMV1baF1dLFt0W3ctM11baF0sZVt3LTNdW2hdXSxbdFt3LTRdW2hdLGVbdy00XVtoXV0pLHRbdy0yXVtoXT15WzBdLGVbdy0yXVtoXT15WzFdfWlmKHMmJmwpZm9yKGY9MTtmPHc7Zis9KGYrMSklMz09MD8yOjEpe2ZvcihoPTM7aDxfLTM7aCs9Myl2PW4oW3RbZl1baC0zXSxlW2ZdW2gtM11dLFt0W2ZdW2hdLGVbZl1baF1dLFt0W2ZdW2grM10sZVtmXVtoKzNdXSxzKSx0W2ZdW2gtMV09LjUqKHRbZl1baC0xXSt2WzBdWzBdKSxlW2ZdW2gtMV09LjUqKGVbZl1baC0xXSt2WzBdWzFdKSx0W2ZdW2grMV09LjUqKHRbZl1baCsxXSt2WzFdWzBdKSxlW2ZdW2grMV09LjUqKGVbZl1baCsxXSt2WzFdWzFdKTt5PWEoW3RbZl1bMF0sZVtmXVswXV0sW3RbZl1bMl0sZVtmXVsyXV0sW3RbZl1bM10sZVtmXVszXV0pLHRbZl1bMV09LjUqKHRbZl1bMV0reVswXSksZVtmXVsxXT0uNSooZVtmXVsxXSt5WzFdKSx5PWEoW3RbZl1bXy0xXSxlW2ZdW18tMV1dLFt0W2ZdW18tM10sZVtmXVtfLTNdXSxbdFtmXVtfLTRdLGVbZl1bXy00XV0pLHRbZl1bXy0yXT0uNSoodFtmXVtfLTJdK3lbMF0pLGVbZl1bXy0yXT0uNSooZVtmXVtfLTJdK3lbMV0pfXJldHVyblt0LGVdfX0seyIuLi8uLi9saWIiOjY4NCwiLi9jYXRtdWxsX3JvbSI6ODY1fV0sODY4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17UkVMQVRJVkVfQ1VMTF9UT0xFUkFOQ0U6MWUtNn19LHt9XSw4Njk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZSYmcj9mdW5jdGlvbihlLHIsbixpLGEpe3ZhciBvLHMsbCxjLHUsaDtlfHwoZT1bXSkscio9MyxuKj0zO3ZhciBmPWkqaSxwPTEtaSxkPXAqcCxnPXAqaSoyLG09LTMqZCx2PTMqKGQtZykseT0zKihnLWYpLHg9MypmLGI9YSphLF89YiphLHc9MS1hLGs9dyp3LE09ayp3O2ZvcihoPTA7aDx0Lmxlbmd0aDtoKyspbz1tKih1PXRbaF0pW25dW3JdK3YqdVtuXVtyKzFdK3kqdVtuXVtyKzJdK3gqdVtuXVtyKzNdLHM9bSp1W24rMV1bcl0rdip1W24rMV1bcisxXSt5KnVbbisxXVtyKzJdK3gqdVtuKzFdW3IrM10sbD1tKnVbbisyXVtyXSt2KnVbbisyXVtyKzFdK3kqdVtuKzJdW3IrMl0reCp1W24rMl1bciszXSxjPW0qdVtuKzNdW3JdK3YqdVtuKzNdW3IrMV0reSp1W24rM11bcisyXSt4KnVbbiszXVtyKzNdLGVbaF09TSpvKzMqKGsqYSpzK3cqYipsKStfKmM7cmV0dXJuIGV9OmU/ZnVuY3Rpb24oZSxyLG4saSxhKXt2YXIgbyxzLGwsYztlfHwoZT1bXSkscio9Mzt2YXIgdT1pKmksaD0xLWksZj1oKmgscD1oKmkqMixkPS0zKmYsZz0zKihmLXApLG09MyoocC11KSx2PTMqdSx5PTEtYTtmb3IobD0wO2w8dC5sZW5ndGg7bCsrKW89ZCooYz10W2xdKVtuXVtyXStnKmNbbl1bcisxXSttKmNbbl1bcisyXSt2KmNbbl1bciszXSxzPWQqY1tuKzFdW3JdK2cqY1tuKzFdW3IrMV0rbSpjW24rMV1bcisyXSt2KmNbbisxXVtyKzNdLGVbbF09eSpvK2EqcztyZXR1cm4gZX06cj9mdW5jdGlvbihlLHIsbixpLGEpe3ZhciBvLHMsbCxjLHUsaDtlfHwoZT1bXSksbio9Mzt2YXIgZj1hKmEscD1mKmEsZD0xLWEsZz1kKmQsbT1nKmQ7Zm9yKHU9MDt1PHQubGVuZ3RoO3UrKylvPShoPXRbdV0pW25dW3IrMV0taFtuXVtyXSxzPWhbbisxXVtyKzFdLWhbbisxXVtyXSxsPWhbbisyXVtyKzFdLWhbbisyXVtyXSxjPWhbbiszXVtyKzFdLWhbbiszXVtyXSxlW3VdPW0qbyszKihnKmEqcytkKmYqbCkrcCpjO3JldHVybiBlfTpmdW5jdGlvbihlLHIsbixpLGEpe3ZhciBvLHMsbCxjO2V8fChlPVtdKTt2YXIgdT0xLWE7Zm9yKGw9MDtsPHQubGVuZ3RoO2wrKylvPShjPXRbbF0pW25dW3IrMV0tY1tuXVtyXSxzPWNbbisxXVtyKzFdLWNbbisxXVtyXSxlW2xdPXUqbythKnM7cmV0dXJuIGV9fX0se31dLDg3MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBlJiZyP2Z1bmN0aW9uKGUscixuLGksYSl7dmFyIG8scyxsLGMsdSxoO2V8fChlPVtdKSxyKj0zLG4qPTM7dmFyIGY9aSppLHA9ZippLGQ9MS1pLGc9ZCpkLG09ZypkLHY9YSphLHk9MS1hLHg9eSp5LGI9eSphKjIsXz0tMyp4LHc9MyooeC1iKSxrPTMqKGItdiksTT0zKnY7Zm9yKGg9MDtoPHQubGVuZ3RoO2grKylvPV8qKHU9dFtoXSlbbl1bcl0rdyp1W24rMV1bcl0rayp1W24rMl1bcl0rTSp1W24rM11bcl0scz1fKnVbbl1bcisxXSt3KnVbbisxXVtyKzFdK2sqdVtuKzJdW3IrMV0rTSp1W24rM11bcisxXSxsPV8qdVtuXVtyKzJdK3cqdVtuKzFdW3IrMl0rayp1W24rMl1bcisyXStNKnVbbiszXVtyKzJdLGM9Xyp1W25dW3IrM10rdyp1W24rMV1bciszXStrKnVbbisyXVtyKzNdK00qdVtuKzNdW3IrM10sZVtoXT1tKm8rMyooZyppKnMrZCpmKmwpK3AqYztyZXR1cm4gZX06ZT9mdW5jdGlvbihlLHIsbixpLGEpe3ZhciBvLHMsbCxjLHUsaDtlfHwoZT1bXSkscio9Mzt2YXIgZj1hKmEscD1mKmEsZD0xLWEsZz1kKmQsbT1nKmQ7Zm9yKHU9MDt1PHQubGVuZ3RoO3UrKylvPShoPXRbdV0pW24rMV1bcl0taFtuXVtyXSxzPWhbbisxXVtyKzFdLWhbbl1bcisxXSxsPWhbbisxXVtyKzJdLWhbbl1bcisyXSxjPWhbbisxXVtyKzNdLWhbbl1bciszXSxlW3VdPW0qbyszKihnKmEqcytkKmYqbCkrcCpjO3JldHVybiBlfTpyP2Z1bmN0aW9uKGUscixuLGksYSl7dmFyIG8scyxsLGM7ZXx8KGU9W10pLG4qPTM7dmFyIHU9MS1pLGg9YSphLGY9MS1hLHA9ZipmLGQ9ZiphKjIsZz0tMypwLG09MyoocC1kKSx2PTMqKGQtaCkseT0zKmg7Zm9yKGw9MDtsPHQubGVuZ3RoO2wrKylvPWcqKGM9dFtsXSlbbl1bcl0rbSpjW24rMV1bcl0rdipjW24rMl1bcl0reSpjW24rM11bcl0scz1nKmNbbl1bcisxXSttKmNbbisxXVtyKzFdK3YqY1tuKzJdW3IrMV0reSpjW24rM11bcisxXSxlW2xdPXUqbytpKnM7cmV0dXJuIGV9OmZ1bmN0aW9uKGUscixuLGksYSl7dmFyIG8scyxsLGM7ZXx8KGU9W10pO3ZhciB1PTEtaTtmb3IobD0wO2w8dC5sZW5ndGg7bCsrKW89KGM9dFtsXSlbbisxXVtyXS1jW25dW3JdLHM9Y1tuKzFdW3IrMV0tY1tuXVtyKzFdLGVbbF09dSpvK2kqcztyZXR1cm4gZX19fSx7fV0sODcxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPWUtMixvPXItMjtyZXR1cm4gbiYmaT9mdW5jdGlvbihlLHIsbil7dmFyIGkscyxsLGMsdSxoO2V8fChlPVtdKTt2YXIgZj1NYXRoLm1heCgwLE1hdGgubWluKE1hdGguZmxvb3IociksYSkpLHA9TWF0aC5tYXgoMCxNYXRoLm1pbihNYXRoLmZsb29yKG4pLG8pKSxkPU1hdGgubWF4KDAsTWF0aC5taW4oMSxyLWYpKSxnPU1hdGgubWF4KDAsTWF0aC5taW4oMSxuLXApKTtmKj0zLHAqPTM7dmFyIG09ZCpkLHY9bSpkLHk9MS1kLHg9eSp5LGI9eCp5LF89ZypnLHc9XypnLGs9MS1nLE09ayprLEE9TSprO2ZvcihoPTA7aDx0Lmxlbmd0aDtoKyspaT1iKih1PXRbaF0pW3BdW2ZdKzMqKHgqZCp1W3BdW2YrMV0reSptKnVbcF1bZisyXSkrdip1W3BdW2YrM10scz1iKnVbcCsxXVtmXSszKih4KmQqdVtwKzFdW2YrMV0reSptKnVbcCsxXVtmKzJdKSt2KnVbcCsxXVtmKzNdLGw9Yip1W3ArMl1bZl0rMyooeCpkKnVbcCsyXVtmKzFdK3kqbSp1W3ArMl1bZisyXSkrdip1W3ArMl1bZiszXSxjPWIqdVtwKzNdW2ZdKzMqKHgqZCp1W3ArM11bZisxXSt5Km0qdVtwKzNdW2YrMl0pK3YqdVtwKzNdW2YrM10sZVtoXT1BKmkrMyooTSpnKnMraypfKmwpK3cqYztyZXR1cm4gZX06bj9mdW5jdGlvbihlLHIsbil7ZXx8KGU9W10pO3ZhciBpLHMsbCxjLHUsaCxmPU1hdGgubWF4KDAsTWF0aC5taW4oTWF0aC5mbG9vcihyKSxhKSkscD1NYXRoLm1heCgwLE1hdGgubWluKE1hdGguZmxvb3IobiksbykpLGQ9TWF0aC5tYXgoMCxNYXRoLm1pbigxLHItZikpLGc9TWF0aC5tYXgoMCxNYXRoLm1pbigxLG4tcCkpO2YqPTM7dmFyIG09ZCpkLHY9bSpkLHk9MS1kLHg9eSp5LGI9eCp5LF89MS1nO2Zvcih1PTA7dTx0Lmxlbmd0aDt1KyspaT1fKihoPXRbdV0pW3BdW2ZdK2cqaFtwKzFdW2ZdLHM9XypoW3BdW2YrMV0rZypoW3ArMV1bZisxXSxsPV8qaFtwXVtmKzJdK2cqaFtwKzFdW2YrMV0sYz1fKmhbcF1bZiszXStnKmhbcCsxXVtmKzFdLGVbdV09YippKzMqKHgqZCpzK3kqbSpsKSt2KmM7cmV0dXJuIGV9Omk/ZnVuY3Rpb24oZSxyLG4pe2V8fChlPVtdKTt2YXIgaSxzLGwsYyx1LGgsZj1NYXRoLm1heCgwLE1hdGgubWluKE1hdGguZmxvb3IociksYSkpLHA9TWF0aC5tYXgoMCxNYXRoLm1pbihNYXRoLmZsb29yKG4pLG8pKSxkPU1hdGgubWF4KDAsTWF0aC5taW4oMSxyLWYpKSxnPU1hdGgubWF4KDAsTWF0aC5taW4oMSxuLXApKTtwKj0zO3ZhciBtPWcqZyx2PW0qZyx5PTEtZyx4PXkqeSxiPXgqeSxfPTEtZDtmb3IodT0wO3U8dC5sZW5ndGg7dSsrKWk9XyooaD10W3VdKVtwXVtmXStkKmhbcF1bZisxXSxzPV8qaFtwKzFdW2ZdK2QqaFtwKzFdW2YrMV0sbD1fKmhbcCsyXVtmXStkKmhbcCsyXVtmKzFdLGM9XypoW3ArM11bZl0rZCpoW3ArM11bZisxXSxlW3VdPWIqaSszKih4Kmcqcyt5Km0qbCkrdipjO3JldHVybiBlfTpmdW5jdGlvbihlLHIsbil7ZXx8KGU9W10pO3ZhciBpLHMsbCxjLHU9TWF0aC5tYXgoMCxNYXRoLm1pbihNYXRoLmZsb29yKHIpLGEpKSxoPU1hdGgubWF4KDAsTWF0aC5taW4oTWF0aC5mbG9vcihuKSxvKSksZj1NYXRoLm1heCgwLE1hdGgubWluKDEsci11KSkscD1NYXRoLm1heCgwLE1hdGgubWluKDEsbi1oKSksZD0xLXAsZz0xLWY7Zm9yKGw9MDtsPHQubGVuZ3RoO2wrKylpPWcqKGM9dFtsXSlbaF1bdV0rZipjW2hdW3UrMV0scz1nKmNbaCsxXVt1XStmKmNbaCsxXVt1KzFdLGVbbF09ZCppK3AqcztyZXR1cm4gZX19fSx7fV0sODcyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi94eV9kZWZhdWx0cyIpLGE9dCgiLi9hYl9kZWZhdWx0cyIpLG89dCgiLi9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbCl7ZnVuY3Rpb24gYyhyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsbyxyLGkpfWUuX2NsaXBQYXRoSWQ9ImNsaXAiK2UudWlkKyJjYXJwZXQiO3ZhciB1PWMoImNvbG9yIixzLmRlZmF1bHRMaW5lKTsobi5jb2VyY2VGb250KGMsImZvbnQiKSxjKCJjYXJwZXQiKSxhKHQsZSxsLGMsdSksZS5hJiZlLmIpPyhlLmEubGVuZ3RoPDMmJihlLmFheGlzLnNtb290aGluZz0wKSxlLmIubGVuZ3RoPDMmJihlLmJheGlzLnNtb290aGluZz0wKSxpKHQsZSxjKXx8KGUudmlzaWJsZT0hMSksZS5fY2hlYXRlciYmYygiY2hlYXRlcnNsb3BlIikpOmUudmlzaWJsZT0hMX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIjo1NTcsIi4uLy4uL2xpYiI6Njg0LCIuL2FiX2RlZmF1bHRzIjo4NTUsIi4vYXR0cmlidXRlcyI6ODU3LCIuL3h5X2RlZmF1bHRzIjo4ODF9XSw4NzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoIi4vYXR0cmlidXRlcyIpLG4uc3VwcGx5RGVmYXVsdHM9dCgiLi9kZWZhdWx0cyIpLG4ucGxvdD10KCIuL3Bsb3QiKSxuLmNhbGM9dCgiLi9jYWxjIiksbi5hbmltYXRhYmxlPSEwLG4uaXNDb250YWluZXI9ITAsbi5tb2R1bGVUeXBlPSJ0cmFjZSIsbi5uYW1lPSJjYXJwZXQiLG4uYmFzZVBsb3RNb2R1bGU9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuIiksbi5jYXRlZ29yaWVzPVsiY2FydGVzaWFuIiwic3ZnIiwiY2FycGV0IiwiY2FycGV0QXhpcyIsIm5vdExlZ2VuZElzb2xhdGFibGUiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuIjo3NDMsIi4vYXR0cmlidXRlcyI6ODU3LCIuL2NhbGMiOjg2MSwiLi9kZWZhdWx0cyI6ODcyLCIuL3Bsb3QiOjg3OH1dLDg3NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsbj10Ll9mdWxsRGF0YS5sZW5ndGgsaT0wO2k8bjtpKyspe3ZhciBhPXQuX2Z1bGxEYXRhW2ldO2lmKGEuaW5kZXghPT1lLmluZGV4JiYoImNhcnBldCI9PT1hLnR5cGUmJihyfHwocj1hKSxhLmNhcnBldD09PWUuY2FycGV0KSkpcmV0dXJuIGF9cmV0dXJuIHJ9fSx7fV0sODc1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7aWYoMD09PXQubGVuZ3RoKXJldHVybiIiO3ZhciBuLGk9W10sYT1yPzM6MTtmb3Iobj0wO248dC5sZW5ndGg7bis9YSlpLnB1c2godFtuXSsiLCIrZVtuXSksciYmbjx0Lmxlbmd0aC1hJiYoaS5wdXNoKCJDIiksaS5wdXNoKFt0W24rMV0rIiwiK2VbbisxXSx0W24rMl0rIiwiK2VbbisyXSsiICJdLmpvaW4oIiAiKSkpO3JldHVybiBpLmpvaW4ocj8iIjoiTCIpfX0se31dLDg3NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKS5pc0FycmF5T3JUeXBlZEFycmF5O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGk7Zm9yKG4odCk/dC5sZW5ndGg+ZS5sZW5ndGgmJih0PXQuc2xpY2UoMCxlLmxlbmd0aCkpOnQ9W10saT0wO2k8ZS5sZW5ndGg7aSsrKXRbaV09cihlW2ldKTtyZXR1cm4gdH19LHsiLi4vLi4vbGliIjo2ODR9XSw4Nzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbz1pWzBdKnQuZHBkeChlKSxzPWlbMV0qdC5kcGR5KHIpLGw9MSxjPTE7aWYoYSl7dmFyIHU9TWF0aC5zcXJ0KGlbMF0qaVswXStpWzFdKmlbMV0pLGg9TWF0aC5zcXJ0KGFbMF0qYVswXSthWzFdKmFbMV0pLGY9KGlbMF0qYVswXStpWzFdKmFbMV0pL3UvaDtjPU1hdGgubWF4KDAsZil9dmFyIHA9MTgwKk1hdGguYXRhbjIocyxvKS9NYXRoLlBJO3JldHVybiBwPC05MD8ocCs9MTgwLGw9LWwpOnA+OTAmJihwLT0xODAsbD0tbCkse2FuZ2xlOnAsZmxpcDpsLHA6dC5jMnAobixlLHIpLG9mZnNldE11bHRwbGllcjpjfX19LHt9XSw4Nzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGE9dCgiLi9tYXBfMWRfYXJyYXkiKSxvPXQoIi4vbWFrZXBhdGgiKSxzPXQoIi4vb3JpZW50X3RleHQiKSxsPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLGM9dCgiLi4vLi4vbGliIiksdT10KCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50IiksaD10KCIuLi8uLi9wbG90cy9nZXRfZGF0YSIpLmdldFVpZHNGcm9tQ2FsY0RhdGE7ZnVuY3Rpb24gZih0LGUscixuKXt2YXIgaT1yWzBdLGw9clswXS50cmFjZSx1PWUueGF4aXMsaD1lLnlheGlzLGY9bC5hYXhpcyxnPWwuYmF4aXMsbT10Ll9mdWxsTGF5b3V0Ll9jbGlwcyx5PWMuZW5zdXJlU2luZ2xlKG4sImciLCJjYXJwZXQiK2wudWlkKS5jbGFzc2VkKCJ0cmFjZSIsITApLHg9Yy5lbnN1cmVTaW5nbGUoeSwiZyIsIm1pbm9ybGF5ZXIiKSxiPWMuZW5zdXJlU2luZ2xlKHksImciLCJtYWpvcmxheWVyIiksXz1jLmVuc3VyZVNpbmdsZSh5LCJnIiwiYm91bmRhcnlsYXllciIpLHc9Yy5lbnN1cmVTaW5nbGUoeSwiZyIsImxhYmVsbGF5ZXIiKTt5LnN0eWxlKCJvcGFjaXR5IixsLm9wYWNpdHkpLHAodSxoLGIsZiwiYSIsZi5fZ3JpZGxpbmVzKSxwKHUsaCxiLGcsImIiLGcuX2dyaWRsaW5lcykscCh1LGgseCxmLCJhIixmLl9taW5vcmdyaWRsaW5lcykscCh1LGgseCxnLCJiIixnLl9taW5vcmdyaWRsaW5lcykscCh1LGgsXyxmLCJhLWJvdW5kYXJ5IixmLl9ib3VuZGFyeWxpbmVzKSxwKHUsaCxfLGcsImItYm91bmRhcnkiLGcuX2JvdW5kYXJ5bGluZXMpLGZ1bmN0aW9uKHQsZSxyLG4saSxhLG8sbCl7dmFyIHUsaCxmLHA7dT0uNSooci5hWzBdK3IuYVtyLmEubGVuZ3RoLTFdKSxoPXIuYlswXSxmPXIuYWIyeHkodSxoLCEwKSxwPXIuZHh5ZGFfcm91Z2godSxoKSx2b2lkIDA9PT1vLmFuZ2xlJiZjLmV4dGVuZEZsYXQobyxzKHIsaSxhLGYsci5keHlkYl9yb3VnaCh1LGgpKSk7dih0LGUscixuLGYscCxyLmFheGlzLGksYSxvLCJhLXRpdGxlIiksdT1yLmFbMF0saD0uNSooci5iWzBdK3IuYltyLmIubGVuZ3RoLTFdKSxmPXIuYWIyeHkodSxoLCEwKSxwPXIuZHh5ZGJfcm91Z2godSxoKSx2b2lkIDA9PT1sLmFuZ2xlJiZjLmV4dGVuZEZsYXQobCxzKHIsaSxhLGYsci5keHlkYV9yb3VnaCh1LGgpKSk7dih0LGUscixuLGYscCxyLmJheGlzLGksYSxsLCJiLXRpdGxlIil9KHQsdyxsLGksdSxoLGQodCx1LGgsbCxpLHcsZi5fbGFiZWxzLCJhLWxhYmVsIiksZCh0LHUsaCxsLGksdyxnLl9sYWJlbHMsImItbGFiZWwiKSksZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgcyxsLHUsaCxmPXIuc2VsZWN0KCIjIit0Ll9jbGlwUGF0aElkKTtmLnNpemUoKXx8KGY9ci5hcHBlbmQoImNsaXBQYXRoIikuY2xhc3NlZCgiY2FycGV0Y2xpcCIsITApKTt2YXIgcD1jLmVuc3VyZVNpbmdsZShmLCJwYXRoIiwiY2FycGV0Ym91bmRhcnkiKSxkPWUuY2xpcHNlZ21lbnRzLGc9W107Zm9yKGg9MDtoPGQubGVuZ3RoO2grKylzPWRbaF0sbD1hKFtdLHMueCxuLmMycCksdT1hKFtdLHMueSxpLmMycCksZy5wdXNoKG8obCx1LHMuYmljdWJpYykpO3ZhciBtPSJNIitnLmpvaW4oIkwiKSsiWiI7Zi5hdHRyKCJpZCIsdC5fY2xpcFBhdGhJZCkscC5hdHRyKCJkIixtKX0obCxpLG0sdSxoKX1mdW5jdGlvbiBwKHQsZSxyLGkscyxsKXt2YXIgYz0iY29uc3QtIitzKyItbGluZXMiLHU9ci5zZWxlY3RBbGwoIi4iK2MpLmRhdGEobCk7dS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoYywhMCkuc3R5bGUoInZlY3Rvci1lZmZlY3QiLCJub24tc2NhbGluZy1zdHJva2UiKSx1LmVhY2goZnVuY3Rpb24ocil7dmFyIGk9cixzPWkueCxsPWkueSxjPWEoW10scyx0LmMycCksdT1hKFtdLGwsZS5jMnApLGg9Ik0iK28oYyx1LGkuc21vb3RoaW5nKTtuLnNlbGVjdCh0aGlzKS5hdHRyKCJkIixoKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixpLndpZHRoKS5zdHlsZSgic3Ryb2tlIixpLmNvbG9yKS5zdHlsZSgiZmlsbCIsIm5vbmUiKX0pLHUuZXhpdCgpLnJlbW92ZSgpfWZ1bmN0aW9uIGQodCxlLHIsYSxvLGMsdSxoKXt2YXIgZj1jLnNlbGVjdEFsbCgidGV4dC4iK2gpLmRhdGEodSk7Zi5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmNsYXNzZWQoaCwhMCk7dmFyIHA9MCxkPXt9O3JldHVybiBmLmVhY2goZnVuY3Rpb24obyxjKXt2YXIgdTtpZigiYXV0byI9PT1vLmF4aXMudGlja2FuZ2xlKXU9cyhhLGUscixvLnh5LG8uZHh5KTtlbHNle3ZhciBoPShvLmF4aXMudGlja2FuZ2xlKzE4MCkqTWF0aC5QSS8xODA7dT1zKGEsZSxyLG8ueHksW01hdGguY29zKGgpLE1hdGguc2luKGgpXSl9Y3x8KGQ9e2FuZ2xlOnUuYW5nbGUsZmxpcDp1LmZsaXB9KTt2YXIgZj0oby5lbmRBbmNob3I/LTE6MSkqdS5mbGlwLGc9bi5zZWxlY3QodGhpcykuYXR0cih7InRleHQtYW5jaG9yIjpmPjA/InN0YXJ0IjoiZW5kIiwiZGF0YS1ub3RleCI6MX0pLmNhbGwoaS5mb250LG8uZm9udCkudGV4dChvLnRleHQpLmNhbGwobC5jb252ZXJ0VG9Uc3BhbnMsdCksbT1pLmJCb3godGhpcyk7Zy5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit1LnBbMF0rIiwiK3UucFsxXSsiKSByb3RhdGUoIit1LmFuZ2xlKyIpdHJhbnNsYXRlKCIrby5heGlzLmxhYmVscGFkZGluZypmKyIsIisuMyptLmhlaWdodCsiKSIpLHA9TWF0aC5tYXgocCxtLndpZHRoK28uYXhpcy5sYWJlbHBhZGRpbmcpfSksZi5leGl0KCkucmVtb3ZlKCksZC5tYXhFeHRlbnQ9cCxkfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpKXt2YXIgYT1oKHIpO2kuc2VsZWN0QWxsKCJnLnRyYWNlIikuZWFjaChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpLmF0dHIoImNsYXNzIikuc3BsaXQoImNhcnBldCIpWzFdLnNwbGl0KC9ccy8pWzBdO2FbdF18fG4uc2VsZWN0KHRoaXMpLnJlbW92ZSgpfSk7Zm9yKHZhciBvPTA7bzxyLmxlbmd0aDtvKyspZih0LGUscltvXSxpKX07dmFyIGc9dS5MSU5FX1NQQUNJTkcsbT0oMS11Lk1JRF9TSElGVCkvZysxO2Z1bmN0aW9uIHYodCxlLHIsYSxvLGMsdSxoLGYscCxkKXt2YXIgdj1bXTt1LnRpdGxlJiZ2LnB1c2godS50aXRsZSk7dmFyIHk9ZS5zZWxlY3RBbGwoInRleHQuIitkKS5kYXRhKHYpLHg9cC5tYXhFeHRlbnQ7eS5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmNsYXNzZWQoZCwhMCkseS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9cyhyLGgsZixvLGMpOy0xPT09WyJzdGFydCIsImJvdGgiXS5pbmRleE9mKHUuc2hvd3RpY2tsYWJlbHMpJiYoeD0wKTt2YXIgYT11LnRpdGxlZm9udC5zaXplO3grPWErdS50aXRsZW9mZnNldDt2YXIgZD0ocC5hbmdsZSsocC5mbGlwPDA/MTgwOjApLWUuYW5nbGUrNDUwKSUzNjAsdj1kPjkwJiZkPDI3MCx5PW4uc2VsZWN0KHRoaXMpO3kudGV4dCh1LnRpdGxlfHwiIikuY2FsbChsLmNvbnZlcnRUb1RzcGFucyx0KSx2JiYoeD0oLWwubGluZUNvdW50KHkpK20pKmcqYS14KSx5LmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2UucFswXSsiLCIrZS5wWzFdKyIpIHJvdGF0ZSgiK2UuYW5nbGUrIikgdHJhbnNsYXRlKDAsIit4KyIpIikuY2xhc3NlZCgidXNlci1zZWxlY3Qtbm9uZSIsITApLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuY2FsbChpLmZvbnQsdS50aXRsZWZvbnQpfSkseS5leGl0KCkucmVtb3ZlKCl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NTgzLCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50Ijo2NTYsIi4uLy4uL2xpYiI6Njg0LCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjcwOCwiLi4vLi4vcGxvdHMvZ2V0X2RhdGEiOjc2OCwiLi9tYWtlcGF0aCI6ODc1LCIuL21hcF8xZF9hcnJheSI6ODc2LCIuL29yaWVudF90ZXh0Ijo4NzcsZDM6MTQ3fV0sODc5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vY29uc3RhbnRzIiksaT10KCIuLi8uLi9saWIvc2VhcmNoIikuZmluZEJpbixhPXQoIi4vY29tcHV0ZV9jb250cm9sX3BvaW50cyIpLG89dCgiLi9jcmVhdGVfc3BsaW5lX2V2YWx1YXRvciIpLHM9dCgiLi9jcmVhdGVfaV9kZXJpdmF0aXZlX2V2YWx1YXRvciIpLGw9dCgiLi9jcmVhdGVfal9kZXJpdmF0aXZlX2V2YWx1YXRvciIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10Ll9hLHI9dC5fYixjPWUubGVuZ3RoLHU9ci5sZW5ndGgsaD10LmFheGlzLGY9dC5iYXhpcyxwPWVbMF0sZD1lW2MtMV0sZz1yWzBdLG09clt1LTFdLHY9ZVtlLmxlbmd0aC0xXS1lWzBdLHk9cltyLmxlbmd0aC0xXS1yWzBdLHg9dipuLlJFTEFUSVZFX0NVTExfVE9MRVJBTkNFLGI9eSpuLlJFTEFUSVZFX0NVTExfVE9MRVJBTkNFO3AtPXgsZCs9eCxnLT1iLG0rPWIsdC5pc1Zpc2libGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD5wJiZ0PGQmJmU+ZyYmZTxtfSx0LmlzT2NjbHVkZWQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdDxwfHx0PmR8fGU8Z3x8ZT5tfSx0LnNldFNjYWxlPWZ1bmN0aW9uKCl7dmFyIGU9dC5feCxyPXQuX3ksbj1hKHQuX3hjdHJsLHQuX3ljdHJsLGUscixoLnNtb290aGluZyxmLnNtb290aGluZyk7dC5feGN0cmw9blswXSx0Ll95Y3RybD1uWzFdLHQuZXZhbHh5PW8oW3QuX3hjdHJsLHQuX3ljdHJsXSxjLHUsaC5zbW9vdGhpbmcsZi5zbW9vdGhpbmcpLHQuZHh5ZGk9cyhbdC5feGN0cmwsdC5feWN0cmxdLGguc21vb3RoaW5nLGYuc21vb3RoaW5nKSx0LmR4eWRqPWwoW3QuX3hjdHJsLHQuX3ljdHJsXSxoLnNtb290aGluZyxmLnNtb290aGluZyl9LHQuaTJhPWZ1bmN0aW9uKHQpe3ZhciByPU1hdGgubWF4KDAsTWF0aC5mbG9vcih0WzBdKSxjLTIpLG49dFswXS1yO3JldHVybigxLW4pKmVbcl0rbiplW3IrMV19LHQuajJiPWZ1bmN0aW9uKHQpe3ZhciBlPU1hdGgubWF4KDAsTWF0aC5mbG9vcih0WzFdKSxjLTIpLG49dFsxXS1lO3JldHVybigxLW4pKnJbZV0rbipyW2UrMV19LHQuaWoyYWI9ZnVuY3Rpb24oZSl7cmV0dXJuW3QuaTJhKGVbMF0pLHQuajJiKGVbMV0pXX0sdC5hMmk9ZnVuY3Rpb24odCl7dmFyIHI9TWF0aC5tYXgoMCxNYXRoLm1pbihpKHQsZSksYy0yKSksbj1lW3JdLGE9ZVtyKzFdO3JldHVybiBNYXRoLm1heCgwLE1hdGgubWluKGMtMSxyKyh0LW4pLyhhLW4pKSl9LHQuYjJqPWZ1bmN0aW9uKHQpe3ZhciBlPU1hdGgubWF4KDAsTWF0aC5taW4oaSh0LHIpLHUtMikpLG49cltlXSxhPXJbZSsxXTtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1pbih1LTEsZSsodC1uKS8oYS1uKSkpfSx0LmFiMmlqPWZ1bmN0aW9uKGUpe3JldHVyblt0LmEyaShlWzBdKSx0LmIyaihlWzFdKV19LHQuaTJjPWZ1bmN0aW9uKGUscil7cmV0dXJuIHQuZXZhbHh5KFtdLGUscil9LHQuYWIyeHk9ZnVuY3Rpb24obixpLGEpe2lmKCFhJiYobjxlWzBdfHxuPmVbYy0xXXxpPHJbMF18fGk+clt1LTFdKSlyZXR1cm5bITEsITFdO3ZhciBvPXQuYTJpKG4pLHM9dC5iMmooaSksbD10LmV2YWx4eShbXSxvLHMpO2lmKGEpe3ZhciBoLGYscCxkLGc9MCxtPTAsdj1bXTtuPGVbMF0/KGg9MCxmPTAsZz0obi1lWzBdKS8oZVsxXS1lWzBdKSk6bj5lW2MtMV0/KGg9Yy0yLGY9MSxnPShuLWVbYy0xXSkvKGVbYy0xXS1lW2MtMl0pKTpmPW8tKGg9TWF0aC5tYXgoMCxNYXRoLm1pbihjLTIsTWF0aC5mbG9vcihvKSkpKSxpPHJbMF0/KHA9MCxkPTAsbT0oaS1yWzBdKS8oclsxXS1yWzBdKSk6aT5yW3UtMV0/KHA9dS0yLGQ9MSxtPShpLXJbdS0xXSkvKHJbdS0xXS1yW3UtMl0pKTpkPXMtKHA9TWF0aC5tYXgoMCxNYXRoLm1pbih1LTIsTWF0aC5mbG9vcihzKSkpKSxnJiYodC5keHlkaSh2LGgscCxmLGQpLGxbMF0rPXZbMF0qZyxsWzFdKz12WzFdKmcpLG0mJih0LmR4eWRqKHYsaCxwLGYsZCksbFswXSs9dlswXSptLGxbMV0rPXZbMV0qbSl9cmV0dXJuIGx9LHQuYzJwPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm5bZS5jMnAodFswXSksci5jMnAodFsxXSldfSx0LnAyeD1mdW5jdGlvbih0LGUscil7cmV0dXJuW2UucDJjKHRbMF0pLHIucDJjKHRbMV0pXX0sdC5kYWRpPWZ1bmN0aW9uKHQpe3ZhciByPU1hdGgubWF4KDAsTWF0aC5taW4oZS5sZW5ndGgtMix0KSk7cmV0dXJuIGVbcisxXS1lW3JdfSx0LmRiZGo9ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5tYXgoMCxNYXRoLm1pbihyLmxlbmd0aC0yLHQpKTtyZXR1cm4gcltlKzFdLXJbZV19LHQuZHh5ZGE9ZnVuY3Rpb24oZSxyLG4saSl7dmFyIGE9dC5keHlkaShudWxsLGUscixuLGkpLG89dC5kYWRpKGUsbik7cmV0dXJuW2FbMF0vbyxhWzFdL29dfSx0LmR4eWRiPWZ1bmN0aW9uKGUscixuLGkpe3ZhciBhPXQuZHh5ZGoobnVsbCxlLHIsbixpKSxvPXQuZGJkaihyLGkpO3JldHVyblthWzBdL28sYVsxXS9vXX0sdC5keHlkYV9yb3VnaD1mdW5jdGlvbihlLHIsbil7dmFyIGk9dioobnx8LjEpLGE9dC5hYjJ4eShlK2ksciwhMCksbz10LmFiMnh5KGUtaSxyLCEwKTtyZXR1cm5bLjUqKGFbMF0tb1swXSkvaSwuNSooYVsxXS1vWzFdKS9pXX0sdC5keHlkYl9yb3VnaD1mdW5jdGlvbihlLHIsbil7dmFyIGk9eSoobnx8LjEpLGE9dC5hYjJ4eShlLHIraSwhMCksbz10LmFiMnh5KGUsci1pLCEwKTtyZXR1cm5bLjUqKGFbMF0tb1swXSkvaSwuNSooYVsxXS1vWzFdKS9pXX0sdC5kcGR4PWZ1bmN0aW9uKHQpe3JldHVybiB0Ll9tfSx0LmRwZHk9ZnVuY3Rpb24odCl7cmV0dXJuIHQuX219fX0seyIuLi8uLi9saWIvc2VhcmNoIjo3MDMsIi4vY29tcHV0ZV9jb250cm9sX3BvaW50cyI6ODY3LCIuL2NvbnN0YW50cyI6ODY4LCIuL2NyZWF0ZV9pX2Rlcml2YXRpdmVfZXZhbHVhdG9yIjo4NjksIi4vY3JlYXRlX2pfZGVyaXZhdGl2ZV9ldmFsdWF0b3IiOjg3MCwiLi9jcmVhdGVfc3BsaW5lX2V2YWx1YXRvciI6ODcxfV0sODgwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGksYSxvLHM9W10sbD1bXSxjPXRbMF0ubGVuZ3RoLHU9dC5sZW5ndGg7ZnVuY3Rpb24gaChlLHIpe3ZhciBuLGk9MCxhPTA7cmV0dXJuIGU+MCYmdm9pZCAwIT09KG49dFtyXVtlLTFdKSYmKGErKyxpKz1uKSxlPGMtMSYmdm9pZCAwIT09KG49dFtyXVtlKzFdKSYmKGErKyxpKz1uKSxyPjAmJnZvaWQgMCE9PShuPXRbci0xXVtlXSkmJihhKyssaSs9bikscjx1LTEmJnZvaWQgMCE9PShuPXRbcisxXVtlXSkmJihhKyssaSs9biksaS9NYXRoLm1heCgxLGEpfXZhciBmLHAsZCxnLG0sdix5LHgsYixfLHcsaz0wO2ZvcihpPTA7aTxjO2krKylmb3IoYT0wO2E8dTthKyspdm9pZCAwPT09dFthXVtpXSYmKHMucHVzaChpKSxsLnB1c2goYSksdFthXVtpXT1oKGksYSkpLGs9TWF0aC5tYXgoayxNYXRoLmFicyh0W2FdW2ldKSk7aWYoIXMubGVuZ3RoKXJldHVybiB0O3ZhciBNPTAsQT0wLFQ9cy5sZW5ndGg7ZG97Zm9yKE09MCxvPTA7bzxUO28rKyl7aT1zW29dLGE9bFtvXTt2YXIgUyxFLEMsTCx6LFAsST0wLE89MDswPT09aT8oQz1lW3o9TWF0aC5taW4oYy0xLDIpXSxMPWVbMV0sUz10W2FdW3pdLE8rPShFPXRbYV1bMV0pKyhFLVMpKihlWzBdLUwpLyhMLUMpLEkrKyk6aT09PWMtMSYmKEM9ZVt6PU1hdGgubWF4KDAsYy0zKV0sTD1lW2MtMl0sUz10W2FdW3pdLE8rPShFPXRbYV1bYy0yXSkrKEUtUykqKGVbYy0xXS1MKS8oTC1DKSxJKyspLCgwPT09aXx8aT09PWMtMSkmJmE+MCYmYTx1LTEmJihmPXJbYSsxXS1yW2FdLE8rPSgocD1yW2FdLXJbYS0xXSkqdFthKzFdW2ldK2YqdFthLTFdW2ldKS8ocCtmKSxJKyspLDA9PT1hPyhDPXJbUD1NYXRoLm1pbih1LTEsMildLEw9clsxXSxTPXRbUF1baV0sTys9KEU9dFsxXVtpXSkrKEUtUykqKHJbMF0tTCkvKEwtQyksSSsrKTphPT09dS0xJiYoQz1yW1A9TWF0aC5tYXgoMCx1LTMpXSxMPXJbdS0yXSxTPXRbUF1baV0sTys9KEU9dFt1LTJdW2ldKSsoRS1TKSooclt1LTFdLUwpLyhMLUMpLEkrKyksKDA9PT1hfHxhPT09dS0xKSYmaT4wJiZpPGMtMSYmKGY9ZVtpKzFdLWVbaV0sTys9KChwPWVbaV0tZVtpLTFdKSp0W2FdW2krMV0rZip0W2FdW2ktMV0pLyhwK2YpLEkrKyksST9PLz1JOihkPWVbaSsxXS1lW2ldLGc9ZVtpXS1lW2ktMV0seD0obT1yW2ErMV0tclthXSkqKHY9clthXS1yW2EtMV0pKihtK3YpLE89KCh5PWQqZyooZCtnKSkqKHYqdFthKzFdW2ldK20qdFthLTFdW2ldKSt4KihnKnRbYV1baSsxXStkKnRbYV1baS0xXSkpLyh4KihnK2QpK3kqKHYrbSkpKSxNKz0oXz0oYj1PLXRbYV1baV0pL2spKl8sdz1JPzA6Ljg1LHRbYV1baV0rPWIqKDErdyl9TT1NYXRoLnNxcnQoTSl9d2hpbGUoQSsrPDEwMCYmTT4xZS01KTtyZXR1cm4gbi5sb2coIlNtb290aGVyIGNvbnZlcmdlZCB0byIsTSwiYWZ0ZXIiLEEsIml0ZXJhdGlvbnMiKSx0fX0seyIuLi8uLi9saWIiOjY4NH1dLDg4MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKS5pc0FycmF5MUQ7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT1yKCJ4IiksYT1pJiZpLmxlbmd0aCxvPXIoInkiKSxzPW8mJm8ubGVuZ3RoO2lmKCFhJiYhcylyZXR1cm4hMTtpZihlLl9jaGVhdGVyPSFpLGEmJiFuKGkpfHxzJiYhbihvKSllLl9sZW5ndGg9bnVsbDtlbHNle3ZhciBsPWE/aS5sZW5ndGg6MS8wO3MmJihsPU1hdGgubWluKGwsby5sZW5ndGgpKSxlLmEmJmUuYS5sZW5ndGgmJihsPU1hdGgubWluKGwsZS5hLmxlbmd0aCkpLGUuYiYmZS5iLmxlbmd0aCYmKGw9TWF0aC5taW4obCxlLmIubGVuZ3RoKSksZS5fbGVuZ3RoPWx9cmV0dXJuITB9fSx7Ii4uLy4uL2xpYiI6Njg0fV0sODgyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXJnZW8vYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsbD1uLm1hcmtlci5saW5lO2UuZXhwb3J0cz1zKHtsb2NhdGlvbnM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sbG9jYXRpb25tb2RlOm4ubG9jYXRpb25tb2RlLHo6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sdGV4dDpzKHt9LG4udGV4dCx7fSksbWFya2VyOntsaW5lOntjb2xvcjpsLmNvbG9yLHdpZHRoOnMoe30sbC53aWR0aCx7ZGZsdDoxfSksZWRpdFR5cGU6ImNhbGMifSxvcGFjaXR5Ont2YWxUeXBlOiJudW1iZXIiLGFycmF5T2s6ITAsbWluOjAsbWF4OjEsZGZsdDoxLGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJjYWxjIn0sc2VsZWN0ZWQ6e21hcmtlcjp7b3BhY2l0eTpuLnNlbGVjdGVkLm1hcmtlci5vcGFjaXR5LGVkaXRUeXBlOiJwbG90In0sZWRpdFR5cGU6InBsb3QifSx1bnNlbGVjdGVkOnttYXJrZXI6e29wYWNpdHk6bi51bnNlbGVjdGVkLm1hcmtlci5vcGFjaXR5LGVkaXRUeXBlOiJwbG90In0sZWRpdFR5cGU6InBsb3QifSxob3ZlcmluZm86cyh7fSxvLmhvdmVyaW5mbyx7ZWRpdFR5cGU6ImNhbGMiLGZsYWdzOlsibG9jYXRpb24iLCJ6IiwidGV4dCIsIm5hbWUiXX0pfSxpKCIiLHtjTGV0dGVyOiJ6IixlZGl0VHlwZU92ZXJyaWRlOiJjYWxjIn0pLHtjb2xvcmJhcjphfSl9LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzIjo1NTksIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo1NjUsIi4uLy4uL2xpYi9leHRlbmQiOjY3MywiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6NzI5LCIuLi9zY2F0dGVyZ2VvL2F0dHJpYnV0ZXMiOjEwNTN9XSw4ODM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU0sYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyIpLG89dCgiLi4vc2NhdHRlci9hcnJheXNfdG9fY2FsY2RhdGEiKSxzPXQoIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb24iKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9ZS5fbGVuZ3RoLGw9bmV3IEFycmF5KHIpLGM9MDtjPHI7YysrKXt2YXIgdT1sW2NdPXt9LGg9ZS5sb2NhdGlvbnNbY10sZj1lLnpbY107dS5sb2M9InN0cmluZyI9PXR5cGVvZiBoP2g6bnVsbCx1Lno9bihmKT9mOml9cmV0dXJuIG8obCxlKSxhKGUsZS56LCIiLCJ6IikscyhsLGUpLGx9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIjo1NjYsIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjY2MSwiLi4vc2NhdHRlci9hcnJheXNfdG9fY2FsY2RhdGEiOjEwMTQsIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb24iOjEwMTcsImZhc3QtaXNudW1lcmljIjoyMTR9XSw4ODQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiKSxhPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvKXtmdW5jdGlvbiBzKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxhLHIsaSl9dmFyIGw9cygibG9jYXRpb25zIiksYz1zKCJ6Iik7bCYmbC5sZW5ndGgmJm4uaXNBcnJheU9yVHlwZWRBcnJheShjKSYmYy5sZW5ndGg/KGUuX2xlbmd0aD1NYXRoLm1pbihsLmxlbmd0aCxjLmxlbmd0aCkscygibG9jYXRpb25tb2RlIikscygidGV4dCIpLHMoIm1hcmtlci5saW5lLmNvbG9yIikscygibWFya2VyLmxpbmUud2lkdGgiKSxzKCJtYXJrZXIub3BhY2l0eSIpLGkodCxlLG8scyx7cHJlZml4OiIiLGNMZXR0ZXI6InoifSksbi5jb2VyY2VTZWxlY3Rpb25NYXJrZXJPcGFjaXR5KGUscykpOmUudmlzaWJsZT0hMX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIjo1NjgsIi4uLy4uL2xpYiI6Njg0LCIuL2F0dHJpYnV0ZXMiOjg4Mn1dLDg4NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5sb2NhdGlvbj1lLmxvY2F0aW9uLHQuej1lLnosdH19LHt9XSw4ODY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxpPXQoIi4vYXR0cmlidXRlcyIpLGE9dCgiLi4vc2NhdHRlci9maWxsX2hvdmVyX3RleHQiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBvLHMsbCxjLHU9dC5jZCxoPXVbMF0udHJhY2UsZj10LnN1YnBsb3Q7Zm9yKHM9MDtzPHUubGVuZ3RoO3MrKylpZihjPSExLChvPXVbc10pLl9wb2x5Z29ucyl7Zm9yKGw9MDtsPG8uX3BvbHlnb25zLmxlbmd0aDtsKyspby5fcG9seWdvbnNbbF0uY29udGFpbnMoW2Uscl0pJiYoYz0hYyksby5fcG9seWdvbnNbbF0uY29udGFpbnMoW2UrMzYwLHJdKSYmKGM9IWMpO2lmKGMpYnJlYWt9aWYoYyYmbylyZXR1cm4gdC54MD10LngxPXQueGEuYzJwKG8uY3QpLHQueTA9dC55MT10LnlhLmMycChvLmN0KSx0LmluZGV4PW8uaW5kZXgsdC5sb2NhdGlvbj1vLmxvYyx0Lno9by56LGZ1bmN0aW9uKHQsZSxyLG8pe3ZhciBzPXIuaGl8fGUuaG92ZXJpbmZvLGw9ImFsbCI9PT1zP2kuaG92ZXJpbmZvLmZsYWdzOnMuc3BsaXQoIisiKSxjPS0xIT09bC5pbmRleE9mKCJuYW1lIiksdT0tMSE9PWwuaW5kZXhPZigibG9jYXRpb24iKSxoPS0xIT09bC5pbmRleE9mKCJ6IiksZj0tMSE9PWwuaW5kZXhPZigidGV4dCIpLHA9W107IWMmJnU/dC5uYW1lT3ZlcnJpZGU9ci5sb2M6KGMmJih0Lm5hbWVPdmVycmlkZT1lLm5hbWUpLHUmJnAucHVzaChyLmxvYykpO2gmJnAucHVzaCgoZD1yLnosbi50aWNrVGV4dChvLG8uYzJsKGQpLCJob3ZlciIpLnRleHQpKTt2YXIgZDtmJiZhKHIsZSxwKTt0LmV4dHJhVGV4dD1wLmpvaW4oIjxicj4iKX0odCxoLG8sZi5tb2NrQXhpcyksW3RdfX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzMyLCIuLi9zY2F0dGVyL2ZpbGxfaG92ZXJfdGV4dCI6MTAyMiwiLi9hdHRyaWJ1dGVzIjo4ODJ9XSw4ODc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoIi4vYXR0cmlidXRlcyIpLG4uc3VwcGx5RGVmYXVsdHM9dCgiLi9kZWZhdWx0cyIpLG4uY29sb3JiYXI9dCgiLi4vaGVhdG1hcC9jb2xvcmJhciIpLG4uY2FsYz10KCIuL2NhbGMiKSxuLnBsb3Q9dCgiLi9wbG90Iiksbi5zdHlsZT10KCIuL3N0eWxlIikuc3R5bGUsbi5zdHlsZU9uU2VsZWN0PXQoIi4vc3R5bGUiKS5zdHlsZU9uU2VsZWN0LG4uaG92ZXJQb2ludHM9dCgiLi9ob3ZlciIpLG4uZXZlbnREYXRhPXQoIi4vZXZlbnRfZGF0YSIpLG4uc2VsZWN0UG9pbnRzPXQoIi4vc2VsZWN0Iiksbi5tb2R1bGVUeXBlPSJ0cmFjZSIsbi5uYW1lPSJjaG9yb3BsZXRoIixuLmJhc2VQbG90TW9kdWxlPXQoIi4uLy4uL3Bsb3RzL2dlbyIpLG4uY2F0ZWdvcmllcz1bImdlbyIsIm5vT3BhY2l0eSJdLG4ubWV0YT17fSxlLmV4cG9ydHM9bn0seyIuLi8uLi9wbG90cy9nZW8iOjc2MiwiLi4vaGVhdG1hcC9jb2xvcmJhciI6OTI4LCIuL2F0dHJpYnV0ZXMiOjg4MiwiLi9jYWxjIjo4ODMsIi4vZGVmYXVsdHMiOjg4NCwiLi9ldmVudF9kYXRhIjo4ODUsIi4vaG92ZXIiOjg4NiwiLi9wbG90Ijo4ODgsIi4vc2VsZWN0Ijo4ODksIi4vc3R5bGUiOjg5MH1dLDg4ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9saWIvcG9seWdvbiIpLG89dCgiLi4vLi4vbGliL3RvcG9qc29uX3V0aWxzIikuZ2V0VG9wb2pzb25GZWF0dXJlcyxzPXQoIi4uLy4uL2xpYi9nZW9fbG9jYXRpb25fdXRpbHMiKS5sb2NhdGlvblRvRmVhdHVyZSxsPXQoIi4vc3R5bGUiKS5zdHlsZTtmdW5jdGlvbiBjKHQsZSl7Zm9yKHZhciByPXRbMF0udHJhY2Usbj10Lmxlbmd0aCxpPW8ocixlKSxhPTA7YTxuO2ErKyl7dmFyIGw9dFthXSxjPXMoci5sb2NhdGlvbm1vZGUsbC5sb2MsaSk7Yz8obC5nZW9qc29uPWMsbC5jdD1jLnByb3BlcnRpZXMuY3QsbC5pbmRleD1hLGwuX3BvbHlnb25zPXUoYykpOmwuZ2VvanNvbj1udWxsfX1mdW5jdGlvbiB1KHQpe3ZhciBlLHIsbixpLG89dC5nZW9tZXRyeSxzPW8uY29vcmRpbmF0ZXMsbD10LmlkLGM9W107ZnVuY3Rpb24gdSh0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoLTE7ZSsrKWlmKHRbZV1bMF0+MCYmdFtlKzFdWzBdPDApcmV0dXJuIGU7cmV0dXJuIG51bGx9c3dpdGNoKGU9IlJVUyI9PT1sfHwiRkpJIj09PWw/ZnVuY3Rpb24odCl7dmFyIGU7aWYobnVsbD09PXUodCkpZT10O2Vsc2UgZm9yKGU9bmV3IEFycmF5KHQubGVuZ3RoKSxpPTA7aTx0Lmxlbmd0aDtpKyspZVtpXT1bdFtpXVswXTwwP3RbaV1bMF0rMzYwOnRbaV1bMF0sdFtpXVsxXV07Yy5wdXNoKGEudGVzdGVyKGUpKX06IkFUQSI9PT1sP2Z1bmN0aW9uKHQpe3ZhciBlPXUodCk7aWYobnVsbD09PWUpcmV0dXJuIGMucHVzaChhLnRlc3Rlcih0KSk7dmFyIHI9bmV3IEFycmF5KHQubGVuZ3RoKzEpLG49MDtmb3IoaT0wO2k8dC5sZW5ndGg7aSsrKWk+ZT9yW24rK109W3RbaV1bMF0rMzYwLHRbaV1bMV1dOmk9PT1lPyhyW24rK109dFtpXSxyW24rK109W3RbaV1bMF0sLTkwXSk6cltuKytdPXRbaV07dmFyIG89YS50ZXN0ZXIocik7by5wdHMucG9wKCksYy5wdXNoKG8pfTpmdW5jdGlvbih0KXtjLnB1c2goYS50ZXN0ZXIodCkpfSxvLnR5cGUpe2Nhc2UiTXVsdGlQb2x5Z29uIjpmb3Iocj0wO3I8cy5sZW5ndGg7cisrKWZvcihuPTA7bjxzW3JdLmxlbmd0aDtuKyspZShzW3JdW25dKTticmVhaztjYXNlIlBvbHlnb24iOmZvcihyPTA7cjxzLmxlbmd0aDtyKyspZShzW3JdKX1yZXR1cm4gY31lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgYT0wO2E8ci5sZW5ndGg7YSsrKWMoclthXSxlLnRvcG9qc29uKTt2YXIgbz1lLmxheWVycy5iYWNrcGxvdC5zZWxlY3QoIi5jaG9yb3BsZXRobGF5ZXIiKS5zZWxlY3RBbGwoImcudHJhY2UuY2hvcm9wbGV0aCIpLmRhdGEocixmdW5jdGlvbih0KXtyZXR1cm4gdFswXS50cmFjZS51aWR9KTtvLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJ0cmFjZSBjaG9yb3BsZXRoIiksby5leGl0KCkucmVtb3ZlKCksby5lYWNoKGZ1bmN0aW9uKGUpe3ZhciByPShlWzBdLm5vZGUzPW4uc2VsZWN0KHRoaXMpKS5zZWxlY3RBbGwoInBhdGguY2hvcm9wbGV0aGxvY2F0aW9uIikuZGF0YShpLmlkZW50aXR5KTtyLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZCgiY2hvcm9wbGV0aGxvY2F0aW9uIiwhMCksci5leGl0KCkucmVtb3ZlKCksbCh0LGUpfSl9fSx7Ii4uLy4uL2xpYiI6Njg0LCIuLi8uLi9saWIvZ2VvX2xvY2F0aW9uX3V0aWxzIjo2NzYsIi4uLy4uL2xpYi9wb2x5Z29uIjo2OTYsIi4uLy4uL2xpYi90b3BvanNvbl91dGlscyI6NzExLCIuL3N0eWxlIjo4OTAsZDM6MTQ3fV0sODg5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxhLG8scz10LmNkLGw9dC54YXhpcyxjPXQueWF4aXMsdT1bXTtpZighMT09PWUpZm9yKHI9MDtyPHMubGVuZ3RoO3IrKylzW3JdLnNlbGVjdGVkPTA7ZWxzZSBmb3Iocj0wO3I8cy5sZW5ndGg7cisrKShpPShuPXNbcl0pLmN0KSYmKGE9bC5jMnAoaSksbz1jLmMycChpKSxlLmNvbnRhaW5zKFthLG9dKT8odS5wdXNoKHtwb2ludE51bWJlcjpyLGxvbjppWzBdLGxhdDppWzFdfSksbi5zZWxlY3RlZD0xKTpuLnNlbGVjdGVkPTApO3JldHVybiB1fX0se31dLDg5MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKTtmdW5jdGlvbiBzKHQsZSl7dmFyIHI9ZVswXS50cmFjZSxzPWVbMF0ubm9kZTMuc2VsZWN0QWxsKCIuY2hvcm9wbGV0aGxvY2F0aW9uIiksbD1yLm1hcmtlcnx8e30sYz1sLmxpbmV8fHt9LHU9by5tYWtlQ29sb3JTY2FsZUZ1bmMoby5leHRyYWN0U2NhbGUoci5jb2xvcnNjYWxlLHIuem1pbixyLnptYXgpKTtzLmVhY2goZnVuY3Rpb24odCl7bi5zZWxlY3QodGhpcykuYXR0cigiZmlsbCIsdSh0LnopKS5jYWxsKGkuc3Ryb2tlLHQubWxjfHxjLmNvbG9yKS5jYWxsKGEuZGFzaExpbmUsIiIsdC5tbHd8fGMud2lkdGh8fDApLnN0eWxlKCJvcGFjaXR5IixsLm9wYWNpdHkpfSksYS5zZWxlY3RlZFBvaW50U3R5bGUocyxyLHQpfWUuZXhwb3J0cz17c3R5bGU6ZnVuY3Rpb24odCxlKXtlJiZzKHQsZSl9LHN0eWxlT25TZWxlY3Q6ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLm5vZGUzLG49ZVswXS50cmFjZTtuLnNlbGVjdGVkcG9pbnRzP2Euc2VsZWN0ZWRQb2ludFN0eWxlKHIuc2VsZWN0QWxsKCIuY2hvcm9wbGV0aGxvY2F0aW9uIiksbix0KTpzKHQsZSl9fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo1NTgsIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSI6NTczLCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjU4MyxkMzoxNDd9XSw4OTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlcyIpLGE9dCgiLi4vbWVzaDNkL2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGw9e3g6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0seTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSx6Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHU6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sdjp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSx3Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHNpemVtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJzY2FsZWQiLCJhYnNvbHV0ZSJdLGVkaXRUeXBlOiJjYWxjIixkZmx0OiJzY2FsZWQifSxzaXplcmVmOnt2YWxUeXBlOiJudW1iZXIiLGVkaXRUeXBlOiJjYWxjIixtaW46MH0sYW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIixlZGl0VHlwZToiY2FsYyIsdmFsdWVzOlsidGlwIiwidGFpbCIsImNtIiwiY2VudGVyIl0sZGZsdDoiY20ifSx0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsYXJyYXlPazohMCxlZGl0VHlwZToiY2FsYyJ9fTtzKGwsbigiIix7Y29sb3JBdHRyOiJ1L3YvdyBub3JtIixzaG93U2NhbGVEZmx0OiEwLGVkaXRUeXBlT3ZlcnJpZGU6ImNhbGMifSkse2NvbG9yYmFyOml9KTtbIm9wYWNpdHkiLCJsaWdodHBvc2l0aW9uIiwibGlnaHRpbmciXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2xbdF09YVt0XX0pLGwuaG92ZXJpbmZvPXMoe30sby5ob3ZlcmluZm8se2VkaXRUeXBlOiJjYWxjIixmbGFnczpbIngiLCJ5IiwieiIsInUiLCJ2IiwidyIsIm5vcm0iLCJ0ZXh0IiwibmFtZSJdLGRmbHQ6IngreSt6K25vcm0rdGV4dCtuYW1lIn0pLGUuZXhwb3J0cz1sfSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlcyI6NTU5LCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NTY1LCIuLi8uLi9saWIvZXh0ZW5kIjo2NzMsIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjcyOSwiLi4vbWVzaDNkL2F0dHJpYnV0ZXMiOjk2NX1dLDg5MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1lLnUsaT1lLnYsYT1lLncsbz1NYXRoLm1pbihlLngubGVuZ3RoLGUueS5sZW5ndGgsZS56Lmxlbmd0aCxyLmxlbmd0aCxpLmxlbmd0aCxhLmxlbmd0aCkscz0tMS8wLGw9MS8wLGM9MDtjPG87YysrKXt2YXIgdT1yW2NdLGg9aVtjXSxmPWFbY10scD1NYXRoLnNxcnQodSp1K2gqaCtmKmYpO3M9TWF0aC5tYXgocyxwKSxsPU1hdGgubWluKGwscCl9ZS5fbGVuPW8sZS5fbm9ybU1heD1zLG4oZSxbbCxzXSwiIiwiYyIpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyI6NTY2fV0sODkzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImdsLWNvbmUzZCIpLGk9dCgiZ2wtY29uZTNkIikuY3JlYXRlQ29uZU1lc2gsYT10KCIuLi8uLi9saWIiKS5zaW1wbGVNYXAsbz10KCIuLi8uLi9saWIvZ2xfZm9ybWF0X2NvbG9yIikucGFyc2VDb2xvclNjYWxlLHM9dCgiLi4vLi4vcGxvdHMvZ2wzZC96aXAzIik7ZnVuY3Rpb24gbCh0LGUpe3RoaXMuc2NlbmU9dCx0aGlzLnVpZD1lLHRoaXMubWVzaD1udWxsLHRoaXMuZGF0YT1udWxsfXZhciBjPWwucHJvdG90eXBlO2MuaGFuZGxlUGljaz1mdW5jdGlvbih0KXtpZih0Lm9iamVjdD09PXRoaXMubWVzaCl7dmFyIGU9dC5pbmRleD10LmRhdGEuaW5kZXgscj10aGlzLmRhdGEueFtlXSxuPXRoaXMuZGF0YS55W2VdLGk9dGhpcy5kYXRhLnpbZV0sYT10aGlzLmRhdGEudVtlXSxvPXRoaXMuZGF0YS52W2VdLHM9dGhpcy5kYXRhLndbZV07dC50cmFjZUNvb3JkaW5hdGU9W3IsbixpLGEsbyxzLE1hdGguc3FydChhKmErbypvK3MqcyldO3ZhciBsPXRoaXMuZGF0YS50ZXh0O3JldHVybiBBcnJheS5pc0FycmF5KGwpJiZ2b2lkIDAhPT1sW2VdP3QudGV4dExhYmVsPWxbZV06bCYmKHQudGV4dExhYmVsPWwpLCEwfX07dmFyIHU9e3hheGlzOjAseWF4aXM6MSx6YXhpczoyfSxoPXt0aXA6MSx0YWlsOjAsY206LjI1LGNlbnRlcjouNX0sZj17dGlwOjEsdGFpbDoxLGNtOi43NSxjZW50ZXI6LjV9O2Z1bmN0aW9uIHAodCxlKXt2YXIgcj10LmZ1bGxTY2VuZUxheW91dCxpPXQuZGF0YVNjYWxlLGw9e307ZnVuY3Rpb24gYyh0LGUpe3ZhciBuPXJbZV0sbz1pW3VbZV1dO3JldHVybiBhKHQsZnVuY3Rpb24odCl7cmV0dXJuIG4uZDJsKHQpKm99KX1sLnZlY3RvcnM9cyhjKGUudSwieGF4aXMiKSxjKGUudiwieWF4aXMiKSxjKGUudywiemF4aXMiKSxlLl9sZW4pLGwucG9zaXRpb25zPXMoYyhlLngsInhheGlzIiksYyhlLnksInlheGlzIiksYyhlLnosInpheGlzIiksZS5fbGVuKSxsLmNvbG9ybWFwPW8oZS5jb2xvcnNjYWxlKSxsLnZlcnRleEludGVuc2l0eUJvdW5kcz1bZS5jbWluL2UuX25vcm1NYXgsZS5jbWF4L2UuX25vcm1NYXhdLGwuY29uZU9mZnNldD1oW2UuYW5jaG9yXSwic2NhbGVkIj09PWUuc2l6ZW1vZGU/bC5jb25lU2l6ZT1lLnNpemVyZWZ8fC41OmwuY29uZVNpemU9ZS5zaXplcmVmJiZlLl9ub3JtTWF4P2Uuc2l6ZXJlZi9lLl9ub3JtTWF4Oi41O3ZhciBwPW4obCksZD1lLmxpZ2h0cG9zaXRpb247cmV0dXJuIHAubGlnaHRQb3NpdGlvbj1bZC54LGQueSxkLnpdLHAuYW1iaWVudD1lLmxpZ2h0aW5nLmFtYmllbnQscC5kaWZmdXNlPWUubGlnaHRpbmcuZGlmZnVzZSxwLnNwZWN1bGFyPWUubGlnaHRpbmcuc3BlY3VsYXIscC5yb3VnaG5lc3M9ZS5saWdodGluZy5yb3VnaG5lc3MscC5mcmVzbmVsPWUubGlnaHRpbmcuZnJlc25lbCxwLm9wYWNpdHk9ZS5vcGFjaXR5LGUuX3BhZD1mW2UuYW5jaG9yXSpwLnZlY3RvclNjYWxlKnAuY29uZVNjYWxlKmUuX25vcm1NYXgscH1jLnVwZGF0ZT1mdW5jdGlvbih0KXt0aGlzLmRhdGE9dDt2YXIgZT1wKHRoaXMuc2NlbmUsdCk7dGhpcy5tZXNoLnVwZGF0ZShlKX0sYy5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMubWVzaCksdGhpcy5tZXNoLmRpc3Bvc2UoKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5nbHBsb3QuZ2wsbj1wKHQsZSksYT1pKHIsbiksbz1uZXcgbCh0LGUudWlkKTtyZXR1cm4gby5tZXNoPWEsby5kYXRhPWUsYS5fdHJhY2U9byx0LmdscGxvdC5hZGQoYSksb319LHsiLi4vLi4vbGliIjo2ODQsIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3IiOjY4MCwiLi4vLi4vcGxvdHMvZ2wzZC96aXAzIjo3ODUsImdsLWNvbmUzZCI6MjMxfV0sODk0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIiksYT10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyl7ZnVuY3Rpb24gcyhyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsYSxyLGkpfXZhciBsPXMoInUiKSxjPXMoInYiKSx1PXMoInciKSxoPXMoIngiKSxmPXMoInkiKSxwPXMoInoiKTtsJiZsLmxlbmd0aCYmYyYmYy5sZW5ndGgmJnUmJnUubGVuZ3RoJiZoJiZoLmxlbmd0aCYmZiYmZi5sZW5ndGgmJnAmJnAubGVuZ3RoPyhzKCJzaXplcmVmIikscygic2l6ZW1vZGUiKSxzKCJhbmNob3IiKSxzKCJsaWdodGluZy5hbWJpZW50IikscygibGlnaHRpbmcuZGlmZnVzZSIpLHMoImxpZ2h0aW5nLnNwZWN1bGFyIikscygibGlnaHRpbmcucm91Z2huZXNzIikscygibGlnaHRpbmcuZnJlc25lbCIpLHMoImxpZ2h0cG9zaXRpb24ueCIpLHMoImxpZ2h0cG9zaXRpb24ueSIpLHMoImxpZ2h0cG9zaXRpb24ueiIpLGkodCxlLG8scyx7cHJlZml4OiIiLGNMZXR0ZXI6ImMifSkscygidGV4dCIpLGUuX2xlbmd0aD1udWxsKTplLnZpc2libGU9ITF9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyI6NTY4LCIuLi8uLi9saWIiOjY4NCwiLi9hdHRyaWJ1dGVzIjo4OTF9XSw4OTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToiY29uZSIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvZ2wzZCIpLGNhdGVnb3JpZXM6WyJnbDNkIl0sYXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY29sb3JiYXI6e21pbjoiY21pbiIsbWF4OiJjbWF4In0sY2FsYzp0KCIuL2NhbGMiKSxwbG90OnQoIi4vY29udmVydCIpLG1ldGE6e319fSx7Ii4uLy4uL3Bsb3RzL2dsM2QiOjc3NCwiLi9hdHRyaWJ1dGVzIjo4OTEsIi4vY2FsYyI6ODkyLCIuL2NvbnZlcnQiOjg5MywiLi9kZWZhdWx0cyI6ODk0fV0sODk2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2hlYXRtYXAvYXR0cmlidXRlcyIpLGk9dCgiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlcyIpLmRhc2gsbD10KCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKSxjPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LHU9dCgiLi4vLi4vY29uc3RhbnRzL2ZpbHRlcl9vcHMiKSxoPXUuQ09NUEFSSVNPTl9PUFMyLGY9dS5JTlRFUlZBTF9PUFMscD1pLmxpbmU7ZS5leHBvcnRzPWMoe3o6bi56LHg6bi54LHgwOm4ueDAsZHg6bi5keCx5Om4ueSx5MDpuLnkwLGR5Om4uZHksdGV4dDpuLnRleHQsdHJhbnNwb3NlOm4udHJhbnNwb3NlLHh0eXBlOm4ueHR5cGUseXR5cGU6bi55dHlwZSx6aG92ZXJmb3JtYXQ6bi56aG92ZXJmb3JtYXQsY29ubmVjdGdhcHM6bi5jb25uZWN0Z2FwcyxmaWxsY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToiY2FsYyJ9LGF1dG9jb250b3VyOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIixpbXBsaWVkRWRpdHM6eyJjb250b3Vycy5zdGFydCI6dm9pZCAwLCJjb250b3Vycy5lbmQiOnZvaWQgMCwiY29udG91cnMuc2l6ZSI6dm9pZCAwfX0sbmNvbnRvdXJzOnt2YWxUeXBlOiJpbnRlZ2VyIixkZmx0OjE1LG1pbjoxLGVkaXRUeXBlOiJjYWxjIn0sY29udG91cnM6e3R5cGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImxldmVscyIsImNvbnN0cmFpbnQiXSxkZmx0OiJsZXZlbHMiLGVkaXRUeXBlOiJjYWxjIn0sc3RhcnQ6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDpudWxsLGVkaXRUeXBlOiJwbG90IixpbXBsaWVkRWRpdHM6eyJeYXV0b2NvbnRvdXIiOiExfX0sZW5kOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6bnVsbCxlZGl0VHlwZToicGxvdCIsaW1wbGllZEVkaXRzOnsiXmF1dG9jb250b3VyIjohMX19LHNpemU6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDpudWxsLG1pbjowLGVkaXRUeXBlOiJwbG90IixpbXBsaWVkRWRpdHM6eyJeYXV0b2NvbnRvdXIiOiExfX0sY29sb3Jpbmc6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImZpbGwiLCJoZWF0bWFwIiwibGluZXMiLCJub25lIl0sZGZsdDoiZmlsbCIsZWRpdFR5cGU6ImNhbGMifSxzaG93bGluZXM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6InBsb3QifSxzaG93bGFiZWxzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJwbG90In0sbGFiZWxmb250Omwoe2VkaXRUeXBlOiJwbG90Iixjb2xvckVkaXRUeXBlOiJzdHlsZSJ9KSxsYWJlbGZvcm1hdDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJwbG90In0sb3BlcmF0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6W10uY29uY2F0KGgpLmNvbmNhdChmKSxkZmx0OiI9IixlZGl0VHlwZToiY2FsYyJ9LHZhbHVlOnt2YWxUeXBlOiJhbnkiLGRmbHQ6MCxlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIixpbXBsaWVkRWRpdHM6e2F1dG9jb250b3VyOiExfX0sbGluZTp7Y29sb3I6Yyh7fSxwLmNvbG9yLHtlZGl0VHlwZToic3R5bGUrY29sb3JiYXJzIn0pLHdpZHRoOmMoe30scC53aWR0aCx7ZWRpdFR5cGU6InN0eWxlK2NvbG9yYmFycyJ9KSxkYXNoOnMsc21vb3RoaW5nOmMoe30scC5zbW9vdGhpbmcse30pLGVkaXRUeXBlOiJwbG90In19LGEoIiIse2NMZXR0ZXI6InoiLGF1dG9Db2xvckRmbHQ6ITEsZWRpdFR5cGVPdmVycmlkZToiY2FsYyJ9KSx7Y29sb3JiYXI6b30pfSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlcyI6NTU5LCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NTY1LCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlcyI6NTgyLCIuLi8uLi9jb25zdGFudHMvZmlsdGVyX29wcyI6NjU3LCIuLi8uLi9saWIvZXh0ZW5kIjo2NzMsIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6NzU4LCIuLi9oZWF0bWFwL2F0dHJpYnV0ZXMiOjkyNSwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIjoxMDE1fV0sODk3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2hlYXRtYXAvY2FsYyIpLGk9dCgiLi9zZXRfY29udG91cnMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1uKHQsZSk7cmV0dXJuIGkoZSkscn19LHsiLi4vaGVhdG1hcC9jYWxjIjo5MjYsIi4vc2V0X2NvbnRvdXJzIjo5MTV9XSw4OTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGEsbyxzPXRbMF0sbD1zLngubGVuZ3RoLGM9cy55Lmxlbmd0aCx1PXMueixoPW4uY29udG91cnMsZj0tMS8wLHA9MS8wO2ZvcihpPTA7aTxjO2krKylwPU1hdGgubWluKHAsdVtpXVswXSkscD1NYXRoLm1pbihwLHVbaV1bbC0xXSksZj1NYXRoLm1heChmLHVbaV1bMF0pLGY9TWF0aC5tYXgoZix1W2ldW2wtMV0pO2ZvcihpPTE7aTxsLTE7aSsrKXA9TWF0aC5taW4ocCx1WzBdW2ldKSxwPU1hdGgubWluKHAsdVtjLTFdW2ldKSxmPU1hdGgubWF4KGYsdVswXVtpXSksZj1NYXRoLm1heChmLHVbYy0xXVtpXSk7c3dpdGNoKHMucHJlZml4Qm91bmRhcnk9ITEsZSl7Y2FzZSI+IjpoLnZhbHVlPmYmJihzLnByZWZpeEJvdW5kYXJ5PSEwKTticmVhaztjYXNlIjwiOmgudmFsdWU8cCYmKHMucHJlZml4Qm91bmRhcnk9ITApO2JyZWFrO2Nhc2UiW10iOmE9TWF0aC5taW4uYXBwbHkobnVsbCxoLnZhbHVlKSwoKG89TWF0aC5tYXguYXBwbHkobnVsbCxoLnZhbHVlKSk8cHx8YT5mKSYmKHMucHJlZml4Qm91bmRhcnk9ITApO2JyZWFrO2Nhc2UiXVsiOmE9TWF0aC5taW4uYXBwbHkobnVsbCxoLnZhbHVlKSxvPU1hdGgubWF4LmFwcGx5KG51bGwsaC52YWx1ZSksYTxwJiZvPmYmJihzLnByZWZpeEJvdW5kYXJ5PSEwKX19fSx7fV0sODk5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvZHJhdyIpLGk9dCgiLi9tYWtlX2NvbG9yX21hcCIpLGE9dCgiLi9lbmRfcGx1cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0udHJhY2Usbz0iY2IiK3IudWlkO2lmKHQuX2Z1bGxMYXlvdXQuX2luZm9sYXllci5zZWxlY3RBbGwoIi4iK28pLnJlbW92ZSgpLHIuc2hvd3NjYWxlKXt2YXIgcz1uKHQsbyk7ZVswXS50LmNiPXM7dmFyIGw9ci5jb250b3VycyxjPXIubGluZSx1PWwuc2l6ZXx8MSxoPWwuY29sb3JpbmcsZj1pKHIse2lzQ29sb3JiYXI6ITB9KTsiaGVhdG1hcCI9PT1oJiZzLmZpbGxsZXZlbHMoe3N0YXJ0OnIuem1pbixlbmQ6ci56bWF4LHNpemU6KHIuem1heC1yLnptaW4pLzI1NH0pLHMuZmlsbGNvbG9yKCJmaWxsIj09PWh8fCJoZWF0bWFwIj09PWg/ZjoiIikubGluZSh7Y29sb3I6ImxpbmVzIj09PWg/ZjpjLmNvbG9yLHdpZHRoOiExIT09bC5zaG93bGluZXM/Yy53aWR0aDowLGRhc2g6Yy5kYXNofSkubGV2ZWxzKHtzdGFydDpsLnN0YXJ0LGVuZDphKGwpLHNpemU6dX0pLm9wdGlvbnMoci5jb2xvcmJhcikoKX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvZHJhdyI6NTYzLCIuL2VuZF9wbHVzIjo5MDcsIi4vbWFrZV9jb2xvcl9tYXAiOjkxMn1dLDkwMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e0JPVFRPTVNUQVJUOlsxLDksMTMsMTA0LDcxM10sVE9QU1RBUlQ6WzQsNiw3LDEwNCw3MTNdLExFRlRTVEFSVDpbOCwxMiwxNCwyMDgsMTExNF0sUklHSFRTVEFSVDpbMiwzLDExLDIwOCwxMTE0XSxORVdERUxUQTpbbnVsbCxbLTEsMF0sWzAsLTFdLFstMSwwXSxbMSwwXSxudWxsLFswLC0xXSxbLTEsMF0sWzAsMV0sWzAsMV0sbnVsbCxbMCwxXSxbMSwwXSxbMSwwXSxbMCwtMV1dLENIT09TRVNBRERMRTp7MTA0Ols0LDFdLDIwODpbMiw4XSw3MTM6WzcsMTNdLDExMTQ6WzExLDE0XX0sU0FERExFUkVNQUlOREVSOnsxOjQsMjo4LDQ6MSw3OjEzLDg6MiwxMToxNCwxMzo3LDE0OjExfSxMQUJFTERJU1RBTkNFOjIsTEFCRUxJTkNSRUFTRToxMCxMQUJFTE1JTjozLExBQkVMTUFYOjEwLExBQkVMT1BUSU1JWkVSOntFREdFQ09TVDoxLEFOR0xFQ09TVDoxLE5FSUdIQk9SQ09TVDo1LFNBTUVMRVZFTEZBQ1RPUjoxMCxTQU1FTEVWRUxESVNUQU5DRTo1LE1BWENPU1Q6MTAwLElOSVRJQUxTRUFSQ0hQT0lOVFM6MTAsSVRFUkFUSU9OUzo1fX19LHt9XSw5MDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4vbGFiZWxfZGVmYXVsdHMiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxvPWEuYWRkT3BhY2l0eSxzPWEub3BhY2l0eSxsPXQoIi4uLy4uL2NvbnN0YW50cy9maWx0ZXJfb3BzIiksYz1sLkNPTlNUUkFJTlRfUkVEVUNUSU9OLHU9bC5DT01QQVJJU09OX09QUzI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEsbCxoKXt2YXIgZixwLGQsZz1lLmNvbnRvdXJzLG09cigiY29udG91cnMub3BlcmF0aW9uIik7KGcuX29wZXJhdGlvbj1jW21dLGZ1bmN0aW9uKHQsZSl7dmFyIHI7LTE9PT11LmluZGV4T2YoZS5vcGVyYXRpb24pPyh0KCJjb250b3Vycy52YWx1ZSIsWzAsMV0pLEFycmF5LmlzQXJyYXkoZS52YWx1ZSk/ZS52YWx1ZS5sZW5ndGg+Mj9lLnZhbHVlPWUudmFsdWUuc2xpY2UoMik6MD09PWUubGVuZ3RoP2UudmFsdWU9WzAsMV06ZS5sZW5ndGg8Mj8ocj1wYXJzZUZsb2F0KGUudmFsdWVbMF0pLGUudmFsdWU9W3IscisxXSk6ZS52YWx1ZT1bcGFyc2VGbG9hdChlLnZhbHVlWzBdKSxwYXJzZUZsb2F0KGUudmFsdWVbMV0pXTpuKGUudmFsdWUpJiYocj1wYXJzZUZsb2F0KGUudmFsdWUpLGUudmFsdWU9W3IscisxXSkpOih0KCJjb250b3Vycy52YWx1ZSIsMCksbihlLnZhbHVlKXx8KEFycmF5LmlzQXJyYXkoZS52YWx1ZSk/ZS52YWx1ZT1wYXJzZUZsb2F0KGUudmFsdWVbMF0pOmUudmFsdWU9MCkpfShyLGcpLCI9Ij09PW0/Zj1nLnNob3dsaW5lcz0hMDooZj1yKCJjb250b3Vycy5zaG93bGluZXMiKSxkPXIoImZpbGxjb2xvciIsbygodC5saW5lfHx7fSkuY29sb3J8fGwsLjUpKSksZikmJihwPXIoImxpbmUuY29sb3IiLGQmJnMoZCk/byhlLmZpbGxjb2xvciwxKTpsKSxyKCJsaW5lLndpZHRoIiwyKSxyKCJsaW5lLmRhc2giKSk7cigibGluZS5zbW9vdGhpbmciKSxpKHIsYSxwLGgpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo1NTgsIi4uLy4uL2NvbnN0YW50cy9maWx0ZXJfb3BzIjo2NTcsIi4vbGFiZWxfZGVmYXVsdHMiOjkxMSwiZmFzdC1pc251bWVyaWMiOjIxNH1dLDkwMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb25zdGFudHMvZmlsdGVyX29wcyIpLGk9dCgiZmFzdC1pc251bWVyaWMiKTtmdW5jdGlvbiBhKHQsZSl7dmFyIHIsYT1BcnJheS5pc0FycmF5KGUpO2Z1bmN0aW9uIG8odCl7cmV0dXJuIGkodCk/K3Q6bnVsbH1yZXR1cm4tMSE9PW4uQ09NUEFSSVNPTl9PUFMyLmluZGV4T2YodCk/cj1vKGE/ZVswXTplKTotMSE9PW4uSU5URVJWQUxfT1BTLmluZGV4T2YodCk/cj1hP1tvKGVbMF0pLG8oZVsxXSldOltvKGUpLG8oZSldOi0xIT09bi5TRVRfT1BTLmluZGV4T2YodCkmJihyPWE/ZS5tYXAobyk6W28oZSldKSxyfWZ1bmN0aW9uIG8odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2U9YSh0LGUpO3ZhciByPU1hdGgubWluKGVbMF0sZVsxXSksbj1NYXRoLm1heChlWzBdLGVbMV0pO3JldHVybntzdGFydDpyLGVuZDpuLHNpemU6bi1yfX19ZnVuY3Rpb24gcyh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJue3N0YXJ0OmU9YSh0LGUpLGVuZDoxLzAsc2l6ZToxLzB9fX1lLmV4cG9ydHM9eyJbXSI6bygiW10iKSwiXVsiOm8oIl1bIiksIj4iOnMoIj4iKSwiPCI6cygiPCIpLCI9IjpzKCI9Iil9fSx7Ii4uLy4uL2NvbnN0YW50cy9maWx0ZXJfb3BzIjo2NTcsImZhc3QtaXNudW1lcmljIjoyMTR9XSw5MDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPW4oImNvbnRvdXJzLnN0YXJ0IiksYT1uKCJjb250b3Vycy5lbmQiKSxvPSExPT09aXx8ITE9PT1hLHM9cigiY29udG91cnMuc2l6ZSIpOyEobz9lLmF1dG9jb250b3VyPSEwOnIoImF1dG9jb250b3VyIiwhMSkpJiZzfHxyKCJuY29udG91cnMiKX19LHt9XSw5MDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIik7ZnVuY3Rpb24gaSh0KXtyZXR1cm4gbi5leHRlbmRGbGF0KHt9LHQse2VkZ2VwYXRoczpuLmV4dGVuZERlZXAoW10sdC5lZGdlcGF0aHMpLHBhdGhzOm4uZXh0ZW5kRGVlcChbXSx0LnBhdGhzKX0pfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGEsbyxzPWZ1bmN0aW9uKHQpe3JldHVybiB0LnJldmVyc2UoKX0sbD1mdW5jdGlvbih0KXtyZXR1cm4gdH07c3dpdGNoKGUpe2Nhc2UiPSI6Y2FzZSI8IjpyZXR1cm4gdDtjYXNlIj4iOmZvcigxIT09dC5sZW5ndGgmJm4ud2FybigiQ29udG91ciBkYXRhIGludmFsaWQgZm9yIHRoZSBzcGVjaWZpZWQgaW5lcXVhbGl0eSBvcGVyYXRpb24uIiksYT10WzBdLHI9MDtyPGEuZWRnZXBhdGhzLmxlbmd0aDtyKyspYS5lZGdlcGF0aHNbcl09cyhhLmVkZ2VwYXRoc1tyXSk7Zm9yKHI9MDtyPGEucGF0aHMubGVuZ3RoO3IrKylhLnBhdGhzW3JdPXMoYS5wYXRoc1tyXSk7cmV0dXJuIHQ7Y2FzZSJdWyI6dmFyIGM9cztzPWwsbD1jO2Nhc2UiW10iOmZvcigyIT09dC5sZW5ndGgmJm4ud2FybigiQ29udG91ciBkYXRhIGludmFsaWQgZm9yIHRoZSBzcGVjaWZpZWQgaW5lcXVhbGl0eSByYW5nZSBvcGVyYXRpb24uIiksYT1pKHRbMF0pLG89aSh0WzFdKSxyPTA7cjxhLmVkZ2VwYXRocy5sZW5ndGg7cisrKWEuZWRnZXBhdGhzW3JdPXMoYS5lZGdlcGF0aHNbcl0pO2ZvcihyPTA7cjxhLnBhdGhzLmxlbmd0aDtyKyspYS5wYXRoc1tyXT1zKGEucGF0aHNbcl0pO2Zvcig7by5lZGdlcGF0aHMubGVuZ3RoOylhLmVkZ2VwYXRocy5wdXNoKGwoby5lZGdlcGF0aHMuc2hpZnQoKSkpO2Zvcig7by5wYXRocy5sZW5ndGg7KWEucGF0aHMucHVzaChsKG8ucGF0aHMuc2hpZnQoKSkpO3JldHVyblthXX19fSx7Ii4uLy4uL2xpYiI6Njg0fV0sOTA1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vaGVhdG1hcC94eXpfZGVmYXVsdHMiKSxhPXQoIi4vY29uc3RyYWludF9kZWZhdWx0cyIpLG89dCgiLi9jb250b3Vyc19kZWZhdWx0cyIpLHM9dCgiLi9zdHlsZV9kZWZhdWx0cyIpLGw9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGMpe2Z1bmN0aW9uIHUocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGwscixpKX1pZihpKHQsZSx1LGMpKXt1KCJ0ZXh0Iik7dmFyIGg9ImNvbnN0cmFpbnQiPT09dSgiY29udG91cnMudHlwZSIpO3UoImNvbm5lY3RnYXBzIixuLmlzQXJyYXkxRChlLnopKSxofHxkZWxldGUgZS5zaG93bGVnZW5kLGg/YSh0LGUsdSxjLHIpOihvKHQsZSx1LGZ1bmN0aW9uKHIpe3JldHVybiBuLmNvZXJjZTIodCxlLGwscil9KSxzKHQsZSx1LGMpKX1lbHNlIGUudmlzaWJsZT0hMX19LHsiLi4vLi4vbGliIjo2ODQsIi4uL2hlYXRtYXAveHl6X2RlZmF1bHRzIjo5NDAsIi4vYXR0cmlidXRlcyI6ODk2LCIuL2NvbnN0cmFpbnRfZGVmYXVsdHMiOjkwMSwiLi9jb250b3Vyc19kZWZhdWx0cyI6OTAzLCIuL3N0eWxlX2RlZmF1bHRzIjo5MTd9XSw5MDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2NvbnN0cmFpbnRfbWFwcGluZyIpLGE9dCgiLi9lbmRfcGx1cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBvPSJjb25zdHJhaW50Ij09PXQudHlwZT9pW3QuX29wZXJhdGlvbl0odC52YWx1ZSk6dCxzPW8uc2l6ZSxsPVtdLGM9YShvKSx1PXIudHJhY2UuX2NhcnBldFRyYWNlLGg9dT97eGF4aXM6dS5hYXhpcyx5YXhpczp1LmJheGlzLHg6ci5hLHk6ci5ifTp7eGF4aXM6ZS54YXhpcyx5YXhpczplLnlheGlzLHg6ci54LHk6ci55fSxmPW8uc3RhcnQ7ZjxjO2YrPXMpaWYobC5wdXNoKG4uZXh0ZW5kRmxhdCh7bGV2ZWw6Zixjcm9zc2luZ3M6e30sc3RhcnRzOltdLGVkZ2VwYXRoczpbXSxwYXRoczpbXSx6OnIueixzbW9vdGhpbmc6ci50cmFjZS5saW5lLnNtb290aGluZ30saCkpLGwubGVuZ3RoPjFlMyl7bi53YXJuKCJUb28gbWFueSBjb250b3VycywgY2xpcHBpbmcgYXQgMTAwMCIsdCk7YnJlYWt9cmV0dXJuIGx9fSx7Ii4uLy4uL2xpYiI6Njg0LCIuL2NvbnN0cmFpbnRfbWFwcGluZyI6OTAyLCIuL2VuZF9wbHVzIjo5MDd9XSw5MDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0LmVuZCt0LnNpemUvMWU2fX0se31dLDkwODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vY29uc3RhbnRzIik7ZnVuY3Rpb24gYSh0LGUscixuKXtyZXR1cm4gTWF0aC5hYnModFswXS1lWzBdKTxyJiZNYXRoLmFicyh0WzFdLWVbMV0pPG59ZnVuY3Rpb24gbyh0LGUscixvLGwpe3ZhciBjLHU9ZS5qb2luKCIsIiksaD11LGY9dC5jcm9zc2luZ3NbaF0scD1mdW5jdGlvbih0LGUscil7dmFyIG49MCxhPTA7dD4yMCYmZT8yMDg9PT10fHwxMTE0PT09dD9uPTA9PT1yWzBdPzE6LTE6YT0wPT09clsxXT8xOi0xOi0xIT09aS5CT1RUT01TVEFSVC5pbmRleE9mKHQpP2E9MTotMSE9PWkuTEVGVFNUQVJULmluZGV4T2YodCk/bj0xOi0xIT09aS5UT1BTVEFSVC5pbmRleE9mKHQpP2E9LTE6bj0tMTtyZXR1cm5bbixhXX0oZixyLGUpLGQ9W3ModCxlLFstcFswXSwtcFsxXV0pXSxnPXAuam9pbigiLCIpLG09dC56Lmxlbmd0aCx2PXQuelswXS5sZW5ndGg7Zm9yKGM9MDtjPDFlNDtjKyspe2lmKGY+MjA/KGY9aS5DSE9PU0VTQURETEVbZl1bKHBbMF18fHBbMV0pPDA/MDoxXSx0LmNyb3NzaW5nc1toXT1pLlNBRERMRVJFTUFJTkRFUltmXSk6ZGVsZXRlIHQuY3Jvc3NpbmdzW2hdLCEocD1pLk5FV0RFTFRBW2ZdKSl7bi5sb2coIkZvdW5kIGJhZCBtYXJjaGluZyBpbmRleDoiLGYsZSx0LmxldmVsKTticmVha31kLnB1c2gocyh0LGUscCkpLGVbMF0rPXBbMF0sZVsxXSs9cFsxXSxhKGRbZC5sZW5ndGgtMV0sZFtkLmxlbmd0aC0yXSxvLGwpJiZkLnBvcCgpLGg9ZS5qb2luKCIsIik7dmFyIHk9cFswXSYmKGVbMF08MHx8ZVswXT52LTIpfHxwWzFdJiYoZVsxXTwwfHxlWzFdPm0tMik7aWYoaD09PXUmJnAuam9pbigiLCIpPT09Z3x8ciYmeSlicmVhaztmPXQuY3Jvc3NpbmdzW2hdfTFlND09PWMmJm4ubG9nKCJJbmZpbml0ZSBsb29wIGluIGNvbnRvdXI/Iik7dmFyIHgsYixfLHcsayxNLEEsVCxTLEUsQyxMLHosUCxJLE89YShkWzBdLGRbZC5sZW5ndGgtMV0sbyxsKSxEPTAsUj0uMip0LnNtb290aGluZyxCPVtdLEY9MDtmb3IoYz0xO2M8ZC5sZW5ndGg7YysrKUw9ZFtjXSx6PWRbYy0xXSx2b2lkIDAsdm9pZCAwLFA9TFsyXS16WzJdLEk9TFszXS16WzNdLEQrPUE9TWF0aC5zcXJ0KFAqUCtJKkkpLEIucHVzaChBKTt2YXIgTj1EL0IubGVuZ3RoKlI7ZnVuY3Rpb24gaih0KXtyZXR1cm4gZFt0JWQubGVuZ3RoXX1mb3IoYz1kLmxlbmd0aC0yO2M+PUY7Yy0tKWlmKCh4PUJbY10pPE4pe2ZvcihfPTAsYj1jLTE7Yj49RiYmeCtCW2JdPE47Yi0tKXgrPUJbYl07aWYoTyYmYz09PWQubGVuZ3RoLTIpZm9yKF89MDtfPGImJngrQltfXTxOO18rKyl4Kz1CW19dO2s9Yy1iK18rMSxNPU1hdGguZmxvb3IoKGMrYitfKzIpLzIpLHc9T3x8YyE9PWQubGVuZ3RoLTI/T3x8LTEhPT1iP2slMj9qKE0pOlsoaihNKVswXStqKE0rMSlbMF0pLzIsKGooTSlbMV0raihNKzEpWzFdKS8yXTpkWzBdOmRbZC5sZW5ndGgtMV0sZC5zcGxpY2UoYisxLGMtYisxLHcpLGM9YisxLF8mJihGPV8pLE8mJihjPT09ZC5sZW5ndGgtMj9kW19dPWRbZC5sZW5ndGgtMV06MD09PWMmJihkW2QubGVuZ3RoLTFdPWRbMF0pKX1mb3IoZC5zcGxpY2UoMCxGKSxjPTA7YzxkLmxlbmd0aDtjKyspZFtjXS5sZW5ndGg9MjtpZighKGQubGVuZ3RoPDIpKWlmKE8pZC5wb3AoKSx0LnBhdGhzLnB1c2goZCk7ZWxzZXtyfHxuLmxvZygiVW5jbG9zZWQgaW50ZXJpb3IgY29udG91cj8iLHQubGV2ZWwsdSxkLmpvaW4oIkwiKSk7dmFyIFY9ITE7Zm9yKFQ9MDtUPHQuZWRnZXBhdGhzLmxlbmd0aDtUKyspaWYoRT10LmVkZ2VwYXRoc1tUXSwhViYmYShFWzBdLGRbZC5sZW5ndGgtMV0sbyxsKSl7ZC5wb3AoKSxWPSEwO3ZhciBVPSExO2ZvcihTPTA7Uzx0LmVkZ2VwYXRocy5sZW5ndGg7UysrKWlmKGEoKEM9dC5lZGdlcGF0aHNbU10pW0MubGVuZ3RoLTFdLGRbMF0sbyxsKSl7VT0hMCxkLnNoaWZ0KCksdC5lZGdlcGF0aHMuc3BsaWNlKFQsMSksUz09PVQ/dC5wYXRocy5wdXNoKGQuY29uY2F0KEMpKTooUz5UJiZTLS0sdC5lZGdlcGF0aHNbU109Qy5jb25jYXQoZCxFKSk7YnJlYWt9VXx8KHQuZWRnZXBhdGhzW1RdPWQuY29uY2F0KEUpKX1mb3IoVD0wO1Q8dC5lZGdlcGF0aHMubGVuZ3RoJiYhVjtUKyspYSgoRT10LmVkZ2VwYXRoc1tUXSlbRS5sZW5ndGgtMV0sZFswXSxvLGwpJiYoZC5zaGlmdCgpLHQuZWRnZXBhdGhzW1RdPUUuY29uY2F0KGQpLFY9ITApO1Z8fHQuZWRnZXBhdGhzLnB1c2goZCl9fWZ1bmN0aW9uIHModCxlLHIpe3ZhciBuPWVbMF0rTWF0aC5tYXgoclswXSwwKSxpPWVbMV0rTWF0aC5tYXgoclsxXSwwKSxhPXQueltpXVtuXSxvPXQueGF4aXMscz10LnlheGlzO2lmKHJbMV0pe3ZhciBsPSh0LmxldmVsLWEpLyh0LnpbaV1bbisxXS1hKTtyZXR1cm5bby5jMnAoKDEtbCkqdC54W25dK2wqdC54W24rMV0sITApLHMuYzJwKHQueVtpXSwhMCksbitsLGldfXZhciBjPSh0LmxldmVsLWEpLyh0LnpbaSsxXVtuXS1hKTtyZXR1cm5bby5jMnAodC54W25dLCEwKSxzLmMycCgoMS1jKSp0LnlbaV0rYyp0LnlbaSsxXSwhMCksbixpK2NdfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGksYSxzLGw7Zm9yKGU9ZXx8LjAxLHI9cnx8LjAxLGE9MDthPHQubGVuZ3RoO2ErKyl7Zm9yKHM9dFthXSxsPTA7bDxzLnN0YXJ0cy5sZW5ndGg7bCsrKW8ocyxzLnN0YXJ0c1tsXSwiZWRnZSIsZSxyKTtmb3IoaT0wO09iamVjdC5rZXlzKHMuY3Jvc3NpbmdzKS5sZW5ndGgmJmk8MWU0OylpKyssbyhzLE9iamVjdC5rZXlzKHMuY3Jvc3NpbmdzKVswXS5zcGxpdCgiLCIpLm1hcChOdW1iZXIpLHZvaWQgMCxlLHIpOzFlND09PWkmJm4ubG9nKCJJbmZpbml0ZSBsb29wIGluIGNvbnRvdXI/Iil9fX0seyIuLi8uLi9saWIiOjY4NCwiLi9jb25zdGFudHMiOjkwMH1dLDkwOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksaT10KCIuLi9oZWF0bWFwL2hvdmVyIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEsbyl7dmFyIHM9aSh0LGUscixhLG8sITApO3JldHVybiBzJiZzLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9dC50cmFjZTsiY29uc3RyYWludCI9PT1lLmNvbnRvdXJzLnR5cGUmJihlLmZpbGxjb2xvciYmbi5vcGFjaXR5KGUuZmlsbGNvbG9yKT90LmNvbG9yPW4uYWRkT3BhY2l0eShlLmZpbGxjb2xvciwxKTplLmNvbnRvdXJzLnNob3dsaW5lcyYmbi5vcGFjaXR5KGUubGluZS5jb2xvcikmJih0LmNvbG9yPW4uYWRkT3BhY2l0eShlLmxpbmUuY29sb3IsMSkpKX0pLHN9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjU1OCwiLi4vaGVhdG1hcC9ob3ZlciI6OTMyfV0sOTEwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXt9O24uYXR0cmlidXRlcz10KCIuL2F0dHJpYnV0ZXMiKSxuLnN1cHBseURlZmF1bHRzPXQoIi4vZGVmYXVsdHMiKSxuLmNhbGM9dCgiLi9jYWxjIiksbi5wbG90PXQoIi4vcGxvdCIpLnBsb3Qsbi5zdHlsZT10KCIuL3N0eWxlIiksbi5jb2xvcmJhcj10KCIuL2NvbG9yYmFyIiksbi5ob3ZlclBvaW50cz10KCIuL2hvdmVyIiksbi5tb2R1bGVUeXBlPSJ0cmFjZSIsbi5uYW1lPSJjb250b3VyIixuLmJhc2VQbG90TW9kdWxlPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiIpLG4uY2F0ZWdvcmllcz1bImNhcnRlc2lhbiIsInN2ZyIsIjJkTWFwIiwiY29udG91ciIsInNob3dMZWdlbmQiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuIjo3NDMsIi4vYXR0cmlidXRlcyI6ODk2LCIuL2NhbGMiOjg5NywiLi9jb2xvcmJhciI6ODk5LCIuL2RlZmF1bHRzIjo5MDUsIi4vaG92ZXIiOjkwOSwiLi9wbG90Ijo5MTQsIi4vc3R5bGUiOjkxNn1dLDkxMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSl7aWYoaXx8KGk9e30pLHQoImNvbnRvdXJzLnNob3dsYWJlbHMiKSl7dmFyIGE9ZS5mb250O24uY29lcmNlRm9udCh0LCJjb250b3Vycy5sYWJlbGZvbnQiLHtmYW1pbHk6YS5mYW1pbHksc2l6ZTphLnNpemUsY29sb3I6cn0pLHQoImNvbnRvdXJzLmxhYmVsZm9ybWF0Iil9ITEhPT1pLmhhc0hvdmVyJiZ0KCJ6aG92ZXJmb3JtYXQiKX19LHsiLi4vLi4vbGliIjo2ODR9XSw5MTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSIpLGE9dCgiLi9lbmRfcGx1cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmNvbnRvdXJzLHI9ZS5zdGFydCxvPWEoZSkscz1lLnNpemV8fDEsbD1NYXRoLmZsb29yKChvLXIpL3MpKzEsYz0ibGluZXMiPT09ZS5jb2xvcmluZz8wOjE7aXNGaW5pdGUocyl8fChzPTEsbD0xKTt2YXIgdSxoLGY9dC5jb2xvcnNjYWxlLHA9Zi5sZW5ndGgsZD1uZXcgQXJyYXkocCksZz1uZXcgQXJyYXkocCk7aWYoImhlYXRtYXAiPT09ZS5jb2xvcmluZyl7Zm9yKHQuemF1dG8mJiExPT09dC5hdXRvY29udG91ciYmKHQuem1pbj1yLXMvMix0LnptYXg9dC56bWluK2wqcyksaD0wO2g8cDtoKyspdT1mW2hdLGRbaF09dVswXSoodC56bWF4LXQuem1pbikrdC56bWluLGdbaF09dVsxXTt2YXIgbT1uLmV4dGVudChbdC56bWluLHQuem1heCxlLnN0YXJ0LGUuc3RhcnQrcyoobC0xKV0pLHY9bVt0LnptaW48dC56bWF4PzA6MV0seT1tW3Quem1pbjx0LnptYXg/MTowXTt2IT09dC56bWluJiYoZC5zcGxpY2UoMCwwLHYpLGcuc3BsaWNlKDAsMCxSYW5nZVswXSkpLHkhPT10LnptYXgmJihkLnB1c2goeSksZy5wdXNoKGdbZy5sZW5ndGgtMV0pKX1lbHNlIGZvcihoPTA7aDxwO2grKyl1PWZbaF0sZFtoXT0odVswXSoobCtjLTEpLWMvMikqcytyLGdbaF09dVsxXTtyZXR1cm4gaS5tYWtlQ29sb3JTY2FsZUZ1bmMoe2RvbWFpbjpkLHJhbmdlOmd9LHtub051bWVyaWNDaGVjazohMH0pfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiOjU3MywiLi9lbmRfcGx1cyI6OTA3LGQzOjE0N31dLDkxMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2NvbnN0YW50cyIpO2Z1bmN0aW9uIGkodCxlKXt2YXIgcj0oZVswXVswXT50PzA6MSkrKGVbMF1bMV0+dD8wOjIpKyhlWzFdWzFdPnQ/MDo0KSsoZVsxXVswXT50PzA6OCk7cmV0dXJuIDU9PT1yfHwxMD09PXI/dD4oZVswXVswXStlWzBdWzFdK2VbMV1bMF0rZVsxXVsxXSkvND81PT09cj83MTM6MTExNDo1PT09cj8xMDQ6MjA4OjE1PT09cj8wOnJ9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLHIsYSxvLHMsbCxjLHUsaCxmPXRbMF0ueixwPWYubGVuZ3RoLGQ9ZlswXS5sZW5ndGgsZz0yPT09cHx8Mj09PWQ7Zm9yKHI9MDtyPHAtMTtyKyspZm9yKG89W10sMD09PXImJihvPW8uY29uY2F0KG4uQk9UVE9NU1RBUlQpKSxyPT09cC0yJiYobz1vLmNvbmNhdChuLlRPUFNUQVJUKSksZT0wO2U8ZC0xO2UrKylmb3IoYT1vLnNsaWNlKCksMD09PWUmJihhPWEuY29uY2F0KG4uTEVGVFNUQVJUKSksZT09PWQtMiYmKGE9YS5jb25jYXQobi5SSUdIVFNUQVJUKSkscz1lKyIsIityLGw9W1tmW3JdW2VdLGZbcl1bZSsxXV0sW2ZbcisxXVtlXSxmW3IrMV1bZSsxXV1dLGg9MDtoPHQubGVuZ3RoO2grKykoYz1pKCh1PXRbaF0pLmxldmVsLGwpKSYmKHUuY3Jvc3NpbmdzW3NdPWMsLTEhPT1hLmluZGV4T2YoYykmJih1LnN0YXJ0cy5wdXNoKFtlLHJdKSxnJiYtMSE9PWEuaW5kZXhPZihjLGEuaW5kZXhPZihjKSsxKSYmdS5zdGFydHMucHVzaChbZSxyXSkpKX19LHsiLi9jb25zdGFudHMiOjkwMH1dLDkxNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxvPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLHM9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxsPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9zZXRfY29udmVydCIpLGM9dCgiLi4vLi4vcGxvdHMvZ2V0X2RhdGEiKS5nZXRVaWRzRnJvbUNhbGNEYXRhLHU9dCgiLi4vaGVhdG1hcC9wbG90IiksaD10KCIuL21ha2VfY3Jvc3NpbmdzIiksZj10KCIuL2ZpbmRfYWxsX3BhdGhzIikscD10KCIuL2VtcHR5X3BhdGhpbmZvIiksZD10KCIuL2NvbnZlcnRfdG9fY29uc3RyYWludHMiKSxnPXQoIi4vY2xvc2VfYm91bmRhcmllcyIpLG09dCgiLi9jb25zdGFudHMiKSx2PW0uTEFCRUxPUFRJTUlaRVI7ZnVuY3Rpb24geSh0LGUsbyxzKXt2YXIgbD1vWzBdLnRyYWNlLGM9b1swXS54LHY9b1swXS55LHk9bC5jb250b3VycyxiPSJjb250b3VyIitsLnVpZCxfPWUueGF4aXMsdz1lLnlheGlzLGs9dC5fZnVsbExheW91dCxNPXAoeSxlLG9bMF0pLEE9aS5lbnN1cmVTaW5nbGUocywiZyIsImhlYXRtYXBjb2xvcmluZyIpLFQ9W107ImhlYXRtYXAiPT09eS5jb2xvcmluZyYmKGwuemF1dG8mJiExPT09bC5hdXRvY29udG91ciYmKGwuX2lucHV0LnptaW49bC56bWluPXkuc3RhcnQteS5zaXplLzIsbC5faW5wdXQuem1heD1sLnptYXg9bC56bWluK00ubGVuZ3RoKnkuc2l6ZSksVD1bb10pLHUodCxlLFQsQSksaChNKSxmKE0pO3ZhciBTPV8uYzJwKGNbMF0sITApLEU9Xy5jMnAoY1tjLmxlbmd0aC0xXSwhMCksQz13LmMycCh2WzBdLCEwKSxMPXcuYzJwKHZbdi5sZW5ndGgtMV0sITApLHo9W1tTLExdLFtFLExdLFtFLENdLFtTLENdXSxQPU07ImNvbnN0cmFpbnQiPT09eS50eXBlJiYoUD1kKE0seS5fb3BlcmF0aW9uKSxnKFAseS5fb3BlcmF0aW9uLHosbCkpO3ZhciBJPXIubWFrZUNvbnRvdXJHcm91cChzLG8sYik7IWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1pLmVuc3VyZVNpbmdsZSh0LCJnIiwiY29udG91cmJnIikuc2VsZWN0QWxsKCJwYXRoIikuZGF0YSgiZmlsbCI9PT1yLmNvbG9yaW5nP1swXTpbXSk7bi5lbnRlcigpLmFwcGVuZCgicGF0aCIpLG4uZXhpdCgpLnJlbW92ZSgpLG4uYXR0cigiZCIsIk0iK2Uuam9pbigiTCIpKyJaIikuc3R5bGUoInN0cm9rZSIsIm5vbmUiKX0oSSx6LHkpLGZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvPWkuZW5zdXJlU2luZ2xlKHQsImciLCJjb250b3VyZmlsbCIpLnNlbGVjdEFsbCgicGF0aCIpLmRhdGEoImZpbGwiPT09YS5jb2xvcmluZ3x8ImNvbnN0cmFpbnQiPT09YS50eXBlJiYiPSIhPT1hLl9vcGVyYXRpb24/ZTpbXSk7by5lbnRlcigpLmFwcGVuZCgicGF0aCIpLG8uZXhpdCgpLnJlbW92ZSgpLG8uZWFjaChmdW5jdGlvbih0KXt2YXIgZT14KHQscik7ZT9uLnNlbGVjdCh0aGlzKS5hdHRyKCJkIixlKS5zdHlsZSgic3Ryb2tlIiwibm9uZSIpOm4uc2VsZWN0KHRoaXMpLnJlbW92ZSgpfSl9KEksUCx6LHkpLGZ1bmN0aW9uKHQsZSxvLHMsbCxjKXt2YXIgdT1pLmVuc3VyZVNpbmdsZSh0LCJnIiwiY29udG91cmxpbmVzIiksaD0hMSE9PWwuc2hvd2xpbmVzLGY9bC5zaG93bGFiZWxzLHA9aCYmZixkPXIuY3JlYXRlTGluZXModSxofHxmLGUpLGc9ci5jcmVhdGVMaW5lQ2xpcCh1LHAsby5fZnVsbExheW91dC5fY2xpcHMscy50cmFjZS51aWQpLHY9dC5zZWxlY3RBbGwoImcuY29udG91cmxhYmVscyIpLmRhdGEoZj9bMF06W10pO2lmKHYuZXhpdCgpLnJlbW92ZSgpLHYuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJjb250b3VybGFiZWxzIiwhMCksZil7dmFyIHk9W2NdLHg9W107aS5jbGVhckxvY2F0aW9uQ2FjaGUoKTt2YXIgYj1yLmxhYmVsRm9ybWF0dGVyKGwscy50LmNiLG8uX2Z1bGxMYXlvdXQpLF89YS50ZXN0ZXIuYXBwZW5kKCJ0ZXh0IikuYXR0cigiZGF0YS1ub3RleCIsMSkuY2FsbChhLmZvbnQsbC5sYWJlbGZvbnQpLHc9ZVswXS54YXhpcy5fbGVuZ3RoLGs9ZVswXS55YXhpcy5fbGVuZ3RoLE09e2xlZnQ6TWF0aC5tYXgoY1swXVswXSwwKSxyaWdodDpNYXRoLm1pbihjWzJdWzBdLHcpLHRvcDpNYXRoLm1heChjWzBdWzFdLDApLGJvdHRvbTpNYXRoLm1pbihjWzJdWzFdLGspfTtNLm1pZGRsZT0oTS50b3ArTS5ib3R0b20pLzIsTS5jZW50ZXI9KE0ubGVmdCtNLnJpZ2h0KS8yO3ZhciBBPU1hdGguc3FydCh3KncrayprKSxUPW0uTEFCRUxESVNUQU5DRSpBL01hdGgubWF4KDEsZS5sZW5ndGgvbS5MQUJFTElOQ1JFQVNFKTtkLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9ci5jYWxjVGV4dE9wdHModC5sZXZlbCxiLF8sbyk7bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJwYXRoIikuZWFjaChmdW5jdGlvbigpe3ZhciB0PWkuZ2V0VmlzaWJsZVNlZ21lbnQodGhpcyxNLGUuaGVpZ2h0LzIpO2lmKHQmJiEodC5sZW48KGUud2lkdGgrZS5oZWlnaHQpKm0uTEFCRUxNSU4pKWZvcih2YXIgbj1NYXRoLm1pbihNYXRoLmNlaWwodC5sZW4vVCksbS5MQUJFTE1BWCksYT0wO2E8bjthKyspe3ZhciBvPXIuZmluZEJlc3RUZXh0TG9jYXRpb24odGhpcyx0LGUseCxNKTtpZighbylicmVhaztyLmFkZExhYmVsRGF0YShvLGUseCx5KX19KX0pLF8ucmVtb3ZlKCksci5kcmF3TGFiZWxzKHYseCxvLGcscD95Om51bGwpfWYmJiFoJiZkLnJlbW92ZSgpfShJLE0sdCxvWzBdLHkseiksZnVuY3Rpb24odCxlLHIsbixvKXt2YXIgcz0iY2xpcCIrbi50cmFjZS51aWQsbD1yLnNlbGVjdEFsbCgiIyIrcykuZGF0YShuLnRyYWNlLmNvbm5lY3RnYXBzP1tdOlswXSk7aWYobC5lbnRlcigpLmFwcGVuZCgiY2xpcFBhdGgiKS5jbGFzc2VkKCJjb250b3VyY2xpcCIsITApLmF0dHIoImlkIixzKSxsLmV4aXQoKS5yZW1vdmUoKSwhMT09PW4udHJhY2UuY29ubmVjdGdhcHMpe3ZhciBjPXtsZXZlbDouOSxjcm9zc2luZ3M6e30sc3RhcnRzOltdLGVkZ2VwYXRoczpbXSxwYXRoczpbXSx4YXhpczplLnhheGlzLHlheGlzOmUueWF4aXMseDpuLngseTpuLnksejpmdW5jdGlvbih0KXt2YXIgZSxyLG49dC50cmFjZS5fZW1wdHlwb2ludHMsaT1bXSxhPXQuei5sZW5ndGgsbz10LnpbMF0ubGVuZ3RoLHM9W107Zm9yKGU9MDtlPG87ZSsrKXMucHVzaCgxKTtmb3IoZT0wO2U8YTtlKyspaS5wdXNoKHMuc2xpY2UoKSk7Zm9yKGU9MDtlPG4ubGVuZ3RoO2UrKylyPW5bZV0saVtyWzBdXVtyWzFdXT0wO3JldHVybiB0LnptYXNrPWksaX0obiksc21vb3RoaW5nOjB9O2goW2NdKSxmKFtjXSk7dmFyIHU9eChjLG8pLHA9aS5lbnN1cmVTaW5nbGUobCwicGF0aCIsIiIpO3AuYXR0cigiZCIsdSl9ZWxzZSBzPW51bGw7dC5jYWxsKGEuc2V0Q2xpcFVybCxzKSxlLnBsb3Quc2VsZWN0QWxsKCIuaG0iK24udHJhY2UudWlkKS5jYWxsKGEuc2V0Q2xpcFVybCxzKX0oSSxlLGsuX2NsaXBzLG9bMF0seil9ZnVuY3Rpb24geCh0LGUpe3ZhciByLG4sbyxzLGwsYyx1LGg9ZnVuY3Rpb24odCxlKXt2YXIgcj10LnByZWZpeEJvdW5kYXJ5O2lmKHZvaWQgMD09PXIpe3ZhciBuPU1hdGgubWluKHQuelswXVswXSx0LnpbMF1bMV0pO3I9IXQuZWRnZXBhdGhzLmxlbmd0aCYmbj50LmxldmVsfXJldHVybiByPyJNIitlLmpvaW4oIkwiKSsiWiI6IiJ9KHQsZSksZj0wLHA9dC5lZGdlcGF0aHMubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGV9KSxkPSEwO2Z1bmN0aW9uIGcodCl7cmV0dXJuIE1hdGguYWJzKHRbMV0tZVsyXVsxXSk8LjAxfWZ1bmN0aW9uIG0odCl7cmV0dXJuIE1hdGguYWJzKHRbMF0tZVswXVswXSk8LjAxfWZ1bmN0aW9uIHYodCl7cmV0dXJuIE1hdGguYWJzKHRbMF0tZVsyXVswXSk8LjAxfWZvcig7cC5sZW5ndGg7KXtmb3IoYz1hLnNtb290aG9wZW4odC5lZGdlcGF0aHNbZl0sdC5zbW9vdGhpbmcpLGgrPWQ/YzpjLnJlcGxhY2UoL15NLywiTCIpLHAuc3BsaWNlKHAuaW5kZXhPZihmKSwxKSxyPXQuZWRnZXBhdGhzW2ZdW3QuZWRnZXBhdGhzW2ZdLmxlbmd0aC0xXSxzPS0xLG89MDtvPDQ7bysrKXtpZighcil7aS5sb2coIk1pc3NpbmcgZW5kPyIsZix0KTticmVha31mb3IodT1yLE1hdGguYWJzKHVbMV0tZVswXVsxXSk8LjAxJiYhdihyKT9uPWVbMV06bShyKT9uPWVbMF06ZyhyKT9uPWVbM106dihyKSYmKG49ZVsyXSksbD0wO2w8dC5lZGdlcGF0aHMubGVuZ3RoO2wrKyl7dmFyIHk9dC5lZGdlcGF0aHNbbF1bMF07TWF0aC5hYnMoclswXS1uWzBdKTwuMDE/TWF0aC5hYnMoclswXS15WzBdKTwuMDEmJih5WzFdLXJbMV0pKihuWzFdLXlbMV0pPj0wJiYobj15LHM9bCk6TWF0aC5hYnMoclsxXS1uWzFdKTwuMDE/TWF0aC5hYnMoclsxXS15WzFdKTwuMDEmJih5WzBdLXJbMF0pKihuWzBdLXlbMF0pPj0wJiYobj15LHM9bCk6aS5sb2coImVuZHB0IHRvIG5ld2VuZHB0IGlzIG5vdCB2ZXJ0LiBvciBob3J6LiIscixuLHkpfWlmKHI9bixzPj0wKWJyZWFrO2grPSJMIitufWlmKHM9PT10LmVkZ2VwYXRocy5sZW5ndGgpe2kubG9nKCJ1bmNsb3NlZCBwZXJpbWV0ZXIgcGF0aCIpO2JyZWFrfWY9cywoZD0tMT09PXAuaW5kZXhPZihmKSkmJihmPXBbMF0saCs9IloiKX1mb3IoZj0wO2Y8dC5wYXRocy5sZW5ndGg7ZisrKWgrPWEuc21vb3RoY2xvc2VkKHQucGF0aHNbZl0sdC5zbW9vdGhpbmcpO3JldHVybiBofWZ1bmN0aW9uIGIodCxlLHIsbil7dmFyIGE9ZS53aWR0aC8yLG89ZS5oZWlnaHQvMixzPXQueCxsPXQueSxjPXQudGhldGEsdT1NYXRoLmNvcyhjKSphLGg9TWF0aC5zaW4oYykqYSxmPShzPm4uY2VudGVyP24ucmlnaHQtczpzLW4ubGVmdCkvKHUrTWF0aC5hYnMoTWF0aC5zaW4oYykqbykpLHA9KGw+bi5taWRkbGU/bi5ib3R0b20tbDpsLW4udG9wKS8oTWF0aC5hYnMoaCkrTWF0aC5jb3MoYykqbyk7aWYoZjwxfHxwPDEpcmV0dXJuIDEvMDt2YXIgZD12LkVER0VDT1NUKigxLyhmLTEpKzEvKHAtMSkpO2QrPXYuQU5HTEVDT1NUKmMqYztmb3IodmFyIGc9cy11LG09bC1oLHk9cyt1LHg9bCtoLGI9MDtiPHIubGVuZ3RoO2IrKyl7dmFyIF89cltiXSx3PU1hdGguY29zKF8udGhldGEpKl8ud2lkdGgvMixrPU1hdGguc2luKF8udGhldGEpKl8ud2lkdGgvMixNPTIqaS5zZWdtZW50RGlzdGFuY2UoZyxtLHkseCxfLngtdyxfLnktayxfLngrdyxfLnkraykvKGUuaGVpZ2h0K18uaGVpZ2h0KSxBPV8ubGV2ZWw9PT1lLmxldmVsLFQ9QT92LlNBTUVMRVZFTERJU1RBTkNFOjE7aWYoTTw9VClyZXR1cm4gMS8wO2QrPXYuTkVJR0hCT1JDT1NUKihBP3YuU0FNRUxFVkVMRkFDVE9SOjEpLyhNLVQpfXJldHVybiBkfXIucGxvdD1mdW5jdGlvbih0LGUscixpKXt2YXIgYT1jKHIpO2kuc2VsZWN0QWxsKCJnLmNvbnRvdXIiKS5lYWNoKGZ1bmN0aW9uKHQpe2FbdC50cmFjZS51aWRdfHxuLnNlbGVjdCh0aGlzKS5yZW1vdmUoKX0pO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXkodCxlLHJbb10saSl9LHIubWFrZUNvbnRvdXJHcm91cD1mdW5jdGlvbih0LGUscil7dmFyIG49dC5zZWxlY3RBbGwoImcuY29udG91ci4iK3IpLmRhdGEoZSk7cmV0dXJuIG4uZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJjb250b3VyIiwhMCkuY2xhc3NlZChyLCEwKSxuLmV4aXQoKS5yZW1vdmUoKSxufSxyLmNyZWF0ZUxpbmVzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yWzBdLnNtb290aGluZyxpPXQuc2VsZWN0QWxsKCJnLmNvbnRvdXJsZXZlbCIpLmRhdGEoZT9yOltdKTtpZihpLmV4aXQoKS5yZW1vdmUoKSxpLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiY29udG91cmxldmVsIiwhMCksZSl7dmFyIG89aS5zZWxlY3RBbGwoInBhdGgub3BlbmxpbmUiKS5kYXRhKGZ1bmN0aW9uKHQpe3JldHVybiB0LnBlZGdlcGF0aHN8fHQuZWRnZXBhdGhzfSk7by5leGl0KCkucmVtb3ZlKCksby5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoIm9wZW5saW5lIiwhMCksby5hdHRyKCJkIixmdW5jdGlvbih0KXtyZXR1cm4gYS5zbW9vdGhvcGVuKHQsbil9KS5zdHlsZSgic3Ryb2tlLW1pdGVybGltaXQiLDEpLnN0eWxlKCJ2ZWN0b3ItZWZmZWN0Iiwibm9uLXNjYWxpbmctc3Ryb2tlIik7dmFyIHM9aS5zZWxlY3RBbGwoInBhdGguY2xvc2VkbGluZSIpLmRhdGEoZnVuY3Rpb24odCl7cmV0dXJuIHQucHBhdGhzfHx0LnBhdGhzfSk7cy5leGl0KCkucmVtb3ZlKCkscy5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoImNsb3NlZGxpbmUiLCEwKSxzLmF0dHIoImQiLGZ1bmN0aW9uKHQpe3JldHVybiBhLnNtb290aGNsb3NlZCh0LG4pfSkuc3R5bGUoInN0cm9rZS1taXRlcmxpbWl0IiwxKS5zdHlsZSgidmVjdG9yLWVmZmVjdCIsIm5vbi1zY2FsaW5nLXN0cm9rZSIpfXJldHVybiBpfSxyLmNyZWF0ZUxpbmVDbGlwPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPWU/ImNsaXBsaW5lIituOm51bGwsbz1yLnNlbGVjdEFsbCgiIyIraSkuZGF0YShlP1swXTpbXSk7cmV0dXJuIG8uZXhpdCgpLnJlbW92ZSgpLG8uZW50ZXIoKS5hcHBlbmQoImNsaXBQYXRoIikuY2xhc3NlZCgiY29udG91cmxpbmVjbGlwIiwhMCkuYXR0cigiaWQiLGkpLGEuc2V0Q2xpcFVybCh0LGkpLG99LHIubGFiZWxGb3JtYXR0ZXI9ZnVuY3Rpb24odCxlLHIpe2lmKHQubGFiZWxmb3JtYXQpcmV0dXJuIHIuX2QzbG9jYWxlLm51bWJlckZvcm1hdCh0LmxhYmVsZm9ybWF0KTt2YXIgbjtpZihlKW49ZS5heGlzO2Vsc2V7aWYobj17dHlwZToibGluZWFyIixfaWQ6Inljb250b3VyIixzaG93ZXhwb25lbnQ6ImFsbCIsZXhwb25lbnRmb3JtYXQ6IkIifSwiY29uc3RyYWludCI9PT10LnR5cGUpe3ZhciBpPXQudmFsdWU7QXJyYXkuaXNBcnJheShpKT9uLnJhbmdlPVtpWzBdLGlbaS5sZW5ndGgtMV1dOm4ucmFuZ2U9W2ksaV19ZWxzZSBuLnJhbmdlPVt0LnN0YXJ0LHQuZW5kXSxuLm50aWNrcz0odC5lbmQtdC5zdGFydCkvdC5zaXplO24ucmFuZ2VbMF09PT1uLnJhbmdlWzFdJiYobi5yYW5nZVsxXSs9bi5yYW5nZVswXXx8MSksbi5udGlja3N8fChuLm50aWNrcz0xZTMpLGwobixyKSxzLnByZXBUaWNrcyhuKSxuLl90bWluPW51bGwsbi5fdG1heD1udWxsfXJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gcy50aWNrVGV4dChuLHQpLnRleHR9fSxyLmNhbGNUZXh0T3B0cz1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1lKHQpO3IudGV4dChpKS5jYWxsKG8uY29udmVydFRvVHNwYW5zLG4pO3ZhciBzPWEuYkJveChyLm5vZGUoKSwhMCk7cmV0dXJue3RleHQ6aSx3aWR0aDpzLndpZHRoLGhlaWdodDpzLmhlaWdodCxsZXZlbDp0LGR5OihzLnRvcCtzLmJvdHRvbSkvMn19LHIuZmluZEJlc3RUZXh0TG9jYXRpb249ZnVuY3Rpb24odCxlLHIsbixhKXt2YXIgbyxzLGwsYyx1LGg9ci53aWR0aDtlLmlzQ2xvc2VkPyhzPWUubGVuL3YuSU5JVElBTFNFQVJDSFBPSU5UUyxvPWUubWluK3MvMixsPWUubWF4KToocz0oZS5sZW4taCkvKHYuSU5JVElBTFNFQVJDSFBPSU5UUysxKSxvPWUubWluK3MraC8yLGw9ZS5tYXgtKHMraCkvMik7Zm9yKHZhciBmPTEvMCxwPTA7cDx2LklURVJBVElPTlM7cCsrKXtmb3IodmFyIGQ9bztkPGw7ZCs9cyl7dmFyIGc9aS5nZXRUZXh0TG9jYXRpb24odCxlLnRvdGFsLGQsaCksbT1iKGcscixuLGEpO208ZiYmKGY9bSx1PWcsYz1kKX1pZihmPjIqdi5NQVhDT1NUKWJyZWFrO3AmJihzLz0yKSxsPShvPWMtcy8yKSsxLjUqc31pZihmPD12Lk1BWENPU1QpcmV0dXJuIHV9LHIuYWRkTGFiZWxEYXRhPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPWUud2lkdGgvMixhPWUuaGVpZ2h0LzIsbz10Lngscz10LnksbD10LnRoZXRhLGM9TWF0aC5zaW4obCksdT1NYXRoLmNvcyhsKSxoPWkqdSxmPWEqYyxwPWkqYyxkPS1hKnUsZz1bW28taC1mLHMtcC1kXSxbbytoLWYscytwLWRdLFtvK2grZixzK3ArZF0sW28taCtmLHMtcCtkXV07ci5wdXNoKHt0ZXh0OmUudGV4dCx4Om8seTpzLGR5OmUuZHksdGhldGE6bCxsZXZlbDplLmxldmVsLHdpZHRoOmUud2lkdGgsaGVpZ2h0OmUuaGVpZ2h0fSksbi5wdXNoKGcpfSxyLmRyYXdMYWJlbHM9ZnVuY3Rpb24odCxlLHIsYSxzKXt2YXIgbD10LnNlbGVjdEFsbCgidGV4dCIpLmRhdGEoZSxmdW5jdGlvbih0KXtyZXR1cm4gdC50ZXh0KyIsIit0LngrIiwiK3QueSsiLCIrdC50aGV0YX0pO2lmKGwuZXhpdCgpLnJlbW92ZSgpLGwuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5hdHRyKHsiZGF0YS1ub3RleCI6MSwidGV4dC1hbmNob3IiOiJtaWRkbGUifSkuZWFjaChmdW5jdGlvbih0KXt2YXIgZT10LngrTWF0aC5zaW4odC50aGV0YSkqdC5keSxpPXQueS1NYXRoLmNvcyh0LnRoZXRhKSp0LmR5O24uc2VsZWN0KHRoaXMpLnRleHQodC50ZXh0KS5hdHRyKHt4OmUseTppLHRyYW5zZm9ybToicm90YXRlKCIrMTgwKnQudGhldGEvTWF0aC5QSSsiICIrZSsiICIraSsiKSJ9KS5jYWxsKG8uY29udmVydFRvVHNwYW5zLHIpfSkscyl7Zm9yKHZhciBjPSIiLHU9MDt1PHMubGVuZ3RoO3UrKyljKz0iTSIrc1t1XS5qb2luKCJMIikrIloiO2kuZW5zdXJlU2luZ2xlKGEsInBhdGgiLCIiKS5hdHRyKCJkIixjKX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NTgzLCIuLi8uLi9saWIiOjY4NCwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo3MDgsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3MzIsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9zZXRfY29udmVydCI6NzUwLCIuLi8uLi9wbG90cy9nZXRfZGF0YSI6NzY4LCIuLi9oZWF0bWFwL3Bsb3QiOjkzNywiLi9jbG9zZV9ib3VuZGFyaWVzIjo4OTgsIi4vY29uc3RhbnRzIjo5MDAsIi4vY29udmVydF90b19jb25zdHJhaW50cyI6OTA0LCIuL2VtcHR5X3BhdGhpbmZvIjo5MDYsIi4vZmluZF9hbGxfcGF0aHMiOjkwOCwiLi9tYWtlX2Nyb3NzaW5ncyI6OTEzLGQzOjE0N31dLDkxNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGk9dCgiLi4vLi4vbGliIik7ZnVuY3Rpb24gYSh0LGUscil7dmFyIGk9e3R5cGU6ImxpbmVhciIscmFuZ2U6W3QsZV19O3JldHVybiBuLmF1dG9UaWNrcyhpLChlLXQpLyhyfHwxNSkpLGl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuY29udG91cnM7aWYodC5hdXRvY29udG91cil7dmFyIHI9dC56bWluLG89dC56bWF4O3ZvaWQgMCE9PXImJnZvaWQgMCE9PW98fChyPWkuYWdnTnVtcyhNYXRoLm1pbixudWxsLHQuX3opLG89aS5hZ2dOdW1zKE1hdGgubWF4LG51bGwsdC5feikpO3ZhciBzPWEocixvLHQubmNvbnRvdXJzKTtlLnNpemU9cy5kdGljayxlLnN0YXJ0PW4udGlja0ZpcnN0KHMpLHMucmFuZ2UucmV2ZXJzZSgpLGUuZW5kPW4udGlja0ZpcnN0KHMpLGUuc3RhcnQ9PT1yJiYoZS5zdGFydCs9ZS5zaXplKSxlLmVuZD09PW8mJihlLmVuZC09ZS5zaXplKSxlLnN0YXJ0PmUuZW5kJiYoZS5zdGFydD1lLmVuZD0oZS5zdGFydCtlLmVuZCkvMiksdC5faW5wdXQuY29udG91cnN8fCh0Ll9pbnB1dC5jb250b3Vycz17fSksaS5leHRlbmRGbGF0KHQuX2lucHV0LmNvbnRvdXJzLHtzdGFydDplLnN0YXJ0LGVuZDplLmVuZCxzaXplOmUuc2l6ZX0pLHQuX2lucHV0LmF1dG9jb250b3VyPSEwfWVsc2UgaWYoImNvbnN0cmFpbnQiIT09ZS50eXBlKXt2YXIgbCxjPWUuc3RhcnQsdT1lLmVuZCxoPXQuX2lucHV0LmNvbnRvdXJzO2lmKGM+dSYmKGUuc3RhcnQ9aC5zdGFydD11LHU9ZS5lbmQ9aC5lbmQ9YyxjPWUuc3RhcnQpLCEoZS5zaXplPjApKWw9Yz09PXU/MTphKGMsdSx0Lm5jb250b3VycykuZHRpY2ssaC5zaXplPWUuc2l6ZT1sfX19LHsiLi4vLi4vbGliIjo2ODQsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3MzJ9XSw5MTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGE9dCgiLi4vaGVhdG1hcC9zdHlsZSIpLG89dCgiLi9tYWtlX2NvbG9yX21hcCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0KS5zZWxlY3RBbGwoImcuY29udG91ciIpO2Uuc3R5bGUoIm9wYWNpdHkiLGZ1bmN0aW9uKHQpe3JldHVybiB0LnRyYWNlLm9wYWNpdHl9KSxlLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9bi5zZWxlY3QodGhpcykscj10LnRyYWNlLGE9ci5jb250b3VycyxzPXIubGluZSxsPWEuc2l6ZXx8MSxjPWEuc3RhcnQsdT0iY29uc3RyYWludCI9PT1hLnR5cGUsaD0hdSYmImxpbmVzIj09PWEuY29sb3JpbmcsZj0hdSYmImZpbGwiPT09YS5jb2xvcmluZyxwPWh8fGY/byhyKTpudWxsO2Uuc2VsZWN0QWxsKCJnLmNvbnRvdXJsZXZlbCIpLmVhY2goZnVuY3Rpb24odCl7bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJwYXRoIikuY2FsbChpLmxpbmVHcm91cFN0eWxlLHMud2lkdGgsaD9wKHQubGV2ZWwpOnMuY29sb3Iscy5kYXNoKX0pO3ZhciBkPWEubGFiZWxmb250O2lmKGUuc2VsZWN0QWxsKCJnLmNvbnRvdXJsYWJlbHMgdGV4dCIpLmVhY2goZnVuY3Rpb24odCl7aS5mb250KG4uc2VsZWN0KHRoaXMpLHtmYW1pbHk6ZC5mYW1pbHksc2l6ZTpkLnNpemUsY29sb3I6ZC5jb2xvcnx8KGg/cCh0LmxldmVsKTpzLmNvbG9yKX0pfSksdSllLnNlbGVjdEFsbCgiZy5jb250b3VyZmlsbCBwYXRoIikuc3R5bGUoImZpbGwiLHIuZmlsbGNvbG9yKTtlbHNlIGlmKGYpe3ZhciBnO2Uuc2VsZWN0QWxsKCJnLmNvbnRvdXJmaWxsIHBhdGgiKS5zdHlsZSgiZmlsbCIsZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PWcmJihnPXQubGV2ZWwpLHAodC5sZXZlbCsuNSpsKX0pLHZvaWQgMD09PWcmJihnPWMpLGUuc2VsZWN0QWxsKCJnLmNvbnRvdXJiZyBwYXRoIikuc3R5bGUoImZpbGwiLHAoZy0uNSpsKSl9fSksYSh0KX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo1ODMsIi4uL2hlYXRtYXAvc3R5bGUiOjkzOCwiLi9tYWtlX2NvbG9yX21hcCI6OTEyLGQzOjE0N31dLDkxNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiKSxpPXQoIi4vbGFiZWxfZGVmYXVsdHMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSxvKXt2YXIgcyxsPXIoImNvbnRvdXJzLmNvbG9yaW5nIiksYz0iIjsiZmlsbCI9PT1sJiYocz1yKCJjb250b3Vycy5zaG93bGluZXMiKSksITEhPT1zJiYoImxpbmVzIiE9PWwmJihjPXIoImxpbmUuY29sb3IiLCIjMDAwIikpLHIoImxpbmUud2lkdGgiLC41KSxyKCJsaW5lLmRhc2giKSksIm5vbmUiIT09bCYmbih0LGUsYSxyLHtwcmVmaXg6IiIsY0xldHRlcjoieiJ9KSxyKCJsaW5lLnNtb290aGluZyIpLGkocixhLGMsbyl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyI6NTY4LCIuL2xhYmVsX2RlZmF1bHRzIjo5MTF9XSw5MTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vaGVhdG1hcC9hdHRyaWJ1dGVzIiksaT10KCIuLi9jb250b3VyL2F0dHJpYnV0ZXMiKSxhPWkuY29udG91cnMsbz10KCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIiksbD10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXMiKSxjPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LHU9by5saW5lO2UuZXhwb3J0cz1jKHtjYXJwZXQ6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImNhbGMifSx6Om4ueixhOm4ueCxhMDpuLngwLGRhOm4uZHgsYjpuLnksYjA6bi55MCxkYjpuLmR5LHRleHQ6bi50ZXh0LHRyYW5zcG9zZTpuLnRyYW5zcG9zZSxhdHlwZTpuLnh0eXBlLGJ0eXBlOm4ueXR5cGUsZmlsbGNvbG9yOmkuZmlsbGNvbG9yLGF1dG9jb250b3VyOmkuYXV0b2NvbnRvdXIsbmNvbnRvdXJzOmkubmNvbnRvdXJzLGNvbnRvdXJzOnt0eXBlOmEudHlwZSxzdGFydDphLnN0YXJ0LGVuZDphLmVuZCxzaXplOmEuc2l6ZSxjb2xvcmluZzp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZmlsbCIsImxpbmVzIiwibm9uZSJdLGRmbHQ6ImZpbGwiLGVkaXRUeXBlOiJjYWxjIn0sc2hvd2xpbmVzOmEuc2hvd2xpbmVzLHNob3dsYWJlbHM6YS5zaG93bGFiZWxzLGxhYmVsZm9udDphLmxhYmVsZm9udCxsYWJlbGZvcm1hdDphLmxhYmVsZm9ybWF0LG9wZXJhdGlvbjphLm9wZXJhdGlvbix2YWx1ZTphLnZhbHVlLGVkaXRUeXBlOiJjYWxjIixpbXBsaWVkRWRpdHM6e2F1dG9jb250b3VyOiExfX0sbGluZTp7Y29sb3I6Yyh7fSx1LmNvbG9yLHt9KSx3aWR0aDp1LndpZHRoLGRhc2g6dS5kYXNoLHNtb290aGluZzpjKHt9LHUuc21vb3RoaW5nLHt9KSxlZGl0VHlwZToicGxvdCJ9fSxzKCIiLHtjTGV0dGVyOiJ6IixhdXRvQ29sb3JEZmx0OiExfSkse2NvbG9yYmFyOmx9KX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXMiOjU1OSwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiOjU2NSwiLi4vLi4vbGliL2V4dGVuZCI6NjczLCIuLi9jb250b3VyL2F0dHJpYnV0ZXMiOjg5NiwiLi4vaGVhdG1hcC9hdHRyaWJ1dGVzIjo5MjUsIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyI6MTAxNX1dLDkxOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyIpLGk9dCgiLi4vLi4vbGliIikuaXNBcnJheTFELGE9dCgiLi4vaGVhdG1hcC9jb252ZXJ0X2NvbHVtbl94eXoiKSxvPXQoIi4uL2hlYXRtYXAvY2xlYW5fMmRfYXJyYXkiKSxzPXQoIi4uL2hlYXRtYXAvbWF4X3Jvd19sZW5ndGgiKSxsPXQoIi4uL2hlYXRtYXAvaW50ZXJwMmQiKSxjPXQoIi4uL2hlYXRtYXAvZmluZF9lbXB0aWVzIiksdT10KCIuLi9oZWF0bWFwL21ha2VfYm91bmRfYXJyYXkiKSxoPXQoIi4vZGVmYXVsdHMiKSxmPXQoIi4uL2NhcnBldC9sb29rdXBfY2FycGV0aWQiKSxwPXQoIi4uL2NvbnRvdXIvc2V0X2NvbnRvdXJzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5fY2FycGV0VHJhY2U9Zih0LGUpO2lmKHImJnIudmlzaWJsZSYmImxlZ2VuZG9ubHkiIT09ci52aXNpYmxlKXtpZighZS5hfHwhZS5iKXt2YXIgZD10LmRhdGFbci5pbmRleF0sZz10LmRhdGFbZS5pbmRleF07Zy5hfHwoZy5hPWQuYSksZy5ifHwoZy5iPWQuYiksaChnLGUsZS5fZGVmYXVsdENvbG9yLHQuX2Z1bGxMYXlvdXQpfXZhciBtPWZ1bmN0aW9uKHQsZSl7dmFyIHIsaCxmLHAsZCxnLG0sdj1lLl9jYXJwZXRUcmFjZSx5PXYuYWF4aXMseD12LmJheGlzO3kuX21pbkR0aWNrPTAseC5fbWluRHRpY2s9MCxpKGUueikmJmEoZSx5LHgsImEiLCJiIixbInoiXSk7cj1lLl9hPWUuX2F8fGUuYSxwPWUuX2I9ZS5fYnx8ZS5iLHI9cj95Lm1ha2VDYWxjZGF0YShlLCJfYSIpOltdLHA9cD94Lm1ha2VDYWxjZGF0YShlLCJfYiIpOltdLGg9ZS5hMHx8MCxmPWUuZGF8fDEsZD1lLmIwfHwwLGc9ZS5kYnx8MSxtPWUuX3o9byhlLl96fHxlLnosZS50cmFuc3Bvc2UpLGUuX2VtcHR5cG9pbnRzPWMobSksbChtLGUuX2VtcHR5cG9pbnRzKTt2YXIgYj1zKG0pLF89InNjYWxlZCI9PT1lLnh0eXBlPyIiOnIsdz11KGUsXyxoLGYsYix5KSxrPSJzY2FsZWQiPT09ZS55dHlwZT8iIjpwLE09dShlLGssZCxnLG0ubGVuZ3RoLHgpLEE9e2E6dyxiOk0sejptfTsibGV2ZWxzIj09PWUuY29udG91cnMudHlwZSYmIm5vbmUiIT09ZS5jb250b3Vycy5jb2xvcmluZyYmbihlLG0sIiIsInoiKTtyZXR1cm5bQV19KDAsZSk7cmV0dXJuIHAoZSksbX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIjo1NjYsIi4uLy4uL2xpYiI6Njg0LCIuLi9jYXJwZXQvbG9va3VwX2NhcnBldGlkIjo4NzQsIi4uL2NvbnRvdXIvc2V0X2NvbnRvdXJzIjo5MTUsIi4uL2hlYXRtYXAvY2xlYW5fMmRfYXJyYXkiOjkyNywiLi4vaGVhdG1hcC9jb252ZXJ0X2NvbHVtbl94eXoiOjkyOSwiLi4vaGVhdG1hcC9maW5kX2VtcHRpZXMiOjkzMSwiLi4vaGVhdG1hcC9pbnRlcnAyZCI6OTM0LCIuLi9oZWF0bWFwL21ha2VfYm91bmRfYXJyYXkiOjkzNSwiLi4vaGVhdG1hcC9tYXhfcm93X2xlbmd0aCI6OTM2LCIuL2RlZmF1bHRzIjo5MjB9XSw5MjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi9oZWF0bWFwL3h5el9kZWZhdWx0cyIpLGE9dCgiLi9hdHRyaWJ1dGVzIiksbz10KCIuLi9jb250b3VyL2NvbnN0cmFpbnRfZGVmYXVsdHMiKSxzPXQoIi4uL2NvbnRvdXIvY29udG91cnNfZGVmYXVsdHMiKSxsPXQoIi4uL2NvbnRvdXIvc3R5bGVfZGVmYXVsdHMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYyl7ZnVuY3Rpb24gdShyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsYSxyLGkpfWlmKHUoImNhcnBldCIpLHQuYSYmdC5iKXtpZighaSh0LGUsdSxjLCJhIiwiYiIpKXJldHVybiB2b2lkKGUudmlzaWJsZT0hMSk7dSgidGV4dCIpO3ZhciBoPSJjb25zdHJhaW50Ij09PXUoImNvbnRvdXJzLnR5cGUiKTtofHxkZWxldGUgZS5zaG93bGVnZW5kLGg/byh0LGUsdSxjLHIse2hhc0hvdmVyOiExfSk6KHModCxlLHUsZnVuY3Rpb24ocil7cmV0dXJuIG4uY29lcmNlMih0LGUsYSxyKX0pLGwodCxlLHUsYyx7aGFzSG92ZXI6ITF9KSl9ZWxzZSBlLl9kZWZhdWx0Q29sb3I9cixlLl9sZW5ndGg9bnVsbH19LHsiLi4vLi4vbGliIjo2ODQsIi4uL2NvbnRvdXIvY29uc3RyYWludF9kZWZhdWx0cyI6OTAxLCIuLi9jb250b3VyL2NvbnRvdXJzX2RlZmF1bHRzIjo5MDMsIi4uL2NvbnRvdXIvc3R5bGVfZGVmYXVsdHMiOjkxNywiLi4vaGVhdG1hcC94eXpfZGVmYXVsdHMiOjk0MCwiLi9hdHRyaWJ1dGVzIjo5MTh9XSw5MjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoIi4vYXR0cmlidXRlcyIpLG4uc3VwcGx5RGVmYXVsdHM9dCgiLi9kZWZhdWx0cyIpLG4uY29sb3JiYXI9dCgiLi4vY29udG91ci9jb2xvcmJhciIpLG4uY2FsYz10KCIuL2NhbGMiKSxuLnBsb3Q9dCgiLi9wbG90Iiksbi5zdHlsZT10KCIuLi9jb250b3VyL3N0eWxlIiksbi5tb2R1bGVUeXBlPSJ0cmFjZSIsbi5uYW1lPSJjb250b3VyY2FycGV0IixuLmJhc2VQbG90TW9kdWxlPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiIpLG4uY2F0ZWdvcmllcz1bImNhcnRlc2lhbiIsInN2ZyIsImNhcnBldCIsImNvbnRvdXIiLCJzeW1ib2xzIiwic2hvd0xlZ2VuZCIsImhhc0xpbmVzIiwiY2FycGV0RGVwZW5kZW50Il0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbiI6NzQzLCIuLi9jb250b3VyL2NvbG9yYmFyIjo4OTksIi4uL2NvbnRvdXIvc3R5bGUiOjkxNiwiLi9hdHRyaWJ1dGVzIjo5MTgsIi4vY2FsYyI6OTE5LCIuL2RlZmF1bHRzIjo5MjAsIi4vcGxvdCI6OTI0fV0sOTIyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGk9dCgiLi4vY2FycGV0L2F4aXNfYWxpZ25lZF9saW5lIiksYT10KCIuLi8uLi9saWIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyxzLGwsYyx1KXt2YXIgaCxmLHAsZCxnLG0sdix5PSIiLHg9ZS5lZGdlcGF0aHMubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGV9KSxiPSEwLF89MWUtNCpNYXRoLmFicyhyWzBdWzBdLXJbMl1bMF0pLHc9MWUtNCpNYXRoLmFicyhyWzBdWzFdLXJbMl1bMV0pO2Z1bmN0aW9uIGsodCl7cmV0dXJuIE1hdGguYWJzKHRbMV0tclswXVsxXSk8d31mdW5jdGlvbiBNKHQpe3JldHVybiBNYXRoLmFicyh0WzFdLXJbMl1bMV0pPHd9ZnVuY3Rpb24gQSh0KXtyZXR1cm4gTWF0aC5hYnModFswXS1yWzBdWzBdKTxffWZ1bmN0aW9uIFQodCl7cmV0dXJuIE1hdGguYWJzKHRbMF0tclsyXVswXSk8X31mdW5jdGlvbiBTKHQsZSl7dmFyIHIsbixhLG8saD0iIjtmb3Ioayh0KSYmIVQodCl8fE0odCkmJiFBKHQpPyhvPXMuYWF4aXMsYT1pKHMsbCxbdFswXSxlWzBdXSwuNSoodFsxXStlWzFdKSkpOihvPXMuYmF4aXMsYT1pKHMsbCwuNSoodFswXStlWzBdKSxbdFsxXSxlWzFdXSkpLHI9MTtyPGEubGVuZ3RoO3IrKylmb3IoaCs9by5zbW9vdGhpbmc/IkMiOiJMIixuPTA7bjxhW3JdLmxlbmd0aDtuKyspe3ZhciBmPWFbcl1bbl07aCs9W2MuYzJwKGZbMF0pLHUuYzJwKGZbMV0pXSsiICJ9cmV0dXJuIGh9Zm9yKGg9MCxmPW51bGw7eC5sZW5ndGg7KXt2YXIgRT1lLmVkZ2VwYXRoc1toXVswXTtmb3IoZiYmKHkrPVMoZixFKSksdj1uLnNtb290aG9wZW4oZS5lZGdlcGF0aHNbaF0ubWFwKG8pLGUuc21vb3RoaW5nKSx5Kz1iP3Y6di5yZXBsYWNlKC9eTS8sIkwiKSx4LnNwbGljZSh4LmluZGV4T2YoaCksMSksZj1lLmVkZ2VwYXRoc1toXVtlLmVkZ2VwYXRoc1toXS5sZW5ndGgtMV0sZz0tMSxkPTA7ZDw0O2QrKyl7aWYoIWYpe2EubG9nKCJNaXNzaW5nIGVuZD8iLGgsZSk7YnJlYWt9Zm9yKGsoZikmJiFUKGYpP3A9clsxXTpBKGYpP3A9clswXTpNKGYpP3A9clszXTpUKGYpJiYocD1yWzJdKSxtPTA7bTxlLmVkZ2VwYXRocy5sZW5ndGg7bSsrKXt2YXIgQz1lLmVkZ2VwYXRoc1ttXVswXTtNYXRoLmFicyhmWzBdLXBbMF0pPF8/TWF0aC5hYnMoZlswXS1DWzBdKTxfJiYoQ1sxXS1mWzFdKSoocFsxXS1DWzFdKT49MCYmKHA9QyxnPW0pOk1hdGguYWJzKGZbMV0tcFsxXSk8dz9NYXRoLmFicyhmWzFdLUNbMV0pPHcmJihDWzBdLWZbMF0pKihwWzBdLUNbMF0pPj0wJiYocD1DLGc9bSk6YS5sb2coImVuZHB0IHRvIG5ld2VuZHB0IGlzIG5vdCB2ZXJ0LiBvciBob3J6LiIsZixwLEMpfWlmKGc+PTApYnJlYWs7eSs9UyhmLHApLGY9cH1pZihnPT09ZS5lZGdlcGF0aHMubGVuZ3RoKXthLmxvZygidW5jbG9zZWQgcGVyaW1ldGVyIHBhdGgiKTticmVha31oPWcsKGI9LTE9PT14LmluZGV4T2YoaCkpJiYoaD14WzBdLHkrPVMoZixwKSsiWiIsZj1udWxsKX1mb3IoaD0wO2g8ZS5wYXRocy5sZW5ndGg7aCsrKXkrPW4uc21vb3RoY2xvc2VkKGUucGF0aHNbaF0ubWFwKG8pLGUuc21vb3RoaW5nKTtyZXR1cm4geX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo1ODMsIi4uLy4uL2xpYiI6Njg0LCIuLi9jYXJwZXQvYXhpc19hbGlnbmVkX2xpbmUiOjg1OH1dLDkyMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGksYSxvLHMsbCxjLHU7Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKyl7Zm9yKG89KGE9dFtyXSkucGVkZ2VwYXRocz1bXSxzPWEucHBhdGhzPVtdLG49MDtuPGEuZWRnZXBhdGhzLmxlbmd0aDtuKyspe2Zvcih1PWEuZWRnZXBhdGhzW25dLGw9W10saT0wO2k8dS5sZW5ndGg7aSsrKWxbaV09ZSh1W2ldKTtvLnB1c2gobCl9Zm9yKG49MDtuPGEucGF0aHMubGVuZ3RoO24rKyl7Zm9yKHU9YS5wYXRoc1tuXSxjPVtdLGk9MDtpPHUubGVuZ3RoO2krKyljW2ldPWUodVtpXSk7cy5wdXNoKGMpfX19fSx7fV0sOTI0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCIuLi9jYXJwZXQvbWFwXzFkX2FycmF5IiksYT10KCIuLi9jYXJwZXQvbWFrZXBhdGgiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLHM9dCgiLi4vLi4vbGliIiksbD10KCIuLi8uLi9wbG90cy9nZXRfZGF0YSIpLmdldFVpZHNGcm9tQ2FsY0RhdGEsYz10KCIuLi9jb250b3VyL21ha2VfY3Jvc3NpbmdzIiksdT10KCIuLi9jb250b3VyL2ZpbmRfYWxsX3BhdGhzIiksaD10KCIuLi9jb250b3VyL3Bsb3QiKSxmPXQoIi4uL2NvbnRvdXIvY29uc3RhbnRzIikscD10KCIuLi9jb250b3VyL2NvbnZlcnRfdG9fY29uc3RyYWludHMiKSxkPXQoIi4vam9pbl9hbGxfcGF0aHMiKSxnPXQoIi4uL2NvbnRvdXIvZW1wdHlfcGF0aGluZm8iKSxtPXQoIi4vbWFwX3BhdGhpbmZvIiksdj10KCIuLi9jYXJwZXQvbG9va3VwX2NhcnBldGlkIikseT10KCIuLi9jb250b3VyL2Nsb3NlX2JvdW5kYXJpZXMiKTtmdW5jdGlvbiB4KHQsZSxyLGwpe3ZhciB4PXJbMF0udHJhY2Usaz14Ll9jYXJwZXRUcmFjZT12KHQseCksTT10LmNhbGNkYXRhW2suaW5kZXhdWzBdO2lmKGsudmlzaWJsZSYmImxlZ2VuZG9ubHkiIT09ay52aXNpYmxlKXt2YXIgQT1yWzBdLmEsVD1yWzBdLmIsUz14LmNvbnRvdXJzLEU9eC51aWQsQz1lLnhheGlzLEw9ZS55YXhpcyx6PSJjb250b3VyIitFLFA9ZyhTLGUsclswXSksST0iY29uc3RyYWludCI9PT1TLnR5cGUsTz1TLl9vcGVyYXRpb24sRD1JPyI9Ij09PU8/ImxpbmVzIjoiZmlsbCI6Uy5jb2xvcmluZyxSPVtbQVswXSxUW1QubGVuZ3RoLTFdXSxbQVtBLmxlbmd0aC0xXSxUW1QubGVuZ3RoLTFdXSxbQVtBLmxlbmd0aC0xXSxUWzBdXSxbQVswXSxUWzBdXV07YyhQKTt2YXIgQj0xZS04KihBW0EubGVuZ3RoLTFdLUFbMF0pLEY9MWUtOCooVFtULmxlbmd0aC0xXS1UWzBdKTt1KFAsQixGKTt2YXIgTj1QOyJjb25zdHJhaW50Ij09PVMudHlwZSYmKE49cChQLE8pLHkoTixPLFIseCkpLG0oUCxZKTt2YXIgaixWLFUscSxIPWgubWFrZUNvbnRvdXJHcm91cChsLHIseiksRz1bXTtmb3IocT1NLmNsaXBzZWdtZW50cy5sZW5ndGgtMTtxPj0wO3EtLSlqPU0uY2xpcHNlZ21lbnRzW3FdLFY9aShbXSxqLngsQy5jMnApLFU9aShbXSxqLnksTC5jMnApLFYucmV2ZXJzZSgpLFUucmV2ZXJzZSgpLEcucHVzaChhKFYsVSxqLmJpY3ViaWMpKTt2YXIgVz0iTSIrRy5qb2luKCJMIikrIloiOyFmdW5jdGlvbih0LGUscixuLG8sbCl7dmFyIGMsdSxoLGYscD1zLmVuc3VyZVNpbmdsZSh0LCJnIiwiY29udG91cmJnIikuc2VsZWN0QWxsKCJwYXRoIikuZGF0YSgiZmlsbCIhPT1sfHxvP1tdOlswXSk7cC5lbnRlcigpLmFwcGVuZCgicGF0aCIpLHAuZXhpdCgpLnJlbW92ZSgpO3ZhciBkPVtdO2ZvcihmPTA7ZjxlLmxlbmd0aDtmKyspYz1lW2ZdLHU9aShbXSxjLngsci5jMnApLGg9aShbXSxjLnksbi5jMnApLGQucHVzaChhKHUsaCxjLmJpY3ViaWMpKTtwLmF0dHIoImQiLCJNIitkLmpvaW4oIkwiKSsiWiIpLnN0eWxlKCJzdHJva2UiLCJub25lIil9KEgsTS5jbGlwc2VnbWVudHMsQyxMLEksRCksZnVuY3Rpb24odCxlLHIsaSxhLG8sbCxjLHUsaCxmKXt2YXIgcD1zLmVuc3VyZVNpbmdsZShlLCJnIiwiY29udG91cmZpbGwiKS5zZWxlY3RBbGwoInBhdGgiKS5kYXRhKCJmaWxsIj09PWg/YTpbXSk7cC5lbnRlcigpLmFwcGVuZCgicGF0aCIpLHAuZXhpdCgpLnJlbW92ZSgpLHAuZWFjaChmdW5jdGlvbihlKXt2YXIgYT1kKHQsZSxvLGwsYyx1LHIsaSk7ZS5wcmVmaXhCb3VuZGFyeSYmKGE9ZithKSxhP24uc2VsZWN0KHRoaXMpLmF0dHIoImQiLGEpLnN0eWxlKCJzdHJva2UiLCJub25lIik6bi5zZWxlY3QodGhpcykucmVtb3ZlKCl9KX0oeCxILEMsTCxOLFIsWSxrLE0sRCxXKSxmdW5jdGlvbih0LGUscixpLGEsbCxjKXt2YXIgdT1zLmVuc3VyZVNpbmdsZSh0LCJnIiwiY29udG91cmxpbmVzIikscD0hMSE9PWEuc2hvd2xpbmVzLGQ9YS5zaG93bGFiZWxzLGc9cCYmZCxtPWguY3JlYXRlTGluZXModSxwfHxkLGUpLHY9aC5jcmVhdGVMaW5lQ2xpcCh1LGcsci5fZnVsbExheW91dC5fZGVmcyxpLnRyYWNlLnVpZCkseT10LnNlbGVjdEFsbCgiZy5jb250b3VybGFiZWxzIikuZGF0YShkP1swXTpbXSk7aWYoeS5leGl0KCkucmVtb3ZlKCkseS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImNvbnRvdXJsYWJlbHMiLCEwKSxkKXt2YXIgeD1sLnhheGlzLGs9bC55YXhpcyxNPXguX2xlbmd0aCxBPWsuX2xlbmd0aCxUPVtbWzAsMF0sW00sMF0sW00sQV0sWzAsQV1dXSxTPVtdO3MuY2xlYXJMb2NhdGlvbkNhY2hlKCk7dmFyIEU9aC5sYWJlbEZvcm1hdHRlcihhLGkudC5jYixyLl9mdWxsTGF5b3V0KSxDPW8udGVzdGVyLmFwcGVuZCgidGV4dCIpLmF0dHIoImRhdGEtbm90ZXgiLDEpLmNhbGwoby5mb250LGEubGFiZWxmb250KSxMPXtsZWZ0OjAscmlnaHQ6TSxjZW50ZXI6TS8yLHRvcDowLGJvdHRvbTpBLG1pZGRsZTpBLzJ9LHo9TWF0aC5zcXJ0KE0qTStBKkEpLFA9Zi5MQUJFTERJU1RBTkNFKnovTWF0aC5tYXgoMSxlLmxlbmd0aC9mLkxBQkVMSU5DUkVBU0UpO20uZWFjaChmdW5jdGlvbih0KXt2YXIgZT1oLmNhbGNUZXh0T3B0cyh0LmxldmVsLEUsQyxyKTtuLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoInBhdGgiKS5lYWNoKGZ1bmN0aW9uKHIpe3ZhciBuPXMuZ2V0VmlzaWJsZVNlZ21lbnQodGhpcyxMLGUuaGVpZ2h0LzIpO2lmKG4mJihmdW5jdGlvbih0LGUscixuLGksYSl7Zm9yKHZhciBvLHM9MDtzPHIucGVkZ2VwYXRocy5sZW5ndGg7cysrKWU9PT1yLnBlZGdlcGF0aHNbc10mJihvPXIuZWRnZXBhdGhzW3NdKTtpZighbylyZXR1cm47dmFyIGw9aS5hWzBdLGM9aS5hW2kuYS5sZW5ndGgtMV0sdT1pLmJbMF0saD1pLmJbaS5iLmxlbmd0aC0xXTtmdW5jdGlvbiBmKHQsZSl7dmFyIHIsbj0wO3JldHVybihNYXRoLmFicyh0WzBdLWwpPC4xfHxNYXRoLmFicyh0WzBdLWMpPC4xKSYmKHI9XyhpLmR4eWRiX3JvdWdoKHRbMF0sdFsxXSwuMSkpLG49TWF0aC5tYXgobixhKncoZSxyKS8yKSksKE1hdGguYWJzKHRbMV0tdSk8LjF8fE1hdGguYWJzKHRbMV0taCk8LjEpJiYocj1fKGkuZHh5ZGFfcm91Z2godFswXSx0WzFdLC4xKSksbj1NYXRoLm1heChuLGEqdyhlLHIpLzIpKSxufXZhciBwPWIodCwwLDEpLGQ9Yih0LG4udG90YWwsbi50b3RhbC0xKSxnPWYob1swXSxwKSxtPW4udG90YWwtZihvW28ubGVuZ3RoLTFdLGQpO24ubWluPGcmJihuLm1pbj1nKTtuLm1heD5tJiYobi5tYXg9bSk7bi5sZW49bi5tYXgtbi5taW59KHRoaXMscix0LG4sYyxlLmhlaWdodCksIShuLmxlbjwoZS53aWR0aCtlLmhlaWdodCkqZi5MQUJFTE1JTikpKWZvcih2YXIgaT1NYXRoLm1pbihNYXRoLmNlaWwobi5sZW4vUCksZi5MQUJFTE1BWCksYT0wO2E8aTthKyspe3ZhciBvPWguZmluZEJlc3RUZXh0TG9jYXRpb24odGhpcyxuLGUsUyxMKTtpZighbylicmVhaztoLmFkZExhYmVsRGF0YShvLGUsUyxUKX19KX0pLEMucmVtb3ZlKCksaC5kcmF3TGFiZWxzKHksUyxyLHYsZz9UOm51bGwpfWQmJiFwJiZtLnJlbW92ZSgpfShILFAsdCxyWzBdLFMsZSxrKSxvLnNldENsaXBVcmwoSCxrLl9jbGlwUGF0aElkKX1mdW5jdGlvbiBZKHQpe3ZhciBlPWsuYWIyeHkodFswXSx0WzFdLCEwKTtyZXR1cm5bQy5jMnAoZVswXSksTC5jMnAoZVsxXSldfX1mdW5jdGlvbiBiKHQsZSxyKXt2YXIgbj10LmdldFBvaW50QXRMZW5ndGgoZSksaT10LmdldFBvaW50QXRMZW5ndGgociksYT1pLngtbi54LG89aS55LW4ueSxzPU1hdGguc3FydChhKmErbypvKTtyZXR1cm5bYS9zLG8vc119ZnVuY3Rpb24gXyh0KXt2YXIgZT1NYXRoLnNxcnQodFswXSp0WzBdK3RbMV0qdFsxXSk7cmV0dXJuW3RbMF0vZSx0WzFdL2VdfWZ1bmN0aW9uIHcodCxlKXt2YXIgcj1NYXRoLmFicyh0WzBdKmVbMF0rdFsxXSplWzFdKTtyZXR1cm4gTWF0aC5zcXJ0KDEtcipyKS9yfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpKXt2YXIgYT1sKHIpO2kuc2VsZWN0QWxsKCJnLmNvbnRvdXIiKS5lYWNoKGZ1bmN0aW9uKHQpe2FbdC50cmFjZS51aWRdfHxuLnNlbGVjdCh0aGlzKS5yZW1vdmUoKX0pO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXgodCxlLHJbb10saSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NTgzLCIuLi8uLi9saWIiOjY4NCwiLi4vLi4vcGxvdHMvZ2V0X2RhdGEiOjc2OCwiLi4vY2FycGV0L2xvb2t1cF9jYXJwZXRpZCI6ODc0LCIuLi9jYXJwZXQvbWFrZXBhdGgiOjg3NSwiLi4vY2FycGV0L21hcF8xZF9hcnJheSI6ODc2LCIuLi9jb250b3VyL2Nsb3NlX2JvdW5kYXJpZXMiOjg5OCwiLi4vY29udG91ci9jb25zdGFudHMiOjkwMCwiLi4vY29udG91ci9jb252ZXJ0X3RvX2NvbnN0cmFpbnRzIjo5MDQsIi4uL2NvbnRvdXIvZW1wdHlfcGF0aGluZm8iOjkwNiwiLi4vY29udG91ci9maW5kX2FsbF9wYXRocyI6OTA4LCIuLi9jb250b3VyL21ha2VfY3Jvc3NpbmdzIjo5MTMsIi4uL2NvbnRvdXIvcGxvdCI6OTE0LCIuL2pvaW5fYWxsX3BhdGhzIjo5MjIsIi4vbWFwX3BhdGhpbmZvIjo5MjMsZDM6MTQ3fV0sOTI1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPW8oe3o6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0seDpvKHt9LG4ueCx7aW1wbGllZEVkaXRzOnt4dHlwZToiYXJyYXkifX0pLHgwOm8oe30sbi54MCx7aW1wbGllZEVkaXRzOnt4dHlwZToic2NhbGVkIn19KSxkeDpvKHt9LG4uZHgse2ltcGxpZWRFZGl0czp7eHR5cGU6InNjYWxlZCJ9fSkseTpvKHt9LG4ueSx7aW1wbGllZEVkaXRzOnt5dHlwZToiYXJyYXkifX0pLHkwOm8oe30sbi55MCx7aW1wbGllZEVkaXRzOnt5dHlwZToic2NhbGVkIn19KSxkeTpvKHt9LG4uZHkse2ltcGxpZWRFZGl0czp7eXR5cGU6InNjYWxlZCJ9fSksdGV4dDp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSx0cmFuc3Bvc2U6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6ImNhbGMifSx4dHlwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYXJyYXkiLCJzY2FsZWQiXSxlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHl0eXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhcnJheSIsInNjYWxlZCJdLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0senNtb290aDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZmFzdCIsImJlc3QiLCExXSxkZmx0OiExLGVkaXRUeXBlOiJjYWxjIn0sY29ubmVjdGdhcHM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6ImNhbGMifSx4Z2FwOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxtaW46MCxlZGl0VHlwZToicGxvdCJ9LHlnYXA6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowLG1pbjowLGVkaXRUeXBlOiJwbG90In0semhvdmVyZm9ybWF0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6Im5vbmUifX0saSgiIix7Y0xldHRlcjoieiIsYXV0b0NvbG9yRGZsdDohMX0pLHtjb2xvcmJhcjphfSl9LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzIjo1NTksIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo1NjUsIi4uLy4uL2xpYi9leHRlbmQiOjY3MywiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIjoxMDE1fV0sOTI2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3JlZ2lzdHJ5IiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksbz10KCIuLi9oaXN0b2dyYW0yZC9jYWxjIikscz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyIpLGw9dCgiLi9jb252ZXJ0X2NvbHVtbl94eXoiKSxjPXQoIi4vbWF4X3Jvd19sZW5ndGgiKSx1PXQoIi4vY2xlYW5fMmRfYXJyYXkiKSxoPXQoIi4vaW50ZXJwMmQiKSxmPXQoIi4vZmluZF9lbXB0aWVzIikscD10KCIuL21ha2VfYm91bmRfYXJyYXkiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixkLGcsbSx2LHkseCxiLF8sdz1hLmdldEZyb21JZCh0LGUueGF4aXN8fCJ4Iiksaz1hLmdldEZyb21JZCh0LGUueWF4aXN8fCJ5IiksTT1uLnRyYWNlSXMoZSwiY29udG91ciIpLEE9bi50cmFjZUlzKGUsImhpc3RvZ3JhbSIpLFQ9bi50cmFjZUlzKGUsImdsMmQiKSxTPU0/ImJlc3QiOmUuenNtb290aDtpZih3Ll9taW5EdGljaz0wLGsuX21pbkR0aWNrPTAsQSlyPShfPW8odCxlKSkueCxkPV8ueDAsZz1fLmR4LG09Xy55LHY9Xy55MCx5PV8uZHkseD1fLno7ZWxzZXt2YXIgRT1lLno7aS5pc0FycmF5MUQoRSk/KGwoZSx3LGssIngiLCJ5IixbInoiXSkscj1lLl94LG09ZS5feSxFPWUuX3opOihyPWUueD93Lm1ha2VDYWxjZGF0YShlLCJ4Iik6W10sbT1lLnk/ay5tYWtlQ2FsY2RhdGEoZSwieSIpOltdKSxkPWUueDB8fDAsZz1lLmR4fHwxLHY9ZS55MHx8MCx5PWUuZHl8fDEseD11KEUsZS50cmFuc3Bvc2UpLChNfHxlLmNvbm5lY3RnYXBzKSYmKGUuX2VtcHR5cG9pbnRzPWYoeCksaCh4LGUuX2VtcHR5cG9pbnRzKSl9ZnVuY3Rpb24gQyh0KXtTPWUuX2lucHV0LnpzbW9vdGg9ZS56c21vb3RoPSExLGkud2FybignY2Fubm90IHVzZSB6c21vb3RoOiAiZmFzdCI6ICcrdCl9aWYoImZhc3QiPT09UylpZigibG9nIj09PXcudHlwZXx8ImxvZyI9PT1rLnR5cGUpQygibG9nIGF4aXMgZm91bmQiKTtlbHNlIGlmKCFBKXtpZihyLmxlbmd0aCl7dmFyIEw9KHJbci5sZW5ndGgtMV0tclswXSkvKHIubGVuZ3RoLTEpLHo9TWF0aC5hYnMoTC8xMDApO2ZvcihiPTA7YjxyLmxlbmd0aC0xO2IrKylpZihNYXRoLmFicyhyW2IrMV0tcltiXS1MKT56KXtDKCJ4IHNjYWxlIGlzIG5vdCBsaW5lYXIiKTticmVha319aWYobS5sZW5ndGgmJiJmYXN0Ij09PVMpe3ZhciBQPShtW20ubGVuZ3RoLTFdLW1bMF0pLyhtLmxlbmd0aC0xKSxJPU1hdGguYWJzKFAvMTAwKTtmb3IoYj0wO2I8bS5sZW5ndGgtMTtiKyspaWYoTWF0aC5hYnMobVtiKzFdLW1bYl0tUCk+SSl7QygieSBzY2FsZSBpcyBub3QgbGluZWFyIik7YnJlYWt9fX12YXIgTz1jKHgpLEQ9InNjYWxlZCI9PT1lLnh0eXBlPyIiOnIsUj1wKGUsRCxkLGcsTyx3KSxCPSJzY2FsZWQiPT09ZS55dHlwZT8iIjptLEY9cChlLEIsdix5LHgubGVuZ3RoLGspO1R8fChhLmV4cGFuZCh3LFIpLGEuZXhwYW5kKGssRikpO3ZhciBOPXt4OlIseTpGLHo6eCx0ZXh0OmUuX3RleHR8fGUudGV4dH07aWYoRCYmRC5sZW5ndGg9PT1SLmxlbmd0aC0xJiYoTi54Q2VudGVyPUQpLEImJkIubGVuZ3RoPT09Ri5sZW5ndGgtMSYmKE4ueUNlbnRlcj1CKSxBJiYoTi54UmFuZ2VzPV8ueFJhbmdlcyxOLnlSYW5nZXM9Xy55UmFuZ2VzLE4ucHRzPV8ucHRzKSxNJiYiY29uc3RyYWludCI9PT1lLmNvbnRvdXJzLnR5cGV8fHMoZSx4LCIiLCJ6IiksTSYmZS5jb250b3VycyYmImhlYXRtYXAiPT09ZS5jb250b3Vycy5jb2xvcmluZyl7dmFyIGo9e3R5cGU6ImNvbnRvdXIiPT09ZS50eXBlPyJoZWF0bWFwIjoiaGlzdG9ncmFtMmQiLHhjYWxlbmRhcjplLnhjYWxlbmRhcix5Y2FsZW5kYXI6ZS55Y2FsZW5kYXJ9O04ueGZpbGw9cChqLEQsZCxnLE8sdyksTi55ZmlsbD1wKGosQix2LHkseC5sZW5ndGgsayl9cmV0dXJuW05dfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyI6NTY2LCIuLi8uLi9saWIiOjY4NCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjczMiwiLi4vLi4vcmVnaXN0cnkiOjgxNywiLi4vaGlzdG9ncmFtMmQvY2FsYyI6OTU3LCIuL2NsZWFuXzJkX2FycmF5Ijo5MjcsIi4vY29udmVydF9jb2x1bW5feHl6Ijo5MjksIi4vZmluZF9lbXB0aWVzIjo5MzEsIi4vaW50ZXJwMmQiOjkzNCwiLi9tYWtlX2JvdW5kX2FycmF5Ijo5MzUsIi4vbWF4X3Jvd19sZW5ndGgiOjkzNn1dLDkyNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGksYSxvLHMsbDtmdW5jdGlvbiBjKHQpe2lmKG4odCkpcmV0dXJuK3R9aWYoZSl7Zm9yKHI9MCxzPTA7czx0Lmxlbmd0aDtzKyspcj1NYXRoLm1heChyLHRbc10ubGVuZ3RoKTtpZigwPT09cilyZXR1cm4hMTthPWZ1bmN0aW9uKHQpe3JldHVybiB0Lmxlbmd0aH0sbz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbcl1bZV19fWVsc2Ugcj10Lmxlbmd0aCxhPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbZV0ubGVuZ3RofSxvPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFtlXVtyXX07dmFyIHU9bmV3IEFycmF5KHIpO2ZvcihzPTA7czxyO3MrKylmb3IoaT1hKHQscyksdVtzXT1uZXcgQXJyYXkoaSksbD0wO2w8aTtsKyspdVtzXVtsXT1jKG8odCxzLGwpKTtyZXR1cm4gdX19LHsiZmFzdC1pc251bWVyaWMiOjIxNH1dLDkyODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e21pbjoiem1pbiIsbWF4OiJ6bWF4In19LHt9XSw5Mjk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhLG8scyl7dmFyIGwsYyx1LGg9dC5fbGVuZ3RoLGY9dFthXS5zbGljZSgwLGgpLHA9dFtvXS5zbGljZSgwLGgpLGQ9dC50ZXh0LGc9dm9pZCAwIT09ZCYmbi5pc0FycmF5MUQoZCksbT10W2ErImNhbGVuZGFyIl0sdj10W28rImNhbGVuZGFyIl07Zm9yKGw9MDtsPGg7bCsrKWZbbF09ZS5kMmMoZltsXSwwLG0pLHBbbF09ci5kMmMocFtsXSwwLHYpO3ZhciB5LHgsYixfPW4uZGlzdGluY3RWYWxzKGYpLHc9Xy52YWxzLGs9bi5kaXN0aW5jdFZhbHMocCksTT1rLnZhbHMsQT1bXTtmb3IobD0wO2w8cy5sZW5ndGg7bCsrKUFbbF09bi5pbml0MmRBcnJheShNLmxlbmd0aCx3Lmxlbmd0aCk7Zm9yKGcmJihiPW4uaW5pdDJkQXJyYXkoTS5sZW5ndGgsdy5sZW5ndGgpKSxsPTA7bDxoO2wrKylpZihmW2xdIT09aSYmcFtsXSE9PWkpe2Zvcih5PW4uZmluZEJpbihmW2xdK18ubWluRGlmZi8yLHcpLHg9bi5maW5kQmluKHBbbF0ray5taW5EaWZmLzIsTSksYz0wO2M8cy5sZW5ndGg7YysrKXU9dFtzW2NdXSxBW2NdW3hdW3ldPXVbbF07ZyYmKGJbeF1beV09ZFtsXSl9Zm9yKHRbIl8iK2FdPXcsdFsiXyIrb109TSxjPTA7YzxzLmxlbmd0aDtjKyspdFsiXyIrc1tjXV09QVtjXTtnJiYodC5fdGV4dD1iKX19LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NjYxLCIuLi8uLi9saWIiOjY4NH1dLDkzMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4veHl6X2RlZmF1bHRzIiksYT10KCIuL3N0eWxlX2RlZmF1bHRzIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiKSxzPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixsKXtmdW5jdGlvbiBjKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxzLHIsaSl9aSh0LGUsYyxsKT8oYygidGV4dCIpLGEodCxlLGMsbCksYygiY29ubmVjdGdhcHMiLG4uaXNBcnJheTFEKGUueikmJiExIT09ZS56c21vb3RoKSxvKHQsZSxsLGMse3ByZWZpeDoiIixjTGV0dGVyOiJ6In0pKTplLnZpc2libGU9ITF9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyI6NTY4LCIuLi8uLi9saWIiOjY4NCwiLi9hdHRyaWJ1dGVzIjo5MjUsIi4vc3R5bGVfZGVmYXVsdHMiOjkzOSwiLi94eXpfZGVmYXVsdHMiOjk0MH1dLDkzMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL21heF9yb3dfbGVuZ3RoIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLHIsaSxhLG8scyxsLGMsdT1bXSxoPXt9LGY9W10scD10WzBdLGQ9W10sZz1bMCwwLDBdLG09bih0KTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKWZvcihlPWQsZD1wLHA9dFtyKzFdfHxbXSxpPTA7aTxtO2krKyl2b2lkIDA9PT1kW2ldJiYoKHM9KHZvaWQgMCE9PWRbaS0xXT8xOjApKyh2b2lkIDAhPT1kW2krMV0/MTowKSsodm9pZCAwIT09ZVtpXT8xOjApKyh2b2lkIDAhPT1wW2ldPzE6MCkpPygwPT09ciYmcysrLDA9PT1pJiZzKysscj09PXQubGVuZ3RoLTEmJnMrKyxpPT09ZC5sZW5ndGgtMSYmcysrLHM8NCYmKGhbW3IsaV1dPVtyLGksc10pLHUucHVzaChbcixpLHNdKSk6Zi5wdXNoKFtyLGldKSk7Zm9yKDtmLmxlbmd0aDspe2ZvcihsPXt9LGM9ITEsbz1mLmxlbmd0aC0xO28+PTA7by0tKShzPSgoaFtbKHI9KGE9ZltvXSlbMF0pLTEsaT1hWzFdXV18fGcpWzJdKyhoW1tyKzEsaV1dfHxnKVsyXSsoaFtbcixpLTFdXXx8ZylbMl0rKGhbW3IsaSsxXV18fGcpWzJdKS8yMCkmJihsW2FdPVtyLGksc10sZi5zcGxpY2UobywxKSxjPSEwKTtpZighYyl0aHJvdyJmaW5kRW1wdGllcyBpdGVyYXRlZCB3aXRoIG5vIG5ldyBuZWlnaGJvcnMiO2ZvcihhIGluIGwpaFthXT1sW2FdLHUucHVzaChsW2FdKX1yZXR1cm4gdS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGVbMl0tdFsyXX0pfX0seyIuL21heF9yb3dfbGVuZ3RoIjo5MzZ9XSw5MzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9meCIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvLHMsbCl7dmFyIGMsdSxoLGYscD10LmNkWzBdLGQ9cC50cmFjZSxnPXQueGEsbT10LnlhLHY9cC54LHk9cC55LHg9cC56LGI9cC54Q2VudGVyLF89cC55Q2VudGVyLHc9cC56bWFzayxrPVtkLnptaW4sZC56bWF4XSxNPWQuemhvdmVyZm9ybWF0LEE9dixUPXk7aWYoITEhPT10LmluZGV4KXt0cnl7aD1NYXRoLnJvdW5kKHQuaW5kZXhbMV0pLGY9TWF0aC5yb3VuZCh0LmluZGV4WzBdKX1jYXRjaChlKXtyZXR1cm4gdm9pZCBpLmVycm9yKCJFcnJvciBob3ZlcmluZyBvbiBoZWF0bWFwLCBwb2ludE51bWJlciBtdXN0IGJlIFtyb3csY29sXSwgZm91bmQ6Iix0LmluZGV4KX1pZihoPDB8fGg+PXhbMF0ubGVuZ3RofHxmPDB8fGY+eC5sZW5ndGgpcmV0dXJufWVsc2V7aWYobi5pbmJveChlLXZbMF0sZS12W3YubGVuZ3RoLTFdLDApPjB8fG4uaW5ib3goci15WzBdLHIteVt5Lmxlbmd0aC0xXSwwKT4wKXJldHVybjtpZihsKXt2YXIgUztmb3IoQT1bMip2WzBdLXZbMV1dLFM9MTtTPHYubGVuZ3RoO1MrKylBLnB1c2goKHZbU10rdltTLTFdKS8yKTtmb3IoQS5wdXNoKFsyKnZbdi5sZW5ndGgtMV0tdlt2Lmxlbmd0aC0yXV0pLFQ9WzIqeVswXS15WzFdXSxTPTE7Uzx5Lmxlbmd0aDtTKyspVC5wdXNoKCh5W1NdK3lbUy0xXSkvMik7VC5wdXNoKFsyKnlbeS5sZW5ndGgtMV0teVt5Lmxlbmd0aC0yXV0pfWg9TWF0aC5tYXgoMCxNYXRoLm1pbihBLmxlbmd0aC0yLGkuZmluZEJpbihlLEEpKSksZj1NYXRoLm1heCgwLE1hdGgubWluKFQubGVuZ3RoLTIsaS5maW5kQmluKHIsVCkpKX12YXIgRT1nLmMycCh2W2hdKSxDPWcuYzJwKHZbaCsxXSksTD1tLmMycCh5W2ZdKSx6PW0uYzJwKHlbZisxXSk7bD8oQz1FLGM9dltoXSx6PUwsdT15W2ZdKTooYz1iP2JbaF06KHZbaF0rdltoKzFdKS8yLHU9Xz9fW2ZdOih5W2ZdK3lbZisxXSkvMixkLnpzbW9vdGgmJihFPUM9Zy5jMnAoYyksTD16PW0uYzJwKHUpKSk7dmFyIFAsSSxPPXhbZl1baF07dyYmIXdbZl1baF0mJihPPXZvaWQgMCksQXJyYXkuaXNBcnJheShwLnRleHQpJiZBcnJheS5pc0FycmF5KHAudGV4dFtmXSkmJihQPXAudGV4dFtmXVtoXSk7dmFyIEQ9e3R5cGU6ImxpbmVhciIscmFuZ2U6ayxob3ZlcmZvcm1hdDpNLF9zZXBhcmF0b3JzOmcuX3NlcGFyYXRvcnMsX251bUZvcm1hdDpnLl9udW1Gb3JtYXR9O3JldHVybiBJPWEudGlja1RleHQoRCxPLCJob3ZlciIpLnRleHQsW2kuZXh0ZW5kRmxhdCh0LHtpbmRleDpbZixoXSxkaXN0YW5jZTp0Lm1heEhvdmVyRGlzdGFuY2Usc3Bpa2VEaXN0YW5jZTp0Lm1heFNwaWtlRGlzdGFuY2UseDA6RSx4MTpDLHkwOkwseTE6eix4TGFiZWxWYWw6Yyx5TGFiZWxWYWw6dSx6TGFiZWxWYWw6Tyx6TGFiZWw6SSx0ZXh0OlB9KV19fSx7Ii4uLy4uL2NvbXBvbmVudHMvZngiOjYwMCwiLi4vLi4vbGliIjo2ODQsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3MzJ9XSw5MzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoIi4vYXR0cmlidXRlcyIpLG4uc3VwcGx5RGVmYXVsdHM9dCgiLi9kZWZhdWx0cyIpLG4uY2FsYz10KCIuL2NhbGMiKSxuLnBsb3Q9dCgiLi9wbG90Iiksbi5jb2xvcmJhcj10KCIuL2NvbG9yYmFyIiksbi5zdHlsZT10KCIuL3N0eWxlIiksbi5ob3ZlclBvaW50cz10KCIuL2hvdmVyIiksbi5tb2R1bGVUeXBlPSJ0cmFjZSIsbi5uYW1lPSJoZWF0bWFwIixuLmJhc2VQbG90TW9kdWxlPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiIpLG4uY2F0ZWdvcmllcz1bImNhcnRlc2lhbiIsInN2ZyIsIjJkTWFwIl0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbiI6NzQzLCIuL2F0dHJpYnV0ZXMiOjkyNSwiLi9jYWxjIjo5MjYsIi4vY29sb3JiYXIiOjkyOCwiLi9kZWZhdWx0cyI6OTMwLCIuL2hvdmVyIjo5MzIsIi4vcGxvdCI6OTM3LCIuL3N0eWxlIjo5Mzh9XSw5MzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT1bWy0xLDBdLFsxLDBdLFswLC0xXSxbMCwxXV07ZnVuY3Rpb24gYSh0KXtyZXR1cm4uNS0uMjUqTWF0aC5taW4oMSwuNSp0KX1mdW5jdGlvbiBvKHQsZSxyKXt2YXIgbixhLG8scyxsLGMsdSxoLGYscCxkLGcsbSx2PTA7Zm9yKHM9MDtzPGUubGVuZ3RoO3MrKyl7Zm9yKGE9KG49ZVtzXSlbMF0sbz1uWzFdLGQ9dFthXVtvXSxwPTAsZj0wLGw9MDtsPDQ7bCsrKSh1PXRbYSsoYz1pW2xdKVswXV0pJiZ2b2lkIDAhPT0oaD11W28rY1sxXV0pJiYoMD09PXA/Zz1tPWg6KGc9TWF0aC5taW4oZyxoKSxtPU1hdGgubWF4KG0saCkpLGYrKyxwKz1oKTtpZigwPT09Zil0aHJvdyJpdGVyYXRlSW50ZXJwMmQgb3JkZXIgaXMgd3Jvbmc6IG5vIGRlZmluZWQgbmVpZ2hib3JzIjt0W2FdW29dPXAvZix2b2lkIDA9PT1kP2Y8NCYmKHY9MSk6KHRbYV1bb109KDErcikqdFthXVtvXS1yKmQsbT5nJiYodj1NYXRoLm1heCh2LE1hdGguYWJzKHRbYV1bb10tZCkvKG0tZykpKSl9cmV0dXJuIHZ9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsaT0xO2ZvcihvKHQsZSkscj0wO3I8ZS5sZW5ndGgmJiEoZVtyXVsyXTw0KTtyKyspO2ZvcihlPWUuc2xpY2Uocikscj0wO3I8MTAwJiZpPi4wMTtyKyspaT1vKHQsZSxhKGkpKTtyZXR1cm4gaT4uMDEmJm4ubG9nKCJpbnRlcnAyZCBkaWRuJ3QgY29udmVyZ2UgcXVpY2tseSIsaSksdH19LHsiLi4vLi4vbGliIjo2ODR9XSw5MzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4uLy4uL2xpYiIpLmlzQXJyYXlPclR5cGVkQXJyYXk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEsbyxzKXt2YXIgbCxjLHUsaD1bXSxmPW4udHJhY2VJcyh0LCJjb250b3VyIikscD1uLnRyYWNlSXModCwiaGlzdG9ncmFtIiksZD1uLnRyYWNlSXModCwiZ2wyZCIpO2lmKGkoZSkmJmUubGVuZ3RoPjEmJiFwJiYiY2F0ZWdvcnkiIT09cy50eXBlKXt2YXIgZz1lLmxlbmd0aDtpZighKGc8PW8pKXJldHVybiBmP2Uuc2xpY2UoMCxvKTplLnNsaWNlKDAsbysxKTtpZihmfHxkKWg9ZS5zbGljZSgwLG8pO2Vsc2UgaWYoMT09PW8paD1bZVswXS0uNSxlWzBdKy41XTtlbHNle2ZvcihoPVsxLjUqZVswXS0uNSplWzFdXSx1PTE7dTxnO3UrKyloLnB1c2goLjUqKGVbdS0xXStlW3VdKSk7aC5wdXNoKDEuNSplW2ctMV0tLjUqZVtnLTJdKX1pZihnPG8pe3ZhciBtPWhbaC5sZW5ndGgtMV0sdj1tLWhbaC5sZW5ndGgtMl07Zm9yKHU9Zzt1PG87dSsrKW0rPXYsaC5wdXNoKG0pfX1lbHNle2M9YXx8MTt2YXIgeT10W3MuX2lkLmNoYXJBdCgwKSsiY2FsZW5kYXIiXTtmb3IobD1wfHwiY2F0ZWdvcnkiPT09cy50eXBlP3MucjJjKHIsMCx5KXx8MDppKGUpJiYxPT09ZS5sZW5ndGg/ZVswXTp2b2lkIDA9PT1yPzA6cy5kMmMociwwLHkpLHU9Znx8ZD8wOi0uNTt1PG87dSsrKWgucHVzaChsK2MqdSl9cmV0dXJuIGh9fSx7Ii4uLy4uL2xpYiI6Njg0LCIuLi8uLi9yZWdpc3RyeSI6ODE3fV0sOTM2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPTA7cjx0Lmxlbmd0aDtyKyspZT1NYXRoLm1heChlLHRbcl0ubGVuZ3RoKTtyZXR1cm4gZX19LHt9XSw5Mzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoInRpbnljb2xvcjIiKSxhPXQoIi4uLy4uL3JlZ2lzdHJ5Iiksbz10KCIuLi8uLi9saWIiKSxzPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSIpLGw9dCgiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiKSxjPXQoIi4uLy4uL3Bsb3RzL2dldF9kYXRhIikuZ2V0VWlkc0Zyb21DYWxjRGF0YSx1PXQoIi4vbWF4X3Jvd19sZW5ndGgiKTtmdW5jdGlvbiBoKHQsZSxyLG4pe3ZhciBjLGgsZyxtLHYseSx4PXJbMF0sYj14LnRyYWNlLF89ZS54YXhpcyx3PWUueWF4aXMsaz0iaG0iK2IudWlkLE09eC56LEE9eC54LFQ9eC55LFM9eC54Q2VudGVyLEU9eC55Q2VudGVyLEM9YS50cmFjZUlzKGIsImNvbnRvdXIiKSxMPUM/ImJlc3QiOmIuenNtb290aCx6PU0ubGVuZ3RoLFA9dShNKSxJPSExLE89ITE7Zm9yKHk9MDt2b2lkIDA9PT1jJiZ5PEEubGVuZ3RoLTE7KWM9Xy5jMnAoQVt5XSkseSsrO2Zvcih5PUEubGVuZ3RoLTE7dm9pZCAwPT09aCYmeT4wOyloPV8uYzJwKEFbeV0pLHktLTtmb3IoaDxjJiYoZz1oLGg9YyxjPWcsST0hMCkseT0wO3ZvaWQgMD09PW0mJnk8VC5sZW5ndGgtMTspbT13LmMycChUW3ldKSx5Kys7Zm9yKHk9VC5sZW5ndGgtMTt2b2lkIDA9PT12JiZ5PjA7KXY9dy5jMnAoVFt5XSkseS0tO2lmKHY8bSYmKGc9bSxtPXYsdj1nLE89ITApLEMmJihTPUEsRT1ULEE9eC54ZmlsbCxUPXgueWZpbGwpLCJmYXN0IiE9PUwpe3ZhciBEPSJiZXN0Ij09PUw/MDouNTtjPU1hdGgubWF4KC1EKl8uX2xlbmd0aCxjKSxoPU1hdGgubWluKCgxK0QpKl8uX2xlbmd0aCxoKSxtPU1hdGgubWF4KC1EKncuX2xlbmd0aCxtKSx2PU1hdGgubWluKCgxK0QpKncuX2xlbmd0aCx2KX12YXIgUj1NYXRoLnJvdW5kKGgtYyksQj1NYXRoLnJvdW5kKHYtbSksRj1SPD0wfHxCPD0wLE49bi5zZWxlY3RBbGwoImcuaG0uIitrKS5kYXRhKEY/W106WzBdKTtpZihOLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiaG0iLCEwKS5jbGFzc2VkKGssITApLE4uZXhpdCgpLnJlbW92ZSgpLCFGKXt2YXIgaixWOyJmYXN0Ij09PUw/KGo9UCxWPXopOihqPVIsVj1CKTt2YXIgVT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtVLndpZHRoPWosVS5oZWlnaHQ9Vjt2YXIgcSxILEc9VS5nZXRDb250ZXh0KCIyZCIpLFc9cy5tYWtlQ29sb3JTY2FsZUZ1bmMocy5leHRyYWN0U2NhbGUoYi5jb2xvcnNjYWxlLGIuem1pbixiLnptYXgpLHtub051bWVyaWNDaGVjazohMCxyZXR1cm5BcnJheTohMH0pOyJmYXN0Ij09PUw/KHE9ST9mdW5jdGlvbih0KXtyZXR1cm4gUC0xLXR9Om8uaWRlbnRpdHksSD1PP2Z1bmN0aW9uKHQpe3JldHVybiB6LTEtdH06by5pZGVudGl0eSk6KHE9ZnVuY3Rpb24odCl7cmV0dXJuIG8uY29uc3RyYWluKE1hdGgucm91bmQoXy5jMnAoQVt0XSktYyksMCxSKX0sSD1mdW5jdGlvbih0KXtyZXR1cm4gby5jb25zdHJhaW4oTWF0aC5yb3VuZCh3LmMycChUW3RdKS1tKSwwLEIpfSk7dmFyIFksWCxaLCQsSixLPUgoMCksUT1bSyxLXSx0dD1JPzA6MSxldD1PPzA6MSxydD0wLG50PTAsaXQ9MCxhdD0wO2lmKEwpe3ZhciBvdCxzdD0wO3RyeXtvdD1uZXcgVWludDhBcnJheShSKkIqNCl9Y2F0Y2godCl7b3Q9bmV3IEFycmF5KFIqQio0KX1pZigiYmVzdCI9PT1MKXt2YXIgbHQsY3QsdXQsaHQ9U3x8QSxmdD1FfHxULHB0PW5ldyBBcnJheShodC5sZW5ndGgpLGR0PW5ldyBBcnJheShmdC5sZW5ndGgpLGd0PW5ldyBBcnJheShSKSxtdD1TP3A6Zix2dD1FP3A6Zjtmb3IoeT0wO3k8aHQubGVuZ3RoO3krKylwdFt5XT1NYXRoLnJvdW5kKF8uYzJwKGh0W3ldKS1jKTtmb3IoeT0wO3k8ZnQubGVuZ3RoO3krKylkdFt5XT1NYXRoLnJvdW5kKHcuYzJwKGZ0W3ldKS1tKTtmb3IoeT0wO3k8Ujt5KyspZ3RbeV09bXQoeSxwdCk7Zm9yKFg9MDtYPEI7WCsrKWZvcihjdD1NWyhsdD12dChYLGR0KSkuYmluMF0sdXQ9TVtsdC5iaW4xXSx5PTA7eTxSO3krKyxzdCs9NClkKG90LHN0LEo9RXQoY3QsdXQsZ3RbeV0sbHQpKX1lbHNlIGZvcihYPTA7WDx6O1grKylmb3IoJD1NW1hdLFE9SChYKSx5PTA7eTxSO3krKylKPVN0KCRbeV0sMSksZChvdCxzdD00KihRKlIrcSh5KSksSik7dmFyIHl0PUcuY3JlYXRlSW1hZ2VEYXRhKFIsQik7dHJ5e3l0LmRhdGEuc2V0KG90KX1jYXRjaCh0KXt2YXIgeHQ9eXQuZGF0YSxidD14dC5sZW5ndGg7Zm9yKFg9MDtYPGJ0O1grKyl4dFtYXT1vdFtYXX1HLnB1dEltYWdlRGF0YSh5dCwwLDApfWVsc2V7dmFyIF90PWIueGdhcCx3dD1iLnlnYXAsa3Q9TWF0aC5mbG9vcihfdC8yKSxNdD1NYXRoLmZsb29yKHd0LzIpO2ZvcihYPTA7WDx6O1grKylpZigkPU1bWF0sUS5yZXZlcnNlKCksUVtldF09SChYKzEpLFFbMF0hPT1RWzFdJiZ2b2lkIDAhPT1RWzBdJiZ2b2lkIDAhPT1RWzFdKWZvcihZPVtaPXEoMCksWl0seT0wO3k8UDt5KyspWS5yZXZlcnNlKCksWVt0dF09cSh5KzEpLFlbMF0hPT1ZWzFdJiZ2b2lkIDAhPT1ZWzBdJiZ2b2lkIDAhPT1ZWzFdJiYoSj1TdCgkW3ldLChZWzFdLVlbMF0pKihRWzFdLVFbMF0pKSxHLmZpbGxTdHlsZT0icmdiYSgiK0ouam9pbigiLCIpKyIpIixHLmZpbGxSZWN0KFlbMF0ra3QsUVswXStNdCxZWzFdLVlbMF0tX3QsUVsxXS1RWzBdLXd0KSl9bnQ9TWF0aC5yb3VuZChudC9ydCksaXQ9TWF0aC5yb3VuZChpdC9ydCksYXQ9TWF0aC5yb3VuZChhdC9ydCk7dmFyIEF0PWkoInJnYigiK250KyIsIitpdCsiLCIrYXQrIikiKTt0Ll9obXBpeGNvdW50PSh0Ll9obXBpeGNvdW50fHwwKStydCx0Ll9obWx1bWNvdW50PSh0Ll9obWx1bWNvdW50fHwwKStydCpBdC5nZXRMdW1pbmFuY2UoKTt2YXIgVHQ9Ti5zZWxlY3RBbGwoImltYWdlIikuZGF0YShyKTtUdC5lbnRlcigpLmFwcGVuZCgic3ZnOmltYWdlIikuYXR0cih7eG1sbnM6bC5zdmcscHJlc2VydmVBc3BlY3RSYXRpbzoibm9uZSJ9KSxUdC5hdHRyKHtoZWlnaHQ6Qix3aWR0aDpSLHg6Yyx5Om0sInhsaW5rOmhyZWYiOlUudG9EYXRhVVJMKCJpbWFnZS9wbmciKX0pLFR0LmV4aXQoKS5yZW1vdmUoKX1mdW5jdGlvbiBTdCh0LGUpe2lmKHZvaWQgMCE9PXQpe3ZhciByPVcodCk7cmV0dXJuIHJbMF09TWF0aC5yb3VuZChyWzBdKSxyWzFdPU1hdGgucm91bmQoclsxXSksclsyXT1NYXRoLnJvdW5kKHJbMl0pLHJ0Kz1lLG50Kz1yWzBdKmUsaXQrPXJbMV0qZSxhdCs9clsyXSplLHJ9cmV0dXJuWzAsMCwwLDBdfWZ1bmN0aW9uIEV0KHQsZSxyLG4pe3ZhciBpPXRbci5iaW4wXTtpZih2b2lkIDA9PT1pKXJldHVybiBTdCh2b2lkIDAsMSk7dmFyIGEsbz10W3IuYmluMV0scz1lW3IuYmluMF0sbD1lW3IuYmluMV0sYz1vLWl8fDAsdT1zLWl8fDA7cmV0dXJuIGE9dm9pZCAwPT09bz92b2lkIDA9PT1sPzA6dm9pZCAwPT09cz8yKihsLWkpOjIqKDIqbC1zLWkpLzM6dm9pZCAwPT09bD92b2lkIDA9PT1zPzA6MiooMippLW8tcykvMzp2b2lkIDA9PT1zPzIqKDIqbC1vLWkpLzM6bCtpLW8tcyxTdChpK3IuZnJhYypjK24uZnJhYyoodStyLmZyYWMqYSkpfX1mdW5jdGlvbiBmKHQsZSl7dmFyIHI9ZS5sZW5ndGgtMixuPW8uY29uc3RyYWluKG8uZmluZEJpbih0LGUpLDAsciksaT1lW25dLGE9ZVtuKzFdLHM9by5jb25zdHJhaW4obisodC1pKS8oYS1pKS0uNSwwLHIpLGw9TWF0aC5yb3VuZChzKSxjPU1hdGguYWJzKHMtbCk7cmV0dXJuIHMmJnMhPT1yJiZjP3tiaW4wOmwsZnJhYzpjLGJpbjE6TWF0aC5yb3VuZChsK2MvKHMtbCkpfTp7YmluMDpsLGJpbjE6bCxmcmFjOjB9fWZ1bmN0aW9uIHAodCxlKXt2YXIgcj1lLmxlbmd0aC0xLG49by5jb25zdHJhaW4oby5maW5kQmluKHQsZSksMCxyKSxpPWVbbl0sYT0odC1pKS8oZVtuKzFdLWkpfHwwO3JldHVybiBhPD0wP3tiaW4wOm4sYmluMTpuLGZyYWM6MH06YTwuNT97YmluMDpuLGJpbjE6bisxLGZyYWM6YX06e2JpbjA6bisxLGJpbjE6bixmcmFjOjEtYX19ZnVuY3Rpb24gZCh0LGUscil7dFtlXT1yWzBdLHRbZSsxXT1yWzFdLHRbZSsyXT1yWzJdLHRbZSszXT1NYXRoLnJvdW5kKDI1NSpyWzNdKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGE9YyhyKTtpLnNlbGVjdEFsbCgiLmhtID4gaW1hZ2UiKS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXQudHJhY2V8fHt9O2FbZS51aWRdfHxuLnNlbGVjdCh0aGlzLnBhcmVudE5vZGUpLnJlbW92ZSgpfSk7Zm9yKHZhciBvPTA7bzxyLmxlbmd0aDtvKyspaCh0LGUscltvXSxpKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIjo1NzMsIi4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIjo2NjMsIi4uLy4uL2xpYiI6Njg0LCIuLi8uLi9wbG90cy9nZXRfZGF0YSI6NzY4LCIuLi8uLi9yZWdpc3RyeSI6ODE3LCIuL21heF9yb3dfbGVuZ3RoIjo5MzYsZDM6MTQ3LHRpbnljb2xvcjI6NDk5fV0sOTM4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe24uc2VsZWN0KHQpLnNlbGVjdEFsbCgiLmhtIGltYWdlIikuc3R5bGUoIm9wYWNpdHkiLGZ1bmN0aW9uKHQpe3JldHVybiB0LnRyYWNlLm9wYWNpdHl9KX19LHtkMzoxNDd9XSw5Mzk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXshMT09PXIoInpzbW9vdGgiKSYmKHIoInhnYXAiKSxyKCJ5Z2FwIikpLHIoInpob3ZlcmZvcm1hdCIpfX0se31dLDk0MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9yZWdpc3RyeSIpO2Z1bmN0aW9uIG8odCxlKXt2YXIgcj1lKHQpO3JldHVybiJzY2FsZWQiPT09KHI/ZSh0KyJ0eXBlIiwiYXJyYXkiKToic2NhbGVkIikmJihlKHQrIjAiKSxlKCJkIit0KSkscn1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyxsLGMpe3ZhciB1LGgsZj1yKCJ6Iik7aWYobD1sfHwieCIsYz1jfHwieSIsdm9pZCAwPT09Znx8IWYubGVuZ3RoKXJldHVybiAwO2lmKGkuaXNBcnJheTFEKHQueikpe2lmKHU9cihsKSxoPXIoYyksISh1JiZ1Lmxlbmd0aCYmaCYmaC5sZW5ndGgpKXJldHVybiAwO2UuX2xlbmd0aD1NYXRoLm1pbih1Lmxlbmd0aCxoLmxlbmd0aCxmLmxlbmd0aCl9ZWxzZXtpZih1PW8obCxyKSxoPW8oYyxyKSwhZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9ITAsYT0hMSxvPSExLHM9MDtzPHQubGVuZ3RoO3MrKyl7aWYoZT10W3NdLCFpLmlzQXJyYXlPclR5cGVkQXJyYXkoZSkpe3I9ITE7YnJlYWt9ZS5sZW5ndGg+MCYmKGE9ITApO2Zvcih2YXIgbD0wO2w8ZS5sZW5ndGg7bCsrKWlmKG4oZVtsXSkpe289ITA7YnJlYWt9fXJldHVybiByJiZhJiZvfShmKSlyZXR1cm4gMDtyKCJ0cmFuc3Bvc2UiKSxlLl9sZW5ndGg9bnVsbH1yZXR1cm4gYS5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZVRyYWNlRGVmYXVsdHMiKSh0LGUsW2wsY10scyksITB9fSx7Ii4uLy4uL2xpYiI6Njg0LCIuLi8uLi9yZWdpc3RyeSI6ODE3LCJmYXN0LWlzbnVtZXJpYyI6MjE0fV0sOTQxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Zvcih2YXIgbj10KCIuLi9oZWF0bWFwL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LHM9dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsLGw9WyJ6IiwieCIsIngwIiwiZHgiLCJ5IiwieTAiLCJkeSIsInRleHQiLCJ0cmFuc3Bvc2UiLCJ4dHlwZSIsInl0eXBlIl0sYz17fSx1PTA7dTxsLmxlbmd0aDt1Kyspe3ZhciBoPWxbdV07Y1toXT1uW2hdfW8oYyxpKCIiLHtjTGV0dGVyOiJ6IixhdXRvQ29sb3JEZmx0OiExfSkse2NvbG9yYmFyOmF9KSxlLmV4cG9ydHM9cyhjLCJjYWxjIiwibmVzdGVkIil9LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzIjo1NTksIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo1NjUsIi4uLy4uL2xpYi9leHRlbmQiOjY3MywiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6NzE1LCIuLi9oZWF0bWFwL2F0dHJpYnV0ZXMiOjkyNX1dLDk0MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJnbC1oZWF0bWFwMmQiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksYT10KCIuLi8uLi9saWIvc3RyMnJnYmFycmF5Iik7ZnVuY3Rpb24gbyh0LGUpe3RoaXMuc2NlbmU9dCx0aGlzLnVpZD1lLHRoaXMudHlwZT0iaGVhdG1hcGdsIix0aGlzLm5hbWU9IiIsdGhpcy5ob3ZlcmluZm89ImFsbCIsdGhpcy54RGF0YT1bXSx0aGlzLnlEYXRhPVtdLHRoaXMuekRhdGE9W10sdGhpcy50ZXh0TGFiZWxzPVtdLHRoaXMuaWRUb0luZGV4PVtdLHRoaXMuYm91bmRzPVswLDAsMCwwXSx0aGlzLm9wdGlvbnM9e3o6W10seDpbXSx5OltdLHNoYXBlOlswLDBdLGNvbG9yTGV2ZWxzOlswXSxjb2xvclZhbHVlczpbMCwwLDAsMV19LHRoaXMuaGVhdG1hcD1uKHQuZ2xwbG90LHRoaXMub3B0aW9ucyksdGhpcy5oZWF0bWFwLl90cmFjZT10aGlzfXZhciBzPW8ucHJvdG90eXBlO3MuaGFuZGxlUGljaz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLm9wdGlvbnMscj1lLnNoYXBlLG49dC5wb2ludElkLGk9biVyWzBdLGE9TWF0aC5mbG9vcihuL3JbMF0pLG89bjtyZXR1cm57dHJhY2U6dGhpcyxkYXRhQ29vcmQ6dC5kYXRhQ29vcmQsdHJhY2VDb29yZDpbZS54W2ldLGUueVthXSxlLnpbb11dLHRleHRMYWJlbDp0aGlzLnRleHRMYWJlbHNbbl0sbmFtZTp0aGlzLm5hbWUscG9pbnRJbmRleDpbYSxpXSxob3ZlcmluZm86dGhpcy5ob3ZlcmluZm99fSxzLnVwZGF0ZT1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF07dGhpcy5pbmRleD10LmluZGV4LHRoaXMubmFtZT10Lm5hbWUsdGhpcy5ob3ZlcmluZm89dC5ob3ZlcmluZm87dmFyIG49ci56O3RoaXMub3B0aW9ucy56PVtdLmNvbmNhdC5hcHBseShbXSxuKTt2YXIgbz1uWzBdLmxlbmd0aCxzPW4ubGVuZ3RoO3RoaXMub3B0aW9ucy5zaGFwZT1bbyxzXSx0aGlzLm9wdGlvbnMueD1yLngsdGhpcy5vcHRpb25zLnk9ci55O3ZhciBsPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LmNvbG9yc2NhbGUscj10LnptaW4sbj10LnptYXgsaT1lLmxlbmd0aCxvPW5ldyBBcnJheShpKSxzPW5ldyBBcnJheSg0KmkpLGw9MDtsPGk7bCsrKXt2YXIgYz1lW2xdLHU9YShjWzFdKTtvW2xdPXIrY1swXSoobi1yKTtmb3IodmFyIGg9MDtoPDQ7aCsrKXNbNCpsK2hdPXVbaF19cmV0dXJue2NvbG9yTGV2ZWxzOm8sY29sb3JWYWx1ZXM6c319KHQpO3RoaXMub3B0aW9ucy5jb2xvckxldmVscz1sLmNvbG9yTGV2ZWxzLHRoaXMub3B0aW9ucy5jb2xvclZhbHVlcz1sLmNvbG9yVmFsdWVzLHRoaXMudGV4dExhYmVscz1bXS5jb25jYXQuYXBwbHkoW10sdC50ZXh0KSx0aGlzLmhlYXRtYXAudXBkYXRlKHRoaXMub3B0aW9ucyksaS5leHBhbmQodGhpcy5zY2VuZS54YXhpcyxyLngpLGkuZXhwYW5kKHRoaXMuc2NlbmUueWF4aXMsci55KX0scy5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5oZWF0bWFwLmRpc3Bvc2UoKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1uZXcgbyh0LGUudWlkKTtyZXR1cm4gbi51cGRhdGUoZSxyKSxufX0seyIuLi8uLi9saWIvc3RyMnJnYmFycmF5Ijo3MDcsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3MzIsImdsLWhlYXRtYXAyZCI6MjQxfV0sOTQzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXt9O24uYXR0cmlidXRlcz10KCIuL2F0dHJpYnV0ZXMiKSxuLnN1cHBseURlZmF1bHRzPXQoIi4uL2hlYXRtYXAvZGVmYXVsdHMiKSxuLmNvbG9yYmFyPXQoIi4uL2hlYXRtYXAvY29sb3JiYXIiKSxuLmNhbGM9dCgiLi4vaGVhdG1hcC9jYWxjIiksbi5wbG90PXQoIi4vY29udmVydCIpLG4ubW9kdWxlVHlwZT0idHJhY2UiLG4ubmFtZT0iaGVhdG1hcGdsIixuLmJhc2VQbG90TW9kdWxlPXQoIi4uLy4uL3Bsb3RzL2dsMmQiKSxuLmNhdGVnb3JpZXM9WyJnbCIsImdsMmQiLCIyZE1hcCJdLG4ubWV0YT17fSxlLmV4cG9ydHM9bn0seyIuLi8uLi9wbG90cy9nbDJkIjo3NzEsIi4uL2hlYXRtYXAvY2FsYyI6OTI2LCIuLi9oZWF0bWFwL2NvbG9yYmFyIjo5MjgsIi4uL2hlYXRtYXAvZGVmYXVsdHMiOjkzMCwiLi9hdHRyaWJ1dGVzIjo5NDEsIi4vY29udmVydCI6OTQyfV0sOTQ0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2Jhci9hdHRyaWJ1dGVzIik7ZnVuY3Rpb24gaSh0KXt2YXIgZT17fTtlWyJhdXRvYmluIit0XT0hMTt2YXIgcj17fTtyZXR1cm4gclsiXmF1dG9iaW4iK3RdPSExLHtzdGFydDp7dmFsVHlwZToiYW55IixkZmx0Om51bGwsZWRpdFR5cGU6ImNhbGMiLGltcGxpZWRFZGl0czpyfSxlbmQ6e3ZhbFR5cGU6ImFueSIsZGZsdDpudWxsLGVkaXRUeXBlOiJjYWxjIixpbXBsaWVkRWRpdHM6cn0sc2l6ZTp7dmFsVHlwZToiYW55IixkZmx0Om51bGwsZWRpdFR5cGU6ImNhbGMiLGltcGxpZWRFZGl0czpyfSxlZGl0VHlwZToiY2FsYyIsaW1wbGllZEVkaXRzOmV9fWUuZXhwb3J0cz17eDp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSx5Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHRleHQ6bi50ZXh0LG9yaWVudGF0aW9uOm4ub3JpZW50YXRpb24saGlzdGZ1bmM6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImNvdW50Iiwic3VtIiwiYXZnIiwibWluIiwibWF4Il0sZGZsdDoiY291bnQiLGVkaXRUeXBlOiJjYWxjIn0saGlzdG5vcm06e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIiIsInBlcmNlbnQiLCJwcm9iYWJpbGl0eSIsImRlbnNpdHkiLCJwcm9iYWJpbGl0eSBkZW5zaXR5Il0sZGZsdDoiIixlZGl0VHlwZToiY2FsYyJ9LGN1bXVsYXRpdmU6e2VuYWJsZWQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6ImNhbGMifSxkaXJlY3Rpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImluY3JlYXNpbmciLCJkZWNyZWFzaW5nIl0sZGZsdDoiaW5jcmVhc2luZyIsZWRpdFR5cGU6ImNhbGMifSxjdXJyZW50YmluOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJpbmNsdWRlIiwiZXhjbHVkZSIsImhhbGYiXSxkZmx0OiJpbmNsdWRlIixlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIn0sYXV0b2Jpbng6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6bnVsbCxlZGl0VHlwZToiY2FsYyIsaW1wbGllZEVkaXRzOnsieGJpbnMuc3RhcnQiOnZvaWQgMCwieGJpbnMuZW5kIjp2b2lkIDAsInhiaW5zLnNpemUiOnZvaWQgMH19LG5iaW5zeDp7dmFsVHlwZToiaW50ZWdlciIsbWluOjAsZGZsdDowLGVkaXRUeXBlOiJjYWxjIn0seGJpbnM6aSgieCIpLGF1dG9iaW55Ont2YWxUeXBlOiJib29sZWFuIixkZmx0Om51bGwsZWRpdFR5cGU6ImNhbGMiLGltcGxpZWRFZGl0czp7InliaW5zLnN0YXJ0Ijp2b2lkIDAsInliaW5zLmVuZCI6dm9pZCAwLCJ5Ymlucy5zaXplIjp2b2lkIDB9fSxuYmluc3k6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZToiY2FsYyJ9LHliaW5zOmkoInkiKSxtYXJrZXI6bi5tYXJrZXIsc2VsZWN0ZWQ6bi5zZWxlY3RlZCx1bnNlbGVjdGVkOm4udW5zZWxlY3RlZCxfZGVwcmVjYXRlZDp7YmFyZGlyOm4uX2RlcHJlY2F0ZWQuYmFyZGlyfX19LHsiLi4vYmFyL2F0dHJpYnV0ZXMiOjgyN31dLDk0NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5sZW5ndGgsbj0wLGk9MDtpPHI7aSsrKWVbaV0/KHRbaV0vPWVbaV0sbis9dFtpXSk6dFtpXT1udWxsO3JldHVybiBufX0se31dLDk0NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHIoImhpc3Rub3JtIiksbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe3IodCsiYmlucy5zdGFydCIpLHIodCsiYmlucy5lbmQiKSxyKHQrImJpbnMuc2l6ZSIpLCExIT09cigiYXV0b2JpbiIrdCkmJnIoIm5iaW5zIit0KX0pLGV9fSx7fV0sOTQ3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIik7ZS5leHBvcnRzPXtjb3VudDpmdW5jdGlvbih0LGUscil7cmV0dXJuIHJbdF0rKywxfSxzdW06ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGE9aVtlXTtyZXR1cm4gbihhKT8oYT1OdW1iZXIoYSksclt0XSs9YSxhKTowfSxhdmc6ZnVuY3Rpb24odCxlLHIsaSxhKXt2YXIgbz1pW2VdO3JldHVybiBuKG8pJiYobz1OdW1iZXIobyksclt0XSs9byxhW3RdKyspLDB9LG1pbjpmdW5jdGlvbih0LGUscixpKXt2YXIgYT1pW2VdO2lmKG4oYSkpe2lmKGE9TnVtYmVyKGEpLCFuKHJbdF0pKXJldHVybiByW3RdPWEsYTtpZihyW3RdPmEpe3ZhciBvPWEtclt0XTtyZXR1cm4gclt0XT1hLG99fXJldHVybiAwfSxtYXg6ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGE9aVtlXTtpZihuKGEpKXtpZihhPU51bWJlcihhKSwhbihyW3RdKSlyZXR1cm4gclt0XT1hLGE7aWYoclt0XTxhKXt2YXIgbz1hLXJbdF07cmV0dXJuIHJbdF09YSxvfX1yZXR1cm4gMH19fSx7ImZhc3QtaXNudW1lcmljIjoyMTR9XSw5NDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLGk9bi5PTkVBVkdZRUFSLGE9bi5PTkVBVkdNT05USCxvPW4uT05FREFZLHM9bi5PTkVIT1VSLGw9bi5PTkVNSU4sYz1uLk9ORVNFQyx1PXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIikudGlja0luY3JlbWVudDtmdW5jdGlvbiBoKHQsZSxyLG4pe2lmKHQqZTw9MClyZXR1cm4gMS8wO2Zvcih2YXIgaT1NYXRoLmFicyhlLXQpLGE9ImRhdGUiPT09ci50eXBlLG89ZihpLGEpLHM9MDtzPDEwO3MrKyl7dmFyIGw9Zig4MCpvLGEpO2lmKG89PT1sKWJyZWFrO2lmKCFwKGwsdCxlLGEscixuKSlicmVhaztvPWx9cmV0dXJuIG99ZnVuY3Rpb24gZih0LGUpe3JldHVybiBlJiZ0PmM/dD5vP3Q+MS4xKmk/aTp0PjEuMSphP2E6bzp0PnM/czp0Pmw/bDpjOk1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2codCkvTWF0aC5MTjEwKSl9ZnVuY3Rpb24gcCh0LGUscixuLGEscyl7aWYobiYmdD5vKXt2YXIgbD1kKGUsYSxzKSxjPWQocixhLHMpLHU9dD09PWk/MDoxO3JldHVybiBsW3VdIT09Y1t1XX1yZXR1cm4gTWF0aC5mbG9vcihyL3QpLU1hdGguZmxvb3IoZS90KT4uMX1mdW5jdGlvbiBkKHQsZSxyKXt2YXIgbj1lLmMyZCh0LGkscikuc3BsaXQoIi0iKTtyZXR1cm4iIj09PW5bMF0mJihuLnVuc2hpZnQoKSxuWzBdPSItIituWzBdKSxufWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuLGEpe3ZhciBzLGwsYz0tMS4xKmUsZj0tLjEqZSxwPXQtZixkPXJbMF0sZz1yWzFdLG09TWF0aC5taW4oaChkK2YsZCtwLG4sYSksaChnK2YsZytwLG4sYSkpLHY9TWF0aC5taW4oaChkK2MsZCtmLG4sYSksaChnK2MsZytmLG4sYSkpO2lmKG0+diYmdjxNYXRoLmFicyhnLWQpLzRlMz8ocz1tLGw9ITEpOihzPU1hdGgubWluKG0sdiksbD0hMCksImRhdGUiPT09bi50eXBlJiZzPm8pe3ZhciB5PXM9PT1pPzE6Nix4PXM9PT1pPyJNMTIiOiJNMSI7cmV0dXJuIGZ1bmN0aW9uKGUscil7dmFyIG89bi5jMmQoZSxpLGEpLHM9by5pbmRleE9mKCItIix5KTtzPjAmJihvPW8uc3Vic3RyKDAscykpO3ZhciBjPW4uZDJjKG8sMCxhKTtpZihjPGUpe3ZhciBoPXUoYyx4LCExLGEpOyhjK2gpLzI8ZSt0JiYoYz1oKX1yZXR1cm4gciYmbD91KGMseCwhMCxhKTpjfX1yZXR1cm4gZnVuY3Rpb24oZSxyKXt2YXIgbj1zKk1hdGgucm91bmQoZS9zKTtyZXR1cm4gbitzLzEwPGUmJm4rLjkqczxlK3QmJihuKz1zKSxyJiZsJiYobi09cyksbn19fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjY2MSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjczMn1dLDk0OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLG89dCgiLi4vYmFyL2FycmF5c190b19jYWxjZGF0YSIpLHM9dCgiLi9iaW5fZnVuY3Rpb25zIiksbD10KCIuL25vcm1fZnVuY3Rpb25zIiksYz10KCIuL2F2ZXJhZ2UiKSx1PXQoIi4vY2xlYW5fYmlucyIpLGg9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLk9ORUFWR01PTlRILGY9dCgiLi9iaW5fbGFiZWxfdmFscyIpO2Z1bmN0aW9uIHAodCxlLHIsaSxvKXt2YXIgcyxsLGMsdSxoLGY9aSsiYmlucyIscD0ib3ZlcmxheSI9PT10Ll9mdWxsTGF5b3V0LmJhcm1vZGU7aWYoZS5fYXV0b0JpbkZpbmlzaGVkKWRlbGV0ZSBlLl9hdXRvQmluRmluaXNoZWQ7ZWxzZXt2YXIgdj1wP1tlXTpnKHQsZSkseT1bXSx4PTEvMCxiPTEvMCxfPS0xLzAsdz0iYXV0b2JpbiIraTtmb3Iocz0wO3M8di5sZW5ndGg7cysrKXtoPShsPXZbc10pLl9wb3MwPXIubWFrZUNhbGNkYXRhKGwsaSk7dmFyIGs9bFtmXTtpZihsW3ddfHwha3x8bnVsbD09PWsuc3RhcnR8fG51bGw9PT1rLmVuZCl7Yz1sW2krImNhbGVuZGFyIl07dmFyIE09bC5jdW11bGF0aXZlO2lmKGs9YS5hdXRvQmluKGgscixsWyJuYmlucyIraV0sITEsYykscCYmMD09PWsuX2RhdGFTcGFuJiYiY2F0ZWdvcnkiIT09ci50eXBlKXtpZihvKXJldHVybltrLGgsITBdO2s9ZCh0LGUscixpLGYpfU0uZW5hYmxlZCYmImluY2x1ZGUiIT09TS5jdXJyZW50YmluJiYoImRlY3JlYXNpbmciPT09TS5kaXJlY3Rpb24/Yj1NYXRoLm1pbihiLHIucjJjKGsuc3RhcnQsMCxjKS1rLnNpemUpOl89TWF0aC5tYXgoXyxyLnIyYyhrLmVuZCwwLGMpK2suc2l6ZSkpLHkucHVzaChsKX1lbHNlIHV8fCh1PXtzaXplOmsuc2l6ZSxzdGFydDpyLnIyYyhrLnN0YXJ0LDAsYyksZW5kOnIucjJjKGsuZW5kLDAsYyl9KTt4PW0oeCxrLnNpemUpLGI9TWF0aC5taW4oYixyLnIyYyhrLnN0YXJ0LDAsYykpLF89TWF0aC5tYXgoXyxyLnIyYyhrLmVuZCwwLGMpKSxzJiYobC5fYXV0b0JpbkZpbmlzaGVkPTEpfWlmKHUmJm4odS5zaXplKSYmbih4KSl7eD14PnUuc2l6ZS8xLjk/dS5zaXplOnUuc2l6ZS9NYXRoLmNlaWwodS5zaXplL3gpO3ZhciBBPXUuc3RhcnQrKHUuc2l6ZS14KS8yO2I9QS14Kk1hdGguY2VpbCgoQS1iKS94KX1mb3Iocz0wO3M8eS5sZW5ndGg7cysrKWM9KGw9eVtzXSlbaSsiY2FsZW5kYXIiXSxsLl9pbnB1dFtmXT1sW2ZdPXtzdGFydDpyLmMycihiLDAsYyksZW5kOnIuYzJyKF8sMCxjKSxzaXplOnh9LGwuX2lucHV0W3ddPWxbd119cmV0dXJuIGg9ZS5fcG9zMCxkZWxldGUgZS5fcG9zMCxbZVtmXSxoXX1mdW5jdGlvbiBkKHQsZSxyLG4sYSl7dmFyIG8scyxsPWcodCxlKSxjPSExLHU9MS8wLGg9W2VdO2ZvcihvPTA7bzxsLmxlbmd0aDtvKyspaWYoKHM9bFtvXSk9PT1lKWM9ITA7ZWxzZSBpZihjKXt2YXIgZj1wKHQscyxyLG4sITApLGQ9ZlswXSxtPWZbMl07cy5fYXV0b0JpbkZpbmlzaGVkPTEscy5fcG9zMD1mWzFdLG0/aC5wdXNoKHMpOnU9TWF0aC5taW4odSxkLnNpemUpfWVsc2UgdT1NYXRoLm1pbih1LHNbYV0uc2l6ZSk7dmFyIHY9bmV3IEFycmF5KGgubGVuZ3RoKTtmb3Iobz0wO288aC5sZW5ndGg7bysrKWZvcih2YXIgeT1oW29dLl9wb3MwLHg9MDt4PHkubGVuZ3RoO3grKylpZih2b2lkIDAhPT15W3hdKXt2W29dPXlbeF07YnJlYWt9Zm9yKGlzRmluaXRlKHUpfHwodT1pLmRpc3RpbmN0VmFscyh2KS5taW5EaWZmKSxvPTA7bzxoLmxlbmd0aDtvKyspe3ZhciBiPShzPWhbb10pW24rImNhbGVuZGFyIl07cy5faW5wdXRbYV09c1thXT17c3RhcnQ6ci5jMnIodltvXS11LzIsMCxiKSxlbmQ6ci5jMnIodltvXSt1LzIsMCxiKSxzaXplOnV9fXJldHVybiBlW2FdfWZ1bmN0aW9uIGcodCxlKXtmb3IodmFyIHI9ZS54YXhpcyxuPWUueWF4aXMsaT1lLm9yaWVudGF0aW9uLGE9W10sbz10Ll9mdWxsRGF0YSxzPTA7czxvLmxlbmd0aDtzKyspe3ZhciBsPW9bc107Imhpc3RvZ3JhbSI9PT1sLnR5cGUmJiEwPT09bC52aXNpYmxlJiZsLm9yaWVudGF0aW9uPT09aSYmbC54YXhpcz09PXImJmwueWF4aXM9PT1uJiZhLnB1c2gobCl9cmV0dXJuIGF9ZnVuY3Rpb24gbSh0LGUpe2lmKHQ9PT0xLzApcmV0dXJuIGU7dmFyIHI9dih0KTtyZXR1cm4gdihlKTxyP2U6dH1mdW5jdGlvbiB2KHQpe3JldHVybiBuKHQpP3Q6InN0cmluZyI9PXR5cGVvZiB0JiYiTSI9PT10LmNoYXJBdCgwKT9oKit0LnN1YnN0cigxKToxLzB9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoITA9PT1lLnZpc2libGUpe3ZhciByLGg9W10sZD1bXSxnPWEuZ2V0RnJvbUlkKHQsImgiPT09ZS5vcmllbnRhdGlvbj9lLnlheGlzfHwieSI6ZS54YXhpc3x8IngiKSxtPSJoIj09PWUub3JpZW50YXRpb24/InkiOiJ4Iix2PXt4OiJ5Iix5OiJ4In1bbV0seT1lW20rImNhbGVuZGFyIl0seD1lLmN1bXVsYXRpdmU7dShlLGcsbSk7dmFyIGIsXyx3LGs9cCh0LGUsZyxtKSxNPWtbMF0sQT1rWzFdLFQ9InN0cmluZyI9PXR5cGVvZiBNLnNpemUsUz1bXSxFPVQ/UzpNLEM9W10sTD1bXSx6PVtdLFA9MCxJPWUuaGlzdG5vcm0sTz1lLmhpc3RmdW5jLEQ9LTEhPT1JLmluZGV4T2YoImRlbnNpdHkiKTt4LmVuYWJsZWQmJkQmJihJPUkucmVwbGFjZSgvID9kZW5zaXR5JC8sIiIpLEQ9ITEpO3ZhciBSLEI9Im1heCI9PT1PfHwibWluIj09PU8/bnVsbDowLEY9cy5jb3VudCxOPWxbSV0saj0hMSxWPWZ1bmN0aW9uKHQpe3JldHVybiBnLnIyYyh0LDAseSl9O2ZvcihpLmlzQXJyYXlPclR5cGVkQXJyYXkoZVt2XSkmJiJjb3VudCIhPT1PJiYoUj1lW3ZdLGo9ImF2ZyI9PT1PLEY9c1tPXSkscj1WKE0uc3RhcnQpLF89VihNLmVuZCkrKHItYS50aWNrSW5jcmVtZW50KHIsTS5zaXplLCExLHkpKS8xZTY7cjxfJiZoLmxlbmd0aDwxZTYmJihiPWEudGlja0luY3JlbWVudChyLE0uc2l6ZSwhMSx5KSxoLnB1c2goKHIrYikvMiksZC5wdXNoKEIpLHoucHVzaChbXSksUy5wdXNoKHIpLEQmJkMucHVzaCgxLyhiLXIpKSxqJiZMLnB1c2goMCksIShiPD1yKSk7KXI9YjtTLnB1c2gociksVHx8ImRhdGUiIT09Zy50eXBlfHwoRT17c3RhcnQ6VihFLnN0YXJ0KSxlbmQ6VihFLmVuZCksc2l6ZTpFLnNpemV9KTt2YXIgVSxxPWQubGVuZ3RoLEg9ITAsRz0xLzAsVz0xLzAsWT17fTtmb3Iocj0wO3I8QS5sZW5ndGg7cisrKXt2YXIgWD1BW3JdOyh3PWkuZmluZEJpbihYLEUpKT49MCYmdzxxJiYoUCs9Rih3LHIsZCxSLEwpLEgmJnpbd10ubGVuZ3RoJiZYIT09QVt6W3ddWzBdXSYmKEg9ITEpLHpbd10ucHVzaChyKSxZW3JdPXcsRz1NYXRoLm1pbihHLFgtU1t3XSksVz1NYXRoLm1pbihXLFNbdysxXS1YKSl9SHx8KFU9ZihHLFcsUyxnLHkpKSxqJiYoUD1jKGQsTCkpLE4mJk4oZCxQLEMpLHguZW5hYmxlZCYmZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYTtmdW5jdGlvbiBvKGUpe2E9dFtlXSx0W2VdLz0yfWZ1bmN0aW9uIHMoZSl7aT10W2VdLHRbZV09YStpLzIsYSs9aX1pZigiaGFsZiI9PT1yKWlmKCJpbmNyZWFzaW5nIj09PWUpZm9yKG8oMCksbj0xO248dC5sZW5ndGg7bisrKXMobik7ZWxzZSBmb3Iobyh0Lmxlbmd0aC0xKSxuPXQubGVuZ3RoLTI7bj49MDtuLS0pcyhuKTtlbHNlIGlmKCJpbmNyZWFzaW5nIj09PWUpe2ZvcihuPTE7bjx0Lmxlbmd0aDtuKyspdFtuXSs9dFtuLTFdOyJleGNsdWRlIj09PXImJih0LnVuc2hpZnQoMCksdC5wb3AoKSl9ZWxzZXtmb3Iobj10Lmxlbmd0aC0yO24+PTA7bi0tKXRbbl0rPXRbbisxXTsiZXhjbHVkZSI9PT1yJiYodC5wdXNoKDApLHQuc2hpZnQoKSl9fShkLHguZGlyZWN0aW9uLHguY3VycmVudGJpbik7dmFyIFo9TWF0aC5taW4oaC5sZW5ndGgsZC5sZW5ndGgpLCQ9W10sSj0wLEs9Wi0xO2ZvcihyPTA7cjxaO3IrKylpZihkW3JdKXtKPXI7YnJlYWt9Zm9yKHI9Wi0xO3I+PUo7ci0tKWlmKGRbcl0pe0s9cjticmVha31mb3Iocj1KO3I8PUs7cisrKWlmKG4oaFtyXSkmJm4oZFtyXSkpe3ZhciBRPXtwOmhbcl0sczpkW3JdLGI6MH07eC5lbmFibGVkfHwoUS5wdHM9eltyXSxIP1EucDA9US5wMT16W3JdLmxlbmd0aD9BW3pbcl1bMF1dOmhbcl06KFEucDA9VShTW3JdKSxRLnAxPVUoU1tyKzFdLCEwKSkpLCQucHVzaChRKX1yZXR1cm4gMT09PSQubGVuZ3RoJiYoJFswXS53aWR0aDE9YS50aWNrSW5jcmVtZW50KCRbMF0ucCxNLnNpemUsITEseSktJFswXS5wKSxvKCQsZSksaS5pc0FycmF5T3JUeXBlZEFycmF5KGUuc2VsZWN0ZWRwb2ludHMpJiZpLnRhZ1NlbGVjdGVkKCQsZSxZKSwkfX19LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NjYxLCIuLi8uLi9saWIiOjY4NCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjczMiwiLi4vYmFyL2FycmF5c190b19jYWxjZGF0YSI6ODI2LCIuL2F2ZXJhZ2UiOjk0NSwiLi9iaW5fZnVuY3Rpb25zIjo5NDcsIi4vYmluX2xhYmVsX3ZhbHMiOjk0OCwiLi9jbGVhbl9iaW5zIjo5NTAsIi4vbm9ybV9mdW5jdGlvbnMiOjk1NSwiZmFzdC1pc251bWVyaWMiOjIxNH1dLDk1MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vbGliIikuY2xlYW5EYXRlLGE9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLG89YS5PTkVEQVkscz1hLkJBRE5VTTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBhPWUudHlwZSxsPXIrImJpbnMiLGM9dFtsXTtjfHwoYz10W2xdPXt9KTt2YXIgdT0iZGF0ZSI9PT1hP2Z1bmN0aW9uKHQpe3JldHVybiB0fHwwPT09dD9pKHQscyxjLmNhbGVuZGFyKTpudWxsfTpmdW5jdGlvbih0KXtyZXR1cm4gbih0KT9OdW1iZXIodCk6bnVsbH07Yy5zdGFydD11KGMuc3RhcnQpLGMuZW5kPXUoYy5lbmQpO3ZhciBoPSJkYXRlIj09PWE/bzoxLGY9Yy5zaXplO2lmKG4oZikpYy5zaXplPWY+MD9OdW1iZXIoZik6aDtlbHNlIGlmKCJzdHJpbmciIT10eXBlb2YgZiljLnNpemU9aDtlbHNle3ZhciBwPWYuY2hhckF0KDApLGQ9Zi5zdWJzdHIoMSk7KChkPW4oZCk/TnVtYmVyKGQpOjApPD0wfHwiZGF0ZSIhPT1hfHwiTSIhPT1wfHxkIT09TWF0aC5yb3VuZChkKSkmJihjLnNpemU9aCl9dmFyIGc9ImF1dG9iaW4iK3I7ImJvb2xlYW4iIT10eXBlb2YgdFtnXSYmKHRbZ109dC5fZnVsbElucHV0W2ddPXQuX2lucHV0W2ddPSEoKGMuc3RhcnR8fDA9PT1jLnN0YXJ0KSYmKGMuZW5kfHwwPT09Yy5lbmQpKSksdFtnXXx8KGRlbGV0ZSB0WyJuYmlucyIrcl0sZGVsZXRlIHQuX2Z1bGxJbnB1dFsibmJpbnMiK3JdKX19LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NjYxLCIuLi8uLi9saWIiOjY4NCwiZmFzdC1pc251bWVyaWMiOjIxNH1dLDk1MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksbz10KCIuL2Jpbl9kZWZhdWx0cyIpLHM9dCgiLi4vYmFyL3N0eWxlX2RlZmF1bHRzIiksbD10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYyl7ZnVuY3Rpb24gdShyLG4pe3JldHVybiBpLmNvZXJjZSh0LGUsbCxyLG4pfXZhciBoPXUoIngiKSxmPXUoInkiKTt1KCJjdW11bGF0aXZlLmVuYWJsZWQiKSYmKHUoImN1bXVsYXRpdmUuZGlyZWN0aW9uIiksdSgiY3VtdWxhdGl2ZS5jdXJyZW50YmluIikpLHUoInRleHQiKTt2YXIgcD11KCJvcmllbnRhdGlvbiIsZiYmIWg/ImgiOiJ2IiksZD0idiI9PT1wPyJ4IjoieSIsZz0idiI9PT1wPyJ5IjoieCIsbT1oJiZmP01hdGgubWluKGgubGVuZ3RoJiZmLmxlbmd0aCk6KGVbZF18fFtdKS5sZW5ndGg7aWYobSl7ZS5fbGVuZ3RoPW0sbi5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZVRyYWNlRGVmYXVsdHMiKSh0LGUsWyJ4IiwieSJdLGMpLGVbZ10mJnUoImhpc3RmdW5jIiksbyh0LGUsdSxbZF0pLHModCxlLHUscixjKTt2YXIgdj1uLmdldENvbXBvbmVudE1ldGhvZCgiZXJyb3JiYXJzIiwic3VwcGx5RGVmYXVsdHMiKTt2KHQsZSxhLmRlZmF1bHRMaW5lLHtheGlzOiJ5In0pLHYodCxlLGEuZGVmYXVsdExpbmUse2F4aXM6IngiLGluaGVyaXQ6InkifSksaS5jb2VyY2VTZWxlY3Rpb25NYXJrZXJPcGFjaXR5KGUsdSl9ZWxzZSBlLnZpc2libGU9ITF9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjU1OCwiLi4vLi4vbGliIjo2ODQsIi4uLy4uL3JlZ2lzdHJ5Ijo4MTcsIi4uL2Jhci9zdHlsZV9kZWZhdWx0cyI6ODM5LCIuL2F0dHJpYnV0ZXMiOjk0NCwiLi9iaW5fZGVmYXVsdHMiOjk0Nn1dLDk1MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbixpKXtpZih0Lng9InhWYWwiaW4gZT9lLnhWYWw6ZS54LHQueT0ieVZhbCJpbiBlP2UueVZhbDplLnksZS54YSYmKHQueGF4aXM9ZS54YSksZS55YSYmKHQueWF4aXM9ZS55YSksIShyLmN1bXVsYXRpdmV8fHt9KS5lbmFibGVkKXt2YXIgYSxvPUFycmF5LmlzQXJyYXkoaSk/blswXS5wdHNbaVswXV1baVsxXV06bltpXS5wdHM7aWYodC5wb2ludE51bWJlcnM9byx0LmJpbk51bWJlcj10LnBvaW50TnVtYmVyLGRlbGV0ZSB0LnBvaW50TnVtYmVyLGRlbGV0ZSB0LnBvaW50SW5kZXgsci5faW5kZXhUb1BvaW50cyl7YT1bXTtmb3IodmFyIHM9MDtzPG8ubGVuZ3RoO3MrKylhPWEuY29uY2F0KHIuX2luZGV4VG9Qb2ludHNbb1tzXV0pfWVsc2UgYT1vO3QucG9pbnRJbmRpY2VzPWF9cmV0dXJuIHR9fSx7fV0sOTUzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2Jhci9ob3ZlciIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKS5ob3ZlckxhYmVsVGV4dDtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7dmFyIG89bih0LGUscixhKTtpZihvKXt2YXIgcz0odD1vWzBdKS5jZFt0LmluZGV4XSxsPXQuY2RbMF0udHJhY2U7aWYoIWwuY3VtdWxhdGl2ZS5lbmFibGVkKXt2YXIgYz0iaCI9PT1sLm9yaWVudGF0aW9uPyJ5IjoieCI7dFtjKyJMYWJlbCJdPWkodFtjKyJhIl0scy5wMCxzLnAxKX1yZXR1cm4gb319fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3MzIsIi4uL2Jhci9ob3ZlciI6ODMwfV0sOTU0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXt9O24uYXR0cmlidXRlcz10KCIuL2F0dHJpYnV0ZXMiKSxuLmxheW91dEF0dHJpYnV0ZXM9dCgiLi4vYmFyL2xheW91dF9hdHRyaWJ1dGVzIiksbi5zdXBwbHlEZWZhdWx0cz10KCIuL2RlZmF1bHRzIiksbi5zdXBwbHlMYXlvdXREZWZhdWx0cz10KCIuLi9iYXIvbGF5b3V0X2RlZmF1bHRzIiksbi5jYWxjPXQoIi4vY2FsYyIpLG4uc2V0UG9zaXRpb25zPXQoIi4uL2Jhci9zZXRfcG9zaXRpb25zIiksbi5wbG90PXQoIi4uL2Jhci9wbG90Iiksbi5sYXllck5hbWU9ImJhcmxheWVyIixuLnN0eWxlPXQoIi4uL2Jhci9zdHlsZSIpLnN0eWxlLG4uc3R5bGVPblNlbGVjdD10KCIuLi9iYXIvc3R5bGUiKS5zdHlsZU9uU2VsZWN0LG4uY29sb3JiYXI9dCgiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiKSxuLmhvdmVyUG9pbnRzPXQoIi4vaG92ZXIiKSxuLnNlbGVjdFBvaW50cz10KCIuLi9iYXIvc2VsZWN0Iiksbi5ldmVudERhdGE9dCgiLi9ldmVudF9kYXRhIiksbi5tb2R1bGVUeXBlPSJ0cmFjZSIsbi5uYW1lPSJoaXN0b2dyYW0iLG4uYmFzZVBsb3RNb2R1bGU9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuIiksbi5jYXRlZ29yaWVzPVsiY2FydGVzaWFuIiwic3ZnIiwiYmFyIiwiaGlzdG9ncmFtIiwib3JpZW50ZWQiLCJlcnJvckJhcnNPSyIsInNob3dMZWdlbmQiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuIjo3NDMsIi4uL2Jhci9sYXlvdXRfYXR0cmlidXRlcyI6ODMyLCIuLi9iYXIvbGF5b3V0X2RlZmF1bHRzIjo4MzMsIi4uL2Jhci9wbG90Ijo4MzQsIi4uL2Jhci9zZWxlY3QiOjgzNSwiLi4vYmFyL3NldF9wb3NpdGlvbnMiOjgzNiwiLi4vYmFyL3N0eWxlIjo4MzgsIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIjoxMDMyLCIuL2F0dHJpYnV0ZXMiOjk0NCwiLi9jYWxjIjo5NDksIi4vZGVmYXVsdHMiOjk1MSwiLi9ldmVudF9kYXRhIjo5NTIsIi4vaG92ZXIiOjk1M31dLDk1NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e3BlcmNlbnQ6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5sZW5ndGgsbj0xMDAvZSxpPTA7aTxyO2krKyl0W2ldKj1ufSxwcm9iYWJpbGl0eTpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPTA7bjxyO24rKyl0W25dLz1lfSxkZW5zaXR5OmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXQubGVuZ3RoO249bnx8MTtmb3IodmFyIGE9MDthPGk7YSsrKXRbYV0qPXJbYV0qbn0sInByb2JhYmlsaXR5IGRlbnNpdHkiOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXQubGVuZ3RoO24mJihlLz1uKTtmb3IodmFyIGE9MDthPGk7YSsrKXRbYV0qPXJbYV0vZX19fSx7fV0sOTU2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2hpc3RvZ3JhbS9hdHRyaWJ1dGVzIiksaT10KCIuLi9oZWF0bWFwL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz1zKHt4Om4ueCx5Om4ueSx6Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LG1hcmtlcjp7Y29sb3I6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSxoaXN0bm9ybTpuLmhpc3Rub3JtLGhpc3RmdW5jOm4uaGlzdGZ1bmMsYXV0b2Jpbng6bi5hdXRvYmlueCxuYmluc3g6bi5uYmluc3gseGJpbnM6bi54YmlucyxhdXRvYmlueTpuLmF1dG9iaW55LG5iaW5zeTpuLm5iaW5zeSx5YmluczpuLnliaW5zLHhnYXA6aS54Z2FwLHlnYXA6aS55Z2FwLHpzbW9vdGg6aS56c21vb3RoLHpob3ZlcmZvcm1hdDppLnpob3ZlcmZvcm1hdH0sYSgiIix7Y0xldHRlcjoieiIsYXV0b0NvbG9yRGZsdDohMX0pLHtjb2xvcmJhcjpvfSl9LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzIjo1NTksIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo1NjUsIi4uLy4uL2xpYi9leHRlbmQiOjY3MywiLi4vaGVhdG1hcC9hdHRyaWJ1dGVzIjo5MjUsIi4uL2hpc3RvZ3JhbS9hdHRyaWJ1dGVzIjo5NDR9XSw5NTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGE9dCgiLi4vaGlzdG9ncmFtL2Jpbl9mdW5jdGlvbnMiKSxvPXQoIi4uL2hpc3RvZ3JhbS9ub3JtX2Z1bmN0aW9ucyIpLHM9dCgiLi4vaGlzdG9ncmFtL2F2ZXJhZ2UiKSxsPXQoIi4uL2hpc3RvZ3JhbS9jbGVhbl9iaW5zIiksYz10KCIuLi9oaXN0b2dyYW0vYmluX2xhYmVsX3ZhbHMiKTtmdW5jdGlvbiB1KHQsZSxyLG4sYSxvLHMpe3ZhciBjPWUrImJpbnMiLHU9ImF1dG9iaW4iK2UsaD10W2NdO2wodCxuLGUpLCF0W3VdJiZoJiZudWxsIT09aC5zdGFydCYmbnVsbCE9PWguZW5kfHwoaD1pLmF1dG9CaW4ocixuLHRbIm5iaW5zIitlXSwiMmQiLHMpLCJoaXN0b2dyYW0yZGNvbnRvdXIiPT09dC50eXBlJiYoaC5zdGFydD1vKGkudGlja0luY3JlbWVudChhKGguc3RhcnQpLGguc2l6ZSwhMCxzKSksaC5lbmQ9byhpLnRpY2tJbmNyZW1lbnQoYShoLmVuZCksaC5zaXplLCExLHMpKSksdC5faW5wdXRbY109dFtjXT1oLHQuX2lucHV0W3VdPXRbdV0pfWZ1bmN0aW9uIGgodCxlLHIsbil7dmFyIGksYT1uZXcgQXJyYXkodCk7aWYobilmb3IoaT0wO2k8dDtpKyspYVtpXT0xLyhlW2krMV0tZVtpXSk7ZWxzZXt2YXIgbz0xL3I7Zm9yKGk9MDtpPHQ7aSsrKWFbaV09b31yZXR1cm4gYX1mdW5jdGlvbiBmKHQsZSl7cmV0dXJue3N0YXJ0OnQoZS5zdGFydCksZW5kOnQoZS5lbmQpLHNpemU6ZS5zaXplfX1mdW5jdGlvbiBwKHQsZSxyLG4saSxhKXt2YXIgbyxzPXQubGVuZ3RoLTEsbD1uZXcgQXJyYXkocyk7aWYoZSlmb3Iobz0wO288cztvKyspbFtvXT1bZVtvXSxlW29dXTtlbHNle3ZhciB1PWMocixuLHQsaSxhKTtmb3Iobz0wO288cztvKyspbFtvXT1bdSh0W29dKSx1KHRbbysxXSwhMCldfXJldHVybiBsfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGwsYyxkLGc9aS5nZXRGcm9tSWQodCxlLnhheGlzfHwieCIpLG09ZS54P2cubWFrZUNhbGNkYXRhKGUsIngiKTpbXSx2PWkuZ2V0RnJvbUlkKHQsZS55YXhpc3x8InkiKSx5PWUueT92Lm1ha2VDYWxjZGF0YShlLCJ5Iik6W10seD1lLnhjYWxlbmRhcixiPWUueWNhbGVuZGFyLF89ZnVuY3Rpb24odCl7cmV0dXJuIGcucjJjKHQsMCx4KX0sdz1mdW5jdGlvbih0KXtyZXR1cm4gdi5yMmModCwwLGIpfSxrPWZ1bmN0aW9uKHQpe3JldHVybiBnLmMycih0LDAseCl9LE09ZnVuY3Rpb24odCl7cmV0dXJuIHYuYzJyKHQsMCxiKX0sQT1lLl9sZW5ndGg7bS5sZW5ndGg+QSYmbS5zcGxpY2UoQSxtLmxlbmd0aC1BKSx5Lmxlbmd0aD5BJiZ5LnNwbGljZShBLHkubGVuZ3RoLUEpLHUoZSwieCIsbSxnLF8sayx4KSx1KGUsInkiLHksdix3LE0sYik7dmFyIFQ9W10sUz1bXSxFPVtdLEM9InN0cmluZyI9PXR5cGVvZiBlLnhiaW5zLnNpemUsTD0ic3RyaW5nIj09dHlwZW9mIGUueWJpbnMuc2l6ZSx6PVtdLFA9W10sST1DP3o6ZS54YmlucyxPPUw/UDplLnliaW5zLEQ9MCxSPVtdLEI9W10sRj1lLmhpc3Rub3JtLE49ZS5oaXN0ZnVuYyxqPS0xIT09Ri5pbmRleE9mKCJkZW5zaXR5IiksVj0ibWF4Ij09PU58fCJtaW4iPT09Tj9udWxsOjAsVT1hLmNvdW50LHE9b1tGXSxIPSExLEc9W10sVz1bXSxZPSJ6ImluIGU/ZS56OiJtYXJrZXIiaW4gZSYmQXJyYXkuaXNBcnJheShlLm1hcmtlci5jb2xvcik/ZS5tYXJrZXIuY29sb3I6IiI7WSYmImNvdW50IiE9PU4mJihIPSJhdmciPT09TixVPWFbTl0pO3ZhciBYPWUueGJpbnMsWj1fKFguc3RhcnQpLCQ9XyhYLmVuZCkrKFotaS50aWNrSW5jcmVtZW50KFosWC5zaXplLCExLHgpKS8xZTY7Zm9yKHI9WjtyPCQ7cj1pLnRpY2tJbmNyZW1lbnQocixYLnNpemUsITEseCkpUy5wdXNoKFYpLHoucHVzaChyKSxIJiZFLnB1c2goMCk7ei5wdXNoKHIpO3ZhciBKPVMubGVuZ3RoLEs9XyhlLnhiaW5zLnN0YXJ0KSxRPShyLUspL0osdHQ9ayhLK1EvMik7Zm9yKFo9dygoWD1lLnliaW5zKS5zdGFydCksJD13KFguZW5kKSsoWi1pLnRpY2tJbmNyZW1lbnQoWixYLnNpemUsITEsYikpLzFlNixyPVo7cjwkO3I9aS50aWNrSW5jcmVtZW50KHIsWC5zaXplLCExLGIpKXtULnB1c2goUy5zbGljZSgpKSxQLnB1c2gocik7dmFyIGV0PW5ldyBBcnJheShKKTtmb3IobD0wO2w8SjtsKyspZXRbbF09W107Qi5wdXNoKGV0KSxIJiZSLnB1c2goRS5zbGljZSgpKX1QLnB1c2gocik7dmFyIHJ0PVQubGVuZ3RoLG50PXcoZS55Ymlucy5zdGFydCksaXQ9KHItbnQpL3J0LGF0PU0obnQraXQvMik7aiYmKEc9aChTLmxlbmd0aCxJLFEsQyksVz1oKFQubGVuZ3RoLE8saXQsTCkpLEN8fCJkYXRlIiE9PWcudHlwZXx8KEk9ZihfLEkpKSxMfHwiZGF0ZSIhPT12LnR5cGV8fChPPWYodyxPKSk7dmFyIG90PSEwLHN0PSEwLGx0PW5ldyBBcnJheShKKSxjdD1uZXcgQXJyYXkocnQpLHV0PTEvMCxodD0xLzAsZnQ9MS8wLHB0PTEvMDtmb3Iocj0wO3I8QTtyKyspe3ZhciBkdD1tW3JdLGd0PXlbcl07Yz1uLmZpbmRCaW4oZHQsSSksZD1uLmZpbmRCaW4oZ3QsTyksYz49MCYmYzxKJiZkPj0wJiZkPHJ0JiYoRCs9VShjLHIsVFtkXSxZLFJbZF0pLEJbZF1bY10ucHVzaChyKSxvdCYmKHZvaWQgMD09PWx0W2NdP2x0W2NdPWR0Omx0W2NdIT09ZHQmJihvdD0hMSkpLHN0JiYodm9pZCAwPT09Y3RbY10/Y3RbY109Z3Q6Y3RbY10hPT1ndCYmKHN0PSExKSksdXQ9TWF0aC5taW4odXQsZHQteltjXSksaHQ9TWF0aC5taW4oaHQseltjKzFdLWR0KSxmdD1NYXRoLm1pbihmdCxndC1QW2RdKSxwdD1NYXRoLm1pbihwdCxQW2QrMV0tZ3QpKX1pZihIKWZvcihkPTA7ZDxydDtkKyspRCs9cyhUW2RdLFJbZF0pO2lmKHEpZm9yKGQ9MDtkPHJ0O2QrKylxKFRbZF0sRCxHLFdbZF0pO3JldHVybnt4Om0seFJhbmdlczpwKHosb3QmJmx0LHV0LGh0LGcseCkseDA6dHQsZHg6USx5OnkseVJhbmdlczpwKFAsc3QmJmN0LGZ0LHB0LHYsYikseTA6YXQsZHk6aXQsejpULHB0czpCfX19LHsiLi4vLi4vbGliIjo2ODQsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3MzIsIi4uL2hpc3RvZ3JhbS9hdmVyYWdlIjo5NDUsIi4uL2hpc3RvZ3JhbS9iaW5fZnVuY3Rpb25zIjo5NDcsIi4uL2hpc3RvZ3JhbS9iaW5fbGFiZWxfdmFscyI6OTQ4LCIuLi9oaXN0b2dyYW0vY2xlYW5fYmlucyI6OTUwLCIuLi9oaXN0b2dyYW0vbm9ybV9mdW5jdGlvbnMiOjk1NX1dLDk1ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vc2FtcGxlX2RlZmF1bHRzIiksYT10KCIuLi9oZWF0bWFwL3N0eWxlX2RlZmF1bHRzIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiKSxzPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixsKXtmdW5jdGlvbiBjKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxzLHIsaSl9aSh0LGUsYyxsKSwhMSE9PWUudmlzaWJsZSYmKGEodCxlLGMsbCksbyh0LGUsbCxjLHtwcmVmaXg6IiIsY0xldHRlcjoieiJ9KSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyI6NTY4LCIuLi8uLi9saWIiOjY4NCwiLi4vaGVhdG1hcC9zdHlsZV9kZWZhdWx0cyI6OTM5LCIuL2F0dHJpYnV0ZXMiOjk1NiwiLi9zYW1wbGVfZGVmYXVsdHMiOjk2MX1dLDk1OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9oZWF0bWFwL2hvdmVyIiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLmhvdmVyTGFiZWxUZXh0O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhLG8scyl7dmFyIGw9bih0LGUscixhLG8scyk7aWYobCl7dmFyIGM9KHQ9bFswXSkuaW5kZXgsdT1jWzBdLGg9Y1sxXSxmPXQuY2RbMF0scD1mLnhSYW5nZXNbaF0sZD1mLnlSYW5nZXNbdV07cmV0dXJuIHQueExhYmVsPWkodC54YSxwWzBdLHBbMV0pLHQueUxhYmVsPWkodC55YSxkWzBdLGRbMV0pLGx9fX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzMyLCIuLi9oZWF0bWFwL2hvdmVyIjo5MzJ9XSw5NjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoIi4vYXR0cmlidXRlcyIpLG4uc3VwcGx5RGVmYXVsdHM9dCgiLi9kZWZhdWx0cyIpLG4uY2FsYz10KCIuLi9oZWF0bWFwL2NhbGMiKSxuLnBsb3Q9dCgiLi4vaGVhdG1hcC9wbG90Iiksbi5sYXllck5hbWU9ImhlYXRtYXBsYXllciIsbi5jb2xvcmJhcj10KCIuLi9oZWF0bWFwL2NvbG9yYmFyIiksbi5zdHlsZT10KCIuLi9oZWF0bWFwL3N0eWxlIiksbi5ob3ZlclBvaW50cz10KCIuL2hvdmVyIiksbi5ldmVudERhdGE9dCgiLi4vaGlzdG9ncmFtL2V2ZW50X2RhdGEiKSxuLm1vZHVsZVR5cGU9InRyYWNlIixuLm5hbWU9Imhpc3RvZ3JhbTJkIixuLmJhc2VQbG90TW9kdWxlPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiIpLG4uY2F0ZWdvcmllcz1bImNhcnRlc2lhbiIsInN2ZyIsIjJkTWFwIiwiaGlzdG9ncmFtIl0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbiI6NzQzLCIuLi9oZWF0bWFwL2NhbGMiOjkyNiwiLi4vaGVhdG1hcC9jb2xvcmJhciI6OTI4LCIuLi9oZWF0bWFwL3Bsb3QiOjkzNywiLi4vaGVhdG1hcC9zdHlsZSI6OTM4LCIuLi9oaXN0b2dyYW0vZXZlbnRfZGF0YSI6OTUyLCIuL2F0dHJpYnV0ZXMiOjk1NiwiLi9kZWZhdWx0cyI6OTU4LCIuL2hvdmVyIjo5NTl9XSw5NjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4uL2hpc3RvZ3JhbS9iaW5fZGVmYXVsdHMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7dmFyIG89cigieCIpLHM9cigieSIpO2lmKG8mJm8ubGVuZ3RoJiZzJiZzLmxlbmd0aCl7ZS5fbGVuZ3RoPU1hdGgubWluKG8ubGVuZ3RoLHMubGVuZ3RoKSxuLmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwiaGFuZGxlVHJhY2VEZWZhdWx0cyIpKHQsZSxbIngiLCJ5Il0sYSksKHIoInoiKXx8cigibWFya2VyLmNvbG9yIikpJiZyKCJoaXN0ZnVuYyIpO2kodCxlLHIsWyJ4IiwieSJdKX1lbHNlIGUudmlzaWJsZT0hMX19LHsiLi4vLi4vcmVnaXN0cnkiOjgxNywiLi4vaGlzdG9ncmFtL2Jpbl9kZWZhdWx0cyI6OTQ2fV0sOTYyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2hpc3RvZ3JhbTJkL2F0dHJpYnV0ZXMiKSxpPXQoIi4uL2NvbnRvdXIvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPXMoe3g6bi54LHk6bi55LHo6bi56LG1hcmtlcjpuLm1hcmtlcixoaXN0bm9ybTpuLmhpc3Rub3JtLGhpc3RmdW5jOm4uaGlzdGZ1bmMsYXV0b2Jpbng6bi5hdXRvYmlueCxuYmluc3g6bi5uYmluc3gseGJpbnM6bi54YmlucyxhdXRvYmlueTpuLmF1dG9iaW55LG5iaW5zeTpuLm5iaW5zeSx5YmluczpuLnliaW5zLGF1dG9jb250b3VyOmkuYXV0b2NvbnRvdXIsbmNvbnRvdXJzOmkubmNvbnRvdXJzLGNvbnRvdXJzOmkuY29udG91cnMsbGluZTppLmxpbmUsemhvdmVyZm9ybWF0Om4uemhvdmVyZm9ybWF0fSxhKCIiLHtjTGV0dGVyOiJ6IixlZGl0VHlwZU92ZXJyaWRlOiJjYWxjIn0pLHtjb2xvcmJhcjpvfSl9LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzIjo1NTksIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo1NjUsIi4uLy4uL2xpYi9leHRlbmQiOjY3MywiLi4vY29udG91ci9hdHRyaWJ1dGVzIjo4OTYsIi4uL2hpc3RvZ3JhbTJkL2F0dHJpYnV0ZXMiOjk1Nn1dLDk2MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uL2hpc3RvZ3JhbTJkL3NhbXBsZV9kZWZhdWx0cyIpLGE9dCgiLi4vY29udG91ci9jb250b3Vyc19kZWZhdWx0cyIpLG89dCgiLi4vY29udG91ci9zdHlsZV9kZWZhdWx0cyIpLHM9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGwpe2Z1bmN0aW9uIGMocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLHMscixpKX1pKHQsZSxjLGwpLCExIT09ZS52aXNpYmxlJiYoYSh0LGUsYyxmdW5jdGlvbihyKXtyZXR1cm4gbi5jb2VyY2UyKHQsZSxzLHIpfSksbyh0LGUsYyxsKSl9fSx7Ii4uLy4uL2xpYiI6Njg0LCIuLi9jb250b3VyL2NvbnRvdXJzX2RlZmF1bHRzIjo5MDMsIi4uL2NvbnRvdXIvc3R5bGVfZGVmYXVsdHMiOjkxNywiLi4vaGlzdG9ncmFtMmQvc2FtcGxlX2RlZmF1bHRzIjo5NjEsIi4vYXR0cmlidXRlcyI6OTYyfV0sOTY0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXt9O24uYXR0cmlidXRlcz10KCIuL2F0dHJpYnV0ZXMiKSxuLnN1cHBseURlZmF1bHRzPXQoIi4vZGVmYXVsdHMiKSxuLmNhbGM9dCgiLi4vY29udG91ci9jYWxjIiksbi5wbG90PXQoIi4uL2NvbnRvdXIvcGxvdCIpLnBsb3Qsbi5sYXllck5hbWU9ImNvbnRvdXJsYXllciIsbi5zdHlsZT10KCIuLi9jb250b3VyL3N0eWxlIiksbi5jb2xvcmJhcj10KCIuLi9jb250b3VyL2NvbG9yYmFyIiksbi5ob3ZlclBvaW50cz10KCIuLi9jb250b3VyL2hvdmVyIiksbi5tb2R1bGVUeXBlPSJ0cmFjZSIsbi5uYW1lPSJoaXN0b2dyYW0yZGNvbnRvdXIiLG4uYmFzZVBsb3RNb2R1bGU9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuIiksbi5jYXRlZ29yaWVzPVsiY2FydGVzaWFuIiwic3ZnIiwiMmRNYXAiLCJjb250b3VyIiwiaGlzdG9ncmFtIl0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbiI6NzQzLCIuLi9jb250b3VyL2NhbGMiOjg5NywiLi4vY29udG91ci9jb2xvcmJhciI6ODk5LCIuLi9jb250b3VyL2hvdmVyIjo5MDksIi4uL2NvbnRvdXIvcGxvdCI6OTE0LCIuLi9jb250b3VyL3N0eWxlIjo5MTYsIi4vYXR0cmlidXRlcyI6OTYyLCIuL2RlZmF1bHRzIjo5NjN9XSw5NjU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlcyIpLGE9dCgiLi4vc3VyZmFjZS9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdDtlLmV4cG9ydHM9cyh7eDp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSx5Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHo6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0saTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxqOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGs6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sdGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGFycmF5T2s6ITAsZWRpdFR5cGU6ImNhbGMifSxkZWxhdW5heWF4aXM6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIngiLCJ5IiwieiJdLGRmbHQ6InoiLGVkaXRUeXBlOiJjYWxjIn0sYWxwaGFodWxsOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6LTEsZWRpdFR5cGU6ImNhbGMifSxpbnRlbnNpdHk6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToiY2FsYyJ9LHZlcnRleGNvbG9yOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGZhY2Vjb2xvcjp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifX0sbigiIix7Y29sb3JBdHRyOiJgaW50ZW5zaXR5YCIsc2hvd1NjYWxlRGZsdDohMCxlZGl0VHlwZU92ZXJyaWRlOiJjYWxjIn0pLHtjb2xvcmJhcjppLG9wYWNpdHk6YS5vcGFjaXR5LGZsYXRzaGFkaW5nOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJjYWxjIn0sY29udG91cjp7c2hvdzpzKHt9LGEuY29udG91cnMueC5zaG93LHt9KSxjb2xvcjphLmNvbnRvdXJzLnguY29sb3Isd2lkdGg6YS5jb250b3Vycy54LndpZHRoLGVkaXRUeXBlOiJjYWxjIn0sbGlnaHRwb3NpdGlvbjp7eDpzKHt9LGEubGlnaHRwb3NpdGlvbi54LHtkZmx0OjFlNX0pLHk6cyh7fSxhLmxpZ2h0cG9zaXRpb24ueSx7ZGZsdDoxZTV9KSx6OnMoe30sYS5saWdodHBvc2l0aW9uLnose2RmbHQ6MH0pLGVkaXRUeXBlOiJjYWxjIn0sbGlnaHRpbmc6cyh7dmVydGV4bm9ybWFsc2Vwc2lsb246e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxZS0xMixlZGl0VHlwZToiY2FsYyJ9LGZhY2Vub3JtYWxzZXBzaWxvbjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjFlLTYsZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9LGEubGlnaHRpbmcpLGhvdmVyaW5mbzpzKHt9LG8uaG92ZXJpbmZvLHtlZGl0VHlwZToiY2FsYyJ9KX0pfSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlcyI6NTU5LCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NTY1LCIuLi8uLi9saWIvZXh0ZW5kIjo2NzMsIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjcyOSwiLi4vc3VyZmFjZS9hdHRyaWJ1dGVzIjoxMTAwfV0sOTY2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZS5pbnRlbnNpdHkmJm4oZSxlLmludGVuc2l0eSwiIiwiYyIpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyI6NTY2fV0sOTY3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImdsLW1lc2gzZCIpLGk9dCgiZGVsYXVuYXktdHJpYW5ndWxhdGUiKSxhPXQoImFscGhhLXNoYXBlIiksbz10KCJjb252ZXgtaHVsbCIpLHM9dCgiLi4vLi4vbGliL2dsX2Zvcm1hdF9jb2xvciIpLnBhcnNlQ29sb3JTY2FsZSxsPXQoIi4uLy4uL2xpYi9zdHIycmdiYXJyYXkiKSxjPXQoIi4uLy4uL3Bsb3RzL2dsM2QvemlwMyIpO2Z1bmN0aW9uIHUodCxlLHIpe3RoaXMuc2NlbmU9dCx0aGlzLnVpZD1yLHRoaXMubWVzaD1lLHRoaXMubmFtZT0iIix0aGlzLmNvbG9yPSIjZmZmIix0aGlzLmRhdGE9bnVsbCx0aGlzLnNob3dDb250b3VyPSExfXZhciBoPXUucHJvdG90eXBlO2Z1bmN0aW9uIGYodCl7cmV0dXJuIHQubWFwKGwpfWguaGFuZGxlUGljaz1mdW5jdGlvbih0KXtpZih0Lm9iamVjdD09PXRoaXMubWVzaCl7dmFyIGU9dC5pbmRleD10LmRhdGEuaW5kZXg7dC50cmFjZUNvb3JkaW5hdGU9W3RoaXMuZGF0YS54W2VdLHRoaXMuZGF0YS55W2VdLHRoaXMuZGF0YS56W2VdXTt2YXIgcj10aGlzLmRhdGEudGV4dDtyZXR1cm4gQXJyYXkuaXNBcnJheShyKSYmdm9pZCAwIT09cltlXT90LnRleHRMYWJlbD1yW2VdOnImJih0LnRleHRMYWJlbD1yKSwhMH19LGgudXBkYXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc2NlbmUscj1lLmZ1bGxTY2VuZUxheW91dDtmdW5jdGlvbiBuKHQsZSxyLG4pe3JldHVybiBlLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gdC5kMmwoZSwwLG4pKnJ9KX10aGlzLmRhdGE9dDt2YXIgdSxoPWMobihyLnhheGlzLHQueCxlLmRhdGFTY2FsZVswXSx0LnhjYWxlbmRhciksbihyLnlheGlzLHQueSxlLmRhdGFTY2FsZVsxXSx0LnljYWxlbmRhciksbihyLnpheGlzLHQueixlLmRhdGFTY2FsZVsyXSx0LnpjYWxlbmRhcikpO2lmKHQuaSYmdC5qJiZ0LmspdT1jKHQuaSx0LmosdC5rKTtlbHNlIGlmKDA9PT10LmFscGhhaHVsbCl1PW8oaCk7ZWxzZSBpZih0LmFscGhhaHVsbD4wKXU9YSh0LmFscGhhaHVsbCxoKTtlbHNle3ZhciBwPVsieCIsInkiLCJ6Il0uaW5kZXhPZih0LmRlbGF1bmF5YXhpcyk7dT1pKGgubWFwKGZ1bmN0aW9uKHQpe3JldHVyblt0WyhwKzEpJTNdLHRbKHArMiklM11dfSkpfXZhciBkPXtwb3NpdGlvbnM6aCxjZWxsczp1LGxpZ2h0UG9zaXRpb246W3QubGlnaHRwb3NpdGlvbi54LHQubGlnaHRwb3NpdGlvbi55LHQubGlnaHRwb3NpdGlvbi56XSxhbWJpZW50OnQubGlnaHRpbmcuYW1iaWVudCxkaWZmdXNlOnQubGlnaHRpbmcuZGlmZnVzZSxzcGVjdWxhcjp0LmxpZ2h0aW5nLnNwZWN1bGFyLHJvdWdobmVzczp0LmxpZ2h0aW5nLnJvdWdobmVzcyxmcmVzbmVsOnQubGlnaHRpbmcuZnJlc25lbCx2ZXJ0ZXhOb3JtYWxzRXBzaWxvbjp0LmxpZ2h0aW5nLnZlcnRleG5vcm1hbHNlcHNpbG9uLGZhY2VOb3JtYWxzRXBzaWxvbjp0LmxpZ2h0aW5nLmZhY2Vub3JtYWxzZXBzaWxvbixvcGFjaXR5OnQub3BhY2l0eSxjb250b3VyRW5hYmxlOnQuY29udG91ci5zaG93LGNvbnRvdXJDb2xvcjpsKHQuY29udG91ci5jb2xvcikuc2xpY2UoMCwzKSxjb250b3VyV2lkdGg6dC5jb250b3VyLndpZHRoLHVzZUZhY2V0Tm9ybWFsczp0LmZsYXRzaGFkaW5nfTt0LmludGVuc2l0eT8odGhpcy5jb2xvcj0iI2ZmZiIsZC52ZXJ0ZXhJbnRlbnNpdHk9dC5pbnRlbnNpdHksZC52ZXJ0ZXhJbnRlbnNpdHlCb3VuZHM9W3QuY21pbix0LmNtYXhdLGQuY29sb3JtYXA9cyh0LmNvbG9yc2NhbGUpKTp0LnZlcnRleGNvbG9yPyh0aGlzLmNvbG9yPXQudmVydGV4Y29sb3JbMF0sZC52ZXJ0ZXhDb2xvcnM9Zih0LnZlcnRleGNvbG9yKSk6dC5mYWNlY29sb3I/KHRoaXMuY29sb3I9dC5mYWNlY29sb3JbMF0sZC5jZWxsQ29sb3JzPWYodC5mYWNlY29sb3IpKToodGhpcy5jb2xvcj10LmNvbG9yLGQubWVzaENvbG9yPWwodC5jb2xvcikpLHRoaXMubWVzaC51cGRhdGUoZCl9LGguZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuc2NlbmUuZ2xwbG90LnJlbW92ZSh0aGlzLm1lc2gpLHRoaXMubWVzaC5kaXNwb3NlKCl9LGUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuZ2xwbG90LmdsLGk9bih7Z2w6cn0pLGE9bmV3IHUodCxpLGUudWlkKTtyZXR1cm4gaS5fdHJhY2U9YSxhLnVwZGF0ZShlKSx0LmdscGxvdC5hZGQoaSksYX19LHsiLi4vLi4vbGliL2dsX2Zvcm1hdF9jb2xvciI6NjgwLCIuLi8uLi9saWIvc3RyMnJnYmFycmF5Ijo3MDcsIi4uLy4uL3Bsb3RzL2dsM2QvemlwMyI6Nzg1LCJhbHBoYS1zaGFwZSI6NTUsImNvbnZleC1odWxsIjoxMTcsImRlbGF1bmF5LXRyaWFuZ3VsYXRlIjoxNDksImdsLW1lc2gzZCI6MjY4fV0sOTY4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3JlZ2lzdHJ5IiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyIpLG89dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMpe2Z1bmN0aW9uIGwocixuKXtyZXR1cm4gaS5jb2VyY2UodCxlLG8scixuKX1mdW5jdGlvbiBjKHQpe3ZhciBlPXQubWFwKGZ1bmN0aW9uKHQpe3ZhciBlPWwodCk7cmV0dXJuIGUmJmkuaXNBcnJheU9yVHlwZWRBcnJheShlKT9lOm51bGx9KTtyZXR1cm4gZS5ldmVyeShmdW5jdGlvbih0KXtyZXR1cm4gdCYmdC5sZW5ndGg9PT1lWzBdLmxlbmd0aH0pJiZlfXZhciB1PWMoWyJ4IiwieSIsInoiXSksaD1jKFsiaSIsImoiLCJrIl0pO3U/KGgmJmguZm9yRWFjaChmdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoOysrZSl0W2VdfD0wfSksbi5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZVRyYWNlRGVmYXVsdHMiKSh0LGUsWyJ4IiwieSIsInoiXSxzKSxbImxpZ2h0aW5nLmFtYmllbnQiLCJsaWdodGluZy5kaWZmdXNlIiwibGlnaHRpbmcuc3BlY3VsYXIiLCJsaWdodGluZy5yb3VnaG5lc3MiLCJsaWdodGluZy5mcmVzbmVsIiwibGlnaHRpbmcudmVydGV4bm9ybWFsc2Vwc2lsb24iLCJsaWdodGluZy5mYWNlbm9ybWFsc2Vwc2lsb24iLCJsaWdodHBvc2l0aW9uLngiLCJsaWdodHBvc2l0aW9uLnkiLCJsaWdodHBvc2l0aW9uLnoiLCJjb250b3VyLnNob3ciLCJjb250b3VyLmNvbG9yIiwiY29udG91ci53aWR0aCIsImNvbG9yc2NhbGUiLCJyZXZlcnNlc2NhbGUiLCJmbGF0c2hhZGluZyIsImFscGhhaHVsbCIsImRlbGF1bmF5YXhpcyIsIm9wYWNpdHkiXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2wodCl9KSwiaW50ZW5zaXR5ImluIHQ/KGwoImludGVuc2l0eSIpLGEodCxlLHMsbCx7cHJlZml4OiIiLGNMZXR0ZXI6ImMifSkpOihlLnNob3dzY2FsZT0hMSwiZmFjZWNvbG9yImluIHQ/bCgiZmFjZWNvbG9yIik6InZlcnRleGNvbG9yImluIHQ/bCgidmVydGV4Y29sb3IiKTpsKCJjb2xvciIscikpLGwoInRleHQiKSxlLl9sZW5ndGg9bnVsbCk6ZS52aXNpYmxlPSExfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiOjU2OCwiLi4vLi4vbGliIjo2ODQsIi4uLy4uL3JlZ2lzdHJ5Ijo4MTcsIi4vYXR0cmlidXRlcyI6OTY1fV0sOTY5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXt9O24uYXR0cmlidXRlcz10KCIuL2F0dHJpYnV0ZXMiKSxuLnN1cHBseURlZmF1bHRzPXQoIi4vZGVmYXVsdHMiKSxuLmNhbGM9dCgiLi9jYWxjIiksbi5jb2xvcmJhcj17bWluOiJjbWluIixtYXg6ImNtYXgifSxuLnBsb3Q9dCgiLi9jb252ZXJ0Iiksbi5tb2R1bGVUeXBlPSJ0cmFjZSIsbi5uYW1lPSJtZXNoM2QiLG4uYmFzZVBsb3RNb2R1bGU9dCgiLi4vLi4vcGxvdHMvZ2wzZCIpLG4uY2F0ZWdvcmllcz1bImdsM2QiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHsiLi4vLi4vcGxvdHMvZ2wzZCI6Nzc0LCIuL2F0dHJpYnV0ZXMiOjk2NSwiLi9jYWxjIjo5NjYsIi4vY29udmVydCI6OTY3LCIuL2RlZmF1bHRzIjo5Njh9XSw5NzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIikuZXh0ZW5kRmxhdCxpPXQoIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nL2F0dHJpYnV0ZXMiKS5kYXNoLG89aS5saW5lO2Z1bmN0aW9uIHModCl7cmV0dXJue2xpbmU6e2NvbG9yOm4oe30sby5jb2xvcix7ZGZsdDp0fSksd2lkdGg6by53aWR0aCxkYXNoOmEsZWRpdFR5cGU6InN0eWxlIn0sZWRpdFR5cGU6InN0eWxlIn19ZS5leHBvcnRzPXt4Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LG9wZW46e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0saGlnaDp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxsb3c6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sY2xvc2U6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sbGluZTp7d2lkdGg6bih7fSxvLndpZHRoLHt9KSxkYXNoOm4oe30sYSx7fSksZWRpdFR5cGU6InN0eWxlIn0saW5jcmVhc2luZzpzKCIjM0Q5OTcwIiksZGVjcmVhc2luZzpzKCIjRkY0MTM2IiksdGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGFycmF5T2s6ITAsZWRpdFR5cGU6ImNhbGMifSx0aWNrd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4Oi41LGRmbHQ6LjMsZWRpdFR5cGU6ImNhbGNJZkF1dG9yYW5nZSJ9fX0seyIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlcyI6NTgyLCIuLi8uLi9saWIiOjY4NCwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIjoxMDE1fV0sOTcxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9bi5fLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxvPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU07ZnVuY3Rpb24gcyh0LGUscixuKXtyZXR1cm57bzp0LGg6ZSxsOnIsYzpufX1mdW5jdGlvbiBsKHQsZSxyLG4scyl7Zm9yKHZhciBsPW4ubWFrZUNhbGNkYXRhKGUsIm9wZW4iKSxjPW4ubWFrZUNhbGNkYXRhKGUsImhpZ2giKSx1PW4ubWFrZUNhbGNkYXRhKGUsImxvdyIpLGg9bi5tYWtlQ2FsY2RhdGEoZSwiY2xvc2UiKSxmPUFycmF5LmlzQXJyYXkoZS50ZXh0KSxwPSEwLGQ9bnVsbCxnPVtdLG09MDttPHIubGVuZ3RoO20rKyl7dmFyIHY9clttXSx5PWxbbV0seD1jW21dLGI9dVttXSxfPWhbbV07aWYodiE9PW8mJnkhPT1vJiZ4IT09byYmYiE9PW8mJl8hPT1vKXtfPT09eT9udWxsIT09ZCYmXyE9PWQmJihwPV8+ZCk6cD1fPnksZD1fO3ZhciB3PXMoeSx4LGIsXyk7dy5wb3M9dix3LnljPSh5K18pLzIsdy5pPW0sdy5kaXI9cD8iaW5jcmVhc2luZyI6ImRlY3JlYXNpbmciLGYmJih3LnR4PWUudGV4dFttXSksZy5wdXNoKHcpfX1yZXR1cm4gYS5leHBhbmQobix1LmNvbmNhdChjKSx7cGFkZGVkOiEwfSksZy5sZW5ndGgmJihnWzBdLnQ9e2xhYmVsczp7b3BlbjppKHQsIm9wZW46IikrIiAiLGhpZ2g6aSh0LCJoaWdoOiIpKyIgIixsb3c6aSh0LCJsb3c6IikrIiAiLGNsb3NlOmkodCwiY2xvc2U6IikrIiAifX0pLGd9ZS5leHBvcnRzPXtjYWxjOmZ1bmN0aW9uKHQsZSl7dmFyIHI9YS5nZXRGcm9tSWQodCxlLnhheGlzKSxpPWEuZ2V0RnJvbUlkKHQsZS55YXhpcyksbz1mdW5jdGlvbih0LGUscil7dmFyIGk9ci5fbWluRGlmZjtpZighaSl7dmFyIGEsbz10Ll9mdWxsRGF0YSxzPVtdO2ZvcihpPTEvMCxhPTA7YTxvLmxlbmd0aDthKyspe3ZhciBsPW9bYV07aWYoIm9obGMiPT09bC50eXBlJiYhMD09PWwudmlzaWJsZSYmbC54YXhpcz09PWUuX2lkKXtzLnB1c2gobCk7dmFyIGM9ZS5tYWtlQ2FsY2RhdGEobCwieCIpO2wuX3hjYWxjPWM7dmFyIHU9bi5kaXN0aW5jdFZhbHMoYykubWluRGlmZjt1JiZpc0Zpbml0ZSh1KSYmKGk9TWF0aC5taW4oaSx1KSl9fWZvcihpPT09MS8wJiYoaT0xKSxhPTA7YTxzLmxlbmd0aDthKyspc1thXS5fbWluRGlmZj1pfXJldHVybiBpKnIudGlja3dpZHRofSh0LHIsZSksYz1lLl9taW5EaWZmO2UuX21pbkRpZmY9bnVsbDt2YXIgdT1lLl94Y2FsYztlLl94Y2FsYz1udWxsO3ZhciBoPWwodCxlLHUsaSxzKTtyZXR1cm4gYS5leHBhbmQocix1LHt2cGFkOmMvMn0pLGgubGVuZ3RoPyhuLmV4dGVuZEZsYXQoaFswXS50LHt3SG92ZXI6Yy8yLHRpY2tMZW46b30pLGgpOlt7dDp7ZW1wdHk6ITB9fV19LGNhbGNDb21tb246bH19LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NjYxLCIuLi8uLi9saWIiOjY4NCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjczMn1dLDk3MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vb2hsY19kZWZhdWx0cyIpLGE9dCgiLi9hdHRyaWJ1dGVzIik7ZnVuY3Rpb24gbyh0LGUscixuKXtyKG4rIi5saW5lLmNvbG9yIikscihuKyIubGluZS53aWR0aCIsZS5saW5lLndpZHRoKSxyKG4rIi5saW5lLmRhc2giLGUubGluZS5kYXNoKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyl7ZnVuY3Rpb24gbChyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsYSxyLGkpfWkodCxlLGwscyk/KGwoImxpbmUud2lkdGgiKSxsKCJsaW5lLmRhc2giKSxvKHQsZSxsLCJpbmNyZWFzaW5nIiksbyh0LGUsbCwiZGVjcmVhc2luZyIpLGwoInRleHQiKSxsKCJ0aWNrd2lkdGgiKSxzLl9yZXF1ZXN0UmFuZ2VzbGlkZXJbZS54YXhpc109ITApOmUudmlzaWJsZT0hMX19LHsiLi4vLi4vbGliIjo2ODQsIi4vYXR0cmlidXRlcyI6OTcwLCIuL29obGNfZGVmYXVsdHMiOjk3NX1dLDk3MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9meCIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLG89dCgiLi4vc2NhdHRlci9maWxsX2hvdmVyX3RleHQiKSxzPXtpbmNyZWFzaW5nOiJcdTI1YjIiLGRlY3JlYXNpbmc6Ilx1MjViYyJ9O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixsKXt2YXIgYz10LmNkLHU9dC54YSxoPXQueWEsZj1jWzBdLnRyYWNlLHA9Y1swXS50LGQ9Zi50eXBlLGc9Im9obGMiPT09ZD8ibCI6Im1pbiIsbT0ib2hsYyI9PT1kPyJoIjoibWF4Iix2PXAuYlBvc3x8MCx5PWUtdix4PXAuYmRQb3N8fHAudGlja0xlbixiPXAud0hvdmVyLF89TWF0aC5taW4oMSx4L01hdGguYWJzKHUucjJjKHUucmFuZ2VbMV0pLXUucjJjKHUucmFuZ2VbMF0pKSksdz10Lm1heEhvdmVyRGlzdGFuY2UtXyxrPXQubWF4U3Bpa2VEaXN0YW5jZS1fO2Z1bmN0aW9uIE0odCl7dmFyIGU9dC5wb3MteTtyZXR1cm4gaS5pbmJveChlLWIsZStiLHcpfWZ1bmN0aW9uIEEodCl7cmV0dXJuIGkuaW5ib3godFtnXS1yLHRbbV0tcix3KX1mdW5jdGlvbiBUKHQpe3JldHVybihNKHQpK0EodCkpLzJ9dmFyIFM9aS5nZXREaXN0YW5jZUZ1bmN0aW9uKGwsTSxBLFQpO2lmKGkuZ2V0Q2xvc2VzdChjLFMsdCksITE9PT10LmluZGV4KXJldHVybltdO3ZhciBFPWNbdC5pbmRleF0sQz10LmluZGV4PUUuaSxMPUUuZGlyLHo9ZltMXSxQPXoubGluZS5jb2xvcjtmdW5jdGlvbiBJKHQpe3JldHVybiBwLmxhYmVsc1t0XStuLmhvdmVyTGFiZWxUZXh0KGgsZlt0XVtDXSl9YS5vcGFjaXR5KFApJiZ6LmxpbmUud2lkdGg/dC5jb2xvcj1QOnQuY29sb3I9ei5maWxsY29sb3IsdC54MD11LmMycChFLnBvcyt2LXgsITApLHQueDE9dS5jMnAoRS5wb3Mrdit4LCEwKSx0LnhMYWJlbFZhbD1FLnBvcyx0LnNwaWtlRGlzdGFuY2U9VChFKSprL3csdC54U3Bpa2U9dS5jMnAoRS5wb3MsITApO3ZhciBPPWYuaG92ZXJpbmZvLEQ9Ty5zcGxpdCgiKyIpLFI9ImFsbCI9PT1PLEI9Unx8LTEhPT1ELmluZGV4T2YoInkiKSxGPVJ8fC0xIT09RC5pbmRleE9mKCJ0ZXh0IiksTj1CP1tJKCJvcGVuIiksSSgiaGlnaCIpLEkoImxvdyIpLEkoImNsb3NlIikrIiAgIitzW0xdXTpbXTtyZXR1cm4gRiYmbyhFLGYsTiksdC5leHRyYVRleHQ9Ti5qb2luKCI8YnI+IiksdC55MD10LnkxPWguYzJwKEUueWMsITApLFt0XX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NTU4LCIuLi8uLi9jb21wb25lbnRzL2Z4Ijo2MDAsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3MzIsIi4uL3NjYXR0ZXIvZmlsbF9ob3Zlcl90ZXh0IjoxMDIyfV0sOTc0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bW9kdWxlVHlwZToidHJhY2UiLG5hbWU6Im9obGMiLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiIpLGNhdGVnb3JpZXM6WyJjYXJ0ZXNpYW4iLCJzdmciLCJzaG93TGVnZW5kIl0sbWV0YTp7fSxhdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjYWxjOnQoIi4vY2FsYyIpLmNhbGMscGxvdDp0KCIuL3Bsb3QiKSxzdHlsZTp0KCIuL3N0eWxlIiksaG92ZXJQb2ludHM6dCgiLi9ob3ZlciIpLHNlbGVjdFBvaW50czp0KCIuL3NlbGVjdCIpfX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjc0MywiLi9hdHRyaWJ1dGVzIjo5NzAsIi4vY2FsYyI6OTcxLCIuL2RlZmF1bHRzIjo5NzIsIi4vaG92ZXIiOjk3MywiLi9wbG90Ijo5NzYsIi4vc2VsZWN0Ijo5NzcsIi4vc3R5bGUiOjk3OH1dLDk3NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpKXt2YXIgYT1yKCJ4Iiksbz1yKCJvcGVuIikscz1yKCJoaWdoIiksbD1yKCJsb3ciKSxjPXIoImNsb3NlIik7aWYobi5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZVRyYWNlRGVmYXVsdHMiKSh0LGUsWyJ4Il0saSksbyYmcyYmbCYmYyl7dmFyIHU9TWF0aC5taW4oby5sZW5ndGgscy5sZW5ndGgsbC5sZW5ndGgsYy5sZW5ndGgpO3JldHVybiBhJiYodT1NYXRoLm1pbih1LGEubGVuZ3RoKSksZS5fbGVuZ3RoPXUsdX19fSx7Ii4uLy4uL3JlZ2lzdHJ5Ijo4MTd9XSw5NzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXt2YXIgbz1lLnhheGlzLHM9ZS55YXhpcyxsPWEuc2VsZWN0QWxsKCJnLnRyYWNlIikuZGF0YShyLGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdLnRyYWNlLnVpZH0pO2wuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInRyYWNlIG9obGMiKSxsLmV4aXQoKS5yZW1vdmUoKSxsLm9yZGVyKCksbC5lYWNoKGZ1bmN0aW9uKHQpe3ZhciByPXRbMF0sYT1yLnQsbD1yLnRyYWNlLGM9bi5zZWxlY3QodGhpcyk7aWYoZS5pc1JhbmdlUGxvdHx8KHIubm9kZTM9YyksITAhPT1sLnZpc2libGV8fGEuZW1wdHkpYy5yZW1vdmUoKTtlbHNle3ZhciB1PWEudGlja0xlbixoPWMuc2VsZWN0QWxsKCJwYXRoIikuZGF0YShpLmlkZW50aXR5KTtoLmVudGVyKCkuYXBwZW5kKCJwYXRoIiksaC5leGl0KCkucmVtb3ZlKCksaC5hdHRyKCJkIixmdW5jdGlvbih0KXt2YXIgZT1vLmMycCh0LnBvcywhMCkscj1vLmMycCh0LnBvcy11LCEwKSxuPW8uYzJwKHQucG9zK3UsITApO3JldHVybiJNIityKyIsIitzLmMycCh0Lm8sITApKyJIIitlKyJNIitlKyIsIitzLmMycCh0LmgsITApKyJWIitzLmMycCh0LmwsITApKyJNIituKyIsIitzLmMycCh0LmMsITApKyJIIitlfSl9fSl9fSx7Ii4uLy4uL2xpYiI6Njg0LGQzOjE0N31dLDk3NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixuPXQuY2QsaT10LnhheGlzLGE9dC55YXhpcyxvPVtdLHM9blswXS50LmJQb3N8fDA7aWYoITE9PT1lKWZvcihyPTA7cjxuLmxlbmd0aDtyKyspbltyXS5zZWxlY3RlZD0wO2Vsc2UgZm9yKHI9MDtyPG4ubGVuZ3RoO3IrKyl7dmFyIGw9bltyXTtlLmNvbnRhaW5zKFtpLmMycChsLnBvcytzKSxhLmMycChsLnljKV0pPyhvLnB1c2goe3BvaW50TnVtYmVyOmwuaSx4OmkuYzJkKGwucG9zKSx5OmEuYzJkKGwueWMpfSksbC5zZWxlY3RlZD0xKTpsLnNlbGVjdGVkPTB9cmV0dXJuIG99fSx7fV0sOTc4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lP2VbMF0ubm9kZTM6bi5zZWxlY3QodCkuc2VsZWN0QWxsKCJnLm9obGNsYXllciIpLnNlbGVjdEFsbCgiZy50cmFjZSIpO3Iuc3R5bGUoIm9wYWNpdHkiLGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdLnRyYWNlLm9wYWNpdHl9KSxyLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9dFswXS50cmFjZTtuLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoInBhdGgiKS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciByPWVbdC5kaXJdLmxpbmU7bi5zZWxlY3QodGhpcykuc3R5bGUoImZpbGwiLCJub25lIikuY2FsbChhLnN0cm9rZSxyLmNvbG9yKS5jYWxsKGkuZGFzaExpbmUsci5kYXNoLHIud2lkdGgpLnN0eWxlKCJvcGFjaXR5IixlLnNlbGVjdGVkcG9pbnRzJiYhdC5zZWxlY3RlZD8uMzoxKX0pfSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjU1OCwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo1ODMsZDM6MTQ3fV0sOTc5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9wbG90cy9kb21haW4iKS5hdHRyaWJ1dGVzLGw9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsYz10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIikudGVtcGxhdGVkQXJyYXk7ZS5leHBvcnRzPXtkb21haW46cyh7bmFtZToicGFyY29vcmRzIix0cmFjZTohMCxlZGl0VHlwZToiY2FsYyJ9KSxsYWJlbGZvbnQ6byh7ZWRpdFR5cGU6ImNhbGMifSksdGlja2ZvbnQ6byh7ZWRpdFR5cGU6ImNhbGMifSkscmFuZ2Vmb250Om8oe2VkaXRUeXBlOiJjYWxjIn0pLGRpbWVuc2lvbnM6YygiZGltZW5zaW9uIix7bGFiZWw6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImNhbGMifSx0aWNrdmFsczpsKHt9LGEudGlja3ZhbHMse2VkaXRUeXBlOiJjYWxjIn0pLHRpY2t0ZXh0Omwoe30sYS50aWNrdGV4dCx7ZWRpdFR5cGU6ImNhbGMifSksdGlja2Zvcm1hdDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIzcyIsZWRpdFR5cGU6ImNhbGMifSx2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn0scmFuZ2U6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGl0ZW1zOlt7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToiY2FsYyJ9LHt2YWxUeXBlOiJudW1iZXIiLGVkaXRUeXBlOiJjYWxjIn1dLGVkaXRUeXBlOiJjYWxjIn0sY29uc3RyYWludHJhbmdlOnt2YWxUeXBlOiJpbmZvX2FycmF5IixmcmVlTGVuZ3RoOiEwLGRpbWVuc2lvbnM6IjEtMiIsaXRlbXM6W3t2YWxUeXBlOiJudW1iZXIiLGVkaXRUeXBlOiJjYWxjIn0se3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6ImNhbGMifV0sZWRpdFR5cGU6ImNhbGMifSxtdWx0aXNlbGVjdDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYyJ9LHZhbHVlczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9KSxsaW5lOmwobigibGluZSIse2NvbG9yc2NhbGVEZmx0OiJWaXJpZGlzIixhdXRvQ29sb3JEZmx0OiExLGVkaXRUeXBlT3ZlcnJpZGU6ImNhbGMifSkse2NvbG9yYmFyOmksZWRpdFR5cGU6ImNhbGMifSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlcyI6NTU5LCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NTY1LCIuLi8uLi9saWIvZXh0ZW5kIjo2NzMsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjcyMiwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzIjo3NDQsIi4uLy4uL3Bsb3RzL2RvbWFpbiI6NzU3LCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjc1OH1dLDk4MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2NvbnN0YW50cyIpLGk9dCgiZDMiKSxhPXQoIi4uLy4uL2xpYi9ndXAiKS5rZXlGdW4sbz10KCIuLi8uLi9saWIvZ3VwIikucmVwZWF0LHM9dCgiLi4vLi4vbGliIikuc29ydGVyQXNjLGw9bi5iYXIuc25hcFJhdGlvO2Z1bmN0aW9uIGModCxlKXtyZXR1cm4gdCooMS1sKStlKmx9dmFyIHU9bi5iYXIuc25hcENsb3NlO2Z1bmN0aW9uIGgodCxlKXtyZXR1cm4gdCooMS11KStlKnV9ZnVuY3Rpb24gZih0LGUscil7aWYoZChlLHIpKXJldHVybiBlO2Zvcih2YXIgbj10WzBdLGk9bixhPTE7YTx0Lmxlbmd0aDthKyspe3ZhciBvPXRbYV07aWYoZTxoKG4sbykpcmV0dXJuIGMobixpKTtpZihlPG98fGE9PT10Lmxlbmd0aC0xKXJldHVybiBjKG8sbik7aT1uLG49b319ZnVuY3Rpb24gcCh0LGUscil7aWYoZChlLHIpKXJldHVybiBlO2Zvcih2YXIgbj10W3QubGVuZ3RoLTFdLGk9bixhPXQubGVuZ3RoLTI7YT49MDthLS0pe3ZhciBvPXRbYV07aWYoZT5oKG4sbykpcmV0dXJuIGMobixpKTtpZihlPm98fGE9PT10Lmxlbmd0aC0xKXJldHVybiBjKG8sbik7aT1uLG49b319ZnVuY3Rpb24gZCh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKWlmKHQ+PWVbcl1bMF0mJnQ8PWVbcl1bMV0pcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gZyh0KXt0LmF0dHIoIngiLC1uLmJhci5jYXB0dXJlV2lkdGgvMikuYXR0cigid2lkdGgiLG4uYmFyLmNhcHR1cmVXaWR0aCl9ZnVuY3Rpb24gbSh0KXt0LmF0dHIoInZpc2liaWxpdHkiLCJ2aXNpYmxlIikuc3R5bGUoInZpc2liaWxpdHkiLCJ2aXNpYmxlIikuYXR0cigiZmlsbCIsInllbGxvdyIpLmF0dHIoIm9wYWNpdHkiLDApfWZ1bmN0aW9uIHYodCl7aWYoIXQuYnJ1c2guZmlsdGVyU3BlY2lmaWVkKXJldHVybiIwLCIrdC5oZWlnaHQ7Zm9yKHZhciBlLHIsbixpPXkodC5icnVzaC5maWx0ZXIuZ2V0Q29uc29saWRhdGVkKCksdC5oZWlnaHQpLGE9WzBdLG89aS5sZW5ndGg/aVswXVswXTpudWxsLHM9MDtzPGkubGVuZ3RoO3MrKylyPShlPWlbc10pWzFdLWVbMF0sYS5wdXNoKG8pLGEucHVzaChyKSwobj1zKzEpPGkubGVuZ3RoJiYobz1pW25dWzBdLWVbMV0pO3JldHVybiBhLnB1c2godC5oZWlnaHQpLGF9ZnVuY3Rpb24geSh0LGUpe3JldHVybiB0Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQqZX0pLnNvcnQocyl9KX1mdW5jdGlvbiB4KCl7aS5zZWxlY3QoZG9jdW1lbnQuYm9keSkuc3R5bGUoImN1cnNvciIsbnVsbCl9ZnVuY3Rpb24gYih0KXt0LmF0dHIoInN0cm9rZS1kYXNoYXJyYXkiLHYpfWZ1bmN0aW9uIF8odCxlKXt2YXIgcj1pLnNlbGVjdCh0KS5zZWxlY3RBbGwoIi5oaWdobGlnaHQsIC5oaWdobGlnaHQtc2hhZG93Iik7YihlP3IudHJhbnNpdGlvbigpLmR1cmF0aW9uKG4uYmFyLnNuYXBEdXJhdGlvbikuZWFjaCgiZW5kIixlKTpyKX1mdW5jdGlvbiB3KHQsZSl7dmFyIHIsaT10LmJydXNoLGE9TmFOLG89e307aWYoaS5maWx0ZXJTcGVjaWZpZWQpe3ZhciBzPXQuaGVpZ2h0LGw9aS5maWx0ZXIuZ2V0Q29uc29saWRhdGVkKCksYz15KGwscyksdT1OYU4saD1OYU4sZj1OYU47Zm9yKHI9MDtyPD1jLmxlbmd0aDtyKyspe3ZhciBwPWNbcl07aWYocCYmcFswXTw9ZSYmZTw9cFsxXSl7dT1yO2JyZWFrfWlmKGg9cj9yLTE6TmFOLHAmJnBbMF0+ZSl7Zj1yO2JyZWFrfX1pZihhPXUsaXNOYU4oYSkmJihhPWlzTmFOKGgpfHxpc05hTihmKT9pc05hTihoKT9mOmg6ZS1jW2hdWzFdPGNbZl1bMF0tZT9oOmYpLCFpc05hTihhKSl7dmFyIGQ9Y1thXSxnPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bi5iYXIuaGFuZGxlSGVpZ2h0O2lmKCEoZT50WzFdK3J8fGU8dFswXS1yKSlyZXR1cm4gZT49LjkqdFsxXSsuMSp0WzBdPyJuIjplPD0uOSp0WzBdKy4xKnRbMV0/InMiOiJucyJ9KGQsZSk7ZyYmKG8uaW50ZXJ2YWw9bFthXSxvLmludGVydmFsUGl4PWQsby5yZWdpb249Zyl9fWlmKHQub3JkaW5hbCYmIW8ucmVnaW9uKXt2YXIgbT10LnVuaXRUaWNrdmFscyx2PXQudW5pdFRvUGFkZGVkUHguaW52ZXJ0KGUpO2ZvcihyPTA7cjxtLmxlbmd0aDtyKyspe3ZhciB4PVsuMjUqbVtNYXRoLm1heChyLTEsMCldKy43NSptW3JdLC4yNSptW01hdGgubWluKHIrMSxtLmxlbmd0aC0xKV0rLjc1Km1bcl1dO2lmKHY+PXhbMF0mJnY8PXhbMV0pe28uY2xpY2thYmxlT3JkaW5hbFJhbmdlPXg7YnJlYWt9fX1yZXR1cm4gb31mdW5jdGlvbiBrKHQpe3Qub24oIm1vdXNlbW92ZSIsZnVuY3Rpb24odCl7aWYoaS5ldmVudC5wcmV2ZW50RGVmYXVsdCgpLCF0LnBhcmVudC5pbkJydXNoRHJhZyl7dmFyIGU9dyh0LHQuaGVpZ2h0LWkubW91c2UodGhpcylbMV0tMipuLnZlcnRpY2FsUGFkZGluZykscj0iY3Jvc3NoYWlyIjtlLmNsaWNrYWJsZU9yZGluYWxSYW5nZT9yPSJwb2ludGVyIjplLnJlZ2lvbiYmKHI9ZS5yZWdpb24rIi1yZXNpemUiKSxpLnNlbGVjdChkb2N1bWVudC5ib2R5KS5zdHlsZSgiY3Vyc29yIixyKX19KS5vbigibW91c2VsZWF2ZSIsZnVuY3Rpb24odCl7dC5wYXJlbnQuaW5CcnVzaERyYWd8fHgoKX0pLmNhbGwoaS5iZWhhdmlvci5kcmFnKCkub24oImRyYWdzdGFydCIsZnVuY3Rpb24odCl7aS5ldmVudC5zb3VyY2VFdmVudC5zdG9wUHJvcGFnYXRpb24oKTt2YXIgZT10LmhlaWdodC1pLm1vdXNlKHRoaXMpWzFdLTIqbi52ZXJ0aWNhbFBhZGRpbmcscj10LnVuaXRUb1BhZGRlZFB4LmludmVydChlKSxhPXQuYnJ1c2gsbz13KHQsZSkscz1vLmludGVydmFsLGw9YS5zdmdCcnVzaDtpZihsLndhc0RyYWdnZWQ9ITEsbC5ncmFiYmluZ0Jhcj0ibnMiPT09by5yZWdpb24sbC5ncmFiYmluZ0Jhcil7dmFyIGM9cy5tYXAodC51bml0VG9QYWRkZWRQeCk7bC5ncmFiUG9pbnQ9ZS1jWzBdLW4udmVydGljYWxQYWRkaW5nLGwuYmFyTGVuZ3RoPWNbMV0tY1swXX1sLmNsaWNrYWJsZU9yZGluYWxSYW5nZT1vLmNsaWNrYWJsZU9yZGluYWxSYW5nZSxsLnN0YXlpbmdJbnRlcnZhbHM9dC5tdWx0aXNlbGVjdCYmYS5maWx0ZXJTcGVjaWZpZWQ/YS5maWx0ZXIuZ2V0Q29uc29saWRhdGVkKCk6W10scyYmKGwuc3RheWluZ0ludGVydmFscz1sLnN0YXlpbmdJbnRlcnZhbHMuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdIT09c1swXSYmdFsxXSE9PXNbMV19KSksbC5zdGFydEV4dGVudD1vLnJlZ2lvbj9zWyJzIj09PW8ucmVnaW9uPzE6MF06cix0LnBhcmVudC5pbkJydXNoRHJhZz0hMCxsLmJydXNoU3RhcnRDYWxsYmFjaygpfSkub24oImRyYWciLGZ1bmN0aW9uKHQpe2kuZXZlbnQuc291cmNlRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7dmFyIGU9dC5oZWlnaHQtaS5tb3VzZSh0aGlzKVsxXS0yKm4udmVydGljYWxQYWRkaW5nLHI9dC5icnVzaC5zdmdCcnVzaDtyLndhc0RyYWdnZWQ9ITAsci5ncmFiYmluZ0Jhcj9yLm5ld0V4dGVudD1bZS1yLmdyYWJQb2ludCxlK3IuYmFyTGVuZ3RoLXIuZ3JhYlBvaW50XS5tYXAodC51bml0VG9QYWRkZWRQeC5pbnZlcnQpOnIubmV3RXh0ZW50PVtyLnN0YXJ0RXh0ZW50LHQudW5pdFRvUGFkZGVkUHguaW52ZXJ0KGUpXS5zb3J0KHMpO3ZhciBhPU1hdGgubWF4KDAsLXIubmV3RXh0ZW50WzBdKSxvPU1hdGgubWF4KDAsci5uZXdFeHRlbnRbMV0tMSk7ci5uZXdFeHRlbnRbMF0rPWEsci5uZXdFeHRlbnRbMV0tPW8sci5ncmFiYmluZ0JhciYmKHIubmV3RXh0ZW50WzFdKz1hLHIubmV3RXh0ZW50WzBdLT1vKSx0LmJydXNoLmZpbHRlclNwZWNpZmllZD0hMCxyLmV4dGVudD1yLnN0YXlpbmdJbnRlcnZhbHMuY29uY2F0KFtyLm5ld0V4dGVudF0pLHIuYnJ1c2hDYWxsYmFjayh0KSxfKHRoaXMucGFyZW50Tm9kZSl9KS5vbigiZHJhZ2VuZCIsZnVuY3Rpb24odCl7aS5ldmVudC5zb3VyY2VFdmVudC5zdG9wUHJvcGFnYXRpb24oKTt2YXIgZT10LmJydXNoLHI9ZS5maWx0ZXIsbj1lLnN2Z0JydXNoLGE9bi5ncmFiYmluZ0JhcjtpZihuLmdyYWJiaW5nQmFyPSExLG4uZ3JhYkxvY2F0aW9uPXZvaWQgMCx0LnBhcmVudC5pbkJydXNoRHJhZz0hMSx4KCksIW4ud2FzRHJhZ2dlZClyZXR1cm4gbi53YXNEcmFnZ2VkPXZvaWQgMCxuLmNsaWNrYWJsZU9yZGluYWxSYW5nZT9lLmZpbHRlclNwZWNpZmllZCYmdC5tdWx0aXNlbGVjdD9uLmV4dGVudC5wdXNoKG4uY2xpY2thYmxlT3JkaW5hbFJhbmdlKToobi5leHRlbnQ9W24uY2xpY2thYmxlT3JkaW5hbFJhbmdlXSxlLmZpbHRlclNwZWNpZmllZD0hMCk6YT8obi5leHRlbnQ9bi5zdGF5aW5nSW50ZXJ2YWxzLDA9PT1uLmV4dGVudC5sZW5ndGgmJkEoZSkpOkEoZSksbi5icnVzaENhbGxiYWNrKHQpLF8odGhpcy5wYXJlbnROb2RlKSx2b2lkIG4uYnJ1c2hFbmRDYWxsYmFjayhlLmZpbHRlclNwZWNpZmllZD9yLmdldENvbnNvbGlkYXRlZCgpOltdKTt2YXIgbz1mdW5jdGlvbigpe3Iuc2V0KHIuZ2V0Q29uc29saWRhdGVkKCkpfTtpZih0Lm9yZGluYWwpe3ZhciBzPXQudW5pdFRpY2t2YWxzO3Nbcy5sZW5ndGgtMV08c1swXSYmcy5yZXZlcnNlKCksbi5uZXdFeHRlbnQ9W2YocyxuLm5ld0V4dGVudFswXSxuLnN0YXlpbmdJbnRlcnZhbHMpLHAocyxuLm5ld0V4dGVudFsxXSxuLnN0YXlpbmdJbnRlcnZhbHMpXTt2YXIgbD1uLm5ld0V4dGVudFsxXT5uLm5ld0V4dGVudFswXTtuLmV4dGVudD1uLnN0YXlpbmdJbnRlcnZhbHMuY29uY2F0KGw/W24ubmV3RXh0ZW50XTpbXSksbi5leHRlbnQubGVuZ3RofHxBKGUpLG4uYnJ1c2hDYWxsYmFjayh0KSxsP18odGhpcy5wYXJlbnROb2RlLG8pOihvKCksXyh0aGlzLnBhcmVudE5vZGUpKX1lbHNlIG8oKTtuLmJydXNoRW5kQ2FsbGJhY2soZS5maWx0ZXJTcGVjaWZpZWQ/ci5nZXRDb25zb2xpZGF0ZWQoKTpbXSl9KSl9ZnVuY3Rpb24gTSh0LGUpe3JldHVybiB0WzBdLWVbMF19ZnVuY3Rpb24gQSh0KXt0LmZpbHRlclNwZWNpZmllZD0hMSx0LnN2Z0JydXNoLmV4dGVudD1bWzAsMV1dfWZ1bmN0aW9uIFQodCl7Zm9yKHZhciBlLHI9dC5zbGljZSgpLG49W10saT1yLnNoaWZ0KCk7aTspe2ZvcihlPWkuc2xpY2UoKTsoaT1yLnNoaWZ0KCkpJiZpWzBdPD1lWzFdOyllWzFdPU1hdGgubWF4KGVbMV0saVsxXSk7bi5wdXNoKGUpfXJldHVybiBufWUuZXhwb3J0cz17bWFrZUJydXNoOmZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbyxsPWZ1bmN0aW9uKCl7dmFyIHQsZSxyPVtdO3JldHVybntzZXQ6ZnVuY3Rpb24obil7cj1uLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5zbGljZSgpLnNvcnQocyl9KS5zb3J0KE0pLHQ9VChyKSxlPXIucmVkdWNlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuW01hdGgubWluKHRbMF0sZVswXSksTWF0aC5tYXgodFsxXSxlWzFdKV19LFsxLzAsLTEvMF0pfSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5zbGljZSgpfSxnZXRDb25zb2xpZGF0ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdH0sZ2V0Qm91bmRzOmZ1bmN0aW9uKCl7cmV0dXJuIGV9fX0oKTtyZXR1cm4gbC5zZXQocikse2ZpbHRlcjpsLGZpbHRlclNwZWNpZmllZDplLHN2Z0JydXNoOntleHRlbnQ6W10sYnJ1c2hTdGFydENhbGxiYWNrOm4sYnJ1c2hDYWxsYmFjazoobz1pLGZ1bmN0aW9uKHQpe3ZhciBlPXQuYnJ1c2gscj1mdW5jdGlvbih0KXtyZXR1cm4gdC5zdmdCcnVzaC5leHRlbnQubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnNsaWNlKCl9KX0oZSkuc2xpY2UoKTtlLmZpbHRlci5zZXQociksbygpfSksYnJ1c2hFbmRDYWxsYmFjazphfX19LGVuc3VyZUF4aXNCcnVzaDpmdW5jdGlvbih0KXt2YXIgZT10LnNlbGVjdEFsbCgiLiIrbi5jbi5heGlzQnJ1c2gpLmRhdGEobyxhKTtlLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChuLmNuLmF4aXNCcnVzaCwhMCksZnVuY3Rpb24odCl7dmFyIGU9dC5zZWxlY3RBbGwoIi5iYWNrZ3JvdW5kIikuZGF0YShvKTtlLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuY2xhc3NlZCgiYmFja2dyb3VuZCIsITApLmNhbGwoZykuY2FsbChtKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhdXRvIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDAgIituLnZlcnRpY2FsUGFkZGluZysiKSIpLGUuY2FsbChrKS5hdHRyKCJoZWlnaHQiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmhlaWdodC1uLnZlcnRpY2FsUGFkZGluZ30pO3ZhciByPXQuc2VsZWN0QWxsKCIuaGlnaGxpZ2h0LXNoYWRvdyIpLmRhdGEobyk7ci5lbnRlcigpLmFwcGVuZCgibGluZSIpLmNsYXNzZWQoImhpZ2hsaWdodC1zaGFkb3ciLCEwKS5hdHRyKCJ4Iiwtbi5iYXIud2lkdGgvMikuYXR0cigic3Ryb2tlLXdpZHRoIixuLmJhci53aWR0aCtuLmJhci5zdHJva2VXaWR0aCkuYXR0cigic3Ryb2tlIixuLmJhci5zdHJva2VDb2xvcikuYXR0cigib3BhY2l0eSIsbi5iYXIuc3Ryb2tlT3BhY2l0eSkuYXR0cigic3Ryb2tlLWxpbmVjYXAiLCJidXR0Iiksci5hdHRyKCJ5MSIsZnVuY3Rpb24odCl7cmV0dXJuIHQuaGVpZ2h0fSkuY2FsbChiKTt2YXIgaT10LnNlbGVjdEFsbCgiLmhpZ2hsaWdodCIpLmRhdGEobyk7aS5lbnRlcigpLmFwcGVuZCgibGluZSIpLmNsYXNzZWQoImhpZ2hsaWdodCIsITApLmF0dHIoIngiLC1uLmJhci53aWR0aC8yKS5hdHRyKCJzdHJva2Utd2lkdGgiLG4uYmFyLndpZHRoLW4uYmFyLnN0cm9rZVdpZHRoKS5hdHRyKCJzdHJva2UiLG4uYmFyLmZpbGxDb2xvcikuYXR0cigib3BhY2l0eSIsbi5iYXIuZmlsbE9wYWNpdHkpLmF0dHIoInN0cm9rZS1saW5lY2FwIiwiYnV0dCIpLGkuYXR0cigieTEiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmhlaWdodH0pLmNhbGwoYil9KGUpfSxjbGVhblJhbmdlczpmdW5jdGlvbih0LGUpe2lmKEFycmF5LmlzQXJyYXkodFswXSk/KHQ9dC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuc29ydChzKX0pLHQ9ZS5tdWx0aXNlbGVjdD9UKHQuc29ydChNKSk6W3RbMF1dKTp0PVt0LnNvcnQocyldLGUudGlja3ZhbHMpe3ZhciByPWUudGlja3ZhbHMuc2xpY2UoKS5zb3J0KHMpO2lmKCEodD10Lm1hcChmdW5jdGlvbih0KXt2YXIgZT1bZihyLHRbMF0sW10pLHAocix0WzFdLFtdKV07aWYoZVsxXT5lWzBdKXJldHVybiBlfSkuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0fSkpLmxlbmd0aClyZXR1cm59cmV0dXJuIHQubGVuZ3RoPjE/dDp0WzBdfX19LHsiLi4vLi4vbGliIjo2ODQsIi4uLy4uL2xpYi9ndXAiOjY4MSwiLi9jb25zdGFudHMiOjk4MyxkMzoxNDd9XSw5ODE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL3Bsb3RzL2dldF9kYXRhIikuZ2V0TW9kdWxlQ2FsY0RhdGEsYT10KCIuL3Bsb3QiKSxvPXQoIi4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIik7ci5uYW1lPSJwYXJjb29yZHMiLHIucGxvdD1mdW5jdGlvbih0KXt2YXIgZT1pKHQuY2FsY2RhdGEsInBhcmNvb3JkcyIpWzBdO2UubGVuZ3RoJiZhKHQsZSl9LHIuY2xlYW49ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9bi5faGFzJiZuLl9oYXMoInBhcmNvb3JkcyIpLGE9ZS5faGFzJiZlLl9oYXMoInBhcmNvb3JkcyIpO2kmJiFhJiYobi5fcGFwZXJkaXYuc2VsZWN0QWxsKCIucGFyY29vcmRzIikucmVtb3ZlKCksbi5fZ2xpbWFnZXMuc2VsZWN0QWxsKCIqIikucmVtb3ZlKCkpfSxyLnRvU1ZHPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQuX2dsaW1hZ2VzLHI9bi5zZWxlY3QodCkuc2VsZWN0QWxsKCIuc3ZnLWNvbnRhaW5lciIpO3IuZmlsdGVyKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU9PT1yLnNpemUoKS0xfSkuc2VsZWN0QWxsKCIuZ2wtY2FudmFzLWNvbnRleHQsIC5nbC1jYW52YXMtZm9jdXMiKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy50b0RhdGFVUkwoImltYWdlL3BuZyIpO2UuYXBwZW5kKCJzdmc6aW1hZ2UiKS5hdHRyKHt4bWxuczpvLnN2ZywieGxpbms6aHJlZiI6dCxwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJub25lIix4OjAseTowLHdpZHRoOnRoaXMud2lkdGgsaGVpZ2h0OnRoaXMuaGVpZ2h0fSl9KSx3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe24uc2VsZWN0QWxsKCIjZmlsdGVyQmFyUGF0dGVybiIpLmF0dHIoImlkIiwiZmlsdGVyQmFyUGF0dGVybiIpfSw2MCl9fSx7Ii4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIjo2NjMsIi4uLy4uL3Bsb3RzL2dldF9kYXRhIjo3NjgsIi4vcGxvdCI6OTg5LGQzOjE0N31dLDk4MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGFzX2NvbG9yc2NhbGUiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIiksYT10KCIuLi8uLi9saWIiKSxvPXQoIi4uLy4uL2xpYi9ndXAiKS53cmFwO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPSEhZS5saW5lLmNvbG9yc2NhbGUmJmEuaXNBcnJheU9yVHlwZWRBcnJheShlLmxpbmUuY29sb3IpLHM9cj9lLmxpbmUuY29sb3I6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0KSxyPTA7cjx0O3IrKyllW3JdPS41O3JldHVybiBlfShlLl9sZW5ndGgpLGw9cj9lLmxpbmUuY29sb3JzY2FsZTpbWzAsZS5saW5lLmNvbG9yXSxbMSxlLmxpbmUuY29sb3JdXTtyZXR1cm4gbihlLCJsaW5lIikmJmkoZSxzLCJsaW5lIiwiYyIpLG8oe2xpbmVDb2xvcjpzLGNzY2FsZTpsfSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIjo1NjYsIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oYXNfY29sb3JzY2FsZSI6NTcyLCIuLi8uLi9saWIiOjY4NCwiLi4vLi4vbGliL2d1cCI6NjgxfV0sOTgzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bWF4RGltZW5zaW9uQ291bnQ6NjAsb3ZlcmRyYWc6NDUsdmVydGljYWxQYWRkaW5nOjIsdGlja0Rpc3RhbmNlOjUwLGNhbnZhc1BpeGVsUmF0aW86MSxibG9ja0xpbmVDb3VudDo1ZTMsbGF5ZXJzOlsiY29udGV4dExpbmVMYXllciIsImZvY3VzTGluZUxheWVyIiwicGlja0xpbmVMYXllciJdLGF4aXNUaXRsZU9mZnNldDoyOCxheGlzRXh0ZW50T2Zmc2V0OjEwLGJhcjp7d2lkdGg6NCxjYXB0dXJlV2lkdGg6MTAsZmlsbENvbG9yOiJtYWdlbnRhIixmaWxsT3BhY2l0eToxLHNuYXBEdXJhdGlvbjoxNTAsc25hcFJhdGlvOi4yNSxzbmFwQ2xvc2U6LjAxLHN0cm9rZUNvbG9yOiJ3aGl0ZSIsc3Ryb2tlT3BhY2l0eToxLHN0cm9rZVdpZHRoOjEsaGFuZGxlSGVpZ2h0OjgsaGFuZGxlT3BhY2l0eToxLGhhbmRsZU92ZXJsYXA6MH0sY246e2F4aXNFeHRlbnRUZXh0OiJheGlzLWV4dGVudC10ZXh0IixwYXJjb29yZHNMaW5lTGF5ZXJzOiJwYXJjb29yZHMtbGluZS1sYXllcnMiLHBhcmNvb3Jkc0xpbmVMYXllcjoicGFyY29vcmRzLWxpbmVzIixwYXJjb29yZHM6InBhcmNvb3JkcyIscGFyY29vcmRzQ29udHJvbFZpZXc6InBhcmNvb3Jkcy1jb250cm9sLXZpZXciLHlBeGlzOiJ5LWF4aXMiLGF4aXNPdmVybGF5czoiYXhpcy1vdmVybGF5cyIsYXhpczoiYXhpcyIsYXhpc0hlYWRpbmc6ImF4aXMtaGVhZGluZyIsYXhpc1RpdGxlOiJheGlzLXRpdGxlIixheGlzRXh0ZW50OiJheGlzLWV4dGVudCIsYXhpc0V4dGVudFRvcDoiYXhpcy1leHRlbnQtdG9wIixheGlzRXh0ZW50VG9wVGV4dDoiYXhpcy1leHRlbnQtdG9wLXRleHQiLGF4aXNFeHRlbnRCb3R0b206ImF4aXMtZXh0ZW50LWJvdHRvbSIsYXhpc0V4dGVudEJvdHRvbVRleHQ6ImF4aXMtZXh0ZW50LWJvdHRvbS10ZXh0IixheGlzQnJ1c2g6ImF4aXMtYnJ1c2gifSxpZDp7ZmlsdGVyQmFyUGF0dGVybjoiZmlsdGVyLWJhci1wYXR0ZXJuIn19fSx7fV0sOTg0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hhc19jb2xvcnNjYWxlIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiKSxvPXQoIi4uLy4uL3Bsb3RzL2RvbWFpbiIpLmRlZmF1bHRzLHM9dCgiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIiksbD10KCIuL2F0dHJpYnV0ZXMiKSxjPXQoIi4vYXhpc2JydXNoIiksdT10KCIuL2NvbnN0YW50cyIpLm1heERpbWVuc2lvbkNvdW50LGg9dCgiLi9tZXJnZV9sZW5ndGgiKTtmdW5jdGlvbiBmKHQsZSl7ZnVuY3Rpb24gcihyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsbC5kaW1lbnNpb25zLHIsaSl9dmFyIGk9cigidmFsdWVzIiksYT1yKCJ2aXNpYmxlIik7aWYoaSYmaS5sZW5ndGh8fChhPWUudmlzaWJsZT0hMSksYSl7cigibGFiZWwiKSxyKCJ0aWNrdmFscyIpLHIoInRpY2t0ZXh0IikscigidGlja2Zvcm1hdCIpLHIoInJhbmdlIikscigibXVsdGlzZWxlY3QiKTt2YXIgbz1yKCJjb25zdHJhaW50cmFuZ2UiKTtvJiYoZS5jb25zdHJhaW50cmFuZ2U9Yy5jbGVhblJhbmdlcyhvLGUpKX19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGMpe2Z1bmN0aW9uIHAocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGwscixpKX12YXIgZD10LmRpbWVuc2lvbnM7QXJyYXkuaXNBcnJheShkKSYmZC5sZW5ndGg+dSYmKG4ubG9nKCJwYXJjb29yZHMgdHJhY2VzIHN1cHBvcnQgdXAgdG8gIit1KyIgZGltZW5zaW9ucyBhdCB0aGUgbW9tZW50IiksZC5zcGxpY2UodSkpO3ZhciBnPXModCxlLHtuYW1lOiJkaW1lbnNpb25zIixoYW5kbGVJdGVtRGVmYXVsdHM6Zn0pLG09ZnVuY3Rpb24odCxlLHIsbyxzKXt2YXIgbD1zKCJsaW5lLmNvbG9yIixyKTtpZihpKHQsImxpbmUiKSYmbi5pc0FycmF5T3JUeXBlZEFycmF5KGwpKXtpZihsLmxlbmd0aClyZXR1cm4gcygibGluZS5jb2xvcnNjYWxlIiksYSh0LGUsbyxzLHtwcmVmaXg6ImxpbmUuIixjTGV0dGVyOiJjIn0pLGwubGVuZ3RoO2UubGluZS5jb2xvcj1yfXJldHVybiAxLzB9KHQsZSxyLGMscCk7byhlLGMscCksQXJyYXkuaXNBcnJheShnKSYmZy5sZW5ndGh8fChlLnZpc2libGU9ITEpLGgoZSxnLCJ2YWx1ZXMiLG0pO3ZhciB2PXtmYW1pbHk6Yy5mb250LmZhbWlseSxzaXplOk1hdGgucm91bmQoYy5mb250LnNpemUvMS4yKSxjb2xvcjpjLmZvbnQuY29sb3J9O24uY29lcmNlRm9udChwLCJsYWJlbGZvbnQiLHYpLG4uY29lcmNlRm9udChwLCJ0aWNrZm9udCIsdiksbi5jb2VyY2VGb250KHAsInJhbmdlZm9udCIsdil9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyI6NTY4LCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGFzX2NvbG9yc2NhbGUiOjU3MiwiLi4vLi4vbGliIjo2ODQsIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyI6NzI4LCIuLi8uLi9wbG90cy9kb21haW4iOjc1NywiLi9hdHRyaWJ1dGVzIjo5NzksIi4vYXhpc2JydXNoIjo5ODAsIi4vY29uc3RhbnRzIjo5ODMsIi4vbWVyZ2VfbGVuZ3RoIjo5ODd9XSw5ODU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoIi4vYXR0cmlidXRlcyIpLG4uc3VwcGx5RGVmYXVsdHM9dCgiLi9kZWZhdWx0cyIpLG4uY2FsYz10KCIuL2NhbGMiKSxuLnBsb3Q9dCgiLi9wbG90Iiksbi5jb2xvcmJhcj17Y29udGFpbmVyOiJsaW5lIixtaW46ImNtaW4iLG1heDoiY21heCJ9LG4ubW9kdWxlVHlwZT0idHJhY2UiLG4ubmFtZT0icGFyY29vcmRzIixuLmJhc2VQbG90TW9kdWxlPXQoIi4vYmFzZV9wbG90Iiksbi5jYXRlZ29yaWVzPVsiZ2wiLCJyZWdsIiwibm9PcGFjaXR5Il0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7Ii4vYXR0cmlidXRlcyI6OTc5LCIuL2Jhc2VfcGxvdCI6OTgxLCIuL2NhbGMiOjk4MiwiLi9kZWZhdWx0cyI6OTg0LCIuL3Bsb3QiOjk4OX1dLDk4NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJnbHNsaWZ5IiksaT1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzQgcDAsIHAxLCBwMiwgcDMsXG4gICAgICAgICAgICAgICBwNCwgcDUsIHA2LCBwNyxcbiAgICAgICAgICAgICAgIHA4LCBwOSwgcGEsIHBiLFxuICAgICAgICAgICAgICAgcGMsIHBkLCBwZTtcblxuYXR0cmlidXRlIHZlYzQgcGY7XG5cbnVuaWZvcm0gbWF0NCBkaW0xQSwgZGltMkEsIGRpbTFCLCBkaW0yQiwgZGltMUMsIGRpbTJDLCBkaW0xRCwgZGltMkQsXG4gICAgICAgICAgICAgbG9BLCBoaUEsIGxvQiwgaGlCLCBsb0MsIGhpQywgbG9ELCBoaUQ7XG5cbnVuaWZvcm0gdmVjMiByZXNvbHV0aW9uLFxuICAgICAgICAgICAgIHZpZXdCb3hQb3NpdGlvbixcbiAgICAgICAgICAgICB2aWV3Qm94U2l6ZTtcblxudW5pZm9ybSBzYW1wbGVyMkQgcGFsZXR0ZTtcbnVuaWZvcm0gc2FtcGxlcjJEIG1hc2s7XG51bmlmb3JtIGZsb2F0IG1hc2tIZWlnaHQ7XG5cbnVuaWZvcm0gdmVjMiBjb2xvckNsYW1wO1xuXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xuXG52ZWM0IHVuaXRfMSA9IHZlYzQoMSwgMSwgMSwgMSk7XG5cbmZsb2F0IHZhbChtYXQ0IHAsIG1hdDQgdikge1xuICAgIHJldHVybiBkb3QobWF0cml4Q29tcE11bHQocCwgdikgKiB1bml0XzEsIHVuaXRfMSk7XG59XG5cbmZsb2F0IGF4aXNZKFxuICAgICAgICBmbG9hdCB4LFxuICAgICAgICBtYXQ0IGRbNF0sXG4gICAgICAgIG1hdDQgZGltMUEsIG1hdDQgZGltMkEsIG1hdDQgZGltMUIsIG1hdDQgZGltMkIsIG1hdDQgZGltMUMsIG1hdDQgZGltMkMsIG1hdDQgZGltMUQsIG1hdDQgZGltMkRcbiAgICApIHtcblxuICAgIGZsb2F0IHkxID0gdmFsKGRbMF0sIGRpbTFBKSArIHZhbChkWzFdLCBkaW0xQikgKyB2YWwoZFsyXSwgZGltMUMpICsgdmFsKGRbM10sIGRpbTFEKTtcbiAgICBmbG9hdCB5MiA9IHZhbChkWzBdLCBkaW0yQSkgKyB2YWwoZFsxXSwgZGltMkIpICsgdmFsKGRbMl0sIGRpbTJDKSArIHZhbChkWzNdLCBkaW0yRCk7XG4gICAgcmV0dXJuIHkxICogKDEuMCAtIHgpICsgeTIgKiB4O1xufVxuXG5jb25zdCBpbnQgYml0c1BlckJ5dGUgPSA4O1xuXG5pbnQgbW9kMihpbnQgYSkge1xuICAgIHJldHVybiBhIC0gMiAqIChhIC8gMik7XG59XG5cbmludCBtb2Q4KGludCBhKSB7XG4gICAgcmV0dXJuIGEgLSA4ICogKGEgLyA4KTtcbn1cblxudmVjNCB6ZXJvID0gdmVjNCgwLCAwLCAwLCAwKTtcbnZlYzQgdW5pdF8wID0gdmVjNCgxLCAxLCAxLCAxKTtcbnZlYzIgeHlQcm9qZWN0aW9uID0gdmVjMigxLCAxKTtcblxubWF0NCBtY2xhbXAobWF0NCBtLCBtYXQ0IGxvLCBtYXQ0IGhpKSB7XG4gICAgcmV0dXJuIG1hdDQoY2xhbXAobVswXSwgbG9bMF0sIGhpWzBdKSxcbiAgICAgICAgICAgICAgICBjbGFtcChtWzFdLCBsb1sxXSwgaGlbMV0pLFxuICAgICAgICAgICAgICAgIGNsYW1wKG1bMl0sIGxvWzJdLCBoaVsyXSksXG4gICAgICAgICAgICAgICAgY2xhbXAobVszXSwgbG9bM10sIGhpWzNdKSk7XG59XG5cbmJvb2wgbXNob3cobWF0NCBwLCBtYXQ0IGxvLCBtYXQ0IGhpKSB7XG4gICAgcmV0dXJuIG1jbGFtcChwLCBsbywgaGkpID09IHA7XG59XG5cbmJvb2wgd2l0aGluQm91bmRpbmdCb3goXG4gICAgICAgIG1hdDQgZFs0XSxcbiAgICAgICAgbWF0NCBsb0EsIG1hdDQgaGlBLCBtYXQ0IGxvQiwgbWF0NCBoaUIsIG1hdDQgbG9DLCBtYXQ0IGhpQywgbWF0NCBsb0QsIG1hdDQgaGlEXG4gICAgKSB7XG5cbiAgICByZXR1cm4gbXNob3coZFswXSwgbG9BLCBoaUEpICYmXG4gICAgICAgICAgIG1zaG93KGRbMV0sIGxvQiwgaGlCKSAmJlxuICAgICAgICAgICBtc2hvdyhkWzJdLCBsb0MsIGhpQykgJiZcbiAgICAgICAgICAgbXNob3coZFszXSwgbG9ELCBoaUQpO1xufVxuXG5ib29sIHdpdGhpblJhc3Rlck1hc2sobWF0NCBkWzRdLCBzYW1wbGVyMkQgbWFzaywgZmxvYXQgaGVpZ2h0KSB7XG4gICAgYm9vbCByZXN1bHQgPSB0cnVlO1xuICAgIGludCBiaXRJbkJ5dGVTdGVwcGVyO1xuICAgIGZsb2F0IHZhbFksIHZhbHVlWSwgc2NhbGVYO1xuICAgIGludCBoaXQsIGJpdG1hc2ssIHZhbFg7XG4gICAgZm9yKGludCBpID0gMDsgaSA8IDQ7IGkrKykge1xuICAgICAgICBmb3IoaW50IGogPSAwOyBqIDwgNDsgaisrKSB7XG4gICAgICAgICAgICBmb3IoaW50IGsgPSAwOyBrIDwgNDsgaysrKSB7XG4gICAgICAgICAgICAgICAgYml0SW5CeXRlU3RlcHBlciA9IG1vZDgoaiAqIDQgKyBrKTtcbiAgICAgICAgICAgICAgICB2YWxYID0gaSAqIDIgKyBqIC8gMjtcbiAgICAgICAgICAgICAgICB2YWxZID0gZFtpXVtqXVtrXTtcbiAgICAgICAgICAgICAgICB2YWx1ZVkgPSB2YWxZICogKGhlaWdodCAtIDEuMCkgKyAwLjU7XG4gICAgICAgICAgICAgICAgc2NhbGVYID0gKGZsb2F0KHZhbFgpICsgMC41KSAvIDguMDtcbiAgICAgICAgICAgICAgICBoaXQgPSBpbnQodGV4dHVyZTJEKG1hc2ssIHZlYzIoc2NhbGVYLCAodmFsdWVZICsgMC41KSAvIGhlaWdodCkpWzNdICogMjU1LjApIC8gaW50KHBvdygyLjAsIGZsb2F0KGJpdEluQnl0ZVN0ZXBwZXIpKSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmIG1vZDIoaGl0KSA9PSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbnZlYzQgcG9zaXRpb24oXG4gICAgICAgIGZsb2F0IGRlcHRoLFxuICAgICAgICB2ZWMyIHJlc29sdXRpb24sIHZlYzIgdmlld0JveFBvc2l0aW9uLCB2ZWMyIHZpZXdCb3hTaXplLFxuICAgICAgICBtYXQ0IGRpbXNbNF0sXG4gICAgICAgIGZsb2F0IHNpZ251bSxcbiAgICAgICAgbWF0NCBkaW0xQSwgbWF0NCBkaW0yQSwgbWF0NCBkaW0xQiwgbWF0NCBkaW0yQiwgbWF0NCBkaW0xQywgbWF0NCBkaW0yQywgbWF0NCBkaW0xRCwgbWF0NCBkaW0yRCxcbiAgICAgICAgbWF0NCBsb0EsIG1hdDQgaGlBLCBtYXQ0IGxvQiwgbWF0NCBoaUIsIG1hdDQgbG9DLCBtYXQ0IGhpQywgbWF0NCBsb0QsIG1hdDQgaGlELFxuICAgICAgICBzYW1wbGVyMkQgbWFzaywgZmxvYXQgbWFza0hlaWdodFxuICAgICkge1xuXG4gICAgZmxvYXQgeCA9IDAuNSAqIHNpZ251bSArIDAuNTtcbiAgICBmbG9hdCB5ID0gYXhpc1koeCwgZGltcywgZGltMUEsIGRpbTJBLCBkaW0xQiwgZGltMkIsIGRpbTFDLCBkaW0yQywgZGltMUQsIGRpbTJEKTtcblxuICAgIGZsb2F0IHNob3cgPSBmbG9hdChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoaW5Cb3VuZGluZ0JveChkaW1zLCBsb0EsIGhpQSwgbG9CLCBoaUIsIGxvQywgaGlDLCBsb0QsIGhpRClcbiAgICAgICAgICAgICAgICAgICAgICAgICAmJiB3aXRoaW5SYXN0ZXJNYXNrKGRpbXMsIG1hc2ssIG1hc2tIZWlnaHQpXG4gICAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgIHZlYzIgdmlld0JveFhZID0gdmlld0JveFBvc2l0aW9uICsgdmlld0JveFNpemUgKiB2ZWMyKHgsIHkpO1xuICAgIGZsb2F0IGRlcHRoT3JIaWRlID0gZGVwdGggKyAyLjAgKiAoMS4wIC0gc2hvdyk7XG5cbiAgICByZXR1cm4gdmVjNChcbiAgICAgICAgeHlQcm9qZWN0aW9uICogKDIuMCAqIHZpZXdCb3hYWSAvIHJlc29sdXRpb24gLSAxLjApLFxuICAgICAgICBkZXB0aE9ySGlkZSxcbiAgICAgICAgMS4wXG4gICAgKTtcbn1cblxudm9pZCBtYWluKCkge1xuXG4gICAgZmxvYXQgcHJvbWluZW5jZSA9IGFicyhwZlszXSk7XG5cbiAgICBtYXQ0IHBbNF07XG4gICAgcFswXSA9IG1hdDQocDAsIHAxLCBwMiwgcDMpO1xuICAgIHBbMV0gPSBtYXQ0KHA0LCBwNSwgcDYsIHA3KTtcbiAgICBwWzJdID0gbWF0NChwOCwgcDksIHBhLCBwYik7XG4gICAgcFszXSA9IG1hdDQocGMsIHBkLCBwZSwgYWJzKHBmKSk7XG5cbiAgICBnbF9Qb3NpdGlvbiA9IHBvc2l0aW9uKFxuICAgICAgICAxLjAgLSBwcm9taW5lbmNlLFxuICAgICAgICByZXNvbHV0aW9uLCB2aWV3Qm94UG9zaXRpb24sIHZpZXdCb3hTaXplLFxuICAgICAgICBwLFxuICAgICAgICBzaWduKHBmWzNdKSxcbiAgICAgICAgZGltMUEsIGRpbTJBLCBkaW0xQiwgZGltMkIsIGRpbTFDLCBkaW0yQywgZGltMUQsIGRpbTJELFxuICAgICAgICBsb0EsIGhpQSwgbG9CLCBoaUIsIGxvQywgaGlDLCBsb0QsIGhpRCxcbiAgICAgICAgbWFzaywgbWFza0hlaWdodFxuICAgICk7XG5cbiAgICBmbG9hdCBjbGFtcGVkQ29sb3JJbmRleCA9IGNsYW1wKChwcm9taW5lbmNlIC0gY29sb3JDbGFtcFswXSkgLyAoY29sb3JDbGFtcFsxXSAtIGNvbG9yQ2xhbXBbMF0pLCAwLjAsIDEuMCk7XG4gICAgZnJhZ0NvbG9yID0gdGV4dHVyZTJEKHBhbGV0dGUsIHZlYzIoKGNsYW1wZWRDb2xvckluZGV4ICogMjU1LjAgKyAwLjUpIC8gMjU2LjAsIDAuNSkpO1xufVxuIl0pLGE9bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWM0IHAwLCBwMSwgcDIsIHAzLFxuICAgICAgICAgICAgICAgcDQsIHA1LCBwNiwgcDcsXG4gICAgICAgICAgICAgICBwOCwgcDksIHBhLCBwYixcbiAgICAgICAgICAgICAgIHBjLCBwZCwgcGU7XG5cbmF0dHJpYnV0ZSB2ZWM0IHBmO1xuXG51bmlmb3JtIG1hdDQgZGltMUEsIGRpbTJBLCBkaW0xQiwgZGltMkIsIGRpbTFDLCBkaW0yQywgZGltMUQsIGRpbTJEO1xuXG51bmlmb3JtIHZlYzIgcmVzb2x1dGlvbixcbiAgICAgICAgICAgICB2aWV3Qm94UG9zaXRpb24sXG4gICAgICAgICAgICAgdmlld0JveFNpemU7XG5cbnVuaWZvcm0gc2FtcGxlcjJEIHBhbGV0dGU7XG5cbnVuaWZvcm0gdmVjMiBjb2xvckNsYW1wO1xuXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xuXG52ZWMyIHh5UHJvamVjdGlvbiA9IHZlYzIoMSwgMSk7XG5cbnZlYzQgdW5pdCA9IHZlYzQoMSwgMSwgMSwgMSk7XG5cbmZsb2F0IHZhbChtYXQ0IHAsIG1hdDQgdikge1xuICAgIHJldHVybiBkb3QobWF0cml4Q29tcE11bHQocCwgdikgKiB1bml0LCB1bml0KTtcbn1cblxuZmxvYXQgYXhpc1koXG4gICAgICAgIGZsb2F0IHgsXG4gICAgICAgIG1hdDQgZFs0XSxcbiAgICAgICAgbWF0NCBkaW0xQSwgbWF0NCBkaW0yQSwgbWF0NCBkaW0xQiwgbWF0NCBkaW0yQiwgbWF0NCBkaW0xQywgbWF0NCBkaW0yQywgbWF0NCBkaW0xRCwgbWF0NCBkaW0yRFxuICAgICkge1xuXG4gICAgZmxvYXQgeTEgPSB2YWwoZFswXSwgZGltMUEpICsgdmFsKGRbMV0sIGRpbTFCKSArIHZhbChkWzJdLCBkaW0xQykgKyB2YWwoZFszXSwgZGltMUQpO1xuICAgIGZsb2F0IHkyID0gdmFsKGRbMF0sIGRpbTJBKSArIHZhbChkWzFdLCBkaW0yQikgKyB2YWwoZFsyXSwgZGltMkMpICsgdmFsKGRbM10sIGRpbTJEKTtcbiAgICByZXR1cm4geTEgKiAoMS4wIC0geCkgKyB5MiAqIHg7XG59XG5cbnZlYzQgcG9zaXRpb24oXG4gICAgICAgIGZsb2F0IGRlcHRoLFxuICAgICAgICB2ZWMyIHJlc29sdXRpb24sIHZlYzIgdmlld0JveFBvc2l0aW9uLCB2ZWMyIHZpZXdCb3hTaXplLFxuICAgICAgICBtYXQ0IGRpbXNbNF0sXG4gICAgICAgIGZsb2F0IHNpZ251bSxcbiAgICAgICAgbWF0NCBkaW0xQSwgbWF0NCBkaW0yQSwgbWF0NCBkaW0xQiwgbWF0NCBkaW0yQiwgbWF0NCBkaW0xQywgbWF0NCBkaW0yQywgbWF0NCBkaW0xRCwgbWF0NCBkaW0yRFxuICAgICkge1xuXG4gICAgZmxvYXQgeCA9IDAuNSAqIHNpZ251bSArIDAuNTtcbiAgICBmbG9hdCB5ID0gYXhpc1koeCwgZGltcywgZGltMUEsIGRpbTJBLCBkaW0xQiwgZGltMkIsIGRpbTFDLCBkaW0yQywgZGltMUQsIGRpbTJEKTtcblxuICAgIHZlYzIgdmlld0JveFhZID0gdmlld0JveFBvc2l0aW9uICsgdmlld0JveFNpemUgKiB2ZWMyKHgsIHkpO1xuXG4gICAgcmV0dXJuIHZlYzQoXG4gICAgICAgIHh5UHJvamVjdGlvbiAqICgyLjAgKiB2aWV3Qm94WFkgLyByZXNvbHV0aW9uIC0gMS4wKSxcbiAgICAgICAgZGVwdGgsXG4gICAgICAgIDEuMFxuICAgICk7XG59XG5cbnZvaWQgbWFpbigpIHtcblxuICAgIGZsb2F0IHByb21pbmVuY2UgPSBhYnMocGZbM10pO1xuXG4gICAgbWF0NCBwWzRdO1xuICAgIHBbMF0gPSBtYXQ0KHAwLCBwMSwgcDIsIHAzKTtcbiAgICBwWzFdID0gbWF0NChwNCwgcDUsIHA2LCBwNyk7XG4gICAgcFsyXSA9IG1hdDQocDgsIHA5LCBwYSwgcGIpO1xuICAgIHBbM10gPSBtYXQ0KHBjLCBwZCwgcGUsIGFicyhwZikpO1xuXG4gICAgZ2xfUG9zaXRpb24gPSBwb3NpdGlvbihcbiAgICAgICAgMS4wIC0gcHJvbWluZW5jZSxcbiAgICAgICAgcmVzb2x1dGlvbiwgdmlld0JveFBvc2l0aW9uLCB2aWV3Qm94U2l6ZSxcbiAgICAgICAgcCxcbiAgICAgICAgc2lnbihwZlszXSksXG4gICAgICAgIGRpbTFBLCBkaW0yQSwgZGltMUIsIGRpbTJCLCBkaW0xQywgZGltMkMsIGRpbTFELCBkaW0yRFxuICAgICk7XG5cbiAgICBmbG9hdCBjbGFtcGVkQ29sb3JJbmRleCA9IGNsYW1wKChwcm9taW5lbmNlIC0gY29sb3JDbGFtcFswXSkgLyAoY29sb3JDbGFtcFsxXSAtIGNvbG9yQ2xhbXBbMF0pLCAwLjAsIDEuMCk7XG4gICAgZnJhZ0NvbG9yID0gdGV4dHVyZTJEKHBhbGV0dGUsIHZlYzIoKGNsYW1wZWRDb2xvckluZGV4ICogMjU1LjAgKyAwLjUpIC8gMjU2LjAsIDAuNSkpO1xufVxuIl0pLG89bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWM0IHAwLCBwMSwgcDIsIHAzLFxuICAgICAgICAgICAgICAgcDQsIHA1LCBwNiwgcDcsXG4gICAgICAgICAgICAgICBwOCwgcDksIHBhLCBwYixcbiAgICAgICAgICAgICAgIHBjLCBwZCwgcGU7XG5cbmF0dHJpYnV0ZSB2ZWM0IHBmO1xuXG51bmlmb3JtIG1hdDQgZGltMUEsIGRpbTJBLCBkaW0xQiwgZGltMkIsIGRpbTFDLCBkaW0yQywgZGltMUQsIGRpbTJELFxuICAgICAgICAgICAgIGxvQSwgaGlBLCBsb0IsIGhpQiwgbG9DLCBoaUMsIGxvRCwgaGlEO1xuXG51bmlmb3JtIHZlYzIgcmVzb2x1dGlvbixcbiAgICAgICAgICAgICB2aWV3Qm94UG9zaXRpb24sXG4gICAgICAgICAgICAgdmlld0JveFNpemU7XG5cbnVuaWZvcm0gc2FtcGxlcjJEIG1hc2s7XG51bmlmb3JtIGZsb2F0IG1hc2tIZWlnaHQ7XG5cbnVuaWZvcm0gdmVjMiBjb2xvckNsYW1wO1xuXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xuXG52ZWM0IHVuaXRfMSA9IHZlYzQoMSwgMSwgMSwgMSk7XG5cbmZsb2F0IHZhbChtYXQ0IHAsIG1hdDQgdikge1xuICAgIHJldHVybiBkb3QobWF0cml4Q29tcE11bHQocCwgdikgKiB1bml0XzEsIHVuaXRfMSk7XG59XG5cbmZsb2F0IGF4aXNZKFxuICAgICAgICBmbG9hdCB4LFxuICAgICAgICBtYXQ0IGRbNF0sXG4gICAgICAgIG1hdDQgZGltMUEsIG1hdDQgZGltMkEsIG1hdDQgZGltMUIsIG1hdDQgZGltMkIsIG1hdDQgZGltMUMsIG1hdDQgZGltMkMsIG1hdDQgZGltMUQsIG1hdDQgZGltMkRcbiAgICApIHtcblxuICAgIGZsb2F0IHkxID0gdmFsKGRbMF0sIGRpbTFBKSArIHZhbChkWzFdLCBkaW0xQikgKyB2YWwoZFsyXSwgZGltMUMpICsgdmFsKGRbM10sIGRpbTFEKTtcbiAgICBmbG9hdCB5MiA9IHZhbChkWzBdLCBkaW0yQSkgKyB2YWwoZFsxXSwgZGltMkIpICsgdmFsKGRbMl0sIGRpbTJDKSArIHZhbChkWzNdLCBkaW0yRCk7XG4gICAgcmV0dXJuIHkxICogKDEuMCAtIHgpICsgeTIgKiB4O1xufVxuXG5jb25zdCBpbnQgYml0c1BlckJ5dGUgPSA4O1xuXG5pbnQgbW9kMihpbnQgYSkge1xuICAgIHJldHVybiBhIC0gMiAqIChhIC8gMik7XG59XG5cbmludCBtb2Q4KGludCBhKSB7XG4gICAgcmV0dXJuIGEgLSA4ICogKGEgLyA4KTtcbn1cblxudmVjNCB6ZXJvID0gdmVjNCgwLCAwLCAwLCAwKTtcbnZlYzQgdW5pdF8wID0gdmVjNCgxLCAxLCAxLCAxKTtcbnZlYzIgeHlQcm9qZWN0aW9uID0gdmVjMigxLCAxKTtcblxubWF0NCBtY2xhbXAobWF0NCBtLCBtYXQ0IGxvLCBtYXQ0IGhpKSB7XG4gICAgcmV0dXJuIG1hdDQoY2xhbXAobVswXSwgbG9bMF0sIGhpWzBdKSxcbiAgICAgICAgICAgICAgICBjbGFtcChtWzFdLCBsb1sxXSwgaGlbMV0pLFxuICAgICAgICAgICAgICAgIGNsYW1wKG1bMl0sIGxvWzJdLCBoaVsyXSksXG4gICAgICAgICAgICAgICAgY2xhbXAobVszXSwgbG9bM10sIGhpWzNdKSk7XG59XG5cbmJvb2wgbXNob3cobWF0NCBwLCBtYXQ0IGxvLCBtYXQ0IGhpKSB7XG4gICAgcmV0dXJuIG1jbGFtcChwLCBsbywgaGkpID09IHA7XG59XG5cbmJvb2wgd2l0aGluQm91bmRpbmdCb3goXG4gICAgICAgIG1hdDQgZFs0XSxcbiAgICAgICAgbWF0NCBsb0EsIG1hdDQgaGlBLCBtYXQ0IGxvQiwgbWF0NCBoaUIsIG1hdDQgbG9DLCBtYXQ0IGhpQywgbWF0NCBsb0QsIG1hdDQgaGlEXG4gICAgKSB7XG5cbiAgICByZXR1cm4gbXNob3coZFswXSwgbG9BLCBoaUEpICYmXG4gICAgICAgICAgIG1zaG93KGRbMV0sIGxvQiwgaGlCKSAmJlxuICAgICAgICAgICBtc2hvdyhkWzJdLCBsb0MsIGhpQykgJiZcbiAgICAgICAgICAgbXNob3coZFszXSwgbG9ELCBoaUQpO1xufVxuXG5ib29sIHdpdGhpblJhc3Rlck1hc2sobWF0NCBkWzRdLCBzYW1wbGVyMkQgbWFzaywgZmxvYXQgaGVpZ2h0KSB7XG4gICAgYm9vbCByZXN1bHQgPSB0cnVlO1xuICAgIGludCBiaXRJbkJ5dGVTdGVwcGVyO1xuICAgIGZsb2F0IHZhbFksIHZhbHVlWSwgc2NhbGVYO1xuICAgIGludCBoaXQsIGJpdG1hc2ssIHZhbFg7XG4gICAgZm9yKGludCBpID0gMDsgaSA8IDQ7IGkrKykge1xuICAgICAgICBmb3IoaW50IGogPSAwOyBqIDwgNDsgaisrKSB7XG4gICAgICAgICAgICBmb3IoaW50IGsgPSAwOyBrIDwgNDsgaysrKSB7XG4gICAgICAgICAgICAgICAgYml0SW5CeXRlU3RlcHBlciA9IG1vZDgoaiAqIDQgKyBrKTtcbiAgICAgICAgICAgICAgICB2YWxYID0gaSAqIDIgKyBqIC8gMjtcbiAgICAgICAgICAgICAgICB2YWxZID0gZFtpXVtqXVtrXTtcbiAgICAgICAgICAgICAgICB2YWx1ZVkgPSB2YWxZICogKGhlaWdodCAtIDEuMCkgKyAwLjU7XG4gICAgICAgICAgICAgICAgc2NhbGVYID0gKGZsb2F0KHZhbFgpICsgMC41KSAvIDguMDtcbiAgICAgICAgICAgICAgICBoaXQgPSBpbnQodGV4dHVyZTJEKG1hc2ssIHZlYzIoc2NhbGVYLCAodmFsdWVZICsgMC41KSAvIGhlaWdodCkpWzNdICogMjU1LjApIC8gaW50KHBvdygyLjAsIGZsb2F0KGJpdEluQnl0ZVN0ZXBwZXIpKSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmIG1vZDIoaGl0KSA9PSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbnZlYzQgcG9zaXRpb24oXG4gICAgICAgIGZsb2F0IGRlcHRoLFxuICAgICAgICB2ZWMyIHJlc29sdXRpb24sIHZlYzIgdmlld0JveFBvc2l0aW9uLCB2ZWMyIHZpZXdCb3hTaXplLFxuICAgICAgICBtYXQ0IGRpbXNbNF0sXG4gICAgICAgIGZsb2F0IHNpZ251bSxcbiAgICAgICAgbWF0NCBkaW0xQSwgbWF0NCBkaW0yQSwgbWF0NCBkaW0xQiwgbWF0NCBkaW0yQiwgbWF0NCBkaW0xQywgbWF0NCBkaW0yQywgbWF0NCBkaW0xRCwgbWF0NCBkaW0yRCxcbiAgICAgICAgbWF0NCBsb0EsIG1hdDQgaGlBLCBtYXQ0IGxvQiwgbWF0NCBoaUIsIG1hdDQgbG9DLCBtYXQ0IGhpQywgbWF0NCBsb0QsIG1hdDQgaGlELFxuICAgICAgICBzYW1wbGVyMkQgbWFzaywgZmxvYXQgbWFza0hlaWdodFxuICAgICkge1xuXG4gICAgZmxvYXQgeCA9IDAuNSAqIHNpZ251bSArIDAuNTtcbiAgICBmbG9hdCB5ID0gYXhpc1koeCwgZGltcywgZGltMUEsIGRpbTJBLCBkaW0xQiwgZGltMkIsIGRpbTFDLCBkaW0yQywgZGltMUQsIGRpbTJEKTtcblxuICAgIGZsb2F0IHNob3cgPSBmbG9hdChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoaW5Cb3VuZGluZ0JveChkaW1zLCBsb0EsIGhpQSwgbG9CLCBoaUIsIGxvQywgaGlDLCBsb0QsIGhpRClcbiAgICAgICAgICAgICAgICAgICAgICAgICAmJiB3aXRoaW5SYXN0ZXJNYXNrKGRpbXMsIG1hc2ssIG1hc2tIZWlnaHQpXG4gICAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgIHZlYzIgdmlld0JveFhZID0gdmlld0JveFBvc2l0aW9uICsgdmlld0JveFNpemUgKiB2ZWMyKHgsIHkpO1xuICAgIGZsb2F0IGRlcHRoT3JIaWRlID0gZGVwdGggKyAyLjAgKiAoMS4wIC0gc2hvdyk7XG5cbiAgICByZXR1cm4gdmVjNChcbiAgICAgICAgeHlQcm9qZWN0aW9uICogKDIuMCAqIHZpZXdCb3hYWSAvIHJlc29sdXRpb24gLSAxLjApLFxuICAgICAgICBkZXB0aE9ySGlkZSxcbiAgICAgICAgMS4wXG4gICAgKTtcbn1cblxudm9pZCBtYWluKCkge1xuXG4gICAgZmxvYXQgcHJvbWluZW5jZSA9IGFicyhwZlszXSk7XG5cbiAgICBtYXQ0IHBbNF07XG4gICAgcFswXSA9IG1hdDQocDAsIHAxLCBwMiwgcDMpO1xuICAgIHBbMV0gPSBtYXQ0KHA0LCBwNSwgcDYsIHA3KTtcbiAgICBwWzJdID0gbWF0NChwOCwgcDksIHBhLCBwYik7XG4gICAgcFszXSA9IG1hdDQocGMsIHBkLCBwZSwgYWJzKHBmKSk7XG5cbiAgICBnbF9Qb3NpdGlvbiA9IHBvc2l0aW9uKFxuICAgICAgICAxLjAgLSBwcm9taW5lbmNlLFxuICAgICAgICByZXNvbHV0aW9uLCB2aWV3Qm94UG9zaXRpb24sIHZpZXdCb3hTaXplLFxuICAgICAgICBwLFxuICAgICAgICBzaWduKHBmWzNdKSxcbiAgICAgICAgZGltMUEsIGRpbTJBLCBkaW0xQiwgZGltMkIsIGRpbTFDLCBkaW0yQywgZGltMUQsIGRpbTJELFxuICAgICAgICBsb0EsIGhpQSwgbG9CLCBoaUIsIGxvQywgaGlDLCBsb0QsIGhpRCxcbiAgICAgICAgbWFzaywgbWFza0hlaWdodFxuICAgICk7XG5cbiAgICBmcmFnQ29sb3IgPSB2ZWM0KHBmLnJnYiwgMS4wKTtcbn1cbiJdKSxzPW4oWyJwcmVjaXNpb24gbG93cCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XG5cbnZvaWQgbWFpbigpIHtcbiAgICBnbF9GcmFnQ29sb3IgPSBmcmFnQ29sb3I7XG59XG4iXSksbD10KCIuLi8uLi9saWIiKSxjPTFlLTYsdT0xZS03LGg9MjA0OCxmPTY0LHA9MixkPTQsZz04LG09Zi9nLHY9WzExOSwxMTksMTE5XSx5PW5ldyBVaW50OEFycmF5KDQpLHg9bmV3IFVpbnQ4QXJyYXkoNCksYj17c2hhcGU6WzI1NiwxXSxmb3JtYXQ6InJnYmEiLHR5cGU6InVpbnQ4IixtYWc6Im5lYXJlc3QiLG1pbjoibmVhcmVzdCJ9O2Z1bmN0aW9uIF8odCxlLHIsbixpKXt2YXIgYT10Ll9nbDthLmVuYWJsZShhLlNDSVNTT1JfVEVTVCksYS5zY2lzc29yKGUscixuLGkpLHQuY2xlYXIoe2NvbG9yOlswLDAsMCwwXSxkZXB0aDoxfSl9ZnVuY3Rpb24gdyh0LGUscixuLGksYSl7dmFyIG89YS5rZXk7ci5kcmF3Q29tcGxldGVkfHwoIWZ1bmN0aW9uKHQpe3QucmVhZCh7eDowLHk6MCx3aWR0aDoxLGhlaWdodDoxLGRhdGE6eX0pfSh0KSxyLmRyYXdDb21wbGV0ZWQ9ITApLGZ1bmN0aW9uIHMobCl7dmFyIGM7Yz1NYXRoLm1pbihuLGktbCpuKSxhLm9mZnNldD1wKmwqbixhLmNvdW50PXAqYywwPT09bCYmKHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZShyLmN1cnJlbnRSYWZzW29dKSxkZWxldGUgci5jdXJyZW50UmFmc1tvXSxfKHQsYS5zY2lzc29yWCxhLnNjaXNzb3JZLGEuc2Npc3NvcldpZHRoLGEudmlld0JveFNpemVbMV0pKSxyLmNsZWFyT25seXx8KGUoYSksbCpuK2M8aSYmKHIuY3VycmVudFJhZnNbb109d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpe3MobCsxKX0pKSxyLmRyYXdDb21wbGV0ZWQ9ITEpfSgwKX1mdW5jdGlvbiBrKHQsZSl7cmV0dXJuKHQ+Pj44KmUpJTI1Ni8yNTV9ZnVuY3Rpb24gTSh0LGUscil7dmFyIG4saSxhLG89W107Zm9yKGk9MDtpPHQ7aSsrKWZvcihhPTA7YTxwO2ErKylmb3Iobj0wO248ZDtuKyspby5wdXNoKGVbaSpmK3IqZCtuXSkscipkK249PT1mLTEmJmElMj09MCYmKG9bby5sZW5ndGgtMV0qPS0xKTtyZXR1cm4gb31lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixuLHAsZCx5LEE9ZS5jb250ZXh0LFQ9ZS5waWNrLFM9ZS5yZWdsLEU9e2N1cnJlbnRSYWZzOnt9LGRyYXdDb21wbGV0ZWQ6ITAsY2xlYXJPbmx5OiExfSxDPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT17fSxyPTA7cjwxNjtyKyspZVsicCIrci50b1N0cmluZygxNildPXQuYnVmZmVyKHt1c2FnZToiZHluYW1pYyIsdHlwZToiZmxvYXQiLGRhdGE6bmV3IFVpbnQ4QXJyYXkoMCl9KTtyZXR1cm4gZX0oUyksTD1TLnRleHR1cmUoYik7UChlKTt2YXIgej1TKHtwcm9maWxlOiExLGJsZW5kOntlbmFibGU6QSxmdW5jOntzcmNSR0I6InNyYyBhbHBoYSIsZHN0UkdCOiJvbmUgbWludXMgc3JjIGFscGhhIixzcmNBbHBoYToxLGRzdEFscGhhOjF9LGVxdWF0aW9uOntyZ2I6ImFkZCIsYWxwaGE6ImFkZCJ9LGNvbG9yOlswLDAsMCwwXX0sZGVwdGg6e2VuYWJsZTohQSxtYXNrOiEwLGZ1bmM6Imxlc3MiLHJhbmdlOlswLDFdfSxjdWxsOntlbmFibGU6ITAsZmFjZToiYmFjayJ9LHNjaXNzb3I6e2VuYWJsZTohMCxib3g6e3g6Uy5wcm9wKCJzY2lzc29yWCIpLHk6Uy5wcm9wKCJzY2lzc29yWSIpLHdpZHRoOlMucHJvcCgic2Npc3NvcldpZHRoIiksaGVpZ2h0OlMucHJvcCgic2Npc3NvckhlaWdodCIpfX0sdmlld3BvcnQ6e3g6Uy5wcm9wKCJ2aWV3cG9ydFgiKSx5OlMucHJvcCgidmlld3BvcnRZIiksd2lkdGg6Uy5wcm9wKCJ2aWV3cG9ydFdpZHRoIiksaGVpZ2h0OlMucHJvcCgidmlld3BvcnRIZWlnaHQiKX0sZGl0aGVyOiExLHZlcnQ6VD9vOkE/YTppLGZyYWc6cyxwcmltaXRpdmU6ImxpbmVzIixsaW5lV2lkdGg6MSxhdHRyaWJ1dGVzOkMsdW5pZm9ybXM6e3Jlc29sdXRpb246Uy5wcm9wKCJyZXNvbHV0aW9uIiksdmlld0JveFBvc2l0aW9uOlMucHJvcCgidmlld0JveFBvc2l0aW9uIiksdmlld0JveFNpemU6Uy5wcm9wKCJ2aWV3Qm94U2l6ZSIpLGRpbTFBOlMucHJvcCgiZGltMUEiKSxkaW0yQTpTLnByb3AoImRpbTJBIiksZGltMUI6Uy5wcm9wKCJkaW0xQiIpLGRpbTJCOlMucHJvcCgiZGltMkIiKSxkaW0xQzpTLnByb3AoImRpbTFDIiksZGltMkM6Uy5wcm9wKCJkaW0yQyIpLGRpbTFEOlMucHJvcCgiZGltMUQiKSxkaW0yRDpTLnByb3AoImRpbTJEIiksbG9BOlMucHJvcCgibG9BIiksaGlBOlMucHJvcCgiaGlBIiksbG9COlMucHJvcCgibG9CIiksaGlCOlMucHJvcCgiaGlCIiksbG9DOlMucHJvcCgibG9DIiksaGlDOlMucHJvcCgiaGlDIiksbG9EOlMucHJvcCgibG9EIiksaGlEOlMucHJvcCgiaGlEIikscGFsZXR0ZTpMLG1hc2s6Uy5wcm9wKCJtYXNrVGV4dHVyZSIpLG1hc2tIZWlnaHQ6Uy5wcm9wKCJtYXNrSGVpZ2h0IiksY29sb3JDbGFtcDpTLnByb3AoImNvbG9yQ2xhbXAiKX0sb2Zmc2V0OlMucHJvcCgib2Zmc2V0IiksY291bnQ6Uy5wcm9wKCJjb3VudCIpfSk7ZnVuY3Rpb24gUCh0KXtyPXQubW9kZWwsbj10LnZpZXdNb2RlbCxwPW4uZGltZW5zaW9ucy5zbGljZSgpLGQ9cFswXT9wWzBdLnZhbHVlcy5sZW5ndGg6MDt2YXIgZT1yLmxpbmVzLGk9VD9lLmNvbG9yLm1hcChmdW5jdGlvbih0LHIpe3JldHVybiByL2UuY29sb3IubGVuZ3RofSk6ZS5jb2xvcixhPU1hdGgubWF4KDEvMjU1LE1hdGgucG93KDEvaS5sZW5ndGgsMS8zKSksbz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuLGk9ZS5sZW5ndGgsYT1bXSxvPTA7bzx0O28rKylmb3IodmFyIHM9MDtzPGY7cysrKWEucHVzaChzPGk/ZVtzXS5wYWRkZWRVbml0VmFsdWVzW29dOnM9PT1mLTE/KG49cltvXSxNYXRoLm1heChjLE1hdGgubWluKDEtYyxuKSkpOnM+PWYtND9rKG8sZi0yLXMpOi41KTtyZXR1cm4gYX0oZCxwLGkpOyFmdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPTA7bjwxNjtuKyspdFsicCIrbi50b1N0cmluZygxNildKE0oZSxyLG4pKX0oQyxkLG8pLEw9Uy50ZXh0dXJlKGwuZXh0ZW5kRmxhdCh7ZGF0YTpmdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPVtdLGk9MDtpPDI1NjtpKyspe3ZhciBhPXQoaS8yNTUpO24ucHVzaCgoZT92OmEpLmNvbmNhdChyKSl9cmV0dXJuIG59KHIudW5pdFRvQ29sb3IsQSxNYXRoLnJvdW5kKDI1NSooQT9hOjEpKSl9LGIpKX12YXIgST1bMCwxXTt2YXIgTz1bXTtmdW5jdGlvbiBEKHQsZSxuLGksYSxvLHMsYyx1LGgsZil7dmFyIHAsZCxnLG0sdj1bdCxlXSx5PVswLDFdLm1hcChmdW5jdGlvbigpe3JldHVyblswLDEsMiwzXS5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEZsb2F0MzJBcnJheSgxNil9KX0pO2ZvcihwPTA7cDwyO3ArKylmb3IobT12W3BdLGQ9MDtkPDQ7ZCsrKWZvcihnPTA7ZzwxNjtnKyspeVtwXVtkXVtnXT1nKzE2KmQ9PT1tPzE6MDt2YXIgeD1yLmxpbmVzLmNhbnZhc092ZXJkcmFnLGI9ci5kb21haW4sXz1yLmNhbnZhc1dpZHRoLHc9ci5jYW52YXNIZWlnaHQ7cmV0dXJuIGwuZXh0ZW5kRmxhdCh7a2V5OnMscmVzb2x1dGlvbjpbXyx3XSx2aWV3Qm94UG9zaXRpb246W24reCxpXSx2aWV3Qm94U2l6ZTpbYSxvXSxpOnQsaWk6ZSxkaW0xQTp5WzBdWzBdLGRpbTFCOnlbMF1bMV0sZGltMUM6eVswXVsyXSxkaW0xRDp5WzBdWzNdLGRpbTJBOnlbMV1bMF0sZGltMkI6eVsxXVsxXSxkaW0yQzp5WzFdWzJdLGRpbTJEOnlbMV1bM10sY29sb3JDbGFtcDpJLHNjaXNzb3JYOihjPT09dT8wOm4reCkrKHIucGFkLmwteCkrci5sYXlvdXRXaWR0aCpiLnhbMF0sc2Npc3NvcldpZHRoOihjPT09aD9fLW4reDphKy41KSsoYz09PXU/bit4OjApLHNjaXNzb3JZOmkrci5wYWQuYityLmxheW91dEhlaWdodCpiLnlbMF0sc2Npc3NvckhlaWdodDpvLHZpZXdwb3J0WDpyLnBhZC5sLXgrci5sYXlvdXRXaWR0aCpiLnhbMF0sdmlld3BvcnRZOnIucGFkLmIrci5sYXlvdXRIZWlnaHQqYi55WzBdLHZpZXdwb3J0V2lkdGg6Xyx2aWV3cG9ydEhlaWdodDp3fSxmKX1yZXR1cm57c2V0Q29sb3JEb21haW46ZnVuY3Rpb24odCl7SVswXT10WzBdLElbMV09dFsxXX0scmVuZGVyOmZ1bmN0aW9uKHQsZSxuKXt2YXIgaSxhLG8scz10Lmxlbmd0aCxsPTEvMCxjPS0xLzA7Zm9yKGk9MDtpPHM7aSsrKXRbaV0uZGltMi5jYW52YXNYPmMmJihjPXRbaV0uZGltMi5jYW52YXNYLG89aSksdFtpXS5kaW0xLmNhbnZhc1g8bCYmKGw9dFtpXS5kaW0xLmNhbnZhc1gsYT1pKTswPT09cyYmXyhTLDAsMCxyLmNhbnZhc1dpZHRoLHIuY2FudmFzSGVpZ2h0KTt2YXIgZj1BP3t9OmZ1bmN0aW9uKCl7dmFyIHQsZSxyLG49WzAsMV0ubWFwKGZ1bmN0aW9uKCl7cmV0dXJuWzAsMSwyLDNdLm1hcChmdW5jdGlvbigpe3JldHVybiBuZXcgRmxvYXQzMkFycmF5KDE2KX0pfSk7Zm9yKHQ9MDt0PDI7dCsrKWZvcihlPTA7ZTw0O2UrKylmb3Iocj0wO3I8MTY7cisrKXt2YXIgaSxhPXIrMTYqZTtpPWE8cC5sZW5ndGg/cFthXS5icnVzaC5maWx0ZXIuZ2V0Qm91bmRzKClbdF06dCxuW3RdW2VdW3JdPWkrKDIqdC0xKSp1fWZ1bmN0aW9uIG8odCxlKXt2YXIgcj1oLTE7cmV0dXJuW01hdGgubWF4KDAsTWF0aC5mbG9vcihlWzBdKnIpKSxNYXRoLm1pbihyLE1hdGguY2VpbChlWzFdKnIpKV19Zm9yKHZhciBzPUFycmF5LmFwcGx5KG51bGwsbmV3IEFycmF5KGgqbSkpLm1hcChmdW5jdGlvbigpe3JldHVybiAyNTV9KSxsPTA7bDxwLmxlbmd0aDtsKyspe3ZhciBjPWwlZyxmPShsLWMpL2csZD1NYXRoLnBvdygyLGMpLHY9cFtsXSx4PXYuYnJ1c2guZmlsdGVyLmdldCgpO2lmKCEoeC5sZW5ndGg8MikpZm9yKHZhciBiPW8oMCx4WzBdKVsxXSxfPTE7Xzx4Lmxlbmd0aDtfKyspe2Zvcih2YXIgdz1vKDAseFtfXSksaz1iKzE7azx3WzBdO2srKylzW2sqbStmXSY9fmQ7Yj1NYXRoLm1heChiLHdbMV0pfX12YXIgTT17c2hhcGU6W20saF0sZm9ybWF0OiJhbHBoYSIsdHlwZToidWludDgiLG1hZzoibmVhcmVzdCIsbWluOiJuZWFyZXN0IixkYXRhOnN9O3JldHVybiB5P3koTSk6eT1TLnRleHR1cmUoTSkse21hc2tUZXh0dXJlOnksbWFza0hlaWdodDpoLGxvQTpuWzBdWzBdLGxvQjpuWzBdWzFdLGxvQzpuWzBdWzJdLGxvRDpuWzBdWzNdLGhpQTpuWzFdWzBdLGhpQjpuWzFdWzFdLGhpQzpuWzFdWzJdLGhpRDpuWzFdWzNdfX0oKTtmb3IoaT0wO2k8cztpKyspe3ZhciB2PXRbaV0seD12LmRpbTEsYj14LmNyb3NzZmlsdGVyRGltZW5zaW9uSW5kZXgsaz12LmNhbnZhc1gsTT12LmNhbnZhc1ksVD12LmRpbTIuY3Jvc3NmaWx0ZXJEaW1lbnNpb25JbmRleCxDPXYucGFuZWxTaXplWCxMPXYucGFuZWxTaXplWSxQPWsrQztpZihlfHwhT1tiXXx8T1tiXVswXSE9PWt8fE9bYl1bMV0hPT1QKXtPW2JdPVtrLFBdO3ZhciBJPUQoYixULGssTSxDLEwseC5jcm9zc2ZpbHRlckRpbWVuc2lvbkluZGV4LGksYSxvLGYpO0UuY2xlYXJPbmx5PW4sdyhTLHosRSxlP3IubGluZXMuYmxvY2tMaW5lQ291bnQ6ZCxkLEkpfX19LHJlYWRQaXhlbDpmdW5jdGlvbih0LGUpe3JldHVybiBTLnJlYWQoe3g6dCx5OmUsd2lkdGg6MSxoZWlnaHQ6MSxkYXRhOnh9KSx4fSxyZWFkUGl4ZWxzOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPW5ldyBVaW50OEFycmF5KDQqcipuKTtyZXR1cm4gUy5yZWFkKHt4OnQseTplLHdpZHRoOnIsaGVpZ2h0Om4sZGF0YTppfSksaX0sZGVzdHJveTpmdW5jdGlvbigpe2Zvcih2YXIgZSBpbiB0LnN0eWxlWyJwb2ludGVyLWV2ZW50cyJdPSJub25lIixMLmRlc3Ryb3koKSx5JiZ5LmRlc3Ryb3koKSxDKUNbZV0uZGVzdHJveSgpfSx1cGRhdGU6UH19fSx7Ii4uLy4uL2xpYiI6Njg0LGdsc2xpZnk6Mzc3fV0sOTg3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXt2YXIgaSxhO2ZvcihufHwobj0xLzApLGk9MDtpPGUubGVuZ3RoO2krKykoYT1lW2ldKS52aXNpYmxlJiYobj1NYXRoLm1pbihuLGFbcl0ubGVuZ3RoKSk7Zm9yKG49PT0xLzAmJihuPTApLHQuX2xlbmd0aD1uLGk9MDtpPGUubGVuZ3RoO2krKykoYT1lW2ldKS52aXNpYmxlJiYoYS5fbGVuZ3RoPW4pO3JldHVybiBufX0se31dLDk4ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2xpbmVzIiksaT10KCIuL2NvbnN0YW50cyIpLGE9dCgiLi4vLi4vbGliIiksbz10KCJkMyIpLHM9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksbD10KCIuLi8uLi9saWIvZ3VwIiksYz1sLmtleUZ1bix1PWwucmVwZWF0LGg9bC51bndyYXAsZj10KCIuL2F4aXNicnVzaCIpO2Z1bmN0aW9uIHAodCl7cmV0dXJuISgidmlzaWJsZSJpbiB0KXx8dC52aXNpYmxlfWZ1bmN0aW9uIGQodCl7dmFyIGU9dC5yYW5nZT90LnJhbmdlWzBdOmEuYWdnTnVtcyhNYXRoLm1pbixudWxsLHQudmFsdWVzLHQuX2xlbmd0aCkscj10LnJhbmdlP3QucmFuZ2VbMV06YS5hZ2dOdW1zKE1hdGgubWF4LG51bGwsdC52YWx1ZXMsdC5fbGVuZ3RoKTtyZXR1cm4haXNOYU4oZSkmJmlzRmluaXRlKGUpfHwoZT0wKSwhaXNOYU4ocikmJmlzRmluaXRlKHIpfHwocj0wKSxlPT09ciYmKDA9PT1lPyhlLT0xLHIrPTEpOihlKj0uOSxyKj0xLjEpKSxbZSxyXX1mdW5jdGlvbiBnKHQpe3JldHVybiB0LmRpbWVuc2lvbnMuc29tZShmdW5jdGlvbih0KXtyZXR1cm4gdC5icnVzaC5maWx0ZXJTcGVjaWZpZWR9KX1mdW5jdGlvbiBtKHQsZSxyKXt2YXIgbj1oKGUpLHM9bi50cmFjZSxsPW4ubGluZUNvbG9yLGM9bi5jc2NhbGUsdT1zLmxpbmUsZj1zLmRvbWFpbixnPXMuZGltZW5zaW9ucyxtPXQud2lkdGgsdj1zLmxhYmVsZm9udCx5PXMudGlja2ZvbnQseD1zLnJhbmdlZm9udCxiPWEuZXh0ZW5kRGVlcE5vQXJyYXlzKHt9LHUse2NvbG9yOmwubWFwKG8uc2NhbGUubGluZWFyKCkuZG9tYWluKGQoe3ZhbHVlczpsLHJhbmdlOlt1LmNtaW4sdS5jbWF4XSxfbGVuZ3RoOnMuX2xlbmd0aH0pKSksYmxvY2tMaW5lQ291bnQ6aS5ibG9ja0xpbmVDb3VudCxjYW52YXNPdmVyZHJhZzppLm92ZXJkcmFnKmkuY2FudmFzUGl4ZWxSYXRpb30pLF89TWF0aC5mbG9vcihtKihmLnhbMV0tZi54WzBdKSksdz1NYXRoLmZsb29yKHQuaGVpZ2h0KihmLnlbMV0tZi55WzBdKSksaz10Lm1hcmdpbnx8e2w6ODAscjo4MCx0OjEwMCxiOjgwfSxNPV8sQT13O3JldHVybntrZXk6cixjb2xDb3VudDpnLmZpbHRlcihwKS5sZW5ndGgsZGltZW5zaW9uczpnLHRpY2tEaXN0YW5jZTppLnRpY2tEaXN0YW5jZSx1bml0VG9Db2xvcjpmdW5jdGlvbih0KXt2YXIgZT10Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdFswXX0pLHI9dC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIG8ucmdiKHRbMV0pfSksbj0icmdiIi5zcGxpdCgiIikubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBvLnNjYWxlLmxpbmVhcigpLmNsYW1wKCEwKS5kb21haW4oZSkucmFuZ2Uoci5tYXAoKG49dCxmdW5jdGlvbih0KXtyZXR1cm4gdFtuXX0pKSk7dmFyIG59KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIG4ubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlKHQpfSl9fShjKSxsaW5lczpiLGxhYmVsRm9udDp2LHRpY2tGb250OnkscmFuZ2VGb250OngsbGF5b3V0V2lkdGg6bSxsYXlvdXRIZWlnaHQ6dC5oZWlnaHQsZG9tYWluOmYsdHJhbnNsYXRlWDpmLnhbMF0qbSx0cmFuc2xhdGVZOnQuaGVpZ2h0LWYueVsxXSp0LmhlaWdodCxwYWQ6ayxjYW52YXNXaWR0aDpNKmkuY2FudmFzUGl4ZWxSYXRpbysyKmIuY2FudmFzT3ZlcmRyYWcsY2FudmFzSGVpZ2h0OkEqaS5jYW52YXNQaXhlbFJhdGlvLHdpZHRoOk0saGVpZ2h0OkEsY2FudmFzUGl4ZWxSYXRpbzppLmNhbnZhc1BpeGVsUmF0aW99fWZ1bmN0aW9uIHYodCxlLHIpe3ZhciBuPXIud2lkdGgscz1yLmhlaWdodCxsPXIuZGltZW5zaW9ucyxjPXIuY2FudmFzUGl4ZWxSYXRpbyx1PWZ1bmN0aW9uKHQpe3JldHVybiBuKnQvTWF0aC5tYXgoMSxyLmNvbENvdW50LTEpfSxoPWkudmVydGljYWxQYWRkaW5nL3MsbT1mdW5jdGlvbih0LGUpe3JldHVybiBvLnNjYWxlLmxpbmVhcigpLnJhbmdlKFtlLHQtZV0pfShzLGkudmVydGljYWxQYWRkaW5nKSx2PXtrZXk6ci5rZXkseFNjYWxlOnUsbW9kZWw6cixpbkJydXNoRHJhZzohMX0seT17fTtyZXR1cm4gdi5kaW1lbnNpb25zPWwuZmlsdGVyKHApLm1hcChmdW5jdGlvbihuLGwpe3ZhciBwPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG8uc2NhbGUubGluZWFyKCkuZG9tYWluKGQodCkpLnJhbmdlKFtlLDEtZV0pfShuLGgpLHg9eVtuLmxhYmVsXTt5W24ubGFiZWxdPSh4fHwwKSsxO3ZhciBiPW4ubGFiZWwrKHg/Il9fIit4OiIiKSxfPW4uY29uc3RyYWludHJhbmdlLHc9XyYmXy5sZW5ndGg7dyYmIUFycmF5LmlzQXJyYXkoX1swXSkmJihfPVtfXSk7dmFyIGs9dz9fLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAocCl9KTpbWzAsMV1dLE09bi52YWx1ZXM7TS5sZW5ndGg+bi5fbGVuZ3RoJiYoTT1NLnNsaWNlKDAsbi5fbGVuZ3RoKSk7dmFyIEEsVD1uLnRpY2t2YWxzO2Z1bmN0aW9uIFModCxlKXtyZXR1cm57dmFsOnQsdGV4dDpBW2VdfX1mdW5jdGlvbiBFKHQsZSl7cmV0dXJuIHQudmFsLWUudmFsfWlmKEFycmF5LmlzQXJyYXkoVCkmJlQubGVuZ3RoKXtBPW4udGlja3RleHQsQXJyYXkuaXNBcnJheShBKSYmQS5sZW5ndGg/QS5sZW5ndGg+VC5sZW5ndGg/QT1BLnNsaWNlKDAsVC5sZW5ndGgpOlQubGVuZ3RoPkEubGVuZ3RoJiYoVD1ULnNsaWNlKDAsQS5sZW5ndGgpKTpBPVQubWFwKG8uZm9ybWF0KG4udGlja2Zvcm1hdCkpO2Zvcih2YXIgQz0xO0M8VC5sZW5ndGg7QysrKWlmKFRbQ108VFtDLTFdKXtmb3IodmFyIEw9VC5tYXAoUykuc29ydChFKSx6PTA7ejxULmxlbmd0aDt6KyspVFt6XT1MW3pdLnZhbCxBW3pdPUxbel0udGV4dDticmVha319ZWxzZSBUPXZvaWQgMDtyZXR1cm57a2V5OmIsbGFiZWw6bi5sYWJlbCx0aWNrRm9ybWF0Om4udGlja2Zvcm1hdCx0aWNrdmFsczpULHRpY2t0ZXh0OkEsb3JkaW5hbDohIVQsbXVsdGlzZWxlY3Q6bi5tdWx0aXNlbGVjdCx4SW5kZXg6bCxjcm9zc2ZpbHRlckRpbWVuc2lvbkluZGV4OmwsdmlzaWJsZUluZGV4Om4uX2luZGV4LGhlaWdodDpzLHZhbHVlczpNLHBhZGRlZFVuaXRWYWx1ZXM6TS5tYXAocCksdW5pdFRpY2t2YWxzOlQmJlQubWFwKHApLHhTY2FsZTp1LHg6dShsKSxjYW52YXNYOnUobCkqYyx1bml0VG9QYWRkZWRQeDptLGRvbWFpblNjYWxlOmZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGEscyxsPWQocik7cmV0dXJuIG4/by5zY2FsZS5vcmRpbmFsKCkuZG9tYWluKG4ubWFwKChhPW8uZm9ybWF0KHIudGlja2Zvcm1hdCkscz1pLHM/ZnVuY3Rpb24odCxlKXt2YXIgcj1zW2VdO3JldHVybiBudWxsPT1yP2EodCk6cn06YSkpKS5yYW5nZShuLm1hcChmdW5jdGlvbihyKXt2YXIgbj0oci1sWzBdKS8obFsxXS1sWzBdKTtyZXR1cm4gdC1lK24qKDIqZS10KX0pKTpvLnNjYWxlLmxpbmVhcigpLmRvbWFpbihsKS5yYW5nZShbdC1lLGVdKX0ocyxpLnZlcnRpY2FsUGFkZGluZyxuLFQsQSksb3JkaW5hbFNjYWxlOmZ1bmN0aW9uKHQpe2lmKHQudGlja3ZhbHMpe3ZhciBlPWQodCk7cmV0dXJuIG8uc2NhbGUub3JkaW5hbCgpLmRvbWFpbih0LnRpY2t2YWxzKS5yYW5nZSh0LnRpY2t2YWxzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4odC1lWzBdKS8oZVsxXS1lWzBdKX0pKX19KG4pLHBhcmVudDp2LG1vZGVsOnIsYnJ1c2g6Zi5tYWtlQnJ1c2godCx3LGssZnVuY3Rpb24oKXt0LmxpbmVQaWNrQWN0aXZlKCExKX0sZnVuY3Rpb24oKXt2YXIgZT12O2UuZm9jdXNMYXllciYmZS5mb2N1c0xheWVyLnJlbmRlcihlLnBhbmVscywhMCk7dmFyIHI9ZyhlKTshdC5jb250ZXh0U2hvd24oKSYmcj8oZS5jb250ZXh0TGF5ZXImJmUuY29udGV4dExheWVyLnJlbmRlcihlLnBhbmVscywhMCksdC5jb250ZXh0U2hvd24oITApKTp0LmNvbnRleHRTaG93bigpJiYhciYmKGUuY29udGV4dExheWVyJiZlLmNvbnRleHRMYXllci5yZW5kZXIoZS5wYW5lbHMsITAsITApLHQuY29udGV4dFNob3duKCExKSl9LGZ1bmN0aW9uKHIpe3ZhciBpPXY7aWYoaS5mb2N1c0xheWVyLnJlbmRlcihpLnBhbmVscywhMCksaS5waWNrTGF5ZXImJmkucGlja0xheWVyLnJlbmRlcihpLnBhbmVscywhMCksdC5saW5lUGlja0FjdGl2ZSghMCksZSYmZS5maWx0ZXJDaGFuZ2VkKXt2YXIgbz1wLmludmVydCxzPXIubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1hcChvKS5zb3J0KGEuc29ydGVyQXNjKX0pLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXS1lWzBdfSk7ZS5maWx0ZXJDaGFuZ2VkKGkua2V5LG4uX2luZGV4LHMpfX0pfX0pLHZ9ZnVuY3Rpb24geSh0KXt0LmNsYXNzZWQoaS5jbi5heGlzRXh0ZW50VGV4dCwhMCkuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5zdHlsZSgiY3Vyc29yIiwiZGVmYXVsdCIpLnN0eWxlKCJ1c2VyLXNlbGVjdCIsIm5vbmUiKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbCxwLGQpe3ZhciB4LGIsXz0oeD0hMCxiPSExLHtsaW5lUGlja0FjdGl2ZTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD94PSEhdDp4fSxjb250ZXh0U2hvd246ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/Yj0hIXQ6Yn19KSx3PWwuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiBoKHQpLnRyYWNlLnZpc2libGV9KS5tYXAobS5iaW5kKDAscCkpLm1hcCh2LmJpbmQoMCxfLGQpKTtyLmVhY2goZnVuY3Rpb24odCxlKXtyZXR1cm4gYS5leHRlbmRGbGF0KHQsd1tlXSl9KTt2YXIgaz1yLnNlbGVjdEFsbCgiLmdsLWNhbnZhcyIpLmVhY2goZnVuY3Rpb24odCl7dC52aWV3TW9kZWw9d1swXSx0Lm1vZGVsPXQudmlld01vZGVsP3Qudmlld01vZGVsLm1vZGVsOm51bGx9KSxNPW51bGw7ay5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQucGlja30pLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImF1dG8iKS5vbigibW91c2Vtb3ZlIixmdW5jdGlvbih0KXtpZihfLmxpbmVQaWNrQWN0aXZlKCkmJnQubGluZUxheWVyJiZkJiZkLmhvdmVyKXt2YXIgZT1vLmV2ZW50LHI9dGhpcy53aWR0aCxuPXRoaXMuaGVpZ2h0LGk9by5tb3VzZSh0aGlzKSxhPWlbMF0scz1pWzFdO2lmKGE8MHx8czwwfHxhPj1yfHxzPj1uKXJldHVybjt2YXIgbD10LmxpbmVMYXllci5yZWFkUGl4ZWwoYSxuLTEtcyksYz0wIT09bFszXSx1PWM/bFsyXSsyNTYqKGxbMV0rMjU2KmxbMF0pOm51bGwsaD17eDphLHk6cyxjbGllbnRYOmUuY2xpZW50WCxjbGllbnRZOmUuY2xpZW50WSxkYXRhSW5kZXg6dC5tb2RlbC5rZXksY3VydmVOdW1iZXI6dX07dSE9PU0mJihjP2QuaG92ZXIoaCk6ZC51bmhvdmVyJiZkLnVuaG92ZXIoaCksTT11KX19KSxrLnN0eWxlKCJvcGFjaXR5IixmdW5jdGlvbih0KXtyZXR1cm4gdC5waWNrPy4wMToxfSksZS5zdHlsZSgiYmFja2dyb3VuZCIsInJnYmEoMjU1LCAyNTUsIDI1NSwgMCkiKTt2YXIgQT1lLnNlbGVjdEFsbCgiLiIraS5jbi5wYXJjb29yZHMpLmRhdGEodyxjKTtBLmV4aXQoKS5yZW1vdmUoKSxBLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChpLmNuLnBhcmNvb3JkcywhMCkuc3R5bGUoInNoYXBlLXJlbmRlcmluZyIsImNyaXNwRWRnZXMiKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJub25lIiksQS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKHQpe3JldHVybiJ0cmFuc2xhdGUoIit0Lm1vZGVsLnRyYW5zbGF0ZVgrIiwiK3QubW9kZWwudHJhbnNsYXRlWSsiKSJ9KTt2YXIgVD1BLnNlbGVjdEFsbCgiLiIraS5jbi5wYXJjb29yZHNDb250cm9sVmlldykuZGF0YSh1LGMpO1QuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKGkuY24ucGFyY29vcmRzQ29udHJvbFZpZXcsITApLFQuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbih0KXtyZXR1cm4idHJhbnNsYXRlKCIrdC5tb2RlbC5wYWQubCsiLCIrdC5tb2RlbC5wYWQudCsiKSJ9KTt2YXIgUz1ULnNlbGVjdEFsbCgiLiIraS5jbi55QXhpcykuZGF0YShmdW5jdGlvbih0KXtyZXR1cm4gdC5kaW1lbnNpb25zfSxjKTtmdW5jdGlvbiBFKHQsZSl7Zm9yKHZhciByPWUucGFuZWxzfHwoZS5wYW5lbHM9W10pLG49dC5kYXRhKCksaT1uLmxlbmd0aC0xLGE9MDthPGk7YSsrKXt2YXIgbz1yW2FdfHwoclthXT17fSkscz1uW2FdLGw9blthKzFdO28uZGltMT1zLG8uZGltMj1sLG8uY2FudmFzWD1zLmNhbnZhc1gsby5wYW5lbFNpemVYPWwuY2FudmFzWC1zLmNhbnZhc1gsby5wYW5lbFNpemVZPWUubW9kZWwuY2FudmFzSGVpZ2h0LG8ueT0wLG8uY2FudmFzWT0wfX1TLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChpLmNuLnlBeGlzLCEwKSxULmVhY2goZnVuY3Rpb24odCl7RShTLHQpfSksay5lYWNoKGZ1bmN0aW9uKHQpe3Qudmlld01vZGVsJiYodC5saW5lTGF5ZXI/dC5saW5lTGF5ZXIudXBkYXRlKHQpOnQubGluZUxheWVyPW4odGhpcyx0KSx0LnZpZXdNb2RlbFt0LmtleV09dC5saW5lTGF5ZXIsdC5saW5lTGF5ZXIucmVuZGVyKHQudmlld01vZGVsLnBhbmVscywhdC5jb250ZXh0KSl9KSxTLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24odCl7cmV0dXJuInRyYW5zbGF0ZSgiK3QueFNjYWxlKHQueEluZGV4KSsiLCAwKSJ9KSxTLmNhbGwoby5iZWhhdmlvci5kcmFnKCkub3JpZ2luKGZ1bmN0aW9uKHQpe3JldHVybiB0fSkub24oImRyYWciLGZ1bmN0aW9uKHQpe3ZhciBlPXQucGFyZW50O18ubGluZVBpY2tBY3RpdmUoITEpLHQueD1NYXRoLm1heCgtaS5vdmVyZHJhZyxNYXRoLm1pbih0Lm1vZGVsLndpZHRoK2kub3ZlcmRyYWcsby5ldmVudC54KSksdC5jYW52YXNYPXQueCp0Lm1vZGVsLmNhbnZhc1BpeGVsUmF0aW8sUy5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQueC1lLnh9KS5lYWNoKGZ1bmN0aW9uKGUscil7ZS54SW5kZXg9cixlLng9dD09PWU/ZS54OmUueFNjYWxlKGUueEluZGV4KSxlLmNhbnZhc1g9ZS54KmUubW9kZWwuY2FudmFzUGl4ZWxSYXRpb30pLEUoUyxlKSxTLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gMCE9PU1hdGguYWJzKHQueEluZGV4LWUueEluZGV4KX0pLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24odCl7cmV0dXJuInRyYW5zbGF0ZSgiK3QueFNjYWxlKHQueEluZGV4KSsiLCAwKSJ9KSxvLnNlbGVjdCh0aGlzKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit0LngrIiwgMCkiKSxTLmVhY2goZnVuY3Rpb24ocixuLGkpe2k9PT10LnBhcmVudC5rZXkmJihlLmRpbWVuc2lvbnNbbl09cil9KSxlLmNvbnRleHRMYXllciYmZS5jb250ZXh0TGF5ZXIucmVuZGVyKGUucGFuZWxzLCExLCFnKGUpKSxlLmZvY3VzTGF5ZXIucmVuZGVyJiZlLmZvY3VzTGF5ZXIucmVuZGVyKGUucGFuZWxzKX0pLm9uKCJkcmFnZW5kIixmdW5jdGlvbih0KXt2YXIgZT10LnBhcmVudDt0Lng9dC54U2NhbGUodC54SW5kZXgpLHQuY2FudmFzWD10LngqdC5tb2RlbC5jYW52YXNQaXhlbFJhdGlvLEUoUyxlKSxvLnNlbGVjdCh0aGlzKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKHQpe3JldHVybiJ0cmFuc2xhdGUoIit0LngrIiwgMCkifSksZS5jb250ZXh0TGF5ZXImJmUuY29udGV4dExheWVyLnJlbmRlcihlLnBhbmVscywhMSwhZyhlKSksZS5mb2N1c0xheWVyJiZlLmZvY3VzTGF5ZXIucmVuZGVyKGUucGFuZWxzKSxlLnBpY2tMYXllciYmZS5waWNrTGF5ZXIucmVuZGVyKGUucGFuZWxzLCEwKSxfLmxpbmVQaWNrQWN0aXZlKCEwKSxkJiZkLmF4ZXNNb3ZlZCYmZC5heGVzTW92ZWQoZS5rZXksZS5kaW1lbnNpb25zLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5jcm9zc2ZpbHRlckRpbWVuc2lvbkluZGV4fSkpfSkpLFMuZXhpdCgpLnJlbW92ZSgpO3ZhciBDPVMuc2VsZWN0QWxsKCIuIitpLmNuLmF4aXNPdmVybGF5cykuZGF0YSh1LGMpO0MuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKGkuY24uYXhpc092ZXJsYXlzLCEwKSxDLnNlbGVjdEFsbCgiLiIraS5jbi5heGlzKS5yZW1vdmUoKTt2YXIgTD1DLnNlbGVjdEFsbCgiLiIraS5jbi5heGlzKS5kYXRhKHUsYyk7TC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoaS5jbi5heGlzLCEwKSxMLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9dC5tb2RlbC5oZWlnaHQvdC5tb2RlbC50aWNrRGlzdGFuY2Uscj10LmRvbWFpblNjYWxlLG49ci5kb21haW4oKTtvLnNlbGVjdCh0aGlzKS5jYWxsKG8uc3ZnLmF4aXMoKS5vcmllbnQoImxlZnQiKS50aWNrU2l6ZSg0KS5vdXRlclRpY2tTaXplKDIpLnRpY2tzKGUsdC50aWNrRm9ybWF0KS50aWNrVmFsdWVzKHQub3JkaW5hbD9uOm51bGwpLnRpY2tGb3JtYXQodC5vcmRpbmFsP2Z1bmN0aW9uKHQpe3JldHVybiB0fTpudWxsKS5zY2FsZShyKSkscy5mb250KEwuc2VsZWN0QWxsKCJ0ZXh0IiksdC5tb2RlbC50aWNrRm9udCl9KSxMLnNlbGVjdEFsbCgiLmRvbWFpbiwgLnRpY2s+bGluZSIpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigic3Ryb2tlIiwiYmxhY2siKS5hdHRyKCJzdHJva2Utb3BhY2l0eSIsLjI1KS5hdHRyKCJzdHJva2Utd2lkdGgiLCIxcHgiKSxMLnNlbGVjdEFsbCgidGV4dCIpLnN0eWxlKCJ0ZXh0LXNoYWRvdyIsIjFweCAxcHggMXB4ICNmZmYsIC0xcHggLTFweCAxcHggI2ZmZiwgMXB4IC0xcHggMXB4ICNmZmYsIC0xcHggMXB4IDFweCAjZmZmIikuc3R5bGUoImN1cnNvciIsImRlZmF1bHQiKS5zdHlsZSgidXNlci1zZWxlY3QiLCJub25lIik7dmFyIHo9Qy5zZWxlY3RBbGwoIi4iK2kuY24uYXhpc0hlYWRpbmcpLmRhdGEodSxjKTt6LmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChpLmNuLmF4aXNIZWFkaW5nLCEwKTt2YXIgUD16LnNlbGVjdEFsbCgiLiIraS5jbi5heGlzVGl0bGUpLmRhdGEodSxjKTtQLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZChpLmNuLmF4aXNUaXRsZSwhMCkuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5zdHlsZSgiY3Vyc29yIiwiZXctcmVzaXplIikuc3R5bGUoInVzZXItc2VsZWN0Iiwibm9uZSIpLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImF1dG8iKSxQLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLCIrLWkuYXhpc1RpdGxlT2Zmc2V0KyIpIikudGV4dChmdW5jdGlvbih0KXtyZXR1cm4gdC5sYWJlbH0pLmVhY2goZnVuY3Rpb24odCl7cy5mb250KG8uc2VsZWN0KHRoaXMpLHQubW9kZWwubGFiZWxGb250KX0pO3ZhciBJPUMuc2VsZWN0QWxsKCIuIitpLmNuLmF4aXNFeHRlbnQpLmRhdGEodSxjKTtJLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChpLmNuLmF4aXNFeHRlbnQsITApO3ZhciBPPUkuc2VsZWN0QWxsKCIuIitpLmNuLmF4aXNFeHRlbnRUb3ApLmRhdGEodSxjKTtPLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChpLmNuLmF4aXNFeHRlbnRUb3AsITApLE8uYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDAsIistaS5heGlzRXh0ZW50T2Zmc2V0KyIpIik7dmFyIEQ9Ty5zZWxlY3RBbGwoIi4iK2kuY24uYXhpc0V4dGVudFRvcFRleHQpLmRhdGEodSxjKTtmdW5jdGlvbiBSKHQsZSl7aWYodC5vcmRpbmFsKXJldHVybiIiO3ZhciByPXQuZG9tYWluU2NhbGUuZG9tYWluKCk7cmV0dXJuIG8uZm9ybWF0KHQudGlja0Zvcm1hdCkocltlP3IubGVuZ3RoLTE6MF0pfUQuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5jbGFzc2VkKGkuY24uYXhpc0V4dGVudFRvcFRleHQsITApLmNhbGwoeSksRC50ZXh0KGZ1bmN0aW9uKHQpe3JldHVybiBSKHQsITApfSkuZWFjaChmdW5jdGlvbih0KXtzLmZvbnQoby5zZWxlY3QodGhpcyksdC5tb2RlbC5yYW5nZUZvbnQpfSk7dmFyIEI9SS5zZWxlY3RBbGwoIi4iK2kuY24uYXhpc0V4dGVudEJvdHRvbSkuZGF0YSh1LGMpO0IuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKGkuY24uYXhpc0V4dGVudEJvdHRvbSwhMCksQi5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKHQpe3JldHVybiJ0cmFuc2xhdGUoMCwiKyh0Lm1vZGVsLmhlaWdodCtpLmF4aXNFeHRlbnRPZmZzZXQpKyIpIn0pO3ZhciBGPUIuc2VsZWN0QWxsKCIuIitpLmNuLmF4aXNFeHRlbnRCb3R0b21UZXh0KS5kYXRhKHUsYyk7Ri5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmNsYXNzZWQoaS5jbi5heGlzRXh0ZW50Qm90dG9tVGV4dCwhMCkuYXR0cigiZHkiLCIwLjc1ZW0iKS5jYWxsKHkpLEYudGV4dChmdW5jdGlvbih0KXtyZXR1cm4gUih0KX0pLmVhY2goZnVuY3Rpb24odCl7cy5mb250KG8uc2VsZWN0KHRoaXMpLHQubW9kZWwucmFuZ2VGb250KX0pLGYuZW5zdXJlQXhpc0JydXNoKEMpfX0seyIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjU4MywiLi4vLi4vbGliIjo2ODQsIi4uLy4uL2xpYi9ndXAiOjY4MSwiLi9heGlzYnJ1c2giOjk4MCwiLi9jb25zdGFudHMiOjk4MywiLi9saW5lcyI6OTg2LGQzOjE0N31dLDk4OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL3BhcmNvb3JkcyIpLGk9dCgiLi4vLi4vbGliL3ByZXBhcmVfcmVnbCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuX2Z1bGxMYXlvdXQsYT1yLl90b3BwYXBlcixvPXIuX3BhcGVyZGl2LHM9ci5fZ2xjb250YWluZXI7aWYoaSh0KSl7dmFyIGw9e30sYz17fSx1PXIuX3NpemU7ZS5mb3JFYWNoKGZ1bmN0aW9uKGUscil7bFtyXT10LmRhdGFbcl0uZGltZW5zaW9ucyxjW3JdPXQuZGF0YVtyXS5kaW1lbnNpb25zLnNsaWNlKCl9KTtuKG8sYSxzLGUse3dpZHRoOnUudyxoZWlnaHQ6dS5oLG1hcmdpbjp7dDp1LnQscjp1LnIsYjp1LmIsbDp1Lmx9fSx7ZmlsdGVyQ2hhbmdlZDpmdW5jdGlvbihlLHIsbil7dmFyIGk9Y1tlXVtyXSxhPW4ubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnNsaWNlKCl9KTthLmxlbmd0aD8oMT09PWEubGVuZ3RoJiYoYT1hWzBdKSxpLmNvbnN0cmFpbnRyYW5nZT1hLGE9W2FdKTooZGVsZXRlIGkuY29uc3RyYWludHJhbmdlLGE9bnVsbCk7dmFyIG89e307b1siZGltZW5zaW9uc1siK3IrIl0uY29uc3RyYWludHJhbmdlIl09YSx0LmVtaXQoInBsb3RseV9yZXN0eWxlIixbbyxbZV1dKX0saG92ZXI6ZnVuY3Rpb24oZSl7dC5lbWl0KCJwbG90bHlfaG92ZXIiLGUpfSx1bmhvdmVyOmZ1bmN0aW9uKGUpe3QuZW1pdCgicGxvdGx5X3VuaG92ZXIiLGUpfSxheGVzTW92ZWQ6ZnVuY3Rpb24oZSxyKXtmdW5jdGlvbiBuKHQpe3JldHVybiEoInZpc2libGUiaW4gdCl8fHQudmlzaWJsZX1mdW5jdGlvbiBpKHQsZSxyKXt2YXIgbj1lLmluZGV4T2YociksaT10LmluZGV4T2Yobik7cmV0dXJuLTE9PT1pJiYoaSs9ZS5sZW5ndGgpLGl9dmFyIGE9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7cmV0dXJuIGkocix0LGUpLWkocix0LG4pfX0oY1tlXS5maWx0ZXIobikpO2xbZV0uc29ydChhKSxjW2VdLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4hbih0KX0pLnNvcnQoZnVuY3Rpb24odCl7cmV0dXJuIGNbZV0uaW5kZXhPZih0KX0pLmZvckVhY2goZnVuY3Rpb24odCl7bFtlXS5zcGxpY2UobFtlXS5pbmRleE9mKHQpLDEpLGxbZV0uc3BsaWNlKGNbZV0uaW5kZXhPZih0KSwwLHQpfSksdC5lbWl0KCJwbG90bHlfcmVzdHlsZSIpfX0pfX19LHsiLi4vLi4vbGliL3ByZXBhcmVfcmVnbCI6Njk3LCIuL3BhcmNvb3JkcyI6OTg4fV0sOTkwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9wbG90cy9kb21haW4iKS5hdHRyaWJ1dGVzLHM9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsbD1pKHtlZGl0VHlwZToiY2FsYyIsY29sb3JFZGl0VHlwZToic3R5bGUifSk7ZS5leHBvcnRzPXtsYWJlbHM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sbGFiZWwwOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxlZGl0VHlwZToiY2FsYyJ9LGRsYWJlbDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjEsZWRpdFR5cGU6ImNhbGMifSx2YWx1ZXM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sbWFya2VyOntjb2xvcnM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sbGluZTp7Y29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0Om4uZGVmYXVsdExpbmUsYXJyYXlPazohMCxlZGl0VHlwZToic3R5bGUifSx3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjAsYXJyYXlPazohMCxlZGl0VHlwZToic3R5bGUifSxlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIn0sdGV4dDp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxob3ZlcnRleHQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixhcnJheU9rOiEwLGVkaXRUeXBlOiJzdHlsZSJ9LHNjYWxlZ3JvdXA6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToiY2FsYyJ9LHRleHRpbmZvOnt2YWxUeXBlOiJmbGFnbGlzdCIsZmxhZ3M6WyJsYWJlbCIsInRleHQiLCJ2YWx1ZSIsInBlcmNlbnQiXSxleHRyYXM6WyJub25lIl0sZWRpdFR5cGU6ImNhbGMifSxob3ZlcmluZm86cyh7fSxhLmhvdmVyaW5mbyx7ZmxhZ3M6WyJsYWJlbCIsInRleHQiLCJ2YWx1ZSIsInBlcmNlbnQiLCJuYW1lIl19KSx0ZXh0cG9zaXRpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImluc2lkZSIsIm91dHNpZGUiLCJhdXRvIiwibm9uZSJdLGRmbHQ6ImF1dG8iLGFycmF5T2s6ITAsZWRpdFR5cGU6ImNhbGMifSx0ZXh0Zm9udDpzKHt9LGwse30pLGluc2lkZXRleHRmb250OnMoe30sbCx7fSksb3V0c2lkZXRleHRmb250OnMoe30sbCx7fSksZG9tYWluOm8oe25hbWU6InBpZSIsdHJhY2U6ITAsZWRpdFR5cGU6ImNhbGMifSksaG9sZTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjAsZWRpdFR5cGU6ImNhbGMifSxzb3J0Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn0sZGlyZWN0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJjbG9ja3dpc2UiLCJjb3VudGVyY2xvY2t3aXNlIl0sZGZsdDoiY291bnRlcmNsb2Nrd2lzZSIsZWRpdFR5cGU6ImNhbGMifSxyb3RhdGlvbjp7dmFsVHlwZToibnVtYmVyIixtaW46LTM2MCxtYXg6MzYwLGRmbHQ6MCxlZGl0VHlwZToiY2FsYyJ9LHB1bGw6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDowLGFycmF5T2s6ITAsZWRpdFR5cGU6ImNhbGMifX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIjo1NTcsIi4uLy4uL2xpYi9leHRlbmQiOjY3MywiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6NzI5LCIuLi8uLi9wbG90cy9kb21haW4iOjc1NywiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIjo3NTh9XSw5OTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4uLy4uL3Bsb3RzL2dldF9kYXRhIikuZ2V0TW9kdWxlQ2FsY0RhdGE7ci5uYW1lPSJwaWUiLHIucGxvdD1mdW5jdGlvbih0KXt2YXIgZT1uLmdldE1vZHVsZSgicGllIikscj1pKHQuY2FsY2RhdGEsZSlbMF07ci5sZW5ndGgmJmUucGxvdCh0LHIpfSxyLmNsZWFuPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPW4uX2hhcyYmbi5faGFzKCJwaWUiKSxhPWUuX2hhcyYmZS5faGFzKCJwaWUiKTtpJiYhYSYmbi5fcGllbGF5ZXIuc2VsZWN0QWxsKCJnLnRyYWNlIikucmVtb3ZlKCl9fSx7Ii4uLy4uL3Bsb3RzL2dldF9kYXRhIjo3NjgsIi4uLy4uL3JlZ2lzdHJ5Ijo4MTd9XSw5OTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG4saT10KCJmYXN0LWlzbnVtZXJpYyIpLGE9dCgiLi4vLi4vbGliIikuaXNBcnJheU9yVHlwZWRBcnJheSxvPXQoInRpbnljb2xvcjIiKSxzPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxsPXQoIi4vaGVscGVycyIpO2Z1bmN0aW9uIGModCxlKXtpZighbil7dmFyIHI9cy5kZWZhdWx0cztuPXUocil9dmFyIGk9ZXx8bjtyZXR1cm4gaVt0JWkubGVuZ3RoXX1mdW5jdGlvbiB1KHQpe3ZhciBlLHI9dC5zbGljZSgpO2ZvcihlPTA7ZTx0Lmxlbmd0aDtlKyspci5wdXNoKG8odFtlXSkubGlnaHRlbigyMCkudG9IZXhTdHJpbmcoKSk7Zm9yKGU9MDtlPHQubGVuZ3RoO2UrKylyLnB1c2gobyh0W2VdKS5kYXJrZW4oMjApLnRvSGV4U3RyaW5nKCkpO3JldHVybiByfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLG4saCxmLHAsZD1lLnZhbHVlcyxnPWEoZCkmJmQubGVuZ3RoLG09ZS5sYWJlbHMsdj1lLm1hcmtlci5jb2xvcnN8fFtdLHk9W10seD10Ll9mdWxsTGF5b3V0LGI9eC5jb2xvcndheSxfPXguX3BpZWNvbG9ybWFwLHc9e30saz0wLE09eC5oaWRkZW5sYWJlbHN8fFtdO2lmKHguX3BpZWNvbG9yd2F5fHxiPT09cy5kZWZhdWx0c3x8KHguX3BpZWNvbG9yd2F5PXUoYikpLGUuZGxhYmVsKWZvcihtPW5ldyBBcnJheShkLmxlbmd0aCkscj0wO3I8ZC5sZW5ndGg7cisrKW1bcl09U3RyaW5nKGUubGFiZWwwK3IqZS5kbGFiZWwpO2Z1bmN0aW9uIEEodCxlKXtyZXR1cm4hIXQmJighISh0PW8odCkpLmlzVmFsaWQoKSYmKHQ9cy5hZGRPcGFjaXR5KHQsdC5nZXRBbHBoYSgpKSxfW2VdfHwoX1tlXT10KSx0KSl9dmFyIFQ9KGc/ZDptKS5sZW5ndGg7Zm9yKHI9MDtyPFQ7cisrKXtpZihnKXtpZihuPWRbcl0sIWkobikpY29udGludWU7aWYoKG49K24pPDApY29udGludWV9ZWxzZSBuPTE7dm9pZCAwIT09KGg9bVtyXSkmJiIiIT09aHx8KGg9cik7dmFyIFM9d1toPVN0cmluZyhoKV07dm9pZCAwPT09Uz8od1toXT15Lmxlbmd0aCwoZj0tMSE9PU0uaW5kZXhPZihoKSl8fChrKz1uKSx5LnB1c2goe3Y6bixsYWJlbDpoLGNvbG9yOkEodltyXSksaTpyLHB0czpbcl0saGlkZGVuOmZ9KSk6KChwPXlbU10pLnYrPW4scC5wdHMucHVzaChyKSxwLmhpZGRlbnx8KGsrPW4pLCExPT09cC5jb2xvciYmdltyXSYmKHAuY29sb3I9QSh2W3JdLGgpKSl9Zm9yKGUuc29ydCYmeS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUudi10LnZ9KSxyPTA7cjx5Lmxlbmd0aDtyKyspITE9PT0ocD15W3JdKS5jb2xvciYmKF9bcC5sYWJlbF0/cC5jb2xvcj1fW3AubGFiZWxdOihfW3AubGFiZWxdPXAuY29sb3I9Yyh4Ll9waWVkZWZhdWx0Y29sb3Jjb3VudCx4Ll9waWVjb2xvcndheSkseC5fcGllZGVmYXVsdGNvbG9yY291bnQrKykpO2lmKHlbMF0mJih5WzBdLnZUb3RhbD1rKSxlLnRleHRpbmZvJiYibm9uZSIhPT1lLnRleHRpbmZvKXt2YXIgRSxDPS0xIT09ZS50ZXh0aW5mby5pbmRleE9mKCJsYWJlbCIpLEw9LTEhPT1lLnRleHRpbmZvLmluZGV4T2YoInRleHQiKSx6PS0xIT09ZS50ZXh0aW5mby5pbmRleE9mKCJ2YWx1ZSIpLFA9LTEhPT1lLnRleHRpbmZvLmluZGV4T2YoInBlcmNlbnQiKSxJPXguc2VwYXJhdG9ycztmb3Iocj0wO3I8eS5sZW5ndGg7cisrKXtpZihwPXlbcl0sRT1DP1twLmxhYmVsXTpbXSxMKXt2YXIgTz1sLmdldEZpcnN0RmlsbGVkKGUudGV4dCxwLnB0cyk7TyYmRS5wdXNoKE8pfXomJkUucHVzaChsLmZvcm1hdFBpZVZhbHVlKHAudixJKSksUCYmRS5wdXNoKGwuZm9ybWF0UGllUGVyY2VudChwLnYvayxJKSkscC50ZXh0PUUuam9pbigiPGJyPiIpfX1yZXR1cm4geX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NTU4LCIuLi8uLi9saWIiOjY4NCwiLi9oZWxwZXJzIjo5OTUsImZhc3QtaXNudW1lcmljIjoyMTQsdGlueWNvbG9yMjo0OTl9XSw5OTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL3Bsb3RzL2RvbWFpbiIpLmRlZmF1bHRzO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvKXtmdW5jdGlvbiBzKHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxpLHIsYSl9dmFyIGwsYz1uLmNvZXJjZUZvbnQsdT1zKCJ2YWx1ZXMiKSxoPW4uaXNBcnJheU9yVHlwZWRBcnJheSh1KSxmPXMoImxhYmVscyIpO2lmKEFycmF5LmlzQXJyYXkoZik/KGw9Zi5sZW5ndGgsaCYmKGw9TWF0aC5taW4obCx1Lmxlbmd0aCkpKTpoJiYobD11Lmxlbmd0aCxzKCJsYWJlbDAiKSxzKCJkbGFiZWwiKSksbCl7ZS5fbGVuZ3RoPWwscygibWFya2VyLmxpbmUud2lkdGgiKSYmcygibWFya2VyLmxpbmUuY29sb3IiKSxzKCJtYXJrZXIuY29sb3JzIikscygic2NhbGVncm91cCIpO3ZhciBwPXMoInRleHQiKSxkPXMoInRleHRpbmZvIixBcnJheS5pc0FycmF5KHApPyJ0ZXh0K3BlcmNlbnQiOiJwZXJjZW50Iik7aWYocygiaG92ZXJ0ZXh0IiksZCYmIm5vbmUiIT09ZCl7dmFyIGc9cygidGV4dHBvc2l0aW9uIiksbT1BcnJheS5pc0FycmF5KGcpfHwiYXV0byI9PT1nLHY9bXx8Imluc2lkZSI9PT1nLHk9bXx8Im91dHNpZGUiPT09ZztpZih2fHx5KXt2YXIgeD1jKHMsInRleHRmb250IixvLmZvbnQpO3YmJmMocywiaW5zaWRldGV4dGZvbnQiLHgpLHkmJmMocywib3V0c2lkZXRleHRmb250Iix4KX19YShlLG8scykscygiaG9sZSIpLHMoInNvcnQiKSxzKCJkaXJlY3Rpb24iKSxzKCJyb3RhdGlvbiIpLHMoInB1bGwiKX1lbHNlIGUudmlzaWJsZT0hMX19LHsiLi4vLi4vbGliIjo2ODQsIi4uLy4uL3Bsb3RzL2RvbWFpbiI6NzU3LCIuL2F0dHJpYnV0ZXMiOjk5MH1dLDk5NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2Z4L2hlbHBlcnMiKS5hcHBlbmRBcnJheU11bHRpUG9pbnRWYWx1ZXM7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9e2N1cnZlTnVtYmVyOmUuaW5kZXgscG9pbnROdW1iZXJzOnQucHRzLGRhdGE6ZS5faW5wdXQsZnVsbERhdGE6ZSxsYWJlbDp0LmxhYmVsLGNvbG9yOnQuY29sb3IsdmFsdWU6dC52LHY6dC52fTtyZXR1cm4gMT09PXQucHRzLmxlbmd0aCYmKHIucG9pbnROdW1iZXI9ci5pPXQucHRzWzBdKSxuKHIsZSx0LnB0cykscn19LHsiLi4vLi4vY29tcG9uZW50cy9meC9oZWxwZXJzIjo1OTd9XSw5OTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIik7ci5mb3JtYXRQaWVQZXJjZW50PWZ1bmN0aW9uKHQsZSl7dmFyIHI9KDEwMCp0KS50b1ByZWNpc2lvbigzKTtyZXR1cm4tMSE9PXIubGFzdEluZGV4T2YoIi4iKSYmKHI9ci5yZXBsYWNlKC9bLl0/MCskLywiIikpLG4ubnVtU2VwYXJhdGUocixlKSsiJSJ9LHIuZm9ybWF0UGllVmFsdWU9ZnVuY3Rpb24odCxlKXt2YXIgcj10LnRvUHJlY2lzaW9uKDEwKTtyZXR1cm4tMSE9PXIubGFzdEluZGV4T2YoIi4iKSYmKHI9ci5yZXBsYWNlKC9bLl0/MCskLywiIikpLG4ubnVtU2VwYXJhdGUocixlKX0sci5nZXRGaXJzdEZpbGxlZD1mdW5jdGlvbih0LGUpe2lmKEFycmF5LmlzQXJyYXkodCkpZm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPXRbZVtyXV07aWYobnx8MD09PW4pcmV0dXJuIG59fSxyLmNhc3RPcHRpb249ZnVuY3Rpb24odCxlKXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT9yLmdldEZpcnN0RmlsbGVkKHQsZSk6dHx8dm9pZCAwfX0seyIuLi8uLi9saWIiOjY4NH1dLDk5NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17fTtuLmF0dHJpYnV0ZXM9dCgiLi9hdHRyaWJ1dGVzIiksbi5zdXBwbHlEZWZhdWx0cz10KCIuL2RlZmF1bHRzIiksbi5zdXBwbHlMYXlvdXREZWZhdWx0cz10KCIuL2xheW91dF9kZWZhdWx0cyIpLG4ubGF5b3V0QXR0cmlidXRlcz10KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksbi5jYWxjPXQoIi4vY2FsYyIpLG4ucGxvdD10KCIuL3Bsb3QiKSxuLnN0eWxlPXQoIi4vc3R5bGUiKSxuLnN0eWxlT25lPXQoIi4vc3R5bGVfb25lIiksbi5tb2R1bGVUeXBlPSJ0cmFjZSIsbi5uYW1lPSJwaWUiLG4uYmFzZVBsb3RNb2R1bGU9dCgiLi9iYXNlX3Bsb3QiKSxuLmNhdGVnb3JpZXM9WyJwaWUiLCJzaG93TGVnZW5kIl0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7Ii4vYXR0cmlidXRlcyI6OTkwLCIuL2Jhc2VfcGxvdCI6OTkxLCIuL2NhbGMiOjk5MiwiLi9kZWZhdWx0cyI6OTkzLCIuL2xheW91dF9hdHRyaWJ1dGVzIjo5OTcsIi4vbGF5b3V0X2RlZmF1bHRzIjo5OTgsIi4vcGxvdCI6OTk5LCIuL3N0eWxlIjoxZTMsIi4vc3R5bGVfb25lIjoxMDAxfV0sOTk3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17aGlkZGVubGFiZWxzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9fX0se31dLDk5ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixhO3I9ImhpZGRlbmxhYmVscyIsbi5jb2VyY2UodCxlLGkscixhKX19LHsiLi4vLi4vbGliIjo2ODQsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjk5N31dLDk5OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9meCIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIikscz10KCIuLi8uLi9saWIiKSxsPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLGM9dCgiLi9oZWxwZXJzIiksdT10KCIuL2V2ZW50X2RhdGEiKTtmdW5jdGlvbiBoKHQsZSl7aWYodC52PT09ZS52VG90YWwmJiFlLnRyYWNlLmhvbGUpcmV0dXJuIDE7dmFyIHI9TWF0aC5QSSpNYXRoLm1pbih0LnYvZS52VG90YWwsLjUpO3JldHVybiBNYXRoLm1pbigxLygxKzEvTWF0aC5zaW4ocikpLCgxLWUudHJhY2UuaG9sZSkvMil9ZnVuY3Rpb24gZih0LGUpe3ZhciByPWUucHhtaWRbMF0sbj1lLnB4bWlkWzFdLGk9dC53aWR0aC8yLGE9dC5oZWlnaHQvMjtyZXR1cm4gcjwwJiYoaSo9LTEpLG48MCYmKGEqPS0xKSx7c2NhbGU6MSxyQ2VudGVyOjEscm90YXRlOjAseDppK01hdGguYWJzKGEpKihpPjA/MTotMSkvMix5OmEvKDErcipyLyhuKm4pKSxvdXRzaWRlOiEwfX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9mdWxsTGF5b3V0OyFmdW5jdGlvbih0LGUpe3ZhciByLG4saSxhLG8scyxsLGMsdSxoPVtdO2ZvcihpPTA7aTx0Lmxlbmd0aDtpKyspe2lmKG89dFtpXVswXSxzPW8udHJhY2Uscj1lLncqKHMuZG9tYWluLnhbMV0tcy5kb21haW4ueFswXSksbj1lLmgqKHMuZG9tYWluLnlbMV0tcy5kb21haW4ueVswXSksbD1zLnB1bGwsQXJyYXkuaXNBcnJheShsKSlmb3IobD0wLGE9MDthPHMucHVsbC5sZW5ndGg7YSsrKXMucHVsbFthXT5sJiYobD1zLnB1bGxbYV0pO28ucj1NYXRoLm1pbihyLG4pLygyKzIqbCksby5jeD1lLmwrZS53KihzLmRvbWFpbi54WzFdK3MuZG9tYWluLnhbMF0pLzIsby5jeT1lLnQrZS5oKigyLXMuZG9tYWluLnlbMV0tcy5kb21haW4ueVswXSkvMixzLnNjYWxlZ3JvdXAmJi0xPT09aC5pbmRleE9mKHMuc2NhbGVncm91cCkmJmgucHVzaChzLnNjYWxlZ3JvdXApfWZvcihhPTA7YTxoLmxlbmd0aDthKyspe2Zvcih1PTEvMCxjPWhbYV0saT0wO2k8dC5sZW5ndGg7aSsrKShvPXRbaV1bMF0pLnRyYWNlLnNjYWxlZ3JvdXA9PT1jJiYodT1NYXRoLm1pbih1LG8ucipvLnIvby52VG90YWwpKTtmb3IoaT0wO2k8dC5sZW5ndGg7aSsrKShvPXRbaV1bMF0pLnRyYWNlLnNjYWxlZ3JvdXA9PT1jJiYoby5yPU1hdGguc3FydCh1Km8udlRvdGFsKSl9fShlLHIuX3NpemUpO3ZhciBwPXIuX3BpZWxheWVyLnNlbGVjdEFsbCgiZy50cmFjZSIpLmRhdGEoZSk7cC5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoeyJzdHJva2UtbGluZWpvaW4iOiJyb3VuZCIsY2xhc3M6InRyYWNlIn0pLHAuZXhpdCgpLnJlbW92ZSgpLHAub3JkZXIoKSxwLmVhY2goZnVuY3Rpb24oZSl7dmFyIHA9bi5zZWxlY3QodGhpcyksZD1lWzBdLGc9ZC50cmFjZTshZnVuY3Rpb24odCl7dmFyIGUscixuLGk9dFswXSxhPWkudHJhY2Usbz1hLnJvdGF0aW9uKk1hdGguUEkvMTgwLHM9MipNYXRoLlBJL2kudlRvdGFsLGw9InB4MCIsYz0icHgxIjtpZigiY291bnRlcmNsb2Nrd2lzZSI9PT1hLmRpcmVjdGlvbil7Zm9yKGU9MDtlPHQubGVuZ3RoJiZ0W2VdLmhpZGRlbjtlKyspO2lmKGU9PT10Lmxlbmd0aClyZXR1cm47bys9cyp0W2VdLnYscyo9LTEsbD0icHgxIixjPSJweDAifWZ1bmN0aW9uIHUodCl7cmV0dXJuW2kucipNYXRoLnNpbih0KSwtaS5yKk1hdGguY29zKHQpXX1mb3Iobj11KG8pLGU9MDtlPHQubGVuZ3RoO2UrKykocj10W2VdKS5oaWRkZW58fChyW2xdPW4sbys9cypyLnYvMixyLnB4bWlkPXUobyksci5taWRhbmdsZT1vLG8rPXMqci52LzIsbj11KG8pLHJbY109bixyLmxhcmdlQXJjPXIudj5pLnZUb3RhbC8yPzE6MCl9KGUpLHAuZWFjaChmdW5jdGlvbigpe3ZhciBwPW4uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgiZy5zbGljZSIpLmRhdGEoZSk7cC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInNsaWNlIiwhMCkscC5leGl0KCkucmVtb3ZlKCk7dmFyIG09W1tbXSxbXV0sW1tdLFtdXV0sdj0hMTtwLmVhY2goZnVuY3Rpb24oZSl7aWYoZS5oaWRkZW4pbi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJwYXRoLGciKS5yZW1vdmUoKTtlbHNle2UucG9pbnROdW1iZXI9ZS5pLGUuY3VydmVOdW1iZXI9Zy5pbmRleCxtW2UucHhtaWRbMV08MD8wOjFdW2UucHhtaWRbMF08MD8wOjFdLnB1c2goZSk7dmFyIGE9ZC5jeCxwPWQuY3kseT1uLnNlbGVjdCh0aGlzKSx4PXkuc2VsZWN0QWxsKCJwYXRoLnN1cmZhY2UiKS5kYXRhKFtlXSksYj0hMSxfPSExO2lmKHguZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJzdXJmYWNlIiwhMCkuc3R5bGUoeyJwb2ludGVyLWV2ZW50cyI6ImFsbCJ9KSx5LnNlbGVjdCgicGF0aC50ZXh0bGluZSIpLnJlbW92ZSgpLHkub24oIm1vdXNlb3ZlciIsZnVuY3Rpb24oKXt2YXIgbz10Ll9mdWxsTGF5b3V0LHM9dC5fZnVsbERhdGFbZy5pbmRleF07aWYoIXQuX2RyYWdnaW5nJiYhMSE9PW8uaG92ZXJtb2RlKXt2YXIgbD1zLmhvdmVyaW5mbztpZihBcnJheS5pc0FycmF5KGwpJiYobD1pLmNhc3RIb3ZlcmluZm8oe2hvdmVyaW5mbzpbYy5jYXN0T3B0aW9uKGwsZS5wdHMpXSxfbW9kdWxlOmcuX21vZHVsZX0sbywwKSksImFsbCI9PT1sJiYobD0ibGFiZWwrdGV4dCt2YWx1ZStwZXJjZW50K25hbWUiKSwibm9uZSIhPT1sJiYic2tpcCIhPT1sJiZsKXt2YXIgZj1oKGUsZCksbT1hK2UucHhtaWRbMF0qKDEtZiksdj1wK2UucHhtaWRbMV0qKDEtZikseT1yLnNlcGFyYXRvcnMseD1bXTtpZigtMSE9PWwuaW5kZXhPZigibGFiZWwiKSYmeC5wdXNoKGUubGFiZWwpLC0xIT09bC5pbmRleE9mKCJ0ZXh0Iikpe3ZhciB3PWMuY2FzdE9wdGlvbihzLmhvdmVydGV4dHx8cy50ZXh0LGUucHRzKTt3JiZ4LnB1c2godyl9LTEhPT1sLmluZGV4T2YoInZhbHVlIikmJngucHVzaChjLmZvcm1hdFBpZVZhbHVlKGUudix5KSksLTEhPT1sLmluZGV4T2YoInBlcmNlbnQiKSYmeC5wdXNoKGMuZm9ybWF0UGllUGVyY2VudChlLnYvZC52VG90YWwseSkpO3ZhciBrPWcuaG92ZXJsYWJlbCxNPWsuZm9udDtpLmxvbmVIb3Zlcih7eDA6bS1mKmQucix4MTptK2YqZC5yLHk6dix0ZXh0Onguam9pbigiPGJyPiIpLG5hbWU6LTEhPT1sLmluZGV4T2YoIm5hbWUiKT9zLm5hbWU6dm9pZCAwLGlkZWFsQWxpZ246ZS5weG1pZFswXTwwPyJsZWZ0IjoicmlnaHQiLGNvbG9yOmMuY2FzdE9wdGlvbihrLmJnY29sb3IsZS5wdHMpfHxlLmNvbG9yLGJvcmRlckNvbG9yOmMuY2FzdE9wdGlvbihrLmJvcmRlcmNvbG9yLGUucHRzKSxmb250RmFtaWx5OmMuY2FzdE9wdGlvbihNLmZhbWlseSxlLnB0cyksZm9udFNpemU6Yy5jYXN0T3B0aW9uKE0uc2l6ZSxlLnB0cyksZm9udENvbG9yOmMuY2FzdE9wdGlvbihNLmNvbG9yLGUucHRzKX0se2NvbnRhaW5lcjpvLl9ob3ZlcmxheWVyLm5vZGUoKSxvdXRlckNvbnRhaW5lcjpvLl9wYXBlci5ub2RlKCksZ2Q6dH0pLGI9ITB9dC5lbWl0KCJwbG90bHlfaG92ZXIiLHtwb2ludHM6W3UoZSxzKV0sZXZlbnQ6bi5ldmVudH0pLF89ITB9fSkub24oIm1vdXNlb3V0IixmdW5jdGlvbihyKXt2YXIgYT10Ll9mdWxsTGF5b3V0LG89dC5fZnVsbERhdGFbZy5pbmRleF07XyYmKHIub3JpZ2luYWxFdmVudD1uLmV2ZW50LHQuZW1pdCgicGxvdGx5X3VuaG92ZXIiLHtwb2ludHM6W3UoZSxvKV0sZXZlbnQ6bi5ldmVudH0pLF89ITEpLGImJihpLmxvbmVVbmhvdmVyKGEuX2hvdmVybGF5ZXIubm9kZSgpKSxiPSExKX0pLm9uKCJjbGljayIsZnVuY3Rpb24oKXt2YXIgcj10Ll9mdWxsTGF5b3V0LGE9dC5fZnVsbERhdGFbZy5pbmRleF07dC5fZHJhZ2dpbmd8fCExPT09ci5ob3Zlcm1vZGV8fCh0Ll9ob3ZlcmRhdGE9W3UoZSxhKV0saS5jbGljayh0LG4uZXZlbnQpKX0pLGcucHVsbCl7dmFyIHc9K2MuY2FzdE9wdGlvbihnLnB1bGwsZS5wdHMpfHwwO3c+MCYmKGErPXcqZS5weG1pZFswXSxwKz13KmUucHhtaWRbMV0pfWUuY3hGaW5hbD1hLGUuY3lGaW5hbD1wO3ZhciBrPWcuaG9sZTtpZihlLnY9PT1kLnZUb3RhbCl7dmFyIE09Ik0iKyhhK2UucHgwWzBdKSsiLCIrKHArZS5weDBbMV0pK0MoZS5weDAsZS5weG1pZCwhMCwxKStDKGUucHhtaWQsZS5weDAsITAsMSkrIloiO2s/eC5hdHRyKCJkIiwiTSIrKGErayplLnB4MFswXSkrIiwiKyhwK2sqZS5weDBbMV0pK0MoZS5weDAsZS5weG1pZCwhMSxrKStDKGUucHhtaWQsZS5weDAsITEsaykrIloiK00pOnguYXR0cigiZCIsTSl9ZWxzZXt2YXIgQT1DKGUucHgwLGUucHgxLCEwLDEpO2lmKGspe3ZhciBUPTEtazt4LmF0dHIoImQiLCJNIisoYStrKmUucHgxWzBdKSsiLCIrKHArayplLnB4MVsxXSkrQyhlLnB4MSxlLnB4MCwhMSxrKSsibCIrVCplLnB4MFswXSsiLCIrVCplLnB4MFsxXStBKyJaIil9ZWxzZSB4LmF0dHIoImQiLCJNIithKyIsIitwKyJsIitlLnB4MFswXSsiLCIrZS5weDBbMV0rQSsiWiIpfXZhciBTPWMuY2FzdE9wdGlvbihnLnRleHRwb3NpdGlvbixlLnB0cyksRT15LnNlbGVjdEFsbCgiZy5zbGljZXRleHQiKS5kYXRhKGUudGV4dCYmIm5vbmUiIT09Uz9bMF06W10pO0UuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJzbGljZXRleHQiLCEwKSxFLmV4aXQoKS5yZW1vdmUoKSxFLmVhY2goZnVuY3Rpb24oKXt2YXIgcj1zLmVuc3VyZVNpbmdsZShuLnNlbGVjdCh0aGlzKSwidGV4dCIsIiIsZnVuY3Rpb24odCl7dC5hdHRyKCJkYXRhLW5vdGV4IiwxKX0pO3IudGV4dChlLnRleHQpLmF0dHIoe2NsYXNzOiJzbGljZXRleHQiLHRyYW5zZm9ybToiIiwidGV4dC1hbmNob3IiOiJtaWRkbGUifSkuY2FsbChvLmZvbnQsIm91dHNpZGUiPT09Uz9nLm91dHNpZGV0ZXh0Zm9udDpnLmluc2lkZXRleHRmb250KS5jYWxsKGwuY29udmVydFRvVHNwYW5zLHQpO3ZhciBpLGM9by5iQm94KHIubm9kZSgpKTsib3V0c2lkZSI9PT1TP2k9ZihjLGUpOihpPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1NYXRoLnNxcnQodC53aWR0aCp0LndpZHRoK3QuaGVpZ2h0KnQuaGVpZ2h0KSxpPXQud2lkdGgvdC5oZWlnaHQsYT1NYXRoLlBJKk1hdGgubWluKGUudi9yLnZUb3RhbCwuNSksbz0xLXIudHJhY2UuaG9sZSxzPWgoZSxyKSxsPXtzY2FsZTpzKnIucioyL24sckNlbnRlcjoxLXMscm90YXRlOjB9O2lmKGwuc2NhbGU+PTEpcmV0dXJuIGw7dmFyIGM9aSsxLygyKk1hdGgudGFuKGEpKSx1PXIucipNYXRoLm1pbigxLyhNYXRoLnNxcnQoYypjKy41KStjKSxvLyhNYXRoLnNxcnQoaSppK28vMikraSkpLGY9e3NjYWxlOjIqdS90LmhlaWdodCxyQ2VudGVyOk1hdGguY29zKHUvci5yKS11Kmkvci5yLHJvdGF0ZTooMTgwL01hdGguUEkqZS5taWRhbmdsZSs3MjApJTE4MC05MH0scD0xL2ksZD1wKzEvKDIqTWF0aC50YW4oYSkpLGc9ci5yKk1hdGgubWluKDEvKE1hdGguc3FydChkKmQrLjUpK2QpLG8vKE1hdGguc3FydChwKnArby8yKStwKSksbT17c2NhbGU6MipnL3Qud2lkdGgsckNlbnRlcjpNYXRoLmNvcyhnL3IuciktZy9pL3Iucixyb3RhdGU6KDE4MC9NYXRoLlBJKmUubWlkYW5nbGUrODEwKSUxODAtOTB9LHY9bS5zY2FsZT5mLnNjYWxlP206ZjtyZXR1cm4gbC5zY2FsZTwxJiZ2LnNjYWxlPmwuc2NhbGU/djpsfShjLGUsZCksImF1dG8iPT09UyYmaS5zY2FsZTwxJiYoci5jYWxsKG8uZm9udCxnLm91dHNpZGV0ZXh0Zm9udCksZy5vdXRzaWRldGV4dGZvbnQuZmFtaWx5PT09Zy5pbnNpZGV0ZXh0Zm9udC5mYW1pbHkmJmcub3V0c2lkZXRleHRmb250LnNpemU9PT1nLmluc2lkZXRleHRmb250LnNpemV8fChjPW8uYkJveChyLm5vZGUoKSkpLGk9ZihjLGUpKSk7dmFyIHU9YStlLnB4bWlkWzBdKmkuckNlbnRlcisoaS54fHwwKSxtPXArZS5weG1pZFsxXSppLnJDZW50ZXIrKGkueXx8MCk7aS5vdXRzaWRlJiYoZS55TGFiZWxNaW49bS1jLmhlaWdodC8yLGUueUxhYmVsTWlkPW0sZS55TGFiZWxNYXg9bStjLmhlaWdodC8yLGUubGFiZWxFeHRyYVg9MCxlLmxhYmVsRXh0cmFZPTAsdj0hMCksci5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit1KyIsIittKyIpIisoaS5zY2FsZTwxPyJzY2FsZSgiK2kuc2NhbGUrIikiOiIiKSsoaS5yb3RhdGU/InJvdGF0ZSgiK2kucm90YXRlKyIpIjoiIikrInRyYW5zbGF0ZSgiKy0oYy5sZWZ0K2MucmlnaHQpLzIrIiwiKy0oYy50b3ArYy5ib3R0b20pLzIrIikiKX0pfWZ1bmN0aW9uIEModCxyLG4saSl7cmV0dXJuImEiK2kqZC5yKyIsIitpKmQucisiIDAgIitlLmxhcmdlQXJjKyhuPyIgMSAiOiIgMCAiKStpKihyWzBdLXRbMF0pKyIsIitpKihyWzFdLXRbMV0pfX0pLHYmJmZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLGEsbyxzLGwsdSxoLGYscCxkLGc7ZnVuY3Rpb24gbSh0LGUpe3JldHVybiB0LnB4bWlkWzFdLWUucHhtaWRbMV19ZnVuY3Rpb24gdih0LGUpe3JldHVybiBlLnB4bWlkWzFdLXQucHhtaWRbMV19ZnVuY3Rpb24geSh0LHIpe3J8fChyPXt9KTt2YXIgaSx1LGgscCxkLGcsbT1yLmxhYmVsRXh0cmFZKyhuP3IueUxhYmVsTWF4OnIueUxhYmVsTWluKSx2PW4/dC55TGFiZWxNaW46dC55TGFiZWxNYXgseT1uP3QueUxhYmVsTWF4OnQueUxhYmVsTWluLHg9dC5jeUZpbmFsK28odC5weDBbMV0sdC5weDFbMV0pLGI9bS12O2lmKGIqbD4wJiYodC5sYWJlbEV4dHJhWT1iKSxBcnJheS5pc0FycmF5KGUucHVsbCkpZm9yKHU9MDt1PGYubGVuZ3RoO3UrKykoaD1mW3VdKT09PXR8fChjLmNhc3RPcHRpb24oZS5wdWxsLHQucHRzKXx8MCk+PShjLmNhc3RPcHRpb24oZS5wdWxsLGgucHRzKXx8MCl8fCgodC5weG1pZFsxXS1oLnB4bWlkWzFdKSpsPjA/KHA9aC5jeUZpbmFsK28oaC5weDBbMV0saC5weDFbMV0pLChiPXAtdi10LmxhYmVsRXh0cmFZKSpsPjAmJih0LmxhYmVsRXh0cmFZKz1iKSk6KHkrdC5sYWJlbEV4dHJhWS14KSpsPjAmJihpPTMqcypNYXRoLmFicyh1LWYuaW5kZXhPZih0KSksZD1oLmN4RmluYWwrYShoLnB4MFswXSxoLnB4MVswXSksKGc9ZCtpLSh0LmN4RmluYWwrdC5weG1pZFswXSktdC5sYWJlbEV4dHJhWCkqcz4wJiYodC5sYWJlbEV4dHJhWCs9ZykpKX1mb3Iobj0wO248MjtuKyspZm9yKGk9bj9tOnYsbz1uP01hdGgubWF4Ok1hdGgubWluLGw9bj8xOi0xLHI9MDtyPDI7cisrKXtmb3IoYT1yP01hdGgubWF4Ok1hdGgubWluLHM9cj8xOi0xLCh1PXRbbl1bcl0pLnNvcnQoaSksaD10WzEtbl1bcl0sZj1oLmNvbmNhdCh1KSxkPVtdLHA9MDtwPHUubGVuZ3RoO3ArKyl2b2lkIDAhPT11W3BdLnlMYWJlbE1pZCYmZC5wdXNoKHVbcF0pO2ZvcihnPSExLHA9MDtuJiZwPGgubGVuZ3RoO3ArKylpZih2b2lkIDAhPT1oW3BdLnlMYWJlbE1pZCl7Zz1oW3BdO2JyZWFrfWZvcihwPTA7cDxkLmxlbmd0aDtwKyspe3ZhciB4PXAmJmRbcC0xXTtnJiYhcCYmKHg9ZykseShkW3BdLHgpfX19KG0sZykscC5lYWNoKGZ1bmN0aW9uKHQpe2lmKHQubGFiZWxFeHRyYVh8fHQubGFiZWxFeHRyYVkpe3ZhciBlPW4uc2VsZWN0KHRoaXMpLHI9ZS5zZWxlY3QoImcuc2xpY2V0ZXh0IHRleHQiKTtyLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3QubGFiZWxFeHRyYVgrIiwiK3QubGFiZWxFeHRyYVkrIikiK3IuYXR0cigidHJhbnNmb3JtIikpO3ZhciBpPXQuY3hGaW5hbCt0LnB4bWlkWzBdLG89Ik0iK2krIiwiKyh0LmN5RmluYWwrdC5weG1pZFsxXSkscz0odC55TGFiZWxNYXgtdC55TGFiZWxNaW4pKih0LnB4bWlkWzBdPDA/LTE6MSkvNDtpZih0LmxhYmVsRXh0cmFYKXt2YXIgbD10LmxhYmVsRXh0cmFYKnQucHhtaWRbMV0vdC5weG1pZFswXSxjPXQueUxhYmVsTWlkK3QubGFiZWxFeHRyYVktKHQuY3lGaW5hbCt0LnB4bWlkWzFdKTtNYXRoLmFicyhsKT5NYXRoLmFicyhjKT9vKz0ibCIrYyp0LnB4bWlkWzBdL3QucHhtaWRbMV0rIiwiK2MrIkgiKyhpK3QubGFiZWxFeHRyYVgrcyk6bys9ImwiK3QubGFiZWxFeHRyYVgrIiwiK2wrInYiKyhjLWwpKyJoIitzfWVsc2Ugbys9IlYiKyh0LnlMYWJlbE1pZCt0LmxhYmVsRXh0cmFZKSsiaCIrcztlLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoInRleHRsaW5lIiwhMCkuY2FsbChhLnN0cm9rZSxnLm91dHNpZGV0ZXh0Zm9udC5jb2xvcikuYXR0cih7InN0cm9rZS13aWR0aCI6TWF0aC5taW4oMixnLm91dHNpZGV0ZXh0Zm9udC5zaXplLzgpLGQ6byxmaWxsOiJub25lIn0pfX0pfSl9KSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cC5zZWxlY3RBbGwoInRzcGFuIikuZWFjaChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpO3QuYXR0cigiZHkiKSYmdC5hdHRyKCJkeSIsdC5hdHRyKCJkeSIpKX0pfSwwKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NTU4LCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjU4MywiLi4vLi4vY29tcG9uZW50cy9meCI6NjAwLCIuLi8uLi9saWIiOjY4NCwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo3MDgsIi4vZXZlbnRfZGF0YSI6OTk0LCIuL2hlbHBlcnMiOjk5NSxkMzoxNDd9XSwxMDAwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCIuL3N0eWxlX29uZSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt0Ll9mdWxsTGF5b3V0Ll9waWVsYXllci5zZWxlY3RBbGwoIi50cmFjZSIpLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9dFswXS50cmFjZSxyPW4uc2VsZWN0KHRoaXMpO3Iuc3R5bGUoe29wYWNpdHk6ZS5vcGFjaXR5fSksci5zZWxlY3RBbGwoInBhdGguc3VyZmFjZSIpLmVhY2goZnVuY3Rpb24odCl7bi5zZWxlY3QodGhpcykuY2FsbChpLHQsZSl9KX0pfX0seyIuL3N0eWxlX29uZSI6MTAwMSxkMzoxNDd9XSwxMDAxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxpPXQoIi4vaGVscGVycyIpLmNhc3RPcHRpb247ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgYT1yLm1hcmtlci5saW5lLG89aShhLmNvbG9yLGUucHRzKXx8bi5kZWZhdWx0TGluZSxzPWkoYS53aWR0aCxlLnB0cyl8fDA7dC5zdHlsZSh7InN0cm9rZS13aWR0aCI6c30pLmNhbGwobi5maWxsLGUuY29sb3IpLmNhbGwobi5zdHJva2Usbyl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjU1OCwiLi9oZWxwZXJzIjo5OTV9XSwxMDAyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyIpO2UuZXhwb3J0cz17eDpuLngseTpuLnkseHk6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0saW5kaWNlczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSx4Ym91bmRzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHlib3VuZHM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sdGV4dDpuLnRleHQsbWFya2VyOntjb2xvcjp7dmFsVHlwZToiY29sb3IiLGFycmF5T2s6ITEsZWRpdFR5cGU6ImNhbGMifSxvcGFjaXR5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MSxhcnJheU9rOiExLGVkaXRUeXBlOiJjYWxjIn0sYmxlbmQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6bnVsbCxlZGl0VHlwZToiY2FsYyJ9LHNpemVtaW46e3ZhbFR5cGU6Im51bWJlciIsbWluOi4xLG1heDoyLGRmbHQ6LjUsZWRpdFR5cGU6ImNhbGMifSxzaXplbWF4Ont2YWxUeXBlOiJudW1iZXIiLG1pbjouMSxkZmx0OjIwLGVkaXRUeXBlOiJjYWxjIn0sYm9yZGVyOntjb2xvcjp7dmFsVHlwZToiY29sb3IiLGFycmF5T2s6ITEsZWRpdFR5cGU6ImNhbGMifSxhcmVhcmF0aW86e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDowLGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9fX0seyIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiOjEwMTV9XSwxMDAzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImdsLXBvaW50Y2xvdWQyZCIpLGk9dCgiLi4vLi4vbGliL3N0cjJyZ2JhcnJheSIpLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F1dG9yYW5nZSIpLmV4cGFuZCxvPXQoIi4uL3NjYXR0ZXIvZ2V0X3RyYWNlX2NvbG9yIik7ZnVuY3Rpb24gcyh0LGUpe3RoaXMuc2NlbmU9dCx0aGlzLnVpZD1lLHRoaXMudHlwZT0icG9pbnRjbG91ZCIsdGhpcy5waWNrWERhdGE9W10sdGhpcy5waWNrWURhdGE9W10sdGhpcy54RGF0YT1bXSx0aGlzLnlEYXRhPVtdLHRoaXMudGV4dExhYmVscz1bXSx0aGlzLmNvbG9yPSJyZ2IoMCwgMCwgMCkiLHRoaXMubmFtZT0iIix0aGlzLmhvdmVyaW5mbz0iYWxsIix0aGlzLmlkVG9JbmRleD1uZXcgSW50MzJBcnJheSgwKSx0aGlzLmJvdW5kcz1bMCwwLDAsMF0sdGhpcy5wb2ludGNsb3VkT3B0aW9ucz17cG9zaXRpb25zOm5ldyBGbG9hdDMyQXJyYXkoMCksaWRUb0luZGV4OnRoaXMuaWRUb0luZGV4LHNpemVtaW46LjUsc2l6ZW1heDoxMixjb2xvcjpbMCwwLDAsMV0sYXJlYVJhdGlvOjEsYm9yZGVyQ29sb3I6WzAsMCwwLDFdfSx0aGlzLnBvaW50Y2xvdWQ9bih0LmdscGxvdCx0aGlzLnBvaW50Y2xvdWRPcHRpb25zKSx0aGlzLnBvaW50Y2xvdWQuX3RyYWNlPXRoaXN9dmFyIGw9cy5wcm90b3R5cGU7bC5oYW5kbGVQaWNrPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaWRUb0luZGV4W3QucG9pbnRJZF07cmV0dXJue3RyYWNlOnRoaXMsZGF0YUNvb3JkOnQuZGF0YUNvb3JkLHRyYWNlQ29vcmQ6dGhpcy5waWNrWFlEYXRhP1t0aGlzLnBpY2tYWURhdGFbMiplXSx0aGlzLnBpY2tYWURhdGFbMiplKzFdXTpbdGhpcy5waWNrWERhdGFbZV0sdGhpcy5waWNrWURhdGFbZV1dLHRleHRMYWJlbDpBcnJheS5pc0FycmF5KHRoaXMudGV4dExhYmVscyk/dGhpcy50ZXh0TGFiZWxzW2VdOnRoaXMudGV4dExhYmVscyxjb2xvcjp0aGlzLmNvbG9yLG5hbWU6dGhpcy5uYW1lLHBvaW50SW5kZXg6ZSxob3ZlcmluZm86dGhpcy5ob3ZlcmluZm99fSxsLnVwZGF0ZT1mdW5jdGlvbih0KXt0aGlzLmluZGV4PXQuaW5kZXgsdGhpcy50ZXh0TGFiZWxzPXQudGV4dCx0aGlzLm5hbWU9dC5uYW1lLHRoaXMuaG92ZXJpbmZvPXQuaG92ZXJpbmZvLHRoaXMuYm91bmRzPVsxLzAsMS8wLC0xLzAsLTEvMF0sdGhpcy51cGRhdGVGYXN0KHQpLHRoaXMuY29sb3I9byh0LHt9KX0sbC51cGRhdGVGYXN0PWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixhLG8scyxsPXRoaXMueERhdGE9dGhpcy5waWNrWERhdGE9dC54LGM9dGhpcy55RGF0YT10aGlzLnBpY2tZRGF0YT10LnksdT10aGlzLnBpY2tYWURhdGE9dC54eSxoPXQueGJvdW5kcyYmdC55Ym91bmRzLGY9dC5pbmRpY2VzLHA9dGhpcy5ib3VuZHM7aWYodSl7aWYobj11LGU9dS5sZW5ndGg+Pj4xLGgpcFswXT10Lnhib3VuZHNbMF0scFsyXT10Lnhib3VuZHNbMV0scFsxXT10Lnlib3VuZHNbMF0scFszXT10Lnlib3VuZHNbMV07ZWxzZSBmb3Iocz0wO3M8ZTtzKyspYT1uWzIqc10sbz1uWzIqcysxXSxhPHBbMF0mJihwWzBdPWEpLGE+cFsyXSYmKHBbMl09YSksbzxwWzFdJiYocFsxXT1vKSxvPnBbM10mJihwWzNdPW8pO2lmKGYpcj1mO2Vsc2UgZm9yKHI9bmV3IEludDMyQXJyYXkoZSkscz0wO3M8ZTtzKyspcltzXT1zfWVsc2UgZm9yKGU9bC5sZW5ndGgsbj1uZXcgRmxvYXQzMkFycmF5KDIqZSkscj1uZXcgSW50MzJBcnJheShlKSxzPTA7czxlO3MrKylhPWxbc10sbz1jW3NdLHJbc109cyxuWzIqc109YSxuWzIqcysxXT1vLGE8cFswXSYmKHBbMF09YSksYT5wWzJdJiYocFsyXT1hKSxvPHBbMV0mJihwWzFdPW8pLG8+cFszXSYmKHBbM109byk7dGhpcy5pZFRvSW5kZXg9cix0aGlzLnBvaW50Y2xvdWRPcHRpb25zLmlkVG9JbmRleD1yLHRoaXMucG9pbnRjbG91ZE9wdGlvbnMucG9zaXRpb25zPW47dmFyIGQ9aSh0Lm1hcmtlci5jb2xvciksZz1pKHQubWFya2VyLmJvcmRlci5jb2xvciksbT10Lm9wYWNpdHkqdC5tYXJrZXIub3BhY2l0eTtkWzNdKj1tLHRoaXMucG9pbnRjbG91ZE9wdGlvbnMuY29sb3I9ZDt2YXIgdj10Lm1hcmtlci5ibGVuZDtpZihudWxsPT09dil7dj1sLmxlbmd0aDwxMDB8fGMubGVuZ3RoPDEwMH10aGlzLnBvaW50Y2xvdWRPcHRpb25zLmJsZW5kPXYsZ1szXSo9bSx0aGlzLnBvaW50Y2xvdWRPcHRpb25zLmJvcmRlckNvbG9yPWc7dmFyIHk9dC5tYXJrZXIuc2l6ZW1pbix4PU1hdGgubWF4KHQubWFya2VyLnNpemVtYXgsdC5tYXJrZXIuc2l6ZW1pbik7dGhpcy5wb2ludGNsb3VkT3B0aW9ucy5zaXplTWluPXksdGhpcy5wb2ludGNsb3VkT3B0aW9ucy5zaXplTWF4PXgsdGhpcy5wb2ludGNsb3VkT3B0aW9ucy5hcmVhUmF0aW89dC5tYXJrZXIuYm9yZGVyLmFyZWFyYXRpbyx0aGlzLnBvaW50Y2xvdWQudXBkYXRlKHRoaXMucG9pbnRjbG91ZE9wdGlvbnMpLHRoaXMuZXhwYW5kQXhlc0Zhc3QocCx4LzIpfSxsLmV4cGFuZEF4ZXNGYXN0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZXx8LjU7YSh0aGlzLnNjZW5lLnhheGlzLFt0WzBdLHRbMl1dLHtwcGFkOnJ9KSxhKHRoaXMuc2NlbmUueWF4aXMsW3RbMV0sdFszXV0se3BwYWQ6cn0pfSxsLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnBvaW50Y2xvdWQuZGlzcG9zZSgpfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1uZXcgcyh0LGUudWlkKTtyZXR1cm4gci51cGRhdGUoZSkscn19LHsiLi4vLi4vbGliL3N0cjJyZ2JhcnJheSI6NzA3LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXV0b3JhbmdlIjo3MzEsIi4uL3NjYXR0ZXIvZ2V0X3RyYWNlX2NvbG9yIjoxMDI0LCJnbC1wb2ludGNsb3VkMmQiOjI3OX1dLDEwMDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIGEocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX1hKCJ4IiksYSgieSIpLGEoInhib3VuZHMiKSxhKCJ5Ym91bmRzIiksdC54eSYmdC54eSBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSYmKGUueHk9dC54eSksdC5pbmRpY2VzJiZ0LmluZGljZXMgaW5zdGFuY2VvZiBJbnQzMkFycmF5JiYoZS5pbmRpY2VzPXQuaW5kaWNlcyksYSgidGV4dCIpLGEoIm1hcmtlci5jb2xvciIsciksYSgibWFya2VyLm9wYWNpdHkiKSxhKCJtYXJrZXIuYmxlbmQiKSxhKCJtYXJrZXIuc2l6ZW1pbiIpLGEoIm1hcmtlci5zaXplbWF4IiksYSgibWFya2VyLmJvcmRlci5jb2xvciIsciksYSgibWFya2VyLmJvcmRlci5hcmVhcmF0aW8iKSxlLl9sZW5ndGg9bnVsbH19LHsiLi4vLi4vbGliIjo2ODQsIi4vYXR0cmlidXRlcyI6MTAwMn1dLDEwMDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoIi4vYXR0cmlidXRlcyIpLG4uc3VwcGx5RGVmYXVsdHM9dCgiLi9kZWZhdWx0cyIpLG4uY2FsYz10KCIuLi9zY2F0dGVyM2QvY2FsYyIpLG4ucGxvdD10KCIuL2NvbnZlcnQiKSxuLm1vZHVsZVR5cGU9InRyYWNlIixuLm5hbWU9InBvaW50Y2xvdWQiLG4uYmFzZVBsb3RNb2R1bGU9dCgiLi4vLi4vcGxvdHMvZ2wyZCIpLG4uY2F0ZWdvcmllcz1bImdsIiwiZ2wyZCIsInNob3dMZWdlbmQiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHsiLi4vLi4vcGxvdHMvZ2wyZCI6NzcxLCIuLi9zY2F0dGVyM2QvY2FsYyI6MTA0MSwiLi9hdHRyaWJ1dGVzIjoxMDAyLCIuL2NvbnZlcnQiOjEwMDMsIi4vZGVmYXVsdHMiOjEwMDR9XSwxMDA2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2Z4L2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL3Bsb3RzL2RvbWFpbiIpLmF0dHJpYnV0ZXMsbD10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxjPXQoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbDtlLmV4cG9ydHM9Yyh7aG92ZXJpbmZvOmwoe30saS5ob3ZlcmluZm8se2ZsYWdzOlsibGFiZWwiLCJ0ZXh0IiwidmFsdWUiLCJwZXJjZW50IiwibmFtZSJdfSksaG92ZXJsYWJlbDpvLmhvdmVybGFiZWwsZG9tYWluOnMoe25hbWU6InNhbmtleSIsdHJhY2U6ITB9KSxvcmllbnRhdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidiIsImgiXSxkZmx0OiJoIn0sdmFsdWVmb3JtYXQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiLjNzIn0sdmFsdWVzdWZmaXg6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIn0sYXJyYW5nZW1lbnQ6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInNuYXAiLCJwZXJwZW5kaWN1bGFyIiwiZnJlZWZvcm0iLCJmaXhlZCJdLGRmbHQ6InNuYXAifSx0ZXh0Zm9udDpuKHt9KSxub2RlOntsYWJlbDp7dmFsVHlwZToiZGF0YV9hcnJheSIsZGZsdDpbXX0sY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixhcnJheU9rOiEwfSxsaW5lOntjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6YS5kZWZhdWx0TGluZSxhcnJheU9rOiEwfSx3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0Oi41LGFycmF5T2s6ITB9fSxwYWQ6e3ZhbFR5cGU6Im51bWJlciIsYXJyYXlPazohMSxtaW46MCxkZmx0OjIwfSx0aGlja25lc3M6e3ZhbFR5cGU6Im51bWJlciIsYXJyYXlPazohMSxtaW46MSxkZmx0OjIwfX0sbGluazp7bGFiZWw6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGRmbHQ6W119LGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsYXJyYXlPazohMH0sbGluZTp7Y29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmEuZGVmYXVsdExpbmUsYXJyYXlPazohMH0sd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDowLGFycmF5T2s6ITB9fSxzb3VyY2U6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGRmbHQ6W119LHRhcmdldDp7dmFsVHlwZToiZGF0YV9hcnJheSIsZGZsdDpbXX0sdmFsdWU6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGRmbHQ6W119fX0sImNhbGMiLCJuZXN0ZWQiKX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiOjU1NywiLi4vLi4vY29tcG9uZW50cy9meC9hdHRyaWJ1dGVzIjo1OTIsIi4uLy4uL2xpYi9leHRlbmQiOjY3MywiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6NzE1LCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo3MjksIi4uLy4uL3Bsb3RzL2RvbWFpbiI6NzU3LCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjc1OH1dLDEwMDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsLGk9dCgiLi4vLi4vcGxvdHMvZ2V0X2RhdGEiKS5nZXRNb2R1bGVDYWxjRGF0YSxhPXQoIi4vcGxvdCIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9meC9sYXlvdXRfYXR0cmlidXRlcyIpO3IubmFtZT0ic2Fua2V5IixyLmJhc2VMYXlvdXRBdHRyT3ZlcnJpZGVzPW4oe2hvdmVybGFiZWw6by5ob3ZlcmxhYmVsfSwicGxvdCIsIm5lc3RlZCIpLHIucGxvdD1mdW5jdGlvbih0KXt2YXIgZT1pKHQuY2FsY2RhdGEsInNhbmtleSIpWzBdO2EodCxlKX0sci5jbGVhbj1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1uLl9oYXMmJm4uX2hhcygic2Fua2V5IiksYT1lLl9oYXMmJmUuX2hhcygic2Fua2V5Iik7aSYmIWEmJm4uX3BhcGVyZGl2LnNlbGVjdEFsbCgiLnNhbmtleSIpLnJlbW92ZSgpfX0seyIuLi8uLi9jb21wb25lbnRzL2Z4L2xheW91dF9hdHRyaWJ1dGVzIjo2MDEsIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjcxNSwiLi4vLi4vcGxvdHMvZ2V0X2RhdGEiOjc2OCwiLi9wbG90IjoxMDEyfV0sMTAwODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJzdHJvbmdseS1jb25uZWN0ZWQtY29tcG9uZW50cyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9saWIvZ3VwIikud3JhcDtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgYT10Lmxlbmd0aCxvPWkuaW5pdDJkQXJyYXkoYSwwKSxzPTA7czxNYXRoLm1pbihlLmxlbmd0aCxyLmxlbmd0aCk7cysrKWlmKGkuaXNJbmRleChlW3NdLGEpJiZpLmlzSW5kZXgocltzXSxhKSl7aWYoZVtzXT09PXJbc10pcmV0dXJuITA7b1tlW3NdXS5wdXNoKHJbc10pfXJldHVybiBuKG8pLmNvbXBvbmVudHMuc29tZShmdW5jdGlvbih0KXtyZXR1cm4gdC5sZW5ndGg+MX0pfShlLm5vZGUubGFiZWwsZS5saW5rLnNvdXJjZSxlLmxpbmsudGFyZ2V0KSYmKGkuZXJyb3IoIkNpcmN1bGFyaXR5IGlzIHByZXNlbnQgaW4gdGhlIFNhbmtleSBkYXRhLiBSZW1vdmluZyBhbGwgbm9kZXMgYW5kIGxpbmtzLiIpLGUubGluay5sYWJlbD1bXSxlLmxpbmsuc291cmNlPVtdLGUubGluay50YXJnZXQ9W10sZS5saW5rLnZhbHVlPVtdLGUubGluay5jb2xvcj1bXSxlLm5vZGUubGFiZWw9W10sZS5ub2RlLmNvbG9yPVtdKSxhKHtsaW5rOmUubGluayxub2RlOmUubm9kZX0pfX0seyIuLi8uLi9saWIiOjY4NCwiLi4vLi4vbGliL2d1cCI6NjgxLCJzdHJvbmdseS1jb25uZWN0ZWQtY29tcG9uZW50cyI6NDkxfV0sMTAwOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e25vZGVUZXh0T2Zmc2V0SG9yaXpvbnRhbDo0LG5vZGVUZXh0T2Zmc2V0VmVydGljYWw6Myxub2RlUGFkQWNyb3NzOjEwLHNhbmtleUl0ZXJhdGlvbnM6NTAsZm9yY2VJdGVyYXRpb25zOjUsZm9yY2VUaWNrc1BlckZyYW1lOjEwLGR1cmF0aW9uOjUwMCxlYXNlOiJjdWJpYy1pbi1vdXQiLGNuOntzYW5rZXk6InNhbmtleSIsc2Fua2V5TGlua3M6InNhbmtleS1saW5rcyIsc2Fua2V5TGluazoic2Fua2V5LWxpbmsiLHNhbmtleU5vZGVTZXQ6InNhbmtleS1ub2RlLXNldCIsc2Fua2V5Tm9kZToic2Fua2V5LW5vZGUiLG5vZGVSZWN0OiJub2RlLXJlY3QiLG5vZGVDYXB0dXJlOiJub2RlLWNhcHR1cmUiLG5vZGVDZW50ZXJlZDoibm9kZS1lbnRlcmVkIixub2RlTGFiZWxHdWlkZToibm9kZS1sYWJlbC1ndWlkZSIsbm9kZUxhYmVsOiJub2RlLWxhYmVsIixub2RlTGFiZWxUZXh0UGF0aDoibm9kZS1sYWJlbC10ZXh0LXBhdGgifX19LHt9XSwxMDEwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksbz10KCJ0aW55Y29sb3IyIikscz10KCIuLi8uLi9wbG90cy9kb21haW4iKS5kZWZhdWx0cztlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbCl7ZnVuY3Rpb24gYyhyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaSxyLGEpfWMoIm5vZGUubGFiZWwiKSxjKCJub2RlLnBhZCIpLGMoIm5vZGUudGhpY2tuZXNzIiksYygibm9kZS5saW5lLmNvbG9yIiksYygibm9kZS5saW5lLndpZHRoIik7dmFyIHU9bC5jb2xvcndheTtjKCJub2RlLmNvbG9yIixlLm5vZGUubGFiZWwubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGEuYWRkT3BhY2l0eShmdW5jdGlvbih0KXtyZXR1cm4gdVt0JXUubGVuZ3RoXX0oZSksLjgpfSkpLGMoImxpbmsubGFiZWwiKSxjKCJsaW5rLnNvdXJjZSIpLGMoImxpbmsudGFyZ2V0IiksYygibGluay52YWx1ZSIpLGMoImxpbmsubGluZS5jb2xvciIpLGMoImxpbmsubGluZS53aWR0aCIpLGMoImxpbmsuY29sb3IiLGUubGluay52YWx1ZS5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gbyhsLnBhcGVyX2JnY29sb3IpLmdldEx1bWluYW5jZSgpPC4zMzM/InJnYmEoMjU1LCAyNTUsIDI1NSwgMC42KSI6InJnYmEoMCwgMCwgMCwgMC4yKSJ9KSkscyhlLGwsYyksYygib3JpZW50YXRpb24iKSxjKCJ2YWx1ZWZvcm1hdCIpLGMoInZhbHVlc3VmZml4IiksYygiYXJyYW5nZW1lbnQiKSxuLmNvZXJjZUZvbnQoYywidGV4dGZvbnQiLG4uZXh0ZW5kRmxhdCh7fSxsLmZvbnQpKSxlLl9sZW5ndGg9bnVsbH19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NTU4LCIuLi8uLi9saWIiOjY4NCwiLi4vLi4vcGxvdHMvZG9tYWluIjo3NTcsIi4vYXR0cmlidXRlcyI6MTAwNix0aW55Y29sb3IyOjQ5OX1dLDEwMTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoIi4vYXR0cmlidXRlcyIpLG4uc3VwcGx5RGVmYXVsdHM9dCgiLi9kZWZhdWx0cyIpLG4uY2FsYz10KCIuL2NhbGMiKSxuLnBsb3Q9dCgiLi9wbG90Iiksbi5tb2R1bGVUeXBlPSJ0cmFjZSIsbi5uYW1lPSJzYW5rZXkiLG4uYmFzZVBsb3RNb2R1bGU9dCgiLi9iYXNlX3Bsb3QiKSxuLmNhdGVnb3JpZXM9WyJub09wYWNpdHkiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHsiLi9hdHRyaWJ1dGVzIjoxMDA2LCIuL2Jhc2VfcGxvdCI6MTAwNywiLi9jYWxjIjoxMDA4LCIuL2RlZmF1bHRzIjoxMDEwLCIuL3Bsb3QiOjEwMTJ9XSwxMDEyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCIuL3JlbmRlciIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9meCIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLHM9dCgiLi4vLi4vbGliIiksbD10KCIuL2NvbnN0YW50cyIpLmNuLGM9cy5fO2Z1bmN0aW9uIHUodCl7cmV0dXJuIiIhPT10fWZ1bmN0aW9uIGgodCxlKXtyZXR1cm4gdC5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQua2V5PT09ZS50cmFjZUlkfSl9ZnVuY3Rpb24gZih0LGUpe24uc2VsZWN0KHQpLnNlbGVjdCgicGF0aCIpLnN0eWxlKCJmaWxsLW9wYWNpdHkiLGUpLG4uc2VsZWN0KHQpLnNlbGVjdCgicmVjdCIpLnN0eWxlKCJmaWxsLW9wYWNpdHkiLGUpfWZ1bmN0aW9uIHAodCl7bi5zZWxlY3QodCkuc2VsZWN0KCJ0ZXh0Lm5hbWUiKS5zdHlsZSgiZmlsbCIsImJsYWNrIil9ZnVuY3Rpb24gZCh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuLTEhPT10Lm5vZGUuc291cmNlTGlua3MuaW5kZXhPZihlLmxpbmspfHwtMSE9PXQubm9kZS50YXJnZXRMaW5rcy5pbmRleE9mKGUubGluayl9fWZ1bmN0aW9uIGcodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybi0xIT09ZS5ub2RlLnNvdXJjZUxpbmtzLmluZGV4T2YodC5saW5rKXx8LTEhPT1lLm5vZGUudGFyZ2V0TGlua3MuaW5kZXhPZih0LmxpbmspfX1mdW5jdGlvbiBtKHQsZSxyKXtlJiZyJiZoKHIsZSkuc2VsZWN0QWxsKCIuIitsLnNhbmtleUxpbmspLmZpbHRlcihkKGUpKS5jYWxsKHkuYmluZCgwLGUsciwhMSkpfWZ1bmN0aW9uIHYodCxlLHIpe2UmJnImJmgocixlKS5zZWxlY3RBbGwoIi4iK2wuc2Fua2V5TGluaykuZmlsdGVyKGQoZSkpLmNhbGwoeC5iaW5kKDAsZSxyLCExKSl9ZnVuY3Rpb24geSh0LGUscixuKXt2YXIgaT1uLmRhdHVtKCkubGluay5sYWJlbDtuLnN0eWxlKCJmaWxsLW9wYWNpdHkiLC40KSxpJiZoKGUsdCkuc2VsZWN0QWxsKCIuIitsLnNhbmtleUxpbmspLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC5saW5rLmxhYmVsPT09aX0pLnN0eWxlKCJmaWxsLW9wYWNpdHkiLC40KSxyJiZoKGUsdCkuc2VsZWN0QWxsKCIuIitsLnNhbmtleU5vZGUpLmZpbHRlcihnKHQpKS5jYWxsKG0pfWZ1bmN0aW9uIHgodCxlLHIsbil7dmFyIGk9bi5kYXR1bSgpLmxpbmsubGFiZWw7bi5zdHlsZSgiZmlsbC1vcGFjaXR5IixmdW5jdGlvbih0KXtyZXR1cm4gdC50aW55Q29sb3JBbHBoYX0pLGkmJmgoZSx0KS5zZWxlY3RBbGwoIi4iK2wuc2Fua2V5TGluaykuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LmxpbmsubGFiZWw9PT1pfSkuc3R5bGUoImZpbGwtb3BhY2l0eSIsZnVuY3Rpb24odCl7cmV0dXJuIHQudGlueUNvbG9yQWxwaGF9KSxyJiZoKGUsdCkuc2VsZWN0QWxsKGwuc2Fua2V5Tm9kZSkuZmlsdGVyKGcodCkpLmNhbGwodil9ZnVuY3Rpb24gYih0LGUpe3ZhciByPXQuaG92ZXJsYWJlbHx8e30sbj1zLm5lc3RlZFByb3BlcnR5KHIsZSkuZ2V0KCk7cmV0dXJuIUFycmF5LmlzQXJyYXkobikmJm59ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fZnVsbExheW91dCxzPXIuX3BhcGVyLGg9ci5fc2l6ZSxkPWModCwic291cmNlOiIpKyIgIixnPWModCwidGFyZ2V0OiIpKyIgIixfPWModCwiaW5jb21pbmcgZmxvdyBjb3VudDoiKSsiICIsdz1jKHQsIm91dGdvaW5nIGZsb3cgY291bnQ6IikrIiAiO2kocyxlLHt3aWR0aDpoLncsaGVpZ2h0OmguaCxtYXJnaW46e3Q6aC50LHI6aC5yLGI6aC5iLGw6aC5sfX0se2xpbmtFdmVudHM6e2hvdmVyOmZ1bmN0aW9uKGUscixpKXtuLnNlbGVjdChlKS5jYWxsKHkuYmluZCgwLHIsaSwhMCkpLHQuZW1pdCgicGxvdGx5X2hvdmVyIix7ZXZlbnQ6bi5ldmVudCxwb2ludHM6W3IubGlua119KX0sZm9sbG93OmZ1bmN0aW9uKGUsaSl7dmFyIHM9aS5saW5rLnRyYWNlLGw9dC5fZnVsbExheW91dC5fcGFwZXJkaXYubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGM9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxoPWMubGVmdCtjLndpZHRoLzIsbT1jLnRvcCtjLmhlaWdodC8yLHY9YS5sb25lSG92ZXIoe3g6aC1sLmxlZnQseTptLWwudG9wLG5hbWU6bi5mb3JtYXQoaS52YWx1ZUZvcm1hdCkoaS5saW5rLnZhbHVlKStpLnZhbHVlU3VmZml4LHRleHQ6W2kubGluay5sYWJlbHx8IiIsZCtpLmxpbmsuc291cmNlLmxhYmVsLGcraS5saW5rLnRhcmdldC5sYWJlbF0uZmlsdGVyKHUpLmpvaW4oIjxicj4iKSxjb2xvcjpiKHMsImJnY29sb3IiKXx8by5hZGRPcGFjaXR5KGkudGlueUNvbG9ySHVlLDEpLGJvcmRlckNvbG9yOmIocywiYm9yZGVyY29sb3IiKSxmb250RmFtaWx5OmIocywiZm9udC5mYW1pbHkiKSxmb250U2l6ZTpiKHMsImZvbnQuc2l6ZSIpLGZvbnRDb2xvcjpiKHMsImZvbnQuY29sb3IiKSxpZGVhbEFsaWduOm4uZXZlbnQueDxoPyJyaWdodCI6ImxlZnQifSx7Y29udGFpbmVyOnIuX2hvdmVybGF5ZXIubm9kZSgpLG91dGVyQ29udGFpbmVyOnIuX3BhcGVyLm5vZGUoKSxnZDp0fSk7Zih2LC42NSkscCh2KX0sdW5ob3ZlcjpmdW5jdGlvbihlLGksbyl7bi5zZWxlY3QoZSkuY2FsbCh4LmJpbmQoMCxpLG8sITApKSx0LmVtaXQoInBsb3RseV91bmhvdmVyIix7ZXZlbnQ6bi5ldmVudCxwb2ludHM6W2kubGlua119KSxhLmxvbmVVbmhvdmVyKHIuX2hvdmVybGF5ZXIubm9kZSgpKX0sc2VsZWN0OmZ1bmN0aW9uKGUscil7dmFyIGk9ci5saW5rO2kub3JpZ2luYWxFdmVudD1uLmV2ZW50LHQuX2hvdmVyZGF0YT1baV0sYS5jbGljayh0LHt0YXJnZXQ6ITB9KX19LG5vZGVFdmVudHM6e2hvdmVyOmZ1bmN0aW9uKGUscixpKXtuLnNlbGVjdChlKS5jYWxsKG0scixpKSx0LmVtaXQoInBsb3RseV9ob3ZlciIse2V2ZW50Om4uZXZlbnQscG9pbnRzOltyLm5vZGVdfSl9LGZvbGxvdzpmdW5jdGlvbihlLGkpe3ZhciBvPWkubm9kZS50cmFjZSxzPW4uc2VsZWN0KGUpLnNlbGVjdCgiLiIrbC5ub2RlUmVjdCksYz10Ll9mdWxsTGF5b3V0Ll9wYXBlcmRpdi5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksaD1zLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxkPWgubGVmdC0yLWMubGVmdCxnPWgucmlnaHQrMi1jLmxlZnQsbT1oLnRvcCtoLmhlaWdodC80LWMudG9wLHY9YS5sb25lSG92ZXIoe3gwOmQseDE6Zyx5Om0sbmFtZTpuLmZvcm1hdChpLnZhbHVlRm9ybWF0KShpLm5vZGUudmFsdWUpK2kudmFsdWVTdWZmaXgsdGV4dDpbaS5ub2RlLmxhYmVsLF8raS5ub2RlLnRhcmdldExpbmtzLmxlbmd0aCx3K2kubm9kZS5zb3VyY2VMaW5rcy5sZW5ndGhdLmZpbHRlcih1KS5qb2luKCI8YnI+IiksY29sb3I6YihvLCJiZ2NvbG9yIil8fGkudGlueUNvbG9ySHVlLGJvcmRlckNvbG9yOmIobywiYm9yZGVyY29sb3IiKSxmb250RmFtaWx5OmIobywiZm9udC5mYW1pbHkiKSxmb250U2l6ZTpiKG8sImZvbnQuc2l6ZSIpLGZvbnRDb2xvcjpiKG8sImZvbnQuY29sb3IiKSxpZGVhbEFsaWduOiJsZWZ0In0se2NvbnRhaW5lcjpyLl9ob3ZlcmxheWVyLm5vZGUoKSxvdXRlckNvbnRhaW5lcjpyLl9wYXBlci5ub2RlKCksZ2Q6dH0pO2YodiwuODUpLHAodil9LHVuaG92ZXI6ZnVuY3Rpb24oZSxpLG8pe24uc2VsZWN0KGUpLmNhbGwodixpLG8pLHQuZW1pdCgicGxvdGx5X3VuaG92ZXIiLHtldmVudDpuLmV2ZW50LHBvaW50czpbaS5ub2RlXX0pLGEubG9uZVVuaG92ZXIoci5faG92ZXJsYXllci5ub2RlKCkpfSxzZWxlY3Q6ZnVuY3Rpb24oZSxyLGkpe3ZhciBvPXIubm9kZTtvLm9yaWdpbmFsRXZlbnQ9bi5ldmVudCx0Ll9ob3ZlcmRhdGE9W29dLG4uc2VsZWN0KGUpLmNhbGwodixyLGkpLGEuY2xpY2sodCx7dGFyZ2V0OiEwfSl9fX0pfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo1NTgsIi4uLy4uL2NvbXBvbmVudHMvZngiOjYwMCwiLi4vLi4vbGliIjo2ODQsIi4vY29uc3RhbnRzIjoxMDA5LCIuL3JlbmRlciI6MTAxMyxkMzoxNDd9XSwxMDEzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vY29uc3RhbnRzIiksaT10KCJkMyIpLGE9dCgidGlueWNvbG9yMiIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLHM9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksbD10KCJAcGxvdGx5L2QzLXNhbmtleSIpLnNhbmtleSxjPXQoImQzLWZvcmNlIiksdT10KCIuLi8uLi9saWIiKSxoPXUuaXNBcnJheU9yVHlwZWRBcnJheSxmPXUuaXNJbmRleCxwPXQoIi4uLy4uL2xpYi9ndXAiKSxkPXAua2V5RnVuLGc9cC5yZXBlYXQsbT1wLnVud3JhcDtmdW5jdGlvbiB2KHQpe3QubGFzdERyYWdnZWRYPXQueCx0Lmxhc3REcmFnZ2VkWT10Lnl9ZnVuY3Rpb24geSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGUubm9kZS5vcmlnaW5hbFg9PT10Lm5vZGUub3JpZ2luYWxYfX1mdW5jdGlvbiB4KHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXRbZV0ueT10W2VdLnkrdFtlXS5keS8yfWZ1bmN0aW9uIGIodCl7dC5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKHQpe3JldHVybiJ0cmFuc2xhdGUoIit0Lm5vZGUueC50b0ZpeGVkKDMpKyIsICIrKHQubm9kZS55LXQubm9kZS5keS8yKS50b0ZpeGVkKDMpKyIpIn0pfWZ1bmN0aW9uIF8odCl7dmFyIGU9dC5zYW5rZXkubm9kZXMoKTshZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspdFtlXS55PXRbZV0ueS10W2VdLmR5LzJ9KGUpO3ZhciByPXQuc2Fua2V5LmxpbmsoKSh0LmxpbmspO3JldHVybiB4KGUpLHJ9ZnVuY3Rpb24gdyh0KXt0LmNhbGwoYil9ZnVuY3Rpb24gayh0LGUpe3QuY2FsbCh3KSxlLmF0dHIoImQiLF8pfWZ1bmN0aW9uIE0odCl7dC5hdHRyKCJ3aWR0aCIsZnVuY3Rpb24odCl7cmV0dXJuIHQudmlzaWJsZVdpZHRofSkuYXR0cigiaGVpZ2h0IixmdW5jdGlvbih0KXtyZXR1cm4gdC52aXNpYmxlSGVpZ2h0fSl9ZnVuY3Rpb24gQSh0KXtyZXR1cm4gdC5saW5rLmR5PjF8fHQubGlua0xpbmVXaWR0aD4wfWZ1bmN0aW9uIFQodCl7cmV0dXJuInRyYW5zbGF0ZSgiK3QudHJhbnNsYXRlWCsiLCIrdC50cmFuc2xhdGVZKyIpIisodC5ob3Jpem9udGFsPyJtYXRyaXgoMSAwIDAgMSAwIDApIjoibWF0cml4KDAgMSAxIDAgMCAwKSIpfWZ1bmN0aW9uIFModCl7cmV0dXJuInRyYW5zbGF0ZSgiKyh0Lmhvcml6b250YWw/MDp0LmxhYmVsWSkrIiAiKyh0Lmhvcml6b250YWw/dC5sYWJlbFk6MCkrIikifWZ1bmN0aW9uIEUodCl7cmV0dXJuIGkuc3ZnLmxpbmUoKShbW3QuaG9yaXpvbnRhbD90LmxlZnQ/LXQuc2l6ZUFjcm9zczp0LnZpc2libGVXaWR0aCtuLm5vZGVUZXh0T2Zmc2V0SG9yaXpvbnRhbDpuLm5vZGVUZXh0T2Zmc2V0SG9yaXpvbnRhbCwwXSxbdC5ob3Jpem9udGFsP3QubGVmdD8tbi5ub2RlVGV4dE9mZnNldEhvcml6b250YWw6dC5zaXplQWNyb3NzOnQudmlzaWJsZUhlaWdodC1uLm5vZGVUZXh0T2Zmc2V0SG9yaXpvbnRhbCwwXV0pfWZ1bmN0aW9uIEModCl7cmV0dXJuIHQuaG9yaXpvbnRhbD8ibWF0cml4KDEgMCAwIDEgMCAwKSI6Im1hdHJpeCgwIDEgMSAwIDAgMCkifWZ1bmN0aW9uIEwodCl7cmV0dXJuIHQuaG9yaXpvbnRhbD8ic2NhbGUoMSAxKSI6InNjYWxlKC0xIDEpIn1mdW5jdGlvbiB6KHQpe3JldHVybiB0LmRhcmtCYWNrZ3JvdW5kJiYhdC5ob3Jpem9udGFsPyJyZ2IoMjU1LDI1NSwyNTUpIjoicmdiKDAsMCwwKSJ9ZnVuY3Rpb24gUCh0KXtyZXR1cm4gdC5ob3Jpem9udGFsJiZ0LmxlZnQ/IjEwMCUiOiIwJSJ9ZnVuY3Rpb24gSSh0LGUscil7dC5vbigiLmJhc2ljIixudWxsKS5vbigibW91c2VvdmVyLmJhc2ljIixmdW5jdGlvbih0KXt0LmludGVyYWN0aW9uU3RhdGUuZHJhZ0luUHJvZ3Jlc3N8fChyLmhvdmVyKHRoaXMsdCxlKSx0LmludGVyYWN0aW9uU3RhdGUuaG92ZXJlZD1bdGhpcyx0XSl9KS5vbigibW91c2Vtb3ZlLmJhc2ljIixmdW5jdGlvbih0KXt0LmludGVyYWN0aW9uU3RhdGUuZHJhZ0luUHJvZ3Jlc3N8fChyLmZvbGxvdyh0aGlzLHQpLHQuaW50ZXJhY3Rpb25TdGF0ZS5ob3ZlcmVkPVt0aGlzLHRdKX0pLm9uKCJtb3VzZW91dC5iYXNpYyIsZnVuY3Rpb24odCl7dC5pbnRlcmFjdGlvblN0YXRlLmRyYWdJblByb2dyZXNzfHwoci51bmhvdmVyKHRoaXMsdCxlKSx0LmludGVyYWN0aW9uU3RhdGUuaG92ZXJlZD0hMSl9KS5vbigiY2xpY2suYmFzaWMiLGZ1bmN0aW9uKHQpe3QuaW50ZXJhY3Rpb25TdGF0ZS5ob3ZlcmVkJiYoci51bmhvdmVyKHRoaXMsdCxlKSx0LmludGVyYWN0aW9uU3RhdGUuaG92ZXJlZD0hMSksdC5pbnRlcmFjdGlvblN0YXRlLmRyYWdJblByb2dyZXNzfHxyLnNlbGVjdCh0aGlzLHQsZSl9KX1mdW5jdGlvbiBPKHQsZSxyKXt2YXIgYT1pLmJlaGF2aW9yLmRyYWcoKS5vcmlnaW4oZnVuY3Rpb24odCl7cmV0dXJuIHQubm9kZX0pLm9uKCJkcmFnc3RhcnQiLGZ1bmN0aW9uKGkpe2lmKCJmaXhlZCIhPT1pLmFycmFuZ2VtZW50JiYodS5yYWlzZVRvVG9wKHRoaXMpLGkuaW50ZXJhY3Rpb25TdGF0ZS5kcmFnSW5Qcm9ncmVzcz1pLm5vZGUsdihpLm5vZGUpLGkuaW50ZXJhY3Rpb25TdGF0ZS5ob3ZlcmVkJiYoci5ub2RlRXZlbnRzLnVuaG92ZXIuYXBwbHkoMCxpLmludGVyYWN0aW9uU3RhdGUuaG92ZXJlZCksaS5pbnRlcmFjdGlvblN0YXRlLmhvdmVyZWQ9ITEpLCJzbmFwIj09PWkuYXJyYW5nZW1lbnQpKXt2YXIgYT1pLnRyYWNlSWQrInwiK01hdGguZmxvb3IoaS5ub2RlLm9yaWdpbmFsWCk7aS5mb3JjZUxheW91dHNbYV0/aS5mb3JjZUxheW91dHNbYV0uYWxwaGEoMSk6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXIuc2Fua2V5Lm5vZGVzKCkuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm9yaWdpbmFsWD09PXIubm9kZS5vcmlnaW5hbFh9KTtyLmZvcmNlTGF5b3V0c1tlXT1jLmZvcmNlU2ltdWxhdGlvbihpKS5hbHBoYURlY2F5KDApLmZvcmNlKCJjb2xsaWRlIixjLmZvcmNlQ29sbGlkZSgpLnJhZGl1cyhmdW5jdGlvbih0KXtyZXR1cm4gdC5keS8yK3Iubm9kZVBhZC8yfSkuc3RyZW5ndGgoMSkuaXRlcmF0aW9ucyhuLmZvcmNlSXRlcmF0aW9ucykpLmZvcmNlKCJjb25zdHJhaW4iLGZ1bmN0aW9uKHQsZSxyLGkpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgdD0wLGE9MDthPHIubGVuZ3RoO2ErKyl7dmFyIG89clthXTtvPT09aS5pbnRlcmFjdGlvblN0YXRlLmRyYWdJblByb2dyZXNzPyhvLng9by5sYXN0RHJhZ2dlZFgsby55PW8ubGFzdERyYWdnZWRZKTooby52eD0oby5vcmlnaW5hbFgtby54KS9uLmZvcmNlVGlja3NQZXJGcmFtZSxvLnk9TWF0aC5taW4oaS5zaXplLW8uZHkvMixNYXRoLm1heChvLmR5LzIsby55KSkpLHQ9TWF0aC5tYXgodCxNYXRoLmFicyhvLnZ4KSxNYXRoLmFicyhvLnZ5KSl9IWkuaW50ZXJhY3Rpb25TdGF0ZS5kcmFnSW5Qcm9ncmVzcyYmdDwuMSYmaS5mb3JjZUxheW91dHNbZV0uYWxwaGEoKT4wJiZpLmZvcmNlTGF5b3V0c1tlXS5hbHBoYSgwKX19KDAsZSxpLHIpKS5zdG9wKCl9KDAsYSxpKSxmdW5jdGlvbih0LGUscixpKXt3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uIGEoKXtmb3IodmFyIG89MDtvPG4uZm9yY2VUaWNrc1BlckZyYW1lO28rKylyLmZvcmNlTGF5b3V0c1tpXS50aWNrKCk7ci5zYW5rZXkucmVsYXlvdXQoKSxrKHQuZmlsdGVyKHkocikpLGUpLHIuZm9yY2VMYXlvdXRzW2ldLmFscGhhKCk+MCYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShhKX0pfSh0LGUsaSxhKX19KS5vbigiZHJhZyIsZnVuY3Rpb24ocil7aWYoImZpeGVkIiE9PXIuYXJyYW5nZW1lbnQpe3ZhciBuPWkuZXZlbnQueCxhPWkuZXZlbnQueTsic25hcCI9PT1yLmFycmFuZ2VtZW50PyhyLm5vZGUueD1uLHIubm9kZS55PWEpOigiZnJlZWZvcm0iPT09ci5hcnJhbmdlbWVudCYmKHIubm9kZS54PW4pLHIubm9kZS55PU1hdGgubWF4KHIubm9kZS5keS8yLE1hdGgubWluKHIuc2l6ZS1yLm5vZGUuZHkvMixhKSkpLHYoci5ub2RlKSwic25hcCIhPT1yLmFycmFuZ2VtZW50JiYoci5zYW5rZXkucmVsYXlvdXQoKSxrKHQuZmlsdGVyKHkocikpLGUpKX19KS5vbigiZHJhZ2VuZCIsZnVuY3Rpb24odCl7dC5pbnRlcmFjdGlvblN0YXRlLmRyYWdJblByb2dyZXNzPSExfSk7dC5vbigiLmRyYWciLG51bGwpLmNhbGwoYSl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBjPXQuc2VsZWN0QWxsKCIuIituLmNuLnNhbmtleSkuZGF0YShlLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gbSh0KS50cmFjZS52aXNpYmxlfSkubWFwKGZ1bmN0aW9uKHQsZSxyKXt2YXIgaSxhPW0oZSkudHJhY2Usbz1hLmRvbWFpbixzPWEubm9kZSxjPWEubGluayx1PWEuYXJyYW5nZW1lbnQscD0iaCI9PT1hLm9yaWVudGF0aW9uLGQ9YS5ub2RlLnBhZCxnPWEubm9kZS50aGlja25lc3Msdj1hLm5vZGUubGluZS5jb2xvcix5PWEubm9kZS5saW5lLndpZHRoLGI9YS5saW5rLmxpbmUuY29sb3IsXz1hLmxpbmsubGluZS53aWR0aCx3PWEudmFsdWVmb3JtYXQsaz1hLnZhbHVlc3VmZml4LE09YS50ZXh0Zm9udCxBPXQud2lkdGgqKG8ueFsxXS1vLnhbMF0pLFQ9dC5oZWlnaHQqKG8ueVsxXS1vLnlbMF0pLFM9W10sRT1oKGMuY29sb3IpLEM9e30sTD1zLmxhYmVsLmxlbmd0aDtmb3IoaT0wO2k8Yy52YWx1ZS5sZW5ndGg7aSsrKXt2YXIgej1jLnZhbHVlW2ldLFA9Yy5zb3VyY2VbaV0sST1jLnRhcmdldFtpXTt6PjAmJmYoUCxMKSYmZihJLEwpJiYoST0rSSxDW1A9K1BdPUNbSV09ITAsUy5wdXNoKHtwb2ludE51bWJlcjppLGxhYmVsOmMubGFiZWxbaV0sY29sb3I6RT9jLmNvbG9yW2ldOmMuY29sb3Isc291cmNlOlAsdGFyZ2V0OkksdmFsdWU6K3p9KSl9dmFyIE89aChzLmNvbG9yKSxEPVtdLFI9ITEsQj17fTtmb3IoaT0wO2k8TDtpKyspaWYoQ1tpXSl7dmFyIEY9cy5sYWJlbFtpXTtCW2ldPUQubGVuZ3RoLEQucHVzaCh7cG9pbnROdW1iZXI6aSxsYWJlbDpGLGNvbG9yOk8/cy5jb2xvcltpXTpzLmNvbG9yfSl9ZWxzZSBSPSEwO2lmKFIpZm9yKGk9MDtpPFMubGVuZ3RoO2krKylTW2ldLnNvdXJjZT1CW1NbaV0uc291cmNlXSxTW2ldLnRhcmdldD1CW1NbaV0udGFyZ2V0XTtmb3IodmFyIE4saj1sKCkuc2l6ZShwP1tBLFRdOltULEFdKS5ub2RlV2lkdGgoZykubm9kZVBhZGRpbmcoZCkubm9kZXMoRCkubGlua3MoUykubGF5b3V0KG4uc2Fua2V5SXRlcmF0aW9ucyksVj1qLm5vZGVzKCksVT0wO1U8Vi5sZW5ndGg7VSsrKShOPVZbVV0pLndpZHRoPUEsTi5oZWlnaHQ9VDtyZXR1cm4geChEKSx7a2V5OnIsdHJhY2U6YSxndWlkOk1hdGguZmxvb3IoMWUxMiooMStNYXRoLnJhbmRvbSgpKSksaG9yaXpvbnRhbDpwLHdpZHRoOkEsaGVpZ2h0OlQsbm9kZVBhZDpkLG5vZGVMaW5lQ29sb3I6dixub2RlTGluZVdpZHRoOnksbGlua0xpbmVDb2xvcjpiLGxpbmtMaW5lV2lkdGg6Xyx2YWx1ZUZvcm1hdDp3LHZhbHVlU3VmZml4OmssdGV4dEZvbnQ6TSx0cmFuc2xhdGVYOm8ueFswXSpBK3QubWFyZ2luLmwsdHJhbnNsYXRlWTp0LmhlaWdodC1vLnlbMV0qdC5oZWlnaHQrdC5tYXJnaW4udCxkcmFnUGFyYWxsZWw6cD9UOkEsZHJhZ1BlcnBlbmRpY3VsYXI6cD9BOlQsbm9kZXM6RCxsaW5rczpTLGFycmFuZ2VtZW50OnUsc2Fua2V5OmosZm9yY2VMYXlvdXRzOnt9LGludGVyYWN0aW9uU3RhdGU6e2RyYWdJblByb2dyZXNzOiExLGhvdmVyZWQ6ITF9fX0uYmluZChudWxsLHIpKSxkKTtjLmV4aXQoKS5yZW1vdmUoKSxjLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChuLmNuLnNhbmtleSwhMCkuc3R5bGUoImJveC1zaXppbmciLCJjb250ZW50LWJveCIpLnN0eWxlKCJwb3NpdGlvbiIsImFic29sdXRlIikuc3R5bGUoImxlZnQiLDApLnN0eWxlKCJzaGFwZS1yZW5kZXJpbmciLCJnZW9tZXRyaWNQcmVjaXNpb24iKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhdXRvIikuYXR0cigidHJhbnNmb3JtIixUKSxjLnRyYW5zaXRpb24oKS5lYXNlKG4uZWFzZSkuZHVyYXRpb24obi5kdXJhdGlvbikuYXR0cigidHJhbnNmb3JtIixUKTt2YXIgdT1jLnNlbGVjdEFsbCgiLiIrbi5jbi5zYW5rZXlMaW5rcykuZGF0YShnLGQpO3UuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKG4uY24uc2Fua2V5TGlua3MsITApLnN0eWxlKCJmaWxsIiwibm9uZSIpO3ZhciBwPXUuc2VsZWN0QWxsKCIuIituLmNuLnNhbmtleUxpbmspLmRhdGEoZnVuY3Rpb24odCl7cmV0dXJuIHQuc2Fua2V5LmxpbmtzKCkuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LnZhbHVlfSkubWFwKGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1hKHIuY29sb3IpLGk9ci5zb3VyY2UubGFiZWwrInwiK3IudGFyZ2V0LmxhYmVsLHM9dFtpXTt0W2ldPShzfHwwKSsxO3ZhciBsPWkrIl9fIit0W2ldO3JldHVybiByLnRyYWNlPWUudHJhY2Usci5jdXJ2ZU51bWJlcj1lLnRyYWNlLmluZGV4LHtrZXk6bCx0cmFjZUlkOmUua2V5LGxpbms6cix0aW55Q29sb3JIdWU6by50aW55UkdCKG4pLHRpbnlDb2xvckFscGhhOm4uZ2V0QWxwaGEoKSxsaW5rTGluZUNvbG9yOmUubGlua0xpbmVDb2xvcixsaW5rTGluZVdpZHRoOmUubGlua0xpbmVXaWR0aCx2YWx1ZUZvcm1hdDplLnZhbHVlRm9ybWF0LHZhbHVlU3VmZml4OmUudmFsdWVTdWZmaXgsc2Fua2V5OmUuc2Fua2V5LGludGVyYWN0aW9uU3RhdGU6ZS5pbnRlcmFjdGlvblN0YXRlfX0uYmluZChudWxsLHt9LHQpKX0sZCk7cC5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQobi5jbi5zYW5rZXlMaW5rLCEwKS5hdHRyKCJkIixfKS5jYWxsKEksYyxpLmxpbmtFdmVudHMpLHAuc3R5bGUoInN0cm9rZSIsZnVuY3Rpb24odCl7cmV0dXJuIEEodCk/by50aW55UkdCKGEodC5saW5rTGluZUNvbG9yKSk6dC50aW55Q29sb3JIdWV9KS5zdHlsZSgic3Ryb2tlLW9wYWNpdHkiLGZ1bmN0aW9uKHQpe3JldHVybiBBKHQpP28ub3BhY2l0eSh0LmxpbmtMaW5lQ29sb3IpOnQudGlueUNvbG9yQWxwaGF9KS5zdHlsZSgic3Ryb2tlLXdpZHRoIixmdW5jdGlvbih0KXtyZXR1cm4gQSh0KT90LmxpbmtMaW5lV2lkdGg6MX0pLnN0eWxlKCJmaWxsIixmdW5jdGlvbih0KXtyZXR1cm4gdC50aW55Q29sb3JIdWV9KS5zdHlsZSgiZmlsbC1vcGFjaXR5IixmdW5jdGlvbih0KXtyZXR1cm4gdC50aW55Q29sb3JBbHBoYX0pLHAudHJhbnNpdGlvbigpLmVhc2Uobi5lYXNlKS5kdXJhdGlvbihuLmR1cmF0aW9uKS5hdHRyKCJkIixfKSxwLmV4aXQoKS50cmFuc2l0aW9uKCkuZWFzZShuLmVhc2UpLmR1cmF0aW9uKG4uZHVyYXRpb24pLnN0eWxlKCJvcGFjaXR5IiwwKS5yZW1vdmUoKTt2YXIgdj1jLnNlbGVjdEFsbCgiLiIrbi5jbi5zYW5rZXlOb2RlU2V0KS5kYXRhKGcsZCk7di5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQobi5jbi5zYW5rZXlOb2RlU2V0LCEwKSx2LnN0eWxlKCJjdXJzb3IiLGZ1bmN0aW9uKHQpe3N3aXRjaCh0LmFycmFuZ2VtZW50KXtjYXNlImZpeGVkIjpyZXR1cm4iZGVmYXVsdCI7Y2FzZSJwZXJwZW5kaWN1bGFyIjpyZXR1cm4ibnMtcmVzaXplIjtkZWZhdWx0OnJldHVybiJtb3ZlIn19KTt2YXIgeT12LnNlbGVjdEFsbCgiLiIrbi5jbi5zYW5rZXlOb2RlKS5kYXRhKGZ1bmN0aW9uKHQpe3ZhciBlPXQuc2Fua2V5Lm5vZGVzKCk7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlLHI9W107Zm9yKGU9MDtlPHQubGVuZ3RoO2UrKyl0W2VdLm9yaWdpbmFsWD10W2VdLngsdFtlXS5vcmlnaW5hbFk9dFtlXS55LC0xPT09ci5pbmRleE9mKHRbZV0ueCkmJnIucHVzaCh0W2VdLngpO2ZvcihyLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC1lfSksZT0wO2U8dC5sZW5ndGg7ZSsrKXRbZV0ub3JpZ2luYWxMYXllckluZGV4PXIuaW5kZXhPZih0W2VdLm9yaWdpbmFsWCksdFtlXS5vcmlnaW5hbExheWVyPXRbZV0ub3JpZ2luYWxMYXllckluZGV4LyhyLmxlbmd0aC0xKX0oZSksZS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQudmFsdWV9KS5tYXAoZnVuY3Rpb24odCxlLHIpe3ZhciBpPWEoci5jb2xvcikscz1uLm5vZGVQYWRBY3Jvc3MsbD1lLm5vZGVQYWQvMixjPXIuZHgsdT1NYXRoLm1heCguNSxyLmR5KSxoPXIubGFiZWwsZj10W2hdO3RbaF09KGZ8fDApKzE7dmFyIHA9aCsiX18iK3RbaF07cmV0dXJuIHIudHJhY2U9ZS50cmFjZSxyLmN1cnZlTnVtYmVyPWUudHJhY2UuaW5kZXgse2tleTpwLHRyYWNlSWQ6ZS5rZXksbm9kZTpyLG5vZGVQYWQ6ZS5ub2RlUGFkLG5vZGVMaW5lQ29sb3I6ZS5ub2RlTGluZUNvbG9yLG5vZGVMaW5lV2lkdGg6ZS5ub2RlTGluZVdpZHRoLHRleHRGb250OmUudGV4dEZvbnQsc2l6ZTplLmhvcml6b250YWw/ZS5oZWlnaHQ6ZS53aWR0aCx2aXNpYmxlV2lkdGg6TWF0aC5jZWlsKGMpLHZpc2libGVIZWlnaHQ6dSx6b25lWDotcyx6b25lWTotbCx6b25lV2lkdGg6YysyKnMsem9uZUhlaWdodDp1KzIqbCxsYWJlbFk6ZS5ob3Jpem9udGFsP3IuZHkvMisxOnIuZHgvMisxLGxlZnQ6MT09PXIub3JpZ2luYWxMYXllcixzaXplQWNyb3NzOmUud2lkdGgsZm9yY2VMYXlvdXRzOmUuZm9yY2VMYXlvdXRzLGhvcml6b250YWw6ZS5ob3Jpem9udGFsLGRhcmtCYWNrZ3JvdW5kOmkuZ2V0QnJpZ2h0bmVzcygpPD0xMjgsdGlueUNvbG9ySHVlOm8udGlueVJHQihpKSx0aW55Q29sb3JBbHBoYTppLmdldEFscGhhKCksdmFsdWVGb3JtYXQ6ZS52YWx1ZUZvcm1hdCx2YWx1ZVN1ZmZpeDplLnZhbHVlU3VmZml4LHNhbmtleTplLnNhbmtleSxhcnJhbmdlbWVudDplLmFycmFuZ2VtZW50LHVuaXF1ZU5vZGVMYWJlbFBhdGhJZDpbZS5ndWlkLGUua2V5LHBdLmpvaW4oIiAiKSxpbnRlcmFjdGlvblN0YXRlOmUuaW50ZXJhY3Rpb25TdGF0ZX19LmJpbmQobnVsbCx7fSx0KSl9LGQpO3kuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKG4uY24uc2Fua2V5Tm9kZSwhMCkuY2FsbChiKS5jYWxsKEksYyxpLm5vZGVFdmVudHMpLHkuY2FsbChPLHAsaSkseS50cmFuc2l0aW9uKCkuZWFzZShuLmVhc2UpLmR1cmF0aW9uKG4uZHVyYXRpb24pLmNhbGwoYikseS5leGl0KCkudHJhbnNpdGlvbigpLmVhc2Uobi5lYXNlKS5kdXJhdGlvbihuLmR1cmF0aW9uKS5zdHlsZSgib3BhY2l0eSIsMCkucmVtb3ZlKCk7dmFyIHc9eS5zZWxlY3RBbGwoIi4iK24uY24ubm9kZVJlY3QpLmRhdGEoZyk7dy5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQobi5jbi5ub2RlUmVjdCwhMCkuY2FsbChNKSx3LnN0eWxlKCJzdHJva2Utd2lkdGgiLGZ1bmN0aW9uKHQpe3JldHVybiB0Lm5vZGVMaW5lV2lkdGh9KS5zdHlsZSgic3Ryb2tlIixmdW5jdGlvbih0KXtyZXR1cm4gby50aW55UkdCKGEodC5ub2RlTGluZUNvbG9yKSl9KS5zdHlsZSgic3Ryb2tlLW9wYWNpdHkiLGZ1bmN0aW9uKHQpe3JldHVybiBvLm9wYWNpdHkodC5ub2RlTGluZUNvbG9yKX0pLnN0eWxlKCJmaWxsIixmdW5jdGlvbih0KXtyZXR1cm4gdC50aW55Q29sb3JIdWV9KS5zdHlsZSgiZmlsbC1vcGFjaXR5IixmdW5jdGlvbih0KXtyZXR1cm4gdC50aW55Q29sb3JBbHBoYX0pLHcudHJhbnNpdGlvbigpLmVhc2Uobi5lYXNlKS5kdXJhdGlvbihuLmR1cmF0aW9uKS5jYWxsKE0pO3ZhciBrPXkuc2VsZWN0QWxsKCIuIituLmNuLm5vZGVDYXB0dXJlKS5kYXRhKGcpO2suZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKG4uY24ubm9kZUNhcHR1cmUsITApLnN0eWxlKCJmaWxsLW9wYWNpdHkiLDApLGsuYXR0cigieCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuem9uZVh9KS5hdHRyKCJ5IixmdW5jdGlvbih0KXtyZXR1cm4gdC56b25lWX0pLmF0dHIoIndpZHRoIixmdW5jdGlvbih0KXtyZXR1cm4gdC56b25lV2lkdGh9KS5hdHRyKCJoZWlnaHQiLGZ1bmN0aW9uKHQpe3JldHVybiB0LnpvbmVIZWlnaHR9KTt2YXIgRD15LnNlbGVjdEFsbCgiLiIrbi5jbi5ub2RlQ2VudGVyZWQpLmRhdGEoZyk7RC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQobi5jbi5ub2RlQ2VudGVyZWQsITApLmF0dHIoInRyYW5zZm9ybSIsUyksRC50cmFuc2l0aW9uKCkuZWFzZShuLmVhc2UpLmR1cmF0aW9uKG4uZHVyYXRpb24pLmF0dHIoInRyYW5zZm9ybSIsUyk7dmFyIFI9RC5zZWxlY3RBbGwoIi4iK24uY24ubm9kZUxhYmVsR3VpZGUpLmRhdGEoZyk7Ui5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQobi5jbi5ub2RlTGFiZWxHdWlkZSwhMCkuYXR0cigiaWQiLGZ1bmN0aW9uKHQpe3JldHVybiB0LnVuaXF1ZU5vZGVMYWJlbFBhdGhJZH0pLmF0dHIoImQiLEUpLmF0dHIoInRyYW5zZm9ybSIsQyksUi50cmFuc2l0aW9uKCkuZWFzZShuLmVhc2UpLmR1cmF0aW9uKG4uZHVyYXRpb24pLmF0dHIoImQiLEUpLmF0dHIoInRyYW5zZm9ybSIsQyk7dmFyIEI9RC5zZWxlY3RBbGwoIi4iK24uY24ubm9kZUxhYmVsKS5kYXRhKGcpO0IuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5jbGFzc2VkKG4uY24ubm9kZUxhYmVsLCEwKS5hdHRyKCJ0cmFuc2Zvcm0iLEwpLnN0eWxlKCJ1c2VyLXNlbGVjdCIsIm5vbmUiKS5zdHlsZSgiY3Vyc29yIiwiZGVmYXVsdCIpLnN0eWxlKCJmaWxsIiwiYmxhY2siKSxCLnN0eWxlKCJ0ZXh0LXNoYWRvdyIsZnVuY3Rpb24odCl7cmV0dXJuIHQuaG9yaXpvbnRhbD8iLTFweCAxcHggMXB4ICNmZmYsIDFweCAxcHggMXB4ICNmZmYsIDFweCAtMXB4IDFweCAjZmZmLCAtMXB4IC0xcHggMXB4ICNmZmYiOiJub25lIn0pLmVhY2goZnVuY3Rpb24odCl7cy5mb250KEIsdC50ZXh0Rm9udCl9KSxCLnRyYW5zaXRpb24oKS5lYXNlKG4uZWFzZSkuZHVyYXRpb24obi5kdXJhdGlvbikuYXR0cigidHJhbnNmb3JtIixMKTt2YXIgRj1CLnNlbGVjdEFsbCgiLiIrbi5jbi5ub2RlTGFiZWxUZXh0UGF0aCkuZGF0YShnKTtGLmVudGVyKCkuYXBwZW5kKCJ0ZXh0UGF0aCIpLmNsYXNzZWQobi5jbi5ub2RlTGFiZWxUZXh0UGF0aCwhMCkuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwibWlkZGxlIikuYXR0cigieGxpbms6aHJlZiIsZnVuY3Rpb24odCl7cmV0dXJuIiMiK3QudW5pcXVlTm9kZUxhYmVsUGF0aElkfSkuYXR0cigic3RhcnRPZmZzZXQiLFApLnN0eWxlKCJmaWxsIix6KSxGLnRleHQoZnVuY3Rpb24odCl7cmV0dXJuIHQuaG9yaXpvbnRhbHx8dC5ub2RlLmR5PjU/dC5ub2RlLmxhYmVsOiIifSkuYXR0cigidGV4dC1hbmNob3IiLGZ1bmN0aW9uKHQpe3JldHVybiB0Lmhvcml6b250YWwmJnQubGVmdD8iZW5kIjoic3RhcnQifSksRi50cmFuc2l0aW9uKCkuZWFzZShuLmVhc2UpLmR1cmF0aW9uKG4uZHVyYXRpb24pLmF0dHIoInN0YXJ0T2Zmc2V0IixQKS5zdHlsZSgiZmlsbCIseil9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjU1OCwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo1ODMsIi4uLy4uL2xpYiI6Njg0LCIuLi8uLi9saWIvZ3VwIjo2ODEsIi4vY29uc3RhbnRzIjoxMDA5LCJAcGxvdGx5L2QzLXNhbmtleSI6NDksZDM6MTQ3LCJkMy1mb3JjZSI6MTQzLHRpbnljb2xvcjI6NDk5fV0sMTAxNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl0W3JdLmk9cjtuLm1lcmdlQXJyYXkoZS50ZXh0LHQsInR4Iiksbi5tZXJnZUFycmF5KGUuaG92ZXJ0ZXh0LHQsImh0eCIpLG4ubWVyZ2VBcnJheShlLmN1c3RvbWRhdGEsdCwiZGF0YSIpLG4ubWVyZ2VBcnJheShlLnRleHRwb3NpdGlvbix0LCJ0cCIpLGUudGV4dGZvbnQmJihuLm1lcmdlQXJyYXkoZS50ZXh0Zm9udC5zaXplLHQsInRzIiksbi5tZXJnZUFycmF5KGUudGV4dGZvbnQuY29sb3IsdCwidGMiKSxuLm1lcmdlQXJyYXkoZS50ZXh0Zm9udC5mYW1pbHksdCwidGYiKSk7dmFyIGk9ZS5tYXJrZXI7aWYoaSl7bi5tZXJnZUFycmF5KGkuc2l6ZSx0LCJtcyIpLG4ubWVyZ2VBcnJheShpLm9wYWNpdHksdCwibW8iKSxuLm1lcmdlQXJyYXkoaS5zeW1ib2wsdCwibXgiKSxuLm1lcmdlQXJyYXkoaS5jb2xvcix0LCJtYyIpO3ZhciBhPWkubGluZTtpLmxpbmUmJihuLm1lcmdlQXJyYXkoYS5jb2xvcix0LCJtbGMiKSxuLm1lcmdlQXJyYXkoYS53aWR0aCx0LCJtbHciKSk7dmFyIG89aS5ncmFkaWVudDtvJiYibm9uZSIhPT1vLnR5cGUmJihuLm1lcmdlQXJyYXkoby50eXBlLHQsIm1ndCIpLG4ubWVyZ2VBcnJheShvLmNvbG9yLHQsIm1nYyIpKX19fSx7Ii4uLy4uL2xpYiI6Njg0fV0sMTAxNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZy9hdHRyaWJ1dGVzIikuZGFzaCxzPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGw9KHQoIi4vY29uc3RhbnRzIiksdCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQpO2UuZXhwb3J0cz17eDp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSx4MDp7dmFsVHlwZToiYW55IixkZmx0OjAsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSxkeDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjEsZWRpdFR5cGU6ImNhbGMifSx5Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHkwOnt2YWxUeXBlOiJhbnkiLGRmbHQ6MCxlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LGR5Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MSxlZGl0VHlwZToiY2FsYyJ9LHRleHQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixhcnJheU9rOiEwLGVkaXRUeXBlOiJjYWxjIn0saG92ZXJ0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsYXJyYXlPazohMCxlZGl0VHlwZToic3R5bGUifSxtb2RlOnt2YWxUeXBlOiJmbGFnbGlzdCIsZmxhZ3M6WyJsaW5lcyIsIm1hcmtlcnMiLCJ0ZXh0Il0sZXh0cmFzOlsibm9uZSJdLGVkaXRUeXBlOiJjYWxjIn0saG92ZXJvbjp7dmFsVHlwZToiZmxhZ2xpc3QiLGZsYWdzOlsicG9pbnRzIiwiZmlsbHMiXSxlZGl0VHlwZToic3R5bGUifSxsaW5lOntjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJzdHlsZSJ9LHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MixlZGl0VHlwZToic3R5bGUifSxzaGFwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibGluZWFyIiwic3BsaW5lIiwiaHYiLCJ2aCIsImh2aCIsInZodiJdLGRmbHQ6ImxpbmVhciIsZWRpdFR5cGU6InBsb3QifSxzbW9vdGhpbmc6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEuMyxkZmx0OjEsZWRpdFR5cGU6InBsb3QifSxkYXNoOmwoe30sbyx7ZWRpdFR5cGU6InN0eWxlIn0pLHNpbXBsaWZ5Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJwbG90In0sZWRpdFR5cGU6InBsb3QifSxjb25uZWN0Z2Fwczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToiY2FsYyJ9LGNsaXBvbmF4aXM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6InBsb3QifSxmaWxsOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJub25lIiwidG96ZXJveSIsInRvemVyb3giLCJ0b25leHR5IiwidG9uZXh0eCIsInRvc2VsZiIsInRvbmV4dCJdLGRmbHQ6Im5vbmUiLGVkaXRUeXBlOiJjYWxjIn0sZmlsbGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6InN0eWxlIn0sbWFya2VyOmwoe3N5bWJvbDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOnMuc3ltYm9sTGlzdCxkZmx0OiJjaXJjbGUiLGFycmF5T2s6ITAsZWRpdFR5cGU6InN0eWxlIn0sb3BhY2l0eTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxhcnJheU9rOiEwLGVkaXRUeXBlOiJzdHlsZSJ9LHNpemU6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDo2LGFycmF5T2s6ITAsZWRpdFR5cGU6ImNhbGNJZkF1dG9yYW5nZSJ9LG1heGRpc3BsYXllZDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6InBsb3QifSxzaXplcmVmOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MSxlZGl0VHlwZToiY2FsYyJ9LHNpemVtaW46e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDowLGVkaXRUeXBlOiJjYWxjIn0sc2l6ZW1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImRpYW1ldGVyIiwiYXJlYSJdLGRmbHQ6ImRpYW1ldGVyIixlZGl0VHlwZToiY2FsYyJ9LGNvbG9yYmFyOmksbGluZTpsKHt3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxhcnJheU9rOiEwLGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJjYWxjIn0sbigibWFya2VyLmxpbmUiKSksZ3JhZGllbnQ6e3R5cGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInJhZGlhbCIsImhvcml6b250YWwiLCJ2ZXJ0aWNhbCIsIm5vbmUiXSxhcnJheU9rOiEwLGRmbHQ6Im5vbmUiLGVkaXRUeXBlOiJjYWxjIn0sY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixhcnJheU9rOiEwLGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9LG4oIm1hcmtlciIpKSxzZWxlY3RlZDp7bWFya2VyOntvcGFjaXR5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGVkaXRUeXBlOiJzdHlsZSJ9LGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6InN0eWxlIn0sc2l6ZTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxlZGl0VHlwZToic3R5bGUifSxlZGl0VHlwZToic3R5bGUifSx0ZXh0Zm9udDp7Y29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToic3R5bGUifSxlZGl0VHlwZToic3R5bGUifSxlZGl0VHlwZToic3R5bGUifSx1bnNlbGVjdGVkOnttYXJrZXI6e29wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZWRpdFR5cGU6InN0eWxlIn0sY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToic3R5bGUifSxzaXplOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJzdHlsZSJ9LHRleHRmb250Ontjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJzdHlsZSJ9LHRleHRwb3NpdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidG9wIGxlZnQiLCJ0b3AgY2VudGVyIiwidG9wIHJpZ2h0IiwibWlkZGxlIGxlZnQiLCJtaWRkbGUgY2VudGVyIiwibWlkZGxlIHJpZ2h0IiwiYm90dG9tIGxlZnQiLCJib3R0b20gY2VudGVyIiwiYm90dG9tIHJpZ2h0Il0sZGZsdDoibWlkZGxlIGNlbnRlciIsYXJyYXlPazohMCxlZGl0VHlwZToiY2FsYyJ9LHRleHRmb250OmEoe2VkaXRUeXBlOiJjYWxjIixjb2xvckVkaXRUeXBlOiJzdHlsZSIsYXJyYXlPazohMH0pLHI6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sdDp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzIjo1NTksIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo1NjUsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NTgzLCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlcyI6NTgyLCIuLi8uLi9saWIvZXh0ZW5kIjo2NzMsIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6NzU4LCIuL2NvbnN0YW50cyI6MTAyMH1dLDEwMTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL2xpYiIpLmlzQXJyYXlPclR5cGVkQXJyYXksYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLG89dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTSxzPXQoIi4vc3VidHlwZXMiKSxsPXQoIi4vY29sb3JzY2FsZV9jYWxjIiksYz10KCIuL2FycmF5c190b19jYWxjZGF0YSIpLHU9dCgiLi9jYWxjX3NlbGVjdGlvbiIpO2Z1bmN0aW9uIGgodCxlLHIsbixpLG8sbCl7dmFyIGM9ZS5fbGVuZ3RoO3IuX21pbkR0aWNrPTAsbi5fbWluRHRpY2s9MDt2YXIgdT17cGFkZGVkOiEwfSxoPXtwYWRkZWQ6ITB9O2wmJih1LnBwYWQ9aC5wcGFkPWwpLCEoInRvemVyb3giPT09ZS5maWxsfHwidG9uZXh0eCI9PT1lLmZpbGwmJnQuZmlyc3RzY2F0dGVyKXx8aVswXT09PWlbYy0xXSYmb1swXT09PW9bYy0xXT8oZS5lcnJvcl95fHx7fSkudmlzaWJsZXx8LTE9PT1bInRvbmV4dHkiLCJ0b3plcm95Il0uaW5kZXhPZihlLmZpbGwpJiYocy5oYXNNYXJrZXJzKGUpfHxzLmhhc1RleHQoZSkpfHwodS5wYWRkZWQ9ITEsdS5wcGFkPTApOnUudG96ZXJvPSEwLCEoInRvemVyb3kiPT09ZS5maWxsfHwidG9uZXh0eSI9PT1lLmZpbGwmJnQuZmlyc3RzY2F0dGVyKXx8aVswXT09PWlbYy0xXSYmb1swXT09PW9bYy0xXT8tMSE9PVsidG9uZXh0eCIsInRvemVyb3giXS5pbmRleE9mKGUuZmlsbCkmJihoLnBhZGRlZD0hMSk6aC50b3plcm89ITAsYS5leHBhbmQocixpLHUpLGEuZXhwYW5kKG4sbyxoKX1mdW5jdGlvbiBmKHQsZSl7aWYocy5oYXNNYXJrZXJzKHQpKXt2YXIgcixuPXQubWFya2VyLG89MS42Kih0Lm1hcmtlci5zaXplcmVmfHwxKTtpZihyPSJhcmVhIj09PXQubWFya2VyLnNpemVtb2RlP2Z1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1heChNYXRoLnNxcnQoKHR8fDApL28pLDMpfTpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5tYXgoKHR8fDApL28sMyl9LGkobi5zaXplKSl7dmFyIGw9e3R5cGU6ImxpbmVhciJ9O2Euc2V0Q29udmVydChsKTtmb3IodmFyIGM9bC5tYWtlQ2FsY2RhdGEodC5tYXJrZXIsInNpemUiKSx1PW5ldyBBcnJheShlKSxoPTA7aDxlO2grKyl1W2hdPXIoY1toXSk7cmV0dXJuIHV9cmV0dXJuIHIobi5zaXplKX19ZS5leHBvcnRzPXtjYWxjOmZ1bmN0aW9uKHQsZSl7dmFyIHI9YS5nZXRGcm9tSWQodCxlLnhheGlzfHwieCIpLGk9YS5nZXRGcm9tSWQodCxlLnlheGlzfHwieSIpLHM9ci5tYWtlQ2FsY2RhdGEoZSwieCIpLHA9aS5tYWtlQ2FsY2RhdGEoZSwieSIpLGQ9ZS5fbGVuZ3RoLGc9bmV3IEFycmF5KGQpO2godCxlLHIsaSxzLHAsZihlLGQpKTtmb3IodmFyIG09MDttPGQ7bSsrKWdbbV09bihzW21dKSYmbihwW21dKT97eDpzW21dLHk6cFttXX06e3g6byx5Om99LGUuaWRzJiYoZ1ttXS5pZD1TdHJpbmcoZS5pZHNbbV0pKTtyZXR1cm4gYyhnLGUpLGwoZSksdShnLGUpLHQuZmlyc3RzY2F0dGVyPSExLGd9LGNhbGNNYXJrZXJTaXplOmYsY2FsY0F4aXNFeHBhbnNpb246aH19LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NjYxLCIuLi8uLi9saWIiOjY4NCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjczMiwiLi9hcnJheXNfdG9fY2FsY2RhdGEiOjEwMTQsIi4vY2FsY19zZWxlY3Rpb24iOjEwMTcsIi4vY29sb3JzY2FsZV9jYWxjIjoxMDE5LCIuL3N1YnR5cGVzIjoxMDM3LCJmYXN0LWlzbnVtZXJpYyI6MjE0fV0sMTAxNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtuLmlzQXJyYXlPclR5cGVkQXJyYXkoZS5zZWxlY3RlZHBvaW50cykmJm4udGFnU2VsZWN0ZWQodCxlKX19LHsiLi4vLi4vbGliIjo2ODR9XSwxMDE4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKyl7dmFyIHI9dFtlXTtpZigic2NhdHRlciI9PT1yLnR5cGUpe3ZhciBuPXIuZmlsbDtpZigibm9uZSIhPT1uJiYidG9zZWxmIiE9PW4mJihyLm9wYWNpdHk9dm9pZCAwLCJ0b25leHR5Ij09PW58fCJ0b25leHR4Ij09PW4pKWZvcih2YXIgaT1lLTE7aT49MDtpLS0pe3ZhciBhPXRbaV07aWYoInNjYXR0ZXIiPT09YS50eXBlJiZhLnhheGlzPT09ci54YXhpcyYmYS55YXhpcz09PXIueWF4aXMpe2Eub3BhY2l0eT12b2lkIDA7YnJlYWt9fX19fX0se31dLDEwMTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hhc19jb2xvcnNjYWxlIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyIpLGE9dCgiLi9zdWJ0eXBlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXthLmhhc0xpbmVzKHQpJiZuKHQsImxpbmUiKSYmaSh0LHQubGluZS5jb2xvciwibGluZSIsImMiKSxhLmhhc01hcmtlcnModCkmJihuKHQsIm1hcmtlciIpJiZpKHQsdC5tYXJrZXIuY29sb3IsIm1hcmtlciIsImMiKSxuKHQsIm1hcmtlci5saW5lIikmJmkodCx0Lm1hcmtlci5saW5lLmNvbG9yLCJtYXJrZXIubGluZSIsImMiKSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIjo1NjYsIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oYXNfY29sb3JzY2FsZSI6NTcyLCIuL3N1YnR5cGVzIjoxMDM3fV0sMTAyMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e1BUU19MSU5FU09OTFk6MjAsbWluVG9sZXJhbmNlOi4yLHRvbGVyYW5jZUdyb3d0aDoxMCxtYXhTY3JlZW5zQXdheToyMH19LHt9XSwxMDIxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcmVnaXN0cnkiKSxhPXQoIi4vYXR0cmlidXRlcyIpLG89dCgiLi9jb25zdGFudHMiKSxzPXQoIi4vc3VidHlwZXMiKSxsPXQoIi4veHlfZGVmYXVsdHMiKSxjPXQoIi4vbWFya2VyX2RlZmF1bHRzIiksdT10KCIuL2xpbmVfZGVmYXVsdHMiKSxoPXQoIi4vbGluZV9zaGFwZV9kZWZhdWx0cyIpLGY9dCgiLi90ZXh0X2RlZmF1bHRzIikscD10KCIuL2ZpbGxjb2xvcl9kZWZhdWx0cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixkKXtmdW5jdGlvbiBnKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxhLHIsaSl9dmFyIG09bCh0LGUsZCxnKSx2PW08by5QVFNfTElORVNPTkxZPyJsaW5lcyttYXJrZXJzIjoibGluZXMiO2lmKG0pe2coInRleHQiKSxnKCJob3ZlcnRleHQiKSxnKCJtb2RlIix2KSxzLmhhc0xpbmVzKGUpJiYodSh0LGUscixkLGcpLGgodCxlLGcpLGcoImNvbm5lY3RnYXBzIiksZygibGluZS5zaW1wbGlmeSIpKSxzLmhhc01hcmtlcnMoZSkmJmModCxlLHIsZCxnLHtncmFkaWVudDohMH0pLHMuaGFzVGV4dChlKSYmZih0LGUsZCxnKTt2YXIgeT1bXTsocy5oYXNNYXJrZXJzKGUpfHxzLmhhc1RleHQoZSkpJiYoZygiY2xpcG9uYXhpcyIpLGcoIm1hcmtlci5tYXhkaXNwbGF5ZWQiKSx5LnB1c2goInBvaW50cyIpKSxnKCJmaWxsIiksIm5vbmUiIT09ZS5maWxsJiYocCh0LGUscixnKSxzLmhhc0xpbmVzKGUpfHxoKHQsZSxnKSksInRvbmV4dCIhPT1lLmZpbGwmJiJ0b3NlbGYiIT09ZS5maWxsfHx5LnB1c2goImZpbGxzIiksZygiaG92ZXJvbiIseS5qb2luKCIrIil8fCJwb2ludHMiKTt2YXIgeD1pLmdldENvbXBvbmVudE1ldGhvZCgiZXJyb3JiYXJzIiwic3VwcGx5RGVmYXVsdHMiKTt4KHQsZSxyLHtheGlzOiJ5In0pLHgodCxlLHIse2F4aXM6IngiLGluaGVyaXQ6InkifSksbi5jb2VyY2VTZWxlY3Rpb25NYXJrZXJPcGFjaXR5KGUsZyl9ZWxzZSBlLnZpc2libGU9ITF9fSx7Ii4uLy4uL2xpYiI6Njg0LCIuLi8uLi9yZWdpc3RyeSI6ODE3LCIuL2F0dHJpYnV0ZXMiOjEwMTUsIi4vY29uc3RhbnRzIjoxMDIwLCIuL2ZpbGxjb2xvcl9kZWZhdWx0cyI6MTAyMywiLi9saW5lX2RlZmF1bHRzIjoxMDI3LCIuL2xpbmVfc2hhcGVfZGVmYXVsdHMiOjEwMjksIi4vbWFya2VyX2RlZmF1bHRzIjoxMDMzLCIuL3N1YnR5cGVzIjoxMDM3LCIuL3RleHRfZGVmYXVsdHMiOjEwMzgsIi4veHlfZGVmYXVsdHMiOjEwMzl9XSwxMDIyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpO2Z1bmN0aW9uIGkodCl7cmV0dXJuIHR8fDA9PT10fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGE9QXJyYXkuaXNBcnJheShyKT9mdW5jdGlvbih0KXtyLnB1c2godCl9OmZ1bmN0aW9uKHQpe3IudGV4dD10fSxvPW4uZXh0cmFjdE9wdGlvbih0LGUsImh0eCIsImhvdmVydGV4dCIpO2lmKGkobykpcmV0dXJuIGEobyk7dmFyIHM9bi5leHRyYWN0T3B0aW9uKHQsZSwidHgiLCJ0ZXh0Iik7cmV0dXJuIGkocyk/YShzKTp2b2lkIDB9fSx7Ii4uLy4uL2xpYiI6Njg0fV0sMTAyMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksaT10KCIuLi8uLi9saWIiKS5pc0FycmF5T3JUeXBlZEFycmF5O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXt2YXIgbz0hMTtpZihlLm1hcmtlcil7dmFyIHM9ZS5tYXJrZXIuY29sb3IsbD0oZS5tYXJrZXIubGluZXx8e30pLmNvbG9yO3MmJiFpKHMpP289czpsJiYhaShsKSYmKG89bCl9YSgiZmlsbGNvbG9yIixuLmFkZE9wYWNpdHkoKGUubGluZXx8e30pLmNvbG9yfHxvfHxyLC41KSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjU1OCwiLi4vLi4vbGliIjo2ODR9XSwxMDI0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxpPXQoIi4vc3VidHlwZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixhO2lmKCJsaW5lcyI9PT10Lm1vZGUpcmV0dXJuKHI9dC5saW5lLmNvbG9yKSYmbi5vcGFjaXR5KHIpP3I6dC5maWxsY29sb3I7aWYoIm5vbmUiPT09dC5tb2RlKXJldHVybiB0LmZpbGw/dC5maWxsY29sb3I6IiI7dmFyIG89ZS5tY2N8fCh0Lm1hcmtlcnx8e30pLmNvbG9yLHM9ZS5tbGNjfHwoKHQubWFya2VyfHx7fSkubGluZXx8e30pLmNvbG9yO3JldHVybihhPW8mJm4ub3BhY2l0eShvKT9vOnMmJm4ub3BhY2l0eShzKSYmKGUubWx3fHwoKHQubWFya2VyfHx7fSkubGluZXx8e30pLndpZHRoKT9zOiIiKT9uLm9wYWNpdHkoYSk8LjM/bi5hZGRPcGFjaXR5KGEsLjMpOmE6KHI9KHQubGluZXx8e30pLmNvbG9yKSYmbi5vcGFjaXR5KHIpJiZpLmhhc0xpbmVzKHQpJiZ0LmxpbmUud2lkdGg/cjp0LmZpbGxjb2xvcn19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NTU4LCIuL3N1YnR5cGVzIjoxMDM3fV0sMTAyNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSxhPXQoIi4uLy4uL3JlZ2lzdHJ5Iiksbz10KCIuL2dldF90cmFjZV9jb2xvciIpLHM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGw9dCgiLi9maWxsX2hvdmVyX3RleHQiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYyl7dmFyIHU9dC5jZCxoPXVbMF0udHJhY2UsZj10LnhhLHA9dC55YSxkPWYuYzJwKGUpLGc9cC5jMnAociksbT1bZCxnXSx2PWguaG92ZXJvbnx8IiIseT0tMSE9PWgubW9kZS5pbmRleE9mKCJtYXJrZXJzIik/MzouNTtpZigtMSE9PXYuaW5kZXhPZigicG9pbnRzIikpe3ZhciB4PWZ1bmN0aW9uKHQpe3ZhciBlPU1hdGgubWF4KHksdC5tcmN8fDApLHI9Zi5jMnAodC54KS1kLG49cC5jMnAodC55KS1nO3JldHVybiBNYXRoLm1heChNYXRoLnNxcnQocipyK24qbiktZSwxLXkvZSl9LGI9aS5nZXREaXN0YW5jZUZ1bmN0aW9uKGMsZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5tYXgoMyx0Lm1yY3x8MCkscj0xLTEvZSxuPU1hdGguYWJzKGYuYzJwKHQueCktZCk7cmV0dXJuIG48ZT9yKm4vZTpuLWUrcn0sZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5tYXgoMyx0Lm1yY3x8MCkscj0xLTEvZSxuPU1hdGguYWJzKHAuYzJwKHQueSktZyk7cmV0dXJuIG48ZT9yKm4vZTpuLWUrcn0seCk7aWYoaS5nZXRDbG9zZXN0KHUsYix0KSwhMSE9PXQuaW5kZXgpe3ZhciBfPXVbdC5pbmRleF0sdz1mLmMycChfLngsITApLGs9cC5jMnAoXy55LCEwKSxNPV8ubXJjfHwxO3JldHVybiBuLmV4dGVuZEZsYXQodCx7Y29sb3I6byhoLF8pLHgwOnctTSx4MTp3K00seExhYmVsVmFsOl8ueCx5MDprLU0seTE6aytNLHlMYWJlbFZhbDpfLnksc3Bpa2VEaXN0YW5jZTp4KF8pfSksbChfLGgsdCksYS5nZXRDb21wb25lbnRNZXRob2QoImVycm9yYmFycyIsImhvdmVySW5mbyIpKF8saCx0KSxbdF19fWlmKC0xIT09di5pbmRleE9mKCJmaWxscyIpJiZoLl9wb2x5Z29ucyl7dmFyIEEsVCxTLEUsQyxMLHosUCxJLE89aC5fcG9seWdvbnMsRD1bXSxSPSExLEI9MS8wLEY9LTEvMCxOPTEvMCxqPS0xLzA7Zm9yKEE9MDtBPE8ubGVuZ3RoO0ErKykoUz1PW0FdKS5jb250YWlucyhtKSYmKFI9IVIsRC5wdXNoKFMpLE49TWF0aC5taW4oTixTLnltaW4pLGo9TWF0aC5tYXgoaixTLnltYXgpKTtpZihSKXt2YXIgVj0oKE49TWF0aC5tYXgoTiwwKSkrKGo9TWF0aC5taW4oaixwLl9sZW5ndGgpKSkvMjtmb3IoQT0wO0E8RC5sZW5ndGg7QSsrKWZvcihFPURbQV0ucHRzLFQ9MTtUPEUubGVuZ3RoO1QrKykoUD1FW1QtMV1bMV0pPlYhPShJPUVbVF1bMV0pPj1WJiYoTD1FW1QtMV1bMF0sej1FW1RdWzBdLEktUCYmKEM9TCsoei1MKSooVi1QKS8oSS1QKSxCPU1hdGgubWluKEIsQyksRj1NYXRoLm1heChGLEMpKSk7Qj1NYXRoLm1heChCLDApLEY9TWF0aC5taW4oRixmLl9sZW5ndGgpO3ZhciBVPXMuZGVmYXVsdExpbmU7cmV0dXJuIHMub3BhY2l0eShoLmZpbGxjb2xvcik/VT1oLmZpbGxjb2xvcjpzLm9wYWNpdHkoKGgubGluZXx8e30pLmNvbG9yKSYmKFU9aC5saW5lLmNvbG9yKSxuLmV4dGVuZEZsYXQodCx7ZGlzdGFuY2U6dC5tYXhIb3ZlckRpc3RhbmNlLHgwOkIseDE6Rix5MDpWLHkxOlYsY29sb3I6VX0pLGRlbGV0ZSB0LmluZGV4LGgudGV4dCYmIUFycmF5LmlzQXJyYXkoaC50ZXh0KT90LnRleHQ9U3RyaW5nKGgudGV4dCk6dC50ZXh0PWgubmFtZSxbdF19fX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NTU4LCIuLi8uLi9jb21wb25lbnRzL2Z4Ijo2MDAsIi4uLy4uL2xpYiI6Njg0LCIuLi8uLi9yZWdpc3RyeSI6ODE3LCIuL2ZpbGxfaG92ZXJfdGV4dCI6MTAyMiwiLi9nZXRfdHJhY2VfY29sb3IiOjEwMjR9XSwxMDI2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXt9LGk9dCgiLi9zdWJ0eXBlcyIpO24uaGFzTGluZXM9aS5oYXNMaW5lcyxuLmhhc01hcmtlcnM9aS5oYXNNYXJrZXJzLG4uaGFzVGV4dD1pLmhhc1RleHQsbi5pc0J1YmJsZT1pLmlzQnViYmxlLG4uYXR0cmlidXRlcz10KCIuL2F0dHJpYnV0ZXMiKSxuLnN1cHBseURlZmF1bHRzPXQoIi4vZGVmYXVsdHMiKSxuLmNsZWFuRGF0YT10KCIuL2NsZWFuX2RhdGEiKSxuLmNhbGM9dCgiLi9jYWxjIikuY2FsYyxuLmFycmF5c1RvQ2FsY2RhdGE9dCgiLi9hcnJheXNfdG9fY2FsY2RhdGEiKSxuLnBsb3Q9dCgiLi9wbG90Iiksbi5jb2xvcmJhcj10KCIuL21hcmtlcl9jb2xvcmJhciIpLG4uc3R5bGU9dCgiLi9zdHlsZSIpLnN0eWxlLG4uc3R5bGVPblNlbGVjdD10KCIuL3N0eWxlIikuc3R5bGVPblNlbGVjdCxuLmhvdmVyUG9pbnRzPXQoIi4vaG92ZXIiKSxuLnNlbGVjdFBvaW50cz10KCIuL3NlbGVjdCIpLG4uYW5pbWF0YWJsZT0hMCxuLm1vZHVsZVR5cGU9InRyYWNlIixuLm5hbWU9InNjYXR0ZXIiLG4uYmFzZVBsb3RNb2R1bGU9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuIiksbi5jYXRlZ29yaWVzPVsiY2FydGVzaWFuIiwic3ZnIiwic3ltYm9scyIsImVycm9yQmFyc09LIiwic2hvd0xlZ2VuZCIsInNjYXR0ZXItbGlrZSIsInpvb21TY2FsZSJdLG4ubWV0YT17fSxlLmV4cG9ydHM9bn0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjc0MywiLi9hcnJheXNfdG9fY2FsY2RhdGEiOjEwMTQsIi4vYXR0cmlidXRlcyI6MTAxNSwiLi9jYWxjIjoxMDE2LCIuL2NsZWFuX2RhdGEiOjEwMTgsIi4vZGVmYXVsdHMiOjEwMjEsIi4vaG92ZXIiOjEwMjUsIi4vbWFya2VyX2NvbG9yYmFyIjoxMDMyLCIuL3Bsb3QiOjEwMzQsIi4vc2VsZWN0IjoxMDM1LCIuL3N0eWxlIjoxMDM2LCIuL3N1YnR5cGVzIjoxMDM3fV0sMTAyNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKS5pc0FycmF5T3JUeXBlZEFycmF5LGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hhc19jb2xvcnNjYWxlIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyxzLGwpe3ZhciBjPSh0Lm1hcmtlcnx8e30pLmNvbG9yOyhzKCJsaW5lLmNvbG9yIixyKSxpKHQsImxpbmUiKSk/YSh0LGUsbyxzLHtwcmVmaXg6ImxpbmUuIixjTGV0dGVyOiJjIn0pOnMoImxpbmUuY29sb3IiLCFuKGMpJiZjfHxyKTtzKCJsaW5lLndpZHRoIiksKGx8fHt9KS5ub0Rhc2h8fHMoImxpbmUuZGFzaCIpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiOjU2OCwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hhc19jb2xvcnNjYWxlIjo1NzIsIi4uLy4uL2xpYiI6Njg0fV0sMTAyODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNLGk9dCgiLi4vLi4vbGliIiksYT1pLnNlZ21lbnRzSW50ZXJzZWN0LG89aS5jb25zdHJhaW4scz10KCIuL2NvbnN0YW50cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGwsYyx1LGgsZixwLGQsZyxtLHYseSx4LGIsXyx3LGssTSxBPWUueGF4aXMsVD1lLnlheGlzLFM9ZS5jb25uZWN0R2FwcyxFPWUuYmFzZVRvbGVyYW5jZSxDPWUuc2hhcGUsTD0ibGluZWFyIj09PUMsej1bXSxQPXMubWluVG9sZXJhbmNlLEk9bmV3IEFycmF5KHQubGVuZ3RoKSxPPTA7ZnVuY3Rpb24gRChlKXt2YXIgcj10W2VdO2lmKCFyKXJldHVybiExO3ZhciBpPUEuYzJwKHIueCksYT1ULmMycChyLnkpO3JldHVybiBpPT09bnx8YT09PW4/ci5pbnRvQ2VudGVyfHwhMTpbaSxhXX1mdW5jdGlvbiBSKHQsZSxyLG4pe3ZhciBpPXItdCxhPW4tZSxvPS41LXQscz0uNS1lLGw9aSppK2EqYSxjPWkqbythKnM7aWYoYz4wJiZjPGwpe3ZhciB1PW8qYS1zKmk7aWYodSp1PGwpcmV0dXJuITB9fWZ1bmN0aW9uIEIodCxlKXt2YXIgcj10WzBdL0EuX2xlbmd0aCxuPXRbMV0vVC5fbGVuZ3RoLGk9TWF0aC5tYXgoMCwtcixyLTEsLW4sbi0xKTtyZXR1cm4gaSYmdm9pZCAwIT09ayYmUihyLG4sayxNKSYmKGk9MCksaSYmZSYmUihyLG4sZVswXS9BLl9sZW5ndGgsZVsxXS9ULl9sZW5ndGgpJiYoaT0wKSwoMStzLnRvbGVyYW5jZUdyb3d0aCppKSpFfWZ1bmN0aW9uIEYodCxlKXt2YXIgcj10WzBdLWVbMF0sbj10WzFdLWVbMV07cmV0dXJuIE1hdGguc3FydChyKnIrbipuKX12YXIgTixqLFYsVSxxLEgsRyxXPXMubWF4U2NyZWVuc0F3YXksWT0tQS5fbGVuZ3RoKlcsWD1BLl9sZW5ndGgqKDErVyksWj0tVC5fbGVuZ3RoKlcsJD1ULl9sZW5ndGgqKDErVyksSj1bW1ksWixYLFpdLFtYLFosWCwkXSxbWCwkLFksJF0sW1ksJCxZLFpdXTtmdW5jdGlvbiBLKHQpe2lmKHRbMF08WXx8dFswXT5YfHx0WzFdPFp8fHRbMV0+JClyZXR1cm5bbyh0WzBdLFksWCksbyh0WzFdLFosJCldfWZ1bmN0aW9uIFEodCxlKXtyZXR1cm4gdFswXT09PWVbMF0mJih0WzBdPT09WXx8dFswXT09PVgpfHwodFsxXT09PWVbMV0mJih0WzFdPT09Wnx8dFsxXT09PSQpfHx2b2lkIDApfWZ1bmN0aW9uIHR0KHQsZSxyKXtyZXR1cm4gZnVuY3Rpb24obixhKXt2YXIgbz1LKG4pLHM9SyhhKSxsPVtdO2lmKG8mJnMmJlEobyxzKSlyZXR1cm4gbDtvJiZsLnB1c2gobykscyYmbC5wdXNoKHMpO3ZhciBjPTIqaS5jb25zdHJhaW4oKG5bdF0rYVt0XSkvMixlLHIpLSgob3x8bilbdF0rKHN8fGEpW3RdKTtjJiYoKG8mJnM/Yz4wPT1vW3RdPnNbdF0/bzpzOm98fHMpW3RdKz1jKTtyZXR1cm4gbH19ZnVuY3Rpb24gZXQodCl7dmFyIGU9dFswXSxyPXRbMV0sbj1lPT09SVtPLTFdWzBdLGk9cj09PUlbTy0xXVsxXTtpZighbnx8IWkpaWYoTz4xKXt2YXIgYT1lPT09SVtPLTJdWzBdLG89cj09PUlbTy0yXVsxXTtuJiYoZT09PVl8fGU9PT1YKSYmYT9vP08tLTpJW08tMV09dDppJiYocj09PVp8fHI9PT0kKSYmbz9hP08tLTpJW08tMV09dDpJW08rK109dH1lbHNlIElbTysrXT10fWZ1bmN0aW9uIHJ0KHQpe0lbTy0xXVswXSE9PXRbMF0mJklbTy0xXVsxXSE9PXRbMV0mJmV0KFtWLFVdKSxldCh0KSxxPW51bGwsVj1VPTB9ZnVuY3Rpb24gbnQodCl7aWYoaz10WzBdL0EuX2xlbmd0aCxNPXRbMV0vVC5fbGVuZ3RoLE49dFswXTxZP1k6dFswXT5YP1g6MCxqPXRbMV08Wj9aOnRbMV0+JD8kOjAsTnx8ail7aWYoTylpZihxKXt2YXIgZT1HKHEsdCk7ZS5sZW5ndGg+MSYmKHJ0KGVbMF0pLElbTysrXT1lWzFdKX1lbHNlIEg9RyhJW08tMV0sdClbMF0sSVtPKytdPUg7ZWxzZSBJW08rK109W058fHRbMF0sanx8dFsxXV07dmFyIHI9SVtPLTFdO04mJmomJihyWzBdIT09Tnx8clsxXSE9PWopPyhxJiYoViE9PU4mJlUhPT1qP2V0KFYmJlU/KG49cSxhPShpPXQpWzBdLW5bMF0sbz0oaVsxXS1uWzFdKS9hLChuWzFdKmlbMF0taVsxXSpuWzBdKS9hPjA/W28+MD9ZOlgsJF06W28+MD9YOlksWl0pOltWfHxOLFV8fGpdKTpWJiZVJiZldChbVixVXSkpLGV0KFtOLGpdKSk6Vi1OJiZVLWomJmV0KFtOfHxWLGp8fFVdKSxxPXQsVj1OLFU9an1lbHNlIHEmJnJ0KEcocSx0KVswXSksSVtPKytdPXQ7dmFyIG4saSxhLG99Zm9yKCJsaW5lYXIiPT09Q3x8InNwbGluZSI9PT1DP0c9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9W10sbj0wLGk9MDtpPDQ7aSsrKXt2YXIgbz1KW2ldLHM9YSh0WzBdLHRbMV0sZVswXSxlWzFdLG9bMF0sb1sxXSxvWzJdLG9bM10pO3MmJighbnx8TWF0aC5hYnMocy54LXJbMF1bMF0pPjF8fE1hdGguYWJzKHMueS1yWzBdWzFdKT4xKSYmKHM9W3MueCxzLnldLG4mJkYocyx0KTxGKHJbMF0sdCk/ci51bnNoaWZ0KHMpOnIucHVzaChzKSxuKyspfXJldHVybiByfToiaHYiPT09Q3x8InZoIj09PUM/Rz1mdW5jdGlvbih0LGUpe3ZhciByPVtdLG49Syh0KSxpPUsoZSk7cmV0dXJuIG4mJmkmJlEobixpKT9yOihuJiZyLnB1c2gobiksaSYmci5wdXNoKGkpLHIpfToiaHZoIj09PUM/Rz10dCgwLFksWCk6InZodiI9PT1DJiYoRz10dCgxLFosJCkpLHI9MDtyPHQubGVuZ3RoO3IrKylpZihsPUQocikpe2ZvcihPPTAscT1udWxsLG50KGwpLHIrKztyPHQubGVuZ3RoO3IrKyl7aWYoISh1PUQocikpKXtpZihTKWNvbnRpbnVlO2JyZWFrfWlmKEwmJmUuc2ltcGxpZnkpe3ZhciBpdD1EKHIrMSk7aWYoISgobT1GKHUsbCkpPEIodSxpdCkqUCkpe2ZvcihkPVsodVswXS1sWzBdKS9tLCh1WzFdLWxbMV0pL21dLGg9bCx2PW0seT1iPV89MCxwPSExLGM9dSxyKys7cjx0Lmxlbmd0aDtyKyspe2lmKGY9aXQsaXQ9RChyKzEpLCFmKXtpZihTKWNvbnRpbnVlO2JyZWFrfWlmKHc9KGc9W2ZbMF0tbFswXSxmWzFdLWxbMV1dKVswXSpkWzFdLWdbMV0qZFswXSxiPU1hdGgubWluKGIsdyksKF89TWF0aC5tYXgoXyx3KSktYj5CKGYsaXQpKWJyZWFrO2M9ZiwoeD1nWzBdKmRbMF0rZ1sxXSpkWzFdKT52Pyh2PXgsdT1mLHA9ITEpOng8eSYmKHk9eCxoPWYscD0hMCl9aWYocD8obnQodSksYyE9PWgmJm50KGgpKTooaCE9PWwmJm50KGgpLGMhPT11JiZudCh1KSksbnQoYykscj49dC5sZW5ndGh8fCFmKWJyZWFrO250KGYpLGw9Zn19ZWxzZSBudCh1KX1xJiZldChbVnx8cVswXSxVfHxxWzFdXSksei5wdXNoKEkuc2xpY2UoMCxPKSl9cmV0dXJuIHp9fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjY2MSwiLi4vLi4vbGliIjo2ODQsIi4vY29uc3RhbnRzIjoxMDIwfV0sMTAyOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpeyJzcGxpbmUiPT09cigibGluZS5zaGFwZSIpJiZyKCJsaW5lLnNtb290aGluZyIpfX0se31dLDEwMzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGE9bnVsbDtmb3IoaT0wO2k8ci5sZW5ndGg7KytpKSEwPT09KG49cltpXVswXS50cmFjZSkudmlzaWJsZT8obi5fbmV4dHRyYWNlPW51bGwsLTEhPT1bInRvbmV4dHgiLCJ0b25leHR5IiwidG9uZXh0Il0uaW5kZXhPZihuLmZpbGwpJiYobi5fcHJldnRyYWNlPWEsYSYmKGEuX25leHR0cmFjZT1uKSksYT1uKTpuLl9wcmV2dHJhY2U9bi5fbmV4dHRyYWNlPW51bGx9fSx7fV0sMTAzMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10Lm1hcmtlcixyPWUuc2l6ZXJlZnx8MSxpPWUuc2l6ZW1pbnx8MCxhPSJhcmVhIj09PWUuc2l6ZW1vZGU/ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguc3FydCh0L3IpfTpmdW5jdGlvbih0KXtyZXR1cm4gdC9yfTtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9YSh0LzIpO3JldHVybiBuKGUpJiZlPjA/TWF0aC5tYXgoZSxpKTowfX19LHsiZmFzdC1pc251bWVyaWMiOjIxNH1dLDEwMzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtjb250YWluZXI6Im1hcmtlciIsbWluOiJjbWluIixtYXg6ImNtYXgifX0se31dLDEwMzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hhc19jb2xvcnNjYWxlIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiKSxvPXQoIi4vc3VidHlwZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyxsLGMpe3ZhciB1PW8uaXNCdWJibGUodCksaD0odC5saW5lfHx7fSkuY29sb3I7KGM9Y3x8e30saCYmKHI9aCksbCgibWFya2VyLnN5bWJvbCIpLGwoIm1hcmtlci5vcGFjaXR5Iix1Py43OjEpLGwoIm1hcmtlci5zaXplIiksbCgibWFya2VyLmNvbG9yIixyKSxpKHQsIm1hcmtlciIpJiZhKHQsZSxzLGwse3ByZWZpeDoibWFya2VyLiIsY0xldHRlcjoiYyJ9KSxjLm5vU2VsZWN0fHwobCgic2VsZWN0ZWQubWFya2VyLmNvbG9yIiksbCgidW5zZWxlY3RlZC5tYXJrZXIuY29sb3IiKSxsKCJzZWxlY3RlZC5tYXJrZXIuc2l6ZSIpLGwoInVuc2VsZWN0ZWQubWFya2VyLnNpemUiKSksYy5ub0xpbmV8fChsKCJtYXJrZXIubGluZS5jb2xvciIsaCYmIUFycmF5LmlzQXJyYXkoaCkmJmUubWFya2VyLmNvbG9yIT09aD9oOnU/bi5iYWNrZ3JvdW5kOm4uZGVmYXVsdExpbmUpLGkodCwibWFya2VyLmxpbmUiKSYmYSh0LGUscyxsLHtwcmVmaXg6Im1hcmtlci5saW5lLiIsY0xldHRlcjoiYyJ9KSxsKCJtYXJrZXIubGluZS53aWR0aCIsdT8xOjApKSx1JiYobCgibWFya2VyLnNpemVyZWYiKSxsKCJtYXJrZXIuc2l6ZW1pbiIpLGwoIm1hcmtlci5zaXplbW9kZSIpKSxjLmdyYWRpZW50KSYmKCJub25lIiE9PWwoIm1hcmtlci5ncmFkaWVudC50eXBlIikmJmwoIm1hcmtlci5ncmFkaWVudC5jb2xvciIpKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NTU4LCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiOjU2OCwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hhc19jb2xvcnNjYWxlIjo1NzIsIi4vc3VidHlwZXMiOjEwMzd9XSwxMDM0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCIuLi8uLi9yZWdpc3RyeSIpLGE9dCgiLi4vLi4vbGliIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxzPXQoIi4vc3VidHlwZXMiKSxsPXQoIi4vbGluZV9wb2ludHMiKSxjPXQoIi4vbGlua190cmFjZXMiKSx1PXQoIi4uLy4uL2xpYi9wb2x5Z29uIikudGVzdGVyO2Z1bmN0aW9uIGgodCxlLHIsYyxoLGYscCl7dmFyIGQsZzshZnVuY3Rpb24odCxlLHIsaSxvKXt2YXIgbD1yLnhheGlzLGM9ci55YXhpcyx1PW4uZXh0ZW50KGEuc2ltcGxlTWFwKGwucmFuZ2UsbC5yMmMpKSxoPW4uZXh0ZW50KGEuc2ltcGxlTWFwKGMucmFuZ2UsYy5yMmMpKSxmPWlbMF0udHJhY2U7aWYoIXMuaGFzTWFya2VycyhmKSlyZXR1cm47dmFyIHA9Zi5tYXJrZXIubWF4ZGlzcGxheWVkO2lmKDA9PT1wKXJldHVybjt2YXIgZD1pLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC54Pj11WzBdJiZ0Lng8PXVbMV0mJnQueT49aFswXSYmdC55PD1oWzFdfSksZz1NYXRoLmNlaWwoZC5sZW5ndGgvcCksbT0wO28uZm9yRWFjaChmdW5jdGlvbih0LHIpe3ZhciBuPXRbMF0udHJhY2U7cy5oYXNNYXJrZXJzKG4pJiZuLm1hcmtlci5tYXhkaXNwbGF5ZWQ+MCYmcjxlJiZtKyt9KTt2YXIgdj1NYXRoLnJvdW5kKG0qZy8zK01hdGguZmxvb3IobS8zKSpnLzcuMSk7aS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2RlbGV0ZSB0LnZpc30pLGQuZm9yRWFjaChmdW5jdGlvbih0LGUpezA9PT1NYXRoLnJvdW5kKChlK3YpJWcpJiYodC52aXM9ITApfSl9KDAsZSxyLGMsaCk7dmFyIG09ISFwJiZwLmR1cmF0aW9uPjA7ZnVuY3Rpb24gdih0KXtyZXR1cm4gbT90LnRyYW5zaXRpb24oKTp0fXZhciB5PXIueGF4aXMseD1yLnlheGlzLGI9Y1swXS50cmFjZSxfPWIubGluZSx3PW4uc2VsZWN0KGYpO2lmKGkuZ2V0Q29tcG9uZW50TWV0aG9kKCJlcnJvcmJhcnMiLCJwbG90IikodyxyLHApLCEwPT09Yi52aXNpYmxlKXt2YXIgayxNO3Yodykuc3R5bGUoIm9wYWNpdHkiLGIub3BhY2l0eSk7dmFyIEE9Yi5maWxsLmNoYXJBdChiLmZpbGwubGVuZ3RoLTEpOyJ4IiE9PUEmJiJ5IiE9PUEmJihBPSIiKSxyLmlzUmFuZ2VQbG90fHwoY1swXS5ub2RlMz13KTt2YXIgVD0iIixTPVtdLEU9Yi5fcHJldnRyYWNlO0UmJihUPUUuX3ByZXZSZXZwYXRofHwiIixNPUUuX25leHRGaWxsLFM9RS5fcG9seWdvbnMpO3ZhciBDLEwseixQLEksTyxELFIsQixGPSIiLE49IiIsaj1bXSxWPWEubm9vcDtpZihrPWIuX293bkZpbGwscy5oYXNMaW5lcyhiKXx8Im5vbmUiIT09Yi5maWxsKXtmb3IoTSYmTS5kYXR1bShjKSwtMSE9PVsiaHYiLCJ2aCIsImh2aCIsInZodiJdLmluZGV4T2YoXy5zaGFwZSk/KHo9by5zdGVwcyhfLnNoYXBlKSxQPW8uc3RlcHMoXy5zaGFwZS5zcGxpdCgiIikucmV2ZXJzZSgpLmpvaW4oIiIpKSk6ej1QPSJzcGxpbmUiPT09Xy5zaGFwZT9mdW5jdGlvbih0KXt2YXIgZT10W3QubGVuZ3RoLTFdO3JldHVybiB0Lmxlbmd0aD4xJiZ0WzBdWzBdPT09ZVswXSYmdFswXVsxXT09PWVbMV0/by5zbW9vdGhjbG9zZWQodC5zbGljZSgxKSxfLnNtb290aGluZyk6by5zbW9vdGhvcGVuKHQsXy5zbW9vdGhpbmcpfTpmdW5jdGlvbih0KXtyZXR1cm4iTSIrdC5qb2luKCJMIil9LEk9ZnVuY3Rpb24odCl7cmV0dXJuIFAodC5yZXZlcnNlKCkpfSxqPWwoYyx7eGF4aXM6eSx5YXhpczp4LGNvbm5lY3RHYXBzOmIuY29ubmVjdGdhcHMsYmFzZVRvbGVyYW5jZTpNYXRoLm1heChfLndpZHRofHwxLDMpLzQsc2hhcGU6Xy5zaGFwZSxzaW1wbGlmeTpfLnNpbXBsaWZ5fSksQj1iLl9wb2x5Z29ucz1uZXcgQXJyYXkoai5sZW5ndGgpLGc9MDtnPGoubGVuZ3RoO2crKyliLl9wb2x5Z29uc1tnXT11KGpbZ10pO2oubGVuZ3RoJiYoTz1qWzBdWzBdLFI9KEQ9altqLmxlbmd0aC0xXSlbRC5sZW5ndGgtMV0pLFY9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEM9eihlKSxMPUkoZSksRj9BPyhGKz0iTCIrQy5zdWJzdHIoMSksTj1MKyJMIitOLnN1YnN0cigxKSk6KEYrPSJaIitDLE49TCsiWiIrTik6KEY9QyxOPUwpLHMuaGFzTGluZXMoYikmJmUubGVuZ3RoPjEpe3ZhciByPW4uc2VsZWN0KHRoaXMpO2lmKHIuZGF0dW0oYyksdCl2KHIuc3R5bGUoIm9wYWNpdHkiLDApLmF0dHIoImQiLEMpLmNhbGwoby5saW5lR3JvdXBTdHlsZSkpLnN0eWxlKCJvcGFjaXR5IiwxKTtlbHNle3ZhciBpPXYocik7aS5hdHRyKCJkIixDKSxvLnNpbmdsZUxpbmVTdHlsZShjLGkpfX19fX12YXIgVT13LnNlbGVjdEFsbCgiLmpzLWxpbmUiKS5kYXRhKGopO3YoVS5leGl0KCkpLnN0eWxlKCJvcGFjaXR5IiwwKS5yZW1vdmUoKSxVLmVhY2goVighMSkpLFUuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJqcy1saW5lIiwhMCkuc3R5bGUoInZlY3Rvci1lZmZlY3QiLCJub24tc2NhbGluZy1zdHJva2UiKS5jYWxsKG8ubGluZUdyb3VwU3R5bGUpLmVhY2goVighMCkpLG8uc2V0Q2xpcFVybChVLHIubGF5ZXJDbGlwSWQpLGoubGVuZ3RoPyhrP08mJlImJihBPygieSI9PT1BP09bMV09UlsxXT14LmMycCgwLCEwKToieCI9PT1BJiYoT1swXT1SWzBdPXkuYzJwKDAsITApKSx2KGspLmF0dHIoImQiLCJNIitSKyJMIitPKyJMIitGLnN1YnN0cigxKSkuY2FsbChvLnNpbmdsZUZpbGxTdHlsZSkpOnYoaykuYXR0cigiZCIsRisiWiIpLmNhbGwoby5zaW5nbGVGaWxsU3R5bGUpKTpNJiYoInRvbmV4dCI9PT1iLmZpbGwuc3Vic3RyKDAsNikmJkYmJlQ/KCJ0b25leHQiPT09Yi5maWxsP3YoTSkuYXR0cigiZCIsRisiWiIrVCsiWiIpLmNhbGwoby5zaW5nbGVGaWxsU3R5bGUpOnYoTSkuYXR0cigiZCIsRisiTCIrVC5zdWJzdHIoMSkrIloiKS5jYWxsKG8uc2luZ2xlRmlsbFN0eWxlKSxiLl9wb2x5Z29ucz1iLl9wb2x5Z29ucy5jb25jYXQoUykpOihIKE0pLGIuX3BvbHlnb25zPW51bGwpKSxiLl9wcmV2UmV2cGF0aD1OLGIuX3ByZXZQb2x5Z29ucz1CKTooaz9IKGspOk0mJkgoTSksYi5fcG9seWdvbnM9Yi5fcHJldlJldnBhdGg9Yi5fcHJldlBvbHlnb25zPW51bGwpO3ZhciBxPXcuc2VsZWN0QWxsKCIucG9pbnRzIik7ZD1xLmRhdGEoW2NdKSxxLmVhY2goWiksZC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInBvaW50cyIsITApLmVhY2goWiksZC5leGl0KCkucmVtb3ZlKCksZC5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPSExPT09dFswXS50cmFjZS5jbGlwb25heGlzO28uc2V0Q2xpcFVybChuLnNlbGVjdCh0aGlzKSxlP251bGw6ci5sYXllckNsaXBJZCl9KX1mdW5jdGlvbiBIKHQpe3YodCkuYXR0cigiZCIsIk0wLDBaIil9ZnVuY3Rpb24gRyh0KXtyZXR1cm4gdC5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQudmlzfSl9ZnVuY3Rpb24gVyh0KXtyZXR1cm4gdC5pZH1mdW5jdGlvbiBZKHQpe2lmKHQuaWRzKXJldHVybiBXfWZ1bmN0aW9uIFgoKXtyZXR1cm4hMX1mdW5jdGlvbiBaKGUpe3ZhciBpLGw9ZVswXS50cmFjZSxjPW4uc2VsZWN0KHRoaXMpLHU9cy5oYXNNYXJrZXJzKGwpLGg9cy5oYXNUZXh0KGwpLGY9WShsKSxwPVgsZD1YO3UmJihwPWwubWFya2VyLm1heGRpc3BsYXllZHx8bC5fbmVlZHNDdWxsP0c6YS5pZGVudGl0eSksaCYmKGQ9bC5tYXJrZXIubWF4ZGlzcGxheWVkfHxsLl9uZWVkc0N1bGw/RzphLmlkZW50aXR5KTt2YXIgZyxiPShpPWMuc2VsZWN0QWxsKCJwYXRoLnBvaW50IikuZGF0YShwLGYpKS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoInBvaW50IiwhMCk7bSYmYi5jYWxsKG8ucG9pbnRTdHlsZSxsLHQpLmNhbGwoby50cmFuc2xhdGVQb2ludHMseSx4KS5zdHlsZSgib3BhY2l0eSIsMCkudHJhbnNpdGlvbigpLnN0eWxlKCJvcGFjaXR5IiwxKSxpLm9yZGVyKCksdSYmKGc9by5tYWtlUG9pbnRTdHlsZUZucyhsKSksaS5lYWNoKGZ1bmN0aW9uKGUpe3ZhciBpPW4uc2VsZWN0KHRoaXMpLGE9dihpKTtvLnRyYW5zbGF0ZVBvaW50KGUsYSx5LHgpPyhvLnNpbmdsZVBvaW50U3R5bGUoZSxhLGwsZyx0KSxyLmxheWVyQ2xpcElkJiZvLmhpZGVPdXRzaWRlUmFuZ2VQb2ludChlLGEseSx4LGwueGNhbGVuZGFyLGwueWNhbGVuZGFyKSxsLmN1c3RvbWRhdGEmJmkuY2xhc3NlZCgicGxvdGx5LWN1c3RvbWRhdGEiLG51bGwhPT1lLmRhdGEmJnZvaWQgMCE9PWUuZGF0YSkpOmEucmVtb3ZlKCl9KSxtP2kuZXhpdCgpLnRyYW5zaXRpb24oKS5zdHlsZSgib3BhY2l0eSIsMCkucmVtb3ZlKCk6aS5leGl0KCkucmVtb3ZlKCksKGk9Yy5zZWxlY3RBbGwoImciKS5kYXRhKGQsZikpLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgidGV4dHBvaW50IiwhMCkuYXBwZW5kKCJ0ZXh0IiksaS5vcmRlcigpLGkuZWFjaChmdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0aGlzKSxpPXYoZS5zZWxlY3QoInRleHQiKSk7by50cmFuc2xhdGVQb2ludCh0LGkseSx4KT9yLmxheWVyQ2xpcElkJiZvLmhpZGVPdXRzaWRlUmFuZ2VQb2ludCh0LGUseSx4LGwueGNhbGVuZGFyLGwueWNhbGVuZGFyKTplLnJlbW92ZSgpfSksaS5zZWxlY3RBbGwoInRleHQiKS5jYWxsKG8udGV4dFBvaW50U3R5bGUsbCx0KS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXkuYzJwKHQueCkscj14LmMycCh0LnkpO24uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgidHNwYW4ubGluZSIpLmVhY2goZnVuY3Rpb24oKXt2KG4uc2VsZWN0KHRoaXMpKS5hdHRyKHt4OmUseTpyfSl9KX0pLGkuZXhpdCgpLnJlbW92ZSgpfX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSxhLHMpe3ZhciBsLHUsZixwLGQ9IWEsZz0hIWEmJmEuZHVyYXRpb24+MDtmb3IoKGY9aS5zZWxlY3RBbGwoImcudHJhY2UiKS5kYXRhKHIsZnVuY3Rpb24odCl7cmV0dXJuIHRbMF0udHJhY2UudWlkfSkpLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLGZ1bmN0aW9uKHQpe3JldHVybiJ0cmFjZSBzY2F0dGVyIHRyYWNlIit0WzBdLnRyYWNlLnVpZH0pLnN0eWxlKCJzdHJva2UtbWl0ZXJsaW1pdCIsMiksYyh0LGUsciksZnVuY3Rpb24odCxlLHIpe3ZhciBpO2Uuc2VsZWN0QWxsKCJnLnRyYWNlIikuZWFjaChmdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0aGlzKTtpZigoaT10WzBdLnRyYWNlKS5fbmV4dHRyYWNlKXtpZihpLl9uZXh0RmlsbD1lLnNlbGVjdCgiLmpzLWZpbGwuanMtdG9uZXh0IiksIWkuX25leHRGaWxsLnNpemUoKSl7dmFyIGE9IjpmaXJzdC1jaGlsZCI7ZS5zZWxlY3QoIi5qcy1maWxsLmpzLXRvemVybyIpLnNpemUoKSYmKGErPSIgKyAqIiksaS5fbmV4dEZpbGw9ZS5pbnNlcnQoInBhdGgiLGEpLmF0dHIoImNsYXNzIiwianMtZmlsbCBqcy10b25leHQiKX19ZWxzZSBlLnNlbGVjdEFsbCgiLmpzLWZpbGwuanMtdG9uZXh0IikucmVtb3ZlKCksaS5fbmV4dEZpbGw9bnVsbDtpLmZpbGwmJigidG96ZXJvIj09PWkuZmlsbC5zdWJzdHIoMCw2KXx8InRvc2VsZiI9PT1pLmZpbGx8fCJ0byI9PT1pLmZpbGwuc3Vic3RyKDAsMikmJiFpLl9wcmV2dHJhY2UpPyhpLl9vd25GaWxsPWUuc2VsZWN0KCIuanMtZmlsbC5qcy10b3plcm8iKSxpLl9vd25GaWxsLnNpemUoKXx8KGkuX293bkZpbGw9ZS5pbnNlcnQoInBhdGgiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJjbGFzcyIsImpzLWZpbGwganMtdG96ZXJvIikpKTooZS5zZWxlY3RBbGwoIi5qcy1maWxsLmpzLXRvemVybyIpLnJlbW92ZSgpLGkuX293bkZpbGw9bnVsbCksZS5zZWxlY3RBbGwoIi5qcy1maWxsIikuY2FsbChvLnNldENsaXBVcmwsci5sYXllckNsaXBJZCl9KX0oMCxpLGUpLGw9MCx1PXt9O2w8ci5sZW5ndGg7bCsrKXVbcltsXVswXS50cmFjZS51aWRdPWw7KGkuc2VsZWN0QWxsKCJnLnRyYWNlIikuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB1W3RbMF0udHJhY2UudWlkXT51W2VbMF0udHJhY2UudWlkXT8xOi0xfSksZyk/KHMmJihwPXMoKSksbi50cmFuc2l0aW9uKCkuZHVyYXRpb24oYS5kdXJhdGlvbikuZWFzZShhLmVhc2luZykuZWFjaCgiZW5kIixmdW5jdGlvbigpe3AmJnAoKX0pLmVhY2goImludGVycnVwdCIsZnVuY3Rpb24oKXtwJiZwKCl9KS5lYWNoKGZ1bmN0aW9uKCl7aS5zZWxlY3RBbGwoImcudHJhY2UiKS5lYWNoKGZ1bmN0aW9uKG4saSl7aCh0LGksZSxuLHIsdGhpcyxhKX0pfSkpOmkuc2VsZWN0QWxsKCJnLnRyYWNlIikuZWFjaChmdW5jdGlvbihuLGkpe2godCxpLGUsbixyLHRoaXMsYSl9KTtkJiZmLmV4aXQoKS5yZW1vdmUoKSxpLnNlbGVjdEFsbCgicGF0aDpub3QoW2RdKSIpLnJlbW92ZSgpfX0seyIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjU4MywiLi4vLi4vbGliIjo2ODQsIi4uLy4uL2xpYi9wb2x5Z29uIjo2OTYsIi4uLy4uL3JlZ2lzdHJ5Ijo4MTcsIi4vbGluZV9wb2ludHMiOjEwMjgsIi4vbGlua190cmFjZXMiOjEwMzAsIi4vc3VidHlwZXMiOjEwMzcsZDM6MTQ3fV0sMTAzNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL3N1YnR5cGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsaSxhLG8scz10LmNkLGw9dC54YXhpcyxjPXQueWF4aXMsdT1bXSxoPXNbMF0udHJhY2U7aWYoIW4uaGFzTWFya2VycyhoKSYmIW4uaGFzVGV4dChoKSlyZXR1cm5bXTtpZighMT09PWUpZm9yKHI9MDtyPHMubGVuZ3RoO3IrKylzW3JdLnNlbGVjdGVkPTA7ZWxzZSBmb3Iocj0wO3I8cy5sZW5ndGg7cisrKWk9c1tyXSxhPWwuYzJwKGkueCksbz1jLmMycChpLnkpLGUuY29udGFpbnMoW2Esb10pPyh1LnB1c2goe3BvaW50TnVtYmVyOnIseDpsLmMyZChpLngpLHk6Yy5jMmQoaS55KX0pLGkuc2VsZWN0ZWQ9MSk6aS5zZWxlY3RlZD0wO3JldHVybiB1fX0seyIuL3N1YnR5cGVzIjoxMDM3fV0sMTAzNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksYT10KCIuLi8uLi9yZWdpc3RyeSIpO2Z1bmN0aW9uIG8odCxlLHIpe2kucG9pbnRTdHlsZSh0LnNlbGVjdEFsbCgicGF0aC5wb2ludCIpLGUsciksaS50ZXh0UG9pbnRTdHlsZSh0LnNlbGVjdEFsbCgidGV4dCIpLGUscil9ZS5leHBvcnRzPXtzdHlsZTpmdW5jdGlvbih0LGUpe3ZhciByPWU/ZVswXS5ub2RlMzpuLnNlbGVjdCh0KS5zZWxlY3RBbGwoImcudHJhY2Uuc2NhdHRlciIpO3Iuc3R5bGUoIm9wYWNpdHkiLGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdLnRyYWNlLm9wYWNpdHl9KSxyLnNlbGVjdEFsbCgiZy5wb2ludHMiKS5lYWNoKGZ1bmN0aW9uKGUpe28obi5zZWxlY3QodGhpcyksZS50cmFjZXx8ZVswXS50cmFjZSx0KX0pLHIuc2VsZWN0QWxsKCJnLnRyYWNlIHBhdGguanMtbGluZSIpLmNhbGwoaS5saW5lR3JvdXBTdHlsZSksci5zZWxlY3RBbGwoImcudHJhY2UgcGF0aC5qcy1maWxsIikuY2FsbChpLmZpbGxHcm91cFN0eWxlKSxhLmdldENvbXBvbmVudE1ldGhvZCgiZXJyb3JiYXJzIiwic3R5bGUiKShyKX0sc3R5bGVQb2ludHM6byxzdHlsZU9uU2VsZWN0OmZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXS5ub2RlMyxuPWVbMF0udHJhY2U7bi5zZWxlY3RlZHBvaW50cz8oaS5zZWxlY3RlZFBvaW50U3R5bGUoci5zZWxlY3RBbGwoInBhdGgucG9pbnQiKSxuKSxpLnNlbGVjdGVkVGV4dFN0eWxlKHIuc2VsZWN0QWxsKCJ0ZXh0IiksbikpOm8ocixuLHQpfX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo1ODMsIi4uLy4uL3JlZ2lzdHJ5Ijo4MTcsZDM6MTQ3fV0sMTAzNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKTtlLmV4cG9ydHM9e2hhc0xpbmVzOmZ1bmN0aW9uKHQpe3JldHVybiB0LnZpc2libGUmJnQubW9kZSYmLTEhPT10Lm1vZGUuaW5kZXhPZigibGluZXMiKX0saGFzTWFya2VyczpmdW5jdGlvbih0KXtyZXR1cm4gdC52aXNpYmxlJiYodC5tb2RlJiYtMSE9PXQubW9kZS5pbmRleE9mKCJtYXJrZXJzIil8fCJzcGxvbSI9PT10LnR5cGUpfSxoYXNUZXh0OmZ1bmN0aW9uKHQpe3JldHVybiB0LnZpc2libGUmJnQubW9kZSYmLTEhPT10Lm1vZGUuaW5kZXhPZigidGV4dCIpfSxpc0J1YmJsZTpmdW5jdGlvbih0KXtyZXR1cm4gbi5pc1BsYWluT2JqZWN0KHQubWFya2VyKSYmbi5pc0FycmF5T3JUeXBlZEFycmF5KHQubWFya2VyLnNpemUpfX19LHsiLi4vLi4vbGliIjo2ODR9XSwxMDM4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpLGEpe2E9YXx8e30saSgidGV4dHBvc2l0aW9uIiksbi5jb2VyY2VGb250KGksInRleHRmb250IixyLmZvbnQpLGEubm9TZWxlY3R8fChpKCJzZWxlY3RlZC50ZXh0Zm9udC5jb2xvciIpLGkoInVuc2VsZWN0ZWQudGV4dGZvbnQuY29sb3IiKSl9fSx7Ii4uLy4uL2xpYiI6Njg0fV0sMTAzOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpKXt2YXIgYSxvPWkoIngiKSxzPWkoInkiKTtpZihuLmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwiaGFuZGxlVHJhY2VEZWZhdWx0cyIpKHQsZSxbIngiLCJ5Il0sciksbylzP2E9TWF0aC5taW4oby5sZW5ndGgscy5sZW5ndGgpOihhPW8ubGVuZ3RoLGkoInkwIiksaSgiZHkiKSk7ZWxzZXtpZighcylyZXR1cm4gMDthPWUueS5sZW5ndGgsaSgieDAiKSxpKCJkeCIpfXJldHVybiBlLl9sZW5ndGg9YSxhfX0seyIuLi8uLi9yZWdpc3RyeSI6ODE3fV0sMTA0MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9jb25zdGFudHMvZ2wzZF9kYXNoZXMiKSxzPXQoIi4uLy4uL2NvbnN0YW50cy9nbDNkX21hcmtlcnMiKSxsPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGM9dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsLHU9bi5saW5lLGg9bi5tYXJrZXIsZj1oLmxpbmU7dmFyIHA9ZS5leHBvcnRzPWMoe3g6bi54LHk6bi55LHo6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSx0ZXh0Omwoe30sbi50ZXh0LHt9KSxob3ZlcnRleHQ6bCh7fSxuLmhvdmVydGV4dCx7fSksbW9kZTpsKHt9LG4ubW9kZSx7ZGZsdDoibGluZXMrbWFya2VycyJ9KSxzdXJmYWNlYXhpczp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlstMSwwLDEsMl0sZGZsdDotMX0sc3VyZmFjZWNvbG9yOnt2YWxUeXBlOiJjb2xvciJ9LHByb2plY3Rpb246e3g6e3Nob3c6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LG9wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxfSxzY2FsZTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MTAsZGZsdDoyLzN9fSx5OntzaG93Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxvcGFjaXR5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MX0sc2NhbGU6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEwLGRmbHQ6Mi8zfX0sejp7c2hvdzp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sb3BhY2l0eTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjF9LHNjYWxlOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxMCxkZmx0OjIvM319fSxjb25uZWN0Z2FwczpuLmNvbm5lY3RnYXBzLGxpbmU6bCh7d2lkdGg6dS53aWR0aCxkYXNoOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6T2JqZWN0LmtleXMobyksZGZsdDoic29saWQifX0saSgibGluZSIpKSxtYXJrZXI6bCh7c3ltYm9sOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6T2JqZWN0LmtleXMocyksZGZsdDoiY2lyY2xlIixhcnJheU9rOiEwfSxzaXplOmwoe30saC5zaXplLHtkZmx0Ojh9KSxzaXplcmVmOmguc2l6ZXJlZixzaXplbWluOmguc2l6ZW1pbixzaXplbW9kZTpoLnNpemVtb2RlLG9wYWNpdHk6bCh7fSxoLm9wYWNpdHkse2FycmF5T2s6ITF9KSxjb2xvcmJhcjpoLmNvbG9yYmFyLGxpbmU6bCh7d2lkdGg6bCh7fSxmLndpZHRoLHthcnJheU9rOiExfSl9LGkoIm1hcmtlci5saW5lIikpfSxpKCJtYXJrZXIiKSksdGV4dHBvc2l0aW9uOmwoe30sbi50ZXh0cG9zaXRpb24se2RmbHQ6InRvcCBjZW50ZXIifSksdGV4dGZvbnQ6bi50ZXh0Zm9udCxob3ZlcmluZm86bCh7fSxhLmhvdmVyaW5mbyl9LCJjYWxjIiwibmVzdGVkIik7cC54LmVkaXRUeXBlPXAueS5lZGl0VHlwZT1wLnouZWRpdFR5cGU9ImNhbGMrY2xlYXJBeGlzVHlwZXMifSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo1NjUsIi4uLy4uL2NvbnN0YW50cy9nbDNkX2Rhc2hlcyI6NjU4LCIuLi8uLi9jb25zdGFudHMvZ2wzZF9tYXJrZXJzIjo2NTksIi4uLy4uL2xpYi9leHRlbmQiOjY3MywiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6NzE1LCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo3MjksIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyI6MTAxNX1dLDEwNDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9hcnJheXNfdG9fY2FsY2RhdGEiKSxpPXQoIi4uL3NjYXR0ZXIvY29sb3JzY2FsZV9jYWxjIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9W3t4OiExLHk6ITEsdHJhY2U6ZSx0Ont9fV07cmV0dXJuIG4ocixlKSxpKGUpLHJ9fSx7Ii4uL3NjYXR0ZXIvYXJyYXlzX3RvX2NhbGNkYXRhIjoxMDE0LCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsYyI6MTAxOX1dLDEwNDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKTtmdW5jdGlvbiBpKHQsZSxyKXtpZighZXx8IWUudmlzaWJsZSlyZXR1cm4gbnVsbDtmb3IodmFyIGk9bi5nZXRDb21wb25lbnRNZXRob2QoImVycm9yYmFycyIsIm1ha2VDb21wdXRlRXJyb3IiKShlKSxhPW5ldyBBcnJheSh0Lmxlbmd0aCksbz0wO288dC5sZW5ndGg7bysrKXt2YXIgcz1pKCt0W29dLG8pO2Fbb109Wy1zWzBdKnIsc1sxXSpyXX1yZXR1cm4gYX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1baSh0LngsdC5lcnJvcl94LGVbMF0pLGkodC55LHQuZXJyb3JfeSxlWzFdKSxpKHQueix0LmVycm9yX3osZVsyXSldLG49ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspaWYodFtlXSlyZXR1cm4gdFtlXS5sZW5ndGg7cmV0dXJuIDB9KHIpO2lmKDA9PT1uKXJldHVybiBudWxsO2Zvcih2YXIgYT1uZXcgQXJyYXkobiksbz0wO288bjtvKyspe2Zvcih2YXIgcz1bWzAsMCwwXSxbMCwwLDBdXSxsPTA7bDwzO2wrKylpZihyW2xdKWZvcih2YXIgYz0wO2M8MjtjKyspc1tjXVtsXT1yW2xdW29dW2NdO2Fbb109c31yZXR1cm4gYX19LHsiLi4vLi4vcmVnaXN0cnkiOjgxN31dLDEwNDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZ2wtbGluZTNkIiksaT10KCJnbC1zY2F0dGVyM2QiKSxhPXQoImdsLWVycm9yM2QiKSxvPXQoImdsLW1lc2gzZCIpLHM9dCgiZGVsYXVuYXktdHJpYW5ndWxhdGUiKSxsPXQoIi4uLy4uL2xpYiIpLGM9dCgiLi4vLi4vbGliL3N0cjJyZ2JhcnJheSIpLHU9dCgiLi4vLi4vbGliL2dsX2Zvcm1hdF9jb2xvciIpLmZvcm1hdENvbG9yLGg9dCgiLi4vc2NhdHRlci9tYWtlX2J1YmJsZV9zaXplX2Z1bmMiKSxmPXQoIi4uLy4uL2NvbnN0YW50cy9nbDNkX2Rhc2hlcyIpLHA9dCgiLi4vLi4vY29uc3RhbnRzL2dsM2RfbWFya2VycyIpLGQ9dCgiLi9jYWxjX2Vycm9ycyIpO2Z1bmN0aW9uIGcodCxlKXt0aGlzLnNjZW5lPXQsdGhpcy51aWQ9ZSx0aGlzLmxpbmVQbG90PW51bGwsdGhpcy5zY2F0dGVyUGxvdD1udWxsLHRoaXMuZXJyb3JCYXJzPW51bGwsdGhpcy50ZXh0TWFya2Vycz1udWxsLHRoaXMuZGVsYXVuYXlNZXNoPW51bGwsdGhpcy5jb2xvcj1udWxsLHRoaXMubW9kZT0iIix0aGlzLmRhdGFQb2ludHM9W10sdGhpcy5heGVzQm91bmRzPVtbLTEvMCwtMS8wLC0xLzBdLFsxLzAsMS8wLDEvMF1dLHRoaXMudGV4dExhYmVscz1udWxsLHRoaXMuZGF0YT1udWxsfXZhciBtPWcucHJvdG90eXBlO2Z1bmN0aW9uIHYodCxlKXtyZXR1cm4gZSg0KnQpfWZ1bmN0aW9uIHkodCl7cmV0dXJuIHBbdF19ZnVuY3Rpb24geCh0LGUscixuLGkpe3ZhciBhPW51bGw7aWYobC5pc0FycmF5T3JUeXBlZEFycmF5KHQpKXthPVtdO2Zvcih2YXIgbz0wO288ZTtvKyspdm9pZCAwPT09dFtvXT9hW29dPW46YVtvXT1yKHRbb10saSl9ZWxzZSBhPXIodCxsLmlkZW50aXR5KTtyZXR1cm4gYX1mdW5jdGlvbiBiKHQsZSl7dmFyIHIsbixpLGEsbyxzLGYscCxnPVtdLG09dC5mdWxsU2NlbmVMYXlvdXQsYj10LmRhdGFTY2FsZSxfPW0ueGF4aXMsdz1tLnlheGlzLGs9bS56YXhpcyxNPWUubWFya2VyLEE9ZS5saW5lLFQ9ZS54fHxbXSxTPWUueXx8W10sRT1lLnp8fFtdLEM9VC5sZW5ndGgsTD1lLnhjYWxlbmRhcix6PWUueWNhbGVuZGFyLFA9ZS56Y2FsZW5kYXI7Zm9yKG49MDtuPEM7bisrKWk9Xy5kMmwoVFtuXSwwLEwpKmJbMF0sYT13LmQybChTW25dLDAseikqYlsxXSxvPWsuZDJsKEVbbl0sMCxQKSpiWzJdLGdbbl09W2ksYSxvXTtpZihBcnJheS5pc0FycmF5KGUudGV4dCkpcz1lLnRleHQ7ZWxzZSBpZih2b2lkIDAhPT1lLnRleHQpZm9yKHM9bmV3IEFycmF5KEMpLG49MDtuPEM7bisrKXNbbl09ZS50ZXh0O2lmKHI9e3Bvc2l0aW9uOmcsbW9kZTplLm1vZGUsdGV4dDpzfSwibGluZSJpbiBlJiYoci5saW5lQ29sb3I9dShBLDEsQyksci5saW5lV2lkdGg9QS53aWR0aCxyLmxpbmVEYXNoZXM9QS5kYXNoKSwibWFya2VyImluIGUpe3ZhciBJPWgoZSk7ci5zY2F0dGVyQ29sb3I9dShNLDEsQyksci5zY2F0dGVyU2l6ZT14KE0uc2l6ZSxDLHYsMjAsSSksci5zY2F0dGVyTWFya2VyPXgoTS5zeW1ib2wsQyx5LCJcdTI1Y2YiKSxyLnNjYXR0ZXJMaW5lV2lkdGg9TS5saW5lLndpZHRoLHIuc2NhdHRlckxpbmVDb2xvcj11KE0ubGluZSwxLEMpLHIuc2NhdHRlckFuZ2xlPTB9InRleHRwb3NpdGlvbiJpbiBlJiYoci50ZXh0T2Zmc2V0PShmPWUudGV4dHBvc2l0aW9uLHA9WzAsMF0sQXJyYXkuaXNBcnJheShmKT9bMCwtMV06KGYuaW5kZXhPZigiYm90dG9tIik+PTAmJihwWzFdKz0xKSxmLmluZGV4T2YoInRvcCIpPj0wJiYocFsxXS09MSksZi5pbmRleE9mKCJsZWZ0Iik+PTAmJihwWzBdLT0xKSxmLmluZGV4T2YoInJpZ2h0Iik+PTAmJihwWzBdKz0xKSxwKSksci50ZXh0Q29sb3I9dShlLnRleHRmb250LDEsQyksci50ZXh0U2l6ZT14KGUudGV4dGZvbnQuc2l6ZSxDLGwuaWRlbnRpdHksMTIpLHIudGV4dEZvbnQ9ZS50ZXh0Zm9udC5mYW1pbHksci50ZXh0QW5nbGU9MCk7dmFyIE89WyJ4IiwieSIsInoiXTtmb3Ioci5wcm9qZWN0PVshMSwhMSwhMV0sci5wcm9qZWN0U2NhbGU9WzEsMSwxXSxyLnByb2plY3RPcGFjaXR5PVsxLDEsMV0sbj0wO248MzsrK24pe3ZhciBEPWUucHJvamVjdGlvbltPW25dXTsoci5wcm9qZWN0W25dPUQuc2hvdykmJihyLnByb2plY3RPcGFjaXR5W25dPUQub3BhY2l0eSxyLnByb2plY3RTY2FsZVtuXT1ELnNjYWxlKX1yLmVycm9yQm91bmRzPWQoZSxiKTt2YXIgUj1mdW5jdGlvbih0KXtmb3IodmFyIGU9WzAsMCwwXSxyPVtbMCwwLDBdLFswLDAsMF0sWzAsMCwwXV0sbj1bMCwwLDBdLGk9MDtpPDM7aSsrKXt2YXIgYT10W2ldO2EmJiExIT09YS5jb3B5X3pzdHlsZSYmKGE9dFsyXSksYSYmKGVbaV09YS53aWR0aC8yLHJbaV09YyhhLmNvbG9yKSxuPWEudGhpY2tuZXNzKX1yZXR1cm57Y2FwU2l6ZTplLGNvbG9yOnIsbGluZVdpZHRoOm59fShbZS5lcnJvcl94LGUuZXJyb3JfeSxlLmVycm9yX3pdKTtyZXR1cm4gci5lcnJvckNvbG9yPVIuY29sb3Isci5lcnJvckxpbmVXaWR0aD1SLmxpbmVXaWR0aCxyLmVycm9yQ2FwU2l6ZT1SLmNhcFNpemUsci5kZWxhdW5heUF4aXM9ZS5zdXJmYWNlYXhpcyxyLmRlbGF1bmF5Q29sb3I9YyhlLnN1cmZhY2Vjb2xvcikscn1mdW5jdGlvbiBfKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpe3ZhciBlPXRbMF07cmV0dXJuIEFycmF5LmlzQXJyYXkoZSkmJih0PWUpLCJyZ2IoIit0LnNsaWNlKDAsMykubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKDI1NSp0KX0pKyIpIn1yZXR1cm4gbnVsbH1tLmhhbmRsZVBpY2s9ZnVuY3Rpb24odCl7aWYodC5vYmplY3QmJih0Lm9iamVjdD09PXRoaXMubGluZVBsb3R8fHQub2JqZWN0PT09dGhpcy5kZWxhdW5heU1lc2h8fHQub2JqZWN0PT09dGhpcy50ZXh0TWFya2Vyc3x8dC5vYmplY3Q9PT10aGlzLnNjYXR0ZXJQbG90KSl7dmFyIGU9dC5pbmRleD10LmRhdGEuaW5kZXg7cmV0dXJuIHQub2JqZWN0LmhpZ2hsaWdodCYmdC5vYmplY3QuaGlnaGxpZ2h0KG51bGwpLHRoaXMuc2NhdHRlclBsb3QmJih0Lm9iamVjdD10aGlzLnNjYXR0ZXJQbG90LHRoaXMuc2NhdHRlclBsb3QuaGlnaGxpZ2h0KHQuZGF0YSkpLHQudGV4dExhYmVsPSIiLHRoaXMudGV4dExhYmVscyYmKEFycmF5LmlzQXJyYXkodGhpcy50ZXh0TGFiZWxzKT8odGhpcy50ZXh0TGFiZWxzW2VdfHwwPT09dGhpcy50ZXh0TGFiZWxzW2VdKSYmKHQudGV4dExhYmVsPXRoaXMudGV4dExhYmVsc1tlXSk6dC50ZXh0TGFiZWw9dGhpcy50ZXh0TGFiZWxzKSx0LnRyYWNlQ29vcmRpbmF0ZT1bdGhpcy5kYXRhLnhbZV0sdGhpcy5kYXRhLnlbZV0sdGhpcy5kYXRhLnpbZV1dLCEwfX0sbS51cGRhdGU9ZnVuY3Rpb24odCl7dmFyIGUscixsLGMsdT10aGlzLnNjZW5lLmdscGxvdC5nbCxoPWYuc29saWQ7dGhpcy5kYXRhPXQ7dmFyIHA9Yih0aGlzLnNjZW5lLHQpOyJtb2RlImluIHAmJih0aGlzLm1vZGU9cC5tb2RlKSwibGluZURhc2hlcyJpbiBwJiZwLmxpbmVEYXNoZXMgaW4gZiYmKGg9ZltwLmxpbmVEYXNoZXNdKSx0aGlzLmNvbG9yPV8ocC5zY2F0dGVyQ29sb3IpfHxfKHAubGluZUNvbG9yKSx0aGlzLmRhdGFQb2ludHM9cC5wb3NpdGlvbixlPXtnbDp1LHBvc2l0aW9uOnAucG9zaXRpb24sY29sb3I6cC5saW5lQ29sb3IsbGluZVdpZHRoOnAubGluZVdpZHRofHwxLGRhc2hlczpoWzBdLGRhc2hTY2FsZTpoWzFdLG9wYWNpdHk6dC5vcGFjaXR5LGNvbm5lY3RHYXBzOnQuY29ubmVjdGdhcHN9LC0xIT09dGhpcy5tb2RlLmluZGV4T2YoImxpbmVzIik/dGhpcy5saW5lUGxvdD90aGlzLmxpbmVQbG90LnVwZGF0ZShlKToodGhpcy5saW5lUGxvdD1uKGUpLHRoaXMubGluZVBsb3QuX3RyYWNlPXRoaXMsdGhpcy5zY2VuZS5nbHBsb3QuYWRkKHRoaXMubGluZVBsb3QpKTp0aGlzLmxpbmVQbG90JiYodGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMubGluZVBsb3QpLHRoaXMubGluZVBsb3QuZGlzcG9zZSgpLHRoaXMubGluZVBsb3Q9bnVsbCk7dmFyIGQ9dC5vcGFjaXR5O2lmKHQubWFya2VyJiZ0Lm1hcmtlci5vcGFjaXR5JiYoZCo9dC5tYXJrZXIub3BhY2l0eSkscj17Z2w6dSxwb3NpdGlvbjpwLnBvc2l0aW9uLGNvbG9yOnAuc2NhdHRlckNvbG9yLHNpemU6cC5zY2F0dGVyU2l6ZSxnbHlwaDpwLnNjYXR0ZXJNYXJrZXIsb3BhY2l0eTpkLG9ydGhvZ3JhcGhpYzohMCxsaW5lV2lkdGg6cC5zY2F0dGVyTGluZVdpZHRoLGxpbmVDb2xvcjpwLnNjYXR0ZXJMaW5lQ29sb3IscHJvamVjdDpwLnByb2plY3QscHJvamVjdFNjYWxlOnAucHJvamVjdFNjYWxlLHByb2plY3RPcGFjaXR5OnAucHJvamVjdE9wYWNpdHl9LC0xIT09dGhpcy5tb2RlLmluZGV4T2YoIm1hcmtlcnMiKT90aGlzLnNjYXR0ZXJQbG90P3RoaXMuc2NhdHRlclBsb3QudXBkYXRlKHIpOih0aGlzLnNjYXR0ZXJQbG90PWkociksdGhpcy5zY2F0dGVyUGxvdC5fdHJhY2U9dGhpcyx0aGlzLnNjYXR0ZXJQbG90LmhpZ2hsaWdodFNjYWxlPTEsdGhpcy5zY2VuZS5nbHBsb3QuYWRkKHRoaXMuc2NhdHRlclBsb3QpKTp0aGlzLnNjYXR0ZXJQbG90JiYodGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMuc2NhdHRlclBsb3QpLHRoaXMuc2NhdHRlclBsb3QuZGlzcG9zZSgpLHRoaXMuc2NhdHRlclBsb3Q9bnVsbCksYz17Z2w6dSxwb3NpdGlvbjpwLnBvc2l0aW9uLGdseXBoOnAudGV4dCxjb2xvcjpwLnRleHRDb2xvcixzaXplOnAudGV4dFNpemUsYW5nbGU6cC50ZXh0QW5nbGUsYWxpZ25tZW50OnAudGV4dE9mZnNldCxmb250OnAudGV4dEZvbnQsb3J0aG9ncmFwaGljOiEwLGxpbmVXaWR0aDowLHByb2plY3Q6ITEsb3BhY2l0eTp0Lm9wYWNpdHl9LHRoaXMudGV4dExhYmVscz10LmhvdmVydGV4dHx8dC50ZXh0LC0xIT09dGhpcy5tb2RlLmluZGV4T2YoInRleHQiKT90aGlzLnRleHRNYXJrZXJzP3RoaXMudGV4dE1hcmtlcnMudXBkYXRlKGMpOih0aGlzLnRleHRNYXJrZXJzPWkoYyksdGhpcy50ZXh0TWFya2Vycy5fdHJhY2U9dGhpcyx0aGlzLnRleHRNYXJrZXJzLmhpZ2hsaWdodFNjYWxlPTEsdGhpcy5zY2VuZS5nbHBsb3QuYWRkKHRoaXMudGV4dE1hcmtlcnMpKTp0aGlzLnRleHRNYXJrZXJzJiYodGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMudGV4dE1hcmtlcnMpLHRoaXMudGV4dE1hcmtlcnMuZGlzcG9zZSgpLHRoaXMudGV4dE1hcmtlcnM9bnVsbCksbD17Z2w6dSxwb3NpdGlvbjpwLnBvc2l0aW9uLGNvbG9yOnAuZXJyb3JDb2xvcixlcnJvcjpwLmVycm9yQm91bmRzLGxpbmVXaWR0aDpwLmVycm9yTGluZVdpZHRoLGNhcFNpemU6cC5lcnJvckNhcFNpemUsb3BhY2l0eTp0Lm9wYWNpdHl9LHRoaXMuZXJyb3JCYXJzP3AuZXJyb3JCb3VuZHM/dGhpcy5lcnJvckJhcnMudXBkYXRlKGwpOih0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy5lcnJvckJhcnMpLHRoaXMuZXJyb3JCYXJzLmRpc3Bvc2UoKSx0aGlzLmVycm9yQmFycz1udWxsKTpwLmVycm9yQm91bmRzJiYodGhpcy5lcnJvckJhcnM9YShsKSx0aGlzLmVycm9yQmFycy5fdHJhY2U9dGhpcyx0aGlzLnNjZW5lLmdscGxvdC5hZGQodGhpcy5lcnJvckJhcnMpKSxwLmRlbGF1bmF5QXhpcz49MCl7dmFyIGc9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGk9KHIrMSklMyxhPShyKzIpJTMsbz1bXSxsPVtdO2ZvcihuPTA7bjx0Lmxlbmd0aDsrK24pe3ZhciBjPXRbbl07IWlzTmFOKGNbaV0pJiZpc0Zpbml0ZShjW2ldKSYmIWlzTmFOKGNbYV0pJiZpc0Zpbml0ZShjW2FdKSYmKG8ucHVzaChbY1tpXSxjW2FdXSksbC5wdXNoKG4pKX12YXIgdT1zKG8pO2ZvcihuPTA7bjx1Lmxlbmd0aDsrK24pZm9yKHZhciBoPXVbbl0sZj0wO2Y8aC5sZW5ndGg7KytmKWhbZl09bFtoW2ZdXTtyZXR1cm57cG9zaXRpb25zOnQsY2VsbHM6dSxtZXNoQ29sb3I6ZX19KHAucG9zaXRpb24scC5kZWxhdW5heUNvbG9yLHAuZGVsYXVuYXlBeGlzKTtnLm9wYWNpdHk9dC5vcGFjaXR5LHRoaXMuZGVsYXVuYXlNZXNoP3RoaXMuZGVsYXVuYXlNZXNoLnVwZGF0ZShnKTooZy5nbD11LHRoaXMuZGVsYXVuYXlNZXNoPW8oZyksdGhpcy5kZWxhdW5heU1lc2guX3RyYWNlPXRoaXMsdGhpcy5zY2VuZS5nbHBsb3QuYWRkKHRoaXMuZGVsYXVuYXlNZXNoKSl9ZWxzZSB0aGlzLmRlbGF1bmF5TWVzaCYmKHRoaXMuc2NlbmUuZ2xwbG90LnJlbW92ZSh0aGlzLmRlbGF1bmF5TWVzaCksdGhpcy5kZWxhdW5heU1lc2guZGlzcG9zZSgpLHRoaXMuZGVsYXVuYXlNZXNoPW51bGwpfSxtLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmxpbmVQbG90JiYodGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMubGluZVBsb3QpLHRoaXMubGluZVBsb3QuZGlzcG9zZSgpKSx0aGlzLnNjYXR0ZXJQbG90JiYodGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMuc2NhdHRlclBsb3QpLHRoaXMuc2NhdHRlclBsb3QuZGlzcG9zZSgpKSx0aGlzLmVycm9yQmFycyYmKHRoaXMuc2NlbmUuZ2xwbG90LnJlbW92ZSh0aGlzLmVycm9yQmFycyksdGhpcy5lcnJvckJhcnMuZGlzcG9zZSgpKSx0aGlzLnRleHRNYXJrZXJzJiYodGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMudGV4dE1hcmtlcnMpLHRoaXMudGV4dE1hcmtlcnMuZGlzcG9zZSgpKSx0aGlzLmRlbGF1bmF5TWVzaCYmKHRoaXMuc2NlbmUuZ2xwbG90LnJlbW92ZSh0aGlzLmRlbGF1bmF5TWVzaCksdGhpcy5kZWxhdW5heU1lc2guZGlzcG9zZSgpKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bmV3IGcodCxlLnVpZCk7cmV0dXJuIHIudXBkYXRlKGUpLHJ9fSx7Ii4uLy4uL2NvbnN0YW50cy9nbDNkX2Rhc2hlcyI6NjU4LCIuLi8uLi9jb25zdGFudHMvZ2wzZF9tYXJrZXJzIjo2NTksIi4uLy4uL2xpYiI6Njg0LCIuLi8uLi9saWIvZ2xfZm9ybWF0X2NvbG9yIjo2ODAsIi4uLy4uL2xpYi9zdHIycmdiYXJyYXkiOjcwNywiLi4vc2NhdHRlci9tYWtlX2J1YmJsZV9zaXplX2Z1bmMiOjEwMzEsIi4vY2FsY19lcnJvcnMiOjEwNDIsImRlbGF1bmF5LXRyaWFuZ3VsYXRlIjoxNDksImdsLWVycm9yM2QiOjIzNywiZ2wtbGluZTNkIjoyNDUsImdsLW1lc2gzZCI6MjY4LCJnbC1zY2F0dGVyM2QiOjI4M31dLDEwNDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vc2NhdHRlci9zdWJ0eXBlcyIpLG89dCgiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiKSxzPXQoIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0cyIpLGw9dCgiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzIiksYz10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsdSl7ZnVuY3Rpb24gaChyLG4pe3JldHVybiBpLmNvZXJjZSh0LGUsYyxyLG4pfWlmKGZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhPTAsbz1yKCJ4Iikscz1yKCJ5IiksbD1yKCJ6Iik7bi5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZVRyYWNlRGVmYXVsdHMiKSh0LGUsWyJ4IiwieSIsInoiXSxpKSxvJiZzJiZsJiYoYT1NYXRoLm1pbihvLmxlbmd0aCxzLmxlbmd0aCxsLmxlbmd0aCksZS5fbGVuZ3RoPWUuX3hsZW5ndGg9ZS5feWxlbmd0aD1lLl96bGVuZ3RoPWEpO3JldHVybiBhfSh0LGUsaCx1KSl7aCgidGV4dCIpLGgoImhvdmVydGV4dCIpLGgoIm1vZGUiKSxhLmhhc0xpbmVzKGUpJiYoaCgiY29ubmVjdGdhcHMiKSxzKHQsZSxyLHUsaCkpLGEuaGFzTWFya2VycyhlKSYmbyh0LGUscix1LGgse25vU2VsZWN0OiEwfSksYS5oYXNUZXh0KGUpJiZsKHQsZSx1LGgse25vU2VsZWN0OiEwfSk7dmFyIGY9KGUubGluZXx8e30pLmNvbG9yLHA9KGUubWFya2VyfHx7fSkuY29sb3I7aCgic3VyZmFjZWF4aXMiKT49MCYmaCgic3VyZmFjZWNvbG9yIixmfHxwKTtmb3IodmFyIGQ9WyJ4IiwieSIsInoiXSxnPTA7ZzwzOysrZyl7dmFyIG09InByb2plY3Rpb24uIitkW2ddO2gobSsiLnNob3ciKSYmKGgobSsiLm9wYWNpdHkiKSxoKG0rIi5zY2FsZSIpKX12YXIgdj1uLmdldENvbXBvbmVudE1ldGhvZCgiZXJyb3JiYXJzIiwic3VwcGx5RGVmYXVsdHMiKTt2KHQsZSxyLHtheGlzOiJ6In0pLHYodCxlLHIse2F4aXM6InkiLGluaGVyaXQ6InoifSksdih0LGUscix7YXhpczoieCIsaW5oZXJpdDoieiJ9KX1lbHNlIGUudmlzaWJsZT0hMX19LHsiLi4vLi4vbGliIjo2ODQsIi4uLy4uL3JlZ2lzdHJ5Ijo4MTcsIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0cyI6MTAyNywiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiOjEwMzMsIi4uL3NjYXR0ZXIvc3VidHlwZXMiOjEwMzcsIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0cyI6MTAzOCwiLi9hdHRyaWJ1dGVzIjoxMDQwfV0sMTA0NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17fTtuLnBsb3Q9dCgiLi9jb252ZXJ0Iiksbi5hdHRyaWJ1dGVzPXQoIi4vYXR0cmlidXRlcyIpLG4ubWFya2VyU3ltYm9scz10KCIuLi8uLi9jb25zdGFudHMvZ2wzZF9tYXJrZXJzIiksbi5zdXBwbHlEZWZhdWx0cz10KCIuL2RlZmF1bHRzIiksbi5jb2xvcmJhcj10KCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhciIpLG4uY2FsYz10KCIuL2NhbGMiKSxuLm1vZHVsZVR5cGU9InRyYWNlIixuLm5hbWU9InNjYXR0ZXIzZCIsbi5iYXNlUGxvdE1vZHVsZT10KCIuLi8uLi9wbG90cy9nbDNkIiksbi5jYXRlZ29yaWVzPVsiZ2wzZCIsInN5bWJvbHMiLCJzaG93TGVnZW5kIl0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7Ii4uLy4uL2NvbnN0YW50cy9nbDNkX21hcmtlcnMiOjY1OSwiLi4vLi4vcGxvdHMvZ2wzZCI6Nzc0LCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhciI6MTAzMiwiLi9hdHRyaWJ1dGVzIjoxMDQwLCIuL2NhbGMiOjEwNDEsIi4vY29udmVydCI6MTA0MywiLi9kZWZhdWx0cyI6MTA0NH1dLDEwNDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxsPW4ubWFya2VyLGM9bi5saW5lLHU9bC5saW5lO2UuZXhwb3J0cz17Y2FycGV0Ont2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJjYWxjIn0sYTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxiOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LG1vZGU6cyh7fSxuLm1vZGUse2RmbHQ6Im1hcmtlcnMifSksdGV4dDpzKHt9LG4udGV4dCx7fSksbGluZTp7Y29sb3I6Yy5jb2xvcix3aWR0aDpjLndpZHRoLGRhc2g6Yy5kYXNoLHNoYXBlOnMoe30sYy5zaGFwZSx7dmFsdWVzOlsibGluZWFyIiwic3BsaW5lIl19KSxzbW9vdGhpbmc6Yy5zbW9vdGhpbmcsZWRpdFR5cGU6ImNhbGMifSxjb25uZWN0Z2FwczpuLmNvbm5lY3RnYXBzLGZpbGw6cyh7fSxuLmZpbGwse3ZhbHVlczpbIm5vbmUiLCJ0b3NlbGYiLCJ0b25leHQiXX0pLGZpbGxjb2xvcjpuLmZpbGxjb2xvcixtYXJrZXI6cyh7c3ltYm9sOmwuc3ltYm9sLG9wYWNpdHk6bC5vcGFjaXR5LG1heGRpc3BsYXllZDpsLm1heGRpc3BsYXllZCxzaXplOmwuc2l6ZSxzaXplcmVmOmwuc2l6ZXJlZixzaXplbWluOmwuc2l6ZW1pbixzaXplbW9kZTpsLnNpemVtb2RlLGxpbmU6cyh7d2lkdGg6dS53aWR0aCxlZGl0VHlwZToiY2FsYyJ9LGEoIm1hcmtlci5saW5lIikpLGdyYWRpZW50OmwuZ3JhZGllbnQsZWRpdFR5cGU6ImNhbGMifSxhKCJtYXJrZXIiKSx7Y29sb3JiYXI6b30pLHRleHRmb250Om4udGV4dGZvbnQsdGV4dHBvc2l0aW9uOm4udGV4dHBvc2l0aW9uLHNlbGVjdGVkOm4uc2VsZWN0ZWQsdW5zZWxlY3RlZDpuLnVuc2VsZWN0ZWQsaG92ZXJpbmZvOnMoe30saS5ob3ZlcmluZm8se2ZsYWdzOlsiYSIsImIiLCJ0ZXh0IiwibmFtZSJdfSksaG92ZXJvbjpuLmhvdmVyb259fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlcyI6NTU5LCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NTY1LCIuLi8uLi9saWIvZXh0ZW5kIjo2NzMsIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjcyOSwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIjoxMDE1fV0sMTA0NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGMiKSxhPXQoIi4uL3NjYXR0ZXIvYXJyYXlzX3RvX2NhbGNkYXRhIiksbz10KCIuLi9zY2F0dGVyL2NhbGNfc2VsZWN0aW9uIikscz10KCIuLi9zY2F0dGVyL2NhbGMiKS5jYWxjTWFya2VyU2l6ZSxsPXQoIi4uL2NhcnBldC9sb29rdXBfY2FycGV0aWQiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lLl9jYXJwZXRUcmFjZT1sKHQsZSk7aWYociYmci52aXNpYmxlJiYibGVnZW5kb25seSIhPT1yLnZpc2libGUpe3ZhciBjO2UueGF4aXM9ci54YXhpcyxlLnlheGlzPXIueWF4aXM7dmFyIHUsaCxmPWUuX2xlbmd0aCxwPW5ldyBBcnJheShmKSxkPSExO2ZvcihjPTA7YzxmO2MrKylpZih1PWUuYVtjXSxoPWUuYltjXSxuKHUpJiZuKGgpKXt2YXIgZz1yLmFiMnh5KCt1LCtoLCEwKSxtPXIuaXNWaXNpYmxlKCt1LCtoKTttfHwoZD0hMCkscFtjXT17eDpnWzBdLHk6Z1sxXSxhOnUsYjpoLHZpczptfX1lbHNlIHBbY109e3g6ITEseTohMX07cmV0dXJuIGUuX25lZWRzQ3VsbD1kLHBbMF0uY2FycGV0PXIscFswXS50cmFjZT1lLHMoZSxmKSxpKGUpLGEocCxlKSxvKHAsZSkscH19fSx7Ii4uL2NhcnBldC9sb29rdXBfY2FycGV0aWQiOjg3NCwiLi4vc2NhdHRlci9hcnJheXNfdG9fY2FsY2RhdGEiOjEwMTQsIi4uL3NjYXR0ZXIvY2FsYyI6MTAxNiwiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvbiI6MTAxNywiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGMiOjEwMTksImZhc3QtaXNudW1lcmljIjoyMTR9XSwxMDQ4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vc2NhdHRlci9jb25zdGFudHMiKSxhPXQoIi4uL3NjYXR0ZXIvc3VidHlwZXMiKSxvPXQoIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzIikscz10KCIuLi9zY2F0dGVyL2xpbmVfZGVmYXVsdHMiKSxsPXQoIi4uL3NjYXR0ZXIvbGluZV9zaGFwZV9kZWZhdWx0cyIpLGM9dCgiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzIiksdT10KCIuLi9zY2F0dGVyL2ZpbGxjb2xvcl9kZWZhdWx0cyIpLGg9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGYpe2Z1bmN0aW9uIHAocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGgscixpKX1wKCJjYXJwZXQiKSxlLnhheGlzPSJ4IixlLnlheGlzPSJ5Ijt2YXIgZD1wKCJhIiksZz1wKCJiIiksbT1NYXRoLm1pbihkLmxlbmd0aCxnLmxlbmd0aCk7aWYobSl7ZS5fbGVuZ3RoPW0scCgidGV4dCIpLHAoIm1vZGUiLG08aS5QVFNfTElORVNPTkxZPyJsaW5lcyttYXJrZXJzIjoibGluZXMiKSxhLmhhc0xpbmVzKGUpJiYocyh0LGUscixmLHApLGwodCxlLHApLHAoImNvbm5lY3RnYXBzIikpLGEuaGFzTWFya2VycyhlKSYmbyh0LGUscixmLHAse2dyYWRpZW50OiEwfSksYS5oYXNUZXh0KGUpJiZjKHQsZSxmLHApO3ZhciB2PVtdOyhhLmhhc01hcmtlcnMoZSl8fGEuaGFzVGV4dChlKSkmJihwKCJtYXJrZXIubWF4ZGlzcGxheWVkIiksdi5wdXNoKCJwb2ludHMiKSkscCgiZmlsbCIpLCJub25lIiE9PWUuZmlsbCYmKHUodCxlLHIscCksYS5oYXNMaW5lcyhlKXx8bCh0LGUscCkpLCJ0b25leHQiIT09ZS5maWxsJiYidG9zZWxmIiE9PWUuZmlsbHx8di5wdXNoKCJmaWxscyIpLHAoImhvdmVyb24iLHYuam9pbigiKyIpfHwicG9pbnRzIiksbi5jb2VyY2VTZWxlY3Rpb25NYXJrZXJPcGFjaXR5KGUscCl9ZWxzZSBlLnZpc2libGU9ITF9fSx7Ii4uLy4uL2xpYiI6Njg0LCIuLi9zY2F0dGVyL2NvbnN0YW50cyI6MTAyMCwiLi4vc2NhdHRlci9maWxsY29sb3JfZGVmYXVsdHMiOjEwMjMsIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0cyI6MTAyNywiLi4vc2NhdHRlci9saW5lX3NoYXBlX2RlZmF1bHRzIjoxMDI5LCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0cyI6MTAzMywiLi4vc2NhdHRlci9zdWJ0eXBlcyI6MTAzNywiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzIjoxMDM4LCIuL2F0dHJpYnV0ZXMiOjEwNDZ9XSwxMDQ5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPW5baV07cmV0dXJuIHQuYT1hLmEsdC5iPWEuYix0fX0se31dLDEwNTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9ob3ZlciIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpKXt2YXIgYT1uKHQsZSxyLGkpO2lmKGEmJiExIT09YVswXS5pbmRleCl7dmFyIG89YVswXTtpZih2b2lkIDA9PT1vLmluZGV4KXt2YXIgcz0xLW8ueTAvdC55YS5fbGVuZ3RoLGw9dC54YS5fbGVuZ3RoLGM9bCpzLzIsdT1sLWM7cmV0dXJuIG8ueDA9TWF0aC5tYXgoTWF0aC5taW4oby54MCx1KSxjKSxvLngxPU1hdGgubWF4KE1hdGgubWluKG8ueDEsdSksYyksYX12YXIgaD1vLmNkW28uaW5kZXhdO28uYT1oLmEsby5iPWguYixvLnhMYWJlbFZhbD12b2lkIDAsby55TGFiZWxWYWw9dm9pZCAwO3ZhciBmPW8udHJhY2UscD1mLl9jYXJwZXQsZD0oaC5oaXx8Zi5ob3ZlcmluZm8pLnNwbGl0KCIrIiksZz1bXTstMSE9PWQuaW5kZXhPZigiYWxsIikmJihkPVsiYSIsImIiXSksLTEhPT1kLmluZGV4T2YoImEiKSYmdyhwLmFheGlzLGguYSksLTEhPT1kLmluZGV4T2YoImIiKSYmdyhwLmJheGlzLGguYik7dmFyIG09cC5hYjJpaihbaC5hLGguYl0pLHY9TWF0aC5mbG9vcihtWzBdKSx5PW1bMF0tdix4PU1hdGguZmxvb3IobVsxXSksYj1tWzFdLXgsXz1wLmV2YWx4eShbXSx2LHgseSxiKTtyZXR1cm4gZy5wdXNoKCJ5OiAiK19bMV0udG9GaXhlZCgzKSksby5leHRyYVRleHQ9Zy5qb2luKCI8YnI+IiksYX1mdW5jdGlvbiB3KHQsZSl7dmFyIHI7cj10LmxhYmVscHJlZml4JiZ0LmxhYmVscHJlZml4Lmxlbmd0aD4wP3QubGFiZWxwcmVmaXgucmVwbGFjZSgvID0gJC8sIiIpOnQuX2hvdmVydGl0bGUsZy5wdXNoKHIrIjogIitlLnRvRml4ZWQoMykrdC5sYWJlbHN1ZmZpeCl9fX0seyIuLi9zY2F0dGVyL2hvdmVyIjoxMDI1fV0sMTA1MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17fTtuLmF0dHJpYnV0ZXM9dCgiLi9hdHRyaWJ1dGVzIiksbi5zdXBwbHlEZWZhdWx0cz10KCIuL2RlZmF1bHRzIiksbi5jb2xvcmJhcj10KCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhciIpLG4uY2FsYz10KCIuL2NhbGMiKSxuLnBsb3Q9dCgiLi9wbG90Iiksbi5zdHlsZT10KCIuLi9zY2F0dGVyL3N0eWxlIikuc3R5bGUsbi5zdHlsZU9uU2VsZWN0PXQoIi4uL3NjYXR0ZXIvc3R5bGUiKS5zdHlsZU9uU2VsZWN0LG4uaG92ZXJQb2ludHM9dCgiLi9ob3ZlciIpLG4uc2VsZWN0UG9pbnRzPXQoIi4uL3NjYXR0ZXIvc2VsZWN0Iiksbi5ldmVudERhdGE9dCgiLi9ldmVudF9kYXRhIiksbi5tb2R1bGVUeXBlPSJ0cmFjZSIsbi5uYW1lPSJzY2F0dGVyY2FycGV0IixuLmJhc2VQbG90TW9kdWxlPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiIpLG4uY2F0ZWdvcmllcz1bInN2ZyIsImNhcnBldCIsInN5bWJvbHMiLCJzaG93TGVnZW5kIiwiY2FycGV0RGVwZW5kZW50Iiwiem9vbVNjYWxlIl0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbiI6NzQzLCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhciI6MTAzMiwiLi4vc2NhdHRlci9zZWxlY3QiOjEwMzUsIi4uL3NjYXR0ZXIvc3R5bGUiOjEwMzYsIi4vYXR0cmlidXRlcyI6MTA0NiwiLi9jYWxjIjoxMDQ3LCIuL2RlZmF1bHRzIjoxMDQ4LCIuL2V2ZW50X2RhdGEiOjEwNDksIi4vaG92ZXIiOjEwNTAsIi4vcGxvdCI6MTA1Mn1dLDEwNTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9wbG90IiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8pe3ZhciBzLGwsYyx1PXJbMF1bMF0uY2FycGV0LGg9e3hheGlzOmkuZ2V0RnJvbUlkKHQsdS54YXhpc3x8IngiKSx5YXhpczppLmdldEZyb21JZCh0LHUueWF4aXN8fCJ5IikscGxvdDplLnBsb3R9O2ZvcihuKHQsaCxyLG8pLHM9MDtzPHIubGVuZ3RoO3MrKylsPXJbc11bMF0udHJhY2UsYz1vLnNlbGVjdEFsbCgiZy50cmFjZSIrbC51aWQrIiAuanMtbGluZSIpLGEuc2V0Q2xpcFVybChjLHUuX2NsaXBQYXRoSWQpfX0seyIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjU4MywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjczMiwiLi4vc2NhdHRlci9wbG90IjoxMDM0fV0sMTA1MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlcyIpLmRhc2gscz10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxsPXQoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbCxjPW4ubWFya2VyLHU9bi5saW5lLGg9Yy5saW5lO2UuZXhwb3J0cz1sKHtsb246e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSxsYXQ6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSxsb2NhdGlvbnM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSxsb2NhdGlvbm1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIklTTy0zIiwiVVNBLXN0YXRlcyIsImNvdW50cnkgbmFtZXMiXSxkZmx0OiJJU08tMyJ9LG1vZGU6cyh7fSxuLm1vZGUse2RmbHQ6Im1hcmtlcnMifSksdGV4dDpzKHt9LG4udGV4dCx7fSksaG92ZXJ0ZXh0OnMoe30sbi5ob3ZlcnRleHQse30pLHRleHRmb250Om4udGV4dGZvbnQsdGV4dHBvc2l0aW9uOm4udGV4dHBvc2l0aW9uLGxpbmU6e2NvbG9yOnUuY29sb3Isd2lkdGg6dS53aWR0aCxkYXNoOm99LGNvbm5lY3RnYXBzOm4uY29ubmVjdGdhcHMsbWFya2VyOnMoe3N5bWJvbDpjLnN5bWJvbCxvcGFjaXR5OmMub3BhY2l0eSxzaXplOmMuc2l6ZSxzaXplcmVmOmMuc2l6ZXJlZixzaXplbWluOmMuc2l6ZW1pbixzaXplbW9kZTpjLnNpemVtb2RlLGNvbG9yYmFyOmMuY29sb3JiYXIsbGluZTpzKHt3aWR0aDpoLndpZHRofSxhKCJtYXJrZXIubGluZSIpKSxncmFkaWVudDpjLmdyYWRpZW50fSxhKCJtYXJrZXIiKSksZmlsbDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibm9uZSIsInRvc2VsZiJdLGRmbHQ6Im5vbmUifSxmaWxsY29sb3I6bi5maWxsY29sb3Isc2VsZWN0ZWQ6bi5zZWxlY3RlZCx1bnNlbGVjdGVkOm4udW5zZWxlY3RlZCxob3ZlcmluZm86cyh7fSxpLmhvdmVyaW5mbyx7ZmxhZ3M6WyJsb24iLCJsYXQiLCJsb2NhdGlvbiIsInRleHQiLCJuYW1lIl19KX0sImNhbGMiLCJuZXN0ZWQiKX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NTY1LCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlcyI6NTgyLCIuLi8uLi9saWIvZXh0ZW5kIjo2NzMsIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjcxNSwiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6NzI5LCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiOjEwMTV9XSwxMDU0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNLGE9dCgiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGMiKSxvPXQoIi4uL3NjYXR0ZXIvYXJyYXlzX3RvX2NhbGNkYXRhIikscz10KCIuLi9zY2F0dGVyL2NhbGNfc2VsZWN0aW9uIiksbD10KCIuLi8uLi9saWIiKS5fO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1BcnJheS5pc0FycmF5KGUubG9jYXRpb25zKSxjPXI/ZS5sb2NhdGlvbnMubGVuZ3RoOmUuX2xlbmd0aCx1PW5ldyBBcnJheShjKSxoPTA7aDxjO2grKyl7dmFyIGY9dVtoXT17fTtpZihyKXt2YXIgcD1lLmxvY2F0aW9uc1toXTtmLmxvYz0ic3RyaW5nIj09dHlwZW9mIHA/cDpudWxsfWVsc2V7dmFyIGQ9ZS5sb25baF0sZz1lLmxhdFtoXTtuKGQpJiZuKGcpP2YubG9ubGF0PVsrZCwrZ106Zi5sb25sYXQ9W2ksaV19fXJldHVybiBvKHUsZSksYShlKSxzKHUsZSksYyYmKHVbMF0udD17bGFiZWxzOntsYXQ6bCh0LCJsYXQ6IikrIiAiLGxvbjpsKHQsImxvbjoiKSsiICJ9fSksdX19LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NjYxLCIuLi8uLi9saWIiOjY4NCwiLi4vc2NhdHRlci9hcnJheXNfdG9fY2FsY2RhdGEiOjEwMTQsIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb24iOjEwMTcsIi4uL3NjYXR0ZXIvY29sb3JzY2FsZV9jYWxjIjoxMDE5LCJmYXN0LWlzbnVtZXJpYyI6MjE0fV0sMTA1NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uL3NjYXR0ZXIvc3VidHlwZXMiKSxhPXQoIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzIiksbz10KCIuLi9zY2F0dGVyL2xpbmVfZGVmYXVsdHMiKSxzPXQoIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0cyIpLGw9dCgiLi4vc2NhdHRlci9maWxsY29sb3JfZGVmYXVsdHMiKSxjPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscix1KXtmdW5jdGlvbiBoKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxjLHIsaSl9IWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGE9MCxvPXIoImxvY2F0aW9ucyIpO2lmKG8pcmV0dXJuIHIoImxvY2F0aW9ubW9kZSIpLGE9by5sZW5ndGg7cmV0dXJuIG49cigibG9uIil8fFtdLGk9cigibGF0Iil8fFtdLGE9TWF0aC5taW4obi5sZW5ndGgsaS5sZW5ndGgpLGUuX2xlbmd0aD1hLGF9KDAsZSxoKT9lLnZpc2libGU9ITE6KGgoInRleHQiKSxoKCJob3ZlcnRleHQiKSxoKCJtb2RlIiksaS5oYXNMaW5lcyhlKSYmKG8odCxlLHIsdSxoKSxoKCJjb25uZWN0Z2FwcyIpKSxpLmhhc01hcmtlcnMoZSkmJmEodCxlLHIsdSxoLHtncmFkaWVudDohMH0pLGkuaGFzVGV4dChlKSYmcyh0LGUsdSxoKSxoKCJmaWxsIiksIm5vbmUiIT09ZS5maWxsJiZsKHQsZSxyLGgpKX19LHsiLi4vLi4vbGliIjo2ODQsIi4uL3NjYXR0ZXIvZmlsbGNvbG9yX2RlZmF1bHRzIjoxMDIzLCIuLi9zY2F0dGVyL2xpbmVfZGVmYXVsdHMiOjEwMjcsIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzIjoxMDMzLCIuLi9zY2F0dGVyL3N1YnR5cGVzIjoxMDM3LCIuLi9zY2F0dGVyL3RleHRfZGVmYXVsdHMiOjEwMzgsIi4vYXR0cmlidXRlcyI6MTA1M31dLDEwNTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubG9uPWUubG9uLHQubGF0PWUubGF0LHQubG9jYXRpb249ZS5sb2M/ZS5sb2M6bnVsbCx0fX0se31dLDEwNTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9meCIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxhPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU0sbz10KCIuLi9zY2F0dGVyL2dldF90cmFjZV9jb2xvciIpLHM9dCgiLi4vc2NhdHRlci9maWxsX2hvdmVyX3RleHQiKSxsPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGM9dC5jZCx1PWNbMF0udHJhY2UsaD10LnhhLGY9dC55YSxwPXQuc3VicGxvdCxkPXAucHJvamVjdGlvbi5pc0xvbkxhdE92ZXJFZGdlcyxnPXAucHJvamVjdDtpZihuLmdldENsb3Nlc3QoYyxmdW5jdGlvbih0KXt2YXIgbj10LmxvbmxhdDtpZihuWzBdPT09YSlyZXR1cm4gMS8wO2lmKGQobikpcmV0dXJuIDEvMDt2YXIgaT1nKG4pLG89ZyhbZSxyXSkscz1NYXRoLmFicyhpWzBdLW9bMF0pLGw9TWF0aC5hYnMoaVsxXS1vWzFdKSxjPU1hdGgubWF4KDMsdC5tcmN8fDApO3JldHVybiBNYXRoLm1heChNYXRoLnNxcnQocypzK2wqbCktYywxLTMvYyl9LHQpLCExIT09dC5pbmRleCl7dmFyIG09Y1t0LmluZGV4XSx2PW0ubG9ubGF0LHk9W2guYzJwKHYpLGYuYzJwKHYpXSx4PW0ubXJjfHwxO3JldHVybiB0LngwPXlbMF0teCx0LngxPXlbMF0reCx0LnkwPXlbMV0teCx0LnkxPXlbMV0reCx0LmxvYz1tLmxvYyx0Lmxvbj12WzBdLHQubGF0PXZbMV0sdC5jb2xvcj1vKHUsbSksdC5leHRyYVRleHQ9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGE9ZS5oaXx8dC5ob3ZlcmluZm8sbz0iYWxsIj09PWE/bC5ob3ZlcmluZm8uZmxhZ3M6YS5zcGxpdCgiKyIpLGM9LTEhPT1vLmluZGV4T2YoImxvY2F0aW9uIikmJkFycmF5LmlzQXJyYXkodC5sb2NhdGlvbnMpLHU9LTEhPT1vLmluZGV4T2YoImxvbiIpLGg9LTEhPT1vLmluZGV4T2YoImxhdCIpLGY9LTEhPT1vLmluZGV4T2YoInRleHQiKSxwPVtdO2Z1bmN0aW9uIGQodCl7cmV0dXJuIGkudGlja1RleHQocixyLmMybCh0KSwiaG92ZXIiKS50ZXh0KyJceGIwIn1jP3AucHVzaChlLmxvYyk6dSYmaD9wLnB1c2goIigiK2QoZS5sb25sYXRbMF0pKyIsICIrZChlLmxvbmxhdFsxXSkrIikiKTp1P3AucHVzaChuLmxvbitkKGUubG9ubGF0WzBdKSk6aCYmcC5wdXNoKG4ubGF0K2QoZS5sb25sYXRbMV0pKTtmJiZzKGUsdCxwKTtyZXR1cm4gcC5qb2luKCI8YnI+Iil9KHUsbSxwLm1vY2tBeGlzLGNbMF0udC5sYWJlbHMpLFt0XX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvZngiOjYwMCwiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NjYxLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzMyLCIuLi9zY2F0dGVyL2ZpbGxfaG92ZXJfdGV4dCI6MTAyMiwiLi4vc2NhdHRlci9nZXRfdHJhY2VfY29sb3IiOjEwMjQsIi4vYXR0cmlidXRlcyI6MTA1M31dLDEwNTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoIi4vYXR0cmlidXRlcyIpLG4uc3VwcGx5RGVmYXVsdHM9dCgiLi9kZWZhdWx0cyIpLG4uY29sb3JiYXI9dCgiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiKSxuLmNhbGM9dCgiLi9jYWxjIiksbi5wbG90PXQoIi4vcGxvdCIpLG4uc3R5bGU9dCgiLi9zdHlsZSIpLG4uc3R5bGVPblNlbGVjdD10KCIuLi9zY2F0dGVyL3N0eWxlIikuc3R5bGVPblNlbGVjdCxuLmhvdmVyUG9pbnRzPXQoIi4vaG92ZXIiKSxuLmV2ZW50RGF0YT10KCIuL2V2ZW50X2RhdGEiKSxuLnNlbGVjdFBvaW50cz10KCIuL3NlbGVjdCIpLG4ubW9kdWxlVHlwZT0idHJhY2UiLG4ubmFtZT0ic2NhdHRlcmdlbyIsbi5iYXNlUGxvdE1vZHVsZT10KCIuLi8uLi9wbG90cy9nZW8iKSxuLmNhdGVnb3JpZXM9WyJnZW8iLCJzeW1ib2xzIiwic2hvd0xlZ2VuZCIsInNjYXR0ZXItbGlrZSJdLG4ubWV0YT17fSxlLmV4cG9ydHM9bn0seyIuLi8uLi9wbG90cy9nZW8iOjc2MiwiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiOjEwMzIsIi4uL3NjYXR0ZXIvc3R5bGUiOjEwMzYsIi4vYXR0cmlidXRlcyI6MTA1MywiLi9jYWxjIjoxMDU0LCIuL2RlZmF1bHRzIjoxMDU1LCIuL2V2ZW50X2RhdGEiOjEwNTYsIi4vaG92ZXIiOjEwNTcsIi4vcGxvdCI6MTA1OSwiLi9zZWxlY3QiOjEwNjAsIi4vc3R5bGUiOjEwNjF9XSwxMDU5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU0sbz10KCIuLi8uLi9saWIvdG9wb2pzb25fdXRpbHMiKS5nZXRUb3BvanNvbkZlYXR1cmVzLHM9dCgiLi4vLi4vbGliL2dlb19sb2NhdGlvbl91dGlscyIpLmxvY2F0aW9uVG9GZWF0dXJlLGw9dCgiLi4vLi4vbGliL2dlb2pzb25fdXRpbHMiKSxjPXQoIi4uL3NjYXR0ZXIvc3VidHlwZXMiKSx1PXQoIi4vc3R5bGUiKTtmdW5jdGlvbiBoKHQsZSl7dmFyIHI9dFswXS50cmFjZTtpZihBcnJheS5pc0FycmF5KHIubG9jYXRpb25zKSlmb3IodmFyIG49byhyLGUpLGk9ci5sb2NhdGlvbm1vZGUsbD0wO2w8dC5sZW5ndGg7bCsrKXt2YXIgYz10W2xdLHU9cyhpLGMubG9jLG4pO2MubG9ubGF0PXU/dS5wcm9wZXJ0aWVzLmN0OlthLGFdfX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKWgocltvXSxlLnRvcG9qc29uKTtmdW5jdGlvbiBzKHQsZSl7dC5sb25sYXRbMF09PT1hJiZuLnNlbGVjdChlKS5yZW1vdmUoKX12YXIgZj1lLmxheWVycy5mcm9udHBsb3Quc2VsZWN0KCIuc2NhdHRlcmxheWVyIikuc2VsZWN0QWxsKCJnLnRyYWNlLnNjYXR0ZXJnZW8iKS5kYXRhKHIsZnVuY3Rpb24odCl7cmV0dXJuIHRbMF0udHJhY2UudWlkfSk7Zi5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwidHJhY2Ugc2NhdHRlcmdlbyIpLGYuZXhpdCgpLnJlbW92ZSgpLGYuc2VsZWN0QWxsKCIqIikucmVtb3ZlKCksZi5lYWNoKGZ1bmN0aW9uKGUpe3ZhciByPWVbMF0ubm9kZTM9bi5zZWxlY3QodGhpcyksYT1lWzBdLnRyYWNlO2lmKGMuaGFzTGluZXMoYSl8fCJub25lIiE9PWEuZmlsbCl7dmFyIG89bC5jYWxjVHJhY2VUb0xpbmVDb29yZHMoZSksaD0ibm9uZSIhPT1hLmZpbGw/bC5tYWtlUG9seWdvbihvKTpsLm1ha2VMaW5lKG8pO3Iuc2VsZWN0QWxsKCJwYXRoLmpzLWxpbmUiKS5kYXRhKFt7Z2VvanNvbjpoLHRyYWNlOmF9XSkuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJqcy1saW5lIiwhMCkuc3R5bGUoInN0cm9rZS1taXRlcmxpbWl0IiwyKX1jLmhhc01hcmtlcnMoYSkmJnIuc2VsZWN0QWxsKCJwYXRoLnBvaW50IikuZGF0YShpLmlkZW50aXR5KS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoInBvaW50IiwhMCkuZWFjaChmdW5jdGlvbih0KXtzKHQsdGhpcyl9KSxjLmhhc1RleHQoYSkmJnIuc2VsZWN0QWxsKCJnIikuZGF0YShpLmlkZW50aXR5KS5lbnRlcigpLmFwcGVuZCgiZyIpLmFwcGVuZCgidGV4dCIpLmVhY2goZnVuY3Rpb24odCl7cyh0LHRoaXMpfSksdSh0LGUpfSl9fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjY2MSwiLi4vLi4vbGliIjo2ODQsIi4uLy4uL2xpYi9nZW9fbG9jYXRpb25fdXRpbHMiOjY3NiwiLi4vLi4vbGliL2dlb2pzb25fdXRpbHMiOjY3NywiLi4vLi4vbGliL3RvcG9qc29uX3V0aWxzIjo3MTEsIi4uL3NjYXR0ZXIvc3VidHlwZXMiOjEwMzcsIi4vc3R5bGUiOjEwNjEsZDM6MTQ3fV0sMTA2MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9zY2F0dGVyL3N1YnR5cGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsaSxhLG8scyxsPXQuY2QsYz10LnhheGlzLHU9dC55YXhpcyxoPVtdLGY9bFswXS50cmFjZTtpZighbi5oYXNNYXJrZXJzKGYpJiYhbi5oYXNUZXh0KGYpKXJldHVybltdO2lmKCExPT09ZSlmb3Iocz0wO3M8bC5sZW5ndGg7cysrKWxbc10uc2VsZWN0ZWQ9MDtlbHNlIGZvcihzPTA7czxsLmxlbmd0aDtzKyspaT0ocj1sW3NdKS5sb25sYXQsYT1jLmMycChpKSxvPXUuYzJwKGkpLGUuY29udGFpbnMoW2Esb10pPyhoLnB1c2goe3BvaW50TnVtYmVyOnMsbG9uOmlbMF0sbGF0OmlbMV19KSxyLnNlbGVjdGVkPTEpOnIuc2VsZWN0ZWQ9MDtyZXR1cm4gaH19LHsiLi4vc2NhdHRlci9zdWJ0eXBlcyI6MTAzN31dLDEwNjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLG89dCgiLi4vc2NhdHRlci9zdHlsZSIpLnN0eWxlUG9pbnRzO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2UmJmZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXS50cmFjZSxzPWVbMF0ubm9kZTM7cy5zdHlsZSgib3BhY2l0eSIsZVswXS50cmFjZS5vcGFjaXR5KSxvKHMscix0KSxzLnNlbGVjdEFsbCgicGF0aC5qcy1saW5lIikuc3R5bGUoImZpbGwiLCJub25lIikuZWFjaChmdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0aGlzKSxyPXQudHJhY2Usbz1yLmxpbmV8fHt9O2UuY2FsbChhLnN0cm9rZSxvLmNvbG9yKS5jYWxsKGkuZGFzaExpbmUsby5kYXNofHwiIixvLndpZHRofHwwKSwibm9uZSIhPT1yLmZpbGwmJmUuY2FsbChhLmZpbGwsci5maWxsY29sb3IpfSl9KHQsZSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjU1OCwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo1ODMsIi4uL3NjYXR0ZXIvc3R5bGUiOjEwMzYsZDM6MTQ3fV0sMTA2MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIiksaT10KCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxzPXQoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbCxsPXQoIi4vY29uc3RhbnRzIikuREFTSEVTLGM9aS5saW5lLHU9aS5tYXJrZXIsaD11LmxpbmUsZj1lLmV4cG9ydHM9cyh7eDppLngseDA6aS54MCxkeDppLmR4LHk6aS55LHkwOmkueTAsZHk6aS5keSx0ZXh0Om8oe30saS50ZXh0LHt9KSxob3ZlcnRleHQ6aS5ob3ZlcnRleHQsdGV4dHBvc2l0aW9uOmkudGV4dHBvc2l0aW9uLHRleHRmb250OmkudGV4dGZvbnQsbW9kZTp7dmFsVHlwZToiZmxhZ2xpc3QiLGZsYWdzOlsibGluZXMiLCJtYXJrZXJzIiwidGV4dCJdLGV4dHJhczpbIm5vbmUiXX0sbGluZTp7Y29sb3I6Yy5jb2xvcix3aWR0aDpjLndpZHRoLGRhc2g6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpPYmplY3Qua2V5cyhsKSxkZmx0OiJzb2xpZCJ9fSxtYXJrZXI6byh7fSxhKCJtYXJrZXIiKSx7c3ltYm9sOnUuc3ltYm9sLHNpemU6dS5zaXplLHNpemVyZWY6dS5zaXplcmVmLHNpemVtaW46dS5zaXplbWluLHNpemVtb2RlOnUuc2l6ZW1vZGUsb3BhY2l0eTp1Lm9wYWNpdHksY29sb3JiYXI6dS5jb2xvcmJhcixsaW5lOm8oe30sYSgibWFya2VyLmxpbmUiKSx7d2lkdGg6aC53aWR0aH0pfSksY29ubmVjdGdhcHM6aS5jb25uZWN0Z2FwcyxmaWxsOmkuZmlsbCxmaWxsY29sb3I6aS5maWxsY29sb3IsaG92ZXJvbjppLmhvdmVyb24sc2VsZWN0ZWQ6e21hcmtlcjppLnNlbGVjdGVkLm1hcmtlcix0ZXh0Zm9udDppLnNlbGVjdGVkLnRleHRmb250fSx1bnNlbGVjdGVkOnttYXJrZXI6aS51bnNlbGVjdGVkLm1hcmtlcix0ZXh0Zm9udDppLnVuc2VsZWN0ZWQudGV4dGZvbnR9LG9wYWNpdHk6bi5vcGFjaXR5fSwiY2FsYyIsIm5lc3RlZCIpO2YueC5lZGl0VHlwZT1mLnkuZWRpdFR5cGU9Zi54MC5lZGl0VHlwZT1mLnkwLmVkaXRUeXBlPSJjYWxjK2NsZWFyQXhpc1R5cGVzIn0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NTY1LCIuLi8uLi9saWIvZXh0ZW5kIjo2NzMsIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjcxNSwiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6NzI5LCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiOjEwMTUsIi4vY29uc3RhbnRzIjoxMDYzfV0sMTA2MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e1RPT19NQU5ZX1BPSU5UUzoxZTUsU1lNQk9MX1NERl9TSVpFOjIwMCxTWU1CT0xfU0laRToyMCxTWU1CT0xfU1RST0tFOjEsRE9UX1JFOi8tZG90LyxPUEVOX1JFOi8tb3Blbi8sREFTSEVTOntzb2xpZDpbMV0sZG90OlsxLDFdLGRhc2g6WzQsMV0sbG9uZ2Rhc2g6WzgsMV0sZGFzaGRvdDpbNCwxLDEsMV0sbG9uZ2Rhc2hkb3Q6WzgsMSwxLDFdfX19LHt9XSwxMDY0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCJzdmctcGF0aC1zZGYiKSxhPXQoImNvbG9yLW5vcm1hbGl6ZSIpLG89dCgiLi4vLi4vcmVnaXN0cnkiKSxzPXQoIi4uLy4uL2xpYiIpLGw9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksYz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLHU9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIiksaD10KCIuLi8uLi9saWIvZ2xfZm9ybWF0X2NvbG9yIikuZm9ybWF0Q29sb3IsZj10KCIuLi9zY2F0dGVyL3N1YnR5cGVzIikscD10KCIuLi9zY2F0dGVyL21ha2VfYnViYmxlX3NpemVfZnVuYyIpLGQ9dCgiLi9jb25zdGFudHMiKSxnPXQoIi4uLy4uL2NvbnN0YW50cy9pbnRlcmFjdGlvbnMiKS5ERVNFTEVDVERJTSxtPXtzdGFydDoxLGxlZnQ6MSxlbmQ6LTEscmlnaHQ6LTEsbWlkZGxlOjAsY2VudGVyOjAsYm90dG9tOjEsdG9wOi0xfTtmdW5jdGlvbiB2KHQpe3ZhciBlLHI9dC5fbGVuZ3RoLGk9dC50ZXh0Zm9udCxhPXQudGV4dHBvc2l0aW9uLG89QXJyYXkuaXNBcnJheShhKT9hOlthXSxzPWkuY29sb3IsbD1pLnNpemUsYz1pLmZhbWlseSx1PXt9O2Zvcih1LnRleHQ9dC50ZXh0LHUub3BhY2l0eT10Lm9wYWNpdHksdS5mb250PXt9LHUuYWxpZ249W10sdS5iYXNlbGluZT1bXSxlPTA7ZTxvLmxlbmd0aDtlKyspe3ZhciBoPW9bZV0uc3BsaXQoL1xzKy8pO3N3aXRjaChoWzFdKXtjYXNlImxlZnQiOnUuYWxpZ24ucHVzaCgicmlnaHQiKTticmVhaztjYXNlInJpZ2h0Ijp1LmFsaWduLnB1c2goImxlZnQiKTticmVhaztkZWZhdWx0OnUuYWxpZ24ucHVzaChoWzFdKX1zd2l0Y2goaFswXSl7Y2FzZSJ0b3AiOnUuYmFzZWxpbmUucHVzaCgiYm90dG9tIik7YnJlYWs7Y2FzZSJib3R0b20iOnUuYmFzZWxpbmUucHVzaCgidG9wIik7YnJlYWs7ZGVmYXVsdDp1LmJhc2VsaW5lLnB1c2goaFswXSl9fWlmKEFycmF5LmlzQXJyYXkocykpZm9yKHUuY29sb3I9bmV3IEFycmF5KHIpLGU9MDtlPHI7ZSsrKXUuY29sb3JbZV09c1tlXTtlbHNlIHUuY29sb3I9cztpZihBcnJheS5pc0FycmF5KGwpfHxBcnJheS5pc0FycmF5KGMpKWZvcih1LmZvbnQ9bmV3IEFycmF5KHIpLGU9MDtlPHI7ZSsrKXt2YXIgZj11LmZvbnRbZV09e307Zi5zaXplPUFycmF5LmlzQXJyYXkobCk/bihsW2VdKT9sW2VdOjA6bCxmLmZhbWlseT1BcnJheS5pc0FycmF5KGMpP2NbZV06Y31lbHNlIHUuZm9udD17c2l6ZTpsLGZhbWlseTpjfTtyZXR1cm4gdX1mdW5jdGlvbiB5KHQpe3ZhciBlLHIsbj10Ll9sZW5ndGgsaT10Lm1hcmtlcixvPXt9LGw9QXJyYXkuaXNBcnJheShpLnN5bWJvbCksYz1zLmlzQXJyYXlPclR5cGVkQXJyYXkoaS5jb2xvciksdT1zLmlzQXJyYXlPclR5cGVkQXJyYXkoaS5saW5lLmNvbG9yKSxmPXMuaXNBcnJheU9yVHlwZWRBcnJheShpLm9wYWNpdHkpLGc9cy5pc0FycmF5T3JUeXBlZEFycmF5KGkuc2l6ZSksbT1zLmlzQXJyYXlPclR5cGVkQXJyYXkoaS5saW5lLndpZHRoKTtpZihsfHwocj1kLk9QRU5fUkUudGVzdChpLnN5bWJvbCkpLGx8fGN8fHV8fGYpe28uY29sb3JzPW5ldyBBcnJheShuKSxvLmJvcmRlckNvbG9ycz1uZXcgQXJyYXkobik7dmFyIHY9aChpLGkub3BhY2l0eSxuKSx5PWgoaS5saW5lLGkub3BhY2l0eSxuKTtpZighQXJyYXkuaXNBcnJheSh5WzBdKSl7dmFyIHg9eTtmb3IoeT1BcnJheShuKSxlPTA7ZTxuO2UrKyl5W2VdPXh9aWYoIUFycmF5LmlzQXJyYXkodlswXSkpe3ZhciBiPXY7Zm9yKHY9QXJyYXkobiksZT0wO2U8bjtlKyspdltlXT1ifWZvcihvLmNvbG9ycz12LG8uYm9yZGVyQ29sb3JzPXksZT0wO2U8bjtlKyspe2lmKGwpe3ZhciBfPWkuc3ltYm9sW2VdO3I9ZC5PUEVOX1JFLnRlc3QoXyl9ciYmKHlbZV09dltlXS5zbGljZSgpLHZbZV09dltlXS5zbGljZSgpLHZbZV1bM109MCl9by5vcGFjaXR5PXQub3BhY2l0eX1lbHNlIHI/KG8uY29sb3I9YShpLmNvbG9yLCJ1aW50OCIpLG8uY29sb3JbM109MCxvLmJvcmRlckNvbG9yPWEoaS5jb2xvciwidWludDgiKSk6KG8uY29sb3I9YShpLmNvbG9yLCJ1aW50OCIpLG8uYm9yZGVyQ29sb3I9YShpLmxpbmUuY29sb3IsInVpbnQ4IikpLG8ub3BhY2l0eT10Lm9wYWNpdHkqaS5vcGFjaXR5O2lmKGwpZm9yKG8ubWFya2Vycz1uZXcgQXJyYXkobiksZT0wO2U8bjtlKyspby5tYXJrZXJzW2VdPVMoaS5zeW1ib2xbZV0pO2Vsc2Ugby5tYXJrZXI9UyhpLnN5bWJvbCk7dmFyIHcsaz1wKHQpO2lmKGd8fG0pe3ZhciBNLEE9by5zaXplcz1uZXcgQXJyYXkobiksVD1vLmJvcmRlclNpemVzPW5ldyBBcnJheShuKSxFPTA7aWYoZyl7Zm9yKGU9MDtlPG47ZSsrKUFbZV09ayhpLnNpemVbZV0pLEUrPUFbZV07TT1FL259ZWxzZSBmb3Iodz1rKGkuc2l6ZSksZT0wO2U8bjtlKyspQVtlXT13O2lmKG0pZm9yKGU9MDtlPG47ZSsrKVRbZV09aS5saW5lLndpZHRoW2VdLzI7ZWxzZSBmb3Iodz1pLmxpbmUud2lkdGgvMixlPTA7ZTxuO2UrKylUW2VdPXc7by5zaXplQXZnPU19ZWxzZSBvLnNpemU9ayhpJiZpLnNpemV8fDEwKSxvLmJvcmRlclNpemVzPWsoaS5saW5lLndpZHRoKTtyZXR1cm4gb31mdW5jdGlvbiB4KHQsZSl7dmFyIHI9dC5tYXJrZXIsbj17fTtyZXR1cm4gZT8oZS5tYXJrZXImJmUubWFya2VyLnN5bWJvbD9uPXkocy5leHRlbmRGbGF0KHt9LHIsZS5tYXJrZXIpKTplLm1hcmtlciYmKGUubWFya2VyLnNpemUmJihuLnNpemU9ZS5tYXJrZXIuc2l6ZS8yKSxlLm1hcmtlci5jb2xvciYmKG4uY29sb3JzPWUubWFya2VyLmNvbG9yKSx2b2lkIDAhPT1lLm1hcmtlci5vcGFjaXR5JiYobi5vcGFjaXR5PWUubWFya2VyLm9wYWNpdHkpKSxuKTpufWZ1bmN0aW9uIGIodCxlKXt2YXIgcj17fTtpZighZSlyZXR1cm4gcjtpZihlLnRleHRmb250KXt2YXIgbj17b3BhY2l0eToxLHRleHQ6dC50ZXh0LHRleHRwb3NpdGlvbjp0LnRleHRwb3NpdGlvbix0ZXh0Zm9udDpzLmV4dGVuZEZsYXQoe30sdC50ZXh0Zm9udCl9O2UudGV4dGZvbnQmJnMuZXh0ZW5kRmxhdChuLnRleHRmb250LGUudGV4dGZvbnQpLHI9dihuKX1yZXR1cm4gcn1mdW5jdGlvbiBfKHQsZSl7dmFyIHI9e2NhcFNpemU6MiplLndpZHRoLGxpbmVXaWR0aDplLnRoaWNrbmVzcyxjb2xvcjplLmNvbG9yfTtyZXR1cm4gZS5jb3B5X3lzdHlsZSYmKHI9dC5lcnJvcl95KSxyfXZhciB3PWQuU1lNQk9MX1NERl9TSVpFLGs9ZC5TWU1CT0xfU0laRSxNPWQuU1lNQk9MX1NUUk9LRSxBPXt9LFQ9bC5zeW1ib2xGdW5jc1swXSguMDUqayk7ZnVuY3Rpb24gUyh0KXtpZigiY2lyY2xlIj09PXQpcmV0dXJuIG51bGw7dmFyIGUscixuPWwuc3ltYm9sTnVtYmVyKHQpLGE9bC5zeW1ib2xGdW5jc1tuJTEwMF0sbz0hIWwuc3ltYm9sTm9Eb3RbbiUxMDBdLHM9ISFsLnN5bWJvbE5vRmlsbFtuJTEwMF0sYz1kLkRPVF9SRS50ZXN0KHQpO3JldHVybiBBW3RdP0FbdF06KGU9YyYmIW8/YSgxLjEqaykrVDphKGspLHI9aShlLHt3OncsaDp3LHZpZXdCb3g6Wy1rLC1rLGssa10sc3Ryb2tlOnM/TTotTX0pLEFbdF09cixyfHxudWxsKX1lLmV4cG9ydHM9e3N0eWxlOmZ1bmN0aW9uKHQsZSl7dmFyIHIsbj17bWFya2VyOnZvaWQgMCxtYXJrZXJTZWw6dm9pZCAwLG1hcmtlclVuc2VsOnZvaWQgMCxsaW5lOnZvaWQgMCxmaWxsOnZvaWQgMCxlcnJvclg6dm9pZCAwLGVycm9yWTp2b2lkIDAsdGV4dDp2b2lkIDAsdGV4dFNlbDp2b2lkIDAsdGV4dFVuc2VsOnZvaWQgMH07aWYoITAhPT1lLnZpc2libGUpcmV0dXJuIG47aWYoZi5oYXNUZXh0KGUpJiYobi50ZXh0PXYoZSksbi50ZXh0U2VsPWIoZSxlLnNlbGVjdGVkKSxuLnRleHRVbnNlbD1iKGUsZS51bnNlbGVjdGVkKSksZi5oYXNNYXJrZXJzKGUpJiYobi5tYXJrZXI9eShlKSxuLm1hcmtlclNlbD14KGUsZS5zZWxlY3RlZCksbi5tYXJrZXJVbnNlbD14KGUsZS51bnNlbGVjdGVkKSwhZS51bnNlbGVjdGVkJiZBcnJheS5pc0FycmF5KGUubWFya2VyLm9wYWNpdHkpKSl7dmFyIGk9ZS5tYXJrZXIub3BhY2l0eTtmb3Iobi5tYXJrZXJVbnNlbC5vcGFjaXR5PW5ldyBBcnJheShpLmxlbmd0aCkscj0wO3I8aS5sZW5ndGg7cisrKW4ubWFya2VyVW5zZWwub3BhY2l0eVtyXT1nKmlbcl19aWYoZi5oYXNMaW5lcyhlKSl7bi5saW5lPXtvdmVybGF5OiEwLHRoaWNrbmVzczplLmxpbmUud2lkdGgsY29sb3I6ZS5saW5lLmNvbG9yLG9wYWNpdHk6ZS5vcGFjaXR5fTt2YXIgYT0oZC5EQVNIRVNbZS5saW5lLmRhc2hdfHxbMV0pLnNsaWNlKCk7Zm9yKHI9MDtyPGEubGVuZ3RoOysrcilhW3JdKj1lLmxpbmUud2lkdGg7bi5saW5lLmRhc2hlcz1hfXJldHVybiBlLmVycm9yX3gmJmUuZXJyb3JfeC52aXNpYmxlJiYobi5lcnJvclg9XyhlLGUuZXJyb3JfeCkpLGUuZXJyb3JfeSYmZS5lcnJvcl95LnZpc2libGUmJihuLmVycm9yWT1fKGUsZS5lcnJvcl95KSksZS5maWxsJiYibm9uZSIhPT1lLmZpbGwmJihuLmZpbGw9e2Nsb3NlZDohMCxmaWxsOmUuZmlsbGNvbG9yLHRoaWNrbmVzczowfSksbn0sbWFya2VyU3R5bGU6eSxtYXJrZXJTZWxlY3Rpb246eCxsaW5lUG9zaXRpb25zOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGE9ci5sZW5ndGgvMjtpZihmLmhhc0xpbmVzKGUpJiZhKWlmKCJodiI9PT1lLmxpbmUuc2hhcGUpe2ZvcihuPVtdLGk9MDtpPGEtMTtpKyspaXNOYU4oclsyKmldKXx8aXNOYU4oclsyKmkrMV0pPyhuLnB1c2goTmFOKSxuLnB1c2goTmFOKSxuLnB1c2goTmFOKSxuLnB1c2goTmFOKSk6KG4ucHVzaChyWzIqaV0pLG4ucHVzaChyWzIqaSsxXSksbi5wdXNoKHJbMippKzJdKSxuLnB1c2goclsyKmkrMV0pKTtuLnB1c2gocltyLmxlbmd0aC0yXSksbi5wdXNoKHJbci5sZW5ndGgtMV0pfWVsc2UgaWYoInZoIj09PWUubGluZS5zaGFwZSl7Zm9yKG49W10saT0wO2k8YS0xO2krKylpc05hTihyWzIqaV0pfHxpc05hTihyWzIqaSsxXSk/KG4ucHVzaChOYU4pLG4ucHVzaChOYU4pLG4ucHVzaChOYU4pLG4ucHVzaChOYU4pKToobi5wdXNoKHJbMippXSksbi5wdXNoKHJbMippKzFdKSxuLnB1c2goclsyKmldKSxuLnB1c2goclsyKmkrM10pKTtuLnB1c2gocltyLmxlbmd0aC0yXSksbi5wdXNoKHJbci5sZW5ndGgtMV0pfWVsc2Ugbj1yO3ZhciBvPSExO2ZvcihpPTA7aTxuLmxlbmd0aDtpKyspaWYoaXNOYU4obltpXSkpe289ITA7YnJlYWt9dmFyIHM9b3x8bi5sZW5ndGg+ZC5UT09fTUFOWV9QT0lOVFM/InJlY3QiOmYuaGFzTWFya2VycyhlKT8icmVjdCI6InJvdW5kIjtpZihvJiZlLmNvbm5lY3RnYXBzKXt2YXIgbD1uWzBdLGM9blsxXTtmb3IoaT0wO2k8bi5sZW5ndGg7aSs9Milpc05hTihuW2ldKXx8aXNOYU4obltpKzFdKT8obltpXT1sLG5baSsxXT1jKToobD1uW2ldLGM9bltpKzFdKX1yZXR1cm57am9pbjpzLHBvc2l0aW9uczpufX0sZXJyb3JCYXJQb3NpdGlvbnM6ZnVuY3Rpb24odCxlLHIsaSxhKXt2YXIgcz1vLmdldENvbXBvbmVudE1ldGhvZCgiZXJyb3JiYXJzIiwibWFrZUNvbXB1dGVFcnJvciIpLGw9dS5nZXRGcm9tSWQodCxlLnhheGlzKSxoPXUuZ2V0RnJvbUlkKHQsZS55YXhpcyksZj1yLmxlbmd0aC8yLHA9e307ZnVuY3Rpb24gZCh0LGkpe3ZhciBhPWkuX2lkLmNoYXJBdCgwKSxvPWVbImVycm9yXyIrYV07aWYobyYmby52aXNpYmxlJiYoImxpbmVhciI9PT1pLnR5cGV8fCJsb2ciPT09aS50eXBlKSl7Zm9yKHZhciBsPXMobyksdT17eDowLHk6MX1bYV0saD17eDpbMCwxLDIsM10seTpbMiwzLDAsMV19W2FdLGQ9bmV3IEZsb2F0NjRBcnJheSg0KmYpLGc9MS8wLG09LTEvMCx2PTAseT0wO3Y8Zjt2KysseSs9NCl7dmFyIHg9dFt2XTtpZihuKHgpKXt2YXIgYj1yWzIqdit1XSxfPWwoeCx2KSx3PV9bMF0saz1fWzFdO2lmKG4odykmJm4oaykpe3ZhciBNPXgtdyxBPXgraztkW3kraFswXV09Yi1pLmMybChNKSxkW3kraFsxXV09aS5jMmwoQSktYixkW3kraFsyXV09MCxkW3kraFszXV09MCxnPU1hdGgubWluKGcseC13KSxtPU1hdGgubWF4KG0seCtrKX19fWMuZXhwYW5kKGksW2csbV0se3BhZGRlZDohMH0pLHBbYV09e3Bvc2l0aW9uczpyLGVycm9yczpkfX19cmV0dXJuIGQoaSxsKSxkKGEsaCkscH0sdGV4dFBvc2l0aW9uOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGE9ZS5fbGVuZ3RoLG89e307aWYoZi5oYXNNYXJrZXJzKGUpKXt2YXIgcz1yLmZvbnQsbD1yLmFsaWduLGM9ci5iYXNlbGluZTtmb3Ioby5vZmZzZXQ9bmV3IEFycmF5KGEpLGk9MDtpPGE7aSsrKXt2YXIgdT1uLnNpemVzP24uc2l6ZXNbaV06bi5zaXplLGg9QXJyYXkuaXNBcnJheShzKT9zW2ldLnNpemU6cy5zaXplLHA9QXJyYXkuaXNBcnJheShsKT9sLmxlbmd0aD4xP2xbaV06bFswXTpsLGQ9QXJyYXkuaXNBcnJheShjKT9jLmxlbmd0aD4xP2NbaV06Y1swXTpjLGc9bVtwXSx2PW1bZF0seT11P3UvLjgrMTowLHg9LXYqeS0uNSp2O28ub2Zmc2V0W2ldPVtnKnkvaCx4L2hdfX1yZXR1cm4gb319fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NTgzLCIuLi8uLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zIjo2NjAsIi4uLy4uL2xpYiI6Njg0LCIuLi8uLi9saWIvZ2xfZm9ybWF0X2NvbG9yIjo2ODAsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3MzIsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyI6NzM1LCIuLi8uLi9yZWdpc3RyeSI6ODE3LCIuLi9zY2F0dGVyL21ha2VfYnViYmxlX3NpemVfZnVuYyI6MTAzMSwiLi4vc2NhdHRlci9zdWJ0eXBlcyI6MTAzNywiLi9jb25zdGFudHMiOjEwNjMsImNvbG9yLW5vcm1hbGl6ZSI6MTA3LCJmYXN0LWlzbnVtZXJpYyI6MjE0LCJzdmctcGF0aC1zZGYiOjQ5N31dLDEwNjU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9yZWdpc3RyeSIpLGE9dCgiLi9hdHRyaWJ1dGVzIiksbz10KCIuLi9zY2F0dGVyL2NvbnN0YW50cyIpLHM9dCgiLi4vc2NhdHRlci9zdWJ0eXBlcyIpLGw9dCgiLi4vc2NhdHRlci94eV9kZWZhdWx0cyIpLGM9dCgiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiKSx1PXQoIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0cyIpLGg9dCgiLi4vc2NhdHRlci9maWxsY29sb3JfZGVmYXVsdHMiKSxmPXQoIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixwKXtmdW5jdGlvbiBkKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxhLHIsaSl9dmFyIGc9ISF0Lm1hcmtlciYmLy1vcGVuLy50ZXN0KHQubWFya2VyLnN5bWJvbCksbT1zLmlzQnViYmxlKHQpLHY9bCh0LGUscCxkKTtpZih2KXt2YXIgeT12PG8uUFRTX0xJTkVTT05MWT8ibGluZXMrbWFya2VycyI6ImxpbmVzIjtkKCJ0ZXh0IiksZCgiaG92ZXJ0ZXh0IiksZCgibW9kZSIseSkscy5oYXNMaW5lcyhlKSYmKGQoImNvbm5lY3RnYXBzIiksdSh0LGUscixwLGQpKTt2YXIgeD1bXTtzLmhhc01hcmtlcnMoZSkmJihjKHQsZSxyLHAsZCksZCgibWFya2VyLmxpbmUud2lkdGgiLGd8fG0/MTowKSx4LnB1c2goInBvaW50cyIpKSxzLmhhc1RleHQoZSkmJmYodCxlLHAsZCksZCgiZmlsbCIpLCJub25lIiE9PWUuZmlsbCYmaCh0LGUscixkKSwidG9uZXh0IiE9PWUuZmlsbCYmInRvc2VsZiIhPT1lLmZpbGx8fHgucHVzaCgiZmlsbHMiKSxkKCJob3Zlcm9uIix4LmpvaW4oIisiKXx8InBvaW50cyIpO3ZhciBiPWkuZ2V0Q29tcG9uZW50TWV0aG9kKCJlcnJvcmJhcnMiLCJzdXBwbHlEZWZhdWx0cyIpO2IodCxlLHIse2F4aXM6InkifSksYih0LGUscix7YXhpczoieCIsaW5oZXJpdDoieSJ9KSxuLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHkoZSxkKX1lbHNlIGUudmlzaWJsZT0hMX19LHsiLi4vLi4vbGliIjo2ODQsIi4uLy4uL3JlZ2lzdHJ5Ijo4MTcsIi4uL3NjYXR0ZXIvY29uc3RhbnRzIjoxMDIwLCIuLi9zY2F0dGVyL2ZpbGxjb2xvcl9kZWZhdWx0cyI6MTAyMywiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzIjoxMDI3LCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0cyI6MTAzMywiLi4vc2NhdHRlci9zdWJ0eXBlcyI6MTAzNywiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzIjoxMDM4LCIuLi9zY2F0dGVyL3h5X2RlZmF1bHRzIjoxMDM5LCIuL2F0dHJpYnV0ZXMiOjEwNjJ9XSwxMDY2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInJlZ2wtc2NhdHRlcjJkIiksaT10KCJyZWdsLWxpbmUyZCIpLGE9dCgicmVnbC1lcnJvcjJkIiksbz10KCJwb2ludC1jbHVzdGVyIikscz10KCJhcnJheS1yYW5nZSIpLGw9dCgiQGV0cGluYXJkL2dsLXRleHQiKSxjPXQoIi4uLy4uL3JlZ2lzdHJ5IiksdT10KCIuLi8uLi9saWIiKSxoPXQoIi4uLy4uL2xpYi9wcmVwYXJlX3JlZ2wiKSxmPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyIpLHA9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGQ9dCgiLi4vc2NhdHRlci9zdWJ0eXBlcyIpLGc9dCgiLi4vc2NhdHRlci9jYWxjIikuY2FsY01hcmtlclNpemUsbT10KCIuLi9zY2F0dGVyL2NhbGMiKS5jYWxjQXhpc0V4cGFuc2lvbix2PXQoIi4uL3NjYXR0ZXIvY29sb3JzY2FsZV9jYWxjIikseT10KCIuLi9zY2F0dGVyL2xpbmtfdHJhY2VzIikseD10KCIuLi9zY2F0dGVyL2dldF90cmFjZV9jb2xvciIpLGI9dCgiLi4vc2NhdHRlci9maWxsX2hvdmVyX3RleHQiKSxfPXQoIi4vY29udmVydCIpLHc9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTSxrPXQoIi4vY29uc3RhbnRzIikuVE9PX01BTllfUE9JTlRTLE09dCgiLi4vLi4vY29uc3RhbnRzL2ludGVyYWN0aW9ucyIpLkRFU0VMRUNURElNO2Z1bmN0aW9uIEEodCxlLHIsbixpLGEpe3ZhciBvPV8uc3R5bGUodCxyKTtpZihvLm1hcmtlciYmKG8ubWFya2VyLnBvc2l0aW9ucz1uKSxvLmxpbmUmJm4ubGVuZ3RoPjEmJnUuZXh0ZW5kRmxhdChvLmxpbmUsXy5saW5lUG9zaXRpb25zKHQscixuKSksby5lcnJvclh8fG8uZXJyb3JZKXt2YXIgcz1fLmVycm9yQmFyUG9zaXRpb25zKHQscixuLGksYSk7by5lcnJvclgmJnUuZXh0ZW5kRmxhdChvLmVycm9yWCxzLngpLG8uZXJyb3JZJiZ1LmV4dGVuZEZsYXQoby5lcnJvclkscy55KX1yZXR1cm4gby50ZXh0JiYodS5leHRlbmRGbGF0KG8udGV4dCx7cG9zaXRpb25zOm59LF8udGV4dFBvc2l0aW9uKHQscixvLnRleHQsby5tYXJrZXIpKSx1LmV4dGVuZEZsYXQoby50ZXh0U2VsLHtwb3NpdGlvbnM6bn0sXy50ZXh0UG9zaXRpb24odCxyLG8udGV4dCxvLm1hcmtlclNlbCkpLHUuZXh0ZW5kRmxhdChvLnRleHRVbnNlbCx7cG9zaXRpb25zOm59LF8udGV4dFBvc2l0aW9uKHQscixvLnRleHQsby5tYXJrZXJVbnNlbCkpKSxvfWZ1bmN0aW9uIFQodCxlKXt2YXIgcj1lLl9zY2VuZSxuPXtjb3VudDowLGRpcnR5OiEwLGxpbmVPcHRpb25zOltdLGZpbGxPcHRpb25zOltdLG1hcmtlck9wdGlvbnM6W10sbWFya2VyU2VsZWN0ZWRPcHRpb25zOltdLG1hcmtlclVuc2VsZWN0ZWRPcHRpb25zOltdLGVycm9yWE9wdGlvbnM6W10sZXJyb3JZT3B0aW9uczpbXSx0ZXh0T3B0aW9uczpbXSx0ZXh0U2VsZWN0ZWRPcHRpb25zOltdLHRleHRVbnNlbGVjdGVkT3B0aW9uczpbXX0saT17c2VsZWN0QmF0Y2g6bnVsbCx1bnNlbGVjdEJhdGNoOm51bGwsZmlsbDJkOiExLHNjYXR0ZXIyZDohMSxlcnJvcjJkOiExLGxpbmUyZDohMSxnbFRleHQ6ITEsc2VsZWN0MmQ6bnVsbH07cmV0dXJuIGUuX3NjZW5lfHwoKHI9ZS5fc2NlbmU9e30pLmluaXQ9ZnVuY3Rpb24oKXt1LmV4dGVuZEZsYXQocixpLG4pfSxyLmluaXQoKSxyLnVwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZSxuPW5ldyBBcnJheShyLmNvdW50KTtmb3IoZT0wO2U8ci5jb3VudDtlKyspbltlXT10O2lmKHIuZmlsbDJkJiZyLmZpbGwyZC51cGRhdGUobiksci5zY2F0dGVyMmQmJnIuc2NhdHRlcjJkLnVwZGF0ZShuKSxyLmxpbmUyZCYmci5saW5lMmQudXBkYXRlKG4pLHIuZXJyb3IyZCYmci5lcnJvcjJkLnVwZGF0ZShuLmNvbmNhdChuKSksci5zZWxlY3QyZCYmci5zZWxlY3QyZC51cGRhdGUobiksci5nbFRleHQpZm9yKGU9MDtlPHIuY291bnQ7ZSsrKXIuZ2xUZXh0W2VdLnVwZGF0ZShuW2VdKTtyLmRyYXcoKX0sci5kcmF3PWZ1bmN0aW9uKCl7dmFyIHQ7Zm9yKHQ9MDt0PHIuY291bnQ7dCsrKXIuZmlsbDJkJiZyLmZpbGxPcHRpb25zW3RdJiZyLmZpbGwyZC5kcmF3KHQpO2Zvcih0PTA7dDxyLmNvdW50O3QrKylyLmxpbmUyZCYmci5saW5lT3B0aW9uc1t0XSYmci5saW5lMmQuZHJhdyh0KSxyLmVycm9yMmQmJnIuZXJyb3JYT3B0aW9uc1t0XSYmci5lcnJvcjJkLmRyYXcodCksci5lcnJvcjJkJiZyLmVycm9yWU9wdGlvbnNbdF0mJnIuZXJyb3IyZC5kcmF3KHQrci5jb3VudCksIXIuc2NhdHRlcjJkfHwhci5tYXJrZXJPcHRpb25zW3RdfHxyLnNlbGVjdEJhdGNoJiZyLnNlbGVjdEJhdGNoW3RdfHxyLnNjYXR0ZXIyZC5kcmF3KHQpO2ZvcihyLnNjYXR0ZXIyZCYmci5zZWxlY3QyZCYmci5zZWxlY3RCYXRjaCYmKHIuc2VsZWN0MmQuZHJhdyhyLnNlbGVjdEJhdGNoKSxyLnNjYXR0ZXIyZC5kcmF3KHIudW5zZWxlY3RCYXRjaCkpLHQ9MDt0PHIuY291bnQ7dCsrKXIuZ2xUZXh0W3RdJiZyLnRleHRPcHRpb25zW3RdJiZyLmdsVGV4dFt0XS5yZW5kZXIoKTtyLmRpcnR5PSExfSxyLmNsZWFyPWZ1bmN0aW9uKCl7dmFyIG49dC5fZnVsbExheW91dCxpPW4uX3NpemUsYT1uLndpZHRoLG89bi5oZWlnaHQscz1lLnhheGlzLGw9ZS55YXhpcyxjPVtpLmwrcy5kb21haW5bMF0qaS53LGkuYitsLmRvbWFpblswXSppLmgsYS1pLnItKDEtcy5kb21haW5bMV0pKmkudyxvLWkudC0oMS1sLmRvbWFpblsxXSkqaS5oXTtyLnNlbGVjdDJkJiZTKHIuc2VsZWN0MmQsYyksci5zY2F0dGVyMmQ/UyhyLnNjYXR0ZXIyZCxjKTpyLmdsVGV4dCYmUyhyLmdsVGV4dFswXSxjKX0sci5kZXN0cm95PWZ1bmN0aW9uKCl7ci5maWxsMmQmJnIuZmlsbDJkLmRlc3Ryb3koKSxyLnNjYXR0ZXIyZCYmci5zY2F0dGVyMmQuZGVzdHJveSgpLHIuZXJyb3IyZCYmci5lcnJvcjJkLmRlc3Ryb3koKSxyLmxpbmUyZCYmci5saW5lMmQuZGVzdHJveSgpLHIuc2VsZWN0MmQmJnIuc2VsZWN0MmQuZGVzdHJveSgpLHIuZ2xUZXh0JiZyLmdsVGV4dC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuZGVzdHJveSgpfSksci5saW5lT3B0aW9ucz1udWxsLHIuZmlsbE9wdGlvbnM9bnVsbCxyLm1hcmtlck9wdGlvbnM9bnVsbCxyLm1hcmtlclNlbGVjdGVkT3B0aW9ucz1udWxsLHIubWFya2VyVW5zZWxlY3RlZE9wdGlvbnM9bnVsbCxyLmVycm9yWE9wdGlvbnM9bnVsbCxyLmVycm9yWU9wdGlvbnM9bnVsbCxyLnRleHRPcHRpb25zPW51bGwsci50ZXh0U2VsZWN0ZWRPcHRpb25zPW51bGwsci50ZXh0VW5zZWxlY3RlZE9wdGlvbnM9bnVsbCxyLnNlbGVjdEJhdGNoPW51bGwsci51bnNlbGVjdEJhdGNoPW51bGwsZS5fc2NlbmU9bnVsbH0pLHIuZGlydHl8fHUuZXh0ZW5kRmxhdChyLG4pLHJ9ZnVuY3Rpb24gUyh0LGUpe3ZhciByPXQucmVnbC5fZ2w7ci5lbmFibGUoci5TQ0lTU09SX1RFU1QpLHIuc2Npc3NvcihlWzBdLGVbMV0sZVsyXS1lWzBdLGVbM10tZVsxXSksci5jbGVhckNvbG9yKDAsMCwwLDApLHIuY2xlYXIoci5DT0xPUl9CVUZGRVJfQklUKX1mdW5jdGlvbiBFKHQsZSxyLG4pe3ZhciBpPXQueGEsYT10LnlhLG89dC5kaXN0YW5jZSxzPXQuZHh5LGw9dC5pbmRleCxoPXtwb2ludE51bWJlcjpsLHg6ZVtsXSx5OnJbbF19O2gudHg9QXJyYXkuaXNBcnJheShuLnRleHQpP24udGV4dFtsXTpuLnRleHQsaC5odHg9QXJyYXkuaXNBcnJheShuLmhvdmVydGV4dCk/bi5ob3ZlcnRleHRbbF06bi5ob3ZlcnRleHQsaC5kYXRhPUFycmF5LmlzQXJyYXkobi5jdXN0b21kYXRhKT9uLmN1c3RvbWRhdGFbbF06bi5jdXN0b21kYXRhLGgudHA9QXJyYXkuaXNBcnJheShuLnRleHRwb3NpdGlvbik/bi50ZXh0cG9zaXRpb25bbF06bi50ZXh0cG9zaXRpb247dmFyIGY9bi50ZXh0Zm9udDtmJiYoaC50cz1BcnJheS5pc0FycmF5KGYuc2l6ZSk/Zi5zaXplW2xdOmYuc2l6ZSxoLnRjPUFycmF5LmlzQXJyYXkoZi5jb2xvcik/Zi5jb2xvcltsXTpmLmNvbG9yLGgudGY9QXJyYXkuaXNBcnJheShmLmZhbWlseSk/Zi5mYW1pbHlbbF06Zi5mYW1pbHkpO3ZhciBwPW4ubWFya2VyO3AmJihoLm1zPXUuaXNBcnJheU9yVHlwZWRBcnJheShwLnNpemUpP3Auc2l6ZVtsXTpwLnNpemUsaC5tbz11LmlzQXJyYXlPclR5cGVkQXJyYXkocC5vcGFjaXR5KT9wLm9wYWNpdHlbbF06cC5vcGFjaXR5LGgubXg9QXJyYXkuaXNBcnJheShwLnN5bWJvbCk/cC5zeW1ib2xbbF06cC5zeW1ib2wsaC5tYz11LmlzQXJyYXlPclR5cGVkQXJyYXkocC5jb2xvcik/cC5jb2xvcltsXTpwLmNvbG9yKTt2YXIgZD1wJiZwLmxpbmU7ZCYmKGgubWxjPUFycmF5LmlzQXJyYXkoZC5jb2xvcik/ZC5jb2xvcltsXTpkLmNvbG9yLGgubWx3PXUuaXNBcnJheU9yVHlwZWRBcnJheShkLndpZHRoKT9kLndpZHRoW2xdOmQud2lkdGgpO3ZhciBnPXAmJnAuZ3JhZGllbnQ7ZyYmIm5vbmUiIT09Zy50eXBlJiYoaC5tZ3Q9QXJyYXkuaXNBcnJheShnLnR5cGUpP2cudHlwZVtsXTpnLnR5cGUsaC5tZ2M9QXJyYXkuaXNBcnJheShnLmNvbG9yKT9nLmNvbG9yW2xdOmcuY29sb3IpO3ZhciBtPWkuYzJwKGgueCwhMCksdj1hLmMycChoLnksITApLHk9aC5tcmN8fDEsXz1uLmhvdmVybGFiZWw7XyYmKGguaGJnPUFycmF5LmlzQXJyYXkoXy5iZ2NvbG9yKT9fLmJnY29sb3JbbF06Xy5iZ2NvbG9yLGguaGJjPUFycmF5LmlzQXJyYXkoXy5ib3JkZXJjb2xvcik/Xy5ib3JkZXJjb2xvcltsXTpfLmJvcmRlcmNvbG9yLGguaHRzPUFycmF5LmlzQXJyYXkoXy5mb250LnNpemUpP18uZm9udC5zaXplW2xdOl8uZm9udC5zaXplLGguaHRjPUFycmF5LmlzQXJyYXkoXy5mb250LmNvbG9yKT9fLmZvbnQuY29sb3JbbF06Xy5mb250LmNvbG9yLGguaHRmPUFycmF5LmlzQXJyYXkoXy5mb250LmZhbWlseSk/Xy5mb250LmZhbWlseVtsXTpfLmZvbnQuZmFtaWx5LGguaG5sPUFycmF5LmlzQXJyYXkoXy5uYW1lbGVuZ3RoKT9fLm5hbWVsZW5ndGhbbF06Xy5uYW1lbGVuZ3RoKTt2YXIgdz1uLmhvdmVyaW5mbzt3JiYoaC5oaT1BcnJheS5pc0FycmF5KHcpP3dbbF06dyk7dmFyIGs9e307cmV0dXJuIGtbdC5pbmRleF09aCx1LmV4dGVuZEZsYXQodCx7Y29sb3I6eChuLGgpLHgwOm0teSx4MTptK3kseExhYmVsVmFsOmgueCx5MDp2LXkseTE6dit5LHlMYWJlbFZhbDpoLnksY2Q6ayxkaXN0YW5jZTpvLHNwaWtlRGlzdGFuY2U6c30pLGguaHR4P3QudGV4dD1oLmh0eDpoLnR4P3QudGV4dD1oLnR4Om4udGV4dCYmKHQudGV4dD1uLnRleHQpLGIoaCxuLHQpLGMuZ2V0Q29tcG9uZW50TWV0aG9kKCJlcnJvcmJhcnMiLCJob3ZlckluZm8iKShoLG4sdCksdH1mdW5jdGlvbiBDKHQpe3ZhciBlLHIsbj10WzBdLnQsaT1uLl9zY2VuZSxhPW4uaW5kZXgsbz1pLnNlbGVjdEJhdGNoW2FdLHM9aS51bnNlbGVjdEJhdGNoW2FdLGw9aS50ZXh0T3B0aW9uc1thXSxjPWkudGV4dFNlbGVjdGVkT3B0aW9uc1thXXx8e30saD1pLnRleHRVbnNlbGVjdGVkT3B0aW9uc1thXXx8e30sZj11LmV4dGVuZEZsYXQoe30sbCk7aWYobyYmcyl7dmFyIGQ9Yy5jb2xvcixnPWguY29sb3IsbT1sLmNvbG9yLHY9QXJyYXkuaXNBcnJheShtKTtmb3IoZi5jb2xvcj1uZXcgQXJyYXkobi5jb3VudCksZT0wO2U8by5sZW5ndGg7ZSsrKXI9b1tlXSxmLmNvbG9yW3JdPWR8fCh2P21bcl06bSk7Zm9yKGU9MDtlPHMubGVuZ3RoO2UrKyl7cj1zW2VdO3ZhciB5PXY/bVtyXTptO2YuY29sb3Jbcl09Z3x8KGQ/eTpwLmFkZE9wYWNpdHkoeSxNKSl9fWkuZ2xUZXh0W2FdLnVwZGF0ZShmKX1lLmV4cG9ydHM9e21vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJzY2F0dGVyZ2wiLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiIpLGNhdGVnb3JpZXM6WyJnbCIsInJlZ2wiLCJjYXJ0ZXNpYW4iLCJzeW1ib2xzIiwiZXJyb3JCYXJzT0siLCJzaG93TGVnZW5kIiwic2NhdHRlci1saWtlIl0sYXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY2xlYW5EYXRhOnQoIi4uL3NjYXR0ZXIvY2xlYW5fZGF0YSIpLGNvbG9yYmFyOnQoIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIiksY2FsYzpmdW5jdGlvbih0LGUpe3ZhciByLG4saSxhPXQuX2Z1bGxMYXlvdXQscz1mLmdldEZyb21JZCh0LGUueGF4aXMpLGw9Zi5nZXRGcm9tSWQodCxlLnlheGlzKSxjPWEuX3Bsb3RzW2UueGF4aXMrZS55YXhpc10sdT1lLl9sZW5ndGgsaD0yKnUscD17fSxkPXMubWFrZUNhbGNkYXRhKGUsIngiKSx5PWwubWFrZUNhbGNkYXRhKGUsInkiKSx4PW5ldyBBcnJheShoKTtmb3Iocj0wO3I8dTtyKyspbj1kW3JdLGk9eVtyXSx4WzIqcl09bj09PXc/TmFOOm4seFsyKnIrMV09aT09PXc/TmFOOmk7aWYoImxvZyI9PT1zLnR5cGUpZm9yKHI9MDtyPGg7cis9Mil4W3JdPXMuYzJsKHhbcl0pO2lmKCJsb2ciPT09bC50eXBlKWZvcihyPTE7cjxoO3IrPTIpeFtyXT1sLmMybCh4W3JdKTtpZigibG9nIiE9PXMudHlwZSYmImxvZyIhPT1sLnR5cGUpcC50cmVlPW8oeCk7ZWxzZXt2YXIgYj1wLmlkcz1uZXcgQXJyYXkodSk7Zm9yKHI9MDtyPHU7cisrKWJbcl09cn12KGUpO3ZhciBfLE09QSh0LDAsZSx4LGQseSksUz1UKHQsYyk7cmV0dXJuIHU8az9fPWcoZSx1KTpNLm1hcmtlciYmKF89MiooTS5tYXJrZXIuc2l6ZUF2Z3x8TWF0aC5tYXgoTS5tYXJrZXIuc2l6ZSwzKSkpLG0odCxlLHMsbCxkLHksXyksTS5maWxsJiYhUy5maWxsMmQmJihTLmZpbGwyZD0hMCksTS5tYXJrZXImJiFTLnNjYXR0ZXIyZCYmKFMuc2NhdHRlcjJkPSEwKSxNLmxpbmUmJiFTLmxpbmUyZCYmKFMubGluZTJkPSEwKSwhTS5lcnJvclgmJiFNLmVycm9yWXx8Uy5lcnJvcjJkfHwoUy5lcnJvcjJkPSEwKSxNLnRleHQmJiFTLmdsVGV4dCYmKFMuZ2xUZXh0PSEwKSxNLm1hcmtlciYmdT49ayYmKE0ubWFya2VyLmNsdXN0ZXI9cC50cmVlKSxTLmxpbmVPcHRpb25zLnB1c2goTS5saW5lKSxTLmVycm9yWE9wdGlvbnMucHVzaChNLmVycm9yWCksUy5lcnJvcllPcHRpb25zLnB1c2goTS5lcnJvclkpLFMuZmlsbE9wdGlvbnMucHVzaChNLmZpbGwpLFMubWFya2VyT3B0aW9ucy5wdXNoKE0ubWFya2VyKSxTLm1hcmtlclNlbGVjdGVkT3B0aW9ucy5wdXNoKE0ubWFya2VyU2VsKSxTLm1hcmtlclVuc2VsZWN0ZWRPcHRpb25zLnB1c2goTS5tYXJrZXJVbnNlbCksUy50ZXh0T3B0aW9ucy5wdXNoKE0udGV4dCksUy50ZXh0U2VsZWN0ZWRPcHRpb25zLnB1c2goTS50ZXh0U2VsKSxTLnRleHRVbnNlbGVjdGVkT3B0aW9ucy5wdXNoKE0udGV4dFVuc2VsKSxTLmNvdW50KysscC5fc2NlbmU9UyxwLmluZGV4PVMuY291bnQtMSxwLng9ZCxwLnk9eSxwLnBvc2l0aW9ucz14LHAuY291bnQ9dSx0LmZpcnN0c2NhdHRlcj0hMSxbe3g6ITEseTohMSx0OnAsdHJhY2U6ZX1dfSxwbG90OmZ1bmN0aW9uKHQsZSxyKXtpZihyLmxlbmd0aCl7dmFyIG8scz10Ll9mdWxsTGF5b3V0LGM9clswXVswXS50Ll9zY2VuZSxwPXMuZHJhZ21vZGU7aWYoYyl7dmFyIGQ9cy5fc2l6ZSxnPXMud2lkdGgsbT1zLmhlaWdodDtpZihoKHQsWyJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIiwiT0VTX2VsZW1lbnRfaW5kZXhfdWludCJdKSl7dmFyIHY9cy5fZ2xjYW52YXMuZGF0YSgpWzBdLnJlZ2w7aWYoeSh0LGUsciksYy5kaXJ0eSl7aWYoITA9PT1jLmVycm9yMmQmJihjLmVycm9yMmQ9YSh2KSksITA9PT1jLmxpbmUyZCYmKGMubGluZTJkPWkodikpLCEwPT09Yy5zY2F0dGVyMmQmJihjLnNjYXR0ZXIyZD1uKHYpKSwhMD09PWMuZmlsbDJkJiYoYy5maWxsMmQ9aSh2KSksITA9PT1jLmdsVGV4dClmb3IoYy5nbFRleHQ9bmV3IEFycmF5KGMuY291bnQpLG89MDtvPGMuY291bnQ7bysrKWMuZ2xUZXh0W29dPW5ldyBsKHYpO2lmKGMuZ2xUZXh0KWZvcihvPTA7bzxjLmNvdW50O28rKyljLmdsVGV4dFtvXS51cGRhdGUoYy50ZXh0T3B0aW9uc1tvXSk7aWYoYy5saW5lMmQmJmMubGluZTJkLnVwZGF0ZShjLmxpbmVPcHRpb25zKSxjLmVycm9yMmQpe3ZhciB4PShjLmVycm9yWE9wdGlvbnN8fFtdKS5jb25jYXQoYy5lcnJvcllPcHRpb25zfHxbXSk7Yy5lcnJvcjJkLnVwZGF0ZSh4KX1jLnNjYXR0ZXIyZCYmYy5zY2F0dGVyMmQudXBkYXRlKGMubWFya2VyT3B0aW9ucyksYy5maWxsMmQmJihjLmZpbGxPcHRpb25zPWMuZmlsbE9wdGlvbnMubWFwKGZ1bmN0aW9uKHQsZSl7dmFyIG49cltlXTtpZighKHQmJm4mJm5bMF0mJm5bMF0udHJhY2UpKXJldHVybiBudWxsO3ZhciBpLGEsbz1uWzBdLHM9by50cmFjZSxsPW8udCx1PWMubGluZU9wdGlvbnNbZV0saD1bXSxmPXUmJnUucG9zaXRpb25zfHxsLnBvc2l0aW9ucztpZigidG96ZXJveSI9PT1zLmZpbGwpKGg9KGg9W2ZbMF0sMF0pLmNvbmNhdChmKSkucHVzaChmW2YubGVuZ3RoLTJdKSxoLnB1c2goMCk7ZWxzZSBpZigidG96ZXJveCI9PT1zLmZpbGwpKGg9KGg9WzAsZlsxXV0pLmNvbmNhdChmKSkucHVzaCgwKSxoLnB1c2goZltmLmxlbmd0aC0xXSk7ZWxzZSBpZigidG9zZWxmIj09PXMuZmlsbHx8InRvbmV4dCI9PT1zLmZpbGwpe2ZvcihoPVtdLGk9MCxhPTA7YTxmLmxlbmd0aDthKz0yKShpc05hTihmW2FdKXx8aXNOYU4oZlthKzFdKSkmJigoaD1oLmNvbmNhdChmLnNsaWNlKGksYSkpKS5wdXNoKGZbaV0sZltpKzFdKSxpPWErMik7aD1oLmNvbmNhdChmLnNsaWNlKGkpKSxpJiZoLnB1c2goZltpXSxmW2krMV0pfWVsc2V7dmFyIHA9cy5fbmV4dHRyYWNlO2lmKHApe3ZhciBkPWMubGluZU9wdGlvbnNbZSsxXTtpZihkKXt2YXIgZz1kLnBvc2l0aW9ucztpZigidG9uZXh0eSI9PT1zLmZpbGwpe2ZvcihoPWYuc2xpY2UoKSxlPU1hdGguZmxvb3IoZy5sZW5ndGgvMik7ZS0tOyl7dmFyIG09Z1syKmVdLHY9Z1syKmUrMV07aXNOYU4obSl8fGlzTmFOKHYpfHwoaC5wdXNoKG0pLGgucHVzaCh2KSl9dC5maWxsPXAuZmlsbGNvbG9yfX19fWlmKHMuX3ByZXZ0cmFjZSYmInRvbmV4dCI9PT1zLl9wcmV2dHJhY2UuZmlsbCl7dmFyIHk9Yy5saW5lT3B0aW9uc1tlLTFdLnBvc2l0aW9ucyx4PWgubGVuZ3RoLzIsYj1baT14XTtmb3IoYT0wO2E8eS5sZW5ndGg7YSs9MikoaXNOYU4oeVthXSl8fGlzTmFOKHlbYSsxXSkpJiYoYi5wdXNoKGEvMit4KzEpLGk9YSsyKTtoPWguY29uY2F0KHkpLHQuaG9sZT1ifXJldHVybiB0Lm9wYWNpdHk9cy5vcGFjaXR5LHQucG9zaXRpb25zPWgsdH0pLGMuZmlsbDJkLnVwZGF0ZShjLmZpbGxPcHRpb25zKSl9dmFyIGI9Imxhc3NvIj09PXB8fCJzZWxlY3QiPT09cDtjLnNlbGVjdEJhdGNoPW51bGwsYy51bnNlbGVjdEJhdGNoPW51bGw7dmFyIF89ci5tYXAoZnVuY3Rpb24ocil7aWYociYmclswXSYmclswXS50cmFjZSl7dmFyIG4saT1yWzBdLGE9aS50cmFjZSxvPWkudCxzPW8uaW5kZXgsbD1vLngsaD1vLnkscD1lLnhheGlzfHxmLmdldEZyb21JZCh0LGEueGF4aXN8fCJ4Iiksdj1lLnlheGlzfHxmLmdldEZyb21JZCh0LGEueWF4aXN8fCJ5IikseT1bKHAuX3JsfHxwLnJhbmdlKVswXSwodi5fcmx8fHYucmFuZ2UpWzBdLChwLl9ybHx8cC5yYW5nZSlbMV0sKHYuX3JsfHx2LnJhbmdlKVsxXV0seD1bZC5sK3AuZG9tYWluWzBdKmQudyxkLmIrdi5kb21haW5bMF0qZC5oLGctZC5yLSgxLXAuZG9tYWluWzFdKSpkLncsbS1kLnQtKDEtdi5kb21haW5bMV0pKmQuaF07aWYoYS5zZWxlY3RlZHBvaW50c3x8Yil7aWYoYnx8KGI9ITApLGMuc2VsZWN0QmF0Y2h8fChjLnNlbGVjdEJhdGNoPVtdLGMudW5zZWxlY3RCYXRjaD1bXSksYS5zZWxlY3RlZHBvaW50cyl7dmFyIF89Yy5zZWxlY3RCYXRjaFtzXT11LnNlbEluZGljZXMyc2VsUG9pbnRzKGEpLHc9e307Zm9yKG49MDtuPF8ubGVuZ3RoO24rKyl3W19bbl1dPTE7dmFyIGs9W107Zm9yKG49MDtuPG8uY291bnQ7bisrKXdbbl18fGsucHVzaChuKTtjLnVuc2VsZWN0QmF0Y2hbc109a312YXIgTT1uZXcgQXJyYXkoby5jb3VudCksQT1uZXcgQXJyYXkoby5jb3VudCk7Zm9yKG49MDtuPG8uY291bnQ7bisrKU1bbl09cC5jMnAobFtuXSksQVtuXT12LmMycChoW25dKTtvLnhweD1NLG8ueXB4PUF9ZWxzZSBvLnhweD1vLnlweD1udWxsO3JldHVybiBhLnZpc2libGU/e3ZpZXdwb3J0OngscmFuZ2U6eX06bnVsbH19KTtiJiYoYy5zZWxlY3QyZHx8KGMuc2VsZWN0MmQ9bihzLl9nbGNhbnZhcy5kYXRhKClbMV0ucmVnbCkpLGMuc2NhdHRlcjJkJiZjLnNlbGVjdEJhdGNoJiZjLnNlbGVjdEJhdGNoLmxlbmd0aCYmYy5zY2F0dGVyMmQudXBkYXRlKGMubWFya2VyVW5zZWxlY3RlZE9wdGlvbnMubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGMuc2VsZWN0QmF0Y2hbZV0/dDpudWxsfSkpLGMuc2VsZWN0MmQmJihjLnNlbGVjdDJkLnVwZGF0ZShjLm1hcmtlck9wdGlvbnMpLGMuc2VsZWN0MmQudXBkYXRlKGMubWFya2VyU2VsZWN0ZWRPcHRpb25zKSksYy5nbFRleHQmJnIuZm9yRWFjaChmdW5jdGlvbih0KXt0JiZ0WzBdJiZ0WzBdLnRyYWNlJiZDKHQpfSkpLGMuZmlsbDJkJiZjLmZpbGwyZC51cGRhdGUoXyksYy5saW5lMmQmJmMubGluZTJkLnVwZGF0ZShfKSxjLmVycm9yMmQmJmMuZXJyb3IyZC51cGRhdGUoXy5jb25jYXQoXykpLGMuc2NhdHRlcjJkJiZjLnNjYXR0ZXIyZC51cGRhdGUoXyksYy5zZWxlY3QyZCYmYy5zZWxlY3QyZC51cGRhdGUoXyksYy5nbFRleHQmJmMuZ2xUZXh0LmZvckVhY2goZnVuY3Rpb24odCxlKXt0LnVwZGF0ZShfW2VdKX0pLGMuZHJhdygpfWVsc2UgYy5pbml0KCl9fX0saG92ZXJQb2ludHM6ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYSxvLHMsbCxjLHUsaCxmLHA9dC5jZCxkPXBbMF0udCxnPXBbMF0udHJhY2UsbT10LnhhLHY9dC55YSx5PWQueCx4PWQueSxiPW0uYzJwKGUpLF89di5jMnAociksdz10LmRpc3RhbmNlO2lmKGQudHJlZSl7dmFyIGs9bS5wMmMoYi13KSxNPW0ucDJjKGIrdyksQT12LnAyYyhfLXcpLFQ9di5wMmMoXyt3KTtpPSJ4Ij09PW4/ZC50cmVlLnJhbmdlKE1hdGgubWluKGssTSksTWF0aC5taW4odi5fcmxbMF0sdi5fcmxbMV0pLE1hdGgubWF4KGssTSksTWF0aC5tYXgodi5fcmxbMF0sdi5fcmxbMV0pKTpkLnRyZWUucmFuZ2UoTWF0aC5taW4oayxNKSxNYXRoLm1pbihBLFQpLE1hdGgubWF4KGssTSksTWF0aC5tYXgoQSxUKSl9ZWxzZXtpZighZC5pZHMpcmV0dXJuW3RdO2k9ZC5pZHN9dmFyIFM9dztpZigieCI9PT1uKWZvcihsPTA7bDxpLmxlbmd0aDtsKyspbz15W2lbbF1dLChjPU1hdGguYWJzKG0uYzJwKG8pLWIpKTxTJiYoUz1jLHU9di5jMnAoeFtpW2xdXSktXyxmPU1hdGguc3FydChjKmMrdSp1KSxhPWlbbF0pO2Vsc2UgZm9yKGw9MDtsPGkubGVuZ3RoO2wrKylvPXlbaVtsXV0scz14W2lbbF1dLGM9bS5jMnAobyktYix1PXYuYzJwKHMpLV8sKGg9TWF0aC5zcXJ0KGMqYyt1KnUpKTxTJiYoUz1mPWgsYT1pW2xdKTtyZXR1cm4gdC5pbmRleD1hLHQuZGlzdGFuY2U9Uyx0LmR4eT1mLHZvaWQgMD09PWE/W3RdOihFKHQseSx4LGcpLFt0XSl9LHN0eWxlOmZ1bmN0aW9uKHQsZSl7aWYoZSl7dmFyIHI9ZVswXVswXS50Ll9zY2VuZTt0Ll9mdWxsTGF5b3V0Ll9oYXMoInNwbG9tIil8fHIuY2xlYXIoKSxyLmRyYXcoKX19LHNlbGVjdFBvaW50czpmdW5jdGlvbih0LGUpe3ZhciByPXQuY2Qsbj1bXSxpPXJbMF0udHJhY2UsYT1yWzBdLnQsbz1hLngsbD1hLnksYz1hLl9zY2VuZTtpZighYylyZXR1cm4gbjt2YXIgdT1kLmhhc1RleHQoaSksaD1kLmhhc01hcmtlcnMoaSksZj0haCYmIXU7aWYoITAhPT1pLnZpc2libGV8fGYpcmV0dXJuIG47dmFyIHAsZz1udWxsLG09bnVsbDtpZighMT09PWV8fGUuZGVnZW5lcmF0ZSltPXMoYS5jb3VudCk7ZWxzZSBmb3IoZz1bXSxtPVtdLHA9MDtwPGEuY291bnQ7cCsrKWUuY29udGFpbnMoW2EueHB4W3BdLGEueXB4W3BdXSk/KGcucHVzaChwKSxuLnB1c2goe3BvaW50TnVtYmVyOnAseDpvW3BdLHk6bFtwXX0pKTptLnB1c2gocCk7aWYoYy5zZWxlY3RCYXRjaHx8KGMuc2VsZWN0QmF0Y2g9W10sYy51bnNlbGVjdEJhdGNoPVtdKSwhYy5zZWxlY3RCYXRjaFthLmluZGV4XSl7Zm9yKHA9MDtwPGMuY291bnQ7cCsrKWMuc2VsZWN0QmF0Y2hbcF09W10sYy51bnNlbGVjdEJhdGNoW3BdPVtdO2gmJmMuc2NhdHRlcjJkLnVwZGF0ZShjLm1hcmtlclVuc2VsZWN0ZWRPcHRpb25zKX1yZXR1cm4gYy5zZWxlY3RCYXRjaFthLmluZGV4XT1nLGMudW5zZWxlY3RCYXRjaFthLmluZGV4XT1tLHUmJkMociksbn0sc2NlbmVPcHRpb25zOkEsc2NlbmVVcGRhdGU6VCxjYWxjSG92ZXI6RSxtZXRhOnt9fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo1NTgsIi4uLy4uL2NvbnN0YW50cy9pbnRlcmFjdGlvbnMiOjY2MCwiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NjYxLCIuLi8uLi9saWIiOjY4NCwiLi4vLi4vbGliL3ByZXBhcmVfcmVnbCI6Njk3LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjc0MywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIjo3MzUsIi4uLy4uL3JlZ2lzdHJ5Ijo4MTcsIi4uL3NjYXR0ZXIvY2FsYyI6MTAxNiwiLi4vc2NhdHRlci9jbGVhbl9kYXRhIjoxMDE4LCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsYyI6MTAxOSwiLi4vc2NhdHRlci9maWxsX2hvdmVyX3RleHQiOjEwMjIsIi4uL3NjYXR0ZXIvZ2V0X3RyYWNlX2NvbG9yIjoxMDI0LCIuLi9zY2F0dGVyL2xpbmtfdHJhY2VzIjoxMDMwLCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhciI6MTAzMiwiLi4vc2NhdHRlci9zdWJ0eXBlcyI6MTAzNywiLi9hdHRyaWJ1dGVzIjoxMDYyLCIuL2NvbnN0YW50cyI6MTA2MywiLi9jb252ZXJ0IjoxMDY0LCIuL2RlZmF1bHRzIjoxMDY1LCJAZXRwaW5hcmQvZ2wtdGV4dCI6NDQsImFycmF5LXJhbmdlIjo1OCwicG9pbnQtY2x1c3RlciI6NDM2LCJyZWdsLWVycm9yMmQiOjQ1NywicmVnbC1saW5lMmQiOjQ1OCwicmVnbC1zY2F0dGVyMmQiOjQ1OX1dLDEwNjc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlcmdlby9hdHRyaWJ1dGVzIiksaT10KCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL3Bsb3RzL21hcGJveC9sYXlvdXRfYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzIiksbD10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxjPXQoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbCx1PW4ubGluZSxoPW4ubWFya2VyO2UuZXhwb3J0cz1jKHtsb246bi5sb24sbGF0Om4ubGF0LG1vZGU6bCh7fSxpLm1vZGUse2RmbHQ6Im1hcmtlcnMifSksdGV4dDpsKHt9LGkudGV4dCx7fSksaG92ZXJ0ZXh0Omwoe30saS5ob3ZlcnRleHQse30pLGxpbmU6e2NvbG9yOnUuY29sb3Isd2lkdGg6dS53aWR0aH0sY29ubmVjdGdhcHM6aS5jb25uZWN0Z2FwcyxtYXJrZXI6e3N5bWJvbDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiJjaXJjbGUiLGFycmF5T2s6ITB9LG9wYWNpdHk6aC5vcGFjaXR5LHNpemU6aC5zaXplLHNpemVyZWY6aC5zaXplcmVmLHNpemVtaW46aC5zaXplbWluLHNpemVtb2RlOmguc2l6ZW1vZGUsY29sb3I6aC5jb2xvcixjb2xvcnNjYWxlOmguY29sb3JzY2FsZSxjYXV0bzpoLmNhdXRvLGNtYXg6aC5jbWF4LGNtaW46aC5jbWluLGF1dG9jb2xvcnNjYWxlOmguYXV0b2NvbG9yc2NhbGUscmV2ZXJzZXNjYWxlOmgucmV2ZXJzZXNjYWxlLHNob3dzY2FsZTpoLnNob3dzY2FsZSxjb2xvcmJhcjpzfSxmaWxsOm4uZmlsbCxmaWxsY29sb3I6aS5maWxsY29sb3IsdGV4dGZvbnQ6YS5sYXllcnMuc3ltYm9sLnRleHRmb250LHRleHRwb3NpdGlvbjphLmxheWVycy5zeW1ib2wudGV4dHBvc2l0aW9uLHNlbGVjdGVkOnttYXJrZXI6aS5zZWxlY3RlZC5tYXJrZXJ9LHVuc2VsZWN0ZWQ6e21hcmtlcjppLnVuc2VsZWN0ZWQubWFya2VyfSxob3ZlcmluZm86bCh7fSxvLmhvdmVyaW5mbyx7ZmxhZ3M6WyJsb24iLCJsYXQiLCJ0ZXh0IiwibmFtZSJdfSl9LCJjYWxjIiwibmVzdGVkIil9LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzIjo1NTksIi4uLy4uL2xpYi9leHRlbmQiOjY3MywiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6NzE1LCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo3MjksIi4uLy4uL3Bsb3RzL21hcGJveC9sYXlvdXRfYXR0cmlidXRlcyI6NzkxLCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiOjEwMTUsIi4uL3NjYXR0ZXJnZW8vYXR0cmlidXRlcyI6MTA1M31dLDEwNjg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTSxvPXQoIi4uLy4uL2xpYi9nZW9qc29uX3V0aWxzIikscz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKSxsPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGM9dCgiLi4vc2NhdHRlci9tYWtlX2J1YmJsZV9zaXplX2Z1bmMiKSx1PXQoIi4uL3NjYXR0ZXIvc3VidHlwZXMiKSxoPXQoIi4uLy4uL3Bsb3RzL21hcGJveC9jb252ZXJ0X3RleHRfb3B0cyIpO2Z1bmN0aW9uIGYoKXtyZXR1cm57Z2VvanNvbjpvLm1ha2VCbGFuaygpLGxheW91dDp7dmlzaWJpbGl0eToibm9uZSJ9LHBhaW50Ont9fX1mdW5jdGlvbiBwKHQpe3JldHVybiBpLmlzQXJyYXlPclR5cGVkQXJyYXkodCk/ZnVuY3Rpb24odCl7cmV0dXJuIHR9OnQ/ZnVuY3Rpb24oKXtyZXR1cm4gdH06ZH1mdW5jdGlvbiBkKCl7cmV0dXJuIiJ9ZnVuY3Rpb24gZyh0KXtyZXR1cm4gdFswXT09PWF9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dFswXS50cmFjZSxhPSEwPT09ci52aXNpYmxlLG09Im5vbmUiIT09ci5maWxsLHY9dS5oYXNMaW5lcyhyKSx5PXUuaGFzTWFya2VycyhyKSx4PXUuaGFzVGV4dChyKSxiPXkmJiJjaXJjbGUiPT09ci5tYXJrZXIuc3ltYm9sLF89eSYmImNpcmNsZSIhPT1yLm1hcmtlci5zeW1ib2wsdz1mKCksaz1mKCksTT1mKCksQT1mKCksVD17ZmlsbDp3LGxpbmU6ayxjaXJjbGU6TSxzeW1ib2w6QX07aWYoIWEpcmV0dXJuIFQ7aWYoKG18fHYpJiYoZT1vLmNhbGNUcmFjZVRvTGluZUNvb3Jkcyh0KSksbSYmKHcuZ2VvanNvbj1vLm1ha2VQb2x5Z29uKGUpLHcubGF5b3V0LnZpc2liaWxpdHk9InZpc2libGUiLGkuZXh0ZW5kRmxhdCh3LnBhaW50LHsiZmlsbC1jb2xvciI6ci5maWxsY29sb3J9KSksdiYmKGsuZ2VvanNvbj1vLm1ha2VMaW5lKGUpLGsubGF5b3V0LnZpc2liaWxpdHk9InZpc2libGUiLGkuZXh0ZW5kRmxhdChrLnBhaW50LHsibGluZS13aWR0aCI6ci5saW5lLndpZHRoLCJsaW5lLWNvbG9yIjpyLmxpbmUuY29sb3IsImxpbmUtb3BhY2l0eSI6ci5vcGFjaXR5fSkpLGIpe3ZhciBTPWZ1bmN0aW9uKHQpe3ZhciBlLHIsYSxvLHU9dFswXS50cmFjZSxoPXUubWFya2VyLGY9dS5zZWxlY3RlZHBvaW50cyxwPWkuaXNBcnJheU9yVHlwZWRBcnJheShoLmNvbG9yKSxkPWkuaXNBcnJheU9yVHlwZWRBcnJheShoLnNpemUpLG09aS5pc0FycmF5T3JUeXBlZEFycmF5KGgub3BhY2l0eSk7ZnVuY3Rpb24gdih0KXtyZXR1cm4gdS5vcGFjaXR5KnR9cCYmKHI9cy5oYXNDb2xvcnNjYWxlKHUsIm1hcmtlciIpP3MubWFrZUNvbG9yU2NhbGVGdW5jKHMuZXh0cmFjdFNjYWxlKGguY29sb3JzY2FsZSxoLmNtaW4saC5jbWF4KSk6aS5pZGVudGl0eSk7ZCYmKGE9Yyh1KSk7bSYmKG89ZnVuY3Rpb24odCl7dmFyIGU9bih0KT8raS5jb25zdHJhaW4odCwwLDEpOjA7cmV0dXJuIHYoZSl9KTt2YXIgeSx4PVtdO2ZvcihlPTA7ZTx0Lmxlbmd0aDtlKyspe3ZhciBiPXRbZV0sXz1iLmxvbmxhdDtpZighZyhfKSl7dmFyIHc9e307ciYmKHcubWNjPWIubWNjPXIoYi5tYykpLGEmJih3Lm1yYz1iLm1yYz1hKGIubXMpKSxvJiYody5tbz1vKGIubW8pKSxmJiYody5zZWxlY3RlZD1iLnNlbGVjdGVkfHwwKSx4LnB1c2goe3R5cGU6IkZlYXR1cmUiLGdlb21ldHJ5Ont0eXBlOiJQb2ludCIsY29vcmRpbmF0ZXM6X30scHJvcGVydGllczp3fSl9fWlmKGYpZm9yKHk9bC5tYWtlU2VsZWN0ZWRQb2ludFN0eWxlRm5zKHUpLGU9MDtlPHgubGVuZ3RoO2UrKyl7dmFyIGs9eFtlXS5wcm9wZXJ0aWVzO3kuc2VsZWN0ZWRPcGFjaXR5Rm4mJihrLm1vPXYoeS5zZWxlY3RlZE9wYWNpdHlGbihrKSkpLHkuc2VsZWN0ZWRDb2xvckZuJiYoay5tY2M9eS5zZWxlY3RlZENvbG9yRm4oaykpLHkuc2VsZWN0ZWRTaXplRm4mJihrLm1yYz15LnNlbGVjdGVkU2l6ZUZuKGspKX1yZXR1cm57Z2VvanNvbjp7dHlwZToiRmVhdHVyZUNvbGxlY3Rpb24iLGZlYXR1cmVzOnh9LG1jYzpwfHx5JiZ5LnNlbGVjdGVkQ29sb3JGbj97dHlwZToiaWRlbnRpdHkiLHByb3BlcnR5OiJtY2MifTpoLmNvbG9yLG1yYzpkfHx5JiZ5LnNlbGVjdGVkU2l6ZUZuP3t0eXBlOiJpZGVudGl0eSIscHJvcGVydHk6Im1yYyJ9OihNPWguc2l6ZSxNLzIpLG1vOm18fHkmJnkuc2VsZWN0ZWRPcGFjaXR5Rm4/e3R5cGU6ImlkZW50aXR5Iixwcm9wZXJ0eToibW8ifTp2KGgub3BhY2l0eSl9O3ZhciBNfSh0KTtNLmdlb2pzb249Uy5nZW9qc29uLE0ubGF5b3V0LnZpc2liaWxpdHk9InZpc2libGUiLGkuZXh0ZW5kRmxhdChNLnBhaW50LHsiY2lyY2xlLWNvbG9yIjpTLm1jYywiY2lyY2xlLXJhZGl1cyI6Uy5tcmMsImNpcmNsZS1vcGFjaXR5IjpTLm1vfSl9aWYoKF98fHgpJiYoQS5nZW9qc29uPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10WzBdLnRyYWNlLHI9KGUubWFya2VyfHx7fSkuc3ltYm9sLG49ZS50ZXh0LGk9ImNpcmNsZSIhPT1yP3Aocik6ZCxhPXUuaGFzVGV4dChlKT9wKG4pOmQsbz1bXSxzPTA7czx0Lmxlbmd0aDtzKyspe3ZhciBsPXRbc107ZyhsLmxvbmxhdCl8fG8ucHVzaCh7dHlwZToiRmVhdHVyZSIsZ2VvbWV0cnk6e3R5cGU6IlBvaW50Iixjb29yZGluYXRlczpsLmxvbmxhdH0scHJvcGVydGllczp7c3ltYm9sOmkobC5teCksdGV4dDphKGwudHgpfX0pfXJldHVybnt0eXBlOiJGZWF0dXJlQ29sbGVjdGlvbiIsZmVhdHVyZXM6b319KHQpLGkuZXh0ZW5kRmxhdChBLmxheW91dCx7dmlzaWJpbGl0eToidmlzaWJsZSIsImljb24taW1hZ2UiOiJ7c3ltYm9sfS0xNSIsInRleHQtZmllbGQiOiJ7dGV4dH0ifSksXyYmKGkuZXh0ZW5kRmxhdChBLmxheW91dCx7Imljb24tc2l6ZSI6ci5tYXJrZXIuc2l6ZS8xMH0pLGkuZXh0ZW5kRmxhdChBLnBhaW50LHsiaWNvbi1vcGFjaXR5IjpyLm9wYWNpdHkqci5tYXJrZXIub3BhY2l0eSwiaWNvbi1jb2xvciI6ci5tYXJrZXIuY29sb3J9KSkseCkpe3ZhciBFPShyLm1hcmtlcnx8e30pLnNpemUsQz1oKHIudGV4dHBvc2l0aW9uLEUpO2kuZXh0ZW5kRmxhdChBLmxheW91dCx7InRleHQtc2l6ZSI6ci50ZXh0Zm9udC5zaXplLCJ0ZXh0LWFuY2hvciI6Qy5hbmNob3IsInRleHQtb2Zmc2V0IjpDLm9mZnNldH0pLGkuZXh0ZW5kRmxhdChBLnBhaW50LHsidGV4dC1jb2xvciI6ci50ZXh0Zm9udC5jb2xvciwidGV4dC1vcGFjaXR5IjpyLm9wYWNpdHl9KX1yZXR1cm4gVH19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIjo1NzMsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NTgzLCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo2NjEsIi4uLy4uL2xpYiI6Njg0LCIuLi8uLi9saWIvZ2VvanNvbl91dGlscyI6Njc3LCIuLi8uLi9wbG90cy9tYXBib3gvY29udmVydF90ZXh0X29wdHMiOjc4OCwiLi4vc2NhdHRlci9tYWtlX2J1YmJsZV9zaXplX2Z1bmMiOjEwMzEsIi4uL3NjYXR0ZXIvc3VidHlwZXMiOjEwMzcsImZhc3QtaXNudW1lcmljIjoyMTR9XSwxMDY5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vc2NhdHRlci9zdWJ0eXBlcyIpLGE9dCgiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiKSxvPXQoIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0cyIpLHM9dCgiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzIiksbD10KCIuLi9zY2F0dGVyL2ZpbGxjb2xvcl9kZWZhdWx0cyIpLGM9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHUpe2Z1bmN0aW9uIGgocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGMscixpKX1pZihmdW5jdGlvbih0LGUscil7dmFyIG49cigibG9uIil8fFtdLGk9cigibGF0Iil8fFtdLGE9TWF0aC5taW4obi5sZW5ndGgsaS5sZW5ndGgpO3JldHVybiBlLl9sZW5ndGg9YSxhfSgwLGUsaCkpe2lmKGgoInRleHQiKSxoKCJob3ZlcnRleHQiKSxoKCJtb2RlIiksaS5oYXNMaW5lcyhlKSYmKG8odCxlLHIsdSxoLHtub0Rhc2g6ITB9KSxoKCJjb25uZWN0Z2FwcyIpKSxpLmhhc01hcmtlcnMoZSkpe2EodCxlLHIsdSxoLHtub0xpbmU6ITB9KTt2YXIgZj1lLm1hcmtlcjsiY2lyY2xlIiE9PWYuc3ltYm9sJiYobi5pc0FycmF5T3JUeXBlZEFycmF5KGYuc2l6ZSkmJihmLnNpemU9Zi5zaXplWzBdKSxuLmlzQXJyYXlPclR5cGVkQXJyYXkoZi5jb2xvcikmJihmLmNvbG9yPWYuY29sb3JbMF0pKX1pLmhhc1RleHQoZSkmJnModCxlLHUsaCx7bm9TZWxlY3Q6ITB9KSxoKCJmaWxsIiksIm5vbmUiIT09ZS5maWxsJiZsKHQsZSxyLGgpLG4uY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eShlLGgpfWVsc2UgZS52aXNpYmxlPSExfX0seyIuLi8uLi9saWIiOjY4NCwiLi4vc2NhdHRlci9maWxsY29sb3JfZGVmYXVsdHMiOjEwMjMsIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0cyI6MTAyNywiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiOjEwMzMsIi4uL3NjYXR0ZXIvc3VidHlwZXMiOjEwMzcsIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0cyI6MTAzOCwiLi9hdHRyaWJ1dGVzIjoxMDY3fV0sMTA3MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5sb249ZS5sb24sdC5sYXQ9ZS5sYXQsdH19LHt9XSwxMDcxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vc2NhdHRlci9nZXRfdHJhY2VfY29sb3IiKSxvPXQoIi4uL3NjYXR0ZXIvZmlsbF9ob3Zlcl90ZXh0Iikscz10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGw9dC5jZCxjPWxbMF0udHJhY2UsdT10LnhhLGg9dC55YSxmPXQuc3VicGxvdCxwPTM2MCooZT49MD9NYXRoLmZsb29yKChlKzE4MCkvMzYwKTpNYXRoLmNlaWwoKGUtMTgwKS8zNjApKSxkPWUtcDtpZihuLmdldENsb3Nlc3QobCxmdW5jdGlvbih0KXt2YXIgZT10LmxvbmxhdDtpZihlWzBdPT09cylyZXR1cm4gMS8wO3ZhciBuPWkud3JhcDE4MChlWzBdKSxhPWVbMV0sbz1mLnByb2plY3QoW24sYV0pLGw9by54LXUuYzJwKFtkLGFdKSxjPW8ueS1oLmMycChbbixyXSkscD1NYXRoLm1heCgzLHQubXJjfHwwKTtyZXR1cm4gTWF0aC5tYXgoTWF0aC5zcXJ0KGwqbCtjKmMpLXAsMS0zL3ApfSx0KSwhMSE9PXQuaW5kZXgpe3ZhciBnPWxbdC5pbmRleF0sbT1nLmxvbmxhdCx2PVtpLndyYXAxODAobVswXSkrcCxtWzFdXSx5PXUuYzJwKHYpLHg9aC5jMnAodiksYj1nLm1yY3x8MTtyZXR1cm4gdC54MD15LWIsdC54MT15K2IsdC55MD14LWIsdC55MT14K2IsdC5jb2xvcj1hKGMsZyksdC5leHRyYVRleHQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPShlLmhpfHx0LmhvdmVyaW5mbykuc3BsaXQoIisiKSxpPS0xIT09bi5pbmRleE9mKCJhbGwiKSxhPS0xIT09bi5pbmRleE9mKCJsb24iKSxzPS0xIT09bi5pbmRleE9mKCJsYXQiKSxsPWUubG9ubGF0LGM9W107ZnVuY3Rpb24gdSh0KXtyZXR1cm4gdCsiXHhiMCJ9aXx8YSYmcz9jLnB1c2goIigiK3UobFswXSkrIiwgIit1KGxbMV0pKyIpIik6YT9jLnB1c2goci5sb24rdShsWzBdKSk6cyYmYy5wdXNoKHIubGF0K3UobFsxXSkpOyhpfHwtMSE9PW4uaW5kZXhPZigidGV4dCIpKSYmbyhlLHQsYyk7cmV0dXJuIGMuam9pbigiPGJyPiIpfShjLGcsbFswXS50LmxhYmVscyksW3RdfX19LHsiLi4vLi4vY29tcG9uZW50cy9meCI6NjAwLCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo2NjEsIi4uLy4uL2xpYiI6Njg0LCIuLi9zY2F0dGVyL2ZpbGxfaG92ZXJfdGV4dCI6MTAyMiwiLi4vc2NhdHRlci9nZXRfdHJhY2VfY29sb3IiOjEwMjR9XSwxMDcyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXt9O24uYXR0cmlidXRlcz10KCIuL2F0dHJpYnV0ZXMiKSxuLnN1cHBseURlZmF1bHRzPXQoIi4vZGVmYXVsdHMiKSxuLmNvbG9yYmFyPXQoIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIiksbi5jYWxjPXQoIi4uL3NjYXR0ZXJnZW8vY2FsYyIpLG4ucGxvdD10KCIuL3Bsb3QiKSxuLmhvdmVyUG9pbnRzPXQoIi4vaG92ZXIiKSxuLmV2ZW50RGF0YT10KCIuL2V2ZW50X2RhdGEiKSxuLnNlbGVjdFBvaW50cz10KCIuL3NlbGVjdCIpLG4uc3R5bGU9ZnVuY3Rpb24odCxlKXtlJiZlWzBdLnRyYWNlLl9nbFRyYWNlLnVwZGF0ZShlKX0sbi5tb2R1bGVUeXBlPSJ0cmFjZSIsbi5uYW1lPSJzY2F0dGVybWFwYm94IixuLmJhc2VQbG90TW9kdWxlPXQoIi4uLy4uL3Bsb3RzL21hcGJveCIpLG4uY2F0ZWdvcmllcz1bIm1hcGJveCIsImdsIiwic3ltYm9scyIsInNob3dMZWdlbmQiLCJzY2F0dGVybGlrZSJdLG4ubWV0YT17fSxlLmV4cG9ydHM9bn0seyIuLi8uLi9wbG90cy9tYXBib3giOjc4OSwiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiOjEwMzIsIi4uL3NjYXR0ZXJnZW8vY2FsYyI6MTA1NCwiLi9hdHRyaWJ1dGVzIjoxMDY3LCIuL2RlZmF1bHRzIjoxMDY5LCIuL2V2ZW50X2RhdGEiOjEwNzAsIi4vaG92ZXIiOjEwNzEsIi4vcGxvdCI6MTA3MywiLi9zZWxlY3QiOjEwNzR9XSwxMDczOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vY29udmVydCIpO2Z1bmN0aW9uIGkodCxlKXt0aGlzLnN1YnBsb3Q9dCx0aGlzLnVpZD1lLHRoaXMuc291cmNlSWRzPXtmaWxsOmUrIi1zb3VyY2UtZmlsbCIsbGluZTplKyItc291cmNlLWxpbmUiLGNpcmNsZTplKyItc291cmNlLWNpcmNsZSIsc3ltYm9sOmUrIi1zb3VyY2Utc3ltYm9sIn0sdGhpcy5sYXllcklkcz17ZmlsbDplKyItbGF5ZXItZmlsbCIsbGluZTplKyItbGF5ZXItbGluZSIsY2lyY2xlOmUrIi1sYXllci1jaXJjbGUiLHN5bWJvbDplKyItbGF5ZXItc3ltYm9sIn0sdGhpcy5vcmRlcj1bImZpbGwiLCJsaW5lIiwiY2lyY2xlIiwic3ltYm9sIl19dmFyIGE9aS5wcm90b3R5cGU7YS5hZGRTb3VyY2U9ZnVuY3Rpb24odCxlKXt0aGlzLnN1YnBsb3QubWFwLmFkZFNvdXJjZSh0aGlzLnNvdXJjZUlkc1t0XSx7dHlwZToiZ2VvanNvbiIsZGF0YTplLmdlb2pzb259KX0sYS5zZXRTb3VyY2VEYXRhPWZ1bmN0aW9uKHQsZSl7dGhpcy5zdWJwbG90Lm1hcC5nZXRTb3VyY2UodGhpcy5zb3VyY2VJZHNbdF0pLnNldERhdGEoZS5nZW9qc29uKX0sYS5hZGRMYXllcj1mdW5jdGlvbih0LGUpe3RoaXMuc3VicGxvdC5tYXAuYWRkTGF5ZXIoe3R5cGU6dCxpZDp0aGlzLmxheWVySWRzW3RdLHNvdXJjZTp0aGlzLnNvdXJjZUlkc1t0XSxsYXlvdXQ6ZS5sYXlvdXQscGFpbnQ6ZS5wYWludH0pfSxhLnVwZGF0ZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5zdWJwbG90LHI9bih0KSxpPTA7aTx0aGlzLm9yZGVyLmxlbmd0aDtpKyspe3ZhciBhPXRoaXMub3JkZXJbaV0sbz1yW2FdO2Uuc2V0T3B0aW9ucyh0aGlzLmxheWVySWRzW2FdLCJzZXRMYXlvdXRQcm9wZXJ0eSIsby5sYXlvdXQpLCJ2aXNpYmxlIj09PW8ubGF5b3V0LnZpc2liaWxpdHkmJih0aGlzLnNldFNvdXJjZURhdGEoYSxvKSxlLnNldE9wdGlvbnModGhpcy5sYXllcklkc1thXSwic2V0UGFpbnRQcm9wZXJ0eSIsby5wYWludCkpfXRbMF0udHJhY2UuX2dsVHJhY2U9dGhpc30sYS5kaXNwb3NlPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuc3VicGxvdC5tYXAsZT0wO2U8dGhpcy5vcmRlci5sZW5ndGg7ZSsrKXt2YXIgcj10aGlzLm9yZGVyW2VdO3QucmVtb3ZlTGF5ZXIodGhpcy5sYXllcklkc1tyXSksdC5yZW1vdmVTb3VyY2UodGhpcy5zb3VyY2VJZHNbcl0pfX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW5ldyBpKHQsZVswXS50cmFjZS51aWQpLGE9bihlKSxvPTA7bzxyLm9yZGVyLmxlbmd0aDtvKyspe3ZhciBzPXIub3JkZXJbb10sbD1hW3NdO3IuYWRkU291cmNlKHMsbCksci5hZGRMYXllcihzLGwpfXJldHVybiBlWzBdLnRyYWNlLl9nbFRyYWNlPXIscn19LHsiLi9jb252ZXJ0IjoxMDY4fV0sMTA3NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uL3NjYXR0ZXIvc3VidHlwZXMiKSxhPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbz10LmNkLHM9dC54YXhpcyxsPXQueWF4aXMsYz1bXSx1PW9bMF0udHJhY2U7aWYoIWkuaGFzTWFya2Vycyh1KSlyZXR1cm5bXTtpZighMT09PWUpZm9yKHI9MDtyPG8ubGVuZ3RoO3IrKylvW3JdLnNlbGVjdGVkPTA7ZWxzZSBmb3Iocj0wO3I8by5sZW5ndGg7cisrKXt2YXIgaD1vW3JdLGY9aC5sb25sYXQ7aWYoZlswXSE9PWEpe3ZhciBwPVtuLndyYXAxODAoZlswXSksZlsxXV0sZD1bcy5jMnAocCksbC5jMnAocCldO2UuY29udGFpbnMoZCk/KGMucHVzaCh7cG9pbnROdW1iZXI6cixsb246ZlswXSxsYXQ6ZlsxXX0pLGguc2VsZWN0ZWQ9MSk6aC5zZWxlY3RlZD0wfX1yZXR1cm4gY319LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NjYxLCIuLi8uLi9saWIiOjY4NCwiLi4vc2NhdHRlci9zdWJ0eXBlcyI6MTAzN31dLDEwNzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsaT10KCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxvPWkubGluZTtlLmV4cG9ydHM9e21vZGU6aS5tb2RlLHI6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0sdGhldGE6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0sdGhldGF1bml0Ont2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJyYWRpYW5zIiwiZGVncmVlcyIsImdyYWRpYW5zIl0sZGZsdDoiZGVncmVlcyIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSx0ZXh0OmkudGV4dCxob3ZlcnRleHQ6aS5ob3ZlcnRleHQsbGluZTp7Y29sb3I6by5jb2xvcix3aWR0aDpvLndpZHRoLGRhc2g6by5kYXNoLHNoYXBlOm4oe30sby5zaGFwZSx7dmFsdWVzOlsibGluZWFyIiwic3BsaW5lIl19KSxzbW9vdGhpbmc6by5zbW9vdGhpbmcsZWRpdFR5cGU6ImNhbGMifSxjb25uZWN0Z2FwczppLmNvbm5lY3RnYXBzLG1hcmtlcjppLm1hcmtlcixjbGlwb25heGlzOm4oe30saS5jbGlwb25heGlzLHtkZmx0OiExfSksdGV4dHBvc2l0aW9uOmkudGV4dHBvc2l0aW9uLHRleHRmb250OmkudGV4dGZvbnQsZmlsbDpuKHt9LGkuZmlsbCx7dmFsdWVzOlsibm9uZSIsInRvc2VsZiIsInRvbmV4dCJdfSksZmlsbGNvbG9yOmkuZmlsbGNvbG9yLGhvdmVyaW5mbzpuKHt9LGEuaG92ZXJpbmZvLHtmbGFnczpbInIiLCJ0aGV0YSIsInRleHQiLCJuYW1lIl19KSxob3Zlcm9uOmkuaG92ZXJvbixzZWxlY3RlZDppLnNlbGVjdGVkLHVuc2VsZWN0ZWQ6aS51bnNlbGVjdGVkfX0seyIuLi8uLi9saWIvZXh0ZW5kIjo2NzMsIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjcyOSwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIjoxMDE1fV0sMTA3NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTSxhPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksbz10KCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsYyIpLHM9dCgiLi4vc2NhdHRlci9hcnJheXNfdG9fY2FsY2RhdGEiKSxsPXQoIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb24iKSxjPXQoIi4uL3NjYXR0ZXIvY2FsYyIpLmNhbGNNYXJrZXJTaXplO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLHU9dC5fZnVsbExheW91dCxoPWUuc3VicGxvdCxmPXVbaF0ucmFkaWFsYXhpcyxwPXVbaF0uYW5ndWxhcmF4aXMsZD1mLm1ha2VDYWxjZGF0YShlLCJyIiksZz1wLm1ha2VDYWxjZGF0YShlLCJ0aGV0YSIpLG09ZS5fbGVuZ3RoLHY9bmV3IEFycmF5KG0pO2Zvcih2YXIgeT0wO3k8bTt5Kyspe3ZhciB4PWRbeV0sYj1nW3ldLF89dlt5XT17fTtuKHgpJiZuKGIpPyhfLnI9eCxfLnRoZXRhPWIsXy5yYWQ9KHI9YixwLmMycmFkKHIsZS50aGV0YXVuaXQpKSk6Xy5yPWl9dmFyIHc9YyhlLG0pO3JldHVybiBhLmV4cGFuZChmLGQse3BwYWQ6d30pLG8oZSkscyh2LGUpLGwodixlKSx2fX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo2NjEsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3MzIsIi4uL3NjYXR0ZXIvYXJyYXlzX3RvX2NhbGNkYXRhIjoxMDE0LCIuLi9zY2F0dGVyL2NhbGMiOjEwMTYsIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb24iOjEwMTcsIi4uL3NjYXR0ZXIvY29sb3JzY2FsZV9jYWxjIjoxMDE5LCJmYXN0LWlzbnVtZXJpYyI6MjE0fV0sMTA3NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uL3NjYXR0ZXIvc3VidHlwZXMiKSxhPXQoIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzIiksbz10KCIuLi9zY2F0dGVyL2xpbmVfZGVmYXVsdHMiKSxzPXQoIi4uL3NjYXR0ZXIvbGluZV9zaGFwZV9kZWZhdWx0cyIpLGw9dCgiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzIiksYz10KCIuLi9zY2F0dGVyL2ZpbGxjb2xvcl9kZWZhdWx0cyIpLHU9dCgiLi4vc2NhdHRlci9jb25zdGFudHMiKS5QVFNfTElORVNPTkxZLGg9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGYpe2Z1bmN0aW9uIHAocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGgscixpKX12YXIgZD1wKCJyIiksZz1wKCJ0aGV0YSIpLG09ZCYmZz9NYXRoLm1pbihkLmxlbmd0aCxnLmxlbmd0aCk6MDtpZihtKXtlLl9sZW5ndGg9bSxwKCJ0aGV0YXVuaXQiKSxwKCJtb2RlIixtPHU/ImxpbmVzK21hcmtlcnMiOiJsaW5lcyIpLHAoInRleHQiKSxwKCJob3ZlcnRleHQiKSxpLmhhc0xpbmVzKGUpJiYobyh0LGUscixmLHApLHModCxlLHApLHAoImNvbm5lY3RnYXBzIikpLGkuaGFzTWFya2VycyhlKSYmYSh0LGUscixmLHAse2dyYWRpZW50OiEwfSksaS5oYXNUZXh0KGUpJiZsKHQsZSxmLHApO3ZhciB2PVtdOyhpLmhhc01hcmtlcnMoZSl8fGkuaGFzVGV4dChlKSkmJihwKCJjbGlwb25heGlzIikscCgibWFya2VyLm1heGRpc3BsYXllZCIpLHYucHVzaCgicG9pbnRzIikpLHAoImZpbGwiKSwibm9uZSIhPT1lLmZpbGwmJihjKHQsZSxyLHApLGkuaGFzTGluZXMoZSl8fHModCxlLHApKSwidG9uZXh0IiE9PWUuZmlsbCYmInRvc2VsZiIhPT1lLmZpbGx8fHYucHVzaCgiZmlsbHMiKSxwKCJob3Zlcm9uIix2LmpvaW4oIisiKXx8InBvaW50cyIpLG4uY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eShlLHApfWVsc2UgZS52aXNpYmxlPSExfX0seyIuLi8uLi9saWIiOjY4NCwiLi4vc2NhdHRlci9jb25zdGFudHMiOjEwMjAsIi4uL3NjYXR0ZXIvZmlsbGNvbG9yX2RlZmF1bHRzIjoxMDIzLCIuLi9zY2F0dGVyL2xpbmVfZGVmYXVsdHMiOjEwMjcsIi4uL3NjYXR0ZXIvbGluZV9zaGFwZV9kZWZhdWx0cyI6MTAyOSwiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiOjEwMzMsIi4uL3NjYXR0ZXIvc3VidHlwZXMiOjEwMzcsIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0cyI6MTAzOCwiLi9hdHRyaWJ1dGVzIjoxMDc1fV0sMTA3ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9zY2F0dGVyL2hvdmVyIiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGE9dCgiLi4vLi4vbGliIik7ZnVuY3Rpb24gbyh0LGUscil7dmFyIG49ci5yYWRpYWxBeGlzLG89ci5hbmd1bGFyQXhpcyxzPSh0LmhpfHxlLmhvdmVyaW5mbykuc3BsaXQoIisiKSxsPVtdO24uX2hvdmVydGl0bGU9InIiLG8uX2hvdmVydGl0bGU9Ilx1MDNiOCI7dmFyIGMsdT1vLl9jMnJhZCh0LnRoZXRhLGUudGhldGF1bml0KTtmdW5jdGlvbiBoKHQsZSl7bC5wdXNoKHQuX2hvdmVydGl0bGUrIjogIitpLnRpY2tUZXh0KHQsZSwiaG92ZXIiKS50ZXh0KX1yZXR1cm4gYz0ibGluZWFyIj09PW8udHlwZSYmZS50aGV0YXVuaXQhPT1vLnRoZXRhdW5pdD8iZGVncmVlcyI9PT1vLnRoZXRhdW5pdD9hLnJhZDJkZWcodSk6dTp0LnRoZXRhLC0xIT09cy5pbmRleE9mKCJhbGwiKSYmKHM9WyJyIiwidGhldGEiXSksLTEhPT1zLmluZGV4T2YoInIiKSYmaChuLG4uYzJyKHQucikpLC0xIT09cy5pbmRleE9mKCJ0aGV0YSIpJiZoKG8sYyksbC5qb2luKCI8YnI+Iil9ZS5leHBvcnRzPXtob3ZlclBvaW50czpmdW5jdGlvbih0LGUscixpKXt2YXIgYT1uKHQsZSxyLGkpO2lmKGEmJiExIT09YVswXS5pbmRleCl7dmFyIHM9YVswXTtpZih2b2lkIDA9PT1zLmluZGV4KXJldHVybiBhO3ZhciBsPXQuc3VicGxvdCxjPXMuY2Rbcy5pbmRleF0sdT1zLnRyYWNlO2lmKGwuaXNQdFdpdGhpblNlY3RvcihjKSlyZXR1cm4gcy54TGFiZWxWYWw9dm9pZCAwLHMueUxhYmVsVmFsPXZvaWQgMCxzLmV4dHJhVGV4dD1vKGMsdSxsKSxhfX0sbWFrZUhvdmVyUG9pbnRUZXh0Om99fSx7Ii4uLy4uL2xpYiI6Njg0LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzMyLCIuLi9zY2F0dGVyL2hvdmVyIjoxMDI1fV0sMTA3OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e21vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJzY2F0dGVycG9sYXIiLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL3BvbGFyIiksY2F0ZWdvcmllczpbInBvbGFyIiwic3ltYm9scyIsInNob3dMZWdlbmQiLCJzY2F0dGVyLWxpa2UiXSxhdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjb2xvcmJhcjp0KCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhciIpLGNhbGM6dCgiLi9jYWxjIikscGxvdDp0KCIuL3Bsb3QiKSxzdHlsZTp0KCIuLi9zY2F0dGVyL3N0eWxlIikuc3R5bGUsaG92ZXJQb2ludHM6dCgiLi9ob3ZlciIpLmhvdmVyUG9pbnRzLHNlbGVjdFBvaW50czp0KCIuLi9zY2F0dGVyL3NlbGVjdCIpLG1ldGE6e319fSx7Ii4uLy4uL3Bsb3RzL3BvbGFyIjo3OTgsIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIjoxMDMyLCIuLi9zY2F0dGVyL3NlbGVjdCI6MTAzNSwiLi4vc2NhdHRlci9zdHlsZSI6MTAzNiwiLi9hdHRyaWJ1dGVzIjoxMDc1LCIuL2NhbGMiOjEwNzYsIi4vZGVmYXVsdHMiOjEwNzcsIi4vaG92ZXIiOjEwNzgsIi4vcGxvdCI6MTA4MH1dLDEwODA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9wbG90IiksaT10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGEsbyxzLGw9e3hheGlzOmUueGF4aXMseWF4aXM6ZS55YXhpcyxwbG90OmUuZnJhbWV3b3JrLGxheWVyQ2xpcElkOmUuX2hhc0NsaXBPbkF4aXNGYWxzZT9lLmNsaXBJZHMuZm9yVHJhY2VzOm51bGx9LGM9ZS5yYWRpYWxBeGlzLHU9Yy5yYW5nZTtmb3Iocz11WzBdPnVbMV0/ZnVuY3Rpb24odCl7cmV0dXJuIHQ8PTB9OmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0wfSxhPTA7YTxyLmxlbmd0aDthKyspZm9yKG89MDtvPHJbYV0ubGVuZ3RoO28rKyl7dmFyIGg9clthXVtvXSxmPWgucjtpZihmIT09aSl7dmFyIHA9Yy5jMnIoZiktdVswXTtpZihzKHApKXt2YXIgZD1oLnJhZDtoLng9cCpNYXRoLmNvcyhkKSxoLnk9cCpNYXRoLnNpbihkKTtjb250aW51ZX1oLmludG9DZW50ZXI9W2UuY3h4LGUuY3l5XX1oLng9aSxoLnk9aX12YXIgZz1lLmxheWVycy5mcm9udHBsb3Quc2VsZWN0KCJnLnNjYXR0ZXJsYXllciIpO24odCxsLHIsZyl9fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjY2MSwiLi4vc2NhdHRlci9wbG90IjoxMDM0fV0sMTA4MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9zY2F0dGVycG9sYXIvYXR0cmlidXRlcyIpLGk9dCgiLi4vc2NhdHRlcmdsL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9e21vZGU6bi5tb2RlLHI6bi5yLHRoZXRhOm4udGhldGEsdGhldGF1bml0Om4udGhldGF1bml0LHRleHQ6bi50ZXh0LGxpbmU6aS5saW5lLGNvbm5lY3RnYXBzOmkuY29ubmVjdGdhcHMsbWFya2VyOmkubWFya2VyLGZpbGw6aS5maWxsLGZpbGxjb2xvcjppLmZpbGxjb2xvcixob3ZlcmluZm86bi5ob3ZlcmluZm8saG92ZXJvbjpuLmhvdmVyb24sc2VsZWN0ZWQ6bi5zZWxlY3RlZCx1bnNlbGVjdGVkOm4udW5zZWxlY3RlZH19LHsiLi4vc2NhdHRlcmdsL2F0dHJpYnV0ZXMiOjEwNjIsIi4uL3NjYXR0ZXJwb2xhci9hdHRyaWJ1dGVzIjoxMDc1fV0sMTA4MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uL3NjYXR0ZXIvc3VidHlwZXMiKSxhPXQoIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzIiksbz10KCIuLi9zY2F0dGVyL2xpbmVfZGVmYXVsdHMiKSxzPXQoIi4uL3NjYXR0ZXIvZmlsbGNvbG9yX2RlZmF1bHRzIiksbD10KCIuLi9zY2F0dGVyL2NvbnN0YW50cyIpLlBUU19MSU5FU09OTFksYz10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsdSl7ZnVuY3Rpb24gaChyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsYyxyLGkpfXZhciBmPWgoInIiKSxwPWgoInRoZXRhIiksZD1mJiZwP01hdGgubWluKGYubGVuZ3RoLHAubGVuZ3RoKTowO2lmKGQpe2UuX2xlbmd0aD1kLGgoInRoZXRhdW5pdCIpLGgoIm1vZGUiLGQ8bD8ibGluZXMrbWFya2VycyI6ImxpbmVzIiksaCgidGV4dCIpLGkuaGFzTGluZXMoZSkmJihvKHQsZSxyLHUsaCksaCgiY29ubmVjdGdhcHMiKSk7dmFyIGc9W107aS5oYXNNYXJrZXJzKGUpJiYoYSh0LGUscix1LGgpLGcucHVzaCgicG9pbnRzIikpLGgoImZpbGwiKSwibm9uZSIhPT1lLmZpbGwmJnModCxlLHIsaCksInRvbmV4dCIhPT1lLmZpbGwmJiJ0b3NlbGYiIT09ZS5maWxsfHxnLnB1c2goImZpbGxzIiksaCgiaG92ZXJvbiIsZy5qb2luKCIrIil8fCJwb2ludHMiKSxuLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHkoZSxoKX1lbHNlIGUudmlzaWJsZT0hMX19LHsiLi4vLi4vbGliIjo2ODQsIi4uL3NjYXR0ZXIvY29uc3RhbnRzIjoxMDIwLCIuLi9zY2F0dGVyL2ZpbGxjb2xvcl9kZWZhdWx0cyI6MTAyMywiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzIjoxMDI3LCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0cyI6MTAzMywiLi4vc2NhdHRlci9zdWJ0eXBlcyI6MTAzNywiLi9hdHRyaWJ1dGVzIjoxMDgxfV0sMTA4MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJwb2ludC1jbHVzdGVyIiksaT10KCJmYXN0LWlzbnVtZXJpYyIpLGE9dCgiLi4vc2NhdHRlcmdsIiksbz10KCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsYyIpLHM9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxsPXQoIi4uL3NjYXR0ZXJwb2xhci9ob3ZlciIpLm1ha2VIb3ZlclBvaW50VGV4dCxjPXQoIi4uL3NjYXR0ZXIvc3VidHlwZXMiKSx1PXQoIi4uL3NjYXR0ZXJnbC9jb25zdGFudHMiKS5UT09fTUFOWV9QT0lOVFM7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToic2NhdHRlcnBvbGFyZ2wiLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL3BvbGFyIiksY2F0ZWdvcmllczpbImdsIiwicmVnbCIsInBvbGFyIiwic3ltYm9scyIsInNob3dMZWdlbmQiLCJzY2F0dGVyLWxpa2UiXSxhdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjb2xvcmJhcjp0KCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhciIpLGNhbGM6ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9mdWxsTGF5b3V0LG49ZS5zdWJwbG90LGk9cltuXS5yYWRpYWxheGlzLGE9cltuXS5hbmd1bGFyYXhpcyxsPWkubWFrZUNhbGNkYXRhKGUsInIiKSxjPWEubWFrZUNhbGNkYXRhKGUsInRoZXRhIiksdT17fTtyZXR1cm4gZS5fbGVuZ3RoPGwubGVuZ3RoJiYobD1sLnNsaWNlKDAsZS5fbGVuZ3RoKSksZS5fbGVuZ3RoPGMubGVuZ3RoJiYoYz1jLnNsaWNlKDAsZS5fbGVuZ3RoKSksbyhlKSx1LnI9bCx1LnRoZXRhPWMscy5leHBhbmQoaSxsLHt0b3plcm86ITB9KSwibGluZWFyIiE9PWEudHlwZSYmKGEuYXV0b3JhbmdlPSEwLHMuZXhwYW5kKGEsYyksZGVsZXRlIGEuYXV0b3JhbmdlKSxbe3g6ITEseTohMSx0OnUsdHJhY2U6ZX1dfSxwbG90OmZ1bmN0aW9uKHQsZSxyKXt2YXIgbz1lLnJhZGlhbEF4aXMscz1lLmFuZ3VsYXJBeGlzLGw9by5yYW5nZSxoPWEuc2NlbmVVcGRhdGUodCxlKTtyZXR1cm4gaC5jbGVhcigpLHIuZm9yRWFjaChmdW5jdGlvbihmLHApe2lmKGYmJmZbMF0mJmZbMF0udHJhY2Upe3ZhciBkLGcsbSx2LHkseD1mWzBdLGI9eC50cmFjZSxfPXgudCx3PV8ucixrPV8udGhldGEsTT13LnNsaWNlKCksQT1rLnNsaWNlKCk7Zm9yKGQ9MDtkPHcubGVuZ3RoO2QrKylnPXdbZF0sdj1rW2RdLHk9cy5jMnJhZCh2LGIudGhldGF1bml0KSxlLmlzUHRXaXRoaW5TZWN0b3Ioe3I6ZyxyYWQ6eX0pfHwoTVtkXT1OYU4sQVtkXT1OYU4pO3ZhciBULFM9dy5sZW5ndGgsRT1uZXcgQXJyYXkoMipTKSxDPUFycmF5KFMpLEw9QXJyYXkoUyk7Zm9yKGQ9MDtkPFM7ZCsrKWc9TVtkXSx2PUFbZF0saShnKSYmaSh2KSYmZz49MD8obT1vLmMycihnKS1sWzBdLFQ9dix5PXMuYzJyYWQoVCxiLnRoZXRhdW5pdCksQ1tkXT1FWzIqZF09bSpNYXRoLmNvcyh5KSxMW2RdPUVbMipkKzFdPW0qTWF0aC5zaW4oeSkpOkNbZF09TFtkXT1FWzIqZF09RVsyKmQrMV09TmFOO3ZhciB6PWEuc2NlbmVPcHRpb25zKHQsZSxiLEUpO3ouZmlsbCYmIWguZmlsbDJkJiYoaC5maWxsMmQ9ITApLHoubWFya2VyJiYhaC5zY2F0dGVyMmQmJihoLnNjYXR0ZXIyZD0hMCksei5saW5lJiYhaC5saW5lMmQmJihoLmxpbmUyZD0hMCksIXouZXJyb3JYJiYhei5lcnJvcll8fGguZXJyb3IyZHx8KGguZXJyb3IyZD0hMCksXy50cmVlPW4oRSksei5tYXJrZXImJlM+PXUmJih6Lm1hcmtlci5jbHVzdGVyPV8udHJlZSksYy5oYXNNYXJrZXJzKGIpJiYoei5tYXJrZXJTZWwucG9zaXRpb25zPXoubWFya2VyVW5zZWwucG9zaXRpb25zPXoubWFya2VyLnBvc2l0aW9ucyksaC5saW5lT3B0aW9ucy5wdXNoKHoubGluZSksaC5lcnJvclhPcHRpb25zLnB1c2goei5lcnJvclgpLGguZXJyb3JZT3B0aW9ucy5wdXNoKHouZXJyb3JZKSxoLmZpbGxPcHRpb25zLnB1c2goei5maWxsKSxoLm1hcmtlck9wdGlvbnMucHVzaCh6Lm1hcmtlciksaC5tYXJrZXJTZWxlY3RlZE9wdGlvbnMucHVzaCh6Lm1hcmtlclNlbCksaC5tYXJrZXJVbnNlbGVjdGVkT3B0aW9ucy5wdXNoKHoubWFya2VyVW5zZWwpLGguY291bnQ9ci5sZW5ndGgsXy5fc2NlbmU9aCxfLmluZGV4PXAsXy54PUMsXy55PUwsXy5yYXd4PUMsXy5yYXd5PUwsXy5yPXcsXy50aGV0YT1rLF8ucG9zaXRpb25zPUUsXy5jb3VudD1TfX0pLGEucGxvdCh0LGUscil9LGhvdmVyUG9pbnRzOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXQuY2RbMF0udCxvPWkucixzPWkudGhldGEsYz1hLmhvdmVyUG9pbnRzKHQsZSxyLG4pO2lmKGMmJiExIT09Y1swXS5pbmRleCl7dmFyIHU9Y1swXTtpZih2b2lkIDA9PT11LmluZGV4KXJldHVybiBjO3ZhciBoPXQuc3VicGxvdCxmPWguYW5ndWxhckF4aXMscD11LmNkW3UuaW5kZXhdLGQ9dS50cmFjZTtpZihwLnI9b1t1LmluZGV4XSxwLnRoZXRhPXNbdS5pbmRleF0scC5yYWQ9Zi5jMnJhZChwLnRoZXRhLGQudGhldGF1bml0KSxoLmlzUHRXaXRoaW5TZWN0b3IocCkpcmV0dXJuIHUueExhYmVsVmFsPXZvaWQgMCx1LnlMYWJlbFZhbD12b2lkIDAsdS5leHRyYVRleHQ9bChwLGQsaCksY319LHN0eWxlOmEuc3R5bGUsc2VsZWN0UG9pbnRzOmEuc2VsZWN0UG9pbnRzLG1ldGE6e319fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3MzIsIi4uLy4uL3Bsb3RzL3BvbGFyIjo3OTgsIi4uL3NjYXR0ZXIvY29sb3JzY2FsZV9jYWxjIjoxMDE5LCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhciI6MTAzMiwiLi4vc2NhdHRlci9zdWJ0eXBlcyI6MTAzNywiLi4vc2NhdHRlcmdsIjoxMDY2LCIuLi9zY2F0dGVyZ2wvY29uc3RhbnRzIjoxMDYzLCIuLi9zY2F0dGVycG9sYXIvaG92ZXIiOjEwNzgsIi4vYXR0cmlidXRlcyI6MTA4MSwiLi9kZWZhdWx0cyI6MTA4MiwiZmFzdC1pc251bWVyaWMiOjIxNCwicG9pbnQtY2x1c3RlciI6NDM2fV0sMTA4NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZy9hdHRyaWJ1dGVzIikuZGFzaCxsPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGM9bi5tYXJrZXIsdT1uLmxpbmUsaD1jLmxpbmU7ZS5leHBvcnRzPXthOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGI6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sYzp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxzdW06e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowLG1pbjowLGVkaXRUeXBlOiJjYWxjIn0sbW9kZTpsKHt9LG4ubW9kZSx7ZGZsdDoibWFya2VycyJ9KSx0ZXh0Omwoe30sbi50ZXh0LHt9KSxob3ZlcnRleHQ6bCh7fSxuLmhvdmVydGV4dCx7fSksbGluZTp7Y29sb3I6dS5jb2xvcix3aWR0aDp1LndpZHRoLGRhc2g6cyxzaGFwZTpsKHt9LHUuc2hhcGUse3ZhbHVlczpbImxpbmVhciIsInNwbGluZSJdfSksc21vb3RoaW5nOnUuc21vb3RoaW5nLGVkaXRUeXBlOiJjYWxjIn0sY29ubmVjdGdhcHM6bi5jb25uZWN0Z2FwcyxjbGlwb25heGlzOm4uY2xpcG9uYXhpcyxmaWxsOmwoe30sbi5maWxsLHt2YWx1ZXM6WyJub25lIiwidG9zZWxmIiwidG9uZXh0Il19KSxmaWxsY29sb3I6bi5maWxsY29sb3IsbWFya2VyOmwoe3N5bWJvbDpjLnN5bWJvbCxvcGFjaXR5OmMub3BhY2l0eSxtYXhkaXNwbGF5ZWQ6Yy5tYXhkaXNwbGF5ZWQsc2l6ZTpjLnNpemUsc2l6ZXJlZjpjLnNpemVyZWYsc2l6ZW1pbjpjLnNpemVtaW4sc2l6ZW1vZGU6Yy5zaXplbW9kZSxsaW5lOmwoe3dpZHRoOmgud2lkdGgsZWRpdFR5cGU6ImNhbGMifSxhKCJtYXJrZXIubGluZSIpKSxncmFkaWVudDpjLmdyYWRpZW50LGVkaXRUeXBlOiJjYWxjIn0sYSgibWFya2VyIikse2NvbG9yYmFyOm99KSx0ZXh0Zm9udDpuLnRleHRmb250LHRleHRwb3NpdGlvbjpuLnRleHRwb3NpdGlvbixzZWxlY3RlZDpuLnNlbGVjdGVkLHVuc2VsZWN0ZWQ6bi51bnNlbGVjdGVkLGhvdmVyaW5mbzpsKHt9LGkuaG92ZXJpbmZvLHtmbGFnczpbImEiLCJiIiwiYyIsInRleHQiLCJuYW1lIl19KSxob3Zlcm9uOm4uaG92ZXJvbn19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzIjo1NTksIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo1NjUsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZy9hdHRyaWJ1dGVzIjo1ODIsIi4uLy4uL2xpYi9leHRlbmQiOjY3MywiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6NzI5LCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiOjEwMTV9XSwxMDg1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsYyIpLGE9dCgiLi4vc2NhdHRlci9hcnJheXNfdG9fY2FsY2RhdGEiKSxvPXQoIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb24iKSxzPXQoIi4uL3NjYXR0ZXIvY2FsYyIpLmNhbGNNYXJrZXJTaXplLGw9WyJhIiwiYiIsImMiXSxjPXthOlsiYiIsImMiXSxiOlsiYSIsImMiXSxjOlsiYSIsImIiXX07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsdSxoLGYscCxkLGc9dC5fZnVsbExheW91dFtlLnN1YnBsb3RdLnN1bSxtPWUuc3VtfHxnLHY9e2E6ZS5hLGI6ZS5iLGM6ZS5jfTtmb3Iocj0wO3I8bC5sZW5ndGg7cisrKWlmKCF2W2g9bFtyXV0pe2ZvcihwPXZbY1toXVswXV0sZD12W2NbaF1bMV1dLGY9bmV3IEFycmF5KHAubGVuZ3RoKSx1PTA7dTxwLmxlbmd0aDt1KyspZlt1XT1tLXBbdV0tZFt1XTt2W2hdPWZ9dmFyIHkseCxiLF8sdyxrLE09ZS5fbGVuZ3RoLEE9bmV3IEFycmF5KE0pO2ZvcihyPTA7cjxNO3IrKyl5PXYuYVtyXSx4PXYuYltyXSxiPXYuY1tyXSxuKHkpJiZuKHgpJiZuKGIpPygxIT09KF89Zy8oKHk9K3kpKyh4PSt4KSsoYj0rYikpKSYmKHkqPV8seCo9XyxiKj1fKSxrPXksdz1iLXgsQVtyXT17eDp3LHk6ayxhOnksYjp4LGM6Yn0pOkFbcl09e3g6ITEseTohMX07cmV0dXJuIHMoZSxNKSxpKGUpLGEoQSxlKSxvKEEsZSksQX19LHsiLi4vc2NhdHRlci9hcnJheXNfdG9fY2FsY2RhdGEiOjEwMTQsIi4uL3NjYXR0ZXIvY2FsYyI6MTAxNiwiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvbiI6MTAxNywiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGMiOjEwMTksImZhc3QtaXNudW1lcmljIjoyMTR9XSwxMDg2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vc2NhdHRlci9jb25zdGFudHMiKSxhPXQoIi4uL3NjYXR0ZXIvc3VidHlwZXMiKSxvPXQoIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzIikscz10KCIuLi9zY2F0dGVyL2xpbmVfZGVmYXVsdHMiKSxsPXQoIi4uL3NjYXR0ZXIvbGluZV9zaGFwZV9kZWZhdWx0cyIpLGM9dCgiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzIiksdT10KCIuLi9zY2F0dGVyL2ZpbGxjb2xvcl9kZWZhdWx0cyIpLGg9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGYpe2Z1bmN0aW9uIHAocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGgscixpKX12YXIgZCxnPXAoImEiKSxtPXAoImIiKSx2PXAoImMiKTtpZihnPyhkPWcubGVuZ3RoLG0/KGQ9TWF0aC5taW4oZCxtLmxlbmd0aCksdiYmKGQ9TWF0aC5taW4oZCx2Lmxlbmd0aCkpKTpkPXY/TWF0aC5taW4oZCx2Lmxlbmd0aCk6MCk6bSYmdiYmKGQ9TWF0aC5taW4obS5sZW5ndGgsdi5sZW5ndGgpKSxkKXtlLl9sZW5ndGg9ZCxwKCJzdW0iKSxwKCJ0ZXh0IikscCgiaG92ZXJ0ZXh0IikscCgibW9kZSIsZDxpLlBUU19MSU5FU09OTFk/ImxpbmVzK21hcmtlcnMiOiJsaW5lcyIpLGEuaGFzTGluZXMoZSkmJihzKHQsZSxyLGYscCksbCh0LGUscCkscCgiY29ubmVjdGdhcHMiKSksYS5oYXNNYXJrZXJzKGUpJiZvKHQsZSxyLGYscCx7Z3JhZGllbnQ6ITB9KSxhLmhhc1RleHQoZSkmJmModCxlLGYscCk7dmFyIHk9W107KGEuaGFzTWFya2VycyhlKXx8YS5oYXNUZXh0KGUpKSYmKHAoImNsaXBvbmF4aXMiKSxwKCJtYXJrZXIubWF4ZGlzcGxheWVkIikseS5wdXNoKCJwb2ludHMiKSkscCgiZmlsbCIpLCJub25lIiE9PWUuZmlsbCYmKHUodCxlLHIscCksYS5oYXNMaW5lcyhlKXx8bCh0LGUscCkpLCJ0b25leHQiIT09ZS5maWxsJiYidG9zZWxmIiE9PWUuZmlsbHx8eS5wdXNoKCJmaWxscyIpLHAoImhvdmVyb24iLHkuam9pbigiKyIpfHwicG9pbnRzIiksbi5jb2VyY2VTZWxlY3Rpb25NYXJrZXJPcGFjaXR5KGUscCl9ZWxzZSBlLnZpc2libGU9ITF9fSx7Ii4uLy4uL2xpYiI6Njg0LCIuLi9zY2F0dGVyL2NvbnN0YW50cyI6MTAyMCwiLi4vc2NhdHRlci9maWxsY29sb3JfZGVmYXVsdHMiOjEwMjMsIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0cyI6MTAyNywiLi4vc2NhdHRlci9saW5lX3NoYXBlX2RlZmF1bHRzIjoxMDI5LCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0cyI6MTAzMywiLi4vc2NhdHRlci9zdWJ0eXBlcyI6MTAzNywiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzIjoxMDM4LCIuL2F0dHJpYnV0ZXMiOjEwODR9XSwxMDg3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuLGkpe2lmKGUueGEmJih0LnhheGlzPWUueGEpLGUueWEmJih0LnlheGlzPWUueWEpLG5baV0pe3ZhciBhPW5baV07dC5hPWEuYSx0LmI9YS5iLHQuYz1hLmN9ZWxzZSB0LmE9ZS5hLHQuYj1lLmIsdC5jPWUuYztyZXR1cm4gdH19LHt9XSwxMDg4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXIvaG92ZXIiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvPW4odCxlLHIsYSk7aWYobyYmITEhPT1vWzBdLmluZGV4KXt2YXIgcz1vWzBdO2lmKHZvaWQgMD09PXMuaW5kZXgpe3ZhciBsPTEtcy55MC90LnlhLl9sZW5ndGgsYz10LnhhLl9sZW5ndGgsdT1jKmwvMixoPWMtdTtyZXR1cm4gcy54MD1NYXRoLm1heChNYXRoLm1pbihzLngwLGgpLHUpLHMueDE9TWF0aC5tYXgoTWF0aC5taW4ocy54MSxoKSx1KSxvfXZhciBmPXMuY2Rbcy5pbmRleF07cy5hPWYuYSxzLmI9Zi5iLHMuYz1mLmMscy54TGFiZWxWYWw9dm9pZCAwLHMueUxhYmVsVmFsPXZvaWQgMDt2YXIgcD1zLnRyYWNlLGQ9cy5zdWJwbG90LGc9KGYuaGl8fHAuaG92ZXJpbmZvKS5zcGxpdCgiKyIpLG09W107cmV0dXJuLTEhPT1nLmluZGV4T2YoImFsbCIpJiYoZz1bImEiLCJiIiwiYyJdKSwtMSE9PWcuaW5kZXhPZigiYSIpJiZ2KGQuYWF4aXMsZi5hKSwtMSE9PWcuaW5kZXhPZigiYiIpJiZ2KGQuYmF4aXMsZi5iKSwtMSE9PWcuaW5kZXhPZigiYyIpJiZ2KGQuY2F4aXMsZi5jKSxzLmV4dHJhVGV4dD1tLmpvaW4oIjxicj4iKSxvfWZ1bmN0aW9uIHYodCxlKXttLnB1c2godC5faG92ZXJ0aXRsZSsiOiAiK2kudGlja1RleHQodCxlLCJob3ZlciIpLnRleHQpfX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjczMiwiLi4vc2NhdHRlci9ob3ZlciI6MTAyNX1dLDEwODk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoIi4vYXR0cmlidXRlcyIpLG4uc3VwcGx5RGVmYXVsdHM9dCgiLi9kZWZhdWx0cyIpLG4uY29sb3JiYXI9dCgiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiKSxuLmNhbGM9dCgiLi9jYWxjIiksbi5wbG90PXQoIi4vcGxvdCIpLG4uc3R5bGU9dCgiLi4vc2NhdHRlci9zdHlsZSIpLnN0eWxlLG4uc3R5bGVPblNlbGVjdD10KCIuLi9zY2F0dGVyL3N0eWxlIikuc3R5bGVPblNlbGVjdCxuLmhvdmVyUG9pbnRzPXQoIi4vaG92ZXIiKSxuLnNlbGVjdFBvaW50cz10KCIuLi9zY2F0dGVyL3NlbGVjdCIpLG4uZXZlbnREYXRhPXQoIi4vZXZlbnRfZGF0YSIpLG4ubW9kdWxlVHlwZT0idHJhY2UiLG4ubmFtZT0ic2NhdHRlcnRlcm5hcnkiLG4uYmFzZVBsb3RNb2R1bGU9dCgiLi4vLi4vcGxvdHMvdGVybmFyeSIpLG4uY2F0ZWdvcmllcz1bInRlcm5hcnkiLCJzeW1ib2xzIiwic2hvd0xlZ2VuZCIsInNjYXR0ZXItbGlrZSJdLG4ubWV0YT17fSxlLmV4cG9ydHM9bn0seyIuLi8uLi9wbG90cy90ZXJuYXJ5Ijo4MTAsIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIjoxMDMyLCIuLi9zY2F0dGVyL3NlbGVjdCI6MTAzNSwiLi4vc2NhdHRlci9zdHlsZSI6MTAzNiwiLi9hdHRyaWJ1dGVzIjoxMDg0LCIuL2NhbGMiOjEwODUsIi4vZGVmYXVsdHMiOjEwODYsIi4vZXZlbnRfZGF0YSI6MTA4NywiLi9ob3ZlciI6MTA4OCwiLi9wbG90IjoxMDkwfV0sMTA5MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9zY2F0dGVyL3Bsb3QiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPWUucGxvdENvbnRhaW5lcjtpLnNlbGVjdCgiLnNjYXR0ZXJsYXllciIpLnNlbGVjdEFsbCgiKiIpLnJlbW92ZSgpO3ZhciBhPXt4YXhpczplLnhheGlzLHlheGlzOmUueWF4aXMscGxvdDppLGxheWVyQ2xpcElkOmUuX2hhc0NsaXBPbkF4aXNGYWxzZT9lLmNsaXBJZFJlbGF0aXZlOm51bGx9LG89ZS5sYXllcnMuZnJvbnRwbG90LnNlbGVjdCgiZy5zY2F0dGVybGF5ZXIiKTtuKHQsYSxyLG8pfX0seyIuLi9zY2F0dGVyL3Bsb3QiOjEwMzR9XSwxMDkxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXJnbC9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RhbnRzIikuaWRSZWdleCxhPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKS50ZW1wbGF0ZWRBcnJheTtmdW5jdGlvbiBvKHQpe3JldHVybnt2YWxUeXBlOiJpbmZvX2FycmF5IixmcmVlTGVuZ3RoOiEwLGVkaXRUeXBlOiJjYWxjIixpdGVtczp7dmFsVHlwZToic3VicGxvdGlkIixyZWdleDppW3RdLGVkaXRUeXBlOiJwbG90In19fWUuZXhwb3J0cz17ZGltZW5zaW9uczphKCJkaW1lbnNpb24iLHt2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn0sbGFiZWw6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImNhbGMifSx2YWx1ZXM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0sZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSksdGV4dDpuLnRleHQsbWFya2VyOm4ubWFya2VyLHhheGVzOm8oIngiKSx5YXhlczpvKCJ5IiksZGlhZ29uYWw6e3Zpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9LHNob3d1cHBlcmhhbGY6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMifSxzaG93bG93ZXJoYWxmOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn0sc2VsZWN0ZWQ6e21hcmtlcjpuLnNlbGVjdGVkLm1hcmtlcixlZGl0VHlwZToiY2FsYyJ9LHVuc2VsZWN0ZWQ6e21hcmtlcjpuLnVuc2VsZWN0ZWQubWFya2VyLGVkaXRUeXBlOiJjYWxjIn0sb3BhY2l0eTpuLm9wYWNpdHl9fSx7Ii4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjcyMiwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0YW50cyI6NzM3LCIuLi9zY2F0dGVyZ2wvYXR0cmlidXRlcyI6MTA2Mn1dLDEwOTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgicmVnbC1saW5lMmQiKSxpPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYT10KCIuLi8uLi9saWIiKSxvPXQoIi4uLy4uL2xpYi9wcmVwYXJlX3JlZ2wiKSxzPXQoIi4uLy4uL3Bsb3RzL2dldF9kYXRhIikuZ2V0TW9kdWxlQ2FsY0RhdGEsbD10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxjPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyIpLHU9InNwbG9tIjtmdW5jdGlvbiBoKHQsZSxyKXtmb3IodmFyIG49ZS5kaW1lbnNpb25zLGk9ci5tYXRyaXhPcHRpb25zLmRhdGEubGVuZ3RoLGE9bmV3IEFycmF5KGkpLG89MCxzPTA7bzxuLmxlbmd0aDtvKyspaWYobltvXS52aXNpYmxlKXt2YXIgbD1hW3NdPW5ldyBBcnJheSg0KSx1PWMuZ2V0RnJvbUlkKHQsZS5fZGlhZ1tvXVswXSk7dSYmKGxbMF09dS5yMmwodS5yYW5nZVswXSksbFsyXT11LnIybCh1LnJhbmdlWzFdKSk7dmFyIGg9Yy5nZXRGcm9tSWQodCxlLl9kaWFnW29dWzFdKTtoJiYobFsxXT1oLnIybChoLnJhbmdlWzBdKSxsWzNdPWgucjJsKGgucmFuZ2VbMV0pKSxzKyt9ci5zZWxlY3RCYXRjaD8oci5tYXRyaXgudXBkYXRlKHtyYW5nZXM6YX0se3JhbmdlczphfSksci5tYXRyaXguZHJhdyhyLnVuc2VsZWN0QmF0Y2gsci5zZWxlY3RCYXRjaCkpOihyLm1hdHJpeC51cGRhdGUoe3JhbmdlczphfSksci5tYXRyaXguZHJhdygpKX1mdW5jdGlvbiBmKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj1lLl9nbGNhbnZhcy5kYXRhKClbMF0ucmVnbCxpPWUuX3NwbG9tR3JpZDtpfHwoaT1lLl9zcGxvbUdyaWQ9bihyKSksaS51cGRhdGUoZnVuY3Rpb24odCl7dmFyIGUscj10Ll9mdWxsTGF5b3V0LG49ci5fc2l6ZSxpPVswLDAsci53aWR0aCxyLmhlaWdodF0sYT17fTtmdW5jdGlvbiBvKHQsZSxyLG4sbyxzKXt2YXIgbD1lW3QrImNvbG9yIl0sYz1lW3QrIndpZHRoIl0sdT1TdHJpbmcobCtjKTt1IGluIGE/YVt1XS5kYXRhLnB1c2goTmFOLE5hTixyLG4sbyxzKTphW3VdPXtkYXRhOltyLG4sbyxzXSxqb2luOiJyZWN0Iix0aGlja25lc3M6Yyxjb2xvcjpsLHZpZXdwb3J0OmkscmFuZ2U6aSxvdmVybGF5OiExfX1mb3IoZSBpbiByLl9zcGxvbVN1YnBsb3RzKXt2YXIgcyxsLGM9ci5fcGxvdHNbZV0sdT1jLnhheGlzLGg9Yy55YXhpcyxmPXUuX3ZhbHMsZD1oLl92YWxzLGc9bi5iK2guZG9tYWluWzBdKm4uaCxtPS1oLl9tLHY9LW0qaC5yMmwoaC5yYW5nZVswXSxoLmNhbGVuZGFyKTtpZih1LnNob3dncmlkKWZvcihlPTA7ZTxmLmxlbmd0aDtlKyspcz11Ll9vZmZzZXQrdS5sMnAoZltlXS54KSxvKCJncmlkIix1LHMsZyxzLGcraC5fbGVuZ3RoKTtpZihwKHUpJiYocz11Ll9vZmZzZXQrdS5sMnAoMCksbygiemVyb2xpbmUiLHUscyxnLHMsZytoLl9sZW5ndGgpKSxoLnNob3dncmlkKWZvcihlPTA7ZTxkLmxlbmd0aDtlKyspbD1nK3YrbSpkW2VdLngsbygiZ3JpZCIsaCx1Ll9vZmZzZXQsbCx1Ll9vZmZzZXQrdS5fbGVuZ3RoLGwpO3AoaCkmJihsPWcrdiswLG8oInplcm9saW5lIixoLHUuX29mZnNldCxsLHUuX29mZnNldCt1Ll9sZW5ndGgsbCkpfXZhciB5PVtdO2ZvcihlIGluIGEpeS5wdXNoKGFbZV0pO3JldHVybiB5fSh0KSksaS5kcmF3KCl9ZnVuY3Rpb24gcCh0KXt2YXIgZT1hLnNpbXBsZU1hcCh0LnJhbmdlLHQucjJsKSxyPXQubDJwKDApO3JldHVybiB0Lnplcm9saW5lJiZ0Ll92YWxzJiZ0Ll92YWxzLmxlbmd0aCYmZVswXSplWzFdPD0wJiYoImxpbmVhciI9PT10LnR5cGV8fCItIj09PXQudHlwZSkmJihyPjEmJnI8dC5fbGVuZ3RoLTF8fCF0LnNob3dsaW5lKX1lLmV4cG9ydHM9e25hbWU6dSxhdHRyOmwuYXR0cixhdHRyUmVnZXg6bC5hdHRyUmVnZXgsbGF5b3V0QXR0cmlidXRlczpsLmxheW91dEF0dHJpYnV0ZXMsc3VwcGx5TGF5b3V0RGVmYXVsdHM6bC5zdXBwbHlMYXlvdXREZWZhdWx0cyxkcmF3RnJhbWV3b3JrOmwuZHJhd0ZyYW1ld29yayxwbG90OmZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj1pLmdldE1vZHVsZSh1KSxuPXModC5jYWxjZGF0YSxyKVswXTtvKHQsWyJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIiwiT0VTX2VsZW1lbnRfaW5kZXhfdWludCJdKSYmKGUuX2hhc09ubHlMYXJnZVNwbG9tcyYmZih0KSxyLnBsb3QodCx7fSxuKSl9LGRyYWc6ZnVuY3Rpb24odCl7dmFyIGU9dC5jYWxjZGF0YTt0Ll9mdWxsTGF5b3V0Ll9oYXNPbmx5TGFyZ2VTcGxvbXMmJmYodCk7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl1bMF0saT1uLnRyYWNlLGE9bi50Ll9zY2VuZTsic3Bsb20iPT09aS50eXBlJiZhJiZhLm1hdHJpeCYmaCh0LGksYSl9fSxjbGVhbjpmdW5jdGlvbih0LGUscixuLGkpe3ZhciBhLG8scyxjPW4uX21vZHVsZXN8fFtdLHU9ZS5fbW9kdWxlc3x8W107Zm9yKHM9MDtzPGMubGVuZ3RoO3MrKylpZigic3Bsb20iPT09Y1tzXS5uYW1lKXthPSEwO2JyZWFrfWZvcihzPTA7czx1Lmxlbmd0aDtzKyspaWYoInNwbG9tIj09PXVbc10ubmFtZSl7bz0hMDticmVha31pZihhJiYhbylmb3Iocz0wO3M8aS5sZW5ndGg7cysrKXt2YXIgaD1pW3NdWzBdLGY9aC50cmFjZSxwPWgudC5fc2NlbmU7InNwbG9tIj09PWYudHlwZSYmcCYmcC5tYXRyaXgmJnAubWF0cml4LmRlc3Ryb3kmJihwLm1hdHJpeC5kZXN0cm95KCksaC50Ll9zY2VuZT1udWxsKX1uLl9zcGxvbUdyaWQmJiFlLl9oYXNPbmx5TGFyZ2VTcGxvbXMmJm4uX2hhc09ubHlMYXJnZVNwbG9tcyYmKG4uX3NwbG9tR3JpZC5kZXN0cm95KCksbi5fc3Bsb21HcmlkPW51bGwpLGwuY2xlYW4odCxlLHIsbil9LHVwZGF0ZUZ4OmwudXBkYXRlRngsdG9TVkc6bC50b1NWR319LHsiLi4vLi4vbGliIjo2ODQsIi4uLy4uL2xpYi9wcmVwYXJlX3JlZ2wiOjY5NywiLi4vLi4vcGxvdHMvY2FydGVzaWFuIjo3NDMsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyI6NzM1LCIuLi8uLi9wbG90cy9nZXRfZGF0YSI6NzY4LCIuLi8uLi9yZWdpc3RyeSI6ODE3LCJyZWdsLWxpbmUyZCI6NDU4fV0sMTA5MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyIpLGE9dCgiLi9hdHRyaWJ1dGVzIiksbz10KCIuLi9zY2F0dGVyL3N1YnR5cGVzIikscz10KCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0cyIpLGw9dCgiLi4vcGFyY29vcmRzL21lcmdlX2xlbmd0aCIpLGM9Ly1vcGVuLztmdW5jdGlvbiB1KHQsZSl7ZnVuY3Rpb24gcihyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsYS5kaW1lbnNpb25zLHIsaSl9cigibGFiZWwiKTt2YXIgaT1yKCJ2YWx1ZXMiKTtpJiZpLmxlbmd0aD9yKCJ2aXNpYmxlIik6ZS52aXNpYmxlPSExfWZ1bmN0aW9uIGgodCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KGUpLG49MDtuPGU7bisrKXJbbl09dCsobj9uKzE6IiIpO3JldHVybiByfWZ1bmN0aW9uIGYodCxlLHIpe2lmKGUpe3ZhciBuPWUuY2hhckF0KDApLGk9dC5fc3Bsb21BeGVzW25dO2UgaW4gaXx8KGlbZV09KHJ8fHt9KS5sYWJlbHx8IiIpfX1mdW5jdGlvbiBwKHQpe2Zvcih2YXIgZT17fSxyPTA7cjx0Lmxlbmd0aDtyKyspZVt0W3JdXT0xO3JldHVybiBlfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixkKXtmdW5jdGlvbiBnKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxhLHIsaSl9dmFyIG09aSh0LGUse25hbWU6ImRpbWVuc2lvbnMiLGhhbmRsZUl0ZW1EZWZhdWx0czp1fSksdj1nKCJkaWFnb25hbC52aXNpYmxlIikseT1nKCJzaG93dXBwZXJoYWxmIikseD1nKCJzaG93bG93ZXJoYWxmIik7aWYobChlLG0sInZhbHVlcyIpJiYodnx8eXx8eCkpe2coInRleHQiKSxzKHQsZSxyLGQsZyk7dmFyIGI9Yy50ZXN0KGUubWFya2VyLnN5bWJvbCksXz1vLmlzQnViYmxlKGUpO2coIm1hcmtlci5saW5lLndpZHRoIixifHxfPzE6MCksZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYSxvPWUuZGltZW5zaW9ucyxzPW8ubGVuZ3RoLGw9ZS5zaG93dXBwZXJoYWxmLGM9ZS5zaG93bG93ZXJoYWxmLHU9ZS5kaWFnb25hbC52aXNpYmxlLGQ9dXx8bCYmYz9zOnMtMSxnPW4oInhheGVzIixoKCJ4IixkKSksbT1uKCJ5YXhlcyIsaCgieSIsZCkpO2UuX3hheGVzPXAoZyksZS5feWF4ZXM9cChtKTt2YXIgdj1NYXRoLm1pbihkLGcubGVuZ3RoLG0ubGVuZ3RoKTtmb3IoaT0wO2k8djtpKyspZm9yKGE9MDthPHY7YSsrKXt2YXIgeT1bZ1tpXSttW2FdXTtpPmEmJmw/ci5fc3Bsb21TdWJwbG90c1t5XT0xOmk8YSYmYz9yLl9zcGxvbVN1YnBsb3RzW3ldPTE6aSE9PWF8fCF1JiZjJiZsfHwoci5fc3Bsb21TdWJwbG90c1t5XT0xKX12YXIgeD1lLl9kaWFnPW5ldyBBcnJheShzKSxiPXV8fGM/MDotMSxfPXV8fGw/MDotMTtmb3IoaT0wO2k8cztpKyspe3ZhciB3PW9baV0saz1nW2krYl0sTT1tW2krX107ZihyLGssdyksZihyLE0sdykseFtpXT1bayxNXX1jfHwoci5fc3Bsb21HcmlkRGZsdC54c2lkZT0iYm90dG9tIixyLl9zcGxvbUdyaWREZmx0LnlzaWRlPSJsZWZ0Iil9KDAsZSxkLGcpLG4uY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eShlLGcpfWVsc2UgZS52aXNpYmxlPSExfX0seyIuLi8uLi9saWIiOjY4NCwiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIjo3MjgsIi4uL3BhcmNvb3Jkcy9tZXJnZV9sZW5ndGgiOjk4NywiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiOjEwMzMsIi4uL3NjYXR0ZXIvc3VidHlwZXMiOjEwMzcsIi4vYXR0cmlidXRlcyI6MTA5MX1dLDEwOTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgicmVnbC1zcGxvbSIpLGk9dCgiYXJyYXktcmFuZ2UiKSxhPXQoIi4uLy4uL3JlZ2lzdHJ5Iiksbz10KCIuLi8uLi9jb21wb25lbnRzL2dyaWQiKSxzPXQoIi4uLy4uL2xpYiIpLGw9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIiksYz10KCIuLi9zY2F0dGVyL3N1YnR5cGVzIiksdT10KCIuLi9zY2F0dGVyL2NhbGMiKS5jYWxjTWFya2VyU2l6ZSxoPXQoIi4uL3NjYXR0ZXIvY2FsYyIpLmNhbGNBeGlzRXhwYW5zaW9uLGY9dCgiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGMiKSxwPXQoIi4uL3NjYXR0ZXJnbC9jb252ZXJ0IikubWFya2VyU2VsZWN0aW9uLGQ9dCgiLi4vc2NhdHRlcmdsL2NvbnZlcnQiKS5tYXJrZXJTdHlsZSxnPXQoIi4uL3NjYXR0ZXJnbCIpLmNhbGNIb3ZlcixtPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU0sdj10KCIuLi9zY2F0dGVyZ2wvY29uc3RhbnRzIikuVE9PX01BTllfUE9JTlRTO2Z1bmN0aW9uIHkodCxlLHIpe2Zvcih2YXIgbj10Lm1ha2VDYWxjZGF0YSh7djpyLnZhbHVlcyx2Y2FsZW5kYXI6ZS5jYWxlbmRhcn0sInYiKSxpPTA7aTxuLmxlbmd0aDtpKyspbltpXT1uW2ldPT09bT9OYU46bltpXTtyZXR1cm4gbn1mdW5jdGlvbiB4KHQsZSl7dmFyIHIsaSxhLG8scyxjPXQuX2Z1bGxMYXlvdXQsdT1jLl9zaXplLGg9ZS50cmFjZSxmPWUudCxwPWYuX3NjZW5lLGQ9cC5tYXRyaXhPcHRpb25zLGc9ZC5jZGF0YSxtPWMuX2dsY2FudmFzLmRhdGEoKVswXS5yZWdsLHY9Yy5kcmFnbW9kZTtpZigwIT09Zy5sZW5ndGgpe2QubG93ZXI9aC5zaG93dXBwZXJoYWxmLGQudXBwZXI9aC5zaG93bG93ZXJoYWxmLGQuZGlhZ29uYWw9aC5kaWFnb25hbC52aXNpYmxlO3ZhciB5PWguZGltZW5zaW9ucyx4PWcubGVuZ3RoLGI9e307Zm9yKGIucmFuZ2VzPW5ldyBBcnJheSh4KSxiLmRvbWFpbnM9bmV3IEFycmF5KHgpLGE9MCxzPTA7YTx5Lmxlbmd0aDthKyspaWYoaC5kaW1lbnNpb25zW2FdLnZpc2libGUpe3ZhciBfPWIucmFuZ2VzW3NdPW5ldyBBcnJheSg0KSx3PWIuZG9tYWluc1tzXT1uZXcgQXJyYXkoNCk7KHI9bC5nZXRGcm9tSWQodCxoLl9kaWFnW2FdWzBdKSkmJihfWzBdPXIuX3JsWzBdLF9bMl09ci5fcmxbMV0sd1swXT1yLmRvbWFpblswXSx3WzJdPXIuZG9tYWluWzFdKSwoaT1sLmdldEZyb21JZCh0LGguX2RpYWdbYV1bMV0pKSYmKF9bMV09aS5fcmxbMF0sX1szXT1pLl9ybFsxXSx3WzFdPWkuZG9tYWluWzBdLHdbM109aS5kb21haW5bMV0pLHMrK31iLnZpZXdwb3J0PVt1LmwsdS5iLHUudyt1LmwsdS5oK3UuYl0sITA9PT1wLm1hdHJpeCYmKHAubWF0cml4PW4obSkpO3ZhciBrPSJsYXNzbyI9PT12fHwic2VsZWN0Ij09PXZ8fCEhaC5zZWxlY3RlZHBvaW50cztpZihwLnNlbGVjdEJhdGNoPW51bGwscC51bnNlbGVjdEJhdGNoPW51bGwsayl7dmFyIE09aC5fbGVuZ3RoO2lmKHAuc2VsZWN0QmF0Y2h8fChwLnNlbGVjdEJhdGNoPVtdLHAudW5zZWxlY3RCYXRjaD1bXSksaC5zZWxlY3RlZHBvaW50cyl7cC5zZWxlY3RCYXRjaD1oLnNlbGVjdGVkcG9pbnRzO3ZhciBBPWguc2VsZWN0ZWRwb2ludHMsVD17fTtmb3IoYT0wO2E8QS5sZW5ndGg7YSsrKVRbQVthXV09ITA7dmFyIFM9W107Zm9yKGE9MDthPE07YSsrKVRbYV18fFMucHVzaChhKTtwLnVuc2VsZWN0QmF0Y2g9U312YXIgRT1mLnhweD1uZXcgQXJyYXkoeCksQz1mLnlweD1uZXcgQXJyYXkoeCk7Zm9yKGE9MCxzPTA7YTx5Lmxlbmd0aDthKyspaWYoaC5kaW1lbnNpb25zW2FdLnZpc2libGUpe2lmKHI9bC5nZXRGcm9tSWQodCxoLl9kaWFnW2FdWzBdKSlmb3IoRVtzXT1uZXcgQXJyYXkoTSksbz0wO288TTtvKyspRVtzXVtvXT1yLmMycChnW3NdW29dKTtpZihpPWwuZ2V0RnJvbUlkKHQsaC5fZGlhZ1thXVsxXSkpZm9yKENbc109bmV3IEFycmF5KE0pLG89MDtvPE07bysrKUNbc11bb109aS5jMnAoZ1tzXVtvXSk7cysrfXAuc2VsZWN0QmF0Y2g/KHAubWF0cml4LnVwZGF0ZShkLGQpLHAubWF0cml4LnVwZGF0ZShwLnVuc2VsZWN0ZWRPcHRpb25zLHAuc2VsZWN0ZWRPcHRpb25zKSxwLm1hdHJpeC51cGRhdGUoYixiKSk6cC5tYXRyaXgudXBkYXRlKGIsbnVsbCl9ZWxzZSBwLm1hdHJpeC51cGRhdGUoZCkscC5tYXRyaXgudXBkYXRlKGIpLGYueHB4PWYueXB4PW51bGw7cC5kcmF3KCl9fWZ1bmN0aW9uIGIodCxlKXtmb3IodmFyIHI9ZS5faWQsbj17eDowLHk6MX1bci5jaGFyQXQoMCldLGk9dC5kaW1lbnNpb25zLGE9MCxvPTA7YTxpLmxlbmd0aDthKyspaWYoaVthXS52aXNpYmxlKXtpZih0Ll9kaWFnW2FdW25dPT09cilyZXR1cm4gbztvKyt9cmV0dXJuITF9ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToic3Bsb20iLGJhc2VQbG90TW9kdWxlOnQoIi4vYmFzZV9wbG90IiksY2F0ZWdvcmllczpbImdsIiwicmVnbCIsImNhcnRlc2lhbiIsInN5bWJvbHMiLCJzaG93TGVnZW5kIiwic2NhdHRlci1saWtlIl0sYXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY29sb3JiYXI6dCgiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiKSxjYWxjOmZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLGE9ZS5kaW1lbnNpb25zLG89ZS5fbGVuZ3RoLGM9e30sZz17fSxtPWcuY2RhdGE9W10seD1nLmRhdGE9W107Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKylpZigoaT1hW3JdKS52aXNpYmxlKXt2YXIgYj1lLl9kaWFnW3JdWzBdfHxlLl9kaWFnW3JdWzFdLF89bC5nZXRGcm9tSWQodCxiKTtpZihfKXt2YXIgdz15KF8sZSxpKSxrPSJsb2ciPT09Xy50eXBlP3Muc2ltcGxlTWFwKHcsXy5jMmwpOnc7bS5wdXNoKHcpLHgucHVzaChrKX19ZihlKSxzLmV4dGVuZEZsYXQoZyxkKGUpKTt2YXIgTT1tLmxlbmd0aCpvPnY7Zm9yKHI9MCxuPTA7cjxhLmxlbmd0aDtyKyspaWYoKGk9YVtyXSkudmlzaWJsZSl7dmFyIEEsVD1sLmdldEZyb21JZCh0LGUuX2RpYWdbcl1bMF0pfHx7fSxTPWwuZ2V0RnJvbUlkKHQsZS5fZGlhZ1tyXVsxXSl8fHt9O0E9TT8yKihnLnNpemVBdmd8fE1hdGgubWF4KGcuc2l6ZSwzKSk6dShlLG8pLGgodCxlLFQsUyxtW25dLG1bbl0sQSksbisrfXZhciBFPWMuX3NjZW5lPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5fc2NlbmUsbj17ZGlydHk6ITB9O3JldHVybiByfHwoKHI9ZS5fc2NlbmU9cy5leHRlbmRGbGF0KHt9LG4se3NlbGVjdEJhdGNoOm51bGwsdW5zZWxlY3RCYXRjaDpudWxsLG1hdHJpeDohMSxzZWxlY3Q6bnVsbH0pKS5kcmF3PWZ1bmN0aW9uKCl7ci5tYXRyaXgmJnIuc2VsZWN0QmF0Y2g/ci5tYXRyaXguZHJhdyhyLnVuc2VsZWN0QmF0Y2gsci5zZWxlY3RCYXRjaCk6ci5tYXRyaXgmJnIubWF0cml4LmRyYXcoKSxyLmRpcnR5PSExfSxyLmRlc3Ryb3k9ZnVuY3Rpb24oKXtyLm1hdHJpeCYmci5tYXRyaXguZGVzdHJveSgpLHIubWF0cml4T3B0aW9ucz1udWxsLHIuc2VsZWN0QmF0Y2g9bnVsbCxyLnVuc2VsZWN0QmF0Y2g9bnVsbCxlLl9zY2VuZT1udWxsfSksci5kaXJ0eXx8cy5leHRlbmRGbGF0KHIsbikscn0oMCxjKTtyZXR1cm4gRS5tYXRyaXh8fChFLm1hdHJpeD0hMCksRS5tYXRyaXhPcHRpb25zPWcsRS5zZWxlY3RlZE9wdGlvbnM9cChlLGUuc2VsZWN0ZWQpLEUudW5zZWxlY3RlZE9wdGlvbnM9cChlLGUudW5zZWxlY3RlZCksW3t4OiExLHk6ITEsdDpjLHRyYWNlOmV9XX0scGxvdDpmdW5jdGlvbih0LGUscil7aWYoci5sZW5ndGgpZm9yKHZhciBuPTA7bjxyLmxlbmd0aDtuKyspeCh0LHJbbl1bMF0pfSxob3ZlclBvaW50czpmdW5jdGlvbih0LGUscil7dmFyIG49dC5jZCxpPW5bMF0udHJhY2UsYT1uWzBdLnQuX3NjZW5lLm1hdHJpeE9wdGlvbnMuY2RhdGEsbz10LnhhLHM9dC55YSxsPW8uYzJwKGUpLGM9cy5jMnAociksdT10LmRpc3RhbmNlLGg9YihpLG8pLGY9YihpLHMpO2lmKCExPT09aHx8ITE9PT1mKXJldHVyblt0XTtmb3IodmFyIHAsZCxtPWFbaF0sdj1hW2ZdLHk9dSx4PTA7eDxtLmxlbmd0aDt4Kyspe3ZhciBfPW1beF0sdz12W3hdLGs9by5jMnAoXyktbCxNPXMuYzJwKHcpLWMsQT1NYXRoLnNxcnQoayprK00qTSk7QTx5JiYoeT1kPUEscD14KX1yZXR1cm4gdC5pbmRleD1wLHQuZGlzdGFuY2U9eSx0LmR4eT1kLHZvaWQgMD09PXA/W3RdOihnKHQsbSx2LGkpLFt0XSl9LHNlbGVjdFBvaW50czpmdW5jdGlvbih0LGUpe3ZhciByLG49dC5jZCxhPW5bMF0udHJhY2Usbz1uWzBdLnQscz1vLl9zY2VuZSxsPXMubWF0cml4T3B0aW9ucy5jZGF0YSx1PXQueGF4aXMsaD10LnlheGlzLGY9W107aWYoIXMpcmV0dXJuIGY7dmFyIHA9IWMuaGFzTWFya2VycyhhKSYmIWMuaGFzVGV4dChhKTtpZighMCE9PWEudmlzaWJsZXx8cClyZXR1cm4gZjt2YXIgZD1iKGEsdSksZz1iKGEsaCk7aWYoITE9PT1kfHwhMT09PWcpcmV0dXJuIGY7dmFyIG09by54cHhbZF0sdj1vLnlweFtnXSx5PWxbZF0seD1sW2ddLF89bnVsbCx3PW51bGw7aWYoITE9PT1lfHxlLmRlZ2VuZXJhdGUpdz1pKG8uY291bnQpO2Vsc2UgZm9yKF89W10sdz1bXSxyPTA7cjx5Lmxlbmd0aDtyKyspZS5jb250YWlucyhbbVtyXSx2W3JdXSk/KF8ucHVzaChyKSxmLnB1c2goe3BvaW50TnVtYmVyOnIseDp5W3JdLHk6eFtyXX0pKTp3LnB1c2gocik7aWYocy5zZWxlY3RCYXRjaHx8KHMuc2VsZWN0QmF0Y2g9W10scy51bnNlbGVjdEJhdGNoPVtdKSwhcy5zZWxlY3RCYXRjaCl7Zm9yKHI9MDtyPHMuY291bnQ7cisrKXMuc2VsZWN0QmF0Y2g9W10scy51bnNlbGVjdEJhdGNoPVtdO3MubWF0cml4LnVwZGF0ZShzLnVuc2VsZWN0ZWRPcHRpb25zLHMuc2VsZWN0ZWRPcHRpb25zKX1yZXR1cm4gcy5zZWxlY3RCYXRjaD1fLHMudW5zZWxlY3RCYXRjaD13LGZ9LHN0eWxlOmZ1bmN0aW9uKHQsZSl7aWYoZSl7dmFyIHI9dC5fZnVsbExheW91dDtlWzBdWzBdLnQuX3NjZW5lLm1hdHJpeC5yZWdsLmNsZWFyKHtjb2xvcjohMCxkZXB0aDohMH0pLHIuX3NwbG9tR3JpZCYmci5fc3Bsb21HcmlkLmRyYXcoKTtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKyllW25dWzBdLnQuX3NjZW5lLmRyYXcoKTtpZihyLl9oYXMoImNhcnRlc2lhbiIpKWZvcih2YXIgaSBpbiByLl9wbG90cyl7dmFyIGE9ci5fcGxvdHNbaV07YS5fc2NlbmUmJmEuX3NjZW5lLmRyYXcoKX19fSxtZXRhOnt9fSxhLnJlZ2lzdGVyKG8pfSx7Ii4uLy4uL2NvbXBvbmVudHMvZ3JpZCI6NjA0LCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo2NjEsIi4uLy4uL2xpYiI6Njg0LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiOjczNSwiLi4vLi4vcmVnaXN0cnkiOjgxNywiLi4vc2NhdHRlci9jYWxjIjoxMDE2LCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsYyI6MTAxOSwiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiOjEwMzIsIi4uL3NjYXR0ZXIvc3VidHlwZXMiOjEwMzcsIi4uL3NjYXR0ZXJnbCI6MTA2NiwiLi4vc2NhdHRlcmdsL2NvbnN0YW50cyI6MTA2MywiLi4vc2NhdHRlcmdsL2NvbnZlcnQiOjEwNjQsIi4vYXR0cmlidXRlcyI6MTA5MSwiLi9iYXNlX3Bsb3QiOjEwOTIsIi4vZGVmYXVsdHMiOjEwOTMsImFycmF5LXJhbmdlIjo1OCwicmVnbC1zcGxvbSI6NDYxfV0sMTA5NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzIiksYT10KCIuLi9tZXNoM2QvYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsbD17eDp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSx5Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHo6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0sdTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSx2Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHc6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sc3RhcnRzOnt4Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHk6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sejp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9LG1heGRpc3BsYXllZDp7dmFsVHlwZToiaW50ZWdlciIsbWluOjAsZGZsdDoxZTMsZWRpdFR5cGU6ImNhbGMifSxzaXplcmVmOnt2YWxUeXBlOiJudW1iZXIiLGVkaXRUeXBlOiJjYWxjIixtaW46MCxkZmx0OjF9LHRleHQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToiY2FsYyJ9fTtzKGwsbigiIix7Y29sb3JBdHRyOiJ1L3YvdyBub3JtIixzaG93U2NhbGVEZmx0OiEwLGVkaXRUeXBlT3ZlcnJpZGU6ImNhbGMifSkse2NvbG9yYmFyOml9KTtbIm9wYWNpdHkiLCJsaWdodHBvc2l0aW9uIiwibGlnaHRpbmciXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2xbdF09YVt0XX0pLGwuaG92ZXJpbmZvPXMoe30sby5ob3ZlcmluZm8se2VkaXRUeXBlOiJjYWxjIixmbGFnczpbIngiLCJ5IiwieiIsInUiLCJ2IiwidyIsIm5vcm0iLCJkaXZlcmdlbmNlIiwidGV4dCIsIm5hbWUiXSxkZmx0OiJ4K3kreitub3JtK3RleHQrbmFtZSJ9KSxlLmV4cG9ydHM9bH0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXMiOjU1OSwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiOjU2NSwiLi4vLi4vbGliL2V4dGVuZCI6NjczLCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo3MjksIi4uL21lc2gzZC9hdHRyaWJ1dGVzIjo5NjV9XSwxMDk2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsaSxhLG8scz1lLnUsbD1lLnYsYz1lLncsdT1lLngsaD1lLnksZj1lLnoscD1NYXRoLm1pbih1Lmxlbmd0aCxoLmxlbmd0aCxmLmxlbmd0aCxzLmxlbmd0aCxsLmxlbmd0aCxjLmxlbmd0aCksZD0wO2Uuc3RhcnRzJiYoaT1lLnN0YXJ0cy54fHxbXSxhPWUuc3RhcnRzLnl8fFtdLG89ZS5zdGFydHMuenx8W10sZD1NYXRoLm1pbihpLmxlbmd0aCxhLmxlbmd0aCxvLmxlbmd0aCkpO3ZhciBnPTAsbT0xLzA7Zm9yKHI9MDtyPHA7cisrKXt2YXIgdj1zW3JdLHk9bFtyXSx4PWNbcl0sYj1NYXRoLnNxcnQodip2K3kqeSt4KngpO2c9TWF0aC5tYXgoZyxiKSxtPU1hdGgubWluKG0sYil9bihlLFttLGddLCIiLCJjIik7dmFyIF89LTEvMCx3PTEvMCxrPS0xLzAsTT0xLzAsQT0tMS8wLFQ9MS8wO2ZvcihyPTA7cjxwO3IrKyl7dmFyIFM9dVtyXTtfPU1hdGgubWF4KF8sUyksdz1NYXRoLm1pbih3LFMpO3ZhciBFPWhbcl07az1NYXRoLm1heChrLEUpLE09TWF0aC5taW4oTSxFKTt2YXIgQz1mW3JdO0E9TWF0aC5tYXgoQSxDKSxUPU1hdGgubWluKFQsQyl9Zm9yKHI9MDtyPGQ7cisrKXt2YXIgTD1pW3JdO189TWF0aC5tYXgoXyxMKSx3PU1hdGgubWluKHcsTCk7dmFyIHo9YVtyXTtrPU1hdGgubWF4KGsseiksTT1NYXRoLm1pbihNLHopO3ZhciBQPW9bcl07QT1NYXRoLm1heChBLFApLFQ9TWF0aC5taW4oVCxQKX1lLl9sZW49cCxlLl9zbGVuPWQsZS5fbm9ybU1heD1nLGUuX3hibmRzPVt3LF9dLGUuX3libmRzPVtNLGtdLGUuX3pibmRzPVtULEFdfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyI6NTY2fV0sMTA5NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJnbC1zdHJlYW10dWJlM2QiKSxpPW4uY3JlYXRlVHViZU1lc2gsYT10KCIuLi8uLi9saWIiKSxvPXQoIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3IiKS5wYXJzZUNvbG9yU2NhbGUscz10KCIuLi8uLi9wbG90cy9nbDNkL3ppcDMiKSxsPXt4YXhpczowLHlheGlzOjEsemF4aXM6Mn07ZnVuY3Rpb24gYyh0LGUpe3RoaXMuc2NlbmU9dCx0aGlzLnVpZD1lLHRoaXMubWVzaD1udWxsLHRoaXMuZGF0YT1udWxsfXZhciB1PWMucHJvdG90eXBlO2Z1bmN0aW9uIGgodCl7cmV0dXJuIGEuZGlzdGluY3RWYWxzKHQpLnZhbHN9ZnVuY3Rpb24gZih0KXt2YXIgZT10Lmxlbmd0aDtyZXR1cm4gZT4yP3Quc2xpY2UoMSxlLTEpOjI9PT1lP1sodFswXSt0WzFdKS8yXTp0fWZ1bmN0aW9uIHAodCl7dmFyIGU9dC5sZW5ndGg7cmV0dXJuIDE9PT1lP1suNSwuNV06W3RbMV0tdFswXSx0W2UtMV0tdFtlLTJdXX1mdW5jdGlvbiBkKHQsZSl7dmFyIHI9dC5mdWxsU2NlbmVMYXlvdXQsaT10LmRhdGFTY2FsZSxjPWUuX2xlbix1PXt9O2Z1bmN0aW9uIGQodCxlKXt2YXIgbj1yW2VdLG89aVtsW2VdXTtyZXR1cm4gYS5zaW1wbGVNYXAodCxmdW5jdGlvbih0KXtyZXR1cm4gbi5kMmwodCkqb30pfXUudmVjdG9ycz1zKGQoZS51LCJ4YXhpcyIpLGQoZS52LCJ5YXhpcyIpLGQoZS53LCJ6YXhpcyIpLGMpO3ZhciBnPWgoZS54LnNsaWNlKDAsYykpLG09aChlLnkuc2xpY2UoMCxjKSksdj1oKGUuei5zbGljZSgwLGMpKTtpZihnLmxlbmd0aCptLmxlbmd0aCp2Lmxlbmd0aD5jKXJldHVybntwb3NpdGlvbnM6W10sY2VsbHM6W119O3ZhciB5PWQoZywieGF4aXMiKSx4PWQobSwieWF4aXMiKSxiPWQodiwiemF4aXMiKTtpZih1Lm1lc2hncmlkPVt5LHgsYl0sZS5zdGFydHMpe3ZhciBfPWUuX3NsZW47dS5zdGFydGluZ1Bvc2l0aW9ucz1zKGQoZS5zdGFydHMueC5zbGljZSgwLF8pLCJ4YXhpcyIpLGQoZS5zdGFydHMueS5zbGljZSgwLF8pLCJ5YXhpcyIpLGQoZS5zdGFydHMuei5zbGljZSgwLF8pLCJ6YXhpcyIpKX1lbHNle2Zvcih2YXIgdz14WzBdLGs9Zih5KSxNPWYoYiksQT1uZXcgQXJyYXkoay5sZW5ndGgqTS5sZW5ndGgpLFQ9MCxTPTA7UzxrLmxlbmd0aDtTKyspZm9yKHZhciBFPTA7RTxNLmxlbmd0aDtFKyspQVtUKytdPVtrW1NdLHcsTVtFXV07dS5zdGFydGluZ1Bvc2l0aW9ucz1BfXUuY29sb3JtYXA9byhlLmNvbG9yc2NhbGUpLHUudHViZVNpemU9ZS5zaXplcmVmLHUubWF4TGVuZ3RoPWUubWF4ZGlzcGxheWVkO3ZhciBDPWQoZS5feGJuZHMsInhheGlzIiksTD1kKGUuX3libmRzLCJ5YXhpcyIpLHo9ZChlLl96Ym5kcywiemF4aXMiKSxQPXAoeSksST1wKHgpLE89cChiKSxEPVtbQ1swXS1QWzBdLExbMF0tSVswXSx6WzBdLU9bMF1dLFtDWzFdK1BbMV0sTFsxXStJWzFdLHpbMV0rT1sxXV1dLFI9bih1LEQpO1IudmVydGV4SW50ZW5zaXR5Qm91bmRzPVtlLmNtaW4vZS5fbm9ybU1heCxlLmNtYXgvZS5fbm9ybU1heF07dmFyIEI9ZS5saWdodHBvc2l0aW9uO3JldHVybiBSLmxpZ2h0UG9zaXRpb249W0IueCxCLnksQi56XSxSLmFtYmllbnQ9ZS5saWdodGluZy5hbWJpZW50LFIuZGlmZnVzZT1lLmxpZ2h0aW5nLmRpZmZ1c2UsUi5zcGVjdWxhcj1lLmxpZ2h0aW5nLnNwZWN1bGFyLFIucm91Z2huZXNzPWUubGlnaHRpbmcucm91Z2huZXNzLFIuZnJlc25lbD1lLmxpZ2h0aW5nLmZyZXNuZWwsUi5vcGFjaXR5PWUub3BhY2l0eSxlLl9wYWQ9Ui50dWJlU2NhbGUqZS5zaXplcmVmKjIsUn11LmhhbmRsZVBpY2s9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5zY2VuZS5mdWxsU2NlbmVMYXlvdXQscj10aGlzLnNjZW5lLmRhdGFTY2FsZTtmdW5jdGlvbiBuKHQsbil7dmFyIGk9ZVtuXSxhPXJbbFtuXV07cmV0dXJuIGkubDJjKHQpL2F9aWYodC5vYmplY3Q9PT10aGlzLm1lc2gpe3ZhciBpPXQuZGF0YS5wb3NpdGlvbixhPXQuZGF0YS52ZWxvY2l0eTtyZXR1cm4gdC50cmFjZUNvb3JkaW5hdGU9W24oaVswXSwieGF4aXMiKSxuKGlbMV0sInlheGlzIiksbihpWzJdLCJ6YXhpcyIpLG4oYVswXSwieGF4aXMiKSxuKGFbMV0sInlheGlzIiksbihhWzJdLCJ6YXhpcyIpLHQuZGF0YS5pbnRlbnNpdHkqdGhpcy5kYXRhLl9ub3JtTWF4LHQuZGF0YS5kaXZlcmdlbmNlXSx0LnRleHRMYWJlbD10aGlzLmRhdGEudGV4dCwhMH19LHUudXBkYXRlPWZ1bmN0aW9uKHQpe3RoaXMuZGF0YT10O3ZhciBlPWQodGhpcy5zY2VuZSx0KTt0aGlzLm1lc2gudXBkYXRlKGUpfSx1LmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy5tZXNoKSx0aGlzLm1lc2guZGlzcG9zZSgpfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmdscGxvdC5nbCxuPWQodCxlKSxhPWkocixuKSxvPW5ldyBjKHQsZS51aWQpO3JldHVybiBvLm1lc2g9YSxvLmRhdGE9ZSxhLl90cmFjZT1vLHQuZ2xwbG90LmFkZChhKSxvfX0seyIuLi8uLi9saWIiOjY4NCwiLi4vLi4vbGliL2dsX2Zvcm1hdF9jb2xvciI6NjgwLCIuLi8uLi9wbG90cy9nbDNkL3ppcDMiOjc4NSwiZ2wtc3RyZWFtdHViZTNkIjozMDB9XSwxMDk4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIiksYT10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyl7ZnVuY3Rpb24gcyhyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsYSxyLGkpfXZhciBsPXMoInUiKSxjPXMoInYiKSx1PXMoInciKSxoPXMoIngiKSxmPXMoInkiKSxwPXMoInoiKTtsJiZsLmxlbmd0aCYmYyYmYy5sZW5ndGgmJnUmJnUubGVuZ3RoJiZoJiZoLmxlbmd0aCYmZiYmZi5sZW5ndGgmJnAmJnAubGVuZ3RoPyhzKCJzdGFydHMueCIpLHMoInN0YXJ0cy55Iikscygic3RhcnRzLnoiKSxzKCJtYXhkaXNwbGF5ZWQiKSxzKCJzaXplcmVmIikscygibGlnaHRpbmcuYW1iaWVudCIpLHMoImxpZ2h0aW5nLmRpZmZ1c2UiKSxzKCJsaWdodGluZy5zcGVjdWxhciIpLHMoImxpZ2h0aW5nLnJvdWdobmVzcyIpLHMoImxpZ2h0aW5nLmZyZXNuZWwiKSxzKCJsaWdodHBvc2l0aW9uLngiKSxzKCJsaWdodHBvc2l0aW9uLnkiKSxzKCJsaWdodHBvc2l0aW9uLnoiKSxpKHQsZSxvLHMse3ByZWZpeDoiIixjTGV0dGVyOiJjIn0pLHMoInRleHQiKSxlLl9sZW5ndGg9bnVsbCk6ZS52aXNpYmxlPSExfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiOjU2OCwiLi4vLi4vbGliIjo2ODQsIi4vYXR0cmlidXRlcyI6MTA5NX1dLDEwOTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToic3RyZWFtdHViZSIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvZ2wzZCIpLGNhdGVnb3JpZXM6WyJnbDNkIl0sYXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY29sb3JiYXI6e21pbjoiY21pbiIsbWF4OiJjbWF4In0sY2FsYzp0KCIuL2NhbGMiKSxwbG90OnQoIi4vY29udmVydCIpLGV2ZW50RGF0YTpmdW5jdGlvbih0LGUpe3JldHVybiB0LnR1YmV4PXQueCx0LnR1YmV5PXQueSx0LnR1YmV6PXQueix0LnR1YmV1PWUudHJhY2VDb29yZGluYXRlWzNdLHQudHViZXY9ZS50cmFjZUNvb3JkaW5hdGVbNF0sdC50dWJldz1lLnRyYWNlQ29vcmRpbmF0ZVs1XSx0Lm5vcm09ZS50cmFjZUNvb3JkaW5hdGVbNl0sdC5kaXZlcmdlbmNlPWUudHJhY2VDb29yZGluYXRlWzddLGRlbGV0ZSB0LngsZGVsZXRlIHQueSxkZWxldGUgdC56LHR9LG1ldGE6e319fSx7Ii4uLy4uL3Bsb3RzL2dsM2QiOjc3NCwiLi9hdHRyaWJ1dGVzIjoxMDk1LCIuL2NhbGMiOjEwOTYsIi4vY29udmVydCI6MTA5NywiLi9kZWZhdWx0cyI6MTA5OH1dLDExMDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsbD10KCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGw7ZnVuY3Rpb24gYyh0KXtyZXR1cm57c2hvdzp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0scHJvamVjdDp7eDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0seTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sejp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX19LGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpuLmRlZmF1bHRMaW5lfSx1c2Vjb2xvcm1hcDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjEsbWF4OjE2LGRmbHQ6Mn0saGlnaGxpZ2h0Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSxoaWdobGlnaHRjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6bi5kZWZhdWx0TGluZX0saGlnaGxpZ2h0d2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjEsbWF4OjE2LGRmbHQ6Mn19fXZhciB1PWUuZXhwb3J0cz1sKHMoe3o6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSx4Ont2YWxUeXBlOiJkYXRhX2FycmF5In0seTp7dmFsVHlwZToiZGF0YV9hcnJheSJ9LHRleHQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixhcnJheU9rOiEwfSxzdXJmYWNlY29sb3I6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifX0saSgiIix7Y29sb3JBdHRyOiJ6IG9yIHN1cmZhY2Vjb2xvciIsc2hvd1NjYWxlRGZsdDohMCxhdXRvQ29sb3JEZmx0OiExLGVkaXRUeXBlT3ZlcnJpZGU6ImNhbGMifSkse2NvbG9yYmFyOmEsY29udG91cnM6e3g6YygpLHk6YygpLHo6YygpfSxoaWRlc3VyZmFjZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sbGlnaHRwb3NpdGlvbjp7eDp7dmFsVHlwZToibnVtYmVyIixtaW46LTFlNSxtYXg6MWU1LGRmbHQ6MTB9LHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOi0xZTUsbWF4OjFlNSxkZmx0OjFlNH0sejp7dmFsVHlwZToibnVtYmVyIixtaW46LTFlNSxtYXg6MWU1LGRmbHQ6MH19LGxpZ2h0aW5nOnthbWJpZW50Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6Ljh9LGRpZmZ1c2U6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDouOH0sc3BlY3VsYXI6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjIsZGZsdDouMDV9LHJvdWdobmVzczp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0Oi41fSxmcmVzbmVsOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDo1LGRmbHQ6LjJ9fSxvcGFjaXR5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MX0sX2RlcHJlY2F0ZWQ6e3phdXRvOnMoe30saS56YXV0byx7fSksem1pbjpzKHt9LGkuem1pbix7fSksem1heDpzKHt9LGkuem1heCx7fSl9LGhvdmVyaW5mbzpzKHt9LG8uaG92ZXJpbmZvKX0pLCJjYWxjIiwibmVzdGVkIik7dS54LmVkaXRUeXBlPXUueS5lZGl0VHlwZT11LnouZWRpdFR5cGU9ImNhbGMrY2xlYXJBeGlzVHlwZXMifSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjU1OCwiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzIjo1NTksIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo1NjUsIi4uLy4uL2xpYi9leHRlbmQiOjY3MywiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6NzE1LCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo3Mjl9XSwxMTAxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZS5zdXJmYWNlY29sb3I/bihlLGUuc3VyZmFjZWNvbG9yLCIiLCJjIik6bihlLGUueiwiIiwiYyIpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyI6NTY2fV0sMTEwMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJnbC1zdXJmYWNlM2QiKSxpPXQoIm5kYXJyYXkiKSxhPXQoIm5kYXJyYXktaG9tb2dyYXBoeSIpLG89dCgibmRhcnJheS1maWxsIikscz10KCJuZGFycmF5LW9wcyIpLGw9dCgiLi4vLi4vbGliIikuaXNBcnJheU9yVHlwZWRBcnJheSxjPXQoIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3IiKS5wYXJzZUNvbG9yU2NhbGUsdT10KCIuLi8uLi9saWIvc3RyMnJnYmFycmF5IiksaD0xMjg7ZnVuY3Rpb24gZih0LGUscil7dGhpcy5zY2VuZT10LHRoaXMudWlkPXIsdGhpcy5zdXJmYWNlPWUsdGhpcy5kYXRhPW51bGwsdGhpcy5zaG93Q29udG91cj1bITEsITEsITFdLHRoaXMuZGF0YVNjYWxlPTF9dmFyIHA9Zi5wcm90b3R5cGU7ZnVuY3Rpb24gZCh0KXt2YXIgZT10LnNoYXBlLHI9W2VbMF0rMixlWzFdKzJdLG49aShuZXcgRmxvYXQzMkFycmF5KHJbMF0qclsxXSkscik7cmV0dXJuIHMuYXNzaWduKG4ubG8oMSwxKS5oaShlWzBdLGVbMV0pLHQpLHMuYXNzaWduKG4ubG8oMSkuaGkoZVswXSwxKSx0LmhpKGVbMF0sMSkpLHMuYXNzaWduKG4ubG8oMSxyWzFdLTEpLmhpKGVbMF0sMSksdC5sbygwLGVbMV0tMSkuaGkoZVswXSwxKSkscy5hc3NpZ24obi5sbygwLDEpLmhpKDEsZVsxXSksdC5oaSgxKSkscy5hc3NpZ24obi5sbyhyWzBdLTEsMSkuaGkoMSxlWzFdKSx0LmxvKGVbMF0tMSkpLG4uc2V0KDAsMCx0LmdldCgwLDApKSxuLnNldCgwLHJbMV0tMSx0LmdldCgwLGVbMV0tMSkpLG4uc2V0KHJbMF0tMSwwLHQuZ2V0KGVbMF0tMSwwKSksbi5zZXQoclswXS0xLHJbMV0tMSx0LmdldChlWzBdLTEsZVsxXS0xKSksbn1wLmhhbmRsZVBpY2s9ZnVuY3Rpb24odCl7aWYodC5vYmplY3Q9PT10aGlzLnN1cmZhY2Upe3ZhciBlPXQuaW5kZXg9W01hdGgubWluKDB8TWF0aC5yb3VuZCh0LmRhdGEuaW5kZXhbMF0vdGhpcy5kYXRhU2NhbGUtMSksdGhpcy5kYXRhLnpbMF0ubGVuZ3RoLTEpLE1hdGgubWluKDB8TWF0aC5yb3VuZCh0LmRhdGEuaW5kZXhbMV0vdGhpcy5kYXRhU2NhbGUtMSksdGhpcy5kYXRhLnoubGVuZ3RoLTEpXSxyPVswLDAsMF07bCh0aGlzLmRhdGEueCk/bCh0aGlzLmRhdGEueFswXSk/clswXT10aGlzLmRhdGEueFtlWzFdXVtlWzBdXTpyWzBdPXRoaXMuZGF0YS54W2VbMF1dOnJbMF09ZVswXSxsKHRoaXMuZGF0YS55KT9sKHRoaXMuZGF0YS55WzBdKT9yWzFdPXRoaXMuZGF0YS55W2VbMV1dW2VbMF1dOnJbMV09dGhpcy5kYXRhLnlbZVsxXV06clsxXT1lWzFdLHJbMl09dGhpcy5kYXRhLnpbZVsxXV1bZVswXV0sdC50cmFjZUNvb3JkaW5hdGU9cjt2YXIgbj10aGlzLnNjZW5lLmZ1bGxTY2VuZUxheW91dDt0LmRhdGFDb29yZGluYXRlPVtuLnhheGlzLmQybChyWzBdLDAsdGhpcy5kYXRhLnhjYWxlbmRhcikqdGhpcy5zY2VuZS5kYXRhU2NhbGVbMF0sbi55YXhpcy5kMmwoclsxXSwwLHRoaXMuZGF0YS55Y2FsZW5kYXIpKnRoaXMuc2NlbmUuZGF0YVNjYWxlWzFdLG4uemF4aXMuZDJsKHJbMl0sMCx0aGlzLmRhdGEuemNhbGVuZGFyKSp0aGlzLnNjZW5lLmRhdGFTY2FsZVsyXV07dmFyIGk9dGhpcy5kYXRhLnRleHQ7cmV0dXJuIEFycmF5LmlzQXJyYXkoaSkmJmlbZVsxXV0mJnZvaWQgMCE9PWlbZVsxXV1bZVswXV0/dC50ZXh0TGFiZWw9aVtlWzFdXVtlWzBdXTp0LnRleHRMYWJlbD1pfHwiIix0LmRhdGEuZGF0YUNvb3JkaW5hdGU9dC5kYXRhQ29vcmRpbmF0ZS5zbGljZSgpLHRoaXMuc3VyZmFjZS5oaWdobGlnaHQodC5kYXRhKSx0aGlzLnNjZW5lLmdscGxvdC5zcGlrZXMucG9zaXRpb249dC5kYXRhQ29vcmRpbmF0ZSwhMH19LHAuc2V0Q29udG91ckxldmVscz1mdW5jdGlvbigpe2Zvcih2YXIgdD1bW10sW10sW11dLGU9ITEscj0wO3I8MzsrK3IpdGhpcy5zaG93Q29udG91cltyXSYmKGU9ITAsdFtyXT10aGlzLnNjZW5lLmNvbnRvdXJMZXZlbHNbcl0pO2UmJnRoaXMuc3VyZmFjZS51cGRhdGUoe2xldmVsczp0fSl9LHAudXBkYXRlPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dGhpcy5zY2VuZSxuPXIuZnVsbFNjZW5lTGF5b3V0LHM9dGhpcy5zdXJmYWNlLGY9dC5vcGFjaXR5LHA9Yyh0LmNvbG9yc2NhbGUsZiksZz10LnosbT10Lngsdj10LnkseT1uLnhheGlzLHg9bi55YXhpcyxiPW4uemF4aXMsXz1yLmRhdGFTY2FsZSx3PWdbMF0ubGVuZ3RoLGs9dC5feWxlbmd0aCxNPVtpKG5ldyBGbG9hdDMyQXJyYXkodyprKSxbdyxrXSksaShuZXcgRmxvYXQzMkFycmF5KHcqayksW3csa10pLGkobmV3IEZsb2F0MzJBcnJheSh3KmspLFt3LGtdKV0sQT1NWzBdLFQ9TVsxXSxTPXIuY29udG91ckxldmVsczt0aGlzLmRhdGE9dDt2YXIgRT10LnhjYWxlbmRhcixDPXQueWNhbGVuZGFyLEw9dC56Y2FsZW5kYXI7byhNWzJdLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGIuZDJsKGdbZV1bdF0sMCxMKSpfWzJdfSksbChtKT9sKG1bMF0pP28oQSxmdW5jdGlvbih0LGUpe3JldHVybiB5LmQybChtW2VdW3RdLDAsRSkqX1swXX0pOm8oQSxmdW5jdGlvbih0KXtyZXR1cm4geS5kMmwobVt0XSwwLEUpKl9bMF19KTpvKEEsZnVuY3Rpb24odCl7cmV0dXJuIHkuZDJsKHQsMCxFKSpfWzBdfSksbChtKT9sKHZbMF0pP28oVCxmdW5jdGlvbih0LGUpe3JldHVybiB4LmQybCh2W2VdW3RdLDAsQykqX1sxXX0pOm8oVCxmdW5jdGlvbih0LGUpe3JldHVybiB4LmQybCh2W2VdLDAsQykqX1sxXX0pOm8oVCxmdW5jdGlvbih0LGUpe3JldHVybiB4LmQybChlLDAsRSkqX1sxXX0pO3ZhciB6PXtjb2xvcm1hcDpwLGxldmVsczpbW10sW10sW11dLHNob3dDb250b3VyOlshMCwhMCwhMF0sc2hvd1N1cmZhY2U6IXQuaGlkZXN1cmZhY2UsY29udG91clByb2plY3Q6W1shMSwhMSwhMV0sWyExLCExLCExXSxbITEsITEsITFdXSxjb250b3VyV2lkdGg6WzEsMSwxXSxjb250b3VyQ29sb3I6W1sxLDEsMSwxXSxbMSwxLDEsMV0sWzEsMSwxLDFdXSxjb250b3VyVGludDpbMSwxLDFdLGR5bmFtaWNDb2xvcjpbWzEsMSwxLDFdLFsxLDEsMSwxXSxbMSwxLDEsMV1dLGR5bmFtaWNXaWR0aDpbMSwxLDFdLGR5bmFtaWNUaW50OlsxLDEsMV0sb3BhY2l0eTp0Lm9wYWNpdHl9O2lmKHouaW50ZW5zaXR5Qm91bmRzPVt0LmNtaW4sdC5jbWF4XSx0LnN1cmZhY2Vjb2xvcil7dmFyIFA9aShuZXcgRmxvYXQzMkFycmF5KHcqayksW3csa10pO28oUCxmdW5jdGlvbihlLHIpe3JldHVybiB0LnN1cmZhY2Vjb2xvcltyXVtlXX0pLE0ucHVzaChQKX1lbHNlIHouaW50ZW5zaXR5Qm91bmRzWzBdKj1fWzJdLHouaW50ZW5zaXR5Qm91bmRzWzFdKj1fWzJdO3RoaXMuZGF0YVNjYWxlPWZ1bmN0aW9uKHQpe3ZhciBlPU1hdGgubWF4KHRbMF0uc2hhcGVbMF0sdFswXS5zaGFwZVsxXSk7aWYoZTxoKXtmb3IodmFyIHI9aC9lLG49WzB8TWF0aC5mbG9vcih0WzBdLnNoYXBlWzBdKnIrMSksMHxNYXRoLmZsb29yKHRbMF0uc2hhcGVbMV0qcisxKV0sbz1uWzBdKm5bMV0scz0wO3M8dC5sZW5ndGg7KytzKXt2YXIgbD1kKHRbc10pLGM9aShuZXcgRmxvYXQzMkFycmF5KG8pLG4pO2EoYyxsLFtyLDAsMCwwLHIsMCwwLDAsMV0pLHRbc109Y31yZXR1cm4gcn1yZXR1cm4gMX0oTSksdC5zdXJmYWNlY29sb3ImJih6LmludGVuc2l0eT1NLnBvcCgpKTt2YXIgST1bITAsITAsITBdLE89WyJ4IiwieSIsInoiXTtmb3IoZT0wO2U8MzsrK2Upe3ZhciBEPXQuY29udG91cnNbT1tlXV07SVtlXT1ELmhpZ2hsaWdodCx6LnNob3dDb250b3VyW2VdPUQuc2hvd3x8RC5oaWdobGlnaHQsei5zaG93Q29udG91cltlXSYmKHouY29udG91clByb2plY3RbZV09W0QucHJvamVjdC54LEQucHJvamVjdC55LEQucHJvamVjdC56XSxELnNob3c/KHRoaXMuc2hvd0NvbnRvdXJbZV09ITAsei5sZXZlbHNbZV09U1tlXSxzLmhpZ2hsaWdodENvbG9yW2VdPXouY29udG91ckNvbG9yW2VdPXUoRC5jb2xvciksRC51c2Vjb2xvcm1hcD9zLmhpZ2hsaWdodFRpbnRbZV09ei5jb250b3VyVGludFtlXT0wOnMuaGlnaGxpZ2h0VGludFtlXT16LmNvbnRvdXJUaW50W2VdPTEsei5jb250b3VyV2lkdGhbZV09RC53aWR0aCk6dGhpcy5zaG93Q29udG91cltlXT0hMSxELmhpZ2hsaWdodCYmKHouZHluYW1pY0NvbG9yW2VdPXUoRC5oaWdobGlnaHRjb2xvciksei5keW5hbWljV2lkdGhbZV09RC5oaWdobGlnaHR3aWR0aCkpfShmdW5jdGlvbih0KXt2YXIgZT10WzBdLnJnYixyPXRbdC5sZW5ndGgtMV0ucmdiO3JldHVybiBlWzBdPT09clswXSYmZVsxXT09PXJbMV0mJmVbMl09PT1yWzJdJiZlWzNdPT09clszXX0pKHApJiYoei52ZXJ0ZXhDb2xvcj0hMCksei5jb29yZHM9TSxzLnVwZGF0ZSh6KSxzLnZpc2libGU9dC52aXNpYmxlLHMuZW5hYmxlRHluYW1pYz1JLHMuZW5hYmxlSGlnaGxpZ2h0PUkscy5zbmFwVG9EYXRhPSEwLCJsaWdodGluZyJpbiB0JiYocy5hbWJpZW50TGlnaHQ9dC5saWdodGluZy5hbWJpZW50LHMuZGlmZnVzZUxpZ2h0PXQubGlnaHRpbmcuZGlmZnVzZSxzLnNwZWN1bGFyTGlnaHQ9dC5saWdodGluZy5zcGVjdWxhcixzLnJvdWdobmVzcz10LmxpZ2h0aW5nLnJvdWdobmVzcyxzLmZyZXNuZWw9dC5saWdodGluZy5mcmVzbmVsKSwibGlnaHRwb3NpdGlvbiJpbiB0JiYocy5saWdodFBvc2l0aW9uPVt0LmxpZ2h0cG9zaXRpb24ueCx0LmxpZ2h0cG9zaXRpb24ueSx0LmxpZ2h0cG9zaXRpb24uel0pLGYmJmY8MSYmKHMuc3VwcG9ydHNUcmFuc3BhcmVuY3k9ITApfSxwLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy5zdXJmYWNlKSx0aGlzLnN1cmZhY2UuZGlzcG9zZSgpfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmdscGxvdC5nbCxpPW4oe2dsOnJ9KSxhPW5ldyBmKHQsaSxlLnVpZCk7cmV0dXJuIGkuX3RyYWNlPWEsYS51cGRhdGUoZSksdC5nbHBsb3QuYWRkKGkpLGF9fSx7Ii4uLy4uL2xpYiI6Njg0LCIuLi8uLi9saWIvZ2xfZm9ybWF0X2NvbG9yIjo2ODAsIi4uLy4uL2xpYi9zdHIycmdiYXJyYXkiOjcwNywiZ2wtc3VyZmFjZTNkIjozMDIsbmRhcnJheTo0MTcsIm5kYXJyYXktZmlsbCI6NDA3LCJuZGFycmF5LWhvbW9ncmFwaHkiOjQwOSwibmRhcnJheS1vcHMiOjQxMX1dLDExMDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIiksbz10KCIuL2F0dHJpYnV0ZXMiKTtmdW5jdGlvbiBzKHQsZSxyKXtlIGluIHQmJiEociBpbiB0KSYmKHRbcl09dFtlXSl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGwpe3ZhciBjLHU7ZnVuY3Rpb24gaChyLG4pe3JldHVybiBpLmNvZXJjZSh0LGUsbyxyLG4pfXZhciBmPWgoInoiKTtpZihmKXt2YXIgcD1oKCJ4Iik7aCgieSIpLGUuX3hsZW5ndGg9QXJyYXkuaXNBcnJheShwKSYmaS5pc0FycmF5T3JUeXBlZEFycmF5KHBbMF0pP2YubGVuZ3RoOmZbMF0ubGVuZ3RoLGUuX3lsZW5ndGg9Zi5sZW5ndGgsbi5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZVRyYWNlRGVmYXVsdHMiKSh0LGUsWyJ4IiwieSIsInoiXSxsKSxoKCJ0ZXh0IiksWyJsaWdodGluZy5hbWJpZW50IiwibGlnaHRpbmcuZGlmZnVzZSIsImxpZ2h0aW5nLnNwZWN1bGFyIiwibGlnaHRpbmcucm91Z2huZXNzIiwibGlnaHRpbmcuZnJlc25lbCIsImxpZ2h0cG9zaXRpb24ueCIsImxpZ2h0cG9zaXRpb24ueSIsImxpZ2h0cG9zaXRpb24ueiIsImhpZGVzdXJmYWNlIiwib3BhY2l0eSJdLmZvckVhY2goZnVuY3Rpb24odCl7aCh0KX0pO3ZhciBkPWgoInN1cmZhY2Vjb2xvciIpO2goImNvbG9yc2NhbGUiKTt2YXIgZz1bIngiLCJ5IiwieiJdO2ZvcihjPTA7YzwzOysrYyl7dmFyIG09ImNvbnRvdXJzLiIrZ1tjXSx2PWgobSsiLnNob3ciKSx5PWgobSsiLmhpZ2hsaWdodCIpO2lmKHZ8fHkpZm9yKHU9MDt1PDM7Kyt1KWgobSsiLnByb2plY3QuIitnW3VdKTt2JiYoaChtKyIuY29sb3IiKSxoKG0rIi53aWR0aCIpLGgobSsiLnVzZWNvbG9ybWFwIikpLHkmJihoKG0rIi5oaWdobGlnaHRjb2xvciIpLGgobSsiLmhpZ2hsaWdodHdpZHRoIikpfWR8fChzKHQsInptaW4iLCJjbWluIikscyh0LCJ6bWF4IiwiY21heCIpLHModCwiemF1dG8iLCJjYXV0byIpKSxhKHQsZSxsLGgse3ByZWZpeDoiIixjTGV0dGVyOiJjIn0pLGUuX2xlbmd0aD1udWxsfWVsc2UgZS52aXNpYmxlPSExfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiOjU2OCwiLi4vLi4vbGliIjo2ODQsIi4uLy4uL3JlZ2lzdHJ5Ijo4MTcsIi4vYXR0cmlidXRlcyI6MTEwMH1dLDExMDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoIi4vYXR0cmlidXRlcyIpLG4uc3VwcGx5RGVmYXVsdHM9dCgiLi9kZWZhdWx0cyIpLG4uY29sb3JiYXI9e21pbjoiY21pbiIsbWF4OiJjbWF4In0sbi5jYWxjPXQoIi4vY2FsYyIpLG4ucGxvdD10KCIuL2NvbnZlcnQiKSxuLm1vZHVsZVR5cGU9InRyYWNlIixuLm5hbWU9InN1cmZhY2UiLG4uYmFzZVBsb3RNb2R1bGU9dCgiLi4vLi4vcGxvdHMvZ2wzZCIpLG4uY2F0ZWdvcmllcz1bImdsM2QiLCIyZE1hcCIsIm5vT3BhY2l0eSJdLG4ubWV0YT17fSxlLmV4cG9ydHM9bn0seyIuLi8uLi9wbG90cy9nbDNkIjo3NzQsIi4vYXR0cmlidXRlcyI6MTEwMCwiLi9jYWxjIjoxMTAxLCIuL2NvbnZlcnQiOjExMDIsIi4vZGVmYXVsdHMiOjExMDN9XSwxMTA1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvYW5ub3RhdGlvbnMvYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsYT10KCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGwsbz10KCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL3Bsb3RzL2RvbWFpbiIpLmF0dHJpYnV0ZXM7ZS5leHBvcnRzPWEoe2RvbWFpbjpzKHtuYW1lOiJ0YWJsZSIsdHJhY2U6ITB9KSxjb2x1bW53aWR0aDp7dmFsVHlwZToibnVtYmVyIixhcnJheU9rOiEwLGRmbHQ6bnVsbH0sY29sdW1ub3JkZXI6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSxoZWFkZXI6e3ZhbHVlczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZGZsdDpbXX0sZm9ybWF0Ont2YWxUeXBlOiJkYXRhX2FycmF5IixkZmx0OltdfSxwcmVmaXg6e3ZhbFR5cGU6InN0cmluZyIsYXJyYXlPazohMCxkZmx0Om51bGx9LHN1ZmZpeDp7dmFsVHlwZToic3RyaW5nIixhcnJheU9rOiEwLGRmbHQ6bnVsbH0saGVpZ2h0Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6Mjh9LGFsaWduOmkoe30sbi5hbGlnbix7YXJyYXlPazohMH0pLGxpbmU6e3dpZHRoOnt2YWxUeXBlOiJudW1iZXIiLGFycmF5T2s6ITAsZGZsdDoxfSxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGFycmF5T2s6ITAsZGZsdDoiZ3JleSJ9fSxmaWxsOntjb2xvcjp7dmFsVHlwZToiY29sb3IiLGFycmF5T2s6ITAsZGZsdDoid2hpdGUifX0sZm9udDppKHt9LG8oe2FycmF5T2s6ITB9KSl9LGNlbGxzOnt2YWx1ZXM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGRmbHQ6W119LGZvcm1hdDp7dmFsVHlwZToiZGF0YV9hcnJheSIsZGZsdDpbXX0scHJlZml4Ont2YWxUeXBlOiJzdHJpbmciLGFycmF5T2s6ITAsZGZsdDpudWxsfSxzdWZmaXg6e3ZhbFR5cGU6InN0cmluZyIsYXJyYXlPazohMCxkZmx0Om51bGx9LGhlaWdodDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjIwfSxhbGlnbjppKHt9LG4uYWxpZ24se2FycmF5T2s6ITB9KSxsaW5lOnt3aWR0aDp7dmFsVHlwZToibnVtYmVyIixhcnJheU9rOiEwLGRmbHQ6MX0sY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixhcnJheU9rOiEwLGRmbHQ6ImdyZXkifX0sZmlsbDp7Y29sb3I6e3ZhbFR5cGU6ImNvbG9yIixhcnJheU9rOiEwLGRmbHQ6IndoaXRlIn19LGZvbnQ6aSh7fSxvKHthcnJheU9rOiEwfSkpfX0sImNhbGMiLCJmcm9tLXJvb3QiKX0seyIuLi8uLi9jb21wb25lbnRzL2Fubm90YXRpb25zL2F0dHJpYnV0ZXMiOjU0MSwiLi4vLi4vbGliL2V4dGVuZCI6NjczLCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo3MTUsIi4uLy4uL3Bsb3RzL2RvbWFpbiI6NzU3LCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjc1OH1dLDExMDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvZ2V0X2RhdGEiKS5nZXRNb2R1bGVDYWxjRGF0YSxpPXQoIi4vcGxvdCIpO3IubmFtZT0idGFibGUiLHIucGxvdD1mdW5jdGlvbih0KXt2YXIgZT1uKHQuY2FsY2RhdGEsInRhYmxlIilbMF07ZS5sZW5ndGgmJmkodCxlKX0sci5jbGVhbj1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1uLl9oYXMmJm4uX2hhcygidGFibGUiKSxhPWUuX2hhcyYmZS5faGFzKCJ0YWJsZSIpO2kmJiFhJiZuLl9wYXBlcmRpdi5zZWxlY3RBbGwoIi50YWJsZSIpLnJlbW92ZSgpfX0seyIuLi8uLi9wbG90cy9nZXRfZGF0YSI6NzY4LCIuL3Bsb3QiOjExMTN9XSwxMTA3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYi9ndXAiKS53cmFwO2UuZXhwb3J0cz1mdW5jdGlvbigpe3JldHVybiBuKHt9KX19LHsiLi4vLi4vbGliL2d1cCI6NjgxfV0sMTEwODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2NlbGxQYWQ6OCxjb2x1bW5FeHRlbnRPZmZzZXQ6MTAsY29sdW1uVGl0bGVPZmZzZXQ6MjgsZW1wdHlIZWFkZXJIZWlnaHQ6MTYsbGF0ZXhDaGVjazovXlwkLipcJCQvLGdvbGRlblJhdGlvOjEuNjE4LGxpbmVCcmVha2VyOiI8YnI+IixtYXhEaW1lbnNpb25Db3VudDo2MCxvdmVyZHJhZzo0NSxyZWxlYXNlVHJhbnNpdGlvbkR1cmF0aW9uOjEyMCxyZWxlYXNlVHJhbnNpdGlvbkVhc2U6ImN1YmljLW91dCIsc2Nyb2xsYmFyQ2FwdHVyZVdpZHRoOjE4LHNjcm9sbGJhckhpZGVEZWxheToxZTMsc2Nyb2xsYmFySGlkZUR1cmF0aW9uOjFlMyxzY3JvbGxiYXJPZmZzZXQ6NSxzY3JvbGxiYXJXaWR0aDo4LHRyYW5zaXRpb25EdXJhdGlvbjoxMDAsdHJhbnNpdGlvbkVhc2U6ImN1YmljLW91dCIsdXBsaWZ0OjUsd3JhcFNwYWNlcjoiICIsd3JhcFNwbGl0Q2hhcmFjdGVyOiIgIixjbjp7dGFibGU6InRhYmxlIix0YWJsZUNvbnRyb2xWaWV3OiJ0YWJsZS1jb250cm9sLXZpZXciLHNjcm9sbEJhY2tncm91bmQ6InNjcm9sbC1iYWNrZ3JvdW5kIix5Q29sdW1uOiJ5LWNvbHVtbiIsY29sdW1uQmxvY2s6ImNvbHVtbi1ibG9jayIsc2Nyb2xsQXJlYUNsaXA6InNjcm9sbC1hcmVhLWNsaXAiLHNjcm9sbEFyZWFDbGlwUmVjdDoic2Nyb2xsLWFyZWEtY2xpcC1yZWN0Iixjb2x1bW5Cb3VuZGFyeToiY29sdW1uLWJvdW5kYXJ5Iixjb2x1bW5Cb3VuZGFyeUNsaXBwYXRoOiJjb2x1bW4tYm91bmRhcnktY2xpcHBhdGgiLGNvbHVtbkJvdW5kYXJ5UmVjdDoiY29sdW1uLWJvdW5kYXJ5LXJlY3QiLGNvbHVtbkNlbGxzOiJjb2x1bW4tY2VsbHMiLGNvbHVtbkNlbGw6ImNvbHVtbi1jZWxsIixjZWxsUmVjdDoiY2VsbC1yZWN0IixjZWxsVGV4dDoiY2VsbC10ZXh0IixjZWxsVGV4dEhvbGRlcjoiY2VsbC10ZXh0LWhvbGRlciIsc2Nyb2xsYmFyS2l0OiJzY3JvbGxiYXIta2l0IixzY3JvbGxiYXI6InNjcm9sbGJhciIsc2Nyb2xsYmFyU2xpZGVyOiJzY3JvbGxiYXItc2xpZGVyIixzY3JvbGxiYXJHbHlwaDoic2Nyb2xsYmFyLWdseXBoIixzY3JvbGxiYXJDYXB0dXJlWm9uZToic2Nyb2xsYmFyLWNhcHR1cmUtem9uZSJ9fX0se31dLDExMDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9jb25zdGFudHMiKSxpPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGE9dCgiZmFzdC1pc251bWVyaWMiKTtmdW5jdGlvbiBvKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpe2Zvcih2YXIgZT0wLHI9MDtyPHQubGVuZ3RoO3IrKyllPU1hdGgubWF4KGUsbyh0W3JdKSk7cmV0dXJuIGV9cmV0dXJuIHR9ZnVuY3Rpb24gcyh0LGUpe3JldHVybiB0K2V9ZnVuY3Rpb24gbCh0KXt2YXIgZSxyPXQuc2xpY2UoKSxuPTEvMCxpPTA7Zm9yKGU9MDtlPHIubGVuZ3RoO2UrKylBcnJheS5pc0FycmF5KHJbZV0pfHwocltlXT1bcltlXV0pLG49TWF0aC5taW4obixyW2VdLmxlbmd0aCksaT1NYXRoLm1heChpLHJbZV0ubGVuZ3RoKTtpZihuIT09aSlmb3IoZT0wO2U8ci5sZW5ndGg7ZSsrKXt2YXIgYT1pLXJbZV0ubGVuZ3RoO2EmJihyW2VdPXJbZV0uY29uY2F0KGMoYSkpKX1yZXR1cm4gcn1mdW5jdGlvbiBjKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodCkscj0wO3I8dDtyKyspZVtyXT0iIjtyZXR1cm4gZX1mdW5jdGlvbiB1KHQpe3JldHVybiB0LmNhbGNkYXRhLmNvbHVtbnMucmVkdWNlKGZ1bmN0aW9uKGUscil7cmV0dXJuIHIueEluZGV4PHQueEluZGV4P2Urci5jb2x1bW5XaWR0aDplfSwwKX1mdW5jdGlvbiBoKHQsZSl7cmV0dXJuIE9iamVjdC5rZXlzKHQpLm1hcChmdW5jdGlvbihyKXtyZXR1cm4gaSh7fSx0W3JdLHthdXhpbGlhcnlCbG9ja3M6ZX0pfSl9ZnVuY3Rpb24gZih0LGUpe2Zvcih2YXIgcixuPXt9LGk9MCxhPTAsbz17Zmlyc3RSb3dJbmRleDpudWxsLGxhc3RSb3dJbmRleDpudWxsLHJvd3M6W119LHM9MCxsPTAsYz0wO2M8dC5sZW5ndGg7YysrKXI9dFtjXSxvLnJvd3MucHVzaCh7cm93SW5kZXg6Yyxyb3dIZWlnaHQ6cn0pLCgoYSs9cik+PWV8fGM9PT10Lmxlbmd0aC0xKSYmKG5baV09byxvLmtleT1sKyssby5maXJzdFJvd0luZGV4PXMsby5sYXN0Um93SW5kZXg9YyxvPXtmaXJzdFJvd0luZGV4Om51bGwsbGFzdFJvd0luZGV4Om51bGwscm93czpbXX0saSs9YSxzPWMrMSxhPTApO3JldHVybiBufWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWwoZS5jZWxscy52YWx1ZXMpLHA9ZnVuY3Rpb24odCl7cmV0dXJuIHQuc2xpY2UoZS5oZWFkZXIudmFsdWVzLmxlbmd0aCx0Lmxlbmd0aCl9LGQ9bChlLmhlYWRlci52YWx1ZXMpO2QubGVuZ3RoJiYhZFswXS5sZW5ndGgmJihkWzBdPVsiIl0sZD1sKGQpKTt2YXIgZz1kLmNvbmNhdChwKHIpLm1hcChmdW5jdGlvbigpe3JldHVybiBjKChkWzBdfHxbIiJdKS5sZW5ndGgpfSkpLG09ZS5kb21haW4sdj1NYXRoLmZsb29yKHQuX2Z1bGxMYXlvdXQuX3NpemUudyoobS54WzFdLW0ueFswXSkpLHk9TWF0aC5mbG9vcih0Ll9mdWxsTGF5b3V0Ll9zaXplLmgqKG0ueVsxXS1tLnlbMF0pKSx4PWUuaGVhZGVyLnZhbHVlcy5sZW5ndGg/Z1swXS5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gZS5oZWFkZXIuaGVpZ2h0fSk6W24uZW1wdHlIZWFkZXJIZWlnaHRdLGI9ci5sZW5ndGg/clswXS5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gZS5jZWxscy5oZWlnaHR9KTpbXSxfPXgucmVkdWNlKHMsMCksdz1mKGIseS1fK24udXBsaWZ0KSxrPWgoZih4LF8pLFtdKSxNPWgodyxrKSxBPXt9LFQ9ZS5fZnVsbElucHV0LmNvbHVtbm9yZGVyLmNvbmNhdChwKHIubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGV9KSkpLFM9Zy5tYXAoZnVuY3Rpb24odCxyKXt2YXIgbj1BcnJheS5pc0FycmF5KGUuY29sdW1ud2lkdGgpP2UuY29sdW1ud2lkdGhbTWF0aC5taW4ocixlLmNvbHVtbndpZHRoLmxlbmd0aC0xKV06ZS5jb2x1bW53aWR0aDtyZXR1cm4gYShuKT9OdW1iZXIobik6MX0pLEU9Uy5yZWR1Y2UocywwKTtTPVMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0L0Uqdn0pO3ZhciBDPU1hdGgubWF4KG8oZS5oZWFkZXIubGluZS53aWR0aCksbyhlLmNlbGxzLmxpbmUud2lkdGgpKSxMPXtrZXk6ZS5pbmRleCx0cmFuc2xhdGVYOm0ueFswXSp0Ll9mdWxsTGF5b3V0Ll9zaXplLncsdHJhbnNsYXRlWTp0Ll9mdWxsTGF5b3V0Ll9zaXplLmgqKDEtbS55WzFdKSxzaXplOnQuX2Z1bGxMYXlvdXQuX3NpemUsd2lkdGg6dixtYXhMaW5lV2lkdGg6QyxoZWlnaHQ6eSxjb2x1bW5PcmRlcjpULGdyb3VwSGVpZ2h0Onkscm93QmxvY2tzOk0saGVhZGVyUm93QmxvY2tzOmssc2Nyb2xsWTowLGNlbGxzOmkoe30sZS5jZWxscyx7dmFsdWVzOnJ9KSxoZWFkZXJDZWxsczppKHt9LGUuaGVhZGVyLHt2YWx1ZXM6Z30pLGdkQ29sdW1uczpnLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdFswXX0pLGdkQ29sdW1uc09yaWdpbmFsT3JkZXI6Zy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF19KSxwcmV2UGFnZXM6WzAsMF0sc2Nyb2xsYmFyU3RhdGU6e3Njcm9sbGJhclNjcm9sbEluUHJvZ3Jlc3M6ITF9LGNvbHVtbnM6Zy5tYXAoZnVuY3Rpb24odCxlKXt2YXIgcj1BW3RdO3JldHVybiBBW3RdPShyfHwwKSsxLHtrZXk6dCsiX18iK0FbdF0sbGFiZWw6dCxzcGVjSW5kZXg6ZSx4SW5kZXg6VFtlXSx4U2NhbGU6dSx4OnZvaWQgMCxjYWxjZGF0YTp2b2lkIDAsY29sdW1uV2lkdGg6U1tlXX19KX07cmV0dXJuIEwuY29sdW1ucy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuY2FsY2RhdGE9TCx0Lng9dSh0KX0pLEx9fSx7Ii4uLy4uL2xpYi9leHRlbmQiOjY3MywiLi9jb25zdGFudHMiOjExMDgsImZhc3QtaXNudW1lcmljIjoyMTR9XSwxMTEwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0O3Iuc3BsaXRUb1BhbmVscz1mdW5jdGlvbih0KXt2YXIgZT1bMCwwXSxyPW4oe30sdCx7a2V5OiJoZWFkZXIiLHR5cGU6ImhlYWRlciIscGFnZTowLHByZXZQYWdlczplLGN1cnJlbnRSZXBhaW50OltudWxsLG51bGxdLGRyYWdIYW5kbGU6ITAsdmFsdWVzOnQuY2FsY2RhdGEuaGVhZGVyQ2VsbHMudmFsdWVzW3Quc3BlY0luZGV4XSxyb3dCbG9ja3M6dC5jYWxjZGF0YS5oZWFkZXJSb3dCbG9ja3MsY2FsY2RhdGE6bih7fSx0LmNhbGNkYXRhLHtjZWxsczp0LmNhbGNkYXRhLmhlYWRlckNlbGxzfSl9KTtyZXR1cm5bbih7fSx0LHtrZXk6ImNlbGxzMSIsdHlwZToiY2VsbHMiLHBhZ2U6MCxwcmV2UGFnZXM6ZSxjdXJyZW50UmVwYWludDpbbnVsbCxudWxsXSxkcmFnSGFuZGxlOiExLHZhbHVlczp0LmNhbGNkYXRhLmNlbGxzLnZhbHVlc1t0LnNwZWNJbmRleF0scm93QmxvY2tzOnQuY2FsY2RhdGEucm93QmxvY2tzfSksbih7fSx0LHtrZXk6ImNlbGxzMiIsdHlwZToiY2VsbHMiLHBhZ2U6MSxwcmV2UGFnZXM6ZSxjdXJyZW50UmVwYWludDpbbnVsbCxudWxsXSxkcmFnSGFuZGxlOiExLHZhbHVlczp0LmNhbGNkYXRhLmNlbGxzLnZhbHVlc1t0LnNwZWNJbmRleF0scm93QmxvY2tzOnQuY2FsY2RhdGEucm93QmxvY2tzfSkscl19LHIuc3BsaXRUb0NlbGxzPWZ1bmN0aW9uKHQpe3ZhciBlPWZ1bmN0aW9uKHQpe3ZhciBlPXQucm93QmxvY2tzW3QucGFnZV0scj1lP2Uucm93c1swXS5yb3dJbmRleDowLG49ZT9yK2Uucm93cy5sZW5ndGg6MDtyZXR1cm5bcixuXX0odCk7cmV0dXJuKHQudmFsdWVzfHxbXSkuc2xpY2UoZVswXSxlWzFdKS5tYXAoZnVuY3Rpb24ocixuKXtyZXR1cm57a2V5V2l0aGluQmxvY2s6bisoInN0cmluZyI9PXR5cGVvZiByJiZyLm1hdGNoKC9bPCQmPiBdLyk/Il9rZXlidXN0ZXJfIitNYXRoLnJhbmRvbSgpOiIiKSxrZXk6ZVswXStuLGNvbHVtbjp0LGNhbGNkYXRhOnQuY2FsY2RhdGEscGFnZTp0LnBhZ2Uscm93QmxvY2tzOnQucm93QmxvY2tzLHZhbHVlOnJ9fSl9fSx7Ii4uLy4uL2xpYi9leHRlbmQiOjY3M31dLDExMTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL3Bsb3RzL2RvbWFpbiIpLmRlZmF1bHRzO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvKXtmdW5jdGlvbiBzKHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxpLHIsYSl9YShlLG8scykscygiY29sdW1ud2lkdGgiKSxzKCJoZWFkZXIudmFsdWVzIikscygiaGVhZGVyLmZvcm1hdCIpLHMoImhlYWRlci5hbGlnbiIpLHMoImhlYWRlci5wcmVmaXgiKSxzKCJoZWFkZXIuc3VmZml4IikscygiaGVhZGVyLmhlaWdodCIpLHMoImhlYWRlci5saW5lLndpZHRoIikscygiaGVhZGVyLmxpbmUuY29sb3IiKSxzKCJoZWFkZXIuZmlsbC5jb2xvciIpLG4uY29lcmNlRm9udChzLCJoZWFkZXIuZm9udCIsbi5leHRlbmRGbGF0KHt9LG8uZm9udCkpLGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuY29sdW1ub3JkZXJ8fFtdLG49dC5oZWFkZXIudmFsdWVzLmxlbmd0aCxpPXIuc2xpY2UoMCxuKSxhPWkuc2xpY2UoKS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtZX0pLG89aS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGEuaW5kZXhPZih0KX0pLHM9by5sZW5ndGg7czxuO3MrKylvLnB1c2gocyk7ZSgiY29sdW1ub3JkZXIiLG8pfShlLHMpLHMoImNlbGxzLnZhbHVlcyIpLHMoImNlbGxzLmZvcm1hdCIpLHMoImNlbGxzLmFsaWduIikscygiY2VsbHMucHJlZml4IikscygiY2VsbHMuc3VmZml4IikscygiY2VsbHMuaGVpZ2h0IikscygiY2VsbHMubGluZS53aWR0aCIpLHMoImNlbGxzLmxpbmUuY29sb3IiKSxzKCJjZWxscy5maWxsLmNvbG9yIiksbi5jb2VyY2VGb250KHMsImNlbGxzLmZvbnQiLG4uZXh0ZW5kRmxhdCh7fSxvLmZvbnQpKSxlLl9sZW5ndGg9bnVsbH19LHsiLi4vLi4vbGliIjo2ODQsIi4uLy4uL3Bsb3RzL2RvbWFpbiI6NzU3LCIuL2F0dHJpYnV0ZXMiOjExMDV9XSwxMTEyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXt9O24uYXR0cmlidXRlcz10KCIuL2F0dHJpYnV0ZXMiKSxuLnN1cHBseURlZmF1bHRzPXQoIi4vZGVmYXVsdHMiKSxuLmNhbGM9dCgiLi9jYWxjIiksbi5wbG90PXQoIi4vcGxvdCIpLG4ubW9kdWxlVHlwZT0idHJhY2UiLG4ubmFtZT0idGFibGUiLG4uYmFzZVBsb3RNb2R1bGU9dCgiLi9iYXNlX3Bsb3QiKSxuLmNhdGVnb3JpZXM9WyJub09wYWNpdHkiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHsiLi9hdHRyaWJ1dGVzIjoxMTA1LCIuL2Jhc2VfcGxvdCI6MTEwNiwiLi9jYWxjIjoxMTA3LCIuL2RlZmF1bHRzIjoxMTExLCIuL3Bsb3QiOjExMTN9XSwxMTEzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vY29uc3RhbnRzIiksaT10KCJkMyIpLGE9dCgiLi4vLi4vbGliL2d1cCIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIikscz10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSxsPXQoIi4uLy4uL2xpYiIpLnJhaXNlVG9Ub3AsYz10KCIuLi8uLi9saWIiKS5jYW5jZWxUcmFuc2l0aW9uLHU9dCgiLi9kYXRhX3ByZXBhcmF0aW9uX2hlbHBlciIpLGg9dCgiLi9kYXRhX3NwbGl0X2hlbHBlcnMiKSxmPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKTtmdW5jdGlvbiBwKHQpe3JldHVybiBNYXRoLmNlaWwodC5jYWxjZGF0YS5tYXhMaW5lV2lkdGgvMil9ZnVuY3Rpb24gZCh0LGUpe3JldHVybiJjbGlwIit0Ll9mdWxsTGF5b3V0Ll91aWQrIl9zY3JvbGxBcmVhQm90dG9tQ2xpcF8iK2Uua2V5fWZ1bmN0aW9uIGcodCxlKXtyZXR1cm4iY2xpcCIrdC5fZnVsbExheW91dC5fdWlkKyJfY29sdW1uQm91bmRhcnlDbGlwcGF0aF8iK2UuY2FsY2RhdGEua2V5KyJfIitlLnNwZWNJbmRleH1mdW5jdGlvbiBtKHQpe3JldHVybltdLmNvbmNhdC5hcHBseShbXSx0Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdH0pKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuX19kYXRhX199KX1mdW5jdGlvbiB2KHQsZSxyKXt2YXIgbz10LnNlbGVjdEFsbCgiLiIrbi5jbi5zY3JvbGxiYXJLaXQpLmRhdGEoYS5yZXBlYXQsYS5rZXlGdW4pO28uZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKG4uY24uc2Nyb2xsYmFyS2l0LCEwKS5zdHlsZSgic2hhcGUtcmVuZGVyaW5nIiwiZ2VvbWV0cmljUHJlY2lzaW9uIiksby5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXQuc2Nyb2xsYmFyU3RhdGU7ZS50b3RhbEhlaWdodD1mdW5jdGlvbih0KXt2YXIgZT10LnJvd0Jsb2NrcztyZXR1cm4gSShlLGUubGVuZ3RoLTEpKyhlLmxlbmd0aD9PKGVbZS5sZW5ndGgtMV0sMS8wKToxKX0odCksZS5zY3JvbGxhYmxlQXJlYUhlaWdodD10Lmdyb3VwSGVpZ2h0LUEodCksZS5jdXJyZW50bHlWaXNpYmxlSGVpZ2h0PU1hdGgubWluKGUudG90YWxIZWlnaHQsZS5zY3JvbGxhYmxlQXJlYUhlaWdodCksZS5yYXRpbz1lLmN1cnJlbnRseVZpc2libGVIZWlnaHQvZS50b3RhbEhlaWdodCxlLmJhckxlbmd0aD1NYXRoLm1heChlLnJhdGlvKmUuY3VycmVudGx5VmlzaWJsZUhlaWdodCxuLmdvbGRlblJhdGlvKm4uc2Nyb2xsYmFyV2lkdGgpLGUuYmFyV2lnZ2xlUm9vbT1lLmN1cnJlbnRseVZpc2libGVIZWlnaHQtZS5iYXJMZW5ndGgsZS53aWdnbGVSb29tPU1hdGgubWF4KDAsZS50b3RhbEhlaWdodC1lLnNjcm9sbGFibGVBcmVhSGVpZ2h0KSxlLnRvcFk9MD09PWUuYmFyV2lnZ2xlUm9vbT8wOnQuc2Nyb2xsWS9lLndpZ2dsZVJvb20qZS5iYXJXaWdnbGVSb29tLGUuYm90dG9tWT1lLnRvcFkrZS5iYXJMZW5ndGgsZS5kcmFnTXVsdGlwbGllcj1lLndpZ2dsZVJvb20vZS5iYXJXaWdnbGVSb29tfSkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbih0KXtyZXR1cm4idHJhbnNsYXRlKCIrKHQud2lkdGgrbi5zY3JvbGxiYXJXaWR0aC8yK24uc2Nyb2xsYmFyT2Zmc2V0KSsiICIrQSh0KSsiKSJ9KTt2YXIgcz1vLnNlbGVjdEFsbCgiLiIrbi5jbi5zY3JvbGxiYXIpLmRhdGEoYS5yZXBlYXQsYS5rZXlGdW4pO3MuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKG4uY24uc2Nyb2xsYmFyLCEwKTt2YXIgbD1zLnNlbGVjdEFsbCgiLiIrbi5jbi5zY3JvbGxiYXJTbGlkZXIpLmRhdGEoYS5yZXBlYXQsYS5rZXlGdW4pO2wuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKG4uY24uc2Nyb2xsYmFyU2xpZGVyLCEwKSxsLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24odCl7cmV0dXJuInRyYW5zbGF0ZSgwICIrKHQuc2Nyb2xsYmFyU3RhdGUudG9wWXx8MCkrIikifSk7dmFyIGM9bC5zZWxlY3RBbGwoIi4iK24uY24uc2Nyb2xsYmFyR2x5cGgpLmRhdGEoYS5yZXBlYXQsYS5rZXlGdW4pO2MuZW50ZXIoKS5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKG4uY24uc2Nyb2xsYmFyR2x5cGgsITApLmF0dHIoInN0cm9rZSIsImJsYWNrIikuYXR0cigic3Ryb2tlLXdpZHRoIixuLnNjcm9sbGJhcldpZHRoKS5hdHRyKCJzdHJva2UtbGluZWNhcCIsInJvdW5kIikuYXR0cigieTEiLG4uc2Nyb2xsYmFyV2lkdGgvMiksYy5hdHRyKCJ5MiIsZnVuY3Rpb24odCl7cmV0dXJuIHQuc2Nyb2xsYmFyU3RhdGUuYmFyTGVuZ3RoLW4uc2Nyb2xsYmFyV2lkdGgvMn0pLmF0dHIoInN0cm9rZS1vcGFjaXR5IixmdW5jdGlvbih0KXtyZXR1cm4gdC5jb2x1bW5EcmFnSW5Qcm9ncmVzc3x8IXQuc2Nyb2xsYmFyU3RhdGUuYmFyV2lnZ2xlUm9vbXx8cj8wOi40fSksYy50cmFuc2l0aW9uKCkuZGVsYXkoMCkuZHVyYXRpb24oMCksYy50cmFuc2l0aW9uKCkuZGVsYXkobi5zY3JvbGxiYXJIaWRlRGVsYXkpLmR1cmF0aW9uKG4uc2Nyb2xsYmFySGlkZUR1cmF0aW9uKS5hdHRyKCJzdHJva2Utb3BhY2l0eSIsMCk7dmFyIHU9cy5zZWxlY3RBbGwoIi4iK24uY24uc2Nyb2xsYmFyQ2FwdHVyZVpvbmUpLmRhdGEoYS5yZXBlYXQsYS5rZXlGdW4pO3UuZW50ZXIoKS5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKG4uY24uc2Nyb2xsYmFyQ2FwdHVyZVpvbmUsITApLmF0dHIoInN0cm9rZSIsIndoaXRlIikuYXR0cigic3Ryb2tlLW9wYWNpdHkiLC4wMSkuYXR0cigic3Ryb2tlLXdpZHRoIixuLnNjcm9sbGJhckNhcHR1cmVXaWR0aCkuYXR0cigic3Ryb2tlLWxpbmVjYXAiLCJidXR0IikuYXR0cigieTEiLDApLm9uKCJtb3VzZWRvd24iLGZ1bmN0aW9uKHIpe3ZhciBuPWkuZXZlbnQueSxhPXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbz1yLnNjcm9sbGJhclN0YXRlLHM9bi1hLnRvcCxsPWkuc2NhbGUubGluZWFyKCkuZG9tYWluKFswLG8uc2Nyb2xsYWJsZUFyZWFIZWlnaHRdKS5yYW5nZShbMCxvLnRvdGFsSGVpZ2h0XSkuY2xhbXAoITApO28udG9wWTw9cyYmczw9by5ib3R0b21ZfHxTKGUsdCxudWxsLGwocy1vLmJhckxlbmd0aC8yKSkocil9KS5jYWxsKGkuYmVoYXZpb3IuZHJhZygpLm9yaWdpbihmdW5jdGlvbih0KXtyZXR1cm4gaS5ldmVudC5zdG9wUHJvcGFnYXRpb24oKSx0LnNjcm9sbGJhclN0YXRlLnNjcm9sbGJhclNjcm9sbEluUHJvZ3Jlc3M9ITAsdH0pLm9uKCJkcmFnIixTKGUsdCkpLm9uKCJkcmFnZW5kIixmdW5jdGlvbigpe30pKSx1LmF0dHIoInkyIixmdW5jdGlvbih0KXtyZXR1cm4gdC5zY3JvbGxiYXJTdGF0ZS5zY3JvbGxhYmxlQXJlYUhlaWdodH0pfWZ1bmN0aW9uIHkodCxlLHIscyl7dmFyIGw9ZnVuY3Rpb24odCl7dmFyIGU9dC5zZWxlY3RBbGwoIi4iK24uY24uY29sdW1uQ2VsbCkuZGF0YShoLnNwbGl0VG9DZWxscyxmdW5jdGlvbih0KXtyZXR1cm4gdC5rZXlXaXRoaW5CbG9ja30pO3JldHVybiBlLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChuLmNuLmNvbHVtbkNlbGwsITApLGUuZXhpdCgpLnJlbW92ZSgpLGV9KGZ1bmN0aW9uKHQpe3ZhciBlPXQuc2VsZWN0QWxsKCIuIituLmNuLmNvbHVtbkNlbGxzKS5kYXRhKGEucmVwZWF0LGEua2V5RnVuKTtyZXR1cm4gZS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQobi5jbi5jb2x1bW5DZWxscywhMCksZS5leGl0KCkucmVtb3ZlKCksZX0ocikpOyFmdW5jdGlvbih0KXt0LmVhY2goZnVuY3Rpb24odCxlKXt2YXIgcj10LmNhbGNkYXRhLmNlbGxzLmZvbnQsbj10LmNvbHVtbi5zcGVjSW5kZXgsaT17c2l6ZTpfKHIuc2l6ZSxuLGUpLGNvbG9yOl8oci5jb2xvcixuLGUpLGZhbWlseTpfKHIuZmFtaWx5LG4sZSl9O3Qucm93TnVtYmVyPXQua2V5LHQuYWxpZ249Xyh0LmNhbGNkYXRhLmNlbGxzLmFsaWduLG4sZSksdC5jZWxsQm9yZGVyV2lkdGg9Xyh0LmNhbGNkYXRhLmNlbGxzLmxpbmUud2lkdGgsbixlKSx0LmZvbnQ9aX0pfShsKSxmdW5jdGlvbih0KXt0LmF0dHIoIndpZHRoIixmdW5jdGlvbih0KXtyZXR1cm4gdC5jb2x1bW4uY29sdW1uV2lkdGh9KS5hdHRyKCJzdHJva2Utd2lkdGgiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmNlbGxCb3JkZXJXaWR0aH0pLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9aS5zZWxlY3QodGhpcyk7Zi5zdHJva2UoZSxfKHQuY2FsY2RhdGEuY2VsbHMubGluZS5jb2xvcix0LmNvbHVtbi5zcGVjSW5kZXgsdC5yb3dOdW1iZXIpKSxmLmZpbGwoZSxfKHQuY2FsY2RhdGEuY2VsbHMuZmlsbC5jb2xvcix0LmNvbHVtbi5zcGVjSW5kZXgsdC5yb3dOdW1iZXIpKX0pfShmdW5jdGlvbih0KXt2YXIgZT10LnNlbGVjdEFsbCgiLiIrbi5jbi5jZWxsUmVjdCkuZGF0YShhLnJlcGVhdCxmdW5jdGlvbih0KXtyZXR1cm4gdC5rZXlXaXRoaW5CbG9ja30pO3JldHVybiBlLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuY2xhc3NlZChuLmNuLmNlbGxSZWN0LCEwKSxlfShsKSk7dmFyIGM9ZnVuY3Rpb24odCl7dmFyIGU9dC5zZWxlY3RBbGwoIi4iK24uY24uY2VsbFRleHQpLmRhdGEoYS5yZXBlYXQsZnVuY3Rpb24odCl7cmV0dXJuIHQua2V5V2l0aGluQmxvY2t9KTtyZXR1cm4gZS5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmNsYXNzZWQobi5jbi5jZWxsVGV4dCwhMCkuc3R5bGUoImN1cnNvciIsZnVuY3Rpb24oKXtyZXR1cm4iYXV0byJ9KS5vbigibW91c2Vkb3duIixmdW5jdGlvbigpe2kuZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCl9KSxlfShmdW5jdGlvbih0KXt2YXIgZT10LnNlbGVjdEFsbCgiLiIrbi5jbi5jZWxsVGV4dEhvbGRlcikuZGF0YShhLnJlcGVhdCxmdW5jdGlvbih0KXtyZXR1cm4gdC5rZXlXaXRoaW5CbG9ja30pO3JldHVybiBlLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChuLmNuLmNlbGxUZXh0SG9sZGVyLCEwKS5zdHlsZSgic2hhcGUtcmVuZGVyaW5nIiwiZ2VvbWV0cmljUHJlY2lzaW9uIiksZX0obCkpOyFmdW5jdGlvbih0KXt0LmVhY2goZnVuY3Rpb24odCl7by5mb250KGkuc2VsZWN0KHRoaXMpLHQuZm9udCl9KX0oYykseChjLGUscyx0KSxQKGwpfWZ1bmN0aW9uIHgodCxlLHIsYSl7dC50ZXh0KGZ1bmN0aW9uKHQpe3ZhciBlPXQuY29sdW1uLnNwZWNJbmRleCxyPXQucm93TnVtYmVyLGE9dC52YWx1ZSxvPSJzdHJpbmciPT10eXBlb2YgYSxzPW8mJmEubWF0Y2goLzxicj4vaSksbD0hb3x8czt0Lm1heUhhdmVNYXJrdXA9byYmYS5tYXRjaCgvWzwmPl0vKTt2YXIgYyx1PSJzdHJpbmciPT10eXBlb2YoYz1hKSYmYy5tYXRjaChuLmxhdGV4Q2hlY2spO3QubGF0ZXg9dTt2YXIgaCxmLHA9dT8iIjpfKHQuY2FsY2RhdGEuY2VsbHMucHJlZml4LGUscil8fCIiLGQ9dT8iIjpfKHQuY2FsY2RhdGEuY2VsbHMuc3VmZml4LGUscil8fCIiLGc9dT9udWxsOl8odC5jYWxjZGF0YS5jZWxscy5mb3JtYXQsZSxyKXx8bnVsbCxtPXArKGc/aS5mb3JtYXQoZykodC52YWx1ZSk6dC52YWx1ZSkrZDtpZih0LndyYXBwaW5nTmVlZGVkPSF0LndyYXBwZWQmJiFsJiYhdSYmKGg9YihtKSksdC5jZWxsSGVpZ2h0TWF5SW5jcmVhc2U9c3x8dXx8dC5tYXlIYXZlTWFya3VwfHwodm9pZCAwPT09aD9iKG0pOmgpLHQubmVlZHNDb252ZXJ0VG9Uc3BhbnM9dC5tYXlIYXZlTWFya3VwfHx0LndyYXBwaW5nTmVlZGVkfHx0LmxhdGV4LHQud3JhcHBpbmdOZWVkZWQpe3ZhciB2PSgiICI9PT1uLndyYXBTcGxpdENoYXJhY3Rlcj9tLnJlcGxhY2UoLzxhIGhyZWY9L2lnLCI8YV9ocmVmPSIpOm0pLnNwbGl0KG4ud3JhcFNwbGl0Q2hhcmFjdGVyKSx5PSIgIj09PW4ud3JhcFNwbGl0Q2hhcmFjdGVyP3YubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlcGxhY2UoLzxhX2hyZWY9L2lnLCI8YSBocmVmPSIpfSk6djt0LmZyYWdtZW50cz15Lm1hcChmdW5jdGlvbih0KXtyZXR1cm57dGV4dDp0LHdpZHRoOm51bGx9fSksdC5mcmFnbWVudHMucHVzaCh7ZnJhZ21lbnQ6bi53cmFwU3BhY2VyLHdpZHRoOm51bGx9KSxmPXkuam9pbihuLmxpbmVCcmVha2VyKStuLmxpbmVCcmVha2VyK24ud3JhcFNwYWNlcn1lbHNlIGRlbGV0ZSB0LmZyYWdtZW50cyxmPW07cmV0dXJuIGZ9KS5hdHRyKCJkeSIsZnVuY3Rpb24odCl7cmV0dXJuIHQubmVlZHNDb252ZXJ0VG9Uc3BhbnM/MDoiMC43NWVtIn0pLmVhY2goZnVuY3Rpb24odCl7dmFyIG89aS5zZWxlY3QodGhpcyksbD10LndyYXBwaW5nTmVlZGVkP0M6TDt0Lm5lZWRzQ29udmVydFRvVHNwYW5zP3MuY29udmVydFRvVHNwYW5zKG8sYSxsKHIsdGhpcyxlLGEsdCkpOmkuc2VsZWN0KHRoaXMucGFyZW50Tm9kZSkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbih0KXtyZXR1cm4idHJhbnNsYXRlKCIreih0KSsiICIrbi5jZWxsUGFkKyIpIn0pLmF0dHIoInRleHQtYW5jaG9yIixmdW5jdGlvbih0KXtyZXR1cm57bGVmdDoic3RhcnQiLGNlbnRlcjoibWlkZGxlIixyaWdodDoiZW5kIn1bdC5hbGlnbl19KX0pfWZ1bmN0aW9uIGIodCl7cmV0dXJuLTEhPT10LmluZGV4T2Yobi53cmFwU3BsaXRDaGFyYWN0ZXIpfWZ1bmN0aW9uIF8odCxlLHIpe2lmKEFycmF5LmlzQXJyYXkodCkpe3ZhciBuPXRbTWF0aC5taW4oZSx0Lmxlbmd0aC0xKV07cmV0dXJuIEFycmF5LmlzQXJyYXkobik/bltNYXRoLm1pbihyLG4ubGVuZ3RoLTEpXTpufXJldHVybiB0fWZ1bmN0aW9uIHcodCxlLHIpe3QudHJhbnNpdGlvbigpLmVhc2Uobi5yZWxlYXNlVHJhbnNpdGlvbkVhc2UpLmR1cmF0aW9uKG4ucmVsZWFzZVRyYW5zaXRpb25EdXJhdGlvbikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrZS54KyIgIityKyIpIil9ZnVuY3Rpb24gayh0KXtyZXR1cm4iY2VsbHMiPT09dC50eXBlfWZ1bmN0aW9uIE0odCl7cmV0dXJuImhlYWRlciI9PT10LnR5cGV9ZnVuY3Rpb24gQSh0KXtyZXR1cm4odC5yb3dCbG9ja3MubGVuZ3RoP3Qucm93QmxvY2tzWzBdLmF1eGlsaWFyeUJsb2NrczpbXSkucmVkdWNlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrTyhlLDEvMCl9LDApfWZ1bmN0aW9uIFQodCxlLHIpe3ZhciBuPW0oZSlbMF07aWYodm9pZCAwIT09bil7dmFyIGk9bi5yb3dCbG9ja3MsYT1uLmNhbGNkYXRhLG89SShpLGkubGVuZ3RoKSxzPW4uY2FsY2RhdGEuZ3JvdXBIZWlnaHQtQShuKSxsPWEuc2Nyb2xsWT1NYXRoLm1heCgwLE1hdGgubWluKG8tcyxhLnNjcm9sbFkpKSxjPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49W10saT0wLGE9MDthPHQubGVuZ3RoO2ErKyl7Zm9yKHZhciBvPXRbYV0scz1vLnJvd3MsbD0wLGM9MDtjPHMubGVuZ3RoO2MrKylsKz1zW2NdLnJvd0hlaWdodDtvLmFsbFJvd3NIZWlnaHQ9bCxlPGkrbCYmZStyPmkmJm4ucHVzaChhKSxpKz1sfXJldHVybiBufShpLGwscyk7MT09PWMubGVuZ3RoJiYoY1swXT09PWkubGVuZ3RoLTE/Yy51bnNoaWZ0KGNbMF0tMSk6Yy5wdXNoKGNbMF0rMSkpLGNbMF0lMiYmYy5yZXZlcnNlKCksZS5lYWNoKGZ1bmN0aW9uKHQsZSl7dC5wYWdlPWNbZV0sdC5zY3JvbGxZPWx9KSxlLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24odCl7cmV0dXJuInRyYW5zbGF0ZSgwICIrKEkodC5yb3dCbG9ja3MsdC5wYWdlKS10LnNjcm9sbFkpKyIpIn0pLHQmJihFKHQscixlLGMsbi5wcmV2UGFnZXMsbiwwKSxFKHQscixlLGMsbi5wcmV2UGFnZXMsbiwxKSx2KHIsdCkpfX1mdW5jdGlvbiBTKHQsZSxyLGEpe3JldHVybiBmdW5jdGlvbihvKXt2YXIgcz1vLmNhbGNkYXRhP28uY2FsY2RhdGE6byxsPWUuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiBzLmtleT09PXQua2V5fSksYz1yfHxzLnNjcm9sbGJhclN0YXRlLmRyYWdNdWx0aXBsaWVyO3Muc2Nyb2xsWT12b2lkIDA9PT1hP3Muc2Nyb2xsWStjKmkuZXZlbnQuZHk6YTt2YXIgdT1sLnNlbGVjdEFsbCgiLiIrbi5jbi55Q29sdW1uKS5zZWxlY3RBbGwoIi4iK24uY24uY29sdW1uQmxvY2spLmZpbHRlcihrKTtUKHQsdSxsKX19ZnVuY3Rpb24gRSh0LGUscixuLGksYSxvKXtuW29dIT09aVtvXSYmKGNsZWFyVGltZW91dChhLmN1cnJlbnRSZXBhaW50W29dKSxhLmN1cnJlbnRSZXBhaW50W29dPXNldFRpbWVvdXQoZnVuY3Rpb24oKXt2YXIgYT1yLmZpbHRlcihmdW5jdGlvbih0LGUpe3JldHVybiBlPT09byYmbltlXSE9PWlbZV19KTt5KHQsZSxhLHIpLGlbb109bltvXX0pKX1mdW5jdGlvbiBDKHQsZSxyKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1pLnNlbGVjdChlLnBhcmVudE5vZGUpO2EuZWFjaChmdW5jdGlvbih0KXt2YXIgZT10LmZyYWdtZW50czthLnNlbGVjdEFsbCgidHNwYW4ubGluZSIpLmVhY2goZnVuY3Rpb24odCxyKXtlW3JdLndpZHRoPXRoaXMuZ2V0Q29tcHV0ZWRUZXh0TGVuZ3RoKCl9KTt2YXIgcixpLG89ZVtlLmxlbmd0aC0xXS53aWR0aCxzPWUuc2xpY2UoMCwtMSksbD1bXSxjPTAsdT10LmNvbHVtbi5jb2x1bW5XaWR0aC0yKm4uY2VsbFBhZDtmb3IodC52YWx1ZT0iIjtzLmxlbmd0aDspYysoaT0ocj1zLnNoaWZ0KCkpLndpZHRoK28pPnUmJih0LnZhbHVlKz1sLmpvaW4obi53cmFwU3BhY2VyKStuLmxpbmVCcmVha2VyLGw9W10sYz0wKSxsLnB1c2goci50ZXh0KSxjKz1pO2MmJih0LnZhbHVlKz1sLmpvaW4obi53cmFwU3BhY2VyKSksdC53cmFwcGVkPSEwfSksYS5zZWxlY3RBbGwoInRzcGFuLmxpbmUiKS5yZW1vdmUoKSx4KGEuc2VsZWN0KCIuIituLmNuLmNlbGxUZXh0KSxyLHQpLGkuc2VsZWN0KGUucGFyZW50Tm9kZS5wYXJlbnROb2RlKS5jYWxsKFApfX1mdW5jdGlvbiBMKHQsZSxyLGEsbyl7cmV0dXJuIGZ1bmN0aW9uKCl7aWYoIW8uc2V0dGxlZFkpe3ZhciBzPWkuc2VsZWN0KGUucGFyZW50Tm9kZSksbD1SKG8pLGM9by5rZXktbC5maXJzdFJvd0luZGV4LHU9bC5yb3dzW2NdLnJvd0hlaWdodCxoPW8uY2VsbEhlaWdodE1heUluY3JlYXNlP2UucGFyZW50Tm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQrMipuLmNlbGxQYWQ6dSxmPU1hdGgubWF4KGgsdSk7Zi1sLnJvd3NbY10ucm93SGVpZ2h0JiYobC5yb3dzW2NdLnJvd0hlaWdodD1mLHQuc2VsZWN0QWxsKCIuIituLmNuLmNvbHVtbkNlbGwpLmNhbGwoUCksVChudWxsLHQuZmlsdGVyKGspLDApLHYocixhLCEwKSkscy5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wYXJlbnROb2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGU9aS5zZWxlY3QodGhpcy5wYXJlbnROb2RlKS5zZWxlY3QoIi4iK24uY24uY2VsbFJlY3QpLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxyPXRoaXMudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSxhPWUudG9wLXQudG9wKyhyP3IubWF0cml4LmY6bi5jZWxsUGFkKTtyZXR1cm4idHJhbnNsYXRlKCIreihvLGkuc2VsZWN0KHRoaXMucGFyZW50Tm9kZSkuc2VsZWN0KCIuIituLmNuLmNlbGxUZXh0SG9sZGVyKS5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgpKyIgIithKyIpIn0pLG8uc2V0dGxlZFk9ITB9fX1mdW5jdGlvbiB6KHQsZSl7c3dpdGNoKHQuYWxpZ24pe2Nhc2UibGVmdCI6cmV0dXJuIG4uY2VsbFBhZDtjYXNlInJpZ2h0IjpyZXR1cm4gdC5jb2x1bW4uY29sdW1uV2lkdGgtKGV8fDApLW4uY2VsbFBhZDtjYXNlImNlbnRlciI6cmV0dXJuKHQuY29sdW1uLmNvbHVtbldpZHRoLShlfHwwKSkvMjtkZWZhdWx0OnJldHVybiBuLmNlbGxQYWR9fWZ1bmN0aW9uIFAodCl7dC5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKHQpe3ZhciBlPXQucm93QmxvY2tzWzBdLmF1eGlsaWFyeUJsb2Nrcy5yZWR1Y2UoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtPKGUsMS8wKX0sMCk7cmV0dXJuInRyYW5zbGF0ZSgwICIrKE8oUih0KSx0LmtleSkrZSkrIikifSkuc2VsZWN0QWxsKCIuIituLmNuLmNlbGxSZWN0KS5hdHRyKCJoZWlnaHQiLGZ1bmN0aW9uKHQpe3JldHVybihlPVIodCkscj10LmtleSxlLnJvd3Nbci1lLmZpcnN0Um93SW5kZXhdKS5yb3dIZWlnaHQ7dmFyIGUscn0pfWZ1bmN0aW9uIEkodCxlKXtmb3IodmFyIHI9MCxuPWUtMTtuPj0wO24tLSlyKz1EKHRbbl0pO3JldHVybiByfWZ1bmN0aW9uIE8odCxlKXtmb3IodmFyIHI9MCxuPTA7bjx0LnJvd3MubGVuZ3RoJiZ0LnJvd3Nbbl0ucm93SW5kZXg8ZTtuKyspcis9dC5yb3dzW25dLnJvd0hlaWdodDtyZXR1cm4gcn1mdW5jdGlvbiBEKHQpe3ZhciBlPXQuYWxsUm93c0hlaWdodDtpZih2b2lkIDAhPT1lKXJldHVybiBlO2Zvcih2YXIgcj0wLG49MDtuPHQucm93cy5sZW5ndGg7bisrKXIrPXQucm93c1tuXS5yb3dIZWlnaHQ7cmV0dXJuIHQuYWxsUm93c0hlaWdodD1yLHJ9ZnVuY3Rpb24gUih0KXtyZXR1cm4gdC5yb3dCbG9ja3NbdC5wYWdlXX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9mdWxsTGF5b3V0Ll9wYXBlci5zZWxlY3RBbGwoIi4iK24uY24udGFibGUpLmRhdGEoZS5tYXAoZnVuY3Rpb24oZSl7dmFyIHI9YS51bndyYXAoZSkudHJhY2U7cmV0dXJuIHUodCxyKX0pLGEua2V5RnVuKTtyLmV4aXQoKS5yZW1vdmUoKSxyLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChuLmNuLnRhYmxlLCEwKS5hdHRyKCJvdmVyZmxvdyIsInZpc2libGUiKS5zdHlsZSgiYm94LXNpemluZyIsImNvbnRlbnQtYm94Iikuc3R5bGUoInBvc2l0aW9uIiwiYWJzb2x1dGUiKS5zdHlsZSgibGVmdCIsMCkuc3R5bGUoIm92ZXJmbG93IiwidmlzaWJsZSIpLnN0eWxlKCJzaGFwZS1yZW5kZXJpbmciLCJjcmlzcEVkZ2VzIikuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYWxsIiksci5hdHRyKCJ3aWR0aCIsZnVuY3Rpb24odCl7cmV0dXJuIHQud2lkdGgrdC5zaXplLmwrdC5zaXplLnJ9KS5hdHRyKCJoZWlnaHQiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmhlaWdodCt0LnNpemUudCt0LnNpemUuYn0pLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24odCl7cmV0dXJuInRyYW5zbGF0ZSgiK3QudHJhbnNsYXRlWCsiLCIrdC50cmFuc2xhdGVZKyIpIn0pO3ZhciBzPXIuc2VsZWN0QWxsKCIuIituLmNuLnRhYmxlQ29udHJvbFZpZXcpLmRhdGEoYS5yZXBlYXQsYS5rZXlGdW4pO3MuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKG4uY24udGFibGVDb250cm9sVmlldywhMCkuc3R5bGUoImJveC1zaXppbmciLCJjb250ZW50LWJveCIpLm9uKCJtb3VzZW1vdmUiLGZ1bmN0aW9uKGUpe3MuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiBlPT09dH0pLmNhbGwodix0KX0pLm9uKCJtb3VzZXdoZWVsIixmdW5jdGlvbihlKXtlLnNjcm9sbGJhclN0YXRlLndoZWVsaW5nfHwoZS5zY3JvbGxiYXJTdGF0ZS53aGVlbGluZz0hMCxpLmV2ZW50LnN0b3BQcm9wYWdhdGlvbigpLGkuZXZlbnQucHJldmVudERlZmF1bHQoKSxTKHQscyxudWxsLGUuc2Nyb2xsWStpLmV2ZW50LmRlbHRhWSkoZSksZS5zY3JvbGxiYXJTdGF0ZS53aGVlbGluZz0hMSl9KS5jYWxsKHYsdCwhMCkscy5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKHQpe3JldHVybiJ0cmFuc2xhdGUoIit0LnNpemUubCsiICIrdC5zaXplLnQrIikifSk7dmFyIGY9cy5zZWxlY3RBbGwoIi4iK24uY24uc2Nyb2xsQmFja2dyb3VuZCkuZGF0YShhLnJlcGVhdCxhLmtleUZ1bik7Zi5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQobi5jbi5zY3JvbGxCYWNrZ3JvdW5kLCEwKS5hdHRyKCJmaWxsIiwibm9uZSIpLGYuYXR0cigid2lkdGgiLGZ1bmN0aW9uKHQpe3JldHVybiB0LndpZHRofSkuYXR0cigiaGVpZ2h0IixmdW5jdGlvbih0KXtyZXR1cm4gdC5oZWlnaHR9KSxzLmVhY2goZnVuY3Rpb24oZSl7by5zZXRDbGlwVXJsKGkuc2VsZWN0KHRoaXMpLGQodCxlKSl9KTt2YXIgeD1zLnNlbGVjdEFsbCgiLiIrbi5jbi55Q29sdW1uKS5kYXRhKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbHVtbnN9LGEua2V5RnVuKTt4LmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChuLmNuLnlDb2x1bW4sITApLHguZXhpdCgpLnJlbW92ZSgpLHguYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbih0KXtyZXR1cm4idHJhbnNsYXRlKCIrdC54KyIgMCkifSkuY2FsbChpLmJlaGF2aW9yLmRyYWcoKS5vcmlnaW4oZnVuY3Rpb24oZSl7cmV0dXJuIHcoaS5zZWxlY3QodGhpcyksZSwtbi51cGxpZnQpLGwodGhpcyksZS5jYWxjZGF0YS5jb2x1bW5EcmFnSW5Qcm9ncmVzcz0hMCx2KHMuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiBlLmNhbGNkYXRhLmtleT09PXQua2V5fSksdCksZX0pLm9uKCJkcmFnIixmdW5jdGlvbih0KXt2YXIgZT1pLnNlbGVjdCh0aGlzKSxyPWZ1bmN0aW9uKGUpe3JldHVybih0PT09ZT9pLmV2ZW50Lng6ZS54KStlLmNvbHVtbldpZHRoLzJ9O3QueD1NYXRoLm1heCgtbi5vdmVyZHJhZyxNYXRoLm1pbih0LmNhbGNkYXRhLndpZHRoK24ub3ZlcmRyYWctdC5jb2x1bW5XaWR0aCxpLmV2ZW50LngpKSxtKHgpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZS5jYWxjZGF0YS5rZXk9PT10LmNhbGNkYXRhLmtleX0pLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gcih0KS1yKGUpfSkuZm9yRWFjaChmdW5jdGlvbihlLHIpe2UueEluZGV4PXIsZS54PXQ9PT1lP2UueDplLnhTY2FsZShlKX0pLHguZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiB0IT09ZX0pLnRyYW5zaXRpb24oKS5lYXNlKG4udHJhbnNpdGlvbkVhc2UpLmR1cmF0aW9uKG4udHJhbnNpdGlvbkR1cmF0aW9uKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKHQpe3JldHVybiJ0cmFuc2xhdGUoIit0LngrIiAwKSJ9KSxlLmNhbGwoYykuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdC54KyIgLSIrbi51cGxpZnQrIiApIil9KS5vbigiZHJhZ2VuZCIsZnVuY3Rpb24oZSl7dmFyIHI9aS5zZWxlY3QodGhpcyksbj1lLmNhbGNkYXRhO2UueD1lLnhTY2FsZShlKSxlLmNhbGNkYXRhLmNvbHVtbkRyYWdJblByb2dyZXNzPSExLHcocixlLDApLGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lLmdkQ29sdW1uc09yaWdpbmFsT3JkZXI7ZS5nZENvbHVtbnMuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiByW24uaW5kZXhPZih0KV0tcltuLmluZGV4T2YoZSldfSksZS5jb2x1bW5vcmRlcj1yLHQuZW1pdCgicGxvdGx5X3Jlc3R5bGUiKX0odCxuLG4uY29sdW1ucy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQueEluZGV4fSkpfSkpLHguZWFjaChmdW5jdGlvbihlKXtvLnNldENsaXBVcmwoaS5zZWxlY3QodGhpcyksZyh0LGUpKX0pO3ZhciBiPXguc2VsZWN0QWxsKCIuIituLmNuLmNvbHVtbkJsb2NrKS5kYXRhKGguc3BsaXRUb1BhbmVscyxhLmtleUZ1bik7Yi5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQobi5jbi5jb2x1bW5CbG9jaywhMCkuYXR0cigiaWQiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmtleX0pLGIuc3R5bGUoImN1cnNvciIsZnVuY3Rpb24odCl7cmV0dXJuIHQuZHJhZ0hhbmRsZT8iZXctcmVzaXplIjp0LmNhbGNkYXRhLnNjcm9sbGJhclN0YXRlLmJhcldpZ2dsZVJvb20/Im5zLXJlc2l6ZSI6ImRlZmF1bHQifSk7dmFyIF89Yi5maWx0ZXIoTSksQT1iLmZpbHRlcihrKTtBLmNhbGwoaS5iZWhhdmlvci5kcmFnKCkub3JpZ2luKGZ1bmN0aW9uKHQpe3JldHVybiBpLmV2ZW50LnN0b3BQcm9wYWdhdGlvbigpLHR9KS5vbigiZHJhZyIsUyh0LHMsLTEpKS5vbigiZHJhZ2VuZCIsZnVuY3Rpb24oKXt9KSkseSh0LHMsXyxiKSx5KHQscyxBLGIpO3ZhciBFPXMuc2VsZWN0QWxsKCIuIituLmNuLnNjcm9sbEFyZWFDbGlwKS5kYXRhKGEucmVwZWF0LGEua2V5RnVuKTtFLmVudGVyKCkuYXBwZW5kKCJjbGlwUGF0aCIpLmNsYXNzZWQobi5jbi5zY3JvbGxBcmVhQ2xpcCwhMCkuYXR0cigiaWQiLGZ1bmN0aW9uKGUpe3JldHVybiBkKHQsZSl9KTt2YXIgQz1FLnNlbGVjdEFsbCgiLiIrbi5jbi5zY3JvbGxBcmVhQ2xpcFJlY3QpLmRhdGEoYS5yZXBlYXQsYS5rZXlGdW4pO0MuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKG4uY24uc2Nyb2xsQXJlYUNsaXBSZWN0LCEwKS5hdHRyKCJ4Iiwtbi5vdmVyZHJhZykuYXR0cigieSIsLW4udXBsaWZ0KS5hdHRyKCJmaWxsIiwibm9uZSIpLEMuYXR0cigid2lkdGgiLGZ1bmN0aW9uKHQpe3JldHVybiB0LndpZHRoKzIqbi5vdmVyZHJhZ30pLmF0dHIoImhlaWdodCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuaGVpZ2h0K24udXBsaWZ0fSkseC5zZWxlY3RBbGwoIi4iK24uY24uY29sdW1uQm91bmRhcnkpLmRhdGEoYS5yZXBlYXQsYS5rZXlGdW4pLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChuLmNuLmNvbHVtbkJvdW5kYXJ5LCEwKTt2YXIgTD14LnNlbGVjdEFsbCgiLiIrbi5jbi5jb2x1bW5Cb3VuZGFyeUNsaXBwYXRoKS5kYXRhKGEucmVwZWF0LGEua2V5RnVuKTtMLmVudGVyKCkuYXBwZW5kKCJjbGlwUGF0aCIpLmNsYXNzZWQobi5jbi5jb2x1bW5Cb3VuZGFyeUNsaXBwYXRoLCEwKSxMLmF0dHIoImlkIixmdW5jdGlvbihlKXtyZXR1cm4gZyh0LGUpfSk7dmFyIHo9TC5zZWxlY3RBbGwoIi4iK24uY24uY29sdW1uQm91bmRhcnlSZWN0KS5kYXRhKGEucmVwZWF0LGEua2V5RnVuKTt6LmVudGVyKCkuYXBwZW5kKCJyZWN0IikuY2xhc3NlZChuLmNuLmNvbHVtbkJvdW5kYXJ5UmVjdCwhMCkuYXR0cigiZmlsbCIsIm5vbmUiKSx6LmF0dHIoIndpZHRoIixmdW5jdGlvbih0KXtyZXR1cm4gdC5jb2x1bW5XaWR0aCsyKnAodCl9KS5hdHRyKCJoZWlnaHQiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmNhbGNkYXRhLmhlaWdodCsyKnAodCkrbi51cGxpZnR9KS5hdHRyKCJ4IixmdW5jdGlvbih0KXtyZXR1cm4tcCh0KX0pLmF0dHIoInkiLGZ1bmN0aW9uKHQpe3JldHVybi1wKHQpfSksVChudWxsLEEscyl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjU1OCwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo1ODMsIi4uLy4uL2xpYiI6Njg0LCIuLi8uLi9saWIvZ3VwIjo2ODEsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6NzA4LCIuL2NvbnN0YW50cyI6MTEwOCwiLi9kYXRhX3ByZXBhcmF0aW9uX2hlbHBlciI6MTEwOSwiLi9kYXRhX3NwbGl0X2hlbHBlcnMiOjExMTAsZDM6MTQ3fV0sMTExNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9ib3gvYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPXt5Om4ueSx4Om4ueCx4MDpuLngwLHkwOm4ueTAsbmFtZTpuLm5hbWUsb3JpZW50YXRpb246aSh7fSxuLm9yaWVudGF0aW9uLHt9KSxiYW5kd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZWRpdFR5cGU6ImNhbGMifSxzY2FsZWdyb3VwOnt2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6ImNhbGMifSxzY2FsZW1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIndpZHRoIiwiY291bnQiXSxkZmx0OiJ3aWR0aCIsZWRpdFR5cGU6ImNhbGMifSxzcGFubW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsic29mdCIsImhhcmQiLCJtYW51YWwiXSxkZmx0OiJzb2Z0IixlZGl0VHlwZToiY2FsYyJ9LHNwYW46e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGl0ZW1zOlt7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYyJ9LHt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjIn1dLGVkaXRUeXBlOiJjYWxjIn0sbGluZTp7Y29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToic3R5bGUifSx3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjIsZWRpdFR5cGU6InN0eWxlIn0sZWRpdFR5cGU6InBsb3QifSxmaWxsY29sb3I6bi5maWxsY29sb3IscG9pbnRzOmkoe30sbi5ib3hwb2ludHMse30pLGppdHRlcjppKHt9LG4uaml0dGVyLHt9KSxwb2ludHBvczppKHt9LG4ucG9pbnRwb3Mse30pLG1hcmtlcjpuLm1hcmtlcix0ZXh0Om4udGV4dCxib3g6e3Zpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6InBsb3QifSx3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0Oi4yNSxlZGl0VHlwZToicGxvdCJ9LGZpbGxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJzdHlsZSJ9LGxpbmU6e2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6InN0eWxlIn0sd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZWRpdFR5cGU6InN0eWxlIn0sZWRpdFR5cGU6InN0eWxlIn0sZWRpdFR5cGU6InBsb3QifSxtZWFubGluZTp7dmlzaWJsZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToicGxvdCJ9LGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6InN0eWxlIn0sd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZWRpdFR5cGU6InN0eWxlIn0sZWRpdFR5cGU6InBsb3QifSxzaWRlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJib3RoIiwicG9zaXRpdmUiLCJuZWdhdGl2ZSJdLGRmbHQ6ImJvdGgiLGVkaXRUeXBlOiJwbG90In0sc2VsZWN0ZWQ6bi5zZWxlY3RlZCx1bnNlbGVjdGVkOm4udW5zZWxlY3RlZCxob3Zlcm9uOnt2YWxUeXBlOiJmbGFnbGlzdCIsZmxhZ3M6WyJ2aW9saW5zIiwicG9pbnRzIiwia2RlIl0sZGZsdDoidmlvbGlucytwb2ludHMra2RlIixleHRyYXM6WyJhbGwiXSxlZGl0VHlwZToic3R5bGUifX19LHsiLi4vLi4vbGliL2V4dGVuZCI6NjczLCIuLi9ib3gvYXR0cmlidXRlcyI6ODQwfV0sMTExNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksYT10KCIuLi9ib3gvY2FsYyIpLG89dCgiLi9oZWxwZXJzIikscz10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNO2Z1bmN0aW9uIGwodCxlLHIpe3ZhciBpPWUubWF4LWUubWluO2lmKCFpKXJldHVybiAxO2lmKHQuYmFuZHdpZHRoKXJldHVybiBNYXRoLm1heCh0LmJhbmR3aWR0aCxpLzFlNCk7dmFyIGE9ci5sZW5ndGgsbz1uLnN0ZGV2KHIsYS0xLGUubWVhbik7cmV0dXJuIE1hdGgubWF4KGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gMS4wNTkqTWF0aC5taW4oZSxyLzEuMzQ5KSpNYXRoLnBvdyh0LC0uMil9KGEsbyxlLnEzLWUucTEpLGkvMTAwKX1mdW5jdGlvbiBjKHQsZSxyLG4pe3ZhciBhLG89dC5zcGFubW9kZSxsPXQuc3Bhbnx8W10sYz1bZS5taW4sZS5tYXhdLHU9W2UubWluLTIqbixlLm1heCsyKm5dO2Z1bmN0aW9uIGgobil7dmFyIGk9bFtuXSxhPXIuZDJjKGksMCx0W2UudmFsTGV0dGVyKyJjYWxlbmRhciJdKTtyZXR1cm4gYT09PXM/dVtuXTphfXZhciBmPXt0eXBlOiJsaW5lYXIiLHJhbmdlOmE9InNvZnQiPT09bz91OiJoYXJkIj09PW8/YzpbaCgwKSxoKDEpXX07cmV0dXJuIGkuc2V0Q29udmVydChmKSxmLmNsZWFuUmFuZ2UoKSxhfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWEodCxlKTtpZihyWzBdLnQuZW1wdHkpcmV0dXJuIHI7dmFyIHM9dC5fZnVsbExheW91dCx1PWkuZ2V0RnJvbUlkKHQsZVsiaCI9PT1lLm9yaWVudGF0aW9uPyJ4YXhpcyI6InlheGlzIl0pLGg9cy5fdmlvbGluU2NhbGVHcm91cFN0YXRzLGY9ZS5zY2FsZWdyb3VwLHA9aFtmXTtwfHwocD1oW2ZdPXttYXhXaWR0aDowLG1heENvdW50OjB9KTtmb3IodmFyIGQ9MDtkPHIubGVuZ3RoO2QrKyl7dmFyIGc9cltkXSxtPWcucHRzLm1hcChvLmV4dHJhY3RWYWwpLHY9Zy5iYW5kd2lkdGg9bChlLGcsbSkseT1nLnNwYW49YyhlLGcsdSx2KSx4PXlbMV0teVswXSxiPU1hdGguY2VpbCh4Lyh2LzMpKSxfPXgvYjtpZighaXNGaW5pdGUoXyl8fCFpc0Zpbml0ZShiKSlyZXR1cm4gbi5lcnJvcigiU29tZXRoaW5nIHdlbnQgd3Jvbmcgd2l0aCBjb21wdXRpbmcgdGhlIHZpb2xpbiBzcGFuIiksclswXS50LmVtcHR5PSEwLHI7dmFyIHc9by5tYWtlS0RFKGcsZSxtKTtnLmRlbnNpdHk9bmV3IEFycmF5KGIpO2Zvcih2YXIgaz0wLE09eVswXTtNPHlbMV0rXy8yO2srKyxNKz1fKXt2YXIgQT13KE0pO3AubWF4V2lkdGg9TWF0aC5tYXgocC5tYXhXaWR0aCxBKSxnLmRlbnNpdHlba109e3Y6QSx0Ok19fWkuZXhwYW5kKHUseSx7cGFkZGVkOiEwfSkscC5tYXhDb3VudD1NYXRoLm1heChwLm1heENvdW50LG0ubGVuZ3RoKX1yZXR1cm4gclswXS50LmxhYmVscy5rZGU9bi5fKHQsImtkZToiKSxyfX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo2NjEsIi4uLy4uL2xpYiI6Njg0LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzMyLCIuLi9ib3gvY2FsYyI6ODQxLCIuL2hlbHBlcnMiOjExMTd9XSwxMTE2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGE9dCgiLi4vYm94L2RlZmF1bHRzIiksbz10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyl7ZnVuY3Rpb24gbChyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsbyxyLGkpfWZ1bmN0aW9uIGMocixpKXtyZXR1cm4gbi5jb2VyY2UyKHQsZSxvLHIsaSl9aWYoYS5oYW5kbGVTYW1wbGVEZWZhdWx0cyh0LGUsbCxzKSwhMSE9PWUudmlzaWJsZSl7bCgiYmFuZHdpZHRoIiksbCgic2NhbGVncm91cCIsZS5uYW1lKSxsKCJzY2FsZW1vZGUiKSxsKCJzaWRlIik7dmFyIHUsaD1sKCJzcGFuIik7QXJyYXkuaXNBcnJheShoKSYmKHU9Im1hbnVhbCIpLGwoInNwYW5tb2RlIix1KTt2YXIgZj1sKCJsaW5lLmNvbG9yIiwodC5tYXJrZXJ8fHt9KS5jb2xvcnx8cikscD1sKCJsaW5lLndpZHRoIiksZD1sKCJmaWxsY29sb3IiLGkuYWRkT3BhY2l0eShlLmxpbmUuY29sb3IsLjUpKTthLmhhbmRsZVBvaW50c0RlZmF1bHRzKHQsZSxsLHtwcmVmaXg6IiJ9KTt2YXIgZz1jKCJib3gud2lkdGgiKSxtPWMoImJveC5maWxsY29sb3IiLGQpLHY9YygiYm94LmxpbmUuY29sb3IiLGYpLHk9YygiYm94LmxpbmUud2lkdGgiLHApO2woImJveC52aXNpYmxlIixCb29sZWFuKGd8fG18fHZ8fHkpKXx8ZGVsZXRlIGUuYm94O3ZhciB4PWMoIm1lYW5saW5lLmNvbG9yIixmKSxiPWMoIm1lYW5saW5lLndpZHRoIixwKTtsKCJtZWFubGluZS52aXNpYmxlIixCb29sZWFuKHh8fGIpKXx8ZGVsZXRlIGUubWVhbmxpbmV9fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo1NTgsIi4uLy4uL2xpYiI6Njg0LCIuLi9ib3gvZGVmYXVsdHMiOjg0MiwiLi9hdHRyaWJ1dGVzIjoxMTE0fV0sMTExNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPWZ1bmN0aW9uKHQpe3JldHVybiAxL01hdGguc3FydCgyKk1hdGguUEkpKk1hdGguZXhwKC0uNSp0KnQpfTtyLm1ha2VLREU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIubGVuZ3RoLGE9aSxvPXQuYmFuZHdpZHRoLHM9MS8obipvKTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAsaT0wO2k8bjtpKyspZSs9YSgodC1yW2ldKS9vKTtyZXR1cm4gcyplfX0sci5nZXRQb3NpdGlvbk9uS2RlUGF0aD1mdW5jdGlvbih0LGUscil7dmFyIGksYTsiaCI9PT1lLm9yaWVudGF0aW9uPyhpPSJ5IixhPSJ4Iik6KGk9IngiLGE9InkiKTt2YXIgbz1uLmZpbmRQb2ludE9uUGF0aCh0LnBhdGgscixhLHtwYXRoTGVuZ3RoOnQucGF0aExlbmd0aH0pLHM9dC5wb3NDZW50ZXJQeCxsPW9baV07cmV0dXJuW2wsImJvdGgiPT09ZS5zaWRlPzIqcy1sOnNdfSxyLmdldEtkZVZhbHVlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT10LnB0cy5tYXAoci5leHRyYWN0VmFsKTtyZXR1cm4gci5tYWtlS0RFKHQsZSxpKShuKS90LnBvc0RlbnNpdHlTY2FsZX0sci5leHRyYWN0VmFsPWZ1bmN0aW9uKHQpe3JldHVybiB0LnZ9fSx7Ii4uLy4uL2xpYiI6Njg0fV0sMTExODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksYT10KCIuLi9ib3gvaG92ZXIiKSxvPXQoIi4vaGVscGVycyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixzLGwpe3ZhciBjLHUsaD10LmNkLGY9aFswXS50cmFjZSxwPWYuaG92ZXJvbixkPS0xIT09cC5pbmRleE9mKCJ2aW9saW5zIiksZz0tMSE9PXAuaW5kZXhPZigia2RlIiksbT1bXTtpZihkfHxnKXt2YXIgdj1hLmhvdmVyT25Cb3hlcyh0LGUscixzKTtpZihkJiYobT1tLmNvbmNhdCh2KSksZyYmdi5sZW5ndGg+MCl7dmFyIHkseCxiLF8sdyxrPXQueGEsTT10LnlhOyJoIj09PWYub3JpZW50YXRpb24/KHc9ZSx5PSJ5IixiPU0seD0ieCIsXz1rKToodz1yLHk9IngiLGI9ayx4PSJ5IixfPU0pO3ZhciBBPWhbdC5pbmRleF07aWYodz49QS5zcGFuWzBdJiZ3PD1BLnNwYW5bMV0pe3ZhciBUPW4uZXh0ZW5kRmxhdCh7fSx0KSxTPV8uYzJwKHcsITApLEU9by5nZXRLZGVWYWx1ZShBLGYsdyksQz1vLmdldFBvc2l0aW9uT25LZGVQYXRoKEEsZixTKSxMPWIuX29mZnNldCx6PWIuX2xlbmd0aDtUW3krIjAiXT1DWzBdLFRbeSsiMSJdPUNbMV0sVFt4KyIwIl09VFt4KyIxIl09UyxUW3grIkxhYmVsIl09eCsiOiAiK2kuaG92ZXJMYWJlbFRleHQoXyx3KSsiLCAiK2hbMF0udC5sYWJlbHMua2RlKyIgIitFLnRvRml4ZWQoMyksVC5zcGlrZURpc3RhbmNlPXZbMF0uc3Bpa2VEaXN0YW5jZTt2YXIgUD15KyJTcGlrZSI7VFtQXT12WzBdW1BdLHZbMF0uc3Bpa2VEaXN0YW5jZT12b2lkIDAsdlswXVtQXT12b2lkIDAsbS5wdXNoKFQpLCh1PXtzdHJva2U6dC5jb2xvcn0pW3krIjEiXT1uLmNvbnN0cmFpbihMK0NbMF0sTCxMK3opLHVbeSsiMiJdPW4uY29uc3RyYWluKEwrQ1sxXSxMLEwreiksdVt4KyIxIl09dVt4KyIyIl09Xy5fb2Zmc2V0K1N9fX0tMSE9PXAuaW5kZXhPZigicG9pbnRzIikmJihjPWEuaG92ZXJPblBvaW50cyh0LGUscikpO3ZhciBJPWwuc2VsZWN0QWxsKCIudmlvbGlubGluZS0iK2YudWlkKS5kYXRhKHU/WzBdOltdKTtyZXR1cm4gSS5lbnRlcigpLmFwcGVuZCgibGluZSIpLmNsYXNzZWQoInZpb2xpbmxpbmUtIitmLnVpZCwhMCkuYXR0cigic3Ryb2tlLXdpZHRoIiwxLjUpLEkuZXhpdCgpLnJlbW92ZSgpLEkuYXR0cih1KSwiY2xvc2VzdCI9PT1zP2M/W2NdOm06Yz8obS5wdXNoKGMpLG0pOm19fSx7Ii4uLy4uL2xpYiI6Njg0LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzMyLCIuLi9ib3gvaG92ZXIiOjg0MywiLi9oZWxwZXJzIjoxMTE3fV0sMTExOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2F0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksbGF5b3V0QXR0cmlidXRlczp0KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLHN1cHBseUxheW91dERlZmF1bHRzOnQoIi4vbGF5b3V0X2RlZmF1bHRzIiksY2FsYzp0KCIuL2NhbGMiKSxzZXRQb3NpdGlvbnM6dCgiLi9zZXRfcG9zaXRpb25zIikscGxvdDp0KCIuL3Bsb3QiKSxzdHlsZTp0KCIuL3N0eWxlIiksc3R5bGVPblNlbGVjdDp0KCIuLi9zY2F0dGVyL3N0eWxlIikuc3R5bGVPblNlbGVjdCxob3ZlclBvaW50czp0KCIuL2hvdmVyIiksc2VsZWN0UG9pbnRzOnQoIi4uL2JveC9zZWxlY3QiKSxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToidmlvbGluIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxjYXRlZ29yaWVzOlsiY2FydGVzaWFuIiwic3ZnIiwic3ltYm9scyIsIm9yaWVudGVkIiwiYm94LXZpb2xpbiIsInNob3dMZWdlbmQiLCJ2aW9saW5MYXlvdXQiLCJ6b29tU2NhbGUiXSxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjc0MywiLi4vYm94L3NlbGVjdCI6ODQ4LCIuLi9zY2F0dGVyL3N0eWxlIjoxMDM2LCIuL2F0dHJpYnV0ZXMiOjExMTQsIi4vY2FsYyI6MTExNSwiLi9kZWZhdWx0cyI6MTExNiwiLi9ob3ZlciI6MTExOCwiLi9sYXlvdXRfYXR0cmlidXRlcyI6MTEyMCwiLi9sYXlvdXRfZGVmYXVsdHMiOjExMjEsIi4vcGxvdCI6MTEyMiwiLi9zZXRfcG9zaXRpb25zIjoxMTIzLCIuL3N0eWxlIjoxMTI0fV0sMTEyMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9ib3gvbGF5b3V0X2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL2xpYiIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPXt2aW9saW5tb2RlOmkoe30sbi5ib3htb2RlLHt9KSx2aW9saW5nYXA6aSh7fSxuLmJveGdhcCx7fSksdmlvbGluZ3JvdXBnYXA6aSh7fSxuLmJveGdyb3VwZ2FwLHt9KX19LHsiLi4vLi4vbGliIjo2ODQsIi4uL2JveC9sYXlvdXRfYXR0cmlidXRlcyI6ODQ1fV0sMTEyMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxhPXQoIi4uL2JveC9sYXlvdXRfZGVmYXVsdHMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2EuX3N1cHBseSh0LGUscixmdW5jdGlvbihyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaSxyLGEpfSwidmlvbGluIil9fSx7Ii4uLy4uL2xpYiI6Njg0LCIuLi9ib3gvbGF5b3V0X2RlZmF1bHRzIjo4NDYsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjExMjB9XSwxMTIyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLG89dCgiLi4vYm94L3Bsb3QiKSxzPXQoIi4uL3NjYXR0ZXIvbGluZV9wb2ludHMiKSxsPXQoIi4vaGVscGVycyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixjKXt2YXIgdT10Ll9mdWxsTGF5b3V0LGg9ZS54YXhpcyxmPWUueWF4aXM7ZnVuY3Rpb24gcCh0KXt2YXIgZT1zKHQse3hheGlzOmgseWF4aXM6Zixjb25uZWN0R2FwczohMCxiYXNlVG9sZXJhbmNlOi43NSxzaGFwZToic3BsaW5lIixzaW1wbGlmeTohMH0pO3JldHVybiBhLnNtb290aG9wZW4oZVswXSwxKX12YXIgZD1jLnNlbGVjdEFsbCgiZy50cmFjZS52aW9saW5zIikuZGF0YShyLGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdLnRyYWNlLnVpZH0pO2QuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInRyYWNlIHZpb2xpbnMiKSxkLmV4aXQoKS5yZW1vdmUoKSxkLm9yZGVyKCksZC5lYWNoKGZ1bmN0aW9uKHQpe3ZhciByPXRbMF0sYT1yLnQscz1yLnRyYWNlLGM9bi5zZWxlY3QodGhpcyk7ZS5pc1JhbmdlUGxvdHx8KHIubm9kZTM9Yyk7dmFyIGQ9dS5fbnVtVmlvbGlucyxnPSJncm91cCI9PT11LnZpb2xpbm1vZGUmJmQ+MSxtPTEtdS52aW9saW5nYXAsdj1hLmJkUG9zPWEuZFBvcyptKigxLXUudmlvbGluZ3JvdXBnYXApLyhnP2Q6MSkseT1hLmJQb3M9Zz8yKmEuZFBvcyooKGEubnVtKy41KS9kLS41KSptOjA7aWYoYS53SG92ZXI9YS5kUG9zKihnP20vZDoxKSwhMCE9PXMudmlzaWJsZXx8YS5lbXB0eSluLnNlbGVjdCh0aGlzKS5yZW1vdmUoKTtlbHNle3ZhciB4PWVbYS52YWxMZXR0ZXIrImF4aXMiXSxiPWVbYS5wb3NMZXR0ZXIrImF4aXMiXSxfPSJib3RoIj09PXMuc2lkZSx3PV98fCJwb3NpdGl2ZSI9PT1zLnNpZGUsaz1ffHwibmVnYXRpdmUiPT09cy5zaWRlLE09dS5fdmlvbGluU2NhbGVHcm91cFN0YXRzW3Muc2NhbGVncm91cF0sQT1jLnNlbGVjdEFsbCgicGF0aC52aW9saW4iKS5kYXRhKGkuaWRlbnRpdHkpO0EuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5zdHlsZSgidmVjdG9yLWVmZmVjdCIsIm5vbi1zY2FsaW5nLXN0cm9rZSIpLmF0dHIoImNsYXNzIiwidmlvbGluIiksQS5leGl0KCkucmVtb3ZlKCksQS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlLHIsaSxvLGwsYyx1LGgsZj1uLnNlbGVjdCh0aGlzKSxkPXQuZGVuc2l0eSxnPWQubGVuZ3RoLG09dC5wb3MreSxBPWIuYzJwKG0pO3N3aXRjaChzLnNjYWxlbW9kZSl7Y2FzZSJ3aWR0aCI6ZT1NLm1heFdpZHRoL3Y7YnJlYWs7Y2FzZSJjb3VudCI6ZT1NLm1heFdpZHRoL3YqKE0ubWF4Q291bnQvdC5wdHMubGVuZ3RoKX1pZih3KXtmb3IodT1uZXcgQXJyYXkoZyksbD0wO2w8ZztsKyspKGg9dVtsXT17fSlbYS5wb3NMZXR0ZXJdPW0rZFtsXS52L2UsaFthLnZhbExldHRlcl09ZFtsXS50O3I9cCh1KX1pZihrKXtmb3IodT1uZXcgQXJyYXkoZyksYz0wLGw9Zy0xO2M8ZztjKyssbC0tKShoPXVbY109e30pW2EucG9zTGV0dGVyXT1tLWRbbF0udi9lLGhbYS52YWxMZXR0ZXJdPWRbbF0udDtpPXAodSl9aWYoXylvPXIrIkwiK2kuc3Vic3RyKDEpKyJaIjtlbHNle3ZhciBUPVtBLHguYzJwKGRbMF0udCldLFM9W0EseC5jMnAoZFtnLTFdLnQpXTsiaCI9PT1zLm9yaWVudGF0aW9uJiYoVC5yZXZlcnNlKCksUy5yZXZlcnNlKCkpLG89dz8iTSIrVCsiTCIrci5zdWJzdHIoMSkrIkwiK1M6Ik0iK1MrIkwiK2kuc3Vic3RyKDEpKyJMIitUfWYuYXR0cigiZCIsbyksdC5wb3NDZW50ZXJQeD1BLHQucG9zRGVuc2l0eVNjYWxlPWUqdix0LnBhdGg9Zi5ub2RlKCksdC5wYXRoTGVuZ3RoPXQucGF0aC5nZXRUb3RhbExlbmd0aCgpLyhfPzI6MSl9KTt2YXIgVCxTLEUsQz1zLmJveHx8e30sTD1DLndpZHRoLHo9KEMubGluZXx8e30pLndpZHRoO18/KFQ9dipMLFM9MCk6dz8oVD1bMCx2KkwvMl0sUz0teik6KFQ9W3YqTC8yLDBdLFM9eiksby5wbG90Qm94QW5kV2hpc2tlcnMoYyx7cG9zOmIsdmFsOnh9LHMse2JQb3M6eSxiZFBvczpULGJQb3NQeE9mZnNldDpTfSksby5wbG90Qm94TWVhbihjLHtwb3M6Yix2YWw6eH0scyx7YlBvczp5LGJkUG9zOlQsYlBvc1B4T2Zmc2V0OlN9KSwhKHMuYm94fHx7fSkudmlzaWJsZSYmKHMubWVhbmxpbmV8fHt9KS52aXNpYmxlJiYoRT1pLmlkZW50aXR5KTt2YXIgUD1jLnNlbGVjdEFsbCgicGF0aC5tZWFubGluZSIpLmRhdGEoRXx8W10pO1AuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsIm1lYW5saW5lIikuc3R5bGUoImZpbGwiLCJub25lIikuc3R5bGUoInZlY3Rvci1lZmZlY3QiLCJub24tc2NhbGluZy1zdHJva2UiKSxQLmV4aXQoKS5yZW1vdmUoKSxQLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9eC5jMnAodC5tZWFuLCEwKSxyPWwuZ2V0UG9zaXRpb25PbktkZVBhdGgodCxzLGUpO24uc2VsZWN0KHRoaXMpLmF0dHIoImQiLCJoIj09PXMub3JpZW50YXRpb24/Ik0iK2UrIiwiK3JbMF0rIlYiK3JbMV06Ik0iK3JbMF0rIiwiK2UrIkgiK3JbMV0pfSksby5wbG90UG9pbnRzKGMse3g6aCx5OmZ9LHMsYSl9fSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NTgzLCIuLi8uLi9saWIiOjY4NCwiLi4vYm94L3Bsb3QiOjg0NywiLi4vc2NhdHRlci9saW5lX3BvaW50cyI6MTAyOCwiLi9oZWxwZXJzIjoxMTE3LGQzOjE0N31dLDExMjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vYm94L3NldF9wb3NpdGlvbnMiKS5zZXRQb3NpdGlvbk9mZnNldCxpPVsidiIsImgiXTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5jYWxjZGF0YSxhPWUueGF4aXMsbz1lLnlheGlzLHM9MDtzPGkubGVuZ3RoO3MrKyl7Zm9yKHZhciBsPWlbc10sYz0iaCI9PT1sP286YSx1PVtdLGg9MCxmPTAscD0wO3A8ci5sZW5ndGg7cCsrKXt2YXIgZD1yW3BdLGc9ZFswXS50LG09ZFswXS50cmFjZTshMCE9PW0udmlzaWJsZXx8InZpb2xpbiIhPT1tLnR5cGV8fGcuZW1wdHl8fG0ub3JpZW50YXRpb24hPT1sfHxtLnhheGlzIT09YS5faWR8fG0ueWF4aXMhPT1vLl9pZHx8KHUucHVzaChwKSwhMSE9PW0ucG9pbnRzJiYoaD1NYXRoLm1heChoLG0uaml0dGVyLW0ucG9pbnRwb3MtMSksZj1NYXRoLm1heChmLG0uaml0dGVyK20ucG9pbnRwb3MtMSkpKX1uKCJ2aW9saW4iLHQsdSxjLFtoLGZdKX19fSx7Ii4uL2JveC9zZXRfcG9zaXRpb25zIjo4NDl9XSwxMTI0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksYT10KCIuLi9zY2F0dGVyL3N0eWxlIikuc3R5bGVQb2ludHM7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZT9lWzBdLm5vZGUzOm4uc2VsZWN0KHQpLnNlbGVjdEFsbCgiZy50cmFjZS52aW9saW5zIik7ci5zdHlsZSgib3BhY2l0eSIsZnVuY3Rpb24odCl7cmV0dXJuIHRbMF0udHJhY2Uub3BhY2l0eX0pLHIuZWFjaChmdW5jdGlvbihlKXt2YXIgcj1lWzBdLnRyYWNlLG89bi5zZWxlY3QodGhpcykscz1yLmJveHx8e30sbD1zLmxpbmV8fHt9LGM9ci5tZWFubGluZXx8e30sdT1jLndpZHRoO28uc2VsZWN0QWxsKCJwYXRoLnZpb2xpbiIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLHIubGluZS53aWR0aCsicHgiKS5jYWxsKGkuc3Ryb2tlLHIubGluZS5jb2xvcikuY2FsbChpLmZpbGwsci5maWxsY29sb3IpLG8uc2VsZWN0QWxsKCJwYXRoLmJveCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLGwud2lkdGgrInB4IikuY2FsbChpLnN0cm9rZSxsLmNvbG9yKS5jYWxsKGkuZmlsbCxzLmZpbGxjb2xvcik7dmFyIGg9eyJzdHJva2Utd2lkdGgiOnUrInB4Iiwic3Ryb2tlLWRhc2hhcnJheSI6Mip1KyJweCwiK3UrInB4In07by5zZWxlY3RBbGwoInBhdGgubWVhbiIpLnN0eWxlKGgpLmNhbGwoaS5zdHJva2UsYy5jb2xvciksby5zZWxlY3RBbGwoInBhdGgubWVhbmxpbmUiKS5zdHlsZShoKS5jYWxsKGkuc3Ryb2tlLGMuY29sb3IpLGEobyxyLHQpfSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjU1OCwiLi4vc2NhdHRlci9zdHlsZSI6MTAzNixkMzoxNDd9XSwxMTI1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksaT10KCIuLi9saWIiKSxhPXQoIi4uL3Bsb3RfYXBpL3Bsb3Rfc2NoZW1hIiksbz10KCIuL2hlbHBlcnMiKS5wb2ludHNBY2Nlc3NvckZ1bmN0aW9uLHM9dCgiLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTTtyLm1vZHVsZVR5cGU9InRyYW5zZm9ybSIsci5uYW1lPSJhZ2dyZWdhdGUiO3ZhciBsPXIuYXR0cmlidXRlcz17ZW5hYmxlZDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYyJ9LGdyb3Vwczp7dmFsVHlwZToic3RyaW5nIixzdHJpY3Q6ITAsbm9CbGFuazohMCxhcnJheU9rOiEwLGRmbHQ6IngiLGVkaXRUeXBlOiJjYWxjIn0sYWdncmVnYXRpb25zOntfaXNMaW5rZWRUb0FycmF5OiJhZ2dyZWdhdGlvbiIsdGFyZ2V0Ont2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJjYWxjIn0sZnVuYzp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiY291bnQiLCJzdW0iLCJhdmciLCJtZWRpYW4iLCJtb2RlIiwicm1zIiwic3RkZGV2IiwibWluIiwibWF4IiwiZmlyc3QiLCJsYXN0IiwiY2hhbmdlIiwicmFuZ2UiXSxkZmx0OiJmaXJzdCIsZWRpdFR5cGU6ImNhbGMifSxmdW5jbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsic2FtcGxlIiwicG9wdWxhdGlvbiJdLGRmbHQ6InNhbXBsZSIsZWRpdFR5cGU6ImNhbGMifSxlbmFibGVkOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9LGM9bC5hZ2dyZWdhdGlvbnM7ZnVuY3Rpb24gdSh0LGUscixhKXtpZihhLmVuYWJsZWQpe2Zvcih2YXIgbz1hLnRhcmdldCxsPWkubmVzdGVkUHJvcGVydHkoZSxvKSxjPWwuZ2V0KCksdT1mdW5jdGlvbih0LGUpe3ZhciByPXQuZnVuYyxuPWUuZDJjLGk9ZS5jMmQ7c3dpdGNoKHIpe2Nhc2UiY291bnQiOnJldHVybiBoO2Nhc2UiZmlyc3QiOnJldHVybiBmO2Nhc2UibGFzdCI6cmV0dXJuIHA7Y2FzZSJzdW0iOnJldHVybiBmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLGE9MDthPGUubGVuZ3RoO2ErKyl7dmFyIG89bih0W2VbYV1dKTtvIT09cyYmKHIrPW8pfXJldHVybiBpKHIpfTtjYXNlImF2ZyI6cmV0dXJuIGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsYT0wLG89MDtvPGUubGVuZ3RoO28rKyl7dmFyIGw9bih0W2Vbb11dKTtsIT09cyYmKHIrPWwsYSsrKX1yZXR1cm4gYT9pKHIvYSk6c307Y2FzZSJtaW4iOnJldHVybiBmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0xLzAsYT0wO2E8ZS5sZW5ndGg7YSsrKXt2YXIgbz1uKHRbZVthXV0pO28hPT1zJiYocj1NYXRoLm1pbihyLG8pKX1yZXR1cm4gcj09PTEvMD9zOmkocil9O2Nhc2UibWF4IjpyZXR1cm4gZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9LTEvMCxhPTA7YTxlLmxlbmd0aDthKyspe3ZhciBvPW4odFtlW2FdXSk7byE9PXMmJihyPU1hdGgubWF4KHIsbykpfXJldHVybiByPT09LTEvMD9zOmkocil9O2Nhc2UicmFuZ2UiOnJldHVybiBmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0xLzAsYT0tMS8wLG89MDtvPGUubGVuZ3RoO28rKyl7dmFyIGw9bih0W2Vbb11dKTtsIT09cyYmKHI9TWF0aC5taW4ocixsKSxhPU1hdGgubWF4KGEsbCkpfXJldHVybiBhPT09LTEvMHx8cj09PTEvMD9zOmkoYS1yKX07Y2FzZSJjaGFuZ2UiOnJldHVybiBmdW5jdGlvbih0LGUpe3ZhciByPW4odFtlWzBdXSksYT1uKHRbZVtlLmxlbmd0aC0xXV0pO3JldHVybiByPT09c3x8YT09PXM/czppKGEtcil9O2Nhc2UibWVkaWFuIjpyZXR1cm4gZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9W10sYT0wO2E8ZS5sZW5ndGg7YSsrKXt2YXIgbz1uKHRbZVthXV0pO28hPT1zJiZyLnB1c2gobyl9aWYoIXIubGVuZ3RoKXJldHVybiBzO3Iuc29ydCgpO3ZhciBsPShyLmxlbmd0aC0xKS8yO3JldHVybiBpKChyW01hdGguZmxvb3IobCldK3JbTWF0aC5jZWlsKGwpXSkvMil9O2Nhc2UibW9kZSI6cmV0dXJuIGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXt9LGE9MCxvPXMsbD0wO2w8ZS5sZW5ndGg7bCsrKXt2YXIgYz1uKHRbZVtsXV0pO2lmKGMhPT1zKXt2YXIgdT1yW2NdPShyW2NdfHwwKSsxO3U+YSYmKGE9dSxvPWMpfX1yZXR1cm4gYT9pKG8pOnN9O2Nhc2Uicm1zIjpyZXR1cm4gZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxhPTAsbz0wO288ZS5sZW5ndGg7bysrKXt2YXIgbD1uKHRbZVtvXV0pO2whPT1zJiYocis9bCpsLGErKyl9cmV0dXJuIGE/aShNYXRoLnNxcnQoci9hKSk6c307Y2FzZSJzdGRkZXYiOnJldHVybiBmdW5jdGlvbihlLHIpe3ZhciBpLGE9MCxvPTAsbD0xLGM9cztmb3IoaT0wO2k8ci5sZW5ndGgmJmM9PT1zO2krKyljPW4oZVtyW2ldXSk7aWYoYz09PXMpcmV0dXJuIHM7Zm9yKDtpPHIubGVuZ3RoO2krKyl7dmFyIHU9bihlW3JbaV1dKTtpZih1IT09cyl7dmFyIGg9dS1jO2ErPWgsbys9aCpoLGwrK319dmFyIGY9InNhbXBsZSI9PT10LmZ1bmNtb2RlP2wtMTpsO3JldHVybiBmP01hdGguc3FydCgoby1hKmEvbCkvZik6MH19fShhLG4uZ2V0RGF0YUNvbnZlcnNpb25zKHQsZSxvLGMpKSxkPW5ldyBBcnJheShyLmxlbmd0aCksZz0wO2c8ci5sZW5ndGg7ZysrKWRbZ109dShjLHJbZ10pO2wuc2V0KGQpLCJjb3VudCI9PT1hLmZ1bmMmJmkucHVzaFVuaXF1ZShlLl9hcnJheUF0dHJzLG8pfX1mdW5jdGlvbiBoKHQsZSl7cmV0dXJuIGUubGVuZ3RofWZ1bmN0aW9uIGYodCxlKXtyZXR1cm4gdFtlWzBdXX1mdW5jdGlvbiBwKHQsZSl7cmV0dXJuIHRbZVtlLmxlbmd0aC0xXV19ci5zdXBwbHlEZWZhdWx0cz1mdW5jdGlvbih0LGUpe3ZhciByLG49e307ZnVuY3Rpb24gbyhlLHIpe3JldHVybiBpLmNvZXJjZSh0LG4sbCxlLHIpfWlmKCFvKCJlbmFibGVkIikpcmV0dXJuIG47dmFyIHM9YS5maW5kQXJyYXlBdHRyaWJ1dGVzKGUpLHU9e307Zm9yKHI9MDtyPHMubGVuZ3RoO3IrKyl1W3Nbcl1dPTE7dmFyIGg9bygiZ3JvdXBzIik7aWYoIUFycmF5LmlzQXJyYXkoaCkpe2lmKCF1W2hdKXJldHVybiB2b2lkKG4uZW5hYmxlZD0hMSk7dVtoXT0wfXZhciBmLHA9dC5hZ2dyZWdhdGlvbnN8fFtdLGQ9bi5hZ2dyZWdhdGlvbnM9bmV3IEFycmF5KHAubGVuZ3RoKTtmdW5jdGlvbiBnKHQsZSl7cmV0dXJuIGkuY29lcmNlKHBbcl0sZixjLHQsZSl9Zm9yKHI9MDtyPHAubGVuZ3RoO3IrKyl7Zj17X2luZGV4OnJ9O3ZhciBtPWcoInRhcmdldCIpLHY9ZygiZnVuYyIpO2coImVuYWJsZWQiKSYmbSYmKHVbbV18fCJjb3VudCI9PT12JiZ2b2lkIDA9PT11W21dKT8oInN0ZGRldiI9PT12JiZnKCJmdW5jbW9kZSIpLHVbbV09MCxkW3JdPWYpOmRbcl09e2VuYWJsZWQ6ITEsX2luZGV4OnJ9fWZvcihyPTA7cjxzLmxlbmd0aDtyKyspdVtzW3JdXSYmZC5wdXNoKHt0YXJnZXQ6c1tyXSxmdW5jOmMuZnVuYy5kZmx0LGVuYWJsZWQ6ITAsX2luZGV4Oi0xfSk7cmV0dXJuIG59LHIuY2FsY1RyYW5zZm9ybT1mdW5jdGlvbih0LGUscil7aWYoci5lbmFibGVkKXt2YXIgbj1yLmdyb3VwcyxhPWkuZ2V0VGFyZ2V0QXJyYXkoZSx7dGFyZ2V0Om59KTtpZihhKXt2YXIgcyxsLGMsaCxmPXt9LHA9e30sZD1bXSxnPW8oZS50cmFuc2Zvcm1zLHIpLG09YS5sZW5ndGg7Zm9yKGUuX2xlbmd0aCYmKG09TWF0aC5taW4obSxlLl9sZW5ndGgpKSxzPTA7czxtO3MrKyl2b2lkIDA9PT0oYz1mW2w9YVtzXV0pPyhmW2xdPWQubGVuZ3RoLGg9W3NdLGQucHVzaChoKSxwW2ZbbF1dPWcocykpOihkW2NdLnB1c2gocykscFtmW2xdXT0ocFtmW2xdXXx8W10pLmNvbmNhdChnKHMpKSk7ci5faW5kZXhUb1BvaW50cz1wO3ZhciB2PXIuYWdncmVnYXRpb25zO2ZvcihzPTA7czx2Lmxlbmd0aDtzKyspdSh0LGUsZCx2W3NdKTsic3RyaW5nIj09dHlwZW9mIG4mJnUodCxlLGQse3RhcmdldDpuLGZ1bmM6ImZpcnN0IixlbmFibGVkOiEwfSksZS5fbGVuZ3RoPWQubGVuZ3RofX19fSx7Ii4uL2NvbnN0YW50cy9udW1lcmljYWwiOjY2MSwiLi4vbGliIjo2ODQsIi4uL3Bsb3RfYXBpL3Bsb3Rfc2NoZW1hIjo3MjEsIi4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3MzIsIi4vaGVscGVycyI6MTEyOH1dLDExMjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vbGliIiksaT10KCIuLi9yZWdpc3RyeSIpLGE9dCgiLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxvPXQoIi4vaGVscGVycyIpLnBvaW50c0FjY2Vzc29yRnVuY3Rpb24scz10KCIuLi9jb25zdGFudHMvZmlsdGVyX29wcyIpLGw9cy5DT01QQVJJU09OX09QUyxjPXMuSU5URVJWQUxfT1BTLHU9cy5TRVRfT1BTO3IubW9kdWxlVHlwZT0idHJhbnNmb3JtIixyLm5hbWU9ImZpbHRlciIsci5hdHRyaWJ1dGVzPXtlbmFibGVkOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn0sdGFyZ2V0Ont2YWxUeXBlOiJzdHJpbmciLHN0cmljdDohMCxub0JsYW5rOiEwLGFycmF5T2s6ITAsZGZsdDoieCIsZWRpdFR5cGU6ImNhbGMifSxvcGVyYXRpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbXS5jb25jYXQobCkuY29uY2F0KGMpLmNvbmNhdCh1KSxkZmx0OiI9IixlZGl0VHlwZToiY2FsYyJ9LHZhbHVlOnt2YWxUeXBlOiJhbnkiLGRmbHQ6MCxlZGl0VHlwZToiY2FsYyJ9LHByZXNlcnZlZ2Fwczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIn0sci5zdXBwbHlEZWZhdWx0cz1mdW5jdGlvbih0KXt2YXIgZT17fTtmdW5jdGlvbiBhKGksYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxyLmF0dHJpYnV0ZXMsaSxhKX1pZihhKCJlbmFibGVkIikpe2EoInByZXNlcnZlZ2FwcyIpLGEoIm9wZXJhdGlvbiIpLGEoInZhbHVlIiksYSgidGFyZ2V0Iik7dmFyIG89aS5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZURlZmF1bHRzIik7byh0LGUsInZhbHVlY2FsZW5kYXIiLG51bGwpLG8odCxlLCJ0YXJnZXRjYWxlbmRhciIsbnVsbCl9cmV0dXJuIGV9LHIuY2FsY1RyYW5zZm9ybT1mdW5jdGlvbih0LGUscil7aWYoci5lbmFibGVkKXt2YXIgaT1uLmdldFRhcmdldEFycmF5KGUscik7aWYoaSl7dmFyIHM9ci50YXJnZXQsaD1pLmxlbmd0aDtlLl9sZW5ndGgmJihoPU1hdGgubWluKGgsZS5fbGVuZ3RoKSk7dmFyIGY9ci50YXJnZXRjYWxlbmRhcixwPWUuX2FycmF5QXR0cnMsZD1yLnByZXNlcnZlZ2FwcztpZigic3RyaW5nIj09dHlwZW9mIHMpe3ZhciBnPW4ubmVzdGVkUHJvcGVydHkoZSxzKyJjYWxlbmRhciIpLmdldCgpO2cmJihmPWcpfXZhciBtLHYseT1mdW5jdGlvbih0LGUscil7dmFyIG49dC5vcGVyYXRpb24saT10LnZhbHVlLGE9QXJyYXkuaXNBcnJheShpKTtmdW5jdGlvbiBvKHQpe3JldHVybi0xIT09dC5pbmRleE9mKG4pfXZhciBzLGg9ZnVuY3Rpb24ocil7cmV0dXJuIGUociwwLHQudmFsdWVjYWxlbmRhcil9LGY9ZnVuY3Rpb24odCl7cmV0dXJuIGUodCwwLHIpfTtvKGwpP3M9aChhP2lbMF06aSk6byhjKT9zPWE/W2goaVswXSksaChpWzFdKV06W2goaSksaChpKV06byh1KSYmKHM9YT9pLm1hcChoKTpbaChpKV0pO3N3aXRjaChuKXtjYXNlIj0iOnJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZih0KT09PXN9O2Nhc2UiIT0iOnJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZih0KSE9PXN9O2Nhc2UiPCI6cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBmKHQpPHN9O2Nhc2UiPD0iOnJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZih0KTw9c307Y2FzZSI+IjpyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGYodCk+c307Y2FzZSI+PSI6cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBmKHQpPj1zfTtjYXNlIltdIjpyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9Zih0KTtyZXR1cm4gZT49c1swXSYmZTw9c1sxXX07Y2FzZSIoKSI6cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPWYodCk7cmV0dXJuIGU+c1swXSYmZTxzWzFdfTtjYXNlIlspIjpyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9Zih0KTtyZXR1cm4gZT49c1swXSYmZTxzWzFdfTtjYXNlIihdIjpyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9Zih0KTtyZXR1cm4gZT5zWzBdJiZlPD1zWzFdfTtjYXNlIl1bIjpyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9Zih0KTtyZXR1cm4gZTw9c1swXXx8ZT49c1sxXX07Y2FzZSIpKCI6cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPWYodCk7cmV0dXJuIGU8c1swXXx8ZT5zWzFdfTtjYXNlIl0oIjpyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9Zih0KTtyZXR1cm4gZTw9c1swXXx8ZT5zWzFdfTtjYXNlIilbIjpyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9Zih0KTtyZXR1cm4gZTxzWzBdfHxlPj1zWzFdfTtjYXNlInt9IjpyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuLTEhPT1zLmluZGV4T2YoZih0KSl9O2Nhc2UifXsiOnJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4tMT09PXMuaW5kZXhPZihmKHQpKX19fShyLGEuZ2V0RGF0YVRvQ29vcmRGdW5jKHQsZSxzLGkpLGYpLHg9e30sYj17fSxfPTA7ZD8obT1mdW5jdGlvbih0KXt4W3QuYXN0cl09bi5leHRlbmREZWVwKFtdLHQuZ2V0KCkpLHQuc2V0KG5ldyBBcnJheShoKSl9LHY9ZnVuY3Rpb24odCxlKXt2YXIgcj14W3QuYXN0cl1bZV07dC5nZXQoKVtlXT1yfSk6KG09ZnVuY3Rpb24odCl7eFt0LmFzdHJdPW4uZXh0ZW5kRGVlcChbXSx0LmdldCgpKSx0LnNldChbXSl9LHY9ZnVuY3Rpb24odCxlKXt2YXIgcj14W3QuYXN0cl1bZV07dC5nZXQoKS5wdXNoKHIpfSksTShtKTtmb3IodmFyIHc9byhlLnRyYW5zZm9ybXMsciksaz0wO2s8aDtrKyspe3koaVtrXSk/KE0odixrKSxiW18rK109dyhrKSk6ZCYmXysrfXIuX2luZGV4VG9Qb2ludHM9YixlLl9sZW5ndGg9X319ZnVuY3Rpb24gTSh0LHIpe2Zvcih2YXIgaT0wO2k8cC5sZW5ndGg7aSsrKXt0KG4ubmVzdGVkUHJvcGVydHkoZSxwW2ldKSxyKX19fX0seyIuLi9jb25zdGFudHMvZmlsdGVyX29wcyI6NjU3LCIuLi9saWIiOjY4NCwiLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjczMiwiLi4vcmVnaXN0cnkiOjgxNywiLi9oZWxwZXJzIjoxMTI4fV0sMTEyNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9saWIiKSxpPXQoIi4uL3Bsb3RfYXBpL3Bsb3Rfc2NoZW1hIiksYT10KCIuLi9wbG90cy9wbG90cyIpLG89dCgiLi9oZWxwZXJzIikucG9pbnRzQWNjZXNzb3JGdW5jdGlvbjtmdW5jdGlvbiBzKHQsZSl7dmFyIHIscyxjLHUsaCxmLHAsZCxnLG0sdj1lLnRyYW5zZm9ybSx5PWUudHJhbnNmb3JtSW5kZXgseD10LnRyYW5zZm9ybXNbeV0uZ3JvdXBzLGI9byh0LnRyYW5zZm9ybXMsdik7aWYoIUFycmF5LmlzQXJyYXkoeCl8fDA9PT14Lmxlbmd0aClyZXR1cm5bdF07dmFyIF89bi5maWx0ZXJVbmlxdWUoeCksdz1uZXcgQXJyYXkoXy5sZW5ndGgpLGs9eC5sZW5ndGgsTT1pLmZpbmRBcnJheUF0dHJpYnV0ZXModCksQT12LnN0eWxlc3x8W10sVD17fTtmb3Iocj0wO3I8QS5sZW5ndGg7cisrKVRbQVtyXS50YXJnZXRdPUFbcl0udmFsdWU7di5zdHlsZXMmJihtPW4ua2V5ZWRDb250YWluZXIodiwic3R5bGVzIiwidGFyZ2V0IiwidmFsdWUubmFtZSIpKTt2YXIgUz17fSxFPXt9O2ZvcihyPTA7cjxfLmxlbmd0aDtyKyspe1NbZj1fW3JdXT1yLEVbZl09MCwocD13W3JdPW4uZXh0ZW5kRGVlcE5vQXJyYXlzKHt9LHQpKS5fZ3JvdXA9ZixwLnVwZGF0ZVN0eWxlPWwoZix5KSxwLnRyYW5zZm9ybXNbeV0uX2luZGV4VG9Qb2ludHM9e307dmFyIEM9bnVsbDtmb3IobSYmKEM9bS5nZXQoZikpLHAubmFtZT1DfHwiIj09PUM/QzpuLnRlbXBsYXRlU3RyaW5nKHYubmFtZWZvcm1hdCx7dHJhY2U6dC5uYW1lLGdyb3VwOmZ9KSxkPXAudHJhbnNmb3JtcyxwLnRyYW5zZm9ybXM9W10scz0wO3M8ZC5sZW5ndGg7cysrKXAudHJhbnNmb3Jtc1tzXT1uLmV4dGVuZERlZXBOb0FycmF5cyh7fSxkW3NdKTtmb3Iocz0wO3M8TS5sZW5ndGg7cysrKW4ubmVzdGVkUHJvcGVydHkocCxNW3NdKS5zZXQoW10pfWZvcihjPTA7YzxNLmxlbmd0aDtjKyspe2Zvcih1PU1bY10scz0wLGc9W107czxfLmxlbmd0aDtzKyspZ1tzXT1uLm5lc3RlZFByb3BlcnR5KHdbc10sdSkuZ2V0KCk7Zm9yKGg9bi5uZXN0ZWRQcm9wZXJ0eSh0LHUpLmdldCgpLHM9MDtzPGs7cysrKWdbU1t4W3NdXV0ucHVzaChoW3NdKX1mb3Iocz0wO3M8aztzKyspeyhwPXdbU1t4W3NdXV0pLnRyYW5zZm9ybXNbeV0uX2luZGV4VG9Qb2ludHNbRVt4W3NdXV09YihzKSxFW3hbc11dKyt9Zm9yKHI9MDtyPF8ubGVuZ3RoO3IrKylmPV9bcl0scD13W3JdLGEuY2xlYXJFeHBhbmRlZFRyYWNlRGVmYXVsdENvbG9ycyhwKSxwPW4uZXh0ZW5kRGVlcE5vQXJyYXlzKHAsVFtmXXx8e30pO3JldHVybiB3fWZ1bmN0aW9uIGwodCxlKXtyZXR1cm4gZnVuY3Rpb24ocixpLGEpe24ua2V5ZWRDb250YWluZXIociwidHJhbnNmb3Jtc1siK2UrIl0uc3R5bGVzIiwidGFyZ2V0IiwidmFsdWUuIitpKS5zZXQoU3RyaW5nKHQpLGEpfX1yLm1vZHVsZVR5cGU9InRyYW5zZm9ybSIsci5uYW1lPSJncm91cGJ5IixyLmF0dHJpYnV0ZXM9e2VuYWJsZWQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMifSxncm91cHM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGRmbHQ6W10sZWRpdFR5cGU6ImNhbGMifSxuYW1lZm9ybWF0Ont2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJjYWxjIn0sc3R5bGVzOntfaXNMaW5rZWRUb0FycmF5OiJzdHlsZSIsdGFyZ2V0Ont2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJjYWxjIn0sdmFsdWU6e3ZhbFR5cGU6ImFueSIsZGZsdDp7fSxlZGl0VHlwZToiY2FsYyIsX2NvbXBhcmVBc0pTT046ITB9LGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSxyLnN1cHBseURlZmF1bHRzPWZ1bmN0aW9uKHQsZSxpKXt2YXIgYSxvPXt9O2Z1bmN0aW9uIHMoZSxpKXtyZXR1cm4gbi5jb2VyY2UodCxvLHIuYXR0cmlidXRlcyxlLGkpfWlmKCFzKCJlbmFibGVkIikpcmV0dXJuIG87cygiZ3JvdXBzIikscygibmFtZWZvcm1hdCIsaS5fZGF0YUxlbmd0aD4xPyIle2dyb3VwfSAoJXt0cmFjZX0pIjoiJXtncm91cH0iKTt2YXIgbD10LnN0eWxlcyxjPW8uc3R5bGVzPVtdO2lmKGwpZm9yKGE9MDthPGwubGVuZ3RoO2ErKyl7dmFyIHU9Y1thXT17fTtuLmNvZXJjZShsW2FdLGNbYV0sci5hdHRyaWJ1dGVzLnN0eWxlcywidGFyZ2V0Iik7dmFyIGg9bi5jb2VyY2UobFthXSxjW2FdLHIuYXR0cmlidXRlcy5zdHlsZXMsInZhbHVlIik7bi5pc1BsYWluT2JqZWN0KGgpP3UudmFsdWU9bi5leHRlbmREZWVwKHt9LGgpOmgmJmRlbGV0ZSB1LnZhbHVlfXJldHVybiBvfSxyLnRyYW5zZm9ybT1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxhPVtdO2ZvcihuPTA7bjx0Lmxlbmd0aDtuKyspZm9yKHI9cyh0W25dLGUpLGk9MDtpPHIubGVuZ3RoO2krKylhLnB1c2gocltpXSk7cmV0dXJuIGF9fSx7Ii4uL2xpYiI6Njg0LCIuLi9wbG90X2FwaS9wbG90X3NjaGVtYSI6NzIxLCIuLi9wbG90cy9wbG90cyI6Nzk1LCIuL2hlbHBlcnMiOjExMjh9XSwxMTI4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3IucG9pbnRzQWNjZXNzb3JGdW5jdGlvbj1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcixuLGk9MDtpPHQubGVuZ3RoJiYocj10W2ldKSE9PWU7aSsrKXIuX2luZGV4VG9Qb2ludHMmJiExIT09ci5lbmFibGVkJiYobj1yLl9pbmRleFRvUG9pbnRzKTtyZXR1cm4gbj9mdW5jdGlvbih0KXtyZXR1cm4gblt0XX06ZnVuY3Rpb24odCl7cmV0dXJuW3RdfX19LHt9XSwxMTI5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2xpYiIpLGk9dCgiLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxhPXQoIi4vaGVscGVycyIpLnBvaW50c0FjY2Vzc29yRnVuY3Rpb247ci5tb2R1bGVUeXBlPSJ0cmFuc2Zvcm0iLHIubmFtZT0ic29ydCIsci5hdHRyaWJ1dGVzPXtlbmFibGVkOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn0sdGFyZ2V0Ont2YWxUeXBlOiJzdHJpbmciLHN0cmljdDohMCxub0JsYW5rOiEwLGFycmF5T2s6ITAsZGZsdDoieCIsZWRpdFR5cGU6ImNhbGMifSxvcmRlcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYXNjZW5kaW5nIiwiZGVzY2VuZGluZyJdLGRmbHQ6ImFzY2VuZGluZyIsZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9LHIuc3VwcGx5RGVmYXVsdHM9ZnVuY3Rpb24odCl7dmFyIGU9e307ZnVuY3Rpb24gaShpLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsci5hdHRyaWJ1dGVzLGksYSl9cmV0dXJuIGkoImVuYWJsZWQiKSYmKGkoInRhcmdldCIpLGkoIm9yZGVyIikpLGV9LHIuY2FsY1RyYW5zZm9ybT1mdW5jdGlvbih0LGUscil7aWYoci5lbmFibGVkKXt2YXIgbz1uLmdldFRhcmdldEFycmF5KGUscik7aWYobyl7dmFyIHM9ci50YXJnZXQsbD1vLmxlbmd0aDtlLl9sZW5ndGgmJihsPU1hdGgubWluKGwsZS5fbGVuZ3RoKSk7dmFyIGMsdSxoPWUuX2FycmF5QXR0cnMsZj1mdW5jdGlvbih0LGUscixuKXt2YXIgaSxhPW5ldyBBcnJheShuKSxvPW5ldyBBcnJheShuKTtmb3IoaT0wO2k8bjtpKyspYVtpXT17djplW2ldLGk6aX07Zm9yKGEuc29ydChmdW5jdGlvbih0LGUpe3N3aXRjaCh0Lm9yZGVyKXtjYXNlImFzY2VuZGluZyI6cmV0dXJuIGZ1bmN0aW9uKHQscil7cmV0dXJuIGUodC52KS1lKHIudil9O2Nhc2UiZGVzY2VuZGluZyI6cmV0dXJuIGZ1bmN0aW9uKHQscil7cmV0dXJuIGUoci52KS1lKHQudil9fX0odCxyKSksaT0wO2k8bjtpKyspb1tpXT1hW2ldLmk7cmV0dXJuIG99KHIsbyxpLmdldERhdGFUb0Nvb3JkRnVuYyh0LGUscyxvKSxsKSxwPWEoZS50cmFuc2Zvcm1zLHIpLGQ9e307Zm9yKGM9MDtjPGgubGVuZ3RoO2MrKyl7dmFyIGc9bi5uZXN0ZWRQcm9wZXJ0eShlLGhbY10pLG09Zy5nZXQoKSx2PW5ldyBBcnJheShsKTtmb3IodT0wO3U8bDt1Kyspdlt1XT1tW2ZbdV1dO2cuc2V0KHYpfWZvcih1PTA7dTxsO3UrKylkW3VdPXAoZlt1XSk7ci5faW5kZXhUb1BvaW50cz1kLGUuX2xlbmd0aD1sfX19fSx7Ii4uL2xpYiI6Njg0LCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzMyLCIuL2hlbHBlcnMiOjExMjh9XX0se30sWzIxXSkoMjEpfSk7"></script>
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
32
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
33 <style type="text/css">code{white-space: pre;}</style>
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
34 <style type="text/css">
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
35 pre:not([class]) {
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
36 background-color: white;
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
37 }
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
38 </style>
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
39 <script type="text/javascript">
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
40 if (window.hljs) {
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
41 hljs.configure({languages: []});
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
42 hljs.initHighlightingOnLoad();
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
43 if (document.readyState && document.readyState === "complete") {
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
44 window.setTimeout(function() { hljs.initHighlighting(); }, 0);
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
45 }
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
46 }
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
47 </script>
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
48
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
49
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
50
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
51 <style type="text/css">
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
52 h1 {
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
53 font-size: 34px;
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
54 }
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
55 h1.title {
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
56 font-size: 38px;
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
57 }
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
58 h2 {
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
59 font-size: 30px;
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
60 }
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
61 h3 {
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
62 font-size: 24px;
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
63 }
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
64 h4 {
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
65 font-size: 18px;
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
66 }
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
67 h5 {
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
68 font-size: 16px;
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
69 }
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
70 h6 {
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
71 font-size: 12px;
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
72 }
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
73 .table th:not([align]) {
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
74 text-align: left;
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
75 }
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
76 </style>
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
77
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
78
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
79 </head>
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
80
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
81 <body>
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
82
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
83 <style type="text/css">
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
84 .main-container {
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
85 max-width: 940px;
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
86 margin-left: auto;
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
87 margin-right: auto;
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
88 }
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
89 code {
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
90 color: inherit;
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
91 background-color: rgba(0, 0, 0, 0.04);
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
92 }
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
93 img {
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
94 max-width:100%;
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
95 height: auto;
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
96 }
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
97 .tabbed-pane {
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
98 padding-top: 12px;
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
99 }
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
100 .html-widget {
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
101 margin-bottom: 20px;
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
102 }
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
103 button.code-folding-btn:focus {
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
104 outline: none;
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
105 }
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
106 </style>
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
107
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
108
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
109
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
110 <div class="container-fluid main-container">
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
111
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
112 <!-- tabsets -->
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
113 <script>
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
114 $(document).ready(function () {
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
115 window.buildTabsets("TOC");
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
116 });
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
117 </script>
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
118
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
119 <!-- code folding -->
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
120
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
121
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
122
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
123
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
124
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
125
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
126 <div class="fluid-row" id="header">
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
127
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
128
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
129
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
130
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
131 </div>
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
132
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
133
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
134 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
135 <style type="text/css">
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
136 code.r{ /* Code block */
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
137 font-size: 11px;
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
138 }
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
139 pre { /* Code block */
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
140 font-size: 11px
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
141 }
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
142 .button {
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
143 background-color: #2a7ecc; /* Blue */
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
144 border : none;
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
145 color : white;
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
146 padding: 5px 10px;
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
147 text-align : center;
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
148 text-decoration : none;
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
149 display: inline-block;
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
150 font-size: 12px;
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
151 margin: 4px 2px;
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
152 cursor: pointer;
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
153 border-radius: 8px;
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
154 }
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
155 h4 {
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
156 display : block;
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
157 font-size : 1em;
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
158 margin-top: 1.33em;
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
159 margin-bottom: 1.33em;
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
160 margin-left : 0;
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
161 margin-right : 0;
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
162 font-weight : bold;
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
163 color: #2a7ecc;
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
164 }
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
165 </style>
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
166 <script src="data:application/javascript;base64,LyogRmlsZVNhdmVyLmpzCiAqIEEgc2F2ZUFzKCkgRmlsZVNhdmVyIGltcGxlbWVudGF0aW9uLgogKiAyMDE0LTA4LTI5CiAqCiAqIEJ5IEVsaSBHcmV5LCBodHRwOi8vZWxpZ3JleS5jb20KICogTGljZW5zZTogWDExL01JVAogKiAgIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZWxpZ3JleS9GaWxlU2F2ZXIuanMvYmxvYi9tYXN0ZXIvTElDRU5TRS5tZAogKi8KCi8qZ2xvYmFsIHNlbGYgKi8KLypqc2xpbnQgYml0d2lzZTogdHJ1ZSwgaW5kZW50OiA0LCBsYXhicmVhazogdHJ1ZSwgbGF4Y29tbWE6IHRydWUsIHNtYXJ0dGFiczogdHJ1ZSwgcGx1c3BsdXM6IHRydWUgKi8KCi8qISBAc291cmNlIGh0dHA6Ly9wdXJsLmVsaWdyZXkuY29tL2dpdGh1Yi9GaWxlU2F2ZXIuanMvYmxvYi9tYXN0ZXIvRmlsZVNhdmVyLmpzICovCgp2YXIgc2F2ZUFzID0gc2F2ZUFzCiAgLy8gSUUgMTArIChuYXRpdmUgc2F2ZUFzKQogIHx8ICh0eXBlb2YgbmF2aWdhdG9yICE9PSAidW5kZWZpbmVkIiAmJgogICAgICBuYXZpZ2F0b3IubXNTYXZlT3JPcGVuQmxvYiAmJiBuYXZpZ2F0b3IubXNTYXZlT3JPcGVuQmxvYi5iaW5kKG5hdmlnYXRvcikpCiAgLy8gRXZlcnlvbmUgZWxzZQogIHx8IChmdW5jdGlvbih2aWV3KSB7CgkidXNlIHN0cmljdCI7CgkvLyBJRSA8MTAgaXMgZXhwbGljaXRseSB1bnN1cHBvcnRlZAoJaWYgKHR5cGVvZiBuYXZpZ2F0b3IgIT09ICJ1bmRlZmluZWQiICYmCgkgICAgL01TSUUgWzEtOV1cLi8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSkgewoJCXJldHVybjsKCX0KCXZhcgoJCSAgZG9jID0gdmlldy5kb2N1bWVudAoJCSAgLy8gb25seSBnZXQgVVJMIHdoZW4gbmVjZXNzYXJ5IGluIGNhc2UgQmxvYi5qcyBoYXNuJ3Qgb3ZlcnJpZGRlbiBpdCB5ZXQKCQksIGdldF9VUkwgPSBmdW5jdGlvbigpIHsKCQkJcmV0dXJuIHZpZXcuVVJMIHx8IHZpZXcud2Via2l0VVJMIHx8IHZpZXc7CgkJfQoJCSwgc2F2ZV9saW5rID0gZG9jLmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsICJhIikKCQksIGNhbl91c2Vfc2F2ZV9saW5rID0gImRvd25sb2FkIiBpbiBzYXZlX2xpbmsKCQksIGNsaWNrID0gZnVuY3Rpb24obm9kZSkgewoJCQl2YXIgZXZlbnQgPSBkb2MuY3JlYXRlRXZlbnQoIk1vdXNlRXZlbnRzIik7CgkJCWV2ZW50LmluaXRNb3VzZUV2ZW50KAoJCQkJImNsaWNrIiwgdHJ1ZSwgZmFsc2UsIHZpZXcsIDAsIDAsIDAsIDAsIDAKCQkJCSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIDAsIG51bGwKCQkJKTsKCQkJbm9kZS5kaXNwYXRjaEV2ZW50KGV2ZW50KTsKCQl9CgkJLCB3ZWJraXRfcmVxX2ZzID0gdmlldy53ZWJraXRSZXF1ZXN0RmlsZVN5c3RlbQoJCSwgcmVxX2ZzID0gdmlldy5yZXF1ZXN0RmlsZVN5c3RlbSB8fCB3ZWJraXRfcmVxX2ZzIHx8IHZpZXcubW96UmVxdWVzdEZpbGVTeXN0ZW0KCQksIHRocm93X291dHNpZGUgPSBmdW5jdGlvbihleCkgewoJCQkodmlldy5zZXRJbW1lZGlhdGUgfHwgdmlldy5zZXRUaW1lb3V0KShmdW5jdGlvbigpIHsKCQkJCXRocm93IGV4OwoJCQl9LCAwKTsKCQl9CgkJLCBmb3JjZV9zYXZlYWJsZV90eXBlID0gImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIKCQksIGZzX21pbl9zaXplID0gMAoJCS8vIFNlZSBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9Mzc1Mjk3I2M3IGZvcgoJCS8vIHRoZSByZWFzb25pbmcgYmVoaW5kIHRoZSB0aW1lb3V0IGFuZCByZXZvY2F0aW9uIGZsb3cKCQksIGFyYml0cmFyeV9yZXZva2VfdGltZW91dCA9IDEwCgkJLCByZXZva2UgPSBmdW5jdGlvbihmaWxlKSB7CgkJCXZhciByZXZva2VyID0gZnVuY3Rpb24oKSB7CgkJCQlpZiAodHlwZW9mIGZpbGUgPT09ICJzdHJpbmciKSB7IC8vIGZpbGUgaXMgYW4gb2JqZWN0IFVSTAoJCQkJCWdldF9VUkwoKS5yZXZva2VPYmplY3RVUkwoZmlsZSk7CgkJCQl9IGVsc2UgeyAvLyBmaWxlIGlzIGEgRmlsZQoJCQkJCWZpbGUucmVtb3ZlKCk7CgkJCQl9CgkJCX07CgkJCWlmICh2aWV3LmNocm9tZSkgewoJCQkJcmV2b2tlcigpOwoJCQl9IGVsc2UgewoJCQkJc2V0VGltZW91dChyZXZva2VyLCBhcmJpdHJhcnlfcmV2b2tlX3RpbWVvdXQpOwoJCQl9CgkJfQoJCSwgZGlzcGF0Y2ggPSBmdW5jdGlvbihmaWxlc2F2ZXIsIGV2ZW50X3R5cGVzLCBldmVudCkgewoJCQlldmVudF90eXBlcyA9IFtdLmNvbmNhdChldmVudF90eXBlcyk7CgkJCXZhciBpID0gZXZlbnRfdHlwZXMubGVuZ3RoOwoJCQl3aGlsZSAoaS0tKSB7CgkJCQl2YXIgbGlzdGVuZXIgPSBmaWxlc2F2ZXJbIm9uIiArIGV2ZW50X3R5cGVzW2ldXTsKCQkJCWlmICh0eXBlb2YgbGlzdGVuZXIgPT09ICJmdW5jdGlvbiIpIHsKCQkJCQl0cnkgewoJCQkJCQlsaXN0ZW5lci5jYWxsKGZpbGVzYXZlciwgZXZlbnQgfHwgZmlsZXNhdmVyKTsKCQkJCQl9IGNhdGNoIChleCkgewoJCQkJCQl0aHJvd19vdXRzaWRlKGV4KTsKCQkJCQl9CgkJCQl9CgkJCX0KCQl9CgkJLCBGaWxlU2F2ZXIgPSBmdW5jdGlvbihibG9iLCBuYW1lKSB7CgkJCS8vIEZpcnN0IHRyeSBhLmRvd25sb2FkLCB0aGVuIHdlYiBmaWxlc3lzdGVtLCB0aGVuIG9iamVjdCBVUkxzCgkJCXZhcgoJCQkJICBmaWxlc2F2ZXIgPSB0aGlzCgkJCQksIHR5cGUgPSBibG9iLnR5cGUKCQkJCSwgYmxvYl9jaGFuZ2VkID0gZmFsc2UKCQkJCSwgb2JqZWN0X3VybAoJCQkJLCB0YXJnZXRfdmlldwoJCQkJLCBkaXNwYXRjaF9hbGwgPSBmdW5jdGlvbigpIHsKCQkJCQlkaXNwYXRjaChmaWxlc2F2ZXIsICJ3cml0ZXN0YXJ0IHByb2dyZXNzIHdyaXRlIHdyaXRlZW5kIi5zcGxpdCgiICIpKTsKCQkJCX0KCQkJCS8vIG9uIGFueSBmaWxlc3lzIGVycm9ycyByZXZlcnQgdG8gc2F2aW5nIHdpdGggb2JqZWN0IFVSTHMKCQkJCSwgZnNfZXJyb3IgPSBmdW5jdGlvbigpIHsKCQkJCQkvLyBkb24ndCBjcmVhdGUgbW9yZSBvYmplY3QgVVJMcyB0aGFuIG5lZWRlZAoJCQkJCWlmIChibG9iX2NoYW5nZWQgfHwgIW9iamVjdF91cmwpIHsKCQkJCQkJb2JqZWN0X3VybCA9IGdldF9VUkwoKS5jcmVhdGVPYmplY3RVUkwoYmxvYik7CgkJCQkJfQoJCQkJCWlmICh0YXJnZXRfdmlldykgewoJCQkJCQl0YXJnZXRfdmlldy5sb2NhdGlvbi5ocmVmID0gb2JqZWN0X3VybDsKCQkJCQl9IGVsc2UgewoJCQkJCQl2YXIgbmV3X3RhYiA9IHZpZXcub3BlbihvYmplY3RfdXJsLCAiX2JsYW5rIik7CgkJCQkJCWlmIChuZXdfdGFiID09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygc2FmYXJpICE9PSAidW5kZWZpbmVkIikgewoJCQkJCQkJLy9BcHBsZSBkbyBub3QgYWxsb3cgd2luZG93Lm9wZW4sIHNlZSBodHRwOi8vYml0Lmx5LzFrWmZmUkkKCQkJCQkJCXZpZXcubG9jYXRpb24uaHJlZiA9IG9iamVjdF91cmwKCQkJCQkJfQoJCQkJCX0KCQkJCQlmaWxlc2F2ZXIucmVhZHlTdGF0ZSA9IGZpbGVzYXZlci5ET05FOwoJCQkJCWRpc3BhdGNoX2FsbCgpOwoJCQkJCXJldm9rZShvYmplY3RfdXJsKTsKCQkJCX0KCQkJCSwgYWJvcnRhYmxlID0gZnVuY3Rpb24oZnVuYykgewoJCQkJCXJldHVybiBmdW5jdGlvbigpIHsKCQkJCQkJaWYgKGZpbGVzYXZlci5yZWFkeVN0YXRlICE9PSBmaWxlc2F2ZXIuRE9ORSkgewoJCQkJCQkJcmV0dXJuIGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKCQkJCQkJfQoJCQkJCX07CgkJCQl9CgkJCQksIGNyZWF0ZV9pZl9ub3RfZm91bmQgPSB7Y3JlYXRlOiB0cnVlLCBleGNsdXNpdmU6IGZhbHNlfQoJCQkJLCBzbGljZQoJCQk7CgkJCWZpbGVzYXZlci5yZWFkeVN0YXRlID0gZmlsZXNhdmVyLklOSVQ7CgkJCWlmICghbmFtZSkgewoJCQkJbmFtZSA9ICJkb3dubG9hZCI7CgkJCX0KCQkJaWYgKGNhbl91c2Vfc2F2ZV9saW5rKSB7CgkJCQlvYmplY3RfdXJsID0gZ2V0X1VSTCgpLmNyZWF0ZU9iamVjdFVSTChibG9iKTsKCQkJCXNhdmVfbGluay5ocmVmID0gb2JqZWN0X3VybDsKCQkJCXNhdmVfbGluay5kb3dubG9hZCA9IG5hbWU7CgkJCQljbGljayhzYXZlX2xpbmspOwoJCQkJZmlsZXNhdmVyLnJlYWR5U3RhdGUgPSBmaWxlc2F2ZXIuRE9ORTsKCQkJCWRpc3BhdGNoX2FsbCgpOwoJCQkJcmV2b2tlKG9iamVjdF91cmwpOwoJCQkJcmV0dXJuOwoJCQl9CgkJCS8vIE9iamVjdCBhbmQgd2ViIGZpbGVzeXN0ZW0gVVJMcyBoYXZlIGEgcHJvYmxlbSBzYXZpbmcgaW4gR29vZ2xlIENocm9tZSB3aGVuCgkJCS8vIHZpZXdlZCBpbiBhIHRhYiwgc28gSSBmb3JjZSBzYXZlIHdpdGggYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCgkJCS8vIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTkxMTU4CgkJCS8vIFVwZGF0ZTogR29vZ2xlIGVycmFudGx5IGNsb3NlZCA5MTE1OCwgSSBzdWJtaXR0ZWQgaXQgYWdhaW46CgkJCS8vIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0zODk2NDIKCQkJaWYgKHZpZXcuY2hyb21lICYmIHR5cGUgJiYgdHlwZSAhPT0gZm9yY2Vfc2F2ZWFibGVfdHlwZSkgewoJCQkJc2xpY2UgPSBibG9iLnNsaWNlIHx8IGJsb2Iud2Via2l0U2xpY2U7CgkJCQlibG9iID0gc2xpY2UuY2FsbChibG9iLCAwLCBibG9iLnNpemUsIGZvcmNlX3NhdmVhYmxlX3R5cGUpOwoJCQkJYmxvYl9jaGFuZ2VkID0gdHJ1ZTsKCQkJfQoJCQkvLyBTaW5jZSBJIGNhbid0IGJlIHN1cmUgdGhhdCB0aGUgZ3Vlc3NlZCBtZWRpYSB0eXBlIHdpbGwgdHJpZ2dlciBhIGRvd25sb2FkCgkJCS8vIGluIFdlYktpdCwgSSBhcHBlbmQgLmRvd25sb2FkIHRvIHRoZSBmaWxlbmFtZS4KCQkJLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY1NDQwCgkJCWlmICh3ZWJraXRfcmVxX2ZzICYmIG5hbWUgIT09ICJkb3dubG9hZCIpIHsKCQkJCW5hbWUgKz0gIi5kb3dubG9hZCI7CgkJCX0KCQkJaWYgKHR5cGUgPT09IGZvcmNlX3NhdmVhYmxlX3R5cGUgfHwgd2Via2l0X3JlcV9mcykgewoJCQkJdGFyZ2V0X3ZpZXcgPSB2aWV3OwoJCQl9CgkJCWlmICghcmVxX2ZzKSB7CgkJCQlmc19lcnJvcigpOwoJCQkJcmV0dXJuOwoJCQl9CgkJCWZzX21pbl9zaXplICs9IGJsb2Iuc2l6ZTsKCQkJcmVxX2ZzKHZpZXcuVEVNUE9SQVJZLCBmc19taW5fc2l6ZSwgYWJvcnRhYmxlKGZ1bmN0aW9uKGZzKSB7CgkJCQlmcy5yb290LmdldERpcmVjdG9yeSgic2F2ZWQiLCBjcmVhdGVfaWZfbm90X2ZvdW5kLCBhYm9ydGFibGUoZnVuY3Rpb24oZGlyKSB7CgkJCQkJdmFyIHNhdmUgPSBmdW5jdGlvbigpIHsKCQkJCQkJZGlyLmdldEZpbGUobmFtZSwgY3JlYXRlX2lmX25vdF9mb3VuZCwgYWJvcnRhYmxlKGZ1bmN0aW9uKGZpbGUpIHsKCQkJCQkJCWZpbGUuY3JlYXRlV3JpdGVyKGFib3J0YWJsZShmdW5jdGlvbih3cml0ZXIpIHsKCQkJCQkJCQl3cml0ZXIub253cml0ZWVuZCA9IGZ1bmN0aW9uKGV2ZW50KSB7CgkJCQkJCQkJCXRhcmdldF92aWV3LmxvY2F0aW9uLmhyZWYgPSBmaWxlLnRvVVJMKCk7CgkJCQkJCQkJCWZpbGVzYXZlci5yZWFkeVN0YXRlID0gZmlsZXNhdmVyLkRPTkU7CgkJCQkJCQkJCWRpc3BhdGNoKGZpbGVzYXZlciwgIndyaXRlZW5kIiwgZXZlbnQpOwoJCQkJCQkJCQlyZXZva2UoZmlsZSk7CgkJCQkJCQkJfTsKCQkJCQkJCQl3cml0ZXIub25lcnJvciA9IGZ1bmN0aW9uKCkgewoJCQkJCQkJCQl2YXIgZXJyb3IgPSB3cml0ZXIuZXJyb3I7CgkJCQkJCQkJCWlmIChlcnJvci5jb2RlICE9PSBlcnJvci5BQk9SVF9FUlIpIHsKCQkJCQkJCQkJCWZzX2Vycm9yKCk7CgkJCQkJCQkJCX0KCQkJCQkJCQl9OwoJCQkJCQkJCSJ3cml0ZXN0YXJ0IHByb2dyZXNzIHdyaXRlIGFib3J0Ii5zcGxpdCgiICIpLmZvckVhY2goZnVuY3Rpb24oZXZlbnQpIHsKCQkJCQkJCQkJd3JpdGVyWyJvbiIgKyBldmVudF0gPSBmaWxlc2F2ZXJbIm9uIiArIGV2ZW50XTsKCQkJCQkJCQl9KTsKCQkJCQkJCQl3cml0ZXIud3JpdGUoYmxvYik7CgkJCQkJCQkJZmlsZXNhdmVyLmFib3J0ID0gZnVuY3Rpb24oKSB7CgkJCQkJCQkJCXdyaXRlci5hYm9ydCgpOwoJCQkJCQkJCQlmaWxlc2F2ZXIucmVhZHlTdGF0ZSA9IGZpbGVzYXZlci5ET05FOwoJCQkJCQkJCX07CgkJCQkJCQkJZmlsZXNhdmVyLnJlYWR5U3RhdGUgPSBmaWxlc2F2ZXIuV1JJVElORzsKCQkJCQkJCX0pLCBmc19lcnJvcik7CgkJCQkJCX0pLCBmc19lcnJvcik7CgkJCQkJfTsKCQkJCQlkaXIuZ2V0RmlsZShuYW1lLCB7Y3JlYXRlOiBmYWxzZX0sIGFib3J0YWJsZShmdW5jdGlvbihmaWxlKSB7CgkJCQkJCS8vIGRlbGV0ZSBmaWxlIGlmIGl0IGFscmVhZHkgZXhpc3RzCgkJCQkJCWZpbGUucmVtb3ZlKCk7CgkJCQkJCXNhdmUoKTsKCQkJCQl9KSwgYWJvcnRhYmxlKGZ1bmN0aW9uKGV4KSB7CgkJCQkJCWlmIChleC5jb2RlID09PSBleC5OT1RfRk9VTkRfRVJSKSB7CgkJCQkJCQlzYXZlKCk7CgkJCQkJCX0gZWxzZSB7CgkJCQkJCQlmc19lcnJvcigpOwoJCQkJCQl9CgkJCQkJfSkpOwoJCQkJfSksIGZzX2Vycm9yKTsKCQkJfSksIGZzX2Vycm9yKTsKCQl9CgkJLCBGU19wcm90byA9IEZpbGVTYXZlci5wcm90b3R5cGUKCQksIHNhdmVBcyA9IGZ1bmN0aW9uKGJsb2IsIG5hbWUpIHsKCQkJcmV0dXJuIG5ldyBGaWxlU2F2ZXIoYmxvYiwgbmFtZSk7CgkJfQoJOwoJRlNfcHJvdG8uYWJvcnQgPSBmdW5jdGlvbigpIHsKCQl2YXIgZmlsZXNhdmVyID0gdGhpczsKCQlmaWxlc2F2ZXIucmVhZHlTdGF0ZSA9IGZpbGVzYXZlci5ET05FOwoJCWRpc3BhdGNoKGZpbGVzYXZlciwgImFib3J0Iik7Cgl9OwoJRlNfcHJvdG8ucmVhZHlTdGF0ZSA9IEZTX3Byb3RvLklOSVQgPSAwOwoJRlNfcHJvdG8uV1JJVElORyA9IDE7CglGU19wcm90by5ET05FID0gMjsKCglGU19wcm90by5lcnJvciA9CglGU19wcm90by5vbndyaXRlc3RhcnQgPQoJRlNfcHJvdG8ub25wcm9ncmVzcyA9CglGU19wcm90by5vbndyaXRlID0KCUZTX3Byb3RvLm9uYWJvcnQgPQoJRlNfcHJvdG8ub25lcnJvciA9CglGU19wcm90by5vbndyaXRlZW5kID0KCQludWxsOwoKCXJldHVybiBzYXZlQXM7Cn0oCgkgICB0eXBlb2Ygc2VsZiAhPT0gInVuZGVmaW5lZCIgJiYgc2VsZgoJfHwgdHlwZW9mIHdpbmRvdyAhPT0gInVuZGVmaW5lZCIgJiYgd2luZG93Cgl8fCB0aGlzLmNvbnRlbnQKKSk7Ci8vIGBzZWxmYCBpcyB1bmRlZmluZWQgaW4gRmlyZWZveCBmb3IgQW5kcm9pZCBjb250ZW50IHNjcmlwdCBjb250ZXh0Ci8vIHdoaWxlIGB0aGlzYCBpcyBuc0lDb250ZW50RnJhbWVNZXNzYWdlTWFuYWdlcgovLyB3aXRoIGFuIGF0dHJpYnV0ZSBgY29udGVudGAgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgd2luZG93CgppZiAodHlwZW9mIG1vZHVsZSAhPT0gInVuZGVmaW5lZCIgJiYgbW9kdWxlICE9PSBudWxsKSB7CiAgbW9kdWxlLmV4cG9ydHMgPSBzYXZlQXM7Cn0gZWxzZSBpZiAoKHR5cGVvZiBkZWZpbmUgIT09ICJ1bmRlZmluZWQiICYmIGRlZmluZSAhPT0gbnVsbCkgJiYgKGRlZmluZS5hbWQgIT0gbnVsbCkpIHsKICBkZWZpbmUoW10sIGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIHNhdmVBczsKICB9KTsKfQo="></script>
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
167 <h3>
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
168 FROGS Phyloseq: Structure Visualization
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
169 </h3>
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
170 <p>Phyloseq 1.24.2</p>
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
171 <div id="section" class="section level1 tabset tabset-fade tabset-pills">
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
172 <h1></h1>
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
173 <div id="ordination-plot" class="section level2">
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
174 <h2>Ordination plot</h2>
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
175 <h1 id="plot1">
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
176 <div id="htmlwidget-ead310d9c48801a976bf" style="width:768px;height:576px;" class="plotly html-widget"></div>
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
177 <script type="application/json" data-for="htmlwidget-ead310d9c48801a976bf">{"x":{"data":[{"x":[0.012957412658786,0.252937922236795,0.265575553295105,0.157959004607303,0.248855891910394,0.288816195013544,0.226110621514258,0.388636690075439],"y":[0.0870617169651272,0.0579779094723288,0.063629318536794,0.0702576332606376,0.0341204878110841,0.0415581423691279,-0.00226720415574387,0.0390251377633836],"text":"EnvType: BoeufHache","type":"scatter","mode":"markers","marker":{"autocolorscale":false,"color":"rgba(248,118,109,1)","opacity":1,"size":5.66929133858268,"symbol":"circle","line":{"width":1.88976377952756,"color":"rgba(248,118,109,1)"}},"hoveron":"points","name":"BoeufHache","legendgroup":"BoeufHache","showlegend":true,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[0.304683264189008,0.331119680450375,0.27425700535173,0.311929744484988,0.347381007320029,0.348692603529787,0.347180694995817,0.299517006814187],"y":[0.0933958771374911,0.0624518107829206,-0.0059829543186604,-0.0972554714230653,0.0129791259111269,-0.0360355330493796,-0.00750899442963111,-0.00936035146500204],"text":"EnvType: VeauHache","type":"scatter","mode":"markers","marker":{"autocolorscale":false,"color":"rgba(205,150,0,1)","opacity":1,"size":5.66929133858268,"symbol":"circle","line":{"width":1.88976377952756,"color":"rgba(205,150,0,1)"}},"hoveron":"points","name":"VeauHache","legendgroup":"VeauHache","showlegend":true,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[0.0722159751427036,0.0192558472397982,0.0643713992156581,0.0404174098399885,0.077956672007709,0.0545607844353829,0.083779061276259,0.051361338485784],"y":[-0.207587091076419,-0.179053832780151,-0.167830955896218,-0.145787313946991,-0.20473629585954,-0.174803943253866,-0.16197449679102,-0.169937602755981],"text":"EnvType: DesLardons","type":"scatter","mode":"markers","marker":{"autocolorscale":false,"color":"rgba(124,174,0,1)","opacity":1,"size":5.66929133858268,"symbol":"circle","line":{"width":1.88976377952756,"color":"rgba(124,174,0,1)"}},"hoveron":"points","name":"DesLardons","legendgroup":"DesLardons","showlegend":true,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[0.167371171203577,0.115367643903728,0.130038267160189,0.167412034522301,0.0954763528308696,0.14565459255884,0.104183193721206,0.150076354527749],"y":[0.0273725736526009,0.0921802017856092,0.0339871928659668,0.108368689467176,0.100491079237493,0.135169433872961,0.141808723521742,0.170762008852395],"text":"EnvType: MerguezVolaille","type":"scatter","mode":"markers","marker":{"autocolorscale":false,"color":"rgba(0,190,103,1)","opacity":1,"size":5.66929133858268,"symbol":"circle","line":{"width":1.88976377952756,"color":"rgba(0,190,103,1)"}},"hoveron":"points","name":"MerguezVolaille","legendgroup":"MerguezVolaille","showlegend":true,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[-0.217723002389034,-0.228969939307322,-0.197789911677256,-0.24896685292564,-0.225284104549037,-0.266067963610413,-0.226768440046782,-0.142544755761122],"y":[0.221090541860553,0.271394894937003,0.217154023702329,0.253663387792465,0.264004345646487,0.258840668730141,0.319355686864624,0.225465829554915],"text":"EnvType: SaumonFume","type":"scatter","mode":"markers","marker":{"autocolorscale":false,"color":"rgba(0,191,196,1)","opacity":1,"size":5.66929133858268,"symbol":"circle","line":{"width":1.88976377952756,"color":"rgba(0,191,196,1)"}},"hoveron":"points","name":"SaumonFume","legendgroup":"SaumonFume","showlegend":true,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[-0.0960617233410296,-0.153566741536979,-0.180884105992473,-0.161350587989724,-0.183811721606029,-0.136388070888324,-0.110831444070035,-0.160123318100172],"y":[0.0708903535652444,0.142100467503355,0.127040236267667,0.166372123060407,0.118175881914631,0.0762779254265929,0.0104941206671573,0.0642991584277549],"text":"EnvType: FiletSaumon","type":"scatter","mode":"markers","marker":{"autocolorscale":false,"color":"rgba(0,169,255,1)","opacity":1,"size":5.66929133858268,"symbol":"circle","line":{"width":1.88976377952756,"color":"rgba(0,169,255,1)"}},"hoveron":"points","name":"FiletSaumon","legendgroup":"FiletSaumon","showlegend":true,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[-0.240574842660715,-0.183524206689981,-0.230029319520437,-0.215549499566102,-0.167754018236042,-0.177125143509264,-0.198296354915764,-0.217594171797218],"y":[-0.0304615121867686,-0.100783774022496,-0.066303692908519,-0.0996074304347909,-0.157558694062678,-0.0956818449077603,-0.0794703910782637,-0.102130944185628],"text":"EnvType: FiletCabillaud","type":"scatter","mode":"markers","marker":{"autocolorscale":false,"color":"rgba(199,124,255,1)","opacity":1,"size":5.66929133858268,"symbol":"circle","line":{"width":1.88976377952756,"color":"rgba(199,124,255,1)"}},"hoveron":"points","name":"FiletCabillaud","legendgroup":"FiletCabillaud","showlegend":true,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[-0.183900260792736,-0.164356573912208,-0.116964140107378,-0.118237548359161,-0.181824616411064,-0.167991315976736,-0.237171224468772,-0.208082475804338],"y":[-0.188071501367926,-0.181168066985233,-0.275428780916106,-0.276808640641828,-0.175237715449998,-0.27104702791284,-0.260393937928582,-0.248940712996204],"text":"EnvType: Crevette","type":"scatter","mode":"markers","marker":{"autocolorscale":false,"color":"rgba(255,97,204,1)","opacity":1,"size":5.66929133858268,"symbol":"circle","line":{"width":1.88976377952756,"color":"rgba(255,97,204,1)"}},"hoveron":"points","name":"Crevette","legendgroup":"Crevette","showlegend":true,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[0.012957412658786,0.252937922236795,0.265575553295105,0.157959004607303,0.248855891910394,0.288816195013544,0.226110621514258,0.388636690075439],"y":[0.0870617169651272,0.0579779094723288,0.063629318536794,0.0702576332606376,0.0341204878110841,0.0415581423691279,-0.00226720415574387,0.0390251377633836],"text":["BHT0.LOT01","BHT0.LOT07","BHT0.LOT06","BHT0.LOT03","BHT0.LOT10","BHT0.LOT05","BHT0.LOT04","BHT0.LOT08"],"hovertext":["SampleID: BHT0.LOT01<br />EnvType: BoeufHache","SampleID: BHT0.LOT07<br />EnvType: BoeufHache","SampleID: BHT0.LOT06<br />EnvType: BoeufHache","SampleID: BHT0.LOT03<br />EnvType: BoeufHache","SampleID: BHT0.LOT10<br />EnvType: BoeufHache","SampleID: BHT0.LOT05<br />EnvType: BoeufHache","SampleID: BHT0.LOT04<br />EnvType: BoeufHache","SampleID: BHT0.LOT08<br />EnvType: BoeufHache"],"textfont":{"size":14.6645669291339,"color":"rgba(248,118,109,0)"},"type":"scatter","mode":"text","hoveron":"points","name":"BoeufHache","legendgroup":"BoeufHache","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[0.304683264189008,0.331119680450375,0.27425700535173,0.311929744484988,0.347381007320029,0.348692603529787,0.347180694995817,0.299517006814187],"y":[0.0933958771374911,0.0624518107829206,-0.0059829543186604,-0.0972554714230653,0.0129791259111269,-0.0360355330493796,-0.00750899442963111,-0.00936035146500204],"text":["VHT0.LOT02","VHT0.LOT10","VHT0.LOT03","VHT0.LOT01","VHT0.LOT08","VHT0.LOT06","VHT0.LOT07","VHT0.LOT04"],"hovertext":["SampleID: VHT0.LOT02<br />EnvType: VeauHache","SampleID: VHT0.LOT10<br />EnvType: VeauHache","SampleID: VHT0.LOT03<br />EnvType: VeauHache","SampleID: VHT0.LOT01<br />EnvType: VeauHache","SampleID: VHT0.LOT08<br />EnvType: VeauHache","SampleID: VHT0.LOT06<br />EnvType: VeauHache","SampleID: VHT0.LOT07<br />EnvType: VeauHache","SampleID: VHT0.LOT04<br />EnvType: VeauHache"],"textfont":{"size":14.6645669291339,"color":"rgba(205,150,0,0)"},"type":"scatter","mode":"text","hoveron":"points","name":"VeauHache","legendgroup":"VeauHache","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[0.0722159751427036,0.0192558472397982,0.0643713992156581,0.0404174098399885,0.077956672007709,0.0545607844353829,0.083779061276259,0.051361338485784],"y":[-0.207587091076419,-0.179053832780151,-0.167830955896218,-0.145787313946991,-0.20473629585954,-0.174803943253866,-0.16197449679102,-0.169937602755981],"text":["DLT0.LOT08","DLT0.LOT05","DLT0.LOT03","DLT0.LOT07","DLT0.LOT06","DLT0.LOT01","DLT0.LOT04","DLT0.LOT10"],"hovertext":["SampleID: DLT0.LOT08<br />EnvType: DesLardons","SampleID: DLT0.LOT05<br />EnvType: DesLardons","SampleID: DLT0.LOT03<br />EnvType: DesLardons","SampleID: DLT0.LOT07<br />EnvType: DesLardons","SampleID: DLT0.LOT06<br />EnvType: DesLardons","SampleID: DLT0.LOT01<br />EnvType: DesLardons","SampleID: DLT0.LOT04<br />EnvType: DesLardons","SampleID: DLT0.LOT10<br />EnvType: DesLardons"],"textfont":{"size":14.6645669291339,"color":"rgba(124,174,0,0)"},"type":"scatter","mode":"text","hoveron":"points","name":"DesLardons","legendgroup":"DesLardons","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[0.167371171203577,0.115367643903728,0.130038267160189,0.167412034522301,0.0954763528308696,0.14565459255884,0.104183193721206,0.150076354527749],"y":[0.0273725736526009,0.0921802017856092,0.0339871928659668,0.108368689467176,0.100491079237493,0.135169433872961,0.141808723521742,0.170762008852395],"text":["MVT0.LOT05","MVT0.LOT01","MVT0.LOT06","MVT0.LOT07","MVT0.LOT03","MVT0.LOT09","MVT0.LOT08","MVT0.LOT10"],"hovertext":["SampleID: MVT0.LOT05<br />EnvType: MerguezVolaille","SampleID: MVT0.LOT01<br />EnvType: MerguezVolaille","SampleID: MVT0.LOT06<br />EnvType: MerguezVolaille","SampleID: MVT0.LOT07<br />EnvType: MerguezVolaille","SampleID: MVT0.LOT03<br />EnvType: MerguezVolaille","SampleID: MVT0.LOT09<br />EnvType: MerguezVolaille","SampleID: MVT0.LOT08<br />EnvType: MerguezVolaille","SampleID: MVT0.LOT10<br />EnvType: MerguezVolaille"],"textfont":{"size":14.6645669291339,"color":"rgba(0,190,103,0)"},"type":"scatter","mode":"text","hoveron":"points","name":"MerguezVolaille","legendgroup":"MerguezVolaille","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[-0.217723002389034,-0.228969939307322,-0.197789911677256,-0.24896685292564,-0.225284104549037,-0.266067963610413,-0.226768440046782,-0.142544755761122],"y":[0.221090541860553,0.271394894937003,0.217154023702329,0.253663387792465,0.264004345646487,0.258840668730141,0.319355686864624,0.225465829554915],"text":["SFT0.LOT08","SFT0.LOT07","SFT0.LOT06","SFT0.LOT03","SFT0.LOT02","SFT0.LOT05","SFT0.LOT04","SFT0.LOT01"],"hovertext":["SampleID: SFT0.LOT08<br />EnvType: SaumonFume","SampleID: SFT0.LOT07<br />EnvType: SaumonFume","SampleID: SFT0.LOT06<br />EnvType: SaumonFume","SampleID: SFT0.LOT03<br />EnvType: SaumonFume","SampleID: SFT0.LOT02<br />EnvType: SaumonFume","SampleID: SFT0.LOT05<br />EnvType: SaumonFume","SampleID: SFT0.LOT04<br />EnvType: SaumonFume","SampleID: SFT0.LOT01<br />EnvType: SaumonFume"],"textfont":{"size":14.6645669291339,"color":"rgba(0,191,196,0)"},"type":"scatter","mode":"text","hoveron":"points","name":"SaumonFume","legendgroup":"SaumonFume","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[-0.0960617233410296,-0.153566741536979,-0.180884105992473,-0.161350587989724,-0.183811721606029,-0.136388070888324,-0.110831444070035,-0.160123318100172],"y":[0.0708903535652444,0.142100467503355,0.127040236267667,0.166372123060407,0.118175881914631,0.0762779254265929,0.0104941206671573,0.0642991584277549],"text":["FST0.LOT07","FST0.LOT08","FST0.LOT05","FST0.LOT06","FST0.LOT01","FST0.LOT03","FST0.LOT10","FST0.LOT02"],"hovertext":["SampleID: FST0.LOT07<br />EnvType: FiletSaumon","SampleID: FST0.LOT08<br />EnvType: FiletSaumon","SampleID: FST0.LOT05<br />EnvType: FiletSaumon","SampleID: FST0.LOT06<br />EnvType: FiletSaumon","SampleID: FST0.LOT01<br />EnvType: FiletSaumon","SampleID: FST0.LOT03<br />EnvType: FiletSaumon","SampleID: FST0.LOT10<br />EnvType: FiletSaumon","SampleID: FST0.LOT02<br />EnvType: FiletSaumon"],"textfont":{"size":14.6645669291339,"color":"rgba(0,169,255,0)"},"type":"scatter","mode":"text","hoveron":"points","name":"FiletSaumon","legendgroup":"FiletSaumon","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[-0.240574842660715,-0.183524206689981,-0.230029319520437,-0.215549499566102,-0.167754018236042,-0.177125143509264,-0.198296354915764,-0.217594171797218],"y":[-0.0304615121867686,-0.100783774022496,-0.066303692908519,-0.0996074304347909,-0.157558694062678,-0.0956818449077603,-0.0794703910782637,-0.102130944185628],"text":["FCT0.LOT06","FCT0.LOT10","FCT0.LOT05","FCT0.LOT03","FCT0.LOT08","FCT0.LOT02","FCT0.LOT07","FCT0.LOT01"],"hovertext":["SampleID: FCT0.LOT06<br />EnvType: FiletCabillaud","SampleID: FCT0.LOT10<br />EnvType: FiletCabillaud","SampleID: FCT0.LOT05<br />EnvType: FiletCabillaud","SampleID: FCT0.LOT03<br />EnvType: FiletCabillaud","SampleID: FCT0.LOT08<br />EnvType: FiletCabillaud","SampleID: FCT0.LOT02<br />EnvType: FiletCabillaud","SampleID: FCT0.LOT07<br />EnvType: FiletCabillaud","SampleID: FCT0.LOT01<br />EnvType: FiletCabillaud"],"textfont":{"size":14.6645669291339,"color":"rgba(199,124,255,0)"},"type":"scatter","mode":"text","hoveron":"points","name":"FiletCabillaud","legendgroup":"FiletCabillaud","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[-0.183900260792736,-0.164356573912208,-0.116964140107378,-0.118237548359161,-0.181824616411064,-0.167991315976736,-0.237171224468772,-0.208082475804338],"y":[-0.188071501367926,-0.181168066985233,-0.275428780916106,-0.276808640641828,-0.175237715449998,-0.27104702791284,-0.260393937928582,-0.248940712996204],"text":["CDT0.LOT10","CDT0.LOT08","CDT0.LOT05","CDT0.LOT04","CDT0.LOT06","CDT0.LOT09","CDT0.LOT07","CDT0.LOT02"],"hovertext":["SampleID: CDT0.LOT10<br />EnvType: Crevette","SampleID: CDT0.LOT08<br />EnvType: Crevette","SampleID: CDT0.LOT05<br />EnvType: Crevette","SampleID: CDT0.LOT04<br />EnvType: Crevette","SampleID: CDT0.LOT06<br />EnvType: Crevette","SampleID: CDT0.LOT09<br />EnvType: Crevette","SampleID: CDT0.LOT07<br />EnvType: Crevette","SampleID: CDT0.LOT02<br />EnvType: Crevette"],"textfont":{"size":14.6645669291339,"color":"rgba(255,97,204,0)"},"type":"scatter","mode":"text","hoveron":"points","name":"Crevette","legendgroup":"Crevette","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null}],"layout":{"margin":{"t":43.2754946727549,"r":7.30593607305936,"b":39.6955859969559,"l":48.9497716894977},"plot_bgcolor":"rgba(255,255,255,1)","paper_bgcolor":"rgba(255,255,255,1)","font":{"color":"rgba(0,0,0,1)","family":"","size":14.6118721461187},"title":"MDS ","titlefont":{"color":"rgba(0,0,0,1)","family":"","size":17.5342465753425},"xaxis":{"domain":[0,1],"automargin":true,"type":"linear","autorange":false,"range":[-0.298803196294705,0.421371922759732],"tickmode":"array","ticktext":["-0.2","0.0","0.2","0.4"],"tickvals":[-0.2,0,0.2,0.4],"categoryorder":"array","categoryarray":["-0.2","0.0","0.2","0.4"],"nticks":null,"ticks":"outside","tickcolor":"rgba(51,51,51,1)","ticklen":3.65296803652968,"tickwidth":0.66417600664176,"showticklabels":true,"tickfont":{"color":"rgba(77,77,77,1)","family":"","size":11.689497716895},"tickangle":-0,"showline":false,"linecolor":null,"linewidth":0,"showgrid":true,"gridcolor":"rgba(235,235,235,1)","gridwidth":0.66417600664176,"zeroline":false,"anchor":"y","title":"Axis.1 [22.1%]","titlefont":{"color":"rgba(0,0,0,1)","family":"","size":14.6118721461187},"hoverformat":".2f"},"yaxis":{"domain":[0,1],"automargin":true,"type":"linear","autorange":false,"range":[-0.30661685701715,0.349163903239946],"tickmode":"array","ticktext":["-0.2","0.0","0.2"],"tickvals":[-0.2,0,0.2],"categoryorder":"array","categoryarray":["-0.2","0.0","0.2"],"nticks":null,"ticks":"outside","tickcolor":"rgba(51,51,51,1)","ticklen":3.65296803652968,"tickwidth":0.66417600664176,"showticklabels":true,"tickfont":{"color":"rgba(77,77,77,1)","family":"","size":11.689497716895},"tickangle":-0,"showline":false,"linecolor":null,"linewidth":0,"showgrid":true,"gridcolor":"rgba(235,235,235,1)","gridwidth":0.66417600664176,"zeroline":false,"anchor":"x","title":"Axis.2 [12.8%]","titlefont":{"color":"rgba(0,0,0,1)","family":"","size":14.6118721461187},"hoverformat":".2f"},"shapes":[{"type":"rect","fillcolor":"transparent","line":{"color":"rgba(51,51,51,1)","width":0.66417600664176,"linetype":"solid"},"yref":"paper","xref":"paper","x0":0,"x1":1,"y0":0,"y1":1}],"showlegend":true,"legend":{"bgcolor":"rgba(255,255,255,1)","bordercolor":"transparent","borderwidth":1.88976377952756,"font":{"color":"rgba(0,0,0,1)","family":"","size":11.689497716895},"y":0.972933070866142},"annotations":[{"text":"EnvType","x":1.02,"y":1,"showarrow":false,"ax":0,"ay":0,"font":{"color":"rgba(0,0,0,1)","family":"","size":14.6118721461187},"xref":"paper","yref":"paper","textangle":-0,"xanchor":"left","yanchor":"bottom","legendTitle":true}],"hovermode":"closest","barmode":"relative"},"config":{"doubleClick":"reset","modeBarButtonsToAdd":[{"name":"Collaborate","icon":{"width":1000,"ascent":500,"descent":-50,"path":"M487 375c7-10 9-23 5-36l-79-259c-3-12-11-23-22-31-11-8-22-12-35-12l-263 0c-15 0-29 5-43 15-13 10-23 23-28 37-5 13-5 25-1 37 0 0 0 3 1 7 1 5 1 8 1 11 0 2 0 4-1 6 0 3-1 5-1 6 1 2 2 4 3 6 1 2 2 4 4 6 2 3 4 5 5 7 5 7 9 16 13 26 4 10 7 19 9 26 0 2 0 5 0 9-1 4-1 6 0 8 0 2 2 5 4 8 3 3 5 5 5 7 4 6 8 15 12 26 4 11 7 19 7 26 1 1 0 4 0 9-1 4-1 7 0 8 1 2 3 5 6 8 4 4 6 6 6 7 4 5 8 13 13 24 4 11 7 20 7 28 1 1 0 4 0 7-1 3-1 6-1 7 0 2 1 4 3 6 1 1 3 4 5 6 2 3 3 5 5 6 1 2 3 5 4 9 2 3 3 7 5 10 1 3 2 6 4 10 2 4 4 7 6 9 2 3 4 5 7 7 3 2 7 3 11 3 3 0 8 0 13-1l0-1c7 2 12 2 14 2l218 0c14 0 25-5 32-16 8-10 10-23 6-37l-79-259c-7-22-13-37-20-43-7-7-19-10-37-10l-248 0c-5 0-9-2-11-5-2-3-2-7 0-12 4-13 18-20 41-20l264 0c5 0 10 2 16 5 5 3 8 6 10 11l85 282c2 5 2 10 2 17 7-3 13-7 17-13z m-304 0c-1-3-1-5 0-7 1-1 3-2 6-2l174 0c2 0 4 1 7 2 2 2 4 4 5 7l6 18c0 3 0 5-1 7-1 1-3 2-6 2l-173 0c-3 0-5-1-8-2-2-2-4-4-4-7z m-24-73c-1-3-1-5 0-7 2-2 3-2 6-2l174 0c2 0 5 0 7 2 3 2 4 4 5 7l6 18c1 2 0 5-1 6-1 2-3 3-5 3l-174 0c-3 0-5-1-7-3-3-1-4-4-5-6z"},"click":"function(gd) { \n // is this being viewed in RStudio?\n if (location.search == '?viewer_pane=1') {\n alert('To learn about plotly for collaboration, visit:\\n https://cpsievert.github.io/plotly_book/plot-ly-for-collaboration.html');\n } else {\n window.open('https://cpsievert.github.io/plotly_book/plot-ly-for-collaboration.html', '_blank');\n }\n }"}],"cloud":false},"source":"A","attrs":{"e6744c9bb84b":{"colour":{},"shape":{},"na.rm":{},"x":{},"y":{},"type":"scatter"},"e67473d30ae5":{"label":{},"colour":{},"shape":{},"na.rm":{},"x":{},"y":{}}},"cur_data":"e6744c9bb84b","visdat":{"e6744c9bb84b":["function (y) ","x"],"e67473d30ae5":["function (y) ","x"]},"highlight":{"on":"plotly_click","persistent":false,"dynamic":false,"selectize":false,"opacityDim":0.2,"selected":{"opacity":1},"debounce":0},"base_url":"https://plot.ly"},"evals":["config.modeBarButtonsToAdd.0.click"],"jsHooks":[]}</script> <br>
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
178 <button id="dwn-plot1" class="button">
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
179 Download image
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
180 </button>
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
181 </h1>
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
182 <h1 id="plot2" style="display: none;">
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
183 <div id="htmlwidget-0501ec198d6fe1eb5de9" style="width:768px;height:576px;" class="plotly html-widget"></div>
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
184 <script type="application/json" data-for="htmlwidget-0501ec198d6fe1eb5de9">{"x":{"data":[{"x":[0.0722159751427036,0.0192558472397982,0.0643713992156581,0.0404174098399885,0.077956672007709,0.0545607844353829,0.083779061276259,0.051361338485784],"y":[-0.207587091076419,-0.179053832780151,-0.167830955896218,-0.145787313946991,-0.20473629585954,-0.174803943253866,-0.16197449679102,-0.169937602755981],"text":"EnvType: DesLardons","type":"scatter","mode":"markers","marker":{"autocolorscale":false,"color":"rgba(248,118,109,1)","opacity":1,"size":5.66929133858268,"symbol":"circle","line":{"width":1.88976377952756,"color":"rgba(248,118,109,1)"}},"hoveron":"points","name":"DesLardons","legendgroup":"DesLardons","showlegend":true,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[0.167371171203577,0.115367643903728,0.130038267160189,0.167412034522301,0.0954763528308696,0.14565459255884,0.104183193721206,0.150076354527749],"y":[0.0273725736526009,0.0921802017856092,0.0339871928659668,0.108368689467176,0.100491079237493,0.135169433872961,0.141808723521742,0.170762008852395],"text":"EnvType: MerguezVolaille","type":"scatter","mode":"markers","marker":{"autocolorscale":false,"color":"rgba(205,150,0,1)","opacity":1,"size":5.66929133858268,"symbol":"circle","line":{"width":1.88976377952756,"color":"rgba(205,150,0,1)"}},"hoveron":"points","name":"MerguezVolaille","legendgroup":"MerguezVolaille","showlegend":true,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[0.012957412658786,0.252937922236795,0.265575553295105,0.157959004607303,0.248855891910394,0.288816195013544,0.226110621514258,0.388636690075439],"y":[0.0870617169651272,0.0579779094723288,0.063629318536794,0.0702576332606376,0.0341204878110841,0.0415581423691279,-0.00226720415574387,0.0390251377633836],"text":"EnvType: BoeufHache","type":"scatter","mode":"markers","marker":{"autocolorscale":false,"color":"rgba(124,174,0,1)","opacity":1,"size":5.66929133858268,"symbol":"circle","line":{"width":1.88976377952756,"color":"rgba(124,174,0,1)"}},"hoveron":"points","name":"BoeufHache","legendgroup":"BoeufHache","showlegend":true,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[0.304683264189008,0.331119680450375,0.27425700535173,0.311929744484988,0.347381007320029,0.348692603529787,0.347180694995817,0.299517006814187],"y":[0.0933958771374911,0.0624518107829206,-0.0059829543186604,-0.0972554714230653,0.0129791259111269,-0.0360355330493796,-0.00750899442963111,-0.00936035146500204],"text":"EnvType: VeauHache","type":"scatter","mode":"markers","marker":{"autocolorscale":false,"color":"rgba(0,190,103,1)","opacity":1,"size":5.66929133858268,"symbol":"circle","line":{"width":1.88976377952756,"color":"rgba(0,190,103,1)"}},"hoveron":"points","name":"VeauHache","legendgroup":"VeauHache","showlegend":true,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[-0.217723002389034,-0.228969939307322,-0.197789911677256,-0.24896685292564,-0.225284104549037,-0.266067963610413,-0.226768440046782,-0.142544755761122],"y":[0.221090541860553,0.271394894937003,0.217154023702329,0.253663387792465,0.264004345646487,0.258840668730141,0.319355686864624,0.225465829554915],"text":"EnvType: SaumonFume","type":"scatter","mode":"markers","marker":{"autocolorscale":false,"color":"rgba(0,191,196,1)","opacity":1,"size":5.66929133858268,"symbol":"circle","line":{"width":1.88976377952756,"color":"rgba(0,191,196,1)"}},"hoveron":"points","name":"SaumonFume","legendgroup":"SaumonFume","showlegend":true,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[-0.0960617233410296,-0.153566741536979,-0.180884105992473,-0.161350587989724,-0.183811721606029,-0.136388070888324,-0.110831444070035,-0.160123318100172],"y":[0.0708903535652444,0.142100467503355,0.127040236267667,0.166372123060407,0.118175881914631,0.0762779254265929,0.0104941206671573,0.0642991584277549],"text":"EnvType: FiletSaumon","type":"scatter","mode":"markers","marker":{"autocolorscale":false,"color":"rgba(0,169,255,1)","opacity":1,"size":5.66929133858268,"symbol":"circle","line":{"width":1.88976377952756,"color":"rgba(0,169,255,1)"}},"hoveron":"points","name":"FiletSaumon","legendgroup":"FiletSaumon","showlegend":true,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[-0.240574842660715,-0.183524206689981,-0.230029319520437,-0.215549499566102,-0.167754018236042,-0.177125143509264,-0.198296354915764,-0.217594171797218],"y":[-0.0304615121867686,-0.100783774022496,-0.066303692908519,-0.0996074304347909,-0.157558694062678,-0.0956818449077603,-0.0794703910782637,-0.102130944185628],"text":"EnvType: FiletCabillaud","type":"scatter","mode":"markers","marker":{"autocolorscale":false,"color":"rgba(199,124,255,1)","opacity":1,"size":5.66929133858268,"symbol":"circle","line":{"width":1.88976377952756,"color":"rgba(199,124,255,1)"}},"hoveron":"points","name":"FiletCabillaud","legendgroup":"FiletCabillaud","showlegend":true,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[-0.183900260792736,-0.164356573912208,-0.116964140107378,-0.118237548359161,-0.181824616411064,-0.167991315976736,-0.237171224468772,-0.208082475804338],"y":[-0.188071501367926,-0.181168066985233,-0.275428780916106,-0.276808640641828,-0.175237715449998,-0.27104702791284,-0.260393937928582,-0.248940712996204],"text":"EnvType: Crevette","type":"scatter","mode":"markers","marker":{"autocolorscale":false,"color":"rgba(255,97,204,1)","opacity":1,"size":5.66929133858268,"symbol":"circle","line":{"width":1.88976377952756,"color":"rgba(255,97,204,1)"}},"hoveron":"points","name":"Crevette","legendgroup":"Crevette","showlegend":true,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[0.0579898109554104],"y":[-0.176463941545023],"text":"DesLardons","hovertext":"EnvType: DesLardons<br />EnvType: DesLardons<br />EnvType: DesLardons","textfont":{"size":15.1181102362205,"color":"rgba(248,118,109,1)"},"type":"scatter","mode":"text","hoveron":"points","name":"DesLardons","legendgroup":"DesLardons","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[0.134447451303557],"y":[0.101267487906993],"text":"MerguezVolaille","hovertext":"EnvType: MerguezVolaille<br />EnvType: MerguezVolaille<br />EnvType: MerguezVolaille","textfont":{"size":15.1181102362205,"color":"rgba(205,150,0,1)"},"type":"scatter","mode":"text","hoveron":"points","name":"MerguezVolaille","legendgroup":"MerguezVolaille","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[0.230231161413953],"y":[0.0489203927528424],"text":"BoeufHache","hovertext":"EnvType: BoeufHache<br />EnvType: BoeufHache<br />EnvType: BoeufHache","textfont":{"size":15.1181102362205,"color":"rgba(124,174,0,1)"},"type":"scatter","mode":"text","hoveron":"points","name":"BoeufHache","legendgroup":"BoeufHache","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[0.32059512589199],"y":[0.00158543864322502],"text":"VeauHache","hovertext":"EnvType: VeauHache<br />EnvType: VeauHache<br />EnvType: VeauHache","textfont":{"size":15.1181102362205,"color":"rgba(0,190,103,1)"},"type":"scatter","mode":"text","hoveron":"points","name":"VeauHache","legendgroup":"VeauHache","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[-0.219264371283326],"y":[0.253871172386064],"text":"SaumonFume","hovertext":"EnvType: SaumonFume<br />EnvType: SaumonFume<br />EnvType: SaumonFume","textfont":{"size":15.1181102362205,"color":"rgba(0,191,196,1)"},"type":"scatter","mode":"text","hoveron":"points","name":"SaumonFume","legendgroup":"SaumonFume","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[-0.147877214190596],"y":[0.0969562833541013],"text":"FiletSaumon","hovertext":"EnvType: FiletSaumon<br />EnvType: FiletSaumon<br />EnvType: FiletSaumon","textfont":{"size":15.1181102362205,"color":"rgba(0,169,255,1)"},"type":"scatter","mode":"text","hoveron":"points","name":"FiletSaumon","legendgroup":"FiletSaumon","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[-0.20380594461194],"y":[-0.0914997854733632],"text":"FiletCabillaud","hovertext":"EnvType: FiletCabillaud<br />EnvType: FiletCabillaud<br />EnvType: FiletCabillaud","textfont":{"size":15.1181102362205,"color":"rgba(199,124,255,1)"},"type":"scatter","mode":"text","hoveron":"points","name":"FiletCabillaud","legendgroup":"FiletCabillaud","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[-0.172316019479049],"y":[-0.23463704802484],"text":"Crevette","hovertext":"EnvType: Crevette<br />EnvType: Crevette<br />EnvType: Crevette","textfont":{"size":15.1181102362205,"color":"rgba(255,97,204,1)"},"type":"scatter","mode":"text","hoveron":"points","name":"Crevette","legendgroup":"Crevette","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[0.0722159751427036,0.0192558472397982,0.0643713992156581,0.0404174098399885,0.077956672007709,0.0545607844353829,0.083779061276259,0.051361338485784],"y":[-0.207587091076419,-0.179053832780151,-0.167830955896218,-0.145787313946991,-0.20473629585954,-0.174803943253866,-0.16197449679102,-0.169937602755981],"text":["DLT0.LOT08","DLT0.LOT05","DLT0.LOT03","DLT0.LOT07","DLT0.LOT06","DLT0.LOT01","DLT0.LOT04","DLT0.LOT10"],"hovertext":["SampleID: DLT0.LOT08<br />EnvType: DesLardons","SampleID: DLT0.LOT05<br />EnvType: DesLardons","SampleID: DLT0.LOT03<br />EnvType: DesLardons","SampleID: DLT0.LOT07<br />EnvType: DesLardons","SampleID: DLT0.LOT06<br />EnvType: DesLardons","SampleID: DLT0.LOT01<br />EnvType: DesLardons","SampleID: DLT0.LOT04<br />EnvType: DesLardons","SampleID: DLT0.LOT10<br />EnvType: DesLardons"],"textfont":{"size":14.6645669291339,"color":"rgba(248,118,109,0)"},"type":"scatter","mode":"text","hoveron":"points","name":"DesLardons","legendgroup":"DesLardons","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[0.167371171203577,0.115367643903728,0.130038267160189,0.167412034522301,0.0954763528308696,0.14565459255884,0.104183193721206,0.150076354527749],"y":[0.0273725736526009,0.0921802017856092,0.0339871928659668,0.108368689467176,0.100491079237493,0.135169433872961,0.141808723521742,0.170762008852395],"text":["MVT0.LOT05","MVT0.LOT01","MVT0.LOT06","MVT0.LOT07","MVT0.LOT03","MVT0.LOT09","MVT0.LOT08","MVT0.LOT10"],"hovertext":["SampleID: MVT0.LOT05<br />EnvType: MerguezVolaille","SampleID: MVT0.LOT01<br />EnvType: MerguezVolaille","SampleID: MVT0.LOT06<br />EnvType: MerguezVolaille","SampleID: MVT0.LOT07<br />EnvType: MerguezVolaille","SampleID: MVT0.LOT03<br />EnvType: MerguezVolaille","SampleID: MVT0.LOT09<br />EnvType: MerguezVolaille","SampleID: MVT0.LOT08<br />EnvType: MerguezVolaille","SampleID: MVT0.LOT10<br />EnvType: MerguezVolaille"],"textfont":{"size":14.6645669291339,"color":"rgba(205,150,0,0)"},"type":"scatter","mode":"text","hoveron":"points","name":"MerguezVolaille","legendgroup":"MerguezVolaille","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[0.012957412658786,0.252937922236795,0.265575553295105,0.157959004607303,0.248855891910394,0.288816195013544,0.226110621514258,0.388636690075439],"y":[0.0870617169651272,0.0579779094723288,0.063629318536794,0.0702576332606376,0.0341204878110841,0.0415581423691279,-0.00226720415574387,0.0390251377633836],"text":["BHT0.LOT01","BHT0.LOT07","BHT0.LOT06","BHT0.LOT03","BHT0.LOT10","BHT0.LOT05","BHT0.LOT04","BHT0.LOT08"],"hovertext":["SampleID: BHT0.LOT01<br />EnvType: BoeufHache","SampleID: BHT0.LOT07<br />EnvType: BoeufHache","SampleID: BHT0.LOT06<br />EnvType: BoeufHache","SampleID: BHT0.LOT03<br />EnvType: BoeufHache","SampleID: BHT0.LOT10<br />EnvType: BoeufHache","SampleID: BHT0.LOT05<br />EnvType: BoeufHache","SampleID: BHT0.LOT04<br />EnvType: BoeufHache","SampleID: BHT0.LOT08<br />EnvType: BoeufHache"],"textfont":{"size":14.6645669291339,"color":"rgba(124,174,0,0)"},"type":"scatter","mode":"text","hoveron":"points","name":"BoeufHache","legendgroup":"BoeufHache","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[0.304683264189008,0.331119680450375,0.27425700535173,0.311929744484988,0.347381007320029,0.348692603529787,0.347180694995817,0.299517006814187],"y":[0.0933958771374911,0.0624518107829206,-0.0059829543186604,-0.0972554714230653,0.0129791259111269,-0.0360355330493796,-0.00750899442963111,-0.00936035146500204],"text":["VHT0.LOT02","VHT0.LOT10","VHT0.LOT03","VHT0.LOT01","VHT0.LOT08","VHT0.LOT06","VHT0.LOT07","VHT0.LOT04"],"hovertext":["SampleID: VHT0.LOT02<br />EnvType: VeauHache","SampleID: VHT0.LOT10<br />EnvType: VeauHache","SampleID: VHT0.LOT03<br />EnvType: VeauHache","SampleID: VHT0.LOT01<br />EnvType: VeauHache","SampleID: VHT0.LOT08<br />EnvType: VeauHache","SampleID: VHT0.LOT06<br />EnvType: VeauHache","SampleID: VHT0.LOT07<br />EnvType: VeauHache","SampleID: VHT0.LOT04<br />EnvType: VeauHache"],"textfont":{"size":14.6645669291339,"color":"rgba(0,190,103,0)"},"type":"scatter","mode":"text","hoveron":"points","name":"VeauHache","legendgroup":"VeauHache","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[-0.217723002389034,-0.228969939307322,-0.197789911677256,-0.24896685292564,-0.225284104549037,-0.266067963610413,-0.226768440046782,-0.142544755761122],"y":[0.221090541860553,0.271394894937003,0.217154023702329,0.253663387792465,0.264004345646487,0.258840668730141,0.319355686864624,0.225465829554915],"text":["SFT0.LOT08","SFT0.LOT07","SFT0.LOT06","SFT0.LOT03","SFT0.LOT02","SFT0.LOT05","SFT0.LOT04","SFT0.LOT01"],"hovertext":["SampleID: SFT0.LOT08<br />EnvType: SaumonFume","SampleID: SFT0.LOT07<br />EnvType: SaumonFume","SampleID: SFT0.LOT06<br />EnvType: SaumonFume","SampleID: SFT0.LOT03<br />EnvType: SaumonFume","SampleID: SFT0.LOT02<br />EnvType: SaumonFume","SampleID: SFT0.LOT05<br />EnvType: SaumonFume","SampleID: SFT0.LOT04<br />EnvType: SaumonFume","SampleID: SFT0.LOT01<br />EnvType: SaumonFume"],"textfont":{"size":14.6645669291339,"color":"rgba(0,191,196,0)"},"type":"scatter","mode":"text","hoveron":"points","name":"SaumonFume","legendgroup":"SaumonFume","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[-0.0960617233410296,-0.153566741536979,-0.180884105992473,-0.161350587989724,-0.183811721606029,-0.136388070888324,-0.110831444070035,-0.160123318100172],"y":[0.0708903535652444,0.142100467503355,0.127040236267667,0.166372123060407,0.118175881914631,0.0762779254265929,0.0104941206671573,0.0642991584277549],"text":["FST0.LOT07","FST0.LOT08","FST0.LOT05","FST0.LOT06","FST0.LOT01","FST0.LOT03","FST0.LOT10","FST0.LOT02"],"hovertext":["SampleID: FST0.LOT07<br />EnvType: FiletSaumon","SampleID: FST0.LOT08<br />EnvType: FiletSaumon","SampleID: FST0.LOT05<br />EnvType: FiletSaumon","SampleID: FST0.LOT06<br />EnvType: FiletSaumon","SampleID: FST0.LOT01<br />EnvType: FiletSaumon","SampleID: FST0.LOT03<br />EnvType: FiletSaumon","SampleID: FST0.LOT10<br />EnvType: FiletSaumon","SampleID: FST0.LOT02<br />EnvType: FiletSaumon"],"textfont":{"size":14.6645669291339,"color":"rgba(0,169,255,0)"},"type":"scatter","mode":"text","hoveron":"points","name":"FiletSaumon","legendgroup":"FiletSaumon","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[-0.240574842660715,-0.183524206689981,-0.230029319520437,-0.215549499566102,-0.167754018236042,-0.177125143509264,-0.198296354915764,-0.217594171797218],"y":[-0.0304615121867686,-0.100783774022496,-0.066303692908519,-0.0996074304347909,-0.157558694062678,-0.0956818449077603,-0.0794703910782637,-0.102130944185628],"text":["FCT0.LOT06","FCT0.LOT10","FCT0.LOT05","FCT0.LOT03","FCT0.LOT08","FCT0.LOT02","FCT0.LOT07","FCT0.LOT01"],"hovertext":["SampleID: FCT0.LOT06<br />EnvType: FiletCabillaud","SampleID: FCT0.LOT10<br />EnvType: FiletCabillaud","SampleID: FCT0.LOT05<br />EnvType: FiletCabillaud","SampleID: FCT0.LOT03<br />EnvType: FiletCabillaud","SampleID: FCT0.LOT08<br />EnvType: FiletCabillaud","SampleID: FCT0.LOT02<br />EnvType: FiletCabillaud","SampleID: FCT0.LOT07<br />EnvType: FiletCabillaud","SampleID: FCT0.LOT01<br />EnvType: FiletCabillaud"],"textfont":{"size":14.6645669291339,"color":"rgba(199,124,255,0)"},"type":"scatter","mode":"text","hoveron":"points","name":"FiletCabillaud","legendgroup":"FiletCabillaud","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[-0.183900260792736,-0.164356573912208,-0.116964140107378,-0.118237548359161,-0.181824616411064,-0.167991315976736,-0.237171224468772,-0.208082475804338],"y":[-0.188071501367926,-0.181168066985233,-0.275428780916106,-0.276808640641828,-0.175237715449998,-0.27104702791284,-0.260393937928582,-0.248940712996204],"text":["CDT0.LOT10","CDT0.LOT08","CDT0.LOT05","CDT0.LOT04","CDT0.LOT06","CDT0.LOT09","CDT0.LOT07","CDT0.LOT02"],"hovertext":["SampleID: CDT0.LOT10<br />EnvType: Crevette","SampleID: CDT0.LOT08<br />EnvType: Crevette","SampleID: CDT0.LOT05<br />EnvType: Crevette","SampleID: CDT0.LOT04<br />EnvType: Crevette","SampleID: CDT0.LOT06<br />EnvType: Crevette","SampleID: CDT0.LOT09<br />EnvType: Crevette","SampleID: CDT0.LOT07<br />EnvType: Crevette","SampleID: CDT0.LOT02<br />EnvType: Crevette"],"textfont":{"size":14.6645669291339,"color":"rgba(255,97,204,0)"},"type":"scatter","mode":"text","hoveron":"points","name":"Crevette","legendgroup":"Crevette","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null}],"layout":{"margin":{"t":43.2754946727549,"r":7.30593607305936,"b":39.6955859969559,"l":48.9497716894977},"plot_bgcolor":"rgba(255,255,255,1)","paper_bgcolor":"rgba(255,255,255,1)","font":{"color":"rgba(0,0,0,1)","family":"","size":14.6118721461187},"title":"MDS ","titlefont":{"color":"rgba(0,0,0,1)","family":"","size":17.5342465753425},"xaxis":{"domain":[0,1],"automargin":true,"type":"linear","autorange":false,"range":[-0.298803196294705,0.421371922759732],"tickmode":"array","ticktext":["-0.2","0.0","0.2","0.4"],"tickvals":[-0.2,0,0.2,0.4],"categoryorder":"array","categoryarray":["-0.2","0.0","0.2","0.4"],"nticks":null,"ticks":"outside","tickcolor":"rgba(51,51,51,1)","ticklen":3.65296803652968,"tickwidth":0.66417600664176,"showticklabels":true,"tickfont":{"color":"rgba(77,77,77,1)","family":"","size":11.689497716895},"tickangle":-0,"showline":false,"linecolor":null,"linewidth":0,"showgrid":true,"gridcolor":"rgba(235,235,235,1)","gridwidth":0.66417600664176,"zeroline":false,"anchor":"y","title":"Axis.1 [22.1%]","titlefont":{"color":"rgba(0,0,0,1)","family":"","size":14.6118721461187},"hoverformat":".2f"},"yaxis":{"domain":[0,1],"automargin":true,"type":"linear","autorange":false,"range":[-0.30661685701715,0.349163903239946],"tickmode":"array","ticktext":["-0.2","0.0","0.2"],"tickvals":[-0.2,0,0.2],"categoryorder":"array","categoryarray":["-0.2","0.0","0.2"],"nticks":null,"ticks":"outside","tickcolor":"rgba(51,51,51,1)","ticklen":3.65296803652968,"tickwidth":0.66417600664176,"showticklabels":true,"tickfont":{"color":"rgba(77,77,77,1)","family":"","size":11.689497716895},"tickangle":-0,"showline":false,"linecolor":null,"linewidth":0,"showgrid":true,"gridcolor":"rgba(235,235,235,1)","gridwidth":0.66417600664176,"zeroline":false,"anchor":"x","title":"Axis.2 [12.8%]","titlefont":{"color":"rgba(0,0,0,1)","family":"","size":14.6118721461187},"hoverformat":".2f"},"shapes":[{"type":"rect","fillcolor":"transparent","line":{"color":"rgba(51,51,51,1)","width":0.66417600664176,"linetype":"solid"},"yref":"paper","xref":"paper","x0":0,"x1":1,"y0":0,"y1":1}],"showlegend":true,"legend":{"bgcolor":"rgba(255,255,255,1)","bordercolor":"transparent","borderwidth":1.88976377952756,"font":{"color":"rgba(0,0,0,1)","family":"","size":11.689497716895},"y":0.972933070866142},"annotations":[{"text":"EnvType","x":1.02,"y":1,"showarrow":false,"ax":0,"ay":0,"font":{"color":"rgba(0,0,0,1)","family":"","size":14.6118721461187},"xref":"paper","yref":"paper","textangle":-0,"xanchor":"left","yanchor":"bottom","legendTitle":true}],"hovermode":"closest","barmode":"relative"},"config":{"doubleClick":"reset","modeBarButtonsToAdd":[{"name":"Collaborate","icon":{"width":1000,"ascent":500,"descent":-50,"path":"M487 375c7-10 9-23 5-36l-79-259c-3-12-11-23-22-31-11-8-22-12-35-12l-263 0c-15 0-29 5-43 15-13 10-23 23-28 37-5 13-5 25-1 37 0 0 0 3 1 7 1 5 1 8 1 11 0 2 0 4-1 6 0 3-1 5-1 6 1 2 2 4 3 6 1 2 2 4 4 6 2 3 4 5 5 7 5 7 9 16 13 26 4 10 7 19 9 26 0 2 0 5 0 9-1 4-1 6 0 8 0 2 2 5 4 8 3 3 5 5 5 7 4 6 8 15 12 26 4 11 7 19 7 26 1 1 0 4 0 9-1 4-1 7 0 8 1 2 3 5 6 8 4 4 6 6 6 7 4 5 8 13 13 24 4 11 7 20 7 28 1 1 0 4 0 7-1 3-1 6-1 7 0 2 1 4 3 6 1 1 3 4 5 6 2 3 3 5 5 6 1 2 3 5 4 9 2 3 3 7 5 10 1 3 2 6 4 10 2 4 4 7 6 9 2 3 4 5 7 7 3 2 7 3 11 3 3 0 8 0 13-1l0-1c7 2 12 2 14 2l218 0c14 0 25-5 32-16 8-10 10-23 6-37l-79-259c-7-22-13-37-20-43-7-7-19-10-37-10l-248 0c-5 0-9-2-11-5-2-3-2-7 0-12 4-13 18-20 41-20l264 0c5 0 10 2 16 5 5 3 8 6 10 11l85 282c2 5 2 10 2 17 7-3 13-7 17-13z m-304 0c-1-3-1-5 0-7 1-1 3-2 6-2l174 0c2 0 4 1 7 2 2 2 4 4 5 7l6 18c0 3 0 5-1 7-1 1-3 2-6 2l-173 0c-3 0-5-1-8-2-2-2-4-4-4-7z m-24-73c-1-3-1-5 0-7 2-2 3-2 6-2l174 0c2 0 5 0 7 2 3 2 4 4 5 7l6 18c1 2 0 5-1 6-1 2-3 3-5 3l-174 0c-3 0-5-1-7-3-3-1-4-4-5-6z"},"click":"function(gd) { \n // is this being viewed in RStudio?\n if (location.search == '?viewer_pane=1') {\n alert('To learn about plotly for collaboration, visit:\\n https://cpsievert.github.io/plotly_book/plot-ly-for-collaboration.html');\n } else {\n window.open('https://cpsievert.github.io/plotly_book/plot-ly-for-collaboration.html', '_blank');\n }\n }"}],"cloud":false},"source":"A","attrs":{"e6741a2b8a32":{"colour":{},"shape":{},"x":{},"y":{},"type":"scatter"},"e674335c35a6":{"label":{},"colour":{},"shape":{},"x":{},"y":{},"colour.1":{},"shape.1":{},"x.1":{},"y.1":{}},"e6742d07d13d":{"label":{},"colour":{},"shape":{},"x":{},"y":{}}},"cur_data":"e6741a2b8a32","visdat":{"e6741a2b8a32":["function (y) ","x"],"e674335c35a6":["function (y) ","x"],"e6742d07d13d":["function (y) ","x"]},"highlight":{"on":"plotly_click","persistent":false,"dynamic":false,"selectize":false,"opacityDim":0.2,"selected":{"opacity":1},"debounce":0},"base_url":"https://plot.ly"},"evals":["config.modeBarButtonsToAdd.0.click"],"jsHooks":[]}</script> <br>
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
185 <button id="dwn-plot2" class="button">
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
186 Download image
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
187 </button>
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
188 </h1>
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
189 <h1 id="plot22" style="display: none;">
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
190 <div id="htmlwidget-489c89ecf54e72c2a5d1" style="width:768px;height:576px;" class="plotly html-widget"></div>
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
191 <script type="application/json" data-for="htmlwidget-489c89ecf54e72c2a5d1">{"x":{"data":[{"x":[0.0722159751427036,0.0192558472397982,0.0643713992156581,0.0404174098399885,0.077956672007709,0.0545607844353829,0.083779061276259,0.051361338485784],"y":[-0.207587091076419,-0.179053832780151,-0.167830955896218,-0.145787313946991,-0.20473629585954,-0.174803943253866,-0.16197449679102,-0.169937602755981],"text":"EnvType: DesLardons","type":"scatter","mode":"markers","marker":{"autocolorscale":false,"color":"rgba(248,118,109,1)","opacity":1,"size":5.66929133858268,"symbol":"circle","line":{"width":1.88976377952756,"color":"rgba(248,118,109,1)"}},"hoveron":"points","name":"DesLardons","legendgroup":"DesLardons","showlegend":true,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[0.167371171203577,0.115367643903728,0.130038267160189,0.167412034522301,0.0954763528308696,0.14565459255884,0.104183193721206,0.150076354527749],"y":[0.0273725736526009,0.0921802017856092,0.0339871928659668,0.108368689467176,0.100491079237493,0.135169433872961,0.141808723521742,0.170762008852395],"text":"EnvType: MerguezVolaille","type":"scatter","mode":"markers","marker":{"autocolorscale":false,"color":"rgba(205,150,0,1)","opacity":1,"size":5.66929133858268,"symbol":"circle","line":{"width":1.88976377952756,"color":"rgba(205,150,0,1)"}},"hoveron":"points","name":"MerguezVolaille","legendgroup":"MerguezVolaille","showlegend":true,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[0.012957412658786,0.252937922236795,0.265575553295105,0.157959004607303,0.248855891910394,0.288816195013544,0.226110621514258,0.388636690075439],"y":[0.0870617169651272,0.0579779094723288,0.063629318536794,0.0702576332606376,0.0341204878110841,0.0415581423691279,-0.00226720415574387,0.0390251377633836],"text":"EnvType: BoeufHache","type":"scatter","mode":"markers","marker":{"autocolorscale":false,"color":"rgba(124,174,0,1)","opacity":1,"size":5.66929133858268,"symbol":"circle","line":{"width":1.88976377952756,"color":"rgba(124,174,0,1)"}},"hoveron":"points","name":"BoeufHache","legendgroup":"BoeufHache","showlegend":true,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[0.304683264189008,0.331119680450375,0.27425700535173,0.311929744484988,0.347381007320029,0.348692603529787,0.347180694995817,0.299517006814187],"y":[0.0933958771374911,0.0624518107829206,-0.0059829543186604,-0.0972554714230653,0.0129791259111269,-0.0360355330493796,-0.00750899442963111,-0.00936035146500204],"text":"EnvType: VeauHache","type":"scatter","mode":"markers","marker":{"autocolorscale":false,"color":"rgba(0,190,103,1)","opacity":1,"size":5.66929133858268,"symbol":"circle","line":{"width":1.88976377952756,"color":"rgba(0,190,103,1)"}},"hoveron":"points","name":"VeauHache","legendgroup":"VeauHache","showlegend":true,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[-0.217723002389034,-0.228969939307322,-0.197789911677256,-0.24896685292564,-0.225284104549037,-0.266067963610413,-0.226768440046782,-0.142544755761122],"y":[0.221090541860553,0.271394894937003,0.217154023702329,0.253663387792465,0.264004345646487,0.258840668730141,0.319355686864624,0.225465829554915],"text":"EnvType: SaumonFume","type":"scatter","mode":"markers","marker":{"autocolorscale":false,"color":"rgba(0,191,196,1)","opacity":1,"size":5.66929133858268,"symbol":"circle","line":{"width":1.88976377952756,"color":"rgba(0,191,196,1)"}},"hoveron":"points","name":"SaumonFume","legendgroup":"SaumonFume","showlegend":true,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[-0.0960617233410296,-0.153566741536979,-0.180884105992473,-0.161350587989724,-0.183811721606029,-0.136388070888324,-0.110831444070035,-0.160123318100172],"y":[0.0708903535652444,0.142100467503355,0.127040236267667,0.166372123060407,0.118175881914631,0.0762779254265929,0.0104941206671573,0.0642991584277549],"text":"EnvType: FiletSaumon","type":"scatter","mode":"markers","marker":{"autocolorscale":false,"color":"rgba(0,169,255,1)","opacity":1,"size":5.66929133858268,"symbol":"circle","line":{"width":1.88976377952756,"color":"rgba(0,169,255,1)"}},"hoveron":"points","name":"FiletSaumon","legendgroup":"FiletSaumon","showlegend":true,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[-0.240574842660715,-0.183524206689981,-0.230029319520437,-0.215549499566102,-0.167754018236042,-0.177125143509264,-0.198296354915764,-0.217594171797218],"y":[-0.0304615121867686,-0.100783774022496,-0.066303692908519,-0.0996074304347909,-0.157558694062678,-0.0956818449077603,-0.0794703910782637,-0.102130944185628],"text":"EnvType: FiletCabillaud","type":"scatter","mode":"markers","marker":{"autocolorscale":false,"color":"rgba(199,124,255,1)","opacity":1,"size":5.66929133858268,"symbol":"circle","line":{"width":1.88976377952756,"color":"rgba(199,124,255,1)"}},"hoveron":"points","name":"FiletCabillaud","legendgroup":"FiletCabillaud","showlegend":true,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[-0.183900260792736,-0.164356573912208,-0.116964140107378,-0.118237548359161,-0.181824616411064,-0.167991315976736,-0.237171224468772,-0.208082475804338],"y":[-0.188071501367926,-0.181168066985233,-0.275428780916106,-0.276808640641828,-0.175237715449998,-0.27104702791284,-0.260393937928582,-0.248940712996204],"text":"EnvType: Crevette","type":"scatter","mode":"markers","marker":{"autocolorscale":false,"color":"rgba(255,97,204,1)","opacity":1,"size":5.66929133858268,"symbol":"circle","line":{"width":1.88976377952756,"color":"rgba(255,97,204,1)"}},"hoveron":"points","name":"Crevette","legendgroup":"Crevette","showlegend":true,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[0.0579898109554104],"y":[-0.176463941545023],"text":"DesLardons","hovertext":"EnvType: DesLardons<br />EnvType: DesLardons<br />EnvType: DesLardons","textfont":{"size":15.1181102362205,"color":"rgba(248,118,109,1)"},"type":"scatter","mode":"text","hoveron":"points","name":"DesLardons","legendgroup":"DesLardons","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[0.134447451303557],"y":[0.101267487906993],"text":"MerguezVolaille","hovertext":"EnvType: MerguezVolaille<br />EnvType: MerguezVolaille<br />EnvType: MerguezVolaille","textfont":{"size":15.1181102362205,"color":"rgba(205,150,0,1)"},"type":"scatter","mode":"text","hoveron":"points","name":"MerguezVolaille","legendgroup":"MerguezVolaille","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[0.230231161413953],"y":[0.0489203927528424],"text":"BoeufHache","hovertext":"EnvType: BoeufHache<br />EnvType: BoeufHache<br />EnvType: BoeufHache","textfont":{"size":15.1181102362205,"color":"rgba(124,174,0,1)"},"type":"scatter","mode":"text","hoveron":"points","name":"BoeufHache","legendgroup":"BoeufHache","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[0.32059512589199],"y":[0.00158543864322502],"text":"VeauHache","hovertext":"EnvType: VeauHache<br />EnvType: VeauHache<br />EnvType: VeauHache","textfont":{"size":15.1181102362205,"color":"rgba(0,190,103,1)"},"type":"scatter","mode":"text","hoveron":"points","name":"VeauHache","legendgroup":"VeauHache","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[-0.219264371283326],"y":[0.253871172386064],"text":"SaumonFume","hovertext":"EnvType: SaumonFume<br />EnvType: SaumonFume<br />EnvType: SaumonFume","textfont":{"size":15.1181102362205,"color":"rgba(0,191,196,1)"},"type":"scatter","mode":"text","hoveron":"points","name":"SaumonFume","legendgroup":"SaumonFume","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[-0.147877214190596],"y":[0.0969562833541013],"text":"FiletSaumon","hovertext":"EnvType: FiletSaumon<br />EnvType: FiletSaumon<br />EnvType: FiletSaumon","textfont":{"size":15.1181102362205,"color":"rgba(0,169,255,1)"},"type":"scatter","mode":"text","hoveron":"points","name":"FiletSaumon","legendgroup":"FiletSaumon","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[-0.20380594461194],"y":[-0.0914997854733632],"text":"FiletCabillaud","hovertext":"EnvType: FiletCabillaud<br />EnvType: FiletCabillaud<br />EnvType: FiletCabillaud","textfont":{"size":15.1181102362205,"color":"rgba(199,124,255,1)"},"type":"scatter","mode":"text","hoveron":"points","name":"FiletCabillaud","legendgroup":"FiletCabillaud","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[-0.172316019479049],"y":[-0.23463704802484],"text":"Crevette","hovertext":"EnvType: Crevette<br />EnvType: Crevette<br />EnvType: Crevette","textfont":{"size":15.1181102362205,"color":"rgba(255,97,204,1)"},"type":"scatter","mode":"text","hoveron":"points","name":"Crevette","legendgroup":"Crevette","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[0.0722159751427036,0.0192558472397982,0.0643713992156581,0.0404174098399885,0.077956672007709,0.0545607844353829,0.083779061276259,0.051361338485784],"y":[-0.207587091076419,-0.179053832780151,-0.167830955896218,-0.145787313946991,-0.20473629585954,-0.174803943253866,-0.16197449679102,-0.169937602755981],"text":["DLT0.LOT08","DLT0.LOT05","DLT0.LOT03","DLT0.LOT07","DLT0.LOT06","DLT0.LOT01","DLT0.LOT04","DLT0.LOT10"],"hovertext":["SampleID: DLT0.LOT08<br />EnvType: DesLardons","SampleID: DLT0.LOT05<br />EnvType: DesLardons","SampleID: DLT0.LOT03<br />EnvType: DesLardons","SampleID: DLT0.LOT07<br />EnvType: DesLardons","SampleID: DLT0.LOT06<br />EnvType: DesLardons","SampleID: DLT0.LOT01<br />EnvType: DesLardons","SampleID: DLT0.LOT04<br />EnvType: DesLardons","SampleID: DLT0.LOT10<br />EnvType: DesLardons"],"textfont":{"size":14.6645669291339,"color":"rgba(248,118,109,0)"},"type":"scatter","mode":"text","hoveron":"points","name":"DesLardons","legendgroup":"DesLardons","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[0.167371171203577,0.115367643903728,0.130038267160189,0.167412034522301,0.0954763528308696,0.14565459255884,0.104183193721206,0.150076354527749],"y":[0.0273725736526009,0.0921802017856092,0.0339871928659668,0.108368689467176,0.100491079237493,0.135169433872961,0.141808723521742,0.170762008852395],"text":["MVT0.LOT05","MVT0.LOT01","MVT0.LOT06","MVT0.LOT07","MVT0.LOT03","MVT0.LOT09","MVT0.LOT08","MVT0.LOT10"],"hovertext":["SampleID: MVT0.LOT05<br />EnvType: MerguezVolaille","SampleID: MVT0.LOT01<br />EnvType: MerguezVolaille","SampleID: MVT0.LOT06<br />EnvType: MerguezVolaille","SampleID: MVT0.LOT07<br />EnvType: MerguezVolaille","SampleID: MVT0.LOT03<br />EnvType: MerguezVolaille","SampleID: MVT0.LOT09<br />EnvType: MerguezVolaille","SampleID: MVT0.LOT08<br />EnvType: MerguezVolaille","SampleID: MVT0.LOT10<br />EnvType: MerguezVolaille"],"textfont":{"size":14.6645669291339,"color":"rgba(205,150,0,0)"},"type":"scatter","mode":"text","hoveron":"points","name":"MerguezVolaille","legendgroup":"MerguezVolaille","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[0.012957412658786,0.252937922236795,0.265575553295105,0.157959004607303,0.248855891910394,0.288816195013544,0.226110621514258,0.388636690075439],"y":[0.0870617169651272,0.0579779094723288,0.063629318536794,0.0702576332606376,0.0341204878110841,0.0415581423691279,-0.00226720415574387,0.0390251377633836],"text":["BHT0.LOT01","BHT0.LOT07","BHT0.LOT06","BHT0.LOT03","BHT0.LOT10","BHT0.LOT05","BHT0.LOT04","BHT0.LOT08"],"hovertext":["SampleID: BHT0.LOT01<br />EnvType: BoeufHache","SampleID: BHT0.LOT07<br />EnvType: BoeufHache","SampleID: BHT0.LOT06<br />EnvType: BoeufHache","SampleID: BHT0.LOT03<br />EnvType: BoeufHache","SampleID: BHT0.LOT10<br />EnvType: BoeufHache","SampleID: BHT0.LOT05<br />EnvType: BoeufHache","SampleID: BHT0.LOT04<br />EnvType: BoeufHache","SampleID: BHT0.LOT08<br />EnvType: BoeufHache"],"textfont":{"size":14.6645669291339,"color":"rgba(124,174,0,0)"},"type":"scatter","mode":"text","hoveron":"points","name":"BoeufHache","legendgroup":"BoeufHache","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[0.304683264189008,0.331119680450375,0.27425700535173,0.311929744484988,0.347381007320029,0.348692603529787,0.347180694995817,0.299517006814187],"y":[0.0933958771374911,0.0624518107829206,-0.0059829543186604,-0.0972554714230653,0.0129791259111269,-0.0360355330493796,-0.00750899442963111,-0.00936035146500204],"text":["VHT0.LOT02","VHT0.LOT10","VHT0.LOT03","VHT0.LOT01","VHT0.LOT08","VHT0.LOT06","VHT0.LOT07","VHT0.LOT04"],"hovertext":["SampleID: VHT0.LOT02<br />EnvType: VeauHache","SampleID: VHT0.LOT10<br />EnvType: VeauHache","SampleID: VHT0.LOT03<br />EnvType: VeauHache","SampleID: VHT0.LOT01<br />EnvType: VeauHache","SampleID: VHT0.LOT08<br />EnvType: VeauHache","SampleID: VHT0.LOT06<br />EnvType: VeauHache","SampleID: VHT0.LOT07<br />EnvType: VeauHache","SampleID: VHT0.LOT04<br />EnvType: VeauHache"],"textfont":{"size":14.6645669291339,"color":"rgba(0,190,103,0)"},"type":"scatter","mode":"text","hoveron":"points","name":"VeauHache","legendgroup":"VeauHache","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[-0.217723002389034,-0.228969939307322,-0.197789911677256,-0.24896685292564,-0.225284104549037,-0.266067963610413,-0.226768440046782,-0.142544755761122],"y":[0.221090541860553,0.271394894937003,0.217154023702329,0.253663387792465,0.264004345646487,0.258840668730141,0.319355686864624,0.225465829554915],"text":["SFT0.LOT08","SFT0.LOT07","SFT0.LOT06","SFT0.LOT03","SFT0.LOT02","SFT0.LOT05","SFT0.LOT04","SFT0.LOT01"],"hovertext":["SampleID: SFT0.LOT08<br />EnvType: SaumonFume","SampleID: SFT0.LOT07<br />EnvType: SaumonFume","SampleID: SFT0.LOT06<br />EnvType: SaumonFume","SampleID: SFT0.LOT03<br />EnvType: SaumonFume","SampleID: SFT0.LOT02<br />EnvType: SaumonFume","SampleID: SFT0.LOT05<br />EnvType: SaumonFume","SampleID: SFT0.LOT04<br />EnvType: SaumonFume","SampleID: SFT0.LOT01<br />EnvType: SaumonFume"],"textfont":{"size":14.6645669291339,"color":"rgba(0,191,196,0)"},"type":"scatter","mode":"text","hoveron":"points","name":"SaumonFume","legendgroup":"SaumonFume","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[-0.0960617233410296,-0.153566741536979,-0.180884105992473,-0.161350587989724,-0.183811721606029,-0.136388070888324,-0.110831444070035,-0.160123318100172],"y":[0.0708903535652444,0.142100467503355,0.127040236267667,0.166372123060407,0.118175881914631,0.0762779254265929,0.0104941206671573,0.0642991584277549],"text":["FST0.LOT07","FST0.LOT08","FST0.LOT05","FST0.LOT06","FST0.LOT01","FST0.LOT03","FST0.LOT10","FST0.LOT02"],"hovertext":["SampleID: FST0.LOT07<br />EnvType: FiletSaumon","SampleID: FST0.LOT08<br />EnvType: FiletSaumon","SampleID: FST0.LOT05<br />EnvType: FiletSaumon","SampleID: FST0.LOT06<br />EnvType: FiletSaumon","SampleID: FST0.LOT01<br />EnvType: FiletSaumon","SampleID: FST0.LOT03<br />EnvType: FiletSaumon","SampleID: FST0.LOT10<br />EnvType: FiletSaumon","SampleID: FST0.LOT02<br />EnvType: FiletSaumon"],"textfont":{"size":14.6645669291339,"color":"rgba(0,169,255,0)"},"type":"scatter","mode":"text","hoveron":"points","name":"FiletSaumon","legendgroup":"FiletSaumon","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[-0.240574842660715,-0.183524206689981,-0.230029319520437,-0.215549499566102,-0.167754018236042,-0.177125143509264,-0.198296354915764,-0.217594171797218],"y":[-0.0304615121867686,-0.100783774022496,-0.066303692908519,-0.0996074304347909,-0.157558694062678,-0.0956818449077603,-0.0794703910782637,-0.102130944185628],"text":["FCT0.LOT06","FCT0.LOT10","FCT0.LOT05","FCT0.LOT03","FCT0.LOT08","FCT0.LOT02","FCT0.LOT07","FCT0.LOT01"],"hovertext":["SampleID: FCT0.LOT06<br />EnvType: FiletCabillaud","SampleID: FCT0.LOT10<br />EnvType: FiletCabillaud","SampleID: FCT0.LOT05<br />EnvType: FiletCabillaud","SampleID: FCT0.LOT03<br />EnvType: FiletCabillaud","SampleID: FCT0.LOT08<br />EnvType: FiletCabillaud","SampleID: FCT0.LOT02<br />EnvType: FiletCabillaud","SampleID: FCT0.LOT07<br />EnvType: FiletCabillaud","SampleID: FCT0.LOT01<br />EnvType: FiletCabillaud"],"textfont":{"size":14.6645669291339,"color":"rgba(199,124,255,0)"},"type":"scatter","mode":"text","hoveron":"points","name":"FiletCabillaud","legendgroup":"FiletCabillaud","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[-0.183900260792736,-0.164356573912208,-0.116964140107378,-0.118237548359161,-0.181824616411064,-0.167991315976736,-0.237171224468772,-0.208082475804338],"y":[-0.188071501367926,-0.181168066985233,-0.275428780916106,-0.276808640641828,-0.175237715449998,-0.27104702791284,-0.260393937928582,-0.248940712996204],"text":["CDT0.LOT10","CDT0.LOT08","CDT0.LOT05","CDT0.LOT04","CDT0.LOT06","CDT0.LOT09","CDT0.LOT07","CDT0.LOT02"],"hovertext":["SampleID: CDT0.LOT10<br />EnvType: Crevette","SampleID: CDT0.LOT08<br />EnvType: Crevette","SampleID: CDT0.LOT05<br />EnvType: Crevette","SampleID: CDT0.LOT04<br />EnvType: Crevette","SampleID: CDT0.LOT06<br />EnvType: Crevette","SampleID: CDT0.LOT09<br />EnvType: Crevette","SampleID: CDT0.LOT07<br />EnvType: Crevette","SampleID: CDT0.LOT02<br />EnvType: Crevette"],"textfont":{"size":14.6645669291339,"color":"rgba(255,97,204,0)"},"type":"scatter","mode":"text","hoveron":"points","name":"Crevette","legendgroup":"Crevette","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[0.111027842289982,0.11063127618066,0.109447589390672,0.107494725405171,0.104802287651538,0.101411090741597,0.0973725417637079,0.0927478610037047,0.0876071539077693,0.0820283483553278,0.0760960133518339,0.0699000770488514,0.0635344635249436,0.0570956689923839,0.0506812990129402,0.0443885888970521,0.038312929715641,0.0325464222687111,0.0271764809311038,0.0222845085396806,0.0179446624092932,0.0142227301834828,0.0111751325608639,0.0088480680148454,0.00727681247186598,0.00648518456430751,0.00648518456430751,0.00727681247186598,0.00884806801484539,0.0111751325608639,0.0142227301834828,0.0179446624092932,0.0222845085396806,0.0271764809311038,0.0325464222687111,0.038312929715641,0.0443885888970521,0.0506812990129402,0.0570956689923839,0.0635344635249436,0.0699000770488514,0.0760960133518339,0.0820283483553278,0.0876071539077693,0.0927478610037047,0.0973725417637079,0.101411090741597,0.104802287651538,0.107494725405171,0.109447589390672,0.11063127618066,0.111027842289982],"y":[-0.199262976533019,-0.192737353871366,-0.185953546765605,-0.179014390816427,-0.172025076554636,-0.165091554859926,-0.158318930853545,-0.151809870611798,-0.145663044852979,-0.139971633189863,-0.134821911621756,-0.130291944678294,-0.126450402040745,-0.123355517579643,-0.121054206588666,-0.11958135459661,-0.118959288538332,-0.119197438301176,-0.120292193777494,-0.122226959590196,-0.124972406661756,-0.128486916813121,-0.132717213652892,-0.137599170193105,-0.143058780949003,-0.149013283786747,-0.155372414513004,-0.162039775188103,-0.168914295420543,-0.175891764491102,-0.182866411081109,-0.189732506657824,-0.196385968211215,-0.202725936046299,-0.208656302713303,-0.214087169898638,-0.218936211191696,-0.223129920069314,-0.22660472417974,-0.229307949034679,-0.231198616500847,-0.232248065986696,-0.232440388907771,-0.231772669844631,-0.230255030737639,-0.22791047744866,-0.22477455101565,-0.220894788886744,-0.216330004301007,-0.211149394739672,-0.205431492962866,-0.199262976533019],"text":"EnvType: DesLardons","type":"scatter","mode":"lines","line":{"width":1.88976377952756,"color":"rgba(248,118,109,1)","dash":"solid"},"hoveron":"points","name":"DesLardons","legendgroup":"DesLardons","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[0.211023235531057,0.21043222244976,0.208668142361738,0.20575773692292,0.201745124913055,0.196691133439981,0.190672375862675,0.183780090410824,0.17611875710627,0.167804513952378,0.158963396400286,0.149729426779946,0.140242582658212,0.130646674921612,0.121087167749905,0.111708973527388,0.102654256118869,0.0940602758103911,0.0860573085832098,0.0787666712627132,0.0722988824790137,0.0667519873171713,0.0622100710536461,0.0587419845092184,0.056400300340729,0.0552205160931909,0.0552205160931909,0.056400300340729,0.0587419845092183,0.062210071053646,0.0667519873171713,0.0722988824790137,0.0787666712627132,0.0860573085832097,0.0940602758103912,0.102654256118869,0.111708973527388,0.121087167749905,0.130646674921612,0.140242582658212,0.149729426779946,0.158963396400286,0.167804513952378,0.17611875710627,0.183780090410824,0.190672375862675,0.196691133439981,0.201745124913055,0.20575773692292,0.208668142361738,0.21043222244976,0.211023235531057],"y":[0.0907672280809155,0.107524628590344,0.124226902704634,0.140620860973572,0.156457987700884,0.17149820818886,0.18551352802606,0.198291489250182,0.209638390994204,0.219382225794083,0.227375287046571,0.233496408090757,0.237652798971139,0.239781453038762,0.239850102067792,0.237857705408924,0.233834465764571,0.227841371346676,0.21996927135759,0.210337498808772,0.199092061553971,0.186403428959005,0.172463947759932,0.157484926282607,0.141693431223851,0.125328845551791,0.108639239704076,0.0918776110929097,0.075298048922174,0.0591518824541021,0.0436838711138543,0.029128494186126,0.0157063963482073,0.00362104292158802,-0.00694436445491539,-0.0158296649752583,-0.0229001665407289,-0.0280486875548673,-0.0311971816872123,-0.0322979209761159,-0.03133421933599,-0.0283206855013557,-0.0233030015733188,-0.0163572305254829,-0.00758866316680412,0.00286977795974551,0.0148595535474352,0.02819891082006,0.0426856387187588,0.0581001332155447,0.0742087262865171,0.0907672280809155],"text":"EnvType: MerguezVolaille","type":"scatter","mode":"lines","line":{"width":1.88976377952756,"color":"rgba(205,150,0,1)","dash":"solid"},"hoveron":"points","name":"MerguezVolaille","legendgroup":"MerguezVolaille","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[0.511891821938051,0.509850910222189,0.503759113215825,0.49370877635194,0.479852252492641,0.462399592415072,0.441615360655747,0.417814624981858,0.391358180285088,0.362647079298824,0.332116553047533,0.30022941318808,0.267469036256775,0.234332036173805,0.201320736082431,0.168935553642172,0.137667415207185,0.107990313883158,0.0803541242749934,0.0551777828463697,0.0328429372699955,0.0136881610379208,-0.00199617896747986,-0.0139723241394606,-0.0220587283250243,-0.0261328098795444,-0.0261328098795444,-0.0220587283250243,-0.0139723241394606,-0.00199617896747992,0.0136881610379208,0.0328429372699955,0.0551777828463696,0.0803541242749934,0.107990313883158,0.137667415207185,0.168935553642172,0.201320736082431,0.234332036173805,0.267469036256775,0.30022941318808,0.332116553047533,0.362647079298824,0.391358180285088,0.417814624981858,0.441615360655747,0.462399592415072,0.479852252492641,0.49370877635194,0.503759113215825,0.509850910222189,0.511891821938051],"y":[0.0156266067212105,0.0220987645212083,0.0290117771723621,0.0362608504496178,0.0437360957913905,0.0513241960981444,0.0589101235041128,0.0663788830824896,0.0736172560513011,0.0805155160547313,0.086969092502827,0.0928801557550489,0.0981591001178993,0.102725902175897,0.106511333864984,0.109458011899412,0.111521267643855,0.112669824244396,0.112886270753744,0.112167326063451,0.11052388864217,0.10798087132598,0.104576823665185,0.100363347552427,0.0954043149905959,0.0897748998583683,0.0835604383508394,0.07685513536979,0.0697606364734034,0.0623844870332147,0.0548385019559046,0.0472370706832914,0.0396954231649955,0.0323278830898621,0.0252461348553734,0.0185575305460277,0.0123634625851667,0.00675782672919194,0.00182559870360943,-0.00235845394234944,-0.00573090523556037,-0.00824063225210579,-0.00984959008868976,-0.010533388584591,-0.0102816620516373,-0.00909822640747256,-0.00700102133013433,-0.0040218383108219,-0.000205838727296147,0.00438913075657249,0.00969341508726258,0.0156266067212105],"text":"EnvType: BoeufHache","type":"scatter","mode":"lines","line":{"width":1.88976377952756,"color":"rgba(124,174,0,1)","dash":"solid"},"hoveron":"points","name":"BoeufHache","legendgroup":"BoeufHache","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[0.400796660071032,0.400211373765687,0.398464387193434,0.395582182889929,0.391608452134454,0.386603432634665,0.380642995384343,0.373817494536467,0.366230397726359,0.3579967176078,0.349241268378434,0.340096773723767,0.330701854861378,0.321198929184568,0.311732051359848,0.302444729605038,0.293477750250965,0.284967043564203,0.277041623182785,0.269821630400965,0.26341651294966,0.257923365880415,0.253425459703394,0.249990978091327,0.247671984284535,0.246503631865278,0.246503631865278,0.247671984284535,0.249990978091327,0.253425459703394,0.257923365880415,0.26341651294966,0.269821630400965,0.277041623182785,0.284967043564203,0.293477750250965,0.302444729605038,0.311732051359848,0.321198929184568,0.330701854861378,0.340096773723767,0.349241268378434,0.3579967176078,0.366230397726359,0.373817494536467,0.380642995384343,0.386603432634665,0.391608452134454,0.395582182889929,0.398464387193434,0.400211373765687,0.400796660071032],"y":[-0.00317869973219908,0.0157741413943134,0.0345254568319371,0.0527909957526761,0.0702938712053572,0.0867687574395665,0.101965911973568,0.115654961435752,0.127628393790121,0.137704704007227,0.145731145495404,0.151586045583396,0.155180649954025,0.15646046806917,0.15540609919078,0.152033526476287,0.146393874690232,0.138572635204947,0.128688370038496,0.116890914575337,0.103359106214628,0.0882980733775511,0.0719361259695455,0.0545212944348653,0.0363175698678746,0.0176009021771537,-0.00134498303382638,-0.0202328854576392,-0.0387764837468074,-0.0566946758535705,-0.0737158402503891,-0.0895819534354272,-0.104052501305825,-0.116908125106331,-0.127953946684432,-0.137022522644493,-0.143976382618958,-0.148710113178988,-0.151151955794592,-0.151264894620796,-0.149047217620117,-0.14453254251531,-0.137789307178958,-0.128919732185084,-0.118058271249449,-0.105369573048273,-0.0910459853121383,-0.0753046390304644,-0.0583841569670365,-0.0405410363821462,-0.0220457607955849,-0.00317869973219912],"text":"EnvType: VeauHache","type":"scatter","mode":"lines","line":{"width":1.88976377952756,"color":"rgba(0,190,103,1)","dash":"solid"},"hoveron":"points","name":"VeauHache","legendgroup":"VeauHache","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[-0.134182520419613,-0.134865027669974,-0.136902203306852,-0.140263165824173,-0.144896966456152,-0.150733361508644,-0.157683877181947,-0.165643150743419,-0.174490527719105,-0.184091890892574,-0.194301693385205,-0.204965164998511,-0.215920658372578,-0.22700209939527,-0.238041504716482,-0.248871528204496,-0.25932799774275,-0.269252403911782,-0.278494302830454,-0.28691359673183,-0.294382657702522,-0.300788262391756,-0.306033308361956,-0.31003828606272,-0.312742484114553,-0.314104909631498,-0.314104909631498,-0.312742484114553,-0.31003828606272,-0.306033308361956,-0.300788262391756,-0.294382657702522,-0.28691359673183,-0.278494302830454,-0.269252403911782,-0.25932799774275,-0.248871528204496,-0.238041504716482,-0.22700209939527,-0.215920658372578,-0.204965164998511,-0.194301693385205,-0.184091890892574,-0.174490527719105,-0.165643150743419,-0.157683877181947,-0.150733361508644,-0.144896966456152,-0.140263165824173,-0.136902203306852,-0.134865027669974,-0.134182520419613],"y":[0.214277570970859,0.223775829952969,0.233708904219942,0.243926218491108,0.254272888697073,0.26459206986433,0.274727333725177,0.284525040010803,0.293836665481149,0.302521055385834,0.310446563226281,0.317493046382449,0.323553687352478,0.32853661299714,0.332366287242977,0.334984656132177,0.336352027861398,0.336447674469047,0.335270146050049,0.332837292734929,0.329185994100031,0.32437160011073,0.318467092072382,0.311561976308123,0.303760927334253,0.295182201101264,0.285955842354176,0.276221713286762,0.266127373373261,0.255825842517156,0.245473281425424,0.235226624371396,0.225241200231145,0.215668377856055,0.206653271475334,0.198332540912222,0.19083231996037,0.184266304324102,0.178734028107437,0.174319354978529,0.17108920688194,0.169092549570185,0.168359650332827,0.168901619175231,0.170710240402197,0.173758097159531,0.177998987045607,0.183368622492676,0.189785605300867,0.197152660551918,0.205358111197788,0.214277570970859],"text":"EnvType: SaumonFume","type":"scatter","mode":"lines","line":{"width":1.88976377952756,"color":"rgba(0,191,196,1)","dash":"solid"},"hoveron":"points","name":"SaumonFume","legendgroup":"SaumonFume","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[-0.0664056021334149,-0.0670464839990182,-0.0689594144800244,-0.0721153955002755,-0.0764665856045344,-0.0819470251861795,-0.0884736363676056,-0.0959474823761633,-0.104255267324782,-0.11327105366213,-0.122858171257521,-0.132871289180777,-0.143158618770992,-0.153564214597905,-0.16393033843566,-0.174099850413522,-0.183918591096137,-0.193237718383428,-0.201915963805115,-0.209821774006723,-0.216835304964334,-0.222850238697831,-0.227775394943099,-0.231536113351888,-0.234075385266586,-0.235354717913358,-0.235354717913358,-0.234075385266586,-0.231536113351888,-0.227775394943099,-0.222850238697831,-0.216835304964334,-0.209821774006723,-0.201915963805115,-0.193237718383428,-0.183918591096137,-0.174099850413522,-0.16393033843566,-0.153564214597905,-0.143158618770992,-0.132871289180777,-0.122858171257521,-0.11327105366213,-0.104255267324782,-0.0959474823761633,-0.0884736363676056,-0.0819470251861796,-0.0764665856045344,-0.0721153955002755,-0.0689594144800244,-0.0670464839990182,-0.0664056021334149],"y":[0.0109534140941122,0.0245010412335308,0.0391880996017333,0.0547919483650209,0.0710760490818297,0.087793551384391,0.104691034978682,0.121512351237758,0.138002506153839,0.153911525787535,0.168998245617961,0.183033966351042,0.195805920767691,0.207120499057966,0.216806183748431,0.224716149732223,0.230730489988003,0.234758033248174,0.236737726062362,0.236639558305494,0.234465018100696,0.230247069260869,0.224049651590884,0.215966711625319,0.206120778494756,0.194661106509063,0.181761412614196,0.167617243020379,0.15244300892088,0.136468736236885,0.119936578659008,0.103097146844174,0.0862057094135254,0.0695183233403276,0.0532879523872653,0.0377606324336579,0.0231717418223237,0.00974243326383406,-0.00232371861314748,-0.0128438032457239,-0.0216583468744493,-0.028633730002963,-0.033664212933351,-0.0366735386721803,-0.0376160889087883,-0.0364775755423705,-0.0332752572750255,-0.0280576779874225,-0.0209039308630542,-0.0119224594161977,-0.0012494135987795,0.0109534140941122],"text":"EnvType: FiletSaumon","type":"scatter","mode":"lines","line":{"width":1.88976377952756,"color":"rgba(0,169,255,1)","dash":"solid"},"hoveron":"points","name":"FiletSaumon","legendgroup":"FiletSaumon","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[-0.133693176989128,-0.134229824172392,-0.135831630697914,-0.138474314811559,-0.142117816115968,-0.146706902845346,-0.152172009122734,-0.158430289507789,-0.165386874849214,-0.172936310404384,-0.180964154425755,-0.189348712981097,-0.197962884709458,-0.206676087548239,-0.215356238224156,-0.223871754501018,-0.232093549832309,-0.239896990181643,-0.247163783347712,-0.253783772153481,-0.259656604316699,-0.264693253688207,-0.26881736979761,-0.271966435248583,-0.274092713418869,-0.275163972098816,-0.275163972098816,-0.274092713418869,-0.271966435248583,-0.26881736979761,-0.264693253688207,-0.259656604316699,-0.253783772153481,-0.247163783347712,-0.239896990181643,-0.232093549832309,-0.223871754501018,-0.215356238224156,-0.206676087548239,-0.197962884709458,-0.189348712981097,-0.180964154425755,-0.172936310404384,-0.165386874849214,-0.158430289507789,-0.152172009122734,-0.146706902845346,-0.142117816115968,-0.138474314811559,-0.135831630697914,-0.134229824172392,-0.133693176989128],"y":[-0.159023548563692,-0.151056716415507,-0.142168081677334,-0.13249238699123,-0.122176306025776,-0.111376220052774,-0.100255847366574,-0.0889837614816144,-0.0777308357297795,-0.0666676529948663,-0.0559619198499487,-0.0457759242966801,-0.0362640756446159,-0.0275705638234768,-0.0198271736107932,-0.0131512869090121,-0.00764410335550834,-0.00338910623923915,-0.000450796979181975,0.00112628265142826,0.001318225732978,0.000122122604006888,-0.00244389503129021,-0.00634092896121659,-0.0115099041238122,-0.0178724641245752,-0.0253321590395307,-0.0337759074977621,-0.0430757108797259,-0.0530905936458493,-0.0636687403820069,-0.0746497971664479,-0.085867302371793,-0.0971512100536243,-0.108330467673668,-0.11923560908191,-0.129701323450693,-0.139568961218347,-0.14868893905483,-0.156923007392534,-0.164146346148808,-0.170249456871172,-0.175139822622244,-0.178743310442202,-0.181005295128888,-0.181891487300193,-0.181388453186134,-0.179503818271115,-0.176266151699358,-0.171724533195794,-0.165947809067466,-0.159023548563692],"text":"EnvType: FiletCabillaud","type":"scatter","mode":"lines","line":{"width":1.88976377952756,"color":"rgba(199,124,255,1)","dash":"solid"},"hoveron":"points","name":"FiletCabillaud","legendgroup":"FiletCabillaud","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[-0.062038942958853,-0.0628698013288114,-0.0653497814727283,-0.0694412894195744,-0.0750823020795293,-0.0821873074507995,-0.0906486008944005,-0.100337917826695,-0.111108378079734,-0.122796712454886,-0.135225737717455,-0.148207042513911,-0.161543843495952,-0.175033968355479,-0.188472920550696,-0.201656979265238,-0.214386287608082,-0.226467882240291,-0.237718618502543,-0.247967946701469,-0.257060497469165,-0.264858437004427,-0.271243556492684,-0.276119064031125,-0.279411051895286,-0.281069616904815,-0.281069616904815,-0.279411051895286,-0.276119064031125,-0.271243556492684,-0.264858437004427,-0.257060497469165,-0.247967946701469,-0.237718618502543,-0.226467882240291,-0.214386287608082,-0.201656979265238,-0.188472920550696,-0.175033968355479,-0.161543843495953,-0.148207042513911,-0.135225737717455,-0.122796712454886,-0.111108378079734,-0.100337917826695,-0.0906486008944004,-0.0821873074507996,-0.0750823020795292,-0.0694412894195744,-0.0653497814727283,-0.0628698013288114,-0.062038942958853],"y":[-0.268713433631775,-0.253007987434638,-0.236993033594994,-0.220911342488306,-0.20500669615898,-0.189520192833062,-0.174686592114903,-0.16073075627085,-0.147864241546502,-0.136282091189677,-0.126159878793592,-0.117651046780156,-0.110884580369266,-0.105963052294356,-0.102961067904311,-0.101924134222432,-0.102867970106341,-0.105778267966135,-0.11061091065285,-0.117292640229483,-0.125722168486631,-0.135771712368504,-0.147288931033794,-0.160099235187541,-0.174008433676879,-0.188805677230967,-0.204266654721003,-0.220156993488292,-0.236235812194841,-0.252259372338903,-0.267984773082214,-0.283173633379094,-0.297595705590115,-0.311032365801609,-0.323279927941347,-0.334152731451768,-0.343485955714779,-0.351138118564319,-0.356993221011772,-0.3609625056724,-0.362985802236812,-0.363032439591527,-0.361101710761788,-0.357222883628576,-0.351454757257372,-0.34388477056426,-0.334627676831087,-0.323823804162687,-0.311636928255851,-0.29825178972671,-0.283871293631305,-0.268713433631775],"text":"EnvType: Crevette","type":"scatter","mode":"lines","line":{"width":1.88976377952756,"color":"rgba(255,97,204,1)","dash":"solid"},"hoveron":"points","name":"Crevette","legendgroup":"Crevette","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null}],"layout":{"margin":{"t":43.2754946727549,"r":7.30593607305936,"b":39.6955859969559,"l":48.9497716894977},"plot_bgcolor":"rgba(255,255,255,1)","paper_bgcolor":"rgba(255,255,255,1)","font":{"color":"rgba(0,0,0,1)","family":"","size":14.6118721461187},"title":"MDS ","titlefont":{"color":"rgba(0,0,0,1)","family":"","size":17.5342465753425},"xaxis":{"domain":[0,1],"automargin":true,"type":"linear","autorange":false,"range":[-0.355404746209976,0.553191658516528],"tickmode":"array","ticktext":["-0.2","0.0","0.2","0.4"],"tickvals":[-0.2,0,0.2,0.4],"categoryorder":"array","categoryarray":["-0.2","0.0","0.2","0.4"],"nticks":null,"ticks":"outside","tickcolor":"rgba(51,51,51,1)","ticklen":3.65296803652968,"tickwidth":0.66417600664176,"showticklabels":true,"tickfont":{"color":"rgba(77,77,77,1)","family":"","size":11.689497716895},"tickangle":-0,"showline":false,"linecolor":null,"linewidth":0,"showgrid":true,"gridcolor":"rgba(235,235,235,1)","gridwidth":0.66417600664176,"zeroline":false,"anchor":"y","title":"Axis.1 [22.1%]","titlefont":{"color":"rgba(0,0,0,1)","family":"","size":14.6118721461187},"hoverformat":".2f"},"yaxis":{"domain":[0,1],"automargin":true,"type":"linear","autorange":false,"range":[-0.398006445294556,0.371421680172076],"tickmode":"array","ticktext":["-0.2","0.0","0.2"],"tickvals":[-0.2,0,0.2],"categoryorder":"array","categoryarray":["-0.2","0.0","0.2"],"nticks":null,"ticks":"outside","tickcolor":"rgba(51,51,51,1)","ticklen":3.65296803652968,"tickwidth":0.66417600664176,"showticklabels":true,"tickfont":{"color":"rgba(77,77,77,1)","family":"","size":11.689497716895},"tickangle":-0,"showline":false,"linecolor":null,"linewidth":0,"showgrid":true,"gridcolor":"rgba(235,235,235,1)","gridwidth":0.66417600664176,"zeroline":false,"anchor":"x","title":"Axis.2 [12.8%]","titlefont":{"color":"rgba(0,0,0,1)","family":"","size":14.6118721461187},"hoverformat":".2f"},"shapes":[{"type":"rect","fillcolor":"transparent","line":{"color":"rgba(51,51,51,1)","width":0.66417600664176,"linetype":"solid"},"yref":"paper","xref":"paper","x0":0,"x1":1,"y0":0,"y1":1}],"showlegend":true,"legend":{"bgcolor":"rgba(255,255,255,1)","bordercolor":"transparent","borderwidth":1.88976377952756,"font":{"color":"rgba(0,0,0,1)","family":"","size":11.689497716895},"y":0.972933070866142},"annotations":[{"text":"EnvType","x":1.02,"y":1,"showarrow":false,"ax":0,"ay":0,"font":{"color":"rgba(0,0,0,1)","family":"","size":14.6118721461187},"xref":"paper","yref":"paper","textangle":-0,"xanchor":"left","yanchor":"bottom","legendTitle":true}],"hovermode":"closest","barmode":"relative"},"config":{"doubleClick":"reset","modeBarButtonsToAdd":[{"name":"Collaborate","icon":{"width":1000,"ascent":500,"descent":-50,"path":"M487 375c7-10 9-23 5-36l-79-259c-3-12-11-23-22-31-11-8-22-12-35-12l-263 0c-15 0-29 5-43 15-13 10-23 23-28 37-5 13-5 25-1 37 0 0 0 3 1 7 1 5 1 8 1 11 0 2 0 4-1 6 0 3-1 5-1 6 1 2 2 4 3 6 1 2 2 4 4 6 2 3 4 5 5 7 5 7 9 16 13 26 4 10 7 19 9 26 0 2 0 5 0 9-1 4-1 6 0 8 0 2 2 5 4 8 3 3 5 5 5 7 4 6 8 15 12 26 4 11 7 19 7 26 1 1 0 4 0 9-1 4-1 7 0 8 1 2 3 5 6 8 4 4 6 6 6 7 4 5 8 13 13 24 4 11 7 20 7 28 1 1 0 4 0 7-1 3-1 6-1 7 0 2 1 4 3 6 1 1 3 4 5 6 2 3 3 5 5 6 1 2 3 5 4 9 2 3 3 7 5 10 1 3 2 6 4 10 2 4 4 7 6 9 2 3 4 5 7 7 3 2 7 3 11 3 3 0 8 0 13-1l0-1c7 2 12 2 14 2l218 0c14 0 25-5 32-16 8-10 10-23 6-37l-79-259c-7-22-13-37-20-43-7-7-19-10-37-10l-248 0c-5 0-9-2-11-5-2-3-2-7 0-12 4-13 18-20 41-20l264 0c5 0 10 2 16 5 5 3 8 6 10 11l85 282c2 5 2 10 2 17 7-3 13-7 17-13z m-304 0c-1-3-1-5 0-7 1-1 3-2 6-2l174 0c2 0 4 1 7 2 2 2 4 4 5 7l6 18c0 3 0 5-1 7-1 1-3 2-6 2l-173 0c-3 0-5-1-8-2-2-2-4-4-4-7z m-24-73c-1-3-1-5 0-7 2-2 3-2 6-2l174 0c2 0 5 0 7 2 3 2 4 4 5 7l6 18c1 2 0 5-1 6-1 2-3 3-5 3l-174 0c-3 0-5-1-7-3-3-1-4-4-5-6z"},"click":"function(gd) { \n // is this being viewed in RStudio?\n if (location.search == '?viewer_pane=1') {\n alert('To learn about plotly for collaboration, visit:\\n https://cpsievert.github.io/plotly_book/plot-ly-for-collaboration.html');\n } else {\n window.open('https://cpsievert.github.io/plotly_book/plot-ly-for-collaboration.html', '_blank');\n }\n }"}],"cloud":false},"source":"A","attrs":{"e6741764089e":{"colour":{},"shape":{},"x":{},"y":{},"type":"scatter"},"e6745de8b801":{"label":{},"colour":{},"shape":{},"x":{},"y":{},"colour.1":{},"shape.1":{},"x.1":{},"y.1":{}},"e6742eed0201":{"label":{},"colour":{},"shape":{},"x":{},"y":{}},"e67478f990bb":{"colour":{},"shape":{},"x":{},"y":{}}},"cur_data":"e6741764089e","visdat":{"e6741764089e":["function (y) ","x"],"e6745de8b801":["function (y) ","x"],"e6742eed0201":["function (y) ","x"],"e67478f990bb":["function (y) ","x"]},"highlight":{"on":"plotly_click","persistent":false,"dynamic":false,"selectize":false,"opacityDim":0.2,"selected":{"opacity":1},"debounce":0},"base_url":"https://plot.ly"},"evals":["config.modeBarButtonsToAdd.0.click"],"jsHooks":[]}</script> <br>
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
192 <button id="dwn-plot22" class="button">
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
193 Download image
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
194 </button>
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
195 </h1>
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
196 <button class="button" onclick="document.getElementById('plot1').style.display='' ; document.getElementById('plot2').style.display='none'; document.getElementById('plot22').style.display='none' ">
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
197 Without variable names
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
198 </button>
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
199 <button class="button" onclick="document.getElementById('plot2').style.display='' ; document.getElementById('plot1').style.display='none'; document.getElementById('plot22').style.display='none' ">
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
200 With variable names
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
201 </button>
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
202 <button class="button" onclick="document.getElementById('plot22').style.display='' ; document.getElementById('plot2').style.display='none'; document.getElementById('plot1').style.display='none'">
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
203 With ellipses
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
204 </button>
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
205 </div>
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
206 <div id="heatmap-plot" class="section level2">
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
207 <h2>Heatmap plot</h2>
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
208 <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABsAAAAVACAIAAAB5gwpsAAAACXBIWXMAAB2HAAAdhwGP5fFlAAAgAElEQVR4nOzdd2AURd8H8LlceoUUUmkJXRCUjtJDtyIqIqhggQcLz+Oj+CgiXQG76CM89CIi8jygKIQAoUPokZ4CIZBKSSC9Xe79Y3Df827vsjtzd3t79/38ddnb2ZndnZ3bzP52RqPX6wkAAAAAAAAAAACAGDelCwAAAAAAAAAAAACOCx2IAAAAAAAAAAAAYBY6EAEAAAAAAAAAAMAsdCACAAAAAAAAAACAWehABAAAAAAAAAAAALPQgQgAAAAAAAAAAABmoQMRAAAAAAAAAAAAzEIHIgAAAAAAAAAAAJiFDkQAAAAAAAAAAAAwCx2IAAAAAAAAAAAAYBY6EAEAAAAAAAAAAMAsdCACAAAAAAAAAACAWehABAAAAAAAAAAAALPQgQgAAABq9cQTT2g0Go1GM3fuXKXLogxrHYEuXbrQ7axatcpKRQMAAAAA54EORAAAUMA777xDeytCQ0OlrP/ZZ59p/lRbW2vr4gGA1QlXvURPPPGE0kUmhJDs7GxZxTb1yiuvKL0TAAAAALzQgQgAAGAF8fHxtLPgs88+U7osYDVqP61qLz8AAAAAOAh3pQsAAAAAAK7Fy8ur3nU8PT3tUJJ6aTQaC6WtqqqiH7Rarbu7+H21h4eHTUoGAAAAYEfoQAQAAABQqx9++KGmpoYQ4uPjo3RZpAoJCbl165bSpZAqOjq6srLS3LcajYZ++PDDD2fOnGmnMgEAAADYHToQAQAAANTKz89P6SIAAAAAgPPDGIgAAAAAAAAAAABgFjoQAQDAqezevfv111/v0KFDaGiol5dXVFRUv379Fi5cWFhYaDlhVVXV77///s9//rNfv35RUVE+Pj7e3t7R0dEDBgyYPXt2Xl6eaKrS0lI6ScXu3bvpknfffddoDlZ/f3/DJF26dKHLV61aRQipra3dsGHDsGHDmjZt6uXlFRYW9uijj+7YscMoowsXLkyePLlNmzY+Pj7+/v7333//Rx99VFxcbPU9MlfOysrKFStWxMfHN27cmG5nxIgRP/74o16vt7wdZbOg7ty589VXXw0ePJhuuWHDhm3btp04ceKuXbtE12c4rRYsW7aMJundu7foChMnThQ2u3z5ctMVamtrAwIC6Ap//PGH4VdPPPEEXT537lwrll+v12/duvXJJ59s3ry5t7d3aGho7969v/jiCwsv89qBUYWRVchevXrRtK+//nq9GQ0YMICuPHHiRObS9u3bV/pGevfuTVd+4403DJdb9xphbh4BAAAAiB4AAMDu/vnPf9KfoZCQECnrf/rpp8IvV01Njeg6qamp/fr1M/d717Bhw7Vr15rb/k8//RQYGGjh59LLy2vBggWmCUtKSur9qfXz8zNM0rlzZ7p85cqVeXl55jqVpk2bJiSZN2+eVqs1Xadx48YZGRnW3SPRcmZkZNx///2i2+nTp09eXp6F7dg0i8cff5yuM2fOHHO5rFq1KiQkxNxxiI+Pz8nJMUrCcFotSE9Pp0k8PDzKyspMV2jVqpWw2eeff950hcOHD9Nvg4OD6+rq6j0CnNWysLDwkUceEU0VFxd35coViTtuRO5Vb4qnkN999x39NjQ0tLq62kIu2dnZbm73HrHv37/fcpGETGfMmGH01fr16+lXAQEBpaWlFjZy6dIlYTspKSnmdpnnMuRpHgEAAAD0ej3GQAQAAGdw9OjRESNG3L59m/7p6+t73333BQQE5Obm0n/Oi4qKxo0bV1RU9Oabb5omv3LlihDNFxwcHBsbGxgYWF1dffnyZRqpV1VV9d577xUXFxvGeRFCPD09Z8yYQQhZs2ZNZmYmIWTQoEG9evUyWke0zBUVFUOGDDlz5gwhJCQkJCoqqqioKDs7m347b968qKioyZMnz5o1i07O4O7u3qxZMy8vr8uXL9MYq+vXr48YMeLMmTOmWTDvkam7d+8OGjSI7l1cXFyLFi1KSkpOnz5dUVFBCNm/f398fPz+/fuDg4Mtb0eRLBYsWPCvf/1L+DM6OjouLq6srOzcuXN0/txdu3Y9/PDDSUlJzZo1E1bjOa2mWrRoERMTk52dXVNTc+jQoUGDBhl+m5eXl5aWJvy5Z88e0y0IC2lQW7058pS/qqpq2LBhR48eJYQEBAQ0bty4pqbm8uXLdXV1hJDLly8PHTr0jz/+8Pb2rrcYtsNQyGefffbvf/97TU3NrVu3EhISHn30UXMb/+GHH+h2mjVr9vDDDzMX8qmnngoLC7t582ZJScmGDRtefvllc2suXbqUfujatWvHjh1F1+G5RjibRwAAAABCEIEIAABKsG4EYl5eXqNGjei3UVFR69evN4wwSk9PHzZsGP3W3d396NGjptv/5JNPOnTo8OWXX16+fNnoq5SUFCG5m5tbcnKyaAkHDhxI1/n0008t74sQUhQZGUkI6dy58/79+4WwsmPHjrVo0YKu0KhRo23btmk0Gi8vr/nz5xcVFdF1SktLhQNICFm0aJEt9kgoZ8OGDQkhcXFxhtFYxcXF7777rlCGsWPHWt5rG2VhOQJx165dQndbXFzcrl27hK+KioroW7302549e9bW1ppuQfpptWzs2LF0O++//77RVz/88AP9SphGOTU11Wgdoc/x66+/NvrK8hFgqJbR0dGEkHbt2m3btk241m7cuPHiiy8K5+Kzzz6TsfN/smIEIlshH3vsMfrVM888YyGXDh060NUMo4DNEbIzjUDU6/VCBe7evbu5LVRVVYWFhdHV/vOf/5jbZeZrhL95BAAAANDr9ehABAAABVi3A3HkyJH0q9jYWNH3+Gpra4V+lj59+piucOvWLQu519XVPfvss5a7Hhh6agghPXv2NH2n9eLFi+7u914R8PT0dHNz2759u+l2nnrqKbpOly5dbLFHhuWMjIzMzs42XWfWrFnCOocPH7aQo42ysNB9VldX17JlS/ptkyZNcnNzTTe+cOFCYeOmfTd663UgLlu2jG6nR48eRl+98sor9Cvholi8eLHhCtXV1b6+vvSrM2fOGCW3egciIaRz58537941XUfoabrvvvvq32cTVuxAZCvkxo0b6Vc+Pj7FxcWiWZw9e1bI4uLFi/UWSVhZtAMxPT1d6KQ+e/as6BaEUvn7+5eUlFjYZbZrhL95BAAAANDr9ZhEBQAAlHT79m2NBIZRNkbS0tI2b95MP69evToiIsJ0Ha1W+5///IdGeO3fv9+wj4CyMEYeIUSj0Xz55Zd0WLTffvtNp9PJ3U1Rbm5uq1evFvqGBG3atBEizqqrq1955ZWhQ4eaJn/rrbfoh1OnTpWXlxt9a909WrhwIY35MjJt2rR27drRz99//73ljdg5i4SEBGHwwUWLFtF4TyPvvPNOz549hXXklViO/v370w8nTpwoLS01/Grv3r2EkNDQUOHtUaO3mI8dO0bPb0hISPv27W1XSEqj0axdu1Z0AM2pU6fSD+fPn79z5w5zFhKvesORAa1SyEcffTQoKIgQUlFR8d///ld0y2vXrqUfunTp0qZNG7YdFLRo0ULowxXeUzYiLH/uuecsz2zDcI1YpXkEAAAAIJiFGQAA1G7dunV6vZ4Q0r17dwsDljVq1GjEiBH0c1JSktxcIiMjaThbeXn5+fPnWQv7FwMHDhRC5IwIvVqEkEmTJomu061bN9oDWFdXZziInkTS9ygkJGT06NGiX2m1WqF4W7ZsoSPHMbBFFlu2bKEfYmNjhXdXjWg0milTptDPZ8+evXz5soxCyxEbG9ukSRNCSG1t7cGDB4Xl2dnZGRkZhJB+/fo1bdo0NjaW/NmlKJA7ACKnAQMGtG3bVvSrXr16eXh40M8WevfsgK2Q3t7eo0aNop/XrVtnmlav1//444/0s/DWOSdhCua1a9eaTg999epVYSrwV1991cJ22K4R+zSPAAAA4AowiQoAACjMy8ur3nV0Ol1tba3oV/v376cfhgwZYnkjXbp02bRpEyHk5MmT5tapq6s7d+7c2bNnCwoKSkpKampqhK+EmW2zs7PNzYUqy0MPPWTuKyHOyM/Pz9ykCt7e3iEhITdv3iSEFBUVmdsU/x4NHDhQeKXalBAdWVJSkpqaaq5bxzJbZEFn2CCEDB8+3MJqI0aMcHNzo30uycnJcXFxUgstU79+/dasWUMI2bNnj7BHQucgDVHs16/flStXCgoKLl68KOym0Tq2ZqGbydPTMzw8nM7zY6HKSSHlqhemQjbFXMhx48YtX76cELJnz57c3NyoqCjDb/fu3Xv9+nVCiLu7+3PPPVdvCaV44oknIiIi8vPzi4qK/ve//40ZM8bw2+XLl9MOvo4dO3bt2tXCdtiuEes2jwAAAODK0IEIAABKCgkJuXXrVr2rffbZZ+beYhZeuDt79qzlCYVPnDhBP9BONyOlpaWffPLJypUr6STFFty9e7feAksh+johJbzXHBYWZqEbRVjN9BVmYr09svzabFxcnLe3Nw2tSk9PZ+tAtEUWNLKPECLMiSHK39+/efPmNPbQdhGI5K8diMJCIdiwX79+hJD+/fuvWLGCrkN3s7q6+siRI4br2Jrou94CPz8/+kG0ykkk8aq3gLmQffr0adKkybVr1+rq6n788UfDyYgIIcKENoMGDRImHuHk7u4+YcKEjz/+mBCydOlSww5EnU63cuVK+tly+CFhvUas1TwCAAAAoAMRAABUrK6uThjmbPPmzcJoX5aZ9pdlZGTEx8dnZWVJSV5VVSWrkOZICcKSsg4hRG8wmQNlxT2yPJyim5tbgwYN8vPzCUdUmtWzqK2tLSsro59DQ0MtrxwWFka7Djmj6iwT4gdPnTp19+5dOhgf7UwMDw+nY9gJ6+zZs2fy5MmEkOTk5IqKClrI++67z3bFEzBXOXtiLqRGoxkzZsz8+fMJIevWrTPsQKyqqqIheISQcePGWamkhBDy2muvzZ8/v66ubu/evRkZGcI069u2bcvJySGE+Pj41PvGNMM1Yq3mEQAAAIBgDEQAAFC1iooKhnH3jJJUV1cPHz6c9rX5+PhMnDhxy5Ytly5dunv3bnV1tTDvWPfu3a1Wbhuz7h55enpaXkHozWHuWrV6Foar2aH8UjRr1qxp06aEEJ1Od+DAAULItWvXMjMziUFoYXR0NO1d2rt3L+38EkIU7TMAoisQOgdTUlIMR//cunUr7Tvz9/cXZiW2iqZNmwpvEAvzcRt+fuaZZ2iHsgUM1dgqzSMAAAAAhQ5EAABQMT8/P2HChC1btuilSU5ONtzIqlWr6HS9/v7+ycnJixcvfvzxx1u3bh0YGChsnBiMGOj4rLtH9a4mrFBvJ4jdsvDz8xMGjKt348XFxfRDgwYNpGycmdBRSAMPRQc3pJ9v3bp17tw5w3Xs8/6yK2jXrt0DDzxAPxtOpSJ8HjlypOnc6JyESU5WrVpFxyHNzc39/fff6cJ6318mTNeIVZpHAAAAAAodiAAAoG7CUGW0y4zB1q1b6YfJkyebm0tEr9fn5uaybd/+rLtHV69etfBtcXFxYWEh/cw8bJwtshDeXL5y5YrlNYUVwsLCJG6cjdBRSOMKhehC0w5E+m1VVZXQm2OfGVRchBCEuH79ehrpWVRUtH37dqNvrWjEiBExMTGEkIKCAnp5rly5UqfTEULatWtnYT4lAds1wt88AgAAAFDoQAQAAHXr0aMH/bB79262LQj9R926dTO3zsWLF4XRxERptVr6Qdmx4Sir7JHg+PHjUr7VaDRCYJdctsiic+fO9IPliKoLFy4Ig74JSQTWPa1CJ2BKSkpRURGNLoyKimrVqpWwjmGU4pEjR+i0GI0aNaKDJMrlUNXScTz33HP0yFy7do2+Tr5x48bq6mpCSFRU1IABA6yeo1arfeWVV+jnZcuW6fV6OlsOkRZ+SFivEf7mEQAAAIBCByIAAKjb0KFD6YedO3cKE+/KQvtoCCEWxpgTJks1xyqz01qLVfZIkJycbCH66aeffqIfOnTowPwKsC2y6NOnD/2QmJhoYc7ftWvX0g8+Pj5dunQx+ta6p7VJkybNmjUjhNTV1a1evZoOUmkUWhgZGdm6dWtCyL59+4ROH+b3lx2qWjqOiIiIgQMH0s/0zWXh/eUxY8ZYmPecxyuvvEJ7LXfs2LFy5Uray+/l5SUx4JHtGuFvHgEAAAAodCACAIC6Pf/88+Hh4YQQnU732muv1dbWyt0CTU4IOXTokOgKqamp3377reWNREVF0Q+O8F+6VfZIoNfrp0+fLvpVWlra6tWr6efx48fLLKZts3jhhRfoAHDV1dXmNn79+vVFixbRz2PGjDEd+c7qp1XoLlywYIHREqN1CgsLhUk2mDsQHapaOhSh2+7nn39OS0sTrpR6Z0NmFh0d/cgjjxBC6urqXn/9dbpw5MiRlqdXFrBdI/zNIwAAAACFDkQAAFA3Hx+fTz75hH7es2fPY489dvPmTdE1a2pqtmzZ0qtXr9LSUsPlffv2pR+WLFly+vRpo1Tp6enDhg0TYvrMEd5+3bp1q+LDjVlljwytW7fu888/N1qYl5f3xBNP0Bc/IyIieDoQbZFFRESE8NLo4sWLv/zyS6MVcnNzR4wYUVZWRgjx9vZ+9913TTdi9dMqdAXm5+fTD6YdiKbrMHcgOlS1dChPPvkkDc+8c+fOCy+8QF/xbt++fceOHW2X6cSJE+kH4eqT+P4yxXCN8DePAAAAAJS70gUAAADgNX78+OPHj3///feEkO3btzdr1mz06NF9+/aNjo728PC4c+dORkbGiRMntm/fLjrq36RJk7744ovq6uqysrLevXu/+eabgwcPbtCgQV5eXkJCwtKlSysrKzt16lRXV3fmzBlzZXjiiSfeeOON8vLyu3fvtmvX7sEHHwwPD6fvQvr4+Pz444+2231TVtkjwRNPPLFly5Z33nknMTFx/PjxLVq0KCsr27t376JFi27fvk3X+fbbb5mnYLZdFgsXLhTe3Hz77bd/+eWXcePGxcXFlZeXHzhwYMmSJUVFRXTNBQsW0BeHTQtm3dNq1F3YpEmT2NhYy+uEh4e3bdtWbkaUQ1VLwe3bt729vetdzd3d3XadWX5+fk8++SR9c/no0aN0oS2mTzE0ZMiQZs2aCW8it2zZUnrXMPM1wtk8AgAAAFDoQAQAAGfw3XffRUREzJw5U6/Xl5eXr1ixQpijoF5Nmzb9/vvvX3nlFb1eX1ZWNn/+/Pnz5xuu0KxZs82bN48ePdrCRho2bLhkyZLx48fX1tbW1tYeO3ZM+EoYh85urLJHgscff/y+++6bN29eYmJiYmKi6QpffPHFU089xVNgG2Xh7++/d+/ewYMHX7hwgRCyb9++ffv2ma42b968t956S3QLVj+tjRs3jo2NFWa5EZ1bmU6ZQstMOMIPiYNVS0NVVVX1rmPr923Hjh0rDH1ICHFzcxszZoxNc3Rzc3v11VenTZtG/3zllVcsjFJqhOca4WkeAQAAACi8wgwAAM5Ao9F89NFHKSkpTz/9tJeXl+g6zZs3f+ONN44dO+bv72/01YQJE3799de4uDij5T4+Pi+//HJKSgqd+8KysWPHnjx5cvLkyR07dgwKChImwFWEVfZIMHfu3B9++KFJkyZGy1u2bLljx45//OMfnKW1XRbR0dHHjx+fNWtWcHCw6be9evU6cODABx98YGELVj+thp2G5joHpawjkUNVS4cSHx8fEREh/Nm3b9+YmBhbZyq8Iu3h4fHiiy/KSst8jXA2jwAAAACEEA0d8wUAAMBpVFRUHD58ODMz8/bt23q9PjAwsFmzZu3btzf9x9uITqc7evTo6dOn79y5Exwc3Lhx4379+qn632mePerSpcvJkycJIStXrnzppZcIIXq9/uDBg6mpqTdv3gwJCenYsWP37t15imeHLAQ6ne7IkSOXLl26deuWl5dXZGRk7969o6OjrbJxAImee+65DRs2EEKeeuqpTZs21bu+1a8R5uYRAAAAXBw6EAEAAECEac+FGrMAcBy3bt2KiYmhr2/v2LFj8ODB9SbBNQIAAAAOAq8wAwAAAADY3FdffUV7D1u2bDlo0CCliwMAAAAgAzoQAQAAAABsa8+ePZ9//jn9/N5770mfPgUAAADAEWAWZgAAAAAA60tLS5s6dWpdXd3169dTUlLowg4dOsidPgUAAABAcehABAAAAACwvsLCwl9++cVwScOGDdevX+/ujjtwAAAAUBm8wgwAAAAAYENarTYmJmbChAmnTp1q37690sUBAAAAkA2zMAMAAAAAAAAAAIBZiEAEAAAAAAAAAAAAs9CBCAAAAAAAAAAAAGahAxEAAAAAAAAAAADMQgciAAAAAAAAAAAAmIUORAAAAAAAAAAAADALHYgAAAAAAAAAAABgFjoQAQAAAAAAAAAAwCx0IAIAAAAAAAAAAIBZ6EAEAAAAAAAAAAAAs9CBCAAAAAAAAAAAAGahAxEAAAAAAAAAAADMQgciAAAAAAAAAAAAmIUORAAAAAAAAAAAADDLXekCqEN2dnZdXZ3SpQAbatKkifSVr127ZruSgCOQXh/y8vJqampsWhhQFhoHMCS9Pty8ebOiosKmhQFloXEAQ9LrQ1FRUUlJiU0LA8pC4wCGZNUHAAeHDkRJqqqqdDqd0qUAR1FZWal0EcBRVFdXV1VVKV0KcBRoHEBQU1OD+gACVAYQoHEAQ6gMAKAieIUZAAAAAAAAAAAAzEIHIgAAAAAAAAAAAJiFDkQAAAAAAAAAAAAwCx2IAAAAAAAAAAAAYBY6EAEAAAAAAAAAAMAsdCACAAAAAAAAAACAWehABAAAAAAAAAAAALPQgQgAAAAAAAAAAABmoQMRAAAAAAAAAAAAzEIHIgAAAAAAAAAAAJiFDkQAAAAAAAAAAAAwCx2IAAAAAAAAAAAAYBY6EF3anTt3Pv/882effTY+Pr5///7vv/++0iX6f6NHj+7fv/8ff/yhdEFAGagATiwpKal///5vvvmm0gUB9Zk8eXL//v0PHjxoxeTSFwIoCBXVNTnNeZd1X6euthp3NQDgOtyVLoDzeP/995OTkw2XaLXaoKCgFi1aDBo0aODAgRqNRqmyidLr9VOnTk1PT/f392/Xrp2Hh0eLFi3InzsyZMiQf/3rX6IJBw8eXFNTM3369AEDBti3yKq0YMGChISEdu3afffddxZWe/vtt0+fPt23b9+ZM2faq2jiUAFsxKiJcHd39/Pza9CgQVxcXIcOHQYOHBgQEGCfMlg4uWAV06ZNO3z4MCHE29t7+/btShdHAapr92yqtLR0y5YtycnJWVlZFRUVgYGBDRo0aN68eadOnbp16xYeHq50AZVkeu9kaN26ddHR0fYsj1KUOg6//PJLUVFRfHx8TEyM6beourbmmOedunnz5u+//37y5Mnc3Ny7d+96e3tHRETcf//9gwYNatu2rS1KBXag9tNqoepKqdUAwA8diFbm7e0dFBREP1dUVBQWFh47duzYsWN79+6dPXu2m5sDhXyeO3cuPT09KCho3bp1/v7+ShfHaQ0bNiwhIeHChQtZWVlNmzYVXaegoCAlJYUQMnz4cPuWDuxNaCL0en1ZWVlWVlZWVlZSUtK///3vZ5999sUXX3R3R7OsbkVFRUePHlW6FApz2HavW7du0dHRjRo1sluOGRkZ7733XmFhISFEq9U2aNBAr9dfvXo1MzMzKSnpqaeeeuONN+xWGIfl4eHh4+Njutyh7prswPJxsEXt/eWXXzIzM1u3bm36Lzeqrt041HknhOj1+nXr1q1du7ampoYQotVq/f39q6qqLl++fPny5c2bN3ft2nX27Nne3t5WLJIR+7fVTs8RTis/C1XXcq0GAGvBf6pW1rdvX8PQnuLi4rVr127atOnQoUM7duwYNmyYgmUzcvXqVUJImzZt0HtoU/fff39MTEx2dnZCQsLEiRNF10lISNDr9WFhYV26dLFz8cDOjJqIkpKSs2fPbt68+cSJE+vWrUtNTf3kk0+0Wq2CJQROu3bt0ul0TZs2zcrKUrosinHYdu+ll16yW16EEBqsXVhY2KRJk4kTJ3bv3p1e3eXl5WfPnt27d69or4ELGjBgAMKiSX3HwZ61F1XXnhznvFOff/7577//Tgjp1avX008/3b59e/pos7CwMDk5eePGjcePHy8pKbFpT5P999rpOcJpBQAn4FqPdu0vMDDw9ddfb926NSHk2LFjShfnL6qrqwkh+J2wA9pxnJiYqNPpTL/V6/U7duwghAwZMsTVoi0gICCgV69en3766euvv04IOX78+Lp165QuFHCh7ywPHTpU6YIoDO0eIeTkyZP5+flubm6ffPJJr169hGcDvr6+3bt3f++9915++WVlSwggClXXZW3fvp12M02cOHHevHmdOnUSXowIDg4ePnz4ihUrXnrpJTzpVBecVgCwFkQg2kPjxo1TU1NpxLihmpqaX375JSkp6dq1a9XV1TQQY/To0ZGRkaYbOXr06NatWy9evHj37l1/f/+2bduOHDmya9euhuv079+fELJx48awsDDD5Tt37vz44487der05ZdfEkLWr1+/dOlS+tW+fftoKsI32EpOTs6BAweOHz+em5t7+/ZtDw+Pxo0b9+nTZ+TIkaJ9lEePHt22bduFCxfu3Lnj5+cXERHRrVu3ESNGmA6pc+PGjVWrVh07duzu3bshISF9+vR58cUX/fz82A6RIoYOHbpixYrCwsLjx4/36NHD6NuUlJS8vDyNRmMYoCplX6Qfc4kVgwcqAKdRo0ZdvHgxKSnp559/HjVqlNEOStm1srKyTZs2HTx4MCcnp6amJigoKCwsrGPHjo8++qjc61r62Rw9enRBQcFXX30VFha2bt26EydOFBYW9u/ff9q0aUKp1q5du3///lu3bgUGBnbu3NlCWIHEJlHINDIyst66YcXDIkVaWlpmZmbbtm3NvbdLpJ3Neg9sSUnJmjVrDh48ePv27cDAwG7dur344ovnz5+fM+FrhNsAACAASURBVGdO+/btFy1aJGyK4fKvt4SWx+2aM2fOww8/LLfdk/WDaER6jZ08efLFixdpCevdLL/c3FxCSIMGDaKioqSsb6NWXahOoaGhq1evPnnyZGlpaXR09JNPPvnoo48SQqqqqjZs2JCUlJSfn+/v7//QQw+99tprpm8n2OIKlUiR/SUO9rMit/ZaLnxCQsKCBQvo5w8++EBIFR8fP23aNFRda1VdfvY87zqdbtWqVYSQXr16jR49WnT7bm5uL774ovCn3Ns/QkhmZubq1avPnj1bUlISHh4eHx8/evRoLy8vnr02Yrs7ZFl3NQ6C4bTWexNiuZoVFBQ899xzhJAff/zR9Mb+7Nmzb731lre39+bNmw1PB3PV7dy5s4VaLXH7ACAROhBtTqfTpaenE0KM/p8sLi5+991309LSCCHR0dF+fn5Xr1799ddfExMTZ8+ebdic6XS6hQsXJiYmEkL8/f1jY2MLCgqSk5OTk5PHjRs3YcIEuUWKjY0dMmRIVlbWpUuXwsPDO3XqRJf7+voy7+by5cv37Nnj6ekZEhISFxd3586d9PT01NTUpKSkr7/+2vCuq7a29pNPPklKShJ2p6ys7PLly6mpqX5+fs8++6zhZq9evTp9+vTy8vKIiAidTldQUPDzzz+fP3/+m2++MXxKZvVDZF3BwcHdunU7cuRIQkKC6T/SNF6pY8eO9DZd+r5IP+Z2gArA79lnn01KSiorK/vjjz969epFF0rctfLy8tdffz0rK8vNzS0mJiYgIODOnTtXrly5dOlS48aN5faUya1a6enp06ZNKysrCw4O9vf31+v1dHlhYeGUKVOys7Pd3NyaNWvm7u6+e/fuw4cPP/XUU6aZSm8SKSl1w7qHRQp6OZsbrUJuRTV3YG/dujVlypTc3Fw3N7fmzZu7u7vv3Lnz4MGDo0aN4iy/xBJ26NDB6J89QkhJScmpU6cIIXTGMFntntyzb8RujaFOp5syZcrXX38tcX3akVFUVFRQUCBlxgmb7khGRsa0adMqKyujoqKqqqoyMzO/+OKLoqKiUaNG/eMf/0hLSwsPDw8MDLx169bWrVtTU1P//e9/GzaztrhCbYpzf1X9syKl8NHR0UOGDDl06FBpaemDDz4o9J7cd999BFVX0arLjP+8p6Sk3LhxgxBirpvJlNxTf/78+TVr1uj1+tjY2MDAwKtXr65atSo5Ofnzzz/n+TeEs1QSybqrcRwMp5USvQmRUs3Cw8M7duyYkpKSmJg4btw4o83StH369BF6DzmrruVaLXH7ACAROhBtqLKy8vr16+vXr8/KyvL393/88ccNv124cGFaWlqjRo1mz55N33EuLS399NNP9+/fP2vWrJUrVwrN37JlyxITE0NCQt5++22hW2HPnj2ffvrp2rVr27RpIyyUqEePHj169Ni0adOlS5fatGljlYGH+vbt+/jjj7dv3164u8rPz//yyy+PHTu2bNmyKVOmCGt+9913SUlJvr6+//jHP/r370/Xr62tPXjwoOkv+r///e+ePXtOmTKlYcOGhJDDhw/PmjXrwoULiYmJhv+iW/0QWd2wYcOOHDly6NCh4uLiwMBAYXlZWdmBAweIQY+D9H2RfsztABWAX8uWLf39/UtLSy9cuCAUWOKu/fbbb1lZWc2bN58/f74w6HhtbW1ycnJISIjcksitWv/5z386der097//nXYG3blzhy5fuHBhdnZ2s2bN5s6dS3vrCgsLZ8yYIfqatvQmkZJSN6x7WOpVXV29e/duLy+vAQMGnDlzxnQFuRXV3IFdsGBBbm5ubGzsnDlz6FeFhYWzZ89es2YN5y5ILOGYMWOMEup0unfffZcQ0qZNG2FMQ+ntntyzb8RujeGyZcs2bdokvQOxS5cuXl5eVVVV77333gsvvNCtWzfLgw7bdEeWLFnSv3//N998k/4fuG7duhUrVtChV6uqqlasWNG8eXNCSEpKygcffJCWlmbUzNriCrUpzv1V9c+KlMJ36NChQ4cOEyZMKC0tHTVqVM+ePQ23gKqrYNVlxn/e6S+Xt7d3u3btJGYq99SvWLGie/fu77//Pq1RaWlp06ZNu3Tp0uLFi99++22e3ecplUSy7mocB8NppURvQiS2jUOHDhXtQKypqdm7dy/560gv/FXXwlfSywwAUjjtwENK2bFjR/8/DRs27LXXXtu/f/+QIUMWL15sOJXY5cuXDx06RAiZOnUqvZshhPj7+3/44YdhYWFlZWUbN26kC2/cuPHzzz9rtdpZs2YZtm79+/d/9dVXCSHr16+39Y4YMX0XmxDSt2/fjh07Gj6bjYiImDlzplarNRwDKzc3d+vWrYSQadOmxcfHC+u7u7v369fP9DlwWFjYhx9+SO/hCCG9evWid29HjhwR1lHqEMnSq1evhg0b1tbW7ty503B5UlJSZWWln59fnz59iMx9kXjM2aAC2J9Go6GBHnTWSyJn1+h8HYMGDTJsZ9zd3R9++OG2bdvKLYncqhUWFjZ37lzhTbcGDRoQQjIyMuhkxB988IEQ6xccHDxjxgzTMe+kN4mGmdZbN6x7WOq1Y8eOkpKS3r17i0Y3MFRU0QOblpZ24sQJrVYr9B4SQoKDg+fMmcM5rQHPpfTVV1+dPn26UaNG8+bNE4ITJbZ7DGffiE0bQ4FwfKQnCQ4Ofueddzw8PLKysubMmfPYY4+NHTt2zpw5W7ZsuXXrlun6Nt2RyMjIqVOn0n/aNRrN2LFjo6KiampqkpOTp0+fTrtgCCGdOnUaMWIE+eulZKMrVCD6i/Prr78qtb8Odesl9zhYpfCouhKrrlU4znm/efMmISQyMlJ6Qyf31Pv5+U2fPl3oj27VqhXtN9y2bdvt27clZmr1Ukkh667GoTCcVsr0JkR6NaMBhtnZ2RcuXDDcJo0TbNSoUceOHekSW7e3TvNvAoCDQASilfn6+tL/8QghNTU1hYWFOp0uOTm5cePGzz//vLAavQuJjY3t3LmzYXIPD4+RI0cuWbIkOTmZTqpw4MABnU7Xtm1bIQxbEB8f/80331y8eLGiosLq0+F5eHiY22ZxcbHocp1Od+LEiQsXLhQWFlZVVdFAdw8Pj/Ly8pycnCZNmpA/d6d58+YSH/U89thjwii/VMeOHX/55Zfs7GxhiVKHSBatVjto0KCNGzcmJCQYvumQkJBACBkwYAAN45e7L1KOORtUAEXQQpaVldE/pe9aREQEIeTQoUOPPPJIQEAAf0lkVa2hQ4d6enoabYGOkdexY8eWLVsaLg8NDe3fvz99kUQgvUkUSKkbVj8sltF/RM2FqDBUVNEDS/+BefDBB43GJgsICOjXr99vv/3GXH7mS+nnn3/+7bfffHx8Pv744+DgYGG5xHaP4eybsl1jKKDH54EHHpCVKj4+vm3btv/9738PHjx48+bNnJycnJycpKSkb7/9dvjw4ZMnTzYakMt2O/Loo48a/veo0What26dm5vboUOHuLg4wzVp97rhpWSjK1Sg1WpNh0vz8PCQtYNGePZX4rXAUzxRVjkO1vpNRNUVWKi6VuE4553efsi9X5J16ocPH260sz169IiKisrNzT127JgVYzytXiFl3dU4FLbTSsRuQqRXMx8fnz59+iQmJu7YscMw8pHeAAwePFjodbX1bbwz/ZsA4AjQgWhlvXv3NnwjWKfTHTx48Ouvv162bFlJScmkSZPo8uvXrxNCjO57KPooNScnR6fTabXay5cvE0KKi4vnz59vurJWq9XpdLdv346JibHujgwYMMDcq82DBw82jUG7dOnS7Nmz8/LyRJMIXU5XrlwhhLRv315iMRo3bmy0hP53WllZKSxR6hDJNWzYsI0bN2ZkZGRkZLRo0YIQcu3aNfpcTrhhkrUvEo85G1QARZSXl5M/B58icnZtxIgRdJCmp59++oEHHqAverRr145twCa5VUu0Kbt27RoxGfuVatasmdES6U2isFxK3bDuYanXvn37wsPDzXUwMVRU0QNi4VjRhoUZ26V05MiRxYsXu7m5ffjhh6alktLuMZx9IzZtDAX0+AgvkksXHR391ltvvfXWWwUFBampqWfOnDl48GBBQcHWrVuvX7/+xRdf0FEjiY13xHTQTxpjZW654aVkoytUEB8fb5XRVAzx7K/Ea8G6BSZWOg5W/E1E1aUsVF2rcJzzTsPnZXWOyz31QsSoQKPRNG3aNDc3l942WIUtKqSsuxqHwnBaKdMLR1Y1GzJkSGJi4p49e958803aKV9UVHTixAlCyODBg9m2ycCZ/k0AcAToQLQtrVbbt29fvV4/a9asTZs2Pfnkk/QVRfosyDBSQ0BH5tLr9fQNr5KSEkIIffBrLhfb3dNIVFJS8t577xUXF/fu3XvkyJHNmjULCAigd2NjxozJy8sTXhYw6h+pl+mAyvSBVV1dnWHuxOEPESGkWbNmbdu2vXjxYkJCwhtvvEH+nEaALqfrSN8X6cfcDlABrKKurq6goIAYtAzSdy04OHjx4sWrV68+cOAAHRaaEBIYGDhq1KgxY8bI6i9jqFqib+zScy3aygmvhgmkN4nCcil1w4qHRQqdTjdkyBDhP2ojDBXVwoEV/YpzBHqGEmZmZs6ZM6eurm7y5MmiYcVS2j2Gs29UbPs0hvT4ZGZmMm8hPDw8PDy8T58+kyZN+uabb7Zu3ZqSknL06FE6yYytd8S0etC6ahp2YXop2egKtSme/VX1z4otCo+qS+xYddlY5byHhoYSQvLz8y0/szHMVO6pN70BEBbSXzd+NqqQsu5qHIrc0yow/dmVVc06derUqFGjGzduHD58mI5Ysnv3bp1O165dO8Nuelu3t6puzwEcEDoQ7YEGpOh0OjrrMfmzRRZGOjNEn2lrNBoa4U9vj0aNGlXvC1wC01scW7xoY2jPnj3FxcWtWrWaMWOG0S+T0VM+eltWWlpqxdwZDpFShg8ffvHixZ07d06aNEmj0dD3HQzf15C+L9KPucB2FQMVwCrS09PpvzrCSxaydi0qKur999+fOnVqRkbG2bNnk5OTT506tWLFioqKitdee016MRiqlih6rkVbuaKiIqMl0ptEuax1WKTQaDRDhgwx9621Kio9sMJ77oYs/Pcl5fKXW8LCwsL333+/oqLikUceefrpp82tVm+7x3n2rVVj60WPDx0yiZO7u/uUKVMSExOrqqrOnDlDe2EcqlU3YrsrVBa77a+qf1ZsWnhUXYdllfPesWPHtWvXVlRUXLx4UcrLIgyn3vQGQFhorVmYbVQhZd3VOBS5p9UCWdXMzc1t8ODB69atS0xMpB2IO3bsIIQY3SnZur1VdXsO4IAcesxXpyH8LN29e5d+oA9e6OucRmh0Q0xMDP3Ni42NJYScO3dOSkb0Hsj0Z8yKLwWIotvv0KGD0e90Zmam0X+5NBhe4u5IJOsQKYuO+VVcXHzo0KFjx44VFhbSMcKEFaTvi/RjTmxfMVABrOKnn34ihPj7+wsDSzPsmlarbd269ahRoz777DM6MLncgdhlVS0L6ABDonXs6tWrRkukN4ls+A+LFHQgJ3PfWqui0mNFX8kxkpGRYbpQ+uUvq4TV1dXTp08vKCh44IEH/v73v1tYs952j/PsW6vG1osen+PHj1tla1qtlgZACSNCOFSrbsTWV2i97Ly/qv5ZsXXhUXUdk1XOOw0ZI38O6VsvhubX9AZA2I5VBquVWyrpFVLWXY1DkXtaLZBbzWhfYXJycnFxcWZmZkZGhoeHx4ABA3i2KZeq23MAB4QORHs4deoU/SD8b0knmL98+fLJkycN16ytrd28eTMhhD7UJYT06dNHq9VeunRJyj8tdPgGoyaypKTE1iP70pGe6SRfhjZs2GC05OGHH9ZqtZmZmfRdQquQdYiU5evrSx/BJSQk0FGEe/bsafjig/R9kX7Mie0rBioAv02bNu3Zs4cQ8swzzwivZXHuGo19Lisrk/VqhqyqZUH37t0JISkpKUZdXYWFhXRPDUlvEvmxHRYpLIc0Wqui0gN76tQpo9GdSktL9+7da7q+9MtfVgkXLlx44cKFmJiY2bNnW/73u952j/PsW6vG1osen5SUFOlJbt68WVVVJfpVdnZ2fn4+MRhwzaFadSP2vEJF2Xl/Vf2zIqvwdM5001qKqqs6VjnvWq32hRdeIIQcOHBg06ZNomn1ev26detoIB5D87tt2zajH9/k5OScnBytVtu1a9d6Sy6FjSqkrLsahyL3tFogt22MiYlp27atTqdLSkoSbgCMBjKyStW18JWq23MAB4QORNvS6XR79+5dtGgRISQyMrJTp050eVxc3EMPPUQIWbhwYVpaGl1YWlo6d+7cGzdu+Pn5Ca+DRUVFPfnkk4SQWbNmJSQkGA7bcffu3e3bty9fvlxYQoeg+vHHHy9dukSX5OXlTZ8+3dxdoLXQgKlDhw4dOHCALqmtrV2+fPnOnTuNZpGLiop6/PHHCSFz587dvXu3EJtZW1u7f/9+tpZd1iFS3PDhwwkhx48fP3ToEDGZsFX6vkg/5sT2FQMVgFlpaenhw4enTp363XffEUK6d+8+ZswY4Vvpu7Z48eLt27fTcV6oioqKdevWEUKaNWsm6/0sWVXLgpYtW3br1o0QMm/ePGHcmcLCwlmzZpm+KyS9SZTFiodFCsNBwU1Zq6K2atWqS5cuOp3uo48+EvoQi4qKZsyYIfoOoPTLX3oJV61atXv37oCAgPnz50sZ0tRyu8d59q1VY+slHB/pjh07Nnr06CVLlly8eLG2tlYo3p49e9577726ujp/f3/au0ocrFU3YqMrVDo776+qf1ZkFZ72ngjPuQWouqpjlfNOCBkxYsTQoUMJId99993MmTPPnTsnbOru3buJiYkvv/zy8uXL6UKG5re0tHTevHnCUDYZGRlffvklIWTo0KF0qD5+NqqQsu5qHI2s02oBQ9tI801ISNi1a5fwJ/M2LVRdc1+puj0HcEAYA9HK9u3bJ4Qn1NTU3Llzh/6oBAUFzZw5k05BRU2dOvXdd99NS0ubOHFiTEyMr6/v1atXq6urvb29Z8yYERYWJqw5adKkioqK33//fcGCBd98803jxo3d3NyKiorofAuGz06feeaZXbt25ebm/u1vfwsNDfX09MzLy4uIiBg/fvySJUtst9fdu3fv2rXr8ePHP/roo8jIyIYNG2ZlZZWVlY0fP37Hjh25ubmGK//tb38rLCzcu3fv3Llzv/rqq+jo6LKysoKCgpqamkmTJrE9fpR+iBTXsWPH6OhoeucRHBxMn2cakrgvso65rSsGKoB0QhOh1+vLy8uFe2gPD4/Ro0e/+OKLRsFcEnctPT39p59++vTTT+nxr6qqys7Orqys9PX1/ec//2lUhqSkpCNHjpiWzcfHZ8OGDbLOpmVTp06dMmVKZmbmCy+80Lx5c3d394yMDB8fn7Fjx65evdp0ZYlNonSyDosdWKui0gObkZExbtw44cB6e3u/8MILK1euNKpCsi5/iSWknbDBwcFLly41Ld7o0aPbtGljuKTedo/n7FuxxtZr0qRJnp6e0td3c3O7c+fOhg0bNmzYoNVqGzRooNfrhRsDPz+/mTNnNmjQgGFH7P9zb4srVDr776+KflZMSS/8oEGDdu3atXXr1mPHjoWHh7u5uXXu3Hns2LGoumrEf97pt1OnTg0PD//hhx/27du3b98+d3f3wMDA6upq4Y6la9euAQEBhKn5nTBhwpo1a0aNGtW8efOqqir6Innr1q3/9re/Wes42K5CyrqrcTTST6tlctvGAQMGfPvtt6mpqYSQhg0b0k5Y5m1aqLoWvlJ1ew7gaNCBaGWVlZVCZL5Go/H19W3cuHG3bt1GjhwZFBRkuGZgYOCiRYt+/fXX3bt3X7t2LT8/PywsrEuXLqNHjzYaRUur1b7zzjuDBg367bffzp07d/XqVXd399DQ0F69evXo0YM+WaX8/PwWLVq0YsWKI0eOFBUVhYaGjhw58qWXXhLtLLAijUYzb968devW7d69Oz8/v7S0tFWrVk8++WTv3r3pcLmG3N3dZ8yYER8fv23btkuXLmVkZAQGBsbFxXXr1q1fv35sBZB+iBzBsGHDli1bRggZPHiw6at/EvdF1jG3dcVABZBOaCLc3d19fX2bNm0aFxfXoUOHgQMHit63Sdy1l19+uW3btn/88Ud+fn5qaqpWq42IiOjcufMzzzxDJ24yVFNTI4xdZai6uprIPJuWhYSELF68eM2aNfv378/KygoMDBw4cOBLL7108eJF05WlN4nSyTosdmCtihoWFrZkyZI1a9YcOHDg6tWrgYGBAwYMGD9+PH3wbjQOvazLX1YJs7KysrKyTDcSHx9vutByu8dz9q1YY+ul1Wo//fRT6esPGzasTZs2R48ePXnyZFZWVlFRkV6vDwwMbNKkSdeuXR955BGhC0bujtj/594WV6h09t9fFf2smJJe+G7dun344YebN2/OzMy8ceOGXq+nUWCoumrEf94pjUbz0ksvDR8+/Lfffjt16lRubu7du3e9vLyaN2/eoUOHwYMHC1O9MTS/99133/fff79q1aqzZ8+WlJRER0cPHDjwueees+I7AbarkLLuahyN9NNqmdy20d/fv2fPnvv37yeEDBw4UHTME6tUXQtfqbo9B3A0Gr1er3QZVODy5cv1BnWDqrVq1Ur6ysJbMOCspNeHrKwsWw8RAMpSUeOwePHin3766amnnnrjjTcULIZzk14fcnNzrTvjPDgaFTUOYAfS68ONGzfu3Llj08KAstA4gCFZ9QHAwWEMRAAAANWrrKxMSkoihNx///1KlwUAAAAAAJwNOhABAADU5ObNm5s3by4rKxOWFBYWzpw58+bNm5GRkXgZBwAAAAAArA5jIAIAAKhJRUXFN998891330VERISFhZWVlV25ckWn0/n7+0+fPl10gCEAAAAAAAAe6EAEAABQk9DQ0HHjxp06dSovL+/8+fNarTYmJqZr167PPPOMM80oCgAAAAAAjgMdiAAAAGri6+s7YcKECRMmKF0QAAAAAABwFRgDEQAAAAAAAAAAAMxCByIAAAAAAAAAAACY5egdiLNnz37ssccee+yxjz/+WHQF+u3Zs2fNbeHnn3+m66xevdpmxQQAAAAAAAAAAHBOjt6BKEhOTk5NTWVIuHv3bvohKSmprq7OqoUCAAAAAAAAAABwco7egZieni58thBCeOXKFdHl58+fz83NpZ+LiopOnDhh3eIBAAAAAAAAAAA4N0fvQDR07ty5kydPykqyc+dOC38CAAAAAAAAAACAZeroQNRoNPTD2rVr9Xq9xFQVFRUHDhwghLi7u3t6ehJCjh8/fvfuXRsVEgAAAAAAAAAAwPk4egdiWVkZIUSv17u5uRFCrly5sn//ftPV8vLyTBfu37+/pqaGEFJbW1tdXU0Iqaur27Nnj21LDAAAAAAAAAAA4EQcvQNRIMx/8sMPP+h0OilJduzYIXEhAAAAAAAAAAAAiHJXugD1MOwr1Gq1Op0uPz8/ISFhxIgRhqvdvn3bKOH169czMjJMN5iTk5OWltaqVSvR7HJzc//73/+aLh84cKC7u6MfKwAAAAAAAAAAAKtTU6eY0Jm4cePGgQMHent7W1jZwnwpO3fuNNeBWFBQIDrX8wsvvBAUFERueRN9lZwiGwiTOnQjOD5z9QecQ2VlpfSVY2JitFqt7QoDVnBGw5jwftnt9r3GIYU1x2rGdIQQ0o3jV+YYa4F5Mv2NNdN27HmSWK7fYjocikSNGjWKioriyQ6cicvdOZxgvcAJIV2UuGfOYi2wewsSnV5bWys9RcOGDRs1akQyXyU3lzFm2pAxHSGElLImlPQCmBmRHGmjWevDJY5KWMyaUP7PohUah3TWPfXlyJT5vLgY6fM3AKiCo7/CbHTJ0X/Ui4qKfv31V8PlxcV/aeZ1Ot2uXbvMbXPfvn1VVeL9gEVFRaLLZf3PAACqRkdclUiY4gkAnB4aBwAQJatxkLUyAACA41BTBCIxCEL83//+N2zYsICAANHVjh07Vlpq9vlaZWXloUOHBgwYYPqVl5eXaBIr/NLfZP1HooQjU55QixzWAvM8j2I+SooEeCawlla8lknDXBMTOTKN40j7AGvCII5MmY+w7wTScDkeFTob+YGEvDqprQrxBBIye0RtRwlxBADSKRJFyKMpV4FlNQ73Vm6+lDRfypMp1KON2iohs5Yus6cAoDT1PQGjYxGWl5f//PPPwkI6WbPAwvvLVGKieG+KuRcQhClcAMDpIW4IAEShcQAAUWgcAADAFagsApEY9PFt27btscceM12hqKjo5MmTljdy8eLF/Pz8iIgIeXmXE8L8gIf5wSZzUB4nDGxRL5nV5//xBPT9wZqwPUemMRxpmfEMG8AT4wkAAAAgB8KTQUnqeoULANRMfRGI5M+REKurq9evX0+XGE56sHv37np/xfV6veggieamWsZgJQCug+VFJABwAbjeAQAAAMBlqS8CkRiMhJiUlGT6rbnXk43s3Lnz+eefN3rjwNzkKvdeYW4iY25Wq7E013R9eKIXmfMNcJn/r3gCCZkxv0wfypEpT/95Wf2riGvBkWkqa8JQQhrKexEJby0BuA6W671iMKmtZ1gVs1zn9xRA5XAzAEpCICEA2ItaA+toSKAwNKEwS/L58+fz8/OlbKGoqOj06dNGC318fERXpjGPAOAKZI15iogkANeB8GQAEIXrHQAAXIEqIxAJIXV1dRqNxvTXWvTFZHN27tz54IMPGi4xN3fzvYEXL3oTvXiIYv3CGNNxUd3zqHKlCyDLKdaE/hyZRrIm/B9HplEcaYeyJmSOIiQcDZsbITKHLEDQAYDrYAlP9pH0VgQAqBreXQAAAFeg1ghEYubXNz4+XvoWBg0aZLQkODhYdE1PT0/pmwUAVUMEIgCIQuMAAKJkXe+yWhIAAADHodYIRGImJArcnQAAIABJREFUCJEzArGgoEB0zXtjI7ZVYgxERUIXlcI8V3UOx7Nc5vmm+6rqn8P3lC6AXMrVfFlDFtwLV7zemtSkMeYXq6qKRAgpYb3ceAZ0Y86UEMJ6ZkhntZ0asDGWxkF1sjiuNeYfcdexlPXwtufItKcS50WpirSLNd+OrDlqW5DgdFlBhWptHABAPkQcg5NR9w+Y6QU5ZcqUiIgIKWkbNmw4depUo4WRkeIviHp780xlAgBqIkzTJAXiCABcBxoHABAl63pH4wDgOvA6AjgZFUcgErEfYLmTqBhFIObk5IiuXFlZGRQURK5xjIHoy5iOi+rGQGTGHEXI4wzrA6UajkyZdzSdI1OeGZzbsSa8zZEp85ADQRNI5HKWIKPGPEM2qo0iM8PyZNrZesUA1+YSEYiIIrSpV13m8CpVkeKVyVfW9a7WxgEA5EMEIjgZJ/kBuzfJifxXmI2WREdHi66JCEQA14EgIwAQhcYBAEQhAhEARCECEZyMuiMQBe7u93YkPj5+9+7dElOZTqJy/fp10aeCpaWlQUFBxJcj/os5GPCmQk8tFBnmTF2YJ1MO4Mj0DGtCntNSxpGWGU/jFMKa0JsQg/ZECsQRALgOl4hABAD50DgAgChEIIKTcZIfMGtFIDZu3LhOjL8/c18RAKiM0J5IgTgCANeBCEQAEIXGAQBEIQIRnIyTdCAaRiBKT2UagZiTk6MVU15ebrWyAoBjQxwBAIhC4wAAojAGIgAAuAIneYWZOQLRaBKV6Oho0UeIvr7cc6BcYI1eDuPNmVExa0Ke93NzWI+SIpOoMJ8a5mPLk+lxjkwf40h7jTVhFEemfNMH6XQ6Dw8PiSvX1dXJ6lMAAPXS6XTSr/e6ujp0EwC4CFnXO+4cAABApZzk1taKEYiia1ZWVrIVDABUB0FGACAKjQMAiELjAACiMAYiOBkniUAUcEYgRkZGiq7p5eVFCCGhHN2ISgUSMgtUIlNFAgmZMU8Xc57jh6QHa6aeHJnyRJUy13yeKMIs1p31n0BClts7AvESa2mPcGQ6niOt+HMWCX7jyPQRjrQyxrT8q6aqapHA9hCBCLyYf57QHNka86SF2hYkOF2n00mfgQ0RiACuQ6/Xow8RnIlqbm0l3oVzRiDeunVLdM2qqirpmwUAVZP1Pz/uCQBcB4Y5AwBRaBwAAMAVqCYCUeKEZZwRiMHBwaJrenp6St+sk2AOr4N68YyoeYW1u6oNxwllHpuS8A5HyIgvUkPWdGlWmFuNPT6OJ1eOYl9jrQ8t2PNUWXgyOClZ1zsiEEEEAgkdFvN0ie6EYAxEAABwDWq6tZXyW8sZgXjnzh3RNWtqaqRvFgBUTVZQISIQAVwHGgcAEIUIRAAAcAWqiUAkhIjOj2yEMwLR399fdE3pw5oA1O9+tQUguFjwl70jENur7fD2VFuBAazECtc7ADgm+7+7cPtVUrqMMb9sxnSEEPI7a8KPOQ7RBo4HKqNZ82UeY5rwvbgDAOC8VPYErN4gRM4IxOrqatE1pfRdAoBzQJARAIjC9Q4AotA4AACAK1BZYF29HXmcEYjm3inAbQEAWJLUmpSmMabtz5ppMWtCwjfNOvMAqcxzXBK+wTR3suY7CAEI8BeIQAReF1ibo+scmQ5xpXp7kvUId7ZfBOI9Wo7/wx7iKO1D7EnZMUcR8uCJImS+Y1Fk7G91lRYA1ExlEYikvreJOSMQAQDQRwAAAAAAAABgSGURiISQ2lpLU5ZyRiCam+sZHQoAroMl4nhAqg0KUp8ABfLkotSDbgQSgpXgdQTg1Y61OWpn1WI4Mb5AQrtqsJQ0WKp0IcAM+9+x8LyloYgrrAWO5Ti2JRxH6T+sCR+sfxVxGg/ST3x4NAD1Ul8EIrE4EiJnBKK58EZMlwbgOuw9iQoAqASudwAAAABwWeqLQCQWR0LkjEAsLy+XmyMAOBmWSVTKWpM61jEQeYYyZFbFkZb50fEZjufGIexJFZhGXJHH8mB7iEAEAFEsdw7pr5J81lmYmzCmI4SQ86wJe3Nkyjx6MiFkD2vD682eJ8ljTTiSdU95Yh63sR6i4ex5KnPHUsmR9p+sBWa+qcMtAzgjtQbWmQsJ5IxADAoKEl3Tw8ND+mYBQNXMDWUgChFJAK4D4ckAIAqNAwAAuAJVRiASQurq6jQajekPMGcEYlFRkeiaNTU1cksIzg9BRk7KwiAJpu7FEZQSYml0VouYJ0TmeZ5/Tomnove7TM0Xj2WHv2KuhL4cmfI1v7LGM8HgJwCugyUCseVS0lKJMRCbKpAnly6sCXluk9QlkzVhlhJ3g8EcaRUZTfsCa0INIc3x7gI4GxXf3YpejZwRiKGhoaJrenp6St8sAKiarCELEEcA4DpkNQ6yYpkBQNVk3QygcQBwHfhPAZyMWiMQiZkgRM4IxIKCAtE1q6p4BgwD+Cuex31NWX+EeCZ343ncp8izTeajRAiRGYF4L8gom5AK1vyasybkiSIMZ0/KPgXeZY5MeWSxJnyctSK1x82iBCo8SiyNg0u5wNo4MM9NrDrprIeopcscIk7MlZD5evVsQWLTZQUZ/Xnn8CopZB0D0Z8xHSGEnGNN2IojU55IjF9ZE9Zy3CZ1YE04RIlL9RnWhIoE9PFQ5N+ZR7iOEiIQwcmo++7W9IKcMmVKRESElLQNGzacOnWq0cLIyEjRlb29eYbhBQA1QZARAIhC4wAAomRd72gcAFwHIhDByag4ApGI/QCfP38+Pz9fStqioqLTp08bRSDm5OSIxheUl5cHBQWRTG+iZw1FVGTYO6WCzlyEuoYyVOqE8gUDKoIlyCiQEC/W/JgHT+SJIpSxi9YTxpGWZyZlT7s/+93OmuMw9V0v7PazHqU+ih0lRCDWw3UCCZlhRBxbY37iX8yaUE8I2wCpGo5ADp5b0FLWtrcNR6bM44YTjjc82rLnSew/+j3Pf20nWRMOZc+T/R0jnn8NVPj/KSIQwck4yd1tbe29f8HlvsJstCQ6OlonxteXZ8x2AFATBBkBgCg0DgAgChGIACAKEYjgZJykA9Hd/V4oJeckKrm5uVoxZWVlVisrADg2BBkBgCg0DgAgClO0AwCAK1D3K8wC5ghEo1eYo6KiROML/Pz8CCFEe+89BdVQYZi3mvC8a8BMdec0h/UoBXJkGsB1lHQ6nYeHh8SV6+rqtFot0XK0pswJeZ5rNOZIy6yEJy3H5Wb/1ypb2ztDVWJ+E5l5kgTC8Xqjz0ASuUun00nvQ6yrq+PtJjjBsaddWA/vVo5MH1XbLxRzw8L8K6PCYT1UhvndXuabOi0hMq/3e3cOHhyDn/AoYk3I80MsI3rbRAhrwmqOTH040rLhucPPVOJfEubb170cpW3JnpTrPwtGHiSApxYCOCIneQJmrQjEa9euia5ZUcE8/AYAqAyCjABAFBoHABCFxgEARGEMRHAyThKBKOCMQGzSpInomj4+PoQQ0qSSo2jgdMpZE/IEIDA/IVcqdJF5wHi+KEIeLBGIlYSwTrBEolkT8gT0MY8WTzge4fI8iOEpMLF7kJG6ZlhSHeVm6rB3BCJzFCEP1UUR8lDuhwYsUWQOQL7bJJ1OJ0Qz1Ov/311QZFId5tg6nuslgD0pOctaH3jCHhtypLW/B+tfRRxPVCnzfW8/12p49Xo9+hDBmajmCZjEu3DOCMS8vDzRNSsr0XUI4CoQRwAAotA4AIAojIEIAKLQewhORjURiBInLOOMQAwPDxdd08tLkUFKwLEpMpKR6sZAVF2B2SIQ26Wy55fFemPRhuPY/pfjbuYp1nwfYM+TfTBNgiAjsBp7RyACuCYV3jmwjIEYspSELLVpqcQ1VyBPLjGsCX05MhX/j9CW/sdxn3OLNSFzFCEhJJM5JceeKvKGx3bWAms8yNBqRCCCk1HTra2Uu3bOCMRbt8Qb4KoqnvYVANRE1v/8uCcAcB0IMgIAUWgcAADAFagmApEQIjo/shHOCMTAQPHBvaSHIwEXdQ3wZ//ZG3nwjCiUxZEv8xheigyBRAghRK+XkVzWyuKCeTfAIl2JTHkoMHcegDF7Nw4AoBJqahxUF+DZTW0FZjNSbbvZR+kC2M0wtZ0aAFtS2ROweoMQOSMQzc22LKXvEgCcg6ygQkQgArgOXO8AIAp3DgAA4ArUFIFIJHTkcUYgmhvrEO8a2Im6Hoqqa2A1nmMbZr1iyMhUscPLEhpwvDWpSGPMrw/rnjKPyUIIeY49qTKRwjyXWwprgTup6hoH22NpHO4OJtU7GfNT12+iYnj6Yux+hC+wlla5ycddBfNPm7YFCU5niUC88iq5sYwx0x4c9YF5T6vZ8yT5HGkvsSZswpEp81zVzG/eHOZoypjfZeE5pyGsCaPRmgGomPr6xdzdLXV6ckYg1tbWiq4pcQoXAHACCA0AAFFoHABAFBoHAABwBSqLQCTm+/gozghEc5GGuC0AEcyT5yoyfTMPnglwXeQxYztC7P+UwZ8jbVOOtDc50jI7zVEJxSPLAWRjiUAMSrRBQcCQqn5lEEjosOw4evI9sUtJrBKzMCsS2hzNkbYV6w1AMUem9p8+sxcaBwBQAfVFIBKLIyFyRiACAGDqAwAAAAAAAABD6otAJBZHQuSMQKypqRFdU8kOBeXmooV6MA84wjx9M+EYCS6dI1NP9qTKxGkyXzXeE0jAcpaI41yOh9VNWUt7izVHQsgBjrTMsZZ9OTK9zJG2BUdaAAMsjYNSYyCeYW1Y7ufIdA9rpl3Y8yQBHGnZ2f23uKVCd3TMryCkc2TKM3TdXdaEt1kT+rYgvdLV9K6SIo3DbxzHh3kmS57b13LWhLGsCQ9xHKJK9qTs7mdN6M2RKc+e4v9iAGtQZQQiMf+uMWcEoo+P+JC59c7+DABOQ9aYpwhXBHAdLPMkAIALwPUOAACuQJURiISQuro6jUZj+mvNGYFYWloquqblgRdtC09LHJa6ZmFWKnhBEXxXjaxZ1+8FHbRM5cmR0ZMK5KmYUa5UgcFRyQoyureyUmMg8sQKMeuP67Q+vkoXQC7mgYx5xrxTIZbGIeNVks86C3MJYzpCOAYyvsIRIlfEnpQ8wprwFEemrTnSsnkI7acEyoScA8D/U2sEIjHzU80ZgRgUFCS6poeHh/TNAoCqIQIRAEQhAhEARKFxAAAAV6DWCERiJgiRMwLx1i3xQcWqq6sZSghOTnUjGYE0soYsuBeuWNCa1KYx5qfIRNUYXBVAPlnhybJWBlehSIPPEzgWy1rgkxyZdlbfrwxLBGIdx5jCPMOG5rAmjOPI9DRH2musCRtxZKquYGHmcS0jOTLF3aA0ahogFUACdd/dml6QU6ZMiYiIkJK2YcOGU6dONVoYGSnejnp78wz3CgBqYmGaJlOywhUBQNXQOACAKFnXOxoHANeBiGNwMiqOQCRiP8Dnz5/Pz8+XkraoqOj06dNGEYg5OeJP5SorK4OCgsg1b6JnnWmVZ0pZ18EcFaXIQzCeyd3AgbFEIBZzzMJMWKt9IHOOhJznSNuZtcCS2mYzGnCkZR4rijn0BpwUS+MAoDhFmjIVRhHyYAlPvktILmt+PHPRMo+ByBOByDNSdE/WhO05KuEx1lsd5lmYeTD/Q48oQttDBCI4GSe5uxUmOZH7CrPRkuho8TGfEYEI4DoQZAQAotA4AIAoRCACgChEIIKTUXcEosDd/d6OxMfH7969W2Iq00lUcnJyROMLysvLg4KCSBOe530ggbqegykSVZrF+hQLMbCS2TvIiDmQkCegj2dgoOusCdspEQtAXG4yULAdezcOigxdx+MCa4Ebc2Qa4Bq/bszDLhNCZFRbE16sCXne0uC5G+QZ4ZeNtgUJTmeJQPQkxI8108EchyhHiXgonkEbmQMJL3HsqYynRVayjqO0zBUpjyPTYtaEzdnzJA050jK7yJpQ40GGVCMCEZwMIhD/Ijo6WifG11ddQ+kCADsEGQGAKDQOACAKEYgAIAoRiOBknKQD0TACUXoqcxGIpsrLy61WVgBwbBjmDABEoXEAAFGYoh0AAFyBk7zCzByBaDSJCo1ANF0TEYjgKBSpiczvTRNVvjqt0+k8PDwkrlxXV6fVaklLnuHBWQUokKdiuqmvIoHz0el00vsQ6+rq3NzcSMVgUmv8uoPT4hmmgJ0ib4ex7uk51tIyv0pMCEnhSMs8P1gpR6b9OM5pBWtC5vcxvQkJ/vN6l+benUNTQkJZM+XB/HY5z3ABD7AnZdeGo8A8rz+zGctRWuYbdZ5/K9Q18BSPpkoXAMCROMkTMCtGIIquWVmJ0Q8BXAWCjABAFBoHABCFxgEARGEMRHAyThKBKOCPQBRdE7Mwg6NQ5HGfCqMIebBEIPIoUeLGgit6kbU+8Ixt7zoPusGBsUQgZnNENtWwJiSEpLBebp05Ms1iTRjDkSlPaxbGkZYN83QQPFoqkCcXnh+LBqwJ7+c6NTqdTohmqNe9O4cGS0mDpTyZMsLvqRQ80Yv2xxxIeJkjU/u3n0phv1H3IAHVer0efYjgTFTzBEziwzrOCMS8vDzRNRGBCOA6EEcAAKLQOACAKIyBCACi0HsITkY1EYgSJyzjjEAMCxN/mOLpyTxeiGrlsDZ20Uo8smMuLVGowODA5M6lyBuByDyo0BWl7khY8y3hyNN1HnSDA5N1vd+LQGyZaNMiORYMFAVWocIQOZYxEJNfJRnLGPOLY0xHCCG5rAl7cGTK0xCOV6I+MA9XyhxlvIvjpq6MNSFPBDfzMJHi7/vZHvP9Ns/on4QgAhGcjJqegEm5a+eMQLxz547omjU1PO8RAYCayPqZxz0BgOtA4wAAohCBCAAArkA1EYiEENH5kY1wRiD6+/uLril9WBPnoa64PHWVFhybXi+jOt1bubA10aUx5sccahGrtmpfqVB/irriqcGByWoc7uGZhfkmYzpCFGofLrBea405MuUZY4Y9tJn18DI3R+WM6QjhGJuScIyt1kuh9pNn/EQ22hYkOJ3lzqEZx4iNPCP0MR8ingHhB3OkZR6BjidwzP7/+fFMiFzLmjCfI1PmdpvnvPCMG85c88+x5qjxIP2qWRMDOCiVPQGrNwiRMwKxoqJCdE0pfZcA4BwQZAQAonC9A4Ao3DkAAIArUFlgXb0deZwRiOamXr33S3/Nm+irpG//L1xsHluwFUViqQ5z3OkqFYNgZ8Gp7GkVebSuCKWGtUIgIVgJSwSiD8fQX6kcbW8se1IF8LRmXHPK270fhzmq1I8jU44fKCJjTOC/OsVxbHnG2mMusHgIgQQ+hHRjenfBgxAf1kx5Ai0V+S3muk5ZZamqo5bnhpl5UGyeCJmWilQkJX4s+rPnCeB8VBaBSOp7m5gzAhEAgKWPAAAAAAAAAMB5qSwCkRBSW2tpmAfOCERzs6/e61BowjPQDoA1KDIfuIvNIWTvd4tUF0gI4KpYGgeeMRCZh7XioUjMDs+wVlyRTXZvfpmHMuQpqSI/MkrdMou/SiRBsd1z5CE+6aNESgzEqcibWDyZpqsqepF50Fv7jxmqRuy/UB4k4P/Yu/8gu877vu/fJbCLXfzgckGAALgCYEKAQFMwRZoKKUuiJZkILdduHNmJXaf1NOEMM9OkUzTTGXQ607R/dTrpTJs2ncwkA7KZTppJ28zkl51UkYhRYsn6QZMGzRAUSVCkAWrxg4C4EAHsLoC9d/uHrtfg7rO753w+u/fZ55z36y8Ndb54zt57znPPvedzvg89ENE05SUQY9lOiGYCcal4I8ulAe2hPIgEoAU43wEAANBa5SUQY9lOiGYC8ebNdIvDpZKJSMjSluVVY9CH1UH/L3XQ/8T4Cpqlc80X2vWdWWmFfvZw3FJXYZabyDi3x7N0rnFYAaXS/tj+e1F9eR9v12urJBCdHohOJzhZeS2bi0rQ7FcLnfDXLxi1o2phlgcmHNvVwo0R2uRwIeI9ddAxtTAi/me18GFj0IvGefqgWvgDfcz4tFp4SC10vkC9ohZe18eMz6s7nKsjtszJU2fp/gmspVKDdUtFAs0E4shIupvxiqs/A2iMWjcMSCQB7UE8GUAS5zsAoA2KTCBGRLfbHRgYWPxpbSYQP/ww3QGl13iRVZiryHJbSU4ROpwgIdaxWjcMeqGD4RyzaXEpQgcpQqwDtfqZ0PykX4qaHIpbFP51NWT0UGl/qUd5duG+iE3qeDfUwoj42ZU3SftFY9A/NGofUAvvNgZ14pYa5wvUefU8dbJ1xQUJZd5f2u/W6sAaK/jqNnk2mgnEHTt2JLccGiruSQwAomWaJCxG6ABoj1qTA81PgPaodTHA5AC0B98U0DClJhBjiRCimUC8dOlScsteb0RWYUY7fc+4dfZEjk9NuY/M8DOx7flaCcReyGjXm+KIwHrQslaGMmVycLxjzL01fur8KCfaTFptRRPqS/S+MehrRu1ttfCbxtH7Bb1UX0x5s1o4dDA+caZWyKg3OWwwOkXKexsRv6wWOmmKr+Q4x7cYB+GEWjiuj6k7ohY6a4jrF9vGoAVGJkkgomEKTiBG6oQ8duzY7t27q9SOjY0dP358wX/cs2dPcuPhYWeqA1ASQkYAkpgcACTVOt+ZHID2IIGIhik4gRipD+DTp09fvHixSu3k5OSpU6cWJBDPnTuX3Hh6enp0VF6IrkzymqdOq7Kz6qBZWkxm2dss+Y4temke3j3GjRtrTIw525y9ZtzSPJLjlHHiVAe4/EJ+/U4gOlELJ1dSGCfc0feJ5bJauNUY1FkIUI6yOnfenR2WX6hramEnov+Tg9qSPcJYFtZ5T+XsbRitDJ2cZv85qzCnW3BVkOUlsrpal5fmI4GIhik7gTivt8hJ/UeYF/yXffv2JbdcanVmAM0zP59UQY4AaA8SiACSmBwAJJFARMOUnUCcN58YOnr06MmTJytWLV5E5fz588lbiDdu3BgdHY0rxirMciRKjrmFl3R7Ty18SB+zsFuF23MMKjf3cfyRUSu3ZXHISbdtz8ROqQdiFllShA5ShCicMjm893TcWHi3sqozYl2E8Qk1bVx1/EgtHDUGLWtd43fUQifC8qJRW+OG2kc5b4tzNSiPO60Wbov4lLRE+wXjYntMLYyIH6iFTg/E+41a+SA8bQx6XS08ZAwqS/fwr8D5KXuvUSuz0osq+bG8GIxtt1ZzT4B1gATiR9x///2dlC1binuGE4CIHAGAJCYHAEn0QAQAtEFDfkC8M4FYvWpxAnFiYmJDytTU1KrtK4D1rZgEIoD+YnIAkKQkEAEAKE1DHmGeVzeBuGARlfHx8WS+YPPmzRERUxnabWd7qjdLLt1b+6Lf5Pb2cvvqiMjyU7bTq7tAnU5ncLDqAgTdbrfWbwoAytXpdKqf791u1/2ZwFlEReZcGMofFs6jkXl66quXK/LHhbyORERsMmrlQ1hefSW8t1R+heVBByJqnu+9K4dNxpIvt9XCMN5TZz5zLpTkjkwXjCOp/w+eWl+C1L/0qjFmWe0jwnkSGcCfKuYOWMVPZTOBeOHCheSWMzNZruIBZEDICEASkwOAJBKIAJJYhRkNU0wCsWK7EDOBuGvXruSWmzY5d28jIuKyOndcMwbdadRmaVIrm8jRf31YHdG5A/YLOd6XXzRq5SPfuRMrZzyHI7QE4vcOx9Rb4qB7xDors3PZqD2gFr5rDPqAUSs3jP+MehDKM5JzP9+ZBuWFHUb0MePTRX3KRISWQNz7NX28B/XSPJxV1FriV9XD/oxxgv+t0s41eSW0MFbrki9XNkRoCcQzEa+IY8Y9amFEnFMLv2QM+veM2t9Q35o/NAZ1Vn3RvGoc9vKSL86Dbi+pO3zYGNQhf7eVZ6SBiG0xNzfHb4hokpLugFW5ajcTiFeuXEluefNmy57hBFqsVjSAawKgPQgZAUhicgAAtEExCcSotvqhmUDcvn17csuhIas9T4QRp3JShFlkuW+cpQ1HWSFNR3FdTrxmmnNzNcp7G98ymn89mOPllVOEYSTdHs90IE31/UfeLKeMM+j46u1Go9WaHFahB6JDDqwdKm3CP2uc4PvlyqJeJefCTH4Cx7lwdlpFy7wrByWB+NmIT6njORN+lkdDjhgHodwA1DkIH+77OS4/jxLGW/P7xvvyCbXQ+QKVpY+h/P0UaKLC7oCtGEI0E4hXr6Z7yd6+7TQrBlCSWqFCEohAezA5AEgigQgAaIOSEohRIYRoJhB7qy0v0vvhch9LqVTAXRoUrlbIqGdfjgX7cikukSov4Ah8lDI5TD8ds18Xx3NiGnKQ0An03VALHzL+UucE16NY6ojyy+skQ50EoswL9GWg90A8GNvPKM8uXI64KI5pxcblvqyPGgfS23pp/JRa6HTp7T/nMvJv52i1/zke/wLaqLw7YBs3Lvejp5lAnJ2dTW5ZcQkXAA1AbghAEpMDgCQmBwBAGxSWQIylf+P7CTOBuNQzBVwWoHhZFqp2OF1O+n9/crjE2VQlvzXcN163Xiytr2UmSgJxxFiFOYtWJXb7n5LL8vLyaEgVfeye3HM9Ir12YwXONZK8Yu+H+piR7hFVjdxHyumB+Ir6Cj+S43STgy7MDQBqKi+BGMt2QjQTiACgfA0AAAAAAKC5iszMLNMJ0UwgLvWocu8HhSvDMaeutJqlF8zLxv3Jx3Ks55Wlm4ZMbpdz2RhUbhRlLyQukvs9pVdEr+Z1ddB7non7n1cSx6eMPjKfVff2FXXEiHjEqJXXQ3RisI7+R2jljmNOC6Qs65Y6vdWm1MJ0s+Jq5OjN1qfiwAv9fhzBeXmzhM7kudfpgViWf6y+RB83Bn3VqJVPN+eq42NGrRyNeFct3HowfvmMWCuf4k6i/zF1VPU7UETEU0btMbXQ+bD4ilooX185p8wvqIXyMuthXNQV10pbD/wOxrb2tEhHWxSZQIylnzU2E4hDQ+nJe8XVnwE0Rq2ep8QVgfZQ1kkAAAAAGqHIBGJEdLvdgYGBxVfnZgLx+vV0OKHXeHFHaauMxpC0AAAgAElEQVQwyylCR1kpQod8SylL1CLXeohZ+j09ZFUvdX8iqZdIesC4My/fib2ZKdAnBx9mjB0ua0HP4jqOOQt6yl5Tj4d8L2+tBOIqxBWLO5DaEySUfUotdF7bx/VS/TGC4pppOq+SPDnIL5LTA/GCWnifPmb8W6P2V9XCPcag9xi1Guf5JPmpHSce5yRSy0ILb+AOpSYQY4mPajOBODo6mtxycHCw+j8LoGgkEAEkkUAEkMTkAABog1ITiLFECNFMIE5OTia3vH1bXgAMzZWrq2D/FbeCs6dWy4LenYyPGUvgyZx0khNekJWVIsRaO1Le8VArnlxrY7RFcSHN9HVxBeeNT5ldeqneDdb7hFISiBuNDnROJGqD+tY4/ZyGjdqfVwudpZ/7b6dTqx4PcsQ4CkwZZ9Lv7snAGiv76nbxCXns2LHdu3dXqR0bGzt+/PiC/7hjx47kxkv1RgTQPMss07QYOQKgPWpNDrWyzACKVutigMkBaA++KaBhCk4gRuoD+PTp0xcvXqxSOzk5eerUqQUJxAsX0n1Bbt602zy0p4lMezh3U8tSYIrQUSuB2AsZ/SBCbpG6I0cnuPf0UrPFZAZy3JKuN/goZXJwFLcK8yl1hx/Nda7Jr3Dfd/iMcTAcMvb2EbX2cqamt/K48oX6xoMxfqZWyKg3OfzQWCB7s/Hy/oFa+El9TOspDfl6e8IYtFIcZVU57Qi/qx4P9xqDOue4LMuzLN4qzCQQ0TBlJxDn9RY5qf8I84L/Mj6e7iQ/PNye34qAtiNkBCCJyQFAUq3znckBaA8SiGiYshOI8zZu7P0hR48ePXnyZMWqxYuoTExMJPMFU1NTS62vUhVBwub5QC2UG/SgL5SQ0UzEtDqeHBRy+hgW14fL8QO18JHV3Ass9HvqAfzz2Y5eZXKYfjpmF96trKq4VZizBQllfd9huaew8ySME2WVm/Q5vX+cZNM1tdA73ZQGqY8biX7na8U+9eV1mvS9a9T+G7VwzBi0/5xTRg66ZOnRVVxHbO95FBKIaBgSiB8xPj7eSdm8efOq7SuA9Y2QEYAkJgcASSQQASSRQETDNOQHxDsTiNWrFicQz507d1fK9evXV21fAaxv/W5zBqAQTA4AkpgcACSRQETDNOQRZjmBuGARlX379iXvCm7dutXZPTTT9tw7gLXR6XQGBwcrbtztdmt9bUiQHy570xj0l4xa+eEy56EVZwEBeREArKl8TyLLOp1O9fO92+3eddddMfK1Nd0lFEZelCzdoxuLOI/ZGjqdznyaYUW9K4fLEem1GyvYrxZGxBW1UH6ePSImjVo5r3nZGFR+tvdBtdC5RrqgXiN9Xx8zvlzWeibZVsabm5vjN0Q0SUPugK1WAnFiIr1e18yMvMAqgMKQIwCQxOQAIInJAUASvx6iYRqSQJxnJhBZhRk1ZLmRdVb9EHL6bb9e2mIdckRu+JnY9rySQHzcSQOqDmQYMyJT9+tD5aXV0DxKAtFZRMWJz9To1vhRTk/9G2rhXmPQTKESkbyIihxdjIiXjQ/xD9VC5877p43aq2rhPWrhhoOx/YySQNwZMaIO6iyMIy8t8iN9zPiCcQDLoTNn5ZZ7jdr+u60WFvdLQFkTfkSQQETjFHMHrOLNOjOBeOFC+lkCEohAe5AjAJDE5AAgSVmFGUAL8OshGqaY+w4VFywzE4i7du1Kbrlp06aIiHeHY+5m9X//Iw7kuGHi3HN+TN3hF41BHy/qtpLTlE0m3yGXQ3kRMaqX6pFJp8WkHEC4O2Kb1APxhcNx/S1x0D8j1sV31EJn0DA+N5xkk/yeRoQ6bccRdUaSsyG3xLqIiG1Gbbp7RwU7jEH/WC38KWNQeUW0rU/FgRf63QPRmbcJ7a5P31ILP2kcDE6bM3nCd/rlnTVqZ9XCP1ILt0Z8+U/O92p6Vw4XI36oDuqEdk+phXJ3v4j4qnEA/yO1sOqlXMqX1cLfUAvfMF6iKbXwfn3MPA9FOR+LWR6gIYGIxinpDliVq3YzgfjBBx8kt7x1y/lWB6AktaIBXBMA7cHkACCJBCIAoA2KSSBGRKezckcfM4G41GrLvbYmD5T2ILOcInSUlSJ0kO9Yt5woVsTcXI13trfx0Rw9EP9ChjGzybSwpihL5NyRZYHXXE08DbUmh1VQ3IGEFf1mjvf0SIYx20a5cvjkifjkibXaoWU8lGFMixwGLIvT9FZ+jMDhBDxl14zaYfWuXoGNF4G1U9gdsBVDiGYCcXp6Orllld8uATRDrdwQISOgPTjfASRx5QAAaIOSEohR4Yc8M4HY63W4CM8aAO2hhIxePxw31R6IB8W6+EO1MCK+YNSGeif2VeMr08PG7d8sbXrQRP1OIAIohJJAfPvZuPicON7nmYsqkBc9D2/dc82TOd7Tsl6i8J4xkoOE8jrgMRjbaIOGpinvd7He08RLMBOIs7Pp3ssVl3AB0ABEAwAkMTkASGJyAAC0QWEJxFj6N76fMBOIQA3yXTvnlp28uqvTS6u4+5P9tyVHLxg5uhgRrxq1D6uFe4xBHf0PEsqnjNPc58F2nGthTINBV0EAa0KJJx88EQdz9EBsD+cSVF7tN9NSv6K7c+9AXVle3n+vFg5E/Nxq7giwHpSXQIxlOyGaCcSl4o08wgy0h/IgEoAW4HwHAABAa5WXQIxlOyGaCcSbN28mt+QRZiRkydZlic+0JEX4J5RW6PtzrML8YaaWgrKybss7WnbK9Fu+FCFPKQJIYnJomv5fsbxgHEJjauGIPma8r+7wY8agWaTXWK2AWQFNVGqwbqlIoJlAHBlJz6Mrrv4MoDFq3TAgkQS0B/FkAEmc7wCANigygRgR3W53YGBg8ae1mUC8fv16csvlGy8CaJJaLQt6oYOzh+OWugrzkFgX29VC0++od1Q/aQz6oVG7Uy2Ug4RZGqQW5zX1VTpSRgKRRBKQQabWdcrk8P1n47y6CvNTbfqw+H31PXWaUz/e91d4t1H7vlooRxfDuAqdMQb9hlH7G+p7+qB6BHIVgCYqNYEYS3xUmwnE7dvTc+HQkPwVH0BhSCACSGJyAJBU63ynMxIAoFClJhBjiRCimUC8dOlScsuleiOi1a6p95W28a1yXavVsqAXVxw2ZtM8S+AZd0XlxZTbsxR4q4KEsnxBQpkyOQB3OqtOZf1fTb5QmZrt1kog9iaHe4v+HtZHcge6zcagb6in6oPqEbhLrIso7fNU/gIVEVtXbzeq8y7qeBwBDVP21e3iE/LYsWO7d1eKgI+NjR0/fnzBf9yzJ/3NeHh4WNg9ACVaZpmmxcgRAO3B5AAgqdb5zuQAtAePI6Bhyr7ztfgD+PTp0xcvXqxSOzk5eerUqQUJxImJieTGMzMzo6Oj2k6iscoKEspdgaJNi+dGhBYyOm+0dJHv47ymFkZEjWYPi8i3f08YB+Gf10sz9NqT85LXxLoII/UQES+qO+yk8+XFydKPClTzFWs2UyaHK0/Hza+L4/1YrIuIeKg987YT7uj7q5QlSPiy8RLJ5+kNfcz4XI5XSf6kGDoYnzhTK3Hc2/jHEZW+sqTsNt5T+XJlSh8zatx8WeSoejycMV4lJ72o+a5Ru1n9S51u2umFAyo4YAz6oFErX5v9e3XEgcH4xVskENEwZScQ580vclL3EeYF/2V8fDy5JQlEoD0IGQFIYnIAkEQCEUASCUQ0TNkJxHkbN/b+kKNHj548ebJi1eJFVN57773kLcTr16+TQETZWpYidMzPJ1X0ZowdEbfV8eTOgE+oI4aXSH1bLXRShM5NHGeRQU1xPRD7v9xkmZQE4o6v6eOl72liAY7elTzGS1SB10VOmRwOnYhDJ5xBRdsyjBm/Z1x1yIE1qweiWijP204PRPmRFGc579fV99S5RpKTwmFcb3ufxSQQ0TAkED9i79693ZStW7O0bAWQwfx8UgU5AqA9SCACSGJyAJBEAhEN05AfEO9MIFavWpxAnJiY2JAyNeW0/QBQEhZaBZDE5AAgSemBCABAaRryCLOcQFywiMr4+HjyFuLmzf1vpbsazhqRabnP93eMQX+uqFs08kOgt4xBszwa6Twv4D0TlEWn0xkcHKy4cbfb3bBhQ1wxupJvUF9epxm/cxDKHaxzPUef5XEtrJ13cjzBFBERnU6n+m+I3W7X/Zkg318qkp9oc5Z8uWa8Svrk0PeX11kOQu47EUYLCKfvxCPGy+s06NBsOBjbz9Q633tXDqeejbPPiYP+eeMl+kaOVbM+btTK5/g/MwbdZ9Rq3jRq5bVQftc4X/5ALfyrxqBn9dLYqI77f6sjbhiMv+lccAPrUUPugK1iAjG55cyM/NsAgMIQMgKQxOQAIInJAUASPRDRMA1JIM4zE4h79uxJbrlp0yZrt3JxAkqyslKEjqtq4SHjJZIDKc4hfN6oPWLUZqIkEB81bhz/O/U9nTauSG7opfpteTmdFF5A6UV1XJYWWZ+yZOsiov8JxHx/qcg5T2XbSnuVNM6Vw6HV2431L1PUvdPpVF+B7U+uHE7EozkWUZEvzIpbju8/z70DtWwxauWVPi8Zg76jFlpPUxlXkjU6nH+U3LN0ICJibm6O3xDRJMXcAat4FW4mEK9cuZLc8uZNJ7UPoCS1vvNzTQC0B23OACQxOQAA2qCYBGLFBcvMBOL27ekeEkNDQ9X/WbSFEweQ5QmkGL+RTai1Wbo9RkTN5dJ6G984HN23xPF+duVN0orL3ezMNC5BQqySWpNDL4E4/XTMfl0c77JYF9GmHohOz7viElVYr5QeiA7nsH9NLfyEMahzUSf3QHQuk+RXWJ5Vfs3Y23+q7u3P6WPqgT7n6HU6un5BfYUPqDvMnQI0UUnHdZXPWjOBePVq+qnU27dvV/9nARStVqiQBCLQHkwOAJJIIAIA2qCYBGJEJNdHXsBMIG7dujW5ZfW2JkAD5QsDZqEkELc4i+cBKEOtyaFn5Gv6eMUtIJ6lByIpQqwDypWDwznsv+QO3m9Znrfo/8TiLIj8pFr4I31MvX+is0S7/NROGA9F/boxKNA4hd0BWzGEaCYQp6enk1tW+e0SQDMQMgKQxPkOIIkrBwBAGxQWrFvxhzwzgbjU0qt80gNYztnDcUvtgZilmWZx5PvGYdxgf5i3Bh+xCrmhWt4xDnv5vqczI8kJmi/oY1qK6ySrcQ6kTWqh0zy8wFRpvxOIWbxmHEhHjD/5ZXXc39PHjL/R9/doT78HjIh40Pgzv5GjN+U3nZymOq58CTpQ4JMEwEoKSyDGSk8TmwlEACj1yh4AAAAAgLVRWAIxImZnl1vzyUwgLrXWMz8oAO2hJI63GXmfb6k3Nl9VR4yIB4zaX1Lnw//VuG/8XxqTsJNeBO7Q78cRsqyk7PiV0na4IC8axx4r0WNVOClCx2PquI+t6m6stX1GrRzalVe4joj/LMfxIKcIAayS8hKIsWwnRDOBuFS8keXSgPZoxYNIAOrjfAcAAEBrlZdAjGU7IZoJxKmpqbojVnVWvcOzn68ryO114/5klkU5PUor9O3GKsw71cLP62Pm4aQIHaRvsEpoiIxsmMfWN+XK4bVn44fPieNdF+siIsbUQufZBSdPfVmdeJ1mmi+pg35aHTRL68+W9IE1jfMqAX+q1GDdUpFAM4E4Ojqa3HKpxVUANM9SrQySSCQB7UE8GUASkwMAoA2KTCBGRLfbHRgYWPwBbCYQJycnk1vevn277h4uRJCweeS+IR8ag2a5CZYO5jbWMk0SFuvlCF46HNPqKszjYl1MqIURMWLUblUL3zMGdT6s3lcLf5N5Gx9Rq58JzU9KIEdKmRzWqyxpNS2BOGAcgH+hTUdglmieHCSU/V0j4S6nSp2/Uu7E/d8agzpXkrfUwn+gFm4YjP/lFs8uoGEKvrpNno1mAnHHjh3JLYeGhqr/swCKVqtlATkCoD1qTQ61sswAilbrYoDJAWgPvimgYUpNIMYSIUQzgXjp0qXkljdv3hT2EA0n9w3ZZgwqryfrRBflJn1lqpVA7IWMNhiz6RW10Lmjme7WUI3cEvbPGgfhd42/9rBeCtxJmRymn47Zr4vjFdedSm6Yu9cY1HqV+v4KZ/kQf8eYP+XWdXISMCKu6aX6Dsuv0uDB2HumVsioNzm8HfGyOGbsMl7et9VC+fmDiPihUfubauFZY9AP1MKfV4/AJ9QRw7gg3GQM+rRa6Ezae3Ok+f63/sWTgfWv4ARipE7IY8eO7d69u0rt2NjY8ePHF/zHPXv2JDceHh4Wdg9AiQgZAUhicgCQVOt8Z3IA2oMEIhqm4ARipD6AT58+ffHixSq1k5OTp06dWpBAnJiYSOYLpqamllpfBeirLD0QW9bBUwkZPWqswixz8h1yI5jIdBB+xhj0De79YnUok8PI19Zqb9ahh9r1YaGQc1hyt9zwFsCVOX3rfmBM2m/Ki+eqI26I0Bqk/uqJ+NUT6qiGLepLdKi0E/xI7h2oxfmiWdxbI8sSzNevtwdjJz0Q0TRlJxDnzc7O/uR/1H2EecF/GR8f76Rs3rx51fYVwPpGyAhAEpMDgCQSiACSSCCiYRryA+LGjb0opbmIyvnz5zek3LhxY9X2FcD6poSMALQAkwOAJJZoBwC0QdmPMM+TE4gLHmG+//77k/mCLVu2RES8Oxxz6moqWZ4fAVBfp9MZHBysuHG32631m0KC/IDtrDHokRxPBDur2TtLD80YtS3xr9T39KeNQafUQufo9XQ6nerne7fbveuuu1hEpRLr2Wfn6bD+L6LS7wEjvEVU5FWznEd3zhu1f6wWppdRrODuiF/7k/O9mlW4cnC053HXsjjvi3yOOw1tHmzNgeQ0ZAAapyF3wFYrgXju3LnkltPT09qOASgOISMASUwOAJKYHAAk0QMRDdOQBOI8M4G4b9++5JYjIyMREQ+QY8EdrqmfB8WFSlpGSSCePxy33xLHK+4WrhwGzLL6SkTc4tJtJb9c2kGYiZJAbJU8i6gUdfT+TI5Bi3sI5klj0r5bLdytFg5FRHQ6nfk0w4oyJxBl8nVveJe+xOtWJJ/jznJ8qGZubo7fENEkxVzaVrwKNxOIFy5cSG45M8NPh0BbkCMAkMTkACCJHogAkvj1EA1TTAKx4oJlZgJx165dyS03bdoUEXHF6IFYXPcE+ZaU3NYqIvaX9ir138vq+/IYr21VSgLxrHHk71cLnfvGxc1IcuPFKC1HgHVMSSCOfG1NdwmFof1cFc4nVI0gwWoqqQeizEkRyg1SI2KvWljWEz+vGS+R3HL0Q33MmFB3+BHjfXFisDK5d+3AYBy+RQIRDVPSHbAqn7VmAvHKlSvJLW/eVH83BFCaWtEArgmA9iBkBCCJyQEA0AbFJBAjIrk+8gJmAnH79u3JLYeGhiIidrTpQebiAkr9l+XGJkHCtTc3V+NF7m38c2+u1d4sI9dJmqWVISlCrAO1Joc29kAE2qoVCURHngapRblt1Mo9EH/XuAu+RS3M1UxTHndIHZGMAZqosEvbFT9uzQTitWvXklvOzs5W/2cBFK1WqJAEItAeTA4AkkggAgDaoKQEYlQIIZoJxF6vw0X4pO+Ts+rXLZonrlty67p8ibNaIaOcct3ClckLKUaBq4iiiYqZHLBucZ3TUMqzC99/NiaeE8c7LdZFRHxcLazaHTplm1H72RwH/6vqqfqwurePGn+m3BT7CX3M8h5Wky99naMXaJzyfhfbuHG5Hz3NBOJSScOKS7gAaAByQwCSmBwAJDE5AADaoLAEYqz0NLGZQFwqadi7LMiyCnOrFlot6wa7vKLcTmPQq2rhPcagzsra9xq1MvmsGX4mtj2vFH7ncEy9JQ76uFhncSaWy2qh0wKprLilvDSh019SHtQZN0uqNF+UlQTiWinrBHfI1zlnjJfIWfpZXhn2SI44VWS79FUmh/uMxXOd4Ji8pOy4Mah85RAR31WPB+dYOGjUauR4ckTcUAvf18eMETn2WNrV4EvqoAOD8dgtsRZYr8pLIMaynRDNBCIA8BsBAAAAAAB3Ki+BGMt2QjQTiLdvp1fA6v2gkGUV5uJShO0h94Jx3lMnvdge3lmjPIiUZRXmXIGULAehnJiIiAdXbS+qyrJQdZZBs/SmzNcQk6cU10pZKcIsnEnb4QQJZQVe+iqTw3TEj9XxnEd2+v+ZGF4XuQNqodyGO3IchGeNWvkb6gqLCyxrq1Ery/JhIf+lXDKgiYpMIMbSzxqbCcSRkZHkliuu/gygMWr1PCWuCLSHsk4CgBbgfAcAtEGRCcSI6Ha7AwMDiz+tzQTi9evXk1su33ixmeQeE+3JEQzl3oG+yZV0y6TWquu90MH3D8dNtQeifCC9pxZGRMd4T+V2Ls7N6mmj9t+of+wvlnf0Yk3VChn1Np5+Oma/Lo73XbEuIuKn1MIsk3Z7eiBm4bQNvagWOivnZumBKA+64WBsP6NMDm8Ziyk/YLxEclrtNX1Mq5v2L6vv6YNFdf902kTKjc4/NAY9rBY6E76zw3erhfKFOglENFGpCcRY4jreTCCOjo4mtxwclJ9WBVAYEogAkkggAkhicgAAtEGpCcRYIoRoJhCvXLmS3PLWrfatoJTllr68AFlZyzcXxwmk6Asi62OaR2+tlgW9uOKtCHWFdv2OqLzoXngtkN5RC53Wdd8ybuNm6feEFcnLGn7aOJDkllhbnoq9L9SKJ9faePXJoV1nJVD5s9iZtF81dvhhubLvVx1yHiqMpX7DSDY568I7T3i8ro4r579GIh6X4skDmYIcL6qFzoVZli9SzgM06WfS1tJuo1bO5aWb/1ezSS10Jnwnniz7I7XwrogH6J6Mpik4gRipEOKxY8d27640AY+NjR0/fnzBf9yzZ09y4+Fh5zMTQEmWWaZpsVpxRQBFY3IAkFTrfGdyANqDxDEapuAEYqQ+gE+fPn3xYqV+LZOTk6dOnVqQQJyYSK/0OTMzs9TTzVhNZQUJ5Vv6WfIdzi27S3ppngUcPUoC0SG/vM7I3zJq5ciksx7iG3qp3oNmvzEoVuQECWVOS6z+Tw4fN2qdtTVlcvhrrzGoniLMQX6J5LBPeOlvOUjorAvvXLE8pI4rvzVDETXP997GlyLOiGNaDVLlBspOMvSPjdpPqW/N+8agP1QLP6MWOmFA+Qu9E0+W+1o6J7jcwTMiPlALazRISyCBiIYpO4E4b36Rk7qPMC/4L+Pj48ktSSAC7UHICEASkwOAJBKIAJJIIKJhyk4gztu4sfeHHD169OTJkxWrFi+iMjExkcwXTE1NjY6OxrnhmFP7nJWVrUMV8q/K8hKBDmfQnau3GyVQQka3jf4+j6iFzn2NR3MchN807sH+qjHuNaMWuIMyOYx8TR9vm16KdUrOx+XiBAllWS6TvLdGSSB+0bgAcMLUC7/9VJZldWzHAaPWWbtc80XjJZK7Pf47fUw9MulcvjoPBMqz2T9RX967In6dBCKahgTiR4yPj3dSNm92Et4ASkLICEASkwOAJBKIAJJIIKJhGvID4p0JxOpVSyUQF5uakts8AChMv9ucASgEkwOApJKWaAcAQNWQR5jlBOKCRVR+kkBcvGUvgbjPadyagxO/d1put8RptVDur1wi+YGXLE+7REREp9MZHBysuHG3292wYUNMRlxXx9um/qWPqiNGxDVjcpB3+EnjPXWWHur/M/jycjHeEh+FeUl9lZzVV+SPxZGnYs8LnU6n+m+I3W73rrvuiumnY3bh4w5VXRbrIjJ9iMvLUFSdcVMOOX+pPLH0faUO5wFbedAwHhh0FtxwXFAL5a9EQwfj4Jne+V5N78ohF/nC7AfGoM4H8TfUHb5iDCo/XS47ZZyn8iJLzvtyXi10Vs3K0lRB3mGeXUYTNeQO2ComEJNbzsyU9tMhABUhIwBJTA4AkpgcACTRAxEN05AE4jw/gZjcstRVmEkRrqm7cww6oX4IOVkAawGW8g5CJYF4l3E7Ro5EnVJHjIhfz/G+/APjEuqvFHUgtSpIKHOChDLvY1FJILZqEZXiVgiRg4QyZwUAWXnviyHTsm+dTmc+zbCi3pXDcKZzXF5Y7JPGoC8bFwDyDsu5vIhIR0oqOKQWOqvbvaK+vA/oY8bDrZlY7lMLByIi5ubm+A0RTVLMHbCKN+vMBOKFC+knH0ggAu1BjgBAEpMDgCR6IAJI4tdDNEwxCcSKC5aZCcSdO9M3LoeGcrVyKZDcWiVKS6tNq4VyijAibqqFTtMQp/3c/qLe04iov5bihg0b4hMRt9Xx5CWanBRhllY7TorwNWOH31AL/0J5R29J5Pd0szGol0Cs1bmsVk80tEWWBl6tkqnzstID8Z4Tcc8JZ1CRPA06V4OPGS/vBnVcZwIuK173iLq3TkdsmTPoRWNcuWHuOXXEgYgHSCCiaUq6tK1y1W4mEK9evZrc8vZt+bcBAIWp9THPNQHQHkwOAJJIIAIA2qCYBGJEJNdHXsBMIG7dujW5ZfW2Js0h3x0qK0Xo+L5a6NyGzUJe0zAiNpd3IM3N1Ri6t/HeN9dqb9aI02rHySDIjhg7fGT1dgOryHlPM6k1ObRRliWGW8JJYRd4rmXwPfUVHj4YnzqjXDlMPBuTz4mDZnlPcz1T8gdq4b3GoHv6fvnqPMIld2wc08fUO3hucw6kHJegX2QKBf5UYXfAVgwhmgnE6en0U6lVfrsE0AyEjAAkcb4DSOLKAQDQBoUF61b8Ic9MIG7alG7u1cZnDay7Q+3wRO4d6JvPtOtgUEJGZw/HrbfE8XaLdXFSLYyIzxm1WTIIbxhft1gTGauEBOIKCBKuHVKEFcn5L2/5ZiWBOH4ixnP0QCzOs+04+J0nb+Tu6t/Qx4y/bNSW5ffUl3dgMJ68taq7AuRX3u9iyz9NbCYQl1o8ge8MAAAAAAAAaKfCEogRMTs7u8z/ayYQV/gB8cpwzKmL4GbpiNGedoRZvKsWThvvqdzPxVn58feNHf5ceQeh8mzRsDGbvnCoiwEAACAASURBVK0WfkwtjIj/z6h9RD0enA8cef1xVPGi+p4+Xt4J7lAmh+mnY/br4niXxbqIiOtq4agx6A21cK8xaJ52WuqgclDI+RB/x/gQTz+ZU8GQPqZlSi1MNzGqYOhgHDijFF59Nm6oPRCd4yHTQtW6f6ju8GeMQeUVe2Xy5BARd6uFj+tjxlfVHf6y8dq+opfql69yTvOuiCfVWmC9Ki+BGMt2QjQTiEvFG9v4CDPQVsqDSABagPMdAAAArVVeAjGW7YRoJhBv3kynXHrJxB0z1f9xNN+jaqG8VloYgZShdqUIHUor9F3GKszjeqnu004Hd/LUjVNWkNCJUx2w/tJ+L33g7O0ZdVedJqfyKszZ2i73fVwnOCbzDvvCyDEur1uuMjnccyLuydEDUf48vWZMgM45/tt9D/w6tfI5nmVy+H+Ml+g3c+zwkzkG3a2+SgSQ0ESlHtdLRQLNBOLIyEhyyxVXfwbQGEu1MkgikQS0B/FkAEmc7wCANigygRgR3W53YGBg8ae1mUD88MMPk1su33hxbZG7WbfkMOAjbXpPi2u1U/OGQS90cPpwzKirMH9CrLP6o20zaodzvKdOjiDLXX2snXxxqlr9TFah+YmTtWyRHHlqmTyVya39wuvmlqVpoxNXl18oedANB2P7GeXZhfefjR+rPRD736Ev8iWFX1DfmqM5QtxZyOfpzxiDFneFL0dov6COOBDR/2cXgDVWagIxljgbzQTijh07klsODeXqBQ2g35ZpkrAYoQOgPWpNDrWyzACKVutigMkBaA++KaBhSk0gxhIhRDOBeOnSpeSWvd6I3x2OrroU6GeZOxpHXjXyrHEnyulOJXPCXwX+9l4rgdgLGX3S6IEoc1KEDvme8wwpQpRNmRxGvqaPl+sclz2U5TwtanIobirLssNOQOlW3zOeGyNqhox6k8OGIq+RMvihWviacdVxpO9Hfpbg7ag+ZtwyamWvGq/Sw+p7KsdR74o4TAIRTVNwAjFSn9bHjh3bvXt3ldqxsbHjx48v+I979uxJbjw8PCzsHoASETICkMTkACCp1vnO5AC0BwlENEzBCcRIfQCfPn364sWLVWonJydPnTq1IIF47ty55MbT09Ojo6PxGVZhxh0qHWgpxXUjKi4x4dm4scbE2MsR3DgcXbUHYrblR1U0ZkVbKQlEAP2U6YpFmRzuPRH35liFuThyn77+pwgdzsXVztXbjXVOThE65B8A7oqgByIapyFXt/OLnNR9hHnBf9m3b19yy6VWZwbQPLUWTSJHALQHCUQASUwOAJJIIKJhyk4gzptPDB09evTkyZMVqxYvonL+/PnkLcQbN26Mjo7GHw7HnNoD8TF17nA6Yjj3suSVqpyYptxH7gFjUPlm9QV1xGnjPdVP2Uy3v+T+PoWswtzLEXw74ro63lfUQvkkDS/2KI/rDHrK+GNvqIWf7/tB+KLxZz7OFeqaI4EIIKnfS7S3ivwdqixZGo47y7tvVguLe5Dls2oh0UM0UUM+wFYrgXj//fd3UrZs2bJq+wpgfSNHACCJyQFAEj0QAQBt0JAfEO9MIFavWpxAnJiY2JAyNeXcoAFQEkJGAJKYHAAkkUAEALRBQx5hnlc3gbhgEZXx8fFkvmDz5s0RET+bYxGVXDFv+WHDGSOu3f8HBh0/VgtrdNhbZFAtdEK0l43aAvs6dzqdwcGqL3S3292wYUMMR9RIJq0DzuPP8kS4TR8z7jNqC8JjyOtbp9Op/htit9t1fyZ4xzhPD6jH0llj0P3qoFZDBr3UoP6lZ9S/1Fl+7XXj5X1IHdc5ep33VL5slo/8jQdj/Eyt87135fD9Z2PiOXHQo8bx8C/Vv9R5HnO/UStfhf6xMeghtfDn1bdG/loREe+ohV8wBv3XauF/YBxJ39NL4wm18CW18K6I+9VaYL0q5g5YxU9lM4F44UK6rd3MDOsvA21ByAhAEpMDgCQSiACSWIUZDVNMArFiuxAzgbhr167klps2bar+z64juRZgaYkv5hhU/inbeUM3GgeSvEZNPkoCcV/ELXW8LGuSOJyUscw5kJzG5MAd+p1AlFOEDjlF6Mg1m/WfEySUySlCR5aj1+Ed+UoCcSzTGgt/rrS3Rv46s88YtMbdonVAztb9kTHox9VCZ8L/6RznjPwU10BExNzcHL8hoklKugNW5ardTCBeuXIlueXNm+riywBKU+s7P9cEQHsQMgKQxOQAAGiDYhKIUW31QzOBuH379uSWQ0ND1f/ZdSRLirA90cV31cIHVnMv+qHAFKFjbq7G39vb+M2I6+p4ciDFiRjLeckwjgdnhx1vqYXjq7kXaIBak8MqJBCB7OTOgFmirPkoCcTdJ2L3iTXdq3VE7v4ZxmVSWW24zxq1csr4Hxvvy0G10Gl6m+V5FPmTnIwBmqiwS9sVQ4hmAvHq1avJLW/fvl39nwVQtFqhQhKIQHswOQBIIoEIAGiDkhKIUSGEaCYQe6stL9L74fLd4ZhTn2UurhcMVrRVLfzQGDRLFvYV42vwI+Ud+bVCRj2Dxlvzz9WX9zV1xIh4zKj9hrrD6UWqqjlj1H7WqNXIy4+mu2hU46zgLC/KKQcQIqJSZ+OUI8ZfekpuOfpUHHxBmRymn47Zr6uDljZ/yqv97jUGLetV+qfqS/QzxqBO40X5i4ITOX9ZL4331EL5L737YPz6GeXZhX/+bLykrsL8jFgXEfG2WuikKZx43T05rjrkTyj5uvd1dcSI+IH6Ep0zBt2hFr5qDOp0tZabNr6hFt4V8SW1FlivyrsDtnHjcp/wZgJxdnY2uWXFJVwANAC5IQBJTA4AkpgcAABtUFgCMZb+je8nzATiUs8UcFmABLm1ygfGoFnaEZbVRCaM4MPwM7HteaVwe0Q6vlzBNbVwVC2MiJU7yq5B7b3GoM6d+YLmbydF6NitFjqru75U0BvToyQQR762BjuyXmVZ7bcs96mFWZZvjkxXHZ8wJgc5qnlKLdwSoU0OcxHyq+s8yyIP6lw5OMeR3F39R8aBNKOXioaNWvmtkZ+mcjixHKd2Wi38i8agQOOUl0CMZTshmglEAFC+BgAAAAAA0FzlJRBj2U6IZgJxqUeVez8oPND/u1FYx+S+S9tWdTf6oLhVmL2lwJXE8afedEYU1bhdUj6n31P/Fdf0Nkvy8dM5Bn2075MDcKfPlzY5ZJFlCh3v+4hfORFfac0qzFk8WNTpdsSolRso320M+pBa6LRHd5qryk/8eF8rgIYpMoEYSz9rbCYQh4bS6yCsuPozgMao1fOUuCLQHso6CQAAAEAjFJlAjIhutzswMLD46txMIF6/fj255fKNFwE0yVL3J5JIJAHtUet8Z3IA2oPJAa4po3a7WniPMWiWGJLTKfJHq7YXQJuVmkCMJT59zQTi6Gh6VYLBwcHq/yyAopFABJBEAhFAEpMDAKANSk0gxhIhRDOBODk5mdzy9u3bwh4CKFGtlgXkCID2qBVPrrUxgKKRQITLSSCmn6CrwOmBuMeolTnrEfS/z2lEcL6jccq+ul18Qh47dmz37t1VasfGxo4fP77gP+7YsSO58VK9EQE0zzLLNC1GjgBoj1qTQ60sM4Ci1boYYHIA2oNvCmiYghOIkfoAPn369MWLF6vUTk5Onjp1akEC8cKFC8mNb968qe3hKvhd467Fzxjj3lILnW4aZa1ydVZ9azav6m70gXwwRIT827tzMLymvjVjz8T487USiDlDRhPG5OCsrC2P6wx6xvhjDxU1sWAdK2ZyANBftUJGTA5I+HWuVSoo66tiRJBAROM05ANsfpGTuo8wL/gv4+PpcPPwsNOyFUBJCBkBSGJyAJBU63xncgDagwQiGqbsBOK8jRt7f8jRo0dPnjxZsWrxIioTExPJfMHU1NRS66usuV9p06QjB8ccR9RXeH+b3pqyyO9pRBQUMnICfcWNS4oQ60AxkwOA/lIapJ57Nn70nDjeo8Zn4t9WL7ad51H+6xwf4rke1ADuQAIRDdOQq9tVTCB2UjZvLu6hUwAiQkYAkpgcACSRQASQRAIRDdOQHxDvTCBWr1qcQDx37txdKdevy6tbASgMISMASUwOAJKYHAAkkUBEwzTkEWY5gbhgEZV9+/Yl7wpu3brV2T1U5T15CqyKTqczODhYceNut1vrawOAcnU6nerne7fb5WcCoBjvqF/yBw/G3jOdTmc+zbCi3pXDvhOx74Q4qLOw2N9ozcV2WY8h/0PjPf2mWviEPmbMqoULAzx1fGDUvqMW/pI85GBsuzU3N8dviGiShlzarlYCcWJiIrnlzMyMtmMAikOOAEASkwOAJCYHAEn8eoiGaUgCcZ6ZQFyPqzDLd0QjYpsx7s4cd+0uq39slr19Rd3baWNQOeuW/m28GueD74BauMcY9JJaOPZMjD+vJBA/OBydt9RRVc60tK2o2/KmgiaWN4yT7cE2vaeZkEAEGuuANYUqCUQHC4uttf5fOfy28Z7+tl5aGPlrRUQcVt9T75qZBCIapphL24pX4WYC8cKFC8ktSSAC7UGOAEASkwOAJGUVZgAtwK+HaJhiEogVFywzE4i7du1Kbrlp06aIiCvDMXez+r//EfL9qPNiXUTE/UbtLXWycxqOZAkSyi6qhZuMQeXeH06g70Oj9rZaeNUYVF70aHOE1gPxhvGX7lQLW5UidPR/YvmmOn86zX1GjCvU31ULP6ePqU+hO4xB5QD4PU/Fz7xAAnGtXHMetmAmxB1eVY+lh60Dqdb5TvfkApT1lUTWquceMn1YkEBEw5R0aVvls9ZMIH7wQfrb261bt6r/swCKVus7P9cEQHswOQBIIoEIAGiDYhKIEdHpdFbcxkwgLrXacq+tyY4cDzIfzjBmhNdeTVZQq7IwgoRO/44jauF3jUFHjdp9aqFzBMr39bdFRMzN1TicehvvfVMdEk30ZGm35f967h0oRK3JATWQIsRq8YKEMuXKAciuuBQhgNwKuwO2YgjRTCBOT6efbqry2yWAZqiVGyJkBLQH5zuAJK4cAABtUFICMSr8kGcmEHu9DhfJ+azBlFH7Y6P2AaNWVlbDkXTDzAqcn6PfVQudxotOxzH56X/nyH/fqN1JNGBdokUa1gEmBwBJJBABAG1QWAIx5p8mXoKZQJydnU1uWXEJFwANQDQAQBKTA4AkJgcAQBsUlkCMpX/j+wkzgbiCPzJWYX4kx83GLI1g5D6GUVoC8R21cMQYVE4vOqE8521Z7nxdlrNw0T1qofzW3Dgc3bfE2svqoNvUwvDONfkcv6aPaUVo3+37opzfUkd8T6yL8GLjr6uFnzQG/YFauNcYVL5tes9T8ckaFxgA8jijTr+HrEtQQoXI6ax62G82Bi3rWxuAVVJeAjGW7YRoJhCXijeyXBrQHjyIBCCJ8x0AAACtVV4CMZbthGgmEG/eTAcMe48wfyrHKswOJwwor4HbnvtRH1MLnePotlq43xhUThGGkelzln6Wb6gOR2it0LcYqzA7QcIs5MnhR8agO41ap5+m5vOlTYOfyTHoEzkG9fCUIrDeeUFCGZMDctpf2lUHgGKVGqxbKhJoJhBHRtK/dqy4+jOAxqjV85REEtAexJMBJHG+AwDaoMgEYkR0u92BgYHFn9ZmAvH69evJLZdvvFiJHAZ0VuzNoj09EOWzZ6sxaPoIrcB5aQeNWrkdocM7kGq1LFiF0IG8vrATZXVeInlR422ZVlLuf8bzDfUvfdsY9GeM2u+rhc4S7XIy1Dnn5Gjz1qfiwAtKPBnI7h3jUJT7z45nuqKbUP9Yb4eVyeHqs3HjOXE8Z2/lC/WyrtIBAGug1ARiLPFRbSYQt2/fntxyaGio+j8LoGgkEAEkMTkASKp1vteaSQAAWD9KTSDGEiFEM4F46dKl5Ja93ohvG6swyz1Z5OXkosDeamW5ohY674ucQLxoDLrbqJUTVU6y6XX1rNn9TBx+vlbLglVYYUnP1pWWb8oVSCnIr2R6ic6px1L6pls1ny7veOj35ACsigPlnWu6TB80tRKIvcnhnhNxz4m12qFlECQE+ojHEdAwZV/dLj4hjx07tnt3pV87xsbGjh8/vuA/7tmzJ7nx8LC8agCAwiyzTNNi5AiA9mByAJBU63xncgDag8cR0DAFJxAj9QF8+vTpixcrRa0mJydPnTq1IIE4MTGR3HhmZmZ0dDTuMRrJyQ1HPlvapNOe2KPcS+tR4z2VE6lOM01nDaExtdBZSHGD+iptiygoZOS0BcSaelB9a37XuE39U3ppPKnu8CvGDn9brZWXWY+IR6yzppjJAc3jPI+SaWHiVql1vjM5AO1BAhEN05APsPlFTuo+wrzgv4yPjye3JIEItAchIwBJTA4AkkggAkgigYiGKTuBOG/jxt4fcvTo0ZMnT1asWryIynvvvZe8K3j9+vXR0dG4bCQQH1Ir5dU8I+JevTR+pBaOGIPKx2OWljc/UAtvGO+p3APxe/qYcdio/Zha+ILxKsmDzkbcMZ9UQY4AqylXD0SZF+grDglEZEOKcH1jcoBLflgt6Gu5rpFARMM05ANstRKIe/fu7aZs3bp11fYVwPo2P59UQY4AaA8SiACSmBwAJJFARMM05AfEOxOI1asWJxAnJiY2pExNTa3avgJY38gRAEhicgCQRA9EAEAbNOQRZjmBuGARlfHx8eQtxM2bN0dE/PSMvouvq+nlm/qY+mPIETGkFu43brPIr1K6d+UaSy/ZXYGzJslttdBZdsA5CM+qhfcbg95QC0ciIjqdzuDgYMWKbrdb6zcFAOXqdDrVz/dut8vPBEBL1DrfuXJAAo8hAyhBQy5tVzGBmNxyZsb46RBAUQgZAUhicgCQxOQAIIkeiGiYhiQQ5/kJxOSWvVWYzw3HnJrFkhdRydVS950ck93ODGPq5A428hIfYYQBf3blTZa0xaiVc5qTxqA1OhF9VDeioARicf225YhxGFNoFhPqX5q+h1XN40W9RBHxmvoqHcn2l5JABJDU6XSqr8BGAhFoj7m5OX5DRJMUc2lb8SrcTCC+//77yS1JIALtUes7P9cEQHvQ5gxAEpMDAKANikkgVlywzEwgbt++Pbnl0NBQRMQ+42fEs+qvDE7rOseBHBGPstp/3KsW3jIGHVULf2wMKgf6wphjnDiq3MFzOKLmcmm9jc8ejltviYPK57j8Z0ZEGL97Oik52TVjhy+rhfI0OK4WOn+mE/CUG+Y+aUza8idqloD8yFOx54VakwMJRKA96IEIAGiDki5tq3zWmgnEq1evJre8fVteugJAYWqFCkkgAu3B5AAgiQQiAKANikkgRkRyfeQFzATi1q1bk1tWb2uyJHltYqfNmUMOwmwzAilvqIM+mCO6KLcjvG4MOqwW/sAY9LBRK6fk3jEGlXOaoxHbpATi/jfVIQskL3qeZbX0iNiWaVxBlqksl0+X98fWmhwAtIdy5QAAQGkKuwO2YgjRTCBOT08nt6zy2yWAZiBkBCCJ8x1AElcOAIA2KCmBGBV+yDMTiEstvZrzkz5XW0AnSCgrK33zaFF7+3DuHairrCW5WyVLPLks/6/6EqXX8armgFF7Ri3cZQx6v1p4xRhUTo7veip+oV4PRKAJXlJnswIjxg4SiACANigsgRgrPU1sJhABgCt7AAAAAADuVFgCMSJmZ2eX+X/NBOJSaz3zgwISJtTb8vKCpw5n6Wen9rPquSMvXB5Gy9GI0BLHzirMh0qbXtoTJJT9hvoSvWIc9o8Y78tX1XG/bAz6bXXQR/Qx9fTi3RE8eIgWak+QUF7IfuhgHJRT3AAAlKS8BGIs2wnRTCAuFW9kuTSgPXgQCUAS5zsAAABaq7wEYizbCdFMIE5NTdUdcc05qzA7/RNpc7YieZlgZ03Y9DI/FbxqDLrFqJUDO/J60xGxUR108zMx9rzSCn3YmE0519aaHBYeV1/hF9URl0vYr0T+M8NIGX/TGHREL9XdVgs7ESQQgQZ7qH/PLjCTICHXNz4AqKPUYN1SkUAzgTg6OprccqnFVQA0z1KtDJJIJAHtQTwZQBKTAwCgDYpMIEZEt9sdGBhY/AFsJhAnJyeTW96+fTsi4spwzKkrOJ4T62JMLYwC17GVb745TfrkkNGD6ojpnGs1d6uFv2YM6tzYlN9TJ4HoRfOWaZKwWC9HsOtNfTz5JXISZ/LRG0b29roxqGOo7yOOy4WZvlXKO1wcZ63qmv1M2tj8RO4i54W/gOxIIMJ11aiVv/E5V5K5rlhKw/mOhin46jZ5NpoJxB07diS3HBrq/xdQAHnUallAjgBoj1qTQ60sM4Ci1boYYHIA2oNvCmiYUhOIsUQI0UwgXrp0KbnlzZs3IyK+HiF/4h9UC19SCyPiB8Ydj59SC/+1s3iuWrhXH1N3Ui1UY6wRxm/+241BZ4z39B61sEYKcJHd6g6PPhN7nq+VQOyFjN42VmFON06owPoCYlzNfKC+vHv0Ma0b3c6K3hpuyzeUMjm0ihwkPGOcpMUtZN8Sxb2n76g7PHgw9p6pFTIqdXKQWzYHXZsrcA57Of1dXI+uAg9CEohomDI/wP7E4hPy2LFju3fvrlI7NjZ2/PjxBf9xz570F9zhYedxSgAlIWQEIInJAUBSrfOdyQFoDxKIaJiCE4iR+gA+ffr0xYsXq9ROTk6eOnVqQQJxYmIimS+YmpoaHR2N35qRd1X3RIYxLYdy70Df/Ed8HjSTEjI6aPRAlFMPlaa6Jdxl3A6VF6X/nj5mXDJ2uEZnC2A5JBDXCinC5inuPT1g7XArGqQ6AS567a0pOejiHfYZFBhlJYGIhinzA2yR2dnZn/yPuo8wL/gv4+PjnZTNmzev2r4CWN8IGQFIYnIAkEQCEUASCUQ0TEN+QNy4sRelNBdROX/+/IaUGzdurNq+AljfCBkBSGJyAJDUigQiAKD1yn6EeZ6cQFzwCPP999+fzBds2bIlIuLKcMw5619I/q1R+7hRKz+l6IThv6tmvD+T496O/DjGrDHo/tbcxcrXJrnT6QwOVm0r3e12N2zYEK8ejhl1EZXH1b3tZHom4oBa+ITxvnyjqH788uTAg1rrW6fTqf4bYrfb5WcCoCVqne+9K4erz8aN58TxivuwKG6Hy7Ip9w4AaI2GXNquVgLx3LlzyS2np6e1HQNQHEJGAJKYHAAkMTkASKIHIhqmIQnEeWYCcd++fcktR0ZGIiKuRcj3z2pcV3yU033R+dnztFoop5PC+2P7L8vd1DPqh9A9xqA7jb9U3uF8/deVBOLHI+SORnLW0jlfnKP3FXWHd+pjRtU3ZH0gatFQJBABJHU6nfk0w4p6Vw73nIh7TqzpXqEtuOpYx+bm5vgNEU1SzKVtxatwM4F44cKF5JYzMznWXwaQAzkCAElMDgCS6IEIIIlfD9EwxSQQKy5YZiYQd+3aldxy06ZNERE/NhKII2qh08fQ8ahaeNmYJUfVQrnjWOS4a+d095Nzec774sgXJJQpCcQLEbfU8Zxcns44Hh5R31PnPP2UXhrfUsf9fN//0lfFuoiIh43aCbXQOb/lTru7jUGvq4Vbn4oDL/Q7gfi6cco8VN7ci7WS5UB60RhUbg2cj9IDEUALkEBEw5R0B6zKZ62ZQLxy5Upyy5s3+752CoBMan3n55oAaA9CRgCSmBwAAG1QTAIxIpLrIy9gJhC3b9+e3HJoaCgi4mNe2kLjtJ9zQmdTauEb+phWyKj/ylpo1TmQygp42ubmauxzb+ODb67V3jRJroPh83mGVWw1ap2Xd9wYt01qTQ69RNL00zH7dXE8UoTN85r6eeqssuocSC+pO+ykCJ2rDvkq9AG1cPBg7D1DAhE5yd/4nG8HAFqpsDtgK37cmgnEa9euJbecnZ2t/s8CKFqtUCEJRKA9mBwAJJFABAC0QUkJxKgQQjQTiL1eh4v0PulfMRZalXsgOp1r5JaCEfFxtdC5KCorrSbvrZMMzXKr0Hlf5BzB3fqYsc16lWqFjHJ61TiQ7jXGlfvljRmDyuvCR8Sf7/sbKp8yToNUrD1lchj52hrsCIp1pJDPl3mfLu2qI1OeWnl2AciOTrsAairvDtjGjcv96GkmEJdKGlZcwgVAA5AbApDE5AAgickBANAGhSUQY6Wnic0E4lLPFPQuC/YYPRC3qYWX1MIwFkuNiDPqlZBzP6qsroJn1b1Nd9qsJkuXE6cb0ZBeqpN3ePMzMfa8Uvj24bj1ljjoXrFOX082jEx0RPy0WugkQztFfTf7qrq3PzYGfdt4iabVQrlrWES8qxZ+0hhUfoVHn4qHXiA3BFT1sjEjPVbeicbkgJzki/zhoi6uAKwD5SUQY9lOiGYCEQD4GgAAAAAAwJ3KSyDGsp0QzQTi7du3k1v2flDYZiQQV15Begk71MLweu3dY4wr+5FamKXljRMk7D/nYHBcVQsPGb/iyYHfiNAeRJozGqT+G7Vwn1oYETeN2hNq4ZeMg9DpIzejjiuHuL/cmt+g3zHe0yy91Tw8pbguOW9KeQehwjlPD6gvUYEpQgeTA4o0Y9R6F9sAClVkAjGWftbYTCCOjKSf61tx9WcAjVGr5ylxRaA9WCcBQBLnOwCgDYpMIEZEt9sdGBhY/GltJhCvX083Fes1Xtzn3KbJobjVfh8u6vJLbugmN0+MiP05XiK5IWaZlro/kdQLHdwdsVx31mV9qBY6PRAfN2r/hVo4ZQz6y0btJqMWy5PTSWWqFTIikdQv7ToIFS07T7NgcliPnBbeWbqr91+Wr3sASlZqAjGW+PQ1E4ijo6PJLQcHB6v/swCKRgIRQBIJRABJTA4AgDYoNYEYS4QQzQTilStXklveunUrIuLccMypncOyBMe4rbSm5IBnloPBuQ37gTGuvLrrIWNQT62WBbXiimm/qBZeNgZ9x6j9L9TC7xuD3jBqjzATYnXUOt9XYXIAUAglgfj+s/Hj58TxnD7R7dGSFGFEfFO9yH+yNS9RPiSO0TBlvqh+eAAAIABJREFUX90uPiGPHTu2e/fuKrVjY2PHjx9f8B/37NmT3Hh4eFjYPQAlWmaZpsVqxRUBFI3JAUBSrfOdyQFoDxLHaJiCE4iR+gA+ffr0xYsXq9ROTk6eOnVqQQJxYmIiufHMzMzo6GhcMjrt7FcLXzfuWjyUY8IqrvGi7Idq4bDxElU6ulNe18e0VvuV16rO17lGSSDuetMZUZRl8XGH03jRcU09luQ+p2iofseTARRCiSffdyLuO7FWO4RWeTD3DmBpJBDRMA25uu0tclL/EeYF/2V8PP2NnAQi0B6EjAAkMTkASCKBCCCJBCIapuwE4ryNG3t/yNGjR0+ePFmxavEiKhMTE8l8wdTU1OjoaPyZHKswZ0kROspKEToezfGXblML87UULI4SMvrW4Zh6SxxPXqLpbrUwIh4zjt7vqLdSR/Qx4xFjh+V1ruXTTc7PXlNHjIgHc8xI7xj31QtcGZYE4lqRY8JRWlL4bFHdk1tFfms2HozxMzRIRU7t+fJVIBKIaJiGfICtYgKxk7J58+ZV21cA6xshIwBJTA4AkkggAkgigYiGacgPiHcmEKtXLZVAXGxqamrV9hXA+kbICEASkwOAJBKIAIA2aMgjzHICccEiKj9JIC7eMmcC0XlA7JYx7r1qoZOif1X9Yx8uarkYp6PmZbWwRm5mEefwn1UL8z2u1el0BgerPlfc7XY3bNgQnzcWUfmWeiDd1Me0HhiUx/054z39x8YO/1bfj6UX1ULnsfQR4yW6pBbu0MeMl9Qd/rTxhp6SV9R5Kg6+0Ol0qv+G2O12+ZmgqrIeQ3bwJPK65b01tc733pUDkN3LxpWD0wwHQLEacmm7ignE5JYzMzm6HwLIgZARgCQmBwBJTA4AkuiBiIZpSAJxnp9ATG7ZW4X5fxyOjpq9+ZRYZ6UINxm176uF/8SYJeXfaSeNQb+g3kB7WR3RCQPKqzo4scd/b9RuVws/MN5T+ci/55m4/3klgeg4rBbm6pn9xRyD9j9F6PhKUXsbEftzDHogx6De4lckEOH6uvrR9mdzPN4RET9SC52M/MeN2nvUQrlZ0caDMX6m0+nMpxlWVGoCsT2LHYWxGNp4UX/pJ3LvQAvMzc3xGyKapJhL24pX4WYC8cKFC8ktSSAC7UGOAEASkwOAJHogAkji10M0TDEJxIoLlpkJxJ07dya3HBoaioj4cxHyXSX5lX6wqBtZEfHzuXegbx5TC68agx7KcTxsNT75HirtAK6/lqKbI8gVJMQ69IZxrhX3YVGgWuc7CUQkOEFCWZY+0Q65x3QYraK9yxWlB+Krz8Z7z4njPS7WRRhXHU6a4rTxnn5G3eHfNwb9XGlnjaa4ZGiBSCCiYUq6tK1y1W4mEK9eTf+0c/v27er/LICi1fqY55oAaA8mBwBJJBABAG1QTAIxIpLrIy9gJhC3bt2a3LLX1uR7Rve6P6MWOoEUuXNNRNynFp42BpVX+306xw00+RZuOudazVn1eHCWF9yil+ZZq9q7oTo3V6O81sbACkgRrm+c70A/OMF8p0+fQblyePhEPHxirXZoLTjvi3PpK2tJijC80K6MB2iAVirsDtiKIUQzgTg9PZ3csspvlwCagZARgCTOdwBJXDkAANqgpARiVPghz0wgbtqUXr2196zBMyylUsGh3DvQN1nucjtBwrIGzYeQ0XokZ2+jdQcw1g6TA7DeHchzkvLsAnKSH//6onEoyrFHJ7roXA1+oBY+ygkL/KnCEogx/zTxEswE4lKLJ/BJDwAAAAAAgHYqLIEYEbOzs8v8v2YCcYUfEN8djrmb1f/9j8h0RxRrKMvKZWfUO2/O8s3yoOa4mfBs0XpEihCr4h317B55Kva8oEwO00/H7NfFQeX1ZMNo2exM2q+rL6+3AG5JJtSXaNx4ib5lfKilr4sruKGPGQ8YtdvUwkm1cOhgfOKMUnjx2biqrsIs/5lhHEtOW/YsHX7b8+yCEySUZemB6Lwv+1dvN4AWKy+BGMt2QjQTiEvFG1kuDWgPHkQCkMT5DgAAgNYqL4EYy3ZCNBOIN2+mA4a9ZOID9EBEblkCfQWmCB20Ql+PnJajWcLCWJ+8pwGU833ka/p4Tsgoi/YECWVOkFD2ed6XCsatamVyGDbO8T9QCyPi36mfpwtzF+verdw70Ddy+ttZHZtVmIFWKjVYt1Qk0EwgjoyMJLdccfVnAI2xVCuDJBJJQHsQTwaQxPkOAGiDIhOIEdHtdgcGBhZ/WpsJxA8//DC55fKNF9cvudlTlNa08VXjL324qL8Ua6/WDYOcCcRcJ7gcBnSSgKQIsQ7U6mdC8xOgPZRnF24YjRfvVwsjYkItdAJ9cvfPMHK7Q/qYhfmeWuhcWz1j1LYJzyqhYQq+uk2ejWYCcceOHckth4ba8xEEtN0yTRIWI3QAtEetyaFWlhlA0WpdDDA5AO3BNwU0TKkJxFgihGgmEC9dupTccqneiP1wOVPIKMtqv/L9ySwpwiw5LPkl+pf6mPGkUbtLLZTvkEfEI9bxUCuBmDNklCsmTBhwRVkWWm2PfOH6YiYHAP1VK2TUmxzGT8T4ibXaIURpKyk7/kpr/tICkUBEw5R9dbv4hDx27Nju3bur1I6NjR0/fnzBf9yzZ09y4+HhYWH3AJSIkBGAJCYHAEm1zncmB6A9SCCiYQpOIEbqA/j06dMXL16sUjs5OXnq1KkFCcRz584lN56enh4dHY0rwzGnRhHllapyLXGVZeHdstI3cg7rReNOVPoh+wqcFKHTAlQ/8o1BPRs31pgYezmCbx+OqbfE8W6LdXGvWhjme6oWnjcG3WLUblYL5SVl5cz6N43J4cmi5s+I+Lb6x34221+qJBCnn47Zr4vjkfZtnn+qHvb3GYO2ahXm76qv8GeIJ6N9imuX7zyZl+k7NQlENExDPsDmFzmp+wjzgv+yb9++5JZLrc4MoHlqLZpEjgBoDxKIAJKYHAAkkUBEw5SdQJw3nxg6evToyZMnK1YtXkTl/PnzyVuIN27cGB0djR0zzk6KnDstjlzJx4J8S31r7jEGTWdkK3jHGHSTUTunvkpbjUFldz8Tu55XcgSffXOtdqlJDuXegb6Rb8sfWNXdWOfyBQllyuQw8rW12huU6NfKO+wL4wUJZSzRjiLl6qYt4/spkFtDPsBWK4F4//33d1K2bHEenwNQEnIEAJKYHAAk0QMRANAGDfkB8c4EYvWqxQnEiYmJDSlTU1Ortq8A1jc6GQFIYnIAkEQCEQDQBg15hHle3QTigkVUxsfHk/mCzZvlJvx/4qz6IOf+TFHta+oOt6fp+2G18LIxqNxG/Zox6INGbY28zkc5y/h8Tz16N0REdDqdwcHBihXdbrfWbwoAytXpdKqf791ul58JgJaodb5z5QAAKFQxl7YVP5XNBOKFCxeSW87M5Oh+CCAHQkYAkpgcACSRQASQxCrMaJhiEogV24WYCcRdu3Ylt9y0yVlFIiLyBQll7QkSyuQ+vjtXdTcqeijHoLk8YR29JBDXyhnjEmq3MS6zGVaJkkCcfjpmFzZcrsqJq8ut8V/P8VXnodacpPLLW/VDKeU7Ru20WjhiDOqsuHVRLRxTC0cOxhNnSCACSJqbm+M3RDRJSXfAqnzWmgnEK1euJLe8efNm9X8WQNFqRQO4JgDag5ARgCQmBwBAGxSTQIxqqx+aCcTt27cntxwaGqr+zwIo2txcjSxMrY3bzulrCawDtc73XiJp5Gv6eNv0Ul17woBZZHl5nUAfqmlFAlFuMB0R/8gY9+/kOGteU//YI0yhAJqssDtgK37cmgnEq1evJre8fft29X8WQNFqhQpJIALtweQAIIkEIgCgDUpKIEaFEKKZQFxqteUi7xMCkBAqBJDE5AAgqRXPLjgNpp9Yvd3oj/4HCX/euOf0W2rhS/qY8aFaeMMY9CtG7d9SC39bLbxrMP7mLbUYWKfKuwO2ceNyP3qaCcTZ2dnklhWXcAHQAOSGACQxOQBIYnIAALRBYQnEWPo3vp8wE4hLPVPAZQEAAC1Xam4IwBpTJod3n43Lz4njOYs7ym2Z7jMGfdWo/UvqxDthfH07pxb+nLq3v8fnyxp7NvcOAI1QXgIxln2g2EwgAgC/EQAAAAAAcKfyEoixbCdEM4G41KPKq/CDwmX1JthOfssA+orEMYAkJgcAq+aBE/HAidw70S9Hcgw6bnyHGl+93ajo7xmfL3vUwvf1MeMP1cL/yRj0baP2v1MLf4cv48CfKjKBGEs/a2wmEIeGhpJbsogK0B61ep4SVwTaoxXrJAAAAAApRSYQI6Lb7Q4MDCy+OjcTiNevX09uuXzjxUoIEgKFWOr+RBKJJKA9ap3vTA5AezA5wOUsVL2974UR8bRRK1vyKcQK/ppa+D+oJ+xdg/HfsAozmqbUBGIs8elrJhBHR0eTWw4ODlb/ZwEUjQQigCQSiACSmBwAAG1QagIxlgghmgnEycnJ5Ja3b9+OiPg/h6OjLnv2MbEuptXCiHDueci9P/7YGFRu4fGlHJdi/1a9H+WcdvJv/ncbg6aDudVsVgude4zy6Tb8TGx7vlbLglXIEVxT/4UZY1AnE/2ausNHMn1l+n11hz/Hdzx8RK14cq2NgRWcMT5rDjGVrTkSiHA9apyncqt950pyf46J5dMZxoxfsqo539EwZV/dLj4hjx07tnv37iq1Y2Njx48fX/Afd+zYkdx4qd6IAJpnmWWaFiNHALRHrcmhVpYZQNFqXQwwOQDtwTcFNEzBCcRIfQCfPn364sWLVWonJydPnTq1IIF44cKF5MY3b96MiPhPnds0rfFZo/Y7Rd2i+aRaSEPM9a1WAnEVQkYfqoXO8oLfNs61/i9NGBETxg73P0j4hrq38sEQEY+XNrHIUVY51xwRB6xXqd+TAzCPFOFakzNcGw7G9jO1QkZMDlhlU2phlhRhy5BARMM05ANsfpGTuo8wL/gv4+Ppb8bDw8PajgEoDiEjAElMDgCSap3vTA5Ae5BARMOUnUCct3Fj7w85evToyZMnK1YtXkRlYmIimS+YmpoaHR2NK8Mxp/ZAlF0zarcZtfJPptuMWXKfXprBy2rhkHEnSi79vj5mfNyoTXcFWMvCMPonbnsmdtbrgdjLEZw9HLfeEgfNkiv5bGlXM07csv8eLGpvc8nVE9NAAhFoLO/pEBqkIieChOsYCUQ0TEM+wFYxgdhJ2bzZeWIKQEkIGQFIYnIAkEQCEUASCUQ0TEN+QLwzgVi9anEC8fz58xtSbty4sWr7CmB9I2QEIInJAUASCUQAQBs05BFmOYG4YBGV+++/P5kv2LJli7N7ERHn1MLLxqA/bdTKj047z023ZLHrHxm18kI+O41Brxi1g2qh/BhyRIyphd2IiE6nMzhYdb+73e6GDRti/5vqkAWSO82zfBAK1+l0qv+G2O12+ZkAaIla53vvygEAgNI05NJ2tRKIExMTyS1nZlh/GWgLQkYAkpgcACQxOQBIogciGqYhCcR5ZgJxDVdhfkyN3shhnygw71PWDstLizgPxMvZOjkDGxEHjFrZ3Ubth2rhUISWQGyVss7TLF5T52350I2I/Ubtv1AL/1q7DgYSiACSOp3OfJphRW28cgDaam5ujt8Q0STFXNpWvAo3E4gXLlxIbkkCEWgPcgQAkpgcACTRAxFAEr8eomGKSSBWXLDMTCDu2rUrueWmTZsiInbk+BmRsM+6daiot8ZJJxXHacRJAhG+P1ILDxmDThm1co/UV4zL4hfVwiP6mHoWe9dT8aUXSCCiSO8Y5+kmtdBp9/xwUddXEUEPRABLIIGIhinp0rbKZ62ZQPzggw+SW966dav6PwugaLW+83NNALQHkwOAJBKIAIA2KCaBGBHJ9ZEXMBOIW7duTW7Za2vyzeHo3qz+73/EF9S7qa8b30AeKu8WbkleUN8aJ2Qkr8rtNF4cNWrlOea2MejH1MLhZ2Lb83NzNU6c3sYnD8f1t8RBD4t18a5aGBEPGbXyAtlOg78tRu2P1cJPq1PoF9URr6mF4WWiL6qzmdOr9K+qO+zEHh9XC0ci5s/3IpyRP6Fy/I3XjPd0WzlvikPurBoRm41xx9WXN91UfB2Te45vOBjbzyhXDu8/Gz9+Thw0y3k6YRyE6veniIgDOf7YF9U/9nF1b52XVz5PswwKoGSF3QFbMYRoJhCnp6eTW1b57RJAM9TKDREyAtqD8x1AElcOAIA2KCmBGBV+yDMTiL1eh4v0njV4MkcPRFKE69bRHG/NZvWis1XNNJ21y7WQ0T1Go6iLamE6ML325H55TmTSudvlBB/6zHmJZo3DflItTLf9qOaH6g6/Ywz6GbVwMKKsBGJZXXqtFKEz4ZfzKh0pZ1cL5V0mKQnEi0ZX1iHjsN+v/qVO5Nz5dJM5ud0HVm83KsoS6CNFCKCmwhKIMf808RLMBOLs7Gxyy4pLuABoAKIBAJKYHAAkMTkAANqgsARiLP0b30+YCcT1yMlStSp01n+n1LfGaUco3xH9qnEg7dNL9ZVh5ZibQ76l8tibq7kbTfVU7h3oG/mWvtMJ7kFjwnfWNZa9pP6xf5mPNtyJ4wH5KfHkh0/EwyfWYF/WjJMUfnj1dqM6J7frPcsCAE1VXgIxlu2EaCYQl4o3slwa0B7Kg0gAWoDzHQAAAK1VXgIxlu2EaCYQb95M98rK+QgzKcJ169Gi3hpnPURnjbYCm3jSCh0u+ZRxUoTFkRe5dryhvjVbnoq9L3C+wyVPDrQqW9+YHODK8szZ3zUG/es5HrZwYrDyuFaXXqBpSg3WLRUJNBOIIyMjyS1XXP0ZQGPUumFAIgloD+LJAJI43wEAbVBkAjEiut3uwMDA4k9rM4F4/fr15JbLN14EGq5lwYdaLQsIHSBBXib4d4zD6T/US+OrauEBY9BLaqGz/viYWtiJIJ4MX8s+T9uDyaFp+v8EWJZnzuQUoSNXoI8gIbAaSk0gxhKfvmYCcfv27ckth4aGqv+zAIpGAhFAEpMDgKRa53vOzkgAABhKTSDGEiFEM4F46VI6EdHrjXhlOObSTRLXkLyIbfQSEyJ5Ddz23N6Rm5X8wBhU/s3fOXLPGbX3qYWfMQa9rBZueyZ2Pl+rZUHOFZasJjLOwK05x2VyzO2TxqBOsmmreizt0scMOdnv3NEbVAs3RNTsZ8Lya0h4RT3XnAt2Zy3a9pAv6jYcjO1naoUKe5PDj56N68+Jg+7nPQX65WV1chgYjJ+9ReIYDVP21e3iE/LYsWO7d++uUjs2Nnb8+PEF/3HPnj3JjYeHh4XdA1CiZZZpWowcAdAeTA4Akmqd70wOQHvwOAIapuAEYqQ+gE+fPn3x4sUqtZOTk6dOnVqQQJyYmEhuPDMzMzo6Gi9HyJ/4/0wt/C21MCLeNWrTP6VW8LZxm+UBtfBXckzN31MLnQZe6WV+KrhlDOr8fi7/sW8bg8oho00RWsjodw7Hh2+Jgz4o1sW31cLwbh59TD3HzxiDzhi1j6iF8sQiZ+ucZKizWvqoWugss95Vd3izPqY+E26JIIEI3yPqKXPGOMHfMWoPtOarr9eBrtb53tv4/Yj0144KLhjvqXxh5kRZXzd2WP6gcT4Wy2pX+vfVv/RJY9AtauENY9D/w6j979XC/10t3BDxPD1P0TQNubqdX+Sk7iPMC/7L+Ph4cksSiEB7EDICkMTkACCJBCKAJBKIaJiyE4jzNm7s/SFHjx49efJkxarFi6i89957yVuI169fHx0djTmj99dfUgudPoZysikirqmFh4xB/45a+KZxb+e/Ut/Ug+qIcoowjPflCePTy7mF+2O1cK8+Zpw1au+YT6rozRj7jYicfAv3y2pheF3k0mtNVfBZY1AnkSp3JJTJ87bT9FZuXBsR76uF3zMmB7kxqxr2jTDy1PdG7CWBiHwOZfoKKl8AlBXgioizcnvKgzF+Rpkc7jW+hznHg3NRJ5Nz7o7iDkLZr6iF8gMTYTTidOKo/7Feql+of1EtvCuCVdfROA25ul2tBOLevXu7KVu3Og+dAijJ/HxSBTkCoD1IIAJIYnIAkEQCEQ3TkB8Q70wgVq9anECcmJjYkDI15cRCAJSEkBGAJCYHAElKD0QAAErTkEeY5QTigkVUxsfHk7cQN2/eHBHxZaeNfw5O22y5S326jWQ1/7qoWzQPqnt7zXhf5OcFHM4zIM7xIDtiVXc6ncHBquuwdLvdDRs2xMNvWkNmYByE8nP0Tov67xg77B0PiseKmsoi4gH15XV6IxSo0+lU/w2x2+3yMwEWctZCkd02auUnT4tbv8K7vqp1vveuHO47EfedcAYVZXl52/M0cRZlvbzO8mtZ/OXcOwCsJw25tF3FBGJyy5mZ0n46BKAiZAQgickBQBKTA4AkeiCiYRqSQJznJxCTW/ZWYf7GcHTVru/yghuX1cLweurLtaeMQe9TZ1jnL5Xv2smrB8gBroj4mDqovEhCRJwzar+kFt5tDCqfNdueiZ3PKwnEf3U4rqkrOzwl1kX6fkc1HzdqZd80LqEuGuN+VS38i2qh/Je+o44YETVuny0yqRb+C+M9lUudVXHkONXWp+LAC0oC8cLTMb2w4XI/yO/pDmPQD9TCjxmDOhcA+tJ4qktqoRNzl1e+CuOLgrxgUURcNCaWP1YL5b90y8E4eqbT6VRfga135XD12bjxnDiovAhVRBxQD/tXjPcly4W6E/i9Ry2UH7ZwQrtvqIXyOn4R8ZkcT2JtMyZtZ1zRYGy7NTc3x2+IaJJi7oBVvFlnJhDffz/9KwsJRKA9akUDuCYA2oM2ZwCSmBwAAG1QTAKx4oJlZgJx+/b0XdqhoaGIiKEIedm0K2qhcwt32qiV/9IHjEHlxMQFY1C5SZ98N3VILXQ4oRKHvP7Qj41B5aN3U0TN5dJ6G49HyHcZbqmFzn3jbUatnNl50PixdateamV+NR+qhbuNQWssHr6I3tfSGFSORTtHvvxhcW/EgXqTQy+BeNOYBp3grXWOq06rhU5EziJPSuo0KF+YOZODczDUWFv4o5xvGM45Ll9iycfChgitB6Jjk1F7Wf1TnUdDnMik7JCRVpP7yMsfi/KXoDBeXvkSNIwDyTFjDHpVLZRP1oFMn8XAWirpDliVz1ozgXj1anpquX3baUANoCS1QoUkEIH2YHIAkEQCEQDQBsUkECMiuT7yAmYCcev/z96Zx0lRXe3/DMOswAzDNgPDvouIGETEiBuIJgajUcSImFdUVFBwiSYa88ZI8osx0RjBFUhQQQWNG6KyxSAYBUEEAYEBFMiwwwADw2zd8/uj++2MPbdnqp7TM1XV9Xw//oE9dfrcqq576ta9zz2nqVnlEk5rUqpQNsHqpJ6ooYicUNjCiaJ2KJzCCUf+o3AKA2eg0+RcgqeyYRGB6BoMp8TSLNnBK7GVIpgC8biiu3VADb9ADUXR10Sxuq5RAsKxVxQ3IQycYtKpat49UEONnhp+LGrE9bCyqbGIzeAQ5rhCVzJMEXxXOzF9+b26DzHjpdGojoudyOam0WGtR/32dajQam/UcA16pvDehZ2KHNN9UENRRCTNg1i1jQD9aeDdAKIbNmNoVKWno4awQF4U2R6dIh29kZjJjJBqeGwFrE4RolKBePKk+b3EytwlISQxoMiIEGKE/Z0QYoQjB0IIIX7AY2u+dU7kKRWIsUqvhp/06YrFtxWoYQZqKLqVNzjRiSbLCZzvSZN4EaYjaggnxNQ41aBRlcJrzhoFYp8GXxTdqljSh8VfP0QNRXd54UKBcOVH0dXOexc1vAI1hPPs9EINRaST4vJ+jV5eTUSCVzAdyY+WIoIpEPsuRF3qGOApbYgDxTH9BJzNTYMmP5ojyqYzVE4RBWJzhcztOGooit0AGgWiRokBDx62KG5C8xthfaK5RAdQQ81mtebo5dXk93cEWCmcpEsVTYgr8ZgCUSK7iWOgVCASQggyR0AIIYQQQgghhCQuHlMgikhlZW2VJpUKxFi1nsMTCr0UyeDglIJtUUNRrEeJIsmUppYirCvRrRuDwGequURwGg7Ner7PVs+QvUU/0NXAxWimue0Vy/KaOowwmgQ0P49bK6wC57XMV/ymsDJUFEFJoyPojBo6lVuNGw/rD1U08xRwP9UozhwZI5E66ThNOk5zuhEJjbeE2L2dqBnd31OXyCkGON0AQtyE9xSIUmsmRKUCMZa8keXSCPEPyEYkQogPYH8nhBBCCCG+xXsKRKk1E6JSgVhSYi5GFfb4sSL9B3ylv0UNRZe/oxw11CT4gwuQadInwSURP0E9auqWwie6V3GJNL/pOahhnsIpXFQua6zkzkBSof9VkcFzPGq4UfGbdsZNZR9quEfRYE2ani9RwydRw12o4UuKS3Q1birrUcP2CqfbUMMNiqtURyW22LQZKuctRhSI3w6X44tAp/tBOxGFJlqTiHMDathV4bSlwhbX16Mjh5Wow89QQxH5VtFlYPW3pqQs3E9F5DBqCG8VatpdhhcgI4edt8ih6aBTzeWFk5VrFNiavSywNl9Tu/xb1BB+rVihaC2c9X6dwun3UUPNpijNGx8sdYeV40kp0g5+oybEpXhVWBdLEqhUIGZnm4cPsYqrEEISj1ipDIxQkUSIf6A8mRBihMGBEEKIH/CkAlFEgsFgUlJSzQewUoFYVGQupFpRUSEi0kKhQIRFZ5qsN5rlPngtS7NufBQ11GSKhIFnlWF9nCi6LFwWVnS/KXwDaxLtaa5wrUkSahLWEbQXyUT9wZdIk3WxwglbTcXeGQrbhl8AgvWS/1E4he9AUVTl/lbhFNb7aH5Q2DZFxGY+k/DBOYr0vpoBAFzQU1POG5a6a1SE3iromYEaagrgaroMfDtopsjyFbZwRldY2JQuYjNBavjgSoUYsDtqKArJuaavFSpss9DfRrPjp6nCFkOTIR1GM3KAhYQaFSEsMRbBOzlcuDxJhNmTScLhVQWixOiNSgViq1b/As72AAAgAElEQVStjEempmoeQYQQL1FLkoSaUEdAiH+wFRxsaZkJIZ7G1mCAwYEQ/8A3BZJgeFWBKDFEiEoF4r595uReZWVlIiIXaOqAkoSjH2qoyf1BrADLqUTEpgIxLDK6VJE2FJZaaOqWanLtnYYaaiqBtvbU+u1Q9EyHxrUZ1hnpkF+vgQSH7IW4P802AkcY5IQgxVsVnC9FW3tpXJtB4o0tkVE4OHSdJl2dqMKcg3Y3TZlgR9CMBjvFrRVW0YhVNPmIYQ6gN5JGyqrRyO9wZiRJBSJJMDysQBRTh5w0aVJenqXiCzk5Offff3/Uh23bmrfCpqd7a4cMIQSHIiNCiBEGB0KIEVv9ncGBEP9ABSJJMDysQBTTA3jDhg1791oqhlpUVLRmzZooBWJhYaFRX1BSUpKdnS0706UKzVbyFWiHi31El9gCnjI9oHAKLxV+oHB6AxrW4UukkVrAuSk1+fLWKmwHo4aaipNno4bpY6XZDERklKtIULUcNeyjuJF+gJviuWDgxWoR6aoYfv0L9QtXhoUL9sHXVnRSi+2ooSZVGZyrVBPN4LjdZKh0WIwEh5PDpRKtwuwtbZ0G1ZlqxB3eucLrFaepGQ1qYi+M5mEBA0ekxt0lvwBJkLrmFtmBVmHWzEDCCVId+V1EZAh6E2p6DUxfWIitcArvkeulcPolathb4VQT8OEsk7pnMRWIJMHwtgIxQmVl+H3C7hbmqE/y8/MDJjIzNYMvQoiXoMiIEGKEwYEQYoQKREKIESoQSYKRIBOIjRuHpZTKIiq7d+9ONnHiBFxTkxDiMRCRESHEBzA4EEKMIApEQgghxGt4ewtzBFiBGLWFuV27dkZ9QZMmTUREOiqKqMC5eDUJXx0p1qGrXwFygxNOd6CG8O4GEdmC3g8dcZ9yuaLB8IaXC3Cfyr0GgUAgJSXF4sHBYDA5OVmabMb9weVB4L0YIrJKYWtOFWsBTUSCNwWLyEncFCTfa6vNmp3IfiIQCFifQwwGg40aNZIMRREVYgmvdTcMzcjBc3iw1ly4v1s+ODk5Wc6YJmegRVQ0z0TPPaHgzD/e6jW5CtuNqCGcGUlELBUdMKGpLFCosIWHOuvQOzApRU6DaywS4lISZAUsXgrEnTt3Go88ebLhX0AJIc5AkREhxAiDAyHECIMDIcQIcyCSBCNBFIgRlArEjh3NMq2MjAxVszRoytWTegVWlWoY4LX7wYM6AkSBqKE1aqgRWlYpRjO9Ub+a/OuauhmU19XJSvSnOct7HVwDokAkhPiAQCAQUTPUSRxGDp5TEWrwSTkpzYD5GPoQ99yNFHRiMs6sL7JAkshpUlVVxTlEkkh4ZmhrcRSuVCDu2bPHeGRpqWLzMiHEU1BHQAgxwuBACDHCHIiEECOcPSQJhmcUiBYLlikViLm55vwTaWlp1r+W+AV4RVST15KK1PoHUSAW9JKyLaA/OEfPKsWNdJHiRloD54LBfUo3hS28dOwffCYkhKECkRBiBMmBeOQWOTEd9JcF2omIwKIITTI3zyndGh440Z6I9EAN4f0HotgachruU5U/EX5xa6Ea91KBSBIMLw1trYzalQrEgwcPGo8sKyuz/rWEEE9j652fYwJC/ANFRoQQIwwOhBBC/IBnFIgiYqyPHIVSgdiihbmsaWpqqvWvJaQOfKUihOWWzl2lqiobrsMHb1BUsuuLGp7p0CXKRg27OtTgIc64JXXwbzQ4nKO4kTahTpsMlQ6LbQUHKhAJ8Q+IArFUpBj19zVqKCLD0BC6UVP6GTf1Cy0Vtvvj1gobwFLWAwqn3yhsy9EbuAj1SI0BSUQ8NrStU4SoVCAWF5uf5JWVmgT+hBAvYUtUSAUiIf6BwYEQYoQKREIIIX7ASwpEsSBCVCoQY+U65JOeEBAPyi1tiYzCNK2HdrgWWGtJSHU0QkIYuIa4iGDBgRDiA5C9C3nTJG8a6C/VifUJeP8BsYImTSQs8CxW3EiHUUPzfj9rNFPYwnWu87kcSMh/8d68WOPGtU16KhWIsZSGFku4EEISAOqGCCFGGBwIIUYYHAghhPgBjykQpa7dxEoFYiylIYcFhJDaGLbZ6RY0IJqCyIR4GSoQCSFGGjo4OJJTmJWU65VCJ142NeW8M1FDOHmiiOxT2KajV3gR6rGRyBWoLSFuxXsKRKk1E6JSgUgIIZwjIIQQQgghhBBCquM9BaLUmglRqUCsqKgwHskJBUL8AxXHddCM8ZDEg/VoR+vr2B3I4EAIMcLgQLRoBJ6welEjBoRTCh5QdBZY9iiK4WsAbTDHyyQR8aQCUWLvNVYqEDMyMoxH1ln9mRCSMNjKecrVBUL8A1IngRDiA9jfCSGE+AFPKhBFJBgMJiUl1XxaKxWIx48fNx5Ze+JFQkgiYavqOkUHhIA4JySEsdXfGRwI8Q++CA5LFM0e6kTAX61o8IAGb7AmB6K30lPC0kURaR2/ZlhnpKcuLyH1jFcViBLj6atUIGZnZxuPTElJsf61hBBPQwUiIcQIFYiEECMMDoQQQvyAVxWIEkOEqFQgFhUVGY8M50bcmS5VZbYbGqKT18YK8DqYtxbBNMApPDQrb6T+sZWyILySsbGXlG0B/bUH7eQAaigiTRS2MDGz19Yzh1HDM9lVE45NaNxuMlQ6LLYlT7Z1MPELBegduFbh9Ht1HxITR6r9alKklcSvGRZp3F3yC3yhQHRERahBoyJs+Pcg/7xA+Qyv9ndCYuDt0W3NDjlp0qS8vDwrtjk5Offff3/Uh23atDEenJaWBjSPEOJFainTVBPqCAjxD7aCgy0tMyHE09jq7wwOhPgHvimQBMPDCkQxPYA3bNiwd+9eK7ZFRUVr1qyJUiAWFhYaDy4tLc3OzpaOmlJVXoPrYMSv2FIgxkFkBCtS0xVLmppKysWo32O4T8lS2B5V2DYwXyp+0/4M2hborbpKDR0cSOJxCDXULGQ7oiLUoNmo8U80ipolBBZIFbHZ3xkcPECq0w0giQIViCTBSJAHWKTIid0tzFGf5OfnG49MT0/HGkYI8RwUGRFCjDA4EEKMUIFICDFCBSJJMLytQIzQuHH4RIYNG7ZkyRKLVjWLqBQWFhr1BSUlJbHqqxD/UgwbKlaiPKcj8CCIyKjPZtzfO+j9cAL3KS0UNyGctHEV7lN6Kmwb/k0Nzp2kURF6roDjerTBzpVvpgKRaDmbD/F65iJnrjAViIkG85WTOEEFIkkwEuQBFkcFYsBEZmZm3NpKCHE3FBkRQowwOBBCjFCBSAgxQgUiSTASZAKxugLRulUsBWJNSkoavqgbIcQZKDIihBhhcCCEGKECkRBCiB9IkC3MsAIxqohKSIFY88iwAnFtulSVgU38K2gnt6KGosjVLSKHUcMzFE5zUcN/K5z+GF0XKkI9tkINReQAKoN3ai8GvK1ym8LpeaqTDQQCKSkpFg8OBoO25hQM9EINWyqcaoJDOWrYR+G0qcL2PwpbD+G5ylfwTuTtjmWBCAQC1vt7MBjkNEGDoNkd5rVeg+Fcl/EPtvp7eORw5BY5MR3057mAT+oETushIstRw964T8lDDdcqnMIvXyIyFDV8ETVMTpHfwoNmQlxKggxt46hANB5ZWuqn+suE+BuKjAghRhgcCCFGGBwIIUaYA5EkGAmiQIygVyAajwxXYc5RrFX/HbX8SBF0zsJNccHaDkWDYadnOhGa4eHfToVT+A48pLhElbipwLv/NTrN1ejJthornWY0tAKxGWqoWdQ0hzpr7EANcxROeyjUFk38MXTzXBEVGOckUYgCcfNwORqdcNkqmocFPL47VeH0G9QQLs0kIh0Uts3gXoPehItQj5oHsWaw78g2grYK22Oo4RHUMKu7jCoIBAIRNUOdhEcOAcXPqgn48MBM8yD2HLBuF35CwXegKEKopkRoKmr4Q4VTeIechl+orKuqqjiHSBIJz6yAWVysUyoQ9+zZYzySCkRC/AN1BIQQIwwOhBAjzIFICDGSMLOHr732WlJSUlJS0ttvv+10W7RcccUVSUlJTZtqEiT5F88oEC0WLFMqEFu3bm08MjU1VUSkoxPTiF0Vto6kvevkhFNH5DPdHfCJr7xpColrbiRHkjYWoE7TRezXUkxOTpb1vaR0C+i0BWgne1FDETlHcXk7oZd3F+5TxXrUsBNqCOuw1ihGmZr8s0tQv5pBhFWZbw1OKpyaH/IWaDpUui62pTgOKxB7LURd6rYROEIPpxvgfi52YriyURFYYKn7//hJrYblQGw5TVpOq9dWEZyGl7qf668uAwLv2tEAC36TRJq5XYF45plnrl69WkR69OixZQv6LkP8hJdWwKyM2pUKxCNHzPLxiooK619LCPE0th7zbh4TEELiC4MDIcQIFYiEEM+xcePG0OyhiBQUFHz66afOtod4As8oEEXEWB85CqUCMZaQ1Xpak5h8gr5IaERGmU5kSNEo3YpRQ0dSYi1FDeEEPRpbTfq5LMWN1AU13KJw2gY3FZGqKhu3U/jgvptVLjE08mQNzdDupqnCrOEy6gjqQpMT01vAaa0yRGwGB0LcQh/et/UOMnIgxHHgfUIaHNnYpPF7D+oxWeQV1LZBePHFF6P+d/DgwU41hngFj62A1SlCVCoQT54074yyMndJCEkMKDIihBhhfyeEGOHIgRDiLYLB4KxZs0SkV69eZ511lojMmTOnrKzM6XYRt+MlBaJYmMhTKhDT0tKMR4b3GixJlyDaqQ6AdvI5aig6MSBcAu9DhVM4q6AjUqxlqKFmQzw85tQUcNTMn/dEDc190Ro2chh+l94iuZA04JNeUoLmDekG2jlYixbEkXVj4lr+id4PnRVOdb2GuiFCiBEqEIkWzRgJLnoO7/0SxQi/2KHR4A7U7x9Qj+5eKVi0aNHu3btFZPTo0dnZ2StXrjxy5Mi77747cuRIp5tGXI3HFIhS125ipQIxVvEEPukJIYQQQgghhBDidSL7l0ePHn3ttdeG5liiNjXXwgcffHD55Zfn5+enp6d36tTppptu2rhxo/HIhx56KFS++dtvvzUe8KMf/SgpKalVq1ZRn0fVff7iiy/GjBnTqVOntLS0vLy8q6666rPPPqu9kbNnz77oootatmzZpEmTXr163XPPPTt27KjdpKioaObMmWPGjOnbt29WVlZKSkrr1q2HDBnyhz/8IVa1DH07i4qKHnvssYsuuqht27apqanNmjU77bTTbr755vnz5xunpw4fPvz73//+3HPPbdOmTWpqam5u7vDhw6dPn15ZqVEMWcVjCkQRqf26KBWIdUwgDnWiCvN1DvhU0d/pBjQYf0SnleEVMHGoyDVcfUwcKpCtA9lb1FEhLIXLwnpO0EcVYZ2sVPymZ3nt8l7ktQZz4yHRMwe9hVoqnA5T9DV4AKB5+muebvtQw77ei0gkodCMkeCRpK9w5B3KrRw7diw02zV48OCuXbuKyLBhwz788MMFCxbs27cvNze3dvO77777ySefjPzvzp07//a3v82aNeuFF1742c9+Vh8NfuaZZ+66665IYdt9+/a9+eabb7311vTp08eOHVvz+LKyspEjR86bNy/yyZYtW7Zs2TJz5sw333wzlpfi4uK8vLzy8vLqHx48eHD58uXLly//y1/+8vbbb59zzjlxbKeIvPbaa7fffnv12cmKior169evX79+xowZb7/99o9//OPqx8+dO3fcuHFHjx6NfLJ///5FixYtWrRoypQp8+fPb9++fS0t1OO9CUQRSU5OjrWXediwYUuWLLH4PTUViLHkjSyXRoh/4EYkQogR9ndCCCGEeJ25c+eGaj9cf/31oU+uv/76Dz/8sLKycvbs2ffcU1vhmGnTpr3//vu5ubm33357v379Tpw48d57782dO7e8vHzs2LFt27YdPnx4fFv7zjvvvPjii9nZ2dddd13fvn3Ly8vff//9hQsXVlVVjR8/fsiQIT169Igyuemmm0Kzh61bt77tttvOOOOMkpKS999//9VXXx05cmRozrQmgUCgvLy8Y8eOF1988WmnndamTZtgMLhjx44PP/xw2bJlBw4cGDFixLp16/LzzcUHgXbOmDHjlltuCQ0vhwwZcvnll3fo0KGiomLLli2LFy/+9NNPo0aes2bNuuGGG6qqqlJTU6+++urzzjuvRYsWe/funTt37vLly9etWzd06NDVq1fHqgwcFzw5gVhLJkSlAjFW3tBYysSG4DPFMiycW028phVap7hK/dAzhRN4ZYN2IiLrUaeam2GPwtaR/B862SOSCv1tkUOov3tRQ83v0lrxu9Sh/Y/Ndtynqoz4atTwJvRGgjU7TF1tBbiSsogcRw2bDpWuixEF4sHhUrYIdOo5BfdG9KfpoHAK14V3BHOtPgvsimcrbABvh3Kkn4rIctQwE21wSnfpUIAEh0O3yPHpoFNNcupC1DBP4bSHE/1Us+PnaN2HmIFfKzSthe8HzeY6z5V31+ReBEmRZuV1H+UEoa3KKSkp11xzTeiTK664okmTJidOnHjppZdqn0B8//33Tz311H/961+RTcfXX3/9lVdeed111wWDwXHjxm3ZsiU1NTWOrZ05c+bAgQPnz5/funVYbTtp0qT//d//nTx5cllZ2dNPP11dDikiixYtmj17toj07Nnz448/jggqR48effXVV48cOXLlypVGRxkZGYsXLx46dGjU5w8++OC8efOuuuqqw4cP/+EPf5g6dWpc2rl58+Y77rijqqoqLS3txRdfHDVqVPW/PvLIIxs3bkxJSYl88s0339x2221VVVWdOnV6//33+/TpE/nTnXfe+bvf/e7Xv/71li1bHnnkkccee8x8KeOBV4V1sSSByhyIGRkZxiPrrP5MCEkYbC0YUJFEiH+gPJkQYoT9nRDiFbZv3758+XIRueSSSyKTgE2aNLniiitEZO3atWvXrq3FPCkpafbs2VEpC0eNGnXzzTeLyI4dO9566634NjgzM/Ott96KzMqF+PWvfx36ZOHChVHHR+bpXn755ajt2FdeeeWECRNiOUpLS6s5exhixIgR48aNE5FXXnklVsC3285HH320tLRURP785z9HzR6G6NOnT3XR4p/+9KcTJ04kJSW98cYb1WcPQzz00EOhxj///POhr60nPKlAFJFgMJiUlFTzx1MqEI8dO2Y8smESUpo526ERCbx07EhlWHi5TwOsmNAsw8KJgTSS0t64qTMN1mFrwSAsOjhDpAT1twY1PAU1FEVdeBFpgRpq6sJrCgV+X2HbwGiKj/sH5+qP28pnEj64VfR4MZGBBSkOCEMc4kLUEJZ+i04MCHe3Aie2hohIBeq3GeoxWQTbu9BymrSchnpVYN66ZwFNbkpH8FbOO2+11os4JFd3Yfbk6uVTqn8+evTokHDvxRdffOKJJ2KZn3feeaeffnrNzydNmvTCCy+IyDvvvGOcDoMZOXJkzV3DKSkp559//htvvLF58+ZAIBB5fSstLQ1N1Q0aNOiss86q+W0TJ0586qmngGYMHjz46aefLioq2rZtW/fu3ZXtrKysfOONN0QkPz//tttuq9N7MBh89dVXReSCCy4488wzjceMHTt2yZIlx44d+/zzz4cMGWLr7KzjVQWixOiNSgVizeo/IeKrwiWEuJlakiTUhKIDQvyDreDgZPITQkjDYmswwOBAiH9w25tCVVXVyy+/LCLNmjWLqs4xfPjwNm3aiMgrr7xSi3zqwgvNS2F9+vQJma9atSqeLRaJVbckNFsXDAaLi/8rNFi7dm2o8bHa2a1bt44dO9bibtu2bb/+9a/PO++83NzctLS0pP8jki+ysNCcCcJuO48fPy4il156aaw6HNXZsGFDqNDKqaee+p8YtGgRVnls2rSpzi+E8aoCUWKIEJUKxH37zMXbYuVGTGSck3h4Bk0uGBhv5aYUDzbYpgIxLDI6oZDIwe8Rmqdzc4UtrLWEDUXEvLhjjb2oIay9hVPX+UeHJSL/Rk/2HEVUgRPmNh0qXRcjweHkcKlEcyB6K7ufBv+cKSwyWqoIDpp6jGtQv2c49JtmoYa64YotkZFXazN6cESH48ENNAiaUYd/4rYOtykQly1b9s0334jIlVdeGZW9LTk5edSoUVOmTNm3b9+CBQsuu+wy4zfEqkAS+tP+/fv37FGlz69Jy5YtjZ+np6eH/lF9x+7u3bsjjYn1hV27dt25c6fxT0888cQDDzwQVYg5ilibVm21MzILecoplvaU7dgR3okwderUWEkYIxQVFVn5TgxvPsD+j5odctKkSXl5luZ1cnJy7r///qgP27Ztazw48qsTQhIeiowIIUYYHAghRmz1dwYHQvyD2xSIkf3LET1ddSIfRg6rSWZmzJxETZo0EZETJ06omlgDW8u3Ee91trMms2fPvvfee8vLy1u0aHHPPff84x//WLly5caNGwsKCgoKCqZMmRI6LNZo0FY7I2pEixWTjx61Udqp9glQJR5WIIrpAbxhw4a9ey2pTYqKitasWROlQIylRy0tLc3O1pTO9c1ClugypHjrZP2z8qbJZORI3T0diMgoqBASwvWF4WqeGqciklv3IWY0iRc1y7ea3IsYm9Dm9naov7yINvhnigZrhIQwuoS5SHDI8FMORFInq2ENrMKpJpe6xq8jOFT1EEmQStyMt15JCtHAAm+YIJZxlQKxpKTk9ddfD/17+PDhtRz57rvvHjlypHlzw5alkpKYW4pCk3expudiYWt1tk4i3utsZ00efvhhEWnTps3q1avbt49W79s9r9pp1iyceTe0kblOIt6ffPLJSZMmxbEldkmQB1hkl77dLcxRn9RMexmCCkRC/ANFRoQQIwwOhBAjVCASQoy4SoH41ltvVU/DVwtlZWVz5swx/mnbtm2xrEJ/itrTmZYWLhEYSxZ34IBGYhBNu3btqjfGiPFPO3fu3Lp1q4iMHTu25uyhiGzfvj1ObRQRibj4+uuvrRwfmafauHFjHJsB4G0FYoRI4slhw4YtWbLEolXNIiq7d+826gtOnDihVSB6ayFLg3/OFM4b4jnpogdVhBoQkVGeIqsgnEyz4YV1IWBRPFz5UUSOKGzrUcUfA7iaJyxdFJ16USMk9BNIcCCkOgPQvnZEERzg6theJJ5CFhsgCsQjt8iJ6aA/CsdIdXg/EGtENibfeeedkYIbUZSVlT366KOhg2+99daaB3z00UchpV4UGzZsCE0FRtUIjsgYd+3a1bNnzyir48ePf/XVV7bOonZOP/30xo0bV1ZWfvTRR8YDtm3btmvXrpqfR4phGGcPRWTBggXxaqSI9OvXr2nTpsePH//ggw8qKyvrrKNyxhlnhI6fP3++lePrjwSZQIQViFFbmNu1a2fUF8RXsEoIcTOBQCAlJcXiwcFg0NacAiHEuwQCAev9PRgMcg6REJ9gq79z5EAIaXgKCwtDQqvOnTv/9a9/rWVv9T//+c+VK1d++umnW7ZsqTnlt2zZsjVr1pxxxhlRnz/55JOhf1xxxRXVP+/Tp0/oH4sWLRo6dGiU1dSpU+ObsC89PX348OHvv//+ypUrP/vss7PPPjtWO6OI5EzcsmVLzb8uWrTo888/j2M7GzduPHLkyL///e+7d+9+7rnn7rjjjjqPHzVq1IwZMwoLC59++mkHdzEnyNC2ugLRulVNBWJhYWGyiVq20BNCEgyKjAghRhgcCCFGmAOREOJyXn755VD+hOuuu672zIyjR48O/eOll16q+deqqqrRo0fv37+/+oevvvrqjBkzRKRz585RE4iDBw8O5ft75plnNm/eXP1P7777rlHMqOSuu+4K/WPMmDFRJaH/8Y9/PPvss0arnj17htr597//PbSXOcL69etvuOGGuLfzl7/8ZShR3s9//nPjhvGvv/66oKAg8r+/+tWvQhVX7rvvvpkzZxq/c/Xq1b/4xS/i3tTqJIgCMYJSgZifn29UINZSxMfV+KeeiSN4bicyzEbNjQQbOnZ5EQViUxGrFjUwbyCwgCZhCLzHVoOmwZocEg2fvZqbiRIUKhCJFrjWwe64NsM6a9AGn6EIg5rhq6Vk9PEHUSA2nybNp9Vrq4iXgIODcNRBLBGZDYzMD8Zi1KhR99xzTyAQePnllydPnhw12zhixIh58+b17dv3tttu69ev34kTJ95777033nhDRBo1avTcc8+lpqZWPz4zM/P2229/7LHHiouLzzrrrJtuuumUU045evTookWLFi5c2KNHj9zc3OXLl8fxTC+++OLRo0fPnj1769atp5122q233tq/f/+TJ0++//77c+fObdWqVdeuXVesWBFllZKSMm7cuMcff7y4uPh73/ve+PHjTz/99EAg8PHHH7/00ktlZWWh74xjO3v27Dl16tSbb765rKzs2muvffrppy+//PIOHTpUVlZu3bp1yZIly5cvf/PNN3v06BE6vkuXLjNnzhw1alRFRcWNN944ZcqUK664olu3bo0bNz506ND69euXLFmyefPmbt26/fGPf4xjO6PwzARio0aNrKQcVuZAjJqijhCHKsyEEI9AkREhxAiDAyHECBWIhBAjLqnCvHLlylCxjv79+0f2FMciNzd32LBhCxYs2Llz57/+9a8LL7yw+l/Hjh3bs2fPxx9/fPLkydU/T01Nff755y+55JKaX/ib3/zms88++/jjj48dO/aXv/wl8nm3bt3mzZt377334icWgxkzZhw9evS99947dOjQ//t//y/yeYsWLd54440nnnjCaPW73/3u888///jjj4uLi6vPwTVu3Pgvf/lL+/bt4zuBKCI33XRTenr67bffXlxcvGzZsmXLlkUdEPW8uOqqqz744IMbbrhh7969X3zxxRdffFHzO2OVBY4XnplAtFiwTKlAzM3NNR4ZLh50MF2qyqx//3eA5VTbFUFHIzJypELIKtRp27oPiQm8ageXO9D8LvBm+gqF00KFbSVqmK6486Njr2Xaj5V+MxAF4kpFlYn/DOEAACAASURBVA9YEQ+rO0UZHFBDzQq5ZmV+H27a0PxLcZoX+EaAoHksdlVdJUSBeHC4lC0C/VFUknjAv+mYuDbDOhohIYxmC8IiND5UoIbp3aVfAXMgJhrwqAPu446MkbJwnz7aiaWjqqrKDXOIkfIp1113nZXjR48eHaoZ8uKLL0ZNIIrIn//856FDhz7zzDOrV68+dOhQmzZthg0bdt9998WamszMzFy0aNEzzzwze/bsTZs2VVVVdenSZeTIkRMnToyUWIkvaWlp8+bNmzVr1vTp09etW1daWtqhQ4cf/vCHd999d8eOHWNNIKanpy9evPjZZ5+dNWvWxo0bg8Fgu3btzj///PHjxw8YMCCksow7o0ePvuSSS5577rkPPvhgy5YtR44cycjI6Ny58+DBg6+++uqaCfouvvji7du3v/TSS++9996XX3558ODBYDDYsmXLXr16DR48+LLLLvv+979fH+2MkOSqyuI1ufzyyyP/Tk5ONu4vFpHmzZuHRLkbNmx44IEHLH75ww8/HDWBuGDBgl/96lc1j5w/f35ubq6/JhDTYaecQKwLX00gmufkLdBF4VQ3gVheXh6lva+F8DvD7F5yxJBw1xLxT6lhAUcmEDXBQTOBGL1HwTI/afDnIycQreDcBKKtsnecQCTEAV5B40N31KP9CURbSxHEGRp+AlEDJxBdjEsmEAmJF55RIIpIrNnD6igViLHKmYdnE1qVWv/yuKEZYDiSRW6xIkQOQxu8XpM3BDVsiRp6Lr9kHTr3WoEzGWnGJT/ETUXE1rJK+OBUkTTUH3ymmixRmssLTz5qJgFhKat4qlqYfyYBNWgmAdehN2HTodJ1sa3gEJ5QaLUQ9EgSknfQO3Cbwuk9XgsscD8VEUsblkzAMympIqzCnHh4a/0Gbu0Oh3QqhBDP4qH3KhEL6YeUVZiPHDHvQqyo0Mi3CCFewtY6IRcVCfEPDA6EECPMgUgIIcQPeEmBKBZEiEoFYqxqy+GJy/npEkS3MJurs1gA3lIhOr0PvBLbDvcpn6ANdmQkBu8mhvNLiqKOrW7jHo7n5JY2FYhh+ougsQHfj7kL9SginRU3IVw2WrMXPkdh21RhiwEn4eqgcArrbkRkDWqoeULB0exHmuquqGFABAsOnkMjSOnkg+ujxDzMtEAnhVONoA9+UeijuBk0eWngfMQHUcN0ka7Q3gVC4gU8knRERbhREZGspig30QPtd3Ax+qQU6V8O2hLiVry3AlZ7+iGlArGy0rxNzmIJF0JIAkDdECHECIMDIcQIgwMhhBA/4DEFosSe4wuhVCDG2lMQHhaUKyQesC5Ps0i5U2F7GWq4TuF0N2pYd3rM2AxGDWEli0ajcQwdoWrkqJtwU+mHGmpW7Bo+c80JEThFKhyGv1f3ITHZq7CF8yd2UdyEGikr3GtgYPmMJtEuLJ8RkTzUUJPFqzNqqCmiAldnyhDxiW5I84SCdSUa7a23EvnDRag0z8R+iksEK1I1WXo1CR/bo4bHUMM0ESw4HLlFTkwHnQ4B7UREFqCG1yqcvquwnYMa2lCV1GA0aviVI0VUUMMhitbCz+LWuE9ZpbDNQxv8GeqxkUh/1JYQt+I9BaLUmglRqUAkhBBfzBEQQgghhBBCCCGW8Z4CUWrNhKhUIMbaqhyeUJgjAhdT6YoaaqYyNipsX1XYwjRHDQ8pnMILqktRw7WKZXl4jRHOCiSK7H4i8ilqqGlwPnqFTx0rw2cgG5FOKHJino128k8VN5LmN22O+tX0032Kk/0ENRyAGsLpKeHa7iJyisL2S9QwW+H0P6ihJgUSrEAUEWyX4ivD5ZtFoD+NIhUuXK65kVajhho5VYoiOMDaEFin+TXqUdPXnlZconTUUKP8hkeDonjQwCLuZmivOSyyH3W6FjUURWDRqAg3KGyvQg33KZy+o7DFKFD0GXg3wPsKpwNRQ83vUqSw3YoaXogaMrEBSUQ8qUCU2HuNlQrE1NRU45F1Vn8mhCQMtnKeUq5IiH9gnQRCCCGEEOJbPKlAFJFgMJiUlFRzdK5UIB4/ftx4ZDjx4q2KHIiwruQwaigiFylsYYESXGFQwkmmEODkiRrgy6uRz8B3IJyxUUTM8+rWgIvnau78NNSwtUjs9QkjYUVSf8VPA1fl7ot6FF3WMLjBvZ1wKiI/wE1Rj+iZblKcpib1J5wjFS7JLQotwFkKpzpsKRDDBw8S6YP6O4EaimJ8N0hxI52J3khNcJ+qm7Dh8ycORQ3h55qInOFEDkRNMk1NnlO4qiy8jaCxCBYcuk6TrtNQrwocKbyb74RTTe3yhgeuESwiPVBDTYZ0PDm1wunZuKl0RRu8DK7CLNILNCXEtXhVgSgxHtVKBWJ2tnmLSEqKZsqHEOIlqEAkhBihApEQYoTBgRBCiB/wqgJRYogQlQrEoiJzZoWKigoRkTaKjIS5qKFG/OXIkr4mZxNcZLCbwilMd9RQo62DBZ6a3GrwsrwoMhn1dUJOlSliM2VBeCWjyWbQoxdxpOapxqkjagsMjUhTw1lO+IVTAzuHLXly+OBuC+urNS6kD3ojaSTG3qrCDCe9dQqNkBAGFgo5B6JAJMRxNHsX4ErruHRRV8EZ1lNralWzv5OEw8MKRDF1yEmTJuXl5VmxzcnJuf/++6M+bNWqlfHgWLkRCSGJRy1lmmpCHQEh/sFWcLClZSaEeBpbgwEGB0L8A98USILhYQWimB7AGzZs2Lt3rxXboqKiNWvWRCkQ9+zZYzy4rKxMRKSRQoEIL7ZoVlo0OLKs5C1g1YNGDwX/LhoVoSYtiya7CoxmQdWmAjEsMtrXSyq3gP6yQDvHdDewVshbQiFfsRL9TR2RLjoHEhw0fKmIn/AWBE3Ah/FPcHAkpaCGTxTJv2DghG6iGIXCac4yusuZBbZERnEIDo7gH6UwsYLn3vgciqJUIJIEw5sPsBqEi5zY38Ic9Ul+vjnHb3p6OtYwQojnoMiIEGKEwYEQYsRWf2dwIMQ/UIFIEgxvKxAjNG4cPpFhw4YtWbLEolXNIiqFhYVGfUFJSUl2drYc0dTARRcfClGPoiiAK7qyhg0PvG4sisQWC1GnNiQsNYCfQXB+SRH5SnF5YXndIYVT+GRbjZXOMxCR0W5F9k94eeKY4hJp1kRgtymKBrfHTWUDangB2t9g4a0m4DtS41LDelWuUhA4ODQZKh0WI8GhcLiURK9WWgWOnyKyEzXUiL9g/KNsKna6AXb5vqcurwY4hKaIYAlSNWi2d5ShhpoNNI4kI9ZcJXjjjiMibkf2jcHV0jW761YobE9HDQ+ghkkpcko5FYgkwaAC8Tvk5+cHTGRmat5XCCFegiIjQogRBgdCiBEqEAkhRqhAJAlGgkwgVlcgWreqqUDcvXt3sokTJ07Era2EEHfT0GnOCCEegcGBEGKkoRWIhBBCiBMkyBZmWIEYVUSlXbt2Rn1BkyZNRESynCiiMl8he74MN8XV2o5sUoC3IWuAe4+mpvdHqGH0bLkd1ipsO6KGmuB0HDWsFBEJBAIpKSkWLYLBYHJyspyxGXVJ6p8LGtzjJtSwUuG0qcK2ADXcrXhCwZFQo93JQA1biHSQQCBgfQ4xGAw2atRI8heiLnV0dcYtyHqF7eC4taIhgHPLFCj6miZxCjwaHKQYmMH7MUUx3oaHr8kikf5ujfDIQYOuWJxf8M9VOoIaanYTd3Xi8tpQCsUPpyqaxpFvt8njk51uhIiItMmTXz/qdCOIigSZQIxjDkTjkaWlpdnZ2XDzCCEegiIjQogRBgdCiBEGB0KIEVfkQDywX1570elGiIhIl+6cQPQ6CTKBGEGpQKyjCnMzhQIRpovCVpMZt9wFwc46mjTJ8PrkaahHTf2KXajh2Yqb4Wzc1IsgCsR9vaRyC+jPPyvkTgHn+YZX14d67TftgxrC11YUl9cRpyIikAKRWAHWqnsOb1VmEIekrJqybzCaMbNIIBCIqBnqJA4KREKq41R8IBaoqqpyxRwiIXHCM0Nbi6NwZQ7EPXv2GI8sLYULrBJCPAZ1BIQQIwwOhBAjzIFICDHC2UOSYHhGgWixYJlSgZibm2s8Mi0tTUTkSUWCqq5OlLr/hyJgwTLnHyicWlV91WAZ7hM/U1RwJhWooYjsRg3/rfhdNPn9TkUNH1Q4fRI1zBkr+TMQBeJmEbjSUpYTA4tmTixWO6IUFpE3UcOf4z5BNiku0fsKv71QQ42eugQ92b6Km2EZ6rT5UDltMaJAXDtcDi8CnWp0WLC8qZ3C6UbUME/hNN+RdzP0JnwJdXiOJn7ipnISNdQk/oE3W4jIavRCwdkes7rLyIKGzoGoAU4xqRNpOoBm1AFn6XXkKsFnCt/2ItLfiTMtdiLg4zqiFGldTgUiSTC8tAJm5VmrVCAePHjQeGRZWZn1ryWEeBpb0gCOCQjxDxQZEUKMMDgQQgjxA55RIIqIsT5yFEoFYlZWlvHIsBzpQSdyIMKL1SLyA4Xt/6KGZzqxHnWzAz6lrRNO4URRmurYGhksvIS72LGF7qoqG67DB5+nUGnC68bFuE/prZn3RH+aQwqfGgXN6QpbD3GPosusRO+HsxRO1zsx+Z6GGqaIYMHhdIeqMDsCnExTJSrxlCpqsqda6xS9nW6AfZDg4BSeExLC+CfHNHymlV5bBXdkA43mHcolJIm45Kd2STOIAo+tgNUpQlQqEE+eNG/VsDJ3SQhJDGyJCqlAJMQ/sL8TQoxw5EAIcTWNXPMf8TheUiCKhYk8pQIxnOuwBuG9Bq2cKKVyrwM+iSV01Ty9hEaB6EEQacDWXlKOJsWEE0XBKVlFPKbZUbLf6QZYp7dDv4tGSAijSWUIoztTh3VDCYwjohJC4oeXFIiEEL+RpMiMHF84geh9vPcbNm5c26SnUoFYWWl+I7dYwoUQkgBQGkAIMcLgQAgxwuBACHE1ya75j3gcjykQJfYcXwilArEOlqVLEK2mYi7vbIHVqKHoainCA6HDCqdwmrMjCqeXoOvAcNYwc6ZNa8ApBTUiLLgIoyjufA2wZDJ9rDSbgRiWKGq09YGVCF57XclQ2GpSpA1X+MW4GG3tuQqnmhSTcEZXzSACvvE19aavRw3bDZUf2hhg/JdFw2UPWoV5N2gnohijd1A4/RY1/JHCqWYpHD5ZWDIJJ70tAe1ERFYpbGE0K++jFQI9uMQwnFY4pbt0KEBEhTtvkUPTQadtQDsRxZlqNPLrFA/xfqhfjdMK1HCAE/LSHeiZem8mQAE8kkwAjTwViCR+ePI3rCUTolKBGEveyHJphPgHbkQihBhhfyeEEEKIx0hyWnVIBWIC4cl1h1oyISoViGVlZoFheAtzgQhcTGUPaqgRf8FORWQfaqgRRcEnu13h9JIGdwqrCEVxeeHaoyLyH4UtrIrSFLmGdbvdRQZDqdDXK2SwR9AfFe6kIjJA0VFhIYxGBaNRL8LJIm9CDWHpzS7UUETeVdj+ADVcq3B6IWqoGX0eQA2biGC7FL8S2Yg6hQ1FIXXXFMD9GjXUaNU1k7rorhI5AzX8DDXULGS/o7CFXxQ01Qc7Kp5Q5agh7DNDpAMUHHaKoMmTVQrEg6jhbsXvsgk3lS6o3zUKp/CoYwBquFFxeeEbSTO4gvuMZieWph4BrL3Fo0OKNINDUrxxycydS5pBFHhVWBdLEqhUIGZkmONondWfCSEJg62cp1QkEeIfKE8mhBhhfyeEuJckpysvR/7zWvolUhNPKhBFJBgMJiUl1XxaKxWIx48fNx4ZTrzYX7HQnYIabkYNRaSHwhbPIqdwCisQWymcwgxFDVsrRpmb0LjbEvcpHRW2sK5EcyPloIbNRWymLAiLDhopltROoIaaZ7AmzRnMCoXtBQrbaQpbjGtQQ41mRxPw4VLgFyicwsrQ8xRO4SvcRsSmAjF88JmK7tYHNRTFqKO9wmk/1PB8hVONvAPOvAwDX6IeipFDleJpAet9NPsehnhvMg4JDl3Cow4ERxJMawZmmqcbnIGun+LO10RCDPjNSxRhEB4wi0i+E/201IlolgC4JweiS5pBFHhVgSgxHtVKBWKLFi2MR6amajadEkK8BBWIhBAjDA6EECO2+rutSEIIIXHA8dSHzIGYKHhVgSgxRIhKBeK+feakYuHciFkKBSIsMtK8gGiKcsKKCU1cgLMR9XXiPQ1eiYWLMIpCSKgpVN1MYQsvimp0mq3RK5wuYjNlQViu2EuxsDnYN7MMExzy+7sG9wjnR9PkQPyxwrYQNdQsru1FDfMUTuFncXMRLDh0U2R07YIaisiZTgSWNWjs1ajVuipsVWMsCI2QEKa/wrarb55QOmwpEMPBIX+a5De8Qt4hojUbDcIZnrp7VePe+DXD5XjwKiEJUuPfCNfM3KnVazt37uzbt29xcbGIfPXVV3379q15zJdffvnHP/5x6dKlhw4datOmzbBhwx544IGePXvWPPLkyZPPPvvs3Llzv/766/Ly8o4dO44YMeKXv/xlq1Yxtzd+8sknzz///NKlS/ft29e0adNOnTpddNFFd9xxR6dOnbTn5hE8PIEoIjUnECdNmrRhw4a9e+t+L8nJybn//vujPmzb1jzMT0/XqPYJIV4iEAikpFjd/hcMBpkjlRCfEAgErPf3YDBoKx8CIcS72OrvHDkQ4h+qqqqcn0N0zwSiuhm33HJLaPYwFnPnzr3++usrKiqaNm3apUuXnTt3zpw5c86cOe+8807U9tMDBw5cfPHFa9euFZHmzZvn5uYWFBQ8/vjjL7/88kcffdSnT3Qemaqqqrvuuuupp54K/W96enpRUdGhQ4e++OKLAQMGcALRG9TcAmBx9lBEioqK1qxZE6VALCw0yzBKS0uzs7NlnaK2JlwuTZOqrLvCFqZAYfsFapijiMsNn8LDkaQh/lmcFN36JCYyOkOTrBRFI2V15CZ0igL0QsFaobNgQ9BOy3b0EsFnKiKrUKf9FU51EjkkOOQvBD16EW/pffwDVYT1j63VAi4tEOIfnJ89DOGSqKO7GDNmzFi4cOFPfvKTN99803jA9u3bb7jhhoqKigkTJjz22GOZmZnHjh2bMGHCrFmzRo4cWVBQ0Lr1f1+Jx4wZs3bt2ry8vJdeeik0t7h3794bb7zxww8/vPzyyzds2JCW9p39Effdd99TTz3VvHnzyZMnjxw5Mjc3NxAIFBYWLl26tHfv3qoT8xQuuZW0hIuc2N/CHPVJfr45nzYViIT4h0DARq5vZjIixD8wOBBCjNjq7wwOhPgHVyREdk8VZsXkU2Fh4b333tulS5fJkyfHOuZ3v/tdWVnZoEGDpkyZkpmZKSJZWVkzZszo1avX0aNHH3/88ciRa9euXbBggYi88MILEWViXl7e66+/3q5du23bts2YMaP6N3/22WdPPPFERkbG0qVL77jjjtzcXBFJTk7u2LHjmDFj+vfX5ArxGN5WIEZo3Dh8IsOGDVuyZIlFq5pFVHbt2mVcFTx+/Hh2drZ0VWTLKUINNWLYnQrbLNRQUwkUztPniJwKrgpXrFh8gZ0Sy0TiiRWc1BFQRWgRuMwlzL/R1ta2J6MuNJng4IfFCsXvAqcjhPWSotg700gEUyASQnwAgwNxkgPoY1G3ZQcEbq041GD8xS1FmpW7RYHojlZomnHrrbcePXr0jTfeCM0M1qSioiKkTLz99turX/bU1NRx48bde++9r7322qOPPhr6cNmyZSKSlZU1YsSI6l/StGnTyy+//LnnnnvllVfGjx8f+fzxxx+vqqoaP358v3798HNICBLkARYvBWKHDh2CJpo2bRq3thJC3E0knliBOgJC/AMViIQQIwwOhBAjrlAgitOqQ7UC8cUXX5w/f/7//M//DBs2LNYxGzduPHr0qIicf/75UX+68MILRWTHjh27d+8OfXLo0CERad++fc3v6dixo4isXLmyoqIi9ElFRcX8+fNFZNSoUevWrRs/fvy555573nnnjRs3bunSpeApeZYEmUCsrkC0blVTgVhYWJhsoqSkJG5tJYS4G+oICCFGGBwIIUaYA5EQ4l7cs4UZUiDu2bPn7rvvbtOmTfU9yDXZvHmziKSmpoZmAKvTvXv36seISPPmzSVGAYxdu3aJSEVFxdatW0OffPXVVydPnkxKSlqxYsWAAQOeffbZTz75ZNmyZdOmTbvgggvGjRvnq2WhBNnCDCsQo4qo5OfnG5cQw0LZ/qV4Ex3Bc7WAfuh0AxoGbkN2N6zC7EbgeiaOkFb3IWYOKpya93NYA36ZLVc4hXMLf6Nw+hVq2EGkK1SFeddwORG93cEqX4N2Ioo8JC0UTrehhoMVTuEzFT6OSdxAqjDvv0WOTgf9aQK+I/lPHCn7tknhtCVq6MgeW0ecwnirtZIoTwqXLFtAzbjtttuKiormzJnTokVtY5TDhw+LSE5OTs1o3KxZs5SUlIqKiqKicF65s88+W0SOHj364YcfXnrppZEjS0pK3nvvvdC/IweHdItJSUl33XXXqaeeOmXKlEGDBh0+fPj5559/5JFHpk2b1rlz5wcffBA5Nw+SIBOI8cqBWEcVZkKID6DIiBBihMGBEGKEwYEQYsQVORDTM+WFVeY/BYNy+1lxdjfoBzI2Rp2T4sN2v+yVV1559913R4wYcc0119R+5MmTJ0UkNTXV+Nf09PSKiorIvtJBgwYNGjRoxYoVN9988+zZs0O7ng8cOHDzzTeHFIgiEjn4+PHjIhIMBjMzMxcsWJCXlycibdu2ffjhhw8fPjxlypRHH3104sSJPsl6lyATiBH0CkTjkXGowuyt7LaE+BgqEImWJqghLF1UAmu4MhRO96OGmqo4bVDDHBGBFIhZCq1lDmooIheggwe4BJAobiTHVITwyXJsRr5DIBCwXoEtPHJI1QkJvYUjskcbGa1r4K33L1hr2dtTp+lNqqqqnJ9DrCiVv06I+de4r2hsWiF/udX8p5xcGRAt4aqF/fv3T5w4MSsr65lnnqnz4IyMDBEpLzfvjiktLZXIvlIREXn11VcvvPDCHTt2XHDBBa1bt87Ozt6+fXswGLz11luff/55EcnKyqr+zSJy/fXXh2YPI9x3331TpkwpLi5evnx5dSVjAuOZCcRGjRpZ2VuuVCDu329+oaECkRD/YEsa4PyYgBDSUDDNGSHECIMDIcS9BIOydXXMv8Y9IJ04LFtjKA3bdbf1TRMnTjx06NAzzzxjrHYSRU5OjogUFRXVnLQ9fvx4qCJK6JgQXbp0WbNmzRNPPPH2229v27bt5MmTgwcPvuuuu7p27RqaQGzbtm3oyMjW6T59+kQ57dChQ9OmTY8fP/7tt9/aOjXv4pkJRIuZKZUKxFj76mNJYW3grYUsQnyMrXJpbqmtRlwFvKTfO67NsI5ZfO9Wtitm7c9RdVhb/T2sQMxeiPvrqDjTAtRWczPY3plESIKA5EBsPk2aT6vXVvmdvr4ZoVFISGonyas5EFetWiUiDz/88G9/+9vIh5GSFRdccEHjxo1Hjx4dKq7Su3dvESkvL9+xY0fnzp2rf09BQUHoH7169ar+eU5OzuTJkydP/s6G66efflpEcnNzO3ToEPrklFNOCf3DuEct9KGxkEZC4pJbyRJW9g0pqzAfOXLEeGSkhjchJOGxJSqkApEQ/8DgQAgxQgUiIcTVJLnmP/vs379/XzUOHgzXHDx06NC+ffuOHj0a+t8+ffqE9ox+/PHHUd/w0UcfiUjHjh3btWtXp7uXX35ZRK688srIJ61aterRo4eIROoyRzh8+HCo1kpktjHh8YwCUaxN6yoViLEyX1pPaxJ/4OSJInJI4ZdrWcSvUIFItCxH47bmbtKkI9yIGmqSNlraV2Dip4rL9Cn602QPlT6Lkf5+crhUolWYu3otvHRyugG28doVJm6FIwdCiKtxybKFzWbUnLATkW+//bZLly4i8tVXX/Xt2zfyeUpKypVXXjlz5sxnnnlmzJgxkXXcioqKF154QURGjRpVp8fp06evWLEiJSVl4sSJ1T+/7rrrfvvb386ePXvy5MlNmvw32Xlos3N6evqQIUPsnZtnccmtZJU6RYhKBWKodk9N/CNJJYRQZEQIMcL+TggxwpEDIcS9OK461CkQrfPQQw+lpqauWLFi4sSJoYmd4uLisWPHbt68OSsr6+c//3n1gz/88MOpU6fu3LkzlCtv165dv/rVr2677TYRefjhhyPblkPcfffdrVu33r9//w033HDoUFil9c477/z+978XkTvuuKN6dsXExksKRLEwkadUIMYqverkk97GCdVAI9MgdbIevSs0OVl2oE47KZx+qbj/+/MmrDeKFb+Lpm4p7FdVLNVTnOvEmcI570SRe7EV7hOX121UnGkuapghgumGMhQ5EAkhHoEKROIk8H415uj3Dy6RjdXznEq3bt1mzpx5ww03TJ06debMme3bt9+5c2dJSUl6evqcOXPatGlT/eCtW7feeeedd955Z0pKSkpKSklJiYg0atTooYceevDBB6O+OTs7+5133rn00kvffPPNefPmdevWraioaN++fSJy2WWXhaYRfYJLbiUb1L6bWKlAJIQQjuwJIYQQQgghCYLjwsMGUSCKyE9/+tMVK1Zcc801TZs23b59e/PmzceMGfPll19eeumlUUcOHTp0woQJ/fr1a9KkSSAQ6Ny584033rhy5cqomioRBg8evHHjxgkTJnTo0OGbb74pLS0dMmTI3/72t3fffTcOFXe9g8cUiCJSWVlZy1+VCsRYtZ6dnFCgitC1NEMNNcIxWEioSabpMxUhojje3kvKt4D+4Hyj/hH0eQ64TPAxhdPWCttlqGEPhdNN6FXSLH3CiRdbirTlxkNCCCHug0JCUjtJrpGNxaMZnTt3rn1y5nvf+96cOXPq/J5TTjll6tSptlzn5+fbNUk8XHIr2aOWTIhKBWIseSPLpRHiH7gRiRBihP2dEEIIId7DceFhQykQSX3jPQWi1JoJL7SpMgAAIABJREFUUalADG19t+WRRKNRunlrAa0FauiIcExzbQsVv2m+EycLNzhzrOTMQFKhl4iUgj7x1hajHkVXZn0zangm7lOV4K85agj3ms9Rjx1QQxFZpbCFf9N9CqenooZHFU7NiY4tkCHibEJkQryFf0aDImIzODCSEEIaGpdEHZc0gyjwqrAuliRQqUDMzs42HhmruAohJPGIlcrACBVJhPgHypMJIUYYHAgh7iW0hdkN/3EC0ft4UoEoIsFgMCkpqeYDWKlALCoqMh5ZUVFht4WuwJHlX8268cdog89zYijmnwx0jqgINegaXEuShJqEdQTJimiahRqaBdP1Ty/UUFPOuxtuKltRQzirIKx5PIkaikh/he0e1BC+e0WkHDXUZHs0rxJaNbSVz4TJT4ivceoJ5RCIAvHQLXJ8OugPzohNSHU0adn98x6kwy2KY3e0wi3NIAo8PLo19kalArFVq1bGI31VWIcQn2MrZQF1BIT4B1vBwZaWmRDiaWwNBhgcCPEPbnlTcDz1IXMgJgpeVSBKDBGiUoG4b585n1NZWRnQQufRiAHhJSnNehQsJPRckj5v4cjl3ahw2qfhFIhhkdEpcA45BXAdcK1f9PLCVXdFVwr8YIOPVi7xWlS5zekGNBhwgewMESw4EOJPfCaRsyUyCgeHltOk5bT6ahAhVqCKsP5xiwLRJUMSlzSDKPD2b1izQ06aNCkvL8+KbU5Ozv333x/1Ydu2bY0Hp6enA80jhHgRiowIIUYYHAghRmz1dwYHQvyDKxSIjqsOqUBMIDysQBTTA3jDhg179+61YltUVLRmzZooBWJhYaFRX1BSUpKdnS3fpEtVg0sRuzoUdLy1JEUVYb1S6YRTnYpQA0VG9UUXh/x2dsgvwBzFwOo0hV84B6KGDNTwHEVw0D1SkeCwb7iULgL92ZiurMHXqOFliksEK8c19ce9NVzxD5q9C47kDdKVfmaCVOI74FT7mr42X5O0scENk1Kkf7lbFIjuaAVJABLkAVZZGZ7hsLuFOeqT/Pz8gInMzMy4tZUQ4m4oMiKEGGFwIIQYoQKREGLEFQpEcbr4cvX/iMdJkN+wceOwlFJZRGX37t3JJk6cOBG3thJC3A0ViIQQIwwOhBAjVCASQtyL49uWuYU5gfD2FuYIsAIxagtzu3btjPqCJk2aiIh0KcWbCANnfBfntj/7BEfqzDiCz1KhBwKBlJQUiwcHg8Hk5GRZ10tKt4D+skA7OYQaisj3FbaC3g9dFT6/VETCbgq/GK+irdU8ZHYobL9EDTspnG5FDZsrboZPUcN2Q+UHiwOBgPU5xGAw2KhRI8ldiLrUoeluMM6lniC1sVrRZQagv6nPcsuE+7vlg22tRhDiRnS7/kE0STZ8jktm7lzSDKIgQVbA4qVA3Llzp/HIkydPYg0jhHgOiowIIUYYHAghRhgcCCFGXJQD0SX/EY+TIArECEoFYseOHY1HZmRkiIgcVBRRgVdp4LytSvwjr4Pxz5n6DESBeEwEznOQgxoeQQ1F5IDCtjVquE7h1BybrQHL+uDw2wY1bIkaikgThW0JathK4bQCNUxXOIW7WzMREUSBSIjjwCpCUdRCcUqB6EhhB5FAIBBRM9QJFYiE+IeqqipXzCG6ZDzigitBlLjkVqobi6NwpQJxzx5zKcrSUic2LxNCnIA6AkKIEQYHQogR5kAkhBhxxeyh46pDKhATCM8oEC0WLFMqEHNzc41HpqWliYi0cmIa0ZEEE0J5nQUcWuUGWa8I2H39dTMgCsRzN9drk8z0cMCniqG+uZE8d6aO3EvnO+FUlxmQCkTiOzyXytChYTNzIBIngTMv/9QJefIQ3Kdq6uIj1PBt1LBRitxe7hYFoguaIOKaZhAFXhraWnnWKhWIBw8eNB5ZVobuXCaEeA1b7/yuGBMQQhoEiowIIUYYHAghrsZx4SEViImCZxSIImKsjxyFUoHYokUL45GpqanWv5b4BafEoRg+UxFqqKqyca1sHewmNA9w9JQXKZxe7NHrTBIKW/2dCkRC/AMViMRJNEJCGFievD2uzWgAJjjdgLjgkpk7lzSDKPDY0LbOx61SgVhcXGw8srKy0vrXEkI8jS1RIRWIhPgHBgdCiBEqEAkh7iVJpJFr/iMex0sKRLEgQlQqEMO5DmsQftL/M12C6F5muJrnDtRQRDSrm3B9TA2ZqOEhhdMb0QW0j9CXQ02x1ELUEC4LK4oitiKSgRpqftMs1DBvrPSa4VlRoS2cOEenVISb0K7a2w93ArEBEhw2Dpcji0B/mthrHs5YAC5ULSIFqOFpCqeqvJYN3seXoeEI/kFF5CyvhTI4aItivA2Pr9K7S78Cf+xdIAkHnM9dHNqJVawJDv7ud1zTJHHCe5PAjRvXNumpVCDGUhpaLOFCCEkAqBsihBhhcCCEGGFwIIS4GsdTHzIHYqLgMQWi1LWbWKlAjLWnIDwseFME3srcHTVcjxqKiKb0i9UitDXQKCaaoobHFU5vRA1noYadUEMRWYsa5iuc7lHYwtoQc0Eja+ShhgNEekGGK3tJyRbQ6amgnep36aKwhZdwv9QsdOOmshw17I0awiIjTTVvTSVlWCn8ucJpT9RQM3LZixrmDpWLFiO6oU8VurwTqKGIwKmb4eGKiKxEDXcpnLZX2H4f7aqw9OY90E7SUUMR+UIRe3NRw3Lcp8xW2LZDDc1JjCyQK/IEJCo8dIscnw46NedstwY8UNcozrYrbsKuqN8ChdPmqCF8ld5UtBb+TTWavAFog+Ehh4jsVNhWog2GRx1JKXKuJhTGFZfM3LmkGUSB9xSIUmsmRKUCkRBCuLeIEEIIIYQQkgg4rjqkAjGB8J4CUWrNhKhUIFZUmDP/hScUOojUXQg6BvBUrUYopNl4DXdvTeJFOHONI1WyL0QN4Qx9ItIHNeyscLpbYQunbdL8prB+NlcE24h0qqK7HUMNNYlK4b6mQaOg0dwPGs0vBqxk2ahwqkmRBgf81QqncDZYTRpZWPiQJoIFhw6Kx+I+1FAUV6mjwik8RhqgcKoJLBppM8ZlqKEmaH+jsIXRVB/8ncK2LWoI50CEg0Oy197DNOnnNFuFYDQ7sY6ghnBU+Yli9Xol+tNo3tocyRPdWHETwu9fiZE80SUzdy5pBlHgSQWixN5rrFQgZmSY3y3qrP5MCEkYbOU8pVyREP/AOgmEECPs74QQV+O48JAKxETBWytf/yUYDCYlJdV8WisViMePmxfIwokXBypERvC4AlYniU6mAXdvzSI5nHBEs9ANMwQ11GSuOYAaan6XbIUt/JtqRCVwLph0kdjrE0bCooODinxP8CXSJJGBJXKiuJecKmqc3uCjFfjyaoKD5n6AU9d9r+5DYgInfPy+wimcAzFVxKbIKHxwvkNiQDg95WWKfvox2tc0Z6oR9Tc83VDD/QqnmryWcGBxZD+KKJ7FsM49RQQLDho0kihHtiC0dGLaQFNTPt9TM8LwfjXNYBvOa6mRfmv2o/wTNbwIvntTpJk7ciAmuUY2xglE7+OSWwnB+PRVKhCzs80zJSkp8JZIQojHoAKREGKECkRCiBEGB0KIq3FceEgFYqLgVQWixBAhKhWIRUVFxiPDuRH/o8jv8yPUEF4tEZ168SRq+JXCKax0g1srIv1Qw+2ooaawJpyO8HSF03cVtlejhppFUThzTZZIM3spC8IrGa0U8mRYVapJcuqIAGGTYtSgaXDDr5TB0pvTFE41Oqw2qGFLhVNYKaxRNsGrgY1FbMqTwwfvURRM10gtYInHIkU/hVWl5ynmUzTl3fs3+DyOeZhpAc1Cdl/Faa5HL6/GKVzIXkSGoH7zcZ+CKRCbT5Pm01RePYQjgj5vqQg1aLaVwDhSHTsPN5Ufow0uRBucJNIsHorjuOCOVrilGUSBhxWIYnpaT5o0KS/PUmjJycm5//77oz5s08b8FpWWpslOTwjxErWUaaoJdQSE+AdbwcGWlpkQ4mls9XcGB0L8g1veFBwXHlKBmCh4WIEopgfwhg0b9u61lOKoqKhozZo1UQrEwkJzDbbS0tLs7GzJ00l+MDQrLZqfF9aGaBIvZqKGjozEznTCKSwqaa14el2tCPbwb6pBl3jRlgIxLDJqAgtvHBIDOoJTORB1uhKEq90xWLTOhU43wCMgwaGrQuCpebTBGyZaKZw6cuM3fAfXoNHlOYIjDYZVhM6ByJMJiRewGNAReniqtaKVslKB+B1c0gyiIEEeYOEiJ/a3MEd9kp9vHoemp2u2UxJCvARFRoQQIwwOhBAjVCASQoy4QoHouOqQCsQEwtsKxAiNG4dPZNiwYUuWLLFoVbOISmFhoVFfUFJSkp2dLd9TrK7D+q/zUY8ickDRR+EGa5yWoIadnAjNmhJ4uFMHfDpzeTWUqp5OiMiIEE8DZxzT5EDs40RgWYOeabOh0n0xpEBcCHr0IieceDPQ6OtJ/eHIENQ5qEAkhBihAvE7uKQZRIG9CcRWrSztbElOTm7evHlubu7AgQNHjBhxwQUXIE2zA6xAjNrCnJ+fb9QXZGY6sg+TEOIAgUDAeuH1YDBoa06BEOJdAoGA9f4eDAY5TUCIT7DV3zlyIMQ/VFVVuWIO0QVNIImBvQnEQ4cOWTxy//79W7ZsWbZs2RNPPDFw4MBZs2b17NnTfvOs0kAKREKID6ACkRBihMGBEGKECkRCiKtxyQSiS5pBFNibQLQ4dI4S8X3++ecDBw7897//feqpp9pyZx0PKBDno93lLIVTzR6QYrTBGqc7PBVU4EukwZF9055Dt/vJMwpETX9xZFt6oaLBugzWpA48WLIA5AxtcLCtQDw5XCqjEy5bxXMB35Ft6cSdeG4b8ir0CZXWXU4roAKROAmch0RThAqu3KJ5gYKLfIoHg1IccU/yQZc0gyiwtwJWaY1AIHDkyJGVK1c+9thjXbt2FZFjx45dddVVtrKP26K6AtG6lVGBaDyytFQTrgghXoIiI0KIEQYHQogRBgdCiBFX7F8WpwunsIhKAlEvRVQaNWqUnZ09cODAgQMH3nnnnddcc828efM2b978+uuvX3vttfXhMYJegWg8MlyFuZViGvEy3NQZHBE+wKqo7YpoBC+gwZdIk1nckSIqPgNRIO7uJRVbQH8tQDuVinCj4ib8D2o4XNHg5xUNhktR9fbxYnUD8G/0Nz3Hsd8FUSBm+KmICiHe5UytPDmiZqiT8MjhyC1yYrrGKYgjin5uQahXDqCGcPlKEemqsIXZobBtjRriL24p0rrcLTkQXbJs4ZJmEAX1/hump6fPnDkzKytLRN599134eywu1ikViHv27DEeSQUiIf6BOgJCiBEGB0KIEeZAJIQYccXsoTitOqQCMYGoFwViFC1atPjBD34wZ86clStXwl8SDAatHKZUILZubV6bSE1NFRFZmy5VZda//zvAQwV4TUlE2ips4UxGGmVTAWr4YycWJ+EUHukKpxr1IozPkoZYjDaRg5OTk6Xd5vprT0w2KW6GDgq/5kwP9YwmDy2FhO7EOSEhjK3MZazCTIh/QHIgNp8mzafVa6vMwLt24C07pL75iad+Gs0utzPj1wzr6N6DXKFA5MwdiR8NNLQ95ZRTROTAAc1kmKWVf6UC8ciRI8YjKyoqrH8tIcTT2HrMOz8mIIQ0FAwOhBAjVCASQlyN48JDKhAThYZQIIpIRkaGiJw8eVLzJVZqsCgViE2bNjUeGU5rsknEhjLpu2Sghq1QQxGpVNjCSrfjCqfnKGwbHnhfe7nCaSpqqMlysl4R7HMVfhue9LHSbEZVlY2VRlsHxxmNsK5A8Zte7MQpj/HU6jpJUJzs74Q4Apy6zmd56zwzchCHhIQ+ux8QNGkiD6GG/Ty1hUscytGfGLhk5s4lzSAKGmgFbP/+/SKSk5Oj/J46RYhKBWKsKc76qx9NCHEbFBkRQoywvxNCjHDkQAhxNY4LD6lATBQaSIH48ccfi0jXrtpyTXVO5CkViGlpacYjw3sNBojAyx6wcEyT+UsDnKdP02CNNM9DcBnW3SDSgB29pBytwpwH2uEaWI1TLwJLaPuiXRXWEewA7UQ8mFKw4X8XNVQgEseYrnjrullx33puxOKQZNJLCkTiTjR3YH78mtEAUEXY8Lhn5s4lzSAKGkKB+MEHH3z++ecicv755+u/LbybOAZKBWKs4gl80hNCCCGEEEIIIcRjOC48pAIxUahfBWIgEHjllVcmTJggIo0aNbrpppv031lZWVtiP6UCsY4JxM9E4K3MzVHDPaih6Lpob9QQTsMhIjtRw5GKU4VX/GCRpib3xzHUENbAioi5tpA1eqCX17kMKcjeok5OVGFu5oBPT9LwgjU4qnhLRKDEOSEhDDceEsfQqAh9heckkz5htSJ4DuBvSogal4xfXNIMosDeBOKf//xnK4dVVFQcO3asoKBg2bJloeyHIjJp0qQePXrYbqCJ5OTkWHuZhw0btmTJEovfU1OBGEveyHJphPgHbkQihBhhfyeEEEKI93DJzJ1LmkEU2JtAvO+++zA3o0ePfuyxxzDbmtSSCVGpQCwrKzMeGVYmJituenjuVFPENkth2wQ1hHV5oig5rdFpwpKfVaih5hLBaSI1VZjhm0FEDqJ9RlNy6QTqtNVY6TSjoVOhw1pLWI4qSqUb51DqgnVLExQqEOsLFuUkjrMDvQkbd5f8AgaHOqCKsF45gN5+rfm7+APuHSbxo96FdQMHDpw7d+6sWbNqz11ol1iSQGUOxIyMDOORdVZ/JoQkDLFSGRihIokQ/0B5MiHECPs7IYQQP2BvUu9Pf/qTlcOSk5OzsrJyc3MHDhyYm6tR0MUkGAwmJSXVfForFYjHjpklPeHEiz/VFD31DZ2cbkCDcSEHi4mJrQWDsOhgRS8pQaswtwft8MyqIioV4Rp0EVOz+LlPYQuf66VwKkMGh8TEVj4TJj+xAVWExHE6NVz2ZMoVSZyhkNDFuKW/u6MVbmkGUWBvAvHnP/95PbUDwDiBqMyB2KqVeQ9taqqmAgUhxEsEAoGUlBSLB1N0QIh/CAQC1hcYgsEg5xAJ8Qm2BgPBYJB7mwjxCVVVVa6YQ3RBE0Rc0wyioH6rMNcrRhGiUoG4b59Z5RLOjfj3dAmYkyTWzWmgnaShhqKoGS2KlHmZCqc7UEOrsz0mRnhqAgjO0aP5XVYobAehhs6tptoa1ocnCDqIVKD+TqKGcH8RkdaKBzgclL7FfUpThW03hS0h1UCCw8fDZd8i0J+m0jo8dTlcEXufRQPLANwnnhpYRE5HDSmZJN/F1gQBlxYI8Q+umD0U18zc2W/Gjh07Xn/99cWLF69bt+7gwYMZGRk9e/YcMWLEnXfemZMTnTL/0UcffeCBB4zf87Of/WzmzJnGP33yySfPP//80qVL9+3b17Rp006dOl100UV33HFHp07+2VlpA3sTiKEO8Itf/OLRRx+tn/bYo+YE4qRJkzZs2LB37946bXNycu6///6oD9u2bWs8OD1dU/aCEOIlbCkQqSMgxD9QgUgIMWKrv3PkQIh/oALxO9hsxubNm0855ZTIhE96evqxY8dWrVq1atWq55577sMPP+zXr19Nq9TU1GbNotdga34iIlVVVXfddddTTz0V+f6ioqJDhw598cUXAwYM4ASiEQ8rEMVU68Di7KGIFBUVrVmzJkqBWFhYaDy4tLQ0OztbdolUYi0V2YUarkQNRcQ8HWqNFqjhCYXT1qjhEYXTEajhOWgk1tSM7owawj+o6Aoi34ga9lM86NajhteNlb/MQERGfxWxFHhMfI4aakR5/1HYwgrElgqnFypsN6GG81DDV9C7V7NWBat9RWQ1amhO+2GN3aghLNoVkWLUsP1QuXwxEhwWi3yJOu2JGopClwdXsReR7ajhftwnriIUkcOoISwO/RF6eeFsuSJykcIWHl9pJs/hTTCiuPPNbwAWaNVdflWAJEj9xy3y+XTQ6TjQTkRkA2qI7sISETEnmbfGWtRQ87D4Pmr4M1Se/J4i9sJPGU2OrnNQQ80Q9GOF7VWoIfzi1ihFrit3y+yhC1ohYrsZFRUVjRs3Hjly5LXXXnvuuefm5OQcO3bs7bffvvfee/fs2XPllVdu3LgxLS36zeTKK6987bXXrHz/fffd99RTTzVv3nzy5MkjR47Mzc0NBAKFhYVLly7t3bu3vbb6Bm9PIEYIFzlRb2HOz883HkkFIiH+gQpEQogRKhAJIUaoQCSEGKEC8TvYbEb79u23bdvWoUOHyCdZWVk33HBDfn7+sGHDtm/fvnDhwhEjQDXQZ5999sQTT2RkZCxdujSiZExOTu7YseOYMWOw7/QDCTKB2Lhx+ESURVR2795tfKKfOHEiOztbvi8SLXm0DJykT7NurEnRA9tq7ilY4AlLFzU8ghq2UTiF5RIHFU41v+lPUUNN/faNqGEXESzN2WUK7S3cxzVVmGG9pCjWqzUKmgKFrSaKYsCjtCYKpxrNDiy96ahwCgd8jSYalieniGDB4RSFsFSj2YGvEvyUEZFs1LCXwuk3CtuBCluMh1BDjZYKFlOLYgCQpXA6TGHb8Fl6m4hgJdp7KFqrCQ7wKFTzEP9UYQtvQdD0Gjh5PUx3hW0paqh5VTwXNYbzuYti5CCK7tYXNXTJnF0IVzXGMs2bN2/e3PDCM3To0NatWx84cGDz5s3wBOLjjz9eVVU1fvx44z5oEosEWRuHFYhRn7Rr1y5gokkTzVsdIcRLBAI2yg/VTKRACElUGBwIIUZs9XcGB0JIQ5Pkmv/idUJJSRIjs+HKlSsHDx6cn5/fo0ePESNG/O1vfysvj05vUVFRMX/+fBEZNWrUunXrxo8ff+6555533nnjxo1bunRp3FqZiFCB+B0KCwuN+oKSkpLsbHhhnRDiJRCRESHEBzA4EEKMIApEQghpGDybAzEWS5Ys2b9/f1JS0oUXGiTK33zzzTffhLcnbN269b333vvrX/86b968jh3/u3Hmq6++OnnyZFJS0ooVK+6+++6IHG3ZsmXTpk275ZZbnnvuOcZqIwkygRhBnwPRqC/IzMwUEVklYkN88F0GoIbfooYiosmvAu9SLFI4hQt9wInbRaFLh5O+a34XuKiOZrurZvL8KGq4Q+EU3tGWIjIQyoHYVpFcHC4toqkddJbCFu7jmvzrpypsG37MBKczh1OSi8h8hS28J+hrhVN4g5hmBxMcWJqJYDkQd4tsRZ2eghqKyHHUUFN+7QBqmKFwqslyrglKGPAOcU0c09SZgV8UNHlINCMWWNtnzoJugXQRLAdiR8UAAM47IYpLpOkvmipqcDkpzduB5gbGgIO2KLYUOpLkP1Nhq8nWApd9cyRuxx2XNCYezSguLp4wYYKI/PSnP+3Z8zsBom3btr/5zW8uueSSLl26tGjRYseOHa+88sof/vCHdevWXXbZZatXr05NDc9x7N69W0SSkpLuuuuuU089dcqUKYMGDTp8+PDzzz//yCOPTJs2rXPnzg8++GAcmptwIOOCL7/88rnnnsP83XbbbZhho0aNrAj+9QpE45HhKsyEEB9AkREhxAiDAyHECIMDIcSIKyqopDaTu2PkrKwKyl/jXdOp9/Vy6cvmPx37VvndlZWVo0aN2rx5c+fOnadOnRr115/97GfV/7dHjx6/+c1vzjnnnEsuuWT9+vUvvfTSzTffHPrT8ePHRSQYDGZmZi5YsCAvL09E2rZt+/DDDx8+fHjKlCmPPvroxIkTmzZtqmxw4oFMIC5YsGDBggWYP3gC0WK6EKUCsW1b88p7uDr4VYpcsz1Qy00OBR14JVaTfx1ekipWOIWJnn+2TGtFyuJc9H7Q1JmJzhphh3z0ZA8o7nz4fvg/kZFtBWK6QljaCTXUlA7oorCF0ajVNFIsWP8FMxE1hPuLiBQquozGr7d4TWWNKBCvVDwsNHnS8A0TipuhM3oT9tHcgZphUoPf+bAYUNNJtysuUVffBAcdgUAgkk+pTsIjh3KFnEpTSwrW5WmcaoBv/v2KOx/e5AGPtzUD9bWo4WCFUxjNe9C4+DWjoXBFFeb/z97dB9d11Xej/yl695ssWbZlK7YTx44d54UkNnmBJEBs0oRQCoGUCw3JxcWdPkBqYIqf+3TmzsDDcAvPlM48hJkmddKZS8stpS0hvJNYSfMKAQelIQ5xFJzYifwiy5Zsy3o/R/cPnQpbWkfa+/s9Omuvvb+f6R9U2ctrn3P2Xmefvb/rt4ZP2f8uvg8l37u9/2R7/8n9nxausbvwhRFzudydd975k5/8ZOnSpT/96U8bGyONSu9+97tvueWWH//4x9///vcnbiDW1xfmPtxxxx3jdw8nfP7zn7/nnntOnTr11FNP3XzzzfDeplVIT8CiXLVv2RJj5bapCcTubvdStUND5Z/lIiJ+xIoG+L8mEJFyUZkzEXHS4CAiieZ97RR6EZXxu4f//M//vGTJkkcffXTdunXR21577bVmtm/f75+fNDUVSqdt2LBh0sYrVqwYDx6+/vrr+O6mF5JAfPvb3x7rPl2pRFn9kEwgThxJkxRmy494eFZt6z09+4XzX6uIHd6PdurlCTnzAA3vFG4YWoiASZVyx8PYWIzmhY1X7MX7g4NjTDoJLlVmZu7nLBEwH8t8ovEVRL8YuEzkY8SFFRNeeB7tl4my/hxtCNfDMrOTaMPmzXb1rliDQyGBuIwo2sicp3ACkUEFCWFBfbt5SfsqRTj7kBqIS3bakp1gf0yqFJ73wNQxZH7OwJdJVwR15DM/oP60dLuRcPBPRSMmuuGVIqttPjONq3SSs4gKanR09GMf+9i3v/3t8buHU+/6TW98fD7zKu6iiwqTm5zTzsb/GOXuUwYhNxCvu+66L3zhC6Xek0gqKyun/yDJGoi9ve7A+sjISMR/U0RCFytUqASiSHZocBARJyUQRSTREnJJAu3G6OjoRz7ykX/7t38bv3t48cWxl1bcvXsjnO2BAAAgAElEQVS3mZ25CnNzc/PatWs7OjpefXVyqaPjx4/39PSY2YoVK5DdTbvAVmGe8TYwmUAsrLY8RWH29EWD0f/xkmEqwQWHefhWfnB5SuZZFFzIddjTgQQv582sRgc/n5y31RY9ECtkVHB6neVfATuFF6q+AG1o3AKOXuonniIOYLhY5GXoiHQJ3BBsF6Q8+pkyCzheX754ckGv2QDTZzYwJzgTTxYpEWTuAoO5RoKD2HBDMztEnONerjrCAidSg4snh/VTMVESckch/m6MjIx8+MMffvDBB2e8e1is3OSvfvWr73//+2Z2yy23nPn3j370o1/84he/9a1vfelLX5o7d+7E3++77z4zq6uru/7662PvbgaE9wRs+hLFZA3E0VH3RKOIS7iISAooNyQiThocRMRJg4OIJJr30odQDcTodw/N7IUXXti8efO3v/3tQ4cOjf+lp6fn3nvvffe7353L5c4///yJFVTGffazn128eHFXV9edd9557Nix8T8+9NBDX/7yl83s05/+dMRFWrImsASiFb/HN45MIBabU+DzsiC40nXZAd9VhmNNRmTrfK2yCkdomXep/PqIMmdwIpXJAsDLrJuZjyg2FTLq1e+6dPGXmEByQz3Eap7MQ14vR/3DaK+xZyOd4STxUvGRMKhvKJl9JQgVxtJAtIXnPcBrRpuZo8hYZEoZz+h5tCEzP8lXmX4BJKcGYszdePTRRx988EEzO3Xq1Dve8Y6pG3ziE5/4yle+Mv6/x8bGHn300UcffdTM6urqampqTp06NT44X3DBBT/84Q8nTTZtaGh46KGHbr755u9+97s/+MEPLrjggp6eniNHjpjZrbfeOn4bUaYK7waiTVsJkayBKCJS7p8BIiIiIiIisyTMG4gTP8oGBgYGBhwVYfr6fl/QYfXq1V/72teefPLJF1988ejRo6dPn160aNGll176/ve//0//9E/PnKQ84dprr33ppZf++q//+ic/+clrr702Pm354x//+F133aVitcUEeQNxmkqIZAKx2FRl3VCQUmLqWsLFv5hly5iCI3CElimJBUfk6rba/AfKnTiGy0QuIDplVnedjzb0lafWBYCUCDI4tBILZAc3BeGm0HZYxKOubXbifrDtMaJfOIHIpAiZ9CK8CnMX0WlYKzjDZSKZ+SgSljBvIN58883R78MsWLDgc5/73Oc+97lYXbS2tn7jG9+It1vZFurvqmK3hMkaiDU17p/yhUVURCQDYtU81dMFkewo9zoJIiIiIjzvpQ+TM41aOPESiEePHrXiSxWXUz6fr6iomHp1TiYQzwzBnmn6wouSURv043A2MSVv4IicmRV/PuFUSCQt3Yv3twD9OvX3FgXmOp2qiQSvVe1PrARiYeMjRLlSJq4OL/28kfhcXkJ3eAXeJ1cNNryDUJIJGRzyZkWnVM2kDm1oxPSFIaJTJr2In6dB3a5gBnz4QGKqWnu5kmTmJ6mYpkgpxLuB2NzcPPWPQ0NDzz333MGDB48fP25mTU1Nra2tV155ZW1tbWn2sQjnDUSyBmJDg7socXU1870nIiFRAlFEnJRAFBEnDQ4ikmgJuZ2ekN0QAl4DMZ/PP/TQQ9/4xjeefvrpoaHJz6Rqa2uvu+66u++++33ve98sFRRzhhDJBGJPT49zy5GREWAPS4N5HsWUT4Kf8DCPd+AqJ15CBL9A95a5tX4u2tBXLS34AIbXJjbiIfn8rbb4gVglCwrj2/F1lnsF7PRlsJ0tZtbOw5viy4/CJ7hxBR9fQxvCS4GHNZSZ2S/RHXY8VYzsONpwE/EuPYm+0oWb7dJdseLJhY0biDH/NNrQzJ5FGzYT5ykTUIJRZw38YnUDSM6CJBDriAwXc40E1686j+iUqQUFR5uZtarhy1f4epu6UPdxse3lCv9Vom0e3eFNcJfVNn+43KXVnZIzfTghuyEE8Dtk7969mzZtuu222x599NGpdw/NbGhoqK2t7f3vf/9b3/rWjo4ObieLmnpCbt++vaWlJUrbxsbGHTt2TPqjM2JpxWsjikj6TLNM01TKEYhkR6zBIVaWWUSCFutiQIODSHYk5ZeC9+qHKoOYFkgC8bHHHvvDP/zD06cLT8YrKiouuOCCdevWLVy40Mx6e3v37t37u9/9bvxsee6556688sof/ehHN9xwQwn3e9zUL+A9e/YcPnw4Stuenp729vZJCcRDhw45N3beJC0TX8ExL3UiwqpGdE1Qe+tLcKuIxlw0qRAyaiJqINb5SPtS0Wa0oa8THH7mDIO/MZ738bmY2VXoR7OP2GFmUU4YvOJkvRk2OCx9GO2Ss8FHp6t8dEoJ7xtKkilWyKgwOCzcaQt3gv0Ft3huO/FlsQZt+BTep90S1OAQ4MU2aD9xIL0NfZfguQsVZtfFGxxmUTL2Iim7IYTYNxD37NnzgQ98YPzu4fLly//yL//yjjvuWLx48g+Xo0eP/uM//uPf/M3fHDp0qK+v74/+6I+eeeaZiy66qDR7PcXEIifkFObWVvcXcl0dU6xYREKSy+Wilz3N5/NapV0kI3K5XPTzPZ/Px5ryLCLhinW+68pBJDvGxsYScQ8xAbtglpjdEELsG4if/OQnT5w4YWYf+tCHHnjggQUL3IWpFi9e/LnPfW7r1q0f//jHv/e97/X29n7qU5969NFH2f0toqqq8ELIRVQ6Ozud3+j9/f0NDQ3WXWdjaLDEHW2MgCmBNJdoez7a8CjRKVwLxsuTN7gmCxMU8vJKmdJ1cOiMWWcNXlSubqvNj1cDsfCDYf86G0ZrIEYquuDyBPEW/Q5vavBl0FVEp8xCVswZh4Fr3jHPqrwEPFcTnfb7uIpkdhhLIPrSgb69a32swrzBV546M7EdmdEz6IFUt8au7EAKpPoCF71dSnS6hGj7JNqQqdIL5+u5bxmZwaiPTqm64clIICZn7nBCdkMI8b7A2trannjiCTN7z3ve8+1vf7vY3cMJCxcu/Nd//dfx+3SPPfbYY489Bu/o9OAE4qS/tLa25lzmzJlTsn0VkWRTmTMRcdLgICJOsc53DQ4i2aEaiCqAmDLxbiA++OCDZlZTU3PvvfdGfA5fVVX193//9+MJwfHms+HMBGL0VlMTiAcPHqx0mSj4KCKpF1LISETKSIODiDiFlEAUkQzyfutQ9xDTIt4U5vH44ZYtW1asWBG91Xnnnfeud73rkUceefzxx+PtXWSlqoG4fPlyZ75g7ty5ZmbN8MRIH3PofIGnIQcnxklwNi8L1DC8TI1k3iXuIERqIK4iFlGBJ2tfgfdJTSZan5l59AH1SPpn9O39SFDlI4ybKovVQPz1TXZs8nSHqJgiafALrSHe3gNoQ3gtKSMqBoicCV5gwczCqoEIr5rlS3ArxpTfj9Eh9D2hHQyztZ7CtE6hDSuSdAcgIXfuErIbQoj3BOzgwYNmtnHjxrjdjDcptsYxr1QJxM7OTueWg4PErUMRCYpCRiLipMFBRJw0OIiIUyJqIJrv1KESiCkSL4F48uRJM2tsbIzbzXiT3t7euA3jmt1VmJ+uszy6iAr8oLEJbWhmNUTbE2jDk0Sn89CGG308QIOXi2GyVHC27jDepzEnLnwAM0f+MNpwwVZb+gCSQNy7zobQRVQGwHY2gjY0sy6ibTd6ADM7zGQ1/rPsT+bhYvzMYc8kQ89FG8Jl5s2sA23IXH2+CX80m23TLiSBeJr4PmXAC/IwJVuOoQ2Zt4hZYakVPpjQ0w2+AOgH25mZvUy0hYv1MZeg5xNt69GGq9h48kSaYUaFK4febXb6frA/5pR5A2145cybFMUs3QbPmXiT6HQZ2hBeh4pZD6oPbbif6BReIGAf3if1k+QP0IbwL74Ks/OTsQpzcu7cJWQ3hBDvCdj4fcDu7u643Yw3aWrCfxtFfFhHJhCLZSSVQBTJDuUIRMRJg4OIOKkGoog4+b97OM578FAJxLSIl0BsbW3t6ur6+c9/HrebZ555xorn+6KIuGAZmUBcunSpc8va2lozs7frNqKcYXVQdUOYslZeAp7+IAnEdT5qIO7H+zR3tYZo4LzPdcSB9O/EAfzBsh/AXC0tD673scOrPfRJQhKI1z88q7uULBt870DywWFAprbvH4Y2Iv2QGPDhamX/gXY6f43d1oHUQFy40xbuBDtlygIuRl/pYuJA8lIJLqxvGebt/ePS7UYZJKcsYERXU0NoIhKIIqUT7wnYjTfeaGZPPPHEyy/HuAJ68cUXx+85jjeHRblqJxOIxcKVQ0PozGURCU2saICuCUSyQyEjEXHS4CAiieY9eKgEYlrESyB+8IMf/NrXvpbL5T7xiU/s2rWrUBlwWv39/Z/4xCfG84Mf/OAHwd00MzPn+siTkAnEBQsWOLcsxJEO1NkYeicRLq3CFKdg6rnAqajglhiGwW/Rq0ynaMMLiE6Zoo1MFaTyq9tq8x8YG4txDBc2Pr3O8mgNRJg7MB3NJT7O0xeIA+mm0u1GGTyPvlK4fKdxgZTn0YZMqTK4phs8DFrcx6ZnaNxsl+1CBgeRM61BGzKHfXDeS5w7v0CH32vYkNEsbVx6TNItO+BL31a9vZJIunMnJRLvUvraa6+99dZbzezpp59+z3veM74o8zTefPPNW2655dlnnzWz9773vddccw28o+NmDCGSCcSBAfdyBlHuXYpIOsQKFSqBKJIdOt9FxElXDiKSXN5Th0ogpki8BKKZ3XPPPb/61a+6uroee+yxDRs2/Pmf//nHPvaxDRs2nPldODY29tJLL33zm9+89957xxduXrJkyde//nV+d2e8kUcmEAu1DqcozDV4nViNbhXckHiQ9TJxjrqXk4lgtafIZPnBWcsriE7hNdqYB85MAjHAB91INKCbyI61oA2PoA2NyGgYsZbiZ4iD4XPEDv8t3hR0eWiHPZNezBKFCoUV1nWOL8xVBxwkhK+vKtdYU0dICUQvOojPFF7X2EunMiNmvWkvPyvwHa62xczUkpJKyJ27hOyGEGLfQDz//PN/9KMf3XzzzceOHTtx4sRXv/rVr371qw0NDWvXrl24cKGZ9fb2dnR0nDhxYqLJokWLfvzjH59/PjPT6Yw9rqoaHR0t9l+3bNnS1tYW8Z+amkAs9i9HXMJFRFJA0QARcdLgICJOGhxEJNESMkQlZDeEEPsGoplt2rTp+eefv/POOx977LHxv5w4cWL37t3OjW+88cZvfvObzPrLk0xz99DoBOIMVpjBjz3gklgz15ksbj3xlGY90S8sIwVH4OKJDOZxnxf7iB0u/wLZq3yswtyI94lnos1sOdqQOQjfgTf1UNEVHsqOgu3MuGUN4ZVhNxPn2ovouzQH79PD4CAicXm5qOOSTVkMFcbiJdDHdJqRnyReBDc5KbgddkrID8GE7IYQwHLi55577qOPPvr444/ffvvtixYtmrrBokWLbr/99scff7ytra2Edw/HTVMJkayBWFXlvqOq5dJEskMTkUTESee7iIiIiGQWkkCccMMNN9xwww1jY2OvvPJKZ2fn8ePHKyoqmpqali9ffuGFF85emH+aSohkAnFoyL3IcmEK83wigQinHpjMjpfQGbywpmWmNhCzUPXJ0J6IBpd8xEqh/3yd9aOrMF8FtqNWuB4k2l7oo9NLibadaMPyB7F9FU/0UgPRy1LgcLS5frMt26VZipI5ymFFo8EhbTJ2AEv6JWSISshuCIG6gTiuoqJi3bp169at4/+p6M455xxnXUKyBmJ9fb1zyxlXfxaR1IhV81SJJJHsUDxZRJx0votIciVn+eOE7IYQSnAD0Yt8Pl9RUTH125pMIPb19Tm3LBRebGbyM6h0lF2ICE6r/QfR6e1BvcNM6MwL+ABmCrpxYpUsKIQOVptNV511WnAidT7aoy/MDjOVQ5lqsJhT5e7Qm7BqldKdIvFkkaAphxWNBgfJHPhXG/PbNrgVnJNDo46USMCl/ZzfvmQNxKamJueWNTXB3bYREZASiCLipMFBRJxine+xRhIRkRKoSMz/SeBCTSBakRAimUA8cuSIc8titRGTLrinNHCnt5d0N5LMy+eynziQAqxrGatkQSGuuJRYhRnGhPKYQpxe+EukIsqfefQlY4saI4NDpryEDkobsnUgSfrEChVmcXCQ9Anrp6I/SUkcJ2MvkrIbQgj7C2zqCbl9+/aWlpYobRsbG3fs2DHpj8uWLXNuXFdXB+yeiIRommWaplKOQCQ7NDiIiFOs812Dg0h2JGI6gvfUoRKIKRJwAtFcX8B79uw5fPhwlLY9PT3t7e2TEoidne7VOgcHBxsaGuzhOsujUUS4+NcJtKGZMdcnS9Dzm1mFuRZteJrodAs6rLejb9FJsJ0ZMewy98Dh6n5m1oHuMfMFMwdtuGSrXfAAEjI6vc7y6CrMR8F2+PliZnuI93ch2nAY79PmEW3hVUSzEySUaJDB4dBNNvAI2F9wAU94tgaVp8abmpX9Hd6FvtJFRKdXhHYgeZlAA0+2qFpjrR2xQoVKIEpSBDdZzcvkmxfh3zLVdvGwEohnSchuCCElX2CFRU7iT2Ge9JfW1lbnlkogimSHQkYi4qTBQUSclEAUEadEJBBFSifsBOKEqqrCC9myZUtbW1vEVlMXUXnjjTecTwX7+voaGhrsJh+rMDOY0nXu5WQiYN4kOKB0jOgUBr+77/DxRfIycTAwF7pr0YbMTXuuwN/EeBJFYcToI3KaMSJNZ/s12tDMLibawqmobxMH4bl4UzufaIuBM49a8DTZkATiAbNutL9DxCkDfy2+Be/TDqENmRP8ONF2FfwOo6cqPOnBl93oW7SJeKUBljlDBofebXb6frA/ZmqIl+LU+4jRDL7qyE4JbyZIGBYvJbwvoTpVAvEsCdkNISiBeJYVK1bkXebNY6bPiUhIJsaTKJQjEMkOJRBFxEmDg4g4JSWB6L30oWogpkVKbiCemUCM3mpqArGzs7PSpb+fKewnIiHRQqsi4qTBQUScVANRRBLN+31D3T1Mi5RMYYYTiJMWUWltbXU+QpwzZ46Z2Wt1NoZWCIcn59agDY2sLO4DPCODKS4Ou8BHp/DUSOYt6iXawphZacfRd2neVlv0QC6Xq66ujtgin89XVlba0r1gj0YUhL4G79PPBLH/IxnPYMtAM5FTKpfLRb+HmM/nzznnHLv64VndpaLgBawY9R76DGymYXCYmchh4Q6kwvkeeePKykpbuNMW7mQ6DYmXJaGyMzgEOOtfyio5N+8SshtCSMkTsBImEJ1bDg6GVv1QRFAKGYmIkwYHEXHS4CAiTgmqgZiQ/5PApSSBOIFPIDq3LKzCPB+vmh3eoyE4FRXcK4XBdXx3EmPnTWhDZhb+aaLtWvRdgo9AM3sDbVhtZoYkEPevs+FXwE4Xgu3sCNrQzI4Qb+9StOFP8D5tGdF2LtrwbejRC69Z9DLYzszsCqLtb9GGLUSnh310Co9mCzfbxbuQBOLATTY6ueByVEy1+AG8Ke5dXi4AmJ8jZd/hXT6mERwg2s5BGzKrfCwh2nahDeGowNw1dlNHLpeLvgJb4crh8DbrRRdRYdK+Mao1nq2P6JS5Cr0GPU/hWTtGfENtRPeWWQjFy48veIeZvWV+HcBfqXin1TZ/eGxsLCn3EEVKIZgnYBEf1pEJxK4u93WHEogi2RErGqBrApHsUJkzEXHS4CAiieY9eKgEYloEk0CMuGAZmUBsampybllTU2Nm1kzcRvTylIbBBB9ketv03kbAHIEbqJ5jLZdW2LiOGE3hc3wx2qMvdxJtw3oyvx7tcX1JdyO6VZ76DU2swaGQQKwnaiDuIw77y9CDcD/RKRyvOxfvEz/dvLgIbchUVmXiyTBfg7an622kBmLLTmvJTA1EL5izxj0nbTYFN4XLyw57+X2ajh/FCblzl5DdEEJIT8CizBsiE4i9ve7VIkZGRqL/syIStFihQiUQRbJDg4OIOCmBKCLJ5T11qARiigSTQDQz5/rIk5AJxHnz5jm3jF7WpCgvT2mYHIGXlcueQ3eYuRK7IhWPlaR0kAQiswqzRBHck3lJo1iDQwkEt26poqwzys4S7V5ShGS/BOTK4fVt1o3WQOwB25mZ/Qva8H7ivf1/iM/0brQhExx7Bt1huHqyiEgIAnsCNmMIkUwgDgy4q45HuXcpIumgkJGIOOl8FxEnXTmISKJ5Dx4qgZgWISUQLcKNPDKBWGzp1cI3/a/rbGwo+r9/FnhNLgaTI3gWPb+H8T7xRQaZxd1EREQiQBKIJ26yYXQVZiZLBSf6mcsVuAbiFmV25AzMkf8SehBuoA5CJIF43k47D62B2EH8Cv8Q2pBJEbqLzEfjpQLdWg99iswi3bmTEgksgWgzzSYmE4giIuWepSgiIiIiIjJLvAcPlUBMi8ASiGY2Ojo6zX8lE4jF1nou3FC4kliFOTjwOrbpWKlKMkxzi0TECRkcGohVmBle5j0oSCjecUHCYKwlXuZC9CKH+Rk0n2jrhSovS8ok5MdNQnZDCOElEG3aSohkArFYvFHLpYlkBzIRSUQyQOe7iIiIiGRWeAlEm7YSIplA7O9319LL4iIqChLKhOCW8+YgpdAfX2enXwH7g+vsHEUbmtl0Se6ZLEEbMqtGriHa9qIN4YhHJ3rKZGeFVjN7An2XbvD2LoUUT4ZLpDHJJplRG/q5MB9LcMlQeAg1s5fRhpehDSvXWFMHcuVwbJv1oaswMxdXcLZuM/G56GeFiEfJmTuckN0QQqjBumKRQDKB2NDQ4Nyy2OIqIpI+xUoZOCmRJJIdiieLiJMGBxFJNO+lD1UDMS2CTCCaWT6fr6iomPoFTCYQe3rcCZmRkREzswPEKszB5bBOoee3njHOqqPo58IUc2FW1vayw5xpiiRMVcgR5M1i3HU82w/Rhsw7tI1o+y20YR/RKeME2hAOh2YqSAjzFySExapn4rn4iYKEybRZn0sEzBDaWrrdiANJIC7aaYvQVZi90BW+SHxJmbuQjL1Iym4IIdQEohU5G8kEYnNzs3PLmpqa6P+siAQtVskC5QhEsiPW4BAryywiQYt1MaDBQSQ7kvJLwXvwUAnEtAg1gWhFQohkAvHIkSPOLYeGhszMVhLLjwWXw9JjxmTycjxkLMkSK4FYCBm9a+9s7U0C/bnvHUi+feiAvzpb51pwkMFBpCSeIn51XaeBZdbFChlpcBCHW4hz/HK04VvwPvF6o9cSnZ4m2o6gDT9MDaGJSCCGfOeuq6vrkUce2b179+7du9vb20+fPl1ZWTk6OkM196effvq+++57/PHHjxw5Mm/evFWrVt14442f/vSnV61aVZ7dTrGAbyCa2dQbiNu3b9+zZ8/hw4dnbNvY2Lhjx45Jf1y2bJlz47q6OngnRSQsuVwuetnTfD4f656CiIQrl8tFP9/z+bxuE4hkRKzzXVcOItkxNjaWlHuISRB/N77zne/cfffd0bcfGxv7zGc+8/Wvf338/62rq+vp6Tl27Nivf/3rjRs36gYiL+wbiFOnAES8e2hmPT097e3tkxKIBw4ccG48MDBQbH2VqPwVdBORWKqqYgyMukEgDgoSppQSiOKNUoTJhgwOvdvsNLoKc3CVduFgvpktRhtG+kVYxEK0IfyL7yehfaYSTSLuHlrANxDnz59/4403btq0aePGjV1dXTPeTPz85z//9a9/feHChV/60pduv/32pUuX5nK5zs7Oxx9/fP369eBuyxnCvoE4YSLFSk5hXrlypXPL+vp6eN9EJCyjo6PR7yEqRyCSHUogiohTLpfTlYOITJWUBGKw7rrrrrvuumv8f3/ve9+bfuNf/OIXf/u3f1tfX//4449fdtll43+srKxcuXLlxz72sdnd0cxIyaXtxHc2uYjKwYMHK11On2YqLohISBQyEhEnDQ4i4hTSEu0ikkHe104pyyIqX/va18bGxj75yU9O3D2UklMC8awE4vLly51rLM6dO9fMrLvOxobAXewH29kctKFx86ZPoed3dlZfeQx9i+BpEUYUAB4gOmUudIfRhlcRnf4Gbbhkq615AKmBeHCdjbwCdroqM6eMSOCUQBQRJ6QG4sKdtnDnrO5Vgnip7DHfQ58iCZWQEORs7sbIyMiPfvQjM/vwhz/8wgsv3HvvvS+88MI555yzfv36P/mTP3nHO94xi31nSUoubUuVQJymBiK2YyISHIWMRMRJg4OIOGlwEBGnRMxf9p46LEsC8Te/+c3AwEBFRcWzzz67cePGv/u7v3v66aeffPLJnTt3vvOd7/yzP/uzqetnCCAlCcQJs1sDsXkQ37P96OkCRxfN7ChxjsLrTjOdwrysUQOHQ7uIThvRhr8jOj2faAsvPnSU6BReX2uOGbYK8/K9aJeSRp3oMNhJdHoVMQz+Et1hptMAKYEoIk6qgSgiTomogVhRaQ3FUlZjdrKtxN1Vt1j9Je7/VNVU4r7OcPDgQTOrqKj4zGc+c/HFF99zzz1XX3318ePH77vvvv/5P//nzp07zzvvvL/6q7+avR3IiGBuIJ5zzjlR7hlv2bKlrS3qOTA1gXjo0CHnloODg+wqzCISCOUIRMRJg4OIOKkGoog4+b97aGYVNbb8v7v/09gs3ECsv7hod7mTJe7rDH19fWaWz+fnzJnzs5/9rKWlxcyWLVv2hS984fjx4/fcc89XvvKVv/iLv5g3b97s7UMWBHMDMWLilEwgLl261LllbW1t9H/WLTtlzrJTcOTqoD5TpqRgxiAJRJEztaKDQ2tJdyO6jAUJYUogiogTUgNR5EwdxG0meJpRH96nwQXlmHljzEQ3L/PVEpJAzA/Y3snBqd8r+d6darO9RW5K1q6xxttK3V9BYc6o2R133DF+93DC5z//+XvuuefUqVNPPfXUzTffPEs7kBEhXdpG+a4layB2d3c7txwaQtdOEZHQxPrN7/+aQETKRSEjEXHS4CAiiea99OHs10BsairMj96wYcOk/7RixYrx4OHrr9jkYpoAACAASURBVL8+i3uQDcEkEM3MuT7yJGQCceKwm6Smpib6PysiQRsbi/GIMtbGIhK0WOe7EoiSFPuIX2xeFs8NkBKIwhoh2sJBQuY7yl33K4I6YkRiKqTD967gBQkqqm3lMNq4pGb5zl0Ms7kbF1100fj/cM4kG/9jlBtKMr3ALm1n/LolE4inTp1ybjk6Ohr9nxWRoMUKFSqBKJIdGhxExEkJRBFJNO/Bw9lPIDY3N69du9bMXn311Un/6fjx4z09PWa2YsWKWdyDbAgpgWgR7hmTCcRitQ4L3/S/rbMxdC7zQbAddZotJtrCz0tOEJ2uRxu6b/xG7DSop+tw7Q+m8Ae8pKwRxeD8QUKFb6yzkVfA/uDzlFgWnjoe2tHj4YrwDgaRM5U7cazgmExg6qOtzdLB8BJ8mYT2WLnGmjqQuQud26znfrDTSzxVkYN5Kj+Hgy994eveDcRbNHm+ZmTMFT48PW++j1fKgN8lPUYsu49+9KNf/OIXv/Wtb33pS1+aO3fuxN/vu+8+M6urq7v++uv97V1KhPcErKpqupueZAKxWNIw4hIuIpICyg2JiJMGBxFx0uAgIonmPXg4+wlEM/vsZz+7ePHirq6uO++889ixY+N/fOihh7785S+b2ac//enGxsbZ3YMMCCyBaDPNJiYTiMXmFBQuCy4iAj9eHphI+nh5hBtgirDcVuz10aunnytr0IbMg+4FeFM7jjZcpSNfzlLuBGJwKcIn0HP8htBeafllKkXIcFS+ioa7vkIGh9ad1rqT6RQUXBjQi4xc+qrIfxTpOBgS8owj/m50dXVNLIoyPDxsZrlcrrm5efwv11xzzQ9/+MOJjRsaGh566KGbb775u9/97g9+8IMLLrigp6fnyJEjZnbrrbeO30YUUngJRJu2EiKZQBQR0booIiIiIiKSEt6Dh2gCMZ/PH/svE+tVTPylt7d30vbXXnvtSy+99KlPfWrFihWvvfba4ODg9ddf/w//8A/f//73tS5uSYSXQLRpKyGSCcSREfcKWIUbCg/VWR6tgQgv+PMG2tDM5hFt4ZCRu4xkNHDIiKkFAzvl41EOU/YOxjys3o++S/7CX8hEpP3rbBitgQjnSl4D25mZXUa0hYvXvOqrmGZCnrpK8DRLcQYKEop3nqKaGhwkSIqjZsTszx2ePS0tLXGzHa2trd/4xjdmaX8kyASiFZ9rTCYQ6+vrnVvOuPqziKRGrJqniiuKZAeyToKIZIDOdxERyYIgE4hmls/nKyoqpn5bkwnEvr4+55aFwot7iSBhB9rwXWhDM5sc6Y0D3uHDRKfu+7cRPEk8Vflv6DVfJ9ojs1A1HPBkoov/Qby9V6ENmXp5/WjDBVtt6QPFnk84FUIH3zM7hna6CX2lJ9EezayLeHvhfuHF6M3seWKH4UHpf6AN/wnd21+gPZrZHUTbZ9CGTG1KOF/fRHQKH0crNtsHdsUKGRU2/uVN1v0I2ClcvtOIC4DLiU5fRRteSnTKHIQtaEM4iP0+9BB0X59GcwXRFr4txqw+yFwmHUAbwpmK5Wvs/+1ABof2bbYfXYUZPnTN7CjacIDotJlo+1a04cNEp+iUM/soes7AVw5GXOfAv7zM7P1oQ2bQZn7OnEIbzoe7rLbFw3DjEktIAjEhuyGEUBOIVmSyAJlAbGhocG5ZXQ3XZBaRwCiBKCJOSiCKiJMGBxFJNO+lD8uyCrOUQagJRCsSQiQTiD09Pc4tC7URbyOexHqpyXKUOEfhohheOmXSarBFaMP1oV04XuN7B8orVsmCwpOMG4gn86vQhu7hKhqmbCh8jr+J90mBnznD4OT4MqLTFUTb69CGo0Sn8JHPlMCG36V6s+LlU5wKG1/FZGAIHeh5ylyuwAdSdvwd2pAZ8A8RbeHozRKiU2b9cXhKyvXUtRmSQFxJ5Kn91YkOyTW+Ki9DmDln8NdicDUQ8TCg2eKS7UUsSSmQmoy9SMpuCCHgBKK5Tsjt27e3tESK9Tc2Nu7YsWPSH5cscV/v1NYyK4OISEimWaZpKuUIRLIj1uAQK8ssIkGLdb5rcBDJDv1SkJQJOIFori/gPXv2HD4cqQ5ET09Pe3v7pARiZ6e7rN3g4GBDQ4P9gKiBCEfkmMJAzCrM1egOM532oZ1eRHQKg4tawAsTm9kctCHzjPFFYoeXog3r8D7xCil1W23+A7ESiIWQ0SgRxYJrwfwObWjcQbgfbdiN90m1ZUbRMtvs6SqzFW24z0etUiY/y+xwzHhyrLhi6Xlai1ZmAMea4JPUzC4h2sKY+ShwftaIIGE72mntGtvQgcSTB4mAPPMlDhdXXYP3iZcNzQ4m8/gyejwcIA6kjaHNroNxOc1EJBCTM3c4IbshhLATiBMKi5zEn8I86S+tre4LtLo65maGiIREISMRcdLgICJOSiCKiFNSEojeSx+qBmJahJ1AnFBVVXghW7ZsaWtri9hq6iIqnZ2dznxBf39/Q0ODvZ+ogQiLEXeYwkuFFOa5MbzkmZeqguUvj+JLI9HWS3UVpkIKFjJ66168v1PoKcOU9oPD1GZ2A/qZfo8YHP4sqNMNXg9xF/EW3eXjLWKWCYZX5T5JvEvwipN5s7ASiCIlASfdmEtQplQZfBUKL5dYZYYVSO0kZhK8F21o3CLXMObXQUby1EyqFL7uDa4su5efFfDchYpqO384EQlES8ydu4TshhBScnVbwgRizmXOHHjiqIgERiEjEXHS4CAiTkogioiTEohKIKZMSm4gnplAjN5qagLxwIED57j09fWVbF9FJNkUMhIRJw0OIuKkwUFEnJKSQBQpkZRMYYYTiJMWUVm5cqXzqeC8efPMzJ4rTGJC/Bxt+E60oXFrX8BroQzgfeIzxBuJVwrPRIZnnjLgKtRM1eHsTNY2M7NcLlddHXUuUz6fr6ystOfW2cArYH9vAdt5qKgwDh5Y3k50ypxur6ENL0PfYnjW/9VoQyOW6jKzfWhDeEawmS1EG7YQnR5CG9aYmeVyuei3CfL5vG4TlAMzOJR/YYfn0b1lLtiZWTQn4U6JzwVepM6IHa4lOjXL5XITaYYZFa4c8lw5ERj8FsENzewo0bYFPZbgpbqM+EqFr5mZ87QdbQivvmKeln3z8+OLaj02Nub/HqKif1I6Kbm0LVUCcZpVmLEdE5HgKEcgIk4aHETESYODiDj5v3s4zvvMZU1hTouUJBAnkAnEGVZh/hBxG/GP8aY4uOarERWs9+N92iXos6ydxCvdhjYsf3LBiCChl6rDYUISiBuJRVRgTA31TLms7D2uDu10c3/1pdFqqrUSiEnk5bsYdnlQexsiT6MZkkC8Zqdds3NW98rtOg99+vlcuOBYuTEX6jeVbjcSzsuAn4IEoiXmzl1CdkMIwVzaRrwKJxOIhw65ZzcpgSiSHcoRiIiTBgcRcUJWYRaRDEjE3UOR0gkmgRhxwTIygbh4sTt3V1NTY2b273WWH4r+758FfnbRjDY0s2NEW3iHf0V0egAuOEJ0GhYvQcL9xDffKh87DFeumbPVGh+Iu5ZirHsKAuogDsK1ivxIacQ635VAFMmOWOe7rhykxDQ/KcGUQDxLQnZDCCFd2kb5riUTiL29vc4tR0ZGov+zIhK0WF/zibgmEJGy0OAgIk5KIIpIonkvfagaiGkRTALRzHK5mdcqIxOIhdWWpyiUNRkglkuD6y7NRRsat55XHdqQuSiCF/TUldis8pIiZHDLRo+NxWgea+MEeYH4AofXJmYoRSgJEOr5nnLMzxF9oFIambhykMRSkFCml5w7dwnZDSEEdt9lxhAimUAcGBhwbhnl3qWIpINCRiLipPNdRJx05SAiieY9eKgEYlqElEC0CDfyyARibW2tc8vCXIPFZjFqo51tI/po6EXiPGM+3ufQhtcTnTIrOAfkFPGZwquPweVRjHuw6aUsC9xp3Vab/wASDXhunQ28AnZ6nY/nxl5ShMxB+CbRbw/a8Eb0XdqHvtJhsJ0ZkeA2sxfRhkyVXjhfz4TrYfWbbdku5YYSSR+KlAJc7rlqjbV2KIGYNqoqKCLiElgC0SZmExdBJhCLLZ6gb3oRERERERERCYz34KHih2kRWALRzEZHR6f5r2QCcYYbiBt9POe+xNO9y1b0FIcjcmb4uLI6qDu81FuE8vVE1Eu/XKfI3KJDZqfQ/vC8JNqjeToI3YtURXMFscP/XPYLFjhIeJTo9HriLVpF9BsWOBxqZtjgMHCTjT4C9sccD3DwFp4wYWYvoW/vCrxPP1cd8OXg933Ek6+ceZOi3DNzImCO3sNE2yNowwVow7lmrVDD17dZ9/1gp4vBdmaeQtzMAQwXtu4kBvxjaEP4o2H29gTa0F27Kxrmy8ILeAaYl2vmkkvIzbuE7IYQwksg2rSVEMkEYrF4o5ZLE8kOTUQSESed7yIiIhIY78FDhRBTJLwEok1bCZFMIA4NDTm3LCQTmwej/+MlA9dkMW7xXPhhy7NMgT+8qczAVw3EACGl0N9FFEiFMQPSfxLHA1y0kVlJ+UFihz9S9gN4uqD8tOAQgS9txOeyFG14Gu/Tri57PLn+Yby/4L4TNwT3ZVH2HX6fj7foOeI8hROITEQODgOa2Ua0YfnnLpy3087byXQKgoPYYU33MSK6aGiqlBHW3oYI/m3bgZ4yFdW2hgnfllRC7twlZDeEEGqwrlgkkEwg1te7q9DPuPqziKRGsVIGTkokiWSH4ski4qTzXUREsiDIBKKZ5fP5ioqKqd/WZALx5MmTzi2nL7w4u5gUoRdcvkNmS8ZShIxYDwwKoYMhsxmWiC8O/miYdBKTDfHiA0EdwHDt2ktKuhtlsDmoz4UWq56J5+IncGKCSQrLjL6Lfi63EZ8LU6rseR9xEbiCp5n9HG24En2l9WtsUwcyd8GX4IKEMns0PykK7mvR8/k+IRl7kZTdEEKoCUQrcjaSCcTm5mbnljU1NdH/WREJ2jRFEqZS6EAkO2INDrGyzCIStFgXAxocRLIjKb8UvJc+VA3EtAg1gWhFQohkAvHIEffibYXaiI/WWd5dJHFmW9Cxg3k0xIAXeH2D6BQOei4iOmVqjpQffDxk5zkhLVYCsRAyetWsH+1vY7ZXhSuDn6Hv8B+U/R1+mRjw1+t4mHXI4OCLgoTJxAQJYczi45d7OZCIHfa0MmyskJHWZpSkCO7XAbySsnm7bFYC8SwJ2Q0hhP0FNvWE3L59e0tLS5S2jY2NO3bsmPTHZcuWOTeuq4Nvp4lIYBQyEhEnDQ4i4hTrfNfgIJIdiUggek8dKn6YIgEnEM31Bbxnz57Dhw9HadvT09Pe3j4pgdjZ2enceHBwsKGhwW4kFj39F/SMuRjv014m2n4IHezqNDbMpuAeFQYICRldtXe29mYaTKjESwkkJk/NPMS5cuZNkkIpwmQLKYEoMiG4mndhTQ0xs7AKpEoyeSlH+FOi04vQhnPwPqmrQU+UQDxLQnZDCCn5AptY5CTuFOZJf2ltbXVuqQSiSHYoZCQiThocRMRJCUQRcUpEAtF8Bw8VQkyRsBOIE6qqCi9ky5YtbW1tEVtNXUTl4MGDznzB6dOnGxoa7Fd1NobWQLwRbIcXVjNuQc+X0PObuSiC2wb3dD079qMHkr/1x4MJGWXqsI+ULC9iBG1Y/rWqmQVP/ZQqyxZkcBi4yUYnP62M6ijYjmp7tY8DKcCyViA473MB0WmMw3aKk2jDAaLTaqItvILzArRh3Rp7S4cSiMLyMsfo5qDGTxFJgJR8gZUqgbh8+fKcy9y5c0u2ryKSbAoZiYiTBgcRcVICUUQSzXvwUAnEtEjJDcQzE4jRW01NIHZ2dla69PczOUARCUkwCUQRKS8NDiLipASiiCSX95uGuoGYIimZwjwhbgJx0iIqra2tznzBnDlzzMyGiTm2p9CG7mVdomkg2tagDdFJ3mZm8Co1ncRoFGCt7nLrIN7ehaXbjejgQtR1W23+A7lcrro66gSqfD5fWVlpT6yz06+Ana4B21Hn2iqiLTw18ldEp/A0OjNbT7TFwCNSjG+wKS4n2v4I3eHziU4PoA3riU7hr7aGzbZhVy6Xi34PMZ/Ps7cJmDIF/45+plfjfdqzcKfEKw1r+jM8wRY+X4wrhgMvd9BHdNpItO1CG8JzrueaxTzfC1cODC8LboR1rhlRRceIH26XBLVIndZmzI6E3LlLyG4IIZgnYBG/lfkEonPLwUFi/WURCYpCRiLipMFBRJw0OIiIU4JWYU7I/0nggkkgRiwXQiYQly1b5tyytrbWzGyuGfycBs4RzPfxjFHkTGtDO5C4Ix9JIN6wl+kxMPPhhpkZzeBc81+WdDeiu9XH27vBQ5+kcicQGZ/38Zl6WYAlrEVU4AzsSqJTJusGt+0mOoXXMzFi4s5StGGdmVkul5uopzSjEiQQvXwnhnWumc/l+MotrGukjBkbG0vEPcQE7IKkQ0hPwKJ815IJxO5u9/XO0BAzV1BEQhLrN38irglEpCxU5kxEnDQ4iIhIFgSTQLRoqx+SCcSmpibnljU1NWZm5xIJxOCKU8CFTpjnk8+jnV6emSdvwR1IARobi/FeFTZ+ap31ozUQb8rMR+PrINyFnjVbMvPRSDSxBodCArH+4dnbHwnPB9FR5UXiYZWXomxMpV3GWj/dlrsGokhJBFfXUmAJCTwkZDeEENgTsBm/bskEYm9vr3PLkZGR6P+siAQtVqhQCUSR7NDgICJOSiCKSHJ5r3uoGogpElIC0SKEEMkEYmG15SkKNy5/Q6zC3Io2ZM4zeLFUM1uBNtxH7LDWqpmRgoSzL1bIqGCt2egs7MrsYZYm9FJUiFlpXUFCKRFkcPClAz1lgit6mxFMihBeHduIupa+vmXgqCZc3rdqjbV2IHMXRLxTijA7EnLnLiG7IYTwnoBNX6KYTCCOjrrvAURcwkVEUkC5IRFx0uAgIk4aHEQk0bwHD5VATIvAEohW/B7fODKBWGxOQeGyYIBIILrnRkdwCG1oxIpyRoQBXyQ6dZegjICJPcILZGeHlxwBU5YFPnrrttr8B5CGS32swvwy8RYdIfqdg/bLjGb1RFuZPcGNvS+gOzxvs63eFVJuSEFCmeBldWxfC+B6KfioUKGIiGRDeAlEm7YSIplAFBHRzwAREREREUkJ78FDJRDTIrwEok1bCZFMIBabqly4oXAhsQpzDdrQl2G0IRN7XIw2rCU6lRl5yREwZVngSkZmhk1E2rPOBtFVmDeir3Q98Ratx5vi4BPczNqIKw5Pi3IiniFe5tt8nKdMihAuVcYkjC6j3iXNUhSWl9qULxHHbTXaUBlYEZGESM6du4TshhCCTCBa8bnGZAKxpsZ9n2/G1Z9FJDVi1TxVXFEkO7ROgoiIiITHe/AwOTcxhRNkAtHM8vl8RUXF1KtzMoHY19fn3LJQePE0kUBciDY8hTY0NocFWk20RSNc9vagfqcx1f20XNrsK/Z8wqmQSFpmNsMS8bMguJWUGZtD22EMXAc2RJ5KlTFiJRAVVxQHL7k8pjj1H6M7zFTpZfL1cGFWriqrBgcRSbSEjDoJ2Q0hhJpAtCLfvmQCsaGhwblldTU8hUNEAqMEoog4KYEoIk4aHEREJAtCTSBakRAimUDs6elxbjkyMmJm9hZ4bVcCUzUsOGG92KPoM5TFunBMtFglCwpPMpp8rMIcXIowO+DoDRMUyhNPdX+NNlyF92kn0IajRKfwSbN4s123K1Y8OdbGIrMIThEymBQhw8vy7kogikgRSTnfk7EXSdkNIYR9dTv1hNy+fXtLS0uUto2NjTt27Jj0x+bmZufGxWojikj6TLNM01TKEYhkR6zBIVaWWUSCFutiQIODSHYk5ZeC9+qHKoOYFgEnEM31Bbxnz57Dhw9HadvT09Pe3j4pgXjo0CHnxkNDQ2Zm3XU2NoTsKINJq3kpQAOvMGhEbSAvr7Qf7bGT2NtWdG991cuDc5p1eJ9kpchYCUSFjMThdbRhN9EpUzD3CNqQOU+Pow0XEJ3CY8OwmQYHySD4igW+XAlTrJBRYXA4ts367gf70xQEkbLBi9dX2/zhRCQQk3PnLv5udHV1PfLII7t37969e3d7e/vp06crKysLC1SID2HfQJwwcQyRU5hbW1udW9bVMT+SRCQkuVwuetnTfD6vVdpFMiKXy0U/3/P5vO4himRErPNdVw4i2TE2NpaIe4jB+s53vnP33Xf73gv5vZTcQKyqKryQLVu2tLW1RWw1dRGVzs5O5zd6f39/Q0ODNfuogcjwUoCGWWEQXjvPyysN6/Gvr70NsOCjQkYzgJ/EZmcN8ZtDe6VX+96BQGhwmC14viNLA4sXwc178BSZRAqkLtppi3YynUqqwFN2zOw3aMMVeJ82gDY8n+iUKTm+DG3oXiIhggqzi1UD8Wzxd2P+/Pk33njjpk2bNm7c2NXVpZuJ3qXkBmIJE4jOCkdz5sxhdk9EAqIEoog4KYEoIk5KIIqIU1ISiAnYBTNkN+6666677rpr/H9/73vfK/H+SHwpubQ9M4EYvdXUBOLBgwcrXU6fPl2yfRWRZFPISEScNDiIiJOWaBeRRPO+dkpy6jAKRwnEsxKIy5cvdyYQ586da2b2a2IRlY0+ptj4mj8CW62JSOIfkkDcs84GXwH7uxBsZ0xNBWZqOTxhkJmew+zwk2i/16OdPo/2+DrYzszs/T7Gz93EZ/oG2nA53id+1jRutst2KYE4WzQNeUZPEefadT7eXl+/MGrQho+j73D9GruqA0kgHt5mvegiKkzpHniWN7OAVXDnOFxVCf4tw1zn3Ig2DK58xCYPfdqC8O976eadlE5KLm1LlUDs7Ox0bjk4GFr1QxFBKWQkIk4aHETESYODiDglYv6ySOmkJIE4YXZXYb7Sx21EJrNzonS7IVPBT+0eIzq9lmgL20e0bUAbelkYx8ywBGKNGby/P0AbHkMbmtndxMDyv9GGebxPeyexw6uJfjGXo0fD5SXdjTLYRJynXnIEHCUQhQXHk5eWdDfKgFuTBAfHuJaiH02NmVkul5tIM8yocOXQstNafCyi4uujKT84a2mZmRQVXDLUC+5dSkYNxBqr+O9F/tOY2f8qdXcXm723yH+K+gtLEiuYG4jnnHNOPj/zr09yFeZDhw45txwcHGxogG+EiEhIlCMQEScNDiLipBqIIuKUgLuHZlZhFY1F/tNs3ESuMSvWnQQvmBuIUe4eGp1AXLrU/YS3trbWzKybqIH4NNiOKlhwKdEWrv0xn+gUTlQxncJPYuHnUe8D25lxiVTYXKKtvyAhDEkg9pgNoP191EdJQeZyYTvRrRdMiR+RMyiBKCz0KhLPNYeICY71ow25yxWtwpxE2claSoIlI4E4ZPZ/lbG7drP2Iv9pjVmxLKSEIaRL2yjftWQNxO7ubueWQ0PwFZ+IBCbWb/4EXBOISJkoZCQiThocREQkC4JJIJqZc33kScgE4oIF7gXGCnGkZqIG4vvxpoFhUlGL0IbMymVhgV8p87lcQry9cL/+PtOxsRhdFzbuMzuN9vcc+hYxzzUOEcfDKbThSbxPayHa9qENr0cbwvGZl9EezWxzaMMgvIIzU3gRDtfXb7Zlu5DBQeRM8ISJJ4hBeyHeFC9kDKfyjQsDdvh5qqfBQXwK8GJbRAIV2BOwGUOIZAJxYMB9vRPl3qWIpEOsUKESiCLZofNdRJx05SAiIlkQUgLRItzIIxOIhVqHU5RgrsF+9FqBeYQLB/qMKCKziniWBUexFuN94ryUIzyANlxZyr2IAX62yaQtbmCXS4vd5mKzUbQ/d+45AmpVOB/1E+HlR83sAryph0UG4bpLwZVrhAN9RgQJmU65hTWVG5otzJGfkVVElxFtjxNtL0PfXk9JQFvr53hQAlF8gi+2MzX2wrND4At1q7b5w3Djkppvdq3vfRi3wvcOCCuwG4hmVlVVNTpa9Jc6uQpzsX854hIuIpICigaIiJMGBxFx0uAgIgl2idkzvvdBUiK8G4jT3D00OoE4izrRhm8L7fEOY2NQL7YObcg8soOzlsyahl5c4XsHYnmWKPB3Cdqwj/hMr8Ob4mp8dGpmP0HfqFvKPiIRhXb9YJJNr6OfS9Q10l1WE21l9gSXZIFtyMwr9ZQE9AUJFf7nNtt/P9jfu8B2ZsTlCrOocTtxxXKFjxhsRg7g7Iy9plW5Q9XV1bVhw4bx/z08PGxmuVyuubl5/C/XXHPND3/4Q287l0nh3UA0s8rKymJzmckEYlWV+w3Rcmki2aGJSCLipPNdREREpGzy+fyxY8cm/XHiL729vWXfo6wL8gbiNJUQyQTi0JB7WdMSTGHOVJAwI8J6ahfcYzd/by9SCv06M3ilpewsgecrenNd2eO3bWiPzFcNU2Jy8oVZZPPwPvEQN7Mk9wvouzRvs63epVmKEqSXiOMWXoU5uKsOuFh51Rpr7UAGh2azGdaGLI65RoKXAmfAKUJGWCnCF4nz9BL0lTL13J9HG16D90lN1ICvOnajDSuq7Z0JqYEYsJaWFj2+TZRQg3XFIoHkKsz19fXOLWdc/VlEUiPWAwN9pYlkh+LJIuKk811ERLIgyASimeXz+YqKiqnf1mQCsa+vz7llofBid52NuSOKM4PzHcxKytlJNomUTqySBYXQQdPe2dob4cHPq+GYBlztkXlWNZdoC39DwcFbIxYuZ1ZShutw5c2weLKId/C5limrqGtmZHCoNqtl+pR08fKjnPmpWId+xzH52UEfy0bPRzvVVYCkUagJRCvyVU0mEBsa3FM1qquZmu0iEhIlEEXESQlEEXHS4CAiIlkQagLRioQQyQRid3e3c8vxFX+s1wz+xl+vawWRMMQqWaAVlgJQ/iz29aEN+Gt970DZcHW4Yp3vGhwkKS4LbUQKEJJAXLLTluycrR2S4DA/FeFShs/gfdof+RhY3iTawu8SPJGlwkzTESR1wr66nXpCbt++vaUlUn31xsbGHTt2bfZ7dQAAIABJREFUTPrjsmXLnBvX1cFlV0UkMNMs0zRVCVZYEpFAaHAQEadY57sGB5HsUOJYUibgBKK5voD37Nlz+PDhKG17enra29snJRA7OzudGw8ODjY0NNgaZuUnSZ1TPmp/BAd+3OevgieSQNy/zoZfAfsLa5VAX/YRz2/dtW0jKH9s50niZQYXewyQ4skSpGeJgeVqdGBhBm2mzqkniidLkPp9dAr/gDKzc4l+4TjQCqJTJRAldVLyBVZY5CT+FOZJf2ltbXVuqQSiSHYoZCQiThocRMRJCUQRcVICUVIm7ATihKqqwgvZsmVLW1tbxFZTF1F54403nE8F+/r6GhoaqFWYs7MgMpw4M+I5GLd2HggOEjJP3uAULHMEdhI73BrekT8xnkRRGDEOEUcvXH7uJeJz2UB8LvABzGS4maUqA1rmcrHvHUg9OBVVv9mW7VICUVjwuO2u0R3NDcSAvx/d4QBThAwNDuITfJH/kZLuRkTMTKz5pduNclECUVImJV9gpUogrlixIu8yb968ku2riCTbxHgShXIEItmhBKKIOGlwEBEnJRAlZVJyA/HMBGL0VlMTiJ2dnZUu/f1eSkSIiAfKEYiIkwYHEXFSDUQREcmClExhhhOIkxZRaW1tdT5CnDNnjplZMzEBj5nYCwtu3rSXmcjl5yW6zxyB+/Gm5i4rmmi5XK66ujrixvl8vrKy0mrNyp8n4Io64+AD2NfEk3b04C//0bs+G2OgR9y0ylwuF/0eYj6f122CqJjKHmGtS3bM9w7EhS4PZkeIz/R8vKkNow1r0IaVa6ypI9b5XrhyEBERCU1KLm1LmEB0bjk4qPWXRbJCISMRcdLgICJOGhxExEk1ECVlUpJAnMAnEJ1blmAVZi9hQCZ0Bu/wEbxPLSAwi5gjsD9b33xIAnG5WYzCiWeD16hhFqiB6+Ib8b1xCu+TSi9eEVRASWbVC+iRP2+zrd6lBOJsCStFyLg+tFf67tB22JNcLhd9BTYlEMWBuTCDHSfaLkEbLiA6/R3RFv6ZCSfHK6rt0uGxsTHdQ5Q0CebSNuJVOJlA7Orqcm6pBKJIdsT6za9rApHsUJkzEXHS4CAiIlkQTAIx4oJlZAKxqanJuWVNDVwZ5b9kpwai1puRwMVaLq2w8SEz+CnDxWhDBlNvFI5MMgX+mCH0ebTt5egOP4X2OAC2MzM7j2gLP9JncgRw8IGZEgDvcI1ZzMGhkEAcuMlGHwE7zU4uT2bUQYyBa7N0IJU/xlW1xlpVA1FozIUZfNgz9buZeTCwyz30aTXKCoj8XkhPwKJ815IJxN7eXueWIyMj0f9ZEQlarFChEogi2aHBQUSclEAUEZEsCCaBaGbO9ZEnIROI8+bNc25ZKGuyp87GhqL/+2f/E2A7ewNtaGZG/Hq5Bm3YiPeZFcxyk3DMjYmjelkd29+inEgCcaXZzONTEfDePsG8RXhTvOrNz4gd/gPiM91b9vs48BKiHUSnTMgIDmleiPeJhwHnEJ3C6s1iDg7/1fDhku+LBOxF9Fy7JEspQoaXKxbsykGSDJ734GX6F3zYvxbagy4mYgy/S14+U5GkCuwJ2IwhRDKBODDgnj8W5d6liKSDQkYi4qTzXUScdOUgIiJZEFIC0SLcyCMTiMWWXi18079JlIpoQBsuQxua2ctEWzjpdpjodC3aEC7KZkQJDzgi1wm2MyukYBBeluRm+mVW7B1EO63bavMfQBq+SlSvuxLd21Voj2Tbo2hDZjRjEqnl/6KDj16m3C4zDLrL/0ZwEu/TDqANmfws/A4vNFum3JDQNEsjsXajQ2jtGru0A0kgvr7Nuu8HO2W+xBWnigL+HoeX+vXinaEdDJ4ixiIyIbAEok3MJi6CTCCKiOgegYiIiIiIiMiZAksgmtno6Og0/5VMIBZb67lwQ2HMDL6xAD/IghNnRuytmQ2jDZn1vOC0GlqakgKXrmslgkJw+It54Owl4FnnrQYiMrfoqr1Mj6CTzBwo4i2CPxpmNGNcUPYemYgcjFkPkTnHYavRhkwNxENEW008FJ6XdUsZ8OAQ3CvdVPYdPm+nnbez3J1KRKtDO4BFRMoivASiTVsJkUwgFos3ark0kexQKXQRcdL5LiIiIiKZFV4C0aathEgmEPv7+6frcQOR2vFSsuEKD31ajY9ae2EVHGHyccElm2BcipBR7lLocHU/eBFbEvzRMEcvUwOx/PWegoveXBXaDsPg2KOZKYEoGRTcaOaJFlFJmw70M1qLnjLM+sJwAXrmwuw42vAtRKdwjX4jZtd1oQ0rqu1yuFeRhAo1WFcsEkgmEBsa3GudFFtcRUTSp1gpAyclkkSyQ/FkEXHS4CAiIlkQZALRzPL5fEVFxdQvYDKB2NPT49xyZGTEzKyTKPD3O/SxEvMRzSXawgsFMksMwzUQNwR1KcZkqbzk8rzUQPRnmiIJUxVyBPvX2fArYH8tYDvqXFvkoxAn/LDazIrmziNYU/YaXvApA7+3xgWx4Ve6jziQ4ApTXjo1s5j1TFT8JATwsVT2wcE9QyaaGN9pU3g5T2vxptRa9pjKNdbUgSQQmVWYT4LtzMwuRRs+56NTI+ZbMJdJL6EN16INmfK+7gBMBExdYC9ryjN5PvhSB/59WmGmxLGkTsBXt86zkUwgNjc3O7esqSn/9YiI+DFNkYSplCMQyY5Yg0OsLLOIBC3WxYAGB5Hs0C8FSZlQE4hWJIRIJhCPHDni3HJoaMjMbC1RA7H8Rbh84SpMZYK/6n6gAFOEjFgJxELIaJWPVZiZ5byZgxBOumUnygrvbWtJd6MMvKxT6W9xTGRwkEQr+7EEp4xfIzplKo59Fx231xOdMnXZfos2dEcIIqgxa4oXMioMDswqzD/1URf4ZGhf4sxB+GzZU2PMT0X4wox5i7zwUgv+curoVQJRUibsq9upJ+T27dtbWiJNCGxsbNyxY8ekPy5btsy5cV1dHbB7IhIihYxExEmDg4g4xTrfNTiIZIcSiJIyAScQzfUFvGfPnsOHI61E1dPT097ePimBeODAAefGAwMDDQ0N1sys/CQiYaiqijEwFnIEL66zQbQG4iZ4UWPiigSu52Jmp9CGTHBsN7HD8DsscjYlEIUFJ1kuL+luRBfctBKmGiyh3IPDzT6+1/44tC9TZt7DXUG9WPgaiam8fEtQb5E/SiBKyqTk6nZ0dHT8f8SdwjzpLytXrnRuWV9fj+2YiARnYjyJQjkCkexQAlFEnDQ4iIiTEoiSMim5gTiRGCIXUTl48GCly+nTp0u2ryKSbAoZiYiTBgcRcdIS7SIikgVhT2GeACcQJ01hXr58ufMR4ty5c83MXq2zsSFwF4+D7SzGr5Up4JmGRmTaLyE6/Q3a8DqiU7iuMzwJ1MuKOi8zC24Q/cILmDN1R7llanK5XHV1dcSN8/l8ZWWlzTerZfqEnCI+016iX/daUxEwU+FeJNouQ98oeHB4Du1xo6fH1G3oDp9PdAp/LTJXLvDAMnezrdiVy+Wi30PM5/O6TRAVM5qFtS7ZfvSVDhOdrvXxFjGzR+ErBy8q11hTR6zzvXDl0LvNTt8PdtoOtjMzW4M2fJno9DKiLXwV2k90+v+hB/BH0dPtGeKUmYM2ZKYh74N/B+F92kmiLXxR9wL6Siuq7VJm7BZJopRc2pYqgThNDURsx0QkOAoZiYiTBgcRcdLgICJOqoEoKZOSBOIEMoE4Qw3EGjP4OQ0cJGSeW6wi2l6INoxRPm6KDweVI/ASJIStD2pvvUISiKv2zuouuTGPYZlAylq04fPEJdT/GdQB7CtICNvsY4eDW5zBTAnE2RJWipCxKjOvFA77hCmXy0Vfga1w5TBMROTgxJkRP0maiU6ZWRrw9fYwcdUxD28Kgi+ujAiHwilC4+YneQFH3eFMdIWZ2djYmO4hSpoEc2kb8SqcTCAeOnTIueXgoNZfFskK5QhExEmDg4g4qQaiiDjp7qGkTDAJxIgLlpEJxKVLlzq3rK2tNTMbJhKIm0J7EvszdLD7Ax/VNE7gfdoVoX00GLhio4WWtaQhCUQG/ESUyXfAdbiMSNBc7ulAgt/h7KSivHgR/Vwu8fa5KIEoLLgyYA/Rqb9TJjuQGoiVRLJpD9rQzG5Ej4efElcO1xEHYQfaLzPZAq6B6EUr2pApRwgfhNcQn4uX2ONpuAaimRKIkjohXdpGuWonE4jd3d3OLYeG0LVTRCQ0sX7z65pAJDsUMhIRJw0OIiKSBcEkEM3MuT7yJGQCsampybllTU2NmdlJIoEI57+OoT2a2RtE27ehDZmk2+qgHpLDOQIvhYEylSKED8K6rTb/gbGxGO9VYeOD62zkFbBTeBhm1rhcjzf1IyMRWqZMJJMj6EQbMiWxYC8R7xL8NHD+ZluzK9bgoASiOMAXAHDCiBTWpY4/SAJxgJhAczfx9j6Lfqbvw/u0p4lx++0+jqWPlr1H5loFnsL1W7xPuxXdYXheiJkdx5viE2iCK2wtMpsCu7SdMYRIJhBPnTrl3HJ0lFkZRERCEitUqASiSHZocBARJyUQRUQkC0JKIFqEECKZQCzUOpyi8E1/pY+lVJhQiZeQUXBrcsEW+N6BsmHyPhvCi1vGChkVLPexCnOmBJQiNLMH0VOGCfTBtbSMiKu7Fx6LZhhteDHRaQfacKnZGmhwYDDrY4aV6JfEyliQEIbMXTh3p527c7Z2aBpX+/hMV3nokxLWke/lM4UxBaaz8zNTJKnCewJWVTXdTU8ygVgsaRhxCRcRSQHlhkTESYODiDhpcBARkSwILIFoM80mJhOIxeYUFC4LDtTZGFo/CS67IImVnRVavaQIZUZUOonpWMfDTD4Q2lu0wfcOlA33SsudQFSKUCQQyODQtc1O3A/2x6wvLMn0HHFRB6/SvoU4kJ5Ed3jmVVGLY2bmtaANf4Y2PKfaboNnW4gkVHgJRJu2EiKZQBQRKfc9AhEREREREZFkCy+BaNNWQiQTiCMjI84tCzcUuonkDVz7Y7+nORHu9agj8JLL81IoCl5EjHmL4LVowyoh5xUyEekNYhVm+Gmql1V3zazGx6BUR7T9Hdrw8rKfNb8k3ltmkdbn0IbLiU43+RiUfo6+ww2bbcMuzVIUiYq5fA1w1k5Ig8ML6K5eRnwu7cT7swZtyFxvd6A7DIdDmaV+4c+UOU/hq1DmcuUk0fYw2hBeLT3IpJbIDEI9rovNNSYTiPX19c4tZ1z9WURSI1bNU8UVRbIDWSdBRDJA57uIiGRBkAlEM8vn8xUVFVO/rckEYl9fn3PLQuHFZh+1v3w9hoXjdV54KRQFP8hiVhBTJY3ZV+z5hFMhdHDUbADt71W04UK0oZkdJdrCY8N5RKfw41/jlicus6s8DfhMHCAs11LvcKyQUWHjgZts9BGwv+xU2pX0CTBFyEAGh2fN2tH+7iCu0n+LNjxMdNqLNzV8JUtih0+hDdfifeLcAZgIvJynzxCfy38S/f439MXOQXc4qB/TIhGFmkC0Il/VZAKxoaHBuWV1dXX0f1ZEgqYEoog4KYEoIk4aHEREJAtCTSBakRAimUDs6XGvYlWojTjsI4HopbqfKfgQwSG0YQvxmU63CPms6fSxw8xDUbhyzYKttvSBWCULCk8yus3c8eUI4APpLWhDM0PXkzczK1qEdibw83wzayba/hptuJHoVJIJLhQ1b7Ot3hUrnlzYuP5hsEeJiPmGai37pc7z6N6WvyRroOBae4Noj3Vr7IoOJIG4wGwp2ilzhb/XR5wKnqVhZkfQhsuITpkdDoiXn5lvI47eS32E+rhvipAKpIpEEHAC0Vwn5Pbt21taIi3S3tjYuGPHjkl/XLJkiXPj2tpaYPdEJETTLNM0lXIEItkRa3CIlWUWkaDFOt81OIhkh34pSMoEnEA01xfwnj17Dh+OVJqup6envb19UgKxs9O9NOng4GBDQ4OtgZ9OErxU95MobvDx0TD1E2Hlz2iQ4CXwzCzmokmFkNFbiKxlcG+vl/XHmaqsHw7tHZbZw6wiig0OMtvCGkIVJJxtV/h5h5F48iqzubO1P9O5RQdhIsEBeTNz/36N4Dq8T3sCnu5DdMocvFegDY/CH021LR5WAlFSJiVXt4VFTuJPYZ70l9ZWdyX5uro6bMdEJDgKGYmIkwYHEXFSAlFEnJRAlJQJO4E4oaqq8EK2bNnS1tYWsdXURVQ6Ozud+YL+/v5i66tEBT9W4uISIhIXEjJaune29maW4E9Tzd5EG8LPfo1LL8IlfhQAl7MpgSgiTkgC8YjZq2h/64gv8aNoQ6ae0++ItnApQ2Y+SvmvHJhffJehDf+DOJDeie4wM6fEx2xAvApnhdli1UCUtEnJ1W0JE4g5lzlz5pRsX0Uk2RQyEhEnDQ4i4qQEoog4KYEoKZOSG4hnJhCjt5qaQDxw4MA5Ln198AKrIhIYhYxExEmDg4g4aXAQESclECVlUjKFGU4gTlpEZeXKlc6ngvPmzTMz+22djQ2Buwjn0pmZhsx8gYVow3qi01VBPaKBP5rFQb3M7MnlctXV1RE3zufzlZWV9sY6G3kF7G8x2M5Oog3NrIZoC5eoZ0Yz5qzRTGQpkVwuF/02QT6f120CkYzI5XITaYYZFa4c6omLbaasx4vodzGz5Es30dbLooXMfO2AwNOQGczR62UxyUuod2lsbEz3ECVNUnJpW6oE4jSrMGM7JiLBUY5ARJw0OIiIkwYHEXHS3UNJmZQkECeQCcQZVmHebwYXLYHrxR5DezSzx4i2b0EbMsdUN/ouMVdicJzqSbTHjcQXCVyNsx/vk/pM4aQbkzjrQN/hBVtt6QNIAvFlM7jOAfw0lXk8fpxouxB9e+cRnXYSZ00P2vBdQUUX9xNv0QG0ofs7MxovydAn0Xdp4Wa7dJcSiMKCw19cBCYwXuLq8EdTs8Yu7EASiM+ZPQ72aRcRb9GzaMMleJ/2G6LtevTF7iM6hSdUMV+LMPgCIEZd3ym8fIm3E0c+/IsPX/Wl2uYPK4EoKRPMpW3Eq3AygXjo0CHnlkogimSHcgQi4qTBQUSckFWYRSQDdPdQUiaYBGLEBcvIBOLixe5qZDU1NWZmi4gEIlzmrAFtaGZNRFv4MWOMn1dThFUD8bbyP8ji6oZkx1rqXYq7lmJlZaW9ey/eH3w8UAcDczWjgzCRmPFzVel2I+GuZwcHJRCFkqkgIcxLqWjuo4l1vhdGkkuJqoJM+AueB9OI92nLiLbwb6iok0lcuCvJcgvrBxTjXB+dcj++lECUlAnp0jbKVTuZQOzt7XVuOTIyEv2fFZGgxfqa1zWBSHZocBARJyUQRUQkC4JJIJpZLjdznQYygVhYbXmKQlmTt2ois5SCUoTJNjYW4wMqbHx6neXRVZjRdlZL3J6AOzWz29CGjxM7fOXMmxT1KtoQLpcDe4Z4i94W2sACv1h43VIz28DmCJjmIjLr9qEDC1fQDbly2LTTNu1kOgVxQeyQwNHF7AhuUpSXeLKInCGwJ2AzhhDJBOLAwIBzyyj3LkUkHRQyEhEnne8i4qQrBxERyYKQEogW4UYemUCsrXUva1qYa9BdZ2ND0f/9s7hXZ4mAKRpyimgLP7WDwz5GFLbQ86jEgtdSrCM6pYuVxG7TbTaM9rcR3VtmnUovdbje4ek8vcJPt4jgUoS7sxSZVAJRAvUccZ66r4sjOIz3aVuIE83LyrBYAjE4XlbH9sVTlBUEfzT9RKfzibYiEqzAEog2MZu4CDKBWGzxhFC/6UVERERERERERDiBJRDNbHR0dJr/SiYQZ7iB2EzUQLwffTT0P4h7l15qfzBhH+bZpiRTcM+csblFq4hVmGEBvreSNpuydRBq4qEECc65My7x0KfMrkxddXiKsoLgj4apgSgimRReAtGmrYRIJhCLxRu1XJpIdmRiIpKIxKfzXUREREQyK7wEok1bCZFMIA4NuUscFpKJT9dZHq2B+AmwHRXK68Cb2lq0IVN4ES61ExYvS54xBxJc3c/MWn3sMPeQHCmF/u/r7AS6sPHtYDtjloVnSky+gTY8SXQ6j2i7D234PvRAeh49en8JtjMzu5Vo+zzacCnRaRfaEP0eNjObizZs2mybdiEJxO6bbOgRsFN4/PTlCfTIZ+YueFkJFLYLfYuY8bOeaNuENmRqq8HnqRE1x99EGzassTs6kMGha5uduB/sdC1x2HuZ7uMlvfgy8Upr0IZhRRePEm291EDsJD5T+CsV/+FWbfOZH1EiSRRqsK5YJJBMINbXuy+yZlz9WURSo1gpAyclkkSyQ/FkEXHS+S4iIlkQZALRzPL5fEVFxdRvazKBePKk+wlvofDiOjP48mA/2pCpMOWlBmK/j0dDYfESlwiuco2/HY71wKAQOniX2QxLxBcHHw8nPYU0N6ANvTw3NrM5ZU9bXI7u7eUl3Y3oWj31G5pY9UwKGzc/PFt7k0A3hPZFU37M+sJedKDjJxxdNE/xuiNojzVm2NyFJTttyU60V0JwF4Sw9UG9UiYZCv/MnIP3ie8wcwQyV4NwkBAOgFeYzVf1ZEmbUBOIVuSrmkwgNjc3O7esqYGD7CISmGmKJEyl0IFIdsQaHGJlmUUkaLEuBjQ4iGSHfilIyoSaQLQiIUQygXjkiPv5Y6E2IrMKs5cwoBerNEpK2GIlEAshoyYfqzAv8NAnxVfE+DW04epS7kUkTMGmsKIWYUIGB19eQI+ly3wcSFRpYKbjsr/Y59BXClfoM7M/Il4m/ACduRpsI46HXrQh/JNortmF8UJGhcGhd5udRmsgjoLtzJgJE0SnXmKPzLwH+MiHXynzFsE/M72UZfcF3mGu2qMSiJIyAScQzXVCbt++vaWlJUrbxsbGHTt2TPrjsmXLnBvX1TErDohISBQyEhEnDQ4i4hTrfNfgIJIdSiBKygScQDTXF/CePXsOHz4cpW1PT097e/ukBGJnZ6dz48HBwYaGBuuuszF09cfgCo7Aj6SCex4VFvhpKhP+gksgGVfJyBMkZPTsOutHV2G+EGwXXs1QXzUQN4fzRh331O8v0Y/mqnDe23FwxnPuZluxCxkcBm6yUXQVZnjFcyMW3n2GOE/fBuc7fB1I8ItFd3gj3BBsZ2a2j/hM4dXSX2Py1HhTfJV2bvFcpEAqgykxGel3kguTpvB1ARAQpgYivNLvr/A+7e3oDjMHEvNlwcQtQdU2f1gJREmZsBOIEwqLnMSfwjzpL62t7krySiCKZIdCRiLipMFBRJyUQBQRJyUQJWXCTiBOqKoqvJAtW7a0tbVFbDV1EZWDBw868wWnT59uaGigaiAGB37Cs594zKL6iTPy8hg2wBQhAwkZrSWKCh1FG8KpMeMKf92GNn6V6HQB8WLh5fPKf7rBAS5ScEFCGFcpEhkc6olVmOEVzxlrfXTqTTaOfCZbV/5SsGFCEogLd9pCH6swcwXdQuo0rOiil8lqNcTFVXCz6zRJTqQUlEA8y/Lly3Muc+fOLdm+ikiyKWQkIk4aHETESQlEERHJgpTcQDwzgRi91dQEYmdnZ6VLf39/yfZVRJItpIVWRaSMNDiIiFO5ayCKiIj4kJIpzBPiJhAnLaLS2trqzBfMmTOH3TMYU1LXS7Zc05AlcLlcrrq6OuLG+Xy+srLSjhKF2y9DTxkv0xsZ7/A0OOyGlx4q6W5I+HK5XPR7iPl8/pxzzrHXb7I+dBEVpm7KANpwJdHpm2jD84hOFxBt8WmVZR/NniCuBm/wMfYyi2YwT+0Xog25a+bC+R5541hPI0RmS3DTkEXEt2CegEX8VuYTiM4tBwezVP1QJNsUMhIRJw0OIuKkwUFEnLQKs6RMMAnEiOVCyATismXLnFvW1tZG/2dLLFOPhuAFWOD1K4wrLh4QJgsAr/JhZpeH9/YiCcR1e/H+mI8GFlZlcdKFZe/xZfQz5Zb4kNmGJBDPIxZRCc4q3zuQYl5ShGb2IjqaXZKt0SyXy03UU5pR4crhlW12+H6wP+Z4eB79TBvxPm2YaAsv5fcccX0FJ0QDvO7NilPo8cCtvjI2NqZ7iJImIT0Bi3LVTiYQu7u7nVsODcGzE0UkMLGiAbomEMkOlTkTEScNDiIikgXBJBAt2uqHZAKxqanJuWVNTY2Z2YE6G0PvJHqpDAgH+szTDqt+4oz2oZ8pE7TsytY9srGxGO9VYePn1tnAK2B/dWA724c2NLM/JtrChVmfITplCj6eRBvCNRDhwmrfJc6124hz/Jdov/PwPvEyZ+4v6mjgs6Zps125K9bgUEggnrjJhtEaiMwUhA70M4XDPmbWjnZ6RWa+/X+BvkXMTJj9RNv3ox8NU8L7EN7U3LWIInDPQYqgdo1d1IHUQLxwp124E+2VAEfk4ACXsRkuEHPWlD9CC6d9zQxe1rsX7xOvNwrX/ibBV4OvoR9NRbVdyoRvRZIosCdgM4YQyQRib697HB0ZGYn+z4pI0GKFCpVAFMkODQ4i4qQEooiIZEFICUSLEEIkE4jFVlsu3LhcGdpSKvAijMFhqsiFVQzOS8VGJmQEfzT+PpdYIaOCQeJ0a0YbwnEJMzPilIEfpq7D+6RSUfAqzDD46N3g6ZbTVUENg4xh9B2ea4YNDjXEs1o4cs5g5i74qxeNgl8sespcgzZ8ivhcLsOb4l4j2p5PtIW/GeFMdJUZNndh9zbbh9ZAXAu2MzM7jDZcQnTaRxzAV868iRucyzPiymETeo6fANuZmZ1CGzI1ujrQhst8XIIacW2GJxDBdiJJFt4TsOlLFJMJxNHRUeeWEZdwEZEUUG5IRJw0OIiIkwYHERHJgsASiFb8Ht84MoFYbE5BqJcFXhb0ZKrewJVrFuB9ehBcERkm/JURb/exCnM93icFfoTLDA4MOA5QflqFebZx7zCSQPTFy7j9rJdznOm07O8SPODD5caMm7sA7zCTIvwt0RauOVSDNqw3a4UGhyXEUr9MKVj44mER0SkTHIMvfeuJwaH8GZu3h/MgBur9AAAgAElEQVT9kjXX6aMR+b3wEog2bSVEMoEoIhLSPQIRERERERGR2RdeAtGmrYRIJhCLTVXWDYUYmFUjF5duN5LMS4pQIit34jisKpwMZnAQSQBkcKh/GO8PXs7bl6u9nONBDSwvog2ZUjqXEG3hyoDMV9tzxLcwnECcboLT7Fi501b6WIU5OzSBRkSk1IJMIFrxucZkArFYgUUtlyaSHUgpdBHJAJ3vIiIiIpJZQSYQzSyfz1dUVEy9lCcTiP397iethcxjd52NoatVwdEbZhFGLyv2Mgs4uhfBjiCsZNOPiLeoBW14FO+TindsQhvWEZ3CKwwu2GpLH4gVMipsfGSdjb6Cdgq2U5Q1qhfQM+4yvcOpA3+l1m+2ZbtCLYgsyfEHoY0qXjJcN4f2LsWMJ2skKRO4gqdlaXaIiEgcAQfrnN++ZAKxoaHBuWV1dXX0f1ZEghZr1XUlkkSyQ/FkEXHS4CAiIlkQagLRioQQyQRiT0+Pc8uREbikyn+Bc3leUoRGrBS8ithhOCjErGtc/nf4Vl04zjKucNg0yzRNVXiSsZRYhRlfm9jTct7wDvfifVIpGGYxUAycemCSwpdrYImAG/Bj1TNR8RNxeAkdHLqJTs8l2taiDeFFjc3sZaItPIrC3xS1a2xDB5JAPLbN+u4HO2UutuEgtq+fJF68iL5Ll2TpXZIIlDiWlAn76nbqCbl9+/aWlkiTPBsbG3fs2DHpj83Nzc6Na2qY6yARCck0yzRNpRyBSHbEGhxiZZlFJGixLgY0OIhkh34pSMoEnEA01xfwnj17Dh+OVP+sp6envb19UgLx0KFDzo2HhobMzJoHkb0MlJfyaqo4JgkQK4FYgpBRWBU8jdhhX8usl380g2sntZZ0N6TUyj04SPr8Am24lRjH/pHIv3wM7RcP15sdxJtaJ9rQPQcpggVmG+KFjAqDw6KdtsjHKszZCRIydQz1dSwlogSipExKrm5HR0fH/0fcKcyT/tLa6v66qKtjFnQQkZAoZCQiThocRMQp1vmuwUEkO5RAlJQJO4E4oaqq8EK2bNnS1tYWsdXURVQ6Ozud+YL+/v6GhgZ7jViF2cvjvueJJx5eymn9Et3hq4IampnH8sGl1QJU7pARXMHzNaJTJu3bge4wvMy6mfUTbReiDeHTDa6BCGdnLLRh0Mx2o+8Sc+XCfbUpgSgsOEjY7iNFyGAuVz5cut2IDi5WXmWGFUhlaiD+C9jOzGwH+tH8L+IghDs1T0Ubv4R2+n+jncIXV2Y2gDZkilMvQRuuD62+P67a5g8rgSgpk5Kr2xImEHMuc+YwP3xFJCQKGYmIkwYH+f/Zu7cgu678vu9/sNGNblzYAAgQlx6CIgcYYDAcitRQnJtHoxEgaiRNopsdp+TYlWIV/OAqG04lwVNe8+yq5CkFMjfHsVOqipyUbSkkYcuSbWnGI4EzJiiSPUMSJBsXAsMGcWl0A31O52FOEKB7dffev9/ps3rt/f08TXH2H2v3OXuvs8/Zv/1fQBIJRABJJBDRMA35AfH+BGL1qqUJxAsXLgyl3Lp1q2/7CmB9I2QEIInJAUASS7QDANqgIY8wywnERYuo7N+/P5kv2LJlS0TEE6UtolJcA+CyHsGTk/A8hry+dTqd4eHhiht3u92hoaG4fDjm3xHHmxfrwlkc/v80nqf4bfUA/tfGoD+3+ibLYhGV9ek59VWSH2dzaseOxb7XOp1O9d8Qu90uPxNU5TxZlmXNt8F7th1/ZkaPW69wrfO9d+UwZHwP+5xa6Hgix6ARsS3HoPsHPuIh4wh8U51CP6+PWd7XmZZ8WABrrCGXtv1KIE5NpRtQzc6W9tMhABUhIwBJTA4AkpgcACTRAxEN05AE4j1mAnGVVZivGouovCXWxQG1MCKcB68vq5PdU8btnT9VB3VWyZbv6l+RhyRqscbkkNG2F2P3y0oC8VzETXFMvQu1s4jKF4zaf6a+vE7Tp39h1P6susO5+ny3xBs5PmWc9GIECcS10p6PNnl1O+eC3TllZC1bL67T6dxLM6yqd+XwlxGT6niX1cIwFuR53xj0D43jocZvsw+aMwZ1LrE0/6Oxt/I3vif1MeM9dYe/ZAxaoxHxEo+phT9QCx8aju/cWVhY4DdENEkxl7YVr8LNBOLFixeTW5JABNqDHAGAJCYHAEn0QASQxK+HaJhiEogVFywzE4h79uxJbrlp06aIiF3Gz4i79dIW+WpR95yfLGpvW8V7a5QE4lbjDvkjauFdtTAinjZeoqfVwknjEsrpDTRVzqXbvzN29WulzUhZUlH25EACEZZn1CNQTo3lcseodZLCcr+8dBOjCjYdjM9PKj0Qv3o6vnpaHdUgh0P/69I+ZRzfGfiIzxq18iXomDHoU2qh0280S8Pczdb0SwIRDVPSpW2Vq3YzgXj16tXklnNz6pPLAEpT6zs/1wRAexAyApDE5AAAaINiEogRkVwfeREzgfjwww8nt+zFkZweiAX2cwHaaWGhxtna2/hxYzHl9KxTwffUwog4b/zuKX9uOJ1rnBThjDGuRt7bXCnCP1F3+BvGDss9EJ2v3nLtlmPx2GvK5AD0RXGrMMuL0WejzkhDEdqVw09OxM2XxEGdDBdfSdYnuSN2GKebvHxzRGzWSwvDKQPcp7A7YKuGEM0E4u3bt5NbVvntEkAz1AoVkkAE2oPzHUASVw4AgDYoKYEYFX7IMxOIvV6HS/SeNXB6IAIohJIb2vP2GuzIav5GhjFRSXHRGydIKMvSA9FDqBAuuc+pE08urrnqHxs7/LFauF0t3BzxNSmB+MjpeCRHD0SsT1muHI6W9qEm9zEE0CeFJRAjYuPGlX70NBOI8/PppxArLuECoAGIBgBIYnIAkMTkAABog8ISiLH8b3w/ZSYQl+tqnPOywGlV5nRIAVDdm4dj7h2x9mBf96QiJzH5nDqx5FqFGegTEohwyYG+f2bMn98p7bj9vFG7RS38kvUqKZPDtRNxS+2BWFzOvTjyUuBP5nhrvqfu7SfGoPJ5utMYNAv9EcTh2O0sSA+sR+UlEGPFTohmAnE9/oAIYLBYJwEAAAAAgPuVl0CMFTshmgnEubn0Iss5H2EmRQgMltIK/WiOHoiO53IMSooQheNuIrIpLkXocNY83d2/3ahDmRy2n47t9EBcrwYfJHSe0rilFqa/+FaTJVp33aiVc7vX1beGSwY0UZEJxFg+KmgmEMfGxpJbrrr6M4DGqHXDgAQi0B7EkwEkcb4DANqgyARiRHS73Q0bNiz9tDYTiDdv3kxuuXLjRQBNstz9iSQSSUB7KPFkAC3A5ADXh0btj9RC5xG7fWqhE8uZMmrfUs+79M8DFTwUsV+tBdarUhOIscynr5lAHB8fT245PDxc/Z8FUDQSiACSSCACSGJyAAC0QakJxFgmhGgmEK9evZrc8s4dVlAaiNfVW0PPcCmGvqnVsqAXV7xwOO6qqzAv29N1NRfVwoj4unHKyEvDv6ePGb9o7PD31R2W15uW73I7juSYBuV1KiPikloor2NrqxVPrrUx2uL31VNmrzHoV0u7RnrVmFgm1cJtcuHB+M1JJYH48Yn4VF2FebNYF2G0vXOCY/KlThjtCKdyfBbLjfYeNgbdpRY6PRBn1MJNxqDO5+ox9a05Y/VAJHGMhin76nbpCXny5Mm9eytdZO3YsePUqVOL/uO+fek09ujoqLB7AEq0wjJNS+VcYQnAYDE5AEiqdb4zOQDtQeIYDVNwAjFSH8Dnzp27dKlSqmF6evrs2bOLEohTU+nOCrOzs8s93Yx+IkiIdUBJIO7PsQrzkxnGjDCWhn+8r7tRnRwklGUJA2bhrFOZ6wA2KJMDcL/fas3k4Phl41Va3J1oQJR48qOn41F1FeYbRqZpW2sOQjkMmIUc6AtjbWInGSov/exkLXcYtfJZ84Q6IglENFFDrm7vLXJS9xHmRf9lYmIiuSUJRKA9CBkBSGJyAJBEAhFAEglENEzZCcR7Nm7s/SHHjx8/c+ZMxaqli6h8+OGHyVuIN2/edBOIV9SbD7uZdICBujefVNGbMS4fjnm1B6J8h1yeVSLTxDJp7PChomZCue/SFWNQEtxrjwTiKt5Uj/yjuY5eeVIaeFM2J53ktK6Ta+WsenifbrLzauGmg/HFSWVyuHYibqk9EJ0Ml/zyOmmK9sQeZfKixhHxebVQXr45Mq0v/JhR+4lauNsYlAQiGqchV7f9SiA+9thj3ZStW7f2bV8BrG/35pMqyBEA7UECEUASkwOAJBKIaJiG/IB4fwKxetXSBOLU1NRQysyMc+cXQEkIGQFIYnIAkMQS7QCANmjII8xyAnHRIioTExPJW4ibN292di/CeGDwvBF7dp4fkRX3WCXwoE6nMzw8XHHjbrc7NDQU1yPm1PHSnVcr+IlaGF7/dXndjO36mPpzfw756fJpdUQeQ17fOp1O9d8Qu92u+zPBuznOU0e2J5FlA9/hslZ1yCXL1aD3lGKt87135dCJqPHAw4OcJ4Kv01VpXbpp1J5TC2eNQWXOyi1OQ4Ys34uBxmnIHbA+JhCTW87OZplfAWRAyAhAEpMDgCQmBwBJ9EBEwzQkgXiPn0BMbplzFeZcd0vk4MO2vu5GIxHSrCJf9EZJIH5g3Dp+Si08UtrBkOvo/VP1WJLDofJH6/eMw/75HC+vc57+WC38ZeMvfUvd4S3H4rHXBp1AvG7UymsWOSmY9E3YCr5jvKdOnlo2+BUh5HksIpxVAOVw/U5jUCegtEkt/Fge8WAcnex0OtVXYOtdOQxl+h5GDLaKwa9++ahYF2HM287SbQfUQmcJIOdjMZOFhQV+Q0STFHMHrOJVuJlA/Pjj9OUDCUSgPWp95+eaAGgP2pwBSGJyAAC0QTEJxIoLlpkJxJ070zdMR0ZGqv+zDSHfwm1PRE7mvERyJ7jibjhnaeAVETWXS+ttfOzttdqbNZIlBitHoiLikHE8fHXgx5IcDv2nmX6PPqOOe8x4bZ9UC53Yo5fbrTU59CGBWFxPzGdzDDr4MGAWg5/HTM6njOOiWvis9QorPRC3n47tp8XxnL7A8gWhk/Yt7jwd/NcZ50L9L9S3xvkrs3w5dgaVD+Dijl5gLZV0B6zKc0NmAvHatWvJLe/evVv9nwVQtFqhQhKIQHswOQBIIoEIAGiDYhKIEZFcH3kRM4G4devW5JbV25qsL3Kzp6CV4XqVJUj4unEgFZeg0RKIbxyO2XfE8dKzTgV31MKIeMKolW/h3soxaER8ohbKLWjfUPf2NzOdL3KQ8PvG+yIfwF8zXqWzcgDhWBx8rdbk0HP5hZh9VRyUJSOb5w/UI/CGMehzRq38NMB7xqDOh8W/Vws/lBukHoxfnFSuHKZOxPRL4qBPGZODHOLO92iIyMlpykk3ObroNEH+j9RBnSt8mRPo4/spkFthd8BWDSGaCcTbt28nt6zy2yWAZiBkBCCJ8x1AElcOAIA2KCxYt+oPeWYCcbmlV0v9pHeaPcl5n/PGa0XaYn0qMEU4aA9FVF2adQn5PHVCeef1Uj348IwxqGPwrbicbEhZnjP+Uie9KPPanCkJxD2vOCOiaX61NZNDlnXhI+JbeYZVEogTp2NC7YHoKC5IKCur/bfzaMj/on6eOks/yyHN0Uxfq+UlUeUA+IbheMJ5XAhYjwpLIMZqTxObCUQAUH4jAAAAAACguQpLIEbE/Pz8Cv+vmUBcbq3n3g8KH4zGwlz1f/8BxWXr5P4UNKdA4ZTE8dEcqzA7TWSe6t9urH9MSuuTk17MpNTHEQAgryzLRpfFSap9Qy10nkeRY0hTxqCPGLWjaqHTghZonPISiLFiJ0QzgbhcvJHl0oD2UB5EAtACnO8AAABorfISiLFiJ0QzgTg3lw4Y9pKJB+TeCQCKobRCv3U4uuoqzDKrj6EzcGm/ochLIgIPGnQCUV4sNdrU5qwscp9o50EW50DapBY6qTGnQeonauF+tXDkYHxuknjyKlqSInRkeYl2G8et8xxMWXiQBbhPqcG65SKBZgJx69atyS1XbrwIoEmWa2WQRCIJaA/iyQCSON8BAG1Q6u9i3W53w4YNSz+tzQTi9PR0csu7d+/W3UMAFmflXC9xtkKThKV6oYObESt1Z12RfM/ZSRE6gRT5frVzs9pZclrOhn6JL4R4QK1+Jn1ofkKKsHnkNmeTxhx4Ti+N31QPQudTJn03v5rdauGyTzetZjhCe3YBuJ/TJlK+BC2uR3+BON/RMKUmEGOZs9FMIO7atSu55ciIvFI9gMKs0CRhKUIHQHvUmhxqZZkBFK3WxQCTA9AefFNAw5SaQIxlQohmAvHy5cvJLXu9EX9krMJ8KMct3Jt6aTydY7KT/9iyYhpZsnXOjU2n197X1B3O17euVgKxFzK6HqHODTGhFjoH0nW9VD/dfmjssDMjbeHeL/pDmRxuvxDzr4rjXRHrIow4lUN+WuOoM+E7J/jAP2g2q4VOf7RDeql+8SA3T4zSLuoiombIqDc5/PhEfPySOJ7zCML31cJvZWrEKR8PzqWvHB2RL18vqSNGhNyl/5bzlUQtlFdDjkyNF/WHYIZj2x0SiGiYghOIkfq0Pnny5N69e6vU7tix49SpU4v+4759+5Ibj446Ux2AkhAyApDE5AAgqdb5zuQAtAcJRDRMwQnESH0Anzt37tKlSndwpqenz549uyiB+MEHHyQ3vn379vj4eBzMsQpzgbdhdS35Y7Nk65zwghyRK1OtRZN6OYJDb6/V3qzAOZDk+8aOLLnmiDjSjokFa09JII69oo/Hyo+VFHWCF7cWbXE7LGfzB9g9uTc5fPZ0fPa0M6joWxnGzHOFX9zRK5Mjbu8Zg36qFh40Br2e44Eq+WmqiKAHIhqn7ATiPfPzveaxdR9hXvRfDhw4kNxybGxM2zEAxbk3n1RBjgBoDxKIAJKYHAAkkUBEwzTkB8R7iSFzEZULFy4Mpdy6datv+wpgfVNyBABagMkBQNKgl2gHACCHsh9hvkdOIC56hHn//v3JW4hbtmxxdg/N9PfURPp/x52oNSa3zd78Yux4udPpDA8PV6zodru1flPoJ72pc6Yu1LnIL9TgX6V/YLyn/0Vp7+kb6h/7VLa/tNPpVD/fu90uPxMAiiwLbnhqne85rxwiYlJ9eeUFIVHFLqN2qm97UUP6sb01Ji9uExFfVAv1RQuHY/cdtRZYpxpyaduvBOIKPRC1HQNQHEJGAJKYHAAkMTkASKIHIhqmIQnEe8wEYtN6IJ43JqzHuc24mv9WLXTeF9m0USu3SY6Ib5bXNruYBOKHRu3Rvu1FDfotXK+9fUFxy+JShI58QUIZCURgEApcUq/T6VRfga135fDWibjwkjie871EfnWHjA9x50ryWXWPnevtH6mFx9S9db55Pa6XYnXegmYLCwv8hogmKebStuJVuJlAvHjxYnLL2dkc6y8DyIEcAYAkJgcASfRABJDEr4domGISiBUXLDMTiHv27EluuWnTpur/7DpCinBNybEm70aWiJuTlSkJxE8OR+cdcTw5W3e0tBPcSREC64CSQPz0hbjzqjiec8qcUb+xHNTH1K86nI6ujoLiyY4CWwrqBv+Qx8aDMTGp9EDca1wQOp3g5J5sDxuDZjmQysr0nTUO3c+ohef1MfWXKNfVYKaO2CQQ0TAl3QGrctVuJhCvXr2a3HJubq76PwugaLWiAVwTAO1ByAhAEpMDAKANikkgRkRyfeRFzATizp07k1uOjDh3+iLCuCO62R1ZNKoWXjIGZX235pHb3jn3J+XVXXe8GBMvLyzUGLq38UcRcp+D0Rw/QToxWPl+tTM57DVq0/N6BYNPJ/2RcTA8YYx7WS10Vo38RC18znhf5CjW2LHY91qtyaGXSBox7tU6wTF5fUwns/OmusOP6WPmCfXLptSXyOnt+7Zequ+w0xz4a05wTK39rvqXjkZMSKswfxTxkTimddhXeqar3x4yZrOn1cIf6mOGvHzmcfUIlFs9hvE187A+pn6N5ETOnQuzlkTOgTVW2B2wVUOIZgLxxo0byS3n5+er/7MAilYrVEgCEWgPJgcASSQQAQBtUFICMSqEEM0E4nK9DvvwSd+edoTOTVE5bVFcj56yyAGEcBdEFnmru9YKGfUMGWmL4u6Iyl1vcjXilGOw8mz2ljri6jn75ZXV7CkiPlJfJTnmFhE31cKHI/ZJk8PYK+qQpWXrosDGrIMn34+eNA77Xy3tfXGyt9Nq4ZcHd+XQ2/jRCLnFepZHdl433pdncuzwZ4wdljtFyuRrlSjta2Zx170A7lPeHbCNG1f60dNMIC6XNKy4hAuABiA3BCCJyQFAEpMDAKANCksgxmpPE5sJxOWShjkvC5z7UU4XuR+q4+7Tx2xLkDBL7w8nRcgT/Kv6yEg2famfOzII8gGcq0Hq4Nf7k7v7HTN21Qko/aVa6HTpnckx6EW1cD5CiycD9ysrKBQR31cnFufO+/OlvUra5DBrXDk4IU059ii3BTTJf6z8l0aOBGKWb23yERgRh9TCXKswA+iH8hKIsWInRDOBCAD8RgAAAAAAwP3KSyDGip0QzQTi3bt3k1v2flD4i9FYmKv+7z9gWKyzAn0OORuSXoemGjkll6W1iixL7w97IXFRllWY5UFHX4xtLyuJ433GKszFkQ/g2UxR7sEve+qsGS1zQppyjqA4O+VVmCO0xxFuvxDzr4qD0igK9zgRY2dycBY9bxNlcjhwOg6cXoN9WTMjpT2m7TxAk6XLpCzLt8X2BAn1R8eGY9vgs6zA2ioygRjLP2tsJhDHxsaSW666+jOAxqjV85S4ItAeyjoJAFqA8x0A0AZFJhAjotvtbtiwYemntZlAvHkz3Qqi13hxR4R8eSDffsiSw4qIr+S4EnLW1hy88+reOi2QsjSCcW7hZkk+yvnZhyJqrrreCx28FfGpOuiQ+p6mA9PVPGbUPqwW/sQY1OkcOqUWTqiF76qFd5wGqXqpnrV0FuX8PbXw1/Ux9Q/x7RH76oWM+tA92flMlLuV7dLHjI/UwqeNQa8btfI5Lh9J31Xf051iXYTXL0/u6OqsKf+kUXtFLZS79I4djK9OKpPDuyfi45fEQZ2r9LPq8eA8aeF8Jfk/1MJH9THjaXWHv5HjC9SkWrjVGTXHM0byl6/wZlEA/59SE4ixzKW5mUAcHx9Pbjk8LD+BDKAwJBABJJFABJDE5AAAaINSE4ixTAjRTCBOT08nt+z1RvzAWFTuW+q1gnOnRY5ERcRutdC5x3i0qCsq5+66TA4SOklA50DKMsfIi7SORNRsWdC7k3E94po6qHzUO2vnOeR8h1wYEc8YtfLCu7KistQWJ54sJ0OdudeJwdaMJ9faOG3UqJUTiE5G/pMsySajVk8gqtRO2nphRLxl1MrnuPPp7/yx8iMI8ifFwxE1E8e9jT+J+FAd9LPGx8z7aqGTVnM+Fi+rhc6y0Z8xajVyv+YwGtA7zydlIV/h59OHxxGA9aTgBGKkTsiTJ0/u3Vupff2OHTtOnTq16D8++mg67L5pU3HzKwDRCss0LUWOAGiPWpNDrSwzgKLVOt+ZHID24JsCGqbgBGKkPoDPnTt36VKlLibT09Nnz55dlECcmkonImZnZ8fHx+MJIyuUpV+eQ+445jS2kNv0PJnjVZJDmk43NzlI6Lwv8l+ai7cwXK0EYi9k9Kxxo/uwWujIsrqr0+DPCSg5zQE1T6iFzlTmhBdkTkehv6UWOqkxOUGzLUKbHHKRe5U65Jut7fmE+qxaKDcqjYiuMTk8ohY6KUJnJpSfg5EzXMMRWjz5udPxXI5VmH9LLXQuX51epb+qFsqfxWE2B5Q4jwr93Oqb9F+WVZgLXPqZBCIapuwE4j29RU7qP8K86L9MTKS/l4yOOs8RASgJISMASUwOAJJIIAJIIoGIhik7gXjPxo29P+T48eNnzpypWLV0EZWpqalkvmBmZmZ8fDwOOBmY0mQJKGUJEsqyvESDz1K1jxIyOmI0SJUPJGdhzSwH0pFMJ/jgA0ryVPY94z19vrRJW15o1Vmb+NmBx5Mdzsv7w6IiD073ZCuQIo+rDir3FJ4xXiLnYl/un+jEqTrGHyv3OZXbCm+OeGzgDVKdMGCWy1cnQjv4XqXFkVt/vmMM+kyOh9WKO/JJIKJxSCA+YGJiopOyeXOBLVsBSAgZAUhicgCQRAIRQBIJRDRMQ35AvD+BWL1qaQLxgw8+eCjl5s1cy50CGLSS2pwBGCAmBwBJTA4AkkggomEa8giznEBctIjKgQMHkncFt24dfCtdYN2QlwCKfKsAGTqdzvDwcMWNu93u0NBQ/MB4fmSX+vJeVUeMiKEcT8PJLerDe+b6I7XwywM/erM8hlyco9lepU6nU/1ngm63+9BDD8XYK2u6S8t6OserlO+tUQ18h7O8RP/KmPDledv5hnHEqD2U5yDsdDr30gyr6l05XDoR114Sx3OeEJc7BtRIYC9RXAeeP1FfpW+oR2CW5UEezzCmJdNjyI6FhQV+Q0STNOQOWL8SiCuswqztGIDikCMAkMTkACCJyQFAEr8eomEakkC8x0wgsgozkFBgitChJBC/9vaa7hIs9F9HnygJxH/5Qlxa3HC5qofFuoiIP1MLf8UYVF4hxPlLtxu1+9TCLFkh2beK2tsyKQlEh7PCkpxALOuwN+3NvQNoChKIaJhi7oBVvFlnJhAvXryY3JIEItAe5AgAJDE5AEga9CrMAArBr4domGISiBUXLDMTiLt3705uOTLi9BoBUJK6aym6OQKstcGnLabUEa+IdRER6Y+vaibUv/Rd47LYSdBkUut87yUQvxoxr47nNHs6rL41Tgu5N9VBy2ueqPpz9SXaZAz6VGkvrzyFRsSP1UL5RRo7GM9P9s73anozSceYHJy59xO50hi0uPTi7YGPKF+rhPHy3jAGLbAdYRYkENEwJd0Bq3LVbiYQr127ltzy7t271ebNSAUAACAASURBVP9ZAEWr9THPNQHQHkwOAJJIIAIA2qCYBGJEdDqrr/5lJhCXW225eluT9SXLvSw0j5MFkJNN+Sws1NjnWhun/VB9ed8xBv2rxm7Lq3L/hT5m/Jaxw+nWFBXImT75sC+uXWOBKUKHcr5/YizRfs6Ye6+rhYf0MfWl4a0UjF6aYRXmL+U4ZZy0mnwgXdDHjJ83auXjYadauDFCu3KYOB0Tp8VBnQuzcbXQaQif5UrSGfQRvVTkfPOS/1I5AxsRszmaaRKZBHIr7A7YqiFEM4F4+3Y6sF7lt0sAzUDICEAS5zuAJK4cAABtUFiwbtUf8swE4qZN6R4zvWcNPhiNhbnq//4DNot12ch3eLi9s6ayrJ0nL6wZRqIq3z1GJWT0o8NxRw0EPiHWxZhaGGF1MpI/N57Sx4xJY4fTyfK1JGcBciV2v6fusPPayrk8OSjkGDsW+15TJoeJV/RBnTCgc8rIdqmF1qRd1G8xWdpEvqmXhtzCx0k2fWDUys0i5c6AmyImpATixyfi05fEQZ3ey4Pv7heZPt1uGLU31UL5uleeHMKYH94wBn08x3vqfFjw3Rboh8ISiLHa08RmAnF+Pn29U2tRBQBFIxoAIInJAUASkwMAoA0KSyDG8r/x/ZSZQFzFgdkaG0PAAo6rytKbMsvLW9btvn0Rg7/LYC0Ob7y88+p5OqWPGb9Y1PFQXOvP50vbYazKWUxZluezuKijN8tLdNSodZJusizJJrm9b/0eiD2Pno5H1R6IqOJIayaHP1CP3kf1Mcsjf7PQH4oajm131FpgnSovgRgrdkI0E4jLxRtZLg1oj0EvogKgEJzvAAAAaK3yEoixYidEM4E4N5ducdh7hPmq0QORRY2raE+QEOuY0gr9aoR8i1FukJqljVEY2ZDbmZ7wkte5fpoZCQ9QnlK8/ULMvyqOV1YQG2vKaVXmBOTlG+jF9f6RP4uHIniEuXneUt/QLLHHp9XC9/u4E83FZzFwn1KDdctFAs0E4thYelWCVVd/BtAYtXqekkgC2oN4MoAkzncAQBsUmUCMiG63u2HDhqWf1mYC8fr168kte40Xd9EDcb2S1zyNAruVDV6WheHyqXXDoBc6ePzttdqbJsnVjYggIfqkVj+T3sZjxirM7aF3mGpNNuQp48/8N8bLu0UtXPZhoQquGDssP/FzRR1xJGKn9OzC2RNxXl2F+QtiXUTEp2qh863R6dosX0k63w4uqoVH9DF18ncZec1oVEY8GQ1TagIxljkbzQTirl27kluOjFirFQAoyApNEpYidAC0R63JoVaWGUDRal0MMDkA7cE3BTRMqQnEWCaEaCYQL1++nNxyud6IWC/akyKUb8s7XTjH9dI85Fdp9MXY9nKtBCIrLAHtUdLkMKlOg1mWb26PP1ffF2clzymjVk4gOhfOzl373WrhJ2rhaETNkFFvcnj2dDyrrsLshDTlbo/FXWw7O/wTUmPoDxKIaJiyv/ouPSFPnjy5d+/eKrU7duw4derUov+4b9++5Majo6PC7gEoESEjAElMDgCSap3vTA5Ae5BARMMUnECM1AfwuXPnLl26VKV2enr67NmzixKIU1Ppu7Szs7Pj48WlsNBE19RC+Z58RMwbtVl4i54rIaNPDkfnHXE8lmgHCqFMDsWtwnzeyErIS7S3pI9hRHwpx1963XhP5e7fzh/qNK6Vo3k71RFHIrQGqT85ETfVHojyuRZGZ8AsvSkd8krKEXGzf7uxntFEfu2RQETDlJ1AvKe3yEn9R5gX/ZeJiXQvWRKIQHsQMgKQxOQAIIkEIoAkEohomLITiPds3Nj7Q44fP37mzJmKVUsXUblw4UIyX3Dr1i0SiFgX5O5Uzn1j50Z3gZSQ0dsRM+p4B3O0xCquzVlxwQc0kTI55FqFubhzHGvnV9p0MMgTvvOghpZAnI24YQ0qKi44JgcJtxmDOpdYGicv+YhaKC82HUabSCdiDCA3EogP2L9/fydlyxa5iTSAwhAyApDE5AAgiQQiAKANGvID4v0JxOpVSxOIU1NTQykzM3K4CEBhSlpoFcAAMTkASFISiAAAlKYhjzDfUzeBuGgRlYmJiWS+YPPmze6eAXnxFGdlnU5neHi44sbdbndoaCgeMm7HyE+Iv9GmrswcwFgHOp1O9d8Qu90uPxNgXXjT+LA4WtrcKy8K4T3YW+t87105TJyOidPOoCL5UVn5OdnwPsSP5DgIRwZ+ieW8vHLQpcZNsSWyPIl8w3hf2rNaF7CWirm0rfip7CcQk1vOzsqr0AEoDCEjAElMDgCSmBwAJLEKMxqmmARixXYhZgJx3759yS03bdpU/Z9tCPkOT3tu7zg3wWTX1cJcPbPltS/yJc6UBOKGCPlwkOMSO9QRS3SeVYCQHwlEZDPJV9BqMl3tdDqde/2UVtW7cnjvRFx5SRzveePPHFELr+hjxkfGAfys+sfK11dhvEoy57pX/kuLm1cK/Jq5sLDAb4hokpIubatctZsJxKtXrya3nJubq/7PAihare/8XBMA7UGbMwBJTA4AgDYoJoEY1VY/NBOIO3fuTG45MjL4+1C5FXiHZ9Dk59qde4zb9FKdcws3V/LRsLBQY597G38hQl5TUT7X/o3xvjhZgKNqoTOrkCLEOlBrciCBiH46xBy4rik9EK9HXF7TnVrGRbXQee5h3KiVFXgJKpKDLq15hQD0S2GXtquGEM0E4rVr15Jb3r17t/o/C6BotUKFJBCB9mByAJBEAhEA0AYlJRCjQgjRTCBu3bo1uWWvrcm/Ho2ueovnW+otHrmFXLBuaRNlaSn4qV4aE0ZtJkoC8WbEvDqenCrdrhZGhLOwvJy9dfKz7xoz4erh9WUMPvJzxvgzjzHhr7lak0PPxRfi9qtrsC+rjqsWfp0DaV1yeiDeNsbN8kvXHqNWvtqRO+1uPBgTk8qVw2eMz3GnDffn1MI7+pgW/a3p625UlCX2mOX5pD9S35df5FMGKFh5d8BWblFsJhDv3El/NlZ5ehpAMxAyApDE+Q4gickBANAGhSUQI2J+fqWcj5lAXO6Zgt5lwTfl4I2BFCHux/GwPt0y7szLOYLH1RFNcitDK0+tl5akVSnCN9Tj4alsr5KSQPw4Ylodr+pq8ClTauGbxnn6vlp4SB/TymLrE8vAY25OIDpLgtvJuWe51JF3eChCmxwcl4xa+ZSRn7SIiFtG7dEcqzAPfvlM5xppRi180jhuN6k77ORns/To13d4OLblCu4Ca6W8BGKs2AnRTCACwKC/BgAAAAAAsL6Vl0CMFR8oNhOI3W56IdXeDwqvj8aCekMqvbxzBbnWHpVvtrRn+Wb5llKWO6Kb9DFji1Er/7EPO4OqheMvxr6XlQeRrhq3f8fUQvnPdAaNiIPqe/qGMehzRu0VtTBLU6GyOMmmLEFCeYfHjsW+15TJ4WdfEUcM7+V9VC10km7yEu3tIV935+qB+J5amG4qXk2W7snn1cJN6kX+bMQNdVDnEYTraqH8XSa8/olyNM+5THIitIN3Vi38l8bE8k29tDAfqoUbIj7fzx0B1oMiE4ix/LPGZgJxuQaLLJcGtIfSCh1AC3C+AwAAoLWKTCBGRLfb3bBhw9JLeTOBODOTDhH1Mo/P5OiBmEt7goSyLOusoYojVrWyiMrNiJvqePIt/U/Uwoh4NsfR+y2j1umY05L+iVk47ZOy8HZYSSB++ELcUldhTj8UUY0cp3LaEX5XPU+d6GKepLB6IMmt65zHCO4atVnCgGU1bRyJ0K4cJk7HxGlxUOczUb58dZr0ZemJecfY4RG9NIOvq4UXjUHludf5jpmlf+Jj+phA8xQcrEt+VJsJxPHx8eSWw8NOJ3MAJVmulUESiSSgPYgnA0hicgAAtEGpCcRYJoRoJhCnp9NrJd69ezci4rXR6Kot6F7gWmEtvWXcjzrCW7Map2ljgTnNFZZpWqp3J+MZI/Ug3xEdN96XLLdwnVCJExyT5wcvyqpo1VT2ffWPfS7bX1qrn0lv413Gmqdy+86IOKgWnjUOwi+XdhAO3l61UO5FGBH7jVq5X568+Hh4Df4GbyhCSyBeOxG3XhIHdfJxcnBs1Bg0y8ra7SG/vKOlLYicJb3o/aXKswvAOlZwAjFSJ+TJkyf37q10dbZjx45Tp04t+o+7du1KbjwyUlaQHYBuhWWaliJHALRHrcmhVpYZQNFqXQwwOQDtwTcFNEzBCcRIfQCfO3fu0qVKDWamp6fPnj27KIF48WK6FcTc3FxExPE29UAsS3HRm7IUmCJ01Eog9kJGH0XI04N8R9RZ0zDLfWNnh50YbEHzQ0G76pODhE6UVT4ItxyLx15TJocxYxVm1gHHPX/FmBx+mKOHrPMNo8C0Wq2QUW9ymIr4SB3va2phGCnjMWNQJ9H/B+oOO63rfqwW/oZaKDeujYhQX6Is55rzEIwjU39/EohomLITiPfMz8//9H/UfYR50X+ZmEg3ix4ddVL7AEpCyAhAEpMDgKRa5zuTA9AeJBDRMGUnEO/ZuLH3hxw/fvzMmTMVq5YuojI1NZXMF8zMzIyPj8cHo7Gg9kCUPW5MOueNOx7OuC3xprzcZI7XtmV9DB1KyOhixA11vNfVQiedNG8cD2+ohf+pcSA5fdlm1NpD7Tryi5Fv6WdlcgDuN68WThpz4NM5ThlnxV7nikW+Tv9ULdx0MI5OKg1S70TMqIM6WarPqC+vvLfhvaeTaqF8uoW+0LrOaf0p5yWd81SOJ+ciXzbLIe4Nw/HFOyQQ0TANubrtYwKxk7J58+a+7SuA9Y2QEYAkJgcASSQQASSRQETDNOQHxPsTiNWrliYQL1y4MJRy69atvu0rgPWNkBGAJCYHAElKAhEAgNI05BFmOYG4aBGV/fv3J/MFW7ZscXYvItMTwTyGvKayPIksa9ljyI5OpzM8PFxx4263OzQ0FD8fUSOZ9KDLauFTmd7Tx3M8i3HQqL3St71A8d5Sj94tx+Kx1zqdTvXfELvdLj8TDIQzIw18Fl386Etl3+znXgyC0zz8/zJqP1EL5R3eHnG03vneu3J49nQ8e1od1VDcGjVfUM9xZ+WWSkty9pXzvtxRXyLn28Gfq4N+qbQjMEsXCGC9asilbb8SiFNTU8ktZ2dZfxloC0JGAJKYHAAkMTkASKIHIhqmIQnEe8wE4iqrMN/J0VIXVWRZIcRZo0Z2Ry10loPI8vLeMAZ1motrCcSLEfJdhr1qoXMEyguhRMTzauElY4flVwm43xF3cqidQLz9QsyrqTNnKvuuerp9OceFTr4Jf9B+VS38U2PQQ0at7BGj9u8Y76m8KISXy+t0OvfSDKvqXTn85YmYekkc78tiXUREOixRwYgxqPyUhkP+S8NYGU/2h8Y0KD8pJy8PEsbKLTsyrdwix5O/rxY+NBy/dWdhYYHfENEkxdwBq3izzkwgXrx4MbklCUSgPcgRAEhicgCQRA9EAEn8eoiGKSaBWHHBMjOBuGfPnuSWmzZtiog4yM+I61WWBn9yi0knajH4niyR6eXNFypREogd4+56lpf3U+MglBtFOTFYx7Y8w6J5lATi2CtrukvLyhIklJWVInTIE/5nS/sKWlyjPY/SA3GH0cDTOWXkzoBvGgfhvF6qP/fwI2PQp41azbeN93RSfWucCzP5OZhcPfrlq0G5xeSGiAgSiGiYku6AVblqNxOIV69eTW45NzdX/Z8FULRa0QCuCYD2IGQEIInJAQDQBsUkECMiuT7yImYC8eGHH05uWT2O1ByZmsiIsjTpkzn3jclSrb2FhRpvUG/jp99eq71ZgRNlzbKinDyrmFoWhMHaUSYHpwfi62JdRIR833O7MWiNJ7wf9BljUGe1X/0jVZ1V/jd1GnT6wJ4y5l65E5xz4fyzRu0VtXBUfZW2H4z/fFKZHEaNI9C57p3RS3VZrjp2Gq/SNbXQadInk4OEzpVkriDh4OV6gAZYlwq7A7ZqCNFMIN6+fTu5ZZXfLgE0Q61QIQlEoD043wEkceUAAGiDkhKIUeGHPDOB2Ot1uETvWYMfjcaCek/fuaUvc+4x7uzbXtRQXDeNgjjhL+dAyvLWyH/s6Iux7eVaOYKe//lwTL8jDvorYp1+ezy82/LyOoxOnMq5pf/76h/7t9Wj95+pIzoNm/6+ca79nrrDzifF+2rhZmNQ2Z5j8UuvKZPDdWOJ9gm1MIyurE7U4qw89+pj6i9v5Oi9KM+fk8ag3zJq5Zf3ujGok15MP0pUgbxs9NYILZ68/XRsP62OapDTi1laNjvK+nYgfwkKY8J35s/dRT2sFs63A3nI4dh2Ry4G1qfCEogRsXHjSj96mgnE+fl0j9+KS7gAaACiAQCSmBwAJDE5AADaoLAEYiz/G99PmQnE5boa9y4LRvSmNzThqqQltwqdP7Os3pSRaYcH/8cei7ir1srZusfUwvByN/J76rQ5e8KoPWDUar5T1FQWEX+ttB3OREkg7sm0CnMWz+Y4kMpqDfyfcK41kzI55FJckLAlnG8HcvrbuTCTL7adxotWZFLd4beMVZgPi6XAulVeAjFW7IRoJhBX+QERQAsoDyIBAAAAANBc5SUQY8VOiGYCcW4u3eKw9wjzZiOBiObJkpcsLspa3A5rrdB3Rsh9Dn6sFn5WLTTJPTGdxaicA0m+M/+4PiYaSbmbePWFmFNXYZbXkw1j8VwnsXtLLXTy1I7Br8Kcpf3cu8ZdcHll7fP6mFYqSm4WKR+9Ww/GC5NEDeCSY24RcVMt/Pf6mPFrRq3MuRqUk49yg1SgiYpMIMbyUUEzgTg2NpbcctXVnwE0Rq2epyQQgfYgngwgifMdANAGRSYQI6Lb7W7YsGHpp7WZQLx5M30Hp9d4cZfTdwEVlNXg7w11b5/iKnNdW+7+RFIvdPADI5d3fOBJlvC6hskL7+ZqcuokH9EwchRr7Fjse02JJ+8yeiA6qzCjYf7YmPCdQJ/8ReEXMk34M+oLtUcdcShCe3YBuN8R45Q5ohbK37wcThvuLOOW1WkXWGOlJhBjmU9fM4E4Pj6e3HJ4eLj6PwugaCQQASSRQASQxOQAAGiDUhOIsUwI0UwgXr16NbnlnTt3hD18QFnZujD6RDhdb3aohU5/nyfVV1i+WY219u/U4+HRF+Pgy7VaFvTiiluN2fRP1L1daUX61YwYp8yoWvjdTAmagjgtkJzwQhZZQtzyhB8RNePJtTZGW8itDImjViR3DvWeDiGBiCIV2Km8OJzvaJiyr26XnpAnT57cu3dvldodO3acOnVq0X/ct29fcuPRUfkbM4DCrLBM01K14ooAisbkACCp1vnO5AC0B4ljNEzBCcRIfQCfO3fu0qVLVWqnp6fPnj27KIE4NTWV3Hh2dna5p5urKu4Oj9wn4qm+7sZ6Vtx72h5fs94aJYH49NvOiG3x5UzjFpTcKS5F6CiwG6wyOQD3kyPn38i0CvMmtdBZNvqHxg5fVgvPyA1SD8bXJokno0iteu4hExKIaJiGfID1Fjmp/wjzov8yMZH+okkCEWgPQkYAkpgcACSRQASQRAIRDVN2AvGejRt7f8jx48fPnDlTsWrpIioffvhh8q7gzZs33QQigELcm0+qyJkjcDIaTzsDq1dCk8YOH+Lyay19T31rnm/X+0ICES4nSCjzWn9m8LSxw9anm47JAS7nou66WnhbHzO2qTvsxJMLRAIRDdOQD7B+JRAfe+yxbsrWrVv7tq8A1rd780kV5AiA9iCBCCCJyQFAEglENExDfkC8P4FYvWppAnFqamooZWZmpm/7CmB9I0cAIInJAUASPRABAG3QkEeY5QTiokVUJiYmkrcQN2/eHBHx3mgszIm7WNzzI7IrRk67JcuSZHmJ5EcUo3VPKXY6neHh4Yobd7vdoaGhmDwcc++I48nT8Hm1MIw28xHxOfVYumUM6pw1d9RC+SmbqRzP9ZzPcY6/aQx6TS3cro8Zn6qF48fi6GudTqf6b4jdbpefCdA3rWoB4Uz4V9TCLWrhxoMxMVnrfO9dOUydiOmXxEE3i3URxlcS+aMtvE83edzv62PG19RC+UL9nDpiRDyqFjpN/v8ntfC/MQZ1LnUeV9+a31cHfWg4fkO+BgXWqYZc2vYxgZjccnZ2VtsxAMUhZAQgickBQBKTA4AkeiCiYRqSQLzHTyAmt+ytwjykLx4Qf6zOHb9g3LIrK7PTHs7tPvk9fcIYNIsbxtG7zToIlQTiexE31fEeVwt3qYURccCofVgtdD5wnLOmJZyXV04oOwfh19Tz9F1jcpC/tm+JiCCB2DjysTTwDNcHYl1ExCGjVs77yGGfiLihl0bVT+8+63Q61Vdg61053Ij4WB3vl4yX9w35PdXHtNKLP1AL7+pjZuCE63eqhXJ0MSL+wqiVXTJq5QP4Z9XCDRERCwsL/IaIJinm0rbiVbiZQPz44/QnOQlEoD1qfefnmgBoD9qcAUhicgAAtEExCcSKC5aZCcSdO9N3cEZGRiIiDhg/Izp37WQtaSlYHCcft61/u7HOeSlCR63l0nobfz1CXlMx3186aLOZUqWDP2uyBLGdQdPh+/UqX0/hWpMDCcQSDPxYks/TXCepEySUFdg3XOmBmMtTOV5e54O4rE8o2UGj9qJaKEcXw9hh5xmjLzMjAZmVdGlb5bPWTCBeu5Zu6n73blkheAC6WqFCEohAezA5AEgigQgAaINiEogRkVwfeREzgbh169bkltXbmgAonZJA3PL2Wu3NCvK1iRSRiUZ2cv/EsWOx77VakwPQT2eNCf9ZjtsK5G6PGw/GxKRy5XDkdBw5LQ7qdDkv7rNYvto5bww6+Jzm60at/BCMs0TwpFr4lDGo3rjWIK/tvmE4nmAVZjRNYXfAVg0hmgnE27dvJ7es8tslgGYgZAQgifMdQBJXDgCANigsWLfqD3lmAnG5pVf5pAew7rSneSLQL14no0EnEJ31punZtD79sfqe/oLxhv5T40D6ebVwTh8zLhu18rrGW9TCzRET0rMLjuJShA75asdKug3cX8vxnjrPshxvzUHYngb0QAWFJRBjtaeJzQQiAPCUIgAAAAAA9yssgRgR8/PzK/y/ZgJxubWe+/CDwlvqHZ5HjEGd+5PyLaksqagp4waavCTipDqoc2t9TC10Bp0xah9TC/cag25WC0dfjG0vK4njW4ej+444KEFCoBCDfhyBFGHzOEFC2W+WdiA9mXsHBuMvTsT7L4m1zsLE19XCTcago0bt8+oBLH/5iogfqYXfKep04xIUQE3lJRBjxU6IZgJxuXgjy6UB7THoB5EAFILzHQAAAK1VXgIxVuyEaCYQ5+bSLVuWSybWcCTHtw55RbmIeLyor0lyitAhR+R+Ygwq9+hx7hs7h3+WviFyZPKhCK0V+gdGv6dR9Ty9qY4YEc8Zp4w8sUzrY8ZuozbL/IAmoiEyspEfeoiIQ6XNgVkeK/Eok8OsEQbcqhaGcbnirCh5w6iVXTBqP+3bXqxr7fmqCKBPSg3WLRcJNBOIW7emP5BXbrwIoElq3TAgkQS0B/FkAEmc7wCANij1d7Fut7thw4aln9ZmAnF6Op2QuXv3bt097Jsrbbo1JP+xZa1G96hRKwcJ9xiDfmLUypHJncags2rhSMSKTRKW6oUOhiPkY3BELRxXC03y54Z8MAQpQqwLtfqZ0PwE/VRcitBR4ISvPLvwUKbP0ztqodPH0OmmLXMeoHEe3ClIcV8VC8SzC2iYgq9uk2ejmUDctWtXcsuREfkrPoDCrNAkYSlCB0B71Joc+tD8BEAhal0MMDkA7cE3BTRMqQnEWCaEaCYQL19OL1Xb6414dTQW1MYhTts7nXHHQ74/6fzWKt+ffNf4S+VlLs+rI06phWH85n/VGFRulxMRt9VCZxFGeRXmjRE1E4i9kNHBt9UhS1vxPCIeVgsLDJUA91MmBwAtUCtk1JscrnlN+mTyUxpjxqBZvnFeMmqdh28K4jzoVtbjX/mQQETDlH11u/SEPHny5N69lda22LFjx6lTpxb9x3379iU3Hh11UvsASkLICEASkwOApFrnO5MD0B4kENEwBScQI/UBfO7cuUuXKt1vmp6ePnv27KIE4gcffJDc+Pbt2+Pj47FLvmfnLSGK9ekp9fPgqb7uBvqt1qJJfQgZ5QoSyorbYaBPSCACSFImh2+fjm+fXqsdQkT8Z0VdrvxjI6f2oVp4TR8zfknd4ePG++Is0f66Wvjr1oFEAhEN05Cr2/n5+Z/+j7qPMC/6LwcOHEhuOTbmpPYBlOTefFIFOQKgPUggAkhicgCQRAIRDdOQHxDvJYbMRVQuXLgwlHLr1q2+7SuA9Y2QEYAkJgcASSzRDgBog7IfYb5HTiAueoR5//79yVuIW7ZscXYPQEE6nc7w8HDFjbvdbq3fFACUq9PpVD/fu90uPxMALVHrfOfKAQnbjdqP1cKvGoPWCN32z6dG7ef7thdAmzXk0rZfCcSpqalkAnFmRl4eGEBhCBkBSGJyAJBEAhEA0AYNSSDeYyYQJyYmkgnEzZs3u3sGoBAkEAEkkUAEkEQCEa6jRu1dtfAJY9ALRq1s3KidoBch0AfFXNpW/FQ2E4gXL15Mbjk7a6y/DKAohIwAJDE5AEgigQggiVWY0TDFJBArLlhmJhD37NmT3HLTpk0REVdHY2Gu+r//gN3c9ECxJo1PvkPlHflKAvHW4ei+I463TX2JnPfFCVXLHR2cg+GfG3/sr5d3EGJ9IoEIIElJIF47EbdeWtO9SpP75T1rfJj+K+ND/Fvt+BB/3PgzO+rL+6Qx6FN6qa7AFOHCwgK/IaJJSrq0rXLVbiYQr169mtxybk793RBAaWp95+eaAGgPQkYAkpgcAABtUEwCMSKS3QkXMROIO3fuTG45MjISEbGLB5kruGL8nkJOc30qMEXoWFio8ff2Nv4oQr7LcEs9ZQ6oI0bEiFEr3/51Jofn9VLg/3dWPQi3HYuDr9WaqPmppwAAIABJREFUHEggAu2hJBC3n47tp9d0r9Im1MIbxof4Z/TS+L/VcbcYgx4r6tLXCRICQB2FXdquGkI0E4g3btxIbjk/P1/9nwVQtFqhQhKIQHswOQBIIoEIAGiDkhKIUSGEaCYQe70Ol+CTvga5PxqwPtQKGfXcjpADylNq4Q61MCKOGLVyBiG9SFU1zrp7P1R3+Glu6a+lN9T3xXkYIH2XsIINEdrkgLV23vih1mk6VhB5DoyISh3IU+SYWy7eQzDKswtOD8SHxbqIiEtqodM9+bZRO60WVm1nvT5MGeep/NF2xDjs5R12HoJx8KAb0A/l/S62ceNKP3qaCcTlkoYVl3AB0ADkhgAkMTkASGJyAAC0QWEJxFjtaWIzgbhc0pDLghpacj8fuN8hI6bxFfWUcW5Wh3GeblMLn9bHLIycrXuqtPnzTeMgvK4WOuGFUWtQEojrEVcdqyJMvfaUySFXD0T5Q9zhJFLH1Q+asiaHLOsLO82pC1wQGYCvvARirNgJ0UwgAgC/EQAAAAAAcL/yEoixYidEM4F49+7d5Jb8oFADqzCjcErieMvb+nhvqaeM07kGa+p7auG0MX/K64BHxA/Vws8ag/5ALXQaYsoJxImIozyOgDI5PRDl062s8JeNyWEN3VILnQc1WhKv45sXgJqKTCDG8s8amwnEsbGx5Jarrv4MoDFq9Tzl7gLQHso6CQBagPMdANAGRSYQI6Lb7W7YsGHpp7WZQLx582Zyy5UbL+IB3MtC4Wqtut4LHdw6HN13xPH05Zu5tV6NvGz0NvVVerG0l7fGrbf++Y0cg56VD4aImiEjEkkDwky4KqcHorPIdZsMenJ4N8f74jRPVC+RIoxvq1uMQcsi9yM+akwOWQYFkFupCcRY5tPXTCCOj6cf1RgeHq7+zwIoGglEAEkkEAEkMTkAANqg1ARiLBNCNBOI09PTyS17vRH/wWh01C5T/1VpS2vdUQudPlxPFnVFJaceHjYGldNquZKh8qvkLLQqG30xtr1cq2VB707Gj4y35t+qhZ9TCyNixJgc5C5yf6aPGY8ZtdfUwq+ohVlWYc6Sw3JSMPKE7wz6rlr4aMTBevHkWhtD56zuOnjyeTpjDHrZqH1CLXQuQR3y1c731R3edDC+OKkkEK+diFsviYPuFusiIs6rhU4C8WeM2n+uFta4HbzE40bt4DmtgWXtCRLKD7LEcGy7w+MIaJiyr26XnpAnT57cu3dvldodO3acOnVq0X989NFHkxtv2rRJ2D0AJVphmaalyBEA7VFrcqiVZQZQtFrnO5MD0B58U0DDFJxAjNQH8Llz5y5dulSldnp6+uzZs4sSiFNTU8mNZ2dnx8fH429GDH4GyHULVw6kfM/Y4W1qbZZ4nRyR+0fGoL+jFspL/YZ3z1l+ld4zBpUTExFRc9GkXsjothEPSXdereCGWhgRHxi1B9RCJwWzz6iVI5OyzWqhc55mWZXbiY3/vvrH/qw+Zsgv8IYIcXJ4IeZfFQeVu3BGxGSO9Le8WKqTZLmil1oxLo0TJJTdNmrPqYXOT2SVkgDL+CjPZbMST75jHA9O+86u+hLJcf6IcFajlK9C5eurMKbQQ0V9JXG+Zmb58qWHAY2PVOezmIbIaJyyE4j33FvkpO4jzIv+y8RE+kmY0dHBfwEFkAchIwBJTA4AkkggAkgigYiGKTuBeM/Gjb0/5Pjx42fOnKlYtXQRlampqWS+YGZmZnx8PD4yEojyXe5crevkOzxO+KusFZzlX5X/hjGofBNs8DmLn5IXcPy8Mah3q1AJGT0SsVUdT+6z45xrcoowjPP0c8Y9WKcbkRNQ0shNL+TmsyY5Of68ca7JfS2v62Pq5+lohDY5jL2iDunJkoLJwrrDK09K6sub5X0ZMubeLC18sqyOLV+ubIzQEohDmdo9O4l+mZNelBOIR41BB38QFhcGRDUkENEwJBAfMDEx0UnZvFl+IA1AYQgZAUhicgCQRAIRQBIJRDRMQ35AvD+BWL1qaQLxgw8+eCjl5k2niwaAkighIwAtwOQAIInJAUASCUQ0TEMeYZYTiIsWUTlw4EDyruDWrVsjIp6Z1XexOHqj2b7uxnrmPSfbFo+X9yp1Op3h4eGKG3e73aGhoTj0tj7eh+qFhfwEaGR62mWHUeucboOflLI8f+dwnkSWyU+ePpXt5e10OtV/Juh2u/xMMAh8Fq/KWeyoPbzLlU6ncy/NsKrelcMjp+OR086goiwXAE4jne1FLbEoK2tvcylwwl9YWOA3RDRJQy5t+5VAXGEVZm3HABSHHAGAJCYHAElMDgCS+PUQDdOQBOI9ZgJxlVWYr47Gwpy4Z9xWah652/FPjEEfUQtzLc7wqVp4NGfIqHYC8fLhmH9HHO8jsS4eVgsjYsS4mpGDY+/rY8ZeY4cHf796St3bG8agR0r7lMlyY+5P1bdm/FgcfY0E4lqR120LM2JczuQwYwzqrDs0phaOG4M6f6y8TI2+iMrBmJhUEojXTsStl8RBnZz7u+pf6kRZ/8A4x2v8NvugL+T44aa4RxCwxkggomGKubSteBVuJhAvXryY3JIEItAe5AgAJDE5AEhSVmEG0AL8eoiGKSaBWHHBMjOBuGfPnuSWmzZtiojYxc+IuI+cwyouKORIh3rXNSWBuDVCXlNRXuO9uH6jTiClrK43BBCqeC7Hq5T+kK9gLIIeiGunrBPckWVykBNnYYTOnEHlFKHD64FY63zvXTlsPx3b1R6ITmhXfiTFGXSrXqrH1aeNQfM120XDkEBEw5R0aVvlqt1MIH7yySfJLe/cyfX8J4BBq/Wdn2sCoD2YHAAkkUAEALRBMQnEiOh0OqtuYyYQe6stL9Fra/KXRg/EfA3dWuEN43uafI8x/WtzBbPG3tJMc+0tLNR4kXsbbzFWYT6oHg9yQ8ww8rNhZAGcpX7lxmHRmjwgL1EV3nK0tSYHYL3Isgpzy5Z+Vq4cfnQiLqs9ED8n1kXkeg7G+IT65XYcS3Jr9Yj4oVp4LMdr60RZf2SM+2w7DiRgjRV2B2zVEKKZQLx9+3Zyyyq/XQJohlq5IUJGQHtwvgNI4soBANAGJSUQo8IPeWYCsdfrcIneswafb1MPRPnuUJZORlk6lZxVC3/GGVV9X5zo4mSOTkZZBo0ILWT0/cNxW12F+T+IdXrXxYi4ZdTKnxubjPdUPt0i4ufUcb+iHkhyGNBJArYnRej0VptSC7cfiy++RgJxPcrS4A+retN4X7I8tfOWusMjB+PJSSWB+JCxvvD31MKIuCRfSRqDvmXUjqk7fMEY9D8uanJ4Xy3M8uyCsy78T4xaAP1QWAIx7j1NvAwzgTg/P5/csuISLgAagGgAgCQmBwBJTA4AgDYoLIEYy//G91NmAnEVV40eiHL+67xxReKsKJclSCi3/3AWuZFvoF1SR/x5tTAiZtRCp7WKetRbPjVq5fTiwy/GnpeVwjGrvY9ozKh17omkg9oV7DQGPWzUlvdBV44s4S8nNXZH3eEt6oi3X4j5V8Xa9qxN7LTEerJ/uzEA31f/0iyrljucFKFzxZKJEk/+1LiSlNtwh5HhkvOSEZHuEVWN/CF+wxj0T9SD8Bs5TlX5JXrXGVUO7Rpjbjdq5YlF7xs+HNtYiBVNU14CMVbshGgmEJeLN7JcGtAeyoNIAFqA8x0AAACtVWQwY4VOiGYCcW4uHbXqPcK8K0cPRCdFWJyylhj+HbXQ+TPlRKozqNP1RuakLbx7jEor9IeNPOCzauEzzvni5DtynKfXjR22XihJe9oRtqyFnPKU4tgra7AjjdOerGVxQcIsslwNepc6yuSwwfgoPqQWRsR+tdD51uiEAeUP8QXjykF+4kd20aj9NbWwrG9eETFqvKft+aAB1lKpwbrlIoFmAnFsLP0bwKqrPwNojFo9T0kkAe1BPBlAEuc7AKANikwgRkS3292wYcPST2szgXj9enpdqF7jxSw9ELFu6R0xDK1KpMq8063WDYNe6OCxt/XxLmZp9lTagTT4FCEa6Yh1INXqZ0LzE6A9lGcX9hvNVT9UC8PI1u0yBj1q1MqPlWw1Bn3UqNU8bXw8/dscK2vLnKa3ztOA24xaAyssoWEKvrpNno1mAnHXrvRn48iI0+4VQElWaJKwFKEDoD1qTQ61sswAilbrYoDJAWgPvimgYUpNIMYyIUQzgXj58uXklr3eiE4PRLl1Xa7EmXx3qD0NJn6oFv6McSeqPb3VnPuT3kFYK4HYCxmdOxyz74jjTYp1ViMYeSXliNihFjpH7w+NP3ZcLSTwuz45Sz/LsZ0dx+Lp15TJAUAL1AoZ9SaHO8baxJvVwoi4qxbKecmI+NSolR8ruWN8WJQVHZlSCyeNl+iQ+r44V+mz5aX5SCCiYcq+ul16Qp48eXLv3r1Vanfs2HHq1KlF/3Hfvn3JjUdHszytCiADQkYAkpgcACTVOt+ZHID2IIGIhik4gRipD+Bz585dunSpSu309PTZs2cXJRCnptJ3cGZnZ8fH5RBLRHi3CrE+/Yxa+HAfd2Ig5PxsGEe+08dQX4X5xdj2shIyuhOh9keNx9XCabUwvBzBH6iFXzEOpFf10vi7Rq1mSv1Li4sYO2FAeQVna+lndYfHIrR4MoAiyFcOQwdj56TSIHWDEeRwOvTJX/6+VNonVHEfqbKvq4XFvUQFRnpIIKJhGnJ121vkpP4jzIv+y8TERHJLEohAexAyApDE5AAgiQQigCQSiGiYshOI92zc2PtDjh8/fubMmYpVSxdRuXDhQjJfcOvWLTeBWNwqzO1pZSgr7q6drLhOcANchbmXI3jWWIVZ7vaYXjS+GufofUrdYWftvG8UdRDKL+9bxm1qb31hkRMGfFX9Y3/ZGDTd6LiC8Yh9JBBX86b6nh4t6gQvDj1kq/CuHJQE4sTpmDjtDCp6MsOYFjkcWtyXL1l7vpJk+X6qt2Ufjm13+rknwDrQkKvbfiUQ9+/f30nZssV53g9ASQgZAUhicgCQRAIRANAGDfkB8f4EYvWqpQnEqampoZSZmZm+7SuA9Y2QEYAkJgcASUoCEQCA0jTkEWY5gbhoEZWJiYlkvmDz5s0REe+NxoK6UIL87N5utTC86L6c1naeUvxHauFTxqDH1VdJfomc+L38HIeToHeejJhUd3i7PqZu9MXY9nKn0xkeHq5Y0e12h4aG4geHY/YdcVD5rdmqFkbE+8YTbZ9TCz/Sx4yZHC2oy3oE7w3jJXoqx1/qPIks26MWjkVEdDqd6r8hdrvdnD8TyE+tPm28L3meRHYmh4HvcJYVlpwPiytq4W3jfRnRS6PGj/wP+kQt3HQwjk7WOt97Vw6XTsS1l8RB0z3bq3lDLdxmDPqeUbtTHjTHQfiMeqrKV/i5ZHlCXH+a2Pj+JU8OG7yzBliXGnIHrI8JxOSWs7POr2IASkLICEASkwOAJCYHAEmswoyGaUgC8R4zgbhv377klps2bYqIeCLHz4i57kfJd2kuGTv894vK+8j3o5ybUfLD9LmyVIdyjOudNUoCcchIPXyoFv7c6pss66BRK08OTp76deM9dcYdsCwLoTjeNd4XeTZz8pLOqi9lJRDlIOF54z2VP2iyhEqy+FQtdFLY8sdTRKSviytwUoROskmelOSY28aIiE6ncy/NsKrelcNopnTSV9WXV87PRsQOvTTeNWplcpBQ5vyZF9XCzxiDflc9Hr5sDGotSaLu8OvqgA9FHIiFhQV+Q0STFHMHrOJVuJlAvHr1anLLuTn1yWUApan1nZ9rAqA9aHMGIInJAQDQBsUkECsuWGYmEHfuTN9/HBlxbqR6sjSYCCMOkCVxloV8s9qJWpTVlC0X76xZWKhR3tt4g9GG65tqodMSy+kaJh/Al/Qx47NG7XWjViPHNG4Yg2ZJL3qBvgzkdNLYsdj3Wq3JIXMCUZblU6asFKEjT5vINhl8pm8ooub53ksgbj8d20+v4Y4tR35K42FjUOccdxo+FuTLTA5rTD7yv6iOSMYATVTSpW2V54bMBOK1a9eSW969e7f6PwugaLVChSQQgfZgcgCQRAIRANAGxSQQIyK5PvIiZgJx69b0SnXV25o0h3yr0Gk/lytuWRD55S3utc3ShysitATijgj5LsOP1UJneUGnJdYBtVBuGxoRt43awSfIrXAo1pIXmaw1OWSWZRXmN9VBrVxeUaswY63JVzte92TlyuHjE/GpugrzXrEuIuIdtbBqd+iUq8bLO6oWbtLHjEfUwixPA2TpmF/cNwt5hwtqpQ2svcLugK0aQjQTiHfupFuzVvntEkAzEDICkMT5DiCJyQEA0AaFBetW/SHPTCAu90xBHy4L5DiVk6XKEga8rI8ZF3MkJgbvilErx2cmjYMhS1/LLEf+6Iux7WWlcP/b4ogRsbG0bkRyD8Qn9TH1AELkaK/2Z/IRaAzq3CH/D2rhLmPQf6UW/o4x6J+phXuPxS/V64HY8+ELcetVcVAnySJnop30t6w9qzC/of6lzuLjrxov72a10Mm5OzOhtUirZDRipxRPHjFeXuew/1yOTyinGfF5tfBxY9CyniSQD3vnSrI99E+o4dg2+CkJWFuFJRBjtaeJzQQiAJT0lCIAAAAAAGuvsARiRMzPz6/w/5oJxOXWeu79oHBuNBbmqv/7D3BuHcuc5hTyKqLy3dTIsXaeQ76b6tyWl7N1zvsiHwyR6Rbu/64WfiHiuJQ4vnU4umpXoSxrvGfJ+zgnuLPDcq38l35FLXw907kmn+PyYvQR8atGrex3rRlJmRwee0UfT14zOiK+xI2QdWlHjkGdRWzH1cKVrtZX4zyCIJ818ieUfFHX8V4lmfztINfVoJzbndbHjJGieo5nuZJsT1v2snLuwBorL4EYK3ZCNBOIy8UbWS4NaA+lFTqAFuB8BwAAQGuVl0CMFTshmgnEmZmZlUb8wmz1f7x4clMMZ6FVmRPTkLsK3lBHdNpaybf7nHu/TkusLPcnf1ctHI3QFlH5i4hb6qBfVAuzUd9TpwWSc3e9uHvdGicb8nw7XqIwPizGjsW+1wa9ToK3ZnRrFLUKs5w4cxoZO6vYp5/MqWCPMahDPmvkS52NEdqVw1Cm72FyoM95luXPjQNYXhDZee7hLbUwy4q9WRYflwctruktPRCB+5QarFsuEmgmEMfH049qDA8PV/9nARRtuVYGSSSSgPYgngwgickBANAGRSYQI6Lb7W7YsGHpB7CZQJyeTnfLuHv3bkTEVaMHYnERGPkOzyXjtpLc9SbL7T6nqZAsy4HkdCPKwnuVVmiSsFQvR/ANYxXmt9RTxomyOr32nsnRA7EscsxNfm1N31N32Iku/p466F8zBr2sFo5H7KvXz4TmJ4NS1CdUls/TPzYm/DG1cEofM89FnffWKAnE7adj+2lnUJHclj1XV1ZnXNneDGNmkOVrRXEtBb0dHvSzC8AaK/jqNnk2mgnEXbt2JbccGcnSnBZABis0SViKHAHQHrUmh1pZZgBFq3UxwOQAtAffFNAwpSYQY5kQoplAvHjxYnLLubm5iIhdbeqBKDvUmlmyuBtoqKZWArEPISMnSCjLlXRrieJa12XpgegECWVfHVw8mQTigBTXTmvwfqEdf2ZWtUJGvcnh2om49dJa7dAK3lELv2UcSH9onKffVsf9R8agf2PgZ43TjlB+DOavMDmsORKIaJiyr26XnpAnT57cu7dS6HzHjh2nTp1a9B8nJtJPpY6Ojgq7B6BEhIwAJDE5AEiqdb4zOQDtQQIRDVNwAjFSH8Dnzp27dOlSldrp6emzZ88uSiBOTU0l8wUzMzPj4+PxntEDMUsgJcvaxA55CbzimvRhHWtHyKiodUuB9UGZHD59Ie68Ko6XpTuV/EEcxmL0zkp1znMPcnqxJdFFVKY0SL0SUekrS8oRtTCMFpNOM005RRgR31XH/UV9zAycCT9L21BUQwIRDVPoV9/F5ufnf/o/6j7CvOi/TExMdFI2b97ct30FsL4RMgKQxOQAIIkEIoAkEohomIb8gLhxYy9KaS6icuHChaGUW7fku+oACtOOBCKA2pgcACSxRDsAoA3KfoT5HjmBuOgR5v379yfzBVu2bImIeKK0RVSKa+QvP4k8ZYTDJ0p7lbDGOp3O8HDVB+q63W6t3xTWDQ57oLZOp1P9fO92uw899FCMv7Kmu9R/rWoJMvgnkeXLFa5V1rfe+V5546GhoTh0Og6dXtO9Svsj9SD8Ql93ozqezwWAdaMhd8D6lUCcmppKbjk7W9pPhwBUhIwAJDE5AEhicgCQRA9ENExDEoj3mAlEVmEuFXfm0T/tSCACqE1JIGKtlfUIApcrDdXpdO6lGVbVhysHZ7Gju2rhUePoPWvs8Jha+Lo+Zvy2UTt4b6kv7xFmpDW3sLDAb4hokmIubStehZsJxIsXLya3JIEItAc5AgBJTA4AkuiBCCCJXw/RMMUkECsuWGYmEPfs2ZPcctOmTdX/2TT5VmGruhEB6wAJRABJJBDXIzJ9WAeUHoiOGgvCL5Hly9/HRu3X1MKfGIOWhSDhOkYCEQ1T0qVtlc9aM4F49erV5JZzc3PV/1kARav1nZ9rAqA9CBkBSGJyAAC0QTEJxIhIro+8iJlAfPjhh5NbVo8jLau4IOEN9WeRwa9pCPTVwkKNY7jWxtDJM1IwKaFvmBzWJecuDu/Ralg2uppBTw53jNqn1ULng/iQXqq3MnzSGPSK+sfuznHkyy0mn23XeQrAV9gdsFVDiGYC8fbt28ktq/x2CaAZaoUKSSAC7cH5DiCJKwcAQBuUlECMCj/kmQnE5XodtvFZgx+rhVuc+5PqfbB3jUGf5OYbHqBEA24dju474njF5eOyxJMv6aWxzagF7lNSqPC76nn65XL+xp+6YdRuky8eSnuVZC0LEsqUBOJ7J+LKS+J4fynWRUTcUgsX5y7q+COjdq9a6PRAlL/57TYGldGLe03p2dvh2OakhYH1qLzfxTZuXOlHTzOBOD8/n9yy4hIuABqAaACAJCYHAElMDgCANigsgRjL/8b3U2YCcbmkYRsvCz6rFmaJU5EiRF5b3s69BwOU5RyX48lA/ygJxKsvxNyr4nhO+KusIKHcaC8iRoxx31ML5S5yaChlcthhHL3plktrbLNR+xmj9lG18GljGpR7IGaxL/cONFtxjwoBa6m8BGKs2AnRTCDyAyIA1kkAAAAAAOB+5SUQY8VOiGYCcW5uLrllGx9h5mYL2kpphV5cD0QWNcb9vqceD8+XdjDIDXPHjsW+15S7ibteEUdslfTFVzVOTnM3t4cbZ/DBsaGDsXNy0FGDn1t9k2XNqoXO+sITeqnV6LwgzqF7Xi3M0rEx1yVoWStrA+tVkQnEWD4qaCYQx8bGkluuuvozgMaodcOABCLQHsSTASRxvgMA2qDIBGJEdLvdDRs2LP20NhOIN2/eTG65cuNFAE1Sa9X1XuiguB6IpAhxv+KChDKvYa4ST26VN9U/+WiuI7A1R357ZMoKKZPD9tOx/fRa7dAKtqmFuYJjWRqdD/5AckZ03prBy3UJSpAQ6IdSE4ixzEe1mUAcHx9Pbjk8PFz9nwVQNBKIAJJIIAJIYnIAALRBqQnEWCaEaCYQr169mtzyzp07wh4CKFGtlgW14ooAilbrfGdyqIGurOuWvEC2szp2gUEhJYE4dSKmXxLHe6q8l0gnzw/t6ZfXnu+pBX5YtPFxBDRa2Ve3S0/IkydP7t27t0rtjh07Tp06teg/7tu3L7nx6OiosHsASrTCMk1LtXGFJaCtmBwAJNU635kcgPYgcYyGKTiBGKkP4HPnzl26dKlK7fT09NmzZxclEKemppIbz87OLvd0M4CGIYEIIInJYRXZWhlizTiLXLeJEk+eOB0TOXogynKlfbOMW1YM9khRe+soMHJOAhEN05Cr23uLnNR9hHnRf5mYmEhuSQIRaA9CRgCSmBwAJJFABJBEAhENU3YC8Z6NG3t/yPHjx8+cOVOxaukiKlNTU8l8wczMzPj4ePzJaHTnxF38Zo65412nT4RamA5xViP/Tuv0/ni6qGld7kZUXIhA7j4TETNq4dYX45GXiwkZFdcIRj56I+JhY9xZtbCsAAKq+PvqQfi5Y/F3XlMmh3/yQry/+G5lVUfEugjj+u5fGoN+Wy38x8ag243ac2rhK+rk8C/UI/CQWBcR8SOjtsYh/yD5MjIi1DMmIuK31cJptXDsYDw3qSQQf3Iibqo9EP+dWBcRcV4tdHJUzoX64q9rlf3QGLTGqpwPyrJmNNYxEohoGBKID5iYmOikbN68uW/7CmB9I2QEIInJAUASCUQASSQQ0TAN+QHx/gRi9arlEohLzczIiSYAhSkmgQhgsJgcACSxRDsAoA0a8giznEBctIjKTxOIS7fsJRBnI+RbhvLTxM4zIO8ZtfK1jXOXpaw7ss4DpPqgGcaM142/9Bn1gLimjxnXjdpHotPpDA8PV9y82+0ODQ3Fh4fj7jviiPLtiZtqYUR8xTl61ffUOXo/Nmrlv3W3WviWOuQn6ogR8TVj8j2j7vAT+pjxvlr4M8agcpONnRERnU6n+m+I3W73oYceivcj/oM6aNV5qK+1v28Melgt/Etj0HeN2seMWo3cUeGiMeiPjVr5EeYaad0l/o1R+0W1cL9aOBxx73yvpnflMBXxgTqoc4V/Wy10Lhycizr5HH/fGFR+0PtJtdBp8zKil+rkNi/OFyh5Cg2jU1aBK7cAa6chd8D6mEBMbjk760xXAEpCyAhAEpMDgCQmBwBJ9EBEwzQkgXiPn0BMbtlbhfmXS/sZ8VjuHWi2LPejnJ76MjlF6DiU7XafkkB87O013aWGONKaW7jF/aXHcuywHNNw/J5VrSQQT0bMq+Nl+ZT5DeOrzuPqDn8n0/crJ8al+e0c7+kvZBjT8teN4yHT4ledTudemmFVvSuHp0/H06fF8b4j1mH9Km61Q5nz0eY8mZfJwsJtDVgLAAAgAElEQVQCvyGiSYq5A1bxZp2ZQPz44/RjciQQgfaoFQ3gmgBoD9qcAUhicgAAtEExCcSKC5aZCcSdO3cmtxwZydJbAkAGtZZLY201oD1qne+9BOLYK2u3P2tCThE6XjVqv2LU/hUmcPSH0gPR4XSRyxJtlnvBR8STnKcAsF6UdAesymetmUC8di3d4/fu3bvV/1kARasVKiSBCLQHkwOAJBKIAIA2KCaBGBHJ9ZEXMROIW7duTW5Zva0JgNKRQASQpJzvt1+IeTVf5/RWHVcLnScuJtXC3zEGdfz36o+8f5eZfy1l6mPoGPSVQ3HLwm7KvQMAgH4o7A7YqiFEM4F4+/bt5JZVfrsE0AyEjAAkcb4DSOLKAQDQBoUF61b9Ic9MIC639Cqf9AAAtJySG3J6IO4srWvYLXWHc8WpnuDqDv3BswuraM8SwwDQaIUlEGO1p4nNBCIAtPHKHgAAAACA5RWWQIyI+fn5Ff5fM4G43FrP/KAAtAeJYwBJg54cilt79Ki6w/+l8cL+rl6a4Sp4Sv1LWxXg+jPjePisWlhW48XXjZdoWi38lvES/Wtjh7+pjiufblHaGcfEAmBQyksgxoqdEM0E4nLxRpZLA9qDB5EAJHG+AwAAoLXKSyDGip0QzQTi3NxccsteMvHqaCykN1hdWTc2gRajFTrQWO+qJ+zYsdj3mnK+T70QM+oqzIdyXDmcN+a0x9Ud/nv6mHHHqP2HauG31cLi8j5Ohkv2ldJepcFfDMhBy4iY7dte1PCYUXuDeN1q2vOXAsit1GDdcpFAM4G4devW5JYrN14E0CTLtTJIIpEEtAfxZABJnO8AgDYo9Xexbre7YcOGpZ/WZgJxejrdF+Tu3bsREVci5MuD3Wqh44pxO/SGWuj0bJJ3+CN9zHi2qGu+9nQ5yZJ62Pxi7Hh5hSYJS5FARD+9ZRxOR0o7x7P4M7Vwb8S+ev1Meht/P+JDddB3jONhVC38Q33M+DV1h/8fY1AngbjNqNXIreu2GIO+a9TKB9KIMejvGUf+r6uF29XCoYOxc1J5duHSibj2kjjoO2JdRMSUWjhmvC+39dL4qlr4I2OH/yofqegPvimgYUpNIMYyZ6OZQNy1a1dyy5ER5zoIQElWaJKwFKEDoD1qTQ61sswAilbrYoDJAWgPvimgYUpNIMYyIUQzgXj58uXklr3eiJ83uobI2TqneaJTO5rjbom8w1kCnlkUFySU5ftLayUQWWEJ/USKcK39rvUKK5PDb7yijyd3bIyIGj91Puiv62NGjZfnQc8Zgzpz8BGjVvOMegROGgfDIb00z1LgB40/Vr6SdJ7aqRky6k0Oe0/H3tPieJ8ae7tHLdypjxkfG7U71MJ9xqBAn5BARMOU/dV36Ql58uTJvXv3VqndsWPHqVOnFv3HffvSHzWjo/IjHAAKQ8gIQBKTA4CkWuc7kwPQHiQQ0TAFJxAj9QF87ty5S5cuVamdnp4+e/bsogTiBx98kNz49u3b4+Pj2k72FLcK87aidtjpl9eeTB+qqbVoEglEoD2UBOLVF2JOXYXZCX/JgTWnZcvT6g7fNT7EN+ulenPAo8agmixLcufiXDNneeJn8M8ufGrUPqsWOmmKu0atvLx7kPxCfiQQ0TAN+eo7Pz//0/9R9xHmRf/lwIEDyS3Hxsa0HQNQnHvzSRXkCID2IIEIIInJAUASCUQ0TEN+QLyXGDIXUblw4cJQyq1bt/q2rwDWN3ogAkhicgCQpCzRDgBAacp+hPkeOYG46BHm/fv3J28hbtmyxdk9rLm53DuABul0OsPDwxU37na7tX5TAFCuTqdT/XzvdrsPPfRQ7DIWUXGU9cTr/2DU/opR+3WjViN3XMnVbkXeYedZ+PNG7eNGraF3vlfe2L1ycL6X/EAtPG4chO8bT3E+ptY25GtuBd9TX6Lni/qkALAONOQOWL8SiFNTU8kE4szMTN/2FcD6RsgIQBKTA4AkEogAgDZo2q0ZM4E4MTGRTCBu3uz06G4ZuXF7GIkJp9M88CASiACSlAQiqni5NR/ixa3blmWHd2cY0zToBOLXSzuQfi3HDm/LMKbuNeML1HW1cMYYdK9aeMQ4GG6UtSDJcGy7k3sfgD4r5tK24qeymUC8ePFicsvZ2dnq/yyAohEyApDE5AAgiQQigCRWYUbDFJNArLhgmZlA3LNnT3LLTZs2Vf9n266svkvAEiQQASQpCcTvvhBXXhXH+47xeSo/DeB8iJ9VBz2oj2mFjP5QLfw2lzp4wKATiI7iGnG2hNNisj22lfcqLSws8BsimqSkO2BVPmvNBOLVq1eTW87NsUgH0Ba1ogFcEwDtQcgIQBKTAwCgDYpJIEZEsjvhImYCcefOncktR0acxeQAlGRhocbtzVobAyharfO9l0jaFlHpCYp+y/I0wL9XC5919ta4i0OQEH1SUgKRICEAQFXYHbBVP27NBOKNGzeSW87Pz1f/ZwEUrVaokAQi0B5MDgCSSCACANqgpARiVAghmgnE5Xod8kkPtAehQgBJyuRw9JU12JH16m9nmTyLmrFfVX9Wdm5k/6rxEmXpl/cPjR/f5Qv2rWrhloNxfJJnFwAAbVDe72IbN670o6eZQFwuaVhxCRcADUBuCEASkwOAJCYHAEAbFJZAjNWeJjYTiMslDbksAACg5cgNrUJehdnqgViUX27NX+r4m+W9SkwO65Gcn43SOkVeUf/S3Tn+zBvG++KswiyPW+DSz8DaKS+BGCt2QjQTiADA1wAAAAAAAO5XXgIxVuyEaCYQ7969m9ySHxSA9iBxjGzeMo69I3xOrbmSJodJdVed5Ztn9NK2OK++L48b78ubxnF7VB1XjkRFplSUp6TJoT3KShFirREkBPqhyARiLP+ssZlAHBsbS2656urPABqjVs9T7i4A7cE6CQCSON8BAG1QZAIxIrrd7oYNG5Z+WpsJxJs3bya3XLnxIoAmqbXqOqED9BMpwvWt1vnexsnh6+oBbLXE0kszrOA8rRY+bgz650bth+pbIy9qHBG7jVo5+fgTdcSRg/HkJJMDcrqTewdqIQkIlKzUBGIs8+lrJhDHx8eTWw4PD1f/ZwEUjQQigCQSiACSmBwAAG1QagIxlgkhmgnE6en0reHleiMi4d0cOYKy2uXILZDC6ILktEBK/65eTZYGNPJBuO3F2P1yrZYFfcgRyKsEvmEM+nOrb7KsKbXQuUN+26j95sAPwjfU9/SiMaizuuv/qu7w3zIG/UN10F36mDGiFm49Fk++Viue3Nt46v9t784Doir3uIE/MOyibIqgLAWoJSgKaKQiuFXmUl0193Ipu9X1ZprlTb1laeU1zZuVtqs3TQ0v5JItyiIuJSIuqai4gIIKsguyDfP+ce47Ly/MDGeeZ2bOPPN8P3/pzHz5PZ45Dmd+z3POeYTU/EZZlOXqKfnUSYbPtBu0wRj6mgqsImTRR4nR5jJk82iDLKfuDGTIUh8Qsix7xPJks6L+lcoigqsPliqlBwD64f872BiOVyCSZv8hnZz+953glVde8fPzk5P18vJ6/fXXWzzo6+ur88XOzs60YwQAzhi4TVNrWEcAIA6jPhyMWssMAFwz6v87PhwAxIFvCmBjuFmB6Ojo2HoZYOtfwGfPnr1165acH1hWVpadnd1iBWJBge6lNbW1tfrObpZLkfvuKYJlxQRfCwmpKfKeUt9IkUchTP9Yo1YgGrUiSTfqRZpdGYqy3B9TkRU0fKFeuRBh0mHIx7KQkNpj/O1INB8OXX8112gMC1GiaDclikKblvH3f407NMuTQSa+FgMqAhdQtmJYgQg2hptfYGPGjJHzMp2nMLdr187dXcfFnH/7reVZRV276v5G7uLiIqc6ANgALDICAJ3w4QAAOmEFIgDohBWIYGP4WIFoZ2c3fvz4X375pbq6WucLtA2+4cOHHzhwoMWz+lKtb6JSUFCgc31BTU0N6wpE7hYSUnNTegAAbCy9AlERgqz2BTApnj4cLtEueejG8OFAfbHdQPqanN2FGWwUViACgE5YgQg2hptfYO7u7uPGjWvzZa1XIDo7O3t6enp6erZeRahzBaJaFzc3dMUARIFFRgCgEz4cAEAnrEAEAJ2wAhFsDB8NRGmmbuzYsd7e3jpf0K5dO+kPw4cPb/FUXV1deXl5eXl5bW1ti6dar0DMz8+31+Xu3bsm+GcAAA94WmQEABaEDwcA0AkfDgCgE1Yggo3h4xRmiZOT0+TJkz/99FMDr2mxAlGlUrVv//9Obqmqqmq+fOC3335rcROVoKAgnbOCOi+hCLqxnBq5n/YTdjhXcztVDL9I2ivxLy1gGDD1HUKUo1arHR0dZb64qalJpVKR2z1I40XKeh0oc+QCbZAQEsPwvlDvD070NUkJQ9byFxc/SbuJmP6ZDNkztEE/hqKVtEFnhqKutEH3YSRkv1qtlt8maGpqsre3J7cfIbUtT3eQy4j1jq0U0QZZboRCfbcults6KfJrkS8HGDZvDW2Q5ZZ6j/P3nqrVagcHud+q/nfkAKA4wY7wFaHRaNBDBFti7TNg0v837a/k4cOH67zPSYcOHbQvaP64Wq0ub6bFyUc6r4GocxitVy8CgK3COgIA0AkfDgCgEz4cAEAndA/BxvC0ApEQolKppk2btnLlSn0vaLEC0cPDo/l/Wo1GU1lZqb0SQesViLgLs8L4WkhIjbvlEoLNMdKsQOzMshqQVowCNQlRaH/opEBNen14+y+j+1cftESzArHzr2Ydkl4htME8hq86um9ZJwP10kVxUN8VhzAsvCWEhNEGqXcGPmEFInBJsCN8RWAFItgYa28gqlSqxsZGV9f/d+wzYMCAsLCw3Nzc5i/z8fGR/tDiLswVFRUGfnjrFYh0amtr6+vrCSFubm7yjx4kVVVVGo3G3t7e2LOkGxsba2pqCCHOzs7Ozsad0FVTU9PY2EgIcXd3N2oWVKPRVFVVEUIcHByMvbFMfX29tJDTxcXFycm4Uxmrq6ul1aPt27c36iO4qalJun6lo6Nj873IrCorKwkhKpVKe2lOmVg2kfY9pd5EFO9pXV1dXV0dIcTV1VV+x01y9+7dpqYmOzu75hcZkEOtVkv3VXdycjK2s3/v3r2GhgZCSLt27Sxz7G6S3V67wlomlt0en2ZmRb3bazcRy25v7CYiSn+aGTtgpT7N6DQ0NNy7d49Y4W7v+ojOh+sbSG1tEyHExcXOyVHPbxk9D1ff06jVGkJIB3fj9kDuPs2otf1L3E33+9LUpLlboyGEOKjs3Fz1vAGeuh+uqyd1DU2EEFdnO0cHPVk9W/1utaapSWNnZ9fe3bidQa0m1feaCCFOjnYuzsZ9qWb5JU79aab9r0rxaUZHe5zDsttTbCLq3d56P830UOTYjBq/v8TxlQTANmms21NPPTVmzJjp06c3f/DkyZNj/n/r16+Xnlq7dq32wSlTpkxvZdq0adoXfPDBBy3KNTY2VujS1NRkYJArV66Mjo6Ojo7+448/jP0HxsXFRUdHjxw50tjggQMHpKKffvqpsdn58+dL2WvXrhkVrKiokIIzZ840tuiWLVukbGJiorHZKVOmSNna2lqjghcvXpSCixYtMrYoncbGRqni008/bWw2OTlZym7atMnY7HPPPSdlS0tLjQreuHFDCv797383tujnn38uZX/55Rdjs2PGjImOjn744YeNDR4/flwq+t577xmbXbZsmZQ9deqUsVk6mzZtkiomJycbm3366aelbGNjo1HBc+fOScElS5YYW3TVqlVS9ujRo8ZmBw8eHB0d/dhjjxkbTElJkYp+8sknxmYXLFggZa9evWpUsKqqSgo+++yzxhalNnLkyOjo6Li4OGODf/zxhzTalStXGptdunSplD179qxRQbVaLQUnTJhgbNEff/yR+tPs+eefl7IlJSVGBQsKCqTg3LlzjS3K8mlG59dff5UqbtiwwdjsK6+8ImWvX79uVLCsrEwKzp4929ii//nPf6Tsf//7X2OzEydOlLINDQ1GBc+fPy8FFy9ebGzRDz/8UMoeOXLE2Gx8fHx0dPSjjz5qbJDazJkzpdFWVFQYFczLy5OCr776qrFFP/30Uyl74MABY7OKfJr985//lLJ//vmnUUGTfJpt3LjR2CydM2fOSBXfeustY7MffPCBlD127Jix2UGDBkVHRz/++OPGBvfv3y8V/eyzz4zNzps3T8rm5+cbFSwvL5eCs2bNMrbod999J2V37txpbHbSpElStr6+3tgsnTfffFOqmJOTY1Swvr5eCk6aNMnYojt37pSy3333nbHZWbNmSdny8nKjgvn5+VJw3rx5xhb97LPPpOz+/fuNzT7++OPR0dGDBg0yNnjs2DGpaOuWAoANs/YViO3atauoqOjYsWPzByMjIyMjI0+dOqV9xN/fX/qDdgWim5vbxo0bW09BaDSa2bNn37lzh+hagahSqSw2oQQAAAAAAAAAAGD9eL2I77PPPqtzUbT2GohDhgzRuYDZzs5Oe6OV336jvTEiAAAAAAAAAACAGKy9gditWzdCSERERIvHw8LCBg4cqP1rSMj/rhaubQ62uB1zc8OHD5eaj6a6BiIAAAAAAAAAAICtsvYGogHTpk1rfXlgaQXi/fffHxoaqi/o6+vbq1cvghWIAAAAAAAAAAAAbbH2ayD+85//1PdUly5dkpKSWjz4yiuvvPLKK23+2OXLl7OODAAAAAAAAAAAQAAcr0AEAAAAAAAAAAAAc7PTaDRKj4F7eXl5t2/fJoQ88MADxt7E+fjx401NTY6Ojn379jUqWFpampubSwjx9/cPDAw0Knvx4sXy8nJCSO/evV1cXOQHGxsbT5w4QQhxd3fv2bOnUUVv3bqVn59PCLnvvvt8fX2Nyv755581NTWEkJiYGHt7I7reNTU1f/75JyHE29s7LCzMqKJ0NBpNZmYmIcTV1VU6U16+4uLiq1evEkICAwO1NxaX6dy5c3fv3iWE9O3bV+ftg/Spq6uTbmju6enZvXt3o4oWFBQUFBQQQsLCwry9vY3Knjx5sr6+3s7Orl+/fkYFKysrc3JyCCG+vr733XefUdkrV65Id2Dv2bOnu7u7UVk6N2/evH79OiHk/vvv79Spk1HZM2fO3Lt3jxDSr18/nfeM0qe6uvrs2bOEEB8fHwMXc9BJ+2nWo0cPDw8Po7JZWVlqtVqpT7NevXq5urrKD6rV6qysLEL1aUYtOzu7oaHB3t4+JibGqKB2t+/cuXNwcLBR2cuXL5eUlBBCwsPD27VrJz+o/TRzcXHp3bu3UUVZPs3Onz9fVVVFGD7NPDw8evToYVRRlk8zOtrdvkuXLgEBAUZltbt9ZGSks7Oz/CDLL3HtpxnFL3HqTzPtL3FePs2oaX+JR0VFOTgYcXpQbW3t6dOnCdUv8Rs3bhQWFhKq3Z7904zll7gin2YBAQFdunQxKkvn7t27586dI4R07NhRe5F3ma5du1ZUVEQYvpI4OTn16dPHqKBJPs14+Uqi/TQz9isJNe0v8YiICDc3N/nBpqam48ePE6qvJEVFRdeuXSOEBAUF+fn5GZXl7tNM+kpi4U8zAH6hgQgAAAAAAAAAAAB64RRmAAAAAAAAAAAA0AsNRAAAAAAAAAAAANALDUQAAAAAAAAAAADQCw1EAAAAAAAAAAAA0AsNRADzqq+vP3z48PLlyy2ZFacoS5alKAAAAACAuTU0NPCVFacoYxaAR0bcWx20MjIy5LwsLi7OSrLiFGXMmpBGozl37lxqauqhQ4dqampUKpUFsuIUVWrAbeJut8eAZWbpCLWJ+BqwIr8pzpw589lnn82cObN///7aB8+ePbt9+/bbt2/7+flNnDixZ8+eJgxyV5THAdPhbrfHgGVm6YizicQpyqiysnLPnj3Hjh3Lz89vbGx0cHAICgp66KGHRo8e3b59eyvMilOUMQvAOzuNRqP0GPgzduxYOS/btWuXlWTFKcqYNYnr16+npaWlp6cXFRXZ2dk98MADCQkJgwYNkvMbhTorTlGlBiwTd7s9BiwzS0eoTcTXgBX5TbFhw4aMjIxNmzY5OPxv+jY3N3fhwoX29vb+/v43b97UaDQfffRRcHCwqYLcFeVxwHS42+0xYJlZOuJsInGKssjJyVmxYkVFRYWbm1tQUJCbm1tNTU1+fn5NTY2Xl9fixYu7d+9uVVlxijJmAWwAViBSGjp0aL9+/bR/vXz5cmJi4ssvv+zu7k4IyczMTElJsaqsOEUZs9TKy8szMjJSU1Nzc3MJIYGBgdOnT4+Pj/f19TVfVpyiSg2YQovdrwWjdl3LZDFgmVkK7777rr6nqqqqDh8+nJmZWV9fb9qsIkW5GzBLUWpnz57t16+ftkVFCElKStJoNKtWrQoJCSksLFywYMG2bdveeOMNUwW5K8rjgOm0/lEXLlxITk5+4YUXPD09CSFHjhzRt/SJOqtIUaEGTE2cTSROUWplZWXvvvuuvb39a6+9NnDgQO2JMmq1OiMj48svv3znnXc++eQTqbo1ZMUpypgFsA1oIFIKDg4eOHCg9q9OTk6EkOjo6I4dOxJCioqKrC0rTlHGLIX09PS0tLTs7OympiYfH5+nnnoqPj4+JCTErFlxiio1YGotdr8WjNp1LZPFgGVmKURGRrZ4pL6+/tixY2lpaVlZWSqVKiYmJj4+3rRZRYpyN2CWotSKi4uHDBmi/atGozl58mR4eLj0odSlS5fBgwdnZWWZMMhdUR4HTEffB1FUVJS/vz8h5MaNGybPKlJUqAFTE2cTiVOUWlJSUk1NzerVq1scr6pUqoSEhICAgNdeey0pKWnmzJlWkhWnKGMWwDaggQjAavXq1YSQfv36PfnkkxEREXZ2dhbIilNUqQHTUalUTU1NBl6gVqubL3JRPIsBy8wyampqOn36dFpa2tGjR2tra3v16vXyyy8PGDDAzc3NfFlFinI3YJaixqqrq2u+B968ebOqqio8PFz7SKdOncrKykwY5K4ojwMGADChzMzM/v3765vtDgsLi4mJOX78uM4WlSJZcYoyZgFsAxqINBwcHO7evdv8kaqqKkLI3bt3pTVuVVVV0tmyVpIVpyhjlo6Pj09JSUlWVpZarS4pKYmNjXVxcTF3VpyiSg2Yjru7e2VlpYEXVFZW6tv9FMliwDKzLI4cOfL555+XlZWFhIRMnjx58ODB3t7e5s4qUpS7AbMUpeDj43P16lXtX6UVbc27VGVlZTovyUod5K4ojwMGADCh4uLioUOHGnhBaGjoqVOnrCcrTlHGLIBtQAORhr+/f1ZW1rRp07QLmo4fP25vb5+amjpz5sza2trff/9dWtZuJVlxijJm6XzzzTfaBSwnTpxwdnaOjY2Nj4/v27dvm3f4pc6KU1SpAdMJCgo6f/68gRfk5OQEBgZaTxYDlpllkZeXV1ZW1qtXr6lTpz744INGrYSlzipSlLsBsxSl0Lt3b+n+77GxsXl5eYmJie3bt4+IiNC+4NKlS127djVhkLuiPA4YAMCSWH5VKZIVpyhjFoALqrffflvpMfDn3r17aWlpJ0+erK6uvnTp0g8//PD777/PmDHj+++/T0lJSUxMvHPnzrRp03Qub1YkK05RxiwdOzs7Pz+/2NjYsWPHBgcH19TUSBfS+vnnn4uLi9u3by+tfDRtVpyiSg2YTnl5+YEDByIiIjp37tz62TNnzuzYsWPkyJE9e/a0kiwGLDPLIiAgwMPD48KFCzt37kxJSSkvL/f29vbw8DBrVpGi3A2YpSiFoKCgAwcOpKWl7dix4+eff66trX3ppZdCQ0OlZwsLCzdu3PjYY4+13gOpg9wV5XHApuLt7T1w4MAuXbpI81ulpaW1tbUJCQlmzSpSVKgBUxNnE4lTVKYjR440NTUZuF7znj17VCrVY489ZiVZcYoyZgFsg51Go1F6DPxRq9Vr1qzR3nLLyclp1qxZjz/++N69e/fv39/Y2BgfHz9u3DidUxCKZMUpypg1lYqKioyMjLS0tIsXLxJC/Pz8EhISpkyZYtasOEWVGrAclZWVL730UmNj4+zZs+Pj46Ub+BBC6uvrDx48+NVXXzk4OKxfv17nqXCKZDFgmVmTyMvLS0tLO3jwYHFxcUhISHx8/ODBg318fMyaVaQodwNmKWqUmzdvJicnFxYWenl5DRs2rPm9XDQaTUNDg6Ojo85fT9RB7oryOGAAAFPZtm3bzp07v/zyS5138i0tLZ0zZ86ECRMmTpxoJVlxijJmAWwDGoj0rl+/fu3aNRcXl+7duxu7YEGRrDhFGbMmVFhYmJqamp6efuvWrV27dlkmK05RpQZs2JkzZ957773q6moHB4cuXbq4urrW1tYWFBQ0Nja6u7u/+eabzU+Ls4YsBiwzayoajebcuXNpaWmHDx+urq7u1avX8uXLzZ1VpCh3A2YpCgBgQlLP2pJBpbLiFJWpurp60aJFvXr1mjNnTutn169ff+7cuQ8++KBdu3ZWkhWnKGMWwDaggQhgCTk5OQ888ICFs+IUZcmyFNWnrKxsz5492dnZhYWFtbW1rq6u/v7+UVFRo0aN8vLyssIsBiwzayzDFwlpaGi4cOFCfX29zhY2dVaRotwNmKUoALszZ8589tlnM2fO7N+/v/bBs2fPbt++/fbt235+fhMnTtR3xjR1VpGiQg2YUWVl5Z49e44dO5afn9/Y2Ojg4BAUFPTQQw+NHj3a8NJ46qBSWXGKAgDYGDQQAQAAzOKZZ56R87LNmzebMKtIUZYsd0Wpaa+tYVhcXJypgtwVZckqNWA6GzZsyMjI2LRpk4PD/+5nmJubu3DhQnt7e39//5s3b2o0mo8++ig4ONiEWUWKCjVgFjk5OStWrKioqHBzcwsKCnJzc6upqcnPz6+pqfHy8lq8eHH37t1NG1QqK05RAADbgwYiDRxVW21RxiwdcTYvd++p5XcGAAB9xo4dK+dlrZc9Uge5K5/oECUAACAASURBVMqSVWrAdObOnRsaGjpv3jztI6tWrTp8+PCaNWtCQkIKCwsXLFjQp0+fN954w4RZRYoKNWBqZWVlf/vb3+zt7Z9//vmBAwdKd+cghKjV6oyMjC+//NLOzu6TTz5pfdk16qBSWXGKUhPqYJuvooxZANvgoPQAuLRq1So5L9P52aFIVpyijFk64mxe7t5Ty+8M3B3QYMAyswDsWrcbLly4kJyc/MILL0hfPo8cOaJzL6UOcleUxwHTKS4uHjJkiPavGo3m5MmT4eHhISEhhJAuXboMHjw4KyvLtFlFigo1YGpJSUk1NTWrV6+WSmipVKqEhISAgIDXXnstKSlp5syZpgoqlRWnKDWhDrb5KsqYBbANaCDSaPNA09qy4hRlzNIRZ/Ny955afmfg7oAGA5aZNYf6+vrMzMzU1NQlS5ZYLKtIUZYsd0UNGDhwoM7Ho6Ki/P39CSE3btwwbZC7ojwOmE5dXV1TU5P2rzdv3qyqqgoPD9c+0qlTp7KyMtNmFSkq1ICpZWZm9u/fv0WLSissLCwmJub48eOtu1TUQaWy4hRlMXTo0H79+ul7NjMzMyUlxaqy4hRlzALYADQQabR5oGltWXGKMmbpiLN5uXtPLb8zEELi4uIGDBjAURYDtjDpVr+pqamHDh2qqanRng9l1qwiRbkbMEtRAKP4+PhcvXpV+1dpOVvzFlVZWZm+mzNQZxUpKtSAqRUXFw8dOtTAC0JDQ0+dOmXCoFJZcYqyCA4O1ncESwgpKiqytqw4RRmzADYADUQAAFMKCgoycGBhhVkM2GKuX7+elpaWnp5eVFRkZ2f3wAMPJCQkDBo0yKxZRYpyN2CWogAUevfuLbWqY2Nj8/LyEhMT27dvHxERoX3BpUuXunbtatqsIkWFGrD52NnZWTioVFacovqoVKrmC2BbU6vV2tv7WENWnKKMWQDbgP0bAADAjMrLyzMyMlJTU3NzcwkhgYGB06dPj4+P9/X1NV9WkaLcDZilKACLCRMmHD169F//+ped3f/uZzhv3jztotfCwsKcnBx99wqnzipSVKgBUwsICLh27ZqBF1y7di0gIMCEQaWy4hSl5u7uXllZaeAFlZWV7u7u1pMVpyhjFsA2oIEIAGA5arW6oaHBxcWFlywGzCI9PT0tLS07O7upqcnHx+epp56Kj4/XdyklU2UVKcrdgFmKmlBkZOSaNWs6duwo/dXf3z8qKsqsQe6K8jhgOfz9/desWZOcnFxYWOjl5TVs2LDIyMjmzyYmJjo6Opo2q0hRoQZMLTY2dufOneXl5Tov0FxaWnr8+PEJEyaYMKhUVpyi1IKCgs6fP2/gBTk5OYGBgdaTFacoYxbANqCBCABgOYmJiVu2bNm1axcvWQyYxerVqwkh/fr1e/LJJyMiIow60Yk6q0hR7gbMUtSE3N3dw8LCtH8dOHBg//79zRrkrihLVqkBy+Tv7//iiy/qfMrOzk6lUtXV1embz6DOKlJUqAHTGTNmzOHDh3fs2DFnzpzWz27fvt3f33/06NEmDCqVFacotaioqE2bNp05c6ZXr16tnz1z5kxOTs6zzz5rPVlxijJmAWwDGog01q5d2+KR4uJiQsjGjRtdXV21D86bN89KsuIUZczSEWfzcveeWn5nAGjOx8enpKQkKytLrVaXlJTExsbK/8JJnVWkKHcDZilqPnz1zTG7YFZCbSJxBqxPu3bt1q1bp+/ZF198UVogb8KgUllxilIbMWJEUlLSihUrZs+eHR8f7+TkJD1eX19/8ODBr776qkOHDo888oj1ZMUpypgFsA1oINLQd3f2o0ePNv+rzq6EIllxijJm6Yizebl7Ty2/M7z55pvUZy4oksWAzeqbb745ffp0Wlra0aNHT5w44ezsHBsbGx8f37dv3zbv8EudVaQodwNmKQoAYGHi9FjFKapPhw4d3njjjffee2/dunXr16/v0qWLq6trbW1tQUFBY2Oju7v7okWL9N0EXJGsOEUZswC2AQ1EGomJiXxlxSnKmLV8Rb42L3fvqeV3htjYWL6yGLBZ2dnZRUZGRkZGvvjii3/88Yd0W8/09HQPD49BgwYlJCT06NHD5FlFinI3YJaiAAAA5tOrV6/PPvtsz5492dnZhYWFtbW1rq6u9913X1RU1KhRo7y8vKwtK05RxiyADUADkYZ2ubI+BlazK5IVpyhjlo44m5e799TyO8OKFSsMv6CwsNCqshiwzCwjJyenuLi4uLi4ioqKjIyMtLS0vXv37t2718/PLyEhYcqUKebIKlKUuwGzFAUAADAHLy+v6dOnT58+vfVTbd7wTZGsOEUZswC8QwPRLHC+gNUWZczSEWfzcveemnxnyMzMNPwCjUZjVVkMWGbWVDw8PEaPHj169OjCwsLU1NT09PRt27bJ7FJRZxUpyt2AWYrKxFffHLMLMrN0hNpE4gwYwAKEOtjmqyhjFoALaCACAJhMcnKy4Rds3759y5Yt1pPFgGVmTa5Lly5Tp06dNGnS6dOnLZZVpChLlruihvHVN8fsgswsHaE2kTgDpiZOj1WcogAANgkNRAAAAGVgWt4mi+rDV98cswsys3SE2kTiDJiaOD1WcYoCANgkNBABAAAAAACUIU6PVZyiAAA2CQ1EGjhfwGqLMmbpiLN5uXtPceIJAAAAAPBCqINtvooyZgFsAxqINHC+gNUWZczSEWfzcveeWuGJJ7GxsZ07d+YoiwEDAAAAWIZQB9t8FWXMAtgGNBBp4HwBqy3KmKUjzubl7j1V6sSTixcvHj58+PLly6WlpfX19U5OTt7e3qGhoXFxcWFhYcHBwdaWxYBlZo2FaXk5We6Kmg9ffXPMLpiVUJtInAEDtEmog22+ijJmAWwDGogAACbT0NDw8ccfp6enE0I6dOjg5eXl4eFRX19/9erV06dPJyUlDRkyZO7cuQ4OOj57FcliwDKzdDAtLyfLXVFGfPXNMbtgptkFBUeL99Rq9wcDxOmxilMUAIBHaCACAJjMtm3b0tPTn3jiiVGjRvn5+TV/6tatW7t37969e7evr+/UqVOtJIsBy8zSwbS8nCx3Ranx1TfH7IJZZxeE2kTiDJiROD1WcYoCANgYNBABAEwmJSVlxIgRs2fPbv2Un5/f888/f+/evQMHDuhsUSmSxYBlZgHY8dU3x+yCzCwdoTaROAOmJk6PVZyiAAA2CR92ZoHzBay2KGPW8hX52rzcvacm3xkqKipCQkIMvCAkJEQ6DLWSLAYsMwvAjq++OWYXZGbpCLWJxBkwNXF6rOIUNR+hDrb5KsqYBeACGoj0cL6A1RZlzNIRZ/Ny955acmfo2rXrkSNHRo4caW9v3/pZtVp9+PDhrl27Wk8WA5aZBWDHV98cswsys3SE2kTiDJiaOD1WcYoyEupgm6+ijFkA3qGBSAPnC1htUcYsHXE2L3fvqeV3hnHjxq1Zs+a1114bOXJkt27dvLy8HB0dGxoaysrKLl68uG/fvsuXLy9YsMB6shiwzKyZYFreJovqw1ffHLMLMrN0hNpE4gyYmjg9VnGKUhPqYJuvooxZANuAnZsGzhew2qKMWTribF7u3lPL7wwJCQmNjY2bNm1at25d62c9PT3nzZsXHx9vPVkMWGaWBablrXbAFl5EwFffHLMLZp1dEGoTiTNgauL0WMUpSk2og22+ijJmAWyDnUajUXoM/Jk5c2ZUVNTcuXP1veDjjz8+efLkN998YyVZcYoyZumIs3m5e08tvzNIGhoazp4927orERER0eacpCJZDFhm1litZ6qdnJzq6+tLS0urqqoIIUbNcsvMKlKUuwGzFGWxf//+TZs2VVRUtH7K09NzxowZQ4cONW2Qu6I8DpiOUJtInAHTSUtLW7NmTVhYmOGWZespLuqgUllxilIT6mCbr6KMWQDbgBWINHC+gNUWZczSEWfzcveeKnXTDEdHxz59+vTp04eXLAZsJpiWt9oBK7WIYPjw4fHx8RQtbOogd0V5HDAdoTaROAOmw92qfL4GzNe5C0IdbPNVlDELYBvQQKSB8wWstihjlo44m5e79xQ3zQBlCXW1eL4GrNR18QlvfXPMLpiVUJtInAHTEafHKk5ROkIdbPNVlDELYBtUb7/9ttJj4I+bm9uPP/54/Phxe3t7lUplZ2fX1NRUU1Nz69atY8eOffbZZxcuXJg9e/Z9991nJVlxijJm6Yizebl7Ty2/M+Tm5paWlrq5uVEcUCqSxYDNavPmzcOGDevevbu+FxQXF//+++8TJ040YVaRotwNmKUoAIA5qFQqPz+/nj17RkdH9+/fPzo6umfPnn5+fjpbFSYJKpUVpygFoQ62+SrKmAWwDbgGIiXurskiTlHGLB1xNi9376mFd4axY8cSQlatWtWjRw8ushiwWc2dO7dDhw7vvvuuvpnqJUuWVFdXf/zxxybMKlKUuwGzFKWWm5tLCAkICHBxcbFMkLuiLFmlBkxHqE0kzoABTEKog22+ijJmAWwAGoj0cNsBqy3KmKUjzubl7j215M4gXTV5zJgxnTp14iKLAZuVUFeL52vAlr8uPuGtb47ZBbMSahOJM2Bq4vRYxSnKSKiDbb6KMmYBeIcGIgAAgLlgWt5qB2z5RQR89c0xu2BWQm0icQZMTZweqzhFAQBsEhqIAAAAZoRpeasdMBYRAIA1EKfHKk5RAACbhAYiDZwvYLVFGbN0xNm83L2nlt8ZMjIy5LwsLi7OSrIYsMwsAAAAgLkJdbDNV1HGLIBtQAORBs4XsNqijFk64mxe7t5TpXaGNu3atctKshiwzCwAO7765phdkJmlI9QmEmfAAOyEOtjmqyhjFsA24AwdGk8++SQhxNvbm5esOEUZs3TE2bzcvaeW3xkIIXFxcQMGDOAoiwGbD6blbbIotVWrVsl5WeuuBHWQu6IsWaUGTEeoTSTOgKmJ02MVpyg1oQ62+SrKmAWwDWgg0pg1axZfWXGKMmYtX5Gvzcvde2r5nYEQEhQUNHDgQI6yGLD5zJ8/n9DOVFNnFSnKkuWuKAu++uaYXTAroTaROAOmI06PVZyi1IQ62OarKGMWwDaggQgAAGAWmJa3yaIs+OqbY3bBrITaROIMmJo4PVZxigIA2B40EGngfAGrLcqYpSPO5uXuPcVljEBZmJa3yaIAACYnTo9VnKJ0hDrY5qsoYxbANqCBSAPnC1htUcYsHXE2L3fvqeV3BgAAAAAAOkIdbPNVlDELYBvQQKSE8wWstihj1vIV+dq83L2nip940tDQ4OjoyFEWAzYhTMvLyXJXFAAAwHyEOtjmqyhjFsAGoIFICecLWG1RxqzlK/K1ebl7Ty28M7z55puBgYHl5eV79uzJzMy8fv16Y2Ojg4NDUFBQv379Ro8e7eHhYVVZDFhmlg6m5eVkuStqQnz1zTG7YFZCbSJxBgxAQaiDbb6KMmYBbAAaiAAAJhMbG3v69OnXX3+9qqrK1dU1NDS0Xbt21dXV+fn527dv37dv3xtvvNGrVy/ryWLAMrPUMC1vk0Xp8NU3x+yCWWcXhNpE4gzYhMTpsYpTFADABqCBCABgMrdu3Vq+fLmzs/P8+fPj4uJUKpX0uFqtPnjw4Ndff718+fJ169b5+vpaSRYDlpmlhml5myxKh6++OWYXzDq7INQmEmfA1MTpsYpTFADAJqGBCABgMomJiU1NTe+//35AQEDzx1Uq1ZAhQ0JCQhYsWPDDDz+8/PLLVpLFgGVmAdjx1TfH7ILMLB2hNpE4A6YmTo9VnKIAADYJDUTTwPkCVluUMWv5inxtXu7eU3PvDNnZ2QkJCS36U1rBwcGDBg3Kzs62niwGLDMLwI6vvjlmF2Rm6Qi1icQZMDVxeqziFDUhoQ62+SrKmAXgERqINHC+gNUWZczSEWfzcveeWn5nKC0t1defkgQGBh48eNB6shiwzCwAO7765phdkJmlI9QmEmfA1MTpsYpTlJpQB9t8FWXMAtgGe6UHwKXY2NiSkpKXX355x44dt27dCg0NjYqKCg0NvXnz5vbt219++eUzZ85YVVacooxZOuJsXu7eU8vvDG5ubpWVlQZeUFFR4ebmZj1ZDFhm1lQaGhosn1WkKEuWu6IyyWlhl5aWmjDIXVGWrFIDpiPUJhJnwNTE6bGKU5SaUAfbfBVlzALYBqxApIHzBay2KGOWjjibl7v31PI7Q48ePQ4ePDhp0iQnJ6fWz9bW1h46dKhHjx7Wk8WAZWbpYFreagesyCICvvrmmF2QmaUj1CYSZ8DUuFuVz9eA+Tp3QaiDbb6KMmYBbANWINLQrmZPSEjQfnCQ/7uafcWKFWq1+ocffrCerDhFGbN0xNm83L2nlt8ZnnjiiaKiovfee6+ioqLFU2VlZStWrLhz584TTzxhPVkMWGaWDqblrXbAiiwikFrY9fX1Op9ts29OEeSuKI8DpiPUJhJnwNTE6bGKU5SaUAfbfBVlzALYBqxApIHzBay2KGOWjjibl7v31PI7Q2Rk5NSpU7ds2fLcc89FR0fff//9bm5uNTU1V65cycrKqq+vnzZtWu/eva0niwHLzNLBtLzVDliRRQRPPPHE0qVL33vvvVdffbXFCseysrI1a9bcuXNn3rx5JgxyV5THAdMRahOJM2Bq3K3K52vAfJ27INTBNl9FGbMAtgENRBo4X8BqizJm6Yizebl7TxW5acbEiRNDQ0O3bt165MiRI0eOaB8PCwubMmVKTEyMtWUxYJlZCkJdLZ6vAVv+uviEt745ZhfMOrsg1CYSZ8DUxOmxilOUmlAH23wVZcwC2AY0EGngfAGrLcqYpSPO5uXuPVXqphkxMTExMTFlZWX5+fn37t1zdXUNCgry8vIihKjV6oaGBhcXF6vKYsAys8bCtLzVDlipRQR89c0xuyAzS0eoTSTOgOmI02MVpyg1oQ62+SrKmAWwDWgg0sD5AlZblDFLR5zNy917avmdoTkvLy+pLdVcYmLili1bdu3aZYVZDFhmVj5My8vJcleUEV99c8wumGl2QcHR4j21zv1BnB6rOEXpCHWwzVdRxiyAjdCA8U6ePDlmzJi33nqrvLy8xVOlpaVLliwZM2bMqVOnrCcrTlHGLB1xNi9376nld4Y2bdu2bcyYMRxlMWAWU6ZM2bRpk4EXfP3111OnTjVtVpGiLFnuipoPX7s9PhzMSqhNJM6A5SgtLT158uTRo0dPnjxZWloqPdjY2Hjv3j0zBZXKilPUKEIdbPNVlDELYBuwApEGzhew2qKMWTribF7u3lPL7wwAzWFa3moHjEUEAGCduFuVz9eArf/cBaEOtvkqypgFsA1oIFLC+QJWW5QxS0eczcvde2r5nQFAS6irxfM1YMtfFx8AAEAOoQ62+SrKmAWwAWgg0uPumiziFGXM0hFn83L3nlpyZ1ixYoXhFxQWFlpVFgOWmaWDaXmrHTAWEQAAgNUS6mCbr6KMWQDeoYHICucLWG1RxiwdcTYvd++pZXaGzMxMwy/QaDRWlcWAZWapYVreagds+UUEfPXNMbsgM0tHqE0kzoABTEuog22+ijJmAfiFBiIAgMkkJycbfsH27du3bNliPVkMWGaWBablrXbAFl5EwFffHLMLMrN0hNpE4gyYmjg9VnGKAgDYJDQQAQAAzA7T8lY7YIstIuCrb47ZBZlZOkJtInEGTE2cHqs4RQEAbBIaiAAAAAAAAMoQp8cqTlEAAJuEBiINnC9gtUUZs3TE2bzcvac48QQAAAAAeCHUwTZfRRmzALYBDUQaOF/AaosyZumIs3m5e0+t8MST2NjYzp07c5TFgAEAAAAsQ6iDbb6KMmYBbAMaiDRwvoDVFmXM0hFn83L3nip14snFixcPHz58+fLl0tLS+vp6Jycnb2/v0NDQuLi4sLCw4OBga8sKNWB9GhoanJycHnroIYqsPpiWl5Plrqj58NU3x+yCWQm1icQZMECbhDrY5qsoYxbANqCBCABgMg0NDR9//HF6ejohpEOHDl5eXh4eHvX19VevXj19+nRSUtKQIUPmzp3r4KDjs1eRrFADfuaZZ8aPHz927NjWTxFC7t69+8ILL0ycOHHq1Kk6X0AB0/JystwVZcRXo1+o2QVzzEwYJtQm4m7A+phjtqlN4vRYxSkKAMAjNBABAExm27Zt6enpTzzxxKhRo/z8/Jo/devWrd27d+/evdvX11dni0qRrFADLi8vv3fvXuvHJV5eXp06dbp48aK+F1DAtLycLHdFqfHV6BdqdoElS0eoTcTdgC0/2yThrsdq8v6snOYsd1sJAMCWoIEIAGAyKSkpI0aMmD17duun/Pz8nn/++Xv37h04cEDntw5FskINmBBSXl5+5coVnU9JP+HSpUv6ngVgxFejX6jZBZYsHaE2EXcDtvxsE3c9VuosS3OWu60EAGB78GFnFjhfwGqLMmYtX5Gvzcvde2rynaGioiIkJMTAC0JCQqTDUCvJCjVgQsjevXv37t1rIA5gPnw1+oWaXWCcmaAg1CbibsDE4rNN3PVYqbMszVnutpKZCHWwzVdRxiwAF9BApIfzBaz5fAFcycjGihrQ5g5syZ2ha9euR44cGTlypL29fetn1Wr14cOHu3btaj1ZoQZMCImKioqMjNT3LIBZ8dXoF2p2gXFmgoJQm4i7AROLzzZx12NlyVI3Z7nbSiy4+wLF3RG+tX2dAeAFGog0cL6ANZ8vgCsZ2VhRwrADW35nGDdu3Jo1a1577bWRI0d269bNy8vL0dGxoaGhrKzs4sWL+/btu3z58oIFC6wnK9SACSEPPvjgU089pe9Zy8O0vE0W1YevRr9QswuMMxMUhNpE3A2YWHy2ibseK0uWujnL3Vaiw90XKO6O8Pn6mglgbbBz08D5AnKKcreVqIlzYSDurkZk+Z0hISGhsbFx06ZN69ata/2sp6fnvHnz4uPjrScr1ICVYlWz3GZdcs6S5a4oBb4a/ULNLjDOTFAQahNxN2Bi8dkm7nqsLFnq5ix3W4kOd1+guDvC5+trJoC1sdNoNEqPgT8zZ86MioqaO3euvhd8/PHHJ0+e/Oabb6wkO3bs2FGjRo0YMUJf8Ouvv7569erWrVtNWJS7rURNkdGKU5Qw7MCW3xkkDQ0NZ8+ebd2ViIiIaHNOUpGsIAPOy8vz9PT08PAwPCoTaj1T7eTkVF9fX1paWlVVRQgxapZbZtbwfH5ZWdmzzz4rf8m5BQbMXVEW+/fv37RpU0VFReunPD09Z8yYMXToUNMGuSvK44DpCLWJ+Brw2LFjp06dOnHiRH0/2eTS0tLWrFkTFhZmuN3ZenqMOqhUlmXbcreV6HD3BYq7I3y+vmYCWBusQKSB8wXkFOVxK9ER58JA3F2NyPI7g8TR0bFPnz59+vThJSvIgC1/VRpxlpyzZLkrymL48OHx8fEU7W/qIHdFeRwwHaE2EV8DXrdunaenp4GfbHLinEbAgrutRIe7L1DcHeHz9TUTwNqggUgD5wvIKcrjVqIjzoWBuLsakeV3BnY1NTXFxcUeHh4W/vYC5iDOJepZstwVZcRXo1+Q2QX2LB2hNhFHA1bkHgh89Vips4zNWe62EgXuvkBxd4TP19dMAGuDBiIN7i4iQxgu5sLdlWtwJSMbKyqh24EtvzMY1tDQcOfOHU9PT1dXV32vyc7OXrlypaOj41/+8pcJEyY4OTnJ//m3bt06dOjQ5cuXS0pK6urqXF1du3Tp0rdv39jYWEdHR52RlJSUQ4cOzZ49u/nhzvXr15uampq/TN+3qYsXL+7cubOgoMDT0/Pxxx8fMGAAIeTUqVNnzpxxc3OLj4/38fGRP/7mjh8/fvTo0dYniRw+fPi33357/vnn9R2fHT58OCgoKDAwUN9PNnzZO7rR6iPOknOWLHdFhYIpDQCL4ajHSp1lb85yt5WMxd0XKO6O8Pn6mglgbdBApIHzBeQUFWcrcXcrCb6KsrB8UZY7njc3fvz4ffv2paSkzJ49W+rKGabRaDZv3pycnKxWq7UPuri4XLhwYf/+/X5+fq+99lr37t1bB1NSUkpLS7t06dL8wQ0bNpw5c6b5I7t27WqdvXr16qJFixobG728vGpqalauXLlgwYKioqLNmzdLL0hMTFy9erW/v3+b42/t8uXLv/32W+sG4oEDB4qKiloMuLlt27aFhIS8+uqrrZ+y/L3zxFlyzpLlrigjikb/G2+80blz57/97W86ZxQyMzN//fXXadOm0X0z19esl9BNabA3+vUxPA1DPaXBOJVCwXybiBh8TxlnfSj2XmK2zWt4Z2D/X2PJ2SYALe6+QHF3hM/d1xkAq4KbqNDj6LYD7LcOEOfmDNQ4upUEd0UZd2BL7gxtXh189uzZAQEBy5Yt0/eCw4cPr1y58vPPP/f09Ny+ffuuXbsiIiLmzJkTEBBgoO6PP/749ddfx8bGPvbYYz4+PuXl5ampqYcOHVq0aJG9vf0333xTVFT00Ucftf6m+swzz/Tv3/9vf/tb8weTkpK+++67efPmEUKOHj166NAhnQ3E9957Lzs7e+nSpb179yaE5Obmfvnll1evXg0JCXnxxRdLSkpWr14dFRWlcyb2rbfeGjJkyMMPP+zs7KzzX7R9+/YtW7a0rjtjxoyoqKi///3v2keuXr26b9++6dOnt2/fnhDy73//OycnZ/369a1/5n/+858ffvjB8GXv5LR35RPnEvUsWe6KUtPX6G9oaFCr1QYa/dKcRHh4+FtvveXi4tLi2aqqqpkzZ44ePXrGjBkUo9L3f00ifSJNnjx53759jo6OMqc03nnnnVu3bn366ad2dnY6XzB37lx9jX7quwBdvXp1wYIF0pSGSqUqKSlpMaXh7u6ub0pjyZIlpaWlLQa8ePFiOVMpdFg2UZv0vacsm4h67yUMm5flllAs/2sUuckSXW/XfL1vw/1Zxg44S3OWrottmIGeu1nnbwzg7gsUd0f4fH3NBLAe2MXp4XwBswYVzNIRJj2u6gAAGzJJREFU5MJAihRl3IEtvDNQX36uBVdX1xkzZjzyyCNff/313Llzx44dO2nSJH3nPu/bty8mJubNN9+U/hocHBwZGWlvb//FF1988cUX999//9y5c7du3bpw4cIWwaqqqtZnJnp6ejY0NISHh3t7excWFh46dEhn0dzc3Mcee0zqHhJCwsLCHn744fPnz8+YMSM4ODg4OPjRRx9NS0vTmT137lx2draLi8uAAQOGDBnSu3dvfd+iW6ioqGjxJer27ds///zz+PHjpQait7d3SUmJzqzlL3vH3Sw3d4sX+FoxsWvXrp07d7Zu9C9evFhq9C9ZskRno58QEhkZmZOTs3Tp0rfffrtdu3bNn2rfvn3fvn2zs7N1tkLabNbLkZCQ8OSTT27fvv3DDz+UM6Vx5cqVqKio5v+pWzT6w8LCcnJydGap7wL0/fffq1Sqt99+u8WURs+ePbVTGlu3btU5pZGfn9+/f/8Wn0IxMTE5OTnNp1IM/JONxbKJqN9Tlk3EsvdSb16WW0IRhv81lr/JEvWKfpbTCFjOmaA+G4DlVADqky3apO+kB0LI+fPnz58/X1xcrLMT/cADD6xcubJr16508zcGcPcFirsjfL6+ZgJYDzQQ6eHCQKA47IRWiPryczp16dJl6dKlJ06c+Oqrr9LS0mbOnJmQkND6Zbdv3x45cmSLB/v06bN///6qqiovL6/o6OgTJ060DrZr1+7mzZstHpQeaXMStayszNfXt/kj0l+9vb2lv/r4+FRWVurMbt68+ciRIykpKampqSkpKR07doyPjx86dGib5+s5OzuXl5e3GAYhpKamRvprQ0ODvpErctk7cS5Rz5Llrigd6kY/ISQiImLSpEnvvvvu4sWLly1b1mK9RnBw8KlTp3QWpW7Wt2DUlAZLo5/QTsOwTGmwTKXQYdlE1O8pyyZi2XtZNi/LnBz1/xrLzzZR93ZZet8s/VnqDjhLc5a6i804j0LdiVYKvh0AgPmggUiP5V4HBhi+GhHLxWvozhegPjmC/fo+5jhJQc5dLExLTkXqfyn1Tki3Iyl1zSbtmI3dgRU58YT68nNr164lhBQXFxNCNm7c2GKHCQ0N/eOPP9asWaOzgejp6Xn58uUWD+bm5qpUKulwuVOnTjq/J/Ts2fPo0aNXrlzRdtZKSkp++uknf3//Dh06GB6wl5fXuXPnxowZo31E+rZw5coVqZN4+fJlbTOxBVdX12HDhg0bNuzOnTtpaWmpqak7d+7cuXNnaGjokCFDDKz8uv/++//444/nnntO+zXgjz/+sLOzO3Xq1H333adWq0+cOKFvTYRSl70TZ8k5S5a7ohSoG/2S8PDw5cuXv/XWW4sWLVq2bFnz9n1FRYWbm5vOFHWzXieZUxosjX5COw3DMqXBMpVCh2UTUb+nLJuIZe9l2byMc3J0/2ssP9tE3dtl7H1T92epO+AszVnqLjbjPAp1J5oO+7Er3bcD850Ob44j/Lt371ZVVfn6+qpUKumRjIyMn376qaCgwNHRMTw8fOLEiYaP6Ki/fJnv/oEAXEADkZWx9zpok4FV9NQnOLCcL0B9cgTLvQ5YTlIw1V0s5GOpaJLTMYzdCal3JJb3tE0G9nzqHViRE0+o73iekpKi/fPRo0eNysbFxSUnJ3t5eY0cOVI7Lb9r167+/ftLB46lpaWdOnVqHZwwYUJmZubrr78+ZMiQrl273rlzJyUlRdpp2yzav3//n376adOmTUOHDlWpVH/88cfu3buHDh26fv36oqKikpKSlJSU0aNHG/4hHTt2HD9+/Pjx43Nzc1NTUw8ePPjVV199++23+i6IM2LEiLVr1/7jH/8YNWqUi4tLRkZGQ0ND7969N23adPny5cLCwvz8fH17IO6dB8qibvRrhYWFvf/++//85z/nz5//yiuv9OvXjxBy48aNgwcPhoeH64xQN+tZpjRYGv2EdhqGZUqDZSqFDssmon5PWTYRy97Lsnmp5+S0KP7XWH62ibq3y9j7pu7PUnfAWZqz1F1s9nkUuk40HVMduxr77YDldHjDzHGEv379+vPnz3/99dfSX//73/9u3LjRxcUlMDCwrq4uPT392LFjq1at0vkWs3z5Muv9AwG4gAYiK2MvDMSyip76BAeW8wWoT45gub4Py6V2GK+YQ4GlIsu/VMvYnZB6R1Lkmk2EbQfm6MSTxMREQsjvv//+4Ycffvrpp507d5afnTp16tWrV5OSkpKSkrQPBgcHv/jii9Kfi4qKdB4+duvWbenSpevXr//ll1+kR6Srv8XFxUl/jY2N1TeSqVOnnj17VvriKj0iHectX778q6++IoQEBARMmDBB5j8hLCwsLCxs1qxZ2dnZKSkpx44d0/myIUOGXLp0ae/evf/+978JId7e3suXL3d2dl65cmVaWpqTk9Nf/vIXnR0NosRl78x6a9c2l6tTLDlnnNJnmZa38JJzs66n1oe60d9cUFDQv/71r3feeefdd98NDg7u0KHDhQsXGhoaJk+ebDhobLOeZUqDpdFPaKdhWKY0WKZS6DBuIomx7ynLJmLZe1k2L/WcXHPG/q+x/GwTdW+XsfdN3Z+l7oCzNGepu9jUPffmKDrR1Exy7GrstwPqb3yKHOGfO3cuOjpaGu29e/e2bt0aHh7+5ptvSt9HcnNzlyxZ8p///Ee7XrU5li9fLFeSBbANaCCagFEXBmJZRU99ggPL+QLUJ0ewXN+H5VI7xHR3sZCPuiLjv1TLqJ2QekdS5JpNhG0HtvCJJyyXn5O+g3l5eXXv3t3V1dWoqyI4Ozu/8847mZmZ2dnZlZWV7u7uDz744KBBg7RztsuXL9eXjYqK+uKLL27cuFFRUdG+ffvAwMDmh/XSLqEz2L59+48++ujo0aOXL192cHDo2bNnVFQUIeStt97Kzc2tq6vr0aOHsWf/qVSqmJiYmJiYmpqa8+fPt36BnZ3dCy+8MHr06NzcXDc3t969e0sHrB9++GFtba2jo6O286WThS97Z775fKJ/Sp9lyTnLlD71tLwiS87Nup5aH+pGfwu+vr5r1qzZuXNnSkrKzZs3AwMDp06d2q1bN5nDkNmsZ5nSYGn0U2OZ0mCZSqFj2k0k8z1l2UQse6/lN29rRv2vsfxsE3Vvl7H3Td2fpe6AszRn2edgjO25t0A9f2MsUx27GvXtgPobnyJH+BUVFV5eXtKfr169Wl9f/+yzz0pfRgghYWFhjz/++L59+3QWZfnyxXIlWQDbgAaiyci8MBDLKnrqExxYzhegPjmC5fo+jBeKMu1dLOSgrsj4L21B5k5IvSMpcs0mwnw1IkueeMJ++blevXp9+OGHFEE7O7v+/fv379+fLhsYGEix2MrBwSEuLk77JVDLwBo3mdzc3KKjo/U927Vr19Yzw63P9NHJkpe9Y7m8PfWUPsuKXZYpfeppeUWWnLOsp6ZG3ejfsWNHi2WYTk5OkydPZvnW2maznmVKg6XRTz0NwzilQT2VQodxLkSnNt9Tlk3EMk1FaDcvy5wc4/8aC882Ufd2lWrOUnfAWZqzppqDIbJ77q0xzt/IZ8JjV5nfDqi/8SlyhO/t7X39+nXpz9KHibu7e/MXuLu7NzQ06PyZLF++WK4kC2Ab0ECkwXJhIJZV9NQnOLCcL0B9cgTL9X0YLxTFfsUcY1FXpP6XsuyE1DuSItdsIqa4GpElTzwB0GK5vD31lD7Lil2WKX3qaXlFlpwz3iaYGl2jX2ZznI7hZj31lAahbfSz9OkYpzSop1KoscyFGGDgPWXZRCzTVIRq87LsDOyb0ZKzTSy9XereN0t/lqUDTt2cZexit9Zmz52YZ/5GJopjV5ZvB9Tf+BQ5wh8wYMCuXbtOnDgRFRUVGhrq4eGRkpLyzDPPSM82NjZmZGToa02yfM1kuZIsgG1AA5EGy4WBtChW0VOf4MByvgD1yREs1/dhPEnBJFfMMQp1Rep/KctOSL0jKXLNJmKiqxFZ7MQTAC2Wy9tTT+mzrNhlmdKnnpZXZMk5422CAQBMi7G3S9H7Zl9US90Bp27OMnax9THQczfr/E2bjD12Zfl2wH4pWEse4U+aNCkrK2vZsmWDBg2KjY19+umnv/3227y8vPDw8Lq6uoyMjMLCwmXLluksyvI10yT3DwTgGg6OabBcGKg1+avoqU9wYDlfgPrkCJbr+5jwJAUrR/0vZbzhBt2OpMg1m4jprkZksRNPACQsl7enntJnWbHLMqVPPS2vyJJzxtsEAwAAWIBRx64s3w5MeDq8BY7w3dzcPvjgg2+++SYtLS0jI0N6MDMzMzMzkxASEBDw9ttv6zs2YPmaadr7BwLwyE6j0Sg9Bl6dOXNm06ZNixYt6tixowl/rLSKXt88WGNjY+sTHAghcq7v09DQQH0xF41Go+/kCMMKCgpanN1ACJFzfR+NRmPgJAUD8vLyPD09ZV4O2SQYK1L/SwnDTsiyI1G/p4YZ3vMJ1Q7MPioAFpcuXXr99ddVKlWL+fyFCxdKR+Tbt2/fsmWLzJuoaKf0KyoqVCqVh4dHaWlp62xaWtqaNWvCwsIMz+frPCKvqalZuHDhjRs3pCn98vLyb7/9tm/fvi2m9HUelG/YsOGnn34aN26cdlp+8+bN8fHx2dnZ48aNKykp+fHHH0ePHv3cc8+1CH7zzTfJyclPPfVU87UAW7du7d+/v3Re88cff3z+/Pn169e3Ljp27NipU6dOnDhRzgZsLiUlZe3atWFhYdr11FVVVfb29mfPnh00aFBhYeHFixdfffXVIUOGGPuTAQAAqLEfu7J8RaX+xmeAOY7wtcrLy8+cOVNYWFhbWysFu3XrZvg8DML25YvlOxSADUADEQAAwFxOnDixfv3627dvS3/19PScMWPG0KFDpb/m5eVdvXrVqNvRqtVq7ZR+fX29zubj/v37N23aVFFR0fqpFgNoraqqSprSb35PZElAQMCcOXP0nXRWVVX15ptv5uXlaR8ZMmTI3//+9+XLl2dlZUnx999/v/VcS11d3fLly1vcUzI4OPidd96RLsi4ZMmSHj16TJ8+vXVR6gaiRqP54osvtOc+N19PffHiRScnp9GjRz/77LPybyUJAAAAAGDb0EAEAAAwI3PM55O2pvRZ5vMJ7ZQ+9bS8UkvOzbSeGgAAAADA9qCBCAAAAAAAAAAAAHqZZh0EAAAAAAAAAAAA2CQ0EAEAAAAAAAAAAEAvNBABAAAAAAAAAABALzQQAQAAAAAAAAAAQC80EAEAAAAAAAAAAEAvNBABAAAAAAAAAABALzQQAQAAAKzXoUOH7Ozs7OzsNmzYoPRYAAAAAEBQDkoPAAAAAKBtGo3ml19+2bZt27FjxwoKCqqrq11dXf39/bt16/bQQw8NHTp0wIAB9vaYGQUAAAAAMD00EAEAAMDaFRQUTJky5eDBg80fvHv37qVLly5duvTTTz+99dZbTz/99Pbt25UaIQAAAACADUMDEQAAAKxaZWVlQkJCbm4uIcTR0XHYsGExMTE+Pj41NTX5+fnHjh07efKkRqOpq6tTeqQAAAAAALYJDUQAAACwah988IHUPQwPD09OTg4LC2vxgoKCgq1bt968eVOJ0QEAAAAA2D40EAEAAMCqbdu2TfrD9u3bW3cPCSFdu3ZduHChZQcFAAAAACAQXGscAAAArFdDQ8O1a9cIIQEBAeHh4cbGy8rKNm7cOH369IiIiA4dOjg6Onbq1CkuLu79998vLy/XGdm2bZt01+Pk5GRCSEZGxvjx4wMDA11dXbt37z5//vzi4mLti2/fvr106dJevXq1b9/ey8trxIgRv/76q5wfu2/fvrFjx3bt2tXFxSU4OHj27Nnnzp0z9l8nKS0tXbFixaBBg3x9fZ2cnDp37vzII4989dVXjY2NdD8QAAAAAKAFO41Go/QYAAAAAHSrr693dnYmhHTo0KGiosKobFVVVceOHevr63U+26lTp+Tk5AEDBrR4fNu2bZMnTyaEJCUlnT9/fvHixS0OloKDgzMyMgIDA7OyskaPHn3r1q0WP+HTTz996aWXDPzY9PT0tWvXtniBk5PTF1988eyzz7Z4/NChQ3FxcYSQ9evX//Wvf23x7I4dO+bMmaNzy/Tu3Xvv3r0BAQE6//kAAAAAAPLhFGYAAACwXk5OTkFBQfn5+ZWVlcnJyU8++aT8rFqtrq+vDwoKGjFiRK9evXx9fZuamvLy8n7++eeMjIzi4uIxY8acPn26a9euOuM7d+787rvvOnfuPG3atG7dupWUlGzevPnChQt5eXmzZ8/evHnzo48+WlZWNm7cuLi4OCcnp9TU1B9++IEQ8uqrr44YMaJbt246f+yXX375008/de7c+cUXX+zdu3d1dfWePXt27NhRX18/a9Ysf3//Rx55ROY/8LvvvnvmmWc0Go2Tk9P48eMHDx7s7e1969atHTt2HDp06PTp08OGDcvKynJ3d5e/0QAAAAAAdNAAAAAAWLFFixZJBy1ubm6LFy8+d+6czGBtbe3+/ft1PrVr1y5HR0dCyMsvv9ziqe+//157mDRo0KDy8nLtU9XV1X369JGe6tu3b/v27dPT05tnV65cKT07f/58Az82PDy8uLi4+bPbtm2zt7cnhAQHB9fV1TV/KiMjQ0qtX7+++eNXrlxp166dFDl79myLcu+++66UWrhwod4NBAAAAAAgD66BCAAAAFZt8eLFUVFRhJCampoVK1b07NnT19d31KhRb7/99v79++/du6cv6OzsPGzYMJ1PjRkzZs6cOYSQrVu3avRczsXd3f2HH37w8PDQPuLm5rZ06VLpz9nZ2R988MHgwYObR+bPn+/j40MI0XclREKInZ3dli1bOnbs2PzBiRMnPvfcc4SQvLy8pKQkfdnmVq1aVV1dbWdnl5iY2LNnzxbPLlmyRPq3f/7557W1tXJ+IAAAAACAPmggAgAAgFVzd3c/ePDgvHnzXFxcpEeKi4t/+umnZcuWjRgxonPnzn/9618LCgqM/bEPP/wwIaSsrOzy5cs6XzBhwgQ/P78WD2o7hu3atZs1a1aLZx0cHKQfm5OTo68vOXjw4MjIyNaPv/LKK9IffvzxxzYH39TUJC1pTEhIiImJ0fkaaXiVlZWZmZlt/kAAAAAAAAPQQAQAAABr165du48++qiwsPCrr76aPHlySEiI9qmqqqrPP/88IiLiwIEDOrOXL19eunTp4MGDO3fu7OzsbPd/TZs2TXqBvuZjbGxs6wc7duzo4OBACOndu7e2odmc1HNsbGy8e/euzh87ZMgQnY9LKysJIcePH9f5gubOnj0r3UU6PDz8hh7e3t7Si3Nyctr8gQAAAAAABuAmKgAAAMAHLy+v2bNnz549mxBSXl5+9OjRH3/8cfPmzffu3SsvL3/qqadOnz593333NY+sWbPmH//4h74bMUsqKyt1Pi6djNyas7NzY2OjgWelP9TV1bVv3771C5p3P1s/VVRUdPPmTQOjleTl5Ul/+OSTTz755BPDLy4rK2vzBwIAAAAAGIAViAAAAMAfT0/PkSNHbtiw4ezZswEBAYSQqqqqVatWNX/Nli1bFixYUF9f7+3tPX/+/J07dx47duzcuXOXLl26dOnSunXrpJep1WqdJVQqlYEBGH7WADc3N31PSTdFqa6ubvOHVFRUyK9ouH8KAAAAANAmrEAEAAAAjt1///0fffTRhAkTSKtbl7z99tuEEF9f36ysLKnJ2JzUrbO8mpoafU9JrUM5A9O+Zu3atdqLJwIAAAAAmAlWIAIAAADfBg4cKP2hsLBQ+2B+fn5ubi4hZNasWa27h4SQK1euWGZ4Lei7Z4v2KX9//zZ/SNeuXaU/nDt3zlQDAwAAAADQBw1EAAAA4FtTU5P0h+Zr927fvi39QWf3kBDyyy+/mHtgOqWmpup8/OzZs8XFxYQQfXdVbq5v377u7u6EkL179zY2Npp2hAAAAAAALaCBCAAAAFatzZsI79ixQ/rDgw8+qH1Qe6nBixcvto789ttvmZmZJhqgcTIyMrKzs1s/vnbtWukPTz75ZJs/xMHBYeLEiYSQgoKCTz/91LQjBAAAAABoAQ1EAAAAsGqRkZETJkz47bfftCsNm9u6devixYulP0+ZMkX7ePfu3aWbIH/77bfSucxaf/755zPPPGPOIRui0WimTp1aVFTU/MHvv//+66+/JoTcd999chqIhJDFixdLixAXLly4ceNGna/Jysp64403WEcMAAAAAMLDTVQAAADAqqnV6sTExMTExI4dOz788MM9e/b08fFRq9X5+fkHDhzQLjAcOHDgc889p005OjrOmTNn9erVVVVVUVFRL730UmRkpFqtPnjw4ObNm+vq6qZOnbplyxbL/3PGjBmze/fuiIiIv/71r717966urt6zZ09iYiIhxN7efsOGDU5OTnJ+zv33379x48aJEyc2NDTMnDlz3bp1Tz75ZGhoqIODQ0lJyZ9//nngwIELFy6EhoauXLnSzP8mAAAAALBxaCACAACAVYuLi0tPT9doNHfu3Nm9e/fu3btbv2bSpElffPGFSqVq/uDy5cszMzMPHjxYVVXVvInm4ODw0UcfBQQEKNJAnDVrVvfu3VevXv3uu+82f9zJyenzzz9/9NFH5f+ocePG7du375lnnrl169aJEydOnDjR+jXa260AAAAAAFBDAxEAAACsWmpqakFBwc8//3zw4ME///zz2rVrlZWVDg4OHh4e3bt3f/jhhydPntynT5/WQRcXl/37969fv/677747d+5cU1NTly5d4uPjX3rppejoaGnRnyI+/PDDYcOGffbZZ1lZWSUlJb6+vsOHD1+4cGHPnj2N/VEjRoy4cuXK5s2b9+zZc/LkyTt37jQ1Nfn4+PTo0ePhhx8eNWqU9hbVAAAAAADU7DQajdJjAAAAALBx27Ztmzx5MiEkKSlJ5lUOAQAAAACsBG6iAgAAAAAAAAAAAHqhgQgAAAAAAAAAAAB6oYEIAAAAAAAAAAAAeqGBCAAAAAAAAAAAAHqhgQgAAAAAAAAAAAB64S7MAAAAAAAAAAAAoBdWIAIAAAAAAAAAAIBeaCACAAAAAAAAAACAXmggAgAAAAAAAAAAgF5oIAIAAAAAAAAAAIBeaCACAAAAAAAAAACAXmggAgAAAAAAAAAAgF5oIAIAAAAAAAAAAIBeaCACAAAAAAAAAACAXmggAgAAAAAAAAAAgF5oIAIAAAAAAAAAAIBeaCACAAAAAAAAAACAXmggAgAAAAAAAAAAgF5oIAIAAAAAAAAAAIBeaCACAAAAAAAAAACAXmggAgAAAAAAAAAAgF7/B54pFbYfeIavAAAAAElFTkSuQmCC" width="864" /> <br>
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
209 <button id="dwn-heatmap-plot" class="button">
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
210 Download image
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
211 </button>
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
212 </div>
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
213 <div id="r-code" class="section level2">
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
214 <h2>R code</h2>
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
215 <h4>
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
216 Loading packages &amp; data
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
217 </h4>
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
218 <pre class="r"><code>library(phyloseq)
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
219 source(&quot;https://raw.githubusercontent.com/mahendra-mariadassou/phyloseq-extended/master/load-extra-functions.R&quot;)
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
220 #if you want to generate interactiv plot, load plotly and use ggplotly() instead of plot()
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
221 #library(plotly)
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
222
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
223 #if in new session
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
224 #data &lt;- path to Rdata file containing phyloseq object
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
225 #load(data)
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
226 #distance &lt;- path to tsv file containing beta diversity distance matrix to use
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
227 # A &lt;- read.table(file=distance, row.names=1)
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
228 # dist &lt;- as.dist(A)</code></pre>
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
229 <h4>
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
230 Ordianation plots
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
231 </h4>
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
232 <pre><code>ord &lt;- ordinate(data, method =&quot;MDS&quot;, distance = dist)</code></pre>
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
233 <pre><code>p1 &lt;- plot_ordination(data, ord, color = &quot;EnvType&quot;) + theme_bw() + ggtitle(&quot;MDS&quot;)+ theme(plot.title = element_text(hjust = 0.5))
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
234 plot(p1)</code></pre>
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
235 <pre><code>p2 &lt;- plot_samples(data, ord, color = &quot;EnvType&quot;) + theme_bw()+ ggtitle(&quot;MDS&quot;)+ theme(plot.title = element_text(hjust = 0.5))
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
236 plot(p2)</code></pre>
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
237 <pre><code>p22 &lt;- p2 + stat_ellipse(aes(group = EnvType))
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
238 plot(p22)</code></pre>
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
239 <h4>
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
240 Heatmap plot
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
241 </h4>
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
242 <pre><code># change heatmap color scale with color name or hexadecimal code. see http://tools.medialab.sciences-po.fr/iwanthue/
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
243 lowCol &lt;- &quot;#ffff00&quot; # yellow
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
244 midCol &lt;- &quot;#ffa500&quot; # orange
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
245 highCol &lt;- &quot;#ff0000&quot; # red
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
246 naCol &lt;- &quot;white&quot; # white!</code></pre>
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
247 <pre><code>p3 &lt;- plot_heatmap(data) + scale_fill_gradient2(low = lowCol, mid = midCol, high = highCol, na.value = naCol, trans = log_trans(4), midpoint = log(100, base = 4))+ facet_grid(~EnvType, scales = &quot;free_x&quot;) + theme(plot.title = element_text(hjust = 0.5)) + ggtitle(&quot;Heatmap plot&quot;)
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
248 plot(p3)</code></pre>
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
249 <div id="code-r-file" style="display:none;">
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
250 <h1 id="loading-packages-data-parameter-setting">######### Loading packages &amp; data &amp; parameter setting</h1>
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
251 <p>
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
252 library(phyloseq)
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
253 source(&quot;<a href="https://raw.githubusercontent.com/mahendra-mariadassou/phyloseq-extended/master/load-extra-functions.R" class="uri">https://raw.githubusercontent.com/mahendra-mariadassou/phyloseq-extended/master/load-extra-functions.R</a>&quot; )
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
254 #if you want to generate interactiv plot, load plotly and use ggplotly() instead of plot()
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
255 #library(plotly)
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
256
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
257 #if in new session, uncomment and complete
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
258 #data &lt;- # path to Rdata file
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
259 #load(data)
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
260
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
261 #distance &lt;- # path to Beta diversity tsv file
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
262 #A &lt;- read.table(file=distance, row.names=1)
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
263 #dist &lt;- as.dist(A)
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
264
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
265 # to be complete
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
266 varExp &lt;- #Experiment variable
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
267 method &lt;- &quot;MDS&quot; # ordination method, ex &quot;MDS&quot; (default), &quot;NMDS&quot;, &quot;DCA&quot;, &quot;CCA&quot;, &quot;RDA&quot;, &quot;CAP&quot;, &quot;DPCoA&quot; or &quot;PCoA&quot;
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
268
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
269 ######### Ordiantion plots #########
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
270 ord &lt;- ordinate(data, method =method, distance = dist)
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
271
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
272 p1 &lt;- plot_ordination(data, ord, color = varExp) + theme_bw() + ggtitle(method)+ theme(plot.title = element_text(hjust = 0.5))
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
273 plot(p1)
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
274
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
275 p2 &lt;- plot_samples(data, ord, color = varExp) + theme_bw()+ ggtitle(method)+ theme(plot.title = element_text(hjust = 0.5))
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
276 plot(p2)
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
277
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
278 g &lt;- paste('p22 &lt;- p2 + stat_ellipse(aes(group =', varExp,'))')
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
279 eval(parse(text = g))
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
280 plot(p22)
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
281
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
282 ######### Heatmap Plot #########
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
283 # change heatmap color scale with color name or hexadecimal code. see <a href="http://tools.medialab.sciences-po.fr/iwanthue/" class="uri">http://tools.medialab.sciences-po.fr/iwanthue/</a>
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
284 lowCol &lt;- &quot;#ffff00&quot; # yellow
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
285 midCol &lt;- &quot;#ffa500&quot; # orange
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
286 highCol &lt;- &quot;#ff0000&quot; # red
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
287 naCol &lt;- &quot;white&quot; # white!
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
288
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
289 p3 &lt;- plot_heatmap(data) + scale_fill_gradient2(low = lowCol, mid = midCol, high = highCol,
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
290 na.value = naCol, trans = log_trans(4),
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
291 midpoint = log(100, base = 4))
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
292 e &lt;- paste('~', varExp)
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
293 p3 &lt;- p3 + facet_grid(e, scales = &quot;free_x&quot;)+ theme(plot.title = element_text(hjust = 0.5))
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
294 plot(p3)
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
295 </p>
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
296 </div>
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
297 <button id="dwn-btn" class="button">
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
298 Download R code file
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
299 </button>
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
300 <script>
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
301 function download1(filename, text) {
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
302 var element = document.createElement('a');
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
303 element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text));
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
304 element.setAttribute('download', filename);
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
305
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
306 element.style.display = 'none';
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
307 document.body.appendChild(element);
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
308 element.click();
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
309 document.body.removeChild(element);
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
310 }
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
311
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
312 // Start file download.
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
313 document.getElementById("dwn-btn").addEventListener("click", function(){
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
314 // Generate download of hello.txt file with some content
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
315 var text = document.getElementById("code-r-file").innerText;
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
316 var filename = "structure_visualization_code.R";
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
317 download1(filename, text);
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
318 }, false);
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
319 </script>
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
320 <script>
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
321 function download(filename, mysrc) {
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
322 var element = document.createElement('a');
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
323 element.setAttribute('href', mysrc);
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
324 element.setAttribute('download', filename);
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
325 element.style.display = 'none';
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
326 document.body.appendChild(element);
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
327 element.click();
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
328 document.body.removeChild(element);
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
329 }
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
330 document.getElementById("dwn-plot1").addEventListener("click", function(){
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
331 var div = document.getElementById('plot1');
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
332 var myimg = div.getElementsByTagName('img')[0];
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
333 var mysrc = myimg.src;
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
334 var filename = "ordination_plot_no_sample_name.png";
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
335 download(filename, mysrc);
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
336 }, false);
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
337
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
338 document.getElementById("dwn-plot2").addEventListener("click", function(){
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
339 var div = document.getElementById('plot2');
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
340 var myimg = div.getElementsByTagName('img')[0];
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
341 var mysrc = myimg.src;
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
342 var filename = "ordination_plot_with_sample_name.png";
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
343 download(filename, mysrc);
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
344 }, false);
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
345
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
346 document.getElementById("dwn-plot22").addEventListener("click", function(){
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
347 var div = document.getElementById('plot22');
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
348 var myimg = div.getElementsByTagName('img')[0];
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
349 var mysrc = myimg.src;
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
350 var filename = "ordination_plot_with_sample_name_and_ellipse.png";
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
351 download(filename, mysrc);
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
352 }, false);
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
353
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
354 document.getElementById("dwn-heatmap-plot").addEventListener("click", function(){
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
355 var div = document.getElementById('heatmap-plot');
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
356 var myimg = div.getElementsByTagName('img')[0];
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
357 var mysrc = myimg.src;
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
358 var filename = "heatmap_plot.png";
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
359 download(filename, mysrc);
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
360 }, false);
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
361
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
362 </script>
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
363 </div>
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
364 </div>
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
365
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
366
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
367
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
368
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
369 </div>
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
370
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
371 <script>
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
372
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
373 // add bootstrap table styles to pandoc tables
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
374 function bootstrapStylePandocTables() {
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
375 $('tr.header').parent('thead').parent('table').addClass('table table-condensed');
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
376 }
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
377 $(document).ready(function () {
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
378 bootstrapStylePandocTables();
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
379 });
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
380
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
381
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
382 </script>
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
383
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
384 <!-- dynamically load mathjax for compatibility with self-contained -->
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
385 <script>
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
386 (function () {
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
387 var script = document.createElement("script");
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
388 script.type = "text/javascript";
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
389 script.src = "https://mathjax.rstudio.com/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML";
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
390 document.getElementsByTagName("head")[0].appendChild(script);
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
391 })();
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
392 </script>
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
393
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
394 </body>
76c750c5f0d1 planemo upload for repository https://github.com/oinizan/FROGS-wrappers commit 0b900a51e220ce6f17c1e76292c06a5f4d934055-dirty
frogs
parents:
diff changeset
395 </html>