WyI8IS0tIEZhY2Vib29rIFBpeGVsIENvZGUgLS0+XG4gICAgPHNjcmlwdD5cbiAgICAgICAgZnVuY3Rpb24gZ2V0RkJDb29raWUoY25hbWUpIHtcbiAgICAgICAgICAgIGxldCBuYW1lID0gY25hbWUgKyBcIj1cIjtcbiAgICAgICAgICAgIGxldCBkZWNvZGVkQ29va2llID0gZGVjb2RlVVJJQ29tcG9uZW50KGRvY3VtZW50LmNvb2tpZSk7XG4gICAgICAgICAgICBsZXQgY2EgPSBkZWNvZGVkQ29va2llLnNwbGl0KCc7Jyk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IGMgPSBjYVtpXTtcbiAgICAgICAgICAgICAgICB3aGlsZSAoYy5jaGFyQXQoMCkgPT0gJyAnKSB7XG4gICAgICAgICAgICAgICAgICAgIGMgPSBjLnN1YnN0cmluZygxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGMuaW5kZXhPZihuYW1lKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjLnN1YnN0cmluZyhuYW1lLmxlbmd0aCwgYy5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gZ2V0VXJsUGFyYW1ldGVyKHBhcmFtKSB7XG4gICAgICAgICAgICBjb25zdCB1cmxQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpO1xuICAgICAgICAgICAgcmV0dXJuIHVybFBhcmFtcy5nZXQocGFyYW0pO1xuICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gVHJhbnNpdGlvbmFsIGNsZWFudXAgdW50aWwgY29va2llcyBhcmUgZXhwaXJleC4gU2FmZSB0byBkZWxldGUgdGhpcyB3aG9sZSBibG9jayBhZnRlciAyMDI2LTA3LTIzLlxuICAgICAgICAgICAgZG9jdW1lbnQuY29va2llLnNwbGl0KCc7JykuZm9yRWFjaChmdW5jdGlvbiAoY29va2llKSB7XG4gICAgICAgICAgICAgICAgbGV0IGNvb2tpZU5hbWUgPSBjb29raWUuc3BsaXQoJz0nKVswXS50cmltKCk7XG4gICAgICAgICAgICAgICAgaWYgKGNvb2tpZU5hbWUuaW5kZXhPZignZmJfZXZlbnRfJykgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuY29va2llID0gY29va2llTmFtZSArICc9O2V4cGlyZXM9VGh1LCAwMSBKYW4gMTk3MCAwMDowMDowMCBHTVQ7cGF0aD0vJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgICAgICAgICAgXG4gICAgICAgICFmdW5jdGlvbiAoZiwgYiwgZSwgdiwgbiwgdCwgcykge1xuICAgICAgICAgICAgaWYgKGYuZmJxKSByZXR1cm47XG4gICAgICAgICAgICBuID0gZi5mYnEgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbi5jYWxsTWV0aG9kID9cbiAgICAgICAgICAgICAgICAgICAgbi5jYWxsTWV0aG9kLmFwcGx5KG4sIGFyZ3VtZW50cykgOiBuLnF1ZXVlLnB1c2goYXJndW1lbnRzKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoIWYuX2ZicSkgZi5fZmJxID0gbjtcbiAgICAgICAgICAgIG4ucHVzaCA9IG47XG4gICAgICAgICAgICBuLmxvYWRlZCA9ICEwO1xuICAgICAgICAgICAgbi52ZXJzaW9uID0gXCIyLjBcIjtcbiAgICAgICAgICAgIG4ucXVldWUgPSBbXTtcbiAgICAgICAgICAgIHQgPSBiLmNyZWF0ZUVsZW1lbnQoZSk7XG4gICAgICAgICAgICB0LmFzeW5jID0gITA7XG4gICAgICAgICAgICB0LnNyYyA9IHY7XG4gICAgICAgICAgICBzID0gYi5nZXRFbGVtZW50c0J5VGFnTmFtZShlKVswXTtcbiAgICAgICAgICAgIHMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodCwgcyk7XG4gICAgICAgIH0od2luZG93LCBkb2N1bWVudCwgXCJzY3JpcHRcIixcbiAgICAgICAgICAgIFwiaHR0cHM6Ly9jb25uZWN0LmZhY2Vib29rLm5ldC9lbl9VUy9mYmV2ZW50cy5qc1wiKTtcblxuICAgICAgICBmYnEoXCJpbml0XCIsICc2Mzg4MTQ5MjkyODcwNzUnKTtcbiAgICAgICAgICAgICAgICBsZXQgZXZlbnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgbGV0IGZicCA9IGdldEZCQ29va2llKCdfZmJwJyk7XG4gICAgICAgIGxldCBmYmMgPSBnZXRGQkNvb2tpZSgnX2ZiYycpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdHhJZCA9IGdldFVybFBhcmFtZXRlcignZm9ybV9zdWJtaXNzaW9uX2lkJykgPz8gZXZlbnRUaW1lO1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCBldmVudCA9IGdldFVybFBhcmFtZXRlcignZm9ybV9zdWJtaXNzaW9uX2lkJykgPyAnTGVhZCcgOiAnUGFnZVZpZXcnO1xuICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgZXZlbnRJRCA9IGBwYWdlLiR7ZXZlbnR9LnR4XyR7dHhJZH1gO1xuICAgICAgICBcbiAgICAgICAgXG4gICAgICAgIGlmIChldmVudCkge1xuICAgICAgICAgICAgbGV0IGV2ZW50U3RvcmFnZUtleSA9ICdmYl9ldmVudF8nICsgZXZlbnRJRDtcbiAgICAgICAgICAgIGxldCBldmVudFRyYWNrZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZXZlbnRUcmFja2VkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oZXZlbnRTdG9yYWdlS2V5KSAhPT0gbnVsbDtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAvLyBsb2NhbFN0b3JhZ2UgbWF5IGJlIHVuYXZhaWxhYmxlIChwcml2YXRlIG1vZGUgLyBkaXNhYmxlZCBzdG9yYWdlKTsgZmlyZSBhbnl3YXkuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghZXZlbnRUcmFja2VkKSB7XG4gICAgICAgICAgICAgICAgbGV0IGZiRGF0YSA9IHt9O1xuXG4gICAgICAgICAgICAgICAgaWYgKGZicCAhPT0gXCJcIikge1xuICAgICAgICAgICAgICAgICAgICBmYkRhdGEuZmJwID0gZmJwO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChmYmMgIT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgZmJEYXRhLmZiYyA9IGZiYztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBmYnEoXCJ0cmFja1wiLCAnUGFnZVZpZXcnLCBmYkRhdGEsIHsgZXZlbnRJRDogZXZlbnRJRCB9KTtcblxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGV2ZW50U3RvcmFnZUtleSwgZXZlbnRUaW1lLnRvU3RyaW5nKCkpO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIGV2ZW50SUQgaXMgdW5pcXVlIHBlciBwYWdlIGxvYWQgZm9yIG5vbiBgUHVyY2hhc2VgIGV2ZW50cyAoUGFnZVZpZXcsQWRkVG9DYXJ0IGV0YyksIHNvIHdlIGNhcFxuICAgICAgICAgICAgICAgICAgICAvLyB0aGUgYW1vdW50IG9mIGtleXMgYmVjYXVzZSBmcmVxdWVudCB0ZXN0aW5nIHRoZSBzYW1lIHBhZ2Ugd291bGQgYnJlYWsgdGhlIGxvY2FsU3RvcmFnZSBxdW90YVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBmYkV2ZW50S2V5cyA9IE9iamVjdC5rZXlzKGxvY2FsU3RvcmFnZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoa2V5ID0+IGtleS5pbmRleE9mKCdmYl9ldmVudF8nKSA9PT0gMClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoa2V5ID0+ICh7IGtleToga2V5LCB0aW1lc3RhbXA6IHBhcnNlSW50KGxvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSksIDEwKSB8fCAwIH0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGIudGltZXN0YW1wIC0gYS50aW1lc3RhbXApO1xuICAgICAgICAgICAgICAgICAgICBmYkV2ZW50S2V5cy5zbGljZSg1MCkuZm9yRWFjaChlbnRyeSA9PiBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShlbnRyeS5rZXkpKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIElnbm9yZSBzdG9yYWdlIGZhaWx1cmVzIChxdW90YSAvIHByaXZhdGUgbW9kZSkuXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICA8L3NjcmlwdD5cbiAgICA8IS0tIEVuZCBGYWNlYm9vayBQaXhlbCBDb2RlIC0tPlxuIix7Im5hbWUiOiJmYiIsImxvY2F0aW9uIjoiaGVhZCIsImNvbnNlbnRUeXBlIjoic3RhdGlzdGljYWwiLCJjb250ZW50IjoiPCEtLSBGYWNlYm9vayBQaXhlbCBDb2RlIC0tPlxuICAgIDxzY3JpcHQ+XG4gICAgICAgIGZ1bmN0aW9uIGdldEZCQ29va2llKGNuYW1lKSB7XG4gICAgICAgICAgICBsZXQgbmFtZSA9IGNuYW1lICsgXCI9XCI7XG4gICAgICAgICAgICBsZXQgZGVjb2RlZENvb2tpZSA9IGRlY29kZVVSSUNvbXBvbmVudChkb2N1bWVudC5jb29raWUpO1xuICAgICAgICAgICAgbGV0IGNhID0gZGVjb2RlZENvb2tpZS5zcGxpdCgnOycpO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjYS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBjID0gY2FbaV07XG4gICAgICAgICAgICAgICAgd2hpbGUgKGMuY2hhckF0KDApID09ICcgJykge1xuICAgICAgICAgICAgICAgICAgICBjID0gYy5zdWJzdHJpbmcoMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChjLmluZGV4T2YobmFtZSkgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYy5zdWJzdHJpbmcobmFtZS5sZW5ndGgsIGMubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGdldFVybFBhcmFtZXRlcihwYXJhbSkge1xuICAgICAgICAgICAgY29uc3QgdXJsUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTtcbiAgICAgICAgICAgIHJldHVybiB1cmxQYXJhbXMuZ2V0KHBhcmFtKTtcbiAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIFRyYW5zaXRpb25hbCBjbGVhbnVwIHVudGlsIGNvb2tpZXMgYXJlIGV4cGlyZXguIFNhZmUgdG8gZGVsZXRlIHRoaXMgd2hvbGUgYmxvY2sgYWZ0ZXIgMjAyNi0wNy0yMy5cbiAgICAgICAgICAgIGRvY3VtZW50LmNvb2tpZS5zcGxpdCgnOycpLmZvckVhY2goZnVuY3Rpb24gKGNvb2tpZSkge1xuICAgICAgICAgICAgICAgIGxldCBjb29raWVOYW1lID0gY29va2llLnNwbGl0KCc9JylbMF0udHJpbSgpO1xuICAgICAgICAgICAgICAgIGlmIChjb29raWVOYW1lLmluZGV4T2YoJ2ZiX2V2ZW50XycpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmNvb2tpZSA9IGNvb2tpZU5hbWUgKyAnPTtleHBpcmVzPVRodSwgMDEgSmFuIDE5NzAgMDA6MDA6MDAgR01UO3BhdGg9Lyc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICAgICAgICAgIFxuICAgICAgICAhZnVuY3Rpb24gKGYsIGIsIGUsIHYsIG4sIHQsIHMpIHtcbiAgICAgICAgICAgIGlmIChmLmZicSkgcmV0dXJuO1xuICAgICAgICAgICAgbiA9IGYuZmJxID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIG4uY2FsbE1ldGhvZCA/XG4gICAgICAgICAgICAgICAgICAgIG4uY2FsbE1ldGhvZC5hcHBseShuLCBhcmd1bWVudHMpIDogbi5xdWV1ZS5wdXNoKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKCFmLl9mYnEpIGYuX2ZicSA9IG47XG4gICAgICAgICAgICBuLnB1c2ggPSBuO1xuICAgICAgICAgICAgbi5sb2FkZWQgPSAhMDtcbiAgICAgICAgICAgIG4udmVyc2lvbiA9IFwiMi4wXCI7XG4gICAgICAgICAgICBuLnF1ZXVlID0gW107XG4gICAgICAgICAgICB0ID0gYi5jcmVhdGVFbGVtZW50KGUpO1xuICAgICAgICAgICAgdC5hc3luYyA9ICEwO1xuICAgICAgICAgICAgdC5zcmMgPSB2O1xuICAgICAgICAgICAgcyA9IGIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoZSlbMF07XG4gICAgICAgICAgICBzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHQsIHMpO1xuICAgICAgICB9KHdpbmRvdywgZG9jdW1lbnQsIFwic2NyaXB0XCIsXG4gICAgICAgICAgICBcImh0dHBzOi8vY29ubmVjdC5mYWNlYm9vay5uZXQvZW5fVVMvZmJldmVudHMuanNcIik7XG5cbiAgICAgICAgZmJxKFwiaW5pdFwiLCAnNjM4ODE0OTI5Mjg3MDc1Jyk7XG4gICAgICAgICAgICAgICAgbGV0IGV2ZW50VGltZSA9IERhdGUubm93KCk7XG4gICAgICAgIGxldCBmYnAgPSBnZXRGQkNvb2tpZSgnX2ZicCcpO1xuICAgICAgICBsZXQgZmJjID0gZ2V0RkJDb29raWUoJ19mYmMnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHR4SWQgPSBnZXRVcmxQYXJhbWV0ZXIoJ2Zvcm1fc3VibWlzc2lvbl9pZCcpID8/IGV2ZW50VGltZTtcblxuICAgICAgICAgICAgICAgICAgICBsZXQgZXZlbnQgPSBnZXRVcmxQYXJhbWV0ZXIoJ2Zvcm1fc3VibWlzc2lvbl9pZCcpID8gJ0xlYWQnIDogJ1BhZ2VWaWV3JztcbiAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50SUQgPSBgcGFnZS4ke2V2ZW50fS50eF8ke3R4SWR9YDtcbiAgICAgICAgXG4gICAgICAgIFxuICAgICAgICBpZiAoZXZlbnQpIHtcbiAgICAgICAgICAgIGxldCBldmVudFN0b3JhZ2VLZXkgPSAnZmJfZXZlbnRfJyArIGV2ZW50SUQ7XG4gICAgICAgICAgICBsZXQgZXZlbnRUcmFja2VkID0gZmFsc2U7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGV2ZW50VHJhY2tlZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKGV2ZW50U3RvcmFnZUtleSkgIT09IG51bGw7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgLy8gbG9jYWxTdG9yYWdlIG1heSBiZSB1bmF2YWlsYWJsZSAocHJpdmF0ZSBtb2RlIC8gZGlzYWJsZWQgc3RvcmFnZSk7IGZpcmUgYW55d2F5LlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIWV2ZW50VHJhY2tlZCkge1xuICAgICAgICAgICAgICAgIGxldCBmYkRhdGEgPSB7fTtcblxuICAgICAgICAgICAgICAgIGlmIChmYnAgIT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgZmJEYXRhLmZicCA9IGZicDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoZmJjICE9PSBcIlwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGZiRGF0YS5mYmMgPSBmYmM7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgZmJxKFwidHJhY2tcIiwgJ1BhZ2VWaWV3JywgZmJEYXRhLCB7IGV2ZW50SUQ6IGV2ZW50SUQgfSk7XG5cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShldmVudFN0b3JhZ2VLZXksIGV2ZW50VGltZS50b1N0cmluZygpKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBldmVudElEIGlzIHVuaXF1ZSBwZXIgcGFnZSBsb2FkIGZvciBub24gYFB1cmNoYXNlYCBldmVudHMgKFBhZ2VWaWV3LEFkZFRvQ2FydCBldGMpLCBzbyB3ZSBjYXBcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGFtb3VudCBvZiBrZXlzIGJlY2F1c2UgZnJlcXVlbnQgdGVzdGluZyB0aGUgc2FtZSBwYWdlIHdvdWxkIGJyZWFrIHRoZSBsb2NhbFN0b3JhZ2UgcXVvdGFcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmJFdmVudEtleXMgPSBPYmplY3Qua2V5cyhsb2NhbFN0b3JhZ2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKGtleSA9PiBrZXkuaW5kZXhPZignZmJfZXZlbnRfJykgPT09IDApXG4gICAgICAgICAgICAgICAgICAgICAgICAubWFwKGtleSA9PiAoeyBrZXk6IGtleSwgdGltZXN0YW1wOiBwYXJzZUludChsb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpLCAxMCkgfHwgMCB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBiLnRpbWVzdGFtcCAtIGEudGltZXN0YW1wKTtcbiAgICAgICAgICAgICAgICAgICAgZmJFdmVudEtleXMuc2xpY2UoNTApLmZvckVhY2goZW50cnkgPT4gbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oZW50cnkua2V5KSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBJZ25vcmUgc3RvcmFnZSBmYWlsdXJlcyAocXVvdGEgLyBwcml2YXRlIG1vZGUpLlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgPC9zY3JpcHQ+XG4gICAgPCEtLSBFbmQgRmFjZWJvb2sgUGl4ZWwgQ29kZSAtLT5cbiIsImF0dHJpYnV0ZXMiOm51bGx9LHsibmFtZSI6IkhlYWQgYm92ZW5zdGUgY29kZSIsImxvY2F0aW9uIjoiaGVhZCIsImNvbnNlbnRUeXBlIjoic3RhdGlzdGljYWwiLCJjb250ZW50IjoiPCEtLSBHb29nbGUgVGFnIE1hbmFnZXIgLS0+XG48c2NyaXB0PihmdW5jdGlvbih3LGQscyxsLGkpe3dbbF09d1tsXXx8W107d1tsXS5wdXNoKHsnZ3RtLnN0YXJ0Jzpcbm5ldyBEYXRlKCkuZ2V0VGltZSgpLGV2ZW50OidndG0uanMnfSk7dmFyIGY9ZC5nZXRFbGVtZW50c0J5VGFnTmFtZShzKVswXSxcbmo9ZC5jcmVhdGVFbGVtZW50KHMpLGRsPWwhPSdkYXRhTGF5ZXInPycmbD0nK2w6Jyc7ai5hc3luYz10cnVlO2ouc3JjPVxuJ2h0dHBzOi8vd3d3Lmdvb2dsZXRhZ21hbmFnZXIuY29tL2d0bS5qcz9pZD0nK2krZGw7Zi5wYXJlbnROb2RlLmluc2VydEJlZm9yZShqLGYpO1xufSkod2luZG93LGRvY3VtZW50LCdzY3JpcHQnLCdkYXRhTGF5ZXInLCdHVE0tVFBRQlBXVDInKTs8L3NjcmlwdD5cbjwhLS0gRW5kIEdvb2dsZSBUYWcgTWFuYWdlciAtLT5cbiIsImF0dHJpYnV0ZXMiOltdfV0=
Ga naar hoofdinhoud
Home
Abonnement
Cozy Coloring-cursus
Leerkracht-info
Proefles
Prijzen
Contact
Inloggen
Home
Abonnement
Cozy Coloring-cursus
Leerkracht-info
Proefles
Prijzen
Contact
Inloggen
Contact
Wil je meer weten, samenwerken of heb je een andere vraag? Contacteer ons gerust. Wij helpen je graag!
WhatsApp ons
Stuur ons een e-mail
Prijzen
Over ons
Gratis webinar
Wat is brushen?
Gratis proefles
Materiaaltips
Veelgestelde vragen
Info voor thuis
Info voor leerkrachten
Brush Academie cadeau geven
Printbare cadeaubonnen
Nieuwsbrief
Het boek
Boekenleggers brushen
Affiliate-programma
Algemene voorwaarden
Privacyverklaring
De Brush Academie van Brushjuf
E-mail via
[email protected]
WhatsApp de Brush Academie
Volg ons op Instagram
Volg ons op Facebook
W3sidHlwZSI6InJhd19odG1sIiwiY29udGVudCI6IjwhLS0gR29vZ2xlIFRhZyBNYW5hZ2VyIChub3NjcmlwdCkgLS0+XG48bm9zY3JpcHQ+PGlmcmFtZSBzcmM9XCJodHRwczovL3d3dy5nb29nbGV0YWdtYW5hZ2VyLmNvbS9ucy5odG1sP2lkPUdUTS1UUFFCUFdUMlwiXG5oZWlnaHQ9XCIwXCIgd2lkdGg9XCIwXCIgc3R5bGU9XCJkaXNwbGF5Om5vbmU7dmlzaWJpbGl0eTpoaWRkZW5cIj48L2lmcmFtZT48L25vc2NyaXB0PlxuPCEtLSBFbmQgR29vZ2xlIFRhZyBNYW5hZ2VyIChub3NjcmlwdCkgLS0+XG4ifV0=
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,