From ea36abe9b2f8a593a28e229ea4aaed79216eb6f4 Mon Sep 17 00:00:00 2001 From: 00kang Date: Tue, 19 Mar 2024 01:18:09 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20.gitignore=EC=97=90=EC=84=9C=20dist=20?= =?UTF-8?q?=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 - dist/add-button.png | Bin 0 -> 288 bytes dist/bundle.js | 2 ++ dist/category-asian.png | Bin 0 -> 615 bytes dist/category-chinese.png | Bin 0 -> 986 bytes dist/category-etc.png | Bin 0 -> 840 bytes dist/category-japanese.png | Bin 0 -> 789 bytes dist/category-korean.png | Bin 0 -> 514 bytes dist/category-western.png | Bin 0 -> 896 bytes dist/favorite-icon-filled.png | Bin 0 -> 657 bytes dist/favorite-icon-lined.png | Bin 0 -> 922 bytes dist/index.html | 29 +++++++++++++++++++++++++++++ 12 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 dist/add-button.png create mode 100644 dist/bundle.js create mode 100644 dist/category-asian.png create mode 100644 dist/category-chinese.png create mode 100644 dist/category-etc.png create mode 100644 dist/category-japanese.png create mode 100644 dist/category-korean.png create mode 100644 dist/category-western.png create mode 100644 dist/favorite-icon-filled.png create mode 100644 dist/favorite-icon-lined.png create mode 100644 dist/index.html diff --git a/.gitignore b/.gitignore index f0fc74d36..b8a280fb0 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,3 @@ -dist/ node_modules/ *.tsbuildinfo .npm diff --git a/dist/add-button.png b/dist/add-button.png new file mode 100644 index 0000000000000000000000000000000000000000..b7ab99ac5945ae4ae057d3ef3accccfc12b8ca75 GIT binary patch literal 288 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU1|)m_?Z^dEoCO|{#S9GG!XV7ZFl&wkP>``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&eB{#H*H$B+ufw^tiE4=V_;UZ_`X-r;HNWgYoO zt!#2$lE21NEskZkW?cBMAkjIGyGkpHk*9!ZTqb`H`4f;RpnAQO}@U?I(hCDuROJ5K@rb4ZJsu( z;)Gf4<+N!!Zmat%j%#h?`W15DVDs@$t)+a={DUHC4*LpaA&>)h($ literal 0 HcmV?d00001 diff --git a/dist/bundle.js b/dist/bundle.js new file mode 100644 index 000000000..ba76c1d74 --- /dev/null +++ b/dist/bundle.js @@ -0,0 +1,2 @@ +(()=>{"use strict";var r={309:(r,t,n)=>{n.d(t,{A:()=>s});var e=n(354),a=n.n(e),i=n(314),o=n.n(i)()(a());o.push([r.id,".gnb {\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n height: 64px;\r\n\r\n padding: 0 16px;\r\n margin-bottom: 30px;\r\n\r\n background-color: var(--primary-color);\r\n}\r\n\r\n.gnb__title {\r\n color: #fcfcfd;\r\n}\r\n\r\n.gnb__button {\r\n height: 40px;\r\n\r\n border: none;\r\n border-radius: 8px;\r\n background: transparent;\r\n\r\n font-size: 24px;\r\n cursor: pointer;\r\n}\r\n\r\n.gnb__button img {\r\n display: block;\r\n width: 40px;\r\n height: 40px;\r\n object-fit: contain;\r\n}\r\n","",{version:3,sources:["webpack://./src/view/styles/Gnb.css"],names:[],mappings:"AAAA;EACE,aAAa;EACb,8BAA8B;EAC9B,mBAAmB;EACnB,YAAY;;EAEZ,eAAe;EACf,mBAAmB;;EAEnB,sCAAsC;AACxC;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,YAAY;;EAEZ,YAAY;EACZ,kBAAkB;EAClB,uBAAuB;;EAEvB,eAAe;EACf,eAAe;AACjB;;AAEA;EACE,cAAc;EACd,WAAW;EACX,YAAY;EACZ,mBAAmB;AACrB",sourcesContent:[".gnb {\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n height: 64px;\r\n\r\n padding: 0 16px;\r\n margin-bottom: 30px;\r\n\r\n background-color: var(--primary-color);\r\n}\r\n\r\n.gnb__title {\r\n color: #fcfcfd;\r\n}\r\n\r\n.gnb__button {\r\n height: 40px;\r\n\r\n border: none;\r\n border-radius: 8px;\r\n background: transparent;\r\n\r\n font-size: 24px;\r\n cursor: pointer;\r\n}\r\n\r\n.gnb__button img {\r\n display: block;\r\n width: 40px;\r\n height: 40px;\r\n object-fit: contain;\r\n}\r\n"],sourceRoot:""}]);const s=o},725:(r,t,n)=>{n.d(t,{A:()=>s});var e=n(354),a=n.n(e),i=n(314),o=n.n(i)()(a());o.push([r.id,"app-modal > h2[slot='title'] {\r\n margin-bottom: 36px;\r\n}\r\n\r\napp-modal > form[slot='body'] {\r\n height: 100%;\r\n box-sizing: border-box;\r\n}\r\n","",{version:3,sources:["webpack://./src/view/styles/Modal.css"],names:[],mappings:"AAAA;EACE,mBAAmB;AACrB;;AAEA;EACE,YAAY;EACZ,sBAAsB;AACxB",sourcesContent:["app-modal > h2[slot='title'] {\r\n margin-bottom: 36px;\r\n}\r\n\r\napp-modal > form[slot='body'] {\r\n height: 100%;\r\n box-sizing: border-box;\r\n}\r\n"],sourceRoot:""}]);const s=o},722:(r,t,n)=>{n.d(t,{A:()=>s});var e=n(354),a=n.n(e),i=n(314),o=n.n(i)()(a());o.push([r.id,".detail-container {\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: flex-start;\r\n\r\n z-index: 111;\r\n}\r\n\r\n.restaurant-detail__header {\r\n display: flex;\r\n flex-direction: row;\r\n justify-content: space-between;\r\n\r\n margin-bottom: 16px;\r\n}\r\n\r\n.restaurant-detail__category {\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n width: 64px;\r\n height: 64px;\r\n min-width: 64px;\r\n min-height: 64px;\r\n\r\n margin-right: 16px;\r\n\r\n border-radius: 50%;\r\n background: var(--lighten-color);\r\n}\r\n\r\n.restaurant-detail__favorite-button {\r\n width: 32px;\r\n height: 32px;\r\n\r\n border: none;\r\n background: transparent;\r\n\r\n margin-right: 0;\r\n\r\n cursor: pointer;\r\n}\r\n\r\n.restaurant-detail__body {\r\n display: flex;\r\n flex-direction: column;\r\n}\r\n\r\n.restaurant-detail__name {\r\n margin-bottom: 16px;\r\n}\r\n\r\n.restaurant-detail__distance {\r\n margin-bottom: 16px;\r\n}\r\n\r\n.restaurant-detail__description {\r\n height: 300px;\r\n margin-bottom: 16px;\r\n}\r\n\r\n.restaurant-detail__link {\r\n margin-bottom: 16px;\r\n}\r\n\r\n.button-container {\r\n display: flex;\r\n}\r\n\r\n.button {\r\n width: 100%;\r\n height: 44px;\r\n\r\n margin-right: 16px;\r\n\r\n border: none;\r\n border-radius: 8px;\r\n\r\n font-weight: 600;\r\n cursor: pointer;\r\n}\r\n\r\n.button:last-child {\r\n margin-right: 0;\r\n}\r\n\r\n.button--secondary {\r\n border: 1px solid var(--grey-300);\r\n background: transparent;\r\n\r\n color: var(--grey-300);\r\n}\r\n\r\n.button--primary {\r\n background: var(--primary-color);\r\n\r\n color: var(--grey-100);\r\n}\r\n","",{version:3,sources:["webpack://./src/view/styles/RestaurantDetail.css"],names:[],mappings:"AAAA;EACE,aAAa;EACb,sBAAsB;EACtB,2BAA2B;;EAE3B,YAAY;AACd;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,8BAA8B;;EAE9B,mBAAmB;AACrB;;AAEA;EACE,aAAa;EACb,uBAAuB;EACvB,mBAAmB;EACnB,WAAW;EACX,YAAY;EACZ,eAAe;EACf,gBAAgB;;EAEhB,kBAAkB;;EAElB,kBAAkB;EAClB,gCAAgC;AAClC;;AAEA;EACE,WAAW;EACX,YAAY;;EAEZ,YAAY;EACZ,uBAAuB;;EAEvB,eAAe;;EAEf,eAAe;AACjB;;AAEA;EACE,aAAa;EACb,sBAAsB;AACxB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,aAAa;EACb,mBAAmB;AACrB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,aAAa;AACf;;AAEA;EACE,WAAW;EACX,YAAY;;EAEZ,kBAAkB;;EAElB,YAAY;EACZ,kBAAkB;;EAElB,gBAAgB;EAChB,eAAe;AACjB;;AAEA;EACE,eAAe;AACjB;;AAEA;EACE,iCAAiC;EACjC,uBAAuB;;EAEvB,sBAAsB;AACxB;;AAEA;EACE,gCAAgC;;EAEhC,sBAAsB;AACxB",sourcesContent:[".detail-container {\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: flex-start;\r\n\r\n z-index: 111;\r\n}\r\n\r\n.restaurant-detail__header {\r\n display: flex;\r\n flex-direction: row;\r\n justify-content: space-between;\r\n\r\n margin-bottom: 16px;\r\n}\r\n\r\n.restaurant-detail__category {\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n width: 64px;\r\n height: 64px;\r\n min-width: 64px;\r\n min-height: 64px;\r\n\r\n margin-right: 16px;\r\n\r\n border-radius: 50%;\r\n background: var(--lighten-color);\r\n}\r\n\r\n.restaurant-detail__favorite-button {\r\n width: 32px;\r\n height: 32px;\r\n\r\n border: none;\r\n background: transparent;\r\n\r\n margin-right: 0;\r\n\r\n cursor: pointer;\r\n}\r\n\r\n.restaurant-detail__body {\r\n display: flex;\r\n flex-direction: column;\r\n}\r\n\r\n.restaurant-detail__name {\r\n margin-bottom: 16px;\r\n}\r\n\r\n.restaurant-detail__distance {\r\n margin-bottom: 16px;\r\n}\r\n\r\n.restaurant-detail__description {\r\n height: 300px;\r\n margin-bottom: 16px;\r\n}\r\n\r\n.restaurant-detail__link {\r\n margin-bottom: 16px;\r\n}\r\n\r\n.button-container {\r\n display: flex;\r\n}\r\n\r\n.button {\r\n width: 100%;\r\n height: 44px;\r\n\r\n margin-right: 16px;\r\n\r\n border: none;\r\n border-radius: 8px;\r\n\r\n font-weight: 600;\r\n cursor: pointer;\r\n}\r\n\r\n.button:last-child {\r\n margin-right: 0;\r\n}\r\n\r\n.button--secondary {\r\n border: 1px solid var(--grey-300);\r\n background: transparent;\r\n\r\n color: var(--grey-300);\r\n}\r\n\r\n.button--primary {\r\n background: var(--primary-color);\r\n\r\n color: var(--grey-100);\r\n}\r\n"],sourceRoot:""}]);const s=o},683:(r,t,n)=>{n.d(t,{A:()=>s});var e=n(354),a=n.n(e),i=n(314),o=n.n(i)()(a());o.push([r.id,".input-container {\r\n height: 85%;\r\n overflow-y: scroll;\r\n\r\n margin-bottom: 10px;\r\n}\r\n\r\n.form-item {\r\n display: flex;\r\n flex-direction: column;\r\n\r\n margin-bottom: 36px;\r\n}\r\n\r\n.form-item label {\r\n color: var(--grey-400);\r\n font-size: 14px;\r\n}\r\n\r\n.form-item--required label::after {\r\n padding-left: 4px;\r\n\r\n color: var(--primary-color);\r\n content: '*';\r\n}\r\n\r\n.form-item .help-text {\r\n color: var(--grey-300);\r\n}\r\n\r\n.form-item input,\r\n.form-item textarea,\r\n.form-item select {\r\n padding: 8px;\r\n margin: 6px 0;\r\n\r\n border: 1px solid var(--grey-200);\r\n border-radius: 8px;\r\n\r\n font-size: 16px;\r\n}\r\n\r\n.form-item textarea {\r\n resize: none;\r\n}\r\n\r\n.form-item select {\r\n height: 44px;\r\n\r\n padding: 8px;\r\n\r\n border: 1px solid var(--grey-200);\r\n border-radius: 8px;\r\n\r\n color: var(--grey-300);\r\n}\r\n\r\ninput[name='name'],\r\ninput[name='link'] {\r\n height: 44px;\r\n}\r\n\r\n.button-container {\r\n display: flex;\r\n}\r\n\r\n.button {\r\n width: 100%;\r\n height: 44px;\r\n\r\n margin-right: 16px;\r\n\r\n border: none;\r\n border-radius: 8px;\r\n\r\n font-weight: 600;\r\n cursor: pointer;\r\n}\r\n\r\n.button:last-child {\r\n margin-right: 0;\r\n}\r\n\r\n.button--secondary {\r\n border: 1px solid var(--grey-300);\r\n background: transparent;\r\n\r\n color: var(--grey-300);\r\n}\r\n\r\n.button--primary {\r\n background: var(--primary-color);\r\n\r\n color: var(--grey-100);\r\n}\r\n","",{version:3,sources:["webpack://./src/view/styles/RestaurantForm.css"],names:[],mappings:"AAAA;EACE,WAAW;EACX,kBAAkB;;EAElB,mBAAmB;AACrB;;AAEA;EACE,aAAa;EACb,sBAAsB;;EAEtB,mBAAmB;AACrB;;AAEA;EACE,sBAAsB;EACtB,eAAe;AACjB;;AAEA;EACE,iBAAiB;;EAEjB,2BAA2B;EAC3B,YAAY;AACd;;AAEA;EACE,sBAAsB;AACxB;;AAEA;;;EAGE,YAAY;EACZ,aAAa;;EAEb,iCAAiC;EACjC,kBAAkB;;EAElB,eAAe;AACjB;;AAEA;EACE,YAAY;AACd;;AAEA;EACE,YAAY;;EAEZ,YAAY;;EAEZ,iCAAiC;EACjC,kBAAkB;;EAElB,sBAAsB;AACxB;;AAEA;;EAEE,YAAY;AACd;;AAEA;EACE,aAAa;AACf;;AAEA;EACE,WAAW;EACX,YAAY;;EAEZ,kBAAkB;;EAElB,YAAY;EACZ,kBAAkB;;EAElB,gBAAgB;EAChB,eAAe;AACjB;;AAEA;EACE,eAAe;AACjB;;AAEA;EACE,iCAAiC;EACjC,uBAAuB;;EAEvB,sBAAsB;AACxB;;AAEA;EACE,gCAAgC;;EAEhC,sBAAsB;AACxB",sourcesContent:[".input-container {\r\n height: 85%;\r\n overflow-y: scroll;\r\n\r\n margin-bottom: 10px;\r\n}\r\n\r\n.form-item {\r\n display: flex;\r\n flex-direction: column;\r\n\r\n margin-bottom: 36px;\r\n}\r\n\r\n.form-item label {\r\n color: var(--grey-400);\r\n font-size: 14px;\r\n}\r\n\r\n.form-item--required label::after {\r\n padding-left: 4px;\r\n\r\n color: var(--primary-color);\r\n content: '*';\r\n}\r\n\r\n.form-item .help-text {\r\n color: var(--grey-300);\r\n}\r\n\r\n.form-item input,\r\n.form-item textarea,\r\n.form-item select {\r\n padding: 8px;\r\n margin: 6px 0;\r\n\r\n border: 1px solid var(--grey-200);\r\n border-radius: 8px;\r\n\r\n font-size: 16px;\r\n}\r\n\r\n.form-item textarea {\r\n resize: none;\r\n}\r\n\r\n.form-item select {\r\n height: 44px;\r\n\r\n padding: 8px;\r\n\r\n border: 1px solid var(--grey-200);\r\n border-radius: 8px;\r\n\r\n color: var(--grey-300);\r\n}\r\n\r\ninput[name='name'],\r\ninput[name='link'] {\r\n height: 44px;\r\n}\r\n\r\n.button-container {\r\n display: flex;\r\n}\r\n\r\n.button {\r\n width: 100%;\r\n height: 44px;\r\n\r\n margin-right: 16px;\r\n\r\n border: none;\r\n border-radius: 8px;\r\n\r\n font-weight: 600;\r\n cursor: pointer;\r\n}\r\n\r\n.button:last-child {\r\n margin-right: 0;\r\n}\r\n\r\n.button--secondary {\r\n border: 1px solid var(--grey-300);\r\n background: transparent;\r\n\r\n color: var(--grey-300);\r\n}\r\n\r\n.button--primary {\r\n background: var(--primary-color);\r\n\r\n color: var(--grey-100);\r\n}\r\n"],sourceRoot:""}]);const s=o},401:(r,t,n)=>{n.d(t,{A:()=>s});var e=n(354),a=n.n(e),i=n(314),o=n.n(i)()(a());o.push([r.id,".restaurant-list-container {\r\n display: flex;\r\n flex-direction: column;\r\n\r\n padding: 0 16px;\r\n margin: 16px 0;\r\n}\r\n\r\n.restaurant {\r\n display: flex;\r\n align-items: flex-start;\r\n\r\n padding: 16px 8px;\r\n\r\n border-bottom: 1px solid #e9eaed;\r\n\r\n cursor: pointer;\r\n}\r\n\r\n.restaurant__category {\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n width: 64px;\r\n height: 64px;\r\n min-width: 64px;\r\n min-height: 64px;\r\n\r\n margin-right: 16px;\r\n\r\n border-radius: 50%;\r\n background: var(--lighten-color);\r\n}\r\n\r\n.category-icon {\r\n width: 36px;\r\n height: 36px;\r\n}\r\n\r\n.restaurant__info {\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: flex-start;\r\n width: 100%;\r\n}\r\n\r\n.restaurant__header {\r\n display: flex;\r\n justify-content: space-between;\r\n width: 100%;\r\n}\r\n\r\n.restaurant__name {\r\n margin: 0;\r\n}\r\n\r\n.restaurant__distance {\r\n color: var(--primary-color);\r\n}\r\n\r\n.restaurant__favorite-button {\r\n width: 32px;\r\n height: 32px;\r\n\r\n border: none;\r\n background: transparent;\r\n\r\n margin-right: 0;\r\n\r\n cursor: pointer;\r\n}\r\n\r\n.restaurant__description {\r\n display: -webkit-box;\r\n\r\n padding-top: 8px;\r\n\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n -webkit-line-clamp: 2;\r\n -webkit-box-orient: vertical;\r\n}\r\n","",{version:3,sources:["webpack://./src/view/styles/RestaurantList.css"],names:[],mappings:"AAAA;EACE,aAAa;EACb,sBAAsB;;EAEtB,eAAe;EACf,cAAc;AAChB;;AAEA;EACE,aAAa;EACb,uBAAuB;;EAEvB,iBAAiB;;EAEjB,gCAAgC;;EAEhC,eAAe;AACjB;;AAEA;EACE,aAAa;EACb,uBAAuB;EACvB,mBAAmB;EACnB,WAAW;EACX,YAAY;EACZ,eAAe;EACf,gBAAgB;;EAEhB,kBAAkB;;EAElB,kBAAkB;EAClB,gCAAgC;AAClC;;AAEA;EACE,WAAW;EACX,YAAY;AACd;;AAEA;EACE,aAAa;EACb,sBAAsB;EACtB,2BAA2B;EAC3B,WAAW;AACb;;AAEA;EACE,aAAa;EACb,8BAA8B;EAC9B,WAAW;AACb;;AAEA;EACE,SAAS;AACX;;AAEA;EACE,2BAA2B;AAC7B;;AAEA;EACE,WAAW;EACX,YAAY;;EAEZ,YAAY;EACZ,uBAAuB;;EAEvB,eAAe;;EAEf,eAAe;AACjB;;AAEA;EACE,oBAAoB;;EAEpB,gBAAgB;;EAEhB,gBAAgB;EAChB,uBAAuB;EACvB,qBAAqB;EACrB,4BAA4B;AAC9B",sourcesContent:[".restaurant-list-container {\r\n display: flex;\r\n flex-direction: column;\r\n\r\n padding: 0 16px;\r\n margin: 16px 0;\r\n}\r\n\r\n.restaurant {\r\n display: flex;\r\n align-items: flex-start;\r\n\r\n padding: 16px 8px;\r\n\r\n border-bottom: 1px solid #e9eaed;\r\n\r\n cursor: pointer;\r\n}\r\n\r\n.restaurant__category {\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n width: 64px;\r\n height: 64px;\r\n min-width: 64px;\r\n min-height: 64px;\r\n\r\n margin-right: 16px;\r\n\r\n border-radius: 50%;\r\n background: var(--lighten-color);\r\n}\r\n\r\n.category-icon {\r\n width: 36px;\r\n height: 36px;\r\n}\r\n\r\n.restaurant__info {\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: flex-start;\r\n width: 100%;\r\n}\r\n\r\n.restaurant__header {\r\n display: flex;\r\n justify-content: space-between;\r\n width: 100%;\r\n}\r\n\r\n.restaurant__name {\r\n margin: 0;\r\n}\r\n\r\n.restaurant__distance {\r\n color: var(--primary-color);\r\n}\r\n\r\n.restaurant__favorite-button {\r\n width: 32px;\r\n height: 32px;\r\n\r\n border: none;\r\n background: transparent;\r\n\r\n margin-right: 0;\r\n\r\n cursor: pointer;\r\n}\r\n\r\n.restaurant__description {\r\n display: -webkit-box;\r\n\r\n padding-top: 8px;\r\n\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n -webkit-line-clamp: 2;\r\n -webkit-box-orient: vertical;\r\n}\r\n"],sourceRoot:""}]);const s=o},372:(r,t,n)=>{n.d(t,{A:()=>s});var e=n(354),a=n.n(e),i=n(314),o=n.n(i)()(a());o.push([r.id,"select {\r\n padding: 8px;\r\n margin: 6px 0;\r\n\r\n border: 1px solid var(--grey-200);\r\n border-radius: 8px;\r\n\r\n font-size: 16px;\r\n}\r\n\r\n.restaurant-filter-container {\r\n display: flex;\r\n justify-content: space-between;\r\n\r\n padding: 0 16px;\r\n margin-top: 24px;\r\n}\r\n\r\n.restaurant-filter-container select {\r\n height: 44px;\r\n min-width: 125px;\r\n\r\n border: 1px solid #d0d5dd;\r\n border-radius: 8px;\r\n background: transparent;\r\n\r\n font-size: 16px;\r\n}\r\n\r\n.restaurant-filter {\r\n padding: 8px;\r\n}\r\n","",{version:3,sources:["webpack://./src/view/styles/Select.css"],names:[],mappings:"AAAA;EACE,YAAY;EACZ,aAAa;;EAEb,iCAAiC;EACjC,kBAAkB;;EAElB,eAAe;AACjB;;AAEA;EACE,aAAa;EACb,8BAA8B;;EAE9B,eAAe;EACf,gBAAgB;AAClB;;AAEA;EACE,YAAY;EACZ,gBAAgB;;EAEhB,yBAAyB;EACzB,kBAAkB;EAClB,uBAAuB;;EAEvB,eAAe;AACjB;;AAEA;EACE,YAAY;AACd",sourcesContent:["select {\r\n padding: 8px;\r\n margin: 6px 0;\r\n\r\n border: 1px solid var(--grey-200);\r\n border-radius: 8px;\r\n\r\n font-size: 16px;\r\n}\r\n\r\n.restaurant-filter-container {\r\n display: flex;\r\n justify-content: space-between;\r\n\r\n padding: 0 16px;\r\n margin-top: 24px;\r\n}\r\n\r\n.restaurant-filter-container select {\r\n height: 44px;\r\n min-width: 125px;\r\n\r\n border: 1px solid #d0d5dd;\r\n border-radius: 8px;\r\n background: transparent;\r\n\r\n font-size: 16px;\r\n}\r\n\r\n.restaurant-filter {\r\n padding: 8px;\r\n}\r\n"],sourceRoot:""}]);const s=o},991:(r,t,n)=>{n.d(t,{A:()=>s});var e=n(354),a=n.n(e),i=n(314),o=n.n(i)()(a());o.push([r.id,"a {\r\n text-decoration: none;\r\n color: inherit;\r\n}\r\n\r\n.tab {\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n height: 42px;\r\n\r\n padding: 0 16px;\r\n margin-bottom: 30px;\r\n\r\n color: var(--grey-300);\r\n}\r\n\r\n.tab__item {\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n text-align: center;\r\n width: 50%;\r\n\r\n padding: 12px 0;\r\n\r\n border-bottom: 2px solid var(--grey-200);\r\n}\r\n\r\n.tab__item.active {\r\n border-bottom: 2px solid var(--primary-color);\r\n color: var(--primary-color);\r\n}\r\n","",{version:3,sources:["webpack://./src/view/styles/Tab.css"],names:[],mappings:"AAAA;EACE,qBAAqB;EACrB,cAAc;AAChB;;AAEA;EACE,aAAa;EACb,8BAA8B;EAC9B,mBAAmB;EACnB,YAAY;;EAEZ,eAAe;EACf,mBAAmB;;EAEnB,sBAAsB;AACxB;;AAEA;EACE,aAAa;EACb,uBAAuB;EACvB,mBAAmB;EACnB,kBAAkB;EAClB,UAAU;;EAEV,eAAe;;EAEf,wCAAwC;AAC1C;;AAEA;EACE,6CAA6C;EAC7C,2BAA2B;AAC7B",sourcesContent:["a {\r\n text-decoration: none;\r\n color: inherit;\r\n}\r\n\r\n.tab {\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n height: 42px;\r\n\r\n padding: 0 16px;\r\n margin-bottom: 30px;\r\n\r\n color: var(--grey-300);\r\n}\r\n\r\n.tab__item {\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n text-align: center;\r\n width: 50%;\r\n\r\n padding: 12px 0;\r\n\r\n border-bottom: 2px solid var(--grey-200);\r\n}\r\n\r\n.tab__item.active {\r\n border-bottom: 2px solid var(--primary-color);\r\n color: var(--primary-color);\r\n}\r\n"],sourceRoot:""}]);const s=o},525:(r,t,n)=>{n.d(t,{A:()=>s});var e=n(354),a=n.n(e),i=n(314),o=n.n(i)()(a());o.push([r.id,"* {\r\n padding: 0;\r\n margin: 0;\r\n box-sizing: border-box;\r\n}\r\n\r\nul,\r\nli {\r\n list-style: none;\r\n}\r\n\r\nhtml,\r\nbody {\r\n width: 100%;\r\n height: 100%;\r\n\r\n font-family: sans-serif;\r\n font-size: 16px;\r\n}\r\n\r\n/* Colors *****************************************/\r\n:root {\r\n --primary-color: #ec4a0a;\r\n --lighten-color: #f6a88a;\r\n --grey-100: #ffffff;\r\n --grey-200: #d0d5dd;\r\n --grey-300: #667085;\r\n --grey-400: #344054;\r\n --grey-500: #000000;\r\n}\r\n\r\n/* Typography *************************************/\r\n.text-title {\r\n font-size: 20px;\r\n line-height: 24px;\r\n font-weight: 600;\r\n}\r\n\r\n.text-subtitle {\r\n font-size: 18px;\r\n line-height: 28px;\r\n font-weight: 600;\r\n}\r\n\r\n.text-body {\r\n font-size: 16px;\r\n line-height: 24px;\r\n font-weight: 400;\r\n}\r\n\r\n.text-caption {\r\n font-size: 14px;\r\n line-height: 20px;\r\n font-weight: 400;\r\n}\r\n","",{version:3,sources:["webpack://./src/view/styles/global.css"],names:[],mappings:"AAAA;EACE,UAAU;EACV,SAAS;EACT,sBAAsB;AACxB;;AAEA;;EAEE,gBAAgB;AAClB;;AAEA;;EAEE,WAAW;EACX,YAAY;;EAEZ,uBAAuB;EACvB,eAAe;AACjB;;AAEA,mDAAmD;AACnD;EACE,wBAAwB;EACxB,wBAAwB;EACxB,mBAAmB;EACnB,mBAAmB;EACnB,mBAAmB;EACnB,mBAAmB;EACnB,mBAAmB;AACrB;;AAEA,mDAAmD;AACnD;EACE,eAAe;EACf,iBAAiB;EACjB,gBAAgB;AAClB;;AAEA;EACE,eAAe;EACf,iBAAiB;EACjB,gBAAgB;AAClB;;AAEA;EACE,eAAe;EACf,iBAAiB;EACjB,gBAAgB;AAClB;;AAEA;EACE,eAAe;EACf,iBAAiB;EACjB,gBAAgB;AAClB",sourcesContent:["* {\r\n padding: 0;\r\n margin: 0;\r\n box-sizing: border-box;\r\n}\r\n\r\nul,\r\nli {\r\n list-style: none;\r\n}\r\n\r\nhtml,\r\nbody {\r\n width: 100%;\r\n height: 100%;\r\n\r\n font-family: sans-serif;\r\n font-size: 16px;\r\n}\r\n\r\n/* Colors *****************************************/\r\n:root {\r\n --primary-color: #ec4a0a;\r\n --lighten-color: #f6a88a;\r\n --grey-100: #ffffff;\r\n --grey-200: #d0d5dd;\r\n --grey-300: #667085;\r\n --grey-400: #344054;\r\n --grey-500: #000000;\r\n}\r\n\r\n/* Typography *************************************/\r\n.text-title {\r\n font-size: 20px;\r\n line-height: 24px;\r\n font-weight: 600;\r\n}\r\n\r\n.text-subtitle {\r\n font-size: 18px;\r\n line-height: 28px;\r\n font-weight: 600;\r\n}\r\n\r\n.text-body {\r\n font-size: 16px;\r\n line-height: 24px;\r\n font-weight: 400;\r\n}\r\n\r\n.text-caption {\r\n font-size: 14px;\r\n line-height: 20px;\r\n font-weight: 400;\r\n}\r\n"],sourceRoot:""}]);const s=o},314:r=>{r.exports=function(r){var t=[];return t.toString=function(){return this.map((function(t){var n="",e=void 0!==t[5];return t[4]&&(n+="@supports (".concat(t[4],") {")),t[2]&&(n+="@media ".concat(t[2]," {")),e&&(n+="@layer".concat(t[5].length>0?" ".concat(t[5]):""," {")),n+=r(t),e&&(n+="}"),t[2]&&(n+="}"),t[4]&&(n+="}"),n})).join("")},t.i=function(r,n,e,a,i){"string"==typeof r&&(r=[[null,r,void 0]]);var o={};if(e)for(var s=0;s0?" ".concat(l[5]):""," {").concat(l[1],"}")),l[5]=i),n&&(l[2]?(l[1]="@media ".concat(l[2]," {").concat(l[1],"}"),l[2]=n):l[2]=n),a&&(l[4]?(l[1]="@supports (".concat(l[4],") {").concat(l[1],"}"),l[4]=a):l[4]="".concat(a)),t.push(l))}},t}},354:r=>{r.exports=function(r){var t=r[1],n=r[3];if(!n)return t;if("function"==typeof btoa){var e=btoa(unescape(encodeURIComponent(JSON.stringify(n)))),a="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(e),i="/*# ".concat(a," */");return[t].concat([i]).join("\n")}return[t].join("\n")}},72:r=>{var t=[];function n(r){for(var n=-1,e=0;e{var t={};r.exports=function(r,n){var e=function(r){if(void 0===t[r]){var n=document.querySelector(r);if(window.HTMLIFrameElement&&n instanceof window.HTMLIFrameElement)try{n=n.contentDocument.head}catch(r){n=null}t[r]=n}return t[r]}(r);if(!e)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");e.appendChild(n)}},540:r=>{r.exports=function(r){var t=document.createElement("style");return r.setAttributes(t,r.attributes),r.insert(t,r.options),t}},56:(r,t,n)=>{r.exports=function(r){var t=n.nc;t&&r.setAttribute("nonce",t)}},825:r=>{r.exports=function(r){var t=r.insertStyleElement(r);return{update:function(n){!function(r,t,n){var e="";n.supports&&(e+="@supports (".concat(n.supports,") {")),n.media&&(e+="@media ".concat(n.media," {"));var a=void 0!==n.layer;a&&(e+="@layer".concat(n.layer.length>0?" ".concat(n.layer):""," {")),e+=n.css,a&&(e+="}"),n.media&&(e+="}"),n.supports&&(e+="}");var i=n.sourceMap;i&&"undefined"!=typeof btoa&&(e+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(i))))," */")),t.styleTagTransform(e,r,t.options)}(t,r,n)},remove:function(){!function(r){if(null===r.parentNode)return!1;r.parentNode.removeChild(r)}(t)}}}},113:r=>{r.exports=function(r,t){if(t.styleSheet)t.styleSheet.cssText=r;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(r))}}}},t={};function n(e){var a=t[e];if(void 0!==a)return a.exports;var i=t[e]={id:e,exports:{}};return r[e](i,i.exports,n),i.exports}n.n=r=>{var t=r&&r.__esModule?()=>r.default:()=>r;return n.d(t,{a:t}),t},n.d=(r,t)=>{for(var e in t)n.o(t,e)&&!n.o(r,e)&&Object.defineProperty(r,e,{enumerable:!0,get:t[e]})},n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(r){if("object"==typeof window)return window}}(),n.o=(r,t)=>Object.prototype.hasOwnProperty.call(r,t),(()=>{var r;n.g.importScripts&&(r=n.g.location+"");var t=n.g.document;if(!r&&t&&(t.currentScript&&(r=t.currentScript.src),!r)){var e=t.getElementsByTagName("script");if(e.length)for(var a=e.length-1;a>-1&&(!r||!/^http(s?):/.test(r));)r=e[a--].src}if(!r)throw new Error("Automatic publicPath is not supported in this browser");r=r.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),n.p=r})(),n.nc=void 0,(()=>{var r,t,e,a,i,o=function(r,t,n,e){if("a"===n&&!e)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?r!==t||!e:!t.has(r))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?e:"a"===n?e.call(r):e?e.value:t.get(r)},s=function(r,t,n,e,a){if("m"===e)throw new TypeError("Private method is not writable");if("a"===e&&!a)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?r!==t||!a:!t.has(r))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===e?a.call(r,n):a?a.value=n:t.set(r,n),n};t=new WeakMap,r=new WeakSet,e=function(r){return"전체"===r?this.restaurants:o(this,t,"f").filter((t=>t.category===r))},a=function(r){return[...r].sort(((r,t)=>r.name.localeCompare(t.name)))},i=function(r){return[...r].sort(((r,t)=>r.distance-t.distance))};const A=class{constructor(){r.add(this),t.set(this,[])}get restaurants(){return[...o(this,t,"f")]}set restaurants(r){s(this,t,r??[],"f")}add(r){o(this,t,"f").push(r)}filteredAndSortedByOptions(t,n){const s=o(this,r,"m",e).call(this,t);return"distance"===n?o(this,r,"m",i).call(this,s):o(this,r,"m",a).call(this,s)}toggleFavorite(r){const n=o(this,t,"f").findIndex((t=>t.name===r));-1!==n&&(o(this,t,"f")[n].favorite=!o(this,t,"f")[n].favorite,this.updateLocalStorage())}updateLocalStorage(){localStorage.setItem("restaurants",JSON.stringify(o(this,t,"f")))}loadRestaurantsFromLocalStorage(){const r=localStorage.getItem("restaurants");r&&s(this,t,JSON.parse(r),"f")}};var c,l,d,u=function(r,t,n,e,a){if("m"===e)throw new TypeError("Private method is not writable");if("a"===e&&!a)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?r!==t||!a:!t.has(r))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===e?a.call(r,n):a?a.value=n:t.set(r,n),n},p=function(r,t,n,e){if("a"===n&&!e)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?r!==t||!e:!t.has(r))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?e:"a"===n?e.call(r):e?e.value:t.get(r)};class h{constructor(){c.set(this,void 0),l.set(this,void 0),d.set(this,void 0),u(this,c,document.querySelector("#category-filter"),"f"),u(this,l,document.querySelector("#sorting-filter"),"f"),u(this,d,document.querySelector('ul[is="app-restaurant-list"]'),"f")}get sortingFilter(){return p(this,l,"f").value}get categoryFilter(){return p(this,c,"f").value}set categoryFilter(r){p(this,c,"f").value=r}set restaurants(r){p(this,d,"f").restaurants=r}}c=new WeakMap,l=new WeakMap,d=new WeakMap;var m,f,E,g,b,C,y=function(r,t,n,e){if("a"===n&&!e)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?r!==t||!e:!t.has(r))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?e:"a"===n?e.call(r):e?e.value:t.get(r)};const B="restaurantFormSubmit",x="restaurantFormReset";class v extends HTMLFormElement{constructor(){super(),m.add(this),f.set(this,void 0);const r=document.querySelector("#template-restaurant-form").content.cloneNode(!0);this.appendChild(r),function(r,t,n,e,a){if("m"===e)throw new TypeError("Private method is not writable");if("a"===e&&!a)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?r!==t||!a:!t.has(r))throw new TypeError("Cannot write private member to an object whose class did not declare it");"a"===e?a.call(r,n):a?a.value=n:t.set(r,n)}(this,f,this.querySelector("#link"),"f")}connectedCallback(){this.addEventListener("submit",y(this,m,"m",E).bind(this)),this.addEventListener("reset",y(this,m,"m",g).bind(this)),y(this,f,"f").addEventListener("invalid",(()=>{y(this,f,"f").value="",y(this,f,"f").setCustomValidity("")}))}}f=new WeakMap,m=new WeakSet,E=function(r){if(r.preventDefault(),!y(this,m,"m",b).call(this))return void y(this,f,"f").setCustomValidity("유효하지 않은 링크입니다.");const t=new FormData(r.target),n=y(this,m,"m",C).call(this,t);this.dispatchEvent(new CustomEvent(B,{bubbles:!0,detail:{formData:n}})),this.reset()},g=function(){this.dispatchEvent(new CustomEvent(x,{bubbles:!0}))},b=function(){return""===y(this,f,"f").value||/^https?:\/\//.test(y(this,f,"f").value)},C=function(r){return[...r.keys()].reduce(((t,n)=>({...t,[n]:r.get(n)})),{})};var w,k,_,S,j=function(r,t,n,e){if("a"===n&&!e)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?r!==t||!e:!t.has(r))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?e:"a"===n?e.call(r):e?e.value:t.get(r)};const T="selectOnChange";class Y extends HTMLSelectElement{constructor(){super(...arguments),w.add(this)}get options(){return this.dataset.options?JSON.parse(this.dataset.options):[]}set options(r){this.setAttribute("data-options",JSON.stringify(r))}connectedCallback(){this.addEventListener("change",j(this,w,"m",k).bind(this))}attributeChangedCallback(r){"data-options"===r&&j(this,w,"m",_).call(this)}}w=new WeakSet,k=function(r){const{value:t}=r.target;this.dispatchEvent(new CustomEvent(T,{bubbles:!0,detail:{value:t,id:this.id}}))},_=function(){this.textContent="";const r=document.createDocumentFragment();j(this,w,"m",S).call(this).forEach((t=>r.appendChild(t))),this.appendChild(r)},S=function(){return this.options.map((({value:r,option:t})=>{const n=document.createElement("option");return n.value=r,n.textContent=t,n}))},Y.observedAttributes=["data-options"];class L{constructor(r,t){this.tabItem=document.querySelector(r),this.callback=t,this.init()}init(){this.tabItem.addEventListener("click",(r=>{r.preventDefault(),document.querySelector(".tab__item.active").classList.remove("active"),this.tabItem.parentElement.classList.add("active"),this.callback()}))}isActive(){return this.tabItem.parentElement.classList.contains("active")}}var q,W,M,P,z,I,F,N,Z,O,D,R,J,X,H=function(r,t,n,e,a){if("m"===e)throw new TypeError("Private method is not writable");if("a"===e&&!a)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?r!==t||!a:!t.has(r))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===e?a.call(r,n):a?a.value=n:t.set(r,n),n},U=function(r,t,n,e){if("a"===n&&!e)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?r!==t||!e:!t.has(r))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?e:"a"===n?e.call(r):e?e.value:t.get(r)};W=new WeakMap,M=new WeakMap,P=new WeakMap,z=new WeakMap,q=new WeakSet,I=function(r){const t=U(this,W,"f").restaurants.filter((t=>t.id!==r));U(this,W,"f").restaurants=t,U(this,q,"m",Z).call(this)},F=function(){H(this,P,new L(".tab__item:first-child a",(()=>{U(this,q,"m",O).call(this,U(this,W,"f").categoryFilter,U(this,W,"f").sortingFilter)})),"f"),H(this,z,new L(".tab__item:last-child a",(()=>{U(this,q,"m",D).call(this)})),"f")},N=function(){U(this,M,"f").loadRestaurantsFromLocalStorage()},Z=function(){U(this,M,"f").updateLocalStorage()},O=function(r,t){const n=U(this,M,"f").filteredAndSortedByOptions(r,t);U(this,W,"f").restaurants=n},D=function(){const r=U(this,M,"f").restaurants.filter((r=>r.favorite));U(this,W,"f").restaurants=r},R=function(){document.addEventListener(B,(r=>{const{formData:t}=r.detail;U(this,M,"f").add(t),U(this,q,"m",Z).call(this),U(this,q,"m",J).call(this,t.category)}))},J=function(r){U(this,z,"f").isActive()?U(this,q,"m",D).call(this):(U(this,q,"m",O).call(this,r,U(this,W,"f").sortingFilter),U(this,W,"f").categoryFilter=r)},X=function(){document.querySelector(".restaurant-filter-container").addEventListener(T,(()=>{U(this,z,"f").isActive()?U(this,q,"m",D).call(this):U(this,q,"m",O).call(this,U(this,W,"f").categoryFilter,U(this,W,"f").sortingFilter)}))};class $ extends HTMLElement{constructor(){super();const r=document.querySelector("#template-header").content.cloneNode(!0);this.appendChild(r)}connectedCallback(){this.querySelector(".gnb__button").addEventListener("click",(()=>{document.querySelector("#addModal").openModal()}))}}var V,G,K,Q,rr,tr,nr,er,ar,ir,or=function(r,t,n,e){if("a"===n&&!e)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?r!==t||!e:!t.has(r))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?e:"a"===n?e.call(r):e?e.value:t.get(r)};const sr="restaurantItemDelete",Ar="restaurantDetailClose";class cr extends HTMLElement{constructor(){super(),V.add(this);const r=document.querySelector("#template-restaurant-detail").content.cloneNode(!0);this.appendChild(r)}connectedCallback(){or(this,V,"m",nr).call(this),this.querySelector(".restaurant-detail__favorite-button").addEventListener("click",or(this,V,"m",rr).bind(this)),this.querySelector(".button-container").addEventListener("click",or(this,V,"m",er).bind(this)),document.addEventListener("restaurantDetailOpen",(r=>{const t=r.detail;or(this,V,"m",G).call(this,t)}))}}V=new WeakSet,G=function(r){const t=document.querySelector(".detail-container"),{category:n,name:e,distance:a,description:i,link:o}=r;t.querySelector(".category-icon").src=or(this,V,"m",K).call(this,n),t.querySelector(".category-icon").alt=n,t.querySelector(".restaurant-detail__name").textContent=e,t.querySelector(".restaurant-detail__distance").textContent=`캠퍼스로부터 ${a}분 내`,t.querySelector(".restaurant-detail__description").textContent=i;const s=t.querySelector(".restaurant-detail__link"),A=or(this,V,"m",Q).call(this,s,o);s.parentNode.replaceChild(A,s)},K=function(r){return"한식"===r?"./category-korean.png":"중식"===r?"./category-chinese.png":"일식"===r?"./category-japanese.png":"양식"===r?"./category-western.png":"아시안"===r?"./category-asian.png":"기타"===r?"./category-etc.png":""},Q=function(r,t){const n=r.cloneNode(!0);return n.textContent=t,n.href=t,n.target="_blank",n.addEventListener("click",(r=>{r.stopPropagation()})),n},rr=function(){const r=or(this,V,"m",tr).call(this);or(this,V,"m",nr).call(this,r)},tr=function(){const r=!JSON.parse(localStorage.getItem("favorite"));return localStorage.setItem("favorite",r),r},nr=function(r){const t=this.querySelector(".restaurant-detail__favorite-button img"),n=void 0!==r?r:JSON.parse(localStorage.getItem("favorite"))||!1;t.src=n?"./favorite-icon-filled.png":"./favorite-icon-lined.png"},er=function(r){console.log("button Container"),r.target.classList.contains("button--primary")?or(this,V,"m",ir).call(this):r.target.classList.contains("button--secondary")&&or(this,V,"m",ar).call(this)},ar=function(){const r=this.getAttribute("data-id");localStorage.removeItem(r),this.dispatchEvent(new CustomEvent(sr,{bubbles:!0,detail:{id:r}})),or(this,V,"m",ir).call(this)},ir=function(){console.log("close"),this.dispatchEvent(new CustomEvent(Ar,{bubbles:!0}))};var lr,dr,ur,pr=function(r,t,n,e){if("a"===n&&!e)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?r!==t||!e:!t.has(r))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?e:"a"===n?e.call(r):e?e.value:t.get(r)};class hr extends HTMLElement{constructor(){super(),lr.add(this),dr.set(this,void 0),function(r,t,n,e,a){if("m"===e)throw new TypeError("Private method is not writable");if("a"===e&&!a)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?r!==t||!a:!t.has(r))throw new TypeError("Cannot write private member to an object whose class did not declare it");"a"===e?a.call(r,n):a?a.value=n:t.set(r,n)}(this,dr,this.attachShadow({mode:"open"}),"f");const r=document.querySelector("#template-modal").content.cloneNode(!0);pr(this,dr,"f").appendChild(r)}static get observedAttributes(){return["height"]}attributeChangedCallback(r,t,n){"height"===r&&this.render()}render(){const r=this.shadowRoot.querySelector(".modal-container");r&&(r.style.height=this.getAttribute("height"))}connectedCallback(){"addModal"===this.id?(this.addEventListener(B,pr(this,lr,"m",ur).bind(this)),this.addEventListener(x,pr(this,lr,"m",ur).bind(this))):"detailModal"===this.id&&(this.addEventListener(sr,pr(this,lr,"m",ur).bind(this)),this.addEventListener(Ar,pr(this,lr,"m",ur).bind(this))),pr(this,dr,"f").querySelector(".modal-backdrop").addEventListener("click",pr(this,lr,"m",ur).bind(this))}openModal(){pr(this,dr,"f").querySelector(".modal").classList.add("modal--open")}}dr=new WeakMap,lr=new WeakSet,ur=function(){pr(this,dr,"f").querySelector(".modal").classList.remove("modal--open")};var mr,fr,Er,gr,br,Cr,yr,Br,xr,vr=function(r,t,n,e){if("a"===n&&!e)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?r!==t||!e:!t.has(r))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?e:"a"===n?e.call(r):e?e.value:t.get(r)};class wr extends HTMLLIElement{constructor(){super(),mr.add(this),vr(this,mr,"m",fr).call(this)}get restaurant(){return this.dataset.restaurant?JSON.parse(this.dataset.restaurant):{}}set restaurant(r){this.setAttribute("data-restaurant",JSON.stringify(r))}attributeChangedCallback(){vr(this,mr,"m",br).call(this)}connectedCallback(){vr(this,mr,"m",br).call(this)}}mr=new WeakSet,fr=function(){vr(this,mr,"m",Er).call(this),this.classList.add("restaurant"),vr(this,mr,"m",gr).call(this),this.restaurantManager=new A,this.restaurantManager.loadRestaurantsFromLocalStorage(),this.addEventListener("click",vr(this,mr,"m",xr).bind(this))},Er=function(){const r=document.querySelector("#template-restaurant-item").content.cloneNode(!0);this.appendChild(r)},gr=function(){this.querySelector(".restaurant__favorite-button").addEventListener("click",vr(this,mr,"m",yr).bind(this))},br=function(){const{category:r,name:t,distance:n,description:e,favorite:a}=this.restaurant;this.querySelector(".restaurant__name").textContent=t,this.querySelector(".restaurant__distance").textContent=`캠퍼스로부터 ${n}분 내 `,this.querySelector(".restaurant__description").textContent=e,this.querySelector(".category-icon").src=vr(this,mr,"m",Cr).call(this,r),this.querySelector(".category-icon").alt=r,vr(this,mr,"m",Br).call(this,a)},Cr=function(r){return"한식"===r?"./category-korean.png":"중식"===r?"./category-chinese.png":"일식"===r?"./category-japanese.png":"양식"===r?"./category-western.png":"아시안"===r?"./category-asian.png":"기타"===r?"./category-etc.png":""},yr=function(r){r.stopPropagation();const t=this.querySelector(".restaurant__name").textContent,n=this.restaurantManager.restaurants.find((r=>r.name===t));n&&(n.favorite=!n.favorite,this.restaurantManager.updateLocalStorage(),vr(this,mr,"m",Br).call(this,n.favorite))},Br=function(r){this.querySelector(".restaurant__favorite-button img").src=r?"./favorite-icon-filled.png":"./favorite-icon-lined.png"},xr=function(){const r=document.querySelector("#detailModal");r.dispatchEvent(new CustomEvent("restaurantDetailOpen",{bubbles:!0,detail:this.restaurant})),r.openModal()},wr.observedAttributes=["data-restaurant"];var kr,_r,Sr,jr=function(r,t,n,e){if("a"===n&&!e)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?r!==t||!e:!t.has(r))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?e:"a"===n?e.call(r):e?e.value:t.get(r)};class Tr extends HTMLUListElement{constructor(){super(),kr.add(this),this.classList.add("restaurant-list")}get restaurants(){return this.dataset.restaurants?JSON.parse(this.dataset.restaurants):[]}set restaurants(r){this.setAttribute("data-restaurants",JSON.stringify(r))}attributeChangedCallback(){jr(this,kr,"m",_r).call(this)}}kr=new WeakSet,_r=function(){this.textContent="";const r=document.createDocumentFragment();this.restaurants?.forEach((t=>{const n=jr(this,kr,"m",Sr).call(this,t);r.appendChild(n)})),this.appendChild(r)},Sr=function(r){const t=new wr;return t.restaurant=r,t},Tr.observedAttributes=["data-restaurants"];var Yr=n(72),Lr=n.n(Yr),qr=n(825),Wr=n.n(qr),Mr=n(659),Pr=n.n(Mr),zr=n(56),Ir=n.n(zr),Fr=n(540),Nr=n.n(Fr),Zr=n(113),Or=n.n(Zr),Dr=n(525),Rr={};Rr.styleTagTransform=Or(),Rr.setAttributes=Ir(),Rr.insert=Pr().bind(null,"head"),Rr.domAPI=Wr(),Rr.insertStyleElement=Nr(),Lr()(Dr.A,Rr),Dr.A&&Dr.A.locals&&Dr.A.locals;var Jr=n(309),Xr={};Xr.styleTagTransform=Or(),Xr.setAttributes=Ir(),Xr.insert=Pr().bind(null,"head"),Xr.domAPI=Wr(),Xr.insertStyleElement=Nr(),Lr()(Jr.A,Xr),Jr.A&&Jr.A.locals&&Jr.A.locals;var Hr=n(725),Ur={};Ur.styleTagTransform=Or(),Ur.setAttributes=Ir(),Ur.insert=Pr().bind(null,"head"),Ur.domAPI=Wr(),Ur.insertStyleElement=Nr(),Lr()(Hr.A,Ur),Hr.A&&Hr.A.locals&&Hr.A.locals;var $r=n(372),Vr={};Vr.styleTagTransform=Or(),Vr.setAttributes=Ir(),Vr.insert=Pr().bind(null,"head"),Vr.domAPI=Wr(),Vr.insertStyleElement=Nr(),Lr()($r.A,Vr),$r.A&&$r.A.locals&&$r.A.locals;var Gr=n(683),Kr={};Kr.styleTagTransform=Or(),Kr.setAttributes=Ir(),Kr.insert=Pr().bind(null,"head"),Kr.domAPI=Wr(),Kr.insertStyleElement=Nr(),Lr()(Gr.A,Kr),Gr.A&&Gr.A.locals&&Gr.A.locals;var Qr=n(401),rt={};rt.styleTagTransform=Or(),rt.setAttributes=Ir(),rt.insert=Pr().bind(null,"head"),rt.domAPI=Wr(),rt.insertStyleElement=Nr(),Lr()(Qr.A,rt),Qr.A&&Qr.A.locals&&Qr.A.locals;var tt=n(991),nt={};nt.styleTagTransform=Or(),nt.setAttributes=Ir(),nt.insert=Pr().bind(null,"head"),nt.domAPI=Wr(),nt.insertStyleElement=Nr(),Lr()(tt.A,nt),tt.A&&tt.A.locals&&tt.A.locals;var et=n(722),at={};at.styleTagTransform=Or(),at.setAttributes=Ir(),at.insert=Pr().bind(null,"head"),at.domAPI=Wr(),at.insertStyleElement=Nr(),Lr()(et.A,at),et.A&&et.A.locals&&et.A.locals,n.p,n.p,n.p,n.p,n.p,n.p,n.p,n.p,n.p,window.customElements.define("app-gnb",$),window.customElements.define("app-modal",hr),window.customElements.define("app-select",Y,{extends:"select"}),window.customElements.define("app-restaurant-form",v,{extends:"form"}),window.customElements.define("app-restaurant-item",wr,{extends:"li"}),window.customElements.define("app-restaurant-list",Tr,{extends:"ul"}),window.customElements.define("app-restaurant-detail",cr),(new class{constructor(){q.add(this),W.set(this,void 0),M.set(this,void 0),P.set(this,void 0),z.set(this,void 0),H(this,W,new h,"f"),H(this,M,new A,"f")}start(){U(this,q,"m",N).call(this),U(this,W,"f").restaurants=JSON.parse(window.localStorage.getItem("restaurants")),U(this,q,"m",R).call(this),U(this,q,"m",X).call(this),U(this,q,"m",F).call(this),document.querySelector("#restaurant-detail").addEventListener("restaurantItemDelete",(r=>{const t=r.detail.id;U(this,q,"m",I).call(this,t)}))}updateFavoriteStatus(r){U(this,M,"f").toggleFavorite(r),U(this,z,"f").isActive()?U(this,q,"m",D).call(this):U(this,q,"m",O).call(this,U(this,W,"f").categoryFilter,U(this,W,"f").sortingFilter)}}).start()})()})(); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,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WyJ3ZWJwYWNrOi8vQHdvb3dhY291cnNlL2phdmFzY3JpcHQtbHVuY2gvLi9zcmMvdmlldy9zdHlsZXMvR25iLmNzcyIsIndlYnBhY2s6Ly9Ad29vd2Fjb3Vyc2UvamF2YXNjcmlwdC1sdW5jaC8uL3NyYy92aWV3L3N0eWxlcy9Nb2RhbC5jc3MiLCJ3ZWJwYWNrOi8vQHdvb3dhY291cnNlL2phdmFzY3JpcHQtbHVuY2gvLi9zcmMvdmlldy9zdHlsZXMvUmVzdGF1cmFudERldGFpbC5jc3MiLCJ3ZWJwYWNrOi8vQHdvb3dhY291cnNlL2phdmFzY3JpcHQtbHVuY2gvLi9zcmMvdmlldy9zdHlsZXMvUmVzdGF1cmFudEZvcm0uY3NzIiwid2VicGFjazovL0B3b293YWNvdXJzZS9qYXZhc2NyaXB0LWx1bmNoLy4vc3JjL3ZpZXcvc3R5bGVzL1Jlc3RhdXJhbnRMaXN0LmNzcyIsIndlYnBhY2s6Ly9Ad29vd2Fjb3Vyc2UvamF2YXNjcmlwdC1sdW5jaC8uL3NyYy92aWV3L3N0eWxlcy9TZWxlY3QuY3NzIiwid2VicGFjazovL0B3b293YWNvdXJzZS9qYXZhc2NyaXB0LWx1bmNoLy4vc3JjL3ZpZXcvc3R5bGVzL1RhYi5jc3MiLCJ3ZWJwYWNrOi8vQHdvb3dhY291cnNlL2phdmFzY3JpcHQtbHVuY2gvLi9zcmMvdmlldy9zdHlsZXMvZ2xvYmFsLmNzcyIsIndlYnBhY2s6Ly9Ad29vd2Fjb3Vyc2UvamF2YXNjcmlwdC1sdW5jaC8uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanMiLCJ3ZWJwYWNrOi8vQHdvb3dhY291cnNlL2phdmFzY3JpcHQtbHVuY2gvLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvc291cmNlTWFwcy5qcyIsIndlYnBhY2s6Ly9Ad29vd2Fjb3Vyc2UvamF2YXNjcmlwdC1sdW5jaC8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luamVjdFN0eWxlc0ludG9TdHlsZVRhZy5qcyIsIndlYnBhY2s6Ly9Ad29vd2Fjb3Vyc2UvamF2YXNjcmlwdC1sdW5jaC8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydEJ5U2VsZWN0b3IuanMiLCJ3ZWJwYWNrOi8vQHdvb3dhY291cnNlL2phdmFzY3JpcHQtbHVuY2gvLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRTdHlsZUVsZW1lbnQuanMiLCJ3ZWJwYWNrOi8vQHdvb3dhY291cnNlL2phdmFzY3JpcHQtbHVuY2gvLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zZXRBdHRyaWJ1dGVzV2l0aG91dEF0dHJpYnV0ZXMuanMiLCJ3ZWJwYWNrOi8vQHdvb3dhY291cnNlL2phdmFzY3JpcHQtbHVuY2gvLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZURvbUFQSS5qcyIsIndlYnBhY2s6Ly9Ad29vd2Fjb3Vyc2UvamF2YXNjcmlwdC1sdW5jaC8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlVGFnVHJhbnNmb3JtLmpzIiwid2VicGFjazovL0B3b293YWNvdXJzZS9qYXZhc2NyaXB0LWx1bmNoL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL0B3b293YWNvdXJzZS9qYXZhc2NyaXB0LWx1bmNoL3dlYnBhY2svcnVudGltZS9jb21wYXQgZ2V0IGRlZmF1bHQgZXhwb3J0Iiwid2VicGFjazovL0B3b293YWNvdXJzZS9qYXZhc2NyaXB0LWx1bmNoL3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly9Ad29vd2Fjb3Vyc2UvamF2YXNjcmlwdC1sdW5jaC93ZWJwYWNrL3J1bnRpbWUvZ2xvYmFsIiwid2VicGFjazovL0B3b293YWNvdXJzZS9qYXZhc2NyaXB0LWx1bmNoL3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vQHdvb3dhY291cnNlL2phdmFzY3JpcHQtbHVuY2gvd2VicGFjay9ydW50aW1lL3B1YmxpY1BhdGgiLCJ3ZWJwYWNrOi8vQHdvb3dhY291cnNlL2phdmFzY3JpcHQtbHVuY2gvd2VicGFjay9ydW50aW1lL25vbmNlIiwid2VicGFjazovL0B3b293YWNvdXJzZS9qYXZhc2NyaXB0LWx1bmNoLy4vc3JjL2RvbWFpbi9SZXN0YXVyYW50TWFuYWdlci50cyIsIndlYnBhY2s6Ly9Ad29vd2Fjb3Vyc2UvamF2YXNjcmlwdC1sdW5jaC8uL3NyYy92aWV3L1dlYlZpZXcuanMiLCJ3ZWJwYWNrOi8vQHdvb3dhY291cnNlL2phdmFzY3JpcHQtbHVuY2gvLi9zcmMvdmlldy9jb21wb25lbnRzL1Jlc3RhdXJhbnRGb3JtLmpzIiwid2VicGFjazovL0B3b293YWNvdXJzZS9qYXZhc2NyaXB0LWx1bmNoLy4vc3JjL3ZpZXcvY29tcG9uZW50cy9TZWxlY3QuanMiLCJ3ZWJwYWNrOi8vQHdvb3dhY291cnNlL2phdmFzY3JpcHQtbHVuY2gvLi9zcmMvdmlldy9jb21wb25lbnRzL1RhYi5qcyIsIndlYnBhY2s6Ly9Ad29vd2Fjb3Vyc2UvamF2YXNjcmlwdC1sdW5jaC8uL3NyYy9zZXJ2aWNlL1dlYkNvbnRyb2xsZXIuanMiLCJ3ZWJwYWNrOi8vQHdvb3dhY291cnNlL2phdmFzY3JpcHQtbHVuY2gvLi9zcmMvdmlldy9jb21wb25lbnRzL0dOQi5qcyIsIndlYnBhY2s6Ly9Ad29vd2Fjb3Vyc2UvamF2YXNjcmlwdC1sdW5jaC8uL3NyYy92aWV3L2NvbXBvbmVudHMvUmVzdGF1cmFudERldGFpbC5qcyIsIndlYnBhY2s6Ly9Ad29vd2Fjb3Vyc2UvamF2YXNjcmlwdC1sdW5jaC8uL3NyYy92aWV3L2NvbXBvbmVudHMvTW9kYWwuanMiLCJ3ZWJwYWNrOi8vQHdvb3dhY291cnNlL2phdmFzY3JpcHQtbHVuY2gvLi9zcmMvdmlldy9jb21wb25lbnRzL1Jlc3RhdXJhbnRJdGVtLmpzIiwid2VicGFjazovL0B3b293YWNvdXJzZS9qYXZhc2NyaXB0LWx1bmNoLy4vc3JjL3ZpZXcvY29tcG9uZW50cy9SZXN0YXVyYW50TGlzdC5qcyIsIndlYnBhY2s6Ly9Ad29vd2Fjb3Vyc2UvamF2YXNjcmlwdC1sdW5jaC8uL3NyYy92aWV3L3N0eWxlcy9nbG9iYWwuY3NzPzUwNzQiLCJ3ZWJwYWNrOi8vQHdvb3dhY291cnNlL2phdmFzY3JpcHQtbHVuY2gvLi9zcmMvdmlldy9zdHlsZXMvR25iLmNzcz82YzcwIiwid2VicGFjazovL0B3b293YWNvdXJzZS9qYXZhc2NyaXB0LWx1bmNoLy4vc3JjL3ZpZXcvc3R5bGVzL01vZGFsLmNzcz9kYjlhIiwid2VicGFjazovL0B3b293YWNvdXJzZS9qYXZhc2NyaXB0LWx1bmNoLy4vc3JjL3ZpZXcvc3R5bGVzL1NlbGVjdC5jc3M/NzA1ZSIsIndlYnBhY2s6Ly9Ad29vd2Fjb3Vyc2UvamF2YXNjcmlwdC1sdW5jaC8uL3NyYy92aWV3L3N0eWxlcy9SZXN0YXVyYW50Rm9ybS5jc3M/Nzc2ZCIsIndlYnBhY2s6Ly9Ad29vd2Fjb3Vyc2UvamF2YXNjcmlwdC1sdW5jaC8uL3NyYy92aWV3L3N0eWxlcy9SZXN0YXVyYW50TGlzdC5jc3M/MjMwZSIsIndlYnBhY2s6Ly9Ad29vd2Fjb3Vyc2UvamF2YXNjcmlwdC1sdW5jaC8uL3NyYy92aWV3L3N0eWxlcy9UYWIuY3NzPzQ2MmUiLCJ3ZWJwYWNrOi8vQHdvb3dhY291cnNlL2phdmFzY3JpcHQtbHVuY2gvLi9zcmMvdmlldy9zdHlsZXMvUmVzdGF1cmFudERldGFpbC5jc3M/NGI2ZSIsIndlYnBhY2s6Ly9Ad29vd2Fjb3Vyc2UvamF2YXNjcmlwdC1sdW5jaC8uL3NyYy92aWV3L2ltZ3MvYWRkLWJ1dHRvbi5wbmciLCJ3ZWJwYWNrOi8vQHdvb3dhY291cnNlL2phdmFzY3JpcHQtbHVuY2gvLi9zcmMvdmlldy9pbWdzL2NhdGVnb3J5LWtvcmVhbi5wbmciLCJ3ZWJwYWNrOi8vQHdvb3dhY291cnNlL2phdmFzY3JpcHQtbHVuY2gvLi9zcmMvdmlldy9pbWdzL2NhdGVnb3J5LWFzaWFuLnBuZyIsIndlYnBhY2s6Ly9Ad29vd2Fjb3Vyc2UvamF2YXNjcmlwdC1sdW5jaC8uL3NyYy92aWV3L2ltZ3MvY2F0ZWdvcnktY2hpbmVzZS5wbmciLCJ3ZWJwYWNrOi8vQHdvb3dhY291cnNlL2phdmFzY3JpcHQtbHVuY2gvLi9zcmMvdmlldy9pbWdzL2NhdGVnb3J5LWphcGFuZXNlLnBuZyIsIndlYnBhY2s6Ly9Ad29vd2Fjb3Vyc2UvamF2YXNjcmlwdC1sdW5jaC8uL3NyYy92aWV3L2ltZ3MvY2F0ZWdvcnktd2VzdGVybi5wbmciLCJ3ZWJwYWNrOi8vQHdvb3dhY291cnNlL2phdmFzY3JpcHQtbHVuY2gvLi9zcmMvdmlldy9pbWdzL2NhdGVnb3J5LWV0Yy5wbmciLCJ3ZWJwYWNrOi8vQHdvb3dhY291cnNlL2phdmFzY3JpcHQtbHVuY2gvLi9zcmMvdmlldy9pbWdzL2Zhdm9yaXRlLWljb24tZmlsbGVkLnBuZyIsIndlYnBhY2s6Ly9Ad29vd2Fjb3Vyc2UvamF2YXNjcmlwdC1sdW5jaC8uL3NyYy92aWV3L2ltZ3MvZmF2b3JpdGUtaWNvbi1saW5lZC5wbmciLCJ3ZWJwYWNrOi8vQHdvb3dhY291cnNlL2phdmFzY3JpcHQtbHVuY2gvLi9zcmMvaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9zb3VyY2VNYXBzLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgXCIuZ25iIHtcXHJcXG4gIGRpc3BsYXk6IGZsZXg7XFxyXFxuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XFxyXFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcclxcbiAgaGVpZ2h0OiA2NHB4O1xcclxcblxcclxcbiAgcGFkZGluZzogMCAxNnB4O1xcclxcbiAgbWFyZ2luLWJvdHRvbTogMzBweDtcXHJcXG5cXHJcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXByaW1hcnktY29sb3IpO1xcclxcbn1cXHJcXG5cXHJcXG4uZ25iX190aXRsZSB7XFxyXFxuICBjb2xvcjogI2ZjZmNmZDtcXHJcXG59XFxyXFxuXFxyXFxuLmduYl9fYnV0dG9uIHtcXHJcXG4gIGhlaWdodDogNDBweDtcXHJcXG5cXHJcXG4gIGJvcmRlcjogbm9uZTtcXHJcXG4gIGJvcmRlci1yYWRpdXM6IDhweDtcXHJcXG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcclxcblxcclxcbiAgZm9udC1zaXplOiAyNHB4O1xcclxcbiAgY3Vyc29yOiBwb2ludGVyO1xcclxcbn1cXHJcXG5cXHJcXG4uZ25iX19idXR0b24gaW1nIHtcXHJcXG4gIGRpc3BsYXk6IGJsb2NrO1xcclxcbiAgd2lkdGg6IDQwcHg7XFxyXFxuICBoZWlnaHQ6IDQwcHg7XFxyXFxuICBvYmplY3QtZml0OiBjb250YWluO1xcclxcbn1cXHJcXG5cIiwgXCJcIix7XCJ2ZXJzaW9uXCI6MyxcInNvdXJjZXNcIjpbXCJ3ZWJwYWNrOi8vLi9zcmMvdmlldy9zdHlsZXMvR25iLmNzc1wiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFBQTtFQUNFLGFBQWE7RUFDYiw4QkFBOEI7RUFDOUIsbUJBQW1CO0VBQ25CLFlBQVk7O0VBRVosZUFBZTtFQUNmLG1CQUFtQjs7RUFFbkIsc0NBQXNDO0FBQ3hDOztBQUVBO0VBQ0UsY0FBYztBQUNoQjs7QUFFQTtFQUNFLFlBQVk7O0VBRVosWUFBWTtFQUNaLGtCQUFrQjtFQUNsQix1QkFBdUI7O0VBRXZCLGVBQWU7RUFDZixlQUFlO0FBQ2pCOztBQUVBO0VBQ0UsY0FBYztFQUNkLFdBQVc7RUFDWCxZQUFZO0VBQ1osbUJBQW1CO0FBQ3JCXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIi5nbmIge1xcclxcbiAgZGlzcGxheTogZmxleDtcXHJcXG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcXHJcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxyXFxuICBoZWlnaHQ6IDY0cHg7XFxyXFxuXFxyXFxuICBwYWRkaW5nOiAwIDE2cHg7XFxyXFxuICBtYXJnaW4tYm90dG9tOiAzMHB4O1xcclxcblxcclxcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcHJpbWFyeS1jb2xvcik7XFxyXFxufVxcclxcblxcclxcbi5nbmJfX3RpdGxlIHtcXHJcXG4gIGNvbG9yOiAjZmNmY2ZkO1xcclxcbn1cXHJcXG5cXHJcXG4uZ25iX19idXR0b24ge1xcclxcbiAgaGVpZ2h0OiA0MHB4O1xcclxcblxcclxcbiAgYm9yZGVyOiBub25lO1xcclxcbiAgYm9yZGVyLXJhZGl1czogOHB4O1xcclxcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XFxyXFxuXFxyXFxuICBmb250LXNpemU6IDI0cHg7XFxyXFxuICBjdXJzb3I6IHBvaW50ZXI7XFxyXFxufVxcclxcblxcclxcbi5nbmJfX2J1dHRvbiBpbWcge1xcclxcbiAgZGlzcGxheTogYmxvY2s7XFxyXFxuICB3aWR0aDogNDBweDtcXHJcXG4gIGhlaWdodDogNDBweDtcXHJcXG4gIG9iamVjdC1maXQ6IGNvbnRhaW47XFxyXFxufVxcclxcblwiXSxcInNvdXJjZVJvb3RcIjpcIlwifV0pO1xuLy8gRXhwb3J0c1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iLCIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL3NvdXJjZU1hcHMuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBcImFwcC1tb2RhbCA+IGgyW3Nsb3Q9J3RpdGxlJ10ge1xcclxcbiAgbWFyZ2luLWJvdHRvbTogMzZweDtcXHJcXG59XFxyXFxuXFxyXFxuYXBwLW1vZGFsID4gZm9ybVtzbG90PSdib2R5J10ge1xcclxcbiAgaGVpZ2h0OiAxMDAlO1xcclxcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXHJcXG59XFxyXFxuXCIsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vc3JjL3ZpZXcvc3R5bGVzL01vZGFsLmNzc1wiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFBQTtFQUNFLG1CQUFtQjtBQUNyQjs7QUFFQTtFQUNFLFlBQVk7RUFDWixzQkFBc0I7QUFDeEJcIixcInNvdXJjZXNDb250ZW50XCI6W1wiYXBwLW1vZGFsID4gaDJbc2xvdD0ndGl0bGUnXSB7XFxyXFxuICBtYXJnaW4tYm90dG9tOiAzNnB4O1xcclxcbn1cXHJcXG5cXHJcXG5hcHAtbW9kYWwgPiBmb3JtW3Nsb3Q9J2JvZHknXSB7XFxyXFxuICBoZWlnaHQ6IDEwMCU7XFxyXFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcclxcbn1cXHJcXG5cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbmV4cG9ydCBkZWZhdWx0IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIiwiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9zb3VyY2VNYXBzLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgXCIuZGV0YWlsLWNvbnRhaW5lciB7XFxyXFxuICBkaXNwbGF5OiBmbGV4O1xcclxcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXHJcXG4gIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcXHJcXG5cXHJcXG4gIHotaW5kZXg6IDExMTtcXHJcXG59XFxyXFxuXFxyXFxuLnJlc3RhdXJhbnQtZGV0YWlsX19oZWFkZXIge1xcclxcbiAgZGlzcGxheTogZmxleDtcXHJcXG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XFxyXFxuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XFxyXFxuXFxyXFxuICBtYXJnaW4tYm90dG9tOiAxNnB4O1xcclxcbn1cXHJcXG5cXHJcXG4ucmVzdGF1cmFudC1kZXRhaWxfX2NhdGVnb3J5IHtcXHJcXG4gIGRpc3BsYXk6IGZsZXg7XFxyXFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXHJcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxyXFxuICB3aWR0aDogNjRweDtcXHJcXG4gIGhlaWdodDogNjRweDtcXHJcXG4gIG1pbi13aWR0aDogNjRweDtcXHJcXG4gIG1pbi1oZWlnaHQ6IDY0cHg7XFxyXFxuXFxyXFxuICBtYXJnaW4tcmlnaHQ6IDE2cHg7XFxyXFxuXFxyXFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxyXFxuICBiYWNrZ3JvdW5kOiB2YXIoLS1saWdodGVuLWNvbG9yKTtcXHJcXG59XFxyXFxuXFxyXFxuLnJlc3RhdXJhbnQtZGV0YWlsX19mYXZvcml0ZS1idXR0b24ge1xcclxcbiAgd2lkdGg6IDMycHg7XFxyXFxuICBoZWlnaHQ6IDMycHg7XFxyXFxuXFxyXFxuICBib3JkZXI6IG5vbmU7XFxyXFxuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcXHJcXG5cXHJcXG4gIG1hcmdpbi1yaWdodDogMDtcXHJcXG5cXHJcXG4gIGN1cnNvcjogcG9pbnRlcjtcXHJcXG59XFxyXFxuXFxyXFxuLnJlc3RhdXJhbnQtZGV0YWlsX19ib2R5IHtcXHJcXG4gIGRpc3BsYXk6IGZsZXg7XFxyXFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcclxcbn1cXHJcXG5cXHJcXG4ucmVzdGF1cmFudC1kZXRhaWxfX25hbWUge1xcclxcbiAgbWFyZ2luLWJvdHRvbTogMTZweDtcXHJcXG59XFxyXFxuXFxyXFxuLnJlc3RhdXJhbnQtZGV0YWlsX19kaXN0YW5jZSB7XFxyXFxuICBtYXJnaW4tYm90dG9tOiAxNnB4O1xcclxcbn1cXHJcXG5cXHJcXG4ucmVzdGF1cmFudC1kZXRhaWxfX2Rlc2NyaXB0aW9uIHtcXHJcXG4gIGhlaWdodDogMzAwcHg7XFxyXFxuICBtYXJnaW4tYm90dG9tOiAxNnB4O1xcclxcbn1cXHJcXG5cXHJcXG4ucmVzdGF1cmFudC1kZXRhaWxfX2xpbmsge1xcclxcbiAgbWFyZ2luLWJvdHRvbTogMTZweDtcXHJcXG59XFxyXFxuXFxyXFxuLmJ1dHRvbi1jb250YWluZXIge1xcclxcbiAgZGlzcGxheTogZmxleDtcXHJcXG59XFxyXFxuXFxyXFxuLmJ1dHRvbiB7XFxyXFxuICB3aWR0aDogMTAwJTtcXHJcXG4gIGhlaWdodDogNDRweDtcXHJcXG5cXHJcXG4gIG1hcmdpbi1yaWdodDogMTZweDtcXHJcXG5cXHJcXG4gIGJvcmRlcjogbm9uZTtcXHJcXG4gIGJvcmRlci1yYWRpdXM6IDhweDtcXHJcXG5cXHJcXG4gIGZvbnQtd2VpZ2h0OiA2MDA7XFxyXFxuICBjdXJzb3I6IHBvaW50ZXI7XFxyXFxufVxcclxcblxcclxcbi5idXR0b246bGFzdC1jaGlsZCB7XFxyXFxuICBtYXJnaW4tcmlnaHQ6IDA7XFxyXFxufVxcclxcblxcclxcbi5idXR0b24tLXNlY29uZGFyeSB7XFxyXFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ncmV5LTMwMCk7XFxyXFxuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcXHJcXG5cXHJcXG4gIGNvbG9yOiB2YXIoLS1ncmV5LTMwMCk7XFxyXFxufVxcclxcblxcclxcbi5idXR0b24tLXByaW1hcnkge1xcclxcbiAgYmFja2dyb3VuZDogdmFyKC0tcHJpbWFyeS1jb2xvcik7XFxyXFxuXFxyXFxuICBjb2xvcjogdmFyKC0tZ3JleS0xMDApO1xcclxcbn1cXHJcXG5cIiwgXCJcIix7XCJ2ZXJzaW9uXCI6MyxcInNvdXJjZXNcIjpbXCJ3ZWJwYWNrOi8vLi9zcmMvdmlldy9zdHlsZXMvUmVzdGF1cmFudERldGFpbC5jc3NcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBQUE7RUFDRSxhQUFhO0VBQ2Isc0JBQXNCO0VBQ3RCLDJCQUEyQjs7RUFFM0IsWUFBWTtBQUNkOztBQUVBO0VBQ0UsYUFBYTtFQUNiLG1CQUFtQjtFQUNuQiw4QkFBOEI7O0VBRTlCLG1CQUFtQjtBQUNyQjs7QUFFQTtFQUNFLGFBQWE7RUFDYix1QkFBdUI7RUFDdkIsbUJBQW1CO0VBQ25CLFdBQVc7RUFDWCxZQUFZO0VBQ1osZUFBZTtFQUNmLGdCQUFnQjs7RUFFaEIsa0JBQWtCOztFQUVsQixrQkFBa0I7RUFDbEIsZ0NBQWdDO0FBQ2xDOztBQUVBO0VBQ0UsV0FBVztFQUNYLFlBQVk7O0VBRVosWUFBWTtFQUNaLHVCQUF1Qjs7RUFFdkIsZUFBZTs7RUFFZixlQUFlO0FBQ2pCOztBQUVBO0VBQ0UsYUFBYTtFQUNiLHNCQUFzQjtBQUN4Qjs7QUFFQTtFQUNFLG1CQUFtQjtBQUNyQjs7QUFFQTtFQUNFLG1CQUFtQjtBQUNyQjs7QUFFQTtFQUNFLGFBQWE7RUFDYixtQkFBbUI7QUFDckI7O0FBRUE7RUFDRSxtQkFBbUI7QUFDckI7O0FBRUE7RUFDRSxhQUFhO0FBQ2Y7O0FBRUE7RUFDRSxXQUFXO0VBQ1gsWUFBWTs7RUFFWixrQkFBa0I7O0VBRWxCLFlBQVk7RUFDWixrQkFBa0I7O0VBRWxCLGdCQUFnQjtFQUNoQixlQUFlO0FBQ2pCOztBQUVBO0VBQ0UsZUFBZTtBQUNqQjs7QUFFQTtFQUNFLGlDQUFpQztFQUNqQyx1QkFBdUI7O0VBRXZCLHNCQUFzQjtBQUN4Qjs7QUFFQTtFQUNFLGdDQUFnQzs7RUFFaEMsc0JBQXNCO0FBQ3hCXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIi5kZXRhaWwtY29udGFpbmVyIHtcXHJcXG4gIGRpc3BsYXk6IGZsZXg7XFxyXFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcclxcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xcclxcblxcclxcbiAgei1pbmRleDogMTExO1xcclxcbn1cXHJcXG5cXHJcXG4ucmVzdGF1cmFudC1kZXRhaWxfX2hlYWRlciB7XFxyXFxuICBkaXNwbGF5OiBmbGV4O1xcclxcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcXHJcXG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcXHJcXG5cXHJcXG4gIG1hcmdpbi1ib3R0b206IDE2cHg7XFxyXFxufVxcclxcblxcclxcbi5yZXN0YXVyYW50LWRldGFpbF9fY2F0ZWdvcnkge1xcclxcbiAgZGlzcGxheTogZmxleDtcXHJcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcclxcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXHJcXG4gIHdpZHRoOiA2NHB4O1xcclxcbiAgaGVpZ2h0OiA2NHB4O1xcclxcbiAgbWluLXdpZHRoOiA2NHB4O1xcclxcbiAgbWluLWhlaWdodDogNjRweDtcXHJcXG5cXHJcXG4gIG1hcmdpbi1yaWdodDogMTZweDtcXHJcXG5cXHJcXG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcXHJcXG4gIGJhY2tncm91bmQ6IHZhcigtLWxpZ2h0ZW4tY29sb3IpO1xcclxcbn1cXHJcXG5cXHJcXG4ucmVzdGF1cmFudC1kZXRhaWxfX2Zhdm9yaXRlLWJ1dHRvbiB7XFxyXFxuICB3aWR0aDogMzJweDtcXHJcXG4gIGhlaWdodDogMzJweDtcXHJcXG5cXHJcXG4gIGJvcmRlcjogbm9uZTtcXHJcXG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcclxcblxcclxcbiAgbWFyZ2luLXJpZ2h0OiAwO1xcclxcblxcclxcbiAgY3Vyc29yOiBwb2ludGVyO1xcclxcbn1cXHJcXG5cXHJcXG4ucmVzdGF1cmFudC1kZXRhaWxfX2JvZHkge1xcclxcbiAgZGlzcGxheTogZmxleDtcXHJcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxyXFxufVxcclxcblxcclxcbi5yZXN0YXVyYW50LWRldGFpbF9fbmFtZSB7XFxyXFxuICBtYXJnaW4tYm90dG9tOiAxNnB4O1xcclxcbn1cXHJcXG5cXHJcXG4ucmVzdGF1cmFudC1kZXRhaWxfX2Rpc3RhbmNlIHtcXHJcXG4gIG1hcmdpbi1ib3R0b206IDE2cHg7XFxyXFxufVxcclxcblxcclxcbi5yZXN0YXVyYW50LWRldGFpbF9fZGVzY3JpcHRpb24ge1xcclxcbiAgaGVpZ2h0OiAzMDBweDtcXHJcXG4gIG1hcmdpbi1ib3R0b206IDE2cHg7XFxyXFxufVxcclxcblxcclxcbi5yZXN0YXVyYW50LWRldGFpbF9fbGluayB7XFxyXFxuICBtYXJnaW4tYm90dG9tOiAxNnB4O1xcclxcbn1cXHJcXG5cXHJcXG4uYnV0dG9uLWNvbnRhaW5lciB7XFxyXFxuICBkaXNwbGF5OiBmbGV4O1xcclxcbn1cXHJcXG5cXHJcXG4uYnV0dG9uIHtcXHJcXG4gIHdpZHRoOiAxMDAlO1xcclxcbiAgaGVpZ2h0OiA0NHB4O1xcclxcblxcclxcbiAgbWFyZ2luLXJpZ2h0OiAxNnB4O1xcclxcblxcclxcbiAgYm9yZGVyOiBub25lO1xcclxcbiAgYm9yZGVyLXJhZGl1czogOHB4O1xcclxcblxcclxcbiAgZm9udC13ZWlnaHQ6IDYwMDtcXHJcXG4gIGN1cnNvcjogcG9pbnRlcjtcXHJcXG59XFxyXFxuXFxyXFxuLmJ1dHRvbjpsYXN0LWNoaWxkIHtcXHJcXG4gIG1hcmdpbi1yaWdodDogMDtcXHJcXG59XFxyXFxuXFxyXFxuLmJ1dHRvbi0tc2Vjb25kYXJ5IHtcXHJcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWdyZXktMzAwKTtcXHJcXG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcclxcblxcclxcbiAgY29sb3I6IHZhcigtLWdyZXktMzAwKTtcXHJcXG59XFxyXFxuXFxyXFxuLmJ1dHRvbi0tcHJpbWFyeSB7XFxyXFxuICBiYWNrZ3JvdW5kOiB2YXIoLS1wcmltYXJ5LWNvbG9yKTtcXHJcXG5cXHJcXG4gIGNvbG9yOiB2YXIoLS1ncmV5LTEwMCk7XFxyXFxufVxcclxcblwiXSxcInNvdXJjZVJvb3RcIjpcIlwifV0pO1xuLy8gRXhwb3J0c1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iLCIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL3NvdXJjZU1hcHMuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBcIi5pbnB1dC1jb250YWluZXIge1xcclxcbiAgaGVpZ2h0OiA4NSU7XFxyXFxuICBvdmVyZmxvdy15OiBzY3JvbGw7XFxyXFxuXFxyXFxuICBtYXJnaW4tYm90dG9tOiAxMHB4O1xcclxcbn1cXHJcXG5cXHJcXG4uZm9ybS1pdGVtIHtcXHJcXG4gIGRpc3BsYXk6IGZsZXg7XFxyXFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcclxcblxcclxcbiAgbWFyZ2luLWJvdHRvbTogMzZweDtcXHJcXG59XFxyXFxuXFxyXFxuLmZvcm0taXRlbSBsYWJlbCB7XFxyXFxuICBjb2xvcjogdmFyKC0tZ3JleS00MDApO1xcclxcbiAgZm9udC1zaXplOiAxNHB4O1xcclxcbn1cXHJcXG5cXHJcXG4uZm9ybS1pdGVtLS1yZXF1aXJlZCBsYWJlbDo6YWZ0ZXIge1xcclxcbiAgcGFkZGluZy1sZWZ0OiA0cHg7XFxyXFxuXFxyXFxuICBjb2xvcjogdmFyKC0tcHJpbWFyeS1jb2xvcik7XFxyXFxuICBjb250ZW50OiAnKic7XFxyXFxufVxcclxcblxcclxcbi5mb3JtLWl0ZW0gLmhlbHAtdGV4dCB7XFxyXFxuICBjb2xvcjogdmFyKC0tZ3JleS0zMDApO1xcclxcbn1cXHJcXG5cXHJcXG4uZm9ybS1pdGVtIGlucHV0LFxcclxcbi5mb3JtLWl0ZW0gdGV4dGFyZWEsXFxyXFxuLmZvcm0taXRlbSBzZWxlY3Qge1xcclxcbiAgcGFkZGluZzogOHB4O1xcclxcbiAgbWFyZ2luOiA2cHggMDtcXHJcXG5cXHJcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWdyZXktMjAwKTtcXHJcXG4gIGJvcmRlci1yYWRpdXM6IDhweDtcXHJcXG5cXHJcXG4gIGZvbnQtc2l6ZTogMTZweDtcXHJcXG59XFxyXFxuXFxyXFxuLmZvcm0taXRlbSB0ZXh0YXJlYSB7XFxyXFxuICByZXNpemU6IG5vbmU7XFxyXFxufVxcclxcblxcclxcbi5mb3JtLWl0ZW0gc2VsZWN0IHtcXHJcXG4gIGhlaWdodDogNDRweDtcXHJcXG5cXHJcXG4gIHBhZGRpbmc6IDhweDtcXHJcXG5cXHJcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWdyZXktMjAwKTtcXHJcXG4gIGJvcmRlci1yYWRpdXM6IDhweDtcXHJcXG5cXHJcXG4gIGNvbG9yOiB2YXIoLS1ncmV5LTMwMCk7XFxyXFxufVxcclxcblxcclxcbmlucHV0W25hbWU9J25hbWUnXSxcXHJcXG5pbnB1dFtuYW1lPSdsaW5rJ10ge1xcclxcbiAgaGVpZ2h0OiA0NHB4O1xcclxcbn1cXHJcXG5cXHJcXG4uYnV0dG9uLWNvbnRhaW5lciB7XFxyXFxuICBkaXNwbGF5OiBmbGV4O1xcclxcbn1cXHJcXG5cXHJcXG4uYnV0dG9uIHtcXHJcXG4gIHdpZHRoOiAxMDAlO1xcclxcbiAgaGVpZ2h0OiA0NHB4O1xcclxcblxcclxcbiAgbWFyZ2luLXJpZ2h0OiAxNnB4O1xcclxcblxcclxcbiAgYm9yZGVyOiBub25lO1xcclxcbiAgYm9yZGVyLXJhZGl1czogOHB4O1xcclxcblxcclxcbiAgZm9udC13ZWlnaHQ6IDYwMDtcXHJcXG4gIGN1cnNvcjogcG9pbnRlcjtcXHJcXG59XFxyXFxuXFxyXFxuLmJ1dHRvbjpsYXN0LWNoaWxkIHtcXHJcXG4gIG1hcmdpbi1yaWdodDogMDtcXHJcXG59XFxyXFxuXFxyXFxuLmJ1dHRvbi0tc2Vjb25kYXJ5IHtcXHJcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWdyZXktMzAwKTtcXHJcXG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcclxcblxcclxcbiAgY29sb3I6IHZhcigtLWdyZXktMzAwKTtcXHJcXG59XFxyXFxuXFxyXFxuLmJ1dHRvbi0tcHJpbWFyeSB7XFxyXFxuICBiYWNrZ3JvdW5kOiB2YXIoLS1wcmltYXJ5LWNvbG9yKTtcXHJcXG5cXHJcXG4gIGNvbG9yOiB2YXIoLS1ncmV5LTEwMCk7XFxyXFxufVxcclxcblwiLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly8uL3NyYy92aWV3L3N0eWxlcy9SZXN0YXVyYW50Rm9ybS5jc3NcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBQUE7RUFDRSxXQUFXO0VBQ1gsa0JBQWtCOztFQUVsQixtQkFBbUI7QUFDckI7O0FBRUE7RUFDRSxhQUFhO0VBQ2Isc0JBQXNCOztFQUV0QixtQkFBbUI7QUFDckI7O0FBRUE7RUFDRSxzQkFBc0I7RUFDdEIsZUFBZTtBQUNqQjs7QUFFQTtFQUNFLGlCQUFpQjs7RUFFakIsMkJBQTJCO0VBQzNCLFlBQVk7QUFDZDs7QUFFQTtFQUNFLHNCQUFzQjtBQUN4Qjs7QUFFQTs7O0VBR0UsWUFBWTtFQUNaLGFBQWE7O0VBRWIsaUNBQWlDO0VBQ2pDLGtCQUFrQjs7RUFFbEIsZUFBZTtBQUNqQjs7QUFFQTtFQUNFLFlBQVk7QUFDZDs7QUFFQTtFQUNFLFlBQVk7O0VBRVosWUFBWTs7RUFFWixpQ0FBaUM7RUFDakMsa0JBQWtCOztFQUVsQixzQkFBc0I7QUFDeEI7O0FBRUE7O0VBRUUsWUFBWTtBQUNkOztBQUVBO0VBQ0UsYUFBYTtBQUNmOztBQUVBO0VBQ0UsV0FBVztFQUNYLFlBQVk7O0VBRVosa0JBQWtCOztFQUVsQixZQUFZO0VBQ1osa0JBQWtCOztFQUVsQixnQkFBZ0I7RUFDaEIsZUFBZTtBQUNqQjs7QUFFQTtFQUNFLGVBQWU7QUFDakI7O0FBRUE7RUFDRSxpQ0FBaUM7RUFDakMsdUJBQXVCOztFQUV2QixzQkFBc0I7QUFDeEI7O0FBRUE7RUFDRSxnQ0FBZ0M7O0VBRWhDLHNCQUFzQjtBQUN4QlwiLFwic291cmNlc0NvbnRlbnRcIjpbXCIuaW5wdXQtY29udGFpbmVyIHtcXHJcXG4gIGhlaWdodDogODUlO1xcclxcbiAgb3ZlcmZsb3cteTogc2Nyb2xsO1xcclxcblxcclxcbiAgbWFyZ2luLWJvdHRvbTogMTBweDtcXHJcXG59XFxyXFxuXFxyXFxuLmZvcm0taXRlbSB7XFxyXFxuICBkaXNwbGF5OiBmbGV4O1xcclxcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXHJcXG5cXHJcXG4gIG1hcmdpbi1ib3R0b206IDM2cHg7XFxyXFxufVxcclxcblxcclxcbi5mb3JtLWl0ZW0gbGFiZWwge1xcclxcbiAgY29sb3I6IHZhcigtLWdyZXktNDAwKTtcXHJcXG4gIGZvbnQtc2l6ZTogMTRweDtcXHJcXG59XFxyXFxuXFxyXFxuLmZvcm0taXRlbS0tcmVxdWlyZWQgbGFiZWw6OmFmdGVyIHtcXHJcXG4gIHBhZGRpbmctbGVmdDogNHB4O1xcclxcblxcclxcbiAgY29sb3I6IHZhcigtLXByaW1hcnktY29sb3IpO1xcclxcbiAgY29udGVudDogJyonO1xcclxcbn1cXHJcXG5cXHJcXG4uZm9ybS1pdGVtIC5oZWxwLXRleHQge1xcclxcbiAgY29sb3I6IHZhcigtLWdyZXktMzAwKTtcXHJcXG59XFxyXFxuXFxyXFxuLmZvcm0taXRlbSBpbnB1dCxcXHJcXG4uZm9ybS1pdGVtIHRleHRhcmVhLFxcclxcbi5mb3JtLWl0ZW0gc2VsZWN0IHtcXHJcXG4gIHBhZGRpbmc6IDhweDtcXHJcXG4gIG1hcmdpbjogNnB4IDA7XFxyXFxuXFxyXFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ncmV5LTIwMCk7XFxyXFxuICBib3JkZXItcmFkaXVzOiA4cHg7XFxyXFxuXFxyXFxuICBmb250LXNpemU6IDE2cHg7XFxyXFxufVxcclxcblxcclxcbi5mb3JtLWl0ZW0gdGV4dGFyZWEge1xcclxcbiAgcmVzaXplOiBub25lO1xcclxcbn1cXHJcXG5cXHJcXG4uZm9ybS1pdGVtIHNlbGVjdCB7XFxyXFxuICBoZWlnaHQ6IDQ0cHg7XFxyXFxuXFxyXFxuICBwYWRkaW5nOiA4cHg7XFxyXFxuXFxyXFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ncmV5LTIwMCk7XFxyXFxuICBib3JkZXItcmFkaXVzOiA4cHg7XFxyXFxuXFxyXFxuICBjb2xvcjogdmFyKC0tZ3JleS0zMDApO1xcclxcbn1cXHJcXG5cXHJcXG5pbnB1dFtuYW1lPSduYW1lJ10sXFxyXFxuaW5wdXRbbmFtZT0nbGluayddIHtcXHJcXG4gIGhlaWdodDogNDRweDtcXHJcXG59XFxyXFxuXFxyXFxuLmJ1dHRvbi1jb250YWluZXIge1xcclxcbiAgZGlzcGxheTogZmxleDtcXHJcXG59XFxyXFxuXFxyXFxuLmJ1dHRvbiB7XFxyXFxuICB3aWR0aDogMTAwJTtcXHJcXG4gIGhlaWdodDogNDRweDtcXHJcXG5cXHJcXG4gIG1hcmdpbi1yaWdodDogMTZweDtcXHJcXG5cXHJcXG4gIGJvcmRlcjogbm9uZTtcXHJcXG4gIGJvcmRlci1yYWRpdXM6IDhweDtcXHJcXG5cXHJcXG4gIGZvbnQtd2VpZ2h0OiA2MDA7XFxyXFxuICBjdXJzb3I6IHBvaW50ZXI7XFxyXFxufVxcclxcblxcclxcbi5idXR0b246bGFzdC1jaGlsZCB7XFxyXFxuICBtYXJnaW4tcmlnaHQ6IDA7XFxyXFxufVxcclxcblxcclxcbi5idXR0b24tLXNlY29uZGFyeSB7XFxyXFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ncmV5LTMwMCk7XFxyXFxuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcXHJcXG5cXHJcXG4gIGNvbG9yOiB2YXIoLS1ncmV5LTMwMCk7XFxyXFxufVxcclxcblxcclxcbi5idXR0b24tLXByaW1hcnkge1xcclxcbiAgYmFja2dyb3VuZDogdmFyKC0tcHJpbWFyeS1jb2xvcik7XFxyXFxuXFxyXFxuICBjb2xvcjogdmFyKC0tZ3JleS0xMDApO1xcclxcbn1cXHJcXG5cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbmV4cG9ydCBkZWZhdWx0IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIiwiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9zb3VyY2VNYXBzLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgXCIucmVzdGF1cmFudC1saXN0LWNvbnRhaW5lciB7XFxyXFxuICBkaXNwbGF5OiBmbGV4O1xcclxcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXHJcXG5cXHJcXG4gIHBhZGRpbmc6IDAgMTZweDtcXHJcXG4gIG1hcmdpbjogMTZweCAwO1xcclxcbn1cXHJcXG5cXHJcXG4ucmVzdGF1cmFudCB7XFxyXFxuICBkaXNwbGF5OiBmbGV4O1xcclxcbiAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XFxyXFxuXFxyXFxuICBwYWRkaW5nOiAxNnB4IDhweDtcXHJcXG5cXHJcXG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZTllYWVkO1xcclxcblxcclxcbiAgY3Vyc29yOiBwb2ludGVyO1xcclxcbn1cXHJcXG5cXHJcXG4ucmVzdGF1cmFudF9fY2F0ZWdvcnkge1xcclxcbiAgZGlzcGxheTogZmxleDtcXHJcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcclxcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXHJcXG4gIHdpZHRoOiA2NHB4O1xcclxcbiAgaGVpZ2h0OiA2NHB4O1xcclxcbiAgbWluLXdpZHRoOiA2NHB4O1xcclxcbiAgbWluLWhlaWdodDogNjRweDtcXHJcXG5cXHJcXG4gIG1hcmdpbi1yaWdodDogMTZweDtcXHJcXG5cXHJcXG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcXHJcXG4gIGJhY2tncm91bmQ6IHZhcigtLWxpZ2h0ZW4tY29sb3IpO1xcclxcbn1cXHJcXG5cXHJcXG4uY2F0ZWdvcnktaWNvbiB7XFxyXFxuICB3aWR0aDogMzZweDtcXHJcXG4gIGhlaWdodDogMzZweDtcXHJcXG59XFxyXFxuXFxyXFxuLnJlc3RhdXJhbnRfX2luZm8ge1xcclxcbiAgZGlzcGxheTogZmxleDtcXHJcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxyXFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XFxyXFxuICB3aWR0aDogMTAwJTtcXHJcXG59XFxyXFxuXFxyXFxuLnJlc3RhdXJhbnRfX2hlYWRlciB7XFxyXFxuICBkaXNwbGF5OiBmbGV4O1xcclxcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xcclxcbiAgd2lkdGg6IDEwMCU7XFxyXFxufVxcclxcblxcclxcbi5yZXN0YXVyYW50X19uYW1lIHtcXHJcXG4gIG1hcmdpbjogMDtcXHJcXG59XFxyXFxuXFxyXFxuLnJlc3RhdXJhbnRfX2Rpc3RhbmNlIHtcXHJcXG4gIGNvbG9yOiB2YXIoLS1wcmltYXJ5LWNvbG9yKTtcXHJcXG59XFxyXFxuXFxyXFxuLnJlc3RhdXJhbnRfX2Zhdm9yaXRlLWJ1dHRvbiB7XFxyXFxuICB3aWR0aDogMzJweDtcXHJcXG4gIGhlaWdodDogMzJweDtcXHJcXG5cXHJcXG4gIGJvcmRlcjogbm9uZTtcXHJcXG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcclxcblxcclxcbiAgbWFyZ2luLXJpZ2h0OiAwO1xcclxcblxcclxcbiAgY3Vyc29yOiBwb2ludGVyO1xcclxcbn1cXHJcXG5cXHJcXG4ucmVzdGF1cmFudF9fZGVzY3JpcHRpb24ge1xcclxcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XFxyXFxuXFxyXFxuICBwYWRkaW5nLXRvcDogOHB4O1xcclxcblxcclxcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXHJcXG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xcclxcbiAgLXdlYmtpdC1saW5lLWNsYW1wOiAyO1xcclxcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcXHJcXG59XFxyXFxuXCIsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vc3JjL3ZpZXcvc3R5bGVzL1Jlc3RhdXJhbnRMaXN0LmNzc1wiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFBQTtFQUNFLGFBQWE7RUFDYixzQkFBc0I7O0VBRXRCLGVBQWU7RUFDZixjQUFjO0FBQ2hCOztBQUVBO0VBQ0UsYUFBYTtFQUNiLHVCQUF1Qjs7RUFFdkIsaUJBQWlCOztFQUVqQixnQ0FBZ0M7O0VBRWhDLGVBQWU7QUFDakI7O0FBRUE7RUFDRSxhQUFhO0VBQ2IsdUJBQXVCO0VBQ3ZCLG1CQUFtQjtFQUNuQixXQUFXO0VBQ1gsWUFBWTtFQUNaLGVBQWU7RUFDZixnQkFBZ0I7O0VBRWhCLGtCQUFrQjs7RUFFbEIsa0JBQWtCO0VBQ2xCLGdDQUFnQztBQUNsQzs7QUFFQTtFQUNFLFdBQVc7RUFDWCxZQUFZO0FBQ2Q7O0FBRUE7RUFDRSxhQUFhO0VBQ2Isc0JBQXNCO0VBQ3RCLDJCQUEyQjtFQUMzQixXQUFXO0FBQ2I7O0FBRUE7RUFDRSxhQUFhO0VBQ2IsOEJBQThCO0VBQzlCLFdBQVc7QUFDYjs7QUFFQTtFQUNFLFNBQVM7QUFDWDs7QUFFQTtFQUNFLDJCQUEyQjtBQUM3Qjs7QUFFQTtFQUNFLFdBQVc7RUFDWCxZQUFZOztFQUVaLFlBQVk7RUFDWix1QkFBdUI7O0VBRXZCLGVBQWU7O0VBRWYsZUFBZTtBQUNqQjs7QUFFQTtFQUNFLG9CQUFvQjs7RUFFcEIsZ0JBQWdCOztFQUVoQixnQkFBZ0I7RUFDaEIsdUJBQXVCO0VBQ3ZCLHFCQUFxQjtFQUNyQiw0QkFBNEI7QUFDOUJcIixcInNvdXJjZXNDb250ZW50XCI6W1wiLnJlc3RhdXJhbnQtbGlzdC1jb250YWluZXIge1xcclxcbiAgZGlzcGxheTogZmxleDtcXHJcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxyXFxuXFxyXFxuICBwYWRkaW5nOiAwIDE2cHg7XFxyXFxuICBtYXJnaW46IDE2cHggMDtcXHJcXG59XFxyXFxuXFxyXFxuLnJlc3RhdXJhbnQge1xcclxcbiAgZGlzcGxheTogZmxleDtcXHJcXG4gIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xcclxcblxcclxcbiAgcGFkZGluZzogMTZweCA4cHg7XFxyXFxuXFxyXFxuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2U5ZWFlZDtcXHJcXG5cXHJcXG4gIGN1cnNvcjogcG9pbnRlcjtcXHJcXG59XFxyXFxuXFxyXFxuLnJlc3RhdXJhbnRfX2NhdGVnb3J5IHtcXHJcXG4gIGRpc3BsYXk6IGZsZXg7XFxyXFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXHJcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxyXFxuICB3aWR0aDogNjRweDtcXHJcXG4gIGhlaWdodDogNjRweDtcXHJcXG4gIG1pbi13aWR0aDogNjRweDtcXHJcXG4gIG1pbi1oZWlnaHQ6IDY0cHg7XFxyXFxuXFxyXFxuICBtYXJnaW4tcmlnaHQ6IDE2cHg7XFxyXFxuXFxyXFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxyXFxuICBiYWNrZ3JvdW5kOiB2YXIoLS1saWdodGVuLWNvbG9yKTtcXHJcXG59XFxyXFxuXFxyXFxuLmNhdGVnb3J5LWljb24ge1xcclxcbiAgd2lkdGg6IDM2cHg7XFxyXFxuICBoZWlnaHQ6IDM2cHg7XFxyXFxufVxcclxcblxcclxcbi5yZXN0YXVyYW50X19pbmZvIHtcXHJcXG4gIGRpc3BsYXk6IGZsZXg7XFxyXFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcclxcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xcclxcbiAgd2lkdGg6IDEwMCU7XFxyXFxufVxcclxcblxcclxcbi5yZXN0YXVyYW50X19oZWFkZXIge1xcclxcbiAgZGlzcGxheTogZmxleDtcXHJcXG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcXHJcXG4gIHdpZHRoOiAxMDAlO1xcclxcbn1cXHJcXG5cXHJcXG4ucmVzdGF1cmFudF9fbmFtZSB7XFxyXFxuICBtYXJnaW46IDA7XFxyXFxufVxcclxcblxcclxcbi5yZXN0YXVyYW50X19kaXN0YW5jZSB7XFxyXFxuICBjb2xvcjogdmFyKC0tcHJpbWFyeS1jb2xvcik7XFxyXFxufVxcclxcblxcclxcbi5yZXN0YXVyYW50X19mYXZvcml0ZS1idXR0b24ge1xcclxcbiAgd2lkdGg6IDMycHg7XFxyXFxuICBoZWlnaHQ6IDMycHg7XFxyXFxuXFxyXFxuICBib3JkZXI6IG5vbmU7XFxyXFxuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcXHJcXG5cXHJcXG4gIG1hcmdpbi1yaWdodDogMDtcXHJcXG5cXHJcXG4gIGN1cnNvcjogcG9pbnRlcjtcXHJcXG59XFxyXFxuXFxyXFxuLnJlc3RhdXJhbnRfX2Rlc2NyaXB0aW9uIHtcXHJcXG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xcclxcblxcclxcbiAgcGFkZGluZy10b3A6IDhweDtcXHJcXG5cXHJcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxyXFxuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcXHJcXG4gIC13ZWJraXQtbGluZS1jbGFtcDogMjtcXHJcXG4gIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XFxyXFxufVxcclxcblwiXSxcInNvdXJjZVJvb3RcIjpcIlwifV0pO1xuLy8gRXhwb3J0c1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iLCIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL3NvdXJjZU1hcHMuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBcInNlbGVjdCB7XFxyXFxuICBwYWRkaW5nOiA4cHg7XFxyXFxuICBtYXJnaW46IDZweCAwO1xcclxcblxcclxcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tZ3JleS0yMDApO1xcclxcbiAgYm9yZGVyLXJhZGl1czogOHB4O1xcclxcblxcclxcbiAgZm9udC1zaXplOiAxNnB4O1xcclxcbn1cXHJcXG5cXHJcXG4ucmVzdGF1cmFudC1maWx0ZXItY29udGFpbmVyIHtcXHJcXG4gIGRpc3BsYXk6IGZsZXg7XFxyXFxuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XFxyXFxuXFxyXFxuICBwYWRkaW5nOiAwIDE2cHg7XFxyXFxuICBtYXJnaW4tdG9wOiAyNHB4O1xcclxcbn1cXHJcXG5cXHJcXG4ucmVzdGF1cmFudC1maWx0ZXItY29udGFpbmVyIHNlbGVjdCB7XFxyXFxuICBoZWlnaHQ6IDQ0cHg7XFxyXFxuICBtaW4td2lkdGg6IDEyNXB4O1xcclxcblxcclxcbiAgYm9yZGVyOiAxcHggc29saWQgI2QwZDVkZDtcXHJcXG4gIGJvcmRlci1yYWRpdXM6IDhweDtcXHJcXG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcclxcblxcclxcbiAgZm9udC1zaXplOiAxNnB4O1xcclxcbn1cXHJcXG5cXHJcXG4ucmVzdGF1cmFudC1maWx0ZXIge1xcclxcbiAgcGFkZGluZzogOHB4O1xcclxcbn1cXHJcXG5cIiwgXCJcIix7XCJ2ZXJzaW9uXCI6MyxcInNvdXJjZXNcIjpbXCJ3ZWJwYWNrOi8vLi9zcmMvdmlldy9zdHlsZXMvU2VsZWN0LmNzc1wiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFBQTtFQUNFLFlBQVk7RUFDWixhQUFhOztFQUViLGlDQUFpQztFQUNqQyxrQkFBa0I7O0VBRWxCLGVBQWU7QUFDakI7O0FBRUE7RUFDRSxhQUFhO0VBQ2IsOEJBQThCOztFQUU5QixlQUFlO0VBQ2YsZ0JBQWdCO0FBQ2xCOztBQUVBO0VBQ0UsWUFBWTtFQUNaLGdCQUFnQjs7RUFFaEIseUJBQXlCO0VBQ3pCLGtCQUFrQjtFQUNsQix1QkFBdUI7O0VBRXZCLGVBQWU7QUFDakI7O0FBRUE7RUFDRSxZQUFZO0FBQ2RcIixcInNvdXJjZXNDb250ZW50XCI6W1wic2VsZWN0IHtcXHJcXG4gIHBhZGRpbmc6IDhweDtcXHJcXG4gIG1hcmdpbjogNnB4IDA7XFxyXFxuXFxyXFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ncmV5LTIwMCk7XFxyXFxuICBib3JkZXItcmFkaXVzOiA4cHg7XFxyXFxuXFxyXFxuICBmb250LXNpemU6IDE2cHg7XFxyXFxufVxcclxcblxcclxcbi5yZXN0YXVyYW50LWZpbHRlci1jb250YWluZXIge1xcclxcbiAgZGlzcGxheTogZmxleDtcXHJcXG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcXHJcXG5cXHJcXG4gIHBhZGRpbmc6IDAgMTZweDtcXHJcXG4gIG1hcmdpbi10b3A6IDI0cHg7XFxyXFxufVxcclxcblxcclxcbi5yZXN0YXVyYW50LWZpbHRlci1jb250YWluZXIgc2VsZWN0IHtcXHJcXG4gIGhlaWdodDogNDRweDtcXHJcXG4gIG1pbi13aWR0aDogMTI1cHg7XFxyXFxuXFxyXFxuICBib3JkZXI6IDFweCBzb2xpZCAjZDBkNWRkO1xcclxcbiAgYm9yZGVyLXJhZGl1czogOHB4O1xcclxcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XFxyXFxuXFxyXFxuICBmb250LXNpemU6IDE2cHg7XFxyXFxufVxcclxcblxcclxcbi5yZXN0YXVyYW50LWZpbHRlciB7XFxyXFxuICBwYWRkaW5nOiA4cHg7XFxyXFxufVxcclxcblwiXSxcInNvdXJjZVJvb3RcIjpcIlwifV0pO1xuLy8gRXhwb3J0c1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iLCIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL3NvdXJjZU1hcHMuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBcImEge1xcclxcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xcclxcbiAgY29sb3I6IGluaGVyaXQ7XFxyXFxufVxcclxcblxcclxcbi50YWIge1xcclxcbiAgZGlzcGxheTogZmxleDtcXHJcXG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcXHJcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxyXFxuICBoZWlnaHQ6IDQycHg7XFxyXFxuXFxyXFxuICBwYWRkaW5nOiAwIDE2cHg7XFxyXFxuICBtYXJnaW4tYm90dG9tOiAzMHB4O1xcclxcblxcclxcbiAgY29sb3I6IHZhcigtLWdyZXktMzAwKTtcXHJcXG59XFxyXFxuXFxyXFxuLnRhYl9faXRlbSB7XFxyXFxuICBkaXNwbGF5OiBmbGV4O1xcclxcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxyXFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcclxcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcclxcbiAgd2lkdGg6IDUwJTtcXHJcXG5cXHJcXG4gIHBhZGRpbmc6IDEycHggMDtcXHJcXG5cXHJcXG4gIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCB2YXIoLS1ncmV5LTIwMCk7XFxyXFxufVxcclxcblxcclxcbi50YWJfX2l0ZW0uYWN0aXZlIHtcXHJcXG4gIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCB2YXIoLS1wcmltYXJ5LWNvbG9yKTtcXHJcXG4gIGNvbG9yOiB2YXIoLS1wcmltYXJ5LWNvbG9yKTtcXHJcXG59XFxyXFxuXCIsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vc3JjL3ZpZXcvc3R5bGVzL1RhYi5jc3NcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBQUE7RUFDRSxxQkFBcUI7RUFDckIsY0FBYztBQUNoQjs7QUFFQTtFQUNFLGFBQWE7RUFDYiw4QkFBOEI7RUFDOUIsbUJBQW1CO0VBQ25CLFlBQVk7O0VBRVosZUFBZTtFQUNmLG1CQUFtQjs7RUFFbkIsc0JBQXNCO0FBQ3hCOztBQUVBO0VBQ0UsYUFBYTtFQUNiLHVCQUF1QjtFQUN2QixtQkFBbUI7RUFDbkIsa0JBQWtCO0VBQ2xCLFVBQVU7O0VBRVYsZUFBZTs7RUFFZix3Q0FBd0M7QUFDMUM7O0FBRUE7RUFDRSw2Q0FBNkM7RUFDN0MsMkJBQTJCO0FBQzdCXCIsXCJzb3VyY2VzQ29udGVudFwiOltcImEge1xcclxcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xcclxcbiAgY29sb3I6IGluaGVyaXQ7XFxyXFxufVxcclxcblxcclxcbi50YWIge1xcclxcbiAgZGlzcGxheTogZmxleDtcXHJcXG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcXHJcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxyXFxuICBoZWlnaHQ6IDQycHg7XFxyXFxuXFxyXFxuICBwYWRkaW5nOiAwIDE2cHg7XFxyXFxuICBtYXJnaW4tYm90dG9tOiAzMHB4O1xcclxcblxcclxcbiAgY29sb3I6IHZhcigtLWdyZXktMzAwKTtcXHJcXG59XFxyXFxuXFxyXFxuLnRhYl9faXRlbSB7XFxyXFxuICBkaXNwbGF5OiBmbGV4O1xcclxcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxyXFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcclxcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcclxcbiAgd2lkdGg6IDUwJTtcXHJcXG5cXHJcXG4gIHBhZGRpbmc6IDEycHggMDtcXHJcXG5cXHJcXG4gIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCB2YXIoLS1ncmV5LTIwMCk7XFxyXFxufVxcclxcblxcclxcbi50YWJfX2l0ZW0uYWN0aXZlIHtcXHJcXG4gIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCB2YXIoLS1wcmltYXJ5LWNvbG9yKTtcXHJcXG4gIGNvbG9yOiB2YXIoLS1wcmltYXJ5LWNvbG9yKTtcXHJcXG59XFxyXFxuXCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiIsIi8vIEltcG9ydHNcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvc291cmNlTWFwcy5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiO1xudmFyIF9fX0NTU19MT0FERVJfRVhQT1JUX19fID0gX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18pO1xuLy8gTW9kdWxlXG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIFwiKiB7XFxyXFxuICBwYWRkaW5nOiAwO1xcclxcbiAgbWFyZ2luOiAwO1xcclxcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXHJcXG59XFxyXFxuXFxyXFxudWwsXFxyXFxubGkge1xcclxcbiAgbGlzdC1zdHlsZTogbm9uZTtcXHJcXG59XFxyXFxuXFxyXFxuaHRtbCxcXHJcXG5ib2R5IHtcXHJcXG4gIHdpZHRoOiAxMDAlO1xcclxcbiAgaGVpZ2h0OiAxMDAlO1xcclxcblxcclxcbiAgZm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7XFxyXFxuICBmb250LXNpemU6IDE2cHg7XFxyXFxufVxcclxcblxcclxcbi8qIENvbG9ycyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXHJcXG46cm9vdCB7XFxyXFxuICAtLXByaW1hcnktY29sb3I6ICNlYzRhMGE7XFxyXFxuICAtLWxpZ2h0ZW4tY29sb3I6ICNmNmE4OGE7XFxyXFxuICAtLWdyZXktMTAwOiAjZmZmZmZmO1xcclxcbiAgLS1ncmV5LTIwMDogI2QwZDVkZDtcXHJcXG4gIC0tZ3JleS0zMDA6ICM2NjcwODU7XFxyXFxuICAtLWdyZXktNDAwOiAjMzQ0MDU0O1xcclxcbiAgLS1ncmV5LTUwMDogIzAwMDAwMDtcXHJcXG59XFxyXFxuXFxyXFxuLyogVHlwb2dyYXBoeSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcclxcbi50ZXh0LXRpdGxlIHtcXHJcXG4gIGZvbnQtc2l6ZTogMjBweDtcXHJcXG4gIGxpbmUtaGVpZ2h0OiAyNHB4O1xcclxcbiAgZm9udC13ZWlnaHQ6IDYwMDtcXHJcXG59XFxyXFxuXFxyXFxuLnRleHQtc3VidGl0bGUge1xcclxcbiAgZm9udC1zaXplOiAxOHB4O1xcclxcbiAgbGluZS1oZWlnaHQ6IDI4cHg7XFxyXFxuICBmb250LXdlaWdodDogNjAwO1xcclxcbn1cXHJcXG5cXHJcXG4udGV4dC1ib2R5IHtcXHJcXG4gIGZvbnQtc2l6ZTogMTZweDtcXHJcXG4gIGxpbmUtaGVpZ2h0OiAyNHB4O1xcclxcbiAgZm9udC13ZWlnaHQ6IDQwMDtcXHJcXG59XFxyXFxuXFxyXFxuLnRleHQtY2FwdGlvbiB7XFxyXFxuICBmb250LXNpemU6IDE0cHg7XFxyXFxuICBsaW5lLWhlaWdodDogMjBweDtcXHJcXG4gIGZvbnQtd2VpZ2h0OiA0MDA7XFxyXFxufVxcclxcblwiLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly8uL3NyYy92aWV3L3N0eWxlcy9nbG9iYWwuY3NzXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQUFBO0VBQ0UsVUFBVTtFQUNWLFNBQVM7RUFDVCxzQkFBc0I7QUFDeEI7O0FBRUE7O0VBRUUsZ0JBQWdCO0FBQ2xCOztBQUVBOztFQUVFLFdBQVc7RUFDWCxZQUFZOztFQUVaLHVCQUF1QjtFQUN2QixlQUFlO0FBQ2pCOztBQUVBLG1EQUFtRDtBQUNuRDtFQUNFLHdCQUF3QjtFQUN4Qix3QkFBd0I7RUFDeEIsbUJBQW1CO0VBQ25CLG1CQUFtQjtFQUNuQixtQkFBbUI7RUFDbkIsbUJBQW1CO0VBQ25CLG1CQUFtQjtBQUNyQjs7QUFFQSxtREFBbUQ7QUFDbkQ7RUFDRSxlQUFlO0VBQ2YsaUJBQWlCO0VBQ2pCLGdCQUFnQjtBQUNsQjs7QUFFQTtFQUNFLGVBQWU7RUFDZixpQkFBaUI7RUFDakIsZ0JBQWdCO0FBQ2xCOztBQUVBO0VBQ0UsZUFBZTtFQUNmLGlCQUFpQjtFQUNqQixnQkFBZ0I7QUFDbEI7O0FBRUE7RUFDRSxlQUFlO0VBQ2YsaUJBQWlCO0VBQ2pCLGdCQUFnQjtBQUNsQlwiLFwic291cmNlc0NvbnRlbnRcIjpbXCIqIHtcXHJcXG4gIHBhZGRpbmc6IDA7XFxyXFxuICBtYXJnaW46IDA7XFxyXFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcclxcbn1cXHJcXG5cXHJcXG51bCxcXHJcXG5saSB7XFxyXFxuICBsaXN0LXN0eWxlOiBub25lO1xcclxcbn1cXHJcXG5cXHJcXG5odG1sLFxcclxcbmJvZHkge1xcclxcbiAgd2lkdGg6IDEwMCU7XFxyXFxuICBoZWlnaHQ6IDEwMCU7XFxyXFxuXFxyXFxuICBmb250LWZhbWlseTogc2Fucy1zZXJpZjtcXHJcXG4gIGZvbnQtc2l6ZTogMTZweDtcXHJcXG59XFxyXFxuXFxyXFxuLyogQ29sb3JzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcclxcbjpyb290IHtcXHJcXG4gIC0tcHJpbWFyeS1jb2xvcjogI2VjNGEwYTtcXHJcXG4gIC0tbGlnaHRlbi1jb2xvcjogI2Y2YTg4YTtcXHJcXG4gIC0tZ3JleS0xMDA6ICNmZmZmZmY7XFxyXFxuICAtLWdyZXktMjAwOiAjZDBkNWRkO1xcclxcbiAgLS1ncmV5LTMwMDogIzY2NzA4NTtcXHJcXG4gIC0tZ3JleS00MDA6ICMzNDQwNTQ7XFxyXFxuICAtLWdyZXktNTAwOiAjMDAwMDAwO1xcclxcbn1cXHJcXG5cXHJcXG4vKiBUeXBvZ3JhcGh5ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxyXFxuLnRleHQtdGl0bGUge1xcclxcbiAgZm9udC1zaXplOiAyMHB4O1xcclxcbiAgbGluZS1oZWlnaHQ6IDI0cHg7XFxyXFxuICBmb250LXdlaWdodDogNjAwO1xcclxcbn1cXHJcXG5cXHJcXG4udGV4dC1zdWJ0aXRsZSB7XFxyXFxuICBmb250LXNpemU6IDE4cHg7XFxyXFxuICBsaW5lLWhlaWdodDogMjhweDtcXHJcXG4gIGZvbnQtd2VpZ2h0OiA2MDA7XFxyXFxufVxcclxcblxcclxcbi50ZXh0LWJvZHkge1xcclxcbiAgZm9udC1zaXplOiAxNnB4O1xcclxcbiAgbGluZS1oZWlnaHQ6IDI0cHg7XFxyXFxuICBmb250LXdlaWdodDogNDAwO1xcclxcbn1cXHJcXG5cXHJcXG4udGV4dC1jYXB0aW9uIHtcXHJcXG4gIGZvbnQtc2l6ZTogMTRweDtcXHJcXG4gIGxpbmUtaGVpZ2h0OiAyMHB4O1xcclxcbiAgZm9udC13ZWlnaHQ6IDQwMDtcXHJcXG59XFxyXFxuXCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiIsIlwidXNlIHN0cmljdFwiO1xuXG4vKlxuICBNSVQgTGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocFxuICBBdXRob3IgVG9iaWFzIEtvcHBlcnMgQHNva3JhXG4qL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoY3NzV2l0aE1hcHBpbmdUb1N0cmluZykge1xuICB2YXIgbGlzdCA9IFtdO1xuXG4gIC8vIHJldHVybiB0aGUgbGlzdCBvZiBtb2R1bGVzIGFzIGNzcyBzdHJpbmdcbiAgbGlzdC50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgdmFyIGNvbnRlbnQgPSBcIlwiO1xuICAgICAgdmFyIG5lZWRMYXllciA9IHR5cGVvZiBpdGVtWzVdICE9PSBcInVuZGVmaW5lZFwiO1xuICAgICAgaWYgKGl0ZW1bNF0pIHtcbiAgICAgICAgY29udGVudCArPSBcIkBzdXBwb3J0cyAoXCIuY29uY2F0KGl0ZW1bNF0sIFwiKSB7XCIpO1xuICAgICAgfVxuICAgICAgaWYgKGl0ZW1bMl0pIHtcbiAgICAgICAgY29udGVudCArPSBcIkBtZWRpYSBcIi5jb25jYXQoaXRlbVsyXSwgXCIge1wiKTtcbiAgICAgIH1cbiAgICAgIGlmIChuZWVkTGF5ZXIpIHtcbiAgICAgICAgY29udGVudCArPSBcIkBsYXllclwiLmNvbmNhdChpdGVtWzVdLmxlbmd0aCA+IDAgPyBcIiBcIi5jb25jYXQoaXRlbVs1XSkgOiBcIlwiLCBcIiB7XCIpO1xuICAgICAgfVxuICAgICAgY29udGVudCArPSBjc3NXaXRoTWFwcGluZ1RvU3RyaW5nKGl0ZW0pO1xuICAgICAgaWYgKG5lZWRMYXllcikge1xuICAgICAgICBjb250ZW50ICs9IFwifVwiO1xuICAgICAgfVxuICAgICAgaWYgKGl0ZW1bMl0pIHtcbiAgICAgICAgY29udGVudCArPSBcIn1cIjtcbiAgICAgIH1cbiAgICAgIGlmIChpdGVtWzRdKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJ9XCI7XG4gICAgICB9XG4gICAgICByZXR1cm4gY29udGVudDtcbiAgICB9KS5qb2luKFwiXCIpO1xuICB9O1xuXG4gIC8vIGltcG9ydCBhIGxpc3Qgb2YgbW9kdWxlcyBpbnRvIHRoZSBsaXN0XG4gIGxpc3QuaSA9IGZ1bmN0aW9uIGkobW9kdWxlcywgbWVkaWEsIGRlZHVwZSwgc3VwcG9ydHMsIGxheWVyKSB7XG4gICAgaWYgKHR5cGVvZiBtb2R1bGVzID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBtb2R1bGVzID0gW1tudWxsLCBtb2R1bGVzLCB1bmRlZmluZWRdXTtcbiAgICB9XG4gICAgdmFyIGFscmVhZHlJbXBvcnRlZE1vZHVsZXMgPSB7fTtcbiAgICBpZiAoZGVkdXBlKSB7XG4gICAgICBmb3IgKHZhciBrID0gMDsgayA8IHRoaXMubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgdmFyIGlkID0gdGhpc1trXVswXTtcbiAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzW2lkXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZm9yICh2YXIgX2sgPSAwOyBfayA8IG1vZHVsZXMubGVuZ3RoOyBfaysrKSB7XG4gICAgICB2YXIgaXRlbSA9IFtdLmNvbmNhdChtb2R1bGVzW19rXSk7XG4gICAgICBpZiAoZGVkdXBlICYmIGFscmVhZHlJbXBvcnRlZE1vZHVsZXNbaXRlbVswXV0pIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIGxheWVyICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgaXRlbVs1XSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgIGl0ZW1bNV0gPSBsYXllcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpdGVtWzFdID0gXCJAbGF5ZXJcIi5jb25jYXQoaXRlbVs1XS5sZW5ndGggPiAwID8gXCIgXCIuY29uY2F0KGl0ZW1bNV0pIDogXCJcIiwgXCIge1wiKS5jb25jYXQoaXRlbVsxXSwgXCJ9XCIpO1xuICAgICAgICAgIGl0ZW1bNV0gPSBsYXllcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKG1lZGlhKSB7XG4gICAgICAgIGlmICghaXRlbVsyXSkge1xuICAgICAgICAgIGl0ZW1bMl0gPSBtZWRpYTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpdGVtWzFdID0gXCJAbWVkaWEgXCIuY29uY2F0KGl0ZW1bMl0sIFwiIHtcIikuY29uY2F0KGl0ZW1bMV0sIFwifVwiKTtcbiAgICAgICAgICBpdGVtWzJdID0gbWVkaWE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChzdXBwb3J0cykge1xuICAgICAgICBpZiAoIWl0ZW1bNF0pIHtcbiAgICAgICAgICBpdGVtWzRdID0gXCJcIi5jb25jYXQoc3VwcG9ydHMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGl0ZW1bMV0gPSBcIkBzdXBwb3J0cyAoXCIuY29uY2F0KGl0ZW1bNF0sIFwiKSB7XCIpLmNvbmNhdChpdGVtWzFdLCBcIn1cIik7XG4gICAgICAgICAgaXRlbVs0XSA9IHN1cHBvcnRzO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBsaXN0LnB1c2goaXRlbSk7XG4gICAgfVxuICB9O1xuICByZXR1cm4gbGlzdDtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZW0pIHtcbiAgdmFyIGNvbnRlbnQgPSBpdGVtWzFdO1xuICB2YXIgY3NzTWFwcGluZyA9IGl0ZW1bM107XG4gIGlmICghY3NzTWFwcGluZykge1xuICAgIHJldHVybiBjb250ZW50O1xuICB9XG4gIGlmICh0eXBlb2YgYnRvYSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgdmFyIGJhc2U2NCA9IGJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KGNzc01hcHBpbmcpKSkpO1xuICAgIHZhciBkYXRhID0gXCJzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxcIi5jb25jYXQoYmFzZTY0KTtcbiAgICB2YXIgc291cmNlTWFwcGluZyA9IFwiLyojIFwiLmNvbmNhdChkYXRhLCBcIiAqL1wiKTtcbiAgICByZXR1cm4gW2NvbnRlbnRdLmNvbmNhdChbc291cmNlTWFwcGluZ10pLmpvaW4oXCJcXG5cIik7XG4gIH1cbiAgcmV0dXJuIFtjb250ZW50XS5qb2luKFwiXFxuXCIpO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIHN0eWxlc0luRE9NID0gW107XG5cbmZ1bmN0aW9uIGdldEluZGV4QnlJZGVudGlmaWVyKGlkZW50aWZpZXIpIHtcbiAgdmFyIHJlc3VsdCA9IC0xO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGVzSW5ET00ubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoc3R5bGVzSW5ET01baV0uaWRlbnRpZmllciA9PT0gaWRlbnRpZmllcikge1xuICAgICAgcmVzdWx0ID0gaTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIG1vZHVsZXNUb0RvbShsaXN0LCBvcHRpb25zKSB7XG4gIHZhciBpZENvdW50TWFwID0ge307XG4gIHZhciBpZGVudGlmaWVycyA9IFtdO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgIHZhciBpdGVtID0gbGlzdFtpXTtcbiAgICB2YXIgaWQgPSBvcHRpb25zLmJhc2UgPyBpdGVtWzBdICsgb3B0aW9ucy5iYXNlIDogaXRlbVswXTtcbiAgICB2YXIgY291bnQgPSBpZENvdW50TWFwW2lkXSB8fCAwO1xuICAgIHZhciBpZGVudGlmaWVyID0gXCJcIi5jb25jYXQoaWQsIFwiIFwiKS5jb25jYXQoY291bnQpO1xuICAgIGlkQ291bnRNYXBbaWRdID0gY291bnQgKyAxO1xuICAgIHZhciBpbmRleEJ5SWRlbnRpZmllciA9IGdldEluZGV4QnlJZGVudGlmaWVyKGlkZW50aWZpZXIpO1xuICAgIHZhciBvYmogPSB7XG4gICAgICBjc3M6IGl0ZW1bMV0sXG4gICAgICBtZWRpYTogaXRlbVsyXSxcbiAgICAgIHNvdXJjZU1hcDogaXRlbVszXSxcbiAgICAgIHN1cHBvcnRzOiBpdGVtWzRdLFxuICAgICAgbGF5ZXI6IGl0ZW1bNV1cbiAgICB9O1xuXG4gICAgaWYgKGluZGV4QnlJZGVudGlmaWVyICE9PSAtMSkge1xuICAgICAgc3R5bGVzSW5ET01baW5kZXhCeUlkZW50aWZpZXJdLnJlZmVyZW5jZXMrKztcbiAgICAgIHN0eWxlc0luRE9NW2luZGV4QnlJZGVudGlmaWVyXS51cGRhdGVyKG9iaik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciB1cGRhdGVyID0gYWRkRWxlbWVudFN0eWxlKG9iaiwgb3B0aW9ucyk7XG4gICAgICBvcHRpb25zLmJ5SW5kZXggPSBpO1xuICAgICAgc3R5bGVzSW5ET00uc3BsaWNlKGksIDAsIHtcbiAgICAgICAgaWRlbnRpZmllcjogaWRlbnRpZmllcixcbiAgICAgICAgdXBkYXRlcjogdXBkYXRlcixcbiAgICAgICAgcmVmZXJlbmNlczogMVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWRlbnRpZmllcnMucHVzaChpZGVudGlmaWVyKTtcbiAgfVxuXG4gIHJldHVybiBpZGVudGlmaWVycztcbn1cblxuZnVuY3Rpb24gYWRkRWxlbWVudFN0eWxlKG9iaiwgb3B0aW9ucykge1xuICB2YXIgYXBpID0gb3B0aW9ucy5kb21BUEkob3B0aW9ucyk7XG4gIGFwaS51cGRhdGUob2JqKTtcblxuICB2YXIgdXBkYXRlciA9IGZ1bmN0aW9uIHVwZGF0ZXIobmV3T2JqKSB7XG4gICAgaWYgKG5ld09iaikge1xuICAgICAgaWYgKG5ld09iai5jc3MgPT09IG9iai5jc3MgJiYgbmV3T2JqLm1lZGlhID09PSBvYmoubWVkaWEgJiYgbmV3T2JqLnNvdXJjZU1hcCA9PT0gb2JqLnNvdXJjZU1hcCAmJiBuZXdPYmouc3VwcG9ydHMgPT09IG9iai5zdXBwb3J0cyAmJiBuZXdPYmoubGF5ZXIgPT09IG9iai5sYXllcikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGFwaS51cGRhdGUob2JqID0gbmV3T2JqKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbW92ZSgpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gdXBkYXRlcjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobGlzdCwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgbGlzdCA9IGxpc3QgfHwgW107XG4gIHZhciBsYXN0SWRlbnRpZmllcnMgPSBtb2R1bGVzVG9Eb20obGlzdCwgb3B0aW9ucyk7XG4gIHJldHVybiBmdW5jdGlvbiB1cGRhdGUobmV3TGlzdCkge1xuICAgIG5ld0xpc3QgPSBuZXdMaXN0IHx8IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsYXN0SWRlbnRpZmllcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpZGVudGlmaWVyID0gbGFzdElkZW50aWZpZXJzW2ldO1xuICAgICAgdmFyIGluZGV4ID0gZ2V0SW5kZXhCeUlkZW50aWZpZXIoaWRlbnRpZmllcik7XG4gICAgICBzdHlsZXNJbkRPTVtpbmRleF0ucmVmZXJlbmNlcy0tO1xuICAgIH1cblxuICAgIHZhciBuZXdMYXN0SWRlbnRpZmllcnMgPSBtb2R1bGVzVG9Eb20obmV3TGlzdCwgb3B0aW9ucyk7XG5cbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgbGFzdElkZW50aWZpZXJzLmxlbmd0aDsgX2krKykge1xuICAgICAgdmFyIF9pZGVudGlmaWVyID0gbGFzdElkZW50aWZpZXJzW19pXTtcblxuICAgICAgdmFyIF9pbmRleCA9IGdldEluZGV4QnlJZGVudGlmaWVyKF9pZGVudGlmaWVyKTtcblxuICAgICAgaWYgKHN0eWxlc0luRE9NW19pbmRleF0ucmVmZXJlbmNlcyA9PT0gMCkge1xuICAgICAgICBzdHlsZXNJbkRPTVtfaW5kZXhdLnVwZGF0ZXIoKTtcblxuICAgICAgICBzdHlsZXNJbkRPTS5zcGxpY2UoX2luZGV4LCAxKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsYXN0SWRlbnRpZmllcnMgPSBuZXdMYXN0SWRlbnRpZmllcnM7XG4gIH07XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgbWVtbyA9IHt9O1xuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5cbmZ1bmN0aW9uIGdldFRhcmdldCh0YXJnZXQpIHtcbiAgaWYgKHR5cGVvZiBtZW1vW3RhcmdldF0gPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICB2YXIgc3R5bGVUYXJnZXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRhcmdldCk7IC8vIFNwZWNpYWwgY2FzZSB0byByZXR1cm4gaGVhZCBvZiBpZnJhbWUgaW5zdGVhZCBvZiBpZnJhbWUgaXRzZWxmXG5cbiAgICBpZiAod2luZG93LkhUTUxJRnJhbWVFbGVtZW50ICYmIHN0eWxlVGFyZ2V0IGluc3RhbmNlb2Ygd2luZG93LkhUTUxJRnJhbWVFbGVtZW50KSB7XG4gICAgICB0cnkge1xuICAgICAgICAvLyBUaGlzIHdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uIGlmIGFjY2VzcyB0byBpZnJhbWUgaXMgYmxvY2tlZFxuICAgICAgICAvLyBkdWUgdG8gY3Jvc3Mtb3JpZ2luIHJlc3RyaWN0aW9uc1xuICAgICAgICBzdHlsZVRhcmdldCA9IHN0eWxlVGFyZ2V0LmNvbnRlbnREb2N1bWVudC5oZWFkO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgICAgICBzdHlsZVRhcmdldCA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbWVtb1t0YXJnZXRdID0gc3R5bGVUYXJnZXQ7XG4gIH1cblxuICByZXR1cm4gbWVtb1t0YXJnZXRdO1xufVxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5cblxuZnVuY3Rpb24gaW5zZXJ0QnlTZWxlY3RvcihpbnNlcnQsIHN0eWxlKSB7XG4gIHZhciB0YXJnZXQgPSBnZXRUYXJnZXQoaW5zZXJ0KTtcblxuICBpZiAoIXRhcmdldCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkNvdWxkbid0IGZpbmQgYSBzdHlsZSB0YXJnZXQuIFRoaXMgcHJvYmFibHkgbWVhbnMgdGhhdCB0aGUgdmFsdWUgZm9yIHRoZSAnaW5zZXJ0JyBwYXJhbWV0ZXIgaXMgaW52YWxpZC5cIik7XG4gIH1cblxuICB0YXJnZXQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGluc2VydEJ5U2VsZWN0b3I7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuZnVuY3Rpb24gaW5zZXJ0U3R5bGVFbGVtZW50KG9wdGlvbnMpIHtcbiAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7XG4gIG9wdGlvbnMuc2V0QXR0cmlidXRlcyhlbGVtZW50LCBvcHRpb25zLmF0dHJpYnV0ZXMpO1xuICBvcHRpb25zLmluc2VydChlbGVtZW50LCBvcHRpb25zLm9wdGlvbnMpO1xuICByZXR1cm4gZWxlbWVudDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpbnNlcnRTdHlsZUVsZW1lbnQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuZnVuY3Rpb24gc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzKHN0eWxlRWxlbWVudCkge1xuICB2YXIgbm9uY2UgPSB0eXBlb2YgX193ZWJwYWNrX25vbmNlX18gIT09IFwidW5kZWZpbmVkXCIgPyBfX3dlYnBhY2tfbm9uY2VfXyA6IG51bGw7XG5cbiAgaWYgKG5vbmNlKSB7XG4gICAgc3R5bGVFbGVtZW50LnNldEF0dHJpYnV0ZShcIm5vbmNlXCIsIG5vbmNlKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNldEF0dHJpYnV0ZXNXaXRob3V0QXR0cmlidXRlczsiLCJcInVzZSBzdHJpY3RcIjtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBhcHBseShzdHlsZUVsZW1lbnQsIG9wdGlvbnMsIG9iaikge1xuICB2YXIgY3NzID0gXCJcIjtcblxuICBpZiAob2JqLnN1cHBvcnRzKSB7XG4gICAgY3NzICs9IFwiQHN1cHBvcnRzIChcIi5jb25jYXQob2JqLnN1cHBvcnRzLCBcIikge1wiKTtcbiAgfVxuXG4gIGlmIChvYmoubWVkaWEpIHtcbiAgICBjc3MgKz0gXCJAbWVkaWEgXCIuY29uY2F0KG9iai5tZWRpYSwgXCIge1wiKTtcbiAgfVxuXG4gIHZhciBuZWVkTGF5ZXIgPSB0eXBlb2Ygb2JqLmxheWVyICE9PSBcInVuZGVmaW5lZFwiO1xuXG4gIGlmIChuZWVkTGF5ZXIpIHtcbiAgICBjc3MgKz0gXCJAbGF5ZXJcIi5jb25jYXQob2JqLmxheWVyLmxlbmd0aCA+IDAgPyBcIiBcIi5jb25jYXQob2JqLmxheWVyKSA6IFwiXCIsIFwiIHtcIik7XG4gIH1cblxuICBjc3MgKz0gb2JqLmNzcztcblxuICBpZiAobmVlZExheWVyKSB7XG4gICAgY3NzICs9IFwifVwiO1xuICB9XG5cbiAgaWYgKG9iai5tZWRpYSkge1xuICAgIGNzcyArPSBcIn1cIjtcbiAgfVxuXG4gIGlmIChvYmouc3VwcG9ydHMpIHtcbiAgICBjc3MgKz0gXCJ9XCI7XG4gIH1cblxuICB2YXIgc291cmNlTWFwID0gb2JqLnNvdXJjZU1hcDtcblxuICBpZiAoc291cmNlTWFwICYmIHR5cGVvZiBidG9hICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgY3NzICs9IFwiXFxuLyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxcIi5jb25jYXQoYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoc291cmNlTWFwKSkpKSwgXCIgKi9cIik7XG4gIH0gLy8gRm9yIG9sZCBJRVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAgKi9cblxuXG4gIG9wdGlvbnMuc3R5bGVUYWdUcmFuc2Zvcm0oY3NzLCBzdHlsZUVsZW1lbnQsIG9wdGlvbnMub3B0aW9ucyk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZVN0eWxlRWxlbWVudChzdHlsZUVsZW1lbnQpIHtcbiAgLy8gaXN0YW5idWwgaWdub3JlIGlmXG4gIGlmIChzdHlsZUVsZW1lbnQucGFyZW50Tm9kZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHN0eWxlRWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHN0eWxlRWxlbWVudCk7XG59XG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cblxuXG5mdW5jdGlvbiBkb21BUEkob3B0aW9ucykge1xuICB2YXIgc3R5bGVFbGVtZW50ID0gb3B0aW9ucy5pbnNlcnRTdHlsZUVsZW1lbnQob3B0aW9ucyk7XG4gIHJldHVybiB7XG4gICAgdXBkYXRlOiBmdW5jdGlvbiB1cGRhdGUob2JqKSB7XG4gICAgICBhcHBseShzdHlsZUVsZW1lbnQsIG9wdGlvbnMsIG9iaik7XG4gICAgfSxcbiAgICByZW1vdmU6IGZ1bmN0aW9uIHJlbW92ZSgpIHtcbiAgICAgIHJlbW92ZVN0eWxlRWxlbWVudChzdHlsZUVsZW1lbnQpO1xuICAgIH1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBkb21BUEk7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuZnVuY3Rpb24gc3R5bGVUYWdUcmFuc2Zvcm0oY3NzLCBzdHlsZUVsZW1lbnQpIHtcbiAgaWYgKHN0eWxlRWxlbWVudC5zdHlsZVNoZWV0KSB7XG4gICAgc3R5bGVFbGVtZW50LnN0eWxlU2hlZXQuY3NzVGV4dCA9IGNzcztcbiAgfSBlbHNlIHtcbiAgICB3aGlsZSAoc3R5bGVFbGVtZW50LmZpcnN0Q2hpbGQpIHtcbiAgICAgIHN0eWxlRWxlbWVudC5yZW1vdmVDaGlsZChzdHlsZUVsZW1lbnQuZmlyc3RDaGlsZCk7XG4gICAgfVxuXG4gICAgc3R5bGVFbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzcykpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3R5bGVUYWdUcmFuc2Zvcm07IiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHRpZDogbW9kdWxlSWQsXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXShtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSAobW9kdWxlKSA9PiB7XG5cdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuXHRcdCgpID0+IChtb2R1bGVbJ2RlZmF1bHQnXSkgOlxuXHRcdCgpID0+IChtb2R1bGUpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCB7IGE6IGdldHRlciB9KTtcblx0cmV0dXJuIGdldHRlcjtcbn07IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5nID0gKGZ1bmN0aW9uKCkge1xuXHRpZiAodHlwZW9mIGdsb2JhbFRoaXMgPT09ICdvYmplY3QnKSByZXR1cm4gZ2xvYmFsVGhpcztcblx0dHJ5IHtcblx0XHRyZXR1cm4gdGhpcyB8fCBuZXcgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0JykgcmV0dXJuIHdpbmRvdztcblx0fVxufSkoKTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSAob2JqLCBwcm9wKSA9PiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpIiwidmFyIHNjcmlwdFVybDtcbmlmIChfX3dlYnBhY2tfcmVxdWlyZV9fLmcuaW1wb3J0U2NyaXB0cykgc2NyaXB0VXJsID0gX193ZWJwYWNrX3JlcXVpcmVfXy5nLmxvY2F0aW9uICsgXCJcIjtcbnZhciBkb2N1bWVudCA9IF9fd2VicGFja19yZXF1aXJlX18uZy5kb2N1bWVudDtcbmlmICghc2NyaXB0VXJsICYmIGRvY3VtZW50KSB7XG5cdGlmIChkb2N1bWVudC5jdXJyZW50U2NyaXB0KVxuXHRcdHNjcmlwdFVybCA9IGRvY3VtZW50LmN1cnJlbnRTY3JpcHQuc3JjO1xuXHRpZiAoIXNjcmlwdFVybCkge1xuXHRcdHZhciBzY3JpcHRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJzY3JpcHRcIik7XG5cdFx0aWYoc2NyaXB0cy5sZW5ndGgpIHtcblx0XHRcdHZhciBpID0gc2NyaXB0cy5sZW5ndGggLSAxO1xuXHRcdFx0d2hpbGUgKGkgPiAtMSAmJiAoIXNjcmlwdFVybCB8fCAhL15odHRwKHM/KTovLnRlc3Qoc2NyaXB0VXJsKSkpIHNjcmlwdFVybCA9IHNjcmlwdHNbaS0tXS5zcmM7XG5cdFx0fVxuXHR9XG59XG4vLyBXaGVuIHN1cHBvcnRpbmcgYnJvd3NlcnMgd2hlcmUgYW4gYXV0b21hdGljIHB1YmxpY1BhdGggaXMgbm90IHN1cHBvcnRlZCB5b3UgbXVzdCBzcGVjaWZ5IGFuIG91dHB1dC5wdWJsaWNQYXRoIG1hbnVhbGx5IHZpYSBjb25maWd1cmF0aW9uXG4vLyBvciBwYXNzIGFuIGVtcHR5IHN0cmluZyAoXCJcIikgYW5kIHNldCB0aGUgX193ZWJwYWNrX3B1YmxpY19wYXRoX18gdmFyaWFibGUgZnJvbSB5b3VyIGNvZGUgdG8gdXNlIHlvdXIgb3duIGxvZ2ljLlxuaWYgKCFzY3JpcHRVcmwpIHRocm93IG5ldyBFcnJvcihcIkF1dG9tYXRpYyBwdWJsaWNQYXRoIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBicm93c2VyXCIpO1xuc2NyaXB0VXJsID0gc2NyaXB0VXJsLnJlcGxhY2UoLyMuKiQvLCBcIlwiKS5yZXBsYWNlKC9cXD8uKiQvLCBcIlwiKS5yZXBsYWNlKC9cXC9bXlxcL10rJC8sIFwiL1wiKTtcbl9fd2VicGFja19yZXF1aXJlX18ucCA9IHNjcmlwdFVybDsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm5jID0gdW5kZWZpbmVkOyIsInZhciBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0ID0gKHRoaXMgJiYgdGhpcy5fX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KSB8fCBmdW5jdGlvbiAocmVjZWl2ZXIsIHN0YXRlLCBraW5kLCBmKSB7XHJcbiAgICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBnZXR0ZXJcIik7XHJcbiAgICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcclxuICAgIHJldHVybiBraW5kID09PSBcIm1cIiA/IGYgOiBraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlcikgOiBmID8gZi52YWx1ZSA6IHN0YXRlLmdldChyZWNlaXZlcik7XHJcbn07XHJcbnZhciBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0ID0gKHRoaXMgJiYgdGhpcy5fX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KSB8fCBmdW5jdGlvbiAocmVjZWl2ZXIsIHN0YXRlLCB2YWx1ZSwga2luZCwgZikge1xyXG4gICAgaWYgKGtpbmQgPT09IFwibVwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBtZXRob2QgaXMgbm90IHdyaXRhYmxlXCIpO1xyXG4gICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgc2V0dGVyXCIpO1xyXG4gICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3Qgd3JpdGUgcHJpdmF0ZSBtZW1iZXIgdG8gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcclxuICAgIHJldHVybiAoa2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIsIHZhbHVlKSA6IGYgPyBmLnZhbHVlID0gdmFsdWUgOiBzdGF0ZS5zZXQocmVjZWl2ZXIsIHZhbHVlKSksIHZhbHVlO1xyXG59O1xyXG52YXIgX1Jlc3RhdXJhbnRNYW5hZ2VyX2luc3RhbmNlcywgX1Jlc3RhdXJhbnRNYW5hZ2VyX3Jlc3RhdXJhbnRzLCBfUmVzdGF1cmFudE1hbmFnZXJfZmlsdGVyQnlDYXRlZ29yeSwgX1Jlc3RhdXJhbnRNYW5hZ2VyX3NvcnRCeU5hbWUsIF9SZXN0YXVyYW50TWFuYWdlcl9zb3J0QnlEaXN0YW5jZTtcclxuY2xhc3MgUmVzdGF1cmFudE1hbmFnZXIge1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgX1Jlc3RhdXJhbnRNYW5hZ2VyX2luc3RhbmNlcy5hZGQodGhpcyk7XHJcbiAgICAgICAgX1Jlc3RhdXJhbnRNYW5hZ2VyX3Jlc3RhdXJhbnRzLnNldCh0aGlzLCBbXSk7XHJcbiAgICB9XHJcbiAgICBnZXQgcmVzdGF1cmFudHMoKSB7XHJcbiAgICAgICAgcmV0dXJuIFsuLi5fX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZXN0YXVyYW50TWFuYWdlcl9yZXN0YXVyYW50cywgXCJmXCIpXTtcclxuICAgIH1cclxuICAgIHNldCByZXN0YXVyYW50cyhyZXN0YXVyYW50cykge1xyXG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1Jlc3RhdXJhbnRNYW5hZ2VyX3Jlc3RhdXJhbnRzLCByZXN0YXVyYW50cyA/PyBbXSwgXCJmXCIpO1xyXG4gICAgfVxyXG4gICAgYWRkKHJlc3RhdXJhbnQpIHtcclxuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZXN0YXVyYW50TWFuYWdlcl9yZXN0YXVyYW50cywgXCJmXCIpLnB1c2gocmVzdGF1cmFudCk7XHJcbiAgICB9XHJcbiAgICBmaWx0ZXJlZEFuZFNvcnRlZEJ5T3B0aW9ucyhjYXRlZ29yeSwgb3B0aW9uKSB7XHJcbiAgICAgICAgY29uc3QgZmlsdGVyZWRSZXN0YXVyYW50ID0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVzdGF1cmFudE1hbmFnZXJfaW5zdGFuY2VzLCBcIm1cIiwgX1Jlc3RhdXJhbnRNYW5hZ2VyX2ZpbHRlckJ5Q2F0ZWdvcnkpLmNhbGwodGhpcywgY2F0ZWdvcnkpO1xyXG4gICAgICAgIGlmIChvcHRpb24gPT09ICdkaXN0YW5jZScpXHJcbiAgICAgICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZXN0YXVyYW50TWFuYWdlcl9pbnN0YW5jZXMsIFwibVwiLCBfUmVzdGF1cmFudE1hbmFnZXJfc29ydEJ5RGlzdGFuY2UpLmNhbGwodGhpcywgZmlsdGVyZWRSZXN0YXVyYW50KTtcclxuICAgICAgICByZXR1cm4gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVzdGF1cmFudE1hbmFnZXJfaW5zdGFuY2VzLCBcIm1cIiwgX1Jlc3RhdXJhbnRNYW5hZ2VyX3NvcnRCeU5hbWUpLmNhbGwodGhpcywgZmlsdGVyZWRSZXN0YXVyYW50KTtcclxuICAgIH1cclxuICAgIHRvZ2dsZUZhdm9yaXRlKHJlc3RhdXJhbnROYW1lKSB7XHJcbiAgICAgICAgY29uc3QgcmVzdGF1cmFudEluZGV4ID0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVzdGF1cmFudE1hbmFnZXJfcmVzdGF1cmFudHMsIFwiZlwiKS5maW5kSW5kZXgoKHJlc3RhdXJhbnQpID0+IHJlc3RhdXJhbnQubmFtZSA9PT0gcmVzdGF1cmFudE5hbWUpO1xyXG4gICAgICAgIGlmIChyZXN0YXVyYW50SW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1Jlc3RhdXJhbnRNYW5hZ2VyX3Jlc3RhdXJhbnRzLCBcImZcIilbcmVzdGF1cmFudEluZGV4XS5mYXZvcml0ZSA9ICFfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZXN0YXVyYW50TWFuYWdlcl9yZXN0YXVyYW50cywgXCJmXCIpW3Jlc3RhdXJhbnRJbmRleF0uZmF2b3JpdGU7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTG9jYWxTdG9yYWdlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgdXBkYXRlTG9jYWxTdG9yYWdlKCkge1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdyZXN0YXVyYW50cycsIEpTT04uc3RyaW5naWZ5KF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1Jlc3RhdXJhbnRNYW5hZ2VyX3Jlc3RhdXJhbnRzLCBcImZcIikpKTtcclxuICAgIH1cclxuICAgIGxvYWRSZXN0YXVyYW50c0Zyb21Mb2NhbFN0b3JhZ2UoKSB7XHJcbiAgICAgICAgY29uc3Qgc3RvcmVkUmVzdGF1cmFudHMgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgncmVzdGF1cmFudHMnKTtcclxuICAgICAgICBpZiAoc3RvcmVkUmVzdGF1cmFudHMpIHtcclxuICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfUmVzdGF1cmFudE1hbmFnZXJfcmVzdGF1cmFudHMsIEpTT04ucGFyc2Uoc3RvcmVkUmVzdGF1cmFudHMpLCBcImZcIik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbl9SZXN0YXVyYW50TWFuYWdlcl9yZXN0YXVyYW50cyA9IG5ldyBXZWFrTWFwKCksIF9SZXN0YXVyYW50TWFuYWdlcl9pbnN0YW5jZXMgPSBuZXcgV2Vha1NldCgpLCBfUmVzdGF1cmFudE1hbmFnZXJfZmlsdGVyQnlDYXRlZ29yeSA9IGZ1bmN0aW9uIF9SZXN0YXVyYW50TWFuYWdlcl9maWx0ZXJCeUNhdGVnb3J5KGNhdGVnb3J5KSB7XHJcbiAgICBpZiAoY2F0ZWdvcnkgPT09ICfsoITssrQnKVxyXG4gICAgICAgIHJldHVybiB0aGlzLnJlc3RhdXJhbnRzO1xyXG4gICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1Jlc3RhdXJhbnRNYW5hZ2VyX3Jlc3RhdXJhbnRzLCBcImZcIikuZmlsdGVyKChyZXN0YXVyYW50KSA9PiByZXN0YXVyYW50LmNhdGVnb3J5ID09PSBjYXRlZ29yeSk7XHJcbn0sIF9SZXN0YXVyYW50TWFuYWdlcl9zb3J0QnlOYW1lID0gZnVuY3Rpb24gX1Jlc3RhdXJhbnRNYW5hZ2VyX3NvcnRCeU5hbWUocmVzdGF1cmFudHMpIHtcclxuICAgIHJldHVybiBbLi4ucmVzdGF1cmFudHNdLnNvcnQoKGEsIGIpID0+IGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSkpO1xyXG59LCBfUmVzdGF1cmFudE1hbmFnZXJfc29ydEJ5RGlzdGFuY2UgPSBmdW5jdGlvbiBfUmVzdGF1cmFudE1hbmFnZXJfc29ydEJ5RGlzdGFuY2UocmVzdGF1cmFudHMpIHtcclxuICAgIHJldHVybiBbLi4ucmVzdGF1cmFudHNdLnNvcnQoKGEsIGIpID0+IGEuZGlzdGFuY2UgLSBiLmRpc3RhbmNlKTtcclxufTtcclxuZXhwb3J0IGRlZmF1bHQgUmVzdGF1cmFudE1hbmFnZXI7XHJcbiIsIi8vIOy7tO2PrOuEjO2KuOuTpOydhCDsoIDsnqXtlZjqs6Ag6rSA66as7ZWY64qUXHJcbnZhciBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0ID0gKHRoaXMgJiYgdGhpcy5fX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KSB8fCBmdW5jdGlvbiAocmVjZWl2ZXIsIHN0YXRlLCB2YWx1ZSwga2luZCwgZikge1xyXG4gICAgaWYgKGtpbmQgPT09IFwibVwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBtZXRob2QgaXMgbm90IHdyaXRhYmxlXCIpO1xyXG4gICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgc2V0dGVyXCIpO1xyXG4gICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3Qgd3JpdGUgcHJpdmF0ZSBtZW1iZXIgdG8gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcclxuICAgIHJldHVybiAoa2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIsIHZhbHVlKSA6IGYgPyBmLnZhbHVlID0gdmFsdWUgOiBzdGF0ZS5zZXQocmVjZWl2ZXIsIHZhbHVlKSksIHZhbHVlO1xyXG59O1xyXG52YXIgX19jbGFzc1ByaXZhdGVGaWVsZEdldCA9ICh0aGlzICYmIHRoaXMuX19jbGFzc1ByaXZhdGVGaWVsZEdldCkgfHwgZnVuY3Rpb24gKHJlY2VpdmVyLCBzdGF0ZSwga2luZCwgZikge1xyXG4gICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgZ2V0dGVyXCIpO1xyXG4gICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgcmVhZCBwcml2YXRlIG1lbWJlciBmcm9tIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XHJcbiAgICByZXR1cm4ga2luZCA9PT0gXCJtXCIgPyBmIDoga2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIpIDogZiA/IGYudmFsdWUgOiBzdGF0ZS5nZXQocmVjZWl2ZXIpO1xyXG59O1xyXG52YXIgX1dlYlZpZXdfY2F0ZWdvcnlGaWx0ZXIsIF9XZWJWaWV3X3NvcnRpbmdGaWx0ZXIsIF9XZWJWaWV3X3Jlc3RhdXJhbnRMaXN0O1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXZWJWaWV3IHtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIF9XZWJWaWV3X2NhdGVnb3J5RmlsdGVyLnNldCh0aGlzLCB2b2lkIDApO1xyXG4gICAgICAgIF9XZWJWaWV3X3NvcnRpbmdGaWx0ZXIuc2V0KHRoaXMsIHZvaWQgMCk7XHJcbiAgICAgICAgX1dlYlZpZXdfcmVzdGF1cmFudExpc3Quc2V0KHRoaXMsIHZvaWQgMCk7XHJcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfV2ViVmlld19jYXRlZ29yeUZpbHRlciwgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2NhdGVnb3J5LWZpbHRlcicpLCBcImZcIik7XHJcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfV2ViVmlld19zb3J0aW5nRmlsdGVyLCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjc29ydGluZy1maWx0ZXInKSwgXCJmXCIpO1xyXG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1dlYlZpZXdfcmVzdGF1cmFudExpc3QsIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ3VsW2lzPVwiYXBwLXJlc3RhdXJhbnQtbGlzdFwiXScpLCBcImZcIik7XHJcbiAgICB9XHJcbiAgICBnZXQgc29ydGluZ0ZpbHRlcigpIHtcclxuICAgICAgICByZXR1cm4gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfV2ViVmlld19zb3J0aW5nRmlsdGVyLCBcImZcIikudmFsdWU7XHJcbiAgICB9XHJcbiAgICBnZXQgY2F0ZWdvcnlGaWx0ZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1dlYlZpZXdfY2F0ZWdvcnlGaWx0ZXIsIFwiZlwiKS52YWx1ZTtcclxuICAgIH1cclxuICAgIHNldCBjYXRlZ29yeUZpbHRlcih2YWx1ZSkge1xyXG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1dlYlZpZXdfY2F0ZWdvcnlGaWx0ZXIsIFwiZlwiKS52YWx1ZSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgc2V0IHJlc3RhdXJhbnRzKHJlc3RhdXJhbnRzKSB7XHJcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfV2ViVmlld19yZXN0YXVyYW50TGlzdCwgXCJmXCIpLnJlc3RhdXJhbnRzID0gcmVzdGF1cmFudHM7XHJcbiAgICB9XHJcbn1cclxuX1dlYlZpZXdfY2F0ZWdvcnlGaWx0ZXIgPSBuZXcgV2Vha01hcCgpLCBfV2ViVmlld19zb3J0aW5nRmlsdGVyID0gbmV3IFdlYWtNYXAoKSwgX1dlYlZpZXdfcmVzdGF1cmFudExpc3QgPSBuZXcgV2Vha01hcCgpO1xyXG4iLCJ2YXIgX19jbGFzc1ByaXZhdGVGaWVsZFNldCA9ICh0aGlzICYmIHRoaXMuX19jbGFzc1ByaXZhdGVGaWVsZFNldCkgfHwgZnVuY3Rpb24gKHJlY2VpdmVyLCBzdGF0ZSwgdmFsdWUsIGtpbmQsIGYpIHtcclxuICAgIGlmIChraW5kID09PSBcIm1cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgbWV0aG9kIGlzIG5vdCB3cml0YWJsZVwiKTtcclxuICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIHNldHRlclwiKTtcclxuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHdyaXRlIHByaXZhdGUgbWVtYmVyIHRvIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XHJcbiAgICByZXR1cm4gKGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyLCB2YWx1ZSkgOiBmID8gZi52YWx1ZSA9IHZhbHVlIDogc3RhdGUuc2V0KHJlY2VpdmVyLCB2YWx1ZSkpLCB2YWx1ZTtcclxufTtcclxudmFyIF9fY2xhc3NQcml2YXRlRmllbGRHZXQgPSAodGhpcyAmJiB0aGlzLl9fY2xhc3NQcml2YXRlRmllbGRHZXQpIHx8IGZ1bmN0aW9uIChyZWNlaXZlciwgc3RhdGUsIGtpbmQsIGYpIHtcclxuICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlclwiKTtcclxuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xyXG4gICAgcmV0dXJuIGtpbmQgPT09IFwibVwiID8gZiA6IGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyKSA6IGYgPyBmLnZhbHVlIDogc3RhdGUuZ2V0KHJlY2VpdmVyKTtcclxufTtcclxudmFyIF9SZXN0YXVyYW50Rm9ybV9pbnN0YW5jZXMsIF9SZXN0YXVyYW50Rm9ybV9saW5rSW5wdXQsIF9SZXN0YXVyYW50Rm9ybV9oYW5kbGVTdWJtaXQsIF9SZXN0YXVyYW50Rm9ybV9oYW5kbGVSZXNldCwgX1Jlc3RhdXJhbnRGb3JtX2NoZWNrTGlua0lucHV0VmFsaWRpdHksIF9SZXN0YXVyYW50Rm9ybV9nZXRGb3JtRGF0YU9iajtcclxuZXhwb3J0IGNvbnN0IFJFU1RBVVJBTlRfRk9STV9FVkVOVFMgPSB7XHJcbiAgICBzdWJtaXQ6ICdyZXN0YXVyYW50Rm9ybVN1Ym1pdCcsXHJcbiAgICByZXNldDogJ3Jlc3RhdXJhbnRGb3JtUmVzZXQnLFxyXG59O1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZXN0YXVyYW50Rm9ybSBleHRlbmRzIEhUTUxGb3JtRWxlbWVudCB7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIF9SZXN0YXVyYW50Rm9ybV9pbnN0YW5jZXMuYWRkKHRoaXMpO1xyXG4gICAgICAgIF9SZXN0YXVyYW50Rm9ybV9saW5rSW5wdXQuc2V0KHRoaXMsIHZvaWQgMCk7XHJcbiAgICAgICAgY29uc3QgdGVtcGxhdGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjdGVtcGxhdGUtcmVzdGF1cmFudC1mb3JtJyk7XHJcbiAgICAgICAgY29uc3QgY29udGVudCA9IHRlbXBsYXRlLmNvbnRlbnQuY2xvbmVOb2RlKHRydWUpO1xyXG4gICAgICAgIHRoaXMuYXBwZW5kQ2hpbGQoY29udGVudCk7XHJcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfUmVzdGF1cmFudEZvcm1fbGlua0lucHV0LCB0aGlzLnF1ZXJ5U2VsZWN0b3IoJyNsaW5rJyksIFwiZlwiKTtcclxuICAgIH1cclxuICAgIGNvbm5lY3RlZENhbGxiYWNrKCkge1xyXG4gICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignc3VibWl0JywgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVzdGF1cmFudEZvcm1faW5zdGFuY2VzLCBcIm1cIiwgX1Jlc3RhdXJhbnRGb3JtX2hhbmRsZVN1Ym1pdCkuYmluZCh0aGlzKSk7XHJcbiAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdyZXNldCcsIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1Jlc3RhdXJhbnRGb3JtX2luc3RhbmNlcywgXCJtXCIsIF9SZXN0YXVyYW50Rm9ybV9oYW5kbGVSZXNldCkuYmluZCh0aGlzKSk7XHJcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVzdGF1cmFudEZvcm1fbGlua0lucHV0LCBcImZcIikuYWRkRXZlbnRMaXN0ZW5lcignaW52YWxpZCcsICgpID0+IHtcclxuICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVzdGF1cmFudEZvcm1fbGlua0lucHV0LCBcImZcIikudmFsdWUgPSAnJztcclxuICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVzdGF1cmFudEZvcm1fbGlua0lucHV0LCBcImZcIikuc2V0Q3VzdG9tVmFsaWRpdHkoJycpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbl9SZXN0YXVyYW50Rm9ybV9saW5rSW5wdXQgPSBuZXcgV2Vha01hcCgpLCBfUmVzdGF1cmFudEZvcm1faW5zdGFuY2VzID0gbmV3IFdlYWtTZXQoKSwgX1Jlc3RhdXJhbnRGb3JtX2hhbmRsZVN1Ym1pdCA9IGZ1bmN0aW9uIF9SZXN0YXVyYW50Rm9ybV9oYW5kbGVTdWJtaXQoZSkge1xyXG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgaWYgKCFfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZXN0YXVyYW50Rm9ybV9pbnN0YW5jZXMsIFwibVwiLCBfUmVzdGF1cmFudEZvcm1fY2hlY2tMaW5rSW5wdXRWYWxpZGl0eSkuY2FsbCh0aGlzKSkge1xyXG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1Jlc3RhdXJhbnRGb3JtX2xpbmtJbnB1dCwgXCJmXCIpLnNldEN1c3RvbVZhbGlkaXR5KCfsnKDtmqjtlZjsp4Ag7JWK7J2AIOunge2BrOyeheuLiOuLpC4nKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBkYXRhID0gbmV3IEZvcm1EYXRhKGUudGFyZ2V0KTtcclxuICAgIGNvbnN0IGZvcm1EYXRhID0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVzdGF1cmFudEZvcm1faW5zdGFuY2VzLCBcIm1cIiwgX1Jlc3RhdXJhbnRGb3JtX2dldEZvcm1EYXRhT2JqKS5jYWxsKHRoaXMsIGRhdGEpO1xyXG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudChSRVNUQVVSQU5UX0ZPUk1fRVZFTlRTLnN1Ym1pdCwge1xyXG4gICAgICAgIGJ1YmJsZXM6IHRydWUsXHJcbiAgICAgICAgZGV0YWlsOiB7IGZvcm1EYXRhIH0sXHJcbiAgICB9KSk7XHJcbiAgICB0aGlzLnJlc2V0KCk7XHJcbn0sIF9SZXN0YXVyYW50Rm9ybV9oYW5kbGVSZXNldCA9IGZ1bmN0aW9uIF9SZXN0YXVyYW50Rm9ybV9oYW5kbGVSZXNldCgpIHtcclxuICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoUkVTVEFVUkFOVF9GT1JNX0VWRU5UUy5yZXNldCwge1xyXG4gICAgICAgIGJ1YmJsZXM6IHRydWUsXHJcbiAgICB9KSk7XHJcbn0sIF9SZXN0YXVyYW50Rm9ybV9jaGVja0xpbmtJbnB1dFZhbGlkaXR5ID0gZnVuY3Rpb24gX1Jlc3RhdXJhbnRGb3JtX2NoZWNrTGlua0lucHV0VmFsaWRpdHkoKSB7XHJcbiAgICBpZiAoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVzdGF1cmFudEZvcm1fbGlua0lucHV0LCBcImZcIikudmFsdWUgPT09ICcnKVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgY29uc3QgcmVnZXggPSAvXmh0dHBzPzpcXC9cXC8vO1xyXG4gICAgcmV0dXJuIHJlZ2V4LnRlc3QoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVzdGF1cmFudEZvcm1fbGlua0lucHV0LCBcImZcIikudmFsdWUpO1xyXG59LCBfUmVzdGF1cmFudEZvcm1fZ2V0Rm9ybURhdGFPYmogPSBmdW5jdGlvbiBfUmVzdGF1cmFudEZvcm1fZ2V0Rm9ybURhdGFPYmooZGF0YSkge1xyXG4gICAgcmV0dXJuIFsuLi5kYXRhLmtleXMoKV0ucmVkdWNlKChmb3JtRGF0YSwga2V5KSA9PiB7XHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSBkYXRhLmdldChrZXkpO1xyXG4gICAgICAgIHJldHVybiB7IC4uLmZvcm1EYXRhLCBba2V5XTogdmFsdWUgfTtcclxuICAgIH0sIHt9KTtcclxufTtcclxuIiwidmFyIF9fY2xhc3NQcml2YXRlRmllbGRHZXQgPSAodGhpcyAmJiB0aGlzLl9fY2xhc3NQcml2YXRlRmllbGRHZXQpIHx8IGZ1bmN0aW9uIChyZWNlaXZlciwgc3RhdGUsIGtpbmQsIGYpIHtcclxuICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlclwiKTtcclxuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xyXG4gICAgcmV0dXJuIGtpbmQgPT09IFwibVwiID8gZiA6IGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyKSA6IGYgPyBmLnZhbHVlIDogc3RhdGUuZ2V0KHJlY2VpdmVyKTtcclxufTtcclxudmFyIF9TZWxlY3RfaW5zdGFuY2VzLCBfU2VsZWN0X2hhbmRsZU9uQ2hhbmdlLCBfU2VsZWN0X2NyZWF0ZU9wdGlvbnMsIF9TZWxlY3RfZ2VuZXJhdGVPcHRpb25zO1xyXG5leHBvcnQgY29uc3QgU0VMRUNUX0VWRU5UUyA9IHtcclxuICAgIG9uY2hhbmdlOiAnc2VsZWN0T25DaGFuZ2UnLFxyXG59O1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZWxlY3QgZXh0ZW5kcyBIVE1MU2VsZWN0RWxlbWVudCB7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xyXG4gICAgICAgIF9TZWxlY3RfaW5zdGFuY2VzLmFkZCh0aGlzKTtcclxuICAgIH1cclxuICAgIGdldCBvcHRpb25zKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5kYXRhc2V0Lm9wdGlvbnMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZSh0aGlzLmRhdGFzZXQub3B0aW9ucyk7XHJcbiAgICB9XHJcbiAgICBzZXQgb3B0aW9ucyh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKCdkYXRhLW9wdGlvbnMnLCBKU09OLnN0cmluZ2lmeSh2YWx1ZSkpO1xyXG4gICAgfVxyXG4gICAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XHJcbiAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9TZWxlY3RfaW5zdGFuY2VzLCBcIm1cIiwgX1NlbGVjdF9oYW5kbGVPbkNoYW5nZSkuYmluZCh0aGlzKSk7XHJcbiAgICB9XHJcbiAgICBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sobmFtZSkge1xyXG4gICAgICAgIGlmIChuYW1lID09PSAnZGF0YS1vcHRpb25zJykge1xyXG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9TZWxlY3RfaW5zdGFuY2VzLCBcIm1cIiwgX1NlbGVjdF9jcmVhdGVPcHRpb25zKS5jYWxsKHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5fU2VsZWN0X2luc3RhbmNlcyA9IG5ldyBXZWFrU2V0KCksIF9TZWxlY3RfaGFuZGxlT25DaGFuZ2UgPSBmdW5jdGlvbiBfU2VsZWN0X2hhbmRsZU9uQ2hhbmdlKGUpIHtcclxuICAgIGNvbnN0IHsgdmFsdWUgfSA9IGUudGFyZ2V0O1xyXG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudChTRUxFQ1RfRVZFTlRTLm9uY2hhbmdlLCB7XHJcbiAgICAgICAgYnViYmxlczogdHJ1ZSxcclxuICAgICAgICBkZXRhaWw6IHtcclxuICAgICAgICAgICAgdmFsdWUsXHJcbiAgICAgICAgICAgIGlkOiB0aGlzLmlkLFxyXG4gICAgICAgIH0sXHJcbiAgICB9KSk7XHJcbn0sIF9TZWxlY3RfY3JlYXRlT3B0aW9ucyA9IGZ1bmN0aW9uIF9TZWxlY3RfY3JlYXRlT3B0aW9ucygpIHtcclxuICAgIHRoaXMudGV4dENvbnRlbnQgPSAnJztcclxuICAgIGNvbnN0IGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xyXG4gICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfU2VsZWN0X2luc3RhbmNlcywgXCJtXCIsIF9TZWxlY3RfZ2VuZXJhdGVPcHRpb25zKS5jYWxsKHRoaXMpLmZvckVhY2goKG9wdGlvbikgPT4gZnJhZ21lbnQuYXBwZW5kQ2hpbGQob3B0aW9uKSk7XHJcbiAgICB0aGlzLmFwcGVuZENoaWxkKGZyYWdtZW50KTtcclxufSwgX1NlbGVjdF9nZW5lcmF0ZU9wdGlvbnMgPSBmdW5jdGlvbiBfU2VsZWN0X2dlbmVyYXRlT3B0aW9ucygpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubWFwKCh7IHZhbHVlLCBvcHRpb24gfSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdvcHRpb24nKTtcclxuICAgICAgICBlbGVtZW50LnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgZWxlbWVudC50ZXh0Q29udGVudCA9IG9wdGlvbjtcclxuICAgICAgICByZXR1cm4gZWxlbWVudDtcclxuICAgIH0pO1xyXG59O1xyXG5TZWxlY3Qub2JzZXJ2ZWRBdHRyaWJ1dGVzID0gWydkYXRhLW9wdGlvbnMnXTtcclxuIiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGFiIHtcclxuICAgIGNvbnN0cnVjdG9yKHNlbGVjdG9yLCBjYWxsYmFjaykge1xyXG4gICAgICAgIHRoaXMudGFiSXRlbSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO1xyXG4gICAgICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFjaztcclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgIH1cclxuICAgIGluaXQoKSB7XHJcbiAgICAgICAgdGhpcy50YWJJdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy50YWJfX2l0ZW0uYWN0aXZlJykuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7XHJcbiAgICAgICAgICAgIHRoaXMudGFiSXRlbS5wYXJlbnRFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpO1xyXG4gICAgICAgICAgICB0aGlzLmNhbGxiYWNrKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpc0FjdGl2ZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy50YWJJdGVtLnBhcmVudEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdhY3RpdmUnKTtcclxuICAgIH1cclxufVxyXG4iLCJ2YXIgX19jbGFzc1ByaXZhdGVGaWVsZFNldCA9ICh0aGlzICYmIHRoaXMuX19jbGFzc1ByaXZhdGVGaWVsZFNldCkgfHwgZnVuY3Rpb24gKHJlY2VpdmVyLCBzdGF0ZSwgdmFsdWUsIGtpbmQsIGYpIHtcclxuICAgIGlmIChraW5kID09PSBcIm1cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgbWV0aG9kIGlzIG5vdCB3cml0YWJsZVwiKTtcclxuICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIHNldHRlclwiKTtcclxuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHdyaXRlIHByaXZhdGUgbWVtYmVyIHRvIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XHJcbiAgICByZXR1cm4gKGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyLCB2YWx1ZSkgOiBmID8gZi52YWx1ZSA9IHZhbHVlIDogc3RhdGUuc2V0KHJlY2VpdmVyLCB2YWx1ZSkpLCB2YWx1ZTtcclxufTtcclxudmFyIF9fY2xhc3NQcml2YXRlRmllbGRHZXQgPSAodGhpcyAmJiB0aGlzLl9fY2xhc3NQcml2YXRlRmllbGRHZXQpIHx8IGZ1bmN0aW9uIChyZWNlaXZlciwgc3RhdGUsIGtpbmQsIGYpIHtcclxuICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlclwiKTtcclxuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xyXG4gICAgcmV0dXJuIGtpbmQgPT09IFwibVwiID8gZiA6IGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyKSA6IGYgPyBmLnZhbHVlIDogc3RhdGUuZ2V0KHJlY2VpdmVyKTtcclxufTtcclxudmFyIF9XZWJDb250cm9sbGVyX2luc3RhbmNlcywgX1dlYkNvbnRyb2xsZXJfd2ViVmlldywgX1dlYkNvbnRyb2xsZXJfcmVzdGF1cmFudE1hbmFnZXIsIF9XZWJDb250cm9sbGVyX2FsbFRhYiwgX1dlYkNvbnRyb2xsZXJfZmF2b3JpdGVUYWIsIF9XZWJDb250cm9sbGVyX3VwZGF0ZVJlc3RhdXJhbnRMaXN0QWZ0ZXJEZWxldGUsIF9XZWJDb250cm9sbGVyX3JlbmRlclRhYnMsIF9XZWJDb250cm9sbGVyX3N5bmNMb2NhbFN0b3JhZ2VBbmREb21haW4sIF9XZWJDb250cm9sbGVyX3VwZGF0ZUxvY2FsU3RvcmFnZSwgX1dlYkNvbnRyb2xsZXJfdXBkYXRlUmVzdGF1cmFudExpc3QsIF9XZWJDb250cm9sbGVyX3VwZGF0ZUZhdm9yaXRlUmVzdGF1cmFudExpc3QsIF9XZWJDb250cm9sbGVyX2FkZFJlc3RhdXJhbnRTdWJtaXRFdmVudExpc3RlbmVyLCBfV2ViQ29udHJvbGxlcl9oYW5kbGVGb3JtU3VibWl0VXBkYXRlVUksIF9XZWJDb250cm9sbGVyX2FkZEZpbHRlck9uY2hhbmdlRXZlbnRMaXN0ZW5lcjtcclxuaW1wb3J0IFJlc3RhdXJhbnRNYW5hZ2VyIGZyb20gJy4uL2RvbWFpbi9SZXN0YXVyYW50TWFuYWdlci50cyc7XHJcbmltcG9ydCBXZWJWaWV3IGZyb20gJy4uL3ZpZXcvV2ViVmlldyc7XHJcbmltcG9ydCB7IFJFU1RBVVJBTlRfRk9STV9FVkVOVFMgfSBmcm9tICcuLi92aWV3L2NvbXBvbmVudHMvUmVzdGF1cmFudEZvcm0nO1xyXG5pbXBvcnQgeyBTRUxFQ1RfRVZFTlRTIH0gZnJvbSAnLi4vdmlldy9jb21wb25lbnRzL1NlbGVjdCc7XHJcbmltcG9ydCBUYWIgZnJvbSAnLi4vdmlldy9jb21wb25lbnRzL1RhYic7XHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFdlYkNvbnRyb2xsZXIge1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgX1dlYkNvbnRyb2xsZXJfaW5zdGFuY2VzLmFkZCh0aGlzKTtcclxuICAgICAgICBfV2ViQ29udHJvbGxlcl93ZWJWaWV3LnNldCh0aGlzLCB2b2lkIDApO1xyXG4gICAgICAgIF9XZWJDb250cm9sbGVyX3Jlc3RhdXJhbnRNYW5hZ2VyLnNldCh0aGlzLCB2b2lkIDApO1xyXG4gICAgICAgIF9XZWJDb250cm9sbGVyX2FsbFRhYi5zZXQodGhpcywgdm9pZCAwKTtcclxuICAgICAgICBfV2ViQ29udHJvbGxlcl9mYXZvcml0ZVRhYi5zZXQodGhpcywgdm9pZCAwKTtcclxuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9XZWJDb250cm9sbGVyX3dlYlZpZXcsIG5ldyBXZWJWaWV3KCksIFwiZlwiKTtcclxuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9XZWJDb250cm9sbGVyX3Jlc3RhdXJhbnRNYW5hZ2VyLCBuZXcgUmVzdGF1cmFudE1hbmFnZXIoKSwgXCJmXCIpO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1saW5lcy1wZXItZnVuY3Rpb25cclxuICAgIHN0YXJ0KCkge1xyXG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1dlYkNvbnRyb2xsZXJfaW5zdGFuY2VzLCBcIm1cIiwgX1dlYkNvbnRyb2xsZXJfc3luY0xvY2FsU3RvcmFnZUFuZERvbWFpbikuY2FsbCh0aGlzKTtcclxuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9XZWJDb250cm9sbGVyX3dlYlZpZXcsIFwiZlwiKS5yZXN0YXVyYW50cyA9IEpTT04ucGFyc2Uod2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKCdyZXN0YXVyYW50cycpKTtcclxuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9XZWJDb250cm9sbGVyX2luc3RhbmNlcywgXCJtXCIsIF9XZWJDb250cm9sbGVyX2FkZFJlc3RhdXJhbnRTdWJtaXRFdmVudExpc3RlbmVyKS5jYWxsKHRoaXMpO1xyXG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1dlYkNvbnRyb2xsZXJfaW5zdGFuY2VzLCBcIm1cIiwgX1dlYkNvbnRyb2xsZXJfYWRkRmlsdGVyT25jaGFuZ2VFdmVudExpc3RlbmVyKS5jYWxsKHRoaXMpO1xyXG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1dlYkNvbnRyb2xsZXJfaW5zdGFuY2VzLCBcIm1cIiwgX1dlYkNvbnRyb2xsZXJfcmVuZGVyVGFicykuY2FsbCh0aGlzKTtcclxuICAgICAgICBjb25zdCByZXN0YXVyYW50RGV0YWlsRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNyZXN0YXVyYW50LWRldGFpbCcpO1xyXG4gICAgICAgIHJlc3RhdXJhbnREZXRhaWxFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc3RhdXJhbnRJdGVtRGVsZXRlJywgKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGRlbGV0ZWRSZXN0YXVyYW50SWQgPSBldmVudC5kZXRhaWwuaWQ7XHJcbiAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1dlYkNvbnRyb2xsZXJfaW5zdGFuY2VzLCBcIm1cIiwgX1dlYkNvbnRyb2xsZXJfdXBkYXRlUmVzdGF1cmFudExpc3RBZnRlckRlbGV0ZSkuY2FsbCh0aGlzLCBkZWxldGVkUmVzdGF1cmFudElkKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHVwZGF0ZUZhdm9yaXRlU3RhdHVzKHJlc3RhdXJhbnROYW1lKSB7XHJcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfV2ViQ29udHJvbGxlcl9yZXN0YXVyYW50TWFuYWdlciwgXCJmXCIpLnRvZ2dsZUZhdm9yaXRlKHJlc3RhdXJhbnROYW1lKTtcclxuICAgICAgICBpZiAoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfV2ViQ29udHJvbGxlcl9mYXZvcml0ZVRhYiwgXCJmXCIpLmlzQWN0aXZlKCkpIHtcclxuICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfV2ViQ29udHJvbGxlcl9pbnN0YW5jZXMsIFwibVwiLCBfV2ViQ29udHJvbGxlcl91cGRhdGVGYXZvcml0ZVJlc3RhdXJhbnRMaXN0KS5jYWxsKHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfV2ViQ29udHJvbGxlcl9pbnN0YW5jZXMsIFwibVwiLCBfV2ViQ29udHJvbGxlcl91cGRhdGVSZXN0YXVyYW50TGlzdCkuY2FsbCh0aGlzLCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9XZWJDb250cm9sbGVyX3dlYlZpZXcsIFwiZlwiKS5jYXRlZ29yeUZpbHRlciwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfV2ViQ29udHJvbGxlcl93ZWJWaWV3LCBcImZcIikuc29ydGluZ0ZpbHRlcik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbl9XZWJDb250cm9sbGVyX3dlYlZpZXcgPSBuZXcgV2Vha01hcCgpLCBfV2ViQ29udHJvbGxlcl9yZXN0YXVyYW50TWFuYWdlciA9IG5ldyBXZWFrTWFwKCksIF9XZWJDb250cm9sbGVyX2FsbFRhYiA9IG5ldyBXZWFrTWFwKCksIF9XZWJDb250cm9sbGVyX2Zhdm9yaXRlVGFiID0gbmV3IFdlYWtNYXAoKSwgX1dlYkNvbnRyb2xsZXJfaW5zdGFuY2VzID0gbmV3IFdlYWtTZXQoKSwgX1dlYkNvbnRyb2xsZXJfdXBkYXRlUmVzdGF1cmFudExpc3RBZnRlckRlbGV0ZSA9IGZ1bmN0aW9uIF9XZWJDb250cm9sbGVyX3VwZGF0ZVJlc3RhdXJhbnRMaXN0QWZ0ZXJEZWxldGUoZGVsZXRlZFJlc3RhdXJhbnRJZCkge1xyXG4gICAgY29uc3QgcmVzdGF1cmFudHMgPSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9XZWJDb250cm9sbGVyX3dlYlZpZXcsIFwiZlwiKS5yZXN0YXVyYW50cy5maWx0ZXIoKHJlc3RhdXJhbnQpID0+IHJlc3RhdXJhbnQuaWQgIT09IGRlbGV0ZWRSZXN0YXVyYW50SWQpO1xyXG4gICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfV2ViQ29udHJvbGxlcl93ZWJWaWV3LCBcImZcIikucmVzdGF1cmFudHMgPSByZXN0YXVyYW50cztcclxuICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1dlYkNvbnRyb2xsZXJfaW5zdGFuY2VzLCBcIm1cIiwgX1dlYkNvbnRyb2xsZXJfdXBkYXRlTG9jYWxTdG9yYWdlKS5jYWxsKHRoaXMpO1xyXG59LCBfV2ViQ29udHJvbGxlcl9yZW5kZXJUYWJzID0gZnVuY3Rpb24gX1dlYkNvbnRyb2xsZXJfcmVuZGVyVGFicygpIHtcclxuICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1dlYkNvbnRyb2xsZXJfYWxsVGFiLCBuZXcgVGFiKCcudGFiX19pdGVtOmZpcnN0LWNoaWxkIGEnLCAoKSA9PiB7XHJcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfV2ViQ29udHJvbGxlcl9pbnN0YW5jZXMsIFwibVwiLCBfV2ViQ29udHJvbGxlcl91cGRhdGVSZXN0YXVyYW50TGlzdCkuY2FsbCh0aGlzLCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9XZWJDb250cm9sbGVyX3dlYlZpZXcsIFwiZlwiKS5jYXRlZ29yeUZpbHRlciwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfV2ViQ29udHJvbGxlcl93ZWJWaWV3LCBcImZcIikuc29ydGluZ0ZpbHRlcik7XHJcbiAgICB9KSwgXCJmXCIpO1xyXG4gICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfV2ViQ29udHJvbGxlcl9mYXZvcml0ZVRhYiwgbmV3IFRhYignLnRhYl9faXRlbTpsYXN0LWNoaWxkIGEnLCAoKSA9PiB7XHJcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfV2ViQ29udHJvbGxlcl9pbnN0YW5jZXMsIFwibVwiLCBfV2ViQ29udHJvbGxlcl91cGRhdGVGYXZvcml0ZVJlc3RhdXJhbnRMaXN0KS5jYWxsKHRoaXMpO1xyXG4gICAgfSksIFwiZlwiKTtcclxufSwgX1dlYkNvbnRyb2xsZXJfc3luY0xvY2FsU3RvcmFnZUFuZERvbWFpbiA9IGZ1bmN0aW9uIF9XZWJDb250cm9sbGVyX3N5bmNMb2NhbFN0b3JhZ2VBbmREb21haW4oKSB7XHJcbiAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9XZWJDb250cm9sbGVyX3Jlc3RhdXJhbnRNYW5hZ2VyLCBcImZcIikubG9hZFJlc3RhdXJhbnRzRnJvbUxvY2FsU3RvcmFnZSgpO1xyXG59LCBfV2ViQ29udHJvbGxlcl91cGRhdGVMb2NhbFN0b3JhZ2UgPSBmdW5jdGlvbiBfV2ViQ29udHJvbGxlcl91cGRhdGVMb2NhbFN0b3JhZ2UoKSB7XHJcbiAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9XZWJDb250cm9sbGVyX3Jlc3RhdXJhbnRNYW5hZ2VyLCBcImZcIikudXBkYXRlTG9jYWxTdG9yYWdlKCk7XHJcbn0sIF9XZWJDb250cm9sbGVyX3VwZGF0ZVJlc3RhdXJhbnRMaXN0ID0gZnVuY3Rpb24gX1dlYkNvbnRyb2xsZXJfdXBkYXRlUmVzdGF1cmFudExpc3QoY2F0ZWdvcnksIG9wdGlvbikge1xyXG4gICAgY29uc3QgcmVzdWx0ID0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfV2ViQ29udHJvbGxlcl9yZXN0YXVyYW50TWFuYWdlciwgXCJmXCIpLmZpbHRlcmVkQW5kU29ydGVkQnlPcHRpb25zKGNhdGVnb3J5LCBvcHRpb24pO1xyXG4gICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfV2ViQ29udHJvbGxlcl93ZWJWaWV3LCBcImZcIikucmVzdGF1cmFudHMgPSByZXN1bHQ7XHJcbn0sIF9XZWJDb250cm9sbGVyX3VwZGF0ZUZhdm9yaXRlUmVzdGF1cmFudExpc3QgPSBmdW5jdGlvbiBfV2ViQ29udHJvbGxlcl91cGRhdGVGYXZvcml0ZVJlc3RhdXJhbnRMaXN0KCkge1xyXG4gICAgY29uc3QgZmF2b3JpdGVSZXN0YXVyYW50cyA9IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1dlYkNvbnRyb2xsZXJfcmVzdGF1cmFudE1hbmFnZXIsIFwiZlwiKS5yZXN0YXVyYW50cy5maWx0ZXIoKHJlc3RhdXJhbnQpID0+IHJlc3RhdXJhbnQuZmF2b3JpdGUpO1xyXG4gICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfV2ViQ29udHJvbGxlcl93ZWJWaWV3LCBcImZcIikucmVzdGF1cmFudHMgPSBmYXZvcml0ZVJlc3RhdXJhbnRzO1xyXG59LCBfV2ViQ29udHJvbGxlcl9hZGRSZXN0YXVyYW50U3VibWl0RXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uIF9XZWJDb250cm9sbGVyX2FkZFJlc3RhdXJhbnRTdWJtaXRFdmVudExpc3RlbmVyKCkge1xyXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihSRVNUQVVSQU5UX0ZPUk1fRVZFTlRTLnN1Ym1pdCwgKGUpID0+IHtcclxuICAgICAgICBjb25zdCB7IGZvcm1EYXRhIH0gPSBlLmRldGFpbDtcclxuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9XZWJDb250cm9sbGVyX3Jlc3RhdXJhbnRNYW5hZ2VyLCBcImZcIikuYWRkKGZvcm1EYXRhKTtcclxuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9XZWJDb250cm9sbGVyX2luc3RhbmNlcywgXCJtXCIsIF9XZWJDb250cm9sbGVyX3VwZGF0ZUxvY2FsU3RvcmFnZSkuY2FsbCh0aGlzKTtcclxuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9XZWJDb250cm9sbGVyX2luc3RhbmNlcywgXCJtXCIsIF9XZWJDb250cm9sbGVyX2hhbmRsZUZvcm1TdWJtaXRVcGRhdGVVSSkuY2FsbCh0aGlzLCBmb3JtRGF0YS5jYXRlZ29yeSk7XHJcbiAgICB9KTtcclxufSwgX1dlYkNvbnRyb2xsZXJfaGFuZGxlRm9ybVN1Ym1pdFVwZGF0ZVVJID0gZnVuY3Rpb24gX1dlYkNvbnRyb2xsZXJfaGFuZGxlRm9ybVN1Ym1pdFVwZGF0ZVVJKGNhdGVnb3J5KSB7XHJcbiAgICBpZiAoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfV2ViQ29udHJvbGxlcl9mYXZvcml0ZVRhYiwgXCJmXCIpLmlzQWN0aXZlKCkpIHtcclxuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9XZWJDb250cm9sbGVyX2luc3RhbmNlcywgXCJtXCIsIF9XZWJDb250cm9sbGVyX3VwZGF0ZUZhdm9yaXRlUmVzdGF1cmFudExpc3QpLmNhbGwodGhpcyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9XZWJDb250cm9sbGVyX2luc3RhbmNlcywgXCJtXCIsIF9XZWJDb250cm9sbGVyX3VwZGF0ZVJlc3RhdXJhbnRMaXN0KS5jYWxsKHRoaXMsIGNhdGVnb3J5LCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9XZWJDb250cm9sbGVyX3dlYlZpZXcsIFwiZlwiKS5zb3J0aW5nRmlsdGVyKTtcclxuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9XZWJDb250cm9sbGVyX3dlYlZpZXcsIFwiZlwiKS5jYXRlZ29yeUZpbHRlciA9IGNhdGVnb3J5O1xyXG4gICAgfVxyXG59LCBfV2ViQ29udHJvbGxlcl9hZGRGaWx0ZXJPbmNoYW5nZUV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbiBfV2ViQ29udHJvbGxlcl9hZGRGaWx0ZXJPbmNoYW5nZUV2ZW50TGlzdGVuZXIoKSB7XHJcbiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcucmVzdGF1cmFudC1maWx0ZXItY29udGFpbmVyJykuYWRkRXZlbnRMaXN0ZW5lcihTRUxFQ1RfRVZFTlRTLm9uY2hhbmdlLCAoKSA9PiB7XHJcbiAgICAgICAgaWYgKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1dlYkNvbnRyb2xsZXJfZmF2b3JpdGVUYWIsIFwiZlwiKS5pc0FjdGl2ZSgpKSB7XHJcbiAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1dlYkNvbnRyb2xsZXJfaW5zdGFuY2VzLCBcIm1cIiwgX1dlYkNvbnRyb2xsZXJfdXBkYXRlRmF2b3JpdGVSZXN0YXVyYW50TGlzdCkuY2FsbCh0aGlzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1dlYkNvbnRyb2xsZXJfaW5zdGFuY2VzLCBcIm1cIiwgX1dlYkNvbnRyb2xsZXJfdXBkYXRlUmVzdGF1cmFudExpc3QpLmNhbGwodGhpcywgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfV2ViQ29udHJvbGxlcl93ZWJWaWV3LCBcImZcIikuY2F0ZWdvcnlGaWx0ZXIsIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1dlYkNvbnRyb2xsZXJfd2ViVmlldywgXCJmXCIpLnNvcnRpbmdGaWx0ZXIpO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59O1xyXG4iLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBHTkIgZXh0ZW5kcyBIVE1MRWxlbWVudCB7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIGNvbnN0IHRlbXBsYXRlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3RlbXBsYXRlLWhlYWRlcicpO1xyXG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSB0ZW1wbGF0ZS5jb250ZW50LmNsb25lTm9kZSh0cnVlKTtcclxuICAgICAgICB0aGlzLmFwcGVuZENoaWxkKGNvbnRlbnQpO1xyXG4gICAgfVxyXG4gICAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XHJcbiAgICAgICAgY29uc3QgYnV0dG9uID0gdGhpcy5xdWVyeVNlbGVjdG9yKCcuZ25iX19idXR0b24nKTtcclxuICAgICAgICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1vZGFsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2FkZE1vZGFsJyk7XHJcbiAgICAgICAgICAgIG1vZGFsLm9wZW5Nb2RhbCgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiIsInZhciBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0ID0gKHRoaXMgJiYgdGhpcy5fX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KSB8fCBmdW5jdGlvbiAocmVjZWl2ZXIsIHN0YXRlLCBraW5kLCBmKSB7XHJcbiAgICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBnZXR0ZXJcIik7XHJcbiAgICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcclxuICAgIHJldHVybiBraW5kID09PSBcIm1cIiA/IGYgOiBraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlcikgOiBmID8gZi52YWx1ZSA6IHN0YXRlLmdldChyZWNlaXZlcik7XHJcbn07XHJcbnZhciBfUmVzdGF1cmFudERldGFpbF9pbnN0YW5jZXMsIF9SZXN0YXVyYW50RGV0YWlsX2NyZWF0ZVJlc3RhdXJhbnREZXRhaWxDb250ZW50LCBfUmVzdGF1cmFudERldGFpbF9nZXRDYXRlZ29yeUljb25VcmwsIF9SZXN0YXVyYW50RGV0YWlsX3NldHVwTGlua0VsZW1lbnQsIF9SZXN0YXVyYW50RGV0YWlsX2hhbmRsZUZhdm9yaXRlQ2xpY2ssIF9SZXN0YXVyYW50RGV0YWlsX3RvZ2dsZUZhdm9yaXRlLCBfUmVzdGF1cmFudERldGFpbF91cGRhdGVGYXZvcml0ZUljb24sIF9SZXN0YXVyYW50RGV0YWlsX2hhbmRsZUJ1dHRvbkNsaWNrLCBfUmVzdGF1cmFudERldGFpbF9oYW5kbGVEZWxldGUsIF9SZXN0YXVyYW50RGV0YWlsX2hhbmRsZUNsb3NlO1xyXG5leHBvcnQgY29uc3QgUkVTVEFVUkFOVF9ERVRBSUxfRVZFTlRTID0ge1xyXG4gICAgZGVsZXRlOiAncmVzdGF1cmFudEl0ZW1EZWxldGUnLFxyXG4gICAgY2xvc2U6ICdyZXN0YXVyYW50RGV0YWlsQ2xvc2UnLFxyXG59O1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZXN0YXVyYW50RGV0YWlsIGV4dGVuZHMgSFRNTEVsZW1lbnQge1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICBfUmVzdGF1cmFudERldGFpbF9pbnN0YW5jZXMuYWRkKHRoaXMpO1xyXG4gICAgICAgIGNvbnN0IHRlbXBsYXRlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3RlbXBsYXRlLXJlc3RhdXJhbnQtZGV0YWlsJyk7XHJcbiAgICAgICAgY29uc3QgY29udGVudCA9IHRlbXBsYXRlLmNvbnRlbnQuY2xvbmVOb2RlKHRydWUpO1xyXG4gICAgICAgIHRoaXMuYXBwZW5kQ2hpbGQoY29udGVudCk7XHJcbiAgICB9XHJcbiAgICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcclxuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZXN0YXVyYW50RGV0YWlsX2luc3RhbmNlcywgXCJtXCIsIF9SZXN0YXVyYW50RGV0YWlsX3VwZGF0ZUZhdm9yaXRlSWNvbikuY2FsbCh0aGlzKTtcclxuICAgICAgICB0aGlzLnF1ZXJ5U2VsZWN0b3IoJy5yZXN0YXVyYW50LWRldGFpbF9fZmF2b3JpdGUtYnV0dG9uJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZXN0YXVyYW50RGV0YWlsX2luc3RhbmNlcywgXCJtXCIsIF9SZXN0YXVyYW50RGV0YWlsX2hhbmRsZUZhdm9yaXRlQ2xpY2spLmJpbmQodGhpcykpO1xyXG4gICAgICAgIHRoaXMucXVlcnlTZWxlY3RvcignLmJ1dHRvbi1jb250YWluZXInKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1Jlc3RhdXJhbnREZXRhaWxfaW5zdGFuY2VzLCBcIm1cIiwgX1Jlc3RhdXJhbnREZXRhaWxfaGFuZGxlQnV0dG9uQ2xpY2spLmJpbmQodGhpcykpO1xyXG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc3RhdXJhbnREZXRhaWxPcGVuJywgKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3RhdXJhbnREZXRhaWxDb250ZW50ID0gZXZlbnQuZGV0YWlsO1xyXG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZXN0YXVyYW50RGV0YWlsX2luc3RhbmNlcywgXCJtXCIsIF9SZXN0YXVyYW50RGV0YWlsX2NyZWF0ZVJlc3RhdXJhbnREZXRhaWxDb250ZW50KS5jYWxsKHRoaXMsIHJlc3RhdXJhbnREZXRhaWxDb250ZW50KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG5fUmVzdGF1cmFudERldGFpbF9pbnN0YW5jZXMgPSBuZXcgV2Vha1NldCgpLCBfUmVzdGF1cmFudERldGFpbF9jcmVhdGVSZXN0YXVyYW50RGV0YWlsQ29udGVudCA9IGZ1bmN0aW9uIF9SZXN0YXVyYW50RGV0YWlsX2NyZWF0ZVJlc3RhdXJhbnREZXRhaWxDb250ZW50KHJlc3RhdXJhbnREZXRhaWxDb250ZW50KSB7XHJcbiAgICBjb25zdCByZXN0YXVyYW50RGV0YWlsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmRldGFpbC1jb250YWluZXInKTtcclxuICAgIGNvbnN0IHsgY2F0ZWdvcnksIG5hbWUsIGRpc3RhbmNlLCBkZXNjcmlwdGlvbiwgbGluayB9ID0gcmVzdGF1cmFudERldGFpbENvbnRlbnQ7XHJcbiAgICByZXN0YXVyYW50RGV0YWlsLnF1ZXJ5U2VsZWN0b3IoJy5jYXRlZ29yeS1pY29uJykuc3JjID0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVzdGF1cmFudERldGFpbF9pbnN0YW5jZXMsIFwibVwiLCBfUmVzdGF1cmFudERldGFpbF9nZXRDYXRlZ29yeUljb25VcmwpLmNhbGwodGhpcywgY2F0ZWdvcnkpO1xyXG4gICAgcmVzdGF1cmFudERldGFpbC5xdWVyeVNlbGVjdG9yKCcuY2F0ZWdvcnktaWNvbicpLmFsdCA9IGNhdGVnb3J5O1xyXG4gICAgcmVzdGF1cmFudERldGFpbC5xdWVyeVNlbGVjdG9yKCcucmVzdGF1cmFudC1kZXRhaWxfX25hbWUnKS50ZXh0Q29udGVudCA9IG5hbWU7XHJcbiAgICByZXN0YXVyYW50RGV0YWlsLnF1ZXJ5U2VsZWN0b3IoJy5yZXN0YXVyYW50LWRldGFpbF9fZGlzdGFuY2UnKS50ZXh0Q29udGVudCA9IGDsuqDtjbzsiqTroZzrtoDthLAgJHtkaXN0YW5jZX3rtoQg64K0YDtcclxuICAgIHJlc3RhdXJhbnREZXRhaWwucXVlcnlTZWxlY3RvcignLnJlc3RhdXJhbnQtZGV0YWlsX19kZXNjcmlwdGlvbicpLnRleHRDb250ZW50ID0gZGVzY3JpcHRpb247XHJcbiAgICBjb25zdCBsaW5rRWxlbWVudCA9IHJlc3RhdXJhbnREZXRhaWwucXVlcnlTZWxlY3RvcignLnJlc3RhdXJhbnQtZGV0YWlsX19saW5rJyk7XHJcbiAgICBjb25zdCB1cGRhdGVkTGlua0VsZW1lbnQgPSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZXN0YXVyYW50RGV0YWlsX2luc3RhbmNlcywgXCJtXCIsIF9SZXN0YXVyYW50RGV0YWlsX3NldHVwTGlua0VsZW1lbnQpLmNhbGwodGhpcywgbGlua0VsZW1lbnQsIGxpbmspO1xyXG4gICAgbGlua0VsZW1lbnQucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQodXBkYXRlZExpbmtFbGVtZW50LCBsaW5rRWxlbWVudCk7XHJcbn0sIF9SZXN0YXVyYW50RGV0YWlsX2dldENhdGVnb3J5SWNvblVybCA9IGZ1bmN0aW9uIF9SZXN0YXVyYW50RGV0YWlsX2dldENhdGVnb3J5SWNvblVybChjYXRlZ29yeSkge1xyXG4gICAgaWYgKGNhdGVnb3J5ID09PSAn7ZWc7IudJylcclxuICAgICAgICByZXR1cm4gJy4vY2F0ZWdvcnkta29yZWFuLnBuZyc7XHJcbiAgICBpZiAoY2F0ZWdvcnkgPT09ICfspJHsi50nKVxyXG4gICAgICAgIHJldHVybiAnLi9jYXRlZ29yeS1jaGluZXNlLnBuZyc7XHJcbiAgICBpZiAoY2F0ZWdvcnkgPT09ICfsnbzsi50nKVxyXG4gICAgICAgIHJldHVybiAnLi9jYXRlZ29yeS1qYXBhbmVzZS5wbmcnO1xyXG4gICAgaWYgKGNhdGVnb3J5ID09PSAn7JaR7IudJylcclxuICAgICAgICByZXR1cm4gJy4vY2F0ZWdvcnktd2VzdGVybi5wbmcnO1xyXG4gICAgaWYgKGNhdGVnb3J5ID09PSAn7JWE7Iuc7JWIJylcclxuICAgICAgICByZXR1cm4gJy4vY2F0ZWdvcnktYXNpYW4ucG5nJztcclxuICAgIGlmIChjYXRlZ29yeSA9PT0gJ+q4sO2DgCcpXHJcbiAgICAgICAgcmV0dXJuICcuL2NhdGVnb3J5LWV0Yy5wbmcnO1xyXG4gICAgcmV0dXJuICcnO1xyXG59LCBfUmVzdGF1cmFudERldGFpbF9zZXR1cExpbmtFbGVtZW50ID0gZnVuY3Rpb24gX1Jlc3RhdXJhbnREZXRhaWxfc2V0dXBMaW5rRWxlbWVudChsaW5rRWxlbWVudCwgbGluaykge1xyXG4gICAgY29uc3QgdXBkYXRlZExpbmtFbGVtZW50ID0gbGlua0VsZW1lbnQuY2xvbmVOb2RlKHRydWUpO1xyXG4gICAgdXBkYXRlZExpbmtFbGVtZW50LnRleHRDb250ZW50ID0gbGluaztcclxuICAgIHVwZGF0ZWRMaW5rRWxlbWVudC5ocmVmID0gbGluaztcclxuICAgIHVwZGF0ZWRMaW5rRWxlbWVudC50YXJnZXQgPSAnX2JsYW5rJztcclxuICAgIHVwZGF0ZWRMaW5rRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChldmVudCkgPT4ge1xyXG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gdXBkYXRlZExpbmtFbGVtZW50O1xyXG59LCBfUmVzdGF1cmFudERldGFpbF9oYW5kbGVGYXZvcml0ZUNsaWNrID0gZnVuY3Rpb24gX1Jlc3RhdXJhbnREZXRhaWxfaGFuZGxlRmF2b3JpdGVDbGljaygpIHtcclxuICAgIGNvbnN0IGlzRmF2b3JpdGUgPSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZXN0YXVyYW50RGV0YWlsX2luc3RhbmNlcywgXCJtXCIsIF9SZXN0YXVyYW50RGV0YWlsX3RvZ2dsZUZhdm9yaXRlKS5jYWxsKHRoaXMpO1xyXG4gICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVzdGF1cmFudERldGFpbF9pbnN0YW5jZXMsIFwibVwiLCBfUmVzdGF1cmFudERldGFpbF91cGRhdGVGYXZvcml0ZUljb24pLmNhbGwodGhpcywgaXNGYXZvcml0ZSk7XHJcbn0sIF9SZXN0YXVyYW50RGV0YWlsX3RvZ2dsZUZhdm9yaXRlID0gZnVuY3Rpb24gX1Jlc3RhdXJhbnREZXRhaWxfdG9nZ2xlRmF2b3JpdGUoKSB7XHJcbiAgICBjb25zdCBpc0Zhdm9yaXRlID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZmF2b3JpdGUnKSkgfHwgZmFsc2U7XHJcbiAgICBjb25zdCB1cGRhdGVkRmF2b3JpdGUgPSAhaXNGYXZvcml0ZTtcclxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdmYXZvcml0ZScsIHVwZGF0ZWRGYXZvcml0ZSk7XHJcbiAgICByZXR1cm4gdXBkYXRlZEZhdm9yaXRlO1xyXG59LCBfUmVzdGF1cmFudERldGFpbF91cGRhdGVGYXZvcml0ZUljb24gPSBmdW5jdGlvbiBfUmVzdGF1cmFudERldGFpbF91cGRhdGVGYXZvcml0ZUljb24oaXNGYXZvcml0ZSkge1xyXG4gICAgY29uc3QgZmF2b3JpdGVJY29uID0gdGhpcy5xdWVyeVNlbGVjdG9yKCcucmVzdGF1cmFudC1kZXRhaWxfX2Zhdm9yaXRlLWJ1dHRvbiBpbWcnKTtcclxuICAgIGNvbnN0IGZhdm9yaXRlID0gaXNGYXZvcml0ZSAhPT0gdW5kZWZpbmVkID8gaXNGYXZvcml0ZSA6IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2Zhdm9yaXRlJykpIHx8IGZhbHNlO1xyXG4gICAgZmF2b3JpdGVJY29uLnNyYyA9IGZhdm9yaXRlID8gJy4vZmF2b3JpdGUtaWNvbi1maWxsZWQucG5nJyA6ICcuL2Zhdm9yaXRlLWljb24tbGluZWQucG5nJztcclxufSwgX1Jlc3RhdXJhbnREZXRhaWxfaGFuZGxlQnV0dG9uQ2xpY2sgPSBmdW5jdGlvbiBfUmVzdGF1cmFudERldGFpbF9oYW5kbGVCdXR0b25DbGljayhldmVudCkge1xyXG4gICAgY29uc29sZS5sb2coJ2J1dHRvbiBDb250YWluZXInKTtcclxuICAgIGlmIChldmVudC50YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCdidXR0b24tLXByaW1hcnknKSkge1xyXG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1Jlc3RhdXJhbnREZXRhaWxfaW5zdGFuY2VzLCBcIm1cIiwgX1Jlc3RhdXJhbnREZXRhaWxfaGFuZGxlQ2xvc2UpLmNhbGwodGhpcyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChldmVudC50YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCdidXR0b24tLXNlY29uZGFyeScpKSB7XHJcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVzdGF1cmFudERldGFpbF9pbnN0YW5jZXMsIFwibVwiLCBfUmVzdGF1cmFudERldGFpbF9oYW5kbGVEZWxldGUpLmNhbGwodGhpcyk7XHJcbiAgICB9XHJcbn0sIF9SZXN0YXVyYW50RGV0YWlsX2hhbmRsZURlbGV0ZSA9IGZ1bmN0aW9uIF9SZXN0YXVyYW50RGV0YWlsX2hhbmRsZURlbGV0ZSgpIHtcclxuICAgIGNvbnN0IHJlc3RhdXJhbnRJZCA9IHRoaXMuZ2V0QXR0cmlidXRlKCdkYXRhLWlkJyk7XHJcbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShyZXN0YXVyYW50SWQpO1xyXG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudChSRVNUQVVSQU5UX0RFVEFJTF9FVkVOVFMuZGVsZXRlLCB7XHJcbiAgICAgICAgYnViYmxlczogdHJ1ZSxcclxuICAgICAgICBkZXRhaWw6IHsgaWQ6IHJlc3RhdXJhbnRJZCB9LFxyXG4gICAgfSkpO1xyXG4gICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVzdGF1cmFudERldGFpbF9pbnN0YW5jZXMsIFwibVwiLCBfUmVzdGF1cmFudERldGFpbF9oYW5kbGVDbG9zZSkuY2FsbCh0aGlzKTtcclxufSwgX1Jlc3RhdXJhbnREZXRhaWxfaGFuZGxlQ2xvc2UgPSBmdW5jdGlvbiBfUmVzdGF1cmFudERldGFpbF9oYW5kbGVDbG9zZSgpIHtcclxuICAgIGNvbnNvbGUubG9nKCdjbG9zZScpO1xyXG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudChSRVNUQVVSQU5UX0RFVEFJTF9FVkVOVFMuY2xvc2UsIHtcclxuICAgICAgICBidWJibGVzOiB0cnVlLFxyXG4gICAgfSkpO1xyXG59O1xyXG4iLCJ2YXIgX19jbGFzc1ByaXZhdGVGaWVsZFNldCA9ICh0aGlzICYmIHRoaXMuX19jbGFzc1ByaXZhdGVGaWVsZFNldCkgfHwgZnVuY3Rpb24gKHJlY2VpdmVyLCBzdGF0ZSwgdmFsdWUsIGtpbmQsIGYpIHtcclxuICAgIGlmIChraW5kID09PSBcIm1cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgbWV0aG9kIGlzIG5vdCB3cml0YWJsZVwiKTtcclxuICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIHNldHRlclwiKTtcclxuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHdyaXRlIHByaXZhdGUgbWVtYmVyIHRvIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XHJcbiAgICByZXR1cm4gKGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyLCB2YWx1ZSkgOiBmID8gZi52YWx1ZSA9IHZhbHVlIDogc3RhdGUuc2V0KHJlY2VpdmVyLCB2YWx1ZSkpLCB2YWx1ZTtcclxufTtcclxudmFyIF9fY2xhc3NQcml2YXRlRmllbGRHZXQgPSAodGhpcyAmJiB0aGlzLl9fY2xhc3NQcml2YXRlRmllbGRHZXQpIHx8IGZ1bmN0aW9uIChyZWNlaXZlciwgc3RhdGUsIGtpbmQsIGYpIHtcclxuICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlclwiKTtcclxuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xyXG4gICAgcmV0dXJuIGtpbmQgPT09IFwibVwiID8gZiA6IGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyKSA6IGYgPyBmLnZhbHVlIDogc3RhdGUuZ2V0KHJlY2VpdmVyKTtcclxufTtcclxudmFyIF9Nb2RhbF9pbnN0YW5jZXMsIF9Nb2RhbF9zaGFkb3dSb290LCBfTW9kYWxfaGFuZGxlQ2xvc2VNb2RhbDtcclxuaW1wb3J0IHsgUkVTVEFVUkFOVF9ERVRBSUxfRVZFTlRTIH0gZnJvbSAnLi9SZXN0YXVyYW50RGV0YWlsJztcclxuaW1wb3J0IHsgUkVTVEFVUkFOVF9GT1JNX0VWRU5UUyB9IGZyb20gJy4vUmVzdGF1cmFudEZvcm0nO1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNb2RhbCBleHRlbmRzIEhUTUxFbGVtZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgX01vZGFsX2luc3RhbmNlcy5hZGQodGhpcyk7XHJcbiAgICAgICAgX01vZGFsX3NoYWRvd1Jvb3Quc2V0KHRoaXMsIHZvaWQgMCk7XHJcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfTW9kYWxfc2hhZG93Um9vdCwgdGhpcy5hdHRhY2hTaGFkb3coeyBtb2RlOiAnb3BlbicgfSksIFwiZlwiKTtcclxuICAgICAgICBjb25zdCB0ZW1wbGF0ZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyN0ZW1wbGF0ZS1tb2RhbCcpO1xyXG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSB0ZW1wbGF0ZS5jb250ZW50LmNsb25lTm9kZSh0cnVlKTtcclxuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9Nb2RhbF9zaGFkb3dSb290LCBcImZcIikuYXBwZW5kQ2hpbGQoY29udGVudCk7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcclxuICAgICAgICByZXR1cm4gWydoZWlnaHQnXTtcclxuICAgIH1cclxuICAgIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhuYW1lLCBvbGRWYWx1ZSwgbmV3VmFsdWUpIHtcclxuICAgICAgICBpZiAobmFtZSA9PT0gJ2hlaWdodCcpIHtcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXIoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgY29uc3QgbW9kYWxDb250YWluZXIgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignLm1vZGFsLWNvbnRhaW5lcicpO1xyXG4gICAgICAgIGlmIChtb2RhbENvbnRhaW5lcikge1xyXG4gICAgICAgICAgICBtb2RhbENvbnRhaW5lci5zdHlsZS5oZWlnaHQgPSB0aGlzLmdldEF0dHJpYnV0ZSgnaGVpZ2h0Jyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1saW5lcy1wZXItZnVuY3Rpb25cclxuICAgIGNvbm5lY3RlZENhbGxiYWNrKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmlkID09PSAnYWRkTW9kYWwnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihSRVNUQVVSQU5UX0ZPUk1fRVZFTlRTLnN1Ym1pdCwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfTW9kYWxfaW5zdGFuY2VzLCBcIm1cIiwgX01vZGFsX2hhbmRsZUNsb3NlTW9kYWwpLmJpbmQodGhpcykpO1xyXG4gICAgICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoUkVTVEFVUkFOVF9GT1JNX0VWRU5UUy5yZXNldCwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfTW9kYWxfaW5zdGFuY2VzLCBcIm1cIiwgX01vZGFsX2hhbmRsZUNsb3NlTW9kYWwpLmJpbmQodGhpcykpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0aGlzLmlkID09PSAnZGV0YWlsTW9kYWwnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihSRVNUQVVSQU5UX0RFVEFJTF9FVkVOVFMuZGVsZXRlLCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9Nb2RhbF9pbnN0YW5jZXMsIFwibVwiLCBfTW9kYWxfaGFuZGxlQ2xvc2VNb2RhbCkuYmluZCh0aGlzKSk7XHJcbiAgICAgICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihSRVNUQVVSQU5UX0RFVEFJTF9FVkVOVFMuY2xvc2UsIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX01vZGFsX2luc3RhbmNlcywgXCJtXCIsIF9Nb2RhbF9oYW5kbGVDbG9zZU1vZGFsKS5iaW5kKHRoaXMpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfTW9kYWxfc2hhZG93Um9vdCwgXCJmXCIpLnF1ZXJ5U2VsZWN0b3IoJy5tb2RhbC1iYWNrZHJvcCcpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfTW9kYWxfaW5zdGFuY2VzLCBcIm1cIiwgX01vZGFsX2hhbmRsZUNsb3NlTW9kYWwpLmJpbmQodGhpcykpO1xyXG4gICAgfVxyXG4gICAgb3Blbk1vZGFsKCkge1xyXG4gICAgICAgIGNvbnN0IG1vZGFsID0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfTW9kYWxfc2hhZG93Um9vdCwgXCJmXCIpLnF1ZXJ5U2VsZWN0b3IoJy5tb2RhbCcpO1xyXG4gICAgICAgIG1vZGFsLmNsYXNzTGlzdC5hZGQoJ21vZGFsLS1vcGVuJyk7XHJcbiAgICB9XHJcbn1cclxuX01vZGFsX3NoYWRvd1Jvb3QgPSBuZXcgV2Vha01hcCgpLCBfTW9kYWxfaW5zdGFuY2VzID0gbmV3IFdlYWtTZXQoKSwgX01vZGFsX2hhbmRsZUNsb3NlTW9kYWwgPSBmdW5jdGlvbiBfTW9kYWxfaGFuZGxlQ2xvc2VNb2RhbCgpIHtcclxuICAgIGNvbnN0IG1vZGFsID0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfTW9kYWxfc2hhZG93Um9vdCwgXCJmXCIpLnF1ZXJ5U2VsZWN0b3IoJy5tb2RhbCcpO1xyXG4gICAgbW9kYWwuY2xhc3NMaXN0LnJlbW92ZSgnbW9kYWwtLW9wZW4nKTtcclxufTtcclxuIiwidmFyIF9fY2xhc3NQcml2YXRlRmllbGRHZXQgPSAodGhpcyAmJiB0aGlzLl9fY2xhc3NQcml2YXRlRmllbGRHZXQpIHx8IGZ1bmN0aW9uIChyZWNlaXZlciwgc3RhdGUsIGtpbmQsIGYpIHtcclxuICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlclwiKTtcclxuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xyXG4gICAgcmV0dXJuIGtpbmQgPT09IFwibVwiID8gZiA6IGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyKSA6IGYgPyBmLnZhbHVlIDogc3RhdGUuZ2V0KHJlY2VpdmVyKTtcclxufTtcclxudmFyIF9SZXN0YXVyYW50SXRlbV9pbnN0YW5jZXMsIF9SZXN0YXVyYW50SXRlbV9pbml0aWFsaXplLCBfUmVzdGF1cmFudEl0ZW1fc2V0dXBUZW1wbGF0ZSwgX1Jlc3RhdXJhbnRJdGVtX2JpbmRFdmVudExpc3RlbmVycywgX1Jlc3RhdXJhbnRJdGVtX2luaXRSZXN0YXVyYW50SXRlbSwgX1Jlc3RhdXJhbnRJdGVtX2dldENhdGVnb3J5SWNvblVybCwgX1Jlc3RhdXJhbnRJdGVtX2hhbmRsZUZhdm9yaXRlQ2xpY2ssIF9SZXN0YXVyYW50SXRlbV91cGRhdGVGYXZvcml0ZUljb24sIF9SZXN0YXVyYW50SXRlbV9oYW5kbGVSZXN0YXVyYW50SXRlbUNsaWNrO1xyXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGluZXMtcGVyLWZ1bmN0aW9uICovXHJcbmltcG9ydCBSZXN0YXVyYW50TWFuYWdlciBmcm9tICcuLi8uLi9kb21haW4vUmVzdGF1cmFudE1hbmFnZXIudHMnO1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZXN0YXVyYW50SXRlbSBleHRlbmRzIEhUTUxMSUVsZW1lbnQge1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICBfUmVzdGF1cmFudEl0ZW1faW5zdGFuY2VzLmFkZCh0aGlzKTtcclxuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZXN0YXVyYW50SXRlbV9pbnN0YW5jZXMsIFwibVwiLCBfUmVzdGF1cmFudEl0ZW1faW5pdGlhbGl6ZSkuY2FsbCh0aGlzKTtcclxuICAgIH1cclxuICAgIGdldCByZXN0YXVyYW50KCkge1xyXG4gICAgICAgIGlmICghdGhpcy5kYXRhc2V0LnJlc3RhdXJhbnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHt9O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZSh0aGlzLmRhdGFzZXQucmVzdGF1cmFudCk7XHJcbiAgICB9XHJcbiAgICBzZXQgcmVzdGF1cmFudCh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKCdkYXRhLXJlc3RhdXJhbnQnLCBKU09OLnN0cmluZ2lmeSh2YWx1ZSkpO1xyXG4gICAgfVxyXG4gICAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCkge1xyXG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1Jlc3RhdXJhbnRJdGVtX2luc3RhbmNlcywgXCJtXCIsIF9SZXN0YXVyYW50SXRlbV9pbml0UmVzdGF1cmFudEl0ZW0pLmNhbGwodGhpcyk7XHJcbiAgICB9XHJcbiAgICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcclxuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZXN0YXVyYW50SXRlbV9pbnN0YW5jZXMsIFwibVwiLCBfUmVzdGF1cmFudEl0ZW1faW5pdFJlc3RhdXJhbnRJdGVtKS5jYWxsKHRoaXMpO1xyXG4gICAgfVxyXG59XHJcbl9SZXN0YXVyYW50SXRlbV9pbnN0YW5jZXMgPSBuZXcgV2Vha1NldCgpLCBfUmVzdGF1cmFudEl0ZW1faW5pdGlhbGl6ZSA9IGZ1bmN0aW9uIF9SZXN0YXVyYW50SXRlbV9pbml0aWFsaXplKCkge1xyXG4gICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVzdGF1cmFudEl0ZW1faW5zdGFuY2VzLCBcIm1cIiwgX1Jlc3RhdXJhbnRJdGVtX3NldHVwVGVtcGxhdGUpLmNhbGwodGhpcyk7XHJcbiAgICB0aGlzLmNsYXNzTGlzdC5hZGQoJ3Jlc3RhdXJhbnQnKTtcclxuICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1Jlc3RhdXJhbnRJdGVtX2luc3RhbmNlcywgXCJtXCIsIF9SZXN0YXVyYW50SXRlbV9iaW5kRXZlbnRMaXN0ZW5lcnMpLmNhbGwodGhpcyk7XHJcbiAgICB0aGlzLnJlc3RhdXJhbnRNYW5hZ2VyID0gbmV3IFJlc3RhdXJhbnRNYW5hZ2VyKCk7XHJcbiAgICB0aGlzLnJlc3RhdXJhbnRNYW5hZ2VyLmxvYWRSZXN0YXVyYW50c0Zyb21Mb2NhbFN0b3JhZ2UoKTtcclxuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZXN0YXVyYW50SXRlbV9pbnN0YW5jZXMsIFwibVwiLCBfUmVzdGF1cmFudEl0ZW1faGFuZGxlUmVzdGF1cmFudEl0ZW1DbGljaykuYmluZCh0aGlzKSk7XHJcbn0sIF9SZXN0YXVyYW50SXRlbV9zZXR1cFRlbXBsYXRlID0gZnVuY3Rpb24gX1Jlc3RhdXJhbnRJdGVtX3NldHVwVGVtcGxhdGUoKSB7XHJcbiAgICBjb25zdCB0ZW1wbGF0ZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyN0ZW1wbGF0ZS1yZXN0YXVyYW50LWl0ZW0nKTtcclxuICAgIGNvbnN0IGNvbnRlbnQgPSB0ZW1wbGF0ZS5jb250ZW50LmNsb25lTm9kZSh0cnVlKTtcclxuICAgIHRoaXMuYXBwZW5kQ2hpbGQoY29udGVudCk7XHJcbn0sIF9SZXN0YXVyYW50SXRlbV9iaW5kRXZlbnRMaXN0ZW5lcnMgPSBmdW5jdGlvbiBfUmVzdGF1cmFudEl0ZW1fYmluZEV2ZW50TGlzdGVuZXJzKCkge1xyXG4gICAgdGhpcy5xdWVyeVNlbGVjdG9yKCcucmVzdGF1cmFudF9fZmF2b3JpdGUtYnV0dG9uJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZXN0YXVyYW50SXRlbV9pbnN0YW5jZXMsIFwibVwiLCBfUmVzdGF1cmFudEl0ZW1faGFuZGxlRmF2b3JpdGVDbGljaykuYmluZCh0aGlzKSk7XHJcbn0sIF9SZXN0YXVyYW50SXRlbV9pbml0UmVzdGF1cmFudEl0ZW0gPSBmdW5jdGlvbiBfUmVzdGF1cmFudEl0ZW1faW5pdFJlc3RhdXJhbnRJdGVtKCkge1xyXG4gICAgY29uc3QgeyBjYXRlZ29yeSwgbmFtZSwgZGlzdGFuY2UsIGRlc2NyaXB0aW9uLCBmYXZvcml0ZSB9ID0gdGhpcy5yZXN0YXVyYW50O1xyXG4gICAgdGhpcy5xdWVyeVNlbGVjdG9yKCcucmVzdGF1cmFudF9fbmFtZScpLnRleHRDb250ZW50ID0gbmFtZTtcclxuICAgIHRoaXMucXVlcnlTZWxlY3RvcignLnJlc3RhdXJhbnRfX2Rpc3RhbmNlJykudGV4dENvbnRlbnQgPSBg7Lqg7Y287Iqk66Gc67aA7YSwICR7ZGlzdGFuY2V967aEIOuCtCBgO1xyXG4gICAgdGhpcy5xdWVyeVNlbGVjdG9yKCcucmVzdGF1cmFudF9fZGVzY3JpcHRpb24nKS50ZXh0Q29udGVudCA9IGRlc2NyaXB0aW9uO1xyXG4gICAgdGhpcy5xdWVyeVNlbGVjdG9yKCcuY2F0ZWdvcnktaWNvbicpLnNyYyA9IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1Jlc3RhdXJhbnRJdGVtX2luc3RhbmNlcywgXCJtXCIsIF9SZXN0YXVyYW50SXRlbV9nZXRDYXRlZ29yeUljb25VcmwpLmNhbGwodGhpcywgY2F0ZWdvcnkpO1xyXG4gICAgdGhpcy5xdWVyeVNlbGVjdG9yKCcuY2F0ZWdvcnktaWNvbicpLmFsdCA9IGNhdGVnb3J5O1xyXG4gICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVzdGF1cmFudEl0ZW1faW5zdGFuY2VzLCBcIm1cIiwgX1Jlc3RhdXJhbnRJdGVtX3VwZGF0ZUZhdm9yaXRlSWNvbikuY2FsbCh0aGlzLCBmYXZvcml0ZSk7XHJcbn0sIF9SZXN0YXVyYW50SXRlbV9nZXRDYXRlZ29yeUljb25VcmwgPSBmdW5jdGlvbiBfUmVzdGF1cmFudEl0ZW1fZ2V0Q2F0ZWdvcnlJY29uVXJsKGNhdGVnb3J5KSB7XHJcbiAgICBpZiAoY2F0ZWdvcnkgPT09ICftlZzsi50nKVxyXG4gICAgICAgIHJldHVybiAnLi9jYXRlZ29yeS1rb3JlYW4ucG5nJztcclxuICAgIGlmIChjYXRlZ29yeSA9PT0gJ+ykkeyLnScpXHJcbiAgICAgICAgcmV0dXJuICcuL2NhdGVnb3J5LWNoaW5lc2UucG5nJztcclxuICAgIGlmIChjYXRlZ29yeSA9PT0gJ+ydvOyLnScpXHJcbiAgICAgICAgcmV0dXJuICcuL2NhdGVnb3J5LWphcGFuZXNlLnBuZyc7XHJcbiAgICBpZiAoY2F0ZWdvcnkgPT09ICfslpHsi50nKVxyXG4gICAgICAgIHJldHVybiAnLi9jYXRlZ29yeS13ZXN0ZXJuLnBuZyc7XHJcbiAgICBpZiAoY2F0ZWdvcnkgPT09ICfslYTsi5zslYgnKVxyXG4gICAgICAgIHJldHVybiAnLi9jYXRlZ29yeS1hc2lhbi5wbmcnO1xyXG4gICAgaWYgKGNhdGVnb3J5ID09PSAn6riw7YOAJylcclxuICAgICAgICByZXR1cm4gJy4vY2F0ZWdvcnktZXRjLnBuZyc7XHJcbiAgICByZXR1cm4gJyc7XHJcbn0sIF9SZXN0YXVyYW50SXRlbV9oYW5kbGVGYXZvcml0ZUNsaWNrID0gZnVuY3Rpb24gX1Jlc3RhdXJhbnRJdGVtX2hhbmRsZUZhdm9yaXRlQ2xpY2soZXZlbnQpIHtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgY29uc3QgcmVzdGF1cmFudE5hbWUgPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoJy5yZXN0YXVyYW50X19uYW1lJykudGV4dENvbnRlbnQ7XHJcbiAgICBjb25zdCByZXN0YXVyYW50ID0gdGhpcy5yZXN0YXVyYW50TWFuYWdlci5yZXN0YXVyYW50cy5maW5kKChyZXMpID0+IHJlcy5uYW1lID09PSByZXN0YXVyYW50TmFtZSk7XHJcbiAgICBpZiAocmVzdGF1cmFudCkge1xyXG4gICAgICAgIHJlc3RhdXJhbnQuZmF2b3JpdGUgPSAhcmVzdGF1cmFudC5mYXZvcml0ZTtcclxuICAgICAgICB0aGlzLnJlc3RhdXJhbnRNYW5hZ2VyLnVwZGF0ZUxvY2FsU3RvcmFnZSgpO1xyXG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1Jlc3RhdXJhbnRJdGVtX2luc3RhbmNlcywgXCJtXCIsIF9SZXN0YXVyYW50SXRlbV91cGRhdGVGYXZvcml0ZUljb24pLmNhbGwodGhpcywgcmVzdGF1cmFudC5mYXZvcml0ZSk7XHJcbiAgICB9XHJcbn0sIF9SZXN0YXVyYW50SXRlbV91cGRhdGVGYXZvcml0ZUljb24gPSBmdW5jdGlvbiBfUmVzdGF1cmFudEl0ZW1fdXBkYXRlRmF2b3JpdGVJY29uKGlzRmF2b3JpdGUpIHtcclxuICAgIGNvbnN0IGljb25JbWcgPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoJy5yZXN0YXVyYW50X19mYXZvcml0ZS1idXR0b24gaW1nJyk7XHJcbiAgICBpY29uSW1nLnNyYyA9IGlzRmF2b3JpdGUgPyAnLi9mYXZvcml0ZS1pY29uLWZpbGxlZC5wbmcnIDogJy4vZmF2b3JpdGUtaWNvbi1saW5lZC5wbmcnO1xyXG59LCBfUmVzdGF1cmFudEl0ZW1faGFuZGxlUmVzdGF1cmFudEl0ZW1DbGljayA9IGZ1bmN0aW9uIF9SZXN0YXVyYW50SXRlbV9oYW5kbGVSZXN0YXVyYW50SXRlbUNsaWNrKCkge1xyXG4gICAgY29uc3QgbW9kYWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjZGV0YWlsTW9kYWwnKTtcclxuICAgIG1vZGFsLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdyZXN0YXVyYW50RGV0YWlsT3BlbicsIHsgYnViYmxlczogdHJ1ZSwgZGV0YWlsOiB0aGlzLnJlc3RhdXJhbnQgfSkpO1xyXG4gICAgbW9kYWwub3Blbk1vZGFsKCk7XHJcbn07XHJcblJlc3RhdXJhbnRJdGVtLm9ic2VydmVkQXR0cmlidXRlcyA9IFsnZGF0YS1yZXN0YXVyYW50J107XHJcbiIsInZhciBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0ID0gKHRoaXMgJiYgdGhpcy5fX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KSB8fCBmdW5jdGlvbiAocmVjZWl2ZXIsIHN0YXRlLCBraW5kLCBmKSB7XHJcbiAgICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBnZXR0ZXJcIik7XHJcbiAgICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcclxuICAgIHJldHVybiBraW5kID09PSBcIm1cIiA/IGYgOiBraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlcikgOiBmID8gZi52YWx1ZSA6IHN0YXRlLmdldChyZWNlaXZlcik7XHJcbn07XHJcbnZhciBfUmVzdGF1cmFudExpc3RfaW5zdGFuY2VzLCBfUmVzdGF1cmFudExpc3RfdXBkYXRlTGlzdCwgX1Jlc3RhdXJhbnRMaXN0X2dldFJlc3RhdXJhbnRJdGVtO1xyXG5pbXBvcnQgUmVzdGF1cmFudEl0ZW0gZnJvbSAnLi9SZXN0YXVyYW50SXRlbSc7XHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlc3RhdXJhbnRMaXN0IGV4dGVuZHMgSFRNTFVMaXN0RWxlbWVudCB7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIF9SZXN0YXVyYW50TGlzdF9pbnN0YW5jZXMuYWRkKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuY2xhc3NMaXN0LmFkZCgncmVzdGF1cmFudC1saXN0Jyk7XHJcbiAgICB9XHJcbiAgICBnZXQgcmVzdGF1cmFudHMoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmRhdGFzZXQucmVzdGF1cmFudHMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZSh0aGlzLmRhdGFzZXQucmVzdGF1cmFudHMpO1xyXG4gICAgfVxyXG4gICAgc2V0IHJlc3RhdXJhbnRzKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoJ2RhdGEtcmVzdGF1cmFudHMnLCBKU09OLnN0cmluZ2lmeSh2YWx1ZSkpO1xyXG4gICAgfVxyXG4gICAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCkge1xyXG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1Jlc3RhdXJhbnRMaXN0X2luc3RhbmNlcywgXCJtXCIsIF9SZXN0YXVyYW50TGlzdF91cGRhdGVMaXN0KS5jYWxsKHRoaXMpO1xyXG4gICAgfVxyXG59XHJcbl9SZXN0YXVyYW50TGlzdF9pbnN0YW5jZXMgPSBuZXcgV2Vha1NldCgpLCBfUmVzdGF1cmFudExpc3RfdXBkYXRlTGlzdCA9IGZ1bmN0aW9uIF9SZXN0YXVyYW50TGlzdF91cGRhdGVMaXN0KCkge1xyXG4gICAgdGhpcy50ZXh0Q29udGVudCA9ICcnO1xyXG4gICAgY29uc3QgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XHJcbiAgICB0aGlzLnJlc3RhdXJhbnRzPy5mb3JFYWNoKChyZXN0YXVyYW50KSA9PiB7XHJcbiAgICAgICAgY29uc3QgcmVzdGF1cmFudEl0ZW0gPSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZXN0YXVyYW50TGlzdF9pbnN0YW5jZXMsIFwibVwiLCBfUmVzdGF1cmFudExpc3RfZ2V0UmVzdGF1cmFudEl0ZW0pLmNhbGwodGhpcywgcmVzdGF1cmFudCk7XHJcbiAgICAgICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQocmVzdGF1cmFudEl0ZW0pO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLmFwcGVuZENoaWxkKGZyYWdtZW50KTtcclxufSwgX1Jlc3RhdXJhbnRMaXN0X2dldFJlc3RhdXJhbnRJdGVtID0gZnVuY3Rpb24gX1Jlc3RhdXJhbnRMaXN0X2dldFJlc3RhdXJhbnRJdGVtKHJlc3RhdXJhbnQpIHtcclxuICAgIGNvbnN0IHJlc3RhdXJhbnRJdGVtID0gbmV3IFJlc3RhdXJhbnRJdGVtKCk7XHJcbiAgICByZXN0YXVyYW50SXRlbS5yZXN0YXVyYW50ID0gcmVzdGF1cmFudDtcclxuICAgIHJldHVybiByZXN0YXVyYW50SXRlbTtcclxufTtcclxuUmVzdGF1cmFudExpc3Qub2JzZXJ2ZWRBdHRyaWJ1dGVzID0gWydkYXRhLXJlc3RhdXJhbnRzJ107XHJcbiIsIlxuICAgICAgaW1wb3J0IEFQSSBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luamVjdFN0eWxlc0ludG9TdHlsZVRhZy5qc1wiO1xuICAgICAgaW1wb3J0IGRvbUFQSSBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlRG9tQVBJLmpzXCI7XG4gICAgICBpbXBvcnQgaW5zZXJ0Rm4gZnJvbSBcIiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRCeVNlbGVjdG9yLmpzXCI7XG4gICAgICBpbXBvcnQgc2V0QXR0cmlidXRlcyBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3NldEF0dHJpYnV0ZXNXaXRob3V0QXR0cmlidXRlcy5qc1wiO1xuICAgICAgaW1wb3J0IGluc2VydFN0eWxlRWxlbWVudCBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydFN0eWxlRWxlbWVudC5qc1wiO1xuICAgICAgaW1wb3J0IHN0eWxlVGFnVHJhbnNmb3JtRm4gZnJvbSBcIiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZVRhZ1RyYW5zZm9ybS5qc1wiO1xuICAgICAgaW1wb3J0IGNvbnRlbnQsICogYXMgbmFtZWRFeHBvcnQgZnJvbSBcIiEhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9nbG9iYWwuY3NzXCI7XG4gICAgICBcbiAgICAgIFxuXG52YXIgb3B0aW9ucyA9IHt9O1xuXG5vcHRpb25zLnN0eWxlVGFnVHJhbnNmb3JtID0gc3R5bGVUYWdUcmFuc2Zvcm1Gbjtcbm9wdGlvbnMuc2V0QXR0cmlidXRlcyA9IHNldEF0dHJpYnV0ZXM7XG5cbiAgICAgIG9wdGlvbnMuaW5zZXJ0ID0gaW5zZXJ0Rm4uYmluZChudWxsLCBcImhlYWRcIik7XG4gICAgXG5vcHRpb25zLmRvbUFQSSA9IGRvbUFQSTtcbm9wdGlvbnMuaW5zZXJ0U3R5bGVFbGVtZW50ID0gaW5zZXJ0U3R5bGVFbGVtZW50O1xuXG52YXIgdXBkYXRlID0gQVBJKGNvbnRlbnQsIG9wdGlvbnMpO1xuXG5cblxuZXhwb3J0ICogZnJvbSBcIiEhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9nbG9iYWwuY3NzXCI7XG4gICAgICAgZXhwb3J0IGRlZmF1bHQgY29udGVudCAmJiBjb250ZW50LmxvY2FscyA/IGNvbnRlbnQubG9jYWxzIDogdW5kZWZpbmVkO1xuIiwiXG4gICAgICBpbXBvcnQgQVBJIGZyb20gXCIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5qZWN0U3R5bGVzSW50b1N0eWxlVGFnLmpzXCI7XG4gICAgICBpbXBvcnQgZG9tQVBJIGZyb20gXCIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVEb21BUEkuanNcIjtcbiAgICAgIGltcG9ydCBpbnNlcnRGbiBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydEJ5U2VsZWN0b3IuanNcIjtcbiAgICAgIGltcG9ydCBzZXRBdHRyaWJ1dGVzIGZyb20gXCIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzLmpzXCI7XG4gICAgICBpbXBvcnQgaW5zZXJ0U3R5bGVFbGVtZW50IGZyb20gXCIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0U3R5bGVFbGVtZW50LmpzXCI7XG4gICAgICBpbXBvcnQgc3R5bGVUYWdUcmFuc2Zvcm1GbiBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlVGFnVHJhbnNmb3JtLmpzXCI7XG4gICAgICBpbXBvcnQgY29udGVudCwgKiBhcyBuYW1lZEV4cG9ydCBmcm9tIFwiISEuLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL0duYi5jc3NcIjtcbiAgICAgIFxuICAgICAgXG5cbnZhciBvcHRpb25zID0ge307XG5cbm9wdGlvbnMuc3R5bGVUYWdUcmFuc2Zvcm0gPSBzdHlsZVRhZ1RyYW5zZm9ybUZuO1xub3B0aW9ucy5zZXRBdHRyaWJ1dGVzID0gc2V0QXR0cmlidXRlcztcblxuICAgICAgb3B0aW9ucy5pbnNlcnQgPSBpbnNlcnRGbi5iaW5kKG51bGwsIFwiaGVhZFwiKTtcbiAgICBcbm9wdGlvbnMuZG9tQVBJID0gZG9tQVBJO1xub3B0aW9ucy5pbnNlcnRTdHlsZUVsZW1lbnQgPSBpbnNlcnRTdHlsZUVsZW1lbnQ7XG5cbnZhciB1cGRhdGUgPSBBUEkoY29udGVudCwgb3B0aW9ucyk7XG5cblxuXG5leHBvcnQgKiBmcm9tIFwiISEuLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL0duYi5jc3NcIjtcbiAgICAgICBleHBvcnQgZGVmYXVsdCBjb250ZW50ICYmIGNvbnRlbnQubG9jYWxzID8gY29udGVudC5sb2NhbHMgOiB1bmRlZmluZWQ7XG4iLCJcbiAgICAgIGltcG9ydCBBUEkgZnJvbSBcIiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbmplY3RTdHlsZXNJbnRvU3R5bGVUYWcuanNcIjtcbiAgICAgIGltcG9ydCBkb21BUEkgZnJvbSBcIiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZURvbUFQSS5qc1wiO1xuICAgICAgaW1wb3J0IGluc2VydEZuIGZyb20gXCIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0QnlTZWxlY3Rvci5qc1wiO1xuICAgICAgaW1wb3J0IHNldEF0dHJpYnV0ZXMgZnJvbSBcIiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zZXRBdHRyaWJ1dGVzV2l0aG91dEF0dHJpYnV0ZXMuanNcIjtcbiAgICAgIGltcG9ydCBpbnNlcnRTdHlsZUVsZW1lbnQgZnJvbSBcIiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRTdHlsZUVsZW1lbnQuanNcIjtcbiAgICAgIGltcG9ydCBzdHlsZVRhZ1RyYW5zZm9ybUZuIGZyb20gXCIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVUYWdUcmFuc2Zvcm0uanNcIjtcbiAgICAgIGltcG9ydCBjb250ZW50LCAqIGFzIG5hbWVkRXhwb3J0IGZyb20gXCIhIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vTW9kYWwuY3NzXCI7XG4gICAgICBcbiAgICAgIFxuXG52YXIgb3B0aW9ucyA9IHt9O1xuXG5vcHRpb25zLnN0eWxlVGFnVHJhbnNmb3JtID0gc3R5bGVUYWdUcmFuc2Zvcm1Gbjtcbm9wdGlvbnMuc2V0QXR0cmlidXRlcyA9IHNldEF0dHJpYnV0ZXM7XG5cbiAgICAgIG9wdGlvbnMuaW5zZXJ0ID0gaW5zZXJ0Rm4uYmluZChudWxsLCBcImhlYWRcIik7XG4gICAgXG5vcHRpb25zLmRvbUFQSSA9IGRvbUFQSTtcbm9wdGlvbnMuaW5zZXJ0U3R5bGVFbGVtZW50ID0gaW5zZXJ0U3R5bGVFbGVtZW50O1xuXG52YXIgdXBkYXRlID0gQVBJKGNvbnRlbnQsIG9wdGlvbnMpO1xuXG5cblxuZXhwb3J0ICogZnJvbSBcIiEhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9Nb2RhbC5jc3NcIjtcbiAgICAgICBleHBvcnQgZGVmYXVsdCBjb250ZW50ICYmIGNvbnRlbnQubG9jYWxzID8gY29udGVudC5sb2NhbHMgOiB1bmRlZmluZWQ7XG4iLCJcbiAgICAgIGltcG9ydCBBUEkgZnJvbSBcIiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbmplY3RTdHlsZXNJbnRvU3R5bGVUYWcuanNcIjtcbiAgICAgIGltcG9ydCBkb21BUEkgZnJvbSBcIiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZURvbUFQSS5qc1wiO1xuICAgICAgaW1wb3J0IGluc2VydEZuIGZyb20gXCIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0QnlTZWxlY3Rvci5qc1wiO1xuICAgICAgaW1wb3J0IHNldEF0dHJpYnV0ZXMgZnJvbSBcIiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zZXRBdHRyaWJ1dGVzV2l0aG91dEF0dHJpYnV0ZXMuanNcIjtcbiAgICAgIGltcG9ydCBpbnNlcnRTdHlsZUVsZW1lbnQgZnJvbSBcIiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRTdHlsZUVsZW1lbnQuanNcIjtcbiAgICAgIGltcG9ydCBzdHlsZVRhZ1RyYW5zZm9ybUZuIGZyb20gXCIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVUYWdUcmFuc2Zvcm0uanNcIjtcbiAgICAgIGltcG9ydCBjb250ZW50LCAqIGFzIG5hbWVkRXhwb3J0IGZyb20gXCIhIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vU2VsZWN0LmNzc1wiO1xuICAgICAgXG4gICAgICBcblxudmFyIG9wdGlvbnMgPSB7fTtcblxub3B0aW9ucy5zdHlsZVRhZ1RyYW5zZm9ybSA9IHN0eWxlVGFnVHJhbnNmb3JtRm47XG5vcHRpb25zLnNldEF0dHJpYnV0ZXMgPSBzZXRBdHRyaWJ1dGVzO1xuXG4gICAgICBvcHRpb25zLmluc2VydCA9IGluc2VydEZuLmJpbmQobnVsbCwgXCJoZWFkXCIpO1xuICAgIFxub3B0aW9ucy5kb21BUEkgPSBkb21BUEk7XG5vcHRpb25zLmluc2VydFN0eWxlRWxlbWVudCA9IGluc2VydFN0eWxlRWxlbWVudDtcblxudmFyIHVwZGF0ZSA9IEFQSShjb250ZW50LCBvcHRpb25zKTtcblxuXG5cbmV4cG9ydCAqIGZyb20gXCIhIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vU2VsZWN0LmNzc1wiO1xuICAgICAgIGV4cG9ydCBkZWZhdWx0IGNvbnRlbnQgJiYgY29udGVudC5sb2NhbHMgPyBjb250ZW50LmxvY2FscyA6IHVuZGVmaW5lZDtcbiIsIlxuICAgICAgaW1wb3J0IEFQSSBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luamVjdFN0eWxlc0ludG9TdHlsZVRhZy5qc1wiO1xuICAgICAgaW1wb3J0IGRvbUFQSSBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlRG9tQVBJLmpzXCI7XG4gICAgICBpbXBvcnQgaW5zZXJ0Rm4gZnJvbSBcIiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRCeVNlbGVjdG9yLmpzXCI7XG4gICAgICBpbXBvcnQgc2V0QXR0cmlidXRlcyBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3NldEF0dHJpYnV0ZXNXaXRob3V0QXR0cmlidXRlcy5qc1wiO1xuICAgICAgaW1wb3J0IGluc2VydFN0eWxlRWxlbWVudCBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydFN0eWxlRWxlbWVudC5qc1wiO1xuICAgICAgaW1wb3J0IHN0eWxlVGFnVHJhbnNmb3JtRm4gZnJvbSBcIiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZVRhZ1RyYW5zZm9ybS5qc1wiO1xuICAgICAgaW1wb3J0IGNvbnRlbnQsICogYXMgbmFtZWRFeHBvcnQgZnJvbSBcIiEhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9SZXN0YXVyYW50Rm9ybS5jc3NcIjtcbiAgICAgIFxuICAgICAgXG5cbnZhciBvcHRpb25zID0ge307XG5cbm9wdGlvbnMuc3R5bGVUYWdUcmFuc2Zvcm0gPSBzdHlsZVRhZ1RyYW5zZm9ybUZuO1xub3B0aW9ucy5zZXRBdHRyaWJ1dGVzID0gc2V0QXR0cmlidXRlcztcblxuICAgICAgb3B0aW9ucy5pbnNlcnQgPSBpbnNlcnRGbi5iaW5kKG51bGwsIFwiaGVhZFwiKTtcbiAgICBcbm9wdGlvbnMuZG9tQVBJID0gZG9tQVBJO1xub3B0aW9ucy5pbnNlcnRTdHlsZUVsZW1lbnQgPSBpbnNlcnRTdHlsZUVsZW1lbnQ7XG5cbnZhciB1cGRhdGUgPSBBUEkoY29udGVudCwgb3B0aW9ucyk7XG5cblxuXG5leHBvcnQgKiBmcm9tIFwiISEuLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL1Jlc3RhdXJhbnRGb3JtLmNzc1wiO1xuICAgICAgIGV4cG9ydCBkZWZhdWx0IGNvbnRlbnQgJiYgY29udGVudC5sb2NhbHMgPyBjb250ZW50LmxvY2FscyA6IHVuZGVmaW5lZDtcbiIsIlxuICAgICAgaW1wb3J0IEFQSSBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luamVjdFN0eWxlc0ludG9TdHlsZVRhZy5qc1wiO1xuICAgICAgaW1wb3J0IGRvbUFQSSBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlRG9tQVBJLmpzXCI7XG4gICAgICBpbXBvcnQgaW5zZXJ0Rm4gZnJvbSBcIiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRCeVNlbGVjdG9yLmpzXCI7XG4gICAgICBpbXBvcnQgc2V0QXR0cmlidXRlcyBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3NldEF0dHJpYnV0ZXNXaXRob3V0QXR0cmlidXRlcy5qc1wiO1xuICAgICAgaW1wb3J0IGluc2VydFN0eWxlRWxlbWVudCBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydFN0eWxlRWxlbWVudC5qc1wiO1xuICAgICAgaW1wb3J0IHN0eWxlVGFnVHJhbnNmb3JtRm4gZnJvbSBcIiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZVRhZ1RyYW5zZm9ybS5qc1wiO1xuICAgICAgaW1wb3J0IGNvbnRlbnQsICogYXMgbmFtZWRFeHBvcnQgZnJvbSBcIiEhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9SZXN0YXVyYW50TGlzdC5jc3NcIjtcbiAgICAgIFxuICAgICAgXG5cbnZhciBvcHRpb25zID0ge307XG5cbm9wdGlvbnMuc3R5bGVUYWdUcmFuc2Zvcm0gPSBzdHlsZVRhZ1RyYW5zZm9ybUZuO1xub3B0aW9ucy5zZXRBdHRyaWJ1dGVzID0gc2V0QXR0cmlidXRlcztcblxuICAgICAgb3B0aW9ucy5pbnNlcnQgPSBpbnNlcnRGbi5iaW5kKG51bGwsIFwiaGVhZFwiKTtcbiAgICBcbm9wdGlvbnMuZG9tQVBJID0gZG9tQVBJO1xub3B0aW9ucy5pbnNlcnRTdHlsZUVsZW1lbnQgPSBpbnNlcnRTdHlsZUVsZW1lbnQ7XG5cbnZhciB1cGRhdGUgPSBBUEkoY29udGVudCwgb3B0aW9ucyk7XG5cblxuXG5leHBvcnQgKiBmcm9tIFwiISEuLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL1Jlc3RhdXJhbnRMaXN0LmNzc1wiO1xuICAgICAgIGV4cG9ydCBkZWZhdWx0IGNvbnRlbnQgJiYgY29udGVudC5sb2NhbHMgPyBjb250ZW50LmxvY2FscyA6IHVuZGVmaW5lZDtcbiIsIlxuICAgICAgaW1wb3J0IEFQSSBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luamVjdFN0eWxlc0ludG9TdHlsZVRhZy5qc1wiO1xuICAgICAgaW1wb3J0IGRvbUFQSSBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlRG9tQVBJLmpzXCI7XG4gICAgICBpbXBvcnQgaW5zZXJ0Rm4gZnJvbSBcIiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRCeVNlbGVjdG9yLmpzXCI7XG4gICAgICBpbXBvcnQgc2V0QXR0cmlidXRlcyBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3NldEF0dHJpYnV0ZXNXaXRob3V0QXR0cmlidXRlcy5qc1wiO1xuICAgICAgaW1wb3J0IGluc2VydFN0eWxlRWxlbWVudCBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydFN0eWxlRWxlbWVudC5qc1wiO1xuICAgICAgaW1wb3J0IHN0eWxlVGFnVHJhbnNmb3JtRm4gZnJvbSBcIiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZVRhZ1RyYW5zZm9ybS5qc1wiO1xuICAgICAgaW1wb3J0IGNvbnRlbnQsICogYXMgbmFtZWRFeHBvcnQgZnJvbSBcIiEhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9UYWIuY3NzXCI7XG4gICAgICBcbiAgICAgIFxuXG52YXIgb3B0aW9ucyA9IHt9O1xuXG5vcHRpb25zLnN0eWxlVGFnVHJhbnNmb3JtID0gc3R5bGVUYWdUcmFuc2Zvcm1Gbjtcbm9wdGlvbnMuc2V0QXR0cmlidXRlcyA9IHNldEF0dHJpYnV0ZXM7XG5cbiAgICAgIG9wdGlvbnMuaW5zZXJ0ID0gaW5zZXJ0Rm4uYmluZChudWxsLCBcImhlYWRcIik7XG4gICAgXG5vcHRpb25zLmRvbUFQSSA9IGRvbUFQSTtcbm9wdGlvbnMuaW5zZXJ0U3R5bGVFbGVtZW50ID0gaW5zZXJ0U3R5bGVFbGVtZW50O1xuXG52YXIgdXBkYXRlID0gQVBJKGNvbnRlbnQsIG9wdGlvbnMpO1xuXG5cblxuZXhwb3J0ICogZnJvbSBcIiEhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9UYWIuY3NzXCI7XG4gICAgICAgZXhwb3J0IGRlZmF1bHQgY29udGVudCAmJiBjb250ZW50LmxvY2FscyA/IGNvbnRlbnQubG9jYWxzIDogdW5kZWZpbmVkO1xuIiwiXG4gICAgICBpbXBvcnQgQVBJIGZyb20gXCIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5qZWN0U3R5bGVzSW50b1N0eWxlVGFnLmpzXCI7XG4gICAgICBpbXBvcnQgZG9tQVBJIGZyb20gXCIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVEb21BUEkuanNcIjtcbiAgICAgIGltcG9ydCBpbnNlcnRGbiBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydEJ5U2VsZWN0b3IuanNcIjtcbiAgICAgIGltcG9ydCBzZXRBdHRyaWJ1dGVzIGZyb20gXCIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzLmpzXCI7XG4gICAgICBpbXBvcnQgaW5zZXJ0U3R5bGVFbGVtZW50IGZyb20gXCIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0U3R5bGVFbGVtZW50LmpzXCI7XG4gICAgICBpbXBvcnQgc3R5bGVUYWdUcmFuc2Zvcm1GbiBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlVGFnVHJhbnNmb3JtLmpzXCI7XG4gICAgICBpbXBvcnQgY29udGVudCwgKiBhcyBuYW1lZEV4cG9ydCBmcm9tIFwiISEuLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL1Jlc3RhdXJhbnREZXRhaWwuY3NzXCI7XG4gICAgICBcbiAgICAgIFxuXG52YXIgb3B0aW9ucyA9IHt9O1xuXG5vcHRpb25zLnN0eWxlVGFnVHJhbnNmb3JtID0gc3R5bGVUYWdUcmFuc2Zvcm1Gbjtcbm9wdGlvbnMuc2V0QXR0cmlidXRlcyA9IHNldEF0dHJpYnV0ZXM7XG5cbiAgICAgIG9wdGlvbnMuaW5zZXJ0ID0gaW5zZXJ0Rm4uYmluZChudWxsLCBcImhlYWRcIik7XG4gICAgXG5vcHRpb25zLmRvbUFQSSA9IGRvbUFQSTtcbm9wdGlvbnMuaW5zZXJ0U3R5bGVFbGVtZW50ID0gaW5zZXJ0U3R5bGVFbGVtZW50O1xuXG52YXIgdXBkYXRlID0gQVBJKGNvbnRlbnQsIG9wdGlvbnMpO1xuXG5cblxuZXhwb3J0ICogZnJvbSBcIiEhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9SZXN0YXVyYW50RGV0YWlsLmNzc1wiO1xuICAgICAgIGV4cG9ydCBkZWZhdWx0IGNvbnRlbnQgJiYgY29udGVudC5sb2NhbHMgPyBjb250ZW50LmxvY2FscyA6IHVuZGVmaW5lZDtcbiIsImV4cG9ydCBkZWZhdWx0IF9fd2VicGFja19wdWJsaWNfcGF0aF9fICsgXCJhZGQtYnV0dG9uLnBuZ1wiOyIsImV4cG9ydCBkZWZhdWx0IF9fd2VicGFja19wdWJsaWNfcGF0aF9fICsgXCJjYXRlZ29yeS1rb3JlYW4ucG5nXCI7IiwiZXhwb3J0IGRlZmF1bHQgX193ZWJwYWNrX3B1YmxpY19wYXRoX18gKyBcImNhdGVnb3J5LWFzaWFuLnBuZ1wiOyIsImV4cG9ydCBkZWZhdWx0IF9fd2VicGFja19wdWJsaWNfcGF0aF9fICsgXCJjYXRlZ29yeS1jaGluZXNlLnBuZ1wiOyIsImV4cG9ydCBkZWZhdWx0IF9fd2VicGFja19wdWJsaWNfcGF0aF9fICsgXCJjYXRlZ29yeS1qYXBhbmVzZS5wbmdcIjsiLCJleHBvcnQgZGVmYXVsdCBfX3dlYnBhY2tfcHVibGljX3BhdGhfXyArIFwiY2F0ZWdvcnktd2VzdGVybi5wbmdcIjsiLCJleHBvcnQgZGVmYXVsdCBfX3dlYnBhY2tfcHVibGljX3BhdGhfXyArIFwiY2F0ZWdvcnktZXRjLnBuZ1wiOyIsImV4cG9ydCBkZWZhdWx0IF9fd2VicGFja19wdWJsaWNfcGF0aF9fICsgXCJmYXZvcml0ZS1pY29uLWZpbGxlZC5wbmdcIjsiLCJleHBvcnQgZGVmYXVsdCBfX3dlYnBhY2tfcHVibGljX3BhdGhfXyArIFwiZmF2b3JpdGUtaWNvbi1saW5lZC5wbmdcIjsiLCJpbXBvcnQgV2ViQ29udHJvbGxlciBmcm9tICcuL3NlcnZpY2UvV2ViQ29udHJvbGxlcic7XHJcbi8vIGNvbXBvbmVudHNcclxuaW1wb3J0IEdOQiBmcm9tICcuL3ZpZXcvY29tcG9uZW50cy9HTkInO1xyXG5pbXBvcnQgTW9kYWwgZnJvbSAnLi92aWV3L2NvbXBvbmVudHMvTW9kYWwnO1xyXG5pbXBvcnQgU2VsZWN0IGZyb20gJy4vdmlldy9jb21wb25lbnRzL1NlbGVjdCc7XHJcbmltcG9ydCBSZXN0YXVyYW50Rm9ybSBmcm9tICcuL3ZpZXcvY29tcG9uZW50cy9SZXN0YXVyYW50Rm9ybSc7XHJcbmltcG9ydCBSZXN0YXVyYW50TGlzdCBmcm9tICcuL3ZpZXcvY29tcG9uZW50cy9SZXN0YXVyYW50TGlzdCc7XHJcbmltcG9ydCBSZXN0YXVyYW50SXRlbSBmcm9tICcuL3ZpZXcvY29tcG9uZW50cy9SZXN0YXVyYW50SXRlbSc7XHJcbmltcG9ydCBSZXN0YXVyYW50RGV0YWlsIGZyb20gJy4vdmlldy9jb21wb25lbnRzL1Jlc3RhdXJhbnREZXRhaWwnO1xyXG4vLyBzdHlsZXNcclxuaW1wb3J0ICcuL3ZpZXcvc3R5bGVzL2dsb2JhbC5jc3MnO1xyXG5pbXBvcnQgJy4vdmlldy9zdHlsZXMvR25iLmNzcyc7XHJcbmltcG9ydCAnLi92aWV3L3N0eWxlcy9Nb2RhbC5jc3MnO1xyXG5pbXBvcnQgJy4vdmlldy9zdHlsZXMvU2VsZWN0LmNzcyc7XHJcbmltcG9ydCAnLi92aWV3L3N0eWxlcy9SZXN0YXVyYW50Rm9ybS5jc3MnO1xyXG5pbXBvcnQgJy4vdmlldy9zdHlsZXMvUmVzdGF1cmFudExpc3QuY3NzJztcclxuaW1wb3J0ICcuL3ZpZXcvc3R5bGVzL1RhYi5jc3MnO1xyXG5pbXBvcnQgJy4vdmlldy9zdHlsZXMvUmVzdGF1cmFudERldGFpbC5jc3MnO1xyXG4vLyBpbWdzXHJcbmltcG9ydCAnLi92aWV3L2ltZ3MvYWRkLWJ1dHRvbi5wbmcnO1xyXG5pbXBvcnQgJy4vdmlldy9pbWdzL2NhdGVnb3J5LWtvcmVhbi5wbmcnO1xyXG5pbXBvcnQgJy4vdmlldy9pbWdzL2NhdGVnb3J5LWFzaWFuLnBuZyc7XHJcbmltcG9ydCAnLi92aWV3L2ltZ3MvY2F0ZWdvcnktY2hpbmVzZS5wbmcnO1xyXG5pbXBvcnQgJy4vdmlldy9pbWdzL2NhdGVnb3J5LWphcGFuZXNlLnBuZyc7XHJcbmltcG9ydCAnLi92aWV3L2ltZ3MvY2F0ZWdvcnktd2VzdGVybi5wbmcnO1xyXG5pbXBvcnQgJy4vdmlldy9pbWdzL2NhdGVnb3J5LWV0Yy5wbmcnO1xyXG5pbXBvcnQgJy4vdmlldy9pbWdzL2Zhdm9yaXRlLWljb24tZmlsbGVkLnBuZyc7XHJcbmltcG9ydCAnLi92aWV3L2ltZ3MvZmF2b3JpdGUtaWNvbi1saW5lZC5wbmcnO1xyXG53aW5kb3cuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdhcHAtZ25iJywgR05CKTtcclxud2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZSgnYXBwLW1vZGFsJywgTW9kYWwpO1xyXG53aW5kb3cuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdhcHAtc2VsZWN0JywgU2VsZWN0LCB7IGV4dGVuZHM6ICdzZWxlY3QnIH0pO1xyXG53aW5kb3cuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdhcHAtcmVzdGF1cmFudC1mb3JtJywgUmVzdGF1cmFudEZvcm0sIHsgZXh0ZW5kczogJ2Zvcm0nIH0pO1xyXG53aW5kb3cuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdhcHAtcmVzdGF1cmFudC1pdGVtJywgUmVzdGF1cmFudEl0ZW0sIHsgZXh0ZW5kczogJ2xpJyB9KTtcclxud2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZSgnYXBwLXJlc3RhdXJhbnQtbGlzdCcsIFJlc3RhdXJhbnRMaXN0LCB7IGV4dGVuZHM6ICd1bCcgfSk7XHJcbndpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ2FwcC1yZXN0YXVyYW50LWRldGFpbCcsIFJlc3RhdXJhbnREZXRhaWwpO1xyXG5jb25zdCBjb250cm9sbGVyID0gbmV3IFdlYkNvbnRyb2xsZXIoKTtcclxuY29udHJvbGxlci5zdGFydCgpO1xyXG4iXSwibmFtZXMiOlsiX19fQ1NTX0xPQURFUl9FWFBPUlRfX18iLCJwdXNoIiwibW9kdWxlIiwiaWQiLCJleHBvcnRzIiwiY3NzV2l0aE1hcHBpbmdUb1N0cmluZyIsImxpc3QiLCJ0b1N0cmluZyIsInRoaXMiLCJtYXAiLCJpdGVtIiwiY29udGVudCIsIm5lZWRMYXllciIsImNvbmNhdCIsImxlbmd0aCIsImpvaW4iLCJpIiwibW9kdWxlcyIsIm1lZGlhIiwiZGVkdXBlIiwic3VwcG9ydHMiLCJsYXllciIsInVuZGVmaW5lZCIsImFscmVhZHlJbXBvcnRlZE1vZHVsZXMiLCJrIiwiX2siLCJjc3NNYXBwaW5nIiwiYnRvYSIsImJhc2U2NCIsInVuZXNjYXBlIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiSlNPTiIsInN0cmluZ2lmeSIsImRhdGEiLCJzb3VyY2VNYXBwaW5nIiwic3R5bGVzSW5ET00iLCJnZXRJbmRleEJ5SWRlbnRpZmllciIsImlkZW50aWZpZXIiLCJyZXN1bHQiLCJtb2R1bGVzVG9Eb20iLCJvcHRpb25zIiwiaWRDb3VudE1hcCIsImlkZW50aWZpZXJzIiwiYmFzZSIsImNvdW50IiwiaW5kZXhCeUlkZW50aWZpZXIiLCJvYmoiLCJjc3MiLCJzb3VyY2VNYXAiLCJyZWZlcmVuY2VzIiwidXBkYXRlciIsImFkZEVsZW1lbnRTdHlsZSIsImJ5SW5kZXgiLCJzcGxpY2UiLCJhcGkiLCJkb21BUEkiLCJ1cGRhdGUiLCJuZXdPYmoiLCJyZW1vdmUiLCJsYXN0SWRlbnRpZmllcnMiLCJuZXdMaXN0IiwiaW5kZXgiLCJuZXdMYXN0SWRlbnRpZmllcnMiLCJfaSIsIl9pbmRleCIsIm1lbW8iLCJpbnNlcnQiLCJzdHlsZSIsInRhcmdldCIsInN0eWxlVGFyZ2V0IiwiZG9jdW1lbnQiLCJxdWVyeVNlbGVjdG9yIiwid2luZG93IiwiSFRNTElGcmFtZUVsZW1lbnQiLCJjb250ZW50RG9jdW1lbnQiLCJoZWFkIiwiZSIsImdldFRhcmdldCIsIkVycm9yIiwiYXBwZW5kQ2hpbGQiLCJlbGVtZW50IiwiY3JlYXRlRWxlbWVudCIsInNldEF0dHJpYnV0ZXMiLCJhdHRyaWJ1dGVzIiwic3R5bGVFbGVtZW50Iiwibm9uY2UiLCJzZXRBdHRyaWJ1dGUiLCJpbnNlcnRTdHlsZUVsZW1lbnQiLCJzdHlsZVRhZ1RyYW5zZm9ybSIsImFwcGx5IiwicGFyZW50Tm9kZSIsInJlbW92ZUNoaWxkIiwicmVtb3ZlU3R5bGVFbGVtZW50Iiwic3R5bGVTaGVldCIsImNzc1RleHQiLCJmaXJzdENoaWxkIiwiY3JlYXRlVGV4dE5vZGUiLCJfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18iLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJjYWNoZWRNb2R1bGUiLCJfX3dlYnBhY2tfbW9kdWxlc19fIiwibiIsImdldHRlciIsIl9fZXNNb2R1bGUiLCJkIiwiYSIsImRlZmluaXRpb24iLCJrZXkiLCJvIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiZyIsImdsb2JhbFRoaXMiLCJGdW5jdGlvbiIsInByb3AiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJzY3JpcHRVcmwiLCJpbXBvcnRTY3JpcHRzIiwibG9jYXRpb24iLCJjdXJyZW50U2NyaXB0Iiwic3JjIiwic2NyaXB0cyIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwidGVzdCIsInJlcGxhY2UiLCJwIiwibmMiLCJfUmVzdGF1cmFudE1hbmFnZXJfaW5zdGFuY2VzIiwiX1Jlc3RhdXJhbnRNYW5hZ2VyX3Jlc3RhdXJhbnRzIiwiX1Jlc3RhdXJhbnRNYW5hZ2VyX2ZpbHRlckJ5Q2F0ZWdvcnkiLCJfUmVzdGF1cmFudE1hbmFnZXJfc29ydEJ5TmFtZSIsIl9SZXN0YXVyYW50TWFuYWdlcl9zb3J0QnlEaXN0YW5jZSIsIl9fY2xhc3NQcml2YXRlRmllbGRHZXQiLCJyZWNlaXZlciIsInN0YXRlIiwia2luZCIsImYiLCJUeXBlRXJyb3IiLCJoYXMiLCJ2YWx1ZSIsIl9fY2xhc3NQcml2YXRlRmllbGRTZXQiLCJzZXQiLCJXZWFrTWFwIiwiV2Vha1NldCIsImNhdGVnb3J5IiwicmVzdGF1cmFudHMiLCJmaWx0ZXIiLCJyZXN0YXVyYW50Iiwic29ydCIsImIiLCJuYW1lIiwibG9jYWxlQ29tcGFyZSIsImRpc3RhbmNlIiwiY29uc3RydWN0b3IiLCJhZGQiLCJmaWx0ZXJlZEFuZFNvcnRlZEJ5T3B0aW9ucyIsIm9wdGlvbiIsImZpbHRlcmVkUmVzdGF1cmFudCIsInRvZ2dsZUZhdm9yaXRlIiwicmVzdGF1cmFudE5hbWUiLCJyZXN0YXVyYW50SW5kZXgiLCJmaW5kSW5kZXgiLCJmYXZvcml0ZSIsInVwZGF0ZUxvY2FsU3RvcmFnZSIsImxvY2FsU3RvcmFnZSIsInNldEl0ZW0iLCJsb2FkUmVzdGF1cmFudHNGcm9tTG9jYWxTdG9yYWdlIiwic3RvcmVkUmVzdGF1cmFudHMiLCJnZXRJdGVtIiwicGFyc2UiLCJfV2ViVmlld19jYXRlZ29yeUZpbHRlciIsIl9XZWJWaWV3X3NvcnRpbmdGaWx0ZXIiLCJfV2ViVmlld19yZXN0YXVyYW50TGlzdCIsIldlYlZpZXciLCJzb3J0aW5nRmlsdGVyIiwiY2F0ZWdvcnlGaWx0ZXIiLCJfUmVzdGF1cmFudEZvcm1faW5zdGFuY2VzIiwiX1Jlc3RhdXJhbnRGb3JtX2xpbmtJbnB1dCIsIl9SZXN0YXVyYW50Rm9ybV9oYW5kbGVTdWJtaXQiLCJfUmVzdGF1cmFudEZvcm1faGFuZGxlUmVzZXQiLCJfUmVzdGF1cmFudEZvcm1fY2hlY2tMaW5rSW5wdXRWYWxpZGl0eSIsIl9SZXN0YXVyYW50Rm9ybV9nZXRGb3JtRGF0YU9iaiIsIlJFU1RBVVJBTlRfRk9STV9FVkVOVFMiLCJSZXN0YXVyYW50Rm9ybSIsIkhUTUxGb3JtRWxlbWVudCIsInN1cGVyIiwiY2xvbmVOb2RlIiwiY29ubmVjdGVkQ2FsbGJhY2siLCJhZGRFdmVudExpc3RlbmVyIiwiYmluZCIsInNldEN1c3RvbVZhbGlkaXR5IiwicHJldmVudERlZmF1bHQiLCJGb3JtRGF0YSIsImZvcm1EYXRhIiwiZGlzcGF0Y2hFdmVudCIsIkN1c3RvbUV2ZW50IiwiYnViYmxlcyIsImRldGFpbCIsInJlc2V0Iiwia2V5cyIsInJlZHVjZSIsIl9TZWxlY3RfaW5zdGFuY2VzIiwiX1NlbGVjdF9oYW5kbGVPbkNoYW5nZSIsIl9TZWxlY3RfY3JlYXRlT3B0aW9ucyIsIl9TZWxlY3RfZ2VuZXJhdGVPcHRpb25zIiwiU0VMRUNUX0VWRU5UUyIsIlNlbGVjdCIsIkhUTUxTZWxlY3RFbGVtZW50IiwiYXJndW1lbnRzIiwiZGF0YXNldCIsImF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayIsInRleHRDb250ZW50IiwiZnJhZ21lbnQiLCJjcmVhdGVEb2N1bWVudEZyYWdtZW50IiwiZm9yRWFjaCIsIm9ic2VydmVkQXR0cmlidXRlcyIsIlRhYiIsInNlbGVjdG9yIiwiY2FsbGJhY2siLCJ0YWJJdGVtIiwiaW5pdCIsImV2ZW50IiwiY2xhc3NMaXN0IiwicGFyZW50RWxlbWVudCIsImlzQWN0aXZlIiwiY29udGFpbnMiLCJfV2ViQ29udHJvbGxlcl9pbnN0YW5jZXMiLCJfV2ViQ29udHJvbGxlcl93ZWJWaWV3IiwiX1dlYkNvbnRyb2xsZXJfcmVzdGF1cmFudE1hbmFnZXIiLCJfV2ViQ29udHJvbGxlcl9hbGxUYWIiLCJfV2ViQ29udHJvbGxlcl9mYXZvcml0ZVRhYiIsIl9XZWJDb250cm9sbGVyX3VwZGF0ZVJlc3RhdXJhbnRMaXN0QWZ0ZXJEZWxldGUiLCJfV2ViQ29udHJvbGxlcl9yZW5kZXJUYWJzIiwiX1dlYkNvbnRyb2xsZXJfc3luY0xvY2FsU3RvcmFnZUFuZERvbWFpbiIsIl9XZWJDb250cm9sbGVyX3VwZGF0ZUxvY2FsU3RvcmFnZSIsIl9XZWJDb250cm9sbGVyX3VwZGF0ZVJlc3RhdXJhbnRMaXN0IiwiX1dlYkNvbnRyb2xsZXJfdXBkYXRlRmF2b3JpdGVSZXN0YXVyYW50TGlzdCIsIl9XZWJDb250cm9sbGVyX2FkZFJlc3RhdXJhbnRTdWJtaXRFdmVudExpc3RlbmVyIiwiX1dlYkNvbnRyb2xsZXJfaGFuZGxlRm9ybVN1Ym1pdFVwZGF0ZVVJIiwiX1dlYkNvbnRyb2xsZXJfYWRkRmlsdGVyT25jaGFuZ2VFdmVudExpc3RlbmVyIiwiZGVsZXRlZFJlc3RhdXJhbnRJZCIsImZhdm9yaXRlUmVzdGF1cmFudHMiLCJHTkIiLCJIVE1MRWxlbWVudCIsIm9wZW5Nb2RhbCIsIl9SZXN0YXVyYW50RGV0YWlsX2luc3RhbmNlcyIsIl9SZXN0YXVyYW50RGV0YWlsX2NyZWF0ZVJlc3RhdXJhbnREZXRhaWxDb250ZW50IiwiX1Jlc3RhdXJhbnREZXRhaWxfZ2V0Q2F0ZWdvcnlJY29uVXJsIiwiX1Jlc3RhdXJhbnREZXRhaWxfc2V0dXBMaW5rRWxlbWVudCIsIl9SZXN0YXVyYW50RGV0YWlsX2hhbmRsZUZhdm9yaXRlQ2xpY2siLCJfUmVzdGF1cmFudERldGFpbF90b2dnbGVGYXZvcml0ZSIsIl9SZXN0YXVyYW50RGV0YWlsX3VwZGF0ZUZhdm9yaXRlSWNvbiIsIl9SZXN0YXVyYW50RGV0YWlsX2hhbmRsZUJ1dHRvbkNsaWNrIiwiX1Jlc3RhdXJhbnREZXRhaWxfaGFuZGxlRGVsZXRlIiwiX1Jlc3RhdXJhbnREZXRhaWxfaGFuZGxlQ2xvc2UiLCJSRVNUQVVSQU5UX0RFVEFJTF9FVkVOVFMiLCJSZXN0YXVyYW50RGV0YWlsIiwicmVzdGF1cmFudERldGFpbENvbnRlbnQiLCJyZXN0YXVyYW50RGV0YWlsIiwiZGVzY3JpcHRpb24iLCJsaW5rIiwiYWx0IiwibGlua0VsZW1lbnQiLCJ1cGRhdGVkTGlua0VsZW1lbnQiLCJyZXBsYWNlQ2hpbGQiLCJocmVmIiwic3RvcFByb3BhZ2F0aW9uIiwiaXNGYXZvcml0ZSIsInVwZGF0ZWRGYXZvcml0ZSIsImZhdm9yaXRlSWNvbiIsImNvbnNvbGUiLCJsb2ciLCJyZXN0YXVyYW50SWQiLCJnZXRBdHRyaWJ1dGUiLCJyZW1vdmVJdGVtIiwiX01vZGFsX2luc3RhbmNlcyIsIl9Nb2RhbF9zaGFkb3dSb290IiwiX01vZGFsX2hhbmRsZUNsb3NlTW9kYWwiLCJNb2RhbCIsImF0dGFjaFNoYWRvdyIsIm1vZGUiLCJvbGRWYWx1ZSIsIm5ld1ZhbHVlIiwicmVuZGVyIiwibW9kYWxDb250YWluZXIiLCJzaGFkb3dSb290IiwiaGVpZ2h0IiwiX1Jlc3RhdXJhbnRJdGVtX2luc3RhbmNlcyIsIl9SZXN0YXVyYW50SXRlbV9pbml0aWFsaXplIiwiX1Jlc3RhdXJhbnRJdGVtX3NldHVwVGVtcGxhdGUiLCJfUmVzdGF1cmFudEl0ZW1fYmluZEV2ZW50TGlzdGVuZXJzIiwiX1Jlc3RhdXJhbnRJdGVtX2luaXRSZXN0YXVyYW50SXRlbSIsIl9SZXN0YXVyYW50SXRlbV9nZXRDYXRlZ29yeUljb25VcmwiLCJfUmVzdGF1cmFudEl0ZW1faGFuZGxlRmF2b3JpdGVDbGljayIsIl9SZXN0YXVyYW50SXRlbV91cGRhdGVGYXZvcml0ZUljb24iLCJfUmVzdGF1cmFudEl0ZW1faGFuZGxlUmVzdGF1cmFudEl0ZW1DbGljayIsIlJlc3RhdXJhbnRJdGVtIiwiSFRNTExJRWxlbWVudCIsInJlc3RhdXJhbnRNYW5hZ2VyIiwiZmluZCIsInJlcyIsIm1vZGFsIiwiX1Jlc3RhdXJhbnRMaXN0X2luc3RhbmNlcyIsIl9SZXN0YXVyYW50TGlzdF91cGRhdGVMaXN0IiwiX1Jlc3RhdXJhbnRMaXN0X2dldFJlc3RhdXJhbnRJdGVtIiwiUmVzdGF1cmFudExpc3QiLCJIVE1MVUxpc3RFbGVtZW50IiwicmVzdGF1cmFudEl0ZW0iLCJsb2NhbHMiLCJjdXN0b21FbGVtZW50cyIsImRlZmluZSIsImV4dGVuZHMiLCJzdGFydCIsInVwZGF0ZUZhdm9yaXRlU3RhdHVzIl0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file diff --git a/dist/category-asian.png b/dist/category-asian.png new file mode 100644 index 0000000000000000000000000000000000000000..95f8e7f51f94d2d77e6f8b882f9b1b52add3c489 GIT binary patch literal 615 zcmV-t0+{`YP)m&w2-iMx*d(5D_*W384^5)kZXWtMeaFX;G38rGi8$5=xImL?n_`qafn7vEH%A zH`#-m*}bznvoo_Ie#tL$v+h0j%>C|KqJMmVnOk9yegkNv8=k>i*g?4j4Ya{i{=sOh zhjIZnZh<$P%(?IJDKY8rFTNBp>F_>2i2N|@elKR$LZCLNi_$L`0ZBYk}AT}(Rk@v-+Y=}3-`{fkM*cYFmH6yezfmr@*D z3k=CP0$0fy!?K6L8az%hCx~8-tcn;X*QdP2Aq4D0TYDDOg+u@1&6NY#^Ip zO*4#1jVoAbH9s#+y-TxCP@f{~mUdo1ox0{7{;@fHSZimcUXOPe}t` zyumSY8;NcdK5*u|z_4pkX_^|4dla{54P)hoL6fqR|vs2ThWg zI$=xLej;($T+hhVM=H|J{M8C2T)x%Sy%=9!qjieN^;Rp z2oua2co)#fEpbgwu7|@C*a7z>{G5xb6;{LwW)4&aIKPJ(F56Y`0)9yUbR$+k7h^b{ z_5@xd$&qILWzn|1`J#+skx#7Mu!NOSX6N8qgVUQN0Xrg`j^!+FStV=x<@OR&=Y z0-6uaE~EP}%+~1=za+i)HqBRSU2W(m)fCX~v1<>GMXDgxFQDBX!%eQb6XKs|Zi>xK zlw-un$caeP$x7oVaVBI`n&v0DI`Yd;dQx2M@;@WtrPJXuj59%^GTr6y21eWG3&sDG zSnRTy0iPwjbYy#N?%q}Q5UT988b^vb zCn7y}_6(oK^}s*V*6U9|VVq#}92IsX;|7-#(20)Za9bbi`0)xRn`DW`@&Y>2#F!r= z7)^+`lNyW-=!zt+1~^~_LNvS>8WRZSk=Xe)U=rugHB9n*3S-S+h>oViK?y!P>F>@0 zGuRSmf4d_+bB|8oy`~@P-|wvxm>#V3c&Zt=07}Wi-R57>Zx2DeUSg1;?EnA(07*qo IM6N<$f{P2j;s5{u literal 0 HcmV?d00001 diff --git a/dist/category-etc.png b/dist/category-etc.png new file mode 100644 index 0000000000000000000000000000000000000000..4619fc123bc2ee8014779eaba1b846cf5a8e1ebd GIT binary patch literal 840 zcmV-O1GoH%P) zR8bVi&!k3Dnw4l4w&(}_Alwv~wUN{c+SI09tyRD`W)_?e2z2kKAo}EeBr~JH}Bqa&pYqld(IWfE3fR7ka?Q z?0~{3BfHffoi11!!=YvB_AB*7sW#j%b;D|cBF|XEFeZLkn{S>rHr8Q@aHv82+Ac0# z__PtW#AsKW@d@GU(|EG|sXD?=72J<$>r1$ABE`@Mmn9NUAD|8Hz&ml#-T(*Sw7BFO zN24tL;#@eCD~;jMzcEwi&`XNNJD}Y1l&rzmcs83^mQD8GEEBc~eP-iArD^t&;Jg*7%p#kWIbFdC7 zVLu#!RT*qI>vZXBW9${5EFy3<^cJIVHvA?*B+H>xVn|)mJ{8zX>Pj;DaSW^o!kN@0 z+=lfsN6}{++|`+x-wL$ixf-&1`mxTGh535$S<52&me}Wjn>zb+@(|W!>YMO6#ia$T z{t3U)Bn-eS=oPoQnJp_zEq!bT8?+$QXH;AzdVy6nDA_28$P=BvtmxYpd(Omk%9iX7 zb%(!hjXo&aGb_&Q*i)x-I4EXwl&*jpai3V&Y$27^ucd$5uaCHIo4nC>?AD8 S+Zq%A0000CY^76I_IAAJHO|9pXc|S-!Udqq)7jvM5G4J zLX{ayVW1L@!w2zn%#4K?crxsVk1||uVY>NSVz6S^4X=Gh2H_4YhM4B66i7T_q^~IT)dK0$9+o~y@a;~p}UU;wP&h^ty{Jwy^1yBbkbqx1j z;F6&N=e(AOr!f8RI8VR<vlH*Ht(NpEKOonK=(DpdiSI_M1j{ zDd9`a-G;4_tz{5UD&A}UjfAgf&PKUyQ2RBNdlex@;@1>XuQ#cLOZcB!?Cx5@CD+hf8I zi7xp}XmQ^a@AIR=#^_6NIkd>1UxBJmu+W4d5-qhR9>HFi>)cB%Nta~Sci1d>6m%v- z+75K9mO0n7rnGVPXEBn1C83$gVzeAKz%}vume$KR@jk#VLW6kUPmv-;`ls~^YB)dO TZcVOb00000NkvXXu0mjfO@L~> literal 0 HcmV?d00001 diff --git a/dist/category-korean.png b/dist/category-korean.png new file mode 100644 index 0000000000000000000000000000000000000000..5938291ebac40e3a9137e3f4030f9637530ddd20 GIT binary patch literal 514 zcmV+d0{#7oP)Du=>$n9C?m8JG~FPbfNaogpvn!&34y5$#+Tgj-RWYY zhkt~@05EZ5B;W}m8v3~>%gGjGDVeF6j?zXK%-3Sx5W^hCl`0TF&%BN1ijs)`UK^bf&=5I`S1{s@(paqJ#%g zVBI!ZM}8y5)(|zHKq)2_ZQlMjnMP3cKkt;iNen0ityoeilLiVh;$+vL5X2Lf+R3yr zc)BxnT@t~i?_}B-tUuE-?wg5N?)-r9cxB_9JEWjHHXd&uqJ55y7tScrO5=zLamiA? zj<_$8g)R=lQEb#0r=XZ{L2?ZpAU;Qaa1Da?{6Gr&g80-PFLDi~^ix7y=Cp(k=Yv{@ zD#s4uQE)MT8e~M|F3qJNxrWYNdWP|NkzzW*=38D!w$KNgh~X(<2-tk}?2Fweb+4@o zQFb#NatS{%^v5C-=1b-?N1tzduMOC>+q;;-#KbUu0jM5c-BtNFjQ{`u07*qoM6N<$ Ef|kJ6NB{r; literal 0 HcmV?d00001 diff --git a/dist/category-western.png b/dist/category-western.png new file mode 100644 index 0000000000000000000000000000000000000000..0bbff434e17164db9475e272fdefaa73392e5761 GIT binary patch literal 896 zcmV-`1AqL9P)!05H(}O%zYj64Q!-*3KK2{n?Ot#zv!5% zl}zc_D0pn1slVVT0On5xta z#?(}WeXu1{U>W5iz2j!hP*T^xBwhT1W2!D$K4+eDI;NeoIXn?mst@pV%|?ThsVbAH zD#z4S^Gr$qDbQzPYr>k5=cY|3e-4T`*g5r%sY{xvLd}}5eA3rqV%~s~FlN?+PtL-R zz$^})jp54Y?!G!som02LJIQ<)GjqUuPS;nk+LWNd>901K@|I6cg?q;#;Izj~2Uy{Z zEB2U*8&lrhM`5HBbvuj5n|qNNGgGrMn}hP*<@EB&JihXkQy3v&E2ry;>0b!mYI`fE zcHea;#_m3QcwVM3LO_|vP!|V>**5UnwD-sjXk4+!RNR<4#z6@egf&#onMus-a$==? zci2-t%2o(Ik%5^3u+PLqzy=P!iG1agQ#`wGA_Shvz)+_XbC81*SiYqvb9(vY26j_6 zLg2j&49NmJIXEQc-IOqW4>@&swwiX?2vfqEDFGijGxc+DQ1*NJDs;ZN;EQQr7uL`r z&Rs9T3^V5~(|2UJ^`nlNdH6X?x#uY zx*&|97SK!K^asc(z8^*ogCCTGV)hRvlh26(T;2e7H~a#xz*EqnCge=%0_}+Fp*$(( zHehnu@(Elvf+ElgWXH6jk7NYpw?W2WXTO8>#~)nrI9ZrE#WlXXqbm Wd0;e@le_`|0000(}qSZeY!0X4u$n{%n-qVg)>`fMWgOZ?OYM2#%QD z?Sb1$6r7bRGX2Ri{txypi!vW3Q+C95ES=PrY6-#`RQs>A6;xzkATO3aWt*J1y;dQuFxEf*e_M|8b7vnLT?&OQP;KV2mvZYc zShPlPe4F>kix4o0D2lG>0QTna(mngSaG?esKba0F>1;VJ{PWujcN*qx3N?_6Yb_Ea zRt{%6Kd+bPC>7yjk4_+^v$2$u#d0y&#;ypgr8lG{+!iWD#`o4@PC{SJnZW7KoL)P1%yDTFsVKY@H6Jn~ONUtJ-`o0*q~u z=Ym7(pB34i4m^)-xWAS%ggvkqff%68EmHdB|9|L%J$K+~swtJ)=%BY@5A5|IL8&OK++-qRWcbU`sS92rV5$Lh=#FUbv-VyDxF#UA5#o&R0trcvYyWnf ziL4uq&O=|iiArW97TDF13RGr6_VW3{eFQP(Ql0iGBV?ivm99*_9k*5Qi4BOGGR-h5 zJ)lsvDGf8WnOl`|m!Un{Ry7LAn_X9=*}hmoj;vG7OajsG`}Bx%=$9Pp{wN?BX<}=8kp3VZkhW%256upvtC# wR`>Vn%zb`|R3W`tgP?1y8l$rJzySyR0q-GjSe%iy-v9sr07*qoM6N<$f_>JVD*ylh literal 0 HcmV?d00001 diff --git a/dist/index.html b/dist/index.html new file mode 100644 index 000000000..b19489544 --- /dev/null +++ b/dist/index.html @@ -0,0 +1,29 @@ +점심 뭐 먹지
    \ No newline at end of file