1778449822
c05b9b66eacc8e11cfd97f370d355f8b-phpdoc%3A5123b7cf0fe3fbdab21f749839fe3edb-696e2394c7172811124b289cff4ef544
s:40512:"TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlIjoxNDp7czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBuYW1lIjtzOjEyOiJyZWdpc3Ryby5waHAiO3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAbmFtZXNwYWNlcyI7YTowOnt9czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBpbmNsdWRlcyI7YTowOnt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBmdW5jdGlvbnMiO2E6MDp7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAY29uc3RhbnRzIjthOjA6e31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGNsYXNzZXMiO2E6MDp7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAaW50ZXJmYWNlcyI7YTowOnt9czo0MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQB0cmFpdHMiO2E6MDp7fXM6NDA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAZW51bXMiO2E6MDp7fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAaGFzaCI7czozMjoiNjk2ZTIzOTRjNzE3MjgxMTEyNGIyODljZmY0ZWY1NDQiO3M6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAcGF0aCI7czoxODoicGFnZXMvcmVnaXN0cm8ucGhwIjtzOjQxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAHNvdXJjZSI7czoyOTQ4MzoiPD9waHANCnNlc3Npb25fc3RhcnQoKTsNCmlmIChpc3NldCgkX1NFU1NJT05bJ2xvZ2dlZF9pbiddKSAmJiAkX1NFU1NJT05bJ2xvZ2dlZF9pbiddID09PSB0cnVlKSB7DQogIGhlYWRlcignTG9jYXRpb246IGRhc2hib2FyZC5waHAnKTsNCiAgZXhpdDsNCn0NCj8+DQoNCjwhRE9DVFlQRSBodG1sPg0KPGh0bWwgbGFuZz0iZXMiPg0KPGhlYWQ+DQogICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPg0KICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4NCiAgICA8bWV0YSBodHRwLWVxdWl2PSJYLVVBLUNvbXBhdGlibGUiIGNvbnRlbnQ9IklFPWVkZ2UiPg0KICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MSwgc2hyaW5rLXRvLWZpdD1ubyI+DQogICAgPHRpdGxlPk51ZXZvIFVzdWFyaW8gPC90aXRsZT4NCg0KICAgIDxsaW5rIGhyZWY9Ii4uL3ZlbmRvcnMvYm9vdHN0cmFwL2Rpc3QvY3NzL2Jvb3RzdHJhcC5taW4uY3NzIiByZWw9InN0eWxlc2hlZXQiPg0KICAgIDxsaW5rIGhyZWY9Ii4uL3ZlbmRvcnMvZm9udC1hd2Vzb21lL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIgcmVsPSJzdHlsZXNoZWV0Ij4NCiAgICA8bGluayBocmVmPSIuLi9idWlsZC9jc3MvY3VzdG9tLm1pbi5jc3MiIHJlbD0ic3R5bGVzaGVldCI+DQoNCjwvaGVhZD4NCjxzdHlsZT4NCiAgICA6cm9vdCB7DQogICAgICAgIC0tYnJhbmQ6ICAgICAgICAjMUFCQjlDOw0KICAgICAgICAtLWJyYW5kLWRhcms6ICAgIzE1OWE4MDsNCiAgICAgICAgLS1kYXJrLWJnOiAgICAgICMyYTNmNTQ7DQogICAgICAgIC0tcGFuZWwtYmc6ICAgICAjZmZmZmZmOw0KICAgICAgICAtLXRleHQtbXV0ZWQ6ICAgIzczODc5QzsNCiAgICAgICAgLS1kYW5nZXI6ICAgICAgICNlNzRjM2M7DQogICAgICAgIC0tc3VjY2VzczogICAgICAjMUFCQjlDOw0KICAgICAgICAtLXdhcm46ICAgICAgICAgI2YzOWMxMjsNCiAgICB9DQoNCiAgICBodG1sLCBib2R5IHsNCiAgICAgICAgbWluLWhlaWdodDogMTAwJTsNCiAgICAgICAgbWFyZ2luOiAwOyBwYWRkaW5nOiAwOw0KICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1kYXJrLWJnKTsNCiAgICAgICAgYmFja2dyb3VuZC1pbWFnZToNCiAgICAgICAgICAgICAgICByYWRpYWwtZ3JhZGllbnQoZWxsaXBzZSBhdCAxNSUgMjUlLCByZ2JhKDI2LDE4NywxNTYsMC4xMikgMCUsIHRyYW5zcGFyZW50IDU1JSksDQogICAgICAgICAgICAgICAgcmFkaWFsLWdyYWRpZW50KGVsbGlwc2UgYXQgODUlIDc1JSwgcmdiYSgyNiwxODcsMTU2LDAuMDcpIDAlLCB0cmFuc3BhcmVudCA1NSUpOw0KICAgICAgICBmb250LWZhbWlseTogJ0hlbHZldGljYSBOZXVlJywgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjsNCiAgICB9DQoNCiAgICAvKiDilIDilIANCiAgICAgV3JhcHBlciDilIDilIAgKi8NCiAgICAucmVnLXdyYXBwZXIgew0KICAgICAgICBtaW4taGVpZ2h0OiAxMDB2aDsNCiAgICAgICAgZGlzcGxheTogZmxleDsNCiAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7DQogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOw0KICAgICAgICBwYWRkaW5nOiA0MHB4IDIwcHg7DQogICAgfQ0KDQogICAgLyog4pSA4pSAIENhcmQg4pSA4pSAICovDQogICAgLnJlZy1jYXJkIHsNCiAgICAgICAgd2lkdGg6IDEwMCU7DQogICAgICAgIG1heC13aWR0aDogNjQwcHg7DQogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXBhbmVsLWJnKTsNCiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4Ow0KICAgICAgICBib3gtc2hhZG93OiAwIDEwcHggNDBweCByZ2JhKDAsMCwwLDAuMzUpOw0KICAgICAgICBvdmVyZmxvdzogaGlkZGVuOw0KICAgIH0NCg0KICAgIC8qIOKUgOKUgCBIZWFkZXIg4pSA4pSAICovDQogICAgLnJlZy1jYXJkLWhlYWRlciB7DQogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWRhcmstYmcpOw0KICAgICAgICBwYWRkaW5nOiAyOHB4IDMycHggMjJweDsNCiAgICAgICAgYm9yZGVyLWJvdHRvbTogM3B4IHNvbGlkIHZhcigtLWJyYW5kKTsNCiAgICAgICAgZGlzcGxheTogZmxleDsNCiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsNCiAgICAgICAgZ2FwOiAxNnB4Ow0KICAgIH0NCiAgICAucmVnLWNhcmQtaGVhZGVyIC5iYWNrLWJ0biB7DQogICAgICAgIGNvbG9yOiByZ2JhKDI1NSwyNTUsMjU1LDAuNDUpOw0KICAgICAgICBmb250LXNpemU6IDE4cHg7DQogICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsNCiAgICAgICAgdHJhbnNpdGlvbjogY29sb3IgMC4yczsNCiAgICAgICAgZmxleC1zaHJpbms6IDA7DQogICAgfQ0KICAgIC5yZWctY2FyZC1oZWFkZXIgLmJhY2stYnRuOmhvdmVyIHsgY29sb3I6IHZhcigtLWJyYW5kKTsgfQ0KICAgIC5yZWctY2FyZC1oZWFkZXIgLmhlYWRlci10ZXh0IHsgZmxleDogMTsgfQ0KICAgIC5yZWctY2FyZC1oZWFkZXIgLmxvZ28tdGl0bGUgew0KICAgICAgICBmb250LXNpemU6IDIwcHg7DQogICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7DQogICAgICAgIGNvbG9yOiAjZmZmOw0KICAgICAgICBtYXJnaW46IDAgMCAycHg7DQogICAgfQ0KICAgIC5yZWctY2FyZC1oZWFkZXIgLmxvZ28tdGl0bGUgc3BhbiB7IGNvbG9yOiB2YXIoLS1icmFuZCk7IH0NCiAgICAucmVnLWNhcmQtaGVhZGVyIC5sb2dvLXN1YnRpdGxlIHsNCiAgICAgICAgZm9udC1zaXplOiAxMXB4Ow0KICAgICAgICBjb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwwLjQwKTsNCiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsNCiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDJweDsNCiAgICAgICAgbWFyZ2luOiAwOw0KICAgIH0NCg0KICAgIC8qIOKUgOKUgCBTZWNjacOzbiBkZW50cm8gZGVsIGJvZHkg4pSA4pSAICovDQogICAgLnJlZy1jYXJkLWJvZHkgeyBwYWRkaW5nOiAyOHB4IDMycHg7IH0NCg0KICAgIC5zZWN0aW9uLXRpdGxlIHsNCiAgICAgICAgZm9udC1zaXplOiAxMXB4Ow0KICAgICAgICBmb250LXdlaWdodDogNzAwOw0KICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOw0KICAgICAgICBsZXR0ZXItc3BhY2luZzogMS4ycHg7DQogICAgICAgIGNvbG9yOiB2YXIoLS1icmFuZCk7DQogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZWVmMGYzOw0KICAgICAgICBwYWRkaW5nLWJvdHRvbTogNnB4Ow0KICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4Ow0KICAgICAgICBtYXJnaW4tdG9wOiAyNHB4Ow0KICAgIH0NCiAgICAuc2VjdGlvbi10aXRsZTpmaXJzdC1jaGlsZCB7IG1hcmdpbi10b3A6IDA7IH0NCg0KICAgIC8qIOKUgOKUgCBMYWJlbHMg4pSA4pSAICovDQogICAgLnJlZy1jYXJkLWJvZHkgbGFiZWwgew0KICAgICAgICBmb250LXNpemU6IDExcHg7DQogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7DQogICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7DQogICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjdweDsNCiAgICAgICAgY29sb3I6IHZhcigtLXRleHQtbXV0ZWQpOw0KICAgICAgICBtYXJnaW4tYm90dG9tOiA1cHg7DQogICAgfQ0KICAgIC5yZXF1aXJlZC1tYXJrIHsgY29sb3I6IHZhcigtLWRhbmdlcik7IG1hcmdpbi1sZWZ0OiAycHg7IH0NCg0KICAgIC8qIOKUgOKUgCBJbnB1dHMg4pSA4pSAICovDQogICAgLnJlZy1jYXJkLWJvZHkgLmZvcm0tY29udHJvbCB7DQogICAgICAgIGhlaWdodDogNDBweDsNCiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4Ow0KICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjZGNlM2VhOw0KICAgICAgICBmb250LXNpemU6IDEzcHg7DQogICAgICAgIGNvbG9yOiAjMzMzOw0KICAgICAgICB0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgMC4ycywgYm94LXNoYWRvdyAwLjJzOw0KICAgIH0NCiAgICAucmVnLWNhcmQtYm9keSAuZm9ybS1jb250cm9sOmZvY3VzIHsNCiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1icmFuZCk7DQogICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDNweCByZ2JhKDI2LDE4NywxNTYsMC4xNSk7DQogICAgICAgIG91dGxpbmU6IG5vbmU7DQogICAgfQ0KICAgIC5yZWctY2FyZC1ib2R5IC5mb3JtLWNvbnRyb2wuaXMtdmFsaWQgew0KICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLXN1Y2Nlc3MpOw0KICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiBub25lOw0KICAgIH0NCiAgICAucmVnLWNhcmQtYm9keSAuZm9ybS1jb250cm9sLmlzLWludmFsaWQgew0KICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLWRhbmdlcik7DQogICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7DQogICAgfQ0KDQogICAgLyog4pSA4pSAIEljb25vIGRlIHZhbGlkYWNpw7NuIGlubGluZSDilIDilIAgKi8NCiAgICAuZmllbGQtaWNvbiB7DQogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgICAgICAgcmlnaHQ6IDEwcHg7DQogICAgICAgIHRvcDogNTAlOw0KICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7DQogICAgICAgIGZvbnQtc2l6ZTogMTNweDsNCiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7DQogICAgICAgIGRpc3BsYXk6IG5vbmU7DQogICAgfQ0KICAgIC5maWVsZC1pY29uLnZhbGlkICAgeyBkaXNwbGF5OiBibG9jazsgY29sb3I6IHZhcigtLXN1Y2Nlc3MpOyB9DQogICAgLmZpZWxkLWljb24uaW52YWxpZCB7IGRpc3BsYXk6IGJsb2NrOyBjb2xvcjogdmFyKC0tZGFuZ2VyKTsgfQ0KICAgIC5pbnB1dC13cmFwIHsgcG9zaXRpb246IHJlbGF0aXZlOyB9DQoNCiAgICAvKiDilIDilIAgRmVlZGJhY2sgaW5saW5lIOKUgOKUgCAqLw0KICAgIC5maWVsZC1mZWVkYmFjayB7DQogICAgICAgIGZvbnQtc2l6ZTogMTFweDsNCiAgICAgICAgbWFyZ2luLXRvcDogM3B4Ow0KICAgICAgICBtaW4taGVpZ2h0OiAxNHB4Ow0KICAgICAgICBkaXNwbGF5OiBub25lOw0KICAgIH0NCiAgICAuZmllbGQtZmVlZGJhY2suc2hvdy1vayAgeyBkaXNwbGF5OiBibG9jazsgY29sb3I6IHZhcigtLXN1Y2Nlc3MpOyB9DQogICAgLmZpZWxkLWZlZWRiYWNrLnNob3ctZXJyIHsgZGlzcGxheTogYmxvY2s7IGNvbG9yOiB2YXIoLS1kYW5nZXIpOyB9DQoNCiAgICAvKiDilIDilIAgR3J1cG8gY29uIGljb25vIGl6cXVpZXJkYSDilIDilIAgKi8NCiAgICAuaW5wdXQtZ3JvdXAtdGV4dCB7DQogICAgICAgIGJhY2tncm91bmQ6ICNmNWY3ZmE7DQogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNkY2UzZWE7DQogICAgICAgIGNvbG9yOiB2YXIoLS10ZXh0LW11dGVkKTsNCiAgICAgICAgZm9udC1zaXplOiAxM3B4Ow0KICAgIH0NCiAgICAuaW5wdXQtZ3JvdXAgLmZvcm0tY29udHJvbCB7IGJvcmRlci1yYWRpdXM6IDAgM3B4IDNweCAwICFpbXBvcnRhbnQ7IH0NCiAgICAuaW5wdXQtZ3JvdXAgLmlucHV0LWdyb3VwLXByZXBlbmQgLmlucHV0LWdyb3VwLXRleHQgew0KICAgICAgICBib3JkZXItcmFkaXVzOiAzcHggMCAwIDNweCAhaW1wb3J0YW50Ow0KICAgIH0NCg0KICAgIC8qIOKUgOKUgCBUb2dnbGUgY29udHJhc2XDsWEg4pSA4pSAICovDQogICAgLmJ0bi10b2dnbGUtcGFzcyB7DQogICAgICAgIGJhY2tncm91bmQ6ICNmNWY3ZmE7DQogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNkY2UzZWE7DQogICAgICAgIGJvcmRlci1sZWZ0OiBub25lOw0KICAgICAgICBjb2xvcjogdmFyKC0tdGV4dC1tdXRlZCk7DQogICAgICAgIHBhZGRpbmc6IDAgMTBweDsNCiAgICAgICAgYm9yZGVyLXJhZGl1czogMCAzcHggM3B4IDAgIWltcG9ydGFudDsNCiAgICAgICAgY3Vyc29yOiBwb2ludGVyOw0KICAgICAgICBmb250LXNpemU6IDEzcHg7DQogICAgfQ0KICAgIC5idG4tdG9nZ2xlLXBhc3M6aG92ZXIgeyBjb2xvcjogdmFyKC0tYnJhbmQpOyB9DQoNCiAgICAvKiDilIDilIAgTWVkaWRvciBkZSBmb3J0YWxlemEg4pSA4pSAICovDQogICAgLnN0cmVuZ3RoLXdyYXAgew0KICAgICAgICBtYXJnaW4tdG9wOiA2cHg7DQogICAgICAgIGRpc3BsYXk6IG5vbmU7DQogICAgfQ0KICAgIC5zdHJlbmd0aC13cmFwLnZpc2libGUgeyBkaXNwbGF5OiBibG9jazsgfQ0KICAgIC5zdHJlbmd0aC1iYXItdHJhY2sgew0KICAgICAgICBoZWlnaHQ6IDRweDsNCiAgICAgICAgYmFja2dyb3VuZDogI2VlZjBmMzsNCiAgICAgICAgYm9yZGVyLXJhZGl1czogMnB4Ow0KICAgICAgICBvdmVyZmxvdzogaGlkZGVuOw0KICAgICAgICBtYXJnaW4tYm90dG9tOiA0cHg7DQogICAgfQ0KICAgIC5zdHJlbmd0aC1iYXItZmlsbCB7DQogICAgICAgIGhlaWdodDogMTAwJTsNCiAgICAgICAgd2lkdGg6IDAlOw0KICAgICAgICBib3JkZXItcmFkaXVzOiAycHg7DQogICAgICAgIHRyYW5zaXRpb246IHdpZHRoIDAuM3MsIGJhY2tncm91bmQgMC4zczsNCiAgICB9DQogICAgLnN0cmVuZ3RoLWxhYmVsIHsNCiAgICAgICAgZm9udC1zaXplOiAxMXB4Ow0KICAgICAgICBmb250LXdlaWdodDogNjAwOw0KICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOw0KICAgICAgICBsZXR0ZXItc3BhY2luZzogMC41cHg7DQogICAgfQ0KDQogICAgLyog4pSA4pSAIFJlcXVpc2l0b3MgZGUgY29udHJhc2XDsWEg4pSA4pSAICovDQogICAgLnBhc3MtcmVxcyB7DQogICAgICAgIGxpc3Qtc3R5bGU6IG5vbmU7DQogICAgICAgIHBhZGRpbmc6IDhweCAwIDA7DQogICAgICAgIG1hcmdpbjogMDsNCiAgICAgICAgZGlzcGxheTogbm9uZTsNCiAgICB9DQogICAgLnBhc3MtcmVxcy52aXNpYmxlIHsgZGlzcGxheTogYmxvY2s7IH0NCiAgICAucGFzcy1yZXFzIGxpIHsNCiAgICAgICAgZm9udC1zaXplOiAxMXB4Ow0KICAgICAgICBjb2xvcjogI2IwYmVjNTsNCiAgICAgICAgcGFkZGluZzogMXB4IDA7DQogICAgICAgIHRyYW5zaXRpb246IGNvbG9yIDAuMnM7DQogICAgfQ0KICAgIC5wYXNzLXJlcXMgbGkgLmZhIHsgbWFyZ2luLXJpZ2h0OiA1cHg7IGZvbnQtc2l6ZTogMTBweDsgfQ0KICAgIC5wYXNzLXJlcXMgbGkub2sgIHsgY29sb3I6IHZhcigtLXN1Y2Nlc3MpOyB9DQogICAgLnBhc3MtcmVxcyBsaS5lcnIgeyBjb2xvcjogdmFyKC0tZGFuZ2VyKTsgfQ0KDQogICAgLyog4pSA4pSAIEFsZXJ0YSBnbG9iYWwg4pSA4pSAICovDQogICAgI3JlZy1hbGVydCB7DQogICAgICAgIGRpc3BsYXk6IG5vbmU7DQogICAgICAgIGZvbnQtc2l6ZTogMTNweDsNCiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4Ow0KICAgICAgICBwYWRkaW5nOiAxMHB4IDE0cHg7DQogICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7DQogICAgfQ0KICAgICNyZWctYWxlcnQuYWxlcnQtZGFuZ2VyICB7IGJhY2tncm91bmQ6ICNmZGYyZjI7IGJvcmRlcjogMXB4IHNvbGlkICNmNWM2Y2I7IGNvbG9yOiAjODQyMDI5OyB9DQogICAgI3JlZy1hbGVydC5hbGVydC1zdWNjZXNzIHsgYmFja2dyb3VuZDogI2YwZmFmNzsgYm9yZGVyOiAxcHggc29saWQgI2EzZDljOTsgY29sb3I6ICMwZDVjNDY7IH0NCiAgICAjcmVnLWFsZXJ0IC5mYSB7IG1hcmdpbi1yaWdodDogNnB4OyB9DQoNCiAgICAvKiDilIDilIAgQm90w7NuIHN1Ym1pdCDilIDilIAgKi8NCiAgICAuYnRuLXJlZyB7DQogICAgICAgIHdpZHRoOiAxMDAlOw0KICAgICAgICBoZWlnaHQ6IDQ0cHg7DQogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWJyYW5kKTsNCiAgICAgICAgYm9yZGVyOiBub25lOw0KICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7DQogICAgICAgIGNvbG9yOiAjZmZmOw0KICAgICAgICBmb250LXNpemU6IDE0cHg7DQogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7DQogICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjVweDsNCiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsNCiAgICAgICAgY3Vyc29yOiBwb2ludGVyOw0KICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMnMsIHRyYW5zZm9ybSAwLjFzOw0KICAgICAgICBtYXJnaW4tdG9wOiA4cHg7DQogICAgfQ0KICAgIC5idG4tcmVnOmhvdmVyICB7IGJhY2tncm91bmQ6IHZhcigtLWJyYW5kLWRhcmspOyB9DQogICAgLmJ0bi1yZWc6YWN0aXZlIHsgdHJhbnNmb3JtOiBzY2FsZSgwLjk5KTsgfQ0KICAgIC5idG4tcmVnIC5mYS1zcGlubmVyIHsgZGlzcGxheTogbm9uZTsgfQ0KICAgIC5idG4tcmVnLmxvYWRpbmcgLmZhLXBsdXMgICAgeyBkaXNwbGF5OiBub25lOyB9DQogICAgLmJ0bi1yZWcubG9hZGluZyAuZmEtc3Bpbm5lciB7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgfQ0KICAgIC5idG4tcmVnLmxvYWRpbmcgeyBwb2ludGVyLWV2ZW50czogbm9uZTsgb3BhY2l0eTogMC44NTsgfQ0KICAgIC5idG4tcmVnOmRpc2FibGVkIHsgcG9pbnRlci1ldmVudHM6IG5vbmU7IG9wYWNpdHk6IDAuNTsgfQ0KDQogICAgLyog4pSA4pSAIEZvb3RlciDilIDilIAgKi8NCiAgICAucmVnLWNhcmQtZm9vdGVyIHsNCiAgICAgICAgcGFkZGluZzogMTRweCAzMnB4Ow0KICAgICAgICBiYWNrZ3JvdW5kOiAjZjhmOWZhOw0KICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgI2VlZjBmMzsNCiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOw0KICAgICAgICBmb250LXNpemU6IDEycHg7DQogICAgICAgIGNvbG9yOiB2YXIoLS10ZXh0LW11dGVkKTsNCiAgICB9DQoNCiAgICAubG9naW4tbGluay13cmFwIHsNCiAgICAgICAgbWFyZ2luLXRvcDogMjBweDsNCiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOw0KICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgI2VlZjBmMzsNCiAgICAgICAgcGFkZGluZy10b3A6IDIwcHg7DQogICAgfQ0KICAgIC5idG4tdG8tbG9naW4gew0KICAgICAgICBjb2xvcjogdmFyKC0tdGV4dC1tdXRlZCk7DQogICAgICAgIGZvbnQtc2l6ZTogMTNweDsNCiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOw0KICAgICAgICBmb250LXdlaWdodDogNjAwOw0KICAgIH0NCiAgICAuYnRuLXRvLWxvZ2luIHNwYW4gew0KICAgICAgICBjb2xvcjogdmFyKC0tYnJhbmQpOw0KICAgICAgICBtYXJnaW4tbGVmdDogNXB4Ow0KICAgIH0NCiAgICAuYnRuLXRvLWxvZ2luOmhvdmVyIHNwYW4gew0KICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsNCiAgICB9DQoNCiAgICAvKiDilIDilIAgUmVzcG9uc2l2ZSDilIDilIAgKi8NCiAgICBAbWVkaWEgKG1heC13aWR0aDogNTYwcHgpIHsNCiAgICAgICAgLnJlZy1jYXJkLWJvZHkgICB7IHBhZGRpbmc6IDIwcHggMTZweDsgfQ0KICAgICAgICAucmVnLWNhcmQtaGVhZGVyIHsgcGFkZGluZzogMjBweCAxNnB4IDE2cHg7IH0NCiAgICB9DQo8L3N0eWxlPg0KPGJvZHk+DQo8ZGl2IGNsYXNzPSJyZWctd3JhcHBlciI+DQogICAgPGRpdiBjbGFzcz0icmVnLWNhcmQiPg0KDQogICAgICAgIDwhLS0gSGVhZGVyIC0tPg0KICAgICAgICA8ZGl2IGNsYXNzPSJyZWctY2FyZC1oZWFkZXIiPg0KICAgICAgICAgICAgPGEgaHJlZj0ibG9naW4ucGhwIiBjbGFzcz0iYmFjay1idG4iIHRpdGxlPSJWb2x2ZXIgYWwgbG9naW4iPg0KICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYSBmYS1hcnJvdy1sZWZ0Ij48L2k+DQogICAgICAgICAgICA8L2E+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkZXItdGV4dCI+DQogICAgICAgICAgICAgICAgPHAgY2xhc3M9ImxvZ28tdGl0bGUiPjxpIGNsYXNzPSJmYSBmYS1sZWFmIj48L2k+IEhlcnJhbWllbnRhPHNwYW4+R2VuZXJpY2E8L3NwYW4+PC9wPg0KICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJsb2dvLXN1YnRpdGxlIj5SZWdpc3RybyBkZSBudWV2byB1c3VhcmlvPC9wPg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgIDwvZGl2Pg0KDQogICAgICAgIDwhLS0gQm9keSAtLT4NCiAgICAgICAgPGRpdiBjbGFzcz0icmVnLWNhcmQtYm9keSI+DQoNCiAgICAgICAgICAgIDwhLS0gQWxlcnRhIGdsb2JhbCAtLT4NCiAgICAgICAgICAgIDxkaXYgaWQ9InJlZy1hbGVydCI+PC9kaXY+DQoNCiAgICAgICAgICAgIDwhLS0g4pSA4pSAIERBVE9TIFBFUlNPTkFMRVMg4pSA4pSAIC0tPg0KICAgICAgICAgICAgPHAgY2xhc3M9InNlY3Rpb24tdGl0bGUiPjxpIGNsYXNzPSJmYSBmYS11c2VyLW8iPjwvaT4mbmJzcDsgRGF0b3MgcGVyc29uYWxlczwvcD4NCg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0icm93Ij4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtc20tNiBtYi0zIj4NCiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iZi1ub21icmUiPk5vbWJyZSA8c3BhbiBjbGFzcz0icmVxdWlyZWQtbWFyayI+Kjwvc3Bhbj48L2xhYmVsPg0KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbnB1dC13cmFwIj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iZi1ub21icmUiIGNsYXNzPSJmb3JtLWNvbnRyb2wiIHBsYWNlaG9sZGVyPSJNYXLDrWEiIG1heGxlbmd0aD0iNjAiIGF1dG9jb21wbGV0ZT0iZ2l2ZW4tbmFtZSI+DQogICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmllbGQtaWNvbiIgaWQ9Imljb24tbm9tYnJlIj48L2k+DQogICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaWVsZC1mZWVkYmFjayIgaWQ9ImZiLW5vbWJyZSI+PC9kaXY+DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sLXNtLTYgbWItMyI+DQogICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9ImYtYXBlbGxpZG8xIj5QcmltZXIgYXBlbGxpZG8gPHNwYW4gY2xhc3M9InJlcXVpcmVkLW1hcmsiPio8L3NwYW4+PC9sYWJlbD4NCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtd3JhcCI+DQogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImYtYXBlbGxpZG8xIiBjbGFzcz0iZm9ybS1jb250cm9sIiBwbGFjZWhvbGRlcj0iR2FyY8OtYSIgbWF4bGVuZ3RoPSI2MCIgYXV0b2NvbXBsZXRlPSJmYW1pbHktbmFtZSI+DQogICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmllbGQtaWNvbiIgaWQ9Imljb24tYXBlbGxpZG8xIj48L2k+DQogICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaWVsZC1mZWVkYmFjayIgaWQ9ImZiLWFwZWxsaWRvMSI+PC9kaXY+DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sLXNtLTYgbWItMyI+DQogICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9ImYtYXBlbGxpZG8yIj5TZWd1bmRvIGFwZWxsaWRvPC9sYWJlbD4NCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtd3JhcCI+DQogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImYtYXBlbGxpZG8yIiBjbGFzcz0iZm9ybS1jb250cm9sIiBwbGFjZWhvbGRlcj0iTMOzcGV6IiBtYXhsZW5ndGg9IjYwIiBhdXRvY29tcGxldGU9ImFkZGl0aW9uYWwtbmFtZSI+DQogICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmllbGQtaWNvbiIgaWQ9Imljb24tYXBlbGxpZG8yIj48L2k+DQogICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaWVsZC1mZWVkYmFjayIgaWQ9ImZiLWFwZWxsaWRvMiI+PC9kaXY+DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sLXNtLTYgbWItMyI+DQogICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9ImYtZG5pIj5ETkkgPHNwYW4gY2xhc3M9InJlcXVpcmVkLW1hcmsiPio8L3NwYW4+PC9sYWJlbD4NCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtd3JhcCI+DQogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImYtZG5pIiBjbGFzcz0iZm9ybS1jb250cm9sIiBwbGFjZWhvbGRlcj0iMTIzNDU2NzhaIiBtYXhsZW5ndGg9IjkiIGF1dG9jb21wbGV0ZT0ib2ZmIiBzdHlsZT0idGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlOyI+DQogICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmllbGQtaWNvbiIgaWQ9Imljb24tZG5pIj48L2k+DQogICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaWVsZC1mZWVkYmFjayIgaWQ9ImZiLWRuaSI+PC9kaXY+DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8L2Rpdj4NCg0KICAgICAgICAgICAgPCEtLSDilIDilIAgQ09OVEFDVE8g4pSA4pSAIC0tPg0KICAgICAgICAgICAgPHAgY2xhc3M9InNlY3Rpb24tdGl0bGUiPjxpIGNsYXNzPSJmYSBmYS1lbnZlbG9wZS1vIj48L2k+Jm5ic3A7IENvbnRhY3RvPC9wPg0KDQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJyb3ciPg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbC1zbS02IG1iLTMiPg0KICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJmLWVtYWlsIj5FbWFpbCA8c3BhbiBjbGFzcz0icmVxdWlyZWQtbWFyayI+Kjwvc3Bhbj48L2xhYmVsPg0KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbnB1dC1ncm91cCI+DQogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbnB1dC1ncm91cC1wcmVwZW5kIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iaW5wdXQtZ3JvdXAtdGV4dCI+PGkgY2xhc3M9ImZhIGZhLWF0Ij48L2k+PC9zcGFuPg0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iZW1haWwiIGlkPSJmLWVtYWlsIiBjbGFzcz0iZm9ybS1jb250cm9sIiBwbGFjZWhvbGRlcj0idXN1YXJpb0BlbXByZXNhLmNvbSIgbWF4bGVuZ3RoPSIxMjAiIGF1dG9jb21wbGV0ZT0iZW1haWwiPg0KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmllbGQtZmVlZGJhY2siIGlkPSJmYi1lbWFpbCI+PC9kaXY+DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sLXNtLTMgbWItMyI+DQogICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9ImYtY2VudHJvIj5DZW50cm8gPHNwYW4gY2xhc3M9InJlcXVpcmVkLW1hcmsiPio8L3NwYW4+PC9sYWJlbD4NCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtd3JhcCI+DQogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0ibnVtYmVyIiBpZD0iZi1jZW50cm8iIGNsYXNzPSJmb3JtLWNvbnRyb2wiIHBsYWNlaG9sZGVyPSIxIiBtaW49IjEiIG1heD0iOTk5OSI+DQogICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmllbGQtaWNvbiIgaWQ9Imljb24tY2VudHJvIj48L2k+DQogICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaWVsZC1mZWVkYmFjayIgaWQ9ImZiLWNlbnRybyI+PC9kaXY+DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sLXNtLTMgbWItMyI+DQogICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9ImYtY2lmIj5DSUY8L2xhYmVsPg0KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbnB1dC13cmFwIj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iZi1jaWYiIGNsYXNzPSJmb3JtLWNvbnRyb2wiIHBsYWNlaG9sZGVyPSJCMTIzNDU2NzgiIG1heGxlbmd0aD0iMjAiIHN0eWxlPSJ0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7Ij4NCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8L2Rpdj4NCg0KICAgICAgICAgICAgPCEtLSDilIDilIAgQ09OVFJBU0XDkUEg4pSA4pSAIC0tPg0KICAgICAgICAgICAgPHAgY2xhc3M9InNlY3Rpb24tdGl0bGUiPjxpIGNsYXNzPSJmYSBmYS1sb2NrIj48L2k+Jm5ic3A7IENvbnRyYXNlw7FhPC9wPg0KDQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJyb3ciPg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbC1zbS02IG1iLTIiPg0KICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJmLXBhc3MiPkNvbnRyYXNlw7FhIDxzcGFuIGNsYXNzPSJyZXF1aXJlZC1tYXJrIj4qPC9zcGFuPjwvbGFiZWw+DQogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImlucHV0LWdyb3VwIj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJwYXNzd29yZCIgaWQ9ImYtcGFzcyIgY2xhc3M9ImZvcm0tY29udHJvbCIgcGxhY2Vob2xkZXI9Ik3DrW4uIDggY2FyYWN0ZXJlcyIgYXV0b2NvbXBsZXRlPSJuZXctcGFzc3dvcmQiIHN0eWxlPSJib3JkZXItcmFkaXVzOjNweCAwIDAgM3B4ICFpbXBvcnRhbnQ7Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImlucHV0LWdyb3VwLWFwcGVuZCI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuLXRvZ2dsZS1wYXNzIiB0eXBlPSJidXR0b24iIGRhdGEtdGFyZ2V0PSJmLXBhc3MiIHRpdGxlPSJNb3N0cmFyL29jdWx0YXIiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtZXllIj48L2k+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+DQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICAgIDwhLS0gTWVkaWRvciBkZSBmb3J0YWxlemEgLS0+DQogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN0cmVuZ3RoLXdyYXAiIGlkPSJzdHJlbmd0aC13cmFwIj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN0cmVuZ3RoLWJhci10cmFjayI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RyZW5ndGgtYmFyLWZpbGwiIGlkPSJzdHJlbmd0aC1iYXIiPjwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic3RyZW5ndGgtbGFiZWwiIGlkPSJzdHJlbmd0aC1sYWJlbCI+PC9zcGFuPg0KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgPCEtLSBSZXF1aXNpdG9zIC0tPg0KICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9InBhc3MtcmVxcyIgaWQ9InBhc3MtcmVxcyI+DQogICAgICAgICAgICAgICAgICAgICAgICA8bGkgaWQ9InJlcS1sZW4iPiAgPGkgY2xhc3M9ImZhIGZhLWNpcmNsZS1vIj48L2k+IE3DrW5pbW8gOCBjYXJhY3RlcmVzPC9saT4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBpZD0icmVxLXVwcGVyIj48aSBjbGFzcz0iZmEgZmEtY2lyY2xlLW8iPjwvaT4gQWwgbWVub3MgdW5hIG1hecO6c2N1bGE8L2xpPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGlkPSJyZXEtbnVtIj4gIDxpIGNsYXNzPSJmYSBmYS1jaXJjbGUtbyI+PC9pPiBBbCBtZW5vcyB1biBuw7ptZXJvPC9saT4NCiAgICAgICAgICAgICAgICAgICAgPC91bD4NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtc20tNiBtYi0yIj4NCiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iZi1wYXNzMiI+Q29uZmlybWFyIGNvbnRyYXNlw7FhIDxzcGFuIGNsYXNzPSJyZXF1aXJlZC1tYXJrIj4qPC9zcGFuPjwvbGFiZWw+DQogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImlucHV0LWdyb3VwIj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJwYXNzd29yZCIgaWQ9ImYtcGFzczIiIGNsYXNzPSJmb3JtLWNvbnRyb2wiIHBsYWNlaG9sZGVyPSJSZXBpdGUgbGEgY29udHJhc2XDsWEiIGF1dG9jb21wbGV0ZT0ibmV3LXBhc3N3b3JkIiBzdHlsZT0iYm9yZGVyLXJhZGl1czozcHggMCAwIDNweCAhaW1wb3J0YW50OyI+DQogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbnB1dC1ncm91cC1hcHBlbmQiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0bi10b2dnbGUtcGFzcyIgdHlwZT0iYnV0dG9uIiBkYXRhLXRhcmdldD0iZi1wYXNzMiIgdGl0bGU9Ik1vc3RyYXIvb2N1bHRhciI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYSBmYS1leWUiPjwvaT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmllbGQtZmVlZGJhY2siIGlkPSJmYi1wYXNzMiI+PC9kaXY+DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8L2Rpdj4NCg0KICAgICAgICAgICAgPCEtLSDilIDilIAgQk9Uw5NOIOKUgOKUgCAtLT4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im10LTMiPg0KICAgICAgICAgICAgICAgIDxidXR0b24gaWQ9ImJ0bi1yZWciIGNsYXNzPSJidG4tcmVnIiB0eXBlPSJidXR0b24iIGRpc2FibGVkPg0KICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtcGx1cyI+PC9pPg0KICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtc3Bpbm5lciBmYS1zcGluIj48L2k+DQogICAgICAgICAgICAgICAgICAgICZuYnNwO0NyZWFyIHVzdWFyaW8NCiAgICAgICAgICAgICAgICA8L2J1dHRvbj4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPCEtLSBFTkxBQ0UgREUgVlVFTFRBIEFMIExPR0lOIC0tPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibG9naW4tbGluay13cmFwIj4NCiAgICAgICAgICAgICAgICA8YSBocmVmPSJsb2dpbi5waHAiIGNsYXNzPSJidG4tdG8tbG9naW4iPg0KICAgICAgICAgICAgICAgICAgICDCv1lhIHRpZW5lcyB1bmEgY3VlbnRhPyA8c3Bhbj5JbmljaWEgc2VzacOzbiBhcXXDrTwvc3Bhbj4NCiAgICAgICAgICAgICAgICA8L2E+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgPC9kaXY+PCEtLSAvcmVnLWNhcmQtYm9keSAtLT4NCg0KICAgICAgICA8IS0tIEZvb3RlciAtLT4NCiAgICAgICAgPGRpdiBjbGFzcz0icmVnLWNhcmQtZm9vdGVyIj4NCiAgICAgICAgICAgIEhlcnJhbWllbnRhIGdlbmVyaWNhICZjb3B5OyA8c3BhbiBpZD0iYW5pbyI+PC9zcGFuPiAmbWRhc2g7IFRvZG9zIGxvcyBkZXJlY2hvcyByZXNlcnZhZG9zDQogICAgICAgIDwvZGl2Pg0KDQogICAgPC9kaXY+PCEtLSAvcmVnLWNhcmQgLS0+DQo8L2Rpdj48IS0tIC9yZWctd3JhcHBlciAtLT4NCg0KPHNjcmlwdCBzcmM9Ii4uL3ZlbmRvcnMvanF1ZXJ5L2Rpc3QvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iLi4vdmVuZG9ycy9ib290c3RyYXAvZGlzdC9qcy9ib290c3RyYXAuYnVuZGxlLm1pbi5qcyI+PC9zY3JpcHQ+DQoNCjxzY3JpcHQ+DQogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FuaW8nKS50ZXh0Q29udGVudCA9IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKTsNCg0KICAgIC8vIOKUgOKUgCBVVElMSURBREVTIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KDQogICAgdmFyIExFVFJBU19ETkkgPSAnVFJXQUdNWUZQRFhCTkpaU1FWSExDS0UnOw0KDQogICAgZnVuY3Rpb24gdmFsaWRhckROSShkbmkpIHsNCiAgICAgICAgdmFyIGQgPSBkbmkudG9VcHBlckNhc2UoKS50cmltKCk7DQogICAgICAgIGlmICghL15cZHs4fVtBLVpdJC8udGVzdChkKSkgcmV0dXJuIGZhbHNlOw0KICAgICAgICByZXR1cm4gZFs4XSA9PT0gTEVUUkFTX0ROSVtwYXJzZUludChkLnNsaWNlKDAsIDgpKSAlIDIzXTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiB2YWxpZGFyRW1haWwoZW1haWwpIHsNCiAgICAgICAgcmV0dXJuIC9eW15cc0BdK0BbXlxzQF0rXC5bXlxzQF0rJC8udGVzdChlbWFpbC50cmltKCkpOw0KICAgIH0NCg0KICAgIC8vIOKUgOKUgCBDQU1QTyBIRUxQRVJTIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KDQogICAgZnVuY3Rpb24gc2V0RmllbGRTdGF0ZShpbnB1dElkLCBpY29uSWQsIGZiSWQsIHN0YXRlLCBtc2cpIHsNCiAgICAgICAgLy8gc3RhdGU6ICcnIHwgJ29rJyB8ICdlcnInDQogICAgICAgIHZhciAkaW5wdXQgPSAkKCcjJyArIGlucHV0SWQpOw0KICAgICAgICB2YXIgJGljb24gID0gaWNvbklkID8gJCgnIycgKyBpY29uSWQpIDogbnVsbDsNCiAgICAgICAgdmFyICRmYiAgICA9IGZiSWQgICA/ICQoJyMnICsgZmJJZCkgICA6IG51bGw7DQoNCiAgICAgICAgJGlucHV0LnJlbW92ZUNsYXNzKCdpcy12YWxpZCBpcy1pbnZhbGlkJyk7DQogICAgICAgIGlmICgkaWNvbikgJGljb24ucmVtb3ZlQ2xhc3MoJ3ZhbGlkIGludmFsaWQgZmEtY2hlY2sgZmEtdGltZXMnKTsNCiAgICAgICAgaWYgKCRmYikgICAkZmIucmVtb3ZlQ2xhc3MoJ3Nob3ctb2sgc2hvdy1lcnInKS50ZXh0KCcnKTsNCg0KICAgICAgICBpZiAoc3RhdGUgPT09ICdvaycpIHsNCiAgICAgICAgICAgICRpbnB1dC5hZGRDbGFzcygnaXMtdmFsaWQnKTsNCiAgICAgICAgICAgIGlmICgkaWNvbikgJGljb24uYWRkQ2xhc3MoJ3ZhbGlkIGZhLWNoZWNrJyk7DQogICAgICAgICAgICBpZiAoJGZiICYmIG1zZykgJGZiLmFkZENsYXNzKCdzaG93LW9rJykudGV4dChtc2cpOw0KICAgICAgICB9IGVsc2UgaWYgKHN0YXRlID09PSAnZXJyJykgew0KICAgICAgICAgICAgJGlucHV0LmFkZENsYXNzKCdpcy1pbnZhbGlkJyk7DQogICAgICAgICAgICBpZiAoJGljb24pICRpY29uLmFkZENsYXNzKCdpbnZhbGlkIGZhLXRpbWVzJyk7DQogICAgICAgICAgICBpZiAoJGZiICYmIG1zZykgJGZiLmFkZENsYXNzKCdzaG93LWVycicpLnRleHQobXNnKTsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIC8vIOKUgOKUgCBWQUxJREFDSU9ORVMgUE9SIENBTVBPIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KDQogICAgZnVuY3Rpb24gY2hlY2tOb21icmUoKSB7DQogICAgICAgIHZhciB2ID0gJCgnI2Ytbm9tYnJlJykudmFsKCkudHJpbSgpOw0KICAgICAgICBpZiAoIXYpIHsgc2V0RmllbGRTdGF0ZSgnZi1ub21icmUnLCdpY29uLW5vbWJyZScsJ2ZiLW5vbWJyZScsJ2VycicsJ0NhbXBvIG9ibGlnYXRvcmlvLicpOyByZXR1cm4gZmFsc2U7IH0NCiAgICAgICAgc2V0RmllbGRTdGF0ZSgnZi1ub21icmUnLCdpY29uLW5vbWJyZScsJ2ZiLW5vbWJyZScsJ29rJyk7IHJldHVybiB0cnVlOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGNoZWNrQXBlbGxpZG8xKCkgew0KICAgICAgICB2YXIgdiA9ICQoJyNmLWFwZWxsaWRvMScpLnZhbCgpLnRyaW0oKTsNCiAgICAgICAgaWYgKCF2KSB7IHNldEZpZWxkU3RhdGUoJ2YtYXBlbGxpZG8xJywnaWNvbi1hcGVsbGlkbzEnLCdmYi1hcGVsbGlkbzEnLCdlcnInLCdDYW1wbyBvYmxpZ2F0b3Jpby4nKTsgcmV0dXJuIGZhbHNlOyB9DQogICAgICAgIHNldEZpZWxkU3RhdGUoJ2YtYXBlbGxpZG8xJywnaWNvbi1hcGVsbGlkbzEnLCdmYi1hcGVsbGlkbzEnLCdvaycpOyByZXR1cm4gdHJ1ZTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBjaGVja0FwZWxsaWRvMigpIHsNCiAgICAgICAgLy8gT3BjaW9uYWwg4oCUIG51bmNhIGVycm9yLCBzb2xvIGxpbXBpYXINCiAgICAgICAgc2V0RmllbGRTdGF0ZSgnZi1hcGVsbGlkbzInLCdpY29uLWFwZWxsaWRvMicsJ2ZiLWFwZWxsaWRvMicsJycpOyByZXR1cm4gdHJ1ZTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBjaGVja0RuaSgpIHsNCiAgICAgICAgdmFyIHYgPSAkKCcjZi1kbmknKS52YWwoKS50cmltKCkudG9VcHBlckNhc2UoKTsNCiAgICAgICAgaWYgKCF2KSB7IHNldEZpZWxkU3RhdGUoJ2YtZG5pJywnaWNvbi1kbmknLCdmYi1kbmknLCdlcnInLCdDYW1wbyBvYmxpZ2F0b3Jpby4nKTsgcmV0dXJuIGZhbHNlOyB9DQogICAgICAgIGlmICghdmFsaWRhckROSSh2KSkgeyBzZXRGaWVsZFN0YXRlKCdmLWRuaScsJ2ljb24tZG5pJywnZmItZG5pJywnZXJyJywnRE5JIGludsOhbGlkbyAoOCBkw61naXRvcyArIGxldHJhIGNvcnJlY3RhKS4nKTsgcmV0dXJuIGZhbHNlOyB9DQogICAgICAgIHNldEZpZWxkU3RhdGUoJ2YtZG5pJywnaWNvbi1kbmknLCdmYi1kbmknLCdvaycpOyByZXR1cm4gdHJ1ZTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBjaGVja0VtYWlsKCkgew0KICAgICAgICB2YXIgdiA9ICQoJyNmLWVtYWlsJykudmFsKCkudHJpbSgpOw0KICAgICAgICBpZiAoIXYpIHsgc2V0RmllbGRTdGF0ZSgnZi1lbWFpbCcsbnVsbCwnZmItZW1haWwnLCdlcnInLCdDYW1wbyBvYmxpZ2F0b3Jpby4nKTsgcmV0dXJuIGZhbHNlOyB9DQogICAgICAgIGlmICghdmFsaWRhckVtYWlsKHYpKSB7IHNldEZpZWxkU3RhdGUoJ2YtZW1haWwnLG51bGwsJ2ZiLWVtYWlsJywnZXJyJywnRm9ybWF0byBkZSBlbWFpbCBpbnbDoWxpZG8uJyk7IHJldHVybiBmYWxzZTsgfQ0KICAgICAgICBzZXRGaWVsZFN0YXRlKCdmLWVtYWlsJyxudWxsLCdmYi1lbWFpbCcsJ29rJyk7IHJldHVybiB0cnVlOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGNoZWNrQ2VudHJvKCkgew0KICAgICAgICB2YXIgdiA9IHBhcnNlSW50KCQoJyNmLWNlbnRybycpLnZhbCgpKTsNCiAgICAgICAgaWYgKCF2IHx8IHYgPCAxKSB7IHNldEZpZWxkU3RhdGUoJ2YtY2VudHJvJywnaWNvbi1jZW50cm8nLCdmYi1jZW50cm8nLCdlcnInLCdJbnRyb2R1Y2UgdW4gY2VudHJvIHbDoWxpZG8uJyk7IHJldHVybiBmYWxzZTsgfQ0KICAgICAgICBzZXRGaWVsZFN0YXRlKCdmLWNlbnRybycsJ2ljb24tY2VudHJvJywnZmItY2VudHJvJywnb2snKTsgcmV0dXJuIHRydWU7DQogICAgfQ0KDQogICAgLy8g4pSA4pSAIE1FRElET1IgREUgRk9SVEFMRVpBIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KDQogICAgZnVuY3Rpb24gZXZhbHVhclBhc3MocGFzcykgew0KICAgICAgICB2YXIgc2NvcmUgPSAwOw0KICAgICAgICB2YXIgb2tMZW4gICA9IHBhc3MubGVuZ3RoID49IDg7DQogICAgICAgIHZhciBva1VwcGVyID0gL1tBLVpdLy50ZXN0KHBhc3MpOw0KICAgICAgICB2YXIgb2tOdW0gICA9IC9bMC05XS8udGVzdChwYXNzKTsNCiAgICAgICAgdmFyIG9rU3BlYyAgPSAvW15BLVphLXowLTldLy50ZXN0KHBhc3MpOw0KICAgICAgICB2YXIgb2tMZW4xMiA9IHBhc3MubGVuZ3RoID49IDEyOw0KDQogICAgICAgIGlmIChva0xlbikgICBzY29yZSsrOw0KICAgICAgICBpZiAob2tVcHBlcikgc2NvcmUrKzsNCiAgICAgICAgaWYgKG9rTnVtKSAgIHNjb3JlKys7DQogICAgICAgIGlmIChva1NwZWMpICBzY29yZSsrOw0KICAgICAgICBpZiAob2tMZW4xMikgc2NvcmUrKzsNCg0KICAgICAgICByZXR1cm4geyBzY29yZTogc2NvcmUsIG9rTGVuOiBva0xlbiwgb2tVcHBlcjogb2tVcHBlciwgb2tOdW06IG9rTnVtIH07DQogICAgfQ0KDQogICAgZnVuY3Rpb24gYWN0dWFsaXphck1lZGlkb3IocGFzcykgew0KICAgICAgICB2YXIgZXYgPSBldmFsdWFyUGFzcyhwYXNzKTsNCg0KICAgICAgICAvLyBSZXF1aXNpdG9zIHZpc3VhbGVzDQogICAgICAgICQoJyNwYXNzLXJlcXMnKS5hZGRDbGFzcygndmlzaWJsZScpOw0KICAgICAgICBzZXRSZXEoJ3JlcS1sZW4nLCAgIGV2Lm9rTGVuKTsNCiAgICAgICAgc2V0UmVxKCdyZXEtdXBwZXInLCBldi5va1VwcGVyKTsNCiAgICAgICAgc2V0UmVxKCdyZXEtbnVtJywgICBldi5va051bSk7DQoNCiAgICAgICAgLy8gQmFycmENCiAgICAgICAgJCgnI3N0cmVuZ3RoLXdyYXAnKS5hZGRDbGFzcygndmlzaWJsZScpOw0KICAgICAgICB2YXIgcGN0ICAgPSBNYXRoLm1pbigxMDAsIGV2LnNjb3JlICogMjApOw0KICAgICAgICB2YXIgY29sb3IsIGxhYmVsOw0KICAgICAgICBpZiAgICAgIChldi5zY29yZSA8PSAxKSB7IGNvbG9yID0gJyNlNzRjM2MnOyBsYWJlbCA9ICdNdXkgZMOpYmlsJzsgfQ0KICAgICAgICBlbHNlIGlmIChldi5zY29yZSA9PT0gMikgeyBjb2xvciA9ICcjZjM5YzEyJzsgbGFiZWwgPSAnRMOpYmlsJzsgICAgIH0NCiAgICAgICAgZWxzZSBpZiAoZXYuc2NvcmUgPT09IDMpIHsgY29sb3IgPSAnI2YxYzQwZic7IGxhYmVsID0gJ0FjZXB0YWJsZSc7IH0NCiAgICAgICAgZWxzZSBpZiAoZXYuc2NvcmUgPT09IDQpIHsgY29sb3IgPSAnIzJlY2M3MSc7IGxhYmVsID0gJ0Z1ZXJ0ZSc7ICAgIH0NCiAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgIHsgY29sb3IgPSAnIzFBQkI5Qyc7IGxhYmVsID0gJ011eSBmdWVydGUnO30NCg0KICAgICAgICAkKCcjc3RyZW5ndGgtYmFyJykuY3NzKHsgd2lkdGg6IHBjdCArICclJywgYmFja2dyb3VuZDogY29sb3IgfSk7DQogICAgICAgICQoJyNzdHJlbmd0aC1sYWJlbCcpLnRleHQobGFiZWwpLmNzcygnY29sb3InLCBjb2xvcik7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gc2V0UmVxKGlkLCBvaykgew0KICAgICAgICB2YXIgJGxpID0gJCgnIycgKyBpZCk7DQogICAgICAgICRsaS5yZW1vdmVDbGFzcygnb2sgZXJyJykuYWRkQ2xhc3Mob2sgPyAnb2snIDogJ2VycicpOw0KICAgICAgICAkbGkuZmluZCgnaScpLnJlbW92ZUNsYXNzKCdmYS1jaXJjbGUtbyBmYS1jaGVjayBmYS10aW1lcycpDQogICAgICAgICAgICAuYWRkQ2xhc3Mob2sgPyAnZmEtY2hlY2snIDogJ2ZhLXRpbWVzJyk7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gY2hlY2tQYXNzKCkgew0KICAgICAgICB2YXIgcGFzcyA9ICQoJyNmLXBhc3MnKS52YWwoKTsNCiAgICAgICAgaWYgKCFwYXNzKSB7DQogICAgICAgICAgICAkKCcjc3RyZW5ndGgtd3JhcCwgI3Bhc3MtcmVxcycpLnJlbW92ZUNsYXNzKCd2aXNpYmxlJyk7DQogICAgICAgICAgICBzZXRGaWVsZFN0YXRlKCdmLXBhc3MnLCBudWxsLCBudWxsLCAnZXJyJyk7DQogICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIH0NCiAgICAgICAgYWN0dWFsaXphck1lZGlkb3IocGFzcyk7DQogICAgICAgIHZhciBldiA9IGV2YWx1YXJQYXNzKHBhc3MpOw0KICAgICAgICB2YXIgdmFsaWQgPSBldi5va0xlbiAmJiBldi5va1VwcGVyICYmIGV2Lm9rTnVtOw0KICAgICAgICBzZXRGaWVsZFN0YXRlKCdmLXBhc3MnLCBudWxsLCBudWxsLCB2YWxpZCA/ICdvaycgOiAnZXJyJyk7DQogICAgICAgIGNoZWNrUGFzczIoKTsgLy8gcmUtZXZhbHVhciBjb25maXJtYWNpw7NuIHNpIHlhIHRpZW5lIGFsZ28NCiAgICAgICAgcmV0dXJuIHZhbGlkOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGNoZWNrUGFzczIoKSB7DQogICAgICAgIHZhciBwYXNzICA9ICQoJyNmLXBhc3MnKS52YWwoKTsNCiAgICAgICAgdmFyIHBhc3MyID0gJCgnI2YtcGFzczInKS52YWwoKTsNCiAgICAgICAgaWYgKCFwYXNzMikgew0KICAgICAgICAgICAgc2V0RmllbGRTdGF0ZSgnZi1wYXNzMicsIG51bGwsICdmYi1wYXNzMicsICcnKTsNCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfQ0KICAgICAgICBpZiAocGFzcyAhPT0gcGFzczIpIHsNCiAgICAgICAgICAgIHNldEZpZWxkU3RhdGUoJ2YtcGFzczInLCBudWxsLCAnZmItcGFzczInLCAnZXJyJywgJ0xhcyBjb250cmFzZcOxYXMgbm8gY29pbmNpZGVuLicpOw0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9DQogICAgICAgIHNldEZpZWxkU3RhdGUoJ2YtcGFzczInLCBudWxsLCAnZmItcGFzczInLCAnb2snLCAn4pyTIENvbnRyYXNlw7FhcyBjb2luY2lkZW4uJyk7DQogICAgICAgIHJldHVybiB0cnVlOw0KICAgIH0NCg0KICAgIC8vIOKUgOKUgCBIQUJJTElUQUNJw5NOIERFTCBCT1TDk04g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQoNCiAgICBmdW5jdGlvbiBldmFsdWFyRm9ybXVsYXJpbygpIHsNCiAgICAgICAgdmFyIGV2ID0gZXZhbHVhclBhc3MoJCgnI2YtcGFzcycpLnZhbCgpKTsNCiAgICAgICAgdmFyIHBhc3NPayA9IGV2Lm9rTGVuICYmIGV2Lm9rVXBwZXIgJiYgZXYub2tOdW07DQogICAgICAgIHZhciBtYXRjaCAgPSAkKCcjZi1wYXNzJykudmFsKCkgPT09ICQoJyNmLXBhc3MyJykudmFsKCkgJiYgJCgnI2YtcGFzczInKS52YWwoKSAhPT0gJyc7DQoNCiAgICAgICAgdmFyIG9rID0NCiAgICAgICAgICAgICQoJyNmLW5vbWJyZScpLnZhbCgpLnRyaW0oKSAgICAhPT0gJycgJiYNCiAgICAgICAgICAgICQoJyNmLWFwZWxsaWRvMScpLnZhbCgpLnRyaW0oKSAhPT0gJycgJiYNCiAgICAgICAgICAgIHZhbGlkYXJETkkoJCgnI2YtZG5pJykudmFsKCkpICAgICAgICAmJg0KICAgICAgICAgICAgdmFsaWRhckVtYWlsKCQoJyNmLWVtYWlsJykudmFsKCkpICAgICYmDQogICAgICAgICAgICBwYXJzZUludCgkKCcjZi1jZW50cm8nKS52YWwoKSkgPiAwICAgJiYNCiAgICAgICAgICAgIHBhc3NPayAmJiBtYXRjaDsNCg0KICAgICAgICAkKCcjYnRuLXJlZycpLnByb3AoJ2Rpc2FibGVkJywgIW9rKTsNCiAgICB9DQoNCiAgICAvLyAtLS0gVE9HR0xFIENPTlRSQVNFw5FBIC0tLS0tLS0tLS0tLS0tLS0tLQ0KDQogICAgJChkb2N1bWVudCkub24oJ2NsaWNrJywgJy5idG4tdG9nZ2xlLXBhc3MnLCBmdW5jdGlvbigpIHsNCiAgICAgICAgdmFyIHRhcmdldElkID0gJCh0aGlzKS5kYXRhKCd0YXJnZXQnKTsNCiAgICAgICAgdmFyICRpbnB1dCAgID0gJCgnIycgKyB0YXJnZXRJZCk7DQogICAgICAgIHZhciAkaWNvbiAgICA9ICQodGhpcykuZmluZCgnaScpOw0KICAgICAgICB2YXIgaXNQYXNzICAgPSAkaW5wdXQuYXR0cigndHlwZScpID09PSAncGFzc3dvcmQnOw0KICAgICAgICAkaW5wdXQuYXR0cigndHlwZScsIGlzUGFzcyA/ICd0ZXh0JyA6ICdwYXNzd29yZCcpOw0KICAgICAgICAkaWNvbi50b2dnbGVDbGFzcygnZmEtZXllIGZhLWV5ZS1zbGFzaCcpOw0KICAgIH0pOw0KDQogICAgLy8gLS0tIEROSTogZm9yemFyIG1hecO6c2N1bGFzIGFsIGVzY3JpYmlyIC0tLS0tLS0tLS0tLQ0KDQogICAgJCgnI2YtZG5pJykub24oJ2lucHV0JywgZnVuY3Rpb24oKSB7DQogICAgICAgIHZhciBwb3MgPSB0aGlzLnNlbGVjdGlvblN0YXJ0Ow0KICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZS50b1VwcGVyQ2FzZSgpOw0KICAgICAgICB0aGlzLnNldFNlbGVjdGlvblJhbmdlKHBvcywgcG9zKTsNCiAgICB9KTsNCg0KICAgIC8vIC0tLSBCSU5EIEVWRU5UT1MNCg0KICAgICQoJyNmLW5vbWJyZScpLm9uKCdibHVyJywgY2hlY2tOb21icmUpOw0KICAgICQoJyNmLWFwZWxsaWRvMScpLm9uKCdibHVyJywgY2hlY2tBcGVsbGlkbzEpOw0KICAgICQoJyNmLWFwZWxsaWRvMicpLm9uKCdibHVyJywgY2hlY2tBcGVsbGlkbzIpOw0KICAgICQoJyNmLWRuaScpLm9uKCdibHVyJywgY2hlY2tEbmkpOw0KICAgICQoJyNmLWVtYWlsJykub24oJ2JsdXInLCBjaGVja0VtYWlsKTsNCiAgICAkKCcjZi1jZW50cm8nKS5vbignYmx1cicsIGNoZWNrQ2VudHJvKTsNCiAgICAkKCcjZi1wYXNzJykub24oJ2lucHV0JywgY2hlY2tQYXNzKTsNCiAgICAkKCcjZi1wYXNzMicpLm9uKCdpbnB1dCcsIGNoZWNrUGFzczIpOw0KDQogICAgLy8gSGFiaWxpdGFyIGJvdMOzbiBlbiBjYWRhIGNhbWJpbw0KICAgICQoJyNmLW5vbWJyZSwgI2YtYXBlbGxpZG8xLCAjZi1kbmksICNmLWVtYWlsLCAjZi1jZW50cm8sICNmLXBhc3MsICNmLXBhc3MyJykNCiAgICAgICAgLm9uKCdpbnB1dCBjaGFuZ2UnLCBldmFsdWFyRm9ybXVsYXJpbyk7DQoNCiAgICAvLyAtLS0gRU5Ww41PIC0tLS0tLS0tLS0tLQ0KDQogICAgZnVuY3Rpb24gbW9zdHJhckFsZXJ0YSh0aXBvLCBtc2cpIHsNCiAgICAgICAgdmFyICRhID0gJCgnI3JlZy1hbGVydCcpOw0KICAgICAgICAkYS5yZW1vdmVDbGFzcygnYWxlcnQtZGFuZ2VyIGFsZXJ0LXN1Y2Nlc3MnKS5oaWRlKCk7DQogICAgICAgIHZhciBpY29uID0gdGlwbyA9PT0gJ3N1Y2Nlc3MnID8gJ2ZhLWNoZWNrLWNpcmNsZScgOiAnZmEtZXhjbGFtYXRpb24tY2lyY2xlJzsNCiAgICAgICAgJGEuYWRkQ2xhc3ModGlwbyA9PT0gJ3N1Y2Nlc3MnID8gJ2FsZXJ0LXN1Y2Nlc3MnIDogJ2FsZXJ0LWRhbmdlcicpDQogICAgICAgICAgICAuaHRtbCgnPGkgY2xhc3M9ImZhICcgKyBpY29uICsgJyI+PC9pPicgKyBtc2cpDQogICAgICAgICAgICAuZmFkZUluKDIwMCk7DQogICAgICAgICQoJ2h0bWwsIGJvZHknKS5hbmltYXRlKHsgc2Nyb2xsVG9wOiAkYS5vZmZzZXQoKS50b3AgLSAyMCB9LCAzMDApOw0KICAgIH0NCg0KICAgICQoJyNidG4tcmVnJykub24oJ2NsaWNrJywgZnVuY3Rpb24oKSB7DQogICAgICAgIC8vIFZhbGlkYXIgdG9kb3MgYW50ZXMgZGUgZW52aWFyDQogICAgICAgIHZhciBvayA9IGNoZWNrTm9tYnJlKCkgJiBjaGVja0FwZWxsaWRvMSgpICYgY2hlY2tEbmkoKSAmIGNoZWNrRW1haWwoKSAmIGNoZWNrQ2VudHJvKCkgJiBjaGVja1Bhc3MoKSAmIGNoZWNrUGFzczIoKTsNCiAgICAgICAgaWYgKCFvaykgew0KICAgICAgICAgICAgbW9zdHJhckFsZXJ0YSgnZGFuZ2VyJywgJ1JldmlzYSBsb3MgY2FtcG9zIG1hcmNhZG9zIGVuIHJvam8gYW50ZXMgZGUgY29udGludWFyLicpOw0KICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICB9DQoNCiAgICAgICAgdmFyICRidG4gPSAkKHRoaXMpLmFkZENsYXNzKCdsb2FkaW5nJyk7DQoNCiAgICAgICAgJC5hamF4KHsNCiAgICAgICAgICAgIHVybCAgICAgOiAnLi4vLi4vb2xpL2JhY2tlbmQvYXBpLnBocCcsDQogICAgICAgICAgICBtZXRob2QgIDogJ1BPU1QnLA0KICAgICAgICAgICAgZGF0YVR5cGU6ICdqc29uJywNCiAgICAgICAgICAgIGRhdGEgICAgOiB7DQogICAgICAgICAgICAgICAgYWN0aW9uICAgICAgICAgIDogJ2NyZWF0ZV91c2VyJywNCiAgICAgICAgICAgICAgICBub21icmUgICAgICAgICAgOiAkKCcjZi1ub21icmUnKS52YWwoKS50cmltKCksDQogICAgICAgICAgICAgICAgYXBlbGxpZG8xICAgICAgIDogJCgnI2YtYXBlbGxpZG8xJykudmFsKCkudHJpbSgpLA0KICAgICAgICAgICAgICAgIGFwZWxsaWRvMiAgICAgICA6ICQoJyNmLWFwZWxsaWRvMicpLnZhbCgpLnRyaW0oKSwNCiAgICAgICAgICAgICAgICBkbmkgICAgICAgICAgICAgOiAkKCcjZi1kbmknKS52YWwoKS50cmltKCkudG9VcHBlckNhc2UoKSwNCiAgICAgICAgICAgICAgICBlbWFpbCAgICAgICAgICAgOiAkKCcjZi1lbWFpbCcpLnZhbCgpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLA0KICAgICAgICAgICAgICAgIHBhc3N3b3JkICAgICAgICA6ICQoJyNmLXBhc3MnKS52YWwoKSwNCiAgICAgICAgICAgICAgICBwYXNzd29yZF9jb25maXJtOiAkKCcjZi1wYXNzMicpLnZhbCgpLA0KICAgICAgICAgICAgICAgIGNlbnRybyAgICAgICAgICA6ICQoJyNmLWNlbnRybycpLnZhbCgpLA0KICAgICAgICAgICAgICAgIGNpZiAgICAgICAgICAgICA6ICQoJyNmLWNpZicpLnZhbCgpLnRyaW0oKS50b1VwcGVyQ2FzZSgpDQogICAgICAgICAgICB9LA0KICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24ocmVzcG9uc2UpIHsNCiAgICAgICAgICAgICAgICAkYnRuLnJlbW92ZUNsYXNzKCdsb2FkaW5nJyk7DQogICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLm9rKSB7DQogICAgICAgICAgICAgICAgICAgIG1vc3RyYXJBbGVydGEoJ3N1Y2Nlc3MnLCAnVXN1YXJpbyBjcmVhZG8gY29ycmVjdGFtZW50ZSAoSUQ6ICcgKyByZXNwb25zZS5pZCArICcpLiBQdWVkZXMgY3JlYXIgb3RybyBvIHZvbHZlciBhbCBwYW5lbC4nKTsNCiAgICAgICAgICAgICAgICAgICAgLy8gTGltcGlhciBmb3JtdWxhcmlvDQogICAgICAgICAgICAgICAgICAgICQoJyNmLW5vbWJyZSwgI2YtYXBlbGxpZG8xLCAjZi1hcGVsbGlkbzIsICNmLWRuaSwgI2YtZW1haWwsICNmLWNlbnRybywgI2YtY2lmLCAjZi1wYXNzLCAjZi1wYXNzMicpDQogICAgICAgICAgICAgICAgICAgICAgICAudmFsKCcnKS5yZW1vdmVDbGFzcygnaXMtdmFsaWQgaXMtaW52YWxpZCcpOw0KICAgICAgICAgICAgICAgICAgICAkKCcuZmllbGQtZmVlZGJhY2snKS5yZW1vdmVDbGFzcygnc2hvdy1vayBzaG93LWVycicpLnRleHQoJycpOw0KICAgICAgICAgICAgICAgICAgICAkKCcuZmllbGQtaWNvbicpLnJlbW92ZUNsYXNzKCd2YWxpZCBpbnZhbGlkIGZhLWNoZWNrIGZhLXRpbWVzJyk7DQogICAgICAgICAgICAgICAgICAgICQoJyNzdHJlbmd0aC13cmFwLCAjcGFzcy1yZXFzJykucmVtb3ZlQ2xhc3MoJ3Zpc2libGUnKTsNCiAgICAgICAgICAgICAgICAgICAgJCgnI2J0bi1yZWcnKS5wcm9wKCdkaXNhYmxlZCcsIHRydWUpOw0KICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICdsb2dpbi5waHAnOw0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgIG1vc3RyYXJBbGVydGEoJ2RhbmdlcicsIHJlc3BvbnNlLmVycm9yIHx8ICdObyBzZSBwdWRvIGNyZWFyIGVsIHVzdWFyaW8uJyk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSwNCiAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbih4aHIpIHsNCiAgICAgICAgICAgICAgICAkYnRuLnJlbW92ZUNsYXNzKCdsb2FkaW5nJyk7DQogICAgICAgICAgICAgICAgdmFyIG1zZyA9ICdFcnJvciBkZSBjb25leGnDs24gY29uIGVsIHNlcnZpZG9yLic7DQogICAgICAgICAgICAgICAgdHJ5IHsgdmFyIGQgPSBKU09OLnBhcnNlKHhoci5yZXNwb25zZVRleHQpOyBpZiAoZCAmJiBkLmVycm9yKSBtc2cgPSBkLmVycm9yOyB9IGNhdGNoKGUpIHt9DQogICAgICAgICAgICAgICAgbW9zdHJhckFsZXJ0YSgnZGFuZ2VyJywgbXNnKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSk7DQogICAgfSk7DQoNCiAgICAvLyAtLS0gQ29tcHJvYmFyIHNlc2nDs24gYWN0aXZhIChyZWRpcmlnZSBhIGxvZ2luIHNpIG5vIGhheSkgLS0tLS0tLS0tLS0tDQo8L3NjcmlwdD4NCjwvYm9keT4NCjwvaHRtbD4iO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAZG9jQmxvY2siO047czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBtZXRhZGF0YSI7YTowOnt9fQ==";